LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKioqKioqKiBGaWxlIERlc2NyaXB0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyogRmlsZSBOYW1lOgkJJFdvcmtmaWxlOiAgIGhteF91cHJhZGVfc3lzdGVtLmggICQNCiAqIFZlcnNpb246CQkJJFJldmlzaW9uOiAgIDEuMCAgJA0KICogT3JpZ2luYWwgQXV0aG9yOiBZYW5nIEh5dW4gVWsgJA0KICogQ3VycmVudCBBdXRob3I6CSRBdXRob3I6IGh1eWFuZ0BodW1heGRpZ2l0YWwuY29tICQNCiAqIERhdGU6CQkJJERhdGU6IDIwMTEuMDkuMzANCiAqIEZpbGUgRGVzY3JpcHRpb246CVVwZ3JhZGUgQVBJcw0KICogTW9kdWxlOg0KICogUmVtYXJrczoNCiAqLw0KDQoNCi8qKg0KICogQGF1dGhvciBIeXVudWsgWWFuZyhodXlhbmdAaHVtYXhkaWdpdGFsLmNvbSkNCiAqIEBkYXRlIDMwIFNlcHQgMjAxMQ0KICovDQoNCi8qKg0KICogQG5vdGUNCiAqIENvcHlyaWdodCAoQykgMjAxMSBIdW1heCBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gPGJyPg0KICogVGhpcyBzb2Z0d2FyZSBpcyB0aGUgY29uZmlkZW50aWFsIGFuZCBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbg0KICogb2YgSHVtYXggQ29ycG9yYXRpb24uIFlvdSBtYXkgbm90IHVzZSBvciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUNCiAqIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIGFueSBhcHBsaWNhYmxlIGxpY2Vuc2UNCiAqIGFncmVlbWVudCBpbiB3cml0aW5nIGJldHdlZW4gSHVtYXggQ29ycG9yYXRpb24gYW5kIHlvdS4NCiAqLw0KDQogLypAeyovDQoNCi8qKg0KICogQGZpbGUgaG14X3VwZ3JhZGVfc3lzdGVtLmgNCiAqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIEhlYWRlciBGaWxlcyoqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiBTdGFydCBJbmNsdWRpbmcgSGVhZGVyIEZpbGVzICovDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxwdGhyZWFkLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4NCiNpbmNsdWRlIDxhc3NlcnQuaD4NCiNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpbmNsdWRlIDxmY250bC5oPg0KLyogRW5kIEluY2x1ZGluZyBIZWFkZXJzKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKioqKioqIEV4dGVybiB2YXJpYWJsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyogU3RhcnQgRXh0ZXJuIHZhcmlhYmxlZSAqLw0KDQovKiBFbmQgRXh0ZXJuIHZhcmlhYmxlICovDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKioqKioqIE1hY3JvIERlZmluaXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyogU3RhcnQgTWFjcm8gZGVmaW5pdGlvbiAqLw0KI2RlZmluZSBITVhfVEFTS19DaGVja0NhbGxiYWNrKCkNCiNkZWZpbmUgSE1YX09LCTANCiNkZWZpbmUgSE1YX0VSUk9SCTENCiNkZWZpbmUgSE1YX1RJTUVPVVQJCTINCiNkZWZpbmUgSE1YX0lOVkFMSURfSUQJCTMNCiNkZWZpbmUgSE1YX0FMTE9DX0VSUk9SCQk0DQojZGVmaW5lIEhNWF9OT19NU0cJCQk1DQojZGVmaW5lIEhNWF9DUkVBVEVfRVJST1IJCTEwDQojZGVmaW5lIEhNWF9ERVNUUk9ZX0VSUk9SCTExDQojZGVmaW5lIEhNWF9MT0NLX0VSUk9SCQkxMg0KI2RlZmluZSBITVhfVU5MT0NLX0VSUk9SCQkxMw0KI2RlZmluZSBITVhfVElNRV9JTkZJTklURSAgICAxNA0KI2RlZmluZSBITVhfSU5WQUxJRF9DTE9DSwkxNQ0KI2RlZmluZSBITVhfTVNHX0ZVTEwJCQkxNw0KDQojZGVmaW5lIFRSVUUgMQ0KI2RlZmluZSBGQUxTRSAwDQoNCg0KI2RlZmluZSBITVhfVEFTS19QVEhSRUFEX1NUQUNLX01JTgkoMTYqMTAyNCkNCiNkZWZpbmUgSE1YX1RBU0tfUFRIUkVBRF9ERUZBVUxUX1BSSU8JU0NIRURfUlINCg0KI2RlZmluZSBITVhfVEFTS19TVEFDS19PVkVSSEVBRF9TSVpFIAkJCTB4MjAwMA0KI2RlZmluZSBITVhfVEFTS19HVUFSRF9TSVpFIAkJCTE2DQoNCi8qIEVuZCBNYWNybyBkZWZpbml0aW9uICovDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB0eXBlZGVmICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qIFN0YXJ0IHR5cGVkZWYgKi8NCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi8vIFRhc2sgUHJpb3JpdHkgU2V0DQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLyoNCiAgICDB1sDHu+fH1w0KICAgIFByaW9yaXR5uKYgwfWwoSC9w8WytNm46SBWS19NU0dfUFJJT1JJVFnAxyCwqrW1ILCwwMwgwfWwoSC9w8TRvt8gx9G02S4NCiAgICBWS19NU0dfUFJJT1JJVFnAxyCwqsC6IMfXu/MgcHJpb3JpdHnAxyCwqiC6uLTZIDEguLm+xr7fILHXt6G+3yBVcmdlbnQgbXNnuKYgw7O4riDH0bTZLg0KKi8NCi8qIEJhc2ljIFByaW9yaXR5IFNldCAqLw0KI2RlZmluZQlCQVNFX1BSSU9SSVRZCQkJNjANCiNkZWZpbmUJSElHSEVTVF9QUklPUklUWQkJMTA4DQoNCiNkZWZpbmUJUFJJT1JJVFlfSU5DUkVNRU5UCTENCg0KLy90ZW1wIDo6IE5ldmVyIHVzZQ0KI2RlZmluZQlVU0VSX1BSSU9SSVRZMAkJCUJBU0VfUFJJT1JJVFkJCQkJCQkJLy8gNjANCiNkZWZpbmUJVVNFUl9QUklPUklUWTEJCQkoQkFTRV9QUklPUklUWSArIFBSSU9SSVRZX0lOQ1JFTUVOVCoxKQ0KI2RlZmluZQlVU0VSX1BSSU9SSVRZMgkJCShCQVNFX1BSSU9SSVRZICsgUFJJT1JJVFlfSU5DUkVNRU5UKjIpDQojZGVmaW5lCVVTRVJfUFJJT1JJVFkzCQkJKEJBU0VfUFJJT1JJVFkgKyBQUklPUklUWV9JTkNSRU1FTlQqMykNCiNkZWZpbmUJVVNFUl9QUklPUklUWTQJCQkoQkFTRV9QUklPUklUWSArIFBSSU9SSVRZX0lOQ1JFTUVOVCo0KQ0KDQovL8DPtNwgZGVmYXVsdCBwcmlvcml0ebfOIDa5+CC757/rCTUwwLsgseLB2MC4t84gOMDMIMD7tOfH0iC17S4NCiNkZWZpbmUJVVNFUl9QUklPUklUWTUJCQkoQkFTRV9QUklPUklUWSArIFBSSU9SSVRZX0lOQ1JFTUVOVCo1KQ0KI2RlZmluZQlVU0VSX1BSSU9SSVRZNgkJCShCQVNFX1BSSU9SSVRZICsgUFJJT1JJVFlfSU5DUkVNRU5UKjYpDQojZGVmaW5lCVVTRVJfUFJJT1JJVFk3CQkJKEJBU0VfUFJJT1JJVFkgKyBQUklPUklUWV9JTkNSRU1FTlQqNykNCiNkZWZpbmUJVVNFUl9QUklPUklUWTgJCQkoQkFTRV9QUklPUklUWSArIFBSSU9SSVRZX0lOQ1JFTUVOVCo4KQ0KI2RlZmluZQlVU0VSX1BSSU9SSVRZOQkJCShCQVNFX1BSSU9SSVRZICsgUFJJT1JJVFlfSU5DUkVNRU5UKjkpDQoNCiNkZWZpbmUJVVNFUl9QUklPUklUWTEwCQkJKEJBU0VfUFJJT1JJVFkgKyBQUklPUklUWV9JTkNSRU1FTlQqMTApCS8vIDgwDQojZGVmaW5lCVVTRVJfUFJJT1JJVFkxMQkJCShCQVNFX1BSSU9SSVRZICsgUFJJT1JJVFlfSU5DUkVNRU5UKjExKQ0KI2RlZmluZQlVU0VSX1BSSU9SSVRZMTIJCQkoQkFTRV9QUklPUklUWSArIFBSSU9SSVRZX0lOQ1JFTUVOVCoxMikNCg0KLy90ZW1wIDo6IGZvciB0aGUgaGlnaGVzdCBERA0KI2RlZmluZQlVU0VSX1BSSU9SSVRZMTMJCQkoQkFTRV9QUklPUklUWSArIFBSSU9SSVRZX0lOQ1JFTUVOVCoxMykNCiNkZWZpbmUJVVNFUl9QUklPUklUWTE0CQkJKEJBU0VfUFJJT1JJVFkgKyBQUklPUklUWV9JTkNSRU1FTlQqMTQpDQoNCi8vVVNFUl9QUklPUklUWTE1tMIgu+e/68fPwfYguLsgsM0uLi4uLiAvLzIwMDcxMDExIFRlc3RCeVBvb2gNCi8vT25seSB0YXNrIHByaW9yaXR5IGFkanVzdA0KI2RlZmluZQlVU0VSX1BSSU9SSVRZMTUJCQlISUdIRVNUX1BSSU9SSVRZDQoNCg0KDQovL01TR19QUklPUklUWcDHILCqwLogVGFzayBQcmlvcml0ecDHILC5vPa6uLTZIDGwsyC4ub7Gvt8gx9G02S4NCnR5cGVkZWYgZW51bQ0Kew0KICAgIE1TR19QUklPUklUWTAsDQogICAgTVNHX1BSSU9SSVRZMSwNCiAgICBNU0dfUFJJT1JJVFkyLA0KICAgIE1TR19QUklPUklUWTMsDQogICAgTVNHX1BSSU9SSVRZNCwNCiAgICBNU0dfUFJJT1JJVFk1LA0KICAgIE1TR19QUklPUklUWTYsDQogICAgTVNHX1BSSU9SSVRZNywNCiAgICBNU0dfUFJJT1JJVFk4LA0KICAgIE1TR19QUklPUklUWTksDQogICAgTVNHX1BSSU9SSVRZMTAsDQogICAgTVNHX1BSSU9SSVRZMTEsDQogICAgTVNHX1BSSU9SSVRZMTIsDQogICAgTVNHX1BSSU9SSVRZMTMsDQogICAgTVNHX1BSSU9SSVRZMTQsDQogICAgTVNHX1BSSU9SSVRZMTUsDQogICAgTVNHX1BSSU9SSVRZMTYsDQogICAgTVNHX1BSSU9SSVRZX01BWCAgIC8vw9a788CnwMcgUFJJT1JJVFm0wiBVcmdlbnS3ziC757/rx9QuLg0KfUhNWF9NU0dfUFJJT1JJVFk7DQoNCnR5cGVkZWYgZW51bQ0Kew0KCUhNWF9TVVNQRU5EVFlQRV9GSUZPLA0KCUhNWF9TVVNQRU5EVFlQRV9QUklPUklUWSwNCglITVhfU1VTUEVORFRZUEVfTUFYDQp9SE1YX1NVU1BFTkRUWVBFOw0KDQoNCi8qIEVuZCB0eXBlZGVmICovDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKiogZ2xvYmFsIGZ1bmN0aW9uIHByb3RvdHlwZSAqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyogU3RhcnQgZ2xvYmFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8NCg0KLyogRW5kIGdsb2JhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovDQoNCg0Kc3RydWN0IEhNWF9UQVNLX2FyZyB7DQoJcHRocmVhZF9tdXRleF90CWxvY2tfOw0KCXB0aHJlYWRfY29uZF90CWNvbmRfOw0KCXVuc2lnbmVkIGxvbmcJCXByaW9yaXR5XzsNCgl1bnNpZ25lZCBsb25nCQlzdGFja1NpemVfOw0KCWludAkJCQkJSXNKb2luYWJsZTsNCglpbnQgCQkJCXN0YXJ0Ow0KCXVuc2lnbmVkIGxvbmcJCSpwdWNUYXNrU3RhY2s7DQoJdW5zaWduZWQgbG9uZwkJKnB1bFN0YWNrU3RhcnRBZGRyZXNzOw0KCXZvaWQgKCpzdGFydF9mdW5jXykodm9pZCAqKTsNCgl2b2lkICphcmdfOw0KI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHKQ0KCXBpZF90IHBpZDsNCglwaWRfdCB0aWQ7DQojZW5kaWYNCg0KI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHKQ0KCWludCB0aHJlYWRfaWQ7DQojZW5kaWYNCgljaGFyIG5hbWVbMzJdOw0KfTsNCg0Kc3RydWN0IEhNWF9UQVNLIHsNCglwdGhyZWFkX3QgdGFza187DQoJc3RydWN0IEhNWF9UQVNLX2FyZyB0YXJnXzsNCn07DQoNCnN0cnVjdCAgSE1YX01TR19lbGVtZW50DQp7DQogICAgdm9pZCAgICAgICAgICAgICAqZGF0YTsNCiAgICBzdHJ1Y3QgSE1YX01TR19lbGVtZW50ICAqbmV4dDsNCiAgICBzdHJ1Y3QgSE1YX01TR19lbGVtZW50ICAqcHJldjsNCn07DQoNCnN0cnVjdCBITVhfTVNHX3F1ZXVlDQp7DQoNCiAgICBwdGhyZWFkX211dGV4X3QgICAgIHFfbG9ja187DQogICAgcHRocmVhZF9jb25kX3QgICAgICBxX25vdF9lbXB0eV87DQogICAgcHRocmVhZF9jb25kX3QgICAgICBxX25vdF9mdWxsXzsNCiAgICB1bnNpZ25lZCBsb25nICAgICAgIGN1cnJfbXNnX2NvdW50XzsNCiAgICB1bnNpZ25lZCBsb25nICAgICAgIG1zZ19zaXplXzsNCiAgICB1bnNpZ25lZCBsb25nICAgICAgIG1zZ19jb3VudF87DQogICAgdW5zaWduZWQgbG9uZyAgICAgICBiaXRtYXBfY291bnRbTVNHX1BSSU9SSVRZX01BWF07DQogICAgdW5zaWduZWQgY2hhciAgICAgICBiaXRtYXBbTVNHX1BSSU9SSVRZX01BWF07DQogICAgdW5zaWduZWQgY2hhciAgICAgICBzdXNwZW5kX3R5cGVfOw0KCXZvaWQJCQkJKnBQb29sOw0KCXZvaWQJCQkJKnBEYXRhUG9vbDsNCg0KICAgIGludCB3cml0ZXJfY291bnRfOw0KICAgIGludCByZWFkZXJfY291bnRfOw0KDQogICAgc3RydWN0IEhNWF9NU0dfZWxlbWVudCAgICAgICAgICAgKnRlbXBfaGVhZDsNCiAgICBzdHJ1Y3QgSE1YX01TR19lbGVtZW50ICAgICAgICAgICAqdGVtcF90YWlsOw0KICAgIHN0cnVjdCAgSE1YX01TR19lbGVtZW50ICAgICAgICAgICpoZWFkW01TR19QUklPUklUWV9NQVhdOw0KICAgIHN0cnVjdCAgSE1YX01TR19lbGVtZW50ICAgICAgICAgICp0YWlsW01TR19QUklPUklUWV9NQVhdOw0KDQojaWYgZGVmaW5lZChDT05GSUdfREVCVUcpDQogICAgdW5zaWduZWQgbG9uZyBzZW5kVGljazsNCiAgICB1bnNpZ25lZCBsb25nIHJlY2VpdmVUaWNrOw0KICAgIHVuc2lnbmVkIGxvbmcgbGFzdFNlbmRUaWNrOw0KICAgIHVuc2lnbmVkIGxvbmcgbGFzdFJlY2VpdmVUaWNrOw0KICAgIGNoYXIgbmFtZVszMl07DQogICAgVEFJTFFfRU5UUlkoSE1YX01TR19xdWV1ZSkgZW50cmllczsNCiNlbmRpZg0KfTsNCg0KI2lmIGRlZmluZWQoVktfTVNHX0RFQlVHKQ0KVEFJTFFfSEVBRChsaXN0aGVhZCwgSE1YX01TR19xdWV1ZSkgbXNnX3FfbGlzdF9oZWFkOw0KI2VuZGlmDQoNCiNpZiBkZWZpbmVkKENPTkZJR19ERUJVRykNCnVuc2lnbmVkIGxvbmcJdGlja0ZvclZrRGVidWc7DQojZW5kaWYNCg0KLypAfSovDQo=