LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIFRyYWNlIFJlY29yZGVyIExpYnJhcnkgZm9yIFRyYWNlYWx5emVyIHYzLjAuMg0KICogUGVyY2VwaW8gQUIsIHd3dy5wZXJjZXBpby5jb20NCiAqDQogKiB0cmNDb25maWcuaA0KICoNCiAqIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIHN0cmVhbWluZyB2ZXJzaW9uIHRyYWNlIHJlY29yZGVyIGxpYnJhcnkuDQogKiBCZWZvcmUgdXNpbmcgdGhlIHRyYWNlIHJlY29yZGVyIGxpYnJhcnksIHBsZWFzZSBjaGVjayB0aGF0IHRoZSBkZWZhdWx0DQogKiBzZXR0aW5ncyBhcmUgYXBwcm9wcmlhdGUgZm9yIHlvdXIgc3lzdGVtLCBhbmQgaWYgbmVjZXNzYXJ5IGFkanVzdCB0aGVzZS4NCiAqDQogKiBUZXJtcyBvZiBVc2UNCiAqIFRoaXMgc29mdHdhcmUgKHRoZSAiVHJhY2VhbHl6ZXIgUmVjb3JkZXIgTGlicmFyeSIpIGlzIHRoZSBpbnRlbGxlY3R1YWwNCiAqIHByb3BlcnR5IG9mIFBlcmNlcGlvIEFCIGFuZCBtYXkgbm90IGJlIHNvbGQgb3IgaW4gb3RoZXIgd2F5cyBjb21tZXJjaWFsbHkNCiAqIHJlZGlzdHJpYnV0ZWQgd2l0aG91dCBleHBsaWNpdCB3cml0dGVuIHBlcm1pc3Npb24gYnkgUGVyY2VwaW8gQUIuDQogKg0KICogU2VwYXJhdGUgY29uZGl0aW9ucyBhcHBsaWVzIGZvciB0aGUgU0VHR0VSIGJyYW5kZWQgc291cmNlIGNvZGUgaW5jbHVkZWQuDQogKg0KICogVGhlIHJlY29yZGVyIGxpYnJhcnkgaXMgZnJlZSBmb3IgdXNlIHRvZ2V0aGVyIHdpdGggUGVyY2VwaW8gcHJvZHVjdHMuDQogKiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHJlY29yZGVyIGxpYnJhcnkgaW4gaXRzIG9yaWdpbmFsIGZvcm0sIGJ1dCBwdWJsaWMNCiAqIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyByZXF1aXJlIGFwcHJvdmFsIGJ5IFBlcmNlcGlvIEFCLg0KICoNCiAqIERpc2NsYWltZXINCiAqIFRoZSB0cmFjZSB0b29sIGFuZCByZWNvcmRlciBsaWJyYXJ5IGlzIGJlaW5nIGRlbGl2ZXJlZCB0byB5b3UgQVMgSVMgYW5kDQogKiBQZXJjZXBpbyBBQiBtYWtlcyBubyB3YXJyYW50eSBhcyB0byBpdHMgdXNlIG9yIHBlcmZvcm1hbmNlLiBQZXJjZXBpbyBBQiBkb2VzDQogKiBub3QgYW5kIGNhbm5vdCB3YXJyYW50IHRoZSBwZXJmb3JtYW5jZSBvciByZXN1bHRzIHlvdSBtYXkgb2J0YWluIGJ5IHVzaW5nIHRoZQ0KICogc29mdHdhcmUgb3IgZG9jdW1lbnRhdGlvbi4gUGVyY2VwaW8gQUIgbWFrZSBubyB3YXJyYW50aWVzLCBleHByZXNzIG9yDQogKiBpbXBsaWVkLCBhcyB0byBub25pbmZyaW5nZW1lbnQgb2YgdGhpcmQgcGFydHkgcmlnaHRzLCBtZXJjaGFudGFiaWxpdHksIG9yDQogKiBmaXRuZXNzIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLiBJbiBubyBldmVudCB3aWxsIFBlcmNlcGlvIEFCLCBpdHMNCiAqIHRlY2hub2xvZ3kgcGFydG5lcnMsIG9yIGRpc3RyaWJ1dG9ycyBiZSBsaWFibGUgdG8geW91IGZvciBhbnkgY29uc2VxdWVudGlhbCwNCiAqIGluY2lkZW50YWwgb3Igc3BlY2lhbCBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGxvc3QgcHJvZml0cyBvciBsb3N0IHNhdmluZ3MsDQogKiBldmVuIGlmIGEgcmVwcmVzZW50YXRpdmUgb2YgUGVyY2VwaW8gQUIgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkNCiAqIG9mIHN1Y2ggZGFtYWdlcywgb3IgZm9yIGFueSBjbGFpbSBieSBhbnkgdGhpcmQgcGFydHkuIFNvbWUganVyaXNkaWN0aW9ucyBkbw0KICogbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsIG9yIHNwZWNpYWwNCiAqIGRhbWFnZXMsIG9yIHRoZSBleGNsdXNpb24gb2YgaW1wbGllZCB3YXJyYW50aWVzIG9yIGxpbWl0YXRpb25zIG9uIGhvdyBsb25nIGFuDQogKiBpbXBsaWVkIHdhcnJhbnR5IG1heSBsYXN0LCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbnMgbWF5IG5vdCBhcHBseSB0byB5b3UuDQogKg0KICogVGFicyBhcmUgdXNlZCBmb3IgaW5kZW50IGluIHRoaXMgZmlsZSAoMSB0YWIgPSA0IHNwYWNlcykNCiAqDQogKiBDb3B5cmlnaHQgUGVyY2VwaW8gQUIsIDIwMTUuDQogKiB3d3cucGVyY2VwaW8uY29tDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQojaWZuZGVmIFRSQ19DT05GSUdfSA0KI2RlZmluZSBUUkNfQ09ORklHX0gNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gk0OUIHsNCiNlbmRpZg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX1JFQ09SREVSX0hBUkRXQVJFX1BPUlQNCiAqDQogKiBTcGVjaWZ5IHdoYXQgaGFyZHdhcmUgaXMgdXNlZC4NCiAqDQogKiBTZWUgdHJjSGFyZHdhcmVQb3J0LmggZm9yIGF2YWlsYWJsZSBwb3J0cywgb3IgdG8gZGVmaW5lIHlvdXIgb3duLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNkZWZpbmUgVFJDX1JFQ09SREVSX0hBUkRXQVJFX1BPUlQgVFJDX1BPUlRfQVJNX0NvcnRleF9NDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIEJTUCBhbmQgb3RoZXIgcHJvamVjdCBzcGVjaWZpYyBpbmNsdWRlcw0KICogDQogKiBJbmNsdWRlIHRoZSBuZWNlc3NhcnkgaGVhZGVyIGZpbGVzLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2luY2x1ZGUgImJvYXJkLmgiDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIFRSQ19GUkVFUlRPU19WRVJTSU9ODQogKiANCiAqIFNwZWNpZnkgd2hhdCB2ZXJzaW9uIG9mIEZyZWVSVE9TIHRoYXQgaXMgdXNlZC4gVGhpcyBpcyBuZWNlc3NhcnkgY29tcGVuc2F0ZSANCiAqIGZvciByZW5hbWVkIHN5bWJvbHMgaW4gdGhlIEZyZWVSVE9TIGtlcm5lbCAoZG9lcyBub3QgYnVpbGQgaWYgaW5jb3JyZWN0KS4NCiAqIA0KICogVFJDX0ZSRUVSVE9TX1ZFUlNJT05fN18zX09SXzdfNCAoPSAxKQkJSWYgdXNpbmcgRnJlZVJUT1MgdjcuMy4wIC0gdjcuNC4yDQogKiBUUkNfRlJFRVJUT1NfVkVSU0lPTl83XzVfT1JfN182ICg9IDIpCQlJZiB1c2luZyBGcmVlUlRPUyB2Ny41LjAgLSB2Ny42LjANCiAqIFRSQ19GUkVFUlRPU19WRVJTSU9OXzhfMF9PUl9MQVRFUiAoPSAzKQkJSWYgdXNpbmcgRnJlZVJUT1MgdjguMC4wIG9yIGxhdGVyDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQojZGVmaW5lIFRSQ19GUkVFUlRPU19WRVJTSU9OX05PVF9TRVQJCQkwDQojZGVmaW5lIFRSQ19GUkVFUlRPU19WRVJTSU9OXzdfM19PUl83XzQJCQkxDQojZGVmaW5lIFRSQ19GUkVFUlRPU19WRVJTSU9OXzdfNV9PUl83XzYJCQkyDQojZGVmaW5lIFRSQ19GUkVFUlRPU19WRVJTSU9OXzhfMF9PUl9MQVRFUgkJMw0KDQojZGVmaW5lIFRSQ19GUkVFUlRPU19WRVJTSU9OCVRSQ19GUkVFUlRPU19WRVJTSU9OXzhfMF9PUl9MQVRFUg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX1NZTUJPTF9UQUJMRV9TTE9UUw0KICoNCiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzeW1ib2xzIG5hbWVzIHRoYXQgY2FuIGJlIHN0b3JlZC4gVGhpcyBpbmNsdWRlczoNCiAqIC0gVGFzayBuYW1lcw0KICogLSBOYW1lZCBJU1JzICh2VHJhY2VTZXRJU1JQcm9wZXJ0aWVzKQ0KICogLSBOYW1lZCBrZXJuZWwgb2JqZWN0cyAodlRyYWNlU3RvcmVLZXJuZWxPYmplY3ROYW1lKQ0KICogLSBVc2VyIGV2ZW50IGNoYW5uZWxzICh2VHJhY2VTdG9yZVVzZXJFdmVudENoYW5uZWxOYW1lKQ0KICoNCiAqIElmIHRoaXMgdmFsdWUgaXMgdG9vIHNtYWxsLCBub3QgYWxsIHN5bWJvbCBuYW1lcyB3aWxsIGJlIHN0b3JlZCBhbmQgdGhlDQogKiB0cmFjZSBkaXNwbGF5IHdpbGwgYmUgYWZmZWN0ZWQuIEluIHRoYXQgY2FzZSwgdGhlcmUgd2lsbCBiZSB3YXJuaW5ncw0KICogKGFzIFVzZXIgRXZlbnRzKSBmcm9tIFR6Q3RybCB0YXNrLCB0aGF0IG1vbml0b3JzIHRoaXMuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBUUkNfU1lNQk9MX1RBQkxFX1NMT1RTIDMwDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBDb25maWd1cmF0aW9uIE1hY3JvOiBUUkNfU1lNQk9MX01BWF9MRU5HVEgNCiAqDQogKiBUaGUgbWF4aW11bSBsZW5ndGggb2Ygc3ltYm9sIG5hbWVzLCBpbmNsdWRpbmc6DQogKiAtIFRhc2sgbmFtZXMNCiAqIC0gTmFtZWQgSVNScyAodlRyYWNlU2V0SVNSUHJvcGVydGllcykNCiAqIC0gTmFtZWQga2VybmVsIG9iamVjdHMgKHZUcmFjZVN0b3JlS2VybmVsT2JqZWN0TmFtZSkNCiAqIC0gVXNlciBldmVudCBjaGFubmVsIG5hbWVzICh2VHJhY2VTdG9yZVVzZXJFdmVudENoYW5uZWxOYW1lKQ0KICoNCiAqIElmIGxvbmdlciBzeW1ib2wgbmFtZXMgYXJlIHVzZWQsIHRoZXkgd2lsbCBiZSB0cnVuY2F0ZWQgYnkgdGhlIHJlY29yZGVyLA0KICogd2hpY2ggd2lsbCBhZmZlY3QgdGhlIHRyYWNlIGRpc3BsYXkuIEluIHRoYXQgY2FzZSwgdGhlcmUgd2lsbCBiZSB3YXJuaW5ncw0KICogKGFzIFVzZXIgRXZlbnRzKSBmcm9tIFR6Q3RybCB0YXNrLCB0aGF0IG1vbml0b3JzIHRoaXMuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBUUkNfU1lNQk9MX01BWF9MRU5HVEggMjUNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvbmZpZ3VyYXRpb24gTWFjcm86IFRSQ19PQkpFQ1RfREFUQV9TTE9UUw0KICoNCiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBvYmplY3QgZGF0YSBlbnRyaWVzICh1c2VkIGZvciB0YXNrIHByaW9yaXRpZXMpIHRoYXQgY2FuDQogKiBiZSBzdG9yZWQgYXQgdGhlIHNhbWUgdGltZS4gTXVzdCBiZSBzdWZmaWNpZW50IGZvciBhbGwgdGFza3MsIG90aGVyd2lzZSB0aGVyZQ0KICogd2lsbCBiZSB3YXJuaW5ncyAoYXMgVXNlciBFdmVudHMpIGZyb20gVHpDdHJsIHRhc2ssIHRoYXQgbW9uaXRvcnMgdGhpcy4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQojZGVmaW5lIFRSQ19PQkpFQ1RfREFUQV9TTE9UUyAyMA0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX1JUVF9VUF9CVUZGRVJfSU5ERVgNCiAqDQogKiBEZWZpbmVzIHRoZSBSVFQgYnVmZmVyIHRvIHVzZSBmb3Igd3JpdGluZyB0aGUgdHJhY2UgZGF0YS4gTWFrZSBzdXJlIHRoYXQNCiAqIHRoZSBQQyBhcHBsaWNhdGlvbiBoYXMgdGhlIHNhbWUgc2V0dGluZyAoRmlsZS0+U2V0dGluZ3MpLg0KICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQojZGVmaW5lIFRSQ19SVFRfVVBfQlVGRkVSX0lOREVYIDANCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvbmZpZ3VyYXRpb24gTWFjcm86IFRSQ19SVFRfRE9XTl9CVUZGRVJfSU5ERVgNCiAqDQogKiBEZWZpbmVzIHRoZSBSVFQgYnVmZmVyIHRvIHVzZSBmb3IgcmVhZGluZyB0aGUgdHJhY2UgZGF0YS4gTWFrZSBzdXJlIHRoYXQNCiAqIHRoZSBQQyBhcHBsaWNhdGlvbiBoYXMgdGhlIHNhbWUgc2V0dGluZyAoRmlsZS0+U2V0dGluZ3MpLg0KICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQojZGVmaW5lIFRSQ19SVFRfRE9XTl9CVUZGRVJfSU5ERVggMA0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX0NUUkxfVEFTS19TVEFDS19TSVpFDQogKg0KICogVGhlIHN0YWNrIHNpemUgb2YgdGhlIFR6Q3RybCB0YXNrLCB0aGF0IHJlY2VpdmUgY29tbWFuZHMuDQogKiBXZSBhcmUgYWltaW5nIHRvIHJlbW92ZSB0aGlzIGV4dHJhIHRhc2sgaW4gZnV0dXJlIHZlcnNpb25zLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNkZWZpbmUgVFJDX0NUUkxfVEFTS19TVEFDS19TSVpFIChjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUgKiAyKQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX0NUUkxfVEFTS19QUklPUklUWQ0KICoNCiAqIFRoZSBwcmlvcml0eSBvZiB0aGUgVHpDdHJsIHRhc2ssIHRoYXQgcmVjZWl2ZSBjb21tYW5kcyBmcm9tLg0KICogV2UgYXJlIGFpbWluZyB0byByZW1vdmUgdGhpcyBleHRyYSB0YXNrIGluIGZ1dHVyZSB2ZXJzaW9ucy4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQojZGVmaW5lIFRSQ19DVFJMX1RBU0tfUFJJT1JJVFkgMQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX0NUUkxfVEFTS19ERUxBWQ0KICoNCiAqIFRoZSBkZWxheSBiZXR3ZWVuIGV2ZXJ5IGxvb3Agb2YgdGhlIFR6Q3RybCB0YXNrLiBBIGhpZ2ggZGVsYXkgd2lsbCByZWR1Y2UgdGhlDQogKiBDUFUgbG9hZCwgYnV0IG1heSBjYXVzZSBtaXNzZWQgZXZlbnRzIGlmIHRoZSBUekN0cmwgdGFzayBpcyBwZXJmb3JtaW5nIHRoZSANCiAqIHRyYWNlIHRyYW5zZmVyLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNkZWZpbmUgVFJDX0NUUkxfVEFTS19ERUxBWSAoKDEwICogY29uZmlnVElDS19SQVRFX0haKSAvIDEwMDApDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBDb25maWd1cmF0aW9uIE1hY3JvOiBUUkNfTUVBU1VSRV9CTE9DS0lOR19USU1FDQogKg0KICogSWYgdXNpbmcgU0VHR0VSX1JUVF9NT0RFX0JMT0NLX0lGX0ZJRk9fRlVMTCwgdGhpcyBhY3RpdmF0ZXMgZGV0ZWN0aW9uIGFuZA0KICogd2FybmluZ3MgaW4gY2FzZSBvZiBibG9ja2luZyBpbiBTRUdHRVJfUlRUX1dyaXRlIChpZiB0b28gc21hbGwgYnVmZmVyKS4NCiAqDQogKiBJZiBlbmFibGluZyB0aGlzIG9wdGlvbiAoc2V0IHRvIDEpIHdhcm5pbmdzIGFyZSBnaXZlbiBhcyBVc2VyIEV2ZW50cyBpZg0KICogYmxvY2tpbmcgb2NjdXJzLCBpbmNsdWRpbmcgdGhlIGxvbmdlc3QgYmxvY2tpbmcgdGltZS4gVGhlc2Ugd2FybmluZ3MgYXJlDQogKiBnaXZlbiBvbiB0aGUgY2hhbm5lbCAiQmxvY2tpbmcgb24gdHJhY2UgYnVmZmVyIi4NCiAqDQogKiBOb3RlOiBJZiB5b3UgZ2V0IHN1Y2ggd2FybmluZ3MsIHlvdSBjYW4gc3R1ZHkgdGhlIGJsb2NraW5nIHRpbWUgaW4gdGhlIFVzZXINCiAqIEV2ZW50IFNpZ25hbCBQbG90IHRvIGdldCBhbiBvdmVydmlldyBvZiB0aGUgbWFnbml0dWRlIG9mIHRoZSBibG9ja2luZyBhbmQNCiAqIGRlY2lkZSBpZiBhY2NlcHRhYmxlLg0KICoNCiAqIFRvIGVsaW1pbmF0ZSBvciBhdCBsZWFzdCByZWR1Y2Ugb2NjdXJyZW5jZXMgb2YgYmxvY2tpbmc6DQogKg0KICogLSBWZXJpZnkgdGhlIEotTGluayBTcGVlZCBpbiB0aGUgU2V0dGluZ3MgZGlhbG9nIG9mIHRoZSBQQyBhcHBsaWNhdGlvbi4NCiAqICAgRGVmYXVsdCBpcyA0IE1IeiwgYnV0IGNhbiBiZSBpbmNyZWFzZWQgYSBsb3QgZGVwZW5kaW5nIG9uIHlvdXIgSi1MaW5rLg0KICoNCiAqICAgTm90ZTogSWYgeW91IHNldCB0aGUgc3BlZWQgaGlnaGVyIHRoYW4geW91ciBKLUxpbmsgY2FuIG1hbmFnZSwgdGhlIEotTGluaw0KICogICBkcml2ZXIgd2lsbCBpbnN0ZWFkIHVzZSB0aGUgZmFzdGVzdCBzdXBwb3J0ZWQgc3BlZWQuIFRoZSBhY3R1YWwgc3BlZWQgdXNlZA0KICogICBpcyBzaG93biBpbiB0aGUgdGl0bGUgb2YgdGhlIHRyYWNlIHJlY2VpdmVyIHdpbmRvdy4NCiAqDQogKiAtIEluY3JlYXNlIHRoZSBidWZmZXIgc2l6ZSAoQlVGRkVSX1NJWkVfVVAgaW4gU0VHR0VSX1JUVF9Db25mLmgpLg0KICoNCiAqIC0gUmVkdWNlIHRoZSBhbW91bnQgb2YgZGF0YSBwcm9kdWNlZCwgZS5nLiwgYnkgcmVtb3ZpbmcgZnJlcXVlbnQgVXNlciBFdmVudHMuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBUUkNfTUVBU1VSRV9CTE9DS0lOR19USU1FIDANCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvbmZpZ3VyYXRpb24gTWFjcm86IFRSQ19CTE9DS0lOR19NSU5fQ1lDTEVTDQogKg0KICogVGhyZXNob2xkIHZhbHVlIGZvciBkZWNpZGluZyBpZiBTRUdHRVJfUlRUX1dyaXRlIGhhcyBibG9ja2VkLiBNb3N0IGV2ZW50cw0KICogdGFrZSAyMDAtMzAwIGN5Y2xlcyBvbiBBUk0gQ29ydGV4LU0gTUNVcywgc28gYW55dGhpbmcgYWJvdmUgNTAwIGN5Y2xlcyBzaG91bGQNCiAqIGJlIGR1ZSB0byBibG9ja2luZyBvbiBhIGZ1bGwgYnVmZmVyIChpLmUuLCB3YWl0aW5nIGZvciB0aGUgZGVidWdnZXIgdG8gcmVhZA0KICogdGhlIFJUVCBidWZmZXIgZGF0YSBhbmQgbWFrZSByb29tIGZvciBtb3JlLi4uKS4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQojZGVmaW5lIFRSQ19CTE9DS0lOR19NSU5fQ1lDTEVTIDUwMA0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX1JFQ09SREVSX0JVRkZFUl9BTExPQ0FUSU9ODQogKg0KICogU3BlY2lmaWVzIGhvdyB0aGUgcmVjb3JkZXIgYnVmZmVyIGlzIGFsbG9jYXRlZC4NCiAqDQogKiBWYWx1ZXM6DQogKiBUUkNfUkVDT1JERVJfQlVGRkVSX0FMTE9DQVRJT05fU1RBVElDDQogKiBUUkNfUkVDT1JERVJfQlVGRkVSX0FMTE9DQVRJT05fRFlOQU1JQw0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNkZWZpbmUgVFJDX1JFQ09SREVSX0JVRkZFUl9BTExPQ0FUSU9OIFRSQ19SRUNPUkRFUl9CVUZGRVJfQUxMT0NBVElPTl9TVEFUSUMNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvbmZpZ3VyYXRpb24gTWFjcm86IFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0QNCiAqDQogKiBTcGVjaWZpZXMgd2hhdCB0eXBlIG9mIHRyYW5zZmVyIG1ldGhvZCBpcyB1c2VkLg0KICoNCiAqIFZhbHVlczoNCiAqIFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0RfSkxJTktfUlRUX0JMT0NLDQogKiBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0pMSU5LX1JUVF9OT0JMT0NLDQogKiBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX1RDUElQDQogKiBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0NVU1RPTQ0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNkZWZpbmUgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRCBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0pMSU5LX1JUVF9CTE9DSw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX1NUUkVBTV9DVVNUT01fQkxPQ0tJTkdfVFJBTlNGRVINCiAqDQogKiBOb3RlOiBPbmx5IGFjdGl2ZSBpZiBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0NVU1RPTSBpcyB1c2VkLg0KICoNCiAqIFNwZWNpZmllcyBob3cgdGhlIGN1c3RvbSB0cmFuc2ZlciBtZXRob2QgaGFuZGxlcyBmdWxsIGJ1ZmZlcnMuDQogKg0KICogVmFsdWVzOg0KICogMCAtIFRoZSBjdXN0b20gdHJhbnNmZXIgbWV0aG9kIHNraXBzIHNlbmRpbmcgdGhlIGRhdGEgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsLg0KICogMSAtIFRoZSBjdXN0b20gdHJhbnNmZXIgbWV0aG9kIGJsb2NrcyBvbiBzZW5kIGlmIHRoZSBidWZmZXIgaXMgZnVsbC4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogI2RlZmluZSBUUkNfU1RSRUFNX0NVU1RPTV9CTE9DS0lOR19UUkFOU0ZFUiANCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvbmZpZ3VyYXRpb24gTWFjcm86IFRSQ19TVFJFQU1fQ1VTVE9NX0FMTE9DQVRFX0ZJRUxEUw0KICoNCiAqIE5vdGU6IE9ubHkgYWN0aXZlIGlmIFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0RfQ1VTVE9NIGlzIHVzZWQuDQogKg0KICogTWFjcm8gdGhhdCBzaG91bGQgYWxsb2NhdGUgYW55IGJ1ZmZlcnMgbmVlZGVkIGZvciB0aGUgdHJhbnNmZXIgbWV0aG9kLg0KICogU2VlIHRyY1N0cmVhbVBvcnQuaCBmb3IgZXhhbXBsZXMuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBUUkNfU1RSRUFNX0NVU1RPTV9BTExPQ0FURV9GSUVMRFMoKSANCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvbmZpZ3VyYXRpb24gTWFjcm86IFRSQ19TVFJFQU1fQ1VTVE9NX0lOSVQNCiAqDQogKiBOb3RlOiBPbmx5IGFjdGl2ZSBpZiBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0NVU1RPTSBpcyB1c2VkLg0KICoNCiAqIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbmQgc2V0IHVwIHRoZSB0cmFuc2ZlciBtZXRob2QuDQogKiBTZWUgdHJjU3RyZWFtUG9ydC5oIGZvciBleGFtcGxlcy4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQojZGVmaW5lIFRSQ19TVFJFQU1fQ1VTVE9NX0lOSVQoKSANCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvbmZpZ3VyYXRpb24gTWFjcm86IFRSQ19TVFJFQU1fQ1VTVE9NX0FMTE9DQVRFX0VWRU5UDQogKg0KICogTm90ZTogT25seSBhY3RpdmUgaWYgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRF9DVVNUT00gaXMgdXNlZC4NCiAqDQogKiBTcGVjaWZpZXMgaG93IHRoZSB0cmFjZSBldmVudHMgdGhhdCBzaG91bGQgYmUgc2VudCB1c2luZyB0aGUgdHJhbnNmZXIgbWV0aG9kDQogKiBhcmUgYWxsb2NhdGVkIGZpcnN0Lg0KICogU2VlIHRyY1N0cmVhbVBvcnQuaCBmb3IgZXhhbXBsZXMuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBUUkNfU1RSRUFNX0NVU1RPTV9BTExPQ0FURV9FVkVOVChfdHlwZSwgX3B0ciwgX3NpemUpIA0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX1NUUkVBTV9DVVNUT01fQ09NTUlUX0VWRU5UDQogKg0KICogTm90ZTogT25seSBhY3RpdmUgaWYgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRF9DVVNUT00gaXMgdXNlZC4NCiAqDQogKiBTcGVjaWZpZXMgaG93IHRyYWNlIGV2ZW50cyBhcmUgc2VudC93cml0dGVuLg0KICogU2VlIHRyY1N0cmVhbVBvcnQuaCBmb3IgZXhhbXBsZXMuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBUUkNfU1RSRUFNX0NVU1RPTV9DT01NSVRfRVZFTlQoX3B0ciwgX3NpemUpIA0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX1NUUkVBTV9DVVNUT01fUkVBRF9EQVRBDQogKg0KICogTm90ZTogT25seSBhY3RpdmUgaWYgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRF9DVVNUT00gaXMgdXNlZC4NCiAqDQogKiBTcGVjaWZpZXMgaG93IGRhdGEgaXMgcmVhZCB1c2luZyB0aGUgdHJhbnNmZXIgbWV0aG9kLg0KICogU2VlIHRyY1N0cmVhbVBvcnQuaCBmb3IgZXhhbXBsZXMuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBUUkNfU1RSRUFNX0NVU1RPTV9SRUFEX0RBVEEoX3B0ckRhdGEsIF9zaXplLCBfcHRyQnl0ZXNSZWFkKSANCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvbmZpZ3VyYXRpb24gTWFjcm86IFRSQ19TVFJFQU1fQ1VTVE9NX1BFUklPRElDX1NFTkRfREFUQQ0KICoNCiAqIE5vdGU6IE9ubHkgYWN0aXZlIGlmIFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0RfQ1VTVE9NIGlzIHVzZWQuDQogKg0KICogU3BlY2lmaWVzIGhvdyBkYXRhIGlzIHNlbnQgcGVyaW9kaWNhbGx5LiBVc2VkIGJ5IGNlcnRhaW4gdHJhbnNmZXIgbWV0aG9kcy4NCiAqIFNlZSB0cmNTdHJlYW1Qb3J0LmggZm9yIGV4YW1wbGVzLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNkZWZpbmUgVFJDX1NUUkVBTV9DVVNUT01fUEVSSU9ESUNfU0VORF9EQVRBKF9wdHJCeXRlc1NlbnQpIA0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogQ29uZmlndXJhdGlvbiBNYWNybzogVFJDX1NUUkVBTV9DVVNUT01fT05fVFJBQ0VfQkVHSU4NCiAqDQogKiBOb3RlOiBPbmx5IGFjdGl2ZSBpZiBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0NVU1RPTSBpcyB1c2VkLg0KICoNCiAqIENhbGxlZCBvbiB0cmFjaW5nIGlzIHN0YXJ0ZWQuIFVzZSB0aGlzIHRvIHBlcmZvcm0gYW55IG5lY2Vzc2FyeSBzdGVwcyB0byANCiAqIHByb3Blcmx5IHN0YXJ0IHRoZSB0cmFjZSwgc3VjaCBhcyBjbGVhcmluZyBidWZmZXJzLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNkZWZpbmUgVFJDX1NUUkVBTV9DVVNUT01fT05fVFJBQ0VfQkVHSU4oKSANCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvbmZpZ3VyYXRpb24gTWFjcm86IFRSQ19TVFJFQU1fQ1VTVE9NX09OX1RSQUNFX0VORA0KICoNCiAqIE5vdGU6IE9ubHkgYWN0aXZlIGlmIFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0RfQ1VTVE9NIGlzIHVzZWQuDQogKg0KICogQ2FsbGVkIHdoZW4gdHJhY2luZyBpcyBkaXNhYmxlZC4gVXNlIHRoaXMgdG8gcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IHN0ZXBzIHRvIA0KICogcHJvcGVybHkgc2h1dCBkb3duIHRoZSB0cmFjaW5nLCBzdWNoIGFzIGNsZWFyaW5nIGJ1ZmZlcnMuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBUUkNfU1RSRUFNX0NVU1RPTV9PTl9UUkFDRV9FTkQoKSANCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQp9DQojZW5kaWYNCg0KI2VuZGlmIC8qIFRSQ19DT05GSUdfSCAqLw0K