U3VuIFNlcCAxNyAxNzo1ODozNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmMgZGVidWdYTUwuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgdmFsaWQuYyB4cGF0aC5jOgoJICByZW1vdmVkIGEgZmV3IHdhcm5pbmdzIGluIHBlZGFudGljIG1vZGUgLi4uCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jOiBtb3ZlZCBlbmNvZGluZyBzd2l0Y2hpbmcgZnVuY3Rpb24KCSAgdG8gcGFyc2VySW50ZXJuYWxzLmMKCSogY29uZmlndXJlLmluLCBkb2MvTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IHJlbGVhc2VkIDIuMi4zCgpTYXQgU2VwIDE2IDIwOjEyOjQxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IHNldCBjdHh0LT5lcnJObyBiZWZvcmUgY2FsbGluZyB0aGUKCSAgZXJyb3Igb3Igd2FybmluZyBoYW5kbGVycwoKV2VkIFNlcCAxMyAyMjowMzoxOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VySW50ZXJuYWxzLmggcGFyc2VyLmMgTWFrZWZpbGUuYW06CgkgIGNyZWF0ZWQgYSBuZXcgbW9kdWxlIHBhcnNlckludGVybmFscy5jLCBtb3ZlZCBtb3N0IG9mIHRoZQoJICBjb2RlIHNoYXJlZCBieSB0aGUgdmFyaW91cyBwYXJzZXJzIHRoZXJlLCBhcyB3ZWxsIGFzCgkgIGRlcHJlY2F0ZWQgIGNvZGUgZnJvbSBwYXJzZXIuYy4gTW9yZSBjbGVhbnVwIG9mIHBhcnNlci5jCgkqIHVyaS5jOiBmaXhlZCBhIHByb2JsZW0gd2hlbiBVUkkgaXMgTlVMTAoJKiB2YWxpZC5jOiBzcGVlZHVwIHdoZW4gbG9va2luZyBmb3IgYW4gYXR0cmlidXRlIGRlY2xhcmF0aW9uCgpTdW4gU2VwIDEwIDE3OjUzOjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB0cmVlLmMgU0FYLmMgcGFyc2VyLmMgZW50aXRpZXMuYyBkZWJ1Z1hNTC5jOiBmaW5pc2hlZAoJICB0aGUgY2xlYW51cCBvZiB0aGUgY29tcHV0YXRpb24gb2YgVVJJIHJlZmVyZW5jZXMgd2hlbiBzZWVraW5nCgkgIGV4dGVybmFsIGVudGl0aWVzLiBUaGUgVVJJIHJlZmVyZW5jZSBzdHJpbmcgYW5kIHRoZSByZXN1bHRpbmcKCSAgVVJJIGFyZSBib3RoIHN0b3JlZCBub3cuCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYyB2YWxpZC5jIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhwYXRoLmM6CgkgIGxhcmdlIHMobilwcmludGYgY2hlY2tzIGFuZCBjbGVhbnVwIGZyb20gRGVuaXMgQmFyYmllcgoJICA8YmFyYmllckBpbWFjcy5wb2x5dGVjaG5pcXVlLmZyPgoJKiB4bWx2ZXJzaW9uLmguaW4gdHJlZS5oOiBjb3VwbGUgb2YgU0dNTCBkZWNsYXJhdGlvbnMgZm9yIGEKCSAgcG9zc2libGUgZG9jYm9vayBtb2R1bGUuCgkqIHJlc3VsdC9WQy8gOiBhIGNvdXBsZSBvZiB0ZXN0IG91dHB1dCBjaGFuZ2VkIGR1ZSB0byB0aGUgY2hhbmdlCgkgIG9mIHRoZSBlbnRpdGllcyBVUkkKClN1biBTZXAgMTAgMTU6NTk6NTggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5oOiBhZGRlZCBhIF9wcml2YXRlIGZpZWxkIGZvciBsaW5raW5nIHVzZXIncyBkYXRhCgpTdW4gU2VwIDEwIDE1OjE0OjQzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuaDogZGVtYWNyb2lmaWVkIG1vc3Qgb2YgdGhlIElTX1hYWAoJICB0aGUgZ2FpbiBpbiBzaXplIGlzIHNpZ25pZmljYW50IHNvIC4uLgoKRnJpIFNlcCAgOCAyMDo0ODoyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuYzogY2FzZXMgd2hlcmUgbG9va2luZyB1cCBlbnRpdGllcyB3aXRoIGRvYz09TlVMTAoJICBjb3ZlcmVkCgpUdWUgU2VwICA1IDEyOjQxOjE1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYzogYXBwbGllZCBXYXluZSBEYXZpc29uIHBhdGNoCgkqIE1ha2VmaWxlLmluIHRlc3QvVVJJL3VyaS5kYXRhIHJlc3VsdC9VUkkvdXJpLmRhdGE6IHVwZGF0ZWQgVVJJIHRlc3RzCgpNb24gU2VwICA0IDEzOjAxOjQ1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB0ZXN0VXJpLmM6IGFwcGxpZWQgV2F5bmUgRGF2aXNvbiBwYXRjaGVzCgkqIHRlc3QvVVJJL3VyaS5kYXRhIHJlc3VsdC9VUkkvdXJpLmRhdGE6IGZpcnN0IHNldCBvZiB0ZXN0cy9yZXN1bHRzCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBVUkl0ZXN0IGFuZCBpbmNsdWRlZCB0aGVuaW4gIm1ha2UgdGVzdHMiCgpTdW4gU2VwICAzIDE5OjE5OjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWx2ZXJzaW9uLmguaW46IGNsb3NlZCBidWcgMjI5NDEKClRodSBBdWcgMzEgMTY6NTU6NTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWxpby5odG1sOiBhZGRlZCBkb2MgYW5kIGV4YW1wbGUgZm9yIGVudGl0eSBsb2FkZXIKCSAgcmVkZWZpbml0aW9uLgoKVGh1IEF1ZyAzMSAxNDo1OToyOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbGlvLmh0bWwgZG9jL3htbC5odG1sOiBhZGRlZCBhIGRvYyBvbiB0aGUgSS9PIG1lY2hhbmlzbQoJICB1c2VkIGJ5IGxpYnhtbAoKVHVlIEF1ZyAyOSAyMDoyMjo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IEZpeGVkIGJ1ZyBvbiBpbnZhbGlkIG9udGVudCBjaGFyYWN0ZXJzIGFuZCB3aGVuIHVzaW5nCgkgIHB1c2guCgkqIHhtbGxpbnQuYzogZml4ZWQgeG1sbGludCBlbmRsaW5nIG9mIGVycm9ycyBpbiBwdXNoIG1vZGUKClR1ZSBBdWcgMjkgMTE6MjQ6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyB0ZXN0SFRNTC5jOiBhcHBsaWVkIHR3byBuZXcgcGF0Y2hlcyBmcm9tCgkgIFdheW5lIERhdmlzb24gPHdheW5lZEBibG9yZi5uZXQ+CgkqIHJlc3VsdC9IVE1MLyouc2F4OiByZWdlbmVyYXRlZCBIVE1MIFNBWCBvdXRwdXQKCSogcGFyc2VyLmM6IG1vcmUgY2xlYW51cC4KCk1vbiBBdWcgMjggMTE6NTg6MTIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXSB0ZXN0SFRNTC5jOiBhcHBsaWVkIHRoZSBzZWNvbmQgc2V0IG9mCgkgIHBhdGNoZXMgZnJvbSBXYXluZSBEYXZpc29uIDx3YXluZWRAYmxvcmYubmV0PiwgYWRkaW5nIAoJICBodG1sRW5jb2RlRW50aXRpZXMoKQoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGFuIGlnbm9yYWJsZSB3aGl0ZSBzcGFjZSBkZXRlY3Rpb24gYnVnCgkgIG9jY3VyaW5nIHdoZW4gcGFyc2luZyB3aXRoIFNBWCBvbmx5CgkqIHJlc3VsdC9IVE1MLyouc2F4OiB1cGRhdGVkIHNpbmNlIHRoZSBvdXRwdXQgaXMgbm93IEhUTUwKCSAgZW5jb2RlZC4uLgoKTW9uIEF1ZyAyOCAwMDozODozMSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdOiBhcHBsaWVkIHNvbWUgb2YgV2F5bmUgRGF2aXNvbiA8d2F5bmVkQGJsb3JmLm5ldD4KCSAgcGF0Y2hlcwoKU3VuIEF1ZyAyNyAyMjoxNDowMSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmMgdHJlZS5jIGRlYnVnWE1MLmM6IGZpeGVkIGJvZ3VzIGJlaGF2aW91ciB3aGVuIGFuCgkgIHVuZGVjbGFyZWQgbmFtZXNwYWNlIHByZWZpeCB3YXMgdXNlZCwgYWRkZWQgYSB3YXJuaW5nLgoJICBDbGVhbmVkIHVwIHN1cHBvcnQgdy5yLnQuIGVudGl0aWVzLCBzcGlsbGluZyBvdXQgYSB3YXJuaW5nCgkgIGFuZCBiZWluZyBwZWRhbnRpYyBvbiBsb29rdXBzLgoJKiB0ZXN0L3dhcm5pbmcvZW50OSA6IGFkZGVkIHRlc3RjYXNlIGZvciBwcmV2aW91cyBleGFtcGxlLgoJKiBUT0RPOiB1cGRhdGVkCgkqIHBhcnNlckludGVybmFscy5oIHBhcnNlci5jOiBjaGFuZ2VkIHRoZSB3YXkgbmFtZXMgYXJlIHBhcnNlZAoJICBub3cgYWxsb3cgaW5maW5pdGUgc2l6ZSBhbmQgZGVjcmVhc2UgcGVuYWx0eSBmb3Igbm9ybWFsIHVzZQoJKiBwYXJzZXIuYzogU3RhcnRlZCBhIGJpZyBjbGVhbnVwL2NoZWNrIG9mIHRoZSBwYXJzZXIgY29kZSwKCSAgZml4ZWQgc29tZSBvZiB0aGUgbW9zdCB0b3J0dW91cyBlbnRpdHkgY29kZSwgc3BvdHRlZCBjb2RlCgkgIHVudXNlZCBhbnltb3JlCgkqIHRlc3QvKjogYWRkZWQgdGVzdHMgZm9yIHZlcnkgbG9uZyBuYW1lcyBhbmQgcmVsYXRlZCBuYXN0eQoJICB0aGluZ3MuCgpTYXQgQXVnIDI2IDIzOjMxOjA0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvZW5jb2RpbmcuaHRtbDogYWRkZWQgZW5jb2RpbmcgYWxpYXNlcyBkb2MKCSogZG9jL3htbC5odG1sOiB1cGRhdGVzCgkqIGVuY29kaW5nLltjaF06IGFkZGVkIEVuY29kaW5nQWxpYXNlcyBmdW5jdGlvbnMKCSogZW50aXRpZXMuW2NoXSB2YWxpZC5bY2hdIGRlYnVnWE1MLmM6IHJlbW92ZWQgdHdvIHNlcmlvdXMKCSAgYm90dGxlbmVjayBhZmZlY3RpbmcgbGFyZ2UgRFREcyBsaWtlIERvY2Jvb2sKCSogcGFyc2VyLltjaF0geG1sbGludC5jOiBhZGRlZCBhIHBlZGFudGljIG9wdGlvbiwgd2lsbCBiZQoJICB1c2VmdWwKCSogU0FYLmM6IHJlZGVmaW5pdGlvbiBvZiBlbnRpdGllcyBpcyByZXBvcnRlZCBpbiBwZWRhbnRpYyBtb2RlCgkqIHRlc3RIVE1MLmM6IHVuaW5pdGlhbGl6ZWQgd2FybmluZyBmcm9tIGdjYwoJKiB1cmkuYzogZml4ZWQgYSBjb3VwbGUgb2YgYnVncwoJKiBUT0RPOiBhZGRlZCBpc3N1ZSByYWlzZWQgYnkgTWljaGFlbAoKV2VkIEF1ZyAyMyAwMTo1MDo1MSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL2VuY29kaW5nLmh0bWw6IHByb3BhZ2F0ZWQgTWFydGluIER1ZXJzdCBzdWdnZXN0aW9ucwoKV2VkIEF1ZyAyMyAwMDoyMzo0MSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IEZpeGVkIEJ1ZyMyMTU1MjogbGlieG1sIGZhaWxzIHRvIGRlY29kZSAmYW1wOwoJKiB1cmkuYyB0ZXN0VXJpLmMgcGF0Y2hlcywgYnkgTWFyYyBTYW5mYWNvbiAoMSBsZWZ0KQoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IEhUTUwvZW5jb2RpbmcgcHVzaCBwcm9ibGVtcyByZXBvcnRlZGkKCSAgYnkgV2F5bmUgRGF2aXNvbgoKU3VuIEF1ZyAyMCAxNzowMzozOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IHNtYWxsIGNsZWFudXAKCSogVE9ETzogdXBkYXRlZAoKU2F0IEF1ZyAxOSAyMjo1NzowMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgYW4gb2xkIFZDIHRlc3RjYXNlIGFuZCB1cGRhdGVkIHRpdGxlLnhtbCBlbnRpdHkKClNhdCBBdWcgMTkgMjE6MDI6MDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBTQVguYyB0cmVlLmMgSFRNTHRyZWUuaCByZXN1bHQvSFRNTC8qOiB3b3JrCgkgIGRvbmUgb24gYXV0by1vcGVuaW5nIG9mIDxwPiB0YWdzIGFuZCBjbGVhbnVwIG9mIFNBWCBvdXRwdXQKClNhdCBBdWcgMTkgMTg6NDU6NDAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC40ICB4bWxsaW50LjEgTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IGFkZGVkIG1hbiBwYWdlcwoKU2F0IEF1ZyAxOSAxODozODo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIGxpYnhtbC4qIHN0cnVjdHVyZS4qOiB1cGRhdGVkIHRoZSBkb2MgYSBiaXQKClRodSBBdWcgMTcgMTU6NTA6MDAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3RTQVguYyB0ZXN0SFRNTC5jIHJlc3VsdC9IVE1MLzogY2xlYW51cCBvZiB0aGUgb3V0cHV0CgkgIG9mIFNBWCB0ZXN0cwoKTW9uIEF1ZyAxNCAxMzo1NjozMyBFRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBQYXRjaCBmcm9tIEFsYmVydCBDaGluLUEtWW91bmcgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT46CgkqIHhtbGxpbnQuYzogd29ya2Fyb3VuZCBhIE1BUF9GQUlMRWQgZGVmaW5pdGlvbiBidWcgaW4gRFUtNC4wCgpNb24gQXVnIDE0IDExOjEwOjIwIEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFBhdGNoIGZyb20gRGF2ZSBZZWFya2UgPHllYXJrZUBlbmcuYnVmZmFsby5lZHU+OgoJKiB0ZXN0SFRNTC5jOiBmaXggY29yZSBkdW1wIG9uIFNvbGFyaXMgMi54IHN5c3RlbXMKCSogSFRNTHBhcnNlci5jOiBmaXggc2VnZmF1bHQgaWYgY3R4dC0+c2F4LT5jaGFyYWN0ZXJzKCkgaXMgTlVMTAoJKiByZXN1bHQvSFRNTC8qLnNheDogcHJldmlvdXMgYnVnIGZpeCBsZWFkIHRvIG5ldyByZXN1bHRzCgpNb24gQXVnIDE0IDEwOjI2OjA5IEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFBhdGNoIGZyb20gQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPjoKCSogY29uZmlndXJlLmluOiBhZGRlZCAtLXdpdGgtcmVhZGxpbmU9RElSIHRvIGFjY2VwdCBhbHRlcm5hdGUKCSAgcGF0aCBmb3IgcmVhZGxpbmUgaW5jbHVkZS9saWJyYXJ5CgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgQU1fQ19QUk9UT1RZUEVTIHRvIGFkZCAtQWEgLURfSFBVWF9TT1VSQ0UKCSAgZm9yIEFOU0kgdW5kZXIgSFAtVVgKCSogY29uZmlnLmluOiBSZW1vdmVkIEBMSUJTQCBmcm9tIHhtbC1jb25maWcgYmVjYXVzZSBAWE1MX0xJQlNACgkgIGluY2x1ZGVzIEBMSUJTQAoKU2F0IEF1ZyAxMiAyMzoxOTo0MiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2NzCgkqIGdldHRpbmcgcmVhZHkgZm9yIDIuMi4yIHJlbGVhc2UKClNhdCBBdWcgMTIgMTY6NDI6MzcgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF06IGFkZGVkIHhtbEdldEZlYXR1cmVzTGlzdCgpIHhtbEdldEZlYXR1cmUoKQoJICBhbmQgeG1sQWRkRmVhdHVyZSgpCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sQWRkQ2hpbGRMaXN0KCkKCSogeG1sbGludC5jOiBNQVBfRkFJTEVEIG1hY3JvIHRlc3QKCSogcGFyc2VyLmg6IGFkZGVkIHhtbFBhcnNlQ3R4dEV4dGVybmFsRW50aXR5KCkKCSogdmFsaWQuYzogYXBwbGllZCBidWcgZml4ZXMgcmVtb3ZlZCB3YXJuaW5nCgkqIHRyZWUuYzogYWRkZWQgQ0RBVEEgYmxvY2sgdG8gZWxlbWVudHMgY29udGVudAoJKiB0ZXN0U0FYLmM6IGNsZWFudXAgb2Ygb3V0cHV0CgkqIHRlc3RIVE1MLmM6IGFkZGVkIFNBWCB0ZXN0aW5nCgkqIGVuY29kaW5nLmM6IGJldHRlciBlcnJvciByZWNvdmVyeQoJKiBTQVguYywgcGFyc2VyLmM6IGZpeGVkIG9uZSBvZiB0aGUgZXh0ZXJuYWwgZW50aXR5IHByb2Nlc3NpbmcKCSAgb2YgdGhlIE9BU2lzIHRlc3RzdWl0ZQoJKiBNYWtlZmlsZS5hbTogYWRkZWQgSFRNTCBTQVggcmVncmVzc2lvbiB0ZXN0cwoJKiBjb25maWd1cmUuaW46IGJ1bXBlZCB0byAyLjIuMgoJKiB0ZXN0L0hUTUwvIHJlc3VsdC9IVE1MOiBhZGRlZCBhIGZldyBvZiBIVE1MIHRlc3RzLCBhbmQgYWRkZWQgdGhlCgkgIFNBWCByZXN1bHRzCgpGcmkgQXVnICA0IDExOjIxOjUwIFBEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcGF0Y2ggZm9yIEhQIGNvbXBpbGVyCgoyMDAwLTA4LTA0ICBTdmVuIEhlaW5pY2tlICA8c3ZlbkB6ZW4ub3JnPgoKCSogeG1sbGludC5jOiBXYXMgY29yZWR1bXBpbmcgc29tZXRpbWVzIHdoZW4gdGhlIGZpbGUgZ2l2ZW4gZGlkbid0CglleGlzdC4KClNhdCBKdWwgMjIgMDU6NTk6MDUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHhtbElPLltjaF06IGZpeGVkIHRoZSBwcm9ibGVtIG9mIGVuY29kaW5nIHN1cHBvcnQKCgkgIHdoZW4gdXNpbmcgaW4gbWVtb3J5IHBhcnNpbmcuIE5lZWQgc29tZSBjbGVhbnVwLgoJKiB4bWxsaW50LmMgY29uZmlndXJlLmluOiBhZGRlZCBhIC0tbWVtb3J5IGZsYWcgdG8gdGVzdCBtZW1vcnkKCSAgcGFyc2luZwoJCkZyaSBKdWwgMjEgMTc6MDk6NTcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmM6IGZpeGVkIHNvY2tsZW5fdCByZXBsYWNlbWVudCB0byB1bnNpZ25lZCBpbnQKCSogcGFyc2VyLmM6IGZpeGVkIGEgc3BhY2UgaGFuZGRsaW5nIG1pc3NpbmcgYXQgdGhlIGVuZCBvZgoJICBwcm9kdWN0aW9uIDI4IERPQ1RZUEUuCgkqIHhtbG1lbW9yeS5jOiBmaXhlZCBhIHN0dXBpZCBidWcgb24gdGhlIHJvdXRpbmUgdG8gb3ZlcnJpZGUKCSAgYWxsb2NhdGlvbiBmdW5jdGlvbnMKCSogVE9ETzogdXBkYXRlZAoKRnJpIEp1bCAxNCAxNzowMToxNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyByZWdlbmVyYXRlZCB0aGUgZG9jcwoKRnJpIEp1bCAxNCAxNjoxMjoyMCBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL2VuY29kaW5nLmh0bWwgZG9jL3htbC5odG1sOiBhZGRlZCBJMThOIGRvYwoJKiBlbmNvZGluZy5bY2hdIEhUTUx0cmVlLltjaF0gcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBJMThOIGVuY29kaW5nCgkgIGltcHJvdmVtZW50cywgYm90aCBwYXJzZXIgYW5kIGZpbHRlcnMsIGFkZGVkIEFTQ0lJICYgSFRNTCwKCSAgZml4ZWQgdGhlIElTTy1MYXRpbi0xIG9uZQoJKiB4bWxsaW50LmMgdGVzdEhUTUwuYzogYWRkZWQvbWFkZSB2aXNpYmxlIC0tZW5jb2RlCgkqIGRlYnVnWE1MLmMgOiBjbGVhbnVwCgkqIG1vc3QgLmMgZmlsZXM6IGFwcGxpZWQgcGF0Y2hlcyBkdWUgdG8gd2FybmluZyBvbiBXaW5kb3dzIGFuZAoJICB3aGVuIHVzaW5nIFN1biBQcm8gY2MgY29tcGlsZXIKCSogeHBhdGguYyA6IGNsZWFudXAgbWVtbGVha3MKCSogbmFub2Z0cC5jIDogYWRkZWQgYSBURVNUSU5HIHByZXByb2Nlc3NvciBmbGFnIGZvciBzdGFuZGFsb25nCgkgIGNvbXBpbGUgc28gdGhhdCBwZW9wbGUgY2FuIHJlcG9ydCBidWdzIG1vcmUgZWFzaWxseQoJKiBuYW5vaHR0cC5jIDogZGl0Y2hlZCBzb2NrbGVuX3Qgd2hpY2ggd2FzIGEgcG9ydGFiaWxpdHkgbWVzcwoJICBhbmQgcmVwbGFjZWQgaXQgd2l0aCB1bnNpZ25lZCBpbnQuCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sSGFzUHJvcCgpCgkqIFRPRE86IHVwZGF0ZWQKCSogdGVzdC8gOiBhZGRlZCBtb3JlIHRlc3QgZm9yIGVudGl0aWVzLCBOUywgZW5jb2RpbmcsIEhUTUwsIHdhcAoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBmb3IgMi4yLjAgcmVsZWFzZQoKTW9uIEp1bCAxMCAxNjoxNzoxOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jOiBmaXhlZCB0aGUgd2F5IHRoZSBjb250cm9sIGNvbm5lY3Rpb24gaXMgaGFuZGxlZAoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgdGhlIGRlcGVuZGFuY2llcyBhbmQgY2xlYW51cAoKTW9uIEp1bCAgMyAxNDozNzowNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sOiBjaGFuZ2VkIHRoZSB4bWxzb2Z0Lm9yZyBzdHJ1Y3R1cmUsIHVwZGF0ZWQgdGhlCgkgIGV4YW1wbGVzIHcuci50LiByb290IGFuZCBjaGlsZHMKClN1biBKdWwgIDIgMjA6NTE6NDMgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCBidWcgIzc0MTksIGRlcGVuZGFuY2llcyBmb3VsZWQgZm9yIGxpYnhtbC1kZXZlbAoKU3VuIEp1bCAgMiAwOTo1Mjo0NSBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBXb3JrIG9uIGNoYXJhY3RlciBlbmNvZGluZyBzdXBwb3J0IGZvciB0aGUgSFRNTCBwYXJzZXIKCSogSFRNTHBhcnNlci5jOiBGaXhlZCBzb21lIGF1dG9vcGVuL2F1dG9jbG9zZSBwcm9icyBmb3IgdGhlIEhUTUwgcGFyc2VyCgkqIGVuY29kaW5nLmM6IEZpeGVkIGEgcG90ZW50aWFsIG1lbWxlYWsgaW4gdGhlIGVuY29kaW5nIHN0dWZmCgpTYXQgSnVsICAxIDEzOjQ0OjIyIE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvRkFRLmh0bWwgZG9jL01ha2VmaWxlLmFtIDogYWRkZWQgYSBGQVEKCkZyaSBKdW4gMzAgMjA6Mjk6MDggTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIHZhbGlkLmMgdHJlZS5oIDogbW9yZSBjbGVhbnVwCgkgIG9mIHRoZSBIVE1MIHBhcnNlciB0byBmb3JjZSBpdCB0byBub3QgYnlwYXNzIFNBWAoKRnJpIEp1biAzMCAxMToxOTo1OSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogd2luMzJjb25maWcuaC5pbjogdXBkYXRlZAoJKiB4bWx2ZXJzaW9uLmguaW46IGNyYXAgZm9yZ290IHRvIHVwZGF0ZSB0aGlzLCB0aGlzIG1lYW4gMi4xLjAKCSAgbGFja3MgaWNvbnYgc3VwcG9ydCA6LSggbmVlZCB0byByZWxlYXNlIDIuMS4xCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzZSAyLjEuMQoJKiBIVE1McGFyc2VyOiBmaXhlZCBidWcgIzE0Nzg0CgkqIHhwYXRoLmMgSFRNTHBhcnNlci5jIGVuY29kaW5nLmMgcGFyc2VyLmM6IGZpeCB3YXJuaW5nIHJhaXNlZAoJICBieSBXaW5kb3dzIGNvbXBpbGVyCgkqIEhUTUxwYXJzZXIuYyBTQVguYyBIVE1MdHJlZS5oIHRyZWUuaDogY3JlYXRlIEhUTUwgZG9jdW1lbnQgaW4KCSAgdGhlIFNBWCBzdGFydERvY3VtZW50KCkgY2FsbGJhY2suCgkqIFRPRE86IHVwZGF0ZWQKClRodSBKdW4gMjkgMTI6MDY6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIHhtbFN0b3BQYXJzZXIoKQoKV2VkIEp1biAyOCAyMzoxMDoyNiBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiAyLjEuMCBwcmVyZWxlYXNlCgkqIExhcmdlIHJlc3luYyBiZXR3ZWVuIFczQyBhbmQgR25vbWUgdHJlZQoJKiBuYW5vZnRwLCBuYW5vaHR0cC5jOiBmaXhlZCBzdGFsbGVkIGNvbm5lY3Rpb25zIHByb2JzCgkqIEhUTUx0cmVlLmMgU0FYLmMgOiBzdXBwb3J0IGZvciBhdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZXMgaW4KCSAgSFRNTCBmb3IgYW5kZXJzY2EKCSogdmFsaWQuYzogRml4ZWQgbW9zdCB2YWxpZGF0aW9uICsgbmFtZXNwYWNlIHByb2JsZW1zCgkqIEhUTUxwYXJzZXIuYzogc3RhcnQgZG9jdW1lbnQgY2FsbGJhY2sgZm9yIGFuZGVyc2NhCgkqIGRlYnVnWE1MLmMgeHBhdGguYzogbG90cyBvZiBYUGF0aCBmaXh1cHMgZnJvbSBQaWNkYXIgVGVjaG5vbG9neQoJKiBwYXJzZXIuaCwgU0FYLmM6IHNlcmlvdXMgc3BlZWQgaW1wcm92ZW1lbnQgZm9yIGxhcmdlCgkgIENEQVRBIGJsb2NrcwoJKiBlbmNvZGluZy5bY2hdIHhtbElPLltjaF06IEltcHJvdmVkIHNlcmlvdXNseSBzYXZpbmcgdG8KCSAgZGlmZmVyZW50IGVuY29kaW5nCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW0gZXhhbXBsZS9nam9icmVhZC5jIHRyZWUuaDogd29yayBvbiAKCSAgbGlieG1sMSBsaWJ4bWwyIGNvbnZlcmdlbmNlLgoJKiBjb25maWcuaC5pbiBwYXJzZXIuYyB4bWxsaW50LmM6IGFkZGVkIHhtbENoZWNrVmVyc2lvbigpCgkgIGFuZCB0aGUgTElCWE1MX1RFU1RfVkVSU0lPTiBtYWNybwoKRnJpIEp1biAyMyAyMjoyNjowNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sOiB2YXJpb3VzIHBhdGNoZXMgYW5kIGltcHJvdmVtZW50cyB0eXBvIGZpeGVkIGJ5CgkgIEZlbGl4IE5hdHRlcgoJKiBkb2MvbGlieG1sLWRvYy5lbDogRW1hY3MgbW9kdWxlIHRvIGxvb2t1cCB0aGUgbGlieG1sIGRvY3VtZW50YXRpb24KCSAgZnJvbSBGZWxpeCBOYXR0ZXIgPGZuYXR0ZXJAZ214Lm5ldD4KClNhdCBNYXkgIDYgMTA6MDk6NDUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy91cGdyYWRlLmh0bWw6IHVwZGF0ZWQgd2l0aCBpbnN0cnVjdGlvbnMgZm9yIHN1cHBvcnQgb2YgYm90aAoJICBsaWJ4bWwtMS54IGFuZCBsaWJ4bWwtMi54CgkqIGRvYy9nam9icmVhZC5jIDogYXBwbGllZCBUb2RkIER1a2VzIDx0ZHVrZXNAaWJtb3RvLmNvbT4gcGF0Y2gKCSAgZm9yIDIueCBzdXBwb3J0IGFuZCBhbHNvIGZpeGVkIGluY2x1ZGVzCgoKV2VkIE1heSAgMyAxNDoyMToyNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW5jb2RpbmcuW2NoXSwgeG1sSU8uW2NoXSwgcGFyc2VyLmMsIGNvbmZpZ3VyZS5pbiA6IHJldmFtcGVkCgkgIHRoZSBlbmNvZGluZyBzdXBwb3J0LCBhZGRlZCBpY29udiBzdXBwb3J0LCBzbyBub3cgbGlieG1sIGlmCgkgIGNvbXBpbGVkIHdpdGggaWNvbnYgYXV0b21hdGljYWxseSBzdXBwb3J0IGphcGFuZXNlIGVuY29kaW5ncwoJICBhbW9uZyBvdGhlcnMuIFdvcmsgYmFzZWQgb24gaW5pdGlhbCBwYXRjaCBmcm9tIFl1YW4tQ2hlbiBDaGVuZwoJICBJIG1heSBoYXZlIGJyb2tlbiBiaW5hcnkgY29tcGF0IGluIHRoZSBlbmNvZGluZyBoYW5kbGVyCgkgIHJlZ2lzdHJhdGlvbiBzY2hlbWUsIGJ1dCB0aGF0IHdhcyBzbyB1dHRlcmx5IGJyb2tlbiBJIGRvbid0CgkgIGV4cGVjdCBhbnlib2R5IHRvIGhhdmUgdXNlZCB0aGlzIGZlYXR1cmUgdW50aWwgbm93LgoJKiBwYXJzZXJJbnRlcm5hbHMuaDogZml4dXAgb24gdGhlIENIQVIgcmFuZ2UgbWFjcm8KCSogeG1sLWVycm9yLmgsIHBhcnNlci5jOiBjYXRjaCBVUkwvVVJJIGVycm9ycyB1c2luZyB0aGUgdXJpLmMKCSAgY29kZS4KCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxCdWZmZXJHcm93KCksIHdhcyBuZWVkZWQgZm9yIGljb252CgkqIHVyaS5jOiBhZGRlZCB4bWxQYXJzZVVSSSgpIEkgY2FuJ3QgYmVsaWV2ZSBJIGZvcmdvdCB0bwoJICBpbXBsZW1lbnQgdGhpcyBvbmUgaW4gMi4wICEhIQoJKiBTQVguYzogbW92ZWQgZG9jLT5lbmNvZGluZyB1cGRhdGUgaW4gdGhlIGVuZERvY3VtZW50KCkgY2FsbC4KCSogVE9ETzogdXBkYXRlZC4KCk1vbiBBcHIgMjQgMTM6MzA6MTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaDogcmVtb3ZlZCBleHRyYW5lb3VzIHhtbFJlbW92ZVByb3AgZGVmaW5pdGlvbgoJKiBUT0RPOiBhZGRlZCBpdGVtIGFib3V0IC0tZGlzYWJsZS1jb3JiYSBjb25maWd1cmUgc3dpdGNoCgkqIHRyZWUuYyBwYXJzZXIuYzogZml4ZWQgcHJvYmxlbXMgZm9yIHhtbENvcHlEb2MgYW5kIHBvc3R2YWxpZGF0aW9uCgkqIG5hbm9mdHAuYzogZml4ZWQgaW5jbHVkZSBwcm9ibGVtcyBnaXZpbmcgdHJvdWJsZXMgb24gQUlYIGFuZCAKCSAgc2xvd2xhcmlzCgkqIHhtbElPLltjaF0gdmFsaWQuaCB0cmVlLltjaF0geGxpbmsuYyB4bWxtZW1vcnkuYyB1cmkuYyAKCSAgcGFyc2VyLmMgbmFub2Z0cC5jIG5hbm9odHRwLmMgU0FYLmMgdGVzdFNBWC5jIDoKCSAgY29tbWVudCBhbmQgaGVhZGVycyBjaGFuZ2VzIHRvIGxvd2VyIGd0ay1kb2MgbnVtYmVyIG9mIHdhcm5pbmdzCgkqIGRvYy9odG1sLyo6IHJlYnVpbHQgZG9jcwoKU3VuIEFwciAxNiAxMToyMzoyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSEFDS0lORzogZG9jdW1lbnRlZCB0aGUgdGFnIGZvciAxLnggYW5kIGluc3RydWN0aW9ucwoKV2VkIEFwciAxMiAxNTo0NzoyMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sSU8uW2NoXSBwYXJzZXIuW2NoXTogTW9yZSBpbnRlcmZhY2VzIGZvciBuZXcgSS9PIGZ1bmN0aW9ucwoJICB4bWxOZXdJT0lucHV0U3RyZWFtLCB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUlPLAoJICB4bWxDcmVhdGVJT1BhcnNlckN0eHQKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmg6IHNwZWVkdXAgb2YgSVNfQ0hBUiBsaWtlIG1hY3JvcywKCSAgc2lnbmlmaWNhbnQgb3ZlcmFsbCBpbXByb3ZlbWVudAoJKiB4bWxsaW50LmM6IGFkZGVkIEkvTyB0ZXN0IHRvIHhtbGxpbnQKCSogdGVzdFNBWC5jOiBhZGRlZCBhIHNwZWVkIHRlc3QKCSogZG9jLyogOiB1cGRhdGVkL3JlZ2VuZXJhdGVkCgpTYXQgQXByICA4IDE0OjU0OjU0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jIHVyaS5oIHBhcnNlckludGVybmFscy5oOiBjb3NtZXRpYyBjaGFuZ2VzIGZyb20KCSAgIlRpbXVyIEkuIEJha2V5ZXYiIDx0aW11ckBiYXQucnU+LCBpbmNsdWRpbmcgbWFraW5nIAoJICB4bWxDcmVhdGVVUkkoKSBwdWJsaWMKCkZyaSBBcHIgIDcgMTg6MzU6MDIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbElPLltjaF0gcGFyc2VyLmM6IGNsZWFuZSB1cCB0aGUgeG1sUGFyc2VySW5wdXRCdWZmZXIgbWVzcwoJICBhbmQgdGhlIGNvZGUgYXQgdGhlIHNhbWUgdGltZS4gQWRkZWQgYSBjbGVhbiBtZWNoYW5pc20gZm9yCgkgIG92ZXJsb2FkIG9yIGFkZGVkIGlucHV0IG1ldGhvZHM6IHhtbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MoKQoJKiB0cmVlLmM6IGZpeGVkIHhtbFByZXZTaWJsaW5nIGFuZCB4bWxOZXh0U2libGluZyBwZXIgCgkgIENocmlzdG9waGUgTGUgR2FsIChDaHJpc3RvcGhlLkxlLUdhbEBpbWFnLmZyKSBpbnB1dAoJKiBUT0RPOiB1cGRhdGVkCgkqIGRvYy8qIDogdXBkYXRlZC9yZWdlbmVyYXRlZAoJKiBkb2MvTWFrZWZpbGUuYW06IHR3ZWFrcyB0byBhdm9pZCBwcm9ibGVtIHdpdGggbGlieG1sIGxpbmsgaW4gdGhlCgkgIHNvdXJjZSBkaXIKCldlZCBBcHIgIDUgMjE6MTE6MzUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3RVUkkuYzogeWV0IGFub3RoZXIgZm9yZ290dGVuIGNvbW1pdCwgSSBzaG91bGQgZ2V0IHNvbWUgc2xlZXAgIQoKV2VkIEFwciAgNSAyMDozNjo0NiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbGludC5jOiBmb3Jnb3QgdG8gY29tbWl0IHRoaXMgdG9vID8KCldlZCBBcHIgIDUgMTY6MjI6NDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbHZlcnNpb24uaC5pbiA6IGZvcmdvdCB0byBjb21taXQgdGhpcyBwcmV2aW91c2x5CgpNb24gQXByICAzIDIxOjQ3OjEwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBsaWJ4bWwtMi4wLjAgdmVyc2lvbiBsb29rcyBPayBzbyBmYXIKCSogUkVBRE1FIFRPRE86IHVwZGF0ZWQgZm9yIHJlbGVhc2UKCSogdXJpLmMgdXJpLmg6IGFkZGVkIGF1dGhvcml0eSBwYXJzaW5nL3NhdmluZwoJKiB1cmkuYyB0ZXN0VVJJLmMgTWFrZWZpbGUuYW06IG1vdmVkIHRoZSB0ZXN0aW5nIGNvZGUgdG8gdGVzdFVSSS5jCgkqIHhtbHZlcnNpb24uaC5pbiBjb25maWd1cmUuaW4gbmFub2Z0cC5bY2hdIG5hbm9odHRwLltjaF0gZW5jb2RpbmcuaAoJICBkZWJ1Z1hNTC5bY2hdIHhwYXRoLltjaF0geG1sSU8uYyB0ZXN0ZXIuYyB0ZXN0WFBhdGguYyB0ZXN0SFRNTC5jCgkgIHRyZWUuYyBIVE1MdHJlZS5jIEhUTUxwYXJzZXIuYyB0cmVlLmMgdHJlZS5oIHBhcnNlci5jCgkgIE1ha2VmaWxlLmFtIDogYWRkZWQgY29tcGlsZS10aW1lIGN1c3RvbWl6YXRpb24gb2YgbGlieG1sCgkgIC0td2l0aC1mdHAgLS13aXRoLWh0dHAgLS13aXRoLWh0bWwgLS13aXRoLXhwYXRoIC0td2l0aC1kZWJ1ZwoJICAtLXdpdGgtbWVtLWRlYnVnCgkqICouW2NoXSBhdXRvY29uZi5zaCA6IG1vdmVkIHRvIGFuIGFic29sdXRlIGFkcmVzc2luZyBvZiBpbmNsdWRlcyA6IAoJICAjaW5jbHVkZSA8bGlieG1sL3h4eC5oPiBJIGhvcGUgaXQgd29uJ3QgYnJlYWsgdG9vIG11Y2ggc3R1ZmYKCSAgYW5kIHdpbGwgYmUgbWFuYWdlYWJsZSBpbiB0aGUgZnV0dXJlLi4uCgkqIHhtbGxpbnQuYyBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbiA6IHJlbmFtZWQgdGVzdGVyLmMgdG8geG1sbGludC5jCgkgIGFuZCBhZGRlZCB4bWxsaW50IHRvIHRoZSBpbnN0YWxsZWQgcHJvZ3JhbXMKCSogdXJpLmg6IGFkZGVkIHhtbEZyZWVVUkkoKQoJICAKRnJpIE1hciAyNCAxNDozNToyMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB1cmkuaDogZmluaXNoZWQgdGhlIGVzY2FwaW5nIGhhbmRsaW5nLCB0aGUgYmFzZSBzdXBwb3J0CgkgIGFuZCB0aGUgVVJJIHBhdGggbm9ybWFsaXphdGlvbi4gTG9va3MgZ29vZCBqdXN0IGxhY2tzIHRoZQoJICBhdXRob3JpdHkgY29udGVudCBwYXJzaW5nIGNvZGUuCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBpbnN0cnVjdGlvbnMgdG8gZ2VuZXJhdGUgdGVzdFVSSQoJKiBUT0RPOiB1cGRhdGVkCgkqIGRvYy94bWwuaHRtbCwgZG9jL3NtYWxsZm9vdG9ubHkuZ2lmIGRvYy93M2MucG5nOiB1cGRhdGVkLAoJICBhZGRlZCBsaW5rcyBhbmQgaWNvbnMgZm9yIFczQyBhbmQgR25vbWUKCk1vbiBNYXIgMjAgMTQ6MDU6MjYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5LltjaF0gOiBzZWVtcyBJIGZvcmdvdCB0byBhY3R1YWxseSB1cGRhdGUgdGhlIGZpbGVzIGluCgkgIHRoZSBsYXN0IGNvbW1pdCA6LSkKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyogOiB1cGRhdGVkIGFuZCB1cGxvYWRlZCB0aGUgZG9jcwoKTW9uIE1hciAyMCAxMjozMzo1MSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0L3ZhbGlkL2R0ZHMveGh0bWwqOiByZW1vdmVkIFJDUyBpbmZvcyAocGFpbiB3aXRoIENWUykKCSogVE9ETzogdXBkYXRlZAoJKiB4bWxtZW1vcnkuW2NoXSA6IGFkZGVkIHhtbE1lbVNldHVwKCkgYW5kIHhtbE1lbUdldCgpIHRvIG92ZXJyaWRlCgkgIGxpYnhtbCBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb24gd2l0aCBhbm90aGVyIHNldCAobGlrZSBnbWFsbG9jLwoJICBnZnJlZSkuCgkqIE1ha2VmaWxlLmFtLCB1cmkuYywgdXJpLmg6IGFkZGVkIGEgc2V0IG9mIGZ1bmN0aW9ucyB0byBkbwoJICBleGFjdCAobGl0dGVyYWx5IGNvcGllZCBmcm9tIHRoZSBSRkMgMjM5NiBwcm9kdWN0aW9ucykgcGFyc2luZwoJICBhbmQgaGFuZGxpbmcgb2YgVVJJLiBXaWxsIGJlIG5lZWRlZCBmb3IgWExpbmssIG9uZSBYTUwgV0ZDLCAKCSAgWE1MIEJhc2UgYW5kIHJldXNlZCBpbiB0aGUgbmFub1tmdHAvaHR0cF0gbW9kdWxlcy4gU3RpbGwgd29yawoJICB0byBiZSBkb25lLgoKVHVlIE1hciAxNCAyMDo1MjozNSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGxpYnhtbC5zcGVjLmluIDogbGlieG1sMgoJKiBkb2MvKiA6IHVwZGF0ZWQgdGhlIGRvYyBwYWdlLCByZWJ1aWx0IHRoZSBkb2NzCgpUdWUgTWFyIDE0IDE5OjExOjI5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFsbDogdGFnZ2VkIExJQl9YTUxfMV9YCgkqICouYyAqLmggOiB1cGRhdGVkIGZyb20gVzNDIENWUyB0cmVlCgkqIGNvbmZpZ3VyZS5pbiA6IDIuMC4wLWJldGEKCSogbGlieG1sLnNwZWMuaW4gOiBsaWJ4bWwyIHBhY2thZ2UgbmFtCgkqIHJlc3VsdC8qIDogbmV3IHZlcnNpb24gb2YgdGhlIHRlc3RzIG91dHB1dAoKTW9uIE1hciAgNiAwOTozNDo1MiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwsIGRvYy91cGRhdGUuaHRtbDogdXBkYXRlZCBkb2NzLCAxLjguNwoKU2F0IE1hciAgNCAxNjoxNDo0MiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3MKCSogcGFyc2VyLmM6IGZpbmFsIHBhdGNoIG9uICM2NzY2CgkqIHZhbGlkLmM6IHNtYWxsIHBhdGNoIG9uIHZhbGlkaXR5IGNoZWNrcy4KClNhdCBNYXIgIDQgMTI6Mzg6NDEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3VwZ3JhZGUuaHRtbDogaW5zdHJ1Y3Rpb24gb24gaG93IHRvIHVwZ3JhZGUgZnJvbSAxLnggdG8gMi54CgkgIGFkZGVkCgkqIHBhcnNlci5jOiBhZGRpbmcgeG1sS2VlcEJsYW5rc0RlZmF1bHQoKSBhcyBhIHdheSB0byBtYW5hZ2UKCSAgY29tcGF0aWJpbGl0eSB3LnIudC4gWE1MIHNwZWMgYW5kIGV4aXN0aW5nIGNvZGUuCgpUaHUgTWFyICAyIDA0OjQ1OjE1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBzZWVtcyBhIGJldHRlciBzb2x1dGlvbiB0byA8YT4gICA8L2E+IGV4aXN0cywKCSAgd2lsbCB0cnkgaXQgZm9yIGEgd2hpbGUKClRodSBNYXIgIDIgMDI6MjY6MTMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IHRyaWVkIHRvIHJlbW92ZSB0aGUgPGE+ICAgPC9hPiBnZW5lcmF0aW5nIDxhLz4KCSAgdGhpcyBpcyBoYXJkLiBMZWZ0IGEgZmxhZyBmb3IgdGhhdCBwdXJwb3NlLiBGaXhlZCBidWcgIzY3NjYKCSogY29uZmlndXJlLmluOiBwcmVwYXJlZCAxLjguNyBub3QgcmVsZWFzZWQsIGR1ZSB0byBwcmV2aW91cwoJICBwcm9ibGVtCgpUaHUgTWFyICAyIDAzOjAzOjUwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCA6IGFwcGxpZWQgc2Vjb25kIHBhdGNoIGZyb20gUGF1bCBEdUJvaXMKClR1ZSBGZWIgMjkgMjM6NTU6MTMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIDogYXBwbGllZCBwYXRjaCBmcm9tIFBhdWwgRHVCb2lzCgpUaHUgRmViICAzIDE2OjM2OjM5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogZG8gYSBiaXQgb2YgYnVmZmVyaXphdGlvbiBpbiBwdXNoIG1vZGUuCgpUaHUgRmViICAzIDE1OjU5OjM3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHRyZWUuYyBIVE1MdHJlZS5bY2hdIGRlYnVnWE1MLmMgeHBhdGguYzogRml4ZWQKCSAgY29tcGlsYXRpb24gd2FybmluZ3Mgb24gdmFyaW91cyBwbGF0Zm9ybXMuCgkqIHBhcnNlci5jOiBGaXhlZCAjNTI4MSB2YWxpZGl0eSBlcnJvciBjYWxsYmFja3MgYXJlIG5vdyBkZXNhY3RpdmVkCgkgIGJ5IGRlZmF1bHQgaWYgbm90IHZhbGlkYXRpbmcuCgpUaHUgRmViICAzIDEzOjQ2OjE0IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYywgd2luMzJjb25maWcuaC5pbjogcGF0Y2hlcyB0byBjb21waWxlIG9uIFdJTjMyCgpXZWQgRmViICAyIDIyOjUxOjE2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYzogc25wcmludGYvc3ByaW50ZiBwYXRjaCBjb3VydGVzeSBHZW9yZ2UgS2F0c2lyZWxvcwoJICA8Z2thdHNpQGNzLnRvcm9udG8uZWR1PgoKTW9uIEphbiAzMSAxODo1ODoyMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogRml4ZWQgJyMnIGFuZCAnPycgc3RyaXBwaW5nIHdoZW4KCSAgcHJvY2Vzc2luZyBVUkxzCgpNb24gSmFuIDMxIDE0OjI1OjU3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuW2NoXTogY2xlYW51cCwgYnVnIGZpeGVzLCBpbnRlZ3JhdGlvbiBpbiBycG1maW5kLCBhZGRlZAoJICB4bWxOYW5vRlRQVXBkYXRlVVJMIGZvciBwZXJzaXN0ZW50IGNvbnRyb2wgY29ubmVjdGlvbnMuCgkqIGNvbmZpZ3VyZS5pbjogMS44LjYKClRodSBKYW4gMjcgMTc6NTI6MjkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuW2NoXSwgbmFub2Z0cC5bY2hdOiBjbGVhbnVwLCBhZGRlZCBwcm94eSBzdXBwb3J0CgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbFNhdmVOb0VtcHR5VGFncwoKMjAwMC0wMS0yOSAgSmFtZXMgSGVuc3RyaWRnZSA8amFtZXNAZGFhLmNvbS5hdT4KCgkqIG5hbm9mdHAuYzogaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiBmb3IgSVBQUk9UT19UQ1AuCgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgbmFub2Z0cC5bY2hdIHRvIHRoZSBidWlsZC4KCldlZCBKYW4gMjYgMTg6MTQ6NTUgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5bY2hdOiBjbGVhbnVwLCBjb21tZW50cywgQVBJCgkqIGRlYnVnWE1MLmMgOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgY2F0IGNvbW1hbmQKCSogZG9jLyo6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpXZWQgSmFuIDI2IDE2OjUyOjUwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuW2NoXSBwYXJzZXIuYyB4bWxJTy5bY2hdOiBhZGRlZCBhIE5hbm8gRlRQIGltcGxlbWVudGF0aW9uCgkqIGRlYnVnWE1MLmMgOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgY2F0IGNvbW1hbmQKCSogdmFsaWQuYzogZml4aW5nIHNvbWUgc21hbGwgcHJvYnMKCSogbGlieG1sLnNwZWMuaW46IGdldCByaWQgb2YgdGhlIFNOQVAgc3VmZml4CgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCB0aGUgc3RhdHVzCgpNb24gSmFuIDI0IDE0OjMxOjA5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuaW46IHhtbC1jb25maWcgLS12ZXJzaW9uIHRvIGp1c3QgcmV0dXJuIHRoZQoJICB2ZXJzaW9uIG51bWJlcgoJKiB4cGF0aC5jOiBzb21lIGNsZWFudXAgdy5yLnQuIGF4aXMgd2hlbiB0aGUgY3VycmVudCBub2RlIGlzCgkgIGFuIGF0dHJpYnV0ZS4KCSogVE9ETzogdXBkYXRlZAoKVHVlIEphbiAxOCAxODo0NjowNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmVkIGZvciBsaWJ4bWwtMS44LjUKCSogZG9jLyogcmVjb21waWxlZCB0aGUgZG9jdW1lbnRhdGlvbgoKMjAwMC0wMS0xNyAgSm9keSBHb2xkYmVyZyA8amdvbGRiZXJnQGhvbWUuY29tPgoKCSogY29uZmlndXJlLmluIDogV0FSTklORyBhdXRvY29uZiBzdWJ0bGV0eSBhbGVydCA6CgkgIFVzZSBBQ19DSEVDS19IRUFERVJTIHJhdGhlciB0aGFuIEFDX0NIRUNLX0hFQURFUgoJICB3aGVuIGxvb2tpbmcgZm9yIHpsaWIuaCBzbyB0aGF0IEhBVkVfWkxJQl9IIGlzIGRlZmluZWQuCgkqIGNvbmZpZy5oLmluIDogSGF2ZSBhICN1bmRlZiBmb3IgSEFWRV9aTElCX0ggc28gdGhhdCBpdCB3aWxsCgkgIGdldCBkZWZpbmVkIGJ5IEFDX0NIRUNLX0hFQURFUlMuCgpNb24gSmFuIDE3IDE3OjA0OjEyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogZml4ZWQgYSBoaWRlb3VzIGJ1ZyBpbiB4bWxHZXRQcm9wKCkgdGhhbmtzIHRvCgkgIFJ1bmUuRGp1cmh1dXNAZmFzdC5ubwoKU2F0IEphbiAxNSAxNTowOTowNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBUT0RPOiB1cGRhdGVkCgkqIHRyZWUuYywgcGFyc2VyLmM6IG1hZGUgc3VyZSB0aGF0IG9ubHkgbWVtb3J5IGFsbG9jIHByb2JsZW1zCgkgIGFuZCBpbnRlcm5hbCBwYXJzZXIgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIHdyaXRlIHRvIHN0ZG91dCBvcgoJICBzdGRlcnIuCgpUaHUgSmFuIDEzIDExOjQ5OjExIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyA6IHJlc3RvcmVkIHhtbE5ld0dsb2JhbE5zIHNpbmNlIHRoaXMgc2VlbXMgdXNlZCBieQoJICBhIGxvdCBvZiBleGlzdGluZyBjb2RlIDotKCwgZml4ZWQgYSBidWcgaW4geG1sTmV3TnMKCSogbmFub2h0dHAuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggSU5DTFVERV9XSU5TT0NLCgkqIEhUTUxwYXJzZXIuYywgcGFyc2VyLmMsIGVudGl0aWVzLmMsIHZhbGlkLmMgOiByZW1vdmVkIGFsbCBjYWxscwoJICB0byBleGl0KCkgZnJvbSB0aGUgbGlicmFyeSBjb2RlLgoJKiB4cGF0aC5jLCBwYXJzZXIuYzogcmVtb3ZlZCBidWdzIG9yIHVudXNlZCBjb2RlIGRldGVjdGVkIGJ5IAoJICBXaW5kb3dzIGNvbXBpbGVycwoJKiBwYXJzZXIuYzogc3RhcnRlZCBhZGRpbmcgaW50ZXJmYWNlcyBmb3IgcGFyc2luZyB3ZWxsIGJhbGFuY2VkCgkgIFhNTCBmcmFnbWVudHMKCSogY29uZmlndXJlLmluOiByZWxlYXNpbmcgMS44LjQKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2NzCgpTdW4gSmFuICA5IDIzOjAzOjIwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbE5ld0RvY0ZyYWdtZW50KCkgZm9yIERPTQoJKiB0ZXN0SFRNTC5jOiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgoKV2VkIEphbiAgNSAxNzoyOToxNyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbGQgdGhlIGRvY3MKCldlZCBKYW4gIDUgMTc6MDg6NDMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWNjb25maWcuaDogcmVhZGxpbmUgYW5kIGhpc3RvcnkgcGF0Y2gKCSogdmFsaWQuW2NoXTogYWRkZWQgeG1sUmVtb3ZlSUQoKSBhbmQgeG1sUmVtb3ZlUmVmKCkKCSogdHJlZS5jOiBhZGRlZCBjaGVjayBhbmQgaGFuZGxpbmcgd2hlbiBwb3NzaWJseSByZW1vdmluZyBhbiBJRAoJKiB0cmVlLmMsIEhUTUxwYXJzZXIuaCwgSFRNTHRyZWUuaDogZml4ZWQgZW50aXRpZXMgcGFyc2luZwoJICAgICBhbmQgc2F2aW5nLgoJKiB0ZXN0L0hUTUwvZW50aXRpZXMuaHRtbCByZXN1bHQvSFRNTC9lbnRpdGllcy5odG1sKiA6IHRlc3QgZm9yCgkgICAgIHZhcmlvdXMgZW50aXRpZXMgcmVmZXJlbmNlIGNhc2VzCgkqIHJlc3VsdC9IVE1MLyogOiBhcyBhIHJlc3VsdCBvdXRwdXQgb2Ygc29tZSB0ZXN0Y2FzZSBoYXZlCgkgICAgIGNoYW5nZWQKCSogSFRNTHBhcnNlci5jLCBwYXJzZXIuYzogZml4ZWQgYSBidWcgaW4gdGhlIHB1c2ggbW9kZSB0cmlnZ2VyZWQKCSAgICAgYnkgcHJldmlvdXMgZXhhbXBsZS4gYWRkZWQgeG1sUGFyc2VUcnlPckZpbmlzaCgpLgoJKiB4cGF0aC5oIHRyZWUuaCBwYXJzZXIuaCB2YWxpZC5oIHhtbElPLmggeGxpbmsuaCBlbmNvZGluZy5oCgkgIGVudGl0aWVzLmggZGVidWdYTUwuaCBIVE1McGFyc2VyLmg6IGNoYW5nZWQgdGhlIHdheSBzdHJ1Y3QgYXJlIAoJICBkZWNsYXJlZCB0byBhbGxvdyBndGstZG9jIHRvIGV4cG9zZSB0aG9zZQoJKiBwYXJzZXIuYzogY2xvc2VkIGJ1ZyAjNDk2MCAgCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogQXBwbGllZCBwYXRjaCBmcm9tIAoJICBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+IGZvciBiZXR0ZXIgemxpYgoJICBhbmQgbWF0aC9zb2NrZXQgbGlicyBkZXRlY3Rpb24KCk1vbiBKYW4gIDMgMTg6Mjk6NDMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbTogbGluayB0ZXN0ZXIgYWdhaW5zdCByZWFkbGluZQoJKiBkb2MveG1sLmh0bWwgZG9jLyovKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbiBwYWdlcwoKTW9uIEphbiAgMyAxMTo1ODowNSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IGFkZGVkIHhtbFJlbW92ZVByb3AKCSogd2luMzJjb25maWcuaC5pbiBuYW5vaHR0cC5jOiBhdm9pZCBpbmNsdWRpbmcgdGhlIFdpbmRvd3MKCSAgICBzb2NrZXQgc3R1ZmYgaW4gZXZlcnkgQyBmaWxlcwoJKiBwYXJzZXIuYzogcmVtb3ZlZCBhbiBpbmRldGVybWluYXRpb24geG1MRGVjbC9QSSh4bWwuLi4pIGluCgkgICAgdGhlIFhtTCBwYXJzZXIocykKCSogdGVzdC9uczQgcmVzdWx0L25zNCBldGMuLi46IGFkZGVkIHRlc3QgY2FzZSBmb3IgcHJldmlvdXMgcHJvYiAgICAKCSogdHJlZS5jOiB4bWxOZXdOcyB3YXNuJ3QgY2hlY2tpbmcgZm9yIGRvdWJsZSBkZWZpbml0aW9uCgkqIE1ha2VmaWxlLmluOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBkaXN0LWhvb2sgZHVwbGljYXRlcwoJKiBwYXJzZXIuW2hjXSwgeG1sSU8uYzogZml4ZWQgdGhlIGxvYWRpbmcgb2YgZXh0ZXJuYWwgZW50aXRpZXMKCSAgICBBUElzLCBub3cgeG1sTG9hZEV4dGVybmFsRW50aXR5KCkgaXMgdXNlZCBldmVyeXdoZXJlIGFuZAoJICAgIHNldHRpbmcgdXAgYW4gYXBwIHNwZWNpZmljIGZyb250LWVuZCB1c2luZyB0aGUgCgkqIFNBWC5jIHBhcnNlci5jOiBzb21lIGZpeGVzLCBub3cgdGhlIHhodG1sIHNwZWMgdmFsaWRhdGVzCgkgICAgd2l0aCB0aGUgeGh0bWwgRFRELgoJKiBlcnJvci5jOiBmaXhlZCBjcmFzaGVzIGluIGNhc2Ugb2Ygbm8gaW5wdXQgc3RyZWFtICAgIAoJKiB0ZXN0L3ZhbGlkL1tkdGRzL10veGh0bWwqIDogYWRkZWQgdGhlIHhodG1sIHNwZWMgYW5kIGR0ZHMKCSAgICB0byB0aGUgdmFsaWRhdGlvbiB0ZXN0cyBhbmQgcmVzdWx0cwoKV2VkIERlYyAyOSAxNToyOTo1MiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF0gdGVzdEhUTUwuYzogYWRkZWQgcHVzaCBtb2RlIGZvciB0aGUgSFRNTCBwYXJzZXIKCSAgdG9vIGh0bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCgpIGFuZCBodG1sUGFyc2VDaHVuaygpCgkqIHBhcnNlci5jOiBhIGJpdCBvZiBjbGVhbnVwLgoJKiBTQVguYywgSFRNTHBhcnNlci5jOiBzb21lIGF0dHJpYnV0ZXMgbWF5IG5vdCBoYXZlIHZhbHVlcyAoY29udHJhcnkKCSAgdG8gWE1MKSByZW1vdmVkIHRoZSBsYXN0IG1lbSBsZWFrIGtub3duCgkqIEhUTUx0cmVlLmM6IG91dHB1dCBtZXNzYWdlIGNsZWFudXAKCSogeG1sbWVtb3J5LmM6IGRpc3BsYXkgY29udGVudCBpbmZvIGFib3V0IG1lbW9yeSBibG9ja3MKCSogcmVzdWx0L0hUTUwvd2lyZWQuKiA6IG1pc3NpbmcgYXR0IHZhbHVlIHdhcm5pbmcgY2hhbmdlCgpUdWUgRGVjIDI4IDE3OjQyOjQxIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbgoKVHVlIERlYyAyOCAxODo0NDoyMiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuaDogUHVzaCBwYXJzZXIgZm9yIFhNTCwKCSAgICAgc2VlbXMgdG8gd29yayBmaW5lIG5vdwoJKiB0ZXN0ZXIuYyBkZWJ1Z1hNTC5bY2hdOiBBZGRlZCBhbiBYTUwgc2hlbGwgZGVidWcgZmFjaWxpdHkgYW5kCgkgICAgIC0tcHVzaCBmb3IgcHVzaCB0ZXN0aW5nCgkqIHhwYXRoLltjaF0gOiBjbGVhbmVkIHVwIGZvciBTaGVsbCB1c2FnZSwgYWRkZWQgbWlzc2luZyBBUElzCgkqIHRlc3RTQVguYzogYWRkZWQgLS1wdXNoCgkqIEhUTUx0cmVlLltjaF0gdHJlZS5bY2hdOiBuZXcgZnVuY3Rpb25zIGZvciBkdW1waW5nIHBhcnRzIG9mIHRoZQoJICAgICBzdWJ0cmVlCgkqIHhtbElPLltjaF0gOiBlbnJpY2hlZCBBUEkgKyBmaXhlcyBmb3IgcHVzaCBtb2RlICAgICAKCSogZW50aXRpZXMuW2NoXTogYWRkZWQgdGhlIGVudGl0eSBjb250ZW50IGxlbmd0aCB0byB0aGUgc3RydWN0LgoJKiB4bWxtZW1vcnkuW2NoXTogbmV3IEFQSSB0byBzaG93IHRoZSBsYXN0IGVudHJpZXMgZm9yIHRoZSBzaGVsbAoJKiB2YWxpZC5jOiBhZGRlZCByZXF1aXJlZCBhdHRyaWJ1dGUgdGVzdGluZwoJKiBTQVguYzogdGhlIGNkYXRhIGNhbGxiYWNrIG5vdyBtZXJnZSBjb250aWd1b3VzIGZyYWdtZW50cwoJKiBIVE1McGFyc2VyLmM6IGNsZWFudXAgb2Ygc29tZSBtYWNyb3MKCldlZCBEZWMgMjIgMTI6MjA6NTMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGZpeCBmb3IgUElzIG5hbWUgc3RhcnRpbmcgd2l0aCB4bWwKCSogdHJlZS5jOiBmaXhlZCBhIHBvdGVudGlhbCBwcm9ibGVtIHdpdGggfHwgYW5kICYmIG9wcwoJKiAqLmMsIGNvbmZpZ3VyZS5pbiB3aW4zMmNvbmZpZy5oLmluIDogZ2VuZXJhdGUgd2luMzJjb25maWcuaCBmb3IKCSAgdGhvc2Ugb24gdGhlIE90aGVyIFNpZGUgIQoKVHVlIERlYyAyMSAxNzoyMjoxNyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBzdHVwaWQgPSB2cy4gPT0gYnVnIDotKAoJKiBkb2MvZ25vbWUteG1sLnNnbWw6IHMvZ2xhZGUveG1sLwoKVHVlIERlYyAyMSAxNDoyOTozNCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGRvYy94bWwuaHRtbCA6IGJ1ZyBmaXggcmVsZWFzZSAxLjguMgoJKiBkZWJ1Z1hNTC5oIG5hbm9odHRwLmggeG1sLWVycm9yLmggeG1sbWVtb3J5LmggeHBhdGguaCA6IAoJICBIb3BlZnVsbHkgdGhlIGVuZCBvZiB0aGF0IHNpbGx5IEMrKyBpbmNsdWRlIHByb2JsZW0KCSogdHJlZS5bY2hdOiBBZGRlZCBhIGZldyBmdW5jdGlvbnM6IHhtbFJlcGxhY2VOb2RlLCB4bWxBZGRQcmV2U2libGluZywKCSAgICAgIHhtbEFkZE5leHRTaWJsaW5nLCB4bWxOb2RlU2V0TmFtZSBhbmQgeG1sRG9jU2V0Um9vdEVsZW1lbnQKCSogSFRNTHBhcnNlci5jIEhUTUxwYXJzZXIuaCBIVE1MdHJlZS5jOiBXaGVuIHNhdmluZyBIVE1MIHRyeSB0byBhdm9pZCAKCSAgICAgIHRyb3VibGVzIHdpdGggYXV0b2Nsb3NlZCBlbGVtZW50cyB3aGVuIHRoZSBzdHJlZSBzaGFwZSBkb2Vzbid0CgkgICAgICBmb2xsb3cgdGhlIER0RCBzcGVjcy4gQWRkZWQgaHRtbElzQXV0b0Nsb3NlZCgpIGFuZAoJICAgICAgaHRtbEF1dG9DbG9zZVRhZygpCgkqIHJlc3VsdC9IVE1MLyouaHRtKjogVXBkYXRlZCB0aGUgSFRNTCBleGFtcGxlcyByZWdyZXNzaW9uIHRlc3RzIG91dHB1dAoJKiBTQVguYyB0cmVlLmM6IGZpeGVkIGJ1ZyBvbiBkZWZhdWx0aW5nIG5hbWVzcGFjZXMgb24gYXR0cmlidXRlcwoJKiBkZWJ1Z1hNTC5jOiBmaXhlZCBhIGJ1ZyBvbiBwcmludGluZyBkZWZhdWx0IG5hbWVzcGFjZXMuCgkqIEhUTUx0cmVlLmM6IGZpeGVkIGEgcHJvYmxlbSB3aGVuIG91dHB1dGluZyBYTUwgcGFyc2VkIGRvY3MgYXMgSFRNTAoKTW9uIERlYyAyMCAxNjoyMDo1NSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiByZXN1bHQvSFRNTC8qLmh0bVtsXSA6IHVwZGF0ZWQgdGhlIEhUTUwgcmVncmVzc2lvbiB0ZXN0cyBhY2NvcmRpbmcKCSAgdG8gdGhlIG5ldyBvdXRwdXQKCSogeHBhdGguaCB4bWwtZXJyb3IuaCB2YWxpZC5oIHRyZWUuaCBwYXJzZXIuaCBlbnRpdGllcy5oIFNBWC5oCgkgIEhUTUx0cmVlLmggdHJlZS5jIGVudGl0aWVzLmM6IGhlYWRlcnMgdHdlYWtpbmdzIHRvIGF2b2lkIGEgbmFzdHkKCSAgcHJvYmxlbSBkdWUgdG8gaW50ZXJtaXggb2YgZXh0ZXJuICJDIiB7IC4uLiB9IGRlY2xhcmF0aW9ucyBmb3IgQysrCgkgIGFuZCByZWN1cnNpdmUgaW5jbHVkZXMgaW4gdGhlIGhlYWRlcnMKCjE5OTktMTItMjAgIENocmlzIExhaGV5ICA8Y2xhaGV5QHVtaWNoLmVkdT4KCgkqIEhUTUx0cmVlLmM6IE1hZGUgaXQgc28gdGhhdCBodG1sIG5vZGVzIHdpdGggYSBzaW5nbGUgY2hpbGQgZG8KCW5vdCBpbnNlcnQgYSBjYXJyaWFnZSByZXR1cm4gYmVmb3JlIG9yIGFmdGVyIHRoZSBjaGlsZCBub2RlLgoKU2F0IERlYyAxOCAxNjowNzowMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGRvYy94bWwuaHRtbCA6IGJ1ZyBmaXggcmVsZWFzZSAxLjguMQoJKiBwYXJzZXIuYzogZml4ZWQgYnVnICM0MzQ0CgkqIHhwYXRoLmggeG1sLWVycm9yLmggeGxpbmsuaCBuYW5vaHR0cC5oIGRlYnVnWE1MLmggU0FYLmggSFRNTHBhcnNlci5oCgkgIGFkZGVkIHRoZSBnbHVlIHRvIGF2b2lkIEMrKyBwcm9ibGVtcwoJKiBkb2MvKiA6IHJlZ2VuZXJhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpUaHUgRGVjIDE2IDE2OjE5OjI5IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogZml4ZWQgYSBidWcgaW50cm9kdWNlZCBpbiAxLjguMCBhbmQgYnJlYWtpbmcgZGVmYXVsdAoJICBuYW1lc3BhY2UgcmVjb2duaXRpb24sIGFuZCBEaWEgYXMgYSByZXN1bCA6LSgKCSogZW5jb2RpbmcuYzogY2xvc2VkIGJ1ZyAjMzk1MAoKV2VkIERlYyAxNSAxOToyMjoyMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB2YWxpZC5jOiBkZWJ1Z2dpbmcgYSBwb3N0ZXJpb3JpIHZhbGlkYXRpb24sIGV4Y2VwdCBVUkkgZXhwYW5zaW9uCgkgIHN0dWZmIHRoaXMgc2hvdWxkIGJlIGZpeGVkIG5vdwoJKiBwYXJzZXJJbnRlcm5hbHMuaDogZml4ZWQgYSBidWcgaW4gSVNfQkFTRUNIQVIgcmVwb3J0ZWQgYnkKCSAgQ2FybCBOeWdhcmQgPGNueWdhcmRAYmVsbGF0bGFudGljLm5ldD4KCSogdGVzdGVyLmM6IGFkZGVkIC0tcG9zdHZhbGlkLCBjbGVhbmluZyBvZiB0aGUgY29kZQoJKiB0cmVlLltjaF06IGFkZGVkIHhtbERvY0dldFJvb3RFbGVtZW50KCkKCSAgClR1ZSBEZWMgMTQgMjA6MzA6MzQgUFNUIDE5OTkgUmFtaXJvIEVzdHJ1Z28gPHJhbWlyb0BlYXplbC5jb20+CgoJKiBTQVguaCwgdHJlZS5oIDogY2hhbmdlZCAnbmFtZXNwYWNlJyB0byAnbmFtZVNwYWNlJyB0byB3b3JrYXJvdW5kCgljKysgbG9zYWdlLgoKU3VuIERlYyAxMiAxMzowODoxNSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGRvYy94bWwuaHRtbCA6IGJ1bXBlZCB0byAxLjguMAoJKiB4bGluay5bY2hdLCBNYWtlZmlsZS5hbSA6IGFkZGVkIGZyYW1ld29yayBmb3IgbGluayBkZXRlY3Rpb24KCSogcGFyc2VyLmg6IGFkZGVkIG5iQ2hhcnMgdG8gcGFyc2VyIGNvbnRleHQsIG5lZWRlZCBmb3IgY2xlYW51cC4KCSogeG1sbWVtb3J5LmM6IHJlbW92ZWQgYSBuYXN0eSBidWcgd2hlbiBvdXQgb2YgbWVtCgkqIHZhbGlkLltjaF06IGFkZGluZyBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgYXR0cmlidXRlIGRlY2wKCSogdGVzdGVyLmM6IGFkZGVkIC0tZGVidWdlbnQgb3B0aW9uCgkqIGRlYnVnWE1MLltjaF06IGFkZGVkIHhtbERlYnVnRHVtcEVudGl0aWVzKCkKCSogcGFyc2VyLmM6IGNsZWFudXAsIGF2b2lkaW5nIHVzZSBvZiBDVVJfUFRSIGxpa2UgcGxhZ3VlLCB1c2luZwoJICBidWZmZXJzIGluc3RlYWQsIHRoaXMgd2FzIHJlYWxseSBuZWVkZWQsIHZhbGlkYXRpb24gd2FzIGJyZWFraW5nCgkgIGluIHN0cmFuZ2Ugd2F5cyBkdWUgdG8gdGhhdC4gQWRkZWQgeG1sUGFyc2VTdHJpbmdQRVJlZmVyZW5jZSgpCgkgIGFuZCBvdGhlciBwYXJzaW5nIGZyb20gc3RyaW5ncyBmdW5jdGlvbnMuIEVudGl0aWVzIHByb2Nlc3NpbmcKCSAgbW9kaWZpZWQgYWdhaW4sIGJ1dCBQRVJlZiBhcmUgc3RpbGwgbm90IGhhbmRsZWQgY29ycmVjbHkgYnV0CgkgIHVubGVzcyB5b3UncmUgRXZlIE1hbGxlciB5b3Ugd29uJ3Qgbm90aWNlIDotKQoJKiBIVE1McGFyc2VyLmM6IGxhcmdlIGNoYW5nZXMgdG93YXJkIHJlbGlhYmlsaXR5LCBhbmQgc3dpdGNoZWQgdG8KCSAgbG93ZXJjYXNlIGludGVybmFsIHRhZ3MsIFhIVE1MIGlzIGxvd2VyY2FzZSwgc28gaXQgd2lsbCBoZWxwCgkgIHRoYXQgb3V0cHV0IGlzIGNsb3NlciB0byBuZXh0IHZlcnNpb24uCgkqIGRvYy8qIDogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24sIGl0IGlzIG5vdyBob3N0ZWQgYXQKCSAgaHR0cDovL3htbHNvZnQub3JnLyAoc2FtZSBiaXRzIEkganVzdCBib3VnaHQgdGhlIGRvbWFpbiA6LSkKCQoJCkZyaSBEZWMgIDMgMTM6NDY6MzIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmgsIFNBWC5jLCBtYWtlZmlsZS5hbTogYWRkZWQgU0FYLmggbW9zdGx5IHVzZWZ1bCBmb3IgdGhlCgkgICAgICAgICBkb2MgZ2VuZXJhdGlvbgoJKiBwYXJzZXIuYzogZml4ZWQgYnVncyAjMzkwOCBhbmQgIzM5MzcgYW5kIGEgbWVtb3J5IGxlYWsKCSAgICAgICAgIGluIHRoZSBTQVggQVBJCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2MgbWFraW5nIHN1cmUgZXZlcnl0aGluZyBhcHBlYXJzIGluIHRoZQoJICAgICAgICAgSFRNTCBmaWxlcwoKV2VkIERlYyAgMSAxMDoyNzo0NyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0gSFRNTHRyZWUuYywgZGVidWdYTUwuYywgY29uZmlndXJlLmluLCB4bWwtY29uZmlnLmluOgoJICAgICBhZGRlZCB0aGUgcGF0Y2ggZnJvbSBDYXJsIE55Z2FyZCA8Y255Z2FyZEBiZWxsYXRsYW50aWMubmV0PgoJICAgICB3aGljaCBhbGxvdyBpbXByZXNzaXZlIHNwZWVkIGltcHJvdmVtZW50IG9uIGRhdGFzZXQgd2l0aAoJICAgICBsYXJnZSB0ZXh0IHBpZWNlcywgYnV0IGF0IHRoZSBjb3N0IG9mIGJyb2tlbiBiaW5hcnkKCSAgICAgY29tcGF0aWJpbGl0eSBhbmQgc2xpZ2h0bHkgYmlnZ2VyIG1lbW9yeSB1c2FnZS4KCSAgICAgQ29uZmlndXJlIHdpdGggLS13aXRoLWJ1ZmZlcnMgdG8gYWN0aXZhdGUgdGhlbSwgdGhleQoJICAgICBhcmUgcHJvdGVjdGVkIHdpdGggWE1MX1VTRV9CVUZGRVJfQ09OVEVOVCBkZWZpbmUuCgkqIGVudGl0aWVzLltjaF0sIHBhcnNlci5jOiBhZGRlZCB4bWxDbGVhbnVwUHJlZGVmaW5lZEVudGl0aWVzKCksCgkgICAgIGdvYWwgaXMgMCBtZW1vcnkgbGVmdCBhbGxvY2F0ZWQgb25jZSBwYXJzZXIgaXMgbm8gbW9yZSB1c2VkCgkqIHRlc3REQVYuYywgdGVzdEhUTUwuYywgdGVzdFNBWC5jLCB0ZXN0WFBhdGguYzogbWFrZSBzdXJlIHdlCgkgICAgIGNhbGwgeG1sQ2xlYW51cFBhcnNlcigpIGFuZCB4bWxNZW1vcnlEdW1wKCkKCldlZCBOb3YgMjQgMTk6MDA6MDYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIHhtbElPLltjaF0gcGFyc2VyLmMgdmFsaWQuYzogY29kZSBjbGVhbnVwIHdpdGggLXBlZGFudGljCgkqIHBhcnNlci5bY2hdIGVuY29kaW5nLltjaF06IGFkZGVkIG1lbW9yeSBjbGVhbnVwIHJvdXRpbmVzCgkqIHBhcnNlci5jOiBjbG9zaW5nIGJ1ZyAjMzc4OAoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jCgpUdWUgTm92IDIzIDExOjIzOjU1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogY2xvc2luZyBidWcgMzc0OCwgYWRkZWQgeG1sTmV3RG9jUmF3Tm9kZSgpLCAKCSAgICAgICAgICAgICB4bWxOZXdUZXh0Q2hpbGQoKSBhbmQgeG1sU2V0Q29tcHJlc3NNb2RlKCkgYmVoYXZpb3VyLgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1jb21wcmVzcyBvcHRpb24KCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24KCkZyaSBOb3YgMTkgMTg6NDE6MjggQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBidWdmaXhpbmcsIHRoZSBkYW1uIHRoaW5nIE1VU1Qgbm90IGNyYXNoIGV2ZW4KCSAgICAgICAgICAgICAgICBpZiBnaXZlbiAvcHJvYy9rY29yZSBhcyBpbnB1dCAhCgkqIGRvYy94bWwuaHRtbCBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbgoKVGh1IE5vdiAxOCAxNDo1NzoxOCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogRml4ZWQgc29tZSB3cm9uZ2x5IHNwYWNlIGNvbGxhcHNpbmcgY29kZSBkdWUgdG8KCSAgICAgICAgICAgIGEgbWlzcmVhZGluZyBvZiB0aGUgc3BlYy4KCSogcmVzdWx0Lyo6IGZpeGVkIHRoZSBvdXRwdXQgYWNjb3JkaW5nbHkJICAgIAoKV2VkIE5vdiAxNyAxODoyODowNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbmNvZGluZy5jOiBidWcgZml4IGFuZCB0eXBvcwoJKiB4bWxJTy5bY2hdIHBhcnNlci5jOiBmaXJzdCBiaXRzIHRvd2FyZCByZWFsIHByb2dyZXNzaXZlIHBhcnNpbmcKCSogcGFyc2VyLmM6IGFkZGVkIGF0dHJpYnV0ZSBub3JtYWxpemF0aW9uIGNsb3NpbmcgYnVnICMzNTk3CgkqIHRlc3QvYXR0KiByZXN1bHQvYXR0KiBTQVhyZXN1bHQvYXR0KjogdGVzdGNhc2UgZm9yIGF0dHJpYnV0ZQoJICAgIG5vcm1hbGl6YXRpb24KCk1vbiBOb3YgMTUgMTg6NTA6NTYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBjbG9zaW5nIGJ1ZyAjMzE2MyBieSBhZGRpbmcgZXh0cmEgZmxhZ3MgZm9yIHRoZQoJICAgICAgICAgICAgICAgIGNjIGNvbXBpbGVyIG9uIEhQLVVYCgpGcmkgTm92IDEyIDE3OjQxOjIwIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHZhbGlkLltjaF0gOiByZW1vdmVkIGEgdHlwbyBhbmQgYW4gZW51bWVyYXRlZCB0eXBlIGJ1ZyBpbiB0aGUKCSAgICAgICAgICAgICAgIHhtbEFkZEVsZW1lbnREZWNsKCkgZnVuY3Rpb24KCSogdHJlZS5jIDogSSBjaGFuZ2VkIHhtbFNldFByb3AoKSBhbmQgeG1sTmV3UHJvcCgpIHRvIGRvIHRoZQoJICAgIGNhbGwgdG8geG1sRW5jb2RlRW50aXRpZXNSZWVudHJhbnQoKSBzbyB0aGF0IHRoZSBmdW5jdGlvbnMgCgkgICAgTmV3LCBTZXQgYW5kIEdldCBhcmUgYXQgdGhlIHNhbWUgbGV2ZWwuCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogZXh0cmEgbWVtb3J5IGFsbG9jYXRpb24gYnVnIGZvcgoJICAgIGF0dHJpYnV0ZXMgZGV0ZWN0ZWQgYnkgc29tZW9uZSB1c2luZyBsaWJ4bWwgaW4gZW1iZWRkZWQgc3lzdGVtcyA6LSkKClRodSBPY3QgMjggMTc6NDk6MjYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5oOiB0dXJuZWQgb2ZmIG1lbSBkZWJ1ZyA6LVwKCk1vbiBPY3QgMjUgMTI6MTM6MjUgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBjbG9zZWQgYnVnICMyNzg0IGEgb25lIGxpbmUgZml4LCBidXQgd29ydGggcHVzaGluZwoJICAgICAgICAgICAgYSBuZXcgcmVsZWFzZSBvdXQKICAgICAgICAqIEhUTUxwYXJzZXIuYzogZml4ZWQgYXV0by1jbG9zZSBidWdzIG9uIGxpc3QgaXRlbXMsIHplcm9pbmcKCSAgICAgICAgICAgIHNvbWUgc3RydWN0dXJlcywgY29tbWVudHMgYmVmb3JlIGFuZCBhZnRlciB0aGUKCQkgICAgbWFpbiBlbGVtZW50LCBhbmQgb3RoZXIgbmFzdHluZXNzCgkqIEhUTUx0cmVlLmMgdHJlZS5jOiBhY2NvbW9kYXRlIHRoZSBleHRlbmRlZCBIVE1MIHN1cHBvcnRlZAkgICAgCgkqIGNvbmZpZ3VyZS5pbjogcHVzaGluZyAxLjcuNAoJKiB0ZXN0L2VudDggYW5kIHJlbGF0ZWQgb3V0cHV0cyA6IGFkZGVkIGEgbmV3IHRlc3QgZm9yIGJ1ZyAjMjc4NAoJKiB0ZXN0L0hUTUwvd2lyZWQuaHRtbCBhbmQgcmVsYXRlZCBvdXRwdXQ6IGEgbmFzdHkgSFRNTCBleGFtcGxlCgkqIE1ha2VmaWxlLmFtOiBpbXByb3ZlZCB0aGUgdGVzdCBzY3JpcHRzCgkqIGRvY3MvKiA6IHJlcmFuIHRoZSBkb2N1bWVudGF0aW9uIGV4dHJhY3RvciwgdXBkYXRlZCB4bWwuaHRtbAoKVGh1IE9jdCAxNCAxMDoyOTo1NiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jLCBIVE1MdHJlZS5jLCB0cmVlLmg6IGNvbXBsZXRlbHkgcmV2YW1wZWQgdGhlCgkgICAgIEhUTUxwYXJzZXIgYW5kIGRlYnVnZ2VkIHRoZSBIVE1MIHJlbGF0ZWQgY29kZS4gSFRNTCBkb2N1bWVudHMKCSAgICAgbm93IGhhdmUgdGhlaXIgb3duIHR5cGUKCSogZW50aXRpZXMuYzogZG8gbm90IGR1bXAgJmFwb3M7IGZvciBIVE1MIG91dHB1dAoJKiB4bWxtZW1vcnkuYzogaW1wcm92ZW1lbnQsIGJyZWFrcG9pbnQgbWVjaGFuaXNtCgkqIHRlc3RIVE1MLmM6IGFkZGVkIC0tc2F4IC0tcmVwZWF0IC4uLgoJKiBNYWtlZmlsZS5hbTogaW1wcm92ZWQgdGhlIEhUTUwgdGVzdHMKCSogdmFsaWQuW2NoXTogYWRkZWQgeG1sVmFsaWRHZXRWYWxpZEVsZW1lbnRzIGFuZAoJICAgICAgICAgICAgICB4bWxWYWxpZEdldFBvdGVudGlhbENoaWxkcmVuCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWluc2VydCB0byB0ZXN0IHRoZSAyIG5ldyBmdW5jdGlvbnMKCSogdGVzdC8vKiByZXN1bHQvLyogU0FYcmVzdWx0Ly8qIDogcmVncmVzc2lvbiB0ZXN0IGNsZWFudXAKCSAgICAgICAgICAgICAgIGFuZCBleHRlbnNpb24uCgkqIGRvYy9odG1sIDogYWRkZWQgZG9jIGZvciBuZXcgbW9kdWxlcyBnbm9tZS14bWwteG1sbWVtb3J5Lmh0bWwgYW5kCgkgICAgICAgICAgICAgZ25vbWUteG1sLW5hbm9odHRwLmh0bWwKCk1vbiBPY3QgMTEgMTQ6MzE6NTggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgcHJvYmxlbXMgd2l0aCBzb21lIGF1dG9jbG9zZSB0YWdzCgkqIHRyZWUuYzogZml4ZWQgWE1MIG91dHB1dCBwcm9ibGVtcy4gCgkqIHJlc3VsdC8qIFNBWHJlc3VsdC8qOiB1cGRhdGUgb2YgdGhlIHRlc3RzIG91dHB1dAoKU2F0IE9jdCAgOSAxMTowMjo1NyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW06IEFydHVybyBwYXRjaCBmb3IgeG1sQ29uZi5zaCB2ZXJzaW9uIGluZm8KCSogcGFyc2VyLmM6IFRpbSBKb3NsaW5nIHBhdGNoIGZvciBzaW5nbGUgcXVvdGVkIGl0ZW1zCgkqIHRlc3Rlci5jOiBUaW0gSm9zbGluZyBwYXRjaCBmb3IgdGVzdGVyIG9wdGlvbnMgdXNhZ2UKCSogdHJlZS5oOiBpbmRlbnQgY2xlYW51cAoKRnJpIE9jdCAgOCAxNjozNTozNyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5oIDogRml4ZWQgcHJvYmxlbXMgd2l0aCBIVE1MIHBhcnNpbmcKCSAgICByZXBvcnRlZCBieSBLcmlzdGlhbiBIb2dzYmVyZyBLcmlzdGVuc2VuIDxob2dzYmVyZ0BkYWltaS5hdS5kaz4KCkZyaSBPY3QgIDggMTE6Mzc6MTEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyA6IFJhcGggcGF0Y2ggZm9yIGluaXRpYWxpemF0aW9uIG9mIENPUkJBIGZpZWxkcwoJKiBwYXJzZXIuYywgeHBhdGguYywgLi4uOiBtb2RpZmljYXRpb24gb2YgZG9jIGNvbW1lbnRzCgkqIHhwYXRoLmMgOiBhbGxvdyBzcGFjZXMgaW4geHBhdGggZXhwcmVzc2lvbnMKCk1vbiBTZXAgMjcgMTA6MTY6NDMgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5oOiB0dXJuaW5nIG9mZiBtZW1vcnkgZGVidWcgOi0oCgpTdW4gU2VwIDI2IDEzOjE2OjU0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSA6IGFkZGVkIHhtbFNBWFVzZXJQYXJzZUZpbGUoKSBhbmQgeG1sU0FYVXNlclBhcnNlTWVtb3J5KCkKCSAgICAgICAgICAgICAgICBiZXR0ZXIgU0FYIGludGVyZmFjZXMuCgkqIHRlc3RTQVguYzogdXNlcyB0aGUgbmV3IFNBWCByb3V0aW5lLCBhdm9pZCBmZXRjaGluZyBhbnkgcmVtb3RlCgkgICAgICAgICAgICAgZW50aXR5LgoJKiBjb25maWd1cmUuaW46IDEuNy4yCgpGcmkgU2VwIDI0IDE2OjAxOjAxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgdGhlIFVSTAoJKiBkb2MveG1sLmh0bWw6IGltcHJvdmVkIHRoZSBkb2N1bWVudGF0aW9uIGZyb250LWVuZAoKRnJpIFNlcCAyNCAwMTowNjozNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYzogY29uZGl0aW9ubmVkIHJlZmVyZW5jZXMgdG8gc25wcmludGYgd2l0aCBIQVZFX1NOUFJJTlRGCgpGcmkgU2VwIDI0IDAwOjE1OjU4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgdGhlIGFscGhhIGNvbXBpbGUgcHJvYmxlbQoJKiBwYXJzZXIuW2NoXTogY2hhbmdlZCBlcnJubyB0byBlcnJObyBpbiB0aGUgcGFyc2VyIGNvbnRleHQgOi0oCgkqICouW2NoXTogY2hhbmdlZCBDSEFSIHRvIHhtbENoYXIgdG8gYXZvaWQgcHJvYmxlbSBvbiBXSU4zMgoJKiBkb2MveG1sLmh0bWw6IGNoYW5nZWQgQ0hBUiB0byB4bWxDaGFyCgkqIGRvYy9odG1sLyo6IHJlY29tcGlsZWQgdGhlIGRvY3VtZW50YXRpb24KCSogY29uZmlndXJlLmluOiAxLjcuMQoKV2VkIFNlcCAyMiAxMTo0MDozMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmg6IG1vZGlmaWVkIHRoZSBwYXJzZXIgY29udGV4dCBzdHJ1Y3QgdG8gcmVnYWluIDEuNC4wCgkgICAgICAgICAgICBiaW5hcnkgY29tcGF0aWJpbGl0eQoJKiBwYXJzZXIuYywgeG1sLWVycm9yLmg6IGFkZGVkIGVycm5vIG90IHRlaCBjb250ZXh0IGFuZCBkZWZpbmVkCgkgICAgICAgICAgICBhIHNldCBvZiBlcnJvcnMgdmFsdWVzIHdpdGggdXBkYXRlIG9mIGVycm5vCgkqIG5hbm9odHRwLltjaF06IG1pbmltYWxpc3QgSFRUUCBmcm9udC1lbmQgZm9yIGZldGNoaW5nIHJlbW90ZQoJICAgICAgICAgICAgRFREcyBhbmQgZW50aXRpZXMKCSogKi5oLCAqLmM6IGNvbXBsZXRlIGNsZWFudXAgb2YgdGhlIHVzZSBvZiBjb25maWcuaCBhbmQgaW5jbHVkZQoJICAgICAgICAgICAgcHJvdGVjdGlvbiBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc2V0dXAuCgkqIG92ZXJhbGxsIGRlYnVnZ2luZywgbWFpbnRlbmFuY2UgYW5kIGJ1Zy1maXhpbmcgb24gYWxsIG1vZHVsZXMKCSogdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoJKiByZWFkeSBmb3IgMS43LjAKCldlZCBTZXAgIDggMjI6NDY6MTQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyA6IGNsZWFudXAKCSogU0FYLmMgdmFsaWQuYyB2YWxpZC5oOiBhZGRlZCBJRC9JRFJFRiBjaGVja2luZwoJKiB0cmVlLmMgdHJlZS5oOiBleHRlbmRlZCBkb2Mgc3RydWN0dXJlIGZvciByZWZzCgkqIGNvbmZpZ3VyZS5pbjogMS42LjIKCSogcGFyc2VyLmM6IHBhdGNoZWQgYnVnIGluIFNBWCB1c2VyIGFyZyBjYWxsCgkqIHBhcnNlckludGVybmFscy5oOiBwYXRjaGVkIG1pc3NpbmcgY2xvc2UgaW4gQysrIHdyYXBwaW5nCgkqIHRlc3RYUGF0aC5jIHhwYXRoLmMgeHBhdGguaDogcHJlcGFyZWQgZm9yIGV4dGVuc2liaWxpdHksCgkgIGVzcGVjaWFsbHkgdXBjb21pbmcgWFBvaW50ZXIgaW1wbGVtZW50YXRpb24uCgkqIGRvYy94bWwuaHRtbDogYXVnbWVudGVkLCB0eXBvCgpTYXQgU2VwICA0IDIyOjQ4OjA1IENFU1QgMTk5OSBUaW11ciBCYWtleWV2IDxtY0BiYXQucnU+CgoJKiBkb2MvTWFrZWZpbGUuYW06IHJlcGxhY2VkICJpbnN0YWxsIC1kICIgd2l0aCAibWtpbnN0YWxsZGlycyIgLQoJbm90IGFsbCBpbnZvY2F0aW9ucyBvZiBpbnN0YWxsIHVuZGVyc3RhbmQgLWQuCgpTYXQgU2VwICA0IDIyOjIwOjA3IENFU1QgMTk5OSBUaW11ciBCYWtleWV2IDxtY0BiYXQucnU+CgoJKiBNYWtlZmlsZS5hbTogcHJlcGVuZCBhbGwgdGhlIHRlc3QqIGNhbGxzIHdpdGggJCh0b3BfYnVpbGRkaXIpIC0KCXRvIG1ha2UgJ2NoZWNrJyB3b3Jrcywgd2hlbiBidWlsZGRpciAhPSBzcmNkaXIuCgpTYXQgU2VwICA0IDIwOjI1OjQ2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpGcmkgU2VwICAzIDAwOjAxOjA4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxtZW1vcnkuW2NoXSBNYWtlZmlsZS5hbSAgOmFkZGVkIGEgbWVtb3J5IHdyYXBwZXIgdG8gY2hhc2UKCSAgICAgIG5vdCBkZWFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzCgkqICouYyA6IHJlcGxhY2VzIGFsbCBjYWxscyB0byBtYWxsb2MoKSBmcmVlKCkgYW5kIHJlYWxsb2MoKSB0bwoJICAgICAgdGhlIHdyYXBwZXIgZnVuY3Rpb25zL21hY3JvcwoJKiB0cmVlLmMgOiByZW1vdmVkIG1lbW9yeSBsZWFrcyBkdWVzIHRvIGNhbGxpbmcgeG1sRnJlZU5vZGUoKQoJICAgICAgaW5zdGVhZCBvZiB4bWxGcmVlTm9kZUxpc3QoKQoKV2VkIFNlcCAgMSAxNDoxNTowOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBjb3JyZWN0ZWQgYSBzdHVwaWQgYnVnIGxlYWRpbmcgdG8gY29yZSBkdW1wIGF0CgkgICAgICAgICAgICAgICAgdHJlZSBkZWFsbG9jYXRpb24uIFJlbW92ZWQgd2FybmluZ3MgaW5kaWNhdGVkIGJ5CgkJCVN0ZXBoYW5lLkNvbnZlcnN5QGxyaS5mcgoJKiBlbnRpdGllcy5jOiBGaXhlcyBZZXQgQW5vdGhlciBTdHVwaWQgQnVnLCBlbnRpdGllcyB3ZXJlIG5vdAoJICAgICAgICAgICAgICBsb29rZWQgZm9yIGluIHRoZSBleHRlcm5hbCBzdWJzZXQKCk1vbiBBdWcgMzAgMTM6MjI6MjYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHZhbGlkLltjaF0geHBhdGguYzogcGF0Y2hlZCBjb21waWxhdGlvbiB3YXJuaW5ncyByZXBvcnRlZAoJICBvbiBTR0kgYnkgU3RlcGhhbmUuQ29udmVyc3lAbHJpLmZyCgpTdW4gQXVnIDI5IDIyOjI3OjI5IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhbGwgLmggOiBjaGFuZ2VkIHRoZSBwcm90b3R5cGUgZGVjbGFyYXRpb24gaW5kZW50IGFzIGluIGd0awoJKiBtb3N0IC5jIDogd29ya2luZyBvbiByZWR1Y2luZyB0aGUgVE9ET3MgaW4gdGhlIGNvZGUKCSogbW9zdCAuYyA6IGNsZWFudXAgdGhvdWdoIC1wZWRhbnRpYyBhbmQgSW5zdXJlKysKCSogaW1wcm92ZW1lbnRzIG9uIHZhbGlkYXRpb24gSUQgY2hlY2tpbmdzLgoJKiB0cmVlLltjaF0gU0FYLmM6IGFkZGVkIHN1cHBvcnQgZm9yIG5hbWVzcGFjZSBvbiBhdHRyaWJ1dGVzICMyMDIyCgkqIHhtbC1jb25maWcuaW46IGNsb3NlZCAjMTgxMAoKTW9uIEF1ZyAxNiAwMzoyNzozOCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oLCB2YWxpZC5jLCB2YWxpZC5oOiBtb3JlIHdvcmsgb24gdmFsaWRpdHksIElEcwoJKiB4cGF0aC5jOiBhZGRlZC9maXhlZCBjb21wYXJpZG9uIGFuZCBlcXVsaXR5LCBhZGRlZCBhIG5ldyBpc2luZgoJICBkZWZpbml0aW9uIGZvciBBSVgKClN1biBBdWcgMTUgMjE6MTU6MTcgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBjb3JyZWN0ZWQgbWlzc2luZyB4bWxDb25mLnNoIGluCgkgIHRoZSBkaXN0cmlidXRpb24gZHVlIHRvIGEgY3V0J24gcGFzdGUgZXJyb3IgYXQgbGFzdCBjb21taXQKClR1ZSBBdWcgMTAgMjA6Mjg6MDkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogdXBncmFkZWQgdG8gdmVyc2lvbiAxLjQuMAoJKiB2YWxpZC5bY2hdLCBTQVguYywgcGFyc2VyLltjaF0gcGFyc2VySW50ZXJuYWxzLmggLi4uCgkgIEJpZyB1cGRhdGUsIGFkZGVkIGEgbGFyZ2UgcGFydCBvZiB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzLAoJICBpdCBzaG91bGQgYmUgdXNhYmxlLCBidXQgc29tZSBwYXJ0cyBhcmUgbWlzc2luZwoJKiB4cGF0aC5jOiBpbXByb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gdy5yLnQuIHJvb3QuCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBtb3JlIHRlc3RzCgkqIHRlc3QgYW5kIHJlc3VsdCB0cmVlczogYWRkZWQgYSBsb3Qgb2YgdGVzdHMKCSogbGlieG1sLnNwZWMuaW46IGV4cG9ydCBsaWJ4bWwuc28uMCBhbmQgbGlieG1sLnNvLjEKClR1ZSBBdWcgMTAgMTE6MzM6NDEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEFkZGVkIGFuIEhBQ0tJTkcgZmlsZQoKVHVlIEp1bCAyNyAyMTo0MzowMCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKICAgICAgICAqIHhwYXRoLltjaF0gOiBpbXByb3ZlbWVudHMgYW5kIGRlYnVnIG9mIHRoZSBYUGF0aCBpbXBsZW1lbnRhdGlvbgogICAgICAgICogcGFyc2VyLmMsIEhUTUxwYXJzZXIuYyA6IG1vZGlmaWVkIHRoZSBwYXJzZXJzIHRvIGJlIHByb2dyZXNzaXZlCgkqIHRyZWUuW2NoXSA6IGV4dGVuZGVkIHRoZSBCdWZmZXIgcHJvbWl0aXZlcwoJKiB4bWxJTy5bY2hdIDogYWRkZWQgYmFzaWMgSS9PIHJvdXRpbmVzIHByb3ZpZGluZyBwcm9ncmVzc2l2ZQoJICBwYXJzaW5nIGFuZCByZWFkeSBmb3IgSTE4TiBjb252ZXJzaW9uIHBsdWdpbnMKCSogU0FYcmVzdWx0LyogOiB0aGUgU0FYIGNhbGxiYWNrIHNlcXVlbmNlIG1heWJlIHNsaWdodGx5IGRpZmZlcmVudAoJICBub3cKCSogdGVzdCouYyA6IGltcHJvdmVkL3VwZGF0ZWQgdGhlIHRlc3RzIHByb2dyYW1zCgkqIGRvYy8qIDogcmVjb21waWxlZCB0aGUgZG9jcy4KCjE5OTktMDctMjYgIE1pY2hhZWwgTWVla3MgIDxtaWNoYWVsQGVkZW5wcm9qZWN0Lm9yZz4KCgkqIHRyZWUuaDogQWRkIGNvbnN0IHRvICdjb250ZW50JyBpbiB4bWxOZXdEb2NOb2RlLCB4bWxOZXdDaGlsZAoKCSogdHJlZS5jOiBEaXR0by4KClRodSBKdWwgMTUgMTY6MTc6MTYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogdXBncmFkZWQgdG8gdmVyc2lvbiAxLjQuMAoJKiB4cGF0aC5jLCB4cGF0aC5oLCB0ZXN0WFBhdGguYywgbWFrZWZpbGUuYW06IGFkZGVkIGNvZGUgZm9yIHRoZSBYUGF0aAoJICBkcmFmdCBmcm9tIFczQy4gV2lsbCBiZSB1c2VkIGJ5IFhQb2ludGVyLCBYbGluaywgWFNMLCBhbmQgcG9zc2libHkKCSAgWE1MIHF1ZXJ5IGxhbmd1YWdlLCBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGggZm9yIG1vcmUgZGV0YWlscy4KCSogcGFyc2VyLmMsIHBhcnNlci5oOiBhZGRlZCBDSEFSKiByZWxhdGVkIHN0cmluZyBmdW5jdGlvbnMgZm9yIFhQYXRoCgkqIEhUTUxwYXJzZXIuW2NoXSwgSFRNTHRyZWUuYzogYSBiaXQgb2YgY2xlYW51cCBvbiBlbnRpdGllcy4KCSogZG9jL2dub21lLXhtbC5zZ21sLCBkb2MvaHRtbC8qIDogYWRkZWQgWFBhdGggYW5kIEhUTUwgZG9jdW1lbnRhdGlvbiwKCSAgcmVidWlsZCB0aGUgZG9jcy4KCSogTWFrZWZpbGUuYW0sIHRlc3QvWFBhdGgvKiwgcmVzdWx0L1hQYXRoLyo6IGFkZGVkIGFuIFhQYXRodGVzdHMgdGFyZ2V0CgkgIGFuZCByZWdyZXNzaW9uIHRlc3RpbmcgY2FwYWJpbGl0aWVzIGZvciBYUGF0aC4KCk1vbiBKdWwgMTIgMTI6MzY6MzkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKb2huIEVsbHNvbiA8ZWxsc29uQGx1Y2VudC5jb20+CgkgIGNsb3NpbmcgYnVnICMxNjQ2CgpNb24gSnVsIDEyIDExOjA0OjQ0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbSwgZXhhbXBsZS9NYWtlZmlsZS5hbTogY2xvc2VkIGJ1ZyAjMTY4MwoKU3VuIEp1bCAxMSAxODoxNjozNCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZXhhbXBsZS9NYWtlZmlsZS5hbSwgY29uZmlndXJlLmluOiBhZGRlZCB0aGUgbWFrZWZpbGUgZm9yIHRoZQoJICBnam9icmVhZCBleGFtcGxlCgpTYXQgSnVsIDEwIDE0OjE5OjExIENFU1QgMTk5OSBUb21hc3ogS7NvY3prbyAgPGtsb2N6ZWtAcGxkLm9yZy5wbD4KCiAgICAgICAgKiBkb2MvTWFrZWZpbGUuYW06CiAgICAgICAgLSBmaXggd2hpY2ggYWxsb3cgIm1ha2UgaW5zdGFsbCBERVNURElSPTwvaW5zdGFsbC9wcmVmaXg+Ii4KCkZyaSBKdWwgIDkgMTI6MTA6MjQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEpvaG4gRWxsc29uIDxlbGxzb25AbHVjZW50LmNvbT4KCSAgd2hpY2ggZml4ZWQgYSBwcm9ibGVtIG9uIHRoZSBmaWxlIHJlYWRpbmctY29kZS4KCldlZCBKdWwgIDcgMDk6Mjg6NDMgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXSwgSFRNTHRyZWUuW2NoXTogbW9yZSB3b3JrIGZvciBIVE1MIHBhcnNpbmcgYW5kCgkgIG91dHB1dC4KICAgICAgICAqIE1ha2VmaWxlLmFtLCB0ZXN0L0hUTUwvKiwgcmVzdWx0L0hUTUwvKjogYWRkZWQgSFRNTHRlc3RzIHRhcmdldGVzdEhUTUx0CgpXZWQgSnVsICA3IDAwOjI1OjQyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuaCA6IE9vcHMgcmVtb3ZlZCB0aGUgYmluYXJ5IGNvbXBhdGliaWxpdHkgcHJvYmxlbQoJKiBIVE1McGFyc2VyLltjaF0sIEhUTUx0cmVlLmggOiBNb3JlIHdvcmsgb24gdGhlIEhUTUwgcGFyc2UvZHVtcAoJKiBwYXJzZXIuYywgSFRNTHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoZXMgZm9yIHJlYWRpbmcgZnJvbSBzdGRpbgoKTW9uIEp1bCAgNSAxODo0NTozMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIGVudGl0aWVzLmMsIHZhbGlkLmM6IGNsZWFudXAgYnVnICMxNTkxCgkqIGNvbmZpZ3VyZS5pbjogY2xlYW51cCBidWcgIzE1OTIKCSogSFRNTHBhcnNlci5bY2hdLCB0ZXN0SFRNTC5jOiBzdGFydGVkIGFkZGluZyBhbiBIVE1MIHBhcnNlciB1c2luZwoJICB0aGUgc2FtZSB0cmVlIGJhY2stZW5kLiBIZW5jZSBnZG9tZSB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgaXQuCgkqIGRvYy9NYWtlZmlsZS5hbTogY2xvc2UgYnVnICM2MTcKClNhdCBKdW4gMjYgMjM6MzY6MzggRURUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGFsbG9jdGF0ZSBhIHBlciBwYXJzZXIgY29udGV4dCBTQVggaW50ZXJmYWNlIGJsb2NrCgpUdWUgSnVuIDIyIDIzOjQ2OjMyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiByZWxlYXNlZCAxLjMuMCB3aXRoIHhtbEVuY29kZUVudGl0aWVzIHJlc3RvcmluZyBvbGQgYmVoYXZpb3VyCgkgIGFuZCB4bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudCB3aXRoIHRoZSBjb3JyZWN0IG9uZSA6LVwKCk1vbiBKdW4gMjEgMTQ6MDc6NTMgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbW1pdCBvZiBteSBpbnRlcm5hbCBYTUwgYmFzZSBjaGFuZ2VzLCBxdWl0ZSBhIGxvdCBvZgoJICBjaGFuZ2VzLCBjbGVhbnVwcywgYmV0dGVyIGVudGl0aWVzIHN1cHBvcnQsIGZyYW1ld29yayBmb3IKCSAgbmV3IEkvTyBhbmQgY2hhcnNldCBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nCgkqIEZpeGVkIHRoZSBjb25maWd1cmUvTWFrZWZpbGUgc3R1ZmYgdG8gZ2VuZXJhdGUgc2hhcmVkIGxpYnMKCSAgd2l0aCB0aGUgcHJvcGVyIHZlcnNpb24gaW5mbywgc28gd2UganVtcGVkIG9uIHJldiBmcm9tCgkgIDAuMC4wIHRvIDEuMi4wICEgVGhlIGJpbmFyeSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBicm9rZW4sCgkgIHhtbEVuY29kZUVudGl0aWVzKCkgcmVzdWx0IG5lZWQgdG8gYmUgZnJlZWQgbm93LCBhbmQgYSBzdHJpbmcKCSAgeG1sUGFyc2VyVmVyc2lvbiBwcm92aWRlIHRoZSBjdXJyZW50IGxpYnJhcnkgdmVyc2lvbi4KClR1ZSBKdW4gMTUgMTQ6MjQ6MTkgMTk5OSAgUmFwaCBMZXZpZW4gIDxyYXBoQGFjbS5vcmc+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBidWZmZXIgb3ZlcnJ1biBmb3Igd2hlbiB5b3UgaGF2ZSBhIHZlcnkgbG9uZwoJYXR0cmlidXRlIHdpdGggbm8gZW50aXRpZXMgaW4gaXQuCgpNb24gSnVuIDE0IDAwOjE3OjUwIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCBleGFtcGxlIGRpcmVjdG9yeQoJKiBhZGRlZCBleGFtcGxlL2dqb2JzLnhtbCBnam9icmVhZC5jLCBzdGlsbCBuZWVkIGEgTWFrZWZpbGUuaW4KCldlZCBKdW4gIDIgMTk6NDA6NTggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFJlbGVhc2Ugb2YgbGlieG1sLTEuMSwgbmVhcmx5IGV2ZXJ5dGhpbmcgaGFzIGJlZW4gdG91Y2hlZCBmb3IKCSAgdGhpcy4KCSogQWRkZWQgbW9yZSByZWdyZXNzaW9uIHRlc3RzCgkqIFVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KClNhdCBNYXkgMjkgMTM6MzQ6NDIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogdW5pZmllZCB0aGUgWE1MX05PX0NPUkJBIGRlZmluZXMuCgkqIHBhcnNlci5jIGVuY29kaW5nLltjaF06IHN0YXJ0ZWQgcGx1Z2dpbmcgaW4gY2hhciBlbmNvZGluZyBkZXRlY3Rpb24KCkZyaSBNYXkgMjggMjI6NTg6NDIgRURUIDE5OTkgTWFuaXNoIFZhY2hoYXJhamFuaSA8bXZhY2hoYXJAdmdlci5ydXRnZXJzLmVkdT4KCgkqIHRyZWUuYzogKHhtbFNhdmVGaWxlKSAtIHJlbW92ZWQgZG91YmxlIGNhbGwgb2YgeG1sQ29udGVudER1bXAuICAKCSAgQWxzbyBmcmVlZCBhbGxvY2F0ZWQgYnVmZmVyLgoKV2VkIEFwciAyMSAyMjowNzozNSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoJKiBwYXJzZXIuW2NoXSB0cmVlLltjaF0gZW50aXRpZXMuW2NoXSB2YWxpZC5bY2hdIDogcmVtb3ZlZCB0aGUgbWFpbgoJICByZWVudHJhbmN5IHByb2JsZW0gYXQgcHJpbnRpbmcuIE9uZSBpcyBsZWZ0IGluIGVudGl0aWVzLmMsIHRvCgkgIHJlbW92ZSBBU0FQCgkqIHRlc3RTQVguYyA6IGFkZGVkIGEgdGVzdCBleGFtcGxlIHNob3dpbmcgdGhlIHVzZSBvZiB0aGUgU0FYIAoJICBpbnRlcmZhY2UgaWYgb25lIGRvZXNuJ3Qgd2FudCB0byBidWlsZCB0aGUgRE9NIHRyZWUuCgkqIGh0bWwvZ25vbWUteG1sLSouaHRtbCBodG1sL2luZGV4LnNnbWw6IHJlZ2VuZXJhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpNb24gQXByICA1IDE0OjE0OjQwIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSB0cmVlLltjaF0gU0FYLmMsIHBhcnNlckludGVybmFscy5oIHZhbGlkLltjaF06CgkgIGxhcmdlIHJldmFtcGluZyBvZiB0aGUgcGFyc2VyIHRvIHVzZSBTQVggY2FsbGJhY2tzCgkgIGh0dHA6Ly93d3cubWVnZ2luc29uLmNvbS9TQVgvIChvciBhdCBsZWFzdCBhIEMgbGlrZSBpbnRlcmZhY2UKCSAgYSBsYSBFeHBhdCkuIEl0J3Mgbm93IHBvc3NpYmxlIHRvIHNldCB1cCB5b3VyIG93biBjYWxsYmFja3MKCSAgYW5kIHRoZSBwYXJzZXIgd2lsbCBub3QgYnVpbGQgYSBET00gdHJlZS4KCSogdGVzdC8qIHJlc3VsdC8qOiB1cGRhdGVkIHRoZSB0ZXN0IHN1aXRlLCBJIGZpbmFsbHkgcmVtb3ZlZAoJICB0aGUgb2xkIE5hbWVzcGFjZSBkcmFmdCBzdXBwb3J0IChQSSBiYXNlZCkuCgpGcmkgQXByICAyIDE3OjU3OjMyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgdGVzdCByZXN1bHQgdG8gRVhUUkFfRElTVCBmb3IgbWFrZSB0ZXN0cwoKV2VkIE1hciAyNCAyMTozNzowMiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgcGFyc2VySW50ZXJuYWxzLmg6IG1vdmVkIHRoZSBjaGFycyBtYWNybyBkZWZpbml0aW9ucwoJICB0byBwYXJzZXJJbnRlcm5hbHMuaAoJKiBwYXJzZXIuYywgZXJyb3IuYzogYXBwbGllZCBwYXRjaGVzIGZyb20gIktudXQgxWtlc3NvbiIKCSAgPGthQHMyLmNoYWxtZXJzLnNlPiBmb3IgY2xlYW4gY29tcGlsYXRpb24gdW5kZXIgTVNWQyA2IDotbwoKVHVlIE1hciAyMyAxMToxMDoxNSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWwtY29uZmlnLmluIDogYXBwbGllZCBwYXRjaCB0byBtYWtlIC0tdmVyc2lvbiB3b3JrCgoxOTk5LTAzLTA1ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogTWFrZWZpbGUuYW0gKGNoZWNrLWxvY2FsKTogQWxpYXMgZm9yIGB0ZXN0cycgdGFyZ2V0LiAgVGhpcyB3aWxsCgljYXVzZSBgbWFrZSBjaGVjaycgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nLgoJKHRlc3RzKTogRG9uJ3QgcnVuIHRlc3RzIGluIHNyY2Rpci4gIEFsc28sIHJlcGxhY2VkIGNhbGxzIHRvCgliYXNlbmFtZSB3aXRoIGEgYHNlZCcgImVxdWl2YWxlbnQiLgoKRnJpIE1hciAgNSAwNzoyMzo1MyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBSZW5hbWVkIGVycm9yLmggdG8geG1sLWVycm9yLmgsIGNvcnJlY3RlZCBNYWtlZmlsZS5hbSB0byBsaXN0CgkgIGl0IGluIHRoZSBoZWFkZXIgYW5kIG5vdCB0aGUgc291cmNlcywgdXBkYXRlZCB0aGUgZG9jLgoJICBUaGFua3MgdG8gVGltIE1vb25leSA8bW9vbmV5QGRvZ2JlcnQuY2MubmRzdS5ub2Rhay5lZHU+IGZvcgoJICBwb2ludGluZyB0aGlzIG91dC4KCk1vbiBNYXIgIDEgMTM6Mjc6MTcgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHBhcnNlci5oLCBwYXJzZXJJbnRlcm5hbHMuaDogbWVtb3J5IGxlYWsgaHVudGluZywKCSAgZXhwb3J0ZWQgdGhlIGlucHV0U3RyZWFtIHJvdXRpbmVzLgoJKiBkb2MvaHRtbC8qIDogdXBkYXRlZCBhY2NvcmRpbmdseQoKU3VuIEZlYiAyOCAyMjo1MTozMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgcGFyc2VyLmgsIHBhcnNlckludGVybmFscy5oOiBhZGRlZCBhIGZldyBleHRyYQoJICBpbnRlcm5hbCBjYWxscyB0byBhbGxvY2F0ZSBhbmQgZnJlZSBwYXJzZXIgY29udGV4dHMgLi4uCgkqIGRvYy9odG1sLyogOiB1cGRhdGVkIGFjY29yZGluZ2x5CgpUaHUgRmViIDI1IDExOjUyOjI0IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuYW0sIGRvYy9tYWtlZmlsZS5hbSA6IEdlbmVyYWwgY2hhbmdlcyBmb3IKCSAgMS4wLjAgcmVsZWFzZSBhbmQgaW5jbHVkaW5nIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgoKVGh1IEZlYiAyNSAwOTo0NDo1MiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBtYWtlZmlsZS5hbSA6IGFkZGVkIHBhcnNlckludGVybmFscy5oLCBvb3BzLgoKTW9uIEZlYiAyMiAxMToyNDo1NiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXJJbnRlcm5hbHMuaDogYWRkZWQgdGhpcyBoZWFkZXIgZ2l2aW5nIGFjY2VzcyB0byB0aGUgcGFyc2VyCgkgIGludGVybmFsIGZ1bmN0aW9ucy4KCSogZG9jL01ha2VmaWxlLmFtIDogYWRkZWQgYSByZWJ1aWxkIHRhcmdldCB3aGljaCByZWJ1aWxkcyB0aGUgZnVsbAoJICBzZXQgb2YgZG9jdW1lbnRhdGlvbnMKCSogcGFyc2VyLltjaF0gdHJlZS5bY2hdIHZhbGlkLltjaF06IHNlcmlvdXMgdXBkYXRlcyB3LnIudC4gcGFyc2luZwoJICB0aGUgaW50ZXJuYWwgc3Vic2V0LiAKCSogKi5jICouaDogbW9kaWZpY2F0aW9ucyBuZWVkZWQgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb24gdXNpbmcKCSAgZ3RrLWRvYywgY2xlYW51cCBvZiBmdW5jdGlvbnMgYmxvY2tzLCByZW9yZ2FuaXNhdGlvbiBvZiBzdHJ1Y3QKCSAgZGVjbGFyYXRpb25zLgoKVHVlIEZlYiAxNiAxNzoyNzoyOSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbSwgc3BlYywgZG9jL01ha2VmaWxlLmFtIDogdXBncmFkaW5nIHRvIDAuOTkuOCwgZml4aW5nCgkgIHRoZSB0YXIgYW5kIHNwZWMgZmlsZSB0byBpbmNsdWRlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvYy4KCjE5OTktMDItMTMgIE51bm8gRmVycmVpcmEgIDxubXJmQHJubC5pc3QudXRsLnB0PgoKCSogZG9jLy5jdnNpZ25vcmU6IEFkZGVkIHRoaXMgZmlsZS4KCk1vbiBGZWIgIDggMTk6Mjc6NTYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxHZXRQcm9wIHRvIHJldHVybiAiIiB3aGVuIHRoZSBhdHRyaWJ1dGUKCSAgZXhpc3RzLCBldmVuIGlmIHRoZSBub2RlLWxpc3QgaXMgTlVMTC4KCk1vbiBGZWIgIDggMTY6MTA6MTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBwYXRjaGVkIGFuIGVycm9yIG91dHB1dHRpbmcgZW1wdHkgYXR0cmlidXRlIHZhbHVlcy4KCSogTWFrZWZpbGUuYW0gYW5kIGRvYy9tYWtlZmlsZS5hbTogaGF2ZSBiZWVuIHVwZGF0ZWQgZHVyaW5nIHRoZQoJICB3ZWVrLWVuZC4gU29ycnkgZm9yIGFuIGVtcHR5IENWUyBsb2csIEkgZ290IGEgc2hlbGwgcHJvYmxlbS4KCk1vbiBGZWIgIDEgMTI6MTA6MTMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oOiBjbGVhbmVkIHVwIHVzaW5nIGVudW1zIGluc3RlYWQgb2YgZGVmaW5lcwoJKiBwYXJzZXIuYywgdmFsaWQuW2NoXTogbW9yZSB3b3JrIG9uIHBhcnNpbmcvb3V0cHV0IG9mIGVsZW1lbnQKCSAgZGVjbGFyYXRpb25zCgpTdW4gSmFuIDMxIDIyOjA2OjQ4IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHZhbGlkLltjaF0sIHRyZWUuYywgcGFyc2VyLmMgOiBtb3JlIHdvcmsgdG93YXJkIGZ1bGwgcGFyc2luZwoJICBvZiBYTUwgRFREcy4KCSogUkVBRE1FOiBhZGRlZCBpbmZvcm1hdGlvbnMgYWJvdXQgbWFpbGluZy1saXN0IGFuZCBvbi1saW5lCgkgIGRvY3VtZW50YXRpb24KCjE5OTktMDEtMjcgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBjb25maWd1cmUuaW4gKFhNTF9JTkNMVURFRElSKTogVXNlIC1JIG5vdCAtTCBmb3IgaW5jbHVkZXMuCgpTdW4gSmFuIDE3IDIwOjA2OjM2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCB0cmVlLltjaF0gOiBtb3JlIHdvcmsgdG93YXJkIGNvbmZvcm1hbmNlIHRlc3RpbmcsCgkgIGFkZGVkIGEgbGFzdCBlbGVtZW50IHRvIGFjY2VsZXJhdGUgcGFyc2luZyBvZiB2ZXJ5IGZsYXQgc3RydWN0dXJlcwoJICBzdGFydGVkIHdvcmtpbmcgb24gaW50ZXJuYWwgc3Vic2V0IEVsZW1lbnQgY29udGVudCBkZWNsYXJhdGlvbi4KCSogdmFsaWQuW2NoXSA6IGZpcnN0IGN1dCBhdCBhZGRpbmcgY29kZSB0b3dhcmQgdmFsaWRhdGlvbi4KCSogcHJldmlvdXMgY2hhbmdlcyBoYWQgYWxzbyBzbWFsbCBpbXBhY3Qgb24gbW9zdCBmaWxlcywgZXNwZWNpYWxseQoJICB0aGUgY29uZm9ybWFuY2UgdGVzdGluZyB1c2luZyBKYW1lcyBDbGFyayB0ZXN0IHN1aXRlLgoKU3VuIEphbiAxNyAxNDo0NTowNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0LyogOiB1cGRhdGVkIHRoZSBleGFtcGxlcywgbW9zdCBvZiB0aGVtIHdlcmUgbm90IHdlbGwKCSAgICAgICAgICAgZm9ybWVkIChodW1tKSwgYW5kIGFkZGVkIHJkZjIuCgkqIHJlc3VsdC8qIDogcmVzdWx0aW5nIGNoYW5nZXMgaW4gdGhlIG91dHB1dC4KClN1biBEZWMgIDYgMTM6MDY6NTggRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBjaGFuZ2VkIHRoZSBiZWhhdmlvdXIgb2YgeG1sR2V0UHJvcCBvbiBOVUxMIHZhbHVlcy4KClNhdCBEZWMgIDUgMTI6MjU6MDkgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBwYXRjaGVkIGEgYnVnIGluIHRoZSBnZW5lcmF0aW9uIG9mIGVtcHR5IGF0dHJpYnV0ZXMKCkZyaSBOb3YgMjcgMDE6MzY6NTQgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuW2NoXSwgdHJlZS5bY2hdLCB0ZXN0ZXIuYzogYWRkZWQgY29weSBpbnRlcmZhY2VzCgkgIGZvciBub2RlL3RyZWVzL2RvY3VtZW50cy8uLi4gQmlnZ2VzdCBwcm9ibGVtIGlzIG5hbWVzcGFjZQoJICBzdXBwb3J0IHdoZW4gY29weWluZyBzdWJ0cmVlcy4KClN1biBOb3YgMTUgMTk6NTk6NDcgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIGVudGl0aWVzLmM6IGltcHJvdmUgZW50aXRpZXMgYW5kIGNoYXIgcmVmIGVuY29kaW5nLAoJICBhbmQgY2xlYW51cHMgb2YgZXJyb3IgbWVzc2FnZXMuCgpGcmkgTm92IDEzIDEzOjAzOjEwIEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBlbnRpdGllcy5jOiBzaW1wbGUgYnVnIGh1bnRpbmcgZG9uZSBkdXJpbmcgcnBtMmh0bWwgYW5kCgkgIHJwbWZpbmQgaW50ZWdyYXRpb24uCgpTdW4gTm92ICA4IDEzOjExOjA3IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdOiBBZGRlZCBpbnRlcmZhY2VzIGFsbG93aW5nIHRvIHNwZWNpZnkgYSBTQVgKCSAgaGFuZGxlciBiZWZvcmUgcGFyc2luZy4KClN1biBOb3YgIDggMDk6Mzk6MTcgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IHJlZGlycmVjdCBhbGwgZXJyb3JzIHJlcG9ydGluZyB0aHJvdWdoIHRoZSBTQVgKCSAgZXJyb3IgZnVuY3Rpb24KCldlZCBOb3YgIDQgMTQ6MjE6NTQgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuYzogcmF0aGVyIHVzZSBIQVZFX1NOUFJJTlRGIGFuZCBub3QgZGVwZW5kIG9uIGdsaWIKCSogbGlidG9vbCwgdGxtYWluIC4uLjogdXBkYXRlIG9mIHRoZSBsaWJ0b29sIGZpbGVzCgoxOTk4LTExLTA0ICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogZW50aXRpZXMuYzogVXNlIGdfc25wcmludGYgaW5zdGVkYSBvZiBzbnByaW50Zi4KClN1biBOb3YgIDEgMTQ6MzE6MDYgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuYywgcGFyc2VyLmM6IGRlYnVnIGFuZCBjbGVhbnVwIG9mIENoYXJSZWYgaGFuZGxpbmcvc2F2aW5nLgoJICBhZGRlZCBlbnQ1IHRlc3QgZm9yIHRoaXMgcHVycG9zZS4KCSogcGFyc2VyLmMsIHBhcnNlci5oOiBmb3JtYXR0aW5nLCBjb21tZW50cyBhbmQgVVRGLTggcGxhbm5pbmcuCgpGcmkgT2N0IDMwIDAxOjM2OjUyIEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBmaXhlZD8gYSBzdHJhbmdlIGVycm9yIGR1ZSB0byBjb21wcmVzc2lvbiBvbiBhIEdXUAoJICBkb2N1bWVudC4KClRodSBPY3QgMjkgMDA6NDg6NDUgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBidWcgZml4aW5nCgkqIGVudGl0aWVzLltjaF06IGRlZmluZWQgYSBzcGVjaWZpYyB0eXBlIGZvciBwcmVkZWZpbmVkIGVudGl0aWVzCgkqIGRvYy94bWwuaHRtbDogbW9yZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBsaWJyYXJ5LCBob3cgdG8gdXNlIGl0LAoJICBvdmVydmlldyBvZiB0aGUgaW50ZXJmYWNlcy4KCldlZCBPY3QgMjggMTc6NTY6MzUgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBtb3JlIGNsZWFudXAgb24gdGhlIEFQSSwgbWFkZSB0aGUgdHJlZSBtb3IgY29uZm9ybWFudC4KClR1ZSBPY3QgMjcgMTc6NTQ6MDAgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBjb3JyZWN0ZWQgYSBzbWFsbCBidWcKCSogZG9jL3htbC5odG1sOiBjb250aW51aW5nIHdyaXRpbmcgZG9jdW1lbnRhdGlvbi4KClR1ZSBPY3QgMjcgMTc6NTQ6MDAgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZGVidWdYTUwuaCBkZWJ1Z1hNTC5jOiBhZGRlZCBkZWJ1Z2dpbmcgdXRpbGl0aWVzLgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1kZWJ1ZyBzd2l0Y2guCgkqIHRyZWUuYzogcGF0Y2hlZCBhbiBpbmNvcnJlY3Qgbm9kZS0+dHlwZSBhc3NpZ25tZW50LgoJKiBwYXJzZXIuYzogZm9ybWF0dGluZywgZW5zdXJlIHRoYXQgbm9kZS0+ZG9jICE9IE5VTEwgaW4gYXR0cmlidXRlcwoKVHVlIE9jdCAyNyAwMToxNTozOSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgogICAgICAgICogcGFyc2VyLltjaF0gU0FYLmMgdHJlZS5bY2hdOiBsYXJnZSBhbW91bnQgb2YgY2hhbmdlcyB0byBpbXByb3ZlCiAgICAgICAgICBlbnRpdHkgc3VwcG9ydCBhbmQgcHJvdmlkZSBhbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBjbG9zZSB0bwogICAgICAgICAgRE9NIG9uZSAoZW50aXR5IHJlZiBub2RlcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZSBhcyB0cmVlKS4gSSB0cmllZAogICAgICAgICAgdG8gcHJlc2VydmUgdGhlIGludGVyZmFjZSBidXQgdGhpcyB3aWxsIHN1cmVseSBicmVhayBzb21lIGFwcHMKICAgICAgICAgIChJIGhhdmUgdG8gY2hhbmdlIHJwbTJodG1sL3JwbWZpbmQgZm9yIGV4YW1wbGUpLiBJIGhhZCB0byBjaGFuZ2UKCSAgdHdvIGludGVyZmFjZXMsIGFuZCB0aGUgZ2VuZXJhdGVkIHRyZWUgaXMgc29tZXdoYXQgZGlmZmVyZW50LgoJKiBkb2MvKiA6IHN0YXJ0ZWQgZG9jdW1lbnRpbmcgdGhlIFhNTCBsaWJyYXJ5LCB0aGUgdHJlZSBhbmQKCSAgRE9NL0NvcmJhLiBUaGlzIGlzIGEgZmlyc3Qgc3RlcC4KClNhdCBPY3QgMjQgMTQ6MjM6NTEgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IFNldCB1cCB0aGUgZm9uY3Rpb25zIGNvbW1lbnQgYmxvY2ssIGJvcmluZyBidXQgdXNlZnVsLgoJKiBwYXJzZXIuaCwgU0FYLmMsIHBhcnNlci5jOiBub3cgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkIHRocm91Z2gKCSAgdGhlIFNBWCBpbnRlcmZhY2UuIFRoZSBwcm9ibGVtIGlzIHRoYXQgbXkgU0FYIGludGVyZmFjZSBkaXZlcmdlZAoJICBxdWl0ZSBhIGJpdCBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHdlbGwgdGhpcyBpcyBub3QgYW4gb2ZmaWNpYWwKCSAgc3BlYywgYW5kIHRyYW5zbGF0aW5nIGl0IGZyb20gSmF2YSB0byBDIGlzIGhhaXJ5IGFueXdheS4uLgoKVHVlIE9jdCAyMCAwMjoxMToyMSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguYywgZW50aXRpZXMuYywgdHJlZS5jLCBlbmNvZGluZy5jLCBlcnJvci5jOiBTZXQgdXAgdGhlCgkgIGZvbmN0aW9ucyBjb21tZW50IGJsb2NrLCBib3JpbmcgYnV0IHVzZWZ1bC4KClN1biBPY3QgMTggMjA6NDA6NTggRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW5jb2RpbmcuW2NoXSwgTWFrZWZpbGUuYW06IEFkZGVkIHRoZSBVVEYtOCwgVVRGLTE2IGFuZCBJU08gTGF0aW4gMQoJICBjb252ZXJzaW9uIHJvdXRpbmVzLiBIb3dldmVyIHRoZXkgYXJlIG5vdCB5ZXQgdXNlZCB0byBjb252ZXJ0IHRoZQoJICBpbnB1dHMuIFRoZSBjb3JlIHdpbGwgcnVuIHdpdGggVVRGLTguCgpTdW4gT2N0IDE4IDE1OjA4OjE5IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyA6IG1ha2Ugc3VyZSB0aGF0IHRoZSB0eXBlIGlkIGlzIHByb3Blcmx5IHNldC11cCB3aGVuCgkgIGEgbmV3IG9iamVjdCBpcyBhbGxvY2F0ZWQsIG5lZWRlZCBmb3IgRE9NLgoKU2F0IE9jdCAxNyAwMjo0MzoyMSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmgsIHRyZWUuYzogT2ssIHRoZSBtYWluIG9iamVjdHMgaW4gdGhlIHRyZWUgd2lsbCBiZSBuYXRpdmUKCSAgY29yYmEgb2JqZWN0cywgaXQgY29zdHMgOCBieXRlcyBwZXIgTm9kZSwgQXR0cmlidXRlIGFuZCBEb2N1bWVudAoJICBidXQgaXQgc2ltcGxpZmllcyB0aGUgQ29yYmEgaW50ZWdyYXRpb24gYSBsb3QgKG5vIGV4dHJhIGludGVyZmFjZQoJICBvYmplY3RzIHRvIGFsbG9jYXRlL2ZyZWUpLgoKVHVlIE9jdCAxMyAyMTo0Njo1NyBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmgsIHRyZWUuYywgcGFyc2VyLmM6IGFkZGVkIHByZXYgYW5kIGRvYyBwb2ludGVycyB0byBOb2RlLAoJICBhbmQgY2hhbmdlZCBOT0RFcyBjb250YW50cyBmb3IgY29uZm9ybWl0eSB3aXRoIERPTSBMZXZlbCAxCgpXZWQgT2N0ICA3IDIzOjQyOjQ2IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIGhvb2tzIHRvIGtlZXAgdHJhY2sgb2Ygc2VydmFudHMgd2hlbiBjcmVhdGluZyBvYmplY3RzCgkgIHhtbERvYyBhbmQgeG1sTm9kZSAoZm9yIENvcmJhIGV4cG9ydCkuCgpTdW4gT2N0ICA0IDAzOjE4OjA5IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIHhtbC1jb25maWcgc2NyaXB0LgoKVGh1IE9jdCAgMSAxNjoyMjozNyBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgogICAgICAgICogYXV0b2dlbi5zaCA6IGFwcGxpZWQgcGF0Y2ggZnJvbSBGcmVkZXJpYyBEZXZlcm5heSA8ZGV2ZXJuYXlAaXN0YXIuZnI+CgkgIHRvIGF1dG91cGRhdGUgbGlidG9vbCBhbmQgYXV0b21ha2UgY29uZiBmaWxlcy4KCjE5OTgtMDktMzAgIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBNYWtlZmlsZS5hbTogVXNlICc/JyB0byBzZXBhcmF0ZSB0aGUgc2VkCgljb21tYW5kcyBhcyAnLCcgaXMgdXNlZCB3aGVuIHBlb3BsZSBwYXNzIC1XbCxzb21ldGhpbmcuCgoKVGh1IFNlcCAyNCAxNToxMzoyOSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMsIHRyZWUuaDogYWRkZWQgYSBwZXItZG9jdW1lbnQgY29tcHJlc3Npb24gaW50ZXJmYWNlLgoKVHVlIFNlcCAyMiAyMDo0NzozOCBFRFQgMTk5OAoKCSogdHJlZS5jLCB0cmVlLmg6IGFkZGVkIHNhdmluZyB3aXRoIGNvbXByZXNzaW9uIGFuZCBhZGRlZCBpbnRlcmZhY2VzCgkgIHRvIGNvbnRyb2wgdGhlIGNvbXByZXNzaW9uIGxldmVsICh4bWxHZXRDb21wcmVzc01vZGUsCgkgIHhtbFNldENvbXByZXNzTW9kZSkgYW5kIGEgbmV3IHNhdmUgdG8gZmlsZW5hbWUgZnVuY3Rpb24gKHhtbFNhdmVGaWxlKS4KCk1vbiBTZXAgMjEgMjA6MTE6MTMgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGNvcnJlY3RlZCBhIGxvb3AgZm9yIGZpbGVzIG9mIHNpemUgMAoKMTk5OC0wOC0yMCAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGVycm9yLmg6IE5ldyBmaWxlLiAgQ29udGFpbnMgcHJvdG90eWVzIGZyb20gYGVycm9yLmMnLgoKVGh1IEF1ZyAxMyAxOTowMjozNCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5hbSAoeG1saW5jZGlyKTogTmV3IG1hY3JvLgoJKHhtbGluY19IRUFERVJTKTogUmVuYW1lZCBmcm9tIGluY2x1ZGVfSEVBREVSUy4KClRodSBBdWcgMTMgMDA6NDA6MTQgRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFwcGxpZWQgc21hbGwgcGF0Y2ggb24gbnVtZXJpYyBlbnRpdGllcyBmcm9tCgkgIENocmlzdG9waGVyIEJsaXp6YXJkIDxibGl6emFyZEBhcHBsaWVkdGhlb3J5LmNvbT4KCldlZCBBdWcgMTIgMjM6MTI6NTggRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE5ldyByZWxlYXNlIDAuMiwgcmVtb3ZlZCB0aGUgb2xkIHhtbF8qIGZpbGVzIHNvIHRoYXQgaXQncwoJICAgIGNvaGVyZW50IHdpdGggdGhlIG90aGVyIENWUyBiYXNlIChXM0MpLCBmYXIgYmV0dGVyIGNvbmZvcm1hbmNlCgkgICAgdG8gc3RhbmRhcmQsIG5ldyBuYW1lc3BhY2VzLCBkZWNlbnQgZW50aXRpZXMgc3VwcG9ydCwgYmVnaW5uaW5nCgkgICAgb2YgYSBTQVgtbGlrZSBpbnRlcmZhY2UuIE5lYXJseSBub3RoaW5nIGxlZnQgaW50YWN0LCBldmVuIHRoZQoJICAgIHRlc3QgZXhhbXBsZXMgLi4uCgoxOTk4LTA3LTMwICBDaHJpc3RvcGhlciBCbGl6emFyZCAgPGJsaXp6YXJkQGFwcGxpZWR0aGVvcnkuY29tPgoKCSogLmN2c2lnbm9yZTogQWRkIC5kZXBzIGRpcgoKU3VuIEp1bCAyNiAxNzoyOTo1MiBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sX3RyZWU6IGNoYW5nZWQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSBmb3IgbmFtZSBpbiB4bWxOZXdOb2RlCgpTdW4gSnVsIDI2IDAwOjE3OjUxIEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgogICAgICAgICogY29uZmlndXJlLmluOiBhZGRlZCB0ZXN0IGZvciBDUFAKCSogQVVUSE9SUywgQ2hhbmdlbG9nOiB0aGUgb3JpZ2luYWwgb25lcyBkaWRuJ3QgZ2V0IGNvbW1pdGVkIGJ1dCB0aGUKCSAgICBnbGliIG9uZXMgaW5zdGVhZCwgZml4ZWQuCgkqIE1ha2VmaWxlLmFtOiBjb3JyZWN0ZWQgYW4gZXJyb3IgaW4gbGlicmFyeSBuYW1pbmcKCkZyaSBKdWwgMjQgMTY6NDc6MTQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogaW50ZWdyYXRlZCBjb2RlIGRldmVsb3BwZWQgYXQgVzNDCgkqIGNoYW5nZWQgdGhlIG9yaWdpbmFsIENvcHlyaWdodAoJKiBtaWdyYXRlZCB0byBhdXRvbWFrZQoJKiBwcmVmaXhlZCB0aGUgZmlsZW5hbWVzIGJ5IHhtbF8gdG8gYXZvaWQgZmlsZW5hbWUgY2xhc2hlcwoK