LyoqDQogKiBUaGlzIGZpbGUgaGFzIG5vIGNvcHlyaWdodCBhc3NpZ25lZCBhbmQgaXMgcGxhY2VkIGluIHRoZSBQdWJsaWMgRG9tYWluLg0KICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHc2NCBtaW5ndy1ydW50aW1lIHBhY2thZ2UuDQogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUiB3aXRoaW4gdGhpcyBwYWNrYWdlLg0KICovDQogI2lmZGVmIF9XSU42NA0KCS5maWxlCSJsb2cxMGwuUyINCgkudGV4dA0KCS5hbGlnbiA0DQpvbmU6CS5kb3VibGUgMS4wDQoJLyogSXQgaXMgbm90IGltcG9ydGFudCB0aGF0IHRoaXMgY29uc3RhbnQgaXMgcHJlY2lzZS4gIEl0IGlzIG9ubHkNCgkgICBhIHZhbHVlIHdoaWNoIGlzIGtub3duIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgZm9yIHVzaW5nIHRoZQ0KCSAgIGZ5bDJ4cDEgaW5zdHJ1Y3Rpb24uICAqLw0KbGltaXQ6CS5kb3VibGUgMC4yOQ0KDQoJLnRleHQNCgkuYWxpZ24gOA0KLmdsb2JsIF9sb2cxMGwNCgkuZGVmCV9sb2cxMGw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZg0KX2xvZzEwbDoNCglmbGRsZzIJCQkvLyBsb2cxMCgyKQ0KCWZsZHQJKCVyZHgpCQkvLyB4IDogbG9nMTAoMikNCglmeGFtDQoJZm5zdHN3DQoJZmxkCSVzdAkJLy8geCA6IHggOiBsb2cxMCgyKQ0KCXNhaGYNCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mDQo0Oglmc3VibAlvbmUJCS8vIHgtMSA6IHggOiBsb2cxMCgyKQ0KCWZsZAklc3QJCS8vIHgtMSA6IHgtMSA6IHggOiBsb2cxMCgyKQ0KCWZhYnMJCQkvLyB8eC0xfCA6IHgtMSA6IHggOiBsb2cxMCgyKQ0KCWZjb21wbAlsaW1pdAkJLy8geC0xIDogeCA6IGxvZzEwKDIpDQoJZm5zdHN3CQkJLy8geC0xIDogeCA6IGxvZzEwKDIpDQoJYW5kYgkkMHg0NSwgJWFoDQoJanoJMmYNCglmc3RwCSVzdCgxKQkJLy8geC0xIDogbG9nMTAoMikNCglmeWwyeHAxCQkJLy8gbG9nMTAoeCkNCgltb3ZxCSVyY3gsJXJheA0KCWZzdHB0CSglcmN4KQ0KCXJldA0KDQoyOglmc3RwCSVzdCgwKQkJLy8geCA6IGxvZzEwKDIpDQoJZnlsMngJCQkvLyBsb2cxMCh4KQ0KCW1vdnEJJXJjeCwlcmF4DQoJZnN0cHQJKCVyY3gpDQoJcmV0DQoNCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZg0KCWZzdHAJJXN0KDEpDQoJZnN0cAklc3QoMSkNCgltb3ZxCSVyY3gsJXJheA0KCWZzdHB0CSglcmN4KQ0KCXJldA0KI2Vsc2UNCgkuZmlsZQkibG9nMTBsLlMiDQoJLnRleHQNCgkuYWxpZ24gNA0Kb25lOgkuZG91YmxlIDEuMA0KCS8qIEl0IGlzIG5vdCBpbXBvcnRhbnQgdGhhdCB0aGlzIGNvbnN0YW50IGlzIHByZWNpc2UuICBJdCBpcyBvbmx5DQoJICAgYSB2YWx1ZSB3aGljaCBpcyBrbm93biB0byBiZSBvbiB0aGUgc2FmZSBzaWRlIGZvciB1c2luZyB0aGUNCgkgICBmeWwyeHAxIGluc3RydWN0aW9uLiAgKi8NCmxpbWl0OgkuZG91YmxlIDAuMjkNCg0KCS50ZXh0DQoJLmFsaWduIDQNCi5nbG9ibCBfbG9nMTBsDQoJLmRlZglfbG9nMTBsOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYNCl9sb2cxMGw6DQoJZmxkbGcyCQkJLy8gbG9nMTAoMikNCglmbGR0CTQoJWVzcCkJCS8vIHggOiBsb2cxMCgyKQ0KCWZ4YW0NCglmbnN0c3cNCglmbGQJJXN0CQkvLyB4IDogeCA6IGxvZzEwKDIpDQoJc2FoZg0KCWpjCTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYNCjQ6CWZzdWJsCW9uZQkJLy8geC0xIDogeCA6IGxvZzEwKDIpDQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IGxvZzEwKDIpDQoJZmFicwkJCS8vIHx4LTF8IDogeC0xIDogeCA6IGxvZzEwKDIpDQoJZmNvbXBsCWxpbWl0CQkvLyB4LTEgOiB4IDogbG9nMTAoMikNCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogbG9nMTAoMikNCglhbmRiCSQweDQ1LCAlYWgNCglqegkyZg0KCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiBsb2cxMCgyKQ0KCWZ5bDJ4cDEJCQkvLyBsb2cxMCh4KQ0KCXJldA0KDQoyOglmc3RwCSVzdCgwKQkJLy8geCA6IGxvZzEwKDIpDQoJZnlsMngJCQkvLyBsb2cxMCh4KQ0KCXJldA0KDQozOglqcAk0YgkJLy8gaW4gY2FzZSB4IGlzILFJbmYNCglmc3RwCSVzdCgxKQ0KCWZzdHAJJXN0KDEpDQoJcmV0DQojZW5kaWYNCg==