LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqKiCw5sioy/nT0CAoQykyMDE1LCDW0NDLzajRtrnJt93T0M/euavLvqGjDQoqKiANCioqIM7EvP7D+7PGOiBtaXguYw0KKiogzsS8/rHqyrY6ICAgICANCioqIMTayN3VqtKqOiAgICANCioqIMq508O3vbeoOiAgICAgDQoqKiANCioqINDeuMTI1cbaICAgICAgICCw5rG+usUgICAgICDQ3rjEseq8xyAgICAgICAg0N64xMjLICAgICAgICAgINDeuMTE2sjdDQoqKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKiogMjAxOS8wOS8yNSAgICAgVjEuMCAgICAgICAgQ3JlYXRlICAgICAgICAgIHh4cSAgICAgICAgtLS9qA0KKiogDQoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQogDQojaW5jbHVkZSA8c3RkaW50Lmg+DQojaW5jbHVkZSA8bGludXgvdm9sdGVfZHJ2Lmg+DQojaW5jbHVkZSA8c3lzL2lvY3RsLmg+DQojaW5jbHVkZSA8ZmNudGwuaD4NCg0KI2RlZmluZSBNSVhfREVWX0lOVkFMSURfSUQgKC0xKQ0KI2RlZmluZSBEUlZfU1VDQ0VTUyAwDQojZGVmaW5lIERSVl9FUlJPUiAoLTEpDQojZGVmaW5lIEFVRElPX01JWF9ERVZfTkFNRSAiL2Rldi9hdWRpb19taXhfZGV2aWNlIg0KIA0KaW50IGF1ZGlvX21peF9kZXZmZCA9IE1JWF9ERVZfSU5WQUxJRF9JRDsNCg0KaW50IHpEcnZBdWRpb01peF9Xcml0ZSh1bnNpZ25lZCBjaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQgdWlMZW4pIA0KeyANCglpZihhdWRpb19taXhfZGV2ZmQgPT0gTUlYX0RFVl9JTlZBTElEX0lEKQ0KCXsNCiAgICAgICAgcHJpbnRmKCJhdWRpbyAvZGV2L2F1ZGlvX21peF9kZXZpY2UgekRydkF1ZGlvTWl4X1dyaXRlT25lRnJhbWUgaW52YWxpZCBkZXYhXG4iKTsNCiAgICAgICAgcmV0dXJuIERSVl9FUlJPUjsNCgl9IA0KICAgIA0KCWlmKHdyaXRlKGF1ZGlvX21peF9kZXZmZCwgcEJ1ZiwgdWlMZW4pIDw9IDApDQoJew0KICAgICAgICBwcmludGYoImF1ZGlvIC9kZXYvYXVkaW9fbWl4X2RldmljZSB6RHJ2QXVkaW9NaXhfV3JpdGVPbmVGcmFtZSB3cml0ZSBmYWlsZWQhXG4iKTsNCgkJcmV0dXJuIERSVl9FUlJPUjsNCgl9IA0KDQoJcmV0dXJuIERSVl9TVUNDRVNTOw0KfSAgDQoNCmludCB6RHJ2QXVkaW9NaXhfT3BlbihUX1pEcnZBdWRpb01peF9DZmcgKmNmZ1BhcmFtKSANCnsNCglhdWRpb19taXhfZGV2ZmQgPSBvcGVuKEFVRElPX01JWF9ERVZfTkFNRSwgT19SRFdSKTsNCiAgICBwcmludGYoIm9wZW4gZW5kISBhdWRpb19taXhfZGV2ZmQ9JWQsIGF1ZGlvVHlwZT0lZCwgc2FtcGxlX3JhdGU9JWRcbiIsIGF1ZGlvX21peF9kZXZmZCwgY2ZnUGFyYW0tPmF1ZGlvVHlwZSwgY2ZnUGFyYW0tPnNhbXBsZV9yYXRlKTsNCglpZihhdWRpb19taXhfZGV2ZmQgPCAwKQ0KCXsNCiAgICAgICAgcHJpbnRmKCJhdWRpbyAvZGV2L2F1ZGlvX21peF9kZXZpY2UgekRydkF1ZGlvTWl4X09wZW4gZmFpbGVkIVxuIik7DQoJCXJldHVybiBEUlZfRVJST1I7DQoJfSAgDQogICAgIA0KCWlmKGlvY3RsKGF1ZGlvX21peF9kZXZmZCwgQVVESU9NSVhfSU9DVExfU0VUX0NGRywgY2ZnUGFyYW0pIDwgMCkNCgl7IA0KICAgICAgICBwcmludGYoImF1ZGlvIC9kZXYvYXVkaW9fbWl4X2RldmljZSBzZXQgY2ZnIGZhaWxlZCFcbiIpOw0KCQlnb3RvIGVycjsNCgl9DQogICAgDQoJcmV0dXJuIERSVl9TVUNDRVNTOw0KZXJyOiANCgljbG9zZShhdWRpb19taXhfZGV2ZmQpOw0KCWF1ZGlvX21peF9kZXZmZCA9IE1JWF9ERVZfSU5WQUxJRF9JRDsNCiAgICBwcmludGYoImF1ZGlvIC9kZXYvYXVkaW9fbWl4X2RldmljZSB6RHJ2QXVkaW9NaXhfT3BlbiBmYWlsZWQhXG4iKTsNCglyZXR1cm4gRFJWX0VSUk9SOw0KDQp9DQoNCmludCB6RHJ2QXVkaW9NaXhfQ2xvc2Uodm9pZCkgICANCnsNCglpZihhdWRpb19taXhfZGV2ZmQgPT0gTUlYX0RFVl9JTlZBTElEX0lEKQ0KCXsNCiAgICAgICAgcHJpbnRmKCJhdWRpbyAvZGV2L2F1ZGlvX21peF9kZXZpY2UgekRydkF1ZGlvTWl4X0Nsb3NlIGludmFsaWQgZGV2IVxuIik7DQoJCXJldHVybiBEUlZfRVJST1I7DQoJfQ0KCWNsb3NlKGF1ZGlvX21peF9kZXZmZCk7IA0KCWF1ZGlvX21peF9kZXZmZCA9IE1JWF9ERVZfSU5WQUxJRF9JRDsNCiAgICANCglyZXR1cm4gRFJWX1NVQ0NFU1M7DQp9DQoNCg==