QWxsIGZpbGVzIHVuZGVyIHRoaXMgY29udHJpYiBkaXJlY3RvcnkgYXJlIFVOU1VQUE9SVEVELiBUaGVyZSB3ZXJlCnByb3ZpZGVkIGJ5IHVzZXJzIG9mIHpsaWIgYW5kIHdlcmUgbm90IHRlc3RlZCBieSB0aGUgYXV0aG9ycyBvZiB6bGliLgpVc2UgYXQgeW91ciBvd24gcmlzay4gUGxlYXNlIGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlIGNvbnRyaWJ1dGlvbnMKZm9yIGhlbHAgYWJvdXQgdGhlc2UsIG5vdCB0aGUgemxpYiBhdXRob3JzLiBUaGFua3MuCgoKYWRhLyAgICAgICAgYnkgRG1pdHJpeSBBbmlzaW1rb3YgPGFuaXNpbWtvdkB5YWhvby5jb20+CiAgICAgICAgU3VwcG9ydCBmb3IgQWRhCiAgICAgICAgU2VlIGh0dHA6Ly96bGliLWFkYS5zb3VyY2Vmb3JnZS5uZXQvCgphc201ODYvCmFzbTY4Ni8gICAgIGJ5IEJyaWFuIFJhaXRlciA8YnJlYWRib3hAbXVwcGV0bGFicy5jb20+CiAgICAgICAgYXNtIGNvZGUgZm9yIFBlbnRpdW0gYW5kIFBQcm8vUElJLCB1c2luZyB0aGUgQVQmVCAoR05VIGFzKSBzeW50YXgKICAgICAgICBTZWUgaHR0cDovL3d3dy5tdXBwZXRsYWJzLmNvbS9+YnJlYWRib3gvc29mdHdhcmUvYXNzZW1ibHkuaHRtbAoKYmxhc3QvICAgICAgYnkgTWFyayBBZGxlciA8bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdT4KICAgICAgICBEZWNvbXByZXNzb3IgZm9yIG91dHB1dCBvZiBQS1dhcmUgRGF0YSBDb21wcmVzc2lvbiBMaWJyYXJ5IChEQ0wpCgpkZWxwaGkvICAgICBieSBDb3NtaW4gVHJ1dGEgPGNvc21pbnRAY3MudWJiY2x1ai5ybz4KICAgICAgICBTdXBwb3J0IGZvciBEZWxwaGkgYW5kIEMrKyBCdWlsZGVyCgpkb3R6bGliLyAgICBieSBIZW5yaWsgUmF2biA8aGVucmlrQHJhdm4uY29tPgogICAgICAgIFN1cHBvcnQgZm9yIE1pY3Jvc29mdCAuTmV0IGFuZCBWaXN1YWwgQysrIC5OZXQKCmd6YXBwZW5kLyAgIGJ5IE1hcmsgQWRsZXIgPG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHU+CiAgICAgICAgYXBwZW5kIHRvIGEgZ3ppcCBmaWxlIC0tIGlsbHVzdHJhdGVzIHRoZSB1c2Ugb2YgWl9CTE9DSwoKaW5mYmFjazkvICAgYnkgTWFyayBBZGxlciA8bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdT4KICAgICAgICBVbnN1cHBvcnRlZCBkaWZmcyB0byBpbmZiYWNrIHRvIGRlY29kZSB0aGUgZGVmbGF0ZTY0IGZvcm1hdAoKaW5mbGF0ZTg2LyAgYnkgQ2hyaXMgQW5kZXJzb24gPGNocmlzdG9wQGNoYXJtLm5ldD4KICAgICAgICBUdW5lZCB4ODYgZ2NjIGFzbSBjb2RlIHRvIHJlcGxhY2UgaW5mbGF0ZV9mYXN0KCkKCmlvc3RyZWFtLyAgIGJ5IEtldmluIFJ1bGFuZCA8a2V2aW5Acm9kaW4ud3VzdGwuZWR1PgogICAgICAgIEEgQysrIEkvTyBzdHJlYW1zIGludGVyZmFjZSB0byB0aGUgemxpYiBneiogZnVuY3Rpb25zCgppb3N0cmVhbTIvICBieSBUeWdlIEz4dnNldCA8VHlnZS5Mb3ZzZXRAY21yLm5vPgogICAgICAgIEFub3RoZXIgQysrIEkvTyBzdHJlYW1zIGludGVyZmFjZQoKaW9zdHJlYW0zLyAgYnkgTHVkd2lnIFNjaHdhcmR0IDxzY2h3YXJkdEBzdW4uYWMuemE+CiAgICAgICAgICAgIGFuZCBLZXZpbiBSdWxhbmQgPGtldmluQHJvZGluLnd1c3RsLmVkdT4KICAgICAgICBZZXQgYW5vdGhlciBDKysgSS9PIHN0cmVhbXMgaW50ZXJmYWNlCgptYXNtNjg2LyAgICBieSBEYW4gSGlnZG9uIDxoZGFuQGtpbmVzb2Z0LmNvbT4KICAgICAgICAgICAgYW5kIENodWNrIFdhbGJvdXJuIDxjaHVja3dAa2luZXNvZnQuY29tPgogICAgICAgIGFzbSBjb2RlIGZvciBQZW50aXVtIFByby9QSUksIHVzaW5nIHRoZSBNQVNNIHN5bnRheAoKbWFzbXg4Ni8gICAgYnkgR2lsbGVzIFZvbGxhbnQgPGluZm9Ad2luaW1hZ2UuY29tPgogICAgICAgIHg4NiBhc20gY29kZSB0byByZXBsYWNlIGxvbmdlc3RfbWF0Y2goKSBhbmQgaW5mbGF0ZV9mYXN0KCksCiAgICAgICAgZm9yIFZpc3VhbCBDKysgYW5kIE1BU00KCm1pbml6aXAvICAgIGJ5IEdpbGxlcyBWb2xsYW50IDxpbmZvQHdpbmltYWdlLmNvbT4KICAgICAgICBNaW5pIHppcCBhbmQgdW56aXAgYmFzZWQgb24gemxpYgogICAgICAgIFNlZSBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL3VuemlwLmh0bWwKCnBhc2NhbC8gICAgIGJ5IEJvYiBEZWxsYWNhIDxib2JkbEB4dHJhLmNvLm56PiBldCBhbC4KICAgICAgICBTdXBwb3J0IGZvciBQYXNjYWwKCnB1ZmYvICAgICAgIGJ5IE1hcmsgQWRsZXIgPG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHU+CiAgICAgICAgU21hbGwsIGxvdyBtZW1vcnkgdXNhZ2UgaW5mbGF0ZS4gIEFsc28gc2VydmVzIHRvIHByb3ZpZGUgYW4KICAgICAgICB1bmFtYmlndW91cyBkZXNjcmlwdGlvbiBvZiB0aGUgZGVmbGF0ZSBmb3JtYXQuCgp0ZXN0emxpYi8gICBieSBHaWxsZXMgVm9sbGFudCA8aW5mb0B3aW5pbWFnZS5jb20+CiAgICAgICAgRXhhbXBsZSBvZiB0aGUgdXNlIG9mIHpsaWIKCnVudGd6LyAgICAgIGJ5IFBlZHJvIEEuIEFyYW5kYSBHdXRpZXJyZXogPHBhYWdAdGlkLmVzPgogICAgICAgIEEgdmVyeSBzaW1wbGUgdGFyLmd6IGZpbGUgZXh0cmFjdG9yIHVzaW5nIHpsaWIKCnZzdHVkaW8vICAgIGJ5IEdpbGxlcyBWb2xsYW50IDxpbmZvQHdpbmltYWdlLmNvbT4KICAgICAgICBCdWlsZGluZyBhIG1pbml6aXAtZW5oYW5jZWQgemxpYiB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCg==