@adonoustech/bacon-tax 2.8.0 → 2.8.1

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.
@@ -2250,7 +2250,7 @@ exports.ActionTaxFragments = [
2250
2250
  <li>Total miles driven during the tax year</li>
2251
2251
  <li>Business miles driven during the tax year</li>
2252
2252
  <li>Commuting miles (if applicable)</li>
2253
- <li>Actual expenses (if you prefer this method over standard mileage rate):
2253
+ <li>Actual expenses:
2254
2254
  <ul>
2255
2255
  <li>Gas and oil</li>
2256
2256
  <li>Maintenance and repairs</li>
@@ -2271,4 +2271,4 @@ exports.ActionTaxFragments = [
2271
2271
  <p>This data will help us accurately calculate your vehicle-related deductions and optimize your tax return. If you have any questions about what qualifies as business use or how to track your mileage, please don't hesitate to ask.</p>`
2272
2272
  }
2273
2273
  ];
2274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXRheC1mcmFnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uLXRlbXMvYWN0aW9uLXRheC1mcmFnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxrQkFBa0IsR0FBRztJQUNoQztRQUNFLGdCQUFnQixFQUFFLHdCQUF3QjtRQUMxQyxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLGtCQUFrQixFQUFFOzs7Ozs7OzsrSUFRdUg7S0FDNUk7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUseURBQXlEO1FBQ3RFLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dVBBMkIrTjtLQUNwUDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsbUNBQW1DO1FBQ2hELGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzhKQWFzSTtLQUMzSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7a1BBYTBOO0tBQy9PO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OzsySEFhbUc7S0FDeEg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs2T0FXcU47S0FDMU87SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Q0FTdkI7S0FDRTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JB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UUFDRSxnQkFBZ0IsRUFBRSwwQkFBMEI7UUFDNUMsV0FBVyxFQUFFLDBCQUEwQjtRQUN2QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dMQXFCd0o7S0FDN0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7K0RBa0J1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsdUJBQXVCO1FBQ3pDLFdBQVcsRUFBRSxtQ0FBbUM7UUFDaEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7O21MQWMySjtLQUNoTDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsa0NBQWtDO1FBQ3BELFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dQQTZCd047S0FDN087Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFjdGlvblRheEZyYWdtZW50cyA9IFtcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlByaW9yIFllYXIgVGF4IFJldHVybnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBgUHJvdmlkZSBQcmlvciBZZWFyIFRheCBSZXR1cm5zYCxcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJucyBhbmQgcmVxdWlyZSB5b3VyIGFzc2lzdGFuY2UgdG8gZW5zdXJlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3MuIE9uZSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiB3ZSBuZWVkIGlzIHlvdXIgPHN0cm9uZz5QcmlvciBZZWFyIFRheCBSZXR1cm5zPC9zdHJvbmc+LiBUaGlzIGRvY3VtZW50IGlzIGVzc2VudGlhbCBmb3Igc2V2ZXJhbCByZWFzb25zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvOiB2ZXJpZnlpbmcgY2FycnktZm9yd2FyZCBhbW91bnRzLCBjb21wYXJpbmcgeWVhci1vdmVyLXllYXIgaW5jb21lIGFuZCBkZWR1Y3Rpb25zLCBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCBsYXdzLjwvcD5cclxuICAgIDxwPlRvIGZhY2lsaXRhdGUgeW91ciB0YXggcHJlcGFyYXRpb24sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGNvcHkgb2YgeW91ciA8c3Ryb25nPkZlZGVyYWwgdGF4IHJldHVybjwvc3Ryb25nPiBmb3IgdGhlIGxhc3QgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+QSBjb3B5IG9mIHlvdXIgPHN0cm9uZz5TdGF0ZSB0YXggcmV0dXJuPC9zdHJvbmc+IGZvciB0aGUgbGFzdCB0YXggeWVhciwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgPHN0cm9uZz5ub3RpY2VzIG9yIGFtZW5kbWVudHM8L3N0cm9uZz4gcmVsYXRlZCB0byB5b3VyIHByaW9yIHllYXIgdGF4IHJldHVybnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgZGlmZmljdWx0eSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgbGV0IHVzIGtub3cgYXMgc29vbiBhcyBwb3NzaWJsZSBzbyB3ZSBjYW4gZGlzY3VzcyBhbHRlcm5hdGl2ZSBzb2x1dGlvbnMuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBQcm92aWRpbmcgdGhlc2Ugd2lsbCBlbmFibGUgdXMgdG8gY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24gd2l0aG91dCBkZWxheS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU3RhdHV0b3J5IEV4dGVuc2lvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBgRGV0ZXJtaW5pbmcgRWxpZ2liaWxpdHkgZm9yIFN0YXR1dG9yeSBGaWxpbmcgRXh0ZW5zaW9uc2AsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBlbnN1cmUgdGhhdCB3ZSBjYW4gYWNjdXJhdGVseSBkZXRlcm1pbmUgaWYgeW91IHF1YWxpZnkgZm9yIHN0YXR1dG9yeSBmaWxpbmcgZXh0ZW5zaW9ucyBmb3IgeW91ciB0YXggcmV0dXJucywgd2UgcmVxdWlyZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIHlvdS4gUGxlYXNlIHNlZSBiZWxvdyB0aGUgY2F0ZWdvcmllcyBvZiBpbmZvcm1hdGlvbiBuZWVkZWQgYmFzZWQgb24gZGlmZmVyZW50IGVsaWdpYmlsaXR5IGNyaXRlcmlhOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5GZWRlcmFsIERpc2FzdGVyIEFyZWFzPC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBwcmltYXJ5IHJlc2lkZW5jZSBsb2NhdGlvbiBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgY29ycmVzcG9uZGVuY2UgcmVjZWl2ZWQgcmVnYXJkaW5nIGRpc2FzdGVyIGRlY2xhcmF0aW9ucyBpbiB5b3VyIGFyZWEuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxpdmluZyBBYnJvYWQ8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlByb29mIG9mIHJlc2lkZW5jZSBvdXRzaWRlIHRoZSBVbml0ZWQgU3RhdGVzIGZvciBtb3JlIHRoYW4gMzMwIGZ1bGwgZGF5cyB3aXRoaW4gYSAxMi1tb250aCBwZXJpb2QuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIHN1cHBvcnRpbmcgeW91ciBwaHlzaWNhbCBwcmVzZW5jZSBvciBib25hIGZpZGUgcmVzaWRlbmNlIGluIGEgZm9yZWlnbiBjb3VudHJ5LjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BY3RpdmUgTWlsaXRhcnk8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gaW5kaWNhdGluZyBhY3RpdmUgZHV0eSBzdGF0dXMsIGluY2x1ZGluZyBkYXRlcyBvZiBzZXJ2aWNlIHdpdGhpbiB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCBvcmRlcnMgZm9yIG92ZXJzZWFzIGRlcGxveW1lbnQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbWJhdCBab25lPC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5PZmZpY2lhbCBvcmRlcnMgZGVtb25zdHJhdGluZyB5b3VyIGRlcGxveW1lbnQgdG8gYSBjb21iYXQgem9uZSwgaW5jbHVkaW5nIHRoZSBzcGVjaWZpYyBkYXRlcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSByZWxldmFudCBjb21tdW5pY2F0aW9uIGZyb20gdGhlIERlcGFydG1lbnQgb2YgRGVmZW5zZSBvciBvdGhlciBvZmZpY2lhbCBib2RpZXMgcmVnYXJkaW5nIHlvdXIgc2VydmljZSBpbiBhIGNvbWJhdCB6b25lLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgeW91IHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIGFjY3VyYXRlIGFuZCB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRlcGVuZGVudHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlcXVlc3QgZm9yIERlcGVuZGVudCBJbmZvcm1hdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCBkb2N1bWVudHMgYW5kIG5lZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBkZXBlbmRlbnRzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFwcGx5aW5nIHRoZSBtb3N0IGJlbmVmaWNpYWwgZGVwZW5kZW5jeSB0ZXN0cywgaW5jbHVkaW5nIHF1YWxpZmljYXRpb25zIGZvciBIZWFkIG9mIEhvdXNlaG9sZCAoSE9IKSwgQ2hpbGQgVGF4IENyZWRpdCwgYW5kIG90aGVyIHJlbGF0ZWQgYmVuZWZpdHMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBmb3IgZWFjaCBvZiB5b3VyIGNsYWltZWQgZGVwZW5kZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RnVsbCBOYW1lOjwvc3Ryb25nPiBUaGUgY29tcGxldGUgbGVnYWwgbmFtZSBvZiB0aGUgZGVwZW5kZW50LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKSBvciBUYXhwYXllciBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKFRJTik6PC9zdHJvbmc+IFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBpZGVudGlmaWNhdGlvbiBwdXJwb3Nlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgQmlydGg6PC9zdHJvbmc+IEhlbHBzIHRvIGRldGVybWluZSBlbGlnaWJpbGl0eSBmb3IgY2VydGFpbiBjcmVkaXRzIGxpa2UgdGhlIENoaWxkIFRheCBDcmVkaXQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZWxhdGlvbnNoaXAgdG8gWW91Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkZXBlbmRlbnQncyByZWxhdGlvbnNoaXAgKHNvbiwgZGF1Z2h0ZXIsIHN0ZXBjaGlsZCwgZm9zdGVyIGNoaWxkLCBicm90aGVyLCBzaXN0ZXIsIGV0Yy4pIHRvIHlvdS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlc2lkZW5jeTo8L3N0cm9uZz4gQ29uZmlybSB0aGUgZGVwZW5kZW50IGxpdmVkIHdpdGggeW91IGZvciBtb3JlIHRoYW4gaGFsZiB0aGUgeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZpbmFuY2lhbCBTdXBwb3J0Ojwvc3Ryb25nPiBDb25maXJtIHlvdSBwcm92aWRlZCBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgZGVwZW5kZW504oCZcyBmaW5hbmNpYWwgc3VwcG9ydCBmb3IgdGhlIHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5DaXRpemVuc2hpcDo8L3N0cm9uZz4gQ29uZmlybSB0aGUgZGVwZW5kZW50IGlzIGEgVS5TLiBjaXRpemVuLCBVLlMuIG5hdGlvbmFsLCBvciBhIHJlc2lkZW50IGFsaWVuLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TWFyaXRhbCBTdGF0dXM6PC9zdHJvbmc+IEluZGljYXRlIHdoZXRoZXIgdGhlIGRlcGVuZGVudCBpcyBtYXJyaWVkIGFuZCwgaWYgc28sIHdoZXRoZXIgdGhleSBhcmUgZmlsaW5nIGpvaW50bHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgSW5mb3JtYXRpb246PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgZGV0YWlscyByZWdhcmRpbmcgYW55IGluY29tZSB0aGUgZGVwZW5kZW50IG1heSBoYXZlIGVhcm5lZCBvciByZWNlaXZlZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgeW91IHByb3ZpZGUgY29tcGxldGUgYW5kIGFjY3VyYXRlIGluZm9ybWF0aW9uIHRvIGF2b2lkIGFueSBkZWxheXMgaW4gdGhlIHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgZnVydGhlciBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhlYWQgb2YgSG91c2Vob2xkXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJIZWFkIG9mIEhvdXNlaG9sZCBGaWxpbmdcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgY29tcGxpYW50IHRheCBmaWxpbmcgdW5kZXIgdGhlIFwiSGVhZCBvZiBIb3VzZWhvbGRcIiBzdGF0dXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uIFRoaXMgc3RhdHVzIGNhbiBwcm92aWRlIHNpZ25pZmljYW50IHRheCBiZW5lZml0cywgYW5kIGl0IGlzIGNydWNpYWwgdGhhdCBhbGwgSVJTIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBQbGVhc2UgcHJvdmlkZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5NYXJpdGFsIFN0YXR1czo8L3N0cm9uZz4gQ29uZmlybWF0aW9uIG9mIHlvdXIgbWFyaXRhbCBzdGF0dXMgYXMgb2YgdGhlIGxhc3QgZGF5IG9mIHRoZSB0YXggeWVhciAoZS5nLiwgc2luZ2xlLCBkaXZvcmNlZCwgbGVnYWxseSBzZXBhcmF0ZWQpLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Ib3VzZWhvbGQgRXhwZW5zZXM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgaW5kaWNhdGluZyB0aGF0IHlvdSBwYWlkIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBjb3N0cyBvZiBrZWVwaW5nIHVwIGEgaG9tZSBmb3IgdGhlIHRheCB5ZWFyLiBUaGlzIGluY2x1ZGVzIHJlbnQsIG1vcnRnYWdlIGludGVyZXN0LCBwcm9wZXJ0eSB0YXhlcywgdXRpbGl0aWVzLCByZXBhaXJzLCBtYWludGVuYW5jZSwgYW5kIGdyb2Nlcmllcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UXVhbGlmeWluZyBQZXJzb246PC9zdHJvbmc+IEluZm9ybWF0aW9uIG9uIHRoZSBxdWFsaWZ5aW5nIHBlcnNvbihzKSB3aG8gbGl2ZWQgd2l0aCB5b3UgaW4gdGhlIGhvbWUgZm9yIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSB5ZWFyLCBleGNlcHQgZm9yIHRlbXBvcmFyeSBhYnNlbmNlcyBzdWNoIGFzIHNjaG9vbC4gUGxlYXNlIGluY2x1ZGU6XHJcbiAgICAgIDx1bD5cclxuICAgICAgPGxpPkZ1bGwgbmFtZSBhbmQgcmVsYXRpb25zaGlwIHRvIHlvdSAoZS5nLiwgY2hpbGQsIHBhcmVudCwgc2libGluZykuPC9saT5cclxuICAgICAgPGxpPkR1cmF0aW9uIG9mIHJlc2lkZW5jeSBhdCB5b3VyIGhvbWUgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+U3VwcG9ydGluZyBkb2N1bWVudHMgKGJpcnRoIGNlcnRpZmljYXRlcywgc2Nob29sIHJlY29yZHMsIGV0Yy4pIHByb3ZpbmcgdGhlIHJlc2lkZW5jeSBhbmQgcmVsYXRpb25zaGlwLjwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBTdXBwb3J0Ojwvc3Ryb25nPiBBbnkgZnVydGhlciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgeW91ciBjbGFpbSBmb3IgdGhlIEhlYWQgb2YgSG91c2Vob2xkIGZpbGluZyBzdGF0dXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugbm90ZSB0aGF0IHByb3ZpZGluZyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciB5b3VyIGJlbmVmaXQgYW5kIHRvIGNvbXBseSB3aXRoIHRheCBsYXdzLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRldGFpbHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZXNpZGVuY3kgU3RhdHVzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbmZvcm1hdGlvbiBvbiBSZXNpZGVuY3kgU3RhdHVzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgZWl0aGVyIHlvdSBvciB5b3VyIHNwb3VzZSBpcyBub3QgYSBVLlMuIGNpdGl6ZW4uIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHlvdXIgdGF4IHN0YXR1cywgd2UgbmVlZCB0byBhcHBseSB0aGUgbmVjZXNzYXJ5IFRheCBSZXNpZGVuY3kgVGVzdHMsIHdoaWNoIGluY2x1ZGUgdGhlIDxzdHJvbmc+R3JlZW4gQ2FyZCBUZXN0PC9zdHJvbmc+IGFuZCB0aGUgPHN0cm9uZz5TdWJzdGFudGlhbCBQcmVzZW5jZSBUZXN0PC9zdHJvbmc+LiBUaGlzIHdpbGwgaGVscCB1cyBlbnN1cmUgeW91ciB0YXggcmV0dXJucyBhcmUgY29tcGxldGVkIGNvcnJlY3RseSBhbmQgY29tcGx5IHdpdGggVS5TLiByZWd1bGF0aW9ucy48L3A+XHJcblxyXG4gICAgPHA+VG8gcHJvY2VlZCwgd2Uga2luZGx5IGFzayB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5HcmVlbiBDYXJkIFN0YXR1czo8L3N0cm9uZz4gUGxlYXNlIGNvbmZpcm0gaWYgeW91IG9yIHlvdXIgc3BvdXNlIGhhdmUgYmVlbiBpc3N1ZWQgYSBVLlMuIGdyZWVuIGNhcmQgKExhd2Z1bCBQZXJtYW5lbnQgUmVzaWRlbnQgQ2FyZCkgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgdGF4IHllYXIuIElmIHllcywgcHJvdmlkZSBhIGNvcHkgb2YgdGhlIGdyZWVuIGNhcmQgb3IgdGhlIG9mZmljaWFsIGRvY3VtZW50IGNvbmZpcm1pbmcgdGhlIHN0YXR1cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgQXJyaXZhbCBpbiB0aGUgVS5TLjo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGVzIHdoZW4geW91IGFuZC9vciB5b3VyIHNwb3VzZSBmaXJzdCBhcnJpdmVkIGluIHRoZSBVLlMuIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UcmF2ZWwgSGlzdG9yeTo8L3N0cm9uZz4gQSBkZXRhaWxlZCBsaXN0IG9mIGFsbCB0aGUgZGF0ZXMgeW91IGFuZC9vciB5b3VyIHNwb3VzZSBlbnRlcmVkIGFuZCBsZWZ0IHRoZSBVLlMuIGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdGhlIFN1YnN0YW50aWFsIFByZXNlbmNlIFRlc3QuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5WaXNhIFR5cGU6PC9zdHJvbmc+IElmIHlvdSBvciB5b3VyIHNwb3VzZSBhcmUgb24gYSB2aXNhLCBwbGVhc2Ugc3BlY2lmeSB0aGUgdHlwZSBhbmQgcHJvdmlkZSBhIGNvcHkgb2YgdGhlIHZpc2EuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFRheCBGaWxpbmdzOjwvc3Ryb25nPiBDb3BpZXMgb2YgbGFzdCB5ZWFyJ3MgdGF4IHJldHVybnMsIGlmIGFwcGxpY2FibGUuIFRoaXMgaW5mb3JtYXRpb24gY2FuIHByb3ZpZGUgY29udGV4dCBhbmQgaGVscCBkZXRlcm1pbmUgcmVzaWRlbmN5IHN0YXR1cyBtb3JlIGFjY3VyYXRlbHkuPC9saT5cclxuICAgIDwvb2w+XHJcblxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhciBhbmQgbGVnaWJsZS4gWW91IGNhbiBzZW5kIHRoZW0gdG8gdXMgdmlhIGVtYWlsIG9yIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBGb3IgYW55IHF1ZXN0aW9ucyBvciBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XHJcblxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IHdpdGggeW91ciB0YXggcHJlcGFyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkpvaW50IFRheCBSZWxpZWZcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkpvaW50IFRheCBSZWxpZWYgRGV0YWlsc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gYXNzaXN0IHlvdSBlZmZlY3RpdmVseSB3aXRoIHlvdXIgcmVxdWVzdCBmb3Igam9pbnQgdGF4IHJlbGllZiwgd2UgbmVlZCB0byBjb2xsZWN0IHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgeW91ciBzaXR1YXRpb24gdGhvcm91Z2hseS4gVGhpcyB3aWxsIGhlbHAgdXMgZGV0ZXJtaW5lIHRoZSBtb3N0IHN1aXRhYmxlIHR5cGUgb2YgcmVsaWVmIGZvciB5b3VyIGNpcmN1bXN0YW5jZXMsIHdoaWNoIG1heSBpbmNsdWRlIElubm9jZW50IFNwb3VzZSBSZWxpZWYsIEluanVyZWQgU3BvdXNlIEFsbG9jYXRpb24sIFNlcGFyYXRpb24gb2YgTGlhYmlsaXR5IFJlbGllZiwgb3IgRXF1aXRhYmxlIFJlbGllZi4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Db21wbGV0ZSBUYXggUmV0dXJuczo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCB0YXggcmV0dXJucyBmb3IgdGhlIHllYXJzIHlvdSBhcmUgcmVxdWVzdGluZyByZWxpZWYuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgU3RhdGVtZW50Ojwvc3Ryb25nPiBBIHdyaXR0ZW4gc3RhdGVtZW50IGV4cGxhaW5pbmcgd2h5IHlvdSBiZWxpZXZlIHlvdSBxdWFsaWZ5IGZvciByZWxpZWYsIGluY2x1ZGluZyBhbnkgc3BlY2lmaWMgZXZlbnRzIG9yIGNpcmN1bXN0YW5jZXMgeW91IHdhbnQgdXMgdG8gY29uc2lkZXIuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IFByb29mIG9mIHlvdXIgY3VycmVudCBpbmNvbWUgYW5kIHRoYXQgb2YgeW91ciBzcG91c2UgaWYgYXBwbGljYWJsZSwgc3VjaCBhcyByZWNlbnQgcGF5IHN0dWJzLCBXLTIgZm9ybXMsIG9yIG90aGVyIGluY29tZSBzdGF0ZW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZpbmFuY2lhbCBTaXR1YXRpb246PC9zdHJvbmc+IERvY3VtZW50cyBzaG93aW5nIHlvdXIgY3VycmVudCBmaW5hbmNpYWwgc2l0dWF0aW9uLCBpbmNsdWRpbmcgYmFuayBzdGF0ZW1lbnRzLCBtb250aGx5IGJpbGxzLCBhbmQgYW55IG90aGVyIGxpYWJpbGl0aWVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgTWFyaXRhbCBTdGF0dXM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIGxlZ2FsIGRvY3VtZW50cyByZWxhdGVkIHRvIHNlcGFyYXRpb24sIGRpdm9yY2UsIG9yIGFubnVsbWVudC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZXNpZGVuY2U6PC9zdHJvbmc+IERvY3VtZW50cyB0aGF0IHByb3ZlIHdoZXJlIGVhY2ggb2YgeW91IGhhcyBsaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFycyBpbiBxdWVzdGlvbi48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5BbnkgQ29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgSVJTOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSByZWNlaXZlZCBhbnkgbm90aWNlcyBvciBsZXR0ZXJzIGZyb20gdGhlIElSUyByZWdhcmRpbmcgeW91ciBqb2ludCB0YXggbGlhYmlsaXR5LCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGNsZWFybHkgbGVnaWJsZS4gWW91IG1heSBzZW5kIHRoZW0gdmlhIGVtYWlsLCBvciB1cGxvYWQuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gd2hhdCB0byBwcm92aWRlLCBkb24ndCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHRoaXMgcHJvY2VzcyBjYW4gYmUgY29tcGxleCwgYnV0IHdlIGFyZSBoZXJlIHRvIGd1aWRlIHlvdSB0aHJvdWdoIGl0LiBPdXIgZ29hbCBpcyB0byBlbnN1cmUgd2UgaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB5b3VyIHNpdHVhdGlvbiB0byBhZHZvY2F0ZSBmb3IgdGhlIG1vc3QgZmF2b3JhYmxlIG91dGNvbWUgb24geW91ciBiZWhhbGYuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIjEwOTkgTkVDIEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiMTA5OSBORUMgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgcmVxdWlyZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBhbGwgeW91ciBzb3VyY2VzIG9mIGluY29tZS4gU3BlY2lmaWNhbGx5LCB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHlvdXIgMTA5OSBORUMgSW5jb21lLiBUaGUgMTA5OS1ORUMgZm9ybSBpcyBjcnVjaWFsIGZvciBjb3JyZWN0bHkgcmVwb3J0aW5nIHlvdXIgbm9uLWVtcGxveWVlIGNvbXBlbnNhdGlvbi48L3A+XHJcbiAgICA8cD5UbyBlbnN1cmUgYSB0aG9yb3VnaCBhbmQgYWNjdXJhdGUgdGF4IHByZXBhcmF0aW9uLCBwbGVhc2UgcHJvdmlkZSB1cyB3aXRoIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48Yj5BbGwgMTA5OS1ORUMgZm9ybXM8L2I+IHlvdSByZWNlaXZlZCBmb3IgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxiPmFkZGl0aW9uYWwgbm9uLWVtcGxveWVlIGNvbXBlbnNhdGlvbjwvYj4gbm90IHJlcG9ydGVkIG9uIGEgMTA5OS1ORUMgZm9ybS48L2xpPlxyXG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiByZWdhcmRpbmcgPGI+ZXhwZW5zZXMgcmVsYXRlZCB0byB5b3VyIDEwOTkgTkVDIGluY29tZTwvYj4sIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBub3QgeWV0IHJlY2VpdmVkIGFsbCB5b3VyIDEwOTktTkVDIGZvcm1zLCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCBwcm92aWRlIGFuIGVzdGltYXRlIG9mIHdoZW4geW91IGV4cGVjdCB0byByZWNlaXZlIHRoZW0uIFRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgaW5jb21lIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgcGVuYWx0aWVzIG9yIGF1ZGl0cyBmcm9tIHRoZSBJUlMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHJlYWNoIG91dCB0byB1cyBkaXJlY3RseSBzaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbi4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZCB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIHByb2Nlc3NlZCBlZmZpY2llbnRseSBhbmQgYWNjdXJhdGVseS48L3A+XHJcbmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNjaGVkdWxlIEstMSBJbmZvcm1hdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2NoZWR1bGUgSy0xIEluZm9ybWF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIHRoZSBwcmVzZW5jZSBvZiBTY2hlZHVsZSBLIGluY29tZSBmb3IgdGhlIGN1cnJlbnQgdGF4IHllYXIuIEluIG9yZGVyIHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4sIGl0IGlzIGltcGVyYXRpdmUgdGhhdCB3ZSBnYXRoZXIgYWxsIG5lY2Vzc2FyeSBkb2N1bWVudHMgcmVsYXRlZCB0byB0aGlzIGluY29tZS48L3A+XHJcbiAgICA8cD5JZiB3ZSBhcmUgcHJlcGFyaW5nIHlvdXIgYnVzaW5lc3MgcmV0dXJuLCByZXN0IGFzc3VyZWQgdGhhdCB3ZSB3aWxsIGdlbmVyYXRlIHRoZSBhcHBsaWNhYmxlIFNjaGVkdWxlIEstMShzKSBmb3IgeW91ciBidXNpbmVzcyBpbnRlcmVzdHMuIEhvd2V2ZXIsIGl0IGlzIGVzc2VudGlhbCB0aGF0IHdlIGNvbGxlY3QgY29waWVzIG9mIDxzdHJvbmc+YWxsIG90aGVyIFNjaGVkdWxlIEstMXM8L3N0cm9uZz4geW91IG1heSBoYXZlIHJlY2VpdmVkIHRvIGluY29ycG9yYXRlIGludG8geW91ciBwZXJzb25hbCB0YXggcmV0dXJuLjwvcD4gIFxyXG4gICAgPGgzPlNwZWNpZmljIERvY3VtZW50IFJlcXVlc3Q6PC9oMz5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QW55IGFuZCBhbGwgU2NoZWR1bGUgSy0xKHMpIHlvdSBoYXZlIHJlY2VpdmVkIGZyb206PC9saT5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxsaT5QYXJ0bmVyc2hpcHM8L2xpPlxyXG4gICAgICAgICAgICA8bGk+UyBDb3Jwb3JhdGlvbnM8L2xpPlxyXG4gICAgICAgICAgICA8bGk+RXN0YXRlIG9yIFRydXN0czwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgPHN0cm9uZz5jbGVhciBhbmQgbGVnaWJsZTwvc3Ryb25nPiB0byBwcmV2ZW50IGFueSBkZWxheXMgaW4gcHJvY2Vzc2luZyB5b3VyIHJldHVybi4gWW91IG1heSBzdWJtaXQgdGhlc2UgZG9jdW1lbnRzIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLCBvciBjb250YWN0IHVzIHRvIG1ha2UgYWx0ZXJuYXRpdmUgYXJyYW5nZW1lbnRzIGlmIG5lY2Vzc2FyeS48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYW55IGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJPdGhlciBTZWxmLUVtcGxveW1lbnQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJPdGhlciBTZWxmLUVtcGxveW1lbnQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdGhlIHByZXNlbmNlIG9mIHNlbGYtZW1wbG95bWVudCBpbmNvbWUgbm90IHJlcG9ydGVkIHRocm91Z2ggMTA5OS1ORUMgZm9ybXMgb3IgYSBTY2hlZHVsZSBLLTEuIFRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgYWNjdXJhdGUgYW5kIG1heGltaXplcyB5b3VyIGJlbmVmaXRzLCBpdCdzIGNydWNpYWwgd2UgZ2F0aGVyIG1vcmUgZGV0YWlscyBhYm91dCB0aGVzZSBzb3VyY2VzIG9mIGluY29tZS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgZWFjaCBzZWxmLWVtcGxveW1lbnQgYWN0aXZpdHk6PC9zdHJvbmc+IEJyaWVmbHkgZGVzY3JpYmUgdGhlIG5hdHVyZSBvZiBlYWNoIGFjdGl2aXR5IGZyb20gd2hpY2ggeW91IGRlcml2ZSBzZWxmLWVtcGxveW1lbnQgaW5jb21lLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2Ygb3BlcmF0aW9uOjwvc3Ryb25nPiBGb3IgZWFjaCBzZWxmLWVtcGxveW1lbnQgYWN0aXZpdHksIHNwZWNpZnkgdGhlIGRhdGVzIG9yIHJhbmdlIG9mIGRhdGVzIGR1cmluZyB3aGljaCB5b3UgZWFybmVkIGluY29tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGluY29tZSBnZW5lcmF0ZWQ6PC9zdHJvbmc+IEZvciBlYWNoIGFjdGl2aXR5LCBwcm92aWRlIHRoZSB0b3RhbCBhbW91bnQgb2YgaW5jb21lIGVhcm5lZCBiZWZvcmUgYW55IGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZXMgaW5jdXJyZWQ6PC9zdHJvbmc+IExpc3QgYWxsIGV4cGVuc2VzIHJlbGF0ZWQgdG8gZWFjaCBzZWxmLWVtcGxveW1lbnQgYWN0aXZpdHkuIFBsZWFzZSBjYXRlZ29yaXplIHRoZXNlIGV4cGVuc2VzIChlLmcuLCBvZmZpY2Ugc3VwcGxpZXMsIHRyYXZlbCwgYWR2ZXJ0aXNpbmcpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVjb3JkcyBvciBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZXhpc3RpbmcgcmVjb3JkcyBvciBkb2N1bWVudGF0aW9uIHRoYXQgY29ycm9ib3JhdGUgeW91ciBpbmNvbWUgYW5kIGV4cGVuc2VzLCBzdWNoIGFzIGJhbmsgc3RhdGVtZW50cywgcmVjZWlwdHMsIGludm9pY2VzLCBvciBjb250cmFjdHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBhbW91bnQgb2YgdGF4IHlvdSBvd2UgYW5kIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgZGVkdWN0aW9ucyB0aGF0IGNhbiBtaW5pbWl6ZSB5b3VyIHRheCBsaWFiaWxpdHkuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHRpbWVseSBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLCBhbmQgd2UgYXJlIGhlcmUgdG8gaGVscCBldmVyeSBzdGVwIG9mIHRoZSB3YXkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVtcGxveW1lbnQgV2FnZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkVtcGxveW1lbnQgV2FnZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgZW50cnVzdGluZyB1cyB3aXRoIHRoZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBBcyBwYXJ0IG9mIG91ciBjb21wcmVoZW5zaXZlIHJldmlldyBhbmQgaW4gb3VyIHF1ZXN0IHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgb2YgeW91ciB0YXggZmlsaW5ncywgd2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHdhZ2VzIGZyb20gZW1wbG95bWVudCBvdmVyIHRoZSBwYXN0IHRheCB5ZWFyLjwvcD5cclxuICAgIDxwPlRvIHByb2NlZWQgZWZmZWN0aXZlbHksIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Vy0yIEZvcm1zOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBjb3BpZXMgb2YgYWxsIFctMiBmb3JtcyByZWNlaXZlZCBmcm9tIHlvdXIgZW1wbG95ZXJzLiBUaGlzIGluY2x1ZGVzIHdhZ2VzIGVhcm5lZCBmcm9tIGFsbCBzb3VyY2VzLCBub3QganVzdCBmcm9tIHRoZSBTLUNvcnBvcmF0aW9uLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VmVyaWZpY2F0aW9uIG9mIFMtQ29ycG9yYXRpb24gV2FnZXM6PC9zdHJvbmc+IElmIHdlIGFyZSBhbHNvIGhhbmRsaW5nIHlvdXIgYnVzaW5lc3MgdGF4ZXMgZm9yIGFuIFMtQ29ycG9yYXRpb24sIHdlIGxpa2VseSBoYXZlIHRoZSB3YWdlIGluZm9ybWF0aW9uIGZvciB0aGF0IGVudGl0eS4gSG93ZXZlciwgZm9yIHRob3JvdWdobmVzcyBhbmQgY29tcGxpYW5jZSwgcGxlYXNlIGNvbmZpcm0gaWYgdGhlIHdhZ2VzIGZyb20gdGhlIFMtQ29ycG9yYXRpb24gYXJlIGZ1bGx5IHJlcHJlc2VudGVkIGluIHRoZSBkb2N1bWVudHMgd2UgYWxyZWFkeSBob2xkLiBUaGlzIHdpbGwgaGVscCB1cyB2ZXJpZnkgdGhhdCBhbGwgaW5jb21lIGlzIGFjY3VyYXRlbHkgcmVwb3J0ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BZGRpdGlvbmFsIEluY29tZSBEb2N1bWVudHM6PC9zdHJvbmc+IFNob3VsZCB5b3UgaGF2ZSBvdGhlciBzb3VyY2VzIG9mIHdhZ2UgaW5jb21lIChlLmcuLCBjb250cmFjdCB3b3JrLCBib251c2VzLCBldGMuKSBub3QgY292ZXJlZCBieSB0aGUgVy0yIGZvcm1zIHByb3ZpZGVkLCBwbGVhc2UgaW5jbHVkZSBhbnkgMTA5OSBmb3JtcyBvciBvdGhlciByZWxldmFudCBkb2N1bWVudGF0aW9uLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBLaW5kbHkgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcm9wZXJ0eSBvciBTZXJ2aWNlcyBMaWV1IFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQcm9wZXJ0eS9TZXJ2aWNlcyBpbiBMaWV1IG9mIFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgcHJvcGVydHkgYW5kL29yIHNlcnZpY2VzIGluIGxpZXUgb2YgdHJhZGl0aW9uYWwgd2FnZXMgZHVyaW5nIHRoZSB0YXggeWVhci4gVGhpcyB0eXBlIG9mIGNvbXBlbnNhdGlvbiBjb25zdGl0dXRlcyB0YXhhYmxlIGluY29tZSBhbmQgbXVzdCBiZSBhY2N1cmF0ZWx5IHJlcG9ydGVkIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgZnVsbHkgY29tcGxpYW50IHdpdGggSVJTIHJlZ3VsYXRpb25zLjwvcD5cclxuICAgIDxwPlRvIGFjY3VyYXRlbHkgcmVjb2duaXplIGFuZCByZXBvcnQgdGhlc2UgaXRlbXMgYXMgdGF4YWJsZSBpbmNvbWUsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBQcm9wZXJ0eSBvciBTZXJ2aWNlczo8L3N0cm9uZz4gUHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGFueSBwcm9wZXJ0eSBvciBzZXJ2aWNlcyB5b3UgcmVjZWl2ZWQuIFBsZWFzZSBpbmNsdWRlIHBoeXNpY2FsIGNoYXJhY3RlcmlzdGljcyBmb3IgcHJvcGVydHkgb3IgdGhlIHNjb3BlIG9mIHNlcnZpY2VzIHJlbmRlcmVkLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5GYWlyIE1hcmtldCBWYWx1ZSBhdCBUaW1lIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IEluZGljYXRlIHRoZSBmYWlyIG1hcmtldCB2YWx1ZSAoRk1WKSBvZiBlYWNoIHByb3BlcnR5IG9yIHNlcnZpY2UgYXQgdGhlIHRpbWUgeW91IHJlY2VpdmVkIGl0LiBJZiB5b3UgaGF2ZSBhbnkgYXBwcmFpc2FscyBvciBkb2N1bWVudHMgdG8gc3VwcG9ydCB0aGUgRk1WLCBwbGVhc2UgaW5jbHVkZSB0aGVtLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9yIEFncmVlbWVudHM6PC9zdHJvbmc+IFByb3ZpZGUgYW55IGRvY3VtZW50YXRpb24gb3Igd3JpdHRlbiBhZ3JlZW1lbnRzIHRoYXQgZGV0YWlsIHRoZSBhcnJhbmdlbWVudCBmb3IgcmVjZWl2aW5nIHByb3BlcnR5IG9yIHNlcnZpY2VzIGluIGxpZXUgb2Ygd2FnZXMuIFRoaXMgY2FuIGluY2x1ZGUgY29udHJhY3RzLCBlbWFpbHMsIG9yIGFueSBmb3JtIG9mIGNvbW11bmljYXRpb24gdGhhdCBvdXRsaW5lcyB0aGUgYWdyZWVtZW50LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUocykgb24gd2hpY2ggeW91IHJlY2VpdmVkIHRoZSBwcm9wZXJ0eSBvciBzZXJ2aWNlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIvUHJvdmlkZXIgSW5mb3JtYXRpb246PC9zdHJvbmc+IFByb3ZpZGUgdGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgcHJvdmlkZWQgdGhlIHByb3BlcnR5IG9yIHNlcnZpY2VzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgYXMgcG9zc2libGUuIEluY29tcGxldGUgb3IgaW5hY2N1cmF0ZSBpbmZvcm1hdGlvbiBtYXkgbGVhZCB0byBkZWxheXMgaW4gdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybiBvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhlIElSUy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiByZWdhcmRpbmcgdGhlIGluZm9ybWF0aW9uIHJlcXVlc3RlZCwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBZb3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgYW5kIGNyaXRpY2FsIGZvciB0aGUgdGltZWx5IGFuZCBhY2N1cmF0ZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRW1wbG95ZWUgQWNjb3VudGFibGUgUGxhblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRW1wbG95ZWUgQWNjb3VudGFibGUgUGxhblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGljZWQgeW91J3ZlIG1lbnRpb25lZCBiZWluZyByZWltYnVyc2VkIGZvciBjZXJ0YWluIGV4cGVuc2VzIHVuZGVyIGFuIEVtcGxveWVlIEFjY291bnRhYmxlIFBsYW4uIFRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcmVpbWJ1cnNlbWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGNvcHkgb2YgdGhlIGZvcm1hbCB3cml0dGVuIEFjY291bnRhYmxlIFBsYW4gcHJvdmlkZWQgYnkgeW91ciBlbXBsb3llci4gVGhpcyBzaG91bGQgb3V0bGluZSB0aGUgZXhwZW5zZSBhbGxvd2FuY2UgYW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHJlaW1idXJzZW1lbnQgcG9saWN5LjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIGZyb20geW91ciBlbXBsb3llciBjb25maXJtaW5nIHlvdXIgcGFydGljaXBhdGlvbiBpbiB0aGUgQWNjb3VudGFibGUgUGxhbi48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIHRoZSBleHBlbnNlcyByZWltYnVyc2VkIHVuZGVyIHRoZSBwbGFuLCBpbmNsdWRpbmcgZGF0ZXMsIGFtb3VudHMsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBleHBlbnNlIChyZWNlaXB0cyBvciBpbnZvaWNlcykgcHJvdmlkZWQgdG8geW91ciBlbXBsb3llciBmb3IgcmVpbWJ1cnNlbWVudCB1bmRlciB0aGUgcGxhbi48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIG9yIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIHRoZSByZWltYnVyc2VtZW50cyBvciB0aGUgQWNjb3VudGFibGUgUGxhbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBzZW5kIHVzIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgd2UgY2FuIHByb2NlZWQgc21vb3RobHkgd2l0aCB5b3VyIHRheCByZXR1cm4gcHJlcGFyYXRpb24uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIEZyaW5nZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZW5zdXJpbmcgYWxsIGZvcm1zIG9mIGNvbXBlbnNhdGlvbiwgaW5jbHVkaW5nIHRheGFibGUgZnJpbmdlIGJlbmVmaXRzLCBhcmUgYWNjdXJhdGVseSByZXBvcnRlZCBvbiB5b3VyIHRheCByZXR1cm5zLiBCYXNlZCBvbiBvdXIgcHJldmlvdXMgY29tbXVuaWNhdGlvbiwgaXQgYXBwZWFycyB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgYmVuZWZpdHMgdGhhdCBuZWVkIHRvIGJlIHJldmlld2VkIGZ1cnRoZXIuIFRvIGFzc2lzdCB5b3UgcHJvcGVybHksIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBkZXRhaWxzOjwvcD5cclxuPG9sPlxyXG4gIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIGVhY2ggYmVuZWZpdCByZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZnJpbmdlIGJlbmVmaXRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcGFueSBjYXJzLCBtZW1iZXJzaGlwcywgZWR1Y2F0aW9uYWwgYXNzaXN0YW5jZSwgZXRjLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+VmFsdWUgb2YgZWFjaCBiZW5lZml0Ojwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBiZW5lZml0LiBJZiB5b3UncmUgdW5zdXJlLCBwbGVhc2UgcHJvdmlkZSBhbiBlc3RpbWF0ZSBhbmQgdGhlIGJhc2lzIGZvciB0aGlzIGVzdGltYXRlLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+QW55IGFtb3VudHMgY29udHJpYnV0ZWQgYnkgeW91Ojwvc3Ryb25nPiBJZiB5b3UgbWFkZSBjb250cmlidXRpb25zIHRvd2FyZCB0aGUgY29zdCBvZiBhbnkgYmVuZWZpdCwgcGxlYXNlIHNwZWNpZnkgdGhlIGFtb3VudHMgYW5kIGZvciB3aGljaCBiZW5lZml0cy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkJlbmVmaXQgZG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkLCBzdWNoIGFzIHN0YXRlbWVudHMsIGFncmVlbWVudHMsIG9yIHJlY2VpcHRzLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+RGF0ZXM6PC9zdHJvbmc+IFRoZSBwZXJpb2QgZHVyaW5nIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBiZW5lZml0cy4gSW5jbHVkZSBzcGVjaWZpYyBkYXRlcyBpZiBwb3NzaWJsZS48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkVtcGxveWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgZW1wbG95ZXIocykgcHJvdmlkaW5nIHRoZXNlIGJlbmVmaXRzLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyB0aGUgdGF4YWJsZSB2YWx1ZSBvZiB0aGVzZSBmcmluZ2UgYmVuZWZpdHMgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbjxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOb24gVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk5vbiBUYXhhYmxlIEZyaW5nZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGZpbmFsaXppbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIGlkZW50aWZpZWQgcG90ZW50aWFsIG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyB0aGF0IG1heSBhcHBseSB0byB5b3VyIHNpdHVhdGlvbi4gVG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgb3B0aW1pemUgeW91ciB0YXggb3V0Y29tZSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYW55IG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQ6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBlYWNoIGJlbmVmaXQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIG1heSBpbmNsdWRlIGhlYWx0aCBzYXZpbmdzIGFjY291bnRzIChIU0FzKSwgZW1wbG95ZWUgZGlzY291bnRzLCBwdWJsaWMgdHJhbnNpdCBwYXNzZXMsIGV0Yy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5WYWx1ZSBvZiBlYWNoIGJlbmVmaXQ6PC9zdHJvbmc+IFRoZSBmYWlyIG1hcmtldCB2YWx1ZSAoRk1WKSBvZiBlYWNoIGJlbmVmaXQuIEZvciBub24tdGF4YWJsZSBiZW5lZml0cywgdGhpcyBoZWxwcyBpbiByZWNvcmQta2VlcGluZyBhbmQgY29uZmlybWluZyBleGVtcHRpb24gc3RhdHVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNvbnRyaWJ1dGlvbiBhbW91bnRzLCBpZiBhbnk6PC9zdHJvbmc+IElmIHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvd2FyZHMgYW55IG9mIHRoZXNlIGJlbmVmaXRzLCBpbmRpY2F0ZSB0aGUgYW1vdW50cyBhbmQgZm9yIHdoaWNoIGJlbmVmaXRzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkJlbmVmaXQgZG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IGRvY3VtZW50YXRpb24gdGhhdCBjYW4gY29ycm9ib3JhdGUgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkLCBzdWNoIGFzIHN0YXRlbWVudHMsIGFncmVlbWVudHMsIG9yIHJlY2VpcHRzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSB0aW1lZnJhbWUgZHVyaW5nIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBiZW5lZml0cy4gSW5jbHVkZSBhcyBwcmVjaXNlIGRhdGVzIGFzIHBvc3NpYmxlLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkVtcGxveWVyIG9yIHByb3ZpZGVyIGluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgbmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBlbXBsb3llcihzKSBvciB0aGlyZC1wYXJ0eSBwcm92aWRlcihzKSBvZmZlcmluZyB0aGVzZSBiZW5lZml0cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uIGhlbHBzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCB0aGF0IHlvdSByZWNlaXZlIHRoZSBmdWxsIGFkdmFudGFnZSBvZiBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMuIFBsZWFzZSBsZXQgdXMga25vdyBpZiB5b3UgbmVlZCBhbnkgaGVscCBpZGVudGlmeWluZyBvciBkb2N1bWVudGluZyB0aGVzZSBiZW5lZml0cy48L3A+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSBpcyBoaWdobHkgYXBwcmVjaWF0ZWQgYXMgd2Ugc3RyaXZlIHRvIGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uIGVmZmljaWVudGx5LiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlZldGVyYW4gQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlZBIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnQgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IHJldHVybiwgd2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIFZldGVyYW4gQmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYmVuZWZpdHMsIHdlIGtpbmRseSByZXF1ZXN0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxyXG4gICAgPHA+VG8gYXNzaXN0IHVzIGluIHRoaXMgdGFzaywgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiB0aGUgVmV0ZXJhbiBCZW5lZml0cyB5b3UgcmVjZWl2ZWQsIGluY2x1ZGluZyBhbnkgZGlzYWJpbGl0eSwgZWR1Y2F0aW9uLCBhbmQgcGVuc2lvbiBiZW5lZml0cy48L2xpPlxyXG4gICAgICAgIDxsaT5PZmZpY2lhbCBkb2N1bWVudGF0aW9uIGZvciBlYWNoIHR5cGUgb2YgYmVuZWZpdCByZWNlaXZlZCwgc3VjaCBhcyBhd2FyZCBsZXR0ZXJzIG9yIHN0YXRlbWVudHMgZnJvbSB0aGUgRGVwYXJ0bWVudCBvZiBWZXRlcmFucyBBZmZhaXJzIChWQSkuPC9saT5cclxuICAgICAgICA8bGk+QW55IGNvcnJlc3BvbmRlbmNlIGZyb20gdGhlIFZBIG9yIG90aGVyIHJlbGV2YW50IGVudGl0aWVzIHJlZ2FyZGluZyB0aGUgdGF4YWJpbGl0eSBvZiB5b3VyIGJlbmVmaXRzLjwvbGk+XHJcbiAgICAgICAgPGxpPlRvdGFsIGFtb3VudCByZWNlaXZlZCBmb3IgZWFjaCBiZW5lZml0IHRocm91Z2hvdXQgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBvdGhlciBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gcHJvdmlkZSBjbGFyaXR5IG9uIHRoZSBuYXR1cmUgYW5kIGFtb3VudCBvZiB5b3VyIFZldGVyYW4gQmVuZWZpdHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHdoaWNoIGJlbmVmaXRzIGFyZSB0YXhhYmxlIGFuZCBlbnN1cmluZyB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGUgYW5kIGFjY3VyYXRlLiBQbGVhc2Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gVGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkxpZmUgSW5zdXJhbmNlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJMaWZlIEluc3VyYW5jZSBQYXltZW50c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIG1lbnRpb24gb2YgcmVjZWl2aW5nIGxpZmUgaW5zdXJhbmNlIHBheW1lbnRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgdGhlc2UgcHJvY2VlZHMgYXJlIGluZGVlZCBub24tdGF4YWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCByZWNlaXZlZCBmcm9tIGxpZmUgaW5zdXJhbmNlIHBheW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgcGVydGFpbmluZyB0byB0aGUgbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMuPC9saT5cclxuICAgICAgPGxpPlRoZSBuYW1lIG9mIHRoZSBpbnN1cmVkIGluZGl2aWR1YWwgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UuPC9saT5cclxuICAgICAgPGxpPkFueSBjb21tdW5pY2F0aW9ucyBvciBsZXR0ZXJzIGZyb20gdGhlIGluc3VyYW5jZSBjb21wYW55IHJlZ2FyZGluZyB0aGUgdGF4IHN0YXR1cyBvZiB0aGVzZSBwYXltZW50cy48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlscyByZWdhcmRpbmcgaWYgdGhlIHBvbGljeSB3YXMgcHVyY2hhc2VkIHdpdGggYWZ0ZXItdGF4IG9yIHByZS10YXggZG9sbGFycy48L2xpPlxyXG4gICAgICA8bGk+SWYgYW55IHBvcnRpb24gb2YgdGhlIGxpZmUgaW5zdXJhbmNlIHBheW1lbnQgd2FzIGFuIGludmVzdG1lbnQgcmV0dXJuLCBwbGVhc2UgcHJvdmlkZSByZWxhdGVkIGRvY3VtZW50cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gZ3VhcmFudGVlIHRoZSBhY2N1cmFjeSBhbmQgaW50ZWdyaXR5IG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk1lZGljYXJlIFdhaXZlciBQYXltZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zLCB3ZSBub3RlZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIE1lZGljYXJlIFdhaXZlciBQYXltZW50cyB1bmRlciB0aGUgZGlmZmljdWx0eS1vZi1jYXJlIHByb3Zpc2lvbnMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gZW5zdXJlIHdlIG1heGltaXplIHlvdXIgZWxpZ2libGUgaW5jb21lIGV4Y2x1c2lvbnMsIGl0J3MgY3J1Y2lhbCB3ZSB2ZXJpZnkgY2VydGFpbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBsaXZpbmcgYXJyYW5nZW1lbnQsIGFzIHBlciBJUlMgZ3VpZGVsaW5lcy48L3A+XHJcbiAgICA8cD5UbyBhc3Npc3QgdXMgaW4gY29uZmlybWluZyB0aGF0IHRoZXNlIHBheW1lbnRzIHF1YWxpZnkgZm9yIGluY29tZSBleGNsdXNpb24sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jZTo8L3N0cm9uZz4gRG9jdW1lbnRzIHByb3ZpbmcgdGhhdCB5b3UgYW5kIHRoZSBpbmRpdmlkdWFsIHVuZGVyIGNhcmUgc2hhcmVkIHRoZSBzYW1lIHByaW1hcnkgcmVzaWRlbmNlIGR1cmluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBwYXltZW50cy4gVGhpcyBjb3VsZCBpbmNsdWRlIHV0aWxpdHkgYmlsbHMsIGEgcmVudGFsIGFncmVlbWVudCwgb3IgaG9tZW93bmVyJ3MgaW5zdXJhbmNlIGluIGJvdGggb2YgeW91ciBuYW1lcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIENhcmUgUmVjaXBpZW50Ojwvc3Ryb25nPiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVyc29uIHJlY2VpdmluZyBjYXJlLCBpbmNsdWRpbmcgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHlvdSBhbmQgYW55IGRvY3VtZW50YXRpb24gdGhhdCBpZGVudGlmaWVzIHRoZWlyIG5lZWQgZm9yIGNhcmUgKGUuZy4sIGEgbGV0dGVyIGZyb20gYSBoZWFsdGhjYXJlIHByb3ZpZGVyKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBheW1lbnQgUmVjb3Jkczo8L3N0cm9uZz4gQW55IHJlY29yZHMgb2YgdGhlIE1lZGljYXJlIFdhaXZlciBQYXltZW50cyB5b3UgcmVjZWl2ZWQsIGFzIHRoaXMgd2lsbCBoZWxwIHVzIGRldGVybWluZSB0aGUgZXhhY3QgYW1vdW50cyBhbmQgdGhlIHBlcmlvZHMgY292ZXJlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBGb3JtYWwgQWdyZWVtZW50cyBvciBDb250cmFjdHM6PC9zdHJvbmc+IElmIHRoZXJlIHdhcyBhIGZvcm1hbCBhZ3JlZW1lbnQgb3IgY29udHJhY3QgZGV0YWlsaW5nIHRoZSBjYXJlIHByb3ZpZGVkLCBwbGVhc2UgaW5jbHVkZSB0aGlzIGFzIHdlbGwuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaWYgdGhlIGNhcmUgYXJyYW5nZW1lbnQgd2FzIGZhY2lsaXRhdGVkIHRocm91Z2ggYSBzdGF0ZSBvciB0aGlyZC1wYXJ0eSBhZ2VuY3kuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIHRvIGVuc3VyZSB3ZSBjb21wbHkgd2l0aCB0YXhpbmcgYXV0aG9yaXRpZXMgd2hpbGUgYWNjdXJhdGVseSByZWZsZWN0aW5nIHlvdXIgZmluYW5jZXMuIElmIGFueSBvZiB0aGVzZSByZXF1aXJlbWVudHMgcG9zZSBhIGRpZmZpY3VsdHkgb3IgaWYgeW91IGhhdmUgcXVlc3Rpb25zLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gT3VyIGdvYWwgaXMgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MgYW5kIG9wdGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNhYmlsaXR5IEluc3VyYW5jZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzYWJpbGl0eSBJbnN1cmFuY2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBkaXNhYmlsaXR5IGluc3VyYW5jZSBiZW5lZml0cyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB0aGVzZSBiZW5lZml0cyBhcmUgZWxpZ2libGUgdG8gYmUgZXhjbHVkZWQgZnJvbSB5b3VyIGluY29tZSwgd2UgcmVxdWlyZSBmdXJ0aGVyIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBpbnN1cmFuY2UgcHJlbWl1bXMgcGFpZC48L3A+XHJcbiAgICA8cD5LaW5kbHkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IG9mIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgc3RhdGVtZW50cyBvciBkb2N1bWVudGF0aW9uIHNob3dpbmcgdGhlIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiBvbiB3aG8gcGFpZCB0aGUgaW5zdXJhbmNlIHByZW1pdW1zICh5b3Ugb3IgeW91ciBlbXBsb3llcikuPC9saT5cclxuICAgICAgICA8bGk+SWYgeW91IGhhdmUgY29udHJpYnV0ZWQgdG8gdGhlIHBheW1lbnQgb2YgdGhlIHByZW1pdW1zOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCB5b3UgcGFpZCB0b3dhcmRzIHRoZSBwcmVtaXVtcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBzdXBwb3J0aW5nIGRvY3VtZW50cyBmb3IgdGhlIHBheW1lbnRzIG1hZGUgYnkgeW91IChyZWNlaXB0cyBvciBiYW5rIHN0YXRlbWVudHMpLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+SWYgeW91ciBlbXBsb3llciBjb250cmlidXRlZCB0byB0aGUgcGF5bWVudCBvZiB0aGUgcHJlbWl1bXM6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHBhaWQgYnkgeW91ciBlbXBsb3llciB0b3dhcmRzIHRoZSBwcmVtaXVtcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBkb2N1bWVudHMgaW5kaWNhdGluZyBlbXBsb3llciBjb250cmlidXRpb25zIChwYXkgc3R1YnMsIGVtcGxveWVyIGxldHRlcnMpLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGRldGVybWluZSB0aGUgdGF4YWJsZSBwb3J0aW9uLCBpZiBhbnksIG9mIHlvdXIgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMuIFByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIHdpbGwgaGVscCB1cyBlbnN1cmUgdGhlIGFjY3VyYWN5IG9mIHlvdXIgdGF4IGZpbGluZyBhbmQgcG90ZW50aWFsbHkgbG93ZXIgeW91ciB0YXhhYmxlIGluY29tZS48L3A+XHJcbiAgICA8cD5QbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dCBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGlmIHdlIGNhbiBiZSBvZiBmdXJ0aGVyIGFzc2lzdGFuY2UuIFdlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNhYmlsaXR5IFJldGlyZW1lbnQgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRpc2FiaWxpdHkgUmV0aXJlbWVudCBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIEluIG9yZGVyIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoZXNlIGJlbmVmaXRzLCB3ZSBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscy4gVGhlIHRheGFiaWxpdHkgb2YgdGhlc2UgYmVuZWZpdHMgY2FuIGRlcGVuZCBvbiB3aGVuIHlvdSB0b29rIHJldGlyZW1lbnQgZHVlIHRvIGRpc2FiaWxpdHkuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJldGlyZW1lbnQ6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIHlvdSByZXRpcmVkIGR1ZSB0byBkaXNhYmlsaXR5LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBEaXNhYmlsaXR5IFJldGlyZW1lbnQ6PC9zdHJvbmc+IEFueSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIHlvdSBoYXZlIHRoYXQgY29uZmlybXMgeW91ciByZXRpcmVtZW50IHdhcyBkdWUgdG8gZGlzYWJpbGl0eS4gVGhpcyBtYXkgaW5jbHVkZSBsZXR0ZXJzIGZyb20geW91ciBlbXBsb3llciwgdGhlIHJldGlyZW1lbnQgcGxhbiwgb3IgbWVkaWNhbCByZWNvcmRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiBCZW5lZml0cyBSZWNlaXZlZDo8L3N0cm9uZz4gU3BlY2lmaWMgYW1vdW50cyBhbmQgdGhlIHNvdXJjZSBvZiB0aGUgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzLiBQbGVhc2UgaW5jbHVkZSBhbnkgcmVsYXRlZCBkb2N1bWVudHMgc3VjaCBhcyBzdGF0ZW1lbnRzIG9yIG5vdGljZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFctMiBvciAxMDk5IEZvcm1zOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZWQgYW55IHdhZ2VzIG9yIGRpc2FiaWxpdHkgcGF5bWVudHMgdGhhdCB3ZXJlIHJlcG9ydGVkIG9uIFctMiBvciAxMDk5IGZvcm1zIGluIHRoZSB5ZWFyIG9mIHlvdXIgcmV0aXJlbWVudCwgcGxlYXNlIHByb3ZpZGUgdGhlc2UgZm9ybXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgQ29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgSVJTOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSByZWNlaXZlZCBhbnkgbm90aWNlcyBvciBsZXR0ZXJzIGZyb20gdGhlIElSUyByZWdhcmRpbmcgeW91ciBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMsIHBsZWFzZSBpbmNsdWRlIGNvcGllcyBvZiB0aGVzZSBjb21tdW5pY2F0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoZSBhYm92ZSBpbmZvcm1hdGlvbiBpcyB2aXRhbCB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzIHdpbGwgYWlkIHVzIGluIGRldGVybWluaW5nIHRoZWlyIHRheGFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoYXQgeW91ciB0YXggb2JsaWdhdGlvbnMgYXJlIHByZWNpc2VseSBjYWxjdWxhdGVkLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLiBZb3VyIHByb21wdCByZXNwb25zZSBpcyBoaWdobHkgYXBwcmVjaWF0ZWQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNsZXJneSBXYWdlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2xlcmd5IFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgVy0yIHdhZ2VzIGFzIGEgY2xlcmd5IG1lbWJlci4gVG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgdG8gcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIHJlcXVpcmUgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGNvbXBlbnNhdGlvbiBwYWNrYWdlLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+Vy0yIEZvcm06PC9iPiBJZiBub3QgYWxyZWFkeSBwcm92aWRlZCwgaW5jbHVkZSBhbnkgVy0yIGZvcm1zIGlzc3VlZCBieSB5b3VyIHJlbGlnaW91cyBpbnN0aXR1dGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Ib3VzaW5nIEFsbG93YW5jZSBEb2N1bWVudGF0aW9uOjwvYj4gRGV0YWlsZWQgc3RhdGVtZW50IG9yIGxldHRlciBmcm9tIHlvdXIgcmVsaWdpb3VzIGluc3RpdHV0aW9uIHNwZWNpZnlpbmcgdGhlIGFtb3VudCBkZXNpZ25hdGVkIGFzIGhvdXNpbmcgYWxsb3dhbmNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlNlbGYtRW1wbG95bWVudCBUYXg6PC9iPiBDb25maXJtYXRpb24gb24gd2hldGhlciB5b3UgaGF2ZSB0YWtlbiBhIHZvdyBvZiBwb3ZlcnR5IChpZiBhcHBsaWNhYmxlKSwgb3IgYW55IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBvcHRpbmcgb3V0IG9mIHNlbGYtZW1wbG95bWVudCB0YXguPC9saT5cclxuICAgICAgICA8bGk+PGI+RXhwZW5zZSBSZWltYnVyc2VtZW50czo8L2I+IERvY3VtZW50YXRpb24gc2hvd2luZyBhbnkgZXhwZW5zZSByZWltYnVyc2VtZW50cyByZWNlaXZlZCB1bmRlciBhbiBhY2NvdW50YWJsZSBwbGFuLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPk90aGVyIENvbXBlbnNhdGlvbjo8L2I+IEluZm9ybWF0aW9uIG9uIGFueSBvdGhlciBjb21wZW5zYXRpb24gcmVjZWl2ZWQgaW4geW91ciBjYXBhY2l0eSBhcyBjbGVyZ3ksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG92ZSBvZmZlcmluZ3MsIGZlZXMgZm9yIHNlcnZpY2VzICh3ZWRkaW5ncywgZnVuZXJhbHMsIGV0Yy4pLCBhbmQgcGFyc29uYWdlIGFsbG93YW5jZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGFjY3VyYXRlbHkgcmVwcmVzZW50IHlvdXIgZWFybmluZ3MgYW5kIHRvIGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGRlZHVjdGlvbnMgY29ycmVjdGx5LiBZb3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IHdpbGwgaGVscCBlbnN1cmUgdGhhdCB5b3VyIHRheCByZXR1cm5zIGFyZSBwcmVwYXJlZCBpbiBhIHRpbWVseSBhbmQgZWZmaWNpZW50IG1hbm5lci48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UgYXJlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhpcyBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSW50ZXJlc3QgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbnRlcmVzdCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIHJldmlld2luZyB5b3VyIGZpbmFuY2lhbCBhY3Rpdml0aWVzIGZvciB0aGUgdGF4IHllYXIsIHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGludGVyZXN0IGluY29tZS4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheGFiaWxpdHkgb2YgdGhpcyBpbmNvbWUgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIGFkZGl0aW9uYWwgZGV0YWlscy4gS2luZGx5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48Yj5Tb3VyY2Ugb2YgSW50ZXJlc3QgSW5jb21lOjwvYj4gUGxlYXNlIHNwZWNpZnkgdGhlIGluc3RpdHV0aW9uKHMpIG9yIGVudGl0eShpZXMpIGZyb20gd2hpY2ggeW91IHJlY2VpdmVkIGludGVyZXN0IGluY29tZSAoZS5nLiwgYmFua3MsIGNyZWRpdCB1bmlvbnMpLjwvbGk+XHJcbiAgICAgIDxsaT48Yj5BbW91bnQgUmVjZWl2ZWQ6PC9iPiBDb25maXJtIHRoZSB0b3RhbCBhbW91bnQgb2YgaW50ZXJlc3QgaW5jb21lIHJlY2VpdmVkIGZyb20gZWFjaCBzb3VyY2UgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+PGI+QWNjb3VudCBUeXBlczo8L2I+IElkZW50aWZ5IHRoZSB0eXBlIG9mIGFjY291bnRzIHRoYXQgZ2VuZXJhdGVkIHRoZSBpbnRlcmVzdCAoZS5nLiwgc2F2aW5ncywgY2hlY2tpbmcsIGNlcnRpZmljYXRlcyBvZiBkZXBvc2l0KS48L2xpPlxyXG4gICAgICA8bGk+PGI+VGF4IEZvcm1zIFJlY2VpdmVkOjwvYj4gTGlzdCBhbnkgdGF4IGZvcm1zIHlvdSBoYXZlIHJlY2VpdmVkIHJlbGF0ZWQgdG8gaW50ZXJlc3QgaW5jb21lLCBzdWNoIGFzIEZvcm0gMTA5OS1JTlQgb3IgRm9ybSAxMDk5LU9JRC48L2xpPlxyXG4gICAgICA8bGk+PGI+Rm9yZWlnbiBJbnRlcmVzdDo8L2I+IElmIGFueSBpbnRlcmVzdCBpbmNvbWUgd2FzIGVhcm5lZCBmcm9tIGZvcmVpZ24gYWNjb3VudHMgb3Igc291cmNlcywgcGxlYXNlIHByb3ZpZGUgZGV0YWlscywgaW5jbHVkaW5nIHRoZSBjb3VudHJ5IG9mIG9yaWdpbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIHdpbGwgZW5hYmxlIHVzIHRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgaW50ZXJlc3QgaW5jb21lIGFuZCBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBjb3JyZWN0LiBZb3UgY2FuIGF0dGFjaCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYnkgcmVwbHlpbmcgdG8gdGhpcyBlbWFpbCBvciB1cGxvYWRpbmcgdGhlbSBkaXJlY3RseSB0byBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJCYW5rIEFjY291bnQgT3BlbmluZyBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQmFuayBBY2NvdW50IE9wZW5pbmcgR2lmdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiByZXZpZXdpbmcgeW91ciB0YXggc2l0dWF0aW9uIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGEgZ2lmdCBmb3Igb3BlbmluZyBhbiBhY2NvdW50IGF0IGEgZmluYW5jaWFsIGluc3RpdHV0aW9uLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgdGF4YWJpbGl0eSBvZiB0aGlzIGluY29tZSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPlRoZSBuYW1lIG9mIHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb24gd2hlcmUgdGhlIGFjY291bnQgd2FzIG9wZW5lZC48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgZGF0ZSB0aGUgYWNjb3VudCB3YXMgb3BlbmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGdpZnQgcmVjZWl2ZWQgKGUuZy4sIGNhc2gsIG1lcmNoYW5kaXNlLCBvciBzZXJ2aWNlcykuPC9saT5cclxuICAgICAgICA8bGk+VGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIHRoZSBnaWZ0IGF0IHRoZSB0aW1lIGl0IHdhcyByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiBwcm92aWRlZCBieSB0aGUgZmluYW5jaWFsIGluc3RpdHV0aW9uIHJlZ2FyZGluZyB0aGUgZ2lmdCAoZS5nLiwgYSBsZXR0ZXIsIGVtYWlsIGNvbmZpcm1hdGlvbiwgb3Igc3RhdGVtZW50IGluZGljYXRpbmcgdGhlIHZhbHVlIG9mIHRoZSBnaWZ0KS48L2xpPlxyXG4gICAgICAgIDxsaT5Db25maXJtYXRpb24gaWYgeW91IGhhdmUgcmVjZWl2ZWQgbW9yZSB0aGFuIG9uZSBnaWZ0IGZvciBvcGVuaW5nIGFjY291bnRzIHdpdGhpbiB0aGUgc2FtZSB0YXggeWVhciwgYW5kIGlmIHNvLCB0aGUgZGV0YWlscyBmb3IgZWFjaC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBjb21wbHkgd2l0aCBhbGwgSVJTIHJlcXVpcmVtZW50cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ0QgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkNEIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBlbnN1cmUgYWNjdXJhdGUgcmVwb3J0aW5nIG9mIHlvdXIgaW5jb21lIGZyb20gQ2VydGlmaWNhdGVzIG9mIERlcG9zaXQgKENEcykgZm9yIHRoZSB0YXggeWVhciwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gY29tcGx5IHdpdGggSVJTIHJlZ3VsYXRpb25zIGFuZCB0byBwb3RlbnRpYWxseSBvcHRpbWl6ZSB5b3VyIHRheCBiZW5lZml0cy48L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TmFtZSBvZiB0aGUgQmFuayBvciBGaW5hbmNpYWwgSW5zdGl0dXRpb246PC9zdHJvbmc+IFdoZXJlIHRoZSBDRCBpcyBoZWxkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWNjb3VudCBOdW1iZXI6PC9zdHJvbmc+IFRoaXMgaGVscHMgaW4gaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIENELjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgSW50ZXJlc3QgRWFybmVkOjwvc3Ryb25nPiBUaGUgYW1vdW50IG9mIGludGVyZXN0IGVhcm5lZCBmcm9tIHRoZSBDRCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q0QgVGVybTo8L3N0cm9uZz4gVGhlIGR1cmF0aW9uIG9yIHRlcm0gb2YgdGhlIENEIChlLmcuLCA2IG1vbnRocywgMSB5ZWFyKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUHVyY2hhc2U6PC9zdHJvbmc+IFdoZW4geW91IG9yaWdpbmFsbHkgYWNxdWlyZWQgdGhlIENELjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TWF0dXJpdHkgRGF0ZTo8L3N0cm9uZz4gV2hlbiB0aGUgQ0QgcmVhY2hlZCBvciB3aWxsIHJlYWNoIGl0cyBmdWxsIHRlcm0uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5LUlOVCBGb3Jtczo8L3N0cm9uZz4gSWYgcmVjZWl2ZWQsIHBsZWFzZSBpbmNsdWRlIGNvcGllcyBvZiBhbnkgMTA5OS1JTlQgZm9ybXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDRCBpbnRlcmVzdC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIHRpbWVseSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCBkb2N1bWVudHMuIFlvdSBtYXkgdXBsb2FkIHRoZSBkb2N1bWVudHMgZGlyZWN0bHkgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgcHJvdmlkZSB0aGVtIHZpYSBlbWFpbC48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4IEV4ZW1wdCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4IEV4ZW1wdCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHRheC1leGVtcHQgaW50ZXJlc3QgZHVyaW5nIHRoZSB0YXggeWVhciwgcG9zc2libHkgZnJvbSBtdW5pY2lwYWwgYm9uZHMgb3Igc2ltaWxhciBpbnZlc3RtZW50cy4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnRzIG9mIFRheC1FeGVtcHQgSW50ZXJlc3Q6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFsbCAxMDk5LUlOVCBmb3JtcyBvciBlcXVpdmFsZW50IHN0YXRlbWVudHMgdGhhdCBkZXRhaWwgeW91ciB0YXgtZXhlbXB0IGludGVyZXN0IGluY29tZSBmb3IgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiBJc3N1aW5nIEVudGl0aWVzOjwvc3Ryb25nPiBBIGxpc3Qgb3Igc3RhdGVtZW50IGlkZW50aWZ5aW5nIHRoZSBlbnRpdGllcyB0aGF0IGlzc3VlZCB0aGUgYm9uZHMgb3Igc2ltaWxhciBpbnZlc3RtZW50cy4gVGhpcyBpbmNsdWRlcyBtdW5pY2lwYWwsIHN0YXRlLCBvciBmZWRlcmFsIGVudGl0aWVzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBEZXRhaWw6PC9zdHJvbmc+IEEgYnJlYWtkb3duIG9mIHRoZSBpbnZlc3RtZW50cyBjb250cmlidXRpbmcgdG8gdGF4LWV4ZW1wdCBpbnRlcmVzdC4gVGhpcyBzaG91bGQgaW5jbHVkZSB0aGUgcHVyY2hhc2UgZGF0ZSwgcHVyY2hhc2UgYW1vdW50cywgYW5kIGFueSByZWxhdGVkIG1hdHVyaXR5IGRhdGVzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QnJva2VyYWdlIEFjY291bnQgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIHlvdXIgYnJva2VyYWdlIGFjY291bnQgc3RhdGVtZW50cyB0aGF0IGRldGFpbCB0cmFuc2FjdGlvbnMgYW5kIGhvbGRpbmdzIGluIHRheC1leGVtcHQgaW52ZXN0bWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BTVQgKEFsdGVybmF0aXZlIE1pbmltdW0gVGF4KSBDb25zaWRlcmF0aW9uOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIGRvY3VtZW50YXRpb24gaW5kaWNhdGluZyB3aGV0aGVyIGFueSBvZiB0aGUgdGF4LWV4ZW1wdCBpbnRlcmVzdCBpcyBzdWJqZWN0IHRvIHRoZSBBbHRlcm5hdGl2ZSBNaW5pbXVtIFRheC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYW4gYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gUGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBBcyBwYXJ0IG9mIG91ciBjb250aW51ZWQgZWZmb3J0IHRvIHByb3ZpZGUgeW91IHdpdGggdGhlIGJlc3QgdGF4IHByZXBhcmF0aW9uIHNlcnZpY2VzLCB3ZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBuZWNlc3NhcnkgZG9jdW1lbnRhdGlvbiByZWxhdGVkIHRvIHRoZSBpbnRlcmVzdCB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgZnJvbSByZWRlZW1pbmcgYW4gRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kLjwvcD5cclxuXHJcbiAgICA8cD5UbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgZWxpZ2liaWxpdHkgZm9yIGV4ZW1wdGlvbiBhbmQgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTLCB3ZSBraW5kbHkgcmVxdWVzdCB5b3UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBjb3B5IG9mIEZvcm0gMTA5OS1JTlQgb3Igc2ltaWxhciBzdGF0ZW1lbnQgcHJvdmlkZWQgYnkgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiwgaW5kaWNhdGluZyB0aGUgYW1vdW50IG9mIGludGVyZXN0IHJlY2VpdmVkIGZyb20gdGhlIEVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZC48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxlZCByZWNvcmRzIG9mIHRoZSBFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmRzIHJlZGVlbWVkIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkJvbmQgc2VyaWFsIG51bWJlcnM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPklzc3VlIGRhdGVzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5SZWRlbXB0aW9uIGRhdGVzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5SZWNlaXB0cyBvciBkb2N1bWVudGF0aW9uIGZvciBxdWFsaWZpZWQgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgcGFpZCBkdXJpbmcgdGhlIHllYXIsIGluY2x1ZGluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlR1aXRpb24gYW5kIGZlZXM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvdXJzZSBtYXRlcmlhbHM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBvdGhlciByZXF1aXJlZCBleHBlbnNlcyBmb3IgZW5yb2xsbWVudCBvciBhdHRlbmRhbmNlIGF0IGFuIGVsaWdpYmxlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBlbnJvbGxtZW50IGZyb20gYW4gZWxpZ2libGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24gZm9yIHRoZSBiZW5lZmljaWFyeSBvZiB0aGUgYm9uZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheGFiaWxpdHkgb2YgdGhlIGludGVyZXN0IGluY29tZSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemluZyB5b3VyIHRheCBiZW5lZml0cy4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCByZWNvbW1lbmQgY29tcGlsaW5nIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGl2aWRlbmQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXZpZGVuZCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBkaXZpZGVuZCBpbmNvbWUgb3ZlciB0aGUgcGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgaW5jb21lIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCBzaXR1YXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbiBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+QWxsIDEwOTktRElWIGZvcm1zIHJlY2VpdmVkIGZyb20gY29ycG9yYXRpb25zIG9yIG11dHVhbCBmdW5kcy4gVGhpcyBpbmNsdWRlcyBkaXN0cmlidXRpb25zIG9mIGNhc2gsIHN0b2NrLCBvciBvdGhlciBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+SWYgYXBwbGljYWJsZSwgZGV0YWlscyByZWdhcmRpbmcgYW55IGZvcmVpZ24gZGl2aWRlbmRzIGluY2x1ZGluZyB0aGUgYW1vdW50IGluIGZvcmVpZ24gY3VycmVuY3ksIHRoZSBjb3VudHJ5IG9mIG9yaWdpbiwgYW5kIGFueSBmb3JlaWduIHRheCBwYWlkLjwvbGk+XHJcbiAgICAgIDxsaT5Gb3IgZGl2aWRlbmRzIHJlaW52ZXN0ZWQsIHBsZWFzZSBwcm92aWRlIHN0YXRlbWVudHMgb3IgY29uZmlybWF0aW9ucyBzaG93aW5nIHRoZXNlIHRyYW5zYWN0aW9ucy48L2xpPlxyXG4gICAgICA8bGk+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGRpdmlkZW5kcyBub3QgY292ZXJlZCBieSBhIDEwOTktRElWLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhciBhbmQgbGVnaWJsZSB0byBhdm9pZCBhbnkgcHJvY2Vzc2luZyBkZWxheXMuPC9wPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgYXBwcmVjaWF0ZWQgYXMgaXQgd2lsbCBoZWxwIHVzIGluIGNvbXBsZXRpbmcgeW91ciB0YXggcHJlcGFyYXRpb25zIGVmZmljaWVudGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc3Bvc2VkIENhcGl0YWwgQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXNwb3NlZCBDYXBpdGFsIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgZGlzcG9zaW5nIG9mIGNhcGl0YWwgYXNzZXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgY29tcGxldGUgYW5kIGNvbXBsaWFudCwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+RGVzY3JpcHRpb24gb2YgZWFjaCBkaXNwb3NlZCBhc3NldDo8L2I+IEluY2x1ZGUgdGhlIHR5cGUgb2YgYXNzZXQgKGUuZy4sIHJlYWwgZXN0YXRlLCBzdG9ja3MsIGJvbmRzKS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGFjcXVpc2l0aW9uOjwvYj4gVGhlIHB1cmNoYXNlIGRhdGUgb3IgdGhlIGRhdGUgeW91IG9yaWdpbmFsbHkgY2FtZSBpbnRvIHBvc3Nlc3Npb24gb2YgZWFjaCBhc3NldC48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5BY3F1aXNpdGlvbiBjb3N0OjwvYj4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIG9yIGNvc3QgYmFzaXMgb2YgZWFjaCBhc3NldCwgaW5jbHVkaW5nIGFueSBpbXByb3ZlbWVudHMgbWFkZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGRpc3Bvc2FsOjwvYj4gVGhlIHNwZWNpZmljIGRhdGUgb24gd2hpY2ggZWFjaCBhc3NldCB3YXMgc29sZCwgZXhjaGFuZ2VkLCBvciBvdGhlcndpc2UgZGlzcG9zZWQgb2YuPC9saT5cclxuICAgICAgICA8bGk+PGI+U2FsZSBvciBkaXNwb3NhbCBwcm9jZWVkczo8L2I+IFRoZSB0b3RhbCBhbW91bnQgcmVjZWl2ZWQgZnJvbSB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkFzc29jaWF0ZWQgZXhwZW5zZXM6PC9iPiBBbnkgY29zdHMgaW5jdXJyZWQgZGlyZWN0bHkgZnJvbSB0aGUgc2FsZSBvciBkaXNwb3NhbCBwcm9jZXNzLCBzdWNoIGFzIGJyb2tlcidzIGZlZXMsIGFkdmVydGlzaW5nLCBsZWdhbCBmZWVzLCBldGMuPC9saT5cclxuICAgICAgICA8bGk+PGI+UmVhc29uIGZvciBkaXNwb3NhbDo8L2I+IEJyaWVmbHkgZGVzY3JpYmUgdGhlIHJlYXNvbiBiZWhpbmQgdGhlIGRpc3Bvc2FsIG9mIHRoZSBhc3NldCwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgY2FsY3VsYXRpbmcgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzIGFuZCBkZXRlcm1pbmluZyB0aGVpciBpbXBhY3Qgb24geW91ciB0YXggb2JsaWdhdGlvbnMuIFBsZWFzZSBhdHRhY2ggYW55IHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgc3VjaCBhcyBzYWxlcyByZWNlaXB0cywgZGVlZHMsIGNvbnRyYWN0cywgb3IgYnJva2VyYWdlIHN0YXRlbWVudHMsIHRvIHN1YnN0YW50aWF0ZSB0aGUgZGV0YWlscyBwcm92aWRlZC48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgYXJlIGhlcmUgdG8gYXNzaXN0IHdpdGggYW55IHF1ZXN0aW9ucyB5b3UgbWF5IGhhdmUuIFlvdSBjYW4gcmVhY2ggdXMgdmlhIGVtYWlsIG9yIHBob25lIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNwb3NlZCBEaWdpdGFsIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzcG9zZWQgRGlnaXRhbCBBc3NldHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdSBhbnN3ZXJlZCBcIlllc1wiIHRvIGRpc3Bvc2luZyBvZiBkaWdpdGFsIGFzc2V0cyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIHRyYW5zYWN0aW9ucywgcGxlYXNlIHN1Ym1pdCB0aGUgZm9sbG93aW5nOjwvcD5cclxuICA8b2w+XHJcbiAgICA8bGk+VHJhbnNhY3Rpb24gZGF0ZXM8L2xpPlxyXG4gICAgPGxpPlR5cGVzIG9mIGFzc2V0cyBib3VnaHQsIHNvbGQsIG9yIGV4Y2hhbmdlZDwvbGk+XHJcbiAgICA8bGk+QW1vdW50cyBpbnZvbHZlZCBpbiBlYWNoIHRyYW5zYWN0aW9uPC9saT5cclxuICAgIDxsaT5BbnkgMTA5OSBmb3JtcyByZWNlaXZlZCBmb3IgZGlnaXRhbCBhc3NldCBhY3Rpdml0aWVzPC9saT5cclxuICAgIDxsaT5EZXRhaWxzIG9mIG1pbmluZywgc3Rha2luZywgb3IgYWlyZHJvcCBpbmNvbWUsIGlmIGFwcGxpY2FibGU8L2xpPlxyXG4gIDwvb2w+XHJcbiAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBJbmNsdWRlIGFsbCBzYWxlcywgdHJhZGVzLCBhbmQgZXhjaGFuZ2VzLCBldmVuIGlmIHlvdSBkaWRuJ3QgcmVjZWl2ZSBhIHRheCBmb3JtLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNdXR1YWwgRnVuZCBHYWluXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJNdXR1YWwgRnVuZCBHYWluXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiBvcmRlciB0byBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIG9uIHlvdXIgdGF4IHJldHVybiwgYXMgcGVyIHlvdXIgaW5kaWNhdGlvbiBvZiByZWNlaXZpbmcgZ2FpbnMgZnJvbSBhIG11dHVhbCBmdW5kIG9yIHNpbWlsYXIgaW52ZXN0bWVudCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+MTA5OS1ESVYgRm9ybTo8L3N0cm9uZz4gVGhpcyBmb3JtIGlzIGNydWNpYWwgYXMgaXQgcHJvdmlkZXMgZGV0YWlscyBvbiBkaXZpZGVuZHMgYW5kIGRpc3RyaWJ1dGlvbnMgeW91IHJlY2VpdmVkIGZyb20geW91ciBtdXR1YWwgZnVuZCBpbnZlc3RtZW50cy4gUGxlYXNlIGVuc3VyZSB0byBwcm92aWRlIHRoaXMgZm9ybSBpZiB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgb24gaXQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnQgb2YgQWNjb3VudDo8L3N0cm9uZz4gVGhpcyBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBhbGwgdHJhbnNhY3Rpb25zIHdpdGhpbiB5b3VyIGFjY291bnQsIGluY2x1ZGluZyBwdXJjaGFzZXMsIHJlZGVtcHRpb25zLCBhbmQgcmVpbnZlc3RlZCBkaXZpZGVuZHMgd2hpY2ggaGVscCB1cyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHlvdXIgZ2FpbnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5ZZWFyLUVuZCBTdW1tYXJ5Ojwvc3Ryb25nPiBPZnRlbiBtdXR1YWwgZnVuZHMgcHJvdmlkZSBhIHllYXItZW5kIHN1bW1hcnkgdG8gdGhlaXIgaW52ZXN0b3JzLiBUaGlzIHN1bW1hcnkgY2FuIGJlIHZlcnkgaGVscGZ1bCBpbiBwcmVwYXJpbmcgeW91ciB0YXhlcyBhcyBpdCBjb25zb2xpZGF0ZXMgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBvdGhlciByZWxldmFudCBkb2N1bWVudHM6PC9zdHJvbmc+IFRoaXMgY291bGQgaW5jbHVkZSBhZGRpdGlvbmFsIDEwOTkgZm9ybXMgKGxpa2UgMTA5OS1CIGlmIGFueSBzYWxlcyBvY2N1cnJlZCksIG9yaWdpbmFsIGludmVzdG1lbnQgc3RhdGVtZW50cywgb3IgYW55dGhpbmcgZWxzZSB0aGF0IGNvdWxkIGltcGFjdCB5b3VyIHRheCBzaXR1YXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cyBtYXkgcmVxdWlyZSBzb21lIHRpbWUsIGhvd2V2ZXIsIGhhdmluZyB0aGVzZSByZWFkaWx5IGF2YWlsYWJsZSB3aWxsIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGVmZmljaWVuY3kgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBiZSBncmVhdGx5IGFwcHJlY2lhdGVkLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgZGlmZmljdWx0aWVzIG9idGFpbmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTXV0dWFsIEZ1bmQgRGlzcG9zYWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIERpc3Bvc2FsXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIG1hZGUgYSBkaXNwb3NhbCBvZiBzaGFyZXMgaW4gYSBtdXR1YWwgZnVuZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGFjdCBhbmQgZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZWQgYWNjdXJhdGVseSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+MTA5OS1CIGZvcm08L3N0cm9uZz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBtdXR1YWwgZnVuZCBkaXNwb3NhbCwgaWYgYXZhaWxhYmxlLiBUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGRldGFpbHMgb24gdGhlIHNhbGUgb2YgeW91ciBzaGFyZXMuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgPHN0cm9uZz5yZWNvcmQgb2YgdGhlIHB1cmNoYXNlPC9zdHJvbmc+IG9mIHRoZSBtdXR1YWwgZnVuZCBzaGFyZXMgaW5jbHVkaW5nIHRoZSBwdXJjaGFzZSBkYXRlIGFuZCBjb3N0IGJhc2lzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNhbGN1bGF0aW5nIGFueSBjYXBpdGFsIGdhaW4gb3IgbG9zcy48L2xpPlxyXG4gICAgICAgIDxsaT5JZiB0aGUgMTA5OS1CIGZvcm0gaXMgbm90IGF2YWlsYWJsZSwgcGxlYXNlIHByb3ZpZGUgYW55IDxzdHJvbmc+YnJva2VyYWdlIHN0YXRlbWVudHM8L3N0cm9uZz4gb3Igb3RoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IHNob3dzIHRoZSBkaXNwb3NhbCBvZiB0aGUgbXV0dWFsIGZ1bmQgc2hhcmVzLCBpbmNsdWRpbmcgdGhlIHNhbGUgZGF0ZSBhbmQgYW1vdW50LjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxzdHJvbmc+cmVpbnZlc3RlZCBkaXZpZGVuZHM8L3N0cm9uZz4gb3IgY2FwaXRhbCBnYWlucyBkaXN0cmlidXRpb25zLCBhcyB0aGVzZSBjYW4gYWRqdXN0IHlvdXIgY29zdCBiYXNpcyBhbmQgYWZmZWN0IHRoZSBjYWxjdWxhdGlvbiBvZiB5b3VyIGNhcGl0YWwgZ2FpbiBvciBsb3NzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SGF2aW5nIHRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyB0aGF0IHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoZSBkaXNwb3NhbCBvZiB5b3VyIG11dHVhbCBmdW5kIHNoYXJlcyBhbmQgYWNjdXJhdGVseSBjYWxjdWxhdGUgYW55IHBvdGVudGlhbCBjYXBpdGFsIGdhaW5zIG9yIGxvc3Nlcy4gVGhpcyB3aWxsIGFsc28gaGVscCB1cyB0byBvcHRpbWl6ZSB5b3VyIHRheCBsaWFiaWxpdHkgZm9yIHRoZSB5ZWFyLjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiV2FzaCBTYWxlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJXYXNoIFNhbGUgVHJhbnNhY3Rpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciBpbmRpY2F0aW9uIG9mIGEgcG9zc2libGUgV2FzaCBTYWxlIHRyYW5zYWN0aW9uLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGFjdCBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIHRyYW5zYWN0aW9uIHJlY29yZHM8L3N0cm9uZz4gLSBQbGVhc2UgcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB0aGUgc2VjdXJpdHkgdGhhdCB3YXMgc29sZCBhbmQgdGhlbiByZXB1cmNoYXNlZCwgaW5jbHVkaW5nIGRhdGVzIGFuZCBhbW91bnRzIGZvciBlYWNoIHRyYW5zYWN0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCBiYXNpcyBmb3IgcmVwdXJjaGFzZWQgc2VjdXJpdHk8L3N0cm9uZz4gLSBEZXRhaWxzIG9mIHRoZSBjb3N0IGJhc2lzIGZvciB0aGUgc2VjdXJpdGllcyByZXB1cmNoYXNlZCB3aXRoaW4gYSA2MS1kYXkgd2luZG93ICgzMCBkYXlzIGJlZm9yZSB0byAzMCBkYXlzIGFmdGVyIHRoZSBzYWxlKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgc3RhdGVtZW50czwvc3Ryb25nPiAtIENvcGllcyBvZiB5b3VyIGJyb2tlcmFnZSBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb25zIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TG9zc2VzIHJlYWxpemVkPC9zdHJvbmc+IC0gRG9jdW1lbnRhdGlvbiBvZiBhbnkgbG9zc2VzIHJlYWxpemVkIGZyb20gdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IGNvcnJlc3BvbmRlbmNlPC9zdHJvbmc+IC0gQ29ycmVzcG9uZGVuY2UgZnJvbSBicm9rZXJzIG9yIGZpbmFuY2lhbCBhZHZpc29ycyByZWdhcmRpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkb2N1bWVudHMgYXJlIG9yZ2FuaXplZCBhbmQgY2xlYXJseSBsYWJlbGVkIGZvciBlYWNoIHRyYW5zYWN0aW9uLiBUaGlzIHdpbGwgZmFjaWxpdGF0ZSBhIHNtb290aGVyIGFuZCBxdWlja2VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiB5b3VyIFdhc2ggU2FsZSB0cmFuc2FjdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBwcm92aWRlIGFjY3VyYXRlIHRheCBhZHZpY2UgYW5kIHByZXBhcmF0aW9uLiBGdXJ0aGVyLCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYXNzaXN0IGluIGRldGVybWluaW5nIGhvdyB0aGUgV2FzaCBTYWxlIHJ1bGUgYWZmZWN0cyB0aGUgZGVkdWN0aWJpbGl0eSBvZiBhbnkgbG9zc2VzIHlvdSBtaWdodCBoYXZlIGluY3VycmVkLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZmlsaW5ncy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIGNvb3BlcmF0aW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNvbGQgSG9tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU29sZCBIb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgc29sZCBhIHBlcnNvbmFsIGhvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgU2FsZTo8L3N0cm9uZz4gVGhlIGNsb3NpbmcgZGF0ZSB3aGVuIHRoZSBzYWxlIHdhcyBvZmZpY2lhbGx5IGNvbXBsZXRlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNhbGUgUHJpY2U6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgeW91IHJlY2VpdmVkIGZvciB0aGUgaG9tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvc3QgQmFzaXM6PC9zdHJvbmc+IE9yaWdpbmFsIHB1cmNoYXNlIHByaWNlLCBwbHVzIGFueSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgaG9tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERldGFpbHM6PC9zdHJvbmc+IEFkZHJlc3MgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IHNvbGQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NYWluIFJlc2lkZW5jZSBvciBOb3Q6PC9zdHJvbmc+IFBsZWFzZSBjb25maXJtIGlmIHRoaXMgd2FzIHlvdXIgbWFpbiByZXNpZGVuY2UgZm9yIGF0IGxlYXN0IHR3byBvZiB0aGUgbGFzdCBmaXZlIHllYXJzIHByaW9yIHRvIHRoZSBzYWxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVjb3JkcyBvZiBIb21lIEltcHJvdmVtZW50czo8L3N0cm9uZz4gUmVjZWlwdHMgb3IgcmVjb3JkcyBvZiBhbnkgbWFqb3IgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIHByb3BlcnR5LCB3aGljaCBjYW4gYWZmZWN0IHRoZSBjb3N0IGJhc2lzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgVXNlOjwvc3Ryb25nPiBJZiBub3QgYWx3YXlzIHVzZWQgYXMgYSBwZXJzb25hbCBob21lLCBkZXRhaWxzIG9uIGFueSB1c2Ugb2YgdGhlIHByb3BlcnR5IGZvciByZW50YWwsIGJ1c2luZXNzLCBvciBvdGhlciBub24tcGVyc29uYWwgdXNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVsYXRlZCBFeHBlbnNlczo8L3N0cm9uZz4gQW55IGNvc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FsZSwgc3VjaCBhcyBsZWdhbCBmZWVzLCByZWFsIGVzdGF0ZSBhZ2VudCBjb21taXNzaW9ucywgYW5kIGhvbWUgc3RhZ2luZyBleHBlbnNlcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGRldGVybWluaW5nIHBvdGVudGlhbCB0YXggYmVuZWZpdHMgb3Igb2JsaWdhdGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXMgc29vbiBhcyBwb3NzaWJsZSwgdG8gZW5zdXJlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHlvdSd2ZSBzb2xkIHByb3BlcnR5IHRoaXMgeWVhciB1bmRlciBhbiBpbnN0YWxsbWVudCBwbGFuLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIHRyYW5zYWN0aW9uIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TYWxlIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBjb21wbGV0ZSBzYWxlIGFncmVlbWVudCBkZXRhaWxpbmcgdGhlIHRlcm1zIG9mIHRoZSBpbnN0YWxsbWVudCBzYWxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IHNvbGQgKGUuZy4sIGxhbmQsIGJ1aWxkaW5nLCBlcXVpcG1lbnQpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBTY2hlZHVsZTo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHBheW1lbnQgc2NoZWR1bGUgYWdyZWVkIHVwb24sIGluY2x1ZGluZyB0aGUgZGF0ZXMgYW5kIGFtb3VudHMgb2YgZWFjaCBpbnN0YWxsbWVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IFRvdGFsIGFtb3VudHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGRvd24gcGF5bWVudCBhbmQgYW55IGluc3RhbGxtZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJpbmNpcGFsICZhbXA7IEludGVyZXN0IEJyZWFrZG93bjo8L3N0cm9uZz4gQSBicmVha2Rvd24gb2YgdGhlIGFtb3VudHMgcmVjZWl2ZWQgYmV0d2VlbiBwcmluY2lwYWwgYW5kIGludGVyZXN0IGZvciB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBCYXNpczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhlIHByb3BlcnR5J3Mgb3JpZ2luYWwgY29zdCwgaW1wcm92ZW1lbnRzIG1hZGUsIGFuZCBhbnkgZGVwcmVjaWF0aW9uIHRha2VuIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSByZWxldmFudCBleHBlbnNlcyBpbiByZWxhdGlvbiB0byB0aGUgc2FsZSB0aGF0IG1pZ2h0IGJlIGRlZHVjdGlibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5CdXllciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTGVnYWwgbmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBidXllci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjYWxjdWxhdGluZyBhbnkgcHJvZml0IG9yIGxvc3MgZnJvbSB0aGUgc2FsZSBhbmQgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgdGF4IGltcGxpY2F0aW9ucyBvZiB0aGUgaW5zdGFsbG1lbnQgcGF5bWVudHMgcmVjZWl2ZWQuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIFlvdSBjYW4gdXBsb2FkIHRoZSBkb2N1bWVudHMgZGlyZWN0bHkgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgZW1haWwgdGhlbSB0byB0YXhAbGVuZGFoYW5kYWNjb3VudGluZy5jb20uPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJXb3J0aGxlc3MgU2VjdXJpdGllc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiV29ydGhsZXNzIFNlY3VyaXRpZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBoYWQgaW52ZXN0bWVudHMsIHN1Y2ggYXMgc3RvY2tzIG9yIGJvbmRzLCB0aGF0IGJlY2FtZSBjb21wbGV0ZWx5IHdvcnRobGVzcyB0aGlzIHllYXIsIHdlIG5lZWQgdG8gZ2F0aGVyIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHByb3Blcmx5IHJlcG9ydCB0aGVzZSBvbiB5b3VyIHRheCByZXR1cm4uIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgdGhlIFNlY3VyaXR5Ojwvc3Ryb25nPiBGdWxsIG5hbWUgYW5kIHR5cGUgb2YgZWFjaCBzZWN1cml0eSB0aGF0IGJlY2FtZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QdXJjaGFzZSBEZXRhaWxzOjwvc3Ryb25nPiBEYXRlIG9mIHB1cmNoYXNlIGFuZCB0aGUgcHVyY2hhc2UgcHJpY2UgZm9yIGVhY2ggc2VjdXJpdHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Xb3J0aGxlc3NuZXNzIERldGVybWluYXRpb24gRGF0ZTo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgd2hlbiB5b3UgZGV0ZXJtaW5lZCB0aGUgc2VjdXJpdHkgdG8gYmUgd29ydGhsZXNzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IG9mZmljaWFsIGRvY3VtZW50YXRpb24geW91IHJlY2VpdmVkIG9yIHVzZWQgdG8gZGV0ZXJtaW5lIHRoYXQgdGhlIGludmVzdG1lbnRzIGJlY2FtZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BdHRlbXB0cyB0byBTZWxsIG9yIFRyYWRlOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGFueSBhdHRlbXB0cyBtYWRlIHRvIHNlbGwgb3IgdHJhZGUgdGhlIHNlY3VyaXRpZXMgYmVmb3JlIGRldGVybWluaW5nIHRoZXkgd2VyZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IEFjY291bnQgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIHlvdXIgaW52ZXN0bWVudCBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgd29ydGhsZXNzIHNlY3VyaXRpZXMgYW5kIHRoZWlyIHZhbHVlIG92ZXIgdGltZSwgbGVhZGluZyB1cCB0byB0aGVpciBkZWNsYXJlZCB3b3J0aGxlc3NuZXNzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTI0NCBCdXNpbmVzcyBTdG9ja1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMjQ0IEJ1c2luZXNzIFN0b2NrXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBtb3JlIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBzYWxlIG9mIHNoYXJlcyBpbiBhIHNtYWxsIGJ1c2luZXNzIHdoZXJlIHlvdSB3ZXJlIGFuIG9yaWdpbmFsIGludmVzdG9yLiBBcyB5b3UgaW5kaWNhdGVkIGEgbG9zcyBvbiB0aGlzIGludmVzdG1lbnQsIGl0J3MgY3J1Y2lhbCB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcXVhbGlmaWVzIGZvciBzcGVjaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LiBUbyBhY2N1cmF0ZWx5IGFuYWx5emUgYW5kIHJlcG9ydCB0aGVzZSBhY3Rpdml0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+Y2VydGlmaWNhdGUgb2YgaW5jb3Jwb3JhdGlvbjwvc3Ryb25nPiBvciBvdGhlciBkb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgdGhlIHN0b2NrIHF1YWxpZmllcyBhcyBTZWN0aW9uIDEyNDQgc3RvY2suPC9saT5cclxuICAgICAgICA8bGk+QSA8c3Ryb25nPmRldGFpbGVkIHN0YXRlbWVudDwvc3Ryb25nPiBvZiB0aGUgaW52ZXN0bWVudCwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IGFuZCBkYXRlIG9mIHRoZSBvcmlnaW5hbCBpbnZlc3RtZW50LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+TnVtYmVyIG9mIHNoYXJlcyBwdXJjaGFzZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Qcm9vZiBvZiBiZWluZyBhbiBvcmlnaW5hbCBob2xkZXIuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgdGhlIHNhbGU8L3N0cm9uZz4sIHNwZWNpZnlpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5EYXRlIG9mIHNhbGUuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OdW1iZXIgb2Ygc2hhcmVzIHNvbGQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5TYWxlIHByaWNlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGFzc29jaWF0ZWQgZXhwZW5zZXMgd2l0aCB0aGUgc2FsZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkEgYnJpZWYgZXhwbGFuYXRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgbGVhZGluZyB0byB0aGUgbG9zcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gd2lsbCBlbmFibGUgdXMgdG8gYXNzZXNzIHRoZSBlbGlnaWJpbGl0eSBmb3IgYSBiZW5lZmljaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LCBwb3RlbnRpYWxseSBtaW5pbWl6aW5nIHlvdXIgdGF4YWJsZSBpbmNvbWUuIFBsZWFzZSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IGZpbGluZy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVsYXRlZCBQYXJ0eSBUcmFuc2FjdGlvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbGF0ZWQgUGFydHkgVHJhbnNhY3Rpb25zXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSByZWNlaXZlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB0aGVyZSB3ZXJlIHRyYW5zYWN0aW9ucyB3aXRoIHJlbGF0ZWQgcGFydGllcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGVzZSB0cmFuc2FjdGlvbnMgYW5kIGluY29ycG9yYXRlIHRoZW0gaW50byB5b3VyIHRheCBmaWxpbmdzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgVHJhbnNhY3Rpb25zOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VHlwZSBvZiB0cmFuc2FjdGlvbnMgKGUuZy4sIHNhbGUsIHRyYWRlLCB0cmFuc2ZlciBvZiBwcm9wZXJ0eSBvciBpbnZlc3RtZW50cykuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5EYXRlKHMpIG9mIHRyYW5zYWN0aW9ucy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIGl0ZW1zIG9yIHByb3BlcnRpZXMgdHJhbnNmZXJyZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBhcnRpZXMgSW52b2x2ZWQ6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5OYW1lcyBhbmQgcmVsYXRpb25zaGlwcyB0byB5b3UgKGUuZy4sIGZhbWlseSBtZW1iZXIsIGZyaWVuZCwgb3IgYnVzaW5lc3MgZW50aXR5KS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPklmIGEgYnVzaW5lc3MgZW50aXR5IGlzIGludm9sdmVkLCB5b3VyIGFuZCB5b3VyIGZhbWlseSdzIG93bmVyc2hpcCBwZXJjZW50YWdlIGluIHRoZSBidXNpbmVzcy48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIERldGFpbHMgb2YgdGhlIFRyYW5zYWN0aW9uczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPk1hcmtldCB2YWx1ZSBvZiBwcm9wZXJ0eSBvciBpbnZlc3RtZW50cyBhdCB0aGUgdGltZSBvZiB0cmFuc2FjdGlvbi48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCByZWNlaXZlZCBvciBwYWlkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGV4Y2hhbmdlIG9mIGdvb2RzLCBzZXJ2aWNlcywgb3Igb3RoZXIgYXNzZXRzLCBpbmNsdWRpbmcgdGhlaXIgZmFpciBtYXJrZXQgdmFsdWUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3BpZXMgb2YgY29udHJhY3RzIG9yIGFncmVlbWVudHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5SZWNlaXB0cyBvciBwcm9vZiBvZiBwYXltZW50L2V4Y2hhbmdlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QXBwcmFpc2FscyBvciB2YWx1YXRpb25zIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgcmVnYXJkaW5nIHJlbGF0ZWQgcGFydHkgdHJhbnNhY3Rpb25zIGFuZCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHBlbmFsdGllcyBvciBhdWRpdHMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9ucy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWN0aW9uIDEyMSBIb21lIFNhbGVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNlY3Rpb24gMTIxIEhvbWUgU2FsZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgc29sZCB5b3VyIG1haW4gaG9tZSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgZXhjbHVzaW9uIG9mIGdhaW4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZC4gQmVsb3cgaXMgYSBkZXRhaWxlZCBsaXN0IG9mIHdoYXQgd2UgbmVlZCBmcm9tIHlvdTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIFNhbGU6PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkRhdGUgb2Ygc2FsZTwvbGk+XHJcbiAgICAgICAgICA8bGk+U2VsbGluZyBwcmljZTwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHNlbGxpbmcgZXhwZW5zZXMgKGUuZy4sIHJlYWwgZXN0YXRlIGNvbW1pc3Npb25zLCBsZWdhbCBmZWVzLCBldGMuKTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29zdCBCYXNpcyBJbmZvcm1hdGlvbjo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+RGF0ZSBvZiBwdXJjaGFzZTwvbGk+XHJcbiAgICAgICAgICA8bGk+T3JpZ2luYWwgcHVyY2hhc2UgcHJpY2U8L2xpPlxyXG4gICAgICAgICAgPGxpPlJlY29yZHMgb2YgaW1wcm92ZW1lbnRzIG1hZGUgKHdpdGggZGF0ZXMgYW5kIGNvc3RzKTwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IGNhc3VhbHR5IGxvc3NlcyBjbGFpbWVkIGFuZCBpbnN1cmFuY2UgcmVpbWJ1cnNlbWVudHMgcmVjZWl2ZWQgd2hpbGUgb3duaW5nIHRoZSBwcm9wZXJ0eTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVzaWRlbmN5IGFuZCBVc2UgRGF0YTo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+VG90YWwgeWVhcnMgb2Ygb3duZXJzaGlwPC9saT5cclxuICAgICAgICAgIDxsaT5Ub3RhbCB5ZWFycyB0aGUgcHJvcGVydHkgd2FzIHVzZWQgYXMgeW91ciBtYWluIGhvbWU8L2xpPlxyXG4gICAgICAgICAgPGxpPkFueSBwZXJpb2RzIHRoZSBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBvciB1c2VkIGZvciBidXNpbmVzczwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHNwZWNpYWwgY2lyY3Vtc3RhbmNlcyB0aGF0IG1heSBxdWFsaWZ5IGZvciBhbiBleGNlcHRpb24gdG8gdGhlIHBoeXNpY2FsIHByZXNlbmNlIHJlcXVpcmVtZW50IChlLmcuLCBoZWFsdGggaXNzdWVzLCBlbXBsb3ltZW50IGNoYW5nZXMpPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5QcmlvciBHYWluIEV4Y2x1c2lvbnM6PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkhhdmUgeW91IHNvbGQgYW5vdGhlciBtYWluIGhvbWUgd2l0aGluIHRoZSBsYXN0IHR3byB5ZWFycyBhbmQgY2xhaW1lZCBleGNsdXNpb24/PC9saT5cclxuICAgICAgICAgIDxsaT5JZiB5ZXMsIGRldGFpbHMgb2YgdGhlIHByaW9yIHNhbGUgaW5jbHVkaW5nIGRhdGUgYW5kIGFtb3VudCBvZiBnYWluIGV4Y2x1ZGVkPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIHRpbWVseSBmaWxpbmcgb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTAzMSBFeGNoYW5nZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMDMxIEV4Y2hhbmdlXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gSW4gcmV2aWV3aW5nIHlvdXIgcmVjb3JkcywgaXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IHlvdSBtYXkgaGF2ZSBlbmdhZ2VkIGluIGEgU2VjdGlvbiAxMDMxIGV4Y2hhbmdlLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCByZWxldmFudCBJUlMgZ3VpZGVsaW5lcywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBib3RoIHRoZSByZWxpbnF1aXNoZWQgcHJvcGVydHkgYW5kIHRoZSByZXBsYWNlbWVudCBwcm9wZXJ0eS4gUGxlYXNlIGluY2x1ZGUgbG9jYXRpb24sIHR5cGUgb2YgcHJvcGVydHkgKGUuZy4sIGNvbW1lcmNpYWwsIHJlc2lkZW50aWFsKSwgYW5kIGFueSBpZGVudGlmeWluZyBudW1iZXJzIChlLmcuLCBwYXJjZWwgbnVtYmVyKS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5UcmFuc2FjdGlvbiBEYXRlczo8L3N0cm9uZz4gVGhlIGRhdGUgb24gd2hpY2ggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSB3YXMgdHJhbnNmZXJyZWQsIGFuZCB0aGUgZGF0ZSB0aGUgcmVwbGFjZW1lbnQgcHJvcGVydHkgd2FzIHJlY2VpdmVkLiBUaGVzZSBkYXRlcyBhcmUgY3J1Y2lhbCB0byBkZXRlcm1pbmUgY29tcGxpYW5jZSB3aXRoIHRoZSA0NS1kYXkgaWRlbnRpZmljYXRpb24gYW5kIDE4MC1kYXkgZXhjaGFuZ2UgY29tcGxldGlvbiByZXF1aXJlbWVudHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+VHJhbnNhY3Rpb24gVmFsdWVzOjwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgYm90aCB0aGUgcmVsaW5xdWlzaGVkIGFuZCByZXBsYWNlbWVudCBwcm9wZXJ0aWVzIGF0IHRoZSB0aW1lIG9mIHRoZSBleGNoYW5nZSwgYWxvbmcgd2l0aCBhbnkgZmluYW5jaWFsIGFkanVzdG1lbnRzIG9yIGFkZGl0aW9uYWwgY2FzaCByZWNlaXZlZC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIGFueSBwb3RlbnRpYWwgZ2FpbiBvciBsb3NzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkludGVybWVkaWFyeSBEZXRhaWxzOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBhYm91dCBhbnkgcXVhbGlmaWVkIGludGVybWVkaWFyeSB1c2VkIGR1cmluZyB0aGUgZXhjaGFuZ2UsIGluY2x1ZGluZyB0aGVpciBuYW1lLCBjb250YWN0IGluZm9ybWF0aW9uLCBhbmQgZGV0YWlscyBvZiB0aGVpciBpbnZvbHZlbWVudC4gSWYgbm8gaW50ZXJtZWRpYXJ5IHdhcyB1c2VkLCBwbGVhc2UgZXhwbGFpbiBob3cgdGhlIGV4Y2hhbmdlIHdhcyBmYWNpbGl0YXRlZC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5PcmlnaW5hbCBQdXJjaGFzZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBkYXRlIG9mIGFjcXVpc2l0aW9uIGZvciB0aGUgcmVsaW5xdWlzaGVkIHByb3BlcnR5LiBUaGlzIGluZm9ybWF0aW9uIGFzc2lzdHMgaW4gZGV0ZXJtaW5pbmcgdGhlIGJhc2lzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgb3IgRXhwZW5zZXM6PC9zdHJvbmc+IERldGFpbHMgb2YgYW55IGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSByZXBsYWNlbWVudCBwcm9wZXJ0eSB3aXRoaW4gdGhlIGV4Y2hhbmdlIHBlcmlvZCBvciBhbnkgYWRkaXRpb25hbCBleHBlbnNlcyBpbmN1cnJlZCB0aGF0IG5lZWQgdG8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGUgcHJvcGVydHkncyBiYXNpcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIFNlY3Rpb24gMTAzMSBleGNoYW5nZSBhbmQgZW5zdXJpbmcgdGhhdCBhbGwgSVJTIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBJdCBhbHNvIGhlbHBzIHVzIHRvIGFkdmlzZSB5b3UgYWNjdXJhdGVseSBvbiBhbnkgcG90ZW50aWFsIGRlZmVycmVkIHRheCBsaWFiaWxpdGllcyBvciBiZW5lZml0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4Y2hhbmdlLjwvcD5cclxuICAgIDxwPlBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscy4gV2UgYXJlIGhlcmUgdG8gaGVscCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IG1heSBoYXZlIHVuZGVyZ29uZSBhIFNlY3Rpb24gMTAzMyBleGNoYW5nZSAoaW52b2x1bnRhcnkgY29udmVyc2lvbikgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBtYXhpbXVtIGNvbXBsaWFuY2UgYW5kIGJlbmVmaXQgZm9yIHlvdSwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhpcyBldmVudC4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk5hdHVyZSBvZiB0aGUgUHJvcGVydHk6PC9zdHJvbmc+IERlc2NyaWJlIHRoZSB0eXBlIG9mIHByb3BlcnR5IGludm9sdmVkIChlLmcuLCByZWFsIGVzdGF0ZSwgcGVyc29uYWwgcHJvcGVydHksIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgSW52b2x1bnRhcnkgQ29udmVyc2lvbjo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgY2lyY3Vtc3RhbmNlcyB0aGF0IGxlZCB0byB0aGUgaW52b2x1bnRhcnkgY29udmVyc2lvbiAoZS5nLiwgbmF0dXJhbCBkaXNhc3RlciwgdGhlZnQsIGNvbmRlbW5hdGlvbikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnN1cmFuY2UgUHJvY2VlZHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IEluZGljYXRlIHRoZSBhbW91bnQgb2YgYW55IGluc3VyYW5jZSBwcm9jZWVkcyByZWNlaXZlZCBhcyBjb21wZW5zYXRpb24gZm9yIHRoZSBjb252ZXJzaW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVpbnZlc3RtZW50IG9mIFByb2NlZWRzOjwvc3Ryb25nPiBEZXRhaWwgYW55IHJlaW52ZXN0bWVudCBvZiB0aGUgcHJvY2VlZHMgaW50byBzaW1pbGFyIHByb3BlcnR5LCBpbmNsdWRpbmcgdHlwZXMgb2YgcHJvcGVydGllcyBhY3F1aXJlZCwgZGF0ZXMgb2YgYWNxdWlzaXRpb24sIGFuZCBhbW91bnRzIHJlaW52ZXN0ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UaW1lbGluZSBvZiBFdmVudHM6PC9zdHJvbmc+IFByb3ZpZGUgYSB0aW1lbGluZSBvZiB0aGUga2V5IGV2ZW50cywgZnJvbSB0aGUgZGF0ZSBvZiB0aGUgaW52b2x1bnRhcnkgY29udmVyc2lvbiB0byB0aGUgcmVpbnZlc3RtZW50IG9mIHByb2NlZWRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQXR0YWNoIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgaW5zdXJhbmNlIHNldHRsZW1lbnQgc3RhdGVtZW50cywgcHVyY2hhc2UgY29udHJhY3RzIGZvciByZXBsYWNlbWVudCBwcm9wZXJ0eSwgb3Igb2ZmaWNpYWwgbm90aWNlcyBvZiBjb25kZW1uYXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgdG8gZmFjaWxpdGF0ZSBhbiBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHdpdGggYW55IHF1ZXN0aW9ucyB5b3UgbWlnaHQgaGF2ZSByZWdhcmRpbmcgdGhpcyByZXF1ZXN0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkkgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHdlIHByb2NlZWQgd2l0aCBwcmVwYXJpbmcgeW91ciB0YXhlcywgd2Ugbm90aWNlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIHJlbnRhbCBpbmNvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgdGF4IG9ibGlnYXRpb25zIGFuZCBleHBsb3JlIHBvdGVudGlhbCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMsIHdlIG5lZWQgc29tZSBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGlzIHJlbnRhbCBpbmNvbWUuPC9wPlxyXG48cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG48b2w+XHJcbiAgPGxpPlRoZSBhZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eSBnZW5lcmF0aW5nIHRoZSByZW50YWwgaW5jb21lLjwvbGk+XHJcbiAgPGxpPlRvdGFsIGFtb3VudCBvZiByZW50YWwgaW5jb21lIHJlY2VpdmVkIGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gIDxsaT5Nb250aHMgdGhlIHByb3BlcnR5IHdhcyByZW50ZWQgb3V0LjwvbGk+XHJcbiAgPGxpPkFueSBwZXJpb2RzIG9mIHBlcnNvbmFsIHVzZSBvZiB0aGUgcmVudGFsIHByb3BlcnR5LjwvbGk+XHJcbiAgPGxpPkEgc3VtbWFyeSBvZiBleHBlbnNlcyByZWxhdGVkIHRvIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IHByb3BlcnR5IG1hbmFnZW1lbnQgZmVlcywgbWFpbnRlbmFuY2UgYW5kIHJlcGFpcnMsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCAoaWYgYXBwbGljYWJsZSkuPC9saT5cclxuICA8bGk+RGV0YWlscyBvZiBhbnkgbWFqb3IgaW1wcm92ZW1lbnRzIG9yIHJlbm92YXRpb25zIGRvbmUgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCB1cyBwYWludCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgeW91ciByZW50YWwgaW5jb21lLCBhbGxvd2luZyB1cyB0byBlbnN1cmUgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IGFwcGxpY2FibGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSByZXBvcnQgeW91ciBpbmNvbWUuIFlvdXIgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgY3J1Y2lhbCBmb3IgdGhlIHRpbWVseSBhbmQgZWZmZWN0aXZlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy48L3A+XHJcbjxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIGlmIHRoZXJlJ3MgYW55IG90aGVyIHdheSBJIGNhbiBhc3Npc3QsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBnZXQgaW4gdG91Y2guPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkdmFuY2VkIFJlbnRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFkdmFuY2VkIFJlbnRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGFkdmFuY2VkIHJlbnQgcGF5bWVudHMgdGhpcyB5ZWFyIGZvciB5b3VyIHJlbnRhbCBwcm9wZXJ0eS4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBvZiBhZHZhbmNlZCByZW50IHJlY2VpdmVkOjwvc3Ryb25nPiBUaGUgc3VtIHRvdGFsIG9mIGFsbCByZW50IHBheW1lbnRzIHJlY2VpdmVkIGluIGFkdmFuY2UgKGNvdmVyaW5nIGZ1dHVyZSBwZXJpb2RzIGJleW9uZCB0aGUgY3VycmVudCBtb250aCkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSBzcGVjaWZpYyBkYXRlKHMpIG9uIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBhZHZhbmNlZCByZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIHBlcmlvZCBjb3ZlcmVkOjwvc3Ryb25nPiBUaGUgcmFuZ2Ugb2YgZGF0ZXMgKHN0YXJ0IGFuZCBlbmQpIHRoYXQgZWFjaCBhZHZhbmNlZCByZW50IHBheW1lbnQgY292ZXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgYWRkcmVzczo8L3N0cm9uZz4gVGhlIGFkZHJlc3Mgb2YgdGhlIHJlbnRhbCBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGFkdmFuY2VkIHJlbnQgd2FzIHBhaWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5MZWFzZSBhZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50KHMpIHdpdGggdGhlIHRlbmFudChzKSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMgb2YgdGhlIGFkdmFuY2VkIHJlbnQgcGF5bWVudChzKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBwYXJ0aWFsIHJlZnVuZHMgaXNzdWVkOjwvc3Ryb25nPiBJZiBhbnkgcmVmdW5kcyB3ZXJlIGlzc3VlZCBhZ2FpbnN0IHRoZSBhZHZhbmNlZCByZW50cyByZWNlaXZlZCwgcGxlYXNlIHByb3ZpZGUgZGV0YWlscyBhbmQgcmVzcGVjdGl2ZSBhbW91bnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBwaXZvdGFsIGluIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxpYW50IHdpdGggcmVsZXZhbnQgdGF4IGxhd3MuIFBsZWFzZSBlbnN1cmUgdGhlIGRldGFpbHMgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTGVhc2UgQ2FuY2VsbGF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJMZWFzZSBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgaW4geW91ciBwcmVsaW1pbmFyeSB0YXggaW5mb3JtYXRpb24gdGhhdCB5b3UgcmVjZWl2ZWQgcGF5bWVudCBmcm9tIGEgdGVuYW50IGZvciBlYXJseSBsZWFzZSBjYW5jZWxsYXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgYW5kIGFzc2VzcyBhbnkgdGF4IGltcGxpY2F0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5MZWFzZSBBZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgb3JpZ2luYWwgbGVhc2UgYWdyZWVtZW50IHdpdGggdGhlIHRlbmFudCB3aG8gcGFpZCB0byB0ZXJtaW5hdGUgdGhlaXIgbGVhc2UgZWFybHkuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+QW1lbmRtZW50IG9yIFRlcm1pbmF0aW9uIEFncmVlbWVudDo8L3N0cm9uZz4gQW55IGRvY3VtZW50cyB0aGF0IGZvcm1hbGx5IGFja25vd2xlZGdlIHRoZSBlYXJseSB0ZXJtaW5hdGlvbiBvZiB0aGUgbGVhc2UsIGluY2x1ZGluZyBhbnkgcGVuYWx0aWVzLCB0aGUgdGVybWluYXRpb24gZGF0ZSwgYW5kIG90aGVyIHJlbGV2YW50IHRlcm1zLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlBheW1lbnQgUmVjb3Jkczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvZiB0aGUgcGF5bWVudCByZWNlaXZlZCBmb3IgbGVhc2UgdGVybWluYXRpb24uIFRoaXMgY291bGQgaW5jbHVkZSBiYW5rIHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb24sIGEgcmVjZWlwdCBwcm92aWRlZCB0byB0aGUgdGVuYW50LCBvciBhbnkgd3JpdHRlbiBhZ3JlZW1lbnQgc3BlY2lmeWluZyB0aGUgYW1vdW50LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNvbW11bmljYXRpb24gRXZpZGVuY2U6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgd3JpdHRlbiBjb21tdW5pY2F0aW9uIGJldHdlZW4geW91IGFuZCB0aGUgdGVuYW50IHJlZ2FyZGluZyB0aGUgbGVhc2UgY2FuY2VsbGF0aW9uIGFuZCB0aGUgYWdyZWVtZW50IHRvIHRlcm1pbmF0ZSBlYXJseSwgaW5jbHVkaW5nIGVtYWlscyBvciBsZXR0ZXJzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhlc2UgZG9jdW1lbnRzIGFyZSBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCB0YXggdHJlYXRtZW50IG9mIHRoZSBsZWFzZSBjYW5jZWxsYXRpb24gcGF5bWVudCB5b3UgcmVjZWl2ZWQuIFRoZXkgd2lsbCBoZWxwIHRvIGVuc3VyZSB0aGF0IHdlIHJlcG9ydCB5b3VyIGluY29tZSBhY2N1cmF0ZWx5IGFuZCB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG90ZW50aWFsIHRheCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMuPC9wPlxyXG4gICAgPHA+PHN0cm9uZz5BY3Rpb24gUmVxdWlyZWQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB0aW1lbHkgY29tcGxldGlvbiBvZiB5b3VyIHRheCBwcmVwYXJhdGlvbi4gWW91IG1heSBzZW5kIHRoZW0gdmlhIGVtYWlsIGF0IHRheEBsZW5kYWhhbmRhY2NvdW50aW5nLmNvbSwgb3IgdXBsb2FkIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYWlkIEFkdmFuY2UgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBhaWQgQWR2YW5jZSBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgcGF5bWVudHMgZm9yIGluc3VyYW5jZSBwcmVtaXVtcyBvciBzaW1pbGFyIGNvc3RzIHJlbGF0ZWQgdG8geW91ciByZW50YWwgcHJvcGVydHksIHdoaWNoIGNvdmVyIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHByZXBhaWQgZXhwZW5zZXMgaW4geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuPG9sPlxyXG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgUGFpZCBFeHBlbnNlczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIHJlY2VpcHRzLCBpbnZvaWNlcywgb3IgY29udHJhY3RzIHNob3dpbmcgdGhlIHBheW1lbnQgb2YgaW5zdXJhbmNlIHByZW1pdW1zIG9yIHNpbWlsYXIgZXhwZW5zZXMuIFRoaXMgc2hvdWxkIGNsZWFybHkgaW5kaWNhdGUgdGhlIGFtb3VudCBwYWlkLCB0aGUgZGF0ZSBvZiBwYXltZW50LCBhbmQgdGhlIGNvdmVyYWdlIHBlcmlvZC48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkNvdmVyYWdlIFBlcmlvZCBEZXRhaWxzOjwvc3Ryb25nPiBXZSBuZWVkIHNwZWNpZmljIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBjb3ZlcmFnZSBwZXJpb2QgZm9yIGVhY2ggZXhwZW5zZS4gUGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvciBhIHdyaXR0ZW4gc3VtbWFyeSB0aGF0IHNwZWNpZmllcyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgY292ZXJhZ2UgcGVyaW9kcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIGN1cnJlbnQgeWVhci48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlByb3BlcnR5IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBhZGRyZXNzIG9yIGlkZW50aWZpY2F0aW9uIG9mIHRoZSByZW50YWwgcHJvcGVydHkoaWVzKSB0byB3aGljaCB0aGVzZSBleHBlbnNlcyBhcHBseS48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlB1cnBvc2Ugb2YgdGhlIEV4cGVuc2U6PC9zdHJvbmc+IEZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLCBwcm92aWRlIGEgYnJpZWYgZXhwbGFuYXRpb24gb2YgdGhlIG5hdHVyZSBvZiBlYWNoIGV4cGVuc2UgKGUuZy4sIHByb3BlcnR5IGluc3VyYW5jZSwgbGlhYmlsaXR5IGluc3VyYW5jZSkuPC9saT5cclxuPC9vbD5cclxuPHA+UGxlYXNlIHJlbWVtYmVyIHRoYXQgaGF2aW5nIGFjY3VyYXRlIGFuZCBjb21wcmVoZW5zaXZlIGRvY3VtZW50YXRpb24gd2lsbCBhaWQgaW4gZW5zdXJpbmcgdGhhdCB5b3VyIHRheCByZXR1cm5zIGFyZSBwcmVwYXJlZCBjb3JyZWN0bHksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdGF4IGJlbmVmaXRzIHJlbGF0ZWQgdG8gdGhlc2UgcHJlcGFpZCBleHBlbnNlcy48L3A+XHJcbjxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBhbmQgeW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJCZW5lZml0IFZhbHVlIEluY3JlYXNlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJCZW5lZml0IFZhbHVlIEluY3JlYXNlXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gaW4gcHJvdmlkaW5nIG5lY2Vzc2FyeSBkb2N1bWVudHMgZm9yIHRheCBwcmVwYXJhdGlvbi4gXHJcbiAgICBBcyBwZXIgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHBheW1lbnQgZm9yIGxvY2FsIGltcHJvdmVtZW50cyBcclxuICAgIG9yIHNlcnZpY2VzIHRoYXQgZGlyZWN0bHkgaW5jcmVhc2UgdGhlIHZhbHVlIG9mIHlvdXIgcmVudGFsIHByb3BlcnR5LCBcclxuICAgIHdlIG5lZWQgZnVydGhlciBkZXRhaWxzIHRvIGVuc3VyZSB0aGUgYWNjdXJhdGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCBkb2N1bWVudGF0aW9uLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlIHByb3ZpZGVkIChlLmcuLCBzdHJlZXQgcmVwYWlycywgbmV3IHNpZGV3YWxrcykuPC9saT5cclxuICAgICAgICA8bGk+RGF0ZShzKSBvZiB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZS48L2xpPlxyXG4gICAgICAgIDxsaT5Ub3RhbCBjb3N0IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGltcHJvdmVtZW50IG9yIHNlcnZpY2UuPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgcGF5bWVudCBmb3IgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2UgKHJlY2VpcHRzLCBiYW5rIHN0YXRlbWVudHMsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBvZmZpY2lhbCBub3RpY2VzIG9yIGRvY3VtZW50YXRpb24gZnJvbSB0aGUgbG9jYWwgbXVuaWNpcGFsaXR5IHJlZ2FyZGluZyB0aGUgaW1wcm92ZW1lbnRzIG9yIGNoYXJnZXMuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiBob3cgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2Ugc3BlY2lmaWNhbGx5IGJlbmVmaXRlZCB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyBwb3RlbnRpYWwgdGF4IGRlZHVjdGlvbnMgb3IgY3JlZGl0cyBhc3NvY2lhdGVkIHdpdGggcHJvcGVydHkgdmFsdWUgaW5jcmVhc2VzIGR1ZSB0byBsb2NhbCBpbXByb3ZlbWVudHMgb3Igc2VydmljZXMuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZmFjaWxpdGF0ZSB0aGUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRhdGlvbi48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JmZWl0ZWQgU2VjdXJpdHkgRGVwb3NpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZmVpdGVkIFNlY3VyaXR5IERlcG9zaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgYWNjdXJhdGUgYW5kIGNvbXBsaWFudCwgd2UndmUgbm90ZWQgdGhhdCB5b3UgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gaGF2aW5nIG9uZSBvciBtb3JlIHRlbmFudHMgd2hvIGRpZCBub3QgZ2V0IHRoZWlyIHNlY3VyaXR5IGRlcG9zaXQgYmFjayB0aGlzIHllYXIgZHVlIHRvIGVpdGhlciBicmVha2luZyB0aGUgbGVhc2UgdGVybXMgb3IgbGVhdmluZyBkYW1hZ2UgcmVxdWlyaW5nIHJlcGFpci48L3A+XHJcbiAgICA8cD5UbyBwcm9jZWVkIHdpdGggeW91ciB0YXggcHJlcGFyYXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+QSBsaXN0IG9mIGVhY2ggdGVuYW50IHdob3NlIHNlY3VyaXR5IGRlcG9zaXQgd2FzIGZvcmZlaXRlZCwgaW5jbHVkaW5nOjwvbGk+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPlRlbmFudCdzIG5hbWU8L2xpPlxyXG4gICAgICAgICAgPGxpPlJlbnRhbCBhZGRyZXNzPC9saT5cclxuICAgICAgICAgIDxsaT5EYXRlIG9mIGxlYXNlIHRlcm1pbmF0aW9uPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIGV2aWRlbmNpbmcgdGhlIGZvcmZlaXR1cmUgcmVhc29uLCBzdWNoIGFzOjwvbGk+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkNvcHkgb2YgdGhlIGxlYXNlIGFncmVlbWVudCBzaG93aW5nIHRoZSBicmVhY2hlZCB0ZXJtczwvbGk+XHJcbiAgICAgICAgICA8bGk+UGhvdG9zIG9yIHJlcGFpciBpbnZvaWNlcyBmb3IgZGFtYWdlcyBjYXVzZWQgYnkgdGhlIHRlbmFudDwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHdyaXR0ZW4gbm90aWNlcyBwcm92aWRlZCB0byB0aGUgdGVuYW50IHJlZ2FyZGluZyB0aGUgZm9yZmVpdHVyZTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZWFjaCBmb3JmZWl0ZWQgc2VjdXJpdHkgZGVwb3NpdC48L2xpPlxyXG4gICAgICA8bGk+QW55IHJlY2VpcHRzIG9yIGludm9pY2VzIGZvciByZXBhaXJzIGFuZCBtYWludGVuYW5jZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSByZWFzb25zIGZvciBzZWN1cml0eSBkZXBvc2l0IGZvcmZlaXR1cmUuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoaXMgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgaW4gYSBjbGVhciBhbmQgb3JnYW5pemVkIG1hbm5lciB0byBmYWNpbGl0YXRlIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBUaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk5vbi1DYXNoIFJlbnRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk5vbi1DYXNoIFJlbnRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGUgZnJvbSB5b3VyIGVhcmxpZXIgcmVzcG9uc2VzIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgbm9uLWNhc2ggZm9ybXMgb2YgcGF5bWVudCBpbiBsaWV1IG9mIHJlbnQgdGhpcyB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0cmFuc2FjdGlvbnMuIEtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgU2VydmljZSBvciBHb29kcyBSZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmljZSwgZ29vZHMsIG9yIHByb3BlcnR5IHlvdSByZWNlaXZlZCBhcyByZW50IHBheW1lbnQuIEZvciBpbnN0YW5jZSwgXCJSZXBhaXIgc2VydmljZXMgZm9yIHRoZSBraXRjaGVuIHBsdW1iaW5nXCIgb3IgXCJhIGxhcHRvcCBjb21wdXRlclwiLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5WYWx1ZSBFc3RpbWF0aW9uOjwvc3Ryb25nPiBBbiBlc3RpbWF0ZWQgdmFsdWUgb2YgdGhlIHNlcnZpY2UsIGdvb2RzLCBvciBwcm9wZXJ0eSByZWNlaXZlZCBhdCB0aGUgdGltZSBvZiB0aGUgdHJhbnNhY3Rpb24uIElmIHBvc3NpYmxlLCBpbmNsdWRlIGFueSBkb2N1bWVudGF0aW9uIHRoYXQgc3VwcG9ydHMgdGhpcyB2YWx1YXRpb24sIHN1Y2ggYXMgcmVjZWlwdHMsIGludm9pY2VzLCBvciB3cml0dGVuIGFncmVlbWVudHMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkRhdGUocykgb2YgVHJhbnNhY3Rpb246PC9zdHJvbmc+IFNwZWNpZmljIGRhdGUocykgd2hlbiB5b3UgcmVjZWl2ZWQgdGhlc2UgZ29vZHMgb3Igc2VydmljZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkluZm9ybWF0aW9uIGFib3V0IHRoZSBUZW5hbnQgb3IgUHJvdmlkZXI6PC9zdHJvbmc+IE5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgcHJvdmlkZWQgdGhlIGdvb2RzIG9yIHNlcnZpY2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5BbnkgRm9ybWFsIEFncmVlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgd3JpdHRlbiBhZ3JlZW1lbnRzIG9yIGNvbnRyYWN0cyB0aGF0IG91dGxpbmUgdGhpcyBhcnJhbmdlbWVudC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UmVjZWlwdHMgb3IgRG9jdW1lbnRhdGlvbiBvZiB0aGUgVHJhbnNhY3Rpb246PC9zdHJvbmc+IEFueSByZWNlaXB0cywgaW52b2ljZXMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBldmlkZW5jZXMgdGhlIGV4Y2hhbmdlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB5b3VyIGluY29tZS4gWW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlIHdpbGwgZ3JlYXRseSBhc3Npc3QgaW4gY29tcGxldGluZyB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseS48L3A+XHJcbiAgICA8cD5QbGVhc2Ugc3VibWl0IHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIFByb3BlcnR5IERlcHJlY2lhdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIFByb3BlcnR5IERlcHJlY2lhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+SW4gcmV2aWV3aW5nIHlvdXIgYWNjb3VudHMsIHdlJ3ZlIG5vdGVkIHRoYXQgYWxsIHlvdXIgcmVudGFsIHByb3BlcnRpZXMgYXJlIGN1cnJlbnRseSBiZWluZyBkZXByZWNpYXRlZCBhcyBwYXJ0IG9mIHRoZWlyIHRheCB0cmVhdG1lbnQgaW4gb3VyIGZpbmFuY2lhbCByZWNvcmRzLiBUaGlzIG1ldGhvZCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSBmaW5hbmNpYWwgcmVwb3J0aW5nIGFuZCB0YXggZWZmaWNpZW5jeS4gSG93ZXZlciwgaXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IHRoZXJlIG1heSBiZSBkaXNjcmVwYW5jaWVzIG9yIHVwZGF0ZXMgcmVxdWlyZWQgaW4gb3VyIHJlY29yZHMgcmVnYXJkaW5nIHRoZSBkZXByZWNpYXRpb24gb2YgeW91ciByZW50YWwgcHJvcGVydGllcy48L3A+XHJcbiAgICA8cD5UbyBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBpbnRlZ3JpdHkgb2YgeW91ciBmaW5hbmNpYWwgYW5kIHRheCByZXBvcnRpbmcsIHdlIGtpbmRseSByZXF1ZXN0IHlvdXIgYXNzaXN0YW5jZSBpbiB2ZXJpZnlpbmcgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHlvdXIgcmVudGFsIHByb3BlcnRpZXMgd2l0aCByZWdhcmRzIHRvIGRlcHJlY2lhdGlvbi48L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+Q29uZmlybSB3aGV0aGVyIGFsbCB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzIGFyZSBiZWluZyBkZXByZWNpYXRlZCBpbiBvdXIgYm9va3MuIElmIHRoaXMgaXMgYWNjdXJhdGUsIG5vIGFjdGlvbiBpcyByZXF1aXJlZCBvbiB5b3VyIHBhcnQuPC9saT5cclxuICAgIDxsaT5JZiB0aGVyZSBhcmUgYW55IHJlbnRhbCBwcm9wZXJ0aWVzIDxzdHJvbmc+bm90PC9zdHJvbmc+IGN1cnJlbnRseSBiZWluZyBkZXByZWNpYXRlZCwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGZvciBlYWNoIHByb3BlcnR5OjwvbGk+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bGk+UHJvcGVydHkgQWRkcmVzczwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5EYXRlIG9mIFB1cmNoYXNlPC9saT5cclxuICAgICAgICAgICAgPGxpPlB1cmNoYXNlIFByaWNlPC9saT5cclxuICAgICAgICAgICAgPGxpPlJlYXNvbiBmb3IgTm9uLURlcHJlY2lhdGlvbjwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5BbnkgYWRkaXRpb25hbCByZWxldmFudCBpbmZvcm1hdGlvbjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QgaXMgaGlnaGx5IGFwcHJlY2lhdGVkIGFuZCBlc3NlbnRpYWwgZm9yIGVuc3VyaW5nIHRoYXQgeW91ciBmaW5hbmNpYWwgcmVjb3JkcyBhY2N1cmF0ZWx5IHJlZmxlY3QgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gYWxsb3cgc3VmZmljaWVudCB0aW1lIGZvciByZXZpc2lvbnMgYW5kIHVwZGF0ZXMgYXMgbmVjZXNzYXJ5LjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gV2UgYXJlIGhlcmUgdG8gc3VwcG9ydCB5b3UgaW4gbWFpbnRhaW5pbmcgcHJlY2lzZSBhbmQgY29tcGxpYW50IGZpbmFuY2lhbCByZWNvcmRzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIHlvdXIgY29udGludWVkIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIFJlcGFpcnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbnRhbCBSZXBhaXJzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90ZWQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIG1ha2luZyBuZWNlc3NhcnkgcmVwYWlycyB0byB5b3VyIHJlbnRhbCBwcm9wZXJ0eSB0byBrZWVwIGl0IGluIGdvb2Qgd29ya2luZyBjb25kaXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGV4cGVuc2VzIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIHRheCBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgcmVwYWlycyBtYWRlIGR1cmluZyB0aGUgdGF4IHllYXIuIFBsZWFzZSBpbmNsdWRlOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIG5hdHVyZSBvZiBlYWNoIHJlcGFpciAoZS5nLiwgZml4aW5nIGxlYWtzLCBwYWludGluZywgcmVwYWlyaW5nIGFwcGxpYW5jZXMpLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGRhdGUgZWFjaCByZXBhaXIgd2FzIGNvbXBsZXRlZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBsb2NhdGlvbi9hZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eSB3aGVyZSByZXBhaXJzIHdlcmUgbWFkZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlJlY2VpcHRzIG9yIGludm9pY2VzIGZvciBlYWNoIHJlcGFpciBtYWRlLiBUaGlzIHNob3VsZCBpbmNsdWRlOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIHNlcnZpY2UgcHJvdmlkZXLigJlzIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHBhaWQgZm9yIGVhY2ggcmVwYWlyLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgd29yayBwZXJmb3JtZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgbWV0aG9kIG9mIHBheW1lbnQgdXNlZC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPklmIGFueSByZXBhaXJzIHdlcmUgbWFkZSBieSB5b3Vyc2VsZiBvciBhbiB1bmxpY2Vuc2VkIGNvbnRyYWN0b3IsIHBsZWFzZSBwcm92aWRlOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+QSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgd29yayBwZXJmb3JtZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgY29zdCBvZiBtYXRlcmlhbHMgcHVyY2hhc2VkLCBzdXBwb3J0ZWQgYnkgcmVjZWlwdHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZXN0aW1hdGVkIG51bWJlciBvZiBob3VycyBzcGVudCBvbiBlYWNoIHJlcGFpciwgYWxvbmcgd2l0aCBhIHJlYXNvbmFibGUgaG91cmx5IHJhdGUgZm9yIGxhYm9yLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugbm90ZSB0aGF0IGFjY3VyYXRlIGFuZCBjb21wcmVoZW5zaXZlIGRvY3VtZW50YXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gb3B0aW1pemUgeW91ciB0YXggZGVkdWN0aW9ucyByZWxhdGVkIHRvIHByb3BlcnR5IHJlcGFpciBleHBlbnNlcy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyBuZWVkZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIEltcHJvdmVtZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIEltcHJvdmVtZW50c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB5b3UndmUgbWFkZSB1cGdyYWRlcyBvciBlbmhhbmNlbWVudHMgdG8geW91ciByZW50YWwgcHJvcGVydHkgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBpbmNvcnBvcmF0ZSB0aGVzZSBpbXByb3ZlbWVudHMgaW50byB5b3VyIHRheCBkb2N1bWVudGF0aW9uLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIEVhY2ggSW1wcm92ZW1lbnQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCB1cGdyYWRlIG9yIGVuaGFuY2VtZW50IG1hZGUgdG8gdGhlIHByb3BlcnR5LiBUaGlzIGNvdWxkIGluY2x1ZGUgcmVub3ZhdGlvbnMsIGFkZGl0aW9ucywgb3IgYW55IHVwZ3JhZGVzIHRoYXQgaGF2ZSBpbmNyZWFzZWQgaXRzIHZhbHVlLCBleHRlbmRlZCBpdHMgbGlmZXNwYW4sIG9yIGFkYXB0ZWQgaXQgdG8gbmV3IHVzZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlcyBvZiBJbXByb3ZlbWVudHM6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIG9yIHJhbmdlIG9mIGRhdGVzIHdoZW4gdGhlIGltcHJvdmVtZW50cyB3ZXJlIHN0YXJ0ZWQgYW5kIGNvbXBsZXRlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvc3RzIEludm9sdmVkOjwvc3Ryb25nPiBEZXRhaWxlZCBleHBlbnNlcyByZWxhdGVkIHRvIGVhY2ggaW1wcm92ZW1lbnQgcHJvamVjdC4gVGhpcyBpbmNsdWRlcyBtYXRlcmlhbHMsIGxhYm9yLCBwZXJtaXRzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvc3RzLiBQbGVhc2UgcHJvdmlkZSBpdGVtaXplZCByZWNlaXB0cyBvciBpbnZvaWNlcyBpZiBhdmFpbGFibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBQYXltZW50Ojwvc3Ryb25nPiBDb3BpZXMgb2YgY2FuY2VsbGVkIGNoZWNrcywgYmFuayBzdGF0ZW1lbnRzLCBvciBlbGVjdHJvbmljIHBheW1lbnQgY29uZmlybWF0aW9ucyB0aGF0IHByb3ZlIHBheW1lbnQgZm9yIHRoZSBpbXByb3ZlbWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5CZWZvcmUgYW5kIEFmdGVyIFBpY3R1cmVzOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIHBob3RvZ3JhcGhzIG9mIHRoZSBwcm9wZXJ0eSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBpbXByb3ZlbWVudHMgd2VyZSBtYWRlLiBUaGlzIGhlbHBzIGluIHN1YnN0YW50aWF0aW5nIHRoZSBlbmhhbmNlbWVudCB0byB5b3VyIHByb3BlcnR5J3MgdmFsdWUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db250cmFjdG9yIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBJZiBjb250cmFjdG9ycyB3ZXJlIHVzZWQsIHBsZWFzZSBwcm92aWRlIHRoZWlyIGJ1c2luZXNzIG5hbWVzLCBhZGRyZXNzZXMsIGFuZCBjb250YWN0IGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGNvbXB1dGluZyBwb3RlbnRpYWwgdGF4IGRlZHVjdGlvbnMgb3IgYmVuZWZpdHMgdGhhdCBtYXkgYmUgYXBwbGljYWJsZSB0byB5b3UgYXMgYSByZXN1bHQgb2YgdGhlc2UgcHJvcGVydHkgaW1wcm92ZW1lbnRzLiBQbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGdhdGhlcmVkIGFuZCBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSwgdG8gZW5zdXJlIHRpbWVseSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybnMuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBBY3Rpdml0eSBQYXJ0aWNpcGF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgQWN0aXZpdHkgUGFydGljaXBhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgd2UgbW92ZSBmb3J3YXJkIHdpdGggeW91ciB0YXggcHJlcGFyYXRpb24sIGl0IGhhcyBiZWNvbWUgbmVjZXNzYXJ5IHRvIGNvbGxlY3QgYSBiaXQgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBhY3RpdmUgcGFydGljaXBhdGlvbiBpbiByZW50YWwgcHJvcGVydHkgYWN0aXZpdGllcy4gVGhpcyBpcyBjcnVjaWFsIGZvciBwYXNzaW5nIHNwZWNpZmljIHRheCB0ZXN0cyB0aGF0IGFwcGx5IHRvIGluZGl2aWR1YWxzIGFjdGl2ZWx5IGludm9sdmVkIGluIHRoZWlyIHJlbnRhbCBwcm9wZXJ0aWVzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBkZXRhaWxzIHRvIGVuc3VyZSB3ZSBtZWV0IGFsbCByZXF1aXJlbWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgUGFydGljaXBhdGlvbjo8L3N0cm9uZz4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiB5b3VyIGFjdGl2ZSByb2xlcyB0aGlzIHRheCB5ZWFyLiBUaGlzIGluY2x1ZGVzIG1ha2luZyBkZWNpc2lvbnMgc3VjaCBhcyBhcHByb3ZpbmcgbmV3IHRlbmFudHMsIHNldHRpbmcgcmVudGFsIHRlcm1zLCBvciBhdXRob3JpemluZyByZXBhaXJzIGFuZCBtYWludGVuYW5jZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRpbWUgU3BlbnQ6PC9zdHJvbmc+IEFuIGVzdGltYXRlZCBudW1iZXIgb2YgaG91cnMgeW91IHBlcnNvbmFsbHkgc3BlbnQgb24gYWN0aXZpdGllcyByZWxhdGVkIHRvIHRoZSBtYW5hZ2VtZW50IGFuZCBkZWNpc2lvbi1tYWtpbmcgb2YgeW91ciByZW50YWwgcHJvcGVydHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZWNpc2lvbiBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIHJlY29yZHMgb3IgY29ycmVzcG9uZGVuY2UgdGhhdCBzaG93Y2FzZSB5b3VyIGludm9sdmVtZW50IGluIGtleSBkZWNpc2lvbnMgKGUtbWFpbHMsIHNpZ25lZCBkb2N1bWVudHMsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgTWFuYWdlbWVudCBFbmdhZ2VtZW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgZW5nYWdlZCB3aXRoIGEgcHJvcGVydHkgbWFuYWdlciwgYSBkZXNjcmlwdGlvbiBvZiB0aGVpciByb2xlIHZlcnN1cyB0aGUgdGFza3MgeW91IHBlcnNvbmFsbHkgaGFuZGxlIHdvdWxkIGJlIGhlbHBmdWwuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB3aXRoIHRoZXNlIHNwZWNpZmljcyB3aWxsIGdyZWF0bHkgZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIGFkdmFudGFnZW91cyBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiByZWdhcmRpbmcgcmVudGFsIGFjdGl2aXRpZXMuIElmIHRoZXJlIGFyZSBhbnkgYXNwZWN0cyBvZiB0aGlzIHJlcXVlc3QgdGhhdCByZXF1aXJlIGNsYXJpZmljYXRpb24sIG9yIGlmIGFzc2lzdGFuY2UgaXMgbmVlZGVkLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZWFsIEVzdGF0ZSBQcm9mZXNzaW9uYWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlYWwgRXN0YXRlIFByb2Zlc3Npb25hbFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIHNwZW50IG1vcmUgdGhhbiBoYWxmIG9mIHlvdXIgd29ya2luZyB0aW1lIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgdGhpcyB0YXggeWVhci4gVG8gcHJvcGVybHkgZXZhbHVhdGUgeW91ciBlbGlnaWJpbGl0eSBmb3IgdGF4IGJlbmVmaXRzIGFzIGEgUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5TdW1tYXJ5IG9mIEFubnVhbCBXb3JraW5nIEhvdXJzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIHN1bW1hcnkgb2YgeW91ciB0b3RhbCB3b3JraW5nIGhvdXJzIHRoaXMgeWVhciwgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGhvdXJzIGRlZGljYXRlZCB0byByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZWFsIEVzdGF0ZSBBY3Rpdml0aWVzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHN1Y2ggYXMgY29udHJhY3RzLCBlbmdhZ2VtZW50IGxldHRlcnMsIG9yIGNsaWVudCBpbnZvaWNlcyB0aGF0IHByb3ZlIHlvdXIgcGFydGljaXBhdGlvbiBpbiByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzIChlLmcuLCBzYWxlcywgbGVhc2luZywgbWFuYWdlbWVudCkuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkxpc3Qgb2YgUHJvcGVydGllczo8L3N0cm9uZz4gQSBsaXN0IG9mIHByb3BlcnRpZXMgeW91IGhhdmUgbWFuYWdlZCwgc29sZCwgb3IgYXJlIGN1cnJlbnRseSBzZWxsaW5nLCBpbmNsdWRpbmcgdGhlaXIgbG9jYXRpb24gYW5kIHRoZSBuYXR1cmUgb2YgeW91ciBpbnZvbHZlbWVudC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgSm9iIERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIG91dGxpbmUgb2YgeW91ciByb2xlKHMpIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMsIHNwZWNpZnlpbmcgd2hldGhlciB5b3VyIGludm9sdmVtZW50IGlzIHByaW1hcmlseSBhcyBhIGJyb2tlciwgYWdlbnQsIHByb3BlcnR5IG1hbmFnZXIsIGV0Yy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UmVhbCBFc3RhdGUgTGljZW5zZXMgb3IgQ2VydGlmaWNhdGlvbnM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgbGljZW5zZXMgb3IgY2VydGlmaWNhdGlvbnMgdGhhdCB2YWxpZGF0ZSB5b3VyIHByb2Zlc3Npb25hbCBzdGF0dXMgaW4gdGhlIHJlYWwgZXN0YXRlIHNlY3Rvci48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+Q2FsZW5kYXIgb3IgU2NoZWR1bGU6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgYSBjYWxlbmRhciBvciBzY2hlZHVsZSByZWZsZWN0aW5nIHlvdXIgcmVhbCBlc3RhdGUgYWN0aXZpdGllcyB0aHJvdWdob3V0IHRoZSB5ZWFyIHRvIGhlbHAgY29ycm9ib3JhdGUgdGhlIHRpbWUgc3BlbnQgaW4gdGhlc2UgYWN0aXZpdGllcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGlzIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gdXMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJucy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZC4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFydGlhbCBSZW50YWwgUHJvcGVydHlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBhcnRpYWwgUmVudGFsIFByb3BlcnR5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGxldHRpbmcgdXMga25vdyB0aGF0IHlvdSByZW50ZWQgb3V0IGEgcG9ydGlvbiBvZiB5b3VyIHByb3BlcnR5IHRoaXMgdGF4IHllYXIgd2hpbGUgdXNpbmcgdGhlIHJlc3QgZm9yIHBlcnNvbmFsIHB1cnBvc2VzLiBUbyBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggcmV0dXJucyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBiZXN0IHRheCBhZHZhbnRhZ2VzLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgcGFydGlhbCByZW50YWwgcHJvcGVydHk6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERldGFpbHM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db21wbGV0ZSBhZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSByZW50ZWQgcG9ydGlvbiBhbmQgdGhlIHBlcnNvbmFsIHVzZSBwb3J0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgQWdyZWVtZW50Ojwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlN0YXJ0IGFuZCBlbmQgZGF0ZXMgb2YgdGhlIHJlbnRhbCBwZXJpb2Qgd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEluY29tZTo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGFkdmFuY2UgcmVudCBvciBzZWN1cml0eSBkZXBvc2l0cyBub3QgcmV0dXJuZWQgdG8gdGhlIHRlbmFudC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZXM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgZXhwZW5zZXMgZm9yIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyByZXBhaXJzLCB1dGlsaXRpZXMsIGluc3VyYW5jZSwgYW5kIHByb3BlcnR5IHRheGVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SW5mb3JtYXRpb24gb24gZXhwZW5zZXMgc2hhcmVkIGJldHdlZW4gdGhlIHJlbnRhbCBhbmQgcGVyc29uYWwgdXNlIHBvcnRpb25zLCBhbmQgaG93IHRoZXkgYXJlIGRpdmlkZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlVzZSBvZiBQcm9wZXJ0eTo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIG51bWJlciBvZiBkYXlzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VG90YWwgbnVtYmVyIG9mIGRheXMgcmVudGVkIGF0IGZhaXIgcmVudGFsIHZhbHVlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgYW5kIFJlcGFpcnM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBpbXByb3ZlbWVudHMgb3IgcmVwYWlycyBtYWRlIHNwZWNpZmljYWxseSBpbiB0aGUgcmVudGFsIHBvcnRpb24gYW5kIHRoZSBjb3N0IGludm9sdmVkLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZ2F0aGVyIHRoZXNlIGRldGFpbHMgYW5kIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBUaGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB0aGlzIGluZm9ybWF0aW9uIGFyZSBjcnVjaWFsIGZvciBjb3JyZWN0IHRheCBmaWxpbmcgYW5kIG9wdGltaXppbmcgeW91ciBwb3RlbnRpYWwgZGVkdWN0aW9ucyBhbmQgdGF4IGJlbmVmaXRzLjwvcD5cclxuICAgIDxwPkRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCB1c2luZyB5b3VyIHJlbnRhbCBwcm9wZXJ0eSBmb3IgcGVyc29uYWwgcHVycG9zZXMgZHVyaW5nIHRoZSBsYXN0IHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgZGF5cyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3Nlczo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIGV4YWN0IG51bWJlciBvZiBkYXlzIGR1cmluZyB0aGUgdGF4IHllYXIgd2hlbiB0aGUgcHJvcGVydHkgd2FzIHVzZWQgYnkgeW91LCB5b3VyIGZhbWlseSwgb3IgZnJpZW5kcyB3aXRob3V0IGNoYXJnaW5nIHJlbnQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBkYXlzIHJlbnRlZCBhdCBmYWlyIHJlbnRhbCBwcmljZTo8L3N0cm9uZz4gUHJvdmlkZSB0aGUgbnVtYmVyIG9mIGRheXMgdGhlIHByb3BlcnR5IHdhcyBhY3R1YWxseSByZW50ZWQgb3V0IHRvIHRlbmFudHMgYXQgYSBmYWlyIHJlbnRhbCBwcmljZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIHRvdGFsIGFtb3VudCBvZiByZW50YWwgaW5jb21lIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIgZm9yIHRoaXMgcHJvcGVydHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgZXhwZW5zZXM6PC9zdHJvbmc+IFByb3ZpZGUgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBleHBlbnNlcyBpbmN1cnJlZCBmb3IgdGhlIHByb3BlcnR5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFkdmVydGlzaW5nLCBjbGVhbmluZyBhbmQgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBwcm9wZXJ0eSB0YXhlcywgbW9ydGdhZ2UgaW50ZXJlc3QsIGFuZCBhbnkgcmVwYWlycy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgZGF0ZXM6PC9zdHJvbmc+IExpc3QgYW55IGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSBwcm9wZXJ0eSBkdXJpbmcgdGhlIHRheCB5ZWFyLCBhbG9uZyB3aXRoIHRoZSBkYXRlIG9mIGltcHJvdmVtZW50IGFuZCB0aGUgY29zdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IFRheCBTdGF0ZW1lbnQgYW5kIE1vcnRnYWdlIEludGVyZXN0IFN0YXRlbWVudDo8L3N0cm9uZz4gQXR0YWNoIGEgY29weSBvZiB5b3VyIGFubnVhbCBwcm9wZXJ0eSB0YXggc3RhdGVtZW50IGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCBzdGF0ZW1lbnQgZm9yIHRoaXMgcHJvcGVydHkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Qcm92aWRpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGVuYWJsZSB1cyB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBwb3J0aW9uIG9mIGV4cGVuc2VzIHRoYXQgY2FuIGJlIGRlZHVjdGVkIGFuZCByZXBvcnQgeW91ciBpbmNvbWUgYWNjdXJhdGVseS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCBjb3VudHMgYXMgcGVyc29uYWwgdXNlIHZlcnN1cyByZW50YWwgdXNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPiAgXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFydGlhbCBQZXJzb25hbCBVc2UgUmVudGFsXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgcmVudGluZyBvdXQgcGFydCBvZiB5b3VyIHByb3BlcnR5IGZvciBwcm9maXQsIHdoaWxlIGFsc28gdXNpbmcgaXQgaW4gYSBtYW5uZXIgdGhhdCBtYXkgY2xhc3NpZnkgaXQgYXMgeW91ciByZXNpZGVuY2UuIFRvIGFjY3VyYXRlbHkgY2FwdHVyZSBhbGwgaW5mb3JtYXRpb24gYW5kIGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQvTGVhc2U6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMsIHJlbnRhbCBwZXJpb2QsIGFuZCBwYXltZW50IGRldGFpbHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEluY29tZSBSZWNvcmRzOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIG9mIGFsbCByZW50YWwgaW5jb21lIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBSZWNlaXB0cyBhbmQgcmVjb3JkcyBvZiBleHBlbnNlcyByZWxhdGVkIHRvIHRoZSByZW50YWwgYWN0aXZpdHkuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcmVwYWlycywgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBhbmQgcHJvcGVydHkgbWFuYWdlbWVudCBmZWVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIFVzZSBEZXRhaWxzOjwvc3Ryb25nPiBBIGxvZyBvciBjYWxlbmRhciBkb2N1bWVudGluZyB0aGUgc3BlY2lmaWMgZGF5cyB0aGUgcHJvcGVydHkgd2FzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzIGFuZCBub3QgcmVudGVkIG91dC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBUYXggYW5kIE1vcnRnYWdlIEludGVyZXN0IFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBwcm9wZXJ0eSB0YXggc3RhdGVtZW50cyBhbmQgbW9ydGdhZ2UgaW50ZXJlc3Qgc3RhdGVtZW50cywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgYW5kIERlcHJlY2lhdGlvbjo8L3N0cm9uZz4gUmVjb3JkcyBvZiBhbnkgcHJvcGVydHkgaW1wcm92ZW1lbnRzIG9yIGRlcHJlY2lhdGlvbiBzY2hlZHVsZXMgaWYgcHJldmlvdXNseSBjbGFpbWVkIG9uIHlvdXIgdGF4IHJldHVybnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JdCBpcyBjcnVjaWFsIHRoYXQgd2UgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBkb2N1bWVudHMgdG8gZW5zdXJlIHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2Ugb3IgY29udGFjdCB1cyBkaXJlY3RseSBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGNvbmNlcm5zLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUm95YWx0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJveWFsdHkgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHlvdSd2ZSBpbmRpY2F0ZWQgcmVjZWl2aW5nIHBheW1lbnRzIHRoYXQgY291bGQgYmUgY29uc2lkZXJlZCByb3lhbHR5IGluY29tZSB0aGlzIHBhc3QgeWVhci4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWxsIEZvcm1zIDEwOTktTUlTQzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgY29waWVzIG9mIGFueSAxMDk5LU1JU0MgZm9ybXMgcmVjZWl2ZWQgZm9yIHJveWFsdHkgcGF5bWVudHMuIEluY2x1ZGUgdGhvc2UgZnJvbSB0cmFkaXRpb25hbCBzb3VyY2VzIGxpa2UgcGF0ZW50cywgY29weXJpZ2h0cywgYW5kIG1pbmVyYWwgcmlnaHRzLCBhcyB3ZWxsIGFzIGFueSBmcm9tIGRpZ2l0YWwgY29udGVudCBwbGF0Zm9ybXMgc3VjaCBhcyBVZGVteSwgWW91VHViZSwgZXRjLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgU3RhdGVtZW50IG9mIEVhcm5pbmdzOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZSByb3lhbHR5IGluY29tZSBmcm9tIHNvdXJjZXMgdGhhdCBkbyBub3QgcHJvdmlkZSBhIDEwOTktTUlTQywgb3IgaW4gYWRkaXRpb24gdG8gdGhvc2UgdGhhdCBkbywgd2UgbmVlZCBhIGRldGFpbGVkIHN0YXRlbWVudCBvciBsb2cgb2YgdGhlc2UgZWFybmluZ3MuIFRoaXMgc2hvdWxkIGluY2x1ZGUgZGF0ZXMsIGFtb3VudHMsIGFuZCBzb3VyY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZXhwZW5zZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnZW5lcmF0aW9uIG9mIHRoaXMgcm95YWx0eSBpbmNvbWUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFya2V0aW5nLCBwcm9kdWN0aW9uLCBhbmQgbGVnYWwgZXhwZW5zZXMuIFBsZWFzZSBwcm92aWRlIHJlY2VpcHRzLCBpbnZvaWNlcywgb3IgYSBkZXRhaWxlZCBleHBlbnNlIGxvZy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRpZ2l0YWwgQ29udGVudCBQbGF0Zm9ybSBSZXBvcnRzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIGFueSB5ZWFyLWVuZCBzdW1tYXJ5IHJlcG9ydHMgb3IgaW5jb21lIHN0YXRlbWVudHMgcHJvdmlkZWQgYnkgZGlnaXRhbCBwbGF0Zm9ybXMgd2hlcmUgeW91ciBjb250ZW50IGlzIGhvc3RlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBXaXRoaG9sZGluZyBOb3RpY2VzOjwvc3Ryb25nPiBJZiB0YXggd2FzIHdpdGhoZWxkIGZyb20gYW55IG9mIHlvdXIgcm95YWx0eSBwYXltZW50cywgcGxlYXNlIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBvciBub3RpY2VzIGluZGljYXRpbmcgdGhlIGFtb3VudCB3aXRoaGVsZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZG9jdW1lbnRzIGFuZCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gd2lsbCBoZWxwIHVzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHByZXBhcmF0aW9uIGlzIGJvdGggYWNjdXJhdGUgYW5kIG1heGltaXplZCBmb3IgeW91ciBiZW5lZml0LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgaXRlbXMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvdGVsIE1vdGVsIEJlZCBCcmVha2Zhc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkhvdGVsIE1vdGVsIEJlZCBCcmVha2Zhc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBhY2N1cmF0ZWx5IGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBvd25pbmcgcmVudGFsIHByb3BlcnRpZXMgdGhhdCBvcGVyYXRlIGFzIGEgSG90ZWwsIE1vdGVsLCBCZWQgYW5kIEJyZWFrZmFzdCwgb3Igb2ZmZXIgc2hvcnQtdGVybSBhY2NvbW1vZGF0aW9ucyBzaW1pbGFyIHRvIEFpcmJuYi4gVG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHNlcnZpY2UgYW5kIGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlIGFkZHJlc3MgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBwcm9wZXJ0eSB5b3UgcmVudCBvdXQgb24gYSBzaG9ydC10ZXJtIGJhc2lzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIFJlY29yZHM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgYWxsIGluY29tZSByZWNlaXZlZCBmcm9tIHRoZXNlIHByb3BlcnRpZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcmVudGFsIGluY29tZSwgY2xlYW5pbmcgZmVlcywgYW5kIGFueSBvdGhlciBjaGFyZ2VzIHRvIHJlbnRlcnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IENvbXByZWhlbnNpdmUgbGlzdCBvZiBhbGwgZXhwZW5zZXMgcmVsYXRlZCB0byBlYWNoIHJlbnRhbCBhY3Rpdml0eS4gVGhpcyBpbmNsdWRlcyBtb3J0Z2FnZSBpbnRlcmVzdCwgcHJvcGVydHkgdGF4ZXMsIGluc3VyYW5jZSwgcmVwYWlycyBhbmQgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgbWFuYWdlbWVudCBmZWVzLCBhbmQgYWR2ZXJ0aXNpbmcgY29zdHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5PY2N1cGFuY3kgSW5mb3JtYXRpb246PC9zdHJvbmc+IE51bWJlciBvZiBkYXlzIGVhY2ggcHJvcGVydHkgd2FzIHJlbnRlZCBvdXQgZHVyaW5nIHRoZSB5ZWFyLCBhcyB3ZWxsIGFzIHRoZSBudW1iZXIgb2YgZGF5cyBpdCB3YXMgdXNlZCBmb3IgcGVyc29uYWwgcHVycG9zZXMsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5MZWdhbCBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBDb3BpZXMgb2YgYW55IGxvY2FsIGxpY2Vuc2VzLCBwZXJtaXRzLCBvciByZWdpc3RyYXRpb25zIHJlcXVpcmVkIGZvciBvcGVyYXRpbmcgdGhlc2UgcmVudGFsIHByb3BlcnRpZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGxpc3QgaXMgbm90IGV4aGF1c3RpdmUsIGFuZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG1heSBiZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gUGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgcmVwbHkgdG8gdGhpcyBlbWFpbCBvciB1cGxvYWQgdGhlbSBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC4gWW91ciBwcm9tcHQgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgZXNzZW50aWFsIGZvciB0aGUgYWNjdXJhdGUgYW5kIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIGNob29zaW5nIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBSZWNvdmVyeVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBSZWNvdmVyeVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcmVjZW50IGNvbmZpcm1hdGlvbiByZWdhcmRpbmcgcmVjZWl2aW5nIHBheW1lbnRzIG9yIHJlZnVuZHMgY29uc2lkZXJlZCBhICdUYXhhYmxlIFJlY292ZXJ5JyBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBpbmNvcnBvcmF0ZSB0aGlzIGludG8geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscy4gQ291bGQgeW91IHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG48b2w+XHJcbiAgPGxpPjxiPkFtb3VudCBvZiBUYXhhYmxlIFJlY292ZXJ5OjwvYj4gVGhlIHRvdGFsIHN1bSBvZiBhbGwgcGF5bWVudHMgb3IgcmVmdW5kcyByZWNlaXZlZCB0aGF0IGFyZSBjbGFzc2lmaWVkIGFzIHRheGFibGUgcmVjb3ZlcnkuPC9saT5cclxuICA8bGk+PGI+U291cmNlIERvY3VtZW50YXRpb246PC9iPiBQbGVhc2UgcHJvdmlkZSBhbnkgb2ZmaWNpYWwgc3RhdGVtZW50cyBvciBkb2N1bWVudHMgY29uZmlybWluZyB0aGVzZSBwYXltZW50cyBvciByZWZ1bmRzLiBUaGlzIGNvdWxkIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzLCByZWZ1bmQgb3IgY29tcGVuc2F0aW9uIGxldHRlcnMsIG9yIGFueSBvdGhlciByZWxldmFudCBkb2N1bWVudGF0aW9uLjwvbGk+XHJcbiAgPGxpPjxiPk5hdHVyZSBvZiB0aGUgT3JpZ2luYWwgRGVkdWN0aW9uIG9yIENyZWRpdDo8L2I+IEEgYnJpZWYgZXhwbGFuYXRpb24gb3IgZG9jdW1lbnRhdGlvbiBvZiB0aGUgb3JpZ2luYWwgZXhwZW5zZSBvciBpbnZlc3RtZW50IHRoYXQgbGVkIHRvIHRoZSB0YXhhYmxlIHJlY292ZXJ5LiBUaGlzIGluY2x1ZGVzIHRoZSB0YXggeWVhciBvZiB0aGUgZGVkdWN0aW9uIG9yIGNyZWRpdC48L2xpPlxyXG4gIDxsaT48Yj5EYXRlIFJlY2VpdmVkOjwvYj4gVGhlIHNwZWNpZmljIGRhdGVzIHdoZW4gdGhlc2UgcGF5bWVudHMgb3IgcmVmdW5kcyB3ZXJlIHJlY2VpdmVkLjwvbGk+XHJcbiAgPGxpPjxiPkFueSBSZWxhdGVkIEV4cGVuc2UgRG9jdW1lbnRhdGlvbjo8L2I+IElmIHRoZXJlIHdlcmUgYW55IGV4cGVuc2VzIGluY3VycmVkIHRvIHJlY2VpdmUgdGhpcyByZWNvdmVyeSAoc3VjaCBhcyBsZWdhbCBmZWVzKSwgcGxlYXNlIHByb3ZpZGUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbi48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciB1cyB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBjb21wbGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuIElmIHlvdSBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0YXhhYmxlIHJlY292ZXJpZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzZXBhcmF0ZSBpbnN0YW5jZS48L3A+XHJcbjxwPlBsZWFzZSBsZXQgdXMga25vdyBpZiB5b3UgbmVlZCBhbnkgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbi4gV2UgYXJlIGhlcmUgdG8gaGVscCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBBbGltb255XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIEFsaW1vbnlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYCAgICA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBwcmVsaW1pbmFyeSBpbmZvcm1hdGlvbiBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFdlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBhbGltb255IHBheW1lbnRzIGluIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jbHVkZSB0aGlzIGluIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscyBhbmQgZG9jdW1lbnRzIGJhc2VkIG9uIHRoZSBkYXRlIG9mIHlvdXIgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC48L3A+XHJcbiAgICA8cD5BbGltb255IHBheW1lbnRzIGFyZSBjb25zaWRlcmVkIHRheGFibGUgaW5jb21lIGZvciB0aGUgcmVjZWl2ZXIgZGVwZW5kaW5nIG9uIHRoZSBkYXRlIG9mIHRoZSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LiBEaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50cyBleGVjdXRlZCBhZnRlciBEZWNlbWJlciAzMSwgMjAxOCwgZG8gbm90IGNvdW50IGFsaW1vbnkgcGF5bWVudHMgYXMgdGF4YWJsZSBpbmNvbWUuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzIHRvIGVuc3VyZSB3ZSBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHBheW1lbnRzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIHlvdXIgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudDo8L3N0cm9uZz4gVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFsaW1vbnkgcGF5bWVudHMgeW91IHJlY2VpdmVkIGFyZSB0YXhhYmxlLiBQbGVhc2UgcHJvdmlkZSBhIGNvcHkgb2YgdGhlIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQgb2YgYWxpbW9ueSByZWNlaXZlZCB0aGlzIHRheCB5ZWFyOjwvc3Ryb25nPiBUb3RhbCBhbm51YWwgYW1vdW50IHJlY2VpdmVkIGluIGFsaW1vbnkgcGF5bWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgYWxpbW9ueSBwYXltZW50czo8L3N0cm9uZz4gQmFuayBzdGF0ZW1lbnRzLCB0cmFuc2ZlciByZWNlaXB0cywgb3IgYW55IGxlZ2FsIGRvY3VtZW50cyBzaG93aW5nIHRoZSBhbW91bnQgb2YgYWxpbW9ueSByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBheWVy4oCZcyBpbmZvcm1hdGlvbjo8L3N0cm9uZz4gRnVsbCBuYW1lIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9mIHRoZSBwZXJzb24gZnJvbSB3aG9tIHlvdSBoYXZlIHJlY2VpdmVkIHRoZSBhbGltb255IHBheW1lbnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGlzIGNydWNpYWwgZm9yIHRoZSB0aW1lbHkgYW5kIGFjY3VyYXRlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGxldCB1cyBrbm93IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJHb3Zlcm5tZW50IEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJHb3Zlcm5tZW50IEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVwb3J0ZWQgcmVjZWl2aW5nIGdvdmVybm1lbnQgYmVuZWZpdHMgdGhhdCBtYXkgYmUgdGF4YWJsZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGZpbGluZywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+Rm9ybSAxMDk5LUc6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgY29weSBvZiBGb3JtIDEwOTktRyBmb3IgZWFjaCBpbnN0YW5jZSBvZiBnb3Zlcm5tZW50IGJlbmVmaXRzIHJlY2VpdmVkLiBUaGlzIGZvcm0gaXMgdHlwaWNhbGx5IGlzc3VlZCBmb3IgdW5lbXBsb3ltZW50IGNvbXBlbnNhdGlvbiwgc3RhdGUgb3IgbG9jYWwgaW5jb21lIHRheCByZWZ1bmRzLCBjcmVkaXRzIG9yIG9mZnNldHMsIGFuZCBvdGhlciBnb3Zlcm5tZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIGxpc3Qgb2YgYmVuZWZpdHMgcmVjZWl2ZWQ6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBnb3Zlcm5tZW50IGJlbmVmaXRzIG5vdCByZXBvcnRlZCBvbiBGb3JtIDEwOTktRyAoc3VjaCBhcyBjZXJ0YWluIHdlbGZhcmUgYmVuZWZpdHMpLCBwbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGxpc3QgaW5jbHVkaW5nIHRoZSB0eXBlIG9mIGJlbmVmaXQsIGFtb3VudCByZWNlaXZlZCwgYW5kIHRoZSBhZ2VuY3kgdGhhdCBwcm92aWRlZCB0aGUgYmVuZWZpdC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgQmVuZWZpdHM6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMsIGluY2x1ZGUgeW91ciBTU0EtMTA5OSBvciBSUkItMTA5OSBmb3JtIHdoaWNoIHJlcG9ydHMgdGhlc2UgZWFybmluZ3MuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBmb3IgYW55IHdpdGhoZWxkIHRheGVzOjwvc3Ryb25nPiBJZiB0YXhlcyB3ZXJlIHdpdGhoZWxkIGZyb20gYW55IGJlbmVmaXRzIHJlY2VpdmVkLCBpbmNsdWRlIHRoZSBhcHBsaWNhYmxlIGRvY3VtZW50YXRpb24gc2hvd2luZyB0aGUgYW1vdW50IHdpdGhoZWxkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHNlbmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgcHJvY2Vzc2VkIHRpbWVseSBhbmQgY29ycmVjdGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNvY2lhbCBTZWN1cml0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNvY2lhbCBTZWN1cml0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhcyB3ZSBwcm9jZWVkIHdpdGggcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybi4gQXMgeW91J3ZlIGluZGljYXRlZCByZWNlaXB0IG9mIFNvY2lhbCBTZWN1cml0eSBiZW5lZml0cyB0aGlzIHRheCB5ZWFyLCB3ZSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzL2luZm9ybWF0aW9uIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgdGF4IGZpbGluZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgQmVuZWZpdCBTdGF0ZW1lbnQgKEZvcm0gU1NBLTEwOTkpPC9zdHJvbmc+IC0gVGhpcyBmb3JtIGRldGFpbHMgdGhlIHRvdGFsIGFtb3VudCBvZiBzb2NpYWwgc2VjdXJpdHkgYmVuZWZpdHMgcmVjZWl2ZWQuIElmIHlvdSBoYXZlIG1pc3BsYWNlZCB0aGlzIGZvcm0sIGl0IGNhbiBiZSBvYnRhaW5lZCBvbmxpbmUgdGhyb3VnaCB5b3VyIFNvY2lhbCBTZWN1cml0eSBhY2NvdW50LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Ob3RpY2Ugb2YgQWRqdXN0ZWQgQW1vdW50PC9zdHJvbmc+IChpZiBhcHBsaWNhYmxlKSAtIElmIHRoZXJlIGhhdmUgYmVlbiBhbnkgYWRqdXN0bWVudHMgb3IgY29ycmVjdGlvbnMgdG8geW91ciBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMgZHVyaW5nIHRoZSB5ZWFyLCBwbGVhc2UgcHJvdmlkZSBhbnkgbm90aWNlcyBvciBkb2N1bWVudGF0aW9uIHJlZmxlY3RpbmcgdGhlc2UgY2hhbmdlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+U3VwcGxlbWVudGFsIFNlY3VyaXR5IEluY29tZSAoU1NJKTwvc3Ryb25nPiAoaWYgYXBwbGljYWJsZSkgLSBBbHRob3VnaCBTU0kgaXMgdHlwaWNhbGx5IG5vdCB0YXhhYmxlLCBkb2N1bWVudGF0aW9uIG9mIHRoZXNlIHBheW1lbnRzIGlzIHN0aWxsIHJlcXVpcmVkIGZvciBjb21wcmVoZW5zaXZlIGZpbmFuY2lhbCBhc3Nlc3NtZW50LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHRoZSB0YXhhYmxlIHBvcnRpb24gb2YgeW91ciBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMsIGlmIGFueSwgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMuIEZhaWx1cmUgdG8gcHJvdmlkZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgaW5mb3JtYXRpb24gbWF5IHJlc3VsdCBpbiBkZWxheXMgb3IgaW5hY2N1cmFjaWVzIGluIHlvdXIgdGF4IGZpbGluZy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGVzZSBtYXR0ZXJzLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gb2J0YWluaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJHYW1ibGluZyBXaW5uaW5nc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiR2FtYmxpbmcgV2lubmluZ3NcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+V2UgdW5kZXJzdGFuZCBmcm9tIHlvdXIgcHJldmlvdXMgYW5zd2VycyB0aGF0IHlvdSBoYXZlIGV4cGVyaWVuY2VkIGdhbWJsaW5nIHdpbm5pbmdzIHRoaXMgdGF4IHllYXIgZnJvbSBsb3R0ZXJpZXMsIGNhc2lub3MsIGJldHRpbmcsIG9yIG90aGVyIGZvcm1zIG9mIGdhbWJsaW5nLiBUbyBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggZmlsaW5ncywgaXQncyBlc3NlbnRpYWwgdGhhdCB3ZSBjb2xsZWN0IHNwZWNpZmljIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGVzZSB3aW5uaW5ncy48L3A+XHJcbjxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbjxvbD5cclxuICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGZvciBFYWNoIFdpbm5pbmc6PC9zdHJvbmc+IFRoaXMgY2FuIGluY2x1ZGUgVy0yRyBmb3Jtcywgc3RhdGVtZW50cyBmcm9tIGNhc2lub3MsIHJhY2V0cmFja3MsIG9yIG90aGVyIGdhbWJsaW5nIGVzdGFibGlzaG1lbnRzLCBhbmQgYW55IG90aGVyIG9mZmljaWFsIGRvY3VtZW50YXRpb24gdGhhdCByZXBvcnRzIHlvdXIgd2lubmluZ3MuPC9saT5cclxuICA8bGk+PHN0cm9uZz5EYXRlcyBvZiBXaW5uaW5nczo8L3N0cm9uZz4gVGhlIHNwZWNpZmljIGRhdGVzIG9uIHdoaWNoIHlvdSBoYWQgZ2FtYmxpbmcgd2lubmluZ3MuPC9saT5cclxuICA8bGk+PHN0cm9uZz5UeXBlcyBvZiBHYW1ibGluZyBBY3Rpdml0aWVzOjwvc3Ryb25nPiBQbGVhc2Ugc3BlY2lmeSB3aGV0aGVyIHlvdXIgd2lubmluZ3Mgd2VyZSBmcm9tIGxvdHRlcmllcywgY2FzaW5vcywgYmV0dGluZywgc3BvcnRzIGJldHRpbmcsIGdhbWVzIG9mIGNoYW5jZSwgb3IgYW55IG90aGVyIGZvcm1zIG9mIGdhbWJsaW5nLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+QW1vdW50IG9mIFdpbm5pbmdzOjwvc3Ryb25nPiBUaGUgdG90YWwgYW1vdW50IHdvbiBmcm9tIGVhY2ggZ2FtYmxpbmcgYWN0aXZpdHkuIFBsZWFzZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gY2FzaCB3aW5uaW5ncyBhbmQgdGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIGFueSBub24tY2FzaCBwcml6ZXMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBSZWxhdGVkIHRvIEdhbWJsaW5nIEFjdGl2aXRpZXM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIGxpc3QgYW55IGV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciBnYW1ibGluZyBhY3Rpdml0aWVzLCBzdWNoIGFzIGJ1eS1pbnMgb3IgdHJhdmVsIGV4cGVuc2VzLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZXNlIGV4cGVuc2VzIG1heSB2YXJ5LjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+TG9zc2VzOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSByZWNvcmRzIG9mIHlvdXIgbG9zc2VzLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9mIHRoZXNlIGxvc3NlcyBhcyB0aGV5IGNhbiBwb3RlbnRpYWxseSBvZmZzZXQgeW91ciB3aW5uaW5ncyBmb3IgdGF4IHB1cnBvc2VzLiBOb3RlLCBsb3NzZXMgY2FuIG9ubHkgYmUgY2xhaW1lZCB1cCB0byB0aGUgYW1vdW50IG9mIHRvdGFsIHdpbm5pbmdzLjwvbGk+XHJcbjwvb2w+XHJcbjxwPkl0J3MgaW1wb3J0YW50IHRvIGdhdGhlciB0aGlzIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZ2FtYmxpbmcgd2lubmluZ3MgYW5kIGFueSByZWxhdGVkIGRlZHVjdGlvbnMgb3IgbG9zc2VzIG9uIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBkZXRhaWxlZCBhbmQgYWNjdXJhdGUgYXMgcG9zc2libGUgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB5b3VyIHRheCBmaWxpbmcuPC9wPlxyXG48cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgb3IgaWYgeW91IG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuIFdlJ3JlIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNhbmNlbGxhdGlvbiBvZiBEZWJ0IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2FuY2VsbGF0aW9uIG9mIERlYnQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPk91ciByZWNvcmRzIGluZGljYXRlIHlvdSd2ZSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBoYXZpbmcgZGVidHMgZm9yZ2l2ZW4sIGNhbmNlbGVkLCBvciBkaXNjaGFyZ2VkIGZvciBsZXNzIHRoYW4gdGhlIGFtb3VudCB5b3Ugb3dlZCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmZvcm1hdGlvbiBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGV4cGxvcmUgYW55IGFwcGxpY2FibGUgdGF4IHJlbGllZiBvciBleGNsdXNpb25zLCB3ZSBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscyBmcm9tIHlvdS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuPG9sPlxyXG48bGk+PHN0cm9uZz5Gb3JtIDEwOTktQzwvc3Ryb25nPjogQ29waWVzIG9mIGFueSBGb3JtIDEwOTktQyB5b3UgcmVjZWl2ZWQgcmVsYXRlZCB0byB0aGUgY2FuY2VsbGF0aW9uIG9mIGRlYnQuPC9saT5cclxuPGxpPjxzdHJvbmc+RGV0YWlsZWQgTGlzdCBvZiBEZWJ0czwvc3Ryb25nPjogSWYgeW91IGRpZG4ndCByZWNlaXZlIGEgRm9ybSAxMDk5LUMsIHBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgbGlzdCBvZiBhbnkgZGVidHMgdGhhdCB3ZXJlIGNhbmNlbGVkLCBpbmNsdWRpbmc6XHJcbiAgICA8dWw+XHJcbiAgICA8bGk+VGhlIG5hbWUgb2YgdGhlIGNyZWRpdG9yPC9saT5cclxuICAgIDxsaT5UaGUgb3JpZ2luYWwgYW1vdW50IG9mIHRoZSBkZWJ0PC9saT5cclxuICAgIDxsaT5UaGUgYW1vdW50IGNhbmNlbGVkPC9saT5cclxuICAgIDxsaT5UaGUgZGF0ZSBvZiBjYW5jZWxsYXRpb248L2xpPlxyXG4gICAgPC91bD5cclxuPC9saT5cclxuPGxpPjxzdHJvbmc+RXhwbGFuYXRpb24gb2YgQ2lyY3Vtc3RhbmNlczwvc3Ryb25nPjogQSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBkZWJ0IGNhbmNlbGxhdGlvbiAoZS5nLiwgZmluYW5jaWFsIGhhcmRzaGlwLCByZXR1cm4gb2YgcHVyY2hhc2VkIGdvb2RzLCBldGMuKS48L2xpPlxyXG48bGk+PHN0cm9uZz5JbnNvbHZlbmN5IERvY3VtZW50YXRpb248L3N0cm9uZz46IElmIHlvdSB3ZXJlIGluc29sdmVudCAod2hlcmUgeW91ciB0b3RhbCBkZWJ0cyBleGNlZWRlZCB5b3VyIHRvdGFsIGFzc2V0cykgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjYW5jZWxsYXRpb24sIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gc3VwcG9ydGluZyB5b3VyIGZpbmFuY2lhbCBzdGF0dXMgYXQgdGhhdCB0aW1lLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZmluYW5jaWFsIGluZm9ybWF0aW9uIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG90ZW50aWFsIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gb2YgZGVidC4gUGxlYXNlIHVwbG9hZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XHJcbjxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB5b3UgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcmltYXJ5IFJlc2lkZW5jZSBEZWJ0IENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUHJpbWFyeSBSZXNpZGVuY2UgRGVidCBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgYSBwb3J0aW9uIG9mIHlvdXIgbW9ydGdhZ2UgZm9yIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugd2FzIGZvcmdpdmVuLCBjYW5jZWxlZCwgb3IgZGlzY2hhcmdlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhpcyBpbiB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxiPkZvcm0gMTA5OS1DLCBDYW5jZWxsYXRpb24gb2YgRGVidDo8L2I+IFRoaXMgaXMgYSBjcnVjaWFsIGRvY3VtZW50IHRoYXQgbGVuZGVycyBtdXN0IHNlbmQgeW91IGlmIHRoZXkgY2FuY2VsZWQgb3IgZm9yZ2F2ZSBhIGRlYnQgZXhjZWVkaW5nICQ2MDAuPC9saT5cclxuICAgICAgICA8bGk+PGI+V3JpdHRlbiBjb21tdW5pY2F0aW9uIGZyb20geW91ciBsZW5kZXI6PC9iPiBBbnkgbGV0dGVycyBvciBvZmZpY2lhbCBkb2N1bWVudHMgZnJvbSB5b3VyIGxlbmRlciByZWdhcmRpbmcgdGhlIGNhbmNlbGxhdGlvbiwgZm9yZ2l2ZW5lc3MsIG9yIGRpc2NoYXJnZSBvZiB5b3VyIG1vcnRnYWdlIGRlYnQuPC9saT5cclxuICAgICAgICA8bGk+PGI+TW9ydGdhZ2Ugc3RhdGVtZW50czo8L2I+IFBsZWFzZSBwcm92aWRlIG1vcnRnYWdlIHN0YXRlbWVudHMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZGVidCBjYW5jZWxsYXRpb24gdG8gc2hvdyB0aGUgY2hhbmdlIGluIHlvdXIgbW9ydGdhZ2UgYmFsYW5jZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Eb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gdGhlIHByb3BlcnR5OjwvYj4gVGhpcyBpbmNsdWRlczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPllvdXIgbW9ydGdhZ2UgY29udHJhY3QuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gZm9yZWNsb3N1cmUsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9mIGEgc2hvcnQgc2FsZSwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlJlY29yZCBvZiBwYXltZW50cyBtYWRlOjwvYj4gSWYgeW91IG1hZGUgYW55IHBheW1lbnRzIHRvd2FyZHMgdGhlIG1vcnRnYWdlIGR1cmluZyB0aGUgdGF4IHllYXIsIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGVzZSBwYXltZW50cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBnYXRoZXIgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgYW5kIHByb3ZpZGUgdGhlbSB0byB1cy4gSWYgeW91IGhhdmUgYW55IGRpZmZpY3VsdHkgb2J0YWluaW5nIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIG9yIGhhdmUgYW55IHF1ZXN0aW9ucywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uIGluIGEgdGltZWx5IG1hbm5lciBpcyBjcnVjaWFsIGZvciB0aGUgYWNjdXJhdGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHVkZW50IExvYW4gRGVidCBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlN0dWRlbnQgTG9hbiBEZWJ0IENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5JbiByZXNwb25zZSB0byB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2Ygc3R1ZGVudCBsb2FuIGRlYnQgZHVyaW5nIHRoaXMgdGF4IHllYXIsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IHByb2Nlc3MgeW91ciB0YXggcmV0dXJuLiBUaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIHBvdGVudGlhbGx5IG1heGltaXppbmcgeW91ciBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG48b2w+XHJcbiAgPGxpPjxzdHJvbmc+T2ZmaWNpYWwgQ2FuY2VsbGF0aW9uIG9yIEZvcmdpdmVuZXNzIE5vdGljZTo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBvZmZpY2lhbCBsZXR0ZXIgb3Igbm90aWNlIGZyb20gdGhlIGxlbmRlciBvciBwcm9ncmFtIGFkbWluaXN0cmF0b3IgY29uZmlybWluZyB0aGUgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlIG9mIHlvdXIgc3R1ZGVudCBsb2FuIGRlYnQuPC9saT5cclxuICA8bGk+PHN0cm9uZz5TdHVkZW50IExvYW4gQWNjb3VudCBTdGF0ZW1lbnQ6PC9zdHJvbmc+IEEgc3RhdGVtZW50IGZyb20gYmVmb3JlIGFuZCBhZnRlciB0aGUgbG9hbiBmb3JnaXZlbmVzcywgY2FuY2VsbGF0aW9uLCBvciBkaXNjaGFyZ2Ugb2NjdXJyZWQsIHNob3dpbmcgdGhlIG91dHN0YW5kaW5nIGJhbGFuY2UgYW5kIHRoZSBiYWxhbmNlIGFmdGVyIHRoZSBhY3Rpb24gd2FzIHRha2VuLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBRdWFsaWZ5aW5nIFByb2dyYW0gUGFydGljaXBhdGlvbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9yIGNlcnRpZmljYXRlcyBvZiB5b3VyIHBhcnRpY2lwYXRpb24gaW4gcXVhbGlmeWluZyBwcm9ncmFtcyBzdWNoIGFzIFB1YmxpYyBTZXJ2aWNlIExvYW4gRm9yZ2l2ZW5lc3MgKFBTTEYpIG9yIFRlYWNoZXIgTG9hbiBGb3JnaXZlbmVzcywgYW1vbmcgb3RoZXJzLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+SVJTIEZvcm0gMTA5OS1DIChpZiByZWNlaXZlZCk6PC9zdHJvbmc+IFRoaXMgZm9ybSBpcyBpc3N1ZWQgYnkgc29tZSBsZW5kZXJzIHdoZW4gYSBkZWJ0IGlzIGZvcmdpdmVuIG9yIGNhbmNlbGVkIGFuZCBpcyBjcnVjaWFsIGZvciB0YXggcmVwb3J0aW5nIHB1cnBvc2VzLiBJdCBpbmNsdWRlcyB0aGUgYW1vdW50IG9mIGZvcmdpdmVuIGRlYnQgdGhhdCBtYXkgYmUgY29uc2lkZXJlZCB0YXhhYmxlIGluY29tZS48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkRldGFpbGVkIERlc2NyaXB0aW9uIG9mIENpcmN1bXN0YW5jZXM6PC9zdHJvbmc+IEEgd3JpdHRlbiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBsb2FuJ3MgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlLCBpbmNsdWRpbmcgYW55IGRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB5b3VyIGVsaWdpYmlsaXR5IHVuZGVyIHRoZSBzcGVjaWZpYyBwcm9ncmFtIG9yIGNvbmRpdGlvbi48L2xpPlxyXG48L29sPlxyXG48cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBwcm92aWRlZCBhcmUgY29tcGxldGUgYW5kIGxlZ2libGUuIFlvdSBjYW4gdXBsb2FkIHRoZSBkb2N1bWVudHMgc2VjdXJlbHkgdGhyb3VnaCBvdXIgY2xpZW50IHBvcnRhbC48L3A+XHJcbjxwPllvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBlbmFibGUgdXMgdG8gYWNjdXJhdGVseSBhbmQgZWZmaWNpZW50bHkgY29tcGxldGUgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvYmJ5IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSG9iYnkgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBpbmNvbWUgc291cmNlcyBmb3IgdGhpcyB0YXggeWVhci4gQXMgcGFydCBvZiBvdXIgcHJlcGFyYXRpb24gZm9yIHlvdXIgdGF4IHJldHVybiwgd2UndmUgbm90ZWQgdGhhdCB5b3UndmUgZWFybmVkIG1vbmV5IGZyb20gaG9iYmllcy4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyB0byB0aGUgSVJTIGFuZCBlbnN1cmUgeW91IGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlN1bW1hcnkgb2YgSG9iYnkgSW5jb21lOjwvc3Ryb25nPiBBIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGluY29tZSByZWNlaXZlZCBmcm9tIHlvdXIgaG9iYnkgYWN0aXZpdGllcy4gUGxlYXNlIGluY2x1ZGUgZGF0ZXMsIGFtb3VudHMsIGFuZCBzb3VyY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIG9mIGFueSBleHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgaG9iYnkgYWN0aXZpdGllcy4gVGhpcyBjYW4gaW5jbHVkZSBtYXRlcmlhbHMsIGVxdWlwbWVudCwgYW5kIGFueSBvdGhlciBjb3N0cyBpbmN1cnJlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJhbmsgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGJhbmsgc3RhdGVtZW50cyB0aGF0IHNob3cgdGhlIHRyYW5zYWN0aW9ucyByZWxhdGVkIHRvIHlvdXIgaG9iYnkgaW5jb21lIGFuZCBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFByaXplczo8L3N0cm9uZz4gSWYgeW91ciBob2JieSBpbmNvbWUgaW5jbHVkZXMgcHJpemVzLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9yIHJlY2VpcHRzIHRoYXQgZGV0YWlsIHRoZXNlIGF3YXJkcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk90aGVyIFJlbGV2YW50IERvY3VtZW50czo8L3N0cm9uZz4gQW55IG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB0aGUgaW5jb21lIGFuZCBleHBlbnNlcyByZXBvcnRlZCBmb3IgeW91ciBob2JieSBhY3Rpdml0aWVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB5b3UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBhdm9pZCBkZWxheXMgaW4gdGhlIHRheCByZXR1cm4gcHJvY2Vzcy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyByZXF1aXJlZCwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNlcnRhaW4gQ291cnQgQXdhcmRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDZXJ0YWluIENvdXJ0IEF3YXJkc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgY291cnQgYXdhcmRzIG9yIHNldHRsZW1lbnRzIGluIHRoZSBwYXN0IHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSByZXBvcnQgdGhlc2UgYW1vdW50cyBhbmQgY29tcGx5IHdpdGggdGF4IG9ibGlnYXRpb25zLCB3ZSBuZWVkIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlc2UgYXdhcmRzIG9yIHNldHRsZW1lbnRzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VHlwZSBvZiBBd2FyZCBvciBTZXR0bGVtZW50Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBuYXR1cmUgKGUuZy4sIGxvc3Qgd2FnZXMsIHB1bml0aXZlIGRhbWFnZXMsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW1vdW50IFJlY2VpdmVkOjwvc3Ryb25nPiBUaGUgdG90YWwgYW1vdW50IGF3YXJkZWQgb3Igc2V0dGxlZCwgYmVmb3JlIGFueSBkZWR1Y3Rpb25zLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBSZWNlaXZlZDo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgd2hlbiB5b3UgcmVjZWl2ZWQgdGhlIGNvbXBlbnNhdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBvZmZpY2lhbCBkb2N1bWVudHMgb3IganVkZ21lbnRzIHBlcnRhaW5pbmcgdG8gdGhlIGF3YXJkIG9yIHNldHRsZW1lbnQuIFRoaXMgaW5jbHVkZXMgY291cnQgb3JkZXJzLCBhZ3JlZW1lbnQgbGV0dGVycywgYW5kIHJlY2VpcHRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VGF4IFdpdGhoZWxkOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCB0aGUgYW1vdW50IG9mIGZlZGVyYWwgb3Igc3RhdGUgdGF4IGFscmVhZHkgd2l0aGhlbGQgZnJvbSB0aGUgc2V0dGxlbWVudC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkl0J3MgaW1wZXJhdGl2ZSB3ZSByZWNlaXZlIHRoaXMgaW5mb3JtYXRpb24gdG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgeW91ciBjb3VydCBhd2FyZCBvciBzZXR0bGVtZW50LiBGYWlsdXJlIHRvIHJlcG9ydCBzdWNoIGluY29tZSBhY2N1cmF0ZWx5IGNvdWxkIHJlc3VsdCBpbiBwZW5hbHRpZXMgb3IgYXVkaXRzIGZyb20gdGhlIElSUy48L3A+IFxyXG4gICAgPHA+UGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB3ZSBoYXZlIGFtcGxlIHRpbWUgZm9yIHlvdXIgdGF4IHByZXBhcmF0aW9uLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCBhcmUgaGVyZSB0byBoZWxwIHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpemVzIGFuZCBBd2FyZHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlByaXplcyBhbmQgQXdhcmRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCB3ZSBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBwcml6ZXMgb3IgYXdhcmRzIGluIHRoZSBmb3JtIG9mIGNhc2gsIGdvb2RzLCBvciBzZXJ2aWNlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSB0byB0aGUgSVJTLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkZXRhaWxzIGZyb20geW91LjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgRWFjaCBQcml6ZSBvciBBd2FyZDo8L3N0cm9uZz4gQnJpZWZseSBkZXNjcmliZSBlYWNoIHByaXplIG9yIGF3YXJkIHJlY2VpdmVkLCBpbmNsdWRpbmcgdGhlIG5hdHVyZSAoY2FzaCwgZ29vZHMsIHNlcnZpY2VzKSBhbmQgY29udGV4dCAoY29udGVzdCwgYWNoaWV2ZW1lbnQgYXdhcmQsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VmFsdWUgb2YgRWFjaCBQcml6ZSBvciBBd2FyZDo8L3N0cm9uZz4gUHJvdmlkZSB0aGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgZWFjaCBwcml6ZSBvciBhd2FyZCBhdCB0aGUgdGltZSBvZiByZWNlaXB0LiBJZiB0aGUgcHJpemUgd2FzIGluIGNhc2gsIHNwZWNpZnkgdGhlIGFtb3VudC4gSWYgaW4gZ29vZHMgb3Igc2VydmljZXMsIHByb3ZpZGUgYW4gZXN0aW1hdGVkIHZhbHVlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBSZWNlaXB0Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkYXRlIG9uIHdoaWNoIGVhY2ggcHJpemUgb3IgYXdhcmQgd2FzIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SXNzdWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIChpZiBhdmFpbGFibGUpIG9mIHRoZSBvcmdhbml6YXRpb24gb3IgZW50aXR5IHRoYXQgYXdhcmRlZCB0aGUgcHJpemUgb3IgcHJvdmlkZWQgdGhlIGF3YXJkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IFdpdGhoZWxkIFRheGVzOjwvc3Ryb25nPiBJbmRpY2F0ZSBpZiBhbnkgdGF4ZXMgd2VyZSB3aXRoaGVsZCBmcm9tIHRoZSBhd2FyZGVkIGFtb3VudCBhbmQgcHJvdmlkZSB0aGUgd2l0aGhvbGRpbmcgZG9jdW1lbnQocyksIGlmIGF2YWlsYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkl0J3MgY3J1Y2lhbCBmb3IgdGF4IHB1cnBvc2VzIHRoYXQgd2UgcmVwb3J0IHRoZXNlIGFjY3VyYXRlbHkgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgSVJTLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXhhYmxlIENvdmVyZGVsbCBEaXN0cmlidXRpb25zXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIENvdmVyZGVsbCBEaXN0cmlidXRpb25zXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCBhIHdpdGhkcmF3YWwgZnJvbSBhIENvdmVyZGVsbCBFZHVjYXRpb24gU2F2aW5ncyBBY2NvdW50IChFU0EpIG9yIGFuIEVkdWNhdGlvbiBJUkEgZm9yIGVkdWNhdGlvbmFsIGV4cGVuc2VzIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSBkaXN0cmlidXRpb25zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCB3aXRoZHJhd24gZnJvbSB0aGUgQ292ZXJkZWxsIEVTQSBvciBFZHVjYXRpb24gSVJBLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbGVkIGJyZWFrZG93biBvZiBob3cgdGhlc2UgZnVuZHMgd2VyZSB1dGlsaXplZCwgc3BlY2lmaWNhbGx5OlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IHVzZWQgZm9yIHR1aXRpb24gYW5kIGZlZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgc3BlbnQgb24gYm9va3MsIHN1cHBsaWVzLCBhbmQgZXF1aXBtZW50IHJlcXVpcmVkIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgYW1vdW50cyBzcGVudCBvbiByb29tIGFuZCBib2FyZCwgc3BlY2lmeWluZyBpZiB0aGUgYmVuZWZpY2lhcnkgd2FzIGVucm9sbGVkIGF0IGxlYXN0IGhhbGYtdGltZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBhZGRpdGlvbmFsIHF1YWxpZmllZCBlZHVjYXRpb24gZXhwZW5zZXMgcGFpZCB1c2luZyB0aGVzZSBmdW5kcy48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIHRoZSBiZW5lZmljaWFyeSdzIGVucm9sbG1lbnQgc3RhdHVzIChlLmcuLCB0dWl0aW9uIHN0YXRlbWVudCwgZW5yb2xsbWVudCB2ZXJpZmljYXRpb24pLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSBuYW1lIGFuZCBhZGRyZXNzIG9mIHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbihzKSBpbnZvbHZlZC48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgRm9ybSAxMDk5LVEgcmVjZWl2ZWQgcGVydGFpbmluZyB0byB0aGVzZSBkaXN0cmlidXRpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UHJvdmlkaW5nIHRoaXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gd2lsbCBlbnN1cmUgdGhhdCB3ZSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIGVkdWNhdGlvbiBleHBlbnNlcy4gUGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgbGV0IHVzIGtub3cgaWYgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBvciBoYXZlIGFueSBxdWVzdGlvbnMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgUVRQIERpc3RyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgUVRQIERpc3RyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+V2UgaGF2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGRpc3RyaWJ1dGlvbnMgZnJvbSBhIFF1YWxpZmllZCBUdWl0aW9uIFByb2dyYW0gKFFUUCksIGNvbW1vbmx5IGtub3duIGFzIGEgNTI5IHBsYW4sIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcmVsYXRlZCB0byB0aGVzZSBkaXN0cmlidXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+QWNjb3VudCBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgb2YgdGhlIGFjY291bnQgaG9sZGVyIGFuZCB0aGUgYmVuZWZpY2lhcnkgZm9yIGVhY2ggNTI5IHBsYW4gZGlzdHJpYnV0aW9uLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5EaXN0cmlidXRpb24gU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCAxMDk5LVEgZm9ybXMgcmVjZWl2ZWQgZm9yIGVhY2ggZGlzdHJpYnV0aW9uIHRoaXMgdGF4IHllYXIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlRvdGFsIEFtb3VudCBvZiBEaXN0cmlidXRpb25zOjwvc3Ryb25nPiBUaGUgdG90YWwgYW1vdW50IG9mIG1vbmV5IGRpc3RyaWJ1dGVkIGZyb20gdGhlIFFUUCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5FZHVjYXRpb25hbCBFeHBlbnNlcyBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIG9mIHRoZSBlZHVjYXRpb25hbCBleHBlbnNlcyBmb3Igd2hpY2ggdGhlIFFUUCBkaXN0cmlidXRpb25zIHdlcmUgdXNlZC4gVGhpcyBpbmNsdWRlcyB0dWl0aW9uLCBib29rcywgc3VwcGxpZXMsIGFuZCBhbnkgZXF1aXBtZW50IHJlcXVpcmVkIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UgYXQgYW4gZWxpZ2libGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24uPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgUmVjZWlwdHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIHN0YXRlbWVudHMgdGhhdCBwcm92aWRlIHByb29mIG9mIHRoZSBlZHVjYXRpb25hbCBleHBlbnNlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SW5zdGl0dXRpb24gSW5mb3JtYXRpb246PC9zdHJvbmc+IE5hbWUgYW5kIGFkZHJlc3Mgb2YgdGhlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uKHMpIHdoZXJlIHRoZSBleHBlbnNlcyB3ZXJlIGluY3VycmVkLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5SZWNpcGllbnQncyBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gRm9yIHdob20gdGhlIGV4cGVuc2VzIHdlcmUgaW5jdXJyZWQgKHRoZSBiZW5lZmljaWFyeSBvZiB0aGUgNTI5IHBsYW4pIGFuZCB0aGVpciBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBkZXRlcm1pbmluZyB0aGUgdGF4YWJpbGl0eSBvZiB0aGUgZGlzdHJpYnV0aW9ucyBhbmQgZm9yIG9wdGltaXppbmcgeW91ciB0YXggYmVuZWZpdHMuIFBsZWFzZSBmb3J3YXJkIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC48L3A+XHJcbjxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU3RyaWtlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTdHJpa2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhcyB3ZSB3b3JrIHRvZ2V0aGVyIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm4uIEl0IGhhcyBjb21lIHRvIG91ciBhdHRlbnRpb24gdGhhdCB5b3UgcmVjZWl2ZWQgc3RyaWtlIGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIgZHVlIHRvIHBhcnRpY2lwYXRpb24gaW4gYSBsYWJvciBzdHJpa2UuIFRvIGVuc3VyZSBjb21wbGlhbmNlIGFuZCBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgQW1vdW50IG9mIFN0cmlrZSBCZW5lZml0cyBSZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlIHRvdGFsIHN1bSBvZiBzdHJpa2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNvdXJjZSBvZiBTdHJpa2UgQmVuZWZpdHM6PC9zdHJvbmc+IEluZGljYXRlIHdoZXRoZXIgdGhlc2UgYmVuZWZpdHMgd2VyZSBwYWlkIGJ5IHlvdXIgdW5pb24sIGFuIGluc3VyYW5jZSBwb2xpY3ksIG9yIGFub3RoZXIgc291cmNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBTdHJpa2UgQmVuZWZpdHM6PC9zdHJvbmc+IFByb3ZpZGUgYW55IGZvcm1zLCBzdGF0ZW1lbnRzLCBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgc2hvdyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBiZW5lZml0cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIFN0cmlrZSBQYXJ0aWNpcGF0aW9uOjwvc3Ryb25nPiBMaXN0IHRoZSBkYXRlcyBvciBkdXJhdGlvbiBvZiB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIGxhYm9yIHN0cmlrZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgQ29zdHMgb3IgRXhwZW5zZXM6PC9zdHJvbmc+IElmIHlvdSBpbmN1cnJlZCBhbnkgY29zdHMgb3IgZXhwZW5zZXMgcmVsYXRlZCB0byBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdHJpa2UgKGUuZy4sIHRyYXZlbCB0byBwaWNrZXQgbGluZXMsIHNpZ25hZ2UgbWF0ZXJpYWxzKSwgcGxlYXNlIGRldGFpbCB0aGVzZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgbWF5IGltcGFjdCB5b3VyIHRheGFibGUgaW5jb21lLiBQbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gYXZvaWQgYW55IGRlbGF5cyBpbiBwcm9jZXNzaW5nIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJKdXJ5IER1dHkgUGF5XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJKdXJ5IER1dHkgUGF5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgdGhlIGNyaXRpY2FsIHN0YWdlcyBvZiB5b3VyIHRheCBwcmVwYXJhdGlvbiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBqdXJ5IGR1dHkgcGF5IHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgaW5jb21lIGFuZCBleHBsb3JlIGFueSBwb3RlbnRpYWwgZGVkdWN0aW9ucyBvciBjcmVkaXRzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBvZiBKdXJ5IER1dHkgUGF5Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgdG90YWwgYW1vdW50IHlvdSByZWNlaXZlZCBmb3Igc2VydmluZyBqdXJ5IGR1dHkuIFRoaXMgYW1vdW50IGlzIG9mdGVuIHJlcG9ydGVkIG9uIEZvcm0gMTA5OS1HLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SnVyeSBEdXR5IERhdGVzOjwvc3Ryb25nPiBUaGUgZGF0ZXMgeW91IHNlcnZlZCBvbiBqdXJ5IGR1dHkuIFRoaXMgaGVscHMgaW4gdmVyaWZ5aW5nIHRoZSBkdXJhdGlvbiBhbmQgY29ycmVsYXRpbmcgaXQgd2l0aCB0aGUgY29tcGVuc2F0aW9uIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgUmVpbWJ1cnNlbWVudDo8L3N0cm9uZz4gSWYgeW91ciBlbXBsb3llciBjb21wZW5zYXRlZCB5b3UgKGluIGZ1bGwgb3IgcGFydCkgZm9yIHRoZSB0aW1lIHlvdSB3ZXJlIHNlcnZpbmcgb24ganVyeSBkdXR5LCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxzIG9mIHRoZSBhbW91bnRzIHBhaWQgYnkgeW91ciBlbXBsb3llci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJhbmsgU3RhdGVtZW50cyBvciBQYXkgU3R1YnM6PC9zdHJvbmc+IEFueSBiYW5rIHN0YXRlbWVudHMgb3IgcGF5IHN0dWJzIHNob3dpbmcgdGhlIGp1cnkgZHV0eSBwYXkgZGVwb3NpdCBvciBlbXBsb3llciByZWltYnVyc2VtZW50cy4gVGhlc2UgZG9jdW1lbnRzIGhlbHAgaW4gdmVyaWZ5aW5nIHRoZSBhbW91bnRzIGRlY2xhcmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSAxMDk5LUcgKGlmIHJlY2VpdmVkKTo8L3N0cm9uZz4gU29tZSBqdXJpc2RpY3Rpb25zIHByb3ZpZGUgYSBGb3JtIDEwOTktRyBmb3IganVyeSBkdXR5IHBheS4gSWYgeW91IHJlY2VpdmVkIG9uZSwgcGxlYXNlIGluY2x1ZGUgYSBjb3B5LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB3aWxsIGFsbG93IHVzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFsYXNrYSBQZXJtYW5lbnQgRnVuZHMgRGl2aWRlbmRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBbGFza2EgUGVybWFuZW50IEZ1bmRzIERpdmlkZW5kc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5JbiByZXZpZXdpbmcgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGZvciB5b3VyIHRheCByZXR1cm4gcHJlcGFyYXRpb24sIHdlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZGl2aWRlbmRzIGZyb20gdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmZvcm1hdGlvbiBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIElSUyBndWlkZWxpbmVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48Yj4xMDk5LU1JU0MgRm9ybTo8L2I+IFBsZWFzZSBwcm92aWRlIGEgY29weSBvZiB0aGUgMTA5OS1NSVNDIGZvcm0gaXNzdWVkIGJ5IHRoZSBBbGFza2EgUGVybWFuZW50IEZ1bmQgQ29ycG9yYXRpb24uIFRoaXMgZm9ybSBvdXRsaW5lcyB0aGUgdG90YWwgYW1vdW50IG9mIGRpdmlkZW5kcyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkJhbmsgU3RhdGVtZW50czo8L2I+IElmIHBvc3NpYmxlLCBwcm92aWRlIGJhbmsgc3RhdGVtZW50cyBzaG93aW5nIHRoZSBkZXBvc2l0KHMpIG9mIHRoZSBkaXZpZGVuZHMgaW50byB5b3VyIGFjY291bnQuIFRoaXMgc2VydmVzIGFzIGFkZGl0aW9uYWwgcHJvb2Ygb2YgaW5jb21lLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlBlcnNvbmFsIElkZW50aWZpY2F0aW9uIEluZm9ybWF0aW9uOjwvYj4gQ29uZmlybSB5b3VyIGZ1bGwgbGVnYWwgbmFtZSBhbmQgU29jaWFsIFNlY3VyaXR5IE51bWJlciB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGRpc2NyZXBhbmNpZXMgYmV0d2VlbiBvdXIgcmVjb3JkcyBhbmQgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIG9uIHRoZSAxMDk5LU1JU0MgZm9ybS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5QcmV2aW91cyBZZWFyJ3MgRGl2aWRlbmQgSW5mb3JtYXRpb246PC9iPiBJZiB5b3UgcmVjZWl2ZWQgZGl2aWRlbmRzIGZyb20gdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBpbiB0aGUgcHJldmlvdXMgdGF4IHllYXIgYnV0IGhhdmUgbm90IHByb3ZpZGVkIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBzby4gSXQgaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCB0byBwb3RlbnRpYWxseSBpZGVudGlmeSBhbnkgY2FycnlvdmVyIGVmZmVjdHMgb24geW91ciBjdXJyZW50IHRheCB5ZWFyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0IGlzIGhpZ2hseSBhcHByZWNpYXRlZC4gQ29tcGxldGluZyB0aGlzIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgd2lsbCBlbmFibGUgdXMgdG8gcHJvZ3Jlc3Mgd2l0aCB0aGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuIGVmZmljaWVudGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFeGVjdXRvciBGZWVzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFeGVjdXRvciBGZWVzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPldlIHVuZGVyc3RhbmQgZnJvbSB5b3VyIHJlY2VudCByZXNwb25zZSB0aGF0IHlvdSBoYXZlIHBhaWQgb3IgcmVjZWl2ZWQgZXhlY3V0b3IgZmVlcy4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSB0YXggcHJlcGFyYXRpb24sIHdlIHJlcXVpcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGVzZSB0cmFuc2FjdGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG48b2w+XHJcbiAgPGxpPkEgZGV0YWlsZWQgc3RhdGVtZW50IG9mIHRoZSBleGVjdXRvciBmZWVzIHBhaWQgb3IgcmVjZWl2ZWQsIGluY2x1ZGluZyBkYXRlcyBhbmQgYW1vdW50cy48L2xpPlxyXG4gIDxsaT5JZiB5b3UgcmVjZWl2ZWQgZXhlY3V0b3IgZmVlcywgcGxlYXNlIHByb3ZpZGUgeW91ciByb2xlIChlLmcuLCBwcmltYXJ5IGV4ZWN1dG9yLCBjby1leGVjdXRvcikgYW5kIHRoZSBlc3RhdGUncyBuYW1lLjwvbGk+XHJcbiAgPGxpPklmIHlvdSBwYWlkIGV4ZWN1dG9yIGZlZXMsIHByb3ZpZGUgdGhlIG5hbWUgYW5kIHRheCBpZGVudGlmaWNhdGlvbiBudW1iZXIgKFNTTiBvciBFSU4pIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0byB3aG9tIHRoZSBmZWVzIHdlcmUgcGFpZC48L2xpPlxyXG4gIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiB0aGF0IG91dGxpbmVzIHRoZSBhZ3JlZW1lbnQgb3IgY291cnQgb3JkZXIgcmVnYXJkaW5nIHRoZSBleGVjdXRvciBmZWUuPC9saT5cclxuICA8bGk+Q29waWVzIG9mIGJhbmsgc3RhdGVtZW50cyBvciBjYW5jZWxsZWQgY2hlY2tzIGV2aWRlbmNpbmcgdGhlIHBheW1lbnQgb3IgcmVjZWlwdCBvZiB0aGVzZSBmZWVzLjwvbGk+XHJcbiAgPGxpPkZvciBmZWVzIHJlY2VpdmVkLCBwbGVhc2UgY29uZmlybSB3aGV0aGVyIHRheGVzIHdlcmUgd2l0aGhlbGQgb3Igbm90LiBJZiBzbywgcHJvdmlkZSBhIGNvcHkgb2YgdGhlIEZvcm0gMTA5OS1NSVNDIHlvdSByZWNlaXZlZC48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHRoZXNlIGV4ZWN1dG9yIGZlZXMgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgZ3VpZGVsaW5lcy4gUGxlYXNlIHNlbmQgdGhlIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gdG8gdXMgdG8gZmFjaWxpdGF0ZSBhIHRpbWVseSBhbmQgYWNjdXJhdGUgdGF4IGZpbGluZy48L3A+XHJcbjxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRXZlbnQgR3JhdHVpdGllcyBhbmQgR2lmdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkV2ZW50IEdyYXR1aXRpZXMgYW5kIEdpZnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgY29tcGxldGluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5lZWQgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgcGFydGllcyBvciBldmVudHMgeW91IGhvc3RlZCB0aGlzIHRheCB5ZWFyLiBTcGVjaWZpY2FsbHksIHNpbmNlIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgZ2lmdHMsIGdyYXR1aXRpZXMsIG9yIG90aGVyIGZvcm1zIG9mIGNvbXBlbnNhdGlvbiBhcyBhIHJlc3VsdCBvZiB0aGVzZSBldmVudHMsIHdlIHJlcXVpcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gdG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucy48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgZWFjaCBldmVudCBob3N0ZWQsIGluY2x1ZGluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2YgdGhlIGV2ZW50LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+TG9jYXRpb24gb2YgdGhlIGV2ZW50LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QXBwcm94aW1hdGUgbnVtYmVyIG9mIGF0dGVuZGVlcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlB1cnBvc2Ugb2YgdGhlIGV2ZW50IChlLmcuLCBzYWxlcyBwcm9tb3Rpb24sIGN1c3RvbWVyIGFwcHJlY2lhdGlvbikuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIGZvciBlYWNoIGdpZnQsIGdyYXR1aXR5LCBvciBmb3JtIG9mIGNvbXBlbnNhdGlvbiByZWNlaXZlZCwgc3VjaCBhczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSBnaWZ0IG9yIGdyYXR1aXR5LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RXN0aW1hdGVkIGZhaXIgbWFya2V0IHZhbHVlIGF0IHRoZSB0aW1lIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+TmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgcHJvdmlkaW5nIHRoZSBnaWZ0IG9yIGdyYXR1aXR5LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gb3IgY29tbXVuaWNhdGlvbiByZWdhcmRpbmcgdGhlIHJlY2VpcHQgb2YgdGhlc2UgaXRlbXMgKGUuZy4sIHRoYW5rIHlvdSBsZXR0ZXJzLCBlbWFpbHMgY29uZmlybWluZyByZWNlaXB0KS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkFueSByZWNlaXB0cyBvciBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gZXhwZW5zZXMgaW5jdXJyZWQgd2hpbGUgaG9zdGluZyB0aGVzZSBldmVudHMgKGUuZy4sIGNhdGVyaW5nLCB2ZW51ZSByZW50YWwsIGVudGVydGFpbm1lbnQpLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SXQgaXMgY3J1Y2lhbCB0aGF0IHdlIGFjY3VyYXRlbHkgcmVwb3J0IGFsbCBmb3JtcyBvZiBpbmNvbWUsIGluY2x1ZGluZyBub24tbW9uZXRhcnkgY29tcGVuc2F0aW9uLCB0byBjb21wbHkgd2l0aCBJUlMgcmVndWxhdGlvbnMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiB3aWxsIGdyZWF0bHkgYXNzaXN0IGluIHRoaXMgcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlF1YWxpZmllZCBFZHVjYXRvciBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUXVhbGlmaWVkIEVkdWNhdG9yIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciBjb21wcmVoZW5zaXZlIGFwcHJvYWNoIHRvIHlvdXIgdGF4IHByZXBhcmF0aW9uIGZvciB0aGUgY3VycmVudCB5ZWFyLCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdGhhdCB5b3UndmUgaW5jdXJyZWQgb3V0LW9mLXBvY2tldCBleHBlbnNlcyBhcyBhIHF1YWxpZmllZCBlZHVjYXRvciBmb3IgY2xhc3Nyb29tIG1hdGVyaWFscyBvciBzdXBwbGllcy4gVG8gYWNjdXJhdGVseSBjbGFpbSB0aGVzZSBkZWR1Y3Rpb25zIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIG1heGltdW0gYmVuZWZpdCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+RGV0YWlsZWQgTGlzdCBvZiBFeHBlbnNlczo8L2I+IEEgYnJlYWtkb3duIG9mIGFsbCBjbGFzc3Jvb20gbWF0ZXJpYWxzIG9yIHN1cHBsaWVzIHB1cmNoYXNlZCwgaW5jbHVkaW5nIGJvb2tzLCBzdXBwbGllcywgY29tcHV0ZXIgZXF1aXBtZW50IChoYXJkd2FyZSwgc29mdHdhcmUsIGFuZCBzZXJ2aWNlcyksIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbWF0ZXJpYWxzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlJlY2VpcHRzIGFuZCBQcm9vZiBvZiBQYXltZW50OjwvYj4gQ29waWVzIG9mIHJlY2VpcHRzIG9yIGJhbmsvY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBmb3IgZWFjaCBwdXJjaGFzZSBtYWRlLiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGRhdGUgb2YgcHVyY2hhc2UgYW5kIHRoZSBpdGVtIG9yIHNlcnZpY2UgcHVyY2hhc2VkIGFyZSBjbGVhcmx5IHZpc2libGUuPC9saT5cclxuICAgICAgICA8bGk+PGI+RGF0ZSBvZiBQdXJjaGFzZXM6PC9iPiBUaGUgc3BlY2lmaWMgZGF0ZXMgZWFjaCBpdGVtIHdhcyBwdXJjaGFzZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Vc2FnZSBEb2N1bWVudGF0aW9uOjwvYj4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiBob3cgZWFjaCBpdGVtIHB1cmNoYXNlZCB3YXMgdXNlZCBpbiB0aGUgY2xhc3Nyb29tIHNldHRpbmcuPC9saT5cclxuICAgICAgICA8bGk+PGI+VG90YWwgQW1vdW50OjwvYj4gVGhlIHRvdGFsIGRvbGxhciBhbW91bnQgc3BlbnQgb24gdGhlc2UgbWF0ZXJpYWxzIGFuZCBzdXBwbGllcyBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VW5kZXJzdGFuZGluZyB0aGF0IHlvdXIgdGltZSBpcyB2YWx1YWJsZSwgd2UgYXBwcmVjaWF0ZSB5b3VyIGVmZm9ydCBpbiBjb21waWxpbmcgdGhpcyBpbmZvcm1hdGlvbiBwcm9tcHRseS4gVGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmluZyB5b3UgYXJlIGNvbXBlbnNhdGVkIGZvciB5b3VyIGludmVzdG1lbnQgaW4gZWR1Y2F0aW9uYWwgbWF0ZXJpYWxzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgd2UgY2FuIHByb2NlZWQgd2l0aG91dCBkZWxheS4gWW91IGNhbiBzZW5kIHRoZSBkb2N1bWVudHMgdG8gdXMgZWl0aGVyIHZpYSBlbWFpbCBhdCB0YXhAbGVuZGFoYW5kYWNjb3VudGluZy5jb20gb3IgdXBsb2FkIHRoZW0gZGlyZWN0bHkgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhlIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgeW91ciBkZWRpY2F0aW9uIGFzIGFuIGVkdWNhdG9yLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgaGF2ZSBpZGVudGlmaWVkIHRoYXQgeW91IGluY3VycmVkIHVucmVpbWJ1cnNlZCB0cmF2ZWwgZXhwZW5zZXMgYXMgYW4gQXJtZWQgRm9yY2VzIFJlc2VydmlzdC4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBiZW5lZmljaWFsIHRheCBmaWxpbmcsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzIGZyb20geW91OjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPlN1bW1hcnkgb2YgVHJhdmVsIERhdGVzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGxpc3Qgb2YgYWxsIGRhdGVzIHlvdSB0cmF2ZWxlZCBtb3JlIHRoYW4gMTAwIG1pbGVzIGF3YXkgZnJvbSBob21lIHRvIHBlcmZvcm0geW91ciByZXNlcnZlIGR1dGllcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+VHJhdmVsIEV4cGVuc2VzIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEZvciBlYWNoIG9mIHRoZSB0cmF2ZWwgZGF0ZXMgbGlzdGVkLCBwcm92aWRlIHJlY2VpcHRzLCBvciBvdGhlciBkb2N1bWVudGF0aW9uIGZvcjpcclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgPGxpPlRyYW5zcG9ydGF0aW9uIChlLmcuLCBnYXMgcmVjZWlwdHMsIG1pbGVhZ2UgbG9ncywgYWlycGxhbmUgdGlja2V0cywgZXRjLik8L2xpPlxyXG4gICAgICAgIDxsaT5Mb2RnaW5nIChvbmx5IGlmIGFuIG92ZXJuaWdodCBzdGF5IHdhcyByZXF1aXJlZCk8L2xpPlxyXG4gICAgICAgIDxsaT5NZWFscyBhbmQgSW5jaWRlbnRhbCBFeHBlbnNlcyAoZGV0YWlscyBvbiBlYWNoLCBpZiBub3Qgb3B0aW5nIGZvciB0aGUgc3RhbmRhcmQgbWVhbCBhbGxvd2FuY2UpPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2VydmUgU3RhdHVzOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciBvcmRlcnMgb3IgYW55IGRvY3VtZW50YXRpb24gY29uZmlybWluZyB5b3VyIHBhcnRpY2lwYXRpb24gYW5kIGR1dGllcyBhcyBhbiBBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IGR1cmluZyB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlN0YXRlbWVudCBvZiBSZWltYnVyc2VtZW50Ojwvc3Ryb25nPiBBIGRldGFpbGVkIGFjY291bnQgb2YgYW55IHJlaW1idXJzZW1lbnRzIHJlY2VpdmVkIGZvciB0aGUgdHJhdmVsIGV4cGVuc2VzIGNsYWltZWQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBhcmUgbGVnaWJsZSBhbmQgY2xlYXJseSBsYWJlbGVkLiBQcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGFsbG93IHN1ZmZpY2llbnQgdGltZSBmb3IgcHJvY2Vzc2luZyBhbmQgaW5jbHVzaW9uIGluIHlvdXIgdGF4IGZpbGluZy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gT3VyIHRlYW0gaXMgaGVyZSB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGVyZm9ybWluZyBBcnRpc3QgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBlcmZvcm1pbmcgQXJ0aXN0IEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSdyZSByZWFjaGluZyBvdXQgdG8gZ2F0aGVyIG5lY2Vzc2FyeSBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgeW91ciBleHBlbnNlcyBhcyBhIHBlcmZvcm1pbmcgYXJ0aXN0LiBUaGUgZm9sbG93aW5nIGxpc3QgZGV0YWlscyB0aGUgc3BlY2lmaWMgam9iLXJlbGF0ZWQgZXhwZW5zZXMgdGhhdCB3ZSByZXF1aXJlLiBLaW5kbHkgcmV2aWV3IGFuZCBwcm92aWRlIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIGEgdGhvcm91Z2ggYW5kIHRpbWVseSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkF1ZGl0aW9uIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBiYW5rL2NyZWRpdCBjYXJkIHN0YXRlbWVudHMgc2hvd2luZyBwYXltZW50cyBmb3IgYXVkaXRpb25zLCBpbmNsdWRpbmcgYW55IGFwcGxpY2F0aW9uIG9yIGVudHJ5IGZlZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UcmF2ZWwgRXhwZW5zZXM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gZm9yIHRyYXZlbCBjb3N0cyByZWxhdGVkIHRvIHBlcmZvcm1hbmNlcy4gVGhpcyBpbmNsdWRlcyBhaXJmYXJlLCBsb2RnaW5nLCBjYXIgcmVudGFscywgYW5kIGdhc29saW5lIHJlY2VpcHRzLiBQbGVhc2UgaW5kaWNhdGUgdGhlIGRhdGVzIGFuZCBwdXJwb3NlIG9mIGVhY2ggdHJpcC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvc3R1bWUgRXhwZW5zZXM6PC9zdHJvbmc+IFJlY2VpcHRzIGZvciBhbnkgY29zdHVtZXMgb3Igc3BlY2lhbGl6ZWQgY2xvdGhpbmcgcmVxdWlyZWQgZm9yIHlvdXIgcGVyZm9ybWFuY2VzIHRoYXQgYXJlIG5vdCBzdWl0YWJsZSBmb3IgZXZlcnlkYXkgd2Vhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk1ha2V1cC9IYWlyIEV4cGVuc2VzOjwvc3Ryb25nPiBTcGVjaWZpYyB0byBwZXJmb3JtYW5jZXMsIGluY2x1ZGluZyBjb3N0cyBmb3IgcHJvZHVjdHMgYW5kIHByb2Zlc3Npb25hbCBzZXJ2aWNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRyYWluaW5nIGFuZCBQcm9mZXNzaW9uYWwgRGV2ZWxvcG1lbnQ6PC9zdHJvbmc+IENvc3RzIHJlbGF0ZWQgdG8gY2xhc3Nlcywgd29ya3Nob3BzLCBvciBzZW1pbmFycyBhaW1lZCBhdCBpbXByb3ZpbmcgeW91ciBwZXJmb3JtYW5jZSBza2lsbHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BZ2VudCBhbmQgTWFuYWdlbWVudCBGZWVzOjwvc3Ryb25nPiBDb250cmFjdHMgb3Igc3RhdGVtZW50cyBkZXRhaWxpbmcgcGF5bWVudHMgdG8gYWdlbnRzIG9yIG1hbmFnZXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TWlzY2VsbGFuZW91cyBQZXJmb3JtYW5jZS1SZWxhdGVkIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBmb3IgYW55IG90aGVyIGV4cGVuc2VzIGRpcmVjdGx5IHJlbGF0ZWQgdG8geW91ciB3b3JrIGFzIGEgcGVyZm9ybWluZyBhcnRpc3QsIHN1Y2ggYXMgZXF1aXBtZW50LCBtdXNpYyBvciBzY3JpcHQgcHVyY2hhc2VzLCBhbmQgbWFpbnRlbmFuY2UgY29zdHMgZm9yIGluc3RydW1lbnRzIG9yIHBlcmZvcm1hbmNlIGdlYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBjbGVhcmx5IGluZGljYXRlIHRoZSBkYXRlLCBhbW91bnQsIGFuZCBuYXR1cmUgb2YgZWFjaCBleHBlbnNlLiBJZiB5b3UncmUgdW5zdXJlIHdoZXRoZXIgYW4gZXhwZW5zZSBxdWFsaWZpZXMsIGluY2x1ZGUgaXQgd2l0aCBhIGJyaWVmIG5vdGUgZXhwbGFpbmluZyBpdHMgcHVycG9zZS4gV2UncmUgaGVyZSB0byBoZWxwIHlvdSBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMgd2hpbGUgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCBsYXdzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZlZSBCYXNlZCBHb3Zlcm5tZW50IE9mZmljaWFsIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGZWUgQmFzZWQgR292ZXJubWVudCBPZmZpY2lhbCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJucyBhbmQgbm90ZWQgdGhhdCB5b3Ugd29ya2VkIGFzIGEgPHN0cm9uZz5mZWUtYmFzZWQgZ292ZXJubWVudCBvZmZpY2lhbDwvc3Ryb25nPiBkdXJpbmcgdGhlIHRheCB5ZWFyLiBBcyBwYXJ0IG9mIHRoaXMgcm9sZSwgeW91J3ZlIHJlcG9ydGVkIGluY3VycmluZyB1bnJlaW1idXJzZWQgZXhwZW5zZXMgcmVsYXRlZCB0byB5b3VyIG9mZmljaWFsIGR1dGllcy4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBtYXhpbXVtIGRlZHVjdGlvbnMgb24geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBFeHBlbnNlIFJlcG9ydHM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGFsbCBleHBlbnNlcy4gRWFjaCBlbnRyeSBzaG91bGQgaW5jbHVkZSB0aGUgZGF0ZSwgYW1vdW50LCBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgbmF0dXJlIG9mIHRoZSBleHBlbnNlLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFBheW1lbnQ6PC9zdHJvbmc+IFJlY2VpcHRzLCBiYW5rIHN0YXRlbWVudHMsIG9yIGNyZWRpdCBjYXJkIHN0YXRlbWVudHMgZXZpZGVuY2luZyB0aGUgcGF5bWVudCBvZiB0aGUgcmVwb3J0ZWQgZXhwZW5zZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+T2ZmaWNpYWwgU2NoZWR1bGUgb3IgRHV0eSBSb3N0ZXI6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gdGhhdCBjb3JyZWxhdGVzIHlvdXIgcmVwb3J0ZWQgZXhwZW5zZXMgd2l0aCB5b3VyIG9mZmljaWFsIGR1dGllcyBvbiBzcGVjaWZpYyBkYXRlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5NaWxlYWdlIExvZzo8L3N0cm9uZz4gSWYgYW55IGV4cGVuc2VzIGFyZSBmb3IgdHJhdmVsLCBhIGRldGFpbGVkIG1pbGVhZ2UgbG9nIHNob3dpbmcgZGF0ZXMsIGRlc3RpbmF0aW9uLCBwdXJwb3NlIG9mIHRoZSB0cmlwLCBhbmQgbWlsZXMgdHJhdmVsZWQuIEVuc3VyZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcGVyc29uYWwgYW5kIG9mZmljaWFsIHRyYXZlbC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Db21tdW5pY2F0aW9uIHdpdGggR292ZXJubWVudCBBZ2VuY3k6PC9zdHJvbmc+IEFueSBjb3JyZXNwb25kZW5jZSB3aXRoIHRoZSBnb3Zlcm5tZW50IGFnZW5jeSBjb25maXJtaW5nIHRoYXQgdGhlc2UgZXhwZW5zZXMgd2VyZSBub3QgcmVpbWJ1cnNlZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiBwcm92aWRlZCBpcyBsZWdpYmxlIGFuZCBvcmdhbml6ZWQgY2hyb25vbG9naWNhbGx5LiBUaGlzIHdpbGwgZ3JlYXRseSBhc3Npc3QgaW4gdGhlIHNwZWVkeSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IGZpbGluZ3MgYW5kIGluIG1heGltaXppbmcgeW91ciBlbGlnaWJsZSBkZWR1Y3Rpb25zLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuIFdl4oCZcmUgaGVyZSB0byBoZWxwIGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheSE8L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSFNBIERlZHVjdGlvbiBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSFNBIERlZHVjdGlvbiBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBjb25maXJtaW5nIHlvdXIgSGVhbHRoIFNhdmluZ3MgQWNjb3VudCAoSFNBKSBjb250cmlidXRpb25zIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgSFNBIGRlZHVjdGlvbiBhbmQgZW5zdXJlIHdlIG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5Ub3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIEhTQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBjb250cmlidXRpb25zIG1hZGUgYnkgeW91ciBlbXBsb3llciB0byB0aGUgSFNBIChpZiBhcHBsaWNhYmxlKS48L2xpPlxyXG4gICAgICAgIDxsaT5EYXRlcyBvZiBjb250cmlidXRpb25zLCBpZiB0aGV5IHdlcmUgbm90IG1hZGUgaW4gYSBsdW1wIHN1bS48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBIU0EgZWxpZ2liaWxpdHkgZm9yIHRoZSB0YXggeWVhciAodHlwaWNhbGx5LCB0aGlzIGludm9sdmVzIHByb29mIG9mIGEgSGlnaCBEZWR1Y3RpYmxlIEhlYWx0aCBQbGFuKS48L2xpPlxyXG4gICAgICAgIDxsaT5TdGF0ZW1lbnRzIGZyb20geW91ciBIU0EgcHJvdmlkZXIgZGV0YWlsaW5nIGRpc3RyaWJ1dGlvbnMsIGlmIGFueSB3ZXJlIG1hZGUuPC9saT5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIG1lZGljYWwgZXhwZW5zZXMgcGFpZCBvdXQgb2YgdGhlIEhTQSwgaWYgYW55LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBib3RoIHRoZSBhY2N1cmF0ZSBmaWxpbmcgb2YgeW91ciB0YXhlcyBhbmQgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMgcmVnYXJkaW5nIEhTQXMuIFBsZWFzZSByZXNwb25kIHdpdGggdGhlc2UgZG9jdW1lbnRzIGFuZCBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIG5lZWRlZCwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFybWVkIEZvcmNlcyBNb3ZpbmcgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFybWVkIEZvcmNlcyBNb3ZpbmcgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBmb3IgdGhlIGN1cnJlbnQgdGF4IHllYXIsIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBpbmN1cnJlZCBtb3ZpbmcgZXhwZW5zZXMgcmVsYXRlZCB0byBhIHBlcm1hbmVudCBjaGFuZ2Ugb2Ygc3RhdGlvbiBhcyBhIG1lbWJlciBvZiB0aGUgQXJtZWQgRm9yY2VzLiBUbyBlbnN1cmUgdGhlIGFjY3VyYWN5IG9mIHlvdXIgdGF4IHJldHVybiBhbmQgdG8gcG90ZW50aWFsbHkgcXVhbGlmeSBmb3IgcmVsYXRlZCBkZWR1Y3Rpb25zIG9yIGV4Y2x1c2lvbnMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxiPk9yZGVycyBmb3IgUGVybWFuZW50IENoYW5nZSBvZiBTdGF0aW9uOjwvYj4gQSBjb3B5IG9mIHRoZSBvZmZpY2lhbCBvcmRlcnMgdGhhdCBpbml0aWF0ZWQgdGhlIG1vdmUuIFRoaXMgc2hvdWxkIGRldGFpbCB0aGUgbW92ZSBpcyBkdWUgdG8gbWlsaXRhcnkgb3JkZXJzIGFuZCBpbmRpY2F0ZSBib3RoIHlvdXIgcHJldmlvdXMgYW5kIG5ldyBkdXR5IHN0YXRpb25zLjwvbGk+XHJcbiAgICAgIDxsaT48Yj5SZWNlaXB0cyBhbmQgUmVjb3JkcyBvZiBNb3ZpbmcgRXhwZW5zZXM6PC9iPiBEZXRhaWxlZCByZWNlaXB0cyBvciByZWNvcmRzIG9mIGFsbCBtb3ZpbmctcmVsYXRlZCBleHBlbnNlcy4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvOlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5UcmFuc3BvcnRhdGlvbiBjb3N0cyAoZS5nLiwgY29zdHMgYXNzb2NpYXRlZCB3aXRoIG1vdmluZyBob3VzZWhvbGQgZ29vZHMgYW5kIHBlcnNvbmFsIGVmZmVjdHMpPC9saT5cclxuICAgICAgICAgIDxsaT5UcmF2ZWwgZXhwZW5zZXMgdG8gdGhlIG5ldyBob21lIChlLmcuLCBsb2RnaW5nIGNvc3RzIGVuIHJvdXRlLCBidXQgbm90IG1lYWxzKTwvbGk+XHJcbiAgICAgICAgICA8bGk+U3RvcmFnZSBleHBlbnNlcyBmb3IgaG91c2Vob2xkIGdvb2RzIGFuZCBwZXJzb25hbCBlZmZlY3RzLCBpZiBhcHBsaWNhYmxlPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PGI+TGVhc2UgVGVybWluYXRpb24gRG9jdW1lbnRhdGlvbjo8L2I+IElmIGFwcGxpY2FibGUsIGRvY3VtZW50YXRpb24gc2hvd2luZyBhbnkgY29zdHMgYXNzb2NpYXRlZCB3aXRoIGJyZWFraW5nIGEgbGVhc2UgZHVlIHRvIHRoZSBtb3ZlLjwvbGk+XHJcbiAgICAgIDxsaT48Yj5Qcm9vZiBvZiBOZXcgUmVzaWRlbmNlOjwvYj4gQSBkb2N1bWVudCBpbmRpY2F0aW5nIHRoZSBhZGRyZXNzIG9mIHlvdXIgbmV3IHBlcm1hbmVudCByZXNpZGVuY2UuIFRoaXMgY2FuIGluY2x1ZGUgYSB1dGlsaXR5IGJpbGwsIG5ldyBsZWFzZSBhZ3JlZW1lbnQsIG9yIGhvbWVvd25lcidzIGluc3VyYW5jZSBkb2N1bWVudHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugbm90ZSwgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IGV4Y2x1c2lvbnMgb3IgZGVkdWN0aW9ucyByZWxhdGVkIHRvIEFybWVkIEZvcmNlcyBtb3ZpbmcgZXhwZW5zZXMsIHRoZXNlIGRvY3VtZW50cyBhcmUgbmVjZXNzYXJ5IHRvIHZlcmlmeSB0aGUgZXhwZW5zZXMgaW5jdXJyZWQuIFdlIHVuZGVyc3RhbmQgdGhlIHNlbnNpdGl2ZSBuYXR1cmUgb2YgdGhlc2UgZG9jdW1lbnRzIGFuZCBhc3N1cmUgeW91IHRoYXQgYWxsIGluZm9ybWF0aW9uIHByb3ZpZGVkIHdpbGwgYmUga2VwdCBjb25maWRlbnRpYWwgYW5kIHVzZWQgZXhjbHVzaXZlbHkgZm9yIHRoZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2UgaW4gcHJvdmlkaW5nIHRoZXNlIGRvY3VtZW50cyB0byB1cy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRlZHVjdGlibGUgU2VsZiBFbXBsb3ltZW50IFBhcnQgVGF4ZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRlZHVjdGlibGUgU2VsZiBFbXBsb3ltZW50IFBhcnQgVGF4ZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMgYW5kIGVuc3VyZSB0aGUgYWNjdXJhY3kgb2YgeW91ciB0YXggZmlsaW5ncywgd2UndmUgaWRlbnRpZmllZCBhIHBvdGVudGlhbCBhZGp1c3RtZW50IGZvciBoYWxmIG9mIHlvdXIgc2VsZi1lbXBsb3ltZW50IHRheC4gVGhpcyBpbnZvbHZlcyB0aGUgZGVkdWN0aW9uIG9mIGhhbGYgb2YgdGhlIHNlbGYtZW1wbG95bWVudCB0YXggeW91J3ZlIHBhaWQgZm9yIHRoZSBjdXJyZW50IHllYXIsIHdoaWNoIGNvbnRyaWJ1dGVzIHRvd2FyZHMgeW91ciBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlLjwvcD5cclxuICAgIDxwPlRvIHByb2NlZWQgd2l0aCB0aGlzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPlNlbGYtRW1wbG95bWVudCBUYXggQ2FsY3VsYXRpb246PC9zdHJvbmc+IEEgZGV0YWlsZWQgY2FsY3VsYXRpb24gb2YgeW91ciBzZWxmLWVtcGxveW1lbnQgdGF4IGZvciB0aGUgY3VycmVudCB0YXggeWVhci4gVGhpcyBtYXkgaW5jbHVkZSBhIHN1bW1hcnkgb2YgeW91ciBuZXQgZWFybmluZ3MgZnJvbSBzZWxmLWVtcGxveW1lbnQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlRvdGFsIFNlbGYtRW1wbG95bWVudCBUYXggUGFpZDo8L3N0cm9uZz4gT2ZmaWNpYWwgcmVjZWlwdHMgb3IgZG9jdW1lbnRzIHNob3dpbmcgdGhlIHRvdGFsIGFtb3VudCBvZiBzZWxmLWVtcGxveW1lbnQgdGF4IHBhaWQgZm9yIHRoZSB5ZWFyLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5JZGVudGlmaWNhdGlvbiBvZiBQYXltZW50czo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvciBsZWRnZXJzIGluZGljYXRpbmcgcGF5bWVudHMgbWFkZSB0b3dhcmRzIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUgdGhyb3VnaCBzZWxmLWVtcGxveW1lbnQgdGF4LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBkb2N1bWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgdGF4ZXMgYW5kIGVuc3VyaW5nIHlvdSByZWNlaXZlIGFsbCBlbnRpdGxlZCBkZWR1Y3Rpb25zLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBPdXIgdGVhbSBpcyBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VsZiBFbXBsb3llZCBTRVAgSVJBIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VsZiBFbXBsb3llZCBTRVAgSVJBIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgbWFraW5nIGNvbnRyaWJ1dGlvbnMgdG8gYSBTRVAtSVJBIChTaW1wbGlmaWVkIEVtcGxveWVlIFBlbnNpb24gSW5kaXZpZHVhbCBSZXRpcmVtZW50IEFjY291bnQpIHRoaXMgdGF4IHllYXIgYXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwuIEZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIHRvIG1heGltaXplIHlvdXIgcG90ZW50aWFsIHRheCBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TRVAtSVJBIENvbnRyaWJ1dGlvbiBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgc3RhdGVtZW50cyBvciByZWNlaXB0cyBzaG93aW5nIHRoZSBjb250cmlidXRpb25zIG1hZGUgdG8geW91ciBTRVAtSVJBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBTZWxmLUVtcGxveWVkIEluY29tZTo8L3N0cm9uZz4gQXMgeW91ciBTRVAtSVJBIGNvbnRyaWJ1dGlvbiBsaW1pdHMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8geW91ciBzZWxmLWVtcGxveWVkIGluY29tZSwgcGxlYXNlIGVuc3VyZSB3ZSBoYXZlIGFsbCByZWxldmFudCBpbmNvbWUgZG9jdW1lbnRhdGlvbi4gVGhpcyBtYXkgaW5jbHVkZSwgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCAxMDk5IGZvcm1zLCBwcm9maXQgYW5kIGxvc3Mgc3RhdGVtZW50cywgYW5kIGJ1c2luZXNzIGJhbmsgc3RhdGVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNjaGVkdWxlIEMgKEZvcm0gMTA0MCkgb3IgRXF1aXZhbGVudDo8L3N0cm9uZz4gSWYgeW91IGhhdmUgbm90IGFscmVhZHkgZG9uZSBzbywgcGxlYXNlIHByb3ZpZGUgYSBjb21wbGV0ZWQgU2NoZWR1bGUgQyBvciBlcXVpdmFsZW50IGRvY3VtZW50YXRpb24gdGhhdCBkZXRhaWxzIHlvdXIgYnVzaW5lc3MgZWFybmluZ3MgYW5kIGV4cGVuc2VzLiBUaGlzIHdpbGwgaGVscCBpbiBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIHlvdXIgbWF4aW11bSBkZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBQcmlvciBZZWFyIENvbnRyaWJ1dGlvbiBEZXRhaWxzOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSBtYWRlIGNvbnRyaWJ1dGlvbnMgaW4gcHJpb3IgeWVhcnMgYnV0IGhhdmVu4oCZdCBzaGFyZWQgdGhvc2UgZGV0YWlscyB3aXRoIHVzLCBwbGVhc2UgZG8gc28uIFRoaXMgY2FuIGFmZmVjdCB5b3VyIGN1cnJlbnQgeWVhcuKAmXMgY29udHJpYnV0aW9ucyBhbmQgZGVkdWN0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkNvcnJlY3RseSByZXBvcnRpbmcgeW91ciBTRVAtSVJBIGNvbnRyaWJ1dGlvbnMgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgdGF4IGRlZHVjdGlvbnMgYW5kIGNvbXBseSB3aXRoIElSUyBydWxlcyBhbmQgcmVndWxhdGlvbnMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgbG9vayBmb3J3YXJkIHRvIGNvbXBsZXRpbmcgeW91ciB0YXggcHJlcGFyYXRpb24gZWZmaWNpZW50bHkgYW5kIGFjY3VyYXRlbHkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlbGYgRW1wbG95ZWQgU0lNUExFIFBsYW4gQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTZWxmIEVtcGxveWVkIFNJTVBMRSBQbGFuIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPldlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBub3RlZCB0aGF0IHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvIGEgU0lNUExFIElSQSBwbGFuIGFzIGEgc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFsIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGVzZSBjb250cmlidXRpb25zIGluIHlvdXIgdGF4IGZpbGluZywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIDwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFNJTVBMRSBJUkEgdGhpcyB0YXggeWVhcjo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIHRvdGFsIHN1bSBvZiB5b3VyIGNvbnRyaWJ1dGlvbnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db250cmlidXRpb24gZGF0ZXM6PC9zdHJvbmc+IExpc3QgdGhlIGRhdGVzIG9uIHdoaWNoIHlvdSBtYWRlIHRoZXNlIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIFNJTVBMRSBJUkEuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBjb250cmlidXRpb25zOjwvc3Ryb25nPiBUaGlzIGNhbiBpbmNsdWRlIGJhbmsgc3RhdGVtZW50cyBvciB0cmFuc2FjdGlvbiBoaXN0b3JpZXMgc2hvd2luZyB0aGUgY29udHJpYnV0aW9ucyB0byB5b3VyIFNJTVBMRSBJUkEgYWNjb3VudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPklSUyBGb3JtIDEwNDAgU2NoZWR1bGUgQzo8L3N0cm9uZz4gQXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwsIHlvdXIgdGF4IHJldHVybiBzaG91bGQgaW5jbHVkZSBhIFNjaGVkdWxlIEMgc2hvd2luZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBkZXRlcm1pbmluZyB5b3VyIG5ldCBlYXJuaW5ncyBhbmQgdGhlIGNvbnRyaWJ1dGlvbiBsaW1pdHMgZm9yIHlvdXIgU0lNUExFIElSQS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkVtcGxveWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoRUlOKSBvZiB0aGUgU0lNUExFIElSQSBwbGFuOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIHRoZSBFSU4gZm9yIHlvdXIgU0lNUExFIElSQS4gVGhpcyBpcyBub3QgcmVxdWlyZWQgaWYgeW91IGFyZSB0aGUgc29sZSBjb250cmlidXRvciBhbmQgZG8gbm90IGhhdmUgYW4gRUlOIHNlcGFyYXRlIGZyb20geW91ciBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgcmV0aXJlbWVudCBjb250cmlidXRpb25zLiBZb3VyIHByb21wdG5lc3MgaW4gcHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBoZWxwIGF2b2lkIGRlbGF5cyBpbiB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlbGYgRW1wbG95ZWQgUXVhbGlmaWVkIFBsYW4gQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTZWxmIEVtcGxveWVkIFF1YWxpZmllZCBQbGFuIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscyByZWdhcmRpbmcgeW91ciBzZWxmLWVtcGxveWVkIHF1YWxpZmllZCBwbGFuIGNvbnRyaWJ1dGlvbnMuIFlvdXIgcmVzcG9uc2UgdG8gb3VyIHF1ZXN0aW9uIGFib3V0IG1ha2luZyBjb250cmlidXRpb25zIHRvIGEgcXVhbGlmaWVkIHJldGlyZW1lbnQgcGxhbiBkdXJpbmcgdGhpcyB0YXggeWVhciBuZWNlc3NpdGF0ZXMgZnVydGhlciBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGNvbXB1dGUgcG90ZW50aWFsIHRheCBiZW5lZml0cyBvciBvYmxpZ2F0aW9ucy48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxiPkNvbmZpcm1hdGlvbiBvZiBDb250cmlidXRpb24gVHlwZTo8L2I+IENsYXJpZnkgdGhlIHR5cGUgb2YgcXVhbGlmaWVkIHJldGlyZW1lbnQgcGxhbiB5b3UgY29udHJpYnV0ZWQgdG8gKGUuZy4sIFNvbG8gNDAxKGspLCBTRVAgSVJBLCBTSU1QTEUgSVJBKS48L2xpPlxyXG4gICAgPGxpPjxiPlRvdGFsIEFtb3VudCBDb250cmlidXRlZDo8L2I+IFNwZWNpZnkgdGhlIHRvdGFsIGRvbGxhciBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIHBsYW4gZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgPGxpPjxiPkNvbnRyaWJ1dGlvbiBEYXRlczo8L2I+IExpc3QgdGhlIGRhdGVzIG9uIHdoaWNoIGNvbnRyaWJ1dGlvbnMgd2VyZSBtYWRlLjwvbGk+XHJcbiAgICA8bGk+PGI+UGxhbiBBZG1pbmlzdHJhdG9yOjwvYj4gUHJvdmlkZSB0aGUgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgcGxhbidzIGFkbWluaXN0cmF0b3IsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgIDxsaT48Yj5Qcm9vZiBvZiBDb250cmlidXRpb25zOjwvYj4gRm9yd2FyZCBhbnkgcmVjZWlwdHMsIHN0YXRlbWVudHMsIG9yIG90aGVyIGRvY3VtZW50cyB0aGF0IGNhbiB2ZXJpZnkgdGhlIGNvbnRyaWJ1dGlvbnMgeW91IG1hZGUuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoYXQgeW91IHJlY2VpdmUgdGhlIHByb3BlciB0YXggdHJlYXRtZW50IGZvciB0aGVzZSBjb250cmlidXRpb25zLiBGYWlsdXJlIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHJldGlyZW1lbnQgcGxhbiBjb250cmlidXRpb25zIGNhbiByZXN1bHQgaW4gZGlzY3JlcGFuY2llcyB3aXRoIHRoZSBJUlMgYW5kIHBvdGVudGlhbGx5IGFmZmVjdCB5b3VyIHRheCBsaWFiaWxpdHkgb3IgcmVmdW5kLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCB3aWxsIGhlbHAgdXMgdG8gbW9yZSBlZmZpY2llbnRseSBjb21wbGV0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBzZXJ2aWNlcy4gVGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlbGYgRW1wbG95ZWQgSGVhbHRoIEluc3VyYW5jZSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgSGVhbHRoIEluc3VyYW5jZSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RpY2VkIHlvdSBpbmRpY2F0ZWQgcGF5aW5nIGZvciBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zIGFzIGEgc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFsLiBUbyBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbnMgZm9yIHlvdXIgaGVhbHRoIGluc3VyYW5jZSBjb3N0cywgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiA8c3Ryb25nPmFsbCBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zPC9zdHJvbmc+IHBhaWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIG1lZGljYWwsIGRlbnRhbCwgYW5kIGxvbmctdGVybSBjYXJlIGluc3VyYW5jZS4gVGhpcyBzaG91bGQgY292ZXI6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzIHBhaWQgZm9yIHlvdXJzZWxmPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzIHBhaWQgZm9yIHlvdXIgc3BvdXNlPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzIHBhaWQgZm9yIHlvdXIgZGVwZW5kZW50czwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgcGF5bWVudCBmb3IgdGhlc2UgcHJlbWl1bXMsIHN1Y2ggYXM6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5CYW5rIHN0YXRlbWVudHM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkluc3VyYW5jZSBwYXltZW50IHJlY2VpcHRzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5DYW5jZWxsZWQgY2hlY2tzPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgdGhlIGluc3VyYW5jZSBjb3ZlcmFnZSwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+SW5zdXJhbmNlIHBvbGljeSBzdGF0ZW1lbnRzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3ZlcmFnZSBzdW1tYXJpZXM8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiB0aGF0IHRoZSBpbnN1cmFuY2UgcGxhbiBpcyBlc3RhYmxpc2hlZCB1bmRlciB5b3VyIGJ1c2luZXNzIChmb3Igc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFscykuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIHlvdXIgZGVkdWN0aWJsZSBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gUGxlYXNlIHNlbmQgdGhlIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGVkIGluIGEgdGltZWx5IG1hbm5lci48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVhcmx5IFNhdmluZ3MgV2l0aGRyYXdhbCBQZW5hbHR5XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFYXJseSBTYXZpbmdzIFdpdGhkcmF3YWwgUGVuYWx0eVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB5b3UgaW5jdXJyZWQgcGVuYWx0aWVzIGR1ZSB0byBlYXJseSB3aXRoZHJhd2FscyBmcm9tIHNhdmluZ3MgYWNjb3VudHMgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGFzc2lzdCB5b3UgZWZmaWNpZW50bHkgYW5kIGVuc3VyZSBhY2N1cmF0ZSB0YXggZmlsaW5nLCB3ZSBraW5kbHkgYXNrIHlvdSB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRoZSB0b3RhbCBhbW91bnQgb2YgcGVuYWx0aWVzPC9zdHJvbmc+IGluY3VycmVkIGZyb20gZWFybHkgd2l0aGRyYXdhbHMuIFRoaXMgaW5jbHVkZXMgcGVuYWx0aWVzIGZyb20gY2VydGlmaWNhdGVzIG9mIGRlcG9zaXQgb3Igb3RoZXIgdGltZS1iYXNlZCBzYXZpbmdzIGFjY291bnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgc3RhdGVtZW50czwvc3Ryb25nPiBmcm9tIHlvdXIgZmluYW5jaWFsIGluc3RpdHV0aW9uIGZvciBlYWNoIGluc3RhbmNlIG9mIGVhcmx5IHdpdGhkcmF3YWwuIFRoZXNlIHN0YXRlbWVudHMgc2hvdWxkIGluY2x1ZGU6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZGF0ZSBvZiB3aXRoZHJhd2FsPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHdpdGhkcmF3biBlYXJseTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIHBlbmFsdHkgY2hhcmdlZDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UaGUgcHVycG9zZSBvZiBlYWNoIHdpdGhkcmF3YWw8L3N0cm9uZz4sIGlmIGF2YWlsYWJsZS4gQ2VydGFpbiBzaXR1YXRpb25zIG1heSBwcm92aWRlIGV4Y2VwdGlvbnMgdG8gcGVuYWx0aWVzIG9uIHlvdXIgdGF4IHJldHVybi48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgPHN0cm9uZz5jb3JyZXNwb25kZW5jZSBvciBkb2N1bWVudGF0aW9uPC9zdHJvbmc+IGZyb20gdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiByZWdhcmRpbmcgdGhlc2UgcGVuYWx0aWVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIHRvIGFjY3VyYXRlbHkgYXNzZXNzIHBvc3NpYmxlIGltcGFjdHMgb24geW91ciB0YXggZmlsaW5nIGFuZCBleHBsb3JlIGFueSBvcHBvcnR1bml0aWVzIHRvIG1pbmltaXplIHlvdXIgdGF4IGxpYWJpbGl0eS48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkZXRhaWxzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQWxpbW9ueSBQYWlkXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBbGltb255IFBhaWRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGZpbmFuY2lhbCBhY3Rpdml0aWVzIG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuIEFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBtYWRlIGFsaW1vbnkgcGF5bWVudHMgdW5kZXIgYSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm4uIFRoZSBkb2N1bWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucyBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnlpbmcgYWxsb3dhYmxlIGRlZHVjdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBwYXltZW50cy48L3A+IFxyXG4gICAgPHA+PHN0cm9uZz5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgcmVsYXRlZCB0byB5b3VyIGFsaW1vbnkgcGF5bWVudHM6PC9zdHJvbmc+PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5Db3B5IG9mIHlvdXIgc2lnbmVkIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQgdGhhdCBzdGF0ZXMgdGhlIGFtb3VudCBvZiBhbGltb255IHRvIGJlIHBhaWQgYW5kIHRoZSB0aW1lbGluZXMuIFBsZWFzZSBlbnN1cmUgdGhpcyBkb2N1bWVudCBoaWdobGlnaHRzIHRoZSBzZWN0aW9ucyByZWxldmFudCB0byBhbGltb255IG9ibGlnYXRpb25zLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbGVkIHJlY29yZCBvZiBhbGwgYWxpbW9ueSBwYXltZW50cyBtYWRlIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2YgZWFjaCBwYXltZW50PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgb2YgZWFjaCBwYXltZW50PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5NZXRob2Qgb2YgcGF5bWVudCAoZS5nLiwgY2hlY2ssIGJhbmsgdHJhbnNmZXIpPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSByZWNpcGllbnQ8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50cyBvciBjYW5jZWxsZWQgY2hlY2tzIGFzIHByb29mIG9mIHRoZSBhbGltb255IHBheW1lbnRzIG1hZGUuPC9saT5cclxuICAgICAgICA8bGk+SWYgYXBwbGljYWJsZSwgYW55IGRvY3VtZW50YXRpb24gb3IgY29ycmVzcG9uZGVuY2UgdGhhdCBpbmRpY2F0ZXMgbW9kaWZpY2F0aW9ucyB0byB0aGUgb3JpZ2luYWwgYWdyZWVtZW50IGFmZmVjdGluZyBhbGltb255IHBheW1lbnRzIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGRvY3VtZW50YXRpb24gd2lsbCBoZWxwIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHJldHVybiByZWZsZWN0cyBhbGwgcmVsZXZhbnQgZmluYW5jaWFsIGFjdGl2aXRpZXMgYW5kIGFzc2lzdHMgaW4gYWNjdXJhdGVseSBkZXRlcm1pbmluZyBhbnkgdGF4IGxpYWJpbGl0aWVzIG9yIGRlZHVjdGlvbnMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZGV0YWlscyB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQgYW5kIHdpbGwgZXhwZWRpdGUgdGhlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggcHJlcGFyYXRpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGlmIHlvdSBuZWVkIGZ1cnRoZXIgZ3VpZGFuY2Ugb24gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cy4gV2UgYXJlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhpcyBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUcmFkaXRpb25hbCBJUkEgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUcmFkaXRpb25hbCBJUkEgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybi4gSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IGR1cmluZyB0aGlzIHRheCB5ZWFyLCB5b3UgaGF2ZSBjb250cmlidXRlZCB0byBhIFRyYWRpdGlvbmFsIElSQSAoSW5kaXZpZHVhbCBSZXRpcmVtZW50IEFjY291bnQpLiBUbyBhY2N1cmF0ZWx5IGNhcHR1cmUgdGhpcyBpbiB5b3VyIHRheCBmaWxpbmcgYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgZGVkdWN0aW9uLCB3ZSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IGNvbnRyaWJ1dGVkIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+UHJvb2Ygb2YgY29udHJpYnV0aW9uIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgKHN1Y2ggYXMgc3RhdGVtZW50cyBvciByZWNlaXB0cykuPC9saT5cclxuICAgICAgPGxpPllvdXIgeWVhci1lbmQgSVJBIHN0YXRlbWVudC48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlscyBvZiBhbnkgcHJldmlvdXMgbm9uLWRlZHVjdGlibGUgY29udHJpYnV0aW9ucyB0byB5b3VyIElSQSAoaWYgYXBwbGljYWJsZSkuPC9saT5cclxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSB3aXRoZHJhd2FscyBvciBkaXN0cmlidXRpb25zIHRha2VuIGR1cmluZyB0aGUgeWVhci48L2xpPlxyXG4gICAgICA8bGk+WW91ciBmaWxpbmcgc3RhdHVzIGFuZCBhbnkgaW5mb3JtYXRpb24gb24gYSBzcG91c2UncyBJUkEgY29udHJpYnV0aW9ucyBpZiB5b3UgYXJlIG1hcnJpZWQuPC9saT5cclxuICAgICAgPGxpPkRldGFpbHMgb2YgeW91ciBlYXJuZWQgaW5jb21lIGZvciB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHRoYXQgd2UgY2FuIGFjY3VyYXRlbHkgcmVwcmVzZW50IHlvdXIgSVJBIGNvbnRyaWJ1dGlvbnMgYW5kIG9wdGltaXplIHlvdXIgZGVkdWN0aW9ucy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU3R1ZGVudCBMb2FuIEludGVyZXN0IERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU3R1ZGVudCBMb2FuIEludGVyZXN0IERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBwYXltZW50IG9mIHN0dWRlbnQgbG9hbiBpbnRlcmVzdCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcm9jZXNzIHRoaXMgc2VnbWVudCBvZiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSB5b3UgYmVuZWZpdCBmcm9tIGFueSBwb3RlbnRpYWwgU3R1ZGVudCBMb2FuIEludGVyZXN0IERlZHVjdGlvbiwgd2UgbmVlZCB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDEwOTgtRTo8L3N0cm9uZz4gVGhpcyBpcyBhIFN0dWRlbnQgTG9hbiBJbnRlcmVzdCBTdGF0ZW1lbnQgaXNzdWVkIGJ5IHlvdXIgbG9hbiBzZXJ2aWNlci4gSWYgeW91J3ZlIHBhaWQgJDYwMCBvciBtb3JlIGluIGludGVyZXN0LCB5b3Ugc2hvdWxkIGF1dG9tYXRpY2FsbHkgcmVjZWl2ZSBpdC4gUGxlYXNlIHNjYW4gYW5kIHNlbmQgaXQgdG8gdXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Mb2FuIFN0YXRlbWVudHM6PC9zdHJvbmc+IElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBGb3JtIDEwOTgtRSBvciBwYWlkIGxlc3MgdGhhbiAkNjAwIGluIGludGVyZXN0LCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCBsb2FuIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGUgaW50ZXJlc3QgcGFpZCBvdmVyIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJvcnJvd2VyJ3MgSW5mb3JtYXRpb246PC9zdHJvbmc+IENvbmZpcm0gdGhlIFNvY2lhbCBTZWN1cml0eSBOdW1iZXJzIGFuZCBmdWxsIG5hbWVzIG9mIGFueSBpbmRpdmlkdWFscyBmb3Igd2hvbSB0aGUgbG9hbiBpbnRlcmVzdCB3YXMgcGFpZCwgaW5jbHVkaW5nIHlvdXJzZWxmLCB5b3VyIHNwb3VzZSwgb3IgZGVwZW5kZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBheW1lbnRzIG9uIFNvbWVvbmUgRWxzZSdzIEJlaGFsZjo8L3N0cm9uZz4gSWYgeW91J3JlIG5vdCBsZWdhbGx5IG9ibGlnYXRlZCB0byBtYWtlIGludGVyZXN0IHBheW1lbnRzIG9uIHRoZSBsb2FuIGJ1dCBoYXZlIGRvbmUgc28gYW55d2F5LCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgcmVmbGVjdGluZyB0aGlzIHBheW1lbnQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGRlZHVjdGlvbiBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCB0YXggYWR2YW50YWdlcywgYW5kIHdlJ3JlIGhlcmUgdG8gaGVscCB5b3UgbWF4aW1pemUgeW91ciBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9hY3RpdmUgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhcyB3ZSBzdHJpdmUgdG8gc2VydmUgeW91IGJldHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQXJjaGVyIE1TQSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFyY2hlciBNU0EgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgY29udHJpYnV0aW9ucyB0byBhbiBBcmNoZXIgTWVkaWNhbCBTYXZpbmdzIEFjY291bnQgKE1TQSkgd2l0aGluIHRoaXMgdGF4IHllYXIsIHVuZGVyIGEgaGlnaC1kZWR1Y3RpYmxlIGhlYWx0aCBwbGFuLiBUbyBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIGNvbnRyaWJ1dGlvbnMgaW4geW91ciB0YXggcmV0dXJuLCBhbmQgdG8gbWF4aW1pemUgeW91ciBwb3RlbnRpYWwgZGVkdWN0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBzcGVjaWZpY3M6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gNTQ5OC1TQTo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIEZvcm0gNTQ5OC1TQSwgaWYgcmVjZWl2ZWQsIHdoaWNoIHNob3dzIHRoZSBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIEFyY2hlciBNU0EgdGhpcyB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJhbmsgb3IgRmluYW5jaWFsIFN0YXRlbWVudHM6PC9zdHJvbmc+IElmIHlvdSBoYXZlbid0IHJlY2VpdmVkIEZvcm0gNTQ5OC1TQSwgYmFuayBvciBmaW5hbmNpYWwgaW5zdGl0dXRpb24gc3RhdGVtZW50cyBzaG93aW5nIHlvdXIgY29udHJpYnV0aW9ucyB0byB0aGUgTVNBIGFyZSByZXF1aXJlZC4gRW5zdXJlIHRoZXNlIGNsZWFybHkgaGlnaGxpZ2h0IHRoZSBjb250cmlidXRpb24gYW1vdW50cyBhbmQgZGF0ZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBIaWdoLURlZHVjdGlibGUgSGVhbHRoIFBsYW46PC9zdHJvbmc+IERvY3VtZW50YXRpb24gdGhhdCBldmlkZW5jZXMgeW91IGFyZSBjb3ZlcmVkIHVuZGVyIGEgaGlnaC1kZWR1Y3RpYmxlIGhlYWx0aCBwbGFuLiBUaGlzIGNvdWxkIGluY2x1ZGUgaW5zdXJhbmNlIHN0YXRlbWVudHMgb3IgcG9saWN5IGRvY3VtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIGFuZCBBY2NvdW50IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBhY2NvdW50IGhvbGRlcidzIGZ1bGwgbmFtZSBhbmQgU29jaWFsIFNlY3VyaXR5IE51bWJlciwgYWxvbmdzaWRlIHRoZSBBcmNoZXIgTVNBIGFjY291bnQgbnVtYmVyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VG8gZmFjaWxpdGF0ZSBhIHNtb290aCBkZWR1Y3Rpb24gcHJvY2VzcyBhbmQgYWRoZXJlIHRvIElSUyBndWlkZWxpbmVzLCBraW5kbHkgc3VibWl0IHRoZSBvdXRsaW5lZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZTwvc3Ryb25nPi4gRWFybHkgc3VibWlzc2lvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIHRvIGVuc3VyZSB3ZSBjYW4gcHJvdmlkZSB5b3Ugd2l0aCB0aGUgYmVzdCB0YXggcHJlcGFyYXRpb24gc2VydmljZS48L3A+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB0byB0aGVzZSByZXF1aXJlbWVudHMgd2lsbCBkaXJlY3RseSBpbXBhY3QgdGhlIGVmZmljaWVuY3kgYW5kIGFjY3VyYWN5IG9mIHlvdXIgdGF4IHJldHVybiBwcm9jZXNzaW5nLiBTaG91bGQgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBvciBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIGRvY3VtZW50YXRpb24sIHBsZWFzZSBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJPdGhlciBXcml0ZS1JbiBBZGp1c3RtZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiT3RoZXIgV3JpdGUtSW4gQWRqdXN0bWVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBhZGRpdGlvbmFsIGV4cGVuc2VzIG9yIGFkanVzdG1lbnRzIHRoYXQgY291bGQgaW1wYWN0IHlvdXIgdGF4YWJsZSBpbmNvbWUgZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgZnVsbHkgbGV2ZXJhZ2UgYWxsIHBvc3NpYmxlIGRlZHVjdGlvbnMgYW5kIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGF0IHlvdSBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uIHBlcnRhaW5pbmcgdG8gdGhlc2UgaXRlbXMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGZvciBlYWNoIHNwZWNpZmllZCBkZWR1Y3Rpb24gb3IgYWRqdXN0bWVudDo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgdGhlIEV4cGVuc2Ugb3IgQWRqdXN0bWVudDo8L3N0cm9uZz4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIGl0ZW0geW91IGJlbGlldmUgc2hvdWxkIGJlIGNvbnNpZGVyZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQ6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgcGFpZCBvciBpbmN1cnJlZCBmb3IgZWFjaCBvZiB0aGVzZSBleHBlbnNlcyBvciBhZGp1c3RtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+IENvcGllcyBvZiByZWNlaXB0cywgaW52b2ljZXMsIGxlZ2FsIGRvY3VtZW50cywgb3Igb3RoZXIgc3VwcG9ydGluZyBldmlkZW5jZSB0aGF0IHZhbGlkYXRlIHRoZSBleHBlbnNlIG9yIGFkanVzdG1lbnQuIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgY29tcGxpYW5jZSB3aXRoIElSUyByZXF1aXJlbWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFBheW1lbnQgb3IgSW5jdXJyZW5jZTo8L3N0cm9uZz4gVGhlIGRhdGUocykgb24gd2hpY2ggdGhlIGV4cGVuc2Ugd2FzIHBhaWQgb3IgdGhlIGFkanVzdG1lbnQgb2NjdXJyZWQuIFRoaXMgaXMgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIHRoZSB0YXggeWVhciBpbiB3aGljaCB0aGUgZGVkdWN0aW9uIG9yIGFkanVzdG1lbnQgYXBwbGllcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgRXhwbGFuYXRpb246PC9zdHJvbmc+IEFueSBvdGhlciByZWxldmFudCBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGhlbHAgdXMgdW5kZXJzdGFuZCBob3cgdGhlIGV4cGVuc2Ugb3IgYWRqdXN0bWVudCBpcyBqdXN0aWZpZWQgdW5kZXIgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhcmUgcHJvdmlkZWQgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBlZmZpY2llbnQgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCBjb25zdGl0dXRlcyBhcHByb3ByaWF0ZSBkb2N1bWVudGF0aW9uLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFdlIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk1lZGljYWwgYW5kIERlbnRhbCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTWVkaWNhbCBhbmQgRGVudGFsIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IG9yIHlvdXIgZGVwZW5kZW50cyBoYXZlIGluY3VycmVkIHNpZ25pZmljYW50IG1lZGljYWwgb3IgZGVudGFsIGV4cGVuc2VzIGR1cmluZyB0aGlzIHRheCB5ZWFyIHRoYXQgd2VyZSBub3QgcmVpbWJ1cnNlZCBieSBpbnN1cmFuY2Ugb3Igb3RoZXIgaGVhbHRoIHBsYW5zLiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgZXhwZW5zZXMgaW4geW91ciB0YXggcHJlcGFyYXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5EZXRhaWxlZCByZWNlaXB0cyBvciBzdGF0ZW1lbnRzIGZvciBhbGwgbWVkaWNhbCBhbmQgZGVudGFsIGV4cGVuc2VzIGluY3VycmVkIGZvciB5b3Vyc2VsZiBhbmQgYW55IGRlcGVuZGVudHMuIFRoaXMgaW5jbHVkZXMgcGF5bWVudHMgZm9yOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RG9jdG9ycyBhbmQgZGVudGlzdHM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlN1cmdlb25zPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5QcmVzY3JpcHRpb25zPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5NZWRpY2FsIGVxdWlwbWVudCBkZWVtZWQgbmVjZXNzYXJ5PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgb3RoZXIgaGVhbHRoLXJlbGF0ZWQgZXhwZW5zZXMgbm90IGxpc3RlZCB0aGF0IHlvdSBiZWxpZXZlIG1heSBiZSByZWxldmFudDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIHNob3dpbmcgYW55IHJlaW1idXJzZW1lbnRzIHJlY2VpdmVkIGZyb20gaW5zdXJhbmNlIG9yIGhlYWx0aCBwbGFucyBmb3IgdGhlc2UgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+QSBsaXN0IG9mIGRlcGVuZGVudHMgZm9yIHdob20gdGhlc2UgbWVkaWNhbCBhbmQgZGVudGFsIGV4cGVuc2VzIHdlcmUgaW5jdXJyZWQsIGFsb25nIHdpdGggdGhlaXIgcmVsYXRpb25zaGlwIHRvIHlvdS48L2xpPlxyXG4gICAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCByZWNvcmRzIG9mIHRyYXZlbCBleHBlbnNlcyByZWxhdGVkIHRvIG1lZGljYWwgY2FyZSwgaW5jbHVkaW5nIG1pbGVhZ2UsIHBhcmtpbmcsIGFuZCB0b2xscy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkhhdmluZyB0aGVzZSBkb2N1bWVudHMgcmVhZHkgYW5kIGFjY3VyYXRlbHkgZG9jdW1lbnRlZCB3aWxsIGhlbHAgdXMgZW5zdXJlIHRoYXQgd2UgY2FuIG1heGltaXplIHlvdXIgdGF4IGRlZHVjdGlvbnMgb3IgY3JlZGl0cyByZWxhdGVkIHRvIHRoZXNlIGV4cGVuc2VzLiBQbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UsIG9yIGNvbnRhY3QgdXMgdG8gc2NoZWR1bGUgYSBtZWV0aW5nIHRvIGRpc2N1c3MgdGhlc2UgaW4gZnVydGhlciBkZXRhaWwuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNBTFQgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNBTFQgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBuZWVkIHRvIGNvbXBpbGUgYWNjdXJhdGUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgU3RhdGUgYW5kIExvY2FsIFRheGVzIChTQUxUKSBleHBlbnNlcy4gQWNjb3JkaW5nIHRvIHlvdXIgcmVjZW50IHN1Ym1pc3Npb24sIHlvdSBpbmRpY2F0ZWQgaGF2aW5nIHBhaWQgc2lnbmlmaWNhbnQgYW1vdW50cyBpbiB0aGVzZSB0YXhlcyBvdmVyIHRoZSBsYXN0IHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgY2FuIHByb3ZpZGUgeW91IHdpdGggdGhlIGJlc3QgcG9zc2libGUgc2VydmljZSBhbmQgbWF4aW1pemUgeW91ciBkZWR1Y3Rpb25zLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxiPlN1bW1hcnkgb2YgU3RhdGUgYW5kIExvY2FsIEluY29tZSBUYXhlczo8L2I+IFxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5XLTIgZm9ybXMgc2hvd2luZyBzdGF0ZSBhbmQgbG9jYWwgaW5jb21lIHRheGVzIHdpdGhoZWxkLjwvbGk+XHJcbiAgICAgICAgICA8bGk+RXN0aW1hdGVkIHRheCBwYXltZW50IHJlY2VpcHRzIHRvIHN0YXRlIGFuZCBsb2NhbCBnb3Zlcm5tZW50cywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT48Yj5Qcm9wZXJ0eSBUYXhlczo8L2I+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkFubnVhbCBwcm9wZXJ0eSB0YXggc3RhdGVtZW50cyBmb3IgeW91ciBwcmltYXJ5IHJlc2lkZW5jZSwgdmFjYXRpb24gaG9tZXMsIGFuZCBhbnkgb3RoZXIgcmVhbCBlc3RhdGUgb3duZWQuPC9saT5cclxuICAgICAgICAgIDxsaT5WZWhpY2xlIHJlZ2lzdHJhdGlvbiBkb2N1bWVudHMgc2hvd2luZyBwYWlkIHByb3BlcnR5IHRheCBhbW91bnRzLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxiPlNhbGVzIFRheGVzOjwvYj4gKElmIHlvdSBlbGVjdGVkIHRvIGRlZHVjdCBzYWxlcyB0YXhlcyBpbnN0ZWFkIG9mIGluY29tZSB0YXhlcylcclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+RGV0YWlsZWQgcmVjZWlwdHMgb2Ygc2lnbmlmaWNhbnQgcHVyY2hhc2VzIChlLmcuLCB2ZWhpY2xlLCBib2F0LCBob21lIHJlbm92YXRpb24gbWF0ZXJpYWxzKS48L2xpPlxyXG4gICAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIG9yIHN1bW1hcnkgb2YgdG90YWwgc2FsZXMgdGF4ZXMgcGFpZCBpZiB5b3Uga2VwdCBhIGRldGFpbGVkIHJlY29yZC48L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBkb2N1bWVudHMgYXJlIGRhdGVkIHdpdGhpbiB0aGUgbGFzdCB0YXggeWVhci4gUHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB3aWxsIGV4cGVkaXRlIHRoZSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiBhbmQgaGVscCB1cyBpZGVudGlmeSBlbGlnaWJsZSBkZWR1Y3Rpb25zIHRvIG9wdGltaXplIHlvdXIgdGF4IHNpdHVhdGlvbi48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZWR1Y3RpYmxlIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEZWR1Y3RpYmxlIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBuZWVkIGZ1cnRoZXIgZGV0YWlscyByZWdhcmRpbmcgeW91ciBkZWR1Y3RpYmxlIGludGVyZXN0IGV4cGVuc2VzLiBUaGlzIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBpbmZvcm1hdGlvbiB5b3UgcHJvdmlkZWQgaW5kaWNhdGluZyB0aGF0IHlvdSBoYXZlIGluY3VycmVkIG1vcnRnYWdlIGludGVyZXN0LCBsYXRlIGZlZXMsIG9yIHBvaW50cyBvbiBhIGhvbWUgbG9hbiB0aGlzIHllYXIgZm9yIGVpdGhlciB5b3VyIHByaW1hcnkgcmVzaWRlbmNlIG9yIGEgc2Vjb25kIGhvbWUuIFRoZXNlIGV4cGVuc2VzIG1heSBzaWduaWZpY2FudGx5IHJlZHVjZSB5b3VyIHRheGFibGUgaW5jb21lLCBlbnN1cmluZyBhIGZhdm9yYWJsZSB0YXggb3V0Y29tZSBmb3IgeW91LjwvcD5cclxuXHJcbiAgICA8aDI+UmVxdWlyZWQgRG9jdW1lbnRhdGlvbjwvaDI+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICBcclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPk1vcnRnYWdlIEludGVyZXN0IFN0YXRlbWVudHMgKEZvcm0gMTA5OCk8L3N0cm9uZz46IEZvciBlYWNoIHByb3BlcnR5IHlvdSBvd24uIFRoaXMgaW5jbHVkZXMgeW91ciBwcmltYXJ5IGhvbWUgYW5kIGFueSBzZWNvbmQgaG9tZXMgb3IgcmVudGFsIHByb3BlcnRpZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkhvbWUgRXF1aXR5IExvYW4gSW50ZXJlc3Q8L3N0cm9uZz46IElmIGFwcGxpY2FibGUsIGRvY3VtZW50YXRpb24gZm9yIGludGVyZXN0IHBhaWQgb24gaG9tZSBlcXVpdHkgbG9hbnMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgSW50ZXJlc3QgRXhwZW5zZXM8L3N0cm9uZz46IElmIHlvdSBoYXZlIGluY3VycmVkIGFueSBpbnZlc3RtZW50IGludGVyZXN0IGV4cGVuc2VzLCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCBzdGF0ZW1lbnRzIG9yIGFjY291bnQgc3VtbWFyaWVzIHNob3dpbmcgdGhlIGludGVyZXN0IHBhaWQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlBvaW50cyBQYWlkPC9zdHJvbmc+OiBEb2N1bWVudGF0aW9uIGRldGFpbGluZyBwb2ludHMgcGFpZCBpZiB5b3UgcHVyY2hhc2VkIG9yIHJlZmluYW5jZWQgYSBob21lIHRoaXMgdGF4IHllYXIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkxhdGUgUGF5bWVudCBGZWVzPC9zdHJvbmc+IG9uIE1vcnRnYWdlOiBJZiBhbnksIGRvY3VtZW50YXRpb24gb2YgbGF0ZSBwYXltZW50IGZlZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgaG9tZSBsb2FuKHMpLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybnMgYXJlIHByZXBhcmVkIGFjY3VyYXRlbHkgYW5kIGZpbGVkIG9uIHRpbWUsIHdlIGtpbmRseSBhc2sgdGhhdCB5b3Ugc3VibWl0IHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZS4gSWYgeW91IGZvcmVzZWUgYW55IGRlbGF5cyBvciBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgY29udGFjdCB1cyBpbW1lZGlhdGVseS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgYXBwcmVjaWF0ZSB0aGUgb3Bwb3J0dW5pdHkgdG8gc2VydmUgeW91IGFuZCBhcmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIG9yIGNvbmNlcm5zIHlvdSBtYXkgaGF2ZS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2hhcml0YWJsZSBDb250cmlidXRpb25zXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDaGFyaXRhYmxlIENvbnRyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYCAgICA8cD5BcyBwYXJ0IG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zLCB3ZSBub3RlZCB0aGF0IHlvdSBoYXZlIG1hZGUgY2hhcml0YWJsZSBjb250cmlidXRpb25zIHRoaXMgeWVhci4gVG8gYWNjdXJhdGVseSByZWZsZWN0IHRoZXNlIGNvbnRyaWJ1dGlvbnMgb24geW91ciB0YXggcmV0dXJuLCBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBkZWR1Y3Rpb25zLCB3ZSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxpc3Qgb2YgQ2hhcml0YWJsZSBPcmdhbml6YXRpb25zOjwvc3Ryb25nPiBOYW1lcyBhbmQgYWRkcmVzc2VzIG9mIHRoZSBvcmdhbml6YXRpb25zIHRvIHdoaWNoIHlvdSBoYXZlIGRvbmF0ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db250cmlidXRpb24gRGF0ZXM6PC9zdHJvbmc+IERhdGVzIG9uIHdoaWNoIGVhY2ggZG9uYXRpb24gd2FzIG1hZGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb25hdGlvbiBBbW91bnRzOjwvc3Ryb25nPiBcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkZvciBjYXNoIGRvbmF0aW9ucywgdGhlIGV4YWN0IGFtb3VudCBkb25hdGVkIHRvIGVhY2ggb3JnYW5pemF0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+Rm9yIGRvbmF0aW9ucyBvZiBnb29kcywgYW4gZXN0aW1hdGVkIHZhbHVlIG9mIHRoZSBpdGVtcyBkb25hdGVkIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBEb25hdGlvbjo8L3N0cm9uZz4gXHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5SZWNlaXB0cyBmb3IgY2FzaCBkb25hdGlvbnMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Gb3IgZG9uYXRpb25zIG9mIGdvb2RzLCBhbnkgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gc3VwcG9ydGluZyB0aGUgdmFsdWF0aW9uIGFuZCBjb25kaXRpb24gb2YgdGhlIGl0ZW1zIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QmFuayBzdGF0ZW1lbnRzIG9yIGNhbmNlbGxlZCBjaGVja3MgY2FuIGFsc28gc2VydmUgYXMgcHJvb2YgZm9yIGNhc2ggZG9uYXRpb25zLCBpZiByZWNlaXB0cyBhcmUgbm90IGF2YWlsYWJsZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSA4MjgzOjwvc3Ryb25nPiBJZiBhbnkgc2luZ2xlIGRvbmF0aW9uIG9mIGdvb2RzIGV4Y2VlZHMgJDUwMCBpbiB2YWx1ZSwgcGxlYXNlIGNvbXBsZXRlIFNlY3Rpb24gQSBvZiBGb3JtIDgyODMuIElmIHRoZSB0b3RhbCB2YWx1ZSBvZiBnb29kcyBkb25hdGVkIGV4Y2VlZHMgJDUsMDAwLCBhIHF1YWxpZmllZCBhcHByYWlzYWwgaXMgcmVxdWlyZWQgYW5kIHNob3VsZCBiZSBwcm92aWRlZCBhbG9uZyB3aXRoIFNlY3Rpb24gQiBvZiBGb3JtIDgyODMgY29tcGxldGVkLjwvbGk+XHJcbiAgICA8L29sPlxyXG5cclxuICAgIDxwPkNvcnJlY3QgYW5kIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgY2hhcml0YWJsZSBjb250cmlidXRpb25zIGlzIGNydWNpYWwgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMgYW5kIHRvIG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSwgYWxsb3dpbmcgdXMgdG8gcHJvY2VzcyB5b3VyIHRheCBmb3JtcyBhY2N1cmF0ZWx5IGFuZCBwcm9tcHRseS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEb25hdGVkIFByb3BlcnR5XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEb25hdGVkIFByb3BlcnR5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGluZm9ybWluZyB1cyBhYm91dCB5b3VyIGRvbmF0ZWQgcHJvcGVydHkgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBkb2N1bWVudCBhbmQgY2xhaW0gdGhlc2UgZG9uYXRpb25zIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIGRvbmF0ZWQgcHJvcGVydHkgKGUuZy4sIGZ1cm5pdHVyZSwgY2xvdGhpbmcsIGVsZWN0cm9uaWNzKS48L2xpPlxyXG4gICAgICAgIDxsaT5OYW1lcyBhbmQgYWRkcmVzc2VzIG9mIHRoZSBvcmdhbml6YXRpb25zIHRvIHdoaWNoIHlvdSBkb25hdGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSBkYXRlIG9mIGVhY2ggZG9uYXRpb24uPC9saT5cclxuICAgICAgICA8bGk+VGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhdCB0aGUgdGltZSBvZiB0aGUgZG9uYXRpb24uIElmIHBvc3NpYmxlLCBpbmNsdWRlIGhvdyB5b3UgZGV0ZXJtaW5lZCB0aGlzIHZhbHVlLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBhY2tub3dsZWRnbWVudCBvciByZWNlaXB0IHJlY2VpdmVkIGZyb20gdGhlIG9yZ2FuaXphdGlvbi4gUGxlYXNlIGVuc3VyZSBpdCBpbmNsdWRlcyB0aGUgb3JnYW5pemF0aW9u4oCZcyBuYW1lLCBkb25hdGlvbiBkYXRlLCBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZG9uYXRlZCBpdGVtcy48L2xpPlxyXG4gICAgICAgIDxsaT5JZiBhbnkgc2luZ2xlIGRvbmF0aW9uIGV4Y2VlZGVkICQ1MDAgaW4gdmFsdWUsIHBsZWFzZSBwcm92aWRlIGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIHRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBhbmQgaG93IHRoZSB2YWx1ZSB3YXMgZGV0ZXJtaW5lZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBnYXRoZXIgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2Ugc28gd2UgY2FuIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gYWNjdXJhdGVseSByZWZsZWN0cyB5b3VyIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMuIElmIHlvdSBoYXZlIG11bHRpcGxlIGRvbmF0aW9ucywgb3JnYW5pemluZyB0aGlzIGluZm9ybWF0aW9uIGNocm9ub2xvZ2ljYWxseSBjYW4gYmUgdmVyeSBoZWxwZnVsLjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2UgYXJlIGhlcmUgdG8gaGVscCE8L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRG9uYXRlZCBWZWhpY2xlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEb25hdGVkIFZlaGljbGVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBlZmZvcnRzIGluIHN1cHBvcnRpbmcgY2hhcml0YWJsZSBjYXVzZXMgdGhyb3VnaCB5b3VyIGdlbmVyb3VzIHZlaGljbGUgZG9uYXRpb24uIFRvIGFjY3VyYXRlbHkgZG9jdW1lbnQgdGhpcyBkb25hdGlvbiBmb3IgeW91ciB0YXggcmVjb3JkcyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBkZWR1Y3Rpb24sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5DaGFyaXR5IEluZm9ybWF0aW9uOjwvc3Ryb25nPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPk5hbWUgb2YgdGhlIGNoYXJpdHk8L2xpPlxyXG4gICAgICAgICAgICA8bGk+Q2hhcml0eSdzIHRheC1leGVtcHQgSUQgbnVtYmVyPC9saT5cclxuICAgICAgICAgICAgPGxpPkFkZHJlc3MgYW5kIHBob25lIG51bWJlciBvZiB0aGUgY2hhcml0eTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5WZWhpY2xlIEluZm9ybWF0aW9uOjwvc3Ryb25nPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPk1ha2UsIG1vZGVsLCBhbmQgeWVhciBvZiB0aGUgZG9uYXRlZCB2ZWhpY2xlPC9saT5cclxuICAgICAgICAgICAgPGxpPlZJTiAoVmVoaWNsZSBJZGVudGlmaWNhdGlvbiBOdW1iZXIpPC9saT5cclxuICAgICAgICAgICAgPGxpPkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHZlaGljbGUncyBjb25kaXRpb24gYXQgdGhlIHRpbWUgb2YgZG9uYXRpb248L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RG9uYXRpb24gRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxsaT5BIGNvcHkgb2YgdGhlIGRvbmF0aW9uIHJlY2VpcHQgcHJvdmlkZWQgYnkgdGhlIGNoYXJpdHk8L2xpPlxyXG4gICAgICAgICAgICA8bGk+Rm9ybSAxMDk4LUMgKENvbnRyaWJ1dGlvbnMgb2YgTW90b3IgVmVoaWNsZXMsIEJvYXRzLCBhbmQgQWlycGxhbmVzKSBpZiByZWNlaXZlZDwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5Bbnkgd3JpdHRlbiBhY2tub3dsZWRnbWVudHMgb3IgY29tbXVuaWNhdGlvbnMgZnJvbSB0aGUgY2hhcml0eTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB5b3Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIHNtb290aCBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybnMuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBuZWVkIGFueSBhc3Npc3RhbmNlIG9yIGhhdmUgcXVlc3Rpb25zIHJlZ2FyZGluZyB5b3VyIGRvbmF0aW9uIHJlY29yZHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJPdGhlciBJdGVtaXplZCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiT3RoZXIgSXRlbWl6ZWQgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgbWlnaHQgYmUgYWRkaXRpb25hbCBpbmRpdmlkdWFsLCBub24tYnVzaW5lc3MgZXhwZW5zZXMgeW91J3ZlIGluY3VycmVkIHRoaXMgdGF4IHllYXIsIHdoaWNoIG1heSBxdWFsaWZ5IGZvciBpdGVtaXplZCBkZWR1Y3Rpb25zLiBUbyBlbnN1cmUgd2UgbWF4aW1pemUgeW91ciBkZWR1Y3Rpb25zIGFuZCBhY2N1cmF0ZWx5IGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGF0IHlvdSBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFuZCBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24gZm9yIHRoZXNlIGV4cGVuc2VzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBmaW5kIGJlbG93IGEgZ3VpZGVsaW5lIG9mIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgd2UgYXJlIGxvb2tpbmcgZm9yOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiB0aGUgRXhwZW5zZTogQSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIGV4cGVuc2UsIGluY2x1ZGluZyB0aGUgcHVycG9zZSBhbmQgd2h5IHlvdSBiZWxpZXZlIGl0IHF1YWxpZmllcyBmb3IgYW4gaXRlbWl6ZWQgZGVkdWN0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPkFtb3VudCBQYWlkOiBUaGUgdG90YWwgYW1vdW50IHBhaWQgZm9yIGVhY2ggZXhwZW5zZS48L2xpPlxyXG4gICAgICAgIDxsaT5EYXRlczogVGhlIGRhdGUocykgb24gd2hpY2ggdGhlIGV4cGVuc2Ugd2FzIHBhaWQuPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgUGF5bWVudDogUmVjZWlwdHMsIGJhbmsgc3RhdGVtZW50cywgb3IgY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBzaG93aW5nIHRoZSBwYXltZW50IG9mIHRoZXNlIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPkxlZ2FsIG9yIEZpbmFuY2lhbCBBZHZpc29yIFN0YXRlbWVudHM6IElmIGFwcGxpY2FibGUsIHN0YXRlbWVudHMgb3IgbGV0dGVycyBmcm9tIGxlZ2FsIG9yIGZpbmFuY2lhbCBhZHZpc29ycyBzdXBwb3J0aW5nIHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZSBleHBlbnNlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+RXhhbXBsZXMgb2Ygc3VjaCBleHBlbnNlcyBtaWdodCBpbmNsdWRlIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG86XHJcbiAgICA8dWw+XHJcbiAgICAgICAgPGxpPk1lZGljYWwgZXhwZW5zZXMgbm90IGNvdmVyZWQgYnkgaGVhbHRoIGluc3VyYW5jZTwvbGk+XHJcbiAgICAgICAgPGxpPkludmVzdG1lbnQgYW5kIGZpbmFuY2lhbCBhZHZpc29yIGZlZXM8L2xpPlxyXG4gICAgICAgIDxsaT5UYXggcHJlcGFyYXRpb24gZmVlczwvbGk+XHJcbiAgICAgICAgPGxpPlNhZmUgZGVwb3NpdCBib3ggcmVudGFsczwvbGk+XHJcbiAgICA8L3VsPjwvcD5cclxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSByZWNlaXZlIHRoaXMgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGhlIHRpbWVseSBhbmQgZWZmaWNpZW50IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHF1YWxpZmllcyBhcyBhbiBvdGhlciBpdGVtaXplZCBleHBlbnNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNoaWxkIERlcGVuZGVudCBDYXJlIENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2hpbGQgRGVwZW5kZW50IENhcmUgQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGNvbmZpcm1pbmcgdGhhdCB5b3UgcGFpZCBmb3IgZGVwZW5kZW50IGNhcmUgc2VydmljZXMgbGFzdCB5ZWFyIHRvIGVuYWJsZSB5b3UgdG8gd29yayBvciBzZWFyY2ggZm9yIGVtcGxveW1lbnQuIFRvIGFjY3VyYXRlbHkgY2xhaW0gdGhlIDxzdHJvbmc+Q2hpbGQgYW5kIERlcGVuZGVudCBDYXJlIENyZWRpdDwvc3Ryb25nPiBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIGZ1bGwgbmFtZShzKSBhbmQgc29jaWFsIHNlY3VyaXR5IG51bWJlcihzKSAoU1NOKSBvZiB0aGUgZGVwZW5kZW50KHMpIGNhcmVkIGZvci48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHBhaWQgZm9yIGVhY2ggZGVwZW5kZW504oCZcyBjYXJlIHNlcnZpY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPk5hbWUsIGFkZHJlc3MsIGFuZCBUYXhwYXllciBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKEVJTiBvciBTU04pIG9mIHRoZSBjYXJlIHByb3ZpZGVyKHMpLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIHBheW1lbnQocykgbWFkZSB0byB0aGUgY2FyZWdpdmVyKHMpLCBzdWNoIGFzIHJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT5JZiB0aGUgZGVwZW5kZW50IGlzIGEgZGlzYWJsZWQgYWR1bHQsIHBsZWFzZSBwcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlaXIgY29uZGl0aW9uIHRvIGNvbmZpcm0gZWxpZ2liaWxpdHkuPC9saT5cclxuICAgICAgICA8bGk+QW55IGFwcGxpY2FibGUgZGF0ZXMgZHVyaW5nIHdoaWNoIHRoZSBjYXJlIHdhcyBwcm92aWRlZCwgZXNwZWNpYWxseSBpZiB0aGUgY2FyZSB3YXMgbm90IGZvciB0aGUgZnVsbCB5ZWFyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIHRvIGVuc3VyZSB3ZSBjYW4gbWF4aW1pemUgeW91ciBlbGlnaWJsZSBjcmVkaXQgYW5kIGNvbXBseSB3aXRoIHRoZSBJUlMgcmVxdWlyZW1lbnRzLiBTaG91bGQgeW91IGhhdmUgY29uY2VybnMgYWJvdXQgZ2F0aGVyaW5nIGFueSBvZiB0aGUgcmVxdWVzdGVkIGRvY3VtZW50YXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgZm9yIGFzc2lzdGFuY2UuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBXZSBhcmUgaGVyZSB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2VzcyB0byBhY2hpZXZlIHRoZSBiZXN0IHBvc3NpYmxlIG91dGNvbWUgb24geW91ciB0YXggcmV0dXJuLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDaGlsZCBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDaGlsZCBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZXhhbWluaW5nIHlvdXIgZWxpZ2liaWxpdHkgZm9yIHRoZSA8c3Ryb25nPkNoaWxkIFRheCBDcmVkaXQ8L3N0cm9uZz4sIGJhc2VkIG9uIHlvdXIgYWZmaXJtYXRpdmUgcmVzcG9uc2UgcmVnYXJkaW5nIGRlcGVuZGVudHMgdW5kZXIgdGhlIGFnZSBvZiAxNy4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBtYXhpbWl6ZWQgdGF4IGJlbmVmaXRzLCBraW5kbHkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5GdWxsIG5hbWUocykgb2YgdGhlIGNoaWxkIG9yIGNoaWxkcmVuLjwvbGk+XHJcbiAgICAgICAgPGxpPkRhdGUocykgb2YgYmlydGggZm9yIGVhY2ggY2hpbGQuPC9saT5cclxuICAgICAgICA8bGk+U29jaWFsIFNlY3VyaXR5IE51bWJlcihzKSBmb3IgZWFjaCBjaGlsZC48L2xpPlxyXG4gICAgICAgIDxsaT5BIHN0YXRlbWVudCBjb25maXJtaW5nIHRoZSBjaGlsZCBvciBjaGlsZHJlbiBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGxhc3QgeWVhci4gSWYgYXBwbGljYWJsZSwgcGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvZiBjdXN0b2R5IGFycmFuZ2VtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIG92ZXJ2aWV3IG9mIGhvdyB5b3UgcHJvdmlkZWQgbW9yZSB0aGFuIGhhbGYgb2YgdGhlaXIgZmluYW5jaWFsIHN1cHBvcnQgbGFzdCB5ZWFyLiBUaGlzIGNhbiBpbmNsdWRlIHJlY29yZHMgb2YgaG91c2luZywgZm9vZCwgZWR1Y2F0aW9uLCBtZWRpY2FsIGNhcmUsIGFuZCBvdGhlciByZWxldmFudCBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT5Db3B5IG9mIHlvdXIgbGFzdCB5ZWFyJ3MgdGF4IHJldHVybiwgaWYgbm90IGFscmVhZHkgcHJvdmlkZWQsIHRvIGFzc2lzdCBpbiBldmFsdWF0aW5nIGVsaWdpYmlsaXR5IGFuZCBwb3RlbnRpYWwgcGhhc2Utb3V0cyBiYXNlZCBvbiBpbmNvbWUuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLiBZb3VyIHByb21wdCByZXNwb25zZSB3aWxsIGFpZCBpbiB0aGUgc3dpZnQgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSB0aGF0IHlvdSByZWNlaXZlIGFsbCBlbGlnaWJsZSB0YXggYmVuZWZpdHMuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UgYXJlIGhlcmUgdG8gaGVscCE8L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQWRkaXRpb25hbCBDaGlsZCBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IG1heSBxdWFsaWZ5IGZvciB0aGUgPHN0cm9uZz5BZGRpdGlvbmFsIENoaWxkIFRheCBDcmVkaXQ8L3N0cm9uZz4gYmFzZWQgb24geW91ciBwcmVsaW1pbmFyeSBpbmZvcm1hdGlvbi4gVG8gZW5zdXJlIHdlIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB5b3VyIGVsaWdpYmlsaXR5IGFuZCBwb3RlbnRpYWxseSBtYXhpbWl6ZSB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUXVhbGlmeWluZyBDaGlsZHJlbjo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlIFNvY2lhbCBTZWN1cml0eSBjYXJkcyBhbmQgYmlydGggY2VydGlmaWNhdGVzIGZvciBlYWNoIG9mIHlvdXIgcXVhbGlmeWluZyBjaGlsZHJlbiB1bmRlciB0aGUgYWdlIG9mIDE3LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkluY29tZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBGdXJuaXNoIGFsbCBXLTIgZm9ybXMsIDEwOTkgZm9ybXMsIGFuZCBhbnkgb3RoZXIgcHJvb2Ygb2YgaW5jb21lIHRvIGNvbmZpcm0geW91IGhhdmUgZWFybmVkIGF0IGxlYXN0ICQyLDUwMC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFy4oCZcyBUYXggUmV0dXJuOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuIHRvIHZlcmlmeSB0aGUgQ2hpbGQgVGF4IENyZWRpdCBhbW91bnQgeW91IHJlY2VpdmVkIG9yIHdlcmUgZWxpZ2libGUgdG8gcmVjZWl2ZS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JUlMgTGV0dGVyIDY0MTk6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgdGhlIElSUyBMZXR0ZXIgNjQxOSBmb3IgdGhlIHRheCB5ZWFyIHJlZ2FyZGluZyB0aGUgYWR2YW5jZSBDaGlsZCBUYXggQ3JlZGl0IHBheW1lbnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VG8gZmFjaWxpdGF0ZSBhIHNtb290aCBwcm9jZXNzLCB3ZSBraW5kbHkgYXNrIHlvdSB0byBzZW5kIHRoZSBhYm92ZSBhcyBzb29uIGFzIHBvc3NpYmxlLCBlbnN1cmluZyBhbGwgc3VibWlzc2lvbnMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBhcmUgY29tbWl0dGVkIHRvIHNlcnZpbmcgeW91ciB0YXggcHJlcGFyYXRpb24gbmVlZHMgZWZmaWNpZW50bHkgYW5kIHNlY3VyaW5nIHRoZSBiZXN0IHBvc3NpYmxlIG91dGNvbWUgZm9yIHlvdSBhbmQgeW91ciBmYW1pbHkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNyZWRpdCBmb3IgT3RoZXIgRGVwZW5kZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ3JlZGl0IGZvciBPdGhlciBEZXBlbmRlbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RpY2VkIHlvdSBpbmRpY2F0ZWQgaGF2aW5nIGRlcGVuZGVudHMgdGhhdCBtYXkgcXVhbGlmeSBmb3IgdGhlIDxzdHJvbmc+Q3JlZGl0IGZvciBPdGhlciBEZXBlbmRlbnRzPC9zdHJvbmc+LiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgZGVwZW5kZW50cy48L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5GdWxsIG5hbWUgb2YgZWFjaCBkZXBlbmRlbnQuPC9saT5cclxuICAgICAgPGxpPlRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UgKGUuZy4sIHBhcmVudCwgc2libGluZywgYWR1bHQgY2hpbGQsIG9yIG90aGVyKS48L2xpPlxyXG4gICAgICA8bGk+VGhlaXIgU29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKSBvciBJbmRpdmlkdWFsIFRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoSVRJTikuPC9saT5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiB0aGF0IHRoZXkgbGl2ZWQgd2l0aCB5b3UgZm9yIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSB0YXggeWVhci4gUGxlYXNlIHByb3ZpZGUgYW55IHJlbGV2YW50IGRldGFpbHMgb3IgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBzdXBwb3J0IHRoaXMgY2xhaW0gKGlmIGF2YWlsYWJsZSkuPC9saT5cclxuICAgICAgPGxpPkRldGFpbGVkIGxpc3Qgb2YgdGhlIGZpbmFuY2lhbCBzdXBwb3J0IHlvdSBwcm92aWRlZC4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBmb29kLCBzaGVsdGVyLCBjbG90aGluZywgbWVkaWNhbCBjYXJlLCBlZHVjYXRpb24sIGFuZCB0cmFuc3BvcnRhdGlvbiBjb3N0cy48L2xpPlxyXG4gICAgICA8bGk+QW55IGluY29tZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkZXBlbmRlbnQuIFRoaXMgaW5jbHVkZXMgaW5jb21lIHN0YXRlbWVudHMgb3IgYW4gYWZmaXJtYXRpb24gdGhhdCB0aGV5IGhhZCBubyBpbmNvbWUuPC9saT5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiB0aGF0IHRoZXkgYXJlIGEgVS5TLiBjaXRpemVuLCBVLlMuIG5hdGlvbmFsLCBvciBhIHJlc2lkZW50IGFsaWVuIG9mIHRoZSBVbml0ZWQgU3RhdGVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHNlbmQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB3ZSBjYW4gcHJvY2VlZCB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uIHdpdGhvdXQgZGVsYXkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+IFxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlJ3JlIGhlcmUgdG8gaGVscCBtYWtlIHlvdXIgdGF4IGZpbGluZyBwcm9jZXNzIGFzIHNtb290aCBhbmQgZWZmaWNpZW50IGFzIHBvc3NpYmxlLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZG9wdGlvbiBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFkb3B0aW9uIENyZWRpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgaGF2aW5nIGV4cGVuc2VzIHJlbGF0ZWQgdG8gYWRvcHRpbmcgYSBjaGlsZCBsYXN0IHllYXIuIFRvIGFjY3VyYXRlbHkgY2xhaW0gdGhlIEFkb3B0aW9uIENyZWRpdCBvbiB5b3VyIHRheCByZXR1cm5zLCB3ZSByZXF1aXJlIHNwZWNpZmljIGRvY3VtZW50YXRpb24uPC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+RmluYWxpemVkIEFkb3B0aW9uIERlY3JlZSBvciBDZXJ0aWZpY2F0ZS48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlsZWQgTGVnYWwgRmVlcyBJbnZvaWNlIChpbmNsdWRpbmcgdGhlIGF0dG9ybmV54oCZcyBuYW1lLCBhZGRyZXNzLCBhbmQgdGhlIGRhdGUgb2Ygc2VydmljZSkuPC9saT5cclxuICAgICAgPGxpPkNvdXJ0IENvc3RzIFJlY2VpcHRzLjwvbGk+XHJcbiAgICAgIDxsaT5UcmF2ZWwgRXhwZW5zZXMgUmVjZWlwdHMgKGFpcmZhcmUsIGhvdGVsLCBtZWFscykgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYWRvcHRpb24gcHJvY2Vzcy48L2xpPlxyXG4gICAgICA8bGk+QW55IHJlbGV2YW50IGRvY3VtZW50cyBmb3IgYSBjaGlsZCB3aXRoIHNwZWNpYWwgbmVlZHMsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgPGxpPkZvcmVpZ24gYWRvcHRpb246IFByb3ZpZGUgdGhlIGNvdW50cnkncyBsZWdhbCBkb2N1bWVudGF0aW9uIHByb3ZpbmcgdGhlIGFkb3B0aW9uIHdhcyBmaW5hbGl6ZWQuPC9saT5cclxuICAgICAgPGxpPklSUyBGb3JtIDg4MzksIFF1YWxpZmllZCBBZG9wdGlvbiBFeHBlbnNlcyAoaWYgeW91IGhhdmUgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gY29tcGxldGUgdGhpcykuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBwcm92aWRlZCBkb2N1bWVudHMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlLiBJbmNvbXBsZXRlIG9yIHVuY2xlYXIgZG9jdW1lbnRhdGlvbiBtYXkgZGVsYXkgdGhlIHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCB0aGUgcG90ZW50aWFsIGNyZWRpdC48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCB0byBwcm92aWRlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gT3VyIGdvYWwgaXMgdG8gYXNzaXN0IHlvdSBpbiBtYXhpbWl6aW5nIHlvdXIgYmVuZWZpdHMgd2hpbGUgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQW1lcmljYW4gT3Bwb3J0dW5pdHkgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQW1lcmljYW4gT3Bwb3J0dW5pdHkgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QmFzZWQgb24geW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSByZWdhcmRpbmcgZXhwZW5zZXMgcGFpZCBsYXN0IHllYXIgZm9yIGNvbGxlZ2UsIHdlIG1heSBiZSBhYmxlIHRvIGNsYWltIHRoZSBBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IChBT1RDKSBvbiB5b3VyIGJlaGFsZi4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCByZXR1cm5zIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIEFPVEMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPlR1aXRpb24gU3RhdGVtZW50czwvc3Ryb25nPiAoRm9ybSAxMDk4LVQpIGZvciBlYWNoIHN0dWRlbnQgZm9yIHdob20gdGhlIGV4cGVuc2VzIHdlcmUgcGFpZC4gVGhpcyBmb3JtIGlzIHR5cGljYWxseSBwcm92aWRlZCBieSB0aGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24uPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVjZWlwdHMgYW5kIFJlY29yZHM8L3N0cm9uZz4gZm9yIHJlbGF0ZWQgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgbm90IGNvdmVyZWQgYnkgdGhlIHR1aXRpb24gc3RhdGVtZW50LiBUaGlzIGluY2x1ZGVzIGJvb2tzLCBzdXBwbGllcywgYW5kIGVxdWlwbWVudCByZXF1aXJlZCBmb3IgZW5yb2xsbWVudCBvciBhdHRlbmRhbmNlLjwvbGk+XHJcbiAgICAgIDxsaT5Db25maXJtYXRpb24gdGhhdCB0aGUgc3R1ZGVudCB3YXMgZW5yb2xsZWQgPHN0cm9uZz5hdCBsZWFzdCBoYWxmLXRpbWU8L3N0cm9uZz4gaW4gYSBwcm9ncmFtIGxlYWRpbmcgdG8gYSBkZWdyZWUsIGNlcnRpZmljYXRlLCBvciBvdGhlciByZWNvZ25pemVkIGVkdWNhdGlvbmFsIGNyZWRlbnRpYWwuPC9saT5cclxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50IGNvbmZpcm1pbmcgdGhhdCB0aGUgZXhwZW5zZXMgd2VyZSBmb3IgdGhlIDxzdHJvbmc+Zmlyc3QgZm91ciB5ZWFyczwvc3Ryb25nPiBvZiBwb3N0LXNlY29uZGFyeSBlZHVjYXRpb24uPC9saT5cclxuICAgICAgPGxpPkV2aWRlbmNlIHRvIHNob3cgdGhhdCB0aGUgc3R1ZGVudCBoYWQgbm90IGNsYWltZWQgdGhlIEFPVEMgKG9yIHRoZSBmb3JtZXIgSG9wZSBjcmVkaXQpIGZvciBtb3JlIHRoYW4gZm91ciB0YXggeWVhcnMuPC9saT5cclxuICAgICAgPGxpPlByb29mIHRoYXQgbmVpdGhlciB0aGUgc3R1ZGVudCBub3IgdGhlIGNsYWltYW50IChpZiBub3QgdGhlIHN0dWRlbnQpIGlzIGEgbm9ucmVzaWRlbnQgYWxpZW4gZm9yIHRheCBwdXJwb3Nlcy48L2xpPlxyXG4gICAgICA8bGk+QSBzdGF0ZW1lbnQgaW5kaWNhdGluZyBpZiBhbnkgZmVsb255IGRydWcgY29udmljdGlvbnMgd2VyZSByZWNlaXZlZCBieSB0aGUgc3R1ZGVudCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIGlzIGVzc2VudGlhbCBhcyBzdWNoIGNvbnZpY3Rpb25zIGRpc3F1YWxpZnkgdGhlIHN0dWRlbnQgZnJvbSBjbGFpbWluZyB0aGUgQU9UQy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBnYXRoZXIgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIE9uY2Ugd2UgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiwgd2Ugd2lsbCBwcm9jZWVkIHdpdGggdGhlIG1heGltaXphdGlvbiBhbmQgYXBwbGljYXRpb24gb2YgdGhlIEFtZXJpY2FuIE9wcG9ydHVuaXR5IFRheCBDcmVkaXQgdG8geW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTGlmZXRpbWUgTGVhcm5pbmcgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTGlmZXRpbWUgTGVhcm5pbmcgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91LCB5b3VyIHNwb3VzZSwgb3IgeW91ciBkZXBlbmRlbnRzIGhhdmUgcGFpZCBmb3IgaGlnaGVyIGVkdWNhdGlvbiBsYXN0IHllYXIuIFRoaXMgbWFrZXMgeW91IHBvdGVudGlhbGx5IGVsaWdpYmxlIGZvciB0aGUgTGlmZXRpbWUgTGVhcm5pbmcgVGF4IENyZWRpdCwgd2hpY2ggY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgdGF4IHNhdmluZ3MuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHlvdXIgZWxpZ2liaWxpdHkgYW5kIGNhbGN1bGF0ZSB0aGUgY3JlZGl0LCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkZvcm0gMTA5OC1UIGZyb20gZWFjaCBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiBhdHRlbmRlZCBieSB5b3UsIHlvdXIgc3BvdXNlLCBvciBkZXBlbmRlbnRzLiBUaGlzIGZvcm0gc2hvd3MgdGhlIGFtb3VudHMgcGFpZCBmb3IgdHVpdGlvbiBhbmQgcmVsYXRlZCBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT5SZWNlaXB0cyBvciBiYW5rIHN0YXRlbWVudHMgc2hvd2luZyBwYXltZW50cyBtYWRlIGZvciB0dWl0aW9uLCBmZWVzLCBib29rcywgc3VwcGxpZXMsIGFuZCBlcXVpcG1lbnQgcmVxdWlyZWQgZm9yIHlvdXIgY291cnNlcy4gUGxlYXNlIG5vdGUgdGhhdCByb29tIGFuZCBib2FyZCwgaW5zdXJhbmNlLCBtZWRpY2FsIGV4cGVuc2VzLCBhbmQgdHJhbnNwb3J0YXRpb24gYXJlIG5vdCBxdWFsaWZpZWQgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGFueSBzY2hvbGFyc2hpcHMsIGdyYW50cywgb3Igb3RoZXIgdGF4LWZyZWUgZWR1Y2F0aW9uYWwgYXNzaXN0YW5jZSByZWNlaXZlZC4gVGhpcyBoZWxwcyB1cyBkZXRlcm1pbmUgdGhlIG5ldCBhbW91bnQgb2YgcXVhbGlmaWVkIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGFueSByZWNvcmRzIG9mIGZlbG9uaWVzIChhcyBpbmRpdmlkdWFscyB3aXRoIGZlbG9ueSBkcnVnIGNvbnZpY3Rpb25zIGFyZSBub3QgZWxpZ2libGUgZm9yIHRoaXMgY3JlZGl0KS48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IG9mIGV4cGVuc2VzIHBhaWQgd2l0aCBkaXN0cmlidXRlZCBlYXJuaW5ncyBmcm9tIGEgNTI5IHBsYW4sIGlmIGFueS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGFzIGl0IG1heSBhZmZlY3QgdGhlIGNyZWRpdCBjYWxjdWxhdGlvbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGZvciB0aGUgdGF4IHllYXIgd2UgYXJlIHByZXBhcmluZyB5b3VyIHJldHVybiBmb3IuIEdhdGhlcmluZyBhbmQgdmVyaWZ5aW5nIHRoZXNlIGRvY3VtZW50cyBlYXJseSBpbiB0aGUgcHJvY2VzcyB3aWxsIHN0cmVhbWxpbmUgeW91ciB0YXggcHJlcGFyYXRpb24gYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgbWF4aW11bSBiZW5lZml0IGxlZ2FsbHkgYXZhaWxhYmxlIHRvIHlvdS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpbGwgZ3JlYXRseSBhaWQgaW4gdGhlIGVmZmljaWVudCBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWFybmVkIEluY29tZSBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFYXJuZWQgSW5jb21lIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkJhc2VkIG9uIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSBlYXJuZWQgbW9uZXkgZnJvbSB3b3JrIGFuZCBoYXZlIGEgcmVsYXRpdmVseSBsb3cgdG8gbW9kZXJhdGUgaW5jb21lIGxhc3QgeWVhciwgeW91IG1heSBiZSBlbGlnaWJsZSBmb3IgdGhlIEVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdCAoRUlUQykuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgRUlUQyBjbGFpbSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBFYXJuZWQgSW5jb21lOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgVy0yIGZvcm1zIGlmIHlvdSB3ZXJlIGVtcGxveWVkIGJ5IHNvbWVvbmUgZWxzZSwgb3IgYSBzdW1tYXJ5IG9mIGluY29tZSBhbmQgZXhwZW5zZXMgaWYgeW91IHdlcmUgc2VsZi1lbXBsb3llZCBvciByYW4gYSBidXNpbmVzcyBvciBmYXJtLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKTo8L3N0cm9uZz4gQ29waWVzIG9mIFNvY2lhbCBTZWN1cml0eSBjYXJkcyBmb3IgeW91LCB5b3VyIHNwb3VzZSAoaWYgZmlsaW5nIGpvaW50bHkpLCBhbmQgYW55IGRlcGVuZGVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZXNpZGVuY3k6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gdGhhdCB5b3VyIGNoaWxkKHJlbikgbGl2ZWQgd2l0aCB5b3UgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgZm9yIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSB0YXggeWVhciwgaWYgYXBwbGljYWJsZS4gVGhpcyBjYW4gaW5jbHVkZSBzY2hvb2wgcmVjb3JkcywgbWVkaWNhbCByZWNvcmRzLCBvciBhIHNpZ25lZCBsZXR0ZXIgZnJvbSBhIGxhbmRsb3JkIG9yIGFub3RoZXIgdGhpcmQgcGFydHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IEluY29tZSBTdGF0ZW1lbnQ6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHBsZWFzZSBwcm92aWRlIGEgc3RhdGVtZW50IG9mIGFueSBpbnZlc3RtZW50IGluY29tZSB5b3UgcmVjZWl2ZWQsIGFzIHRoaXMgY2FuIGFmZmVjdCBFSVRDIGVsaWdpYmlsaXR5LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmlsaW5nIFN0YXR1cyBWZXJpZmljYXRpb246PC9zdHJvbmc+IENvbmZpcm0geW91ciBmaWxpbmcgc3RhdHVzIHRvIGVuc3VyZSBwcm9wZXIgRUlUQyBjYWxjdWxhdGlvbi4gVGhpcyBjb3VsZCBiZSBTaW5nbGUsIE1hcnJpZWQgRmlsaW5nIEpvaW50bHksIEhlYWQgb2YgSG91c2Vob2xkLCBldGMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFRheCBSZXR1cm46PC9zdHJvbmc+IElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCB5ZWFyIHlvdSBhcmUgY2xhaW1pbmcgRUlUQyBvciBpZiB5b3Ugd2VyZSBlbGlnaWJsZSBmb3IgRUlUQyBpbiB0aGUgcHJldmlvdXMgdGF4IHllYXIsIHBsZWFzZSBwcm92aWRlIGEgY29weSBvZiB5b3VyIGxhc3QgeWVhcidzIHRheCByZXR1cm4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXJseSBsZWdpYmxlIGFuZCBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCBFSVRDIGNsYWltLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmV0aXJlbWVudCBTYXZpbmdzIENvbnRyaWJ1dGlvbiBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJldGlyZW1lbnQgU2F2aW5ncyBDb250cmlidXRpb24gQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RpY2VkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBjb250cmlidXRpbmcgdG8gYSByZXRpcmVtZW50IHBsYW4gaW4gdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgXCJSZXRpcmVtZW50IFNhdmluZ3MgQ29udHJpYnV0aW9uIENyZWRpdCxcIiB3ZSByZXF1aXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGNvbnRyaWJ1dGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIHRoZSByZXRpcmVtZW50IHBsYW5zIHlvdSd2ZSBjb250cmlidXRlZCB0byAoZS5nLiwgSVJBLCA0MDEoayksIGV0Yy4pOjwvbGk+XHJcbiAgICAgIDx1bD5cclxuICAgICAgICA8bGk+TmFtZSBvZiB0aGUgcGxhbihzKTwvbGk+XHJcbiAgICAgICAgPGxpPlR5cGUgb2YgcGxhbihzKTwvbGk+XHJcbiAgICAgICAgPGxpPkNvbnRyaWJ1dGVkIGFtb3VudCB0byBlYWNoIHBsYW48L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgICA8bGk+WW91ciBmaWxpbmcgc3RhdHVzIChTaW5nbGUsIE1hcnJpZWQgRmlsaW5nIEpvaW50bHksIGV0Yy4pPC9saT5cclxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgKGUuZy4sIGFjY291bnQgc3RhdGVtZW50cywgRm9ybSA1NDk4LCB0cmFuc2FjdGlvbiBzdW1tYXJpZXMpPC9saT5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiBvZiB5b3VyIGFnZSwgdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5PC9saT5cclxuICAgICAgPGxpPkFueSBub3RpY2VzIG9yIHN0YXRlbWVudHMgZnJvbSB0aGUgcGxhbiBhZG1pbmlzdHJhdG9yIHJlZ2FyZGluZyBub24tZGVkdWN0aWJsZSBjb250cmlidXRpb25zPC9saT5cclxuICAgICAgPGxpPkZvciBtYXJyaWVkIGZpbGluZyBqb2ludGx5LCBzaW1pbGFyIGRldGFpbHMgZm9yIHlvdXIgc3BvdXNl4oCZcyBjb250cmlidXRpb25zLCBpZiBhcHBsaWNhYmxlPC9saT5cclxuICAgIDwvb2w+ICBcclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhlIGluZm9ybWF0aW9uIGlzIHN1Ym1pdHRlZCBpbiBhIHRpbWVseSBtYW5uZXIgdG8gZmFjaWxpdGF0ZSBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRldGFpbHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD4gXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRXhjZXNzIFNvY2lhbCBTZWN1cml0eSBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5Zb3VyIHJlc3BvbnNlIGluZGljYXRlcyB0aGF0IGxhc3QgeWVhciwgeW91IHdvcmtlZCBmb3IgdHdvIG9yIG1vcmUgZW1wbG95ZXJzIGFuZCBoYWQgYSB0b3RhbCBhbW91bnQgb2YgU29jaWFsIFNlY3VyaXR5IHRheGVzIHdpdGhoZWxkIGZyb20geW91ciBwYXljaGVja3MgdGhhdCBleGNlZWRlZCB0aGUgbGltaXQgZm9yIHRoZSB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIHBvdGVudGlhbCBFeGNlc3MgU29jaWFsIFNlY3VyaXR5IENyZWRpdCBhbmQgZW5zdXJlIHByb3BlciBhZGp1c3RtZW50IG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlctMiBGb3JtcyBmcm9tIEFsbCBFbXBsb3llcnM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGNvcGllcyBvZiBXLTIgZm9ybXMgZnJvbSBhbGwgeW91ciBlbXBsb3llcnMgZm9yIHRoZSB0YXggeWVhciBpbiBxdWVzdGlvbi4gVGhpcyBpcyB2aXRhbCB0byBjYWxjdWxhdGUgdGhlIGV4YWN0IGFtb3VudCBvZiBTb2NpYWwgU2VjdXJpdHkgdGF4IHdpdGhoZWxkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgUGF5IFN0dWJzOjwvc3Ryb25nPiBJZiBwb3NzaWJsZSwgaW5jbHVkZSB5b3VyIGZpbmFsIHBheSBzdHVicyBvZiB0aGUgeWVhciBmcm9tIGVhY2ggZW1wbG95ZXIuIFRoaXMgY2FuIGhlbHAgdmVyaWZ5IHRoZSB0b3RhbCBlYXJuaW5ncyBhbmQgdGhlIGFtb3VudCBvZiBTb2NpYWwgU2VjdXJpdHkgdGF4IHdpdGhoZWxkLCBlc3BlY2lhbGx5IGlmIGFueSBkaXNjcmVwYW5jaWVzIGFyaXNlIHdpdGggdGhlIFctMiBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBFbnN1cmUgeW91ciBmdWxsIG5hbWUsIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTiksIGFuZCBjdXJyZW50IGFkZHJlc3MgYXJlIGNvcnJlY3QgYW5kIHVwZGF0ZWQgZm9yIGFjY3VyYXRlIGZpbGluZy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbmZpcm1hdGlvbiBMZXR0ZXIgKElmIEF2YWlsYWJsZSk6PC9zdHJvbmc+IElmIHlvdSd2ZSByZWNlaXZlZCBhbnkgY29uZmlybWF0aW9uIGZyb20gdGhlIElSUyBvciB5b3VyIGVtcGxveWVycyByZWdhcmRpbmcgZXhjZXNzIFNvY2lhbCBTZWN1cml0eSBjb250cmlidXRpb25zLCBwbGVhc2UgaW5jbHVkZSB0aGVzZSBjb21tdW5pY2F0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjb21wbGV0aW5nIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSBhbnkgcmVmdW5kIG9mIGV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgdGF4ZXMgcGFpZC4gUGxlYXNlIHNlbmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgdG8gdXMuIFlvdXIgcHJvbXB0IGNvb3BlcmF0aW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZmFjaWxpdGF0ZSBhIHNtb290aCB0YXggZmlsaW5nIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlByZW1pdW0gVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUHJlbWl1bSBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSBvciBhIGZhbWlseSBtZW1iZXIgZW5yb2xsZWQgaW4gYSBoZWFsdGggaW5zdXJhbmNlIHBsYW4gdGhyb3VnaCB0aGUgTWFya2V0cGxhY2UgbGFzdCB5ZWFyLiBUaGlzIG1heSBtYWtlIHlvdSBlbGlnaWJsZSBmb3IgdGhlIFByZW1pdW0gVGF4IENyZWRpdCwgd2hpY2ggY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgc2F2aW5ncyBvbiB5b3VyIHRheCBiaWxsLjwvcD5cclxuICAgIDxwPlRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgUHJlbWl1bSBUYXggQ3JlZGl0IGFuZCBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvcnJlY3RseSBmaWxlZCwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGU6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5NS1BLCBIZWFsdGggSW5zdXJhbmNlIE1hcmtldHBsYWNlIFN0YXRlbWVudDwvc3Ryb25nPjogVGhpcyBmb3JtIGlzIGNydWNpYWwgYXMgaXQgcHJvdmlkZXMgZGV0YWlscyBvZiB0aGUgaGVhbHRoIGNvdmVyYWdlLCBpbmNsdWRpbmcgdGhlIG1vbnRocyBvZiBjb3ZlcmFnZSBhbmQgdGhlIGFtb3VudCBvZiBwcmVtaXVtIHBhaWQuIElmIHlvdSBvciBhbnkgZmFtaWx5IG1lbWJlciB3YXMgZW5yb2xsZWQgaW4gZGlmZmVyZW50IHBsYW5zLCBwbGVhc2UgcHJvdmlkZSBhIEZvcm0gMTA5NS1BIGZvciBlYWNoIHBsYW4uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgSW5mb3JtYXRpb248L3N0cm9uZz46IFBsZWFzZSBwcm92aWRlIGFsbCBzb3VyY2VzIG9mIGluY29tZSB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIGhvdXNlaG9sZCBpbmNvbWUuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgVy0yIGZvcm1zLCAxMDk5IGZvcm1zLCBhbmQgYW55IG90aGVyIGRvY3VtZW50YXRpb24gZGVtb25zdHJhdGluZyBpbmNvbWUgcmVjZWl2ZWQgdGhyb3VnaG91dCB0aGUgeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZhbWlseSBTaXplIGFuZCBIb3VzZWhvbGQgSW5mb3JtYXRpb248L3N0cm9uZz46IENvbmZpcm0gdGhlIG51bWJlciBvZiBkZXBlbmRlbnRzIGFuZCBhbnkgY2hhbmdlcyBpbiB5b3VyIGhvdXNlaG9sZCBsYXN0IHllYXIsIGFzIHRoaXMgY291bGQgYWZmZWN0IHlvdXIgZWxpZ2liaWxpdHkgYW5kIHRoZSBhbW91bnQgb2YgdGhlIGNyZWRpdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFkdmFuY2VkIFByZW1pdW0gVGF4IENyZWRpdCAoQVBUQykgUmVwYXltZW50IEluZm9ybWF0aW9uPC9zdHJvbmc+LCBpZiBhcHBsaWNhYmxlOiBJZiB5b3UgcmVjZWl2ZWQgYW4gYWR2YW5jZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtIHRheCBjcmVkaXQsIHdlIG5lZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIHBheW1lbnRzIHRvIHJlY29uY2lsZSB0aGUgYW1vdW50IG9uIHlvdXIgcmV0dXJuLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIGFzIHNvb24gYXMgcG9zc2libGUgdG8gYXZvaWQgYW55IGRlbGF5cyBpbiBwcm9jZXNzaW5nIHlvdXIgdGF4IHJldHVybi4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IG91ciBvZmZpY2UuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBzZXJ2aW5nIHlvdSBhbmQgZW5zdXJpbmcgeW91IHJlY2VpdmUgYWxsIHRoZSB0YXggYmVuZWZpdHMgeW91IGFyZSBlbnRpdGxlZCB0by48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTmV0IEludmVzdG1lbnQgSW5jb21lIFRheFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTmV0IEludmVzdG1lbnQgSW5jb21lIFRheFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3VyIGluY29tZSB0aGlzIHllYXIgaW5jbHVkZXMgc2lnbmlmaWNhbnQgYW1vdW50cyBmcm9tIGludmVzdG1lbnRzLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIE5ldCBJbnZlc3RtZW50IEluY29tZSBUYXgsIGl0IGlzIGVzc2VudGlhbCB0aGF0IHdlIGdhdGhlciBjb21wcmVoZW5zaXZlIGRldGFpbHMgcmVnYXJkaW5nIHlvdXIgaW52ZXN0bWVudCBpbmNvbWUuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbiBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5JbnRlcmVzdCBJbmNvbWUgU3RhdGVtZW50czo8L3N0cm9uZz4gRG9jdW1lbnRzIHN1Y2ggYXMgMTA5OS1JTlQgb3Igc2ltaWxhciBmb3JtcyBzaG93aW5nIGludGVyZXN0IGVhcm5lZC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGl2aWRlbmQgSW5jb21lIFN0YXRlbWVudHM6PC9zdHJvbmc+IERvY3VtZW50cyBzdWNoIGFzIDEwOTktRElWIG9yIHNpbWlsYXIgZm9ybXMgZGV0YWlsaW5nIGRpdmlkZW5kIGluY29tZSByZWNlaXZlZC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+Q2FwaXRhbCBHYWlucyBSZWNvcmRzOjwvc3Ryb25nPiBTYWxlcyByZWNlaXB0cyBvciBicm9rZXIgc3RhdGVtZW50cyBzaG93aW5nIHByb2NlZWRzIGZyb20gdGhlIHNhbGUgb2YgYXNzZXRzLCBhbG9uZyB3aXRoIHB1cmNoYXNlIGRvY3VtZW50YXRpb24gdG8gY2FsY3VsYXRlIGdhaW5zIG9yIGxvc3Nlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UmVudGFsIGFuZCBSb3lhbHR5IEluY29tZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIG9mIGluY29tZSBhbmQgYXNzb2NpYXRlZCBleHBlbnNlcyBmcm9tIHJlbnRhbCBwcm9wZXJ0aWVzIG9yIHJveWFsdGllcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+Tm9uLVF1YWxpZmllZCBBbm51aXRpZXMgU3RhdGVtZW50czo8L3N0cm9uZz4gWWVhci1lbmQgc3RhdGVtZW50cyBmb3IgYW55IG5vbi1xdWFsaWZpZWQgYW5udWl0eSBjb250cmFjdHMgc2hvd2luZyBkaXN0cmlidXRpb25zIHJlY2VpdmVkLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Gb3JtIDg5NjA6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgYW55IHByaW9yIHllYXIgRm9ybSA4OTYwIHlvdSBoYXZlIGZpbGVkIGZvciBOZXQgSW52ZXN0bWVudCBJbmNvbWUgVGF4LCB3aGljaCBjYW4gcHJvdmlkZSBhIGJhc2lzIGZvciBlc3RpbWF0ZXMgYW5kIHBsYW5uaW5nLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+RW5zdXJpbmcgd2UgaGF2ZSBhbGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHdpbGwgbm90IG9ubHkgc3RyZWFtbGluZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzIGJ1dCBhbHNvIGhlbHAgaW4gbGV2ZXJhZ2luZyBwb3RlbnRpYWwgdGF4LXNhdmluZyBvcHBvcnR1bml0aWVzIHJlbGF0ZWQgdG8gaW52ZXN0bWVudCBpbmNvbWUuIFBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBpZiB5b3UgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyBhbnkgb2YgdGhlIGFib3ZlIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZGRpdGlvbmFsIE1lZGljYXJlIFRheFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQWRkaXRpb25hbCBNZWRpY2FyZSBUYXhcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5kaWNhdGluZyB0aGF0IHlvdXIgaW5jb21lIG1heSBleGNlZWQgdGhlIElSUyB0aHJlc2hvbGRzIGZvciB0aGUgQWRkaXRpb25hbCBNZWRpY2FyZSBUYXggZm9yIHlvdXIgZmlsaW5nIHN0YXR1cy4gSW4gb3JkZXIgdG8gYWNjdXJhdGVseSBhc3Nlc3MgYW5kIHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiBvZiB5b3VyIGZpbGluZyBzdGF0dXMgZm9yIHRoZSB0YXggeWVhciAoTWFycmllZCBGaWxpbmcgSm9pbnRseSwgTWFycmllZCBGaWxpbmcgU2VwYXJhdGVseSwgU2luZ2xlLCBIZWFkIG9mIEhvdXNlaG9sZCwgUXVhbGlmeWluZyBTdXJ2aXZpbmcgU3BvdXNlKS48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvZiBhbGwgc291cmNlcyBvZiBpbmNvbWUgZm9yIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzpcclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+Vy0yIEZvcm1zIGZyb20gYWxsIGVtcGxveWVycy48L2xpPlxyXG4gICAgICAgICAgPGxpPjEwOTkgRm9ybXMgKGlmIGFwcGxpY2FibGUpLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICA8bGk+MTA5OS1NSVNDIGZvciBpbmRlcGVuZGVudCBjb250cmFjdG9ycy48L2xpPlxyXG4gICAgICAgICAgICAgIDxsaT4xMDk5LUlOVCBmb3IgaW50ZXJlc3QgZWFybmluZ3MuPC9saT5cclxuICAgICAgICAgICAgICA8bGk+MTA5OS1ESVYgZm9yIGRpdmlkZW5kcy48L2xpPlxyXG4gICAgICAgICAgICAgIDxsaT5Bbnkgb3RoZXIgMTA5OSBmb3JtcyByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9mIGFueSBvdGhlciBpbmNvbWUgKGUuZy4sIGZvcmVpZ24gaW5jb21lLCByZW50YWwgaW5jb21lKS48L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiBhbnkgZGVkdWN0aW9ucyBvciBleGNsdXNpb25zIHRvIGluY29tZSB0aGF0IHlvdSBpbnRlbmQgdG8gY2xhaW0gKGUuZy4sIElSQSBjb250cmlidXRpb25zLCBzdHVkZW50IGxvYW4gaW50ZXJlc3QpLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+V2UgYWxzbyByZW1pbmQgeW91IHRoYXQgaWYgeW91IGFuZC9vciB5b3VyIHNwb3VzZSBhcmUgc2VsZi1lbXBsb3llZCwgYWRkaXRpb25hbCBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMgd2lsbCBiZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIHlvdXIgbmV0IGVhcm5pbmdzIGFuZCBwb3RlbnRpYWwgQWRkaXRpb25hbCBNZWRpY2FyZSBUYXggb2JsaWdhdGlvbnMuPC9wPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucyBhbmQgYWNjdXJhdGVseSBjYWxjdWxhdGluZyBhbnkgcG90ZW50aWFsIEFkZGl0aW9uYWwgTWVkaWNhcmUgVGF4IGxpYWJpbGl0aWVzLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTmFubnkgVGF4XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJOYW5ueSBUYXhcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXhlcyBhbmQgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgZW1wbG95aW5nIGhvdXNlaG9sZCBoZWxwIHN1Y2ggYXMgYSBuYW5ueSwgaG91c2VrZWVwZXIsIG9yIGdhcmRlbmVyLiBUbyBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRoZSBzby1jYWxsZWQgXCJOYW5ueSBUYXhcIiByZWd1bGF0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkNvbXBsZXRlIG5hbWUsIGFkZHJlc3MsIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9mIHRoZSBlbXBsb3llZS48L2xpPlxyXG4gICAgICAgIDxsaT5Ub3RhbCBhbW91bnQgcGFpZCB0byB0aGUgZW1wbG95ZWUgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgYW1vdW50cyB3aXRoaGVsZCBmcm9tIHRoZSBlbXBsb3llZSdzIHBheSBmb3IgdGF4ZXMsIGluY2x1ZGluZyBGZWRlcmFsIEluY29tZSBUYXgsIFNvY2lhbCBTZWN1cml0eSwgYW5kIE1lZGljYXJlIFRheGVzLjwvbGk+XHJcbiAgICAgICAgPGxpPkNvcGllcyBvZiBhbnkgZW1wbG95bWVudCBjb250cmFjdHMgb3IgYWdyZWVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBhbnkgZW1wbG95ZXIgY29udHJpYnV0aW9ucyB0byBTb2NpYWwgU2VjdXJpdHksIE1lZGljYXJlLCBhbmQgd2l0aGhlbGQgaW5jb21lIHRheGVzIChpZiBhcHBsaWNhYmxlKS48L2xpPlxyXG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIHRoYXQgc3VwcG9ydHMgdGhlIGVtcGxveW1lbnQgc3RhdHVzIChlLmcuLCBTY2hlZHVsZSBIIGZvcm0pLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBvdGhlciByZWxldmFudCB0YXggZG9jdW1lbnRzIG9yIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGVtcGxveW1lbnQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgdGF4IG9ibGlnYXRpb25zIGFuZCBwb3RlbnRpYWxseSBhdm9pZGluZyBwZW5hbHRpZXMgZm9yIG5vbi1jb21wbGlhbmNlLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIG9yIGNvbnRhY3QgdXMgaWYgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbi48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBoZWxwIHlvdSBuYXZpZ2F0ZSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBFYXJuZWQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIEVhcm5lZCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UndmUgZWFybmVkIGluY29tZSBmcm9tIGZvcmVpZ24gc291cmNlcyB0aGlzIHBhc3QgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgYW5kIHBvdGVudGlhbGx5IHRha2UgYWR2YW50YWdlIG9mIHRoZSBGb3JlaWduIEVhcm5lZCBJbmNvbWUgRXhjbHVzaW9uIG9yIGNyZWRpdCwgd2UnbGwgbmVlZCBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGFuZCBpbmZvcm1hdGlvbiBmcm9tIHlvdS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgZm9yZWlnbiBlYXJuZWQgaW5jb21lLiBUaGlzIGluY2x1ZGVzIGFueSB3YWdlcywgc2FsYXJpZXMsIG9yIG90aGVyIGNvbXBlbnNhdGlvbiByZWNlaXZlZCBmcm9tIHNlcnZpY2VzIHBlcmZvcm1lZCB3aGlsZSBsaXZpbmcgYWJyb2FkLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIHlvdXIgZm9yZWlnbiBlYXJuZWQgaW5jb21lLiBUaGlzIGNvdWxkIGJlIGluIHRoZSBmb3JtIG9mIHBheSBzdHVicywgYmFuayBzdGF0ZW1lbnRzIHJlZmxlY3RpbmcgZGlyZWN0IGRlcG9zaXRzLCBvciBlcXVpdmFsZW50IGRvY3VtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiB0aGUgY291bnRyeSBvciBjb3VudHJpZXMgaW4gd2hpY2ggeW91IGVhcm5lZCB0aGlzIGluY29tZS48L2xpPlxyXG4gICAgICAgIDxsaT5EYXRlcyBvZiB5b3VyIHJlc2lkZW5jeSBpbiBlYWNoIGZvcmVpZ24gY291bnRyeS48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgdGF4IHJlc2lkZW5jeSBjZXJ0aWZpY2F0ZXMgb3Igc3RhdGVtZW50cyBmcm9tIGZvcmVpZ24gdGF4IGF1dGhvcml0aWVzLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGZvcmVpZ24gdGF4IHBhaWQsIGluY2x1ZGluZyB0YXggcmV0dXJucyBmaWxlZCBpbiB0aGUgZm9yZWlnbiBjb3VudHJ5LCBpZiBhdmFpbGFibGUuPC9saT5cclxuICAgICAgICA8bGk+UmVjb3JkcyBvZiB5b3VyIFUuUy4gYW5kIGZvcmVpZ24gYWRkcmVzc2VzIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+SW5mb3JtYXRpb24gb24gYW55IHRheCB0cmVhdGllcyBiZXR3ZWVuIHRoZSBVLlMuIGFuZCB0aGUgY291bnRyeSBvciBjb3VudHJpZXMgeW91IHdvcmtlZCBpbi48L2xpPlxyXG4gICAgICAgIDxsaT5BIHNpZ25lZCBGb3JtIDI1NTUgb3IgMjU1NS1FWiwgaWYgeW91IGhhdmUgYWxyZWFkeSBwcmVwYXJlZCB0aGlzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhlc2UgZG9jdW1lbnRzIGFuZCBkZXRhaWxzIGFyZSBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgYmVzdCBhcHByb2FjaCB0byBoYW5kbGUgeW91ciBmb3JlaWduIGVhcm5lZCBpbmNvbWUgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBoYXZlIHRoZXNlIG1hdGVyaWFscyByZWFkeSBhbmQgc2VuZCB0aGVtIHRvIHVzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gYW55IG9mIHRoZSBpdGVtcyByZXF1ZXN0ZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IHdpdGggeW91ciB0YXhlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBIb3VzaW5nIEV4Y2x1c2lvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBIb3VzaW5nIEV4Y2x1c2lvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UndmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBpbmN1cnJpbmcgZWxpZ2libGUgZXhwZW5zZXMgZm9yIHRoZSBGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uIGR1ZSB0byBlYXJuaW5nIGluY29tZSBpbiBhIGZvcmVpZ24gY291bnRyeSBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGV4Y2x1c2lvbiBwb3NzaWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB5b3VyIGN1cnJlbnQgbGVhc2Ugb3IgcmVudGFsIGFncmVlbWVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlV0aWxpdHkgQmlsbHM6PC9zdHJvbmc+IENvcGllcyBvZiB1dGlsaXR5IGJpbGxzIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24gKGV4Y2x1ZGluZyB0ZWxlcGhvbmUgY2hhcmdlcykuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnN1cmFuY2UgRG9jdW1lbnRzOjwvc3Ryb25nPiBEb2N1bWVudHMgcHJvdmluZyBwYXltZW50IG9mIHJlYWwgZXN0YXRlIG9yIHJlbnRhbCBpbnN1cmFuY2UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5PdGhlciBIb3VzaW5nIENvc3RzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBkb2N1bWVudGF0aW9uIGZvciBhbnkgYWRkaXRpb25hbCBlbGlnaWJsZSBob3VzaW5nIGNvc3RzIG5vdCBwcmV2aW91c2x5IG1lbnRpb25lZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZvcmVpZ24gSW5jb21lOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHZlcmlmeWluZyB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZSAoZS5nLiwgcGF5IHN0dWJzLCBiYW5rIHN0YXRlbWVudHMpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TG9jYXRpb24gYW5kIER1cmF0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIHN0YXRlbWVudCBkZXRhaWxpbmcgdGhlIGxvY2F0aW9uIG9mIHlvdXIgZm9yZWlnbiByZXNpZGVuY2UgYW5kIHRoZSBkdXJhdGlvbiBvZiB5b3VyIHN0YXkgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhcmx5IGxlZ2libGUgYW5kIGluIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgZWxlY3Ryb25pY2FsbHkuIFRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoZXNlIGRvY3VtZW50cyBhcmUgZXNzZW50aWFsIGZvciBhIGNvcnJlY3QgYW5kIG9wdGltaXplZCBmaWxpbmcgb2YgeW91ciB0YXggcmV0dXJuLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIEZvcmVpZ24gSG91c2luZyBFeGNsdXNpb24uPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIGFueSBvZiB0aGUgcmVxdWlyZWQgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMgYXQgeW91ciBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBIb3VzaW5nIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBIb3VzaW5nIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byB0aGUgcXVlc3Rpb24gY29uY2VybmluZyBwb3RlbnRpYWwgZWxpZ2liaWxpdHkgZm9yIHRoZSA8c3Ryb25nPkZvcmVpZ24gSG91c2luZyBEZWR1Y3Rpb248L3N0cm9uZz4uIFRoaXMgZGVkdWN0aW9uIGlzIGRlc2lnbmVkIHRvIGhlbHAgbWl0aWdhdGUgdGhlIGhpZ2hlciBjb3N0IG9mIGxpdmluZyBhYnJvYWQgYnkgYWxsb3dpbmcgY2VydGFpbiBob3VzaW5nIGV4cGVuc2VzIHRvIGJlIGRlZHVjdGVkIGZvciB0YXggcHVycG9zZXMuPC9wPlxyXG4gICAgPHA+VG8gcHJvY2VlZCB3aXRoIHlvdXIgdGF4IGZpbGluZyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBkZWR1Y3Rpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50cyByZWxhdGVkIHRvIHlvdXIgaG91c2luZyBleHBlbnNlcyBpbmN1cnJlZCB3aGlsZSB3b3JraW5nIGFicm9hZDo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5SZW50YWwgQWdyZWVtZW50L0xlYXNlOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciByZW50YWwgYWdyZWVtZW50IG9yIGxlYXNlIHRoYXQgc3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgcmVudCBwYWlkIGFuZCB0aGUgcGVyaW9kIG9mIG9jY3VwYW5jeS48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+VXRpbGl0eSBCaWxsczo8L3N0cm9uZz4gQ29waWVzIG9mIHV0aWxpdHkgYmlsbHMgZm9yIHRoZSBwZXJpb2QgeW91IGFyZSBjbGFpbWluZyB0aGUgZGVkdWN0aW9uLiBUaGlzIGluY2x1ZGVzIGVsZWN0cmljaXR5LCB3YXRlciwgYW5kIGdhcywgYnV0IGV4Y2x1ZGVzIHRlbGVwaG9uZSBjaGFyZ2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5SZWFsIEVzdGF0ZSBJbnN1cmFuY2U6PC9zdHJvbmc+IERvY3VtZW50IHByb29mIG9mIGFueSByZWFsIGVzdGF0ZSBpbnN1cmFuY2UgcHJlbWl1bXMgcGFpZCBmb3IgeW91ciBmb3JlaWduIGhvdXNpbmcuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPk90aGVyIEVsaWdpYmxlIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBpbnZvaWNlcyBmb3IgYW55IGFkZGl0aW9uYWwgZWxpZ2libGUgbGl2aW5nIGV4cGVuc2VzIG5vdCBjb3ZlcmVkIGFib3ZlLiBQbGVhc2Ugbm90ZSwgdG8gcXVhbGlmeSwgdGhlc2UgZXhwZW5zZXMgbXVzdCBiZSBkaXJlY3RseSByZWxhdGVkIHRvIHlvdXIgZm9yZWlnbiBob3VzaW5nIGFuZCBub3QgY292ZXJlZCB1bmRlciB0aGUgYmFzZSBhbW91bnQgZXhlbXB0aW9uLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Gb3JlaWduIEVhcm5lZCBJbmNvbWU6PC9zdHJvbmc+IFZlcmlmaWNhdGlvbiBvZiB5b3VyIGVhcm5lZCBpbmNvbWUgd2hpbGUgd29ya2luZyBhYnJvYWQsIGFzIHRoZSBkZWR1Y3Rpb24gaXMgdGllZCB0byBjZXJ0YWluIGluY29tZSBsaW1pdGF0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPldlIHVuZGVyc3RhbmQgdGhpcyBtYXkgaW52b2x2ZSBnYXRoZXJpbmcgc2V2ZXJhbCBkb2N1bWVudHMsIGJ1dCBlbnN1cmluZyB3ZSBoYXZlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBtYXhpbWl6aW5nIHlvdXIgcG90ZW50aWFsIGRlZHVjdGlvbnMgYW5kIHJlbWFpbmluZyBjb21wbGlhbnQgd2l0aCB0YXggcmVndWxhdGlvbnMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHN1Ym1pdCB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBvciBjb250YWN0IHVzIHRvIGRpc2N1c3MgYW55IGNoYWxsZW5nZXMgeW91IG1heSBmYWNlIGluIG9idGFpbmluZyB0aGVtLiBPdXIgdGVhbSBpcyBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkZvcmVpZ24gVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIHJlYWNoaW5nIG91dCB0byBnYXRoZXIgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciBjbGFpbWluZyB5b3VyIEZvcmVpZ24gVGF4IENyZWRpdCwgYXMgaW5kaWNhdGVkIGJ5IHlvdXIgYWZmaXJtYXRpdmUgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSBwYWlkIHRheGVzIHRvIGEgZm9yZWlnbiBjb3VudHJ5IG9uIGVhcm5lZCBpbmNvbWUgdGhlcmUuIFRvIHByb3Blcmx5IGNhbGN1bGF0ZSBhbmQgYXBwbHkgdGhpcyBjcmVkaXQgdG8geW91ciBVLlMuIHRheCByZXR1cm4sIHdlIHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkVhcm5lZCBJbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYW55IGRvY3VtZW50cyB0aGF0IHZlcmlmeSB0aGUgYW1vdW50IG9mIGluY29tZSBlYXJuZWQgaW4gdGhlIGZvcmVpZ24gY291bnRyeS4gVGhpcyBtYXkgaW5jbHVkZSwgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBwYXkgc3R1YnMsIFctMiBmb3JtcyBmcm9tIGZvcmVpZ24gZW1wbG95ZXJzLCBvciBhbnkgb2ZmaWNpYWwgaW5jb21lIHN0YXRlbWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBUYXggUGFpZDo8L3N0cm9uZz4gVG8gY2xhaW0gdGhlIEZvcmVpZ24gVGF4IENyZWRpdCwgZG9jdW1lbnRhdGlvbiBzaG93aW5nIHRoZSBhbW91bnQgb2YgdGF4IHBhaWQgdG8gdGhlIGZvcmVpZ24gZ292ZXJubWVudCBpcyByZXF1aXJlZC4gQWNjZXB0YWJsZSBmb3JtcyBvZiBldmlkZW5jZSBpbmNsdWRlIGZvcmVpZ24gdGF4IHJldHVybihzKSwgd2l0aGhvbGRpbmcgc3RhdGVtZW50cywgb3IgYW55IG9mZmljaWFsIHRheCByZWNlaXB0cyBwcm92aWRlZCBieSB0aGUgZm9yZWlnbiB0YXggYXV0aG9yaXR5LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyOjwvc3Ryb25nPiBZb3VyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgb3IgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyLCBmb3IgYWNjdXJhdGUgcHJvY2Vzc2luZyBvZiB0aGUgdGF4IGNyZWRpdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIEZvcmVpZ24gVGF4Ojwvc3Ryb25nPiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgdHlwZSBvZiB0YXggcGFpZCB0byB0aGUgZm9yZWlnbiBjb3VudHJ5IChpbmNvbWUgdGF4LCBzYWxlcyB0YXgsIGV0Yy4pLCBpbmNsdWRpbmcgd2hldGhlciBpdCB3YXMgYSBmZWRlcmFsLCBzdGF0ZS9wcm92aW5jaWFsLCBvciBsb2NhbCB0YXguPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZXNpZGVuY3kgKElmIEFwcGxpY2FibGUpOjwvc3Ryb25nPiBJZiB5b3VyIGNsYWltIGRlcGVuZHMgb24gcmVzaWRlbmN5IHN0YXR1cyBpbiB0aGUgZm9yZWlnbiBjb3VudHJ5LCBwbGVhc2UgcHJvdmlkZSBwcm9vZiBvZiByZXNpZGVuY3kgZm9yIHRoZSByZWxldmFudCB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gQWRkcmVzcyAoSWYgQXBwbGljYWJsZSk6PC9zdHJvbmc+IElmIHlvdSBtYWludGFpbmVkIGEgcmVzaWRlbmNlIG91dHNpZGUgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgZHVyaW5nIHRoZSB0YXggeWVhciwgcGxlYXNlIHByb3ZpZGUgdGhlIGFkZHJlc3MuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBlbnN1cmluZyB5b3VyIHRheCByZXR1cm5zIGFyZSBhcyBiZW5lZmljaWFsIHRvIHlvdXIgc2l0dWF0aW9uIGFzIGFsbG93ZWQgYnkgbGF3IGFuZCBmb3IgcHJldmVudGluZyBhbnkgdW5uZWNlc3NhcnkgZGVsYXlzLjwvcD5cclxuICAgIDxwPlBsZWFzZSB1cGxvYWQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiB0byBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgZW1haWwgaXQgdG8gdXMgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRyYWRpdGlvbmFsIElSQSBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRyYWRpdGlvbmFsIElSQSBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIG5vdGVkIHlvdXIgaW5kaWNhdGlvbiBvZiBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgYmVuZWZpY2lhbCB0YXggZmlsaW5nLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhYm91dCB5b3VyIFRyYWRpdGlvbmFsIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9ucyB5b3UgbWF5IGhhdmUgdGFrZW46PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgVHJhZGl0aW9uYWwgSVJBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMgdG8gYWNjdXJhdGVseSByZXBvcnQgd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIHNwZWNpZnlpbmcgdGhlIGNvbnRyaWJ1dGlvbnMgbWFkZS48L2xpPlxyXG4gICAgICA8bGk+QW55IGRpc3RyaWJ1dGlvbnMgdGFrZW4gZnJvbSB5b3VyIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkFtb3VudCBvZiBlYWNoIGRpc3RyaWJ1dGlvbi48L2xpPlxyXG4gICAgICAgICAgPGxpPkRhdGVzIG9mIGVhY2ggZGlzdHJpYnV0aW9uLjwvbGk+XHJcbiAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIGZvciB0aGVzZSBkaXN0cmlidXRpb25zLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPllvdXIgeWVhci1lbmQgSVJBIHN0YXRlbWVudCBmb3IgdGhlIHRheCB5ZWFyIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgIDxsaT5Bbnkgbm90aWNlcyByZWNlaXZlZCByZWdhcmRpbmcgbm9uLWRlZHVjdGlibGUgY29udHJpYnV0aW9ucywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHlvdXIgdGF4IGxpYWJpbGl0aWVzIG9yIGJlbmVmaXRzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIElSQSBjb250cmlidXRpb25zLCBhbmQgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZmFjaWxpdGF0ZSB0aGUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZmlsaW5nLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjxwPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSb3RoIElSQSBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJvdGggSVJBIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIGNvbnRyaWJ1dGlvbnMgdG8gYSBSb3RoIElSQSBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIgYXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFRvIGVuc3VyZSB3ZSBhY2N1cmF0ZWx5IGNhcHR1cmUgYWxsIHJlbGV2YW50IHRheCBpbmZvcm1hdGlvbiBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemUgeW91ciB0YXggc2l0dWF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIHNwZWNpZmljcyBhYm91dCB5b3VyIFJvdGggSVJBIGNvbnRyaWJ1dGlvbnMgYW5kIGFueSBkaXN0cmlidXRpb25zOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFJvdGggSVJBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPlRoZSBkYXRlcyBvbiB3aGljaCB0aGVzZSBjb250cmlidXRpb25zIHdlcmUgbWFkZS48L2xpPlxyXG4gICAgICA8bGk+T2ZmaWNpYWwgc3RhdGVtZW50cyBvciBkb2N1bWVudGF0aW9uIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIHRoYXQgZGV0YWlsIHRoZXNlIGNvbnRyaWJ1dGlvbnMuPC9saT5cclxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSBkaXN0cmlidXRpb25zLCBzaG91bGQgdGhleSBhcHBseSwgaW5jbHVkaW5nOlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IG9mIGVhY2ggZGlzdHJpYnV0aW9uIHRha2VuIGZyb20gdGhlIFJvdGggSVJBLjwvbGk+XHJcbiAgICAgICAgICA8bGk+VGhlIGRhdGVzIG9mIHRoZXNlIGRpc3RyaWJ1dGlvbnMuPC9saT5cclxuICAgICAgICAgIDxsaT5EaXN0cmlidXRpb24gc3RhdGVtZW50cyBvciByZWxldmFudCBkb2N1bWVudGF0aW9uIGZyb20geW91ciBJUkEgY3VzdG9kaWFuLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPllvdXIgeWVhci1lbmQgYWNjb3VudCBzdGF0ZW1lbnQgZm9yIHRoZSBSb3RoIElSQSBmb3IgdGhlIHRheCB5ZWFyIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgcGVydGluZW50IGluZm9ybWF0aW9uIG9yIG5vdGljZXMgcmVnYXJkaW5nIHlvdXIgUm90aCBJUkEgY29udHJpYnV0aW9ucyBvciBkaXN0cmlidXRpb25zLCBpbmNsdWRpbmcgdGF4IHJlcG9ydGluZyBmb3JtcyBsaWtlIEZvcm0gNTQ5OCBvciBGb3JtIDEwOTktUiwgaWYgcmVjZWl2ZWQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5HYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCBmb3IgYSBjb21wcmVoZW5zaXZlIGFuYWx5c2lzIG9mIHlvdXIgdGF4IHNpdHVhdGlvbiwgZW5zdXJpbmcgdGhlIGNvcnJlY3QgdHJlYXRtZW50IG9mIHlvdXIgUm90aCBJUkEgY29udHJpYnV0aW9ucyBhbmQgYW55IGRpc3RyaWJ1dGlvbnMsIGFuZCBjb21wbHlpbmcgd2l0aCBJUlMgcmVndWxhdGlvbnMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudGF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlcmllcyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gb2J0YWluaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBBc3NldHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlJ3JlIG1ha2luZyBwcm9ncmVzcyBvbiB5b3VyIHRheCByZXR1cm4sIGFuZCBiYXNlZCBvbiB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgb3duZXJzaGlwIG9yIGZpbmFuY2lhbCBpbnRlcmVzdCBpbiBmb3JlaWduIGFzc2V0cywgYWRkaXRpb25hbCBkZXRhaWxzIGFyZSBuZWNlc3NhcnkuIFRoZXNlIGRldGFpbHMgYXJlIGNydWNpYWwgZm9yIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgY29tcGxpYW5jZSB3aXRoIHRoZSBGb3JlaWduIEFjY291bnQgVGF4IENvbXBsaWFuY2UgQWN0IChGQVRDQSkgYW5kIFJlcG9ydCBvZiBGb3JlaWduIEJhbmsgYW5kIEZpbmFuY2lhbCBBY2NvdW50cyAoRkJBUikgcmVxdWlyZW1lbnRzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCBzdGF0ZW1lbnRzIGZyb20gZm9yZWlnbiBiYW5rcywgbXV0dWFsIGZ1bmRzLCBvciBzZWN1cml0aWVzIGFjY291bnRzLiBUaGlzIGluY2x1ZGVzIGFueXRoaW5nIHdpdGggYW4gYWdncmVnYXRlIHZhbHVlIG92ZXIgJDEwLDAwMCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgTnVtYmVyczo8L3N0cm9uZz4gVGhlIGFjY291bnQgbnVtYmVycyBmb3IgYWxsIGFwcGxpY2FibGUgYWNjb3VudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnN0aXR1dGlvbiBOYW1lczo8L3N0cm9uZz4gVGhlIG5hbWVzIGFuZCBhZGRyZXNzZXMgb2YgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbnMgd2hlcmUgdGhlc2UgYWNjb3VudHMgYXJlIGhlbGQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NYXhpbXVtIFZhbHVlczo8L3N0cm9uZz4gVGhlIG1heGltdW0gdmFsdWUgb2YgZWFjaCBhY2NvdW50IGR1cmluZyB0aGUgdGF4IHllYXIsIGNvbnZlcnRlZCB0byBVU0QgdXNpbmcgdGhlIGVuZC1vZi15ZWFyIGV4Y2hhbmdlIHJhdGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Pd25lcnNoaXAgRGV0YWlsczo8L3N0cm9uZz4gQ2xhcmlmaWNhdGlvbiBvbiB0aGUgdHlwZSBvZiBvd25lcnNoaXAgKGluZGl2aWR1YWwsIGpvaW50LCBldGMuKSBhbmQgdGhlIHBlcmNlbnRhZ2Ugb2Ygb3duZXJzaGlwIGlmIG5vdCBzb2xlbHkgb3duZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db250YWN0IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBJZiBtYW5hZ2VkIGJ5IGEgZmluYW5jaWFsIGFkdmlzb3Igb3IgaW5zdGl0dXRpb24sIHByb3ZpZGUgdGhlaXIgY29udGFjdCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkluY29tZSBHZW5lcmF0ZWQ6PC9zdHJvbmc+IEluZm9ybWF0aW9uIG9uIGFueSBpbmNvbWUgZ2VuZXJhdGVkIGZyb20gdGhlc2UgYXNzZXRzLCBzdWNoIGFzIGludGVyZXN0LCBkaXZpZGVuZHMsIG9yIGNhcGl0YWwgZ2FpbnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGltcGVyYXRpdmUgdG8gZW5zdXJlIGZ1bGwgY29tcGxpYW5jZSBhbmQgbWl0aWdhdGUgYW55IHJpc2tzIG9mIHBlbmFsdGllcy4gS2luZGx5IHNlbmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUsIHRvIGFsbG93IGFtcGxlIHRpbWUgZm9yIHByb3BlciBmaWxpbmcuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZ2lmdHMgb3IgYmVxdWVzdHMgZnJvbSBmb3JlaWduIGVudGl0aWVzIHRoYXQgZXhjZWVkIHRoZSAkMTAwLDAwMCB0aHJlc2hvbGQgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhlc2Ugb24geW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29tcGxldGUgbGlzdCBvZiBmb3JlaWduIGdpZnRzIG9yIGJlcXVlc3RzIHJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBkZXRhaWxzIGZvciBlYWNoIGdpZnQgb3IgYmVxdWVzdCwgaW5jbHVkaW5nIHRoZSBkYXRlIHJlY2VpdmVkIGFuZCB0aGUgZXhhY3QgYW1vdW50IGluIFVTRCAoVS5TLiBEb2xsYXJzKS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Eb25vciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gRm9yIGVhY2ggZ2lmdCByZWNlaXZlZCwgcHJvdmlkZSB0aGUgZG9ub3IncyBmdWxsIG5hbWUsIGFkZHJlc3MsIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlNvdXJjZSBvZiBHaWZ0Ojwvc3Ryb25nPiBEZXRhaWwgdGhlIHNvdXJjZSBvZiBlYWNoIGdpZnQsIGluY2x1ZGluZyB3aGV0aGVyIGl0IG9yaWdpbmF0ZWQgZnJvbSBhbiBpbmRpdmlkdWFsLCBlc3RhdGUsIGZvcmVpZ24gY29ycG9yYXRpb24sIG9yIHBhcnRuZXJzaGlwLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gQ291bnRyeSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgY291bnRyeSBmcm9tIHdoaWNoIGVhY2ggZ2lmdCBvciBiZXF1ZXN0IHdhcyByZWNlaXZlZC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBdHRhY2ggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gc3VjaCBhcyBiYW5rIHN0YXRlbWVudHMsIGZvcmVpZ24gZ2lmdCBkZWNsYXJhdGlvbiBmb3Jtcywgb3IgbGVnYWwgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gdGhlIHJlY2VpcHQgb2YgdGhlc2UgZ2lmdHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgdG8gZnVsZmlsbCBvdXIgb2JsaWdhdGlvbnMgYW5kIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgeW91ciB0YXggZmlsaW5ncy4gRmFpbHVyZSB0byByZXBvcnQgZm9yZWlnbiBnaWZ0cyBvciBiZXF1ZXN0cyBhY2N1cmF0ZWx5IGNhbiByZXN1bHQgaW4gcGVuYWx0aWVzLiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGVwcmVjaWFibGUgQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEZXByZWNpYWJsZSBBc3NldHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHdlIGJlZ2luIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4sIHdlIG5lZWQgeW91ciBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGRlcHJlY2lhYmxlIGFzc2V0cy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgZGVwcmVjaWF0aW9uIGV4cGVuc2UgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMuPC9wPlxyXG5cclxuICAgIDxoMj5BY3Rpb24gSXRlbTo8L2gyPlxyXG4gICAgPHA+UGxlYXNlIGFjY2VzcyB5b3VyIDxzdHJvbmc+c2VjdXJlIGNsaWVudCB1cGxvYWQgcG9ydGFsPC9zdHJvbmc+IGFuZCBuYXZpZ2F0ZSB0byB0aGUgZm9sbG93aW5nIHBhdGg6IDxjb2RlPnRheGVzL1tDVVJSRU5UIFRBWCBZRUFSXS9EZXByZWNpYXRpb24vQXNzZXRzLnhsc3g8L2NvZGU+LiBZb3Ugd2lsbCBmaW5kIGEgc3ByZWFkc2hlZXQgdGl0bGVkIFwiPHN0cm9uZz5EZXByZWNpYWJsZSBBc3NldHM8L3N0cm9uZz4uXCIgV2Uga2luZGx5IHJlcXVlc3QgdGhhdCB5b3UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBlYWNoIGRlcHJlY2lhYmxlIGFzc2V0IGluIHlvdXIgYnVzaW5lc3M6PC9wPlxyXG4gICAgPHVsPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uOjwvc3Ryb25nPiBQcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gdGhhdCBjbGVhcmx5IGlkZW50aWZpZXMgdGhlIGFzc2V0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBBY3F1aXJlZDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgZGF0ZSB5b3UgcHVyY2hhc2VkIG9yIGFjcXVpcmVkIHRoZSBhc3NldC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvc3QgLyBCYXNpczo8L3N0cm9uZz4gSW5kaWNhdGUgdGhlIG9yaWdpbmFsIGNvc3Qgb2YgdGhlIGFzc2V0IG9yIHRoZSBhZGp1c3RlZCBiYXNpcyBpZiBkZXByZWNpYXRpb24gaGFzIGJlZW4gY2xhaW1lZCBpbiBwcmV2aW91cyB5ZWFycy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJ1c2luZXNzICUgVXNlOjwvc3Ryb25nPiBFc3RpbWF0ZSB0aGUgcGVyY2VudGFnZSBvZiB0aW1lIHRoZSBhc3NldCBpcyB1c2VkIGZvciBidXNpbmVzcyBwdXJwb3NlcyB2ZXJzdXMgcGVyc29uYWwgdXNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VXNlZCBQcm9wZXJ0eTo8L3N0cm9uZz4gSW5kaWNhdGUgd2hldGhlciB0aGUgYXNzZXQgd2FzIHB1cmNoYXNlZCBuZXcgb3IgdXNlZC48L2xpPlxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8aDM+SW1wb3J0YW50IE5vdGUgb24gU2FmZS1IYXJib3IgRXhwZW5zaW5nOjwvaDM+XHJcbiAgICA8cD5QbGVhc2UgYmUgYXdhcmUgdGhhdCB1bmRlciB0aGUgc2FmZS1oYXJib3IgPGVtPmRlIG1pbmltaXM8L2VtPiBleHBlbnNpbmcgcnVsZSwgeW91IGNhbiBpbW1lZGlhdGVseSBleHBlbnNlIHRoZSBjb3N0IG9mIGFueSBpbmRpdmlkdWFsIGFzc2V0IHRoYXQgY29zdHMgbGVzcyB0aGFuICQyLDUwMCwgcHJvdmlkZWQgeW91IGRvIG5vdCBoYXZlIGFuIEFwcGxpY2FibGUgRmluYW5jaWFsIFN0YXRlbWVudCAoQUZTKS4gSWYgYW4gYXNzZXQgbWVldHMgdGhpcyBjcml0ZXJpb24sIHlvdSBkbyBub3QgbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBzcHJlYWRzaGVldC48L3A+XHJcblxyXG4gICAgPHA+V2UgZW5jb3VyYWdlIHlvdSB0byBiZSBhcyBjb21wcmVoZW5zaXZlIGFzIHBvc3NpYmxlIHdoZW4gbGlzdGluZyB5b3VyIGFzc2V0cy4gSWYgeW91IGFyZSB1bnN1cmUgd2hldGhlciBhbiBpdGVtIHNob3VsZCBiZSBpbmNsdWRlZCwgcGxlYXNlIHByb3ZpZGUgdGhlIGRldGFpbHMsIGFuZCB3ZSB3aWxsIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgdHJlYXRtZW50LjwvcD5cclxuXHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIDxzdHJvbmc+Y29udGFjdCB1czwvc3Ryb25nPi4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGxvb2sgZm9yd2FyZCB0byB3b3JraW5nIHdpdGggeW91IHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlBhc3NpdmUgQnVzaW5lc3MgQWN0aXZpdGllc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGFzc2l2ZSBCdXNpbmVzcyBBY3Rpdml0aWVzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiBvcmRlciB0byBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggcmV0dXJucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhc3NpdmUgYWN0aXZpdGllcyB5b3VyIGJ1c2luZXNzIGlzIGVuZ2FnZWQgaW4uIFBhc3NpdmUgYWN0aXZpdGllcyBnZW5lcmFsbHkgaW52b2x2ZSBidXNpbmVzcyBvciB0cmFkZSBhY3Rpdml0aWVzIGluIHdoaWNoIHlvdSBkbyBub3QgbWF0ZXJpYWxseSBwYXJ0aWNpcGF0ZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBhY3Rpdml0aWVzIGlzIGNydWNpYWwgZm9yIHByb3BlciB0YXggcmVwb3J0aW5nIGFuZCBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzLjwvcD5cclxuXHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlmIHlvdSBiZWxpZXZlIHdlIGRvIG5vdCBhbHJlYWR5IGhhdmUgdGhlIGluZm9ybWF0aW9uIGluIHlvdXIgYnVzaW5lc3MgZmluYW5jaWFsczo8L3A+XHJcbiAgICBcclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+TmFtZXMgYW5kIERlc2NyaXB0aW9uczo8L3N0cm9uZz4gQSBsaXN0IGFuZCBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHBhc3NpdmUgYWN0aXZpdHkgeW91ciBidXNpbmVzcyBpcyBlbmdhZ2VkIGluLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkZpbmFuY2lhbCBTdGF0ZW1lbnRzOjwvc3Ryb25nPklmIG5vdCBhbHJlYWR5IGluIHlvdXIgYnVzaW5lc3MgZmluYW5jaWFscywgUHJvZml0IGFuZCBsb3NzIHN0YXRlbWVudHMgZm9yIGVhY2ggcGFzc2l2ZSBhY3Rpdml0eSwgZGV0YWlsaW5nIGluY29tZSBhbmQgZXhwZW5zZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+T3duZXJzaGlwIFN0cnVjdHVyZTo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvdXRsaW5pbmcgeW91ciBvd25lcnNoaXAgaW50ZXJlc3QgaW4gZWFjaCBhY3Rpdml0eSwgaW5jbHVkaW5nIGFueSBqb2ludCB2ZW50dXJlcyBvciBwYXJ0bmVyc2hpcHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIFByb3BlcnRpZXMgKGlmIGFwcGxpY2FibGUpOjwvc3Ryb25nPiBJZiBhbnkgcGFzc2l2ZSBhY3Rpdml0aWVzIGluY2x1ZGUgcmVudGFsIHByb3BlcnRpZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBhZGRyZXNzZXMsIGxlYXNlIGFncmVlbWVudHMsIGFuZCBhIHNjaGVkdWxlIG9mIHJlbnRzIGNvbGxlY3RlZCBhbmQgZXhwZW5zZXMgaW5jdXJyZWQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+TG9nIG9mIFBlcnNvbmFsIEludm9sdmVtZW50Ojwvc3Ryb25nPiBGb3IgZWFjaCBhY3Rpdml0eSwgYSBsb2cgb3IgcmVjb3JkIG9mIHlvdXIgcGVyc29uYWwgaW52b2x2ZW1lbnQgb3IgcGFydGljaXBhdGlvbiBvdmVyIHRoZSB0YXggeWVhciwgdG8gc3Vic3RhbnRpYXRlIHRoZSBleHRlbnQgb2YgeW91ciBtYXRlcmlhbCBwYXJ0aWNpcGF0aW9uLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByaW9yIFllYXIgTG9zc2VzOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBvbiBhbnkgbG9zc2VzIGZyb20gdGhlc2UgYWN0aXZpdGllcyBjYXJyaWVkIG92ZXIgZnJvbSBwcmV2aW91cyB0YXggeWVhcnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICBcclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgcGl2b3RhbCBmb3IgYXNzZXNzaW5nIHlvdXIgcGFzc2l2ZSBhY3Rpdml0eSBsb3NzZXMgYW5kIGNvcnJlY3RseSBhcHBseWluZyB0aGVtIGFnYWluc3QgeW91ciBwYXNzaXZlIGFjdGl2aXR5IGluY29tZSwgaW4gbGluZSB3aXRoIHRoZSBJUlMgcGFzc2l2ZSBhY3Rpdml0eSBsb3NzIHJ1bGVzLjwvcD5cclxuICAgIFxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0LiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiR2VuZXJhbCBCdXNpbmVzcyBDcmVkaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBleHBsb3Jpbmcgb3Bwb3J0dW5pdGllcyB0byBvcHRpbWl6ZSB5b3VyIHRheCBiZW5lZml0cyB0aHJvdWdoIHZhcmlvdXMgZ2VuZXJhbCBidXNpbmVzcyBjcmVkaXRzLiBUaGVzZSBjcmVkaXRzIGFyZSBkZXNpZ25lZCB0byBlbmNvdXJhZ2UgY2VydGFpbiBidXNpbmVzcyBhY3Rpdml0aWVzIHRoYXQgbWVldCB0aGUgZ29hbHMgYW5kIHBvbGljaWVzIGVzdGFibGlzaGVkIGJ5IHRoZSBnb3Zlcm5tZW50LCByYW5naW5nIGZyb20gaW52ZXN0bWVudCBpbiBwcm9wZXJ0eSB0byBmb3N0ZXJpbmcgc29jaWFsIHJlc3BvbnNpYmlsaXRpZXMgbGlrZSBlbXBsb3ltZW50IG9wcG9ydHVuaXRpZXMgZm9yIHZldGVyYW5zLiBVbmRlcnN0YW5kaW5nIHdoZXRoZXIgeW91ciBidXNpbmVzcyBpcyBlbGlnaWJsZSBmb3IgdGhlc2UgY2FuIHNpZ25pZmljYW50bHkgaW1wYWN0IHlvdXIgZmluYW5jaWFscyBmYXZvcmFibHkuPC9wPlxyXG5cclxuICAgIDxwPkJlbG93IGlzIGEgYnJpZWYgZXhwbGFuYXRpb24gb2Ygc29tZSBvZiB0aGUgbW9zdCBjb21tb24gR2VuZXJhbCBCdXNpbmVzcyBDcmVkaXRzIGFuZCBvdGhlcnMgdGhhdCBtaWdodCBhcHBseSB0byB5b3VyIHNpdHVhdGlvbjo8L3A+XHJcbiAgICBcclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBDcmVkaXQgKEZvcm0gMzQ2OCk6PC9zdHJvbmc+IEZvciBpbnZlc3RpbmcgaW4gY2VydGFpbiBwcm9wZXJ0eSBsaWtlIGJ1aWxkaW5ncywgZXF1aXBtZW50LCBvciBvdGhlciB0YW5naWJsZSBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Xb3JrIE9wcG9ydHVuaXR5IFRheCBDcmVkaXQgKEZvcm0gNTg4NCk6PC9zdHJvbmc+IEZvciBoaXJpbmcgaW5kaXZpZHVhbHMgZnJvbSBjZXJ0YWluIHRhcmdldCBncm91cHMgd2hvIGhhdmUgY29uc2lzdGVudGx5IGZhY2VkIHNpZ25pZmljYW50IGJhcnJpZXJzIHRvIGVtcGxveW1lbnQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGlzYWJsZWQgQWNjZXNzIENyZWRpdDo8L3N0cm9uZz4gSWYgeW91ciBidXNpbmVzcyBpbmN1cnJlZCBleHBlbnNlcyBmb3IgbWFraW5nIGl0IG1vcmUgYWNjZXNzaWJsZSB0byBpbmRpdmlkdWFscyB3aXRoIGRpc2FiaWxpdGllcywgY29tcGx5aW5nIHdpdGggdGhlIEFtZXJpY2FucyB3aXRoIERpc2FiaWxpdGllcyBBY3QgKEFEQSkuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q3JlZGl0IGZvciBFbXBsb3llciBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIFRheGVzIG9uIEVtcGxveWVlIFRpcHMgKEZvcm0gODg0Nik6PC9zdHJvbmc+IElmIHlvdSBoYXZlIGVtcGxveWVlcyB3aG8gcmVjZWl2ZSB0aXBzLCB0aGlzIGNyZWRpdCByZWxhdGVzIHRvIHRoZSBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRheGVzIHlvdSBwYXkgb24gdGhvc2UgdGlwcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBDcmVkaXQgZm9yIFBhaWQgRmFtaWx5IGFuZCBNZWRpY2FsIExlYXZlIChGTUxBIExlYXZlKSAoRm9ybSA4OTk0KTo8L3N0cm9uZz4gRm9yIGJ1c2luZXNzZXMgcHJvdmlkaW5nIHBhaWQgZmFtaWx5IGFuZCBtZWRpY2FsIGxlYXZlIHRvIHRoZWlyIGVtcGxveWVlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5DcmVkaXQgZm9yIFNtYWxsIEVtcGxveWVyIEhlYWx0aCBJbnN1cmFuY2UgUHJlbWl1bXMgKEZvcm0gODk0MSk6PC9zdHJvbmc+IElmIHlvdSBwcm92aWRlIGhlYWx0aCBpbnN1cmFuY2UgdG8geW91ciBlbXBsb3llZXMsIHlvdSBtaWdodCBiZSBlbGlnaWJsZSBmb3IgdGhpcyBjcmVkaXQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVzZWFyY2ggYW5kIERldmVsb3BtZW50IENyZWRpdCAoRm9ybSA2NzY1KTo8L3N0cm9uZz4gRm9yIGJ1c2luZXNzZXMgZW5nYWdpbmcgaW4gcXVhbGlmaWVkIHJlc2VhcmNoIGFjdGl2aXRpZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q3JlZGl0IGZvciBFbXBsb3llci1Qcm92aWRlZCBDaGlsZCBDYXJlIEZhY2lsaXRpZXMgYW5kIFNlcnZpY2VzOjwvc3Ryb25nPiBJZiB5b3VyIGJ1c2luZXNzIHByb3ZpZGVzIGNoaWxkIGNhcmUgZmFjaWxpdGllcyBvciBzZXJ2aWNlcyB0byB5b3VyIGVtcGxveWVlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5DcmVkaXQgZm9yIFNtYWxsIEVtcGxveWVyIFBlbnNpb24gUGxhbiBTdGFydHVwIENvc3RzIGFuZCBBdXRvLUVucm9sbG1lbnQgKEZvcm0gODg4MSk6PC9zdHJvbmc+IElmIHlvdXIgYnVzaW5lc3MgaGFzIHNldCB1cCBvciBwbGFucyB0byBzZXQgdXAgYSBwZW5zaW9uIHBsYW4gZm9yIHlvdXIgZW1wbG95ZWVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPk90aGVyIGNyZWRpdHM6PC9zdHJvbmc+IEFkZGl0aW9uYWwgY3JlZGl0cyBjYW4gYmUgZm91bmQgaW4gZGV0YWlsIGF0IDxhIGhyZWY9XCJodHRwczovL3d3dy5pcnMuZ292L2luc3RydWN0aW9ucy9pMzgwMFwiPklSUyBJbnN0cnVjdGlvbnMgZm9yIEZvcm0gMzgwMDwvYT4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICBcclxuICAgIDxwPldlIHdvdWxkIGxpa2UgdG8gYXNzZXNzIHlvdXIgcG90ZW50aWFsIGVsaWdpYmlsaXR5IGZvciB0aGVzZSBjcmVkaXRzLiBQbGVhc2UgcmV2aWV3IHRoZSBhYm92ZSBsaXN0IGFuZCA8c3Ryb25nPmluZm9ybSB1cyBpZiB5b3UgYmVsaWV2ZSB5b3VyIGJ1c2luZXNzIG1heSBxdWFsaWZ5PC9zdHJvbmc+IGZvciBhbnkgb2YgdGhlbSBiYXNlZCBvbiB5b3VyIGN1cnJlbnQgb3BlcmF0aW9ucyBvciBmdXR1cmUgcGxhbnMuIEFkZGl0aW9uYWxseSwgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjcmVkaXRzIG5vdCBsaXN0ZWQgdGhhdCB5b3UgYmVsaWV2ZSBtYXkgYXBwbHkgdG8geW91ciBidXNpbmVzcywgbGV0IHVzIGtub3cuPC9wPlxyXG4gICAgXHJcbiAgICA8cD5Zb3VyIGluc2lnaHRzIHdpbGwgZ3JlYXRseSBhc3Npc3QgdXMgaW4gZW5zdXJpbmcgd2UgZXhwbG9yZSBhbGwgYXZlbnVlcyB0byByZWR1Y2UgeW91ciB0YXggbGlhYmlsaXR5IGFuZCBjYXBpdGFsaXplIG9uIGF2YWlsYWJsZSBjcmVkaXRzLjwvcD5cclxuICAgIFxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gYW55IG9mIHRoZXNlIGNyZWRpdHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQnVzaW5lc3MgQXNzZXRzIFNvbGRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkJ1c2luZXNzIEFzc2V0cyBTb2xkXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyB3ZSB3b3JrIHRvIGRpbGlnZW50bHkgcHJlcGFyZSB5b3VyIGJ1c2luZXNz4oCZcyB0YXggZG9jdW1lbnRhdGlvbiwgd2UgbmVlZCB0byBlbnN1cmUgY29tcGxldGVuZXNzIGFuZCBhY2N1cmFjeSBpbiByZXBvcnRpbmcgYWxsIHJlbGV2YW50IHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSB0YXggeWVhci4gQW4gaW1wb3J0YW50IGFyZWEgb2YgZm9jdXMgaXMgdGhlIHNhbGUgb2YgYW55IGJ1c2luZXNzIGFzc2V0cy4gVGhpcyBpbmNsdWRlcyBib3RoIGFzc2V0cyBhY3RpdmVseSBpbiB1c2UgYW5kIHRob3NlIHRoYXQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGVwcmVjaWF0ZWQuPC9wPlxyXG5cclxuICAgIDxwPlRoZSBzYWxlIG9mIGJ1c2luZXNzIGFzc2V0cyBjYW4gaGF2ZSBzaWduaWZpY2FudCB0YXggaW1wbGljYXRpb25zLCBpbmNsdWRpbmcgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzLCByZWNhcHR1cmUgb2YgZGVwcmVjaWF0aW9uLCBhbmQgaW1wYWN0cyBvbiB5b3VyIGJ1c2luZXNz4oCZcyBjYXNoIGZsb3cgYW5kIGZpbmFuY2lhbCBzdGF0ZW1lbnRzLiBBY2NvcmRpbmdseSwgaXQgaXMgY3J1Y2lhbCBmb3IgdXMgdG8gYWNjdXJhdGVseSByZXBvcnQgdGhlc2UgdHJhbnNhY3Rpb25zIHRvIHRoZSBJUlMuPC9wPlxyXG4gICAgXHJcbiAgICA8cD5QbGVhc2UgY29uZmlybSBpZiB5b3VyIGJ1c2luZXNzIGhhcyBzb2xkIGFueSBhc3NldHMgZHVyaW5nIHRoZSBjdXJyZW50IHRheCBwZXJpb2QgYnkgcHJvdmlkaW5nIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgXHJcbiAgICA8dWw+XHJcbiAgICAgIDxsaT48c3Ryb25nPkFzc2V0IERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggYXNzZXQgc29sZCAoZS5nLiwgZXF1aXBtZW50LCBwcm9wZXJ0eSwgdmVoaWNsZXMpLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgU2FsZTo8L3N0cm9uZz4gVGhlIGRhdGUgb24gd2hpY2ggZWFjaCBhc3NldCB3YXMgc29sZC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5TYWxlIFByb2NlZWRzOjwvc3Ryb25nPiBUaGUgYW1vdW50IG9mIG1vbmV5IHJlY2VpdmVkIGZyb20gdGhlIHNhbGUgb2YgZWFjaCBhc3NldC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5PcmlnaW5hbCBQdXJjaGFzZSBQcmljZSBhbmQgRGF0ZTo8L3N0cm9uZz4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBwdXJjaGFzZSBkYXRlIGZvciBlYWNoIGFzc2V0LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkFjY3VtdWxhdGVkIERlcHJlY2lhdGlvbjo8L3N0cm9uZz4gVGhlIHRvdGFsIGRlcHJlY2lhdGlvbiBjbGFpbWVkIG9uIGVhY2ggYXNzZXQgdXAgdG8gdGhlIHBvaW50IG9mIHNhbGUuPC9saT5cclxuICAgIDwvdWw+XHJcbiAgICBcclxuICAgIDxwPklmIHlvdSBoYXZlIG5vdCBzb2xkIGFueSBidXNpbmVzcyBhc3NldHMgZHVyaW5nIHRoaXMgcGVyaW9kLCBwbGVhc2UgY29uZmlybSB0aGlzIGFzIHdlbGwuIFlvdXIgdGltZWx5IHJlc3BvbnNlIHRvIHRoaXMgaW5xdWlyeSBpcyBjcnVjaWFsIGZvciB0aGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgXHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuIFdlIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LjwvcD5cclxuICAgIFxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvbWUgT2ZmaWNlIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSG9tZSBPZmZpY2UgRGVkdWN0aW9uIEluZm9ybWF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD48c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gSWYgeW91J3ZlIGFscmVhZHkgcmVjZWl2ZWQgYW5kIGNvbXBsZXRlZCBhIGJ1c2luZXNzIHVzZSBvZiBob21lIHNwcmVhZHNoZWV0IGZyb20gdXMsIHlvdSBjYW4gc2FmZWx5IGlnbm9yZSB0aGlzIGFjdGlvbiBpdGVtLiBXZSdsbCBjbG9zZSBpdCBvdXQgb25jZSB3ZSB2ZXJpZnkgd2UgaGF2ZSB0aGUgaW5mb3JtYXRpb24gb24gZmlsZS48L3A+XHJcbiAgXHJcbiAgICA8cD5Zb3UndmUgaW5kaWNhdGVkIHRoYXQgeW91IHVzZSBwYXJ0IG9mIHlvdXIgaG9tZSByZWd1bGFybHkgYW5kIGV4Y2x1c2l2ZWx5IGZvciBidXNpbmVzcyBwdXJwb3Nlcy4gVGhpcyBtYXkgcXVhbGlmeSB5b3UgZm9yIGEgaG9tZSBvZmZpY2UgZGVkdWN0aW9uLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGlzIGRlZHVjdGlvbiwgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICBcclxuICAgIDx1bD5cclxuICAgICAgPGxpPlRvdGFsIHNxdWFyZSBmb290YWdlIG9mIHlvdXIgaG9tZTwvbGk+XHJcbiAgICAgIDxsaT5TcXVhcmUgZm9vdGFnZSBvZiB5b3VyIGhvbWUgb2ZmaWNlPC9saT5cclxuICAgICAgPGxpPkJyaWVmIGRlc2NyaXB0aW9uIG9mIGhvdyB5b3UgdXNlIHRoaXMgc3BhY2UgZm9yIGJ1c2luZXNzPC9saT5cclxuICAgICAgPGxpPkhvbWUtcmVsYXRlZCBleHBlbnNlczogbW9ydGdhZ2UgaW50ZXJlc3QvcmVudCwgcHJvcGVydHkgdGF4ZXMsIGluc3VyYW5jZSwgdXRpbGl0aWVzLCByZXBhaXJzPC9saT5cclxuICAgICAgPGxpPkRpcmVjdCBleHBlbnNlcyBmb3IgdGhlIG9mZmljZSBzcGFjZTwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIFxyXG4gICAgPHA+SWYgeW91IGhhdmVuJ3QgcmVjZWl2ZWQgb3VyIGJ1c2luZXNzIHVzZSBvZiBob21lIHNwcmVhZHNoZWV0LCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCB3ZSdsbCBwcm92aWRlIGl0IHRvIHlvdSBmb3IgZWFzeSBjb21wbGV0aW9uIG9mIHRoaXMgaW5mb3JtYXRpb24uPC9wPlxyXG4gIFxyXG4gICAgPHA+VGhpcyBkYXRhIHdpbGwgaGVscCB1cyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIHBvdGVudGlhbCBob21lIG9mZmljZSBkZWR1Y3Rpb24gYW5kIG9wdGltaXplIHlvdXIgdGF4IHJldHVybi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGFzay48L3A+YFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJCdXNpbmVzcyBVc2Ugb2YgUGVyc29uYWwgVmVoaWNsZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGVyc29uYWwgVmVoaWNsZSBCdXNpbmVzcyBVc2UgSW5mb3JtYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSBwcm92aWRlZCB1cyB3aXRoIGEgY29tcGxldGVkIHZlaGljbGUgZXhwZW5zZSBsb2cgb3Igc3ByZWFkc2hlZXQgZm9yIHRoZSB0YXggeWVhciwgeW91IGNhbiBpZ25vcmUgdGhpcyBhY3Rpb24gaXRlbS4gV2UnbGwgY2xvc2UgaXQgb25jZSB3ZSB2ZXJpZnkgd2UgaGF2ZSB0aGUgaW5mb3JtYXRpb24gb24gZmlsZS48L3A+XHJcbiAgXHJcbiAgICA8cD5Zb3UndmUgaW5kaWNhdGVkIHRoYXQgeW91IHVzZSB5b3VyIHBlcnNvbmFsIHZlaGljbGUgZm9yIGJ1c2luZXNzIHB1cnBvc2VzLiBUaGlzIG1heSBxdWFsaWZ5IHlvdSBmb3IgdmVoaWNsZS1yZWxhdGVkIHRheCBkZWR1Y3Rpb25zLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGVzZSBkZWR1Y3Rpb25zLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gIFxyXG4gICAgPHVsPlxyXG4gICAgICA8bGk+VmVoaWNsZSBtYWtlLCBtb2RlbCwgYW5kIHllYXI8L2xpPlxyXG4gICAgICA8bGk+RGF0ZSB5b3Ugc3RhcnRlZCB1c2luZyB0aGUgdmVoaWNsZSBmb3IgYnVzaW5lc3M8L2xpPlxyXG4gICAgICA8bGk+V2FzIHRoZSB2ZWhpY2xlIHB1cmNoYXNlZCBpbiBhbnRpY2lwYXRpb24gb2YgYnVzaW5lc3MgdXNlPyBJZiB5ZXMsIHByb3ZpZGUgcHVyY2hhc2UgZGF0ZSBhbmQgY29zdDwvbGk+XHJcbiAgICAgIDxsaT5Ub3RhbCBtaWxlcyBkcml2ZW4gZHVyaW5nIHRoZSB0YXggeWVhcjwvbGk+XHJcbiAgICAgIDxsaT5CdXNpbmVzcyBtaWxlcyBkcml2ZW4gZHVyaW5nIHRoZSB0YXggeWVhcjwvbGk+XHJcbiAgICAgIDxsaT5Db21tdXRpbmcgbWlsZXMgKGlmIGFwcGxpY2FibGUpPC9saT5cclxuICAgICAgPGxpPkFjdHVhbCBleHBlbnNlcyAoaWYgeW91IHByZWZlciB0aGlzIG1ldGhvZCBvdmVyIHN0YW5kYXJkIG1pbGVhZ2UgcmF0ZSk6XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkdhcyBhbmQgb2lsPC9saT5cclxuICAgICAgICAgIDxsaT5NYWludGVuYW5jZSBhbmQgcmVwYWlyczwvbGk+XHJcbiAgICAgICAgICA8bGk+VmVoaWNsZSByZWdpc3RyYXRpb24gZmVlczwvbGk+XHJcbiAgICAgICAgICA8bGk+VmVoaWNsZSBpbnN1cmFuY2U8L2xpPlxyXG4gICAgICAgICAgPGxpPkxlYXNlIHBheW1lbnRzIChpZiBhcHBsaWNhYmxlKTwvbGk+XHJcbiAgICAgICAgICA8bGk+UGFya2luZyBmZWVzIGFuZCB0b2xscyBmb3IgYnVzaW5lc3MgdHJpcHM8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT5EbyB5b3UgKG9yIHlvdXIgc3BvdXNlKSBoYXZlIGFub3RoZXIgdmVoaWNsZSBhdmFpbGFibGUgZm9yIHBlcnNvbmFsIHVzZT88L2xpPlxyXG4gICAgICA8bGk+RG8geW91IGhhdmUgd3JpdHRlbiBldmlkZW5jZSB0byBzdXBwb3J0IHlvdXIgbWlsZWFnZSBsb2c/PC9saT5cclxuICAgIDwvdWw+XHJcbiAgXHJcbiAgICA8cD5QbGVhc2Ugbm90ZTogSWYgeW91IHB1cmNoYXNlZCB0aGUgdmVoaWNsZSBpbiBhbnRpY2lwYXRpb24gb2YgYnVzaW5lc3MgdXNlLCB3ZSBtYXkgYmUgYWJsZSB0byBjbGFpbSBkZXByZWNpYXRpb24uIFRoaXMgY291bGQgcG90ZW50aWFsbHkgaW5jcmVhc2UgeW91ciBkZWR1Y3Rpb24gYnV0IG1heSBhbHNvIGhhdmUgaW1wbGljYXRpb25zIGZvciBmdXR1cmUgdGF4IHllYXJzLjwvcD5cclxuICBcclxuICAgIDxwPklmIHlvdSBoYXZlbid0IHJlY2VpdmVkIG91ciB2ZWhpY2xlIGV4cGVuc2UgbG9nIHNwcmVhZHNoZWV0LCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCB3ZSdsbCBwcm92aWRlIGl0IHRvIHlvdSBmb3IgZWFzeSBjb21wbGV0aW9uIG9mIHRoaXMgaW5mb3JtYXRpb24uPC9wPlxyXG4gIFxyXG4gICAgPHA+VGhpcyBkYXRhIHdpbGwgaGVscCB1cyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIHZlaGljbGUtcmVsYXRlZCBkZWR1Y3Rpb25zIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgYWJvdXQgd2hhdCBxdWFsaWZpZXMgYXMgYnVzaW5lc3MgdXNlIG9yIGhvdyB0byB0cmFjayB5b3VyIG1pbGVhZ2UsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBhc2suPC9wPmBcclxuICB9XHJcbl07XHJcbiJdfQ==
2274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXRheC1mcmFnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uLXRlbXMvYWN0aW9uLXRheC1mcmFnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxrQkFBa0IsR0FBRztJQUNoQztRQUNFLGdCQUFnQixFQUFFLHdCQUF3QjtRQUMxQyxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLGtCQUFrQixFQUFFOzs7Ozs7OzsrSUFRdUg7S0FDNUk7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUseURBQXlEO1FBQ3RFLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dVBBMkIrTjtLQUNwUDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsbUNBQW1DO1FBQ2hELGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzhKQWFzSTtLQUMzSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7a1BBYTBOO0tBQy9PO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OzsySEFhbUc7S0FDeEg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs2T0FXcU47S0FDMU87SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Q0FTdkI7S0FDRTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JB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UUFDRSxnQkFBZ0IsRUFBRSwwQkFBMEI7UUFDNUMsV0FBVyxFQUFFLDBCQUEwQjtRQUN2QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dMQXFCd0o7S0FDN0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7K0RBa0J1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsdUJBQXVCO1FBQ3pDLFdBQVcsRUFBRSxtQ0FBbUM7UUFDaEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7O21MQWMySjtLQUNoTDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsa0NBQWtDO1FBQ3BELFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dQQTZCd047S0FDN087Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFjdGlvblRheEZyYWdtZW50cyA9IFtcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlByaW9yIFllYXIgVGF4IFJldHVybnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBgUHJvdmlkZSBQcmlvciBZZWFyIFRheCBSZXR1cm5zYCxcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJucyBhbmQgcmVxdWlyZSB5b3VyIGFzc2lzdGFuY2UgdG8gZW5zdXJlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3MuIE9uZSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiB3ZSBuZWVkIGlzIHlvdXIgPHN0cm9uZz5QcmlvciBZZWFyIFRheCBSZXR1cm5zPC9zdHJvbmc+LiBUaGlzIGRvY3VtZW50IGlzIGVzc2VudGlhbCBmb3Igc2V2ZXJhbCByZWFzb25zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvOiB2ZXJpZnlpbmcgY2FycnktZm9yd2FyZCBhbW91bnRzLCBjb21wYXJpbmcgeWVhci1vdmVyLXllYXIgaW5jb21lIGFuZCBkZWR1Y3Rpb25zLCBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCBsYXdzLjwvcD5cclxuICAgIDxwPlRvIGZhY2lsaXRhdGUgeW91ciB0YXggcHJlcGFyYXRpb24sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGNvcHkgb2YgeW91ciA8c3Ryb25nPkZlZGVyYWwgdGF4IHJldHVybjwvc3Ryb25nPiBmb3IgdGhlIGxhc3QgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+QSBjb3B5IG9mIHlvdXIgPHN0cm9uZz5TdGF0ZSB0YXggcmV0dXJuPC9zdHJvbmc+IGZvciB0aGUgbGFzdCB0YXggeWVhciwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgPHN0cm9uZz5ub3RpY2VzIG9yIGFtZW5kbWVudHM8L3N0cm9uZz4gcmVsYXRlZCB0byB5b3VyIHByaW9yIHllYXIgdGF4IHJldHVybnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgZGlmZmljdWx0eSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgbGV0IHVzIGtub3cgYXMgc29vbiBhcyBwb3NzaWJsZSBzbyB3ZSBjYW4gZGlzY3VzcyBhbHRlcm5hdGl2ZSBzb2x1dGlvbnMuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBQcm92aWRpbmcgdGhlc2Ugd2lsbCBlbmFibGUgdXMgdG8gY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24gd2l0aG91dCBkZWxheS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU3RhdHV0b3J5IEV4dGVuc2lvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBgRGV0ZXJtaW5pbmcgRWxpZ2liaWxpdHkgZm9yIFN0YXR1dG9yeSBGaWxpbmcgRXh0ZW5zaW9uc2AsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBlbnN1cmUgdGhhdCB3ZSBjYW4gYWNjdXJhdGVseSBkZXRlcm1pbmUgaWYgeW91IHF1YWxpZnkgZm9yIHN0YXR1dG9yeSBmaWxpbmcgZXh0ZW5zaW9ucyBmb3IgeW91ciB0YXggcmV0dXJucywgd2UgcmVxdWlyZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIHlvdS4gUGxlYXNlIHNlZSBiZWxvdyB0aGUgY2F0ZWdvcmllcyBvZiBpbmZvcm1hdGlvbiBuZWVkZWQgYmFzZWQgb24gZGlmZmVyZW50IGVsaWdpYmlsaXR5IGNyaXRlcmlhOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5GZWRlcmFsIERpc2FzdGVyIEFyZWFzPC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBwcmltYXJ5IHJlc2lkZW5jZSBsb2NhdGlvbiBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgY29ycmVzcG9uZGVuY2UgcmVjZWl2ZWQgcmVnYXJkaW5nIGRpc2FzdGVyIGRlY2xhcmF0aW9ucyBpbiB5b3VyIGFyZWEuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxpdmluZyBBYnJvYWQ8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlByb29mIG9mIHJlc2lkZW5jZSBvdXRzaWRlIHRoZSBVbml0ZWQgU3RhdGVzIGZvciBtb3JlIHRoYW4gMzMwIGZ1bGwgZGF5cyB3aXRoaW4gYSAxMi1tb250aCBwZXJpb2QuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIHN1cHBvcnRpbmcgeW91ciBwaHlzaWNhbCBwcmVzZW5jZSBvciBib25hIGZpZGUgcmVzaWRlbmNlIGluIGEgZm9yZWlnbiBjb3VudHJ5LjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BY3RpdmUgTWlsaXRhcnk8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gaW5kaWNhdGluZyBhY3RpdmUgZHV0eSBzdGF0dXMsIGluY2x1ZGluZyBkYXRlcyBvZiBzZXJ2aWNlIHdpdGhpbiB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCBvcmRlcnMgZm9yIG92ZXJzZWFzIGRlcGxveW1lbnQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbWJhdCBab25lPC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5PZmZpY2lhbCBvcmRlcnMgZGVtb25zdHJhdGluZyB5b3VyIGRlcGxveW1lbnQgdG8gYSBjb21iYXQgem9uZSwgaW5jbHVkaW5nIHRoZSBzcGVjaWZpYyBkYXRlcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSByZWxldmFudCBjb21tdW5pY2F0aW9uIGZyb20gdGhlIERlcGFydG1lbnQgb2YgRGVmZW5zZSBvciBvdGhlciBvZmZpY2lhbCBib2RpZXMgcmVnYXJkaW5nIHlvdXIgc2VydmljZSBpbiBhIGNvbWJhdCB6b25lLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgeW91IHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIGFjY3VyYXRlIGFuZCB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRlcGVuZGVudHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlcXVlc3QgZm9yIERlcGVuZGVudCBJbmZvcm1hdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCBkb2N1bWVudHMgYW5kIG5lZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBkZXBlbmRlbnRzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFwcGx5aW5nIHRoZSBtb3N0IGJlbmVmaWNpYWwgZGVwZW5kZW5jeSB0ZXN0cywgaW5jbHVkaW5nIHF1YWxpZmljYXRpb25zIGZvciBIZWFkIG9mIEhvdXNlaG9sZCAoSE9IKSwgQ2hpbGQgVGF4IENyZWRpdCwgYW5kIG90aGVyIHJlbGF0ZWQgYmVuZWZpdHMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBmb3IgZWFjaCBvZiB5b3VyIGNsYWltZWQgZGVwZW5kZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RnVsbCBOYW1lOjwvc3Ryb25nPiBUaGUgY29tcGxldGUgbGVnYWwgbmFtZSBvZiB0aGUgZGVwZW5kZW50LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKSBvciBUYXhwYXllciBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKFRJTik6PC9zdHJvbmc+IFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBpZGVudGlmaWNhdGlvbiBwdXJwb3Nlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgQmlydGg6PC9zdHJvbmc+IEhlbHBzIHRvIGRldGVybWluZSBlbGlnaWJpbGl0eSBmb3IgY2VydGFpbiBjcmVkaXRzIGxpa2UgdGhlIENoaWxkIFRheCBDcmVkaXQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZWxhdGlvbnNoaXAgdG8gWW91Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkZXBlbmRlbnQncyByZWxhdGlvbnNoaXAgKHNvbiwgZGF1Z2h0ZXIsIHN0ZXBjaGlsZCwgZm9zdGVyIGNoaWxkLCBicm90aGVyLCBzaXN0ZXIsIGV0Yy4pIHRvIHlvdS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlc2lkZW5jeTo8L3N0cm9uZz4gQ29uZmlybSB0aGUgZGVwZW5kZW50IGxpdmVkIHdpdGggeW91IGZvciBtb3JlIHRoYW4gaGFsZiB0aGUgeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZpbmFuY2lhbCBTdXBwb3J0Ojwvc3Ryb25nPiBDb25maXJtIHlvdSBwcm92aWRlZCBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgZGVwZW5kZW504oCZcyBmaW5hbmNpYWwgc3VwcG9ydCBmb3IgdGhlIHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5DaXRpemVuc2hpcDo8L3N0cm9uZz4gQ29uZmlybSB0aGUgZGVwZW5kZW50IGlzIGEgVS5TLiBjaXRpemVuLCBVLlMuIG5hdGlvbmFsLCBvciBhIHJlc2lkZW50IGFsaWVuLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TWFyaXRhbCBTdGF0dXM6PC9zdHJvbmc+IEluZGljYXRlIHdoZXRoZXIgdGhlIGRlcGVuZGVudCBpcyBtYXJyaWVkIGFuZCwgaWYgc28sIHdoZXRoZXIgdGhleSBhcmUgZmlsaW5nIGpvaW50bHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgSW5mb3JtYXRpb246PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgZGV0YWlscyByZWdhcmRpbmcgYW55IGluY29tZSB0aGUgZGVwZW5kZW50IG1heSBoYXZlIGVhcm5lZCBvciByZWNlaXZlZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgeW91IHByb3ZpZGUgY29tcGxldGUgYW5kIGFjY3VyYXRlIGluZm9ybWF0aW9uIHRvIGF2b2lkIGFueSBkZWxheXMgaW4gdGhlIHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgZnVydGhlciBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhlYWQgb2YgSG91c2Vob2xkXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJIZWFkIG9mIEhvdXNlaG9sZCBGaWxpbmdcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgY29tcGxpYW50IHRheCBmaWxpbmcgdW5kZXIgdGhlIFwiSGVhZCBvZiBIb3VzZWhvbGRcIiBzdGF0dXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uIFRoaXMgc3RhdHVzIGNhbiBwcm92aWRlIHNpZ25pZmljYW50IHRheCBiZW5lZml0cywgYW5kIGl0IGlzIGNydWNpYWwgdGhhdCBhbGwgSVJTIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBQbGVhc2UgcHJvdmlkZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5NYXJpdGFsIFN0YXR1czo8L3N0cm9uZz4gQ29uZmlybWF0aW9uIG9mIHlvdXIgbWFyaXRhbCBzdGF0dXMgYXMgb2YgdGhlIGxhc3QgZGF5IG9mIHRoZSB0YXggeWVhciAoZS5nLiwgc2luZ2xlLCBkaXZvcmNlZCwgbGVnYWxseSBzZXBhcmF0ZWQpLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Ib3VzZWhvbGQgRXhwZW5zZXM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgaW5kaWNhdGluZyB0aGF0IHlvdSBwYWlkIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBjb3N0cyBvZiBrZWVwaW5nIHVwIGEgaG9tZSBmb3IgdGhlIHRheCB5ZWFyLiBUaGlzIGluY2x1ZGVzIHJlbnQsIG1vcnRnYWdlIGludGVyZXN0LCBwcm9wZXJ0eSB0YXhlcywgdXRpbGl0aWVzLCByZXBhaXJzLCBtYWludGVuYW5jZSwgYW5kIGdyb2Nlcmllcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UXVhbGlmeWluZyBQZXJzb246PC9zdHJvbmc+IEluZm9ybWF0aW9uIG9uIHRoZSBxdWFsaWZ5aW5nIHBlcnNvbihzKSB3aG8gbGl2ZWQgd2l0aCB5b3UgaW4gdGhlIGhvbWUgZm9yIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSB5ZWFyLCBleGNlcHQgZm9yIHRlbXBvcmFyeSBhYnNlbmNlcyBzdWNoIGFzIHNjaG9vbC4gUGxlYXNlIGluY2x1ZGU6XHJcbiAgICAgIDx1bD5cclxuICAgICAgPGxpPkZ1bGwgbmFtZSBhbmQgcmVsYXRpb25zaGlwIHRvIHlvdSAoZS5nLiwgY2hpbGQsIHBhcmVudCwgc2libGluZykuPC9saT5cclxuICAgICAgPGxpPkR1cmF0aW9uIG9mIHJlc2lkZW5jeSBhdCB5b3VyIGhvbWUgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+U3VwcG9ydGluZyBkb2N1bWVudHMgKGJpcnRoIGNlcnRpZmljYXRlcywgc2Nob29sIHJlY29yZHMsIGV0Yy4pIHByb3ZpbmcgdGhlIHJlc2lkZW5jeSBhbmQgcmVsYXRpb25zaGlwLjwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBTdXBwb3J0Ojwvc3Ryb25nPiBBbnkgZnVydGhlciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgeW91ciBjbGFpbSBmb3IgdGhlIEhlYWQgb2YgSG91c2Vob2xkIGZpbGluZyBzdGF0dXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugbm90ZSB0aGF0IHByb3ZpZGluZyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciB5b3VyIGJlbmVmaXQgYW5kIHRvIGNvbXBseSB3aXRoIHRheCBsYXdzLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRldGFpbHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZXNpZGVuY3kgU3RhdHVzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbmZvcm1hdGlvbiBvbiBSZXNpZGVuY3kgU3RhdHVzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgZWl0aGVyIHlvdSBvciB5b3VyIHNwb3VzZSBpcyBub3QgYSBVLlMuIGNpdGl6ZW4uIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHlvdXIgdGF4IHN0YXR1cywgd2UgbmVlZCB0byBhcHBseSB0aGUgbmVjZXNzYXJ5IFRheCBSZXNpZGVuY3kgVGVzdHMsIHdoaWNoIGluY2x1ZGUgdGhlIDxzdHJvbmc+R3JlZW4gQ2FyZCBUZXN0PC9zdHJvbmc+IGFuZCB0aGUgPHN0cm9uZz5TdWJzdGFudGlhbCBQcmVzZW5jZSBUZXN0PC9zdHJvbmc+LiBUaGlzIHdpbGwgaGVscCB1cyBlbnN1cmUgeW91ciB0YXggcmV0dXJucyBhcmUgY29tcGxldGVkIGNvcnJlY3RseSBhbmQgY29tcGx5IHdpdGggVS5TLiByZWd1bGF0aW9ucy48L3A+XHJcblxyXG4gICAgPHA+VG8gcHJvY2VlZCwgd2Uga2luZGx5IGFzayB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5HcmVlbiBDYXJkIFN0YXR1czo8L3N0cm9uZz4gUGxlYXNlIGNvbmZpcm0gaWYgeW91IG9yIHlvdXIgc3BvdXNlIGhhdmUgYmVlbiBpc3N1ZWQgYSBVLlMuIGdyZWVuIGNhcmQgKExhd2Z1bCBQZXJtYW5lbnQgUmVzaWRlbnQgQ2FyZCkgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgdGF4IHllYXIuIElmIHllcywgcHJvdmlkZSBhIGNvcHkgb2YgdGhlIGdyZWVuIGNhcmQgb3IgdGhlIG9mZmljaWFsIGRvY3VtZW50IGNvbmZpcm1pbmcgdGhlIHN0YXR1cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgQXJyaXZhbCBpbiB0aGUgVS5TLjo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGVzIHdoZW4geW91IGFuZC9vciB5b3VyIHNwb3VzZSBmaXJzdCBhcnJpdmVkIGluIHRoZSBVLlMuIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UcmF2ZWwgSGlzdG9yeTo8L3N0cm9uZz4gQSBkZXRhaWxlZCBsaXN0IG9mIGFsbCB0aGUgZGF0ZXMgeW91IGFuZC9vciB5b3VyIHNwb3VzZSBlbnRlcmVkIGFuZCBsZWZ0IHRoZSBVLlMuIGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdGhlIFN1YnN0YW50aWFsIFByZXNlbmNlIFRlc3QuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5WaXNhIFR5cGU6PC9zdHJvbmc+IElmIHlvdSBvciB5b3VyIHNwb3VzZSBhcmUgb24gYSB2aXNhLCBwbGVhc2Ugc3BlY2lmeSB0aGUgdHlwZSBhbmQgcHJvdmlkZSBhIGNvcHkgb2YgdGhlIHZpc2EuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFRheCBGaWxpbmdzOjwvc3Ryb25nPiBDb3BpZXMgb2YgbGFzdCB5ZWFyJ3MgdGF4IHJldHVybnMsIGlmIGFwcGxpY2FibGUuIFRoaXMgaW5mb3JtYXRpb24gY2FuIHByb3ZpZGUgY29udGV4dCBhbmQgaGVscCBkZXRlcm1pbmUgcmVzaWRlbmN5IHN0YXR1cyBtb3JlIGFjY3VyYXRlbHkuPC9saT5cclxuICAgIDwvb2w+XHJcblxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhciBhbmQgbGVnaWJsZS4gWW91IGNhbiBzZW5kIHRoZW0gdG8gdXMgdmlhIGVtYWlsIG9yIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBGb3IgYW55IHF1ZXN0aW9ucyBvciBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XHJcblxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IHdpdGggeW91ciB0YXggcHJlcGFyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkpvaW50IFRheCBSZWxpZWZcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkpvaW50IFRheCBSZWxpZWYgRGV0YWlsc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gYXNzaXN0IHlvdSBlZmZlY3RpdmVseSB3aXRoIHlvdXIgcmVxdWVzdCBmb3Igam9pbnQgdGF4IHJlbGllZiwgd2UgbmVlZCB0byBjb2xsZWN0IHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgeW91ciBzaXR1YXRpb24gdGhvcm91Z2hseS4gVGhpcyB3aWxsIGhlbHAgdXMgZGV0ZXJtaW5lIHRoZSBtb3N0IHN1aXRhYmxlIHR5cGUgb2YgcmVsaWVmIGZvciB5b3VyIGNpcmN1bXN0YW5jZXMsIHdoaWNoIG1heSBpbmNsdWRlIElubm9jZW50IFNwb3VzZSBSZWxpZWYsIEluanVyZWQgU3BvdXNlIEFsbG9jYXRpb24sIFNlcGFyYXRpb24gb2YgTGlhYmlsaXR5IFJlbGllZiwgb3IgRXF1aXRhYmxlIFJlbGllZi4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Db21wbGV0ZSBUYXggUmV0dXJuczo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCB0YXggcmV0dXJucyBmb3IgdGhlIHllYXJzIHlvdSBhcmUgcmVxdWVzdGluZyByZWxpZWYuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgU3RhdGVtZW50Ojwvc3Ryb25nPiBBIHdyaXR0ZW4gc3RhdGVtZW50IGV4cGxhaW5pbmcgd2h5IHlvdSBiZWxpZXZlIHlvdSBxdWFsaWZ5IGZvciByZWxpZWYsIGluY2x1ZGluZyBhbnkgc3BlY2lmaWMgZXZlbnRzIG9yIGNpcmN1bXN0YW5jZXMgeW91IHdhbnQgdXMgdG8gY29uc2lkZXIuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IFByb29mIG9mIHlvdXIgY3VycmVudCBpbmNvbWUgYW5kIHRoYXQgb2YgeW91ciBzcG91c2UgaWYgYXBwbGljYWJsZSwgc3VjaCBhcyByZWNlbnQgcGF5IHN0dWJzLCBXLTIgZm9ybXMsIG9yIG90aGVyIGluY29tZSBzdGF0ZW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZpbmFuY2lhbCBTaXR1YXRpb246PC9zdHJvbmc+IERvY3VtZW50cyBzaG93aW5nIHlvdXIgY3VycmVudCBmaW5hbmNpYWwgc2l0dWF0aW9uLCBpbmNsdWRpbmcgYmFuayBzdGF0ZW1lbnRzLCBtb250aGx5IGJpbGxzLCBhbmQgYW55IG90aGVyIGxpYWJpbGl0aWVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgTWFyaXRhbCBTdGF0dXM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIGxlZ2FsIGRvY3VtZW50cyByZWxhdGVkIHRvIHNlcGFyYXRpb24sIGRpdm9yY2UsIG9yIGFubnVsbWVudC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZXNpZGVuY2U6PC9zdHJvbmc+IERvY3VtZW50cyB0aGF0IHByb3ZlIHdoZXJlIGVhY2ggb2YgeW91IGhhcyBsaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFycyBpbiBxdWVzdGlvbi48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5BbnkgQ29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgSVJTOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSByZWNlaXZlZCBhbnkgbm90aWNlcyBvciBsZXR0ZXJzIGZyb20gdGhlIElSUyByZWdhcmRpbmcgeW91ciBqb2ludCB0YXggbGlhYmlsaXR5LCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGNsZWFybHkgbGVnaWJsZS4gWW91IG1heSBzZW5kIHRoZW0gdmlhIGVtYWlsLCBvciB1cGxvYWQuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gd2hhdCB0byBwcm92aWRlLCBkb24ndCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHRoaXMgcHJvY2VzcyBjYW4gYmUgY29tcGxleCwgYnV0IHdlIGFyZSBoZXJlIHRvIGd1aWRlIHlvdSB0aHJvdWdoIGl0LiBPdXIgZ29hbCBpcyB0byBlbnN1cmUgd2UgaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB5b3VyIHNpdHVhdGlvbiB0byBhZHZvY2F0ZSBmb3IgdGhlIG1vc3QgZmF2b3JhYmxlIG91dGNvbWUgb24geW91ciBiZWhhbGYuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIjEwOTkgTkVDIEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiMTA5OSBORUMgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgcmVxdWlyZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBhbGwgeW91ciBzb3VyY2VzIG9mIGluY29tZS4gU3BlY2lmaWNhbGx5LCB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHlvdXIgMTA5OSBORUMgSW5jb21lLiBUaGUgMTA5OS1ORUMgZm9ybSBpcyBjcnVjaWFsIGZvciBjb3JyZWN0bHkgcmVwb3J0aW5nIHlvdXIgbm9uLWVtcGxveWVlIGNvbXBlbnNhdGlvbi48L3A+XHJcbiAgICA8cD5UbyBlbnN1cmUgYSB0aG9yb3VnaCBhbmQgYWNjdXJhdGUgdGF4IHByZXBhcmF0aW9uLCBwbGVhc2UgcHJvdmlkZSB1cyB3aXRoIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48Yj5BbGwgMTA5OS1ORUMgZm9ybXM8L2I+IHlvdSByZWNlaXZlZCBmb3IgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxiPmFkZGl0aW9uYWwgbm9uLWVtcGxveWVlIGNvbXBlbnNhdGlvbjwvYj4gbm90IHJlcG9ydGVkIG9uIGEgMTA5OS1ORUMgZm9ybS48L2xpPlxyXG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiByZWdhcmRpbmcgPGI+ZXhwZW5zZXMgcmVsYXRlZCB0byB5b3VyIDEwOTkgTkVDIGluY29tZTwvYj4sIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBub3QgeWV0IHJlY2VpdmVkIGFsbCB5b3VyIDEwOTktTkVDIGZvcm1zLCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCBwcm92aWRlIGFuIGVzdGltYXRlIG9mIHdoZW4geW91IGV4cGVjdCB0byByZWNlaXZlIHRoZW0uIFRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgaW5jb21lIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgcGVuYWx0aWVzIG9yIGF1ZGl0cyBmcm9tIHRoZSBJUlMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHJlYWNoIG91dCB0byB1cyBkaXJlY3RseSBzaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbi4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZCB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIHByb2Nlc3NlZCBlZmZpY2llbnRseSBhbmQgYWNjdXJhdGVseS48L3A+XHJcbmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNjaGVkdWxlIEstMSBJbmZvcm1hdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2NoZWR1bGUgSy0xIEluZm9ybWF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIHRoZSBwcmVzZW5jZSBvZiBTY2hlZHVsZSBLIGluY29tZSBmb3IgdGhlIGN1cnJlbnQgdGF4IHllYXIuIEluIG9yZGVyIHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4sIGl0IGlzIGltcGVyYXRpdmUgdGhhdCB3ZSBnYXRoZXIgYWxsIG5lY2Vzc2FyeSBkb2N1bWVudHMgcmVsYXRlZCB0byB0aGlzIGluY29tZS48L3A+XHJcbiAgICA8cD5JZiB3ZSBhcmUgcHJlcGFyaW5nIHlvdXIgYnVzaW5lc3MgcmV0dXJuLCByZXN0IGFzc3VyZWQgdGhhdCB3ZSB3aWxsIGdlbmVyYXRlIHRoZSBhcHBsaWNhYmxlIFNjaGVkdWxlIEstMShzKSBmb3IgeW91ciBidXNpbmVzcyBpbnRlcmVzdHMuIEhvd2V2ZXIsIGl0IGlzIGVzc2VudGlhbCB0aGF0IHdlIGNvbGxlY3QgY29waWVzIG9mIDxzdHJvbmc+YWxsIG90aGVyIFNjaGVkdWxlIEstMXM8L3N0cm9uZz4geW91IG1heSBoYXZlIHJlY2VpdmVkIHRvIGluY29ycG9yYXRlIGludG8geW91ciBwZXJzb25hbCB0YXggcmV0dXJuLjwvcD4gIFxyXG4gICAgPGgzPlNwZWNpZmljIERvY3VtZW50IFJlcXVlc3Q6PC9oMz5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QW55IGFuZCBhbGwgU2NoZWR1bGUgSy0xKHMpIHlvdSBoYXZlIHJlY2VpdmVkIGZyb206PC9saT5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxsaT5QYXJ0bmVyc2hpcHM8L2xpPlxyXG4gICAgICAgICAgICA8bGk+UyBDb3Jwb3JhdGlvbnM8L2xpPlxyXG4gICAgICAgICAgICA8bGk+RXN0YXRlIG9yIFRydXN0czwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgPHN0cm9uZz5jbGVhciBhbmQgbGVnaWJsZTwvc3Ryb25nPiB0byBwcmV2ZW50IGFueSBkZWxheXMgaW4gcHJvY2Vzc2luZyB5b3VyIHJldHVybi4gWW91IG1heSBzdWJtaXQgdGhlc2UgZG9jdW1lbnRzIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLCBvciBjb250YWN0IHVzIHRvIG1ha2UgYWx0ZXJuYXRpdmUgYXJyYW5nZW1lbnRzIGlmIG5lY2Vzc2FyeS48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYW55IGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJPdGhlciBTZWxmLUVtcGxveW1lbnQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJPdGhlciBTZWxmLUVtcGxveW1lbnQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdGhlIHByZXNlbmNlIG9mIHNlbGYtZW1wbG95bWVudCBpbmNvbWUgbm90IHJlcG9ydGVkIHRocm91Z2ggMTA5OS1ORUMgZm9ybXMgb3IgYSBTY2hlZHVsZSBLLTEuIFRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgYWNjdXJhdGUgYW5kIG1heGltaXplcyB5b3VyIGJlbmVmaXRzLCBpdCdzIGNydWNpYWwgd2UgZ2F0aGVyIG1vcmUgZGV0YWlscyBhYm91dCB0aGVzZSBzb3VyY2VzIG9mIGluY29tZS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgZWFjaCBzZWxmLWVtcGxveW1lbnQgYWN0aXZpdHk6PC9zdHJvbmc+IEJyaWVmbHkgZGVzY3JpYmUgdGhlIG5hdHVyZSBvZiBlYWNoIGFjdGl2aXR5IGZyb20gd2hpY2ggeW91IGRlcml2ZSBzZWxmLWVtcGxveW1lbnQgaW5jb21lLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2Ygb3BlcmF0aW9uOjwvc3Ryb25nPiBGb3IgZWFjaCBzZWxmLWVtcGxveW1lbnQgYWN0aXZpdHksIHNwZWNpZnkgdGhlIGRhdGVzIG9yIHJhbmdlIG9mIGRhdGVzIGR1cmluZyB3aGljaCB5b3UgZWFybmVkIGluY29tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGluY29tZSBnZW5lcmF0ZWQ6PC9zdHJvbmc+IEZvciBlYWNoIGFjdGl2aXR5LCBwcm92aWRlIHRoZSB0b3RhbCBhbW91bnQgb2YgaW5jb21lIGVhcm5lZCBiZWZvcmUgYW55IGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZXMgaW5jdXJyZWQ6PC9zdHJvbmc+IExpc3QgYWxsIGV4cGVuc2VzIHJlbGF0ZWQgdG8gZWFjaCBzZWxmLWVtcGxveW1lbnQgYWN0aXZpdHkuIFBsZWFzZSBjYXRlZ29yaXplIHRoZXNlIGV4cGVuc2VzIChlLmcuLCBvZmZpY2Ugc3VwcGxpZXMsIHRyYXZlbCwgYWR2ZXJ0aXNpbmcpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVjb3JkcyBvciBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZXhpc3RpbmcgcmVjb3JkcyBvciBkb2N1bWVudGF0aW9uIHRoYXQgY29ycm9ib3JhdGUgeW91ciBpbmNvbWUgYW5kIGV4cGVuc2VzLCBzdWNoIGFzIGJhbmsgc3RhdGVtZW50cywgcmVjZWlwdHMsIGludm9pY2VzLCBvciBjb250cmFjdHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBhbW91bnQgb2YgdGF4IHlvdSBvd2UgYW5kIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgZGVkdWN0aW9ucyB0aGF0IGNhbiBtaW5pbWl6ZSB5b3VyIHRheCBsaWFiaWxpdHkuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHRpbWVseSBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLCBhbmQgd2UgYXJlIGhlcmUgdG8gaGVscCBldmVyeSBzdGVwIG9mIHRoZSB3YXkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVtcGxveW1lbnQgV2FnZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkVtcGxveW1lbnQgV2FnZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgZW50cnVzdGluZyB1cyB3aXRoIHRoZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBBcyBwYXJ0IG9mIG91ciBjb21wcmVoZW5zaXZlIHJldmlldyBhbmQgaW4gb3VyIHF1ZXN0IHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgb2YgeW91ciB0YXggZmlsaW5ncywgd2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHdhZ2VzIGZyb20gZW1wbG95bWVudCBvdmVyIHRoZSBwYXN0IHRheCB5ZWFyLjwvcD5cclxuICAgIDxwPlRvIHByb2NlZWQgZWZmZWN0aXZlbHksIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Vy0yIEZvcm1zOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBjb3BpZXMgb2YgYWxsIFctMiBmb3JtcyByZWNlaXZlZCBmcm9tIHlvdXIgZW1wbG95ZXJzLiBUaGlzIGluY2x1ZGVzIHdhZ2VzIGVhcm5lZCBmcm9tIGFsbCBzb3VyY2VzLCBub3QganVzdCBmcm9tIHRoZSBTLUNvcnBvcmF0aW9uLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VmVyaWZpY2F0aW9uIG9mIFMtQ29ycG9yYXRpb24gV2FnZXM6PC9zdHJvbmc+IElmIHdlIGFyZSBhbHNvIGhhbmRsaW5nIHlvdXIgYnVzaW5lc3MgdGF4ZXMgZm9yIGFuIFMtQ29ycG9yYXRpb24sIHdlIGxpa2VseSBoYXZlIHRoZSB3YWdlIGluZm9ybWF0aW9uIGZvciB0aGF0IGVudGl0eS4gSG93ZXZlciwgZm9yIHRob3JvdWdobmVzcyBhbmQgY29tcGxpYW5jZSwgcGxlYXNlIGNvbmZpcm0gaWYgdGhlIHdhZ2VzIGZyb20gdGhlIFMtQ29ycG9yYXRpb24gYXJlIGZ1bGx5IHJlcHJlc2VudGVkIGluIHRoZSBkb2N1bWVudHMgd2UgYWxyZWFkeSBob2xkLiBUaGlzIHdpbGwgaGVscCB1cyB2ZXJpZnkgdGhhdCBhbGwgaW5jb21lIGlzIGFjY3VyYXRlbHkgcmVwb3J0ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BZGRpdGlvbmFsIEluY29tZSBEb2N1bWVudHM6PC9zdHJvbmc+IFNob3VsZCB5b3UgaGF2ZSBvdGhlciBzb3VyY2VzIG9mIHdhZ2UgaW5jb21lIChlLmcuLCBjb250cmFjdCB3b3JrLCBib251c2VzLCBldGMuKSBub3QgY292ZXJlZCBieSB0aGUgVy0yIGZvcm1zIHByb3ZpZGVkLCBwbGVhc2UgaW5jbHVkZSBhbnkgMTA5OSBmb3JtcyBvciBvdGhlciByZWxldmFudCBkb2N1bWVudGF0aW9uLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBLaW5kbHkgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcm9wZXJ0eSBvciBTZXJ2aWNlcyBMaWV1IFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQcm9wZXJ0eS9TZXJ2aWNlcyBpbiBMaWV1IG9mIFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgcHJvcGVydHkgYW5kL29yIHNlcnZpY2VzIGluIGxpZXUgb2YgdHJhZGl0aW9uYWwgd2FnZXMgZHVyaW5nIHRoZSB0YXggeWVhci4gVGhpcyB0eXBlIG9mIGNvbXBlbnNhdGlvbiBjb25zdGl0dXRlcyB0YXhhYmxlIGluY29tZSBhbmQgbXVzdCBiZSBhY2N1cmF0ZWx5IHJlcG9ydGVkIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgZnVsbHkgY29tcGxpYW50IHdpdGggSVJTIHJlZ3VsYXRpb25zLjwvcD5cclxuICAgIDxwPlRvIGFjY3VyYXRlbHkgcmVjb2duaXplIGFuZCByZXBvcnQgdGhlc2UgaXRlbXMgYXMgdGF4YWJsZSBpbmNvbWUsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBQcm9wZXJ0eSBvciBTZXJ2aWNlczo8L3N0cm9uZz4gUHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGFueSBwcm9wZXJ0eSBvciBzZXJ2aWNlcyB5b3UgcmVjZWl2ZWQuIFBsZWFzZSBpbmNsdWRlIHBoeXNpY2FsIGNoYXJhY3RlcmlzdGljcyBmb3IgcHJvcGVydHkgb3IgdGhlIHNjb3BlIG9mIHNlcnZpY2VzIHJlbmRlcmVkLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5GYWlyIE1hcmtldCBWYWx1ZSBhdCBUaW1lIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IEluZGljYXRlIHRoZSBmYWlyIG1hcmtldCB2YWx1ZSAoRk1WKSBvZiBlYWNoIHByb3BlcnR5IG9yIHNlcnZpY2UgYXQgdGhlIHRpbWUgeW91IHJlY2VpdmVkIGl0LiBJZiB5b3UgaGF2ZSBhbnkgYXBwcmFpc2FscyBvciBkb2N1bWVudHMgdG8gc3VwcG9ydCB0aGUgRk1WLCBwbGVhc2UgaW5jbHVkZSB0aGVtLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9yIEFncmVlbWVudHM6PC9zdHJvbmc+IFByb3ZpZGUgYW55IGRvY3VtZW50YXRpb24gb3Igd3JpdHRlbiBhZ3JlZW1lbnRzIHRoYXQgZGV0YWlsIHRoZSBhcnJhbmdlbWVudCBmb3IgcmVjZWl2aW5nIHByb3BlcnR5IG9yIHNlcnZpY2VzIGluIGxpZXUgb2Ygd2FnZXMuIFRoaXMgY2FuIGluY2x1ZGUgY29udHJhY3RzLCBlbWFpbHMsIG9yIGFueSBmb3JtIG9mIGNvbW11bmljYXRpb24gdGhhdCBvdXRsaW5lcyB0aGUgYWdyZWVtZW50LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUocykgb24gd2hpY2ggeW91IHJlY2VpdmVkIHRoZSBwcm9wZXJ0eSBvciBzZXJ2aWNlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIvUHJvdmlkZXIgSW5mb3JtYXRpb246PC9zdHJvbmc+IFByb3ZpZGUgdGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgcHJvdmlkZWQgdGhlIHByb3BlcnR5IG9yIHNlcnZpY2VzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgYXMgcG9zc2libGUuIEluY29tcGxldGUgb3IgaW5hY2N1cmF0ZSBpbmZvcm1hdGlvbiBtYXkgbGVhZCB0byBkZWxheXMgaW4gdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybiBvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhlIElSUy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiByZWdhcmRpbmcgdGhlIGluZm9ybWF0aW9uIHJlcXVlc3RlZCwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBZb3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgYW5kIGNyaXRpY2FsIGZvciB0aGUgdGltZWx5IGFuZCBhY2N1cmF0ZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRW1wbG95ZWUgQWNjb3VudGFibGUgUGxhblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRW1wbG95ZWUgQWNjb3VudGFibGUgUGxhblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGljZWQgeW91J3ZlIG1lbnRpb25lZCBiZWluZyByZWltYnVyc2VkIGZvciBjZXJ0YWluIGV4cGVuc2VzIHVuZGVyIGFuIEVtcGxveWVlIEFjY291bnRhYmxlIFBsYW4uIFRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcmVpbWJ1cnNlbWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGNvcHkgb2YgdGhlIGZvcm1hbCB3cml0dGVuIEFjY291bnRhYmxlIFBsYW4gcHJvdmlkZWQgYnkgeW91ciBlbXBsb3llci4gVGhpcyBzaG91bGQgb3V0bGluZSB0aGUgZXhwZW5zZSBhbGxvd2FuY2UgYW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHJlaW1idXJzZW1lbnQgcG9saWN5LjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIGZyb20geW91ciBlbXBsb3llciBjb25maXJtaW5nIHlvdXIgcGFydGljaXBhdGlvbiBpbiB0aGUgQWNjb3VudGFibGUgUGxhbi48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIHRoZSBleHBlbnNlcyByZWltYnVyc2VkIHVuZGVyIHRoZSBwbGFuLCBpbmNsdWRpbmcgZGF0ZXMsIGFtb3VudHMsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBleHBlbnNlIChyZWNlaXB0cyBvciBpbnZvaWNlcykgcHJvdmlkZWQgdG8geW91ciBlbXBsb3llciBmb3IgcmVpbWJ1cnNlbWVudCB1bmRlciB0aGUgcGxhbi48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIG9yIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIHRoZSByZWltYnVyc2VtZW50cyBvciB0aGUgQWNjb3VudGFibGUgUGxhbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBzZW5kIHVzIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgd2UgY2FuIHByb2NlZWQgc21vb3RobHkgd2l0aCB5b3VyIHRheCByZXR1cm4gcHJlcGFyYXRpb24uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIEZyaW5nZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZW5zdXJpbmcgYWxsIGZvcm1zIG9mIGNvbXBlbnNhdGlvbiwgaW5jbHVkaW5nIHRheGFibGUgZnJpbmdlIGJlbmVmaXRzLCBhcmUgYWNjdXJhdGVseSByZXBvcnRlZCBvbiB5b3VyIHRheCByZXR1cm5zLiBCYXNlZCBvbiBvdXIgcHJldmlvdXMgY29tbXVuaWNhdGlvbiwgaXQgYXBwZWFycyB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgYmVuZWZpdHMgdGhhdCBuZWVkIHRvIGJlIHJldmlld2VkIGZ1cnRoZXIuIFRvIGFzc2lzdCB5b3UgcHJvcGVybHksIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBkZXRhaWxzOjwvcD5cclxuPG9sPlxyXG4gIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIGVhY2ggYmVuZWZpdCByZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZnJpbmdlIGJlbmVmaXRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcGFueSBjYXJzLCBtZW1iZXJzaGlwcywgZWR1Y2F0aW9uYWwgYXNzaXN0YW5jZSwgZXRjLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+VmFsdWUgb2YgZWFjaCBiZW5lZml0Ojwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBiZW5lZml0LiBJZiB5b3UncmUgdW5zdXJlLCBwbGVhc2UgcHJvdmlkZSBhbiBlc3RpbWF0ZSBhbmQgdGhlIGJhc2lzIGZvciB0aGlzIGVzdGltYXRlLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+QW55IGFtb3VudHMgY29udHJpYnV0ZWQgYnkgeW91Ojwvc3Ryb25nPiBJZiB5b3UgbWFkZSBjb250cmlidXRpb25zIHRvd2FyZCB0aGUgY29zdCBvZiBhbnkgYmVuZWZpdCwgcGxlYXNlIHNwZWNpZnkgdGhlIGFtb3VudHMgYW5kIGZvciB3aGljaCBiZW5lZml0cy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkJlbmVmaXQgZG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkLCBzdWNoIGFzIHN0YXRlbWVudHMsIGFncmVlbWVudHMsIG9yIHJlY2VpcHRzLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+RGF0ZXM6PC9zdHJvbmc+IFRoZSBwZXJpb2QgZHVyaW5nIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBiZW5lZml0cy4gSW5jbHVkZSBzcGVjaWZpYyBkYXRlcyBpZiBwb3NzaWJsZS48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkVtcGxveWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgZW1wbG95ZXIocykgcHJvdmlkaW5nIHRoZXNlIGJlbmVmaXRzLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyB0aGUgdGF4YWJsZSB2YWx1ZSBvZiB0aGVzZSBmcmluZ2UgYmVuZWZpdHMgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbjxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOb24gVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk5vbiBUYXhhYmxlIEZyaW5nZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGZpbmFsaXppbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIGlkZW50aWZpZWQgcG90ZW50aWFsIG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyB0aGF0IG1heSBhcHBseSB0byB5b3VyIHNpdHVhdGlvbi4gVG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgb3B0aW1pemUgeW91ciB0YXggb3V0Y29tZSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYW55IG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQ6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBlYWNoIGJlbmVmaXQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIG1heSBpbmNsdWRlIGhlYWx0aCBzYXZpbmdzIGFjY291bnRzIChIU0FzKSwgZW1wbG95ZWUgZGlzY291bnRzLCBwdWJsaWMgdHJhbnNpdCBwYXNzZXMsIGV0Yy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5WYWx1ZSBvZiBlYWNoIGJlbmVmaXQ6PC9zdHJvbmc+IFRoZSBmYWlyIG1hcmtldCB2YWx1ZSAoRk1WKSBvZiBlYWNoIGJlbmVmaXQuIEZvciBub24tdGF4YWJsZSBiZW5lZml0cywgdGhpcyBoZWxwcyBpbiByZWNvcmQta2VlcGluZyBhbmQgY29uZmlybWluZyBleGVtcHRpb24gc3RhdHVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNvbnRyaWJ1dGlvbiBhbW91bnRzLCBpZiBhbnk6PC9zdHJvbmc+IElmIHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvd2FyZHMgYW55IG9mIHRoZXNlIGJlbmVmaXRzLCBpbmRpY2F0ZSB0aGUgYW1vdW50cyBhbmQgZm9yIHdoaWNoIGJlbmVmaXRzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkJlbmVmaXQgZG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IGRvY3VtZW50YXRpb24gdGhhdCBjYW4gY29ycm9ib3JhdGUgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkLCBzdWNoIGFzIHN0YXRlbWVudHMsIGFncmVlbWVudHMsIG9yIHJlY2VpcHRzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSB0aW1lZnJhbWUgZHVyaW5nIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBiZW5lZml0cy4gSW5jbHVkZSBhcyBwcmVjaXNlIGRhdGVzIGFzIHBvc3NpYmxlLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkVtcGxveWVyIG9yIHByb3ZpZGVyIGluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgbmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBlbXBsb3llcihzKSBvciB0aGlyZC1wYXJ0eSBwcm92aWRlcihzKSBvZmZlcmluZyB0aGVzZSBiZW5lZml0cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uIGhlbHBzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCB0aGF0IHlvdSByZWNlaXZlIHRoZSBmdWxsIGFkdmFudGFnZSBvZiBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMuIFBsZWFzZSBsZXQgdXMga25vdyBpZiB5b3UgbmVlZCBhbnkgaGVscCBpZGVudGlmeWluZyBvciBkb2N1bWVudGluZyB0aGVzZSBiZW5lZml0cy48L3A+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSBpcyBoaWdobHkgYXBwcmVjaWF0ZWQgYXMgd2Ugc3RyaXZlIHRvIGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uIGVmZmljaWVudGx5LiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlZldGVyYW4gQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlZBIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnQgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IHJldHVybiwgd2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIFZldGVyYW4gQmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYmVuZWZpdHMsIHdlIGtpbmRseSByZXF1ZXN0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxyXG4gICAgPHA+VG8gYXNzaXN0IHVzIGluIHRoaXMgdGFzaywgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiB0aGUgVmV0ZXJhbiBCZW5lZml0cyB5b3UgcmVjZWl2ZWQsIGluY2x1ZGluZyBhbnkgZGlzYWJpbGl0eSwgZWR1Y2F0aW9uLCBhbmQgcGVuc2lvbiBiZW5lZml0cy48L2xpPlxyXG4gICAgICAgIDxsaT5PZmZpY2lhbCBkb2N1bWVudGF0aW9uIGZvciBlYWNoIHR5cGUgb2YgYmVuZWZpdCByZWNlaXZlZCwgc3VjaCBhcyBhd2FyZCBsZXR0ZXJzIG9yIHN0YXRlbWVudHMgZnJvbSB0aGUgRGVwYXJ0bWVudCBvZiBWZXRlcmFucyBBZmZhaXJzIChWQSkuPC9saT5cclxuICAgICAgICA8bGk+QW55IGNvcnJlc3BvbmRlbmNlIGZyb20gdGhlIFZBIG9yIG90aGVyIHJlbGV2YW50IGVudGl0aWVzIHJlZ2FyZGluZyB0aGUgdGF4YWJpbGl0eSBvZiB5b3VyIGJlbmVmaXRzLjwvbGk+XHJcbiAgICAgICAgPGxpPlRvdGFsIGFtb3VudCByZWNlaXZlZCBmb3IgZWFjaCBiZW5lZml0IHRocm91Z2hvdXQgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBvdGhlciBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gcHJvdmlkZSBjbGFyaXR5IG9uIHRoZSBuYXR1cmUgYW5kIGFtb3VudCBvZiB5b3VyIFZldGVyYW4gQmVuZWZpdHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHdoaWNoIGJlbmVmaXRzIGFyZSB0YXhhYmxlIGFuZCBlbnN1cmluZyB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGUgYW5kIGFjY3VyYXRlLiBQbGVhc2Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gVGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkxpZmUgSW5zdXJhbmNlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJMaWZlIEluc3VyYW5jZSBQYXltZW50c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIG1lbnRpb24gb2YgcmVjZWl2aW5nIGxpZmUgaW5zdXJhbmNlIHBheW1lbnRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgdGhlc2UgcHJvY2VlZHMgYXJlIGluZGVlZCBub24tdGF4YWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCByZWNlaXZlZCBmcm9tIGxpZmUgaW5zdXJhbmNlIHBheW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgcGVydGFpbmluZyB0byB0aGUgbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMuPC9saT5cclxuICAgICAgPGxpPlRoZSBuYW1lIG9mIHRoZSBpbnN1cmVkIGluZGl2aWR1YWwgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UuPC9saT5cclxuICAgICAgPGxpPkFueSBjb21tdW5pY2F0aW9ucyBvciBsZXR0ZXJzIGZyb20gdGhlIGluc3VyYW5jZSBjb21wYW55IHJlZ2FyZGluZyB0aGUgdGF4IHN0YXR1cyBvZiB0aGVzZSBwYXltZW50cy48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlscyByZWdhcmRpbmcgaWYgdGhlIHBvbGljeSB3YXMgcHVyY2hhc2VkIHdpdGggYWZ0ZXItdGF4IG9yIHByZS10YXggZG9sbGFycy48L2xpPlxyXG4gICAgICA8bGk+SWYgYW55IHBvcnRpb24gb2YgdGhlIGxpZmUgaW5zdXJhbmNlIHBheW1lbnQgd2FzIGFuIGludmVzdG1lbnQgcmV0dXJuLCBwbGVhc2UgcHJvdmlkZSByZWxhdGVkIGRvY3VtZW50cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gZ3VhcmFudGVlIHRoZSBhY2N1cmFjeSBhbmQgaW50ZWdyaXR5IG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk1lZGljYXJlIFdhaXZlciBQYXltZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zLCB3ZSBub3RlZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIE1lZGljYXJlIFdhaXZlciBQYXltZW50cyB1bmRlciB0aGUgZGlmZmljdWx0eS1vZi1jYXJlIHByb3Zpc2lvbnMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gZW5zdXJlIHdlIG1heGltaXplIHlvdXIgZWxpZ2libGUgaW5jb21lIGV4Y2x1c2lvbnMsIGl0J3MgY3J1Y2lhbCB3ZSB2ZXJpZnkgY2VydGFpbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBsaXZpbmcgYXJyYW5nZW1lbnQsIGFzIHBlciBJUlMgZ3VpZGVsaW5lcy48L3A+XHJcbiAgICA8cD5UbyBhc3Npc3QgdXMgaW4gY29uZmlybWluZyB0aGF0IHRoZXNlIHBheW1lbnRzIHF1YWxpZnkgZm9yIGluY29tZSBleGNsdXNpb24sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jZTo8L3N0cm9uZz4gRG9jdW1lbnRzIHByb3ZpbmcgdGhhdCB5b3UgYW5kIHRoZSBpbmRpdmlkdWFsIHVuZGVyIGNhcmUgc2hhcmVkIHRoZSBzYW1lIHByaW1hcnkgcmVzaWRlbmNlIGR1cmluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBwYXltZW50cy4gVGhpcyBjb3VsZCBpbmNsdWRlIHV0aWxpdHkgYmlsbHMsIGEgcmVudGFsIGFncmVlbWVudCwgb3IgaG9tZW93bmVyJ3MgaW5zdXJhbmNlIGluIGJvdGggb2YgeW91ciBuYW1lcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIENhcmUgUmVjaXBpZW50Ojwvc3Ryb25nPiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVyc29uIHJlY2VpdmluZyBjYXJlLCBpbmNsdWRpbmcgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHlvdSBhbmQgYW55IGRvY3VtZW50YXRpb24gdGhhdCBpZGVudGlmaWVzIHRoZWlyIG5lZWQgZm9yIGNhcmUgKGUuZy4sIGEgbGV0dGVyIGZyb20gYSBoZWFsdGhjYXJlIHByb3ZpZGVyKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBheW1lbnQgUmVjb3Jkczo8L3N0cm9uZz4gQW55IHJlY29yZHMgb2YgdGhlIE1lZGljYXJlIFdhaXZlciBQYXltZW50cyB5b3UgcmVjZWl2ZWQsIGFzIHRoaXMgd2lsbCBoZWxwIHVzIGRldGVybWluZSB0aGUgZXhhY3QgYW1vdW50cyBhbmQgdGhlIHBlcmlvZHMgY292ZXJlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBGb3JtYWwgQWdyZWVtZW50cyBvciBDb250cmFjdHM6PC9zdHJvbmc+IElmIHRoZXJlIHdhcyBhIGZvcm1hbCBhZ3JlZW1lbnQgb3IgY29udHJhY3QgZGV0YWlsaW5nIHRoZSBjYXJlIHByb3ZpZGVkLCBwbGVhc2UgaW5jbHVkZSB0aGlzIGFzIHdlbGwuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaWYgdGhlIGNhcmUgYXJyYW5nZW1lbnQgd2FzIGZhY2lsaXRhdGVkIHRocm91Z2ggYSBzdGF0ZSBvciB0aGlyZC1wYXJ0eSBhZ2VuY3kuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIHRvIGVuc3VyZSB3ZSBjb21wbHkgd2l0aCB0YXhpbmcgYXV0aG9yaXRpZXMgd2hpbGUgYWNjdXJhdGVseSByZWZsZWN0aW5nIHlvdXIgZmluYW5jZXMuIElmIGFueSBvZiB0aGVzZSByZXF1aXJlbWVudHMgcG9zZSBhIGRpZmZpY3VsdHkgb3IgaWYgeW91IGhhdmUgcXVlc3Rpb25zLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gT3VyIGdvYWwgaXMgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MgYW5kIG9wdGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNhYmlsaXR5IEluc3VyYW5jZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzYWJpbGl0eSBJbnN1cmFuY2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBkaXNhYmlsaXR5IGluc3VyYW5jZSBiZW5lZml0cyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB0aGVzZSBiZW5lZml0cyBhcmUgZWxpZ2libGUgdG8gYmUgZXhjbHVkZWQgZnJvbSB5b3VyIGluY29tZSwgd2UgcmVxdWlyZSBmdXJ0aGVyIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBpbnN1cmFuY2UgcHJlbWl1bXMgcGFpZC48L3A+XHJcbiAgICA8cD5LaW5kbHkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IG9mIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgc3RhdGVtZW50cyBvciBkb2N1bWVudGF0aW9uIHNob3dpbmcgdGhlIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiBvbiB3aG8gcGFpZCB0aGUgaW5zdXJhbmNlIHByZW1pdW1zICh5b3Ugb3IgeW91ciBlbXBsb3llcikuPC9saT5cclxuICAgICAgICA8bGk+SWYgeW91IGhhdmUgY29udHJpYnV0ZWQgdG8gdGhlIHBheW1lbnQgb2YgdGhlIHByZW1pdW1zOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCB5b3UgcGFpZCB0b3dhcmRzIHRoZSBwcmVtaXVtcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBzdXBwb3J0aW5nIGRvY3VtZW50cyBmb3IgdGhlIHBheW1lbnRzIG1hZGUgYnkgeW91IChyZWNlaXB0cyBvciBiYW5rIHN0YXRlbWVudHMpLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+SWYgeW91ciBlbXBsb3llciBjb250cmlidXRlZCB0byB0aGUgcGF5bWVudCBvZiB0aGUgcHJlbWl1bXM6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHBhaWQgYnkgeW91ciBlbXBsb3llciB0b3dhcmRzIHRoZSBwcmVtaXVtcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBkb2N1bWVudHMgaW5kaWNhdGluZyBlbXBsb3llciBjb250cmlidXRpb25zIChwYXkgc3R1YnMsIGVtcGxveWVyIGxldHRlcnMpLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGRldGVybWluZSB0aGUgdGF4YWJsZSBwb3J0aW9uLCBpZiBhbnksIG9mIHlvdXIgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMuIFByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIHdpbGwgaGVscCB1cyBlbnN1cmUgdGhlIGFjY3VyYWN5IG9mIHlvdXIgdGF4IGZpbGluZyBhbmQgcG90ZW50aWFsbHkgbG93ZXIgeW91ciB0YXhhYmxlIGluY29tZS48L3A+XHJcbiAgICA8cD5QbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dCBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGlmIHdlIGNhbiBiZSBvZiBmdXJ0aGVyIGFzc2lzdGFuY2UuIFdlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNhYmlsaXR5IFJldGlyZW1lbnQgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRpc2FiaWxpdHkgUmV0aXJlbWVudCBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIEluIG9yZGVyIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoZXNlIGJlbmVmaXRzLCB3ZSBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscy4gVGhlIHRheGFiaWxpdHkgb2YgdGhlc2UgYmVuZWZpdHMgY2FuIGRlcGVuZCBvbiB3aGVuIHlvdSB0b29rIHJldGlyZW1lbnQgZHVlIHRvIGRpc2FiaWxpdHkuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJldGlyZW1lbnQ6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIHlvdSByZXRpcmVkIGR1ZSB0byBkaXNhYmlsaXR5LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBEaXNhYmlsaXR5IFJldGlyZW1lbnQ6PC9zdHJvbmc+IEFueSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIHlvdSBoYXZlIHRoYXQgY29uZmlybXMgeW91ciByZXRpcmVtZW50IHdhcyBkdWUgdG8gZGlzYWJpbGl0eS4gVGhpcyBtYXkgaW5jbHVkZSBsZXR0ZXJzIGZyb20geW91ciBlbXBsb3llciwgdGhlIHJldGlyZW1lbnQgcGxhbiwgb3IgbWVkaWNhbCByZWNvcmRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiBCZW5lZml0cyBSZWNlaXZlZDo8L3N0cm9uZz4gU3BlY2lmaWMgYW1vdW50cyBhbmQgdGhlIHNvdXJjZSBvZiB0aGUgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzLiBQbGVhc2UgaW5jbHVkZSBhbnkgcmVsYXRlZCBkb2N1bWVudHMgc3VjaCBhcyBzdGF0ZW1lbnRzIG9yIG5vdGljZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFctMiBvciAxMDk5IEZvcm1zOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZWQgYW55IHdhZ2VzIG9yIGRpc2FiaWxpdHkgcGF5bWVudHMgdGhhdCB3ZXJlIHJlcG9ydGVkIG9uIFctMiBvciAxMDk5IGZvcm1zIGluIHRoZSB5ZWFyIG9mIHlvdXIgcmV0aXJlbWVudCwgcGxlYXNlIHByb3ZpZGUgdGhlc2UgZm9ybXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgQ29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgSVJTOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSByZWNlaXZlZCBhbnkgbm90aWNlcyBvciBsZXR0ZXJzIGZyb20gdGhlIElSUyByZWdhcmRpbmcgeW91ciBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMsIHBsZWFzZSBpbmNsdWRlIGNvcGllcyBvZiB0aGVzZSBjb21tdW5pY2F0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoZSBhYm92ZSBpbmZvcm1hdGlvbiBpcyB2aXRhbCB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzIHdpbGwgYWlkIHVzIGluIGRldGVybWluaW5nIHRoZWlyIHRheGFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoYXQgeW91ciB0YXggb2JsaWdhdGlvbnMgYXJlIHByZWNpc2VseSBjYWxjdWxhdGVkLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLiBZb3VyIHByb21wdCByZXNwb25zZSBpcyBoaWdobHkgYXBwcmVjaWF0ZWQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNsZXJneSBXYWdlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2xlcmd5IFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgVy0yIHdhZ2VzIGFzIGEgY2xlcmd5IG1lbWJlci4gVG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgdG8gcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIHJlcXVpcmUgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGNvbXBlbnNhdGlvbiBwYWNrYWdlLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+Vy0yIEZvcm06PC9iPiBJZiBub3QgYWxyZWFkeSBwcm92aWRlZCwgaW5jbHVkZSBhbnkgVy0yIGZvcm1zIGlzc3VlZCBieSB5b3VyIHJlbGlnaW91cyBpbnN0aXR1dGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Ib3VzaW5nIEFsbG93YW5jZSBEb2N1bWVudGF0aW9uOjwvYj4gRGV0YWlsZWQgc3RhdGVtZW50IG9yIGxldHRlciBmcm9tIHlvdXIgcmVsaWdpb3VzIGluc3RpdHV0aW9uIHNwZWNpZnlpbmcgdGhlIGFtb3VudCBkZXNpZ25hdGVkIGFzIGhvdXNpbmcgYWxsb3dhbmNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlNlbGYtRW1wbG95bWVudCBUYXg6PC9iPiBDb25maXJtYXRpb24gb24gd2hldGhlciB5b3UgaGF2ZSB0YWtlbiBhIHZvdyBvZiBwb3ZlcnR5IChpZiBhcHBsaWNhYmxlKSwgb3IgYW55IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBvcHRpbmcgb3V0IG9mIHNlbGYtZW1wbG95bWVudCB0YXguPC9saT5cclxuICAgICAgICA8bGk+PGI+RXhwZW5zZSBSZWltYnVyc2VtZW50czo8L2I+IERvY3VtZW50YXRpb24gc2hvd2luZyBhbnkgZXhwZW5zZSByZWltYnVyc2VtZW50cyByZWNlaXZlZCB1bmRlciBhbiBhY2NvdW50YWJsZSBwbGFuLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPk90aGVyIENvbXBlbnNhdGlvbjo8L2I+IEluZm9ybWF0aW9uIG9uIGFueSBvdGhlciBjb21wZW5zYXRpb24gcmVjZWl2ZWQgaW4geW91ciBjYXBhY2l0eSBhcyBjbGVyZ3ksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG92ZSBvZmZlcmluZ3MsIGZlZXMgZm9yIHNlcnZpY2VzICh3ZWRkaW5ncywgZnVuZXJhbHMsIGV0Yy4pLCBhbmQgcGFyc29uYWdlIGFsbG93YW5jZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGFjY3VyYXRlbHkgcmVwcmVzZW50IHlvdXIgZWFybmluZ3MgYW5kIHRvIGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGRlZHVjdGlvbnMgY29ycmVjdGx5LiBZb3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IHdpbGwgaGVscCBlbnN1cmUgdGhhdCB5b3VyIHRheCByZXR1cm5zIGFyZSBwcmVwYXJlZCBpbiBhIHRpbWVseSBhbmQgZWZmaWNpZW50IG1hbm5lci48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UgYXJlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhpcyBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSW50ZXJlc3QgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbnRlcmVzdCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIHJldmlld2luZyB5b3VyIGZpbmFuY2lhbCBhY3Rpdml0aWVzIGZvciB0aGUgdGF4IHllYXIsIHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGludGVyZXN0IGluY29tZS4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheGFiaWxpdHkgb2YgdGhpcyBpbmNvbWUgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIGFkZGl0aW9uYWwgZGV0YWlscy4gS2luZGx5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48Yj5Tb3VyY2Ugb2YgSW50ZXJlc3QgSW5jb21lOjwvYj4gUGxlYXNlIHNwZWNpZnkgdGhlIGluc3RpdHV0aW9uKHMpIG9yIGVudGl0eShpZXMpIGZyb20gd2hpY2ggeW91IHJlY2VpdmVkIGludGVyZXN0IGluY29tZSAoZS5nLiwgYmFua3MsIGNyZWRpdCB1bmlvbnMpLjwvbGk+XHJcbiAgICAgIDxsaT48Yj5BbW91bnQgUmVjZWl2ZWQ6PC9iPiBDb25maXJtIHRoZSB0b3RhbCBhbW91bnQgb2YgaW50ZXJlc3QgaW5jb21lIHJlY2VpdmVkIGZyb20gZWFjaCBzb3VyY2UgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+PGI+QWNjb3VudCBUeXBlczo8L2I+IElkZW50aWZ5IHRoZSB0eXBlIG9mIGFjY291bnRzIHRoYXQgZ2VuZXJhdGVkIHRoZSBpbnRlcmVzdCAoZS5nLiwgc2F2aW5ncywgY2hlY2tpbmcsIGNlcnRpZmljYXRlcyBvZiBkZXBvc2l0KS48L2xpPlxyXG4gICAgICA8bGk+PGI+VGF4IEZvcm1zIFJlY2VpdmVkOjwvYj4gTGlzdCBhbnkgdGF4IGZvcm1zIHlvdSBoYXZlIHJlY2VpdmVkIHJlbGF0ZWQgdG8gaW50ZXJlc3QgaW5jb21lLCBzdWNoIGFzIEZvcm0gMTA5OS1JTlQgb3IgRm9ybSAxMDk5LU9JRC48L2xpPlxyXG4gICAgICA8bGk+PGI+Rm9yZWlnbiBJbnRlcmVzdDo8L2I+IElmIGFueSBpbnRlcmVzdCBpbmNvbWUgd2FzIGVhcm5lZCBmcm9tIGZvcmVpZ24gYWNjb3VudHMgb3Igc291cmNlcywgcGxlYXNlIHByb3ZpZGUgZGV0YWlscywgaW5jbHVkaW5nIHRoZSBjb3VudHJ5IG9mIG9yaWdpbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIHdpbGwgZW5hYmxlIHVzIHRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgaW50ZXJlc3QgaW5jb21lIGFuZCBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBjb3JyZWN0LiBZb3UgY2FuIGF0dGFjaCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYnkgcmVwbHlpbmcgdG8gdGhpcyBlbWFpbCBvciB1cGxvYWRpbmcgdGhlbSBkaXJlY3RseSB0byBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJCYW5rIEFjY291bnQgT3BlbmluZyBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQmFuayBBY2NvdW50IE9wZW5pbmcgR2lmdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiByZXZpZXdpbmcgeW91ciB0YXggc2l0dWF0aW9uIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGEgZ2lmdCBmb3Igb3BlbmluZyBhbiBhY2NvdW50IGF0IGEgZmluYW5jaWFsIGluc3RpdHV0aW9uLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgdGF4YWJpbGl0eSBvZiB0aGlzIGluY29tZSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPlRoZSBuYW1lIG9mIHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb24gd2hlcmUgdGhlIGFjY291bnQgd2FzIG9wZW5lZC48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgZGF0ZSB0aGUgYWNjb3VudCB3YXMgb3BlbmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGdpZnQgcmVjZWl2ZWQgKGUuZy4sIGNhc2gsIG1lcmNoYW5kaXNlLCBvciBzZXJ2aWNlcykuPC9saT5cclxuICAgICAgICA8bGk+VGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIHRoZSBnaWZ0IGF0IHRoZSB0aW1lIGl0IHdhcyByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiBwcm92aWRlZCBieSB0aGUgZmluYW5jaWFsIGluc3RpdHV0aW9uIHJlZ2FyZGluZyB0aGUgZ2lmdCAoZS5nLiwgYSBsZXR0ZXIsIGVtYWlsIGNvbmZpcm1hdGlvbiwgb3Igc3RhdGVtZW50IGluZGljYXRpbmcgdGhlIHZhbHVlIG9mIHRoZSBnaWZ0KS48L2xpPlxyXG4gICAgICAgIDxsaT5Db25maXJtYXRpb24gaWYgeW91IGhhdmUgcmVjZWl2ZWQgbW9yZSB0aGFuIG9uZSBnaWZ0IGZvciBvcGVuaW5nIGFjY291bnRzIHdpdGhpbiB0aGUgc2FtZSB0YXggeWVhciwgYW5kIGlmIHNvLCB0aGUgZGV0YWlscyBmb3IgZWFjaC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBjb21wbHkgd2l0aCBhbGwgSVJTIHJlcXVpcmVtZW50cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ0QgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkNEIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBlbnN1cmUgYWNjdXJhdGUgcmVwb3J0aW5nIG9mIHlvdXIgaW5jb21lIGZyb20gQ2VydGlmaWNhdGVzIG9mIERlcG9zaXQgKENEcykgZm9yIHRoZSB0YXggeWVhciwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gY29tcGx5IHdpdGggSVJTIHJlZ3VsYXRpb25zIGFuZCB0byBwb3RlbnRpYWxseSBvcHRpbWl6ZSB5b3VyIHRheCBiZW5lZml0cy48L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TmFtZSBvZiB0aGUgQmFuayBvciBGaW5hbmNpYWwgSW5zdGl0dXRpb246PC9zdHJvbmc+IFdoZXJlIHRoZSBDRCBpcyBoZWxkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWNjb3VudCBOdW1iZXI6PC9zdHJvbmc+IFRoaXMgaGVscHMgaW4gaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIENELjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgSW50ZXJlc3QgRWFybmVkOjwvc3Ryb25nPiBUaGUgYW1vdW50IG9mIGludGVyZXN0IGVhcm5lZCBmcm9tIHRoZSBDRCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q0QgVGVybTo8L3N0cm9uZz4gVGhlIGR1cmF0aW9uIG9yIHRlcm0gb2YgdGhlIENEIChlLmcuLCA2IG1vbnRocywgMSB5ZWFyKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUHVyY2hhc2U6PC9zdHJvbmc+IFdoZW4geW91IG9yaWdpbmFsbHkgYWNxdWlyZWQgdGhlIENELjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TWF0dXJpdHkgRGF0ZTo8L3N0cm9uZz4gV2hlbiB0aGUgQ0QgcmVhY2hlZCBvciB3aWxsIHJlYWNoIGl0cyBmdWxsIHRlcm0uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5LUlOVCBGb3Jtczo8L3N0cm9uZz4gSWYgcmVjZWl2ZWQsIHBsZWFzZSBpbmNsdWRlIGNvcGllcyBvZiBhbnkgMTA5OS1JTlQgZm9ybXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDRCBpbnRlcmVzdC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIHRpbWVseSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCBkb2N1bWVudHMuIFlvdSBtYXkgdXBsb2FkIHRoZSBkb2N1bWVudHMgZGlyZWN0bHkgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgcHJvdmlkZSB0aGVtIHZpYSBlbWFpbC48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4IEV4ZW1wdCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4IEV4ZW1wdCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHRheC1leGVtcHQgaW50ZXJlc3QgZHVyaW5nIHRoZSB0YXggeWVhciwgcG9zc2libHkgZnJvbSBtdW5pY2lwYWwgYm9uZHMgb3Igc2ltaWxhciBpbnZlc3RtZW50cy4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnRzIG9mIFRheC1FeGVtcHQgSW50ZXJlc3Q6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFsbCAxMDk5LUlOVCBmb3JtcyBvciBlcXVpdmFsZW50IHN0YXRlbWVudHMgdGhhdCBkZXRhaWwgeW91ciB0YXgtZXhlbXB0IGludGVyZXN0IGluY29tZSBmb3IgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiBJc3N1aW5nIEVudGl0aWVzOjwvc3Ryb25nPiBBIGxpc3Qgb3Igc3RhdGVtZW50IGlkZW50aWZ5aW5nIHRoZSBlbnRpdGllcyB0aGF0IGlzc3VlZCB0aGUgYm9uZHMgb3Igc2ltaWxhciBpbnZlc3RtZW50cy4gVGhpcyBpbmNsdWRlcyBtdW5pY2lwYWwsIHN0YXRlLCBvciBmZWRlcmFsIGVudGl0aWVzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBEZXRhaWw6PC9zdHJvbmc+IEEgYnJlYWtkb3duIG9mIHRoZSBpbnZlc3RtZW50cyBjb250cmlidXRpbmcgdG8gdGF4LWV4ZW1wdCBpbnRlcmVzdC4gVGhpcyBzaG91bGQgaW5jbHVkZSB0aGUgcHVyY2hhc2UgZGF0ZSwgcHVyY2hhc2UgYW1vdW50cywgYW5kIGFueSByZWxhdGVkIG1hdHVyaXR5IGRhdGVzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QnJva2VyYWdlIEFjY291bnQgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIHlvdXIgYnJva2VyYWdlIGFjY291bnQgc3RhdGVtZW50cyB0aGF0IGRldGFpbCB0cmFuc2FjdGlvbnMgYW5kIGhvbGRpbmdzIGluIHRheC1leGVtcHQgaW52ZXN0bWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BTVQgKEFsdGVybmF0aXZlIE1pbmltdW0gVGF4KSBDb25zaWRlcmF0aW9uOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIGRvY3VtZW50YXRpb24gaW5kaWNhdGluZyB3aGV0aGVyIGFueSBvZiB0aGUgdGF4LWV4ZW1wdCBpbnRlcmVzdCBpcyBzdWJqZWN0IHRvIHRoZSBBbHRlcm5hdGl2ZSBNaW5pbXVtIFRheC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYW4gYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gUGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBBcyBwYXJ0IG9mIG91ciBjb250aW51ZWQgZWZmb3J0IHRvIHByb3ZpZGUgeW91IHdpdGggdGhlIGJlc3QgdGF4IHByZXBhcmF0aW9uIHNlcnZpY2VzLCB3ZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBuZWNlc3NhcnkgZG9jdW1lbnRhdGlvbiByZWxhdGVkIHRvIHRoZSBpbnRlcmVzdCB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgZnJvbSByZWRlZW1pbmcgYW4gRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kLjwvcD5cclxuXHJcbiAgICA8cD5UbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgZWxpZ2liaWxpdHkgZm9yIGV4ZW1wdGlvbiBhbmQgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTLCB3ZSBraW5kbHkgcmVxdWVzdCB5b3UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBjb3B5IG9mIEZvcm0gMTA5OS1JTlQgb3Igc2ltaWxhciBzdGF0ZW1lbnQgcHJvdmlkZWQgYnkgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiwgaW5kaWNhdGluZyB0aGUgYW1vdW50IG9mIGludGVyZXN0IHJlY2VpdmVkIGZyb20gdGhlIEVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZC48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxlZCByZWNvcmRzIG9mIHRoZSBFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmRzIHJlZGVlbWVkIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkJvbmQgc2VyaWFsIG51bWJlcnM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPklzc3VlIGRhdGVzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5SZWRlbXB0aW9uIGRhdGVzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5SZWNlaXB0cyBvciBkb2N1bWVudGF0aW9uIGZvciBxdWFsaWZpZWQgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgcGFpZCBkdXJpbmcgdGhlIHllYXIsIGluY2x1ZGluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlR1aXRpb24gYW5kIGZlZXM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvdXJzZSBtYXRlcmlhbHM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBvdGhlciByZXF1aXJlZCBleHBlbnNlcyBmb3IgZW5yb2xsbWVudCBvciBhdHRlbmRhbmNlIGF0IGFuIGVsaWdpYmxlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBlbnJvbGxtZW50IGZyb20gYW4gZWxpZ2libGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24gZm9yIHRoZSBiZW5lZmljaWFyeSBvZiB0aGUgYm9uZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheGFiaWxpdHkgb2YgdGhlIGludGVyZXN0IGluY29tZSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemluZyB5b3VyIHRheCBiZW5lZml0cy4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCByZWNvbW1lbmQgY29tcGlsaW5nIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGl2aWRlbmQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXZpZGVuZCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBkaXZpZGVuZCBpbmNvbWUgb3ZlciB0aGUgcGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgaW5jb21lIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCBzaXR1YXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbiBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+QWxsIDEwOTktRElWIGZvcm1zIHJlY2VpdmVkIGZyb20gY29ycG9yYXRpb25zIG9yIG11dHVhbCBmdW5kcy4gVGhpcyBpbmNsdWRlcyBkaXN0cmlidXRpb25zIG9mIGNhc2gsIHN0b2NrLCBvciBvdGhlciBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+SWYgYXBwbGljYWJsZSwgZGV0YWlscyByZWdhcmRpbmcgYW55IGZvcmVpZ24gZGl2aWRlbmRzIGluY2x1ZGluZyB0aGUgYW1vdW50IGluIGZvcmVpZ24gY3VycmVuY3ksIHRoZSBjb3VudHJ5IG9mIG9yaWdpbiwgYW5kIGFueSBmb3JlaWduIHRheCBwYWlkLjwvbGk+XHJcbiAgICAgIDxsaT5Gb3IgZGl2aWRlbmRzIHJlaW52ZXN0ZWQsIHBsZWFzZSBwcm92aWRlIHN0YXRlbWVudHMgb3IgY29uZmlybWF0aW9ucyBzaG93aW5nIHRoZXNlIHRyYW5zYWN0aW9ucy48L2xpPlxyXG4gICAgICA8bGk+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGRpdmlkZW5kcyBub3QgY292ZXJlZCBieSBhIDEwOTktRElWLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhciBhbmQgbGVnaWJsZSB0byBhdm9pZCBhbnkgcHJvY2Vzc2luZyBkZWxheXMuPC9wPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgYXBwcmVjaWF0ZWQgYXMgaXQgd2lsbCBoZWxwIHVzIGluIGNvbXBsZXRpbmcgeW91ciB0YXggcHJlcGFyYXRpb25zIGVmZmljaWVudGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc3Bvc2VkIENhcGl0YWwgQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXNwb3NlZCBDYXBpdGFsIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgZGlzcG9zaW5nIG9mIGNhcGl0YWwgYXNzZXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgY29tcGxldGUgYW5kIGNvbXBsaWFudCwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+RGVzY3JpcHRpb24gb2YgZWFjaCBkaXNwb3NlZCBhc3NldDo8L2I+IEluY2x1ZGUgdGhlIHR5cGUgb2YgYXNzZXQgKGUuZy4sIHJlYWwgZXN0YXRlLCBzdG9ja3MsIGJvbmRzKS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGFjcXVpc2l0aW9uOjwvYj4gVGhlIHB1cmNoYXNlIGRhdGUgb3IgdGhlIGRhdGUgeW91IG9yaWdpbmFsbHkgY2FtZSBpbnRvIHBvc3Nlc3Npb24gb2YgZWFjaCBhc3NldC48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5BY3F1aXNpdGlvbiBjb3N0OjwvYj4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIG9yIGNvc3QgYmFzaXMgb2YgZWFjaCBhc3NldCwgaW5jbHVkaW5nIGFueSBpbXByb3ZlbWVudHMgbWFkZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGRpc3Bvc2FsOjwvYj4gVGhlIHNwZWNpZmljIGRhdGUgb24gd2hpY2ggZWFjaCBhc3NldCB3YXMgc29sZCwgZXhjaGFuZ2VkLCBvciBvdGhlcndpc2UgZGlzcG9zZWQgb2YuPC9saT5cclxuICAgICAgICA8bGk+PGI+U2FsZSBvciBkaXNwb3NhbCBwcm9jZWVkczo8L2I+IFRoZSB0b3RhbCBhbW91bnQgcmVjZWl2ZWQgZnJvbSB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkFzc29jaWF0ZWQgZXhwZW5zZXM6PC9iPiBBbnkgY29zdHMgaW5jdXJyZWQgZGlyZWN0bHkgZnJvbSB0aGUgc2FsZSBvciBkaXNwb3NhbCBwcm9jZXNzLCBzdWNoIGFzIGJyb2tlcidzIGZlZXMsIGFkdmVydGlzaW5nLCBsZWdhbCBmZWVzLCBldGMuPC9saT5cclxuICAgICAgICA8bGk+PGI+UmVhc29uIGZvciBkaXNwb3NhbDo8L2I+IEJyaWVmbHkgZGVzY3JpYmUgdGhlIHJlYXNvbiBiZWhpbmQgdGhlIGRpc3Bvc2FsIG9mIHRoZSBhc3NldCwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgY2FsY3VsYXRpbmcgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzIGFuZCBkZXRlcm1pbmluZyB0aGVpciBpbXBhY3Qgb24geW91ciB0YXggb2JsaWdhdGlvbnMuIFBsZWFzZSBhdHRhY2ggYW55IHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgc3VjaCBhcyBzYWxlcyByZWNlaXB0cywgZGVlZHMsIGNvbnRyYWN0cywgb3IgYnJva2VyYWdlIHN0YXRlbWVudHMsIHRvIHN1YnN0YW50aWF0ZSB0aGUgZGV0YWlscyBwcm92aWRlZC48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgYXJlIGhlcmUgdG8gYXNzaXN0IHdpdGggYW55IHF1ZXN0aW9ucyB5b3UgbWF5IGhhdmUuIFlvdSBjYW4gcmVhY2ggdXMgdmlhIGVtYWlsIG9yIHBob25lIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNwb3NlZCBEaWdpdGFsIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzcG9zZWQgRGlnaXRhbCBBc3NldHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdSBhbnN3ZXJlZCBcIlllc1wiIHRvIGRpc3Bvc2luZyBvZiBkaWdpdGFsIGFzc2V0cyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIHRyYW5zYWN0aW9ucywgcGxlYXNlIHN1Ym1pdCB0aGUgZm9sbG93aW5nOjwvcD5cclxuICA8b2w+XHJcbiAgICA8bGk+VHJhbnNhY3Rpb24gZGF0ZXM8L2xpPlxyXG4gICAgPGxpPlR5cGVzIG9mIGFzc2V0cyBib3VnaHQsIHNvbGQsIG9yIGV4Y2hhbmdlZDwvbGk+XHJcbiAgICA8bGk+QW1vdW50cyBpbnZvbHZlZCBpbiBlYWNoIHRyYW5zYWN0aW9uPC9saT5cclxuICAgIDxsaT5BbnkgMTA5OSBmb3JtcyByZWNlaXZlZCBmb3IgZGlnaXRhbCBhc3NldCBhY3Rpdml0aWVzPC9saT5cclxuICAgIDxsaT5EZXRhaWxzIG9mIG1pbmluZywgc3Rha2luZywgb3IgYWlyZHJvcCBpbmNvbWUsIGlmIGFwcGxpY2FibGU8L2xpPlxyXG4gIDwvb2w+XHJcbiAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBJbmNsdWRlIGFsbCBzYWxlcywgdHJhZGVzLCBhbmQgZXhjaGFuZ2VzLCBldmVuIGlmIHlvdSBkaWRuJ3QgcmVjZWl2ZSBhIHRheCBmb3JtLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNdXR1YWwgRnVuZCBHYWluXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJNdXR1YWwgRnVuZCBHYWluXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiBvcmRlciB0byBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIG9uIHlvdXIgdGF4IHJldHVybiwgYXMgcGVyIHlvdXIgaW5kaWNhdGlvbiBvZiByZWNlaXZpbmcgZ2FpbnMgZnJvbSBhIG11dHVhbCBmdW5kIG9yIHNpbWlsYXIgaW52ZXN0bWVudCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+MTA5OS1ESVYgRm9ybTo8L3N0cm9uZz4gVGhpcyBmb3JtIGlzIGNydWNpYWwgYXMgaXQgcHJvdmlkZXMgZGV0YWlscyBvbiBkaXZpZGVuZHMgYW5kIGRpc3RyaWJ1dGlvbnMgeW91IHJlY2VpdmVkIGZyb20geW91ciBtdXR1YWwgZnVuZCBpbnZlc3RtZW50cy4gUGxlYXNlIGVuc3VyZSB0byBwcm92aWRlIHRoaXMgZm9ybSBpZiB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgb24gaXQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnQgb2YgQWNjb3VudDo8L3N0cm9uZz4gVGhpcyBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBhbGwgdHJhbnNhY3Rpb25zIHdpdGhpbiB5b3VyIGFjY291bnQsIGluY2x1ZGluZyBwdXJjaGFzZXMsIHJlZGVtcHRpb25zLCBhbmQgcmVpbnZlc3RlZCBkaXZpZGVuZHMgd2hpY2ggaGVscCB1cyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHlvdXIgZ2FpbnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5ZZWFyLUVuZCBTdW1tYXJ5Ojwvc3Ryb25nPiBPZnRlbiBtdXR1YWwgZnVuZHMgcHJvdmlkZSBhIHllYXItZW5kIHN1bW1hcnkgdG8gdGhlaXIgaW52ZXN0b3JzLiBUaGlzIHN1bW1hcnkgY2FuIGJlIHZlcnkgaGVscGZ1bCBpbiBwcmVwYXJpbmcgeW91ciB0YXhlcyBhcyBpdCBjb25zb2xpZGF0ZXMgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBvdGhlciByZWxldmFudCBkb2N1bWVudHM6PC9zdHJvbmc+IFRoaXMgY291bGQgaW5jbHVkZSBhZGRpdGlvbmFsIDEwOTkgZm9ybXMgKGxpa2UgMTA5OS1CIGlmIGFueSBzYWxlcyBvY2N1cnJlZCksIG9yaWdpbmFsIGludmVzdG1lbnQgc3RhdGVtZW50cywgb3IgYW55dGhpbmcgZWxzZSB0aGF0IGNvdWxkIGltcGFjdCB5b3VyIHRheCBzaXR1YXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cyBtYXkgcmVxdWlyZSBzb21lIHRpbWUsIGhvd2V2ZXIsIGhhdmluZyB0aGVzZSByZWFkaWx5IGF2YWlsYWJsZSB3aWxsIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGVmZmljaWVuY3kgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBiZSBncmVhdGx5IGFwcHJlY2lhdGVkLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgZGlmZmljdWx0aWVzIG9idGFpbmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTXV0dWFsIEZ1bmQgRGlzcG9zYWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIERpc3Bvc2FsXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIG1hZGUgYSBkaXNwb3NhbCBvZiBzaGFyZXMgaW4gYSBtdXR1YWwgZnVuZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGFjdCBhbmQgZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZWQgYWNjdXJhdGVseSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+MTA5OS1CIGZvcm08L3N0cm9uZz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBtdXR1YWwgZnVuZCBkaXNwb3NhbCwgaWYgYXZhaWxhYmxlLiBUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGRldGFpbHMgb24gdGhlIHNhbGUgb2YgeW91ciBzaGFyZXMuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgPHN0cm9uZz5yZWNvcmQgb2YgdGhlIHB1cmNoYXNlPC9zdHJvbmc+IG9mIHRoZSBtdXR1YWwgZnVuZCBzaGFyZXMgaW5jbHVkaW5nIHRoZSBwdXJjaGFzZSBkYXRlIGFuZCBjb3N0IGJhc2lzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNhbGN1bGF0aW5nIGFueSBjYXBpdGFsIGdhaW4gb3IgbG9zcy48L2xpPlxyXG4gICAgICAgIDxsaT5JZiB0aGUgMTA5OS1CIGZvcm0gaXMgbm90IGF2YWlsYWJsZSwgcGxlYXNlIHByb3ZpZGUgYW55IDxzdHJvbmc+YnJva2VyYWdlIHN0YXRlbWVudHM8L3N0cm9uZz4gb3Igb3RoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IHNob3dzIHRoZSBkaXNwb3NhbCBvZiB0aGUgbXV0dWFsIGZ1bmQgc2hhcmVzLCBpbmNsdWRpbmcgdGhlIHNhbGUgZGF0ZSBhbmQgYW1vdW50LjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxzdHJvbmc+cmVpbnZlc3RlZCBkaXZpZGVuZHM8L3N0cm9uZz4gb3IgY2FwaXRhbCBnYWlucyBkaXN0cmlidXRpb25zLCBhcyB0aGVzZSBjYW4gYWRqdXN0IHlvdXIgY29zdCBiYXNpcyBhbmQgYWZmZWN0IHRoZSBjYWxjdWxhdGlvbiBvZiB5b3VyIGNhcGl0YWwgZ2FpbiBvciBsb3NzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SGF2aW5nIHRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyB0aGF0IHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoZSBkaXNwb3NhbCBvZiB5b3VyIG11dHVhbCBmdW5kIHNoYXJlcyBhbmQgYWNjdXJhdGVseSBjYWxjdWxhdGUgYW55IHBvdGVudGlhbCBjYXBpdGFsIGdhaW5zIG9yIGxvc3Nlcy4gVGhpcyB3aWxsIGFsc28gaGVscCB1cyB0byBvcHRpbWl6ZSB5b3VyIHRheCBsaWFiaWxpdHkgZm9yIHRoZSB5ZWFyLjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiV2FzaCBTYWxlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJXYXNoIFNhbGUgVHJhbnNhY3Rpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciBpbmRpY2F0aW9uIG9mIGEgcG9zc2libGUgV2FzaCBTYWxlIHRyYW5zYWN0aW9uLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGFjdCBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIHRyYW5zYWN0aW9uIHJlY29yZHM8L3N0cm9uZz4gLSBQbGVhc2UgcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB0aGUgc2VjdXJpdHkgdGhhdCB3YXMgc29sZCBhbmQgdGhlbiByZXB1cmNoYXNlZCwgaW5jbHVkaW5nIGRhdGVzIGFuZCBhbW91bnRzIGZvciBlYWNoIHRyYW5zYWN0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCBiYXNpcyBmb3IgcmVwdXJjaGFzZWQgc2VjdXJpdHk8L3N0cm9uZz4gLSBEZXRhaWxzIG9mIHRoZSBjb3N0IGJhc2lzIGZvciB0aGUgc2VjdXJpdGllcyByZXB1cmNoYXNlZCB3aXRoaW4gYSA2MS1kYXkgd2luZG93ICgzMCBkYXlzIGJlZm9yZSB0byAzMCBkYXlzIGFmdGVyIHRoZSBzYWxlKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgc3RhdGVtZW50czwvc3Ryb25nPiAtIENvcGllcyBvZiB5b3VyIGJyb2tlcmFnZSBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb25zIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TG9zc2VzIHJlYWxpemVkPC9zdHJvbmc+IC0gRG9jdW1lbnRhdGlvbiBvZiBhbnkgbG9zc2VzIHJlYWxpemVkIGZyb20gdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IGNvcnJlc3BvbmRlbmNlPC9zdHJvbmc+IC0gQ29ycmVzcG9uZGVuY2UgZnJvbSBicm9rZXJzIG9yIGZpbmFuY2lhbCBhZHZpc29ycyByZWdhcmRpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkb2N1bWVudHMgYXJlIG9yZ2FuaXplZCBhbmQgY2xlYXJseSBsYWJlbGVkIGZvciBlYWNoIHRyYW5zYWN0aW9uLiBUaGlzIHdpbGwgZmFjaWxpdGF0ZSBhIHNtb290aGVyIGFuZCBxdWlja2VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiB5b3VyIFdhc2ggU2FsZSB0cmFuc2FjdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBwcm92aWRlIGFjY3VyYXRlIHRheCBhZHZpY2UgYW5kIHByZXBhcmF0aW9uLiBGdXJ0aGVyLCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYXNzaXN0IGluIGRldGVybWluaW5nIGhvdyB0aGUgV2FzaCBTYWxlIHJ1bGUgYWZmZWN0cyB0aGUgZGVkdWN0aWJpbGl0eSBvZiBhbnkgbG9zc2VzIHlvdSBtaWdodCBoYXZlIGluY3VycmVkLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZmlsaW5ncy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIGNvb3BlcmF0aW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNvbGQgSG9tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU29sZCBIb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgc29sZCBhIHBlcnNvbmFsIGhvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgU2FsZTo8L3N0cm9uZz4gVGhlIGNsb3NpbmcgZGF0ZSB3aGVuIHRoZSBzYWxlIHdhcyBvZmZpY2lhbGx5IGNvbXBsZXRlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNhbGUgUHJpY2U6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgeW91IHJlY2VpdmVkIGZvciB0aGUgaG9tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvc3QgQmFzaXM6PC9zdHJvbmc+IE9yaWdpbmFsIHB1cmNoYXNlIHByaWNlLCBwbHVzIGFueSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgaG9tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERldGFpbHM6PC9zdHJvbmc+IEFkZHJlc3MgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IHNvbGQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NYWluIFJlc2lkZW5jZSBvciBOb3Q6PC9zdHJvbmc+IFBsZWFzZSBjb25maXJtIGlmIHRoaXMgd2FzIHlvdXIgbWFpbiByZXNpZGVuY2UgZm9yIGF0IGxlYXN0IHR3byBvZiB0aGUgbGFzdCBmaXZlIHllYXJzIHByaW9yIHRvIHRoZSBzYWxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVjb3JkcyBvZiBIb21lIEltcHJvdmVtZW50czo8L3N0cm9uZz4gUmVjZWlwdHMgb3IgcmVjb3JkcyBvZiBhbnkgbWFqb3IgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIHByb3BlcnR5LCB3aGljaCBjYW4gYWZmZWN0IHRoZSBjb3N0IGJhc2lzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgVXNlOjwvc3Ryb25nPiBJZiBub3QgYWx3YXlzIHVzZWQgYXMgYSBwZXJzb25hbCBob21lLCBkZXRhaWxzIG9uIGFueSB1c2Ugb2YgdGhlIHByb3BlcnR5IGZvciByZW50YWwsIGJ1c2luZXNzLCBvciBvdGhlciBub24tcGVyc29uYWwgdXNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVsYXRlZCBFeHBlbnNlczo8L3N0cm9uZz4gQW55IGNvc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FsZSwgc3VjaCBhcyBsZWdhbCBmZWVzLCByZWFsIGVzdGF0ZSBhZ2VudCBjb21taXNzaW9ucywgYW5kIGhvbWUgc3RhZ2luZyBleHBlbnNlcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGRldGVybWluaW5nIHBvdGVudGlhbCB0YXggYmVuZWZpdHMgb3Igb2JsaWdhdGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXMgc29vbiBhcyBwb3NzaWJsZSwgdG8gZW5zdXJlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHlvdSd2ZSBzb2xkIHByb3BlcnR5IHRoaXMgeWVhciB1bmRlciBhbiBpbnN0YWxsbWVudCBwbGFuLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIHRyYW5zYWN0aW9uIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TYWxlIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBjb21wbGV0ZSBzYWxlIGFncmVlbWVudCBkZXRhaWxpbmcgdGhlIHRlcm1zIG9mIHRoZSBpbnN0YWxsbWVudCBzYWxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IHNvbGQgKGUuZy4sIGxhbmQsIGJ1aWxkaW5nLCBlcXVpcG1lbnQpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBTY2hlZHVsZTo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHBheW1lbnQgc2NoZWR1bGUgYWdyZWVkIHVwb24sIGluY2x1ZGluZyB0aGUgZGF0ZXMgYW5kIGFtb3VudHMgb2YgZWFjaCBpbnN0YWxsbWVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IFRvdGFsIGFtb3VudHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGRvd24gcGF5bWVudCBhbmQgYW55IGluc3RhbGxtZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJpbmNpcGFsICZhbXA7IEludGVyZXN0IEJyZWFrZG93bjo8L3N0cm9uZz4gQSBicmVha2Rvd24gb2YgdGhlIGFtb3VudHMgcmVjZWl2ZWQgYmV0d2VlbiBwcmluY2lwYWwgYW5kIGludGVyZXN0IGZvciB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBCYXNpczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhlIHByb3BlcnR5J3Mgb3JpZ2luYWwgY29zdCwgaW1wcm92ZW1lbnRzIG1hZGUsIGFuZCBhbnkgZGVwcmVjaWF0aW9uIHRha2VuIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSByZWxldmFudCBleHBlbnNlcyBpbiByZWxhdGlvbiB0byB0aGUgc2FsZSB0aGF0IG1pZ2h0IGJlIGRlZHVjdGlibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5CdXllciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTGVnYWwgbmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBidXllci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjYWxjdWxhdGluZyBhbnkgcHJvZml0IG9yIGxvc3MgZnJvbSB0aGUgc2FsZSBhbmQgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgdGF4IGltcGxpY2F0aW9ucyBvZiB0aGUgaW5zdGFsbG1lbnQgcGF5bWVudHMgcmVjZWl2ZWQuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIFlvdSBjYW4gdXBsb2FkIHRoZSBkb2N1bWVudHMgZGlyZWN0bHkgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgZW1haWwgdGhlbSB0byB0YXhAbGVuZGFoYW5kYWNjb3VudGluZy5jb20uPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJXb3J0aGxlc3MgU2VjdXJpdGllc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiV29ydGhsZXNzIFNlY3VyaXRpZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBoYWQgaW52ZXN0bWVudHMsIHN1Y2ggYXMgc3RvY2tzIG9yIGJvbmRzLCB0aGF0IGJlY2FtZSBjb21wbGV0ZWx5IHdvcnRobGVzcyB0aGlzIHllYXIsIHdlIG5lZWQgdG8gZ2F0aGVyIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHByb3Blcmx5IHJlcG9ydCB0aGVzZSBvbiB5b3VyIHRheCByZXR1cm4uIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgdGhlIFNlY3VyaXR5Ojwvc3Ryb25nPiBGdWxsIG5hbWUgYW5kIHR5cGUgb2YgZWFjaCBzZWN1cml0eSB0aGF0IGJlY2FtZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QdXJjaGFzZSBEZXRhaWxzOjwvc3Ryb25nPiBEYXRlIG9mIHB1cmNoYXNlIGFuZCB0aGUgcHVyY2hhc2UgcHJpY2UgZm9yIGVhY2ggc2VjdXJpdHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Xb3J0aGxlc3NuZXNzIERldGVybWluYXRpb24gRGF0ZTo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgd2hlbiB5b3UgZGV0ZXJtaW5lZCB0aGUgc2VjdXJpdHkgdG8gYmUgd29ydGhsZXNzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IG9mZmljaWFsIGRvY3VtZW50YXRpb24geW91IHJlY2VpdmVkIG9yIHVzZWQgdG8gZGV0ZXJtaW5lIHRoYXQgdGhlIGludmVzdG1lbnRzIGJlY2FtZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BdHRlbXB0cyB0byBTZWxsIG9yIFRyYWRlOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGFueSBhdHRlbXB0cyBtYWRlIHRvIHNlbGwgb3IgdHJhZGUgdGhlIHNlY3VyaXRpZXMgYmVmb3JlIGRldGVybWluaW5nIHRoZXkgd2VyZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IEFjY291bnQgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIHlvdXIgaW52ZXN0bWVudCBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgd29ydGhsZXNzIHNlY3VyaXRpZXMgYW5kIHRoZWlyIHZhbHVlIG92ZXIgdGltZSwgbGVhZGluZyB1cCB0byB0aGVpciBkZWNsYXJlZCB3b3J0aGxlc3NuZXNzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTI0NCBCdXNpbmVzcyBTdG9ja1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMjQ0IEJ1c2luZXNzIFN0b2NrXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBtb3JlIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBzYWxlIG9mIHNoYXJlcyBpbiBhIHNtYWxsIGJ1c2luZXNzIHdoZXJlIHlvdSB3ZXJlIGFuIG9yaWdpbmFsIGludmVzdG9yLiBBcyB5b3UgaW5kaWNhdGVkIGEgbG9zcyBvbiB0aGlzIGludmVzdG1lbnQsIGl0J3MgY3J1Y2lhbCB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcXVhbGlmaWVzIGZvciBzcGVjaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LiBUbyBhY2N1cmF0ZWx5IGFuYWx5emUgYW5kIHJlcG9ydCB0aGVzZSBhY3Rpdml0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+Y2VydGlmaWNhdGUgb2YgaW5jb3Jwb3JhdGlvbjwvc3Ryb25nPiBvciBvdGhlciBkb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgdGhlIHN0b2NrIHF1YWxpZmllcyBhcyBTZWN0aW9uIDEyNDQgc3RvY2suPC9saT5cclxuICAgICAgICA8bGk+QSA8c3Ryb25nPmRldGFpbGVkIHN0YXRlbWVudDwvc3Ryb25nPiBvZiB0aGUgaW52ZXN0bWVudCwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IGFuZCBkYXRlIG9mIHRoZSBvcmlnaW5hbCBpbnZlc3RtZW50LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+TnVtYmVyIG9mIHNoYXJlcyBwdXJjaGFzZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Qcm9vZiBvZiBiZWluZyBhbiBvcmlnaW5hbCBob2xkZXIuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgdGhlIHNhbGU8L3N0cm9uZz4sIHNwZWNpZnlpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5EYXRlIG9mIHNhbGUuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OdW1iZXIgb2Ygc2hhcmVzIHNvbGQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5TYWxlIHByaWNlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGFzc29jaWF0ZWQgZXhwZW5zZXMgd2l0aCB0aGUgc2FsZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkEgYnJpZWYgZXhwbGFuYXRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgbGVhZGluZyB0byB0aGUgbG9zcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gd2lsbCBlbmFibGUgdXMgdG8gYXNzZXNzIHRoZSBlbGlnaWJpbGl0eSBmb3IgYSBiZW5lZmljaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LCBwb3RlbnRpYWxseSBtaW5pbWl6aW5nIHlvdXIgdGF4YWJsZSBpbmNvbWUuIFBsZWFzZSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IGZpbGluZy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVsYXRlZCBQYXJ0eSBUcmFuc2FjdGlvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbGF0ZWQgUGFydHkgVHJhbnNhY3Rpb25zXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSByZWNlaXZlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB0aGVyZSB3ZXJlIHRyYW5zYWN0aW9ucyB3aXRoIHJlbGF0ZWQgcGFydGllcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGVzZSB0cmFuc2FjdGlvbnMgYW5kIGluY29ycG9yYXRlIHRoZW0gaW50byB5b3VyIHRheCBmaWxpbmdzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgVHJhbnNhY3Rpb25zOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VHlwZSBvZiB0cmFuc2FjdGlvbnMgKGUuZy4sIHNhbGUsIHRyYWRlLCB0cmFuc2ZlciBvZiBwcm9wZXJ0eSBvciBpbnZlc3RtZW50cykuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5EYXRlKHMpIG9mIHRyYW5zYWN0aW9ucy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIGl0ZW1zIG9yIHByb3BlcnRpZXMgdHJhbnNmZXJyZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBhcnRpZXMgSW52b2x2ZWQ6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5OYW1lcyBhbmQgcmVsYXRpb25zaGlwcyB0byB5b3UgKGUuZy4sIGZhbWlseSBtZW1iZXIsIGZyaWVuZCwgb3IgYnVzaW5lc3MgZW50aXR5KS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPklmIGEgYnVzaW5lc3MgZW50aXR5IGlzIGludm9sdmVkLCB5b3VyIGFuZCB5b3VyIGZhbWlseSdzIG93bmVyc2hpcCBwZXJjZW50YWdlIGluIHRoZSBidXNpbmVzcy48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIERldGFpbHMgb2YgdGhlIFRyYW5zYWN0aW9uczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPk1hcmtldCB2YWx1ZSBvZiBwcm9wZXJ0eSBvciBpbnZlc3RtZW50cyBhdCB0aGUgdGltZSBvZiB0cmFuc2FjdGlvbi48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCByZWNlaXZlZCBvciBwYWlkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGV4Y2hhbmdlIG9mIGdvb2RzLCBzZXJ2aWNlcywgb3Igb3RoZXIgYXNzZXRzLCBpbmNsdWRpbmcgdGhlaXIgZmFpciBtYXJrZXQgdmFsdWUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3BpZXMgb2YgY29udHJhY3RzIG9yIGFncmVlbWVudHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5SZWNlaXB0cyBvciBwcm9vZiBvZiBwYXltZW50L2V4Y2hhbmdlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QXBwcmFpc2FscyBvciB2YWx1YXRpb25zIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgcmVnYXJkaW5nIHJlbGF0ZWQgcGFydHkgdHJhbnNhY3Rpb25zIGFuZCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHBlbmFsdGllcyBvciBhdWRpdHMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9ucy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWN0aW9uIDEyMSBIb21lIFNhbGVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNlY3Rpb24gMTIxIEhvbWUgU2FsZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgc29sZCB5b3VyIG1haW4gaG9tZSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgZXhjbHVzaW9uIG9mIGdhaW4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZC4gQmVsb3cgaXMgYSBkZXRhaWxlZCBsaXN0IG9mIHdoYXQgd2UgbmVlZCBmcm9tIHlvdTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIFNhbGU6PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkRhdGUgb2Ygc2FsZTwvbGk+XHJcbiAgICAgICAgICA8bGk+U2VsbGluZyBwcmljZTwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHNlbGxpbmcgZXhwZW5zZXMgKGUuZy4sIHJlYWwgZXN0YXRlIGNvbW1pc3Npb25zLCBsZWdhbCBmZWVzLCBldGMuKTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29zdCBCYXNpcyBJbmZvcm1hdGlvbjo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+RGF0ZSBvZiBwdXJjaGFzZTwvbGk+XHJcbiAgICAgICAgICA8bGk+T3JpZ2luYWwgcHVyY2hhc2UgcHJpY2U8L2xpPlxyXG4gICAgICAgICAgPGxpPlJlY29yZHMgb2YgaW1wcm92ZW1lbnRzIG1hZGUgKHdpdGggZGF0ZXMgYW5kIGNvc3RzKTwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IGNhc3VhbHR5IGxvc3NlcyBjbGFpbWVkIGFuZCBpbnN1cmFuY2UgcmVpbWJ1cnNlbWVudHMgcmVjZWl2ZWQgd2hpbGUgb3duaW5nIHRoZSBwcm9wZXJ0eTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVzaWRlbmN5IGFuZCBVc2UgRGF0YTo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+VG90YWwgeWVhcnMgb2Ygb3duZXJzaGlwPC9saT5cclxuICAgICAgICAgIDxsaT5Ub3RhbCB5ZWFycyB0aGUgcHJvcGVydHkgd2FzIHVzZWQgYXMgeW91ciBtYWluIGhvbWU8L2xpPlxyXG4gICAgICAgICAgPGxpPkFueSBwZXJpb2RzIHRoZSBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBvciB1c2VkIGZvciBidXNpbmVzczwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHNwZWNpYWwgY2lyY3Vtc3RhbmNlcyB0aGF0IG1heSBxdWFsaWZ5IGZvciBhbiBleGNlcHRpb24gdG8gdGhlIHBoeXNpY2FsIHByZXNlbmNlIHJlcXVpcmVtZW50IChlLmcuLCBoZWFsdGggaXNzdWVzLCBlbXBsb3ltZW50IGNoYW5nZXMpPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5QcmlvciBHYWluIEV4Y2x1c2lvbnM6PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkhhdmUgeW91IHNvbGQgYW5vdGhlciBtYWluIGhvbWUgd2l0aGluIHRoZSBsYXN0IHR3byB5ZWFycyBhbmQgY2xhaW1lZCBleGNsdXNpb24/PC9saT5cclxuICAgICAgICAgIDxsaT5JZiB5ZXMsIGRldGFpbHMgb2YgdGhlIHByaW9yIHNhbGUgaW5jbHVkaW5nIGRhdGUgYW5kIGFtb3VudCBvZiBnYWluIGV4Y2x1ZGVkPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIHRpbWVseSBmaWxpbmcgb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTAzMSBFeGNoYW5nZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMDMxIEV4Y2hhbmdlXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gSW4gcmV2aWV3aW5nIHlvdXIgcmVjb3JkcywgaXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IHlvdSBtYXkgaGF2ZSBlbmdhZ2VkIGluIGEgU2VjdGlvbiAxMDMxIGV4Y2hhbmdlLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCByZWxldmFudCBJUlMgZ3VpZGVsaW5lcywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBib3RoIHRoZSByZWxpbnF1aXNoZWQgcHJvcGVydHkgYW5kIHRoZSByZXBsYWNlbWVudCBwcm9wZXJ0eS4gUGxlYXNlIGluY2x1ZGUgbG9jYXRpb24sIHR5cGUgb2YgcHJvcGVydHkgKGUuZy4sIGNvbW1lcmNpYWwsIHJlc2lkZW50aWFsKSwgYW5kIGFueSBpZGVudGlmeWluZyBudW1iZXJzIChlLmcuLCBwYXJjZWwgbnVtYmVyKS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5UcmFuc2FjdGlvbiBEYXRlczo8L3N0cm9uZz4gVGhlIGRhdGUgb24gd2hpY2ggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSB3YXMgdHJhbnNmZXJyZWQsIGFuZCB0aGUgZGF0ZSB0aGUgcmVwbGFjZW1lbnQgcHJvcGVydHkgd2FzIHJlY2VpdmVkLiBUaGVzZSBkYXRlcyBhcmUgY3J1Y2lhbCB0byBkZXRlcm1pbmUgY29tcGxpYW5jZSB3aXRoIHRoZSA0NS1kYXkgaWRlbnRpZmljYXRpb24gYW5kIDE4MC1kYXkgZXhjaGFuZ2UgY29tcGxldGlvbiByZXF1aXJlbWVudHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+VHJhbnNhY3Rpb24gVmFsdWVzOjwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgYm90aCB0aGUgcmVsaW5xdWlzaGVkIGFuZCByZXBsYWNlbWVudCBwcm9wZXJ0aWVzIGF0IHRoZSB0aW1lIG9mIHRoZSBleGNoYW5nZSwgYWxvbmcgd2l0aCBhbnkgZmluYW5jaWFsIGFkanVzdG1lbnRzIG9yIGFkZGl0aW9uYWwgY2FzaCByZWNlaXZlZC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIGFueSBwb3RlbnRpYWwgZ2FpbiBvciBsb3NzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkludGVybWVkaWFyeSBEZXRhaWxzOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBhYm91dCBhbnkgcXVhbGlmaWVkIGludGVybWVkaWFyeSB1c2VkIGR1cmluZyB0aGUgZXhjaGFuZ2UsIGluY2x1ZGluZyB0aGVpciBuYW1lLCBjb250YWN0IGluZm9ybWF0aW9uLCBhbmQgZGV0YWlscyBvZiB0aGVpciBpbnZvbHZlbWVudC4gSWYgbm8gaW50ZXJtZWRpYXJ5IHdhcyB1c2VkLCBwbGVhc2UgZXhwbGFpbiBob3cgdGhlIGV4Y2hhbmdlIHdhcyBmYWNpbGl0YXRlZC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5PcmlnaW5hbCBQdXJjaGFzZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBkYXRlIG9mIGFjcXVpc2l0aW9uIGZvciB0aGUgcmVsaW5xdWlzaGVkIHByb3BlcnR5LiBUaGlzIGluZm9ybWF0aW9uIGFzc2lzdHMgaW4gZGV0ZXJtaW5pbmcgdGhlIGJhc2lzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgb3IgRXhwZW5zZXM6PC9zdHJvbmc+IERldGFpbHMgb2YgYW55IGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSByZXBsYWNlbWVudCBwcm9wZXJ0eSB3aXRoaW4gdGhlIGV4Y2hhbmdlIHBlcmlvZCBvciBhbnkgYWRkaXRpb25hbCBleHBlbnNlcyBpbmN1cnJlZCB0aGF0IG5lZWQgdG8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGUgcHJvcGVydHkncyBiYXNpcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIFNlY3Rpb24gMTAzMSBleGNoYW5nZSBhbmQgZW5zdXJpbmcgdGhhdCBhbGwgSVJTIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBJdCBhbHNvIGhlbHBzIHVzIHRvIGFkdmlzZSB5b3UgYWNjdXJhdGVseSBvbiBhbnkgcG90ZW50aWFsIGRlZmVycmVkIHRheCBsaWFiaWxpdGllcyBvciBiZW5lZml0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4Y2hhbmdlLjwvcD5cclxuICAgIDxwPlBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscy4gV2UgYXJlIGhlcmUgdG8gaGVscCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IG1heSBoYXZlIHVuZGVyZ29uZSBhIFNlY3Rpb24gMTAzMyBleGNoYW5nZSAoaW52b2x1bnRhcnkgY29udmVyc2lvbikgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBtYXhpbXVtIGNvbXBsaWFuY2UgYW5kIGJlbmVmaXQgZm9yIHlvdSwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhpcyBldmVudC4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk5hdHVyZSBvZiB0aGUgUHJvcGVydHk6PC9zdHJvbmc+IERlc2NyaWJlIHRoZSB0eXBlIG9mIHByb3BlcnR5IGludm9sdmVkIChlLmcuLCByZWFsIGVzdGF0ZSwgcGVyc29uYWwgcHJvcGVydHksIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgSW52b2x1bnRhcnkgQ29udmVyc2lvbjo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgY2lyY3Vtc3RhbmNlcyB0aGF0IGxlZCB0byB0aGUgaW52b2x1bnRhcnkgY29udmVyc2lvbiAoZS5nLiwgbmF0dXJhbCBkaXNhc3RlciwgdGhlZnQsIGNvbmRlbW5hdGlvbikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnN1cmFuY2UgUHJvY2VlZHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IEluZGljYXRlIHRoZSBhbW91bnQgb2YgYW55IGluc3VyYW5jZSBwcm9jZWVkcyByZWNlaXZlZCBhcyBjb21wZW5zYXRpb24gZm9yIHRoZSBjb252ZXJzaW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVpbnZlc3RtZW50IG9mIFByb2NlZWRzOjwvc3Ryb25nPiBEZXRhaWwgYW55IHJlaW52ZXN0bWVudCBvZiB0aGUgcHJvY2VlZHMgaW50byBzaW1pbGFyIHByb3BlcnR5LCBpbmNsdWRpbmcgdHlwZXMgb2YgcHJvcGVydGllcyBhY3F1aXJlZCwgZGF0ZXMgb2YgYWNxdWlzaXRpb24sIGFuZCBhbW91bnRzIHJlaW52ZXN0ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UaW1lbGluZSBvZiBFdmVudHM6PC9zdHJvbmc+IFByb3ZpZGUgYSB0aW1lbGluZSBvZiB0aGUga2V5IGV2ZW50cywgZnJvbSB0aGUgZGF0ZSBvZiB0aGUgaW52b2x1bnRhcnkgY29udmVyc2lvbiB0byB0aGUgcmVpbnZlc3RtZW50IG9mIHByb2NlZWRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQXR0YWNoIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgaW5zdXJhbmNlIHNldHRsZW1lbnQgc3RhdGVtZW50cywgcHVyY2hhc2UgY29udHJhY3RzIGZvciByZXBsYWNlbWVudCBwcm9wZXJ0eSwgb3Igb2ZmaWNpYWwgbm90aWNlcyBvZiBjb25kZW1uYXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgdG8gZmFjaWxpdGF0ZSBhbiBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHdpdGggYW55IHF1ZXN0aW9ucyB5b3UgbWlnaHQgaGF2ZSByZWdhcmRpbmcgdGhpcyByZXF1ZXN0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkkgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHdlIHByb2NlZWQgd2l0aCBwcmVwYXJpbmcgeW91ciB0YXhlcywgd2Ugbm90aWNlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIHJlbnRhbCBpbmNvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgdGF4IG9ibGlnYXRpb25zIGFuZCBleHBsb3JlIHBvdGVudGlhbCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMsIHdlIG5lZWQgc29tZSBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGlzIHJlbnRhbCBpbmNvbWUuPC9wPlxyXG48cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG48b2w+XHJcbiAgPGxpPlRoZSBhZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eSBnZW5lcmF0aW5nIHRoZSByZW50YWwgaW5jb21lLjwvbGk+XHJcbiAgPGxpPlRvdGFsIGFtb3VudCBvZiByZW50YWwgaW5jb21lIHJlY2VpdmVkIGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gIDxsaT5Nb250aHMgdGhlIHByb3BlcnR5IHdhcyByZW50ZWQgb3V0LjwvbGk+XHJcbiAgPGxpPkFueSBwZXJpb2RzIG9mIHBlcnNvbmFsIHVzZSBvZiB0aGUgcmVudGFsIHByb3BlcnR5LjwvbGk+XHJcbiAgPGxpPkEgc3VtbWFyeSBvZiBleHBlbnNlcyByZWxhdGVkIHRvIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IHByb3BlcnR5IG1hbmFnZW1lbnQgZmVlcywgbWFpbnRlbmFuY2UgYW5kIHJlcGFpcnMsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCAoaWYgYXBwbGljYWJsZSkuPC9saT5cclxuICA8bGk+RGV0YWlscyBvZiBhbnkgbWFqb3IgaW1wcm92ZW1lbnRzIG9yIHJlbm92YXRpb25zIGRvbmUgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCB1cyBwYWludCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgeW91ciByZW50YWwgaW5jb21lLCBhbGxvd2luZyB1cyB0byBlbnN1cmUgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IGFwcGxpY2FibGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSByZXBvcnQgeW91ciBpbmNvbWUuIFlvdXIgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgY3J1Y2lhbCBmb3IgdGhlIHRpbWVseSBhbmQgZWZmZWN0aXZlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy48L3A+XHJcbjxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIGlmIHRoZXJlJ3MgYW55IG90aGVyIHdheSBJIGNhbiBhc3Npc3QsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBnZXQgaW4gdG91Y2guPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkdmFuY2VkIFJlbnRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFkdmFuY2VkIFJlbnRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGFkdmFuY2VkIHJlbnQgcGF5bWVudHMgdGhpcyB5ZWFyIGZvciB5b3VyIHJlbnRhbCBwcm9wZXJ0eS4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBvZiBhZHZhbmNlZCByZW50IHJlY2VpdmVkOjwvc3Ryb25nPiBUaGUgc3VtIHRvdGFsIG9mIGFsbCByZW50IHBheW1lbnRzIHJlY2VpdmVkIGluIGFkdmFuY2UgKGNvdmVyaW5nIGZ1dHVyZSBwZXJpb2RzIGJleW9uZCB0aGUgY3VycmVudCBtb250aCkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSBzcGVjaWZpYyBkYXRlKHMpIG9uIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBhZHZhbmNlZCByZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIHBlcmlvZCBjb3ZlcmVkOjwvc3Ryb25nPiBUaGUgcmFuZ2Ugb2YgZGF0ZXMgKHN0YXJ0IGFuZCBlbmQpIHRoYXQgZWFjaCBhZHZhbmNlZCByZW50IHBheW1lbnQgY292ZXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgYWRkcmVzczo8L3N0cm9uZz4gVGhlIGFkZHJlc3Mgb2YgdGhlIHJlbnRhbCBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGFkdmFuY2VkIHJlbnQgd2FzIHBhaWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5MZWFzZSBhZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50KHMpIHdpdGggdGhlIHRlbmFudChzKSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMgb2YgdGhlIGFkdmFuY2VkIHJlbnQgcGF5bWVudChzKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBwYXJ0aWFsIHJlZnVuZHMgaXNzdWVkOjwvc3Ryb25nPiBJZiBhbnkgcmVmdW5kcyB3ZXJlIGlzc3VlZCBhZ2FpbnN0IHRoZSBhZHZhbmNlZCByZW50cyByZWNlaXZlZCwgcGxlYXNlIHByb3ZpZGUgZGV0YWlscyBhbmQgcmVzcGVjdGl2ZSBhbW91bnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBwaXZvdGFsIGluIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxpYW50IHdpdGggcmVsZXZhbnQgdGF4IGxhd3MuIFBsZWFzZSBlbnN1cmUgdGhlIGRldGFpbHMgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTGVhc2UgQ2FuY2VsbGF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJMZWFzZSBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgaW4geW91ciBwcmVsaW1pbmFyeSB0YXggaW5mb3JtYXRpb24gdGhhdCB5b3UgcmVjZWl2ZWQgcGF5bWVudCBmcm9tIGEgdGVuYW50IGZvciBlYXJseSBsZWFzZSBjYW5jZWxsYXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgYW5kIGFzc2VzcyBhbnkgdGF4IGltcGxpY2F0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5MZWFzZSBBZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgb3JpZ2luYWwgbGVhc2UgYWdyZWVtZW50IHdpdGggdGhlIHRlbmFudCB3aG8gcGFpZCB0byB0ZXJtaW5hdGUgdGhlaXIgbGVhc2UgZWFybHkuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+QW1lbmRtZW50IG9yIFRlcm1pbmF0aW9uIEFncmVlbWVudDo8L3N0cm9uZz4gQW55IGRvY3VtZW50cyB0aGF0IGZvcm1hbGx5IGFja25vd2xlZGdlIHRoZSBlYXJseSB0ZXJtaW5hdGlvbiBvZiB0aGUgbGVhc2UsIGluY2x1ZGluZyBhbnkgcGVuYWx0aWVzLCB0aGUgdGVybWluYXRpb24gZGF0ZSwgYW5kIG90aGVyIHJlbGV2YW50IHRlcm1zLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlBheW1lbnQgUmVjb3Jkczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvZiB0aGUgcGF5bWVudCByZWNlaXZlZCBmb3IgbGVhc2UgdGVybWluYXRpb24uIFRoaXMgY291bGQgaW5jbHVkZSBiYW5rIHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb24sIGEgcmVjZWlwdCBwcm92aWRlZCB0byB0aGUgdGVuYW50LCBvciBhbnkgd3JpdHRlbiBhZ3JlZW1lbnQgc3BlY2lmeWluZyB0aGUgYW1vdW50LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNvbW11bmljYXRpb24gRXZpZGVuY2U6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgd3JpdHRlbiBjb21tdW5pY2F0aW9uIGJldHdlZW4geW91IGFuZCB0aGUgdGVuYW50IHJlZ2FyZGluZyB0aGUgbGVhc2UgY2FuY2VsbGF0aW9uIGFuZCB0aGUgYWdyZWVtZW50IHRvIHRlcm1pbmF0ZSBlYXJseSwgaW5jbHVkaW5nIGVtYWlscyBvciBsZXR0ZXJzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhlc2UgZG9jdW1lbnRzIGFyZSBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCB0YXggdHJlYXRtZW50IG9mIHRoZSBsZWFzZSBjYW5jZWxsYXRpb24gcGF5bWVudCB5b3UgcmVjZWl2ZWQuIFRoZXkgd2lsbCBoZWxwIHRvIGVuc3VyZSB0aGF0IHdlIHJlcG9ydCB5b3VyIGluY29tZSBhY2N1cmF0ZWx5IGFuZCB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG90ZW50aWFsIHRheCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMuPC9wPlxyXG4gICAgPHA+PHN0cm9uZz5BY3Rpb24gUmVxdWlyZWQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB0aW1lbHkgY29tcGxldGlvbiBvZiB5b3VyIHRheCBwcmVwYXJhdGlvbi4gWW91IG1heSBzZW5kIHRoZW0gdmlhIGVtYWlsIGF0IHRheEBsZW5kYWhhbmRhY2NvdW50aW5nLmNvbSwgb3IgdXBsb2FkIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYWlkIEFkdmFuY2UgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBhaWQgQWR2YW5jZSBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgcGF5bWVudHMgZm9yIGluc3VyYW5jZSBwcmVtaXVtcyBvciBzaW1pbGFyIGNvc3RzIHJlbGF0ZWQgdG8geW91ciByZW50YWwgcHJvcGVydHksIHdoaWNoIGNvdmVyIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHByZXBhaWQgZXhwZW5zZXMgaW4geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuPG9sPlxyXG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgUGFpZCBFeHBlbnNlczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIHJlY2VpcHRzLCBpbnZvaWNlcywgb3IgY29udHJhY3RzIHNob3dpbmcgdGhlIHBheW1lbnQgb2YgaW5zdXJhbmNlIHByZW1pdW1zIG9yIHNpbWlsYXIgZXhwZW5zZXMuIFRoaXMgc2hvdWxkIGNsZWFybHkgaW5kaWNhdGUgdGhlIGFtb3VudCBwYWlkLCB0aGUgZGF0ZSBvZiBwYXltZW50LCBhbmQgdGhlIGNvdmVyYWdlIHBlcmlvZC48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkNvdmVyYWdlIFBlcmlvZCBEZXRhaWxzOjwvc3Ryb25nPiBXZSBuZWVkIHNwZWNpZmljIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBjb3ZlcmFnZSBwZXJpb2QgZm9yIGVhY2ggZXhwZW5zZS4gUGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvciBhIHdyaXR0ZW4gc3VtbWFyeSB0aGF0IHNwZWNpZmllcyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgY292ZXJhZ2UgcGVyaW9kcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIGN1cnJlbnQgeWVhci48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlByb3BlcnR5IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBhZGRyZXNzIG9yIGlkZW50aWZpY2F0aW9uIG9mIHRoZSByZW50YWwgcHJvcGVydHkoaWVzKSB0byB3aGljaCB0aGVzZSBleHBlbnNlcyBhcHBseS48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlB1cnBvc2Ugb2YgdGhlIEV4cGVuc2U6PC9zdHJvbmc+IEZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLCBwcm92aWRlIGEgYnJpZWYgZXhwbGFuYXRpb24gb2YgdGhlIG5hdHVyZSBvZiBlYWNoIGV4cGVuc2UgKGUuZy4sIHByb3BlcnR5IGluc3VyYW5jZSwgbGlhYmlsaXR5IGluc3VyYW5jZSkuPC9saT5cclxuPC9vbD5cclxuPHA+UGxlYXNlIHJlbWVtYmVyIHRoYXQgaGF2aW5nIGFjY3VyYXRlIGFuZCBjb21wcmVoZW5zaXZlIGRvY3VtZW50YXRpb24gd2lsbCBhaWQgaW4gZW5zdXJpbmcgdGhhdCB5b3VyIHRheCByZXR1cm5zIGFyZSBwcmVwYXJlZCBjb3JyZWN0bHksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdGF4IGJlbmVmaXRzIHJlbGF0ZWQgdG8gdGhlc2UgcHJlcGFpZCBleHBlbnNlcy48L3A+XHJcbjxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBhbmQgeW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJCZW5lZml0IFZhbHVlIEluY3JlYXNlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJCZW5lZml0IFZhbHVlIEluY3JlYXNlXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gaW4gcHJvdmlkaW5nIG5lY2Vzc2FyeSBkb2N1bWVudHMgZm9yIHRheCBwcmVwYXJhdGlvbi4gXHJcbiAgICBBcyBwZXIgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHBheW1lbnQgZm9yIGxvY2FsIGltcHJvdmVtZW50cyBcclxuICAgIG9yIHNlcnZpY2VzIHRoYXQgZGlyZWN0bHkgaW5jcmVhc2UgdGhlIHZhbHVlIG9mIHlvdXIgcmVudGFsIHByb3BlcnR5LCBcclxuICAgIHdlIG5lZWQgZnVydGhlciBkZXRhaWxzIHRvIGVuc3VyZSB0aGUgYWNjdXJhdGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCBkb2N1bWVudGF0aW9uLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlIHByb3ZpZGVkIChlLmcuLCBzdHJlZXQgcmVwYWlycywgbmV3IHNpZGV3YWxrcykuPC9saT5cclxuICAgICAgICA8bGk+RGF0ZShzKSBvZiB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZS48L2xpPlxyXG4gICAgICAgIDxsaT5Ub3RhbCBjb3N0IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGltcHJvdmVtZW50IG9yIHNlcnZpY2UuPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgcGF5bWVudCBmb3IgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2UgKHJlY2VpcHRzLCBiYW5rIHN0YXRlbWVudHMsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBvZmZpY2lhbCBub3RpY2VzIG9yIGRvY3VtZW50YXRpb24gZnJvbSB0aGUgbG9jYWwgbXVuaWNpcGFsaXR5IHJlZ2FyZGluZyB0aGUgaW1wcm92ZW1lbnRzIG9yIGNoYXJnZXMuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiBob3cgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2Ugc3BlY2lmaWNhbGx5IGJlbmVmaXRlZCB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyBwb3RlbnRpYWwgdGF4IGRlZHVjdGlvbnMgb3IgY3JlZGl0cyBhc3NvY2lhdGVkIHdpdGggcHJvcGVydHkgdmFsdWUgaW5jcmVhc2VzIGR1ZSB0byBsb2NhbCBpbXByb3ZlbWVudHMgb3Igc2VydmljZXMuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZmFjaWxpdGF0ZSB0aGUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRhdGlvbi48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JmZWl0ZWQgU2VjdXJpdHkgRGVwb3NpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZmVpdGVkIFNlY3VyaXR5IERlcG9zaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgYWNjdXJhdGUgYW5kIGNvbXBsaWFudCwgd2UndmUgbm90ZWQgdGhhdCB5b3UgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gaGF2aW5nIG9uZSBvciBtb3JlIHRlbmFudHMgd2hvIGRpZCBub3QgZ2V0IHRoZWlyIHNlY3VyaXR5IGRlcG9zaXQgYmFjayB0aGlzIHllYXIgZHVlIHRvIGVpdGhlciBicmVha2luZyB0aGUgbGVhc2UgdGVybXMgb3IgbGVhdmluZyBkYW1hZ2UgcmVxdWlyaW5nIHJlcGFpci48L3A+XHJcbiAgICA8cD5UbyBwcm9jZWVkIHdpdGggeW91ciB0YXggcHJlcGFyYXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+QSBsaXN0IG9mIGVhY2ggdGVuYW50IHdob3NlIHNlY3VyaXR5IGRlcG9zaXQgd2FzIGZvcmZlaXRlZCwgaW5jbHVkaW5nOjwvbGk+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPlRlbmFudCdzIG5hbWU8L2xpPlxyXG4gICAgICAgICAgPGxpPlJlbnRhbCBhZGRyZXNzPC9saT5cclxuICAgICAgICAgIDxsaT5EYXRlIG9mIGxlYXNlIHRlcm1pbmF0aW9uPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIGV2aWRlbmNpbmcgdGhlIGZvcmZlaXR1cmUgcmVhc29uLCBzdWNoIGFzOjwvbGk+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkNvcHkgb2YgdGhlIGxlYXNlIGFncmVlbWVudCBzaG93aW5nIHRoZSBicmVhY2hlZCB0ZXJtczwvbGk+XHJcbiAgICAgICAgICA8bGk+UGhvdG9zIG9yIHJlcGFpciBpbnZvaWNlcyBmb3IgZGFtYWdlcyBjYXVzZWQgYnkgdGhlIHRlbmFudDwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHdyaXR0ZW4gbm90aWNlcyBwcm92aWRlZCB0byB0aGUgdGVuYW50IHJlZ2FyZGluZyB0aGUgZm9yZmVpdHVyZTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZWFjaCBmb3JmZWl0ZWQgc2VjdXJpdHkgZGVwb3NpdC48L2xpPlxyXG4gICAgICA8bGk+QW55IHJlY2VpcHRzIG9yIGludm9pY2VzIGZvciByZXBhaXJzIGFuZCBtYWludGVuYW5jZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSByZWFzb25zIGZvciBzZWN1cml0eSBkZXBvc2l0IGZvcmZlaXR1cmUuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoaXMgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgaW4gYSBjbGVhciBhbmQgb3JnYW5pemVkIG1hbm5lciB0byBmYWNpbGl0YXRlIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBUaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk5vbi1DYXNoIFJlbnRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk5vbi1DYXNoIFJlbnRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGUgZnJvbSB5b3VyIGVhcmxpZXIgcmVzcG9uc2VzIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgbm9uLWNhc2ggZm9ybXMgb2YgcGF5bWVudCBpbiBsaWV1IG9mIHJlbnQgdGhpcyB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0cmFuc2FjdGlvbnMuIEtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgU2VydmljZSBvciBHb29kcyBSZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmljZSwgZ29vZHMsIG9yIHByb3BlcnR5IHlvdSByZWNlaXZlZCBhcyByZW50IHBheW1lbnQuIEZvciBpbnN0YW5jZSwgXCJSZXBhaXIgc2VydmljZXMgZm9yIHRoZSBraXRjaGVuIHBsdW1iaW5nXCIgb3IgXCJhIGxhcHRvcCBjb21wdXRlclwiLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5WYWx1ZSBFc3RpbWF0aW9uOjwvc3Ryb25nPiBBbiBlc3RpbWF0ZWQgdmFsdWUgb2YgdGhlIHNlcnZpY2UsIGdvb2RzLCBvciBwcm9wZXJ0eSByZWNlaXZlZCBhdCB0aGUgdGltZSBvZiB0aGUgdHJhbnNhY3Rpb24uIElmIHBvc3NpYmxlLCBpbmNsdWRlIGFueSBkb2N1bWVudGF0aW9uIHRoYXQgc3VwcG9ydHMgdGhpcyB2YWx1YXRpb24sIHN1Y2ggYXMgcmVjZWlwdHMsIGludm9pY2VzLCBvciB3cml0dGVuIGFncmVlbWVudHMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkRhdGUocykgb2YgVHJhbnNhY3Rpb246PC9zdHJvbmc+IFNwZWNpZmljIGRhdGUocykgd2hlbiB5b3UgcmVjZWl2ZWQgdGhlc2UgZ29vZHMgb3Igc2VydmljZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkluZm9ybWF0aW9uIGFib3V0IHRoZSBUZW5hbnQgb3IgUHJvdmlkZXI6PC9zdHJvbmc+IE5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgcHJvdmlkZWQgdGhlIGdvb2RzIG9yIHNlcnZpY2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5BbnkgRm9ybWFsIEFncmVlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgd3JpdHRlbiBhZ3JlZW1lbnRzIG9yIGNvbnRyYWN0cyB0aGF0IG91dGxpbmUgdGhpcyBhcnJhbmdlbWVudC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UmVjZWlwdHMgb3IgRG9jdW1lbnRhdGlvbiBvZiB0aGUgVHJhbnNhY3Rpb246PC9zdHJvbmc+IEFueSByZWNlaXB0cywgaW52b2ljZXMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBldmlkZW5jZXMgdGhlIGV4Y2hhbmdlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB5b3VyIGluY29tZS4gWW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlIHdpbGwgZ3JlYXRseSBhc3Npc3QgaW4gY29tcGxldGluZyB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseS48L3A+XHJcbiAgICA8cD5QbGVhc2Ugc3VibWl0IHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIFByb3BlcnR5IERlcHJlY2lhdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIFByb3BlcnR5IERlcHJlY2lhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+SW4gcmV2aWV3aW5nIHlvdXIgYWNjb3VudHMsIHdlJ3ZlIG5vdGVkIHRoYXQgYWxsIHlvdXIgcmVudGFsIHByb3BlcnRpZXMgYXJlIGN1cnJlbnRseSBiZWluZyBkZXByZWNpYXRlZCBhcyBwYXJ0IG9mIHRoZWlyIHRheCB0cmVhdG1lbnQgaW4gb3VyIGZpbmFuY2lhbCByZWNvcmRzLiBUaGlzIG1ldGhvZCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSBmaW5hbmNpYWwgcmVwb3J0aW5nIGFuZCB0YXggZWZmaWNpZW5jeS4gSG93ZXZlciwgaXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IHRoZXJlIG1heSBiZSBkaXNjcmVwYW5jaWVzIG9yIHVwZGF0ZXMgcmVxdWlyZWQgaW4gb3VyIHJlY29yZHMgcmVnYXJkaW5nIHRoZSBkZXByZWNpYXRpb24gb2YgeW91ciByZW50YWwgcHJvcGVydGllcy48L3A+XHJcbiAgICA8cD5UbyBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBpbnRlZ3JpdHkgb2YgeW91ciBmaW5hbmNpYWwgYW5kIHRheCByZXBvcnRpbmcsIHdlIGtpbmRseSByZXF1ZXN0IHlvdXIgYXNzaXN0YW5jZSBpbiB2ZXJpZnlpbmcgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHlvdXIgcmVudGFsIHByb3BlcnRpZXMgd2l0aCByZWdhcmRzIHRvIGRlcHJlY2lhdGlvbi48L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+Q29uZmlybSB3aGV0aGVyIGFsbCB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzIGFyZSBiZWluZyBkZXByZWNpYXRlZCBpbiBvdXIgYm9va3MuIElmIHRoaXMgaXMgYWNjdXJhdGUsIG5vIGFjdGlvbiBpcyByZXF1aXJlZCBvbiB5b3VyIHBhcnQuPC9saT5cclxuICAgIDxsaT5JZiB0aGVyZSBhcmUgYW55IHJlbnRhbCBwcm9wZXJ0aWVzIDxzdHJvbmc+bm90PC9zdHJvbmc+IGN1cnJlbnRseSBiZWluZyBkZXByZWNpYXRlZCwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGZvciBlYWNoIHByb3BlcnR5OjwvbGk+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bGk+UHJvcGVydHkgQWRkcmVzczwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5EYXRlIG9mIFB1cmNoYXNlPC9saT5cclxuICAgICAgICAgICAgPGxpPlB1cmNoYXNlIFByaWNlPC9saT5cclxuICAgICAgICAgICAgPGxpPlJlYXNvbiBmb3IgTm9uLURlcHJlY2lhdGlvbjwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5BbnkgYWRkaXRpb25hbCByZWxldmFudCBpbmZvcm1hdGlvbjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QgaXMgaGlnaGx5IGFwcHJlY2lhdGVkIGFuZCBlc3NlbnRpYWwgZm9yIGVuc3VyaW5nIHRoYXQgeW91ciBmaW5hbmNpYWwgcmVjb3JkcyBhY2N1cmF0ZWx5IHJlZmxlY3QgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gYWxsb3cgc3VmZmljaWVudCB0aW1lIGZvciByZXZpc2lvbnMgYW5kIHVwZGF0ZXMgYXMgbmVjZXNzYXJ5LjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gV2UgYXJlIGhlcmUgdG8gc3VwcG9ydCB5b3UgaW4gbWFpbnRhaW5pbmcgcHJlY2lzZSBhbmQgY29tcGxpYW50IGZpbmFuY2lhbCByZWNvcmRzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIHlvdXIgY29udGludWVkIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIFJlcGFpcnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbnRhbCBSZXBhaXJzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90ZWQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIG1ha2luZyBuZWNlc3NhcnkgcmVwYWlycyB0byB5b3VyIHJlbnRhbCBwcm9wZXJ0eSB0byBrZWVwIGl0IGluIGdvb2Qgd29ya2luZyBjb25kaXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGV4cGVuc2VzIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIHRheCBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgcmVwYWlycyBtYWRlIGR1cmluZyB0aGUgdGF4IHllYXIuIFBsZWFzZSBpbmNsdWRlOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIG5hdHVyZSBvZiBlYWNoIHJlcGFpciAoZS5nLiwgZml4aW5nIGxlYWtzLCBwYWludGluZywgcmVwYWlyaW5nIGFwcGxpYW5jZXMpLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGRhdGUgZWFjaCByZXBhaXIgd2FzIGNvbXBsZXRlZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBsb2NhdGlvbi9hZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eSB3aGVyZSByZXBhaXJzIHdlcmUgbWFkZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlJlY2VpcHRzIG9yIGludm9pY2VzIGZvciBlYWNoIHJlcGFpciBtYWRlLiBUaGlzIHNob3VsZCBpbmNsdWRlOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIHNlcnZpY2UgcHJvdmlkZXLigJlzIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHBhaWQgZm9yIGVhY2ggcmVwYWlyLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgd29yayBwZXJmb3JtZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgbWV0aG9kIG9mIHBheW1lbnQgdXNlZC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPklmIGFueSByZXBhaXJzIHdlcmUgbWFkZSBieSB5b3Vyc2VsZiBvciBhbiB1bmxpY2Vuc2VkIGNvbnRyYWN0b3IsIHBsZWFzZSBwcm92aWRlOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+QSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgd29yayBwZXJmb3JtZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgY29zdCBvZiBtYXRlcmlhbHMgcHVyY2hhc2VkLCBzdXBwb3J0ZWQgYnkgcmVjZWlwdHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZXN0aW1hdGVkIG51bWJlciBvZiBob3VycyBzcGVudCBvbiBlYWNoIHJlcGFpciwgYWxvbmcgd2l0aCBhIHJlYXNvbmFibGUgaG91cmx5IHJhdGUgZm9yIGxhYm9yLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugbm90ZSB0aGF0IGFjY3VyYXRlIGFuZCBjb21wcmVoZW5zaXZlIGRvY3VtZW50YXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gb3B0aW1pemUgeW91ciB0YXggZGVkdWN0aW9ucyByZWxhdGVkIHRvIHByb3BlcnR5IHJlcGFpciBleHBlbnNlcy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyBuZWVkZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIEltcHJvdmVtZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIEltcHJvdmVtZW50c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB5b3UndmUgbWFkZSB1cGdyYWRlcyBvciBlbmhhbmNlbWVudHMgdG8geW91ciByZW50YWwgcHJvcGVydHkgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBpbmNvcnBvcmF0ZSB0aGVzZSBpbXByb3ZlbWVudHMgaW50byB5b3VyIHRheCBkb2N1bWVudGF0aW9uLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIEVhY2ggSW1wcm92ZW1lbnQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCB1cGdyYWRlIG9yIGVuaGFuY2VtZW50IG1hZGUgdG8gdGhlIHByb3BlcnR5LiBUaGlzIGNvdWxkIGluY2x1ZGUgcmVub3ZhdGlvbnMsIGFkZGl0aW9ucywgb3IgYW55IHVwZ3JhZGVzIHRoYXQgaGF2ZSBpbmNyZWFzZWQgaXRzIHZhbHVlLCBleHRlbmRlZCBpdHMgbGlmZXNwYW4sIG9yIGFkYXB0ZWQgaXQgdG8gbmV3IHVzZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlcyBvZiBJbXByb3ZlbWVudHM6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIG9yIHJhbmdlIG9mIGRhdGVzIHdoZW4gdGhlIGltcHJvdmVtZW50cyB3ZXJlIHN0YXJ0ZWQgYW5kIGNvbXBsZXRlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvc3RzIEludm9sdmVkOjwvc3Ryb25nPiBEZXRhaWxlZCBleHBlbnNlcyByZWxhdGVkIHRvIGVhY2ggaW1wcm92ZW1lbnQgcHJvamVjdC4gVGhpcyBpbmNsdWRlcyBtYXRlcmlhbHMsIGxhYm9yLCBwZXJtaXRzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvc3RzLiBQbGVhc2UgcHJvdmlkZSBpdGVtaXplZCByZWNlaXB0cyBvciBpbnZvaWNlcyBpZiBhdmFpbGFibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBQYXltZW50Ojwvc3Ryb25nPiBDb3BpZXMgb2YgY2FuY2VsbGVkIGNoZWNrcywgYmFuayBzdGF0ZW1lbnRzLCBvciBlbGVjdHJvbmljIHBheW1lbnQgY29uZmlybWF0aW9ucyB0aGF0IHByb3ZlIHBheW1lbnQgZm9yIHRoZSBpbXByb3ZlbWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5CZWZvcmUgYW5kIEFmdGVyIFBpY3R1cmVzOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIHBob3RvZ3JhcGhzIG9mIHRoZSBwcm9wZXJ0eSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBpbXByb3ZlbWVudHMgd2VyZSBtYWRlLiBUaGlzIGhlbHBzIGluIHN1YnN0YW50aWF0aW5nIHRoZSBlbmhhbmNlbWVudCB0byB5b3VyIHByb3BlcnR5J3MgdmFsdWUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db250cmFjdG9yIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBJZiBjb250cmFjdG9ycyB3ZXJlIHVzZWQsIHBsZWFzZSBwcm92aWRlIHRoZWlyIGJ1c2luZXNzIG5hbWVzLCBhZGRyZXNzZXMsIGFuZCBjb250YWN0IGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGNvbXB1dGluZyBwb3RlbnRpYWwgdGF4IGRlZHVjdGlvbnMgb3IgYmVuZWZpdHMgdGhhdCBtYXkgYmUgYXBwbGljYWJsZSB0byB5b3UgYXMgYSByZXN1bHQgb2YgdGhlc2UgcHJvcGVydHkgaW1wcm92ZW1lbnRzLiBQbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGdhdGhlcmVkIGFuZCBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSwgdG8gZW5zdXJlIHRpbWVseSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybnMuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBBY3Rpdml0eSBQYXJ0aWNpcGF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgQWN0aXZpdHkgUGFydGljaXBhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgd2UgbW92ZSBmb3J3YXJkIHdpdGggeW91ciB0YXggcHJlcGFyYXRpb24sIGl0IGhhcyBiZWNvbWUgbmVjZXNzYXJ5IHRvIGNvbGxlY3QgYSBiaXQgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBhY3RpdmUgcGFydGljaXBhdGlvbiBpbiByZW50YWwgcHJvcGVydHkgYWN0aXZpdGllcy4gVGhpcyBpcyBjcnVjaWFsIGZvciBwYXNzaW5nIHNwZWNpZmljIHRheCB0ZXN0cyB0aGF0IGFwcGx5IHRvIGluZGl2aWR1YWxzIGFjdGl2ZWx5IGludm9sdmVkIGluIHRoZWlyIHJlbnRhbCBwcm9wZXJ0aWVzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBkZXRhaWxzIHRvIGVuc3VyZSB3ZSBtZWV0IGFsbCByZXF1aXJlbWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgUGFydGljaXBhdGlvbjo8L3N0cm9uZz4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiB5b3VyIGFjdGl2ZSByb2xlcyB0aGlzIHRheCB5ZWFyLiBUaGlzIGluY2x1ZGVzIG1ha2luZyBkZWNpc2lvbnMgc3VjaCBhcyBhcHByb3ZpbmcgbmV3IHRlbmFudHMsIHNldHRpbmcgcmVudGFsIHRlcm1zLCBvciBhdXRob3JpemluZyByZXBhaXJzIGFuZCBtYWludGVuYW5jZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRpbWUgU3BlbnQ6PC9zdHJvbmc+IEFuIGVzdGltYXRlZCBudW1iZXIgb2YgaG91cnMgeW91IHBlcnNvbmFsbHkgc3BlbnQgb24gYWN0aXZpdGllcyByZWxhdGVkIHRvIHRoZSBtYW5hZ2VtZW50IGFuZCBkZWNpc2lvbi1tYWtpbmcgb2YgeW91ciByZW50YWwgcHJvcGVydHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZWNpc2lvbiBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIHJlY29yZHMgb3IgY29ycmVzcG9uZGVuY2UgdGhhdCBzaG93Y2FzZSB5b3VyIGludm9sdmVtZW50IGluIGtleSBkZWNpc2lvbnMgKGUtbWFpbHMsIHNpZ25lZCBkb2N1bWVudHMsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgTWFuYWdlbWVudCBFbmdhZ2VtZW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgZW5nYWdlZCB3aXRoIGEgcHJvcGVydHkgbWFuYWdlciwgYSBkZXNjcmlwdGlvbiBvZiB0aGVpciByb2xlIHZlcnN1cyB0aGUgdGFza3MgeW91IHBlcnNvbmFsbHkgaGFuZGxlIHdvdWxkIGJlIGhlbHBmdWwuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB3aXRoIHRoZXNlIHNwZWNpZmljcyB3aWxsIGdyZWF0bHkgZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIGFkdmFudGFnZW91cyBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiByZWdhcmRpbmcgcmVudGFsIGFjdGl2aXRpZXMuIElmIHRoZXJlIGFyZSBhbnkgYXNwZWN0cyBvZiB0aGlzIHJlcXVlc3QgdGhhdCByZXF1aXJlIGNsYXJpZmljYXRpb24sIG9yIGlmIGFzc2lzdGFuY2UgaXMgbmVlZGVkLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZWFsIEVzdGF0ZSBQcm9mZXNzaW9uYWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlYWwgRXN0YXRlIFByb2Zlc3Npb25hbFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIHNwZW50IG1vcmUgdGhhbiBoYWxmIG9mIHlvdXIgd29ya2luZyB0aW1lIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgdGhpcyB0YXggeWVhci4gVG8gcHJvcGVybHkgZXZhbHVhdGUgeW91ciBlbGlnaWJpbGl0eSBmb3IgdGF4IGJlbmVmaXRzIGFzIGEgUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5TdW1tYXJ5IG9mIEFubnVhbCBXb3JraW5nIEhvdXJzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIHN1bW1hcnkgb2YgeW91ciB0b3RhbCB3b3JraW5nIGhvdXJzIHRoaXMgeWVhciwgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGhvdXJzIGRlZGljYXRlZCB0byByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZWFsIEVzdGF0ZSBBY3Rpdml0aWVzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHN1Y2ggYXMgY29udHJhY3RzLCBlbmdhZ2VtZW50IGxldHRlcnMsIG9yIGNsaWVudCBpbnZvaWNlcyB0aGF0IHByb3ZlIHlvdXIgcGFydGljaXBhdGlvbiBpbiByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzIChlLmcuLCBzYWxlcywgbGVhc2luZywgbWFuYWdlbWVudCkuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkxpc3Qgb2YgUHJvcGVydGllczo8L3N0cm9uZz4gQSBsaXN0IG9mIHByb3BlcnRpZXMgeW91IGhhdmUgbWFuYWdlZCwgc29sZCwgb3IgYXJlIGN1cnJlbnRseSBzZWxsaW5nLCBpbmNsdWRpbmcgdGhlaXIgbG9jYXRpb24gYW5kIHRoZSBuYXR1cmUgb2YgeW91ciBpbnZvbHZlbWVudC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgSm9iIERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIG91dGxpbmUgb2YgeW91ciByb2xlKHMpIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMsIHNwZWNpZnlpbmcgd2hldGhlciB5b3VyIGludm9sdmVtZW50IGlzIHByaW1hcmlseSBhcyBhIGJyb2tlciwgYWdlbnQsIHByb3BlcnR5IG1hbmFnZXIsIGV0Yy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UmVhbCBFc3RhdGUgTGljZW5zZXMgb3IgQ2VydGlmaWNhdGlvbnM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgbGljZW5zZXMgb3IgY2VydGlmaWNhdGlvbnMgdGhhdCB2YWxpZGF0ZSB5b3VyIHByb2Zlc3Npb25hbCBzdGF0dXMgaW4gdGhlIHJlYWwgZXN0YXRlIHNlY3Rvci48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+Q2FsZW5kYXIgb3IgU2NoZWR1bGU6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgYSBjYWxlbmRhciBvciBzY2hlZHVsZSByZWZsZWN0aW5nIHlvdXIgcmVhbCBlc3RhdGUgYWN0aXZpdGllcyB0aHJvdWdob3V0IHRoZSB5ZWFyIHRvIGhlbHAgY29ycm9ib3JhdGUgdGhlIHRpbWUgc3BlbnQgaW4gdGhlc2UgYWN0aXZpdGllcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGlzIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gdXMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJucy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZC4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFydGlhbCBSZW50YWwgUHJvcGVydHlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBhcnRpYWwgUmVudGFsIFByb3BlcnR5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGxldHRpbmcgdXMga25vdyB0aGF0IHlvdSByZW50ZWQgb3V0IGEgcG9ydGlvbiBvZiB5b3VyIHByb3BlcnR5IHRoaXMgdGF4IHllYXIgd2hpbGUgdXNpbmcgdGhlIHJlc3QgZm9yIHBlcnNvbmFsIHB1cnBvc2VzLiBUbyBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggcmV0dXJucyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBiZXN0IHRheCBhZHZhbnRhZ2VzLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgcGFydGlhbCByZW50YWwgcHJvcGVydHk6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERldGFpbHM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db21wbGV0ZSBhZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSByZW50ZWQgcG9ydGlvbiBhbmQgdGhlIHBlcnNvbmFsIHVzZSBwb3J0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgQWdyZWVtZW50Ojwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlN0YXJ0IGFuZCBlbmQgZGF0ZXMgb2YgdGhlIHJlbnRhbCBwZXJpb2Qgd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEluY29tZTo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGFkdmFuY2UgcmVudCBvciBzZWN1cml0eSBkZXBvc2l0cyBub3QgcmV0dXJuZWQgdG8gdGhlIHRlbmFudC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZXM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgZXhwZW5zZXMgZm9yIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyByZXBhaXJzLCB1dGlsaXRpZXMsIGluc3VyYW5jZSwgYW5kIHByb3BlcnR5IHRheGVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SW5mb3JtYXRpb24gb24gZXhwZW5zZXMgc2hhcmVkIGJldHdlZW4gdGhlIHJlbnRhbCBhbmQgcGVyc29uYWwgdXNlIHBvcnRpb25zLCBhbmQgaG93IHRoZXkgYXJlIGRpdmlkZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlVzZSBvZiBQcm9wZXJ0eTo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIG51bWJlciBvZiBkYXlzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VG90YWwgbnVtYmVyIG9mIGRheXMgcmVudGVkIGF0IGZhaXIgcmVudGFsIHZhbHVlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgYW5kIFJlcGFpcnM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBpbXByb3ZlbWVudHMgb3IgcmVwYWlycyBtYWRlIHNwZWNpZmljYWxseSBpbiB0aGUgcmVudGFsIHBvcnRpb24gYW5kIHRoZSBjb3N0IGludm9sdmVkLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZ2F0aGVyIHRoZXNlIGRldGFpbHMgYW5kIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBUaGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB0aGlzIGluZm9ybWF0aW9uIGFyZSBjcnVjaWFsIGZvciBjb3JyZWN0IHRheCBmaWxpbmcgYW5kIG9wdGltaXppbmcgeW91ciBwb3RlbnRpYWwgZGVkdWN0aW9ucyBhbmQgdGF4IGJlbmVmaXRzLjwvcD5cclxuICAgIDxwPkRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCB1c2luZyB5b3VyIHJlbnRhbCBwcm9wZXJ0eSBmb3IgcGVyc29uYWwgcHVycG9zZXMgZHVyaW5nIHRoZSBsYXN0IHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgZGF5cyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3Nlczo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIGV4YWN0IG51bWJlciBvZiBkYXlzIGR1cmluZyB0aGUgdGF4IHllYXIgd2hlbiB0aGUgcHJvcGVydHkgd2FzIHVzZWQgYnkgeW91LCB5b3VyIGZhbWlseSwgb3IgZnJpZW5kcyB3aXRob3V0IGNoYXJnaW5nIHJlbnQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBkYXlzIHJlbnRlZCBhdCBmYWlyIHJlbnRhbCBwcmljZTo8L3N0cm9uZz4gUHJvdmlkZSB0aGUgbnVtYmVyIG9mIGRheXMgdGhlIHByb3BlcnR5IHdhcyBhY3R1YWxseSByZW50ZWQgb3V0IHRvIHRlbmFudHMgYXQgYSBmYWlyIHJlbnRhbCBwcmljZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIHRvdGFsIGFtb3VudCBvZiByZW50YWwgaW5jb21lIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIgZm9yIHRoaXMgcHJvcGVydHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgZXhwZW5zZXM6PC9zdHJvbmc+IFByb3ZpZGUgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBleHBlbnNlcyBpbmN1cnJlZCBmb3IgdGhlIHByb3BlcnR5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFkdmVydGlzaW5nLCBjbGVhbmluZyBhbmQgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBwcm9wZXJ0eSB0YXhlcywgbW9ydGdhZ2UgaW50ZXJlc3QsIGFuZCBhbnkgcmVwYWlycy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgZGF0ZXM6PC9zdHJvbmc+IExpc3QgYW55IGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSBwcm9wZXJ0eSBkdXJpbmcgdGhlIHRheCB5ZWFyLCBhbG9uZyB3aXRoIHRoZSBkYXRlIG9mIGltcHJvdmVtZW50IGFuZCB0aGUgY29zdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IFRheCBTdGF0ZW1lbnQgYW5kIE1vcnRnYWdlIEludGVyZXN0IFN0YXRlbWVudDo8L3N0cm9uZz4gQXR0YWNoIGEgY29weSBvZiB5b3VyIGFubnVhbCBwcm9wZXJ0eSB0YXggc3RhdGVtZW50IGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCBzdGF0ZW1lbnQgZm9yIHRoaXMgcHJvcGVydHkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Qcm92aWRpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGVuYWJsZSB1cyB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBwb3J0aW9uIG9mIGV4cGVuc2VzIHRoYXQgY2FuIGJlIGRlZHVjdGVkIGFuZCByZXBvcnQgeW91ciBpbmNvbWUgYWNjdXJhdGVseS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCBjb3VudHMgYXMgcGVyc29uYWwgdXNlIHZlcnN1cyByZW50YWwgdXNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPiAgXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFydGlhbCBQZXJzb25hbCBVc2UgUmVudGFsXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgcmVudGluZyBvdXQgcGFydCBvZiB5b3VyIHByb3BlcnR5IGZvciBwcm9maXQsIHdoaWxlIGFsc28gdXNpbmcgaXQgaW4gYSBtYW5uZXIgdGhhdCBtYXkgY2xhc3NpZnkgaXQgYXMgeW91ciByZXNpZGVuY2UuIFRvIGFjY3VyYXRlbHkgY2FwdHVyZSBhbGwgaW5mb3JtYXRpb24gYW5kIGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQvTGVhc2U6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMsIHJlbnRhbCBwZXJpb2QsIGFuZCBwYXltZW50IGRldGFpbHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEluY29tZSBSZWNvcmRzOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIG9mIGFsbCByZW50YWwgaW5jb21lIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBSZWNlaXB0cyBhbmQgcmVjb3JkcyBvZiBleHBlbnNlcyByZWxhdGVkIHRvIHRoZSByZW50YWwgYWN0aXZpdHkuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcmVwYWlycywgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBhbmQgcHJvcGVydHkgbWFuYWdlbWVudCBmZWVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIFVzZSBEZXRhaWxzOjwvc3Ryb25nPiBBIGxvZyBvciBjYWxlbmRhciBkb2N1bWVudGluZyB0aGUgc3BlY2lmaWMgZGF5cyB0aGUgcHJvcGVydHkgd2FzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzIGFuZCBub3QgcmVudGVkIG91dC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBUYXggYW5kIE1vcnRnYWdlIEludGVyZXN0IFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBwcm9wZXJ0eSB0YXggc3RhdGVtZW50cyBhbmQgbW9ydGdhZ2UgaW50ZXJlc3Qgc3RhdGVtZW50cywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgYW5kIERlcHJlY2lhdGlvbjo8L3N0cm9uZz4gUmVjb3JkcyBvZiBhbnkgcHJvcGVydHkgaW1wcm92ZW1lbnRzIG9yIGRlcHJlY2lhdGlvbiBzY2hlZHVsZXMgaWYgcHJldmlvdXNseSBjbGFpbWVkIG9uIHlvdXIgdGF4IHJldHVybnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JdCBpcyBjcnVjaWFsIHRoYXQgd2UgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBkb2N1bWVudHMgdG8gZW5zdXJlIHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2Ugb3IgY29udGFjdCB1cyBkaXJlY3RseSBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGNvbmNlcm5zLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUm95YWx0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJveWFsdHkgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHlvdSd2ZSBpbmRpY2F0ZWQgcmVjZWl2aW5nIHBheW1lbnRzIHRoYXQgY291bGQgYmUgY29uc2lkZXJlZCByb3lhbHR5IGluY29tZSB0aGlzIHBhc3QgeWVhci4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWxsIEZvcm1zIDEwOTktTUlTQzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgY29waWVzIG9mIGFueSAxMDk5LU1JU0MgZm9ybXMgcmVjZWl2ZWQgZm9yIHJveWFsdHkgcGF5bWVudHMuIEluY2x1ZGUgdGhvc2UgZnJvbSB0cmFkaXRpb25hbCBzb3VyY2VzIGxpa2UgcGF0ZW50cywgY29weXJpZ2h0cywgYW5kIG1pbmVyYWwgcmlnaHRzLCBhcyB3ZWxsIGFzIGFueSBmcm9tIGRpZ2l0YWwgY29udGVudCBwbGF0Zm9ybXMgc3VjaCBhcyBVZGVteSwgWW91VHViZSwgZXRjLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgU3RhdGVtZW50IG9mIEVhcm5pbmdzOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZSByb3lhbHR5IGluY29tZSBmcm9tIHNvdXJjZXMgdGhhdCBkbyBub3QgcHJvdmlkZSBhIDEwOTktTUlTQywgb3IgaW4gYWRkaXRpb24gdG8gdGhvc2UgdGhhdCBkbywgd2UgbmVlZCBhIGRldGFpbGVkIHN0YXRlbWVudCBvciBsb2cgb2YgdGhlc2UgZWFybmluZ3MuIFRoaXMgc2hvdWxkIGluY2x1ZGUgZGF0ZXMsIGFtb3VudHMsIGFuZCBzb3VyY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZXhwZW5zZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnZW5lcmF0aW9uIG9mIHRoaXMgcm95YWx0eSBpbmNvbWUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFya2V0aW5nLCBwcm9kdWN0aW9uLCBhbmQgbGVnYWwgZXhwZW5zZXMuIFBsZWFzZSBwcm92aWRlIHJlY2VpcHRzLCBpbnZvaWNlcywgb3IgYSBkZXRhaWxlZCBleHBlbnNlIGxvZy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRpZ2l0YWwgQ29udGVudCBQbGF0Zm9ybSBSZXBvcnRzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIGFueSB5ZWFyLWVuZCBzdW1tYXJ5IHJlcG9ydHMgb3IgaW5jb21lIHN0YXRlbWVudHMgcHJvdmlkZWQgYnkgZGlnaXRhbCBwbGF0Zm9ybXMgd2hlcmUgeW91ciBjb250ZW50IGlzIGhvc3RlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBXaXRoaG9sZGluZyBOb3RpY2VzOjwvc3Ryb25nPiBJZiB0YXggd2FzIHdpdGhoZWxkIGZyb20gYW55IG9mIHlvdXIgcm95YWx0eSBwYXltZW50cywgcGxlYXNlIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBvciBub3RpY2VzIGluZGljYXRpbmcgdGhlIGFtb3VudCB3aXRoaGVsZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZG9jdW1lbnRzIGFuZCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gd2lsbCBoZWxwIHVzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHByZXBhcmF0aW9uIGlzIGJvdGggYWNjdXJhdGUgYW5kIG1heGltaXplZCBmb3IgeW91ciBiZW5lZml0LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgaXRlbXMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvdGVsIE1vdGVsIEJlZCBCcmVha2Zhc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkhvdGVsIE1vdGVsIEJlZCBCcmVha2Zhc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBhY2N1cmF0ZWx5IGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBvd25pbmcgcmVudGFsIHByb3BlcnRpZXMgdGhhdCBvcGVyYXRlIGFzIGEgSG90ZWwsIE1vdGVsLCBCZWQgYW5kIEJyZWFrZmFzdCwgb3Igb2ZmZXIgc2hvcnQtdGVybSBhY2NvbW1vZGF0aW9ucyBzaW1pbGFyIHRvIEFpcmJuYi4gVG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHNlcnZpY2UgYW5kIGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlIGFkZHJlc3MgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBwcm9wZXJ0eSB5b3UgcmVudCBvdXQgb24gYSBzaG9ydC10ZXJtIGJhc2lzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIFJlY29yZHM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgYWxsIGluY29tZSByZWNlaXZlZCBmcm9tIHRoZXNlIHByb3BlcnRpZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcmVudGFsIGluY29tZSwgY2xlYW5pbmcgZmVlcywgYW5kIGFueSBvdGhlciBjaGFyZ2VzIHRvIHJlbnRlcnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IENvbXByZWhlbnNpdmUgbGlzdCBvZiBhbGwgZXhwZW5zZXMgcmVsYXRlZCB0byBlYWNoIHJlbnRhbCBhY3Rpdml0eS4gVGhpcyBpbmNsdWRlcyBtb3J0Z2FnZSBpbnRlcmVzdCwgcHJvcGVydHkgdGF4ZXMsIGluc3VyYW5jZSwgcmVwYWlycyBhbmQgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgbWFuYWdlbWVudCBmZWVzLCBhbmQgYWR2ZXJ0aXNpbmcgY29zdHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5PY2N1cGFuY3kgSW5mb3JtYXRpb246PC9zdHJvbmc+IE51bWJlciBvZiBkYXlzIGVhY2ggcHJvcGVydHkgd2FzIHJlbnRlZCBvdXQgZHVyaW5nIHRoZSB5ZWFyLCBhcyB3ZWxsIGFzIHRoZSBudW1iZXIgb2YgZGF5cyBpdCB3YXMgdXNlZCBmb3IgcGVyc29uYWwgcHVycG9zZXMsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5MZWdhbCBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBDb3BpZXMgb2YgYW55IGxvY2FsIGxpY2Vuc2VzLCBwZXJtaXRzLCBvciByZWdpc3RyYXRpb25zIHJlcXVpcmVkIGZvciBvcGVyYXRpbmcgdGhlc2UgcmVudGFsIHByb3BlcnRpZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGxpc3QgaXMgbm90IGV4aGF1c3RpdmUsIGFuZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG1heSBiZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gUGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgcmVwbHkgdG8gdGhpcyBlbWFpbCBvciB1cGxvYWQgdGhlbSBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC4gWW91ciBwcm9tcHQgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgZXNzZW50aWFsIGZvciB0aGUgYWNjdXJhdGUgYW5kIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIGNob29zaW5nIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBSZWNvdmVyeVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBSZWNvdmVyeVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcmVjZW50IGNvbmZpcm1hdGlvbiByZWdhcmRpbmcgcmVjZWl2aW5nIHBheW1lbnRzIG9yIHJlZnVuZHMgY29uc2lkZXJlZCBhICdUYXhhYmxlIFJlY292ZXJ5JyBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBpbmNvcnBvcmF0ZSB0aGlzIGludG8geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscy4gQ291bGQgeW91IHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG48b2w+XHJcbiAgPGxpPjxiPkFtb3VudCBvZiBUYXhhYmxlIFJlY292ZXJ5OjwvYj4gVGhlIHRvdGFsIHN1bSBvZiBhbGwgcGF5bWVudHMgb3IgcmVmdW5kcyByZWNlaXZlZCB0aGF0IGFyZSBjbGFzc2lmaWVkIGFzIHRheGFibGUgcmVjb3ZlcnkuPC9saT5cclxuICA8bGk+PGI+U291cmNlIERvY3VtZW50YXRpb246PC9iPiBQbGVhc2UgcHJvdmlkZSBhbnkgb2ZmaWNpYWwgc3RhdGVtZW50cyBvciBkb2N1bWVudHMgY29uZmlybWluZyB0aGVzZSBwYXltZW50cyBvciByZWZ1bmRzLiBUaGlzIGNvdWxkIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzLCByZWZ1bmQgb3IgY29tcGVuc2F0aW9uIGxldHRlcnMsIG9yIGFueSBvdGhlciByZWxldmFudCBkb2N1bWVudGF0aW9uLjwvbGk+XHJcbiAgPGxpPjxiPk5hdHVyZSBvZiB0aGUgT3JpZ2luYWwgRGVkdWN0aW9uIG9yIENyZWRpdDo8L2I+IEEgYnJpZWYgZXhwbGFuYXRpb24gb3IgZG9jdW1lbnRhdGlvbiBvZiB0aGUgb3JpZ2luYWwgZXhwZW5zZSBvciBpbnZlc3RtZW50IHRoYXQgbGVkIHRvIHRoZSB0YXhhYmxlIHJlY292ZXJ5LiBUaGlzIGluY2x1ZGVzIHRoZSB0YXggeWVhciBvZiB0aGUgZGVkdWN0aW9uIG9yIGNyZWRpdC48L2xpPlxyXG4gIDxsaT48Yj5EYXRlIFJlY2VpdmVkOjwvYj4gVGhlIHNwZWNpZmljIGRhdGVzIHdoZW4gdGhlc2UgcGF5bWVudHMgb3IgcmVmdW5kcyB3ZXJlIHJlY2VpdmVkLjwvbGk+XHJcbiAgPGxpPjxiPkFueSBSZWxhdGVkIEV4cGVuc2UgRG9jdW1lbnRhdGlvbjo8L2I+IElmIHRoZXJlIHdlcmUgYW55IGV4cGVuc2VzIGluY3VycmVkIHRvIHJlY2VpdmUgdGhpcyByZWNvdmVyeSAoc3VjaCBhcyBsZWdhbCBmZWVzKSwgcGxlYXNlIHByb3ZpZGUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbi48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciB1cyB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBjb21wbGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuIElmIHlvdSBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0YXhhYmxlIHJlY292ZXJpZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzZXBhcmF0ZSBpbnN0YW5jZS48L3A+XHJcbjxwPlBsZWFzZSBsZXQgdXMga25vdyBpZiB5b3UgbmVlZCBhbnkgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbi4gV2UgYXJlIGhlcmUgdG8gaGVscCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBBbGltb255XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIEFsaW1vbnlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYCAgICA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBwcmVsaW1pbmFyeSBpbmZvcm1hdGlvbiBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFdlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBhbGltb255IHBheW1lbnRzIGluIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jbHVkZSB0aGlzIGluIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscyBhbmQgZG9jdW1lbnRzIGJhc2VkIG9uIHRoZSBkYXRlIG9mIHlvdXIgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC48L3A+XHJcbiAgICA8cD5BbGltb255IHBheW1lbnRzIGFyZSBjb25zaWRlcmVkIHRheGFibGUgaW5jb21lIGZvciB0aGUgcmVjZWl2ZXIgZGVwZW5kaW5nIG9uIHRoZSBkYXRlIG9mIHRoZSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LiBEaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50cyBleGVjdXRlZCBhZnRlciBEZWNlbWJlciAzMSwgMjAxOCwgZG8gbm90IGNvdW50IGFsaW1vbnkgcGF5bWVudHMgYXMgdGF4YWJsZSBpbmNvbWUuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzIHRvIGVuc3VyZSB3ZSBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHBheW1lbnRzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIHlvdXIgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudDo8L3N0cm9uZz4gVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFsaW1vbnkgcGF5bWVudHMgeW91IHJlY2VpdmVkIGFyZSB0YXhhYmxlLiBQbGVhc2UgcHJvdmlkZSBhIGNvcHkgb2YgdGhlIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQgb2YgYWxpbW9ueSByZWNlaXZlZCB0aGlzIHRheCB5ZWFyOjwvc3Ryb25nPiBUb3RhbCBhbm51YWwgYW1vdW50IHJlY2VpdmVkIGluIGFsaW1vbnkgcGF5bWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgYWxpbW9ueSBwYXltZW50czo8L3N0cm9uZz4gQmFuayBzdGF0ZW1lbnRzLCB0cmFuc2ZlciByZWNlaXB0cywgb3IgYW55IGxlZ2FsIGRvY3VtZW50cyBzaG93aW5nIHRoZSBhbW91bnQgb2YgYWxpbW9ueSByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBheWVy4oCZcyBpbmZvcm1hdGlvbjo8L3N0cm9uZz4gRnVsbCBuYW1lIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9mIHRoZSBwZXJzb24gZnJvbSB3aG9tIHlvdSBoYXZlIHJlY2VpdmVkIHRoZSBhbGltb255IHBheW1lbnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGlzIGNydWNpYWwgZm9yIHRoZSB0aW1lbHkgYW5kIGFjY3VyYXRlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGxldCB1cyBrbm93IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJHb3Zlcm5tZW50IEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJHb3Zlcm5tZW50IEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVwb3J0ZWQgcmVjZWl2aW5nIGdvdmVybm1lbnQgYmVuZWZpdHMgdGhhdCBtYXkgYmUgdGF4YWJsZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGZpbGluZywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+Rm9ybSAxMDk5LUc6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgY29weSBvZiBGb3JtIDEwOTktRyBmb3IgZWFjaCBpbnN0YW5jZSBvZiBnb3Zlcm5tZW50IGJlbmVmaXRzIHJlY2VpdmVkLiBUaGlzIGZvcm0gaXMgdHlwaWNhbGx5IGlzc3VlZCBmb3IgdW5lbXBsb3ltZW50IGNvbXBlbnNhdGlvbiwgc3RhdGUgb3IgbG9jYWwgaW5jb21lIHRheCByZWZ1bmRzLCBjcmVkaXRzIG9yIG9mZnNldHMsIGFuZCBvdGhlciBnb3Zlcm5tZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIGxpc3Qgb2YgYmVuZWZpdHMgcmVjZWl2ZWQ6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBnb3Zlcm5tZW50IGJlbmVmaXRzIG5vdCByZXBvcnRlZCBvbiBGb3JtIDEwOTktRyAoc3VjaCBhcyBjZXJ0YWluIHdlbGZhcmUgYmVuZWZpdHMpLCBwbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGxpc3QgaW5jbHVkaW5nIHRoZSB0eXBlIG9mIGJlbmVmaXQsIGFtb3VudCByZWNlaXZlZCwgYW5kIHRoZSBhZ2VuY3kgdGhhdCBwcm92aWRlZCB0aGUgYmVuZWZpdC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgQmVuZWZpdHM6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMsIGluY2x1ZGUgeW91ciBTU0EtMTA5OSBvciBSUkItMTA5OSBmb3JtIHdoaWNoIHJlcG9ydHMgdGhlc2UgZWFybmluZ3MuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBmb3IgYW55IHdpdGhoZWxkIHRheGVzOjwvc3Ryb25nPiBJZiB0YXhlcyB3ZXJlIHdpdGhoZWxkIGZyb20gYW55IGJlbmVmaXRzIHJlY2VpdmVkLCBpbmNsdWRlIHRoZSBhcHBsaWNhYmxlIGRvY3VtZW50YXRpb24gc2hvd2luZyB0aGUgYW1vdW50IHdpdGhoZWxkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHNlbmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgcHJvY2Vzc2VkIHRpbWVseSBhbmQgY29ycmVjdGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNvY2lhbCBTZWN1cml0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNvY2lhbCBTZWN1cml0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhcyB3ZSBwcm9jZWVkIHdpdGggcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybi4gQXMgeW91J3ZlIGluZGljYXRlZCByZWNlaXB0IG9mIFNvY2lhbCBTZWN1cml0eSBiZW5lZml0cyB0aGlzIHRheCB5ZWFyLCB3ZSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzL2luZm9ybWF0aW9uIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgdGF4IGZpbGluZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgQmVuZWZpdCBTdGF0ZW1lbnQgKEZvcm0gU1NBLTEwOTkpPC9zdHJvbmc+IC0gVGhpcyBmb3JtIGRldGFpbHMgdGhlIHRvdGFsIGFtb3VudCBvZiBzb2NpYWwgc2VjdXJpdHkgYmVuZWZpdHMgcmVjZWl2ZWQuIElmIHlvdSBoYXZlIG1pc3BsYWNlZCB0aGlzIGZvcm0sIGl0IGNhbiBiZSBvYnRhaW5lZCBvbmxpbmUgdGhyb3VnaCB5b3VyIFNvY2lhbCBTZWN1cml0eSBhY2NvdW50LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Ob3RpY2Ugb2YgQWRqdXN0ZWQgQW1vdW50PC9zdHJvbmc+IChpZiBhcHBsaWNhYmxlKSAtIElmIHRoZXJlIGhhdmUgYmVlbiBhbnkgYWRqdXN0bWVudHMgb3IgY29ycmVjdGlvbnMgdG8geW91ciBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMgZHVyaW5nIHRoZSB5ZWFyLCBwbGVhc2UgcHJvdmlkZSBhbnkgbm90aWNlcyBvciBkb2N1bWVudGF0aW9uIHJlZmxlY3RpbmcgdGhlc2UgY2hhbmdlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+U3VwcGxlbWVudGFsIFNlY3VyaXR5IEluY29tZSAoU1NJKTwvc3Ryb25nPiAoaWYgYXBwbGljYWJsZSkgLSBBbHRob3VnaCBTU0kgaXMgdHlwaWNhbGx5IG5vdCB0YXhhYmxlLCBkb2N1bWVudGF0aW9uIG9mIHRoZXNlIHBheW1lbnRzIGlzIHN0aWxsIHJlcXVpcmVkIGZvciBjb21wcmVoZW5zaXZlIGZpbmFuY2lhbCBhc3Nlc3NtZW50LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHRoZSB0YXhhYmxlIHBvcnRpb24gb2YgeW91ciBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMsIGlmIGFueSwgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMuIEZhaWx1cmUgdG8gcHJvdmlkZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgaW5mb3JtYXRpb24gbWF5IHJlc3VsdCBpbiBkZWxheXMgb3IgaW5hY2N1cmFjaWVzIGluIHlvdXIgdGF4IGZpbGluZy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGVzZSBtYXR0ZXJzLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gb2J0YWluaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJHYW1ibGluZyBXaW5uaW5nc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiR2FtYmxpbmcgV2lubmluZ3NcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+V2UgdW5kZXJzdGFuZCBmcm9tIHlvdXIgcHJldmlvdXMgYW5zd2VycyB0aGF0IHlvdSBoYXZlIGV4cGVyaWVuY2VkIGdhbWJsaW5nIHdpbm5pbmdzIHRoaXMgdGF4IHllYXIgZnJvbSBsb3R0ZXJpZXMsIGNhc2lub3MsIGJldHRpbmcsIG9yIG90aGVyIGZvcm1zIG9mIGdhbWJsaW5nLiBUbyBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggZmlsaW5ncywgaXQncyBlc3NlbnRpYWwgdGhhdCB3ZSBjb2xsZWN0IHNwZWNpZmljIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGVzZSB3aW5uaW5ncy48L3A+XHJcbjxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbjxvbD5cclxuICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGZvciBFYWNoIFdpbm5pbmc6PC9zdHJvbmc+IFRoaXMgY2FuIGluY2x1ZGUgVy0yRyBmb3Jtcywgc3RhdGVtZW50cyBmcm9tIGNhc2lub3MsIHJhY2V0cmFja3MsIG9yIG90aGVyIGdhbWJsaW5nIGVzdGFibGlzaG1lbnRzLCBhbmQgYW55IG90aGVyIG9mZmljaWFsIGRvY3VtZW50YXRpb24gdGhhdCByZXBvcnRzIHlvdXIgd2lubmluZ3MuPC9saT5cclxuICA8bGk+PHN0cm9uZz5EYXRlcyBvZiBXaW5uaW5nczo8L3N0cm9uZz4gVGhlIHNwZWNpZmljIGRhdGVzIG9uIHdoaWNoIHlvdSBoYWQgZ2FtYmxpbmcgd2lubmluZ3MuPC9saT5cclxuICA8bGk+PHN0cm9uZz5UeXBlcyBvZiBHYW1ibGluZyBBY3Rpdml0aWVzOjwvc3Ryb25nPiBQbGVhc2Ugc3BlY2lmeSB3aGV0aGVyIHlvdXIgd2lubmluZ3Mgd2VyZSBmcm9tIGxvdHRlcmllcywgY2FzaW5vcywgYmV0dGluZywgc3BvcnRzIGJldHRpbmcsIGdhbWVzIG9mIGNoYW5jZSwgb3IgYW55IG90aGVyIGZvcm1zIG9mIGdhbWJsaW5nLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+QW1vdW50IG9mIFdpbm5pbmdzOjwvc3Ryb25nPiBUaGUgdG90YWwgYW1vdW50IHdvbiBmcm9tIGVhY2ggZ2FtYmxpbmcgYWN0aXZpdHkuIFBsZWFzZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gY2FzaCB3aW5uaW5ncyBhbmQgdGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIGFueSBub24tY2FzaCBwcml6ZXMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBSZWxhdGVkIHRvIEdhbWJsaW5nIEFjdGl2aXRpZXM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIGxpc3QgYW55IGV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciBnYW1ibGluZyBhY3Rpdml0aWVzLCBzdWNoIGFzIGJ1eS1pbnMgb3IgdHJhdmVsIGV4cGVuc2VzLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZXNlIGV4cGVuc2VzIG1heSB2YXJ5LjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+TG9zc2VzOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSByZWNvcmRzIG9mIHlvdXIgbG9zc2VzLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9mIHRoZXNlIGxvc3NlcyBhcyB0aGV5IGNhbiBwb3RlbnRpYWxseSBvZmZzZXQgeW91ciB3aW5uaW5ncyBmb3IgdGF4IHB1cnBvc2VzLiBOb3RlLCBsb3NzZXMgY2FuIG9ubHkgYmUgY2xhaW1lZCB1cCB0byB0aGUgYW1vdW50IG9mIHRvdGFsIHdpbm5pbmdzLjwvbGk+XHJcbjwvb2w+XHJcbjxwPkl0J3MgaW1wb3J0YW50IHRvIGdhdGhlciB0aGlzIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZ2FtYmxpbmcgd2lubmluZ3MgYW5kIGFueSByZWxhdGVkIGRlZHVjdGlvbnMgb3IgbG9zc2VzIG9uIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBkZXRhaWxlZCBhbmQgYWNjdXJhdGUgYXMgcG9zc2libGUgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB5b3VyIHRheCBmaWxpbmcuPC9wPlxyXG48cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgb3IgaWYgeW91IG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuIFdlJ3JlIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNhbmNlbGxhdGlvbiBvZiBEZWJ0IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2FuY2VsbGF0aW9uIG9mIERlYnQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPk91ciByZWNvcmRzIGluZGljYXRlIHlvdSd2ZSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBoYXZpbmcgZGVidHMgZm9yZ2l2ZW4sIGNhbmNlbGVkLCBvciBkaXNjaGFyZ2VkIGZvciBsZXNzIHRoYW4gdGhlIGFtb3VudCB5b3Ugb3dlZCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmZvcm1hdGlvbiBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGV4cGxvcmUgYW55IGFwcGxpY2FibGUgdGF4IHJlbGllZiBvciBleGNsdXNpb25zLCB3ZSBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscyBmcm9tIHlvdS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuPG9sPlxyXG48bGk+PHN0cm9uZz5Gb3JtIDEwOTktQzwvc3Ryb25nPjogQ29waWVzIG9mIGFueSBGb3JtIDEwOTktQyB5b3UgcmVjZWl2ZWQgcmVsYXRlZCB0byB0aGUgY2FuY2VsbGF0aW9uIG9mIGRlYnQuPC9saT5cclxuPGxpPjxzdHJvbmc+RGV0YWlsZWQgTGlzdCBvZiBEZWJ0czwvc3Ryb25nPjogSWYgeW91IGRpZG4ndCByZWNlaXZlIGEgRm9ybSAxMDk5LUMsIHBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgbGlzdCBvZiBhbnkgZGVidHMgdGhhdCB3ZXJlIGNhbmNlbGVkLCBpbmNsdWRpbmc6XHJcbiAgICA8dWw+XHJcbiAgICA8bGk+VGhlIG5hbWUgb2YgdGhlIGNyZWRpdG9yPC9saT5cclxuICAgIDxsaT5UaGUgb3JpZ2luYWwgYW1vdW50IG9mIHRoZSBkZWJ0PC9saT5cclxuICAgIDxsaT5UaGUgYW1vdW50IGNhbmNlbGVkPC9saT5cclxuICAgIDxsaT5UaGUgZGF0ZSBvZiBjYW5jZWxsYXRpb248L2xpPlxyXG4gICAgPC91bD5cclxuPC9saT5cclxuPGxpPjxzdHJvbmc+RXhwbGFuYXRpb24gb2YgQ2lyY3Vtc3RhbmNlczwvc3Ryb25nPjogQSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBkZWJ0IGNhbmNlbGxhdGlvbiAoZS5nLiwgZmluYW5jaWFsIGhhcmRzaGlwLCByZXR1cm4gb2YgcHVyY2hhc2VkIGdvb2RzLCBldGMuKS48L2xpPlxyXG48bGk+PHN0cm9uZz5JbnNvbHZlbmN5IERvY3VtZW50YXRpb248L3N0cm9uZz46IElmIHlvdSB3ZXJlIGluc29sdmVudCAod2hlcmUgeW91ciB0b3RhbCBkZWJ0cyBleGNlZWRlZCB5b3VyIHRvdGFsIGFzc2V0cykgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjYW5jZWxsYXRpb24sIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gc3VwcG9ydGluZyB5b3VyIGZpbmFuY2lhbCBzdGF0dXMgYXQgdGhhdCB0aW1lLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZmluYW5jaWFsIGluZm9ybWF0aW9uIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG90ZW50aWFsIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gb2YgZGVidC4gUGxlYXNlIHVwbG9hZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XHJcbjxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB5b3UgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcmltYXJ5IFJlc2lkZW5jZSBEZWJ0IENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUHJpbWFyeSBSZXNpZGVuY2UgRGVidCBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgYSBwb3J0aW9uIG9mIHlvdXIgbW9ydGdhZ2UgZm9yIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugd2FzIGZvcmdpdmVuLCBjYW5jZWxlZCwgb3IgZGlzY2hhcmdlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhpcyBpbiB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxiPkZvcm0gMTA5OS1DLCBDYW5jZWxsYXRpb24gb2YgRGVidDo8L2I+IFRoaXMgaXMgYSBjcnVjaWFsIGRvY3VtZW50IHRoYXQgbGVuZGVycyBtdXN0IHNlbmQgeW91IGlmIHRoZXkgY2FuY2VsZWQgb3IgZm9yZ2F2ZSBhIGRlYnQgZXhjZWVkaW5nICQ2MDAuPC9saT5cclxuICAgICAgICA8bGk+PGI+V3JpdHRlbiBjb21tdW5pY2F0aW9uIGZyb20geW91ciBsZW5kZXI6PC9iPiBBbnkgbGV0dGVycyBvciBvZmZpY2lhbCBkb2N1bWVudHMgZnJvbSB5b3VyIGxlbmRlciByZWdhcmRpbmcgdGhlIGNhbmNlbGxhdGlvbiwgZm9yZ2l2ZW5lc3MsIG9yIGRpc2NoYXJnZSBvZiB5b3VyIG1vcnRnYWdlIGRlYnQuPC9saT5cclxuICAgICAgICA8bGk+PGI+TW9ydGdhZ2Ugc3RhdGVtZW50czo8L2I+IFBsZWFzZSBwcm92aWRlIG1vcnRnYWdlIHN0YXRlbWVudHMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZGVidCBjYW5jZWxsYXRpb24gdG8gc2hvdyB0aGUgY2hhbmdlIGluIHlvdXIgbW9ydGdhZ2UgYmFsYW5jZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Eb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gdGhlIHByb3BlcnR5OjwvYj4gVGhpcyBpbmNsdWRlczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPllvdXIgbW9ydGdhZ2UgY29udHJhY3QuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gZm9yZWNsb3N1cmUsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9mIGEgc2hvcnQgc2FsZSwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlJlY29yZCBvZiBwYXltZW50cyBtYWRlOjwvYj4gSWYgeW91IG1hZGUgYW55IHBheW1lbnRzIHRvd2FyZHMgdGhlIG1vcnRnYWdlIGR1cmluZyB0aGUgdGF4IHllYXIsIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGVzZSBwYXltZW50cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBnYXRoZXIgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgYW5kIHByb3ZpZGUgdGhlbSB0byB1cy4gSWYgeW91IGhhdmUgYW55IGRpZmZpY3VsdHkgb2J0YWluaW5nIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIG9yIGhhdmUgYW55IHF1ZXN0aW9ucywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uIGluIGEgdGltZWx5IG1hbm5lciBpcyBjcnVjaWFsIGZvciB0aGUgYWNjdXJhdGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHVkZW50IExvYW4gRGVidCBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlN0dWRlbnQgTG9hbiBEZWJ0IENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5JbiByZXNwb25zZSB0byB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2Ygc3R1ZGVudCBsb2FuIGRlYnQgZHVyaW5nIHRoaXMgdGF4IHllYXIsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IHByb2Nlc3MgeW91ciB0YXggcmV0dXJuLiBUaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIHBvdGVudGlhbGx5IG1heGltaXppbmcgeW91ciBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG48b2w+XHJcbiAgPGxpPjxzdHJvbmc+T2ZmaWNpYWwgQ2FuY2VsbGF0aW9uIG9yIEZvcmdpdmVuZXNzIE5vdGljZTo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBvZmZpY2lhbCBsZXR0ZXIgb3Igbm90aWNlIGZyb20gdGhlIGxlbmRlciBvciBwcm9ncmFtIGFkbWluaXN0cmF0b3IgY29uZmlybWluZyB0aGUgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlIG9mIHlvdXIgc3R1ZGVudCBsb2FuIGRlYnQuPC9saT5cclxuICA8bGk+PHN0cm9uZz5TdHVkZW50IExvYW4gQWNjb3VudCBTdGF0ZW1lbnQ6PC9zdHJvbmc+IEEgc3RhdGVtZW50IGZyb20gYmVmb3JlIGFuZCBhZnRlciB0aGUgbG9hbiBmb3JnaXZlbmVzcywgY2FuY2VsbGF0aW9uLCBvciBkaXNjaGFyZ2Ugb2NjdXJyZWQsIHNob3dpbmcgdGhlIG91dHN0YW5kaW5nIGJhbGFuY2UgYW5kIHRoZSBiYWxhbmNlIGFmdGVyIHRoZSBhY3Rpb24gd2FzIHRha2VuLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBRdWFsaWZ5aW5nIFByb2dyYW0gUGFydGljaXBhdGlvbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9yIGNlcnRpZmljYXRlcyBvZiB5b3VyIHBhcnRpY2lwYXRpb24gaW4gcXVhbGlmeWluZyBwcm9ncmFtcyBzdWNoIGFzIFB1YmxpYyBTZXJ2aWNlIExvYW4gRm9yZ2l2ZW5lc3MgKFBTTEYpIG9yIFRlYWNoZXIgTG9hbiBGb3JnaXZlbmVzcywgYW1vbmcgb3RoZXJzLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+SVJTIEZvcm0gMTA5OS1DIChpZiByZWNlaXZlZCk6PC9zdHJvbmc+IFRoaXMgZm9ybSBpcyBpc3N1ZWQgYnkgc29tZSBsZW5kZXJzIHdoZW4gYSBkZWJ0IGlzIGZvcmdpdmVuIG9yIGNhbmNlbGVkIGFuZCBpcyBjcnVjaWFsIGZvciB0YXggcmVwb3J0aW5nIHB1cnBvc2VzLiBJdCBpbmNsdWRlcyB0aGUgYW1vdW50IG9mIGZvcmdpdmVuIGRlYnQgdGhhdCBtYXkgYmUgY29uc2lkZXJlZCB0YXhhYmxlIGluY29tZS48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkRldGFpbGVkIERlc2NyaXB0aW9uIG9mIENpcmN1bXN0YW5jZXM6PC9zdHJvbmc+IEEgd3JpdHRlbiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBsb2FuJ3MgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlLCBpbmNsdWRpbmcgYW55IGRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB5b3VyIGVsaWdpYmlsaXR5IHVuZGVyIHRoZSBzcGVjaWZpYyBwcm9ncmFtIG9yIGNvbmRpdGlvbi48L2xpPlxyXG48L29sPlxyXG48cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBwcm92aWRlZCBhcmUgY29tcGxldGUgYW5kIGxlZ2libGUuIFlvdSBjYW4gdXBsb2FkIHRoZSBkb2N1bWVudHMgc2VjdXJlbHkgdGhyb3VnaCBvdXIgY2xpZW50IHBvcnRhbC48L3A+XHJcbjxwPllvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBlbmFibGUgdXMgdG8gYWNjdXJhdGVseSBhbmQgZWZmaWNpZW50bHkgY29tcGxldGUgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvYmJ5IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSG9iYnkgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBpbmNvbWUgc291cmNlcyBmb3IgdGhpcyB0YXggeWVhci4gQXMgcGFydCBvZiBvdXIgcHJlcGFyYXRpb24gZm9yIHlvdXIgdGF4IHJldHVybiwgd2UndmUgbm90ZWQgdGhhdCB5b3UndmUgZWFybmVkIG1vbmV5IGZyb20gaG9iYmllcy4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyB0byB0aGUgSVJTIGFuZCBlbnN1cmUgeW91IGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlN1bW1hcnkgb2YgSG9iYnkgSW5jb21lOjwvc3Ryb25nPiBBIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGluY29tZSByZWNlaXZlZCBmcm9tIHlvdXIgaG9iYnkgYWN0aXZpdGllcy4gUGxlYXNlIGluY2x1ZGUgZGF0ZXMsIGFtb3VudHMsIGFuZCBzb3VyY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIG9mIGFueSBleHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgaG9iYnkgYWN0aXZpdGllcy4gVGhpcyBjYW4gaW5jbHVkZSBtYXRlcmlhbHMsIGVxdWlwbWVudCwgYW5kIGFueSBvdGhlciBjb3N0cyBpbmN1cnJlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJhbmsgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGJhbmsgc3RhdGVtZW50cyB0aGF0IHNob3cgdGhlIHRyYW5zYWN0aW9ucyByZWxhdGVkIHRvIHlvdXIgaG9iYnkgaW5jb21lIGFuZCBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFByaXplczo8L3N0cm9uZz4gSWYgeW91ciBob2JieSBpbmNvbWUgaW5jbHVkZXMgcHJpemVzLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9yIHJlY2VpcHRzIHRoYXQgZGV0YWlsIHRoZXNlIGF3YXJkcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk90aGVyIFJlbGV2YW50IERvY3VtZW50czo8L3N0cm9uZz4gQW55IG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB0aGUgaW5jb21lIGFuZCBleHBlbnNlcyByZXBvcnRlZCBmb3IgeW91ciBob2JieSBhY3Rpdml0aWVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB5b3UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBhdm9pZCBkZWxheXMgaW4gdGhlIHRheCByZXR1cm4gcHJvY2Vzcy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyByZXF1aXJlZCwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNlcnRhaW4gQ291cnQgQXdhcmRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDZXJ0YWluIENvdXJ0IEF3YXJkc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgY291cnQgYXdhcmRzIG9yIHNldHRsZW1lbnRzIGluIHRoZSBwYXN0IHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSByZXBvcnQgdGhlc2UgYW1vdW50cyBhbmQgY29tcGx5IHdpdGggdGF4IG9ibGlnYXRpb25zLCB3ZSBuZWVkIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlc2UgYXdhcmRzIG9yIHNldHRsZW1lbnRzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VHlwZSBvZiBBd2FyZCBvciBTZXR0bGVtZW50Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBuYXR1cmUgKGUuZy4sIGxvc3Qgd2FnZXMsIHB1bml0aXZlIGRhbWFnZXMsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW1vdW50IFJlY2VpdmVkOjwvc3Ryb25nPiBUaGUgdG90YWwgYW1vdW50IGF3YXJkZWQgb3Igc2V0dGxlZCwgYmVmb3JlIGFueSBkZWR1Y3Rpb25zLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBSZWNlaXZlZDo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgd2hlbiB5b3UgcmVjZWl2ZWQgdGhlIGNvbXBlbnNhdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBvZmZpY2lhbCBkb2N1bWVudHMgb3IganVkZ21lbnRzIHBlcnRhaW5pbmcgdG8gdGhlIGF3YXJkIG9yIHNldHRsZW1lbnQuIFRoaXMgaW5jbHVkZXMgY291cnQgb3JkZXJzLCBhZ3JlZW1lbnQgbGV0dGVycywgYW5kIHJlY2VpcHRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VGF4IFdpdGhoZWxkOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCB0aGUgYW1vdW50IG9mIGZlZGVyYWwgb3Igc3RhdGUgdGF4IGFscmVhZHkgd2l0aGhlbGQgZnJvbSB0aGUgc2V0dGxlbWVudC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkl0J3MgaW1wZXJhdGl2ZSB3ZSByZWNlaXZlIHRoaXMgaW5mb3JtYXRpb24gdG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgeW91ciBjb3VydCBhd2FyZCBvciBzZXR0bGVtZW50LiBGYWlsdXJlIHRvIHJlcG9ydCBzdWNoIGluY29tZSBhY2N1cmF0ZWx5IGNvdWxkIHJlc3VsdCBpbiBwZW5hbHRpZXMgb3IgYXVkaXRzIGZyb20gdGhlIElSUy48L3A+IFxyXG4gICAgPHA+UGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB3ZSBoYXZlIGFtcGxlIHRpbWUgZm9yIHlvdXIgdGF4IHByZXBhcmF0aW9uLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCBhcmUgaGVyZSB0byBoZWxwIHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpemVzIGFuZCBBd2FyZHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlByaXplcyBhbmQgQXdhcmRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCB3ZSBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBwcml6ZXMgb3IgYXdhcmRzIGluIHRoZSBmb3JtIG9mIGNhc2gsIGdvb2RzLCBvciBzZXJ2aWNlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSB0byB0aGUgSVJTLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkZXRhaWxzIGZyb20geW91LjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgRWFjaCBQcml6ZSBvciBBd2FyZDo8L3N0cm9uZz4gQnJpZWZseSBkZXNjcmliZSBlYWNoIHByaXplIG9yIGF3YXJkIHJlY2VpdmVkLCBpbmNsdWRpbmcgdGhlIG5hdHVyZSAoY2FzaCwgZ29vZHMsIHNlcnZpY2VzKSBhbmQgY29udGV4dCAoY29udGVzdCwgYWNoaWV2ZW1lbnQgYXdhcmQsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VmFsdWUgb2YgRWFjaCBQcml6ZSBvciBBd2FyZDo8L3N0cm9uZz4gUHJvdmlkZSB0aGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgZWFjaCBwcml6ZSBvciBhd2FyZCBhdCB0aGUgdGltZSBvZiByZWNlaXB0LiBJZiB0aGUgcHJpemUgd2FzIGluIGNhc2gsIHNwZWNpZnkgdGhlIGFtb3VudC4gSWYgaW4gZ29vZHMgb3Igc2VydmljZXMsIHByb3ZpZGUgYW4gZXN0aW1hdGVkIHZhbHVlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBSZWNlaXB0Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkYXRlIG9uIHdoaWNoIGVhY2ggcHJpemUgb3IgYXdhcmQgd2FzIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SXNzdWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIChpZiBhdmFpbGFibGUpIG9mIHRoZSBvcmdhbml6YXRpb24gb3IgZW50aXR5IHRoYXQgYXdhcmRlZCB0aGUgcHJpemUgb3IgcHJvdmlkZWQgdGhlIGF3YXJkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IFdpdGhoZWxkIFRheGVzOjwvc3Ryb25nPiBJbmRpY2F0ZSBpZiBhbnkgdGF4ZXMgd2VyZSB3aXRoaGVsZCBmcm9tIHRoZSBhd2FyZGVkIGFtb3VudCBhbmQgcHJvdmlkZSB0aGUgd2l0aGhvbGRpbmcgZG9jdW1lbnQocyksIGlmIGF2YWlsYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkl0J3MgY3J1Y2lhbCBmb3IgdGF4IHB1cnBvc2VzIHRoYXQgd2UgcmVwb3J0IHRoZXNlIGFjY3VyYXRlbHkgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgSVJTLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXhhYmxlIENvdmVyZGVsbCBEaXN0cmlidXRpb25zXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIENvdmVyZGVsbCBEaXN0cmlidXRpb25zXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCBhIHdpdGhkcmF3YWwgZnJvbSBhIENvdmVyZGVsbCBFZHVjYXRpb24gU2F2aW5ncyBBY2NvdW50IChFU0EpIG9yIGFuIEVkdWNhdGlvbiBJUkEgZm9yIGVkdWNhdGlvbmFsIGV4cGVuc2VzIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSBkaXN0cmlidXRpb25zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCB3aXRoZHJhd24gZnJvbSB0aGUgQ292ZXJkZWxsIEVTQSBvciBFZHVjYXRpb24gSVJBLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbGVkIGJyZWFrZG93biBvZiBob3cgdGhlc2UgZnVuZHMgd2VyZSB1dGlsaXplZCwgc3BlY2lmaWNhbGx5OlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IHVzZWQgZm9yIHR1aXRpb24gYW5kIGZlZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgc3BlbnQgb24gYm9va3MsIHN1cHBsaWVzLCBhbmQgZXF1aXBtZW50IHJlcXVpcmVkIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgYW1vdW50cyBzcGVudCBvbiByb29tIGFuZCBib2FyZCwgc3BlY2lmeWluZyBpZiB0aGUgYmVuZWZpY2lhcnkgd2FzIGVucm9sbGVkIGF0IGxlYXN0IGhhbGYtdGltZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBhZGRpdGlvbmFsIHF1YWxpZmllZCBlZHVjYXRpb24gZXhwZW5zZXMgcGFpZCB1c2luZyB0aGVzZSBmdW5kcy48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIHRoZSBiZW5lZmljaWFyeSdzIGVucm9sbG1lbnQgc3RhdHVzIChlLmcuLCB0dWl0aW9uIHN0YXRlbWVudCwgZW5yb2xsbWVudCB2ZXJpZmljYXRpb24pLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSBuYW1lIGFuZCBhZGRyZXNzIG9mIHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbihzKSBpbnZvbHZlZC48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgRm9ybSAxMDk5LVEgcmVjZWl2ZWQgcGVydGFpbmluZyB0byB0aGVzZSBkaXN0cmlidXRpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UHJvdmlkaW5nIHRoaXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gd2lsbCBlbnN1cmUgdGhhdCB3ZSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIGVkdWNhdGlvbiBleHBlbnNlcy4gUGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgbGV0IHVzIGtub3cgaWYgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBvciBoYXZlIGFueSBxdWVzdGlvbnMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgUVRQIERpc3RyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgUVRQIERpc3RyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+V2UgaGF2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGRpc3RyaWJ1dGlvbnMgZnJvbSBhIFF1YWxpZmllZCBUdWl0aW9uIFByb2dyYW0gKFFUUCksIGNvbW1vbmx5IGtub3duIGFzIGEgNTI5IHBsYW4sIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcmVsYXRlZCB0byB0aGVzZSBkaXN0cmlidXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+QWNjb3VudCBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgb2YgdGhlIGFjY291bnQgaG9sZGVyIGFuZCB0aGUgYmVuZWZpY2lhcnkgZm9yIGVhY2ggNTI5IHBsYW4gZGlzdHJpYnV0aW9uLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5EaXN0cmlidXRpb24gU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCAxMDk5LVEgZm9ybXMgcmVjZWl2ZWQgZm9yIGVhY2ggZGlzdHJpYnV0aW9uIHRoaXMgdGF4IHllYXIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlRvdGFsIEFtb3VudCBvZiBEaXN0cmlidXRpb25zOjwvc3Ryb25nPiBUaGUgdG90YWwgYW1vdW50IG9mIG1vbmV5IGRpc3RyaWJ1dGVkIGZyb20gdGhlIFFUUCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5FZHVjYXRpb25hbCBFeHBlbnNlcyBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIG9mIHRoZSBlZHVjYXRpb25hbCBleHBlbnNlcyBmb3Igd2hpY2ggdGhlIFFUUCBkaXN0cmlidXRpb25zIHdlcmUgdXNlZC4gVGhpcyBpbmNsdWRlcyB0dWl0aW9uLCBib29rcywgc3VwcGxpZXMsIGFuZCBhbnkgZXF1aXBtZW50IHJlcXVpcmVkIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UgYXQgYW4gZWxpZ2libGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24uPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgUmVjZWlwdHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIHN0YXRlbWVudHMgdGhhdCBwcm92aWRlIHByb29mIG9mIHRoZSBlZHVjYXRpb25hbCBleHBlbnNlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SW5zdGl0dXRpb24gSW5mb3JtYXRpb246PC9zdHJvbmc+IE5hbWUgYW5kIGFkZHJlc3Mgb2YgdGhlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uKHMpIHdoZXJlIHRoZSBleHBlbnNlcyB3ZXJlIGluY3VycmVkLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5SZWNpcGllbnQncyBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gRm9yIHdob20gdGhlIGV4cGVuc2VzIHdlcmUgaW5jdXJyZWQgKHRoZSBiZW5lZmljaWFyeSBvZiB0aGUgNTI5IHBsYW4pIGFuZCB0aGVpciBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBkZXRlcm1pbmluZyB0aGUgdGF4YWJpbGl0eSBvZiB0aGUgZGlzdHJpYnV0aW9ucyBhbmQgZm9yIG9wdGltaXppbmcgeW91ciB0YXggYmVuZWZpdHMuIFBsZWFzZSBmb3J3YXJkIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC48L3A+XHJcbjxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU3RyaWtlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTdHJpa2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhcyB3ZSB3b3JrIHRvZ2V0aGVyIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm4uIEl0IGhhcyBjb21lIHRvIG91ciBhdHRlbnRpb24gdGhhdCB5b3UgcmVjZWl2ZWQgc3RyaWtlIGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIgZHVlIHRvIHBhcnRpY2lwYXRpb24gaW4gYSBsYWJvciBzdHJpa2UuIFRvIGVuc3VyZSBjb21wbGlhbmNlIGFuZCBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgQW1vdW50IG9mIFN0cmlrZSBCZW5lZml0cyBSZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlIHRvdGFsIHN1bSBvZiBzdHJpa2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNvdXJjZSBvZiBTdHJpa2UgQmVuZWZpdHM6PC9zdHJvbmc+IEluZGljYXRlIHdoZXRoZXIgdGhlc2UgYmVuZWZpdHMgd2VyZSBwYWlkIGJ5IHlvdXIgdW5pb24sIGFuIGluc3VyYW5jZSBwb2xpY3ksIG9yIGFub3RoZXIgc291cmNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBTdHJpa2UgQmVuZWZpdHM6PC9zdHJvbmc+IFByb3ZpZGUgYW55IGZvcm1zLCBzdGF0ZW1lbnRzLCBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgc2hvdyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBiZW5lZml0cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIFN0cmlrZSBQYXJ0aWNpcGF0aW9uOjwvc3Ryb25nPiBMaXN0IHRoZSBkYXRlcyBvciBkdXJhdGlvbiBvZiB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIGxhYm9yIHN0cmlrZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgQ29zdHMgb3IgRXhwZW5zZXM6PC9zdHJvbmc+IElmIHlvdSBpbmN1cnJlZCBhbnkgY29zdHMgb3IgZXhwZW5zZXMgcmVsYXRlZCB0byBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdHJpa2UgKGUuZy4sIHRyYXZlbCB0byBwaWNrZXQgbGluZXMsIHNpZ25hZ2UgbWF0ZXJpYWxzKSwgcGxlYXNlIGRldGFpbCB0aGVzZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgbWF5IGltcGFjdCB5b3VyIHRheGFibGUgaW5jb21lLiBQbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gYXZvaWQgYW55IGRlbGF5cyBpbiBwcm9jZXNzaW5nIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJKdXJ5IER1dHkgUGF5XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJKdXJ5IER1dHkgUGF5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgdGhlIGNyaXRpY2FsIHN0YWdlcyBvZiB5b3VyIHRheCBwcmVwYXJhdGlvbiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBqdXJ5IGR1dHkgcGF5IHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgaW5jb21lIGFuZCBleHBsb3JlIGFueSBwb3RlbnRpYWwgZGVkdWN0aW9ucyBvciBjcmVkaXRzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBvZiBKdXJ5IER1dHkgUGF5Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgdG90YWwgYW1vdW50IHlvdSByZWNlaXZlZCBmb3Igc2VydmluZyBqdXJ5IGR1dHkuIFRoaXMgYW1vdW50IGlzIG9mdGVuIHJlcG9ydGVkIG9uIEZvcm0gMTA5OS1HLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SnVyeSBEdXR5IERhdGVzOjwvc3Ryb25nPiBUaGUgZGF0ZXMgeW91IHNlcnZlZCBvbiBqdXJ5IGR1dHkuIFRoaXMgaGVscHMgaW4gdmVyaWZ5aW5nIHRoZSBkdXJhdGlvbiBhbmQgY29ycmVsYXRpbmcgaXQgd2l0aCB0aGUgY29tcGVuc2F0aW9uIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgUmVpbWJ1cnNlbWVudDo8L3N0cm9uZz4gSWYgeW91ciBlbXBsb3llciBjb21wZW5zYXRlZCB5b3UgKGluIGZ1bGwgb3IgcGFydCkgZm9yIHRoZSB0aW1lIHlvdSB3ZXJlIHNlcnZpbmcgb24ganVyeSBkdXR5LCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxzIG9mIHRoZSBhbW91bnRzIHBhaWQgYnkgeW91ciBlbXBsb3llci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJhbmsgU3RhdGVtZW50cyBvciBQYXkgU3R1YnM6PC9zdHJvbmc+IEFueSBiYW5rIHN0YXRlbWVudHMgb3IgcGF5IHN0dWJzIHNob3dpbmcgdGhlIGp1cnkgZHV0eSBwYXkgZGVwb3NpdCBvciBlbXBsb3llciByZWltYnVyc2VtZW50cy4gVGhlc2UgZG9jdW1lbnRzIGhlbHAgaW4gdmVyaWZ5aW5nIHRoZSBhbW91bnRzIGRlY2xhcmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSAxMDk5LUcgKGlmIHJlY2VpdmVkKTo8L3N0cm9uZz4gU29tZSBqdXJpc2RpY3Rpb25zIHByb3ZpZGUgYSBGb3JtIDEwOTktRyBmb3IganVyeSBkdXR5IHBheS4gSWYgeW91IHJlY2VpdmVkIG9uZSwgcGxlYXNlIGluY2x1ZGUgYSBjb3B5LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB3aWxsIGFsbG93IHVzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFsYXNrYSBQZXJtYW5lbnQgRnVuZHMgRGl2aWRlbmRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBbGFza2EgUGVybWFuZW50IEZ1bmRzIERpdmlkZW5kc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5JbiByZXZpZXdpbmcgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGZvciB5b3VyIHRheCByZXR1cm4gcHJlcGFyYXRpb24sIHdlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZGl2aWRlbmRzIGZyb20gdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmZvcm1hdGlvbiBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIElSUyBndWlkZWxpbmVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48Yj4xMDk5LU1JU0MgRm9ybTo8L2I+IFBsZWFzZSBwcm92aWRlIGEgY29weSBvZiB0aGUgMTA5OS1NSVNDIGZvcm0gaXNzdWVkIGJ5IHRoZSBBbGFza2EgUGVybWFuZW50IEZ1bmQgQ29ycG9yYXRpb24uIFRoaXMgZm9ybSBvdXRsaW5lcyB0aGUgdG90YWwgYW1vdW50IG9mIGRpdmlkZW5kcyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkJhbmsgU3RhdGVtZW50czo8L2I+IElmIHBvc3NpYmxlLCBwcm92aWRlIGJhbmsgc3RhdGVtZW50cyBzaG93aW5nIHRoZSBkZXBvc2l0KHMpIG9mIHRoZSBkaXZpZGVuZHMgaW50byB5b3VyIGFjY291bnQuIFRoaXMgc2VydmVzIGFzIGFkZGl0aW9uYWwgcHJvb2Ygb2YgaW5jb21lLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlBlcnNvbmFsIElkZW50aWZpY2F0aW9uIEluZm9ybWF0aW9uOjwvYj4gQ29uZmlybSB5b3VyIGZ1bGwgbGVnYWwgbmFtZSBhbmQgU29jaWFsIFNlY3VyaXR5IE51bWJlciB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGRpc2NyZXBhbmNpZXMgYmV0d2VlbiBvdXIgcmVjb3JkcyBhbmQgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIG9uIHRoZSAxMDk5LU1JU0MgZm9ybS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5QcmV2aW91cyBZZWFyJ3MgRGl2aWRlbmQgSW5mb3JtYXRpb246PC9iPiBJZiB5b3UgcmVjZWl2ZWQgZGl2aWRlbmRzIGZyb20gdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBpbiB0aGUgcHJldmlvdXMgdGF4IHllYXIgYnV0IGhhdmUgbm90IHByb3ZpZGVkIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBzby4gSXQgaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCB0byBwb3RlbnRpYWxseSBpZGVudGlmeSBhbnkgY2FycnlvdmVyIGVmZmVjdHMgb24geW91ciBjdXJyZW50IHRheCB5ZWFyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0IGlzIGhpZ2hseSBhcHByZWNpYXRlZC4gQ29tcGxldGluZyB0aGlzIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgd2lsbCBlbmFibGUgdXMgdG8gcHJvZ3Jlc3Mgd2l0aCB0aGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuIGVmZmljaWVudGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFeGVjdXRvciBGZWVzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFeGVjdXRvciBGZWVzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPldlIHVuZGVyc3RhbmQgZnJvbSB5b3VyIHJlY2VudCByZXNwb25zZSB0aGF0IHlvdSBoYXZlIHBhaWQgb3IgcmVjZWl2ZWQgZXhlY3V0b3IgZmVlcy4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSB0YXggcHJlcGFyYXRpb24sIHdlIHJlcXVpcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGVzZSB0cmFuc2FjdGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG48b2w+XHJcbiAgPGxpPkEgZGV0YWlsZWQgc3RhdGVtZW50IG9mIHRoZSBleGVjdXRvciBmZWVzIHBhaWQgb3IgcmVjZWl2ZWQsIGluY2x1ZGluZyBkYXRlcyBhbmQgYW1vdW50cy48L2xpPlxyXG4gIDxsaT5JZiB5b3UgcmVjZWl2ZWQgZXhlY3V0b3IgZmVlcywgcGxlYXNlIHByb3ZpZGUgeW91ciByb2xlIChlLmcuLCBwcmltYXJ5IGV4ZWN1dG9yLCBjby1leGVjdXRvcikgYW5kIHRoZSBlc3RhdGUncyBuYW1lLjwvbGk+XHJcbiAgPGxpPklmIHlvdSBwYWlkIGV4ZWN1dG9yIGZlZXMsIHByb3ZpZGUgdGhlIG5hbWUgYW5kIHRheCBpZGVudGlmaWNhdGlvbiBudW1iZXIgKFNTTiBvciBFSU4pIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0byB3aG9tIHRoZSBmZWVzIHdlcmUgcGFpZC48L2xpPlxyXG4gIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiB0aGF0IG91dGxpbmVzIHRoZSBhZ3JlZW1lbnQgb3IgY291cnQgb3JkZXIgcmVnYXJkaW5nIHRoZSBleGVjdXRvciBmZWUuPC9saT5cclxuICA8bGk+Q29waWVzIG9mIGJhbmsgc3RhdGVtZW50cyBvciBjYW5jZWxsZWQgY2hlY2tzIGV2aWRlbmNpbmcgdGhlIHBheW1lbnQgb3IgcmVjZWlwdCBvZiB0aGVzZSBmZWVzLjwvbGk+XHJcbiAgPGxpPkZvciBmZWVzIHJlY2VpdmVkLCBwbGVhc2UgY29uZmlybSB3aGV0aGVyIHRheGVzIHdlcmUgd2l0aGhlbGQgb3Igbm90LiBJZiBzbywgcHJvdmlkZSBhIGNvcHkgb2YgdGhlIEZvcm0gMTA5OS1NSVNDIHlvdSByZWNlaXZlZC48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHRoZXNlIGV4ZWN1dG9yIGZlZXMgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgZ3VpZGVsaW5lcy4gUGxlYXNlIHNlbmQgdGhlIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gdG8gdXMgdG8gZmFjaWxpdGF0ZSBhIHRpbWVseSBhbmQgYWNjdXJhdGUgdGF4IGZpbGluZy48L3A+XHJcbjxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRXZlbnQgR3JhdHVpdGllcyBhbmQgR2lmdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkV2ZW50IEdyYXR1aXRpZXMgYW5kIEdpZnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgY29tcGxldGluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5lZWQgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgcGFydGllcyBvciBldmVudHMgeW91IGhvc3RlZCB0aGlzIHRheCB5ZWFyLiBTcGVjaWZpY2FsbHksIHNpbmNlIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgZ2lmdHMsIGdyYXR1aXRpZXMsIG9yIG90aGVyIGZvcm1zIG9mIGNvbXBlbnNhdGlvbiBhcyBhIHJlc3VsdCBvZiB0aGVzZSBldmVudHMsIHdlIHJlcXVpcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gdG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucy48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgZWFjaCBldmVudCBob3N0ZWQsIGluY2x1ZGluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2YgdGhlIGV2ZW50LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+TG9jYXRpb24gb2YgdGhlIGV2ZW50LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QXBwcm94aW1hdGUgbnVtYmVyIG9mIGF0dGVuZGVlcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlB1cnBvc2Ugb2YgdGhlIGV2ZW50IChlLmcuLCBzYWxlcyBwcm9tb3Rpb24sIGN1c3RvbWVyIGFwcHJlY2lhdGlvbikuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIGZvciBlYWNoIGdpZnQsIGdyYXR1aXR5LCBvciBmb3JtIG9mIGNvbXBlbnNhdGlvbiByZWNlaXZlZCwgc3VjaCBhczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSBnaWZ0IG9yIGdyYXR1aXR5LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RXN0aW1hdGVkIGZhaXIgbWFya2V0IHZhbHVlIGF0IHRoZSB0aW1lIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+TmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgcHJvdmlkaW5nIHRoZSBnaWZ0IG9yIGdyYXR1aXR5LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gb3IgY29tbXVuaWNhdGlvbiByZWdhcmRpbmcgdGhlIHJlY2VpcHQgb2YgdGhlc2UgaXRlbXMgKGUuZy4sIHRoYW5rIHlvdSBsZXR0ZXJzLCBlbWFpbHMgY29uZmlybWluZyByZWNlaXB0KS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkFueSByZWNlaXB0cyBvciBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gZXhwZW5zZXMgaW5jdXJyZWQgd2hpbGUgaG9zdGluZyB0aGVzZSBldmVudHMgKGUuZy4sIGNhdGVyaW5nLCB2ZW51ZSByZW50YWwsIGVudGVydGFpbm1lbnQpLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SXQgaXMgY3J1Y2lhbCB0aGF0IHdlIGFjY3VyYXRlbHkgcmVwb3J0IGFsbCBmb3JtcyBvZiBpbmNvbWUsIGluY2x1ZGluZyBub24tbW9uZXRhcnkgY29tcGVuc2F0aW9uLCB0byBjb21wbHkgd2l0aCBJUlMgcmVndWxhdGlvbnMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiB3aWxsIGdyZWF0bHkgYXNzaXN0IGluIHRoaXMgcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlF1YWxpZmllZCBFZHVjYXRvciBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUXVhbGlmaWVkIEVkdWNhdG9yIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciBjb21wcmVoZW5zaXZlIGFwcHJvYWNoIHRvIHlvdXIgdGF4IHByZXBhcmF0aW9uIGZvciB0aGUgY3VycmVudCB5ZWFyLCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdGhhdCB5b3UndmUgaW5jdXJyZWQgb3V0LW9mLXBvY2tldCBleHBlbnNlcyBhcyBhIHF1YWxpZmllZCBlZHVjYXRvciBmb3IgY2xhc3Nyb29tIG1hdGVyaWFscyBvciBzdXBwbGllcy4gVG8gYWNjdXJhdGVseSBjbGFpbSB0aGVzZSBkZWR1Y3Rpb25zIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIG1heGltdW0gYmVuZWZpdCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+RGV0YWlsZWQgTGlzdCBvZiBFeHBlbnNlczo8L2I+IEEgYnJlYWtkb3duIG9mIGFsbCBjbGFzc3Jvb20gbWF0ZXJpYWxzIG9yIHN1cHBsaWVzIHB1cmNoYXNlZCwgaW5jbHVkaW5nIGJvb2tzLCBzdXBwbGllcywgY29tcHV0ZXIgZXF1aXBtZW50IChoYXJkd2FyZSwgc29mdHdhcmUsIGFuZCBzZXJ2aWNlcyksIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbWF0ZXJpYWxzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlJlY2VpcHRzIGFuZCBQcm9vZiBvZiBQYXltZW50OjwvYj4gQ29waWVzIG9mIHJlY2VpcHRzIG9yIGJhbmsvY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBmb3IgZWFjaCBwdXJjaGFzZSBtYWRlLiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGRhdGUgb2YgcHVyY2hhc2UgYW5kIHRoZSBpdGVtIG9yIHNlcnZpY2UgcHVyY2hhc2VkIGFyZSBjbGVhcmx5IHZpc2libGUuPC9saT5cclxuICAgICAgICA8bGk+PGI+RGF0ZSBvZiBQdXJjaGFzZXM6PC9iPiBUaGUgc3BlY2lmaWMgZGF0ZXMgZWFjaCBpdGVtIHdhcyBwdXJjaGFzZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Vc2FnZSBEb2N1bWVudGF0aW9uOjwvYj4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiBob3cgZWFjaCBpdGVtIHB1cmNoYXNlZCB3YXMgdXNlZCBpbiB0aGUgY2xhc3Nyb29tIHNldHRpbmcuPC9saT5cclxuICAgICAgICA8bGk+PGI+VG90YWwgQW1vdW50OjwvYj4gVGhlIHRvdGFsIGRvbGxhciBhbW91bnQgc3BlbnQgb24gdGhlc2UgbWF0ZXJpYWxzIGFuZCBzdXBwbGllcyBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VW5kZXJzdGFuZGluZyB0aGF0IHlvdXIgdGltZSBpcyB2YWx1YWJsZSwgd2UgYXBwcmVjaWF0ZSB5b3VyIGVmZm9ydCBpbiBjb21waWxpbmcgdGhpcyBpbmZvcm1hdGlvbiBwcm9tcHRseS4gVGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmluZyB5b3UgYXJlIGNvbXBlbnNhdGVkIGZvciB5b3VyIGludmVzdG1lbnQgaW4gZWR1Y2F0aW9uYWwgbWF0ZXJpYWxzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgd2UgY2FuIHByb2NlZWQgd2l0aG91dCBkZWxheS4gWW91IGNhbiBzZW5kIHRoZSBkb2N1bWVudHMgdG8gdXMgZWl0aGVyIHZpYSBlbWFpbCBhdCB0YXhAbGVuZGFoYW5kYWNjb3VudGluZy5jb20gb3IgdXBsb2FkIHRoZW0gZGlyZWN0bHkgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhlIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgeW91ciBkZWRpY2F0aW9uIGFzIGFuIGVkdWNhdG9yLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgaGF2ZSBpZGVudGlmaWVkIHRoYXQgeW91IGluY3VycmVkIHVucmVpbWJ1cnNlZCB0cmF2ZWwgZXhwZW5zZXMgYXMgYW4gQXJtZWQgRm9yY2VzIFJlc2VydmlzdC4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBiZW5lZmljaWFsIHRheCBmaWxpbmcsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzIGZyb20geW91OjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPlN1bW1hcnkgb2YgVHJhdmVsIERhdGVzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGxpc3Qgb2YgYWxsIGRhdGVzIHlvdSB0cmF2ZWxlZCBtb3JlIHRoYW4gMTAwIG1pbGVzIGF3YXkgZnJvbSBob21lIHRvIHBlcmZvcm0geW91ciByZXNlcnZlIGR1dGllcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+VHJhdmVsIEV4cGVuc2VzIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEZvciBlYWNoIG9mIHRoZSB0cmF2ZWwgZGF0ZXMgbGlzdGVkLCBwcm92aWRlIHJlY2VpcHRzLCBvciBvdGhlciBkb2N1bWVudGF0aW9uIGZvcjpcclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgPGxpPlRyYW5zcG9ydGF0aW9uIChlLmcuLCBnYXMgcmVjZWlwdHMsIG1pbGVhZ2UgbG9ncywgYWlycGxhbmUgdGlja2V0cywgZXRjLik8L2xpPlxyXG4gICAgICAgIDxsaT5Mb2RnaW5nIChvbmx5IGlmIGFuIG92ZXJuaWdodCBzdGF5IHdhcyByZXF1aXJlZCk8L2xpPlxyXG4gICAgICAgIDxsaT5NZWFscyBhbmQgSW5jaWRlbnRhbCBFeHBlbnNlcyAoZGV0YWlscyBvbiBlYWNoLCBpZiBub3Qgb3B0aW5nIGZvciB0aGUgc3RhbmRhcmQgbWVhbCBhbGxvd2FuY2UpPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2VydmUgU3RhdHVzOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciBvcmRlcnMgb3IgYW55IGRvY3VtZW50YXRpb24gY29uZmlybWluZyB5b3VyIHBhcnRpY2lwYXRpb24gYW5kIGR1dGllcyBhcyBhbiBBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IGR1cmluZyB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlN0YXRlbWVudCBvZiBSZWltYnVyc2VtZW50Ojwvc3Ryb25nPiBBIGRldGFpbGVkIGFjY291bnQgb2YgYW55IHJlaW1idXJzZW1lbnRzIHJlY2VpdmVkIGZvciB0aGUgdHJhdmVsIGV4cGVuc2VzIGNsYWltZWQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBhcmUgbGVnaWJsZSBhbmQgY2xlYXJseSBsYWJlbGVkLiBQcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGFsbG93IHN1ZmZpY2llbnQgdGltZSBmb3IgcHJvY2Vzc2luZyBhbmQgaW5jbHVzaW9uIGluIHlvdXIgdGF4IGZpbGluZy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gT3VyIHRlYW0gaXMgaGVyZSB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGVyZm9ybWluZyBBcnRpc3QgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBlcmZvcm1pbmcgQXJ0aXN0IEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSdyZSByZWFjaGluZyBvdXQgdG8gZ2F0aGVyIG5lY2Vzc2FyeSBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgeW91ciBleHBlbnNlcyBhcyBhIHBlcmZvcm1pbmcgYXJ0aXN0LiBUaGUgZm9sbG93aW5nIGxpc3QgZGV0YWlscyB0aGUgc3BlY2lmaWMgam9iLXJlbGF0ZWQgZXhwZW5zZXMgdGhhdCB3ZSByZXF1aXJlLiBLaW5kbHkgcmV2aWV3IGFuZCBwcm92aWRlIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIGEgdGhvcm91Z2ggYW5kIHRpbWVseSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkF1ZGl0aW9uIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBiYW5rL2NyZWRpdCBjYXJkIHN0YXRlbWVudHMgc2hvd2luZyBwYXltZW50cyBmb3IgYXVkaXRpb25zLCBpbmNsdWRpbmcgYW55IGFwcGxpY2F0aW9uIG9yIGVudHJ5IGZlZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UcmF2ZWwgRXhwZW5zZXM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gZm9yIHRyYXZlbCBjb3N0cyByZWxhdGVkIHRvIHBlcmZvcm1hbmNlcy4gVGhpcyBpbmNsdWRlcyBhaXJmYXJlLCBsb2RnaW5nLCBjYXIgcmVudGFscywgYW5kIGdhc29saW5lIHJlY2VpcHRzLiBQbGVhc2UgaW5kaWNhdGUgdGhlIGRhdGVzIGFuZCBwdXJwb3NlIG9mIGVhY2ggdHJpcC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvc3R1bWUgRXhwZW5zZXM6PC9zdHJvbmc+IFJlY2VpcHRzIGZvciBhbnkgY29zdHVtZXMgb3Igc3BlY2lhbGl6ZWQgY2xvdGhpbmcgcmVxdWlyZWQgZm9yIHlvdXIgcGVyZm9ybWFuY2VzIHRoYXQgYXJlIG5vdCBzdWl0YWJsZSBmb3IgZXZlcnlkYXkgd2Vhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk1ha2V1cC9IYWlyIEV4cGVuc2VzOjwvc3Ryb25nPiBTcGVjaWZpYyB0byBwZXJmb3JtYW5jZXMsIGluY2x1ZGluZyBjb3N0cyBmb3IgcHJvZHVjdHMgYW5kIHByb2Zlc3Npb25hbCBzZXJ2aWNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRyYWluaW5nIGFuZCBQcm9mZXNzaW9uYWwgRGV2ZWxvcG1lbnQ6PC9zdHJvbmc+IENvc3RzIHJlbGF0ZWQgdG8gY2xhc3Nlcywgd29ya3Nob3BzLCBvciBzZW1pbmFycyBhaW1lZCBhdCBpbXByb3ZpbmcgeW91ciBwZXJmb3JtYW5jZSBza2lsbHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BZ2VudCBhbmQgTWFuYWdlbWVudCBGZWVzOjwvc3Ryb25nPiBDb250cmFjdHMgb3Igc3RhdGVtZW50cyBkZXRhaWxpbmcgcGF5bWVudHMgdG8gYWdlbnRzIG9yIG1hbmFnZXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TWlzY2VsbGFuZW91cyBQZXJmb3JtYW5jZS1SZWxhdGVkIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBmb3IgYW55IG90aGVyIGV4cGVuc2VzIGRpcmVjdGx5IHJlbGF0ZWQgdG8geW91ciB3b3JrIGFzIGEgcGVyZm9ybWluZyBhcnRpc3QsIHN1Y2ggYXMgZXF1aXBtZW50LCBtdXNpYyBvciBzY3JpcHQgcHVyY2hhc2VzLCBhbmQgbWFpbnRlbmFuY2UgY29zdHMgZm9yIGluc3RydW1lbnRzIG9yIHBlcmZvcm1hbmNlIGdlYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBjbGVhcmx5IGluZGljYXRlIHRoZSBkYXRlLCBhbW91bnQsIGFuZCBuYXR1cmUgb2YgZWFjaCBleHBlbnNlLiBJZiB5b3UncmUgdW5zdXJlIHdoZXRoZXIgYW4gZXhwZW5zZSBxdWFsaWZpZXMsIGluY2x1ZGUgaXQgd2l0aCBhIGJyaWVmIG5vdGUgZXhwbGFpbmluZyBpdHMgcHVycG9zZS4gV2UncmUgaGVyZSB0byBoZWxwIHlvdSBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMgd2hpbGUgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCBsYXdzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZlZSBCYXNlZCBHb3Zlcm5tZW50IE9mZmljaWFsIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGZWUgQmFzZWQgR292ZXJubWVudCBPZmZpY2lhbCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJucyBhbmQgbm90ZWQgdGhhdCB5b3Ugd29ya2VkIGFzIGEgPHN0cm9uZz5mZWUtYmFzZWQgZ292ZXJubWVudCBvZmZpY2lhbDwvc3Ryb25nPiBkdXJpbmcgdGhlIHRheCB5ZWFyLiBBcyBwYXJ0IG9mIHRoaXMgcm9sZSwgeW91J3ZlIHJlcG9ydGVkIGluY3VycmluZyB1bnJlaW1idXJzZWQgZXhwZW5zZXMgcmVsYXRlZCB0byB5b3VyIG9mZmljaWFsIGR1dGllcy4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBtYXhpbXVtIGRlZHVjdGlvbnMgb24geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBFeHBlbnNlIFJlcG9ydHM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGFsbCBleHBlbnNlcy4gRWFjaCBlbnRyeSBzaG91bGQgaW5jbHVkZSB0aGUgZGF0ZSwgYW1vdW50LCBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgbmF0dXJlIG9mIHRoZSBleHBlbnNlLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFBheW1lbnQ6PC9zdHJvbmc+IFJlY2VpcHRzLCBiYW5rIHN0YXRlbWVudHMsIG9yIGNyZWRpdCBjYXJkIHN0YXRlbWVudHMgZXZpZGVuY2luZyB0aGUgcGF5bWVudCBvZiB0aGUgcmVwb3J0ZWQgZXhwZW5zZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+T2ZmaWNpYWwgU2NoZWR1bGUgb3IgRHV0eSBSb3N0ZXI6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gdGhhdCBjb3JyZWxhdGVzIHlvdXIgcmVwb3J0ZWQgZXhwZW5zZXMgd2l0aCB5b3VyIG9mZmljaWFsIGR1dGllcyBvbiBzcGVjaWZpYyBkYXRlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5NaWxlYWdlIExvZzo8L3N0cm9uZz4gSWYgYW55IGV4cGVuc2VzIGFyZSBmb3IgdHJhdmVsLCBhIGRldGFpbGVkIG1pbGVhZ2UgbG9nIHNob3dpbmcgZGF0ZXMsIGRlc3RpbmF0aW9uLCBwdXJwb3NlIG9mIHRoZSB0cmlwLCBhbmQgbWlsZXMgdHJhdmVsZWQuIEVuc3VyZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcGVyc29uYWwgYW5kIG9mZmljaWFsIHRyYXZlbC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Db21tdW5pY2F0aW9uIHdpdGggR292ZXJubWVudCBBZ2VuY3k6PC9zdHJvbmc+IEFueSBjb3JyZXNwb25kZW5jZSB3aXRoIHRoZSBnb3Zlcm5tZW50IGFnZW5jeSBjb25maXJtaW5nIHRoYXQgdGhlc2UgZXhwZW5zZXMgd2VyZSBub3QgcmVpbWJ1cnNlZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiBwcm92aWRlZCBpcyBsZWdpYmxlIGFuZCBvcmdhbml6ZWQgY2hyb25vbG9naWNhbGx5LiBUaGlzIHdpbGwgZ3JlYXRseSBhc3Npc3QgaW4gdGhlIHNwZWVkeSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IGZpbGluZ3MgYW5kIGluIG1heGltaXppbmcgeW91ciBlbGlnaWJsZSBkZWR1Y3Rpb25zLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuIFdl4oCZcmUgaGVyZSB0byBoZWxwIGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheSE8L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSFNBIERlZHVjdGlvbiBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSFNBIERlZHVjdGlvbiBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBjb25maXJtaW5nIHlvdXIgSGVhbHRoIFNhdmluZ3MgQWNjb3VudCAoSFNBKSBjb250cmlidXRpb25zIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgSFNBIGRlZHVjdGlvbiBhbmQgZW5zdXJlIHdlIG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5Ub3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIEhTQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBjb250cmlidXRpb25zIG1hZGUgYnkgeW91ciBlbXBsb3llciB0byB0aGUgSFNBIChpZiBhcHBsaWNhYmxlKS48L2xpPlxyXG4gICAgICAgIDxsaT5EYXRlcyBvZiBjb250cmlidXRpb25zLCBpZiB0aGV5IHdlcmUgbm90IG1hZGUgaW4gYSBsdW1wIHN1bS48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBIU0EgZWxpZ2liaWxpdHkgZm9yIHRoZSB0YXggeWVhciAodHlwaWNhbGx5LCB0aGlzIGludm9sdmVzIHByb29mIG9mIGEgSGlnaCBEZWR1Y3RpYmxlIEhlYWx0aCBQbGFuKS48L2xpPlxyXG4gICAgICAgIDxsaT5TdGF0ZW1lbnRzIGZyb20geW91ciBIU0EgcHJvdmlkZXIgZGV0YWlsaW5nIGRpc3RyaWJ1dGlvbnMsIGlmIGFueSB3ZXJlIG1hZGUuPC9saT5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIG1lZGljYWwgZXhwZW5zZXMgcGFpZCBvdXQgb2YgdGhlIEhTQSwgaWYgYW55LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBib3RoIHRoZSBhY2N1cmF0ZSBmaWxpbmcgb2YgeW91ciB0YXhlcyBhbmQgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMgcmVnYXJkaW5nIEhTQXMuIFBsZWFzZSByZXNwb25kIHdpdGggdGhlc2UgZG9jdW1lbnRzIGFuZCBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIG5lZWRlZCwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFybWVkIEZvcmNlcyBNb3ZpbmcgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFybWVkIEZvcmNlcyBNb3ZpbmcgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBmb3IgdGhlIGN1cnJlbnQgdGF4IHllYXIsIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBpbmN1cnJlZCBtb3ZpbmcgZXhwZW5zZXMgcmVsYXRlZCB0byBhIHBlcm1hbmVudCBjaGFuZ2Ugb2Ygc3RhdGlvbiBhcyBhIG1lbWJlciBvZiB0aGUgQXJtZWQgRm9yY2VzLiBUbyBlbnN1cmUgdGhlIGFjY3VyYWN5IG9mIHlvdXIgdGF4IHJldHVybiBhbmQgdG8gcG90ZW50aWFsbHkgcXVhbGlmeSBmb3IgcmVsYXRlZCBkZWR1Y3Rpb25zIG9yIGV4Y2x1c2lvbnMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxiPk9yZGVycyBmb3IgUGVybWFuZW50IENoYW5nZSBvZiBTdGF0aW9uOjwvYj4gQSBjb3B5IG9mIHRoZSBvZmZpY2lhbCBvcmRlcnMgdGhhdCBpbml0aWF0ZWQgdGhlIG1vdmUuIFRoaXMgc2hvdWxkIGRldGFpbCB0aGUgbW92ZSBpcyBkdWUgdG8gbWlsaXRhcnkgb3JkZXJzIGFuZCBpbmRpY2F0ZSBib3RoIHlvdXIgcHJldmlvdXMgYW5kIG5ldyBkdXR5IHN0YXRpb25zLjwvbGk+XHJcbiAgICAgIDxsaT48Yj5SZWNlaXB0cyBhbmQgUmVjb3JkcyBvZiBNb3ZpbmcgRXhwZW5zZXM6PC9iPiBEZXRhaWxlZCByZWNlaXB0cyBvciByZWNvcmRzIG9mIGFsbCBtb3ZpbmctcmVsYXRlZCBleHBlbnNlcy4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvOlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5UcmFuc3BvcnRhdGlvbiBjb3N0cyAoZS5nLiwgY29zdHMgYXNzb2NpYXRlZCB3aXRoIG1vdmluZyBob3VzZWhvbGQgZ29vZHMgYW5kIHBlcnNvbmFsIGVmZmVjdHMpPC9saT5cclxuICAgICAgICAgIDxsaT5UcmF2ZWwgZXhwZW5zZXMgdG8gdGhlIG5ldyBob21lIChlLmcuLCBsb2RnaW5nIGNvc3RzIGVuIHJvdXRlLCBidXQgbm90IG1lYWxzKTwvbGk+XHJcbiAgICAgICAgICA8bGk+U3RvcmFnZSBleHBlbnNlcyBmb3IgaG91c2Vob2xkIGdvb2RzIGFuZCBwZXJzb25hbCBlZmZlY3RzLCBpZiBhcHBsaWNhYmxlPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PGI+TGVhc2UgVGVybWluYXRpb24gRG9jdW1lbnRhdGlvbjo8L2I+IElmIGFwcGxpY2FibGUsIGRvY3VtZW50YXRpb24gc2hvd2luZyBhbnkgY29zdHMgYXNzb2NpYXRlZCB3aXRoIGJyZWFraW5nIGEgbGVhc2UgZHVlIHRvIHRoZSBtb3ZlLjwvbGk+XHJcbiAgICAgIDxsaT48Yj5Qcm9vZiBvZiBOZXcgUmVzaWRlbmNlOjwvYj4gQSBkb2N1bWVudCBpbmRpY2F0aW5nIHRoZSBhZGRyZXNzIG9mIHlvdXIgbmV3IHBlcm1hbmVudCByZXNpZGVuY2UuIFRoaXMgY2FuIGluY2x1ZGUgYSB1dGlsaXR5IGJpbGwsIG5ldyBsZWFzZSBhZ3JlZW1lbnQsIG9yIGhvbWVvd25lcidzIGluc3VyYW5jZSBkb2N1bWVudHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugbm90ZSwgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IGV4Y2x1c2lvbnMgb3IgZGVkdWN0aW9ucyByZWxhdGVkIHRvIEFybWVkIEZvcmNlcyBtb3ZpbmcgZXhwZW5zZXMsIHRoZXNlIGRvY3VtZW50cyBhcmUgbmVjZXNzYXJ5IHRvIHZlcmlmeSB0aGUgZXhwZW5zZXMgaW5jdXJyZWQuIFdlIHVuZGVyc3RhbmQgdGhlIHNlbnNpdGl2ZSBuYXR1cmUgb2YgdGhlc2UgZG9jdW1lbnRzIGFuZCBhc3N1cmUgeW91IHRoYXQgYWxsIGluZm9ybWF0aW9uIHByb3ZpZGVkIHdpbGwgYmUga2VwdCBjb25maWRlbnRpYWwgYW5kIHVzZWQgZXhjbHVzaXZlbHkgZm9yIHRoZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2UgaW4gcHJvdmlkaW5nIHRoZXNlIGRvY3VtZW50cyB0byB1cy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRlZHVjdGlibGUgU2VsZiBFbXBsb3ltZW50IFBhcnQgVGF4ZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRlZHVjdGlibGUgU2VsZiBFbXBsb3ltZW50IFBhcnQgVGF4ZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMgYW5kIGVuc3VyZSB0aGUgYWNjdXJhY3kgb2YgeW91ciB0YXggZmlsaW5ncywgd2UndmUgaWRlbnRpZmllZCBhIHBvdGVudGlhbCBhZGp1c3RtZW50IGZvciBoYWxmIG9mIHlvdXIgc2VsZi1lbXBsb3ltZW50IHRheC4gVGhpcyBpbnZvbHZlcyB0aGUgZGVkdWN0aW9uIG9mIGhhbGYgb2YgdGhlIHNlbGYtZW1wbG95bWVudCB0YXggeW91J3ZlIHBhaWQgZm9yIHRoZSBjdXJyZW50IHllYXIsIHdoaWNoIGNvbnRyaWJ1dGVzIHRvd2FyZHMgeW91ciBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlLjwvcD5cclxuICAgIDxwPlRvIHByb2NlZWQgd2l0aCB0aGlzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPlNlbGYtRW1wbG95bWVudCBUYXggQ2FsY3VsYXRpb246PC9zdHJvbmc+IEEgZGV0YWlsZWQgY2FsY3VsYXRpb24gb2YgeW91ciBzZWxmLWVtcGxveW1lbnQgdGF4IGZvciB0aGUgY3VycmVudCB0YXggeWVhci4gVGhpcyBtYXkgaW5jbHVkZSBhIHN1bW1hcnkgb2YgeW91ciBuZXQgZWFybmluZ3MgZnJvbSBzZWxmLWVtcGxveW1lbnQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlRvdGFsIFNlbGYtRW1wbG95bWVudCBUYXggUGFpZDo8L3N0cm9uZz4gT2ZmaWNpYWwgcmVjZWlwdHMgb3IgZG9jdW1lbnRzIHNob3dpbmcgdGhlIHRvdGFsIGFtb3VudCBvZiBzZWxmLWVtcGxveW1lbnQgdGF4IHBhaWQgZm9yIHRoZSB5ZWFyLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5JZGVudGlmaWNhdGlvbiBvZiBQYXltZW50czo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvciBsZWRnZXJzIGluZGljYXRpbmcgcGF5bWVudHMgbWFkZSB0b3dhcmRzIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUgdGhyb3VnaCBzZWxmLWVtcGxveW1lbnQgdGF4LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBkb2N1bWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgdGF4ZXMgYW5kIGVuc3VyaW5nIHlvdSByZWNlaXZlIGFsbCBlbnRpdGxlZCBkZWR1Y3Rpb25zLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBPdXIgdGVhbSBpcyBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VsZiBFbXBsb3llZCBTRVAgSVJBIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VsZiBFbXBsb3llZCBTRVAgSVJBIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgbWFraW5nIGNvbnRyaWJ1dGlvbnMgdG8gYSBTRVAtSVJBIChTaW1wbGlmaWVkIEVtcGxveWVlIFBlbnNpb24gSW5kaXZpZHVhbCBSZXRpcmVtZW50IEFjY291bnQpIHRoaXMgdGF4IHllYXIgYXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwuIEZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIHRvIG1heGltaXplIHlvdXIgcG90ZW50aWFsIHRheCBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TRVAtSVJBIENvbnRyaWJ1dGlvbiBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgc3RhdGVtZW50cyBvciByZWNlaXB0cyBzaG93aW5nIHRoZSBjb250cmlidXRpb25zIG1hZGUgdG8geW91ciBTRVAtSVJBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBTZWxmLUVtcGxveWVkIEluY29tZTo8L3N0cm9uZz4gQXMgeW91ciBTRVAtSVJBIGNvbnRyaWJ1dGlvbiBsaW1pdHMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8geW91ciBzZWxmLWVtcGxveWVkIGluY29tZSwgcGxlYXNlIGVuc3VyZSB3ZSBoYXZlIGFsbCByZWxldmFudCBpbmNvbWUgZG9jdW1lbnRhdGlvbi4gVGhpcyBtYXkgaW5jbHVkZSwgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCAxMDk5IGZvcm1zLCBwcm9maXQgYW5kIGxvc3Mgc3RhdGVtZW50cywgYW5kIGJ1c2luZXNzIGJhbmsgc3RhdGVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNjaGVkdWxlIEMgKEZvcm0gMTA0MCkgb3IgRXF1aXZhbGVudDo8L3N0cm9uZz4gSWYgeW91IGhhdmUgbm90IGFscmVhZHkgZG9uZSBzbywgcGxlYXNlIHByb3ZpZGUgYSBjb21wbGV0ZWQgU2NoZWR1bGUgQyBvciBlcXVpdmFsZW50IGRvY3VtZW50YXRpb24gdGhhdCBkZXRhaWxzIHlvdXIgYnVzaW5lc3MgZWFybmluZ3MgYW5kIGV4cGVuc2VzLiBUaGlzIHdpbGwgaGVscCBpbiBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIHlvdXIgbWF4aW11bSBkZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBQcmlvciBZZWFyIENvbnRyaWJ1dGlvbiBEZXRhaWxzOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSBtYWRlIGNvbnRyaWJ1dGlvbnMgaW4gcHJpb3IgeWVhcnMgYnV0IGhhdmVu4oCZdCBzaGFyZWQgdGhvc2UgZGV0YWlscyB3aXRoIHVzLCBwbGVhc2UgZG8gc28uIFRoaXMgY2FuIGFmZmVjdCB5b3VyIGN1cnJlbnQgeWVhcuKAmXMgY29udHJpYnV0aW9ucyBhbmQgZGVkdWN0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkNvcnJlY3RseSByZXBvcnRpbmcgeW91ciBTRVAtSVJBIGNvbnRyaWJ1dGlvbnMgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgdGF4IGRlZHVjdGlvbnMgYW5kIGNvbXBseSB3aXRoIElSUyBydWxlcyBhbmQgcmVndWxhdGlvbnMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgbG9vayBmb3J3YXJkIHRvIGNvbXBsZXRpbmcgeW91ciB0YXggcHJlcGFyYXRpb24gZWZmaWNpZW50bHkgYW5kIGFjY3VyYXRlbHkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlbGYgRW1wbG95ZWQgU0lNUExFIFBsYW4gQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTZWxmIEVtcGxveWVkIFNJTVBMRSBQbGFuIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPldlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBub3RlZCB0aGF0IHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvIGEgU0lNUExFIElSQSBwbGFuIGFzIGEgc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFsIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGVzZSBjb250cmlidXRpb25zIGluIHlvdXIgdGF4IGZpbGluZywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIDwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFNJTVBMRSBJUkEgdGhpcyB0YXggeWVhcjo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIHRvdGFsIHN1bSBvZiB5b3VyIGNvbnRyaWJ1dGlvbnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db250cmlidXRpb24gZGF0ZXM6PC9zdHJvbmc+IExpc3QgdGhlIGRhdGVzIG9uIHdoaWNoIHlvdSBtYWRlIHRoZXNlIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIFNJTVBMRSBJUkEuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBjb250cmlidXRpb25zOjwvc3Ryb25nPiBUaGlzIGNhbiBpbmNsdWRlIGJhbmsgc3RhdGVtZW50cyBvciB0cmFuc2FjdGlvbiBoaXN0b3JpZXMgc2hvd2luZyB0aGUgY29udHJpYnV0aW9ucyB0byB5b3VyIFNJTVBMRSBJUkEgYWNjb3VudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPklSUyBGb3JtIDEwNDAgU2NoZWR1bGUgQzo8L3N0cm9uZz4gQXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwsIHlvdXIgdGF4IHJldHVybiBzaG91bGQgaW5jbHVkZSBhIFNjaGVkdWxlIEMgc2hvd2luZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBkZXRlcm1pbmluZyB5b3VyIG5ldCBlYXJuaW5ncyBhbmQgdGhlIGNvbnRyaWJ1dGlvbiBsaW1pdHMgZm9yIHlvdXIgU0lNUExFIElSQS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkVtcGxveWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoRUlOKSBvZiB0aGUgU0lNUExFIElSQSBwbGFuOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIHRoZSBFSU4gZm9yIHlvdXIgU0lNUExFIElSQS4gVGhpcyBpcyBub3QgcmVxdWlyZWQgaWYgeW91IGFyZSB0aGUgc29sZSBjb250cmlidXRvciBhbmQgZG8gbm90IGhhdmUgYW4gRUlOIHNlcGFyYXRlIGZyb20geW91ciBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgcmV0aXJlbWVudCBjb250cmlidXRpb25zLiBZb3VyIHByb21wdG5lc3MgaW4gcHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBoZWxwIGF2b2lkIGRlbGF5cyBpbiB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlbGYgRW1wbG95ZWQgUXVhbGlmaWVkIFBsYW4gQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTZWxmIEVtcGxveWVkIFF1YWxpZmllZCBQbGFuIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscyByZWdhcmRpbmcgeW91ciBzZWxmLWVtcGxveWVkIHF1YWxpZmllZCBwbGFuIGNvbnRyaWJ1dGlvbnMuIFlvdXIgcmVzcG9uc2UgdG8gb3VyIHF1ZXN0aW9uIGFib3V0IG1ha2luZyBjb250cmlidXRpb25zIHRvIGEgcXVhbGlmaWVkIHJldGlyZW1lbnQgcGxhbiBkdXJpbmcgdGhpcyB0YXggeWVhciBuZWNlc3NpdGF0ZXMgZnVydGhlciBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGNvbXB1dGUgcG90ZW50aWFsIHRheCBiZW5lZml0cyBvciBvYmxpZ2F0aW9ucy48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxiPkNvbmZpcm1hdGlvbiBvZiBDb250cmlidXRpb24gVHlwZTo8L2I+IENsYXJpZnkgdGhlIHR5cGUgb2YgcXVhbGlmaWVkIHJldGlyZW1lbnQgcGxhbiB5b3UgY29udHJpYnV0ZWQgdG8gKGUuZy4sIFNvbG8gNDAxKGspLCBTRVAgSVJBLCBTSU1QTEUgSVJBKS48L2xpPlxyXG4gICAgPGxpPjxiPlRvdGFsIEFtb3VudCBDb250cmlidXRlZDo8L2I+IFNwZWNpZnkgdGhlIHRvdGFsIGRvbGxhciBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIHBsYW4gZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgPGxpPjxiPkNvbnRyaWJ1dGlvbiBEYXRlczo8L2I+IExpc3QgdGhlIGRhdGVzIG9uIHdoaWNoIGNvbnRyaWJ1dGlvbnMgd2VyZSBtYWRlLjwvbGk+XHJcbiAgICA8bGk+PGI+UGxhbiBBZG1pbmlzdHJhdG9yOjwvYj4gUHJvdmlkZSB0aGUgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgcGxhbidzIGFkbWluaXN0cmF0b3IsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgIDxsaT48Yj5Qcm9vZiBvZiBDb250cmlidXRpb25zOjwvYj4gRm9yd2FyZCBhbnkgcmVjZWlwdHMsIHN0YXRlbWVudHMsIG9yIG90aGVyIGRvY3VtZW50cyB0aGF0IGNhbiB2ZXJpZnkgdGhlIGNvbnRyaWJ1dGlvbnMgeW91IG1hZGUuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoYXQgeW91IHJlY2VpdmUgdGhlIHByb3BlciB0YXggdHJlYXRtZW50IGZvciB0aGVzZSBjb250cmlidXRpb25zLiBGYWlsdXJlIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHJldGlyZW1lbnQgcGxhbiBjb250cmlidXRpb25zIGNhbiByZXN1bHQgaW4gZGlzY3JlcGFuY2llcyB3aXRoIHRoZSBJUlMgYW5kIHBvdGVudGlhbGx5IGFmZmVjdCB5b3VyIHRheCBsaWFiaWxpdHkgb3IgcmVmdW5kLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCB3aWxsIGhlbHAgdXMgdG8gbW9yZSBlZmZpY2llbnRseSBjb21wbGV0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBzZXJ2aWNlcy4gVGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlbGYgRW1wbG95ZWQgSGVhbHRoIEluc3VyYW5jZSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgSGVhbHRoIEluc3VyYW5jZSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RpY2VkIHlvdSBpbmRpY2F0ZWQgcGF5aW5nIGZvciBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zIGFzIGEgc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFsLiBUbyBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbnMgZm9yIHlvdXIgaGVhbHRoIGluc3VyYW5jZSBjb3N0cywgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiA8c3Ryb25nPmFsbCBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zPC9zdHJvbmc+IHBhaWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIG1lZGljYWwsIGRlbnRhbCwgYW5kIGxvbmctdGVybSBjYXJlIGluc3VyYW5jZS4gVGhpcyBzaG91bGQgY292ZXI6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzIHBhaWQgZm9yIHlvdXJzZWxmPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzIHBhaWQgZm9yIHlvdXIgc3BvdXNlPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzIHBhaWQgZm9yIHlvdXIgZGVwZW5kZW50czwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgcGF5bWVudCBmb3IgdGhlc2UgcHJlbWl1bXMsIHN1Y2ggYXM6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5CYW5rIHN0YXRlbWVudHM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkluc3VyYW5jZSBwYXltZW50IHJlY2VpcHRzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5DYW5jZWxsZWQgY2hlY2tzPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgdGhlIGluc3VyYW5jZSBjb3ZlcmFnZSwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+SW5zdXJhbmNlIHBvbGljeSBzdGF0ZW1lbnRzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3ZlcmFnZSBzdW1tYXJpZXM8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiB0aGF0IHRoZSBpbnN1cmFuY2UgcGxhbiBpcyBlc3RhYmxpc2hlZCB1bmRlciB5b3VyIGJ1c2luZXNzIChmb3Igc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFscykuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIHlvdXIgZGVkdWN0aWJsZSBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gUGxlYXNlIHNlbmQgdGhlIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGVkIGluIGEgdGltZWx5IG1hbm5lci48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVhcmx5IFNhdmluZ3MgV2l0aGRyYXdhbCBQZW5hbHR5XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFYXJseSBTYXZpbmdzIFdpdGhkcmF3YWwgUGVuYWx0eVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB5b3UgaW5jdXJyZWQgcGVuYWx0aWVzIGR1ZSB0byBlYXJseSB3aXRoZHJhd2FscyBmcm9tIHNhdmluZ3MgYWNjb3VudHMgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGFzc2lzdCB5b3UgZWZmaWNpZW50bHkgYW5kIGVuc3VyZSBhY2N1cmF0ZSB0YXggZmlsaW5nLCB3ZSBraW5kbHkgYXNrIHlvdSB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRoZSB0b3RhbCBhbW91bnQgb2YgcGVuYWx0aWVzPC9zdHJvbmc+IGluY3VycmVkIGZyb20gZWFybHkgd2l0aGRyYXdhbHMuIFRoaXMgaW5jbHVkZXMgcGVuYWx0aWVzIGZyb20gY2VydGlmaWNhdGVzIG9mIGRlcG9zaXQgb3Igb3RoZXIgdGltZS1iYXNlZCBzYXZpbmdzIGFjY291bnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgc3RhdGVtZW50czwvc3Ryb25nPiBmcm9tIHlvdXIgZmluYW5jaWFsIGluc3RpdHV0aW9uIGZvciBlYWNoIGluc3RhbmNlIG9mIGVhcmx5IHdpdGhkcmF3YWwuIFRoZXNlIHN0YXRlbWVudHMgc2hvdWxkIGluY2x1ZGU6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZGF0ZSBvZiB3aXRoZHJhd2FsPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHdpdGhkcmF3biBlYXJseTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIHBlbmFsdHkgY2hhcmdlZDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UaGUgcHVycG9zZSBvZiBlYWNoIHdpdGhkcmF3YWw8L3N0cm9uZz4sIGlmIGF2YWlsYWJsZS4gQ2VydGFpbiBzaXR1YXRpb25zIG1heSBwcm92aWRlIGV4Y2VwdGlvbnMgdG8gcGVuYWx0aWVzIG9uIHlvdXIgdGF4IHJldHVybi48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgPHN0cm9uZz5jb3JyZXNwb25kZW5jZSBvciBkb2N1bWVudGF0aW9uPC9zdHJvbmc+IGZyb20gdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiByZWdhcmRpbmcgdGhlc2UgcGVuYWx0aWVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIHRvIGFjY3VyYXRlbHkgYXNzZXNzIHBvc3NpYmxlIGltcGFjdHMgb24geW91ciB0YXggZmlsaW5nIGFuZCBleHBsb3JlIGFueSBvcHBvcnR1bml0aWVzIHRvIG1pbmltaXplIHlvdXIgdGF4IGxpYWJpbGl0eS48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkZXRhaWxzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQWxpbW9ueSBQYWlkXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBbGltb255IFBhaWRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGZpbmFuY2lhbCBhY3Rpdml0aWVzIG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuIEFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBtYWRlIGFsaW1vbnkgcGF5bWVudHMgdW5kZXIgYSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm4uIFRoZSBkb2N1bWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucyBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnlpbmcgYWxsb3dhYmxlIGRlZHVjdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBwYXltZW50cy48L3A+IFxyXG4gICAgPHA+PHN0cm9uZz5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgcmVsYXRlZCB0byB5b3VyIGFsaW1vbnkgcGF5bWVudHM6PC9zdHJvbmc+PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5Db3B5IG9mIHlvdXIgc2lnbmVkIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQgdGhhdCBzdGF0ZXMgdGhlIGFtb3VudCBvZiBhbGltb255IHRvIGJlIHBhaWQgYW5kIHRoZSB0aW1lbGluZXMuIFBsZWFzZSBlbnN1cmUgdGhpcyBkb2N1bWVudCBoaWdobGlnaHRzIHRoZSBzZWN0aW9ucyByZWxldmFudCB0byBhbGltb255IG9ibGlnYXRpb25zLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbGVkIHJlY29yZCBvZiBhbGwgYWxpbW9ueSBwYXltZW50cyBtYWRlIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2YgZWFjaCBwYXltZW50PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgb2YgZWFjaCBwYXltZW50PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5NZXRob2Qgb2YgcGF5bWVudCAoZS5nLiwgY2hlY2ssIGJhbmsgdHJhbnNmZXIpPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSByZWNpcGllbnQ8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50cyBvciBjYW5jZWxsZWQgY2hlY2tzIGFzIHByb29mIG9mIHRoZSBhbGltb255IHBheW1lbnRzIG1hZGUuPC9saT5cclxuICAgICAgICA8bGk+SWYgYXBwbGljYWJsZSwgYW55IGRvY3VtZW50YXRpb24gb3IgY29ycmVzcG9uZGVuY2UgdGhhdCBpbmRpY2F0ZXMgbW9kaWZpY2F0aW9ucyB0byB0aGUgb3JpZ2luYWwgYWdyZWVtZW50IGFmZmVjdGluZyBhbGltb255IHBheW1lbnRzIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGRvY3VtZW50YXRpb24gd2lsbCBoZWxwIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHJldHVybiByZWZsZWN0cyBhbGwgcmVsZXZhbnQgZmluYW5jaWFsIGFjdGl2aXRpZXMgYW5kIGFzc2lzdHMgaW4gYWNjdXJhdGVseSBkZXRlcm1pbmluZyBhbnkgdGF4IGxpYWJpbGl0aWVzIG9yIGRlZHVjdGlvbnMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZGV0YWlscyB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQgYW5kIHdpbGwgZXhwZWRpdGUgdGhlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggcHJlcGFyYXRpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGlmIHlvdSBuZWVkIGZ1cnRoZXIgZ3VpZGFuY2Ugb24gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cy4gV2UgYXJlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhpcyBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUcmFkaXRpb25hbCBJUkEgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUcmFkaXRpb25hbCBJUkEgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybi4gSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IGR1cmluZyB0aGlzIHRheCB5ZWFyLCB5b3UgaGF2ZSBjb250cmlidXRlZCB0byBhIFRyYWRpdGlvbmFsIElSQSAoSW5kaXZpZHVhbCBSZXRpcmVtZW50IEFjY291bnQpLiBUbyBhY2N1cmF0ZWx5IGNhcHR1cmUgdGhpcyBpbiB5b3VyIHRheCBmaWxpbmcgYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgZGVkdWN0aW9uLCB3ZSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IGNvbnRyaWJ1dGVkIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+UHJvb2Ygb2YgY29udHJpYnV0aW9uIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgKHN1Y2ggYXMgc3RhdGVtZW50cyBvciByZWNlaXB0cykuPC9saT5cclxuICAgICAgPGxpPllvdXIgeWVhci1lbmQgSVJBIHN0YXRlbWVudC48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlscyBvZiBhbnkgcHJldmlvdXMgbm9uLWRlZHVjdGlibGUgY29udHJpYnV0aW9ucyB0byB5b3VyIElSQSAoaWYgYXBwbGljYWJsZSkuPC9saT5cclxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSB3aXRoZHJhd2FscyBvciBkaXN0cmlidXRpb25zIHRha2VuIGR1cmluZyB0aGUgeWVhci48L2xpPlxyXG4gICAgICA8bGk+WW91ciBmaWxpbmcgc3RhdHVzIGFuZCBhbnkgaW5mb3JtYXRpb24gb24gYSBzcG91c2UncyBJUkEgY29udHJpYnV0aW9ucyBpZiB5b3UgYXJlIG1hcnJpZWQuPC9saT5cclxuICAgICAgPGxpPkRldGFpbHMgb2YgeW91ciBlYXJuZWQgaW5jb21lIGZvciB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHRoYXQgd2UgY2FuIGFjY3VyYXRlbHkgcmVwcmVzZW50IHlvdXIgSVJBIGNvbnRyaWJ1dGlvbnMgYW5kIG9wdGltaXplIHlvdXIgZGVkdWN0aW9ucy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU3R1ZGVudCBMb2FuIEludGVyZXN0IERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU3R1ZGVudCBMb2FuIEludGVyZXN0IERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBwYXltZW50IG9mIHN0dWRlbnQgbG9hbiBpbnRlcmVzdCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcm9jZXNzIHRoaXMgc2VnbWVudCBvZiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSB5b3UgYmVuZWZpdCBmcm9tIGFueSBwb3RlbnRpYWwgU3R1ZGVudCBMb2FuIEludGVyZXN0IERlZHVjdGlvbiwgd2UgbmVlZCB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDEwOTgtRTo8L3N0cm9uZz4gVGhpcyBpcyBhIFN0dWRlbnQgTG9hbiBJbnRlcmVzdCBTdGF0ZW1lbnQgaXNzdWVkIGJ5IHlvdXIgbG9hbiBzZXJ2aWNlci4gSWYgeW91J3ZlIHBhaWQgJDYwMCBvciBtb3JlIGluIGludGVyZXN0LCB5b3Ugc2hvdWxkIGF1dG9tYXRpY2FsbHkgcmVjZWl2ZSBpdC4gUGxlYXNlIHNjYW4gYW5kIHNlbmQgaXQgdG8gdXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Mb2FuIFN0YXRlbWVudHM6PC9zdHJvbmc+IElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBGb3JtIDEwOTgtRSBvciBwYWlkIGxlc3MgdGhhbiAkNjAwIGluIGludGVyZXN0LCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCBsb2FuIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGUgaW50ZXJlc3QgcGFpZCBvdmVyIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJvcnJvd2VyJ3MgSW5mb3JtYXRpb246PC9zdHJvbmc+IENvbmZpcm0gdGhlIFNvY2lhbCBTZWN1cml0eSBOdW1iZXJzIGFuZCBmdWxsIG5hbWVzIG9mIGFueSBpbmRpdmlkdWFscyBmb3Igd2hvbSB0aGUgbG9hbiBpbnRlcmVzdCB3YXMgcGFpZCwgaW5jbHVkaW5nIHlvdXJzZWxmLCB5b3VyIHNwb3VzZSwgb3IgZGVwZW5kZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBheW1lbnRzIG9uIFNvbWVvbmUgRWxzZSdzIEJlaGFsZjo8L3N0cm9uZz4gSWYgeW91J3JlIG5vdCBsZWdhbGx5IG9ibGlnYXRlZCB0byBtYWtlIGludGVyZXN0IHBheW1lbnRzIG9uIHRoZSBsb2FuIGJ1dCBoYXZlIGRvbmUgc28gYW55d2F5LCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgcmVmbGVjdGluZyB0aGlzIHBheW1lbnQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGRlZHVjdGlvbiBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCB0YXggYWR2YW50YWdlcywgYW5kIHdlJ3JlIGhlcmUgdG8gaGVscCB5b3UgbWF4aW1pemUgeW91ciBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9hY3RpdmUgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhcyB3ZSBzdHJpdmUgdG8gc2VydmUgeW91IGJldHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQXJjaGVyIE1TQSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFyY2hlciBNU0EgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgY29udHJpYnV0aW9ucyB0byBhbiBBcmNoZXIgTWVkaWNhbCBTYXZpbmdzIEFjY291bnQgKE1TQSkgd2l0aGluIHRoaXMgdGF4IHllYXIsIHVuZGVyIGEgaGlnaC1kZWR1Y3RpYmxlIGhlYWx0aCBwbGFuLiBUbyBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIGNvbnRyaWJ1dGlvbnMgaW4geW91ciB0YXggcmV0dXJuLCBhbmQgdG8gbWF4aW1pemUgeW91ciBwb3RlbnRpYWwgZGVkdWN0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBzcGVjaWZpY3M6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gNTQ5OC1TQTo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIEZvcm0gNTQ5OC1TQSwgaWYgcmVjZWl2ZWQsIHdoaWNoIHNob3dzIHRoZSBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIEFyY2hlciBNU0EgdGhpcyB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJhbmsgb3IgRmluYW5jaWFsIFN0YXRlbWVudHM6PC9zdHJvbmc+IElmIHlvdSBoYXZlbid0IHJlY2VpdmVkIEZvcm0gNTQ5OC1TQSwgYmFuayBvciBmaW5hbmNpYWwgaW5zdGl0dXRpb24gc3RhdGVtZW50cyBzaG93aW5nIHlvdXIgY29udHJpYnV0aW9ucyB0byB0aGUgTVNBIGFyZSByZXF1aXJlZC4gRW5zdXJlIHRoZXNlIGNsZWFybHkgaGlnaGxpZ2h0IHRoZSBjb250cmlidXRpb24gYW1vdW50cyBhbmQgZGF0ZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBIaWdoLURlZHVjdGlibGUgSGVhbHRoIFBsYW46PC9zdHJvbmc+IERvY3VtZW50YXRpb24gdGhhdCBldmlkZW5jZXMgeW91IGFyZSBjb3ZlcmVkIHVuZGVyIGEgaGlnaC1kZWR1Y3RpYmxlIGhlYWx0aCBwbGFuLiBUaGlzIGNvdWxkIGluY2x1ZGUgaW5zdXJhbmNlIHN0YXRlbWVudHMgb3IgcG9saWN5IGRvY3VtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIGFuZCBBY2NvdW50IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBhY2NvdW50IGhvbGRlcidzIGZ1bGwgbmFtZSBhbmQgU29jaWFsIFNlY3VyaXR5IE51bWJlciwgYWxvbmdzaWRlIHRoZSBBcmNoZXIgTVNBIGFjY291bnQgbnVtYmVyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VG8gZmFjaWxpdGF0ZSBhIHNtb290aCBkZWR1Y3Rpb24gcHJvY2VzcyBhbmQgYWRoZXJlIHRvIElSUyBndWlkZWxpbmVzLCBraW5kbHkgc3VibWl0IHRoZSBvdXRsaW5lZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZTwvc3Ryb25nPi4gRWFybHkgc3VibWlzc2lvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIHRvIGVuc3VyZSB3ZSBjYW4gcHJvdmlkZSB5b3Ugd2l0aCB0aGUgYmVzdCB0YXggcHJlcGFyYXRpb24gc2VydmljZS48L3A+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB0byB0aGVzZSByZXF1aXJlbWVudHMgd2lsbCBkaXJlY3RseSBpbXBhY3QgdGhlIGVmZmljaWVuY3kgYW5kIGFjY3VyYWN5IG9mIHlvdXIgdGF4IHJldHVybiBwcm9jZXNzaW5nLiBTaG91bGQgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBvciBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIGRvY3VtZW50YXRpb24sIHBsZWFzZSBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJPdGhlciBXcml0ZS1JbiBBZGp1c3RtZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiT3RoZXIgV3JpdGUtSW4gQWRqdXN0bWVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBhZGRpdGlvbmFsIGV4cGVuc2VzIG9yIGFkanVzdG1lbnRzIHRoYXQgY291bGQgaW1wYWN0IHlvdXIgdGF4YWJsZSBpbmNvbWUgZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgZnVsbHkgbGV2ZXJhZ2UgYWxsIHBvc3NpYmxlIGRlZHVjdGlvbnMgYW5kIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGF0IHlvdSBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uIHBlcnRhaW5pbmcgdG8gdGhlc2UgaXRlbXMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGZvciBlYWNoIHNwZWNpZmllZCBkZWR1Y3Rpb24gb3IgYWRqdXN0bWVudDo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgdGhlIEV4cGVuc2Ugb3IgQWRqdXN0bWVudDo8L3N0cm9uZz4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIGl0ZW0geW91IGJlbGlldmUgc2hvdWxkIGJlIGNvbnNpZGVyZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQ6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgcGFpZCBvciBpbmN1cnJlZCBmb3IgZWFjaCBvZiB0aGVzZSBleHBlbnNlcyBvciBhZGp1c3RtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+IENvcGllcyBvZiByZWNlaXB0cywgaW52b2ljZXMsIGxlZ2FsIGRvY3VtZW50cywgb3Igb3RoZXIgc3VwcG9ydGluZyBldmlkZW5jZSB0aGF0IHZhbGlkYXRlIHRoZSBleHBlbnNlIG9yIGFkanVzdG1lbnQuIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgY29tcGxpYW5jZSB3aXRoIElSUyByZXF1aXJlbWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFBheW1lbnQgb3IgSW5jdXJyZW5jZTo8L3N0cm9uZz4gVGhlIGRhdGUocykgb24gd2hpY2ggdGhlIGV4cGVuc2Ugd2FzIHBhaWQgb3IgdGhlIGFkanVzdG1lbnQgb2NjdXJyZWQuIFRoaXMgaXMgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIHRoZSB0YXggeWVhciBpbiB3aGljaCB0aGUgZGVkdWN0aW9uIG9yIGFkanVzdG1lbnQgYXBwbGllcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgRXhwbGFuYXRpb246PC9zdHJvbmc+IEFueSBvdGhlciByZWxldmFudCBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGhlbHAgdXMgdW5kZXJzdGFuZCBob3cgdGhlIGV4cGVuc2Ugb3IgYWRqdXN0bWVudCBpcyBqdXN0aWZpZWQgdW5kZXIgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhcmUgcHJvdmlkZWQgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBlZmZpY2llbnQgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCBjb25zdGl0dXRlcyBhcHByb3ByaWF0ZSBkb2N1bWVudGF0aW9uLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFdlIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk1lZGljYWwgYW5kIERlbnRhbCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTWVkaWNhbCBhbmQgRGVudGFsIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IG9yIHlvdXIgZGVwZW5kZW50cyBoYXZlIGluY3VycmVkIHNpZ25pZmljYW50IG1lZGljYWwgb3IgZGVudGFsIGV4cGVuc2VzIGR1cmluZyB0aGlzIHRheCB5ZWFyIHRoYXQgd2VyZSBub3QgcmVpbWJ1cnNlZCBieSBpbnN1cmFuY2Ugb3Igb3RoZXIgaGVhbHRoIHBsYW5zLiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgZXhwZW5zZXMgaW4geW91ciB0YXggcHJlcGFyYXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5EZXRhaWxlZCByZWNlaXB0cyBvciBzdGF0ZW1lbnRzIGZvciBhbGwgbWVkaWNhbCBhbmQgZGVudGFsIGV4cGVuc2VzIGluY3VycmVkIGZvciB5b3Vyc2VsZiBhbmQgYW55IGRlcGVuZGVudHMuIFRoaXMgaW5jbHVkZXMgcGF5bWVudHMgZm9yOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RG9jdG9ycyBhbmQgZGVudGlzdHM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlN1cmdlb25zPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5QcmVzY3JpcHRpb25zPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5NZWRpY2FsIGVxdWlwbWVudCBkZWVtZWQgbmVjZXNzYXJ5PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgb3RoZXIgaGVhbHRoLXJlbGF0ZWQgZXhwZW5zZXMgbm90IGxpc3RlZCB0aGF0IHlvdSBiZWxpZXZlIG1heSBiZSByZWxldmFudDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIHNob3dpbmcgYW55IHJlaW1idXJzZW1lbnRzIHJlY2VpdmVkIGZyb20gaW5zdXJhbmNlIG9yIGhlYWx0aCBwbGFucyBmb3IgdGhlc2UgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+QSBsaXN0IG9mIGRlcGVuZGVudHMgZm9yIHdob20gdGhlc2UgbWVkaWNhbCBhbmQgZGVudGFsIGV4cGVuc2VzIHdlcmUgaW5jdXJyZWQsIGFsb25nIHdpdGggdGhlaXIgcmVsYXRpb25zaGlwIHRvIHlvdS48L2xpPlxyXG4gICAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCByZWNvcmRzIG9mIHRyYXZlbCBleHBlbnNlcyByZWxhdGVkIHRvIG1lZGljYWwgY2FyZSwgaW5jbHVkaW5nIG1pbGVhZ2UsIHBhcmtpbmcsIGFuZCB0b2xscy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkhhdmluZyB0aGVzZSBkb2N1bWVudHMgcmVhZHkgYW5kIGFjY3VyYXRlbHkgZG9jdW1lbnRlZCB3aWxsIGhlbHAgdXMgZW5zdXJlIHRoYXQgd2UgY2FuIG1heGltaXplIHlvdXIgdGF4IGRlZHVjdGlvbnMgb3IgY3JlZGl0cyByZWxhdGVkIHRvIHRoZXNlIGV4cGVuc2VzLiBQbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UsIG9yIGNvbnRhY3QgdXMgdG8gc2NoZWR1bGUgYSBtZWV0aW5nIHRvIGRpc2N1c3MgdGhlc2UgaW4gZnVydGhlciBkZXRhaWwuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNBTFQgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNBTFQgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBuZWVkIHRvIGNvbXBpbGUgYWNjdXJhdGUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgU3RhdGUgYW5kIExvY2FsIFRheGVzIChTQUxUKSBleHBlbnNlcy4gQWNjb3JkaW5nIHRvIHlvdXIgcmVjZW50IHN1Ym1pc3Npb24sIHlvdSBpbmRpY2F0ZWQgaGF2aW5nIHBhaWQgc2lnbmlmaWNhbnQgYW1vdW50cyBpbiB0aGVzZSB0YXhlcyBvdmVyIHRoZSBsYXN0IHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgY2FuIHByb3ZpZGUgeW91IHdpdGggdGhlIGJlc3QgcG9zc2libGUgc2VydmljZSBhbmQgbWF4aW1pemUgeW91ciBkZWR1Y3Rpb25zLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxiPlN1bW1hcnkgb2YgU3RhdGUgYW5kIExvY2FsIEluY29tZSBUYXhlczo8L2I+IFxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5XLTIgZm9ybXMgc2hvd2luZyBzdGF0ZSBhbmQgbG9jYWwgaW5jb21lIHRheGVzIHdpdGhoZWxkLjwvbGk+XHJcbiAgICAgICAgICA8bGk+RXN0aW1hdGVkIHRheCBwYXltZW50IHJlY2VpcHRzIHRvIHN0YXRlIGFuZCBsb2NhbCBnb3Zlcm5tZW50cywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT48Yj5Qcm9wZXJ0eSBUYXhlczo8L2I+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkFubnVhbCBwcm9wZXJ0eSB0YXggc3RhdGVtZW50cyBmb3IgeW91ciBwcmltYXJ5IHJlc2lkZW5jZSwgdmFjYXRpb24gaG9tZXMsIGFuZCBhbnkgb3RoZXIgcmVhbCBlc3RhdGUgb3duZWQuPC9saT5cclxuICAgICAgICAgIDxsaT5WZWhpY2xlIHJlZ2lzdHJhdGlvbiBkb2N1bWVudHMgc2hvd2luZyBwYWlkIHByb3BlcnR5IHRheCBhbW91bnRzLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxiPlNhbGVzIFRheGVzOjwvYj4gKElmIHlvdSBlbGVjdGVkIHRvIGRlZHVjdCBzYWxlcyB0YXhlcyBpbnN0ZWFkIG9mIGluY29tZSB0YXhlcylcclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+RGV0YWlsZWQgcmVjZWlwdHMgb2Ygc2lnbmlmaWNhbnQgcHVyY2hhc2VzIChlLmcuLCB2ZWhpY2xlLCBib2F0LCBob21lIHJlbm92YXRpb24gbWF0ZXJpYWxzKS48L2xpPlxyXG4gICAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIG9yIHN1bW1hcnkgb2YgdG90YWwgc2FsZXMgdGF4ZXMgcGFpZCBpZiB5b3Uga2VwdCBhIGRldGFpbGVkIHJlY29yZC48L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBkb2N1bWVudHMgYXJlIGRhdGVkIHdpdGhpbiB0aGUgbGFzdCB0YXggeWVhci4gUHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB3aWxsIGV4cGVkaXRlIHRoZSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiBhbmQgaGVscCB1cyBpZGVudGlmeSBlbGlnaWJsZSBkZWR1Y3Rpb25zIHRvIG9wdGltaXplIHlvdXIgdGF4IHNpdHVhdGlvbi48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZWR1Y3RpYmxlIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEZWR1Y3RpYmxlIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBuZWVkIGZ1cnRoZXIgZGV0YWlscyByZWdhcmRpbmcgeW91ciBkZWR1Y3RpYmxlIGludGVyZXN0IGV4cGVuc2VzLiBUaGlzIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBpbmZvcm1hdGlvbiB5b3UgcHJvdmlkZWQgaW5kaWNhdGluZyB0aGF0IHlvdSBoYXZlIGluY3VycmVkIG1vcnRnYWdlIGludGVyZXN0LCBsYXRlIGZlZXMsIG9yIHBvaW50cyBvbiBhIGhvbWUgbG9hbiB0aGlzIHllYXIgZm9yIGVpdGhlciB5b3VyIHByaW1hcnkgcmVzaWRlbmNlIG9yIGEgc2Vjb25kIGhvbWUuIFRoZXNlIGV4cGVuc2VzIG1heSBzaWduaWZpY2FudGx5IHJlZHVjZSB5b3VyIHRheGFibGUgaW5jb21lLCBlbnN1cmluZyBhIGZhdm9yYWJsZSB0YXggb3V0Y29tZSBmb3IgeW91LjwvcD5cclxuXHJcbiAgICA8aDI+UmVxdWlyZWQgRG9jdW1lbnRhdGlvbjwvaDI+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICBcclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPk1vcnRnYWdlIEludGVyZXN0IFN0YXRlbWVudHMgKEZvcm0gMTA5OCk8L3N0cm9uZz46IEZvciBlYWNoIHByb3BlcnR5IHlvdSBvd24uIFRoaXMgaW5jbHVkZXMgeW91ciBwcmltYXJ5IGhvbWUgYW5kIGFueSBzZWNvbmQgaG9tZXMgb3IgcmVudGFsIHByb3BlcnRpZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkhvbWUgRXF1aXR5IExvYW4gSW50ZXJlc3Q8L3N0cm9uZz46IElmIGFwcGxpY2FibGUsIGRvY3VtZW50YXRpb24gZm9yIGludGVyZXN0IHBhaWQgb24gaG9tZSBlcXVpdHkgbG9hbnMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgSW50ZXJlc3QgRXhwZW5zZXM8L3N0cm9uZz46IElmIHlvdSBoYXZlIGluY3VycmVkIGFueSBpbnZlc3RtZW50IGludGVyZXN0IGV4cGVuc2VzLCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCBzdGF0ZW1lbnRzIG9yIGFjY291bnQgc3VtbWFyaWVzIHNob3dpbmcgdGhlIGludGVyZXN0IHBhaWQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlBvaW50cyBQYWlkPC9zdHJvbmc+OiBEb2N1bWVudGF0aW9uIGRldGFpbGluZyBwb2ludHMgcGFpZCBpZiB5b3UgcHVyY2hhc2VkIG9yIHJlZmluYW5jZWQgYSBob21lIHRoaXMgdGF4IHllYXIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkxhdGUgUGF5bWVudCBGZWVzPC9zdHJvbmc+IG9uIE1vcnRnYWdlOiBJZiBhbnksIGRvY3VtZW50YXRpb24gb2YgbGF0ZSBwYXltZW50IGZlZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgaG9tZSBsb2FuKHMpLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybnMgYXJlIHByZXBhcmVkIGFjY3VyYXRlbHkgYW5kIGZpbGVkIG9uIHRpbWUsIHdlIGtpbmRseSBhc2sgdGhhdCB5b3Ugc3VibWl0IHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZS4gSWYgeW91IGZvcmVzZWUgYW55IGRlbGF5cyBvciBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgY29udGFjdCB1cyBpbW1lZGlhdGVseS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgYXBwcmVjaWF0ZSB0aGUgb3Bwb3J0dW5pdHkgdG8gc2VydmUgeW91IGFuZCBhcmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIG9yIGNvbmNlcm5zIHlvdSBtYXkgaGF2ZS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2hhcml0YWJsZSBDb250cmlidXRpb25zXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDaGFyaXRhYmxlIENvbnRyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYCAgICA8cD5BcyBwYXJ0IG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zLCB3ZSBub3RlZCB0aGF0IHlvdSBoYXZlIG1hZGUgY2hhcml0YWJsZSBjb250cmlidXRpb25zIHRoaXMgeWVhci4gVG8gYWNjdXJhdGVseSByZWZsZWN0IHRoZXNlIGNvbnRyaWJ1dGlvbnMgb24geW91ciB0YXggcmV0dXJuLCBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBkZWR1Y3Rpb25zLCB3ZSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxpc3Qgb2YgQ2hhcml0YWJsZSBPcmdhbml6YXRpb25zOjwvc3Ryb25nPiBOYW1lcyBhbmQgYWRkcmVzc2VzIG9mIHRoZSBvcmdhbml6YXRpb25zIHRvIHdoaWNoIHlvdSBoYXZlIGRvbmF0ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db250cmlidXRpb24gRGF0ZXM6PC9zdHJvbmc+IERhdGVzIG9uIHdoaWNoIGVhY2ggZG9uYXRpb24gd2FzIG1hZGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb25hdGlvbiBBbW91bnRzOjwvc3Ryb25nPiBcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkZvciBjYXNoIGRvbmF0aW9ucywgdGhlIGV4YWN0IGFtb3VudCBkb25hdGVkIHRvIGVhY2ggb3JnYW5pemF0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+Rm9yIGRvbmF0aW9ucyBvZiBnb29kcywgYW4gZXN0aW1hdGVkIHZhbHVlIG9mIHRoZSBpdGVtcyBkb25hdGVkIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBEb25hdGlvbjo8L3N0cm9uZz4gXHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5SZWNlaXB0cyBmb3IgY2FzaCBkb25hdGlvbnMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Gb3IgZG9uYXRpb25zIG9mIGdvb2RzLCBhbnkgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gc3VwcG9ydGluZyB0aGUgdmFsdWF0aW9uIGFuZCBjb25kaXRpb24gb2YgdGhlIGl0ZW1zIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QmFuayBzdGF0ZW1lbnRzIG9yIGNhbmNlbGxlZCBjaGVja3MgY2FuIGFsc28gc2VydmUgYXMgcHJvb2YgZm9yIGNhc2ggZG9uYXRpb25zLCBpZiByZWNlaXB0cyBhcmUgbm90IGF2YWlsYWJsZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSA4MjgzOjwvc3Ryb25nPiBJZiBhbnkgc2luZ2xlIGRvbmF0aW9uIG9mIGdvb2RzIGV4Y2VlZHMgJDUwMCBpbiB2YWx1ZSwgcGxlYXNlIGNvbXBsZXRlIFNlY3Rpb24gQSBvZiBGb3JtIDgyODMuIElmIHRoZSB0b3RhbCB2YWx1ZSBvZiBnb29kcyBkb25hdGVkIGV4Y2VlZHMgJDUsMDAwLCBhIHF1YWxpZmllZCBhcHByYWlzYWwgaXMgcmVxdWlyZWQgYW5kIHNob3VsZCBiZSBwcm92aWRlZCBhbG9uZyB3aXRoIFNlY3Rpb24gQiBvZiBGb3JtIDgyODMgY29tcGxldGVkLjwvbGk+XHJcbiAgICA8L29sPlxyXG5cclxuICAgIDxwPkNvcnJlY3QgYW5kIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgY2hhcml0YWJsZSBjb250cmlidXRpb25zIGlzIGNydWNpYWwgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMgYW5kIHRvIG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSwgYWxsb3dpbmcgdXMgdG8gcHJvY2VzcyB5b3VyIHRheCBmb3JtcyBhY2N1cmF0ZWx5IGFuZCBwcm9tcHRseS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEb25hdGVkIFByb3BlcnR5XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEb25hdGVkIFByb3BlcnR5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGluZm9ybWluZyB1cyBhYm91dCB5b3VyIGRvbmF0ZWQgcHJvcGVydHkgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBkb2N1bWVudCBhbmQgY2xhaW0gdGhlc2UgZG9uYXRpb25zIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIGRvbmF0ZWQgcHJvcGVydHkgKGUuZy4sIGZ1cm5pdHVyZSwgY2xvdGhpbmcsIGVsZWN0cm9uaWNzKS48L2xpPlxyXG4gICAgICAgIDxsaT5OYW1lcyBhbmQgYWRkcmVzc2VzIG9mIHRoZSBvcmdhbml6YXRpb25zIHRvIHdoaWNoIHlvdSBkb25hdGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSBkYXRlIG9mIGVhY2ggZG9uYXRpb24uPC9saT5cclxuICAgICAgICA8bGk+VGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhdCB0aGUgdGltZSBvZiB0aGUgZG9uYXRpb24uIElmIHBvc3NpYmxlLCBpbmNsdWRlIGhvdyB5b3UgZGV0ZXJtaW5lZCB0aGlzIHZhbHVlLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBhY2tub3dsZWRnbWVudCBvciByZWNlaXB0IHJlY2VpdmVkIGZyb20gdGhlIG9yZ2FuaXphdGlvbi4gUGxlYXNlIGVuc3VyZSBpdCBpbmNsdWRlcyB0aGUgb3JnYW5pemF0aW9u4oCZcyBuYW1lLCBkb25hdGlvbiBkYXRlLCBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZG9uYXRlZCBpdGVtcy48L2xpPlxyXG4gICAgICAgIDxsaT5JZiBhbnkgc2luZ2xlIGRvbmF0aW9uIGV4Y2VlZGVkICQ1MDAgaW4gdmFsdWUsIHBsZWFzZSBwcm92aWRlIGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIHRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBhbmQgaG93IHRoZSB2YWx1ZSB3YXMgZGV0ZXJtaW5lZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBnYXRoZXIgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2Ugc28gd2UgY2FuIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gYWNjdXJhdGVseSByZWZsZWN0cyB5b3VyIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMuIElmIHlvdSBoYXZlIG11bHRpcGxlIGRvbmF0aW9ucywgb3JnYW5pemluZyB0aGlzIGluZm9ybWF0aW9uIGNocm9ub2xvZ2ljYWxseSBjYW4gYmUgdmVyeSBoZWxwZnVsLjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2UgYXJlIGhlcmUgdG8gaGVscCE8L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRG9uYXRlZCBWZWhpY2xlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEb25hdGVkIFZlaGljbGVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBlZmZvcnRzIGluIHN1cHBvcnRpbmcgY2hhcml0YWJsZSBjYXVzZXMgdGhyb3VnaCB5b3VyIGdlbmVyb3VzIHZlaGljbGUgZG9uYXRpb24uIFRvIGFjY3VyYXRlbHkgZG9jdW1lbnQgdGhpcyBkb25hdGlvbiBmb3IgeW91ciB0YXggcmVjb3JkcyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBkZWR1Y3Rpb24sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5DaGFyaXR5IEluZm9ybWF0aW9uOjwvc3Ryb25nPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPk5hbWUgb2YgdGhlIGNoYXJpdHk8L2xpPlxyXG4gICAgICAgICAgICA8bGk+Q2hhcml0eSdzIHRheC1leGVtcHQgSUQgbnVtYmVyPC9saT5cclxuICAgICAgICAgICAgPGxpPkFkZHJlc3MgYW5kIHBob25lIG51bWJlciBvZiB0aGUgY2hhcml0eTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5WZWhpY2xlIEluZm9ybWF0aW9uOjwvc3Ryb25nPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPk1ha2UsIG1vZGVsLCBhbmQgeWVhciBvZiB0aGUgZG9uYXRlZCB2ZWhpY2xlPC9saT5cclxuICAgICAgICAgICAgPGxpPlZJTiAoVmVoaWNsZSBJZGVudGlmaWNhdGlvbiBOdW1iZXIpPC9saT5cclxuICAgICAgICAgICAgPGxpPkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHZlaGljbGUncyBjb25kaXRpb24gYXQgdGhlIHRpbWUgb2YgZG9uYXRpb248L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RG9uYXRpb24gRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxsaT5BIGNvcHkgb2YgdGhlIGRvbmF0aW9uIHJlY2VpcHQgcHJvdmlkZWQgYnkgdGhlIGNoYXJpdHk8L2xpPlxyXG4gICAgICAgICAgICA8bGk+Rm9ybSAxMDk4LUMgKENvbnRyaWJ1dGlvbnMgb2YgTW90b3IgVmVoaWNsZXMsIEJvYXRzLCBhbmQgQWlycGxhbmVzKSBpZiByZWNlaXZlZDwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5Bbnkgd3JpdHRlbiBhY2tub3dsZWRnbWVudHMgb3IgY29tbXVuaWNhdGlvbnMgZnJvbSB0aGUgY2hhcml0eTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB5b3Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIHNtb290aCBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybnMuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBuZWVkIGFueSBhc3Npc3RhbmNlIG9yIGhhdmUgcXVlc3Rpb25zIHJlZ2FyZGluZyB5b3VyIGRvbmF0aW9uIHJlY29yZHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJPdGhlciBJdGVtaXplZCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiT3RoZXIgSXRlbWl6ZWQgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgbWlnaHQgYmUgYWRkaXRpb25hbCBpbmRpdmlkdWFsLCBub24tYnVzaW5lc3MgZXhwZW5zZXMgeW91J3ZlIGluY3VycmVkIHRoaXMgdGF4IHllYXIsIHdoaWNoIG1heSBxdWFsaWZ5IGZvciBpdGVtaXplZCBkZWR1Y3Rpb25zLiBUbyBlbnN1cmUgd2UgbWF4aW1pemUgeW91ciBkZWR1Y3Rpb25zIGFuZCBhY2N1cmF0ZWx5IGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGF0IHlvdSBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFuZCBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24gZm9yIHRoZXNlIGV4cGVuc2VzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBmaW5kIGJlbG93IGEgZ3VpZGVsaW5lIG9mIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgd2UgYXJlIGxvb2tpbmcgZm9yOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiB0aGUgRXhwZW5zZTogQSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIGV4cGVuc2UsIGluY2x1ZGluZyB0aGUgcHVycG9zZSBhbmQgd2h5IHlvdSBiZWxpZXZlIGl0IHF1YWxpZmllcyBmb3IgYW4gaXRlbWl6ZWQgZGVkdWN0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPkFtb3VudCBQYWlkOiBUaGUgdG90YWwgYW1vdW50IHBhaWQgZm9yIGVhY2ggZXhwZW5zZS48L2xpPlxyXG4gICAgICAgIDxsaT5EYXRlczogVGhlIGRhdGUocykgb24gd2hpY2ggdGhlIGV4cGVuc2Ugd2FzIHBhaWQuPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgUGF5bWVudDogUmVjZWlwdHMsIGJhbmsgc3RhdGVtZW50cywgb3IgY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBzaG93aW5nIHRoZSBwYXltZW50IG9mIHRoZXNlIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPkxlZ2FsIG9yIEZpbmFuY2lhbCBBZHZpc29yIFN0YXRlbWVudHM6IElmIGFwcGxpY2FibGUsIHN0YXRlbWVudHMgb3IgbGV0dGVycyBmcm9tIGxlZ2FsIG9yIGZpbmFuY2lhbCBhZHZpc29ycyBzdXBwb3J0aW5nIHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZSBleHBlbnNlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+RXhhbXBsZXMgb2Ygc3VjaCBleHBlbnNlcyBtaWdodCBpbmNsdWRlIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG86XHJcbiAgICA8dWw+XHJcbiAgICAgICAgPGxpPk1lZGljYWwgZXhwZW5zZXMgbm90IGNvdmVyZWQgYnkgaGVhbHRoIGluc3VyYW5jZTwvbGk+XHJcbiAgICAgICAgPGxpPkludmVzdG1lbnQgYW5kIGZpbmFuY2lhbCBhZHZpc29yIGZlZXM8L2xpPlxyXG4gICAgICAgIDxsaT5UYXggcHJlcGFyYXRpb24gZmVlczwvbGk+XHJcbiAgICAgICAgPGxpPlNhZmUgZGVwb3NpdCBib3ggcmVudGFsczwvbGk+XHJcbiAgICA8L3VsPjwvcD5cclxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSByZWNlaXZlIHRoaXMgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGhlIHRpbWVseSBhbmQgZWZmaWNpZW50IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHF1YWxpZmllcyBhcyBhbiBvdGhlciBpdGVtaXplZCBleHBlbnNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNoaWxkIERlcGVuZGVudCBDYXJlIENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2hpbGQgRGVwZW5kZW50IENhcmUgQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGNvbmZpcm1pbmcgdGhhdCB5b3UgcGFpZCBmb3IgZGVwZW5kZW50IGNhcmUgc2VydmljZXMgbGFzdCB5ZWFyIHRvIGVuYWJsZSB5b3UgdG8gd29yayBvciBzZWFyY2ggZm9yIGVtcGxveW1lbnQuIFRvIGFjY3VyYXRlbHkgY2xhaW0gdGhlIDxzdHJvbmc+Q2hpbGQgYW5kIERlcGVuZGVudCBDYXJlIENyZWRpdDwvc3Ryb25nPiBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIGZ1bGwgbmFtZShzKSBhbmQgc29jaWFsIHNlY3VyaXR5IG51bWJlcihzKSAoU1NOKSBvZiB0aGUgZGVwZW5kZW50KHMpIGNhcmVkIGZvci48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHBhaWQgZm9yIGVhY2ggZGVwZW5kZW504oCZcyBjYXJlIHNlcnZpY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPk5hbWUsIGFkZHJlc3MsIGFuZCBUYXhwYXllciBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKEVJTiBvciBTU04pIG9mIHRoZSBjYXJlIHByb3ZpZGVyKHMpLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIHBheW1lbnQocykgbWFkZSB0byB0aGUgY2FyZWdpdmVyKHMpLCBzdWNoIGFzIHJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT5JZiB0aGUgZGVwZW5kZW50IGlzIGEgZGlzYWJsZWQgYWR1bHQsIHBsZWFzZSBwcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlaXIgY29uZGl0aW9uIHRvIGNvbmZpcm0gZWxpZ2liaWxpdHkuPC9saT5cclxuICAgICAgICA8bGk+QW55IGFwcGxpY2FibGUgZGF0ZXMgZHVyaW5nIHdoaWNoIHRoZSBjYXJlIHdhcyBwcm92aWRlZCwgZXNwZWNpYWxseSBpZiB0aGUgY2FyZSB3YXMgbm90IGZvciB0aGUgZnVsbCB5ZWFyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIHRvIGVuc3VyZSB3ZSBjYW4gbWF4aW1pemUgeW91ciBlbGlnaWJsZSBjcmVkaXQgYW5kIGNvbXBseSB3aXRoIHRoZSBJUlMgcmVxdWlyZW1lbnRzLiBTaG91bGQgeW91IGhhdmUgY29uY2VybnMgYWJvdXQgZ2F0aGVyaW5nIGFueSBvZiB0aGUgcmVxdWVzdGVkIGRvY3VtZW50YXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgZm9yIGFzc2lzdGFuY2UuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBXZSBhcmUgaGVyZSB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2VzcyB0byBhY2hpZXZlIHRoZSBiZXN0IHBvc3NpYmxlIG91dGNvbWUgb24geW91ciB0YXggcmV0dXJuLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDaGlsZCBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDaGlsZCBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZXhhbWluaW5nIHlvdXIgZWxpZ2liaWxpdHkgZm9yIHRoZSA8c3Ryb25nPkNoaWxkIFRheCBDcmVkaXQ8L3N0cm9uZz4sIGJhc2VkIG9uIHlvdXIgYWZmaXJtYXRpdmUgcmVzcG9uc2UgcmVnYXJkaW5nIGRlcGVuZGVudHMgdW5kZXIgdGhlIGFnZSBvZiAxNy4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBtYXhpbWl6ZWQgdGF4IGJlbmVmaXRzLCBraW5kbHkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5GdWxsIG5hbWUocykgb2YgdGhlIGNoaWxkIG9yIGNoaWxkcmVuLjwvbGk+XHJcbiAgICAgICAgPGxpPkRhdGUocykgb2YgYmlydGggZm9yIGVhY2ggY2hpbGQuPC9saT5cclxuICAgICAgICA8bGk+U29jaWFsIFNlY3VyaXR5IE51bWJlcihzKSBmb3IgZWFjaCBjaGlsZC48L2xpPlxyXG4gICAgICAgIDxsaT5BIHN0YXRlbWVudCBjb25maXJtaW5nIHRoZSBjaGlsZCBvciBjaGlsZHJlbiBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGxhc3QgeWVhci4gSWYgYXBwbGljYWJsZSwgcGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvZiBjdXN0b2R5IGFycmFuZ2VtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIG92ZXJ2aWV3IG9mIGhvdyB5b3UgcHJvdmlkZWQgbW9yZSB0aGFuIGhhbGYgb2YgdGhlaXIgZmluYW5jaWFsIHN1cHBvcnQgbGFzdCB5ZWFyLiBUaGlzIGNhbiBpbmNsdWRlIHJlY29yZHMgb2YgaG91c2luZywgZm9vZCwgZWR1Y2F0aW9uLCBtZWRpY2FsIGNhcmUsIGFuZCBvdGhlciByZWxldmFudCBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT5Db3B5IG9mIHlvdXIgbGFzdCB5ZWFyJ3MgdGF4IHJldHVybiwgaWYgbm90IGFscmVhZHkgcHJvdmlkZWQsIHRvIGFzc2lzdCBpbiBldmFsdWF0aW5nIGVsaWdpYmlsaXR5IGFuZCBwb3RlbnRpYWwgcGhhc2Utb3V0cyBiYXNlZCBvbiBpbmNvbWUuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLiBZb3VyIHByb21wdCByZXNwb25zZSB3aWxsIGFpZCBpbiB0aGUgc3dpZnQgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSB0aGF0IHlvdSByZWNlaXZlIGFsbCBlbGlnaWJsZSB0YXggYmVuZWZpdHMuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UgYXJlIGhlcmUgdG8gaGVscCE8L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQWRkaXRpb25hbCBDaGlsZCBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IG1heSBxdWFsaWZ5IGZvciB0aGUgPHN0cm9uZz5BZGRpdGlvbmFsIENoaWxkIFRheCBDcmVkaXQ8L3N0cm9uZz4gYmFzZWQgb24geW91ciBwcmVsaW1pbmFyeSBpbmZvcm1hdGlvbi4gVG8gZW5zdXJlIHdlIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB5b3VyIGVsaWdpYmlsaXR5IGFuZCBwb3RlbnRpYWxseSBtYXhpbWl6ZSB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUXVhbGlmeWluZyBDaGlsZHJlbjo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlIFNvY2lhbCBTZWN1cml0eSBjYXJkcyBhbmQgYmlydGggY2VydGlmaWNhdGVzIGZvciBlYWNoIG9mIHlvdXIgcXVhbGlmeWluZyBjaGlsZHJlbiB1bmRlciB0aGUgYWdlIG9mIDE3LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkluY29tZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBGdXJuaXNoIGFsbCBXLTIgZm9ybXMsIDEwOTkgZm9ybXMsIGFuZCBhbnkgb3RoZXIgcHJvb2Ygb2YgaW5jb21lIHRvIGNvbmZpcm0geW91IGhhdmUgZWFybmVkIGF0IGxlYXN0ICQyLDUwMC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFy4oCZcyBUYXggUmV0dXJuOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuIHRvIHZlcmlmeSB0aGUgQ2hpbGQgVGF4IENyZWRpdCBhbW91bnQgeW91IHJlY2VpdmVkIG9yIHdlcmUgZWxpZ2libGUgdG8gcmVjZWl2ZS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JUlMgTGV0dGVyIDY0MTk6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgdGhlIElSUyBMZXR0ZXIgNjQxOSBmb3IgdGhlIHRheCB5ZWFyIHJlZ2FyZGluZyB0aGUgYWR2YW5jZSBDaGlsZCBUYXggQ3JlZGl0IHBheW1lbnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VG8gZmFjaWxpdGF0ZSBhIHNtb290aCBwcm9jZXNzLCB3ZSBraW5kbHkgYXNrIHlvdSB0byBzZW5kIHRoZSBhYm92ZSBhcyBzb29uIGFzIHBvc3NpYmxlLCBlbnN1cmluZyBhbGwgc3VibWlzc2lvbnMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBhcmUgY29tbWl0dGVkIHRvIHNlcnZpbmcgeW91ciB0YXggcHJlcGFyYXRpb24gbmVlZHMgZWZmaWNpZW50bHkgYW5kIHNlY3VyaW5nIHRoZSBiZXN0IHBvc3NpYmxlIG91dGNvbWUgZm9yIHlvdSBhbmQgeW91ciBmYW1pbHkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNyZWRpdCBmb3IgT3RoZXIgRGVwZW5kZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ3JlZGl0IGZvciBPdGhlciBEZXBlbmRlbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RpY2VkIHlvdSBpbmRpY2F0ZWQgaGF2aW5nIGRlcGVuZGVudHMgdGhhdCBtYXkgcXVhbGlmeSBmb3IgdGhlIDxzdHJvbmc+Q3JlZGl0IGZvciBPdGhlciBEZXBlbmRlbnRzPC9zdHJvbmc+LiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgZGVwZW5kZW50cy48L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5GdWxsIG5hbWUgb2YgZWFjaCBkZXBlbmRlbnQuPC9saT5cclxuICAgICAgPGxpPlRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UgKGUuZy4sIHBhcmVudCwgc2libGluZywgYWR1bHQgY2hpbGQsIG9yIG90aGVyKS48L2xpPlxyXG4gICAgICA8bGk+VGhlaXIgU29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKSBvciBJbmRpdmlkdWFsIFRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoSVRJTikuPC9saT5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiB0aGF0IHRoZXkgbGl2ZWQgd2l0aCB5b3UgZm9yIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSB0YXggeWVhci4gUGxlYXNlIHByb3ZpZGUgYW55IHJlbGV2YW50IGRldGFpbHMgb3IgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBzdXBwb3J0IHRoaXMgY2xhaW0gKGlmIGF2YWlsYWJsZSkuPC9saT5cclxuICAgICAgPGxpPkRldGFpbGVkIGxpc3Qgb2YgdGhlIGZpbmFuY2lhbCBzdXBwb3J0IHlvdSBwcm92aWRlZC4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBmb29kLCBzaGVsdGVyLCBjbG90aGluZywgbWVkaWNhbCBjYXJlLCBlZHVjYXRpb24sIGFuZCB0cmFuc3BvcnRhdGlvbiBjb3N0cy48L2xpPlxyXG4gICAgICA8bGk+QW55IGluY29tZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkZXBlbmRlbnQuIFRoaXMgaW5jbHVkZXMgaW5jb21lIHN0YXRlbWVudHMgb3IgYW4gYWZmaXJtYXRpb24gdGhhdCB0aGV5IGhhZCBubyBpbmNvbWUuPC9saT5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiB0aGF0IHRoZXkgYXJlIGEgVS5TLiBjaXRpemVuLCBVLlMuIG5hdGlvbmFsLCBvciBhIHJlc2lkZW50IGFsaWVuIG9mIHRoZSBVbml0ZWQgU3RhdGVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHNlbmQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB3ZSBjYW4gcHJvY2VlZCB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uIHdpdGhvdXQgZGVsYXkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+IFxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlJ3JlIGhlcmUgdG8gaGVscCBtYWtlIHlvdXIgdGF4IGZpbGluZyBwcm9jZXNzIGFzIHNtb290aCBhbmQgZWZmaWNpZW50IGFzIHBvc3NpYmxlLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZG9wdGlvbiBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFkb3B0aW9uIENyZWRpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgaGF2aW5nIGV4cGVuc2VzIHJlbGF0ZWQgdG8gYWRvcHRpbmcgYSBjaGlsZCBsYXN0IHllYXIuIFRvIGFjY3VyYXRlbHkgY2xhaW0gdGhlIEFkb3B0aW9uIENyZWRpdCBvbiB5b3VyIHRheCByZXR1cm5zLCB3ZSByZXF1aXJlIHNwZWNpZmljIGRvY3VtZW50YXRpb24uPC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+RmluYWxpemVkIEFkb3B0aW9uIERlY3JlZSBvciBDZXJ0aWZpY2F0ZS48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlsZWQgTGVnYWwgRmVlcyBJbnZvaWNlIChpbmNsdWRpbmcgdGhlIGF0dG9ybmV54oCZcyBuYW1lLCBhZGRyZXNzLCBhbmQgdGhlIGRhdGUgb2Ygc2VydmljZSkuPC9saT5cclxuICAgICAgPGxpPkNvdXJ0IENvc3RzIFJlY2VpcHRzLjwvbGk+XHJcbiAgICAgIDxsaT5UcmF2ZWwgRXhwZW5zZXMgUmVjZWlwdHMgKGFpcmZhcmUsIGhvdGVsLCBtZWFscykgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYWRvcHRpb24gcHJvY2Vzcy48L2xpPlxyXG4gICAgICA8bGk+QW55IHJlbGV2YW50IGRvY3VtZW50cyBmb3IgYSBjaGlsZCB3aXRoIHNwZWNpYWwgbmVlZHMsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgPGxpPkZvcmVpZ24gYWRvcHRpb246IFByb3ZpZGUgdGhlIGNvdW50cnkncyBsZWdhbCBkb2N1bWVudGF0aW9uIHByb3ZpbmcgdGhlIGFkb3B0aW9uIHdhcyBmaW5hbGl6ZWQuPC9saT5cclxuICAgICAgPGxpPklSUyBGb3JtIDg4MzksIFF1YWxpZmllZCBBZG9wdGlvbiBFeHBlbnNlcyAoaWYgeW91IGhhdmUgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gY29tcGxldGUgdGhpcykuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBwcm92aWRlZCBkb2N1bWVudHMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlLiBJbmNvbXBsZXRlIG9yIHVuY2xlYXIgZG9jdW1lbnRhdGlvbiBtYXkgZGVsYXkgdGhlIHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCB0aGUgcG90ZW50aWFsIGNyZWRpdC48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCB0byBwcm92aWRlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gT3VyIGdvYWwgaXMgdG8gYXNzaXN0IHlvdSBpbiBtYXhpbWl6aW5nIHlvdXIgYmVuZWZpdHMgd2hpbGUgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQW1lcmljYW4gT3Bwb3J0dW5pdHkgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQW1lcmljYW4gT3Bwb3J0dW5pdHkgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QmFzZWQgb24geW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSByZWdhcmRpbmcgZXhwZW5zZXMgcGFpZCBsYXN0IHllYXIgZm9yIGNvbGxlZ2UsIHdlIG1heSBiZSBhYmxlIHRvIGNsYWltIHRoZSBBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IChBT1RDKSBvbiB5b3VyIGJlaGFsZi4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCByZXR1cm5zIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIEFPVEMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPlR1aXRpb24gU3RhdGVtZW50czwvc3Ryb25nPiAoRm9ybSAxMDk4LVQpIGZvciBlYWNoIHN0dWRlbnQgZm9yIHdob20gdGhlIGV4cGVuc2VzIHdlcmUgcGFpZC4gVGhpcyBmb3JtIGlzIHR5cGljYWxseSBwcm92aWRlZCBieSB0aGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24uPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVjZWlwdHMgYW5kIFJlY29yZHM8L3N0cm9uZz4gZm9yIHJlbGF0ZWQgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgbm90IGNvdmVyZWQgYnkgdGhlIHR1aXRpb24gc3RhdGVtZW50LiBUaGlzIGluY2x1ZGVzIGJvb2tzLCBzdXBwbGllcywgYW5kIGVxdWlwbWVudCByZXF1aXJlZCBmb3IgZW5yb2xsbWVudCBvciBhdHRlbmRhbmNlLjwvbGk+XHJcbiAgICAgIDxsaT5Db25maXJtYXRpb24gdGhhdCB0aGUgc3R1ZGVudCB3YXMgZW5yb2xsZWQgPHN0cm9uZz5hdCBsZWFzdCBoYWxmLXRpbWU8L3N0cm9uZz4gaW4gYSBwcm9ncmFtIGxlYWRpbmcgdG8gYSBkZWdyZWUsIGNlcnRpZmljYXRlLCBvciBvdGhlciByZWNvZ25pemVkIGVkdWNhdGlvbmFsIGNyZWRlbnRpYWwuPC9saT5cclxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50IGNvbmZpcm1pbmcgdGhhdCB0aGUgZXhwZW5zZXMgd2VyZSBmb3IgdGhlIDxzdHJvbmc+Zmlyc3QgZm91ciB5ZWFyczwvc3Ryb25nPiBvZiBwb3N0LXNlY29uZGFyeSBlZHVjYXRpb24uPC9saT5cclxuICAgICAgPGxpPkV2aWRlbmNlIHRvIHNob3cgdGhhdCB0aGUgc3R1ZGVudCBoYWQgbm90IGNsYWltZWQgdGhlIEFPVEMgKG9yIHRoZSBmb3JtZXIgSG9wZSBjcmVkaXQpIGZvciBtb3JlIHRoYW4gZm91ciB0YXggeWVhcnMuPC9saT5cclxuICAgICAgPGxpPlByb29mIHRoYXQgbmVpdGhlciB0aGUgc3R1ZGVudCBub3IgdGhlIGNsYWltYW50IChpZiBub3QgdGhlIHN0dWRlbnQpIGlzIGEgbm9ucmVzaWRlbnQgYWxpZW4gZm9yIHRheCBwdXJwb3Nlcy48L2xpPlxyXG4gICAgICA8bGk+QSBzdGF0ZW1lbnQgaW5kaWNhdGluZyBpZiBhbnkgZmVsb255IGRydWcgY29udmljdGlvbnMgd2VyZSByZWNlaXZlZCBieSB0aGUgc3R1ZGVudCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIGlzIGVzc2VudGlhbCBhcyBzdWNoIGNvbnZpY3Rpb25zIGRpc3F1YWxpZnkgdGhlIHN0dWRlbnQgZnJvbSBjbGFpbWluZyB0aGUgQU9UQy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBnYXRoZXIgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIE9uY2Ugd2UgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiwgd2Ugd2lsbCBwcm9jZWVkIHdpdGggdGhlIG1heGltaXphdGlvbiBhbmQgYXBwbGljYXRpb24gb2YgdGhlIEFtZXJpY2FuIE9wcG9ydHVuaXR5IFRheCBDcmVkaXQgdG8geW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTGlmZXRpbWUgTGVhcm5pbmcgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTGlmZXRpbWUgTGVhcm5pbmcgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91LCB5b3VyIHNwb3VzZSwgb3IgeW91ciBkZXBlbmRlbnRzIGhhdmUgcGFpZCBmb3IgaGlnaGVyIGVkdWNhdGlvbiBsYXN0IHllYXIuIFRoaXMgbWFrZXMgeW91IHBvdGVudGlhbGx5IGVsaWdpYmxlIGZvciB0aGUgTGlmZXRpbWUgTGVhcm5pbmcgVGF4IENyZWRpdCwgd2hpY2ggY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgdGF4IHNhdmluZ3MuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHlvdXIgZWxpZ2liaWxpdHkgYW5kIGNhbGN1bGF0ZSB0aGUgY3JlZGl0LCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkZvcm0gMTA5OC1UIGZyb20gZWFjaCBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiBhdHRlbmRlZCBieSB5b3UsIHlvdXIgc3BvdXNlLCBvciBkZXBlbmRlbnRzLiBUaGlzIGZvcm0gc2hvd3MgdGhlIGFtb3VudHMgcGFpZCBmb3IgdHVpdGlvbiBhbmQgcmVsYXRlZCBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT5SZWNlaXB0cyBvciBiYW5rIHN0YXRlbWVudHMgc2hvd2luZyBwYXltZW50cyBtYWRlIGZvciB0dWl0aW9uLCBmZWVzLCBib29rcywgc3VwcGxpZXMsIGFuZCBlcXVpcG1lbnQgcmVxdWlyZWQgZm9yIHlvdXIgY291cnNlcy4gUGxlYXNlIG5vdGUgdGhhdCByb29tIGFuZCBib2FyZCwgaW5zdXJhbmNlLCBtZWRpY2FsIGV4cGVuc2VzLCBhbmQgdHJhbnNwb3J0YXRpb24gYXJlIG5vdCBxdWFsaWZpZWQgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGFueSBzY2hvbGFyc2hpcHMsIGdyYW50cywgb3Igb3RoZXIgdGF4LWZyZWUgZWR1Y2F0aW9uYWwgYXNzaXN0YW5jZSByZWNlaXZlZC4gVGhpcyBoZWxwcyB1cyBkZXRlcm1pbmUgdGhlIG5ldCBhbW91bnQgb2YgcXVhbGlmaWVkIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGFueSByZWNvcmRzIG9mIGZlbG9uaWVzIChhcyBpbmRpdmlkdWFscyB3aXRoIGZlbG9ueSBkcnVnIGNvbnZpY3Rpb25zIGFyZSBub3QgZWxpZ2libGUgZm9yIHRoaXMgY3JlZGl0KS48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IG9mIGV4cGVuc2VzIHBhaWQgd2l0aCBkaXN0cmlidXRlZCBlYXJuaW5ncyBmcm9tIGEgNTI5IHBsYW4sIGlmIGFueS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGFzIGl0IG1heSBhZmZlY3QgdGhlIGNyZWRpdCBjYWxjdWxhdGlvbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGZvciB0aGUgdGF4IHllYXIgd2UgYXJlIHByZXBhcmluZyB5b3VyIHJldHVybiBmb3IuIEdhdGhlcmluZyBhbmQgdmVyaWZ5aW5nIHRoZXNlIGRvY3VtZW50cyBlYXJseSBpbiB0aGUgcHJvY2VzcyB3aWxsIHN0cmVhbWxpbmUgeW91ciB0YXggcHJlcGFyYXRpb24gYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgbWF4aW11bSBiZW5lZml0IGxlZ2FsbHkgYXZhaWxhYmxlIHRvIHlvdS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpbGwgZ3JlYXRseSBhaWQgaW4gdGhlIGVmZmljaWVudCBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWFybmVkIEluY29tZSBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFYXJuZWQgSW5jb21lIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkJhc2VkIG9uIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSBlYXJuZWQgbW9uZXkgZnJvbSB3b3JrIGFuZCBoYXZlIGEgcmVsYXRpdmVseSBsb3cgdG8gbW9kZXJhdGUgaW5jb21lIGxhc3QgeWVhciwgeW91IG1heSBiZSBlbGlnaWJsZSBmb3IgdGhlIEVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdCAoRUlUQykuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgRUlUQyBjbGFpbSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBFYXJuZWQgSW5jb21lOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgVy0yIGZvcm1zIGlmIHlvdSB3ZXJlIGVtcGxveWVkIGJ5IHNvbWVvbmUgZWxzZSwgb3IgYSBzdW1tYXJ5IG9mIGluY29tZSBhbmQgZXhwZW5zZXMgaWYgeW91IHdlcmUgc2VsZi1lbXBsb3llZCBvciByYW4gYSBidXNpbmVzcyBvciBmYXJtLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKTo8L3N0cm9uZz4gQ29waWVzIG9mIFNvY2lhbCBTZWN1cml0eSBjYXJkcyBmb3IgeW91LCB5b3VyIHNwb3VzZSAoaWYgZmlsaW5nIGpvaW50bHkpLCBhbmQgYW55IGRlcGVuZGVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZXNpZGVuY3k6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gdGhhdCB5b3VyIGNoaWxkKHJlbikgbGl2ZWQgd2l0aCB5b3UgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgZm9yIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSB0YXggeWVhciwgaWYgYXBwbGljYWJsZS4gVGhpcyBjYW4gaW5jbHVkZSBzY2hvb2wgcmVjb3JkcywgbWVkaWNhbCByZWNvcmRzLCBvciBhIHNpZ25lZCBsZXR0ZXIgZnJvbSBhIGxhbmRsb3JkIG9yIGFub3RoZXIgdGhpcmQgcGFydHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IEluY29tZSBTdGF0ZW1lbnQ6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHBsZWFzZSBwcm92aWRlIGEgc3RhdGVtZW50IG9mIGFueSBpbnZlc3RtZW50IGluY29tZSB5b3UgcmVjZWl2ZWQsIGFzIHRoaXMgY2FuIGFmZmVjdCBFSVRDIGVsaWdpYmlsaXR5LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmlsaW5nIFN0YXR1cyBWZXJpZmljYXRpb246PC9zdHJvbmc+IENvbmZpcm0geW91ciBmaWxpbmcgc3RhdHVzIHRvIGVuc3VyZSBwcm9wZXIgRUlUQyBjYWxjdWxhdGlvbi4gVGhpcyBjb3VsZCBiZSBTaW5nbGUsIE1hcnJpZWQgRmlsaW5nIEpvaW50bHksIEhlYWQgb2YgSG91c2Vob2xkLCBldGMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFRheCBSZXR1cm46PC9zdHJvbmc+IElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCB5ZWFyIHlvdSBhcmUgY2xhaW1pbmcgRUlUQyBvciBpZiB5b3Ugd2VyZSBlbGlnaWJsZSBmb3IgRUlUQyBpbiB0aGUgcHJldmlvdXMgdGF4IHllYXIsIHBsZWFzZSBwcm92aWRlIGEgY29weSBvZiB5b3VyIGxhc3QgeWVhcidzIHRheCByZXR1cm4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXJseSBsZWdpYmxlIGFuZCBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCBFSVRDIGNsYWltLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmV0aXJlbWVudCBTYXZpbmdzIENvbnRyaWJ1dGlvbiBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJldGlyZW1lbnQgU2F2aW5ncyBDb250cmlidXRpb24gQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RpY2VkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBjb250cmlidXRpbmcgdG8gYSByZXRpcmVtZW50IHBsYW4gaW4gdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgXCJSZXRpcmVtZW50IFNhdmluZ3MgQ29udHJpYnV0aW9uIENyZWRpdCxcIiB3ZSByZXF1aXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGNvbnRyaWJ1dGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIHRoZSByZXRpcmVtZW50IHBsYW5zIHlvdSd2ZSBjb250cmlidXRlZCB0byAoZS5nLiwgSVJBLCA0MDEoayksIGV0Yy4pOjwvbGk+XHJcbiAgICAgIDx1bD5cclxuICAgICAgICA8bGk+TmFtZSBvZiB0aGUgcGxhbihzKTwvbGk+XHJcbiAgICAgICAgPGxpPlR5cGUgb2YgcGxhbihzKTwvbGk+XHJcbiAgICAgICAgPGxpPkNvbnRyaWJ1dGVkIGFtb3VudCB0byBlYWNoIHBsYW48L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgICA8bGk+WW91ciBmaWxpbmcgc3RhdHVzIChTaW5nbGUsIE1hcnJpZWQgRmlsaW5nIEpvaW50bHksIGV0Yy4pPC9saT5cclxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgKGUuZy4sIGFjY291bnQgc3RhdGVtZW50cywgRm9ybSA1NDk4LCB0cmFuc2FjdGlvbiBzdW1tYXJpZXMpPC9saT5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiBvZiB5b3VyIGFnZSwgdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5PC9saT5cclxuICAgICAgPGxpPkFueSBub3RpY2VzIG9yIHN0YXRlbWVudHMgZnJvbSB0aGUgcGxhbiBhZG1pbmlzdHJhdG9yIHJlZ2FyZGluZyBub24tZGVkdWN0aWJsZSBjb250cmlidXRpb25zPC9saT5cclxuICAgICAgPGxpPkZvciBtYXJyaWVkIGZpbGluZyBqb2ludGx5LCBzaW1pbGFyIGRldGFpbHMgZm9yIHlvdXIgc3BvdXNl4oCZcyBjb250cmlidXRpb25zLCBpZiBhcHBsaWNhYmxlPC9saT5cclxuICAgIDwvb2w+ICBcclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhlIGluZm9ybWF0aW9uIGlzIHN1Ym1pdHRlZCBpbiBhIHRpbWVseSBtYW5uZXIgdG8gZmFjaWxpdGF0ZSBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRldGFpbHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD4gXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRXhjZXNzIFNvY2lhbCBTZWN1cml0eSBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5Zb3VyIHJlc3BvbnNlIGluZGljYXRlcyB0aGF0IGxhc3QgeWVhciwgeW91IHdvcmtlZCBmb3IgdHdvIG9yIG1vcmUgZW1wbG95ZXJzIGFuZCBoYWQgYSB0b3RhbCBhbW91bnQgb2YgU29jaWFsIFNlY3VyaXR5IHRheGVzIHdpdGhoZWxkIGZyb20geW91ciBwYXljaGVja3MgdGhhdCBleGNlZWRlZCB0aGUgbGltaXQgZm9yIHRoZSB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIHBvdGVudGlhbCBFeGNlc3MgU29jaWFsIFNlY3VyaXR5IENyZWRpdCBhbmQgZW5zdXJlIHByb3BlciBhZGp1c3RtZW50IG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlctMiBGb3JtcyBmcm9tIEFsbCBFbXBsb3llcnM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGNvcGllcyBvZiBXLTIgZm9ybXMgZnJvbSBhbGwgeW91ciBlbXBsb3llcnMgZm9yIHRoZSB0YXggeWVhciBpbiBxdWVzdGlvbi4gVGhpcyBpcyB2aXRhbCB0byBjYWxjdWxhdGUgdGhlIGV4YWN0IGFtb3VudCBvZiBTb2NpYWwgU2VjdXJpdHkgdGF4IHdpdGhoZWxkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgUGF5IFN0dWJzOjwvc3Ryb25nPiBJZiBwb3NzaWJsZSwgaW5jbHVkZSB5b3VyIGZpbmFsIHBheSBzdHVicyBvZiB0aGUgeWVhciBmcm9tIGVhY2ggZW1wbG95ZXIuIFRoaXMgY2FuIGhlbHAgdmVyaWZ5IHRoZSB0b3RhbCBlYXJuaW5ncyBhbmQgdGhlIGFtb3VudCBvZiBTb2NpYWwgU2VjdXJpdHkgdGF4IHdpdGhoZWxkLCBlc3BlY2lhbGx5IGlmIGFueSBkaXNjcmVwYW5jaWVzIGFyaXNlIHdpdGggdGhlIFctMiBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBFbnN1cmUgeW91ciBmdWxsIG5hbWUsIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTiksIGFuZCBjdXJyZW50IGFkZHJlc3MgYXJlIGNvcnJlY3QgYW5kIHVwZGF0ZWQgZm9yIGFjY3VyYXRlIGZpbGluZy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbmZpcm1hdGlvbiBMZXR0ZXIgKElmIEF2YWlsYWJsZSk6PC9zdHJvbmc+IElmIHlvdSd2ZSByZWNlaXZlZCBhbnkgY29uZmlybWF0aW9uIGZyb20gdGhlIElSUyBvciB5b3VyIGVtcGxveWVycyByZWdhcmRpbmcgZXhjZXNzIFNvY2lhbCBTZWN1cml0eSBjb250cmlidXRpb25zLCBwbGVhc2UgaW5jbHVkZSB0aGVzZSBjb21tdW5pY2F0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjb21wbGV0aW5nIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSBhbnkgcmVmdW5kIG9mIGV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgdGF4ZXMgcGFpZC4gUGxlYXNlIHNlbmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgdG8gdXMuIFlvdXIgcHJvbXB0IGNvb3BlcmF0aW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZmFjaWxpdGF0ZSBhIHNtb290aCB0YXggZmlsaW5nIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlByZW1pdW0gVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUHJlbWl1bSBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSBvciBhIGZhbWlseSBtZW1iZXIgZW5yb2xsZWQgaW4gYSBoZWFsdGggaW5zdXJhbmNlIHBsYW4gdGhyb3VnaCB0aGUgTWFya2V0cGxhY2UgbGFzdCB5ZWFyLiBUaGlzIG1heSBtYWtlIHlvdSBlbGlnaWJsZSBmb3IgdGhlIFByZW1pdW0gVGF4IENyZWRpdCwgd2hpY2ggY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgc2F2aW5ncyBvbiB5b3VyIHRheCBiaWxsLjwvcD5cclxuICAgIDxwPlRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgUHJlbWl1bSBUYXggQ3JlZGl0IGFuZCBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvcnJlY3RseSBmaWxlZCwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGU6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5NS1BLCBIZWFsdGggSW5zdXJhbmNlIE1hcmtldHBsYWNlIFN0YXRlbWVudDwvc3Ryb25nPjogVGhpcyBmb3JtIGlzIGNydWNpYWwgYXMgaXQgcHJvdmlkZXMgZGV0YWlscyBvZiB0aGUgaGVhbHRoIGNvdmVyYWdlLCBpbmNsdWRpbmcgdGhlIG1vbnRocyBvZiBjb3ZlcmFnZSBhbmQgdGhlIGFtb3VudCBvZiBwcmVtaXVtIHBhaWQuIElmIHlvdSBvciBhbnkgZmFtaWx5IG1lbWJlciB3YXMgZW5yb2xsZWQgaW4gZGlmZmVyZW50IHBsYW5zLCBwbGVhc2UgcHJvdmlkZSBhIEZvcm0gMTA5NS1BIGZvciBlYWNoIHBsYW4uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgSW5mb3JtYXRpb248L3N0cm9uZz46IFBsZWFzZSBwcm92aWRlIGFsbCBzb3VyY2VzIG9mIGluY29tZSB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIGhvdXNlaG9sZCBpbmNvbWUuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgVy0yIGZvcm1zLCAxMDk5IGZvcm1zLCBhbmQgYW55IG90aGVyIGRvY3VtZW50YXRpb24gZGVtb25zdHJhdGluZyBpbmNvbWUgcmVjZWl2ZWQgdGhyb3VnaG91dCB0aGUgeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZhbWlseSBTaXplIGFuZCBIb3VzZWhvbGQgSW5mb3JtYXRpb248L3N0cm9uZz46IENvbmZpcm0gdGhlIG51bWJlciBvZiBkZXBlbmRlbnRzIGFuZCBhbnkgY2hhbmdlcyBpbiB5b3VyIGhvdXNlaG9sZCBsYXN0IHllYXIsIGFzIHRoaXMgY291bGQgYWZmZWN0IHlvdXIgZWxpZ2liaWxpdHkgYW5kIHRoZSBhbW91bnQgb2YgdGhlIGNyZWRpdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFkdmFuY2VkIFByZW1pdW0gVGF4IENyZWRpdCAoQVBUQykgUmVwYXltZW50IEluZm9ybWF0aW9uPC9zdHJvbmc+LCBpZiBhcHBsaWNhYmxlOiBJZiB5b3UgcmVjZWl2ZWQgYW4gYWR2YW5jZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtIHRheCBjcmVkaXQsIHdlIG5lZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIHBheW1lbnRzIHRvIHJlY29uY2lsZSB0aGUgYW1vdW50IG9uIHlvdXIgcmV0dXJuLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIGFzIHNvb24gYXMgcG9zc2libGUgdG8gYXZvaWQgYW55IGRlbGF5cyBpbiBwcm9jZXNzaW5nIHlvdXIgdGF4IHJldHVybi4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IG91ciBvZmZpY2UuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBzZXJ2aW5nIHlvdSBhbmQgZW5zdXJpbmcgeW91IHJlY2VpdmUgYWxsIHRoZSB0YXggYmVuZWZpdHMgeW91IGFyZSBlbnRpdGxlZCB0by48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTmV0IEludmVzdG1lbnQgSW5jb21lIFRheFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTmV0IEludmVzdG1lbnQgSW5jb21lIFRheFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3VyIGluY29tZSB0aGlzIHllYXIgaW5jbHVkZXMgc2lnbmlmaWNhbnQgYW1vdW50cyBmcm9tIGludmVzdG1lbnRzLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIE5ldCBJbnZlc3RtZW50IEluY29tZSBUYXgsIGl0IGlzIGVzc2VudGlhbCB0aGF0IHdlIGdhdGhlciBjb21wcmVoZW5zaXZlIGRldGFpbHMgcmVnYXJkaW5nIHlvdXIgaW52ZXN0bWVudCBpbmNvbWUuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbiBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5JbnRlcmVzdCBJbmNvbWUgU3RhdGVtZW50czo8L3N0cm9uZz4gRG9jdW1lbnRzIHN1Y2ggYXMgMTA5OS1JTlQgb3Igc2ltaWxhciBmb3JtcyBzaG93aW5nIGludGVyZXN0IGVhcm5lZC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGl2aWRlbmQgSW5jb21lIFN0YXRlbWVudHM6PC9zdHJvbmc+IERvY3VtZW50cyBzdWNoIGFzIDEwOTktRElWIG9yIHNpbWlsYXIgZm9ybXMgZGV0YWlsaW5nIGRpdmlkZW5kIGluY29tZSByZWNlaXZlZC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+Q2FwaXRhbCBHYWlucyBSZWNvcmRzOjwvc3Ryb25nPiBTYWxlcyByZWNlaXB0cyBvciBicm9rZXIgc3RhdGVtZW50cyBzaG93aW5nIHByb2NlZWRzIGZyb20gdGhlIHNhbGUgb2YgYXNzZXRzLCBhbG9uZyB3aXRoIHB1cmNoYXNlIGRvY3VtZW50YXRpb24gdG8gY2FsY3VsYXRlIGdhaW5zIG9yIGxvc3Nlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UmVudGFsIGFuZCBSb3lhbHR5IEluY29tZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIG9mIGluY29tZSBhbmQgYXNzb2NpYXRlZCBleHBlbnNlcyBmcm9tIHJlbnRhbCBwcm9wZXJ0aWVzIG9yIHJveWFsdGllcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+Tm9uLVF1YWxpZmllZCBBbm51aXRpZXMgU3RhdGVtZW50czo8L3N0cm9uZz4gWWVhci1lbmQgc3RhdGVtZW50cyBmb3IgYW55IG5vbi1xdWFsaWZpZWQgYW5udWl0eSBjb250cmFjdHMgc2hvd2luZyBkaXN0cmlidXRpb25zIHJlY2VpdmVkLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Gb3JtIDg5NjA6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgYW55IHByaW9yIHllYXIgRm9ybSA4OTYwIHlvdSBoYXZlIGZpbGVkIGZvciBOZXQgSW52ZXN0bWVudCBJbmNvbWUgVGF4LCB3aGljaCBjYW4gcHJvdmlkZSBhIGJhc2lzIGZvciBlc3RpbWF0ZXMgYW5kIHBsYW5uaW5nLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+RW5zdXJpbmcgd2UgaGF2ZSBhbGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHdpbGwgbm90IG9ubHkgc3RyZWFtbGluZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzIGJ1dCBhbHNvIGhlbHAgaW4gbGV2ZXJhZ2luZyBwb3RlbnRpYWwgdGF4LXNhdmluZyBvcHBvcnR1bml0aWVzIHJlbGF0ZWQgdG8gaW52ZXN0bWVudCBpbmNvbWUuIFBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBpZiB5b3UgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyBhbnkgb2YgdGhlIGFib3ZlIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZGRpdGlvbmFsIE1lZGljYXJlIFRheFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQWRkaXRpb25hbCBNZWRpY2FyZSBUYXhcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5kaWNhdGluZyB0aGF0IHlvdXIgaW5jb21lIG1heSBleGNlZWQgdGhlIElSUyB0aHJlc2hvbGRzIGZvciB0aGUgQWRkaXRpb25hbCBNZWRpY2FyZSBUYXggZm9yIHlvdXIgZmlsaW5nIHN0YXR1cy4gSW4gb3JkZXIgdG8gYWNjdXJhdGVseSBhc3Nlc3MgYW5kIHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiBvZiB5b3VyIGZpbGluZyBzdGF0dXMgZm9yIHRoZSB0YXggeWVhciAoTWFycmllZCBGaWxpbmcgSm9pbnRseSwgTWFycmllZCBGaWxpbmcgU2VwYXJhdGVseSwgU2luZ2xlLCBIZWFkIG9mIEhvdXNlaG9sZCwgUXVhbGlmeWluZyBTdXJ2aXZpbmcgU3BvdXNlKS48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvZiBhbGwgc291cmNlcyBvZiBpbmNvbWUgZm9yIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzpcclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+Vy0yIEZvcm1zIGZyb20gYWxsIGVtcGxveWVycy48L2xpPlxyXG4gICAgICAgICAgPGxpPjEwOTkgRm9ybXMgKGlmIGFwcGxpY2FibGUpLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICA8bGk+MTA5OS1NSVNDIGZvciBpbmRlcGVuZGVudCBjb250cmFjdG9ycy48L2xpPlxyXG4gICAgICAgICAgICAgIDxsaT4xMDk5LUlOVCBmb3IgaW50ZXJlc3QgZWFybmluZ3MuPC9saT5cclxuICAgICAgICAgICAgICA8bGk+MTA5OS1ESVYgZm9yIGRpdmlkZW5kcy48L2xpPlxyXG4gICAgICAgICAgICAgIDxsaT5Bbnkgb3RoZXIgMTA5OSBmb3JtcyByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9mIGFueSBvdGhlciBpbmNvbWUgKGUuZy4sIGZvcmVpZ24gaW5jb21lLCByZW50YWwgaW5jb21lKS48L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiBhbnkgZGVkdWN0aW9ucyBvciBleGNsdXNpb25zIHRvIGluY29tZSB0aGF0IHlvdSBpbnRlbmQgdG8gY2xhaW0gKGUuZy4sIElSQSBjb250cmlidXRpb25zLCBzdHVkZW50IGxvYW4gaW50ZXJlc3QpLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+V2UgYWxzbyByZW1pbmQgeW91IHRoYXQgaWYgeW91IGFuZC9vciB5b3VyIHNwb3VzZSBhcmUgc2VsZi1lbXBsb3llZCwgYWRkaXRpb25hbCBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMgd2lsbCBiZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIHlvdXIgbmV0IGVhcm5pbmdzIGFuZCBwb3RlbnRpYWwgQWRkaXRpb25hbCBNZWRpY2FyZSBUYXggb2JsaWdhdGlvbnMuPC9wPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucyBhbmQgYWNjdXJhdGVseSBjYWxjdWxhdGluZyBhbnkgcG90ZW50aWFsIEFkZGl0aW9uYWwgTWVkaWNhcmUgVGF4IGxpYWJpbGl0aWVzLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTmFubnkgVGF4XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJOYW5ueSBUYXhcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXhlcyBhbmQgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgZW1wbG95aW5nIGhvdXNlaG9sZCBoZWxwIHN1Y2ggYXMgYSBuYW5ueSwgaG91c2VrZWVwZXIsIG9yIGdhcmRlbmVyLiBUbyBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRoZSBzby1jYWxsZWQgXCJOYW5ueSBUYXhcIiByZWd1bGF0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkNvbXBsZXRlIG5hbWUsIGFkZHJlc3MsIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9mIHRoZSBlbXBsb3llZS48L2xpPlxyXG4gICAgICAgIDxsaT5Ub3RhbCBhbW91bnQgcGFpZCB0byB0aGUgZW1wbG95ZWUgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgYW1vdW50cyB3aXRoaGVsZCBmcm9tIHRoZSBlbXBsb3llZSdzIHBheSBmb3IgdGF4ZXMsIGluY2x1ZGluZyBGZWRlcmFsIEluY29tZSBUYXgsIFNvY2lhbCBTZWN1cml0eSwgYW5kIE1lZGljYXJlIFRheGVzLjwvbGk+XHJcbiAgICAgICAgPGxpPkNvcGllcyBvZiBhbnkgZW1wbG95bWVudCBjb250cmFjdHMgb3IgYWdyZWVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBhbnkgZW1wbG95ZXIgY29udHJpYnV0aW9ucyB0byBTb2NpYWwgU2VjdXJpdHksIE1lZGljYXJlLCBhbmQgd2l0aGhlbGQgaW5jb21lIHRheGVzIChpZiBhcHBsaWNhYmxlKS48L2xpPlxyXG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIHRoYXQgc3VwcG9ydHMgdGhlIGVtcGxveW1lbnQgc3RhdHVzIChlLmcuLCBTY2hlZHVsZSBIIGZvcm0pLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBvdGhlciByZWxldmFudCB0YXggZG9jdW1lbnRzIG9yIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGVtcGxveW1lbnQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgdGF4IG9ibGlnYXRpb25zIGFuZCBwb3RlbnRpYWxseSBhdm9pZGluZyBwZW5hbHRpZXMgZm9yIG5vbi1jb21wbGlhbmNlLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIG9yIGNvbnRhY3QgdXMgaWYgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbi48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBoZWxwIHlvdSBuYXZpZ2F0ZSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBFYXJuZWQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIEVhcm5lZCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UndmUgZWFybmVkIGluY29tZSBmcm9tIGZvcmVpZ24gc291cmNlcyB0aGlzIHBhc3QgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgYW5kIHBvdGVudGlhbGx5IHRha2UgYWR2YW50YWdlIG9mIHRoZSBGb3JlaWduIEVhcm5lZCBJbmNvbWUgRXhjbHVzaW9uIG9yIGNyZWRpdCwgd2UnbGwgbmVlZCBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGFuZCBpbmZvcm1hdGlvbiBmcm9tIHlvdS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgZm9yZWlnbiBlYXJuZWQgaW5jb21lLiBUaGlzIGluY2x1ZGVzIGFueSB3YWdlcywgc2FsYXJpZXMsIG9yIG90aGVyIGNvbXBlbnNhdGlvbiByZWNlaXZlZCBmcm9tIHNlcnZpY2VzIHBlcmZvcm1lZCB3aGlsZSBsaXZpbmcgYWJyb2FkLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIHlvdXIgZm9yZWlnbiBlYXJuZWQgaW5jb21lLiBUaGlzIGNvdWxkIGJlIGluIHRoZSBmb3JtIG9mIHBheSBzdHVicywgYmFuayBzdGF0ZW1lbnRzIHJlZmxlY3RpbmcgZGlyZWN0IGRlcG9zaXRzLCBvciBlcXVpdmFsZW50IGRvY3VtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiB0aGUgY291bnRyeSBvciBjb3VudHJpZXMgaW4gd2hpY2ggeW91IGVhcm5lZCB0aGlzIGluY29tZS48L2xpPlxyXG4gICAgICAgIDxsaT5EYXRlcyBvZiB5b3VyIHJlc2lkZW5jeSBpbiBlYWNoIGZvcmVpZ24gY291bnRyeS48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgdGF4IHJlc2lkZW5jeSBjZXJ0aWZpY2F0ZXMgb3Igc3RhdGVtZW50cyBmcm9tIGZvcmVpZ24gdGF4IGF1dGhvcml0aWVzLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGZvcmVpZ24gdGF4IHBhaWQsIGluY2x1ZGluZyB0YXggcmV0dXJucyBmaWxlZCBpbiB0aGUgZm9yZWlnbiBjb3VudHJ5LCBpZiBhdmFpbGFibGUuPC9saT5cclxuICAgICAgICA8bGk+UmVjb3JkcyBvZiB5b3VyIFUuUy4gYW5kIGZvcmVpZ24gYWRkcmVzc2VzIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+SW5mb3JtYXRpb24gb24gYW55IHRheCB0cmVhdGllcyBiZXR3ZWVuIHRoZSBVLlMuIGFuZCB0aGUgY291bnRyeSBvciBjb3VudHJpZXMgeW91IHdvcmtlZCBpbi48L2xpPlxyXG4gICAgICAgIDxsaT5BIHNpZ25lZCBGb3JtIDI1NTUgb3IgMjU1NS1FWiwgaWYgeW91IGhhdmUgYWxyZWFkeSBwcmVwYXJlZCB0aGlzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhlc2UgZG9jdW1lbnRzIGFuZCBkZXRhaWxzIGFyZSBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgYmVzdCBhcHByb2FjaCB0byBoYW5kbGUgeW91ciBmb3JlaWduIGVhcm5lZCBpbmNvbWUgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBoYXZlIHRoZXNlIG1hdGVyaWFscyByZWFkeSBhbmQgc2VuZCB0aGVtIHRvIHVzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gYW55IG9mIHRoZSBpdGVtcyByZXF1ZXN0ZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IHdpdGggeW91ciB0YXhlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBIb3VzaW5nIEV4Y2x1c2lvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBIb3VzaW5nIEV4Y2x1c2lvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UndmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBpbmN1cnJpbmcgZWxpZ2libGUgZXhwZW5zZXMgZm9yIHRoZSBGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uIGR1ZSB0byBlYXJuaW5nIGluY29tZSBpbiBhIGZvcmVpZ24gY291bnRyeSBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGV4Y2x1c2lvbiBwb3NzaWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB5b3VyIGN1cnJlbnQgbGVhc2Ugb3IgcmVudGFsIGFncmVlbWVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlV0aWxpdHkgQmlsbHM6PC9zdHJvbmc+IENvcGllcyBvZiB1dGlsaXR5IGJpbGxzIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24gKGV4Y2x1ZGluZyB0ZWxlcGhvbmUgY2hhcmdlcykuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnN1cmFuY2UgRG9jdW1lbnRzOjwvc3Ryb25nPiBEb2N1bWVudHMgcHJvdmluZyBwYXltZW50IG9mIHJlYWwgZXN0YXRlIG9yIHJlbnRhbCBpbnN1cmFuY2UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5PdGhlciBIb3VzaW5nIENvc3RzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBkb2N1bWVudGF0aW9uIGZvciBhbnkgYWRkaXRpb25hbCBlbGlnaWJsZSBob3VzaW5nIGNvc3RzIG5vdCBwcmV2aW91c2x5IG1lbnRpb25lZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZvcmVpZ24gSW5jb21lOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHZlcmlmeWluZyB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZSAoZS5nLiwgcGF5IHN0dWJzLCBiYW5rIHN0YXRlbWVudHMpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TG9jYXRpb24gYW5kIER1cmF0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIHN0YXRlbWVudCBkZXRhaWxpbmcgdGhlIGxvY2F0aW9uIG9mIHlvdXIgZm9yZWlnbiByZXNpZGVuY2UgYW5kIHRoZSBkdXJhdGlvbiBvZiB5b3VyIHN0YXkgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhcmx5IGxlZ2libGUgYW5kIGluIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgZWxlY3Ryb25pY2FsbHkuIFRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoZXNlIGRvY3VtZW50cyBhcmUgZXNzZW50aWFsIGZvciBhIGNvcnJlY3QgYW5kIG9wdGltaXplZCBmaWxpbmcgb2YgeW91ciB0YXggcmV0dXJuLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIEZvcmVpZ24gSG91c2luZyBFeGNsdXNpb24uPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIGFueSBvZiB0aGUgcmVxdWlyZWQgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMgYXQgeW91ciBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBIb3VzaW5nIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBIb3VzaW5nIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byB0aGUgcXVlc3Rpb24gY29uY2VybmluZyBwb3RlbnRpYWwgZWxpZ2liaWxpdHkgZm9yIHRoZSA8c3Ryb25nPkZvcmVpZ24gSG91c2luZyBEZWR1Y3Rpb248L3N0cm9uZz4uIFRoaXMgZGVkdWN0aW9uIGlzIGRlc2lnbmVkIHRvIGhlbHAgbWl0aWdhdGUgdGhlIGhpZ2hlciBjb3N0IG9mIGxpdmluZyBhYnJvYWQgYnkgYWxsb3dpbmcgY2VydGFpbiBob3VzaW5nIGV4cGVuc2VzIHRvIGJlIGRlZHVjdGVkIGZvciB0YXggcHVycG9zZXMuPC9wPlxyXG4gICAgPHA+VG8gcHJvY2VlZCB3aXRoIHlvdXIgdGF4IGZpbGluZyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBkZWR1Y3Rpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50cyByZWxhdGVkIHRvIHlvdXIgaG91c2luZyBleHBlbnNlcyBpbmN1cnJlZCB3aGlsZSB3b3JraW5nIGFicm9hZDo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5SZW50YWwgQWdyZWVtZW50L0xlYXNlOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciByZW50YWwgYWdyZWVtZW50IG9yIGxlYXNlIHRoYXQgc3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgcmVudCBwYWlkIGFuZCB0aGUgcGVyaW9kIG9mIG9jY3VwYW5jeS48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+VXRpbGl0eSBCaWxsczo8L3N0cm9uZz4gQ29waWVzIG9mIHV0aWxpdHkgYmlsbHMgZm9yIHRoZSBwZXJpb2QgeW91IGFyZSBjbGFpbWluZyB0aGUgZGVkdWN0aW9uLiBUaGlzIGluY2x1ZGVzIGVsZWN0cmljaXR5LCB3YXRlciwgYW5kIGdhcywgYnV0IGV4Y2x1ZGVzIHRlbGVwaG9uZSBjaGFyZ2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5SZWFsIEVzdGF0ZSBJbnN1cmFuY2U6PC9zdHJvbmc+IERvY3VtZW50IHByb29mIG9mIGFueSByZWFsIGVzdGF0ZSBpbnN1cmFuY2UgcHJlbWl1bXMgcGFpZCBmb3IgeW91ciBmb3JlaWduIGhvdXNpbmcuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPk90aGVyIEVsaWdpYmxlIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBpbnZvaWNlcyBmb3IgYW55IGFkZGl0aW9uYWwgZWxpZ2libGUgbGl2aW5nIGV4cGVuc2VzIG5vdCBjb3ZlcmVkIGFib3ZlLiBQbGVhc2Ugbm90ZSwgdG8gcXVhbGlmeSwgdGhlc2UgZXhwZW5zZXMgbXVzdCBiZSBkaXJlY3RseSByZWxhdGVkIHRvIHlvdXIgZm9yZWlnbiBob3VzaW5nIGFuZCBub3QgY292ZXJlZCB1bmRlciB0aGUgYmFzZSBhbW91bnQgZXhlbXB0aW9uLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Gb3JlaWduIEVhcm5lZCBJbmNvbWU6PC9zdHJvbmc+IFZlcmlmaWNhdGlvbiBvZiB5b3VyIGVhcm5lZCBpbmNvbWUgd2hpbGUgd29ya2luZyBhYnJvYWQsIGFzIHRoZSBkZWR1Y3Rpb24gaXMgdGllZCB0byBjZXJ0YWluIGluY29tZSBsaW1pdGF0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPldlIHVuZGVyc3RhbmQgdGhpcyBtYXkgaW52b2x2ZSBnYXRoZXJpbmcgc2V2ZXJhbCBkb2N1bWVudHMsIGJ1dCBlbnN1cmluZyB3ZSBoYXZlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBtYXhpbWl6aW5nIHlvdXIgcG90ZW50aWFsIGRlZHVjdGlvbnMgYW5kIHJlbWFpbmluZyBjb21wbGlhbnQgd2l0aCB0YXggcmVndWxhdGlvbnMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHN1Ym1pdCB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBvciBjb250YWN0IHVzIHRvIGRpc2N1c3MgYW55IGNoYWxsZW5nZXMgeW91IG1heSBmYWNlIGluIG9idGFpbmluZyB0aGVtLiBPdXIgdGVhbSBpcyBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkZvcmVpZ24gVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIHJlYWNoaW5nIG91dCB0byBnYXRoZXIgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciBjbGFpbWluZyB5b3VyIEZvcmVpZ24gVGF4IENyZWRpdCwgYXMgaW5kaWNhdGVkIGJ5IHlvdXIgYWZmaXJtYXRpdmUgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSBwYWlkIHRheGVzIHRvIGEgZm9yZWlnbiBjb3VudHJ5IG9uIGVhcm5lZCBpbmNvbWUgdGhlcmUuIFRvIHByb3Blcmx5IGNhbGN1bGF0ZSBhbmQgYXBwbHkgdGhpcyBjcmVkaXQgdG8geW91ciBVLlMuIHRheCByZXR1cm4sIHdlIHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkVhcm5lZCBJbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYW55IGRvY3VtZW50cyB0aGF0IHZlcmlmeSB0aGUgYW1vdW50IG9mIGluY29tZSBlYXJuZWQgaW4gdGhlIGZvcmVpZ24gY291bnRyeS4gVGhpcyBtYXkgaW5jbHVkZSwgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBwYXkgc3R1YnMsIFctMiBmb3JtcyBmcm9tIGZvcmVpZ24gZW1wbG95ZXJzLCBvciBhbnkgb2ZmaWNpYWwgaW5jb21lIHN0YXRlbWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBUYXggUGFpZDo8L3N0cm9uZz4gVG8gY2xhaW0gdGhlIEZvcmVpZ24gVGF4IENyZWRpdCwgZG9jdW1lbnRhdGlvbiBzaG93aW5nIHRoZSBhbW91bnQgb2YgdGF4IHBhaWQgdG8gdGhlIGZvcmVpZ24gZ292ZXJubWVudCBpcyByZXF1aXJlZC4gQWNjZXB0YWJsZSBmb3JtcyBvZiBldmlkZW5jZSBpbmNsdWRlIGZvcmVpZ24gdGF4IHJldHVybihzKSwgd2l0aGhvbGRpbmcgc3RhdGVtZW50cywgb3IgYW55IG9mZmljaWFsIHRheCByZWNlaXB0cyBwcm92aWRlZCBieSB0aGUgZm9yZWlnbiB0YXggYXV0aG9yaXR5LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyOjwvc3Ryb25nPiBZb3VyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgb3IgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyLCBmb3IgYWNjdXJhdGUgcHJvY2Vzc2luZyBvZiB0aGUgdGF4IGNyZWRpdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIEZvcmVpZ24gVGF4Ojwvc3Ryb25nPiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgdHlwZSBvZiB0YXggcGFpZCB0byB0aGUgZm9yZWlnbiBjb3VudHJ5IChpbmNvbWUgdGF4LCBzYWxlcyB0YXgsIGV0Yy4pLCBpbmNsdWRpbmcgd2hldGhlciBpdCB3YXMgYSBmZWRlcmFsLCBzdGF0ZS9wcm92aW5jaWFsLCBvciBsb2NhbCB0YXguPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZXNpZGVuY3kgKElmIEFwcGxpY2FibGUpOjwvc3Ryb25nPiBJZiB5b3VyIGNsYWltIGRlcGVuZHMgb24gcmVzaWRlbmN5IHN0YXR1cyBpbiB0aGUgZm9yZWlnbiBjb3VudHJ5LCBwbGVhc2UgcHJvdmlkZSBwcm9vZiBvZiByZXNpZGVuY3kgZm9yIHRoZSByZWxldmFudCB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gQWRkcmVzcyAoSWYgQXBwbGljYWJsZSk6PC9zdHJvbmc+IElmIHlvdSBtYWludGFpbmVkIGEgcmVzaWRlbmNlIG91dHNpZGUgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgZHVyaW5nIHRoZSB0YXggeWVhciwgcGxlYXNlIHByb3ZpZGUgdGhlIGFkZHJlc3MuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBlbnN1cmluZyB5b3VyIHRheCByZXR1cm5zIGFyZSBhcyBiZW5lZmljaWFsIHRvIHlvdXIgc2l0dWF0aW9uIGFzIGFsbG93ZWQgYnkgbGF3IGFuZCBmb3IgcHJldmVudGluZyBhbnkgdW5uZWNlc3NhcnkgZGVsYXlzLjwvcD5cclxuICAgIDxwPlBsZWFzZSB1cGxvYWQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiB0byBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgZW1haWwgaXQgdG8gdXMgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRyYWRpdGlvbmFsIElSQSBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRyYWRpdGlvbmFsIElSQSBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIG5vdGVkIHlvdXIgaW5kaWNhdGlvbiBvZiBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgYmVuZWZpY2lhbCB0YXggZmlsaW5nLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhYm91dCB5b3VyIFRyYWRpdGlvbmFsIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9ucyB5b3UgbWF5IGhhdmUgdGFrZW46PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgVHJhZGl0aW9uYWwgSVJBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMgdG8gYWNjdXJhdGVseSByZXBvcnQgd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIHNwZWNpZnlpbmcgdGhlIGNvbnRyaWJ1dGlvbnMgbWFkZS48L2xpPlxyXG4gICAgICA8bGk+QW55IGRpc3RyaWJ1dGlvbnMgdGFrZW4gZnJvbSB5b3VyIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkFtb3VudCBvZiBlYWNoIGRpc3RyaWJ1dGlvbi48L2xpPlxyXG4gICAgICAgICAgPGxpPkRhdGVzIG9mIGVhY2ggZGlzdHJpYnV0aW9uLjwvbGk+XHJcbiAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIGZvciB0aGVzZSBkaXN0cmlidXRpb25zLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPllvdXIgeWVhci1lbmQgSVJBIHN0YXRlbWVudCBmb3IgdGhlIHRheCB5ZWFyIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgIDxsaT5Bbnkgbm90aWNlcyByZWNlaXZlZCByZWdhcmRpbmcgbm9uLWRlZHVjdGlibGUgY29udHJpYnV0aW9ucywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHlvdXIgdGF4IGxpYWJpbGl0aWVzIG9yIGJlbmVmaXRzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIElSQSBjb250cmlidXRpb25zLCBhbmQgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZmFjaWxpdGF0ZSB0aGUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZmlsaW5nLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjxwPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSb3RoIElSQSBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJvdGggSVJBIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIGNvbnRyaWJ1dGlvbnMgdG8gYSBSb3RoIElSQSBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIgYXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFRvIGVuc3VyZSB3ZSBhY2N1cmF0ZWx5IGNhcHR1cmUgYWxsIHJlbGV2YW50IHRheCBpbmZvcm1hdGlvbiBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemUgeW91ciB0YXggc2l0dWF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIHNwZWNpZmljcyBhYm91dCB5b3VyIFJvdGggSVJBIGNvbnRyaWJ1dGlvbnMgYW5kIGFueSBkaXN0cmlidXRpb25zOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFJvdGggSVJBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPlRoZSBkYXRlcyBvbiB3aGljaCB0aGVzZSBjb250cmlidXRpb25zIHdlcmUgbWFkZS48L2xpPlxyXG4gICAgICA8bGk+T2ZmaWNpYWwgc3RhdGVtZW50cyBvciBkb2N1bWVudGF0aW9uIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIHRoYXQgZGV0YWlsIHRoZXNlIGNvbnRyaWJ1dGlvbnMuPC9saT5cclxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSBkaXN0cmlidXRpb25zLCBzaG91bGQgdGhleSBhcHBseSwgaW5jbHVkaW5nOlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IG9mIGVhY2ggZGlzdHJpYnV0aW9uIHRha2VuIGZyb20gdGhlIFJvdGggSVJBLjwvbGk+XHJcbiAgICAgICAgICA8bGk+VGhlIGRhdGVzIG9mIHRoZXNlIGRpc3RyaWJ1dGlvbnMuPC9saT5cclxuICAgICAgICAgIDxsaT5EaXN0cmlidXRpb24gc3RhdGVtZW50cyBvciByZWxldmFudCBkb2N1bWVudGF0aW9uIGZyb20geW91ciBJUkEgY3VzdG9kaWFuLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPllvdXIgeWVhci1lbmQgYWNjb3VudCBzdGF0ZW1lbnQgZm9yIHRoZSBSb3RoIElSQSBmb3IgdGhlIHRheCB5ZWFyIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgcGVydGluZW50IGluZm9ybWF0aW9uIG9yIG5vdGljZXMgcmVnYXJkaW5nIHlvdXIgUm90aCBJUkEgY29udHJpYnV0aW9ucyBvciBkaXN0cmlidXRpb25zLCBpbmNsdWRpbmcgdGF4IHJlcG9ydGluZyBmb3JtcyBsaWtlIEZvcm0gNTQ5OCBvciBGb3JtIDEwOTktUiwgaWYgcmVjZWl2ZWQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5HYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCBmb3IgYSBjb21wcmVoZW5zaXZlIGFuYWx5c2lzIG9mIHlvdXIgdGF4IHNpdHVhdGlvbiwgZW5zdXJpbmcgdGhlIGNvcnJlY3QgdHJlYXRtZW50IG9mIHlvdXIgUm90aCBJUkEgY29udHJpYnV0aW9ucyBhbmQgYW55IGRpc3RyaWJ1dGlvbnMsIGFuZCBjb21wbHlpbmcgd2l0aCBJUlMgcmVndWxhdGlvbnMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudGF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlcmllcyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gb2J0YWluaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBBc3NldHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlJ3JlIG1ha2luZyBwcm9ncmVzcyBvbiB5b3VyIHRheCByZXR1cm4sIGFuZCBiYXNlZCBvbiB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgb3duZXJzaGlwIG9yIGZpbmFuY2lhbCBpbnRlcmVzdCBpbiBmb3JlaWduIGFzc2V0cywgYWRkaXRpb25hbCBkZXRhaWxzIGFyZSBuZWNlc3NhcnkuIFRoZXNlIGRldGFpbHMgYXJlIGNydWNpYWwgZm9yIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgY29tcGxpYW5jZSB3aXRoIHRoZSBGb3JlaWduIEFjY291bnQgVGF4IENvbXBsaWFuY2UgQWN0IChGQVRDQSkgYW5kIFJlcG9ydCBvZiBGb3JlaWduIEJhbmsgYW5kIEZpbmFuY2lhbCBBY2NvdW50cyAoRkJBUikgcmVxdWlyZW1lbnRzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCBzdGF0ZW1lbnRzIGZyb20gZm9yZWlnbiBiYW5rcywgbXV0dWFsIGZ1bmRzLCBvciBzZWN1cml0aWVzIGFjY291bnRzLiBUaGlzIGluY2x1ZGVzIGFueXRoaW5nIHdpdGggYW4gYWdncmVnYXRlIHZhbHVlIG92ZXIgJDEwLDAwMCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgTnVtYmVyczo8L3N0cm9uZz4gVGhlIGFjY291bnQgbnVtYmVycyBmb3IgYWxsIGFwcGxpY2FibGUgYWNjb3VudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnN0aXR1dGlvbiBOYW1lczo8L3N0cm9uZz4gVGhlIG5hbWVzIGFuZCBhZGRyZXNzZXMgb2YgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbnMgd2hlcmUgdGhlc2UgYWNjb3VudHMgYXJlIGhlbGQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NYXhpbXVtIFZhbHVlczo8L3N0cm9uZz4gVGhlIG1heGltdW0gdmFsdWUgb2YgZWFjaCBhY2NvdW50IGR1cmluZyB0aGUgdGF4IHllYXIsIGNvbnZlcnRlZCB0byBVU0QgdXNpbmcgdGhlIGVuZC1vZi15ZWFyIGV4Y2hhbmdlIHJhdGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Pd25lcnNoaXAgRGV0YWlsczo8L3N0cm9uZz4gQ2xhcmlmaWNhdGlvbiBvbiB0aGUgdHlwZSBvZiBvd25lcnNoaXAgKGluZGl2aWR1YWwsIGpvaW50LCBldGMuKSBhbmQgdGhlIHBlcmNlbnRhZ2Ugb2Ygb3duZXJzaGlwIGlmIG5vdCBzb2xlbHkgb3duZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db250YWN0IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBJZiBtYW5hZ2VkIGJ5IGEgZmluYW5jaWFsIGFkdmlzb3Igb3IgaW5zdGl0dXRpb24sIHByb3ZpZGUgdGhlaXIgY29udGFjdCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkluY29tZSBHZW5lcmF0ZWQ6PC9zdHJvbmc+IEluZm9ybWF0aW9uIG9uIGFueSBpbmNvbWUgZ2VuZXJhdGVkIGZyb20gdGhlc2UgYXNzZXRzLCBzdWNoIGFzIGludGVyZXN0LCBkaXZpZGVuZHMsIG9yIGNhcGl0YWwgZ2FpbnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGltcGVyYXRpdmUgdG8gZW5zdXJlIGZ1bGwgY29tcGxpYW5jZSBhbmQgbWl0aWdhdGUgYW55IHJpc2tzIG9mIHBlbmFsdGllcy4gS2luZGx5IHNlbmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUsIHRvIGFsbG93IGFtcGxlIHRpbWUgZm9yIHByb3BlciBmaWxpbmcuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZ2lmdHMgb3IgYmVxdWVzdHMgZnJvbSBmb3JlaWduIGVudGl0aWVzIHRoYXQgZXhjZWVkIHRoZSAkMTAwLDAwMCB0aHJlc2hvbGQgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhlc2Ugb24geW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29tcGxldGUgbGlzdCBvZiBmb3JlaWduIGdpZnRzIG9yIGJlcXVlc3RzIHJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBkZXRhaWxzIGZvciBlYWNoIGdpZnQgb3IgYmVxdWVzdCwgaW5jbHVkaW5nIHRoZSBkYXRlIHJlY2VpdmVkIGFuZCB0aGUgZXhhY3QgYW1vdW50IGluIFVTRCAoVS5TLiBEb2xsYXJzKS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Eb25vciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gRm9yIGVhY2ggZ2lmdCByZWNlaXZlZCwgcHJvdmlkZSB0aGUgZG9ub3IncyBmdWxsIG5hbWUsIGFkZHJlc3MsIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlNvdXJjZSBvZiBHaWZ0Ojwvc3Ryb25nPiBEZXRhaWwgdGhlIHNvdXJjZSBvZiBlYWNoIGdpZnQsIGluY2x1ZGluZyB3aGV0aGVyIGl0IG9yaWdpbmF0ZWQgZnJvbSBhbiBpbmRpdmlkdWFsLCBlc3RhdGUsIGZvcmVpZ24gY29ycG9yYXRpb24sIG9yIHBhcnRuZXJzaGlwLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gQ291bnRyeSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgY291bnRyeSBmcm9tIHdoaWNoIGVhY2ggZ2lmdCBvciBiZXF1ZXN0IHdhcyByZWNlaXZlZC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBdHRhY2ggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gc3VjaCBhcyBiYW5rIHN0YXRlbWVudHMsIGZvcmVpZ24gZ2lmdCBkZWNsYXJhdGlvbiBmb3Jtcywgb3IgbGVnYWwgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gdGhlIHJlY2VpcHQgb2YgdGhlc2UgZ2lmdHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgdG8gZnVsZmlsbCBvdXIgb2JsaWdhdGlvbnMgYW5kIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgeW91ciB0YXggZmlsaW5ncy4gRmFpbHVyZSB0byByZXBvcnQgZm9yZWlnbiBnaWZ0cyBvciBiZXF1ZXN0cyBhY2N1cmF0ZWx5IGNhbiByZXN1bHQgaW4gcGVuYWx0aWVzLiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGVwcmVjaWFibGUgQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEZXByZWNpYWJsZSBBc3NldHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHdlIGJlZ2luIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4sIHdlIG5lZWQgeW91ciBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGRlcHJlY2lhYmxlIGFzc2V0cy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgZGVwcmVjaWF0aW9uIGV4cGVuc2UgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMuPC9wPlxyXG5cclxuICAgIDxoMj5BY3Rpb24gSXRlbTo8L2gyPlxyXG4gICAgPHA+UGxlYXNlIGFjY2VzcyB5b3VyIDxzdHJvbmc+c2VjdXJlIGNsaWVudCB1cGxvYWQgcG9ydGFsPC9zdHJvbmc+IGFuZCBuYXZpZ2F0ZSB0byB0aGUgZm9sbG93aW5nIHBhdGg6IDxjb2RlPnRheGVzL1tDVVJSRU5UIFRBWCBZRUFSXS9EZXByZWNpYXRpb24vQXNzZXRzLnhsc3g8L2NvZGU+LiBZb3Ugd2lsbCBmaW5kIGEgc3ByZWFkc2hlZXQgdGl0bGVkIFwiPHN0cm9uZz5EZXByZWNpYWJsZSBBc3NldHM8L3N0cm9uZz4uXCIgV2Uga2luZGx5IHJlcXVlc3QgdGhhdCB5b3UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBlYWNoIGRlcHJlY2lhYmxlIGFzc2V0IGluIHlvdXIgYnVzaW5lc3M6PC9wPlxyXG4gICAgPHVsPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uOjwvc3Ryb25nPiBQcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gdGhhdCBjbGVhcmx5IGlkZW50aWZpZXMgdGhlIGFzc2V0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBBY3F1aXJlZDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgZGF0ZSB5b3UgcHVyY2hhc2VkIG9yIGFjcXVpcmVkIHRoZSBhc3NldC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvc3QgLyBCYXNpczo8L3N0cm9uZz4gSW5kaWNhdGUgdGhlIG9yaWdpbmFsIGNvc3Qgb2YgdGhlIGFzc2V0IG9yIHRoZSBhZGp1c3RlZCBiYXNpcyBpZiBkZXByZWNpYXRpb24gaGFzIGJlZW4gY2xhaW1lZCBpbiBwcmV2aW91cyB5ZWFycy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJ1c2luZXNzICUgVXNlOjwvc3Ryb25nPiBFc3RpbWF0ZSB0aGUgcGVyY2VudGFnZSBvZiB0aW1lIHRoZSBhc3NldCBpcyB1c2VkIGZvciBidXNpbmVzcyBwdXJwb3NlcyB2ZXJzdXMgcGVyc29uYWwgdXNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VXNlZCBQcm9wZXJ0eTo8L3N0cm9uZz4gSW5kaWNhdGUgd2hldGhlciB0aGUgYXNzZXQgd2FzIHB1cmNoYXNlZCBuZXcgb3IgdXNlZC48L2xpPlxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8aDM+SW1wb3J0YW50IE5vdGUgb24gU2FmZS1IYXJib3IgRXhwZW5zaW5nOjwvaDM+XHJcbiAgICA8cD5QbGVhc2UgYmUgYXdhcmUgdGhhdCB1bmRlciB0aGUgc2FmZS1oYXJib3IgPGVtPmRlIG1pbmltaXM8L2VtPiBleHBlbnNpbmcgcnVsZSwgeW91IGNhbiBpbW1lZGlhdGVseSBleHBlbnNlIHRoZSBjb3N0IG9mIGFueSBpbmRpdmlkdWFsIGFzc2V0IHRoYXQgY29zdHMgbGVzcyB0aGFuICQyLDUwMCwgcHJvdmlkZWQgeW91IGRvIG5vdCBoYXZlIGFuIEFwcGxpY2FibGUgRmluYW5jaWFsIFN0YXRlbWVudCAoQUZTKS4gSWYgYW4gYXNzZXQgbWVldHMgdGhpcyBjcml0ZXJpb24sIHlvdSBkbyBub3QgbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBzcHJlYWRzaGVldC48L3A+XHJcblxyXG4gICAgPHA+V2UgZW5jb3VyYWdlIHlvdSB0byBiZSBhcyBjb21wcmVoZW5zaXZlIGFzIHBvc3NpYmxlIHdoZW4gbGlzdGluZyB5b3VyIGFzc2V0cy4gSWYgeW91IGFyZSB1bnN1cmUgd2hldGhlciBhbiBpdGVtIHNob3VsZCBiZSBpbmNsdWRlZCwgcGxlYXNlIHByb3ZpZGUgdGhlIGRldGFpbHMsIGFuZCB3ZSB3aWxsIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgdHJlYXRtZW50LjwvcD5cclxuXHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIDxzdHJvbmc+Y29udGFjdCB1czwvc3Ryb25nPi4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGxvb2sgZm9yd2FyZCB0byB3b3JraW5nIHdpdGggeW91IHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlBhc3NpdmUgQnVzaW5lc3MgQWN0aXZpdGllc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGFzc2l2ZSBCdXNpbmVzcyBBY3Rpdml0aWVzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiBvcmRlciB0byBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggcmV0dXJucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhc3NpdmUgYWN0aXZpdGllcyB5b3VyIGJ1c2luZXNzIGlzIGVuZ2FnZWQgaW4uIFBhc3NpdmUgYWN0aXZpdGllcyBnZW5lcmFsbHkgaW52b2x2ZSBidXNpbmVzcyBvciB0cmFkZSBhY3Rpdml0aWVzIGluIHdoaWNoIHlvdSBkbyBub3QgbWF0ZXJpYWxseSBwYXJ0aWNpcGF0ZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBhY3Rpdml0aWVzIGlzIGNydWNpYWwgZm9yIHByb3BlciB0YXggcmVwb3J0aW5nIGFuZCBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzLjwvcD5cclxuXHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlmIHlvdSBiZWxpZXZlIHdlIGRvIG5vdCBhbHJlYWR5IGhhdmUgdGhlIGluZm9ybWF0aW9uIGluIHlvdXIgYnVzaW5lc3MgZmluYW5jaWFsczo8L3A+XHJcbiAgICBcclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+TmFtZXMgYW5kIERlc2NyaXB0aW9uczo8L3N0cm9uZz4gQSBsaXN0IGFuZCBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHBhc3NpdmUgYWN0aXZpdHkgeW91ciBidXNpbmVzcyBpcyBlbmdhZ2VkIGluLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkZpbmFuY2lhbCBTdGF0ZW1lbnRzOjwvc3Ryb25nPklmIG5vdCBhbHJlYWR5IGluIHlvdXIgYnVzaW5lc3MgZmluYW5jaWFscywgUHJvZml0IGFuZCBsb3NzIHN0YXRlbWVudHMgZm9yIGVhY2ggcGFzc2l2ZSBhY3Rpdml0eSwgZGV0YWlsaW5nIGluY29tZSBhbmQgZXhwZW5zZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+T3duZXJzaGlwIFN0cnVjdHVyZTo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvdXRsaW5pbmcgeW91ciBvd25lcnNoaXAgaW50ZXJlc3QgaW4gZWFjaCBhY3Rpdml0eSwgaW5jbHVkaW5nIGFueSBqb2ludCB2ZW50dXJlcyBvciBwYXJ0bmVyc2hpcHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIFByb3BlcnRpZXMgKGlmIGFwcGxpY2FibGUpOjwvc3Ryb25nPiBJZiBhbnkgcGFzc2l2ZSBhY3Rpdml0aWVzIGluY2x1ZGUgcmVudGFsIHByb3BlcnRpZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBhZGRyZXNzZXMsIGxlYXNlIGFncmVlbWVudHMsIGFuZCBhIHNjaGVkdWxlIG9mIHJlbnRzIGNvbGxlY3RlZCBhbmQgZXhwZW5zZXMgaW5jdXJyZWQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+TG9nIG9mIFBlcnNvbmFsIEludm9sdmVtZW50Ojwvc3Ryb25nPiBGb3IgZWFjaCBhY3Rpdml0eSwgYSBsb2cgb3IgcmVjb3JkIG9mIHlvdXIgcGVyc29uYWwgaW52b2x2ZW1lbnQgb3IgcGFydGljaXBhdGlvbiBvdmVyIHRoZSB0YXggeWVhciwgdG8gc3Vic3RhbnRpYXRlIHRoZSBleHRlbnQgb2YgeW91ciBtYXRlcmlhbCBwYXJ0aWNpcGF0aW9uLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByaW9yIFllYXIgTG9zc2VzOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBvbiBhbnkgbG9zc2VzIGZyb20gdGhlc2UgYWN0aXZpdGllcyBjYXJyaWVkIG92ZXIgZnJvbSBwcmV2aW91cyB0YXggeWVhcnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICBcclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgcGl2b3RhbCBmb3IgYXNzZXNzaW5nIHlvdXIgcGFzc2l2ZSBhY3Rpdml0eSBsb3NzZXMgYW5kIGNvcnJlY3RseSBhcHBseWluZyB0aGVtIGFnYWluc3QgeW91ciBwYXNzaXZlIGFjdGl2aXR5IGluY29tZSwgaW4gbGluZSB3aXRoIHRoZSBJUlMgcGFzc2l2ZSBhY3Rpdml0eSBsb3NzIHJ1bGVzLjwvcD5cclxuICAgIFxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0LiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiR2VuZXJhbCBCdXNpbmVzcyBDcmVkaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBleHBsb3Jpbmcgb3Bwb3J0dW5pdGllcyB0byBvcHRpbWl6ZSB5b3VyIHRheCBiZW5lZml0cyB0aHJvdWdoIHZhcmlvdXMgZ2VuZXJhbCBidXNpbmVzcyBjcmVkaXRzLiBUaGVzZSBjcmVkaXRzIGFyZSBkZXNpZ25lZCB0byBlbmNvdXJhZ2UgY2VydGFpbiBidXNpbmVzcyBhY3Rpdml0aWVzIHRoYXQgbWVldCB0aGUgZ29hbHMgYW5kIHBvbGljaWVzIGVzdGFibGlzaGVkIGJ5IHRoZSBnb3Zlcm5tZW50LCByYW5naW5nIGZyb20gaW52ZXN0bWVudCBpbiBwcm9wZXJ0eSB0byBmb3N0ZXJpbmcgc29jaWFsIHJlc3BvbnNpYmlsaXRpZXMgbGlrZSBlbXBsb3ltZW50IG9wcG9ydHVuaXRpZXMgZm9yIHZldGVyYW5zLiBVbmRlcnN0YW5kaW5nIHdoZXRoZXIgeW91ciBidXNpbmVzcyBpcyBlbGlnaWJsZSBmb3IgdGhlc2UgY2FuIHNpZ25pZmljYW50bHkgaW1wYWN0IHlvdXIgZmluYW5jaWFscyBmYXZvcmFibHkuPC9wPlxyXG5cclxuICAgIDxwPkJlbG93IGlzIGEgYnJpZWYgZXhwbGFuYXRpb24gb2Ygc29tZSBvZiB0aGUgbW9zdCBjb21tb24gR2VuZXJhbCBCdXNpbmVzcyBDcmVkaXRzIGFuZCBvdGhlcnMgdGhhdCBtaWdodCBhcHBseSB0byB5b3VyIHNpdHVhdGlvbjo8L3A+XHJcbiAgICBcclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBDcmVkaXQgKEZvcm0gMzQ2OCk6PC9zdHJvbmc+IEZvciBpbnZlc3RpbmcgaW4gY2VydGFpbiBwcm9wZXJ0eSBsaWtlIGJ1aWxkaW5ncywgZXF1aXBtZW50LCBvciBvdGhlciB0YW5naWJsZSBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Xb3JrIE9wcG9ydHVuaXR5IFRheCBDcmVkaXQgKEZvcm0gNTg4NCk6PC9zdHJvbmc+IEZvciBoaXJpbmcgaW5kaXZpZHVhbHMgZnJvbSBjZXJ0YWluIHRhcmdldCBncm91cHMgd2hvIGhhdmUgY29uc2lzdGVudGx5IGZhY2VkIHNpZ25pZmljYW50IGJhcnJpZXJzIHRvIGVtcGxveW1lbnQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGlzYWJsZWQgQWNjZXNzIENyZWRpdDo8L3N0cm9uZz4gSWYgeW91ciBidXNpbmVzcyBpbmN1cnJlZCBleHBlbnNlcyBmb3IgbWFraW5nIGl0IG1vcmUgYWNjZXNzaWJsZSB0byBpbmRpdmlkdWFscyB3aXRoIGRpc2FiaWxpdGllcywgY29tcGx5aW5nIHdpdGggdGhlIEFtZXJpY2FucyB3aXRoIERpc2FiaWxpdGllcyBBY3QgKEFEQSkuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q3JlZGl0IGZvciBFbXBsb3llciBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIFRheGVzIG9uIEVtcGxveWVlIFRpcHMgKEZvcm0gODg0Nik6PC9zdHJvbmc+IElmIHlvdSBoYXZlIGVtcGxveWVlcyB3aG8gcmVjZWl2ZSB0aXBzLCB0aGlzIGNyZWRpdCByZWxhdGVzIHRvIHRoZSBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRheGVzIHlvdSBwYXkgb24gdGhvc2UgdGlwcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBDcmVkaXQgZm9yIFBhaWQgRmFtaWx5IGFuZCBNZWRpY2FsIExlYXZlIChGTUxBIExlYXZlKSAoRm9ybSA4OTk0KTo8L3N0cm9uZz4gRm9yIGJ1c2luZXNzZXMgcHJvdmlkaW5nIHBhaWQgZmFtaWx5IGFuZCBtZWRpY2FsIGxlYXZlIHRvIHRoZWlyIGVtcGxveWVlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5DcmVkaXQgZm9yIFNtYWxsIEVtcGxveWVyIEhlYWx0aCBJbnN1cmFuY2UgUHJlbWl1bXMgKEZvcm0gODk0MSk6PC9zdHJvbmc+IElmIHlvdSBwcm92aWRlIGhlYWx0aCBpbnN1cmFuY2UgdG8geW91ciBlbXBsb3llZXMsIHlvdSBtaWdodCBiZSBlbGlnaWJsZSBmb3IgdGhpcyBjcmVkaXQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVzZWFyY2ggYW5kIERldmVsb3BtZW50IENyZWRpdCAoRm9ybSA2NzY1KTo8L3N0cm9uZz4gRm9yIGJ1c2luZXNzZXMgZW5nYWdpbmcgaW4gcXVhbGlmaWVkIHJlc2VhcmNoIGFjdGl2aXRpZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q3JlZGl0IGZvciBFbXBsb3llci1Qcm92aWRlZCBDaGlsZCBDYXJlIEZhY2lsaXRpZXMgYW5kIFNlcnZpY2VzOjwvc3Ryb25nPiBJZiB5b3VyIGJ1c2luZXNzIHByb3ZpZGVzIGNoaWxkIGNhcmUgZmFjaWxpdGllcyBvciBzZXJ2aWNlcyB0byB5b3VyIGVtcGxveWVlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5DcmVkaXQgZm9yIFNtYWxsIEVtcGxveWVyIFBlbnNpb24gUGxhbiBTdGFydHVwIENvc3RzIGFuZCBBdXRvLUVucm9sbG1lbnQgKEZvcm0gODg4MSk6PC9zdHJvbmc+IElmIHlvdXIgYnVzaW5lc3MgaGFzIHNldCB1cCBvciBwbGFucyB0byBzZXQgdXAgYSBwZW5zaW9uIHBsYW4gZm9yIHlvdXIgZW1wbG95ZWVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPk90aGVyIGNyZWRpdHM6PC9zdHJvbmc+IEFkZGl0aW9uYWwgY3JlZGl0cyBjYW4gYmUgZm91bmQgaW4gZGV0YWlsIGF0IDxhIGhyZWY9XCJodHRwczovL3d3dy5pcnMuZ292L2luc3RydWN0aW9ucy9pMzgwMFwiPklSUyBJbnN0cnVjdGlvbnMgZm9yIEZvcm0gMzgwMDwvYT4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICBcclxuICAgIDxwPldlIHdvdWxkIGxpa2UgdG8gYXNzZXNzIHlvdXIgcG90ZW50aWFsIGVsaWdpYmlsaXR5IGZvciB0aGVzZSBjcmVkaXRzLiBQbGVhc2UgcmV2aWV3IHRoZSBhYm92ZSBsaXN0IGFuZCA8c3Ryb25nPmluZm9ybSB1cyBpZiB5b3UgYmVsaWV2ZSB5b3VyIGJ1c2luZXNzIG1heSBxdWFsaWZ5PC9zdHJvbmc+IGZvciBhbnkgb2YgdGhlbSBiYXNlZCBvbiB5b3VyIGN1cnJlbnQgb3BlcmF0aW9ucyBvciBmdXR1cmUgcGxhbnMuIEFkZGl0aW9uYWxseSwgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjcmVkaXRzIG5vdCBsaXN0ZWQgdGhhdCB5b3UgYmVsaWV2ZSBtYXkgYXBwbHkgdG8geW91ciBidXNpbmVzcywgbGV0IHVzIGtub3cuPC9wPlxyXG4gICAgXHJcbiAgICA8cD5Zb3VyIGluc2lnaHRzIHdpbGwgZ3JlYXRseSBhc3Npc3QgdXMgaW4gZW5zdXJpbmcgd2UgZXhwbG9yZSBhbGwgYXZlbnVlcyB0byByZWR1Y2UgeW91ciB0YXggbGlhYmlsaXR5IGFuZCBjYXBpdGFsaXplIG9uIGF2YWlsYWJsZSBjcmVkaXRzLjwvcD5cclxuICAgIFxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gYW55IG9mIHRoZXNlIGNyZWRpdHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQnVzaW5lc3MgQXNzZXRzIFNvbGRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkJ1c2luZXNzIEFzc2V0cyBTb2xkXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyB3ZSB3b3JrIHRvIGRpbGlnZW50bHkgcHJlcGFyZSB5b3VyIGJ1c2luZXNz4oCZcyB0YXggZG9jdW1lbnRhdGlvbiwgd2UgbmVlZCB0byBlbnN1cmUgY29tcGxldGVuZXNzIGFuZCBhY2N1cmFjeSBpbiByZXBvcnRpbmcgYWxsIHJlbGV2YW50IHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSB0YXggeWVhci4gQW4gaW1wb3J0YW50IGFyZWEgb2YgZm9jdXMgaXMgdGhlIHNhbGUgb2YgYW55IGJ1c2luZXNzIGFzc2V0cy4gVGhpcyBpbmNsdWRlcyBib3RoIGFzc2V0cyBhY3RpdmVseSBpbiB1c2UgYW5kIHRob3NlIHRoYXQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGVwcmVjaWF0ZWQuPC9wPlxyXG5cclxuICAgIDxwPlRoZSBzYWxlIG9mIGJ1c2luZXNzIGFzc2V0cyBjYW4gaGF2ZSBzaWduaWZpY2FudCB0YXggaW1wbGljYXRpb25zLCBpbmNsdWRpbmcgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzLCByZWNhcHR1cmUgb2YgZGVwcmVjaWF0aW9uLCBhbmQgaW1wYWN0cyBvbiB5b3VyIGJ1c2luZXNz4oCZcyBjYXNoIGZsb3cgYW5kIGZpbmFuY2lhbCBzdGF0ZW1lbnRzLiBBY2NvcmRpbmdseSwgaXQgaXMgY3J1Y2lhbCBmb3IgdXMgdG8gYWNjdXJhdGVseSByZXBvcnQgdGhlc2UgdHJhbnNhY3Rpb25zIHRvIHRoZSBJUlMuPC9wPlxyXG4gICAgXHJcbiAgICA8cD5QbGVhc2UgY29uZmlybSBpZiB5b3VyIGJ1c2luZXNzIGhhcyBzb2xkIGFueSBhc3NldHMgZHVyaW5nIHRoZSBjdXJyZW50IHRheCBwZXJpb2QgYnkgcHJvdmlkaW5nIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgXHJcbiAgICA8dWw+XHJcbiAgICAgIDxsaT48c3Ryb25nPkFzc2V0IERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggYXNzZXQgc29sZCAoZS5nLiwgZXF1aXBtZW50LCBwcm9wZXJ0eSwgdmVoaWNsZXMpLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgU2FsZTo8L3N0cm9uZz4gVGhlIGRhdGUgb24gd2hpY2ggZWFjaCBhc3NldCB3YXMgc29sZC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5TYWxlIFByb2NlZWRzOjwvc3Ryb25nPiBUaGUgYW1vdW50IG9mIG1vbmV5IHJlY2VpdmVkIGZyb20gdGhlIHNhbGUgb2YgZWFjaCBhc3NldC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5PcmlnaW5hbCBQdXJjaGFzZSBQcmljZSBhbmQgRGF0ZTo8L3N0cm9uZz4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBwdXJjaGFzZSBkYXRlIGZvciBlYWNoIGFzc2V0LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkFjY3VtdWxhdGVkIERlcHJlY2lhdGlvbjo8L3N0cm9uZz4gVGhlIHRvdGFsIGRlcHJlY2lhdGlvbiBjbGFpbWVkIG9uIGVhY2ggYXNzZXQgdXAgdG8gdGhlIHBvaW50IG9mIHNhbGUuPC9saT5cclxuICAgIDwvdWw+XHJcbiAgICBcclxuICAgIDxwPklmIHlvdSBoYXZlIG5vdCBzb2xkIGFueSBidXNpbmVzcyBhc3NldHMgZHVyaW5nIHRoaXMgcGVyaW9kLCBwbGVhc2UgY29uZmlybSB0aGlzIGFzIHdlbGwuIFlvdXIgdGltZWx5IHJlc3BvbnNlIHRvIHRoaXMgaW5xdWlyeSBpcyBjcnVjaWFsIGZvciB0aGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgXHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuIFdlIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LjwvcD5cclxuICAgIFxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvbWUgT2ZmaWNlIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSG9tZSBPZmZpY2UgRGVkdWN0aW9uIEluZm9ybWF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD48c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gSWYgeW91J3ZlIGFscmVhZHkgcmVjZWl2ZWQgYW5kIGNvbXBsZXRlZCBhIGJ1c2luZXNzIHVzZSBvZiBob21lIHNwcmVhZHNoZWV0IGZyb20gdXMsIHlvdSBjYW4gc2FmZWx5IGlnbm9yZSB0aGlzIGFjdGlvbiBpdGVtLiBXZSdsbCBjbG9zZSBpdCBvdXQgb25jZSB3ZSB2ZXJpZnkgd2UgaGF2ZSB0aGUgaW5mb3JtYXRpb24gb24gZmlsZS48L3A+XHJcbiAgXHJcbiAgICA8cD5Zb3UndmUgaW5kaWNhdGVkIHRoYXQgeW91IHVzZSBwYXJ0IG9mIHlvdXIgaG9tZSByZWd1bGFybHkgYW5kIGV4Y2x1c2l2ZWx5IGZvciBidXNpbmVzcyBwdXJwb3Nlcy4gVGhpcyBtYXkgcXVhbGlmeSB5b3UgZm9yIGEgaG9tZSBvZmZpY2UgZGVkdWN0aW9uLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGlzIGRlZHVjdGlvbiwgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICBcclxuICAgIDx1bD5cclxuICAgICAgPGxpPlRvdGFsIHNxdWFyZSBmb290YWdlIG9mIHlvdXIgaG9tZTwvbGk+XHJcbiAgICAgIDxsaT5TcXVhcmUgZm9vdGFnZSBvZiB5b3VyIGhvbWUgb2ZmaWNlPC9saT5cclxuICAgICAgPGxpPkJyaWVmIGRlc2NyaXB0aW9uIG9mIGhvdyB5b3UgdXNlIHRoaXMgc3BhY2UgZm9yIGJ1c2luZXNzPC9saT5cclxuICAgICAgPGxpPkhvbWUtcmVsYXRlZCBleHBlbnNlczogbW9ydGdhZ2UgaW50ZXJlc3QvcmVudCwgcHJvcGVydHkgdGF4ZXMsIGluc3VyYW5jZSwgdXRpbGl0aWVzLCByZXBhaXJzPC9saT5cclxuICAgICAgPGxpPkRpcmVjdCBleHBlbnNlcyBmb3IgdGhlIG9mZmljZSBzcGFjZTwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIFxyXG4gICAgPHA+SWYgeW91IGhhdmVuJ3QgcmVjZWl2ZWQgb3VyIGJ1c2luZXNzIHVzZSBvZiBob21lIHNwcmVhZHNoZWV0LCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCB3ZSdsbCBwcm92aWRlIGl0IHRvIHlvdSBmb3IgZWFzeSBjb21wbGV0aW9uIG9mIHRoaXMgaW5mb3JtYXRpb24uPC9wPlxyXG4gIFxyXG4gICAgPHA+VGhpcyBkYXRhIHdpbGwgaGVscCB1cyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIHBvdGVudGlhbCBob21lIG9mZmljZSBkZWR1Y3Rpb24gYW5kIG9wdGltaXplIHlvdXIgdGF4IHJldHVybi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGFzay48L3A+YFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJCdXNpbmVzcyBVc2Ugb2YgUGVyc29uYWwgVmVoaWNsZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGVyc29uYWwgVmVoaWNsZSBCdXNpbmVzcyBVc2UgSW5mb3JtYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSBwcm92aWRlZCB1cyB3aXRoIGEgY29tcGxldGVkIHZlaGljbGUgZXhwZW5zZSBsb2cgb3Igc3ByZWFkc2hlZXQgZm9yIHRoZSB0YXggeWVhciwgeW91IGNhbiBpZ25vcmUgdGhpcyBhY3Rpb24gaXRlbS4gV2UnbGwgY2xvc2UgaXQgb25jZSB3ZSB2ZXJpZnkgd2UgaGF2ZSB0aGUgaW5mb3JtYXRpb24gb24gZmlsZS48L3A+XHJcbiAgXHJcbiAgICA8cD5Zb3UndmUgaW5kaWNhdGVkIHRoYXQgeW91IHVzZSB5b3VyIHBlcnNvbmFsIHZlaGljbGUgZm9yIGJ1c2luZXNzIHB1cnBvc2VzLiBUaGlzIG1heSBxdWFsaWZ5IHlvdSBmb3IgdmVoaWNsZS1yZWxhdGVkIHRheCBkZWR1Y3Rpb25zLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGVzZSBkZWR1Y3Rpb25zLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gIFxyXG4gICAgPHVsPlxyXG4gICAgICA8bGk+VmVoaWNsZSBtYWtlLCBtb2RlbCwgYW5kIHllYXI8L2xpPlxyXG4gICAgICA8bGk+RGF0ZSB5b3Ugc3RhcnRlZCB1c2luZyB0aGUgdmVoaWNsZSBmb3IgYnVzaW5lc3M8L2xpPlxyXG4gICAgICA8bGk+V2FzIHRoZSB2ZWhpY2xlIHB1cmNoYXNlZCBpbiBhbnRpY2lwYXRpb24gb2YgYnVzaW5lc3MgdXNlPyBJZiB5ZXMsIHByb3ZpZGUgcHVyY2hhc2UgZGF0ZSBhbmQgY29zdDwvbGk+XHJcbiAgICAgIDxsaT5Ub3RhbCBtaWxlcyBkcml2ZW4gZHVyaW5nIHRoZSB0YXggeWVhcjwvbGk+XHJcbiAgICAgIDxsaT5CdXNpbmVzcyBtaWxlcyBkcml2ZW4gZHVyaW5nIHRoZSB0YXggeWVhcjwvbGk+XHJcbiAgICAgIDxsaT5Db21tdXRpbmcgbWlsZXMgKGlmIGFwcGxpY2FibGUpPC9saT5cclxuICAgICAgPGxpPkFjdHVhbCBleHBlbnNlczpcclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+R2FzIGFuZCBvaWw8L2xpPlxyXG4gICAgICAgICAgPGxpPk1haW50ZW5hbmNlIGFuZCByZXBhaXJzPC9saT5cclxuICAgICAgICAgIDxsaT5WZWhpY2xlIHJlZ2lzdHJhdGlvbiBmZWVzPC9saT5cclxuICAgICAgICAgIDxsaT5WZWhpY2xlIGluc3VyYW5jZTwvbGk+XHJcbiAgICAgICAgICA8bGk+TGVhc2UgcGF5bWVudHMgKGlmIGFwcGxpY2FibGUpPC9saT5cclxuICAgICAgICAgIDxsaT5QYXJraW5nIGZlZXMgYW5kIHRvbGxzIGZvciBidXNpbmVzcyB0cmlwczwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPkRvIHlvdSAob3IgeW91ciBzcG91c2UpIGhhdmUgYW5vdGhlciB2ZWhpY2xlIGF2YWlsYWJsZSBmb3IgcGVyc29uYWwgdXNlPzwvbGk+XHJcbiAgICAgIDxsaT5EbyB5b3UgaGF2ZSB3cml0dGVuIGV2aWRlbmNlIHRvIHN1cHBvcnQgeW91ciBtaWxlYWdlIGxvZz88L2xpPlxyXG4gICAgPC91bD5cclxuICBcclxuICAgIDxwPlBsZWFzZSBub3RlOiBJZiB5b3UgcHVyY2hhc2VkIHRoZSB2ZWhpY2xlIGluIGFudGljaXBhdGlvbiBvZiBidXNpbmVzcyB1c2UsIHdlIG1heSBiZSBhYmxlIHRvIGNsYWltIGRlcHJlY2lhdGlvbi4gVGhpcyBjb3VsZCBwb3RlbnRpYWxseSBpbmNyZWFzZSB5b3VyIGRlZHVjdGlvbiBidXQgbWF5IGFsc28gaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGZ1dHVyZSB0YXggeWVhcnMuPC9wPlxyXG4gIFxyXG4gICAgPHA+SWYgeW91IGhhdmVuJ3QgcmVjZWl2ZWQgb3VyIHZlaGljbGUgZXhwZW5zZSBsb2cgc3ByZWFkc2hlZXQsIHBsZWFzZSBsZXQgdXMga25vdywgYW5kIHdlJ2xsIHByb3ZpZGUgaXQgdG8geW91IGZvciBlYXN5IGNvbXBsZXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbi48L3A+XHJcbiAgXHJcbiAgICA8cD5UaGlzIGRhdGEgd2lsbCBoZWxwIHVzIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgdmVoaWNsZS1yZWxhdGVkIGRlZHVjdGlvbnMgYW5kIG9wdGltaXplIHlvdXIgdGF4IHJldHVybi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBhYm91dCB3aGF0IHF1YWxpZmllcyBhcyBidXNpbmVzcyB1c2Ugb3IgaG93IHRvIHRyYWNrIHlvdXIgbWlsZWFnZSwgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGFzay48L3A+YFxyXG4gIH1cclxuXTtcclxuIl19