From mboxrd@z Thu Jan 1 00:00:00 1970 From: Saeed Mahameed Subject: [for-next V2 06/10] linux/dim: Move implementation to .c files Date: Tue, 25 Jun 2019 20:57:43 +0000 Message-ID: <20190625205701.17849-7-saeedm@mellanox.com> References: <20190625205701.17849-1-saeedm@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190625205701.17849-1-saeedm@mellanox.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org To: "David S. Miller" , Doug Ledford , Jason Gunthorpe Cc: Leon Romanovsky , Or Gerlitz , Sagi Grimberg , Tal Gilboa , "netdev@vger.kernel.org" , "linux-rdma@vger.kernel.org" , Saeed Mahameed List-Id: linux-rdma@vger.kernel.org RnJvbTogVGFsIEdpbGJvYSA8dGFsZ2lAbWVsbGFub3guY29tPg0KDQpNb3ZlZCBhbGwgbG9naWMg ZnJvbSBkaW0uaCBhbmQgbmV0X2RpbS5oIHRvIGRpbS5jIGFuZCBuZXRfZGltLmMuDQpUaGlzIGlz IGJvdGggbW9yZSBzdHJ1Y3R1cmFsbHkgYXBwZWFsaW5nIGFuZCB3b3VsZCBhbGxvdyB0byBvbmx5 DQpleHBvc2UgZXh0ZXJuYWxseSB1c2VkIGZ1bmN0aW9ucy4NCg0KU2lnbmVkLW9mZi1ieTogVGFs IEdpbGJvYSA8dGFsZ2lAbWVsbGFub3guY29tPg0KU2lnbmVkLW9mZi1ieTogU2FlZWQgTWFoYW1l ZWQgPHNhZWVkbUBtZWxsYW5veC5jb20+DQotLS0NCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0NCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9h ZGNvbS9LY29uZmlnICAgICAgICAgfCAgIDEgKw0KIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2Fk Y29tL2JjbXN5c3BvcnQuaCAgICB8ICAgMiArLQ0KIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2Fk Y29tL2JueHQvYm54dC5oICAgICB8ICAgMiArLQ0KIC4uLi9uZXQvZXRoZXJuZXQvYnJvYWRjb20v Ym54dC9ibnh0X2RlYnVnZnMuYyB8ICAgMiArLQ0KIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2Fk Y29tL2JueHQvYm54dF9kaW0uYyB8ICAgMiArLQ0KIC4uLi9uZXQvZXRoZXJuZXQvYnJvYWRjb20v Z2VuZXQvYmNtZ2VuZXQuaCAgICB8ICAgMiArLQ0KIC4uLi9uZXQvZXRoZXJuZXQvbWVsbGFub3gv bWx4NS9jb3JlL0tjb25maWcgICB8ICAgMSArDQogZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFu b3gvbWx4NS9jb3JlL2VuLmggIHwgICAyICstDQogLi4uL25ldC9ldGhlcm5ldC9tZWxsYW5veC9t bHg1L2NvcmUvZW5fZGltLmMgIHwgICAyICstDQogaW5jbHVkZS9saW51eC9kaW0uaCAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgMzE5ICsrKysrKysrKysrKysrLS0tLQ0KIGluY2x1ZGUvbGlu dXgvbmV0X2RpbS5oICAgICAgICAgICAgICAgICAgICAgICB8IDI3MyAtLS0tLS0tLS0tLS0tLS0N CiBsaWIvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKw0K IGxpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArDQog bGliL2RpbS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsNCiBs aWIvZGltL2RpbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzQgKysrKw0K IGxpYi9kaW0vbmV0X2RpbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE5MCArKysr KysrKysrKw0KIDE3IGZpbGVzIGNoYW5nZWQsIDU0NyBpbnNlcnRpb25zKCspLCAzNDUgZGVsZXRp b25zKC0pDQogZGVsZXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbmV0X2RpbS5oDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYi9kaW0vTWFrZWZpbGUNCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2RpbS9kaW0uYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZGltL25ldF9kaW0uYw0KDQpkaWZm IC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0KaW5kZXggNWQ0Yjg1MmQ5ZDM5Li5m NzhkZDE2MTk1ZTMgMTAwNjQ0DQotLS0gYS9NQUlOVEFJTkVSUw0KKysrIGIvTUFJTlRBSU5FUlMN CkBAIC01NTg4LDggKzU1ODgsOCBAQCBGOglpbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaA0K IERZTkFNSUMgSU5URVJSVVBUIE1PREVSQVRJT04NCiBNOglUYWwgR2lsYm9hIDx0YWxnaUBtZWxs YW5veC5jb20+DQogUzoJTWFpbnRhaW5lZA0KLUY6CWluY2x1ZGUvbGludXgvbmV0X2RpbS5oDQog RjoJaW5jbHVkZS9saW51eC9kaW0uaA0KK0Y6CWxpYi9kaW0vDQogDQogRFogREVDU1RBVElPTiBE WjExIFNFUklBTCBEUklWRVINCiBNOgkiTWFjaWVqIFcuIFJvenlja2kiIDxtYWNyb0BsaW51eC1t aXBzLm9yZz4NCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29u ZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZw0KaW5kZXggYjEyMzUw OWQzODVmLi4yZTRhOGM3MjM3ZWYgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9i cm9hZGNvbS9LY29uZmlnDQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29u ZmlnDQpAQCAtOCw2ICs4LDcgQEAgY29uZmlnIE5FVF9WRU5ET1JfQlJPQURDT00NCiAJZGVmYXVs dCB5DQogCWRlcGVuZHMgb24gKFNTQl9QT1NTSUJMRSAmJiBIQVNfRE1BKSB8fCBQQ0kgfHwgQkNN NjNYWCB8fCBcDQogCQkgICBTSUJZVEVfU0IxeHh4X1NPQw0KKwlzZWxlY3QgRElNTElCDQogCS0t LWhlbHAtLS0NCiAJICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjaGlwc2V0IGJl bG9uZ2luZyB0byB0aGlzIGNsYXNzLA0KIAkgIHNheSBZLg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2Jyb2FkY29tL2JjbXN5c3BvcnQuaA0KaW5kZXggY2JlNmQ1NTlkOTY0Li5mNjY3N2EwMmQ4MTEg MTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmgN CisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuaA0KQEAgLTE0 LDcgKzE0LDcgQEANCiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+DQogI2luY2x1ZGUgPGxpbnV4 L2V0aHRvb2wuaD4NCiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPg0KLSNpbmNsdWRlIDxsaW51 eC9uZXRfZGltLmg+DQorI2luY2x1ZGUgPGxpbnV4L2RpbS5oPg0KIA0KIC8qIFJlY2VpdmUvdHJh bnNtaXQgZGVzY3JpcHRvciBmb3JtYXQgKi8NCiAjZGVmaW5lIERFU0NfQUREUl9ISV9TVEFUVVNf TEVOCTB4MDANCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0 L2JueHQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oDQppbmRl eCBhNTUyYzU1MzljYzkuLjU0YzAxNzA1ZjNiZCAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0L2V0 aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oDQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9i cm9hZGNvbS9ibnh0L2JueHQuaA0KQEAgLTIzLDcgKzIzLDcgQEANCiAjaW5jbHVkZSA8bmV0L2Rl dmxpbmsuaD4NCiAjaW5jbHVkZSA8bmV0L2RzdF9tZXRhZGF0YS5oPg0KICNpbmNsdWRlIDxuZXQv eGRwLmg+DQotI2luY2x1ZGUgPGxpbnV4L25ldF9kaW0uaD4NCisjaW5jbHVkZSA8bGludXgvZGlt Lmg+DQogDQogc3RydWN0IHR4X2JkIHsNCiAJX19sZTMyIHR4X2JkX2xlbl9mbGFnc190eXBlOw0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9kZWJ1 Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZGVidWdmcy5j DQppbmRleCAzZDFkNTNmYmIxMzUuLjYxMzkzZjM1MWE3NyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9kZWJ1Z2ZzLmMNCisrKyBiL2RyaXZlcnMv bmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9kZWJ1Z2ZzLmMNCkBAIC0xMSw3ICsxMSw3 IEBADQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4N CiAjaW5jbHVkZSAiYm54dF9oc2kuaCINCi0jaW5jbHVkZSA8bGludXgvbmV0X2RpbS5oPg0KKyNp bmNsdWRlIDxsaW51eC9kaW0uaD4NCiAjaW5jbHVkZSAiYm54dC5oIg0KICNpbmNsdWRlICJibnh0 X2RlYnVnZnMuaCINCiANCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNv bS9ibnh0L2JueHRfZGltLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2Ju eHRfZGltLmMNCmluZGV4IDExNjA1ZjlmYTYxZS4uNmY2NTc2ZGM0MTdhIDEwMDY0NA0KLS0tIGEv ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2RpbS5jDQorKysgYi9kcml2 ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZGltLmMNCkBAIC03LDcgKzcsNyBA QA0KICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQogICovDQogDQotI2luY2x1ZGUg PGxpbnV4L25ldF9kaW0uaD4NCisjaW5jbHVkZSA8bGludXgvZGltLmg+DQogI2luY2x1ZGUgImJu eHRfaHNpLmgiDQogI2luY2x1ZGUgImJueHQuaCINCiANCmRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5oIGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuaA0KaW5kZXggNmU0MThkOWMzNzA2Li5iMmYwNWU0 N2RjNjUgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9i Y21nZW5ldC5oDQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21n ZW5ldC5oDQpAQCAtMTYsNyArMTYsNyBAQA0KICNpbmNsdWRlIDxsaW51eC9taWkuaD4NCiAjaW5j bHVkZSA8bGludXgvaWZfdmxhbi5oPg0KICNpbmNsdWRlIDxsaW51eC9waHkuaD4NCi0jaW5jbHVk ZSA8bGludXgvbmV0X2RpbS5oPg0KKyNpbmNsdWRlIDxsaW51eC9kaW0uaD4NCiANCiAvKiB0b3Rh bCBudW1iZXIgb2YgQnVmZmVyIERlc2NyaXB0b3JzLCBzYW1lIGZvciBSeC9UeCAqLw0KICNkZWZp bmUgVE9UQUxfREVTQwkJCQkyNTYNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9t ZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94 L21seDUvY29yZS9LY29uZmlnDQppbmRleCAyMzkxZTNjZmI1NmIuLjc4NDVhYTViZjZiZSAxMDA2 NDQNCi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmln DQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZw0K QEAgLTM0LDYgKzM0LDcgQEAgY29uZmlnIE1MWDVfQ09SRV9FTg0KIAlkZXBlbmRzIG9uIE5FVERF VklDRVMgJiYgRVRIRVJORVQgJiYgSU5FVCAmJiBQQ0kgJiYgTUxYNV9DT1JFDQogCWRlcGVuZHMg b24gSVBWNj15IHx8IElQVjY9biB8fCBNTFg1X0NPUkU9bQ0KIAlzZWxlY3QgUEFHRV9QT09MDQor CXNlbGVjdCBESU1MSUINCiAJZGVmYXVsdCBuDQogCS0tLWhlbHAtLS0NCiAJICBFdGhlcm5ldCBz dXBwb3J0IGluIE1lbGxhbm94IFRlY2hub2xvZ2llcyBDb25uZWN0WC00IE5JQy4NCmRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaCBiL2RyaXZl cnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oDQppbmRleCAxMWVmZDZlNGJk YzMuLmFiZjQyZDNhYWJlOSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxh bm94L21seDUvY29yZS9lbi5oDQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9t bHg1L2NvcmUvZW4uaA0KQEAgLTQ4LDcgKzQ4LDcgQEANCiAjaW5jbHVkZSA8bGludXgvcmhhc2h0 YWJsZS5oPg0KICNpbmNsdWRlIDxuZXQvc3dpdGNoZGV2Lmg+DQogI2luY2x1ZGUgPG5ldC94ZHAu aD4NCi0jaW5jbHVkZSA8bGludXgvbmV0X2RpbS5oPg0KKyNpbmNsdWRlIDxsaW51eC9kaW0uaD4N CiAjaW5jbHVkZSA8bGludXgvYml0cy5oPg0KICNpbmNsdWRlICJ3cS5oIg0KICNpbmNsdWRlICJt bHg1X2NvcmUuaCINCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9t bHg1L2NvcmUvZW5fZGltLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2Nv cmUvZW5fZGltLmMNCmluZGV4IGJhM2MxYmU5ZjJkMy4uY2E5Y2ZiZjU3ZDhmIDEwMDY0NA0KLS0t IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2RpbS5jDQorKysg Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZGltLmMNCkBAIC0z MCw3ICszMCw3IEBADQogICogU09GVFdBUkUuDQogICovDQogDQotI2luY2x1ZGUgPGxpbnV4L25l dF9kaW0uaD4NCisjaW5jbHVkZSA8bGludXgvZGltLmg+DQogI2luY2x1ZGUgImVuLmgiDQogDQog c3RhdGljIHZvaWQNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RpbS5oIGIvaW5jbHVkZS9s aW51eC9kaW0uaA0KaW5kZXggNjBlNTA3NGE3Y2MwLi5mNDhlZGUzZTAzMjIgMTAwNjQ0DQotLS0g YS9pbmNsdWRlL2xpbnV4L2RpbS5oDQorKysgYi9pbmNsdWRlL2xpbnV4L2RpbS5oDQpAQCAtNiwy MCArNiw0OSBAQA0KIA0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCiANCisvKioNCisgKiBO dW1iZXIgb2YgZXZlbnRzIGJldHdlZW4gRElNIGl0ZXJhdGlvbnMuDQorICogQ2F1c2VzIGEgbW9k ZXJhdGlvbiBvZiB0aGUgYWxnb3JpdGhtIHJ1bi4NCisgKi8NCiAjZGVmaW5lIERJTV9ORVZFTlRT IDY0DQogDQotLyogbW9yZSB0aGFuIDEwJSBkaWZmZXJlbmNlICovDQorLyoqDQorICogSXMgYSBk aWZmZXJlbmNlIGJldHdlZW4gdmFsdWVzIGp1c3RpZmllcyB0YWtpbmcgYW4gYWN0aW9uLg0KKyAq IFdlIGNvbnNpZGVyIDEwJSBkaWZmZXJlbmNlIGFzIHNpZ25pZmljYW50Lg0KKyAqLw0KICNkZWZp bmUgSVNfU0lHTklGSUNBTlRfRElGRih2YWwsIHJlZikgXA0KIAkoKCgxMDBVTCAqIGFicygodmFs KSAtIChyZWYpKSkgLyAocmVmKSkgPiAxMCkNCisNCisvKioNCisgKiBDYWxjdWxhdGUgdGhlIGdh cCBiZXR3ZWVuIHR3byB2YWx1ZXMuDQorICogVGFrZSB3cmFwLWFyb3VuZCBhbmQgdmFyaWFibGUg c2l6ZSBpbnRvIGNvbnNpZGVyYXRpb24uDQorICovDQogI2RlZmluZSBCSVRfR0FQKGJpdHMsIGVu ZCwgc3RhcnQpICgoKChlbmQpIC0gKHN0YXJ0KSkgKyBCSVRfVUxMKGJpdHMpKSBcDQotJiAoQklU X1VMTChiaXRzKSAtIDEpKQ0KKwkJJiAoQklUX1VMTChiaXRzKSAtIDEpKQ0KIA0KKy8qKg0KKyAq IFN0cnVjdHVyZSBmb3IgQ1EgbW9kZXJhdGlvbiB2YWx1ZXMuDQorICogVXNlZCBmb3IgY29tbXVu aWNhdGlvbnMgYmV0d2VlbiBESU0gYW5kIGl0cyBjb25zdW1lci4NCisgKg0KKyAqIEB1c2VjOiBD USB0aW1lciBzdWdnZXN0aW9uIChieSBESU0pDQorICogQHBrdHM6IENRIHBhY2tldCBjb3VudGVy IHN1Z2dlc3Rpb24gKGJ5IERJTSkNCisgKiBAY3FfcGVyaW9kX21vZGU6IENRIHByaW9kIGNvdW50 IG1vZGUgKGZyb20gQ1FFL0VRRSkNCisgKi8NCiBzdHJ1Y3QgZGltX2NxX21vZGVyIHsNCiAJdTE2 IHVzZWM7DQogCXUxNiBwa3RzOw0KIAl1OCBjcV9wZXJpb2RfbW9kZTsNCiB9Ow0KIA0KKy8qKg0K KyAqIFN0cnVjdHVyZSBmb3IgRElNIHNhbXBsZSBkYXRhLg0KKyAqIFVzZWQgZm9yIGNvbW11bmlj YXRpb25zIGJldHdlZW4gRElNIGFuZCBpdHMgY29uc3VtZXIuDQorICoNCisgKiBAdGltZTogU2Ft cGxlIHRpbWVzdGFtcA0KKyAqIEBwa3RfY3RyOiBOdW1iZXIgb2YgcGFja2V0cw0KKyAqIEBieXRl X2N0cjogTnVtYmVyIG9mIGJ5dGVzDQorICogQGV2ZW50X2N0cjogTnVtYmVyIG9mIGV2ZW50cw0K KyAqLw0KIHN0cnVjdCBkaW1fc2FtcGxlIHsNCiAJa3RpbWVfdCB0aW1lOw0KIAl1MzIgcGt0X2N0 cjsNCkBAIC0yNywxMyArNTYsMzYgQEAgc3RydWN0IGRpbV9zYW1wbGUgew0KIAl1MTYgZXZlbnRf Y3RyOw0KIH07DQogDQorLyoqDQorICogU3RydWN0dXJlIGZvciBESU0gc3RhdHMuDQorICogVXNl ZCBmb3IgaG9sZGluZyBjdXJyZW50IG1lYXN1cmVkIHJhdGVzLg0KKyAqDQorICogQHBwbXM6IFBh Y2tldHMgcGVyIG1zZWMNCisgKiBAYnBtczogQnl0ZXMgcGVyIG1zZWMNCisgKiBAZXBtczogRXZl bnRzIHBlciBtc2VjDQorICovDQogc3RydWN0IGRpbV9zdGF0cyB7DQotCWludCBwcG1zOyAvKiBw YWNrZXRzIHBlciBtc2VjICovDQotCWludCBicG1zOyAvKiBieXRlcyBwZXIgbXNlYyAqLw0KLQlp bnQgZXBtczsgLyogZXZlbnRzIHBlciBtc2VjICovDQorCWludCBwcG1zOw0KKwlpbnQgYnBtczsN CisJaW50IGVwbXM7DQogfTsNCiANCi1zdHJ1Y3QgZGltIHsgLyogRHluYW1pYyBJbnRlcnJ1cHQg TW9kZXJhdGlvbiAqLw0KKy8qKg0KKyAqIE1haW4gc3RydWN0dXJlIGZvciBkeW5hbWljIGludGVy cnVwdCBtb2RlcmF0aW9uIChESU0pLg0KKyAqIFVzZWQgZm9yIGhvbGRpbmcgYWxsIGluZm9ybWF0 aW9uIGFib3V0IGEgc3BlY2lmaWMgRElNIGluc3RhbmNlLg0KKyAqDQorICogQHN0YXRlOiBBbGdv cml0aG0gc3RhdGUgKHNlZSBiZWxvdykNCisgKiBAcHJldl9zdGF0czogTWVhc3VyZWQgcmF0ZXMg ZnJvbSBwcmV2aW91cyBpdGVyYXRpb24gKGZvciBjb21wYXJpc29uKQ0KKyAqIEBzdGFydF9zYW1w bGU6IFNhbXBsZWQgZGF0YSBhdCBzdGFydCBvZiBjdXJyZW50IGl0ZXJhdGlvbg0KKyAqIEB3b3Jr OiBXb3JrIHRvIHBlcmZvcm0gb24gYWN0aW9uIHJlcXVpcmVkDQorICogQHByb2ZpbGVfaXg6IEN1 cnJlbnQgbW9kZXJhdGlvbiBwcm9maWxlDQorICogQG1vZGU6IENRIHBlcmlvZCBjb3VudCBtb2Rl DQorICogQHR1bmVfc3RhdGU6IEFsZ29yaXRobSB0dW5pbmcgc3RhdGUgKHNlZSBiZWxvdykNCisg KiBAc3RlcHNfcmlnaHQ6IE51bWJlciBvZiBzdGVwcyB0YWtlbiB0b3dhcmRzIGhpZ2hlciBtb2Rl cmF0aW9uDQorICogQHN0ZXBzX2xlZnQ6IE51bWJlciBvZiBzdGVwcyB0YWtlbiB0b3dhcmRzIGxv d2VyIG1vZGVyYXRpb24NCisgKiBAdGlyZWQ6IFBhcmtpbmcgZGVwdGggY291bnRlcg0KKyAqLw0K K3N0cnVjdCBkaW0gew0KIAl1OCBzdGF0ZTsNCiAJc3RydWN0IGRpbV9zdGF0cyBwcmV2X3N0YXRz Ow0KIAlzdHJ1Y3QgZGltX3NhbXBsZSBzdGFydF9zYW1wbGU7DQpAQCAtNDYsMTggKzk4LDQ5IEBA IHN0cnVjdCBkaW0geyAvKiBEeW5hbWljIEludGVycnVwdCBNb2RlcmF0aW9uICovDQogCXU4IHRp cmVkOw0KIH07DQogDQorLyoqDQorICogZW51bSBkaW1fY3FfcGVyaW9kX21vZGUNCisgKg0KKyAq IFRoZXNlIGFyZSB0aGUgbW9kZXMgZm9yIENRIHBlcmlvZCBjb3VudC4NCisgKg0KKyAqIEBESU1f Q1FfUEVSSU9EX01PREVfU1RBUlRfRlJPTV9FUUU6IFN0YXJ0IGNvdW50aW5nIGZyb20gRVFFDQor ICogQERJTV9DUV9QRVJJT0RfTU9ERV9TVEFSVF9GUk9NX0NRRTogU3RhcnQgY291bnRpbmcgZnJv bSBDUUUgKGltcGxpZXMgdGltZXIgcmVzZXQpDQorICogQERJTV9DUV9QRVJJT0RfTlVNX01PREVT OiBOdW1iZXIgb2YgbW9kZXMNCisgKi8NCiBlbnVtIHsNCiAJRElNX0NRX1BFUklPRF9NT0RFX1NU QVJUX0ZST01fRVFFID0gMHgwLA0KIAlESU1fQ1FfUEVSSU9EX01PREVfU1RBUlRfRlJPTV9DUUUg PSAweDEsDQogCURJTV9DUV9QRVJJT0RfTlVNX01PREVTDQogfTsNCiANCisvKioNCisgKiBlbnVt IGRpbV9zdGF0ZQ0KKyAqDQorICogVGhlc2UgYXJlIHRoZSBESU0gYWxnb3JpdGhtIHN0YXRlcy4N CisgKiBUaGVzZSB3aWxsIGRldGVybWluZSBpZiB0aGUgYWxnb3JpdGhtIGlzIGluIGEgdmFsaWQg c3RhdGUgdG8gc3RhcnQgYW4gaXRlcmF0aW9uLg0KKyAqDQorICogQERJTV9TVEFSVF9NRUFTVVJF OiBUaGlzIGlzIHRoZSBmaXJzdCBpdGVyYXRpb24gKGFsc28gYWZ0ZXIgYXBwbHlpbmcgYSBuZXcg cHJvZmlsZSkNCisgKiBARElNX01FQVNVUkVfSU5fUFJPR1JFU1M6IEFsZ29yaXRobSBpcyBhbHJl YWR5IGluIHByb2dyZXNzIC0gY2hlY2sgaWYNCisgKiBuZWVkIHRvIHBlcmZvcm0gYW4gYWN0aW9u DQorICogQERJTV9BUFBMWV9ORVdfUFJPRklMRTogRElNIGNvbnN1bWVyIGlzIGN1cnJlbnRseSBh cHBseWluZyBhIHByb2ZpbGUgLSBubyBuZWVkIHRvIG1lYXN1cmUNCisgKi8NCiBlbnVtIHsNCiAJ RElNX1NUQVJUX01FQVNVUkUsDQogCURJTV9NRUFTVVJFX0lOX1BST0dSRVNTLA0KIAlESU1fQVBQ TFlfTkVXX1BST0ZJTEUsDQogfTsNCiANCisvKioNCisgKiBlbnVtIGRpbV90dW5lX3N0YXRlDQor ICoNCisgKiBUaGVzZSBhcmUgdGhlIERJTSBhbGdvcml0aG0gdHVuZSBzdGF0ZXMuDQorICogVGhl c2Ugd2lsbCBkZXRlcm1pbmUgd2hpY2ggYWN0aW9uIHRoZSBhbGdvcml0aG0gc2hvdWxkIHBlcmZv cm0uDQorICoNCisgKiBARElNX1BBUktJTkdfT05fVE9QOiBBbGdvcml0aG0gZm91bmQgYSBsb2Nh bCB0b3AgcG9pbnQgLSBleGl0IG9uIHNpZ25pZmljYW50IGRpZmZlcmVuY2UNCisgKiBARElNX1BB UktJTkdfVElSRUQ6IEFsZ29yaXRobSBmb3VuZCBhIGRlZXAgdG9wIHBvaW50IC0gZG9uJ3QgZXhp dCBpZiB0aXJlZCA+IDANCisgKiBARElNX0dPSU5HX1JJR0hUOiBBbGdvcml0aG0gaXMgY3VycmVu dGx5IHRyeWluZyBoaWdoZXIgbW9kZXJhdGlvbiBsZXZlbHMNCisgKiBARElNX0dPSU5HX0xFRlQ6 IEFsZ29yaXRobSBpcyBjdXJyZW50bHkgdHJ5aW5nIGxvd2VyIG1vZGVyYXRpb24gbGV2ZWxzDQor ICovDQogZW51bSB7DQogCURJTV9QQVJLSU5HX09OX1RPUCwNCiAJRElNX1BBUktJTkdfVElSRUQs DQpAQCAtNjUsNjMgKzE0OCw5NSBAQCBlbnVtIHsNCiAJRElNX0dPSU5HX0xFRlQsDQogfTsNCiAN CisvKioNCisgKiBlbnVtIGRpbV9zdGF0c19zdGF0ZQ0KKyAqDQorICogVGhlc2UgYXJlIHRoZSBE SU0gYWxnb3JpdGhtIHN0YXRpc3RpY3Mgc3RhdGVzLg0KKyAqIFRoZXNlIHdpbGwgZGV0ZXJtaW5l IHRoZSB2ZXJkaWN0IG9mIGN1cnJlbnQgaXRlcmF0aW9uLg0KKyAqDQorICogQERJTV9TVEFUU19X T1JTRTogQ3VycmVudCBpdGVyYXRpb24gc2hvd3Mgd29yc2UgcGVyZm9ybWFuY2UgdGhhbiBiZWZv cmUNCisgKiBARElNX1NUQVRTX1dPUlNFOiBDdXJyZW50IGl0ZXJhdGlvbiBzaG93cyBzYW1lIHBl cmZvcm1hbmNlIHRoYW4gYmVmb3JlDQorICogQERJTV9TVEFUU19XT1JTRTogQ3VycmVudCBpdGVy YXRpb24gc2hvd3MgYmV0dGVyIHBlcmZvcm1hbmNlIHRoYW4gYmVmb3JlDQorICovDQogZW51bSB7 DQogCURJTV9TVEFUU19XT1JTRSwNCiAJRElNX1NUQVRTX1NBTUUsDQogCURJTV9TVEFUU19CRVRU RVIsDQogfTsNCiANCisvKioNCisgKiBlbnVtIGRpbV9zdGVwX3Jlc3VsdA0KKyAqDQorICogVGhl c2UgYXJlIHRoZSBESU0gYWxnb3JpdGhtIHN0ZXAgcmVzdWx0cy4NCisgKiBUaGVzZSBkZXNjcmli ZSB0aGUgcmVzdWx0IG9mIGEgc3RlcC4NCisgKg0KKyAqIEBESU1fU1RFUFBFRDogUGVyZm9ybWVk IGEgcmVndWxhciBzdGVwDQorICogQERJTV9UT09fVElSRUQ6IFNhbWUga2luZCBvZiBzdGVwIHdh cyBkb25lIG11bHRpcGxlIHRpbWVzIC0gc2hvdWxkIGdvIHRvDQorICogdGlyZWQgcGFya2luZw0K KyAqIEBESU1fT05fRURHRTogU3RlcHBlZCB0byB0aGUgbW9zdCBsZWZ0L3JpZ2h0IHByb2ZpbGUN CisgKi8NCiBlbnVtIHsNCiAJRElNX1NURVBQRUQsDQogCURJTV9UT09fVElSRUQsDQogCURJTV9P Tl9FREdFLA0KIH07DQogDQotc3RhdGljIGlubGluZSBib29sIGRpbV9vbl90b3Aoc3RydWN0IGRp bSAqZGltKQ0KLXsNCi0Jc3dpdGNoIChkaW0tPnR1bmVfc3RhdGUpIHsNCi0JY2FzZSBESU1fUEFS S0lOR19PTl9UT1A6DQotCWNhc2UgRElNX1BBUktJTkdfVElSRUQ6DQotCQlyZXR1cm4gdHJ1ZTsN Ci0JY2FzZSBESU1fR09JTkdfUklHSFQ6DQotCQlyZXR1cm4gKGRpbS0+c3RlcHNfbGVmdCA+IDEp ICYmIChkaW0tPnN0ZXBzX3JpZ2h0ID09IDEpOw0KLQlkZWZhdWx0OiAvKiBESU1fR09JTkdfTEVG VCAqLw0KLQkJcmV0dXJuIChkaW0tPnN0ZXBzX3JpZ2h0ID4gMSkgJiYgKGRpbS0+c3RlcHNfbGVm dCA9PSAxKTsNCi0JfQ0KLX0NCisvKioNCisgKglkaW1fb25fdG9wIC0gY2hlY2sgaWYgY3VycmVu dCBzdGF0ZSBpcyBhIGdvb2QgcGxhY2UgdG8gc3RvcCAodG9wIGxvY2F0aW9uKQ0KKyAqCUBkaW06 IERJTSBjb250ZXh0DQorICoNCisgKiBDaGVjayBpZiBjdXJyZW50IHByb2ZpbGUgaXMgYSBnb29k IHBsYWNlIHRvIHBhcmsgYXQuDQorICogVGhpcyB3aWxsIHJlc3VsdCBpbiByZWR1Y2luZyB0aGUg RElNIGNoZWNrcyBmcmVxdWVuY3kgYXMgd2UgYXNzdW1lIHdlDQorICogc2hvdWxkbid0IHByb2Jh Ymx5IGNoYW5nZSBwcm9maWxlcywgdW5sZXNzIHRyYWZmaWMgcGF0dGVybiB3YXNuJ3QgY2hhbmdl ZC4NCisgKi8NCitib29sIGRpbV9vbl90b3Aoc3RydWN0IGRpbSAqZGltKTsNCiANCi1zdGF0aWMg aW5saW5lIHZvaWQgZGltX3R1cm4oc3RydWN0IGRpbSAqZGltKQ0KLXsNCi0Jc3dpdGNoIChkaW0t PnR1bmVfc3RhdGUpIHsNCi0JY2FzZSBESU1fUEFSS0lOR19PTl9UT1A6DQotCWNhc2UgRElNX1BB UktJTkdfVElSRUQ6DQotCQlicmVhazsNCi0JY2FzZSBESU1fR09JTkdfUklHSFQ6DQotCQlkaW0t PnR1bmVfc3RhdGUgPSBESU1fR09JTkdfTEVGVDsNCi0JCWRpbS0+c3RlcHNfbGVmdCA9IDA7DQot CQlicmVhazsNCi0JY2FzZSBESU1fR09JTkdfTEVGVDoNCi0JCWRpbS0+dHVuZV9zdGF0ZSA9IERJ TV9HT0lOR19SSUdIVDsNCi0JCWRpbS0+c3RlcHNfcmlnaHQgPSAwOw0KLQkJYnJlYWs7DQotCX0N Ci19DQorLyoqDQorICoJZGltX3R1cm4gLSBjaGFuZ2UgcHJvZmlsZSBhbHRlcm5pbmcgZGlyZWN0 aW9uDQorICoJQGRpbTogRElNIGNvbnRleHQNCisgKg0KKyAqIEdvIGxlZnQgaWYgd2Ugd2VyZSBn b2luZyByaWdodCBhbmQgdmljZS12ZXJzYS4NCisgKiBEbyBub3RoaW5nIGlmIGN1cnJlbnRseSBw YXJraW5nLg0KKyAqLw0KK3ZvaWQgZGltX3R1cm4oc3RydWN0IGRpbSAqZGltKTsNCiANCi1zdGF0 aWMgaW5saW5lIHZvaWQgZGltX3Bhcmtfb25fdG9wKHN0cnVjdCBkaW0gKmRpbSkNCi17DQotCWRp bS0+c3RlcHNfcmlnaHQgID0gMDsNCi0JZGltLT5zdGVwc19sZWZ0ICAgPSAwOw0KLQlkaW0tPnRp cmVkICAgICAgICA9IDA7DQotCWRpbS0+dHVuZV9zdGF0ZSAgID0gRElNX1BBUktJTkdfT05fVE9Q Ow0KLX0NCisvKioNCisgKglkaW1fcGFya19vbl90b3AgLSBlbnRlciBhIHBhcmtpbmcgc3RhdGUg b24gYSB0b3AgbG9jYXRpb24NCisgKglAZGltOiBESU0gY29udGV4dA0KKyAqDQorICogRW50ZXIg cGFya2luZyBzdGF0ZS4NCisgKiBDbGVhciBhbGwgbW92ZW1lbnQgaGlzdG9yeS4NCisgKi8NCit2 b2lkIGRpbV9wYXJrX29uX3RvcChzdHJ1Y3QgZGltICpkaW0pOw0KIA0KLXN0YXRpYyBpbmxpbmUg dm9pZCBkaW1fcGFya190aXJlZChzdHJ1Y3QgZGltICpkaW0pDQotew0KLQlkaW0tPnN0ZXBzX3Jp Z2h0ICA9IDA7DQotCWRpbS0+c3RlcHNfbGVmdCAgID0gMDsNCi0JZGltLT50dW5lX3N0YXRlICAg PSBESU1fUEFSS0lOR19USVJFRDsNCi19DQorLyoqDQorICoJZGltX3BhcmtfdGlyZWQgLSBlbnRl ciBhIHRpcmVkIHBhcmtpbmcgc3RhdGUNCisgKglAZGltOiBESU0gY29udGV4dA0KKyAqDQorICog RW50ZXIgcGFya2luZyBzdGF0ZS4NCisgKiBDbGVhciBhbGwgbW92ZW1lbnQgaGlzdG9yeSBhbmQg Y2F1c2UgRElNIGNoZWNrcyBmcmVxdWVuY3kgdG8gcmVkdWNlLg0KKyAqLw0KK3ZvaWQgZGltX3Bh cmtfdGlyZWQoc3RydWN0IGRpbSAqZGltKTsNCisNCisvKioNCisgKglkaW1fY2FsY19zdGF0cyAt IGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBzYW1wbGVzDQorICoJQHN0YXJ0 OiBzdGFydCBzYW1wbGUNCisgKglAZW5kOiBlbmQgc2FtcGxlDQorICoJQGN1cnJfc3RhdHM6IGRl bHRhIGJldHdlZW4gc2FtcGxlcw0KKyAqDQorICogQ2FsY3VsYXRlIHRoZSBkZWx0YSBiZXR3ZWVu IHR3byBzYW1wbGVzIChpbiBkYXRhIHJhdGVzKS4NCisgKiBUYWtlcyBpbnRvIGNvbnNpZGVyYXRp b24gY291bnRlciB3cmFwLWFyb3VuZC4NCisgKi8NCit2b2lkIGRpbV9jYWxjX3N0YXRzKHN0cnVj dCBkaW1fc2FtcGxlICpzdGFydCwgc3RydWN0IGRpbV9zYW1wbGUgKmVuZCwNCisJCSAgICBzdHJ1 Y3QgZGltX3N0YXRzICpjdXJyX3N0YXRzKTsNCiANCisvKioNCisgKglkaW1fdXBkYXRlX3NhbXBs ZSAtIHNldCBhIHNhbXBsZSdzIGZpZWxkcyB3aXRoIGdpdmUgdmFsdWVzDQorICoJQGV2ZW50X2N0 cjogbnVtYmVyIG9mIGV2ZW50cyB0byBzZXQNCisgKglAcGFja2V0czogbnVtYmVyIG9mIHBhY2tl dHMgdG8gc2V0DQorICoJQGJ5dGVzOiBudW1iZXIgb2YgYnl0ZXMgdG8gc2V0DQorICoJQHM6IERJ TSBzYW1wbGUNCisgKi8NCiBzdGF0aWMgaW5saW5lIHZvaWQNCiBkaW1fdXBkYXRlX3NhbXBsZSh1 MTYgZXZlbnRfY3RyLCB1NjQgcGFja2V0cywgdTY0IGJ5dGVzLCBzdHJ1Y3QgZGltX3NhbXBsZSAq cykNCiB7DQpAQCAtMTMxLDIzICsyNDYsOTkgQEAgZGltX3VwZGF0ZV9zYW1wbGUodTE2IGV2ZW50 X2N0ciwgdTY0IHBhY2tldHMsIHU2NCBieXRlcywgc3RydWN0IGRpbV9zYW1wbGUgKnMpDQogCXMt PmV2ZW50X2N0ciA9IGV2ZW50X2N0cjsNCiB9DQogDQotc3RhdGljIGlubGluZSB2b2lkDQotZGlt X2NhbGNfc3RhdHMoc3RydWN0IGRpbV9zYW1wbGUgKnN0YXJ0LCBzdHJ1Y3QgZGltX3NhbXBsZSAq ZW5kLA0KLQkgICAgICAgc3RydWN0IGRpbV9zdGF0cyAqY3Vycl9zdGF0cykNCi17DQotCS8qIHUz MiBob2xkcyB1cCB0byA3MSBtaW51dGVzLCBzaG91bGQgYmUgZW5vdWdoICovDQotCXUzMiBkZWx0 YV91cyA9IGt0aW1lX3VzX2RlbHRhKGVuZC0+dGltZSwgc3RhcnQtPnRpbWUpOw0KLQl1MzIgbnBr dHMgPSBCSVRfR0FQKEJJVFNfUEVSX1RZUEUodTMyKSwgZW5kLT5wa3RfY3RyLCBzdGFydC0+cGt0 X2N0cik7DQotCXUzMiBuYnl0ZXMgPSBCSVRfR0FQKEJJVFNfUEVSX1RZUEUodTMyKSwgZW5kLT5i eXRlX2N0ciwNCi0JCQkgICAgIHN0YXJ0LT5ieXRlX2N0cik7DQotDQotCWlmICghZGVsdGFfdXMp DQotCQlyZXR1cm47DQotDQotCWN1cnJfc3RhdHMtPnBwbXMgPSBESVZfUk9VTkRfVVAobnBrdHMg KiBVU0VDX1BFUl9NU0VDLCBkZWx0YV91cyk7DQotCWN1cnJfc3RhdHMtPmJwbXMgPSBESVZfUk9V TkRfVVAobmJ5dGVzICogVVNFQ19QRVJfTVNFQywgZGVsdGFfdXMpOw0KLQljdXJyX3N0YXRzLT5l cG1zID0gRElWX1JPVU5EX1VQKERJTV9ORVZFTlRTICogVVNFQ19QRVJfTVNFQywNCi0JCQkJCWRl bHRhX3VzKTsNCisvKiBOZXQgRElNICovDQorDQorLyoNCisgKiBOZXQgRElNIHByb2ZpbGVzOg0K KyAqICAgICAgICBUaGVyZSBhcmUgZGlmZmVyZW50IHNldCBvZiBwcm9maWxlcyBmb3IgZWFjaCBD USBwZXJpb2QgbW9kZS4NCisgKiAgICAgICAgVGhlcmUgYXJlIGRpZmZlcmVudCBzZXQgb2YgcHJv ZmlsZXMgZm9yIFJYL1RYIENRcy4NCisgKiAgICAgICAgRWFjaCBwcm9maWxlIHNpemUgbXVzdCBi ZSBvZiBORVRfRElNX1BBUkFNU19OVU1fUFJPRklMRVMNCisgKi8NCisjZGVmaW5lIE5FVF9ESU1f UEFSQU1TX05VTV9QUk9GSUxFUyA1DQorI2RlZmluZSBORVRfRElNX0RFRkFVTFRfUlhfQ1FfTU9E RVJBVElPTl9QS1RTX0ZST01fRVFFIDI1Ng0KKyNkZWZpbmUgTkVUX0RJTV9ERUZBVUxUX1RYX0NR X01PREVSQVRJT05fUEtUU19GUk9NX0VRRSAxMjgNCisjZGVmaW5lIE5FVF9ESU1fREVGX1BST0ZJ TEVfQ1FFIDENCisjZGVmaW5lIE5FVF9ESU1fREVGX1BST0ZJTEVfRVFFIDENCisNCisjZGVmaW5l IE5FVF9ESU1fUlhfRVFFX1BST0ZJTEVTIHsgXA0KKwl7MSwgICBORVRfRElNX0RFRkFVTFRfUlhf Q1FfTU9ERVJBVElPTl9QS1RTX0ZST01fRVFFfSwgXA0KKwl7OCwgICBORVRfRElNX0RFRkFVTFRf UlhfQ1FfTU9ERVJBVElPTl9QS1RTX0ZST01fRVFFfSwgXA0KKwl7NjQsICBORVRfRElNX0RFRkFV TFRfUlhfQ1FfTU9ERVJBVElPTl9QS1RTX0ZST01fRVFFfSwgXA0KKwl7MTI4LCBORVRfRElNX0RF RkFVTFRfUlhfQ1FfTU9ERVJBVElPTl9QS1RTX0ZST01fRVFFfSwgXA0KKwl7MjU2LCBORVRfRElN X0RFRkFVTFRfUlhfQ1FfTU9ERVJBVElPTl9QS1RTX0ZST01fRVFFfSwgXA0KIH0NCiANCisjZGVm aW5lIE5FVF9ESU1fUlhfQ1FFX1BST0ZJTEVTIHsgXA0KKwl7MiwgIDI1Nn0sICAgICAgICAgICAg IFwNCisJezgsICAxMjh9LCAgICAgICAgICAgICBcDQorCXsxNiwgNjR9LCAgICAgICAgICAgICAg XA0KKwl7MzIsIDY0fSwgICAgICAgICAgICAgIFwNCisJezY0LCA2NH0gICAgICAgICAgICAgICBc DQorfQ0KKw0KKyNkZWZpbmUgTkVUX0RJTV9UWF9FUUVfUFJPRklMRVMgeyBcDQorCXsxLCAgIE5F VF9ESU1fREVGQVVMVF9UWF9DUV9NT0RFUkFUSU9OX1BLVFNfRlJPTV9FUUV9LCAgXA0KKwl7OCwg ICBORVRfRElNX0RFRkFVTFRfVFhfQ1FfTU9ERVJBVElPTl9QS1RTX0ZST01fRVFFfSwgIFwNCisJ ezMyLCAgTkVUX0RJTV9ERUZBVUxUX1RYX0NRX01PREVSQVRJT05fUEtUU19GUk9NX0VRRX0sICBc DQorCXs2NCwgIE5FVF9ESU1fREVGQVVMVF9UWF9DUV9NT0RFUkFUSU9OX1BLVFNfRlJPTV9FUUV9 LCAgXA0KKwl7MTI4LCBORVRfRElNX0RFRkFVTFRfVFhfQ1FfTU9ERVJBVElPTl9QS1RTX0ZST01f RVFFfSAgIFwNCit9DQorDQorI2RlZmluZSBORVRfRElNX1RYX0NRRV9QUk9GSUxFUyB7IFwNCisJ ezUsICAxMjh9LCAgXA0KKwl7OCwgIDY0fSwgIFwNCisJezE2LCAzMn0sICBcDQorCXszMiwgMzJ9 LCAgXA0KKwl7NjQsIDMyfSAgIFwNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBkaW1fY3Ff bW9kZXINCityeF9wcm9maWxlW0RJTV9DUV9QRVJJT0RfTlVNX01PREVTXVtORVRfRElNX1BBUkFN U19OVU1fUFJPRklMRVNdID0gew0KKwlORVRfRElNX1JYX0VRRV9QUk9GSUxFUywNCisJTkVUX0RJ TV9SWF9DUUVfUFJPRklMRVMsDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGRpbV9jcV9t b2Rlcg0KK3R4X3Byb2ZpbGVbRElNX0NRX1BFUklPRF9OVU1fTU9ERVNdW05FVF9ESU1fUEFSQU1T X05VTV9QUk9GSUxFU10gPSB7DQorCU5FVF9ESU1fVFhfRVFFX1BST0ZJTEVTLA0KKwlORVRfRElN X1RYX0NRRV9QUk9GSUxFUywNCit9Ow0KKw0KKy8qKg0KKyAqCW5ldF9kaW1fZ2V0X3J4X21vZGVy YXRpb24gLSBwcm92aWRlIGEgQ1EgbW9kZXJhdGlvbiBvYmplY3QgZm9yIHRoZSBnaXZlbiBSWCBw cm9maWxlDQorICoJQGNxX3BlcmlvZF9tb2RlOiBDUSBwZXJpb2QgbW9kZQ0KKyAqCUBpeDogUHJv ZmlsZSBpbmRleA0KKyAqLw0KK3N0cnVjdCBkaW1fY3FfbW9kZXIgbmV0X2RpbV9nZXRfcnhfbW9k ZXJhdGlvbih1OCBjcV9wZXJpb2RfbW9kZSwgaW50IGl4KTsNCisNCisvKioNCisgKgluZXRfZGlt X2dldF9kZWZfcnhfbW9kZXJhdGlvbiAtIHByb3ZpZGUgdGhlIGRlZmF1bHQgUlggbW9kZXJhdGlv bg0KKyAqCUBjcV9wZXJpb2RfbW9kZTogQ1EgcGVyaW9kIG1vZGUNCisgKi8NCitzdHJ1Y3QgZGlt X2NxX21vZGVyIG5ldF9kaW1fZ2V0X2RlZl9yeF9tb2RlcmF0aW9uKHU4IGNxX3BlcmlvZF9tb2Rl KTsNCisNCisvKioNCisgKgluZXRfZGltX2dldF90eF9tb2RlcmF0aW9uIC0gcHJvdmlkZSBhIENR IG1vZGVyYXRpb24gb2JqZWN0IGZvciB0aGUgZ2l2ZW4gVFggcHJvZmlsZQ0KKyAqCUBjcV9wZXJp b2RfbW9kZTogQ1EgcGVyaW9kIG1vZGUNCisgKglAaXg6IFByb2ZpbGUgaW5kZXgNCisgKi8NCitz dHJ1Y3QgZGltX2NxX21vZGVyIG5ldF9kaW1fZ2V0X3R4X21vZGVyYXRpb24odTggY3FfcGVyaW9k X21vZGUsIGludCBpeCk7DQorDQorLyoqDQorICoJbmV0X2RpbV9nZXRfZGVmX3R4X21vZGVyYXRp b24gLSBwcm92aWRlIHRoZSBkZWZhdWx0IFRYIG1vZGVyYXRpb24NCisgKglAY3FfcGVyaW9kX21v ZGU6IENRIHBlcmlvZCBtb2RlDQorICovDQorc3RydWN0IGRpbV9jcV9tb2RlciBuZXRfZGltX2dl dF9kZWZfdHhfbW9kZXJhdGlvbih1OCBjcV9wZXJpb2RfbW9kZSk7DQorDQorLyoqDQorICoJbmV0 X2RpbSAtIG1haW4gRElNIGFsZ29yaXRobSBlbnRyeSBwb2ludA0KKyAqCUBkaW06IERJTSBpbnN0 YW5jZSBpbmZvcm1hdGlvbg0KKyAqCUBlbmRfc2FtcGxlOiBDdXJyZW50IGRhdGEgbWVhc3VyZW1l bnQNCisgKg0KKyAqIENhbGxlZCBieSB0aGUgY29uc3VtZXIuDQorICogVGhpcyBpcyB0aGUgbWFp biBsb2dpYyBvZiB0aGUgYWxnb3JpdGhtLCB3aGVyZSBkYXRhIGlzIHByb2Nlc3NlZCBpbiBvcmRl ciB0byBkZWNpZGUgb24gbmV4dA0KKyAqIHJlcXVpcmVkIGFjdGlvbi4NCisgKi8NCit2b2lkIG5l dF9kaW0oc3RydWN0IGRpbSAqZGltLCBzdHJ1Y3QgZGltX3NhbXBsZSBlbmRfc2FtcGxlKTsNCisN CiAjZW5kaWYgLyogRElNX0ggKi8NCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldF9kaW0u aCBiL2luY2x1ZGUvbGludXgvbmV0X2RpbS5oDQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCmlu ZGV4IDRlMDA5ZWMxOTNlZi4uMDAwMDAwMDAwMDAwDQotLS0gYS9pbmNsdWRlL2xpbnV4L25ldF9k aW0uaA0KKysrIC9kZXYvbnVsbA0KQEAgLTEsMjczICswLDAgQEANCi0vKg0KLSAqIENvcHlyaWdo dCAoYykgMjAxNiwgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0K LSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBCcm9hZGNvbSBMaW1pdGVkLiBBbGwgcmlnaHRz IHJlc2VydmVkLg0KLSAqDQotICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVu ZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28NCi0gKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3Nl IHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQotICogR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlDQot ICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3Ig dGhlDQotICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoNCi0gKg0KLSAqICAgICBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yDQot ICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZw0KLSAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6DQotICoNCi0gKiAgICAg IC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQ0K LSAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZw0KLSAqICAgICAgICBkaXNjbGFpbWVyLg0KLSAqDQotICogICAgICAtIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCi0g KiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcNCi0gKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzDQotICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry aWJ1dGlvbi4NCi0gKg0KLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KLSAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRg0KLSAqIE1FUkNIQU5UQUJJ TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EDQotICogTk9OSU5GUklO R0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS Uw0KLSAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTg0KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElODQotICogQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQ0KLSAqIFNPRlRXQVJF Lg0KLSAqLw0KLQ0KLSNpZm5kZWYgTkVUX0RJTV9IDQotI2RlZmluZSBORVRfRElNX0gNCi0NCi0j aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQotI2luY2x1ZGUgPGxpbnV4L2RpbS5oPg0KLQ0KLSNk ZWZpbmUgTkVUX0RJTV9QQVJBTVNfTlVNX1BST0ZJTEVTIDUNCi0vKiBOZXRkZXYgZHluYW1pYyBp bnRlcnJ1cHQgbW9kZXJhdGlvbiBwcm9maWxlcyAqLw0KLSNkZWZpbmUgTkVUX0RJTV9ERUZBVUxU X1JYX0NRX01PREVSQVRJT05fUEtUU19GUk9NX0VRRSAyNTYNCi0jZGVmaW5lIE5FVF9ESU1fREVG QVVMVF9UWF9DUV9NT0RFUkFUSU9OX1BLVFNfRlJPTV9FUUUgMTI4DQotI2RlZmluZSBORVRfRElN X0RFRl9QUk9GSUxFX0NRRSAxDQotI2RlZmluZSBORVRfRElNX0RFRl9QUk9GSUxFX0VRRSAxDQot DQotLyogQWxsIHByb2ZpbGVzIHNpemVzIG11c3QgYmUgTkVUX1BBUkFNU19ESU1fTlVNX1BST0ZJ TEVTICovDQotI2RlZmluZSBORVRfRElNX1JYX0VRRV9QUk9GSUxFUyB7IFwNCi0JezEsICAgTkVU X0RJTV9ERUZBVUxUX1JYX0NRX01PREVSQVRJT05fUEtUU19GUk9NX0VRRX0sIFwNCi0JezgsICAg TkVUX0RJTV9ERUZBVUxUX1JYX0NRX01PREVSQVRJT05fUEtUU19GUk9NX0VRRX0sIFwNCi0JezY0 LCAgTkVUX0RJTV9ERUZBVUxUX1JYX0NRX01PREVSQVRJT05fUEtUU19GUk9NX0VRRX0sIFwNCi0J ezEyOCwgTkVUX0RJTV9ERUZBVUxUX1JYX0NRX01PREVSQVRJT05fUEtUU19GUk9NX0VRRX0sIFwN Ci0JezI1NiwgTkVUX0RJTV9ERUZBVUxUX1JYX0NRX01PREVSQVRJT05fUEtUU19GUk9NX0VRRX0s IFwNCi19DQotDQotI2RlZmluZSBORVRfRElNX1JYX0NRRV9QUk9GSUxFUyB7IFwNCi0JezIsICAy NTZ9LCAgICAgICAgICAgICBcDQotCXs4LCAgMTI4fSwgICAgICAgICAgICAgXA0KLQl7MTYsIDY0 fSwgICAgICAgICAgICAgIFwNCi0JezMyLCA2NH0sICAgICAgICAgICAgICBcDQotCXs2NCwgNjR9 ICAgICAgICAgICAgICAgXA0KLX0NCi0NCi0jZGVmaW5lIE5FVF9ESU1fVFhfRVFFX1BST0ZJTEVT IHsgXA0KLQl7MSwgICBORVRfRElNX0RFRkFVTFRfVFhfQ1FfTU9ERVJBVElPTl9QS1RTX0ZST01f RVFFfSwgIFwNCi0JezgsICAgTkVUX0RJTV9ERUZBVUxUX1RYX0NRX01PREVSQVRJT05fUEtUU19G Uk9NX0VRRX0sICBcDQotCXszMiwgIE5FVF9ESU1fREVGQVVMVF9UWF9DUV9NT0RFUkFUSU9OX1BL VFNfRlJPTV9FUUV9LCAgXA0KLQl7NjQsICBORVRfRElNX0RFRkFVTFRfVFhfQ1FfTU9ERVJBVElP Tl9QS1RTX0ZST01fRVFFfSwgIFwNCi0JezEyOCwgTkVUX0RJTV9ERUZBVUxUX1RYX0NRX01PREVS QVRJT05fUEtUU19GUk9NX0VRRX0gICBcDQotfQ0KLQ0KLSNkZWZpbmUgTkVUX0RJTV9UWF9DUUVf UFJPRklMRVMgeyBcDQotCXs1LCAgMTI4fSwgIFwNCi0JezgsICA2NH0sICBcDQotCXsxNiwgMzJ9 LCAgXA0KLQl7MzIsIDMyfSwgIFwNCi0JezY0LCAzMn0gICBcDQotfQ0KLQ0KLXN0YXRpYyBjb25z dCBzdHJ1Y3QgZGltX2NxX21vZGVyDQotcnhfcHJvZmlsZVtESU1fQ1FfUEVSSU9EX05VTV9NT0RF U11bTkVUX0RJTV9QQVJBTVNfTlVNX1BST0ZJTEVTXSA9IHsNCi0JTkVUX0RJTV9SWF9FUUVfUFJP RklMRVMsDQotCU5FVF9ESU1fUlhfQ1FFX1BST0ZJTEVTLA0KLX07DQotDQotc3RhdGljIGNvbnN0 IHN0cnVjdCBkaW1fY3FfbW9kZXINCi10eF9wcm9maWxlW0RJTV9DUV9QRVJJT0RfTlVNX01PREVT XVtORVRfRElNX1BBUkFNU19OVU1fUFJPRklMRVNdID0gew0KLQlORVRfRElNX1RYX0VRRV9QUk9G SUxFUywNCi0JTkVUX0RJTV9UWF9DUUVfUFJPRklMRVMsDQotfTsNCi0NCi1zdGF0aWMgaW5saW5l IHN0cnVjdCBkaW1fY3FfbW9kZXINCi1uZXRfZGltX2dldF9yeF9tb2RlcmF0aW9uKHU4IGNxX3Bl cmlvZF9tb2RlLCBpbnQgaXgpDQotew0KLQlzdHJ1Y3QgZGltX2NxX21vZGVyIGNxX21vZGVyID0g cnhfcHJvZmlsZVtjcV9wZXJpb2RfbW9kZV1baXhdOw0KLQ0KLQljcV9tb2Rlci5jcV9wZXJpb2Rf bW9kZSA9IGNxX3BlcmlvZF9tb2RlOw0KLQlyZXR1cm4gY3FfbW9kZXI7DQotfQ0KLQ0KLXN0YXRp YyBpbmxpbmUgc3RydWN0IGRpbV9jcV9tb2Rlcg0KLW5ldF9kaW1fZ2V0X2RlZl9yeF9tb2RlcmF0 aW9uKHU4IGNxX3BlcmlvZF9tb2RlKQ0KLXsNCi0JdTggcHJvZmlsZV9peCA9IGNxX3BlcmlvZF9t b2RlID09IERJTV9DUV9QRVJJT0RfTU9ERV9TVEFSVF9GUk9NX0NRRSA/DQotCQkJTkVUX0RJTV9E RUZfUFJPRklMRV9DUUUgOiBORVRfRElNX0RFRl9QUk9GSUxFX0VRRTsNCi0NCi0JcmV0dXJuIG5l dF9kaW1fZ2V0X3J4X21vZGVyYXRpb24oY3FfcGVyaW9kX21vZGUsIHByb2ZpbGVfaXgpOw0KLX0N Ci0NCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkaW1fY3FfbW9kZXINCi1uZXRfZGltX2dldF90eF9t b2RlcmF0aW9uKHU4IGNxX3BlcmlvZF9tb2RlLCBpbnQgaXgpDQotew0KLQlzdHJ1Y3QgZGltX2Nx X21vZGVyIGNxX21vZGVyID0gdHhfcHJvZmlsZVtjcV9wZXJpb2RfbW9kZV1baXhdOw0KLQ0KLQlj cV9tb2Rlci5jcV9wZXJpb2RfbW9kZSA9IGNxX3BlcmlvZF9tb2RlOw0KLQlyZXR1cm4gY3FfbW9k ZXI7DQotfQ0KLQ0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRpbV9jcV9tb2Rlcg0KLW5ldF9kaW1f Z2V0X2RlZl90eF9tb2RlcmF0aW9uKHU4IGNxX3BlcmlvZF9tb2RlKQ0KLXsNCi0JdTggcHJvZmls ZV9peCA9IGNxX3BlcmlvZF9tb2RlID09IERJTV9DUV9QRVJJT0RfTU9ERV9TVEFSVF9GUk9NX0NR RSA/DQotCQkJTkVUX0RJTV9ERUZfUFJPRklMRV9DUUUgOiBORVRfRElNX0RFRl9QUk9GSUxFX0VR RTsNCi0NCi0JcmV0dXJuIG5ldF9kaW1fZ2V0X3R4X21vZGVyYXRpb24oY3FfcGVyaW9kX21vZGUs IHByb2ZpbGVfaXgpOw0KLX0NCi0NCi1zdGF0aWMgaW5saW5lIGludCBuZXRfZGltX3N0ZXAoc3Ry dWN0IGRpbSAqZGltKQ0KLXsNCi0JaWYgKGRpbS0+dGlyZWQgPT0gKE5FVF9ESU1fUEFSQU1TX05V TV9QUk9GSUxFUyAqIDIpKQ0KLQkJcmV0dXJuIERJTV9UT09fVElSRUQ7DQotDQotCXN3aXRjaCAo ZGltLT50dW5lX3N0YXRlKSB7DQotCWNhc2UgRElNX1BBUktJTkdfT05fVE9QOg0KLQljYXNlIERJ TV9QQVJLSU5HX1RJUkVEOg0KLQkJYnJlYWs7DQotCWNhc2UgRElNX0dPSU5HX1JJR0hUOg0KLQkJ aWYgKGRpbS0+cHJvZmlsZV9peCA9PSAoTkVUX0RJTV9QQVJBTVNfTlVNX1BST0ZJTEVTIC0gMSkp DQotCQkJcmV0dXJuIERJTV9PTl9FREdFOw0KLQkJZGltLT5wcm9maWxlX2l4Kys7DQotCQlkaW0t PnN0ZXBzX3JpZ2h0Kys7DQotCQlicmVhazsNCi0JY2FzZSBESU1fR09JTkdfTEVGVDoNCi0JCWlm IChkaW0tPnByb2ZpbGVfaXggPT0gMCkNCi0JCQlyZXR1cm4gRElNX09OX0VER0U7DQotCQlkaW0t PnByb2ZpbGVfaXgtLTsNCi0JCWRpbS0+c3RlcHNfbGVmdCsrOw0KLQkJYnJlYWs7DQotCX0NCi0N Ci0JZGltLT50aXJlZCsrOw0KLQlyZXR1cm4gRElNX1NURVBQRUQ7DQotfQ0KLQ0KLXN0YXRpYyBp bmxpbmUgdm9pZCBuZXRfZGltX2V4aXRfcGFya2luZyhzdHJ1Y3QgZGltICpkaW0pDQotew0KLQlk aW0tPnR1bmVfc3RhdGUgPSBkaW0tPnByb2ZpbGVfaXggPyBESU1fR09JTkdfTEVGVCA6DQotCQkJ CQkgIERJTV9HT0lOR19SSUdIVDsNCi0JbmV0X2RpbV9zdGVwKGRpbSk7DQotfQ0KLQ0KLXN0YXRp YyBpbmxpbmUgaW50IG5ldF9kaW1fc3RhdHNfY29tcGFyZShzdHJ1Y3QgZGltX3N0YXRzICpjdXJy LA0KLQkJCQkJc3RydWN0IGRpbV9zdGF0cyAqcHJldikNCi17DQotCWlmICghcHJldi0+YnBtcykN Ci0JCXJldHVybiBjdXJyLT5icG1zID8gRElNX1NUQVRTX0JFVFRFUiA6DQotCQkJCSAgICBESU1f U1RBVFNfU0FNRTsNCi0NCi0JaWYgKElTX1NJR05JRklDQU5UX0RJRkYoY3Vyci0+YnBtcywgcHJl di0+YnBtcykpDQotCQlyZXR1cm4gKGN1cnItPmJwbXMgPiBwcmV2LT5icG1zKSA/IERJTV9TVEFU U19CRVRURVIgOg0KLQkJCQkJCSAgIERJTV9TVEFUU19XT1JTRTsNCi0NCi0JaWYgKCFwcmV2LT5w cG1zKQ0KLQkJcmV0dXJuIGN1cnItPnBwbXMgPyBESU1fU1RBVFNfQkVUVEVSIDoNCi0JCQkJICAg IERJTV9TVEFUU19TQU1FOw0KLQ0KLQlpZiAoSVNfU0lHTklGSUNBTlRfRElGRihjdXJyLT5wcG1z LCBwcmV2LT5wcG1zKSkNCi0JCXJldHVybiAoY3Vyci0+cHBtcyA+IHByZXYtPnBwbXMpID8gRElN X1NUQVRTX0JFVFRFUiA6DQotCQkJCQkJICAgRElNX1NUQVRTX1dPUlNFOw0KLQ0KLQlpZiAoIXBy ZXYtPmVwbXMpDQotCQlyZXR1cm4gRElNX1NUQVRTX1NBTUU7DQotDQotCWlmIChJU19TSUdOSUZJ Q0FOVF9ESUZGKGN1cnItPmVwbXMsIHByZXYtPmVwbXMpKQ0KLQkJcmV0dXJuIChjdXJyLT5lcG1z IDwgcHJldi0+ZXBtcykgPyBESU1fU1RBVFNfQkVUVEVSIDoNCi0JCQkJCQkgICBESU1fU1RBVFNf V09SU0U7DQotDQotCXJldHVybiBESU1fU1RBVFNfU0FNRTsNCi19DQotDQotc3RhdGljIGlubGlu ZSBib29sIG5ldF9kaW1fZGVjaXNpb24oc3RydWN0IGRpbV9zdGF0cyAqY3Vycl9zdGF0cywNCi0J CQkJICAgIHN0cnVjdCBkaW0gKmRpbSkNCi17DQotCWludCBwcmV2X3N0YXRlID0gZGltLT50dW5l X3N0YXRlOw0KLQlpbnQgcHJldl9peCA9IGRpbS0+cHJvZmlsZV9peDsNCi0JaW50IHN0YXRzX3Jl czsNCi0JaW50IHN0ZXBfcmVzOw0KLQ0KLQlzd2l0Y2ggKGRpbS0+dHVuZV9zdGF0ZSkgew0KLQlj YXNlIERJTV9QQVJLSU5HX09OX1RPUDoNCi0JCXN0YXRzX3JlcyA9IG5ldF9kaW1fc3RhdHNfY29t cGFyZShjdXJyX3N0YXRzLCAmZGltLT5wcmV2X3N0YXRzKTsNCi0JCWlmIChzdGF0c19yZXMgIT0g RElNX1NUQVRTX1NBTUUpDQotCQkJbmV0X2RpbV9leGl0X3BhcmtpbmcoZGltKTsNCi0JCWJyZWFr Ow0KLQ0KLQljYXNlIERJTV9QQVJLSU5HX1RJUkVEOg0KLQkJZGltLT50aXJlZC0tOw0KLQkJaWYg KCFkaW0tPnRpcmVkKQ0KLQkJCW5ldF9kaW1fZXhpdF9wYXJraW5nKGRpbSk7DQotCQlicmVhazsN Ci0NCi0JY2FzZSBESU1fR09JTkdfUklHSFQ6DQotCWNhc2UgRElNX0dPSU5HX0xFRlQ6DQotCQlz dGF0c19yZXMgPSBuZXRfZGltX3N0YXRzX2NvbXBhcmUoY3Vycl9zdGF0cywgJmRpbS0+cHJldl9z dGF0cyk7DQotCQlpZiAoc3RhdHNfcmVzICE9IERJTV9TVEFUU19CRVRURVIpDQotCQkJZGltX3R1 cm4oZGltKTsNCi0NCi0JCWlmIChkaW1fb25fdG9wKGRpbSkpIHsNCi0JCQlkaW1fcGFya19vbl90 b3AoZGltKTsNCi0JCQlicmVhazsNCi0JCX0NCi0NCi0JCXN0ZXBfcmVzID0gbmV0X2RpbV9zdGVw KGRpbSk7DQotCQlzd2l0Y2ggKHN0ZXBfcmVzKSB7DQotCQljYXNlIERJTV9PTl9FREdFOg0KLQkJ CWRpbV9wYXJrX29uX3RvcChkaW0pOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBESU1fVE9PX1RJUkVE Og0KLQkJCWRpbV9wYXJrX3RpcmVkKGRpbSk7DQotCQkJYnJlYWs7DQotCQl9DQotDQotCQlicmVh azsNCi0JfQ0KLQ0KLQlpZiAocHJldl9zdGF0ZSAhPSBESU1fUEFSS0lOR19PTl9UT1AgfHwNCi0J ICAgIGRpbS0+dHVuZV9zdGF0ZSAhPSBESU1fUEFSS0lOR19PTl9UT1ApDQotCQlkaW0tPnByZXZf c3RhdHMgPSAqY3Vycl9zdGF0czsNCi0NCi0JcmV0dXJuIGRpbS0+cHJvZmlsZV9peCAhPSBwcmV2 X2l4Ow0KLX0NCi0NCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0X2RpbShzdHJ1Y3QgZGltICpkaW0s DQotCQkJICAgc3RydWN0IGRpbV9zYW1wbGUgZW5kX3NhbXBsZSkNCi17DQotCXN0cnVjdCBkaW1f c3RhdHMgY3Vycl9zdGF0czsNCi0JdTE2IG5ldmVudHM7DQotDQotCXN3aXRjaCAoZGltLT5zdGF0 ZSkgew0KLQljYXNlIERJTV9NRUFTVVJFX0lOX1BST0dSRVNTOg0KLQkJbmV2ZW50cyA9IEJJVF9H QVAoQklUU19QRVJfVFlQRSh1MTYpLA0KLQkJCQkgIGVuZF9zYW1wbGUuZXZlbnRfY3RyLA0KLQkJ CQkgIGRpbS0+c3RhcnRfc2FtcGxlLmV2ZW50X2N0cik7DQotCQlpZiAobmV2ZW50cyA8IERJTV9O RVZFTlRTKQ0KLQkJCWJyZWFrOw0KLQkJZGltX2NhbGNfc3RhdHMoJmRpbS0+c3RhcnRfc2FtcGxl LCAmZW5kX3NhbXBsZSwgJmN1cnJfc3RhdHMpOw0KLQkJaWYgKG5ldF9kaW1fZGVjaXNpb24oJmN1 cnJfc3RhdHMsIGRpbSkpIHsNCi0JCQlkaW0tPnN0YXRlID0gRElNX0FQUExZX05FV19QUk9GSUxF Ow0KLQkJCXNjaGVkdWxlX3dvcmsoJmRpbS0+d29yayk7DQotCQkJYnJlYWs7DQotCQl9DQotCQkv KiBmYWxsIHRocm91Z2ggKi8NCi0JY2FzZSBESU1fU1RBUlRfTUVBU1VSRToNCi0JCWRpbV91cGRh dGVfc2FtcGxlKGVuZF9zYW1wbGUuZXZlbnRfY3RyLCBlbmRfc2FtcGxlLnBrdF9jdHIsDQotCQkJ CSAgZW5kX3NhbXBsZS5ieXRlX2N0ciwgJmRpbS0+c3RhcnRfc2FtcGxlKTsNCi0JCWRpbS0+c3Rh dGUgPSBESU1fTUVBU1VSRV9JTl9QUk9HUkVTUzsNCi0JCWJyZWFrOw0KLQljYXNlIERJTV9BUFBM WV9ORVdfUFJPRklMRToNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLSNlbmRpZiAvKiBORVRfRElN X0ggKi8NCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnDQppbmRleCA5MDYy M2EwZTE5NDIuLjc4ZGRiOTUyNmI2MiAxMDA2NDQNCi0tLSBhL2xpYi9LY29uZmlnDQorKysgYi9s aWIvS2NvbmZpZw0KQEAgLTU2Miw2ICs1NjIsMTQgQEAgY29uZmlnIFNJR05BVFVSRQ0KIAkgIERp Z2l0YWwgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbi4gQ3VycmVudGx5IG9ubHkgUlNBIGlzIHN1cHBv cnRlZC4NCiAJICBJbXBsZW1lbnRhdGlvbiBpcyBkb25lIHVzaW5nIEdudVBHIE1QSSBsaWJyYXJ5 DQogDQorY29uZmlnIERJTUxJQg0KKwlib29sICJESU0gbGlicmFyeSINCisJZGVmYXVsdCB5DQor CWhlbHANCisJICBEeW5hbWljIEludGVycnVwdCBNb2RlcmF0aW9uIGxpYnJhcnkuDQorCSAgSW1w bGVtZW50cyBhbiBhbGdvcml0aG0gZm9yIGR5bmFtaWNhbGx5IGNoYW5nZSBDUSBtb2RlcnRpb24g dmFsdWVzDQorCSAgYWNjb3JkaW5nIHRvIHJ1biB0aW1lIHBlcmZvcm1hbmNlLg0KKw0KICMNCiAj IGxpYmZkdCBmaWxlcywgb25seSBzZWxlY3RlZCBpZiBuZWVkZWQuDQogIw0KZGlmZiAtLWdpdCBh L2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQ0KaW5kZXggZmI3Njk3MDMxYTc5Li5kY2I1NThj NzU1NGQgMTAwNjQ0DQotLS0gYS9saWIvTWFrZWZpbGUNCisrKyBiL2xpYi9NYWtlZmlsZQ0KQEAg LTIwMiw2ICsyMDIsNyBAQCBvYmotJChDT05GSUdfR0xPQikgKz0gZ2xvYi5vDQogb2JqLSQoQ09O RklHX0dMT0JfU0VMRlRFU1QpICs9IGdsb2J0ZXN0Lm8NCiANCiBvYmotJChDT05GSUdfTVBJTElC KSArPSBtcGkvDQorb2JqLSQoQ09ORklHX0RJTUxJQikgKz0gZGltLw0KIG9iai0kKENPTkZJR19T SUdOQVRVUkUpICs9IGRpZ3NpZy5vDQogDQogbGliLSQoQ09ORklHX0NMWl9UQUIpICs9IGNsel90 YWIubw0KZGlmZiAtLWdpdCBhL2xpYi9kaW0vTWFrZWZpbGUgYi9saWIvZGltL01ha2VmaWxlDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi4xNjBhZmUyODhkZjANCi0t LSAvZGV2L251bGwNCisrKyBiL2xpYi9kaW0vTWFrZWZpbGUNCkBAIC0wLDAgKzEsOSBAQA0KKyMN CisjIERJTSBEeW5hbWljIEludGVycnVwdCBNb2RlcmF0aW9uIGxpYnJhcnkNCisjDQorDQorb2Jq LSQoQ09ORklHX0RJTUxJQikgPSBuZXRfZGltLm8NCisNCituZXRfZGltLXkgPSBcDQorCWRpbS5v CQlcDQorCW5ldF9kaW0ubw0KZGlmZiAtLWdpdCBhL2xpYi9kaW0vZGltLmMgYi9saWIvZGltL2Rp bS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi4xN2Q1MjM2NzU5 YmQNCi0tLSAvZGV2L251bGwNCisrKyBiL2xpYi9kaW0vZGltLmMNCkBAIC0wLDAgKzEsNzQgQEAN CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBMaW51eC1PcGVuSUINCisv Kg0KKyAqIENvcHlyaWdodCAoYykgMjAxOSwgTWVsbGFub3ggVGVjaG5vbG9naWVzIGluYy4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2RpbS5oPg0KKw0K K2Jvb2wgZGltX29uX3RvcChzdHJ1Y3QgZGltICpkaW0pDQorew0KKwlzd2l0Y2ggKGRpbS0+dHVu ZV9zdGF0ZSkgew0KKwljYXNlIERJTV9QQVJLSU5HX09OX1RPUDoNCisJY2FzZSBESU1fUEFSS0lO R19USVJFRDoNCisJCXJldHVybiB0cnVlOw0KKwljYXNlIERJTV9HT0lOR19SSUdIVDoNCisJCXJl dHVybiAoZGltLT5zdGVwc19sZWZ0ID4gMSkgJiYgKGRpbS0+c3RlcHNfcmlnaHQgPT0gMSk7DQor CWRlZmF1bHQ6IC8qIERJTV9HT0lOR19MRUZUICovDQorCQlyZXR1cm4gKGRpbS0+c3RlcHNfcmln aHQgPiAxKSAmJiAoZGltLT5zdGVwc19sZWZ0ID09IDEpOw0KKwl9DQorfQ0KK0VYUE9SVF9TWU1C T0woZGltX29uX3RvcCk7DQorDQordm9pZCBkaW1fdHVybihzdHJ1Y3QgZGltICpkaW0pDQorew0K Kwlzd2l0Y2ggKGRpbS0+dHVuZV9zdGF0ZSkgew0KKwljYXNlIERJTV9QQVJLSU5HX09OX1RPUDoN CisJY2FzZSBESU1fUEFSS0lOR19USVJFRDoNCisJCWJyZWFrOw0KKwljYXNlIERJTV9HT0lOR19S SUdIVDoNCisJCWRpbS0+dHVuZV9zdGF0ZSA9IERJTV9HT0lOR19MRUZUOw0KKwkJZGltLT5zdGVw c19sZWZ0ID0gMDsNCisJCWJyZWFrOw0KKwljYXNlIERJTV9HT0lOR19MRUZUOg0KKwkJZGltLT50 dW5lX3N0YXRlID0gRElNX0dPSU5HX1JJR0hUOw0KKwkJZGltLT5zdGVwc19yaWdodCA9IDA7DQor CQlicmVhazsNCisJfQ0KK30NCitFWFBPUlRfU1lNQk9MKGRpbV90dXJuKTsNCisNCit2b2lkIGRp bV9wYXJrX29uX3RvcChzdHJ1Y3QgZGltICpkaW0pDQorew0KKwlkaW0tPnN0ZXBzX3JpZ2h0ICA9 IDA7DQorCWRpbS0+c3RlcHNfbGVmdCAgID0gMDsNCisJZGltLT50aXJlZCAgICAgICAgPSAwOw0K KwlkaW0tPnR1bmVfc3RhdGUgICA9IERJTV9QQVJLSU5HX09OX1RPUDsNCit9DQorRVhQT1JUX1NZ TUJPTChkaW1fcGFya19vbl90b3ApOw0KKw0KK3ZvaWQgZGltX3BhcmtfdGlyZWQoc3RydWN0IGRp bSAqZGltKQ0KK3sNCisJZGltLT5zdGVwc19yaWdodCAgPSAwOw0KKwlkaW0tPnN0ZXBzX2xlZnQg ICA9IDA7DQorCWRpbS0+dHVuZV9zdGF0ZSAgID0gRElNX1BBUktJTkdfVElSRUQ7DQorfQ0KK0VY UE9SVF9TWU1CT0woZGltX3BhcmtfdGlyZWQpOw0KKw0KK3ZvaWQgZGltX2NhbGNfc3RhdHMoc3Ry dWN0IGRpbV9zYW1wbGUgKnN0YXJ0LCBzdHJ1Y3QgZGltX3NhbXBsZSAqZW5kLA0KKwkJICAgIHN0 cnVjdCBkaW1fc3RhdHMgKmN1cnJfc3RhdHMpDQorew0KKwkvKiB1MzIgaG9sZHMgdXAgdG8gNzEg bWludXRlcywgc2hvdWxkIGJlIGVub3VnaCAqLw0KKwl1MzIgZGVsdGFfdXMgPSBrdGltZV91c19k ZWx0YShlbmQtPnRpbWUsIHN0YXJ0LT50aW1lKTsNCisJdTMyIG5wa3RzID0gQklUX0dBUChCSVRT X1BFUl9UWVBFKHUzMiksIGVuZC0+cGt0X2N0ciwgc3RhcnQtPnBrdF9jdHIpOw0KKwl1MzIgbmJ5 dGVzID0gQklUX0dBUChCSVRTX1BFUl9UWVBFKHUzMiksIGVuZC0+Ynl0ZV9jdHIsDQorCQkJICAg ICBzdGFydC0+Ynl0ZV9jdHIpOw0KKw0KKwlpZiAoIWRlbHRhX3VzKQ0KKwkJcmV0dXJuOw0KKw0K KwljdXJyX3N0YXRzLT5wcG1zID0gRElWX1JPVU5EX1VQKG5wa3RzICogVVNFQ19QRVJfTVNFQywg ZGVsdGFfdXMpOw0KKwljdXJyX3N0YXRzLT5icG1zID0gRElWX1JPVU5EX1VQKG5ieXRlcyAqIFVT RUNfUEVSX01TRUMsIGRlbHRhX3VzKTsNCisJY3Vycl9zdGF0cy0+ZXBtcyA9IERJVl9ST1VORF9V UChESU1fTkVWRU5UUyAqIFVTRUNfUEVSX01TRUMsDQorCQkJCQlkZWx0YV91cyk7DQorfQ0KK0VY UE9SVF9TWU1CT0woZGltX2NhbGNfc3RhdHMpOw0KZGlmZiAtLWdpdCBhL2xpYi9kaW0vbmV0X2Rp bS5jIGIvbGliL2RpbS9uZXRfZGltLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwMDAwMDAuLjViY2M5MDJjNTM4OA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbGliL2RpbS9uZXRf ZGltLmMNCkBAIC0wLDAgKzEsMTkwIEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAgT1IgTGludXgtT3BlbklCDQorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIE1lbGxh bm94IFRlY2hub2xvZ2llcyBpbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqLw0KKw0KKyNp bmNsdWRlIDxsaW51eC9kaW0uaD4NCisNCitzdHJ1Y3QgZGltX2NxX21vZGVyDQorbmV0X2RpbV9n ZXRfcnhfbW9kZXJhdGlvbih1OCBjcV9wZXJpb2RfbW9kZSwgaW50IGl4KQ0KK3sNCisJc3RydWN0 IGRpbV9jcV9tb2RlciBjcV9tb2RlciA9IHJ4X3Byb2ZpbGVbY3FfcGVyaW9kX21vZGVdW2l4XTsN CisNCisJY3FfbW9kZXIuY3FfcGVyaW9kX21vZGUgPSBjcV9wZXJpb2RfbW9kZTsNCisJcmV0dXJu IGNxX21vZGVyOw0KK30NCitFWFBPUlRfU1lNQk9MKG5ldF9kaW1fZ2V0X3J4X21vZGVyYXRpb24p Ow0KKw0KK3N0cnVjdCBkaW1fY3FfbW9kZXINCituZXRfZGltX2dldF9kZWZfcnhfbW9kZXJhdGlv bih1OCBjcV9wZXJpb2RfbW9kZSkNCit7DQorCXU4IHByb2ZpbGVfaXggPSBjcV9wZXJpb2RfbW9k ZSA9PSBESU1fQ1FfUEVSSU9EX01PREVfU1RBUlRfRlJPTV9DUUUgPw0KKwkJCU5FVF9ESU1fREVG X1BST0ZJTEVfQ1FFIDogTkVUX0RJTV9ERUZfUFJPRklMRV9FUUU7DQorDQorCXJldHVybiBuZXRf ZGltX2dldF9yeF9tb2RlcmF0aW9uKGNxX3BlcmlvZF9tb2RlLCBwcm9maWxlX2l4KTsNCit9DQor RVhQT1JUX1NZTUJPTChuZXRfZGltX2dldF9kZWZfcnhfbW9kZXJhdGlvbik7DQorDQorc3RydWN0 IGRpbV9jcV9tb2Rlcg0KK25ldF9kaW1fZ2V0X3R4X21vZGVyYXRpb24odTggY3FfcGVyaW9kX21v ZGUsIGludCBpeCkNCit7DQorCXN0cnVjdCBkaW1fY3FfbW9kZXIgY3FfbW9kZXIgPSB0eF9wcm9m aWxlW2NxX3BlcmlvZF9tb2RlXVtpeF07DQorDQorCWNxX21vZGVyLmNxX3BlcmlvZF9tb2RlID0g Y3FfcGVyaW9kX21vZGU7DQorCXJldHVybiBjcV9tb2RlcjsNCit9DQorRVhQT1JUX1NZTUJPTChu ZXRfZGltX2dldF90eF9tb2RlcmF0aW9uKTsNCisNCitzdHJ1Y3QgZGltX2NxX21vZGVyDQorbmV0 X2RpbV9nZXRfZGVmX3R4X21vZGVyYXRpb24odTggY3FfcGVyaW9kX21vZGUpDQorew0KKwl1OCBw cm9maWxlX2l4ID0gY3FfcGVyaW9kX21vZGUgPT0gRElNX0NRX1BFUklPRF9NT0RFX1NUQVJUX0ZS T01fQ1FFID8NCisJCQlORVRfRElNX0RFRl9QUk9GSUxFX0NRRSA6IE5FVF9ESU1fREVGX1BST0ZJ TEVfRVFFOw0KKw0KKwlyZXR1cm4gbmV0X2RpbV9nZXRfdHhfbW9kZXJhdGlvbihjcV9wZXJpb2Rf bW9kZSwgcHJvZmlsZV9peCk7DQorfQ0KK0VYUE9SVF9TWU1CT0wobmV0X2RpbV9nZXRfZGVmX3R4 X21vZGVyYXRpb24pOw0KKw0KK3N0YXRpYyBpbnQgbmV0X2RpbV9zdGVwKHN0cnVjdCBkaW0gKmRp bSkNCit7DQorCWlmIChkaW0tPnRpcmVkID09IChORVRfRElNX1BBUkFNU19OVU1fUFJPRklMRVMg KiAyKSkNCisJCXJldHVybiBESU1fVE9PX1RJUkVEOw0KKw0KKwlzd2l0Y2ggKGRpbS0+dHVuZV9z dGF0ZSkgew0KKwljYXNlIERJTV9QQVJLSU5HX09OX1RPUDoNCisJY2FzZSBESU1fUEFSS0lOR19U SVJFRDoNCisJCWJyZWFrOw0KKwljYXNlIERJTV9HT0lOR19SSUdIVDoNCisJCWlmIChkaW0tPnBy b2ZpbGVfaXggPT0gKE5FVF9ESU1fUEFSQU1TX05VTV9QUk9GSUxFUyAtIDEpKQ0KKwkJCXJldHVy biBESU1fT05fRURHRTsNCisJCWRpbS0+cHJvZmlsZV9peCsrOw0KKwkJZGltLT5zdGVwc19yaWdo dCsrOw0KKwkJYnJlYWs7DQorCWNhc2UgRElNX0dPSU5HX0xFRlQ6DQorCQlpZiAoZGltLT5wcm9m aWxlX2l4ID09IDApDQorCQkJcmV0dXJuIERJTV9PTl9FREdFOw0KKwkJZGltLT5wcm9maWxlX2l4 LS07DQorCQlkaW0tPnN0ZXBzX2xlZnQrKzsNCisJCWJyZWFrOw0KKwl9DQorDQorCWRpbS0+dGly ZWQrKzsNCisJcmV0dXJuIERJTV9TVEVQUEVEOw0KK30NCisNCitzdGF0aWMgdm9pZCBuZXRfZGlt X2V4aXRfcGFya2luZyhzdHJ1Y3QgZGltICpkaW0pDQorew0KKwlkaW0tPnR1bmVfc3RhdGUgPSBk aW0tPnByb2ZpbGVfaXggPyBESU1fR09JTkdfTEVGVCA6IERJTV9HT0lOR19SSUdIVDsNCisJbmV0 X2RpbV9zdGVwKGRpbSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbmV0X2RpbV9zdGF0c19jb21wYXJl KHN0cnVjdCBkaW1fc3RhdHMgKmN1cnIsDQorCQkJCSBzdHJ1Y3QgZGltX3N0YXRzICpwcmV2KQ0K K3sNCisJaWYgKCFwcmV2LT5icG1zKQ0KKwkJcmV0dXJuIGN1cnItPmJwbXMgPyBESU1fU1RBVFNf QkVUVEVSIDogRElNX1NUQVRTX1NBTUU7DQorDQorCWlmIChJU19TSUdOSUZJQ0FOVF9ESUZGKGN1 cnItPmJwbXMsIHByZXYtPmJwbXMpKQ0KKwkJcmV0dXJuIChjdXJyLT5icG1zID4gcHJldi0+YnBt cykgPyBESU1fU1RBVFNfQkVUVEVSIDoNCisJCQkJCQkgICBESU1fU1RBVFNfV09SU0U7DQorDQor CWlmICghcHJldi0+cHBtcykNCisJCXJldHVybiBjdXJyLT5wcG1zID8gRElNX1NUQVRTX0JFVFRF UiA6DQorCQkJCSAgICBESU1fU1RBVFNfU0FNRTsNCisNCisJaWYgKElTX1NJR05JRklDQU5UX0RJ RkYoY3Vyci0+cHBtcywgcHJldi0+cHBtcykpDQorCQlyZXR1cm4gKGN1cnItPnBwbXMgPiBwcmV2 LT5wcG1zKSA/IERJTV9TVEFUU19CRVRURVIgOg0KKwkJCQkJCSAgIERJTV9TVEFUU19XT1JTRTsN CisNCisJaWYgKCFwcmV2LT5lcG1zKQ0KKwkJcmV0dXJuIERJTV9TVEFUU19TQU1FOw0KKw0KKwlp ZiAoSVNfU0lHTklGSUNBTlRfRElGRihjdXJyLT5lcG1zLCBwcmV2LT5lcG1zKSkNCisJCXJldHVy biAoY3Vyci0+ZXBtcyA8IHByZXYtPmVwbXMpID8gRElNX1NUQVRTX0JFVFRFUiA6DQorCQkJCQkJ ICAgRElNX1NUQVRTX1dPUlNFOw0KKw0KKwlyZXR1cm4gRElNX1NUQVRTX1NBTUU7DQorfQ0KKw0K K3N0YXRpYyBib29sIG5ldF9kaW1fZGVjaXNpb24oc3RydWN0IGRpbV9zdGF0cyAqY3Vycl9zdGF0 cywgc3RydWN0IGRpbSAqZGltKQ0KK3sNCisJaW50IHByZXZfc3RhdGUgPSBkaW0tPnR1bmVfc3Rh dGU7DQorCWludCBwcmV2X2l4ID0gZGltLT5wcm9maWxlX2l4Ow0KKwlpbnQgc3RhdHNfcmVzOw0K KwlpbnQgc3RlcF9yZXM7DQorDQorCXN3aXRjaCAoZGltLT50dW5lX3N0YXRlKSB7DQorCWNhc2Ug RElNX1BBUktJTkdfT05fVE9QOg0KKwkJc3RhdHNfcmVzID0gbmV0X2RpbV9zdGF0c19jb21wYXJl KGN1cnJfc3RhdHMsDQorCQkJCQkJICAmZGltLT5wcmV2X3N0YXRzKTsNCisJCWlmIChzdGF0c19y ZXMgIT0gRElNX1NUQVRTX1NBTUUpDQorCQkJbmV0X2RpbV9leGl0X3BhcmtpbmcoZGltKTsNCisJ CWJyZWFrOw0KKw0KKwljYXNlIERJTV9QQVJLSU5HX1RJUkVEOg0KKwkJZGltLT50aXJlZC0tOw0K KwkJaWYgKCFkaW0tPnRpcmVkKQ0KKwkJCW5ldF9kaW1fZXhpdF9wYXJraW5nKGRpbSk7DQorCQli cmVhazsNCisNCisJY2FzZSBESU1fR09JTkdfUklHSFQ6DQorCWNhc2UgRElNX0dPSU5HX0xFRlQ6 DQorCQlzdGF0c19yZXMgPSBuZXRfZGltX3N0YXRzX2NvbXBhcmUoY3Vycl9zdGF0cywNCisJCQkJ CQkgICZkaW0tPnByZXZfc3RhdHMpOw0KKwkJaWYgKHN0YXRzX3JlcyAhPSBESU1fU1RBVFNfQkVU VEVSKQ0KKwkJCWRpbV90dXJuKGRpbSk7DQorDQorCQlpZiAoZGltX29uX3RvcChkaW0pKSB7DQor CQkJZGltX3Bhcmtfb25fdG9wKGRpbSk7DQorCQkJYnJlYWs7DQorCQl9DQorDQorCQlzdGVwX3Jl cyA9IG5ldF9kaW1fc3RlcChkaW0pOw0KKwkJc3dpdGNoIChzdGVwX3Jlcykgew0KKwkJY2FzZSBE SU1fT05fRURHRToNCisJCQlkaW1fcGFya19vbl90b3AoZGltKTsNCisJCQlicmVhazsNCisJCWNh c2UgRElNX1RPT19USVJFRDoNCisJCQlkaW1fcGFya190aXJlZChkaW0pOw0KKwkJCWJyZWFrOw0K KwkJfQ0KKw0KKwkJYnJlYWs7DQorCX0NCisNCisJaWYgKHByZXZfc3RhdGUgIT0gRElNX1BBUktJ TkdfT05fVE9QIHx8DQorCSAgICBkaW0tPnR1bmVfc3RhdGUgIT0gRElNX1BBUktJTkdfT05fVE9Q KQ0KKwkJZGltLT5wcmV2X3N0YXRzID0gKmN1cnJfc3RhdHM7DQorDQorCXJldHVybiBkaW0tPnBy b2ZpbGVfaXggIT0gcHJldl9peDsNCit9DQorDQordm9pZCBuZXRfZGltKHN0cnVjdCBkaW0gKmRp bSwgc3RydWN0IGRpbV9zYW1wbGUgZW5kX3NhbXBsZSkNCit7DQorCXN0cnVjdCBkaW1fc3RhdHMg Y3Vycl9zdGF0czsNCisJdTE2IG5ldmVudHM7DQorDQorCXN3aXRjaCAoZGltLT5zdGF0ZSkgew0K KwljYXNlIERJTV9NRUFTVVJFX0lOX1BST0dSRVNTOg0KKwkJbmV2ZW50cyA9IEJJVF9HQVAoQklU U19QRVJfVFlQRSh1MTYpLA0KKwkJCQkgIGVuZF9zYW1wbGUuZXZlbnRfY3RyLA0KKwkJCQkgIGRp bS0+c3RhcnRfc2FtcGxlLmV2ZW50X2N0cik7DQorCQlpZiAobmV2ZW50cyA8IERJTV9ORVZFTlRT KQ0KKwkJCWJyZWFrOw0KKwkJZGltX2NhbGNfc3RhdHMoJmRpbS0+c3RhcnRfc2FtcGxlLCAmZW5k X3NhbXBsZSwgJmN1cnJfc3RhdHMpOw0KKwkJaWYgKG5ldF9kaW1fZGVjaXNpb24oJmN1cnJfc3Rh dHMsIGRpbSkpIHsNCisJCQlkaW0tPnN0YXRlID0gRElNX0FQUExZX05FV19QUk9GSUxFOw0KKwkJ CXNjaGVkdWxlX3dvcmsoJmRpbS0+d29yayk7DQorCQkJYnJlYWs7DQorCQl9DQorCQkvKiBmYWxs IHRocm91Z2ggKi8NCisJY2FzZSBESU1fU1RBUlRfTUVBU1VSRToNCisJCWRpbV91cGRhdGVfc2Ft cGxlKGVuZF9zYW1wbGUuZXZlbnRfY3RyLCBlbmRfc2FtcGxlLnBrdF9jdHIsDQorCQkJCSAgZW5k X3NhbXBsZS5ieXRlX2N0ciwgJmRpbS0+c3RhcnRfc2FtcGxlKTsNCisJCWRpbS0+c3RhdGUgPSBE SU1fTUVBU1VSRV9JTl9QUk9HUkVTUzsNCisJCWJyZWFrOw0KKwljYXNlIERJTV9BUFBMWV9ORVdf UFJPRklMRToNCisJCWJyZWFrOw0KKwl9DQorfQ0KK0VYUE9SVF9TWU1CT0wobmV0X2RpbSk7DQot LSANCjIuMjEuMA0KDQo=