QXV0aG9yOiBKZXNzaWNhIFRvbWVjaGFrCgpVcGRhdGVkOiBBdWd1c3QgOCwgMjAxMgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldIQVQnUyBJTiBUSElTIFJFUE9TSVRPUlk6IFdPUksgSU4gUFJPR1JFU1MKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgcmVwb3NpdG9yeSBjb250YWlucyB0aGUgc291cmNlIGZpbGVzIGZvciBDbG91ZFN0YWNrIGRvY3VtZW50YXRpb24uIFRoZSBmaWxlcyBhcmUgY3VycmVudGx5IGluY29tcGxldGUgYXMgd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGNvbnZlcnRpbmcgZG9jdW1lbnRhdGlvbiBmcm9tIGFuIG91dGRhdGVkIGZpbGUgZm9ybWF0IGludG8gWE1MIGZpbGVzIGZvciB0aGlzIHJlcG8uClRoZSBjb21wbGV0ZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBzZWVuIGF0IGRvY3MuY2xvdWRzdGFjay5vcmcuCgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkRPQ1VNRU5UQVRJT04gU1VCRElSRUNUT1JJRVMKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClVuaXRlZCBTdGF0ZXMgRW5nbGlzaCBsYW5ndWFnZSBzb3VyY2UgZmlsZXMgYXJlIGluIHRoZSBlbi1VUyBzdWJkaXJlY3RvcnkuCkFkZGl0aW9uYWwgbGFuZ3VhZ2Ugc3ViZGlyZWN0b3JpZXMgY2FuIGJlIGFkZGVkLgoKCkVhY2ggZmlsZSBpbiBhIGxhbmd1YWdlIHN1YmRpcmVjdG9yeSBjb250YWlucyBvbmUgY2h1bmsgb2YgaW5mb3JtYXRpb24gdGhhdCBtYXkgYmUgdGVybWVkIGEgc2VjdGlvbiwgbW9kdWxlLCBvciB0b3BpYy4gVGhlIGZpbGVzIGFyZSB3cml0dGVuIGluIERvY2Jvb2sgWE1MLCB1c2luZyB0aGUgRG9jYm9vayB2ZXJzaW9uIGFuZCB0YWcgc3VwcG9ydGVkIGJ5IHRoZSBQdWJsaWNhbiBvcGVuLXNvdXJjZSBkb2N1bWVudGF0aW9uIHRvb2wuCgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClZBTElEIFhNTCBUQUdTCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpDZXJ0YWluIHRhZ3MgYXJlIGRpc2FsbG93ZWQgYnkgUHVibGljYW4uIFBsZWFzZSBjb25zdWx0IHRoZWlyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4KaHR0cDovL2pmZWFybi5mZWRvcmFwZW9wbGUub3JnL2VuLVVTL1B1YmxpY2FuLzIuNy9odG1sL1VzZXJzX0d1aWRlLwoKWW91ciBiZXN0IGJldCBpcyB0byBjb3B5IGFuIGV4aXN0aW5nIFhNTCBmaWxlIGFuZCBmaWxsIGluIHlvdXIgb3duIGNvbnRlbnQgYmV0d2VlbiB0aGUgdGFncy4KCkF0IHRoZSBib3R0b20gb2YgdGhpcyBSRUFETUUsIHRoZXJlIGlzIGEgZmlsbC1pbi10aGUtYmxhbmtzIFhNTCB0ZW1wbGF0ZSB0aGF0IHlvdSBjYW4gZ28gZnJvbS4gSXQgc2hvd3MgdGhlIGNvbW1vbmx5IHVzZWQgdGFncyBhbmQgZXhwbGFpbnMgYSBiaXQgYWJvdXQgaG93IHRvIHVzZSB0aGVtLgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClNFQ1RJT05TLCBDSEFQVEVSUywgQU5EIEJPT0sgRklMRVMKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBmaWxlcyBmb3IgZXZlcnkgdG9waWMgYW5kIGF1ZGllbmNlIGFyZSBpbiBhIHNpbmdsZSBkaXJlY3RvcnkuIFRoZSBjb250ZW50IGlzIG5vdCBkaXZpZGVkIGludG8gc2VwYXJhdGUgc3ViZGlyZWN0b3JpZXMgZm9yIGVhY2ggYm9vaywgb3Igc2VwYXJhdGUgcmVwb3NpdG9yaWVzIGZvciBlYWNoIGJvb2suIFRoZXJlZm9yZSwgdGhlIGNvbnRlbnQgY2FuIGJlIGZsZXhpYmx5IGFuZCBlYXNpbHkgcmUtdXNlZC4gSW4gbW9zdCBjYXNlcywgYSBmaWxlIGNvbnRhaW5zIGEgc2luZ2xlIHNlY3Rpb24gdGhhdCBjYW4gYmUgYXNzZW1ibGVkIHdpdGggb3RoZXIgc2VjdGlvbnMgdG8gYnVpbGQgYW55IGRlc2lyZWQgc2V0IG9mIGluZm9ybWF0aW9uLiBUaGVzZSBmaWxlcyBjb250YWluIDxzZWN0aW9uPiAuLi4gPC9zZWN0aW9uPiB0YWdzLgoKClNvbWUgb2YgdGhlIFhNTCBmaWxlcyBjb250YWluIG9ubHkgYSBzZXJpZXMgb2YgaW5jbHVkZSB0YWdzIHRvIHB1bGwgaW4gY29udGVudCBmcm9tIG90aGVyIGZpbGVzLiBTdWNoIGFuICJpbmNsdWRlIGZpbGUiIGlzIGVpdGhlciBhIG1ham9yIHNlY3Rpb24sIGEgY2hhcHRlciBpbiBhIGJvb2ssIG9yIHRoZSBtYXN0ZXIgYm9vayBmaWxlLiBBIGNoYXB0ZXIgY29udGFpbnMgPGNoYXB0ZXI+IC4uLiA8L2NoYXB0ZXI+IHRhZ3MuCgoKVGhlIG1hc3RlciBib29rIGZpbGUgY29udGFpbnMgPGJvb2s+IC4uLiA8L2Jvb2s+IHRhZ3MuIFRoaXMgZmlsZSBpcyByZWZlcnJlZCB0byBpbiB0aGUgUHVibGljYW4gY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgaXMgdXNlZCBhcyB0aGUgY29udHJvbGxpbmcgZmlsZSB3aGVuIGJ1aWxkaW5nIHRoZSBib29rLgoKCkRvY3VtZW50IG5hbWVzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGRvY25hbWUgc2V0dGluZyBpbiB0aGUgYXBwcm9wcmlhdGUgLmNmZyBmaWxlLiAKVGhpcyBzaG91bGQgbm90IGhhdmUgQ2xvdWRTdGFjayBpbiB0aGUgbmFtZSAod2hpY2ggaXMgcmVkdW5kYW50IGJlY2F1c2Ugb2YgCnRoZSBDbG91ZFN0YWNrIGJyYW5kIHRoYXQgdGhlIGRvY3VtZW50YXRpb24gaXMgYnVpbHQgd2l0aC4gVGhlIGRvY25hbWUgdmFyaWFibGUKc2V0cyB0aGUgbmFtZSBpbiB0aGUgZG9jIHNpdGUgdGFibGUgb2YgY29udGVudHMuIFRoaXMgbmFtZSBhbHNvIG5lZWRzIHRvIGV4aXN0CmFzIC54bWwgYW5kIC5lbnQgaW4gdGhlIGVuLVVTIGRpcmVjdG9yeS4gRXhhbXBsZXMgb2YgYXBwcm9wcmlhdGUgZG9jbmFtZXM6IApBZG1pbl9HdWlkZQpBUElfRGV2ZWxvcGVyc19HdWlkZQpJbnN0YWxsYXRpb25fR3VpZGUKCgoKCkEgUHVibGljYW4gYm9vayBmaWxlIG11c3QgYWxzbyBoYXZlIGNlcnRhaW4gb3RoZXIgdGFncyB0aGF0IGFyZSBleHBlY3RlZCBieQpQdWJsaWNhbiB3aGVuIGl0IGJ1aWxkcyB0aGUgcHJvamVjdC4gQ29weSBhbiBleGlzdGluZyBtYXN0ZXIgYm9vayBmaWxlIHRvCmdldCB0aGVzZSB0YWdzLgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkNPTkZJRyBGSUxFUwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGVhY2ggYm9vayBmaWxlLCB0aGVyZSBtdXN0IGJlIGEgY29ycmVzcG9uZGluZyBwdWJsaWNhbi5jZmcgKG9yCjxvdGhlcl9uYW1lPi5jZmcpIGZpbGUgaW4gb3JkZXIgdG8gYnVpbGQgdGhlIGJvb2sgd2l0aCBQdWJsaWNhbi4gVGhlCmRvY25hbWU6IGF0dHJpYnV0ZSBpbiB0aGUgY29uZmlnIGZpbGUgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgbWFzdGVyIGJvb2sgZmlsZTsKZm9yIGV4YW1wbGUsIGRvY25hbWU6IGNsb3Vkc3RhY2sgY29ycmVzcG9uZHMgdG8gdGhlIG1hc3RlciBib29rIGZpbGUgCmNsb3Vkc3RhY2sueG1sLgoKClRoZSAuY2ZnIGZpbGVzIHJlc2lkZSBpbiB0aGUgbWFpbiBkaXJlY3RvcnksIGRvY3MuIFRvIGJ1aWxkIGEgZGlmZmVyZW50IGJvb2ssCmp1c3QgdXNlIHRoZSBQdWJsaWNhbiBjb21tYW5kIGxpbmUgZmxhZyAtLWNvbmZpZz08ZmlsZW5hbWU+LmNmZy4gKFdlIGFsc28KbmVlZCBwZXItYm9vayBlbnRpdGllcywgQm9va19JbmZvLCBBdXRob3JfSW5mbywgYW5kIG90aGVyIFB1YmxpY2FuIGZpbGVzLgpUaGUgdGVjaG5pcXVlIGZvciBwdWxsaW5nIHRoZXNlIGluIGlzIFRCRC4pCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVE8gQlVJTEQgQSBCT09LCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpXZSB3aWxsIHNldCB1cCBhbiBhdXRvbWF0aWMgUHVibGljYW4gam9iIHRoYXQgZ2VuZXJhdGVzIG5ldyBvdXRwdXQgd2hlbmV2ZXIgd2UKY2hlY2sgaW4gY2hhbmdlcyB0byB0aGlzIHJlcG9zaXRvcnkuIFlvdSBjYW4gYWxzbyBidWlsZCBhIGJvb2sgbG9jYWxseSBhcyAKZm9sbG93cy4KCgpGaXJzdCwgaW5zdGFsbCBQdWJsaWNhbiwgYW5kIGdldCBhIGxvY2FsIGNvcHkgb2YgdGhlIGJvb2sgc291cmNlIGZpbGVzLgoKClB1dCB0aGUgZGVzaXJlZCBwdWJsaWNhbi5jZmcgaW4gdGhlIGRvY3MgZGlyZWN0b3J5LiBHbyB0byB0aGUgY29tbWFuZCBsaW5lLCBjZAp0byB0aGF0IGRpcmVjdG9yeSwgYW5kIHJ1biB0aGUgcHVibGljYW4gYnVpbGQgY29tbWFuZC4gU3BlY2lmeSB3aGF0IG91dHB1dCAKZm9ybWF0KHMpIGFuZCB3aGF0IGxhbmd1YWdlKHMpIHlvdSB3YW50IHRvIGJ1aWxkLiBBbHdheXMgc3RhcnQgd2l0aCBhIHRlc3QgCnJ1bi4gRm9yIGV4YW1wbGU6CgoKcHVibGljYW4gYnVpbGQgLS1mb3JtYXRzIHRlc3QgLS1sYW5ncyBlbi1VUwoKCi4uLmZvbGxvd2VkIGJ5IHRoaXMgY29tbWFuZCBpZiB0aGUgdGVzdCBpcyBzdWNjZXNzZnVsOgoKCnB1YmxpY2FuIGJ1aWxkIC0tZm9ybWF0cyBodG1sLHBkZiAtLWxhbmdzIGVuLVVTCgoKT3V0cHV0IHdpbGwgYmUgZm91bmQgaW4gdGhlIHRtcCBzdWJkaXJlY3Rvcnkgb2YgdGhlIGRvY3MgZGlyZWN0b3J5LgoKCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpMT0NBTElaQVRJT04KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkxvY2FsaXplZCB2ZXJzaW9ucyBvZiB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlcyBjYW4gYmUgc3RvcmVkIGluIGFwcHJvcHJpYXRlbHkgCm5hbWVkIHN1YmRpcmVjdG9yaWVzIHBhcmFsbGVsIHRvIGVuLVVTLiBUaGUgbGFuZ3VhZ2UgY29kZSBuYW1lcyB0byB1c2UgZm9yIAp0aGVzZSBkaXJlY3RvcmllcyBhcmUgbGlzdGVkIGluIFB1YmxpY2FuIGRvY3VtZW50YXRpb24sIApodHRwOi8vamZlYXJuLmZlZG9yYXBlb3BsZS5vcmcvZW4tVVMvUHVibGljYW4vMi43L2h0bWwvVXNlcnNfR3VpZGUvYXBwZS1Vc2Vyc19HdWlkZS1MYW5ndWFnZV9jb2Rlcy5odG1sLgpGb3IgZXhhbXBsZSwgSmFwYW5lc2UgWE1MIGZpbGVzIHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgZG9jcy9qYS1KUCBkaXJlY3RvcnkuCgpMb2NhbGl6YXRpb24gY3VycmVudGx5IGhhcHBlbnMgdXNpbmcgVHJhbnNpZmV4IGFuZCB5b3UgY2FuIGZpbmQgdGhlIHN0cmluZ3MgCnRvIGJlIHRyYW5zbGF0ZWQgYXQgdGhpcyBsb2NhdGlvbjogCmh0dHBzOi8vd3d3LnRyYW5zaWZleC5jb20vcHJvamVjdHMvcC9BQ1NfRE9DUy8KCkluIHByZXBhcmF0aW9uIGZvciBsMTBuLCBhdXRob3JzIGFuZCBkb2NzIGZvbGtzIG11c3QgdGFrZSBub3Qgb2YgYSBudW1iZXIgb2YKdGhpbmdzLiAKQWxsIC54bWwgZmlsZXMgbXVzdCBjb250YWluIGEgdHJhbnNsYXRhYmxlIHN0cmluZy4gPHhpOmluY2x1ZGU+IHRhZ3MgYXJlIG5vdCBlbm91Z2guIApBbGwgbmV3IC54bWwgZmlsZXMgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBkb2NzLy50eC9jb25maWcgCkZpbGVuYW1lcyBzaG91bGQgYmUgbGVzcyB0aGFuIDUwIGNoYXJhY3RlcnMgbG9uZy4gCgpUbyBnZW5lcmF0ZSBuZXcgUE9UIGZpbGVzIGFuZCB1cGxvYWQgc291cmNlIGRvIHRoZSBmb2xsb3dpbmc6IApwdWJsaWNhbiB1cGRhdGVfcG90IC0tY29uZmlnPS4vcHVibGljYW4tYWxsLmNmZwp0eCBwdXNoIC1zIAoKVG8gcmVjZWl2ZSB0cmFuc2xhdGVkIGZpbGVzIGZyb20gcHVibGljYW4sIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CnR4IHB1bGwgCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQ09OVFJJQlVUSU5HCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpDb250cmlidXRvcnMgY2FuIGNyZWF0ZSBuZXcgc2VjdGlvbiwgY2hhcHRlciwgYm9vaywgcHVibGljYW4uY2ZnLCBvciBsb2NhbGl6ZWQgCi54bWwgZmlsZXMgYXQgYW55IHRpbWUuIFN1Ym1pdCB0aGVtIGZvbGxvd2luZyB0aGUgc2FtZSBwYXRjaCBhcHByb3ZhbCBwcm9jZWR1cmUKdGhhdCBpcyB1c2VkIGZvciBjb250cmlidXRpbmcgdG8gQ2xvdWRTdGFjayBjb2RlLiBNb3JlIGluZm9ybWF0aW9uIGZvciAKY29udHJpYnV0b3JzIGlzIGF2YWlsYWJsZSBhdCAKaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9DTE9VRFNUQUNLL0RvY3VtZW50YXRpb24rVGVhbS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRBR1MgRk9SIEEgU0VDVElPTgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjUvZG9jYm9va3guZHRkIiBbCjwhRU5USVRZICUgQk9PS19FTlRJVElFUyBTWVNURU0gImNsb3Vkc3RhY2suZW50Ij4KJUJPT0tfRU5USVRJRVM7Cl0+Cgo8IS0tIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC4KIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwogdW5kZXIgdGhlIExpY2Vuc2UuCi0tPgoKPCEtLSBQbGVhc2Uga2VlcCB0aGUgZG9jdHlwZSBhbmQgbGljZW5zZSBkZWNsYXJhdGlvbnMgYWJvdmUgaW50YWN0IGluIGVhY2ggZG9jIGZpbGUuICAtLT4KPCEtLSBNYWtlIHlvdXIgbW9kaWZpY2F0aW9ucyBiZWxvdyB0aGlzIGxpbmUuICAtLT4KCjxzZWN0aW9uIGlkPSJJTlNFUlQgQSBVTklRVUUgU0VDVElPTiBJRCBIRVJFLCBQUk9CQUJMWSBNQVRDSElORyBUSEUgVElUTEUgQkVMT1cuIEtFRVAgVEhFIFFVT1RFIE1BUktTLiI+CiAgICA8dGl0bGU+VGV4dCBvZiB0aGUgc2VjdGlvbiB0aXRsZTwvdGl0bGU+CiAgICA8cGFyYT5IZXJlJ3MgdGhlIHRleHQgb2YgYSBwYXJhZ3JhcGggaW4gdGhpcyBzZWN0aW9uLjwvcGFyYT4KICAgIDxwYXJhPkFsd2F5cyB1c2UgJlBST0RVQ1Q7IHJhdGhlciB0aGFuIHR5cGluZyBDbG91ZFN0YWNrLjwvcGFyYT4KICAgIDxwYXJhPkluZGVudCB3aXRoIDQgc3BhY2VzLCBub3Qgd2l0aCB0YWIgY2hhcmFjdGVycy48L3BhcmE+CiAgICA8cGFyYT5UbyBoeXBlcmxpbmsgdG8gYSBVUkwgb3V0c2lkZSB0aGlzIGRvY3VtZW50OiA8dWxpbmsgdXJsPSJodHRwOi8vZXh0ZXJuYWwgVVJMIGhlcmUiPkRpc3BsYXkgdGV4dCBvZiB0aGUgbGluayBoZXJlPC91bGluaz48L3BhcmE+CiAgICA8cGFyYT5UbyBoeXBlcmxpbmsgdG8gYW5vdGhlciBzZWN0aW9uIGluIHRoaXMgZG9jdW1lbnQ6IDx4cmVmIGxpbmtlbmQ9IlNFQ1RJT04gSUQgT0YgVEhFIE9USEVSIFNFQ1RJT04gR09FUyBIRVJFLiIgLz4KICAgICAgICBUaGUgcHVibGljYXRpb24gdG9vbHMgd2lsbCBhdXRvbWF0aWNhbGx5IGluc2VydCB0aGUgZGlzcGxheSB0ZXh0IG9mIHRoZSBsaW5rIGZvciB5b3UuPC9wYXJhPgogICAgPG5vdGU+PHBhcmE+VXNlIHRoaXMgZm9yIGFsbCB0aXBzIGFuZCBhc2lkZXMuIERvbid0IHVzZSBvdGhlciB0YWdzIHN1Y2ggYXMgdGlwLgogICAgICAgIE91ciBwdWJsaWNhdGlvbiB0b29sIChwdWJsaWNhbikgcHJlZmVycyB0aGUgbm90ZSB0YWcuIFRoZSB0b29sIHdpbGwgCiAgICAgICAgYXV0b21hdGljYWxseSBpbnNlcnQgdGhlIHRleHQgTk9URTogZm9yIHlvdSwgc28gcGxlYXNlIGRvbid0IHR5cGUgaXQuPC9wYXJhPjwvbm90ZT4KICAgIDx3YXJuaW5nPjxwYXJhPlVzZSB0aGlzIGZvciBhbnl0aGluZyB0aGF0IGlzIHZpdGFsIHRvIGF2b2lkIHJ1bnRpbWUgZXJyb3JzLiBEb24ndCB1c2UKICAgICAgICBvdGhlciB0YWdzIHN1Y2ggYXMgY2F1dGlvbi4gT3VyIHB1YmxpY2F0aW9uIHRvb2wgKHB1YmxpY2FuKSBwcmVmZXJzIHRoZSB3YXJuaW5nIHRhZy4gVGhlIHRvb2wgd2lsbCBhdXRvbWF0aWNhbGx5IGluc2VydCB0aGUgdGV4dCBXQVJOSU5HOiBmb3IgeW91LCBzbyBwbGVhc2UgZG9uJ3QgdHlwZSBpdC48L3BhcmE+PC93YXJuaW5nPgogICAgPHBhcmE+SGVyZSdzIGhvdyB0byBkbyBhIGJ1bGxldGVkIGxpc3Q6PC9wYXJhPgogICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVsbGV0ZWQgbGlzdCBpdGVtIHRleHQuPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICA8L2l0ZW1pemVkbGlzdD4KICAgIDxwYXJhPkhlcmUncyBob3cgdG8gZG8gYSBudW1iZXJlZCBsaXN0LiBUaGVzZSBhcmUgdXNlZCBmb3Igc3RlcCBieSBzdGVwIGluc3RydWN0aW9ucyAKICAgICAgICBvciB0byBkZXNjcmliZSBhIHNlcXVlbmNlIG9mIGV2ZW50cyBpbiB0aW1lLiBGb3IgZXZlcnl0aGluZyBlbHNlLCB1c2UgYSBidWxsZXRlZCBsaXN0LjwvcGFyYT4KICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGV4dCBvZiB0aGUgc3RlcDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgbWlnaHQgYWxzbyB3YW50IGEgc3ViLWxpc3Qgd2l0aGluIG9uZSBvZiB0aGUgbGlzdCBpdGVtcy4gTGlrZSB0aGlzOjwvcGFyYT4KICAgICAgICAgICAgPG9yZGVyZWRsaXN0IG51bWVyYXRpb249Imxvd2VyYWxwaGEiPgogICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklubmVyIGxpc3QgaXRlbSB0ZXh0LjwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L29yZGVyZWRsaXN0PgogICAgPHBhcmE+SGVyZSdzIGhvdyB0byBpbnNlcnQgYW4gaW1hZ2UuIFB1dCB0aGUgZ3JhcGhpYyBmaWxlIGluIGltYWdlcy8sIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhpcyBYTUwgZmlsZSBpcy4KICAgICAgICBSZWZlciB0byBpdCB1c2luZyB0aGlzIHRhZy4gVGhlIHRhZyBpcyBhZG1pdHRlZGx5IGNvbXBsZXgsIGJ1dCBpdCdzIHRoZSBvbmUgd2UgbmVlZCB0byB1c2Ugd2l0aCBwdWJsaWNhbjo8L3BhcmE+CiAgICA8bWVkaWFvYmplY3Q+CiAgICAgICAgPGltYWdlb2JqZWN0PgogICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9Ii4vaW1hZ2VzL1lPVVJfRklMRU5BTUVfSEVSRS5wbmciIC8+CiAgICAgICAgPC9pbWFnZW9iamVjdD4KICAgICAgICA8dGV4dG9iamVjdD48cGhyYXNlPllPVVJfRklMRU5BTUVfSEVSRS5wbmc6IEFsdCB0ZXh0IGRlc2NyaWJpbmcgdGhpcyBpbWFnZSwgc3VjaCBhcyAKICAgICAgICAgICAgk3N0cnVjdHVyZSBvZiBhIHpvbmUulCBSZXF1aXJlZCBmb3IgYWNjZXNzaWJpbGl0eS48L3BocmFzZT48L3RleHRvYmplY3Q+CiAgICA8L21lZGlhb2JqZWN0PgogICAgPHBhcmE+QSBzZWN0aW9uIGNhbiBjb250YWluIHN1Yi1zZWN0aW9ucy4gUGxlYXNlIG1ha2UgZWFjaCBzdWItc2VjdGlvbiBhIHNlcGFyYXRlIGZpbGUgdG8gZW5hYmxlIHJldXNlLgogICAgICAgIFRoZW4gaW5jbHVkZSB0aGUgc3ViLXNlY3Rpb24gbGlrZSB0aGlzOjwvcGFyYT4KICAgIDx4aTppbmNsdWRlIGhyZWY9IlNVQlNFQ1RJT05fRklMRV9OQU1FLnhtbCIgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiIC8+Cjwvc2VjdGlvbj4KCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVEFHUyBGT1IgQSBDSEFQVEVSCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgo8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNS8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiIFsKPCFFTlRJVFkgJSBCT09LX0VOVElUSUVTIFNZU1RFTSAiY2xvdWRzdGFjay5lbnQiPgolQk9PS19FTlRJVElFUzsKXT4KCjwhLS0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLgogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCiB1bmRlciB0aGUgTGljZW5zZS4KLS0+Cgo8IS0tIFBsZWFzZSBrZWVwIHRoZSBkb2N0eXBlIGFuZCBsaWNlbnNlIGRlY2xhcmF0aW9ucyBhYm92ZSBpbnRhY3QgaW4gZWFjaCBkb2MgZmlsZS4gIC0tPgo8IS0tIE1ha2UgeW91ciBtb2RpZmljYXRpb25zIGJlbG93IHRoaXMgbGluZS4gIC0tPgoKPGNoYXB0ZXIgaWQ9IklOU0VSVCBBIFVOSVFVRSBTRUNUSU9OIElEIEhFUkUsIFBST0JBQkxZIE1BVENISU5HIFRIRSBUSVRMRSBCRUxPVy4gS0VFUCBUSEUgUVVPVEUgTUFSS1MuIj4KICAgIDx0aXRsZT5UZXh0IG9mIHRoZSBjaGFwdGVyIHRpdGxlPC90aXRsZT4KICAgIDx4aTppbmNsdWRlIGhyZWY9IlNFQ1RJT05fT05FX0ZJTEVOQU1FLnhtbCIgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiIC8+CiAgICA8eGk6aW5jbHVkZSBocmVmPSJTRUNUSU9OX1RXT19GSUxFTkFNRS54bWwiIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIiAvPgo8L2NoYXB0ZXI+CgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRBR1MgRk9SIEEgQk9PSwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjUvZG9jYm9va3guZHRkIiBbCjwhRU5USVRZICUgQk9PS19FTlRJVElFUyBTWVNURU0gImNsb3Vkc3RhY2suZW50Ij4KJUJPT0tfRU5USVRJRVM7Cl0+Cgo8IS0tIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC4KIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwogdW5kZXIgdGhlIExpY2Vuc2UuCi0tPgoKPCEtLSBQbGVhc2Uga2VlcCB0aGUgZG9jdHlwZSBhbmQgbGljZW5zZSBkZWNsYXJhdGlvbnMgYWJvdmUgaW50YWN0IGluIGVhY2ggZG9jIGZpbGUuICAtLT4KPCEtLSBNYWtlIHlvdXIgbW9kaWZpY2F0aW9ucyBiZWxvdyB0aGlzIGxpbmUuICAtLT4KCjxib29rPgogICAgPHhpOmluY2x1ZGUgaHJlZj0iQm9va19JbmZvLnhtbCIgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiIC8+CiAgICA8eGk6aW5jbHVkZSBocmVmPSJDSEFQVEVSX09ORV9GSUxFTkFNRS54bWwiIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIiAvPgogICAgPHhpOmluY2x1ZGUgaHJlZj0iQ0hBUFRFUl9UV09fRklMRU5BTUUueG1sIiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSIgLz4KPC9ib29rPgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQkFTSUMgUlVMRVMgRk9SIElOQ0xVREUgU1RBVEVNRU5UUwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBIGJvb2sgZmlsZSBtdXN0IGluY2x1ZGUgY2hhcHRlciBmaWxlcy4KQSBjaGFwdGVyIGZpbGUgbXVzdCBpbmNsdWRlIHNlY3Rpb24gZmlsZXMuCkEgc2VjdGlvbiBmaWxlIGNhbiBpbmNsdWRlIG90aGVyIHNlY3Rpb24gZmlsZXMsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8uCg==