LyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiCpIDIwMTMgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4KKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aAoqIE1pY3JvY2hpcCBwcm9kdWN0cy4KKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLgoqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsCiogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLAoqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQCiogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLgoqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwKKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQKKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTCiogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuCiogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMCiogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GCiogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLgoqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UKKiBPRiBUSEVTRSBURVJNUy4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIGNvbW1vbi5oCiAqICAgICAgVGhpcyBpcyB0aGUgaGVhZGVyIGZpbGUgaW5jbHVkaW5nIGNvbW1vbiBoZWFkZXJzIGZyb20gdmFyaW91cyBtb2R1bGVzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAkUmV2aXNpb246ICMxICQgICREYXRlVGltZTogMjAxNi8wNC8wOCAxMDoxODoyOCAkICAkICAgICQKICogIERlc2NyaXB0aW9uOiBhZGRlZCBpY3QgbW9kdWxlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAjeHgKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogJEZpbGU6IC8vZGVwb3RfcGNzL0ZXRW5nL1JlbGVhc2UvcHJvamVjdHMvQ0VDMTMwMl9QTElCX0NMSUIvcmVsZWFzZTUvU291cmNlL2h3X2Jsa3MvY29tbW9uL2luY2x1ZGUvY29tbW9uX2xpYi5oICQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiogQGRlZmdyb3VwIGNvbW1vbiBjb21tb24KICogIEB7CiAqLwoKLyoqIEBmaWxlIGNvbW1vbi5oCiogXGJyaWVmIGhlYWRlciBmaWxlIGluY2x1ZGluZyBjb21tb24gaGVhZGVycyBmcm9tIHZhcmlvdXMgbW9kdWxlcwoqIFxhdXRob3IgQXBwIEZpcm13YXJlIFRlYW0KKiAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2lmbmRlZiBfQ09NTU9OX0xJQl9IXwojZGVmaW5lIF9DT01NT05fTElCX0hfCgovLyBJbmNsdWRlIGNvbW1vbiBoZWFkZXJzIGZyb20gdmFyaW91cyBtb2R1bGVzCi8vICEhISBUaGUgaW5jbHVkZSBvcmRlciBpcyBpbXBvcnRhbnQgISEhCiNpbmNsdWRlICJwbGF0Zm9ybS5oIgojaW5jbHVkZSAiQVJNX1JFRy5oIgojaW5jbHVkZSAiTUNIUF9DRUMxMzAyLmgiCi8qIENvcnRleC1NNCBwcm9jZXNzb3IgYW5kIGNvcmUgcGVyaXBoZXJhbHMgKi8KI2luY2x1ZGUgImNvcmVfY200LmgiIAojaW5jbHVkZSAiZGVmcy5oIgojaW5jbHVkZSAic3RyaW5nLmgiCi8vI2luY2x1ZGUgImJ1aWxkLmgiCi8vI2luY2x1ZGUgIi4uXHN5c3RlbVxzeXN0ZW0uaCIKLy8jaW5jbHVkZSAiLi5cZGVidWdcdHJhY2UuaCIKI2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2VuZGlmIC8qX0NPTU1PTl9MSUJfSF8qLwoKLyoqICAgQH0KICovCgoK