@adonoustech/bacon-tax 3.13.5 → 3.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/action-tems/action-tax-fragments.js +26 -1
- package/dist/cjs/action-tems/action-tax-subjects.js +2 -1
- package/dist/cjs/form-models/i-employee-compensation-model.js +1 -1
- package/dist/es/action-tems/action-tax-fragments.js +6 -1
- package/dist/es/action-tems/action-tax-subjects.js +2 -1
- package/dist/es/form-models/i-employee-compensation-model.js +1 -1
- package/dist/types/action-tems/action-tax-subjects.d.ts +2 -1
- package/dist/types/form-models/i-employee-compensation-model.d.ts +6 -0
- package/package.json +2 -2
- package/src/action-tems/action-tax-fragments.ts +25 -0
- package/src/action-tems/action-tax-subjects.ts +2 -1
- package/src/form-models/i-employee-compensation-model.ts +7 -0
|
@@ -2337,6 +2337,31 @@ exports.ActionTaxFragments = [
|
|
|
2337
2337
|
</ol>
|
|
2338
2338
|
|
|
2339
2339
|
<p>Please provide all applicable documentation to ensure we can accurately calculate your Reduced Tax on Tips deduction and verify eligibility requirements are met.</p>`
|
|
2340
|
+
},
|
|
2341
|
+
{
|
|
2342
|
+
actionTaxSubject: "Overtime Compensation Deduction",
|
|
2343
|
+
actionTitle: `Overtime Compensation Deduction Documentation (OBBBA)`,
|
|
2344
|
+
actionInstructions: `<p>Under the One Big Beautiful Bill Act (OBBBA) §70202, you may be eligible to deduct
|
|
2345
|
+
qualified overtime compensation paid in excess of your regular rate. This deduction is available for
|
|
2346
|
+
tax year 2025 and beyond.</p>
|
|
2347
|
+
<p>To claim this deduction, please provide:</p>
|
|
2348
|
+
<ol>
|
|
2349
|
+
<li><strong>Pay stubs or payroll records</strong> showing hours worked, regular rate, and overtime
|
|
2350
|
+
pay received during the tax year.</li>
|
|
2351
|
+
<li><strong>Time sheets or logs</strong> documenting hours worked in excess of 40 per week.</li>
|
|
2352
|
+
<li><strong>Form W-2</strong> - Check box 14 for separately reported overtime compensation
|
|
2353
|
+
(if provided by your employer).</li>
|
|
2354
|
+
<li><strong>Employment contract or employer statement</strong> confirming your FLSA-eligible
|
|
2355
|
+
(non-exempt) status and overtime calculation method.</li>
|
|
2356
|
+
</ol>
|
|
2357
|
+
<p><strong>Deduction Limits:</strong></p>
|
|
2358
|
+
<ul>
|
|
2359
|
+
<li>Maximum $12,500 for single filers</li>
|
|
2360
|
+
<li>Maximum $25,000 for married filing jointly</li>
|
|
2361
|
+
<li>Phase-out applies based on modified adjusted gross income (MAGI)</li>
|
|
2362
|
+
</ul>
|
|
2363
|
+
<p>If you are unsure of your FLSA eligibility or need help calculating qualified overtime,
|
|
2364
|
+
please contact us.</p>`
|
|
2340
2365
|
}
|
|
2341
2366
|
];
|
|
2342
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXRheC1mcmFnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uLXRlbXMvYWN0aW9uLXRheC1mcmFnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxrQkFBa0IsR0FBRztJQUNoQztRQUNFLGdCQUFnQixFQUFFLHdCQUF3QjtRQUMxQyxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLGtCQUFrQixFQUFFOzs7Ozs7OzsrSUFRdUg7S0FDNUk7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUseURBQXlEO1FBQ3RFLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dVBBMkIrTjtLQUNwUDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsbUNBQW1DO1FBQ2hELGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzhKQWFzSTtLQUMzSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7a1BBYTBOO0tBQy9PO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OzsySEFhbUc7S0FDeEg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs2T0FXcU47S0FDMU87SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Q0FTdkI7S0FDRTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JB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UUFDRSxnQkFBZ0IsRUFBRSwwQkFBMEI7UUFDNUMsV0FBVyxFQUFFLDBCQUEwQjtRQUN2QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dMQXFCd0o7S0FDN0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7K0RBa0J1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsdUJBQXVCO1FBQ3pDLFdBQVcsRUFBRSxtQ0FBbUM7UUFDaEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7O21MQWMySjtLQUNoTDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsa0NBQWtDO1FBQ3BELFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dQQTZCd047S0FDN087SUFDRDtRQUNFLGdCQUFnQixFQUFFLDBDQUEwQztRQUM1RCxXQUFXLEVBQUUsMkNBQTJDO1FBQ3hELGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7aVFBa0J5TztLQUM5UDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7eUhBa0JpRztLQUN0SDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUscUJBQXFCO1FBQ3ZDLFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7OzZLQWlCcUo7S0FDMUs7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFjdGlvblRheEZyYWdtZW50cyA9IFtcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpb3IgWWVhciBUYXggUmV0dXJuc1wiLFxuICAgIGFjdGlvblRpdGxlOiBgUHJvdmlkZSBQcmlvciBZZWFyIFRheCBSZXR1cm5zYCxcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIHJlcXVpcmUgeW91ciBhc3Npc3RhbmNlIHRvIGVuc3VyZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzLiBPbmUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gd2UgbmVlZCBpcyB5b3VyIDxzdHJvbmc+UHJpb3IgWWVhciBUYXggUmV0dXJuczwvc3Ryb25nPi4gVGhpcyBkb2N1bWVudCBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogdmVyaWZ5aW5nIGNhcnJ5LWZvcndhcmQgYW1vdW50cywgY29tcGFyaW5nIHllYXItb3Zlci15ZWFyIGluY29tZSBhbmQgZGVkdWN0aW9ucywgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cy48L3A+XG4gICAgPHA+VG8gZmFjaWxpdGF0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBjb3B5IG9mIHlvdXIgPHN0cm9uZz5GZWRlcmFsIHRheCByZXR1cm48L3N0cm9uZz4gZm9yIHRoZSBsYXN0IHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5BIGNvcHkgb2YgeW91ciA8c3Ryb25nPlN0YXRlIHRheCByZXR1cm48L3N0cm9uZz4gZm9yIHRoZSBsYXN0IHRheCB5ZWFyLCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgPHN0cm9uZz5ub3RpY2VzIG9yIGFtZW5kbWVudHM8L3N0cm9uZz4gcmVsYXRlZCB0byB5b3VyIHByaW9yIHllYXIgdGF4IHJldHVybnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBkaWZmaWN1bHR5IGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBsZXQgdXMga25vdyBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHdlIGNhbiBkaXNjdXNzIGFsdGVybmF0aXZlIHNvbHV0aW9ucy48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBQcm92aWRpbmcgdGhlc2Ugd2lsbCBlbmFibGUgdXMgdG8gY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24gd2l0aG91dCBkZWxheS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU3RhdHV0b3J5IEV4dGVuc2lvbnNcIixcbiAgICBhY3Rpb25UaXRsZTogYERldGVybWluaW5nIEVsaWdpYmlsaXR5IGZvciBTdGF0dXRvcnkgRmlsaW5nIEV4dGVuc2lvbnNgLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGVuc3VyZSB0aGF0IHdlIGNhbiBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB5b3UgcXVhbGlmeSBmb3Igc3RhdHV0b3J5IGZpbGluZyBleHRlbnNpb25zIGZvciB5b3VyIHRheCByZXR1cm5zLCB3ZSByZXF1aXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20geW91LiBQbGVhc2Ugc2VlIGJlbG93IHRoZSBjYXRlZ29yaWVzIG9mIGluZm9ybWF0aW9uIG5lZWRlZCBiYXNlZCBvbiBkaWZmZXJlbnQgZWxpZ2liaWxpdHkgY3JpdGVyaWE6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmVkZXJhbCBEaXNhc3RlciBBcmVhczwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBwcmltYXJ5IHJlc2lkZW5jZSBsb2NhdGlvbiBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFueSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIHJlY2VpdmVkIHJlZ2FyZGluZyBkaXNhc3RlciBkZWNsYXJhdGlvbnMgaW4geW91ciBhcmVhLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5MaXZpbmcgQWJyb2FkPC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlByb29mIG9mIHJlc2lkZW5jZSBvdXRzaWRlIHRoZSBVbml0ZWQgU3RhdGVzIGZvciBtb3JlIHRoYW4gMzMwIGZ1bGwgZGF5cyB3aXRoaW4gYSAxMi1tb250aCBwZXJpb2QuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIHlvdXIgcGh5c2ljYWwgcHJlc2VuY2Ugb3IgYm9uYSBmaWRlIHJlc2lkZW5jZSBpbiBhIGZvcmVpZ24gY291bnRyeS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWN0aXZlIE1pbGl0YXJ5PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gaW5kaWNhdGluZyBhY3RpdmUgZHV0eSBzdGF0dXMsIGluY2x1ZGluZyBkYXRlcyBvZiBzZXJ2aWNlIHdpdGhpbiB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+SWYgYXBwbGljYWJsZSwgb3JkZXJzIGZvciBvdmVyc2VhcyBkZXBsb3ltZW50LjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db21iYXQgWm9uZTwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5PZmZpY2lhbCBvcmRlcnMgZGVtb25zdHJhdGluZyB5b3VyIGRlcGxveW1lbnQgdG8gYSBjb21iYXQgem9uZSwgaW5jbHVkaW5nIHRoZSBzcGVjaWZpYyBkYXRlcy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbnkgcmVsZXZhbnQgY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBEZXBhcnRtZW50IG9mIERlZmVuc2Ugb3Igb3RoZXIgb2ZmaWNpYWwgYm9kaWVzIHJlZ2FyZGluZyB5b3VyIHNlcnZpY2UgaW4gYSBjb21iYXQgem9uZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIHRpbWVseSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGVwZW5kZW50c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlJlcXVlc3QgZm9yIERlcGVuZGVudCBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgZGVwZW5kZW50cy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhcHBseWluZyB0aGUgbW9zdCBiZW5lZmljaWFsIGRlcGVuZGVuY3kgdGVzdHMsIGluY2x1ZGluZyBxdWFsaWZpY2F0aW9ucyBmb3IgSGVhZCBvZiBIb3VzZWhvbGQgKEhPSCksIENoaWxkIFRheCBDcmVkaXQsIGFuZCBvdGhlciByZWxhdGVkIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggb2YgeW91ciBjbGFpbWVkIGRlcGVuZGVudHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RnVsbCBOYW1lOjwvc3Ryb25nPiBUaGUgY29tcGxldGUgbGVnYWwgbmFtZSBvZiB0aGUgZGVwZW5kZW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb3IgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyIChUSU4pOjwvc3Ryb25nPiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBCaXJ0aDo8L3N0cm9uZz4gSGVscHMgdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5IGZvciBjZXJ0YWluIGNyZWRpdHMgbGlrZSB0aGUgQ2hpbGQgVGF4IENyZWRpdC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5SZWxhdGlvbnNoaXAgdG8gWW91Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkZXBlbmRlbnQncyByZWxhdGlvbnNoaXAgKHNvbiwgZGF1Z2h0ZXIsIHN0ZXBjaGlsZCwgZm9zdGVyIGNoaWxkLCBicm90aGVyLCBzaXN0ZXIsIGV0Yy4pIHRvIHlvdS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5SZXNpZGVuY3k6PC9zdHJvbmc+IENvbmZpcm0gdGhlIGRlcGVuZGVudCBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgdGhlIHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIFN1cHBvcnQ6PC9zdHJvbmc+IENvbmZpcm0geW91IHByb3ZpZGVkIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBkZXBlbmRlbnTigJlzIGZpbmFuY2lhbCBzdXBwb3J0IGZvciB0aGUgeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5DaXRpemVuc2hpcDo8L3N0cm9uZz4gQ29uZmlybSB0aGUgZGVwZW5kZW50IGlzIGEgVS5TLiBjaXRpemVuLCBVLlMuIG5hdGlvbmFsLCBvciBhIHJlc2lkZW50IGFsaWVuLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBkZXBlbmRlbnQgaXMgbWFycmllZCBhbmQsIGlmIHNvLCB3aGV0aGVyIHRoZXkgYXJlIGZpbGluZyBqb2ludGx5LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkluY29tZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSBkZXRhaWxzIHJlZ2FyZGluZyBhbnkgaW5jb21lIHRoZSBkZXBlbmRlbnQgbWF5IGhhdmUgZWFybmVkIG9yIHJlY2VpdmVkLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBwcm92aWRlIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBpbmZvcm1hdGlvbiB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHRoZSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBmdXJ0aGVyIGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSGVhZCBvZiBIb3VzZWhvbGRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJIZWFkIG9mIEhvdXNlaG9sZCBGaWxpbmdcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsaWFudCB0YXggZmlsaW5nIHVuZGVyIHRoZSBcIkhlYWQgb2YgSG91c2Vob2xkXCIgc3RhdHVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiBUaGlzIHN0YXR1cyBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCB0YXggYmVuZWZpdHMsIGFuZCBpdCBpcyBjcnVjaWFsIHRoYXQgYWxsIElSUyByZXF1aXJlbWVudHMgYXJlIG1ldC4gUGxlYXNlIHByb3ZpZGU6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5NYXJpdGFsIFN0YXR1czo8L3N0cm9uZz4gQ29uZmlybWF0aW9uIG9mIHlvdXIgbWFyaXRhbCBzdGF0dXMgYXMgb2YgdGhlIGxhc3QgZGF5IG9mIHRoZSB0YXggeWVhciAoZS5nLiwgc2luZ2xlLCBkaXZvcmNlZCwgbGVnYWxseSBzZXBhcmF0ZWQpLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+SG91c2Vob2xkIEV4cGVuc2VzOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIGluZGljYXRpbmcgdGhhdCB5b3UgcGFpZCBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgY29zdHMgb2Yga2VlcGluZyB1cCBhIGhvbWUgZm9yIHRoZSB0YXggeWVhci4gVGhpcyBpbmNsdWRlcyByZW50LCBtb3J0Z2FnZSBpbnRlcmVzdCwgcHJvcGVydHkgdGF4ZXMsIHV0aWxpdGllcywgcmVwYWlycywgbWFpbnRlbmFuY2UsIGFuZCBncm9jZXJpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5RdWFsaWZ5aW5nIFBlcnNvbjo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHF1YWxpZnlpbmcgcGVyc29uKHMpIHdobyBsaXZlZCB3aXRoIHlvdSBpbiB0aGUgaG9tZSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHllYXIsIGV4Y2VwdCBmb3IgdGVtcG9yYXJ5IGFic2VuY2VzIHN1Y2ggYXMgc2Nob29sLiBQbGVhc2UgaW5jbHVkZTpcbiAgICAgIDx1bD5cbiAgICAgIDxsaT5GdWxsIG5hbWUgYW5kIHJlbGF0aW9uc2hpcCB0byB5b3UgKGUuZy4sIGNoaWxkLCBwYXJlbnQsIHNpYmxpbmcpLjwvbGk+XG4gICAgICA8bGk+RHVyYXRpb24gb2YgcmVzaWRlbmN5IGF0IHlvdXIgaG9tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICA8bGk+U3VwcG9ydGluZyBkb2N1bWVudHMgKGJpcnRoIGNlcnRpZmljYXRlcywgc2Nob29sIHJlY29yZHMsIGV0Yy4pIHByb3ZpbmcgdGhlIHJlc2lkZW5jeSBhbmQgcmVsYXRpb25zaGlwLjwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvbGk+XG4gICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBTdXBwb3J0Ojwvc3Ryb25nPiBBbnkgZnVydGhlciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgeW91ciBjbGFpbSBmb3IgdGhlIEhlYWQgb2YgSG91c2Vob2xkIGZpbGluZyBzdGF0dXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBub3RlIHRoYXQgcHJvdmlkaW5nIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIHlvdXIgYmVuZWZpdCBhbmQgdG8gY29tcGx5IHdpdGggdGF4IGxhd3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlc2lkZW5jeSBTdGF0dXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJJbmZvcm1hdGlvbiBvbiBSZXNpZGVuY3kgU3RhdHVzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IGVpdGhlciB5b3Ugb3IgeW91ciBzcG91c2UgaXMgbm90IGEgVS5TLiBjaXRpemVuLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB5b3VyIHRheCBzdGF0dXMsIHdlIG5lZWQgdG8gYXBwbHkgdGhlIG5lY2Vzc2FyeSBUYXggUmVzaWRlbmN5IFRlc3RzLCB3aGljaCBpbmNsdWRlIHRoZSA8c3Ryb25nPkdyZWVuIENhcmQgVGVzdDwvc3Ryb25nPiBhbmQgdGhlIDxzdHJvbmc+U3Vic3RhbnRpYWwgUHJlc2VuY2UgVGVzdDwvc3Ryb25nPi4gVGhpcyB3aWxsIGhlbHAgdXMgZW5zdXJlIHlvdXIgdGF4IHJldHVybnMgYXJlIGNvbXBsZXRlZCBjb3JyZWN0bHkgYW5kIGNvbXBseSB3aXRoIFUuUy4gcmVndWxhdGlvbnMuPC9wPlxuXG4gICAgPHA+VG8gcHJvY2VlZCwgd2Uga2luZGx5IGFzayB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkdyZWVuIENhcmQgU3RhdHVzOjwvc3Ryb25nPiBQbGVhc2UgY29uZmlybSBpZiB5b3Ugb3IgeW91ciBzcG91c2UgaGF2ZSBiZWVuIGlzc3VlZCBhIFUuUy4gZ3JlZW4gY2FyZCAoTGF3ZnVsIFBlcm1hbmVudCBSZXNpZGVudCBDYXJkKSBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSB0YXggeWVhci4gSWYgeWVzLCBwcm92aWRlIGEgY29weSBvZiB0aGUgZ3JlZW4gY2FyZCBvciB0aGUgb2ZmaWNpYWwgZG9jdW1lbnQgY29uZmlybWluZyB0aGUgc3RhdHVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgQXJyaXZhbCBpbiB0aGUgVS5TLjo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGVzIHdoZW4geW91IGFuZC9vciB5b3VyIHNwb3VzZSBmaXJzdCBhcnJpdmVkIGluIHRoZSBVLlMuIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VHJhdmVsIEhpc3Rvcnk6PC9zdHJvbmc+IEEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgdGhlIGRhdGVzIHlvdSBhbmQvb3IgeW91ciBzcG91c2UgZW50ZXJlZCBhbmQgbGVmdCB0aGUgVS5TLiBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHRoZSBTdWJzdGFudGlhbCBQcmVzZW5jZSBUZXN0LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlZpc2EgVHlwZTo8L3N0cm9uZz4gSWYgeW91IG9yIHlvdXIgc3BvdXNlIGFyZSBvbiBhIHZpc2EsIHBsZWFzZSBzcGVjaWZ5IHRoZSB0eXBlIGFuZCBwcm92aWRlIGEgY29weSBvZiB0aGUgdmlzYS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFRheCBGaWxpbmdzOjwvc3Ryb25nPiBDb3BpZXMgb2YgbGFzdCB5ZWFyJ3MgdGF4IHJldHVybnMsIGlmIGFwcGxpY2FibGUuIFRoaXMgaW5mb3JtYXRpb24gY2FuIHByb3ZpZGUgY29udGV4dCBhbmQgaGVscCBkZXRlcm1pbmUgcmVzaWRlbmN5IHN0YXR1cyBtb3JlIGFjY3VyYXRlbHkuPC9saT5cbiAgICA8L29sPlxuXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhciBhbmQgbGVnaWJsZS4gWW91IGNhbiBzZW5kIHRoZW0gdG8gdXMgdmlhIGVtYWlsIG9yIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBGb3IgYW55IHF1ZXN0aW9ucyBvciBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XG5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3Ugd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbi48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSm9pbnQgVGF4IFJlbGllZlwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkpvaW50IFRheCBSZWxpZWYgRGV0YWlsc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGFzc2lzdCB5b3UgZWZmZWN0aXZlbHkgd2l0aCB5b3VyIHJlcXVlc3QgZm9yIGpvaW50IHRheCByZWxpZWYsIHdlIG5lZWQgdG8gY29sbGVjdCBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIHlvdXIgc2l0dWF0aW9uIHRob3JvdWdobHkuIFRoaXMgd2lsbCBoZWxwIHVzIGRldGVybWluZSB0aGUgbW9zdCBzdWl0YWJsZSB0eXBlIG9mIHJlbGllZiBmb3IgeW91ciBjaXJjdW1zdGFuY2VzLCB3aGljaCBtYXkgaW5jbHVkZSBJbm5vY2VudCBTcG91c2UgUmVsaWVmLCBJbmp1cmVkIFNwb3VzZSBBbGxvY2F0aW9uLCBTZXBhcmF0aW9uIG9mIExpYWJpbGl0eSBSZWxpZWYsIG9yIEVxdWl0YWJsZSBSZWxpZWYuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+PHN0cm9uZz5Db21wbGV0ZSBUYXggUmV0dXJuczo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCB0YXggcmV0dXJucyBmb3IgdGhlIHllYXJzIHlvdSBhcmUgcmVxdWVzdGluZyByZWxpZWYuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIFN0YXRlbWVudDo8L3N0cm9uZz4gQSB3cml0dGVuIHN0YXRlbWVudCBleHBsYWluaW5nIHdoeSB5b3UgYmVsaWV2ZSB5b3UgcXVhbGlmeSBmb3IgcmVsaWVmLCBpbmNsdWRpbmcgYW55IHNwZWNpZmljIGV2ZW50cyBvciBjaXJjdW1zdGFuY2VzIHlvdSB3YW50IHVzIHRvIGNvbnNpZGVyLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gUHJvb2Ygb2YgeW91ciBjdXJyZW50IGluY29tZSBhbmQgdGhhdCBvZiB5b3VyIHNwb3VzZSBpZiBhcHBsaWNhYmxlLCBzdWNoIGFzIHJlY2VudCBwYXkgc3R1YnMsIFctMiBmb3Jtcywgb3Igb3RoZXIgaW5jb21lIHN0YXRlbWVudHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZpbmFuY2lhbCBTaXR1YXRpb246PC9zdHJvbmc+IERvY3VtZW50cyBzaG93aW5nIHlvdXIgY3VycmVudCBmaW5hbmNpYWwgc2l0dWF0aW9uLCBpbmNsdWRpbmcgYmFuayBzdGF0ZW1lbnRzLCBtb250aGx5IGJpbGxzLCBhbmQgYW55IG90aGVyIGxpYWJpbGl0aWVzLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIE1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBsZWdhbCBkb2N1bWVudHMgcmVsYXRlZCB0byBzZXBhcmF0aW9uLCBkaXZvcmNlLCBvciBhbm51bG1lbnQuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jZTo8L3N0cm9uZz4gRG9jdW1lbnRzIHRoYXQgcHJvdmUgd2hlcmUgZWFjaCBvZiB5b3UgaGFzIGxpdmVkIGR1cmluZyB0aGUgdGF4IHllYXJzIGluIHF1ZXN0aW9uLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5BbnkgQ29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgSVJTOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSByZWNlaXZlZCBhbnkgbm90aWNlcyBvciBsZXR0ZXJzIGZyb20gdGhlIElSUyByZWdhcmRpbmcgeW91ciBqb2ludCB0YXggbGlhYmlsaXR5LCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXJseSBsZWdpYmxlLiBZb3UgbWF5IHNlbmQgdGhlbSB2aWEgZW1haWwsIG9yIHVwbG9hZC4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHRvIHByb3ZpZGUsIGRvbid0IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XG4gICAgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHRoaXMgcHJvY2VzcyBjYW4gYmUgY29tcGxleCwgYnV0IHdlIGFyZSBoZXJlIHRvIGd1aWRlIHlvdSB0aHJvdWdoIGl0LiBPdXIgZ29hbCBpcyB0byBlbnN1cmUgd2UgaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB5b3VyIHNpdHVhdGlvbiB0byBhZHZvY2F0ZSBmb3IgdGhlIG1vc3QgZmF2b3JhYmxlIG91dGNvbWUgb24geW91ciBiZWhhbGYuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIjEwOTkgTkVDIEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIjEwOTkgTkVDIEluY29tZVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCByZXF1aXJlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCB5b3VyIHNvdXJjZXMgb2YgaW5jb21lLiBTcGVjaWZpY2FsbHksIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgeW91ciAxMDk5IE5FQyBJbmNvbWUuIFRoZSAxMDk5LU5FQyBmb3JtIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSByZXBvcnRpbmcgeW91ciBub24tZW1wbG95ZWUgY29tcGVuc2F0aW9uLjwvcD5cbiAgICA8cD5UbyBlbnN1cmUgYSB0aG9yb3VnaCBhbmQgYWNjdXJhdGUgdGF4IHByZXBhcmF0aW9uLCBwbGVhc2UgcHJvdmlkZSB1cyB3aXRoIHRoZSBmb2xsb3dpbmc6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxiPkFsbCAxMDk5LU5FQyBmb3JtczwvYj4geW91IHJlY2VpdmVkIGZvciB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxiPmFkZGl0aW9uYWwgbm9uLWVtcGxveWVlIGNvbXBlbnNhdGlvbjwvYj4gbm90IHJlcG9ydGVkIG9uIGEgMTA5OS1ORUMgZm9ybS48L2xpPlxuICAgICAgICA8bGk+SW5mb3JtYXRpb24gcmVnYXJkaW5nIDxiPmV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciAxMDk5IE5FQyBpbmNvbWU8L2I+LCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBub3QgeWV0IHJlY2VpdmVkIGFsbCB5b3VyIDEwOTktTkVDIGZvcm1zLCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCBwcm92aWRlIGFuIGVzdGltYXRlIG9mIHdoZW4geW91IGV4cGVjdCB0byByZWNlaXZlIHRoZW0uIFRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgaW5jb21lIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgcGVuYWx0aWVzIG9yIGF1ZGl0cyBmcm9tIHRoZSBJUlMuPC9wPlxuICAgIDxwPlBsZWFzZSByZWFjaCBvdXQgdG8gdXMgZGlyZWN0bHkgc2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24uIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBwcm9jZXNzZWQgZWZmaWNpZW50bHkgYW5kIGFjY3VyYXRlbHkuPC9wPlxuYCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2NoZWR1bGUgSy0xIEluZm9ybWF0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2NoZWR1bGUgSy0xIEluZm9ybWF0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCB0aGUgcHJlc2VuY2Ugb2YgU2NoZWR1bGUgSyBpbmNvbWUgZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBJbiBvcmRlciB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCBpdCBpcyBpbXBlcmF0aXZlIHRoYXQgd2UgZ2F0aGVyIGFsbCBuZWNlc3NhcnkgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBpbmNvbWUuPC9wPlxuICAgIDxwPklmIHdlIGFyZSBwcmVwYXJpbmcgeW91ciBidXNpbmVzcyByZXR1cm4sIHJlc3QgYXNzdXJlZCB0aGF0IHdlIHdpbGwgZ2VuZXJhdGUgdGhlIGFwcGxpY2FibGUgU2NoZWR1bGUgSy0xKHMpIGZvciB5b3VyIGJ1c2luZXNzIGludGVyZXN0cy4gSG93ZXZlciwgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgY29sbGVjdCBjb3BpZXMgb2YgPHN0cm9uZz5hbGwgb3RoZXIgU2NoZWR1bGUgSy0xczwvc3Ryb25nPiB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgdG8gaW5jb3Jwb3JhdGUgaW50byB5b3VyIHBlcnNvbmFsIHRheCByZXR1cm4uPC9wPiAgXG4gICAgPGgzPlNwZWNpZmljIERvY3VtZW50IFJlcXVlc3Q6PC9oMz5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5BbnkgYW5kIGFsbCBTY2hlZHVsZSBLLTEocykgeW91IGhhdmUgcmVjZWl2ZWQgZnJvbTo8L2xpPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgICA8bGk+UGFydG5lcnNoaXBzPC9saT5cbiAgICAgICAgICAgIDxsaT5TIENvcnBvcmF0aW9uczwvbGk+XG4gICAgICAgICAgICA8bGk+RXN0YXRlIG9yIFRydXN0czwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgPHN0cm9uZz5jbGVhciBhbmQgbGVnaWJsZTwvc3Ryb25nPiB0byBwcmV2ZW50IGFueSBkZWxheXMgaW4gcHJvY2Vzc2luZyB5b3VyIHJldHVybi4gWW91IG1heSBzdWJtaXQgdGhlc2UgZG9jdW1lbnRzIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLCBvciBjb250YWN0IHVzIHRvIG1ha2UgYWx0ZXJuYXRpdmUgYXJyYW5nZW1lbnRzIGlmIG5lY2Vzc2FyeS48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFueSBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiT3RoZXIgU2VsZi1FbXBsb3ltZW50IEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk90aGVyIFNlbGYtRW1wbG95bWVudCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdGhlIHByZXNlbmNlIG9mIHNlbGYtZW1wbG95bWVudCBpbmNvbWUgbm90IHJlcG9ydGVkIHRocm91Z2ggMTA5OS1ORUMgZm9ybXMgb3IgYSBTY2hlZHVsZSBLLTEuIFRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgYWNjdXJhdGUgYW5kIG1heGltaXplcyB5b3VyIGJlbmVmaXRzLCBpdCdzIGNydWNpYWwgd2UgZ2F0aGVyIG1vcmUgZGV0YWlscyBhYm91dCB0aGVzZSBzb3VyY2VzIG9mIGluY29tZS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eTo8L3N0cm9uZz4gQnJpZWZseSBkZXNjcmliZSB0aGUgbmF0dXJlIG9mIGVhY2ggYWN0aXZpdHkgZnJvbSB3aGljaCB5b3UgZGVyaXZlIHNlbGYtZW1wbG95bWVudCBpbmNvbWUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2Ygb3BlcmF0aW9uOjwvc3Ryb25nPiBGb3IgZWFjaCBzZWxmLWVtcGxveW1lbnQgYWN0aXZpdHksIHNwZWNpZnkgdGhlIGRhdGVzIG9yIHJhbmdlIG9mIGRhdGVzIGR1cmluZyB3aGljaCB5b3UgZWFybmVkIGluY29tZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBpbmNvbWUgZ2VuZXJhdGVkOjwvc3Ryb25nPiBGb3IgZWFjaCBhY3Rpdml0eSwgcHJvdmlkZSB0aGUgdG90YWwgYW1vdW50IG9mIGluY29tZSBlYXJuZWQgYmVmb3JlIGFueSBleHBlbnNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBpbmN1cnJlZDo8L3N0cm9uZz4gTGlzdCBhbGwgZXhwZW5zZXMgcmVsYXRlZCB0byBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eS4gUGxlYXNlIGNhdGVnb3JpemUgdGhlc2UgZXhwZW5zZXMgKGUuZy4sIG9mZmljZSBzdXBwbGllcywgdHJhdmVsLCBhZHZlcnRpc2luZykuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVjb3JkcyBvciBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZXhpc3RpbmcgcmVjb3JkcyBvciBkb2N1bWVudGF0aW9uIHRoYXQgY29ycm9ib3JhdGUgeW91ciBpbmNvbWUgYW5kIGV4cGVuc2VzLCBzdWNoIGFzIGJhbmsgc3RhdGVtZW50cywgcmVjZWlwdHMsIGludm9pY2VzLCBvciBjb250cmFjdHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IGFtb3VudCBvZiB0YXggeW91IG93ZSBhbmQgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBkZWR1Y3Rpb25zIHRoYXQgY2FuIG1pbmltaXplIHlvdXIgdGF4IGxpYWJpbGl0eS4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHRpbWVseSBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLCBhbmQgd2UgYXJlIGhlcmUgdG8gaGVscCBldmVyeSBzdGVwIG9mIHRoZSB3YXkuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVtcGxveW1lbnQgV2FnZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJFbXBsb3ltZW50IFdhZ2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBlbnRydXN0aW5nIHVzIHdpdGggdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIEFzIHBhcnQgb2Ygb3VyIGNvbXByZWhlbnNpdmUgcmV2aWV3IGFuZCBpbiBvdXIgcXVlc3QgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgd2FnZXMgZnJvbSBlbXBsb3ltZW50IG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuPC9wPlxuICAgIDxwPlRvIHByb2NlZWQgZWZmZWN0aXZlbHksIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5XLTIgRm9ybXM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGNvcGllcyBvZiBhbGwgVy0yIGZvcm1zIHJlY2VpdmVkIGZyb20geW91ciBlbXBsb3llcnMuIFRoaXMgaW5jbHVkZXMgd2FnZXMgZWFybmVkIGZyb20gYWxsIHNvdXJjZXMsIG5vdCBqdXN0IGZyb20gdGhlIFMtQ29ycG9yYXRpb24sIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VmVyaWZpY2F0aW9uIG9mIFMtQ29ycG9yYXRpb24gV2FnZXM6PC9zdHJvbmc+IElmIHdlIGFyZSBhbHNvIGhhbmRsaW5nIHlvdXIgYnVzaW5lc3MgdGF4ZXMgZm9yIGFuIFMtQ29ycG9yYXRpb24sIHdlIGxpa2VseSBoYXZlIHRoZSB3YWdlIGluZm9ybWF0aW9uIGZvciB0aGF0IGVudGl0eS4gSG93ZXZlciwgZm9yIHRob3JvdWdobmVzcyBhbmQgY29tcGxpYW5jZSwgcGxlYXNlIGNvbmZpcm0gaWYgdGhlIHdhZ2VzIGZyb20gdGhlIFMtQ29ycG9yYXRpb24gYXJlIGZ1bGx5IHJlcHJlc2VudGVkIGluIHRoZSBkb2N1bWVudHMgd2UgYWxyZWFkeSBob2xkLiBUaGlzIHdpbGwgaGVscCB1cyB2ZXJpZnkgdGhhdCBhbGwgaW5jb21lIGlzIGFjY3VyYXRlbHkgcmVwb3J0ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBJbmNvbWUgRG9jdW1lbnRzOjwvc3Ryb25nPiBTaG91bGQgeW91IGhhdmUgb3RoZXIgc291cmNlcyBvZiB3YWdlIGluY29tZSAoZS5nLiwgY29udHJhY3Qgd29yaywgYm9udXNlcywgZXRjLikgbm90IGNvdmVyZWQgYnkgdGhlIFctMiBmb3JtcyBwcm92aWRlZCwgcGxlYXNlIGluY2x1ZGUgYW55IDEwOTkgZm9ybXMgb3Igb3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBLaW5kbHkgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJvcGVydHkgb3IgU2VydmljZXMgTGlldSBXYWdlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlByb3BlcnR5L1NlcnZpY2VzIGluIExpZXUgb2YgV2FnZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgcHJvcGVydHkgYW5kL29yIHNlcnZpY2VzIGluIGxpZXUgb2YgdHJhZGl0aW9uYWwgd2FnZXMgZHVyaW5nIHRoZSB0YXggeWVhci4gVGhpcyB0eXBlIG9mIGNvbXBlbnNhdGlvbiBjb25zdGl0dXRlcyB0YXhhYmxlIGluY29tZSBhbmQgbXVzdCBiZSBhY2N1cmF0ZWx5IHJlcG9ydGVkIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgZnVsbHkgY29tcGxpYW50IHdpdGggSVJTIHJlZ3VsYXRpb25zLjwvcD5cbiAgICA8cD5UbyBhY2N1cmF0ZWx5IHJlY29nbml6ZSBhbmQgcmVwb3J0IHRoZXNlIGl0ZW1zIGFzIHRheGFibGUgaW5jb21lLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBQcm9wZXJ0eSBvciBTZXJ2aWNlczo8L3N0cm9uZz4gUHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGFueSBwcm9wZXJ0eSBvciBzZXJ2aWNlcyB5b3UgcmVjZWl2ZWQuIFBsZWFzZSBpbmNsdWRlIHBoeXNpY2FsIGNoYXJhY3RlcmlzdGljcyBmb3IgcHJvcGVydHkgb3IgdGhlIHNjb3BlIG9mIHNlcnZpY2VzIHJlbmRlcmVkLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+RmFpciBNYXJrZXQgVmFsdWUgYXQgVGltZSBvZiBSZWNlaXB0Ojwvc3Ryb25nPiBJbmRpY2F0ZSB0aGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBwcm9wZXJ0eSBvciBzZXJ2aWNlIGF0IHRoZSB0aW1lIHlvdSByZWNlaXZlZCBpdC4gSWYgeW91IGhhdmUgYW55IGFwcHJhaXNhbHMgb3IgZG9jdW1lbnRzIHRvIHN1cHBvcnQgdGhlIEZNViwgcGxlYXNlIGluY2x1ZGUgdGhlbS48L2xpPlxuICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb3IgQWdyZWVtZW50czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZG9jdW1lbnRhdGlvbiBvciB3cml0dGVuIGFncmVlbWVudHMgdGhhdCBkZXRhaWwgdGhlIGFycmFuZ2VtZW50IGZvciByZWNlaXZpbmcgcHJvcGVydHkgb3Igc2VydmljZXMgaW4gbGlldSBvZiB3YWdlcy4gVGhpcyBjYW4gaW5jbHVkZSBjb250cmFjdHMsIGVtYWlscywgb3IgYW55IGZvcm0gb2YgY29tbXVuaWNhdGlvbiB0aGF0IG91dGxpbmVzIHRoZSBhZ3JlZW1lbnQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUocykgb24gd2hpY2ggeW91IHJlY2VpdmVkIHRoZSBwcm9wZXJ0eSBvciBzZXJ2aWNlcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPkVtcGxveWVyL1Byb3ZpZGVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IHByb3ZpZGVkIHRoZSBwcm9wZXJ0eSBvciBzZXJ2aWNlcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgYXMgcG9zc2libGUuIEluY29tcGxldGUgb3IgaW5hY2N1cmF0ZSBpbmZvcm1hdGlvbiBtYXkgbGVhZCB0byBkZWxheXMgaW4gdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybiBvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhlIElSUy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gcmVnYXJkaW5nIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gWW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBjcml0aWNhbCBmb3IgdGhlIHRpbWVseSBhbmQgYWNjdXJhdGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVtcGxveWVlIEFjY291bnRhYmxlIFBsYW5cIixcbiAgICBhY3Rpb25UaXRsZTogXCJFbXBsb3llZSBBY2NvdW50YWJsZSBQbGFuXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGljZWQgeW91J3ZlIG1lbnRpb25lZCBiZWluZyByZWltYnVyc2VkIGZvciBjZXJ0YWluIGV4cGVuc2VzIHVuZGVyIGFuIEVtcGxveWVlIEFjY291bnRhYmxlIFBsYW4uIFRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcmVpbWJ1cnNlbWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkEgY29weSBvZiB0aGUgZm9ybWFsIHdyaXR0ZW4gQWNjb3VudGFibGUgUGxhbiBwcm92aWRlZCBieSB5b3VyIGVtcGxveWVyLiBUaGlzIHNob3VsZCBvdXRsaW5lIHRoZSBleHBlbnNlIGFsbG93YW5jZSBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcmVpbWJ1cnNlbWVudCBwb2xpY3kuPC9saT5cbiAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIGZyb20geW91ciBlbXBsb3llciBjb25maXJtaW5nIHlvdXIgcGFydGljaXBhdGlvbiBpbiB0aGUgQWNjb3VudGFibGUgUGxhbi48L2xpPlxuICAgICAgICA8bGk+RGV0YWlscyBvZiB0aGUgZXhwZW5zZXMgcmVpbWJ1cnNlZCB1bmRlciB0aGUgcGxhbiwgaW5jbHVkaW5nIGRhdGVzLCBhbW91bnRzLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPlByb29mIG9mIGV4cGVuc2UgKHJlY2VpcHRzIG9yIGludm9pY2VzKSBwcm92aWRlZCB0byB5b3VyIGVtcGxveWVyIGZvciByZWltYnVyc2VtZW50IHVuZGVyIHRoZSBwbGFuLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIG9yIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIHRoZSByZWltYnVyc2VtZW50cyBvciB0aGUgQWNjb3VudGFibGUgUGxhbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHNlbmQgdXMgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB3ZSBjYW4gcHJvY2VlZCBzbW9vdGhseSB3aXRoIHlvdXIgdGF4IHJldHVybiBwcmVwYXJhdGlvbi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZW5zdXJpbmcgYWxsIGZvcm1zIG9mIGNvbXBlbnNhdGlvbiwgaW5jbHVkaW5nIHRheGFibGUgZnJpbmdlIGJlbmVmaXRzLCBhcmUgYWNjdXJhdGVseSByZXBvcnRlZCBvbiB5b3VyIHRheCByZXR1cm5zLiBCYXNlZCBvbiBvdXIgcHJldmlvdXMgY29tbXVuaWNhdGlvbiwgaXQgYXBwZWFycyB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgYmVuZWZpdHMgdGhhdCBuZWVkIHRvIGJlIHJldmlld2VkIGZ1cnRoZXIuIFRvIGFzc2lzdCB5b3UgcHJvcGVybHksIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBkZXRhaWxzOjwvcD5cbjxvbD5cbiAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgZWFjaCBiZW5lZml0IHJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBmcmluZ2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21wYW55IGNhcnMsIG1lbWJlcnNoaXBzLCBlZHVjYXRpb25hbCBhc3Npc3RhbmNlLCBldGMuPC9saT5cbiAgPGxpPjxzdHJvbmc+VmFsdWUgb2YgZWFjaCBiZW5lZml0Ojwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBiZW5lZml0LiBJZiB5b3UncmUgdW5zdXJlLCBwbGVhc2UgcHJvdmlkZSBhbiBlc3RpbWF0ZSBhbmQgdGhlIGJhc2lzIGZvciB0aGlzIGVzdGltYXRlLjwvbGk+XG4gIDxsaT48c3Ryb25nPkFueSBhbW91bnRzIGNvbnRyaWJ1dGVkIGJ5IHlvdTo8L3N0cm9uZz4gSWYgeW91IG1hZGUgY29udHJpYnV0aW9ucyB0b3dhcmQgdGhlIGNvc3Qgb2YgYW55IGJlbmVmaXQsIHBsZWFzZSBzcGVjaWZ5IHRoZSBhbW91bnRzIGFuZCBmb3Igd2hpY2ggYmVuZWZpdHMuPC9saT5cbiAgPGxpPjxzdHJvbmc+QmVuZWZpdCBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHN1Y2ggYXMgc3RhdGVtZW50cywgYWdyZWVtZW50cywgb3IgcmVjZWlwdHMuPC9saT5cbiAgPGxpPjxzdHJvbmc+RGF0ZXM6PC9zdHJvbmc+IFRoZSBwZXJpb2QgZHVyaW5nIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBiZW5lZml0cy4gSW5jbHVkZSBzcGVjaWZpYyBkYXRlcyBpZiBwb3NzaWJsZS48L2xpPlxuICA8bGk+PHN0cm9uZz5FbXBsb3llciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGVtcGxveWVyKHMpIHByb3ZpZGluZyB0aGVzZSBiZW5lZml0cy48L2xpPlxuPC9vbD5cbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyB0aGUgdGF4YWJsZSB2YWx1ZSBvZiB0aGVzZSBmcmluZ2UgYmVuZWZpdHMgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG48cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTm9uIFRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uIFRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGZpbmFsaXppbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIGlkZW50aWZpZWQgcG90ZW50aWFsIG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyB0aGF0IG1heSBhcHBseSB0byB5b3VyIHNpdHVhdGlvbi4gVG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgb3B0aW1pemUgeW91ciB0YXggb3V0Y29tZSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYW55IG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQ6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIGVhY2ggYmVuZWZpdDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgbWF5IGluY2x1ZGUgaGVhbHRoIHNhdmluZ3MgYWNjb3VudHMgKEhTQXMpLCBlbXBsb3llZSBkaXNjb3VudHMsIHB1YmxpYyB0cmFuc2l0IHBhc3NlcywgZXRjLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5WYWx1ZSBvZiBlYWNoIGJlbmVmaXQ6PC9zdHJvbmc+IFRoZSBmYWlyIG1hcmtldCB2YWx1ZSAoRk1WKSBvZiBlYWNoIGJlbmVmaXQuIEZvciBub24tdGF4YWJsZSBiZW5lZml0cywgdGhpcyBoZWxwcyBpbiByZWNvcmQta2VlcGluZyBhbmQgY29uZmlybWluZyBleGVtcHRpb24gc3RhdHVzLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Db250cmlidXRpb24gYW1vdW50cywgaWYgYW55Ojwvc3Ryb25nPiBJZiB5b3UgaGF2ZSBjb250cmlidXRlZCB0b3dhcmRzIGFueSBvZiB0aGVzZSBiZW5lZml0cywgaW5kaWNhdGUgdGhlIGFtb3VudHMgYW5kIGZvciB3aGljaCBiZW5lZml0cy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+QmVuZWZpdCBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBjb3Jyb2JvcmF0ZSB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHN1Y2ggYXMgc3RhdGVtZW50cywgYWdyZWVtZW50cywgb3IgcmVjZWlwdHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSB0aW1lZnJhbWUgZHVyaW5nIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBiZW5lZml0cy4gSW5jbHVkZSBhcyBwcmVjaXNlIGRhdGVzIGFzIHBvc3NpYmxlLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBvciBwcm92aWRlciBpbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgYW5kIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgZW1wbG95ZXIocykgb3IgdGhpcmQtcGFydHkgcHJvdmlkZXIocykgb2ZmZXJpbmcgdGhlc2UgYmVuZWZpdHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uIGhlbHBzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCB0aGF0IHlvdSByZWNlaXZlIHRoZSBmdWxsIGFkdmFudGFnZSBvZiBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMuIFBsZWFzZSBsZXQgdXMga25vdyBpZiB5b3UgbmVlZCBhbnkgaGVscCBpZGVudGlmeWluZyBvciBkb2N1bWVudGluZyB0aGVzZSBiZW5lZml0cy48L3A+XG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgaGlnaGx5IGFwcHJlY2lhdGVkIGFzIHdlIHN0cml2ZSB0byBjb21wbGV0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJWZXRlcmFuIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiVkEgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnQgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IHJldHVybiwgd2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIFZldGVyYW4gQmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYmVuZWZpdHMsIHdlIGtpbmRseSByZXF1ZXN0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxuICAgIDxwPlRvIGFzc2lzdCB1cyBpbiB0aGlzIHRhc2ssIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiB0aGUgVmV0ZXJhbiBCZW5lZml0cyB5b3UgcmVjZWl2ZWQsIGluY2x1ZGluZyBhbnkgZGlzYWJpbGl0eSwgZWR1Y2F0aW9uLCBhbmQgcGVuc2lvbiBiZW5lZml0cy48L2xpPlxuICAgICAgICA8bGk+T2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCB0eXBlIG9mIGJlbmVmaXQgcmVjZWl2ZWQsIHN1Y2ggYXMgYXdhcmQgbGV0dGVycyBvciBzdGF0ZW1lbnRzIGZyb20gdGhlIERlcGFydG1lbnQgb2YgVmV0ZXJhbnMgQWZmYWlycyAoVkEpLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgY29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgVkEgb3Igb3RoZXIgcmVsZXZhbnQgZW50aXRpZXMgcmVnYXJkaW5nIHRoZSB0YXhhYmlsaXR5IG9mIHlvdXIgYmVuZWZpdHMuPC9saT5cbiAgICAgICAgPGxpPlRvdGFsIGFtb3VudCByZWNlaXZlZCBmb3IgZWFjaCBiZW5lZml0IHRocm91Z2hvdXQgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5Bbnkgb3RoZXIgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHByb3ZpZGUgY2xhcml0eSBvbiB0aGUgbmF0dXJlIGFuZCBhbW91bnQgb2YgeW91ciBWZXRlcmFuIEJlbmVmaXRzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHdoaWNoIGJlbmVmaXRzIGFyZSB0YXhhYmxlIGFuZCBlbnN1cmluZyB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGUgYW5kIGFjY3VyYXRlLiBQbGVhc2Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMaWZlIEluc3VyYW5jZSBQYXltZW50c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkxpZmUgSW5zdXJhbmNlIFBheW1lbnRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIG1lbnRpb24gb2YgcmVjZWl2aW5nIGxpZmUgaW5zdXJhbmNlIHBheW1lbnRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgdGhlc2UgcHJvY2VlZHMgYXJlIGluZGVlZCBub24tdGF4YWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHJlY2VpdmVkIGZyb20gbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMuPC9saT5cbiAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgcGVydGFpbmluZyB0byB0aGUgbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMuPC9saT5cbiAgICAgIDxsaT5UaGUgbmFtZSBvZiB0aGUgaW5zdXJlZCBpbmRpdmlkdWFsIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XG4gICAgICA8bGk+QW55IGNvbW11bmljYXRpb25zIG9yIGxldHRlcnMgZnJvbSB0aGUgaW5zdXJhbmNlIGNvbXBhbnkgcmVnYXJkaW5nIHRoZSB0YXggc3RhdHVzIG9mIHRoZXNlIHBheW1lbnRzLjwvbGk+XG4gICAgICA8bGk+RGV0YWlscyByZWdhcmRpbmcgaWYgdGhlIHBvbGljeSB3YXMgcHVyY2hhc2VkIHdpdGggYWZ0ZXItdGF4IG9yIHByZS10YXggZG9sbGFycy48L2xpPlxuICAgICAgPGxpPklmIGFueSBwb3J0aW9uIG9mIHRoZSBsaWZlIGluc3VyYW5jZSBwYXltZW50IHdhcyBhbiBpbnZlc3RtZW50IHJldHVybiwgcGxlYXNlIHByb3ZpZGUgcmVsYXRlZCBkb2N1bWVudHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gZ3VhcmFudGVlIHRoZSBhY2N1cmFjeSBhbmQgaW50ZWdyaXR5IG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zLCB3ZSBub3RlZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIE1lZGljYXJlIFdhaXZlciBQYXltZW50cyB1bmRlciB0aGUgZGlmZmljdWx0eS1vZi1jYXJlIHByb3Zpc2lvbnMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gZW5zdXJlIHdlIG1heGltaXplIHlvdXIgZWxpZ2libGUgaW5jb21lIGV4Y2x1c2lvbnMsIGl0J3MgY3J1Y2lhbCB3ZSB2ZXJpZnkgY2VydGFpbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBsaXZpbmcgYXJyYW5nZW1lbnQsIGFzIHBlciBJUlMgZ3VpZGVsaW5lcy48L3A+XG4gICAgPHA+VG8gYXNzaXN0IHVzIGluIGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBwYXltZW50cyBxdWFsaWZ5IGZvciBpbmNvbWUgZXhjbHVzaW9uLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jZTo8L3N0cm9uZz4gRG9jdW1lbnRzIHByb3ZpbmcgdGhhdCB5b3UgYW5kIHRoZSBpbmRpdmlkdWFsIHVuZGVyIGNhcmUgc2hhcmVkIHRoZSBzYW1lIHByaW1hcnkgcmVzaWRlbmNlIGR1cmluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBwYXltZW50cy4gVGhpcyBjb3VsZCBpbmNsdWRlIHV0aWxpdHkgYmlsbHMsIGEgcmVudGFsIGFncmVlbWVudCwgb3IgaG9tZW93bmVyJ3MgaW5zdXJhbmNlIGluIGJvdGggb2YgeW91ciBuYW1lcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBDYXJlIFJlY2lwaWVudDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlcnNvbiByZWNlaXZpbmcgY2FyZSwgaW5jbHVkaW5nIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UgYW5kIGFueSBkb2N1bWVudGF0aW9uIHRoYXQgaWRlbnRpZmllcyB0aGVpciBuZWVkIGZvciBjYXJlIChlLmcuLCBhIGxldHRlciBmcm9tIGEgaGVhbHRoY2FyZSBwcm92aWRlcikuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgcmVjb3JkcyBvZiB0aGUgTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzIHlvdSByZWNlaXZlZCwgYXMgdGhpcyB3aWxsIGhlbHAgdXMgZGV0ZXJtaW5lIHRoZSBleGFjdCBhbW91bnRzIGFuZCB0aGUgcGVyaW9kcyBjb3ZlcmVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBGb3JtYWwgQWdyZWVtZW50cyBvciBDb250cmFjdHM6PC9zdHJvbmc+IElmIHRoZXJlIHdhcyBhIGZvcm1hbCBhZ3JlZW1lbnQgb3IgY29udHJhY3QgZGV0YWlsaW5nIHRoZSBjYXJlIHByb3ZpZGVkLCBwbGVhc2UgaW5jbHVkZSB0aGlzIGFzIHdlbGwuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaWYgdGhlIGNhcmUgYXJyYW5nZW1lbnQgd2FzIGZhY2lsaXRhdGVkIHRocm91Z2ggYSBzdGF0ZSBvciB0aGlyZC1wYXJ0eSBhZ2VuY3kuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgdG8gZW5zdXJlIHdlIGNvbXBseSB3aXRoIHRheGluZyBhdXRob3JpdGllcyB3aGlsZSBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgeW91ciBmaW5hbmNlcy4gSWYgYW55IG9mIHRoZXNlIHJlcXVpcmVtZW50cyBwb3NlIGEgZGlmZmljdWx0eSBvciBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBPdXIgZ29hbCBpcyB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2VzcyBhbmQgb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNhYmlsaXR5IEluc3VyYW5jZSBCZW5lZml0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkRpc2FiaWxpdHkgSW5zdXJhbmNlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGJlbmVmaXRzIGFyZSBlbGlnaWJsZSB0byBiZSBleGNsdWRlZCBmcm9tIHlvdXIgaW5jb21lLCB3ZSByZXF1aXJlIGZ1cnRoZXIgZGV0YWlscyByZWdhcmRpbmcgdGhlIGluc3VyYW5jZSBwcmVtaXVtcyBwYWlkLjwvcD5cbiAgICA8cD5LaW5kbHkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+RGV0YWlsZWQgc3RhdGVtZW50cyBvciBkb2N1bWVudGF0aW9uIHNob3dpbmcgdGhlIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIHJlY2VpdmVkLjwvbGk+XG4gICAgICAgIDxsaT5Db25maXJtYXRpb24gb24gd2hvIHBhaWQgdGhlIGluc3VyYW5jZSBwcmVtaXVtcyAoeW91IG9yIHlvdXIgZW1wbG95ZXIpLjwvbGk+XG4gICAgICAgIDxsaT5JZiB5b3UgaGF2ZSBjb250cmlidXRlZCB0byB0aGUgcGF5bWVudCBvZiB0aGUgcHJlbWl1bXM6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgeW91IHBhaWQgdG93YXJkcyB0aGUgcHJlbWl1bXMuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IHN1cHBvcnRpbmcgZG9jdW1lbnRzIGZvciB0aGUgcGF5bWVudHMgbWFkZSBieSB5b3UgKHJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cykuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5JZiB5b3VyIGVtcGxveWVyIGNvbnRyaWJ1dGVkIHRvIHRoZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtczpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCBwYWlkIGJ5IHlvdXIgZW1wbG95ZXIgdG93YXJkcyB0aGUgcHJlbWl1bXMuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGRvY3VtZW50cyBpbmRpY2F0aW5nIGVtcGxveWVyIGNvbnRyaWJ1dGlvbnMgKHBheSBzdHVicywgZW1wbG95ZXIgbGV0dGVycykuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGRldGVybWluZSB0aGUgdGF4YWJsZSBwb3J0aW9uLCBpZiBhbnksIG9mIHlvdXIgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMuIFByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIHdpbGwgaGVscCB1cyBlbnN1cmUgdGhlIGFjY3VyYWN5IG9mIHlvdXIgdGF4IGZpbGluZyBhbmQgcG90ZW50aWFsbHkgbG93ZXIgeW91ciB0YXhhYmxlIGluY29tZS48L3A+XG4gICAgPHA+UGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBpZiB3ZSBjYW4gYmUgb2YgZnVydGhlciBhc3Npc3RhbmNlLiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGlzYWJpbGl0eSBSZXRpcmVtZW50IEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzYWJpbGl0eSBSZXRpcmVtZW50IEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIEluIG9yZGVyIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoZXNlIGJlbmVmaXRzLCB3ZSBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscy4gVGhlIHRheGFiaWxpdHkgb2YgdGhlc2UgYmVuZWZpdHMgY2FuIGRlcGVuZCBvbiB3aGVuIHlvdSB0b29rIHJldGlyZW1lbnQgZHVlIHRvIGRpc2FiaWxpdHkuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJldGlyZW1lbnQ6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIHlvdSByZXRpcmVkIGR1ZSB0byBkaXNhYmlsaXR5LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgRGlzYWJpbGl0eSBSZXRpcmVtZW50Ojwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB5b3UgaGF2ZSB0aGF0IGNvbmZpcm1zIHlvdXIgcmV0aXJlbWVudCB3YXMgZHVlIHRvIGRpc2FiaWxpdHkuIFRoaXMgbWF5IGluY2x1ZGUgbGV0dGVycyBmcm9tIHlvdXIgZW1wbG95ZXIsIHRoZSByZXRpcmVtZW50IHBsYW4sIG9yIG1lZGljYWwgcmVjb3Jkcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIEJlbmVmaXRzIFJlY2VpdmVkOjwvc3Ryb25nPiBTcGVjaWZpYyBhbW91bnRzIGFuZCB0aGUgc291cmNlIG9mIHRoZSBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMuIFBsZWFzZSBpbmNsdWRlIGFueSByZWxhdGVkIGRvY3VtZW50cyBzdWNoIGFzIHN0YXRlbWVudHMgb3Igbm90aWNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFctMiBvciAxMDk5IEZvcm1zOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZWQgYW55IHdhZ2VzIG9yIGRpc2FiaWxpdHkgcGF5bWVudHMgdGhhdCB3ZXJlIHJlcG9ydGVkIG9uIFctMiBvciAxMDk5IGZvcm1zIGluIHRoZSB5ZWFyIG9mIHlvdXIgcmV0aXJlbWVudCwgcGxlYXNlIHByb3ZpZGUgdGhlc2UgZm9ybXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IENvcnJlc3BvbmRlbmNlIGZyb20gdGhlIElSUzo8L3N0cm9uZz4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgYW55IG5vdGljZXMgb3IgbGV0dGVycyBmcm9tIHRoZSBJUlMgcmVnYXJkaW5nIHlvdXIgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzLCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMgb2YgdGhlc2UgY29tbXVuaWNhdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoZSBhYm92ZSBpbmZvcm1hdGlvbiBpcyB2aXRhbCB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzIHdpbGwgYWlkIHVzIGluIGRldGVybWluaW5nIHRoZWlyIHRheGFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoYXQgeW91ciB0YXggb2JsaWdhdGlvbnMgYXJlIHByZWNpc2VseSBjYWxjdWxhdGVkLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgaGlnaGx5IGFwcHJlY2lhdGVkLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDbGVyZ3kgV2FnZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDbGVyZ3kgV2FnZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgVy0yIHdhZ2VzIGFzIGEgY2xlcmd5IG1lbWJlci4gVG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgdG8gcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIHJlcXVpcmUgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGNvbXBlbnNhdGlvbiBwYWNrYWdlLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PGI+Vy0yIEZvcm06PC9iPiBJZiBub3QgYWxyZWFkeSBwcm92aWRlZCwgaW5jbHVkZSBhbnkgVy0yIGZvcm1zIGlzc3VlZCBieSB5b3VyIHJlbGlnaW91cyBpbnN0aXR1dGlvbi48L2xpPlxuICAgICAgICA8bGk+PGI+SG91c2luZyBBbGxvd2FuY2UgRG9jdW1lbnRhdGlvbjo8L2I+IERldGFpbGVkIHN0YXRlbWVudCBvciBsZXR0ZXIgZnJvbSB5b3VyIHJlbGlnaW91cyBpbnN0aXR1dGlvbiBzcGVjaWZ5aW5nIHRoZSBhbW91bnQgZGVzaWduYXRlZCBhcyBob3VzaW5nIGFsbG93YW5jZS48L2xpPlxuICAgICAgICA8bGk+PGI+U2VsZi1FbXBsb3ltZW50IFRheDo8L2I+IENvbmZpcm1hdGlvbiBvbiB3aGV0aGVyIHlvdSBoYXZlIHRha2VuIGEgdm93IG9mIHBvdmVydHkgKGlmIGFwcGxpY2FibGUpLCBvciBhbnkgZG9jdW1lbnRhdGlvbiByZWxhdGVkIHRvIG9wdGluZyBvdXQgb2Ygc2VsZi1lbXBsb3ltZW50IHRheC48L2xpPlxuICAgICAgICA8bGk+PGI+RXhwZW5zZSBSZWltYnVyc2VtZW50czo8L2I+IERvY3VtZW50YXRpb24gc2hvd2luZyBhbnkgZXhwZW5zZSByZWltYnVyc2VtZW50cyByZWNlaXZlZCB1bmRlciBhbiBhY2NvdW50YWJsZSBwbGFuLjwvbGk+XG4gICAgICAgIDxsaT48Yj5PdGhlciBDb21wZW5zYXRpb246PC9iPiBJbmZvcm1hdGlvbiBvbiBhbnkgb3RoZXIgY29tcGVuc2F0aW9uIHJlY2VpdmVkIGluIHlvdXIgY2FwYWNpdHkgYXMgY2xlcmd5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvdmUgb2ZmZXJpbmdzLCBmZWVzIGZvciBzZXJ2aWNlcyAod2VkZGluZ3MsIGZ1bmVyYWxzLCBldGMuKSwgYW5kIHBhcnNvbmFnZSBhbGxvd2FuY2VzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGFjY3VyYXRlbHkgcmVwcmVzZW50IHlvdXIgZWFybmluZ3MgYW5kIHRvIGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGRlZHVjdGlvbnMgY29ycmVjdGx5LiBZb3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IHdpbGwgaGVscCBlbnN1cmUgdGhhdCB5b3VyIHRheCByZXR1cm5zIGFyZSBwcmVwYXJlZCBpbiBhIHRpbWVseSBhbmQgZWZmaWNpZW50IG1hbm5lci48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoaXMgcHJvY2Vzcy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnRlcmVzdCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJJbnRlcmVzdCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiByZXZpZXdpbmcgeW91ciBmaW5hbmNpYWwgYWN0aXZpdGllcyBmb3IgdGhlIHRheCB5ZWFyLCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBpbnRlcmVzdCBpbmNvbWUuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoaXMgaW5jb21lIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBhZGRpdGlvbmFsIGRldGFpbHMuIEtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48Yj5Tb3VyY2Ugb2YgSW50ZXJlc3QgSW5jb21lOjwvYj4gUGxlYXNlIHNwZWNpZnkgdGhlIGluc3RpdHV0aW9uKHMpIG9yIGVudGl0eShpZXMpIGZyb20gd2hpY2ggeW91IHJlY2VpdmVkIGludGVyZXN0IGluY29tZSAoZS5nLiwgYmFua3MsIGNyZWRpdCB1bmlvbnMpLjwvbGk+XG4gICAgICA8bGk+PGI+QW1vdW50IFJlY2VpdmVkOjwvYj4gQ29uZmlybSB0aGUgdG90YWwgYW1vdW50IG9mIGludGVyZXN0IGluY29tZSByZWNlaXZlZCBmcm9tIGVhY2ggc291cmNlIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgIDxsaT48Yj5BY2NvdW50IFR5cGVzOjwvYj4gSWRlbnRpZnkgdGhlIHR5cGUgb2YgYWNjb3VudHMgdGhhdCBnZW5lcmF0ZWQgdGhlIGludGVyZXN0IChlLmcuLCBzYXZpbmdzLCBjaGVja2luZywgY2VydGlmaWNhdGVzIG9mIGRlcG9zaXQpLjwvbGk+XG4gICAgICA8bGk+PGI+VGF4IEZvcm1zIFJlY2VpdmVkOjwvYj4gTGlzdCBhbnkgdGF4IGZvcm1zIHlvdSBoYXZlIHJlY2VpdmVkIHJlbGF0ZWQgdG8gaW50ZXJlc3QgaW5jb21lLCBzdWNoIGFzIEZvcm0gMTA5OS1JTlQgb3IgRm9ybSAxMDk5LU9JRC48L2xpPlxuICAgICAgPGxpPjxiPkZvcmVpZ24gSW50ZXJlc3Q6PC9iPiBJZiBhbnkgaW50ZXJlc3QgaW5jb21lIHdhcyBlYXJuZWQgZnJvbSBmb3JlaWduIGFjY291bnRzIG9yIHNvdXJjZXMsIHBsZWFzZSBwcm92aWRlIGRldGFpbHMsIGluY2x1ZGluZyB0aGUgY291bnRyeSBvZiBvcmlnaW4uPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIHdpbGwgZW5hYmxlIHVzIHRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgaW50ZXJlc3QgaW5jb21lIGFuZCBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBjb3JyZWN0LiBZb3UgY2FuIGF0dGFjaCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYnkgcmVwbHlpbmcgdG8gdGhpcyBlbWFpbCBvciB1cGxvYWRpbmcgdGhlbSBkaXJlY3RseSB0byBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJhbmsgQWNjb3VudCBPcGVuaW5nIEdpZnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQmFuayBBY2NvdW50IE9wZW5pbmcgR2lmdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcmV2aWV3aW5nIHlvdXIgdGF4IHNpdHVhdGlvbiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBhIGdpZnQgZm9yIG9wZW5pbmcgYW4gYWNjb3VudCBhdCBhIGZpbmFuY2lhbCBpbnN0aXR1dGlvbi4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheGFiaWxpdHkgb2YgdGhpcyBpbmNvbWUsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPlRoZSBuYW1lIG9mIHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb24gd2hlcmUgdGhlIGFjY291bnQgd2FzIG9wZW5lZC48L2xpPlxuICAgICAgICA8bGk+VGhlIGRhdGUgdGhlIGFjY291bnQgd2FzIG9wZW5lZC48L2xpPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgZ2lmdCByZWNlaXZlZCAoZS5nLiwgY2FzaCwgbWVyY2hhbmRpc2UsIG9yIHNlcnZpY2VzKS48L2xpPlxuICAgICAgICA8bGk+VGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIHRoZSBnaWZ0IGF0IHRoZSB0aW1lIGl0IHdhcyByZWNlaXZlZC48L2xpPlxuICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiByZWdhcmRpbmcgdGhlIGdpZnQgKGUuZy4sIGEgbGV0dGVyLCBlbWFpbCBjb25maXJtYXRpb24sIG9yIHN0YXRlbWVudCBpbmRpY2F0aW5nIHRoZSB2YWx1ZSBvZiB0aGUgZ2lmdCkuPC9saT5cbiAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiBpZiB5b3UgaGF2ZSByZWNlaXZlZCBtb3JlIHRoYW4gb25lIGdpZnQgZm9yIG9wZW5pbmcgYWNjb3VudHMgd2l0aGluIHRoZSBzYW1lIHRheCB5ZWFyLCBhbmQgaWYgc28sIHRoZSBkZXRhaWxzIGZvciBlYWNoLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHdlIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgY29tcGx5IHdpdGggYWxsIElSUyByZXF1aXJlbWVudHMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDRCBJbnRlcmVzdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkNEIEludGVyZXN0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBvZiB5b3VyIGluY29tZSBmcm9tIENlcnRpZmljYXRlcyBvZiBEZXBvc2l0IChDRHMpIGZvciB0aGUgdGF4IHllYXIsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uIFRoaXMgaXMgZXNzZW50aWFsIHRvIGNvbXBseSB3aXRoIElSUyByZWd1bGF0aW9ucyBhbmQgdG8gcG90ZW50aWFsbHkgb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+TmFtZSBvZiB0aGUgQmFuayBvciBGaW5hbmNpYWwgSW5zdGl0dXRpb246PC9zdHJvbmc+IFdoZXJlIHRoZSBDRCBpcyBoZWxkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgTnVtYmVyOjwvc3Ryb25nPiBUaGlzIGhlbHBzIGluIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBDRC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBJbnRlcmVzdCBFYXJuZWQ6PC9zdHJvbmc+IFRoZSBhbW91bnQgb2YgaW50ZXJlc3QgZWFybmVkIGZyb20gdGhlIENEIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q0QgVGVybTo8L3N0cm9uZz4gVGhlIGR1cmF0aW9uIG9yIHRlcm0gb2YgdGhlIENEIChlLmcuLCA2IG1vbnRocywgMSB5ZWFyKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFB1cmNoYXNlOjwvc3Ryb25nPiBXaGVuIHlvdSBvcmlnaW5hbGx5IGFjcXVpcmVkIHRoZSBDRC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5NYXR1cml0eSBEYXRlOjwvc3Ryb25nPiBXaGVuIHRoZSBDRCByZWFjaGVkIG9yIHdpbGwgcmVhY2ggaXRzIGZ1bGwgdGVybS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5LUlOVCBGb3Jtczo8L3N0cm9uZz4gSWYgcmVjZWl2ZWQsIHBsZWFzZSBpbmNsdWRlIGNvcGllcyBvZiBhbnkgMTA5OS1JTlQgZm9ybXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDRCBpbnRlcmVzdC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy4gWW91IG1heSB1cGxvYWQgdGhlIGRvY3VtZW50cyBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBwcm92aWRlIHRoZW0gdmlhIGVtYWlsLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheCBFeGVtcHQgSW50ZXJlc3RcIixcbiAgICBhY3Rpb25UaXRsZTogXCJUYXggRXhlbXB0IEludGVyZXN0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHRheC1leGVtcHQgaW50ZXJlc3QgZHVyaW5nIHRoZSB0YXggeWVhciwgcG9zc2libHkgZnJvbSBtdW5pY2lwYWwgYm9uZHMgb3Igc2ltaWxhciBpbnZlc3RtZW50cy4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlN0YXRlbWVudHMgb2YgVGF4LUV4ZW1wdCBJbnRlcmVzdDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIDEwOTktSU5UIGZvcm1zIG9yIGVxdWl2YWxlbnQgc3RhdGVtZW50cyB0aGF0IGRldGFpbCB5b3VyIHRheC1leGVtcHQgaW50ZXJlc3QgaW5jb21lIGZvciB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiBJc3N1aW5nIEVudGl0aWVzOjwvc3Ryb25nPiBBIGxpc3Qgb3Igc3RhdGVtZW50IGlkZW50aWZ5aW5nIHRoZSBlbnRpdGllcyB0aGF0IGlzc3VlZCB0aGUgYm9uZHMgb3Igc2ltaWxhciBpbnZlc3RtZW50cy4gVGhpcyBpbmNsdWRlcyBtdW5pY2lwYWwsIHN0YXRlLCBvciBmZWRlcmFsIGVudGl0aWVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgRGV0YWlsOjwvc3Ryb25nPiBBIGJyZWFrZG93biBvZiB0aGUgaW52ZXN0bWVudHMgY29udHJpYnV0aW5nIHRvIHRheC1leGVtcHQgaW50ZXJlc3QuIFRoaXMgc2hvdWxkIGluY2x1ZGUgdGhlIHB1cmNoYXNlIGRhdGUsIHB1cmNoYXNlIGFtb3VudHMsIGFuZCBhbnkgcmVsYXRlZCBtYXR1cml0eSBkYXRlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ccm9rZXJhZ2UgQWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgeW91ciBicm9rZXJhZ2UgYWNjb3VudCBzdGF0ZW1lbnRzIHRoYXQgZGV0YWlsIHRyYW5zYWN0aW9ucyBhbmQgaG9sZGluZ3MgaW4gdGF4LWV4ZW1wdCBpbnZlc3RtZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BTVQgKEFsdGVybmF0aXZlIE1pbmltdW0gVGF4KSBDb25zaWRlcmF0aW9uOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIGRvY3VtZW50YXRpb24gaW5kaWNhdGluZyB3aGV0aGVyIGFueSBvZiB0aGUgdGF4LWV4ZW1wdCBpbnRlcmVzdCBpcyBzdWJqZWN0IHRvIHRoZSBBbHRlcm5hdGl2ZSBNaW5pbXVtIFRheC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhbiBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kIEludGVyZXN0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kIEludGVyZXN0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHBhcnQgb2Ygb3VyIGNvbnRpbnVlZCBlZmZvcnQgdG8gcHJvdmlkZSB5b3Ugd2l0aCB0aGUgYmVzdCB0YXggcHJlcGFyYXRpb24gc2VydmljZXMsIHdlIGFyZSByZWFjaGluZyBvdXQgdG8gZ2F0aGVyIG5lY2Vzc2FyeSBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gdGhlIGludGVyZXN0IHlvdSBtYXkgaGF2ZSByZWNlaXZlZCBmcm9tIHJlZGVlbWluZyBhbiBFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQuPC9wPlxuXG4gICAgPHA+VG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIGVsaWdpYmlsaXR5IGZvciBleGVtcHRpb24gYW5kIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIElSUywgd2Uga2luZGx5IHJlcXVlc3QgeW91IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBjb3B5IG9mIEZvcm0gMTA5OS1JTlQgb3Igc2ltaWxhciBzdGF0ZW1lbnQgcHJvdmlkZWQgYnkgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiwgaW5kaWNhdGluZyB0aGUgYW1vdW50IG9mIGludGVyZXN0IHJlY2VpdmVkIGZyb20gdGhlIEVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZC48L2xpPlxuICAgICAgICA8bGk+RGV0YWlsZWQgcmVjb3JkcyBvZiB0aGUgRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kcyByZWRlZW1lZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkJvbmQgc2VyaWFsIG51bWJlcnM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Jc3N1ZSBkYXRlczwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlJlZGVtcHRpb24gZGF0ZXM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5SZWNlaXB0cyBvciBkb2N1bWVudGF0aW9uIGZvciBxdWFsaWZpZWQgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgcGFpZCBkdXJpbmcgdGhlIHllYXIsIGluY2x1ZGluZzpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+VHVpdGlvbiBhbmQgZmVlczwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkNvdXJzZSBtYXRlcmlhbHM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgb3RoZXIgcmVxdWlyZWQgZXhwZW5zZXMgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZSBhdCBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgZW5yb2xsbWVudCBmcm9tIGFuIGVsaWdpYmxlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uIGZvciB0aGUgYmVuZWZpY2lhcnkgb2YgdGhlIGJvbmQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheGFiaWxpdHkgb2YgdGhlIGludGVyZXN0IGluY29tZSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemluZyB5b3VyIHRheCBiZW5lZml0cy4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCByZWNvbW1lbmQgY29tcGlsaW5nIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXZpZGVuZCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJEaXZpZGVuZCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZGl2aWRlbmQgaW5jb21lIG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluY29tZSBhbmQgb3B0aW1pemUgeW91ciB0YXggc2l0dWF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb24gYW5kIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+QWxsIDEwOTktRElWIGZvcm1zIHJlY2VpdmVkIGZyb20gY29ycG9yYXRpb25zIG9yIG11dHVhbCBmdW5kcy4gVGhpcyBpbmNsdWRlcyBkaXN0cmlidXRpb25zIG9mIGNhc2gsIHN0b2NrLCBvciBvdGhlciBwcm9wZXJ0eS48L2xpPlxuICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGRldGFpbHMgcmVnYXJkaW5nIGFueSBmb3JlaWduIGRpdmlkZW5kcyBpbmNsdWRpbmcgdGhlIGFtb3VudCBpbiBmb3JlaWduIGN1cnJlbmN5LCB0aGUgY291bnRyeSBvZiBvcmlnaW4sIGFuZCBhbnkgZm9yZWlnbiB0YXggcGFpZC48L2xpPlxuICAgICAgPGxpPkZvciBkaXZpZGVuZHMgcmVpbnZlc3RlZCwgcGxlYXNlIHByb3ZpZGUgc3RhdGVtZW50cyBvciBjb25maXJtYXRpb25zIHNob3dpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XG4gICAgICA8bGk+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGRpdmlkZW5kcyBub3QgY292ZXJlZCBieSBhIDEwOTktRElWLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlIHRvIGF2b2lkIGFueSBwcm9jZXNzaW5nIGRlbGF5cy48L3A+XG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgYXBwcmVjaWF0ZWQgYXMgaXQgd2lsbCBoZWxwIHVzIGluIGNvbXBsZXRpbmcgeW91ciB0YXggcHJlcGFyYXRpb25zIGVmZmljaWVudGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc3Bvc2VkIENhcGl0YWwgQXNzZXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzcG9zZWQgQ2FwaXRhbCBBc3NldHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIGluZGljYXRlZCBkaXNwb3Npbmcgb2YgY2FwaXRhbCBhc3NldHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBjb21wbGV0ZSBhbmQgY29tcGxpYW50LCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGVzZSB0cmFuc2FjdGlvbnMuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48Yj5EZXNjcmlwdGlvbiBvZiBlYWNoIGRpc3Bvc2VkIGFzc2V0OjwvYj4gSW5jbHVkZSB0aGUgdHlwZSBvZiBhc3NldCAoZS5nLiwgcmVhbCBlc3RhdGUsIHN0b2NrcywgYm9uZHMpLjwvbGk+XG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGFjcXVpc2l0aW9uOjwvYj4gVGhlIHB1cmNoYXNlIGRhdGUgb3IgdGhlIGRhdGUgeW91IG9yaWdpbmFsbHkgY2FtZSBpbnRvIHBvc3Nlc3Npb24gb2YgZWFjaCBhc3NldC48L2xpPlxuICAgICAgICA8bGk+PGI+QWNxdWlzaXRpb24gY29zdDo8L2I+IFRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBvciBjb3N0IGJhc2lzIG9mIGVhY2ggYXNzZXQsIGluY2x1ZGluZyBhbnkgaW1wcm92ZW1lbnRzIG1hZGUuPC9saT5cbiAgICAgICAgPGxpPjxiPkRhdGUgb2YgZGlzcG9zYWw6PC9iPiBUaGUgc3BlY2lmaWMgZGF0ZSBvbiB3aGljaCBlYWNoIGFzc2V0IHdhcyBzb2xkLCBleGNoYW5nZWQsIG9yIG90aGVyd2lzZSBkaXNwb3NlZCBvZi48L2xpPlxuICAgICAgICA8bGk+PGI+U2FsZSBvciBkaXNwb3NhbCBwcm9jZWVkczo8L2I+IFRoZSB0b3RhbCBhbW91bnQgcmVjZWl2ZWQgZnJvbSB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LjwvbGk+XG4gICAgICAgIDxsaT48Yj5Bc3NvY2lhdGVkIGV4cGVuc2VzOjwvYj4gQW55IGNvc3RzIGluY3VycmVkIGRpcmVjdGx5IGZyb20gdGhlIHNhbGUgb3IgZGlzcG9zYWwgcHJvY2Vzcywgc3VjaCBhcyBicm9rZXIncyBmZWVzLCBhZHZlcnRpc2luZywgbGVnYWwgZmVlcywgZXRjLjwvbGk+XG4gICAgICAgIDxsaT48Yj5SZWFzb24gZm9yIGRpc3Bvc2FsOjwvYj4gQnJpZWZseSBkZXNjcmliZSB0aGUgcmVhc29uIGJlaGluZCB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGNhbGN1bGF0aW5nIHBvdGVudGlhbCBjYXBpdGFsIGdhaW5zIG9yIGxvc3NlcyBhbmQgZGV0ZXJtaW5pbmcgdGhlaXIgaW1wYWN0IG9uIHlvdXIgdGF4IG9ibGlnYXRpb25zLiBQbGVhc2UgYXR0YWNoIGFueSBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIHN1Y2ggYXMgc2FsZXMgcmVjZWlwdHMsIGRlZWRzLCBjb250cmFjdHMsIG9yIGJyb2tlcmFnZSBzdGF0ZW1lbnRzLCB0byBzdWJzdGFudGlhdGUgdGhlIGRldGFpbHMgcHJvdmlkZWQuPC9wPlxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIHlvdSBtYXkgaGF2ZS4gWW91IGNhbiByZWFjaCB1cyB2aWEgZW1haWwgb3IgcGhvbmUgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNwb3NlZCBEaWdpdGFsIEFzc2V0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkRpc3Bvc2VkIERpZ2l0YWwgQXNzZXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+WW91IGFuc3dlcmVkIFwiWWVzXCIgdG8gZGlzcG9zaW5nIG9mIGRpZ2l0YWwgYXNzZXRzIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgdHJhbnNhY3Rpb25zLCBwbGVhc2Ugc3VibWl0IHRoZSBmb2xsb3dpbmc6PC9wPlxuICA8b2w+XG4gICAgPGxpPlRyYW5zYWN0aW9uIGRhdGVzPC9saT5cbiAgICA8bGk+VHlwZXMgb2YgYXNzZXRzIGJvdWdodCwgc29sZCwgb3IgZXhjaGFuZ2VkPC9saT5cbiAgICA8bGk+QW1vdW50cyBpbnZvbHZlZCBpbiBlYWNoIHRyYW5zYWN0aW9uPC9saT5cbiAgICA8bGk+QW55IDEwOTkgZm9ybXMgcmVjZWl2ZWQgZm9yIGRpZ2l0YWwgYXNzZXQgYWN0aXZpdGllczwvbGk+XG4gICAgPGxpPkRldGFpbHMgb2YgbWluaW5nLCBzdGFraW5nLCBvciBhaXJkcm9wIGluY29tZSwgaWYgYXBwbGljYWJsZTwvbGk+XG4gIDwvb2w+XG4gIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSW5jbHVkZSBhbGwgc2FsZXMsIHRyYWRlcywgYW5kIGV4Y2hhbmdlcywgZXZlbiBpZiB5b3UgZGlkbid0IHJlY2VpdmUgYSB0YXggZm9ybS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTXV0dWFsIEZ1bmQgR2FpblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIEdhaW5cIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiBvcmRlciB0byBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIG9uIHlvdXIgdGF4IHJldHVybiwgYXMgcGVyIHlvdXIgaW5kaWNhdGlvbiBvZiByZWNlaXZpbmcgZ2FpbnMgZnJvbSBhIG11dHVhbCBmdW5kIG9yIHNpbWlsYXIgaW52ZXN0bWVudCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5LURJViBGb3JtOjwvc3Ryb25nPiBUaGlzIGZvcm0gaXMgY3J1Y2lhbCBhcyBpdCBwcm92aWRlcyBkZXRhaWxzIG9uIGRpdmlkZW5kcyBhbmQgZGlzdHJpYnV0aW9ucyB5b3UgcmVjZWl2ZWQgZnJvbSB5b3VyIG11dHVhbCBmdW5kIGludmVzdG1lbnRzLiBQbGVhc2UgZW5zdXJlIHRvIHByb3ZpZGUgdGhpcyBmb3JtIGlmIHlvdXIgbXV0dWFsIGZ1bmQgZWFybmluZ3Mgd2VyZSByZXBvcnRlZCBvbiBpdC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnQgb2YgQWNjb3VudDo8L3N0cm9uZz4gVGhpcyBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBhbGwgdHJhbnNhY3Rpb25zIHdpdGhpbiB5b3VyIGFjY291bnQsIGluY2x1ZGluZyBwdXJjaGFzZXMsIHJlZGVtcHRpb25zLCBhbmQgcmVpbnZlc3RlZCBkaXZpZGVuZHMgd2hpY2ggaGVscCB1cyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHlvdXIgZ2FpbnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+WWVhci1FbmQgU3VtbWFyeTo8L3N0cm9uZz4gT2Z0ZW4gbXV0dWFsIGZ1bmRzIHByb3ZpZGUgYSB5ZWFyLWVuZCBzdW1tYXJ5IHRvIHRoZWlyIGludmVzdG9ycy4gVGhpcyBzdW1tYXJ5IGNhbiBiZSB2ZXJ5IGhlbHBmdWwgaW4gcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYXMgaXQgY29uc29saWRhdGVzIGFsbCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50czo8L3N0cm9uZz4gVGhpcyBjb3VsZCBpbmNsdWRlIGFkZGl0aW9uYWwgMTA5OSBmb3JtcyAobGlrZSAxMDk5LUIgaWYgYW55IHNhbGVzIG9jY3VycmVkKSwgb3JpZ2luYWwgaW52ZXN0bWVudCBzdGF0ZW1lbnRzLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgY291bGQgaW1wYWN0IHlvdXIgdGF4IHNpdHVhdGlvbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMgbWF5IHJlcXVpcmUgc29tZSB0aW1lLCBob3dldmVyLCBoYXZpbmcgdGhlc2UgcmVhZGlseSBhdmFpbGFibGUgd2lsbCBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBlZmZpY2llbmN5IG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpbGwgYmUgZ3JlYXRseSBhcHByZWNpYXRlZC48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBkaWZmaWN1bHRpZXMgb2J0YWluaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNdXR1YWwgRnVuZCBEaXNwb3NhbFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIERpc3Bvc2FsXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBtYWRlIGEgZGlzcG9zYWwgb2Ygc2hhcmVzIGluIGEgbXV0dWFsIGZ1bmQgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBhY3QgYW5kIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGVkIGFjY3VyYXRlbHksIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+MTA5OS1CIGZvcm08L3N0cm9uZz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBtdXR1YWwgZnVuZCBkaXNwb3NhbCwgaWYgYXZhaWxhYmxlLiBUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGRldGFpbHMgb24gdGhlIHNhbGUgb2YgeW91ciBzaGFyZXMuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbGVkIDxzdHJvbmc+cmVjb3JkIG9mIHRoZSBwdXJjaGFzZTwvc3Ryb25nPiBvZiB0aGUgbXV0dWFsIGZ1bmQgc2hhcmVzIGluY2x1ZGluZyB0aGUgcHVyY2hhc2UgZGF0ZSBhbmQgY29zdCBiYXNpcy4gVGhpcyBpcyBjcnVjaWFsIGZvciBjYWxjdWxhdGluZyBhbnkgY2FwaXRhbCBnYWluIG9yIGxvc3MuPC9saT5cbiAgICAgICAgPGxpPklmIHRoZSAxMDk5LUIgZm9ybSBpcyBub3QgYXZhaWxhYmxlLCBwbGVhc2UgcHJvdmlkZSBhbnkgPHN0cm9uZz5icm9rZXJhZ2Ugc3RhdGVtZW50czwvc3Ryb25nPiBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgc2hvd3MgdGhlIGRpc3Bvc2FsIG9mIHRoZSBtdXR1YWwgZnVuZCBzaGFyZXMsIGluY2x1ZGluZyB0aGUgc2FsZSBkYXRlIGFuZCBhbW91bnQuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxzdHJvbmc+cmVpbnZlc3RlZCBkaXZpZGVuZHM8L3N0cm9uZz4gb3IgY2FwaXRhbCBnYWlucyBkaXN0cmlidXRpb25zLCBhcyB0aGVzZSBjYW4gYWRqdXN0IHlvdXIgY29zdCBiYXNpcyBhbmQgYWZmZWN0IHRoZSBjYWxjdWxhdGlvbiBvZiB5b3VyIGNhcGl0YWwgZ2FpbiBvciBsb3NzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5IYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGVuc3VyaW5nIHRoYXQgd2UgYWNjdXJhdGVseSByZXBvcnQgdGhlIGRpc3Bvc2FsIG9mIHlvdXIgbXV0dWFsIGZ1bmQgc2hhcmVzIGFuZCBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzLiBUaGlzIHdpbGwgYWxzbyBoZWxwIHVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGxpYWJpbGl0eSBmb3IgdGhlIHllYXIuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiV2FzaCBTYWxlXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiV2FzaCBTYWxlIFRyYW5zYWN0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIGluZGljYXRpb24gb2YgYSBwb3NzaWJsZSBXYXNoIFNhbGUgdHJhbnNhY3Rpb24uIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wYWN0IGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyBydWxlcywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCB0cmFuc2FjdGlvbiByZWNvcmRzPC9zdHJvbmc+IC0gUGxlYXNlIHByb3ZpZGUgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdGhlIHNlY3VyaXR5IHRoYXQgd2FzIHNvbGQgYW5kIHRoZW4gcmVwdXJjaGFzZWQsIGluY2x1ZGluZyBkYXRlcyBhbmQgYW1vdW50cyBmb3IgZWFjaCB0cmFuc2FjdGlvbi48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db3N0IGJhc2lzIGZvciByZXB1cmNoYXNlZCBzZWN1cml0eTwvc3Ryb25nPiAtIERldGFpbHMgb2YgdGhlIGNvc3QgYmFzaXMgZm9yIHRoZSBzZWN1cml0aWVzIHJlcHVyY2hhc2VkIHdpdGhpbiBhIDYxLWRheSB3aW5kb3cgKDMwIGRheXMgYmVmb3JlIHRvIDMwIGRheXMgYWZ0ZXIgdGhlIHNhbGUpLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgc3RhdGVtZW50czwvc3Ryb25nPiAtIENvcGllcyBvZiB5b3VyIGJyb2tlcmFnZSBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb25zIGluIHF1ZXN0aW9uLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkxvc3NlcyByZWFsaXplZDwvc3Ryb25nPiAtIERvY3VtZW50YXRpb24gb2YgYW55IGxvc3NlcyByZWFsaXplZCBmcm9tIHRoZXNlIHRyYW5zYWN0aW9ucy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgY29ycmVzcG9uZGVuY2U8L3N0cm9uZz4gLSBDb3JyZXNwb25kZW5jZSBmcm9tIGJyb2tlcnMgb3IgZmluYW5jaWFsIGFkdmlzb3JzIHJlZ2FyZGluZyB0aGVzZSB0cmFuc2FjdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZG9jdW1lbnRzIGFyZSBvcmdhbml6ZWQgYW5kIGNsZWFybHkgbGFiZWxlZCBmb3IgZWFjaCB0cmFuc2FjdGlvbi4gVGhpcyB3aWxsIGZhY2lsaXRhdGUgYSBzbW9vdGhlciBhbmQgcXVpY2tlciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+XG4gICAgPHA+VW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgV2FzaCBTYWxlIHRyYW5zYWN0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIHByb3ZpZGUgYWNjdXJhdGUgdGF4IGFkdmljZSBhbmQgcHJlcGFyYXRpb24uIEZ1cnRoZXIsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBhc3Npc3QgaW4gZGV0ZXJtaW5pbmcgaG93IHRoZSBXYXNoIFNhbGUgcnVsZSBhZmZlY3RzIHRoZSBkZWR1Y3RpYmlsaXR5IG9mIGFueSBsb3NzZXMgeW91IG1pZ2h0IGhhdmUgaW5jdXJyZWQuPC9wPlxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZmlsaW5ncy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTb2xkIEhvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJTb2xkIEhvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgc29sZCBhIHBlcnNvbmFsIGhvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBTYWxlOjwvc3Ryb25nPiBUaGUgY2xvc2luZyBkYXRlIHdoZW4gdGhlIHNhbGUgd2FzIG9mZmljaWFsbHkgY29tcGxldGVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlNhbGUgUHJpY2U6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgeW91IHJlY2VpdmVkIGZvciB0aGUgaG9tZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db3N0IEJhc2lzOjwvc3Ryb25nPiBPcmlnaW5hbCBwdXJjaGFzZSBwcmljZSwgcGx1cyBhbnkgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIGhvbWUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz4gQWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc29sZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5NYWluIFJlc2lkZW5jZSBvciBOb3Q6PC9zdHJvbmc+IFBsZWFzZSBjb25maXJtIGlmIHRoaXMgd2FzIHlvdXIgbWFpbiByZXNpZGVuY2UgZm9yIGF0IGxlYXN0IHR3byBvZiB0aGUgbGFzdCBmaXZlIHllYXJzIHByaW9yIHRvIHRoZSBzYWxlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlJlY29yZHMgb2YgSG9tZSBJbXByb3ZlbWVudHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIHJlY29yZHMgb2YgYW55IG1ham9yIGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSBwcm9wZXJ0eSwgd2hpY2ggY2FuIGFmZmVjdCB0aGUgY29zdCBiYXNpcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBVc2U6PC9zdHJvbmc+IElmIG5vdCBhbHdheXMgdXNlZCBhcyBhIHBlcnNvbmFsIGhvbWUsIGRldGFpbHMgb24gYW55IHVzZSBvZiB0aGUgcHJvcGVydHkgZm9yIHJlbnRhbCwgYnVzaW5lc3MsIG9yIG90aGVyIG5vbi1wZXJzb25hbCB1c2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVsYXRlZCBFeHBlbnNlczo8L3N0cm9uZz4gQW55IGNvc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FsZSwgc3VjaCBhcyBsZWdhbCBmZWVzLCByZWFsIGVzdGF0ZSBhZ2VudCBjb21taXNzaW9ucywgYW5kIGhvbWUgc3RhZ2luZyBleHBlbnNlcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgcG90ZW50aWFsIHRheCBiZW5lZml0cyBvciBvYmxpZ2F0aW9ucy4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiSW5zdGFsbG1lbnQgU2FsZSBQYXltZW50c1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgeW91J3ZlIHNvbGQgcHJvcGVydHkgdGhpcyB5ZWFyIHVuZGVyIGFuIGluc3RhbGxtZW50IHBsYW4uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgdHJhbnNhY3Rpb24gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+U2FsZSBBZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgY29tcGxldGUgc2FsZSBhZ3JlZW1lbnQgZGV0YWlsaW5nIHRoZSB0ZXJtcyBvZiB0aGUgaW5zdGFsbG1lbnQgc2FsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc29sZCAoZS5nLiwgbGFuZCwgYnVpbGRpbmcsIGVxdWlwbWVudCkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBTY2hlZHVsZTo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHBheW1lbnQgc2NoZWR1bGUgYWdyZWVkIHVwb24sIGluY2x1ZGluZyB0aGUgZGF0ZXMgYW5kIGFtb3VudHMgb2YgZWFjaCBpbnN0YWxsbWVudC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnRzIFJlY2VpdmVkOjwvc3Ryb25nPiBUb3RhbCBhbW91bnRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZyBkb3duIHBheW1lbnQgYW5kIGFueSBpbnN0YWxsbWVudCBwYXltZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmluY2lwYWwgJmFtcDsgSW50ZXJlc3QgQnJlYWtkb3duOjwvc3Ryb25nPiBBIGJyZWFrZG93biBvZiB0aGUgYW1vdW50cyByZWNlaXZlZCBiZXR3ZWVuIHByaW5jaXBhbCBhbmQgaW50ZXJlc3QgZm9yIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBCYXNpczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhlIHByb3BlcnR5J3Mgb3JpZ2luYWwgY29zdCwgaW1wcm92ZW1lbnRzIG1hZGUsIGFuZCBhbnkgZGVwcmVjaWF0aW9uIHRha2VuIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgcmVsZXZhbnQgZXhwZW5zZXMgaW4gcmVsYXRpb24gdG8gdGhlIHNhbGUgdGhhdCBtaWdodCBiZSBkZWR1Y3RpYmxlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkJ1eWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBMZWdhbCBuYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGJ1eWVyLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgYW55IHByb2ZpdCBvciBsb3NzIGZyb20gdGhlIHNhbGUgYW5kIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlIGluc3RhbGxtZW50IHBheW1lbnRzIHJlY2VpdmVkLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gWW91IGNhbiB1cGxvYWQgdGhlIGRvY3VtZW50cyBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBlbWFpbCB0aGVtIHRvIHRheEBsZW5kYWhhbmRhY2NvdW50aW5nLmNvbS48L3A+XG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiV29ydGhsZXNzIFNlY3VyaXRpZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJXb3J0aGxlc3MgU2VjdXJpdGllc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBoYWQgaW52ZXN0bWVudHMsIHN1Y2ggYXMgc3RvY2tzIG9yIGJvbmRzLCB0aGF0IGJlY2FtZSBjb21wbGV0ZWx5IHdvcnRobGVzcyB0aGlzIHllYXIsIHdlIG5lZWQgdG8gZ2F0aGVyIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHByb3Blcmx5IHJlcG9ydCB0aGVzZSBvbiB5b3VyIHRheCByZXR1cm4uIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgU2VjdXJpdHk6PC9zdHJvbmc+IEZ1bGwgbmFtZSBhbmQgdHlwZSBvZiBlYWNoIHNlY3VyaXR5IHRoYXQgYmVjYW1lIHdvcnRobGVzcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QdXJjaGFzZSBEZXRhaWxzOjwvc3Ryb25nPiBEYXRlIG9mIHB1cmNoYXNlIGFuZCB0aGUgcHVyY2hhc2UgcHJpY2UgZm9yIGVhY2ggc2VjdXJpdHkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+V29ydGhsZXNzbmVzcyBEZXRlcm1pbmF0aW9uIERhdGU6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIHdoZW4geW91IGRldGVybWluZWQgdGhlIHNlY3VyaXR5IHRvIGJlIHdvcnRobGVzcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB5b3UgcmVjZWl2ZWQgb3IgdXNlZCB0byBkZXRlcm1pbmUgdGhhdCB0aGUgaW52ZXN0bWVudHMgYmVjYW1lIHdvcnRobGVzcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BdHRlbXB0cyB0byBTZWxsIG9yIFRyYWRlOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGFueSBhdHRlbXB0cyBtYWRlIHRvIHNlbGwgb3IgdHJhZGUgdGhlIHNlY3VyaXRpZXMgYmVmb3JlIGRldGVybWluaW5nIHRoZXkgd2VyZSB3b3J0aGxlc3MuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBBY2NvdW50IFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiB5b3VyIGludmVzdG1lbnQgYWNjb3VudCBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHdvcnRobGVzcyBzZWN1cml0aWVzIGFuZCB0aGVpciB2YWx1ZSBvdmVyIHRpbWUsIGxlYWRpbmcgdXAgdG8gdGhlaXIgZGVjbGFyZWQgd29ydGhsZXNzbmVzcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWN0aW9uIDEyNDQgQnVzaW5lc3MgU3RvY2tcIixcbiAgICBhY3Rpb25UaXRsZTogXCJTZWN0aW9uIDEyNDQgQnVzaW5lc3MgU3RvY2tcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBtb3JlIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBzYWxlIG9mIHNoYXJlcyBpbiBhIHNtYWxsIGJ1c2luZXNzIHdoZXJlIHlvdSB3ZXJlIGFuIG9yaWdpbmFsIGludmVzdG9yLiBBcyB5b3UgaW5kaWNhdGVkIGEgbG9zcyBvbiB0aGlzIGludmVzdG1lbnQsIGl0J3MgY3J1Y2lhbCB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcXVhbGlmaWVzIGZvciBzcGVjaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LiBUbyBhY2N1cmF0ZWx5IGFuYWx5emUgYW5kIHJlcG9ydCB0aGVzZSBhY3Rpdml0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5UaGUgPHN0cm9uZz5jZXJ0aWZpY2F0ZSBvZiBpbmNvcnBvcmF0aW9uPC9zdHJvbmc+IG9yIG90aGVyIGRvY3VtZW50YXRpb24gY29uZmlybWluZyB0aGUgc3RvY2sgcXVhbGlmaWVzIGFzIFNlY3Rpb24gMTI0NCBzdG9jay48L2xpPlxuICAgICAgICA8bGk+QSA8c3Ryb25nPmRldGFpbGVkIHN0YXRlbWVudDwvc3Ryb25nPiBvZiB0aGUgaW52ZXN0bWVudCwgaW5jbHVkaW5nOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgYW5kIGRhdGUgb2YgdGhlIG9yaWdpbmFsIGludmVzdG1lbnQuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+TnVtYmVyIG9mIHNoYXJlcyBwdXJjaGFzZWQuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+UHJvb2Ygb2YgYmVpbmcgYW4gb3JpZ2luYWwgaG9sZGVyLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIHRoZSBzYWxlPC9zdHJvbmc+LCBzcGVjaWZ5aW5nOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5EYXRlIG9mIHNhbGUuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+TnVtYmVyIG9mIHNoYXJlcyBzb2xkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlNhbGUgcHJpY2UuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGFzc29jaWF0ZWQgZXhwZW5zZXMgd2l0aCB0aGUgc2FsZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPkEgYnJpZWYgZXhwbGFuYXRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgbGVhZGluZyB0byB0aGUgbG9zcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiB3aWxsIGVuYWJsZSB1cyB0byBhc3Nlc3MgdGhlIGVsaWdpYmlsaXR5IGZvciBhIGJlbmVmaWNpYWwgdGF4IHRyZWF0bWVudCB1bmRlciBTZWN0aW9uIDEyNDQsIHBvdGVudGlhbGx5IG1pbmltaXppbmcgeW91ciB0YXhhYmxlIGluY29tZS4gUGxlYXNlIHN1Ym1pdCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgZmlsaW5nLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbGF0ZWQgUGFydHkgVHJhbnNhY3Rpb25zXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVsYXRlZCBQYXJ0eSBUcmFuc2FjdGlvbnNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSByZWNlaXZlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB0aGVyZSB3ZXJlIHRyYW5zYWN0aW9ucyB3aXRoIHJlbGF0ZWQgcGFydGllcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGVzZSB0cmFuc2FjdGlvbnMgYW5kIGluY29ycG9yYXRlIHRoZW0gaW50byB5b3VyIHRheCBmaWxpbmdzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIHRoZSBUcmFuc2FjdGlvbnM6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlR5cGUgb2YgdHJhbnNhY3Rpb25zIChlLmcuLCBzYWxlLCB0cmFkZSwgdHJhbnNmZXIgb2YgcHJvcGVydHkgb3IgaW52ZXN0bWVudHMpLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkRhdGUocykgb2YgdHJhbnNhY3Rpb25zLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIGl0ZW1zIG9yIHByb3BlcnRpZXMgdHJhbnNmZXJyZWQuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlBhcnRpZXMgSW52b2x2ZWQ6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPk5hbWVzIGFuZCByZWxhdGlvbnNoaXBzIHRvIHlvdSAoZS5nLiwgZmFtaWx5IG1lbWJlciwgZnJpZW5kLCBvciBidXNpbmVzcyBlbnRpdHkpLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPklmIGEgYnVzaW5lc3MgZW50aXR5IGlzIGludm9sdmVkLCB5b3VyIGFuZCB5b3VyIGZhbWlseSdzIG93bmVyc2hpcCBwZXJjZW50YWdlIGluIHRoZSBidXNpbmVzcy48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIERldGFpbHMgb2YgdGhlIFRyYW5zYWN0aW9uczo8L3N0cm9uZz5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+TWFya2V0IHZhbHVlIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzIGF0IHRoZSB0aW1lIG9mIHRyYW5zYWN0aW9uLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCByZWNlaXZlZCBvciBwYWlkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFueSBleGNoYW5nZSBvZiBnb29kcywgc2VydmljZXMsIG9yIG90aGVyIGFzc2V0cywgaW5jbHVkaW5nIHRoZWlyIGZhaXIgbWFya2V0IHZhbHVlLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Db3BpZXMgb2YgY29udHJhY3RzIG9yIGFncmVlbWVudHMuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+UmVjZWlwdHMgb3IgcHJvb2Ygb2YgcGF5bWVudC9leGNoYW5nZS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BcHByYWlzYWxzIG9yIHZhbHVhdGlvbnMgb2YgcHJvcGVydHkgb3IgaW52ZXN0bWVudHMsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgcmVnYXJkaW5nIHJlbGF0ZWQgcGFydHkgdHJhbnNhY3Rpb25zIGFuZCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHBlbmFsdGllcyBvciBhdWRpdHMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9ucy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VjdGlvbiAxMjEgSG9tZSBTYWxlXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMjEgSG9tZSBTYWxlXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgc29sZCB5b3VyIG1haW4gaG9tZSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgZXhjbHVzaW9uIG9mIGdhaW4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZC4gQmVsb3cgaXMgYSBkZXRhaWxlZCBsaXN0IG9mIHdoYXQgd2UgbmVlZCBmcm9tIHlvdTo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgU2FsZTo8L3N0cm9uZz5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5EYXRlIG9mIHNhbGU8L2xpPlxuICAgICAgICAgIDxsaT5TZWxsaW5nIHByaWNlPC9saT5cbiAgICAgICAgICA8bGk+QW55IHNlbGxpbmcgZXhwZW5zZXMgKGUuZy4sIHJlYWwgZXN0YXRlIGNvbW1pc3Npb25zLCBsZWdhbCBmZWVzLCBldGMuKTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+Q29zdCBCYXNpcyBJbmZvcm1hdGlvbjo8L3N0cm9uZz5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5EYXRlIG9mIHB1cmNoYXNlPC9saT5cbiAgICAgICAgICA8bGk+T3JpZ2luYWwgcHVyY2hhc2UgcHJpY2U8L2xpPlxuICAgICAgICAgIDxsaT5SZWNvcmRzIG9mIGltcHJvdmVtZW50cyBtYWRlICh3aXRoIGRhdGVzIGFuZCBjb3N0cyk8L2xpPlxuICAgICAgICAgIDxsaT5BbnkgY2FzdWFsdHkgbG9zc2VzIGNsYWltZWQgYW5kIGluc3VyYW5jZSByZWltYnVyc2VtZW50cyByZWNlaXZlZCB3aGlsZSBvd25pbmcgdGhlIHByb3BlcnR5PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5SZXNpZGVuY3kgYW5kIFVzZSBEYXRhOjwvc3Ryb25nPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlRvdGFsIHllYXJzIG9mIG93bmVyc2hpcDwvbGk+XG4gICAgICAgICAgPGxpPlRvdGFsIHllYXJzIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBhcyB5b3VyIG1haW4gaG9tZTwvbGk+XG4gICAgICAgICAgPGxpPkFueSBwZXJpb2RzIHRoZSBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBvciB1c2VkIGZvciBidXNpbmVzczwvbGk+XG4gICAgICAgICAgPGxpPkFueSBzcGVjaWFsIGNpcmN1bXN0YW5jZXMgdGhhdCBtYXkgcXVhbGlmeSBmb3IgYW4gZXhjZXB0aW9uIHRvIHRoZSBwaHlzaWNhbCBwcmVzZW5jZSByZXF1aXJlbWVudCAoZS5nLiwgaGVhbHRoIGlzc3VlcywgZW1wbG95bWVudCBjaGFuZ2VzKTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UHJpb3IgR2FpbiBFeGNsdXNpb25zOjwvc3Ryb25nPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPkhhdmUgeW91IHNvbGQgYW5vdGhlciBtYWluIGhvbWUgd2l0aGluIHRoZSBsYXN0IHR3byB5ZWFycyBhbmQgY2xhaW1lZCBleGNsdXNpb24/PC9saT5cbiAgICAgICAgICA8bGk+SWYgeWVzLCBkZXRhaWxzIG9mIHRoZSBwcmlvciBzYWxlIGluY2x1ZGluZyBkYXRlIGFuZCBhbW91bnQgb2YgZ2FpbiBleGNsdWRlZDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGZpbGluZyBvZiB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTAzMSBFeGNoYW5nZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNlY3Rpb24gMTAzMSBFeGNoYW5nZVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBJbiByZXZpZXdpbmcgeW91ciByZWNvcmRzLCBpdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgeW91IG1heSBoYXZlIGVuZ2FnZWQgaW4gYSBTZWN0aW9uIDEwMzEgZXhjaGFuZ2UuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHJlbGV2YW50IElSUyBndWlkZWxpbmVzLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGJvdGggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSBhbmQgdGhlIHJlcGxhY2VtZW50IHByb3BlcnR5LiBQbGVhc2UgaW5jbHVkZSBsb2NhdGlvbiwgdHlwZSBvZiBwcm9wZXJ0eSAoZS5nLiwgY29tbWVyY2lhbCwgcmVzaWRlbnRpYWwpLCBhbmQgYW55IGlkZW50aWZ5aW5nIG51bWJlcnMgKGUuZy4sIHBhcmNlbCBudW1iZXIpLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5UcmFuc2FjdGlvbiBEYXRlczo8L3N0cm9uZz4gVGhlIGRhdGUgb24gd2hpY2ggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSB3YXMgdHJhbnNmZXJyZWQsIGFuZCB0aGUgZGF0ZSB0aGUgcmVwbGFjZW1lbnQgcHJvcGVydHkgd2FzIHJlY2VpdmVkLiBUaGVzZSBkYXRlcyBhcmUgY3J1Y2lhbCB0byBkZXRlcm1pbmUgY29tcGxpYW5jZSB3aXRoIHRoZSA0NS1kYXkgaWRlbnRpZmljYXRpb24gYW5kIDE4MC1kYXkgZXhjaGFuZ2UgY29tcGxldGlvbiByZXF1aXJlbWVudHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlRyYW5zYWN0aW9uIFZhbHVlczo8L3N0cm9uZz4gVGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIGJvdGggdGhlIHJlbGlucXVpc2hlZCBhbmQgcmVwbGFjZW1lbnQgcHJvcGVydGllcyBhdCB0aGUgdGltZSBvZiB0aGUgZXhjaGFuZ2UsIGFsb25nIHdpdGggYW55IGZpbmFuY2lhbCBhZGp1c3RtZW50cyBvciBhZGRpdGlvbmFsIGNhc2ggcmVjZWl2ZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGdhaW4gb3IgbG9zcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SW50ZXJtZWRpYXJ5IERldGFpbHM6PC9zdHJvbmc+IEluZm9ybWF0aW9uIGFib3V0IGFueSBxdWFsaWZpZWQgaW50ZXJtZWRpYXJ5IHVzZWQgZHVyaW5nIHRoZSBleGNoYW5nZSwgaW5jbHVkaW5nIHRoZWlyIG5hbWUsIGNvbnRhY3QgaW5mb3JtYXRpb24sIGFuZCBkZXRhaWxzIG9mIHRoZWlyIGludm9sdmVtZW50LiBJZiBubyBpbnRlcm1lZGlhcnkgd2FzIHVzZWQsIHBsZWFzZSBleHBsYWluIGhvdyB0aGUgZXhjaGFuZ2Ugd2FzIGZhY2lsaXRhdGVkLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5PcmlnaW5hbCBQdXJjaGFzZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBkYXRlIG9mIGFjcXVpc2l0aW9uIGZvciB0aGUgcmVsaW5xdWlzaGVkIHByb3BlcnR5LiBUaGlzIGluZm9ybWF0aW9uIGFzc2lzdHMgaW4gZGV0ZXJtaW5pbmcgdGhlIGJhc2lzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SW1wcm92ZW1lbnRzIG9yIEV4cGVuc2VzOjwvc3Ryb25nPiBEZXRhaWxzIG9mIGFueSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgcmVwbGFjZW1lbnQgcHJvcGVydHkgd2l0aGluIHRoZSBleGNoYW5nZSBwZXJpb2Qgb3IgYW55IGFkZGl0aW9uYWwgZXhwZW5zZXMgaW5jdXJyZWQgdGhhdCBuZWVkIHRvIGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIHByb3BlcnR5J3MgYmFzaXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIFNlY3Rpb24gMTAzMSBleGNoYW5nZSBhbmQgZW5zdXJpbmcgdGhhdCBhbGwgSVJTIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBJdCBhbHNvIGhlbHBzIHVzIHRvIGFkdmlzZSB5b3UgYWNjdXJhdGVseSBvbiBhbnkgcG90ZW50aWFsIGRlZmVycmVkIHRheCBsaWFiaWxpdGllcyBvciBiZW5lZml0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4Y2hhbmdlLjwvcD5cbiAgICA8cD5QbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRldGFpbHMuIFdlIGFyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkludm9sdW50YXJ5IENvbnZlcnNpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBtYXkgaGF2ZSB1bmRlcmdvbmUgYSBTZWN0aW9uIDEwMzMgZXhjaGFuZ2UgKGludm9sdW50YXJ5IGNvbnZlcnNpb24pIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgbWF4aW11bSBjb21wbGlhbmNlIGFuZCBiZW5lZml0IGZvciB5b3UsIHdlIHJlcXVpcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgZXZlbnQuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPk5hdHVyZSBvZiB0aGUgUHJvcGVydHk6PC9zdHJvbmc+IERlc2NyaWJlIHRoZSB0eXBlIG9mIHByb3BlcnR5IGludm9sdmVkIChlLmcuLCByZWFsIGVzdGF0ZSwgcGVyc29uYWwgcHJvcGVydHksIGV0Yy4pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIEludm9sdW50YXJ5IENvbnZlcnNpb246PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGNpcmN1bXN0YW5jZXMgdGhhdCBsZWQgdG8gdGhlIGludm9sdW50YXJ5IGNvbnZlcnNpb24gKGUuZy4sIG5hdHVyYWwgZGlzYXN0ZXIsIHRoZWZ0LCBjb25kZW1uYXRpb24pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkluc3VyYW5jZSBQcm9jZWVkcyBSZWNlaXZlZDo8L3N0cm9uZz4gSW5kaWNhdGUgdGhlIGFtb3VudCBvZiBhbnkgaW5zdXJhbmNlIHByb2NlZWRzIHJlY2VpdmVkIGFzIGNvbXBlbnNhdGlvbiBmb3IgdGhlIGNvbnZlcnNpb24uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVpbnZlc3RtZW50IG9mIFByb2NlZWRzOjwvc3Ryb25nPiBEZXRhaWwgYW55IHJlaW52ZXN0bWVudCBvZiB0aGUgcHJvY2VlZHMgaW50byBzaW1pbGFyIHByb3BlcnR5LCBpbmNsdWRpbmcgdHlwZXMgb2YgcHJvcGVydGllcyBhY3F1aXJlZCwgZGF0ZXMgb2YgYWNxdWlzaXRpb24sIGFuZCBhbW91bnRzIHJlaW52ZXN0ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VGltZWxpbmUgb2YgRXZlbnRzOjwvc3Ryb25nPiBQcm92aWRlIGEgdGltZWxpbmUgb2YgdGhlIGtleSBldmVudHMsIGZyb20gdGhlIGRhdGUgb2YgdGhlIGludm9sdW50YXJ5IGNvbnZlcnNpb24gdG8gdGhlIHJlaW52ZXN0bWVudCBvZiBwcm9jZWVkcywgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBdHRhY2ggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gc3VjaCBhcyBpbnN1cmFuY2Ugc2V0dGxlbWVudCBzdGF0ZW1lbnRzLCBwdXJjaGFzZSBjb250cmFjdHMgZm9yIHJlcGxhY2VtZW50IHByb3BlcnR5LCBvciBvZmZpY2lhbCBub3RpY2VzIG9mIGNvbmRlbW5hdGlvbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgcHJvdmlkZWQgaW5mb3JtYXRpb24gaXMgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHRvIGZhY2lsaXRhdGUgYW4gZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB3aXRoIGFueSBxdWVzdGlvbnMgeW91IG1pZ2h0IGhhdmUgcmVnYXJkaW5nIHRoaXMgcmVxdWVzdC48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgSW5jb21lXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXG4gICAgPHA+SSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheGVzLCB3ZSBub3RpY2VkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgcmVudGFsIGluY29tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIGV4cGxvcmUgcG90ZW50aWFsIGRlZHVjdGlvbnMgb3IgY3JlZGl0cywgd2UgbmVlZCBzb21lIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgcmVudGFsIGluY29tZS48L3A+XG48cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuPG9sPlxuICA8bGk+VGhlIGFkZHJlc3Mgb2YgdGhlIHByb3BlcnR5IGdlbmVyYXRpbmcgdGhlIHJlbnRhbCBpbmNvbWUuPC9saT5cbiAgPGxpPlRvdGFsIGFtb3VudCBvZiByZW50YWwgaW5jb21lIHJlY2VpdmVkIGluIHRoZSB0YXggeWVhci48L2xpPlxuICA8bGk+TW9udGhzIHRoZSBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dC48L2xpPlxuICA8bGk+QW55IHBlcmlvZHMgb2YgcGVyc29uYWwgdXNlIG9mIHRoZSByZW50YWwgcHJvcGVydHkuPC9saT5cbiAgPGxpPkEgc3VtbWFyeSBvZiBleHBlbnNlcyByZWxhdGVkIHRvIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IHByb3BlcnR5IG1hbmFnZW1lbnQgZmVlcywgbWFpbnRlbmFuY2UgYW5kIHJlcGFpcnMsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCAoaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgPGxpPkRldGFpbHMgb2YgYW55IG1ham9yIGltcHJvdmVtZW50cyBvciByZW5vdmF0aW9ucyBkb25lIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbjwvb2w+XG48cD5UaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCB1cyBwYWludCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgeW91ciByZW50YWwgaW5jb21lLCBhbGxvd2luZyB1cyB0byBlbnN1cmUgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IGFwcGxpY2FibGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSByZXBvcnQgeW91ciBpbmNvbWUuIFlvdXIgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgY3J1Y2lhbCBmb3IgdGhlIHRpbWVseSBhbmQgZWZmZWN0aXZlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy48L3A+XG48cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBvciBpZiB0aGVyZSdzIGFueSBvdGhlciB3YXkgSSBjYW4gYXNzaXN0LCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gZ2V0IGluIHRvdWNoLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZHZhbmNlZCBSZW50XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQWR2YW5jZWQgUmVudFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGFkdmFuY2VkIHJlbnQgcGF5bWVudHMgdGhpcyB5ZWFyIGZvciB5b3VyIHJlbnRhbCBwcm9wZXJ0eS4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgYW1vdW50IG9mIGFkdmFuY2VkIHJlbnQgcmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSBzdW0gdG90YWwgb2YgYWxsIHJlbnQgcGF5bWVudHMgcmVjZWl2ZWQgaW4gYWR2YW5jZSAoY292ZXJpbmcgZnV0dXJlIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IG1vbnRoKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSBzcGVjaWZpYyBkYXRlKHMpIG9uIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBhZHZhbmNlZCByZW50IHBheW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBwZXJpb2QgY292ZXJlZDo8L3N0cm9uZz4gVGhlIHJhbmdlIG9mIGRhdGVzIChzdGFydCBhbmQgZW5kKSB0aGF0IGVhY2ggYWR2YW5jZWQgcmVudCBwYXltZW50IGNvdmVycy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBhZGRyZXNzOjwvc3Ryb25nPiBUaGUgYWRkcmVzcyBvZiB0aGUgcmVudGFsIHByb3BlcnR5IGZvciB3aGljaCB0aGUgYWR2YW5jZWQgcmVudCB3YXMgcGFpZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5MZWFzZSBhZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50KHMpIHdpdGggdGhlIHRlbmFudChzKSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMgb2YgdGhlIGFkdmFuY2VkIHJlbnQgcGF5bWVudChzKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgcGFydGlhbCByZWZ1bmRzIGlzc3VlZDo8L3N0cm9uZz4gSWYgYW55IHJlZnVuZHMgd2VyZSBpc3N1ZWQgYWdhaW5zdCB0aGUgYWR2YW5jZWQgcmVudHMgcmVjZWl2ZWQsIHBsZWFzZSBwcm92aWRlIGRldGFpbHMgYW5kIHJlc3BlY3RpdmUgYW1vdW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBwaXZvdGFsIGluIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxpYW50IHdpdGggcmVsZXZhbnQgdGF4IGxhd3MuIFBsZWFzZSBlbnN1cmUgdGhlIGRldGFpbHMgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkxlYXNlIENhbmNlbGxhdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkxlYXNlIENhbmNlbGxhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgaW4geW91ciBwcmVsaW1pbmFyeSB0YXggaW5mb3JtYXRpb24gdGhhdCB5b3UgcmVjZWl2ZWQgcGF5bWVudCBmcm9tIGEgdGVuYW50IGZvciBlYXJseSBsZWFzZSBjYW5jZWxsYXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgYW5kIGFzc2VzcyBhbnkgdGF4IGltcGxpY2F0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPkxlYXNlIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBsZWFzZSBhZ3JlZW1lbnQgd2l0aCB0aGUgdGVuYW50IHdobyBwYWlkIHRvIHRlcm1pbmF0ZSB0aGVpciBsZWFzZSBlYXJseS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+QW1lbmRtZW50IG9yIFRlcm1pbmF0aW9uIEFncmVlbWVudDo8L3N0cm9uZz4gQW55IGRvY3VtZW50cyB0aGF0IGZvcm1hbGx5IGFja25vd2xlZGdlIHRoZSBlYXJseSB0ZXJtaW5hdGlvbiBvZiB0aGUgbGVhc2UsIGluY2x1ZGluZyBhbnkgcGVuYWx0aWVzLCB0aGUgdGVybWluYXRpb24gZGF0ZSwgYW5kIG90aGVyIHJlbGV2YW50IHRlcm1zLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5QYXltZW50IFJlY29yZHM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gb2YgdGhlIHBheW1lbnQgcmVjZWl2ZWQgZm9yIGxlYXNlIHRlcm1pbmF0aW9uLiBUaGlzIGNvdWxkIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHRyYW5zYWN0aW9uLCBhIHJlY2VpcHQgcHJvdmlkZWQgdG8gdGhlIHRlbmFudCwgb3IgYW55IHdyaXR0ZW4gYWdyZWVtZW50IHNwZWNpZnlpbmcgdGhlIGFtb3VudC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+Q29tbXVuaWNhdGlvbiBFdmlkZW5jZTo8L3N0cm9uZz4gQ29waWVzIG9mIGFueSB3cml0dGVuIGNvbW11bmljYXRpb24gYmV0d2VlbiB5b3UgYW5kIHRoZSB0ZW5hbnQgcmVnYXJkaW5nIHRoZSBsZWFzZSBjYW5jZWxsYXRpb24gYW5kIHRoZSBhZ3JlZW1lbnQgdG8gdGVybWluYXRlIGVhcmx5LCBpbmNsdWRpbmcgZW1haWxzIG9yIGxldHRlcnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoZXNlIGRvY3VtZW50cyBhcmUgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgdGF4IHRyZWF0bWVudCBvZiB0aGUgbGVhc2UgY2FuY2VsbGF0aW9uIHBheW1lbnQgeW91IHJlY2VpdmVkLiBUaGV5IHdpbGwgaGVscCB0byBlbnN1cmUgdGhhdCB3ZSByZXBvcnQgeW91ciBpbmNvbWUgYWNjdXJhdGVseSBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IHBvdGVudGlhbCB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzLjwvcD5cbiAgICA8cD48c3Ryb25nPkFjdGlvbiBSZXF1aXJlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uLiBZb3UgbWF5IHNlbmQgdGhlbSB2aWEgZW1haWwgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tLCBvciB1cGxvYWQgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFpZCBBZHZhbmNlIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUGFpZCBBZHZhbmNlIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgcGF5bWVudHMgZm9yIGluc3VyYW5jZSBwcmVtaXVtcyBvciBzaW1pbGFyIGNvc3RzIHJlbGF0ZWQgdG8geW91ciByZW50YWwgcHJvcGVydHksIHdoaWNoIGNvdmVyIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHByZXBhaWQgZXhwZW5zZXMgaW4geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbjxvbD5cbiAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBQYWlkIEV4cGVuc2VzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgcmVjZWlwdHMsIGludm9pY2VzLCBvciBjb250cmFjdHMgc2hvd2luZyB0aGUgcGF5bWVudCBvZiBpbnN1cmFuY2UgcHJlbWl1bXMgb3Igc2ltaWxhciBleHBlbnNlcy4gVGhpcyBzaG91bGQgY2xlYXJseSBpbmRpY2F0ZSB0aGUgYW1vdW50IHBhaWQsIHRoZSBkYXRlIG9mIHBheW1lbnQsIGFuZCB0aGUgY292ZXJhZ2UgcGVyaW9kLjwvbGk+XG4gIDxsaT48c3Ryb25nPkNvdmVyYWdlIFBlcmlvZCBEZXRhaWxzOjwvc3Ryb25nPiBXZSBuZWVkIHNwZWNpZmljIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBjb3ZlcmFnZSBwZXJpb2QgZm9yIGVhY2ggZXhwZW5zZS4gUGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvciBhIHdyaXR0ZW4gc3VtbWFyeSB0aGF0IHNwZWNpZmllcyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgY292ZXJhZ2UgcGVyaW9kcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIGN1cnJlbnQgeWVhci48L2xpPlxuICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gQ29uZmlybSB0aGUgYWRkcmVzcyBvciBpZGVudGlmaWNhdGlvbiBvZiB0aGUgcmVudGFsIHByb3BlcnR5KGllcykgdG8gd2hpY2ggdGhlc2UgZXhwZW5zZXMgYXBwbHkuPC9saT5cbiAgPGxpPjxzdHJvbmc+UHVycG9zZSBvZiB0aGUgRXhwZW5zZTo8L3N0cm9uZz4gRm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMsIHByb3ZpZGUgYSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgbmF0dXJlIG9mIGVhY2ggZXhwZW5zZSAoZS5nLiwgcHJvcGVydHkgaW5zdXJhbmNlLCBsaWFiaWxpdHkgaW5zdXJhbmNlKS48L2xpPlxuPC9vbD5cbjxwPlBsZWFzZSByZW1lbWJlciB0aGF0IGhhdmluZyBhY2N1cmF0ZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIHdpbGwgYWlkIGluIGVuc3VyaW5nIHRoYXQgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgY29ycmVjdGx5LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIHRoZXNlIHByZXBhaWQgZXhwZW5zZXMuPC9wPlxuPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCB5b3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJlbmVmaXQgVmFsdWUgSW5jcmVhc2VcIixcbiAgICBhY3Rpb25UaXRsZTogXCJCZW5lZml0IFZhbHVlIEluY3JlYXNlXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyBuZWNlc3NhcnkgZG9jdW1lbnRzIGZvciB0YXggcHJlcGFyYXRpb24uIFxuICAgIEFzIHBlciB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgcGF5bWVudCBmb3IgbG9jYWwgaW1wcm92ZW1lbnRzIFxuICAgIG9yIHNlcnZpY2VzIHRoYXQgZGlyZWN0bHkgaW5jcmVhc2UgdGhlIHZhbHVlIG9mIHlvdXIgcmVudGFsIHByb3BlcnR5LCBcbiAgICB3ZSBuZWVkIGZ1cnRoZXIgZGV0YWlscyB0byBlbnN1cmUgdGhlIGFjY3VyYXRlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRhdGlvbi48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5EZXNjcmlwdGlvbiBvZiB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZSBwcm92aWRlZCAoZS5nLiwgc3RyZWV0IHJlcGFpcnMsIG5ldyBzaWRld2Fsa3MpLjwvbGk+XG4gICAgICAgIDxsaT5EYXRlKHMpIG9mIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlLjwvbGk+XG4gICAgICAgIDxsaT5Ub3RhbCBjb3N0IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGltcHJvdmVtZW50IG9yIHNlcnZpY2UuPC9saT5cbiAgICAgICAgPGxpPlByb29mIG9mIHBheW1lbnQgZm9yIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlIChyZWNlaXB0cywgYmFuayBzdGF0ZW1lbnRzLCBldGMuKS48L2xpPlxuICAgICAgICA8bGk+QW55IG9mZmljaWFsIG5vdGljZXMgb3IgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBsb2NhbCBtdW5pY2lwYWxpdHkgcmVnYXJkaW5nIHRoZSBpbXByb3ZlbWVudHMgb3IgY2hhcmdlcy48L2xpPlxuICAgICAgICA8bGk+RGV0YWlscyBvZiBob3cgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2Ugc3BlY2lmaWNhbGx5IGJlbmVmaXRlZCB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHBvdGVudGlhbCB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0eSB2YWx1ZSBpbmNyZWFzZXMgZHVlIHRvIGxvY2FsIGltcHJvdmVtZW50cyBvciBzZXJ2aWNlcy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZmFjaWxpdGF0ZSB0aGUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRhdGlvbi48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZmVpdGVkIFNlY3VyaXR5IERlcG9zaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JmZWl0ZWQgU2VjdXJpdHkgRGVwb3NpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgYWNjdXJhdGUgYW5kIGNvbXBsaWFudCwgd2UndmUgbm90ZWQgdGhhdCB5b3UgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gaGF2aW5nIG9uZSBvciBtb3JlIHRlbmFudHMgd2hvIGRpZCBub3QgZ2V0IHRoZWlyIHNlY3VyaXR5IGRlcG9zaXQgYmFjayB0aGlzIHllYXIgZHVlIHRvIGVpdGhlciBicmVha2luZyB0aGUgbGVhc2UgdGVybXMgb3IgbGVhdmluZyBkYW1hZ2UgcmVxdWlyaW5nIHJlcGFpci48L3A+XG4gICAgPHA+VG8gcHJvY2VlZCB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+QSBsaXN0IG9mIGVhY2ggdGVuYW50IHdob3NlIHNlY3VyaXR5IGRlcG9zaXQgd2FzIGZvcmZlaXRlZCwgaW5jbHVkaW5nOjwvbGk+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+VGVuYW50J3MgbmFtZTwvbGk+XG4gICAgICAgICAgPGxpPlJlbnRhbCBhZGRyZXNzPC9saT5cbiAgICAgICAgICA8bGk+RGF0ZSBvZiBsZWFzZSB0ZXJtaW5hdGlvbjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIGV2aWRlbmNpbmcgdGhlIGZvcmZlaXR1cmUgcmVhc29uLCBzdWNoIGFzOjwvbGk+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50IHNob3dpbmcgdGhlIGJyZWFjaGVkIHRlcm1zPC9saT5cbiAgICAgICAgICA8bGk+UGhvdG9zIG9yIHJlcGFpciBpbnZvaWNlcyBmb3IgZGFtYWdlcyBjYXVzZWQgYnkgdGhlIHRlbmFudDwvbGk+XG4gICAgICAgICAgPGxpPkFueSB3cml0dGVuIG5vdGljZXMgcHJvdmlkZWQgdG8gdGhlIHRlbmFudCByZWdhcmRpbmcgdGhlIGZvcmZlaXR1cmU8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZWFjaCBmb3JmZWl0ZWQgc2VjdXJpdHkgZGVwb3NpdC48L2xpPlxuICAgICAgPGxpPkFueSByZWNlaXB0cyBvciBpbnZvaWNlcyBmb3IgcmVwYWlycyBhbmQgbWFpbnRlbmFuY2UgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgcmVhc29ucyBmb3Igc2VjdXJpdHkgZGVwb3NpdCBmb3JmZWl0dXJlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoaXMgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgaW4gYSBjbGVhciBhbmQgb3JnYW5pemVkIG1hbm5lciB0byBmYWNpbGl0YXRlIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gVGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOb24tQ2FzaCBSZW50XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uLUNhc2ggUmVudFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGUgZnJvbSB5b3VyIGVhcmxpZXIgcmVzcG9uc2VzIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgbm9uLWNhc2ggZm9ybXMgb2YgcGF5bWVudCBpbiBsaWV1IG9mIHJlbnQgdGhpcyB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0cmFuc2FjdGlvbnMuIEtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBTZXJ2aWNlIG9yIEdvb2RzIFJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLCBnb29kcywgb3IgcHJvcGVydHkgeW91IHJlY2VpdmVkIGFzIHJlbnQgcGF5bWVudC4gRm9yIGluc3RhbmNlLCBcIlJlcGFpciBzZXJ2aWNlcyBmb3IgdGhlIGtpdGNoZW4gcGx1bWJpbmdcIiBvciBcImEgbGFwdG9wIGNvbXB1dGVyXCIuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5WYWx1ZSBFc3RpbWF0aW9uOjwvc3Ryb25nPiBBbiBlc3RpbWF0ZWQgdmFsdWUgb2YgdGhlIHNlcnZpY2UsIGdvb2RzLCBvciBwcm9wZXJ0eSByZWNlaXZlZCBhdCB0aGUgdGltZSBvZiB0aGUgdHJhbnNhY3Rpb24uIElmIHBvc3NpYmxlLCBpbmNsdWRlIGFueSBkb2N1bWVudGF0aW9uIHRoYXQgc3VwcG9ydHMgdGhpcyB2YWx1YXRpb24sIHN1Y2ggYXMgcmVjZWlwdHMsIGludm9pY2VzLCBvciB3cml0dGVuIGFncmVlbWVudHMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIFRyYW5zYWN0aW9uOjwvc3Ryb25nPiBTcGVjaWZpYyBkYXRlKHMpIHdoZW4geW91IHJlY2VpdmVkIHRoZXNlIGdvb2RzIG9yIHNlcnZpY2VzLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+SW5mb3JtYXRpb24gYWJvdXQgdGhlIFRlbmFudCBvciBQcm92aWRlcjo8L3N0cm9uZz4gTmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBwcm92aWRlZCB0aGUgZ29vZHMgb3Igc2VydmljZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5BbnkgRm9ybWFsIEFncmVlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgd3JpdHRlbiBhZ3JlZW1lbnRzIG9yIGNvbnRyYWN0cyB0aGF0IG91dGxpbmUgdGhpcyBhcnJhbmdlbWVudC48L2xpPlxuICAgIDxsaT48c3Ryb25nPlJlY2VpcHRzIG9yIERvY3VtZW50YXRpb24gb2YgdGhlIFRyYW5zYWN0aW9uOjwvc3Ryb25nPiBBbnkgcmVjZWlwdHMsIGludm9pY2VzLCBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgZXZpZGVuY2VzIHRoZSBleGNoYW5nZS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB5b3VyIGluY29tZS4gWW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlIHdpbGwgZ3JlYXRseSBhc3Npc3QgaW4gY29tcGxldGluZyB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseS48L3A+XG4gICAgPHA+UGxlYXNlIHN1Ym1pdCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHRpbWVseSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgUHJvcGVydHkgRGVwcmVjaWF0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIFByb3BlcnR5IERlcHJlY2lhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIHJldmlld2luZyB5b3VyIGFjY291bnRzLCB3ZSd2ZSBub3RlZCB0aGF0IGFsbCB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzIGFyZSBjdXJyZW50bHkgYmVpbmcgZGVwcmVjaWF0ZWQgYXMgcGFydCBvZiB0aGVpciB0YXggdHJlYXRtZW50IGluIG91ciBmaW5hbmNpYWwgcmVjb3Jkcy4gVGhpcyBtZXRob2QgaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgZmluYW5jaWFsIHJlcG9ydGluZyBhbmQgdGF4IGVmZmljaWVuY3kuIEhvd2V2ZXIsIGl0IGhhcyBjb21lIHRvIG91ciBhdHRlbnRpb24gdGhhdCB0aGVyZSBtYXkgYmUgZGlzY3JlcGFuY2llcyBvciB1cGRhdGVzIHJlcXVpcmVkIGluIG91ciByZWNvcmRzIHJlZ2FyZGluZyB0aGUgZGVwcmVjaWF0aW9uIG9mIHlvdXIgcmVudGFsIHByb3BlcnRpZXMuPC9wPlxuICAgIDxwPlRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGludGVncml0eSBvZiB5b3VyIGZpbmFuY2lhbCBhbmQgdGF4IHJlcG9ydGluZywgd2Uga2luZGx5IHJlcXVlc3QgeW91ciBhc3Npc3RhbmNlIGluIHZlcmlmeWluZyB0aGUgY3VycmVudCBzdGF0dXMgb2YgeW91ciByZW50YWwgcHJvcGVydGllcyB3aXRoIHJlZ2FyZHMgdG8gZGVwcmVjaWF0aW9uLjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPkNvbmZpcm0gd2hldGhlciBhbGwgeW91ciByZW50YWwgcHJvcGVydGllcyBhcmUgYmVpbmcgZGVwcmVjaWF0ZWQgaW4gb3VyIGJvb2tzLiBJZiB0aGlzIGlzIGFjY3VyYXRlLCBubyBhY3Rpb24gaXMgcmVxdWlyZWQgb24geW91ciBwYXJ0LjwvbGk+XG4gICAgPGxpPklmIHRoZXJlIGFyZSBhbnkgcmVudGFsIHByb3BlcnRpZXMgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gY3VycmVudGx5IGJlaW5nIGRlcHJlY2lhdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggcHJvcGVydHk6PC9saT5cbiAgICAgICAgPHVsPlxuICAgICAgICAgICAgPGxpPlByb3BlcnR5IEFkZHJlc3M8L2xpPlxuICAgICAgICAgICAgPGxpPkRhdGUgb2YgUHVyY2hhc2U8L2xpPlxuICAgICAgICAgICAgPGxpPlB1cmNoYXNlIFByaWNlPC9saT5cbiAgICAgICAgICAgIDxsaT5SZWFzb24gZm9yIE5vbi1EZXByZWNpYXRpb248L2xpPlxuICAgICAgICAgICAgPGxpPkFueSBhZGRpdGlvbmFsIHJlbGV2YW50IGluZm9ybWF0aW9uPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L29sPlxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdCBpcyBoaWdobHkgYXBwcmVjaWF0ZWQgYW5kIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3VyIGZpbmFuY2lhbCByZWNvcmRzIGFjY3VyYXRlbHkgcmVmbGVjdCB5b3VyIHRheCBvYmxpZ2F0aW9ucyBhbmQgYmVuZWZpdHMuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhbGxvdyBzdWZmaWNpZW50IHRpbWUgZm9yIHJldmlzaW9ucyBhbmQgdXBkYXRlcyBhcyBuZWNlc3NhcnkuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gV2UgYXJlIGhlcmUgdG8gc3VwcG9ydCB5b3UgaW4gbWFpbnRhaW5pbmcgcHJlY2lzZSBhbmQgY29tcGxpYW50IGZpbmFuY2lhbCByZWNvcmRzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCB5b3VyIGNvbnRpbnVlZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBSZXBhaXJzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIFJlcGFpcnNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90ZWQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIG1ha2luZyBuZWNlc3NhcnkgcmVwYWlycyB0byB5b3VyIHJlbnRhbCBwcm9wZXJ0eSB0byBrZWVwIGl0IGluIGdvb2Qgd29ya2luZyBjb25kaXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGV4cGVuc2VzIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIHRheCBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGFsbCByZXBhaXJzIG1hZGUgZHVyaW5nIHRoZSB0YXggeWVhci4gUGxlYXNlIGluY2x1ZGU6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBuYXR1cmUgb2YgZWFjaCByZXBhaXIgKGUuZy4sIGZpeGluZyBsZWFrcywgcGFpbnRpbmcsIHJlcGFpcmluZyBhcHBsaWFuY2VzKS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZGF0ZSBlYWNoIHJlcGFpciB3YXMgY29tcGxldGVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBsb2NhdGlvbi9hZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eSB3aGVyZSByZXBhaXJzIHdlcmUgbWFkZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPlJlY2VpcHRzIG9yIGludm9pY2VzIGZvciBlYWNoIHJlcGFpciBtYWRlLiBUaGlzIHNob3VsZCBpbmNsdWRlOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgc2VydmljZSBwcm92aWRlcuKAmXMgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbi48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHBhaWQgZm9yIGVhY2ggcmVwYWlyLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgcGVyZm9ybWVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBtZXRob2Qgb2YgcGF5bWVudCB1c2VkLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+SWYgYW55IHJlcGFpcnMgd2VyZSBtYWRlIGJ5IHlvdXJzZWxmIG9yIGFuIHVubGljZW5zZWQgY29udHJhY3RvciwgcGxlYXNlIHByb3ZpZGU6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgcGVyZm9ybWVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBjb3N0IG9mIG1hdGVyaWFscyBwdXJjaGFzZWQsIHN1cHBvcnRlZCBieSByZWNlaXB0cy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZXN0aW1hdGVkIG51bWJlciBvZiBob3VycyBzcGVudCBvbiBlYWNoIHJlcGFpciwgYWxvbmcgd2l0aCBhIHJlYXNvbmFibGUgaG91cmx5IHJhdGUgZm9yIGxhYm9yLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIG5vdGUgdGhhdCBhY2N1cmF0ZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGRlZHVjdGlvbnMgcmVsYXRlZCB0byBwcm9wZXJ0eSByZXBhaXIgZXhwZW5zZXMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgSW1wcm92ZW1lbnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIEltcHJvdmVtZW50c1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIG1hZGUgdXBncmFkZXMgb3IgZW5oYW5jZW1lbnRzIHRvIHlvdXIgcmVudGFsIHByb3BlcnR5IHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jb3Jwb3JhdGUgdGhlc2UgaW1wcm92ZW1lbnRzIGludG8geW91ciB0YXggZG9jdW1lbnRhdGlvbiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIEVhY2ggSW1wcm92ZW1lbnQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCB1cGdyYWRlIG9yIGVuaGFuY2VtZW50IG1hZGUgdG8gdGhlIHByb3BlcnR5LiBUaGlzIGNvdWxkIGluY2x1ZGUgcmVub3ZhdGlvbnMsIGFkZGl0aW9ucywgb3IgYW55IHVwZ3JhZGVzIHRoYXQgaGF2ZSBpbmNyZWFzZWQgaXRzIHZhbHVlLCBleHRlbmRlZCBpdHMgbGlmZXNwYW4sIG9yIGFkYXB0ZWQgaXQgdG8gbmV3IHVzZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2YgSW1wcm92ZW1lbnRzOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSBvciByYW5nZSBvZiBkYXRlcyB3aGVuIHRoZSBpbXByb3ZlbWVudHMgd2VyZSBzdGFydGVkIGFuZCBjb21wbGV0ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdHMgSW52b2x2ZWQ6PC9zdHJvbmc+IERldGFpbGVkIGV4cGVuc2VzIHJlbGF0ZWQgdG8gZWFjaCBpbXByb3ZlbWVudCBwcm9qZWN0LiBUaGlzIGluY2x1ZGVzIG1hdGVyaWFscywgbGFib3IsIHBlcm1pdHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29zdHMuIFBsZWFzZSBwcm92aWRlIGl0ZW1pemVkIHJlY2VpcHRzIG9yIGludm9pY2VzIGlmIGF2YWlsYWJsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBQYXltZW50Ojwvc3Ryb25nPiBDb3BpZXMgb2YgY2FuY2VsbGVkIGNoZWNrcywgYmFuayBzdGF0ZW1lbnRzLCBvciBlbGVjdHJvbmljIHBheW1lbnQgY29uZmlybWF0aW9ucyB0aGF0IHByb3ZlIHBheW1lbnQgZm9yIHRoZSBpbXByb3ZlbWVudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QmVmb3JlIGFuZCBBZnRlciBQaWN0dXJlczo8L3N0cm9uZz4gSWYgYXZhaWxhYmxlLCBwaG90b2dyYXBocyBvZiB0aGUgcHJvcGVydHkgYmVmb3JlIGFuZCBhZnRlciB0aGUgaW1wcm92ZW1lbnRzIHdlcmUgbWFkZS4gVGhpcyBoZWxwcyBpbiBzdWJzdGFudGlhdGluZyB0aGUgZW5oYW5jZW1lbnQgdG8geW91ciBwcm9wZXJ0eSdzIHZhbHVlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyYWN0b3IgSW5mb3JtYXRpb246PC9zdHJvbmc+IElmIGNvbnRyYWN0b3JzIHdlcmUgdXNlZCwgcGxlYXNlIHByb3ZpZGUgdGhlaXIgYnVzaW5lc3MgbmFtZXMsIGFkZHJlc3NlcywgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjb21wdXRpbmcgcG90ZW50aWFsIHRheCBkZWR1Y3Rpb25zIG9yIGJlbmVmaXRzIHRoYXQgbWF5IGJlIGFwcGxpY2FibGUgdG8geW91IGFzIGEgcmVzdWx0IG9mIHRoZXNlIHByb3BlcnR5IGltcHJvdmVtZW50cy4gUGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBnYXRoZXJlZCBhbmQgc3VibWl0dGVkIGFzIHNvb24gYXMgcG9zc2libGUsIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm5zLjwvcD5cbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIEFjdGl2aXR5IFBhcnRpY2lwYXRpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgQWN0aXZpdHkgUGFydGljaXBhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHdlIG1vdmUgZm9yd2FyZCB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uLCBpdCBoYXMgYmVjb21lIG5lY2Vzc2FyeSB0byBjb2xsZWN0IGEgYml0IG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgYWN0aXZlIHBhcnRpY2lwYXRpb24gaW4gcmVudGFsIHByb3BlcnR5IGFjdGl2aXRpZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGFzc2luZyBzcGVjaWZpYyB0YXggdGVzdHMgdGhhdCBhcHBseSB0byBpbmRpdmlkdWFscyBhY3RpdmVseSBpbnZvbHZlZCBpbiB0aGVpciByZW50YWwgcHJvcGVydGllcy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGRldGFpbHMgdG8gZW5zdXJlIHdlIG1lZXQgYWxsIHJlcXVpcmVtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIFBhcnRpY2lwYXRpb246PC9zdHJvbmc+IEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgeW91ciBhY3RpdmUgcm9sZXMgdGhpcyB0YXggeWVhci4gVGhpcyBpbmNsdWRlcyBtYWtpbmcgZGVjaXNpb25zIHN1Y2ggYXMgYXBwcm92aW5nIG5ldyB0ZW5hbnRzLCBzZXR0aW5nIHJlbnRhbCB0ZXJtcywgb3IgYXV0aG9yaXppbmcgcmVwYWlycyBhbmQgbWFpbnRlbmFuY2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VGltZSBTcGVudDo8L3N0cm9uZz4gQW4gZXN0aW1hdGVkIG51bWJlciBvZiBob3VycyB5b3UgcGVyc29uYWxseSBzcGVudCBvbiBhY3Rpdml0aWVzIHJlbGF0ZWQgdG8gdGhlIG1hbmFnZW1lbnQgYW5kIGRlY2lzaW9uLW1ha2luZyBvZiB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZWNpc2lvbiBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIHJlY29yZHMgb3IgY29ycmVzcG9uZGVuY2UgdGhhdCBzaG93Y2FzZSB5b3VyIGludm9sdmVtZW50IGluIGtleSBkZWNpc2lvbnMgKGUtbWFpbHMsIHNpZ25lZCBkb2N1bWVudHMsIGV0Yy4pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IE1hbmFnZW1lbnQgRW5nYWdlbWVudDo8L3N0cm9uZz4gSWYgeW91J3ZlIGVuZ2FnZWQgd2l0aCBhIHByb3BlcnR5IG1hbmFnZXIsIGEgZGVzY3JpcHRpb24gb2YgdGhlaXIgcm9sZSB2ZXJzdXMgdGhlIHRhc2tzIHlvdSBwZXJzb25hbGx5IGhhbmRsZSB3b3VsZCBiZSBoZWxwZnVsLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB3aXRoIHRoZXNlIHNwZWNpZmljcyB3aWxsIGdyZWF0bHkgZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIGFkdmFudGFnZW91cyBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiByZWdhcmRpbmcgcmVudGFsIGFjdGl2aXRpZXMuIElmIHRoZXJlIGFyZSBhbnkgYXNwZWN0cyBvZiB0aGlzIHJlcXVlc3QgdGhhdCByZXF1aXJlIGNsYXJpZmljYXRpb24sIG9yIGlmIGFzc2lzdGFuY2UgaXMgbmVlZGVkLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIHNwZW50IG1vcmUgdGhhbiBoYWxmIG9mIHlvdXIgd29ya2luZyB0aW1lIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgdGhpcyB0YXggeWVhci4gVG8gcHJvcGVybHkgZXZhbHVhdGUgeW91ciBlbGlnaWJpbGl0eSBmb3IgdGF4IGJlbmVmaXRzIGFzIGEgUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgIDxsaT48c3Ryb25nPlN1bW1hcnkgb2YgQW5udWFsIFdvcmtpbmcgSG91cnM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgc3VtbWFyeSBvZiB5b3VyIHRvdGFsIHdvcmtpbmcgaG91cnMgdGhpcyB5ZWFyLCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgaG91cnMgZGVkaWNhdGVkIHRvIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZWFsIEVzdGF0ZSBBY3Rpdml0aWVzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHN1Y2ggYXMgY29udHJhY3RzLCBlbmdhZ2VtZW50IGxldHRlcnMsIG9yIGNsaWVudCBpbnZvaWNlcyB0aGF0IHByb3ZlIHlvdXIgcGFydGljaXBhdGlvbiBpbiByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzIChlLmcuLCBzYWxlcywgbGVhc2luZywgbWFuYWdlbWVudCkuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5MaXN0IG9mIFByb3BlcnRpZXM6PC9zdHJvbmc+IEEgbGlzdCBvZiBwcm9wZXJ0aWVzIHlvdSBoYXZlIG1hbmFnZWQsIHNvbGQsIG9yIGFyZSBjdXJyZW50bHkgc2VsbGluZywgaW5jbHVkaW5nIHRoZWlyIGxvY2F0aW9uIGFuZCB0aGUgbmF0dXJlIG9mIHlvdXIgaW52b2x2ZW1lbnQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBKb2IgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgYnJpZWYgb3V0bGluZSBvZiB5b3VyIHJvbGUocykgaW4gcmVhbCBlc3RhdGUgYWN0aXZpdGllcywgc3BlY2lmeWluZyB3aGV0aGVyIHlvdXIgaW52b2x2ZW1lbnQgaXMgcHJpbWFyaWx5IGFzIGEgYnJva2VyLCBhZ2VudCwgcHJvcGVydHkgbWFuYWdlciwgZXRjLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+UmVhbCBFc3RhdGUgTGljZW5zZXMgb3IgQ2VydGlmaWNhdGlvbnM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgbGljZW5zZXMgb3IgY2VydGlmaWNhdGlvbnMgdGhhdCB2YWxpZGF0ZSB5b3VyIHByb2Zlc3Npb25hbCBzdGF0dXMgaW4gdGhlIHJlYWwgZXN0YXRlIHNlY3Rvci48L2xpPlxuICAgIDxsaT48c3Ryb25nPkNhbGVuZGFyIG9yIFNjaGVkdWxlOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIGEgY2FsZW5kYXIgb3Igc2NoZWR1bGUgcmVmbGVjdGluZyB5b3VyIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgdGhyb3VnaG91dCB0aGUgeWVhciB0byBoZWxwIGNvcnJvYm9yYXRlIHRoZSB0aW1lIHNwZW50IGluIHRoZXNlIGFjdGl2aXRpZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGlzIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gdXMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJucy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZC4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFydGlhbCBSZW50YWwgUHJvcGVydHlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQYXJ0aWFsIFJlbnRhbCBQcm9wZXJ0eVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgbGV0dGluZyB1cyBrbm93IHRoYXQgeW91IHJlbnRlZCBvdXQgYSBwb3J0aW9uIG9mIHlvdXIgcHJvcGVydHkgdGhpcyB0YXggeWVhciB3aGlsZSB1c2luZyB0aGUgcmVzdCBmb3IgcGVyc29uYWwgcHVycG9zZXMuIFRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGJlc3QgdGF4IGFkdmFudGFnZXMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBwYXJ0aWFsIHJlbnRhbCBwcm9wZXJ0eTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXRhaWxzOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Db21wbGV0ZSBhZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5EZXNjcmlwdGlvbiBvZiB0aGUgcmVudGVkIHBvcnRpb24gYW5kIHRoZSBwZXJzb25hbCB1c2UgcG9ydGlvbi48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudDo8L3N0cm9uZz5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5TdGFydCBhbmQgZW5kIGRhdGVzIG9mIHRoZSByZW50YWwgcGVyaW9kIHdpdGhpbiB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBJbmNvbWU6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBhZHZhbmNlIHJlbnQgb3Igc2VjdXJpdHkgZGVwb3NpdHMgbm90IHJldHVybmVkIHRvIHRoZSB0ZW5hbnQuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2VzOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgZXhwZW5zZXMgZm9yIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyByZXBhaXJzLCB1dGlsaXRpZXMsIGluc3VyYW5jZSwgYW5kIHByb3BlcnR5IHRheGVzLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGV4cGVuc2VzIHNoYXJlZCBiZXR3ZWVuIHRoZSByZW50YWwgYW5kIHBlcnNvbmFsIHVzZSBwb3J0aW9ucywgYW5kIGhvdyB0aGV5IGFyZSBkaXZpZGVkLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Vc2Ugb2YgUHJvcGVydHk6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIG51bWJlciBvZiBkYXlzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIG51bWJlciBvZiBkYXlzIHJlbnRlZCBhdCBmYWlyIHJlbnRhbCB2YWx1ZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW1wcm92ZW1lbnRzIGFuZCBSZXBhaXJzOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBpbXByb3ZlbWVudHMgb3IgcmVwYWlycyBtYWRlIHNwZWNpZmljYWxseSBpbiB0aGUgcmVudGFsIHBvcnRpb24gYW5kIHRoZSBjb3N0IGludm9sdmVkLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkZXRhaWxzIGFuZCBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gVGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgdGhpcyBpbmZvcm1hdGlvbiBhcmUgY3J1Y2lhbCBmb3IgY29ycmVjdCB0YXggZmlsaW5nIGFuZCBvcHRpbWl6aW5nIHlvdXIgcG90ZW50aWFsIGRlZHVjdGlvbnMgYW5kIHRheCBiZW5lZml0cy48L3A+XG4gICAgPHA+RG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dCBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJzb25hbCBVc2UgUmVudGFsXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdXNpbmcgeW91ciByZW50YWwgcHJvcGVydHkgZm9yIHBlcnNvbmFsIHB1cnBvc2VzIGR1cmluZyB0aGUgbGFzdCB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgZGF5cyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3Nlczo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIGV4YWN0IG51bWJlciBvZiBkYXlzIGR1cmluZyB0aGUgdGF4IHllYXIgd2hlbiB0aGUgcHJvcGVydHkgd2FzIHVzZWQgYnkgeW91LCB5b3VyIGZhbWlseSwgb3IgZnJpZW5kcyB3aXRob3V0IGNoYXJnaW5nIHJlbnQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgZGF5cyByZW50ZWQgYXQgZmFpciByZW50YWwgcHJpY2U6PC9zdHJvbmc+IFByb3ZpZGUgdGhlIG51bWJlciBvZiBkYXlzIHRoZSBwcm9wZXJ0eSB3YXMgYWN0dWFsbHkgcmVudGVkIG91dCB0byB0ZW5hbnRzIGF0IGEgZmFpciByZW50YWwgcHJpY2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIGluY29tZSByZWNlaXZlZDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgdG90YWwgYW1vdW50IG9mIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgZXhwZW5zZXM6PC9zdHJvbmc+IFByb3ZpZGUgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBleHBlbnNlcyBpbmN1cnJlZCBmb3IgdGhlIHByb3BlcnR5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFkdmVydGlzaW5nLCBjbGVhbmluZyBhbmQgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBwcm9wZXJ0eSB0YXhlcywgbW9ydGdhZ2UgaW50ZXJlc3QsIGFuZCBhbnkgcmVwYWlycy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgYW5kIGRhdGVzOjwvc3Ryb25nPiBMaXN0IGFueSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgcHJvcGVydHkgZHVyaW5nIHRoZSB0YXggeWVhciwgYWxvbmcgd2l0aCB0aGUgZGF0ZSBvZiBpbXByb3ZlbWVudCBhbmQgdGhlIGNvc3QuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgVGF4IFN0YXRlbWVudCBhbmQgTW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50Ojwvc3Ryb25nPiBBdHRhY2ggYSBjb3B5IG9mIHlvdXIgYW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnQgYW5kIG1vcnRnYWdlIGludGVyZXN0IHN0YXRlbWVudCBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBlbmFibGUgdXMgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgcG9ydGlvbiBvZiBleHBlbnNlcyB0aGF0IGNhbiBiZSBkZWR1Y3RlZCBhbmQgcmVwb3J0IHlvdXIgaW5jb21lIGFjY3VyYXRlbHkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgY291bnRzIGFzIHBlcnNvbmFsIHVzZSB2ZXJzdXMgcmVudGFsIHVzZSwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD4gIFxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIHJlbnRpbmcgb3V0IHBhcnQgb2YgeW91ciBwcm9wZXJ0eSBmb3IgcHJvZml0LCB3aGlsZSBhbHNvIHVzaW5nIGl0IGluIGEgbWFubmVyIHRoYXQgbWF5IGNsYXNzaWZ5IGl0IGFzIHlvdXIgcmVzaWRlbmNlLiBUbyBhY2N1cmF0ZWx5IGNhcHR1cmUgYWxsIGluZm9ybWF0aW9uIGFuZCBjb21wbHkgd2l0aCB0YXggcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQvTGVhc2U6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMsIHJlbnRhbCBwZXJpb2QsIGFuZCBwYXltZW50IGRldGFpbHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBJbmNvbWUgUmVjb3Jkczo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiBhbGwgcmVudGFsIGluY29tZSByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IFJlY2VpcHRzIGFuZCByZWNvcmRzIG9mIGV4cGVuc2VzIHJlbGF0ZWQgdG8gdGhlIHJlbnRhbCBhY3Rpdml0eS4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCByZXBhaXJzLCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBpbnN1cmFuY2UsIGFuZCBwcm9wZXJ0eSBtYW5hZ2VtZW50IGZlZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIFVzZSBEZXRhaWxzOjwvc3Ryb25nPiBBIGxvZyBvciBjYWxlbmRhciBkb2N1bWVudGluZyB0aGUgc3BlY2lmaWMgZGF5cyB0aGUgcHJvcGVydHkgd2FzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzIGFuZCBub3QgcmVudGVkIG91dC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgVGF4IGFuZCBNb3J0Z2FnZSBJbnRlcmVzdCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgcHJvcGVydHkgdGF4IHN0YXRlbWVudHMgYW5kIG1vcnRnYWdlIGludGVyZXN0IHN0YXRlbWVudHMsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBSZWNvcmRzIG9mIGFueSBwcm9wZXJ0eSBpbXByb3ZlbWVudHMgb3IgZGVwcmVjaWF0aW9uIHNjaGVkdWxlcyBpZiBwcmV2aW91c2x5IGNsYWltZWQgb24geW91ciB0YXggcmV0dXJucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+SXQgaXMgY3J1Y2lhbCB0aGF0IHdlIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgZG9jdW1lbnRzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIG9yIGNvbnRhY3QgdXMgZGlyZWN0bHkgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBjb25jZXJucy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSb3lhbHR5IEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlJveWFsdHkgSW5jb21lXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB5b3UndmUgaW5kaWNhdGVkIHJlY2VpdmluZyBwYXltZW50cyB0aGF0IGNvdWxkIGJlIGNvbnNpZGVyZWQgcm95YWx0eSBpbmNvbWUgdGhpcyBwYXN0IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWxsIEZvcm1zIDEwOTktTUlTQzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgY29waWVzIG9mIGFueSAxMDk5LU1JU0MgZm9ybXMgcmVjZWl2ZWQgZm9yIHJveWFsdHkgcGF5bWVudHMuIEluY2x1ZGUgdGhvc2UgZnJvbSB0cmFkaXRpb25hbCBzb3VyY2VzIGxpa2UgcGF0ZW50cywgY29weXJpZ2h0cywgYW5kIG1pbmVyYWwgcmlnaHRzLCBhcyB3ZWxsIGFzIGFueSBmcm9tIGRpZ2l0YWwgY29udGVudCBwbGF0Zm9ybXMgc3VjaCBhcyBVZGVteSwgWW91VHViZSwgZXRjLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIFN0YXRlbWVudCBvZiBFYXJuaW5nczo8L3N0cm9uZz4gSWYgeW91IHJlY2VpdmUgcm95YWx0eSBpbmNvbWUgZnJvbSBzb3VyY2VzIHRoYXQgZG8gbm90IHByb3ZpZGUgYSAxMDk5LU1JU0MsIG9yIGluIGFkZGl0aW9uIHRvIHRob3NlIHRoYXQgZG8sIHdlIG5lZWQgYSBkZXRhaWxlZCBzdGF0ZW1lbnQgb3IgbG9nIG9mIHRoZXNlIGVhcm5pbmdzLiBUaGlzIHNob3VsZCBpbmNsdWRlIGRhdGVzLCBhbW91bnRzLCBhbmQgc291cmNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBleHBlbnNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdlbmVyYXRpb24gb2YgdGhpcyByb3lhbHR5IGluY29tZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYXJrZXRpbmcsIHByb2R1Y3Rpb24sIGFuZCBsZWdhbCBleHBlbnNlcy4gUGxlYXNlIHByb3ZpZGUgcmVjZWlwdHMsIGludm9pY2VzLCBvciBhIGRldGFpbGVkIGV4cGVuc2UgbG9nLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRpZ2l0YWwgQ29udGVudCBQbGF0Zm9ybSBSZXBvcnRzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIGFueSB5ZWFyLWVuZCBzdW1tYXJ5IHJlcG9ydHMgb3IgaW5jb21lIHN0YXRlbWVudHMgcHJvdmlkZWQgYnkgZGlnaXRhbCBwbGF0Zm9ybXMgd2hlcmUgeW91ciBjb250ZW50IGlzIGhvc3RlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgV2l0aGhvbGRpbmcgTm90aWNlczo8L3N0cm9uZz4gSWYgdGF4IHdhcyB3aXRoaGVsZCBmcm9tIGFueSBvZiB5b3VyIHJveWFsdHkgcGF5bWVudHMsIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3Igbm90aWNlcyBpbmRpY2F0aW5nIHRoZSBhbW91bnQgd2l0aGhlbGQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZG9jdW1lbnRzIGFuZCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gd2lsbCBoZWxwIHVzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHByZXBhcmF0aW9uIGlzIGJvdGggYWNjdXJhdGUgYW5kIG1heGltaXplZCBmb3IgeW91ciBiZW5lZml0LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgaXRlbXMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIb3RlbCBNb3RlbCBCZWQgQnJlYWtmYXN0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiSG90ZWwgTW90ZWwgQmVkIEJyZWFrZmFzdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBhY2N1cmF0ZWx5IGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBvd25pbmcgcmVudGFsIHByb3BlcnRpZXMgdGhhdCBvcGVyYXRlIGFzIGEgSG90ZWwsIE1vdGVsLCBCZWQgYW5kIEJyZWFrZmFzdCwgb3Igb2ZmZXIgc2hvcnQtdGVybSBhY2NvbW1vZGF0aW9ucyBzaW1pbGFyIHRvIEFpcmJuYi4gVG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHNlcnZpY2UgYW5kIGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXRhaWxzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHByb3BlcnR5IHlvdSByZW50IG91dCBvbiBhIHNob3J0LXRlcm0gYmFzaXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIFJlY29yZHM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgYWxsIGluY29tZSByZWNlaXZlZCBmcm9tIHRoZXNlIHByb3BlcnRpZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcmVudGFsIGluY29tZSwgY2xlYW5pbmcgZmVlcywgYW5kIGFueSBvdGhlciBjaGFyZ2VzIHRvIHJlbnRlcnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBDb21wcmVoZW5zaXZlIGxpc3Qgb2YgYWxsIGV4cGVuc2VzIHJlbGF0ZWQgdG8gZWFjaCByZW50YWwgYWN0aXZpdHkuIFRoaXMgaW5jbHVkZXMgbW9ydGdhZ2UgaW50ZXJlc3QsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIHJlcGFpcnMgYW5kIG1haW50ZW5hbmNlLCB1dGlsaXRpZXMsIG1hbmFnZW1lbnQgZmVlcywgYW5kIGFkdmVydGlzaW5nIGNvc3RzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk9jY3VwYW5jeSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTnVtYmVyIG9mIGRheXMgZWFjaCBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBkdXJpbmcgdGhlIHllYXIsIGFzIHdlbGwgYXMgdGhlIG51bWJlciBvZiBkYXlzIGl0IHdhcyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3NlcywgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5MZWdhbCBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBDb3BpZXMgb2YgYW55IGxvY2FsIGxpY2Vuc2VzLCBwZXJtaXRzLCBvciByZWdpc3RyYXRpb25zIHJlcXVpcmVkIGZvciBvcGVyYXRpbmcgdGhlc2UgcmVudGFsIHByb3BlcnRpZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgbGlzdCBpcyBub3QgZXhoYXVzdGl2ZSwgYW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGJlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGFuZCByZXBseSB0byB0aGlzIGVtYWlsIG9yIHVwbG9hZCB0aGVtIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBZb3VyIHByb21wdCBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBlc3NlbnRpYWwgZm9yIHRoZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciBjaG9vc2luZyBvdXIgc2VydmljZXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgUmVjb3ZlcnlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIFJlY292ZXJ5XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHJlY2VpdmluZyBwYXltZW50cyBvciByZWZ1bmRzIGNvbnNpZGVyZWQgYSAnVGF4YWJsZSBSZWNvdmVyeScgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jb3Jwb3JhdGUgdGhpcyBpbnRvIHlvdXIgdGF4IGZpbGluZ3MsIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMuIENvdWxkIHlvdSBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbjxvbD5cbiAgPGxpPjxiPkFtb3VudCBvZiBUYXhhYmxlIFJlY292ZXJ5OjwvYj4gVGhlIHRvdGFsIHN1bSBvZiBhbGwgcGF5bWVudHMgb3IgcmVmdW5kcyByZWNlaXZlZCB0aGF0IGFyZSBjbGFzc2lmaWVkIGFzIHRheGFibGUgcmVjb3ZlcnkuPC9saT5cbiAgPGxpPjxiPlNvdXJjZSBEb2N1bWVudGF0aW9uOjwvYj4gUGxlYXNlIHByb3ZpZGUgYW55IG9mZmljaWFsIHN0YXRlbWVudHMgb3IgZG9jdW1lbnRzIGNvbmZpcm1pbmcgdGhlc2UgcGF5bWVudHMgb3IgcmVmdW5kcy4gVGhpcyBjb3VsZCBpbmNsdWRlIGJhbmsgc3RhdGVtZW50cywgcmVmdW5kIG9yIGNvbXBlbnNhdGlvbiBsZXR0ZXJzLCBvciBhbnkgb3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi48L2xpPlxuICA8bGk+PGI+TmF0dXJlIG9mIHRoZSBPcmlnaW5hbCBEZWR1Y3Rpb24gb3IgQ3JlZGl0OjwvYj4gQSBicmllZiBleHBsYW5hdGlvbiBvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBvcmlnaW5hbCBleHBlbnNlIG9yIGludmVzdG1lbnQgdGhhdCBsZWQgdG8gdGhlIHRheGFibGUgcmVjb3ZlcnkuIFRoaXMgaW5jbHVkZXMgdGhlIHRheCB5ZWFyIG9mIHRoZSBkZWR1Y3Rpb24gb3IgY3JlZGl0LjwvbGk+XG4gIDxsaT48Yj5EYXRlIFJlY2VpdmVkOjwvYj4gVGhlIHNwZWNpZmljIGRhdGVzIHdoZW4gdGhlc2UgcGF5bWVudHMgb3IgcmVmdW5kcyB3ZXJlIHJlY2VpdmVkLjwvbGk+XG4gIDxsaT48Yj5BbnkgUmVsYXRlZCBFeHBlbnNlIERvY3VtZW50YXRpb246PC9iPiBJZiB0aGVyZSB3ZXJlIGFueSBleHBlbnNlcyBpbmN1cnJlZCB0byByZWNlaXZlIHRoaXMgcmVjb3ZlcnkgKHN1Y2ggYXMgbGVnYWwgZmVlcyksIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIGRvY3VtZW50YXRpb24uPC9saT5cbjwvb2w+XG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciB1cyB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBjb21wbGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuIElmIHlvdSBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0YXhhYmxlIHJlY292ZXJpZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzZXBhcmF0ZSBpbnN0YW5jZS48L3A+XG48cD5QbGVhc2UgbGV0IHVzIGtub3cgaWYgeW91IG5lZWQgYW55IGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24uIFdlIGFyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgQWxpbW9ueVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgQWxpbW9ueVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYCAgICA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBwcmVsaW1pbmFyeSBpbmZvcm1hdGlvbiBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFdlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBhbGltb255IHBheW1lbnRzIGluIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jbHVkZSB0aGlzIGluIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscyBhbmQgZG9jdW1lbnRzIGJhc2VkIG9uIHRoZSBkYXRlIG9mIHlvdXIgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC48L3A+XG4gICAgPHA+QWxpbW9ueSBwYXltZW50cyBhcmUgY29uc2lkZXJlZCB0YXhhYmxlIGluY29tZSBmb3IgdGhlIHJlY2VpdmVyIGRlcGVuZGluZyBvbiB0aGUgZGF0ZSBvZiB0aGUgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC4gRGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudHMgZXhlY3V0ZWQgYWZ0ZXIgRGVjZW1iZXIgMzEsIDIwMTgsIGRvIG5vdCBjb3VudCBhbGltb255IHBheW1lbnRzIGFzIHRheGFibGUgaW5jb21lLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgdG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcGF5bWVudHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiB5b3VyIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQ6PC9zdHJvbmc+IFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhbGltb255IHBheW1lbnRzIHlvdSByZWNlaXZlZCBhcmUgdGF4YWJsZS4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudCBvZiBhbGltb255IHJlY2VpdmVkIHRoaXMgdGF4IHllYXI6PC9zdHJvbmc+IFRvdGFsIGFubnVhbCBhbW91bnQgcmVjZWl2ZWQgaW4gYWxpbW9ueSBwYXltZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgYWxpbW9ueSBwYXltZW50czo8L3N0cm9uZz4gQmFuayBzdGF0ZW1lbnRzLCB0cmFuc2ZlciByZWNlaXB0cywgb3IgYW55IGxlZ2FsIGRvY3VtZW50cyBzaG93aW5nIHRoZSBhbW91bnQgb2YgYWxpbW9ueSByZWNlaXZlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QYXllcuKAmXMgaW5mb3JtYXRpb246PC9zdHJvbmc+IEZ1bGwgbmFtZSBhbmQgU29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKSBvZiB0aGUgcGVyc29uIGZyb20gd2hvbSB5b3UgaGF2ZSByZWNlaXZlZCB0aGUgYWxpbW9ueSBwYXltZW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGlzIGNydWNpYWwgZm9yIHRoZSB0aW1lbHkgYW5kIGFjY3VyYXRlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGxldCB1cyBrbm93IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiR292ZXJubWVudCBCZW5lZml0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkdvdmVybm1lbnQgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVwb3J0ZWQgcmVjZWl2aW5nIGdvdmVybm1lbnQgYmVuZWZpdHMgdGhhdCBtYXkgYmUgdGF4YWJsZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGZpbGluZywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+PHN0cm9uZz5Gb3JtIDEwOTktRzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIEZvcm0gMTA5OS1HIGZvciBlYWNoIGluc3RhbmNlIG9mIGdvdmVybm1lbnQgYmVuZWZpdHMgcmVjZWl2ZWQuIFRoaXMgZm9ybSBpcyB0eXBpY2FsbHkgaXNzdWVkIGZvciB1bmVtcGxveW1lbnQgY29tcGVuc2F0aW9uLCBzdGF0ZSBvciBsb2NhbCBpbmNvbWUgdGF4IHJlZnVuZHMsIGNyZWRpdHMgb3Igb2Zmc2V0cywgYW5kIG90aGVyIGdvdmVybm1lbnQgcGF5bWVudHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIGxpc3Qgb2YgYmVuZWZpdHMgcmVjZWl2ZWQ6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBnb3Zlcm5tZW50IGJlbmVmaXRzIG5vdCByZXBvcnRlZCBvbiBGb3JtIDEwOTktRyAoc3VjaCBhcyBjZXJ0YWluIHdlbGZhcmUgYmVuZWZpdHMpLCBwbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGxpc3QgaW5jbHVkaW5nIHRoZSB0eXBlIG9mIGJlbmVmaXQsIGFtb3VudCByZWNlaXZlZCwgYW5kIHRoZSBhZ2VuY3kgdGhhdCBwcm92aWRlZCB0aGUgYmVuZWZpdC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+U29jaWFsIFNlY3VyaXR5IEJlbmVmaXRzOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZWQgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzLCBpbmNsdWRlIHlvdXIgU1NBLTEwOTkgb3IgUlJCLTEwOTkgZm9ybSB3aGljaCByZXBvcnRzIHRoZXNlIGVhcm5pbmdzLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGZvciBhbnkgd2l0aGhlbGQgdGF4ZXM6PC9zdHJvbmc+IElmIHRheGVzIHdlcmUgd2l0aGhlbGQgZnJvbSBhbnkgYmVuZWZpdHMgcmVjZWl2ZWQsIGluY2x1ZGUgdGhlIGFwcGxpY2FibGUgZG9jdW1lbnRhdGlvbiBzaG93aW5nIHRoZSBhbW91bnQgd2l0aGhlbGQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBzZW5kIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHlvdXIgdGF4IGZpbGluZ3MgYXJlIHByb2Nlc3NlZCB0aW1lbHkgYW5kIGNvcnJlY3RseS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU29jaWFsIFNlY3VyaXR5IEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNvY2lhbCBTZWN1cml0eSBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4uIEFzIHlvdSd2ZSBpbmRpY2F0ZWQgcmVjZWlwdCBvZiBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMgdGhpcyB0YXggeWVhciwgd2UgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cy9pbmZvcm1hdGlvbiB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHRheCBmaWxpbmc6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgQmVuZWZpdCBTdGF0ZW1lbnQgKEZvcm0gU1NBLTEwOTkpPC9zdHJvbmc+IC0gVGhpcyBmb3JtIGRldGFpbHMgdGhlIHRvdGFsIGFtb3VudCBvZiBzb2NpYWwgc2VjdXJpdHkgYmVuZWZpdHMgcmVjZWl2ZWQuIElmIHlvdSBoYXZlIG1pc3BsYWNlZCB0aGlzIGZvcm0sIGl0IGNhbiBiZSBvYnRhaW5lZCBvbmxpbmUgdGhyb3VnaCB5b3VyIFNvY2lhbCBTZWN1cml0eSBhY2NvdW50LjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+Tm90aWNlIG9mIEFkanVzdGVkIEFtb3VudDwvc3Ryb25nPiAoaWYgYXBwbGljYWJsZSkgLSBJZiB0aGVyZSBoYXZlIGJlZW4gYW55IGFkanVzdG1lbnRzIG9yIGNvcnJlY3Rpb25zIHRvIHlvdXIgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzIGR1cmluZyB0aGUgeWVhciwgcGxlYXNlIHByb3ZpZGUgYW55IG5vdGljZXMgb3IgZG9jdW1lbnRhdGlvbiByZWZsZWN0aW5nIHRoZXNlIGNoYW5nZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5TdXBwbGVtZW50YWwgU2VjdXJpdHkgSW5jb21lIChTU0kpPC9zdHJvbmc+IChpZiBhcHBsaWNhYmxlKSAtIEFsdGhvdWdoIFNTSSBpcyB0eXBpY2FsbHkgbm90IHRheGFibGUsIGRvY3VtZW50YXRpb24gb2YgdGhlc2UgcGF5bWVudHMgaXMgc3RpbGwgcmVxdWlyZWQgZm9yIGNvbXByZWhlbnNpdmUgZmluYW5jaWFsIGFzc2Vzc21lbnQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyB0aGUgdGF4YWJsZSBwb3J0aW9uIG9mIHlvdXIgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzLCBpZiBhbnksIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLiBGYWlsdXJlIHRvIHByb3ZpZGUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGluZm9ybWF0aW9uIG1heSByZXN1bHQgaW4gZGVsYXlzIG9yIGluYWNjdXJhY2llcyBpbiB5b3VyIHRheCBmaWxpbmcuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoZXNlIG1hdHRlcnMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBvYnRhaW5pbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkdhbWJsaW5nIFdpbm5pbmdzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiR2FtYmxpbmcgV2lubmluZ3NcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5XZSB1bmRlcnN0YW5kIGZyb20geW91ciBwcmV2aW91cyBhbnN3ZXJzIHRoYXQgeW91IGhhdmUgZXhwZXJpZW5jZWQgZ2FtYmxpbmcgd2lubmluZ3MgdGhpcyB0YXggeWVhciBmcm9tIGxvdHRlcmllcywgY2FzaW5vcywgYmV0dGluZywgb3Igb3RoZXIgZm9ybXMgb2YgZ2FtYmxpbmcuIFRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCBmaWxpbmdzLCBpdCdzIGVzc2VudGlhbCB0aGF0IHdlIGNvbGxlY3Qgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIHdpbm5pbmdzLjwvcD5cbjxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XG48b2w+XG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gZm9yIEVhY2ggV2lubmluZzo8L3N0cm9uZz4gVGhpcyBjYW4gaW5jbHVkZSBXLTJHIGZvcm1zLCBzdGF0ZW1lbnRzIGZyb20gY2FzaW5vcywgcmFjZXRyYWNrcywgb3Igb3RoZXIgZ2FtYmxpbmcgZXN0YWJsaXNobWVudHMsIGFuZCBhbnkgb3RoZXIgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB0aGF0IHJlcG9ydHMgeW91ciB3aW5uaW5ncy48L2xpPlxuICA8bGk+PHN0cm9uZz5EYXRlcyBvZiBXaW5uaW5nczo8L3N0cm9uZz4gVGhlIHNwZWNpZmljIGRhdGVzIG9uIHdoaWNoIHlvdSBoYWQgZ2FtYmxpbmcgd2lubmluZ3MuPC9saT5cbiAgPGxpPjxzdHJvbmc+VHlwZXMgb2YgR2FtYmxpbmcgQWN0aXZpdGllczo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgd2hldGhlciB5b3VyIHdpbm5pbmdzIHdlcmUgZnJvbSBsb3R0ZXJpZXMsIGNhc2lub3MsIGJldHRpbmcsIHNwb3J0cyBiZXR0aW5nLCBnYW1lcyBvZiBjaGFuY2UsIG9yIGFueSBvdGhlciBmb3JtcyBvZiBnYW1ibGluZy48L2xpPlxuICA8bGk+PHN0cm9uZz5BbW91bnQgb2YgV2lubmluZ3M6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgd29uIGZyb20gZWFjaCBnYW1ibGluZyBhY3Rpdml0eS4gUGxlYXNlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBjYXNoIHdpbm5pbmdzIGFuZCB0aGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgYW55IG5vbi1jYXNoIHByaXplcy48L2xpPlxuICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBSZWxhdGVkIHRvIEdhbWJsaW5nIEFjdGl2aXRpZXM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIGxpc3QgYW55IGV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciBnYW1ibGluZyBhY3Rpdml0aWVzLCBzdWNoIGFzIGJ1eS1pbnMgb3IgdHJhdmVsIGV4cGVuc2VzLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZXNlIGV4cGVuc2VzIG1heSB2YXJ5LjwvbGk+XG4gIDxsaT48c3Ryb25nPkxvc3Nlczo8L3N0cm9uZz4gSWYgeW91IGhhdmUgcmVjb3JkcyBvZiB5b3VyIGxvc3NlcywgcGxlYXNlIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBvZiB0aGVzZSBsb3NzZXMgYXMgdGhleSBjYW4gcG90ZW50aWFsbHkgb2Zmc2V0IHlvdXIgd2lubmluZ3MgZm9yIHRheCBwdXJwb3Nlcy4gTm90ZSwgbG9zc2VzIGNhbiBvbmx5IGJlIGNsYWltZWQgdXAgdG8gdGhlIGFtb3VudCBvZiB0b3RhbCB3aW5uaW5ncy48L2xpPlxuPC9vbD5cbjxwPkl0J3MgaW1wb3J0YW50IHRvIGdhdGhlciB0aGlzIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZ2FtYmxpbmcgd2lubmluZ3MgYW5kIGFueSByZWxhdGVkIGRlZHVjdGlvbnMgb3IgbG9zc2VzIG9uIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBkZXRhaWxlZCBhbmQgYWNjdXJhdGUgYXMgcG9zc2libGUgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB5b3VyIHRheCBmaWxpbmcuPC9wPlxuPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIGlmIHlvdSBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDYW5jZWxsYXRpb24gb2YgRGVidCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDYW5jZWxsYXRpb24gb2YgRGVidCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5PdXIgcmVjb3JkcyBpbmRpY2F0ZSB5b3UndmUgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gaGF2aW5nIGRlYnRzIGZvcmdpdmVuLCBjYW5jZWxlZCwgb3IgZGlzY2hhcmdlZCBmb3IgbGVzcyB0aGFuIHRoZSBhbW91bnQgeW91IG93ZWQgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgaW5mb3JtYXRpb24gb24geW91ciB0YXggcmV0dXJuIGFuZCBleHBsb3JlIGFueSBhcHBsaWNhYmxlIHRheCByZWxpZWYgb3IgZXhjbHVzaW9ucywgd2UgbmVlZCBhZGRpdGlvbmFsIGRldGFpbHMgZnJvbSB5b3UuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG48b2w+XG48bGk+PHN0cm9uZz5Gb3JtIDEwOTktQzwvc3Ryb25nPjogQ29waWVzIG9mIGFueSBGb3JtIDEwOTktQyB5b3UgcmVjZWl2ZWQgcmVsYXRlZCB0byB0aGUgY2FuY2VsbGF0aW9uIG9mIGRlYnQuPC9saT5cbjxsaT48c3Ryb25nPkRldGFpbGVkIExpc3Qgb2YgRGVidHM8L3N0cm9uZz46IElmIHlvdSBkaWRuJ3QgcmVjZWl2ZSBhIEZvcm0gMTA5OS1DLCBwbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGxpc3Qgb2YgYW55IGRlYnRzIHRoYXQgd2VyZSBjYW5jZWxlZCwgaW5jbHVkaW5nOlxuICAgIDx1bD5cbiAgICA8bGk+VGhlIG5hbWUgb2YgdGhlIGNyZWRpdG9yPC9saT5cbiAgICA8bGk+VGhlIG9yaWdpbmFsIGFtb3VudCBvZiB0aGUgZGVidDwvbGk+XG4gICAgPGxpPlRoZSBhbW91bnQgY2FuY2VsZWQ8L2xpPlxuICAgIDxsaT5UaGUgZGF0ZSBvZiBjYW5jZWxsYXRpb248L2xpPlxuICAgIDwvdWw+XG48L2xpPlxuPGxpPjxzdHJvbmc+RXhwbGFuYXRpb24gb2YgQ2lyY3Vtc3RhbmNlczwvc3Ryb25nPjogQSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBkZWJ0IGNhbmNlbGxhdGlvbiAoZS5nLiwgZmluYW5jaWFsIGhhcmRzaGlwLCByZXR1cm4gb2YgcHVyY2hhc2VkIGdvb2RzLCBldGMuKS48L2xpPlxuPGxpPjxzdHJvbmc+SW5zb2x2ZW5jeSBEb2N1bWVudGF0aW9uPC9zdHJvbmc+OiBJZiB5b3Ugd2VyZSBpbnNvbHZlbnQgKHdoZXJlIHlvdXIgdG90YWwgZGVidHMgZXhjZWVkZWQgeW91ciB0b3RhbCBhc3NldHMpIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY2FuY2VsbGF0aW9uLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIHN1cHBvcnRpbmcgeW91ciBmaW5hbmNpYWwgc3RhdHVzIGF0IHRoYXQgdGltZS48L2xpPlxuPC9vbD5cbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZmluYW5jaWFsIGluZm9ybWF0aW9uIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG90ZW50aWFsIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gb2YgZGVidC4gUGxlYXNlIHVwbG9hZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XG48cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpbWFyeSBSZXNpZGVuY2UgRGVidCBDYW5jZWxsYXRpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJQcmltYXJ5IFJlc2lkZW5jZSBEZWJ0IENhbmNlbGxhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgYSBwb3J0aW9uIG9mIHlvdXIgbW9ydGdhZ2UgZm9yIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugd2FzIGZvcmdpdmVuLCBjYW5jZWxlZCwgb3IgZGlzY2hhcmdlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhpcyBpbiB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PGI+Rm9ybSAxMDk5LUMsIENhbmNlbGxhdGlvbiBvZiBEZWJ0OjwvYj4gVGhpcyBpcyBhIGNydWNpYWwgZG9jdW1lbnQgdGhhdCBsZW5kZXJzIG11c3Qgc2VuZCB5b3UgaWYgdGhleSBjYW5jZWxlZCBvciBmb3JnYXZlIGEgZGVidCBleGNlZWRpbmcgJDYwMC48L2xpPlxuICAgICAgICA8bGk+PGI+V3JpdHRlbiBjb21tdW5pY2F0aW9uIGZyb20geW91ciBsZW5kZXI6PC9iPiBBbnkgbGV0dGVycyBvciBvZmZpY2lhbCBkb2N1bWVudHMgZnJvbSB5b3VyIGxlbmRlciByZWdhcmRpbmcgdGhlIGNhbmNlbGxhdGlvbiwgZm9yZ2l2ZW5lc3MsIG9yIGRpc2NoYXJnZSBvZiB5b3VyIG1vcnRnYWdlIGRlYnQuPC9saT5cbiAgICAgICAgPGxpPjxiPk1vcnRnYWdlIHN0YXRlbWVudHM6PC9iPiBQbGVhc2UgcHJvdmlkZSBtb3J0Z2FnZSBzdGF0ZW1lbnRzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlYnQgY2FuY2VsbGF0aW9uIHRvIHNob3cgdGhlIGNoYW5nZSBpbiB5b3VyIG1vcnRnYWdlIGJhbGFuY2UuPC9saT5cbiAgICAgICAgPGxpPjxiPkRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgcHJvcGVydHk6PC9iPiBUaGlzIGluY2x1ZGVzOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Zb3VyIG1vcnRnYWdlIGNvbnRyYWN0LjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFueSBkb2N1bWVudHMgcmVsYXRlZCB0byBmb3JlY2xvc3VyZSwgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9mIGEgc2hvcnQgc2FsZSwgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxiPlJlY29yZCBvZiBwYXltZW50cyBtYWRlOjwvYj4gSWYgeW91IG1hZGUgYW55IHBheW1lbnRzIHRvd2FyZHMgdGhlIG1vcnRnYWdlIGR1cmluZyB0aGUgdGF4IHllYXIsIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGVzZSBwYXltZW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgcHJvdmlkZSB0aGVtIHRvIHVzLiBJZiB5b3UgaGF2ZSBhbnkgZGlmZmljdWx0eSBvYnRhaW5pbmcgYW55IG9mIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQgb3IgaGF2ZSBhbnkgcXVlc3Rpb25zLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gUHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24gaW4gYSB0aW1lbHkgbWFubmVyIGlzIGNydWNpYWwgZm9yIHRoZSBhY2N1cmF0ZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHVkZW50IExvYW4gRGVidCBDYW5jZWxsYXRpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJTdHVkZW50IExvYW4gRGVidCBDYW5jZWxsYXRpb25cIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5JbiByZXNwb25zZSB0byB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2Ygc3R1ZGVudCBsb2FuIGRlYnQgZHVyaW5nIHRoaXMgdGF4IHllYXIsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IHByb2Nlc3MgeW91ciB0YXggcmV0dXJuLiBUaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIHBvdGVudGlhbGx5IG1heGltaXppbmcgeW91ciBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuPG9sPlxuICA8bGk+PHN0cm9uZz5PZmZpY2lhbCBDYW5jZWxsYXRpb24gb3IgRm9yZ2l2ZW5lc3MgTm90aWNlOjwvc3Ryb25nPiBBIGNvcHkgb2YgdGhlIG9mZmljaWFsIGxldHRlciBvciBub3RpY2UgZnJvbSB0aGUgbGVuZGVyIG9yIHByb2dyYW0gYWRtaW5pc3RyYXRvciBjb25maXJtaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2YgeW91ciBzdHVkZW50IGxvYW4gZGVidC48L2xpPlxuICA8bGk+PHN0cm9uZz5TdHVkZW50IExvYW4gQWNjb3VudCBTdGF0ZW1lbnQ6PC9zdHJvbmc+IEEgc3RhdGVtZW50IGZyb20gYmVmb3JlIGFuZCBhZnRlciB0aGUgbG9hbiBmb3JnaXZlbmVzcywgY2FuY2VsbGF0aW9uLCBvciBkaXNjaGFyZ2Ugb2NjdXJyZWQsIHNob3dpbmcgdGhlIG91dHN0YW5kaW5nIGJhbGFuY2UgYW5kIHRoZSBiYWxhbmNlIGFmdGVyIHRoZSBhY3Rpb24gd2FzIHRha2VuLjwvbGk+XG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgUXVhbGlmeWluZyBQcm9ncmFtIFBhcnRpY2lwYXRpb246PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBvciBjZXJ0aWZpY2F0ZXMgb2YgeW91ciBwYXJ0aWNpcGF0aW9uIGluIHF1YWxpZnlpbmcgcHJvZ3JhbXMgc3VjaCBhcyBQdWJsaWMgU2VydmljZSBMb2FuIEZvcmdpdmVuZXNzIChQU0xGKSBvciBUZWFjaGVyIExvYW4gRm9yZ2l2ZW5lc3MsIGFtb25nIG90aGVycy48L2xpPlxuICA8bGk+PHN0cm9uZz5JUlMgRm9ybSAxMDk5LUMgKGlmIHJlY2VpdmVkKTo8L3N0cm9uZz4gVGhpcyBmb3JtIGlzIGlzc3VlZCBieSBzb21lIGxlbmRlcnMgd2hlbiBhIGRlYnQgaXMgZm9yZ2l2ZW4gb3IgY2FuY2VsZWQgYW5kIGlzIGNydWNpYWwgZm9yIHRheCByZXBvcnRpbmcgcHVycG9zZXMuIEl0IGluY2x1ZGVzIHRoZSBhbW91bnQgb2YgZm9yZ2l2ZW4gZGVidCB0aGF0IG1heSBiZSBjb25zaWRlcmVkIHRheGFibGUgaW5jb21lLjwvbGk+XG4gIDxsaT48c3Ryb25nPkRldGFpbGVkIERlc2NyaXB0aW9uIG9mIENpcmN1bXN0YW5jZXM6PC9zdHJvbmc+IEEgd3JpdHRlbiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBsb2FuJ3MgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlLCBpbmNsdWRpbmcgYW55IGRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB5b3VyIGVsaWdpYmlsaXR5IHVuZGVyIHRoZSBzcGVjaWZpYyBwcm9ncmFtIG9yIGNvbmRpdGlvbi48L2xpPlxuPC9vbD5cbjxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIHByb3ZpZGVkIGFyZSBjb21wbGV0ZSBhbmQgbGVnaWJsZS4gWW91IGNhbiB1cGxvYWQgdGhlIGRvY3VtZW50cyBzZWN1cmVseSB0aHJvdWdoIG91ciBjbGllbnQgcG9ydGFsLjwvcD5cbjxwPllvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBlbmFibGUgdXMgdG8gYWNjdXJhdGVseSBhbmQgZWZmaWNpZW50bHkgY29tcGxldGUgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbjxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIb2JieSBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJIb2JieSBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBpbmNvbWUgc291cmNlcyBmb3IgdGhpcyB0YXggeWVhci4gQXMgcGFydCBvZiBvdXIgcHJlcGFyYXRpb24gZm9yIHlvdXIgdGF4IHJldHVybiwgd2UndmUgbm90ZWQgdGhhdCB5b3UndmUgZWFybmVkIG1vbmV5IGZyb20gaG9iYmllcy4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyB0byB0aGUgSVJTIGFuZCBlbnN1cmUgeW91IGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+U3VtbWFyeSBvZiBIb2JieSBJbmNvbWU6PC9zdHJvbmc+IEEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgaW5jb21lIHJlY2VpdmVkIGZyb20geW91ciBob2JieSBhY3Rpdml0aWVzLiBQbGVhc2UgaW5jbHVkZSBkYXRlcywgYW1vdW50cywgYW5kIHNvdXJjZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIG9mIGFueSBleHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgaG9iYnkgYWN0aXZpdGllcy4gVGhpcyBjYW4gaW5jbHVkZSBtYXRlcmlhbHMsIGVxdWlwbWVudCwgYW5kIGFueSBvdGhlciBjb3N0cyBpbmN1cnJlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5CYW5rIFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBiYW5rIHN0YXRlbWVudHMgdGhhdCBzaG93IHRoZSB0cmFuc2FjdGlvbnMgcmVsYXRlZCB0byB5b3VyIGhvYmJ5IGluY29tZSBhbmQgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUHJpemVzOjwvc3Ryb25nPiBJZiB5b3VyIGhvYmJ5IGluY29tZSBpbmNsdWRlcyBwcml6ZXMsIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3IgcmVjZWlwdHMgdGhhdCBkZXRhaWwgdGhlc2UgYXdhcmRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk90aGVyIFJlbGV2YW50IERvY3VtZW50czo8L3N0cm9uZz4gQW55IG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB0aGUgaW5jb21lIGFuZCBleHBlbnNlcyByZXBvcnRlZCBmb3IgeW91ciBob2JieSBhY3Rpdml0aWVzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGF2b2lkIGRlbGF5cyBpbiB0aGUgdGF4IHJldHVybiBwcm9jZXNzLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2VydGFpbiBDb3VydCBBd2FyZHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDZXJ0YWluIENvdXJ0IEF3YXJkc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5kaWNhdGluZyB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIGNvdXJ0IGF3YXJkcyBvciBzZXR0bGVtZW50cyBpbiB0aGUgcGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGFtb3VudHMgYW5kIGNvbXBseSB3aXRoIHRheCBvYmxpZ2F0aW9ucywgd2UgbmVlZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIGF3YXJkcyBvciBzZXR0bGVtZW50cy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlR5cGUgb2YgQXdhcmQgb3IgU2V0dGxlbWVudDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgbmF0dXJlIChlLmcuLCBsb3N0IHdhZ2VzLCBwdW5pdGl2ZSBkYW1hZ2VzLCBldGMuKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQgUmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgYXdhcmRlZCBvciBzZXR0bGVkLCBiZWZvcmUgYW55IGRlZHVjdGlvbnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBSZWNlaXZlZDo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgd2hlbiB5b3UgcmVjZWl2ZWQgdGhlIGNvbXBlbnNhdGlvbi48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRzIG9yIGp1ZGdtZW50cyBwZXJ0YWluaW5nIHRvIHRoZSBhd2FyZCBvciBzZXR0bGVtZW50LiBUaGlzIGluY2x1ZGVzIGNvdXJ0IG9yZGVycywgYWdyZWVtZW50IGxldHRlcnMsIGFuZCByZWNlaXB0cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5UYXggV2l0aGhlbGQ6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHRoZSBhbW91bnQgb2YgZmVkZXJhbCBvciBzdGF0ZSB0YXggYWxyZWFkeSB3aXRoaGVsZCBmcm9tIHRoZSBzZXR0bGVtZW50LjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5JdCdzIGltcGVyYXRpdmUgd2UgcmVjZWl2ZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgY291cnQgYXdhcmQgb3Igc2V0dGxlbWVudC4gRmFpbHVyZSB0byByZXBvcnQgc3VjaCBpbmNvbWUgYWNjdXJhdGVseSBjb3VsZCByZXN1bHQgaW4gcGVuYWx0aWVzIG9yIGF1ZGl0cyBmcm9tIHRoZSBJUlMuPC9wPiBcbiAgICA8cD5QbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHdlIGhhdmUgYW1wbGUgdGltZSBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCBhcmUgaGVyZSB0byBoZWxwIHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpemVzIGFuZCBBd2FyZHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQcml6ZXMgYW5kIEF3YXJkc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxuICAgIDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCB3ZSBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBwcml6ZXMgb3IgYXdhcmRzIGluIHRoZSBmb3JtIG9mIGNhc2gsIGdvb2RzLCBvciBzZXJ2aWNlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSB0byB0aGUgSVJTLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkZXRhaWxzIGZyb20geW91LjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgRWFjaCBQcml6ZSBvciBBd2FyZDo8L3N0cm9uZz4gQnJpZWZseSBkZXNjcmliZSBlYWNoIHByaXplIG9yIGF3YXJkIHJlY2VpdmVkLCBpbmNsdWRpbmcgdGhlIG5hdHVyZSAoY2FzaCwgZ29vZHMsIHNlcnZpY2VzKSBhbmQgY29udGV4dCAoY29udGVzdCwgYWNoaWV2ZW1lbnQgYXdhcmQsIGV0Yy4pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlZhbHVlIG9mIEVhY2ggUHJpemUgb3IgQXdhcmQ6PC9zdHJvbmc+IFByb3ZpZGUgdGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIGVhY2ggcHJpemUgb3IgYXdhcmQgYXQgdGhlIHRpbWUgb2YgcmVjZWlwdC4gSWYgdGhlIHByaXplIHdhcyBpbiBjYXNoLCBzcGVjaWZ5IHRoZSBhbW91bnQuIElmIGluIGdvb2RzIG9yIHNlcnZpY2VzLCBwcm92aWRlIGFuIGVzdGltYXRlZCB2YWx1ZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUgb24gd2hpY2ggZWFjaCBwcml6ZSBvciBhd2FyZCB3YXMgcmVjZWl2ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SXNzdWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIChpZiBhdmFpbGFibGUpIG9mIHRoZSBvcmdhbml6YXRpb24gb3IgZW50aXR5IHRoYXQgYXdhcmRlZCB0aGUgcHJpemUgb3IgcHJvdmlkZWQgdGhlIGF3YXJkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBXaXRoaGVsZCBUYXhlczo8L3N0cm9uZz4gSW5kaWNhdGUgaWYgYW55IHRheGVzIHdlcmUgd2l0aGhlbGQgZnJvbSB0aGUgYXdhcmRlZCBhbW91bnQgYW5kIHByb3ZpZGUgdGhlIHdpdGhob2xkaW5nIGRvY3VtZW50KHMpLCBpZiBhdmFpbGFibGUuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkl0J3MgY3J1Y2lhbCBmb3IgdGF4IHB1cnBvc2VzIHRoYXQgd2UgcmVwb3J0IHRoZXNlIGFjY3VyYXRlbHkgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgSVJTLjwvcD5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgYXJlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBDb3ZlcmRlbGwgRGlzdHJpYnV0aW9uc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgQ292ZXJkZWxsIERpc3RyaWJ1dGlvbnNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCBhIHdpdGhkcmF3YWwgZnJvbSBhIENvdmVyZGVsbCBFZHVjYXRpb24gU2F2aW5ncyBBY2NvdW50IChFU0EpIG9yIGFuIEVkdWNhdGlvbiBJUkEgZm9yIGVkdWNhdGlvbmFsIGV4cGVuc2VzIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSBkaXN0cmlidXRpb25zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHdpdGhkcmF3biBmcm9tIHRoZSBDb3ZlcmRlbGwgRVNBIG9yIEVkdWNhdGlvbiBJUkEuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbGVkIGJyZWFrZG93biBvZiBob3cgdGhlc2UgZnVuZHMgd2VyZSB1dGlsaXplZCwgc3BlY2lmaWNhbGx5OlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgdXNlZCBmb3IgdHVpdGlvbiBhbmQgZmVlcy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgc3BlbnQgb24gYm9va3MsIHN1cHBsaWVzLCBhbmQgZXF1aXBtZW50IHJlcXVpcmVkIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGFtb3VudHMgc3BlbnQgb24gcm9vbSBhbmQgYm9hcmQsIHNwZWNpZnlpbmcgaWYgdGhlIGJlbmVmaWNpYXJ5IHdhcyBlbnJvbGxlZCBhdCBsZWFzdCBoYWxmLXRpbWUuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGFkZGl0aW9uYWwgcXVhbGlmaWVkIGVkdWNhdGlvbiBleHBlbnNlcyBwYWlkIHVzaW5nIHRoZXNlIGZ1bmRzLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgdGhlIGJlbmVmaWNpYXJ5J3MgZW5yb2xsbWVudCBzdGF0dXMgKGUuZy4sIHR1aXRpb24gc3RhdGVtZW50LCBlbnJvbGxtZW50IHZlcmlmaWNhdGlvbikuPC9saT5cbiAgICAgICAgPGxpPlRoZSBuYW1lIGFuZCBhZGRyZXNzIG9mIHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbihzKSBpbnZvbHZlZC48L2xpPlxuICAgICAgICA8bGk+QW55IEZvcm0gMTA5OS1RIHJlY2VpdmVkIHBlcnRhaW5pbmcgdG8gdGhlc2UgZGlzdHJpYnV0aW9ucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UHJvdmlkaW5nIHRoaXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gd2lsbCBlbnN1cmUgdGhhdCB3ZSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIGVkdWNhdGlvbiBleHBlbnNlcy4gUGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgbGV0IHVzIGtub3cgaWYgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBvciBoYXZlIGFueSBxdWVzdGlvbnMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgUVRQIERpc3RyaWJ1dGlvbnNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIFFUUCBEaXN0cmlidXRpb25zXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXG4gICAgPHA+V2UgaGF2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGRpc3RyaWJ1dGlvbnMgZnJvbSBhIFF1YWxpZmllZCBUdWl0aW9uIFByb2dyYW0gKFFUUCksIGNvbW1vbmx5IGtub3duIGFzIGEgNTI5IHBsYW4sIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcmVsYXRlZCB0byB0aGVzZSBkaXN0cmlidXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbjxvbD5cbiAgICA8bGk+PHN0cm9uZz5BY2NvdW50IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgbmFtZSBvZiB0aGUgYWNjb3VudCBob2xkZXIgYW5kIHRoZSBiZW5lZmljaWFyeSBmb3IgZWFjaCA1MjkgcGxhbiBkaXN0cmlidXRpb24uPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EaXN0cmlidXRpb24gU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCAxMDk5LVEgZm9ybXMgcmVjZWl2ZWQgZm9yIGVhY2ggZGlzdHJpYnV0aW9uIHRoaXMgdGF4IHllYXIuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Ub3RhbCBBbW91bnQgb2YgRGlzdHJpYnV0aW9uczo8L3N0cm9uZz4gVGhlIHRvdGFsIGFtb3VudCBvZiBtb25leSBkaXN0cmlidXRlZCBmcm9tIHRoZSBRVFAgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgIDxsaT48c3Ryb25nPkVkdWNhdGlvbmFsIEV4cGVuc2VzIERvY3VtZW50YXRpb246PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgdGhlIGVkdWNhdGlvbmFsIGV4cGVuc2VzIGZvciB3aGljaCB0aGUgUVRQIGRpc3RyaWJ1dGlvbnMgd2VyZSB1c2VkLiBUaGlzIGluY2x1ZGVzIHR1aXRpb24sIGJvb2tzLCBzdXBwbGllcywgYW5kIGFueSBlcXVpcG1lbnQgcmVxdWlyZWQgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZSBhdCBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbi48L2xpPlxuICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgUmVjZWlwdHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIHN0YXRlbWVudHMgdGhhdCBwcm92aWRlIHByb29mIG9mIHRoZSBlZHVjYXRpb25hbCBleHBlbnNlcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPkluc3RpdHV0aW9uIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBOYW1lIGFuZCBhZGRyZXNzIG9mIHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbihzKSB3aGVyZSB0aGUgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZC48L2xpPlxuICAgIDxsaT48c3Ryb25nPlJlY2lwaWVudCdzIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBGb3Igd2hvbSB0aGUgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZCAodGhlIGJlbmVmaWNpYXJ5IG9mIHRoZSA1MjkgcGxhbikgYW5kIHRoZWlyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIuPC9saT5cbjwvb2w+XG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheGFiaWxpdHkgb2YgdGhlIGRpc3RyaWJ1dGlvbnMgYW5kIGZvciBvcHRpbWl6aW5nIHlvdXIgdGF4IGJlbmVmaXRzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuPC9wPlxuPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHJpa2UgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJTdHJpa2UgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYXMgd2Ugd29yayB0b2dldGhlciB0byBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggcmV0dXJuLiBJdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgeW91IHJlY2VpdmVkIHN0cmlrZSBiZW5lZml0cyBkdXJpbmcgdGhlIHRheCB5ZWFyIGR1ZSB0byBwYXJ0aWNpcGF0aW9uIGluIGEgbGFib3Igc3RyaWtlLiBUbyBlbnN1cmUgY29tcGxpYW5jZSBhbmQgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgQW1vdW50IG9mIFN0cmlrZSBCZW5lZml0cyBSZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlIHRvdGFsIHN1bSBvZiBzdHJpa2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Tb3VyY2Ugb2YgU3RyaWtlIEJlbmVmaXRzOjwvc3Ryb25nPiBJbmRpY2F0ZSB3aGV0aGVyIHRoZXNlIGJlbmVmaXRzIHdlcmUgcGFpZCBieSB5b3VyIHVuaW9uLCBhbiBpbnN1cmFuY2UgcG9saWN5LCBvciBhbm90aGVyIHNvdXJjZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIFN0cmlrZSBCZW5lZml0czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZm9ybXMsIHN0YXRlbWVudHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBzaG93IHRoZSByZWNlaXB0IG9mIHRoZXNlIGJlbmVmaXRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIFN0cmlrZSBQYXJ0aWNpcGF0aW9uOjwvc3Ryb25nPiBMaXN0IHRoZSBkYXRlcyBvciBkdXJhdGlvbiBvZiB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIGxhYm9yIHN0cmlrZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BZGRpdGlvbmFsIENvc3RzIG9yIEV4cGVuc2VzOjwvc3Ryb25nPiBJZiB5b3UgaW5jdXJyZWQgYW55IGNvc3RzIG9yIGV4cGVuc2VzIHJlbGF0ZWQgdG8gcGFydGljaXBhdGluZyBpbiB0aGUgc3RyaWtlIChlLmcuLCB0cmF2ZWwgdG8gcGlja2V0IGxpbmVzLCBzaWduYWdlIG1hdGVyaWFscyksIHBsZWFzZSBkZXRhaWwgdGhlc2UuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgbWF5IGltcGFjdCB5b3VyIHRheGFibGUgaW5jb21lLiBQbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gYXZvaWQgYW55IGRlbGF5cyBpbiBwcm9jZXNzaW5nIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gaGVscCE8L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkp1cnkgRHV0eSBQYXlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJKdXJ5IER1dHkgUGF5XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIHJlYWNoaW5nIHRoZSBjcml0aWNhbCBzdGFnZXMgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQganVyeSBkdXR5IHBheSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluY29tZSBhbmQgZXhwbG9yZSBhbnkgcG90ZW50aWFsIGRlZHVjdGlvbnMgb3IgY3JlZGl0cywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBvZiBKdXJ5IER1dHkgUGF5Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgdG90YWwgYW1vdW50IHlvdSByZWNlaXZlZCBmb3Igc2VydmluZyBqdXJ5IGR1dHkuIFRoaXMgYW1vdW50IGlzIG9mdGVuIHJlcG9ydGVkIG9uIEZvcm0gMTA5OS1HLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkp1cnkgRHV0eSBEYXRlczo8L3N0cm9uZz4gVGhlIGRhdGVzIHlvdSBzZXJ2ZWQgb24ganVyeSBkdXR5LiBUaGlzIGhlbHBzIGluIHZlcmlmeWluZyB0aGUgZHVyYXRpb24gYW5kIGNvcnJlbGF0aW5nIGl0IHdpdGggdGhlIGNvbXBlbnNhdGlvbiByZWNlaXZlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBSZWltYnVyc2VtZW50Ojwvc3Ryb25nPiBJZiB5b3VyIGVtcGxveWVyIGNvbXBlbnNhdGVkIHlvdSAoaW4gZnVsbCBvciBwYXJ0KSBmb3IgdGhlIHRpbWUgeW91IHdlcmUgc2VydmluZyBvbiBqdXJ5IGR1dHksIHBsZWFzZSBwcm92aWRlIGRldGFpbHMgb2YgdGhlIGFtb3VudHMgcGFpZCBieSB5b3VyIGVtcGxveWVyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkJhbmsgU3RhdGVtZW50cyBvciBQYXkgU3R1YnM6PC9zdHJvbmc+IEFueSBiYW5rIHN0YXRlbWVudHMgb3IgcGF5IHN0dWJzIHNob3dpbmcgdGhlIGp1cnkgZHV0eSBwYXkgZGVwb3NpdCBvciBlbXBsb3llciByZWltYnVyc2VtZW50cy4gVGhlc2UgZG9jdW1lbnRzIGhlbHAgaW4gdmVyaWZ5aW5nIHRoZSBhbW91bnRzIGRlY2xhcmVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5OS1HIChpZiByZWNlaXZlZCk6PC9zdHJvbmc+IFNvbWUganVyaXNkaWN0aW9ucyBwcm92aWRlIGEgRm9ybSAxMDk5LUcgZm9yIGp1cnkgZHV0eSBwYXkuIElmIHlvdSByZWNlaXZlZCBvbmUsIHBsZWFzZSBpbmNsdWRlIGEgY29weS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB3aWxsIGFsbG93IHVzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFsYXNrYSBQZXJtYW5lbnQgRnVuZHMgRGl2aWRlbmRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQWxhc2thIFBlcm1hbmVudCBGdW5kcyBEaXZpZGVuZHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5JbiByZXZpZXdpbmcgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGZvciB5b3VyIHRheCByZXR1cm4gcHJlcGFyYXRpb24sIHdlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZGl2aWRlbmRzIGZyb20gdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmZvcm1hdGlvbiBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIElSUyBndWlkZWxpbmVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxiPjEwOTktTUlTQyBGb3JtOjwvYj4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSAxMDk5LU1JU0MgZm9ybSBpc3N1ZWQgYnkgdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBDb3Jwb3JhdGlvbi4gVGhpcyBmb3JtIG91dGxpbmVzIHRoZSB0b3RhbCBhbW91bnQgb2YgZGl2aWRlbmRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxiPkJhbmsgU3RhdGVtZW50czo8L2I+IElmIHBvc3NpYmxlLCBwcm92aWRlIGJhbmsgc3RhdGVtZW50cyBzaG93aW5nIHRoZSBkZXBvc2l0KHMpIG9mIHRoZSBkaXZpZGVuZHMgaW50byB5b3VyIGFjY291bnQuIFRoaXMgc2VydmVzIGFzIGFkZGl0aW9uYWwgcHJvb2Ygb2YgaW5jb21lLjwvbGk+XG4gICAgICAgIDxsaT48Yj5QZXJzb25hbCBJZGVudGlmaWNhdGlvbiBJbmZvcm1hdGlvbjo8L2I+IENvbmZpcm0geW91ciBmdWxsIGxlZ2FsIG5hbWUgYW5kIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBkaXNjcmVwYW5jaWVzIGJldHdlZW4gb3VyIHJlY29yZHMgYW5kIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBvbiB0aGUgMTA5OS1NSVNDIGZvcm0uPC9saT5cbiAgICAgICAgPGxpPjxiPlByZXZpb3VzIFllYXIncyBEaXZpZGVuZCBJbmZvcm1hdGlvbjo8L2I+IElmIHlvdSByZWNlaXZlZCBkaXZpZGVuZHMgZnJvbSB0aGUgQWxhc2thIFBlcm1hbmVudCBGdW5kIGluIHRoZSBwcmV2aW91cyB0YXggeWVhciBidXQgaGF2ZSBub3QgcHJvdmlkZWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIHNvLiBJdCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIHRvIHBvdGVudGlhbGx5IGlkZW50aWZ5IGFueSBjYXJyeW92ZXIgZWZmZWN0cyBvbiB5b3VyIGN1cnJlbnQgdGF4IHllYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdCBpcyBoaWdobHkgYXBwcmVjaWF0ZWQuIENvbXBsZXRpbmcgdGhpcyBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHdpbGwgZW5hYmxlIHVzIHRvIHByb2dyZXNzIHdpdGggdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybiBlZmZpY2llbnRseS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRXhlY3V0b3IgRmVlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkV4ZWN1dG9yIEZlZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5XZSB1bmRlcnN0YW5kIGZyb20geW91ciByZWNlbnQgcmVzcG9uc2UgdGhhdCB5b3UgaGF2ZSBwYWlkIG9yIHJlY2VpdmVkIGV4ZWN1dG9yIGZlZXMuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgdGF4IHByZXBhcmF0aW9uLCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlc2UgdHJhbnNhY3Rpb25zLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nOjwvcD5cbjxvbD5cbiAgPGxpPkEgZGV0YWlsZWQgc3RhdGVtZW50IG9mIHRoZSBleGVjdXRvciBmZWVzIHBhaWQgb3IgcmVjZWl2ZWQsIGluY2x1ZGluZyBkYXRlcyBhbmQgYW1vdW50cy48L2xpPlxuICA8bGk+SWYgeW91IHJlY2VpdmVkIGV4ZWN1dG9yIGZlZXMsIHBsZWFzZSBwcm92aWRlIHlvdXIgcm9sZSAoZS5nLiwgcHJpbWFyeSBleGVjdXRvciwgY28tZXhlY3V0b3IpIGFuZCB0aGUgZXN0YXRlJ3MgbmFtZS48L2xpPlxuICA8bGk+SWYgeW91IHBhaWQgZXhlY3V0b3IgZmVlcywgcHJvdmlkZSB0aGUgbmFtZSBhbmQgdGF4IGlkZW50aWZpY2F0aW9uIG51bWJlciAoU1NOIG9yIEVJTikgb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gdGhlIGZlZXMgd2VyZSBwYWlkLjwvbGk+XG4gIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiB0aGF0IG91dGxpbmVzIHRoZSBhZ3JlZW1lbnQgb3IgY291cnQgb3JkZXIgcmVnYXJkaW5nIHRoZSBleGVjdXRvciBmZWUuPC9saT5cbiAgPGxpPkNvcGllcyBvZiBiYW5rIHN0YXRlbWVudHMgb3IgY2FuY2VsbGVkIGNoZWNrcyBldmlkZW5jaW5nIHRoZSBwYXltZW50IG9yIHJlY2VpcHQgb2YgdGhlc2UgZmVlcy48L2xpPlxuICA8bGk+Rm9yIGZlZXMgcmVjZWl2ZWQsIHBsZWFzZSBjb25maXJtIHdoZXRoZXIgdGF4ZXMgd2VyZSB3aXRoaGVsZCBvciBub3QuIElmIHNvLCBwcm92aWRlIGEgY29weSBvZiB0aGUgRm9ybSAxMDk5LU1JU0MgeW91IHJlY2VpdmVkLjwvbGk+XG48L29sPlxuPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB0aGVzZSBleGVjdXRvciBmZWVzIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIGd1aWRlbGluZXMuIFBsZWFzZSBzZW5kIHRoZSBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIHRvIHVzIHRvIGZhY2lsaXRhdGUgYSB0aW1lbHkgYW5kIGFjY3VyYXRlIHRheCBmaWxpbmcuPC9wPlxuPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFdmVudCBHcmF0dWl0aWVzIGFuZCBHaWZ0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkV2ZW50IEdyYXR1aXRpZXMgYW5kIEdpZnRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGNvbXBsZXRpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBuZWVkIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHBhcnRpZXMgb3IgZXZlbnRzIHlvdSBob3N0ZWQgdGhpcyB0YXggeWVhci4gU3BlY2lmaWNhbGx5LCBzaW5jZSB5b3UgaW5kaWNhdGVkIHRoYXQgeW91IHJlY2VpdmVkIGdpZnRzLCBncmF0dWl0aWVzLCBvciBvdGhlciBmb3JtcyBvZiBjb21wZW5zYXRpb24gYXMgYSByZXN1bHQgb2YgdGhlc2UgZXZlbnRzLCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHRvIGVuc3VyZSBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGVhY2ggZXZlbnQgaG9zdGVkLCBpbmNsdWRpbmc6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2YgdGhlIGV2ZW50LjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkxvY2F0aW9uIG9mIHRoZSBldmVudC48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BcHByb3hpbWF0ZSBudW1iZXIgb2YgYXR0ZW5kZWVzLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlB1cnBvc2Ugb2YgdGhlIGV2ZW50IChlLmcuLCBzYWxlcyBwcm9tb3Rpb24sIGN1c3RvbWVyIGFwcHJlY2lhdGlvbikuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIGZvciBlYWNoIGdpZnQsIGdyYXR1aXR5LCBvciBmb3JtIG9mIGNvbXBlbnNhdGlvbiByZWNlaXZlZCwgc3VjaCBhczpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIGdpZnQgb3IgZ3JhdHVpdHkuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+RXN0aW1hdGVkIGZhaXIgbWFya2V0IHZhbHVlIGF0IHRoZSB0aW1lIHJlY2VpdmVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPk5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHByb3ZpZGluZyB0aGUgZ2lmdCBvciBncmF0dWl0eS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIHJlZ2FyZGluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBpdGVtcyAoZS5nLiwgdGhhbmsgeW91IGxldHRlcnMsIGVtYWlscyBjb25maXJtaW5nIHJlY2VpcHQpLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+QW55IHJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBleHBlbnNlcyBpbmN1cnJlZCB3aGlsZSBob3N0aW5nIHRoZXNlIGV2ZW50cyAoZS5nLiwgY2F0ZXJpbmcsIHZlbnVlIHJlbnRhbCwgZW50ZXJ0YWlubWVudCkuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSBhY2N1cmF0ZWx5IHJlcG9ydCBhbGwgZm9ybXMgb2YgaW5jb21lLCBpbmNsdWRpbmcgbm9uLW1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgdG8gY29tcGx5IHdpdGggSVJTIHJlZ3VsYXRpb25zLiBZb3VyIHByb21wdCByZXNwb25zZSB3aXRoIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gd2lsbCBncmVhdGx5IGFzc2lzdCBpbiB0aGlzIHByb2Nlc3MuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUXVhbGlmaWVkIEVkdWNhdG9yIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUXVhbGlmaWVkIEVkdWNhdG9yIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgY29tcHJlaGVuc2l2ZSBhcHByb2FjaCB0byB5b3VyIHRheCBwcmVwYXJhdGlvbiBmb3IgdGhlIGN1cnJlbnQgeWVhciwgeW91IGhhdmUgaW5kaWNhdGVkIHRoYXQgeW91J3ZlIGluY3VycmVkIG91dC1vZi1wb2NrZXQgZXhwZW5zZXMgYXMgYSBxdWFsaWZpZWQgZWR1Y2F0b3IgZm9yIGNsYXNzcm9vbSBtYXRlcmlhbHMgb3Igc3VwcGxpZXMuIFRvIGFjY3VyYXRlbHkgY2xhaW0gdGhlc2UgZGVkdWN0aW9ucyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGJlbmVmaXQsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PGI+RGV0YWlsZWQgTGlzdCBvZiBFeHBlbnNlczo8L2I+IEEgYnJlYWtkb3duIG9mIGFsbCBjbGFzc3Jvb20gbWF0ZXJpYWxzIG9yIHN1cHBsaWVzIHB1cmNoYXNlZCwgaW5jbHVkaW5nIGJvb2tzLCBzdXBwbGllcywgY29tcHV0ZXIgZXF1aXBtZW50IChoYXJkd2FyZSwgc29mdHdhcmUsIGFuZCBzZXJ2aWNlcyksIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbWF0ZXJpYWxzLjwvbGk+XG4gICAgICAgIDxsaT48Yj5SZWNlaXB0cyBhbmQgUHJvb2Ygb2YgUGF5bWVudDo8L2I+IENvcGllcyBvZiByZWNlaXB0cyBvciBiYW5rL2NyZWRpdCBjYXJkIHN0YXRlbWVudHMgZm9yIGVhY2ggcHVyY2hhc2UgbWFkZS4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkYXRlIG9mIHB1cmNoYXNlIGFuZCB0aGUgaXRlbSBvciBzZXJ2aWNlIHB1cmNoYXNlZCBhcmUgY2xlYXJseSB2aXNpYmxlLjwvbGk+XG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIFB1cmNoYXNlczo8L2I+IFRoZSBzcGVjaWZpYyBkYXRlcyBlYWNoIGl0ZW0gd2FzIHB1cmNoYXNlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48Yj5Vc2FnZSBEb2N1bWVudGF0aW9uOjwvYj4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiBob3cgZWFjaCBpdGVtIHB1cmNoYXNlZCB3YXMgdXNlZCBpbiB0aGUgY2xhc3Nyb29tIHNldHRpbmcuPC9saT5cbiAgICAgICAgPGxpPjxiPlRvdGFsIEFtb3VudDo8L2I+IFRoZSB0b3RhbCBkb2xsYXIgYW1vdW50IHNwZW50IG9uIHRoZXNlIG1hdGVyaWFscyBhbmQgc3VwcGxpZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoZSB0YXggeWVhci48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VW5kZXJzdGFuZGluZyB0aGF0IHlvdXIgdGltZSBpcyB2YWx1YWJsZSwgd2UgYXBwcmVjaWF0ZSB5b3VyIGVmZm9ydCBpbiBjb21waWxpbmcgdGhpcyBpbmZvcm1hdGlvbiBwcm9tcHRseS4gVGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmluZyB5b3UgYXJlIGNvbXBlbnNhdGVkIGZvciB5b3VyIGludmVzdG1lbnQgaW4gZWR1Y2F0aW9uYWwgbWF0ZXJpYWxzLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHdlIGNhbiBwcm9jZWVkIHdpdGhvdXQgZGVsYXkuIFlvdSBjYW4gc2VuZCB0aGUgZG9jdW1lbnRzIHRvIHVzIGVpdGhlciB2aWEgZW1haWwgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tIG9yIHVwbG9hZCB0aGVtIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgeW91ciBkZWRpY2F0aW9uIGFzIGFuIGVkdWNhdG9yLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQXJtZWQgRm9yY2VzIFJlc2VydmlzdCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3UgaW5jdXJyZWQgdW5yZWltYnVyc2VkIHRyYXZlbCBleHBlbnNlcyBhcyBhbiBBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0LiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGJlbmVmaWNpYWwgdGF4IGZpbGluZywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgZnJvbSB5b3U6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5TdW1tYXJ5IG9mIFRyYXZlbCBEYXRlczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBsaXN0IG9mIGFsbCBkYXRlcyB5b3UgdHJhdmVsZWQgbW9yZSB0aGFuIDEwMCBtaWxlcyBhd2F5IGZyb20gaG9tZSB0byBwZXJmb3JtIHlvdXIgcmVzZXJ2ZSBkdXRpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5UcmF2ZWwgRXhwZW5zZXMgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gRm9yIGVhY2ggb2YgdGhlIHRyYXZlbCBkYXRlcyBsaXN0ZWQsIHByb3ZpZGUgcmVjZWlwdHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gZm9yOlxuICAgICAgICA8dWw+XG4gICAgICAgIDxsaT5UcmFuc3BvcnRhdGlvbiAoZS5nLiwgZ2FzIHJlY2VpcHRzLCBtaWxlYWdlIGxvZ3MsIGFpcnBsYW5lIHRpY2tldHMsIGV0Yy4pPC9saT5cbiAgICAgICAgPGxpPkxvZGdpbmcgKG9ubHkgaWYgYW4gb3Zlcm5pZ2h0IHN0YXkgd2FzIHJlcXVpcmVkKTwvbGk+XG4gICAgICAgIDxsaT5NZWFscyBhbmQgSW5jaWRlbnRhbCBFeHBlbnNlcyAoZGV0YWlscyBvbiBlYWNoLCBpZiBub3Qgb3B0aW5nIGZvciB0aGUgc3RhbmRhcmQgbWVhbCBhbGxvd2FuY2UpPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2xpPlxuICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2VydmUgU3RhdHVzOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciBvcmRlcnMgb3IgYW55IGRvY3VtZW50YXRpb24gY29uZmlybWluZyB5b3VyIHBhcnRpY2lwYXRpb24gYW5kIGR1dGllcyBhcyBhbiBBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IGR1cmluZyB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uPC9saT5cbiAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnQgb2YgUmVpbWJ1cnNlbWVudDo8L3N0cm9uZz4gQSBkZXRhaWxlZCBhY2NvdW50IG9mIGFueSByZWltYnVyc2VtZW50cyByZWNlaXZlZCBmb3IgdGhlIHRyYXZlbCBleHBlbnNlcyBjbGFpbWVkLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBhcmUgbGVnaWJsZSBhbmQgY2xlYXJseSBsYWJlbGVkLiBQcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGFsbG93IHN1ZmZpY2llbnQgdGltZSBmb3IgcHJvY2Vzc2luZyBhbmQgaW5jbHVzaW9uIGluIHlvdXIgdGF4IGZpbGluZy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIE91ciB0ZWFtIGlzIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJmb3JtaW5nIEFydGlzdCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlBlcmZvcm1pbmcgQXJ0aXN0IEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UncmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBuZWNlc3NhcnkgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHlvdXIgZXhwZW5zZXMgYXMgYSBwZXJmb3JtaW5nIGFydGlzdC4gVGhlIGZvbGxvd2luZyBsaXN0IGRldGFpbHMgdGhlIHNwZWNpZmljIGpvYi1yZWxhdGVkIGV4cGVuc2VzIHRoYXQgd2UgcmVxdWlyZS4gS2luZGx5IHJldmlldyBhbmQgcHJvdmlkZSB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSBhIHRob3JvdWdoIGFuZCB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkF1ZGl0aW9uIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBiYW5rL2NyZWRpdCBjYXJkIHN0YXRlbWVudHMgc2hvd2luZyBwYXltZW50cyBmb3IgYXVkaXRpb25zLCBpbmNsdWRpbmcgYW55IGFwcGxpY2F0aW9uIG9yIGVudHJ5IGZlZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VHJhdmVsIEV4cGVuc2VzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIGZvciB0cmF2ZWwgY29zdHMgcmVsYXRlZCB0byBwZXJmb3JtYW5jZXMuIFRoaXMgaW5jbHVkZXMgYWlyZmFyZSwgbG9kZ2luZywgY2FyIHJlbnRhbHMsIGFuZCBnYXNvbGluZSByZWNlaXB0cy4gUGxlYXNlIGluZGljYXRlIHRoZSBkYXRlcyBhbmQgcHVycG9zZSBvZiBlYWNoIHRyaXAuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdHVtZSBFeHBlbnNlczo8L3N0cm9uZz4gUmVjZWlwdHMgZm9yIGFueSBjb3N0dW1lcyBvciBzcGVjaWFsaXplZCBjbG90aGluZyByZXF1aXJlZCBmb3IgeW91ciBwZXJmb3JtYW5jZXMgdGhhdCBhcmUgbm90IHN1aXRhYmxlIGZvciBldmVyeWRheSB3ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk1ha2V1cC9IYWlyIEV4cGVuc2VzOjwvc3Ryb25nPiBTcGVjaWZpYyB0byBwZXJmb3JtYW5jZXMsIGluY2x1ZGluZyBjb3N0cyBmb3IgcHJvZHVjdHMgYW5kIHByb2Zlc3Npb25hbCBzZXJ2aWNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5UcmFpbmluZyBhbmQgUHJvZmVzc2lvbmFsIERldmVsb3BtZW50Ojwvc3Ryb25nPiBDb3N0cyByZWxhdGVkIHRvIGNsYXNzZXMsIHdvcmtzaG9wcywgb3Igc2VtaW5hcnMgYWltZWQgYXQgaW1wcm92aW5nIHlvdXIgcGVyZm9ybWFuY2Ugc2tpbGxzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFnZW50IGFuZCBNYW5hZ2VtZW50IEZlZXM6PC9zdHJvbmc+IENvbnRyYWN0cyBvciBzdGF0ZW1lbnRzIGRldGFpbGluZyBwYXltZW50cyB0byBhZ2VudHMgb3IgbWFuYWdlcnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+TWlzY2VsbGFuZW91cyBQZXJmb3JtYW5jZS1SZWxhdGVkIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBmb3IgYW55IG90aGVyIGV4cGVuc2VzIGRpcmVjdGx5IHJlbGF0ZWQgdG8geW91ciB3b3JrIGFzIGEgcGVyZm9ybWluZyBhcnRpc3QsIHN1Y2ggYXMgZXF1aXBtZW50LCBtdXNpYyBvciBzY3JpcHQgcHVyY2hhc2VzLCBhbmQgbWFpbnRlbmFuY2UgY29zdHMgZm9yIGluc3RydW1lbnRzIG9yIHBlcmZvcm1hbmNlIGdlYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgcHJvdmlkZWQgZG9jdW1lbnRzIGNsZWFybHkgaW5kaWNhdGUgdGhlIGRhdGUsIGFtb3VudCwgYW5kIG5hdHVyZSBvZiBlYWNoIGV4cGVuc2UuIElmIHlvdSdyZSB1bnN1cmUgd2hldGhlciBhbiBleHBlbnNlIHF1YWxpZmllcywgaW5jbHVkZSBpdCB3aXRoIGEgYnJpZWYgbm90ZSBleHBsYWluaW5nIGl0cyBwdXJwb3NlLiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IG1heGltaXplIHlvdXIgZGVkdWN0aW9ucyB3aGlsZSBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZlZSBCYXNlZCBHb3Zlcm5tZW50IE9mZmljaWFsIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRmVlIEJhc2VkIEdvdmVybm1lbnQgT2ZmaWNpYWwgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcHJvY2Vzc2luZyB5b3VyIHRheCByZXR1cm5zIGFuZCBub3RlZCB0aGF0IHlvdSB3b3JrZWQgYXMgYSA8c3Ryb25nPmZlZS1iYXNlZCBnb3Zlcm5tZW50IG9mZmljaWFsPC9zdHJvbmc+IGR1cmluZyB0aGUgdGF4IHllYXIuIEFzIHBhcnQgb2YgdGhpcyByb2xlLCB5b3UndmUgcmVwb3J0ZWQgaW5jdXJyaW5nIHVucmVpbWJ1cnNlZCBleHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgb2ZmaWNpYWwgZHV0aWVzLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIG1heGltdW0gZGVkdWN0aW9ucyBvbiB5b3VyIHRheCBmaWxpbmdzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgRXhwZW5zZSBSZXBvcnRzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBhbGwgZXhwZW5zZXMuIEVhY2ggZW50cnkgc2hvdWxkIGluY2x1ZGUgdGhlIGRhdGUsIGFtb3VudCwgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIG5hdHVyZSBvZiB0aGUgZXhwZW5zZS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUGF5bWVudDo8L3N0cm9uZz4gUmVjZWlwdHMsIGJhbmsgc3RhdGVtZW50cywgb3IgY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBldmlkZW5jaW5nIHRoZSBwYXltZW50IG9mIHRoZSByZXBvcnRlZCBleHBlbnNlcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+T2ZmaWNpYWwgU2NoZWR1bGUgb3IgRHV0eSBSb3N0ZXI6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gdGhhdCBjb3JyZWxhdGVzIHlvdXIgcmVwb3J0ZWQgZXhwZW5zZXMgd2l0aCB5b3VyIG9mZmljaWFsIGR1dGllcyBvbiBzcGVjaWZpYyBkYXRlcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+TWlsZWFnZSBMb2c6PC9zdHJvbmc+IElmIGFueSBleHBlbnNlcyBhcmUgZm9yIHRyYXZlbCwgYSBkZXRhaWxlZCBtaWxlYWdlIGxvZyBzaG93aW5nIGRhdGVzLCBkZXN0aW5hdGlvbiwgcHVycG9zZSBvZiB0aGUgdHJpcCwgYW5kIG1pbGVzIHRyYXZlbGVkLiBFbnN1cmUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHBlcnNvbmFsIGFuZCBvZmZpY2lhbCB0cmF2ZWwuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNvbW11bmljYXRpb24gd2l0aCBHb3Zlcm5tZW50IEFnZW5jeTo8L3N0cm9uZz4gQW55IGNvcnJlc3BvbmRlbmNlIHdpdGggdGhlIGdvdmVybm1lbnQgYWdlbmN5IGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBleHBlbnNlcyB3ZXJlIG5vdCByZWltYnVyc2VkLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgaXMgbGVnaWJsZSBhbmQgb3JnYW5pemVkIGNocm9ub2xvZ2ljYWxseS4gVGhpcyB3aWxsIGdyZWF0bHkgYXNzaXN0IGluIHRoZSBzcGVlZHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCBmaWxpbmdzIGFuZCBpbiBtYXhpbWl6aW5nIHlvdXIgZWxpZ2libGUgZGVkdWN0aW9ucy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2XigJlyZSBoZXJlIHRvIGhlbHAgZXZlcnkgc3RlcCBvZiB0aGUgd2F5ITwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIU0EgRGVkdWN0aW9uIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiSFNBIERlZHVjdGlvbiBFeHBlbnNlc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgY29uZmlybWluZyB5b3VyIEhlYWx0aCBTYXZpbmdzIEFjY291bnQgKEhTQSkgY29udHJpYnV0aW9ucyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIEhTQSBkZWR1Y3Rpb24gYW5kIGVuc3VyZSB3ZSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5Ub3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIEhTQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IHlvdXIgZW1wbG95ZXIgdG8gdGhlIEhTQSAoaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMsIGlmIHRoZXkgd2VyZSBub3QgbWFkZSBpbiBhIGx1bXAgc3VtLjwvbGk+XG4gICAgICAgIDxsaT5Qcm9vZiBvZiBIU0EgZWxpZ2liaWxpdHkgZm9yIHRoZSB0YXggeWVhciAodHlwaWNhbGx5LCB0aGlzIGludm9sdmVzIHByb29mIG9mIGEgSGlnaCBEZWR1Y3RpYmxlIEhlYWx0aCBQbGFuKS48L2xpPlxuICAgICAgICA8bGk+U3RhdGVtZW50cyBmcm9tIHlvdXIgSFNBIHByb3ZpZGVyIGRldGFpbGluZyBkaXN0cmlidXRpb25zLCBpZiBhbnkgd2VyZSBtYWRlLjwvbGk+XG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgbWVkaWNhbCBleHBlbnNlcyBwYWlkIG91dCBvZiB0aGUgSFNBLCBpZiBhbnkuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYm90aCB0aGUgYWNjdXJhdGUgZmlsaW5nIG9mIHlvdXIgdGF4ZXMgYW5kIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zIHJlZ2FyZGluZyBIU0FzLiBQbGVhc2UgcmVzcG9uZCB3aXRoIHRoZXNlIGRvY3VtZW50cyBhbmQgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyBuZWVkZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQXJtZWQgRm9yY2VzIE1vdmluZyBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFybWVkIEZvcmNlcyBNb3ZpbmcgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLCB5b3UgaW5kaWNhdGVkIHRoYXQgeW91IGhhdmUgaW5jdXJyZWQgbW92aW5nIGV4cGVuc2VzIHJlbGF0ZWQgdG8gYSBwZXJtYW5lbnQgY2hhbmdlIG9mIHN0YXRpb24gYXMgYSBtZW1iZXIgb2YgdGhlIEFybWVkIEZvcmNlcy4gVG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCByZXR1cm4gYW5kIHRvIHBvdGVudGlhbGx5IHF1YWxpZnkgZm9yIHJlbGF0ZWQgZGVkdWN0aW9ucyBvciBleGNsdXNpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxiPk9yZGVycyBmb3IgUGVybWFuZW50IENoYW5nZSBvZiBTdGF0aW9uOjwvYj4gQSBjb3B5IG9mIHRoZSBvZmZpY2lhbCBvcmRlcnMgdGhhdCBpbml0aWF0ZWQgdGhlIG1vdmUuIFRoaXMgc2hvdWxkIGRldGFpbCB0aGUgbW92ZSBpcyBkdWUgdG8gbWlsaXRhcnkgb3JkZXJzIGFuZCBpbmRpY2F0ZSBib3RoIHlvdXIgcHJldmlvdXMgYW5kIG5ldyBkdXR5IHN0YXRpb25zLjwvbGk+XG4gICAgICA8bGk+PGI+UmVjZWlwdHMgYW5kIFJlY29yZHMgb2YgTW92aW5nIEV4cGVuc2VzOjwvYj4gRGV0YWlsZWQgcmVjZWlwdHMgb3IgcmVjb3JkcyBvZiBhbGwgbW92aW5nLXJlbGF0ZWQgZXhwZW5zZXMuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bzpcbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5UcmFuc3BvcnRhdGlvbiBjb3N0cyAoZS5nLiwgY29zdHMgYXNzb2NpYXRlZCB3aXRoIG1vdmluZyBob3VzZWhvbGQgZ29vZHMgYW5kIHBlcnNvbmFsIGVmZmVjdHMpPC9saT5cbiAgICAgICAgICA8bGk+VHJhdmVsIGV4cGVuc2VzIHRvIHRoZSBuZXcgaG9tZSAoZS5nLiwgbG9kZ2luZyBjb3N0cyBlbiByb3V0ZSwgYnV0IG5vdCBtZWFscyk8L2xpPlxuICAgICAgICAgIDxsaT5TdG9yYWdlIGV4cGVuc2VzIGZvciBob3VzZWhvbGQgZ29vZHMgYW5kIHBlcnNvbmFsIGVmZmVjdHMsIGlmIGFwcGxpY2FibGU8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT48Yj5MZWFzZSBUZXJtaW5hdGlvbiBEb2N1bWVudGF0aW9uOjwvYj4gSWYgYXBwbGljYWJsZSwgZG9jdW1lbnRhdGlvbiBzaG93aW5nIGFueSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggYnJlYWtpbmcgYSBsZWFzZSBkdWUgdG8gdGhlIG1vdmUuPC9saT5cbiAgICAgIDxsaT48Yj5Qcm9vZiBvZiBOZXcgUmVzaWRlbmNlOjwvYj4gQSBkb2N1bWVudCBpbmRpY2F0aW5nIHRoZSBhZGRyZXNzIG9mIHlvdXIgbmV3IHBlcm1hbmVudCByZXNpZGVuY2UuIFRoaXMgY2FuIGluY2x1ZGUgYSB1dGlsaXR5IGJpbGwsIG5ldyBsZWFzZSBhZ3JlZW1lbnQsIG9yIGhvbWVvd25lcidzIGluc3VyYW5jZSBkb2N1bWVudHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBub3RlLCB0byB0YWtlIGFkdmFudGFnZSBvZiBhbnkgZXhjbHVzaW9ucyBvciBkZWR1Y3Rpb25zIHJlbGF0ZWQgdG8gQXJtZWQgRm9yY2VzIG1vdmluZyBleHBlbnNlcywgdGhlc2UgZG9jdW1lbnRzIGFyZSBuZWNlc3NhcnkgdG8gdmVyaWZ5IHRoZSBleHBlbnNlcyBpbmN1cnJlZC4gV2UgdW5kZXJzdGFuZCB0aGUgc2Vuc2l0aXZlIG5hdHVyZSBvZiB0aGVzZSBkb2N1bWVudHMgYW5kIGFzc3VyZSB5b3UgdGhhdCBhbGwgaW5mb3JtYXRpb24gcHJvdmlkZWQgd2lsbCBiZSBrZXB0IGNvbmZpZGVudGlhbCBhbmQgdXNlZCBleGNsdXNpdmVseSBmb3IgdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2UgaW4gcHJvdmlkaW5nIHRoZXNlIGRvY3VtZW50cyB0byB1cy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRlZHVjdGlibGUgU2VsZiBFbXBsb3ltZW50IFBhcnQgVGF4ZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJEZWR1Y3RpYmxlIFNlbGYgRW1wbG95bWVudCBQYXJ0IFRheGVzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIG1heGltaXplIHlvdXIgZGVkdWN0aW9ucyBhbmQgZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSd2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGFkanVzdG1lbnQgZm9yIGhhbGYgb2YgeW91ciBzZWxmLWVtcGxveW1lbnQgdGF4LiBUaGlzIGludm9sdmVzIHRoZSBkZWR1Y3Rpb24gb2YgaGFsZiBvZiB0aGUgc2VsZi1lbXBsb3ltZW50IHRheCB5b3UndmUgcGFpZCBmb3IgdGhlIGN1cnJlbnQgeWVhciwgd2hpY2ggY29udHJpYnV0ZXMgdG93YXJkcyB5b3VyIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUuPC9wPlxuICAgIDxwPlRvIHByb2NlZWQgd2l0aCB0aGlzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+U2VsZi1FbXBsb3ltZW50IFRheCBDYWxjdWxhdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBjYWxjdWxhdGlvbiBvZiB5b3VyIHNlbGYtZW1wbG95bWVudCB0YXggZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUaGlzIG1heSBpbmNsdWRlIGEgc3VtbWFyeSBvZiB5b3VyIG5ldCBlYXJuaW5ncyBmcm9tIHNlbGYtZW1wbG95bWVudC48L2xpPlxuICAgIDxsaT48c3Ryb25nPlRvdGFsIFNlbGYtRW1wbG95bWVudCBUYXggUGFpZDo8L3N0cm9uZz4gT2ZmaWNpYWwgcmVjZWlwdHMgb3IgZG9jdW1lbnRzIHNob3dpbmcgdGhlIHRvdGFsIGFtb3VudCBvZiBzZWxmLWVtcGxveW1lbnQgdGF4IHBhaWQgZm9yIHRoZSB5ZWFyLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+SWRlbnRpZmljYXRpb24gb2YgUGF5bWVudHM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gb3IgbGVkZ2VycyBpbmRpY2F0aW5nIHBheW1lbnRzIG1hZGUgdG93YXJkcyBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRocm91Z2ggc2VsZi1lbXBsb3ltZW50IHRheC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBkb2N1bWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgdGF4ZXMgYW5kIGVuc3VyaW5nIHlvdSByZWNlaXZlIGFsbCBlbnRpdGxlZCBkZWR1Y3Rpb25zLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gT3VyIHRlYW0gaXMgaGVyZSB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhlIHByb2Nlc3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFNFUCBJUkEgQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VsZiBFbXBsb3llZCBTRVAgSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxuICAgIDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFNFUC1JUkEgKFNpbXBsaWZpZWQgRW1wbG95ZWUgUGVuc2lvbiBJbmRpdmlkdWFsIFJldGlyZW1lbnQgQWNjb3VudCkgdGhpcyB0YXggeWVhciBhcyBhIHNlbGYtZW1wbG95ZWQgaW5kaXZpZHVhbC4gRm9yIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgdG8gbWF4aW1pemUgeW91ciBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+U0VQLUlSQSBDb250cmlidXRpb24gU3RhdGVtZW50czo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIHN0YXRlbWVudHMgb3IgcmVjZWlwdHMgc2hvd2luZyB0aGUgY29udHJpYnV0aW9ucyBtYWRlIHRvIHlvdXIgU0VQLUlSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFNlbGYtRW1wbG95ZWQgSW5jb21lOjwvc3Ryb25nPiBBcyB5b3VyIFNFUC1JUkEgY29udHJpYnV0aW9uIGxpbWl0cyBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIHNlbGYtZW1wbG95ZWQgaW5jb21lLCBwbGVhc2UgZW5zdXJlIHdlIGhhdmUgYWxsIHJlbGV2YW50IGluY29tZSBkb2N1bWVudGF0aW9uLiBUaGlzIG1heSBpbmNsdWRlLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIDEwOTkgZm9ybXMsIHByb2ZpdCBhbmQgbG9zcyBzdGF0ZW1lbnRzLCBhbmQgYnVzaW5lc3MgYmFuayBzdGF0ZW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlNjaGVkdWxlIEMgKEZvcm0gMTA0MCkgb3IgRXF1aXZhbGVudDo8L3N0cm9uZz4gSWYgeW91IGhhdmUgbm90IGFscmVhZHkgZG9uZSBzbywgcGxlYXNlIHByb3ZpZGUgYSBjb21wbGV0ZWQgU2NoZWR1bGUgQyBvciBlcXVpdmFsZW50IGRvY3VtZW50YXRpb24gdGhhdCBkZXRhaWxzIHlvdXIgYnVzaW5lc3MgZWFybmluZ3MgYW5kIGV4cGVuc2VzLiBUaGlzIHdpbGwgaGVscCBpbiBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIHlvdXIgbWF4aW11bSBkZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbi48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgUHJpb3IgWWVhciBDb250cmlidXRpb24gRGV0YWlsczo8L3N0cm9uZz4gSWYgeW91IGhhdmUgbWFkZSBjb250cmlidXRpb25zIGluIHByaW9yIHllYXJzIGJ1dCBoYXZlbuKAmXQgc2hhcmVkIHRob3NlIGRldGFpbHMgd2l0aCB1cywgcGxlYXNlIGRvIHNvLiBUaGlzIGNhbiBhZmZlY3QgeW91ciBjdXJyZW50IHllYXLigJlzIGNvbnRyaWJ1dGlvbnMgYW5kIGRlZHVjdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkNvcnJlY3RseSByZXBvcnRpbmcgeW91ciBTRVAtSVJBIGNvbnRyaWJ1dGlvbnMgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgdGF4IGRlZHVjdGlvbnMgYW5kIGNvbXBseSB3aXRoIElSUyBydWxlcyBhbmQgcmVndWxhdGlvbnMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBjb21wbGV0aW5nIHlvdXIgdGF4IHByZXBhcmF0aW9uIGVmZmljaWVudGx5IGFuZCBhY2N1cmF0ZWx5LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFNJTVBMRSBQbGFuIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgU0lNUExFIFBsYW4gQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPldlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBub3RlZCB0aGF0IHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvIGEgU0lNUExFIElSQSBwbGFuIGFzIGEgc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFsIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGVzZSBjb250cmlidXRpb25zIGluIHlvdXIgdGF4IGZpbGluZywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIDwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFNJTVBMRSBJUkEgdGhpcyB0YXggeWVhcjo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIHRvdGFsIHN1bSBvZiB5b3VyIGNvbnRyaWJ1dGlvbnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29udHJpYnV0aW9uIGRhdGVzOjwvc3Ryb25nPiBMaXN0IHRoZSBkYXRlcyBvbiB3aGljaCB5b3UgbWFkZSB0aGVzZSBjb250cmlidXRpb25zIHRvIHRoZSBTSU1QTEUgSVJBLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIGNvbnRyaWJ1dGlvbnM6PC9zdHJvbmc+IFRoaXMgY2FuIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzIG9yIHRyYW5zYWN0aW9uIGhpc3RvcmllcyBzaG93aW5nIHRoZSBjb250cmlidXRpb25zIHRvIHlvdXIgU0lNUExFIElSQSBhY2NvdW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPklSUyBGb3JtIDEwNDAgU2NoZWR1bGUgQzo8L3N0cm9uZz4gQXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwsIHlvdXIgdGF4IHJldHVybiBzaG91bGQgaW5jbHVkZSBhIFNjaGVkdWxlIEMgc2hvd2luZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBkZXRlcm1pbmluZyB5b3VyIG5ldCBlYXJuaW5ncyBhbmQgdGhlIGNvbnRyaWJ1dGlvbiBsaW1pdHMgZm9yIHlvdXIgU0lNUExFIElSQS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKEVJTikgb2YgdGhlIFNJTVBMRSBJUkEgcGxhbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSB0aGUgRUlOIGZvciB5b3VyIFNJTVBMRSBJUkEuIFRoaXMgaXMgbm90IHJlcXVpcmVkIGlmIHlvdSBhcmUgdGhlIHNvbGUgY29udHJpYnV0b3IgYW5kIGRvIG5vdCBoYXZlIGFuIEVJTiBzZXBhcmF0ZSBmcm9tIHlvdXIgU29jaWFsIFNlY3VyaXR5IE51bWJlci48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgcmV0aXJlbWVudCBjb250cmlidXRpb25zLiBZb3VyIHByb21wdG5lc3MgaW4gcHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBoZWxwIGF2b2lkIGRlbGF5cyBpbiB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFF1YWxpZmllZCBQbGFuIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgUXVhbGlmaWVkIFBsYW4gQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscyByZWdhcmRpbmcgeW91ciBzZWxmLWVtcGxveWVkIHF1YWxpZmllZCBwbGFuIGNvbnRyaWJ1dGlvbnMuIFlvdXIgcmVzcG9uc2UgdG8gb3VyIHF1ZXN0aW9uIGFib3V0IG1ha2luZyBjb250cmlidXRpb25zIHRvIGEgcXVhbGlmaWVkIHJldGlyZW1lbnQgcGxhbiBkdXJpbmcgdGhpcyB0YXggeWVhciBuZWNlc3NpdGF0ZXMgZnVydGhlciBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGNvbXB1dGUgcG90ZW50aWFsIHRheCBiZW5lZml0cyBvciBvYmxpZ2F0aW9ucy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxiPkNvbmZpcm1hdGlvbiBvZiBDb250cmlidXRpb24gVHlwZTo8L2I+IENsYXJpZnkgdGhlIHR5cGUgb2YgcXVhbGlmaWVkIHJldGlyZW1lbnQgcGxhbiB5b3UgY29udHJpYnV0ZWQgdG8gKGUuZy4sIFNvbG8gNDAxKGspLCBTRVAgSVJBLCBTSU1QTEUgSVJBKS48L2xpPlxuICAgIDxsaT48Yj5Ub3RhbCBBbW91bnQgQ29udHJpYnV0ZWQ6PC9iPiBTcGVjaWZ5IHRoZSB0b3RhbCBkb2xsYXIgYW1vdW50IGNvbnRyaWJ1dGVkIHRvIHRoZSBwbGFuIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICA8bGk+PGI+Q29udHJpYnV0aW9uIERhdGVzOjwvYj4gTGlzdCB0aGUgZGF0ZXMgb24gd2hpY2ggY29udHJpYnV0aW9ucyB3ZXJlIG1hZGUuPC9saT5cbiAgICA8bGk+PGI+UGxhbiBBZG1pbmlzdHJhdG9yOjwvYj4gUHJvdmlkZSB0aGUgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgcGxhbidzIGFkbWluaXN0cmF0b3IsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICA8bGk+PGI+UHJvb2Ygb2YgQ29udHJpYnV0aW9uczo8L2I+IEZvcndhcmQgYW55IHJlY2VpcHRzLCBzdGF0ZW1lbnRzLCBvciBvdGhlciBkb2N1bWVudHMgdGhhdCBjYW4gdmVyaWZ5IHRoZSBjb250cmlidXRpb25zIHlvdSBtYWRlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoYXQgeW91IHJlY2VpdmUgdGhlIHByb3BlciB0YXggdHJlYXRtZW50IGZvciB0aGVzZSBjb250cmlidXRpb25zLiBGYWlsdXJlIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHJldGlyZW1lbnQgcGxhbiBjb250cmlidXRpb25zIGNhbiByZXN1bHQgaW4gZGlzY3JlcGFuY2llcyB3aXRoIHRoZSBJUlMgYW5kIHBvdGVudGlhbGx5IGFmZmVjdCB5b3VyIHRheCBsaWFiaWxpdHkgb3IgcmVmdW5kLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBoZWxwIHVzIHRvIG1vcmUgZWZmaWNpZW50bHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24gc2VydmljZXMuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIEhlYWx0aCBJbnN1cmFuY2UgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VsZiBFbXBsb3llZCBIZWFsdGggSW5zdXJhbmNlIERlZHVjdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RpY2VkIHlvdSBpbmRpY2F0ZWQgcGF5aW5nIGZvciBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zIGFzIGEgc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFsLiBUbyBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbnMgZm9yIHlvdXIgaGVhbHRoIGluc3VyYW5jZSBjb3N0cywgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIDxzdHJvbmc+YWxsIGhlYWx0aCBpbnN1cmFuY2UgcHJlbWl1bXM8L3N0cm9uZz4gcGFpZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgbWVkaWNhbCwgZGVudGFsLCBhbmQgbG9uZy10ZXJtIGNhcmUgaW5zdXJhbmNlLiBUaGlzIHNob3VsZCBjb3ZlcjpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50cyBwYWlkIGZvciB5b3Vyc2VsZjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHMgcGFpZCBmb3IgeW91ciBzcG91c2U8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzIHBhaWQgZm9yIHlvdXIgZGVwZW5kZW50czwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgcGF5bWVudCBmb3IgdGhlc2UgcHJlbWl1bXMsIHN1Y2ggYXM6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50czwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkluc3VyYW5jZSBwYXltZW50IHJlY2VpcHRzPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+Q2FuY2VsbGVkIGNoZWNrczwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBjb25maXJtaW5nIHRoZSBpbnN1cmFuY2UgY292ZXJhZ2UsIGluY2x1ZGluZzpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+SW5zdXJhbmNlIHBvbGljeSBzdGF0ZW1lbnRzPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+Q292ZXJhZ2Ugc3VtbWFyaWVzPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5Db25maXJtYXRpb24gdGhhdCB0aGUgaW5zdXJhbmNlIHBsYW4gaXMgZXN0YWJsaXNoZWQgdW5kZXIgeW91ciBidXNpbmVzcyAoZm9yIHNlbGYtZW1wbG95ZWQgaW5kaXZpZHVhbHMpLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIHlvdXIgZGVkdWN0aWJsZSBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gUGxlYXNlIHNlbmQgdGhlIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGVkIGluIGEgdGltZWx5IG1hbm5lci48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyByZXF1aXJlZCwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWFybHkgU2F2aW5ncyBXaXRoZHJhd2FsIFBlbmFsdHlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJFYXJseSBTYXZpbmdzIFdpdGhkcmF3YWwgUGVuYWx0eVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91IGluY3VycmVkIHBlbmFsdGllcyBkdWUgdG8gZWFybHkgd2l0aGRyYXdhbHMgZnJvbSBzYXZpbmdzIGFjY291bnRzIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhc3Npc3QgeW91IGVmZmljaWVudGx5IGFuZCBlbnN1cmUgYWNjdXJhdGUgdGF4IGZpbGluZywgd2Uga2luZGx5IGFzayB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlRoZSB0b3RhbCBhbW91bnQgb2YgcGVuYWx0aWVzPC9zdHJvbmc+IGluY3VycmVkIGZyb20gZWFybHkgd2l0aGRyYXdhbHMuIFRoaXMgaW5jbHVkZXMgcGVuYWx0aWVzIGZyb20gY2VydGlmaWNhdGVzIG9mIGRlcG9zaXQgb3Igb3RoZXIgdGltZS1iYXNlZCBzYXZpbmdzIGFjY291bnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIHN0YXRlbWVudHM8L3N0cm9uZz4gZnJvbSB5b3VyIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiBmb3IgZWFjaCBpbnN0YW5jZSBvZiBlYXJseSB3aXRoZHJhd2FsLiBUaGVzZSBzdGF0ZW1lbnRzIHNob3VsZCBpbmNsdWRlOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZGF0ZSBvZiB3aXRoZHJhd2FsPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCB3aXRoZHJhd24gZWFybHk8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgcGVuYWx0eSBjaGFyZ2VkPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlRoZSBwdXJwb3NlIG9mIGVhY2ggd2l0aGRyYXdhbDwvc3Ryb25nPiwgaWYgYXZhaWxhYmxlLiBDZXJ0YWluIHNpdHVhdGlvbnMgbWF5IHByb3ZpZGUgZXhjZXB0aW9ucyB0byBwZW5hbHRpZXMgb24geW91ciB0YXggcmV0dXJuLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgPHN0cm9uZz5jb3JyZXNwb25kZW5jZSBvciBkb2N1bWVudGF0aW9uPC9zdHJvbmc+IGZyb20gdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiByZWdhcmRpbmcgdGhlc2UgcGVuYWx0aWVzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgdG8gYWNjdXJhdGVseSBhc3Nlc3MgcG9zc2libGUgaW1wYWN0cyBvbiB5b3VyIHRheCBmaWxpbmcgYW5kIGV4cGxvcmUgYW55IG9wcG9ydHVuaXRpZXMgdG8gbWluaW1pemUgeW91ciB0YXggbGlhYmlsaXR5LjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkZXRhaWxzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFsaW1vbnkgUGFpZFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFsaW1vbnkgUGFpZFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGZpbmFuY2lhbCBhY3Rpdml0aWVzIG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuIEFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBtYWRlIGFsaW1vbnkgcGF5bWVudHMgdW5kZXIgYSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm4uIFRoZSBkb2N1bWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucyBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnlpbmcgYWxsb3dhYmxlIGRlZHVjdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBwYXltZW50cy48L3A+IFxuICAgIDxwPjxzdHJvbmc+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIHJlbGF0ZWQgdG8geW91ciBhbGltb255IHBheW1lbnRzOjwvc3Ryb25nPjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5Db3B5IG9mIHlvdXIgc2lnbmVkIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQgdGhhdCBzdGF0ZXMgdGhlIGFtb3VudCBvZiBhbGltb255IHRvIGJlIHBhaWQgYW5kIHRoZSB0aW1lbGluZXMuIFBsZWFzZSBlbnN1cmUgdGhpcyBkb2N1bWVudCBoaWdobGlnaHRzIHRoZSBzZWN0aW9ucyByZWxldmFudCB0byBhbGltb255IG9ibGlnYXRpb25zLjwvbGk+XG4gICAgICAgIDxsaT5EZXRhaWxlZCByZWNvcmQgb2YgYWxsIGFsaW1vbnkgcGF5bWVudHMgbWFkZSBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2YgZWFjaCBwYXltZW50PC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IG9mIGVhY2ggcGF5bWVudDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPk1ldGhvZCBvZiBwYXltZW50IChlLmcuLCBjaGVjaywgYmFuayB0cmFuc2Zlcik8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5OYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSByZWNpcGllbnQ8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50cyBvciBjYW5jZWxsZWQgY2hlY2tzIGFzIHByb29mIG9mIHRoZSBhbGltb255IHBheW1lbnRzIG1hZGUuPC9saT5cbiAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGFueSBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIHRoYXQgaW5kaWNhdGVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG9yaWdpbmFsIGFncmVlbWVudCBhZmZlY3RpbmcgYWxpbW9ueSBwYXltZW50cyBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGRvY3VtZW50YXRpb24gd2lsbCBoZWxwIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHJldHVybiByZWZsZWN0cyBhbGwgcmVsZXZhbnQgZmluYW5jaWFsIGFjdGl2aXRpZXMgYW5kIGFzc2lzdHMgaW4gYWNjdXJhdGVseSBkZXRlcm1pbmluZyBhbnkgdGF4IGxpYWJpbGl0aWVzIG9yIGRlZHVjdGlvbnMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZGV0YWlscyB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQgYW5kIHdpbGwgZXhwZWRpdGUgdGhlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggcHJlcGFyYXRpb25zLjwvcD5cbiAgICA8cD5QbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBpZiB5b3UgbmVlZCBmdXJ0aGVyIGd1aWRhbmNlIG9uIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMuIFdlIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoaXMgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVHJhZGl0aW9uYWwgSVJBIERlZHVjdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRyYWRpdGlvbmFsIElSQSBEZWR1Y3Rpb25cIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybi4gSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IGR1cmluZyB0aGlzIHRheCB5ZWFyLCB5b3UgaGF2ZSBjb250cmlidXRlZCB0byBhIFRyYWRpdGlvbmFsIElSQSAoSW5kaXZpZHVhbCBSZXRpcmVtZW50IEFjY291bnQpLiBUbyBhY2N1cmF0ZWx5IGNhcHR1cmUgdGhpcyBpbiB5b3VyIHRheCBmaWxpbmcgYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgZGVkdWN0aW9uLCB3ZSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICA8bGk+UHJvb2Ygb2YgY29udHJpYnV0aW9uIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgKHN1Y2ggYXMgc3RhdGVtZW50cyBvciByZWNlaXB0cykuPC9saT5cbiAgICAgIDxsaT5Zb3VyIHllYXItZW5kIElSQSBzdGF0ZW1lbnQuPC9saT5cbiAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBwcmV2aW91cyBub24tZGVkdWN0aWJsZSBjb250cmlidXRpb25zIHRvIHlvdXIgSVJBIChpZiBhcHBsaWNhYmxlKS48L2xpPlxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSB3aXRoZHJhd2FscyBvciBkaXN0cmlidXRpb25zIHRha2VuIGR1cmluZyB0aGUgeWVhci48L2xpPlxuICAgICAgPGxpPllvdXIgZmlsaW5nIHN0YXR1cyBhbmQgYW55IGluZm9ybWF0aW9uIG9uIGEgc3BvdXNlJ3MgSVJBIGNvbnRyaWJ1dGlvbnMgaWYgeW91IGFyZSBtYXJyaWVkLjwvbGk+XG4gICAgICA8bGk+RGV0YWlscyBvZiB5b3VyIGVhcm5lZCBpbmNvbWUgZm9yIHRoZSB0YXggeWVhci48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB0aGF0IHdlIGNhbiBhY2N1cmF0ZWx5IHJlcHJlc2VudCB5b3VyIElSQSBjb250cmlidXRpb25zIGFuZCBvcHRpbWl6ZSB5b3VyIGRlZHVjdGlvbnMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlN0dWRlbnQgTG9hbiBJbnRlcmVzdCBEZWR1Y3Rpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJTdHVkZW50IExvYW4gSW50ZXJlc3QgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBwYXltZW50IG9mIHN0dWRlbnQgbG9hbiBpbnRlcmVzdCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcm9jZXNzIHRoaXMgc2VnbWVudCBvZiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSB5b3UgYmVuZWZpdCBmcm9tIGFueSBwb3RlbnRpYWwgU3R1ZGVudCBMb2FuIEludGVyZXN0IERlZHVjdGlvbiwgd2UgbmVlZCB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5OC1FOjwvc3Ryb25nPiBUaGlzIGlzIGEgU3R1ZGVudCBMb2FuIEludGVyZXN0IFN0YXRlbWVudCBpc3N1ZWQgYnkgeW91ciBsb2FuIHNlcnZpY2VyLiBJZiB5b3UndmUgcGFpZCAkNjAwIG9yIG1vcmUgaW4gaW50ZXJlc3QsIHlvdSBzaG91bGQgYXV0b21hdGljYWxseSByZWNlaXZlIGl0LiBQbGVhc2Ugc2NhbiBhbmQgc2VuZCBpdCB0byB1cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Mb2FuIFN0YXRlbWVudHM6PC9zdHJvbmc+IElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBGb3JtIDEwOTgtRSBvciBwYWlkIGxlc3MgdGhhbiAkNjAwIGluIGludGVyZXN0LCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCBsb2FuIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGUgaW50ZXJlc3QgcGFpZCBvdmVyIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Cb3Jyb3dlcidzIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBTb2NpYWwgU2VjdXJpdHkgTnVtYmVycyBhbmQgZnVsbCBuYW1lcyBvZiBhbnkgaW5kaXZpZHVhbHMgZm9yIHdob20gdGhlIGxvYW4gaW50ZXJlc3Qgd2FzIHBhaWQsIGluY2x1ZGluZyB5b3Vyc2VsZiwgeW91ciBzcG91c2UsIG9yIGRlcGVuZGVudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudHMgb24gU29tZW9uZSBFbHNlJ3MgQmVoYWxmOjwvc3Ryb25nPiBJZiB5b3UncmUgbm90IGxlZ2FsbHkgb2JsaWdhdGVkIHRvIG1ha2UgaW50ZXJlc3QgcGF5bWVudHMgb24gdGhlIGxvYW4gYnV0IGhhdmUgZG9uZSBzbyBhbnl3YXksIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyByZWZsZWN0aW5nIHRoaXMgcGF5bWVudC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBkZWR1Y3Rpb24gY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgdGF4IGFkdmFudGFnZXMsIGFuZCB3ZSdyZSBoZXJlIHRvIGhlbHAgeW91IG1heGltaXplIHlvdXIgYmVuZWZpdHMuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb2FjdGl2ZSBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFzIHdlIHN0cml2ZSB0byBzZXJ2ZSB5b3UgYmV0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBcmNoZXIgTVNBIERlZHVjdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFyY2hlciBNU0EgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2Ugbm90ZWQgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIGNvbnRyaWJ1dGlvbnMgdG8gYW4gQXJjaGVyIE1lZGljYWwgU2F2aW5ncyBBY2NvdW50IChNU0EpIHdpdGhpbiB0aGlzIHRheCB5ZWFyLCB1bmRlciBhIGhpZ2gtZGVkdWN0aWJsZSBoZWFsdGggcGxhbi4gVG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBjb250cmlidXRpb25zIGluIHlvdXIgdGF4IHJldHVybiwgYW5kIHRvIG1heGltaXplIHlvdXIgcG90ZW50aWFsIGRlZHVjdGlvbnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgc3BlY2lmaWNzOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gNTQ5OC1TQTo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIEZvcm0gNTQ5OC1TQSwgaWYgcmVjZWl2ZWQsIHdoaWNoIHNob3dzIHRoZSBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIEFyY2hlciBNU0EgdGhpcyB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5CYW5rIG9yIEZpbmFuY2lhbCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZW4ndCByZWNlaXZlZCBGb3JtIDU0OTgtU0EsIGJhbmsgb3IgZmluYW5jaWFsIGluc3RpdHV0aW9uIHN0YXRlbWVudHMgc2hvd2luZyB5b3VyIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIE1TQSBhcmUgcmVxdWlyZWQuIEVuc3VyZSB0aGVzZSBjbGVhcmx5IGhpZ2hsaWdodCB0aGUgY29udHJpYnV0aW9uIGFtb3VudHMgYW5kIGRhdGVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEhpZ2gtRGVkdWN0aWJsZSBIZWFsdGggUGxhbjo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiB0aGF0IGV2aWRlbmNlcyB5b3UgYXJlIGNvdmVyZWQgdW5kZXIgYSBoaWdoLWRlZHVjdGlibGUgaGVhbHRoIHBsYW4uIFRoaXMgY291bGQgaW5jbHVkZSBpbnN1cmFuY2Ugc3RhdGVtZW50cyBvciBwb2xpY3kgZG9jdW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIGFuZCBBY2NvdW50IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBhY2NvdW50IGhvbGRlcidzIGZ1bGwgbmFtZSBhbmQgU29jaWFsIFNlY3VyaXR5IE51bWJlciwgYWxvbmdzaWRlIHRoZSBBcmNoZXIgTVNBIGFjY291bnQgbnVtYmVyLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UbyBmYWNpbGl0YXRlIGEgc21vb3RoIGRlZHVjdGlvbiBwcm9jZXNzIGFuZCBhZGhlcmUgdG8gSVJTIGd1aWRlbGluZXMsIGtpbmRseSBzdWJtaXQgdGhlIG91dGxpbmVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlPC9zdHJvbmc+LiBFYXJseSBzdWJtaXNzaW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHRheCBwcmVwYXJhdGlvbiBzZXJ2aWNlLjwvcD5cbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB0byB0aGVzZSByZXF1aXJlbWVudHMgd2lsbCBkaXJlY3RseSBpbXBhY3QgdGhlIGVmZmljaWVuY3kgYW5kIGFjY3VyYWN5IG9mIHlvdXIgdGF4IHJldHVybiBwcm9jZXNzaW5nLiBTaG91bGQgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBvciBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIGRvY3VtZW50YXRpb24sIHBsZWFzZSBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJPdGhlciBXcml0ZS1JbiBBZGp1c3RtZW50c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIk90aGVyIFdyaXRlLUluIEFkanVzdG1lbnRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIGFkZGl0aW9uYWwgZXhwZW5zZXMgb3IgYWRqdXN0bWVudHMgdGhhdCBjb3VsZCBpbXBhY3QgeW91ciB0YXhhYmxlIGluY29tZSBmb3IgdGhlIGN1cnJlbnQgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBmdWxseSBsZXZlcmFnZSBhbGwgcG9zc2libGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byB0aGVzZSBpdGVtcy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGZvciBlYWNoIHNwZWNpZmllZCBkZWR1Y3Rpb24gb3IgYWRqdXN0bWVudDo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgRXhwZW5zZSBvciBBZGp1c3RtZW50Ojwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggaXRlbSB5b3UgYmVsaWV2ZSBzaG91bGQgYmUgY29uc2lkZXJlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQ6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgcGFpZCBvciBpbmN1cnJlZCBmb3IgZWFjaCBvZiB0aGVzZSBleHBlbnNlcyBvciBhZGp1c3RtZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBDb3BpZXMgb2YgcmVjZWlwdHMsIGludm9pY2VzLCBsZWdhbCBkb2N1bWVudHMsIG9yIG90aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2UgdGhhdCB2YWxpZGF0ZSB0aGUgZXhwZW5zZSBvciBhZGp1c3RtZW50LiBUaGlzIGRvY3VtZW50YXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVxdWlyZW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUGF5bWVudCBvciBJbmN1cnJlbmNlOjwvc3Ryb25nPiBUaGUgZGF0ZShzKSBvbiB3aGljaCB0aGUgZXhwZW5zZSB3YXMgcGFpZCBvciB0aGUgYWRqdXN0bWVudCBvY2N1cnJlZC4gVGhpcyBpcyBjcml0aWNhbCB0byBkZXRlcm1pbmUgdGhlIHRheCB5ZWFyIGluIHdoaWNoIHRoZSBkZWR1Y3Rpb24gb3IgYWRqdXN0bWVudCBhcHBsaWVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgRXhwbGFuYXRpb246PC9zdHJvbmc+IEFueSBvdGhlciByZWxldmFudCBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGhlbHAgdXMgdW5kZXJzdGFuZCBob3cgdGhlIGV4cGVuc2Ugb3IgYWRqdXN0bWVudCBpcyBqdXN0aWZpZWQgdW5kZXIgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGFyZSBwcm92aWRlZCBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIGVmZmljaWVudCBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGNvbnN0aXR1dGVzIGFwcHJvcHJpYXRlIGRvY3VtZW50YXRpb24sIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFdlIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk1lZGljYWwgYW5kIERlbnRhbCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIk1lZGljYWwgYW5kIERlbnRhbCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3Ugb3IgeW91ciBkZXBlbmRlbnRzIGhhdmUgaW5jdXJyZWQgc2lnbmlmaWNhbnQgbWVkaWNhbCBvciBkZW50YWwgZXhwZW5zZXMgZHVyaW5nIHRoaXMgdGF4IHllYXIgdGhhdCB3ZXJlIG5vdCByZWltYnVyc2VkIGJ5IGluc3VyYW5jZSBvciBvdGhlciBoZWFsdGggcGxhbnMuIFRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBleHBlbnNlcyBpbiB5b3VyIHRheCBwcmVwYXJhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+RGV0YWlsZWQgcmVjZWlwdHMgb3Igc3RhdGVtZW50cyBmb3IgYWxsIG1lZGljYWwgYW5kIGRlbnRhbCBleHBlbnNlcyBpbmN1cnJlZCBmb3IgeW91cnNlbGYgYW5kIGFueSBkZXBlbmRlbnRzLiBUaGlzIGluY2x1ZGVzIHBheW1lbnRzIGZvcjpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+RG9jdG9ycyBhbmQgZGVudGlzdHM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5TdXJnZW9uczwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlByZXNjcmlwdGlvbnM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5NZWRpY2FsIGVxdWlwbWVudCBkZWVtZWQgbmVjZXNzYXJ5PC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IG90aGVyIGhlYWx0aC1yZWxhdGVkIGV4cGVuc2VzIG5vdCBsaXN0ZWQgdGhhdCB5b3UgYmVsaWV2ZSBtYXkgYmUgcmVsZXZhbnQ8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyBzaG93aW5nIGFueSByZWltYnVyc2VtZW50cyByZWNlaXZlZCBmcm9tIGluc3VyYW5jZSBvciBoZWFsdGggcGxhbnMgZm9yIHRoZXNlIGV4cGVuc2VzLjwvbGk+XG4gICAgICAgIDxsaT5BIGxpc3Qgb2YgZGVwZW5kZW50cyBmb3Igd2hvbSB0aGVzZSBtZWRpY2FsIGFuZCBkZW50YWwgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZCwgYWxvbmcgd2l0aCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XG4gICAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCByZWNvcmRzIG9mIHRyYXZlbCBleHBlbnNlcyByZWxhdGVkIHRvIG1lZGljYWwgY2FyZSwgaW5jbHVkaW5nIG1pbGVhZ2UsIHBhcmtpbmcsIGFuZCB0b2xscy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+SGF2aW5nIHRoZXNlIGRvY3VtZW50cyByZWFkeSBhbmQgYWNjdXJhdGVseSBkb2N1bWVudGVkIHdpbGwgaGVscCB1cyBlbnN1cmUgdGhhdCB3ZSBjYW4gbWF4aW1pemUgeW91ciB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzIHJlbGF0ZWQgdG8gdGhlc2UgZXhwZW5zZXMuIFBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSwgb3IgY29udGFjdCB1cyB0byBzY2hlZHVsZSBhIG1lZXRpbmcgdG8gZGlzY3VzcyB0aGVzZSBpbiBmdXJ0aGVyIGRldGFpbC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU0FMVCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNBTFQgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgbmVlZCB0byBjb21waWxlIGFjY3VyYXRlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIFN0YXRlIGFuZCBMb2NhbCBUYXhlcyAoU0FMVCkgZXhwZW5zZXMuIEFjY29yZGluZyB0byB5b3VyIHJlY2VudCBzdWJtaXNzaW9uLCB5b3UgaW5kaWNhdGVkIGhhdmluZyBwYWlkIHNpZ25pZmljYW50IGFtb3VudHMgaW4gdGhlc2UgdGF4ZXMgb3ZlciB0aGUgbGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHBvc3NpYmxlIHNlcnZpY2UgYW5kIG1heGltaXplIHlvdXIgZGVkdWN0aW9ucywgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxiPlN1bW1hcnkgb2YgU3RhdGUgYW5kIExvY2FsIEluY29tZSBUYXhlczo8L2I+IFxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlctMiBmb3JtcyBzaG93aW5nIHN0YXRlIGFuZCBsb2NhbCBpbmNvbWUgdGF4ZXMgd2l0aGhlbGQuPC9saT5cbiAgICAgICAgICA8bGk+RXN0aW1hdGVkIHRheCBwYXltZW50IHJlY2VpcHRzIHRvIHN0YXRlIGFuZCBsb2NhbCBnb3Zlcm5tZW50cywgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT48Yj5Qcm9wZXJ0eSBUYXhlczo8L2I+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+QW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnRzIGZvciB5b3VyIHByaW1hcnkgcmVzaWRlbmNlLCB2YWNhdGlvbiBob21lcywgYW5kIGFueSBvdGhlciByZWFsIGVzdGF0ZSBvd25lZC48L2xpPlxuICAgICAgICAgIDxsaT5WZWhpY2xlIHJlZ2lzdHJhdGlvbiBkb2N1bWVudHMgc2hvd2luZyBwYWlkIHByb3BlcnR5IHRheCBhbW91bnRzLjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPjxiPlNhbGVzIFRheGVzOjwvYj4gKElmIHlvdSBlbGVjdGVkIHRvIGRlZHVjdCBzYWxlcyB0YXhlcyBpbnN0ZWFkIG9mIGluY29tZSB0YXhlcylcbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5EZXRhaWxlZCByZWNlaXB0cyBvZiBzaWduaWZpY2FudCBwdXJjaGFzZXMgKGUuZy4sIHZlaGljbGUsIGJvYXQsIGhvbWUgcmVub3ZhdGlvbiBtYXRlcmlhbHMpLjwvbGk+XG4gICAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIG9yIHN1bW1hcnkgb2YgdG90YWwgc2FsZXMgdGF4ZXMgcGFpZCBpZiB5b3Uga2VwdCBhIGRldGFpbGVkIHJlY29yZC48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBkYXRlZCB3aXRoaW4gdGhlIGxhc3QgdGF4IHllYXIuIFByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgd2lsbCBleHBlZGl0ZSB0aGUgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIGhlbHAgdXMgaWRlbnRpZnkgZWxpZ2libGUgZGVkdWN0aW9ucyB0byBvcHRpbWl6ZSB5b3VyIHRheCBzaXR1YXRpb24uPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZWR1Y3RpYmxlIEludGVyZXN0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRGVkdWN0aWJsZSBJbnRlcmVzdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIG5lZWQgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGRlZHVjdGlibGUgaW50ZXJlc3QgZXhwZW5zZXMuIFRoaXMgaXMgaW4gcmVsYXRpb24gdG8gdGhlIGluZm9ybWF0aW9uIHlvdSBwcm92aWRlZCBpbmRpY2F0aW5nIHRoYXQgeW91IGhhdmUgaW5jdXJyZWQgbW9ydGdhZ2UgaW50ZXJlc3QsIGxhdGUgZmVlcywgb3IgcG9pbnRzIG9uIGEgaG9tZSBsb2FuIHRoaXMgeWVhciBmb3IgZWl0aGVyIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugb3IgYSBzZWNvbmQgaG9tZS4gVGhlc2UgZXhwZW5zZXMgbWF5IHNpZ25pZmljYW50bHkgcmVkdWNlIHlvdXIgdGF4YWJsZSBpbmNvbWUsIGVuc3VyaW5nIGEgZmF2b3JhYmxlIHRheCBvdXRjb21lIGZvciB5b3UuPC9wPlxuXG4gICAgPGgyPlJlcXVpcmVkIERvY3VtZW50YXRpb248L2gyPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICBcbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+TW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50cyAoRm9ybSAxMDk4KTwvc3Ryb25nPjogRm9yIGVhY2ggcHJvcGVydHkgeW91IG93bi4gVGhpcyBpbmNsdWRlcyB5b3VyIHByaW1hcnkgaG9tZSBhbmQgYW55IHNlY29uZCBob21lcyBvciByZW50YWwgcHJvcGVydGllcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPkhvbWUgRXF1aXR5IExvYW4gSW50ZXJlc3Q8L3N0cm9uZz46IElmIGFwcGxpY2FibGUsIGRvY3VtZW50YXRpb24gZm9yIGludGVyZXN0IHBhaWQgb24gaG9tZSBlcXVpdHkgbG9hbnMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IEludGVyZXN0IEV4cGVuc2VzPC9zdHJvbmc+OiBJZiB5b3UgaGF2ZSBpbmN1cnJlZCBhbnkgaW52ZXN0bWVudCBpbnRlcmVzdCBleHBlbnNlcywgcGxlYXNlIHByb3ZpZGUgZGV0YWlsZWQgc3RhdGVtZW50cyBvciBhY2NvdW50IHN1bW1hcmllcyBzaG93aW5nIHRoZSBpbnRlcmVzdCBwYWlkLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+UG9pbnRzIFBhaWQ8L3N0cm9uZz46IERvY3VtZW50YXRpb24gZGV0YWlsaW5nIHBvaW50cyBwYWlkIGlmIHlvdSBwdXJjaGFzZWQgb3IgcmVmaW5hbmNlZCBhIGhvbWUgdGhpcyB0YXggeWVhci48L2xpPlxuICAgIDxsaT48c3Ryb25nPkxhdGUgUGF5bWVudCBGZWVzPC9zdHJvbmc+IG9uIE1vcnRnYWdlOiBJZiBhbnksIGRvY3VtZW50YXRpb24gb2YgbGF0ZSBwYXltZW50IGZlZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgaG9tZSBsb2FuKHMpLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UbyBlbnN1cmUgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgYWNjdXJhdGVseSBhbmQgZmlsZWQgb24gdGltZSwgd2Uga2luZGx5IGFzayB0aGF0IHlvdSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLiBJZiB5b3UgZm9yZXNlZSBhbnkgZGVsYXlzIG9yIGhhdmUgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBjb250YWN0IHVzIGltbWVkaWF0ZWx5LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgYXBwcmVjaWF0ZSB0aGUgb3Bwb3J0dW5pdHkgdG8gc2VydmUgeW91IGFuZCBhcmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIG9yIGNvbmNlcm5zIHlvdSBtYXkgaGF2ZS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2hhcml0YWJsZSBDb250cmlidXRpb25zXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2hhcml0YWJsZSBDb250cmlidXRpb25zXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPkFzIHBhcnQgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMsIHdlIG5vdGVkIHRoYXQgeW91IGhhdmUgbWFkZSBjaGFyaXRhYmxlIGNvbnRyaWJ1dGlvbnMgdGhpcyB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlc2UgY29udHJpYnV0aW9ucyBvbiB5b3VyIHRheCByZXR1cm4sIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbnMsIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5MaXN0IG9mIENoYXJpdGFibGUgT3JnYW5pemF0aW9uczo8L3N0cm9uZz4gTmFtZXMgYW5kIGFkZHJlc3NlcyBvZiB0aGUgb3JnYW5pemF0aW9ucyB0byB3aGljaCB5b3UgaGF2ZSBkb25hdGVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyaWJ1dGlvbiBEYXRlczo8L3N0cm9uZz4gRGF0ZXMgb24gd2hpY2ggZWFjaCBkb25hdGlvbiB3YXMgbWFkZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb25hdGlvbiBBbW91bnRzOjwvc3Ryb25nPiBcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+Rm9yIGNhc2ggZG9uYXRpb25zLCB0aGUgZXhhY3QgYW1vdW50IGRvbmF0ZWQgdG8gZWFjaCBvcmdhbml6YXRpb24uPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+Rm9yIGRvbmF0aW9ucyBvZiBnb29kcywgYW4gZXN0aW1hdGVkIHZhbHVlIG9mIHRoZSBpdGVtcyBkb25hdGVkIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBEb25hdGlvbjo8L3N0cm9uZz4gXG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlJlY2VpcHRzIGZvciBjYXNoIGRvbmF0aW9ucy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Gb3IgZG9uYXRpb25zIG9mIGdvb2RzLCBhbnkgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gc3VwcG9ydGluZyB0aGUgdmFsdWF0aW9uIGFuZCBjb25kaXRpb24gb2YgdGhlIGl0ZW1zIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50cyBvciBjYW5jZWxsZWQgY2hlY2tzIGNhbiBhbHNvIHNlcnZlIGFzIHByb29mIGZvciBjYXNoIGRvbmF0aW9ucywgaWYgcmVjZWlwdHMgYXJlIG5vdCBhdmFpbGFibGUuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gODI4Mzo8L3N0cm9uZz4gSWYgYW55IHNpbmdsZSBkb25hdGlvbiBvZiBnb29kcyBleGNlZWRzICQ1MDAgaW4gdmFsdWUsIHBsZWFzZSBjb21wbGV0ZSBTZWN0aW9uIEEgb2YgRm9ybSA4MjgzLiBJZiB0aGUgdG90YWwgdmFsdWUgb2YgZ29vZHMgZG9uYXRlZCBleGNlZWRzICQ1LDAwMCwgYSBxdWFsaWZpZWQgYXBwcmFpc2FsIGlzIHJlcXVpcmVkIGFuZCBzaG91bGQgYmUgcHJvdmlkZWQgYWxvbmcgd2l0aCBTZWN0aW9uIEIgb2YgRm9ybSA4MjgzIGNvbXBsZXRlZC48L2xpPlxuICAgIDwvb2w+XG5cbiAgICA8cD5Db3JyZWN0IGFuZCBjb21wbGV0ZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIGNoYXJpdGFibGUgY29udHJpYnV0aW9ucyBpcyBjcnVjaWFsIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zIGFuZCB0byBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cy4gUGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UsIGFsbG93aW5nIHVzIHRvIHByb2Nlc3MgeW91ciB0YXggZm9ybXMgYWNjdXJhdGVseSBhbmQgcHJvbXB0bHkuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEb25hdGVkIFByb3BlcnR5XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRG9uYXRlZCBQcm9wZXJ0eVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5mb3JtaW5nIHVzIGFib3V0IHlvdXIgZG9uYXRlZCBwcm9wZXJ0eSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRvY3VtZW50IGFuZCBjbGFpbSB0aGVzZSBkb25hdGlvbnMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSBkb25hdGVkIHByb3BlcnR5IChlLmcuLCBmdXJuaXR1cmUsIGNsb3RoaW5nLCBlbGVjdHJvbmljcykuPC9saT5cbiAgICAgICAgPGxpPk5hbWVzIGFuZCBhZGRyZXNzZXMgb2YgdGhlIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggeW91IGRvbmF0ZWQuPC9saT5cbiAgICAgICAgPGxpPlRoZSBkYXRlIG9mIGVhY2ggZG9uYXRpb24uPC9saT5cbiAgICAgICAgPGxpPlRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYXQgdGhlIHRpbWUgb2YgdGhlIGRvbmF0aW9uLiBJZiBwb3NzaWJsZSwgaW5jbHVkZSBob3cgeW91IGRldGVybWluZWQgdGhpcyB2YWx1ZS48L2xpPlxuICAgICAgICA8bGk+QW55IGFja25vd2xlZGdtZW50IG9yIHJlY2VpcHQgcmVjZWl2ZWQgZnJvbSB0aGUgb3JnYW5pemF0aW9uLiBQbGVhc2UgZW5zdXJlIGl0IGluY2x1ZGVzIHRoZSBvcmdhbml6YXRpb27igJlzIG5hbWUsIGRvbmF0aW9uIGRhdGUsIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBkb25hdGVkIGl0ZW1zLjwvbGk+XG4gICAgICAgIDxsaT5JZiBhbnkgc2luZ2xlIGRvbmF0aW9uIGV4Y2VlZGVkICQ1MDAgaW4gdmFsdWUsIHBsZWFzZSBwcm92aWRlIGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIHRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBhbmQgaG93IHRoZSB2YWx1ZSB3YXMgZGV0ZXJtaW5lZC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBzbyB3ZSBjYW4gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBhY2N1cmF0ZWx5IHJlZmxlY3RzIHlvdXIgZ2VuZXJvdXMgY29udHJpYnV0aW9ucy4gSWYgeW91IGhhdmUgbXVsdGlwbGUgZG9uYXRpb25zLCBvcmdhbml6aW5nIHRoaXMgaW5mb3JtYXRpb24gY2hyb25vbG9naWNhbGx5IGNhbiBiZSB2ZXJ5IGhlbHBmdWwuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2UgYXJlIGhlcmUgdG8gaGVscCE8L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRvbmF0ZWQgVmVoaWNsZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkRvbmF0ZWQgVmVoaWNsZVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBlZmZvcnRzIGluIHN1cHBvcnRpbmcgY2hhcml0YWJsZSBjYXVzZXMgdGhyb3VnaCB5b3VyIGdlbmVyb3VzIHZlaGljbGUgZG9uYXRpb24uIFRvIGFjY3VyYXRlbHkgZG9jdW1lbnQgdGhpcyBkb25hdGlvbiBmb3IgeW91ciB0YXggcmVjb3JkcyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBkZWR1Y3Rpb24sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XG4gICAgPG9sPlxuICAgIDxsaT48c3Ryb25nPkNoYXJpdHkgSW5mb3JtYXRpb246PC9zdHJvbmc+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaT5OYW1lIG9mIHRoZSBjaGFyaXR5PC9saT5cbiAgICAgICAgICAgIDxsaT5DaGFyaXR5J3MgdGF4LWV4ZW1wdCBJRCBudW1iZXI8L2xpPlxuICAgICAgICAgICAgPGxpPkFkZHJlc3MgYW5kIHBob25lIG51bWJlciBvZiB0aGUgY2hhcml0eTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9saT5cbiAgICA8bGk+PHN0cm9uZz5WZWhpY2xlIEluZm9ybWF0aW9uOjwvc3Ryb25nPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgICA8bGk+TWFrZSwgbW9kZWwsIGFuZCB5ZWFyIG9mIHRoZSBkb25hdGVkIHZlaGljbGU8L2xpPlxuICAgICAgICAgICAgPGxpPlZJTiAoVmVoaWNsZSBJZGVudGlmaWNhdGlvbiBOdW1iZXIpPC9saT5cbiAgICAgICAgICAgIDxsaT5BIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSB2ZWhpY2xlJ3MgY29uZGl0aW9uIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2xpPlxuICAgIDxsaT48c3Ryb25nPkRvbmF0aW9uIERvY3VtZW50YXRpb246PC9zdHJvbmc+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaT5BIGNvcHkgb2YgdGhlIGRvbmF0aW9uIHJlY2VpcHQgcHJvdmlkZWQgYnkgdGhlIGNoYXJpdHk8L2xpPlxuICAgICAgICAgICAgPGxpPkZvcm0gMTA5OC1DIChDb250cmlidXRpb25zIG9mIE1vdG9yIFZlaGljbGVzLCBCb2F0cywgYW5kIEFpcnBsYW5lcykgaWYgcmVjZWl2ZWQ8L2xpPlxuICAgICAgICAgICAgPGxpPkFueSB3cml0dGVuIGFja25vd2xlZGdtZW50cyBvciBjb21tdW5pY2F0aW9ucyBmcm9tIHRoZSBjaGFyaXR5PC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSB5b3Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIHNtb290aCBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybnMuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgbmVlZCBhbnkgYXNzaXN0YW5jZSBvciBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgeW91ciBkb25hdGlvbiByZWNvcmRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk90aGVyIEl0ZW1pemVkIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiT3RoZXIgSXRlbWl6ZWQgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5UaGFuayB5b3UgZm9yIGluZGljYXRpbmcgdGhhdCB0aGVyZSBtaWdodCBiZSBhZGRpdGlvbmFsIGluZGl2aWR1YWwsIG5vbi1idXNpbmVzcyBleHBlbnNlcyB5b3UndmUgaW5jdXJyZWQgdGhpcyB0YXggeWVhciwgd2hpY2ggbWF5IHF1YWxpZnkgZm9yIGl0ZW1pemVkIGRlZHVjdGlvbnMuIFRvIGVuc3VyZSB3ZSBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMgYW5kIGFjY3VyYXRlbHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgdGhlc2UgZXhwZW5zZXMuPC9wPlxuICAgIDxwPlBsZWFzZSBmaW5kIGJlbG93IGEgZ3VpZGVsaW5lIG9mIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgd2UgYXJlIGxvb2tpbmcgZm9yOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIHRoZSBFeHBlbnNlOiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggZXhwZW5zZSwgaW5jbHVkaW5nIHRoZSBwdXJwb3NlIGFuZCB3aHkgeW91IGJlbGlldmUgaXQgcXVhbGlmaWVzIGZvciBhbiBpdGVtaXplZCBkZWR1Y3Rpb24uPC9saT5cbiAgICAgICAgPGxpPkFtb3VudCBQYWlkOiBUaGUgdG90YWwgYW1vdW50IHBhaWQgZm9yIGVhY2ggZXhwZW5zZS48L2xpPlxuICAgICAgICA8bGk+RGF0ZXM6IFRoZSBkYXRlKHMpIG9uIHdoaWNoIHRoZSBleHBlbnNlIHdhcyBwYWlkLjwvbGk+XG4gICAgICAgIDxsaT5Qcm9vZiBvZiBQYXltZW50OiBSZWNlaXB0cywgYmFuayBzdGF0ZW1lbnRzLCBvciBjcmVkaXQgY2FyZCBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHBheW1lbnQgb2YgdGhlc2UgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPkxlZ2FsIG9yIEZpbmFuY2lhbCBBZHZpc29yIFN0YXRlbWVudHM6IElmIGFwcGxpY2FibGUsIHN0YXRlbWVudHMgb3IgbGV0dGVycyBmcm9tIGxlZ2FsIG9yIGZpbmFuY2lhbCBhZHZpc29ycyBzdXBwb3J0aW5nIHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZSBleHBlbnNlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5FeGFtcGxlcyBvZiBzdWNoIGV4cGVuc2VzIG1pZ2h0IGluY2x1ZGUgYnV0IGFyZSBub3QgbGltaXRlZCB0bzpcbiAgICA8dWw+XG4gICAgICAgIDxsaT5NZWRpY2FsIGV4cGVuc2VzIG5vdCBjb3ZlcmVkIGJ5IGhlYWx0aCBpbnN1cmFuY2U8L2xpPlxuICAgICAgICA8bGk+SW52ZXN0bWVudCBhbmQgZmluYW5jaWFsIGFkdmlzb3IgZmVlczwvbGk+XG4gICAgICAgIDxsaT5UYXggcHJlcGFyYXRpb24gZmVlczwvbGk+XG4gICAgICAgIDxsaT5TYWZlIGRlcG9zaXQgYm94IHJlbnRhbHM8L2xpPlxuICAgIDwvdWw+PC9wPlxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSByZWNlaXZlIHRoaXMgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGhlIHRpbWVseSBhbmQgZWZmaWNpZW50IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHF1YWxpZmllcyBhcyBhbiBvdGhlciBpdGVtaXplZCBleHBlbnNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDaGlsZCBEZXBlbmRlbnQgQ2FyZSBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDaGlsZCBEZXBlbmRlbnQgQ2FyZSBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGNvbmZpcm1pbmcgdGhhdCB5b3UgcGFpZCBmb3IgZGVwZW5kZW50IGNhcmUgc2VydmljZXMgbGFzdCB5ZWFyIHRvIGVuYWJsZSB5b3UgdG8gd29yayBvciBzZWFyY2ggZm9yIGVtcGxveW1lbnQuIFRvIGFjY3VyYXRlbHkgY2xhaW0gdGhlIDxzdHJvbmc+Q2hpbGQgYW5kIERlcGVuZGVudCBDYXJlIENyZWRpdDwvc3Ryb25nPiBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+VGhlIGZ1bGwgbmFtZShzKSBhbmQgc29jaWFsIHNlY3VyaXR5IG51bWJlcihzKSAoU1NOKSBvZiB0aGUgZGVwZW5kZW50KHMpIGNhcmVkIGZvci48L2xpPlxuICAgICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBwYWlkIGZvciBlYWNoIGRlcGVuZGVudOKAmXMgY2FyZSBzZXJ2aWNlcy48L2xpPlxuICAgICAgICA8bGk+TmFtZSwgYWRkcmVzcywgYW5kIFRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoRUlOIG9yIFNTTikgb2YgdGhlIGNhcmUgcHJvdmlkZXIocykuPC9saT5cbiAgICAgICAgPGxpPlByb29mIG9mIHBheW1lbnQocykgbWFkZSB0byB0aGUgY2FyZWdpdmVyKHMpLCBzdWNoIGFzIHJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cy48L2xpPlxuICAgICAgICA8bGk+SWYgdGhlIGRlcGVuZGVudCBpcyBhIGRpc2FibGVkIGFkdWx0LCBwbGVhc2UgcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZWlyIGNvbmRpdGlvbiB0byBjb25maXJtIGVsaWdpYmlsaXR5LjwvbGk+XG4gICAgICAgIDxsaT5BbnkgYXBwbGljYWJsZSBkYXRlcyBkdXJpbmcgd2hpY2ggdGhlIGNhcmUgd2FzIHByb3ZpZGVkLCBlc3BlY2lhbGx5IGlmIHRoZSBjYXJlIHdhcyBub3QgZm9yIHRoZSBmdWxsIHllYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCB0byBlbnN1cmUgd2UgY2FuIG1heGltaXplIHlvdXIgZWxpZ2libGUgY3JlZGl0IGFuZCBjb21wbHkgd2l0aCB0aGUgSVJTIHJlcXVpcmVtZW50cy4gU2hvdWxkIHlvdSBoYXZlIGNvbmNlcm5zIGFib3V0IGdhdGhlcmluZyBhbnkgb2YgdGhlIHJlcXVlc3RlZCBkb2N1bWVudGF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0IGZvciBhc3Npc3RhbmNlLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFdlIGFyZSBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzIHRvIGFjaGlldmUgdGhlIGJlc3QgcG9zc2libGUgb3V0Y29tZSBvbiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNoaWxkIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDaGlsZCBUYXggQ3JlZGl0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGV4YW1pbmluZyB5b3VyIGVsaWdpYmlsaXR5IGZvciB0aGUgPHN0cm9uZz5DaGlsZCBUYXggQ3JlZGl0PC9zdHJvbmc+LCBiYXNlZCBvbiB5b3VyIGFmZmlybWF0aXZlIHJlc3BvbnNlIHJlZ2FyZGluZyBkZXBlbmRlbnRzIHVuZGVyIHRoZSBhZ2Ugb2YgMTcuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgbWF4aW1pemVkIHRheCBiZW5lZml0cywga2luZGx5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5GdWxsIG5hbWUocykgb2YgdGhlIGNoaWxkIG9yIGNoaWxkcmVuLjwvbGk+XG4gICAgICAgIDxsaT5EYXRlKHMpIG9mIGJpcnRoIGZvciBlYWNoIGNoaWxkLjwvbGk+XG4gICAgICAgIDxsaT5Tb2NpYWwgU2VjdXJpdHkgTnVtYmVyKHMpIGZvciBlYWNoIGNoaWxkLjwvbGk+XG4gICAgICAgIDxsaT5BIHN0YXRlbWVudCBjb25maXJtaW5nIHRoZSBjaGlsZCBvciBjaGlsZHJlbiBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGxhc3QgeWVhci4gSWYgYXBwbGljYWJsZSwgcGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvZiBjdXN0b2R5IGFycmFuZ2VtZW50cy48L2xpPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBvdmVydmlldyBvZiBob3cgeW91IHByb3ZpZGVkIG1vcmUgdGhhbiBoYWxmIG9mIHRoZWlyIGZpbmFuY2lhbCBzdXBwb3J0IGxhc3QgeWVhci4gVGhpcyBjYW4gaW5jbHVkZSByZWNvcmRzIG9mIGhvdXNpbmcsIGZvb2QsIGVkdWNhdGlvbiwgbWVkaWNhbCBjYXJlLCBhbmQgb3RoZXIgcmVsZXZhbnQgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPkNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuLCBpZiBub3QgYWxyZWFkeSBwcm92aWRlZCwgdG8gYXNzaXN0IGluIGV2YWx1YXRpbmcgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbCBwaGFzZS1vdXRzIGJhc2VkIG9uIGluY29tZS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZS4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBhaWQgaW4gdGhlIHN3aWZ0IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmUgdGhhdCB5b3UgcmVjZWl2ZSBhbGwgZWxpZ2libGUgdGF4IGJlbmVmaXRzLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSBhcmUgaGVyZSB0byBoZWxwITwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgbWF5IHF1YWxpZnkgZm9yIHRoZSA8c3Ryb25nPkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdDwvc3Ryb25nPiBiYXNlZCBvbiB5b3VyIHByZWxpbWluYXJ5IGluZm9ybWF0aW9uLiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFF1YWxpZnlpbmcgQ2hpbGRyZW46PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIHRoZSBTb2NpYWwgU2VjdXJpdHkgY2FyZHMgYW5kIGJpcnRoIGNlcnRpZmljYXRlcyBmb3IgZWFjaCBvZiB5b3VyIHF1YWxpZnlpbmcgY2hpbGRyZW4gdW5kZXIgdGhlIGFnZSBvZiAxNy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEZ1cm5pc2ggYWxsIFctMiBmb3JtcywgMTA5OSBmb3JtcywgYW5kIGFueSBvdGhlciBwcm9vZiBvZiBpbmNvbWUgdG8gY29uZmlybSB5b3UgaGF2ZSBlYXJuZWQgYXQgbGVhc3QgJDIsNTAwLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFy4oCZcyBUYXggUmV0dXJuOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuIHRvIHZlcmlmeSB0aGUgQ2hpbGQgVGF4IENyZWRpdCBhbW91bnQgeW91IHJlY2VpdmVkIG9yIHdlcmUgZWxpZ2libGUgdG8gcmVjZWl2ZS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SVJTIExldHRlciA2NDE5Ojwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIHRoZSBJUlMgTGV0dGVyIDY0MTkgZm9yIHRoZSB0YXggeWVhciByZWdhcmRpbmcgdGhlIGFkdmFuY2UgQ2hpbGQgVGF4IENyZWRpdCBwYXltZW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VG8gZmFjaWxpdGF0ZSBhIHNtb290aCBwcm9jZXNzLCB3ZSBraW5kbHkgYXNrIHlvdSB0byBzZW5kIHRoZSBhYm92ZSBhcyBzb29uIGFzIHBvc3NpYmxlLCBlbnN1cmluZyBhbGwgc3VibWlzc2lvbnMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgYXJlIGNvbW1pdHRlZCB0byBzZXJ2aW5nIHlvdXIgdGF4IHByZXBhcmF0aW9uIG5lZWRzIGVmZmljaWVudGx5IGFuZCBzZWN1cmluZyB0aGUgYmVzdCBwb3NzaWJsZSBvdXRjb21lIGZvciB5b3UgYW5kIHlvdXIgZmFtaWx5LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDcmVkaXQgZm9yIE90aGVyIERlcGVuZGVudHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDcmVkaXQgZm9yIE90aGVyIERlcGVuZGVudHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RpY2VkIHlvdSBpbmRpY2F0ZWQgaGF2aW5nIGRlcGVuZGVudHMgdGhhdCBtYXkgcXVhbGlmeSBmb3IgdGhlIDxzdHJvbmc+Q3JlZGl0IGZvciBPdGhlciBEZXBlbmRlbnRzPC9zdHJvbmc+LiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgZGVwZW5kZW50cy48L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPkZ1bGwgbmFtZSBvZiBlYWNoIGRlcGVuZGVudC48L2xpPlxuICAgICAgPGxpPlRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UgKGUuZy4sIHBhcmVudCwgc2libGluZywgYWR1bHQgY2hpbGQsIG9yIG90aGVyKS48L2xpPlxuICAgICAgPGxpPlRoZWlyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb3IgSW5kaXZpZHVhbCBUYXhwYXllciBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKElUSU4pLjwvbGk+XG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhleSBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHRheCB5ZWFyLiBQbGVhc2UgcHJvdmlkZSBhbnkgcmVsZXZhbnQgZGV0YWlscyBvciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgdGhpcyBjbGFpbSAoaWYgYXZhaWxhYmxlKS48L2xpPlxuICAgICAgPGxpPkRldGFpbGVkIGxpc3Qgb2YgdGhlIGZpbmFuY2lhbCBzdXBwb3J0IHlvdSBwcm92aWRlZC4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBmb29kLCBzaGVsdGVyLCBjbG90aGluZywgbWVkaWNhbCBjYXJlLCBlZHVjYXRpb24sIGFuZCB0cmFuc3BvcnRhdGlvbiBjb3N0cy48L2xpPlxuICAgICAgPGxpPkFueSBpbmNvbWUgaW5mb3JtYXRpb24gZm9yIGVhY2ggZGVwZW5kZW50LiBUaGlzIGluY2x1ZGVzIGluY29tZSBzdGF0ZW1lbnRzIG9yIGFuIGFmZmlybWF0aW9uIHRoYXQgdGhleSBoYWQgbm8gaW5jb21lLjwvbGk+XG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhleSBhcmUgYSBVLlMuIGNpdGl6ZW4sIFUuUy4gbmF0aW9uYWwsIG9yIGEgcmVzaWRlbnQgYWxpZW4gb2YgdGhlIFVuaXRlZCBTdGF0ZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBzZW5kIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgd2UgY2FuIHByb2NlZWQgd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbiB3aXRob3V0IGRlbGF5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPiBcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UncmUgaGVyZSB0byBoZWxwIG1ha2UgeW91ciB0YXggZmlsaW5nIHByb2Nlc3MgYXMgc21vb3RoIGFuZCBlZmZpY2llbnQgYXMgcG9zc2libGUuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkb3B0aW9uIENyZWRpdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFkb3B0aW9uIENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIGhhdmluZyBleHBlbnNlcyByZWxhdGVkIHRvIGFkb3B0aW5nIGEgY2hpbGQgbGFzdCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGNsYWltIHRoZSBBZG9wdGlvbiBDcmVkaXQgb24geW91ciB0YXggcmV0dXJucywgd2UgcmVxdWlyZSBzcGVjaWZpYyBkb2N1bWVudGF0aW9uLjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+RmluYWxpemVkIEFkb3B0aW9uIERlY3JlZSBvciBDZXJ0aWZpY2F0ZS48L2xpPlxuICAgICAgPGxpPkRldGFpbGVkIExlZ2FsIEZlZXMgSW52b2ljZSAoaW5jbHVkaW5nIHRoZSBhdHRvcm5leeKAmXMgbmFtZSwgYWRkcmVzcywgYW5kIHRoZSBkYXRlIG9mIHNlcnZpY2UpLjwvbGk+XG4gICAgICA8bGk+Q291cnQgQ29zdHMgUmVjZWlwdHMuPC9saT5cbiAgICAgIDxsaT5UcmF2ZWwgRXhwZW5zZXMgUmVjZWlwdHMgKGFpcmZhcmUsIGhvdGVsLCBtZWFscykgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYWRvcHRpb24gcHJvY2Vzcy48L2xpPlxuICAgICAgPGxpPkFueSByZWxldmFudCBkb2N1bWVudHMgZm9yIGEgY2hpbGQgd2l0aCBzcGVjaWFsIG5lZWRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgICA8bGk+Rm9yZWlnbiBhZG9wdGlvbjogUHJvdmlkZSB0aGUgY291bnRyeSdzIGxlZ2FsIGRvY3VtZW50YXRpb24gcHJvdmluZyB0aGUgYWRvcHRpb24gd2FzIGZpbmFsaXplZC48L2xpPlxuICAgICAgPGxpPklSUyBGb3JtIDg4MzksIFF1YWxpZmllZCBBZG9wdGlvbiBFeHBlbnNlcyAoaWYgeW91IGhhdmUgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gY29tcGxldGUgdGhpcykuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBhcmUgY2xlYXIgYW5kIGxlZ2libGUuIEluY29tcGxldGUgb3IgdW5jbGVhciBkb2N1bWVudGF0aW9uIG1heSBkZWxheSB0aGUgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIHRoZSBwb3RlbnRpYWwgY3JlZGl0LjwvcD5cbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCB0byBwcm92aWRlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gT3VyIGdvYWwgaXMgdG8gYXNzaXN0IHlvdSBpbiBtYXhpbWl6aW5nIHlvdXIgYmVuZWZpdHMgd2hpbGUgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFtZXJpY2FuIE9wcG9ydHVuaXR5IFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QmFzZWQgb24geW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSByZWdhcmRpbmcgZXhwZW5zZXMgcGFpZCBsYXN0IHllYXIgZm9yIGNvbGxlZ2UsIHdlIG1heSBiZSBhYmxlIHRvIGNsYWltIHRoZSBBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IChBT1RDKSBvbiB5b3VyIGJlaGFsZi4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCByZXR1cm5zIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIEFPVEMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+VHVpdGlvbiBTdGF0ZW1lbnRzPC9zdHJvbmc+IChGb3JtIDEwOTgtVCkgZm9yIGVhY2ggc3R1ZGVudCBmb3Igd2hvbSB0aGUgZXhwZW5zZXMgd2VyZSBwYWlkLiBUaGlzIGZvcm0gaXMgdHlwaWNhbGx5IHByb3ZpZGVkIGJ5IHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbi48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UmVjZWlwdHMgYW5kIFJlY29yZHM8L3N0cm9uZz4gZm9yIHJlbGF0ZWQgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgbm90IGNvdmVyZWQgYnkgdGhlIHR1aXRpb24gc3RhdGVtZW50LiBUaGlzIGluY2x1ZGVzIGJvb2tzLCBzdXBwbGllcywgYW5kIGVxdWlwbWVudCByZXF1aXJlZCBmb3IgZW5yb2xsbWVudCBvciBhdHRlbmRhbmNlLjwvbGk+XG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhlIHN0dWRlbnQgd2FzIGVucm9sbGVkIDxzdHJvbmc+YXQgbGVhc3QgaGFsZi10aW1lPC9zdHJvbmc+IGluIGEgcHJvZ3JhbSBsZWFkaW5nIHRvIGEgZGVncmVlLCBjZXJ0aWZpY2F0ZSwgb3Igb3RoZXIgcmVjb2duaXplZCBlZHVjYXRpb25hbCBjcmVkZW50aWFsLjwvbGk+XG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnQgY29uZmlybWluZyB0aGF0IHRoZSBleHBlbnNlcyB3ZXJlIGZvciB0aGUgPHN0cm9uZz5maXJzdCBmb3VyIHllYXJzPC9zdHJvbmc+IG9mIHBvc3Qtc2Vjb25kYXJ5IGVkdWNhdGlvbi48L2xpPlxuICAgICAgPGxpPkV2aWRlbmNlIHRvIHNob3cgdGhhdCB0aGUgc3R1ZGVudCBoYWQgbm90IGNsYWltZWQgdGhlIEFPVEMgKG9yIHRoZSBmb3JtZXIgSG9wZSBjcmVkaXQpIGZvciBtb3JlIHRoYW4gZm91ciB0YXggeWVhcnMuPC9saT5cbiAgICAgIDxsaT5Qcm9vZiB0aGF0IG5laXRoZXIgdGhlIHN0dWRlbnQgbm9yIHRoZSBjbGFpbWFudCAoaWYgbm90IHRoZSBzdHVkZW50KSBpcyBhIG5vbnJlc2lkZW50IGFsaWVuIGZvciB0YXggcHVycG9zZXMuPC9saT5cbiAgICAgIDxsaT5BIHN0YXRlbWVudCBpbmRpY2F0aW5nIGlmIGFueSBmZWxvbnkgZHJ1ZyBjb252aWN0aW9ucyB3ZXJlIHJlY2VpdmVkIGJ5IHRoZSBzdHVkZW50IGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgaXMgZXNzZW50aWFsIGFzIHN1Y2ggY29udmljdGlvbnMgZGlzcXVhbGlmeSB0aGUgc3R1ZGVudCBmcm9tIGNsYWltaW5nIHRoZSBBT1RDLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBPbmNlIHdlIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24sIHdlIHdpbGwgcHJvY2VlZCB3aXRoIHRoZSBtYXhpbWl6YXRpb24gYW5kIGFwcGxpY2F0aW9uIG9mIHRoZSBBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IHRvIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMaWZldGltZSBMZWFybmluZyBUYXggQ3JlZGl0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiTGlmZXRpbWUgTGVhcm5pbmcgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSwgeW91ciBzcG91c2UsIG9yIHlvdXIgZGVwZW5kZW50cyBoYXZlIHBhaWQgZm9yIGhpZ2hlciBlZHVjYXRpb24gbGFzdCB5ZWFyLiBUaGlzIG1ha2VzIHlvdSBwb3RlbnRpYWxseSBlbGlnaWJsZSBmb3IgdGhlIExpZmV0aW1lIExlYXJuaW5nIFRheCBDcmVkaXQsIHdoaWNoIGNhbiBwcm92aWRlIHNpZ25pZmljYW50IHRheCBzYXZpbmdzLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB5b3VyIGVsaWdpYmlsaXR5IGFuZCBjYWxjdWxhdGUgdGhlIGNyZWRpdCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkZvcm0gMTA5OC1UIGZyb20gZWFjaCBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiBhdHRlbmRlZCBieSB5b3UsIHlvdXIgc3BvdXNlLCBvciBkZXBlbmRlbnRzLiBUaGlzIGZvcm0gc2hvd3MgdGhlIGFtb3VudHMgcGFpZCBmb3IgdHVpdGlvbiBhbmQgcmVsYXRlZCBleHBlbnNlcy48L2xpPlxuICAgICAgICA8bGk+UmVjZWlwdHMgb3IgYmFuayBzdGF0ZW1lbnRzIHNob3dpbmcgcGF5bWVudHMgbWFkZSBmb3IgdHVpdGlvbiwgZmVlcywgYm9va3MsIHN1cHBsaWVzLCBhbmQgZXF1aXBtZW50IHJlcXVpcmVkIGZvciB5b3VyIGNvdXJzZXMuIFBsZWFzZSBub3RlIHRoYXQgcm9vbSBhbmQgYm9hcmQsIGluc3VyYW5jZSwgbWVkaWNhbCBleHBlbnNlcywgYW5kIHRyYW5zcG9ydGF0aW9uIGFyZSBub3QgcXVhbGlmaWVkIGV4cGVuc2VzLjwvbGk+XG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYW55IHNjaG9sYXJzaGlwcywgZ3JhbnRzLCBvciBvdGhlciB0YXgtZnJlZSBlZHVjYXRpb25hbCBhc3Npc3RhbmNlIHJlY2VpdmVkLiBUaGlzIGhlbHBzIHVzIGRldGVybWluZSB0aGUgbmV0IGFtb3VudCBvZiBxdWFsaWZpZWQgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGFueSByZWNvcmRzIG9mIGZlbG9uaWVzIChhcyBpbmRpdmlkdWFscyB3aXRoIGZlbG9ueSBkcnVnIGNvbnZpY3Rpb25zIGFyZSBub3QgZWxpZ2libGUgZm9yIHRoaXMgY3JlZGl0KS48L2xpPlxuICAgICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBvZiBleHBlbnNlcyBwYWlkIHdpdGggZGlzdHJpYnV0ZWQgZWFybmluZ3MgZnJvbSBhIDUyOSBwbGFuLCBpZiBhbnkuIFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBhcyBpdCBtYXkgYWZmZWN0IHRoZSBjcmVkaXQgY2FsY3VsYXRpb24uPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGZvciB0aGUgdGF4IHllYXIgd2UgYXJlIHByZXBhcmluZyB5b3VyIHJldHVybiBmb3IuIEdhdGhlcmluZyBhbmQgdmVyaWZ5aW5nIHRoZXNlIGRvY3VtZW50cyBlYXJseSBpbiB0aGUgcHJvY2VzcyB3aWxsIHN0cmVhbWxpbmUgeW91ciB0YXggcHJlcGFyYXRpb24gYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgbWF4aW11bSBiZW5lZml0IGxlZ2FsbHkgYXZhaWxhYmxlIHRvIHlvdS48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb21wdCByZXNwb25zZSB3aWxsIGdyZWF0bHkgYWlkIGluIHRoZSBlZmZpY2llbnQgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkJhc2VkIG9uIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSBlYXJuZWQgbW9uZXkgZnJvbSB3b3JrIGFuZCBoYXZlIGEgcmVsYXRpdmVseSBsb3cgdG8gbW9kZXJhdGUgaW5jb21lIGxhc3QgeWVhciwgeW91IG1heSBiZSBlbGlnaWJsZSBmb3IgdGhlIEVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdCAoRUlUQykuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgRUlUQyBjbGFpbSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEVhcm5lZCBJbmNvbWU6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFsbCBXLTIgZm9ybXMgaWYgeW91IHdlcmUgZW1wbG95ZWQgYnkgc29tZW9uZSBlbHNlLCBvciBhIHN1bW1hcnkgb2YgaW5jb21lIGFuZCBleHBlbnNlcyBpZiB5b3Ugd2VyZSBzZWxmLWVtcGxveWVkIG9yIHJhbiBhIGJ1c2luZXNzIG9yIGZhcm0uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+U29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKTo8L3N0cm9uZz4gQ29waWVzIG9mIFNvY2lhbCBTZWN1cml0eSBjYXJkcyBmb3IgeW91LCB5b3VyIHNwb3VzZSAoaWYgZmlsaW5nIGpvaW50bHkpLCBhbmQgYW55IGRlcGVuZGVudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUmVzaWRlbmN5Ojwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHRoYXQgeW91ciBjaGlsZChyZW4pIGxpdmVkIHdpdGggeW91IGluIHRoZSBVbml0ZWQgU3RhdGVzIGZvciBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgdGF4IHllYXIsIGlmIGFwcGxpY2FibGUuIFRoaXMgY2FuIGluY2x1ZGUgc2Nob29sIHJlY29yZHMsIG1lZGljYWwgcmVjb3Jkcywgb3IgYSBzaWduZWQgbGV0dGVyIGZyb20gYSBsYW5kbG9yZCBvciBhbm90aGVyIHRoaXJkIHBhcnR5LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgSW5jb21lIFN0YXRlbWVudDo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcGxlYXNlIHByb3ZpZGUgYSBzdGF0ZW1lbnQgb2YgYW55IGludmVzdG1lbnQgaW5jb21lIHlvdSByZWNlaXZlZCwgYXMgdGhpcyBjYW4gYWZmZWN0IEVJVEMgZWxpZ2liaWxpdHkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmlsaW5nIFN0YXR1cyBWZXJpZmljYXRpb246PC9zdHJvbmc+IENvbmZpcm0geW91ciBmaWxpbmcgc3RhdHVzIHRvIGVuc3VyZSBwcm9wZXIgRUlUQyBjYWxjdWxhdGlvbi4gVGhpcyBjb3VsZCBiZSBTaW5nbGUsIE1hcnJpZWQgRmlsaW5nIEpvaW50bHksIEhlYWQgb2YgSG91c2Vob2xkLCBldGMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgWWVhciBUYXggUmV0dXJuOjwvc3Ryb25nPiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgeWVhciB5b3UgYXJlIGNsYWltaW5nIEVJVEMgb3IgaWYgeW91IHdlcmUgZWxpZ2libGUgZm9yIEVJVEMgaW4gdGhlIHByZXZpb3VzIHRheCB5ZWFyLCBwbGVhc2UgcHJvdmlkZSBhIGNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXJseSBsZWdpYmxlIGFuZCBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCBFSVRDIGNsYWltLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJldGlyZW1lbnQgU2F2aW5ncyBDb250cmlidXRpb24gQ3JlZGl0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmV0aXJlbWVudCBTYXZpbmdzIENvbnRyaWJ1dGlvbiBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RpY2VkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBjb250cmlidXRpbmcgdG8gYSByZXRpcmVtZW50IHBsYW4gaW4gdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgXCJSZXRpcmVtZW50IFNhdmluZ3MgQ29udHJpYnV0aW9uIENyZWRpdCxcIiB3ZSByZXF1aXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGNvbnRyaWJ1dGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgdGhlIHJldGlyZW1lbnQgcGxhbnMgeW91J3ZlIGNvbnRyaWJ1dGVkIHRvIChlLmcuLCBJUkEsIDQwMShrKSwgZXRjLik6PC9saT5cbiAgICAgIDx1bD5cbiAgICAgICAgPGxpPk5hbWUgb2YgdGhlIHBsYW4ocyk8L2xpPlxuICAgICAgICA8bGk+VHlwZSBvZiBwbGFuKHMpPC9saT5cbiAgICAgICAgPGxpPkNvbnRyaWJ1dGVkIGFtb3VudCB0byBlYWNoIHBsYW48L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxsaT5Zb3VyIGZpbGluZyBzdGF0dXMgKFNpbmdsZSwgTWFycmllZCBGaWxpbmcgSm9pbnRseSwgZXRjLik8L2xpPlxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgKGUuZy4sIGFjY291bnQgc3RhdGVtZW50cywgRm9ybSA1NDk4LCB0cmFuc2FjdGlvbiBzdW1tYXJpZXMpPC9saT5cbiAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBhZ2UsIHRvIGRldGVybWluZSBlbGlnaWJpbGl0eTwvbGk+XG4gICAgICA8bGk+QW55IG5vdGljZXMgb3Igc3RhdGVtZW50cyBmcm9tIHRoZSBwbGFuIGFkbWluaXN0cmF0b3IgcmVnYXJkaW5nIG5vbi1kZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbnM8L2xpPlxuICAgICAgPGxpPkZvciBtYXJyaWVkIGZpbGluZyBqb2ludGx5LCBzaW1pbGFyIGRldGFpbHMgZm9yIHlvdXIgc3BvdXNl4oCZcyBjb250cmlidXRpb25zLCBpZiBhcHBsaWNhYmxlPC9saT5cbiAgICA8L29sPiAgXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGUgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIGluIGEgdGltZWx5IG1hbm5lciB0byBmYWNpbGl0YXRlIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPiBcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRXhjZXNzIFNvY2lhbCBTZWN1cml0eSBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJFeGNlc3MgU29jaWFsIFNlY3VyaXR5IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdXIgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgbGFzdCB5ZWFyLCB5b3Ugd29ya2VkIGZvciB0d28gb3IgbW9yZSBlbXBsb3llcnMgYW5kIGhhZCBhIHRvdGFsIGFtb3VudCBvZiBTb2NpYWwgU2VjdXJpdHkgdGF4ZXMgd2l0aGhlbGQgZnJvbSB5b3VyIHBheWNoZWNrcyB0aGF0IGV4Y2VlZGVkIHRoZSBsaW1pdCBmb3IgdGhlIHllYXIuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgcG90ZW50aWFsIEV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgQ3JlZGl0IGFuZCBlbnN1cmUgcHJvcGVyIGFkanVzdG1lbnQgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5XLTIgRm9ybXMgZnJvbSBBbGwgRW1wbG95ZXJzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBjb3BpZXMgb2YgVy0yIGZvcm1zIGZyb20gYWxsIHlvdXIgZW1wbG95ZXJzIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uIFRoaXMgaXMgdml0YWwgdG8gY2FsY3VsYXRlIHRoZSBleGFjdCBhbW91bnQgb2YgU29jaWFsIFNlY3VyaXR5IHRheCB3aXRoaGVsZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBQYXkgU3R1YnM6PC9zdHJvbmc+IElmIHBvc3NpYmxlLCBpbmNsdWRlIHlvdXIgZmluYWwgcGF5IHN0dWJzIG9mIHRoZSB5ZWFyIGZyb20gZWFjaCBlbXBsb3llci4gVGhpcyBjYW4gaGVscCB2ZXJpZnkgdGhlIHRvdGFsIGVhcm5pbmdzIGFuZCB0aGUgYW1vdW50IG9mIFNvY2lhbCBTZWN1cml0eSB0YXggd2l0aGhlbGQsIGVzcGVjaWFsbHkgaWYgYW55IGRpc2NyZXBhbmNpZXMgYXJpc2Ugd2l0aCB0aGUgVy0yIGluZm9ybWF0aW9uLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBFbnN1cmUgeW91ciBmdWxsIG5hbWUsIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTiksIGFuZCBjdXJyZW50IGFkZHJlc3MgYXJlIGNvcnJlY3QgYW5kIHVwZGF0ZWQgZm9yIGFjY3VyYXRlIGZpbGluZy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db25maXJtYXRpb24gTGV0dGVyIChJZiBBdmFpbGFibGUpOjwvc3Ryb25nPiBJZiB5b3UndmUgcmVjZWl2ZWQgYW55IGNvbmZpcm1hdGlvbiBmcm9tIHRoZSBJUlMgb3IgeW91ciBlbXBsb3llcnMgcmVnYXJkaW5nIGV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgY29udHJpYnV0aW9ucywgcGxlYXNlIGluY2x1ZGUgdGhlc2UgY29tbXVuaWNhdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjb21wbGV0aW5nIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSBhbnkgcmVmdW5kIG9mIGV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgdGF4ZXMgcGFpZC4gUGxlYXNlIHNlbmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0IHRvIHVzLiBZb3VyIHByb21wdCBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIHRvIGZhY2lsaXRhdGUgYSBzbW9vdGggdGF4IGZpbGluZyBwcm9jZXNzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcmVtaXVtIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQcmVtaXVtIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSBvciBhIGZhbWlseSBtZW1iZXIgZW5yb2xsZWQgaW4gYSBoZWFsdGggaW5zdXJhbmNlIHBsYW4gdGhyb3VnaCB0aGUgTWFya2V0cGxhY2UgbGFzdCB5ZWFyLiBUaGlzIG1heSBtYWtlIHlvdSBlbGlnaWJsZSBmb3IgdGhlIFByZW1pdW0gVGF4IENyZWRpdCwgd2hpY2ggY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgc2F2aW5ncyBvbiB5b3VyIHRheCBiaWxsLjwvcD5cbiAgICA8cD5UbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIFByZW1pdW0gVGF4IENyZWRpdCBhbmQgZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb3JyZWN0bHkgZmlsZWQsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5NS1BLCBIZWFsdGggSW5zdXJhbmNlIE1hcmtldHBsYWNlIFN0YXRlbWVudDwvc3Ryb25nPjogVGhpcyBmb3JtIGlzIGNydWNpYWwgYXMgaXQgcHJvdmlkZXMgZGV0YWlscyBvZiB0aGUgaGVhbHRoIGNvdmVyYWdlLCBpbmNsdWRpbmcgdGhlIG1vbnRocyBvZiBjb3ZlcmFnZSBhbmQgdGhlIGFtb3VudCBvZiBwcmVtaXVtIHBhaWQuIElmIHlvdSBvciBhbnkgZmFtaWx5IG1lbWJlciB3YXMgZW5yb2xsZWQgaW4gZGlmZmVyZW50IHBsYW5zLCBwbGVhc2UgcHJvdmlkZSBhIEZvcm0gMTA5NS1BIGZvciBlYWNoIHBsYW4uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIEluZm9ybWF0aW9uPC9zdHJvbmc+OiBQbGVhc2UgcHJvdmlkZSBhbGwgc291cmNlcyBvZiBpbmNvbWUgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBob3VzZWhvbGQgaW5jb21lLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIFctMiBmb3JtcywgMTA5OSBmb3JtcywgYW5kIGFueSBvdGhlciBkb2N1bWVudGF0aW9uIGRlbW9uc3RyYXRpbmcgaW5jb21lIHJlY2VpdmVkIHRocm91Z2hvdXQgdGhlIHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmFtaWx5IFNpemUgYW5kIEhvdXNlaG9sZCBJbmZvcm1hdGlvbjwvc3Ryb25nPjogQ29uZmlybSB0aGUgbnVtYmVyIG9mIGRlcGVuZGVudHMgYW5kIGFueSBjaGFuZ2VzIGluIHlvdXIgaG91c2Vob2xkIGxhc3QgeWVhciwgYXMgdGhpcyBjb3VsZCBhZmZlY3QgeW91ciBlbGlnaWJpbGl0eSBhbmQgdGhlIGFtb3VudCBvZiB0aGUgY3JlZGl0LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFkdmFuY2VkIFByZW1pdW0gVGF4IENyZWRpdCAoQVBUQykgUmVwYXltZW50IEluZm9ybWF0aW9uPC9zdHJvbmc+LCBpZiBhcHBsaWNhYmxlOiBJZiB5b3UgcmVjZWl2ZWQgYW4gYWR2YW5jZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtIHRheCBjcmVkaXQsIHdlIG5lZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIHBheW1lbnRzIHRvIHJlY29uY2lsZSB0aGUgYW1vdW50IG9uIHlvdXIgcmV0dXJuLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBpcyBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3Qgb3VyIG9mZmljZS48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBzZXJ2aW5nIHlvdSBhbmQgZW5zdXJpbmcgeW91IHJlY2VpdmUgYWxsIHRoZSB0YXggYmVuZWZpdHMgeW91IGFyZSBlbnRpdGxlZCB0by48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTmV0IEludmVzdG1lbnQgSW5jb21lIFRheFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk5ldCBJbnZlc3RtZW50IEluY29tZSBUYXhcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciBvbmdvaW5nIGVmZm9ydHMgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IGZpbGluZ3MsIHdlIGhhdmUgaWRlbnRpZmllZCB0aGF0IHlvdXIgaW5jb21lIHRoaXMgeWVhciBpbmNsdWRlcyBzaWduaWZpY2FudCBhbW91bnRzIGZyb20gaW52ZXN0bWVudHMuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgTmV0IEludmVzdG1lbnQgSW5jb21lIFRheCwgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgZ2F0aGVyIGNvbXByZWhlbnNpdmUgZGV0YWlscyByZWdhcmRpbmcgeW91ciBpbnZlc3RtZW50IGluY29tZS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+SW50ZXJlc3QgSW5jb21lIFN0YXRlbWVudHM6PC9zdHJvbmc+IERvY3VtZW50cyBzdWNoIGFzIDEwOTktSU5UIG9yIHNpbWlsYXIgZm9ybXMgc2hvd2luZyBpbnRlcmVzdCBlYXJuZWQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EaXZpZGVuZCBJbmNvbWUgU3RhdGVtZW50czo8L3N0cm9uZz4gRG9jdW1lbnRzIHN1Y2ggYXMgMTA5OS1ESVYgb3Igc2ltaWxhciBmb3JtcyBkZXRhaWxpbmcgZGl2aWRlbmQgaW5jb21lIHJlY2VpdmVkLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+Q2FwaXRhbCBHYWlucyBSZWNvcmRzOjwvc3Ryb25nPiBTYWxlcyByZWNlaXB0cyBvciBicm9rZXIgc3RhdGVtZW50cyBzaG93aW5nIHByb2NlZWRzIGZyb20gdGhlIHNhbGUgb2YgYXNzZXRzLCBhbG9uZyB3aXRoIHB1cmNoYXNlIGRvY3VtZW50YXRpb24gdG8gY2FsY3VsYXRlIGdhaW5zIG9yIGxvc3Nlcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPlJlbnRhbCBhbmQgUm95YWx0eSBJbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiBpbmNvbWUgYW5kIGFzc29jaWF0ZWQgZXhwZW5zZXMgZnJvbSByZW50YWwgcHJvcGVydGllcyBvciByb3lhbHRpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Ob24tUXVhbGlmaWVkIEFubnVpdGllcyBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBZZWFyLWVuZCBzdGF0ZW1lbnRzIGZvciBhbnkgbm9uLXF1YWxpZmllZCBhbm51aXR5IGNvbnRyYWN0cyBzaG93aW5nIGRpc3RyaWJ1dGlvbnMgcmVjZWl2ZWQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Gb3JtIDg5NjA6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgYW55IHByaW9yIHllYXIgRm9ybSA4OTYwIHlvdSBoYXZlIGZpbGVkIGZvciBOZXQgSW52ZXN0bWVudCBJbmNvbWUgVGF4LCB3aGljaCBjYW4gcHJvdmlkZSBhIGJhc2lzIGZvciBlc3RpbWF0ZXMgYW5kIHBsYW5uaW5nLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5FbnN1cmluZyB3ZSBoYXZlIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gd2lsbCBub3Qgb25seSBzdHJlYW1saW5lIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MgYnV0IGFsc28gaGVscCBpbiBsZXZlcmFnaW5nIHBvdGVudGlhbCB0YXgtc2F2aW5nIG9wcG9ydHVuaXRpZXMgcmVsYXRlZCB0byBpbnZlc3RtZW50IGluY29tZS4gUGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGlmIHlvdSBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIGFueSBvZiB0aGUgYWJvdmUgaW5mb3JtYXRpb24uPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZGRpdGlvbmFsIE1lZGljYXJlIFRheFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFkZGl0aW9uYWwgTWVkaWNhcmUgVGF4XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91ciBpbmNvbWUgbWF5IGV4Y2VlZCB0aGUgSVJTIHRocmVzaG9sZHMgZm9yIHRoZSBBZGRpdGlvbmFsIE1lZGljYXJlIFRheCBmb3IgeW91ciBmaWxpbmcgc3RhdHVzLiBJbiBvcmRlciB0byBhY2N1cmF0ZWx5IGFzc2VzcyBhbmQgcmVwb3J0IHRoaXMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBmaWxpbmcgc3RhdHVzIGZvciB0aGUgdGF4IHllYXIgKE1hcnJpZWQgRmlsaW5nIEpvaW50bHksIE1hcnJpZWQgRmlsaW5nIFNlcGFyYXRlbHksIFNpbmdsZSwgSGVhZCBvZiBIb3VzZWhvbGQsIFF1YWxpZnlpbmcgU3Vydml2aW5nIFNwb3VzZSkuPC9saT5cbiAgICAgIDxsaT5EZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIGFsbCBzb3VyY2VzIG9mIGluY29tZSBmb3IgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvOlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlctMiBGb3JtcyBmcm9tIGFsbCBlbXBsb3llcnMuPC9saT5cbiAgICAgICAgICA8bGk+MTA5OSBGb3JtcyAoaWYgYXBwbGljYWJsZSksIGluY2x1ZGluZzpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgPGxpPjEwOTktTUlTQyBmb3IgaW5kZXBlbmRlbnQgY29udHJhY3RvcnMuPC9saT5cbiAgICAgICAgICAgICAgPGxpPjEwOTktSU5UIGZvciBpbnRlcmVzdCBlYXJuaW5ncy48L2xpPlxuICAgICAgICAgICAgICA8bGk+MTA5OS1ESVYgZm9yIGRpdmlkZW5kcy48L2xpPlxuICAgICAgICAgICAgICA8bGk+QW55IG90aGVyIDEwOTkgZm9ybXMgcmVjZWl2ZWQuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvZiBhbnkgb3RoZXIgaW5jb21lIChlLmcuLCBmb3JlaWduIGluY29tZSwgcmVudGFsIGluY29tZSkuPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+SW5mb3JtYXRpb24gb24gYW55IGRlZHVjdGlvbnMgb3IgZXhjbHVzaW9ucyB0byBpbmNvbWUgdGhhdCB5b3UgaW50ZW5kIHRvIGNsYWltIChlLmcuLCBJUkEgY29udHJpYnV0aW9ucywgc3R1ZGVudCBsb2FuIGludGVyZXN0KS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+V2UgYWxzbyByZW1pbmQgeW91IHRoYXQgaWYgeW91IGFuZC9vciB5b3VyIHNwb3VzZSBhcmUgc2VsZi1lbXBsb3llZCwgYWRkaXRpb25hbCBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMgd2lsbCBiZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIHlvdXIgbmV0IGVhcm5pbmdzIGFuZCBwb3RlbnRpYWwgQWRkaXRpb25hbCBNZWRpY2FyZSBUYXggb2JsaWdhdGlvbnMuPC9wPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMgYW5kIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgYW55IHBvdGVudGlhbCBBZGRpdGlvbmFsIE1lZGljYXJlIFRheCBsaWFiaWxpdGllcy4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOYW5ueSBUYXhcIixcbiAgICBhY3Rpb25UaXRsZTogXCJOYW5ueSBUYXhcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIGVtcGxveWluZyBob3VzZWhvbGQgaGVscCBzdWNoIGFzIGEgbmFubnksIGhvdXNla2VlcGVyLCBvciBnYXJkZW5lci4gVG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgc28tY2FsbGVkIFwiTmFubnkgVGF4XCIgcmVndWxhdGlvbnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkNvbXBsZXRlIG5hbWUsIGFkZHJlc3MsIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9mIHRoZSBlbXBsb3llZS48L2xpPlxuICAgICAgICA8bGk+VG90YWwgYW1vdW50IHBhaWQgdG8gdGhlIGVtcGxveWVlIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPkFueSBhbW91bnRzIHdpdGhoZWxkIGZyb20gdGhlIGVtcGxveWVlJ3MgcGF5IGZvciB0YXhlcywgaW5jbHVkaW5nIEZlZGVyYWwgSW5jb21lIFRheCwgU29jaWFsIFNlY3VyaXR5LCBhbmQgTWVkaWNhcmUgVGF4ZXMuPC9saT5cbiAgICAgICAgPGxpPkNvcGllcyBvZiBhbnkgZW1wbG95bWVudCBjb250cmFjdHMgb3IgYWdyZWVtZW50cy48L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgYW55IGVtcGxveWVyIGNvbnRyaWJ1dGlvbnMgdG8gU29jaWFsIFNlY3VyaXR5LCBNZWRpY2FyZSwgYW5kIHdpdGhoZWxkIGluY29tZSB0YXhlcyAoaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB0aGUgZW1wbG95bWVudCBzdGF0dXMgKGUuZy4sIFNjaGVkdWxlIEggZm9ybSkuPC9saT5cbiAgICAgICAgPGxpPkFueSBvdGhlciByZWxldmFudCB0YXggZG9jdW1lbnRzIG9yIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGVtcGxveW1lbnQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIHBvdGVudGlhbGx5IGF2b2lkaW5nIHBlbmFsdGllcyBmb3Igbm9uLWNvbXBsaWFuY2UuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2Ugb3IgY29udGFjdCB1cyBpZiB5b3UgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLjwvcD5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBoZWxwIHlvdSBuYXZpZ2F0ZSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBFYXJuZWQgSW5jb21lXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBFYXJuZWQgSW5jb21lXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBlYXJuZWQgaW5jb21lIGZyb20gZm9yZWlnbiBzb3VyY2VzIHRoaXMgcGFzdCB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBhbmQgcG90ZW50aWFsbHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIEZvcmVpZ24gRWFybmVkIEluY29tZSBFeGNsdXNpb24gb3IgY3JlZGl0LCB3ZSdsbCBuZWVkIHNwZWNpZmljIGRvY3VtZW50YXRpb24gYW5kIGluZm9ybWF0aW9uIGZyb20geW91LiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGZvcmVpZ24gZWFybmVkIGluY29tZS4gVGhpcyBpbmNsdWRlcyBhbnkgd2FnZXMsIHNhbGFyaWVzLCBvciBvdGhlciBjb21wZW5zYXRpb24gcmVjZWl2ZWQgZnJvbSBzZXJ2aWNlcyBwZXJmb3JtZWQgd2hpbGUgbGl2aW5nIGFicm9hZC48L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgeW91ciBmb3JlaWduIGVhcm5lZCBpbmNvbWUuIFRoaXMgY291bGQgYmUgaW4gdGhlIGZvcm0gb2YgcGF5IHN0dWJzLCBiYW5rIHN0YXRlbWVudHMgcmVmbGVjdGluZyBkaXJlY3QgZGVwb3NpdHMsIG9yIGVxdWl2YWxlbnQgZG9jdW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiB0aGUgY291bnRyeSBvciBjb3VudHJpZXMgaW4gd2hpY2ggeW91IGVhcm5lZCB0aGlzIGluY29tZS48L2xpPlxuICAgICAgICA8bGk+RGF0ZXMgb2YgeW91ciByZXNpZGVuY3kgaW4gZWFjaCBmb3JlaWduIGNvdW50cnkuPC9saT5cbiAgICAgICAgPGxpPkFueSB0YXggcmVzaWRlbmN5IGNlcnRpZmljYXRlcyBvciBzdGF0ZW1lbnRzIGZyb20gZm9yZWlnbiB0YXggYXV0aG9yaXRpZXMuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGZvcmVpZ24gdGF4IHBhaWQsIGluY2x1ZGluZyB0YXggcmV0dXJucyBmaWxlZCBpbiB0aGUgZm9yZWlnbiBjb3VudHJ5LCBpZiBhdmFpbGFibGUuPC9saT5cbiAgICAgICAgPGxpPlJlY29yZHMgb2YgeW91ciBVLlMuIGFuZCBmb3JlaWduIGFkZHJlc3NlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiBhbnkgdGF4IHRyZWF0aWVzIGJldHdlZW4gdGhlIFUuUy4gYW5kIHRoZSBjb3VudHJ5IG9yIGNvdW50cmllcyB5b3Ugd29ya2VkIGluLjwvbGk+XG4gICAgICAgIDxsaT5BIHNpZ25lZCBGb3JtIDI1NTUgb3IgMjU1NS1FWiwgaWYgeW91IGhhdmUgYWxyZWFkeSBwcmVwYXJlZCB0aGlzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGVzZSBkb2N1bWVudHMgYW5kIGRldGFpbHMgYXJlIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHRoZSBiZXN0IGFwcHJvYWNoIHRvIGhhbmRsZSB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxuICAgIDxwPlBsZWFzZSBoYXZlIHRoZXNlIG1hdGVyaWFscyByZWFkeSBhbmQgc2VuZCB0aGVtIHRvIHVzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gYW55IG9mIHRoZSBpdGVtcyByZXF1ZXN0ZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSB3aXRoIHlvdXIgdGF4ZXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZvcmVpZ24gSG91c2luZyBFeGNsdXNpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UndmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBpbmN1cnJpbmcgZWxpZ2libGUgZXhwZW5zZXMgZm9yIHRoZSBGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uIGR1ZSB0byBlYXJuaW5nIGluY29tZSBpbiBhIGZvcmVpZ24gY291bnRyeSBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGV4Y2x1c2lvbiBwb3NzaWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHlvdXIgY3VycmVudCBsZWFzZSBvciByZW50YWwgYWdyZWVtZW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlV0aWxpdHkgQmlsbHM6PC9zdHJvbmc+IENvcGllcyBvZiB1dGlsaXR5IGJpbGxzIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24gKGV4Y2x1ZGluZyB0ZWxlcGhvbmUgY2hhcmdlcykuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5zdXJhbmNlIERvY3VtZW50czo8L3N0cm9uZz4gRG9jdW1lbnRzIHByb3ZpbmcgcGF5bWVudCBvZiByZWFsIGVzdGF0ZSBvciByZW50YWwgaW5zdXJhbmNlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk90aGVyIEhvdXNpbmcgQ29zdHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gZm9yIGFueSBhZGRpdGlvbmFsIGVsaWdpYmxlIGhvdXNpbmcgY29zdHMgbm90IHByZXZpb3VzbHkgbWVudGlvbmVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZvcmVpZ24gSW5jb21lOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHZlcmlmeWluZyB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZSAoZS5nLiwgcGF5IHN0dWJzLCBiYW5rIHN0YXRlbWVudHMpLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkxvY2F0aW9uIGFuZCBEdXJhdGlvbjo8L3N0cm9uZz4gQSBicmllZiBzdGF0ZW1lbnQgZGV0YWlsaW5nIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGZvcmVpZ24gcmVzaWRlbmNlIGFuZCB0aGUgZHVyYXRpb24gb2YgeW91ciBzdGF5IGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhcmx5IGxlZ2libGUgYW5kIGluIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgZWxlY3Ryb25pY2FsbHkuIFRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoZXNlIGRvY3VtZW50cyBhcmUgZXNzZW50aWFsIGZvciBhIGNvcnJlY3QgYW5kIG9wdGltaXplZCBmaWxpbmcgb2YgeW91ciB0YXggcmV0dXJuLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIEZvcmVpZ24gSG91c2luZyBFeGNsdXNpb24uPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiBhbnkgb2YgdGhlIHJlcXVpcmVkIGRvY3VtZW50cywgcGxlYXNlIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGF0IHlvdXIgY29udmVuaWVuY2UuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEhvdXNpbmcgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBIb3VzaW5nIERlZHVjdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gdGhlIHF1ZXN0aW9uIGNvbmNlcm5pbmcgcG90ZW50aWFsIGVsaWdpYmlsaXR5IGZvciB0aGUgPHN0cm9uZz5Gb3JlaWduIEhvdXNpbmcgRGVkdWN0aW9uPC9zdHJvbmc+LiBUaGlzIGRlZHVjdGlvbiBpcyBkZXNpZ25lZCB0byBoZWxwIG1pdGlnYXRlIHRoZSBoaWdoZXIgY29zdCBvZiBsaXZpbmcgYWJyb2FkIGJ5IGFsbG93aW5nIGNlcnRhaW4gaG91c2luZyBleHBlbnNlcyB0byBiZSBkZWR1Y3RlZCBmb3IgdGF4IHB1cnBvc2VzLjwvcD5cbiAgICA8cD5UbyBwcm9jZWVkIHdpdGggeW91ciB0YXggZmlsaW5nIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIG1heGltdW0gYWxsb3dhYmxlIGRlZHVjdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzIHJlbGF0ZWQgdG8geW91ciBob3VzaW5nIGV4cGVuc2VzIGluY3VycmVkIHdoaWxlIHdvcmtpbmcgYWJyb2FkOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudC9MZWFzZTo8L3N0cm9uZz4gQSBjb3B5IG9mIHlvdXIgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZSB0aGF0IHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIHJlbnQgcGFpZCBhbmQgdGhlIHBlcmlvZCBvZiBvY2N1cGFuY3kuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5VdGlsaXR5IEJpbGxzOjwvc3Ryb25nPiBDb3BpZXMgb2YgdXRpbGl0eSBiaWxscyBmb3IgdGhlIHBlcmlvZCB5b3UgYXJlIGNsYWltaW5nIHRoZSBkZWR1Y3Rpb24uIFRoaXMgaW5jbHVkZXMgZWxlY3RyaWNpdHksIHdhdGVyLCBhbmQgZ2FzLCBidXQgZXhjbHVkZXMgdGVsZXBob25lIGNoYXJnZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5SZWFsIEVzdGF0ZSBJbnN1cmFuY2U6PC9zdHJvbmc+IERvY3VtZW50IHByb29mIG9mIGFueSByZWFsIGVzdGF0ZSBpbnN1cmFuY2UgcHJlbWl1bXMgcGFpZCBmb3IgeW91ciBmb3JlaWduIGhvdXNpbmcuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5PdGhlciBFbGlnaWJsZSBFeHBlbnNlczo8L3N0cm9uZz4gUmVjZWlwdHMgb3IgaW52b2ljZXMgZm9yIGFueSBhZGRpdGlvbmFsIGVsaWdpYmxlIGxpdmluZyBleHBlbnNlcyBub3QgY292ZXJlZCBhYm92ZS4gUGxlYXNlIG5vdGUsIHRvIHF1YWxpZnksIHRoZXNlIGV4cGVuc2VzIG11c3QgYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIGZvcmVpZ24gaG91c2luZyBhbmQgbm90IGNvdmVyZWQgdW5kZXIgdGhlIGJhc2UgYW1vdW50IGV4ZW1wdGlvbi48L2xpPlxuICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gRWFybmVkIEluY29tZTo8L3N0cm9uZz4gVmVyaWZpY2F0aW9uIG9mIHlvdXIgZWFybmVkIGluY29tZSB3aGlsZSB3b3JraW5nIGFicm9hZCwgYXMgdGhlIGRlZHVjdGlvbiBpcyB0aWVkIHRvIGNlcnRhaW4gaW5jb21lIGxpbWl0YXRpb25zLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5XZSB1bmRlcnN0YW5kIHRoaXMgbWF5IGludm9sdmUgZ2F0aGVyaW5nIHNldmVyYWwgZG9jdW1lbnRzLCBidXQgZW5zdXJpbmcgd2UgaGF2ZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgbWF4aW1pemluZyB5b3VyIHBvdGVudGlhbCBkZWR1Y3Rpb25zIGFuZCByZW1haW5pbmcgY29tcGxpYW50IHdpdGggdGF4IHJlZ3VsYXRpb25zLjwvcD5cbiAgICA8cD5QbGVhc2Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIG9yIGNvbnRhY3QgdXMgdG8gZGlzY3VzcyBhbnkgY2hhbGxlbmdlcyB5b3UgbWF5IGZhY2UgaW4gb2J0YWluaW5nIHRoZW0uIE91ciB0ZWFtIGlzIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIGNsYWltaW5nIHlvdXIgRm9yZWlnbiBUYXggQ3JlZGl0LCBhcyBpbmRpY2F0ZWQgYnkgeW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91IHBhaWQgdGF4ZXMgdG8gYSBmb3JlaWduIGNvdW50cnkgb24gZWFybmVkIGluY29tZSB0aGVyZS4gVG8gcHJvcGVybHkgY2FsY3VsYXRlIGFuZCBhcHBseSB0aGlzIGNyZWRpdCB0byB5b3VyIFUuUy4gdGF4IHJldHVybiwgd2Ugd2lsbCBuZWVkIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5FYXJuZWQgSW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFueSBkb2N1bWVudHMgdGhhdCB2ZXJpZnkgdGhlIGFtb3VudCBvZiBpbmNvbWUgZWFybmVkIGluIHRoZSBmb3JlaWduIGNvdW50cnkuIFRoaXMgbWF5IGluY2x1ZGUsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcGF5IHN0dWJzLCBXLTIgZm9ybXMgZnJvbSBmb3JlaWduIGVtcGxveWVycywgb3IgYW55IG9mZmljaWFsIGluY29tZSBzdGF0ZW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFRheCBQYWlkOjwvc3Ryb25nPiBUbyBjbGFpbSB0aGUgRm9yZWlnbiBUYXggQ3JlZGl0LCBkb2N1bWVudGF0aW9uIHNob3dpbmcgdGhlIGFtb3VudCBvZiB0YXggcGFpZCB0byB0aGUgZm9yZWlnbiBnb3Zlcm5tZW50IGlzIHJlcXVpcmVkLiBBY2NlcHRhYmxlIGZvcm1zIG9mIGV2aWRlbmNlIGluY2x1ZGUgZm9yZWlnbiB0YXggcmV0dXJuKHMpLCB3aXRoaG9sZGluZyBzdGF0ZW1lbnRzLCBvciBhbnkgb2ZmaWNpYWwgdGF4IHJlY2VpcHRzIHByb3ZpZGVkIGJ5IHRoZSBmb3JlaWduIHRheCBhdXRob3JpdHkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyOjwvc3Ryb25nPiBZb3VyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgb3IgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyLCBmb3IgYWNjdXJhdGUgcHJvY2Vzc2luZyBvZiB0aGUgdGF4IGNyZWRpdC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBGb3JlaWduIFRheDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHR5cGUgb2YgdGF4IHBhaWQgdG8gdGhlIGZvcmVpZ24gY291bnRyeSAoaW5jb21lIHRheCwgc2FsZXMgdGF4LCBldGMuKSwgaW5jbHVkaW5nIHdoZXRoZXIgaXQgd2FzIGEgZmVkZXJhbCwgc3RhdGUvcHJvdmluY2lhbCwgb3IgbG9jYWwgdGF4LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jeSAoSWYgQXBwbGljYWJsZSk6PC9zdHJvbmc+IElmIHlvdXIgY2xhaW0gZGVwZW5kcyBvbiByZXNpZGVuY3kgc3RhdHVzIGluIHRoZSBmb3JlaWduIGNvdW50cnksIHBsZWFzZSBwcm92aWRlIHByb29mIG9mIHJlc2lkZW5jeSBmb3IgdGhlIHJlbGV2YW50IHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gQWRkcmVzcyAoSWYgQXBwbGljYWJsZSk6PC9zdHJvbmc+IElmIHlvdSBtYWludGFpbmVkIGEgcmVzaWRlbmNlIG91dHNpZGUgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgZHVyaW5nIHRoZSB0YXggeWVhciwgcGxlYXNlIHByb3ZpZGUgdGhlIGFkZHJlc3MuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybnMgYXJlIGFzIGJlbmVmaWNpYWwgdG8geW91ciBzaXR1YXRpb24gYXMgYWxsb3dlZCBieSBsYXcgYW5kIGZvciBwcmV2ZW50aW5nIGFueSB1bm5lY2Vzc2FyeSBkZWxheXMuPC9wPlxuICAgIDxwPlBsZWFzZSB1cGxvYWQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiB0byBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgZW1haWwgaXQgdG8gdXMgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUcmFkaXRpb25hbCBJUkEgQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiVHJhZGl0aW9uYWwgSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIG5vdGVkIHlvdXIgaW5kaWNhdGlvbiBvZiBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgYmVuZWZpY2lhbCB0YXggZmlsaW5nLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhYm91dCB5b3VyIFRyYWRpdGlvbmFsIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9ucyB5b3UgbWF5IGhhdmUgdGFrZW46PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IGNvbnRyaWJ1dGVkIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMgdG8gYWNjdXJhdGVseSByZXBvcnQgd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyBmcm9tIHlvdXIgSVJBIGN1c3RvZGlhbiBzcGVjaWZ5aW5nIHRoZSBjb250cmlidXRpb25zIG1hZGUuPC9saT5cbiAgICAgIDxsaT5BbnkgZGlzdHJpYnV0aW9ucyB0YWtlbiBmcm9tIHlvdXIgVHJhZGl0aW9uYWwgSVJBIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZzpcbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5BbW91bnQgb2YgZWFjaCBkaXN0cmlidXRpb24uPC9saT5cbiAgICAgICAgICA8bGk+RGF0ZXMgb2YgZWFjaCBkaXN0cmlidXRpb24uPC9saT5cbiAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIGZvciB0aGVzZSBkaXN0cmlidXRpb25zLjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPllvdXIgeWVhci1lbmQgSVJBIHN0YXRlbWVudCBmb3IgdGhlIHRheCB5ZWFyIGluIHF1ZXN0aW9uLjwvbGk+XG4gICAgICA8bGk+QW55IG5vdGljZXMgcmVjZWl2ZWQgcmVnYXJkaW5nIG5vbi1kZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbnMsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHlvdXIgdGF4IGxpYWJpbGl0aWVzIG9yIGJlbmVmaXRzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIElSQSBjb250cmlidXRpb25zLCBhbmQgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IGZpbGluZy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48cD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJvdGggSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlJvdGggSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciBjb250cmlidXRpb25zIHRvIGEgUm90aCBJUkEgZHVyaW5nIHRoZSBsYXN0IHRheCB5ZWFyIGFzIHBhcnQgb2Ygb3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSBjYXB0dXJlIGFsbCByZWxldmFudCB0YXggaW5mb3JtYXRpb24gYW5kIHBvdGVudGlhbGx5IG9wdGltaXplIHlvdXIgdGF4IHNpdHVhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBzcGVjaWZpY3MgYWJvdXQgeW91ciBSb3RoIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9uczo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFJvdGggSVJBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgIDxsaT5UaGUgZGF0ZXMgb24gd2hpY2ggdGhlc2UgY29udHJpYnV0aW9ucyB3ZXJlIG1hZGUuPC9saT5cbiAgICAgIDxsaT5PZmZpY2lhbCBzdGF0ZW1lbnRzIG9yIGRvY3VtZW50YXRpb24gZnJvbSB5b3VyIElSQSBjdXN0b2RpYW4gdGhhdCBkZXRhaWwgdGhlc2UgY29udHJpYnV0aW9ucy48L2xpPlxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSBkaXN0cmlidXRpb25zLCBzaG91bGQgdGhleSBhcHBseSwgaW5jbHVkaW5nOlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZWFjaCBkaXN0cmlidXRpb24gdGFrZW4gZnJvbSB0aGUgUm90aCBJUkEuPC9saT5cbiAgICAgICAgICA8bGk+VGhlIGRhdGVzIG9mIHRoZXNlIGRpc3RyaWJ1dGlvbnMuPC9saT5cbiAgICAgICAgICA8bGk+RGlzdHJpYnV0aW9uIHN0YXRlbWVudHMgb3IgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBmcm9tIHlvdXIgSVJBIGN1c3RvZGlhbi48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT5Zb3VyIHllYXItZW5kIGFjY291bnQgc3RhdGVtZW50IGZvciB0aGUgUm90aCBJUkEgZm9yIHRoZSB0YXggeWVhciBpbiBxdWVzdGlvbi48L2xpPlxuICAgICAgPGxpPkFueSBwZXJ0aW5lbnQgaW5mb3JtYXRpb24gb3Igbm90aWNlcyByZWdhcmRpbmcgeW91ciBSb3RoIElSQSBjb250cmlidXRpb25zIG9yIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZyB0YXggcmVwb3J0aW5nIGZvcm1zIGxpa2UgRm9ybSA1NDk4IG9yIEZvcm0gMTA5OS1SLCBpZiByZWNlaXZlZC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+R2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGEgY29tcHJlaGVuc2l2ZSBhbmFseXNpcyBvZiB5b3VyIHRheCBzaXR1YXRpb24sIGVuc3VyaW5nIHRoZSBjb3JyZWN0IHRyZWF0bWVudCBvZiB5b3VyIFJvdGggSVJBIGNvbnRyaWJ1dGlvbnMgYW5kIGFueSBkaXN0cmlidXRpb25zLCBhbmQgY29tcGx5aW5nIHdpdGggSVJTIHJlZ3VsYXRpb25zLjwvcD5cbiAgICA8cD5QbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50YXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVyaWVzIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBvYnRhaW5pbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEFzc2V0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkZvcmVpZ24gQXNzZXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UncmUgbWFraW5nIHByb2dyZXNzIG9uIHlvdXIgdGF4IHJldHVybiwgYW5kIGJhc2VkIG9uIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyBvd25lcnNoaXAgb3IgZmluYW5jaWFsIGludGVyZXN0IGluIGZvcmVpZ24gYXNzZXRzLCBhZGRpdGlvbmFsIGRldGFpbHMgYXJlIG5lY2Vzc2FyeS4gVGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBjb21wbGlhbmNlIHdpdGggdGhlIEZvcmVpZ24gQWNjb3VudCBUYXggQ29tcGxpYW5jZSBBY3QgKEZBVENBKSBhbmQgUmVwb3J0IG9mIEZvcmVpZ24gQmFuayBhbmQgRmluYW5jaWFsIEFjY291bnRzIChGQkFSKSByZXF1aXJlbWVudHMuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgYWxsIHN0YXRlbWVudHMgZnJvbSBmb3JlaWduIGJhbmtzLCBtdXR1YWwgZnVuZHMsIG9yIHNlY3VyaXRpZXMgYWNjb3VudHMuIFRoaXMgaW5jbHVkZXMgYW55dGhpbmcgd2l0aCBhbiBhZ2dyZWdhdGUgdmFsdWUgb3ZlciAkMTAsMDAwIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgTnVtYmVyczo8L3N0cm9uZz4gVGhlIGFjY291bnQgbnVtYmVycyBmb3IgYWxsIGFwcGxpY2FibGUgYWNjb3VudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5zdGl0dXRpb24gTmFtZXM6PC9zdHJvbmc+IFRoZSBuYW1lcyBhbmQgYWRkcmVzc2VzIG9mIHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb25zIHdoZXJlIHRoZXNlIGFjY291bnRzIGFyZSBoZWxkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk1heGltdW0gVmFsdWVzOjwvc3Ryb25nPiBUaGUgbWF4aW11bSB2YWx1ZSBvZiBlYWNoIGFjY291bnQgZHVyaW5nIHRoZSB0YXggeWVhciwgY29udmVydGVkIHRvIFVTRCB1c2luZyB0aGUgZW5kLW9mLXllYXIgZXhjaGFuZ2UgcmF0ZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Pd25lcnNoaXAgRGV0YWlsczo8L3N0cm9uZz4gQ2xhcmlmaWNhdGlvbiBvbiB0aGUgdHlwZSBvZiBvd25lcnNoaXAgKGluZGl2aWR1YWwsIGpvaW50LCBldGMuKSBhbmQgdGhlIHBlcmNlbnRhZ2Ugb2Ygb3duZXJzaGlwIGlmIG5vdCBzb2xlbHkgb3duZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29udGFjdCBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgbWFuYWdlZCBieSBhIGZpbmFuY2lhbCBhZHZpc29yIG9yIGluc3RpdHV0aW9uLCBwcm92aWRlIHRoZWlyIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIEdlbmVyYXRlZDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gYW55IGluY29tZSBnZW5lcmF0ZWQgZnJvbSB0aGVzZSBhc3NldHMsIHN1Y2ggYXMgaW50ZXJlc3QsIGRpdmlkZW5kcywgb3IgY2FwaXRhbCBnYWlucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBpbXBlcmF0aXZlIHRvIGVuc3VyZSBmdWxsIGNvbXBsaWFuY2UgYW5kIG1pdGlnYXRlIGFueSByaXNrcyBvZiBwZW5hbHRpZXMuIEtpbmRseSBzZW5kIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBhbGxvdyBhbXBsZSB0aW1lIGZvciBwcm9wZXIgZmlsaW5nLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEdpZnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBHaWZ0c1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGdpZnRzIG9yIGJlcXVlc3RzIGZyb20gZm9yZWlnbiBlbnRpdGllcyB0aGF0IGV4Y2VlZCB0aGUgJDEwMCwwMDAgdGhyZXNob2xkIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPkNvbXBsZXRlIGxpc3Qgb2YgZm9yZWlnbiBnaWZ0cyBvciBiZXF1ZXN0cyByZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgZGV0YWlscyBmb3IgZWFjaCBnaWZ0IG9yIGJlcXVlc3QsIGluY2x1ZGluZyB0aGUgZGF0ZSByZWNlaXZlZCBhbmQgdGhlIGV4YWN0IGFtb3VudCBpbiBVU0QgKFUuUy4gRG9sbGFycykuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRvbm9yIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBGb3IgZWFjaCBnaWZ0IHJlY2VpdmVkLCBwcm92aWRlIHRoZSBkb25vcidzIGZ1bGwgbmFtZSwgYWRkcmVzcywgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlNvdXJjZSBvZiBHaWZ0Ojwvc3Ryb25nPiBEZXRhaWwgdGhlIHNvdXJjZSBvZiBlYWNoIGdpZnQsIGluY2x1ZGluZyB3aGV0aGVyIGl0IG9yaWdpbmF0ZWQgZnJvbSBhbiBpbmRpdmlkdWFsLCBlc3RhdGUsIGZvcmVpZ24gY29ycG9yYXRpb24sIG9yIHBhcnRuZXJzaGlwLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Gb3JlaWduIENvdW50cnkgSW5mb3JtYXRpb246PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGNvdW50cnkgZnJvbSB3aGljaCBlYWNoIGdpZnQgb3IgYmVxdWVzdCB3YXMgcmVjZWl2ZWQuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+IEF0dGFjaCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIGJhbmsgc3RhdGVtZW50cywgZm9yZWlnbiBnaWZ0IGRlY2xhcmF0aW9uIGZvcm1zLCBvciBsZWdhbCBkb2N1bWVudHMgcmVsYXRlZCB0byB0aGUgcmVjZWlwdCBvZiB0aGVzZSBnaWZ0cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIHRvIGZ1bGZpbGwgb3VyIG9ibGlnYXRpb25zIGFuZCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHlvdXIgdGF4IGZpbGluZ3MuIEZhaWx1cmUgdG8gcmVwb3J0IGZvcmVpZ24gZ2lmdHMgb3IgYmVxdWVzdHMgYWNjdXJhdGVseSBjYW4gcmVzdWx0IGluIHBlbmFsdGllcy4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZXByZWNpYWJsZSBBc3NldHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJEZXByZWNpYWJsZSBBc3NldHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyB3ZSBiZWdpbiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuLCB3ZSBuZWVkIHlvdXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBkZXByZWNpYWJsZSBhc3NldHMuIFRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIGRlcHJlY2lhdGlvbiBleHBlbnNlIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLjwvcD5cblxuICAgIDxoMj5BY3Rpb24gSXRlbTo8L2gyPlxuICAgIDxwPlBsZWFzZSBhY2Nlc3MgeW91ciA8c3Ryb25nPnNlY3VyZSBjbGllbnQgdXBsb2FkIHBvcnRhbDwvc3Ryb25nPiBhbmQgbmF2aWdhdGUgdG8gdGhlIGZvbGxvd2luZyBwYXRoOiA8Y29kZT50YXhlcy9bQ1VSUkVOVCBUQVggWUVBUl0vRGVwcmVjaWF0aW9uL0Fzc2V0cy54bHN4PC9jb2RlPi4gWW91IHdpbGwgZmluZCBhIHNwcmVhZHNoZWV0IHRpdGxlZCBcIjxzdHJvbmc+RGVwcmVjaWFibGUgQXNzZXRzPC9zdHJvbmc+LlwiIFdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkZXByZWNpYWJsZSBhc3NldCBpbiB5b3VyIGJ1c2luZXNzOjwvcD5cbiAgICA8dWw+XG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uOjwvc3Ryb25nPiBQcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gdGhhdCBjbGVhcmx5IGlkZW50aWZpZXMgdGhlIGFzc2V0LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgQWNxdWlyZWQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUgeW91IHB1cmNoYXNlZCBvciBhY3F1aXJlZCB0aGUgYXNzZXQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCAvIEJhc2lzOjwvc3Ryb25nPiBJbmRpY2F0ZSB0aGUgb3JpZ2luYWwgY29zdCBvZiB0aGUgYXNzZXQgb3IgdGhlIGFkanVzdGVkIGJhc2lzIGlmIGRlcHJlY2lhdGlvbiBoYXMgYmVlbiBjbGFpbWVkIGluIHByZXZpb3VzIHllYXJzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkJ1c2luZXNzICUgVXNlOjwvc3Ryb25nPiBFc3RpbWF0ZSB0aGUgcGVyY2VudGFnZSBvZiB0aW1lIHRoZSBhc3NldCBpcyB1c2VkIGZvciBidXNpbmVzcyBwdXJwb3NlcyB2ZXJzdXMgcGVyc29uYWwgdXNlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlVzZWQgUHJvcGVydHk6PC9zdHJvbmc+IEluZGljYXRlIHdoZXRoZXIgdGhlIGFzc2V0IHdhcyBwdXJjaGFzZWQgbmV3IG9yIHVzZWQuPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPGgzPkltcG9ydGFudCBOb3RlIG9uIFNhZmUtSGFyYm9yIEV4cGVuc2luZzo8L2gzPlxuICAgIDxwPlBsZWFzZSBiZSBhd2FyZSB0aGF0IHVuZGVyIHRoZSBzYWZlLWhhcmJvciA8ZW0+ZGUgbWluaW1pczwvZW0+IGV4cGVuc2luZyBydWxlLCB5b3UgY2FuIGltbWVkaWF0ZWx5IGV4cGVuc2UgdGhlIGNvc3Qgb2YgYW55IGluZGl2aWR1YWwgYXNzZXQgdGhhdCBjb3N0cyBsZXNzIHRoYW4gJDIsNTAwLCBwcm92aWRlZCB5b3UgZG8gbm90IGhhdmUgYW4gQXBwbGljYWJsZSBGaW5hbmNpYWwgU3RhdGVtZW50IChBRlMpLiBJZiBhbiBhc3NldCBtZWV0cyB0aGlzIGNyaXRlcmlvbiwgeW91IGRvIG5vdCBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIHNwcmVhZHNoZWV0LjwvcD5cblxuICAgIDxwPldlIGVuY291cmFnZSB5b3UgdG8gYmUgYXMgY29tcHJlaGVuc2l2ZSBhcyBwb3NzaWJsZSB3aGVuIGxpc3RpbmcgeW91ciBhc3NldHMuIElmIHlvdSBhcmUgdW5zdXJlIHdoZXRoZXIgYW4gaXRlbSBzaG91bGQgYmUgaW5jbHVkZWQsIHBsZWFzZSBwcm92aWRlIHRoZSBkZXRhaWxzLCBhbmQgd2Ugd2lsbCBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHRyZWF0bWVudC48L3A+XG5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIDxzdHJvbmc+Y29udGFjdCB1czwvc3Ryb25nPi4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGxvb2sgZm9yd2FyZCB0byB3b3JraW5nIHdpdGggeW91IHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlBhc3NpdmUgQnVzaW5lc3MgQWN0aXZpdGllc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlBhc3NpdmUgQnVzaW5lc3MgQWN0aXZpdGllc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIG9yZGVyIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFzc2l2ZSBhY3Rpdml0aWVzIHlvdXIgYnVzaW5lc3MgaXMgZW5nYWdlZCBpbi4gUGFzc2l2ZSBhY3Rpdml0aWVzIGdlbmVyYWxseSBpbnZvbHZlIGJ1c2luZXNzIG9yIHRyYWRlIGFjdGl2aXRpZXMgaW4gd2hpY2ggeW91IGRvIG5vdCBtYXRlcmlhbGx5IHBhcnRpY2lwYXRlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGFjdGl2aXRpZXMgaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIHRheCByZXBvcnRpbmcgYW5kIHBvdGVudGlhbCB0YXggYmVuZWZpdHMuPC9wPlxuXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpZiB5b3UgYmVsaWV2ZSB3ZSBkbyBub3QgYWxyZWFkeSBoYXZlIHRoZSBpbmZvcm1hdGlvbiBpbiB5b3VyIGJ1c2luZXNzIGZpbmFuY2lhbHM6PC9wPlxuICAgIFxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPk5hbWVzIGFuZCBEZXNjcmlwdGlvbnM6PC9zdHJvbmc+IEEgbGlzdCBhbmQgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBwYXNzaXZlIGFjdGl2aXR5IHlvdXIgYnVzaW5lc3MgaXMgZW5nYWdlZCBpbi48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIFN0YXRlbWVudHM6PC9zdHJvbmc+SWYgbm90IGFscmVhZHkgaW4geW91ciBidXNpbmVzcyBmaW5hbmNpYWxzLCBQcm9maXQgYW5kIGxvc3Mgc3RhdGVtZW50cyBmb3IgZWFjaCBwYXNzaXZlIGFjdGl2aXR5LCBkZXRhaWxpbmcgaW5jb21lIGFuZCBleHBlbnNlcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+T3duZXJzaGlwIFN0cnVjdHVyZTo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvdXRsaW5pbmcgeW91ciBvd25lcnNoaXAgaW50ZXJlc3QgaW4gZWFjaCBhY3Rpdml0eSwgaW5jbHVkaW5nIGFueSBqb2ludCB2ZW50dXJlcyBvciBwYXJ0bmVyc2hpcHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBQcm9wZXJ0aWVzIChpZiBhcHBsaWNhYmxlKTo8L3N0cm9uZz4gSWYgYW55IHBhc3NpdmUgYWN0aXZpdGllcyBpbmNsdWRlIHJlbnRhbCBwcm9wZXJ0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzc2VzLCBsZWFzZSBhZ3JlZW1lbnRzLCBhbmQgYSBzY2hlZHVsZSBvZiByZW50cyBjb2xsZWN0ZWQgYW5kIGV4cGVuc2VzIGluY3VycmVkLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Mb2cgb2YgUGVyc29uYWwgSW52b2x2ZW1lbnQ6PC9zdHJvbmc+IEZvciBlYWNoIGFjdGl2aXR5LCBhIGxvZyBvciByZWNvcmQgb2YgeW91ciBwZXJzb25hbCBpbnZvbHZlbWVudCBvciBwYXJ0aWNpcGF0aW9uIG92ZXIgdGhlIHRheCB5ZWFyLCB0byBzdWJzdGFudGlhdGUgdGhlIGV4dGVudCBvZiB5b3VyIG1hdGVyaWFsIHBhcnRpY2lwYXRpb24uPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlByaW9yIFllYXIgTG9zc2VzOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBvbiBhbnkgbG9zc2VzIGZyb20gdGhlc2UgYWN0aXZpdGllcyBjYXJyaWVkIG92ZXIgZnJvbSBwcmV2aW91cyB0YXggeWVhcnMuPC9saT5cbiAgICA8L29sPlxuICAgIFxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgcGl2b3RhbCBmb3IgYXNzZXNzaW5nIHlvdXIgcGFzc2l2ZSBhY3Rpdml0eSBsb3NzZXMgYW5kIGNvcnJlY3RseSBhcHBseWluZyB0aGVtIGFnYWluc3QgeW91ciBwYXNzaXZlIGFjdGl2aXR5IGluY29tZSwgaW4gbGluZSB3aXRoIHRoZSBJUlMgcGFzc2l2ZSBhY3Rpdml0eSBsb3NzIHJ1bGVzLjwvcD5cbiAgICBcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgZXhwbG9yaW5nIG9wcG9ydHVuaXRpZXMgdG8gb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMgdGhyb3VnaCB2YXJpb3VzIGdlbmVyYWwgYnVzaW5lc3MgY3JlZGl0cy4gVGhlc2UgY3JlZGl0cyBhcmUgZGVzaWduZWQgdG8gZW5jb3VyYWdlIGNlcnRhaW4gYnVzaW5lc3MgYWN0aXZpdGllcyB0aGF0IG1lZXQgdGhlIGdvYWxzIGFuZCBwb2xpY2llcyBlc3RhYmxpc2hlZCBieSB0aGUgZ292ZXJubWVudCwgcmFuZ2luZyBmcm9tIGludmVzdG1lbnQgaW4gcHJvcGVydHkgdG8gZm9zdGVyaW5nIHNvY2lhbCByZXNwb25zaWJpbGl0aWVzIGxpa2UgZW1wbG95bWVudCBvcHBvcnR1bml0aWVzIGZvciB2ZXRlcmFucy4gVW5kZXJzdGFuZGluZyB3aGV0aGVyIHlvdXIgYnVzaW5lc3MgaXMgZWxpZ2libGUgZm9yIHRoZXNlIGNhbiBzaWduaWZpY2FudGx5IGltcGFjdCB5b3VyIGZpbmFuY2lhbHMgZmF2b3JhYmx5LjwvcD5cblxuICAgIDxwPkJlbG93IGlzIGEgYnJpZWYgZXhwbGFuYXRpb24gb2Ygc29tZSBvZiB0aGUgbW9zdCBjb21tb24gR2VuZXJhbCBCdXNpbmVzcyBDcmVkaXRzIGFuZCBvdGhlcnMgdGhhdCBtaWdodCBhcHBseSB0byB5b3VyIHNpdHVhdGlvbjo8L3A+XG4gICAgXG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBDcmVkaXQgKEZvcm0gMzQ2OCk6PC9zdHJvbmc+IEZvciBpbnZlc3RpbmcgaW4gY2VydGFpbiBwcm9wZXJ0eSBsaWtlIGJ1aWxkaW5ncywgZXF1aXBtZW50LCBvciBvdGhlciB0YW5naWJsZSBwcm9wZXJ0eS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+V29yayBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IChGb3JtIDU4ODQpOjwvc3Ryb25nPiBGb3IgaGlyaW5nIGluZGl2aWR1YWxzIGZyb20gY2VydGFpbiB0YXJnZXQgZ3JvdXBzIHdobyBoYXZlIGNvbnNpc3RlbnRseSBmYWNlZCBzaWduaWZpY2FudCBiYXJyaWVycyB0byBlbXBsb3ltZW50LjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5EaXNhYmxlZCBBY2Nlc3MgQ3JlZGl0Ojwvc3Ryb25nPiBJZiB5b3VyIGJ1c2luZXNzIGluY3VycmVkIGV4cGVuc2VzIGZvciBtYWtpbmcgaXQgbW9yZSBhY2Nlc3NpYmxlIHRvIGluZGl2aWR1YWxzIHdpdGggZGlzYWJpbGl0aWVzLCBjb21wbHlpbmcgd2l0aCB0aGUgQW1lcmljYW5zIHdpdGggRGlzYWJpbGl0aWVzIEFjdCAoQURBKS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+Q3JlZGl0IGZvciBFbXBsb3llciBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIFRheGVzIG9uIEVtcGxveWVlIFRpcHMgKEZvcm0gODg0Nik6PC9zdHJvbmc+IElmIHlvdSBoYXZlIGVtcGxveWVlcyB3aG8gcmVjZWl2ZSB0aXBzLCB0aGlzIGNyZWRpdCByZWxhdGVzIHRvIHRoZSBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRheGVzIHlvdSBwYXkgb24gdGhvc2UgdGlwcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgQ3JlZGl0IGZvciBQYWlkIEZhbWlseSBhbmQgTWVkaWNhbCBMZWF2ZSAoRk1MQSBMZWF2ZSkgKEZvcm0gODk5NCk6PC9zdHJvbmc+IEZvciBidXNpbmVzc2VzIHByb3ZpZGluZyBwYWlkIGZhbWlseSBhbmQgbWVkaWNhbCBsZWF2ZSB0byB0aGVpciBlbXBsb3llZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgU21hbGwgRW1wbG95ZXIgSGVhbHRoIEluc3VyYW5jZSBQcmVtaXVtcyAoRm9ybSA4OTQxKTo8L3N0cm9uZz4gSWYgeW91IHByb3ZpZGUgaGVhbHRoIGluc3VyYW5jZSB0byB5b3VyIGVtcGxveWVlcywgeW91IG1pZ2h0IGJlIGVsaWdpYmxlIGZvciB0aGlzIGNyZWRpdC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UmVzZWFyY2ggYW5kIERldmVsb3BtZW50IENyZWRpdCAoRm9ybSA2NzY1KTo8L3N0cm9uZz4gRm9yIGJ1c2luZXNzZXMgZW5nYWdpbmcgaW4gcXVhbGlmaWVkIHJlc2VhcmNoIGFjdGl2aXRpZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgRW1wbG95ZXItUHJvdmlkZWQgQ2hpbGQgQ2FyZSBGYWNpbGl0aWVzIGFuZCBTZXJ2aWNlczo8L3N0cm9uZz4gSWYgeW91ciBidXNpbmVzcyBwcm92aWRlcyBjaGlsZCBjYXJlIGZhY2lsaXRpZXMgb3Igc2VydmljZXMgdG8geW91ciBlbXBsb3llZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgU21hbGwgRW1wbG95ZXIgUGVuc2lvbiBQbGFuIFN0YXJ0dXAgQ29zdHMgYW5kIEF1dG8tRW5yb2xsbWVudCAoRm9ybSA4ODgxKTo8L3N0cm9uZz4gSWYgeW91ciBidXNpbmVzcyBoYXMgc2V0IHVwIG9yIHBsYW5zIHRvIHNldCB1cCBhIHBlbnNpb24gcGxhbiBmb3IgeW91ciBlbXBsb3llZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPk90aGVyIGNyZWRpdHM6PC9zdHJvbmc+IEFkZGl0aW9uYWwgY3JlZGl0cyBjYW4gYmUgZm91bmQgaW4gZGV0YWlsIGF0IDxhIGhyZWY9XCJodHRwczovL3d3dy5pcnMuZ292L2luc3RydWN0aW9ucy9pMzgwMFwiPklSUyBJbnN0cnVjdGlvbnMgZm9yIEZvcm0gMzgwMDwvYT4uPC9saT5cbiAgICA8L29sPlxuICAgIFxuICAgIDxwPldlIHdvdWxkIGxpa2UgdG8gYXNzZXNzIHlvdXIgcG90ZW50aWFsIGVsaWdpYmlsaXR5IGZvciB0aGVzZSBjcmVkaXRzLiBQbGVhc2UgcmV2aWV3IHRoZSBhYm92ZSBsaXN0IGFuZCA8c3Ryb25nPmluZm9ybSB1cyBpZiB5b3UgYmVsaWV2ZSB5b3VyIGJ1c2luZXNzIG1heSBxdWFsaWZ5PC9zdHJvbmc+IGZvciBhbnkgb2YgdGhlbSBiYXNlZCBvbiB5b3VyIGN1cnJlbnQgb3BlcmF0aW9ucyBvciBmdXR1cmUgcGxhbnMuIEFkZGl0aW9uYWxseSwgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjcmVkaXRzIG5vdCBsaXN0ZWQgdGhhdCB5b3UgYmVsaWV2ZSBtYXkgYXBwbHkgdG8geW91ciBidXNpbmVzcywgbGV0IHVzIGtub3cuPC9wPlxuICAgIFxuICAgIDxwPllvdXIgaW5zaWdodHMgd2lsbCBncmVhdGx5IGFzc2lzdCB1cyBpbiBlbnN1cmluZyB3ZSBleHBsb3JlIGFsbCBhdmVudWVzIHRvIHJlZHVjZSB5b3VyIHRheCBsaWFiaWxpdHkgYW5kIGNhcGl0YWxpemUgb24gYXZhaWxhYmxlIGNyZWRpdHMuPC9wPlxuICAgIFxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIGFueSBvZiB0aGVzZSBjcmVkaXRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJ1c2luZXNzIEFzc2V0cyBTb2xkXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQnVzaW5lc3MgQXNzZXRzIFNvbGRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyB3ZSB3b3JrIHRvIGRpbGlnZW50bHkgcHJlcGFyZSB5b3VyIGJ1c2luZXNz4oCZcyB0YXggZG9jdW1lbnRhdGlvbiwgd2UgbmVlZCB0byBlbnN1cmUgY29tcGxldGVuZXNzIGFuZCBhY2N1cmFjeSBpbiByZXBvcnRpbmcgYWxsIHJlbGV2YW50IHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSB0YXggeWVhci4gQW4gaW1wb3J0YW50IGFyZWEgb2YgZm9jdXMgaXMgdGhlIHNhbGUgb2YgYW55IGJ1c2luZXNzIGFzc2V0cy4gVGhpcyBpbmNsdWRlcyBib3RoIGFzc2V0cyBhY3RpdmVseSBpbiB1c2UgYW5kIHRob3NlIHRoYXQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGVwcmVjaWF0ZWQuPC9wPlxuXG4gICAgPHA+VGhlIHNhbGUgb2YgYnVzaW5lc3MgYXNzZXRzIGNhbiBoYXZlIHNpZ25pZmljYW50IHRheCBpbXBsaWNhdGlvbnMsIGluY2x1ZGluZyBwb3RlbnRpYWwgY2FwaXRhbCBnYWlucyBvciBsb3NzZXMsIHJlY2FwdHVyZSBvZiBkZXByZWNpYXRpb24sIGFuZCBpbXBhY3RzIG9uIHlvdXIgYnVzaW5lc3PigJlzIGNhc2ggZmxvdyBhbmQgZmluYW5jaWFsIHN0YXRlbWVudHMuIEFjY29yZGluZ2x5LCBpdCBpcyBjcnVjaWFsIGZvciB1cyB0byBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSB0cmFuc2FjdGlvbnMgdG8gdGhlIElSUy48L3A+XG4gICAgXG4gICAgPHA+UGxlYXNlIGNvbmZpcm0gaWYgeW91ciBidXNpbmVzcyBoYXMgc29sZCBhbnkgYXNzZXRzIGR1cmluZyB0aGUgY3VycmVudCB0YXggcGVyaW9kIGJ5IHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICBcbiAgICA8dWw+XG4gICAgICA8bGk+PHN0cm9uZz5Bc3NldCBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIGFzc2V0IHNvbGQgKGUuZy4sIGVxdWlwbWVudCwgcHJvcGVydHksIHZlaGljbGVzKS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBTYWxlOjwvc3Ryb25nPiBUaGUgZGF0ZSBvbiB3aGljaCBlYWNoIGFzc2V0IHdhcyBzb2xkLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5TYWxlIFByb2NlZWRzOjwvc3Ryb25nPiBUaGUgYW1vdW50IG9mIG1vbmV5IHJlY2VpdmVkIGZyb20gdGhlIHNhbGUgb2YgZWFjaCBhc3NldC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+T3JpZ2luYWwgUHVyY2hhc2UgUHJpY2UgYW5kIERhdGU6PC9zdHJvbmc+IFRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBhbmQgcHVyY2hhc2UgZGF0ZSBmb3IgZWFjaCBhc3NldC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+QWNjdW11bGF0ZWQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBUaGUgdG90YWwgZGVwcmVjaWF0aW9uIGNsYWltZWQgb24gZWFjaCBhc3NldCB1cCB0byB0aGUgcG9pbnQgb2Ygc2FsZS48L2xpPlxuICAgIDwvdWw+XG4gICAgXG4gICAgPHA+SWYgeW91IGhhdmUgbm90IHNvbGQgYW55IGJ1c2luZXNzIGFzc2V0cyBkdXJpbmcgdGhpcyBwZXJpb2QsIHBsZWFzZSBjb25maXJtIHRoaXMgYXMgd2VsbC4gWW91ciB0aW1lbHkgcmVzcG9uc2UgdG8gdGhpcyBpbnF1aXJ5IGlzIGNydWNpYWwgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSBhcmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+XG4gICAgXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvbWUgT2ZmaWNlIERlZHVjdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkhvbWUgT2ZmaWNlIERlZHVjdGlvbiBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSByZWNlaXZlZCBhbmQgY29tcGxldGVkIGEgYnVzaW5lc3MgdXNlIG9mIGhvbWUgc3ByZWFkc2hlZXQgZnJvbSB1cywgeW91IGNhbiBzYWZlbHkgaWdub3JlIHRoaXMgYWN0aW9uIGl0ZW0uIFdlJ2xsIGNsb3NlIGl0IG91dCBvbmNlIHdlIHZlcmlmeSB3ZSBoYXZlIHRoZSBpbmZvcm1hdGlvbiBvbiBmaWxlLjwvcD5cbiAgXG4gICAgPHA+WW91J3ZlIGluZGljYXRlZCB0aGF0IHlvdSB1c2UgcGFydCBvZiB5b3VyIGhvbWUgcmVndWxhcmx5IGFuZCBleGNsdXNpdmVseSBmb3IgYnVzaW5lc3MgcHVycG9zZXMuIFRoaXMgbWF5IHF1YWxpZnkgeW91IGZvciBhIGhvbWUgb2ZmaWNlIGRlZHVjdGlvbi4gVG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhpcyBkZWR1Y3Rpb24sIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gIFxuICAgIDx1bD5cbiAgICAgIDxsaT5Ub3RhbCBzcXVhcmUgZm9vdGFnZSBvZiB5b3VyIGhvbWU8L2xpPlxuICAgICAgPGxpPlNxdWFyZSBmb290YWdlIG9mIHlvdXIgaG9tZSBvZmZpY2U8L2xpPlxuICAgICAgPGxpPkJyaWVmIGRlc2NyaXB0aW9uIG9mIGhvdyB5b3UgdXNlIHRoaXMgc3BhY2UgZm9yIGJ1c2luZXNzPC9saT5cbiAgICAgIDxsaT5Ib21lLXJlbGF0ZWQgZXhwZW5zZXM6IG1vcnRnYWdlIGludGVyZXN0L3JlbnQsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIHV0aWxpdGllcywgcmVwYWlyczwvbGk+XG4gICAgICA8bGk+RGlyZWN0IGV4cGVuc2VzIGZvciB0aGUgb2ZmaWNlIHNwYWNlPC9saT5cbiAgICA8L3VsPlxuICBcbiAgICA8cD5JZiB5b3UgaGF2ZW4ndCByZWNlaXZlZCBvdXIgYnVzaW5lc3MgdXNlIG9mIGhvbWUgc3ByZWFkc2hlZXQsIHBsZWFzZSBsZXQgdXMga25vdywgYW5kIHdlJ2xsIHByb3ZpZGUgaXQgdG8geW91IGZvciBlYXN5IGNvbXBsZXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbi48L3A+XG4gIFxuICAgIDxwPlRoaXMgZGF0YSB3aWxsIGhlbHAgdXMgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBwb3RlbnRpYWwgaG9tZSBvZmZpY2UgZGVkdWN0aW9uIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBhc2suPC9wPmBcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQnVzaW5lc3MgVXNlIG9mIFBlcnNvbmFsIFZlaGljbGVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQZXJzb25hbCBWZWhpY2xlIEJ1c2luZXNzIFVzZSBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSBwcm92aWRlZCB1cyB3aXRoIGEgY29tcGxldGVkIHZlaGljbGUgZXhwZW5zZSBsb2cgb3Igc3ByZWFkc2hlZXQgZm9yIHRoZSB0YXggeWVhciwgeW91IGNhbiBpZ25vcmUgdGhpcyBhY3Rpb24gaXRlbS4gV2UnbGwgY2xvc2UgaXQgb25jZSB3ZSB2ZXJpZnkgd2UgaGF2ZSB0aGUgaW5mb3JtYXRpb24gb24gZmlsZS48L3A+XG4gIFxuICAgIDxwPllvdSd2ZSBpbmRpY2F0ZWQgdGhhdCB5b3UgdXNlIHlvdXIgcGVyc29uYWwgdmVoaWNsZSBmb3IgYnVzaW5lc3MgcHVycG9zZXMuIFRoaXMgbWF5IHF1YWxpZnkgeW91IGZvciB2ZWhpY2xlLXJlbGF0ZWQgdGF4IGRlZHVjdGlvbnMuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZXNlIGRlZHVjdGlvbnMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gIFxuICAgIDx1bD5cbiAgICAgIDxsaT5WZWhpY2xlIG1ha2UsIG1vZGVsLCBhbmQgeWVhcjwvbGk+XG4gICAgICA8bGk+RGF0ZSB5b3Ugc3RhcnRlZCB1c2luZyB0aGUgdmVoaWNsZSBmb3IgYnVzaW5lc3M8L2xpPlxuICAgICAgPGxpPldhcyB0aGUgdmVoaWNsZSBwdXJjaGFzZWQgaW4gYW50aWNpcGF0aW9uIG9mIGJ1c2luZXNzIHVzZT8gSWYgeWVzLCBwcm92aWRlIHB1cmNoYXNlIGRhdGUgYW5kIGNvc3Q8L2xpPlxuICAgICAgPGxpPlRvdGFsIG1pbGVzIGRyaXZlbiBkdXJpbmcgdGhlIHRheCB5ZWFyPC9saT5cbiAgICAgIDxsaT5CdXNpbmVzcyBtaWxlcyBkcml2ZW4gZHVyaW5nIHRoZSB0YXggeWVhcjwvbGk+XG4gICAgICA8bGk+Q29tbXV0aW5nIG1pbGVzIChpZiBhcHBsaWNhYmxlKTwvbGk+XG4gICAgICA8bGk+QWN0dWFsIGV4cGVuc2VzOlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPkdhcyBhbmQgb2lsPC9saT5cbiAgICAgICAgICA8bGk+TWFpbnRlbmFuY2UgYW5kIHJlcGFpcnM8L2xpPlxuICAgICAgICAgIDxsaT5WZWhpY2xlIHJlZ2lzdHJhdGlvbiBmZWVzPC9saT5cbiAgICAgICAgICA8bGk+VmVoaWNsZSBpbnN1cmFuY2U8L2xpPlxuICAgICAgICAgIDxsaT5MZWFzZSBwYXltZW50cyAoaWYgYXBwbGljYWJsZSk8L2xpPlxuICAgICAgICAgIDxsaT5QYXJraW5nIGZlZXMgYW5kIHRvbGxzIGZvciBidXNpbmVzcyB0cmlwczwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPkRvIHlvdSAob3IgeW91ciBzcG91c2UpIGhhdmUgYW5vdGhlciB2ZWhpY2xlIGF2YWlsYWJsZSBmb3IgcGVyc29uYWwgdXNlPzwvbGk+XG4gICAgICA8bGk+RG8geW91IGhhdmUgd3JpdHRlbiBldmlkZW5jZSB0byBzdXBwb3J0IHlvdXIgbWlsZWFnZSBsb2c/PC9saT5cbiAgICA8L3VsPlxuICBcbiAgICA8cD5QbGVhc2Ugbm90ZTogSWYgeW91IHB1cmNoYXNlZCB0aGUgdmVoaWNsZSBpbiBhbnRpY2lwYXRpb24gb2YgYnVzaW5lc3MgdXNlLCB3ZSBtYXkgYmUgYWJsZSB0byBjbGFpbSBkZXByZWNpYXRpb24uIFRoaXMgY291bGQgcG90ZW50aWFsbHkgaW5jcmVhc2UgeW91ciBkZWR1Y3Rpb24gYnV0IG1heSBhbHNvIGhhdmUgaW1wbGljYXRpb25zIGZvciBmdXR1cmUgdGF4IHllYXJzLjwvcD5cbiAgXG4gICAgPHA+SWYgeW91IGhhdmVuJ3QgcmVjZWl2ZWQgb3VyIHZlaGljbGUgZXhwZW5zZSBsb2cgc3ByZWFkc2hlZXQsIHBsZWFzZSBsZXQgdXMga25vdywgYW5kIHdlJ2xsIHByb3ZpZGUgaXQgdG8geW91IGZvciBlYXN5IGNvbXBsZXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbi48L3A+XG4gIFxuICAgIDxwPlRoaXMgZGF0YSB3aWxsIGhlbHAgdXMgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciB2ZWhpY2xlLXJlbGF0ZWQgZGVkdWN0aW9ucyBhbmQgb3B0aW1pemUgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHdoYXQgcXVhbGlmaWVzIGFzIGJ1c2luZXNzIHVzZSBvciBob3cgdG8gdHJhY2sgeW91ciBtaWxlYWdlLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gYXNrLjwvcD5gXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJ1c2luZXNzIFRyYXZlbCBQYWlkIHdpdGggUGVyc29uYWwgRnVuZHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJCdXNpbmVzcyBUcmF2ZWwgUmVpbWJ1cnNlbWVudCBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSBwcm92aWRlZCB1cyB3aXRoIGEgZGV0YWlsZWQgbG9nIG9yIHNwcmVhZHNoZWV0IG9mIHlvdXIgYnVzaW5lc3MgdHJhdmVsIGV4cGVuc2VzIGZvciB0aGUgdGF4IHllYXIsIHlvdSBjYW4gaWdub3JlIHRoaXMgYWN0aW9uIGl0ZW0uIFdlJ2xsIGNsb3NlIGl0IG9uY2Ugd2UgdmVyaWZ5IHdlIGhhdmUgdGhlIGluZm9ybWF0aW9uIG9uIGZpbGUuPC9wPlxuICBcbiAgICA8cD5Zb3UndmUgaW5kaWNhdGVkIHRoYXQgeW91IHBhaWQgZm9yIGJ1c2luZXNzIHRyYXZlbCB1c2luZyBwZXJzb25hbCBmdW5kcy4gVGhpcyBtYXkgcXVhbGlmeSB5b3UgZm9yIHRheCBkZWR1Y3Rpb25zIG9yIHJlaW1idXJzZW1lbnRzIGZyb20geW91ciBidXNpbmVzcy4gVG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBleHBlbnNlcywgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgXG4gICAgPHVsPlxuICAgICAgPGxpPkRhdGUgb2YgZWFjaCBidXNpbmVzcyB0cmlwPC9saT5cbiAgICAgIDxsaT5EZXN0aW5hdGlvbiBhbmQgcHVycG9zZSBvZiBlYWNoIHRyaXA8L2xpPlxuICAgICAgPGxpPk1ldGhvZCBvZiB0cmF2ZWwgKGUuZy4sIHBlcnNvbmFsIHZlaGljbGUsIHB1YmxpYyB0cmFuc3BvcnRhdGlvbiwgYWlyZmFyZSk8L2xpPlxuICAgICAgPGxpPlRvdGFsIGNvc3Qgb2YgdHJhdmVsLCBpbmNsdWRpbmcgdHJhbnNwb3J0YXRpb24sIGxvZGdpbmcsIGFuZCBtZWFsczwvbGk+XG4gICAgICA8bGk+UmVjZWlwdHMgb3IgZG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIGVhY2ggZXhwZW5zZTwvbGk+XG4gICAgICA8bGk+QW55IGJ1c2luZXNzIG1pbGVzIGRyaXZlbiAoaWYgYXBwbGljYWJsZSkgZHVyaW5nIHRoZXNlIHRyaXBzPC9saT5cbiAgICAgIDxsaT5XaGV0aGVyIHlvdSB3ZXJlIHJlaW1idXJzZWQgYnkgeW91ciBidXNpbmVzcyBvciBhbm90aGVyIGVudGl0eSBmb3IgYW55IG9mIHRoZXNlIGV4cGVuc2VzPC9saT5cbiAgICA8L3VsPlxuICBcbiAgICA8cD5QbGVhc2Ugbm90ZTogSWYgeW91IGhhdmVuJ3QgdHJhY2tlZCB0aGVzZSBleHBlbnNlcyB0aHJvdWdob3V0IHRoZSB5ZWFyLCBub3cgaXMgYSBnb29kIHRpbWUgdG8gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIEFjY3VyYXRlIHJlY29yZHMgd2lsbCBoZWxwIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgbWF4aW11bSBhbGxvd2FibGUgZGVkdWN0aW9ucyBhbmQgYXZvaWQgYW55IGlzc3VlcyBpbiB0aGUgZXZlbnQgb2YgYW4gYXVkaXQuPC9wPlxuICBcbiAgICA8cD5JZiB5b3UgbmVlZCBhIHRlbXBsYXRlIG9yIGd1aWRhbmNlIG9uIGhvdyB0byBvcmdhbml6ZSB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCB3ZSdsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgdG9vbHMgdG8gYXNzaXN0IHlvdS48L3A+XG4gIFxuICAgIDxwPlByb3ZpZGluZyB0aGlzIGRhdGEgd2lsbCBoZWxwIHVzIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgdHJhdmVsLXJlbGF0ZWQgZGVkdWN0aW9ucyBhbmQgb3B0aW1pemUgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHdoYXQgcXVhbGlmaWVzIGFzIGEgYnVzaW5lc3MgZXhwZW5zZSBvciBob3cgdG8gZG9jdW1lbnQgeW91ciB0cmF2ZWwsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBhc2suPC9wPmBcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGlwIEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRpcCBJbmNvbWUgRG9jdW1lbnRhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgPHN0cm9uZz50aXAgaW5jb21lPC9zdHJvbmc+IGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgdGlwIGluY29tZSBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMsIHdlIG5lZWQgZG9jdW1lbnRhdGlvbiBvZiBhbGwgdGlwcyByZWNlaXZlZC48L3A+XG5cbiAgICA8cD48c3Ryb25nPlJlcXVpcmVkIERvY3VtZW50YXRpb246PC9zdHJvbmc+PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+Vy0yIEZvcm06PC9zdHJvbmc+IFlvdXIgZW1wbG95ZXIgc2hvdWxkIHJlcG9ydCB0aXBzIGluIEJveCA3IChTb2NpYWwgU2VjdXJpdHkgdGlwcykgYW5kIEJveCA4IChBbGxvY2F0ZWQgdGlwcywgaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSA0MDcwOjwvc3Ryb25nPiBFbXBsb3llZSdzIFJlcG9ydCBvZiBUaXBzIHRvIEVtcGxveWVyLCBpZiB5b3UgcmVwb3J0ZWQgdGlwcyB0byB5b3VyIGVtcGxveWVyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhaWx5IFRpcCBMb2c6PC9zdHJvbmc+IFlvdXIgcGVyc29uYWwgcmVjb3JkIG9mIHRpcHMgcmVjZWl2ZWQsIGluY2x1ZGluZyBkYXRlLCBhbW91bnQsIGFuZCBzb3VyY2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSA0MTM3Ojwvc3Ryb25nPiBJZiB5b3UgaGF2ZSB1bnJlcG9ydGVkIHRpcHMgc3ViamVjdCB0byBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRheC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5IEZvcm1zOjwvc3Ryb25nPiAxMDk5LU1JU0MsIDEwOTktTkVDLCBvciAxMDk5LUsgaWYgeW91IHJlY2VpdmVkIHRpcHMgYXMgYW4gaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciB0aHJvdWdoIHBheW1lbnQgcGxhdGZvcm1zLjwvbGk+XG4gICAgPC9vbD5cblxuICAgIDxwPjxzdHJvbmc+SW1wb3J0YW50IE5vdGVzOjwvc3Ryb25nPjwvcD5cbiAgICA8dWw+XG4gICAgICAgIDxsaT5BbGwgdGlwcyBhcmUgdGF4YWJsZSBpbmNvbWUsIGluY2x1ZGluZyBjYXNoIHRpcHMsIGNyZWRpdCBjYXJkIHRpcHMsIGFuZCB0aXBzIGZyb20gdGlwIHBvb2xzLjwvbGk+XG4gICAgICAgIDxsaT5UaXBzIHRvdGFsaW5nICQyMCBvciBtb3JlIHBlciBtb250aCBmcm9tIGFueSBzaW5nbGUgZW1wbG95ZXIgbXVzdCBiZSByZXBvcnRlZC48L2xpPlxuICAgICAgICA8bGk+S2VlcCBhY2N1cmF0ZSByZWNvcmRzIG9mIGFsbCB0aXBzIHJlY2VpdmVkIHRocm91Z2hvdXQgdGhlIHllYXIuPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGRvY3VtZW50YXRpb24gbGlzdGVkIGFib3ZlIHNvIHdlIGNhbiBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIHRpcCBpbmNvbWUgb24geW91ciB0YXggcmV0dXJuLjwvcD5gXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlZHVjZWQgVGF4IG9uIFRpcHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJSZWR1Y2VkIFRheCBvbiBUaXBzIChPQkJCQSkgRG9jdW1lbnRhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdSBpbmRpY2F0ZWQgeW91IHdhbnQgdG8gY2xhaW0gdGhlIDxzdHJvbmc+UmVkdWNlZCBUYXggb24gVGlwczwvc3Ryb25nPiBkZWR1Y3Rpb24gdW5kZXIgdGhlIE9uZSBCaWcgQmVhdXRpZnVsIEJpbGwgQWN0IChPQkJCQSkuIFRoaXMgZGVkdWN0aW9uIGFsbG93cyBxdWFsaWZ5aW5nIHRpcHBlZCB3b3JrZXJzIHRvIGV4Y2x1ZGUgdXAgdG8gJDI1LDAwMCBpbiB0aXBzIGZyb20gdGF4YWJsZSBpbmNvbWUgZm9yIHRheCB5ZWFycyAyMDI1LTIwMjguPC9wPlxuXG4gICAgPHA+PHN0cm9uZz5FbGlnaWJpbGl0eSBSZXF1aXJlbWVudHM6PC9zdHJvbmc+PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+T2NjdXBhdGlvbiBUZXN0Ojwvc3Ryb25nPiBZb3VyIG9jY3VwYXRpb24gbXVzdCBoYXZlIGN1c3RvbWFyaWx5IHJlY2VpdmVkIHRpcHMgYmVmb3JlIERlY2VtYmVyIDMxLCAyMDI0IChlLmcuLCBzZXJ2ZXIsIGJhcnRlbmRlciwgaGFpcmRyZXNzZXIsIHZhbGV0LCBkZWxpdmVyeSBkcml2ZXIpLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZpbGluZyBTdGF0dXM6PC9zdHJvbmc+IFlvdSBtdXN0IGZpbGUgYSBqb2ludCByZXR1cm4gaWYgbWFycmllZC4gVGhpcyBkZWR1Y3Rpb24gaXMgbm90IGF2YWlsYWJsZSBmb3IgTWFycmllZCBGaWxpbmcgU2VwYXJhdGVseS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgUGhhc2Utb3V0Ojwvc3Ryb25nPiBUaGUgZGVkdWN0aW9uIHBoYXNlcyBvdXQgYXQgJDE1MCwwMDAgTUFHSSAoc2luZ2xlL2hlYWQgb2YgaG91c2Vob2xkKSBvciAkMzAwLDAwMCBNQUdJIChtYXJyaWVkIGZpbGluZyBqb2ludGx5KS48L2xpPlxuICAgIDwvb2w+XG5cbiAgICA8cD48c3Ryb25nPlJlcXVpcmVkIERvY3VtZW50YXRpb246PC9zdHJvbmc+PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+Vy0yIEZvcm06PC9zdHJvbmc+IEJveCA3IChTb2NpYWwgU2VjdXJpdHkgdGlwcykgYW5kIEJveCA4IChBbGxvY2F0ZWQgdGlwcyk8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDQwNzAgb3IgRGFpbHkgVGlwIExvZzo8L3N0cm9uZz4gUmVjb3JkcyBvZiB0aXBzIHJlcG9ydGVkIHRvIHlvdXIgZW1wbG95ZXI8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDQxMzc6PC9zdHJvbmc+IFJlcXVpcmVkIGlmIHlvdSBoYXZlIHVucmVwb3J0ZWQgdGlwcyBzdWJqZWN0IHRvIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUgdGF4PC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+MTA5OS1NSVNDLCAxMDk5LU5FQywgb3IgMTA5OS1LOjwvc3Ryb25nPiBGb3IgdGlwcyByZWNlaXZlZCBhcyBhIG5vbi1lbXBsb3llZSAoZS5nLiwgaW5kZXBlbmRlbnQgY29udHJhY3Rvcik8L2xpPlxuICAgIDwvb2w+XG5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSBhbGwgYXBwbGljYWJsZSBkb2N1bWVudGF0aW9uIHRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBSZWR1Y2VkIFRheCBvbiBUaXBzIGRlZHVjdGlvbiBhbmQgdmVyaWZ5IGVsaWdpYmlsaXR5IHJlcXVpcmVtZW50cyBhcmUgbWV0LjwvcD5gXG4gIH1cbl07XG4iXX0=
|
|
2367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXRheC1mcmFnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uLXRlbXMvYWN0aW9uLXRheC1mcmFnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxrQkFBa0IsR0FBRztJQUNoQztRQUNFLGdCQUFnQixFQUFFLHdCQUF3QjtRQUMxQyxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLGtCQUFrQixFQUFFOzs7Ozs7OzsrSUFRdUg7S0FDNUk7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUseURBQXlEO1FBQ3RFLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dVBBMkIrTjtLQUNwUDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsbUNBQW1DO1FBQ2hELGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzhKQWFzSTtLQUMzSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7a1BBYTBOO0tBQy9PO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OzsySEFhbUc7S0FDeEg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs2T0FXcU47S0FDMU87SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Q0FTdkI7S0FDRTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JB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UUFDRSxnQkFBZ0IsRUFBRSwwQkFBMEI7UUFDNUMsV0FBVyxFQUFFLDBCQUEwQjtRQUN2QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dMQXFCd0o7S0FDN0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7K0RBa0J1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsdUJBQXVCO1FBQ3pDLFdBQVcsRUFBRSxtQ0FBbUM7UUFDaEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7O21MQWMySjtLQUNoTDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsa0NBQWtDO1FBQ3BELFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dQQTZCd047S0FDN087SUFDRDtRQUNFLGdCQUFnQixFQUFFLDBDQUEwQztRQUM1RCxXQUFXLEVBQUUsMkNBQTJDO1FBQ3hELGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7aVFBa0J5TztLQUM5UDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7eUhBa0JpRztLQUN0SDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUscUJBQXFCO1FBQ3ZDLFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7OzZLQWlCcUo7S0FDMUs7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlDQUFpQztRQUNuRCxXQUFXLEVBQUUsdURBQXVEO1FBQ3BFLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQkFvQkc7S0FDeEI7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFjdGlvblRheEZyYWdtZW50cyA9IFtcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpb3IgWWVhciBUYXggUmV0dXJuc1wiLFxuICAgIGFjdGlvblRpdGxlOiBgUHJvdmlkZSBQcmlvciBZZWFyIFRheCBSZXR1cm5zYCxcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIHJlcXVpcmUgeW91ciBhc3Npc3RhbmNlIHRvIGVuc3VyZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzLiBPbmUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gd2UgbmVlZCBpcyB5b3VyIDxzdHJvbmc+UHJpb3IgWWVhciBUYXggUmV0dXJuczwvc3Ryb25nPi4gVGhpcyBkb2N1bWVudCBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogdmVyaWZ5aW5nIGNhcnJ5LWZvcndhcmQgYW1vdW50cywgY29tcGFyaW5nIHllYXItb3Zlci15ZWFyIGluY29tZSBhbmQgZGVkdWN0aW9ucywgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cy48L3A+XG4gICAgPHA+VG8gZmFjaWxpdGF0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBjb3B5IG9mIHlvdXIgPHN0cm9uZz5GZWRlcmFsIHRheCByZXR1cm48L3N0cm9uZz4gZm9yIHRoZSBsYXN0IHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5BIGNvcHkgb2YgeW91ciA8c3Ryb25nPlN0YXRlIHRheCByZXR1cm48L3N0cm9uZz4gZm9yIHRoZSBsYXN0IHRheCB5ZWFyLCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgPHN0cm9uZz5ub3RpY2VzIG9yIGFtZW5kbWVudHM8L3N0cm9uZz4gcmVsYXRlZCB0byB5b3VyIHByaW9yIHllYXIgdGF4IHJldHVybnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBkaWZmaWN1bHR5IGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBsZXQgdXMga25vdyBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHdlIGNhbiBkaXNjdXNzIGFsdGVybmF0aXZlIHNvbHV0aW9ucy48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBQcm92aWRpbmcgdGhlc2Ugd2lsbCBlbmFibGUgdXMgdG8gY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24gd2l0aG91dCBkZWxheS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU3RhdHV0b3J5IEV4dGVuc2lvbnNcIixcbiAgICBhY3Rpb25UaXRsZTogYERldGVybWluaW5nIEVsaWdpYmlsaXR5IGZvciBTdGF0dXRvcnkgRmlsaW5nIEV4dGVuc2lvbnNgLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGVuc3VyZSB0aGF0IHdlIGNhbiBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB5b3UgcXVhbGlmeSBmb3Igc3RhdHV0b3J5IGZpbGluZyBleHRlbnNpb25zIGZvciB5b3VyIHRheCByZXR1cm5zLCB3ZSByZXF1aXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20geW91LiBQbGVhc2Ugc2VlIGJlbG93IHRoZSBjYXRlZ29yaWVzIG9mIGluZm9ybWF0aW9uIG5lZWRlZCBiYXNlZCBvbiBkaWZmZXJlbnQgZWxpZ2liaWxpdHkgY3JpdGVyaWE6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmVkZXJhbCBEaXNhc3RlciBBcmVhczwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBwcmltYXJ5IHJlc2lkZW5jZSBsb2NhdGlvbiBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFueSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIHJlY2VpdmVkIHJlZ2FyZGluZyBkaXNhc3RlciBkZWNsYXJhdGlvbnMgaW4geW91ciBhcmVhLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5MaXZpbmcgQWJyb2FkPC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlByb29mIG9mIHJlc2lkZW5jZSBvdXRzaWRlIHRoZSBVbml0ZWQgU3RhdGVzIGZvciBtb3JlIHRoYW4gMzMwIGZ1bGwgZGF5cyB3aXRoaW4gYSAxMi1tb250aCBwZXJpb2QuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIHlvdXIgcGh5c2ljYWwgcHJlc2VuY2Ugb3IgYm9uYSBmaWRlIHJlc2lkZW5jZSBpbiBhIGZvcmVpZ24gY291bnRyeS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWN0aXZlIE1pbGl0YXJ5PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gaW5kaWNhdGluZyBhY3RpdmUgZHV0eSBzdGF0dXMsIGluY2x1ZGluZyBkYXRlcyBvZiBzZXJ2aWNlIHdpdGhpbiB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+SWYgYXBwbGljYWJsZSwgb3JkZXJzIGZvciBvdmVyc2VhcyBkZXBsb3ltZW50LjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db21iYXQgWm9uZTwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5PZmZpY2lhbCBvcmRlcnMgZGVtb25zdHJhdGluZyB5b3VyIGRlcGxveW1lbnQgdG8gYSBjb21iYXQgem9uZSwgaW5jbHVkaW5nIHRoZSBzcGVjaWZpYyBkYXRlcy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbnkgcmVsZXZhbnQgY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBEZXBhcnRtZW50IG9mIERlZmVuc2Ugb3Igb3RoZXIgb2ZmaWNpYWwgYm9kaWVzIHJlZ2FyZGluZyB5b3VyIHNlcnZpY2UgaW4gYSBjb21iYXQgem9uZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIHRpbWVseSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGVwZW5kZW50c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlJlcXVlc3QgZm9yIERlcGVuZGVudCBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgZGVwZW5kZW50cy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhcHBseWluZyB0aGUgbW9zdCBiZW5lZmljaWFsIGRlcGVuZGVuY3kgdGVzdHMsIGluY2x1ZGluZyBxdWFsaWZpY2F0aW9ucyBmb3IgSGVhZCBvZiBIb3VzZWhvbGQgKEhPSCksIENoaWxkIFRheCBDcmVkaXQsIGFuZCBvdGhlciByZWxhdGVkIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggb2YgeW91ciBjbGFpbWVkIGRlcGVuZGVudHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RnVsbCBOYW1lOjwvc3Ryb25nPiBUaGUgY29tcGxldGUgbGVnYWwgbmFtZSBvZiB0aGUgZGVwZW5kZW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb3IgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyIChUSU4pOjwvc3Ryb25nPiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBCaXJ0aDo8L3N0cm9uZz4gSGVscHMgdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5IGZvciBjZXJ0YWluIGNyZWRpdHMgbGlrZSB0aGUgQ2hpbGQgVGF4IENyZWRpdC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5SZWxhdGlvbnNoaXAgdG8gWW91Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkZXBlbmRlbnQncyByZWxhdGlvbnNoaXAgKHNvbiwgZGF1Z2h0ZXIsIHN0ZXBjaGlsZCwgZm9zdGVyIGNoaWxkLCBicm90aGVyLCBzaXN0ZXIsIGV0Yy4pIHRvIHlvdS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5SZXNpZGVuY3k6PC9zdHJvbmc+IENvbmZpcm0gdGhlIGRlcGVuZGVudCBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgdGhlIHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIFN1cHBvcnQ6PC9zdHJvbmc+IENvbmZpcm0geW91IHByb3ZpZGVkIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBkZXBlbmRlbnTigJlzIGZpbmFuY2lhbCBzdXBwb3J0IGZvciB0aGUgeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5DaXRpemVuc2hpcDo8L3N0cm9uZz4gQ29uZmlybSB0aGUgZGVwZW5kZW50IGlzIGEgVS5TLiBjaXRpemVuLCBVLlMuIG5hdGlvbmFsLCBvciBhIHJlc2lkZW50IGFsaWVuLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBkZXBlbmRlbnQgaXMgbWFycmllZCBhbmQsIGlmIHNvLCB3aGV0aGVyIHRoZXkgYXJlIGZpbGluZyBqb2ludGx5LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkluY29tZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSBkZXRhaWxzIHJlZ2FyZGluZyBhbnkgaW5jb21lIHRoZSBkZXBlbmRlbnQgbWF5IGhhdmUgZWFybmVkIG9yIHJlY2VpdmVkLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBwcm92aWRlIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBpbmZvcm1hdGlvbiB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHRoZSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBmdXJ0aGVyIGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSGVhZCBvZiBIb3VzZWhvbGRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJIZWFkIG9mIEhvdXNlaG9sZCBGaWxpbmdcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsaWFudCB0YXggZmlsaW5nIHVuZGVyIHRoZSBcIkhlYWQgb2YgSG91c2Vob2xkXCIgc3RhdHVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiBUaGlzIHN0YXR1cyBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCB0YXggYmVuZWZpdHMsIGFuZCBpdCBpcyBjcnVjaWFsIHRoYXQgYWxsIElSUyByZXF1aXJlbWVudHMgYXJlIG1ldC4gUGxlYXNlIHByb3ZpZGU6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5NYXJpdGFsIFN0YXR1czo8L3N0cm9uZz4gQ29uZmlybWF0aW9uIG9mIHlvdXIgbWFyaXRhbCBzdGF0dXMgYXMgb2YgdGhlIGxhc3QgZGF5IG9mIHRoZSB0YXggeWVhciAoZS5nLiwgc2luZ2xlLCBkaXZvcmNlZCwgbGVnYWxseSBzZXBhcmF0ZWQpLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+SG91c2Vob2xkIEV4cGVuc2VzOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIGluZGljYXRpbmcgdGhhdCB5b3UgcGFpZCBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgY29zdHMgb2Yga2VlcGluZyB1cCBhIGhvbWUgZm9yIHRoZSB0YXggeWVhci4gVGhpcyBpbmNsdWRlcyByZW50LCBtb3J0Z2FnZSBpbnRlcmVzdCwgcHJvcGVydHkgdGF4ZXMsIHV0aWxpdGllcywgcmVwYWlycywgbWFpbnRlbmFuY2UsIGFuZCBncm9jZXJpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5RdWFsaWZ5aW5nIFBlcnNvbjo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHF1YWxpZnlpbmcgcGVyc29uKHMpIHdobyBsaXZlZCB3aXRoIHlvdSBpbiB0aGUgaG9tZSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHllYXIsIGV4Y2VwdCBmb3IgdGVtcG9yYXJ5IGFic2VuY2VzIHN1Y2ggYXMgc2Nob29sLiBQbGVhc2UgaW5jbHVkZTpcbiAgICAgIDx1bD5cbiAgICAgIDxsaT5GdWxsIG5hbWUgYW5kIHJlbGF0aW9uc2hpcCB0byB5b3UgKGUuZy4sIGNoaWxkLCBwYXJlbnQsIHNpYmxpbmcpLjwvbGk+XG4gICAgICA8bGk+RHVyYXRpb24gb2YgcmVzaWRlbmN5IGF0IHlvdXIgaG9tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICA8bGk+U3VwcG9ydGluZyBkb2N1bWVudHMgKGJpcnRoIGNlcnRpZmljYXRlcywgc2Nob29sIHJlY29yZHMsIGV0Yy4pIHByb3ZpbmcgdGhlIHJlc2lkZW5jeSBhbmQgcmVsYXRpb25zaGlwLjwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvbGk+XG4gICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBTdXBwb3J0Ojwvc3Ryb25nPiBBbnkgZnVydGhlciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgeW91ciBjbGFpbSBmb3IgdGhlIEhlYWQgb2YgSG91c2Vob2xkIGZpbGluZyBzdGF0dXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBub3RlIHRoYXQgcHJvdmlkaW5nIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIHlvdXIgYmVuZWZpdCBhbmQgdG8gY29tcGx5IHdpdGggdGF4IGxhd3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlc2lkZW5jeSBTdGF0dXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJJbmZvcm1hdGlvbiBvbiBSZXNpZGVuY3kgU3RhdHVzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IGVpdGhlciB5b3Ugb3IgeW91ciBzcG91c2UgaXMgbm90IGEgVS5TLiBjaXRpemVuLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB5b3VyIHRheCBzdGF0dXMsIHdlIG5lZWQgdG8gYXBwbHkgdGhlIG5lY2Vzc2FyeSBUYXggUmVzaWRlbmN5IFRlc3RzLCB3aGljaCBpbmNsdWRlIHRoZSA8c3Ryb25nPkdyZWVuIENhcmQgVGVzdDwvc3Ryb25nPiBhbmQgdGhlIDxzdHJvbmc+U3Vic3RhbnRpYWwgUHJlc2VuY2UgVGVzdDwvc3Ryb25nPi4gVGhpcyB3aWxsIGhlbHAgdXMgZW5zdXJlIHlvdXIgdGF4IHJldHVybnMgYXJlIGNvbXBsZXRlZCBjb3JyZWN0bHkgYW5kIGNvbXBseSB3aXRoIFUuUy4gcmVndWxhdGlvbnMuPC9wPlxuXG4gICAgPHA+VG8gcHJvY2VlZCwgd2Uga2luZGx5IGFzayB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkdyZWVuIENhcmQgU3RhdHVzOjwvc3Ryb25nPiBQbGVhc2UgY29uZmlybSBpZiB5b3Ugb3IgeW91ciBzcG91c2UgaGF2ZSBiZWVuIGlzc3VlZCBhIFUuUy4gZ3JlZW4gY2FyZCAoTGF3ZnVsIFBlcm1hbmVudCBSZXNpZGVudCBDYXJkKSBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSB0YXggeWVhci4gSWYgeWVzLCBwcm92aWRlIGEgY29weSBvZiB0aGUgZ3JlZW4gY2FyZCBvciB0aGUgb2ZmaWNpYWwgZG9jdW1lbnQgY29uZmlybWluZyB0aGUgc3RhdHVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgQXJyaXZhbCBpbiB0aGUgVS5TLjo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGVzIHdoZW4geW91IGFuZC9vciB5b3VyIHNwb3VzZSBmaXJzdCBhcnJpdmVkIGluIHRoZSBVLlMuIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VHJhdmVsIEhpc3Rvcnk6PC9zdHJvbmc+IEEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgdGhlIGRhdGVzIHlvdSBhbmQvb3IgeW91ciBzcG91c2UgZW50ZXJlZCBhbmQgbGVmdCB0aGUgVS5TLiBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHRoZSBTdWJzdGFudGlhbCBQcmVzZW5jZSBUZXN0LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlZpc2EgVHlwZTo8L3N0cm9uZz4gSWYgeW91IG9yIHlvdXIgc3BvdXNlIGFyZSBvbiBhIHZpc2EsIHBsZWFzZSBzcGVjaWZ5IHRoZSB0eXBlIGFuZCBwcm92aWRlIGEgY29weSBvZiB0aGUgdmlzYS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFRheCBGaWxpbmdzOjwvc3Ryb25nPiBDb3BpZXMgb2YgbGFzdCB5ZWFyJ3MgdGF4IHJldHVybnMsIGlmIGFwcGxpY2FibGUuIFRoaXMgaW5mb3JtYXRpb24gY2FuIHByb3ZpZGUgY29udGV4dCBhbmQgaGVscCBkZXRlcm1pbmUgcmVzaWRlbmN5IHN0YXR1cyBtb3JlIGFjY3VyYXRlbHkuPC9saT5cbiAgICA8L29sPlxuXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhciBhbmQgbGVnaWJsZS4gWW91IGNhbiBzZW5kIHRoZW0gdG8gdXMgdmlhIGVtYWlsIG9yIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBGb3IgYW55IHF1ZXN0aW9ucyBvciBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XG5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3Ugd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbi48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSm9pbnQgVGF4IFJlbGllZlwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkpvaW50IFRheCBSZWxpZWYgRGV0YWlsc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGFzc2lzdCB5b3UgZWZmZWN0aXZlbHkgd2l0aCB5b3VyIHJlcXVlc3QgZm9yIGpvaW50IHRheCByZWxpZWYsIHdlIG5lZWQgdG8gY29sbGVjdCBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIHlvdXIgc2l0dWF0aW9uIHRob3JvdWdobHkuIFRoaXMgd2lsbCBoZWxwIHVzIGRldGVybWluZSB0aGUgbW9zdCBzdWl0YWJsZSB0eXBlIG9mIHJlbGllZiBmb3IgeW91ciBjaXJjdW1zdGFuY2VzLCB3aGljaCBtYXkgaW5jbHVkZSBJbm5vY2VudCBTcG91c2UgUmVsaWVmLCBJbmp1cmVkIFNwb3VzZSBBbGxvY2F0aW9uLCBTZXBhcmF0aW9uIG9mIExpYWJpbGl0eSBSZWxpZWYsIG9yIEVxdWl0YWJsZSBSZWxpZWYuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+PHN0cm9uZz5Db21wbGV0ZSBUYXggUmV0dXJuczo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCB0YXggcmV0dXJucyBmb3IgdGhlIHllYXJzIHlvdSBhcmUgcmVxdWVzdGluZyByZWxpZWYuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIFN0YXRlbWVudDo8L3N0cm9uZz4gQSB3cml0dGVuIHN0YXRlbWVudCBleHBsYWluaW5nIHdoeSB5b3UgYmVsaWV2ZSB5b3UgcXVhbGlmeSBmb3IgcmVsaWVmLCBpbmNsdWRpbmcgYW55IHNwZWNpZmljIGV2ZW50cyBvciBjaXJjdW1zdGFuY2VzIHlvdSB3YW50IHVzIHRvIGNvbnNpZGVyLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gUHJvb2Ygb2YgeW91ciBjdXJyZW50IGluY29tZSBhbmQgdGhhdCBvZiB5b3VyIHNwb3VzZSBpZiBhcHBsaWNhYmxlLCBzdWNoIGFzIHJlY2VudCBwYXkgc3R1YnMsIFctMiBmb3Jtcywgb3Igb3RoZXIgaW5jb21lIHN0YXRlbWVudHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZpbmFuY2lhbCBTaXR1YXRpb246PC9zdHJvbmc+IERvY3VtZW50cyBzaG93aW5nIHlvdXIgY3VycmVudCBmaW5hbmNpYWwgc2l0dWF0aW9uLCBpbmNsdWRpbmcgYmFuayBzdGF0ZW1lbnRzLCBtb250aGx5IGJpbGxzLCBhbmQgYW55IG90aGVyIGxpYWJpbGl0aWVzLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIE1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBsZWdhbCBkb2N1bWVudHMgcmVsYXRlZCB0byBzZXBhcmF0aW9uLCBkaXZvcmNlLCBvciBhbm51bG1lbnQuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jZTo8L3N0cm9uZz4gRG9jdW1lbnRzIHRoYXQgcHJvdmUgd2hlcmUgZWFjaCBvZiB5b3UgaGFzIGxpdmVkIGR1cmluZyB0aGUgdGF4IHllYXJzIGluIHF1ZXN0aW9uLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5BbnkgQ29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgSVJTOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSByZWNlaXZlZCBhbnkgbm90aWNlcyBvciBsZXR0ZXJzIGZyb20gdGhlIElSUyByZWdhcmRpbmcgeW91ciBqb2ludCB0YXggbGlhYmlsaXR5LCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXJseSBsZWdpYmxlLiBZb3UgbWF5IHNlbmQgdGhlbSB2aWEgZW1haWwsIG9yIHVwbG9hZC4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHRvIHByb3ZpZGUsIGRvbid0IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XG4gICAgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHRoaXMgcHJvY2VzcyBjYW4gYmUgY29tcGxleCwgYnV0IHdlIGFyZSBoZXJlIHRvIGd1aWRlIHlvdSB0aHJvdWdoIGl0LiBPdXIgZ29hbCBpcyB0byBlbnN1cmUgd2UgaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB5b3VyIHNpdHVhdGlvbiB0byBhZHZvY2F0ZSBmb3IgdGhlIG1vc3QgZmF2b3JhYmxlIG91dGNvbWUgb24geW91ciBiZWhhbGYuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIjEwOTkgTkVDIEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIjEwOTkgTkVDIEluY29tZVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCByZXF1aXJlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCB5b3VyIHNvdXJjZXMgb2YgaW5jb21lLiBTcGVjaWZpY2FsbHksIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgeW91ciAxMDk5IE5FQyBJbmNvbWUuIFRoZSAxMDk5LU5FQyBmb3JtIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSByZXBvcnRpbmcgeW91ciBub24tZW1wbG95ZWUgY29tcGVuc2F0aW9uLjwvcD5cbiAgICA8cD5UbyBlbnN1cmUgYSB0aG9yb3VnaCBhbmQgYWNjdXJhdGUgdGF4IHByZXBhcmF0aW9uLCBwbGVhc2UgcHJvdmlkZSB1cyB3aXRoIHRoZSBmb2xsb3dpbmc6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxiPkFsbCAxMDk5LU5FQyBmb3JtczwvYj4geW91IHJlY2VpdmVkIGZvciB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxiPmFkZGl0aW9uYWwgbm9uLWVtcGxveWVlIGNvbXBlbnNhdGlvbjwvYj4gbm90IHJlcG9ydGVkIG9uIGEgMTA5OS1ORUMgZm9ybS48L2xpPlxuICAgICAgICA8bGk+SW5mb3JtYXRpb24gcmVnYXJkaW5nIDxiPmV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciAxMDk5IE5FQyBpbmNvbWU8L2I+LCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBub3QgeWV0IHJlY2VpdmVkIGFsbCB5b3VyIDEwOTktTkVDIGZvcm1zLCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCBwcm92aWRlIGFuIGVzdGltYXRlIG9mIHdoZW4geW91IGV4cGVjdCB0byByZWNlaXZlIHRoZW0uIFRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgaW5jb21lIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgcGVuYWx0aWVzIG9yIGF1ZGl0cyBmcm9tIHRoZSBJUlMuPC9wPlxuICAgIDxwPlBsZWFzZSByZWFjaCBvdXQgdG8gdXMgZGlyZWN0bHkgc2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24uIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBwcm9jZXNzZWQgZWZmaWNpZW50bHkgYW5kIGFjY3VyYXRlbHkuPC9wPlxuYCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2NoZWR1bGUgSy0xIEluZm9ybWF0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2NoZWR1bGUgSy0xIEluZm9ybWF0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCB0aGUgcHJlc2VuY2Ugb2YgU2NoZWR1bGUgSyBpbmNvbWUgZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBJbiBvcmRlciB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCBpdCBpcyBpbXBlcmF0aXZlIHRoYXQgd2UgZ2F0aGVyIGFsbCBuZWNlc3NhcnkgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBpbmNvbWUuPC9wPlxuICAgIDxwPklmIHdlIGFyZSBwcmVwYXJpbmcgeW91ciBidXNpbmVzcyByZXR1cm4sIHJlc3QgYXNzdXJlZCB0aGF0IHdlIHdpbGwgZ2VuZXJhdGUgdGhlIGFwcGxpY2FibGUgU2NoZWR1bGUgSy0xKHMpIGZvciB5b3VyIGJ1c2luZXNzIGludGVyZXN0cy4gSG93ZXZlciwgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgY29sbGVjdCBjb3BpZXMgb2YgPHN0cm9uZz5hbGwgb3RoZXIgU2NoZWR1bGUgSy0xczwvc3Ryb25nPiB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgdG8gaW5jb3Jwb3JhdGUgaW50byB5b3VyIHBlcnNvbmFsIHRheCByZXR1cm4uPC9wPiAgXG4gICAgPGgzPlNwZWNpZmljIERvY3VtZW50IFJlcXVlc3Q6PC9oMz5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5BbnkgYW5kIGFsbCBTY2hlZHVsZSBLLTEocykgeW91IGhhdmUgcmVjZWl2ZWQgZnJvbTo8L2xpPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgICA8bGk+UGFydG5lcnNoaXBzPC9saT5cbiAgICAgICAgICAgIDxsaT5TIENvcnBvcmF0aW9uczwvbGk+XG4gICAgICAgICAgICA8bGk+RXN0YXRlIG9yIFRydXN0czwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgPHN0cm9uZz5jbGVhciBhbmQgbGVnaWJsZTwvc3Ryb25nPiB0byBwcmV2ZW50IGFueSBkZWxheXMgaW4gcHJvY2Vzc2luZyB5b3VyIHJldHVybi4gWW91IG1heSBzdWJtaXQgdGhlc2UgZG9jdW1lbnRzIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLCBvciBjb250YWN0IHVzIHRvIG1ha2UgYWx0ZXJuYXRpdmUgYXJyYW5nZW1lbnRzIGlmIG5lY2Vzc2FyeS48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFueSBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiT3RoZXIgU2VsZi1FbXBsb3ltZW50IEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk90aGVyIFNlbGYtRW1wbG95bWVudCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdGhlIHByZXNlbmNlIG9mIHNlbGYtZW1wbG95bWVudCBpbmNvbWUgbm90IHJlcG9ydGVkIHRocm91Z2ggMTA5OS1ORUMgZm9ybXMgb3IgYSBTY2hlZHVsZSBLLTEuIFRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgYWNjdXJhdGUgYW5kIG1heGltaXplcyB5b3VyIGJlbmVmaXRzLCBpdCdzIGNydWNpYWwgd2UgZ2F0aGVyIG1vcmUgZGV0YWlscyBhYm91dCB0aGVzZSBzb3VyY2VzIG9mIGluY29tZS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eTo8L3N0cm9uZz4gQnJpZWZseSBkZXNjcmliZSB0aGUgbmF0dXJlIG9mIGVhY2ggYWN0aXZpdHkgZnJvbSB3aGljaCB5b3UgZGVyaXZlIHNlbGYtZW1wbG95bWVudCBpbmNvbWUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2Ygb3BlcmF0aW9uOjwvc3Ryb25nPiBGb3IgZWFjaCBzZWxmLWVtcGxveW1lbnQgYWN0aXZpdHksIHNwZWNpZnkgdGhlIGRhdGVzIG9yIHJhbmdlIG9mIGRhdGVzIGR1cmluZyB3aGljaCB5b3UgZWFybmVkIGluY29tZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBpbmNvbWUgZ2VuZXJhdGVkOjwvc3Ryb25nPiBGb3IgZWFjaCBhY3Rpdml0eSwgcHJvdmlkZSB0aGUgdG90YWwgYW1vdW50IG9mIGluY29tZSBlYXJuZWQgYmVmb3JlIGFueSBleHBlbnNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBpbmN1cnJlZDo8L3N0cm9uZz4gTGlzdCBhbGwgZXhwZW5zZXMgcmVsYXRlZCB0byBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eS4gUGxlYXNlIGNhdGVnb3JpemUgdGhlc2UgZXhwZW5zZXMgKGUuZy4sIG9mZmljZSBzdXBwbGllcywgdHJhdmVsLCBhZHZlcnRpc2luZykuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVjb3JkcyBvciBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZXhpc3RpbmcgcmVjb3JkcyBvciBkb2N1bWVudGF0aW9uIHRoYXQgY29ycm9ib3JhdGUgeW91ciBpbmNvbWUgYW5kIGV4cGVuc2VzLCBzdWNoIGFzIGJhbmsgc3RhdGVtZW50cywgcmVjZWlwdHMsIGludm9pY2VzLCBvciBjb250cmFjdHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IGFtb3VudCBvZiB0YXggeW91IG93ZSBhbmQgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBkZWR1Y3Rpb25zIHRoYXQgY2FuIG1pbmltaXplIHlvdXIgdGF4IGxpYWJpbGl0eS4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHRpbWVseSBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLCBhbmQgd2UgYXJlIGhlcmUgdG8gaGVscCBldmVyeSBzdGVwIG9mIHRoZSB3YXkuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVtcGxveW1lbnQgV2FnZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJFbXBsb3ltZW50IFdhZ2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBlbnRydXN0aW5nIHVzIHdpdGggdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIEFzIHBhcnQgb2Ygb3VyIGNvbXByZWhlbnNpdmUgcmV2aWV3IGFuZCBpbiBvdXIgcXVlc3QgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgd2FnZXMgZnJvbSBlbXBsb3ltZW50IG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuPC9wPlxuICAgIDxwPlRvIHByb2NlZWQgZWZmZWN0aXZlbHksIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5XLTIgRm9ybXM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGNvcGllcyBvZiBhbGwgVy0yIGZvcm1zIHJlY2VpdmVkIGZyb20geW91ciBlbXBsb3llcnMuIFRoaXMgaW5jbHVkZXMgd2FnZXMgZWFybmVkIGZyb20gYWxsIHNvdXJjZXMsIG5vdCBqdXN0IGZyb20gdGhlIFMtQ29ycG9yYXRpb24sIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VmVyaWZpY2F0aW9uIG9mIFMtQ29ycG9yYXRpb24gV2FnZXM6PC9zdHJvbmc+IElmIHdlIGFyZSBhbHNvIGhhbmRsaW5nIHlvdXIgYnVzaW5lc3MgdGF4ZXMgZm9yIGFuIFMtQ29ycG9yYXRpb24sIHdlIGxpa2VseSBoYXZlIHRoZSB3YWdlIGluZm9ybWF0aW9uIGZvciB0aGF0IGVudGl0eS4gSG93ZXZlciwgZm9yIHRob3JvdWdobmVzcyBhbmQgY29tcGxpYW5jZSwgcGxlYXNlIGNvbmZpcm0gaWYgdGhlIHdhZ2VzIGZyb20gdGhlIFMtQ29ycG9yYXRpb24gYXJlIGZ1bGx5IHJlcHJlc2VudGVkIGluIHRoZSBkb2N1bWVudHMgd2UgYWxyZWFkeSBob2xkLiBUaGlzIHdpbGwgaGVscCB1cyB2ZXJpZnkgdGhhdCBhbGwgaW5jb21lIGlzIGFjY3VyYXRlbHkgcmVwb3J0ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBJbmNvbWUgRG9jdW1lbnRzOjwvc3Ryb25nPiBTaG91bGQgeW91IGhhdmUgb3RoZXIgc291cmNlcyBvZiB3YWdlIGluY29tZSAoZS5nLiwgY29udHJhY3Qgd29yaywgYm9udXNlcywgZXRjLikgbm90IGNvdmVyZWQgYnkgdGhlIFctMiBmb3JtcyBwcm92aWRlZCwgcGxlYXNlIGluY2x1ZGUgYW55IDEwOTkgZm9ybXMgb3Igb3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBLaW5kbHkgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJvcGVydHkgb3IgU2VydmljZXMgTGlldSBXYWdlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlByb3BlcnR5L1NlcnZpY2VzIGluIExpZXUgb2YgV2FnZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgcHJvcGVydHkgYW5kL29yIHNlcnZpY2VzIGluIGxpZXUgb2YgdHJhZGl0aW9uYWwgd2FnZXMgZHVyaW5nIHRoZSB0YXggeWVhci4gVGhpcyB0eXBlIG9mIGNvbXBlbnNhdGlvbiBjb25zdGl0dXRlcyB0YXhhYmxlIGluY29tZSBhbmQgbXVzdCBiZSBhY2N1cmF0ZWx5IHJlcG9ydGVkIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgZnVsbHkgY29tcGxpYW50IHdpdGggSVJTIHJlZ3VsYXRpb25zLjwvcD5cbiAgICA8cD5UbyBhY2N1cmF0ZWx5IHJlY29nbml6ZSBhbmQgcmVwb3J0IHRoZXNlIGl0ZW1zIGFzIHRheGFibGUgaW5jb21lLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBQcm9wZXJ0eSBvciBTZXJ2aWNlczo8L3N0cm9uZz4gUHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGFueSBwcm9wZXJ0eSBvciBzZXJ2aWNlcyB5b3UgcmVjZWl2ZWQuIFBsZWFzZSBpbmNsdWRlIHBoeXNpY2FsIGNoYXJhY3RlcmlzdGljcyBmb3IgcHJvcGVydHkgb3IgdGhlIHNjb3BlIG9mIHNlcnZpY2VzIHJlbmRlcmVkLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+RmFpciBNYXJrZXQgVmFsdWUgYXQgVGltZSBvZiBSZWNlaXB0Ojwvc3Ryb25nPiBJbmRpY2F0ZSB0aGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBwcm9wZXJ0eSBvciBzZXJ2aWNlIGF0IHRoZSB0aW1lIHlvdSByZWNlaXZlZCBpdC4gSWYgeW91IGhhdmUgYW55IGFwcHJhaXNhbHMgb3IgZG9jdW1lbnRzIHRvIHN1cHBvcnQgdGhlIEZNViwgcGxlYXNlIGluY2x1ZGUgdGhlbS48L2xpPlxuICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb3IgQWdyZWVtZW50czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZG9jdW1lbnRhdGlvbiBvciB3cml0dGVuIGFncmVlbWVudHMgdGhhdCBkZXRhaWwgdGhlIGFycmFuZ2VtZW50IGZvciByZWNlaXZpbmcgcHJvcGVydHkgb3Igc2VydmljZXMgaW4gbGlldSBvZiB3YWdlcy4gVGhpcyBjYW4gaW5jbHVkZSBjb250cmFjdHMsIGVtYWlscywgb3IgYW55IGZvcm0gb2YgY29tbXVuaWNhdGlvbiB0aGF0IG91dGxpbmVzIHRoZSBhZ3JlZW1lbnQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUocykgb24gd2hpY2ggeW91IHJlY2VpdmVkIHRoZSBwcm9wZXJ0eSBvciBzZXJ2aWNlcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPkVtcGxveWVyL1Byb3ZpZGVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IHByb3ZpZGVkIHRoZSBwcm9wZXJ0eSBvciBzZXJ2aWNlcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgYXMgcG9zc2libGUuIEluY29tcGxldGUgb3IgaW5hY2N1cmF0ZSBpbmZvcm1hdGlvbiBtYXkgbGVhZCB0byBkZWxheXMgaW4gdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybiBvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhlIElSUy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gcmVnYXJkaW5nIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gWW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBjcml0aWNhbCBmb3IgdGhlIHRpbWVseSBhbmQgYWNjdXJhdGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVtcGxveWVlIEFjY291bnRhYmxlIFBsYW5cIixcbiAgICBhY3Rpb25UaXRsZTogXCJFbXBsb3llZSBBY2NvdW50YWJsZSBQbGFuXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGljZWQgeW91J3ZlIG1lbnRpb25lZCBiZWluZyByZWltYnVyc2VkIGZvciBjZXJ0YWluIGV4cGVuc2VzIHVuZGVyIGFuIEVtcGxveWVlIEFjY291bnRhYmxlIFBsYW4uIFRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcmVpbWJ1cnNlbWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkEgY29weSBvZiB0aGUgZm9ybWFsIHdyaXR0ZW4gQWNjb3VudGFibGUgUGxhbiBwcm92aWRlZCBieSB5b3VyIGVtcGxveWVyLiBUaGlzIHNob3VsZCBvdXRsaW5lIHRoZSBleHBlbnNlIGFsbG93YW5jZSBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcmVpbWJ1cnNlbWVudCBwb2xpY3kuPC9saT5cbiAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIGZyb20geW91ciBlbXBsb3llciBjb25maXJtaW5nIHlvdXIgcGFydGljaXBhdGlvbiBpbiB0aGUgQWNjb3VudGFibGUgUGxhbi48L2xpPlxuICAgICAgICA8bGk+RGV0YWlscyBvZiB0aGUgZXhwZW5zZXMgcmVpbWJ1cnNlZCB1bmRlciB0aGUgcGxhbiwgaW5jbHVkaW5nIGRhdGVzLCBhbW91bnRzLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPlByb29mIG9mIGV4cGVuc2UgKHJlY2VpcHRzIG9yIGludm9pY2VzKSBwcm92aWRlZCB0byB5b3VyIGVtcGxveWVyIGZvciByZWltYnVyc2VtZW50IHVuZGVyIHRoZSBwbGFuLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIG9yIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIHRoZSByZWltYnVyc2VtZW50cyBvciB0aGUgQWNjb3VudGFibGUgUGxhbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHNlbmQgdXMgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB3ZSBjYW4gcHJvY2VlZCBzbW9vdGhseSB3aXRoIHlvdXIgdGF4IHJldHVybiBwcmVwYXJhdGlvbi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZW5zdXJpbmcgYWxsIGZvcm1zIG9mIGNvbXBlbnNhdGlvbiwgaW5jbHVkaW5nIHRheGFibGUgZnJpbmdlIGJlbmVmaXRzLCBhcmUgYWNjdXJhdGVseSByZXBvcnRlZCBvbiB5b3VyIHRheCByZXR1cm5zLiBCYXNlZCBvbiBvdXIgcHJldmlvdXMgY29tbXVuaWNhdGlvbiwgaXQgYXBwZWFycyB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgYmVuZWZpdHMgdGhhdCBuZWVkIHRvIGJlIHJldmlld2VkIGZ1cnRoZXIuIFRvIGFzc2lzdCB5b3UgcHJvcGVybHksIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBkZXRhaWxzOjwvcD5cbjxvbD5cbiAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgZWFjaCBiZW5lZml0IHJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBmcmluZ2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21wYW55IGNhcnMsIG1lbWJlcnNoaXBzLCBlZHVjYXRpb25hbCBhc3Npc3RhbmNlLCBldGMuPC9saT5cbiAgPGxpPjxzdHJvbmc+VmFsdWUgb2YgZWFjaCBiZW5lZml0Ojwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBiZW5lZml0LiBJZiB5b3UncmUgdW5zdXJlLCBwbGVhc2UgcHJvdmlkZSBhbiBlc3RpbWF0ZSBhbmQgdGhlIGJhc2lzIGZvciB0aGlzIGVzdGltYXRlLjwvbGk+XG4gIDxsaT48c3Ryb25nPkFueSBhbW91bnRzIGNvbnRyaWJ1dGVkIGJ5IHlvdTo8L3N0cm9uZz4gSWYgeW91IG1hZGUgY29udHJpYnV0aW9ucyB0b3dhcmQgdGhlIGNvc3Qgb2YgYW55IGJlbmVmaXQsIHBsZWFzZSBzcGVjaWZ5IHRoZSBhbW91bnRzIGFuZCBmb3Igd2hpY2ggYmVuZWZpdHMuPC9saT5cbiAgPGxpPjxzdHJvbmc+QmVuZWZpdCBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHN1Y2ggYXMgc3RhdGVtZW50cywgYWdyZWVtZW50cywgb3IgcmVjZWlwdHMuPC9saT5cbiAgPGxpPjxzdHJvbmc+RGF0ZXM6PC9zdHJvbmc+IFRoZSBwZXJpb2QgZHVyaW5nIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBiZW5lZml0cy4gSW5jbHVkZSBzcGVjaWZpYyBkYXRlcyBpZiBwb3NzaWJsZS48L2xpPlxuICA8bGk+PHN0cm9uZz5FbXBsb3llciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGVtcGxveWVyKHMpIHByb3ZpZGluZyB0aGVzZSBiZW5lZml0cy48L2xpPlxuPC9vbD5cbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyB0aGUgdGF4YWJsZSB2YWx1ZSBvZiB0aGVzZSBmcmluZ2UgYmVuZWZpdHMgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG48cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTm9uIFRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uIFRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGZpbmFsaXppbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIGlkZW50aWZpZWQgcG90ZW50aWFsIG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyB0aGF0IG1heSBhcHBseSB0byB5b3VyIHNpdHVhdGlvbi4gVG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgb3B0aW1pemUgeW91ciB0YXggb3V0Y29tZSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYW55IG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQ6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIGVhY2ggYmVuZWZpdDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgbWF5IGluY2x1ZGUgaGVhbHRoIHNhdmluZ3MgYWNjb3VudHMgKEhTQXMpLCBlbXBsb3llZSBkaXNjb3VudHMsIHB1YmxpYyB0cmFuc2l0IHBhc3NlcywgZXRjLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5WYWx1ZSBvZiBlYWNoIGJlbmVmaXQ6PC9zdHJvbmc+IFRoZSBmYWlyIG1hcmtldCB2YWx1ZSAoRk1WKSBvZiBlYWNoIGJlbmVmaXQuIEZvciBub24tdGF4YWJsZSBiZW5lZml0cywgdGhpcyBoZWxwcyBpbiByZWNvcmQta2VlcGluZyBhbmQgY29uZmlybWluZyBleGVtcHRpb24gc3RhdHVzLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Db250cmlidXRpb24gYW1vdW50cywgaWYgYW55Ojwvc3Ryb25nPiBJZiB5b3UgaGF2ZSBjb250cmlidXRlZCB0b3dhcmRzIGFueSBvZiB0aGVzZSBiZW5lZml0cywgaW5kaWNhdGUgdGhlIGFtb3VudHMgYW5kIGZvciB3aGljaCBiZW5lZml0cy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+QmVuZWZpdCBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBjb3Jyb2JvcmF0ZSB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHN1Y2ggYXMgc3RhdGVtZW50cywgYWdyZWVtZW50cywgb3IgcmVjZWlwdHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSB0aW1lZnJhbWUgZHVyaW5nIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBiZW5lZml0cy4gSW5jbHVkZSBhcyBwcmVjaXNlIGRhdGVzIGFzIHBvc3NpYmxlLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBvciBwcm92aWRlciBpbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgYW5kIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgZW1wbG95ZXIocykgb3IgdGhpcmQtcGFydHkgcHJvdmlkZXIocykgb2ZmZXJpbmcgdGhlc2UgYmVuZWZpdHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uIGhlbHBzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCB0aGF0IHlvdSByZWNlaXZlIHRoZSBmdWxsIGFkdmFudGFnZSBvZiBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMuIFBsZWFzZSBsZXQgdXMga25vdyBpZiB5b3UgbmVlZCBhbnkgaGVscCBpZGVudGlmeWluZyBvciBkb2N1bWVudGluZyB0aGVzZSBiZW5lZml0cy48L3A+XG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgaGlnaGx5IGFwcHJlY2lhdGVkIGFzIHdlIHN0cml2ZSB0byBjb21wbGV0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJWZXRlcmFuIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiVkEgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnQgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IHJldHVybiwgd2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIFZldGVyYW4gQmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYmVuZWZpdHMsIHdlIGtpbmRseSByZXF1ZXN0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxuICAgIDxwPlRvIGFzc2lzdCB1cyBpbiB0aGlzIHRhc2ssIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiB0aGUgVmV0ZXJhbiBCZW5lZml0cyB5b3UgcmVjZWl2ZWQsIGluY2x1ZGluZyBhbnkgZGlzYWJpbGl0eSwgZWR1Y2F0aW9uLCBhbmQgcGVuc2lvbiBiZW5lZml0cy48L2xpPlxuICAgICAgICA8bGk+T2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCB0eXBlIG9mIGJlbmVmaXQgcmVjZWl2ZWQsIHN1Y2ggYXMgYXdhcmQgbGV0dGVycyBvciBzdGF0ZW1lbnRzIGZyb20gdGhlIERlcGFydG1lbnQgb2YgVmV0ZXJhbnMgQWZmYWlycyAoVkEpLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgY29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgVkEgb3Igb3RoZXIgcmVsZXZhbnQgZW50aXRpZXMgcmVnYXJkaW5nIHRoZSB0YXhhYmlsaXR5IG9mIHlvdXIgYmVuZWZpdHMuPC9saT5cbiAgICAgICAgPGxpPlRvdGFsIGFtb3VudCByZWNlaXZlZCBmb3IgZWFjaCBiZW5lZml0IHRocm91Z2hvdXQgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5Bbnkgb3RoZXIgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHByb3ZpZGUgY2xhcml0eSBvbiB0aGUgbmF0dXJlIGFuZCBhbW91bnQgb2YgeW91ciBWZXRlcmFuIEJlbmVmaXRzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHdoaWNoIGJlbmVmaXRzIGFyZSB0YXhhYmxlIGFuZCBlbnN1cmluZyB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGUgYW5kIGFjY3VyYXRlLiBQbGVhc2Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMaWZlIEluc3VyYW5jZSBQYXltZW50c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkxpZmUgSW5zdXJhbmNlIFBheW1lbnRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIG1lbnRpb24gb2YgcmVjZWl2aW5nIGxpZmUgaW5zdXJhbmNlIHBheW1lbnRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgdGhlc2UgcHJvY2VlZHMgYXJlIGluZGVlZCBub24tdGF4YWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHJlY2VpdmVkIGZyb20gbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMuPC9saT5cbiAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgcGVydGFpbmluZyB0byB0aGUgbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMuPC9saT5cbiAgICAgIDxsaT5UaGUgbmFtZSBvZiB0aGUgaW5zdXJlZCBpbmRpdmlkdWFsIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XG4gICAgICA8bGk+QW55IGNvbW11bmljYXRpb25zIG9yIGxldHRlcnMgZnJvbSB0aGUgaW5zdXJhbmNlIGNvbXBhbnkgcmVnYXJkaW5nIHRoZSB0YXggc3RhdHVzIG9mIHRoZXNlIHBheW1lbnRzLjwvbGk+XG4gICAgICA8bGk+RGV0YWlscyByZWdhcmRpbmcgaWYgdGhlIHBvbGljeSB3YXMgcHVyY2hhc2VkIHdpdGggYWZ0ZXItdGF4IG9yIHByZS10YXggZG9sbGFycy48L2xpPlxuICAgICAgPGxpPklmIGFueSBwb3J0aW9uIG9mIHRoZSBsaWZlIGluc3VyYW5jZSBwYXltZW50IHdhcyBhbiBpbnZlc3RtZW50IHJldHVybiwgcGxlYXNlIHByb3ZpZGUgcmVsYXRlZCBkb2N1bWVudHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gZ3VhcmFudGVlIHRoZSBhY2N1cmFjeSBhbmQgaW50ZWdyaXR5IG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zLCB3ZSBub3RlZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIE1lZGljYXJlIFdhaXZlciBQYXltZW50cyB1bmRlciB0aGUgZGlmZmljdWx0eS1vZi1jYXJlIHByb3Zpc2lvbnMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gZW5zdXJlIHdlIG1heGltaXplIHlvdXIgZWxpZ2libGUgaW5jb21lIGV4Y2x1c2lvbnMsIGl0J3MgY3J1Y2lhbCB3ZSB2ZXJpZnkgY2VydGFpbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBsaXZpbmcgYXJyYW5nZW1lbnQsIGFzIHBlciBJUlMgZ3VpZGVsaW5lcy48L3A+XG4gICAgPHA+VG8gYXNzaXN0IHVzIGluIGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBwYXltZW50cyBxdWFsaWZ5IGZvciBpbmNvbWUgZXhjbHVzaW9uLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jZTo8L3N0cm9uZz4gRG9jdW1lbnRzIHByb3ZpbmcgdGhhdCB5b3UgYW5kIHRoZSBpbmRpdmlkdWFsIHVuZGVyIGNhcmUgc2hhcmVkIHRoZSBzYW1lIHByaW1hcnkgcmVzaWRlbmNlIGR1cmluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBwYXltZW50cy4gVGhpcyBjb3VsZCBpbmNsdWRlIHV0aWxpdHkgYmlsbHMsIGEgcmVudGFsIGFncmVlbWVudCwgb3IgaG9tZW93bmVyJ3MgaW5zdXJhbmNlIGluIGJvdGggb2YgeW91ciBuYW1lcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBDYXJlIFJlY2lwaWVudDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlcnNvbiByZWNlaXZpbmcgY2FyZSwgaW5jbHVkaW5nIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UgYW5kIGFueSBkb2N1bWVudGF0aW9uIHRoYXQgaWRlbnRpZmllcyB0aGVpciBuZWVkIGZvciBjYXJlIChlLmcuLCBhIGxldHRlciBmcm9tIGEgaGVhbHRoY2FyZSBwcm92aWRlcikuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgcmVjb3JkcyBvZiB0aGUgTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzIHlvdSByZWNlaXZlZCwgYXMgdGhpcyB3aWxsIGhlbHAgdXMgZGV0ZXJtaW5lIHRoZSBleGFjdCBhbW91bnRzIGFuZCB0aGUgcGVyaW9kcyBjb3ZlcmVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBGb3JtYWwgQWdyZWVtZW50cyBvciBDb250cmFjdHM6PC9zdHJvbmc+IElmIHRoZXJlIHdhcyBhIGZvcm1hbCBhZ3JlZW1lbnQgb3IgY29udHJhY3QgZGV0YWlsaW5nIHRoZSBjYXJlIHByb3ZpZGVkLCBwbGVhc2UgaW5jbHVkZSB0aGlzIGFzIHdlbGwuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaWYgdGhlIGNhcmUgYXJyYW5nZW1lbnQgd2FzIGZhY2lsaXRhdGVkIHRocm91Z2ggYSBzdGF0ZSBvciB0aGlyZC1wYXJ0eSBhZ2VuY3kuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgdG8gZW5zdXJlIHdlIGNvbXBseSB3aXRoIHRheGluZyBhdXRob3JpdGllcyB3aGlsZSBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgeW91ciBmaW5hbmNlcy4gSWYgYW55IG9mIHRoZXNlIHJlcXVpcmVtZW50cyBwb3NlIGEgZGlmZmljdWx0eSBvciBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBPdXIgZ29hbCBpcyB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2VzcyBhbmQgb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNhYmlsaXR5IEluc3VyYW5jZSBCZW5lZml0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkRpc2FiaWxpdHkgSW5zdXJhbmNlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGJlbmVmaXRzIGFyZSBlbGlnaWJsZSB0byBiZSBleGNsdWRlZCBmcm9tIHlvdXIgaW5jb21lLCB3ZSByZXF1aXJlIGZ1cnRoZXIgZGV0YWlscyByZWdhcmRpbmcgdGhlIGluc3VyYW5jZSBwcmVtaXVtcyBwYWlkLjwvcD5cbiAgICA8cD5LaW5kbHkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+RGV0YWlsZWQgc3RhdGVtZW50cyBvciBkb2N1bWVudGF0aW9uIHNob3dpbmcgdGhlIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIHJlY2VpdmVkLjwvbGk+XG4gICAgICAgIDxsaT5Db25maXJtYXRpb24gb24gd2hvIHBhaWQgdGhlIGluc3VyYW5jZSBwcmVtaXVtcyAoeW91IG9yIHlvdXIgZW1wbG95ZXIpLjwvbGk+XG4gICAgICAgIDxsaT5JZiB5b3UgaGF2ZSBjb250cmlidXRlZCB0byB0aGUgcGF5bWVudCBvZiB0aGUgcHJlbWl1bXM6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgeW91IHBhaWQgdG93YXJkcyB0aGUgcHJlbWl1bXMuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IHN1cHBvcnRpbmcgZG9jdW1lbnRzIGZvciB0aGUgcGF5bWVudHMgbWFkZSBieSB5b3UgKHJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cykuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5JZiB5b3VyIGVtcGxveWVyIGNvbnRyaWJ1dGVkIHRvIHRoZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtczpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCBwYWlkIGJ5IHlvdXIgZW1wbG95ZXIgdG93YXJkcyB0aGUgcHJlbWl1bXMuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGRvY3VtZW50cyBpbmRpY2F0aW5nIGVtcGxveWVyIGNvbnRyaWJ1dGlvbnMgKHBheSBzdHVicywgZW1wbG95ZXIgbGV0dGVycykuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGRldGVybWluZSB0aGUgdGF4YWJsZSBwb3J0aW9uLCBpZiBhbnksIG9mIHlvdXIgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMuIFByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIHdpbGwgaGVscCB1cyBlbnN1cmUgdGhlIGFjY3VyYWN5IG9mIHlvdXIgdGF4IGZpbGluZyBhbmQgcG90ZW50aWFsbHkgbG93ZXIgeW91ciB0YXhhYmxlIGluY29tZS48L3A+XG4gICAgPHA+UGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBpZiB3ZSBjYW4gYmUgb2YgZnVydGhlciBhc3Npc3RhbmNlLiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGlzYWJpbGl0eSBSZXRpcmVtZW50IEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzYWJpbGl0eSBSZXRpcmVtZW50IEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIEluIG9yZGVyIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoZXNlIGJlbmVmaXRzLCB3ZSBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscy4gVGhlIHRheGFiaWxpdHkgb2YgdGhlc2UgYmVuZWZpdHMgY2FuIGRlcGVuZCBvbiB3aGVuIHlvdSB0b29rIHJldGlyZW1lbnQgZHVlIHRvIGRpc2FiaWxpdHkuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJldGlyZW1lbnQ6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIHlvdSByZXRpcmVkIGR1ZSB0byBkaXNhYmlsaXR5LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgRGlzYWJpbGl0eSBSZXRpcmVtZW50Ojwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB5b3UgaGF2ZSB0aGF0IGNvbmZpcm1zIHlvdXIgcmV0aXJlbWVudCB3YXMgZHVlIHRvIGRpc2FiaWxpdHkuIFRoaXMgbWF5IGluY2x1ZGUgbGV0dGVycyBmcm9tIHlvdXIgZW1wbG95ZXIsIHRoZSByZXRpcmVtZW50IHBsYW4sIG9yIG1lZGljYWwgcmVjb3Jkcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIEJlbmVmaXRzIFJlY2VpdmVkOjwvc3Ryb25nPiBTcGVjaWZpYyBhbW91bnRzIGFuZCB0aGUgc291cmNlIG9mIHRoZSBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMuIFBsZWFzZSBpbmNsdWRlIGFueSByZWxhdGVkIGRvY3VtZW50cyBzdWNoIGFzIHN0YXRlbWVudHMgb3Igbm90aWNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFctMiBvciAxMDk5IEZvcm1zOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZWQgYW55IHdhZ2VzIG9yIGRpc2FiaWxpdHkgcGF5bWVudHMgdGhhdCB3ZXJlIHJlcG9ydGVkIG9uIFctMiBvciAxMDk5IGZvcm1zIGluIHRoZSB5ZWFyIG9mIHlvdXIgcmV0aXJlbWVudCwgcGxlYXNlIHByb3ZpZGUgdGhlc2UgZm9ybXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IENvcnJlc3BvbmRlbmNlIGZyb20gdGhlIElSUzo8L3N0cm9uZz4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgYW55IG5vdGljZXMgb3IgbGV0dGVycyBmcm9tIHRoZSBJUlMgcmVnYXJkaW5nIHlvdXIgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzLCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMgb2YgdGhlc2UgY29tbXVuaWNhdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoZSBhYm92ZSBpbmZvcm1hdGlvbiBpcyB2aXRhbCB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzIHdpbGwgYWlkIHVzIGluIGRldGVybWluaW5nIHRoZWlyIHRheGFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoYXQgeW91ciB0YXggb2JsaWdhdGlvbnMgYXJlIHByZWNpc2VseSBjYWxjdWxhdGVkLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgaGlnaGx5IGFwcHJlY2lhdGVkLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDbGVyZ3kgV2FnZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDbGVyZ3kgV2FnZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgVy0yIHdhZ2VzIGFzIGEgY2xlcmd5IG1lbWJlci4gVG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgdG8gcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIHJlcXVpcmUgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGNvbXBlbnNhdGlvbiBwYWNrYWdlLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PGI+Vy0yIEZvcm06PC9iPiBJZiBub3QgYWxyZWFkeSBwcm92aWRlZCwgaW5jbHVkZSBhbnkgVy0yIGZvcm1zIGlzc3VlZCBieSB5b3VyIHJlbGlnaW91cyBpbnN0aXR1dGlvbi48L2xpPlxuICAgICAgICA8bGk+PGI+SG91c2luZyBBbGxvd2FuY2UgRG9jdW1lbnRhdGlvbjo8L2I+IERldGFpbGVkIHN0YXRlbWVudCBvciBsZXR0ZXIgZnJvbSB5b3VyIHJlbGlnaW91cyBpbnN0aXR1dGlvbiBzcGVjaWZ5aW5nIHRoZSBhbW91bnQgZGVzaWduYXRlZCBhcyBob3VzaW5nIGFsbG93YW5jZS48L2xpPlxuICAgICAgICA8bGk+PGI+U2VsZi1FbXBsb3ltZW50IFRheDo8L2I+IENvbmZpcm1hdGlvbiBvbiB3aGV0aGVyIHlvdSBoYXZlIHRha2VuIGEgdm93IG9mIHBvdmVydHkgKGlmIGFwcGxpY2FibGUpLCBvciBhbnkgZG9jdW1lbnRhdGlvbiByZWxhdGVkIHRvIG9wdGluZyBvdXQgb2Ygc2VsZi1lbXBsb3ltZW50IHRheC48L2xpPlxuICAgICAgICA8bGk+PGI+RXhwZW5zZSBSZWltYnVyc2VtZW50czo8L2I+IERvY3VtZW50YXRpb24gc2hvd2luZyBhbnkgZXhwZW5zZSByZWltYnVyc2VtZW50cyByZWNlaXZlZCB1bmRlciBhbiBhY2NvdW50YWJsZSBwbGFuLjwvbGk+XG4gICAgICAgIDxsaT48Yj5PdGhlciBDb21wZW5zYXRpb246PC9iPiBJbmZvcm1hdGlvbiBvbiBhbnkgb3RoZXIgY29tcGVuc2F0aW9uIHJlY2VpdmVkIGluIHlvdXIgY2FwYWNpdHkgYXMgY2xlcmd5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvdmUgb2ZmZXJpbmdzLCBmZWVzIGZvciBzZXJ2aWNlcyAod2VkZGluZ3MsIGZ1bmVyYWxzLCBldGMuKSwgYW5kIHBhcnNvbmFnZSBhbGxvd2FuY2VzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGFjY3VyYXRlbHkgcmVwcmVzZW50IHlvdXIgZWFybmluZ3MgYW5kIHRvIGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGRlZHVjdGlvbnMgY29ycmVjdGx5LiBZb3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IHdpbGwgaGVscCBlbnN1cmUgdGhhdCB5b3VyIHRheCByZXR1cm5zIGFyZSBwcmVwYXJlZCBpbiBhIHRpbWVseSBhbmQgZWZmaWNpZW50IG1hbm5lci48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoaXMgcHJvY2Vzcy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnRlcmVzdCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJJbnRlcmVzdCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiByZXZpZXdpbmcgeW91ciBmaW5hbmNpYWwgYWN0aXZpdGllcyBmb3IgdGhlIHRheCB5ZWFyLCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBpbnRlcmVzdCBpbmNvbWUuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoaXMgaW5jb21lIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBhZGRpdGlvbmFsIGRldGFpbHMuIEtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48Yj5Tb3VyY2Ugb2YgSW50ZXJlc3QgSW5jb21lOjwvYj4gUGxlYXNlIHNwZWNpZnkgdGhlIGluc3RpdHV0aW9uKHMpIG9yIGVudGl0eShpZXMpIGZyb20gd2hpY2ggeW91IHJlY2VpdmVkIGludGVyZXN0IGluY29tZSAoZS5nLiwgYmFua3MsIGNyZWRpdCB1bmlvbnMpLjwvbGk+XG4gICAgICA8bGk+PGI+QW1vdW50IFJlY2VpdmVkOjwvYj4gQ29uZmlybSB0aGUgdG90YWwgYW1vdW50IG9mIGludGVyZXN0IGluY29tZSByZWNlaXZlZCBmcm9tIGVhY2ggc291cmNlIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgIDxsaT48Yj5BY2NvdW50IFR5cGVzOjwvYj4gSWRlbnRpZnkgdGhlIHR5cGUgb2YgYWNjb3VudHMgdGhhdCBnZW5lcmF0ZWQgdGhlIGludGVyZXN0IChlLmcuLCBzYXZpbmdzLCBjaGVja2luZywgY2VydGlmaWNhdGVzIG9mIGRlcG9zaXQpLjwvbGk+XG4gICAgICA8bGk+PGI+VGF4IEZvcm1zIFJlY2VpdmVkOjwvYj4gTGlzdCBhbnkgdGF4IGZvcm1zIHlvdSBoYXZlIHJlY2VpdmVkIHJlbGF0ZWQgdG8gaW50ZXJlc3QgaW5jb21lLCBzdWNoIGFzIEZvcm0gMTA5OS1JTlQgb3IgRm9ybSAxMDk5LU9JRC48L2xpPlxuICAgICAgPGxpPjxiPkZvcmVpZ24gSW50ZXJlc3Q6PC9iPiBJZiBhbnkgaW50ZXJlc3QgaW5jb21lIHdhcyBlYXJuZWQgZnJvbSBmb3JlaWduIGFjY291bnRzIG9yIHNvdXJjZXMsIHBsZWFzZSBwcm92aWRlIGRldGFpbHMsIGluY2x1ZGluZyB0aGUgY291bnRyeSBvZiBvcmlnaW4uPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIHdpbGwgZW5hYmxlIHVzIHRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgaW50ZXJlc3QgaW5jb21lIGFuZCBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBjb3JyZWN0LiBZb3UgY2FuIGF0dGFjaCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYnkgcmVwbHlpbmcgdG8gdGhpcyBlbWFpbCBvciB1cGxvYWRpbmcgdGhlbSBkaXJlY3RseSB0byBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJhbmsgQWNjb3VudCBPcGVuaW5nIEdpZnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQmFuayBBY2NvdW50IE9wZW5pbmcgR2lmdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcmV2aWV3aW5nIHlvdXIgdGF4IHNpdHVhdGlvbiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBhIGdpZnQgZm9yIG9wZW5pbmcgYW4gYWNjb3VudCBhdCBhIGZpbmFuY2lhbCBpbnN0aXR1dGlvbi4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheGFiaWxpdHkgb2YgdGhpcyBpbmNvbWUsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPlRoZSBuYW1lIG9mIHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb24gd2hlcmUgdGhlIGFjY291bnQgd2FzIG9wZW5lZC48L2xpPlxuICAgICAgICA8bGk+VGhlIGRhdGUgdGhlIGFjY291bnQgd2FzIG9wZW5lZC48L2xpPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgZ2lmdCByZWNlaXZlZCAoZS5nLiwgY2FzaCwgbWVyY2hhbmRpc2UsIG9yIHNlcnZpY2VzKS48L2xpPlxuICAgICAgICA8bGk+VGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIHRoZSBnaWZ0IGF0IHRoZSB0aW1lIGl0IHdhcyByZWNlaXZlZC48L2xpPlxuICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiByZWdhcmRpbmcgdGhlIGdpZnQgKGUuZy4sIGEgbGV0dGVyLCBlbWFpbCBjb25maXJtYXRpb24sIG9yIHN0YXRlbWVudCBpbmRpY2F0aW5nIHRoZSB2YWx1ZSBvZiB0aGUgZ2lmdCkuPC9saT5cbiAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiBpZiB5b3UgaGF2ZSByZWNlaXZlZCBtb3JlIHRoYW4gb25lIGdpZnQgZm9yIG9wZW5pbmcgYWNjb3VudHMgd2l0aGluIHRoZSBzYW1lIHRheCB5ZWFyLCBhbmQgaWYgc28sIHRoZSBkZXRhaWxzIGZvciBlYWNoLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHdlIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgY29tcGx5IHdpdGggYWxsIElSUyByZXF1aXJlbWVudHMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDRCBJbnRlcmVzdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkNEIEludGVyZXN0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBvZiB5b3VyIGluY29tZSBmcm9tIENlcnRpZmljYXRlcyBvZiBEZXBvc2l0IChDRHMpIGZvciB0aGUgdGF4IHllYXIsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uIFRoaXMgaXMgZXNzZW50aWFsIHRvIGNvbXBseSB3aXRoIElSUyByZWd1bGF0aW9ucyBhbmQgdG8gcG90ZW50aWFsbHkgb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+TmFtZSBvZiB0aGUgQmFuayBvciBGaW5hbmNpYWwgSW5zdGl0dXRpb246PC9zdHJvbmc+IFdoZXJlIHRoZSBDRCBpcyBoZWxkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgTnVtYmVyOjwvc3Ryb25nPiBUaGlzIGhlbHBzIGluIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBDRC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBJbnRlcmVzdCBFYXJuZWQ6PC9zdHJvbmc+IFRoZSBhbW91bnQgb2YgaW50ZXJlc3QgZWFybmVkIGZyb20gdGhlIENEIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q0QgVGVybTo8L3N0cm9uZz4gVGhlIGR1cmF0aW9uIG9yIHRlcm0gb2YgdGhlIENEIChlLmcuLCA2IG1vbnRocywgMSB5ZWFyKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFB1cmNoYXNlOjwvc3Ryb25nPiBXaGVuIHlvdSBvcmlnaW5hbGx5IGFjcXVpcmVkIHRoZSBDRC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5NYXR1cml0eSBEYXRlOjwvc3Ryb25nPiBXaGVuIHRoZSBDRCByZWFjaGVkIG9yIHdpbGwgcmVhY2ggaXRzIGZ1bGwgdGVybS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5LUlOVCBGb3Jtczo8L3N0cm9uZz4gSWYgcmVjZWl2ZWQsIHBsZWFzZSBpbmNsdWRlIGNvcGllcyBvZiBhbnkgMTA5OS1JTlQgZm9ybXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDRCBpbnRlcmVzdC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy4gWW91IG1heSB1cGxvYWQgdGhlIGRvY3VtZW50cyBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBwcm92aWRlIHRoZW0gdmlhIGVtYWlsLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheCBFeGVtcHQgSW50ZXJlc3RcIixcbiAgICBhY3Rpb25UaXRsZTogXCJUYXggRXhlbXB0IEludGVyZXN0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHRheC1leGVtcHQgaW50ZXJlc3QgZHVyaW5nIHRoZSB0YXggeWVhciwgcG9zc2libHkgZnJvbSBtdW5pY2lwYWwgYm9uZHMgb3Igc2ltaWxhciBpbnZlc3RtZW50cy4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlN0YXRlbWVudHMgb2YgVGF4LUV4ZW1wdCBJbnRlcmVzdDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIDEwOTktSU5UIGZvcm1zIG9yIGVxdWl2YWxlbnQgc3RhdGVtZW50cyB0aGF0IGRldGFpbCB5b3VyIHRheC1leGVtcHQgaW50ZXJlc3QgaW5jb21lIGZvciB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiBJc3N1aW5nIEVudGl0aWVzOjwvc3Ryb25nPiBBIGxpc3Qgb3Igc3RhdGVtZW50IGlkZW50aWZ5aW5nIHRoZSBlbnRpdGllcyB0aGF0IGlzc3VlZCB0aGUgYm9uZHMgb3Igc2ltaWxhciBpbnZlc3RtZW50cy4gVGhpcyBpbmNsdWRlcyBtdW5pY2lwYWwsIHN0YXRlLCBvciBmZWRlcmFsIGVudGl0aWVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgRGV0YWlsOjwvc3Ryb25nPiBBIGJyZWFrZG93biBvZiB0aGUgaW52ZXN0bWVudHMgY29udHJpYnV0aW5nIHRvIHRheC1leGVtcHQgaW50ZXJlc3QuIFRoaXMgc2hvdWxkIGluY2x1ZGUgdGhlIHB1cmNoYXNlIGRhdGUsIHB1cmNoYXNlIGFtb3VudHMsIGFuZCBhbnkgcmVsYXRlZCBtYXR1cml0eSBkYXRlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ccm9rZXJhZ2UgQWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgeW91ciBicm9rZXJhZ2UgYWNjb3VudCBzdGF0ZW1lbnRzIHRoYXQgZGV0YWlsIHRyYW5zYWN0aW9ucyBhbmQgaG9sZGluZ3MgaW4gdGF4LWV4ZW1wdCBpbnZlc3RtZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BTVQgKEFsdGVybmF0aXZlIE1pbmltdW0gVGF4KSBDb25zaWRlcmF0aW9uOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIGRvY3VtZW50YXRpb24gaW5kaWNhdGluZyB3aGV0aGVyIGFueSBvZiB0aGUgdGF4LWV4ZW1wdCBpbnRlcmVzdCBpcyBzdWJqZWN0IHRvIHRoZSBBbHRlcm5hdGl2ZSBNaW5pbXVtIFRheC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhbiBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kIEludGVyZXN0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kIEludGVyZXN0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHBhcnQgb2Ygb3VyIGNvbnRpbnVlZCBlZmZvcnQgdG8gcHJvdmlkZSB5b3Ugd2l0aCB0aGUgYmVzdCB0YXggcHJlcGFyYXRpb24gc2VydmljZXMsIHdlIGFyZSByZWFjaGluZyBvdXQgdG8gZ2F0aGVyIG5lY2Vzc2FyeSBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gdGhlIGludGVyZXN0IHlvdSBtYXkgaGF2ZSByZWNlaXZlZCBmcm9tIHJlZGVlbWluZyBhbiBFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQuPC9wPlxuXG4gICAgPHA+VG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIGVsaWdpYmlsaXR5IGZvciBleGVtcHRpb24gYW5kIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIElSUywgd2Uga2luZGx5IHJlcXVlc3QgeW91IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBjb3B5IG9mIEZvcm0gMTA5OS1JTlQgb3Igc2ltaWxhciBzdGF0ZW1lbnQgcHJvdmlkZWQgYnkgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiwgaW5kaWNhdGluZyB0aGUgYW1vdW50IG9mIGludGVyZXN0IHJlY2VpdmVkIGZyb20gdGhlIEVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZC48L2xpPlxuICAgICAgICA8bGk+RGV0YWlsZWQgcmVjb3JkcyBvZiB0aGUgRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kcyByZWRlZW1lZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkJvbmQgc2VyaWFsIG51bWJlcnM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Jc3N1ZSBkYXRlczwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlJlZGVtcHRpb24gZGF0ZXM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5SZWNlaXB0cyBvciBkb2N1bWVudGF0aW9uIGZvciBxdWFsaWZpZWQgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgcGFpZCBkdXJpbmcgdGhlIHllYXIsIGluY2x1ZGluZzpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+VHVpdGlvbiBhbmQgZmVlczwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkNvdXJzZSBtYXRlcmlhbHM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgb3RoZXIgcmVxdWlyZWQgZXhwZW5zZXMgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZSBhdCBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgZW5yb2xsbWVudCBmcm9tIGFuIGVsaWdpYmxlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uIGZvciB0aGUgYmVuZWZpY2lhcnkgb2YgdGhlIGJvbmQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheGFiaWxpdHkgb2YgdGhlIGludGVyZXN0IGluY29tZSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemluZyB5b3VyIHRheCBiZW5lZml0cy4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCByZWNvbW1lbmQgY29tcGlsaW5nIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXZpZGVuZCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJEaXZpZGVuZCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZGl2aWRlbmQgaW5jb21lIG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluY29tZSBhbmQgb3B0aW1pemUgeW91ciB0YXggc2l0dWF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb24gYW5kIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+QWxsIDEwOTktRElWIGZvcm1zIHJlY2VpdmVkIGZyb20gY29ycG9yYXRpb25zIG9yIG11dHVhbCBmdW5kcy4gVGhpcyBpbmNsdWRlcyBkaXN0cmlidXRpb25zIG9mIGNhc2gsIHN0b2NrLCBvciBvdGhlciBwcm9wZXJ0eS48L2xpPlxuICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGRldGFpbHMgcmVnYXJkaW5nIGFueSBmb3JlaWduIGRpdmlkZW5kcyBpbmNsdWRpbmcgdGhlIGFtb3VudCBpbiBmb3JlaWduIGN1cnJlbmN5LCB0aGUgY291bnRyeSBvZiBvcmlnaW4sIGFuZCBhbnkgZm9yZWlnbiB0YXggcGFpZC48L2xpPlxuICAgICAgPGxpPkZvciBkaXZpZGVuZHMgcmVpbnZlc3RlZCwgcGxlYXNlIHByb3ZpZGUgc3RhdGVtZW50cyBvciBjb25maXJtYXRpb25zIHNob3dpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XG4gICAgICA8bGk+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGRpdmlkZW5kcyBub3QgY292ZXJlZCBieSBhIDEwOTktRElWLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlIHRvIGF2b2lkIGFueSBwcm9jZXNzaW5nIGRlbGF5cy48L3A+XG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgYXBwcmVjaWF0ZWQgYXMgaXQgd2lsbCBoZWxwIHVzIGluIGNvbXBsZXRpbmcgeW91ciB0YXggcHJlcGFyYXRpb25zIGVmZmljaWVudGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc3Bvc2VkIENhcGl0YWwgQXNzZXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzcG9zZWQgQ2FwaXRhbCBBc3NldHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIGluZGljYXRlZCBkaXNwb3Npbmcgb2YgY2FwaXRhbCBhc3NldHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBjb21wbGV0ZSBhbmQgY29tcGxpYW50LCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGVzZSB0cmFuc2FjdGlvbnMuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48Yj5EZXNjcmlwdGlvbiBvZiBlYWNoIGRpc3Bvc2VkIGFzc2V0OjwvYj4gSW5jbHVkZSB0aGUgdHlwZSBvZiBhc3NldCAoZS5nLiwgcmVhbCBlc3RhdGUsIHN0b2NrcywgYm9uZHMpLjwvbGk+XG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGFjcXVpc2l0aW9uOjwvYj4gVGhlIHB1cmNoYXNlIGRhdGUgb3IgdGhlIGRhdGUgeW91IG9yaWdpbmFsbHkgY2FtZSBpbnRvIHBvc3Nlc3Npb24gb2YgZWFjaCBhc3NldC48L2xpPlxuICAgICAgICA8bGk+PGI+QWNxdWlzaXRpb24gY29zdDo8L2I+IFRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBvciBjb3N0IGJhc2lzIG9mIGVhY2ggYXNzZXQsIGluY2x1ZGluZyBhbnkgaW1wcm92ZW1lbnRzIG1hZGUuPC9saT5cbiAgICAgICAgPGxpPjxiPkRhdGUgb2YgZGlzcG9zYWw6PC9iPiBUaGUgc3BlY2lmaWMgZGF0ZSBvbiB3aGljaCBlYWNoIGFzc2V0IHdhcyBzb2xkLCBleGNoYW5nZWQsIG9yIG90aGVyd2lzZSBkaXNwb3NlZCBvZi48L2xpPlxuICAgICAgICA8bGk+PGI+U2FsZSBvciBkaXNwb3NhbCBwcm9jZWVkczo8L2I+IFRoZSB0b3RhbCBhbW91bnQgcmVjZWl2ZWQgZnJvbSB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LjwvbGk+XG4gICAgICAgIDxsaT48Yj5Bc3NvY2lhdGVkIGV4cGVuc2VzOjwvYj4gQW55IGNvc3RzIGluY3VycmVkIGRpcmVjdGx5IGZyb20gdGhlIHNhbGUgb3IgZGlzcG9zYWwgcHJvY2Vzcywgc3VjaCBhcyBicm9rZXIncyBmZWVzLCBhZHZlcnRpc2luZywgbGVnYWwgZmVlcywgZXRjLjwvbGk+XG4gICAgICAgIDxsaT48Yj5SZWFzb24gZm9yIGRpc3Bvc2FsOjwvYj4gQnJpZWZseSBkZXNjcmliZSB0aGUgcmVhc29uIGJlaGluZCB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGNhbGN1bGF0aW5nIHBvdGVudGlhbCBjYXBpdGFsIGdhaW5zIG9yIGxvc3NlcyBhbmQgZGV0ZXJtaW5pbmcgdGhlaXIgaW1wYWN0IG9uIHlvdXIgdGF4IG9ibGlnYXRpb25zLiBQbGVhc2UgYXR0YWNoIGFueSBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIHN1Y2ggYXMgc2FsZXMgcmVjZWlwdHMsIGRlZWRzLCBjb250cmFjdHMsIG9yIGJyb2tlcmFnZSBzdGF0ZW1lbnRzLCB0byBzdWJzdGFudGlhdGUgdGhlIGRldGFpbHMgcHJvdmlkZWQuPC9wPlxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIHlvdSBtYXkgaGF2ZS4gWW91IGNhbiByZWFjaCB1cyB2aWEgZW1haWwgb3IgcGhvbmUgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNwb3NlZCBEaWdpdGFsIEFzc2V0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkRpc3Bvc2VkIERpZ2l0YWwgQXNzZXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+WW91IGFuc3dlcmVkIFwiWWVzXCIgdG8gZGlzcG9zaW5nIG9mIGRpZ2l0YWwgYXNzZXRzIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgdHJhbnNhY3Rpb25zLCBwbGVhc2Ugc3VibWl0IHRoZSBmb2xsb3dpbmc6PC9wPlxuICA8b2w+XG4gICAgPGxpPlRyYW5zYWN0aW9uIGRhdGVzPC9saT5cbiAgICA8bGk+VHlwZXMgb2YgYXNzZXRzIGJvdWdodCwgc29sZCwgb3IgZXhjaGFuZ2VkPC9saT5cbiAgICA8bGk+QW1vdW50cyBpbnZvbHZlZCBpbiBlYWNoIHRyYW5zYWN0aW9uPC9saT5cbiAgICA8bGk+QW55IDEwOTkgZm9ybXMgcmVjZWl2ZWQgZm9yIGRpZ2l0YWwgYXNzZXQgYWN0aXZpdGllczwvbGk+XG4gICAgPGxpPkRldGFpbHMgb2YgbWluaW5nLCBzdGFraW5nLCBvciBhaXJkcm9wIGluY29tZSwgaWYgYXBwbGljYWJsZTwvbGk+XG4gIDwvb2w+XG4gIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSW5jbHVkZSBhbGwgc2FsZXMsIHRyYWRlcywgYW5kIGV4Y2hhbmdlcywgZXZlbiBpZiB5b3UgZGlkbid0IHJlY2VpdmUgYSB0YXggZm9ybS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTXV0dWFsIEZ1bmQgR2FpblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIEdhaW5cIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiBvcmRlciB0byBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIG9uIHlvdXIgdGF4IHJldHVybiwgYXMgcGVyIHlvdXIgaW5kaWNhdGlvbiBvZiByZWNlaXZpbmcgZ2FpbnMgZnJvbSBhIG11dHVhbCBmdW5kIG9yIHNpbWlsYXIgaW52ZXN0bWVudCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5LURJViBGb3JtOjwvc3Ryb25nPiBUaGlzIGZvcm0gaXMgY3J1Y2lhbCBhcyBpdCBwcm92aWRlcyBkZXRhaWxzIG9uIGRpdmlkZW5kcyBhbmQgZGlzdHJpYnV0aW9ucyB5b3UgcmVjZWl2ZWQgZnJvbSB5b3VyIG11dHVhbCBmdW5kIGludmVzdG1lbnRzLiBQbGVhc2UgZW5zdXJlIHRvIHByb3ZpZGUgdGhpcyBmb3JtIGlmIHlvdXIgbXV0dWFsIGZ1bmQgZWFybmluZ3Mgd2VyZSByZXBvcnRlZCBvbiBpdC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnQgb2YgQWNjb3VudDo8L3N0cm9uZz4gVGhpcyBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBhbGwgdHJhbnNhY3Rpb25zIHdpdGhpbiB5b3VyIGFjY291bnQsIGluY2x1ZGluZyBwdXJjaGFzZXMsIHJlZGVtcHRpb25zLCBhbmQgcmVpbnZlc3RlZCBkaXZpZGVuZHMgd2hpY2ggaGVscCB1cyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHlvdXIgZ2FpbnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+WWVhci1FbmQgU3VtbWFyeTo8L3N0cm9uZz4gT2Z0ZW4gbXV0dWFsIGZ1bmRzIHByb3ZpZGUgYSB5ZWFyLWVuZCBzdW1tYXJ5IHRvIHRoZWlyIGludmVzdG9ycy4gVGhpcyBzdW1tYXJ5IGNhbiBiZSB2ZXJ5IGhlbHBmdWwgaW4gcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYXMgaXQgY29uc29saWRhdGVzIGFsbCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50czo8L3N0cm9uZz4gVGhpcyBjb3VsZCBpbmNsdWRlIGFkZGl0aW9uYWwgMTA5OSBmb3JtcyAobGlrZSAxMDk5LUIgaWYgYW55IHNhbGVzIG9jY3VycmVkKSwgb3JpZ2luYWwgaW52ZXN0bWVudCBzdGF0ZW1lbnRzLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgY291bGQgaW1wYWN0IHlvdXIgdGF4IHNpdHVhdGlvbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMgbWF5IHJlcXVpcmUgc29tZSB0aW1lLCBob3dldmVyLCBoYXZpbmcgdGhlc2UgcmVhZGlseSBhdmFpbGFibGUgd2lsbCBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBlZmZpY2llbmN5IG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpbGwgYmUgZ3JlYXRseSBhcHByZWNpYXRlZC48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBkaWZmaWN1bHRpZXMgb2J0YWluaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNdXR1YWwgRnVuZCBEaXNwb3NhbFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIERpc3Bvc2FsXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBtYWRlIGEgZGlzcG9zYWwgb2Ygc2hhcmVzIGluIGEgbXV0dWFsIGZ1bmQgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBhY3QgYW5kIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGVkIGFjY3VyYXRlbHksIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+MTA5OS1CIGZvcm08L3N0cm9uZz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBtdXR1YWwgZnVuZCBkaXNwb3NhbCwgaWYgYXZhaWxhYmxlLiBUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGRldGFpbHMgb24gdGhlIHNhbGUgb2YgeW91ciBzaGFyZXMuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbGVkIDxzdHJvbmc+cmVjb3JkIG9mIHRoZSBwdXJjaGFzZTwvc3Ryb25nPiBvZiB0aGUgbXV0dWFsIGZ1bmQgc2hhcmVzIGluY2x1ZGluZyB0aGUgcHVyY2hhc2UgZGF0ZSBhbmQgY29zdCBiYXNpcy4gVGhpcyBpcyBjcnVjaWFsIGZvciBjYWxjdWxhdGluZyBhbnkgY2FwaXRhbCBnYWluIG9yIGxvc3MuPC9saT5cbiAgICAgICAgPGxpPklmIHRoZSAxMDk5LUIgZm9ybSBpcyBub3QgYXZhaWxhYmxlLCBwbGVhc2UgcHJvdmlkZSBhbnkgPHN0cm9uZz5icm9rZXJhZ2Ugc3RhdGVtZW50czwvc3Ryb25nPiBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgc2hvd3MgdGhlIGRpc3Bvc2FsIG9mIHRoZSBtdXR1YWwgZnVuZCBzaGFyZXMsIGluY2x1ZGluZyB0aGUgc2FsZSBkYXRlIGFuZCBhbW91bnQuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxzdHJvbmc+cmVpbnZlc3RlZCBkaXZpZGVuZHM8L3N0cm9uZz4gb3IgY2FwaXRhbCBnYWlucyBkaXN0cmlidXRpb25zLCBhcyB0aGVzZSBjYW4gYWRqdXN0IHlvdXIgY29zdCBiYXNpcyBhbmQgYWZmZWN0IHRoZSBjYWxjdWxhdGlvbiBvZiB5b3VyIGNhcGl0YWwgZ2FpbiBvciBsb3NzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5IYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGVuc3VyaW5nIHRoYXQgd2UgYWNjdXJhdGVseSByZXBvcnQgdGhlIGRpc3Bvc2FsIG9mIHlvdXIgbXV0dWFsIGZ1bmQgc2hhcmVzIGFuZCBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzLiBUaGlzIHdpbGwgYWxzbyBoZWxwIHVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGxpYWJpbGl0eSBmb3IgdGhlIHllYXIuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiV2FzaCBTYWxlXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiV2FzaCBTYWxlIFRyYW5zYWN0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIGluZGljYXRpb24gb2YgYSBwb3NzaWJsZSBXYXNoIFNhbGUgdHJhbnNhY3Rpb24uIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wYWN0IGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyBydWxlcywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCB0cmFuc2FjdGlvbiByZWNvcmRzPC9zdHJvbmc+IC0gUGxlYXNlIHByb3ZpZGUgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdGhlIHNlY3VyaXR5IHRoYXQgd2FzIHNvbGQgYW5kIHRoZW4gcmVwdXJjaGFzZWQsIGluY2x1ZGluZyBkYXRlcyBhbmQgYW1vdW50cyBmb3IgZWFjaCB0cmFuc2FjdGlvbi48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db3N0IGJhc2lzIGZvciByZXB1cmNoYXNlZCBzZWN1cml0eTwvc3Ryb25nPiAtIERldGFpbHMgb2YgdGhlIGNvc3QgYmFzaXMgZm9yIHRoZSBzZWN1cml0aWVzIHJlcHVyY2hhc2VkIHdpdGhpbiBhIDYxLWRheSB3aW5kb3cgKDMwIGRheXMgYmVmb3JlIHRvIDMwIGRheXMgYWZ0ZXIgdGhlIHNhbGUpLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgc3RhdGVtZW50czwvc3Ryb25nPiAtIENvcGllcyBvZiB5b3VyIGJyb2tlcmFnZSBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb25zIGluIHF1ZXN0aW9uLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkxvc3NlcyByZWFsaXplZDwvc3Ryb25nPiAtIERvY3VtZW50YXRpb24gb2YgYW55IGxvc3NlcyByZWFsaXplZCBmcm9tIHRoZXNlIHRyYW5zYWN0aW9ucy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgY29ycmVzcG9uZGVuY2U8L3N0cm9uZz4gLSBDb3JyZXNwb25kZW5jZSBmcm9tIGJyb2tlcnMgb3IgZmluYW5jaWFsIGFkdmlzb3JzIHJlZ2FyZGluZyB0aGVzZSB0cmFuc2FjdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZG9jdW1lbnRzIGFyZSBvcmdhbml6ZWQgYW5kIGNsZWFybHkgbGFiZWxlZCBmb3IgZWFjaCB0cmFuc2FjdGlvbi4gVGhpcyB3aWxsIGZhY2lsaXRhdGUgYSBzbW9vdGhlciBhbmQgcXVpY2tlciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+XG4gICAgPHA+VW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgV2FzaCBTYWxlIHRyYW5zYWN0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIHByb3ZpZGUgYWNjdXJhdGUgdGF4IGFkdmljZSBhbmQgcHJlcGFyYXRpb24uIEZ1cnRoZXIsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBhc3Npc3QgaW4gZGV0ZXJtaW5pbmcgaG93IHRoZSBXYXNoIFNhbGUgcnVsZSBhZmZlY3RzIHRoZSBkZWR1Y3RpYmlsaXR5IG9mIGFueSBsb3NzZXMgeW91IG1pZ2h0IGhhdmUgaW5jdXJyZWQuPC9wPlxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZmlsaW5ncy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTb2xkIEhvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJTb2xkIEhvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgc29sZCBhIHBlcnNvbmFsIGhvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBTYWxlOjwvc3Ryb25nPiBUaGUgY2xvc2luZyBkYXRlIHdoZW4gdGhlIHNhbGUgd2FzIG9mZmljaWFsbHkgY29tcGxldGVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlNhbGUgUHJpY2U6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgeW91IHJlY2VpdmVkIGZvciB0aGUgaG9tZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db3N0IEJhc2lzOjwvc3Ryb25nPiBPcmlnaW5hbCBwdXJjaGFzZSBwcmljZSwgcGx1cyBhbnkgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIGhvbWUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz4gQWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc29sZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5NYWluIFJlc2lkZW5jZSBvciBOb3Q6PC9zdHJvbmc+IFBsZWFzZSBjb25maXJtIGlmIHRoaXMgd2FzIHlvdXIgbWFpbiByZXNpZGVuY2UgZm9yIGF0IGxlYXN0IHR3byBvZiB0aGUgbGFzdCBmaXZlIHllYXJzIHByaW9yIHRvIHRoZSBzYWxlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlJlY29yZHMgb2YgSG9tZSBJbXByb3ZlbWVudHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIHJlY29yZHMgb2YgYW55IG1ham9yIGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSBwcm9wZXJ0eSwgd2hpY2ggY2FuIGFmZmVjdCB0aGUgY29zdCBiYXNpcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBVc2U6PC9zdHJvbmc+IElmIG5vdCBhbHdheXMgdXNlZCBhcyBhIHBlcnNvbmFsIGhvbWUsIGRldGFpbHMgb24gYW55IHVzZSBvZiB0aGUgcHJvcGVydHkgZm9yIHJlbnRhbCwgYnVzaW5lc3MsIG9yIG90aGVyIG5vbi1wZXJzb25hbCB1c2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVsYXRlZCBFeHBlbnNlczo8L3N0cm9uZz4gQW55IGNvc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FsZSwgc3VjaCBhcyBsZWdhbCBmZWVzLCByZWFsIGVzdGF0ZSBhZ2VudCBjb21taXNzaW9ucywgYW5kIGhvbWUgc3RhZ2luZyBleHBlbnNlcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgcG90ZW50aWFsIHRheCBiZW5lZml0cyBvciBvYmxpZ2F0aW9ucy4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiSW5zdGFsbG1lbnQgU2FsZSBQYXltZW50c1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgeW91J3ZlIHNvbGQgcHJvcGVydHkgdGhpcyB5ZWFyIHVuZGVyIGFuIGluc3RhbGxtZW50IHBsYW4uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgdHJhbnNhY3Rpb24gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+U2FsZSBBZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgY29tcGxldGUgc2FsZSBhZ3JlZW1lbnQgZGV0YWlsaW5nIHRoZSB0ZXJtcyBvZiB0aGUgaW5zdGFsbG1lbnQgc2FsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc29sZCAoZS5nLiwgbGFuZCwgYnVpbGRpbmcsIGVxdWlwbWVudCkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBTY2hlZHVsZTo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHBheW1lbnQgc2NoZWR1bGUgYWdyZWVkIHVwb24sIGluY2x1ZGluZyB0aGUgZGF0ZXMgYW5kIGFtb3VudHMgb2YgZWFjaCBpbnN0YWxsbWVudC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnRzIFJlY2VpdmVkOjwvc3Ryb25nPiBUb3RhbCBhbW91bnRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZyBkb3duIHBheW1lbnQgYW5kIGFueSBpbnN0YWxsbWVudCBwYXltZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmluY2lwYWwgJmFtcDsgSW50ZXJlc3QgQnJlYWtkb3duOjwvc3Ryb25nPiBBIGJyZWFrZG93biBvZiB0aGUgYW1vdW50cyByZWNlaXZlZCBiZXR3ZWVuIHByaW5jaXBhbCBhbmQgaW50ZXJlc3QgZm9yIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBCYXNpczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhlIHByb3BlcnR5J3Mgb3JpZ2luYWwgY29zdCwgaW1wcm92ZW1lbnRzIG1hZGUsIGFuZCBhbnkgZGVwcmVjaWF0aW9uIHRha2VuIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgcmVsZXZhbnQgZXhwZW5zZXMgaW4gcmVsYXRpb24gdG8gdGhlIHNhbGUgdGhhdCBtaWdodCBiZSBkZWR1Y3RpYmxlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkJ1eWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBMZWdhbCBuYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGJ1eWVyLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgYW55IHByb2ZpdCBvciBsb3NzIGZyb20gdGhlIHNhbGUgYW5kIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlIGluc3RhbGxtZW50IHBheW1lbnRzIHJlY2VpdmVkLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gWW91IGNhbiB1cGxvYWQgdGhlIGRvY3VtZW50cyBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBlbWFpbCB0aGVtIHRvIHRheEBsZW5kYWhhbmRhY2NvdW50aW5nLmNvbS48L3A+XG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiV29ydGhsZXNzIFNlY3VyaXRpZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJXb3J0aGxlc3MgU2VjdXJpdGllc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBoYWQgaW52ZXN0bWVudHMsIHN1Y2ggYXMgc3RvY2tzIG9yIGJvbmRzLCB0aGF0IGJlY2FtZSBjb21wbGV0ZWx5IHdvcnRobGVzcyB0aGlzIHllYXIsIHdlIG5lZWQgdG8gZ2F0aGVyIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHByb3Blcmx5IHJlcG9ydCB0aGVzZSBvbiB5b3VyIHRheCByZXR1cm4uIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgU2VjdXJpdHk6PC9zdHJvbmc+IEZ1bGwgbmFtZSBhbmQgdHlwZSBvZiBlYWNoIHNlY3VyaXR5IHRoYXQgYmVjYW1lIHdvcnRobGVzcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QdXJjaGFzZSBEZXRhaWxzOjwvc3Ryb25nPiBEYXRlIG9mIHB1cmNoYXNlIGFuZCB0aGUgcHVyY2hhc2UgcHJpY2UgZm9yIGVhY2ggc2VjdXJpdHkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+V29ydGhsZXNzbmVzcyBEZXRlcm1pbmF0aW9uIERhdGU6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIHdoZW4geW91IGRldGVybWluZWQgdGhlIHNlY3VyaXR5IHRvIGJlIHdvcnRobGVzcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB5b3UgcmVjZWl2ZWQgb3IgdXNlZCB0byBkZXRlcm1pbmUgdGhhdCB0aGUgaW52ZXN0bWVudHMgYmVjYW1lIHdvcnRobGVzcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BdHRlbXB0cyB0byBTZWxsIG9yIFRyYWRlOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGFueSBhdHRlbXB0cyBtYWRlIHRvIHNlbGwgb3IgdHJhZGUgdGhlIHNlY3VyaXRpZXMgYmVmb3JlIGRldGVybWluaW5nIHRoZXkgd2VyZSB3b3J0aGxlc3MuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBBY2NvdW50IFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiB5b3VyIGludmVzdG1lbnQgYWNjb3VudCBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHdvcnRobGVzcyBzZWN1cml0aWVzIGFuZCB0aGVpciB2YWx1ZSBvdmVyIHRpbWUsIGxlYWRpbmcgdXAgdG8gdGhlaXIgZGVjbGFyZWQgd29ydGhsZXNzbmVzcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWN0aW9uIDEyNDQgQnVzaW5lc3MgU3RvY2tcIixcbiAgICBhY3Rpb25UaXRsZTogXCJTZWN0aW9uIDEyNDQgQnVzaW5lc3MgU3RvY2tcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBtb3JlIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBzYWxlIG9mIHNoYXJlcyBpbiBhIHNtYWxsIGJ1c2luZXNzIHdoZXJlIHlvdSB3ZXJlIGFuIG9yaWdpbmFsIGludmVzdG9yLiBBcyB5b3UgaW5kaWNhdGVkIGEgbG9zcyBvbiB0aGlzIGludmVzdG1lbnQsIGl0J3MgY3J1Y2lhbCB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcXVhbGlmaWVzIGZvciBzcGVjaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LiBUbyBhY2N1cmF0ZWx5IGFuYWx5emUgYW5kIHJlcG9ydCB0aGVzZSBhY3Rpdml0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5UaGUgPHN0cm9uZz5jZXJ0aWZpY2F0ZSBvZiBpbmNvcnBvcmF0aW9uPC9zdHJvbmc+IG9yIG90aGVyIGRvY3VtZW50YXRpb24gY29uZmlybWluZyB0aGUgc3RvY2sgcXVhbGlmaWVzIGFzIFNlY3Rpb24gMTI0NCBzdG9jay48L2xpPlxuICAgICAgICA8bGk+QSA8c3Ryb25nPmRldGFpbGVkIHN0YXRlbWVudDwvc3Ryb25nPiBvZiB0aGUgaW52ZXN0bWVudCwgaW5jbHVkaW5nOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgYW5kIGRhdGUgb2YgdGhlIG9yaWdpbmFsIGludmVzdG1lbnQuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+TnVtYmVyIG9mIHNoYXJlcyBwdXJjaGFzZWQuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+UHJvb2Ygb2YgYmVpbmcgYW4gb3JpZ2luYWwgaG9sZGVyLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIHRoZSBzYWxlPC9zdHJvbmc+LCBzcGVjaWZ5aW5nOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5EYXRlIG9mIHNhbGUuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+TnVtYmVyIG9mIHNoYXJlcyBzb2xkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlNhbGUgcHJpY2UuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGFzc29jaWF0ZWQgZXhwZW5zZXMgd2l0aCB0aGUgc2FsZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPkEgYnJpZWYgZXhwbGFuYXRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgbGVhZGluZyB0byB0aGUgbG9zcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiB3aWxsIGVuYWJsZSB1cyB0byBhc3Nlc3MgdGhlIGVsaWdpYmlsaXR5IGZvciBhIGJlbmVmaWNpYWwgdGF4IHRyZWF0bWVudCB1bmRlciBTZWN0aW9uIDEyNDQsIHBvdGVudGlhbGx5IG1pbmltaXppbmcgeW91ciB0YXhhYmxlIGluY29tZS4gUGxlYXNlIHN1Ym1pdCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgZmlsaW5nLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbGF0ZWQgUGFydHkgVHJhbnNhY3Rpb25zXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVsYXRlZCBQYXJ0eSBUcmFuc2FjdGlvbnNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSByZWNlaXZlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB0aGVyZSB3ZXJlIHRyYW5zYWN0aW9ucyB3aXRoIHJlbGF0ZWQgcGFydGllcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGVzZSB0cmFuc2FjdGlvbnMgYW5kIGluY29ycG9yYXRlIHRoZW0gaW50byB5b3VyIHRheCBmaWxpbmdzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIHRoZSBUcmFuc2FjdGlvbnM6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlR5cGUgb2YgdHJhbnNhY3Rpb25zIChlLmcuLCBzYWxlLCB0cmFkZSwgdHJhbnNmZXIgb2YgcHJvcGVydHkgb3IgaW52ZXN0bWVudHMpLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkRhdGUocykgb2YgdHJhbnNhY3Rpb25zLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIGl0ZW1zIG9yIHByb3BlcnRpZXMgdHJhbnNmZXJyZWQuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlBhcnRpZXMgSW52b2x2ZWQ6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPk5hbWVzIGFuZCByZWxhdGlvbnNoaXBzIHRvIHlvdSAoZS5nLiwgZmFtaWx5IG1lbWJlciwgZnJpZW5kLCBvciBidXNpbmVzcyBlbnRpdHkpLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPklmIGEgYnVzaW5lc3MgZW50aXR5IGlzIGludm9sdmVkLCB5b3VyIGFuZCB5b3VyIGZhbWlseSdzIG93bmVyc2hpcCBwZXJjZW50YWdlIGluIHRoZSBidXNpbmVzcy48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIERldGFpbHMgb2YgdGhlIFRyYW5zYWN0aW9uczo8L3N0cm9uZz5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+TWFya2V0IHZhbHVlIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzIGF0IHRoZSB0aW1lIG9mIHRyYW5zYWN0aW9uLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCByZWNlaXZlZCBvciBwYWlkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFueSBleGNoYW5nZSBvZiBnb29kcywgc2VydmljZXMsIG9yIG90aGVyIGFzc2V0cywgaW5jbHVkaW5nIHRoZWlyIGZhaXIgbWFya2V0IHZhbHVlLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Db3BpZXMgb2YgY29udHJhY3RzIG9yIGFncmVlbWVudHMuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+UmVjZWlwdHMgb3IgcHJvb2Ygb2YgcGF5bWVudC9leGNoYW5nZS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BcHByYWlzYWxzIG9yIHZhbHVhdGlvbnMgb2YgcHJvcGVydHkgb3IgaW52ZXN0bWVudHMsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgcmVnYXJkaW5nIHJlbGF0ZWQgcGFydHkgdHJhbnNhY3Rpb25zIGFuZCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHBlbmFsdGllcyBvciBhdWRpdHMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9ucy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VjdGlvbiAxMjEgSG9tZSBTYWxlXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMjEgSG9tZSBTYWxlXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgc29sZCB5b3VyIG1haW4gaG9tZSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgZXhjbHVzaW9uIG9mIGdhaW4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZC4gQmVsb3cgaXMgYSBkZXRhaWxlZCBsaXN0IG9mIHdoYXQgd2UgbmVlZCBmcm9tIHlvdTo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgU2FsZTo8L3N0cm9uZz5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5EYXRlIG9mIHNhbGU8L2xpPlxuICAgICAgICAgIDxsaT5TZWxsaW5nIHByaWNlPC9saT5cbiAgICAgICAgICA8bGk+QW55IHNlbGxpbmcgZXhwZW5zZXMgKGUuZy4sIHJlYWwgZXN0YXRlIGNvbW1pc3Npb25zLCBsZWdhbCBmZWVzLCBldGMuKTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+Q29zdCBCYXNpcyBJbmZvcm1hdGlvbjo8L3N0cm9uZz5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5EYXRlIG9mIHB1cmNoYXNlPC9saT5cbiAgICAgICAgICA8bGk+T3JpZ2luYWwgcHVyY2hhc2UgcHJpY2U8L2xpPlxuICAgICAgICAgIDxsaT5SZWNvcmRzIG9mIGltcHJvdmVtZW50cyBtYWRlICh3aXRoIGRhdGVzIGFuZCBjb3N0cyk8L2xpPlxuICAgICAgICAgIDxsaT5BbnkgY2FzdWFsdHkgbG9zc2VzIGNsYWltZWQgYW5kIGluc3VyYW5jZSByZWltYnVyc2VtZW50cyByZWNlaXZlZCB3aGlsZSBvd25pbmcgdGhlIHByb3BlcnR5PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5SZXNpZGVuY3kgYW5kIFVzZSBEYXRhOjwvc3Ryb25nPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlRvdGFsIHllYXJzIG9mIG93bmVyc2hpcDwvbGk+XG4gICAgICAgICAgPGxpPlRvdGFsIHllYXJzIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBhcyB5b3VyIG1haW4gaG9tZTwvbGk+XG4gICAgICAgICAgPGxpPkFueSBwZXJpb2RzIHRoZSBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBvciB1c2VkIGZvciBidXNpbmVzczwvbGk+XG4gICAgICAgICAgPGxpPkFueSBzcGVjaWFsIGNpcmN1bXN0YW5jZXMgdGhhdCBtYXkgcXVhbGlmeSBmb3IgYW4gZXhjZXB0aW9uIHRvIHRoZSBwaHlzaWNhbCBwcmVzZW5jZSByZXF1aXJlbWVudCAoZS5nLiwgaGVhbHRoIGlzc3VlcywgZW1wbG95bWVudCBjaGFuZ2VzKTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UHJpb3IgR2FpbiBFeGNsdXNpb25zOjwvc3Ryb25nPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPkhhdmUgeW91IHNvbGQgYW5vdGhlciBtYWluIGhvbWUgd2l0aGluIHRoZSBsYXN0IHR3byB5ZWFycyBhbmQgY2xhaW1lZCBleGNsdXNpb24/PC9saT5cbiAgICAgICAgICA8bGk+SWYgeWVzLCBkZXRhaWxzIG9mIHRoZSBwcmlvciBzYWxlIGluY2x1ZGluZyBkYXRlIGFuZCBhbW91bnQgb2YgZ2FpbiBleGNsdWRlZDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGZpbGluZyBvZiB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTAzMSBFeGNoYW5nZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNlY3Rpb24gMTAzMSBFeGNoYW5nZVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBJbiByZXZpZXdpbmcgeW91ciByZWNvcmRzLCBpdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgeW91IG1heSBoYXZlIGVuZ2FnZWQgaW4gYSBTZWN0aW9uIDEwMzEgZXhjaGFuZ2UuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHJlbGV2YW50IElSUyBndWlkZWxpbmVzLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGJvdGggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSBhbmQgdGhlIHJlcGxhY2VtZW50IHByb3BlcnR5LiBQbGVhc2UgaW5jbHVkZSBsb2NhdGlvbiwgdHlwZSBvZiBwcm9wZXJ0eSAoZS5nLiwgY29tbWVyY2lhbCwgcmVzaWRlbnRpYWwpLCBhbmQgYW55IGlkZW50aWZ5aW5nIG51bWJlcnMgKGUuZy4sIHBhcmNlbCBudW1iZXIpLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5UcmFuc2FjdGlvbiBEYXRlczo8L3N0cm9uZz4gVGhlIGRhdGUgb24gd2hpY2ggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSB3YXMgdHJhbnNmZXJyZWQsIGFuZCB0aGUgZGF0ZSB0aGUgcmVwbGFjZW1lbnQgcHJvcGVydHkgd2FzIHJlY2VpdmVkLiBUaGVzZSBkYXRlcyBhcmUgY3J1Y2lhbCB0byBkZXRlcm1pbmUgY29tcGxpYW5jZSB3aXRoIHRoZSA0NS1kYXkgaWRlbnRpZmljYXRpb24gYW5kIDE4MC1kYXkgZXhjaGFuZ2UgY29tcGxldGlvbiByZXF1aXJlbWVudHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlRyYW5zYWN0aW9uIFZhbHVlczo8L3N0cm9uZz4gVGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIGJvdGggdGhlIHJlbGlucXVpc2hlZCBhbmQgcmVwbGFjZW1lbnQgcHJvcGVydGllcyBhdCB0aGUgdGltZSBvZiB0aGUgZXhjaGFuZ2UsIGFsb25nIHdpdGggYW55IGZpbmFuY2lhbCBhZGp1c3RtZW50cyBvciBhZGRpdGlvbmFsIGNhc2ggcmVjZWl2ZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGdhaW4gb3IgbG9zcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SW50ZXJtZWRpYXJ5IERldGFpbHM6PC9zdHJvbmc+IEluZm9ybWF0aW9uIGFib3V0IGFueSBxdWFsaWZpZWQgaW50ZXJtZWRpYXJ5IHVzZWQgZHVyaW5nIHRoZSBleGNoYW5nZSwgaW5jbHVkaW5nIHRoZWlyIG5hbWUsIGNvbnRhY3QgaW5mb3JtYXRpb24sIGFuZCBkZXRhaWxzIG9mIHRoZWlyIGludm9sdmVtZW50LiBJZiBubyBpbnRlcm1lZGlhcnkgd2FzIHVzZWQsIHBsZWFzZSBleHBsYWluIGhvdyB0aGUgZXhjaGFuZ2Ugd2FzIGZhY2lsaXRhdGVkLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5PcmlnaW5hbCBQdXJjaGFzZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBkYXRlIG9mIGFjcXVpc2l0aW9uIGZvciB0aGUgcmVsaW5xdWlzaGVkIHByb3BlcnR5LiBUaGlzIGluZm9ybWF0aW9uIGFzc2lzdHMgaW4gZGV0ZXJtaW5pbmcgdGhlIGJhc2lzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SW1wcm92ZW1lbnRzIG9yIEV4cGVuc2VzOjwvc3Ryb25nPiBEZXRhaWxzIG9mIGFueSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgcmVwbGFjZW1lbnQgcHJvcGVydHkgd2l0aGluIHRoZSBleGNoYW5nZSBwZXJpb2Qgb3IgYW55IGFkZGl0aW9uYWwgZXhwZW5zZXMgaW5jdXJyZWQgdGhhdCBuZWVkIHRvIGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIHByb3BlcnR5J3MgYmFzaXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIFNlY3Rpb24gMTAzMSBleGNoYW5nZSBhbmQgZW5zdXJpbmcgdGhhdCBhbGwgSVJTIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBJdCBhbHNvIGhlbHBzIHVzIHRvIGFkdmlzZSB5b3UgYWNjdXJhdGVseSBvbiBhbnkgcG90ZW50aWFsIGRlZmVycmVkIHRheCBsaWFiaWxpdGllcyBvciBiZW5lZml0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4Y2hhbmdlLjwvcD5cbiAgICA8cD5QbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRldGFpbHMuIFdlIGFyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkludm9sdW50YXJ5IENvbnZlcnNpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBtYXkgaGF2ZSB1bmRlcmdvbmUgYSBTZWN0aW9uIDEwMzMgZXhjaGFuZ2UgKGludm9sdW50YXJ5IGNvbnZlcnNpb24pIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgbWF4aW11bSBjb21wbGlhbmNlIGFuZCBiZW5lZml0IGZvciB5b3UsIHdlIHJlcXVpcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgZXZlbnQuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPk5hdHVyZSBvZiB0aGUgUHJvcGVydHk6PC9zdHJvbmc+IERlc2NyaWJlIHRoZSB0eXBlIG9mIHByb3BlcnR5IGludm9sdmVkIChlLmcuLCByZWFsIGVzdGF0ZSwgcGVyc29uYWwgcHJvcGVydHksIGV0Yy4pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIEludm9sdW50YXJ5IENvbnZlcnNpb246PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGNpcmN1bXN0YW5jZXMgdGhhdCBsZWQgdG8gdGhlIGludm9sdW50YXJ5IGNvbnZlcnNpb24gKGUuZy4sIG5hdHVyYWwgZGlzYXN0ZXIsIHRoZWZ0LCBjb25kZW1uYXRpb24pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkluc3VyYW5jZSBQcm9jZWVkcyBSZWNlaXZlZDo8L3N0cm9uZz4gSW5kaWNhdGUgdGhlIGFtb3VudCBvZiBhbnkgaW5zdXJhbmNlIHByb2NlZWRzIHJlY2VpdmVkIGFzIGNvbXBlbnNhdGlvbiBmb3IgdGhlIGNvbnZlcnNpb24uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVpbnZlc3RtZW50IG9mIFByb2NlZWRzOjwvc3Ryb25nPiBEZXRhaWwgYW55IHJlaW52ZXN0bWVudCBvZiB0aGUgcHJvY2VlZHMgaW50byBzaW1pbGFyIHByb3BlcnR5LCBpbmNsdWRpbmcgdHlwZXMgb2YgcHJvcGVydGllcyBhY3F1aXJlZCwgZGF0ZXMgb2YgYWNxdWlzaXRpb24sIGFuZCBhbW91bnRzIHJlaW52ZXN0ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VGltZWxpbmUgb2YgRXZlbnRzOjwvc3Ryb25nPiBQcm92aWRlIGEgdGltZWxpbmUgb2YgdGhlIGtleSBldmVudHMsIGZyb20gdGhlIGRhdGUgb2YgdGhlIGludm9sdW50YXJ5IGNvbnZlcnNpb24gdG8gdGhlIHJlaW52ZXN0bWVudCBvZiBwcm9jZWVkcywgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBdHRhY2ggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gc3VjaCBhcyBpbnN1cmFuY2Ugc2V0dGxlbWVudCBzdGF0ZW1lbnRzLCBwdXJjaGFzZSBjb250cmFjdHMgZm9yIHJlcGxhY2VtZW50IHByb3BlcnR5LCBvciBvZmZpY2lhbCBub3RpY2VzIG9mIGNvbmRlbW5hdGlvbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgcHJvdmlkZWQgaW5mb3JtYXRpb24gaXMgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHRvIGZhY2lsaXRhdGUgYW4gZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB3aXRoIGFueSBxdWVzdGlvbnMgeW91IG1pZ2h0IGhhdmUgcmVnYXJkaW5nIHRoaXMgcmVxdWVzdC48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgSW5jb21lXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXG4gICAgPHA+SSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheGVzLCB3ZSBub3RpY2VkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgcmVudGFsIGluY29tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIGV4cGxvcmUgcG90ZW50aWFsIGRlZHVjdGlvbnMgb3IgY3JlZGl0cywgd2UgbmVlZCBzb21lIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgcmVudGFsIGluY29tZS48L3A+XG48cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuPG9sPlxuICA8bGk+VGhlIGFkZHJlc3Mgb2YgdGhlIHByb3BlcnR5IGdlbmVyYXRpbmcgdGhlIHJlbnRhbCBpbmNvbWUuPC9saT5cbiAgPGxpPlRvdGFsIGFtb3VudCBvZiByZW50YWwgaW5jb21lIHJlY2VpdmVkIGluIHRoZSB0YXggeWVhci48L2xpPlxuICA8bGk+TW9udGhzIHRoZSBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dC48L2xpPlxuICA8bGk+QW55IHBlcmlvZHMgb2YgcGVyc29uYWwgdXNlIG9mIHRoZSByZW50YWwgcHJvcGVydHkuPC9saT5cbiAgPGxpPkEgc3VtbWFyeSBvZiBleHBlbnNlcyByZWxhdGVkIHRvIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IHByb3BlcnR5IG1hbmFnZW1lbnQgZmVlcywgbWFpbnRlbmFuY2UgYW5kIHJlcGFpcnMsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCAoaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgPGxpPkRldGFpbHMgb2YgYW55IG1ham9yIGltcHJvdmVtZW50cyBvciByZW5vdmF0aW9ucyBkb25lIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbjwvb2w+XG48cD5UaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCB1cyBwYWludCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgeW91ciByZW50YWwgaW5jb21lLCBhbGxvd2luZyB1cyB0byBlbnN1cmUgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IGFwcGxpY2FibGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSByZXBvcnQgeW91ciBpbmNvbWUuIFlvdXIgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgY3J1Y2lhbCBmb3IgdGhlIHRpbWVseSBhbmQgZWZmZWN0aXZlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy48L3A+XG48cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBvciBpZiB0aGVyZSdzIGFueSBvdGhlciB3YXkgSSBjYW4gYXNzaXN0LCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gZ2V0IGluIHRvdWNoLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZHZhbmNlZCBSZW50XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQWR2YW5jZWQgUmVudFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGFkdmFuY2VkIHJlbnQgcGF5bWVudHMgdGhpcyB5ZWFyIGZvciB5b3VyIHJlbnRhbCBwcm9wZXJ0eS4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgYW1vdW50IG9mIGFkdmFuY2VkIHJlbnQgcmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSBzdW0gdG90YWwgb2YgYWxsIHJlbnQgcGF5bWVudHMgcmVjZWl2ZWQgaW4gYWR2YW5jZSAoY292ZXJpbmcgZnV0dXJlIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IG1vbnRoKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSBzcGVjaWZpYyBkYXRlKHMpIG9uIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBhZHZhbmNlZCByZW50IHBheW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBwZXJpb2QgY292ZXJlZDo8L3N0cm9uZz4gVGhlIHJhbmdlIG9mIGRhdGVzIChzdGFydCBhbmQgZW5kKSB0aGF0IGVhY2ggYWR2YW5jZWQgcmVudCBwYXltZW50IGNvdmVycy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBhZGRyZXNzOjwvc3Ryb25nPiBUaGUgYWRkcmVzcyBvZiB0aGUgcmVudGFsIHByb3BlcnR5IGZvciB3aGljaCB0aGUgYWR2YW5jZWQgcmVudCB3YXMgcGFpZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5MZWFzZSBhZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50KHMpIHdpdGggdGhlIHRlbmFudChzKSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMgb2YgdGhlIGFkdmFuY2VkIHJlbnQgcGF5bWVudChzKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgcGFydGlhbCByZWZ1bmRzIGlzc3VlZDo8L3N0cm9uZz4gSWYgYW55IHJlZnVuZHMgd2VyZSBpc3N1ZWQgYWdhaW5zdCB0aGUgYWR2YW5jZWQgcmVudHMgcmVjZWl2ZWQsIHBsZWFzZSBwcm92aWRlIGRldGFpbHMgYW5kIHJlc3BlY3RpdmUgYW1vdW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBwaXZvdGFsIGluIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxpYW50IHdpdGggcmVsZXZhbnQgdGF4IGxhd3MuIFBsZWFzZSBlbnN1cmUgdGhlIGRldGFpbHMgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkxlYXNlIENhbmNlbGxhdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkxlYXNlIENhbmNlbGxhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgaW4geW91ciBwcmVsaW1pbmFyeSB0YXggaW5mb3JtYXRpb24gdGhhdCB5b3UgcmVjZWl2ZWQgcGF5bWVudCBmcm9tIGEgdGVuYW50IGZvciBlYXJseSBsZWFzZSBjYW5jZWxsYXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgYW5kIGFzc2VzcyBhbnkgdGF4IGltcGxpY2F0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPkxlYXNlIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBsZWFzZSBhZ3JlZW1lbnQgd2l0aCB0aGUgdGVuYW50IHdobyBwYWlkIHRvIHRlcm1pbmF0ZSB0aGVpciBsZWFzZSBlYXJseS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+QW1lbmRtZW50IG9yIFRlcm1pbmF0aW9uIEFncmVlbWVudDo8L3N0cm9uZz4gQW55IGRvY3VtZW50cyB0aGF0IGZvcm1hbGx5IGFja25vd2xlZGdlIHRoZSBlYXJseSB0ZXJtaW5hdGlvbiBvZiB0aGUgbGVhc2UsIGluY2x1ZGluZyBhbnkgcGVuYWx0aWVzLCB0aGUgdGVybWluYXRpb24gZGF0ZSwgYW5kIG90aGVyIHJlbGV2YW50IHRlcm1zLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5QYXltZW50IFJlY29yZHM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gb2YgdGhlIHBheW1lbnQgcmVjZWl2ZWQgZm9yIGxlYXNlIHRlcm1pbmF0aW9uLiBUaGlzIGNvdWxkIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHRyYW5zYWN0aW9uLCBhIHJlY2VpcHQgcHJvdmlkZWQgdG8gdGhlIHRlbmFudCwgb3IgYW55IHdyaXR0ZW4gYWdyZWVtZW50IHNwZWNpZnlpbmcgdGhlIGFtb3VudC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+Q29tbXVuaWNhdGlvbiBFdmlkZW5jZTo8L3N0cm9uZz4gQ29waWVzIG9mIGFueSB3cml0dGVuIGNvbW11bmljYXRpb24gYmV0d2VlbiB5b3UgYW5kIHRoZSB0ZW5hbnQgcmVnYXJkaW5nIHRoZSBsZWFzZSBjYW5jZWxsYXRpb24gYW5kIHRoZSBhZ3JlZW1lbnQgdG8gdGVybWluYXRlIGVhcmx5LCBpbmNsdWRpbmcgZW1haWxzIG9yIGxldHRlcnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoZXNlIGRvY3VtZW50cyBhcmUgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgdGF4IHRyZWF0bWVudCBvZiB0aGUgbGVhc2UgY2FuY2VsbGF0aW9uIHBheW1lbnQgeW91IHJlY2VpdmVkLiBUaGV5IHdpbGwgaGVscCB0byBlbnN1cmUgdGhhdCB3ZSByZXBvcnQgeW91ciBpbmNvbWUgYWNjdXJhdGVseSBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IHBvdGVudGlhbCB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzLjwvcD5cbiAgICA8cD48c3Ryb25nPkFjdGlvbiBSZXF1aXJlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uLiBZb3UgbWF5IHNlbmQgdGhlbSB2aWEgZW1haWwgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tLCBvciB1cGxvYWQgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFpZCBBZHZhbmNlIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUGFpZCBBZHZhbmNlIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgcGF5bWVudHMgZm9yIGluc3VyYW5jZSBwcmVtaXVtcyBvciBzaW1pbGFyIGNvc3RzIHJlbGF0ZWQgdG8geW91ciByZW50YWwgcHJvcGVydHksIHdoaWNoIGNvdmVyIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHByZXBhaWQgZXhwZW5zZXMgaW4geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbjxvbD5cbiAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBQYWlkIEV4cGVuc2VzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgcmVjZWlwdHMsIGludm9pY2VzLCBvciBjb250cmFjdHMgc2hvd2luZyB0aGUgcGF5bWVudCBvZiBpbnN1cmFuY2UgcHJlbWl1bXMgb3Igc2ltaWxhciBleHBlbnNlcy4gVGhpcyBzaG91bGQgY2xlYXJseSBpbmRpY2F0ZSB0aGUgYW1vdW50IHBhaWQsIHRoZSBkYXRlIG9mIHBheW1lbnQsIGFuZCB0aGUgY292ZXJhZ2UgcGVyaW9kLjwvbGk+XG4gIDxsaT48c3Ryb25nPkNvdmVyYWdlIFBlcmlvZCBEZXRhaWxzOjwvc3Ryb25nPiBXZSBuZWVkIHNwZWNpZmljIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBjb3ZlcmFnZSBwZXJpb2QgZm9yIGVhY2ggZXhwZW5zZS4gUGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvciBhIHdyaXR0ZW4gc3VtbWFyeSB0aGF0IHNwZWNpZmllcyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgY292ZXJhZ2UgcGVyaW9kcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIGN1cnJlbnQgeWVhci48L2xpPlxuICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gQ29uZmlybSB0aGUgYWRkcmVzcyBvciBpZGVudGlmaWNhdGlvbiBvZiB0aGUgcmVudGFsIHByb3BlcnR5KGllcykgdG8gd2hpY2ggdGhlc2UgZXhwZW5zZXMgYXBwbHkuPC9saT5cbiAgPGxpPjxzdHJvbmc+UHVycG9zZSBvZiB0aGUgRXhwZW5zZTo8L3N0cm9uZz4gRm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMsIHByb3ZpZGUgYSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgbmF0dXJlIG9mIGVhY2ggZXhwZW5zZSAoZS5nLiwgcHJvcGVydHkgaW5zdXJhbmNlLCBsaWFiaWxpdHkgaW5zdXJhbmNlKS48L2xpPlxuPC9vbD5cbjxwPlBsZWFzZSByZW1lbWJlciB0aGF0IGhhdmluZyBhY2N1cmF0ZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIHdpbGwgYWlkIGluIGVuc3VyaW5nIHRoYXQgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgY29ycmVjdGx5LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIHRoZXNlIHByZXBhaWQgZXhwZW5zZXMuPC9wPlxuPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCB5b3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJlbmVmaXQgVmFsdWUgSW5jcmVhc2VcIixcbiAgICBhY3Rpb25UaXRsZTogXCJCZW5lZml0IFZhbHVlIEluY3JlYXNlXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyBuZWNlc3NhcnkgZG9jdW1lbnRzIGZvciB0YXggcHJlcGFyYXRpb24uIFxuICAgIEFzIHBlciB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgcGF5bWVudCBmb3IgbG9jYWwgaW1wcm92ZW1lbnRzIFxuICAgIG9yIHNlcnZpY2VzIHRoYXQgZGlyZWN0bHkgaW5jcmVhc2UgdGhlIHZhbHVlIG9mIHlvdXIgcmVudGFsIHByb3BlcnR5LCBcbiAgICB3ZSBuZWVkIGZ1cnRoZXIgZGV0YWlscyB0byBlbnN1cmUgdGhlIGFjY3VyYXRlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRhdGlvbi48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5EZXNjcmlwdGlvbiBvZiB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZSBwcm92aWRlZCAoZS5nLiwgc3RyZWV0IHJlcGFpcnMsIG5ldyBzaWRld2Fsa3MpLjwvbGk+XG4gICAgICAgIDxsaT5EYXRlKHMpIG9mIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlLjwvbGk+XG4gICAgICAgIDxsaT5Ub3RhbCBjb3N0IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGltcHJvdmVtZW50IG9yIHNlcnZpY2UuPC9saT5cbiAgICAgICAgPGxpPlByb29mIG9mIHBheW1lbnQgZm9yIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlIChyZWNlaXB0cywgYmFuayBzdGF0ZW1lbnRzLCBldGMuKS48L2xpPlxuICAgICAgICA8bGk+QW55IG9mZmljaWFsIG5vdGljZXMgb3IgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBsb2NhbCBtdW5pY2lwYWxpdHkgcmVnYXJkaW5nIHRoZSBpbXByb3ZlbWVudHMgb3IgY2hhcmdlcy48L2xpPlxuICAgICAgICA8bGk+RGV0YWlscyBvZiBob3cgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2Ugc3BlY2lmaWNhbGx5IGJlbmVmaXRlZCB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHBvdGVudGlhbCB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0eSB2YWx1ZSBpbmNyZWFzZXMgZHVlIHRvIGxvY2FsIGltcHJvdmVtZW50cyBvciBzZXJ2aWNlcy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZmFjaWxpdGF0ZSB0aGUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRhdGlvbi48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZmVpdGVkIFNlY3VyaXR5IERlcG9zaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JmZWl0ZWQgU2VjdXJpdHkgRGVwb3NpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgYWNjdXJhdGUgYW5kIGNvbXBsaWFudCwgd2UndmUgbm90ZWQgdGhhdCB5b3UgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gaGF2aW5nIG9uZSBvciBtb3JlIHRlbmFudHMgd2hvIGRpZCBub3QgZ2V0IHRoZWlyIHNlY3VyaXR5IGRlcG9zaXQgYmFjayB0aGlzIHllYXIgZHVlIHRvIGVpdGhlciBicmVha2luZyB0aGUgbGVhc2UgdGVybXMgb3IgbGVhdmluZyBkYW1hZ2UgcmVxdWlyaW5nIHJlcGFpci48L3A+XG4gICAgPHA+VG8gcHJvY2VlZCB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+QSBsaXN0IG9mIGVhY2ggdGVuYW50IHdob3NlIHNlY3VyaXR5IGRlcG9zaXQgd2FzIGZvcmZlaXRlZCwgaW5jbHVkaW5nOjwvbGk+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+VGVuYW50J3MgbmFtZTwvbGk+XG4gICAgICAgICAgPGxpPlJlbnRhbCBhZGRyZXNzPC9saT5cbiAgICAgICAgICA8bGk+RGF0ZSBvZiBsZWFzZSB0ZXJtaW5hdGlvbjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIGV2aWRlbmNpbmcgdGhlIGZvcmZlaXR1cmUgcmVhc29uLCBzdWNoIGFzOjwvbGk+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50IHNob3dpbmcgdGhlIGJyZWFjaGVkIHRlcm1zPC9saT5cbiAgICAgICAgICA8bGk+UGhvdG9zIG9yIHJlcGFpciBpbnZvaWNlcyBmb3IgZGFtYWdlcyBjYXVzZWQgYnkgdGhlIHRlbmFudDwvbGk+XG4gICAgICAgICAgPGxpPkFueSB3cml0dGVuIG5vdGljZXMgcHJvdmlkZWQgdG8gdGhlIHRlbmFudCByZWdhcmRpbmcgdGhlIGZvcmZlaXR1cmU8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZWFjaCBmb3JmZWl0ZWQgc2VjdXJpdHkgZGVwb3NpdC48L2xpPlxuICAgICAgPGxpPkFueSByZWNlaXB0cyBvciBpbnZvaWNlcyBmb3IgcmVwYWlycyBhbmQgbWFpbnRlbmFuY2UgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgcmVhc29ucyBmb3Igc2VjdXJpdHkgZGVwb3NpdCBmb3JmZWl0dXJlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoaXMgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgaW4gYSBjbGVhciBhbmQgb3JnYW5pemVkIG1hbm5lciB0byBmYWNpbGl0YXRlIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gVGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOb24tQ2FzaCBSZW50XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uLUNhc2ggUmVudFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGUgZnJvbSB5b3VyIGVhcmxpZXIgcmVzcG9uc2VzIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgbm9uLWNhc2ggZm9ybXMgb2YgcGF5bWVudCBpbiBsaWV1IG9mIHJlbnQgdGhpcyB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0cmFuc2FjdGlvbnMuIEtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBTZXJ2aWNlIG9yIEdvb2RzIFJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLCBnb29kcywgb3IgcHJvcGVydHkgeW91IHJlY2VpdmVkIGFzIHJlbnQgcGF5bWVudC4gRm9yIGluc3RhbmNlLCBcIlJlcGFpciBzZXJ2aWNlcyBmb3IgdGhlIGtpdGNoZW4gcGx1bWJpbmdcIiBvciBcImEgbGFwdG9wIGNvbXB1dGVyXCIuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5WYWx1ZSBFc3RpbWF0aW9uOjwvc3Ryb25nPiBBbiBlc3RpbWF0ZWQgdmFsdWUgb2YgdGhlIHNlcnZpY2UsIGdvb2RzLCBvciBwcm9wZXJ0eSByZWNlaXZlZCBhdCB0aGUgdGltZSBvZiB0aGUgdHJhbnNhY3Rpb24uIElmIHBvc3NpYmxlLCBpbmNsdWRlIGFueSBkb2N1bWVudGF0aW9uIHRoYXQgc3VwcG9ydHMgdGhpcyB2YWx1YXRpb24sIHN1Y2ggYXMgcmVjZWlwdHMsIGludm9pY2VzLCBvciB3cml0dGVuIGFncmVlbWVudHMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIFRyYW5zYWN0aW9uOjwvc3Ryb25nPiBTcGVjaWZpYyBkYXRlKHMpIHdoZW4geW91IHJlY2VpdmVkIHRoZXNlIGdvb2RzIG9yIHNlcnZpY2VzLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+SW5mb3JtYXRpb24gYWJvdXQgdGhlIFRlbmFudCBvciBQcm92aWRlcjo8L3N0cm9uZz4gTmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBwcm92aWRlZCB0aGUgZ29vZHMgb3Igc2VydmljZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5BbnkgRm9ybWFsIEFncmVlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgd3JpdHRlbiBhZ3JlZW1lbnRzIG9yIGNvbnRyYWN0cyB0aGF0IG91dGxpbmUgdGhpcyBhcnJhbmdlbWVudC48L2xpPlxuICAgIDxsaT48c3Ryb25nPlJlY2VpcHRzIG9yIERvY3VtZW50YXRpb24gb2YgdGhlIFRyYW5zYWN0aW9uOjwvc3Ryb25nPiBBbnkgcmVjZWlwdHMsIGludm9pY2VzLCBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgZXZpZGVuY2VzIHRoZSBleGNoYW5nZS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB5b3VyIGluY29tZS4gWW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlIHdpbGwgZ3JlYXRseSBhc3Npc3QgaW4gY29tcGxldGluZyB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseS48L3A+XG4gICAgPHA+UGxlYXNlIHN1Ym1pdCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHRpbWVseSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgUHJvcGVydHkgRGVwcmVjaWF0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIFByb3BlcnR5IERlcHJlY2lhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIHJldmlld2luZyB5b3VyIGFjY291bnRzLCB3ZSd2ZSBub3RlZCB0aGF0IGFsbCB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzIGFyZSBjdXJyZW50bHkgYmVpbmcgZGVwcmVjaWF0ZWQgYXMgcGFydCBvZiB0aGVpciB0YXggdHJlYXRtZW50IGluIG91ciBmaW5hbmNpYWwgcmVjb3Jkcy4gVGhpcyBtZXRob2QgaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgZmluYW5jaWFsIHJlcG9ydGluZyBhbmQgdGF4IGVmZmljaWVuY3kuIEhvd2V2ZXIsIGl0IGhhcyBjb21lIHRvIG91ciBhdHRlbnRpb24gdGhhdCB0aGVyZSBtYXkgYmUgZGlzY3JlcGFuY2llcyBvciB1cGRhdGVzIHJlcXVpcmVkIGluIG91ciByZWNvcmRzIHJlZ2FyZGluZyB0aGUgZGVwcmVjaWF0aW9uIG9mIHlvdXIgcmVudGFsIHByb3BlcnRpZXMuPC9wPlxuICAgIDxwPlRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGludGVncml0eSBvZiB5b3VyIGZpbmFuY2lhbCBhbmQgdGF4IHJlcG9ydGluZywgd2Uga2luZGx5IHJlcXVlc3QgeW91ciBhc3Npc3RhbmNlIGluIHZlcmlmeWluZyB0aGUgY3VycmVudCBzdGF0dXMgb2YgeW91ciByZW50YWwgcHJvcGVydGllcyB3aXRoIHJlZ2FyZHMgdG8gZGVwcmVjaWF0aW9uLjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPkNvbmZpcm0gd2hldGhlciBhbGwgeW91ciByZW50YWwgcHJvcGVydGllcyBhcmUgYmVpbmcgZGVwcmVjaWF0ZWQgaW4gb3VyIGJvb2tzLiBJZiB0aGlzIGlzIGFjY3VyYXRlLCBubyBhY3Rpb24gaXMgcmVxdWlyZWQgb24geW91ciBwYXJ0LjwvbGk+XG4gICAgPGxpPklmIHRoZXJlIGFyZSBhbnkgcmVudGFsIHByb3BlcnRpZXMgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gY3VycmVudGx5IGJlaW5nIGRlcHJlY2lhdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggcHJvcGVydHk6PC9saT5cbiAgICAgICAgPHVsPlxuICAgICAgICAgICAgPGxpPlByb3BlcnR5IEFkZHJlc3M8L2xpPlxuICAgICAgICAgICAgPGxpPkRhdGUgb2YgUHVyY2hhc2U8L2xpPlxuICAgICAgICAgICAgPGxpPlB1cmNoYXNlIFByaWNlPC9saT5cbiAgICAgICAgICAgIDxsaT5SZWFzb24gZm9yIE5vbi1EZXByZWNpYXRpb248L2xpPlxuICAgICAgICAgICAgPGxpPkFueSBhZGRpdGlvbmFsIHJlbGV2YW50IGluZm9ybWF0aW9uPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L29sPlxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdCBpcyBoaWdobHkgYXBwcmVjaWF0ZWQgYW5kIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3VyIGZpbmFuY2lhbCByZWNvcmRzIGFjY3VyYXRlbHkgcmVmbGVjdCB5b3VyIHRheCBvYmxpZ2F0aW9ucyBhbmQgYmVuZWZpdHMuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhbGxvdyBzdWZmaWNpZW50IHRpbWUgZm9yIHJldmlzaW9ucyBhbmQgdXBkYXRlcyBhcyBuZWNlc3NhcnkuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gV2UgYXJlIGhlcmUgdG8gc3VwcG9ydCB5b3UgaW4gbWFpbnRhaW5pbmcgcHJlY2lzZSBhbmQgY29tcGxpYW50IGZpbmFuY2lhbCByZWNvcmRzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCB5b3VyIGNvbnRpbnVlZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBSZXBhaXJzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIFJlcGFpcnNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90ZWQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIG1ha2luZyBuZWNlc3NhcnkgcmVwYWlycyB0byB5b3VyIHJlbnRhbCBwcm9wZXJ0eSB0byBrZWVwIGl0IGluIGdvb2Qgd29ya2luZyBjb25kaXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGV4cGVuc2VzIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIHRheCBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGFsbCByZXBhaXJzIG1hZGUgZHVyaW5nIHRoZSB0YXggeWVhci4gUGxlYXNlIGluY2x1ZGU6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBuYXR1cmUgb2YgZWFjaCByZXBhaXIgKGUuZy4sIGZpeGluZyBsZWFrcywgcGFpbnRpbmcsIHJlcGFpcmluZyBhcHBsaWFuY2VzKS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZGF0ZSBlYWNoIHJlcGFpciB3YXMgY29tcGxldGVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBsb2NhdGlvbi9hZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eSB3aGVyZSByZXBhaXJzIHdlcmUgbWFkZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPlJlY2VpcHRzIG9yIGludm9pY2VzIGZvciBlYWNoIHJlcGFpciBtYWRlLiBUaGlzIHNob3VsZCBpbmNsdWRlOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgc2VydmljZSBwcm92aWRlcuKAmXMgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbi48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHBhaWQgZm9yIGVhY2ggcmVwYWlyLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgcGVyZm9ybWVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBtZXRob2Qgb2YgcGF5bWVudCB1c2VkLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+SWYgYW55IHJlcGFpcnMgd2VyZSBtYWRlIGJ5IHlvdXJzZWxmIG9yIGFuIHVubGljZW5zZWQgY29udHJhY3RvciwgcGxlYXNlIHByb3ZpZGU6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgcGVyZm9ybWVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBjb3N0IG9mIG1hdGVyaWFscyBwdXJjaGFzZWQsIHN1cHBvcnRlZCBieSByZWNlaXB0cy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZXN0aW1hdGVkIG51bWJlciBvZiBob3VycyBzcGVudCBvbiBlYWNoIHJlcGFpciwgYWxvbmcgd2l0aCBhIHJlYXNvbmFibGUgaG91cmx5IHJhdGUgZm9yIGxhYm9yLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIG5vdGUgdGhhdCBhY2N1cmF0ZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGRlZHVjdGlvbnMgcmVsYXRlZCB0byBwcm9wZXJ0eSByZXBhaXIgZXhwZW5zZXMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgSW1wcm92ZW1lbnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIEltcHJvdmVtZW50c1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIG1hZGUgdXBncmFkZXMgb3IgZW5oYW5jZW1lbnRzIHRvIHlvdXIgcmVudGFsIHByb3BlcnR5IHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jb3Jwb3JhdGUgdGhlc2UgaW1wcm92ZW1lbnRzIGludG8geW91ciB0YXggZG9jdW1lbnRhdGlvbiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIEVhY2ggSW1wcm92ZW1lbnQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCB1cGdyYWRlIG9yIGVuaGFuY2VtZW50IG1hZGUgdG8gdGhlIHByb3BlcnR5LiBUaGlzIGNvdWxkIGluY2x1ZGUgcmVub3ZhdGlvbnMsIGFkZGl0aW9ucywgb3IgYW55IHVwZ3JhZGVzIHRoYXQgaGF2ZSBpbmNyZWFzZWQgaXRzIHZhbHVlLCBleHRlbmRlZCBpdHMgbGlmZXNwYW4sIG9yIGFkYXB0ZWQgaXQgdG8gbmV3IHVzZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2YgSW1wcm92ZW1lbnRzOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSBvciByYW5nZSBvZiBkYXRlcyB3aGVuIHRoZSBpbXByb3ZlbWVudHMgd2VyZSBzdGFydGVkIGFuZCBjb21wbGV0ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdHMgSW52b2x2ZWQ6PC9zdHJvbmc+IERldGFpbGVkIGV4cGVuc2VzIHJlbGF0ZWQgdG8gZWFjaCBpbXByb3ZlbWVudCBwcm9qZWN0LiBUaGlzIGluY2x1ZGVzIG1hdGVyaWFscywgbGFib3IsIHBlcm1pdHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29zdHMuIFBsZWFzZSBwcm92aWRlIGl0ZW1pemVkIHJlY2VpcHRzIG9yIGludm9pY2VzIGlmIGF2YWlsYWJsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBQYXltZW50Ojwvc3Ryb25nPiBDb3BpZXMgb2YgY2FuY2VsbGVkIGNoZWNrcywgYmFuayBzdGF0ZW1lbnRzLCBvciBlbGVjdHJvbmljIHBheW1lbnQgY29uZmlybWF0aW9ucyB0aGF0IHByb3ZlIHBheW1lbnQgZm9yIHRoZSBpbXByb3ZlbWVudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QmVmb3JlIGFuZCBBZnRlciBQaWN0dXJlczo8L3N0cm9uZz4gSWYgYXZhaWxhYmxlLCBwaG90b2dyYXBocyBvZiB0aGUgcHJvcGVydHkgYmVmb3JlIGFuZCBhZnRlciB0aGUgaW1wcm92ZW1lbnRzIHdlcmUgbWFkZS4gVGhpcyBoZWxwcyBpbiBzdWJzdGFudGlhdGluZyB0aGUgZW5oYW5jZW1lbnQgdG8geW91ciBwcm9wZXJ0eSdzIHZhbHVlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyYWN0b3IgSW5mb3JtYXRpb246PC9zdHJvbmc+IElmIGNvbnRyYWN0b3JzIHdlcmUgdXNlZCwgcGxlYXNlIHByb3ZpZGUgdGhlaXIgYnVzaW5lc3MgbmFtZXMsIGFkZHJlc3NlcywgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjb21wdXRpbmcgcG90ZW50aWFsIHRheCBkZWR1Y3Rpb25zIG9yIGJlbmVmaXRzIHRoYXQgbWF5IGJlIGFwcGxpY2FibGUgdG8geW91IGFzIGEgcmVzdWx0IG9mIHRoZXNlIHByb3BlcnR5IGltcHJvdmVtZW50cy4gUGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBnYXRoZXJlZCBhbmQgc3VibWl0dGVkIGFzIHNvb24gYXMgcG9zc2libGUsIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm5zLjwvcD5cbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIEFjdGl2aXR5IFBhcnRpY2lwYXRpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgQWN0aXZpdHkgUGFydGljaXBhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHdlIG1vdmUgZm9yd2FyZCB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uLCBpdCBoYXMgYmVjb21lIG5lY2Vzc2FyeSB0byBjb2xsZWN0IGEgYml0IG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgYWN0aXZlIHBhcnRpY2lwYXRpb24gaW4gcmVudGFsIHByb3BlcnR5IGFjdGl2aXRpZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGFzc2luZyBzcGVjaWZpYyB0YXggdGVzdHMgdGhhdCBhcHBseSB0byBpbmRpdmlkdWFscyBhY3RpdmVseSBpbnZvbHZlZCBpbiB0aGVpciByZW50YWwgcHJvcGVydGllcy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGRldGFpbHMgdG8gZW5zdXJlIHdlIG1lZXQgYWxsIHJlcXVpcmVtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIFBhcnRpY2lwYXRpb246PC9zdHJvbmc+IEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgeW91ciBhY3RpdmUgcm9sZXMgdGhpcyB0YXggeWVhci4gVGhpcyBpbmNsdWRlcyBtYWtpbmcgZGVjaXNpb25zIHN1Y2ggYXMgYXBwcm92aW5nIG5ldyB0ZW5hbnRzLCBzZXR0aW5nIHJlbnRhbCB0ZXJtcywgb3IgYXV0aG9yaXppbmcgcmVwYWlycyBhbmQgbWFpbnRlbmFuY2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VGltZSBTcGVudDo8L3N0cm9uZz4gQW4gZXN0aW1hdGVkIG51bWJlciBvZiBob3VycyB5b3UgcGVyc29uYWxseSBzcGVudCBvbiBhY3Rpdml0aWVzIHJlbGF0ZWQgdG8gdGhlIG1hbmFnZW1lbnQgYW5kIGRlY2lzaW9uLW1ha2luZyBvZiB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZWNpc2lvbiBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIHJlY29yZHMgb3IgY29ycmVzcG9uZGVuY2UgdGhhdCBzaG93Y2FzZSB5b3VyIGludm9sdmVtZW50IGluIGtleSBkZWNpc2lvbnMgKGUtbWFpbHMsIHNpZ25lZCBkb2N1bWVudHMsIGV0Yy4pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IE1hbmFnZW1lbnQgRW5nYWdlbWVudDo8L3N0cm9uZz4gSWYgeW91J3ZlIGVuZ2FnZWQgd2l0aCBhIHByb3BlcnR5IG1hbmFnZXIsIGEgZGVzY3JpcHRpb24gb2YgdGhlaXIgcm9sZSB2ZXJzdXMgdGhlIHRhc2tzIHlvdSBwZXJzb25hbGx5IGhhbmRsZSB3b3VsZCBiZSBoZWxwZnVsLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB3aXRoIHRoZXNlIHNwZWNpZmljcyB3aWxsIGdyZWF0bHkgZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIGFkdmFudGFnZW91cyBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiByZWdhcmRpbmcgcmVudGFsIGFjdGl2aXRpZXMuIElmIHRoZXJlIGFyZSBhbnkgYXNwZWN0cyBvZiB0aGlzIHJlcXVlc3QgdGhhdCByZXF1aXJlIGNsYXJpZmljYXRpb24sIG9yIGlmIGFzc2lzdGFuY2UgaXMgbmVlZGVkLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIHNwZW50IG1vcmUgdGhhbiBoYWxmIG9mIHlvdXIgd29ya2luZyB0aW1lIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgdGhpcyB0YXggeWVhci4gVG8gcHJvcGVybHkgZXZhbHVhdGUgeW91ciBlbGlnaWJpbGl0eSBmb3IgdGF4IGJlbmVmaXRzIGFzIGEgUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgIDxsaT48c3Ryb25nPlN1bW1hcnkgb2YgQW5udWFsIFdvcmtpbmcgSG91cnM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgc3VtbWFyeSBvZiB5b3VyIHRvdGFsIHdvcmtpbmcgaG91cnMgdGhpcyB5ZWFyLCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgaG91cnMgZGVkaWNhdGVkIHRvIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZWFsIEVzdGF0ZSBBY3Rpdml0aWVzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHN1Y2ggYXMgY29udHJhY3RzLCBlbmdhZ2VtZW50IGxldHRlcnMsIG9yIGNsaWVudCBpbnZvaWNlcyB0aGF0IHByb3ZlIHlvdXIgcGFydGljaXBhdGlvbiBpbiByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzIChlLmcuLCBzYWxlcywgbGVhc2luZywgbWFuYWdlbWVudCkuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5MaXN0IG9mIFByb3BlcnRpZXM6PC9zdHJvbmc+IEEgbGlzdCBvZiBwcm9wZXJ0aWVzIHlvdSBoYXZlIG1hbmFnZWQsIHNvbGQsIG9yIGFyZSBjdXJyZW50bHkgc2VsbGluZywgaW5jbHVkaW5nIHRoZWlyIGxvY2F0aW9uIGFuZCB0aGUgbmF0dXJlIG9mIHlvdXIgaW52b2x2ZW1lbnQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBKb2IgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgYnJpZWYgb3V0bGluZSBvZiB5b3VyIHJvbGUocykgaW4gcmVhbCBlc3RhdGUgYWN0aXZpdGllcywgc3BlY2lmeWluZyB3aGV0aGVyIHlvdXIgaW52b2x2ZW1lbnQgaXMgcHJpbWFyaWx5IGFzIGEgYnJva2VyLCBhZ2VudCwgcHJvcGVydHkgbWFuYWdlciwgZXRjLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+UmVhbCBFc3RhdGUgTGljZW5zZXMgb3IgQ2VydGlmaWNhdGlvbnM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgbGljZW5zZXMgb3IgY2VydGlmaWNhdGlvbnMgdGhhdCB2YWxpZGF0ZSB5b3VyIHByb2Zlc3Npb25hbCBzdGF0dXMgaW4gdGhlIHJlYWwgZXN0YXRlIHNlY3Rvci48L2xpPlxuICAgIDxsaT48c3Ryb25nPkNhbGVuZGFyIG9yIFNjaGVkdWxlOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIGEgY2FsZW5kYXIgb3Igc2NoZWR1bGUgcmVmbGVjdGluZyB5b3VyIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgdGhyb3VnaG91dCB0aGUgeWVhciB0byBoZWxwIGNvcnJvYm9yYXRlIHRoZSB0aW1lIHNwZW50IGluIHRoZXNlIGFjdGl2aXRpZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGlzIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gdXMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJucy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZC4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFydGlhbCBSZW50YWwgUHJvcGVydHlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQYXJ0aWFsIFJlbnRhbCBQcm9wZXJ0eVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgbGV0dGluZyB1cyBrbm93IHRoYXQgeW91IHJlbnRlZCBvdXQgYSBwb3J0aW9uIG9mIHlvdXIgcHJvcGVydHkgdGhpcyB0YXggeWVhciB3aGlsZSB1c2luZyB0aGUgcmVzdCBmb3IgcGVyc29uYWwgcHVycG9zZXMuIFRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGJlc3QgdGF4IGFkdmFudGFnZXMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBwYXJ0aWFsIHJlbnRhbCBwcm9wZXJ0eTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXRhaWxzOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Db21wbGV0ZSBhZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5EZXNjcmlwdGlvbiBvZiB0aGUgcmVudGVkIHBvcnRpb24gYW5kIHRoZSBwZXJzb25hbCB1c2UgcG9ydGlvbi48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudDo8L3N0cm9uZz5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5TdGFydCBhbmQgZW5kIGRhdGVzIG9mIHRoZSByZW50YWwgcGVyaW9kIHdpdGhpbiB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBJbmNvbWU6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBhZHZhbmNlIHJlbnQgb3Igc2VjdXJpdHkgZGVwb3NpdHMgbm90IHJldHVybmVkIHRvIHRoZSB0ZW5hbnQuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2VzOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgZXhwZW5zZXMgZm9yIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyByZXBhaXJzLCB1dGlsaXRpZXMsIGluc3VyYW5jZSwgYW5kIHByb3BlcnR5IHRheGVzLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGV4cGVuc2VzIHNoYXJlZCBiZXR3ZWVuIHRoZSByZW50YWwgYW5kIHBlcnNvbmFsIHVzZSBwb3J0aW9ucywgYW5kIGhvdyB0aGV5IGFyZSBkaXZpZGVkLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Vc2Ugb2YgUHJvcGVydHk6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIG51bWJlciBvZiBkYXlzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIG51bWJlciBvZiBkYXlzIHJlbnRlZCBhdCBmYWlyIHJlbnRhbCB2YWx1ZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW1wcm92ZW1lbnRzIGFuZCBSZXBhaXJzOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBpbXByb3ZlbWVudHMgb3IgcmVwYWlycyBtYWRlIHNwZWNpZmljYWxseSBpbiB0aGUgcmVudGFsIHBvcnRpb24gYW5kIHRoZSBjb3N0IGludm9sdmVkLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkZXRhaWxzIGFuZCBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gVGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgdGhpcyBpbmZvcm1hdGlvbiBhcmUgY3J1Y2lhbCBmb3IgY29ycmVjdCB0YXggZmlsaW5nIGFuZCBvcHRpbWl6aW5nIHlvdXIgcG90ZW50aWFsIGRlZHVjdGlvbnMgYW5kIHRheCBiZW5lZml0cy48L3A+XG4gICAgPHA+RG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dCBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJzb25hbCBVc2UgUmVudGFsXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdXNpbmcgeW91ciByZW50YWwgcHJvcGVydHkgZm9yIHBlcnNvbmFsIHB1cnBvc2VzIGR1cmluZyB0aGUgbGFzdCB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgZGF5cyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3Nlczo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIGV4YWN0IG51bWJlciBvZiBkYXlzIGR1cmluZyB0aGUgdGF4IHllYXIgd2hlbiB0aGUgcHJvcGVydHkgd2FzIHVzZWQgYnkgeW91LCB5b3VyIGZhbWlseSwgb3IgZnJpZW5kcyB3aXRob3V0IGNoYXJnaW5nIHJlbnQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgZGF5cyByZW50ZWQgYXQgZmFpciByZW50YWwgcHJpY2U6PC9zdHJvbmc+IFByb3ZpZGUgdGhlIG51bWJlciBvZiBkYXlzIHRoZSBwcm9wZXJ0eSB3YXMgYWN0dWFsbHkgcmVudGVkIG91dCB0byB0ZW5hbnRzIGF0IGEgZmFpciByZW50YWwgcHJpY2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIGluY29tZSByZWNlaXZlZDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgdG90YWwgYW1vdW50IG9mIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgZXhwZW5zZXM6PC9zdHJvbmc+IFByb3ZpZGUgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBleHBlbnNlcyBpbmN1cnJlZCBmb3IgdGhlIHByb3BlcnR5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFkdmVydGlzaW5nLCBjbGVhbmluZyBhbmQgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBwcm9wZXJ0eSB0YXhlcywgbW9ydGdhZ2UgaW50ZXJlc3QsIGFuZCBhbnkgcmVwYWlycy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgYW5kIGRhdGVzOjwvc3Ryb25nPiBMaXN0IGFueSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgcHJvcGVydHkgZHVyaW5nIHRoZSB0YXggeWVhciwgYWxvbmcgd2l0aCB0aGUgZGF0ZSBvZiBpbXByb3ZlbWVudCBhbmQgdGhlIGNvc3QuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgVGF4IFN0YXRlbWVudCBhbmQgTW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50Ojwvc3Ryb25nPiBBdHRhY2ggYSBjb3B5IG9mIHlvdXIgYW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnQgYW5kIG1vcnRnYWdlIGludGVyZXN0IHN0YXRlbWVudCBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBlbmFibGUgdXMgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgcG9ydGlvbiBvZiBleHBlbnNlcyB0aGF0IGNhbiBiZSBkZWR1Y3RlZCBhbmQgcmVwb3J0IHlvdXIgaW5jb21lIGFjY3VyYXRlbHkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgY291bnRzIGFzIHBlcnNvbmFsIHVzZSB2ZXJzdXMgcmVudGFsIHVzZSwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD4gIFxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIHJlbnRpbmcgb3V0IHBhcnQgb2YgeW91ciBwcm9wZXJ0eSBmb3IgcHJvZml0LCB3aGlsZSBhbHNvIHVzaW5nIGl0IGluIGEgbWFubmVyIHRoYXQgbWF5IGNsYXNzaWZ5IGl0IGFzIHlvdXIgcmVzaWRlbmNlLiBUbyBhY2N1cmF0ZWx5IGNhcHR1cmUgYWxsIGluZm9ybWF0aW9uIGFuZCBjb21wbHkgd2l0aCB0YXggcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQvTGVhc2U6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMsIHJlbnRhbCBwZXJpb2QsIGFuZCBwYXltZW50IGRldGFpbHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBJbmNvbWUgUmVjb3Jkczo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiBhbGwgcmVudGFsIGluY29tZSByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IFJlY2VpcHRzIGFuZCByZWNvcmRzIG9mIGV4cGVuc2VzIHJlbGF0ZWQgdG8gdGhlIHJlbnRhbCBhY3Rpdml0eS4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCByZXBhaXJzLCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBpbnN1cmFuY2UsIGFuZCBwcm9wZXJ0eSBtYW5hZ2VtZW50IGZlZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIFVzZSBEZXRhaWxzOjwvc3Ryb25nPiBBIGxvZyBvciBjYWxlbmRhciBkb2N1bWVudGluZyB0aGUgc3BlY2lmaWMgZGF5cyB0aGUgcHJvcGVydHkgd2FzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzIGFuZCBub3QgcmVudGVkIG91dC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgVGF4IGFuZCBNb3J0Z2FnZSBJbnRlcmVzdCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgcHJvcGVydHkgdGF4IHN0YXRlbWVudHMgYW5kIG1vcnRnYWdlIGludGVyZXN0IHN0YXRlbWVudHMsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBSZWNvcmRzIG9mIGFueSBwcm9wZXJ0eSBpbXByb3ZlbWVudHMgb3IgZGVwcmVjaWF0aW9uIHNjaGVkdWxlcyBpZiBwcmV2aW91c2x5IGNsYWltZWQgb24geW91ciB0YXggcmV0dXJucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+SXQgaXMgY3J1Y2lhbCB0aGF0IHdlIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgZG9jdW1lbnRzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIG9yIGNvbnRhY3QgdXMgZGlyZWN0bHkgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBjb25jZXJucy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSb3lhbHR5IEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlJveWFsdHkgSW5jb21lXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB5b3UndmUgaW5kaWNhdGVkIHJlY2VpdmluZyBwYXltZW50cyB0aGF0IGNvdWxkIGJlIGNvbnNpZGVyZWQgcm95YWx0eSBpbmNvbWUgdGhpcyBwYXN0IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWxsIEZvcm1zIDEwOTktTUlTQzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgY29waWVzIG9mIGFueSAxMDk5LU1JU0MgZm9ybXMgcmVjZWl2ZWQgZm9yIHJveWFsdHkgcGF5bWVudHMuIEluY2x1ZGUgdGhvc2UgZnJvbSB0cmFkaXRpb25hbCBzb3VyY2VzIGxpa2UgcGF0ZW50cywgY29weXJpZ2h0cywgYW5kIG1pbmVyYWwgcmlnaHRzLCBhcyB3ZWxsIGFzIGFueSBmcm9tIGRpZ2l0YWwgY29udGVudCBwbGF0Zm9ybXMgc3VjaCBhcyBVZGVteSwgWW91VHViZSwgZXRjLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIFN0YXRlbWVudCBvZiBFYXJuaW5nczo8L3N0cm9uZz4gSWYgeW91IHJlY2VpdmUgcm95YWx0eSBpbmNvbWUgZnJvbSBzb3VyY2VzIHRoYXQgZG8gbm90IHByb3ZpZGUgYSAxMDk5LU1JU0MsIG9yIGluIGFkZGl0aW9uIHRvIHRob3NlIHRoYXQgZG8sIHdlIG5lZWQgYSBkZXRhaWxlZCBzdGF0ZW1lbnQgb3IgbG9nIG9mIHRoZXNlIGVhcm5pbmdzLiBUaGlzIHNob3VsZCBpbmNsdWRlIGRhdGVzLCBhbW91bnRzLCBhbmQgc291cmNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBleHBlbnNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdlbmVyYXRpb24gb2YgdGhpcyByb3lhbHR5IGluY29tZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYXJrZXRpbmcsIHByb2R1Y3Rpb24sIGFuZCBsZWdhbCBleHBlbnNlcy4gUGxlYXNlIHByb3ZpZGUgcmVjZWlwdHMsIGludm9pY2VzLCBvciBhIGRldGFpbGVkIGV4cGVuc2UgbG9nLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRpZ2l0YWwgQ29udGVudCBQbGF0Zm9ybSBSZXBvcnRzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIGFueSB5ZWFyLWVuZCBzdW1tYXJ5IHJlcG9ydHMgb3IgaW5jb21lIHN0YXRlbWVudHMgcHJvdmlkZWQgYnkgZGlnaXRhbCBwbGF0Zm9ybXMgd2hlcmUgeW91ciBjb250ZW50IGlzIGhvc3RlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgV2l0aGhvbGRpbmcgTm90aWNlczo8L3N0cm9uZz4gSWYgdGF4IHdhcyB3aXRoaGVsZCBmcm9tIGFueSBvZiB5b3VyIHJveWFsdHkgcGF5bWVudHMsIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3Igbm90aWNlcyBpbmRpY2F0aW5nIHRoZSBhbW91bnQgd2l0aGhlbGQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZG9jdW1lbnRzIGFuZCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gd2lsbCBoZWxwIHVzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHByZXBhcmF0aW9uIGlzIGJvdGggYWNjdXJhdGUgYW5kIG1heGltaXplZCBmb3IgeW91ciBiZW5lZml0LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgaXRlbXMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIb3RlbCBNb3RlbCBCZWQgQnJlYWtmYXN0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiSG90ZWwgTW90ZWwgQmVkIEJyZWFrZmFzdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBhY2N1cmF0ZWx5IGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBvd25pbmcgcmVudGFsIHByb3BlcnRpZXMgdGhhdCBvcGVyYXRlIGFzIGEgSG90ZWwsIE1vdGVsLCBCZWQgYW5kIEJyZWFrZmFzdCwgb3Igb2ZmZXIgc2hvcnQtdGVybSBhY2NvbW1vZGF0aW9ucyBzaW1pbGFyIHRvIEFpcmJuYi4gVG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHNlcnZpY2UgYW5kIGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXRhaWxzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHByb3BlcnR5IHlvdSByZW50IG91dCBvbiBhIHNob3J0LXRlcm0gYmFzaXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIFJlY29yZHM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgYWxsIGluY29tZSByZWNlaXZlZCBmcm9tIHRoZXNlIHByb3BlcnRpZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcmVudGFsIGluY29tZSwgY2xlYW5pbmcgZmVlcywgYW5kIGFueSBvdGhlciBjaGFyZ2VzIHRvIHJlbnRlcnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBDb21wcmVoZW5zaXZlIGxpc3Qgb2YgYWxsIGV4cGVuc2VzIHJlbGF0ZWQgdG8gZWFjaCByZW50YWwgYWN0aXZpdHkuIFRoaXMgaW5jbHVkZXMgbW9ydGdhZ2UgaW50ZXJlc3QsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIHJlcGFpcnMgYW5kIG1haW50ZW5hbmNlLCB1dGlsaXRpZXMsIG1hbmFnZW1lbnQgZmVlcywgYW5kIGFkdmVydGlzaW5nIGNvc3RzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk9jY3VwYW5jeSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTnVtYmVyIG9mIGRheXMgZWFjaCBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBkdXJpbmcgdGhlIHllYXIsIGFzIHdlbGwgYXMgdGhlIG51bWJlciBvZiBkYXlzIGl0IHdhcyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3NlcywgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5MZWdhbCBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBDb3BpZXMgb2YgYW55IGxvY2FsIGxpY2Vuc2VzLCBwZXJtaXRzLCBvciByZWdpc3RyYXRpb25zIHJlcXVpcmVkIGZvciBvcGVyYXRpbmcgdGhlc2UgcmVudGFsIHByb3BlcnRpZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgbGlzdCBpcyBub3QgZXhoYXVzdGl2ZSwgYW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGJlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGFuZCByZXBseSB0byB0aGlzIGVtYWlsIG9yIHVwbG9hZCB0aGVtIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBZb3VyIHByb21wdCBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBlc3NlbnRpYWwgZm9yIHRoZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciBjaG9vc2luZyBvdXIgc2VydmljZXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgUmVjb3ZlcnlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIFJlY292ZXJ5XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHJlY2VpdmluZyBwYXltZW50cyBvciByZWZ1bmRzIGNvbnNpZGVyZWQgYSAnVGF4YWJsZSBSZWNvdmVyeScgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jb3Jwb3JhdGUgdGhpcyBpbnRvIHlvdXIgdGF4IGZpbGluZ3MsIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMuIENvdWxkIHlvdSBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbjxvbD5cbiAgPGxpPjxiPkFtb3VudCBvZiBUYXhhYmxlIFJlY292ZXJ5OjwvYj4gVGhlIHRvdGFsIHN1bSBvZiBhbGwgcGF5bWVudHMgb3IgcmVmdW5kcyByZWNlaXZlZCB0aGF0IGFyZSBjbGFzc2lmaWVkIGFzIHRheGFibGUgcmVjb3ZlcnkuPC9saT5cbiAgPGxpPjxiPlNvdXJjZSBEb2N1bWVudGF0aW9uOjwvYj4gUGxlYXNlIHByb3ZpZGUgYW55IG9mZmljaWFsIHN0YXRlbWVudHMgb3IgZG9jdW1lbnRzIGNvbmZpcm1pbmcgdGhlc2UgcGF5bWVudHMgb3IgcmVmdW5kcy4gVGhpcyBjb3VsZCBpbmNsdWRlIGJhbmsgc3RhdGVtZW50cywgcmVmdW5kIG9yIGNvbXBlbnNhdGlvbiBsZXR0ZXJzLCBvciBhbnkgb3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi48L2xpPlxuICA8bGk+PGI+TmF0dXJlIG9mIHRoZSBPcmlnaW5hbCBEZWR1Y3Rpb24gb3IgQ3JlZGl0OjwvYj4gQSBicmllZiBleHBsYW5hdGlvbiBvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBvcmlnaW5hbCBleHBlbnNlIG9yIGludmVzdG1lbnQgdGhhdCBsZWQgdG8gdGhlIHRheGFibGUgcmVjb3ZlcnkuIFRoaXMgaW5jbHVkZXMgdGhlIHRheCB5ZWFyIG9mIHRoZSBkZWR1Y3Rpb24gb3IgY3JlZGl0LjwvbGk+XG4gIDxsaT48Yj5EYXRlIFJlY2VpdmVkOjwvYj4gVGhlIHNwZWNpZmljIGRhdGVzIHdoZW4gdGhlc2UgcGF5bWVudHMgb3IgcmVmdW5kcyB3ZXJlIHJlY2VpdmVkLjwvbGk+XG4gIDxsaT48Yj5BbnkgUmVsYXRlZCBFeHBlbnNlIERvY3VtZW50YXRpb246PC9iPiBJZiB0aGVyZSB3ZXJlIGFueSBleHBlbnNlcyBpbmN1cnJlZCB0byByZWNlaXZlIHRoaXMgcmVjb3ZlcnkgKHN1Y2ggYXMgbGVnYWwgZmVlcyksIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIGRvY3VtZW50YXRpb24uPC9saT5cbjwvb2w+XG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciB1cyB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBjb21wbGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuIElmIHlvdSBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0YXhhYmxlIHJlY292ZXJpZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzZXBhcmF0ZSBpbnN0YW5jZS48L3A+XG48cD5QbGVhc2UgbGV0IHVzIGtub3cgaWYgeW91IG5lZWQgYW55IGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24uIFdlIGFyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgQWxpbW9ueVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgQWxpbW9ueVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYCAgICA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBwcmVsaW1pbmFyeSBpbmZvcm1hdGlvbiBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFdlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBhbGltb255IHBheW1lbnRzIGluIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jbHVkZSB0aGlzIGluIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscyBhbmQgZG9jdW1lbnRzIGJhc2VkIG9uIHRoZSBkYXRlIG9mIHlvdXIgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC48L3A+XG4gICAgPHA+QWxpbW9ueSBwYXltZW50cyBhcmUgY29uc2lkZXJlZCB0YXhhYmxlIGluY29tZSBmb3IgdGhlIHJlY2VpdmVyIGRlcGVuZGluZyBvbiB0aGUgZGF0ZSBvZiB0aGUgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC4gRGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudHMgZXhlY3V0ZWQgYWZ0ZXIgRGVjZW1iZXIgMzEsIDIwMTgsIGRvIG5vdCBjb3VudCBhbGltb255IHBheW1lbnRzIGFzIHRheGFibGUgaW5jb21lLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgdG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcGF5bWVudHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiB5b3VyIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQ6PC9zdHJvbmc+IFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhbGltb255IHBheW1lbnRzIHlvdSByZWNlaXZlZCBhcmUgdGF4YWJsZS4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudCBvZiBhbGltb255IHJlY2VpdmVkIHRoaXMgdGF4IHllYXI6PC9zdHJvbmc+IFRvdGFsIGFubnVhbCBhbW91bnQgcmVjZWl2ZWQgaW4gYWxpbW9ueSBwYXltZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgYWxpbW9ueSBwYXltZW50czo8L3N0cm9uZz4gQmFuayBzdGF0ZW1lbnRzLCB0cmFuc2ZlciByZWNlaXB0cywgb3IgYW55IGxlZ2FsIGRvY3VtZW50cyBzaG93aW5nIHRoZSBhbW91bnQgb2YgYWxpbW9ueSByZWNlaXZlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QYXllcuKAmXMgaW5mb3JtYXRpb246PC9zdHJvbmc+IEZ1bGwgbmFtZSBhbmQgU29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKSBvZiB0aGUgcGVyc29uIGZyb20gd2hvbSB5b3UgaGF2ZSByZWNlaXZlZCB0aGUgYWxpbW9ueSBwYXltZW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGlzIGNydWNpYWwgZm9yIHRoZSB0aW1lbHkgYW5kIGFjY3VyYXRlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGxldCB1cyBrbm93IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiR292ZXJubWVudCBCZW5lZml0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkdvdmVybm1lbnQgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVwb3J0ZWQgcmVjZWl2aW5nIGdvdmVybm1lbnQgYmVuZWZpdHMgdGhhdCBtYXkgYmUgdGF4YWJsZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGZpbGluZywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+PHN0cm9uZz5Gb3JtIDEwOTktRzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIEZvcm0gMTA5OS1HIGZvciBlYWNoIGluc3RhbmNlIG9mIGdvdmVybm1lbnQgYmVuZWZpdHMgcmVjZWl2ZWQuIFRoaXMgZm9ybSBpcyB0eXBpY2FsbHkgaXNzdWVkIGZvciB1bmVtcGxveW1lbnQgY29tcGVuc2F0aW9uLCBzdGF0ZSBvciBsb2NhbCBpbmNvbWUgdGF4IHJlZnVuZHMsIGNyZWRpdHMgb3Igb2Zmc2V0cywgYW5kIG90aGVyIGdvdmVybm1lbnQgcGF5bWVudHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIGxpc3Qgb2YgYmVuZWZpdHMgcmVjZWl2ZWQ6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBnb3Zlcm5tZW50IGJlbmVmaXRzIG5vdCByZXBvcnRlZCBvbiBGb3JtIDEwOTktRyAoc3VjaCBhcyBjZXJ0YWluIHdlbGZhcmUgYmVuZWZpdHMpLCBwbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGxpc3QgaW5jbHVkaW5nIHRoZSB0eXBlIG9mIGJlbmVmaXQsIGFtb3VudCByZWNlaXZlZCwgYW5kIHRoZSBhZ2VuY3kgdGhhdCBwcm92aWRlZCB0aGUgYmVuZWZpdC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+U29jaWFsIFNlY3VyaXR5IEJlbmVmaXRzOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZWQgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzLCBpbmNsdWRlIHlvdXIgU1NBLTEwOTkgb3IgUlJCLTEwOTkgZm9ybSB3aGljaCByZXBvcnRzIHRoZXNlIGVhcm5pbmdzLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGZvciBhbnkgd2l0aGhlbGQgdGF4ZXM6PC9zdHJvbmc+IElmIHRheGVzIHdlcmUgd2l0aGhlbGQgZnJvbSBhbnkgYmVuZWZpdHMgcmVjZWl2ZWQsIGluY2x1ZGUgdGhlIGFwcGxpY2FibGUgZG9jdW1lbnRhdGlvbiBzaG93aW5nIHRoZSBhbW91bnQgd2l0aGhlbGQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBzZW5kIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHlvdXIgdGF4IGZpbGluZ3MgYXJlIHByb2Nlc3NlZCB0aW1lbHkgYW5kIGNvcnJlY3RseS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU29jaWFsIFNlY3VyaXR5IEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNvY2lhbCBTZWN1cml0eSBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4uIEFzIHlvdSd2ZSBpbmRpY2F0ZWQgcmVjZWlwdCBvZiBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMgdGhpcyB0YXggeWVhciwgd2UgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cy9pbmZvcm1hdGlvbiB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHRheCBmaWxpbmc6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgQmVuZWZpdCBTdGF0ZW1lbnQgKEZvcm0gU1NBLTEwOTkpPC9zdHJvbmc+IC0gVGhpcyBmb3JtIGRldGFpbHMgdGhlIHRvdGFsIGFtb3VudCBvZiBzb2NpYWwgc2VjdXJpdHkgYmVuZWZpdHMgcmVjZWl2ZWQuIElmIHlvdSBoYXZlIG1pc3BsYWNlZCB0aGlzIGZvcm0sIGl0IGNhbiBiZSBvYnRhaW5lZCBvbmxpbmUgdGhyb3VnaCB5b3VyIFNvY2lhbCBTZWN1cml0eSBhY2NvdW50LjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+Tm90aWNlIG9mIEFkanVzdGVkIEFtb3VudDwvc3Ryb25nPiAoaWYgYXBwbGljYWJsZSkgLSBJZiB0aGVyZSBoYXZlIGJlZW4gYW55IGFkanVzdG1lbnRzIG9yIGNvcnJlY3Rpb25zIHRvIHlvdXIgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzIGR1cmluZyB0aGUgeWVhciwgcGxlYXNlIHByb3ZpZGUgYW55IG5vdGljZXMgb3IgZG9jdW1lbnRhdGlvbiByZWZsZWN0aW5nIHRoZXNlIGNoYW5nZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5TdXBwbGVtZW50YWwgU2VjdXJpdHkgSW5jb21lIChTU0kpPC9zdHJvbmc+IChpZiBhcHBsaWNhYmxlKSAtIEFsdGhvdWdoIFNTSSBpcyB0eXBpY2FsbHkgbm90IHRheGFibGUsIGRvY3VtZW50YXRpb24gb2YgdGhlc2UgcGF5bWVudHMgaXMgc3RpbGwgcmVxdWlyZWQgZm9yIGNvbXByZWhlbnNpdmUgZmluYW5jaWFsIGFzc2Vzc21lbnQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyB0aGUgdGF4YWJsZSBwb3J0aW9uIG9mIHlvdXIgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzLCBpZiBhbnksIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLiBGYWlsdXJlIHRvIHByb3ZpZGUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGluZm9ybWF0aW9uIG1heSByZXN1bHQgaW4gZGVsYXlzIG9yIGluYWNjdXJhY2llcyBpbiB5b3VyIHRheCBmaWxpbmcuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoZXNlIG1hdHRlcnMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBvYnRhaW5pbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkdhbWJsaW5nIFdpbm5pbmdzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiR2FtYmxpbmcgV2lubmluZ3NcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5XZSB1bmRlcnN0YW5kIGZyb20geW91ciBwcmV2aW91cyBhbnN3ZXJzIHRoYXQgeW91IGhhdmUgZXhwZXJpZW5jZWQgZ2FtYmxpbmcgd2lubmluZ3MgdGhpcyB0YXggeWVhciBmcm9tIGxvdHRlcmllcywgY2FzaW5vcywgYmV0dGluZywgb3Igb3RoZXIgZm9ybXMgb2YgZ2FtYmxpbmcuIFRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCBmaWxpbmdzLCBpdCdzIGVzc2VudGlhbCB0aGF0IHdlIGNvbGxlY3Qgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIHdpbm5pbmdzLjwvcD5cbjxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XG48b2w+XG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gZm9yIEVhY2ggV2lubmluZzo8L3N0cm9uZz4gVGhpcyBjYW4gaW5jbHVkZSBXLTJHIGZvcm1zLCBzdGF0ZW1lbnRzIGZyb20gY2FzaW5vcywgcmFjZXRyYWNrcywgb3Igb3RoZXIgZ2FtYmxpbmcgZXN0YWJsaXNobWVudHMsIGFuZCBhbnkgb3RoZXIgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB0aGF0IHJlcG9ydHMgeW91ciB3aW5uaW5ncy48L2xpPlxuICA8bGk+PHN0cm9uZz5EYXRlcyBvZiBXaW5uaW5nczo8L3N0cm9uZz4gVGhlIHNwZWNpZmljIGRhdGVzIG9uIHdoaWNoIHlvdSBoYWQgZ2FtYmxpbmcgd2lubmluZ3MuPC9saT5cbiAgPGxpPjxzdHJvbmc+VHlwZXMgb2YgR2FtYmxpbmcgQWN0aXZpdGllczo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgd2hldGhlciB5b3VyIHdpbm5pbmdzIHdlcmUgZnJvbSBsb3R0ZXJpZXMsIGNhc2lub3MsIGJldHRpbmcsIHNwb3J0cyBiZXR0aW5nLCBnYW1lcyBvZiBjaGFuY2UsIG9yIGFueSBvdGhlciBmb3JtcyBvZiBnYW1ibGluZy48L2xpPlxuICA8bGk+PHN0cm9uZz5BbW91bnQgb2YgV2lubmluZ3M6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgd29uIGZyb20gZWFjaCBnYW1ibGluZyBhY3Rpdml0eS4gUGxlYXNlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBjYXNoIHdpbm5pbmdzIGFuZCB0aGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgYW55IG5vbi1jYXNoIHByaXplcy48L2xpPlxuICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBSZWxhdGVkIHRvIEdhbWJsaW5nIEFjdGl2aXRpZXM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIGxpc3QgYW55IGV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciBnYW1ibGluZyBhY3Rpdml0aWVzLCBzdWNoIGFzIGJ1eS1pbnMgb3IgdHJhdmVsIGV4cGVuc2VzLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZXNlIGV4cGVuc2VzIG1heSB2YXJ5LjwvbGk+XG4gIDxsaT48c3Ryb25nPkxvc3Nlczo8L3N0cm9uZz4gSWYgeW91IGhhdmUgcmVjb3JkcyBvZiB5b3VyIGxvc3NlcywgcGxlYXNlIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBvZiB0aGVzZSBsb3NzZXMgYXMgdGhleSBjYW4gcG90ZW50aWFsbHkgb2Zmc2V0IHlvdXIgd2lubmluZ3MgZm9yIHRheCBwdXJwb3Nlcy4gTm90ZSwgbG9zc2VzIGNhbiBvbmx5IGJlIGNsYWltZWQgdXAgdG8gdGhlIGFtb3VudCBvZiB0b3RhbCB3aW5uaW5ncy48L2xpPlxuPC9vbD5cbjxwPkl0J3MgaW1wb3J0YW50IHRvIGdhdGhlciB0aGlzIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZ2FtYmxpbmcgd2lubmluZ3MgYW5kIGFueSByZWxhdGVkIGRlZHVjdGlvbnMgb3IgbG9zc2VzIG9uIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBkZXRhaWxlZCBhbmQgYWNjdXJhdGUgYXMgcG9zc2libGUgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB5b3VyIHRheCBmaWxpbmcuPC9wPlxuPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIGlmIHlvdSBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDYW5jZWxsYXRpb24gb2YgRGVidCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDYW5jZWxsYXRpb24gb2YgRGVidCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5PdXIgcmVjb3JkcyBpbmRpY2F0ZSB5b3UndmUgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gaGF2aW5nIGRlYnRzIGZvcmdpdmVuLCBjYW5jZWxlZCwgb3IgZGlzY2hhcmdlZCBmb3IgbGVzcyB0aGFuIHRoZSBhbW91bnQgeW91IG93ZWQgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgaW5mb3JtYXRpb24gb24geW91ciB0YXggcmV0dXJuIGFuZCBleHBsb3JlIGFueSBhcHBsaWNhYmxlIHRheCByZWxpZWYgb3IgZXhjbHVzaW9ucywgd2UgbmVlZCBhZGRpdGlvbmFsIGRldGFpbHMgZnJvbSB5b3UuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG48b2w+XG48bGk+PHN0cm9uZz5Gb3JtIDEwOTktQzwvc3Ryb25nPjogQ29waWVzIG9mIGFueSBGb3JtIDEwOTktQyB5b3UgcmVjZWl2ZWQgcmVsYXRlZCB0byB0aGUgY2FuY2VsbGF0aW9uIG9mIGRlYnQuPC9saT5cbjxsaT48c3Ryb25nPkRldGFpbGVkIExpc3Qgb2YgRGVidHM8L3N0cm9uZz46IElmIHlvdSBkaWRuJ3QgcmVjZWl2ZSBhIEZvcm0gMTA5OS1DLCBwbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGxpc3Qgb2YgYW55IGRlYnRzIHRoYXQgd2VyZSBjYW5jZWxlZCwgaW5jbHVkaW5nOlxuICAgIDx1bD5cbiAgICA8bGk+VGhlIG5hbWUgb2YgdGhlIGNyZWRpdG9yPC9saT5cbiAgICA8bGk+VGhlIG9yaWdpbmFsIGFtb3VudCBvZiB0aGUgZGVidDwvbGk+XG4gICAgPGxpPlRoZSBhbW91bnQgY2FuY2VsZWQ8L2xpPlxuICAgIDxsaT5UaGUgZGF0ZSBvZiBjYW5jZWxsYXRpb248L2xpPlxuICAgIDwvdWw+XG48L2xpPlxuPGxpPjxzdHJvbmc+RXhwbGFuYXRpb24gb2YgQ2lyY3Vtc3RhbmNlczwvc3Ryb25nPjogQSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBkZWJ0IGNhbmNlbGxhdGlvbiAoZS5nLiwgZmluYW5jaWFsIGhhcmRzaGlwLCByZXR1cm4gb2YgcHVyY2hhc2VkIGdvb2RzLCBldGMuKS48L2xpPlxuPGxpPjxzdHJvbmc+SW5zb2x2ZW5jeSBEb2N1bWVudGF0aW9uPC9zdHJvbmc+OiBJZiB5b3Ugd2VyZSBpbnNvbHZlbnQgKHdoZXJlIHlvdXIgdG90YWwgZGVidHMgZXhjZWVkZWQgeW91ciB0b3RhbCBhc3NldHMpIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY2FuY2VsbGF0aW9uLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIHN1cHBvcnRpbmcgeW91ciBmaW5hbmNpYWwgc3RhdHVzIGF0IHRoYXQgdGltZS48L2xpPlxuPC9vbD5cbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZmluYW5jaWFsIGluZm9ybWF0aW9uIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG90ZW50aWFsIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gb2YgZGVidC4gUGxlYXNlIHVwbG9hZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XG48cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpbWFyeSBSZXNpZGVuY2UgRGVidCBDYW5jZWxsYXRpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJQcmltYXJ5IFJlc2lkZW5jZSBEZWJ0IENhbmNlbGxhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgYSBwb3J0aW9uIG9mIHlvdXIgbW9ydGdhZ2UgZm9yIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugd2FzIGZvcmdpdmVuLCBjYW5jZWxlZCwgb3IgZGlzY2hhcmdlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhpcyBpbiB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PGI+Rm9ybSAxMDk5LUMsIENhbmNlbGxhdGlvbiBvZiBEZWJ0OjwvYj4gVGhpcyBpcyBhIGNydWNpYWwgZG9jdW1lbnQgdGhhdCBsZW5kZXJzIG11c3Qgc2VuZCB5b3UgaWYgdGhleSBjYW5jZWxlZCBvciBmb3JnYXZlIGEgZGVidCBleGNlZWRpbmcgJDYwMC48L2xpPlxuICAgICAgICA8bGk+PGI+V3JpdHRlbiBjb21tdW5pY2F0aW9uIGZyb20geW91ciBsZW5kZXI6PC9iPiBBbnkgbGV0dGVycyBvciBvZmZpY2lhbCBkb2N1bWVudHMgZnJvbSB5b3VyIGxlbmRlciByZWdhcmRpbmcgdGhlIGNhbmNlbGxhdGlvbiwgZm9yZ2l2ZW5lc3MsIG9yIGRpc2NoYXJnZSBvZiB5b3VyIG1vcnRnYWdlIGRlYnQuPC9saT5cbiAgICAgICAgPGxpPjxiPk1vcnRnYWdlIHN0YXRlbWVudHM6PC9iPiBQbGVhc2UgcHJvdmlkZSBtb3J0Z2FnZSBzdGF0ZW1lbnRzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlYnQgY2FuY2VsbGF0aW9uIHRvIHNob3cgdGhlIGNoYW5nZSBpbiB5b3VyIG1vcnRnYWdlIGJhbGFuY2UuPC9saT5cbiAgICAgICAgPGxpPjxiPkRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgcHJvcGVydHk6PC9iPiBUaGlzIGluY2x1ZGVzOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Zb3VyIG1vcnRnYWdlIGNvbnRyYWN0LjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFueSBkb2N1bWVudHMgcmVsYXRlZCB0byBmb3JlY2xvc3VyZSwgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9mIGEgc2hvcnQgc2FsZSwgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxiPlJlY29yZCBvZiBwYXltZW50cyBtYWRlOjwvYj4gSWYgeW91IG1hZGUgYW55IHBheW1lbnRzIHRvd2FyZHMgdGhlIG1vcnRnYWdlIGR1cmluZyB0aGUgdGF4IHllYXIsIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGVzZSBwYXltZW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgcHJvdmlkZSB0aGVtIHRvIHVzLiBJZiB5b3UgaGF2ZSBhbnkgZGlmZmljdWx0eSBvYnRhaW5pbmcgYW55IG9mIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQgb3IgaGF2ZSBhbnkgcXVlc3Rpb25zLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gUHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24gaW4gYSB0aW1lbHkgbWFubmVyIGlzIGNydWNpYWwgZm9yIHRoZSBhY2N1cmF0ZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHVkZW50IExvYW4gRGVidCBDYW5jZWxsYXRpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJTdHVkZW50IExvYW4gRGVidCBDYW5jZWxsYXRpb25cIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5JbiByZXNwb25zZSB0byB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2Ygc3R1ZGVudCBsb2FuIGRlYnQgZHVyaW5nIHRoaXMgdGF4IHllYXIsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IHByb2Nlc3MgeW91ciB0YXggcmV0dXJuLiBUaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIHBvdGVudGlhbGx5IG1heGltaXppbmcgeW91ciBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuPG9sPlxuICA8bGk+PHN0cm9uZz5PZmZpY2lhbCBDYW5jZWxsYXRpb24gb3IgRm9yZ2l2ZW5lc3MgTm90aWNlOjwvc3Ryb25nPiBBIGNvcHkgb2YgdGhlIG9mZmljaWFsIGxldHRlciBvciBub3RpY2UgZnJvbSB0aGUgbGVuZGVyIG9yIHByb2dyYW0gYWRtaW5pc3RyYXRvciBjb25maXJtaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2YgeW91ciBzdHVkZW50IGxvYW4gZGVidC48L2xpPlxuICA8bGk+PHN0cm9uZz5TdHVkZW50IExvYW4gQWNjb3VudCBTdGF0ZW1lbnQ6PC9zdHJvbmc+IEEgc3RhdGVtZW50IGZyb20gYmVmb3JlIGFuZCBhZnRlciB0aGUgbG9hbiBmb3JnaXZlbmVzcywgY2FuY2VsbGF0aW9uLCBvciBkaXNjaGFyZ2Ugb2NjdXJyZWQsIHNob3dpbmcgdGhlIG91dHN0YW5kaW5nIGJhbGFuY2UgYW5kIHRoZSBiYWxhbmNlIGFmdGVyIHRoZSBhY3Rpb24gd2FzIHRha2VuLjwvbGk+XG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgUXVhbGlmeWluZyBQcm9ncmFtIFBhcnRpY2lwYXRpb246PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBvciBjZXJ0aWZpY2F0ZXMgb2YgeW91ciBwYXJ0aWNpcGF0aW9uIGluIHF1YWxpZnlpbmcgcHJvZ3JhbXMgc3VjaCBhcyBQdWJsaWMgU2VydmljZSBMb2FuIEZvcmdpdmVuZXNzIChQU0xGKSBvciBUZWFjaGVyIExvYW4gRm9yZ2l2ZW5lc3MsIGFtb25nIG90aGVycy48L2xpPlxuICA8bGk+PHN0cm9uZz5JUlMgRm9ybSAxMDk5LUMgKGlmIHJlY2VpdmVkKTo8L3N0cm9uZz4gVGhpcyBmb3JtIGlzIGlzc3VlZCBieSBzb21lIGxlbmRlcnMgd2hlbiBhIGRlYnQgaXMgZm9yZ2l2ZW4gb3IgY2FuY2VsZWQgYW5kIGlzIGNydWNpYWwgZm9yIHRheCByZXBvcnRpbmcgcHVycG9zZXMuIEl0IGluY2x1ZGVzIHRoZSBhbW91bnQgb2YgZm9yZ2l2ZW4gZGVidCB0aGF0IG1heSBiZSBjb25zaWRlcmVkIHRheGFibGUgaW5jb21lLjwvbGk+XG4gIDxsaT48c3Ryb25nPkRldGFpbGVkIERlc2NyaXB0aW9uIG9mIENpcmN1bXN0YW5jZXM6PC9zdHJvbmc+IEEgd3JpdHRlbiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBsb2FuJ3MgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlLCBpbmNsdWRpbmcgYW55IGRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB5b3VyIGVsaWdpYmlsaXR5IHVuZGVyIHRoZSBzcGVjaWZpYyBwcm9ncmFtIG9yIGNvbmRpdGlvbi48L2xpPlxuPC9vbD5cbjxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIHByb3ZpZGVkIGFyZSBjb21wbGV0ZSBhbmQgbGVnaWJsZS4gWW91IGNhbiB1cGxvYWQgdGhlIGRvY3VtZW50cyBzZWN1cmVseSB0aHJvdWdoIG91ciBjbGllbnQgcG9ydGFsLjwvcD5cbjxwPllvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBlbmFibGUgdXMgdG8gYWNjdXJhdGVseSBhbmQgZWZmaWNpZW50bHkgY29tcGxldGUgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbjxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIb2JieSBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJIb2JieSBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBpbmNvbWUgc291cmNlcyBmb3IgdGhpcyB0YXggeWVhci4gQXMgcGFydCBvZiBvdXIgcHJlcGFyYXRpb24gZm9yIHlvdXIgdGF4IHJldHVybiwgd2UndmUgbm90ZWQgdGhhdCB5b3UndmUgZWFybmVkIG1vbmV5IGZyb20gaG9iYmllcy4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyB0byB0aGUgSVJTIGFuZCBlbnN1cmUgeW91IGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+U3VtbWFyeSBvZiBIb2JieSBJbmNvbWU6PC9zdHJvbmc+IEEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgaW5jb21lIHJlY2VpdmVkIGZyb20geW91ciBob2JieSBhY3Rpdml0aWVzLiBQbGVhc2UgaW5jbHVkZSBkYXRlcywgYW1vdW50cywgYW5kIHNvdXJjZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIG9mIGFueSBleHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgaG9iYnkgYWN0aXZpdGllcy4gVGhpcyBjYW4gaW5jbHVkZSBtYXRlcmlhbHMsIGVxdWlwbWVudCwgYW5kIGFueSBvdGhlciBjb3N0cyBpbmN1cnJlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5CYW5rIFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBiYW5rIHN0YXRlbWVudHMgdGhhdCBzaG93IHRoZSB0cmFuc2FjdGlvbnMgcmVsYXRlZCB0byB5b3VyIGhvYmJ5IGluY29tZSBhbmQgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUHJpemVzOjwvc3Ryb25nPiBJZiB5b3VyIGhvYmJ5IGluY29tZSBpbmNsdWRlcyBwcml6ZXMsIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3IgcmVjZWlwdHMgdGhhdCBkZXRhaWwgdGhlc2UgYXdhcmRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk90aGVyIFJlbGV2YW50IERvY3VtZW50czo8L3N0cm9uZz4gQW55IG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB0aGUgaW5jb21lIGFuZCBleHBlbnNlcyByZXBvcnRlZCBmb3IgeW91ciBob2JieSBhY3Rpdml0aWVzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGF2b2lkIGRlbGF5cyBpbiB0aGUgdGF4IHJldHVybiBwcm9jZXNzLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2VydGFpbiBDb3VydCBBd2FyZHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDZXJ0YWluIENvdXJ0IEF3YXJkc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5kaWNhdGluZyB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIGNvdXJ0IGF3YXJkcyBvciBzZXR0bGVtZW50cyBpbiB0aGUgcGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGFtb3VudHMgYW5kIGNvbXBseSB3aXRoIHRheCBvYmxpZ2F0aW9ucywgd2UgbmVlZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIGF3YXJkcyBvciBzZXR0bGVtZW50cy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlR5cGUgb2YgQXdhcmQgb3IgU2V0dGxlbWVudDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgbmF0dXJlIChlLmcuLCBsb3N0IHdhZ2VzLCBwdW5pdGl2ZSBkYW1hZ2VzLCBldGMuKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQgUmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgYXdhcmRlZCBvciBzZXR0bGVkLCBiZWZvcmUgYW55IGRlZHVjdGlvbnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBSZWNlaXZlZDo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgd2hlbiB5b3UgcmVjZWl2ZWQgdGhlIGNvbXBlbnNhdGlvbi48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRzIG9yIGp1ZGdtZW50cyBwZXJ0YWluaW5nIHRvIHRoZSBhd2FyZCBvciBzZXR0bGVtZW50LiBUaGlzIGluY2x1ZGVzIGNvdXJ0IG9yZGVycywgYWdyZWVtZW50IGxldHRlcnMsIGFuZCByZWNlaXB0cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5UYXggV2l0aGhlbGQ6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHRoZSBhbW91bnQgb2YgZmVkZXJhbCBvciBzdGF0ZSB0YXggYWxyZWFkeSB3aXRoaGVsZCBmcm9tIHRoZSBzZXR0bGVtZW50LjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5JdCdzIGltcGVyYXRpdmUgd2UgcmVjZWl2ZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgY291cnQgYXdhcmQgb3Igc2V0dGxlbWVudC4gRmFpbHVyZSB0byByZXBvcnQgc3VjaCBpbmNvbWUgYWNjdXJhdGVseSBjb3VsZCByZXN1bHQgaW4gcGVuYWx0aWVzIG9yIGF1ZGl0cyBmcm9tIHRoZSBJUlMuPC9wPiBcbiAgICA8cD5QbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHdlIGhhdmUgYW1wbGUgdGltZSBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCBhcmUgaGVyZSB0byBoZWxwIHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpemVzIGFuZCBBd2FyZHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQcml6ZXMgYW5kIEF3YXJkc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxuICAgIDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCB3ZSBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBwcml6ZXMgb3IgYXdhcmRzIGluIHRoZSBmb3JtIG9mIGNhc2gsIGdvb2RzLCBvciBzZXJ2aWNlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSB0byB0aGUgSVJTLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkZXRhaWxzIGZyb20geW91LjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgRWFjaCBQcml6ZSBvciBBd2FyZDo8L3N0cm9uZz4gQnJpZWZseSBkZXNjcmliZSBlYWNoIHByaXplIG9yIGF3YXJkIHJlY2VpdmVkLCBpbmNsdWRpbmcgdGhlIG5hdHVyZSAoY2FzaCwgZ29vZHMsIHNlcnZpY2VzKSBhbmQgY29udGV4dCAoY29udGVzdCwgYWNoaWV2ZW1lbnQgYXdhcmQsIGV0Yy4pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlZhbHVlIG9mIEVhY2ggUHJpemUgb3IgQXdhcmQ6PC9zdHJvbmc+IFByb3ZpZGUgdGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIGVhY2ggcHJpemUgb3IgYXdhcmQgYXQgdGhlIHRpbWUgb2YgcmVjZWlwdC4gSWYgdGhlIHByaXplIHdhcyBpbiBjYXNoLCBzcGVjaWZ5IHRoZSBhbW91bnQuIElmIGluIGdvb2RzIG9yIHNlcnZpY2VzLCBwcm92aWRlIGFuIGVzdGltYXRlZCB2YWx1ZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUgb24gd2hpY2ggZWFjaCBwcml6ZSBvciBhd2FyZCB3YXMgcmVjZWl2ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SXNzdWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIChpZiBhdmFpbGFibGUpIG9mIHRoZSBvcmdhbml6YXRpb24gb3IgZW50aXR5IHRoYXQgYXdhcmRlZCB0aGUgcHJpemUgb3IgcHJvdmlkZWQgdGhlIGF3YXJkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBXaXRoaGVsZCBUYXhlczo8L3N0cm9uZz4gSW5kaWNhdGUgaWYgYW55IHRheGVzIHdlcmUgd2l0aGhlbGQgZnJvbSB0aGUgYXdhcmRlZCBhbW91bnQgYW5kIHByb3ZpZGUgdGhlIHdpdGhob2xkaW5nIGRvY3VtZW50KHMpLCBpZiBhdmFpbGFibGUuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkl0J3MgY3J1Y2lhbCBmb3IgdGF4IHB1cnBvc2VzIHRoYXQgd2UgcmVwb3J0IHRoZXNlIGFjY3VyYXRlbHkgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgSVJTLjwvcD5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgYXJlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBDb3ZlcmRlbGwgRGlzdHJpYnV0aW9uc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgQ292ZXJkZWxsIERpc3RyaWJ1dGlvbnNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCBhIHdpdGhkcmF3YWwgZnJvbSBhIENvdmVyZGVsbCBFZHVjYXRpb24gU2F2aW5ncyBBY2NvdW50IChFU0EpIG9yIGFuIEVkdWNhdGlvbiBJUkEgZm9yIGVkdWNhdGlvbmFsIGV4cGVuc2VzIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSBkaXN0cmlidXRpb25zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHdpdGhkcmF3biBmcm9tIHRoZSBDb3ZlcmRlbGwgRVNBIG9yIEVkdWNhdGlvbiBJUkEuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbGVkIGJyZWFrZG93biBvZiBob3cgdGhlc2UgZnVuZHMgd2VyZSB1dGlsaXplZCwgc3BlY2lmaWNhbGx5OlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgdXNlZCBmb3IgdHVpdGlvbiBhbmQgZmVlcy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgc3BlbnQgb24gYm9va3MsIHN1cHBsaWVzLCBhbmQgZXF1aXBtZW50IHJlcXVpcmVkIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGFtb3VudHMgc3BlbnQgb24gcm9vbSBhbmQgYm9hcmQsIHNwZWNpZnlpbmcgaWYgdGhlIGJlbmVmaWNpYXJ5IHdhcyBlbnJvbGxlZCBhdCBsZWFzdCBoYWxmLXRpbWUuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGFkZGl0aW9uYWwgcXVhbGlmaWVkIGVkdWNhdGlvbiBleHBlbnNlcyBwYWlkIHVzaW5nIHRoZXNlIGZ1bmRzLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgdGhlIGJlbmVmaWNpYXJ5J3MgZW5yb2xsbWVudCBzdGF0dXMgKGUuZy4sIHR1aXRpb24gc3RhdGVtZW50LCBlbnJvbGxtZW50IHZlcmlmaWNhdGlvbikuPC9saT5cbiAgICAgICAgPGxpPlRoZSBuYW1lIGFuZCBhZGRyZXNzIG9mIHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbihzKSBpbnZvbHZlZC48L2xpPlxuICAgICAgICA8bGk+QW55IEZvcm0gMTA5OS1RIHJlY2VpdmVkIHBlcnRhaW5pbmcgdG8gdGhlc2UgZGlzdHJpYnV0aW9ucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UHJvdmlkaW5nIHRoaXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gd2lsbCBlbnN1cmUgdGhhdCB3ZSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIGVkdWNhdGlvbiBleHBlbnNlcy4gUGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgbGV0IHVzIGtub3cgaWYgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBvciBoYXZlIGFueSBxdWVzdGlvbnMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgUVRQIERpc3RyaWJ1dGlvbnNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIFFUUCBEaXN0cmlidXRpb25zXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXG4gICAgPHA+V2UgaGF2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGRpc3RyaWJ1dGlvbnMgZnJvbSBhIFF1YWxpZmllZCBUdWl0aW9uIFByb2dyYW0gKFFUUCksIGNvbW1vbmx5IGtub3duIGFzIGEgNTI5IHBsYW4sIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcmVsYXRlZCB0byB0aGVzZSBkaXN0cmlidXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbjxvbD5cbiAgICA8bGk+PHN0cm9uZz5BY2NvdW50IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgbmFtZSBvZiB0aGUgYWNjb3VudCBob2xkZXIgYW5kIHRoZSBiZW5lZmljaWFyeSBmb3IgZWFjaCA1MjkgcGxhbiBkaXN0cmlidXRpb24uPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EaXN0cmlidXRpb24gU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCAxMDk5LVEgZm9ybXMgcmVjZWl2ZWQgZm9yIGVhY2ggZGlzdHJpYnV0aW9uIHRoaXMgdGF4IHllYXIuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Ub3RhbCBBbW91bnQgb2YgRGlzdHJpYnV0aW9uczo8L3N0cm9uZz4gVGhlIHRvdGFsIGFtb3VudCBvZiBtb25leSBkaXN0cmlidXRlZCBmcm9tIHRoZSBRVFAgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgIDxsaT48c3Ryb25nPkVkdWNhdGlvbmFsIEV4cGVuc2VzIERvY3VtZW50YXRpb246PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgdGhlIGVkdWNhdGlvbmFsIGV4cGVuc2VzIGZvciB3aGljaCB0aGUgUVRQIGRpc3RyaWJ1dGlvbnMgd2VyZSB1c2VkLiBUaGlzIGluY2x1ZGVzIHR1aXRpb24sIGJvb2tzLCBzdXBwbGllcywgYW5kIGFueSBlcXVpcG1lbnQgcmVxdWlyZWQgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZSBhdCBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbi48L2xpPlxuICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgUmVjZWlwdHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIHN0YXRlbWVudHMgdGhhdCBwcm92aWRlIHByb29mIG9mIHRoZSBlZHVjYXRpb25hbCBleHBlbnNlcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPkluc3RpdHV0aW9uIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBOYW1lIGFuZCBhZGRyZXNzIG9mIHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbihzKSB3aGVyZSB0aGUgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZC48L2xpPlxuICAgIDxsaT48c3Ryb25nPlJlY2lwaWVudCdzIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBGb3Igd2hvbSB0aGUgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZCAodGhlIGJlbmVmaWNpYXJ5IG9mIHRoZSA1MjkgcGxhbikgYW5kIHRoZWlyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIuPC9saT5cbjwvb2w+XG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheGFiaWxpdHkgb2YgdGhlIGRpc3RyaWJ1dGlvbnMgYW5kIGZvciBvcHRpbWl6aW5nIHlvdXIgdGF4IGJlbmVmaXRzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuPC9wPlxuPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHJpa2UgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJTdHJpa2UgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYXMgd2Ugd29yayB0b2dldGhlciB0byBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggcmV0dXJuLiBJdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgeW91IHJlY2VpdmVkIHN0cmlrZSBiZW5lZml0cyBkdXJpbmcgdGhlIHRheCB5ZWFyIGR1ZSB0byBwYXJ0aWNpcGF0aW9uIGluIGEgbGFib3Igc3RyaWtlLiBUbyBlbnN1cmUgY29tcGxpYW5jZSBhbmQgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgQW1vdW50IG9mIFN0cmlrZSBCZW5lZml0cyBSZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlIHRvdGFsIHN1bSBvZiBzdHJpa2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Tb3VyY2Ugb2YgU3RyaWtlIEJlbmVmaXRzOjwvc3Ryb25nPiBJbmRpY2F0ZSB3aGV0aGVyIHRoZXNlIGJlbmVmaXRzIHdlcmUgcGFpZCBieSB5b3VyIHVuaW9uLCBhbiBpbnN1cmFuY2UgcG9saWN5LCBvciBhbm90aGVyIHNvdXJjZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIFN0cmlrZSBCZW5lZml0czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZm9ybXMsIHN0YXRlbWVudHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBzaG93IHRoZSByZWNlaXB0IG9mIHRoZXNlIGJlbmVmaXRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIFN0cmlrZSBQYXJ0aWNpcGF0aW9uOjwvc3Ryb25nPiBMaXN0IHRoZSBkYXRlcyBvciBkdXJhdGlvbiBvZiB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIGxhYm9yIHN0cmlrZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BZGRpdGlvbmFsIENvc3RzIG9yIEV4cGVuc2VzOjwvc3Ryb25nPiBJZiB5b3UgaW5jdXJyZWQgYW55IGNvc3RzIG9yIGV4cGVuc2VzIHJlbGF0ZWQgdG8gcGFydGljaXBhdGluZyBpbiB0aGUgc3RyaWtlIChlLmcuLCB0cmF2ZWwgdG8gcGlja2V0IGxpbmVzLCBzaWduYWdlIG1hdGVyaWFscyksIHBsZWFzZSBkZXRhaWwgdGhlc2UuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgbWF5IGltcGFjdCB5b3VyIHRheGFibGUgaW5jb21lLiBQbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gYXZvaWQgYW55IGRlbGF5cyBpbiBwcm9jZXNzaW5nIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gaGVscCE8L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkp1cnkgRHV0eSBQYXlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJKdXJ5IER1dHkgUGF5XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIHJlYWNoaW5nIHRoZSBjcml0aWNhbCBzdGFnZXMgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQganVyeSBkdXR5IHBheSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluY29tZSBhbmQgZXhwbG9yZSBhbnkgcG90ZW50aWFsIGRlZHVjdGlvbnMgb3IgY3JlZGl0cywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBvZiBKdXJ5IER1dHkgUGF5Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgdG90YWwgYW1vdW50IHlvdSByZWNlaXZlZCBmb3Igc2VydmluZyBqdXJ5IGR1dHkuIFRoaXMgYW1vdW50IGlzIG9mdGVuIHJlcG9ydGVkIG9uIEZvcm0gMTA5OS1HLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkp1cnkgRHV0eSBEYXRlczo8L3N0cm9uZz4gVGhlIGRhdGVzIHlvdSBzZXJ2ZWQgb24ganVyeSBkdXR5LiBUaGlzIGhlbHBzIGluIHZlcmlmeWluZyB0aGUgZHVyYXRpb24gYW5kIGNvcnJlbGF0aW5nIGl0IHdpdGggdGhlIGNvbXBlbnNhdGlvbiByZWNlaXZlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBSZWltYnVyc2VtZW50Ojwvc3Ryb25nPiBJZiB5b3VyIGVtcGxveWVyIGNvbXBlbnNhdGVkIHlvdSAoaW4gZnVsbCBvciBwYXJ0KSBmb3IgdGhlIHRpbWUgeW91IHdlcmUgc2VydmluZyBvbiBqdXJ5IGR1dHksIHBsZWFzZSBwcm92aWRlIGRldGFpbHMgb2YgdGhlIGFtb3VudHMgcGFpZCBieSB5b3VyIGVtcGxveWVyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkJhbmsgU3RhdGVtZW50cyBvciBQYXkgU3R1YnM6PC9zdHJvbmc+IEFueSBiYW5rIHN0YXRlbWVudHMgb3IgcGF5IHN0dWJzIHNob3dpbmcgdGhlIGp1cnkgZHV0eSBwYXkgZGVwb3NpdCBvciBlbXBsb3llciByZWltYnVyc2VtZW50cy4gVGhlc2UgZG9jdW1lbnRzIGhlbHAgaW4gdmVyaWZ5aW5nIHRoZSBhbW91bnRzIGRlY2xhcmVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5OS1HIChpZiByZWNlaXZlZCk6PC9zdHJvbmc+IFNvbWUganVyaXNkaWN0aW9ucyBwcm92aWRlIGEgRm9ybSAxMDk5LUcgZm9yIGp1cnkgZHV0eSBwYXkuIElmIHlvdSByZWNlaXZlZCBvbmUsIHBsZWFzZSBpbmNsdWRlIGEgY29weS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB3aWxsIGFsbG93IHVzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFsYXNrYSBQZXJtYW5lbnQgRnVuZHMgRGl2aWRlbmRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQWxhc2thIFBlcm1hbmVudCBGdW5kcyBEaXZpZGVuZHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5JbiByZXZpZXdpbmcgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGZvciB5b3VyIHRheCByZXR1cm4gcHJlcGFyYXRpb24sIHdlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZGl2aWRlbmRzIGZyb20gdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmZvcm1hdGlvbiBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIElSUyBndWlkZWxpbmVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxiPjEwOTktTUlTQyBGb3JtOjwvYj4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSAxMDk5LU1JU0MgZm9ybSBpc3N1ZWQgYnkgdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBDb3Jwb3JhdGlvbi4gVGhpcyBmb3JtIG91dGxpbmVzIHRoZSB0b3RhbCBhbW91bnQgb2YgZGl2aWRlbmRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxiPkJhbmsgU3RhdGVtZW50czo8L2I+IElmIHBvc3NpYmxlLCBwcm92aWRlIGJhbmsgc3RhdGVtZW50cyBzaG93aW5nIHRoZSBkZXBvc2l0KHMpIG9mIHRoZSBkaXZpZGVuZHMgaW50byB5b3VyIGFjY291bnQuIFRoaXMgc2VydmVzIGFzIGFkZGl0aW9uYWwgcHJvb2Ygb2YgaW5jb21lLjwvbGk+XG4gICAgICAgIDxsaT48Yj5QZXJzb25hbCBJZGVudGlmaWNhdGlvbiBJbmZvcm1hdGlvbjo8L2I+IENvbmZpcm0geW91ciBmdWxsIGxlZ2FsIG5hbWUgYW5kIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBkaXNjcmVwYW5jaWVzIGJldHdlZW4gb3VyIHJlY29yZHMgYW5kIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBvbiB0aGUgMTA5OS1NSVNDIGZvcm0uPC9saT5cbiAgICAgICAgPGxpPjxiPlByZXZpb3VzIFllYXIncyBEaXZpZGVuZCBJbmZvcm1hdGlvbjo8L2I+IElmIHlvdSByZWNlaXZlZCBkaXZpZGVuZHMgZnJvbSB0aGUgQWxhc2thIFBlcm1hbmVudCBGdW5kIGluIHRoZSBwcmV2aW91cyB0YXggeWVhciBidXQgaGF2ZSBub3QgcHJvdmlkZWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIHNvLiBJdCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIHRvIHBvdGVudGlhbGx5IGlkZW50aWZ5IGFueSBjYXJyeW92ZXIgZWZmZWN0cyBvbiB5b3VyIGN1cnJlbnQgdGF4IHllYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdCBpcyBoaWdobHkgYXBwcmVjaWF0ZWQuIENvbXBsZXRpbmcgdGhpcyBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHdpbGwgZW5hYmxlIHVzIHRvIHByb2dyZXNzIHdpdGggdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybiBlZmZpY2llbnRseS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRXhlY3V0b3IgRmVlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkV4ZWN1dG9yIEZlZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5XZSB1bmRlcnN0YW5kIGZyb20geW91ciByZWNlbnQgcmVzcG9uc2UgdGhhdCB5b3UgaGF2ZSBwYWlkIG9yIHJlY2VpdmVkIGV4ZWN1dG9yIGZlZXMuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgdGF4IHByZXBhcmF0aW9uLCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlc2UgdHJhbnNhY3Rpb25zLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nOjwvcD5cbjxvbD5cbiAgPGxpPkEgZGV0YWlsZWQgc3RhdGVtZW50IG9mIHRoZSBleGVjdXRvciBmZWVzIHBhaWQgb3IgcmVjZWl2ZWQsIGluY2x1ZGluZyBkYXRlcyBhbmQgYW1vdW50cy48L2xpPlxuICA8bGk+SWYgeW91IHJlY2VpdmVkIGV4ZWN1dG9yIGZlZXMsIHBsZWFzZSBwcm92aWRlIHlvdXIgcm9sZSAoZS5nLiwgcHJpbWFyeSBleGVjdXRvciwgY28tZXhlY3V0b3IpIGFuZCB0aGUgZXN0YXRlJ3MgbmFtZS48L2xpPlxuICA8bGk+SWYgeW91IHBhaWQgZXhlY3V0b3IgZmVlcywgcHJvdmlkZSB0aGUgbmFtZSBhbmQgdGF4IGlkZW50aWZpY2F0aW9uIG51bWJlciAoU1NOIG9yIEVJTikgb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gdGhlIGZlZXMgd2VyZSBwYWlkLjwvbGk+XG4gIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiB0aGF0IG91dGxpbmVzIHRoZSBhZ3JlZW1lbnQgb3IgY291cnQgb3JkZXIgcmVnYXJkaW5nIHRoZSBleGVjdXRvciBmZWUuPC9saT5cbiAgPGxpPkNvcGllcyBvZiBiYW5rIHN0YXRlbWVudHMgb3IgY2FuY2VsbGVkIGNoZWNrcyBldmlkZW5jaW5nIHRoZSBwYXltZW50IG9yIHJlY2VpcHQgb2YgdGhlc2UgZmVlcy48L2xpPlxuICA8bGk+Rm9yIGZlZXMgcmVjZWl2ZWQsIHBsZWFzZSBjb25maXJtIHdoZXRoZXIgdGF4ZXMgd2VyZSB3aXRoaGVsZCBvciBub3QuIElmIHNvLCBwcm92aWRlIGEgY29weSBvZiB0aGUgRm9ybSAxMDk5LU1JU0MgeW91IHJlY2VpdmVkLjwvbGk+XG48L29sPlxuPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB0aGVzZSBleGVjdXRvciBmZWVzIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIGd1aWRlbGluZXMuIFBsZWFzZSBzZW5kIHRoZSBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIHRvIHVzIHRvIGZhY2lsaXRhdGUgYSB0aW1lbHkgYW5kIGFjY3VyYXRlIHRheCBmaWxpbmcuPC9wPlxuPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFdmVudCBHcmF0dWl0aWVzIGFuZCBHaWZ0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkV2ZW50IEdyYXR1aXRpZXMgYW5kIEdpZnRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGNvbXBsZXRpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBuZWVkIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHBhcnRpZXMgb3IgZXZlbnRzIHlvdSBob3N0ZWQgdGhpcyB0YXggeWVhci4gU3BlY2lmaWNhbGx5LCBzaW5jZSB5b3UgaW5kaWNhdGVkIHRoYXQgeW91IHJlY2VpdmVkIGdpZnRzLCBncmF0dWl0aWVzLCBvciBvdGhlciBmb3JtcyBvZiBjb21wZW5zYXRpb24gYXMgYSByZXN1bHQgb2YgdGhlc2UgZXZlbnRzLCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHRvIGVuc3VyZSBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGVhY2ggZXZlbnQgaG9zdGVkLCBpbmNsdWRpbmc6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2YgdGhlIGV2ZW50LjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkxvY2F0aW9uIG9mIHRoZSBldmVudC48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BcHByb3hpbWF0ZSBudW1iZXIgb2YgYXR0ZW5kZWVzLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlB1cnBvc2Ugb2YgdGhlIGV2ZW50IChlLmcuLCBzYWxlcyBwcm9tb3Rpb24sIGN1c3RvbWVyIGFwcHJlY2lhdGlvbikuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIGZvciBlYWNoIGdpZnQsIGdyYXR1aXR5LCBvciBmb3JtIG9mIGNvbXBlbnNhdGlvbiByZWNlaXZlZCwgc3VjaCBhczpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIGdpZnQgb3IgZ3JhdHVpdHkuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+RXN0aW1hdGVkIGZhaXIgbWFya2V0IHZhbHVlIGF0IHRoZSB0aW1lIHJlY2VpdmVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPk5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHByb3ZpZGluZyB0aGUgZ2lmdCBvciBncmF0dWl0eS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIHJlZ2FyZGluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBpdGVtcyAoZS5nLiwgdGhhbmsgeW91IGxldHRlcnMsIGVtYWlscyBjb25maXJtaW5nIHJlY2VpcHQpLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+QW55IHJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBleHBlbnNlcyBpbmN1cnJlZCB3aGlsZSBob3N0aW5nIHRoZXNlIGV2ZW50cyAoZS5nLiwgY2F0ZXJpbmcsIHZlbnVlIHJlbnRhbCwgZW50ZXJ0YWlubWVudCkuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSBhY2N1cmF0ZWx5IHJlcG9ydCBhbGwgZm9ybXMgb2YgaW5jb21lLCBpbmNsdWRpbmcgbm9uLW1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgdG8gY29tcGx5IHdpdGggSVJTIHJlZ3VsYXRpb25zLiBZb3VyIHByb21wdCByZXNwb25zZSB3aXRoIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gd2lsbCBncmVhdGx5IGFzc2lzdCBpbiB0aGlzIHByb2Nlc3MuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUXVhbGlmaWVkIEVkdWNhdG9yIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUXVhbGlmaWVkIEVkdWNhdG9yIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgY29tcHJlaGVuc2l2ZSBhcHByb2FjaCB0byB5b3VyIHRheCBwcmVwYXJhdGlvbiBmb3IgdGhlIGN1cnJlbnQgeWVhciwgeW91IGhhdmUgaW5kaWNhdGVkIHRoYXQgeW91J3ZlIGluY3VycmVkIG91dC1vZi1wb2NrZXQgZXhwZW5zZXMgYXMgYSBxdWFsaWZpZWQgZWR1Y2F0b3IgZm9yIGNsYXNzcm9vbSBtYXRlcmlhbHMgb3Igc3VwcGxpZXMuIFRvIGFjY3VyYXRlbHkgY2xhaW0gdGhlc2UgZGVkdWN0aW9ucyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGJlbmVmaXQsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PGI+RGV0YWlsZWQgTGlzdCBvZiBFeHBlbnNlczo8L2I+IEEgYnJlYWtkb3duIG9mIGFsbCBjbGFzc3Jvb20gbWF0ZXJpYWxzIG9yIHN1cHBsaWVzIHB1cmNoYXNlZCwgaW5jbHVkaW5nIGJvb2tzLCBzdXBwbGllcywgY29tcHV0ZXIgZXF1aXBtZW50IChoYXJkd2FyZSwgc29mdHdhcmUsIGFuZCBzZXJ2aWNlcyksIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbWF0ZXJpYWxzLjwvbGk+XG4gICAgICAgIDxsaT48Yj5SZWNlaXB0cyBhbmQgUHJvb2Ygb2YgUGF5bWVudDo8L2I+IENvcGllcyBvZiByZWNlaXB0cyBvciBiYW5rL2NyZWRpdCBjYXJkIHN0YXRlbWVudHMgZm9yIGVhY2ggcHVyY2hhc2UgbWFkZS4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkYXRlIG9mIHB1cmNoYXNlIGFuZCB0aGUgaXRlbSBvciBzZXJ2aWNlIHB1cmNoYXNlZCBhcmUgY2xlYXJseSB2aXNpYmxlLjwvbGk+XG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIFB1cmNoYXNlczo8L2I+IFRoZSBzcGVjaWZpYyBkYXRlcyBlYWNoIGl0ZW0gd2FzIHB1cmNoYXNlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48Yj5Vc2FnZSBEb2N1bWVudGF0aW9uOjwvYj4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiBob3cgZWFjaCBpdGVtIHB1cmNoYXNlZCB3YXMgdXNlZCBpbiB0aGUgY2xhc3Nyb29tIHNldHRpbmcuPC9saT5cbiAgICAgICAgPGxpPjxiPlRvdGFsIEFtb3VudDo8L2I+IFRoZSB0b3RhbCBkb2xsYXIgYW1vdW50IHNwZW50IG9uIHRoZXNlIG1hdGVyaWFscyBhbmQgc3VwcGxpZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoZSB0YXggeWVhci48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VW5kZXJzdGFuZGluZyB0aGF0IHlvdXIgdGltZSBpcyB2YWx1YWJsZSwgd2UgYXBwcmVjaWF0ZSB5b3VyIGVmZm9ydCBpbiBjb21waWxpbmcgdGhpcyBpbmZvcm1hdGlvbiBwcm9tcHRseS4gVGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmluZyB5b3UgYXJlIGNvbXBlbnNhdGVkIGZvciB5b3VyIGludmVzdG1lbnQgaW4gZWR1Y2F0aW9uYWwgbWF0ZXJpYWxzLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHdlIGNhbiBwcm9jZWVkIHdpdGhvdXQgZGVsYXkuIFlvdSBjYW4gc2VuZCB0aGUgZG9jdW1lbnRzIHRvIHVzIGVpdGhlciB2aWEgZW1haWwgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tIG9yIHVwbG9hZCB0aGVtIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgeW91ciBkZWRpY2F0aW9uIGFzIGFuIGVkdWNhdG9yLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQXJtZWQgRm9yY2VzIFJlc2VydmlzdCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3UgaW5jdXJyZWQgdW5yZWltYnVyc2VkIHRyYXZlbCBleHBlbnNlcyBhcyBhbiBBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0LiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGJlbmVmaWNpYWwgdGF4IGZpbGluZywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgZnJvbSB5b3U6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5TdW1tYXJ5IG9mIFRyYXZlbCBEYXRlczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBsaXN0IG9mIGFsbCBkYXRlcyB5b3UgdHJhdmVsZWQgbW9yZSB0aGFuIDEwMCBtaWxlcyBhd2F5IGZyb20gaG9tZSB0byBwZXJmb3JtIHlvdXIgcmVzZXJ2ZSBkdXRpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5UcmF2ZWwgRXhwZW5zZXMgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gRm9yIGVhY2ggb2YgdGhlIHRyYXZlbCBkYXRlcyBsaXN0ZWQsIHByb3ZpZGUgcmVjZWlwdHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gZm9yOlxuICAgICAgICA8dWw+XG4gICAgICAgIDxsaT5UcmFuc3BvcnRhdGlvbiAoZS5nLiwgZ2FzIHJlY2VpcHRzLCBtaWxlYWdlIGxvZ3MsIGFpcnBsYW5lIHRpY2tldHMsIGV0Yy4pPC9saT5cbiAgICAgICAgPGxpPkxvZGdpbmcgKG9ubHkgaWYgYW4gb3Zlcm5pZ2h0IHN0YXkgd2FzIHJlcXVpcmVkKTwvbGk+XG4gICAgICAgIDxsaT5NZWFscyBhbmQgSW5jaWRlbnRhbCBFeHBlbnNlcyAoZGV0YWlscyBvbiBlYWNoLCBpZiBub3Qgb3B0aW5nIGZvciB0aGUgc3RhbmRhcmQgbWVhbCBhbGxvd2FuY2UpPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2xpPlxuICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2VydmUgU3RhdHVzOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciBvcmRlcnMgb3IgYW55IGRvY3VtZW50YXRpb24gY29uZmlybWluZyB5b3VyIHBhcnRpY2lwYXRpb24gYW5kIGR1dGllcyBhcyBhbiBBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IGR1cmluZyB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uPC9saT5cbiAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnQgb2YgUmVpbWJ1cnNlbWVudDo8L3N0cm9uZz4gQSBkZXRhaWxlZCBhY2NvdW50IG9mIGFueSByZWltYnVyc2VtZW50cyByZWNlaXZlZCBmb3IgdGhlIHRyYXZlbCBleHBlbnNlcyBjbGFpbWVkLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBhcmUgbGVnaWJsZSBhbmQgY2xlYXJseSBsYWJlbGVkLiBQcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGFsbG93IHN1ZmZpY2llbnQgdGltZSBmb3IgcHJvY2Vzc2luZyBhbmQgaW5jbHVzaW9uIGluIHlvdXIgdGF4IGZpbGluZy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIE91ciB0ZWFtIGlzIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJmb3JtaW5nIEFydGlzdCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlBlcmZvcm1pbmcgQXJ0aXN0IEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UncmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBuZWNlc3NhcnkgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHlvdXIgZXhwZW5zZXMgYXMgYSBwZXJmb3JtaW5nIGFydGlzdC4gVGhlIGZvbGxvd2luZyBsaXN0IGRldGFpbHMgdGhlIHNwZWNpZmljIGpvYi1yZWxhdGVkIGV4cGVuc2VzIHRoYXQgd2UgcmVxdWlyZS4gS2luZGx5IHJldmlldyBhbmQgcHJvdmlkZSB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSBhIHRob3JvdWdoIGFuZCB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkF1ZGl0aW9uIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBiYW5rL2NyZWRpdCBjYXJkIHN0YXRlbWVudHMgc2hvd2luZyBwYXltZW50cyBmb3IgYXVkaXRpb25zLCBpbmNsdWRpbmcgYW55IGFwcGxpY2F0aW9uIG9yIGVudHJ5IGZlZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VHJhdmVsIEV4cGVuc2VzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIGZvciB0cmF2ZWwgY29zdHMgcmVsYXRlZCB0byBwZXJmb3JtYW5jZXMuIFRoaXMgaW5jbHVkZXMgYWlyZmFyZSwgbG9kZ2luZywgY2FyIHJlbnRhbHMsIGFuZCBnYXNvbGluZSByZWNlaXB0cy4gUGxlYXNlIGluZGljYXRlIHRoZSBkYXRlcyBhbmQgcHVycG9zZSBvZiBlYWNoIHRyaXAuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdHVtZSBFeHBlbnNlczo8L3N0cm9uZz4gUmVjZWlwdHMgZm9yIGFueSBjb3N0dW1lcyBvciBzcGVjaWFsaXplZCBjbG90aGluZyByZXF1aXJlZCBmb3IgeW91ciBwZXJmb3JtYW5jZXMgdGhhdCBhcmUgbm90IHN1aXRhYmxlIGZvciBldmVyeWRheSB3ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk1ha2V1cC9IYWlyIEV4cGVuc2VzOjwvc3Ryb25nPiBTcGVjaWZpYyB0byBwZXJmb3JtYW5jZXMsIGluY2x1ZGluZyBjb3N0cyBmb3IgcHJvZHVjdHMgYW5kIHByb2Zlc3Npb25hbCBzZXJ2aWNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5UcmFpbmluZyBhbmQgUHJvZmVzc2lvbmFsIERldmVsb3BtZW50Ojwvc3Ryb25nPiBDb3N0cyByZWxhdGVkIHRvIGNsYXNzZXMsIHdvcmtzaG9wcywgb3Igc2VtaW5hcnMgYWltZWQgYXQgaW1wcm92aW5nIHlvdXIgcGVyZm9ybWFuY2Ugc2tpbGxzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFnZW50IGFuZCBNYW5hZ2VtZW50IEZlZXM6PC9zdHJvbmc+IENvbnRyYWN0cyBvciBzdGF0ZW1lbnRzIGRldGFpbGluZyBwYXltZW50cyB0byBhZ2VudHMgb3IgbWFuYWdlcnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+TWlzY2VsbGFuZW91cyBQZXJmb3JtYW5jZS1SZWxhdGVkIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBmb3IgYW55IG90aGVyIGV4cGVuc2VzIGRpcmVjdGx5IHJlbGF0ZWQgdG8geW91ciB3b3JrIGFzIGEgcGVyZm9ybWluZyBhcnRpc3QsIHN1Y2ggYXMgZXF1aXBtZW50LCBtdXNpYyBvciBzY3JpcHQgcHVyY2hhc2VzLCBhbmQgbWFpbnRlbmFuY2UgY29zdHMgZm9yIGluc3RydW1lbnRzIG9yIHBlcmZvcm1hbmNlIGdlYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgcHJvdmlkZWQgZG9jdW1lbnRzIGNsZWFybHkgaW5kaWNhdGUgdGhlIGRhdGUsIGFtb3VudCwgYW5kIG5hdHVyZSBvZiBlYWNoIGV4cGVuc2UuIElmIHlvdSdyZSB1bnN1cmUgd2hldGhlciBhbiBleHBlbnNlIHF1YWxpZmllcywgaW5jbHVkZSBpdCB3aXRoIGEgYnJpZWYgbm90ZSBleHBsYWluaW5nIGl0cyBwdXJwb3NlLiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IG1heGltaXplIHlvdXIgZGVkdWN0aW9ucyB3aGlsZSBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZlZSBCYXNlZCBHb3Zlcm5tZW50IE9mZmljaWFsIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRmVlIEJhc2VkIEdvdmVybm1lbnQgT2ZmaWNpYWwgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcHJvY2Vzc2luZyB5b3VyIHRheCByZXR1cm5zIGFuZCBub3RlZCB0aGF0IHlvdSB3b3JrZWQgYXMgYSA8c3Ryb25nPmZlZS1iYXNlZCBnb3Zlcm5tZW50IG9mZmljaWFsPC9zdHJvbmc+IGR1cmluZyB0aGUgdGF4IHllYXIuIEFzIHBhcnQgb2YgdGhpcyByb2xlLCB5b3UndmUgcmVwb3J0ZWQgaW5jdXJyaW5nIHVucmVpbWJ1cnNlZCBleHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgb2ZmaWNpYWwgZHV0aWVzLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIG1heGltdW0gZGVkdWN0aW9ucyBvbiB5b3VyIHRheCBmaWxpbmdzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgRXhwZW5zZSBSZXBvcnRzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBhbGwgZXhwZW5zZXMuIEVhY2ggZW50cnkgc2hvdWxkIGluY2x1ZGUgdGhlIGRhdGUsIGFtb3VudCwgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIG5hdHVyZSBvZiB0aGUgZXhwZW5zZS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUGF5bWVudDo8L3N0cm9uZz4gUmVjZWlwdHMsIGJhbmsgc3RhdGVtZW50cywgb3IgY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBldmlkZW5jaW5nIHRoZSBwYXltZW50IG9mIHRoZSByZXBvcnRlZCBleHBlbnNlcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+T2ZmaWNpYWwgU2NoZWR1bGUgb3IgRHV0eSBSb3N0ZXI6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gdGhhdCBjb3JyZWxhdGVzIHlvdXIgcmVwb3J0ZWQgZXhwZW5zZXMgd2l0aCB5b3VyIG9mZmljaWFsIGR1dGllcyBvbiBzcGVjaWZpYyBkYXRlcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+TWlsZWFnZSBMb2c6PC9zdHJvbmc+IElmIGFueSBleHBlbnNlcyBhcmUgZm9yIHRyYXZlbCwgYSBkZXRhaWxlZCBtaWxlYWdlIGxvZyBzaG93aW5nIGRhdGVzLCBkZXN0aW5hdGlvbiwgcHVycG9zZSBvZiB0aGUgdHJpcCwgYW5kIG1pbGVzIHRyYXZlbGVkLiBFbnN1cmUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHBlcnNvbmFsIGFuZCBvZmZpY2lhbCB0cmF2ZWwuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNvbW11bmljYXRpb24gd2l0aCBHb3Zlcm5tZW50IEFnZW5jeTo8L3N0cm9uZz4gQW55IGNvcnJlc3BvbmRlbmNlIHdpdGggdGhlIGdvdmVybm1lbnQgYWdlbmN5IGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBleHBlbnNlcyB3ZXJlIG5vdCByZWltYnVyc2VkLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgaXMgbGVnaWJsZSBhbmQgb3JnYW5pemVkIGNocm9ub2xvZ2ljYWxseS4gVGhpcyB3aWxsIGdyZWF0bHkgYXNzaXN0IGluIHRoZSBzcGVlZHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCBmaWxpbmdzIGFuZCBpbiBtYXhpbWl6aW5nIHlvdXIgZWxpZ2libGUgZGVkdWN0aW9ucy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2XigJlyZSBoZXJlIHRvIGhlbHAgZXZlcnkgc3RlcCBvZiB0aGUgd2F5ITwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIU0EgRGVkdWN0aW9uIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiSFNBIERlZHVjdGlvbiBFeHBlbnNlc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgY29uZmlybWluZyB5b3VyIEhlYWx0aCBTYXZpbmdzIEFjY291bnQgKEhTQSkgY29udHJpYnV0aW9ucyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIEhTQSBkZWR1Y3Rpb24gYW5kIGVuc3VyZSB3ZSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5Ub3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIEhTQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IHlvdXIgZW1wbG95ZXIgdG8gdGhlIEhTQSAoaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMsIGlmIHRoZXkgd2VyZSBub3QgbWFkZSBpbiBhIGx1bXAgc3VtLjwvbGk+XG4gICAgICAgIDxsaT5Qcm9vZiBvZiBIU0EgZWxpZ2liaWxpdHkgZm9yIHRoZSB0YXggeWVhciAodHlwaWNhbGx5LCB0aGlzIGludm9sdmVzIHByb29mIG9mIGEgSGlnaCBEZWR1Y3RpYmxlIEhlYWx0aCBQbGFuKS48L2xpPlxuICAgICAgICA8bGk+U3RhdGVtZW50cyBmcm9tIHlvdXIgSFNBIHByb3ZpZGVyIGRldGFpbGluZyBkaXN0cmlidXRpb25zLCBpZiBhbnkgd2VyZSBtYWRlLjwvbGk+XG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgbWVkaWNhbCBleHBlbnNlcyBwYWlkIG91dCBvZiB0aGUgSFNBLCBpZiBhbnkuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYm90aCB0aGUgYWNjdXJhdGUgZmlsaW5nIG9mIHlvdXIgdGF4ZXMgYW5kIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zIHJlZ2FyZGluZyBIU0FzLiBQbGVhc2UgcmVzcG9uZCB3aXRoIHRoZXNlIGRvY3VtZW50cyBhbmQgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyBuZWVkZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQXJtZWQgRm9yY2VzIE1vdmluZyBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFybWVkIEZvcmNlcyBNb3ZpbmcgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLCB5b3UgaW5kaWNhdGVkIHRoYXQgeW91IGhhdmUgaW5jdXJyZWQgbW92aW5nIGV4cGVuc2VzIHJlbGF0ZWQgdG8gYSBwZXJtYW5lbnQgY2hhbmdlIG9mIHN0YXRpb24gYXMgYSBtZW1iZXIgb2YgdGhlIEFybWVkIEZvcmNlcy4gVG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCByZXR1cm4gYW5kIHRvIHBvdGVudGlhbGx5IHF1YWxpZnkgZm9yIHJlbGF0ZWQgZGVkdWN0aW9ucyBvciBleGNsdXNpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxiPk9yZGVycyBmb3IgUGVybWFuZW50IENoYW5nZSBvZiBTdGF0aW9uOjwvYj4gQSBjb3B5IG9mIHRoZSBvZmZpY2lhbCBvcmRlcnMgdGhhdCBpbml0aWF0ZWQgdGhlIG1vdmUuIFRoaXMgc2hvdWxkIGRldGFpbCB0aGUgbW92ZSBpcyBkdWUgdG8gbWlsaXRhcnkgb3JkZXJzIGFuZCBpbmRpY2F0ZSBib3RoIHlvdXIgcHJldmlvdXMgYW5kIG5ldyBkdXR5IHN0YXRpb25zLjwvbGk+XG4gICAgICA8bGk+PGI+UmVjZWlwdHMgYW5kIFJlY29yZHMgb2YgTW92aW5nIEV4cGVuc2VzOjwvYj4gRGV0YWlsZWQgcmVjZWlwdHMgb3IgcmVjb3JkcyBvZiBhbGwgbW92aW5nLXJlbGF0ZWQgZXhwZW5zZXMuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bzpcbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5UcmFuc3BvcnRhdGlvbiBjb3N0cyAoZS5nLiwgY29zdHMgYXNzb2NpYXRlZCB3aXRoIG1vdmluZyBob3VzZWhvbGQgZ29vZHMgYW5kIHBlcnNvbmFsIGVmZmVjdHMpPC9saT5cbiAgICAgICAgICA8bGk+VHJhdmVsIGV4cGVuc2VzIHRvIHRoZSBuZXcgaG9tZSAoZS5nLiwgbG9kZ2luZyBjb3N0cyBlbiByb3V0ZSwgYnV0IG5vdCBtZWFscyk8L2xpPlxuICAgICAgICAgIDxsaT5TdG9yYWdlIGV4cGVuc2VzIGZvciBob3VzZWhvbGQgZ29vZHMgYW5kIHBlcnNvbmFsIGVmZmVjdHMsIGlmIGFwcGxpY2FibGU8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT48Yj5MZWFzZSBUZXJtaW5hdGlvbiBEb2N1bWVudGF0aW9uOjwvYj4gSWYgYXBwbGljYWJsZSwgZG9jdW1lbnRhdGlvbiBzaG93aW5nIGFueSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggYnJlYWtpbmcgYSBsZWFzZSBkdWUgdG8gdGhlIG1vdmUuPC9saT5cbiAgICAgIDxsaT48Yj5Qcm9vZiBvZiBOZXcgUmVzaWRlbmNlOjwvYj4gQSBkb2N1bWVudCBpbmRpY2F0aW5nIHRoZSBhZGRyZXNzIG9mIHlvdXIgbmV3IHBlcm1hbmVudCByZXNpZGVuY2UuIFRoaXMgY2FuIGluY2x1ZGUgYSB1dGlsaXR5IGJpbGwsIG5ldyBsZWFzZSBhZ3JlZW1lbnQsIG9yIGhvbWVvd25lcidzIGluc3VyYW5jZSBkb2N1bWVudHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBub3RlLCB0byB0YWtlIGFkdmFudGFnZSBvZiBhbnkgZXhjbHVzaW9ucyBvciBkZWR1Y3Rpb25zIHJlbGF0ZWQgdG8gQXJtZWQgRm9yY2VzIG1vdmluZyBleHBlbnNlcywgdGhlc2UgZG9jdW1lbnRzIGFyZSBuZWNlc3NhcnkgdG8gdmVyaWZ5IHRoZSBleHBlbnNlcyBpbmN1cnJlZC4gV2UgdW5kZXJzdGFuZCB0aGUgc2Vuc2l0aXZlIG5hdHVyZSBvZiB0aGVzZSBkb2N1bWVudHMgYW5kIGFzc3VyZSB5b3UgdGhhdCBhbGwgaW5mb3JtYXRpb24gcHJvdmlkZWQgd2lsbCBiZSBrZXB0IGNvbmZpZGVudGlhbCBhbmQgdXNlZCBleGNsdXNpdmVseSBmb3IgdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2UgaW4gcHJvdmlkaW5nIHRoZXNlIGRvY3VtZW50cyB0byB1cy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRlZHVjdGlibGUgU2VsZiBFbXBsb3ltZW50IFBhcnQgVGF4ZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJEZWR1Y3RpYmxlIFNlbGYgRW1wbG95bWVudCBQYXJ0IFRheGVzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIG1heGltaXplIHlvdXIgZGVkdWN0aW9ucyBhbmQgZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSd2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGFkanVzdG1lbnQgZm9yIGhhbGYgb2YgeW91ciBzZWxmLWVtcGxveW1lbnQgdGF4LiBUaGlzIGludm9sdmVzIHRoZSBkZWR1Y3Rpb24gb2YgaGFsZiBvZiB0aGUgc2VsZi1lbXBsb3ltZW50IHRheCB5b3UndmUgcGFpZCBmb3IgdGhlIGN1cnJlbnQgeWVhciwgd2hpY2ggY29udHJpYnV0ZXMgdG93YXJkcyB5b3VyIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUuPC9wPlxuICAgIDxwPlRvIHByb2NlZWQgd2l0aCB0aGlzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+U2VsZi1FbXBsb3ltZW50IFRheCBDYWxjdWxhdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBjYWxjdWxhdGlvbiBvZiB5b3VyIHNlbGYtZW1wbG95bWVudCB0YXggZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUaGlzIG1heSBpbmNsdWRlIGEgc3VtbWFyeSBvZiB5b3VyIG5ldCBlYXJuaW5ncyBmcm9tIHNlbGYtZW1wbG95bWVudC48L2xpPlxuICAgIDxsaT48c3Ryb25nPlRvdGFsIFNlbGYtRW1wbG95bWVudCBUYXggUGFpZDo8L3N0cm9uZz4gT2ZmaWNpYWwgcmVjZWlwdHMgb3IgZG9jdW1lbnRzIHNob3dpbmcgdGhlIHRvdGFsIGFtb3VudCBvZiBzZWxmLWVtcGxveW1lbnQgdGF4IHBhaWQgZm9yIHRoZSB5ZWFyLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+SWRlbnRpZmljYXRpb24gb2YgUGF5bWVudHM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gb3IgbGVkZ2VycyBpbmRpY2F0aW5nIHBheW1lbnRzIG1hZGUgdG93YXJkcyBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRocm91Z2ggc2VsZi1lbXBsb3ltZW50IHRheC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBkb2N1bWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgdGF4ZXMgYW5kIGVuc3VyaW5nIHlvdSByZWNlaXZlIGFsbCBlbnRpdGxlZCBkZWR1Y3Rpb25zLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gT3VyIHRlYW0gaXMgaGVyZSB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhlIHByb2Nlc3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFNFUCBJUkEgQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VsZiBFbXBsb3llZCBTRVAgSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxuICAgIDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFNFUC1JUkEgKFNpbXBsaWZpZWQgRW1wbG95ZWUgUGVuc2lvbiBJbmRpdmlkdWFsIFJldGlyZW1lbnQgQWNjb3VudCkgdGhpcyB0YXggeWVhciBhcyBhIHNlbGYtZW1wbG95ZWQgaW5kaXZpZHVhbC4gRm9yIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgdG8gbWF4aW1pemUgeW91ciBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+U0VQLUlSQSBDb250cmlidXRpb24gU3RhdGVtZW50czo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIHN0YXRlbWVudHMgb3IgcmVjZWlwdHMgc2hvd2luZyB0aGUgY29udHJpYnV0aW9ucyBtYWRlIHRvIHlvdXIgU0VQLUlSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFNlbGYtRW1wbG95ZWQgSW5jb21lOjwvc3Ryb25nPiBBcyB5b3VyIFNFUC1JUkEgY29udHJpYnV0aW9uIGxpbWl0cyBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIHNlbGYtZW1wbG95ZWQgaW5jb21lLCBwbGVhc2UgZW5zdXJlIHdlIGhhdmUgYWxsIHJlbGV2YW50IGluY29tZSBkb2N1bWVudGF0aW9uLiBUaGlzIG1heSBpbmNsdWRlLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIDEwOTkgZm9ybXMsIHByb2ZpdCBhbmQgbG9zcyBzdGF0ZW1lbnRzLCBhbmQgYnVzaW5lc3MgYmFuayBzdGF0ZW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlNjaGVkdWxlIEMgKEZvcm0gMTA0MCkgb3IgRXF1aXZhbGVudDo8L3N0cm9uZz4gSWYgeW91IGhhdmUgbm90IGFscmVhZHkgZG9uZSBzbywgcGxlYXNlIHByb3ZpZGUgYSBjb21wbGV0ZWQgU2NoZWR1bGUgQyBvciBlcXVpdmFsZW50IGRvY3VtZW50YXRpb24gdGhhdCBkZXRhaWxzIHlvdXIgYnVzaW5lc3MgZWFybmluZ3MgYW5kIGV4cGVuc2VzLiBUaGlzIHdpbGwgaGVscCBpbiBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIHlvdXIgbWF4aW11bSBkZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbi48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgUHJpb3IgWWVhciBDb250cmlidXRpb24gRGV0YWlsczo8L3N0cm9uZz4gSWYgeW91IGhhdmUgbWFkZSBjb250cmlidXRpb25zIGluIHByaW9yIHllYXJzIGJ1dCBoYXZlbuKAmXQgc2hhcmVkIHRob3NlIGRldGFpbHMgd2l0aCB1cywgcGxlYXNlIGRvIHNvLiBUaGlzIGNhbiBhZmZlY3QgeW91ciBjdXJyZW50IHllYXLigJlzIGNvbnRyaWJ1dGlvbnMgYW5kIGRlZHVjdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkNvcnJlY3RseSByZXBvcnRpbmcgeW91ciBTRVAtSVJBIGNvbnRyaWJ1dGlvbnMgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgdGF4IGRlZHVjdGlvbnMgYW5kIGNvbXBseSB3aXRoIElSUyBydWxlcyBhbmQgcmVndWxhdGlvbnMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBjb21wbGV0aW5nIHlvdXIgdGF4IHByZXBhcmF0aW9uIGVmZmljaWVudGx5IGFuZCBhY2N1cmF0ZWx5LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFNJTVBMRSBQbGFuIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgU0lNUExFIFBsYW4gQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPldlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBub3RlZCB0aGF0IHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvIGEgU0lNUExFIElSQSBwbGFuIGFzIGEgc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFsIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGVzZSBjb250cmlidXRpb25zIGluIHlvdXIgdGF4IGZpbGluZywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIDwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFNJTVBMRSBJUkEgdGhpcyB0YXggeWVhcjo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIHRvdGFsIHN1bSBvZiB5b3VyIGNvbnRyaWJ1dGlvbnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29udHJpYnV0aW9uIGRhdGVzOjwvc3Ryb25nPiBMaXN0IHRoZSBkYXRlcyBvbiB3aGljaCB5b3UgbWFkZSB0aGVzZSBjb250cmlidXRpb25zIHRvIHRoZSBTSU1QTEUgSVJBLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIGNvbnRyaWJ1dGlvbnM6PC9zdHJvbmc+IFRoaXMgY2FuIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzIG9yIHRyYW5zYWN0aW9uIGhpc3RvcmllcyBzaG93aW5nIHRoZSBjb250cmlidXRpb25zIHRvIHlvdXIgU0lNUExFIElSQSBhY2NvdW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPklSUyBGb3JtIDEwNDAgU2NoZWR1bGUgQzo8L3N0cm9uZz4gQXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwsIHlvdXIgdGF4IHJldHVybiBzaG91bGQgaW5jbHVkZSBhIFNjaGVkdWxlIEMgc2hvd2luZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBkZXRlcm1pbmluZyB5b3VyIG5ldCBlYXJuaW5ncyBhbmQgdGhlIGNvbnRyaWJ1dGlvbiBsaW1pdHMgZm9yIHlvdXIgU0lNUExFIElSQS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKEVJTikgb2YgdGhlIFNJTVBMRSBJUkEgcGxhbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSB0aGUgRUlOIGZvciB5b3VyIFNJTVBMRSBJUkEuIFRoaXMgaXMgbm90IHJlcXVpcmVkIGlmIHlvdSBhcmUgdGhlIHNvbGUgY29udHJpYnV0b3IgYW5kIGRvIG5vdCBoYXZlIGFuIEVJTiBzZXBhcmF0ZSBmcm9tIHlvdXIgU29jaWFsIFNlY3VyaXR5IE51bWJlci48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgcmV0aXJlbWVudCBjb250cmlidXRpb25zLiBZb3VyIHByb21wdG5lc3MgaW4gcHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBoZWxwIGF2b2lkIGRlbGF5cyBpbiB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFF1YWxpZmllZCBQbGFuIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgUXVhbGlmaWVkIFBsYW4gQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscyByZWdhcmRpbmcgeW91ciBzZWxmLWVtcGxveWVkIHF1YWxpZmllZCBwbGFuIGNvbnRyaWJ1dGlvbnMuIFlvdXIgcmVzcG9uc2UgdG8gb3VyIHF1ZXN0aW9uIGFib3V0IG1ha2luZyBjb250cmlidXRpb25zIHRvIGEgcXVhbGlmaWVkIHJldGlyZW1lbnQgcGxhbiBkdXJpbmcgdGhpcyB0YXggeWVhciBuZWNlc3NpdGF0ZXMgZnVydGhlciBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGNvbXB1dGUgcG90ZW50aWFsIHRheCBiZW5lZml0cyBvciBvYmxpZ2F0aW9ucy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxiPkNvbmZpcm1hdGlvbiBvZiBDb250cmlidXRpb24gVHlwZTo8L2I+IENsYXJpZnkgdGhlIHR5cGUgb2YgcXVhbGlmaWVkIHJldGlyZW1lbnQgcGxhbiB5b3UgY29udHJpYnV0ZWQgdG8gKGUuZy4sIFNvbG8gNDAxKGspLCBTRVAgSVJBLCBTSU1QTEUgSVJBKS48L2xpPlxuICAgIDxsaT48Yj5Ub3RhbCBBbW91bnQgQ29udHJpYnV0ZWQ6PC9iPiBTcGVjaWZ5IHRoZSB0b3RhbCBkb2xsYXIgYW1vdW50IGNvbnRyaWJ1dGVkIHRvIHRoZSBwbGFuIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICA8bGk+PGI+Q29udHJpYnV0aW9uIERhdGVzOjwvYj4gTGlzdCB0aGUgZGF0ZXMgb24gd2hpY2ggY29udHJpYnV0aW9ucyB3ZXJlIG1hZGUuPC9saT5cbiAgICA8bGk+PGI+UGxhbiBBZG1pbmlzdHJhdG9yOjwvYj4gUHJvdmlkZSB0aGUgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgcGxhbidzIGFkbWluaXN0cmF0b3IsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICA8bGk+PGI+UHJvb2Ygb2YgQ29udHJpYnV0aW9uczo8L2I+IEZvcndhcmQgYW55IHJlY2VpcHRzLCBzdGF0ZW1lbnRzLCBvciBvdGhlciBkb2N1bWVudHMgdGhhdCBjYW4gdmVyaWZ5IHRoZSBjb250cmlidXRpb25zIHlvdSBtYWRlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoYXQgeW91IHJlY2VpdmUgdGhlIHByb3BlciB0YXggdHJlYXRtZW50IGZvciB0aGVzZSBjb250cmlidXRpb25zLiBGYWlsdXJlIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHJldGlyZW1lbnQgcGxhbiBjb250cmlidXRpb25zIGNhbiByZXN1bHQgaW4gZGlzY3JlcGFuY2llcyB3aXRoIHRoZSBJUlMgYW5kIHBvdGVudGlhbGx5IGFmZmVjdCB5b3VyIHRheCBsaWFiaWxpdHkgb3IgcmVmdW5kLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBoZWxwIHVzIHRvIG1vcmUgZWZmaWNpZW50bHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24gc2VydmljZXMuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIEhlYWx0aCBJbnN1cmFuY2UgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VsZiBFbXBsb3llZCBIZWFsdGggSW5zdXJhbmNlIERlZHVjdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RpY2VkIHlvdSBpbmRpY2F0ZWQgcGF5aW5nIGZvciBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zIGFzIGEgc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFsLiBUbyBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbnMgZm9yIHlvdXIgaGVhbHRoIGluc3VyYW5jZSBjb3N0cywgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIDxzdHJvbmc+YWxsIGhlYWx0aCBpbnN1cmFuY2UgcHJlbWl1bXM8L3N0cm9uZz4gcGFpZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgbWVkaWNhbCwgZGVudGFsLCBhbmQgbG9uZy10ZXJtIGNhcmUgaW5zdXJhbmNlLiBUaGlzIHNob3VsZCBjb3ZlcjpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50cyBwYWlkIGZvciB5b3Vyc2VsZjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHMgcGFpZCBmb3IgeW91ciBzcG91c2U8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzIHBhaWQgZm9yIHlvdXIgZGVwZW5kZW50czwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgcGF5bWVudCBmb3IgdGhlc2UgcHJlbWl1bXMsIHN1Y2ggYXM6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50czwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkluc3VyYW5jZSBwYXltZW50IHJlY2VpcHRzPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+Q2FuY2VsbGVkIGNoZWNrczwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBjb25maXJtaW5nIHRoZSBpbnN1cmFuY2UgY292ZXJhZ2UsIGluY2x1ZGluZzpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+SW5zdXJhbmNlIHBvbGljeSBzdGF0ZW1lbnRzPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+Q292ZXJhZ2Ugc3VtbWFyaWVzPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5Db25maXJtYXRpb24gdGhhdCB0aGUgaW5zdXJhbmNlIHBsYW4gaXMgZXN0YWJsaXNoZWQgdW5kZXIgeW91ciBidXNpbmVzcyAoZm9yIHNlbGYtZW1wbG95ZWQgaW5kaXZpZHVhbHMpLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIHlvdXIgZGVkdWN0aWJsZSBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gUGxlYXNlIHNlbmQgdGhlIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGVkIGluIGEgdGltZWx5IG1hbm5lci48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyByZXF1aXJlZCwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWFybHkgU2F2aW5ncyBXaXRoZHJhd2FsIFBlbmFsdHlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJFYXJseSBTYXZpbmdzIFdpdGhkcmF3YWwgUGVuYWx0eVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91IGluY3VycmVkIHBlbmFsdGllcyBkdWUgdG8gZWFybHkgd2l0aGRyYXdhbHMgZnJvbSBzYXZpbmdzIGFjY291bnRzIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhc3Npc3QgeW91IGVmZmljaWVudGx5IGFuZCBlbnN1cmUgYWNjdXJhdGUgdGF4IGZpbGluZywgd2Uga2luZGx5IGFzayB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlRoZSB0b3RhbCBhbW91bnQgb2YgcGVuYWx0aWVzPC9zdHJvbmc+IGluY3VycmVkIGZyb20gZWFybHkgd2l0aGRyYXdhbHMuIFRoaXMgaW5jbHVkZXMgcGVuYWx0aWVzIGZyb20gY2VydGlmaWNhdGVzIG9mIGRlcG9zaXQgb3Igb3RoZXIgdGltZS1iYXNlZCBzYXZpbmdzIGFjY291bnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIHN0YXRlbWVudHM8L3N0cm9uZz4gZnJvbSB5b3VyIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiBmb3IgZWFjaCBpbnN0YW5jZSBvZiBlYXJseSB3aXRoZHJhd2FsLiBUaGVzZSBzdGF0ZW1lbnRzIHNob3VsZCBpbmNsdWRlOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZGF0ZSBvZiB3aXRoZHJhd2FsPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCB3aXRoZHJhd24gZWFybHk8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgcGVuYWx0eSBjaGFyZ2VkPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlRoZSBwdXJwb3NlIG9mIGVhY2ggd2l0aGRyYXdhbDwvc3Ryb25nPiwgaWYgYXZhaWxhYmxlLiBDZXJ0YWluIHNpdHVhdGlvbnMgbWF5IHByb3ZpZGUgZXhjZXB0aW9ucyB0byBwZW5hbHRpZXMgb24geW91ciB0YXggcmV0dXJuLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgPHN0cm9uZz5jb3JyZXNwb25kZW5jZSBvciBkb2N1bWVudGF0aW9uPC9zdHJvbmc+IGZyb20gdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiByZWdhcmRpbmcgdGhlc2UgcGVuYWx0aWVzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgdG8gYWNjdXJhdGVseSBhc3Nlc3MgcG9zc2libGUgaW1wYWN0cyBvbiB5b3VyIHRheCBmaWxpbmcgYW5kIGV4cGxvcmUgYW55IG9wcG9ydHVuaXRpZXMgdG8gbWluaW1pemUgeW91ciB0YXggbGlhYmlsaXR5LjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkZXRhaWxzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFsaW1vbnkgUGFpZFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFsaW1vbnkgUGFpZFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGZpbmFuY2lhbCBhY3Rpdml0aWVzIG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuIEFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBtYWRlIGFsaW1vbnkgcGF5bWVudHMgdW5kZXIgYSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm4uIFRoZSBkb2N1bWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucyBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnlpbmcgYWxsb3dhYmxlIGRlZHVjdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBwYXltZW50cy48L3A+IFxuICAgIDxwPjxzdHJvbmc+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIHJlbGF0ZWQgdG8geW91ciBhbGltb255IHBheW1lbnRzOjwvc3Ryb25nPjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5Db3B5IG9mIHlvdXIgc2lnbmVkIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQgdGhhdCBzdGF0ZXMgdGhlIGFtb3VudCBvZiBhbGltb255IHRvIGJlIHBhaWQgYW5kIHRoZSB0aW1lbGluZXMuIFBsZWFzZSBlbnN1cmUgdGhpcyBkb2N1bWVudCBoaWdobGlnaHRzIHRoZSBzZWN0aW9ucyByZWxldmFudCB0byBhbGltb255IG9ibGlnYXRpb25zLjwvbGk+XG4gICAgICAgIDxsaT5EZXRhaWxlZCByZWNvcmQgb2YgYWxsIGFsaW1vbnkgcGF5bWVudHMgbWFkZSBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2YgZWFjaCBwYXltZW50PC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IG9mIGVhY2ggcGF5bWVudDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPk1ldGhvZCBvZiBwYXltZW50IChlLmcuLCBjaGVjaywgYmFuayB0cmFuc2Zlcik8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5OYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSByZWNpcGllbnQ8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50cyBvciBjYW5jZWxsZWQgY2hlY2tzIGFzIHByb29mIG9mIHRoZSBhbGltb255IHBheW1lbnRzIG1hZGUuPC9saT5cbiAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGFueSBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIHRoYXQgaW5kaWNhdGVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG9yaWdpbmFsIGFncmVlbWVudCBhZmZlY3RpbmcgYWxpbW9ueSBwYXltZW50cyBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGRvY3VtZW50YXRpb24gd2lsbCBoZWxwIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHJldHVybiByZWZsZWN0cyBhbGwgcmVsZXZhbnQgZmluYW5jaWFsIGFjdGl2aXRpZXMgYW5kIGFzc2lzdHMgaW4gYWNjdXJhdGVseSBkZXRlcm1pbmluZyBhbnkgdGF4IGxpYWJpbGl0aWVzIG9yIGRlZHVjdGlvbnMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZGV0YWlscyB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQgYW5kIHdpbGwgZXhwZWRpdGUgdGhlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggcHJlcGFyYXRpb25zLjwvcD5cbiAgICA8cD5QbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBpZiB5b3UgbmVlZCBmdXJ0aGVyIGd1aWRhbmNlIG9uIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMuIFdlIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoaXMgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVHJhZGl0aW9uYWwgSVJBIERlZHVjdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRyYWRpdGlvbmFsIElSQSBEZWR1Y3Rpb25cIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybi4gSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IGR1cmluZyB0aGlzIHRheCB5ZWFyLCB5b3UgaGF2ZSBjb250cmlidXRlZCB0byBhIFRyYWRpdGlvbmFsIElSQSAoSW5kaXZpZHVhbCBSZXRpcmVtZW50IEFjY291bnQpLiBUbyBhY2N1cmF0ZWx5IGNhcHR1cmUgdGhpcyBpbiB5b3VyIHRheCBmaWxpbmcgYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgZGVkdWN0aW9uLCB3ZSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICA8bGk+UHJvb2Ygb2YgY29udHJpYnV0aW9uIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgKHN1Y2ggYXMgc3RhdGVtZW50cyBvciByZWNlaXB0cykuPC9saT5cbiAgICAgIDxsaT5Zb3VyIHllYXItZW5kIElSQSBzdGF0ZW1lbnQuPC9saT5cbiAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBwcmV2aW91cyBub24tZGVkdWN0aWJsZSBjb250cmlidXRpb25zIHRvIHlvdXIgSVJBIChpZiBhcHBsaWNhYmxlKS48L2xpPlxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSB3aXRoZHJhd2FscyBvciBkaXN0cmlidXRpb25zIHRha2VuIGR1cmluZyB0aGUgeWVhci48L2xpPlxuICAgICAgPGxpPllvdXIgZmlsaW5nIHN0YXR1cyBhbmQgYW55IGluZm9ybWF0aW9uIG9uIGEgc3BvdXNlJ3MgSVJBIGNvbnRyaWJ1dGlvbnMgaWYgeW91IGFyZSBtYXJyaWVkLjwvbGk+XG4gICAgICA8bGk+RGV0YWlscyBvZiB5b3VyIGVhcm5lZCBpbmNvbWUgZm9yIHRoZSB0YXggeWVhci48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB0aGF0IHdlIGNhbiBhY2N1cmF0ZWx5IHJlcHJlc2VudCB5b3VyIElSQSBjb250cmlidXRpb25zIGFuZCBvcHRpbWl6ZSB5b3VyIGRlZHVjdGlvbnMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlN0dWRlbnQgTG9hbiBJbnRlcmVzdCBEZWR1Y3Rpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJTdHVkZW50IExvYW4gSW50ZXJlc3QgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBwYXltZW50IG9mIHN0dWRlbnQgbG9hbiBpbnRlcmVzdCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcm9jZXNzIHRoaXMgc2VnbWVudCBvZiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSB5b3UgYmVuZWZpdCBmcm9tIGFueSBwb3RlbnRpYWwgU3R1ZGVudCBMb2FuIEludGVyZXN0IERlZHVjdGlvbiwgd2UgbmVlZCB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5OC1FOjwvc3Ryb25nPiBUaGlzIGlzIGEgU3R1ZGVudCBMb2FuIEludGVyZXN0IFN0YXRlbWVudCBpc3N1ZWQgYnkgeW91ciBsb2FuIHNlcnZpY2VyLiBJZiB5b3UndmUgcGFpZCAkNjAwIG9yIG1vcmUgaW4gaW50ZXJlc3QsIHlvdSBzaG91bGQgYXV0b21hdGljYWxseSByZWNlaXZlIGl0LiBQbGVhc2Ugc2NhbiBhbmQgc2VuZCBpdCB0byB1cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Mb2FuIFN0YXRlbWVudHM6PC9zdHJvbmc+IElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBGb3JtIDEwOTgtRSBvciBwYWlkIGxlc3MgdGhhbiAkNjAwIGluIGludGVyZXN0LCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCBsb2FuIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGUgaW50ZXJlc3QgcGFpZCBvdmVyIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Cb3Jyb3dlcidzIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBTb2NpYWwgU2VjdXJpdHkgTnVtYmVycyBhbmQgZnVsbCBuYW1lcyBvZiBhbnkgaW5kaXZpZHVhbHMgZm9yIHdob20gdGhlIGxvYW4gaW50ZXJlc3Qgd2FzIHBhaWQsIGluY2x1ZGluZyB5b3Vyc2VsZiwgeW91ciBzcG91c2UsIG9yIGRlcGVuZGVudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudHMgb24gU29tZW9uZSBFbHNlJ3MgQmVoYWxmOjwvc3Ryb25nPiBJZiB5b3UncmUgbm90IGxlZ2FsbHkgb2JsaWdhdGVkIHRvIG1ha2UgaW50ZXJlc3QgcGF5bWVudHMgb24gdGhlIGxvYW4gYnV0IGhhdmUgZG9uZSBzbyBhbnl3YXksIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyByZWZsZWN0aW5nIHRoaXMgcGF5bWVudC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBkZWR1Y3Rpb24gY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgdGF4IGFkdmFudGFnZXMsIGFuZCB3ZSdyZSBoZXJlIHRvIGhlbHAgeW91IG1heGltaXplIHlvdXIgYmVuZWZpdHMuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb2FjdGl2ZSBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFzIHdlIHN0cml2ZSB0byBzZXJ2ZSB5b3UgYmV0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBcmNoZXIgTVNBIERlZHVjdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFyY2hlciBNU0EgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2Ugbm90ZWQgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIGNvbnRyaWJ1dGlvbnMgdG8gYW4gQXJjaGVyIE1lZGljYWwgU2F2aW5ncyBBY2NvdW50IChNU0EpIHdpdGhpbiB0aGlzIHRheCB5ZWFyLCB1bmRlciBhIGhpZ2gtZGVkdWN0aWJsZSBoZWFsdGggcGxhbi4gVG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBjb250cmlidXRpb25zIGluIHlvdXIgdGF4IHJldHVybiwgYW5kIHRvIG1heGltaXplIHlvdXIgcG90ZW50aWFsIGRlZHVjdGlvbnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgc3BlY2lmaWNzOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gNTQ5OC1TQTo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIEZvcm0gNTQ5OC1TQSwgaWYgcmVjZWl2ZWQsIHdoaWNoIHNob3dzIHRoZSBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIEFyY2hlciBNU0EgdGhpcyB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5CYW5rIG9yIEZpbmFuY2lhbCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZW4ndCByZWNlaXZlZCBGb3JtIDU0OTgtU0EsIGJhbmsgb3IgZmluYW5jaWFsIGluc3RpdHV0aW9uIHN0YXRlbWVudHMgc2hvd2luZyB5b3VyIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIE1TQSBhcmUgcmVxdWlyZWQuIEVuc3VyZSB0aGVzZSBjbGVhcmx5IGhpZ2hsaWdodCB0aGUgY29udHJpYnV0aW9uIGFtb3VudHMgYW5kIGRhdGVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEhpZ2gtRGVkdWN0aWJsZSBIZWFsdGggUGxhbjo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiB0aGF0IGV2aWRlbmNlcyB5b3UgYXJlIGNvdmVyZWQgdW5kZXIgYSBoaWdoLWRlZHVjdGlibGUgaGVhbHRoIHBsYW4uIFRoaXMgY291bGQgaW5jbHVkZSBpbnN1cmFuY2Ugc3RhdGVtZW50cyBvciBwb2xpY3kgZG9jdW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIGFuZCBBY2NvdW50IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBhY2NvdW50IGhvbGRlcidzIGZ1bGwgbmFtZSBhbmQgU29jaWFsIFNlY3VyaXR5IE51bWJlciwgYWxvbmdzaWRlIHRoZSBBcmNoZXIgTVNBIGFjY291bnQgbnVtYmVyLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UbyBmYWNpbGl0YXRlIGEgc21vb3RoIGRlZHVjdGlvbiBwcm9jZXNzIGFuZCBhZGhlcmUgdG8gSVJTIGd1aWRlbGluZXMsIGtpbmRseSBzdWJtaXQgdGhlIG91dGxpbmVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlPC9zdHJvbmc+LiBFYXJseSBzdWJtaXNzaW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHRheCBwcmVwYXJhdGlvbiBzZXJ2aWNlLjwvcD5cbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB0byB0aGVzZSByZXF1aXJlbWVudHMgd2lsbCBkaXJlY3RseSBpbXBhY3QgdGhlIGVmZmljaWVuY3kgYW5kIGFjY3VyYWN5IG9mIHlvdXIgdGF4IHJldHVybiBwcm9jZXNzaW5nLiBTaG91bGQgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBvciBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIGRvY3VtZW50YXRpb24sIHBsZWFzZSBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJPdGhlciBXcml0ZS1JbiBBZGp1c3RtZW50c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIk90aGVyIFdyaXRlLUluIEFkanVzdG1lbnRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIGFkZGl0aW9uYWwgZXhwZW5zZXMgb3IgYWRqdXN0bWVudHMgdGhhdCBjb3VsZCBpbXBhY3QgeW91ciB0YXhhYmxlIGluY29tZSBmb3IgdGhlIGN1cnJlbnQgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBmdWxseSBsZXZlcmFnZSBhbGwgcG9zc2libGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byB0aGVzZSBpdGVtcy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGZvciBlYWNoIHNwZWNpZmllZCBkZWR1Y3Rpb24gb3IgYWRqdXN0bWVudDo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgRXhwZW5zZSBvciBBZGp1c3RtZW50Ojwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggaXRlbSB5b3UgYmVsaWV2ZSBzaG91bGQgYmUgY29uc2lkZXJlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQ6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgcGFpZCBvciBpbmN1cnJlZCBmb3IgZWFjaCBvZiB0aGVzZSBleHBlbnNlcyBvciBhZGp1c3RtZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBDb3BpZXMgb2YgcmVjZWlwdHMsIGludm9pY2VzLCBsZWdhbCBkb2N1bWVudHMsIG9yIG90aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2UgdGhhdCB2YWxpZGF0ZSB0aGUgZXhwZW5zZSBvciBhZGp1c3RtZW50LiBUaGlzIGRvY3VtZW50YXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVxdWlyZW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUGF5bWVudCBvciBJbmN1cnJlbmNlOjwvc3Ryb25nPiBUaGUgZGF0ZShzKSBvbiB3aGljaCB0aGUgZXhwZW5zZSB3YXMgcGFpZCBvciB0aGUgYWRqdXN0bWVudCBvY2N1cnJlZC4gVGhpcyBpcyBjcml0aWNhbCB0byBkZXRlcm1pbmUgdGhlIHRheCB5ZWFyIGluIHdoaWNoIHRoZSBkZWR1Y3Rpb24gb3IgYWRqdXN0bWVudCBhcHBsaWVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgRXhwbGFuYXRpb246PC9zdHJvbmc+IEFueSBvdGhlciByZWxldmFudCBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGhlbHAgdXMgdW5kZXJzdGFuZCBob3cgdGhlIGV4cGVuc2Ugb3IgYWRqdXN0bWVudCBpcyBqdXN0aWZpZWQgdW5kZXIgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGFyZSBwcm92aWRlZCBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIGVmZmljaWVudCBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGNvbnN0aXR1dGVzIGFwcHJvcHJpYXRlIGRvY3VtZW50YXRpb24sIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFdlIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk1lZGljYWwgYW5kIERlbnRhbCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIk1lZGljYWwgYW5kIERlbnRhbCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3Ugb3IgeW91ciBkZXBlbmRlbnRzIGhhdmUgaW5jdXJyZWQgc2lnbmlmaWNhbnQgbWVkaWNhbCBvciBkZW50YWwgZXhwZW5zZXMgZHVyaW5nIHRoaXMgdGF4IHllYXIgdGhhdCB3ZXJlIG5vdCByZWltYnVyc2VkIGJ5IGluc3VyYW5jZSBvciBvdGhlciBoZWFsdGggcGxhbnMuIFRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBleHBlbnNlcyBpbiB5b3VyIHRheCBwcmVwYXJhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+RGV0YWlsZWQgcmVjZWlwdHMgb3Igc3RhdGVtZW50cyBmb3IgYWxsIG1lZGljYWwgYW5kIGRlbnRhbCBleHBlbnNlcyBpbmN1cnJlZCBmb3IgeW91cnNlbGYgYW5kIGFueSBkZXBlbmRlbnRzLiBUaGlzIGluY2x1ZGVzIHBheW1lbnRzIGZvcjpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+RG9jdG9ycyBhbmQgZGVudGlzdHM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5TdXJnZW9uczwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlByZXNjcmlwdGlvbnM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5NZWRpY2FsIGVxdWlwbWVudCBkZWVtZWQgbmVjZXNzYXJ5PC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IG90aGVyIGhlYWx0aC1yZWxhdGVkIGV4cGVuc2VzIG5vdCBsaXN0ZWQgdGhhdCB5b3UgYmVsaWV2ZSBtYXkgYmUgcmVsZXZhbnQ8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyBzaG93aW5nIGFueSByZWltYnVyc2VtZW50cyByZWNlaXZlZCBmcm9tIGluc3VyYW5jZSBvciBoZWFsdGggcGxhbnMgZm9yIHRoZXNlIGV4cGVuc2VzLjwvbGk+XG4gICAgICAgIDxsaT5BIGxpc3Qgb2YgZGVwZW5kZW50cyBmb3Igd2hvbSB0aGVzZSBtZWRpY2FsIGFuZCBkZW50YWwgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZCwgYWxvbmcgd2l0aCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XG4gICAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCByZWNvcmRzIG9mIHRyYXZlbCBleHBlbnNlcyByZWxhdGVkIHRvIG1lZGljYWwgY2FyZSwgaW5jbHVkaW5nIG1pbGVhZ2UsIHBhcmtpbmcsIGFuZCB0b2xscy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+SGF2aW5nIHRoZXNlIGRvY3VtZW50cyByZWFkeSBhbmQgYWNjdXJhdGVseSBkb2N1bWVudGVkIHdpbGwgaGVscCB1cyBlbnN1cmUgdGhhdCB3ZSBjYW4gbWF4aW1pemUgeW91ciB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzIHJlbGF0ZWQgdG8gdGhlc2UgZXhwZW5zZXMuIFBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSwgb3IgY29udGFjdCB1cyB0byBzY2hlZHVsZSBhIG1lZXRpbmcgdG8gZGlzY3VzcyB0aGVzZSBpbiBmdXJ0aGVyIGRldGFpbC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU0FMVCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNBTFQgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgbmVlZCB0byBjb21waWxlIGFjY3VyYXRlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIFN0YXRlIGFuZCBMb2NhbCBUYXhlcyAoU0FMVCkgZXhwZW5zZXMuIEFjY29yZGluZyB0byB5b3VyIHJlY2VudCBzdWJtaXNzaW9uLCB5b3UgaW5kaWNhdGVkIGhhdmluZyBwYWlkIHNpZ25pZmljYW50IGFtb3VudHMgaW4gdGhlc2UgdGF4ZXMgb3ZlciB0aGUgbGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHBvc3NpYmxlIHNlcnZpY2UgYW5kIG1heGltaXplIHlvdXIgZGVkdWN0aW9ucywgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxiPlN1bW1hcnkgb2YgU3RhdGUgYW5kIExvY2FsIEluY29tZSBUYXhlczo8L2I+IFxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlctMiBmb3JtcyBzaG93aW5nIHN0YXRlIGFuZCBsb2NhbCBpbmNvbWUgdGF4ZXMgd2l0aGhlbGQuPC9saT5cbiAgICAgICAgICA8bGk+RXN0aW1hdGVkIHRheCBwYXltZW50IHJlY2VpcHRzIHRvIHN0YXRlIGFuZCBsb2NhbCBnb3Zlcm5tZW50cywgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT48Yj5Qcm9wZXJ0eSBUYXhlczo8L2I+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+QW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnRzIGZvciB5b3VyIHByaW1hcnkgcmVzaWRlbmNlLCB2YWNhdGlvbiBob21lcywgYW5kIGFueSBvdGhlciByZWFsIGVzdGF0ZSBvd25lZC48L2xpPlxuICAgICAgICAgIDxsaT5WZWhpY2xlIHJlZ2lzdHJhdGlvbiBkb2N1bWVudHMgc2hvd2luZyBwYWlkIHByb3BlcnR5IHRheCBhbW91bnRzLjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPjxiPlNhbGVzIFRheGVzOjwvYj4gKElmIHlvdSBlbGVjdGVkIHRvIGRlZHVjdCBzYWxlcyB0YXhlcyBpbnN0ZWFkIG9mIGluY29tZSB0YXhlcylcbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5EZXRhaWxlZCByZWNlaXB0cyBvZiBzaWduaWZpY2FudCBwdXJjaGFzZXMgKGUuZy4sIHZlaGljbGUsIGJvYXQsIGhvbWUgcmVub3ZhdGlvbiBtYXRlcmlhbHMpLjwvbGk+XG4gICAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIG9yIHN1bW1hcnkgb2YgdG90YWwgc2FsZXMgdGF4ZXMgcGFpZCBpZiB5b3Uga2VwdCBhIGRldGFpbGVkIHJlY29yZC48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBkYXRlZCB3aXRoaW4gdGhlIGxhc3QgdGF4IHllYXIuIFByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgd2lsbCBleHBlZGl0ZSB0aGUgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIGhlbHAgdXMgaWRlbnRpZnkgZWxpZ2libGUgZGVkdWN0aW9ucyB0byBvcHRpbWl6ZSB5b3VyIHRheCBzaXR1YXRpb24uPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZWR1Y3RpYmxlIEludGVyZXN0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRGVkdWN0aWJsZSBJbnRlcmVzdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIG5lZWQgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGRlZHVjdGlibGUgaW50ZXJlc3QgZXhwZW5zZXMuIFRoaXMgaXMgaW4gcmVsYXRpb24gdG8gdGhlIGluZm9ybWF0aW9uIHlvdSBwcm92aWRlZCBpbmRpY2F0aW5nIHRoYXQgeW91IGhhdmUgaW5jdXJyZWQgbW9ydGdhZ2UgaW50ZXJlc3QsIGxhdGUgZmVlcywgb3IgcG9pbnRzIG9uIGEgaG9tZSBsb2FuIHRoaXMgeWVhciBmb3IgZWl0aGVyIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugb3IgYSBzZWNvbmQgaG9tZS4gVGhlc2UgZXhwZW5zZXMgbWF5IHNpZ25pZmljYW50bHkgcmVkdWNlIHlvdXIgdGF4YWJsZSBpbmNvbWUsIGVuc3VyaW5nIGEgZmF2b3JhYmxlIHRheCBvdXRjb21lIGZvciB5b3UuPC9wPlxuXG4gICAgPGgyPlJlcXVpcmVkIERvY3VtZW50YXRpb248L2gyPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICBcbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+TW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50cyAoRm9ybSAxMDk4KTwvc3Ryb25nPjogRm9yIGVhY2ggcHJvcGVydHkgeW91IG93bi4gVGhpcyBpbmNsdWRlcyB5b3VyIHByaW1hcnkgaG9tZSBhbmQgYW55IHNlY29uZCBob21lcyBvciByZW50YWwgcHJvcGVydGllcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPkhvbWUgRXF1aXR5IExvYW4gSW50ZXJlc3Q8L3N0cm9uZz46IElmIGFwcGxpY2FibGUsIGRvY3VtZW50YXRpb24gZm9yIGludGVyZXN0IHBhaWQgb24gaG9tZSBlcXVpdHkgbG9hbnMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IEludGVyZXN0IEV4cGVuc2VzPC9zdHJvbmc+OiBJZiB5b3UgaGF2ZSBpbmN1cnJlZCBhbnkgaW52ZXN0bWVudCBpbnRlcmVzdCBleHBlbnNlcywgcGxlYXNlIHByb3ZpZGUgZGV0YWlsZWQgc3RhdGVtZW50cyBvciBhY2NvdW50IHN1bW1hcmllcyBzaG93aW5nIHRoZSBpbnRlcmVzdCBwYWlkLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+UG9pbnRzIFBhaWQ8L3N0cm9uZz46IERvY3VtZW50YXRpb24gZGV0YWlsaW5nIHBvaW50cyBwYWlkIGlmIHlvdSBwdXJjaGFzZWQgb3IgcmVmaW5hbmNlZCBhIGhvbWUgdGhpcyB0YXggeWVhci48L2xpPlxuICAgIDxsaT48c3Ryb25nPkxhdGUgUGF5bWVudCBGZWVzPC9zdHJvbmc+IG9uIE1vcnRnYWdlOiBJZiBhbnksIGRvY3VtZW50YXRpb24gb2YgbGF0ZSBwYXltZW50IGZlZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgaG9tZSBsb2FuKHMpLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UbyBlbnN1cmUgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgYWNjdXJhdGVseSBhbmQgZmlsZWQgb24gdGltZSwgd2Uga2luZGx5IGFzayB0aGF0IHlvdSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLiBJZiB5b3UgZm9yZXNlZSBhbnkgZGVsYXlzIG9yIGhhdmUgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBjb250YWN0IHVzIGltbWVkaWF0ZWx5LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgYXBwcmVjaWF0ZSB0aGUgb3Bwb3J0dW5pdHkgdG8gc2VydmUgeW91IGFuZCBhcmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIG9yIGNvbmNlcm5zIHlvdSBtYXkgaGF2ZS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2hhcml0YWJsZSBDb250cmlidXRpb25zXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2hhcml0YWJsZSBDb250cmlidXRpb25zXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPkFzIHBhcnQgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMsIHdlIG5vdGVkIHRoYXQgeW91IGhhdmUgbWFkZSBjaGFyaXRhYmxlIGNvbnRyaWJ1dGlvbnMgdGhpcyB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlc2UgY29udHJpYnV0aW9ucyBvbiB5b3VyIHRheCByZXR1cm4sIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbnMsIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5MaXN0IG9mIENoYXJpdGFibGUgT3JnYW5pemF0aW9uczo8L3N0cm9uZz4gTmFtZXMgYW5kIGFkZHJlc3NlcyBvZiB0aGUgb3JnYW5pemF0aW9ucyB0byB3aGljaCB5b3UgaGF2ZSBkb25hdGVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyaWJ1dGlvbiBEYXRlczo8L3N0cm9uZz4gRGF0ZXMgb24gd2hpY2ggZWFjaCBkb25hdGlvbiB3YXMgbWFkZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb25hdGlvbiBBbW91bnRzOjwvc3Ryb25nPiBcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+Rm9yIGNhc2ggZG9uYXRpb25zLCB0aGUgZXhhY3QgYW1vdW50IGRvbmF0ZWQgdG8gZWFjaCBvcmdhbml6YXRpb24uPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+Rm9yIGRvbmF0aW9ucyBvZiBnb29kcywgYW4gZXN0aW1hdGVkIHZhbHVlIG9mIHRoZSBpdGVtcyBkb25hdGVkIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBEb25hdGlvbjo8L3N0cm9uZz4gXG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlJlY2VpcHRzIGZvciBjYXNoIGRvbmF0aW9ucy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Gb3IgZG9uYXRpb25zIG9mIGdvb2RzLCBhbnkgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gc3VwcG9ydGluZyB0aGUgdmFsdWF0aW9uIGFuZCBjb25kaXRpb24gb2YgdGhlIGl0ZW1zIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50cyBvciBjYW5jZWxsZWQgY2hlY2tzIGNhbiBhbHNvIHNlcnZlIGFzIHByb29mIGZvciBjYXNoIGRvbmF0aW9ucywgaWYgcmVjZWlwdHMgYXJlIG5vdCBhdmFpbGFibGUuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gODI4Mzo8L3N0cm9uZz4gSWYgYW55IHNpbmdsZSBkb25hdGlvbiBvZiBnb29kcyBleGNlZWRzICQ1MDAgaW4gdmFsdWUsIHBsZWFzZSBjb21wbGV0ZSBTZWN0aW9uIEEgb2YgRm9ybSA4MjgzLiBJZiB0aGUgdG90YWwgdmFsdWUgb2YgZ29vZHMgZG9uYXRlZCBleGNlZWRzICQ1LDAwMCwgYSBxdWFsaWZpZWQgYXBwcmFpc2FsIGlzIHJlcXVpcmVkIGFuZCBzaG91bGQgYmUgcHJvdmlkZWQgYWxvbmcgd2l0aCBTZWN0aW9uIEIgb2YgRm9ybSA4MjgzIGNvbXBsZXRlZC48L2xpPlxuICAgIDwvb2w+XG5cbiAgICA8cD5Db3JyZWN0IGFuZCBjb21wbGV0ZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIGNoYXJpdGFibGUgY29udHJpYnV0aW9ucyBpcyBjcnVjaWFsIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zIGFuZCB0byBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cy4gUGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UsIGFsbG93aW5nIHVzIHRvIHByb2Nlc3MgeW91ciB0YXggZm9ybXMgYWNjdXJhdGVseSBhbmQgcHJvbXB0bHkuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEb25hdGVkIFByb3BlcnR5XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRG9uYXRlZCBQcm9wZXJ0eVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5mb3JtaW5nIHVzIGFib3V0IHlvdXIgZG9uYXRlZCBwcm9wZXJ0eSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRvY3VtZW50IGFuZCBjbGFpbSB0aGVzZSBkb25hdGlvbnMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSBkb25hdGVkIHByb3BlcnR5IChlLmcuLCBmdXJuaXR1cmUsIGNsb3RoaW5nLCBlbGVjdHJvbmljcykuPC9saT5cbiAgICAgICAgPGxpPk5hbWVzIGFuZCBhZGRyZXNzZXMgb2YgdGhlIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggeW91IGRvbmF0ZWQuPC9saT5cbiAgICAgICAgPGxpPlRoZSBkYXRlIG9mIGVhY2ggZG9uYXRpb24uPC9saT5cbiAgICAgICAgPGxpPlRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYXQgdGhlIHRpbWUgb2YgdGhlIGRvbmF0aW9uLiBJZiBwb3NzaWJsZSwgaW5jbHVkZSBob3cgeW91IGRldGVybWluZWQgdGhpcyB2YWx1ZS48L2xpPlxuICAgICAgICA8bGk+QW55IGFja25vd2xlZGdtZW50IG9yIHJlY2VpcHQgcmVjZWl2ZWQgZnJvbSB0aGUgb3JnYW5pemF0aW9uLiBQbGVhc2UgZW5zdXJlIGl0IGluY2x1ZGVzIHRoZSBvcmdhbml6YXRpb27igJlzIG5hbWUsIGRvbmF0aW9uIGRhdGUsIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBkb25hdGVkIGl0ZW1zLjwvbGk+XG4gICAgICAgIDxsaT5JZiBhbnkgc2luZ2xlIGRvbmF0aW9uIGV4Y2VlZGVkICQ1MDAgaW4gdmFsdWUsIHBsZWFzZSBwcm92aWRlIGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIHRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBhbmQgaG93IHRoZSB2YWx1ZSB3YXMgZGV0ZXJtaW5lZC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBzbyB3ZSBjYW4gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBhY2N1cmF0ZWx5IHJlZmxlY3RzIHlvdXIgZ2VuZXJvdXMgY29udHJpYnV0aW9ucy4gSWYgeW91IGhhdmUgbXVsdGlwbGUgZG9uYXRpb25zLCBvcmdhbml6aW5nIHRoaXMgaW5mb3JtYXRpb24gY2hyb25vbG9naWNhbGx5IGNhbiBiZSB2ZXJ5IGhlbHBmdWwuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2UgYXJlIGhlcmUgdG8gaGVscCE8L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRvbmF0ZWQgVmVoaWNsZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkRvbmF0ZWQgVmVoaWNsZVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBlZmZvcnRzIGluIHN1cHBvcnRpbmcgY2hhcml0YWJsZSBjYXVzZXMgdGhyb3VnaCB5b3VyIGdlbmVyb3VzIHZlaGljbGUgZG9uYXRpb24uIFRvIGFjY3VyYXRlbHkgZG9jdW1lbnQgdGhpcyBkb25hdGlvbiBmb3IgeW91ciB0YXggcmVjb3JkcyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBkZWR1Y3Rpb24sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XG4gICAgPG9sPlxuICAgIDxsaT48c3Ryb25nPkNoYXJpdHkgSW5mb3JtYXRpb246PC9zdHJvbmc+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaT5OYW1lIG9mIHRoZSBjaGFyaXR5PC9saT5cbiAgICAgICAgICAgIDxsaT5DaGFyaXR5J3MgdGF4LWV4ZW1wdCBJRCBudW1iZXI8L2xpPlxuICAgICAgICAgICAgPGxpPkFkZHJlc3MgYW5kIHBob25lIG51bWJlciBvZiB0aGUgY2hhcml0eTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9saT5cbiAgICA8bGk+PHN0cm9uZz5WZWhpY2xlIEluZm9ybWF0aW9uOjwvc3Ryb25nPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgICA8bGk+TWFrZSwgbW9kZWwsIGFuZCB5ZWFyIG9mIHRoZSBkb25hdGVkIHZlaGljbGU8L2xpPlxuICAgICAgICAgICAgPGxpPlZJTiAoVmVoaWNsZSBJZGVudGlmaWNhdGlvbiBOdW1iZXIpPC9saT5cbiAgICAgICAgICAgIDxsaT5BIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSB2ZWhpY2xlJ3MgY29uZGl0aW9uIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2xpPlxuICAgIDxsaT48c3Ryb25nPkRvbmF0aW9uIERvY3VtZW50YXRpb246PC9zdHJvbmc+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaT5BIGNvcHkgb2YgdGhlIGRvbmF0aW9uIHJlY2VpcHQgcHJvdmlkZWQgYnkgdGhlIGNoYXJpdHk8L2xpPlxuICAgICAgICAgICAgPGxpPkZvcm0gMTA5OC1DIChDb250cmlidXRpb25zIG9mIE1vdG9yIFZlaGljbGVzLCBCb2F0cywgYW5kIEFpcnBsYW5lcykgaWYgcmVjZWl2ZWQ8L2xpPlxuICAgICAgICAgICAgPGxpPkFueSB3cml0dGVuIGFja25vd2xlZGdtZW50cyBvciBjb21tdW5pY2F0aW9ucyBmcm9tIHRoZSBjaGFyaXR5PC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSB5b3Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIHNtb290aCBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybnMuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgbmVlZCBhbnkgYXNzaXN0YW5jZSBvciBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgeW91ciBkb25hdGlvbiByZWNvcmRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk90aGVyIEl0ZW1pemVkIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiT3RoZXIgSXRlbWl6ZWQgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5UaGFuayB5b3UgZm9yIGluZGljYXRpbmcgdGhhdCB0aGVyZSBtaWdodCBiZSBhZGRpdGlvbmFsIGluZGl2aWR1YWwsIG5vbi1idXNpbmVzcyBleHBlbnNlcyB5b3UndmUgaW5jdXJyZWQgdGhpcyB0YXggeWVhciwgd2hpY2ggbWF5IHF1YWxpZnkgZm9yIGl0ZW1pemVkIGRlZHVjdGlvbnMuIFRvIGVuc3VyZSB3ZSBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMgYW5kIGFjY3VyYXRlbHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgdGhlc2UgZXhwZW5zZXMuPC9wPlxuICAgIDxwPlBsZWFzZSBmaW5kIGJlbG93IGEgZ3VpZGVsaW5lIG9mIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgd2UgYXJlIGxvb2tpbmcgZm9yOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIHRoZSBFeHBlbnNlOiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggZXhwZW5zZSwgaW5jbHVkaW5nIHRoZSBwdXJwb3NlIGFuZCB3aHkgeW91IGJlbGlldmUgaXQgcXVhbGlmaWVzIGZvciBhbiBpdGVtaXplZCBkZWR1Y3Rpb24uPC9saT5cbiAgICAgICAgPGxpPkFtb3VudCBQYWlkOiBUaGUgdG90YWwgYW1vdW50IHBhaWQgZm9yIGVhY2ggZXhwZW5zZS48L2xpPlxuICAgICAgICA8bGk+RGF0ZXM6IFRoZSBkYXRlKHMpIG9uIHdoaWNoIHRoZSBleHBlbnNlIHdhcyBwYWlkLjwvbGk+XG4gICAgICAgIDxsaT5Qcm9vZiBvZiBQYXltZW50OiBSZWNlaXB0cywgYmFuayBzdGF0ZW1lbnRzLCBvciBjcmVkaXQgY2FyZCBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHBheW1lbnQgb2YgdGhlc2UgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPkxlZ2FsIG9yIEZpbmFuY2lhbCBBZHZpc29yIFN0YXRlbWVudHM6IElmIGFwcGxpY2FibGUsIHN0YXRlbWVudHMgb3IgbGV0dGVycyBmcm9tIGxlZ2FsIG9yIGZpbmFuY2lhbCBhZHZpc29ycyBzdXBwb3J0aW5nIHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZSBleHBlbnNlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5FeGFtcGxlcyBvZiBzdWNoIGV4cGVuc2VzIG1pZ2h0IGluY2x1ZGUgYnV0IGFyZSBub3QgbGltaXRlZCB0bzpcbiAgICA8dWw+XG4gICAgICAgIDxsaT5NZWRpY2FsIGV4cGVuc2VzIG5vdCBjb3ZlcmVkIGJ5IGhlYWx0aCBpbnN1cmFuY2U8L2xpPlxuICAgICAgICA8bGk+SW52ZXN0bWVudCBhbmQgZmluYW5jaWFsIGFkdmlzb3IgZmVlczwvbGk+XG4gICAgICAgIDxsaT5UYXggcHJlcGFyYXRpb24gZmVlczwvbGk+XG4gICAgICAgIDxsaT5TYWZlIGRlcG9zaXQgYm94IHJlbnRhbHM8L2xpPlxuICAgIDwvdWw+PC9wPlxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSByZWNlaXZlIHRoaXMgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGhlIHRpbWVseSBhbmQgZWZmaWNpZW50IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHF1YWxpZmllcyBhcyBhbiBvdGhlciBpdGVtaXplZCBleHBlbnNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDaGlsZCBEZXBlbmRlbnQgQ2FyZSBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDaGlsZCBEZXBlbmRlbnQgQ2FyZSBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGNvbmZpcm1pbmcgdGhhdCB5b3UgcGFpZCBmb3IgZGVwZW5kZW50IGNhcmUgc2VydmljZXMgbGFzdCB5ZWFyIHRvIGVuYWJsZSB5b3UgdG8gd29yayBvciBzZWFyY2ggZm9yIGVtcGxveW1lbnQuIFRvIGFjY3VyYXRlbHkgY2xhaW0gdGhlIDxzdHJvbmc+Q2hpbGQgYW5kIERlcGVuZGVudCBDYXJlIENyZWRpdDwvc3Ryb25nPiBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+VGhlIGZ1bGwgbmFtZShzKSBhbmQgc29jaWFsIHNlY3VyaXR5IG51bWJlcihzKSAoU1NOKSBvZiB0aGUgZGVwZW5kZW50KHMpIGNhcmVkIGZvci48L2xpPlxuICAgICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBwYWlkIGZvciBlYWNoIGRlcGVuZGVudOKAmXMgY2FyZSBzZXJ2aWNlcy48L2xpPlxuICAgICAgICA8bGk+TmFtZSwgYWRkcmVzcywgYW5kIFRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoRUlOIG9yIFNTTikgb2YgdGhlIGNhcmUgcHJvdmlkZXIocykuPC9saT5cbiAgICAgICAgPGxpPlByb29mIG9mIHBheW1lbnQocykgbWFkZSB0byB0aGUgY2FyZWdpdmVyKHMpLCBzdWNoIGFzIHJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cy48L2xpPlxuICAgICAgICA8bGk+SWYgdGhlIGRlcGVuZGVudCBpcyBhIGRpc2FibGVkIGFkdWx0LCBwbGVhc2UgcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZWlyIGNvbmRpdGlvbiB0byBjb25maXJtIGVsaWdpYmlsaXR5LjwvbGk+XG4gICAgICAgIDxsaT5BbnkgYXBwbGljYWJsZSBkYXRlcyBkdXJpbmcgd2hpY2ggdGhlIGNhcmUgd2FzIHByb3ZpZGVkLCBlc3BlY2lhbGx5IGlmIHRoZSBjYXJlIHdhcyBub3QgZm9yIHRoZSBmdWxsIHllYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCB0byBlbnN1cmUgd2UgY2FuIG1heGltaXplIHlvdXIgZWxpZ2libGUgY3JlZGl0IGFuZCBjb21wbHkgd2l0aCB0aGUgSVJTIHJlcXVpcmVtZW50cy4gU2hvdWxkIHlvdSBoYXZlIGNvbmNlcm5zIGFib3V0IGdhdGhlcmluZyBhbnkgb2YgdGhlIHJlcXVlc3RlZCBkb2N1bWVudGF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0IGZvciBhc3Npc3RhbmNlLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFdlIGFyZSBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzIHRvIGFjaGlldmUgdGhlIGJlc3QgcG9zc2libGUgb3V0Y29tZSBvbiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNoaWxkIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDaGlsZCBUYXggQ3JlZGl0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGV4YW1pbmluZyB5b3VyIGVsaWdpYmlsaXR5IGZvciB0aGUgPHN0cm9uZz5DaGlsZCBUYXggQ3JlZGl0PC9zdHJvbmc+LCBiYXNlZCBvbiB5b3VyIGFmZmlybWF0aXZlIHJlc3BvbnNlIHJlZ2FyZGluZyBkZXBlbmRlbnRzIHVuZGVyIHRoZSBhZ2Ugb2YgMTcuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgbWF4aW1pemVkIHRheCBiZW5lZml0cywga2luZGx5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5GdWxsIG5hbWUocykgb2YgdGhlIGNoaWxkIG9yIGNoaWxkcmVuLjwvbGk+XG4gICAgICAgIDxsaT5EYXRlKHMpIG9mIGJpcnRoIGZvciBlYWNoIGNoaWxkLjwvbGk+XG4gICAgICAgIDxsaT5Tb2NpYWwgU2VjdXJpdHkgTnVtYmVyKHMpIGZvciBlYWNoIGNoaWxkLjwvbGk+XG4gICAgICAgIDxsaT5BIHN0YXRlbWVudCBjb25maXJtaW5nIHRoZSBjaGlsZCBvciBjaGlsZHJlbiBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGxhc3QgeWVhci4gSWYgYXBwbGljYWJsZSwgcGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvZiBjdXN0b2R5IGFycmFuZ2VtZW50cy48L2xpPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBvdmVydmlldyBvZiBob3cgeW91IHByb3ZpZGVkIG1vcmUgdGhhbiBoYWxmIG9mIHRoZWlyIGZpbmFuY2lhbCBzdXBwb3J0IGxhc3QgeWVhci4gVGhpcyBjYW4gaW5jbHVkZSByZWNvcmRzIG9mIGhvdXNpbmcsIGZvb2QsIGVkdWNhdGlvbiwgbWVkaWNhbCBjYXJlLCBhbmQgb3RoZXIgcmVsZXZhbnQgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPkNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuLCBpZiBub3QgYWxyZWFkeSBwcm92aWRlZCwgdG8gYXNzaXN0IGluIGV2YWx1YXRpbmcgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbCBwaGFzZS1vdXRzIGJhc2VkIG9uIGluY29tZS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZS4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBhaWQgaW4gdGhlIHN3aWZ0IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmUgdGhhdCB5b3UgcmVjZWl2ZSBhbGwgZWxpZ2libGUgdGF4IGJlbmVmaXRzLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSBhcmUgaGVyZSB0byBoZWxwITwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgbWF5IHF1YWxpZnkgZm9yIHRoZSA8c3Ryb25nPkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdDwvc3Ryb25nPiBiYXNlZCBvbiB5b3VyIHByZWxpbWluYXJ5IGluZm9ybWF0aW9uLiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFF1YWxpZnlpbmcgQ2hpbGRyZW46PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIHRoZSBTb2NpYWwgU2VjdXJpdHkgY2FyZHMgYW5kIGJpcnRoIGNlcnRpZmljYXRlcyBmb3IgZWFjaCBvZiB5b3VyIHF1YWxpZnlpbmcgY2hpbGRyZW4gdW5kZXIgdGhlIGFnZSBvZiAxNy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEZ1cm5pc2ggYWxsIFctMiBmb3JtcywgMTA5OSBmb3JtcywgYW5kIGFueSBvdGhlciBwcm9vZiBvZiBpbmNvbWUgdG8gY29uZmlybSB5b3UgaGF2ZSBlYXJuZWQgYXQgbGVhc3QgJDIsNTAwLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFy4oCZcyBUYXggUmV0dXJuOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuIHRvIHZlcmlmeSB0aGUgQ2hpbGQgVGF4IENyZWRpdCBhbW91bnQgeW91IHJlY2VpdmVkIG9yIHdlcmUgZWxpZ2libGUgdG8gcmVjZWl2ZS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SVJTIExldHRlciA2NDE5Ojwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIHRoZSBJUlMgTGV0dGVyIDY0MTkgZm9yIHRoZSB0YXggeWVhciByZWdhcmRpbmcgdGhlIGFkdmFuY2UgQ2hpbGQgVGF4IENyZWRpdCBwYXltZW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VG8gZmFjaWxpdGF0ZSBhIHNtb290aCBwcm9jZXNzLCB3ZSBraW5kbHkgYXNrIHlvdSB0byBzZW5kIHRoZSBhYm92ZSBhcyBzb29uIGFzIHBvc3NpYmxlLCBlbnN1cmluZyBhbGwgc3VibWlzc2lvbnMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgYXJlIGNvbW1pdHRlZCB0byBzZXJ2aW5nIHlvdXIgdGF4IHByZXBhcmF0aW9uIG5lZWRzIGVmZmljaWVudGx5IGFuZCBzZWN1cmluZyB0aGUgYmVzdCBwb3NzaWJsZSBvdXRjb21lIGZvciB5b3UgYW5kIHlvdXIgZmFtaWx5LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDcmVkaXQgZm9yIE90aGVyIERlcGVuZGVudHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDcmVkaXQgZm9yIE90aGVyIERlcGVuZGVudHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RpY2VkIHlvdSBpbmRpY2F0ZWQgaGF2aW5nIGRlcGVuZGVudHMgdGhhdCBtYXkgcXVhbGlmeSBmb3IgdGhlIDxzdHJvbmc+Q3JlZGl0IGZvciBPdGhlciBEZXBlbmRlbnRzPC9zdHJvbmc+LiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgZGVwZW5kZW50cy48L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPkZ1bGwgbmFtZSBvZiBlYWNoIGRlcGVuZGVudC48L2xpPlxuICAgICAgPGxpPlRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UgKGUuZy4sIHBhcmVudCwgc2libGluZywgYWR1bHQgY2hpbGQsIG9yIG90aGVyKS48L2xpPlxuICAgICAgPGxpPlRoZWlyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb3IgSW5kaXZpZHVhbCBUYXhwYXllciBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKElUSU4pLjwvbGk+XG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhleSBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHRheCB5ZWFyLiBQbGVhc2UgcHJvdmlkZSBhbnkgcmVsZXZhbnQgZGV0YWlscyBvciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgdGhpcyBjbGFpbSAoaWYgYXZhaWxhYmxlKS48L2xpPlxuICAgICAgPGxpPkRldGFpbGVkIGxpc3Qgb2YgdGhlIGZpbmFuY2lhbCBzdXBwb3J0IHlvdSBwcm92aWRlZC4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBmb29kLCBzaGVsdGVyLCBjbG90aGluZywgbWVkaWNhbCBjYXJlLCBlZHVjYXRpb24sIGFuZCB0cmFuc3BvcnRhdGlvbiBjb3N0cy48L2xpPlxuICAgICAgPGxpPkFueSBpbmNvbWUgaW5mb3JtYXRpb24gZm9yIGVhY2ggZGVwZW5kZW50LiBUaGlzIGluY2x1ZGVzIGluY29tZSBzdGF0ZW1lbnRzIG9yIGFuIGFmZmlybWF0aW9uIHRoYXQgdGhleSBoYWQgbm8gaW5jb21lLjwvbGk+XG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhleSBhcmUgYSBVLlMuIGNpdGl6ZW4sIFUuUy4gbmF0aW9uYWwsIG9yIGEgcmVzaWRlbnQgYWxpZW4gb2YgdGhlIFVuaXRlZCBTdGF0ZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBzZW5kIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgd2UgY2FuIHByb2NlZWQgd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbiB3aXRob3V0IGRlbGF5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPiBcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UncmUgaGVyZSB0byBoZWxwIG1ha2UgeW91ciB0YXggZmlsaW5nIHByb2Nlc3MgYXMgc21vb3RoIGFuZCBlZmZpY2llbnQgYXMgcG9zc2libGUuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkb3B0aW9uIENyZWRpdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFkb3B0aW9uIENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIGhhdmluZyBleHBlbnNlcyByZWxhdGVkIHRvIGFkb3B0aW5nIGEgY2hpbGQgbGFzdCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGNsYWltIHRoZSBBZG9wdGlvbiBDcmVkaXQgb24geW91ciB0YXggcmV0dXJucywgd2UgcmVxdWlyZSBzcGVjaWZpYyBkb2N1bWVudGF0aW9uLjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+RmluYWxpemVkIEFkb3B0aW9uIERlY3JlZSBvciBDZXJ0aWZpY2F0ZS48L2xpPlxuICAgICAgPGxpPkRldGFpbGVkIExlZ2FsIEZlZXMgSW52b2ljZSAoaW5jbHVkaW5nIHRoZSBhdHRvcm5leeKAmXMgbmFtZSwgYWRkcmVzcywgYW5kIHRoZSBkYXRlIG9mIHNlcnZpY2UpLjwvbGk+XG4gICAgICA8bGk+Q291cnQgQ29zdHMgUmVjZWlwdHMuPC9saT5cbiAgICAgIDxsaT5UcmF2ZWwgRXhwZW5zZXMgUmVjZWlwdHMgKGFpcmZhcmUsIGhvdGVsLCBtZWFscykgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYWRvcHRpb24gcHJvY2Vzcy48L2xpPlxuICAgICAgPGxpPkFueSByZWxldmFudCBkb2N1bWVudHMgZm9yIGEgY2hpbGQgd2l0aCBzcGVjaWFsIG5lZWRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgICA8bGk+Rm9yZWlnbiBhZG9wdGlvbjogUHJvdmlkZSB0aGUgY291bnRyeSdzIGxlZ2FsIGRvY3VtZW50YXRpb24gcHJvdmluZyB0aGUgYWRvcHRpb24gd2FzIGZpbmFsaXplZC48L2xpPlxuICAgICAgPGxpPklSUyBGb3JtIDg4MzksIFF1YWxpZmllZCBBZG9wdGlvbiBFeHBlbnNlcyAoaWYgeW91IGhhdmUgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gY29tcGxldGUgdGhpcykuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBhcmUgY2xlYXIgYW5kIGxlZ2libGUuIEluY29tcGxldGUgb3IgdW5jbGVhciBkb2N1bWVudGF0aW9uIG1heSBkZWxheSB0aGUgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIHRoZSBwb3RlbnRpYWwgY3JlZGl0LjwvcD5cbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCB0byBwcm92aWRlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gT3VyIGdvYWwgaXMgdG8gYXNzaXN0IHlvdSBpbiBtYXhpbWl6aW5nIHlvdXIgYmVuZWZpdHMgd2hpbGUgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFtZXJpY2FuIE9wcG9ydHVuaXR5IFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QmFzZWQgb24geW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSByZWdhcmRpbmcgZXhwZW5zZXMgcGFpZCBsYXN0IHllYXIgZm9yIGNvbGxlZ2UsIHdlIG1heSBiZSBhYmxlIHRvIGNsYWltIHRoZSBBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IChBT1RDKSBvbiB5b3VyIGJlaGFsZi4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCByZXR1cm5zIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIEFPVEMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+VHVpdGlvbiBTdGF0ZW1lbnRzPC9zdHJvbmc+IChGb3JtIDEwOTgtVCkgZm9yIGVhY2ggc3R1ZGVudCBmb3Igd2hvbSB0aGUgZXhwZW5zZXMgd2VyZSBwYWlkLiBUaGlzIGZvcm0gaXMgdHlwaWNhbGx5IHByb3ZpZGVkIGJ5IHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbi48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UmVjZWlwdHMgYW5kIFJlY29yZHM8L3N0cm9uZz4gZm9yIHJlbGF0ZWQgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgbm90IGNvdmVyZWQgYnkgdGhlIHR1aXRpb24gc3RhdGVtZW50LiBUaGlzIGluY2x1ZGVzIGJvb2tzLCBzdXBwbGllcywgYW5kIGVxdWlwbWVudCByZXF1aXJlZCBmb3IgZW5yb2xsbWVudCBvciBhdHRlbmRhbmNlLjwvbGk+XG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhlIHN0dWRlbnQgd2FzIGVucm9sbGVkIDxzdHJvbmc+YXQgbGVhc3QgaGFsZi10aW1lPC9zdHJvbmc+IGluIGEgcHJvZ3JhbSBsZWFkaW5nIHRvIGEgZGVncmVlLCBjZXJ0aWZpY2F0ZSwgb3Igb3RoZXIgcmVjb2duaXplZCBlZHVjYXRpb25hbCBjcmVkZW50aWFsLjwvbGk+XG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnQgY29uZmlybWluZyB0aGF0IHRoZSBleHBlbnNlcyB3ZXJlIGZvciB0aGUgPHN0cm9uZz5maXJzdCBmb3VyIHllYXJzPC9zdHJvbmc+IG9mIHBvc3Qtc2Vjb25kYXJ5IGVkdWNhdGlvbi48L2xpPlxuICAgICAgPGxpPkV2aWRlbmNlIHRvIHNob3cgdGhhdCB0aGUgc3R1ZGVudCBoYWQgbm90IGNsYWltZWQgdGhlIEFPVEMgKG9yIHRoZSBmb3JtZXIgSG9wZSBjcmVkaXQpIGZvciBtb3JlIHRoYW4gZm91ciB0YXggeWVhcnMuPC9saT5cbiAgICAgIDxsaT5Qcm9vZiB0aGF0IG5laXRoZXIgdGhlIHN0dWRlbnQgbm9yIHRoZSBjbGFpbWFudCAoaWYgbm90IHRoZSBzdHVkZW50KSBpcyBhIG5vbnJlc2lkZW50IGFsaWVuIGZvciB0YXggcHVycG9zZXMuPC9saT5cbiAgICAgIDxsaT5BIHN0YXRlbWVudCBpbmRpY2F0aW5nIGlmIGFueSBmZWxvbnkgZHJ1ZyBjb252aWN0aW9ucyB3ZXJlIHJlY2VpdmVkIGJ5IHRoZSBzdHVkZW50IGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgaXMgZXNzZW50aWFsIGFzIHN1Y2ggY29udmljdGlvbnMgZGlzcXVhbGlmeSB0aGUgc3R1ZGVudCBmcm9tIGNsYWltaW5nIHRoZSBBT1RDLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBPbmNlIHdlIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24sIHdlIHdpbGwgcHJvY2VlZCB3aXRoIHRoZSBtYXhpbWl6YXRpb24gYW5kIGFwcGxpY2F0aW9uIG9mIHRoZSBBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IHRvIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMaWZldGltZSBMZWFybmluZyBUYXggQ3JlZGl0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiTGlmZXRpbWUgTGVhcm5pbmcgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSwgeW91ciBzcG91c2UsIG9yIHlvdXIgZGVwZW5kZW50cyBoYXZlIHBhaWQgZm9yIGhpZ2hlciBlZHVjYXRpb24gbGFzdCB5ZWFyLiBUaGlzIG1ha2VzIHlvdSBwb3RlbnRpYWxseSBlbGlnaWJsZSBmb3IgdGhlIExpZmV0aW1lIExlYXJuaW5nIFRheCBDcmVkaXQsIHdoaWNoIGNhbiBwcm92aWRlIHNpZ25pZmljYW50IHRheCBzYXZpbmdzLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB5b3VyIGVsaWdpYmlsaXR5IGFuZCBjYWxjdWxhdGUgdGhlIGNyZWRpdCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkZvcm0gMTA5OC1UIGZyb20gZWFjaCBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiBhdHRlbmRlZCBieSB5b3UsIHlvdXIgc3BvdXNlLCBvciBkZXBlbmRlbnRzLiBUaGlzIGZvcm0gc2hvd3MgdGhlIGFtb3VudHMgcGFpZCBmb3IgdHVpdGlvbiBhbmQgcmVsYXRlZCBleHBlbnNlcy48L2xpPlxuICAgICAgICA8bGk+UmVjZWlwdHMgb3IgYmFuayBzdGF0ZW1lbnRzIHNob3dpbmcgcGF5bWVudHMgbWFkZSBmb3IgdHVpdGlvbiwgZmVlcywgYm9va3MsIHN1cHBsaWVzLCBhbmQgZXF1aXBtZW50IHJlcXVpcmVkIGZvciB5b3VyIGNvdXJzZXMuIFBsZWFzZSBub3RlIHRoYXQgcm9vbSBhbmQgYm9hcmQsIGluc3VyYW5jZSwgbWVkaWNhbCBleHBlbnNlcywgYW5kIHRyYW5zcG9ydGF0aW9uIGFyZSBub3QgcXVhbGlmaWVkIGV4cGVuc2VzLjwvbGk+XG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYW55IHNjaG9sYXJzaGlwcywgZ3JhbnRzLCBvciBvdGhlciB0YXgtZnJlZSBlZHVjYXRpb25hbCBhc3Npc3RhbmNlIHJlY2VpdmVkLiBUaGlzIGhlbHBzIHVzIGRldGVybWluZSB0aGUgbmV0IGFtb3VudCBvZiBxdWFsaWZpZWQgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGFueSByZWNvcmRzIG9mIGZlbG9uaWVzIChhcyBpbmRpdmlkdWFscyB3aXRoIGZlbG9ueSBkcnVnIGNvbnZpY3Rpb25zIGFyZSBub3QgZWxpZ2libGUgZm9yIHRoaXMgY3JlZGl0KS48L2xpPlxuICAgICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBvZiBleHBlbnNlcyBwYWlkIHdpdGggZGlzdHJpYnV0ZWQgZWFybmluZ3MgZnJvbSBhIDUyOSBwbGFuLCBpZiBhbnkuIFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBhcyBpdCBtYXkgYWZmZWN0IHRoZSBjcmVkaXQgY2FsY3VsYXRpb24uPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGZvciB0aGUgdGF4IHllYXIgd2UgYXJlIHByZXBhcmluZyB5b3VyIHJldHVybiBmb3IuIEdhdGhlcmluZyBhbmQgdmVyaWZ5aW5nIHRoZXNlIGRvY3VtZW50cyBlYXJseSBpbiB0aGUgcHJvY2VzcyB3aWxsIHN0cmVhbWxpbmUgeW91ciB0YXggcHJlcGFyYXRpb24gYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgbWF4aW11bSBiZW5lZml0IGxlZ2FsbHkgYXZhaWxhYmxlIHRvIHlvdS48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb21wdCByZXNwb25zZSB3aWxsIGdyZWF0bHkgYWlkIGluIHRoZSBlZmZpY2llbnQgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkJhc2VkIG9uIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSBlYXJuZWQgbW9uZXkgZnJvbSB3b3JrIGFuZCBoYXZlIGEgcmVsYXRpdmVseSBsb3cgdG8gbW9kZXJhdGUgaW5jb21lIGxhc3QgeWVhciwgeW91IG1heSBiZSBlbGlnaWJsZSBmb3IgdGhlIEVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdCAoRUlUQykuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgRUlUQyBjbGFpbSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEVhcm5lZCBJbmNvbWU6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFsbCBXLTIgZm9ybXMgaWYgeW91IHdlcmUgZW1wbG95ZWQgYnkgc29tZW9uZSBlbHNlLCBvciBhIHN1bW1hcnkgb2YgaW5jb21lIGFuZCBleHBlbnNlcyBpZiB5b3Ugd2VyZSBzZWxmLWVtcGxveWVkIG9yIHJhbiBhIGJ1c2luZXNzIG9yIGZhcm0uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+U29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKTo8L3N0cm9uZz4gQ29waWVzIG9mIFNvY2lhbCBTZWN1cml0eSBjYXJkcyBmb3IgeW91LCB5b3VyIHNwb3VzZSAoaWYgZmlsaW5nIGpvaW50bHkpLCBhbmQgYW55IGRlcGVuZGVudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUmVzaWRlbmN5Ojwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHRoYXQgeW91ciBjaGlsZChyZW4pIGxpdmVkIHdpdGggeW91IGluIHRoZSBVbml0ZWQgU3RhdGVzIGZvciBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgdGF4IHllYXIsIGlmIGFwcGxpY2FibGUuIFRoaXMgY2FuIGluY2x1ZGUgc2Nob29sIHJlY29yZHMsIG1lZGljYWwgcmVjb3Jkcywgb3IgYSBzaWduZWQgbGV0dGVyIGZyb20gYSBsYW5kbG9yZCBvciBhbm90aGVyIHRoaXJkIHBhcnR5LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgSW5jb21lIFN0YXRlbWVudDo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcGxlYXNlIHByb3ZpZGUgYSBzdGF0ZW1lbnQgb2YgYW55IGludmVzdG1lbnQgaW5jb21lIHlvdSByZWNlaXZlZCwgYXMgdGhpcyBjYW4gYWZmZWN0IEVJVEMgZWxpZ2liaWxpdHkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmlsaW5nIFN0YXR1cyBWZXJpZmljYXRpb246PC9zdHJvbmc+IENvbmZpcm0geW91ciBmaWxpbmcgc3RhdHVzIHRvIGVuc3VyZSBwcm9wZXIgRUlUQyBjYWxjdWxhdGlvbi4gVGhpcyBjb3VsZCBiZSBTaW5nbGUsIE1hcnJpZWQgRmlsaW5nIEpvaW50bHksIEhlYWQgb2YgSG91c2Vob2xkLCBldGMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgWWVhciBUYXggUmV0dXJuOjwvc3Ryb25nPiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgeWVhciB5b3UgYXJlIGNsYWltaW5nIEVJVEMgb3IgaWYgeW91IHdlcmUgZWxpZ2libGUgZm9yIEVJVEMgaW4gdGhlIHByZXZpb3VzIHRheCB5ZWFyLCBwbGVhc2UgcHJvdmlkZSBhIGNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXJseSBsZWdpYmxlIGFuZCBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCBFSVRDIGNsYWltLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJldGlyZW1lbnQgU2F2aW5ncyBDb250cmlidXRpb24gQ3JlZGl0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmV0aXJlbWVudCBTYXZpbmdzIENvbnRyaWJ1dGlvbiBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RpY2VkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBjb250cmlidXRpbmcgdG8gYSByZXRpcmVtZW50IHBsYW4gaW4gdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgXCJSZXRpcmVtZW50IFNhdmluZ3MgQ29udHJpYnV0aW9uIENyZWRpdCxcIiB3ZSByZXF1aXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGNvbnRyaWJ1dGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgdGhlIHJldGlyZW1lbnQgcGxhbnMgeW91J3ZlIGNvbnRyaWJ1dGVkIHRvIChlLmcuLCBJUkEsIDQwMShrKSwgZXRjLik6PC9saT5cbiAgICAgIDx1bD5cbiAgICAgICAgPGxpPk5hbWUgb2YgdGhlIHBsYW4ocyk8L2xpPlxuICAgICAgICA8bGk+VHlwZSBvZiBwbGFuKHMpPC9saT5cbiAgICAgICAgPGxpPkNvbnRyaWJ1dGVkIGFtb3VudCB0byBlYWNoIHBsYW48L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxsaT5Zb3VyIGZpbGluZyBzdGF0dXMgKFNpbmdsZSwgTWFycmllZCBGaWxpbmcgSm9pbnRseSwgZXRjLik8L2xpPlxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgKGUuZy4sIGFjY291bnQgc3RhdGVtZW50cywgRm9ybSA1NDk4LCB0cmFuc2FjdGlvbiBzdW1tYXJpZXMpPC9saT5cbiAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBhZ2UsIHRvIGRldGVybWluZSBlbGlnaWJpbGl0eTwvbGk+XG4gICAgICA8bGk+QW55IG5vdGljZXMgb3Igc3RhdGVtZW50cyBmcm9tIHRoZSBwbGFuIGFkbWluaXN0cmF0b3IgcmVnYXJkaW5nIG5vbi1kZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbnM8L2xpPlxuICAgICAgPGxpPkZvciBtYXJyaWVkIGZpbGluZyBqb2ludGx5LCBzaW1pbGFyIGRldGFpbHMgZm9yIHlvdXIgc3BvdXNl4oCZcyBjb250cmlidXRpb25zLCBpZiBhcHBsaWNhYmxlPC9saT5cbiAgICA8L29sPiAgXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGUgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIGluIGEgdGltZWx5IG1hbm5lciB0byBmYWNpbGl0YXRlIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPiBcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRXhjZXNzIFNvY2lhbCBTZWN1cml0eSBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJFeGNlc3MgU29jaWFsIFNlY3VyaXR5IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdXIgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgbGFzdCB5ZWFyLCB5b3Ugd29ya2VkIGZvciB0d28gb3IgbW9yZSBlbXBsb3llcnMgYW5kIGhhZCBhIHRvdGFsIGFtb3VudCBvZiBTb2NpYWwgU2VjdXJpdHkgdGF4ZXMgd2l0aGhlbGQgZnJvbSB5b3VyIHBheWNoZWNrcyB0aGF0IGV4Y2VlZGVkIHRoZSBsaW1pdCBmb3IgdGhlIHllYXIuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgcG90ZW50aWFsIEV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgQ3JlZGl0IGFuZCBlbnN1cmUgcHJvcGVyIGFkanVzdG1lbnQgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5XLTIgRm9ybXMgZnJvbSBBbGwgRW1wbG95ZXJzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBjb3BpZXMgb2YgVy0yIGZvcm1zIGZyb20gYWxsIHlvdXIgZW1wbG95ZXJzIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uIFRoaXMgaXMgdml0YWwgdG8gY2FsY3VsYXRlIHRoZSBleGFjdCBhbW91bnQgb2YgU29jaWFsIFNlY3VyaXR5IHRheCB3aXRoaGVsZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBQYXkgU3R1YnM6PC9zdHJvbmc+IElmIHBvc3NpYmxlLCBpbmNsdWRlIHlvdXIgZmluYWwgcGF5IHN0dWJzIG9mIHRoZSB5ZWFyIGZyb20gZWFjaCBlbXBsb3llci4gVGhpcyBjYW4gaGVscCB2ZXJpZnkgdGhlIHRvdGFsIGVhcm5pbmdzIGFuZCB0aGUgYW1vdW50IG9mIFNvY2lhbCBTZWN1cml0eSB0YXggd2l0aGhlbGQsIGVzcGVjaWFsbHkgaWYgYW55IGRpc2NyZXBhbmNpZXMgYXJpc2Ugd2l0aCB0aGUgVy0yIGluZm9ybWF0aW9uLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBFbnN1cmUgeW91ciBmdWxsIG5hbWUsIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTiksIGFuZCBjdXJyZW50IGFkZHJlc3MgYXJlIGNvcnJlY3QgYW5kIHVwZGF0ZWQgZm9yIGFjY3VyYXRlIGZpbGluZy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db25maXJtYXRpb24gTGV0dGVyIChJZiBBdmFpbGFibGUpOjwvc3Ryb25nPiBJZiB5b3UndmUgcmVjZWl2ZWQgYW55IGNvbmZpcm1hdGlvbiBmcm9tIHRoZSBJUlMgb3IgeW91ciBlbXBsb3llcnMgcmVnYXJkaW5nIGV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgY29udHJpYnV0aW9ucywgcGxlYXNlIGluY2x1ZGUgdGhlc2UgY29tbXVuaWNhdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjb21wbGV0aW5nIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSBhbnkgcmVmdW5kIG9mIGV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgdGF4ZXMgcGFpZC4gUGxlYXNlIHNlbmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0IHRvIHVzLiBZb3VyIHByb21wdCBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIHRvIGZhY2lsaXRhdGUgYSBzbW9vdGggdGF4IGZpbGluZyBwcm9jZXNzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcmVtaXVtIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQcmVtaXVtIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSBvciBhIGZhbWlseSBtZW1iZXIgZW5yb2xsZWQgaW4gYSBoZWFsdGggaW5zdXJhbmNlIHBsYW4gdGhyb3VnaCB0aGUgTWFya2V0cGxhY2UgbGFzdCB5ZWFyLiBUaGlzIG1heSBtYWtlIHlvdSBlbGlnaWJsZSBmb3IgdGhlIFByZW1pdW0gVGF4IENyZWRpdCwgd2hpY2ggY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgc2F2aW5ncyBvbiB5b3VyIHRheCBiaWxsLjwvcD5cbiAgICA8cD5UbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIFByZW1pdW0gVGF4IENyZWRpdCBhbmQgZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb3JyZWN0bHkgZmlsZWQsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5NS1BLCBIZWFsdGggSW5zdXJhbmNlIE1hcmtldHBsYWNlIFN0YXRlbWVudDwvc3Ryb25nPjogVGhpcyBmb3JtIGlzIGNydWNpYWwgYXMgaXQgcHJvdmlkZXMgZGV0YWlscyBvZiB0aGUgaGVhbHRoIGNvdmVyYWdlLCBpbmNsdWRpbmcgdGhlIG1vbnRocyBvZiBjb3ZlcmFnZSBhbmQgdGhlIGFtb3VudCBvZiBwcmVtaXVtIHBhaWQuIElmIHlvdSBvciBhbnkgZmFtaWx5IG1lbWJlciB3YXMgZW5yb2xsZWQgaW4gZGlmZmVyZW50IHBsYW5zLCBwbGVhc2UgcHJvdmlkZSBhIEZvcm0gMTA5NS1BIGZvciBlYWNoIHBsYW4uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIEluZm9ybWF0aW9uPC9zdHJvbmc+OiBQbGVhc2UgcHJvdmlkZSBhbGwgc291cmNlcyBvZiBpbmNvbWUgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBob3VzZWhvbGQgaW5jb21lLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIFctMiBmb3JtcywgMTA5OSBmb3JtcywgYW5kIGFueSBvdGhlciBkb2N1bWVudGF0aW9uIGRlbW9uc3RyYXRpbmcgaW5jb21lIHJlY2VpdmVkIHRocm91Z2hvdXQgdGhlIHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmFtaWx5IFNpemUgYW5kIEhvdXNlaG9sZCBJbmZvcm1hdGlvbjwvc3Ryb25nPjogQ29uZmlybSB0aGUgbnVtYmVyIG9mIGRlcGVuZGVudHMgYW5kIGFueSBjaGFuZ2VzIGluIHlvdXIgaG91c2Vob2xkIGxhc3QgeWVhciwgYXMgdGhpcyBjb3VsZCBhZmZlY3QgeW91ciBlbGlnaWJpbGl0eSBhbmQgdGhlIGFtb3VudCBvZiB0aGUgY3JlZGl0LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFkdmFuY2VkIFByZW1pdW0gVGF4IENyZWRpdCAoQVBUQykgUmVwYXltZW50IEluZm9ybWF0aW9uPC9zdHJvbmc+LCBpZiBhcHBsaWNhYmxlOiBJZiB5b3UgcmVjZWl2ZWQgYW4gYWR2YW5jZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtIHRheCBjcmVkaXQsIHdlIG5lZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIHBheW1lbnRzIHRvIHJlY29uY2lsZSB0aGUgYW1vdW50IG9uIHlvdXIgcmV0dXJuLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBpcyBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3Qgb3VyIG9mZmljZS48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBzZXJ2aW5nIHlvdSBhbmQgZW5zdXJpbmcgeW91IHJlY2VpdmUgYWxsIHRoZSB0YXggYmVuZWZpdHMgeW91IGFyZSBlbnRpdGxlZCB0by48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTmV0IEludmVzdG1lbnQgSW5jb21lIFRheFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk5ldCBJbnZlc3RtZW50IEluY29tZSBUYXhcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciBvbmdvaW5nIGVmZm9ydHMgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IGZpbGluZ3MsIHdlIGhhdmUgaWRlbnRpZmllZCB0aGF0IHlvdXIgaW5jb21lIHRoaXMgeWVhciBpbmNsdWRlcyBzaWduaWZpY2FudCBhbW91bnRzIGZyb20gaW52ZXN0bWVudHMuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgTmV0IEludmVzdG1lbnQgSW5jb21lIFRheCwgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgZ2F0aGVyIGNvbXByZWhlbnNpdmUgZGV0YWlscyByZWdhcmRpbmcgeW91ciBpbnZlc3RtZW50IGluY29tZS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+SW50ZXJlc3QgSW5jb21lIFN0YXRlbWVudHM6PC9zdHJvbmc+IERvY3VtZW50cyBzdWNoIGFzIDEwOTktSU5UIG9yIHNpbWlsYXIgZm9ybXMgc2hvd2luZyBpbnRlcmVzdCBlYXJuZWQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EaXZpZGVuZCBJbmNvbWUgU3RhdGVtZW50czo8L3N0cm9uZz4gRG9jdW1lbnRzIHN1Y2ggYXMgMTA5OS1ESVYgb3Igc2ltaWxhciBmb3JtcyBkZXRhaWxpbmcgZGl2aWRlbmQgaW5jb21lIHJlY2VpdmVkLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+Q2FwaXRhbCBHYWlucyBSZWNvcmRzOjwvc3Ryb25nPiBTYWxlcyByZWNlaXB0cyBvciBicm9rZXIgc3RhdGVtZW50cyBzaG93aW5nIHByb2NlZWRzIGZyb20gdGhlIHNhbGUgb2YgYXNzZXRzLCBhbG9uZyB3aXRoIHB1cmNoYXNlIGRvY3VtZW50YXRpb24gdG8gY2FsY3VsYXRlIGdhaW5zIG9yIGxvc3Nlcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPlJlbnRhbCBhbmQgUm95YWx0eSBJbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiBpbmNvbWUgYW5kIGFzc29jaWF0ZWQgZXhwZW5zZXMgZnJvbSByZW50YWwgcHJvcGVydGllcyBvciByb3lhbHRpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Ob24tUXVhbGlmaWVkIEFubnVpdGllcyBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBZZWFyLWVuZCBzdGF0ZW1lbnRzIGZvciBhbnkgbm9uLXF1YWxpZmllZCBhbm51aXR5IGNvbnRyYWN0cyBzaG93aW5nIGRpc3RyaWJ1dGlvbnMgcmVjZWl2ZWQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Gb3JtIDg5NjA6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgYW55IHByaW9yIHllYXIgRm9ybSA4OTYwIHlvdSBoYXZlIGZpbGVkIGZvciBOZXQgSW52ZXN0bWVudCBJbmNvbWUgVGF4LCB3aGljaCBjYW4gcHJvdmlkZSBhIGJhc2lzIGZvciBlc3RpbWF0ZXMgYW5kIHBsYW5uaW5nLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5FbnN1cmluZyB3ZSBoYXZlIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gd2lsbCBub3Qgb25seSBzdHJlYW1saW5lIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MgYnV0IGFsc28gaGVscCBpbiBsZXZlcmFnaW5nIHBvdGVudGlhbCB0YXgtc2F2aW5nIG9wcG9ydHVuaXRpZXMgcmVsYXRlZCB0byBpbnZlc3RtZW50IGluY29tZS4gUGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGlmIHlvdSBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIGFueSBvZiB0aGUgYWJvdmUgaW5mb3JtYXRpb24uPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZGRpdGlvbmFsIE1lZGljYXJlIFRheFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFkZGl0aW9uYWwgTWVkaWNhcmUgVGF4XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91ciBpbmNvbWUgbWF5IGV4Y2VlZCB0aGUgSVJTIHRocmVzaG9sZHMgZm9yIHRoZSBBZGRpdGlvbmFsIE1lZGljYXJlIFRheCBmb3IgeW91ciBmaWxpbmcgc3RhdHVzLiBJbiBvcmRlciB0byBhY2N1cmF0ZWx5IGFzc2VzcyBhbmQgcmVwb3J0IHRoaXMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBmaWxpbmcgc3RhdHVzIGZvciB0aGUgdGF4IHllYXIgKE1hcnJpZWQgRmlsaW5nIEpvaW50bHksIE1hcnJpZWQgRmlsaW5nIFNlcGFyYXRlbHksIFNpbmdsZSwgSGVhZCBvZiBIb3VzZWhvbGQsIFF1YWxpZnlpbmcgU3Vydml2aW5nIFNwb3VzZSkuPC9saT5cbiAgICAgIDxsaT5EZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIGFsbCBzb3VyY2VzIG9mIGluY29tZSBmb3IgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvOlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlctMiBGb3JtcyBmcm9tIGFsbCBlbXBsb3llcnMuPC9saT5cbiAgICAgICAgICA8bGk+MTA5OSBGb3JtcyAoaWYgYXBwbGljYWJsZSksIGluY2x1ZGluZzpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgPGxpPjEwOTktTUlTQyBmb3IgaW5kZXBlbmRlbnQgY29udHJhY3RvcnMuPC9saT5cbiAgICAgICAgICAgICAgPGxpPjEwOTktSU5UIGZvciBpbnRlcmVzdCBlYXJuaW5ncy48L2xpPlxuICAgICAgICAgICAgICA8bGk+MTA5OS1ESVYgZm9yIGRpdmlkZW5kcy48L2xpPlxuICAgICAgICAgICAgICA8bGk+QW55IG90aGVyIDEwOTkgZm9ybXMgcmVjZWl2ZWQuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvZiBhbnkgb3RoZXIgaW5jb21lIChlLmcuLCBmb3JlaWduIGluY29tZSwgcmVudGFsIGluY29tZSkuPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+SW5mb3JtYXRpb24gb24gYW55IGRlZHVjdGlvbnMgb3IgZXhjbHVzaW9ucyB0byBpbmNvbWUgdGhhdCB5b3UgaW50ZW5kIHRvIGNsYWltIChlLmcuLCBJUkEgY29udHJpYnV0aW9ucywgc3R1ZGVudCBsb2FuIGludGVyZXN0KS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+V2UgYWxzbyByZW1pbmQgeW91IHRoYXQgaWYgeW91IGFuZC9vciB5b3VyIHNwb3VzZSBhcmUgc2VsZi1lbXBsb3llZCwgYWRkaXRpb25hbCBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMgd2lsbCBiZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIHlvdXIgbmV0IGVhcm5pbmdzIGFuZCBwb3RlbnRpYWwgQWRkaXRpb25hbCBNZWRpY2FyZSBUYXggb2JsaWdhdGlvbnMuPC9wPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMgYW5kIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgYW55IHBvdGVudGlhbCBBZGRpdGlvbmFsIE1lZGljYXJlIFRheCBsaWFiaWxpdGllcy4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOYW5ueSBUYXhcIixcbiAgICBhY3Rpb25UaXRsZTogXCJOYW5ueSBUYXhcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIGVtcGxveWluZyBob3VzZWhvbGQgaGVscCBzdWNoIGFzIGEgbmFubnksIGhvdXNla2VlcGVyLCBvciBnYXJkZW5lci4gVG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgc28tY2FsbGVkIFwiTmFubnkgVGF4XCIgcmVndWxhdGlvbnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkNvbXBsZXRlIG5hbWUsIGFkZHJlc3MsIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9mIHRoZSBlbXBsb3llZS48L2xpPlxuICAgICAgICA8bGk+VG90YWwgYW1vdW50IHBhaWQgdG8gdGhlIGVtcGxveWVlIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPkFueSBhbW91bnRzIHdpdGhoZWxkIGZyb20gdGhlIGVtcGxveWVlJ3MgcGF5IGZvciB0YXhlcywgaW5jbHVkaW5nIEZlZGVyYWwgSW5jb21lIFRheCwgU29jaWFsIFNlY3VyaXR5LCBhbmQgTWVkaWNhcmUgVGF4ZXMuPC9saT5cbiAgICAgICAgPGxpPkNvcGllcyBvZiBhbnkgZW1wbG95bWVudCBjb250cmFjdHMgb3IgYWdyZWVtZW50cy48L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgYW55IGVtcGxveWVyIGNvbnRyaWJ1dGlvbnMgdG8gU29jaWFsIFNlY3VyaXR5LCBNZWRpY2FyZSwgYW5kIHdpdGhoZWxkIGluY29tZSB0YXhlcyAoaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB0aGUgZW1wbG95bWVudCBzdGF0dXMgKGUuZy4sIFNjaGVkdWxlIEggZm9ybSkuPC9saT5cbiAgICAgICAgPGxpPkFueSBvdGhlciByZWxldmFudCB0YXggZG9jdW1lbnRzIG9yIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGVtcGxveW1lbnQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIHBvdGVudGlhbGx5IGF2b2lkaW5nIHBlbmFsdGllcyBmb3Igbm9uLWNvbXBsaWFuY2UuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2Ugb3IgY29udGFjdCB1cyBpZiB5b3UgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLjwvcD5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBoZWxwIHlvdSBuYXZpZ2F0ZSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBFYXJuZWQgSW5jb21lXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBFYXJuZWQgSW5jb21lXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBlYXJuZWQgaW5jb21lIGZyb20gZm9yZWlnbiBzb3VyY2VzIHRoaXMgcGFzdCB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBhbmQgcG90ZW50aWFsbHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIEZvcmVpZ24gRWFybmVkIEluY29tZSBFeGNsdXNpb24gb3IgY3JlZGl0LCB3ZSdsbCBuZWVkIHNwZWNpZmljIGRvY3VtZW50YXRpb24gYW5kIGluZm9ybWF0aW9uIGZyb20geW91LiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGZvcmVpZ24gZWFybmVkIGluY29tZS4gVGhpcyBpbmNsdWRlcyBhbnkgd2FnZXMsIHNhbGFyaWVzLCBvciBvdGhlciBjb21wZW5zYXRpb24gcmVjZWl2ZWQgZnJvbSBzZXJ2aWNlcyBwZXJmb3JtZWQgd2hpbGUgbGl2aW5nIGFicm9hZC48L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgeW91ciBmb3JlaWduIGVhcm5lZCBpbmNvbWUuIFRoaXMgY291bGQgYmUgaW4gdGhlIGZvcm0gb2YgcGF5IHN0dWJzLCBiYW5rIHN0YXRlbWVudHMgcmVmbGVjdGluZyBkaXJlY3QgZGVwb3NpdHMsIG9yIGVxdWl2YWxlbnQgZG9jdW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiB0aGUgY291bnRyeSBvciBjb3VudHJpZXMgaW4gd2hpY2ggeW91IGVhcm5lZCB0aGlzIGluY29tZS48L2xpPlxuICAgICAgICA8bGk+RGF0ZXMgb2YgeW91ciByZXNpZGVuY3kgaW4gZWFjaCBmb3JlaWduIGNvdW50cnkuPC9saT5cbiAgICAgICAgPGxpPkFueSB0YXggcmVzaWRlbmN5IGNlcnRpZmljYXRlcyBvciBzdGF0ZW1lbnRzIGZyb20gZm9yZWlnbiB0YXggYXV0aG9yaXRpZXMuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGZvcmVpZ24gdGF4IHBhaWQsIGluY2x1ZGluZyB0YXggcmV0dXJucyBmaWxlZCBpbiB0aGUgZm9yZWlnbiBjb3VudHJ5LCBpZiBhdmFpbGFibGUuPC9saT5cbiAgICAgICAgPGxpPlJlY29yZHMgb2YgeW91ciBVLlMuIGFuZCBmb3JlaWduIGFkZHJlc3NlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiBhbnkgdGF4IHRyZWF0aWVzIGJldHdlZW4gdGhlIFUuUy4gYW5kIHRoZSBjb3VudHJ5IG9yIGNvdW50cmllcyB5b3Ugd29ya2VkIGluLjwvbGk+XG4gICAgICAgIDxsaT5BIHNpZ25lZCBGb3JtIDI1NTUgb3IgMjU1NS1FWiwgaWYgeW91IGhhdmUgYWxyZWFkeSBwcmVwYXJlZCB0aGlzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGVzZSBkb2N1bWVudHMgYW5kIGRldGFpbHMgYXJlIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHRoZSBiZXN0IGFwcHJvYWNoIHRvIGhhbmRsZSB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxuICAgIDxwPlBsZWFzZSBoYXZlIHRoZXNlIG1hdGVyaWFscyByZWFkeSBhbmQgc2VuZCB0aGVtIHRvIHVzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gYW55IG9mIHRoZSBpdGVtcyByZXF1ZXN0ZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSB3aXRoIHlvdXIgdGF4ZXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZvcmVpZ24gSG91c2luZyBFeGNsdXNpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UndmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBpbmN1cnJpbmcgZWxpZ2libGUgZXhwZW5zZXMgZm9yIHRoZSBGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uIGR1ZSB0byBlYXJuaW5nIGluY29tZSBpbiBhIGZvcmVpZ24gY291bnRyeSBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGV4Y2x1c2lvbiBwb3NzaWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHlvdXIgY3VycmVudCBsZWFzZSBvciByZW50YWwgYWdyZWVtZW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlV0aWxpdHkgQmlsbHM6PC9zdHJvbmc+IENvcGllcyBvZiB1dGlsaXR5IGJpbGxzIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24gKGV4Y2x1ZGluZyB0ZWxlcGhvbmUgY2hhcmdlcykuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5zdXJhbmNlIERvY3VtZW50czo8L3N0cm9uZz4gRG9jdW1lbnRzIHByb3ZpbmcgcGF5bWVudCBvZiByZWFsIGVzdGF0ZSBvciByZW50YWwgaW5zdXJhbmNlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk90aGVyIEhvdXNpbmcgQ29zdHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gZm9yIGFueSBhZGRpdGlvbmFsIGVsaWdpYmxlIGhvdXNpbmcgY29zdHMgbm90IHByZXZpb3VzbHkgbWVudGlvbmVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZvcmVpZ24gSW5jb21lOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHZlcmlmeWluZyB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZSAoZS5nLiwgcGF5IHN0dWJzLCBiYW5rIHN0YXRlbWVudHMpLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkxvY2F0aW9uIGFuZCBEdXJhdGlvbjo8L3N0cm9uZz4gQSBicmllZiBzdGF0ZW1lbnQgZGV0YWlsaW5nIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGZvcmVpZ24gcmVzaWRlbmNlIGFuZCB0aGUgZHVyYXRpb24gb2YgeW91ciBzdGF5IGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhcmx5IGxlZ2libGUgYW5kIGluIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgZWxlY3Ryb25pY2FsbHkuIFRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoZXNlIGRvY3VtZW50cyBhcmUgZXNzZW50aWFsIGZvciBhIGNvcnJlY3QgYW5kIG9wdGltaXplZCBmaWxpbmcgb2YgeW91ciB0YXggcmV0dXJuLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIEZvcmVpZ24gSG91c2luZyBFeGNsdXNpb24uPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiBhbnkgb2YgdGhlIHJlcXVpcmVkIGRvY3VtZW50cywgcGxlYXNlIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGF0IHlvdXIgY29udmVuaWVuY2UuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEhvdXNpbmcgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBIb3VzaW5nIERlZHVjdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gdGhlIHF1ZXN0aW9uIGNvbmNlcm5pbmcgcG90ZW50aWFsIGVsaWdpYmlsaXR5IGZvciB0aGUgPHN0cm9uZz5Gb3JlaWduIEhvdXNpbmcgRGVkdWN0aW9uPC9zdHJvbmc+LiBUaGlzIGRlZHVjdGlvbiBpcyBkZXNpZ25lZCB0byBoZWxwIG1pdGlnYXRlIHRoZSBoaWdoZXIgY29zdCBvZiBsaXZpbmcgYWJyb2FkIGJ5IGFsbG93aW5nIGNlcnRhaW4gaG91c2luZyBleHBlbnNlcyB0byBiZSBkZWR1Y3RlZCBmb3IgdGF4IHB1cnBvc2VzLjwvcD5cbiAgICA8cD5UbyBwcm9jZWVkIHdpdGggeW91ciB0YXggZmlsaW5nIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIG1heGltdW0gYWxsb3dhYmxlIGRlZHVjdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzIHJlbGF0ZWQgdG8geW91ciBob3VzaW5nIGV4cGVuc2VzIGluY3VycmVkIHdoaWxlIHdvcmtpbmcgYWJyb2FkOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudC9MZWFzZTo8L3N0cm9uZz4gQSBjb3B5IG9mIHlvdXIgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZSB0aGF0IHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIHJlbnQgcGFpZCBhbmQgdGhlIHBlcmlvZCBvZiBvY2N1cGFuY3kuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5VdGlsaXR5IEJpbGxzOjwvc3Ryb25nPiBDb3BpZXMgb2YgdXRpbGl0eSBiaWxscyBmb3IgdGhlIHBlcmlvZCB5b3UgYXJlIGNsYWltaW5nIHRoZSBkZWR1Y3Rpb24uIFRoaXMgaW5jbHVkZXMgZWxlY3RyaWNpdHksIHdhdGVyLCBhbmQgZ2FzLCBidXQgZXhjbHVkZXMgdGVsZXBob25lIGNoYXJnZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5SZWFsIEVzdGF0ZSBJbnN1cmFuY2U6PC9zdHJvbmc+IERvY3VtZW50IHByb29mIG9mIGFueSByZWFsIGVzdGF0ZSBpbnN1cmFuY2UgcHJlbWl1bXMgcGFpZCBmb3IgeW91ciBmb3JlaWduIGhvdXNpbmcuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5PdGhlciBFbGlnaWJsZSBFeHBlbnNlczo8L3N0cm9uZz4gUmVjZWlwdHMgb3IgaW52b2ljZXMgZm9yIGFueSBhZGRpdGlvbmFsIGVsaWdpYmxlIGxpdmluZyBleHBlbnNlcyBub3QgY292ZXJlZCBhYm92ZS4gUGxlYXNlIG5vdGUsIHRvIHF1YWxpZnksIHRoZXNlIGV4cGVuc2VzIG11c3QgYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIGZvcmVpZ24gaG91c2luZyBhbmQgbm90IGNvdmVyZWQgdW5kZXIgdGhlIGJhc2UgYW1vdW50IGV4ZW1wdGlvbi48L2xpPlxuICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gRWFybmVkIEluY29tZTo8L3N0cm9uZz4gVmVyaWZpY2F0aW9uIG9mIHlvdXIgZWFybmVkIGluY29tZSB3aGlsZSB3b3JraW5nIGFicm9hZCwgYXMgdGhlIGRlZHVjdGlvbiBpcyB0aWVkIHRvIGNlcnRhaW4gaW5jb21lIGxpbWl0YXRpb25zLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5XZSB1bmRlcnN0YW5kIHRoaXMgbWF5IGludm9sdmUgZ2F0aGVyaW5nIHNldmVyYWwgZG9jdW1lbnRzLCBidXQgZW5zdXJpbmcgd2UgaGF2ZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgbWF4aW1pemluZyB5b3VyIHBvdGVudGlhbCBkZWR1Y3Rpb25zIGFuZCByZW1haW5pbmcgY29tcGxpYW50IHdpdGggdGF4IHJlZ3VsYXRpb25zLjwvcD5cbiAgICA8cD5QbGVhc2Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIG9yIGNvbnRhY3QgdXMgdG8gZGlzY3VzcyBhbnkgY2hhbGxlbmdlcyB5b3UgbWF5IGZhY2UgaW4gb2J0YWluaW5nIHRoZW0uIE91ciB0ZWFtIGlzIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIGNsYWltaW5nIHlvdXIgRm9yZWlnbiBUYXggQ3JlZGl0LCBhcyBpbmRpY2F0ZWQgYnkgeW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91IHBhaWQgdGF4ZXMgdG8gYSBmb3JlaWduIGNvdW50cnkgb24gZWFybmVkIGluY29tZSB0aGVyZS4gVG8gcHJvcGVybHkgY2FsY3VsYXRlIGFuZCBhcHBseSB0aGlzIGNyZWRpdCB0byB5b3VyIFUuUy4gdGF4IHJldHVybiwgd2Ugd2lsbCBuZWVkIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5FYXJuZWQgSW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFueSBkb2N1bWVudHMgdGhhdCB2ZXJpZnkgdGhlIGFtb3VudCBvZiBpbmNvbWUgZWFybmVkIGluIHRoZSBmb3JlaWduIGNvdW50cnkuIFRoaXMgbWF5IGluY2x1ZGUsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcGF5IHN0dWJzLCBXLTIgZm9ybXMgZnJvbSBmb3JlaWduIGVtcGxveWVycywgb3IgYW55IG9mZmljaWFsIGluY29tZSBzdGF0ZW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFRheCBQYWlkOjwvc3Ryb25nPiBUbyBjbGFpbSB0aGUgRm9yZWlnbiBUYXggQ3JlZGl0LCBkb2N1bWVudGF0aW9uIHNob3dpbmcgdGhlIGFtb3VudCBvZiB0YXggcGFpZCB0byB0aGUgZm9yZWlnbiBnb3Zlcm5tZW50IGlzIHJlcXVpcmVkLiBBY2NlcHRhYmxlIGZvcm1zIG9mIGV2aWRlbmNlIGluY2x1ZGUgZm9yZWlnbiB0YXggcmV0dXJuKHMpLCB3aXRoaG9sZGluZyBzdGF0ZW1lbnRzLCBvciBhbnkgb2ZmaWNpYWwgdGF4IHJlY2VpcHRzIHByb3ZpZGVkIGJ5IHRoZSBmb3JlaWduIHRheCBhdXRob3JpdHkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyOjwvc3Ryb25nPiBZb3VyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgb3IgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyLCBmb3IgYWNjdXJhdGUgcHJvY2Vzc2luZyBvZiB0aGUgdGF4IGNyZWRpdC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBGb3JlaWduIFRheDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHR5cGUgb2YgdGF4IHBhaWQgdG8gdGhlIGZvcmVpZ24gY291bnRyeSAoaW5jb21lIHRheCwgc2FsZXMgdGF4LCBldGMuKSwgaW5jbHVkaW5nIHdoZXRoZXIgaXQgd2FzIGEgZmVkZXJhbCwgc3RhdGUvcHJvdmluY2lhbCwgb3IgbG9jYWwgdGF4LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jeSAoSWYgQXBwbGljYWJsZSk6PC9zdHJvbmc+IElmIHlvdXIgY2xhaW0gZGVwZW5kcyBvbiByZXNpZGVuY3kgc3RhdHVzIGluIHRoZSBmb3JlaWduIGNvdW50cnksIHBsZWFzZSBwcm92aWRlIHByb29mIG9mIHJlc2lkZW5jeSBmb3IgdGhlIHJlbGV2YW50IHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gQWRkcmVzcyAoSWYgQXBwbGljYWJsZSk6PC9zdHJvbmc+IElmIHlvdSBtYWludGFpbmVkIGEgcmVzaWRlbmNlIG91dHNpZGUgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgZHVyaW5nIHRoZSB0YXggeWVhciwgcGxlYXNlIHByb3ZpZGUgdGhlIGFkZHJlc3MuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybnMgYXJlIGFzIGJlbmVmaWNpYWwgdG8geW91ciBzaXR1YXRpb24gYXMgYWxsb3dlZCBieSBsYXcgYW5kIGZvciBwcmV2ZW50aW5nIGFueSB1bm5lY2Vzc2FyeSBkZWxheXMuPC9wPlxuICAgIDxwPlBsZWFzZSB1cGxvYWQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiB0byBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgZW1haWwgaXQgdG8gdXMgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUcmFkaXRpb25hbCBJUkEgQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiVHJhZGl0aW9uYWwgSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIG5vdGVkIHlvdXIgaW5kaWNhdGlvbiBvZiBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgYmVuZWZpY2lhbCB0YXggZmlsaW5nLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhYm91dCB5b3VyIFRyYWRpdGlvbmFsIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9ucyB5b3UgbWF5IGhhdmUgdGFrZW46PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IGNvbnRyaWJ1dGVkIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMgdG8gYWNjdXJhdGVseSByZXBvcnQgd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyBmcm9tIHlvdXIgSVJBIGN1c3RvZGlhbiBzcGVjaWZ5aW5nIHRoZSBjb250cmlidXRpb25zIG1hZGUuPC9saT5cbiAgICAgIDxsaT5BbnkgZGlzdHJpYnV0aW9ucyB0YWtlbiBmcm9tIHlvdXIgVHJhZGl0aW9uYWwgSVJBIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZzpcbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5BbW91bnQgb2YgZWFjaCBkaXN0cmlidXRpb24uPC9saT5cbiAgICAgICAgICA8bGk+RGF0ZXMgb2YgZWFjaCBkaXN0cmlidXRpb24uPC9saT5cbiAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIGZvciB0aGVzZSBkaXN0cmlidXRpb25zLjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPllvdXIgeWVhci1lbmQgSVJBIHN0YXRlbWVudCBmb3IgdGhlIHRheCB5ZWFyIGluIHF1ZXN0aW9uLjwvbGk+XG4gICAgICA8bGk+QW55IG5vdGljZXMgcmVjZWl2ZWQgcmVnYXJkaW5nIG5vbi1kZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbnMsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHlvdXIgdGF4IGxpYWJpbGl0aWVzIG9yIGJlbmVmaXRzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIElSQSBjb250cmlidXRpb25zLCBhbmQgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IGZpbGluZy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48cD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJvdGggSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlJvdGggSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciBjb250cmlidXRpb25zIHRvIGEgUm90aCBJUkEgZHVyaW5nIHRoZSBsYXN0IHRheCB5ZWFyIGFzIHBhcnQgb2Ygb3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSBjYXB0dXJlIGFsbCByZWxldmFudCB0YXggaW5mb3JtYXRpb24gYW5kIHBvdGVudGlhbGx5IG9wdGltaXplIHlvdXIgdGF4IHNpdHVhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBzcGVjaWZpY3MgYWJvdXQgeW91ciBSb3RoIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9uczo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFJvdGggSVJBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgIDxsaT5UaGUgZGF0ZXMgb24gd2hpY2ggdGhlc2UgY29udHJpYnV0aW9ucyB3ZXJlIG1hZGUuPC9saT5cbiAgICAgIDxsaT5PZmZpY2lhbCBzdGF0ZW1lbnRzIG9yIGRvY3VtZW50YXRpb24gZnJvbSB5b3VyIElSQSBjdXN0b2RpYW4gdGhhdCBkZXRhaWwgdGhlc2UgY29udHJpYnV0aW9ucy48L2xpPlxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSBkaXN0cmlidXRpb25zLCBzaG91bGQgdGhleSBhcHBseSwgaW5jbHVkaW5nOlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZWFjaCBkaXN0cmlidXRpb24gdGFrZW4gZnJvbSB0aGUgUm90aCBJUkEuPC9saT5cbiAgICAgICAgICA8bGk+VGhlIGRhdGVzIG9mIHRoZXNlIGRpc3RyaWJ1dGlvbnMuPC9saT5cbiAgICAgICAgICA8bGk+RGlzdHJpYnV0aW9uIHN0YXRlbWVudHMgb3IgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBmcm9tIHlvdXIgSVJBIGN1c3RvZGlhbi48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT5Zb3VyIHllYXItZW5kIGFjY291bnQgc3RhdGVtZW50IGZvciB0aGUgUm90aCBJUkEgZm9yIHRoZSB0YXggeWVhciBpbiBxdWVzdGlvbi48L2xpPlxuICAgICAgPGxpPkFueSBwZXJ0aW5lbnQgaW5mb3JtYXRpb24gb3Igbm90aWNlcyByZWdhcmRpbmcgeW91ciBSb3RoIElSQSBjb250cmlidXRpb25zIG9yIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZyB0YXggcmVwb3J0aW5nIGZvcm1zIGxpa2UgRm9ybSA1NDk4IG9yIEZvcm0gMTA5OS1SLCBpZiByZWNlaXZlZC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+R2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGEgY29tcHJlaGVuc2l2ZSBhbmFseXNpcyBvZiB5b3VyIHRheCBzaXR1YXRpb24sIGVuc3VyaW5nIHRoZSBjb3JyZWN0IHRyZWF0bWVudCBvZiB5b3VyIFJvdGggSVJBIGNvbnRyaWJ1dGlvbnMgYW5kIGFueSBkaXN0cmlidXRpb25zLCBhbmQgY29tcGx5aW5nIHdpdGggSVJTIHJlZ3VsYXRpb25zLjwvcD5cbiAgICA8cD5QbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50YXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVyaWVzIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBvYnRhaW5pbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEFzc2V0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkZvcmVpZ24gQXNzZXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UncmUgbWFraW5nIHByb2dyZXNzIG9uIHlvdXIgdGF4IHJldHVybiwgYW5kIGJhc2VkIG9uIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyBvd25lcnNoaXAgb3IgZmluYW5jaWFsIGludGVyZXN0IGluIGZvcmVpZ24gYXNzZXRzLCBhZGRpdGlvbmFsIGRldGFpbHMgYXJlIG5lY2Vzc2FyeS4gVGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBjb21wbGlhbmNlIHdpdGggdGhlIEZvcmVpZ24gQWNjb3VudCBUYXggQ29tcGxpYW5jZSBBY3QgKEZBVENBKSBhbmQgUmVwb3J0IG9mIEZvcmVpZ24gQmFuayBhbmQgRmluYW5jaWFsIEFjY291bnRzIChGQkFSKSByZXF1aXJlbWVudHMuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgYWxsIHN0YXRlbWVudHMgZnJvbSBmb3JlaWduIGJhbmtzLCBtdXR1YWwgZnVuZHMsIG9yIHNlY3VyaXRpZXMgYWNjb3VudHMuIFRoaXMgaW5jbHVkZXMgYW55dGhpbmcgd2l0aCBhbiBhZ2dyZWdhdGUgdmFsdWUgb3ZlciAkMTAsMDAwIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgTnVtYmVyczo8L3N0cm9uZz4gVGhlIGFjY291bnQgbnVtYmVycyBmb3IgYWxsIGFwcGxpY2FibGUgYWNjb3VudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5zdGl0dXRpb24gTmFtZXM6PC9zdHJvbmc+IFRoZSBuYW1lcyBhbmQgYWRkcmVzc2VzIG9mIHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb25zIHdoZXJlIHRoZXNlIGFjY291bnRzIGFyZSBoZWxkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk1heGltdW0gVmFsdWVzOjwvc3Ryb25nPiBUaGUgbWF4aW11bSB2YWx1ZSBvZiBlYWNoIGFjY291bnQgZHVyaW5nIHRoZSB0YXggeWVhciwgY29udmVydGVkIHRvIFVTRCB1c2luZyB0aGUgZW5kLW9mLXllYXIgZXhjaGFuZ2UgcmF0ZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Pd25lcnNoaXAgRGV0YWlsczo8L3N0cm9uZz4gQ2xhcmlmaWNhdGlvbiBvbiB0aGUgdHlwZSBvZiBvd25lcnNoaXAgKGluZGl2aWR1YWwsIGpvaW50LCBldGMuKSBhbmQgdGhlIHBlcmNlbnRhZ2Ugb2Ygb3duZXJzaGlwIGlmIG5vdCBzb2xlbHkgb3duZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29udGFjdCBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgbWFuYWdlZCBieSBhIGZpbmFuY2lhbCBhZHZpc29yIG9yIGluc3RpdHV0aW9uLCBwcm92aWRlIHRoZWlyIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIEdlbmVyYXRlZDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gYW55IGluY29tZSBnZW5lcmF0ZWQgZnJvbSB0aGVzZSBhc3NldHMsIHN1Y2ggYXMgaW50ZXJlc3QsIGRpdmlkZW5kcywgb3IgY2FwaXRhbCBnYWlucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBpbXBlcmF0aXZlIHRvIGVuc3VyZSBmdWxsIGNvbXBsaWFuY2UgYW5kIG1pdGlnYXRlIGFueSByaXNrcyBvZiBwZW5hbHRpZXMuIEtpbmRseSBzZW5kIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBhbGxvdyBhbXBsZSB0aW1lIGZvciBwcm9wZXIgZmlsaW5nLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEdpZnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBHaWZ0c1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGdpZnRzIG9yIGJlcXVlc3RzIGZyb20gZm9yZWlnbiBlbnRpdGllcyB0aGF0IGV4Y2VlZCB0aGUgJDEwMCwwMDAgdGhyZXNob2xkIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPkNvbXBsZXRlIGxpc3Qgb2YgZm9yZWlnbiBnaWZ0cyBvciBiZXF1ZXN0cyByZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgZGV0YWlscyBmb3IgZWFjaCBnaWZ0IG9yIGJlcXVlc3QsIGluY2x1ZGluZyB0aGUgZGF0ZSByZWNlaXZlZCBhbmQgdGhlIGV4YWN0IGFtb3VudCBpbiBVU0QgKFUuUy4gRG9sbGFycykuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRvbm9yIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBGb3IgZWFjaCBnaWZ0IHJlY2VpdmVkLCBwcm92aWRlIHRoZSBkb25vcidzIGZ1bGwgbmFtZSwgYWRkcmVzcywgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlNvdXJjZSBvZiBHaWZ0Ojwvc3Ryb25nPiBEZXRhaWwgdGhlIHNvdXJjZSBvZiBlYWNoIGdpZnQsIGluY2x1ZGluZyB3aGV0aGVyIGl0IG9yaWdpbmF0ZWQgZnJvbSBhbiBpbmRpdmlkdWFsLCBlc3RhdGUsIGZvcmVpZ24gY29ycG9yYXRpb24sIG9yIHBhcnRuZXJzaGlwLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Gb3JlaWduIENvdW50cnkgSW5mb3JtYXRpb246PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGNvdW50cnkgZnJvbSB3aGljaCBlYWNoIGdpZnQgb3IgYmVxdWVzdCB3YXMgcmVjZWl2ZWQuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+IEF0dGFjaCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIGJhbmsgc3RhdGVtZW50cywgZm9yZWlnbiBnaWZ0IGRlY2xhcmF0aW9uIGZvcm1zLCBvciBsZWdhbCBkb2N1bWVudHMgcmVsYXRlZCB0byB0aGUgcmVjZWlwdCBvZiB0aGVzZSBnaWZ0cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIHRvIGZ1bGZpbGwgb3VyIG9ibGlnYXRpb25zIGFuZCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHlvdXIgdGF4IGZpbGluZ3MuIEZhaWx1cmUgdG8gcmVwb3J0IGZvcmVpZ24gZ2lmdHMgb3IgYmVxdWVzdHMgYWNjdXJhdGVseSBjYW4gcmVzdWx0IGluIHBlbmFsdGllcy4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZXByZWNpYWJsZSBBc3NldHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJEZXByZWNpYWJsZSBBc3NldHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyB3ZSBiZWdpbiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuLCB3ZSBuZWVkIHlvdXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBkZXByZWNpYWJsZSBhc3NldHMuIFRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIGRlcHJlY2lhdGlvbiBleHBlbnNlIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLjwvcD5cblxuICAgIDxoMj5BY3Rpb24gSXRlbTo8L2gyPlxuICAgIDxwPlBsZWFzZSBhY2Nlc3MgeW91ciA8c3Ryb25nPnNlY3VyZSBjbGllbnQgdXBsb2FkIHBvcnRhbDwvc3Ryb25nPiBhbmQgbmF2aWdhdGUgdG8gdGhlIGZvbGxvd2luZyBwYXRoOiA8Y29kZT50YXhlcy9bQ1VSUkVOVCBUQVggWUVBUl0vRGVwcmVjaWF0aW9uL0Fzc2V0cy54bHN4PC9jb2RlPi4gWW91IHdpbGwgZmluZCBhIHNwcmVhZHNoZWV0IHRpdGxlZCBcIjxzdHJvbmc+RGVwcmVjaWFibGUgQXNzZXRzPC9zdHJvbmc+LlwiIFdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkZXByZWNpYWJsZSBhc3NldCBpbiB5b3VyIGJ1c2luZXNzOjwvcD5cbiAgICA8dWw+XG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uOjwvc3Ryb25nPiBQcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gdGhhdCBjbGVhcmx5IGlkZW50aWZpZXMgdGhlIGFzc2V0LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgQWNxdWlyZWQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUgeW91IHB1cmNoYXNlZCBvciBhY3F1aXJlZCB0aGUgYXNzZXQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCAvIEJhc2lzOjwvc3Ryb25nPiBJbmRpY2F0ZSB0aGUgb3JpZ2luYWwgY29zdCBvZiB0aGUgYXNzZXQgb3IgdGhlIGFkanVzdGVkIGJhc2lzIGlmIGRlcHJlY2lhdGlvbiBoYXMgYmVlbiBjbGFpbWVkIGluIHByZXZpb3VzIHllYXJzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkJ1c2luZXNzICUgVXNlOjwvc3Ryb25nPiBFc3RpbWF0ZSB0aGUgcGVyY2VudGFnZSBvZiB0aW1lIHRoZSBhc3NldCBpcyB1c2VkIGZvciBidXNpbmVzcyBwdXJwb3NlcyB2ZXJzdXMgcGVyc29uYWwgdXNlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlVzZWQgUHJvcGVydHk6PC9zdHJvbmc+IEluZGljYXRlIHdoZXRoZXIgdGhlIGFzc2V0IHdhcyBwdXJjaGFzZWQgbmV3IG9yIHVzZWQuPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPGgzPkltcG9ydGFudCBOb3RlIG9uIFNhZmUtSGFyYm9yIEV4cGVuc2luZzo8L2gzPlxuICAgIDxwPlBsZWFzZSBiZSBhd2FyZSB0aGF0IHVuZGVyIHRoZSBzYWZlLWhhcmJvciA8ZW0+ZGUgbWluaW1pczwvZW0+IGV4cGVuc2luZyBydWxlLCB5b3UgY2FuIGltbWVkaWF0ZWx5IGV4cGVuc2UgdGhlIGNvc3Qgb2YgYW55IGluZGl2aWR1YWwgYXNzZXQgdGhhdCBjb3N0cyBsZXNzIHRoYW4gJDIsNTAwLCBwcm92aWRlZCB5b3UgZG8gbm90IGhhdmUgYW4gQXBwbGljYWJsZSBGaW5hbmNpYWwgU3RhdGVtZW50IChBRlMpLiBJZiBhbiBhc3NldCBtZWV0cyB0aGlzIGNyaXRlcmlvbiwgeW91IGRvIG5vdCBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIHNwcmVhZHNoZWV0LjwvcD5cblxuICAgIDxwPldlIGVuY291cmFnZSB5b3UgdG8gYmUgYXMgY29tcHJlaGVuc2l2ZSBhcyBwb3NzaWJsZSB3aGVuIGxpc3RpbmcgeW91ciBhc3NldHMuIElmIHlvdSBhcmUgdW5zdXJlIHdoZXRoZXIgYW4gaXRlbSBzaG91bGQgYmUgaW5jbHVkZWQsIHBsZWFzZSBwcm92aWRlIHRoZSBkZXRhaWxzLCBhbmQgd2Ugd2lsbCBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHRyZWF0bWVudC48L3A+XG5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIDxzdHJvbmc+Y29udGFjdCB1czwvc3Ryb25nPi4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGxvb2sgZm9yd2FyZCB0byB3b3JraW5nIHdpdGggeW91IHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlBhc3NpdmUgQnVzaW5lc3MgQWN0aXZpdGllc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlBhc3NpdmUgQnVzaW5lc3MgQWN0aXZpdGllc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIG9yZGVyIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFzc2l2ZSBhY3Rpdml0aWVzIHlvdXIgYnVzaW5lc3MgaXMgZW5nYWdlZCBpbi4gUGFzc2l2ZSBhY3Rpdml0aWVzIGdlbmVyYWxseSBpbnZvbHZlIGJ1c2luZXNzIG9yIHRyYWRlIGFjdGl2aXRpZXMgaW4gd2hpY2ggeW91IGRvIG5vdCBtYXRlcmlhbGx5IHBhcnRpY2lwYXRlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGFjdGl2aXRpZXMgaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIHRheCByZXBvcnRpbmcgYW5kIHBvdGVudGlhbCB0YXggYmVuZWZpdHMuPC9wPlxuXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpZiB5b3UgYmVsaWV2ZSB3ZSBkbyBub3QgYWxyZWFkeSBoYXZlIHRoZSBpbmZvcm1hdGlvbiBpbiB5b3VyIGJ1c2luZXNzIGZpbmFuY2lhbHM6PC9wPlxuICAgIFxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPk5hbWVzIGFuZCBEZXNjcmlwdGlvbnM6PC9zdHJvbmc+IEEgbGlzdCBhbmQgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBwYXNzaXZlIGFjdGl2aXR5IHlvdXIgYnVzaW5lc3MgaXMgZW5nYWdlZCBpbi48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIFN0YXRlbWVudHM6PC9zdHJvbmc+SWYgbm90IGFscmVhZHkgaW4geW91ciBidXNpbmVzcyBmaW5hbmNpYWxzLCBQcm9maXQgYW5kIGxvc3Mgc3RhdGVtZW50cyBmb3IgZWFjaCBwYXNzaXZlIGFjdGl2aXR5LCBkZXRhaWxpbmcgaW5jb21lIGFuZCBleHBlbnNlcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+T3duZXJzaGlwIFN0cnVjdHVyZTo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvdXRsaW5pbmcgeW91ciBvd25lcnNoaXAgaW50ZXJlc3QgaW4gZWFjaCBhY3Rpdml0eSwgaW5jbHVkaW5nIGFueSBqb2ludCB2ZW50dXJlcyBvciBwYXJ0bmVyc2hpcHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBQcm9wZXJ0aWVzIChpZiBhcHBsaWNhYmxlKTo8L3N0cm9uZz4gSWYgYW55IHBhc3NpdmUgYWN0aXZpdGllcyBpbmNsdWRlIHJlbnRhbCBwcm9wZXJ0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzc2VzLCBsZWFzZSBhZ3JlZW1lbnRzLCBhbmQgYSBzY2hlZHVsZSBvZiByZW50cyBjb2xsZWN0ZWQgYW5kIGV4cGVuc2VzIGluY3VycmVkLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Mb2cgb2YgUGVyc29uYWwgSW52b2x2ZW1lbnQ6PC9zdHJvbmc+IEZvciBlYWNoIGFjdGl2aXR5LCBhIGxvZyBvciByZWNvcmQgb2YgeW91ciBwZXJzb25hbCBpbnZvbHZlbWVudCBvciBwYXJ0aWNpcGF0aW9uIG92ZXIgdGhlIHRheCB5ZWFyLCB0byBzdWJzdGFudGlhdGUgdGhlIGV4dGVudCBvZiB5b3VyIG1hdGVyaWFsIHBhcnRpY2lwYXRpb24uPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlByaW9yIFllYXIgTG9zc2VzOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBvbiBhbnkgbG9zc2VzIGZyb20gdGhlc2UgYWN0aXZpdGllcyBjYXJyaWVkIG92ZXIgZnJvbSBwcmV2aW91cyB0YXggeWVhcnMuPC9saT5cbiAgICA8L29sPlxuICAgIFxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgcGl2b3RhbCBmb3IgYXNzZXNzaW5nIHlvdXIgcGFzc2l2ZSBhY3Rpdml0eSBsb3NzZXMgYW5kIGNvcnJlY3RseSBhcHBseWluZyB0aGVtIGFnYWluc3QgeW91ciBwYXNzaXZlIGFjdGl2aXR5IGluY29tZSwgaW4gbGluZSB3aXRoIHRoZSBJUlMgcGFzc2l2ZSBhY3Rpdml0eSBsb3NzIHJ1bGVzLjwvcD5cbiAgICBcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgZXhwbG9yaW5nIG9wcG9ydHVuaXRpZXMgdG8gb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMgdGhyb3VnaCB2YXJpb3VzIGdlbmVyYWwgYnVzaW5lc3MgY3JlZGl0cy4gVGhlc2UgY3JlZGl0cyBhcmUgZGVzaWduZWQgdG8gZW5jb3VyYWdlIGNlcnRhaW4gYnVzaW5lc3MgYWN0aXZpdGllcyB0aGF0IG1lZXQgdGhlIGdvYWxzIGFuZCBwb2xpY2llcyBlc3RhYmxpc2hlZCBieSB0aGUgZ292ZXJubWVudCwgcmFuZ2luZyBmcm9tIGludmVzdG1lbnQgaW4gcHJvcGVydHkgdG8gZm9zdGVyaW5nIHNvY2lhbCByZXNwb25zaWJpbGl0aWVzIGxpa2UgZW1wbG95bWVudCBvcHBvcnR1bml0aWVzIGZvciB2ZXRlcmFucy4gVW5kZXJzdGFuZGluZyB3aGV0aGVyIHlvdXIgYnVzaW5lc3MgaXMgZWxpZ2libGUgZm9yIHRoZXNlIGNhbiBzaWduaWZpY2FudGx5IGltcGFjdCB5b3VyIGZpbmFuY2lhbHMgZmF2b3JhYmx5LjwvcD5cblxuICAgIDxwPkJlbG93IGlzIGEgYnJpZWYgZXhwbGFuYXRpb24gb2Ygc29tZSBvZiB0aGUgbW9zdCBjb21tb24gR2VuZXJhbCBCdXNpbmVzcyBDcmVkaXRzIGFuZCBvdGhlcnMgdGhhdCBtaWdodCBhcHBseSB0byB5b3VyIHNpdHVhdGlvbjo8L3A+XG4gICAgXG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBDcmVkaXQgKEZvcm0gMzQ2OCk6PC9zdHJvbmc+IEZvciBpbnZlc3RpbmcgaW4gY2VydGFpbiBwcm9wZXJ0eSBsaWtlIGJ1aWxkaW5ncywgZXF1aXBtZW50LCBvciBvdGhlciB0YW5naWJsZSBwcm9wZXJ0eS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+V29yayBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IChGb3JtIDU4ODQpOjwvc3Ryb25nPiBGb3IgaGlyaW5nIGluZGl2aWR1YWxzIGZyb20gY2VydGFpbiB0YXJnZXQgZ3JvdXBzIHdobyBoYXZlIGNvbnNpc3RlbnRseSBmYWNlZCBzaWduaWZpY2FudCBiYXJyaWVycyB0byBlbXBsb3ltZW50LjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5EaXNhYmxlZCBBY2Nlc3MgQ3JlZGl0Ojwvc3Ryb25nPiBJZiB5b3VyIGJ1c2luZXNzIGluY3VycmVkIGV4cGVuc2VzIGZvciBtYWtpbmcgaXQgbW9yZSBhY2Nlc3NpYmxlIHRvIGluZGl2aWR1YWxzIHdpdGggZGlzYWJpbGl0aWVzLCBjb21wbHlpbmcgd2l0aCB0aGUgQW1lcmljYW5zIHdpdGggRGlzYWJpbGl0aWVzIEFjdCAoQURBKS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+Q3JlZGl0IGZvciBFbXBsb3llciBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIFRheGVzIG9uIEVtcGxveWVlIFRpcHMgKEZvcm0gODg0Nik6PC9zdHJvbmc+IElmIHlvdSBoYXZlIGVtcGxveWVlcyB3aG8gcmVjZWl2ZSB0aXBzLCB0aGlzIGNyZWRpdCByZWxhdGVzIHRvIHRoZSBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRheGVzIHlvdSBwYXkgb24gdGhvc2UgdGlwcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgQ3JlZGl0IGZvciBQYWlkIEZhbWlseSBhbmQgTWVkaWNhbCBMZWF2ZSAoRk1MQSBMZWF2ZSkgKEZvcm0gODk5NCk6PC9zdHJvbmc+IEZvciBidXNpbmVzc2VzIHByb3ZpZGluZyBwYWlkIGZhbWlseSBhbmQgbWVkaWNhbCBsZWF2ZSB0byB0aGVpciBlbXBsb3llZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgU21hbGwgRW1wbG95ZXIgSGVhbHRoIEluc3VyYW5jZSBQcmVtaXVtcyAoRm9ybSA4OTQxKTo8L3N0cm9uZz4gSWYgeW91IHByb3ZpZGUgaGVhbHRoIGluc3VyYW5jZSB0byB5b3VyIGVtcGxveWVlcywgeW91IG1pZ2h0IGJlIGVsaWdpYmxlIGZvciB0aGlzIGNyZWRpdC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UmVzZWFyY2ggYW5kIERldmVsb3BtZW50IENyZWRpdCAoRm9ybSA2NzY1KTo8L3N0cm9uZz4gRm9yIGJ1c2luZXNzZXMgZW5nYWdpbmcgaW4gcXVhbGlmaWVkIHJlc2VhcmNoIGFjdGl2aXRpZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgRW1wbG95ZXItUHJvdmlkZWQgQ2hpbGQgQ2FyZSBGYWNpbGl0aWVzIGFuZCBTZXJ2aWNlczo8L3N0cm9uZz4gSWYgeW91ciBidXNpbmVzcyBwcm92aWRlcyBjaGlsZCBjYXJlIGZhY2lsaXRpZXMgb3Igc2VydmljZXMgdG8geW91ciBlbXBsb3llZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgU21hbGwgRW1wbG95ZXIgUGVuc2lvbiBQbGFuIFN0YXJ0dXAgQ29zdHMgYW5kIEF1dG8tRW5yb2xsbWVudCAoRm9ybSA4ODgxKTo8L3N0cm9uZz4gSWYgeW91ciBidXNpbmVzcyBoYXMgc2V0IHVwIG9yIHBsYW5zIHRvIHNldCB1cCBhIHBlbnNpb24gcGxhbiBmb3IgeW91ciBlbXBsb3llZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPk90aGVyIGNyZWRpdHM6PC9zdHJvbmc+IEFkZGl0aW9uYWwgY3JlZGl0cyBjYW4gYmUgZm91bmQgaW4gZGV0YWlsIGF0IDxhIGhyZWY9XCJodHRwczovL3d3dy5pcnMuZ292L2luc3RydWN0aW9ucy9pMzgwMFwiPklSUyBJbnN0cnVjdGlvbnMgZm9yIEZvcm0gMzgwMDwvYT4uPC9saT5cbiAgICA8L29sPlxuICAgIFxuICAgIDxwPldlIHdvdWxkIGxpa2UgdG8gYXNzZXNzIHlvdXIgcG90ZW50aWFsIGVsaWdpYmlsaXR5IGZvciB0aGVzZSBjcmVkaXRzLiBQbGVhc2UgcmV2aWV3IHRoZSBhYm92ZSBsaXN0IGFuZCA8c3Ryb25nPmluZm9ybSB1cyBpZiB5b3UgYmVsaWV2ZSB5b3VyIGJ1c2luZXNzIG1heSBxdWFsaWZ5PC9zdHJvbmc+IGZvciBhbnkgb2YgdGhlbSBiYXNlZCBvbiB5b3VyIGN1cnJlbnQgb3BlcmF0aW9ucyBvciBmdXR1cmUgcGxhbnMuIEFkZGl0aW9uYWxseSwgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjcmVkaXRzIG5vdCBsaXN0ZWQgdGhhdCB5b3UgYmVsaWV2ZSBtYXkgYXBwbHkgdG8geW91ciBidXNpbmVzcywgbGV0IHVzIGtub3cuPC9wPlxuICAgIFxuICAgIDxwPllvdXIgaW5zaWdodHMgd2lsbCBncmVhdGx5IGFzc2lzdCB1cyBpbiBlbnN1cmluZyB3ZSBleHBsb3JlIGFsbCBhdmVudWVzIHRvIHJlZHVjZSB5b3VyIHRheCBsaWFiaWxpdHkgYW5kIGNhcGl0YWxpemUgb24gYXZhaWxhYmxlIGNyZWRpdHMuPC9wPlxuICAgIFxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIGFueSBvZiB0aGVzZSBjcmVkaXRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJ1c2luZXNzIEFzc2V0cyBTb2xkXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQnVzaW5lc3MgQXNzZXRzIFNvbGRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyB3ZSB3b3JrIHRvIGRpbGlnZW50bHkgcHJlcGFyZSB5b3VyIGJ1c2luZXNz4oCZcyB0YXggZG9jdW1lbnRhdGlvbiwgd2UgbmVlZCB0byBlbnN1cmUgY29tcGxldGVuZXNzIGFuZCBhY2N1cmFjeSBpbiByZXBvcnRpbmcgYWxsIHJlbGV2YW50IHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSB0YXggeWVhci4gQW4gaW1wb3J0YW50IGFyZWEgb2YgZm9jdXMgaXMgdGhlIHNhbGUgb2YgYW55IGJ1c2luZXNzIGFzc2V0cy4gVGhpcyBpbmNsdWRlcyBib3RoIGFzc2V0cyBhY3RpdmVseSBpbiB1c2UgYW5kIHRob3NlIHRoYXQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGVwcmVjaWF0ZWQuPC9wPlxuXG4gICAgPHA+VGhlIHNhbGUgb2YgYnVzaW5lc3MgYXNzZXRzIGNhbiBoYXZlIHNpZ25pZmljYW50IHRheCBpbXBsaWNhdGlvbnMsIGluY2x1ZGluZyBwb3RlbnRpYWwgY2FwaXRhbCBnYWlucyBvciBsb3NzZXMsIHJlY2FwdHVyZSBvZiBkZXByZWNpYXRpb24sIGFuZCBpbXBhY3RzIG9uIHlvdXIgYnVzaW5lc3PigJlzIGNhc2ggZmxvdyBhbmQgZmluYW5jaWFsIHN0YXRlbWVudHMuIEFjY29yZGluZ2x5LCBpdCBpcyBjcnVjaWFsIGZvciB1cyB0byBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSB0cmFuc2FjdGlvbnMgdG8gdGhlIElSUy48L3A+XG4gICAgXG4gICAgPHA+UGxlYXNlIGNvbmZpcm0gaWYgeW91ciBidXNpbmVzcyBoYXMgc29sZCBhbnkgYXNzZXRzIGR1cmluZyB0aGUgY3VycmVudCB0YXggcGVyaW9kIGJ5IHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICBcbiAgICA8dWw+XG4gICAgICA8bGk+PHN0cm9uZz5Bc3NldCBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIGFzc2V0IHNvbGQgKGUuZy4sIGVxdWlwbWVudCwgcHJvcGVydHksIHZlaGljbGVzKS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBTYWxlOjwvc3Ryb25nPiBUaGUgZGF0ZSBvbiB3aGljaCBlYWNoIGFzc2V0IHdhcyBzb2xkLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5TYWxlIFByb2NlZWRzOjwvc3Ryb25nPiBUaGUgYW1vdW50IG9mIG1vbmV5IHJlY2VpdmVkIGZyb20gdGhlIHNhbGUgb2YgZWFjaCBhc3NldC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+T3JpZ2luYWwgUHVyY2hhc2UgUHJpY2UgYW5kIERhdGU6PC9zdHJvbmc+IFRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBhbmQgcHVyY2hhc2UgZGF0ZSBmb3IgZWFjaCBhc3NldC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+QWNjdW11bGF0ZWQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBUaGUgdG90YWwgZGVwcmVjaWF0aW9uIGNsYWltZWQgb24gZWFjaCBhc3NldCB1cCB0byB0aGUgcG9pbnQgb2Ygc2FsZS48L2xpPlxuICAgIDwvdWw+XG4gICAgXG4gICAgPHA+SWYgeW91IGhhdmUgbm90IHNvbGQgYW55IGJ1c2luZXNzIGFzc2V0cyBkdXJpbmcgdGhpcyBwZXJpb2QsIHBsZWFzZSBjb25maXJtIHRoaXMgYXMgd2VsbC4gWW91ciB0aW1lbHkgcmVzcG9uc2UgdG8gdGhpcyBpbnF1aXJ5IGlzIGNydWNpYWwgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSBhcmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+XG4gICAgXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvbWUgT2ZmaWNlIERlZHVjdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkhvbWUgT2ZmaWNlIERlZHVjdGlvbiBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSByZWNlaXZlZCBhbmQgY29tcGxldGVkIGEgYnVzaW5lc3MgdXNlIG9mIGhvbWUgc3ByZWFkc2hlZXQgZnJvbSB1cywgeW91IGNhbiBzYWZlbHkgaWdub3JlIHRoaXMgYWN0aW9uIGl0ZW0uIFdlJ2xsIGNsb3NlIGl0IG91dCBvbmNlIHdlIHZlcmlmeSB3ZSBoYXZlIHRoZSBpbmZvcm1hdGlvbiBvbiBmaWxlLjwvcD5cbiAgXG4gICAgPHA+WW91J3ZlIGluZGljYXRlZCB0aGF0IHlvdSB1c2UgcGFydCBvZiB5b3VyIGhvbWUgcmVndWxhcmx5IGFuZCBleGNsdXNpdmVseSBmb3IgYnVzaW5lc3MgcHVycG9zZXMuIFRoaXMgbWF5IHF1YWxpZnkgeW91IGZvciBhIGhvbWUgb2ZmaWNlIGRlZHVjdGlvbi4gVG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhpcyBkZWR1Y3Rpb24sIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gIFxuICAgIDx1bD5cbiAgICAgIDxsaT5Ub3RhbCBzcXVhcmUgZm9vdGFnZSBvZiB5b3VyIGhvbWU8L2xpPlxuICAgICAgPGxpPlNxdWFyZSBmb290YWdlIG9mIHlvdXIgaG9tZSBvZmZpY2U8L2xpPlxuICAgICAgPGxpPkJyaWVmIGRlc2NyaXB0aW9uIG9mIGhvdyB5b3UgdXNlIHRoaXMgc3BhY2UgZm9yIGJ1c2luZXNzPC9saT5cbiAgICAgIDxsaT5Ib21lLXJlbGF0ZWQgZXhwZW5zZXM6IG1vcnRnYWdlIGludGVyZXN0L3JlbnQsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIHV0aWxpdGllcywgcmVwYWlyczwvbGk+XG4gICAgICA8bGk+RGlyZWN0IGV4cGVuc2VzIGZvciB0aGUgb2ZmaWNlIHNwYWNlPC9saT5cbiAgICA8L3VsPlxuICBcbiAgICA8cD5JZiB5b3UgaGF2ZW4ndCByZWNlaXZlZCBvdXIgYnVzaW5lc3MgdXNlIG9mIGhvbWUgc3ByZWFkc2hlZXQsIHBsZWFzZSBsZXQgdXMga25vdywgYW5kIHdlJ2xsIHByb3ZpZGUgaXQgdG8geW91IGZvciBlYXN5IGNvbXBsZXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbi48L3A+XG4gIFxuICAgIDxwPlRoaXMgZGF0YSB3aWxsIGhlbHAgdXMgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBwb3RlbnRpYWwgaG9tZSBvZmZpY2UgZGVkdWN0aW9uIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBhc2suPC9wPmBcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQnVzaW5lc3MgVXNlIG9mIFBlcnNvbmFsIFZlaGljbGVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQZXJzb25hbCBWZWhpY2xlIEJ1c2luZXNzIFVzZSBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSBwcm92aWRlZCB1cyB3aXRoIGEgY29tcGxldGVkIHZlaGljbGUgZXhwZW5zZSBsb2cgb3Igc3ByZWFkc2hlZXQgZm9yIHRoZSB0YXggeWVhciwgeW91IGNhbiBpZ25vcmUgdGhpcyBhY3Rpb24gaXRlbS4gV2UnbGwgY2xvc2UgaXQgb25jZSB3ZSB2ZXJpZnkgd2UgaGF2ZSB0aGUgaW5mb3JtYXRpb24gb24gZmlsZS48L3A+XG4gIFxuICAgIDxwPllvdSd2ZSBpbmRpY2F0ZWQgdGhhdCB5b3UgdXNlIHlvdXIgcGVyc29uYWwgdmVoaWNsZSBmb3IgYnVzaW5lc3MgcHVycG9zZXMuIFRoaXMgbWF5IHF1YWxpZnkgeW91IGZvciB2ZWhpY2xlLXJlbGF0ZWQgdGF4IGRlZHVjdGlvbnMuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZXNlIGRlZHVjdGlvbnMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gIFxuICAgIDx1bD5cbiAgICAgIDxsaT5WZWhpY2xlIG1ha2UsIG1vZGVsLCBhbmQgeWVhcjwvbGk+XG4gICAgICA8bGk+RGF0ZSB5b3Ugc3RhcnRlZCB1c2luZyB0aGUgdmVoaWNsZSBmb3IgYnVzaW5lc3M8L2xpPlxuICAgICAgPGxpPldhcyB0aGUgdmVoaWNsZSBwdXJjaGFzZWQgaW4gYW50aWNpcGF0aW9uIG9mIGJ1c2luZXNzIHVzZT8gSWYgeWVzLCBwcm92aWRlIHB1cmNoYXNlIGRhdGUgYW5kIGNvc3Q8L2xpPlxuICAgICAgPGxpPlRvdGFsIG1pbGVzIGRyaXZlbiBkdXJpbmcgdGhlIHRheCB5ZWFyPC9saT5cbiAgICAgIDxsaT5CdXNpbmVzcyBtaWxlcyBkcml2ZW4gZHVyaW5nIHRoZSB0YXggeWVhcjwvbGk+XG4gICAgICA8bGk+Q29tbXV0aW5nIG1pbGVzIChpZiBhcHBsaWNhYmxlKTwvbGk+XG4gICAgICA8bGk+QWN0dWFsIGV4cGVuc2VzOlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPkdhcyBhbmQgb2lsPC9saT5cbiAgICAgICAgICA8bGk+TWFpbnRlbmFuY2UgYW5kIHJlcGFpcnM8L2xpPlxuICAgICAgICAgIDxsaT5WZWhpY2xlIHJlZ2lzdHJhdGlvbiBmZWVzPC9saT5cbiAgICAgICAgICA8bGk+VmVoaWNsZSBpbnN1cmFuY2U8L2xpPlxuICAgICAgICAgIDxsaT5MZWFzZSBwYXltZW50cyAoaWYgYXBwbGljYWJsZSk8L2xpPlxuICAgICAgICAgIDxsaT5QYXJraW5nIGZlZXMgYW5kIHRvbGxzIGZvciBidXNpbmVzcyB0cmlwczwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPkRvIHlvdSAob3IgeW91ciBzcG91c2UpIGhhdmUgYW5vdGhlciB2ZWhpY2xlIGF2YWlsYWJsZSBmb3IgcGVyc29uYWwgdXNlPzwvbGk+XG4gICAgICA8bGk+RG8geW91IGhhdmUgd3JpdHRlbiBldmlkZW5jZSB0byBzdXBwb3J0IHlvdXIgbWlsZWFnZSBsb2c/PC9saT5cbiAgICA8L3VsPlxuICBcbiAgICA8cD5QbGVhc2Ugbm90ZTogSWYgeW91IHB1cmNoYXNlZCB0aGUgdmVoaWNsZSBpbiBhbnRpY2lwYXRpb24gb2YgYnVzaW5lc3MgdXNlLCB3ZSBtYXkgYmUgYWJsZSB0byBjbGFpbSBkZXByZWNpYXRpb24uIFRoaXMgY291bGQgcG90ZW50aWFsbHkgaW5jcmVhc2UgeW91ciBkZWR1Y3Rpb24gYnV0IG1heSBhbHNvIGhhdmUgaW1wbGljYXRpb25zIGZvciBmdXR1cmUgdGF4IHllYXJzLjwvcD5cbiAgXG4gICAgPHA+SWYgeW91IGhhdmVuJ3QgcmVjZWl2ZWQgb3VyIHZlaGljbGUgZXhwZW5zZSBsb2cgc3ByZWFkc2hlZXQsIHBsZWFzZSBsZXQgdXMga25vdywgYW5kIHdlJ2xsIHByb3ZpZGUgaXQgdG8geW91IGZvciBlYXN5IGNvbXBsZXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbi48L3A+XG4gIFxuICAgIDxwPlRoaXMgZGF0YSB3aWxsIGhlbHAgdXMgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciB2ZWhpY2xlLXJlbGF0ZWQgZGVkdWN0aW9ucyBhbmQgb3B0aW1pemUgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHdoYXQgcXVhbGlmaWVzIGFzIGJ1c2luZXNzIHVzZSBvciBob3cgdG8gdHJhY2sgeW91ciBtaWxlYWdlLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gYXNrLjwvcD5gXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJ1c2luZXNzIFRyYXZlbCBQYWlkIHdpdGggUGVyc29uYWwgRnVuZHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJCdXNpbmVzcyBUcmF2ZWwgUmVpbWJ1cnNlbWVudCBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSBwcm92aWRlZCB1cyB3aXRoIGEgZGV0YWlsZWQgbG9nIG9yIHNwcmVhZHNoZWV0IG9mIHlvdXIgYnVzaW5lc3MgdHJhdmVsIGV4cGVuc2VzIGZvciB0aGUgdGF4IHllYXIsIHlvdSBjYW4gaWdub3JlIHRoaXMgYWN0aW9uIGl0ZW0uIFdlJ2xsIGNsb3NlIGl0IG9uY2Ugd2UgdmVyaWZ5IHdlIGhhdmUgdGhlIGluZm9ybWF0aW9uIG9uIGZpbGUuPC9wPlxuICBcbiAgICA8cD5Zb3UndmUgaW5kaWNhdGVkIHRoYXQgeW91IHBhaWQgZm9yIGJ1c2luZXNzIHRyYXZlbCB1c2luZyBwZXJzb25hbCBmdW5kcy4gVGhpcyBtYXkgcXVhbGlmeSB5b3UgZm9yIHRheCBkZWR1Y3Rpb25zIG9yIHJlaW1idXJzZW1lbnRzIGZyb20geW91ciBidXNpbmVzcy4gVG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBleHBlbnNlcywgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgXG4gICAgPHVsPlxuICAgICAgPGxpPkRhdGUgb2YgZWFjaCBidXNpbmVzcyB0cmlwPC9saT5cbiAgICAgIDxsaT5EZXN0aW5hdGlvbiBhbmQgcHVycG9zZSBvZiBlYWNoIHRyaXA8L2xpPlxuICAgICAgPGxpPk1ldGhvZCBvZiB0cmF2ZWwgKGUuZy4sIHBlcnNvbmFsIHZlaGljbGUsIHB1YmxpYyB0cmFuc3BvcnRhdGlvbiwgYWlyZmFyZSk8L2xpPlxuICAgICAgPGxpPlRvdGFsIGNvc3Qgb2YgdHJhdmVsLCBpbmNsdWRpbmcgdHJhbnNwb3J0YXRpb24sIGxvZGdpbmcsIGFuZCBtZWFsczwvbGk+XG4gICAgICA8bGk+UmVjZWlwdHMgb3IgZG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIGVhY2ggZXhwZW5zZTwvbGk+XG4gICAgICA8bGk+QW55IGJ1c2luZXNzIG1pbGVzIGRyaXZlbiAoaWYgYXBwbGljYWJsZSkgZHVyaW5nIHRoZXNlIHRyaXBzPC9saT5cbiAgICAgIDxsaT5XaGV0aGVyIHlvdSB3ZXJlIHJlaW1idXJzZWQgYnkgeW91ciBidXNpbmVzcyBvciBhbm90aGVyIGVudGl0eSBmb3IgYW55IG9mIHRoZXNlIGV4cGVuc2VzPC9saT5cbiAgICA8L3VsPlxuICBcbiAgICA8cD5QbGVhc2Ugbm90ZTogSWYgeW91IGhhdmVuJ3QgdHJhY2tlZCB0aGVzZSBleHBlbnNlcyB0aHJvdWdob3V0IHRoZSB5ZWFyLCBub3cgaXMgYSBnb29kIHRpbWUgdG8gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIEFjY3VyYXRlIHJlY29yZHMgd2lsbCBoZWxwIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgbWF4aW11bSBhbGxvd2FibGUgZGVkdWN0aW9ucyBhbmQgYXZvaWQgYW55IGlzc3VlcyBpbiB0aGUgZXZlbnQgb2YgYW4gYXVkaXQuPC9wPlxuICBcbiAgICA8cD5JZiB5b3UgbmVlZCBhIHRlbXBsYXRlIG9yIGd1aWRhbmNlIG9uIGhvdyB0byBvcmdhbml6ZSB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCB3ZSdsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgdG9vbHMgdG8gYXNzaXN0IHlvdS48L3A+XG4gIFxuICAgIDxwPlByb3ZpZGluZyB0aGlzIGRhdGEgd2lsbCBoZWxwIHVzIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgdHJhdmVsLXJlbGF0ZWQgZGVkdWN0aW9ucyBhbmQgb3B0aW1pemUgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHdoYXQgcXVhbGlmaWVzIGFzIGEgYnVzaW5lc3MgZXhwZW5zZSBvciBob3cgdG8gZG9jdW1lbnQgeW91ciB0cmF2ZWwsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBhc2suPC9wPmBcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGlwIEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRpcCBJbmNvbWUgRG9jdW1lbnRhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgPHN0cm9uZz50aXAgaW5jb21lPC9zdHJvbmc+IGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgdGlwIGluY29tZSBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMsIHdlIG5lZWQgZG9jdW1lbnRhdGlvbiBvZiBhbGwgdGlwcyByZWNlaXZlZC48L3A+XG5cbiAgICA8cD48c3Ryb25nPlJlcXVpcmVkIERvY3VtZW50YXRpb246PC9zdHJvbmc+PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+Vy0yIEZvcm06PC9zdHJvbmc+IFlvdXIgZW1wbG95ZXIgc2hvdWxkIHJlcG9ydCB0aXBzIGluIEJveCA3IChTb2NpYWwgU2VjdXJpdHkgdGlwcykgYW5kIEJveCA4IChBbGxvY2F0ZWQgdGlwcywgaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSA0MDcwOjwvc3Ryb25nPiBFbXBsb3llZSdzIFJlcG9ydCBvZiBUaXBzIHRvIEVtcGxveWVyLCBpZiB5b3UgcmVwb3J0ZWQgdGlwcyB0byB5b3VyIGVtcGxveWVyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhaWx5IFRpcCBMb2c6PC9zdHJvbmc+IFlvdXIgcGVyc29uYWwgcmVjb3JkIG9mIHRpcHMgcmVjZWl2ZWQsIGluY2x1ZGluZyBkYXRlLCBhbW91bnQsIGFuZCBzb3VyY2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSA0MTM3Ojwvc3Ryb25nPiBJZiB5b3UgaGF2ZSB1bnJlcG9ydGVkIHRpcHMgc3ViamVjdCB0byBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRheC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5IEZvcm1zOjwvc3Ryb25nPiAxMDk5LU1JU0MsIDEwOTktTkVDLCBvciAxMDk5LUsgaWYgeW91IHJlY2VpdmVkIHRpcHMgYXMgYW4gaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciB0aHJvdWdoIHBheW1lbnQgcGxhdGZvcm1zLjwvbGk+XG4gICAgPC9vbD5cblxuICAgIDxwPjxzdHJvbmc+SW1wb3J0YW50IE5vdGVzOjwvc3Ryb25nPjwvcD5cbiAgICA8dWw+XG4gICAgICAgIDxsaT5BbGwgdGlwcyBhcmUgdGF4YWJsZSBpbmNvbWUsIGluY2x1ZGluZyBjYXNoIHRpcHMsIGNyZWRpdCBjYXJkIHRpcHMsIGFuZCB0aXBzIGZyb20gdGlwIHBvb2xzLjwvbGk+XG4gICAgICAgIDxsaT5UaXBzIHRvdGFsaW5nICQyMCBvciBtb3JlIHBlciBtb250aCBmcm9tIGFueSBzaW5nbGUgZW1wbG95ZXIgbXVzdCBiZSByZXBvcnRlZC48L2xpPlxuICAgICAgICA8bGk+S2VlcCBhY2N1cmF0ZSByZWNvcmRzIG9mIGFsbCB0aXBzIHJlY2VpdmVkIHRocm91Z2hvdXQgdGhlIHllYXIuPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGRvY3VtZW50YXRpb24gbGlzdGVkIGFib3ZlIHNvIHdlIGNhbiBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIHRpcCBpbmNvbWUgb24geW91ciB0YXggcmV0dXJuLjwvcD5gXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlZHVjZWQgVGF4IG9uIFRpcHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJSZWR1Y2VkIFRheCBvbiBUaXBzIChPQkJCQSkgRG9jdW1lbnRhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdSBpbmRpY2F0ZWQgeW91IHdhbnQgdG8gY2xhaW0gdGhlIDxzdHJvbmc+UmVkdWNlZCBUYXggb24gVGlwczwvc3Ryb25nPiBkZWR1Y3Rpb24gdW5kZXIgdGhlIE9uZSBCaWcgQmVhdXRpZnVsIEJpbGwgQWN0IChPQkJCQSkuIFRoaXMgZGVkdWN0aW9uIGFsbG93cyBxdWFsaWZ5aW5nIHRpcHBlZCB3b3JrZXJzIHRvIGV4Y2x1ZGUgdXAgdG8gJDI1LDAwMCBpbiB0aXBzIGZyb20gdGF4YWJsZSBpbmNvbWUgZm9yIHRheCB5ZWFycyAyMDI1LTIwMjguPC9wPlxuXG4gICAgPHA+PHN0cm9uZz5FbGlnaWJpbGl0eSBSZXF1aXJlbWVudHM6PC9zdHJvbmc+PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+T2NjdXBhdGlvbiBUZXN0Ojwvc3Ryb25nPiBZb3VyIG9jY3VwYXRpb24gbXVzdCBoYXZlIGN1c3RvbWFyaWx5IHJlY2VpdmVkIHRpcHMgYmVmb3JlIERlY2VtYmVyIDMxLCAyMDI0IChlLmcuLCBzZXJ2ZXIsIGJhcnRlbmRlciwgaGFpcmRyZXNzZXIsIHZhbGV0LCBkZWxpdmVyeSBkcml2ZXIpLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZpbGluZyBTdGF0dXM6PC9zdHJvbmc+IFlvdSBtdXN0IGZpbGUgYSBqb2ludCByZXR1cm4gaWYgbWFycmllZC4gVGhpcyBkZWR1Y3Rpb24gaXMgbm90IGF2YWlsYWJsZSBmb3IgTWFycmllZCBGaWxpbmcgU2VwYXJhdGVseS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgUGhhc2Utb3V0Ojwvc3Ryb25nPiBUaGUgZGVkdWN0aW9uIHBoYXNlcyBvdXQgYXQgJDE1MCwwMDAgTUFHSSAoc2luZ2xlL2hlYWQgb2YgaG91c2Vob2xkKSBvciAkMzAwLDAwMCBNQUdJIChtYXJyaWVkIGZpbGluZyBqb2ludGx5KS48L2xpPlxuICAgIDwvb2w+XG5cbiAgICA8cD48c3Ryb25nPlJlcXVpcmVkIERvY3VtZW50YXRpb246PC9zdHJvbmc+PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+Vy0yIEZvcm06PC9zdHJvbmc+IEJveCA3IChTb2NpYWwgU2VjdXJpdHkgdGlwcykgYW5kIEJveCA4IChBbGxvY2F0ZWQgdGlwcyk8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDQwNzAgb3IgRGFpbHkgVGlwIExvZzo8L3N0cm9uZz4gUmVjb3JkcyBvZiB0aXBzIHJlcG9ydGVkIHRvIHlvdXIgZW1wbG95ZXI8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDQxMzc6PC9zdHJvbmc+IFJlcXVpcmVkIGlmIHlvdSBoYXZlIHVucmVwb3J0ZWQgdGlwcyBzdWJqZWN0IHRvIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUgdGF4PC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+MTA5OS1NSVNDLCAxMDk5LU5FQywgb3IgMTA5OS1LOjwvc3Ryb25nPiBGb3IgdGlwcyByZWNlaXZlZCBhcyBhIG5vbi1lbXBsb3llZSAoZS5nLiwgaW5kZXBlbmRlbnQgY29udHJhY3Rvcik8L2xpPlxuICAgIDwvb2w+XG5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSBhbGwgYXBwbGljYWJsZSBkb2N1bWVudGF0aW9uIHRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBSZWR1Y2VkIFRheCBvbiBUaXBzIGRlZHVjdGlvbiBhbmQgdmVyaWZ5IGVsaWdpYmlsaXR5IHJlcXVpcmVtZW50cyBhcmUgbWV0LjwvcD5gXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk92ZXJ0aW1lIENvbXBlbnNhdGlvbiBEZWR1Y3Rpb25cIixcbiAgICBhY3Rpb25UaXRsZTogYE92ZXJ0aW1lIENvbXBlbnNhdGlvbiBEZWR1Y3Rpb24gRG9jdW1lbnRhdGlvbiAoT0JCQkEpYCxcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5VbmRlciB0aGUgT25lIEJpZyBCZWF1dGlmdWwgQmlsbCBBY3QgKE9CQkJBKSDCpzcwMjAyLCB5b3UgbWF5IGJlIGVsaWdpYmxlIHRvIGRlZHVjdFxuICAgIHF1YWxpZmllZCBvdmVydGltZSBjb21wZW5zYXRpb24gcGFpZCBpbiBleGNlc3Mgb2YgeW91ciByZWd1bGFyIHJhdGUuIFRoaXMgZGVkdWN0aW9uIGlzIGF2YWlsYWJsZSBmb3JcbiAgICB0YXggeWVhciAyMDI1IGFuZCBiZXlvbmQuPC9wPlxuICAgIDxwPlRvIGNsYWltIHRoaXMgZGVkdWN0aW9uLCBwbGVhc2UgcHJvdmlkZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5QYXkgc3R1YnMgb3IgcGF5cm9sbCByZWNvcmRzPC9zdHJvbmc+IHNob3dpbmcgaG91cnMgd29ya2VkLCByZWd1bGFyIHJhdGUsIGFuZCBvdmVydGltZVxuICAgICAgICBwYXkgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5UaW1lIHNoZWV0cyBvciBsb2dzPC9zdHJvbmc+IGRvY3VtZW50aW5nIGhvdXJzIHdvcmtlZCBpbiBleGNlc3Mgb2YgNDAgcGVyIHdlZWsuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSBXLTI8L3N0cm9uZz4gLSBDaGVjayBib3ggMTQgZm9yIHNlcGFyYXRlbHkgcmVwb3J0ZWQgb3ZlcnRpbWUgY29tcGVuc2F0aW9uXG4gICAgICAgIChpZiBwcm92aWRlZCBieSB5b3VyIGVtcGxveWVyKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FbXBsb3ltZW50IGNvbnRyYWN0IG9yIGVtcGxveWVyIHN0YXRlbWVudDwvc3Ryb25nPiBjb25maXJtaW5nIHlvdXIgRkxTQS1lbGlnaWJsZVxuICAgICAgICAobm9uLWV4ZW1wdCkgc3RhdHVzIGFuZCBvdmVydGltZSBjYWxjdWxhdGlvbiBtZXRob2QuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPjxzdHJvbmc+RGVkdWN0aW9uIExpbWl0czo8L3N0cm9uZz48L3A+XG4gICAgPHVsPlxuICAgICAgICA8bGk+TWF4aW11bSAkMTIsNTAwIGZvciBzaW5nbGUgZmlsZXJzPC9saT5cbiAgICAgICAgPGxpPk1heGltdW0gJDI1LDAwMCBmb3IgbWFycmllZCBmaWxpbmcgam9pbnRseTwvbGk+XG4gICAgICAgIDxsaT5QaGFzZS1vdXQgYXBwbGllcyBiYXNlZCBvbiBtb2RpZmllZCBhZGp1c3RlZCBncm9zcyBpbmNvbWUgKE1BR0kpPC9saT5cbiAgICA8L3VsPlxuICAgIDxwPklmIHlvdSBhcmUgdW5zdXJlIG9mIHlvdXIgRkxTQSBlbGlnaWJpbGl0eSBvciBuZWVkIGhlbHAgY2FsY3VsYXRpbmcgcXVhbGlmaWVkIG92ZXJ0aW1lLFxuICAgIHBsZWFzZSBjb250YWN0IHVzLjwvcD5gXG4gIH1cbl07XG4iXX0=
|