From: Date: July 3 2009 12:31pm Subject: bzr commit into mysql-5.1-telco-7.1 branch (magnus.blaudd:2931) List-Archive: http://lists.mysql.com/commits/77873 Message-Id: <20090703103138.60AC013405D@pilot> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_PX71XAx1j7YHdDL00kcmmQ)" --Boundary_(ID_PX71XAx1j7YHdDL00kcmmQ) MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-transfer-encoding: BASE64 Content-disposition: inline I0F0IGZpbGU6Ly8vaG9tZS9tc3ZlbnNzb24vbXlzcWwvNy4xLW5kYmluZm8vIGJh c2VkIG9uIHJldmlkOm1hZ251cy5ibGF1ZGRAc3VuLmNvbS0yMDA5MDYyNDIxMzMw Ni10YXA4MmE4cDBoOGduczNpDQoNCiAyOTMxIE1hZ251cyBCbMOldWRkCTIwMDkt MDctMDMNCiAgICAgIG5kYmluZm8NCiAgICAgICAtIGltcHJvdmUgdGhlIG5kYmlu Zm8gdXRpbCBmdW5jdGlvbnMgYW5kIG1vdmUgdGhlbSB0byBzcmMva2VybmVsL3Zt L05kYmluZm8uKg0KICAgICAgIC0gbWFrZSBMb2NhbFByb3h5IHN0YXRlbGVzcyBm b3IgREJJTkZPIHNpZ25hbHMNCiAgICAgICAtIEFkZCBtb3JlIHRlc3RzIHRvIHRl c3ROZGJpbmZvDQogICAgICAgLSBSZW9yZ2FuaXplIHRoZSBmb3JtYXQgb2YgRGJp bmZvU2NhbiBzaWduYWxzIHRvIGJldHRlciBzdWl0ZSB0aGVpciBwdXJwb3NlDQog ICAgICAgLSBNYWtlIHRoZSBjdXJzb3IgaW4gRGJpbmZvU2NhbiB0b3RhbGx5IG9w YXF1ZSB0byBOZGJpbmZvIGFwaQ0KICAgICAgIC0gQWRkIG5kYmluZm9fbWF4X3Jv d3MgYW5kIG5kYmluZm9fbWF4X2J5dGVzIHRvIGhhX25kYmluZm8NCg0KICAgIHJl bW92ZWQ6DQogICAgICBzdG9yYWdlL25kYi9pbmNsdWRlL25kYmluZm8uaA0KICAg ICAgc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi91dGlsL25kYmluZm8uY3BwDQogICAg ICBzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb19o ZWxwZXJzLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3Mv ZGJpbmZvL25kYmluZm9fdGFibGVpZHMuaA0KICAgICAgc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC9ibG9ja3MvZGJpbmZvL25kYmluZm9fdGFibGVzLmgNCiAgICAgIHN0 b3JhZ2UvbmRiL3NyYy9tZ21zcnYvbWdtX25kYmluZm8uY3BwDQogICAgYWRkZWQ6 DQogICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05kYmluZm8uY3BwDQog ICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05kYmluZm8uaHBwDQogICAg bW9kaWZpZWQ6DQogICAgICBteXNxbC10ZXN0L3N1aXRlL25kYi9yL25kYmluZm8u cmVzdWx0DQogICAgICBzcWwvaGFfbmRiY2x1c3Rlci5jYw0KICAgICAgc3FsL2hh X25kYmluZm8uY2MNCiAgICAgIHN0b3JhZ2UvbmRiL2luY2x1ZGUvTWFrZWZpbGUu YW0NCiAgICAgIHN0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3NpZ25hbGRhdGEv RGJpbmZvU2Nhbi5ocHANCiAgICAgIHN0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVs L3NpZ25hbGRhdGEvU2lnbmFsRGF0YS5ocHANCiAgICAgIHN0b3JhZ2UvbmRiL3Ny Yy9jb21tb24vZGVidWdnZXIvc2lnbmFsZGF0YS9EYmluZm9TY2FuLmNwcA0KICAg ICAgc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dlci9zaWduYWxkYXRhL1Np Z25hbERhdGFQcmludC5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9jb21tb24v dXRpbC9NYWtlZmlsZS5hbQ0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9i bG9ja3MvTG9jYWxQcm94eS5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJu ZWwvYmxvY2tzL0xvY2FsUHJveHkuaHBwDQogICAgICBzdG9yYWdlL25kYi9zcmMv a2VybmVsL2Jsb2Nrcy9NYWtlZmlsZS5hbQ0KICAgICAgc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC9ibG9ja3MvYmFja3VwL0JhY2t1cC5jcHANCiAgICAgIHN0b3JhZ2Uv bmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiYWNjL0RiYWNjTWFpbi5jcHANCiAgICAg IHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiZGljdC9EYmRpY3QuY3Bw DQogICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vQ01h a2VMaXN0cy50eHQNCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tz L2RiaW5mby9EYmluZm8uY3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVs L2Jsb2Nrcy9kYmluZm8vRGJpbmZvLmhwcA0KICAgICAgc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC9ibG9ja3MvZGJ0Yy9EYnRjTWFpbi5jcHANCiAgICAgIHN0b3JhZ2Uv bmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidHVwL0RidHVwRGVidWcuY3BwDQogICAg ICBzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnR1eC9EYnR1eERlYnVn LmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ1dGls L0RiVXRpbC5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tz L3N1bWEvU3VtYS5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL3RyaXgvVHJpeC5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwv dm0vTWFrZWZpbGUuYW0NCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0v U2ltdWxhdGVkQmxvY2suY3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVs L3ZtL1NpbXVsYXRlZEJsb2NrLmhwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL21n bXNydi9NYWtlZmlsZS5hbQ0KICAgICAgc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9O ZGJJbmZvLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZv LmhwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvU2Nhbk9w ZXJhdGlvbi5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5m b1NjYW5PcGVyYXRpb24uaHBwDQogICAgICBzdG9yYWdlL25kYi90ZXN0L25kYmFw aS90ZXN0TmRiaW5mby5jcHANCj09PSBtb2RpZmllZCBmaWxlICdteXNxbC10ZXN0 L3N1aXRlL25kYi9yL25kYmluZm8ucmVzdWx0Jw0KLS0tIGEvbXlzcWwtdGVzdC9z dWl0ZS9uZGIvci9uZGJpbmZvLnJlc3VsdAkyMDA5LTA2LTIzIDE0OjA3OjU4ICsw MDAwDQorKysgYi9teXNxbC10ZXN0L3N1aXRlL25kYi9yL25kYmluZm8ucmVzdWx0 CTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC03Myw5ICs3MywxNSBAQCBU QUJMRV9JRAlUQUJMRV9OQU1FCUNSRUFURV9TUUwNCiAJYEZSRUVgIElOVCBVTlNJ R05FRCwNCiAJYFNJWkVgIElOVCBVTlNJR05FRA0KICkgRU5HSU5FPU5EQklORk87 DQorNwlURVNUCUNSRUFURSBUQUJMRSBgVEVTVGAgKA0KKwlgTk9ERV9JRGAgSU5U IFVOU0lHTkVELA0KKwlgQkxPQ0tfTlVNQkVSYCBJTlQgVU5TSUdORUQsDQorCWBC TE9DS19JTlNUQU5DRWAgSU5UIFVOU0lHTkVELA0KKwlgQ09VTlRFUmAgSU5UIFVO U0lHTkVEDQorKSBFTkdJTkU9TkRCSU5GTzsNCiBzZWxlY3QgY291bnQoKikgZnJv bSBUQUJMRVM7DQogY291bnQoKikNCi03DQorOA0KIHNlbGVjdCAqIGZyb20gVEFC TEVTIHdoZXJlIFRBQkxFX0lEID0gMjsNCiBUQUJMRV9JRAlUQUJMRV9OQU1FCUNS RUFURV9TUUwNCiAyCU1FTVVTQUdFCUNSRUFURSBUQUJMRSBgTUVNVVNBR0VgICgN CkBAIC05Nyw2ICsxMDMsMTIgQEAgVEFCTEVfSUQJVEFCTEVfTkFNRQlDUkVBVEVf U1FMDQogCWBGUkVFYCBJTlQgVU5TSUdORUQsDQogCWBTSVpFYCBJTlQgVU5TSUdO RUQNCiApIEVOR0lORT1OREJJTkZPOw0KKzcJVEVTVAlDUkVBVEUgVEFCTEUgYFRF U1RgICgNCisJYE5PREVfSURgIElOVCBVTlNJR05FRCwNCisJYEJMT0NLX05VTUJF UmAgSU5UIFVOU0lHTkVELA0KKwlgQkxPQ0tfSU5TVEFOQ0VgIElOVCBVTlNJR05F RCwNCisJYENPVU5URVJgIElOVCBVTlNJR05FRA0KKykgRU5HSU5FPU5EQklORk87 DQogc2VsZWN0ICogZnJvbSBUQUJMRVMgd2hlcmUgVEFCTEVfTkFNRSA9ICdMT0dE RVNUSU5BVElPTic7DQogVEFCTEVfSUQJVEFCTEVfTkFNRQlDUkVBVEVfU1FMDQog MwlMT0dERVNUSU5BVElPTglDUkVBVEUgVEFCTEUgYExPR0RFU1RJTkFUSU9OYCAo DQpAQCAtMTA4LDcgKzEyMCw3IEBAIFRBQkxFX0lECVRBQkxFX05BTUUJQ1JFQVRF X1NRTA0KICkgRU5HSU5FPU5EQklORk87DQogc2VsZWN0IGNvdW50KCopIGZyb20g VEFCTEVTIHQxLCBUQUJMRVMgdDIgV0hFUkUgdDEuVEFCTEVfSUQgPSB0MS5UQUJM RV9JRDsNCiBjb3VudCgqKQ0KLTQ5DQorNjQNCiB1cGRhdGUgVEFCTEVTIHNldCBU QUJMRV9JRD0yIHdoZXJlIFRBQkxFX0lEPTM7DQogRVJST1IgSFkwMDA6IFRhYmxl IHN0b3JhZ2UgZW5naW5lIGZvciAnVEFCTEVTJyBkb2Vzbid0IGhhdmUgdGhpcyBv cHRpb24NCiBGTFVTSCAgVEFCTEVTOw0KQEAgLTEyMSw1ICsxMzMsNiBAQCBUQUJM RV9JRA0KIDQNCiA1DQogNg0KKzcNCiBkcm9wIHRhYmxlIFRBQkxFUzsNCiBEUk9Q IERBVEFCQVNFIG5kYiRpbmZvOw0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3FsL2hh X25kYmNsdXN0ZXIuY2MnDQotLS0gYS9zcWwvaGFfbmRiY2x1c3Rlci5jYwkyMDA5 LTA2LTE1IDE0OjAxOjAxICswMDAwDQorKysgYi9zcWwvaGFfbmRiY2x1c3Rlci5j YwkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMTM5ODUsNiArMTM5ODUs OCBAQCBzdHJ1Y3Qgc3RfbXlzcWxfc3RvcmFnZV9lbmdpbmUgbmRiY2x1c3RlDQog DQogI2luY2x1ZGUgImhhX25kYmluZm8uaCINCiANCitleHRlcm4gc3RydWN0IHN0 X215c3FsX3N5c192YXIqIG5kYmluZm9fc3lzdGVtX3ZhcmlhYmxlc1tdOw0KKw0K IHN0cnVjdCBzdF9teXNxbF9zdG9yYWdlX2VuZ2luZSBuZGJpbmZvX3N0b3JhZ2Vf ZW5naW5lPQ0KIHsgTVlTUUxfSEFORExFUlRPTl9JTlRFUkZBQ0VfVkVSU0lPTiB9 Ow0KIA0KQEAgLTE0MDE0LDcgKzE0MDE2LDcgQEAgbXlzcWxfZGVjbGFyZV9wbHVn aW4obmRiY2x1c3RlcikNCiAgIG5kYmluZm9fZGVpbml0LCAgICAgICAgICAgICAv KiBwbHVnaW4gZGVpbml0ICovDQogICAweDAwMDEsICAgICAgICAgICAgICAgICAg ICAgLyogcGx1Z2luIHZlcnNpb24gKi8NCiAgIE5VTEwsICAgICAgICAgICAgICAg ICAgICAgICAvKiBzdGF0dXMgdmFyaWFibGVzICovDQotICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgLyogc3lzdGVtIHZhcmlhYmxlcyAqLw0KKyAgbmRiaW5m b19zeXN0ZW1fdmFyaWFibGVzLCAgIC8qIHN5c3RlbSB2YXJpYWJsZXMgKi8NCiAg IE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25maWcgb3B0aW9ucyAq Lw0KIH0NCiBteXNxbF9kZWNsYXJlX3BsdWdpbl9lbmQ7DQoNCj09PSBtb2RpZmll ZCBmaWxlICdzcWwvaGFfbmRiaW5mby5jYycNCi0tLSBhL3NxbC9oYV9uZGJpbmZv LmNjCTIwMDktMDYtMjQgMDg6Mzk6MDkgKzAwMDANCisrKyBiL3NxbC9oYV9uZGJp bmZvLmNjCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0yMCw2ICsyMCwz MiBAQA0KICNpbmNsdWRlICJoYV9uZGJpbmZvLmgiDQogI2luY2x1ZGUgIi4uL3N0 b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mby5ocHAiDQogDQorDQorc3RhdGlj IE1ZU1FMX1RIRFZBUl9VSU5UKA0KKyAgbWF4X3Jvd3MsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBuYW1lICovDQorICBQTFVHSU5fVkFSX1JRQ01EQVJHLA0K KyAgIlNwZWNpZnkgbWF4IG51bWJlciBvZiByb3dzIHRvIGZldGNoIHBlciByb3Vu ZHRyaXAgdG8gY2x1c3RlciIsDQorICBOVUxMLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGNoZWNrIGZ1bmMuICovDQorICBOVUxMLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHVwZGF0ZSBmdW5jLiAqLw0KKyAgMTAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovDQorICAx LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pbiAqLw0KKyAg MjU2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXggKi8NCisg IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2sgKi8N CispOw0KKw0KK3N0YXRpYyBNWVNRTF9USERWQVJfVUlOVCgNCisgIG1heF9ieXRl cywgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmFtZSAqLw0KKyAgUExVR0lO X1ZBUl9SUUNNREFSRywNCisgICJTcGVjaWZ5IGFwcHJveC4gbWF4IG51bWJlciBv ZiBieXRlcyB0byBmZXRjaCBwZXIgcm91bmR0cmlwIHRvIGNsdXN0ZXIiLA0KKyAg TlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayBmdW5j LiAqLw0KKyAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1 cGRhdGUgZnVuYy4gKi8NCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogZGVmYXVsdCAqLw0KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBtaW4gKi8NCisgIDY1NTM1LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogbWF4ICovDQorICAwICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGJsb2NrICovDQorKTsNCisNCisNCiBzdGF0aWMgTmRi SW5mbyogZ19uZGJpbmZvOw0KIA0KIGV4dGVybiBOZGJfY2x1c3Rlcl9jb25uZWN0 aW9uKiBnX25kYl9jbHVzdGVyX2Nvbm5lY3Rpb247DQpAQCAtOTIsNiArMTE4LDE2 IEBAIGludCBoYV9uZGJpbmZvOjpvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGkNCiB7 DQogICBEQlVHX0VOVEVSKCJoYV9uZGJpbmZvOjpvcGVuIik7DQogICBEQlVHX1BS SU5UKCJlbnRlciIsICgibmFtZTogJXMsIG1vZGU6ICVkIiwgbmFtZSwgbW9kZSkp Ow0KKw0KKyAgaWYgKCFnX25kYmluZm8pDQorICB7DQorICAgIHB1c2hfd2Fybmlu ZyhjdXJyZW50X3RoZCwgTVlTUUxfRVJST1I6OldBUk5fTEVWRUxfTk9URSwgMSwN CisgICAgICAgICAgICAgICAgICJDYW4ndCBvcGVuIHRhYmxlIC0gJ25kYmluZm8n IGhhcyBiZWVuIHN0YXJ0ZWQgIg0KKyAgICAgICAgICAgICAgICAgImluIGxpbWl0 ZWQgbW9kZSBiZWNhdXNlIHRoZSAnbmRiY2x1c3RlcicgIg0KKyAgICAgICAgICAg ICAgICAgImVuZ2luZSBpcyBkaXNhYmxlZCIpOw0KKyAgICBEQlVHX1JFVFVSTihI QV9FUlJfV1JPTkdfQ09NTUFORCk7DQorICB9DQorDQogICBhc3NlcnQoaXNfY2xv c2VkKCkpOw0KIA0KICAgaW50IGVyciA9IGdfbmRiaW5mby0+b3BlblRhYmxlKG5h bWUsICZtX2ltcGwubV90YWJsZSk7DQpAQCAtMTIzLDEwICsxNTksMTQgQEAgaW50 IGhhX25kYmluZm86OnJuZF9pbml0KGJvb2wgc2NhbikNCiAgIERCVUdfUFJJTlQo ImluZm8iLCAoInNjYW46ICVkIiwgc2NhbikpOw0KICAgYXNzZXJ0KGlzX29wZW4o KSk7DQogICBhc3NlcnQobV9pbXBsLm1fc2Nhbl9vcCA9PSBOVUxMKTsgLy8gTm8g c2NhbiBhbHJlYWR5IG9uZ29pbmcNCisgIFRIRCogdGhkID0gY3VycmVudF90aGQ7 DQogDQogICBpbnQgZXJyOw0KICAgTmRiSW5mb1NjYW5PcGVyYXRpb24qIHNjYW5f b3AgPSBOVUxMOw0KLSAgaWYgKChlcnIgPSBnX25kYmluZm8tPmNyZWF0ZVNjYW5P cGVyYXRpb24obV9pbXBsLm1fdGFibGUsICZzY2FuX29wKSkgIT0gMCkNCisgIGlm ICgoZXJyID0gZ19uZGJpbmZvLT5jcmVhdGVTY2FuT3BlcmF0aW9uKG1faW1wbC5t X3RhYmxlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnNjYW5fb3AsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUSERWQVIodGhkLCBtYXhfcm93cyksDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSERWQVIodGhkLCBt YXhfYnl0ZXMpKSkgIT0gMCkNCiAgICAgREJVR19SRVRVUk4oZXJyMm15c3FsKGVy cikpOw0KIA0KICAgaWYgKChlcnIgPSBzY2FuX29wLT5yZWFkVHVwbGVzKCkpICE9 IDApDQpAQCAtMjc4LDEyICszMTgsMTAgQEAgaW50IG5kYmluZm9faW5pdCh2b2lk ICpwbHVnaW4pDQogICAvKiBDaGVjayBpZiAnbmRiY2x1c3Rlcl9pbml0JyBoYXMg YmVlbiBydW4gYW5kIGNvbm5lY3RlZCB0byBjbHVzdGVyICovDQogICBpZiAoIWdf bmRiX2NsdXN0ZXJfY29ubmVjdGlvbikNCiAgIHsNCi0gICAgc3FsX3ByaW50X3dh cm5pbmcoIkRpc2FibGluZyAnbmRiaW5mbycgYmVjYXVzZSAnbmRiY2x1c3Rlcicg aXMgIg0KLSAgICAgICAgICAgICAgICAgICAgICAibm90IHN0YXJ0ZWQiKTsNCi0g ICAgLy8gaHRvbi0+c3RhdGUgPSBTSE9XX09QVElPTl9ESVNBQkxFRDsNCi0gICAg Ly8gVE9ETyBeIHRoaXMgZG9lcyBub3QgbWFyayB0aGUgZW5naW5lIGFzIGRpc2Fi bGVkDQotICAgIC8vIFdyaXRlIHNtYWxsIHBhdGNoIGZvciBNeVNRTCBTZXJ2ZXIg YWxsb3dpbmcgYW4gZW5naW5lIHRvIGRpc2FibGUgaXRzZWxmPw0KLSAgICBEQlVH X1JFVFVSTigxKTsNCisgICAgc3FsX3ByaW50X3dhcm5pbmcoIlN0YXJ0aW5nICdu ZGJpbmZvJyBpbiBsaW1pdGVkIG1vZGUgIg0KKyAgICAgICAgICAgICAgICAgICAg ICAiYmVjYXVzZSAnbmRiY2x1c3RlcicgZW5naW5lIGlzIGRpc2FibGVkIik7DQor DQorICAgIERCVUdfUkVUVVJOKDApOw0KICAgfQ0KIA0KICAgYm9vbCB1c2VfbG93 ZXJfY2FzZSA9IChsb3dlcl9jYXNlX3RhYmxlX25hbWVzICE9IDApOw0KQEAgLTMy Niw0ICszNjQsMTEgQEAgaW50IG5kYmluZm9fZGVpbml0KHZvaWQgKnBsdWdpbikN CiAgIERCVUdfUkVUVVJOKDApOw0KIH0NCiANCitzdHJ1Y3Qgc3RfbXlzcWxfc3lz X3ZhciogbmRiaW5mb19zeXN0ZW1fdmFyaWFibGVzW109IHsNCisgIE1ZU1FMX1NZ U1ZBUihtYXhfcm93cyksDQorICBNWVNRTF9TWVNWQVIobWF4X2J5dGVzKSwNCisN CisgIE5VTEwNCit9Ow0KKw0KIHRlbXBsYXRlIGNsYXNzIFZlY3Rvcjxjb25zdCBO ZGJJbmZvUmVjQXR0cio+Ow0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9u ZGIvaW5jbHVkZS9NYWtlZmlsZS5hbScNCi0tLSBhL3N0b3JhZ2UvbmRiL2luY2x1 ZGUvTWFrZWZpbGUuYW0JMjAwOS0wNS0yNyAxNToyMTo0NSArMDAwMA0KKysrIGIv c3RvcmFnZS9uZGIvaW5jbHVkZS9NYWtlZmlsZS5hbQkyMDA5LTA3LTAzIDEwOjMx OjMwICswMDAwDQpAQCAtMjAsOCArMjAsNyBAQCBuZGJpbmNsdWRlX0hFQURFUlMg PSBcDQogbmRiX2NvbnN0YW50cy5oIFwNCiBuZGJfaW5pdC5oIFwNCiBuZGJfdHlw ZXMuaCBcDQotbmRiX3ZlcnNpb24uaCBcDQotbmRiaW5mby5oDQorbmRiX3ZlcnNp b24uaA0KIA0KIG5kYmFwaWluY2x1ZGVfSEVBREVSUyA9IFwNCiBuZGJhcGkvbmRi YXBpX2xpbWl0cy5oIFwNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRi L2luY2x1ZGUva2VybmVsL3NpZ25hbGRhdGEvRGJpbmZvU2Nhbi5ocHAnDQotLS0g YS9zdG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9zaWduYWxkYXRhL0RiaW5mb1Nj YW4uaHBwCTIwMDktMDYtMjQgMjE6MzM6MDYgKzAwMDANCisrKyBiL3N0b3JhZ2Uv bmRiL2luY2x1ZGUva2VybmVsL3NpZ25hbGRhdGEvRGJpbmZvU2Nhbi5ocHAJMjAw OS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTIwLDEyMyArMjAsNTYgQEANCiAN CiBzdHJ1Y3QgRGJpbmZvU2NhbkN1cnNvcg0KIHsNCi0gIFVpbnQzMiBjdXJfcmVx dWVzdEluZm87DQotICBVaW50MzIgY3VyX25vZGU7DQotICBVaW50MzIgY3VyX2Js b2NrOw0KLSAgVWludDMyIGN1cl9pdGVtOw0KKyAgVWludDMyIGRhdGFbMTFdOw0K IH07DQogDQotY2xhc3MgRGJpbmZvU2NhblJlcTsNCi1leHRlcm4gIkMiIHZvaWQg ZGJpbmZvX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0ICpy bCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IERiaW5mb1NjYW5SZXEgKik7DQotDQotY2xhc3MgRGJpbmZvU2NhblJlcQ0KK3N0 cnVjdCBEYmluZm9TY2FuDQogew0KLSAgLyogUmVjaXZlcihzKSAqLw0KLSAgZnJp ZW5kIGNsYXNzIEJhY2t1cDsNCi0gIGZyaWVuZCBjbGFzcyBEYmFjYzsNCi0gIGZy aWVuZCBjbGFzcyBEYmRpY3Q7DQotICBmcmllbmQgY2xhc3MgRGJpbmZvOw0KLSAg ZnJpZW5kIGNsYXNzIERidGM7DQotICBmcmllbmQgY2xhc3MgRGJ0dXA7DQotICBm cmllbmQgY2xhc3MgRGJ0dXg7DQotICBmcmllbmQgY2xhc3MgRGJVdGlsOw0KLSAg ZnJpZW5kIGNsYXNzIExvY2FsUHJveHk7DQotICBmcmllbmQgY2xhc3MgUW1ncjsN Ci0gIGZyaWVuZCBjbGFzcyBTdW1hOw0KLSAgZnJpZW5kIGNsYXNzIFRyaXg7DQot DQotICBmcmllbmQgdm9pZCBkYmluZm9fcmF0ZWxpbWl0X2luaXQoc3RydWN0IGRi aW5mb19yYXRlbGltaXQgKnJsLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IERiaW5mb1NjYW5SZXEgKnIpOw0KLQ0KLSAgLyogU2Vu ZGVyKHMpICovDQotICBmcmllbmQgY2xhc3MgTmRiSW5mb1NjYW5PcGVyYXRpb247 DQotDQotICBmcmllbmQgYm9vbCBwcmludERCSU5GT19TQ0FOX1JFUShGSUxFICog b3V0cHV0LCBjb25zdCBVaW50MzIgKiB0aGVEYXRhLA0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVWludDMyIGxlbiwgVWludDE2IHJlY2VpdmVy QmxvY2tObyk7DQotDQogICBTVEFUSUNfQ09OU1QoIFNpZ25hbExlbmd0aCA9IDEy ICk7DQotICBTVEFUSUNfQ09OU1QoIFNpZ25hbExlbmd0aFdpdGhDdXJzb3IgPSAx NiApOw0KIA0KLSAgVWludDMyIHRhYmxlSWQ7ICAgICAgICAgLy8gREJJTkZPIHRh YmxlIElEDQotICBVaW50MzIgYXBpUmVmOyAgICAgICAgICAvLyBBUEkgZG9pbmcg c2Nhbg0KLSAgVWludDMyIGFwaVR4bklkOyAgICAgICAgLy8gSUQgdW5pcXVlIHRv IEFQSS4NCi0gIFVpbnQzMiBzZW5kZXJSZWY7ICAgICAgIC8vIFNlbmRlciwgREJJ TkZPIG9yIHByb3h5IGZvciBtdWx0aS10aHJlYWRlZCBibG9jaw0KLSAgVWludDMy IGluc3RhbmNlOyAgICAgICAgLy8gQmxvY2sgaW5zdGFuY2UgZm9yIG11bHRpLXRo cmVhZGVkIGJsb2NrDQotICBVaW50MzIgY29sQml0bWFwTG87ICAgICAvLyBiaXRt YXAgb2Ygd2hhdCBjb2x1bW5zIHlvdSB3YW50LiAoNjRiaXQpDQotICBVaW50MzIg Y29sQml0bWFwSGk7DQotICBVaW50MzIgcmVxdWVzdEluZm87ICAgICAvLyBzdGFy dCwgZW5kb2ZkYXRhDQotDQotICBTVEFUSUNfQ09OU1QoIFN0YXJ0U2NhbiAgPSAw eDEgKTsNCi0NCi0gIFVpbnQzMiBtYXhSb3dzOw0KLSAgVWludDMyIG1heEJ5dGVz Ow0KLSAgVWludDMyIHJvd3NfdG90YWw7DQotICBVaW50MzIgd29yZF90b3RhbDsN CisgIC8vIEFQSSBpZGVudGlmaWVycw0KKyAgVWludDMyIHJlc3VsdERhdGE7ICAg ICAgLy8gV2lsbCBiZSByZXR1cm5lZCBpbiBUcmFuc0lkQUk6OmNvbm5lY3RQdHIN CisgIFVpbnQzMiB0cmFuc0lkWzJdOyAgICAgIC8vIElEIHVuaXF1ZSB0byBBUEkN CisgIFVpbnQzMiByZXN1bHRSZWY7ICAgICAgIC8vIFdoZXJlIHRvIHNlbmQgcmVz dWx0IHJvd3MNCiANCisgIC8vIFBhcmFtZXRlcnMgZm9yIHRoZSBzY2FuDQorICBV aW50MzIgdGFibGVJZDsgICAgICAgICAvLyBEQklORk8gdGFibGUgSUQNCisgIFVp bnQzMiBjb2xCaXRtYXBbMl07ICAgICAvLyBiaXRtYXAgb2Ygd2hhdCBjb2x1bW5z IHlvdSB3YW50LiAoNjRiaXQpDQorICBVaW50MzIgcmVxdWVzdEluZm87ICAgICAv LyBmbGFncw0KKyAgVWludDMyIG1heFJvd3M7ICAgICAgICAgLy8gTWF4IG51bWJl ciBvZiByb3dzIHRvIHJldHVybiBwZXIgUkVRDQorICBVaW50MzIgbWF4Qnl0ZXM7 ICAgICAgICAvLyBNYXggbnVtYmVyIG9mIGJ5dGVzIHRvIHJldHVybiBwZXIgUkVR DQorDQorICAvLyBSZXN1bHQgZnJvbSB0aGUgc2Nhbg0KKyAgVWludDMyIHJldHVy bmVkUm93czsgICAgLy8gTnVtYmVyIG9mIHJvd3MgcmV0dXJuZWQgZm9yIHRoaXMg Q09ORg0KKw0KKyAgLy8gQ3Vyc29yIHRoYXQgY29udGFpbnMgZGF0YSB1c2VkIGJ5 IHRoZSBrZXJuZWwgZm9yIGtlZXBpbmcgdHJhY2sNCisgIC8vIG9mIHdoZXJlIGl0 IGlzLCBob3cgbWFueSBieXRlcyBvciByb3dzIGl0IGhhcyBzZW50IGV0Yy4NCisg IC8vIFNldCB0byB6ZXJvIGluIGxhc3QgQ09ORiB0byBpbmRpY2F0ZSB0aGF0IHNj YW4gaXMgZmluaXNoZWQNCisgIFVpbnQzMiBjdXJzb3Jfc3o7DQorICAvLyBDdXJz b3IgZGF0YSBvZiBjdXJzb3Jfc3ogc2l6ZSBmb2xsb3dzDQogICBEYmluZm9TY2Fu Q3Vyc29yIGN1cnNvcjsNCi19Ow0KLQ0KIA0KLWNsYXNzIERiaW5mb1NjYW5Db25m IHsNCi0gIC8qIFJlY2l2ZXIocykgKi8NCi0gIGZyaWVuZCBjbGFzcyBOZGJJbmZv U2Nhbk9wZXJhdGlvbjsNCi0NCi0gIC8qIFNlbmRlcihzKSAqLw0KLSAgZnJpZW5k IGNsYXNzIEJhY2t1cDsNCi0gIGZyaWVuZCBjbGFzcyBEYmFjYzsNCi0gIGZyaWVu ZCBjbGFzcyBEYmRpY3Q7DQotICBmcmllbmQgY2xhc3MgRGJpbmZvOw0KLSAgZnJp ZW5kIGNsYXNzIERidGM7DQotICBmcmllbmQgY2xhc3MgRGJ0dXA7DQotICBmcmll bmQgY2xhc3MgRGJ0dXg7DQotICBmcmllbmQgY2xhc3MgRGJVdGlsOw0KLSAgZnJp ZW5kIGNsYXNzIExvY2FsUHJveHk7DQotICBmcmllbmQgY2xhc3MgUW1ncjsNCi0g IGZyaWVuZCBjbGFzcyBTdW1hOw0KLSAgZnJpZW5kIGNsYXNzIFRyaXg7DQorICBz dGF0aWMgY29uc3QgVWludDMyKiBnZXRDdXJzb3JQdHIoY29uc3QgRGJpbmZvU2Nh biogc2lnKSB7DQorICAgIHJldHVybiBzaWctPmN1cnNvci5kYXRhOw0KKyAgfQ0K KyAgc3RhdGljIFVpbnQzMiogZ2V0Q3Vyc29yUHRyU2VuZChEYmluZm9TY2FuKiBz aWcpIHsNCisgICAgcmV0dXJuIHNpZy0+Y3Vyc29yLmRhdGE7DQorICB9DQogDQot ICBmcmllbmQgYm9vbCBwcmludERCSU5GT19TQ0FOX0NPTkYoRklMRSAqIG91dHB1 dCwgY29uc3QgVWludDMyICogdGhlRGF0YSwNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBVaW50MzIgbGVuLCBVaW50MTYgcmVjZWl2ZXJCbG9j a05vKTsNCi0NCi0gIFNUQVRJQ19DT05TVCggRG9uZUxlbmd0aCA9IDMgKTsNCi0g IFNUQVRJQ19DT05TVCggU2lnbmFsTGVuZ3RoID0gMTIgKTsNCi0gIFNUQVRJQ19D T05TVCggU2lnbmFsTGVuZ3RoV2l0aEN1cnNvciA9IDE2ICk7DQotDQotICBVaW50 MzIgdGFibGVJZDsgICAgICAgICAvLyBEQklORk8gdGFibGUgSUQNCi0gIFVpbnQz MiBhcGlSZWY7ICAgICAgICAgIC8vIEFQSSBkb2luZyBzY2FuDQotICBVaW50MzIg YXBpVHhuSWQ7ICAgICAgICAvLyBJRCB1bmlxdWUgdG8gQVBJLg0KLSAgVWludDMy IHNlbmRlclJlZjsgICAgICAgLy8gU2VuZGVyIG9mIERCSU5GT19TQ0FOUkVRDQot ICBVaW50MzIgaW5zdGFuY2U7ICAgICAgICAvLyBCbG9jayBpbnN0YW5jZSBmb3Ig bXVsdGktdGhyZWFkZWQgYmxvY2sNCi0gIFVpbnQzMiBjb2xCaXRtYXBMbzsgICAg IC8vIGJpdG1hcCBvZiB3aGF0IGNvbHVtbnMgeW91IHdhbnQuICg2NGJpdCkNCi0g IFVpbnQzMiBjb2xCaXRtYXBIaTsNCi0gIFVpbnQzMiByZXF1ZXN0SW5mbzsgICAg IC8vIHN0YXJ0LCBlbmRvZmRhdGENCi0NCi0gIFNUQVRJQ19DT05TVCggTW9yZURh dGEgID0gMHgxICk7DQotDQotICBVaW50MzIgbWF4Um93czsNCi0gIFVpbnQzMiBt YXhCeXRlczsNCi0gIFVpbnQzMiByb3dzX3RvdGFsOw0KLSAgVWludDMyIHdvcmRf dG90YWw7DQotDQotICBEYmluZm9TY2FuQ3Vyc29yIGN1cnNvcjsNCiB9Ow0KIA0K K3R5cGVkZWYgRGJpbmZvU2NhbiBEYmluZm9TY2FuUmVxOw0KK3R5cGVkZWYgRGJp bmZvU2NhbiBEYmluZm9TY2FuQ29uZjsNCiANCi1jbGFzcyBEYmluZm9TY2FuUmVm IHsNCi0gIC8qIFJlY2l2ZXIocykgKi8NCi0gIGZyaWVuZCBjbGFzcyBOZGJJbmZv U2Nhbk9wZXJhdGlvbjsNCi0NCi0gIC8qIFNlbmRlcihzKSAqLw0KLSAgZnJpZW5k IGNsYXNzIERiaW5mbzsNCi0gIGZyaWVuZCBjbGFzcyBMb2NhbFByb3h5Ow0KLQ0K LSAgZnJpZW5kIGJvb2wgcHJpbnREQklORk9fU0NBTl9SRUYoRklMRSAqIG91dHB1 dCwgY29uc3QgVWludDMyICogdGhlRGF0YSwNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFVpbnQzMiBsZW4sIFVpbnQxNiByZWNlaXZlckJsb2Nr Tm8pOw0KK3N0cnVjdCBEYmluZm9TY2FuUmVmDQorew0KKyAgU1RBVElDX0NPTlNU KCBTaWduYWxMZW5ndGggPSA1ICk7DQogDQotICBTVEFUSUNfQ09OU1QoIFNpZ25h bExlbmd0aCA9IDIgKTsNCisgIC8vIEFQSSBpZGVudGlmaWVycw0KKyAgVWludDMy IHJlc3VsdERhdGE7ICAgICAgLy8gV2lsbCBiZSByZXR1cm5lZCBpbiBUcmFuc0lk QUk6OmNvbm5lY3RQdHINCisgIFVpbnQzMiB0cmFuc0lkWzJdOyAgICAgIC8vIElE IHVuaXF1ZSB0byBBUEkNCisgIFVpbnQzMiByZXN1bHRSZWY7ICAgICAgIC8vIFdo ZXJlIHRvIHNlbmQgcmVzdWx0IHJvd3MNCiANCi0gIFVpbnQzMiB0YWJsZUlkOyAg ICAgICAgIC8vIERCSU5GTyB0YWJsZSBJRA0KICAgVWludDMyIGVycm9yQ29kZTsg ICAgICAgLy8gRXJyb3IgQ29kZQ0KICAgZW51bSBFcnJvckNvZGUNCiAgIHsNCg0K PT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3Np Z25hbGRhdGEvU2lnbmFsRGF0YS5ocHAnDQotLS0gYS9zdG9yYWdlL25kYi9pbmNs dWRlL2tlcm5lbC9zaWduYWxkYXRhL1NpZ25hbERhdGEuaHBwCTIwMDktMDYtMTUg MTM6MTI6MTkgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVs L3NpZ25hbGRhdGEvU2lnbmFsRGF0YS5ocHAJMjAwOS0wNy0wMyAxMDozMTozMCAr MDAwMA0KQEAgLTI3OSw4ICsyNzksNyBAQCBHU05fUFJJTlRfU0lHTkFUVVJFKHBy aW50QlVJTERfSU5EWF9JTVBMDQogR1NOX1BSSU5UX1NJR05BVFVSRShwcmludEFQ SV9WRVJTSU9OX1JFUSk7DQogR1NOX1BSSU5UX1NJR05BVFVSRShwcmludEFQSV9W RVJTSU9OX0NPTkYpOw0KIA0KLUdTTl9QUklOVF9TSUdOQVRVUkUocHJpbnREQklO Rk9fU0NBTl9SRVEpOw0KLUdTTl9QUklOVF9TSUdOQVRVUkUocHJpbnREQklORk9f U0NBTl9DT05GKTsNCitHU05fUFJJTlRfU0lHTkFUVVJFKHByaW50REJJTkZPX1ND QU4pOw0KIEdTTl9QUklOVF9TSUdOQVRVUkUocHJpbnREQklORk9fU0NBTl9SRUYp Ow0KIA0KICNlbmRpZg0KDQo9PT0gcmVtb3ZlZCBmaWxlICdzdG9yYWdlL25kYi9p bmNsdWRlL25kYmluZm8uaCcNCi0tLSBhL3N0b3JhZ2UvbmRiL2luY2x1ZGUvbmRi aW5mby5oCTIwMDktMDYtMjQgMjE6MzM6MDYgKzAwMDANCisrKyBiL3N0b3JhZ2Uv bmRiL2luY2x1ZGUvbmRiaW5mby5oCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAN CkBAIC0xLDEzOSArMCwwIEBADQotLyogQ29weXJpZ2h0IChDKSAyMDA3IE15U1FM IEFCDQotDQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCi0gICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQ0KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZS4NCi0NCi0gICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwN Ci0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZg0KLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCi0gICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KLQ0KLSAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlDQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCi0gICBGb3VuZGF0 aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBN QSAgMDIxMTEtMTMwNyAgVVNBICovDQotDQotI2luY2x1ZGUgPG5kYl90eXBlcy5o Pg0KLQ0KLSNpZm5kZWYgX19OREJJTkZPX0hfXw0KLSNkZWZpbmUgX19OREJJTkZP X0hfXw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNl bmRpZg0KLQ0KLSNkZWZpbmUgTkRCSU5GT19UWVBFX1NUUklORyAxDQotI2RlZmlu ZSBOREJJTkZPX1RZUEVfTlVNQkVSIDINCi0NCi1zdHJ1Y3QgbmRiaW5mb19jb2x1 bW4gew0KLSAgY2hhciBuYW1lWzUwXTsNCi0gIGludCBjb2x0eXBlOw0KLX07DQot DQotI2RlZmluZSBOREJJTkZPX1RBQkxFX01FTUJFUlMgXA0KLSAgY2hhciBuYW1l WzUwXTsgXA0KLSAgaW50IG5jb2xzOyBcDQotICBpbnQgZmxhZ3M7DQotDQotc3Ry dWN0IG5kYmluZm9fdGFibGUgew0KLSAgTkRCSU5GT19UQUJMRV9NRU1CRVJTDQot ICBzdHJ1Y3QgbmRiaW5mb19jb2x1bW4gY29sWzFdOw0KLX07DQotDQotI2RlZmlu ZSBERUNMQVJFX05EQklORk9fVEFCTEUodmFyLCBudW0pICAgICAgICAgXA0KLXN0 cnVjdCBuZGJpbmZvc3RydWN0IyN2YXIgeyAgICAgICAgICAgICAgICAgICAgIFwN Ci0gIE5EQklORk9fVEFCTEVfTUVNQkVSUyAgICAgICAgICAgICAgICAgICAgICAg ICBcDQotICBzdHJ1Y3QgbmRiaW5mb19jb2x1bW4gY29sW251bV07ICAgICAgICAg ICAgICAgXA0KLX0gdmFyDQotDQotaW50IG5kYmluZm9fY3JlYXRlX3NxbChzdHJ1 Y3QgbmRiaW5mb190YWJsZSAqdCwgY2hhciogc3FsLCBpbnQgbGVuKTsNCi0NCi1z dGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIG5kYmluZm9fY29sdHlwZV90b19zdHJp bmcoaW50IGNvbHR5cGUpDQotew0KLSAgc3RhdGljIGNvbnN0IGNoYXIqIG5kYmlu Zm9fdHlwZV9zdHJpbmdbXT0geyJOT05FIiwNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiVkFSQ0hBUig1MTIpIiwNCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5UIFVO U0lHTkVEIg0KLSAgfTsNCi0NCi0gIGlmKGNvbHR5cGU+MykNCi0gICAgY29sdHlw ZT0gMDsNCi0NCi0gIHJldHVybiBuZGJpbmZvX3R5cGVfc3RyaW5nW2NvbHR5cGVd Ow0KLX0NCi0NCi1zdHJ1Y3QgZGJpbmZvX3JvdyB7DQotICBVaW50MzIqIGJ1Zjsg ICAgICAvLyBTdGFydCBvZiByb3cgYnVmZmVyDQotICBVaW50MzIqIGN1cnI7ICAg ICAvLyBDdXJyZW50IHBvc2l0aW9uIGluIHJvdyBidWZmZXINCi0gIFVpbnQzMiog ZW5kOyAgICAgIC8vIExhc3QgcG9zaXRpb24gaW4gYnVmZmVyDQotICBpbnQgY29s X2NvdW50OyAgICAvLyBDdXJyZW50IGNvbHVtbiBjb3VudGVyDQotDQotICBVaW50 MzIgc2l6ZSh2b2lkKSBjb25zdCB7DQotICAgIHJldHVybiAoVWludDMyKShjdXJy IC0gYnVmKTsNCi0gIH07DQotfTsNCi0NCi12b2lkIGRiaW5mb193cml0ZV9yb3df aW5pdChzdHJ1Y3QgZGJpbmZvX3JvdyAqciwgY2hhciogYnVmLCBpbnQgbGVuKTsN Ci0NCi1pbnQgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oc3RydWN0IGRiaW5mb19y b3cgKnIsIGNvbnN0IGNoYXIqIGNvbCwgaW50IGNsZW4pOw0KLQ0KLWludCBkYmlu Zm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoc3RydWN0IGRiaW5mb19yb3cgKnIs IFVpbnQzMiB2YWx1ZSk7DQotDQotLyoNCi0gKiBXZSBuZWVkIHRvIGNhbGwgcHJv dGVjdGVkIGZ1bmN0aW9uIG9mIFNpbXVsYXRlZEJsb2NrIChzZW5kU2lnbmFsKQ0K LSAqIHNvIGVhc2llciB0byBpbXBsZW1lbnQgYXMgbWFjcm8uLi4NCi0gKi8NCi0j ZGVmaW5lIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCBhcGlUeG5JZCwg c2VuZGVyUmVmKSAgICAgICAgICAgICBcDQotICBkbyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXA0KLSAgVHJhbnNJZEFJICp0aWRhaT0gKFRyYW5zSWRBSSopc2lnbmFsLT5n ZXREYXRhUHRyU2VuZCgpOyAgICAgICAgICAgICAgIFwNCi0gIHRpZGFpLT5jb25u ZWN0UHRyPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcDQotICB0aWRhaS0+dHJhbnNJZFswXT0gYXBpVHhuSWQ7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgdGlk YWktPnRyYW5zSWRbMV09IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwNCi0gIExpbmVhclNlY3Rpb25QdHIgcHRyWzNd OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc DQotICBwdHJbMF0ucCA9IHIuYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgcHRyWzBdLnN6ID0gci5z aXplKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwNCi0gIHJsLnJvd3MrKzsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICBybC5ieXRl cyArPSByLnNpemUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXA0KLSAgc2VuZFNpZ25hbChzZW5kZXJSZWYsIEdTTl9E QklORk9fVFJBTlNJRF9BSSwgc2lnbmFsLCAzLCBKQkIsIHB0ciwgMSk7IFwNCi19 IHdoaWxlICgwKQ0KLQ0KLSNkZWZpbmUgZGJpbmZvX3JhdGVsaW1pdF9zZW5kY29u ZihzaWduYWwsIHJlcSwgcmwsIGl0ZW1udW1iZXIpICAgICAgICAgIFwNCi0gIGRv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcDQotICBEYmluZm9TY2FuQ29uZiAqY29uZj0g KERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7ICAgICAg XA0KLSAgY29uZi0+dGFibGVJZD0gKHJlcSkudGFibGVJZDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIGNvbmYtPnNlbmRlclJl Zj0gKHJlcSkuc2VuZGVyUmVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcDQotICBjb25mLT5hcGlUeG5JZD0gKHJlcSkuYXBpVHhuSWQ7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgY29uZi0+ Y29sQml0bWFwTG89IChyZXEpLmNvbEJpdG1hcExvOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCi0gIGNvbmYtPmNvbEJpdG1hcEhpPSAocmVxKS5j b2xCaXRtYXBIaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQot ICBjb25mLT5yZXF1ZXN0SW5mbz0gKHJlcSkucmVxdWVzdEluZm8gfCBEYmluZm9T Y2FuQ29uZjo6TW9yZURhdGE7ICAgICAgXA0KLSAgY29uZi0+Y3Vyc29yLmN1cl9y ZXF1ZXN0SW5mbz0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwNCi0gIGNvbmYtPmN1cnNvci5jdXJfbm9kZT0gZ2V0T3duTm9kZUlkKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICBjb25mLT5jdXJz b3IuY3VyX2Jsb2NrPSBudW1iZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KLSAgY29uZi0+Y3Vyc29yLmN1cl9pdGVtPSAoaXRlbW51 bWJlcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIGNv bmYtPm1heFJvd3M9IChybCkubWF4Um93czsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcDQotICBjb25mLT5tYXhCeXRlcz0gKHJsKS5t YXhCeXRlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XA0KLSAgY29uZi0+cm93c190b3RhbD0gKHJsKS5yb3dzX3RvdGFsICsgKHJsKS5y b3dzOyAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIGNvbmYtPndvcmRfdG90 YWw9IChybCkuYnl0ZXNfdG90YWwrIChybCkuYnl0ZXM7ICAgICAgICAgICAgICAg ICAgICAgICBcDQotICBzZW5kU2lnbmFsKChyZXEpLnNlbmRlclJlZiwgR1NOX0RC SU5GT19TQ0FOQ09ORiwgc2lnbmFsLCAgICAgICAgICAgICAgXA0KLSAgICAgICAg ICAgICBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJC KTsgICAgICAgICAgICAgIFwNCi19IHdoaWxlICgwKQ0KLQ0KLQ0KLXN0cnVjdCBk YmluZm9fcmF0ZWxpbWl0IHsNCi0gIFVpbnQzMiBtYXhSb3dzOw0KLSAgVWludDMy IG1heEJ5dGVzOw0KLSAgVWludDMyIHJvd3NfdG90YWw7DQotICBVaW50MzIgYnl0 ZXNfdG90YWw7DQotICBVaW50MzIgcm93czsNCi0gIFVpbnQzMiBieXRlczsNCi19 Ow0KLQ0KLWNsYXNzIERiaW5mb1NjYW5SZXE7DQotdm9pZCBkYmluZm9fcmF0ZWxp bWl0X2luaXQoc3RydWN0IGRiaW5mb19yYXRlbGltaXQgKnJsLCBjb25zdCBEYmlu Zm9TY2FuUmVxICopOw0KLQ0KLWludCBkYmluZm9fcmF0ZWxpbWl0X2NvbnRpbnVl KHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0ICpybCk7DQotDQotI2lmZGVmIF9fY3Bs dXNwbHVzDQotfQ0KLSNlbmRpZg0KLQ0KLSNlbmRpZg0KDQo9PT0gbW9kaWZpZWQg ZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dlci9zaWduYWxkYXRh L0RiaW5mb1NjYW4uY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi9k ZWJ1Z2dlci9zaWduYWxkYXRhL0RiaW5mb1NjYW4uY3BwCTIwMDktMDYtMjQgMjE6 Mjc6MDEgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vZGVidWdn ZXIvc2lnbmFsZGF0YS9EYmluZm9TY2FuLmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMw ICswMDAwDQpAQCAtMTksNTEgKzE5LDQzIEBADQogI2luY2x1ZGUgPHNpZ25hbGRh dGEvRGJpbmZvU2Nhbi5ocHA+DQogDQogYm9vbA0KLXByaW50REJJTkZPX1NDQU5f UkVRKEZJTEUqIG91dHB1dCwgY29uc3QgVWludDMyKiB0aGVEYXRhLCBVaW50MzIg bGVuLCBVaW50MTYpDQorcHJpbnREQklORk9fU0NBTihGSUxFKiBvdXRwdXQsIGNv bnN0IFVpbnQzMiogdGhlRGF0YSwgVWludDMyIGxlbiwgVWludDE2KQ0KIHsNCi0g IGNvbnN0IERiaW5mb1NjYW5SZXEqIHNpZyA9IChjb25zdCBEYmluZm9TY2FuUmVx Kil0aGVEYXRhOw0KLSAgZnByaW50ZihvdXRwdXQsICIgdGFibGVJZDogJXUiLCBz aWctPnRhYmxlSWQpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgYXBpUmVmOiAweCV4 Iiwgc2lnLT5hcGlSZWYpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgYXBpVHhuSWQ6 ICV1Iiwgc2lnLT5hcGlUeG5JZCk7DQotICBmcHJpbnRmKG91dHB1dCwgIiBzZW5k ZXJSZWY6IDB4JXgiLCBzaWctPnNlbmRlclJlZik7DQotICBmcHJpbnRmKG91dHB1 dCwgIiBpbnN0YW5jZTogJXUiLCBzaWctPmluc3RhbmNlKTsNCi0gIGZwcmludGYo b3V0cHV0LCAiIGNvbEJpdG1hcExvOiAweCV4Iiwgc2lnLT5jb2xCaXRtYXBMbyk7 DQotICBmcHJpbnRmKG91dHB1dCwgIiBjb2xCaXRtYXBIaTogMHgleCIsIHNpZy0+ Y29sQml0bWFwSGkpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgcmVxdWVzdEluZm86 ICV1Iiwgc2lnLT5yZXF1ZXN0SW5mbyk7DQotICBmcHJpbnRmKG91dHB1dCwgIlxu Iik7DQotICBmcHJpbnRmKG91dHB1dCwgIiBtYXhSb3dzOiAldSIsIHNpZy0+bWF4 Um93cyk7DQotICBmcHJpbnRmKG91dHB1dCwgIiBtYXhCeXRlczogJXUiLCBzaWct Pm1heEJ5dGVzKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHJvd3NfdG90YWw6ICV1 Iiwgc2lnLT5yb3dzX3RvdGFsKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHdvcmRf dG90YWw6ICV1Iiwgc2lnLT53b3JkX3RvdGFsKTsNCisgIGNvbnN0IERiaW5mb1Nj YW4qIHNpZyA9IChjb25zdCBEYmluZm9TY2FuKil0aGVEYXRhOw0KKyAgZnByaW50 ZihvdXRwdXQsICIgcmVzdWx0RGF0YTogMHgleCIsIHNpZy0+cmVzdWx0RGF0YSk7 DQorICBmcHJpbnRmKG91dHB1dCwgIiB0cmFuc2lkOiB7IDB4JXgsIDB4JXh9Iiwg c2lnLT50cmFuc0lkWzBdLCBzaWctPnRyYW5zSWRbMV0pOw0KKyAgZnByaW50Zihv dXRwdXQsICIgcmVzdWx0UmVmOiAweCV4Iiwgc2lnLT5yZXN1bHRSZWYpOw0KICAg ZnByaW50ZihvdXRwdXQsICJcbiIpOw0KLSAgcmV0dXJuIHRydWU7DQotfQ0KLQ0K LWJvb2wNCi1wcmludERCSU5GT19TQ0FOX0NPTkYoRklMRSogb3V0cHV0LCBjb25z dCBVaW50MzIqIHRoZURhdGEsIFVpbnQzMiBsZW4sIFVpbnQxNikNCi17DQotICBj b25zdCBEYmluZm9TY2FuQ29uZiogc2lnID0gKGNvbnN0IERiaW5mb1NjYW5Db25m Kil0aGVEYXRhOw0KICAgZnByaW50ZihvdXRwdXQsICIgdGFibGVJZDogJXUiLCBz aWctPnRhYmxlSWQpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgYXBpUmVmOiAweCV4 Iiwgc2lnLT5hcGlSZWYpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgYXBpVHhuSWQ6 ICV1Iiwgc2lnLT5hcGlUeG5JZCk7DQotICBmcHJpbnRmKG91dHB1dCwgIiBzZW5k ZXJSZWY6IDB4JXgiLCBzaWctPnNlbmRlclJlZik7DQotICBmcHJpbnRmKG91dHB1 dCwgIiBpbnN0YW5jZTogJXUiLCBzaWctPmluc3RhbmNlKTsNCi0gIGZwcmludGYo b3V0cHV0LCAiIGNvbEJpdG1hcExvOiAweCV4Iiwgc2lnLT5jb2xCaXRtYXBMbyk7 DQotICBmcHJpbnRmKG91dHB1dCwgIiBjb2xCaXRtYXBIaTogMHgleCIsIHNpZy0+ Y29sQml0bWFwSGkpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgcmVxdWVzdEluZm86 ICV1Iiwgc2lnLT5yZXF1ZXN0SW5mbyk7DQorICBmcHJpbnRmKG91dHB1dCwgIiBj b2xCaXRtYXA6IHsgMHgleCwgMHgleCB9IiwNCisgICAgICAgICAgc2lnLT5jb2xC aXRtYXBbMF0sIHNpZy0+Y29sQml0bWFwWzFdKTsNCisgIGZwcmludGYob3V0cHV0 LCAiIHJlcXVlc3RJbmZvOiAweCV4Iiwgc2lnLT5yZXF1ZXN0SW5mbyk7DQogICBm cHJpbnRmKG91dHB1dCwgIlxuIik7DQogICBmcHJpbnRmKG91dHB1dCwgIiBtYXhS b3dzOiAldSIsIHNpZy0+bWF4Um93cyk7DQogICBmcHJpbnRmKG91dHB1dCwgIiBt YXhCeXRlczogJXUiLCBzaWctPm1heEJ5dGVzKTsNCi0gIGZwcmludGYob3V0cHV0 LCAiIHJvd3NfdG90YWw6ICV1Iiwgc2lnLT5yb3dzX3RvdGFsKTsNCi0gIGZwcmlu dGYob3V0cHV0LCAiIHdvcmRfdG90YWw6ICV1Iiwgc2lnLT53b3JkX3RvdGFsKTsN CiAgIGZwcmludGYob3V0cHV0LCAiXG4iKTsNCisgIGZwcmludGYob3V0cHV0LCAi IHJldHVybmVkUm93czogJXUiLCBzaWctPnJldHVybmVkUm93cyk7DQorICBmcHJp bnRmKG91dHB1dCwgIlxuIik7DQorICBmcHJpbnRmKG91dHB1dCwgIiBjdXJzb3Jf c3o6ICV1XG4iLCBzaWctPmN1cnNvcl9zeik7DQorICBjb25zdCBVaW50MzIqIGN1 cnNvcl9kYXRhID0gRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKHNpZyk7DQorICBm cHJpbnRmKG91dHB1dCwgIiBzZW5kZXJSZWY6IDB4JXggc2F2ZVNlbmRlclJlZjog MHgleFxuIiwNCisgICAgICAgICAgY3Vyc29yX2RhdGFbMF0sIGN1cnNvcl9kYXRh WzFdKTsNCisgIGZwcmludGYob3V0cHV0LCAiIGN1cnJSZWY6IDB4JXggc2F2ZUN1 cnJSZWY6IDB4JXggZmxhZ3M6IDB4JXhcbiIsDQorICAgICAgICAgIGN1cnNvcl9k YXRhWzJdLCBjdXJzb3JfZGF0YVszXSwgY3Vyc29yX2RhdGFbNF0pOw0KKyAgZnBy aW50ZihvdXRwdXQsICIgZGF0YTogWyAweCV4LCAweCV4LCAweCV4LCAweCV4IF1c biIsDQorICAgICAgICAgIGN1cnNvcl9kYXRhWzVdLCBjdXJzb3JfZGF0YVs2XSwg Y3Vyc29yX2RhdGFbN10sIGN1cnNvcl9kYXRhWzhdKTsNCisgIGZwcmludGYob3V0 cHV0LCAiIHRvdGFsUm93czogJXUgdG90YWxCeXRlczogJXVcbiIsDQorICAgICAg ICAgIGN1cnNvcl9kYXRhWzldLCBjdXJzb3JfZGF0YVsxMF0pOw0KICAgcmV0dXJu IHRydWU7DQogfQ0KIA0KIGJvb2wgcHJpbnREQklORk9fU0NBTl9SRUYoRklMRSog b3V0cHV0LCBjb25zdCBVaW50MzIqIHRoZURhdGEsIFVpbnQzMiBsZW4sIFVpbnQx NikNCiB7DQogICBjb25zdCBEYmluZm9TY2FuUmVmKiBzaWcgPSAoY29uc3QgRGJp bmZvU2NhblJlZiopdGhlRGF0YTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHRhYmxl SWQ6ICV1Iiwgc2lnLT50YWJsZUlkKTsNCisgIGZwcmludGYob3V0cHV0LCAiIHJl c3VsdERhdGE6IDB4JXgiLCBzaWctPnJlc3VsdERhdGEpOw0KKyAgZnByaW50Zihv dXRwdXQsICIgdHJhbnNpZDogeyAweCV4LCAweCV4fSIsIHNpZy0+dHJhbnNJZFsw XSwgc2lnLT50cmFuc0lkWzFdKTsNCisgIGZwcmludGYob3V0cHV0LCAiIHJlc3Vs dFJlZjogMHgleCIsIHNpZy0+cmVzdWx0UmVmKTsNCisgIGZwcmludGYob3V0cHV0 LCAiXG4iKTsNCiAgIGZwcmludGYob3V0cHV0LCAiIGVycm9yQ29kZTogJXUiLCBz aWctPmVycm9yQ29kZSk7DQogICBmcHJpbnRmKG91dHB1dCwgIlxuIik7DQogICBy ZXR1cm4gdHJ1ZTsNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3Ny Yy9jb21tb24vZGVidWdnZXIvc2lnbmFsZGF0YS9TaWduYWxEYXRhUHJpbnQuY3Bw Jw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dlci9zaWduYWxk YXRhL1NpZ25hbERhdGFQcmludC5jcHAJMjAwOS0wNi0xNSAxMzoxMjoxOSArMDAw MA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dlci9zaWduYWxk YXRhL1NpZ25hbERhdGFQcmludC5jcHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAw MA0KQEAgLTI1MSw4ICsyNTEsOCBAQCBTaWduYWxEYXRhUHJpbnRGdW5jdGlvbnNb XSA9IHsNCiAgICx7IEdTTl9BUElfVkVSU0lPTl9SRVEsIHByaW50QVBJX1ZFUlNJ T05fUkVRIH0NCiAgICx7IEdTTl9BUElfVkVSU0lPTl9DT05GLCBwcmludEFQSV9W RVJTSU9OX0NPTkYgfQ0KIA0KLSAgLHsgR1NOX0RCSU5GT19TQ0FOUkVRLCBwcmlu dERCSU5GT19TQ0FOX1JFUSB9DQotICAseyBHU05fREJJTkZPX1NDQU5DT05GLCBw cmludERCSU5GT19TQ0FOX0NPTkYgfQ0KKyAgLHsgR1NOX0RCSU5GT19TQ0FOUkVR LCBwcmludERCSU5GT19TQ0FOIH0NCisgICx7IEdTTl9EQklORk9fU0NBTkNPTkYs IHByaW50REJJTkZPX1NDQU4gfQ0KICAgLHsgR1NOX0RCSU5GT19TQ0FOUkVGLCBw cmludERCSU5GT19TQ0FOX1JFRiB9DQogDQogICAseyAwLCAwIH0NCg0KPT09IG1v ZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vdXRpbC9NYWtlZmls ZS5hbScNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vdXRpbC9NYWtlZmls ZS5hbQkyMDA5LTA2LTIzIDExOjU1OjQxICswMDAwDQorKysgYi9zdG9yYWdlL25k Yi9zcmMvY29tbW9uL3V0aWwvTWFrZWZpbGUuYW0JMjAwOS0wNy0wMyAxMDozMToz MCArMDAwMA0KQEAgLTI4LDggKzI4LDcgQEAgbGliZ2VuZXJhbF9sYV9TT1VSQ0VT ID0gXA0KICAgICAgICAgICAgIHN0cmR1cC5jIFwNCiAgICAgICAgICAgICBDb25m aWdWYWx1ZXMuY3BwIG5kYl9pbml0LmNwcCBiYXNlc3RyaW5nX3ZzbnByaW50Zi5j IFwNCiAgICAgICAgICAgICBCaXRtYXNrLmNwcCBcDQotCSAgICBuZGJfcmFuZC5j IFwNCi0JICAgIG5kYmluZm8uY3BwDQorCSAgICBuZGJfcmFuZC5jIA0KIA0KIElO Q0xVREVTX0xPQyA9IEBaTElCX0lOQ0xVREVTQA0KIA0KDQo9PT0gcmVtb3ZlZCBm aWxlICdzdG9yYWdlL25kYi9zcmMvY29tbW9uL3V0aWwvbmRiaW5mby5jcHAnDQot LS0gYS9zdG9yYWdlL25kYi9zcmMvY29tbW9uL3V0aWwvbmRiaW5mby5jcHAJMjAw OS0wNi0yMyAxMTo1NTo0MSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2Nv bW1vbi91dGlsL25kYmluZm8uY3BwCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAN CkBAIC0xLDU0ICswLDAgQEANCi0vKiBDb3B5cmlnaHQgKEMpIDIwMDcgTXlTUUwg QUINCi0NCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5DQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVy c2lvbiAyIG9mIHRoZSBMaWNlbnNlLg0KLQ0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0K LSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mDQotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KLSAgIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQotDQotICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UNCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KLSAgIEZvdW5kYXRp b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1B ICAwMjExMS0xMzA3ICBVU0EgKi8NCi0NCi0jaW5jbHVkZSA8c3RkaW8uaD4NCi0j aW5jbHVkZSA8c3RyaW5nLmg+DQotI2luY2x1ZGUgPGVycm5vLmg+DQotDQotI2lu Y2x1ZGUgPG5kYl9nbG9iYWwuaD4NCi0jaW5jbHVkZSA8bXlfYmFzZS5oPg0KLSNp bmNsdWRlIDxtX3N0cmluZy5oPiAvKiBmb3IgbXlfc25wcmludGYgKi8NCi0NCi0j aW5jbHVkZSA8bmRiaW5mby5oPg0KLQ0KLWludCBuZGJpbmZvX2NyZWF0ZV9zcWwo c3RydWN0IG5kYmluZm9fdGFibGUgKnQsIGNoYXIqIHNxbCwgaW50IGxlbikNCi17 DQotICBpbnQgaTsNCi0NCi0gIG15X3NucHJpbnRmKHNxbCxsZW4sIkNSRUFURSBU QUJMRSBgJXNgICgiLCB0LT5uYW1lKTsNCi0NCi0gIGxlbi09c3RybGVuKHNxbCk7 DQotICBzcWwrPXN0cmxlbihzcWwpOw0KLSAgaWYobGVuPDApDQotICAgIHJldHVy biBFTk9NRU07DQotDQotICBmb3IoaT0wO2k8dC0+bmNvbHM7aSsrKQ0KLSAgew0K LSAgICBteV9zbnByaW50ZihzcWwsbGVuLCJcblx0YCVzYCAlcywiLA0KLSAgICAg ICAgICAgICB0LT5jb2xbaV0ubmFtZSwgbmRiaW5mb19jb2x0eXBlX3RvX3N0cmlu Zyh0LT5jb2xbaV0uY29sdHlwZSkpOw0KLSAgICBsZW4tPXN0cmxlbihzcWwpOw0K LSAgICBzcWwrPXN0cmxlbihzcWwpOw0KLSAgICBpZihsZW48MCkNCi0gICAgICBy ZXR1cm4gRU5PTUVNOw0KLSAgfQ0KLSAgKigtLXNxbCk9J1wwJzsNCi0gIG15X3Nu cHJpbnRmKHNxbCxsZW4sIlxuKSBFTkdJTkU9TkRCSU5GTzsiKTsNCi0gIGxlbi09 c3RybGVuKHNxbCk7DQotICBzcWwrPXN0cmxlbihzcWwpOw0KLSAgaWYobGVuPDAp DQotICAgIHJldHVybiBFTk9NRU07DQotDQotICByZXR1cm4gMDsNCi19DQoNCj09 PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9M b2NhbFByb3h5LmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL0xvY2FsUHJveHkuY3BwCTIwMDktMDYtMjQgMjE6Mjc6MDEgKzAwMDANCisr KyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL0xvY2FsUHJveHkuY3Bw CTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC05NzcsNjcgKzk3NywxNDEg QEAgTG9jYWxQcm94eTo6c2VuZERST1BfVFJJR19JTVBMX0NPTkYoU2lnbg0KIA0K IC8vIEdTTl9EQklORk9fU0NBTlJFUQ0KIA0KLXZvaWQNCi1Mb2NhbFByb3h5Ojpl eGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsKiBzaWduYWwpDQorYm9vbA0KK0xvY2Fs UHJveHk6OmZpbmRfbmV4dChOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IpIGNv bnN0DQogew0KLSAgU3NfREJJTkZPX1NDQU5SRVEmIHNzID0gc3NTZWl6ZTxTc19E QklORk9fU0NBTlJFUT4oMSk7DQorICBqYW0oKTsNCisgIGNvbnN0IFVpbnQzMiBu b2RlID0gcmVmVG9Ob2RlKGN1cnNvci0+Y3VyclJlZik7DQorICBjb25zdCBVaW50 MzIgYmxvY2sgPSByZWZUb01haW4oY3Vyc29yLT5jdXJyUmVmKTsNCisgIFVpbnQz MiBpbnN0YW5jZSA9IHJlZlRvSW5zdGFuY2UoY3Vyc29yLT5jdXJyUmVmKTsNCiAN Ci0gIGNvbnN0IERiaW5mb1NjYW5SZXEqIHJlcSA9IChjb25zdCBEYmluZm9TY2Fu UmVxKilzaWduYWwtPmdldERhdGFQdHIoKTsNCi0gIHNzLm1fcmVxID0gKnJlcTsN Ci0gIG5kYnJlcXVpcmUoc2lnbmFsLT5nZXRMZW5ndGgoKSA9PSBEYmluZm9TY2Fu UmVxOjpTaWduYWxMZW5ndGggfHwNCi0gICAgICAgICAgICAgc2lnbmFsLT5nZXRM ZW5ndGgoKSA9PSBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29y KTsNCi0gIHNzLm1fbGVuID0gc2lnbmFsLT5nZXRMZW5ndGgoKTsNCi0gIHNlbmRS RVEoc2lnbmFsLCBzcyk7DQotfQ0KKyAgbmRicmVxdWlyZShub2RlID09IGdldE93 bk5vZGVJZCgpKTsNCisgIG5kYnJlcXVpcmUoYmxvY2sgPT0gbnVtYmVyKCkpOw0K IA0KLXZvaWQNCi1Mb2NhbFByb3h5OjpleGVjREJJTkZPX1NDQU5DT05GKFNpZ25h bCogc2lnbmFsKQ0KLXsNCi0gIFNzX0RCSU5GT19TQ0FOUkVRJiBzcyA9IHNzRmlu ZDxTc19EQklORk9fU0NBTlJFUT4oMSk7DQotICByZWN2Q09ORihzaWduYWwsIHNz KTsNCisgIGlmIChpbnN0YW5jZSsrIDwgY193b3JrZXJzKQ0KKyAgew0KKyAgICBj dXJzb3ItPmN1cnJSZWYgPSBudW1iZXJUb1JlZihibG9jaywgaW5zdGFuY2UsIG5v ZGUpOw0KKyAgICByZXR1cm4gdHJ1ZTsNCisgIH0NCisNCisgIGN1cnNvci0+Y3Vy clJlZiA9IG51bWJlclRvUmVmKGJsb2NrLCBub2RlKTsNCisgIHJldHVybiBmYWxz ZTsNCiB9DQogDQorDQorDQogdm9pZA0KLUxvY2FsUHJveHk6OnNlbmREQklORk9f U0NBTlJFUShTaWduYWwqIHNpZ25hbCwgVWludDMyIHNzSWQpDQorTG9jYWxQcm94 eTo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCogc2lnbmFsKQ0KIHsNCi0gIFNz X0RCSU5GT19TQ0FOUkVRJiBzcyA9IHNzRmluZDxTc19EQklORk9fU0NBTlJFUT4o c3NJZCk7DQorICBqYW1FbnRyeSgpOw0KKyAgY29uc3QgRGJpbmZvU2NhblJlcSog cmVxID0gKGNvbnN0IERiaW5mb1NjYW5SZXEqKSBzaWduYWwtPmdldERhdGFQdHIo KTsNCisgIFVpbnQzMiBzaWduYWxfbGVuZ3RoID0gc2lnbmFsLT5nZXRMZW5ndGgo KTsNCisgIG5kYnJlcXVpcmUoc2lnbmFsX2xlbmd0aCA9PSBEYmluZm9TY2FuUmVx OjpTaWduYWxMZW5ndGgrcmVxLT5jdXJzb3Jfc3opOw0KKw0KKyAgTmRiaW5mbzo6 U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNjYW5DdXJzb3Iq KURiaW5mb1NjYW46OmdldEN1cnNvclB0cihyZXEpOw0KKw0KKyAgaWYgKE5kYmlu Zm86OlNjYW5DdXJzb3I6OmdldEhhc01vcmVEYXRhKGN1cnNvci0+ZmxhZ3MpICYm DQorICAgICAgY3Vyc29yLT5zYXZlQ3VyclJlZikNCisgIHsNCisgICAgLyogQ29u dGludWUgaW4gdGhlIHNhdmVkIGJsb2NrIHJlZiAqLw0KKyAgICBjdXJzb3ItPmN1 cnJSZWYgPSBjdXJzb3ItPnNhdmVDdXJyUmVmOw0KKyAgICBjdXJzb3ItPnNhdmVD dXJyUmVmID0gMDsNCisNCisgICAgLy8gU2V0IHRoaXMgYmxvY2sgYXMgc2VuZGVy IGFuZCByZW1lbWJlciBvcmlnaW5hbCBzZW5kZXINCisgICAgY3Vyc29yLT5zYXZl U2VuZGVyUmVmID0gY3Vyc29yLT5zZW5kZXJSZWY7DQorICAgIGN1cnNvci0+c2Vu ZGVyUmVmID0gcmVmZXJlbmNlKCk7DQorDQorICAgIHNlbmRTaWduYWwoY3Vyc29y LT5jdXJyUmVmLCBHU05fREJJTkZPX1NDQU5SRVEsDQorICAgICAgICAgICAgICAg c2lnbmFsLCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KKyAgICByZXR1cm47DQorICB9 DQorDQorICBOZGJpbmZvOjpTY2FuQ3Vyc29yOjpzZXRIYXNNb3JlRGF0YShjdXJz b3ItPmZsYWdzLCBmYWxzZSk7DQogDQotICBEYmluZm9TY2FuUmVxKiByZXEgPSAo RGJpbmZvU2NhblJlcSopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgKnJl cSA9IHNzLm1fcmVxOw0KLSAgcmVxLT5zZW5kZXJSZWYgPSByZWZlcmVuY2UoKTsN Ci0gIHJlcS0+aW5zdGFuY2UgPSBzcy5tX3dvcmtlcjsNCi0gIHNlbmRTaWduYWwo d29ya2VyUmVmKHNzLm1fd29ya2VyKSwgR1NOX0RCSU5GT19TQ0FOUkVRLA0KLSAg ICAgICAgICAgICBzaWduYWwsIHNzLm1fbGVuLCBKQkIpOw0KKyAgaWYgKGZpbmRf bmV4dChjdXJzb3IpKQ0KKyAgew0KKyAgICBqYW0oKTsNCisgICAgbmRicmVxdWly ZShjdXJzb3ItPmN1cnJSZWYpOw0KKyAgICBuZGJyZXF1aXJlKGN1cnNvci0+c2F2 ZUN1cnJSZWYgPT0gMCk7DQorDQorICAgIC8vIFNldCB0aGlzIGJsb2NrIGFzIHNl bmRlciBhbmQgcmVtZW1iZXIgb3JpZ2luYWwgc2VuZGVyDQorICAgIGN1cnNvci0+ c2F2ZVNlbmRlclJlZiA9IGN1cnNvci0+c2VuZGVyUmVmOw0KKyAgICBjdXJzb3It PnNlbmRlclJlZiA9IHJlZmVyZW5jZSgpOw0KKw0KKyAgICBzZW5kU2lnbmFsKGN1 cnNvci0+Y3VyclJlZiwgR1NOX0RCSU5GT19TQ0FOUkVRLA0KKyAgICAgICAgICAg ICAgIHNpZ25hbCwgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCisgICAgcmV0dXJuOw0K KyAgfQ0KKw0KKyAgLyogU2NhbiBpcyBkb25lLCBzZW5kIFNDQU5DT05GIGJhY2sg dG8gY2FsbGVyICAqLw0KKw0KKyAgLyogU3dhcCBiYWNrIHNhdmVkIHNlbmRlclJl ZiAqLw0KKyAgY29uc3QgVWludDMyIHNlbmRlclJlZiA9IGN1cnNvci0+c2VuZGVy UmVmID0gY3Vyc29yLT5zYXZlU2VuZGVyUmVmOw0KKyAgY3Vyc29yLT5zYXZlU2Vu ZGVyUmVmID0gMDsNCisNCisgIG5kYnJlcXVpcmUoY3Vyc29yLT5jdXJyUmVmKTsN CisgIG5kYnJlcXVpcmUoY3Vyc29yLT5zYXZlQ3VyclJlZiA9PSAwKTsNCisNCisg IG5kYnJlcXVpcmUocmVmVG9JbnN0YW5jZShjdXJzb3ItPmN1cnJSZWYpID09IDAp Ow0KKyAgc2VuZFNpZ25hbChjdXJzb3ItPnNlbmRlclJlZiwgR1NOX0RCSU5GT19T Q0FOQ09ORiwgc2lnbmFsLCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KKyAgcmV0dXJu Ow0KIH0NCiANCiB2b2lkDQotTG9jYWxQcm94eTo6c2VuZERCSU5GT19TQ0FOQ09O RihTaWduYWwqIHNpZ25hbCwgVWludDMyIHNzSWQpDQorTG9jYWxQcm94eTo6ZXhl Y0RCSU5GT19TQ0FOQ09ORihTaWduYWwqIHNpZ25hbCkNCiB7DQotICBTc19EQklO Rk9fU0NBTlJFUSYgc3MgPSBzc0ZpbmQ8U3NfREJJTkZPX1NDQU5SRVE+KHNzSWQp Ow0KKyAgamFtRW50cnkoKTsNCiAgIGNvbnN0IERiaW5mb1NjYW5Db25mKiBjb25m ID0gKGNvbnN0IERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHIoKTsN Ci0gIGNvbnN0IFVpbnQzMiByZXFsZW5ndGggPSBzaWduYWwtPmdldExlbmd0aCgp Ow0KLSAgaWYgKCFsYXN0UmVwbHkoc3MpKQ0KLSAgICByZXR1cm47DQorICBVaW50 MzIgc2lnbmFsX2xlbmd0aCA9IHNpZ25hbC0+Z2V0TGVuZ3RoKCk7DQorICBuZGJy ZXF1aXJlKHNpZ25hbF9sZW5ndGggPT0gRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExl bmd0aCtjb25mLT5jdXJzb3Jfc3opOw0KIA0KLSAgaWYgKHNzLm1fZXJyb3IgPT0g MCkNCisgIE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChOZGJp bmZvOjpTY2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoY29uZik7 DQorDQorICBpZiAoTmRiaW5mbzo6U2NhbkN1cnNvcjo6Z2V0SGFzTW9yZURhdGEo Y3Vyc29yLT5mbGFncykpDQogICB7DQorICAgIC8qIFRoZSB1bmRlcmx5aW5nIGJs b2NrIHdhbnQgdG8gY29udGludWUgKi8NCiAgICAgamFtKCk7DQotICAgIERiaW5m b1NjYW5Db25mICpjb25mID0gKERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdldERh dGFQdHJTZW5kKCk7DQotICAgIG1lbWNweShjb25mLCZzcy5tX3JlcSwgcmVxbGVu Z3RoICogc2l6ZW9mKFVpbnQzMikpOw0KLSAgICBjb25mLT5yZXF1ZXN0SW5mbyAm PSB+KERiaW5mb1NjYW5Db25mOjpNb3JlRGF0YSk7DQotICAgIHNlbmRTaWduYWwo c3MubV9yZXEuc2VuZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05GLA0KLSAgICAg ICAgICAgICAgIHNpZ25hbCwgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0aFdp dGhDdXJzb3IsIEpCQik7DQotICB9DQotICBlbHNlDQorICAgIA0KKyAgICAvKiBT d2FwIGJhY2sgc2F2ZWQgc2VuZGVyUmVmICovDQorICAgIGNvbnN0IFVpbnQzMiBz ZW5kZXJSZWYgPSBjdXJzb3ItPnNlbmRlclJlZiA9IGN1cnNvci0+c2F2ZVNlbmRl clJlZjsNCisgICAgY3Vyc29yLT5zYXZlU2VuZGVyUmVmID0gMDsNCisNCisgICAg LyogU2F2ZSBjdXJyUmVmIHRvIGNvbnRpbnVlIHdpdGggc2FtZSBpbnN0YW5jZSBh Z2FpbiAqLw0KKyAgICBjdXJzb3ItPnNhdmVDdXJyUmVmID0gY3Vyc29yLT5jdXJy UmVmOw0KKyAgICBjdXJzb3ItPmN1cnJSZWYgPSByZWZlcmVuY2UoKTsNCisNCisg ICAgc2VuZFNpZ25hbChzZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsIHNp Z25hbCwgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCisgICAgcmV0dXJuOw0KKyAgfSAN CisgIA0KKyAgLyogVGhlIHVuZGVybHlpbmcgYmxvY2sgcmVwb3J0ZWQgY29tcGxl dGVkLCBmaW5kIG5leHQgaWYgYW55ICovDQorICBpZiAoZmluZF9uZXh0KGN1cnNv cikpDQogICB7DQogICAgIGphbSgpOw0KLSAgICBEYmluZm9TY2FuUmVmICpyZWYg PSAoRGJpbmZvU2NhblJlZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAg ICByZWYtPnRhYmxlSWQgPSBjb25mLT50YWJsZUlkOw0KLSAgICByZWYtPmVycm9y Q29kZSA9IHNzLm1fZXJyb3I7DQotICAgIHNlbmRTaWduYWwoc3MubV9yZXEuc2Vu ZGVyUmVmLCBHU05fREJJTkZPX1NDQU5SRUYsIHNpZ25hbCwNCi0gICAgICAgICAg ICAgICBEYmluZm9TY2FuUmVmOjpTaWduYWxMZW5ndGgsIEpCQik7DQorDQorICAg IG5kYnJlcXVpcmUoY3Vyc29yLT5zZW5kZXJSZWYgPT0gcmVmZXJlbmNlKCkpOw0K KyAgICBuZGJyZXF1aXJlKGN1cnNvci0+c2F2ZVNlbmRlclJlZik7IC8vIFNob3Vs ZCBhbHJlYWR5IGJlIHNldA0KKw0KKyAgICBuZGJyZXF1aXJlKGN1cnNvci0+c2F2 ZUN1cnJSZWYgPT0gMCk7DQorDQorICAgIHNlbmRTaWduYWwoY3Vyc29yLT5jdXJy UmVmLCBHU05fREJJTkZPX1NDQU5SRVEsDQorICAgICAgICAgICAgICAgc2lnbmFs LCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KKyAgICByZXR1cm47DQogICB9DQotICBz c1JlbGVhc2U8U3NfREJJTkZPX1NDQU5SRVE+KHNzSWQpOw0KKw0KKyAgLyogU2Nh biBpbiB0aGlzIGJsb2NrIGFuZCBpdHMgaW5zdGFuY2VzIGFyZSBjb21wbGV0ZWQg Ki8NCisNCisgIC8qIFN3YXAgYmFjayBzYXZlZCBzZW5kZXJSZWYgKi8NCisgIGNv bnN0IFVpbnQzMiBzZW5kZXJSZWYgPSBjdXJzb3ItPnNlbmRlclJlZiA9IGN1cnNv ci0+c2F2ZVNlbmRlclJlZjsNCisgIGN1cnNvci0+c2F2ZVNlbmRlclJlZiA9IDA7 DQorDQorICBuZGJyZXF1aXJlKGN1cnNvci0+Y3VyclJlZik7DQorICBuZGJyZXF1 aXJlKGN1cnNvci0+c2F2ZUN1cnJSZWYgPT0gMCk7DQorDQorICBzZW5kU2lnbmFs KHNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLCBzaWduYWxf bGVuZ3RoLCBKQkIpOw0KKyAgcmV0dXJuOw0KIH0NCiANCiBCTE9DS19GVU5DVElP TlMoTG9jYWxQcm94eSkNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvYmxvY2tzL0xvY2FsUHJveHkuaHBwJw0KLS0tIGEvc3RvcmFn ZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvTG9jYWxQcm94eS5ocHAJMjAwOS0wNi0x NSAxMzozMTozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9i bG9ja3MvTG9jYWxQcm94eS5ocHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0K QEAgLTU1NiwyMyArNTU2LDkgQEAgcHJvdGVjdGVkOg0KICAgdm9pZCBzZW5kRFJP UF9UUklHX0lNUExfQ09ORihTaWduYWwqLCBVaW50MzIgc3NJZCk7DQogDQogICAv LyBHU05fREJJTkZPX1NDQU5SRVENCi0gIHN0cnVjdCBTc19EQklORk9fU0NBTlJF USA6IFNzU2VxdWVudGlhbCB7DQotICAgIERiaW5mb1NjYW5SZXEgbV9yZXE7DQot ICAgIFVpbnQzMiBtX2xlbjsNCi0gICAgU3NfREJJTkZPX1NDQU5SRVEoKSB7DQot ICAgICAgbV9zZW5kUkVRID0gJkxvY2FsUHJveHk6OnNlbmREQklORk9fU0NBTlJF UTsNCi0gICAgICBtX3NlbmRDT05GID0gJkxvY2FsUHJveHk6OnNlbmREQklORk9f U0NBTkNPTkY7DQotICAgIH0NCi0gICAgZW51bSB7IHBvb2xTaXplID0gMyB9Ow0K LSAgICBzdGF0aWMgU3NQb29sPFNzX0RCSU5GT19TQ0FOUkVRPiYgcG9vbChMb2Nh bFByb3h5KiBwcm94eSkgew0KLSAgICAgIHJldHVybiBwcm94eS0+Y19zc19EQklO Rk9fU0NBTlJFUTsNCi0gICAgfQ0KLSAgfTsNCi0gIFNzUG9vbDxTc19EQklORk9f U0NBTlJFUT4gY19zc19EQklORk9fU0NBTlJFUTsNCisgIGJvb2wgZmluZF9uZXh0 KE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvcikgY29uc3Q7DQogICB2b2lkIGV4 ZWNEQklORk9fU0NBTlJFUShTaWduYWwqKTsNCi0gIHZvaWQgc2VuZERCSU5GT19T Q0FOUkVRKFNpZ25hbCosIFVpbnQzMiBzc0lkKTsNCiAgIHZvaWQgZXhlY0RCSU5G T19TQ0FOQ09ORihTaWduYWwqKTsNCi0gIHZvaWQgc2VuZERCSU5GT19TQ0FOQ09O RihTaWduYWwqLCBVaW50MzIgc3NJZCk7DQogfTsNCiANCiAjZW5kaWYNCg0KPT09 IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL01h a2VmaWxlLmFtJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3Mv TWFrZWZpbGUuYW0JMjAwOS0wNS0yNyAxNToyMTo0NSArMDAwMA0KKysrIGIvc3Rv cmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvTWFrZWZpbGUuYW0JMjAwOS0wNy0w MyAxMDozMTozMCArMDAwMA0KQEAgLTY1LDcgKzY1LDYgQEAgbGliYmxvY2tzX2Ff U09VUkNFUyA9IHRzbWFuLmNwcCBsZ21hbi5jcA0KICAgYmFja3VwL0JhY2t1cFBy b3h5LmNwcCBcDQogICBSZXN0b3JlUHJveHkuY3BwIFwNCiAgIGRiaW5mby9EYmlu Zm8uY3BwIFwNCi0gIGRiaW5mby9uZGJpbmZvX2hlbHBlcnMuY3BwIFwNCiAgIGRi bHFoL0RibHFoQ29tbW9uLmNwcCBcDQogICBQZ21hblByb3h5LmNwcCBcDQogICBk YnR1cC9EYnR1cENsaWVudC5jcHANCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2JhY2t1cC9CYWNrdXAuY3BwJw0KLS0t IGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvYmFja3VwL0JhY2t1cC5j cHAJMjAwOS0wNi0xNSAxMzozMTozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC9ibG9ja3MvYmFja3VwL0JhY2t1cC5jcHAJMjAwOS0wNy0wMyAx MDozMTozMCArMDAwMA0KQEAgLTYzLDggKzYzLDYgQEANCiANCiAjaW5jbHVkZSA8 c2lnbmFsZGF0YS9EYmluZm9TY2FuLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0 YS9UcmFuc0lkQUkuaHBwPg0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+DQotI2luY2x1 ZGUgPGRiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmg+DQogDQogI2luY2x1ZGUgPE5k YlRpY2suaD4NCiAjaW5jbHVkZSA8ZGJ0dXAvRGJ0dXAuaHBwPg0KQEAgLTY2MCw1 MyArNjU4LDYyIEBAIHZvaWQgQmFja3VwOjpleGVjREJJTkZPX1NDQU5SRVEoU2ln bmFsICoNCiB7DQogICBqYW1FbnRyeSgpOw0KICAgRGJpbmZvU2NhblJlcSByZXE9 ICooRGJpbmZvU2NhblJlcSopc2lnbmFsLT50aGVEYXRhOw0KKyAgY29uc3QgTmRi aW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNjYW5D dXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmcmVxKTsNCiANCi0gIGNo YXIgYnVmWzUxMl07DQotICBzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCBybDsNCi0g IHN0cnVjdCBkYmluZm9fcm93IHI7DQorICBOZGJpbmZvOjpSYXRlbGltaXQgcmw7 DQogDQotICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCi0NCi0g IGlmKHJlcS50YWJsZUlkID09IE5EQklORk9fQkFDS1VQX1JFQ09SRFNfVEFCTEVJ RCkNCisgIGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86OkJBQ0tVUF9SRUNPUkRT X1RBQkxFSUQpDQogICB7DQorI2lmIDANCisvLyBUT0RPDQogICAgIEJhY2t1cFJl Y29yZFB0ciBwdHIgTElOVF9TRVRfUFRSOw0KLSAgICBmb3IoY19iYWNrdXBzLmZp cnN0KHB0cik7IHB0ci5pICE9IFJOSUw7IGNfYmFja3Vwcy5uZXh0KHB0cikpDQor ICAgIHB0ci5pID0gY3Vyc29yLT5kYXRhWzBdOw0KKyAgICB3aGlsZShjX2JhY2t1 cHMuZ2V0KHB0cikpDQogICAgIHsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2lu aXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgIGRiaW5mb193cml0ZV9y b3dfY29sdW1uX3VpbnQzMigmciwgZ2V0T3duTm9kZUlkKCkpOw0KLSAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcHRyLmkpOw0KLSAgICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcHRyLnAtPmJhY2t1 cElkKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIs IHB0ci5wLT5tYXN0ZXJSZWYpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29s dW1uX3VpbnQzMigmciwgcHRyLnAtPmNsaWVudFJlZik7DQotICAgICAgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwdHIucC0+c2xhdmVTdGF0ZS5n ZXRTdGF0ZSgpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIChVaW50MzIpcHRyLnAtPm5vT2ZCeXRlcyk7IC8vIFRPRE8NCi0gICAg ICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIChVaW50MzIpcHRy LnAtPm5vT2ZSZWNvcmRzKTsgLy8gVE9ETw0KLSAgICAgIGRiaW5mb193cml0ZV9y b3dfY29sdW1uX3VpbnQzMigmciwgKFVpbnQzMilwdHIucC0+bm9PZkxvZ0J5dGVz KTsgLy8gVE9ETw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQz MigmciwgKFVpbnQzMilwdHIucC0+bm9PZkxvZ1JlY29yZHMpOyAvL1RPRE8NCi0g ICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHB0ci5wLT5l cnJvckNvZGUpOw0KLSAgICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJs LCByZXEuYXBpVHhuSWQsIHJlcS5hcGlSZWYpOw0KLSAgICB9DQotICB9DQotICBl bHNlIGlmKCByZXEudGFibGVJZCA9PSBOREJJTkZPX0JBQ0tVUF9QQVJBTUVURVJT X1RBQkxFSUQgKQ0KLSAgew0KLSAgICBkYmluZm9fd3JpdGVfcm93X2luaXQoJnIs IGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVt bl91aW50MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0gICAgZGJpbmZvX3dyaXRl X3Jvd19jb2x1bW5fdWludDMyKCZyLCBtX2N1cnJfZGlza193cml0ZV9zcGVlZCk7 DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgNCptX3dv cmRzX3dyaXR0ZW5fdGhpc19wZXJpb2QpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93 X2NvbHVtbl91aW50MzIoJnIsIG1fb3ZlcmZsb3dfZGlza193cml0ZSk7DQotICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgbV9yZXNldF9kZWxh eV91c2VkKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZy LCAwKTsgLy8gVW5pbnRlcmVzdGluZyBtX3Jlc2V0X2Rpc2tfc3BlZWRfdGltZSk7 DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY19iYWNr dXBQb29sLmdldFNpemUoKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1u X3VpbnQzMigmciwgY19iYWNrdXBGaWxlUG9vbC5nZXRTaXplKCkpOw0KLSAgICBk YmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGNfdGFibGVQb29sLmdl dFNpemUoKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigm ciwgY190cmlnZ2VyUG9vbC5nZXRTaXplKCkpOw0KLSAgICBkYmluZm9fd3JpdGVf cm93X2NvbHVtbl91aW50MzIoJnIsIGNfZnJhZ21lbnRQb29sLmdldFNpemUoKSk7 DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY19wYWdl UG9vbC5nZXRTaXplKCkpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91 aW50MzIoJnIsIGNfZGVmYXVsdHMubV9jb21wcmVzc2VkX2JhY2t1cCk7DQotICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY19kZWZhdWx0cy5t X2NvbXByZXNzZWRfbGNwKTsNCi0gICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwg ciwgcmwsIHJlcS5hcGlUeG5JZCwgcmVxLmFwaVJlZik7DQorICAgICAgTmRiaW5m bzo6Um93IHJvdyhzaWduYWwsIHJlcSk7DQorICAgICAgcm93LndyaXRlX3VpbnQz MihnZXRPd25Ob2RlSWQoKSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwdHIu aSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwdHIucC0+YmFja3VwSWQpOw0K KyAgICAgIHJvdy53cml0ZV91aW50MzIocHRyLnAtPm1hc3RlclJlZik7DQorICAg ICAgcm93LndyaXRlX3VpbnQzMihwdHIucC0+Y2xpZW50UmVmKTsNCisgICAgICBy b3cud3JpdGVfdWludDMyKHB0ci5wLT5zbGF2ZVN0YXRlLmdldFN0YXRlKCkpOw0K KyAgICAgIHJvdy53cml0ZV91aW50MzIoKFVpbnQzMilwdHIucC0+bm9PZkJ5dGVz KTsgLy8gVE9ETw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoKFVpbnQzMilwdHIu cC0+bm9PZlJlY29yZHMpOyAvLyBUT0RPDQorICAgICAgcm93LndyaXRlX3VpbnQz MigoVWludDMyKXB0ci5wLT5ub09mTG9nQnl0ZXMpOyAvLyBUT0RPDQorICAgICAg cm93LndyaXRlX3VpbnQzMigoVWludDMyKXB0ci5wLT5ub09mTG9nUmVjb3Jkcyk7 IC8vVE9ETw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocHRyLnAtPmVycm9yQ29k ZSk7DQorICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBy bCk7DQorICAgICAgY19iYWNrdXBzLm5leHQocHRyKTsNCisgICAgICBpZiAocmwu bmVlZF9icmVhayhyZXEpKQ0KKyAgICAgIHsNCisgICAgICAgIGphbSgpOw0KKyAg ICAgICAgbmRiaW5mb19zZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCByZXEsIHJsLCBw b29sKTsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9DQorICAgIH0NCisjZW5k aWYNCisgIH0NCisgIGVsc2UgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6QkFD S1VQX1BBUkFNRVRFUlNfVEFCTEVJRCkNCisgIHsNCisgICAgTmRiaW5mbzo6Um93 IHJvdyhzaWduYWwsIHJlcSk7DQorICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3du Tm9kZUlkKCkpOw0KKyAgICByb3cud3JpdGVfdWludDMyKG1fY3Vycl9kaXNrX3dy aXRlX3NwZWVkKTsNCisgICAgcm93LndyaXRlX3VpbnQzMig0Km1fd29yZHNfd3Jp dHRlbl90aGlzX3BlcmlvZCk7DQorICAgIHJvdy53cml0ZV91aW50MzIobV9vdmVy Zmxvd19kaXNrX3dyaXRlKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihtX3Jlc2V0 X2RlbGF5X3VzZWQpOw0KKyAgICByb3cud3JpdGVfdWludDMyKDApOyAvLyBVbmlu dGVyZXN0aW5nIG1fcmVzZXRfZGlza19zcGVlZF90aW1lKTsNCisgICAgcm93Lndy aXRlX3VpbnQzMihjX2JhY2t1cFBvb2wuZ2V0U2l6ZSgpKTsNCisgICAgcm93Lndy aXRlX3VpbnQzMihjX2JhY2t1cEZpbGVQb29sLmdldFNpemUoKSk7DQorICAgIHJv dy53cml0ZV91aW50MzIoY190YWJsZVBvb2wuZ2V0U2l6ZSgpKTsNCisgICAgcm93 LndyaXRlX3VpbnQzMihjX3RyaWdnZXJQb29sLmdldFNpemUoKSk7DQorICAgIHJv dy53cml0ZV91aW50MzIoY19mcmFnbWVudFBvb2wuZ2V0U2l6ZSgpKTsNCisgICAg cm93LndyaXRlX3VpbnQzMihjX3BhZ2VQb29sLmdldFNpemUoKSk7DQorICAgIHJv dy53cml0ZV91aW50MzIoY19kZWZhdWx0cy5tX2NvbXByZXNzZWRfYmFja3VwKTsN CisgICAgcm93LndyaXRlX3VpbnQzMihjX2RlZmF1bHRzLm1fY29tcHJlc3NlZF9s Y3ApOw0KKyAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCByb3csIHJs KTsNCiAgIH0NCi0gIGVsc2UgaWYoIHJlcS50YWJsZUlkID09IE5EQklORk9fUE9P TFNfVEFCTEVJRCApDQorICBlbHNlIGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86 OlBPT0xTX1RBQkxFSUQpDQogICB7DQogICAgIHN0cnVjdCB7DQogICAgICAgY29u c3QgY2hhciogcG9vbG5hbWU7DQpAQCAtNzM1LDI1ICs3NDIsMzAgQEAgdm9pZCBC YWNrdXA6OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKg0KICAgICAgICAgICB7 IE5VTEwsIDAsIDB9DQogICAgICAgICB9Ow0KIA0KKyAgICBVaW50MzIgcG9vbCA9 IGN1cnNvci0+ZGF0YVswXTsNCiAgICAgQmxvY2tOdW1iZXIgYm4gPSBibG9ja1Rv TWFpbihudW1iZXIoKSk7DQotICAgIGZvcihpbnQgaT0wOyBwb29sc1tpXS5wb29s bmFtZTsgaSsrKQ0KKyAgICB3aGlsZShwb29sc1twb29sXS5wb29sbmFtZSkNCiAg ICAgew0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXpl b2YoYnVmKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMy KCZyLCBnZXRPd25Ob2RlSWQoKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19j b2x1bW5fdWludDMyKCZyLCBibik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXIN Ci0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHJlcS5p bnN0YW5jZSk7IC8vIGJsb2NrIGluc3RhbmNlDQotICAgICAgZGJpbmZvX3dyaXRl X3Jvd19jb2x1bW4oJnIsIHBvb2xzW2ldLnBvb2xuYW1lLCBzdHJsZW4ocG9vbHNb aV0ucG9vbG5hbWUpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91 aW50MzIoJnIsIHBvb2xzW2ldLmZyZWUpOw0KLSAgICAgIGRiaW5mb193cml0ZV9y b3dfY29sdW1uX3VpbnQzMigmciwgcG9vbHNbaV0uc2l6ZSk7DQotICAgICAgZGJp bmZvX3NlbmRfcm93KHNpZ25hbCwgciwgcmwsIHJlcS5hcGlUeG5JZCwgcmVxLmFw aVJlZik7DQorICAgICAgamFtKCk7DQorICAgICAgTmRiaW5mbzo6Um93IHJvdyhz aWduYWwsIHJlcSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihnZXRPd25Ob2Rl SWQoKSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihibik7ICAgICAgICAgICAv LyBibG9jayBudW1iZXINCisgICAgICByb3cud3JpdGVfdWludDMyKGluc3RhbmNl KCkpOyAvLyBibG9jayBpbnN0YW5jZQ0KKyAgICAgIHJvdy53cml0ZV9zdHJpbmco cG9vbHNbcG9vbF0ucG9vbG5hbWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIo cG9vbHNbcG9vbF0uZnJlZSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwb29s c1twb29sXS5zaXplKTsNCisgICAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwg cmVxLCByb3csIHJsKTsNCisgICAgICBwb29sKys7DQorICAgICAgaWYgKHJsLm5l ZWRfYnJlYWsocmVxKSkNCisgICAgICB7DQorICAgICAgICBqYW0oKTsNCisgICAg ICAgIG5kYmluZm9fc2VuZF9zY2FuX2JyZWFrKHNpZ25hbCwgcmVxLCBybCwgcG9v bCk7DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0KICAgICB9DQogICB9DQog DQotICBEYmluZm9TY2FuQ29uZiAqY29uZj0gKERiaW5mb1NjYW5Db25mKilzaWdu YWwtPmdldERhdGFQdHJTZW5kKCk7DQotICBtZW1jcHkoY29uZiwmcmVxLCBEYmlu Zm9TY2FuUmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yICogc2l6ZW9mKFVpbnQz MikpOw0KLSAgY29uZi0+cmVxdWVzdEluZm8gJj0gfihEYmluZm9TY2FuQ29uZjo6 TW9yZURhdGEpOw0KLSAgc2VuZFNpZ25hbChyZXEuc2VuZGVyUmVmLCBHU05fREJJ TkZPX1NDQU5DT05GLA0KLSAgICAgICAgICAgICBzaWduYWwsIERiaW5mb1NjYW5D b25mOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIpOw0KKyAgbmRiaW5mb19z ZW5kX3NjYW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0KIH0NCiANCiBib29sDQoN Cj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nr cy9kYmFjYy9EYmFjY01haW4uY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3MvZGJhY2MvRGJhY2NNYWluLmNwcAkyMDA5LTA2LTE1IDEzOjMx OjM3ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9k YmFjYy9EYmFjY01haW4uY3BwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBA IC0zNiwxMiArMzYsNiBAQA0KICNpbmNsdWRlIDxzaWduYWxkYXRhL1RyYW5zSWRB SS5ocHA+DQogI2luY2x1ZGUgPEtleURlc2NyaXB0b3IuaHBwPg0KIA0KLSNpbmNs dWRlIDxuZGJpbmZvLmg+DQotI2luY2x1ZGUgPGRiaW5mby9uZGJpbmZvX3RhYmxl aWRzLmg+DQotDQotLy8gVE9fRE9fUk9OTSBpcyBhIGxhYmVsIGZvciBjb21tZW50 cyBvbiB3aGF0IG5lZWRzIHRvIGJlIGltcHJvdmVkIGluIGZ1dHVyZSB2ZXJzaW9u cw0KLS8vIHdoZW4gbW9yZSB0aW1lIGlzIGdpdmVuLg0KLQ0KICNpZmRlZiBWTV9U UkFDRQ0KICNkZWZpbmUgREVCVUcoeCkgbmRib3V0IDw8ICJEQkFDQzogIjw8IHgg PDwgZW5kbDsNCiAjZWxzZQ0KQEAgLTgyMjYsMzIgKzgyMjAsMjMgQEAgdm9pZCBE YmFjYzo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqcw0KICAgamFtRW50cnko KTsNCiAgIERiaW5mb1NjYW5SZXEgcmVxPSAqKERiaW5mb1NjYW5SZXEqKXNpZ25h bC0+dGhlRGF0YTsNCiANCi0gIGNoYXIgYnVmWzUxMl07DQotICBzdHJ1Y3QgZGJp bmZvX3JhdGVsaW1pdCBybDsNCi0gIHN0cnVjdCBkYmluZm9fcm93IHI7DQotDQot ICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCi0NCi0gIGlmKHJl cS50YWJsZUlkID09IE5EQklORk9fTUVNVVNBR0VfVEFCTEVJRCkNCi0gIHsNCi0g ICAgamFtKCk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBz aXplb2YoYnVmKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQz MigmciwgZ2V0T3duTm9kZUlkKCkpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2Nv bHVtbl91aW50MzIoJnIsIGJsb2NrVG9NYWluKG51bWJlcigpKSk7Ly8gYmxvY2sg bnVtYmVyDQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwg cmVxLmluc3RhbmNlKTsgICAgICAgICAvLyBibG9jayBpbnN0YW5jZQ0KLSAgICBk YmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgIkluZGV4TWVtb3J5IiwgMTEpOw0K LSAgICBVaW50MzIgcGFnZV9zaXplX2tiPSBzaXplb2YoKnJwUGFnZXB0ci5wKTs7 DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCAoY2hhciopJnBhZ2Vf c2l6ZV9rYiwgNCk7IC8vIDhrYg0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVt bl91aW50MzIoJnIsIGNub09mQWxsb2NhdGVkUGFnZXMpOyAvLyBhbGxvY2VkIHBh Z2VzDQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY3Bh Z2VzaXplKTsgLy8gbnVtYmVyIG9mIHBhZ2VzDQotICAgIGRiaW5mb19zZW5kX3Jv dyhzaWduYWwsIHIsIHJsLCByZXEuYXBpVHhuSWQsIHJlcS5hcGlSZWYpOw0KLSAg fQ0KLQ0KLSAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiop c2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJlcSwg RGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciAqIHNpemVvZihV aW50MzIpKTsNCi0gIGNvbmYtPnJlcXVlc3RJbmZvICY9IH4oRGJpbmZvU2NhbkNv bmY6Ok1vcmVEYXRhKTsNCi0gIHNlbmRTaWduYWwocmVxLnNlbmRlclJlZiwgR1NO X0RCSU5GT19TQ0FOQ09ORiwNCi0gICAgICAgICAgICAgc2lnbmFsLCBEYmluZm9T Y2FuQ29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsNCisgIE5kYmlu Zm86OlJhdGVsaW1pdCBybDsNCisNCisgIGlmKHJlcS50YWJsZUlkID09IE5kYmlu Zm86Ok1FTVVTQUdFX1RBQkxFSUQpDQorICB7DQorICAgIGphbSgpOw0KKyAgICBO ZGJpbmZvOjpSb3cgcm93KHNpZ25hbCwgcmVxKTsNCisgICAgcm93LndyaXRlX3Vp bnQzMihnZXRPd25Ob2RlSWQoKSk7DQorICAgIHJvdy53cml0ZV91aW50MzIoYmxv Y2tUb01haW4obnVtYmVyKCkpKTsgLy8gYmxvY2sgbnVtYmVyDQorICAgIHJvdy53 cml0ZV91aW50MzIoaW5zdGFuY2UoKSk7ICAgICAgICAgICAgLy8gYmxvY2sgaW5z dGFuY2UNCisgICAgcm93LndyaXRlX3N0cmluZygiSW5kZXhNZW1vcnkiKTsNCisg ICAgcm93LndyaXRlX3VpbnQzMihzaXplb2YoKnJwUGFnZXB0ci5wKSk7DQorICAg IHJvdy53cml0ZV91aW50MzIoY25vT2ZBbGxvY2F0ZWRQYWdlcyk7ICAgLy8gYWxs b2NlZCBwYWdlcw0KKyAgICByb3cud3JpdGVfdWludDMyKGNwYWdlc2l6ZSk7ICAg ICAgICAgICAgIC8vIG51bWJlciBvZiBwYWdlcw0KKyAgICBuZGJpbmZvX3NlbmRf cm93KHNpZ25hbCwgcmVxLCByb3csIHJsKTsNCisgIH0NCisNCisgIG5kYmluZm9f c2VuZF9zY2FuX2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCiB9DQogDQogdm9pZA0K DQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3MvZGJkaWN0L0RiZGljdC5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2Vy bmVsL2Jsb2Nrcy9kYmRpY3QvRGJkaWN0LmNwcAkyMDA5LTA2LTE1IDEzOjMxOjM3 ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmRp Y3QvRGJkaWN0LmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtOTks OCArOTksNiBAQCBleHRlcm4gRXZlbnRMb2dnZXIgKiBnX2V2ZW50TG9nZ2VyOw0K IA0KICNpbmNsdWRlIDxzaWduYWxkYXRhL0RiaW5mb1NjYW4uaHBwPg0KICNpbmNs dWRlIDxzaWduYWxkYXRhL1RyYW5zSWRBSS5ocHA+DQotI2luY2x1ZGUgPG5kYmlu Zm8uaD4NCi0jaW5jbHVkZSA8ZGJpbmZvL25kYmluZm9fdGFibGVpZHMuaD4NCiAN CiAjZGVmaW5lIFpOT1RfRk9VTkQgNjI2DQogI2RlZmluZSBaQUxSRUFEWUVYSVNU IDYzMA0KQEAgLTI3NywxNSArMjc1LDEzIEBAIERiZGljdDo6ZXhlY0RVTVBfU1RB VEVfT1JEKFNpZ25hbCogc2lnbmENCiB2b2lkIERiZGljdDo6ZXhlY0RCSU5GT19T Q0FOUkVRKFNpZ25hbCAqc2lnbmFsKQ0KIHsNCiAgIERiaW5mb1NjYW5SZXEgcmVx PSAqKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+dGhlRGF0YTsNCi0gIGNoYXIgYnVm WzUxMl07DQotICBzdHJ1Y3QgZGJpbmZvX3JvdyByOw0KLSAgc3RydWN0IGRiaW5m b19yYXRlbGltaXQgcmw7DQotDQotICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJs LCAmcmVxKTsNCisgIGNvbnN0IE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9 DQorICAgIChOZGJpbmZvOjpTY2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJz b3JQdHIoJnJlcSk7DQorICBOZGJpbmZvOjpSYXRlbGltaXQgcmw7DQogDQogICBq YW1FbnRyeSgpOw0KIA0KLSAgaWYocmVxLnRhYmxlSWQgPT0gTkRCSU5GT19QT09M U19UQUJMRUlEKQ0KKyAgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6UE9PTFNf VEFCTEVJRCkNCiAgIHsNCiAgICAgc3RydWN0IHsNCiAgICAgICBjb25zdCBjaGFy KiBwb29sbmFtZTsNCkBAIC0zNjgsMjUgKzM2NCwzMCBAQCB2b2lkIERiZGljdDo6 ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqDQogICAgICAgICAgIHsgTlVMTCwg MCwgMH0NCiAgICAgICAgIH07DQogDQorICAgIFVpbnQzMiBwb29sID0gY3Vyc29y LT5kYXRhWzBdOw0KICAgICBCbG9ja051bWJlciBibiA9IGJsb2NrVG9NYWluKG51 bWJlcigpKTsNCi0gICAgZm9yKGludCBpPTA7IHBvb2xzW2ldLnBvb2xuYW1lOyBp KyspDQorICAgIHdoaWxlKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKQ0KICAgICB7DQot ICAgICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihidWYp KTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGdl dE93bk5vZGVJZCgpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91 aW50MzIoJnIsIGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJlcg0KLSAgICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcmVxLmluc3RhbmNl KTsgLy8gYmxvY2sgaW5zdGFuY2UNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2Nv bHVtbigmciwgcG9vbHNbaV0ucG9vbG5hbWUsIHN0cmxlbihwb29sc1tpXS5wb29s bmFtZSkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigm ciwgcG9vbHNbaV0uZnJlZSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1 bW5fdWludDMyKCZyLCBwb29sc1tpXS5zaXplKTsNCi0gICAgICBkYmluZm9fc2Vu ZF9yb3coc2lnbmFsLCByLCBybCwgcmVxLmFwaVR4bklkLCByZXEuYXBpUmVmKTsN CisgICAgICBqYW0oKTsNCisgICAgICBOZGJpbmZvOjpSb3cgcm93KHNpZ25hbCwg cmVxKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKGdldE93bk5vZGVJZCgpKTsN CisgICAgICByb3cud3JpdGVfdWludDMyKGJuKTsgICAgICAgICAgIC8vIGJsb2Nr IG51bWJlcg0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoaW5zdGFuY2UoKSk7IC8v IGJsb2NrIGluc3RhbmNlDQorICAgICAgcm93LndyaXRlX3N0cmluZyhwb29sc1tw b29sXS5wb29sbmFtZSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1tw b29sXS5mcmVlKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xd LnNpemUpOw0KKyAgICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJv dywgcmwpOw0KKyAgICAgIHBvb2wrKzsNCisgICAgICBpZiAocmwubmVlZF9icmVh ayhyZXEpKQ0KKyAgICAgIHsNCisgICAgICAgIGphbSgpOw0KKyAgICAgICAgbmRi aW5mb19zZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCByZXEsIHJsLCBwb29sKTsNCisg ICAgICAgIHJldHVybjsNCisgICAgICB9DQogICAgIH0NCiAgIH0NCiANCi0gIERi aW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0 RGF0YVB0clNlbmQoKTsNCi0gIG1lbWNweShjb25mLCZyZXEsIERiaW5mb1NjYW5S ZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IgKiBzaXplb2YoVWludDMyKSk7DQot ICBjb25mLT5yZXF1ZXN0SW5mbyAmPSB+KERiaW5mb1NjYW5Db25mOjpNb3JlRGF0 YSk7DQotICBzZW5kU2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NB TkNPTkYsDQotICAgICAgICAgICAgIHNpZ25hbCwgRGJpbmZvU2NhbkNvbmY6OlNp Z25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7DQorICBuZGJpbmZvX3NlbmRfc2Nh bl9jb25mKHNpZ25hbCwgcmVxLCBybCk7DQogfQ0KIA0KIA0KDQo9PT0gbW9kaWZp ZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL0NN YWtlTGlzdHMudHh0Jw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3MvZGJpbmZvL0NNYWtlTGlzdHMudHh0CTIwMDgtMTAtMDggMDg6MTI6MTggKzAw MDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9D TWFrZUxpc3RzLnR4dAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMTgs NyArMTgsNiBAQCBJTkNMVURFX0RJUkVDVE9SSUVTKCR7Q01BS0VfU09VUkNFX0RJ Un0vDQogSU5DTFVERSgke0NNQUtFX1NPVVJDRV9ESVJ9L3N0b3JhZ2UvbmRiL2Nv bmZpZy90eXBlX2tlcm5lbC5jbWFrZSkNCiANCiBBRERfTElCUkFSWShuZGJkYmlu Zm8gU1RBVElDDQotCQkgICAgICBEYmluZm8uY3BwDQotCQkgICAgICBuZGJpbmZv X2hlbHBlcnMuY3BwDQorCURiaW5mby5jcHANCiApDQogDQoNCj09PSBtb2RpZmll ZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vRGJp bmZvLmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2Ri aW5mby9EYmluZm8uY3BwCTIwMDktMDYtMjQgMjE6MzM6MDYgKzAwMDANCisrKyBi L3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9EYmluZm8uY3Bw CTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0xLDQgKzEsNSBAQA0KLS8q IENvcHlyaWdodCAoQykgMjAwNyBNeVNRTCBBQg0KKy8qIENvcHlyaWdodCAoQykg MjAwNy0yMDA4IE15U1FMIEFCLCAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLg0K KyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vu c2UgdGVybXMuDQogDQogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiAgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQ0KQEAgLTE0LDcgKzE1LDYgQEANCiAgICBGb3VuZGF0 aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBN QSAgMDIxMTEtMTMwNyAgVVNBICovDQogDQogI2luY2x1ZGUgIkRiaW5mby5ocHAi DQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCiANCiAjaW5jbHVkZSA8c2lnbmFsZGF0 YS9Ob2RlRmFpbFJlcC5ocHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvUmVhZE5v ZGVzQ29uZi5ocHA+DQpAQCAtMjIsOSArMjIsNiBAQA0KICNpbmNsdWRlIDxzaWdu YWxkYXRhL0R1bXBTdGF0ZU9yZC5ocHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEv RGJpbmZvU2Nhbi5ocHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJ LmhwcD4NCi0jaW5jbHVkZSAibmRiaW5mb190YWJsZXMuaCINCi0jaW5jbHVkZSAi bmRiaW5mb190YWJsZWlkcy5oIg0KLSNpbmNsdWRlIDxBdHRyaWJ1dGVIZWFkZXIu aHBwPg0KIA0KIFVpbnQzMiBkYmluZm9fYmxvY2tzW10gPSB7IERCQUNDLCBEQlRV UCwgQkFDS1VQLCBEQlRDLCBTVU1BLCBEQlVUSUwsIFRSSVgsIERCVFVYLCBEQkRJ Q1QsIDB9Ow0KIA0KQEAgLTM0LDYgKzMxLDggQEAgRGJpbmZvOjpEYmluZm8oQmxv Y2tfY29udGV4dCYgY3R4KSA6DQogew0KICAgQkxPQ0tfQ09OU1RSVUNUT1IoRGJp bmZvKTsNCiANCisgIFNUQVRJQ19BU1NFUlQoc2l6ZW9mKERiaW5mb1NjYW5DdXJz b3IpID09IHNpemVvZihOZGJpbmZvOjpTY2FuQ3Vyc29yKSk7DQorDQogICBjX25v ZGVQb29sLnNldFNpemUoTUFYX05EQl9OT0RFUyk7DQogDQogICAvKiBBZGQgUmVj ZWl2ZWQgU2lnbmFscyAqLw0KQEAgLTExMCwxMSArMTA5LDExIEBAIHZvaWQgRGJp bmZvOjpleGVjRFVNUF9TVEFURV9PUkQoU2lnbmFsKiANCiAgICAgamFtKCk7DQog ICAgIG5kYm91dF9jKCItLS0gQkVHSU4gTkRCJElORk8uVEFCTEVTIC0tLSIpOw0K ICAgICBjaGFyIGNyZWF0ZV9zcWxbNTEyXTsNCi0gICAgZm9yKFVpbnQzMiBpPTA7 aTxudW1iZXJfbmRiaW5mb190YWJsZXM7aSsrKQ0KKyAgICBmb3IoaW50IGkgPSAw OyBpIDwgTmRiaW5mbzo6Z2V0TnVtVGFibGVzKCk7IGkrKykNCiAgICAgew0KLSAg ICAgIG5kYmluZm9fY3JlYXRlX3NxbChuZGJpbmZvX3RhYmxlc1tpXSwNCi0gICAg ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX3NxbCwgc2l6ZW9mKGNyZWF0ZV9z cWwpKTsNCi0gICAgICBuZGJvdXRfYygiJWQsJXMsJXMiLGksbmRiaW5mb190YWJs ZXNbaV0tPm5hbWUsY3JlYXRlX3NxbCk7DQorICAgICAgY29uc3QgTmRiaW5mbzo6 VGFibGUmIHRhYiA9IE5kYmluZm86OmdldFRhYmxlKGkpOw0KKyAgICAgIE5kYmlu Zm86OmNyZWF0ZV9zcWwodGFiLCBjcmVhdGVfc3FsLCBzaXplb2YoY3JlYXRlX3Nx bCkpOw0KKyAgICAgIG5kYm91dF9jKCIlZCwlcywlcyIsIGksIHRhYi5tLm5hbWUs IGNyZWF0ZV9zcWwpOw0KICAgICB9DQogICAgIG5kYm91dF9jKCItLS0gRU5EIE5E QiRJTkZPLlRBQkxFUyAtLS0iKTsNCiAgICAgYnJlYWs7DQpAQCAtMTIyLDEyICsx MjEsMTMgQEAgdm9pZCBEYmluZm86OmV4ZWNEVU1QX1NUQVRFX09SRChTaWduYWwq IA0KICAgY2FzZSBEdW1wU3RhdGVPcmQ6OkRiaW5mb0xpc3RDb2x1bW5zOg0KICAg ICBqYW0oKTsNCiAgICAgbmRib3V0X2MoIi0tLSBCRUdJTiBOREIkSU5GTy5DT0xV TU5TIC0tLSIpOw0KLSAgICBmb3IoVWludDMyIGk9MDtpPG51bWJlcl9uZGJpbmZv X3RhYmxlcztpKyspDQorICAgIGZvcihpbnQgaSA9IDA7IGkgPCBOZGJpbmZvOjpn ZXROdW1UYWJsZXMoKTsgaSsrKQ0KICAgICB7DQotICAgICAgc3RydWN0IG5kYmlu Zm9fdGFibGUgKnQ9IG5kYmluZm9fdGFibGVzW2ldOw0KKyAgICAgIGNvbnN0IE5k YmluZm86OlRhYmxlJiB0YWIgPSBOZGJpbmZvOjpnZXRUYWJsZShpKTsNCiANCi0g ICAgICBmb3IoaW50IGo9MDtqPHQtPm5jb2xzO2orKykNCi0gICAgICAgIG5kYm91 dF9jKCIlZCwlZCwlcywlZCIsaSxqLHQtPmNvbFtqXS5uYW1lLHQtPmNvbFtqXS5j b2x0eXBlKTsNCisgICAgICBmb3IoaW50IGogPSAwOyBqIDwgdGFiLm0ubmNvbHM7 IGorKykNCisgICAgICAgIG5kYm91dF9jKCIlZCwlZCwlcywlZCIsIGksIGosDQor ICAgICAgICAgICAgICAgICB0YWIuY29sW2pdLm5hbWUsIHRhYi5jb2xbal0uY29s dHlwZSk7DQogICAgIH0NCiAgICAgbmRib3V0X2MoIi0tLSBFTkQgTkRCJElORk8u Q09MVU1OUyAtLS0iKTsNCiAgICAgYnJlYWs7DQpAQCAtMTM1LDMwNyArMTM1LDMy MSBAQCB2b2lkIERiaW5mbzo6ZXhlY0RVTVBfU1RBVEVfT1JEKFNpZ25hbCogDQog ICB9Ow0KIH0NCiANCitVaW50MzIgRGJpbmZvOjpmaW5kX25leHRfbm9kZShVaW50 MzIgbm9kZSkgY29uc3QNCit7DQorICBub2RlKys7DQorICB3aGlsZSghY19hbGl2 ZU5vZGVzLmdldChub2RlKSAmJg0KKyAgICAgICAgbm9kZSA8IE1BWF9OREJfTk9E RVMpDQorICAgICBub2RlKys7DQorDQorICBpZiAobm9kZSA9PSBNQVhfTkRCX05P REVTKQ0KKyAgICByZXR1cm4gMDsNCisgIHJldHVybiBub2RlOw0KK30NCisNCitV aW50MzIgRGJpbmZvOjpmaW5kX25leHRfYmxvY2soVWludDMyIGJsb2NrKSBjb25z dA0KK3sNCisgIGludCBpID0gMDsNCisgIC8vIEZpbmQgY3VycmVudCBibG9ja3Mg cG9zaXRpb24NCisgIHdoaWxlIChkYmluZm9fYmxvY2tzW2ldICE9IGJsb2NrICYm DQorICAgICAgICAgZGJpbmZvX2Jsb2Nrc1tpXSAhPSAwKQ0KKyAgICBpKys7DQor DQorICAvLyBNYWtlIHN1cmUgY3VycmVudCBibG9jayB3YXMgZm91bmQNCisgIG5k YnJlcXVpcmUoZGJpbmZvX2Jsb2Nrc1tpXSk7DQorDQorICAvLyBSZXR1cm4gdGhl IG5leHQgYmxvY2sod2hpY2ggbWlnaHQgYmUgMCkNCisgIHJldHVybiBkYmluZm9f YmxvY2tzWysraV07DQorfQ0KKw0KK2Jvb2wgRGJpbmZvOjpmaW5kX25leHQoTmRi aW5mbzo6U2NhbkN1cnNvciogY3Vyc29yKSBjb25zdA0KK3sNCisgIFVpbnQzMiBu b2RlID0gcmVmVG9Ob2RlKGN1cnNvci0+Y3VyclJlZik7DQorICBVaW50MzIgYmxv Y2sgPSByZWZUb0Jsb2NrKGN1cnNvci0+Y3VyclJlZik7DQorICBjb25zdCBVaW50 MzIgaW5zdGFuY2UgPSByZWZUb0luc3RhbmNlKGN1cnNvci0+Y3VyclJlZik7DQor ICBuZGJyZXF1aXJlKGluc3RhbmNlID09IDApOw0KKw0KKyAgaWYgKGJsb2NrKQ0K KyAgew0KKyAgICBqYW0oKTsNCisgICAgaWYgKGJsb2NrID09IERCSU5GTykNCisg ICAgew0KKyAgICAgIGphbSgpOw0KKw0KKyAgICAgIC8vIFN0YXJ0aW5nIHNjYW4g b24gdGhpcyBub2RlDQorICAgICAgbmRicmVxdWlyZShub2RlID09IGdldE93bk5v ZGVJZCgpKTsNCisNCisgICAgICAvLyBTdGFydCBvbiBmaXJzdCBibG9jaw0KKyAg ICAgIGN1cnNvci0+Y3VyclJlZiA9IG51bWJlclRvUmVmKGRiaW5mb19ibG9ja3Nb MF0sIG5vZGUpOw0KKyAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAg IC8vIEZpbmQgbmV4dCBibG9jaw0KKyAgICBibG9jayA9IGZpbmRfbmV4dF9ibG9j ayhibG9jayk7DQorICAgIGlmIChibG9jaykNCisgICAgew0KKyAgICAgIGphbSgp Ow0KKyAgICAgIGN1cnNvci0+Y3VyclJlZiA9IG51bWJlclRvUmVmKGJsb2NrLCBu b2RlKTsNCisgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAg bm9kZSA9IGZpbmRfbmV4dF9ub2RlKG5vZGUpOw0KKyAgaWYgKG5vZGUpDQorICB7 DQorICAgIGphbSgpOw0KKyAgICBibG9jayA9IERCSU5GTzsNCisgICAgY3Vyc29y LT5jdXJyUmVmID0gbnVtYmVyVG9SZWYoYmxvY2ssIG5vZGUpOw0KKyAgICByZXR1 cm4gdHJ1ZTsNCisgIH0NCisNCisgIC8vIE5vIG1vcmUgbm9kZXMgLT4gZG9uZQ0K KyAgY3Vyc29yLT5jdXJyUmVmID0gMDsNCisgIHJldHVybiBmYWxzZTsNCit9DQor DQogdm9pZCBEYmluZm86OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKnNpZ25h bCkNCiB7DQogICBqYW1FbnRyeSgpOw0KLSAgY29uc3QgRGJpbmZvU2NhblJlcSBy ZXE9ICooRGJpbmZvU2NhblJlcSopc2lnbmFsLT5nZXREYXRhUHRyKCk7DQorICBE YmluZm9TY2FuUmVxKiByZXFfcHRyID0gKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+ Z2V0RGF0YVB0clNlbmQoKTsNCisgIGNvbnN0IFVpbnQzMiBzZW5kZXJSZWYgPSBz aWduYWwtPmhlYWRlci50aGVTZW5kZXJzQmxvY2tSZWY7DQorDQorICAvLyBDb3B5 IHNpZ25hbCBvbiBzdGFjaw0KKyAgRGJpbmZvU2NhblJlcSByZXEgPSAqcmVxX3B0 cjsNCiANCi0gIGNvbnN0IFVpbnQzMiB0YWJsZUlkPSByZXEudGFibGVJZDsgIA0K LSAgY29uc3QgVWludDMyIGFwaVJlZj0gcmVxLmFwaVJlZjsNCi0gIGNvbnN0IFVp bnQzMiBzZW5kZXJSZWY9IHJlcS5zZW5kZXJSZWY7DQotICBjb25zdCBVaW50MzIg YXBpVHhuSWQ9IHJlcS5hcGlUeG5JZDsNCi0gIC8vY29uc3QgVWludDMyIGNvbEJp dG1hcExvPSByZXEuY29sQml0bWFwTG87DQotICAvL2NvbnN0IFVpbnQzMiBjb2xC aXRtYXBIaT0gcmVxLmNvbEJpdG1hcEhpOw0KLSAgLy9jb25zdCBVaW50MzIgcmVx dWVzdEluZm89IHJlcS5yZXF1ZXN0SW5mbzsNCisgIGNvbnN0IFVpbnQzMiByZXN1 bHREYXRhID0gcmVxLnJlc3VsdERhdGE7DQorICBjb25zdCBVaW50MzIgdHJhbnNJ ZDAgPSByZXEudHJhbnNJZFswXTsNCisgIGNvbnN0IFVpbnQzMiB0cmFuc0lkMSA9 IHJlcS50cmFuc0lkWzFdOw0KKyAgY29uc3QgVWludDMyIHJlc3VsdFJlZiA9IHJl cS5yZXN1bHRSZWY7DQogDQogICAvLyBWYWxpZGF0ZSB0YWJsZUlkDQotICBpZiAo dGFibGVJZCA+PSBudW1iZXJfbmRiaW5mb190YWJsZXMpDQorICBjb25zdCBVaW50 MzIgdGFibGVJZCA9IHJlcS50YWJsZUlkOw0KKyAgaWYgKHRhYmxlSWQgPj0gTmRi aW5mbzo6Z2V0TnVtVGFibGVzKCkpDQogICB7DQogICAgIGphbSgpOw0KICAgICBE YmluZm9TY2FuUmVmICpyZWY9IChEYmluZm9TY2FuUmVmKilzaWduYWwtPmdldERh dGFQdHJTZW5kKCk7DQotICAgIHJlZi0+dGFibGVJZD0gdGFibGVJZDsNCisgICAg cmVmLT5yZXN1bHREYXRhID0gcmVzdWx0RGF0YTsNCisgICAgcmVmLT50cmFuc0lk WzBdID0gdHJhbnNJZDA7DQorICAgIHJlZi0+dHJhbnNJZFsxXSA9IHRyYW5zSWQx Ow0KKyAgICByZWYtPnJlc3VsdFJlZiA9IHJlc3VsdFJlZjsNCiAgICAgcmVmLT5l cnJvckNvZGU9IERiaW5mb1NjYW5SZWY6Ok5vVGFibGU7DQogICAgIHNlbmRTaWdu YWwoc2VuZGVyUmVmLCBHU05fREJJTkZPX1NDQU5SRUYsIHNpZ25hbCwNCiAgICAg ICAgICAgICAgICBEYmluZm9TY2FuUmVmOjpTaWduYWxMZW5ndGgsIEpCQik7DQog ICAgIHJldHVybjsNCiAgIH0NCiANCi0gIFVpbnQzMiBpOw0KLSAgaW50IGo7DQot ICBpbnQgc3RhcnRpZD0gMDsNCisgIC8vIFRPRE8gQ2hlY2sgYWxsIHNjYW4gcGFy YW1ldGVycw0KIA0KLSAgaW50IHN0YXJ0VGFibGVJZCwgc3RhcnRDb2x1bW5JZDsN Ci0NCi0gIGludCBjb250aW51ZV9zZW5kaW5nOw0KLQ0KLSAgY2hhciBidWZbMTAy NF07DQotICBzdHJ1Y3QgZGJpbmZvX3JvdyByOw0KLSAgc3RydWN0IGRiaW5mb19y YXRlbGltaXQgcmw7DQorICBOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0K KyAgICAoTmRiaW5mbzo6U2NhbkN1cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29y UHRyKCZyZXEpOw0KKyAgVWludDMyIHNpZ25hbF9sZW5ndGggPSBzaWduYWwtPmdl dExlbmd0aCgpOw0KKyAgaWYgKHNpZ25hbF9sZW5ndGggPT0gRGJpbmZvU2NhblJl cTo6U2lnbmFsTGVuZ3RoKQ0KKyAgew0KKyAgICAvLyBJbml0aWFsaXplIGN1cnNv cg0KKyAgICBqYW0oKTsNCisgICAgY3Vyc29yLT5zZW5kZXJSZWYgPSBzZW5kZXJS ZWY7DQorICAgIGN1cnNvci0+c2F2ZVNlbmRlclJlZiA9IDA7DQorICAgIGN1cnNv ci0+Y3VyclJlZiA9IDA7DQorICAgIGN1cnNvci0+c2F2ZUN1cnJSZWYgPSAwOw0K KyAgICAvLyBSZXNldCBhbGwgZGF0YSBob2xkZXJzDQorICAgIG1lbXNldChjdXJz b3ItPmRhdGEsIDAsIHNpemVvZihjdXJzb3ItPmRhdGEpKTsNCisgICAgY3Vyc29y LT5mbGFncyA9IDA7DQorICAgIGN1cnNvci0+dG90YWxSb3dzID0gMDsNCisgICAg Y3Vyc29yLT50b3RhbEJ5dGVzID0gMDsNCisgICAgcmVxLmN1cnNvcl9zeiA9IE5k YmluZm86OlNjYW5DdXJzb3I6Okxlbmd0aDsNCisgICAgc2lnbmFsX2xlbmd0aCAr PSByZXEuY3Vyc29yX3N6Ow0KKyAgfQ0KKyAgbmRicmVxdWlyZShzaWduYWxfbGVu Z3RoID09DQorICAgICAgICAgICAgIERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0 aCArIE5kYmluZm86OlNjYW5DdXJzb3I6Okxlbmd0aCk7DQorICBuZGJyZXF1aXJl KHJlcS5jdXJzb3Jfc3ogPT0gTmRiaW5mbzo6U2NhbkN1cnNvcjo6TGVuZ3RoKTsN CiANCi0gIHN3aXRjaChyZXEudGFibGVJZCkNCisgIHN3aXRjaCh0YWJsZUlkKQ0K KyAgew0KKyAgY2FzZSBOZGJpbmZvOjpUQUJMRVNfVEFCTEVJRDoNCiAgIHsNCi0g IGNhc2UgTkRCSU5GT19UQUJMRVNfVEFCTEVJRDoNCiAgICAgamFtKCk7DQogDQor ICAgIE5kYmluZm86OlJhdGVsaW1pdCBybDsNCiAgICAgY2hhciBjcmVhdGVfc3Fs WzUxMl07DQorICAgIFVpbnQzMiB0YWJsZUlkID0gY3Vyc29yLT5kYXRhWzBdOw0K IA0KLSAgICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCi0NCi0g ICAgaWYoIShyZXEucmVxdWVzdEluZm8gJiBEYmluZm9TY2FuUmVxOjpTdGFydFNj YW4pKQ0KKyAgICB3aGlsZSh0YWJsZUlkIDwgTmRiaW5mbzo6Z2V0TnVtVGFibGVz KCkpDQogICAgIHsNCiAgICAgICBqYW0oKTsNCi0gICAgICBzdGFydGlkPSByZXEu Y3Vyc29yLmN1cl9pdGVtOw0KLSAgICB9DQorICAgICAgY29uc3QgTmRiaW5mbzo6 VGFibGUmIHRhYiA9IE5kYmluZm86OmdldFRhYmxlKHRhYmxlSWQpOw0KKyAgICAg IE5kYmluZm86OlJvdyByb3coc2lnbmFsLCByZXEpOw0KKyAgICAgIE5kYmluZm86 OmNyZWF0ZV9zcWwodGFiLCBjcmVhdGVfc3FsLCBzaXplb2YoY3JlYXRlX3NxbCkp Ow0KKyAgICAgIHJvdy53cml0ZV91aW50MzIodGFibGVJZCk7DQorICAgICAgcm93 LndyaXRlX3N0cmluZyh0YWIubS5uYW1lKTsNCisgICAgICByb3cud3JpdGVfc3Ry aW5nKGNyZWF0ZV9zcWwpOw0KKyAgICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFs LCByZXEsIHJvdywgcmwpOw0KIA0KLSAgICBmb3IoaT1zdGFydGlkO2RiaW5mb19y YXRlbGltaXRfY29udGludWUoJnJsKSAmJiBpPG51bWJlcl9uZGJpbmZvX3RhYmxl cztpKyspDQotICAgIHsNCi0gICAgICBqYW0oKTsNCi0gICAgICBkYmluZm9fd3Jp dGVfcm93X2luaXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgIG5kYmlu Zm9fY3JlYXRlX3NxbChuZGJpbmZvX3RhYmxlc1tpXSwNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgY3JlYXRlX3NxbCwgc2l6ZW9mKGNyZWF0ZV9zcWwpKTsNCi0N Ci0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGkpOw0K LSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCBuZGJpbmZvX3RhYmxl c1tpXS0+bmFtZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJs ZW4obmRiaW5mb190YWJsZXNbaV0tPm5hbWUpKzEpOw0KLSAgICAgIGRiaW5mb193 cml0ZV9yb3dfY29sdW1uKCZyLCBjcmVhdGVfc3FsLCBzdHJsZW4oY3JlYXRlX3Nx bCkrMSk7DQorICAgICAgdGFibGVJZCsrOw0KIA0KLSAgICAgIGRiaW5mb19zZW5k X3JvdyhzaWduYWwscixybCxhcGlUeG5JZCxhcGlSZWYpOw0KKyAgICAgIGlmIChy bC5uZWVkX2JyZWFrKHJlcSkpDQorICAgICAgew0KKyAgICAgICAgamFtKCk7DQor ICAgICAgICBuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwgcmws IHRhYmxlSWQpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCiAgICAgfQ0K IA0KLSAgICBpZighZGJpbmZvX3JhdGVsaW1pdF9jb250aW51ZSgmcmwpICYmIGkg PCBudW1iZXJfbmRiaW5mb190YWJsZXMpDQotICAgIHsNCi0gICAgICBqYW0oKTsN Ci0gICAgICBkYmluZm9fcmF0ZWxpbWl0X3NlbmRjb25mKHNpZ25hbCxyZXEscmws aSk7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgamFtKCk7DQot ICAgICAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiopc2ln bmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgICAgIGNvbmYtPnRhYmxlSWQ9IHJl cS50YWJsZUlkOw0KLSAgICAgIGNvbmYtPnNlbmRlclJlZj0gcmVxLnNlbmRlclJl ZjsNCi0gICAgICBjb25mLT5hcGlUeG5JZD0gcmVxLmFwaVR4bklkOw0KLSAgICAg IGNvbmYtPnJlcXVlc3RJbmZvPSAwOw0KLSAgICAgIHNlbmRTaWduYWwocmVxLnNl bmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLA0KLSAgICAgICAg ICAgICAgICAgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0aCwgSkJCKTsNCi0g ICAgfQ0KKyAgICAvLyBBbGwgdGFibGVzIHNlbnQNCisgICAgcmVxLmN1cnNvcl9z eiA9IDA7IC8vIENsb3NlIGN1cnNvcg0KKyAgICBuZGJpbmZvX3NlbmRfc2Nhbl9j b25mKHNpZ25hbCwgcmVxLCBybCk7DQorICAgIHJldHVybjsNCiANCiAgICAgYnJl YWs7DQorICB9DQogDQotICBjYXNlIE5EQklORk9fQ09MVU1OU19UQUJMRUlEOg0K KyAgY2FzZSBOZGJpbmZvOjpDT0xVTU5TX1RBQkxFSUQ6DQorICB7DQogICAgIGph bSgpOw0KIA0KLSAgICBzdGFydFRhYmxlSWQ9IDA7DQotICAgIHN0YXJ0Q29sdW1u SWQ9IDA7DQotDQotICAgIGlmKCEocmVxLnJlcXVlc3RJbmZvICYgRGJpbmZvU2Nh blJlcTo6U3RhcnRTY2FuKSkNCi0gICAgew0KLSAgICAgIGphbSgpOw0KLSAgICAg IHN0YXJ0VGFibGVJZD0gcmVxLmN1cnNvci5jdXJfaXRlbSA+PiA4Ow0KLSAgICAg IHN0YXJ0Q29sdW1uSWQ9IHJlcS5jdXJzb3IuY3VyX2l0ZW0gJiAweEZGOw0KLSAg ICB9DQotDQotICAgIHN0cnVjdCBuZGJpbmZvX3RhYmxlICp0Ow0KLQ0KLSAgICBk YmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCi0NCi0gICAgY29udGlu dWVfc2VuZGluZz0gMTsNCisgICAgTmRiaW5mbzo6UmF0ZWxpbWl0IHJsOw0KKyAg ICBVaW50MzIgdGFibGVJZCA9IGN1cnNvci0+ZGF0YVswXTsNCisgICAgVWludDMy IGNvbHVtbklkID0gY3Vyc29yLT5kYXRhWzFdOw0KIA0KLSAgICBmb3IoaT1zdGFy dFRhYmxlSWQ7IGNvbnRpbnVlX3NlbmRpbmcgJiYgaTxudW1iZXJfbmRiaW5mb190 YWJsZXM7IGkrKykNCisgICAgd2hpbGUodGFibGVJZCA8IE5kYmluZm86OmdldE51 bVRhYmxlcygpKQ0KICAgICB7DQogICAgICAgamFtKCk7DQotICAgICAgdD0gbmRi aW5mb190YWJsZXNbaV07DQotDQotICAgICAgZm9yKGo9c3RhcnRDb2x1bW5JZDsg Y29udGludWVfc2VuZGluZyAmJiBqPHQtPm5jb2xzO2orKykNCisgICAgICBjb25z dCBOZGJpbmZvOjpUYWJsZSYgdGFiID0gTmRiaW5mbzo6Z2V0VGFibGUodGFibGVJ ZCk7DQorICAgICAgd2hpbGUoY29sdW1uSWQgPCB0YWIubS5uY29scykNCiAgICAg ICB7DQogICAgICAgICBqYW0oKTsNCi0gICAgICAgIGRiaW5mb193cml0ZV9yb3df aW5pdCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgICBkYmluZm9fd3Jp dGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGkpOw0KLSAgICAgICAgZGJpbmZvX3dy aXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBqKTsNCi0gICAgICAgIGRiaW5mb193 cml0ZV9yb3dfY29sdW1uKCZyLCB0LT5jb2xbal0ubmFtZSwgc3RybGVuKHQtPmNv bFtqXS5uYW1lKSsxKTsNCi0gICAgICAgIGNvbnN0IGNoYXIqIGNvbHR5cGVfbmFt ZT0gbmRiaW5mb19jb2x0eXBlX3RvX3N0cmluZyh0LT5jb2xbal0uY29sdHlwZSk7 DQotICAgICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgY29sdHlwZV9u YW1lLCBzdHJsZW4oY29sdHlwZV9uYW1lKSsxKTsNCi0gICAgICAgIGRiaW5mb19z ZW5kX3JvdyhzaWduYWwscixybCwgYXBpVHhuSWQsYXBpUmVmKTsNCisgICAgICAg IE5kYmluZm86OlJvdyByb3coc2lnbmFsLCByZXEpOw0KKyAgICAgICAgcm93Lndy aXRlX3VpbnQzMih0YWJsZUlkKTsNCisgICAgICAgIHJvdy53cml0ZV91aW50MzIo Y29sdW1uSWQpOw0KKyAgICAgICAgcm93LndyaXRlX3N0cmluZyh0YWIuY29sW2Nv bHVtbklkXS5uYW1lKTsNCisgICAgICAgIHJvdy53cml0ZV9zdHJpbmcoTmRiaW5m bzo6Y29sdHlwZV90b19zdHJpbmcodGFiLmNvbFtjb2x1bW5JZF0uY29sdHlwZSkp Ow0KKyAgICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBy bCk7DQorDQorICAgICAgICBhc3NlcnQoY29sdW1uSWQgPCAyNTYpOw0KKyAgICAg ICAgY29sdW1uSWQrKzsNCiANCi0gICAgICAgIGNvbnRpbnVlX3NlbmRpbmc9IGRi aW5mb19yYXRlbGltaXRfY29udGludWUoJnJsKTsNCisgICAgICAgIGlmKHJsLm5l ZWRfYnJlYWsocmVxKSkNCisgICAgICAgIHsNCisgICAgICAgICAgamFtKCk7DQor ICAgICAgICAgIG5kYmluZm9fc2VuZF9zY2FuX2JyZWFrKHNpZ25hbCwgcmVxLCBy bCwgdGFibGVJZCwgY29sdW1uSWQpOw0KKyAgICAgICAgICByZXR1cm47DQorICAg ICAgICB9DQogICAgICAgfQ0KLSAgICAgIHN0YXJ0Q29sdW1uSWQ9IDA7DQorICAg ICAgY29sdW1uSWQgPSAwOw0KKyAgICAgIHRhYmxlSWQrKzsNCiAgICAgfQ0KIA0K LSAgICBpZigoaSA8IG51bWJlcl9uZGJpbmZvX3RhYmxlcyB8fCBqIDwgdC0+bmNv bHMpKQ0KLSAgICB7DQotICAgICAgamFtKCk7DQotICAgICAgaS0tOw0KLSAgICAg IGRiaW5mb19yYXRlbGltaXRfc2VuZGNvbmYoc2lnbmFsLCByZXEsIHJsLCAoaSA8 PCA4KSB8IGopOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgIGph bSgpOw0KLSAgICAgIERiaW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZvU2NhbkNv bmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gICAgICBjb25mLT50YWJs ZUlkPSByZXEudGFibGVJZDsNCi0gICAgICBjb25mLT5zZW5kZXJSZWY9IHJlcS5z ZW5kZXJSZWY7DQotICAgICAgY29uZi0+YXBpVHhuSWQ9IHJlcS5hcGlUeG5JZDsN Ci0gICAgICBjb25mLT5yZXF1ZXN0SW5mbz0gMDsNCi0gICAgICBzZW5kU2lnbmFs KHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsIHNpZ25hbCwNCi0g ICAgICAgICAgICAgICAgIERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5ndGgsIEpC Qik7DQotICAgIH0NCisgICAgLy8gQWxsIHRhYmxlcyBhbmQgY29sdW1ucyBzZW50 DQorICAgIHJlcS5jdXJzb3Jfc3ogPSAwOyAvLyBDbG9zZSBjdXJzb3INCisgICAg bmRiaW5mb19zZW5kX3NjYW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0KIA0KICAg ICBicmVhazsNCisgIH0NCiANCiAgIGRlZmF1bHQ6DQorICB7DQogICAgIGphbSgp Ow0KIA0KICAgICBuZGJhc3NlcnQodGFibGVJZCA+IDEpOw0KIA0KLSAgICBpZihz aWduYWwtPmdldExlbmd0aCgpID09IERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0 aCkNCi0gICAgew0KLSAgICAgIC8qDQotICAgICAgICogV2UndmUgZ290dGVuIGEg cmVxdWVzdCBmcm9tIGFwcGxpY2F0aW9uLCBmaXJzdA0KLSAgICAgICAqIFNjYW5S ZXEgc2lnbmFsLiBzdGFydCBmcm9tIGJlZ2lubmluZw0KLSAgICAgICAqLw0KKyAg ICAvL3ByaW50U2lnbmFsSGVhZGVyKHN0ZG91dCwgc2lnbmFsLT5oZWFkZXIsIDk5 LCA5OCwgdHJ1ZSk7DQorICAgIC8vcHJpbnREQklORk9fU0NBTihzdGRvdXQsIHNp Z25hbC0+dGhlRGF0YSwgc2lnbmFsLT5nZXRMZW5ndGgoKSwgMCk7DQogDQorICAg IGlmIChOZGJpbmZvOjpTY2FuQ3Vyc29yOjpnZXRIYXNNb3JlRGF0YShjdXJzb3It PmZsYWdzKSB8fA0KKyAgICAgICAgZmluZF9uZXh0KGN1cnNvcikpDQorICAgIHsN CiAgICAgICBqYW0oKTsNCisgICAgICBuZGJyZXF1aXJlKGN1cnNvci0+Y3VyclJl Zik7DQogDQotICAgICAgRGJpbmZvU2NhblJlcSBpcmVxPSAqKERiaW5mb1NjYW5S ZXEqKXNpZ25hbC0+dGhlRGF0YTsNCi0gICAgICBEYmluZm9TY2FuUmVxICpvcmVx PSAoRGJpbmZvU2NhblJlcSopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLQ0K LSAgICAgIG1lbWNweShzaWduYWwtPmdldERhdGFQdHJTZW5kKCksJmlyZXEsRGJp bmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoKnNpemVvZihVaW50MzIpKTsNCi0gICAg ICBvcmVxLT5zZW5kZXJSZWY9IHJlZmVyZW5jZSgpOw0KLSAgICAgIG9yZXEtPmN1 cnNvci5jdXJfcmVxdWVzdEluZm89IDA7DQotICAgICAgb3JlcS0+Y3Vyc29yLmN1 cl9ub2RlPSAwOw0KLSAgICAgIG9yZXEtPmN1cnNvci5jdXJfYmxvY2s9IERCSU5G TzsNCi0gICAgICBvcmVxLT5jdXJzb3IuY3VyX2l0ZW09IDA7DQotDQotICAgICAg Zm9yKG9yZXEtPmN1cnNvci5jdXJfbm9kZT0gMDsNCi0gICAgICAgICAgIWNfYWxp dmVOb2Rlcy5nZXQob3JlcS0+Y3Vyc29yLmN1cl9ub2RlKTsNCi0gICAgICAgICAg b3JlcS0+Y3Vyc29yLmN1cl9ub2RlKyspDQotICAgICAgICA7DQorICAgICAgLy8g Q09ORiBvciBSRUYgc2hvdWxkIGJlIHNlbnQgYmFjayBoZXJlDQorICAgICAgY3Vy c29yLT5zZW5kZXJSZWYgPSByZWZlcmVuY2UoKTsNCiANCi0gICAgICBzZW5kU2ln bmFsKG51bWJlclRvUmVmKERCSU5GTyxvcmVxLT5jdXJzb3IuY3VyX25vZGUpLCBH U05fREJJTkZPX1NDQU5SRVEsDQotICAgICAgICAgICAgICAgICBzaWduYWwsIERi aW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7DQorICAg ICAgLy8gU2VuZCBTQ0FOUkVRDQorICAgICAgTUVNQ09QWV9OT19XT1JEUyhyZXFf cHRyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgJnJlcSwgc2lnbmFsX2xlbmd0 aCk7DQorICAgICAgc2VuZFNpZ25hbChjdXJzb3ItPmN1cnJSZWYsDQorICAgICAg ICAgICAgICAgICBHU05fREJJTkZPX1NDQU5SRVEsDQorICAgICAgICAgICAgICAg ICBzaWduYWwsIHNpZ25hbF9sZW5ndGgsIEpCQik7DQogICAgIH0NCiAgICAgZWxz ZQ0KICAgICB7DQotICAgICAgLyoqDQotICAgICAgICogV2UgaGF2ZSBhIGN1cnNv ciwgc28gd2UgbmVlZCB0byBjb250aW51ZSBzY2FubmluZy4NCi0gICAgICAgKi8N CisgICAgICAvLyBTY2FuIGlzIGRvbmUsIHNlbmQgU0NBTkNPTkYgYmFjayB0byBj YWxsZXINCiAgICAgICBqYW0oKTsNCi0gICAgICBpbnQgbmV4dF9kYmluZm9fYmxv Y2s9IDA7DQotICAgICAgaWYocmVxLmN1cnNvci5jdXJfYmxvY2sgIT0gREJJTkZP KQ0KLSAgICAgIHsNCi0gICAgICAgIHdoaWxlKGRiaW5mb19ibG9ja3NbbmV4dF9k YmluZm9fYmxvY2tdICE9IHJlcS5jdXJzb3IuY3VyX2Jsb2NrDQotICAgICAgICAg ICAgJiYgZGJpbmZvX2Jsb2Nrc1tuZXh0X2RiaW5mb19ibG9ja10gIT0gMCkNCi0g ICAgICAgIHsNCi0gICAgICAgICAgamFtKCk7DQotICAgICAgICAgIG5leHRfZGJp bmZvX2Jsb2NrKys7DQotICAgICAgICB9DQotICAgICAgfQ0KLQ0KLSAgICAgIERi aW5mb1NjYW5SZXEgaXJlcT0gKihEYmluZm9TY2FuUmVxKilzaWduYWwtPnRoZURh dGE7DQotICAgICAgRGJpbmZvU2NhblJlcSAqb3JlcT0gKERiaW5mb1NjYW5SZXEq KXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0NCi0gICAgICBtZW1jcHkoc2ln bmFsLT5nZXREYXRhUHRyU2VuZCgpLCZpcmVxLHNpZ25hbC0+Z2V0TGVuZ3RoKCkq c2l6ZW9mKFVpbnQzMikpOw0KLSAgICAgIG9yZXEtPnNlbmRlclJlZj0gcmVmZXJl bmNlKCk7IC8vbWFydHkNCi0gICAgICBvcmVxLT5jdXJzb3IuY3VyX2Jsb2NrPSBk YmluZm9fYmxvY2tzW25leHRfZGJpbmZvX2Jsb2NrXTsNCi0NCi0gICAgICBzZW5k U2lnbmFsKG51bWJlclRvUmVmKG9yZXEtPmN1cnNvci5jdXJfYmxvY2ssIG9yZXEt PmN1cnNvci5jdXJfbm9kZSksDQotICAgICAgICAgICAgICAgICBHU05fREJJTkZP X1NDQU5SRVEsDQotICAgICAgICAgICAgICAgICBzaWduYWwsIHNpZ25hbC0+Z2V0 TGVuZ3RoKCksIEpCQik7DQorICAgICAgRGJpbmZvU2NhbkNvbmYgKmFwaWNvbmY9 IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KKyAg ICAgIE1FTUNPUFlfTk9fV09SRFMoYXBpY29uZiwgJnJlcSwgRGJpbmZvU2NhbkNv bmY6OlNpZ25hbExlbmd0aCk7DQorICAgICAgLy8gU2V0IGN1cnNvcl9zeiBiYWNr IHRvIDAgdG8gaW5kaWNhdGUgZW5kIG9mIHNjYW4NCisgICAgICBhcGljb25mLT5j dXJzb3Jfc3ogPSAwOw0KKyAgICAgIHNlbmRTaWduYWwocmVzdWx0UmVmLCBHU05f REJJTkZPX1NDQU5DT05GLCBzaWduYWwsDQorICAgICAgICAgICAgICAgICBEYmlu Zm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoLCBKQkIpOw0KICAgICB9DQogICAgIGJy ZWFrOw0KLSAgfTsNCisgIH0NCisgIH0NCiB9DQogDQogdm9pZCBEYmluZm86OmV4 ZWNEQklORk9fU0NBTkNPTkYoU2lnbmFsICpzaWduYWwpDQogew0KLSAgY29uc3Qg RGJpbmZvU2NhbkNvbmYgY29uZj0gKihEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5n ZXREYXRhUHRyKCk7DQorICBjb25zdCBEYmluZm9TY2FuQ29uZiogY29uZl9wdHI9 IChjb25zdCBEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRyKCk7DQor ICAvLyBDb3B5IHNpZ25hbCBvbiBzdGFjaw0KKyAgY29uc3QgRGJpbmZvU2NhbkNv bmYgY29uZj0gKmNvbmZfcHRyOw0KIA0KICAgamFtRW50cnkoKTsNCiANCi0gIGNv bnN0IFVpbnQzMiB0YWJsZUlkPSBjb25mLnRhYmxlSWQ7DQotICBjb25zdCBVaW50 MzIgc2VuZGVyUmVmPSBjb25mLnNlbmRlclJlZjsNCi0gIGNvbnN0IFVpbnQzMiBh cGlSZWY9IGNvbmYuYXBpUmVmOw0KLSAgY29uc3QgVWludDMyIGFwaVR4bklkPSBj b25mLmFwaVR4bklkOw0KLSAgLy9jb25zdCBVaW50MzIgY29sQml0bWFwTG89IGNv bmYuY29sQml0bWFwTG87DQotICAvL2NvbnN0IFVpbnQzMiBjb2xCaXRtYXBIaT0g Y29uZi5jb2xCaXRtYXBIaTsNCi0NCi0gIC8vIFZhbGlkYXRlIHRhYmxlSWQNCi0g IG5kYmFzc2VydCh0YWJsZUlkIDwgbnVtYmVyX25kYmluZm9fdGFibGVzKTsNCisg IC8vcHJpbnREQklORk9fU0NBTihzdGRvdXQsIHNpZ25hbC0+dGhlRGF0YSwgc2ln bmFsLT5nZXRMZW5ndGgoKSwgMCk7DQogDQotICBEYmluZm9TY2FuUmVxICpvcmVx PSAoRGJpbmZvU2NhblJlcSopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KKyAg VWludDMyIHNpZ25hbF9sZW5ndGggPSBzaWduYWwtPmdldExlbmd0aCgpOw0KKyAg bmRicmVxdWlyZShzaWduYWxfbGVuZ3RoID09DQorICAgICAgICAgICAgIERiaW5m b1NjYW5SZXE6OlNpZ25hbExlbmd0aCtOZGJpbmZvOjpTY2FuQ3Vyc29yOjpMZW5n dGgpOw0KKyAgbmRicmVxdWlyZShjb25mLmN1cnNvcl9zeiA9PSBOZGJpbmZvOjpT Y2FuQ3Vyc29yOjpMZW5ndGgpOw0KIA0KLSAgbWVtY3B5KHNpZ25hbC0+Z2V0RGF0 YVB0clNlbmQoKSwmY29uZixzaWduYWwtPmdldExlbmd0aCgpKnNpemVvZihVaW50 MzIpKTsNCisgIC8vIFZhbGlkYXRlIHRhYmxlSWQNCisgIGNvbnN0IFVpbnQzMiB0 YWJsZUlkPSBjb25mLnRhYmxlSWQ7DQorICBuZGJhc3NlcnQodGFibGVJZCA8IE5k YmluZm86OmdldE51bVRhYmxlcygpKTsNCiANCi0gIGlmKGNvbmYucmVxdWVzdElu Zm8gJiBEYmluZm9TY2FuQ29uZjo6TW9yZURhdGEpDQotICB7DQotICAgIC8qDQot ICAgICAqIENvbnRpbnVlIGEgRFVNUCBzY2FuIG9mIERCSU5GTyB0YWJsZSAoaGl0 IG1heHJvd3MvbWF4Ynl0ZXMpDQotICAgICAqLw0KLSAgICBqYW0oKTsNCi0gICAg b3JlcS0+cmVxdWVzdEluZm8gJj0gfihEYmluZm9TY2FuUmVxOjpTdGFydFNjYW4p Ow0KLSAgICBzZW5kU2lnbmFsKG51bWJlclRvUmVmKG9yZXEtPmN1cnNvci5jdXJf YmxvY2ssIG9yZXEtPmN1cnNvci5jdXJfbm9kZSksDQotICAgICAgICAgICAgICAg R1NOX0RCSU5GT19TQ0FOUkVRLA0KLSAgICAgICAgICAgICAgIHNpZ25hbCwgc2ln bmFsLT5nZXRMZW5ndGgoKSwgSkJCKTsNCi0gICAgcmV0dXJuOw0KLSAgfQ0KKyAg Y29uc3QgVWludDMyIHJlc3VsdFJlZiA9IGNvbmYucmVzdWx0UmVmOw0KIA0KLSAg aW50IG5leHRfZGJpbmZvX2Jsb2NrPSAwOw0KKyAgLy8gQ29weSBjdXJzb3Igb24g c3RhY2sNCisgIG5kYnJlcXVpcmUoY29uZi5jdXJzb3Jfc3opOw0KKyAgTmRiaW5m bzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNjYW5DdXJz b3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmY29uZik7DQogDQotICBpZihz aWduYWwtPmdldExlbmd0aCgpID09IERiaW5mb1NjYW5Db25mOjpEb25lTGVuZ3Ro KSAvLyB3ZSBoYXZlIHRoZSBBQ0sgZnJvbSBhIERVTVAgaW5pdGlhdGVkIHNjYW4N CisgIGlmIChOZGJpbmZvOjpTY2FuQ3Vyc29yOjpnZXRIYXNNb3JlRGF0YShjdXJz b3ItPmZsYWdzKSB8fCBjb25mLnJldHVybmVkUm93cykNCiAgIHsNCisgICAgLy8g UmF0ZSBsaW1pdCBicmVhaywgcGFzcyB0aHJvdWdoIHRvIEFQSQ0KICAgICBqYW0o KTsNCi0gICAgbmRib3V0X2MoIkZJTklTSEVEIERCSU5GTyBEVU1QIFNjYW4gb24g JXUiLHNpZ25hbC0+dGhlRGF0YVswXSk7DQorICAgIG5kYnJlcXVpcmUoY3Vyc29y LT5jdXJyUmVmKTsNCisgICAgRGJpbmZvU2NhbkNvbmYgKmFwaWNvbmYgPSAoRGJp bmZvU2NhbkNvbmYqKSBzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQorICAgIE1F TUNPUFlfTk9fV09SRFMoYXBpY29uZiwgJmNvbmYsIHNpZ25hbF9sZW5ndGgpOw0K KyAgICBzZW5kU2lnbmFsKHJlc3VsdFJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwg c2lnbmFsLCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KICAgICByZXR1cm47DQogICB9 DQogDQotICBpZihjb25mLmN1cnNvci5jdXJfYmxvY2sgIT0gREJJTkZPKQ0KKyAg aWYgKGZpbmRfbmV4dChjdXJzb3IpKQ0KICAgew0KICAgICBqYW0oKTsNCi0gICAg d2hpbGUoZGJpbmZvX2Jsb2Nrc1tuZXh0X2RiaW5mb19ibG9ja10gIT0gY29uZi5j dXJzb3IuY3VyX2Jsb2NrDQotICAgICAgICAgICYmIGRiaW5mb19ibG9ja3NbbmV4 dF9kYmluZm9fYmxvY2tdICE9IDApDQotICAgIHsNCi0gICAgICBqYW0oKTsNCi0g ICAgICBuZXh0X2RiaW5mb19ibG9jaysrOw0KLSAgICB9DQotICB9DQorICAgIG5k YnJlcXVpcmUoY3Vyc29yLT5jdXJyUmVmKTsNCiANCi0gIG5leHRfZGJpbmZvX2Js b2NrKys7DQorICAgIC8vIENPTkYgb3IgUkVGIHNob3VsZCBiZSBzZW50IGJhY2sg aGVyZQ0KKyAgICBjdXJzb3ItPnNlbmRlclJlZiA9IHJlZmVyZW5jZSgpOw0KIA0K LSAgaWYoZGJpbmZvX2Jsb2Nrc1tuZXh0X2RiaW5mb19ibG9ja10hPTApDQotICB7 DQotICAgIGphbSgpOw0KLSAgICBvcmVxLT5jdXJzb3IuY3VyX2Jsb2NrPSBkYmlu Zm9fYmxvY2tzW25leHRfZGJpbmZvX2Jsb2NrXTsNCi0gIH0NCi0gIGVsc2UNCi0g IHsNCi0gICAgZm9yKG9yZXEtPmN1cnNvci5jdXJfbm9kZSsrOw0KLSAgICAgICAg IWNfYWxpdmVOb2Rlcy5nZXQob3JlcS0+Y3Vyc29yLmN1cl9ub2RlKQ0KLSAgICAg ICAgICAmJiBvcmVxLT5jdXJzb3IuY3VyX25vZGUgPCBNQVhfTkRCX05PREVTOw0K LSAgICAgICAgb3JlcS0+Y3Vyc29yLmN1cl9ub2RlKyspDQotICAgICAgOw0KLQ0K LSAgICBpZihvcmVxLT5jdXJzb3IuY3VyX25vZGUgPCBNQVhfTkRCX05PREVTKQ0K LSAgICB7DQotICAgICAgamFtKCk7DQotICAgICAgb3JlcS0+Y3Vyc29yLmN1cl9y ZXF1ZXN0SW5mbz0gMDsNCi0gICAgICBvcmVxLT5jdXJzb3IuY3VyX2Jsb2NrPSBE QklORk87DQotICAgICAgb3JlcS0+Y3Vyc29yLmN1cl9pdGVtPSAwOw0KLSAgICB9 DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgIGphbSgpOw0KLSAgICAgIERiaW5m b1NjYW5Db25mICphcGljb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0 RGF0YVB0clNlbmQoKTsNCi0gICAgICBhcGljb25mLT50YWJsZUlkPSB0YWJsZUlk Ow0KLSAgICAgIGFwaWNvbmYtPnNlbmRlclJlZj0gc2VuZGVyUmVmOw0KLSAgICAg IGFwaWNvbmYtPmFwaVR4bklkPSBhcGlUeG5JZDsNCi0gICAgICBzZW5kU2lnbmFs KGFwaVJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLA0KLSAgICAgICAg ICAgICAgICAgRGJpbmZvU2NhbkNvbmY6OkRvbmVMZW5ndGgsIEpCQik7DQotICAg ICAgcmV0dXJuOw0KLSAgICB9DQorICAgIC8vIFNlbmQgU0NBTlJFUQ0KKyAgICBN RU1DT1BZX05PX1dPUkRTKHNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKSwNCisgICAg ICAgICAgICAgICAgICAgICAmY29uZiwgc2lnbmFsX2xlbmd0aCk7DQorICAgIHNl bmRTaWduYWwoY3Vyc29yLT5jdXJyUmVmLA0KKyAgICAgICAgICAgICAgIEdTTl9E QklORk9fU0NBTlJFUSwNCisgICAgICAgICAgICAgICBzaWduYWwsIHNpZ25hbF9s ZW5ndGgsIEpCQik7DQorICAgIHJldHVybjsNCiAgIH0NCiANCi0gIHNlbmRTaWdu YWwobnVtYmVyVG9SZWYob3JlcS0+Y3Vyc29yLmN1cl9ibG9jaywgb3JlcS0+Y3Vy c29yLmN1cl9ub2RlKSwNCi0gICAgICAgICAgICAgR1NOX0RCSU5GT19TQ0FOUkVR LA0KLSAgICAgICAgICAgICBzaWduYWwsIHNpZ25hbC0+Z2V0TGVuZ3RoKCksIEpC Qik7DQorICAvLyBTY2FuIGlzIGRvbmUsIHNlbmQgU0NBTkNPTkYgYmFjayB0byBj YWxsZXINCisgIGphbSgpOw0KKyAgRGJpbmZvU2NhbkNvbmYgKmFwaWNvbmYgPSAo RGJpbmZvU2NhbkNvbmYqKSBzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQorICBN RU1DT1BZX05PX1dPUkRTKGFwaWNvbmYsICZjb25mLCBEYmluZm9TY2FuQ29uZjo6 U2lnbmFsTGVuZ3RoKTsNCisNCisgIC8vIFNldCBjdXJzb3Jfc3ogYmFjayB0byAw IHRvIGluZGljYXRlIGVuZCBvZiBzY2FuDQorICBhcGljb25mLT5jdXJzb3Jfc3og PSAwOw0KKyAgc2VuZFNpZ25hbChyZXN1bHRSZWYsIEdTTl9EQklORk9fU0NBTkNP TkYsIHNpZ25hbCwNCisgICAgICAgICAgICAgRGJpbmZvU2NhbkNvbmY6OlNpZ25h bExlbmd0aCwgSkJCKTsNCisgIHJldHVybjsNCiB9DQogDQogDQoNCj09PSBtb2Rp ZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8v RGJpbmZvLmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tz L2RiaW5mby9EYmluZm8uaHBwCTIwMDktMDYtMjQgMjA6NTY6NTEgKzAwMDANCisr KyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9EYmluZm8u aHBwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0xLDQgKzEsNSBAQA0K LS8qIENvcHlyaWdodCAoQykgMjAwNyBNeVNRTCBBQg0KKy8qIENvcHlyaWdodCAo QykgMjAwNy0yMDA4IE15U1FMIEFCLCAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5j Lg0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIGxp Y2Vuc2UgdGVybXMuDQogDQogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiAgICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQ0KQEAgLTQ5LDYgKzUwLDkgQEAgcHJvdGVjdGVk Og0KICAgdm9pZCBleGVjUkVBRF9DT05GSUdfUkVRKFNpZ25hbCopOw0KICAgdm9p ZCBleGVjRFVNUF9TVEFURV9PUkQoU2lnbmFsKiBzaWduYWwpOw0KIA0KKyAgVWlu dDMyIGZpbmRfbmV4dF9ub2RlKFVpbnQzMiBub2RlKSBjb25zdDsNCisgIFVpbnQz MiBmaW5kX25leHRfYmxvY2soVWludDMyIGJsb2NrKSBjb25zdDsNCisgIGJvb2wg ZmluZF9uZXh0KE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvcikgY29uc3Q7DQog ICB2b2lkIGV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKnNpZ25hbCk7DQogICB2 b2lkIGV4ZWNEQklORk9fU0NBTkNPTkYoU2lnbmFsICpzaWduYWwpOw0KIA0KDQo9 PT0gcmVtb3ZlZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9k YmluZm8vbmRiaW5mb19oZWxwZXJzLmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3Ny Yy9rZXJuZWwvYmxvY2tzL2RiaW5mby9uZGJpbmZvX2hlbHBlcnMuY3BwCTIwMDkt MDYtMjQgMjE6MzM6MDYgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJu ZWwvYmxvY2tzL2RiaW5mby9uZGJpbmZvX2hlbHBlcnMuY3BwCTE5NzAtMDEtMDEg MDA6MDA6MDAgKzAwMDANCkBAIC0xLDYxICswLDAgQEANCi0jaW5jbHVkZSAiRGJp bmZvLmhwcCINCi0jaW5jbHVkZSA8bmRiaW5mby5oPg0KLSNpbmNsdWRlIDxBdHRy aWJ1dGVIZWFkZXIuaHBwPg0KLSNpbmNsdWRlIDxzaWduYWxkYXRhL0RiaW5mb1Nj YW4uaHBwPg0KLQ0KLXZvaWQgZGJpbmZvX3dyaXRlX3Jvd19pbml0KHN0cnVjdCBk YmluZm9fcm93ICpyLCBjaGFyKiBidWYsIGludCBsZW4pDQotew0KLSAgci0+YnVm ID0gci0+Y3VyciA9IChVaW50MzIqKWJ1ZjsNCi0gIHItPmVuZCA9IHItPmJ1ZiAr IGxlbjsNCi0gIHItPmNvbF9jb3VudCA9IDA7DQotfQ0KLQ0KLWludCBkYmluZm9f d3JpdGVfcm93X2NvbHVtbihzdHJ1Y3QgZGJpbmZvX3JvdyAqciwgY29uc3QgY2hh ciogY29sLCBpbnQgY2xlbikNCi17DQotICAvLyBDcmVhdGUgQXR0cmlidXRlSGVh ZGVyDQotICBBdHRyaWJ1dGVIZWFkZXIgYWgoci0+Y29sX2NvdW50KyssIGNsZW4p Ow0KLSAgY29uc3QgVWludDMyIGhlYWRlcl9zeiA9IGFoLmdldEhlYWRlclNpemUo KTsNCi0gIGNvbnN0IFVpbnQzMiBkYXRhX3N6ID0gYWguZ2V0RGF0YVNpemUoKTsN Ci0NCi0gIC8vIENoZWNrIHJvdyBidWZmZXIgc3BhY2UNCi0gIGlmKChoZWFkZXJf c3ogKyBkYXRhX3N6KSA+IChVaW50MzIpKHItPmVuZCAtIHItPmN1cnIpKQ0KLSAg ew0KLSAgICBuZGJvdXRfYygiV2FybmluZywgdG9vIHNtYWxsIG5kYmluZm8gcm93 IGJ1ZmZlciIpOw0KLSAgICBhc3NlcnQoZmFsc2UpOw0KLSAgICByZXR1cm4gLTE7 IC8vIE5vdCBlbm91Z2ggcm9vbS4NCi0gIH0NCi0NCi0gIC8vIFdyaXRlIEF0dHJp YnV0ZUhlYWRlciB0byBidWZmZXINCi0gIGFoLmluc2VydEhlYWRlcihyLT5jdXJy KTsNCi0gIHItPmN1cnIgKz0gaGVhZGVyX3N6Ow0KLQ0KLSAgLy8gV3JpdGUgZGF0 YSB0byBidWZmZXINCi0gIG1lbWNweShyLT5jdXJyLCBjb2wsIGNsZW4pOw0KLSAg ci0+Y3VyciArPSBkYXRhX3N6Ow0KLQ0KLSAgYXNzZXJ0KHItPmN1cnIgPD0gci0+ ZW5kKTsNCi0gIHJldHVybiAwOw0KLX0NCi0NCi1pbnQgZGJpbmZvX3dyaXRlX3Jv d19jb2x1bW5fdWludDMyKHN0cnVjdCBkYmluZm9fcm93ICpyLCBVaW50MzIgdmFs dWUpDQotew0KLSAgcmV0dXJuIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKHIsIChj aGFyKikmdmFsdWUsIHNpemVvZihVaW50MzIpKTsNCi19DQotDQotdm9pZCBkYmlu Zm9fcmF0ZWxpbWl0X2luaXQoc3RydWN0IGRiaW5mb19yYXRlbGltaXQgKnJsLCBj b25zdCBEYmluZm9TY2FuUmVxICpyKQ0KLXsNCi0gIHJsLT5tYXhSb3dzPSByLT5t YXhSb3dzOw0KLSAgcmwtPm1heEJ5dGVzPSByLT5tYXhCeXRlczsNCi0gIHJsLT5y b3dzX3RvdGFsPSByLT5yb3dzX3RvdGFsOw0KLSAgcmwtPmJ5dGVzX3RvdGFsPSBy LT53b3JkX3RvdGFsOw0KLSAgcmwtPnJvd3M9IDA7DQotICBybC0+Ynl0ZXM9IDA7 DQotfQ0KLQ0KLWludCBkYmluZm9fcmF0ZWxpbWl0X2NvbnRpbnVlKHN0cnVjdCBk YmluZm9fcmF0ZWxpbWl0ICpybCkNCi17DQotICBpZigoKHJsLT5tYXhSb3dzPT0w KSB8fCAocmwtPm1heFJvd3MgPiBybC0+cm93cykpDQotICAgICAmJiAoKHJsLT5t YXhCeXRlcz09MCkgfHwgKHJsLT5tYXhCeXRlcyA+IHJsLT5ieXRlcykpICkNCi0g ICAgcmV0dXJuIDE7DQotICByZXR1cm4gMDsNCi19DQoNCj09PSByZW1vdmVkIGZp bGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9uZGJpbmZv X3RhYmxlaWRzLmgnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nr cy9kYmluZm8vbmRiaW5mb190YWJsZWlkcy5oCTIwMDgtMTAtMDUgMDc6MTQ6MjEg KzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5m by9uZGJpbmZvX3RhYmxlaWRzLmgJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMA0K QEAgLTEsMjEgKzAsMCBAQA0KLQ0KLSNpZm5kZWYgTkRCSU5GT19UQUJMRUlEU19I DQotI2RlZmluZSBOREJJTkZPX1RBQkxFSURTX0gNCi0NCi0jaWZkZWYgX19jcGx1 c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0NCi0jZGVmaW5lIE5EQklO Rk9fVEFCTEVTX1RBQkxFSUQgICAgMA0KLSNkZWZpbmUgTkRCSU5GT19DT0xVTU5T X1RBQkxFSUQgICAxDQotI2RlZmluZSBOREJJTkZPX01FTVVTQUdFX1RBQkxFSUQg IDINCi0jZGVmaW5lIE5EQklORk9fTE9HREVTVElOQVRJT05fVEFCTEVJRCAgMw0K LSNkZWZpbmUgTkRCSU5GT19CQUNLVVBfUkVDT1JEU19UQUJMRUlEIDQNCi0jZGVm aW5lIE5EQklORk9fQkFDS1VQX1BBUkFNRVRFUlNfVEFCTEVJRCA1DQotI2RlZmlu ZSBOREJJTkZPX1BPT0xTX1RBQkxFSUQgICAgICAgICAgICAgICAgICAgICA2DQot DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZg0KLQ0KLSNlbmRpZg0K DQo9PT0gcmVtb3ZlZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nr cy9kYmluZm8vbmRiaW5mb190YWJsZXMuaCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3Ny Yy9rZXJuZWwvYmxvY2tzL2RiaW5mby9uZGJpbmZvX3RhYmxlcy5oCTIwMDktMDYt MTUgMTM6MzE6MzcgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwv YmxvY2tzL2RiaW5mby9uZGJpbmZvX3RhYmxlcy5oCTE5NzAtMDEtMDEgMDA6MDA6 MDAgKzAwMDANCkBAIC0xLDEzMyArMCwwIEBADQotLyogQ29weXJpZ2h0IChDKSAy MDA3IE15U1FMIEFCDQotDQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCi0gICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQ0KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4NCi0NCi0gICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwNCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KLSAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUN Ci0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lg0KLQ0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQotICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCi0g ICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwg Qm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBICovDQotI2lmbmRlZiBOREJJTkZP X1RBQkxFU19IDQotI2RlZmluZSBOREJJTkZPX1RBQkxFU19IDQotDQotI2luY2x1 ZGUgPG5kYmluZm8uaD4NCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4g IkMiIHsNCi0jZW5kaWYNCi0NCi0vKiogUmVzZXJ2ZWQgZm9yIERCSU5GTyBvbmx5 ICovDQotREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fVEFCTEVTLDMpDQot ICAgICA9IHsgIlRBQkxFUyIsIDMsIDAsDQotICAgICAgICB7DQotICAgICAgICAg IHsiVEFCTEVfSUQiLCAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICAgICAg IHsiVEFCTEVfTkFNRSIsTkRCSU5GT19UWVBFX1NUUklOR30sDQotICAgICAgICAg IHsiQ1JFQVRFX1NRTCIsTkRCSU5GT19UWVBFX1NUUklOR30sDQotICAgICAgICB9 fTsNCi0NCi0vKiogUmVzZXJ2ZWQgZm9yIERCSU5GTyBvbmx5ICovDQotREVDTEFS RV9OREJJTkZPX1RBQkxFKG5kYmluZm9fQ09MVU1OUyw0KQ0KLSAgICAgPSB7ICJD T0xVTU5TIiwgNCwgMCwNCi0gICAgICAgIHsNCi0gICAgICAgICAgeyJUQUJMRV9J RCIsICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgICAgICB7IkNPTFVN Tl9JRCIsICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICAgICAgIHsiQ09M VU1OX05BTUUiLCBOREJJTkZPX1RZUEVfU1RSSU5HfSwNCi0gICAgICAgICAgeyJD T0xVTU5fVFlQRSIsIE5EQklORk9fVFlQRV9TVFJJTkd9LA0KLSAgICAgICAgfX07 DQotDQotREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fTUVNVVNBR0UsNykN Ci0gICAgID0geyAiTUVNVVNBR0UiLCA3LCAwLA0KLSAgICAgICAgew0KLSAgICAg ICAgICB7Ik5PREVfSUQiLCAgICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwN Ci0gICAgICAgICAgeyJCTE9DS19OVU1CRVIiLCAgICAgTkRCSU5GT19UWVBFX05V TUJFUn0sDQotICAgICAgICAgIHsiQkxPQ0tfSU5TVEFOQ0UiLCAgIE5EQklORk9f VFlQRV9OVU1CRVJ9LA0KLSAgICAgICAgICB7IlJFU09VUkNFX05BTUUiLCAgICBO REJJTkZPX1RZUEVfU1RSSU5HfSwNCi0gICAgICAgICAgeyJQQUdFX1NJWkUiLCAg ICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICAgICAgIHsiUEFHRVNf VVNFRCIsICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgICAgICB7 IlBBR0VTX1RPVEFMIiwgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAg ICAgIH19Ow0KLQ0KLURFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX0xPR0RF U1RJTkFUSU9OLDUpID0NCi17ICJMT0dERVNUSU5BVElPTiIsIDUsIDAsDQotIHsN Ci0gICB7Ik5PREVfSUQiLE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgIHsiVFlQ RSIsTkRCSU5GT19UWVBFX1NUUklOR30sDQotICAgeyJQQVJBTVMiLE5EQklORk9f VFlQRV9TVFJJTkd9LA0KLSAgIHsiQ1VSUkVOVF9TSVpFIixOREJJTkZPX1RZUEVf TlVNQkVSfSwNCi0gICB7Ik1BWF9TSVpFIixOREJJTkZPX1RZUEVfTlVNQkVSfSwN Ci0gfQ0KLX07DQotDQotREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fQkFD S1VQX1JFQ09SRFMsMTEpDQotPSB7ICJCQUNLVVBfUkVDT1JEUyIsIDExLCAwLA0K LSAgIHsNCi0gICAgIHsiTk9ERV9JRCIsICAgICAgICAgIE5EQklORk9fVFlQRV9O VU1CRVJ9LA0KLSAgICAgeyJCQUNLVVBfUkVDT1JEIiwgICAgTkRCSU5GT19UWVBF X05VTUJFUn0sDQotICAgICB7IkJBQ0tVUF9JRCIsICAgICAgICBOREJJTkZPX1RZ UEVfTlVNQkVSfSwNCi0gICAgIHsiTUFTVEVSX1JFRiIsICAgICAgIE5EQklORk9f VFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJDTElFTlRfUkVGIiwgICAgICAgTkRCSU5G T19UWVBFX05VTUJFUn0sDQotICAgICB7IlNUQVRFIiwgICAgICAgICAgICBOREJJ TkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQllURVMiLCAgICAgICAgICAgIE5E QklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJSRUNPUkRTIiwgICAgICAgICAg TkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IkxPR19CWVRFUyIsICAgICAg ICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiTE9HX1JFQ09SRFMiLCAg ICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJFUlJPUl9DT0RFIiwg ICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgfQ0KLX07DQotDQotREVD TEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fQkFDS1VQX1BBUkFNRVRFUlMsMTQp DQotPSB7ICJCQUNLVVBfUEFSQU1FVEVSUyIsIDE0LCAwLA0KLSAgIHsNCi0gICAg IHsiTk9ERV9JRCIsICAgICAgICAgICAgICAgICAgTkRCSU5GT19UWVBFX05VTUJF Un0sDQotICAgICB7IkNVUlJFTlRfRElTS19XUklURV9TUEVFRCIsIE5EQklORk9f VFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJCWVRFU19XUklUVEVOX1RISVNfUEVSSU9E IixOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiT1ZFUkZMT1dfRElTS19X UklURSIsICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IlJFU0VU X0RFTEFZX1VTRUQiLCAgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAg ICAgeyJSRVNFVF9ESVNLX1NQRUVEX1RJTUUiLCAgICBOREJJTkZPX1RZUEVfTlVN QkVSfSwNCi0gICAgIHsiQkFDS1VQX1BPT0xfU0laRSIsICAgICAgICAgTkRCSU5G T19UWVBFX05VTUJFUn0sDQotICAgICB7IkJBQ0tVUF9GSUxFX1BPT0xfU0laRSIs ICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJUQUJMRV9QT09MX1NJ WkUiLCAgICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiVFJJ R0dFUl9QT09MX1NJWkUiLCAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQot ICAgICB7IkZSQUdNRU5UX1BPT0xfU0laRSIsICAgICAgIE5EQklORk9fVFlQRV9O VU1CRVJ9LA0KLSAgICAgeyJQQUdFX1BPT0xfU0laRSIsICAgICAgICAgICBOREJJ TkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQ09NUFJFU1NFRF9CQUNLVVAiLCAg ICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IkNPTVBSRVNTRURf TENQIiwgICAgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgIH0NCi19 Ow0KLQ0KLURFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX1BPT0xTLDYpDQot PSB7ICJQT09MUyIsIDYsIDAsDQotICAgew0KLSAgICAgeyJOT0RFX0lEIiwgICAg ICAgICAgICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQkxP Q0tfTlVNQkVSIiwgICAgICAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQot ICAgICB7IkJMT0NLX0lOU1RBTkNFIiwgICAgICAgICAgIE5EQklORk9fVFlQRV9O VU1CRVJ9LA0KLSAgICAgeyJQT09MX05BTUUiLCAgICAgICAgICAgICAgICBOREJJ TkZPX1RZUEVfU1RSSU5HfSwNCi0gICAgIHsiRlJFRSIsICAgICAgICAgICAgICAg ICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IlNJWkUiLCAgICAg ICAgICAgICAgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgIH0NCi19 Ow0KLQ0KLXN0YXRpYyBVaW50MzIgbnVtYmVyX25kYmluZm9fdGFibGVzPSA3Ow0K LQ0KLSNkZWZpbmUgREJJTkZPVEJMKHgpIChzdHJ1Y3QgbmRiaW5mb190YWJsZSop JngNCi0NCi1zdHJ1Y3QgbmRiaW5mb190YWJsZSAqbmRiaW5mb190YWJsZXNbXSA9 IHsNCi0gIERCSU5GT1RCTChuZGJpbmZvX1RBQkxFUyksDQotICBEQklORk9UQkwo bmRiaW5mb19DT0xVTU5TKSwNCi0gIERCSU5GT1RCTChuZGJpbmZvX01FTVVTQUdF KSwNCi0gIERCSU5GT1RCTChuZGJpbmZvX0xPR0RFU1RJTkFUSU9OKSwNCi0gIERC SU5GT1RCTChuZGJpbmZvX0JBQ0tVUF9SRUNPUkRTKSwNCi0gIERCSU5GT1RCTChu ZGJpbmZvX0JBQ0tVUF9QQVJBTUVURVJTKSwNCi0gIERCSU5GT1RCTChuZGJpbmZv X1BPT0xTKSwNCi19Ow0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5k aWYNCi0NCi0jZW5kaWYNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvYmxvY2tzL2RidGMvRGJ0Y01haW4uY3BwJw0KLS0tIGEvc3Rv cmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0Yy9EYnRjTWFpbi5jcHAJMjAw OS0wNi0xNSAxMzozMTozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3MvZGJ0Yy9EYnRjTWFpbi5jcHAJMjAwOS0wNy0wMyAxMDozMToz MCArMDAwMA0KQEAgLTg4LDggKzg4LDYgQEANCiANCiAjaW5jbHVkZSA8c2lnbmFs ZGF0YS9EYmluZm9TY2FuLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9UcmFu c0lkQUkuaHBwPg0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+DQotI2luY2x1ZGUgPGRi aW5mby9uZGJpbmZvX3RhYmxlaWRzLmg+DQogDQogDQogLy8gVXNlIERFQlVHIHRv IHByaW50IG1lc3NhZ2VzIHRoYXQgc2hvdWxkIGJlDQpAQCAtMTIyNzYsMTQgKzEy Mjc0LDEzIEBAIERidGM6OmV4ZWNEVU1QX1NUQVRFX09SRChTaWduYWwqIHNpZ25h bCkNCiB2b2lkIERidGM6OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKnNpZ25h bCkNCiB7DQogICBEYmluZm9TY2FuUmVxIHJlcT0gKihEYmluZm9TY2FuUmVxKilz aWduYWwtPnRoZURhdGE7DQotICBjaGFyIGJ1Zls1MTJdOw0KLSAgc3RydWN0IGRi aW5mb19yb3cgcjsNCi0gIHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0IHJsOw0KLSAg ZGJpbmZvX3JhdGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQorICBjb25zdCBOZGJp bmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRiaW5mbzo6U2NhbkN1 cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKCZyZXEpOw0KKyAgTmRiaW5m bzo6UmF0ZWxpbWl0IHJsOw0KIA0KICAgamFtRW50cnkoKTsNCiANCi0gIGlmKHJl cS50YWJsZUlkID09IE5EQklORk9fUE9PTFNfVEFCTEVJRCkNCisgIGlmKHJlcS50 YWJsZUlkID09IE5kYmluZm86OlBPT0xTX1RBQkxFSUQpDQogICB7DQogICAgIHN0 cnVjdCB7DQogICAgICAgY29uc3QgY2hhciogcG9vbG5hbWU7DQpAQCAtMTIzMTIs NjMgKzEyMzA5LDMwIEBAIHZvaWQgRGJ0Yzo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNp Z25hbCAqc2kNCiAgICAgICAgICAgeyBOVUxMLCAwLCAwfQ0KICAgICAgICAgfTsN CiANCisgICAgVWludDMyIHBvb2wgPSBjdXJzb3ItPmRhdGFbMF07DQogICAgIEJs b2NrTnVtYmVyIGJuID0gYmxvY2tUb01haW4obnVtYmVyKCkpOw0KLSAgICBmb3Io aW50IGk9MDsgcG9vbHNbaV0ucG9vbG5hbWU7IGkrKykNCi0gICAgew0KLSAgICAg IGRiaW5mb193cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQot ICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBnZXRPd25O b2RlSWQoKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMy KCZyLCBibik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCi0gICAgICBkYmlu Zm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHJlcS5pbnN0YW5jZSk7IC8v IGJsb2NrIGluc3RhbmNlDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4o JnIsIHBvb2xzW2ldLnBvb2xuYW1lLCBzdHJsZW4ocG9vbHNbaV0ucG9vbG5hbWUp KTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBv b2xzW2ldLmZyZWUpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3Vp bnQzMigmciwgcG9vbHNbaV0uc2l6ZSk7DQotICAgICAgZGJpbmZvX3NlbmRfcm93 KHNpZ25hbCwgciwgcmwsIHJlcS5hcGlUeG5JZCwgcmVxLmFwaVJlZik7DQotICAg IH0NCi0gIH0NCi0NCi0gIC8qICBpZihyZXEtPnRhYmxlSWQgPT0NCi0gIGRiaW5m b19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KLQ0KLSAgICBpZighKHJlcS5y ZXF1ZXN0SW5mbyAmIERiaW5mb1NjYW5SZXE6OlN0YXJ0U2NhbikpDQotICAgICAg c3RhcnRpZD0gcmVxLmN1cl9pdGVtOw0KLQ0KLSAgICBmb3IoaT1zdGFydGlkO2Ri aW5mb19yYXRlbGltaXRfY29udGludWUoJnJsKSAmJiBpPG51bWJlcl9uZGJpbmZv X3RhYmxlcztpKyspDQorICAgIHdoaWxlKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKQ0K ICAgICB7DQogICAgICAgamFtKCk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19p bml0KCZyLCBidWYsIHNpemVvZihidWYpKTsNCi0gICAgICBuZGJpbmZvX2NyZWF0 ZV9zcWwobmRiaW5mb190YWJsZXNbaV0sDQotICAgICAgICAgICAgICAgICAgICAg ICAgIGNyZWF0ZV9zcWwsIHNpemVvZihjcmVhdGVfc3FsKSk7DQotDQotICAgICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIChjaGFyKikmaSwgc2l6ZW9mKGkp KTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgbmRiaW5mb190 YWJsZXNbaV0tPm5hbWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RybGVuKG5kYmluZm9fdGFibGVzW2ldLT5uYW1lKSk7DQotICAgICAgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW4oJnIsIGNyZWF0ZV9zcWwsIHN0cmxlbihjcmVhdGVf c3FsKSk7DQotDQotICAgICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCxyLHJsLGFw aVR4bklkLGFwaVJlZik7DQotICAgIH0NCi0NCi0gICAgaWYoIWRiaW5mb19yYXRl bGltaXRfY29udGludWUoJnJsKSAmJiBpIDwgbnVtYmVyX25kYmluZm9fdGFibGVz KQ0KLSAgICB7DQotICAgICAgamFtKCk7DQotICAgICAgZGJpbmZvX3JhdGVsaW1p dF9zZW5kY29uZihzaWduYWwscmVxLHJsLGkpOw0KLSAgICB9DQotICAgIGVsc2UN Ci0gICAgew0KLSAgICAgIERiaW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZvU2Nh bkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gICAgICBjb25mLT50 YWJsZUlkPSByZXEudGFibGVJZDsNCi0gICAgICBjb25mLT5zZW5kZXJSZWY9IHJl cS5zZW5kZXJSZWY7DQotICAgICAgY29uZi0+YXBpVHhuSWQ9IHJlcS5hcGlUeG5J ZDsNCi0gICAgICBjb25mLT5yZXF1ZXN0SW5mbz0gMDsNCi0gICAgICBzZW5kU2ln bmFsKHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsIHNpZ25hbCwN Ci0gICAgICAgICAgICAgICAgIERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5ndGgs IEpCQik7DQorICAgICAgTmRiaW5mbzo6Um93IHJvdyhzaWduYWwsIHJlcSk7DQor ICAgICAgcm93LndyaXRlX3VpbnQzMihnZXRPd25Ob2RlSWQoKSk7DQorICAgICAg cm93LndyaXRlX3VpbnQzMihibik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXIN CisgICAgICByb3cud3JpdGVfdWludDMyKGluc3RhbmNlKCkpOyAvLyBibG9jayBp bnN0YW5jZQ0KKyAgICAgIHJvdy53cml0ZV9zdHJpbmcocG9vbHNbcG9vbF0ucG9v bG5hbWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocG9vbHNbcG9vbF0uZnJl ZSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29sXS5zaXplKTsN CisgICAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCByb3csIHJsKTsN CisgICAgICBwb29sKys7DQorICAgICAgaWYgKHJsLm5lZWRfYnJlYWsocmVxKSkN CisgICAgICB7DQorICAgICAgICBqYW0oKTsNCisgICAgICAgIG5kYmluZm9fc2Vu ZF9zY2FuX2JyZWFrKHNpZ25hbCwgcmVxLCBybCwgcG9vbCk7DQorICAgICAgICBy ZXR1cm47DQorICAgICAgfQ0KICAgICB9DQotICAqLw0KKyAgfQ0KIA0KLSAgRGJp bmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXRE YXRhUHRyU2VuZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJlcSwgRGJpbmZvU2NhblJl cTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciAqIHNpemVvZihVaW50MzIpKTsNCi0g IGNvbmYtPnJlcXVlc3RJbmZvICY9IH4oRGJpbmZvU2NhbkNvbmY6Ok1vcmVEYXRh KTsNCi0gIHNlbmRTaWduYWwocmVxLnNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FO Q09ORiwNCi0gICAgICAgICAgICAgc2lnbmFsLCBEYmluZm9TY2FuQ29uZjo6U2ln bmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsNCisgIG5kYmluZm9fc2VuZF9zY2Fu X2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCiB9DQogDQogYm9vbA0KDQo9PT0gbW9k aWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0dXAv RGJ0dXBEZWJ1Zy5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Js b2Nrcy9kYnR1cC9EYnR1cERlYnVnLmNwcAkyMDA5LTA2LTE1IDEzOjMxOjM3ICsw MDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnR1cC9E YnR1cERlYnVnLmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMzAs OCArMzAsNiBAQA0KIA0KICNpbmNsdWRlIDxzaWduYWxkYXRhL0RiaW5mb1NjYW4u aHBwPg0KICNpbmNsdWRlIDxzaWduYWxkYXRhL1RyYW5zSWRBSS5ocHA+DQotI2lu Y2x1ZGUgPG5kYmluZm8uaD4NCi0jaW5jbHVkZSA8ZGJpbmZvL25kYmluZm9fdGFi bGVpZHMuaD4NCiANCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQpAQCAtNzYs MzMgKzc0LDI4IEBAIHZvaWQgRGJ0dXA6OmV4ZWNEQklORk9fU0NBTlJFUShTaWdu YWwqIHMNCiB7DQogICBqYW1FbnRyeSgpOw0KICAgRGJpbmZvU2NhblJlcSByZXE9 ICooRGJpbmZvU2NhblJlcSopc2lnbmFsLT50aGVEYXRhOw0KLSAgY29uc3QgVWlu dDMyIHJlcWxlbmd0aD0gc2lnbmFsLT5nZXRMZW5ndGgoKTsNCisgIGNvbnN0IE5k YmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChOZGJpbmZvOjpTY2Fu Q3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoJnJlcSk7DQogDQotICBj b25zdCBVaW50MzIgdGFibGVJZD0gcmVxLnRhYmxlSWQ7DQotICBjb25zdCBVaW50 MzIgaW5zdGFuY2U9IHJlcS5pbnN0YW5jZTsNCisgIE5kYmluZm86OlJhdGVsaW1p dCBybDsNCiANCi0gIGNoYXIgYnVmWzEwMjRdOw0KLSAgc3RydWN0IGRiaW5mb19y b3cgcjsNCi0gIHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0IHJsOw0KLQ0KLSAgZGJp bmZvX3JhdGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQotDQotICBpZih0YWJsZUlk ID09IE5EQklORk9fTUVNVVNBR0VfVEFCTEVJRCkNCisgIGlmKHJlcS50YWJsZUlk ID09IE5kYmluZm86Ok1FTVVTQUdFX1RBQkxFSUQpDQogICB7DQogICAgIGphbSgp Ow0KLSAgICBkYmluZm9fd3JpdGVfcm93X2luaXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1 ZikpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGdl dE93bk5vZGVJZCgpKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWlu dDMyKCZyLCBibG9ja1RvTWFpbihudW1iZXIoKSkpOy8vIGJsb2NrIG51bWJlcg0K LSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGluc3RhbmNl KTsgICAgICAgICAgICAgLy8gYmxvY2sgaW5zdGFuY2UNCi0gICAgZGJpbmZvX3dy aXRlX3Jvd19jb2x1bW4oJnIsICJEYXRhTWVtb3J5IiwgMTApOw0KLSAgICBVaW50 MzIgcGFnZV9zaXplX2tiPSBzaXplb2YoUGFnZSk7Ow0KLSAgICBkYmluZm9fd3Jp dGVfcm93X2NvbHVtbigmciwgKGNoYXIqKSZwYWdlX3NpemVfa2IsIDQpOyAvLyA4 a2INCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBjVG90 Tm9GcmFnUGFnZXMpOyAvLyBhbGxvY2VkIHBhZ2VzDQotICAgIGRiaW5mb193cml0 ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY1RvdFBhZ2VzKTsgLy8gbnVtYmVyIG9m IHBhZ2VzDQotICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwscixybCxyZXEuYXBp VHhuSWQscmVxLmFwaVJlZik7DQorICAgIE5kYmluZm86OlJvdyByb3coc2lnbmFs LCByZXEpOw0KKyAgICByb3cud3JpdGVfdWludDMyKGdldE93bk5vZGVJZCgpKTsN CisgICAgcm93LndyaXRlX3VpbnQzMihibG9ja1RvTWFpbihudW1iZXIoKSkpOyAv LyBibG9jayBudW1iZXINCisgICAgcm93LndyaXRlX3VpbnQzMihpbnN0YW5jZSgp KTsgICAgICAgICAgICAvLyBibG9jayBpbnN0YW5jZQ0KKyAgICByb3cud3JpdGVf c3RyaW5nKCJEYXRhTWVtb3J5Iik7DQorICAgIHJvdy53cml0ZV91aW50MzIoc2l6 ZW9mKFBhZ2UpKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihjVG90Tm9GcmFnUGFn ZXMpOyAgICAgICAvLyBhbGxvY2VkIHBhZ2VzDQorICAgIHJvdy53cml0ZV91aW50 MzIoY1RvdFBhZ2VzKTsgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHBhZ2VzDQor ICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwpOw0KKw0K ICAgfQ0KLSAgaWYocmVxLnRhYmxlSWQgPT0gTkRCSU5GT19QT09MU19UQUJMRUlE KQ0KKyAgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6UE9PTFNfVEFCTEVJRCkN CiAgIHsNCisgICAgamFtKCk7DQogICAgIHN0cnVjdCB7DQogICAgICAgY29uc3Qg Y2hhciogcG9vbG5hbWU7DQogICAgICAgVWludDMyIGZyZWU7DQpAQCAtMTMzLDI1 ICsxMjYsNTIgQEAgdm9pZCBEYnR1cDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25h bCogcw0KICAgICAgICAgICB7IE5VTEwsIDAsIDB9DQogICAgICAgICB9Ow0KIA0K KyAgICBVaW50MzIgcG9vbCA9IGN1cnNvci0+ZGF0YVswXTsNCiAgICAgQmxvY2tO dW1iZXIgYm4gPSBibG9ja1RvTWFpbihudW1iZXIoKSk7DQotICAgIGZvcihpbnQg aT0wOyBwb29sc1tpXS5wb29sbmFtZTsgaSsrKQ0KKyAgICB3aGlsZShwb29sc1tw b29sXS5wb29sbmFtZSkNCiAgICAgew0KLSAgICAgIGRiaW5mb193cml0ZV9yb3df aW5pdCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgZGJpbmZvX3dyaXRl X3Jvd19jb2x1bW5fdWludDMyKCZyLCBnZXRPd25Ob2RlSWQoKSk7DQotICAgICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBibik7ICAgICAgIC8v IGJsb2NrIG51bWJlcg0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3Vp bnQzMigmciwgaW5zdGFuY2UpOyAvLyBibG9jayBpbnN0YW5jZQ0KLSAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCBwb29sc1tpXS5wb29sbmFtZSwgc3Ry bGVuKHBvb2xzW2ldLnBvb2xuYW1lKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jv d19jb2x1bW5fdWludDMyKCZyLCBwb29sc1tpXS5mcmVlKTsNCi0gICAgICBkYmlu Zm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLnNpemUpOw0K LSAgICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCByZXEuYXBpVHhu SWQsIHJlcS5hcGlSZWYpOw0KKyAgICAgIGphbSgpOw0KKyAgICAgIE5kYmluZm86 OlJvdyByb3coc2lnbmFsLCByZXEpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIo Z2V0T3duTm9kZUlkKCkpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoYm4pOyAg ICAgICAgICAgLy8gYmxvY2sgbnVtYmVyDQorICAgICAgcm93LndyaXRlX3VpbnQz MihpbnN0YW5jZSgpKTsgLy8gYmxvY2sgaW5zdGFuY2UNCisgICAgICByb3cud3Jp dGVfc3RyaW5nKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKTsNCisgICAgICByb3cud3Jp dGVfdWludDMyKHBvb2xzW3Bvb2xdLmZyZWUpOw0KKyAgICAgIHJvdy53cml0ZV91 aW50MzIocG9vbHNbcG9vbF0uc2l6ZSk7DQorICAgICAgbmRiaW5mb19zZW5kX3Jv dyhzaWduYWwsIHJlcSwgcm93LCBybCk7DQorICAgICAgcG9vbCsrOw0KKyAgICAg IGlmIChybC5uZWVkX2JyZWFrKHJlcSkpDQorICAgICAgew0KKyAgICAgICAgamFt KCk7DQorICAgICAgICBuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhzaWduYWwsIHJl cSwgcmwsIHBvb2wpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCisgICAg fQ0KKyAgfQ0KKyAgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6VEVTVF9UQUJM RUlEKQ0KKyAgew0KKyAgICBVaW50MzIgY291bnRlciA9IGN1cnNvci0+ZGF0YVsw XTsNCisgICAgQmxvY2tOdW1iZXIgYm4gPSBibG9ja1RvTWFpbihudW1iZXIoKSk7 DQorICAgIHdoaWxlKGNvdW50ZXIgPCAxMDAwKQ0KKyAgICB7DQorICAgICAgamFt KCk7DQorICAgICAgTmRiaW5mbzo6Um93IHJvdyhzaWduYWwsIHJlcSk7DQorICAg ICAgcm93LndyaXRlX3VpbnQzMihnZXRPd25Ob2RlSWQoKSk7DQorICAgICAgcm93 LndyaXRlX3VpbnQzMihibik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCisg ICAgICByb3cud3JpdGVfdWludDMyKGluc3RhbmNlKCkpOyAvLyBibG9jayBpbnN0 YW5jZQ0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoY291bnRlcik7DQorICAgICAg bmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7DQorICAgICAg Y291bnRlcisrOw0KKyAgICAgIGlmIChybC5uZWVkX2JyZWFrKHJlcSkpDQorICAg ICAgew0KKyAgICAgICAgamFtKCk7DQorICAgICAgICBuZGJpbmZvX3NlbmRfc2Nh bl9icmVhayhzaWduYWwsIHJlcSwgcmwsIGNvdW50ZXIpOw0KKyAgICAgICAgcmV0 dXJuOw0KKyAgICAgIH0NCiAgICAgfQ0KICAgfQ0KIA0KLSAgRGJpbmZvU2NhbkNv bmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRyU2Vu ZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJlcSwgcmVxbGVuZ3RoICogc2l6ZW9mKFVp bnQzMikpOw0KLSAgY29uZi0+cmVxdWVzdEluZm8gJj0gfihEYmluZm9TY2FuQ29u Zjo6TW9yZURhdGEpOw0KLSAgc2VuZFNpZ25hbChyZXEuc2VuZGVyUmVmLCBHU05f REJJTkZPX1NDQU5DT05GLA0KLSAgICAgICAgICAgICBzaWduYWwsIERiaW5mb1Nj YW5Db25mOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIpOw0KKyAgbmRiaW5m b19zZW5kX3NjYW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0KIH0NCiANCiAjaWZk ZWYgVk1fVFJBQ0UNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3Ny Yy9rZXJuZWwvYmxvY2tzL2RidHV4L0RidHV4RGVidWcuY3BwJw0KLS0tIGEvc3Rv cmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0dXgvRGJ0dXhEZWJ1Zy5jcHAJ MjAwOS0wNi0xNSAxMzozMTozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC9ibG9ja3MvZGJ0dXgvRGJ0dXhEZWJ1Zy5jcHAJMjAwOS0wNy0wMyAx MDozMTozMCArMDAwMA0KQEAgLTIxLDIwICsyMSwxOCBAQA0KIA0KICNpbmNsdWRl IDxzaWduYWxkYXRhL0RiaW5mb1NjYW4uaHBwPg0KICNpbmNsdWRlIDxzaWduYWxk YXRhL1RyYW5zSWRBSS5ocHA+DQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCi0jaW5j bHVkZSA8ZGJpbmZvL25kYmluZm9fdGFibGVpZHMuaD4NCisNCiANCiB2b2lkIERi dHV4OjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpzaWduYWwpDQogew0KICAg RGJpbmZvU2NhblJlcSByZXE9ICooRGJpbmZvU2NhblJlcSopc2lnbmFsLT50aGVE YXRhOw0KLSAgY2hhciBidWZbNTEyXTsNCi0gIHN0cnVjdCBkYmluZm9fcm93IHI7 DQotICBzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCBybDsNCi0gIGRiaW5mb19yYXRl bGltaXRfaW5pdCgmcmwsICZyZXEpOw0KKyAgY29uc3QgTmRiaW5mbzo6U2NhbkN1 cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNjYW5DdXJzb3IqKURiaW5m b1NjYW46OmdldEN1cnNvclB0cigmcmVxKTsNCisgIE5kYmluZm86OlJhdGVsaW1p dCBybDsNCiANCiAgIGphbUVudHJ5KCk7DQogDQotICBpZihyZXEudGFibGVJZCA9 PSBOREJJTkZPX1BPT0xTX1RBQkxFSUQpDQorICBpZihyZXEudGFibGVJZCA9PSBO ZGJpbmZvOjpQT09MU19UQUJMRUlEKQ0KICAgew0KICAgICBzdHJ1Y3Qgew0KICAg ICAgIGNvbnN0IGNoYXIqIHBvb2xuYW1lOw0KQEAgLTY2LDI1ICs2NCwzMCBAQCB2 b2lkIERidHV4OjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpzDQogICAgICAg ICAgIHsgTlVMTCwgMCwgMH0NCiAgICAgICAgIH07DQogDQorICAgIFVpbnQzMiBw b29sID0gY3Vyc29yLT5kYXRhWzBdOw0KICAgICBCbG9ja051bWJlciBibiA9IGJs b2NrVG9NYWluKG51bWJlcigpKTsNCi0gICAgZm9yKGludCBpPTA7IHBvb2xzW2ld LnBvb2xuYW1lOyBpKyspDQorICAgIHdoaWxlKHBvb2xzW3Bvb2xdLnBvb2xuYW1l KQ0KICAgICB7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0KCZyLCBidWYs IHNpemVvZihidWYpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91 aW50MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0gICAgICBkYmluZm9fd3JpdGVf cm93X2NvbHVtbl91aW50MzIoJnIsIGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51 bWJlcg0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwg cmVxLmluc3RhbmNlKTsgLy8gYmxvY2sgaW5zdGFuY2UNCi0gICAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbigmciwgcG9vbHNbaV0ucG9vbG5hbWUsIHN0cmxlbihw b29sc1tpXS5wb29sbmFtZSkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29s dW1uX3VpbnQzMigmciwgcG9vbHNbaV0uZnJlZSk7DQotICAgICAgZGJpbmZvX3dy aXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29sc1tpXS5zaXplKTsNCi0gICAg ICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLCByLCBybCwgcmVxLmFwaVR4bklkLCBy ZXEuYXBpUmVmKTsNCisgICAgICBqYW0oKTsNCisgICAgICBOZGJpbmZvOjpSb3cg cm93KHNpZ25hbCwgcmVxKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKGdldE93 bk5vZGVJZCgpKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKGJuKTsgICAgICAg ICAgIC8vIGJsb2NrIG51bWJlcg0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoaW5z dGFuY2UoKSk7IC8vIGJsb2NrIGluc3RhbmNlDQorICAgICAgcm93LndyaXRlX3N0 cmluZyhwb29sc1twb29sXS5wb29sbmFtZSk7DQorICAgICAgcm93LndyaXRlX3Vp bnQzMihwb29sc1twb29sXS5mcmVlKTsNCisgICAgICByb3cud3JpdGVfdWludDMy KHBvb2xzW3Bvb2xdLnNpemUpOw0KKyAgICAgIG5kYmluZm9fc2VuZF9yb3coc2ln bmFsLCByZXEsIHJvdywgcmwpOw0KKyAgICAgIHBvb2wrKzsNCisgICAgICBpZiAo cmwubmVlZF9icmVhayhyZXEpKQ0KKyAgICAgIHsNCisgICAgICAgIGphbSgpOw0K KyAgICAgICAgbmRiaW5mb19zZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCByZXEsIHJs LCBwb29sKTsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9DQogICAgIH0NCiAg IH0NCiANCi0gIERiaW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZvU2NhbkNvbmYq KXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gIG1lbWNweShjb25mLCZyZXEs IERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IgKiBzaXplb2Yo VWludDMyKSk7DQotICBjb25mLT5yZXF1ZXN0SW5mbyAmPSB+KERiaW5mb1NjYW5D b25mOjpNb3JlRGF0YSk7DQotICBzZW5kU2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdT Tl9EQklORk9fU0NBTkNPTkYsDQotICAgICAgICAgICAgIHNpZ25hbCwgRGJpbmZv U2NhbkNvbmY6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7DQorICBuZGJp bmZvX3NlbmRfc2Nhbl9jb25mKHNpZ25hbCwgcmVxLCBybCk7DQogfQ0KIA0KIC8q DQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Js b2Nrcy9kYnV0aWwvRGJVdGlsLmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9r ZXJuZWwvYmxvY2tzL2RidXRpbC9EYlV0aWwuY3BwCTIwMDktMDYtMTUgMTM6MzE6 MzcgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2Ri dXRpbC9EYlV0aWwuY3BwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC00 NCw4ICs0NCw2IEBADQogDQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvRGJpbmZvU2Nh bi5ocHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJLmhwcD4NCi0j aW5jbHVkZSA8bmRiaW5mby5oPg0KLSNpbmNsdWRlIDxkYmluZm8vbmRiaW5mb190 YWJsZWlkcy5oPg0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAq IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQEAgLTY4NiwxNSArNjg0LDEzIEBA IERiVXRpbDo6ZXhlY0RVTVBfU1RBVEVfT1JEKFNpZ25hbCogc2lnbmENCiB2b2lk IERiVXRpbDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqc2lnbmFsKQ0KIHsN CiAgIERiaW5mb1NjYW5SZXEgcmVxPSAqKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+ dGhlRGF0YTsNCi0gIGNoYXIgYnVmWzUxMl07DQotICBzdHJ1Y3QgZGJpbmZvX3Jv dyByOw0KLSAgc3RydWN0IGRiaW5mb19yYXRlbGltaXQgcmw7DQotDQotICBkYmlu Zm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCisgIGNvbnN0IE5kYmluZm86 OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChOZGJpbmZvOjpTY2FuQ3Vyc29y KilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoJnJlcSk7DQorICBOZGJpbmZvOjpS YXRlbGltaXQgcmw7DQogDQogICBqYW1FbnRyeSgpOw0KIA0KLSAgaWYocmVxLnRh YmxlSWQgPT0gTkRCSU5GT19QT09MU19UQUJMRUlEKQ0KKyAgaWYocmVxLnRhYmxl SWQgPT0gTmRiaW5mbzo6UE9PTFNfVEFCTEVJRCkNCiAgIHsNCiAgICAgc3RydWN0 IHsNCiAgICAgICBjb25zdCBjaGFyKiBwb29sbmFtZTsNCkBAIC03MjYsMjUgKzcy MiwzMCBAQCB2b2lkIERiVXRpbDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAq DQogICAgICAgICAgIHsgTlVMTCwgMCwgMH0NCiAgICAgICAgIH07DQogDQorICAg IFVpbnQzMiBwb29sID0gY3Vyc29yLT5kYXRhWzBdOw0KICAgICBCbG9ja051bWJl ciBibiA9IGJsb2NrVG9NYWluKG51bWJlcigpKTsNCi0gICAgZm9yKGludCBpPTA7 IHBvb2xzW2ldLnBvb2xuYW1lOyBpKyspDQorICAgIHdoaWxlKHBvb2xzW3Bvb2xd LnBvb2xuYW1lKQ0KICAgICB7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0 KCZyLCBidWYsIHNpemVvZihidWYpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93 X2NvbHVtbl91aW50MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0gICAgICBkYmlu Zm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGJuKTsgICAgICAgICAgIC8v IGJsb2NrIG51bWJlcg0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3Vp bnQzMigmciwgcmVxLmluc3RhbmNlKTsgLy8gYmxvY2sgaW5zdGFuY2UNCi0gICAg ICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgcG9vbHNbaV0ucG9vbG5hbWUs IHN0cmxlbihwb29sc1tpXS5wb29sbmFtZSkpOw0KLSAgICAgIGRiaW5mb193cml0 ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcG9vbHNbaV0uZnJlZSk7DQotICAgICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29sc1tpXS5zaXpl KTsNCi0gICAgICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLCByLCBybCwgcmVxLmFw aVR4bklkLCByZXEuYXBpUmVmKTsNCisgICAgICBqYW0oKTsNCisgICAgICBOZGJp bmZvOjpSb3cgcm93KHNpZ25hbCwgcmVxKTsNCisgICAgICByb3cud3JpdGVfdWlu dDMyKGdldE93bk5vZGVJZCgpKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKGJu KTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJlcg0KKyAgICAgIHJvdy53cml0ZV91 aW50MzIoaW5zdGFuY2UoKSk7IC8vIGJsb2NrIGluc3RhbmNlDQorICAgICAgcm93 LndyaXRlX3N0cmluZyhwb29sc1twb29sXS5wb29sbmFtZSk7DQorICAgICAgcm93 LndyaXRlX3VpbnQzMihwb29sc1twb29sXS5mcmVlKTsNCisgICAgICByb3cud3Jp dGVfdWludDMyKHBvb2xzW3Bvb2xdLnNpemUpOw0KKyAgICAgIG5kYmluZm9fc2Vu ZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwpOw0KKyAgICAgIHBvb2wrKzsNCisg ICAgICBpZiAocmwubmVlZF9icmVhayhyZXEpKQ0KKyAgICAgIHsNCisgICAgICAg IGphbSgpOw0KKyAgICAgICAgbmRiaW5mb19zZW5kX3NjYW5fYnJlYWsoc2lnbmFs LCByZXEsIHJsLCBwb29sKTsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9DQog ICAgIH0NCiAgIH0NCiANCi0gIERiaW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZv U2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gIG1lbWNweShj b25mLCZyZXEsIERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3Ig KiBzaXplb2YoVWludDMyKSk7DQotICBjb25mLT5yZXF1ZXN0SW5mbyAmPSB+KERi aW5mb1NjYW5Db25mOjpNb3JlRGF0YSk7DQotICBzZW5kU2lnbmFsKHJlcS5zZW5k ZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsDQotICAgICAgICAgICAgIHNpZ25h bCwgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7 DQorICBuZGJpbmZvX3NlbmRfc2Nhbl9jb25mKHNpZ25hbCwgcmVxLCBybCk7DQog fQ0KIHZvaWQNCiBEYlV0aWw6Om11dGV4X2NyZWF0ZWQoU2lnbmFsKiBzaWduYWws IFVpbnQzMiBwdHJJLCBVaW50MzIgcmV0VmFsKXsNCg0KPT09IG1vZGlmaWVkIGZp bGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL3N1bWEvU3VtYS5jcHAn DQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9zdW1hL1N1bWEu Y3BwCTIwMDktMDYtMTUgMTM6MzE6MzcgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvYmxvY2tzL3N1bWEvU3VtYS5jcHAJMjAwOS0wNy0wMyAxMDoz MTozMCArMDAwMA0KQEAgLTYzLDggKzYzLDYgQEANCiANCiAjaW5jbHVkZSA8c2ln bmFsZGF0YS9EYmluZm9TY2FuLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9U cmFuc0lkQUkuaHBwPg0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+DQotI2luY2x1ZGUg PGRiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmg+DQogDQogI2luY2x1ZGUgPEV2ZW50 TG9nZ2VyLmhwcD4NCiBleHRlcm4gRXZlbnRMb2dnZXIgKiBnX2V2ZW50TG9nZ2Vy Ow0KQEAgLTE0OTYsMTUgKzE0OTQsMTMgQEAgU3VtYTo6ZXhlY0RVTVBfU1RBVEVf T1JEKFNpZ25hbCogc2lnbmFsKQ0KIHZvaWQgU3VtYTo6ZXhlY0RCSU5GT19TQ0FO UkVRKFNpZ25hbCAqc2lnbmFsKQ0KIHsNCiAgIERiaW5mb1NjYW5SZXEgcmVxPSAq KERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+dGhlRGF0YTsNCi0gIGNoYXIgYnVmWzUx Ml07DQotICBzdHJ1Y3QgZGJpbmZvX3JvdyByOw0KLSAgc3RydWN0IGRiaW5mb19y YXRlbGltaXQgcmw7DQotDQotICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAm cmVxKTsNCisgIGNvbnN0IE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQor ICAgIChOZGJpbmZvOjpTY2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQ dHIoJnJlcSk7DQorICBOZGJpbmZvOjpSYXRlbGltaXQgcmw7DQogDQogICBqYW1F bnRyeSgpOw0KIA0KLSAgaWYocmVxLnRhYmxlSWQgPT0gTkRCSU5GT19QT09MU19U QUJMRUlEKQ0KKyAgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6UE9PTFNfVEFC TEVJRCkNCiAgIHsNCiAgICAgc3RydWN0IHsNCiAgICAgICBjb25zdCBjaGFyKiBw b29sbmFtZTsNCkBAIC0xNTM5LDI1ICsxNTM1LDMwIEBAIHZvaWQgU3VtYTo6ZXhl Y0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqc2kNCiAgICAgICAgICAgeyBOVUxMLCAw LCAwfQ0KICAgICAgICAgfTsNCiANCisgICAgVWludDMyIHBvb2wgPSBjdXJzb3It PmRhdGFbMF07DQogICAgIEJsb2NrTnVtYmVyIGJuID0gYmxvY2tUb01haW4obnVt YmVyKCkpOw0KLSAgICBmb3IoaW50IGk9MDsgcG9vbHNbaV0ucG9vbG5hbWU7IGkr KykNCisgICAgd2hpbGUocG9vbHNbcG9vbF0ucG9vbG5hbWUpDQogICAgIHsNCi0g ICAgICBkYmluZm9fd3JpdGVfcm93X2luaXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1Zikp Ow0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgZ2V0 T3duTm9kZUlkKCkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3Vp bnQzMigmciwgYm4pOyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVyDQotICAgICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCByZXEuaW5zdGFuY2Up OyAvLyBibG9jayBpbnN0YW5jZQ0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29s dW1uKCZyLCBwb29sc1tpXS5wb29sbmFtZSwgc3RybGVuKHBvb2xzW2ldLnBvb2xu YW1lKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZy LCBwb29sc1tpXS5mcmVlKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVt bl91aW50MzIoJnIsIHBvb2xzW2ldLnNpemUpOw0KLSAgICAgIGRiaW5mb19zZW5k X3JvdyhzaWduYWwsIHIsIHJsLCByZXEuYXBpVHhuSWQsIHJlcS5hcGlSZWYpOw0K KyAgICAgIGphbSgpOw0KKyAgICAgIE5kYmluZm86OlJvdyByb3coc2lnbmFsLCBy ZXEpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3duTm9kZUlkKCkpOw0K KyAgICAgIHJvdy53cml0ZV91aW50MzIoYm4pOyAgICAgICAgICAgLy8gYmxvY2sg bnVtYmVyDQorICAgICAgcm93LndyaXRlX3VpbnQzMihpbnN0YW5jZSgpKTsgLy8g YmxvY2sgaW5zdGFuY2UNCisgICAgICByb3cud3JpdGVfc3RyaW5nKHBvb2xzW3Bv b2xdLnBvb2xuYW1lKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bv b2xdLmZyZWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocG9vbHNbcG9vbF0u c2l6ZSk7DQorICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93 LCBybCk7DQorICAgICAgcG9vbCsrOw0KKyAgICAgIGlmIChybC5uZWVkX2JyZWFr KHJlcSkpDQorICAgICAgew0KKyAgICAgICAgamFtKCk7DQorICAgICAgICBuZGJp bmZvX3NlbmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwgcmwsIHBvb2wpOw0KKyAg ICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCiAgICAgfQ0KICAgfQ0KIA0KLSAgRGJp bmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXRE YXRhUHRyU2VuZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJlcSwgRGJpbmZvU2NhblJl cTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciAqIHNpemVvZihVaW50MzIpKTsNCi0g IGNvbmYtPnJlcXVlc3RJbmZvICY9IH4oRGJpbmZvU2NhbkNvbmY6Ok1vcmVEYXRh KTsNCi0gIHNlbmRTaWduYWwocmVxLnNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FO Q09ORiwNCi0gICAgICAgICAgICAgc2lnbmFsLCBEYmluZm9TY2FuQ29uZjo6U2ln bmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsNCisgIG5kYmluZm9fc2VuZF9zY2Fu X2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCiB9DQogDQogLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioN Cg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL3RyaXgvVHJpeC5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVs L2Jsb2Nrcy90cml4L1RyaXguY3BwCTIwMDktMDYtMTUgMTM6MzE6MzcgKzAwMDAN CisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL3RyaXgvVHJpeC5j cHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTM5LDkgKzM5LDYgQEAN CiANCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9EYmluZm9TY2FuLmhwcD4NCiAjaW5j bHVkZSA8c2lnbmFsZGF0YS9UcmFuc0lkQUkuaHBwPg0KLSNpbmNsdWRlIDxuZGJp bmZvLmg+DQotI2luY2x1ZGUgPGRiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmg+DQot DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvV2FpdEdDUC5ocHA+DQogDQogI2RlZmlu ZSBDT05TVFJBSU5UX1ZJT0xBVElPTiA4OTMNCkBAIC00OTUsMTUgKzQ5MiwxMyBA QCBUcml4OjpleGVjRFVNUF9TVEFURV9PUkQoU2lnbmFsKiBzaWduYWwpDQogdm9p ZCBUcml4OjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpzaWduYWwpDQogew0K ICAgRGJpbmZvU2NhblJlcSByZXE9ICooRGJpbmZvU2NhblJlcSopc2lnbmFsLT50 aGVEYXRhOw0KLSAgY2hhciBidWZbNTEyXTsNCi0gIHN0cnVjdCBkYmluZm9fcm93 IHI7DQotICBzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCBybDsNCi0NCi0gIGRiaW5m b19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KKyAgY29uc3QgTmRiaW5mbzo6 U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNjYW5DdXJzb3Iq KURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmcmVxKTsNCisgIE5kYmluZm86OlJh dGVsaW1pdCBybDsNCiANCiAgIGphbUVudHJ5KCk7DQogDQotICBpZihyZXEudGFi bGVJZCA9PSBOREJJTkZPX1BPT0xTX1RBQkxFSUQpDQorICBpZihyZXEudGFibGVJ ZCA9PSBOZGJpbmZvOjpQT09MU19UQUJMRUlEKQ0KICAgew0KICAgICBzdHJ1Y3Qg ew0KICAgICAgIGNvbnN0IGNoYXIqIHBvb2xuYW1lOw0KQEAgLTUyMCwyNSArNTE1 LDMwIEBAIHZvaWQgVHJpeDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqc2kN CiAgICAgICAgICAgeyBOVUxMLCAwLCAwfQ0KICAgICAgICAgfTsNCiANCisgICAg VWludDMyIHBvb2wgPSBjdXJzb3ItPmRhdGFbMF07DQogICAgIEJsb2NrTnVtYmVy IGJuID0gYmxvY2tUb01haW4obnVtYmVyKCkpOw0KLSAgICBmb3IoaW50IGk9MDsg cG9vbHNbaV0ucG9vbG5hbWU7IGkrKykNCisgICAgd2hpbGUocG9vbHNbcG9vbF0u cG9vbG5hbWUpDQogICAgIHsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2luaXQo JnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3df Y29sdW1uX3VpbnQzMigmciwgZ2V0T3duTm9kZUlkKCkpOw0KLSAgICAgIGRiaW5m b193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgYm4pOyAgICAgICAgICAgLy8g YmxvY2sgbnVtYmVyDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWlu dDMyKCZyLCByZXEuaW5zdGFuY2UpOyAvLyBibG9jayBpbnN0YW5jZQ0KLSAgICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCBwb29sc1tpXS5wb29sbmFtZSwg c3RybGVuKHBvb2xzW2ldLnBvb2xuYW1lKSk7DQotICAgICAgZGJpbmZvX3dyaXRl X3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29sc1tpXS5mcmVlKTsNCi0gICAgICBk YmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLnNpemUp Ow0KLSAgICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCByZXEuYXBp VHhuSWQsIHJlcS5hcGlSZWYpOw0KKyAgICAgIGphbSgpOw0KKyAgICAgIE5kYmlu Zm86OlJvdyByb3coc2lnbmFsLCByZXEpOw0KKyAgICAgIHJvdy53cml0ZV91aW50 MzIoZ2V0T3duTm9kZUlkKCkpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoYm4p OyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVyDQorICAgICAgcm93LndyaXRlX3Vp bnQzMihpbnN0YW5jZSgpKTsgLy8gYmxvY2sgaW5zdGFuY2UNCisgICAgICByb3cu d3JpdGVfc3RyaW5nKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKTsNCisgICAgICByb3cu d3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLmZyZWUpOw0KKyAgICAgIHJvdy53cml0 ZV91aW50MzIocG9vbHNbcG9vbF0uc2l6ZSk7DQorICAgICAgbmRiaW5mb19zZW5k X3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7DQorICAgICAgcG9vbCsrOw0KKyAg ICAgIGlmIChybC5uZWVkX2JyZWFrKHJlcSkpDQorICAgICAgew0KKyAgICAgICAg amFtKCk7DQorICAgICAgICBuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhzaWduYWws IHJlcSwgcmwsIHBvb2wpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCiAg ICAgfQ0KICAgfQ0KIA0KLSAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9T Y2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgbWVtY3B5KGNv bmYsJnJlcSwgRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciAq IHNpemVvZihVaW50MzIpKTsNCi0gIGNvbmYtPnJlcXVlc3RJbmZvICY9IH4oRGJp bmZvU2NhbkNvbmY6Ok1vcmVEYXRhKTsNCi0gIHNlbmRTaWduYWwocmVxLnNlbmRl clJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwNCi0gICAgICAgICAgICAgc2lnbmFs LCBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsN CisgIG5kYmluZm9fc2VuZF9zY2FuX2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCiB9 DQogDQogLy8gQnVpbGQgaW5kZXgNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvdm0vTWFrZWZpbGUuYW0nDQotLS0gYS9zdG9yYWdl L25kYi9zcmMva2VybmVsL3ZtL01ha2VmaWxlLmFtCTIwMDktMDUtMjcgMTU6MjE6 NDUgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vTWFrZWZp bGUuYW0JMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTM4LDcgKzM4LDgg QEAgbGlia2VybmVsX2FfU09VUkNFUyA9IFwNCiAJbmRiZF9tYWxsb2NfaW1wbC5j cHAgXA0KIAlQb29sLmNwcCBXT1Bvb2wuY3BwIFJXUG9vbC5jcHAgRHluQXJyMjU2 LmNwcCBMb2NrUXVldWUuY3BwIFwNCiAJR2xvYmFsRGF0YS5jcHAgXA0KLQlTYWZl TXV0ZXguY3BwDQorCVNhZmVNdXRleC5jcHAgXA0KKwlOZGJpbmZvLmNwcA0KIA0K IGxpYnNjaGVkX2FfU09VUkNFUyA9IFRpbWVRdWV1ZS5jcHAJCVwNCiAgICAgICAg ICAgICAgICAgICAgICBUaHJlYWRDb25maWcuY3BwIFwNCkBAIC0xMjAsNCArMTIx LDMgQEAgdGVzdFNhZmVNdXRleF9MREZMQUdTID0gQG5kYl9iaW5fYW1fbGRmbA0K ICAgJCh0b3BfYnVpbGRkaXIpL3N0cmluZ3MvbGlibXlzdHJpbmdzbHQubGEgXA0K ICAgQHJlYWRsaW5lX2xpbmtAIEBURVJNQ0FQX0xJQkANCiANCi0NCg0KPT09IGFk ZGVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vTmRiaW5mby5jcHAn DQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05kYmluZm8uY3BwCTE5 NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9r ZXJuZWwvdm0vTmRiaW5mby5jcHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0K QEAgLTAsMCArMSwyOTEgQEANCisvKg0KKyAgIENvcHlyaWdodCAoQykgMjAwOSBT dW4gTWljcm9zeXN0ZW1zIEluYy4NCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLiBV c2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zLg0KKw0KKyAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5DQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UuDQorDQorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YN CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlDQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0K KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlDQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgIFVTQQ0K KyovDQorDQorI2luY2x1ZGUgIk5kYmluZm8uaHBwIg0KKyNpbmNsdWRlICJTaW11 bGF0ZWRCbG9jay5ocHAiDQorI2luY2x1ZGUgPEF0dHJpYnV0ZUhlYWRlci5ocHA+ DQorI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJLmhwcD4NCisNCitOZGJp bmZvOjpSb3c6OlJvdyhTaWduYWwqIHNpZ25hbCwgRGJpbmZvU2NhblJlcSYgcmVx KSA6DQorICBjb2xfY291bnRlcigwKSwNCisgIG1fcmVxKHJlcSkNCit7DQorICAv LyBVc2UgdGhlICJ0ZW1wb3JhcnkiIHBhcnQgb2Ygc2lnbmFsLT50aGVEYXRhIGFz IHJvdyBidWZmZXINCisgIHN0YXJ0ID0gc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgp ICsgRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoOw0KKyAgY29uc3QgVWludDMy IGRhdGFfc3ogPSBzaXplb2Yoc2lnbmFsLT50aGVEYXRhKS9zaXplb2Yoc2lnbmFs LT50aGVEYXRhWzBdKTsNCisgIGVuZCA9IHNpZ25hbC0+Z2V0RGF0YVB0clNlbmQo KSArIGRhdGFfc3o7DQorICBhc3NlcnQoc3RhcnQgPCBlbmQpOw0KKw0KKyAgY3Vy ciA9IHN0YXJ0Ow0KK30NCisNCitib29sDQorTmRiaW5mbzo6Um93OjpjaGVja19i dWZmZXJfc3BhY2UoQXR0cmlidXRlSGVhZGVyJiBhaCkgY29uc3QNCit7DQorICBj b25zdCBVaW50MzIgbmVlZGVkID0gIGFoLmdldEhlYWRlclNpemUoKSArIGFoLmdl dERhdGFTaXplKCk7DQorICBjb25zdCBVaW50MzIgYXZhaWwgPSAoVWludDMyKShl bmQgLSBjdXJyKTsNCisNCisgIGlmKG5lZWRlZCA+IGF2YWlsKQ0KKyAgew0KKyAg ICBuZGJvdXRfYygiV2FybmluZywgdG9vIHNtYWxsIHJvdyBidWZmZXIgZm9yIGF0 dHJpYnV0ZTogJWQsICINCisgICAgICAgICAgICAgIm5lZWRlZDogJWQsIGF2YWls OiAlZCIsIGFoLmdldEF0dHJpYnV0ZUlkKCksIG5lZWRlZCwgYXZhaWwpOw0KKyAg ICBhc3NlcnQoZmFsc2UpOw0KKyAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBlbm91 Z2ggcm9vbSBpbiByb3cgYnVmZmVyDQorICB9DQorICByZXR1cm4gdHJ1ZTsNCit9 DQorDQordm9pZA0KK05kYmluZm86OlJvdzo6Y2hlY2tfYXR0cmlidXRlX3R5cGUo QXR0cmlidXRlSGVhZGVyJiBhaCwgQ29sdW1uVHlwZSB0eXBlKSBjb25zdA0KK3sN CisgIGNvbnN0IFRhYmxlJiB0YWIgPSBnZXRUYWJsZShtX3JlcS50YWJsZUlkKTsN CisgIGNvbnN0IFVpbnQzMiBjb2xpZCA9IGFoLmdldEF0dHJpYnV0ZUlkKCk7DQor ICBhc3NlcnQoY29saWQgPCB0YWIubS5uY29scyk7DQorICBhc3NlcnQodGFiLmNv bFtjb2xpZF0uY29sdHlwZSA9PSB0eXBlKTsNCit9DQorDQordm9pZA0KK05kYmlu Zm86OlJvdzo6d3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIqIHN0cikNCit7DQorICBj b25zdCBzaXplX3QgY2xlbiA9IHN0cmxlbihzdHIpICsgMTsNCisgIC8vIENyZWF0 ZSBBdHRyaWJ1dGVIZWFkZXINCisgIEF0dHJpYnV0ZUhlYWRlciBhaChjb2xfY291 bnRlcisrLCBjbGVuKTsNCisgIGNoZWNrX2F0dHJpYnV0ZV90eXBlKGFoLCBOZGJp bmZvOjpTdHJpbmcpOw0KKyAgaWYgKCFjaGVja19idWZmZXJfc3BhY2UoYWgpKQ0K KyAgICByZXR1cm47DQorDQorICAvLyBXcml0ZSBBdHRyaWJ1dGVIZWFkZXIgdG8g YnVmZmVyDQorICBhaC5pbnNlcnRIZWFkZXIoY3Vycik7DQorICBjdXJyICs9IGFo LmdldEhlYWRlclNpemUoKTsNCisNCisgIC8vIFdyaXRlIGRhdGEgdG8gYnVmZmVy DQorICBtZW1jcHkoY3Vyciwgc3RyLCBjbGVuKTsNCisgIGN1cnIgKz0gYWguZ2V0 RGF0YVNpemUoKTsNCisNCisgIGFzc2VydChjdXJyIDw9IGVuZCk7DQorICByZXR1 cm47DQorfQ0KKw0KK3ZvaWQNCitOZGJpbmZvOjpSb3c6OndyaXRlX3VpbnQzMihV aW50MzIgdmFsdWUpDQorew0KKyAgLy8gQ3JlYXRlIEF0dHJpYnV0ZUhlYWRlcg0K KyAgQXR0cmlidXRlSGVhZGVyIGFoKGNvbF9jb3VudGVyKyssIHNpemVvZihVaW50 MzIpKTsNCisgIGNoZWNrX2F0dHJpYnV0ZV90eXBlKGFoLCBOZGJpbmZvOjpOdW1i ZXIpOw0KKyAgaWYgKCFjaGVja19idWZmZXJfc3BhY2UoYWgpKQ0KKyAgICByZXR1 cm47DQorDQorICAvLyBXcml0ZSBBdHRyaWJ1dGVIZWFkZXIgdG8gYnVmZmVyDQor ICBhaC5pbnNlcnRIZWFkZXIoY3Vycik7DQorICBjdXJyICs9IGFoLmdldEhlYWRl clNpemUoKTsNCisNCisgIC8vIFdyaXRlIGRhdGEgdG8gYnVmZmVyDQorICBtZW1j cHkoY3VyciwgJnZhbHVlLCBzaXplb2YoVWludDMyKSk7DQorICBjdXJyICs9IGFo LmdldERhdGFTaXplKCk7DQorDQorICBhc3NlcnQoY3VyciA8PSBlbmQpOw0KKyAg cmV0dXJuOw0KK30NCisNCisNCisjZGVmaW5lIERFQ0xBUkVfTkRCSU5GT19UQUJM RSh2YXIsIG51bSkgIFwNCitzdGF0aWMgY29uc3Qgc3RydWN0ICB7ICAgICAgICAg ICAgICAgICAgIFwNCisgIE5kYmluZm86OlRhYmxlOjpNZW1iZXJzIG07ICAgICAg ICAgICAgIFwNCisgIE5kYmluZm86OkNvbHVtbiBjb2xbbnVtXTsgICAgICAgICAg ICAgIFwNCit9IHZhcg0KKw0KKw0KKy8qKiBSZXNlcnZlZCBmb3IgREJJTkZPIG9u bHkgKi8NCitERUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19UQUJMRVMsMykg PQ0KK3sgIlRBQkxFUyIsIDMsIDAsDQorICB7DQorICAgIHsiVEFCTEVfSUQiLCAg TmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJUQUJMRV9OQU1FIixOZGJpbmZvOjpT dHJpbmd9LA0KKyAgICB7IkNSRUFURV9TUUwiLE5kYmluZm86OlN0cmluZ30sDQor ICB9fTsNCisNCisvKiogUmVzZXJ2ZWQgZm9yIERCSU5GTyBvbmx5ICovDQorREVD TEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fQ09MVU1OUyw0KSA9DQoreyAiQ09M VU1OUyIsIDQsIDAsDQorICB7DQorICAgIHsiVEFCTEVfSUQiLCAgICBOZGJpbmZv OjpOdW1iZXJ9LA0KKyAgICB7IkNPTFVNTl9JRCIsICAgTmRiaW5mbzo6TnVtYmVy fSwNCisgICAgeyJDT0xVTU5fTkFNRSIsIE5kYmluZm86OlN0cmluZ30sDQorICAg IHsiQ09MVU1OX1RZUEUiLCBOZGJpbmZvOjpTdHJpbmd9LA0KKyAgfX07DQorDQor REVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fTUVNVVNBR0UsNykgPQ0KK3sg Ik1FTVVTQUdFIiwgNywgMCwNCisgIHsNCisgICAgeyJOT0RFX0lEIiwgICAgICAg ICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJCTE9DS19OVU1CRVIiLCAgICAg TmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJCTE9DS19JTlNUQU5DRSIsICAgTmRi aW5mbzo6TnVtYmVyfSwNCisgICAgeyJSRVNPVVJDRV9OQU1FIiwgICAgTmRiaW5m bzo6U3RyaW5nfSwNCisgICAgeyJQQUdFX1NJWkUiLCAgICAgICAgTmRiaW5mbzo6 TnVtYmVyfSwNCisgICAgeyJQQUdFU19VU0VEIiwgICAgICAgTmRiaW5mbzo6TnVt YmVyfSwNCisgICAgeyJQQUdFU19UT1RBTCIsICAgICAgTmRiaW5mbzo6TnVtYmVy fSwNCisgIH19Ow0KKw0KK0RFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX0xP R0RFU1RJTkFUSU9OLDUpID0NCit7ICJMT0dERVNUSU5BVElPTiIsIDUsIDAsDQor ICB7DQorICAgIHsiTk9ERV9JRCIsTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJU WVBFIixOZGJpbmZvOjpTdHJpbmd9LA0KKyAgICB7IlBBUkFNUyIsTmRiaW5mbzo6 U3RyaW5nfSwNCisgICAgeyJDVVJSRU5UX1NJWkUiLE5kYmluZm86Ok51bWJlcn0s DQorICAgIHsiTUFYX1NJWkUiLE5kYmluZm86Ok51bWJlcn0sDQorICB9DQorfTsN CisNCitERUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19CQUNLVVBfUkVDT1JE UywxMSkgPQ0KK3sgIkJBQ0tVUF9SRUNPUkRTIiwgMTEsIDAsDQorICB7DQorICAg IHsiTk9ERV9JRCIsICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsi QkFDS1VQX1JFQ09SRCIsICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQkFD S1VQX0lEIiwgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiTUFTVEVS X1JFRiIsICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQ0xJRU5UX1JF RiIsICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiU1RBVEUiLCAgICAg ICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQllURVMiLCAgICAgICAg ICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiUkVDT1JEUyIsICAgICAgICAg IE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiTE9HX0JZVEVTIiwgICAgICAgIE5k YmluZm86Ok51bWJlcn0sDQorICAgIHsiTE9HX1JFQ09SRFMiLCAgICAgIE5kYmlu Zm86Ok51bWJlcn0sDQorICAgIHsiRVJST1JfQ09ERSIsICAgICAgIE5kYmluZm86 Ok51bWJlcn0sDQorICB9DQorfTsNCisNCitERUNMQVJFX05EQklORk9fVEFCTEUo bmRiaW5mb19CQUNLVVBfUEFSQU1FVEVSUywxNCkgPQ0KK3sgIkJBQ0tVUF9QQVJB TUVURVJTIiwgMTQsIDAsDQorICB7DQorICAgIHsiTk9ERV9JRCIsICAgICAgICAg ICAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJDVVJSRU5UX0RJU0tf V1JJVEVfU1BFRUQiLCBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkJZVEVTX1dS SVRURU5fVEhJU19QRVJJT0QiLE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiT1ZF UkZMT1dfRElTS19XUklURSIsICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAg eyJSRVNFVF9ERUxBWV9VU0VEIiwgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0K KyAgICB7IlJFU0VUX0RJU0tfU1BFRURfVElNRSIsICAgIE5kYmluZm86Ok51bWJl cn0sDQorICAgIHsiQkFDS1VQX1BPT0xfU0laRSIsICAgICAgICAgTmRiaW5mbzo6 TnVtYmVyfSwNCisgICAgeyJCQUNLVVBfRklMRV9QT09MX1NJWkUiLCAgICBOZGJp bmZvOjpOdW1iZXJ9LA0KKyAgICB7IlRBQkxFX1BPT0xfU0laRSIsICAgICAgICAg IE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiVFJJR0dFUl9QT09MX1NJWkUiLCAg ICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJGUkFHTUVOVF9QT09MX1NJ WkUiLCAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IlBBR0VfUE9PTF9T SVpFIiwgICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQ09NUFJF U1NFRF9CQUNLVVAiLCAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJD T01QUkVTU0VEX0xDUCIsICAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAg fQ0KK307DQorDQorREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fUE9PTFMs NikgPQ0KK3sgIlBPT0xTIiwgNiwgMCwNCisgIHsNCisgICAgeyJOT0RFX0lEIiwg ICAgICAgICAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkJMT0NL X05VTUJFUiIsICAgICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsi QkxPQ0tfSU5TVEFOQ0UiLCAgICAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisg ICAgeyJQT09MX05BTUUiLCAgICAgICAgICAgICAgICBOZGJpbmZvOjpTdHJpbmd9 LA0KKyAgICB7IkZSRUUiLCAgICAgICAgICAgICAgICAgICAgIE5kYmluZm86Ok51 bWJlcn0sDQorICAgIHsiU0laRSIsICAgICAgICAgICAgICAgICAgICAgTmRiaW5m bzo6TnVtYmVyfSwNCisgIH0NCit9Ow0KKw0KK0RFQ0xBUkVfTkRCSU5GT19UQUJM RShuZGJpbmZvX1RFU1QsNCkgPQ0KK3sgIlRFU1QiLCA0LCAwLA0KKyAgew0KKyAg ICB7Ik5PREVfSUQiLCAgICAgICAgICAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwN CisgICAgeyJCTE9DS19OVU1CRVIiLCAgICAgICAgICAgIE5kYmluZm86Ok51bWJl cn0sDQorICAgIHsiQkxPQ0tfSU5TVEFOQ0UiLCAgICAgICAgICBOZGJpbmZvOjpO dW1iZXJ9LA0KKyAgICB7IkNPVU5URVIiLCAgICAgICAgICAgICAgICAgTmRiaW5m bzo6TnVtYmVyfSwNCisgIH0NCit9Ow0KKw0KKyNkZWZpbmUgREJJTkZPVEJMKHgp IChOZGJpbmZvOjpUYWJsZSopJngNCisNCitzdGF0aWMgTmRiaW5mbzo6VGFibGUg Km5kYmluZm9fdGFibGVzW10gPSB7DQorICBEQklORk9UQkwobmRiaW5mb19UQUJM RVMpLA0KKyAgREJJTkZPVEJMKG5kYmluZm9fQ09MVU1OUyksDQorICBEQklORk9U QkwobmRiaW5mb19NRU1VU0FHRSksDQorICBEQklORk9UQkwobmRiaW5mb19MT0dE RVNUSU5BVElPTiksDQorICBEQklORk9UQkwobmRiaW5mb19CQUNLVVBfUkVDT1JE UyksDQorICBEQklORk9UQkwobmRiaW5mb19CQUNLVVBfUEFSQU1FVEVSUyksDQor ICBEQklORk9UQkwobmRiaW5mb19QT09MUyksDQorICBEQklORk9UQkwobmRiaW5m b19URVNUKSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbnVtYmVyX25kYmluZm9fdGFi bGVzID0NCisgIHNpemVvZihuZGJpbmZvX3RhYmxlcykgLyBzaXplb2YobmRiaW5m b190YWJsZXNbMF0pOw0KKw0KKw0KK2ludCBOZGJpbmZvOjpnZXROdW1UYWJsZXMo KXsNCisgIHJldHVybiBudW1iZXJfbmRiaW5mb190YWJsZXM7DQorfQ0KKw0KK2Nv bnN0IE5kYmluZm86OlRhYmxlJiBOZGJpbmZvOjpnZXRUYWJsZShpbnQgaSkNCit7 DQorICBhc3NlcnQoaSA+PSAwICYmIGkgPCBudW1iZXJfbmRiaW5mb190YWJsZXMp Ow0KKyAgcmV0dXJuICpuZGJpbmZvX3RhYmxlc1tpXTsNCit9DQorDQorY29uc3Qg TmRiaW5mbzo6VGFibGUmIE5kYmluZm86OmdldFRhYmxlKFVpbnQzMiBpKQ0KK3sN CisgIHJldHVybiBnZXRUYWJsZSgoaW50KWkpOw0KK30NCisNCitpbnQNCitOZGJp bmZvOjpjcmVhdGVfc3FsKGNvbnN0IE5kYmluZm86OlRhYmxlJiB0YWIsDQorICAg ICAgICAgICAgICAgICAgICBjaGFyKiBzcWwsIGludCBsZW4sDQorICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyKiBsaW5lX3NlcGFyYXRvcikNCit7DQorICBt eV9zbnByaW50ZihzcWwsbGVuLCJDUkVBVEUgVEFCTEUgYCVzYCAoIiwgdGFiLm0u bmFtZSk7DQorDQorICBsZW4tPXN0cmxlbihzcWwpOw0KKyAgc3FsKz1zdHJsZW4o c3FsKTsNCisgIGlmKGxlbjwwKQ0KKyAgICByZXR1cm4gRU5PTUVNOw0KKw0KKyAg Zm9yKGludCBpID0gMDsgaSA8IHRhYi5tLm5jb2xzOyBpKyspDQorICB7DQorICAg IG15X3NucHJpbnRmKHNxbCwgbGVuLCAiJXNcdGAlc2AgJXMsIiwNCisgICAgICAg ICAgICAgICAgbGluZV9zZXBhcmF0b3IsIHRhYi5jb2xbaV0ubmFtZSwNCisgICAg ICAgICAgICAgICAgY29sdHlwZV90b19zdHJpbmcodGFiLmNvbFtpXS5jb2x0eXBl KSk7DQorICAgIGxlbi09c3RybGVuKHNxbCk7DQorICAgIHNxbCs9c3RybGVuKHNx bCk7DQorICAgIGlmKGxlbjwwKQ0KKyAgICAgIHJldHVybiBFTk9NRU07DQorICB9 DQorICAqKC0tc3FsKT0nXDAnOw0KKyAgbXlfc25wcmludGYoc3FsLGxlbiwiJXMp IEVOR0lORT1OREJJTkZPOyIsIGxpbmVfc2VwYXJhdG9yKTsNCisgIGxlbi09c3Ry bGVuKHNxbCk7DQorICBzcWwrPXN0cmxlbihzcWwpOw0KKyAgaWYobGVuPDApDQor ICAgIHJldHVybiBFTk9NRU07DQorDQorICByZXR1cm4gMDsNCit9DQorDQorY29u c3QgY2hhcioNCitOZGJpbmZvOjpjb2x0eXBlX3RvX3N0cmluZyhDb2x1bW5UeXBl IGNvbHR5cGUpIHsNCisgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlX3N0cmluZ1td PSB7Ik5PTkUiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiVkFSQ0hBUig1MTIpIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIklOVCBVTlNJR05FRCINCisgIH07DQorDQorICBpZihjb2x0eXBl PjMpDQorICAgIGNvbHR5cGU9IChDb2x1bW5UeXBlKTA7DQorDQorICByZXR1cm4g dHlwZV9zdHJpbmdbY29sdHlwZV07DQorfQ0KKw0KKw0KDQo9PT0gYWRkZWQgZmls ZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9OZGJpbmZvLmhwcCcNCi0tLSBh L3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vTmRiaW5mby5ocHAJMTk3MC0wMS0w MSAwMDowMDowMCArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92 bS9OZGJpbmZvLmhwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMCww ICsxLDE1OSBAQA0KKy8qDQorICAgQ29weXJpZ2h0IChDKSAyMDA5IFN1biBNaWNy b3N5c3RlbXMgSW5jLg0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBz dWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMuDQorDQorICAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkNCisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAgIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4NCisN CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUNCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLg0KKw0KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUNCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSAgVVNBDQorKi8NCisN CisjaWZuZGVmIEtFUk5FTF9OREJJTkZPX0hQUA0KKyNkZWZpbmUgS0VSTkVMX05E QklORk9fSFBQDQorDQorI2luY2x1ZGUgPHNpZ25hbGRhdGEvRGJpbmZvU2Nhbi5o cHA+DQorDQorY2xhc3MgTmRiaW5mbyB7DQorcHVibGljOg0KKw0KKyAgZW51bSBD b2x1bW5UeXBlIHsNCisgICAgU3RyaW5nID0gMSwNCisgICAgTnVtYmVyID0gMg0K KyAgfTsNCisNCisgIHN0cnVjdCBDb2x1bW4gew0KKyAgICBjaGFyIG5hbWVbNTBd Ow0KKyAgICBDb2x1bW5UeXBlIGNvbHR5cGU7DQorICB9Ow0KKw0KKyAgc3RhdGlj IGNvbnN0IGNoYXIqIGNvbHR5cGVfdG9fc3RyaW5nKENvbHVtblR5cGUgY29sdHlw ZSk7DQorDQorICBlbnVtIFRhYmxlSWQgew0KKyAgICBUQUJMRVNfVEFCTEVJRCA9 ICAgICAgICAgICAgIDAsDQorICAgIENPTFVNTlNfVEFCTEVJRCA9ICAgICAgICAg ICAgMSwNCisgICAgTUVNVVNBR0VfVEFCTEVJRCA9ICAgICAgICAgICAyLA0KKyAg ICBMT0dERVNUSU5BVElPTl9UQUJMRUlEID0gICAgIDMsDQorICAgIEJBQ0tVUF9S RUNPUkRTX1RBQkxFSUQgPSAgICAgNCwNCisgICAgQkFDS1VQX1BBUkFNRVRFUlNf VEFCTEVJRCA9ICA1LA0KKyAgICBQT09MU19UQUJMRUlEID0gICAgICAgICAgICAg IDYsDQorICAgIFRFU1RfVEFCTEVJRCA9ICAgICAgICAgICAgICAgNw0KKyAgfTsN CisNCisgIHN0cnVjdCBUYWJsZSB7DQorICAgIHN0cnVjdCBNZW1iZXJzIHsNCisg ICAgICBjaGFyIG5hbWVbNTBdOw0KKyAgICAgIGludCBuY29sczsNCisgICAgICBp bnQgZmxhZ3M7DQorICAgIH0gbTsNCisgICAgQ29sdW1uIGNvbFsxXTsNCisNCisg ICAgaW50IGNvbHVtbnModm9pZCkgY29uc3Qgew0KKyAgICAgIHJldHVybiBtLm5j b2xzOw0KKyAgICB9DQorICB9Ow0KKyAgc3RhdGljIGludCBnZXROdW1UYWJsZXMo KTsNCisgIHN0YXRpYyBjb25zdCBUYWJsZSYgZ2V0VGFibGUoaW50IGkpOw0KKyAg c3RhdGljIGNvbnN0IFRhYmxlJiBnZXRUYWJsZShVaW50MzIgaSk7DQorICBzdGF0 aWMgaW50IGNyZWF0ZV9zcWwoY29uc3QgVGFibGUmIHQsIGNoYXIqIHNxbCwgaW50 IGxlbiwNCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBsaW5l X3NlcGFyYXRvciA9ICJcbiIpOw0KKw0KKyAgY2xhc3MgUm93IHsNCisgICAgZnJp ZW5kIGNsYXNzIFNpbXVsYXRlZEJsb2NrOw0KKyAgICBVaW50MzIqIHN0YXJ0OyAg ICAgIC8vIFN0YXJ0IG9mIHJvdyBidWZmZXINCisgICAgVWludDMyKiBjdXJyOyAg ICAgICAvLyBDdXJyZW50IHBvc2l0aW9uIGluIHJvdyBidWZmZXINCisgICAgVWlu dDMyKiBlbmQ7ICAgICAgICAvLyBFbmQgb2YgYnVmZmVyDQorICAgIGludCBjb2xf Y291bnRlcjsgICAgLy8gQ3VycmVudCBjb2x1bW4gY291bnRlcg0KKyAgICBEYmlu Zm9TY2FuJiBtX3JlcTsgIC8vIFRoZSBzY2FuIHBhcmFtZXRlcnMNCisgICAgUm93 KCk7ICAgICAgICAgICAgICAvLyBOb3QgaW1wbA0KKyAgICBSb3coY29uc3QgUm93 Jik7ICAgIC8vIE5vdCBpbXBsDQorICBwdWJsaWM6DQorDQorICAgIFJvdyhjbGFz cyBTaWduYWwqIHNpZ25hbCwgRGJpbmZvU2NhblJlcSYgcmVxKTsNCisNCisgICAg VWludDMyIGdldExlbmd0aCh2b2lkKSBjb25zdCB7DQorICAgICAgcmV0dXJuIChV aW50MzIpKGN1cnIgLSBzdGFydCk7DQorICAgIH0NCisNCisgICAgVWludDMyKiBn ZXREYXRhUHRyKCkgY29uc3Qgew0KKyAgICAgIHJldHVybiBzdGFydDsNCisgICAg fQ0KKw0KKyAgICB2b2lkIHdyaXRlX3N0cmluZyhjb25zdCBjaGFyKiBjb2wpOw0K KyAgICB2b2lkIHdyaXRlX3VpbnQzMihVaW50MzIgdmFsdWUpOw0KKw0KKyAgICBp bnQgY29sdW1ucyh2b2lkKSBjb25zdCB7DQorICAgICAgcmV0dXJuIGNvbF9jb3Vu dGVyOw0KKyAgICB9DQorDQorICBwcml2YXRlOg0KKyAgICBib29sIGNoZWNrX2J1 ZmZlcl9zcGFjZShjbGFzcyBBdHRyaWJ1dGVIZWFkZXImIGFoKSBjb25zdDsNCisg ICAgdm9pZCBjaGVja19hdHRyaWJ1dGVfdHlwZShjbGFzcyBBdHRyaWJ1dGVIZWFk ZXImIGFoLCBDb2x1bW5UeXBlKSBjb25zdDsNCisgIH07DQorDQorICBzdHJ1Y3Qg U2NhbkN1cnNvcg0KKyAgew0KKyAgICBVaW50MzIgc2VuZGVyUmVmOw0KKyAgICBV aW50MzIgc2F2ZVNlbmRlclJlZjsNCisgICAgVWludDMyIGN1cnJSZWY7IC8vIFRo ZSBjdXJyZW50IG5vZGUsIGJsb2NrIGFuZCBpbnN0YW5jZQ0KKyAgICBVaW50MzIg c2F2ZUN1cnJSZWY7DQorICAgIC8qKg0KKyAgICAgKiBGbGFncw0KKyAgICAgKg0K KyAgICAgbSA9IE1vcmUgZGF0YSAgICAgICAgIC0gMSAgQml0IDENCisNCisgICAg ICAgICAgICAgICAxMTExMTExMTExMjIyMjIyMjIyMjMzDQorICAgICAwMTIzNDU2 Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQ0KKyAgICAgbQ0KKyAgICAqLw0KKyAg ICBVaW50MzIgZmxhZ3M7DQorICAgIFVpbnQzMiBkYXRhWzRdOyAgLy8gQ3Vyc29y IGRhdGENCisNCisgICAgVWludDMyIHRvdGFsUm93czsgLy8gTUFTViBobW0/IElz IGl0IHJlYWxseSB1c2VkLi4uDQorICAgIFVpbnQzMiB0b3RhbEJ5dGVzOw0KKyAg ICBTVEFUSUNfQ09OU1QoIExlbmd0aCA9IDEwICk7DQorICAgIA0KKyAgICBTVEFU SUNfQ09OU1QoIE1PUkVEQVRBX1NISUZUID0gMCApOw0KKyAgICBTVEFUSUNfQ09O U1QoIE1PUkVEQVRBX01BU0sgPSAxICk7DQorDQorICAgIHN0YXRpYyBib29sIGdl dEhhc01vcmVEYXRhKGNvbnN0IFVpbnRSICYgZmxhZ3Mpew0KKyAgICAgIHJldHVy biAoYm9vbCkoKGZsYWdzID4+IE1PUkVEQVRBX1NISUZUKSAmIE1PUkVEQVRBX01B U0spOw0KKyAgICB9DQorICAgIHN0YXRpYyB2b2lkIHNldEhhc01vcmVEYXRhKFVp bnRSICYgZmxhZ3MsIGJvb2wgdmFsdWUpew0KKyAgICAgIGZsYWdzID0gKGZsYWdz ICYgfihNT1JFREFUQV9NQVNLIDw8IE1PUkVEQVRBX1NISUZUKSkgfA0KKyAgICAg ICAgICAgICAgKCh2YWx1ZSAmIE1PUkVEQVRBX01BU0spIDw8IE1PUkVEQVRBX1NI SUZUKTsNCisgICAgfQ0KKyAgfTsNCisNCisgIGNsYXNzIFJhdGVsaW1pdCB7DQor ICAgIGZyaWVuZCBjbGFzcyBTaW11bGF0ZWRCbG9jazsNCisgICAgVWludDMyIHJv d3M7DQorICAgIFVpbnQzMiBieXRlczsNCisgICAgUmF0ZWxpbWl0KGNvbnN0IFJh dGVsaW1pdCYpOy8vIE5vdCBpbXBsDQorICBwdWJsaWM6DQorICAgIFJhdGVsaW1p dCgpIDoNCisgICAgICByb3dzKDApLA0KKyAgICAgIGJ5dGVzKDApew0KKyAgICB9 DQorDQorICAgIGJvb2wgbmVlZF9icmVhayhjb25zdCBEYmluZm9TY2FuJiBzY2Fu KSBjb25zdCB7DQorICAgICAgLy8gQXV0b21hdGljYWxseSBsaW1pdCB0aGUgbWF4 Um93cyB2YWx1ZQ0KKyAgICAgIFVpbnQzMiBtYXhSb3dzID0gbWluKHNjYW4ubWF4 Um93cyA/IHNjYW4ubWF4Um93cyA6IDI1NiwgMjU2KTsNCisNCisgICAgICBpZiAo bWF4Um93cyAhPSAwICYmIHJvd3MgPj0gbWF4Um93cykNCisgICAgICAgIHJldHVy biB0cnVlOyAvLyBNb3JlIHRoYW4gbWF4IHJvd3MgYWxyZWFkeSBzZW50DQorICAg ICAgaWYgKHNjYW4ubWF4Qnl0ZXMgIT0gMCAmJiAgYnl0ZXMgPj0gc2Nhbi5tYXhC eXRlcykNCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBNb3JlIHRoYW4gbWF4IGJ5 dGVzIGFscmVhZHkgc2VudA0KKyAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0K KyAgfTsNCit9Ow0KKw0KKyNlbmRpZg0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3Rv cmFnZS9uZGIvc3JjL2tlcm5lbC92bS9TaW11bGF0ZWRCbG9jay5jcHAnDQotLS0g YS9zdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL1NpbXVsYXRlZEJsb2NrLmNwcAky MDA5LTA1LTI3IDE1OjIxOjQ1ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMv a2VybmVsL3ZtL1NpbXVsYXRlZEJsb2NrLmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMw ICswMDAwDQpAQCAtNTQsNiArNTQsOCBAQA0KICNpbmNsdWRlIDxzaWduYWxkYXRh L0NhbGxiYWNrU2lnbmFsLmhwcD4NCiAjaW5jbHVkZSAiTG9uZ1NpZ25hbEltcGwu aHBwIg0KIA0KKyNpbmNsdWRlIDxzaWduYWxkYXRhL1RyYW5zSWRBSS5ocHA+DQor DQogI2luY2x1ZGUgPEV2ZW50TG9nZ2VyLmhwcD4NCiBleHRlcm4gRXZlbnRMb2dn ZXIgKiBnX2V2ZW50TG9nZ2VyOw0KIA0KQEAgLTMzMzksMyArMzM0MSw5NiBAQCBT aW11bGF0ZWRCbG9jazo6ZGVidWdPdXRUYWcoY2hhciAqYnVmLCBpDQogICByZXR1 cm4gYnVmOw0KIH0NCiAjZW5kaWYNCisNCit2b2lkDQorU2ltdWxhdGVkQmxvY2s6 Om5kYmluZm9fc2VuZF9yb3coU2lnbmFsKiBzaWduYWwsDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGJpbmZvU2NhblJlcSYgcmVxLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5kYmluZm86 OlJvdyYgcm93LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5k YmluZm86OlJhdGVsaW1pdCYgcmwpIGNvbnN0DQorew0KKyAgLy8gQ2hlY2sgY29y cmVjdCBudW1iZXIgb2YgY29sdW1ucyBhZ2FpbnN0IHRhYmxlDQorICBhc3NlcnQo cm93LmNvbHVtbnMoKSA9PSBOZGJpbmZvOjpnZXRUYWJsZShyZXEudGFibGVJZCku Y29sdW1ucygpKTsNCisNCisgIFRyYW5zSWRBSSAqdGlkYWk9IChUcmFuc0lkQUkq KXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCisgIHRpZGFpLT5jb25uZWN0UHRy PSByZXEucmVzdWx0RGF0YTsNCisgIHRpZGFpLT50cmFuc0lkWzBdPSByZXEudHJh bnNJZFswXTsNCisgIHRpZGFpLT50cmFuc0lkWzFdPSByZXEudHJhbnNJZFsxXTsN CisNCisgIExpbmVhclNlY3Rpb25QdHIgcHRyWzNdOw0KKyAgcHRyWzBdLnAgPSBy b3cuZ2V0RGF0YVB0cigpOw0KKyAgcHRyWzBdLnN6ID0gcm93LmdldExlbmd0aCgp Ow0KKw0KKyAgcmwucm93cysrOw0KKyAgcmwuYnl0ZXMgKz0gcm93LmdldExlbmd0 aCgpOw0KKw0KKyAgc2VuZFNpZ25hbChyZXEucmVzdWx0UmVmLCBHU05fREJJTkZP X1RSQU5TSURfQUksDQorICAgICAgICAgICAgIHNpZ25hbCwgVHJhbnNJZEFJOjpI ZWFkZXJMZW5ndGgsIEpCQiwgcHRyLCAxKTsNCit9DQorDQordm9pZA0KK1NpbXVs YXRlZEJsb2NrOjpuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhTaWduYWwqIHNpZ25h bCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYmlu Zm9TY2FuUmVxJiByZXEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgTmRiaW5mbzo6UmF0ZWxpbWl0JiBybCwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIgZGF0YTEsIFVp bnQzMiBkYXRhMiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVaW50MzIgZGF0YTMsIFVpbnQzMiBkYXRhNCkgY29uc3QNCit7DQorICBE YmluZm9TY2FuQ29uZiogY29uZj0gKERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdl dERhdGFQdHJTZW5kKCk7DQorICBjb25zdCBVaW50MzIgc2lnbmFsX2xlbmd0aCA9 IERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aCArIHJlcS5jdXJzb3Jfc3o7DQor ICBNRU1DT1BZX05PX1dPUkRTKGNvbmYsICZyZXEsIHNpZ25hbF9sZW5ndGgpOw0K Kw0KKyAgY29uZi0+cmV0dXJuZWRSb3dzID0gcmwucm93czsNCisNCisgIC8vIFVw ZGF0ZSB0aGUgY3Vyc29yIHdpdGggY3VycmVudCBpdGVtIG51bWJlcg0KKyAgTmRi aW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNjYW5D dXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0clNlbmQoY29uZik7DQorDQor ICBjdXJzb3ItPmRhdGFbMF0gPSBkYXRhMTsNCisgIGN1cnNvci0+ZGF0YVsxXSA9 IGRhdGEyOw0KKyAgY3Vyc29yLT5kYXRhWzJdID0gZGF0YTM7DQorICBjdXJzb3It PmRhdGFbM10gPSBkYXRhNDsNCisNCisgIC8vIEluY3JlYXNlIG51bWJlciBvZiBy b3dzIGFuZCBieXRlcyBzZW50IHRvIGZhcg0KKyAgY3Vyc29yLT50b3RhbFJvd3Mg Kz0gcmwucm93czsNCisgIGN1cnNvci0+dG90YWxCeXRlcyArPSBybC5ieXRlczsN CisNCisgIE5kYmluZm86OlNjYW5DdXJzb3I6OnNldEhhc01vcmVEYXRhKGN1cnNv ci0+ZmxhZ3MsIHRydWUpOw0KKw0KKyAgc2VuZFNpZ25hbChjdXJzb3ItPnNlbmRl clJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLA0KKyAgICAgICAgICAg ICBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KK30NCisNCit2b2lkDQorU2ltdWxhdGVk QmxvY2s6Om5kYmluZm9fc2VuZF9zY2FuX2NvbmYoU2lnbmFsKiBzaWduYWwsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGJpbmZvU2Nh blJlcSYgcmVxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IE5kYmluZm86OlJhdGVsaW1pdCYgcmwpIGNvbnN0DQorew0KKyAg RGJpbmZvU2NhbkNvbmYqIGNvbmY9IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5n ZXREYXRhUHRyU2VuZCgpOw0KKyAgY29uc3QgVWludDMyIHNpZ25hbF9sZW5ndGgg PSBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGggKyByZXEuY3Vyc29yX3N6Ow0K KyAgVWludDMyIHNlbmRlcl9yZWYgPSByZXEucmVzdWx0UmVmOw0KKyAgTUVNQ09Q WV9OT19XT1JEUyhjb25mLCAmcmVxLCBzaWduYWxfbGVuZ3RoKTsNCisNCisgIGNv bmYtPnJldHVybmVkUm93cyA9IHJsLnJvd3M7DQorDQorICBpZiAocmVxLmN1cnNv cl9zeikNCisgIHsNCisgICAgamFtKCk7DQorICAgIC8vIFVwZGF0ZSB0aGUgY3Vy c29yIHdpdGggY3VycmVudCBpdGVtIG51bWJlcg0KKyAgICBOZGJpbmZvOjpTY2Fu Q3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAgIChOZGJpbmZvOjpTY2FuQ3Vyc29yKilE YmluZm9TY2FuOjpnZXRDdXJzb3JQdHJTZW5kKGNvbmYpOw0KKw0KKyAgICAvLyBS ZXNldCBhbGwgZGF0YSBob2xkZXJzDQorICAgIG1lbXNldChjdXJzb3ItPmRhdGEs IDAsIHNpemVvZihjdXJzb3ItPmRhdGEpKTsNCisNCisgICAgLy8gSW5jcmVhc2Ug bnVtYmVyIG9mIHJvd3MgYW5kIGJ5dGVzIHNlbnQgdG8gZmFyDQorICAgIGN1cnNv ci0+dG90YWxSb3dzICs9IHJsLnJvd3M7DQorICAgIGN1cnNvci0+dG90YWxCeXRl cyArPSBybC5ieXRlczsNCisNCisgICAgTmRiaW5mbzo6U2NhbkN1cnNvcjo6c2V0 SGFzTW9yZURhdGEoY3Vyc29yLT5mbGFncywgZmFsc2UpOw0KKw0KKyAgICBzZW5k ZXJfcmVmID0gY3Vyc29yLT5zZW5kZXJSZWY7DQorDQorICB9DQorICBzZW5kU2ln bmFsKHNlbmRlcl9yZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsIHNpZ25hbCwNCisg ICAgICAgICAgICAgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCit9DQorDQoNCj09PSBt b2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL1NpbXVsYXRl ZEJsb2NrLmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vU2lt dWxhdGVkQmxvY2suaHBwCTIwMDktMDUtMjcgMTU6MjE6NDUgKzAwMDANCisrKyBi L3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vU2ltdWxhdGVkQmxvY2suaHBwCTIw MDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC01OCw2ICs1OCw4IEBADQogI2lu Y2x1ZGUgIm5kYmRfbWFsbG9jX2ltcGwuaHBwIg0KICNpbmNsdWRlIDxibG9ja3Mv cmVjb3JkX3R5cGVzLmhwcD4NCiANCisjaW5jbHVkZSAiTmRiaW5mby5ocHAiDQor DQogI2lmZGVmIFZNX1RSQUNFDQogI2RlZmluZSBEKHgpIFwNCiAgIGRvIHsgXA0K QEAgLTgxNSw2ICs4MTcsMjEgQEAgcHVibGljOg0KICAgdm9pZCBkZWJ1Z091dFVu bG9jaygpIHsgZ2xvYmFsU2lnbmFsTG9nZ2Vycy51bmxvY2soKTsgfQ0KICAgY29u c3QgY2hhciogZGVidWdPdXRUYWcoY2hhciogYnVmLCBpbnQgbGluZSk7DQogI2Vu ZGlmDQorDQorICB2b2lkIG5kYmluZm9fc2VuZF9yb3coU2lnbmFsKiBzaWduYWws DQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGJpbmZvU2NhblJlcSYg cmVxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5kYmluZm86OlJv dyYgcm93LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIE5kYmluZm86OlJhdGVs aW1pdCYgcmwpIGNvbnN0Ow0KKw0KKyAgdm9pZCBuZGJpbmZvX3NlbmRfc2Nhbl9i cmVhayhTaWduYWwqIHNpZ25hbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGJpbmZvU2NhblJlcSYgcmVxLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBOZGJpbmZvOjpSYXRlbGltaXQmIHJsLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIgZGF0YTEsIFVpbnQzMiBk YXRhMiA9IDAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQz MiBkYXRhMyA9IDAsIFVpbnQzMiBkYXRhNCA9IDApIGNvbnN0Ow0KKw0KKyAgdm9p ZCBuZGJpbmZvX3NlbmRfc2Nhbl9jb25mKFNpZ25hbCogc2lnbmFsLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERiaW5mb1NjYW5SZXEmIHJlcSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJpbmZvOjpSYXRl bGltaXQmIHJsKSBjb25zdDsNCiB9Ow0KIA0KIC8vIG91dHNpZGUgYmxvY2tzIGUu Zy4gd2l0aGluIGEgc3RydWN0DQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdl L25kYi9zcmMvbWdtc3J2L01ha2VmaWxlLmFtJw0KLS0tIGEvc3RvcmFnZS9uZGIv c3JjL21nbXNydi9NYWtlZmlsZS5hbQkyMDA5LTA1LTI3IDE1OjIxOjQ1ICswMDAw DQorKysgYi9zdG9yYWdlL25kYi9zcmMvbWdtc3J2L01ha2VmaWxlLmFtCTIwMDkt MDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0zMCw3ICszMCw2IEBAIG5kYl9tZ21k X1NPVVJDRVMgPSBcDQogCUNvbmZpZ0luZm8uY3BwIFwNCiAJSW5pdENvbmZpZ0Zp bGVQYXJzZXIuY3BwIFwNCiAJQ29uZmlnLmNwcCBcDQotCW1nbV9uZGJpbmZvLmNw cCBcDQogCUNvbmZpZ01hbmFnZXIuY3BwIFwNCiAJRGlySXRlcmF0b3IuY3BwDQog DQoNCj09PSByZW1vdmVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9tZ21zcnYvbWdt X25kYmluZm8uY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL21nbXNydi9tZ21f bmRiaW5mby5jcHAJMjAwOC0xMC0wNiAwNjo1MzowNCArMDAwMA0KKysrIGIvc3Rv cmFnZS9uZGIvc3JjL21nbXNydi9tZ21fbmRiaW5mby5jcHAJMTk3MC0wMS0wMSAw MDowMDowMCArMDAwMA0KQEAgLTEsMTQgKzAsMCBAQA0KLQ0KLSNpbmNsdWRlIDxC YXNlU3RyaW5nLmhwcD4NCi0jaW5jbHVkZSA8bmRiaW5mby5oPg0KLQ0KLWludCBw cmludF9uZGJpbmZvX3RhYmxlX21nbShzdHJ1Y3QgbmRiaW5mb190YWJsZSogdCwg QmFzZVN0cmluZyAmb3V0KQ0KLXsNCi0gIGludCBpOw0KLSAgb3V0LmFwcGZtdCgi JWRcbiIsdC0+bmNvbHMpOw0KLQ0KLSAgZm9yKGk9MDtpPHQtPm5jb2xzO2krKykN Ci0gICAgb3V0LmFwcGZtdCgiJXNcbiIsdC0+Y29sW2ldLm5hbWUpOw0KLQ0KLSAg cmV0dXJuIDA7DQotfQ0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIv c3JjL25kYmFwaS9OZGJJbmZvLmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9u ZGJhcGkvTmRiSW5mby5jcHAJMjAwOS0wNi0yNCAwODozOTowOSArMDAwMA0KKysr IGIvc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvLmNwcAkyMDA5LTA3LTAz IDEwOjMxOjMwICswMDAwDQpAQCAtMjY3LDEzICsyNjcsMTcgQEAgYm9vbCBOZGJJ bmZvOjpsb2FkX3RhYmxlcygpDQogfQ0KIA0KIGludCBOZGJJbmZvOjpjcmVhdGVT Y2FuT3BlcmF0aW9uKGNvbnN0IEluZm9UYWJsZSogdGFibGUsDQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTmRiSW5mb1NjYW5PcGVyYXRpb24qKiBy ZXRfc2Nhbl9vcCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO ZGJJbmZvU2Nhbk9wZXJhdGlvbioqIHJldF9zY2FuX29wLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVpbnQzMiBtYXhfcm93cywgVWludDMyIG1h eF9ieXRlcykNCiB7DQotICBOZGJJbmZvU2Nhbk9wZXJhdGlvbiogc2Nhbl9vcCA9 IG5ldyBOZGJJbmZvU2Nhbk9wZXJhdGlvbihtX2Nvbm5lY3Rpb24sIHRhYmxlKTsN CisgIE5kYkluZm9TY2FuT3BlcmF0aW9uKiBzY2FuX29wID0gbmV3IE5kYkluZm9T Y2FuT3BlcmF0aW9uKG1fY29ubmVjdGlvbiwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLCBt YXhfcm93cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1heF9ieXRlcyk7DQogICBpZiAoIXNjYW5f b3ApDQogICAgIHJldHVybiBFUlJfT3V0T2ZNZW1vcnk7DQotDQotICBpZiAoIXNj YW5fb3AtPmluaXQoKSkNCisgIC8vIEdsb2JhbCBpZCBjb3VudGVyLCBub3QgY3Jp dGljYWwgaWYgeW91IGdldCBzYW1lIGlkIG9uIHR3byBpbnN0YW5jZXMNCisgIC8v IHNpbmNlIHJlZmVyZW5jZSBpcyBhbHNvIHBhcnQgb2YgdGhlIHVuaXF1ZSBpZGVu dGlmaWVyLg0KKyAgaWYgKCFzY2FuX29wLT5pbml0KG1faWRfY291bnRlcisrKSkN CiAgIHsNCiAgICAgZGVsZXRlIHNjYW5fb3A7DQogICAgIHJldHVybiBFUlJfQ2x1 c3RlckZhaWx1cmU7DQpAQCAtMjg0LDcgKzI4OCw3IEBAIGludCBOZGJJbmZvOjpj cmVhdGVTY2FuT3BlcmF0aW9uKGNvbnN0IEkNCiAgIHJldHVybiAwOw0KIH0NCiAN Ci12b2lkIE5kYkluZm86OnJlbGVhc2VTY2FuT3BlcmF0aW9uKE5kYkluZm9TY2Fu T3BlcmF0aW9uKiBzY2FuX29wKQ0KK3ZvaWQgTmRiSW5mbzo6cmVsZWFzZVNjYW5P cGVyYXRpb24oTmRiSW5mb1NjYW5PcGVyYXRpb24qIHNjYW5fb3ApIGNvbnN0DQog ew0KICAgZGVsZXRlIHNjYW5fb3A7DQogfQ0KQEAgLTI5NywxMSArMzAxLDkgQEAg dm9pZCBOZGJJbmZvOjpmbHVzaF90YWJsZXMoKQ0KICAgYXNzZXJ0KG1fdGFibGVz LmVudHJpZXMoKSA9PSBOVU1fSEFSRENPREVEX1RBQkxFUyk7DQogfQ0KIA0KLWlu dA0KLU5kYkluZm86Om9wZW5UYWJsZShjb25zdCBjaGFyKiB0YWJsZV9uYW1lLA0K LSAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUqKiB0 YWJsZV9jb3B5KQ0KK2Jvb2wNCitOZGJJbmZvOjpjaGVja190YWJsZXMoKQ0KIHsN Ci0gIHB0aHJlYWRfbXV0ZXhfbG9jaygmbV9tdXRleCk7DQogICBpZiAobV9jb25u ZWN0aW9uLT5nZXRfY29ubmVjdF9jb3VudCgpICE9IG1fY29ubmVjdF9jb3VudCkN CiAgIHsNCiAgICAgLy8gQ29ubmVjdCBjb3VudCBoYXMgY2hhbmdlZCAtPiBmbHVz aCB0aGUgY2FjaGVkIHRhYmxlIGRlZmluaXRpb25zDQpAQCAtMzEzLDEyICszMTUs MjUgQEAgTmRiSW5mbzo6b3BlblRhYmxlKGNvbnN0IGNoYXIqIHRhYmxlX25hbQ0K ICAgICAvLyBmbHVzaGVkLCB0cnkgdG8gbG9hZCBpdA0KICAgICBpZiAoIWxvYWRf dGFibGVzKCkpDQogICAgIHsNCi0gICAgICBwdGhyZWFkX211dGV4X3VubG9jaygm bV9tdXRleCk7DQotICAgICAgcmV0dXJuIEVSUl9DbHVzdGVyRmFpbHVyZTsNCisg ICAgICByZXR1cm4gZmFsc2U7DQogICAgIH0NCiAgIH0NCiAgIC8vIE1ha2Ugc3Vy ZSB0aGF0IHNvbWUgZHluYW1pYyB0YWJsZXMgaGF2ZSBiZWVuIGxvYWRlZA0KICAg YXNzZXJ0KG1fdGFibGVzLmVudHJpZXMoKSA+IE5VTV9IQVJEQ09ERURfVEFCTEVT KTsNCisgIHJldHVybiB0cnVlOw0KK30NCisNCisNCitpbnQNCitOZGJJbmZvOjpv cGVuVGFibGUoY29uc3QgY2hhciogdGFibGVfbmFtZSwNCisgICAgICAgICAgICAg ICAgICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxlKiogdGFibGVfY29weSkNCit7 DQorICBwdGhyZWFkX211dGV4X2xvY2soJm1fbXV0ZXgpOw0KKw0KKyAgaWYgKCFj aGVja190YWJsZXMoKSl7DQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX211 dGV4KTsNCisgICAgcmV0dXJuIEVSUl9DbHVzdGVyRmFpbHVyZTsNCisgIH0NCiAN CiAgIEluZm9UYWJsZSogdGFiOw0KICAgaWYgKCFtX3RhYmxlcy5zZWFyY2godGFi bGVfbmFtZSwgJnRhYikpDQpAQCAtMzM1LDYgKzM1MCw0MiBAQCBOZGJJbmZvOjpv cGVuVGFibGUoY29uc3QgY2hhciogdGFibGVfbmFtDQogICByZXR1cm4gMDsNCiB9 DQogDQoraW50DQorTmRiSW5mbzo6b3BlblRhYmxlKFVpbnQzMiB0YWJsZUlkLA0K KyAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUqKiB0 YWJsZV9jb3B5KQ0KK3sNCisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbV9tdXRleCk7 DQorDQorICBpZiAoIWNoZWNrX3RhYmxlcygpKXsNCisgICAgcHRocmVhZF9tdXRl eF91bmxvY2soJm1fbXV0ZXgpOw0KKyAgICByZXR1cm4gRVJSX0NsdXN0ZXJGYWls dXJlOw0KKyAgfQ0KKw0KKyAgLy8gRmluZCB0aGUgdGFibGUgd2l0aCBjb3JyZWN0 IGlkDQorICBjb25zdCBJbmZvVGFibGUqIHRhYmxlID0gTlVMTDsNCisgIGZvciAo c2l6ZV90IGkgPSAwOyBpIDwgbV90YWJsZXMuZW50cmllcygpOyBpKyspDQorICB7 DQorICAgIGNvbnN0IEluZm9UYWJsZSogdG1wID0gbV90YWJsZXMudmFsdWUoaSk7 DQorICAgIGlmICh0bXAtPm1fdGFibGVfaWQgPT0gdGFibGVJZCkNCisgICAgew0K KyAgICAgIHRhYmxlID0gdG1wOw0KKyAgICAgIGJyZWFrOw0KKyAgICB9DQorICB9 DQorICBpZiAodGFibGUgPT0gTlVMTCkNCisgIHsNCisgICAgLy8gTm8gc3VjaCB0 YWJsZSBleGlzdGVkDQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX211dGV4 KTsNCisgICAgcmV0dXJuIEVSUl9Ob1N1Y2hUYWJsZTsNCisgIH0NCisNCisgIC8v IFJldHVybiBhIF9jb3B5XyBvZiB0aGUgdGFibGUNCisgICp0YWJsZV9jb3B5ID0g bmV3IEluZm9UYWJsZSgqdGFibGUpOw0KKw0KKyAgcHRocmVhZF9tdXRleF91bmxv Y2soJm1fbXV0ZXgpOw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KIHZvaWQgTmRiSW5m bzo6Y2xvc2VUYWJsZShjb25zdCBJbmZvVGFibGUqIHRhYmxlKSB7DQogICBkZWxl dGUgdGFibGU7DQogfQ0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIv c3JjL25kYmFwaS9OZGJJbmZvLmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9u ZGJhcGkvTmRiSW5mby5ocHAJMjAwOS0wNi0yNCAwODozOTowOSArMDAwMA0KKysr IGIvc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvLmhwcAkyMDA5LTA3LTAz IDEwOjMxOjMwICswMDAwDQpAQCAtOTMsMTEgKzkzLDEzIEBAIHB1YmxpYzoNCiAg IHZvaWQgZmx1c2hfdGFibGVzKCk7DQogDQogICBpbnQgb3BlblRhYmxlKGNvbnN0 IGNoYXIqIHRhYmxlX25hbWUsIGNvbnN0IEluZm9UYWJsZSoqKTsNCisgIGludCBv cGVuVGFibGUoVWludDMyIHRhYmxlSWQsIGNvbnN0IEluZm9UYWJsZSoqKTsNCiAg IHZvaWQgY2xvc2VUYWJsZShjb25zdCBJbmZvVGFibGUqIHRhYmxlKTsNCiANCiAg IGludCBjcmVhdGVTY2FuT3BlcmF0aW9uKGNvbnN0IEluZm9UYWJsZSosDQotICAg ICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOZGJJbmZvU2Nhbk9wZXJhdGlv bioqKTsNCi0gIHZvaWQgcmVsZWFzZVNjYW5PcGVyYXRpb24oY2xhc3MgTmRiSW5m b1NjYW5PcGVyYXRpb24qKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNs YXNzIE5kYkluZm9TY2FuT3BlcmF0aW9uKiosDQorICAgICAgICAgICAgICAgICAg ICAgICAgICBVaW50MzIgbWF4X3Jvd3MgPSAyNTYsIFVpbnQzMiBtYXhfYnl0ZXMg PSAwKTsNCisgIHZvaWQgcmVsZWFzZVNjYW5PcGVyYXRpb24oY2xhc3MgTmRiSW5m b1NjYW5PcGVyYXRpb24qKSBjb25zdDsNCiANCiBwcml2YXRlOg0KICAgc3RhdGlj IGNvbnN0IHNpemVfdCBOVU1fSEFSRENPREVEX1RBQkxFUyA9IDI7DQpAQCAtMTA5 LDEyICsxMTEsMTQgQEAgcHJpdmF0ZToNCiAgIEluZm9UYWJsZSogbV9jb2x1bW5z X3RhYmxlOw0KICAgQmFzZVN0cmluZyBtX3ByZWZpeDsNCiAgIGJvb2wgbV91c2Vf bG93ZXJfY2FzZTsNCisgIFVpbnQzMiBtX2lkX2NvdW50ZXI7DQogDQogICBib29s IGFkZENvbHVtbihVaW50MzIgdGFibGVJZCwgY29uc3QgSW5mb0NvbHVtbiBhQ29s KTsNCiANCiAgIGJvb2wgbG9hZF9uZGJpbmZvX3RhYmxlcygpOw0KICAgYm9vbCBs b2FkX2hhcmRjb2RlZF90YWJsZXModm9pZCk7DQogICBib29sIGxvYWRfdGFibGVz KCk7DQorICBib29sIGNoZWNrX3RhYmxlcygpOw0KIA0KICAgQmFzZVN0cmluZyBt eXNxbF90YWJsZV9uYW1lKGNvbnN0IGNoYXIqIHRhYmxlX25hbWUpIGNvbnN0Ow0K IA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9O ZGJJbmZvU2Nhbk9wZXJhdGlvbi5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMv bmRiYXBpL05kYkluZm9TY2FuT3BlcmF0aW9uLmNwcAkyMDA5LTA2LTI0IDIxOjI3 OjAxICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm9T Y2FuT3BlcmF0aW9uLmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAt MjYsMTcgKzI2LDIyIEBADQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvTkZDb21wbGV0 ZVJlcC5ocHA+DQogDQogTmRiSW5mb1NjYW5PcGVyYXRpb246Ok5kYkluZm9TY2Fu T3BlcmF0aW9uKE5kYl9jbHVzdGVyX2Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IE5kYkluZm86OkluZm9UYWJsZSogdGFibGUpIDoNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmRiSW5mbzo6SW5mb1Rh YmxlKiB0YWJsZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVWludDMyIG1heF9yb3dzLCBVaW50MzIgbWF4X2J5dGVzKSA6DQog ICBtX3N0YXRlKFVuZGVmaW5lZCksDQogICBtX2Nvbm5lY3Rpb24oY29ubmVjdGlv biksDQogICBtX3NpZ25hbF9zZW5kZXIoTlVMTCksDQogICBtX3RhYmxlKHRhYmxl KSwNCi0gIG1fbm9kZV9pZCgwKQ0KKyAgbV9ub2RlX2lkKDApLA0KKyAgbV9tYXhf cm93cyhtYXhfcm93cyksDQorICBtX21heF9ieXRlcyhtYXhfYnl0ZXMpLA0KKyAg bV9yZXN1bHRfZGF0YSgweDM3KSwNCisgIG1fcmVjZWl2ZWRfcm93cygwKQ0KIHsN CiB9DQogDQogYm9vbA0KLU5kYkluZm9TY2FuT3BlcmF0aW9uOjppbml0KHZvaWQp DQorTmRiSW5mb1NjYW5PcGVyYXRpb246OmluaXQoVWludDMyIGlkKQ0KIHsNCiAg IERCVUdfRU5URVIoIk5kYkluZm9TY2Fub3BlcmF0aW9uOjppbml0Iik7DQogICBp ZiAobV9zdGF0ZSAhPSBVbmRlZmluZWQpDQpAQCAtNDYsNiArNTEsMTAgQEAgTmRi SW5mb1NjYW5PcGVyYXRpb246OmluaXQodm9pZCkNCiAgIGlmICghbV9zaWduYWxf c2VuZGVyKQ0KICAgICBEQlVHX1JFVFVSTihmYWxzZSk7DQogDQorICBtX3RyYW5z aWQwID0gaWQ7DQorICBtX3RyYW5zaWQxID0gbV90YWJsZS0+Z2V0VGFibGVJZCgp Ow0KKyAgbV9yZXN1bHRfcmVmID0gbV9zaWduYWxfc2VuZGVyLT5nZXRPd25SZWYo KTsNCisNCiAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RhYmxlLT5jb2x1 bW5zKCk7IGkrKykNCiAgICAgbV9yZWNBdHRycy5wdXNoX2JhY2soTlVMTCk7DQog DQpAQCAtMTA1LDMyICsxMTQsMTkgQEAgaW50IE5kYkluZm9TY2FuT3BlcmF0aW9u OjpleGVjdXRlKCkNCiAgIGlmIChtX3N0YXRlICE9IFByZXBhcmVkKQ0KICAgICBE QlVHX1JFVFVSTigtMSk7DQogDQotICBTaW1wbGVTaWduYWwgc3M7DQotICBEYmlu Zm9TY2FuUmVxICogcmVxID0gQ0FTVF9QVFIoRGJpbmZvU2NhblJlcSwgc3MuZ2V0 RGF0YVB0clNlbmQoKSk7DQotICByZXEtPnJlcXVlc3RJbmZvID0gRGJpbmZvU2Nh blJlcTo6U3RhcnRTY2FuOw0KLSAgcmVxLT50YWJsZUlkID0gbV90YWJsZS0+Z2V0 VGFibGVJZCgpOw0KLSAgcmVxLT5hcGlSZWYgPSBtX3NpZ25hbF9zZW5kZXItPmdl dE93blJlZigpOw0KLSAgcmVxLT5hcGlUeG5JZCA9IDM3OyAvL21faWQ7IC8vIE1B U1YgQ2FuIGJlIHJlbW92ZWQNCi0gIHJlcS0+c2VuZGVyUmVmID0gbV9zaWduYWxf c2VuZGVyLT5nZXRPd25SZWYoKTsNCi0gIHJlcS0+aW5zdGFuY2UgPSAwOw0KLSAg cmVxLT5jb2xCaXRtYXBMbyA9IH4wOw0KLSAgcmVxLT5jb2xCaXRtYXBIaSA9IH4w Ow0KLSAgcmVxLT5tYXhSb3dzID0gMjsNCi0gIHJlcS0+bWF4Qnl0ZXMgPSAwOw0K LSAgcmVxLT5yb3dzX3RvdGFsID0gMDsNCi0gIHJlcS0+d29yZF90b3RhbCA9IDA7 DQorICBhc3NlcnQobV9jdXJzb3Iuc2l6ZSgpID09IDApOw0KIA0KICAgbV9zaWdu YWxfc2VuZGVyLT5sb2NrKCk7DQotICBpbnQgcmV0ID0gc2VuZERCSU5GT19TQ0FO UkVRKHNzLCBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGgpOw0KKyAgaW50IHJl dCA9IHNlbmREQklORk9fU0NBTlJFUSgpOw0KICAgbV9zaWduYWxfc2VuZGVyLT51 bmxvY2soKTsNCiANCi0gIG1fc3RhdGUgPSBTdGFydGVkOw0KKyAgbV9zdGF0ZSA9 IE1vcmVEYXRhOw0KIA0KICAgREJVR19SRVRVUk4ocmV0KTsNCiB9DQogDQogaW50 DQotTmRiSW5mb1NjYW5PcGVyYXRpb246OnNlbmREQklORk9fU0NBTlJFUShTaW1w bGVTaWduYWwgJnNzLCBVaW50MzIgc2lnbmFsX2xlbikNCitOZGJJbmZvU2Nhbk9w ZXJhdGlvbjo6c2VuZERCSU5GT19TQ0FOUkVRKHZvaWQpDQogew0KICAgREJVR19F TlRFUigiTmRiSW5mb1NjYW5PcGVyYXRpb246OnNlbmREQklORk9fU0NBTlJFUSIp Ow0KIA0KQEAgLTE0MSwxMyArMTM3LDQzIEBAIE5kYkluZm9TY2FuT3BlcmF0aW9u OjpzZW5kREJJTkZPX1NDQU5SRVENCiAgICAgICBEQlVHX1JFVFVSTihOZGJJbmZv OjpFUlJfQ2x1c3RlckZhaWx1cmUpOw0KICAgfQ0KIA0KKyAgU2ltcGxlU2lnbmFs IHNzOw0KKyAgRGJpbmZvU2NhblJlcSAqIHJlcSA9IENBU1RfUFRSKERiaW5mb1Nj YW5SZXEsIHNzLmdldERhdGFQdHJTZW5kKCkpOw0KKw0KKyAgLy8gQVBJIElkZW50 aWZpZXJzDQorICByZXEtPnJlc3VsdERhdGEgPSBtX3Jlc3VsdF9kYXRhOw0KKyAg cmVxLT50cmFuc0lkWzBdID0gbV90cmFuc2lkMDsNCisgIHJlcS0+dHJhbnNJZFsx XSA9IG1fdHJhbnNpZDE7DQorICByZXEtPnJlc3VsdFJlZiA9IG1fcmVzdWx0X3Jl ZjsNCisNCisgIC8vIFNjYW4gcGFyYW1ldGVycw0KKyAgcmVxLT50YWJsZUlkID0g bV90YWJsZS0+Z2V0VGFibGVJZCgpOw0KKyAgcmVxLT5jb2xCaXRtYXBbMF0gPSB+ MDsNCisgIHJlcS0+Y29sQml0bWFwWzFdID0gfjA7DQorICByZXEtPnJlcXVlc3RJ bmZvID0gMDsNCisgIHJlcS0+bWF4Um93cyA9IG1fbWF4X3Jvd3M7DQorICByZXEt Pm1heEJ5dGVzID0gbV9tYXhfYnl0ZXM7DQorDQorICAvLyBTY2FuIHJlc3VsdA0K KyAgcmVxLT5yZXR1cm5lZFJvd3MgPSAwOw0KKw0KKyAgLy8gQ3Vyc29yIGRhdGEN CisgIFVpbnQzMiogY3Vyc29yX3B0ciA9IERiaW5mb1NjYW46OmdldEN1cnNvclB0 clNlbmQocmVxKTsNCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2N1cnNv ci5zaXplKCk7IGkrKykNCisgIHsNCisgICAgKmN1cnNvcl9wdHIgPSBtX2N1cnNv cltpXTsNCisgICAgREJVR19QUklOVCgiaW5mbyIsICgiY3Vyc29yWyV1XTogMHgl eCIsIGksIG1fY3Vyc29yW2ldKSk7DQorICAgIGN1cnNvcl9wdHIrKzsNCisgIH0N CisgIHJlcS0+Y3Vyc29yX3N6ID0gbV9jdXJzb3Iuc2l6ZSgpOw0KKyAgbV9jdXJz b3IuY2xlYXIoKTsNCisNCiAgIGFzc2VydChtX25vZGVfaWQpOw0KKyAgVWludDMy IGxlbiA9IERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aCArIHJlcS0+Y3Vyc29y X3N6Ow0KICAgaWYgKG1fc2lnbmFsX3NlbmRlci0+c2VuZFNpZ25hbChtX25vZGVf aWQsIHNzLCBEQklORk8sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdTTl9EQklORk9fU0NBTlJFUSwNCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2lnbmFsX2xlbikgIT0gU0VORF9PSykNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR1NOX0RCSU5GT19TQ0FOUkVRLCBsZW4p ICE9IFNFTkRfT0spDQogICAgIERCVUdfUkVUVVJOKE5kYkluZm86OkVSUl9DbHVz dGVyRmFpbHVyZSk7DQogDQotDQogICBEQlVHX1JFVFVSTigwKTsNCiB9DQogDQpA QCAtMTU5LDE0ICsxODUsMTkgQEAgaW50IE5kYkluZm9TY2FuT3BlcmF0aW9uOjpy ZWNlaXZlKHZvaWQpDQogICAgIGNvbnN0IFNpbXBsZVNpZ25hbCogc2lnID0gbV9z aWduYWxfc2VuZGVyLT53YWl0Rm9yKCk7DQogICAgIGlmICghc2lnKQ0KICAgICAg IERCVUdfUkVUVVJOKC0xKTsNCisgICAgLy9zaWctPnByaW50KCk7DQogDQogICAg IGludCBzaWdfbnVtYmVyID0gc2lnLT5yZWFkU2lnbmFsTnVtYmVyKCk7DQogICAg IHN3aXRjaCAoc2lnX251bWJlcikgew0KIA0KICAgICBjYXNlIEdTTl9EQklORk9f VFJBTlNJRF9BSToNCi0gICAgICBleGVjREJJTkZPX1RSQU5TSURfQUkoc2lnKTsN Ci0gICAgICBEQlVHX1JFVFVSTigxKTsgLy8gTW9yZSBkYXRhDQorICAgIHsNCisg ICAgICBpbnQgcmV0ID0gZXhlY0RCSU5GT19UUkFOU0lEX0FJKHNpZyk7DQorICAg ICAgaWYgKHJldCA9PSAwKQ0KKyAgICAgICAgY29udGludWU7DQorICAgICAgREJV R19SRVRVUk4ocmV0KTsgLy8gTW9yZSBkYXRhDQogICAgICAgYnJlYWs7DQorICAg IH0NCiANCiAgICAgY2FzZSBHU05fREJJTkZPX1NDQU5DT05GOg0KICAgICB7DQpA QCAtMTc4LDIyICsyMDksMjEgQEAgaW50IE5kYkluZm9TY2FuT3BlcmF0aW9uOjpy ZWNlaXZlKHZvaWQpDQogICAgIH0NCiANCiAgICAgY2FzZSBHU05fREJJTkZPX1ND QU5SRUY6DQotICAgICAgREJVR19SRVRVUk4oZXhlY0RCSU5GT19TQ0FOUkVGKHNp ZykpOw0KKyAgICB7DQorICAgICAgaW50IHJldCA9IGV4ZWNEQklORk9fU0NBTlJF RihzaWcpOw0KKyAgICAgIGlmIChyZXQgPT0gMCkNCisgICAgICAgIGNvbnRpbnVl Ow0KKyAgICAgIERCVUdfUkVUVVJOKHJldCk7DQogICAgICAgYnJlYWs7DQorICAg IH0NCiANCiAgICAgY2FzZSBHU05fTk9ERV9GQUlMUkVQOg0KICAgICAgIC8vIEln bm9yZSBhbmQgd2FpdCBmb3IgTkZfQ09NUExFVEVSRVANCiAgICAgICBicmVhazsN CiANCiAgICAgY2FzZSBHU05fTkZfQ09NUExFVEVSRVA6DQotICAgIHsNCi0gICAg ICBjb25zdCBORkNvbXBsZXRlUmVwICogY29uc3QgcmVwID0NCi0gICAgICAgIENB U1RfQ09OU1RQVFIoTkZDb21wbGV0ZVJlcCwgc2lnLT5nZXREYXRhUHRyKCkpOw0K LSAgICAgIE5vZGVJZCBub2RlSWQ9IHJlcC0+ZmFpbGVkTm9kZUlkOw0KLSAgICAg IGlmIChub2RlSWQgPT0gbV9ub2RlX2lkKQ0KLSAgICAgICAgREJVR19SRVRVUk4o LTMpOw0KKyAgICAgIERCVUdfUkVUVVJOKC0zKTsNCiAgICAgICBicmVhazsNCi0g ICAgfQ0KIA0KICAgICBjYXNlIEdTTl9TVUJfR0NQX0NPTVBMRVRFX1JFUDoNCiAg ICAgY2FzZSBHU05fQVBJX1JFR0NPTkY6DQpAQCAtMjE4LDcgKzI0OCw2IEBAIE5k YkluZm9TY2FuT3BlcmF0aW9uOjpuZXh0UmVzdWx0KCkNCiANCiAgIHN3aXRjaCht X3N0YXRlKQ0KICAgew0KLSAgY2FzZSBTdGFydGVkOg0KICAgY2FzZSBNb3JlRGF0 YToNCiAgIHsNCiAgICAgbV9zaWduYWxfc2VuZGVyLT5sb2NrKCk7DQpAQCAtMjI4 LDcgKzI1Nyw2IEBAIE5kYkluZm9TY2FuT3BlcmF0aW9uOjpuZXh0UmVzdWx0KCkN CiAgICAgYnJlYWs7DQogICB9DQogICBjYXNlIEVuZDoNCi0gICAgYXNzZXJ0KGZh bHNlKTsNCiAgICAgREJVR19SRVRVUk4oMCk7IC8vIEVPRg0KICAgICBicmVhazsN CiAgIGRlZmF1bHQ6DQpAQCAtMjU0LDEwICsyODIsMjEgQEAgTmRiSW5mb1NjYW5P cGVyYXRpb246OmNsb3NlKCkNCiAgIERCVUdfVk9JRF9SRVRVUk47DQogfQ0KIA0K LXZvaWQNCitpbnQNCiBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6ZXhlY0RCSU5GT19U UkFOU0lEX0FJKGNvbnN0IFNpbXBsZVNpZ25hbCAqIHNpZ25hbCkNCiB7DQogICBE QlVHX0VOVEVSKCJOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6ZXhlY0RCSU5GT19UUkFO U0lEX0FJIik7DQorICBjb25zdCBUcmFuc0lkQUkqIHRyYW5zaWQgPQ0KKyAgICAg ICAgICBDQVNUX0NPTlNUUFRSKFRyYW5zSWRBSSwgc2lnbmFsLT5nZXREYXRhUHRy KCkpOw0KKyAgaWYgKHRyYW5zaWQtPmNvbm5lY3RQdHIgIT0gbV9yZXN1bHRfZGF0 YSB8fA0KKyAgICAgIHRyYW5zaWQtPnRyYW5zSWRbMF0gIT0gbV90cmFuc2lkMCB8 fA0KKyAgICAgIHRyYW5zaWQtPnRyYW5zSWRbMV0gIT0gbV90cmFuc2lkMSkNCisg IHsNCisgICAgLy8gRHJvcCBzaWduYWwgdGhhdCBiZWxvbmdzIHRvIHByZXZpb3Vz IHNjYW4NCisgICAgREJVR19SRVRVUk4oMCk7DQorICB9DQorICBtX3JlY2VpdmVk X3Jvd3MrKzsNCisNCiAgIGNvbnN0IFVpbnQzMiogc3RhcnQgPSBzaWduYWwtPnB0 clswXS5wOw0KICAgY29uc3QgVWludDMyKiBlbmQgPSBzdGFydCArIHNpZ25hbC0+ cHRyWzBdLnN6Ow0KIA0KQEAgLTI4Niw4ICszMjUsNyBAQCBOZGJJbmZvU2Nhbk9w ZXJhdGlvbjo6ZXhlY0RCSU5GT19UUkFOU0lEDQogICAgIC8vIE5vIHJlYWRpbmcg YmV5b25kIGVuZCBvZiBzaWduYWwgc2l6ZQ0KICAgICBhc3NlcnQoc3RhcnQgPD0g ZW5kKTsNCiAgIH0NCi0NCi0gIERCVUdfVk9JRF9SRVRVUk47DQorICBEQlVHX1JF VFVSTigxKTsNCiB9DQogDQogaW50DQpAQCAtMjk3LDIxICszMzUsMzkgQEAgTmRi SW5mb1NjYW5PcGVyYXRpb246OmV4ZWNEQklORk9fU0NBTkNPTg0KICAgY29uc3Qg RGJpbmZvU2NhbkNvbmYqIGNvbmYgPQ0KICAgICAgICAgICBDQVNUX0NPTlNUUFRS KERiaW5mb1NjYW5Db25mLCBzaWctPmdldERhdGFQdHIoKSk7DQogDQorICBpZiAo Y29uZi0+cmVzdWx0RGF0YSAhPSBtX3Jlc3VsdF9kYXRhIHx8DQorICAgICAgY29u Zi0+dHJhbnNJZFswXSAhPSBtX3RyYW5zaWQwIHx8DQorICAgICAgY29uZi0+dHJh bnNJZFsxXSAhPSBtX3RyYW5zaWQxIHx8DQorICAgICAgY29uZi0+cmVzdWx0UmVm ICE9IG1fcmVzdWx0X3JlZikNCisgIHsNCisgICAgLy8gRHJvcCBzaWduYWwgdGhh dCBiZWxvbmdzIHRvIHByZXZpb3VzIHNjYW4NCisgICAgREJVR19SRVRVUk4oMSk7 IC8vIENvbnRpbnVlIHdhaXRpbmcNCisgIH0NCiAgIGNvbnN0IFVpbnQzMiB0YWJs ZUlkID0gY29uZi0+dGFibGVJZDsNCiAgIGFzc2VydCh0YWJsZUlkID09IG1fdGFi bGUtPmdldFRhYmxlSWQoKSk7DQogDQotICBpZiAoY29uZi0+cmVxdWVzdEluZm8g JiBEYmluZm9TY2FuQ29uZjo6TW9yZURhdGEpDQorICAvLyBBc3NlcnQgYWxsIHNj YW4gc2V0dGluZ3MgaXMgdW5jaGFuZ2VkDQorICBhc3NlcnQoY29uZi0+Y29sQml0 bWFwWzBdID09IH4wKTsNCisgIGFzc2VydChjb25mLT5jb2xCaXRtYXBbMV0gPT0g fjApOw0KKyAgYXNzZXJ0KGNvbmYtPnJlcXVlc3RJbmZvID09IDApOw0KKyAgYXNz ZXJ0KGNvbmYtPm1heFJvd3MgPT0gbV9tYXhfcm93cyk7DQorICBhc3NlcnQoY29u Zi0+bWF4Qnl0ZXMgPT0gbV9tYXhfYnl0ZXMpOw0KKw0KKyAgLy8gU2F2ZSBjdXJz b3IgZGF0YQ0KKyAgYXNzZXJ0KG1fY3Vyc29yLnNpemUoKSA9PSAwKTsNCisgIGNv bnN0IFVpbnQzMiogY3Vyc29yX3B0ciA9IERiaW5mb1NjYW46OmdldEN1cnNvclB0 cihjb25mKTsNCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb25mLT5jdXJz b3Jfc3o7IGkrKykNCiAgIHsNCi0gICAgREJVR19QUklOVCgiaW5mbyIsICgiUmVx dWVzdCBtb3JlIGRhdGEiKSk7DQotICAgIFNpbXBsZVNpZ25hbCBzczsNCi0gICAg RGJpbmZvU2NhblJlcSAqIHJlcSA9IENBU1RfUFRSKERiaW5mb1NjYW5SZXEsDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcy5nZXREYXRhUHRy U2VuZCgpKTsNCi0gICAgbWVtY3B5KHJlcSwgY29uZiwgRGJpbmZvU2NhblJlcTo6 U2lnbmFsTGVuZ3RoV2l0aEN1cnNvcipzaXplb2YoVWludDMyKSk7DQotICAgIHJl cS0+cmVxdWVzdEluZm8gJj0gfihEYmluZm9TY2FuUmVxOjpTdGFydFNjYW4pOw0K LSAgICByZXEtPmFwaVJlZiA9IG1fc2lnbmFsX3NlbmRlci0+Z2V0T3duUmVmKCk7 IC8vIE1BU1Ygc29tZWhvdyBiZWNvbWVzIGludmFsaWQNCisgICAgbV9jdXJzb3Iu cHVzaF9iYWNrKCpjdXJzb3JfcHRyKTsNCisgICAgREJVR19QUklOVCgiaW5mbyIs ICgiY3Vyc29yWyV1XTogMHgleCIsIGksIG1fY3Vyc29yW2ldKSk7DQorICAgIGN1 cnNvcl9wdHIrKzsNCisgIH0NCisgIGFzc2VydChjb25mLT5jdXJzb3Jfc3ogPT0g bV9jdXJzb3Iuc2l6ZSgpKTsNCiANCi0gICAgaW50IGVyciA9IHNlbmREQklORk9f U0NBTlJFUShzcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE YmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yKTsNCisgIGlmIChj b25mLT5jdXJzb3Jfc3opDQorICB7DQorICAgIERCVUdfUFJJTlQoImluZm8iLCAo IlJlcXVlc3QgbW9yZSBkYXRhIikpOw0KKyAgICBpbnQgZXJyID0gc2VuZERCSU5G T19TQ0FOUkVRKCk7DQogICAgIGlmIChlcnIgIT0gMCkNCiAgICAgew0KICAgICAg IERCVUdfUFJJTlQoImluZm8iLCAoIkZhaWxlZCB0byByZXVxZXN0IG1vcmUgZGF0 YSIpKTsNCkBAIC0zMzQsOCArMzkwLDE0IEBAIE5kYkluZm9TY2FuT3BlcmF0aW9u OjpleGVjREJJTkZPX1NDQU5SRUYNCiAgIGNvbnN0IERiaW5mb1NjYW5SZWYqIHJl ZiA9DQogICAgICAgICAgIENBU1RfQ09OU1RQVFIoRGJpbmZvU2NhblJlZiwgc2ln bmFsLT5nZXREYXRhUHRyKCkpOw0KIA0KLSAgY29uc3QgVWludDMyIHRhYmxlSWQg PSByZWYtPnRhYmxlSWQ7DQotICBhc3NlcnQodGFibGVJZCA9PSBtX3RhYmxlLT5n ZXRUYWJsZUlkKCkpOw0KKyAgaWYgKHJlZi0+cmVzdWx0RGF0YSAhPSBtX3Jlc3Vs dF9kYXRhIHx8DQorICAgICAgcmVmLT50cmFuc0lkWzBdICE9IG1fdHJhbnNpZDAg fHwNCisgICAgICByZWYtPnRyYW5zSWRbMV0gIT0gbV90cmFuc2lkMSB8fA0KKyAg ICAgIHJlZi0+cmVzdWx0UmVmICE9IG1fcmVzdWx0X3JlZik7DQorICB7DQorICAg IC8vIERyb3Agc2lnbmFsIHRoYXQgYmVsb25ncyB0byBwcmV2aW91cyBzY2FuDQor ICAgIERCVUdfUkVUVVJOKDApOyAvLyBDb250aW51ZSB3YWl0aW5nDQorICB9DQog DQogICBtX3N0YXRlID0gRXJyb3I7DQogICBEQlVHX1JFVFVSTihyZWYtPmVycm9y Q29kZSk7DQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMvbmRi YXBpL05kYkluZm9TY2FuT3BlcmF0aW9uLmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRi L3NyYy9uZGJhcGkvTmRiSW5mb1NjYW5PcGVyYXRpb24uaHBwCTIwMDktMDYtMjQg MDg6MDQ6MzMgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRi SW5mb1NjYW5PcGVyYXRpb24uaHBwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDAN CkBAIC0yOSwyNSArMjksMzQgQEAgcHVibGljOg0KIHByb3RlY3RlZDoNCiAgIGZy aWVuZCBjbGFzcyBOZGJJbmZvOw0KICAgTmRiSW5mb1NjYW5PcGVyYXRpb24oY2xh c3MgTmRiX2NsdXN0ZXJfY29ubmVjdGlvbiosDQotICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUqKTsNCi0gIGJvb2wgaW5pdCh2 b2lkKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5kYkluZm86Oklu Zm9UYWJsZSosDQorICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIgbWF4X3Jv d3MsIFVpbnQzMiBtYXhfYnl0ZXMpOw0KKyAgYm9vbCBpbml0KFVpbnQzMiBpZCk7 DQogICB+TmRiSW5mb1NjYW5PcGVyYXRpb24oKTsNCiAgIHZvaWQgY2xvc2UoKTsN CiBwcml2YXRlOg0KLSAgdm9pZCBleGVjREJJTkZPX1RSQU5TSURfQUkoY29uc3Qg c3RydWN0IFNpbXBsZVNpZ25hbCAqIHNpZ25hbCk7DQorICBpbnQgZXhlY0RCSU5G T19UUkFOU0lEX0FJKGNvbnN0IHN0cnVjdCBTaW1wbGVTaWduYWwgKiBzaWduYWwp Ow0KICAgaW50IGV4ZWNEQklORk9fU0NBTkNPTkYoY29uc3Qgc3RydWN0IFNpbXBs ZVNpZ25hbCAqIHNpZ25hbCk7DQogICBpbnQgZXhlY0RCSU5GT19TQ0FOUkVGKGNv bnN0IHN0cnVjdCBTaW1wbGVTaWduYWwgKiBzaWduYWwpOw0KLSAgaW50IHNlbmRE QklORk9fU0NBTlJFUShzdHJ1Y3QgU2ltcGxlU2lnbmFsJiBzcywgVWludDMyIHNp Z25hbF9sZW4pOw0KKyAgaW50IHNlbmREQklORk9fU0NBTlJFUSgpOw0KIA0KICAg aW50IHJlY2VpdmUodm9pZCk7DQogDQogICBlbnVtIFN0YXRlIHsgVW5kZWZpbmVk LCBJbml0aWFsLCBQcmVwYXJlZCwNCi0gICAgICAgICAgICAgICBTdGFydGVkLCBN b3JlRGF0YSwgRW5kLCBFcnJvciB9IG1fc3RhdGU7DQorICAgICAgICAgICAgICAg TW9yZURhdGEsIEVuZCwgRXJyb3IgfSBtX3N0YXRlOw0KICAgY2xhc3MgTmRiX2Ns dXN0ZXJfY29ubmVjdGlvbiogbV9jb25uZWN0aW9uOw0KICAgY2xhc3MgU2lnbmFs U2VuZGVyKiAgICAgICAgICAgbV9zaWduYWxfc2VuZGVyOw0KICAgY29uc3QgTmRi SW5mbzo6SW5mb1RhYmxlKiAgICAgbV90YWJsZTsNCiAgIFZlY3RvcjxOZGJJbmZv UmVjQXR0cio+ICAgICAgIG1fcmVjQXR0cnM7DQorICBWZWN0b3I8VWludDMyPiAg ICAgICAgICAgICAgICBtX2N1cnNvcjsNCiAgIFVpbnQzMiBtX25vZGVfaWQ7DQor ICBVaW50MzIgbV90cmFuc2lkMDsNCisgIFVpbnQzMiBtX3RyYW5zaWQxOw0KKyAg VWludDMyIG1fcmVzdWx0X3JlZjsNCisgIFVpbnQzMiBtX21heF9yb3dzOw0KKyAg VWludDMyIG1fbWF4X2J5dGVzOw0KKyAgVWludDMyIG1fcmVzdWx0X2RhdGE7DQor ICBVaW50MzIgbV9yZWNlaXZlZF9yb3dzOw0KIH07DQogDQogDQoNCj09PSBtb2Rp ZmllZCBmaWxlICdzdG9yYWdlL25kYi90ZXN0L25kYmFwaS90ZXN0TmRiaW5mby5j cHAnDQotLS0gYS9zdG9yYWdlL25kYi90ZXN0L25kYmFwaS90ZXN0TmRiaW5mby5j cHAJMjAwOS0wNi0yNCAwODowNDozMyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIv dGVzdC9uZGJhcGkvdGVzdE5kYmluZm8uY3BwCTIwMDktMDctMDMgMTA6MzE6MzAg KzAwMDANCkBAIC0yMyw3ICsyMyw3IEBADQogDQogaW50IHJ1blRlc3ROZGJJbmZv KE5EQlRfQ29udGV4dCogY3R4LCBOREJUX1N0ZXAqIHN0ZXApDQogew0KLSAgTmRi SW5mbyBuZGJpbmZvKCZjdHgtPm1fY2x1c3Rlcl9jb25uZWN0aW9uLCAibmRiaW5m byIpOw0KKyAgTmRiSW5mbyBuZGJpbmZvKCZjdHgtPm1fY2x1c3Rlcl9jb25uZWN0 aW9uLCAibmRiaW5mby8iKTsNCiAgIGlmICghbmRiaW5mby5pbml0KCkpDQogICB7 DQogICAgIGdfZXJyIDw8ICJuZGJpbmZvLmluaXQgZmFpbGVkIiA8PCBlbmRsOw0K QEAgLTMxLDkgKzMxLDkgQEAgaW50IHJ1blRlc3ROZGJJbmZvKE5EQlRfQ29udGV4 dCogY3R4LCBORA0KICAgfQ0KIA0KICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxl KiB0YWJsZTsNCi0gIGlmIChuZGJpbmZvLm9wZW5UYWJsZSgiLi9uZGJpbmZvL1RB QkxFUyIsICZ0YWJsZSkgIT0gMCkNCisgIGlmIChuZGJpbmZvLm9wZW5UYWJsZSgi bmRiaW5mby9UQUJMRVMiLCAmdGFibGUpICE9IDApDQogICB7DQotICAgIGdfZXJy IDw8ICJGYWlsZWQgdG8gZ2V0VGFibGUoVEFCTEVTKSIgPDwgZW5kbDsNCisgICAg Z19lcnIgPDwgIkZhaWxlZCB0byBvcGVuVGFibGUoVEFCTEVTKSIgPDwgZW5kbDsN CiAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KICAgfQ0KIA0KQEAgLTYyLDcgKzYy LDcgQEAgaW50IHJ1blRlc3ROZGJJbmZvKE5EQlRfQ29udGV4dCogY3R4LCBORA0K ICAgICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCiAgICAgfQ0KIA0KLSAgICB3aGls ZShzY2FuT3AtPm5leHRSZXN1bHQoKSkNCisgICAgd2hpbGUoc2Nhbk9wLT5uZXh0 UmVzdWx0KCkgPT0gMSkNCiAgICAgew0KICAgICAgIGdfaW5mbyA8PCAiTkFNRTog IiA8PCB0YWJsZU5hbWUtPmNfc3RyKCkgPDwgZW5kbDsNCiAgICAgICBnX2luZm8g PDwgIlNRTDogIiA8PCBjcmVhdGVTUUwtPmNfc3RyKCkgPDwgZW5kbDsNCkBAIC03 NCw2ICs3NCwzMDYgQEAgaW50IHJ1blRlc3ROZGJJbmZvKE5EQlRfQ29udGV4dCog Y3R4LCBORA0KICAgcmV0dXJuIE5EQlRfT0s7DQogfQ0KIA0KKw0KK2ludCBydW5T Y2FuQWxsKE5EQlRfQ29udGV4dCogY3R4LCBOREJUX1N0ZXAqIHN0ZXApDQorew0K KyAgTmRiSW5mbyBuZGJpbmZvKCZjdHgtPm1fY2x1c3Rlcl9jb25uZWN0aW9uLCAi bmRiaW5mby8iKTsNCisgIGlmICghbmRiaW5mby5pbml0KCkpDQorICB7DQorICAg IGdfZXJyIDw8ICJuZGJpbmZvLmluaXQgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICBy ZXR1cm4gTkRCVF9GQUlMRUQ7DQorICB9DQorDQorICBVaW50MzIgdGFibGVJZCA9 IDA7DQorICB3aGlsZSh0cnVlKSB7DQorICAgIGNvbnN0IE5kYkluZm86OkluZm9U YWJsZSogdGFibGU7DQorDQorICAgIGludCBlcnIgPSBuZGJpbmZvLm9wZW5UYWJs ZSh0YWJsZUlkLCAmdGFibGUpOw0KKyAgICBpZiAoZXJyID09IE5kYkluZm86OkVS Ul9Ob1N1Y2hUYWJsZSkNCisgICAgew0KKyAgICAgIC8vIE5vIG1vcmUgdGFibGVz IC0+IHJldHVybg0KKyAgICAgIHJldHVybiBOREJUX09LOw0KKyAgICB9DQorICAg IGVsc2UgaWYgKGVyciAhPSAwKQ0KKyAgICB7DQorICAgICAgLy8gVW5leHBlY3Rl ZCByZXR1cm4gY29kZQ0KKyAgICAgIGdfZXJyIDw8ICJGYWlsZWQgdG8gb3BlblRh YmxlKCIgPDwgdGFibGVJZCA8PCAiKSwgZXJyOiAiIDw8IGVyciA8PCBlbmRsOw0K KyAgICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgICAgfQ0KKyAgICBuZGJvdXQg PDwgInRhYmxlKCI8PHRhYmxlSWQ8PCIpOiAiIDw8IHRhYmxlLT5nZXROYW1lKCkg PDwgZW5kbDsNCisNCisgICAgZm9yIChpbnQgbCA9IDA7IGwgPCBjdHgtPmdldE51 bUxvb3BzKCk7IGwrKykNCisgICAgew0KKyAgICAgIE5kYkluZm9TY2FuT3BlcmF0 aW9uKiBzY2FuT3AgPSBOVUxMOw0KKyAgICAgIGlmIChuZGJpbmZvLmNyZWF0ZVNj YW5PcGVyYXRpb24odGFibGUsICZzY2FuT3ApKQ0KKyAgICAgIHsNCisgICAgICAg IGdfZXJyIDw8ICJObyBOZGJJbmZvU2Nhbk9wZXJhdGlvbiIgPDwgZW5kbDsNCisg ICAgICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgICAgICB9DQorDQorICAgICAg aWYgKHNjYW5PcC0+cmVhZFR1cGxlcygpICE9IDApDQorICAgICAgew0KKyAgICAg ICAgZ19lcnIgPDwgInNjYW5PcC0+cmVhZFR1cGxlcyBmYWlsZWQiIDw8IGVuZGw7 DQorICAgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgICAgfQ0KKw0KKyAg ICAgIGludCBjb2x1bW5JZCA9IDA7DQorICAgICAgd2hpbGUgKHNjYW5PcC0+Z2V0 VmFsdWUoY29sdW1uSWQpKQ0KKyAgICAgICAgY29sdW1uSWQrKzsNCisgICAgICAv LyBBdCBsZWFzdCBvbmUgY29sdW1uDQorICAgICAgYXNzZXJ0KGNvbHVtbklkID49 IDEpOw0KKw0KKyAgICAgIGlmKHNjYW5PcC0+ZXhlY3V0ZSgpICE9IDApDQorICAg ICAgew0KKyAgICAgICAgZ19lcnIgPDwgInNjYW5PcC0+ZXhlY3V0ZSBmYWlsZWQi IDw8IGVuZGw7DQorICAgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgICAg fQ0KKw0KKyAgICAgIGludCByb3cgPSAwOw0KKyAgICAgIHdoaWxlKHNjYW5PcC0+ bmV4dFJlc3VsdCgpID09IDEpDQorICAgICAgICByb3crKzsNCisgICAgICBuZGJv dXQgPDwgInJvd3M6ICIgPDwgcm93IDw8IGVuZGw7DQorICAgICAgbmRiaW5mby5y ZWxlYXNlU2Nhbk9wZXJhdGlvbihzY2FuT3ApOw0KKyAgICB9DQorICAgIG5kYmlu Zm8uY2xvc2VUYWJsZSh0YWJsZSk7DQorICAgIHRhYmxlSWQrKzsNCisgIH0NCisN CisgIC8vIFNob3VsZCBuZXZlciBjb21lIGhlcmUNCisgIGFzc2VydChmYWxzZSk7 DQorICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorfQ0KKw0KK2ludCBydW5TY2FuU3Rv cChOREJUX0NvbnRleHQqIGN0eCwgTkRCVF9TdGVwKiBzdGVwKQ0KK3sNCisgIE5k YkluZm8gbmRiaW5mbygmY3R4LT5tX2NsdXN0ZXJfY29ubmVjdGlvbiwgIm5kYmlu Zm8vIik7DQorICBpZiAoIW5kYmluZm8uaW5pdCgpKQ0KKyAgew0KKyAgICBnX2Vy ciA8PCAibmRiaW5mby5pbml0IGZhaWxlZCIgPDwgZW5kbDsNCisgICAgcmV0dXJu IE5EQlRfRkFJTEVEOw0KKyAgfQ0KKw0KKyAgVWludDMyIHRhYmxlSWQgPSAwOw0K KyAgd2hpbGUodHJ1ZSkgew0KKyAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUq IHRhYmxlOw0KKw0KKyAgICBpbnQgZXJyID0gbmRiaW5mby5vcGVuVGFibGUodGFi bGVJZCwgJnRhYmxlKTsNCisgICAgaWYgKGVyciA9PSBOZGJJbmZvOjpFUlJfTm9T dWNoVGFibGUpDQorICAgIHsNCisgICAgICAvLyBObyBtb3JlIHRhYmxlcyAtPiBy ZXR1cm4NCisgICAgICByZXR1cm4gTkRCVF9PSzsNCisgICAgfQ0KKyAgICBlbHNl IGlmIChlcnIgIT0gMCkNCisgICAgew0KKyAgICAgIC8vIFVuZXhwZWN0ZWQgcmV0 dXJuIGNvZGUNCisgICAgICBnX2VyciA8PCAiRmFpbGVkIHRvIG9wZW5UYWJsZSgi IDw8IHRhYmxlSWQgPDwgIiksIGVycjogIiA8PCBlcnIgPDwgZW5kbDsNCisgICAg ICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgIH0NCisgICAgbmRib3V0IDw8ICJ0 YWJsZTogIiA8PCB0YWJsZS0+Z2V0TmFtZSgpIDw8IGVuZGw7DQorDQorICAgIGZv ciAoaW50IGwgPSAwOyBsIDwgY3R4LT5nZXROdW1Mb29wcygpKjEwOyBsKyspDQor ICAgIHsNCisgICAgICBOZGJJbmZvU2Nhbk9wZXJhdGlvbiogc2Nhbk9wID0gTlVM TDsNCisgICAgICBpZiAobmRiaW5mby5jcmVhdGVTY2FuT3BlcmF0aW9uKHRhYmxl LCAmc2Nhbk9wKSkNCisgICAgICB7DQorICAgICAgICBnX2VyciA8PCAiTm8gTmRi SW5mb1NjYW5PcGVyYXRpb24iIDw8IGVuZGw7DQorICAgICAgICByZXR1cm4gTkRC VF9GQUlMRUQ7DQorICAgICAgfQ0KKw0KKyAgICAgIGlmIChzY2FuT3AtPnJlYWRU dXBsZXMoKSAhPSAwKQ0KKyAgICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJzY2Fu T3AtPnJlYWRUdXBsZXMgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICAgICAgcmV0dXJu IE5EQlRfRkFJTEVEOw0KKyAgICAgIH0NCisNCisgICAgICBpbnQgY29sdW1uSWQg PSAwOw0KKyAgICAgIHdoaWxlIChzY2FuT3AtPmdldFZhbHVlKGNvbHVtbklkKSkN CisgICAgICAgIGNvbHVtbklkKys7DQorICAgICAgLy8gQXQgbGVhc3Qgb25lIGNv bHVtbg0KKyAgICAgIGFzc2VydChjb2x1bW5JZCA+PSAxKTsNCisNCisgICAgICBp ZihzY2FuT3AtPmV4ZWN1dGUoKSAhPSAwKQ0KKyAgICAgIHsNCisgICAgICAgIGdf ZXJyIDw8ICJzY2FuT3AtPmV4ZWN1dGUgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICAg ICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgICAgIH0NCisNCisgICAgICBpbnQg c3RvcFJvdyA9IHJhbmQoKSAlIDEwMDsNCisgICAgICBpbnQgcm93ID0gMDsNCisg ICAgICB3aGlsZShzY2FuT3AtPm5leHRSZXN1bHQoKSA9PSAxKQ0KKyAgICAgIHsN CisgICAgICAgIHJvdysrOw0KKyAgICAgICAgaWYgKHJvdyA9PSBzdG9wUm93KQ0K KyAgICAgICAgew0KKyAgICAgICAgICBuZGJvdXRfYygiQWJvcnRpbmcgc2NhbiBh dCByb3cgJWQiLCBzdG9wUm93KTsNCisgICAgICAgICAgYnJlYWs7DQorICAgICAg ICB9DQorICAgICAgfQ0KKyAgICAgIG5kYmluZm8ucmVsZWFzZVNjYW5PcGVyYXRp b24oc2Nhbk9wKTsNCisgICAgfQ0KKyAgICBuZGJpbmZvLmNsb3NlVGFibGUodGFi bGUpOw0KKyAgICB0YWJsZUlkKys7DQorICB9DQorDQorICAvLyBTaG91bGQgbmV2 ZXIgY29tZSBoZXJlDQorICBhc3NlcnQoZmFsc2UpOw0KKyAgcmV0dXJuIE5EQlRf RkFJTEVEOw0KK30NCisNCisNCitpbnQgcnVuUmF0ZWxpbWl0KE5EQlRfQ29udGV4 dCogY3R4LCBOREJUX1N0ZXAqIHN0ZXApDQorew0KKyAgTmRiSW5mbyBuZGJpbmZv KCZjdHgtPm1fY2x1c3Rlcl9jb25uZWN0aW9uLCAibmRiaW5mby8iKTsNCisgIGlm ICghbmRiaW5mby5pbml0KCkpDQorICB7DQorICAgIGdfZXJyIDw8ICJuZGJpbmZv LmluaXQgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICByZXR1cm4gTkRCVF9GQUlMRUQ7 DQorICB9DQorDQorICBVaW50MzIgdGFibGVJZCA9IDY7IC8vIE1BU1YgMA0KKyAg d2hpbGUodHJ1ZSkgew0KKw0KKyAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUq IHRhYmxlOw0KKw0KKyAgICBpbnQgZXJyID0gbmRiaW5mby5vcGVuVGFibGUodGFi bGVJZCwgJnRhYmxlKTsNCisgICAgaWYgKGVyciA9PSBOZGJJbmZvOjpFUlJfTm9T dWNoVGFibGUpDQorICAgIHsNCisgICAgICAvLyBObyBtb3JlIHRhYmxlcyAtPiBy ZXR1cm4NCisgICAgICByZXR1cm4gTkRCVF9PSzsNCisgICAgfQ0KKyAgICBlbHNl IGlmIChlcnIgIT0gMCkNCisgICAgew0KKyAgICAgIC8vIFVuZXhwZWN0ZWQgcmV0 dXJuIGNvZGUNCisgICAgICBnX2VyciA8PCAiRmFpbGVkIHRvIG9wZW5UYWJsZSgi IDw8IHRhYmxlSWQgPDwgIiksIGVycjogIiA8PCBlcnIgPDwgZW5kbDsNCisgICAg ICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgIH0NCisgICAgbmRib3V0IDw8ICJ0 YWJsZTogIiA8PCB0YWJsZS0+Z2V0TmFtZSgpIDw8IGVuZGw7DQorICAgIA0KKw0K KyAgICBzdHJ1Y3QgeyBVaW50MzIgcm93czsgVWludDMyIGJ5dGVzOyB9IGxpbWl0 c1tdID0gew0KKyAgICAgIHsgMCwgMCB9LA0KKyAgICAgIHsgMSwgMCB9LCB7IDIs IDAgfSwgeyAxMCwgMCB9LCB7IDM3LCAwIH0sIHsgMTAwMCwgMCB9LA0KKyAgICAg IHsgMCwgMSB9LCB7IDAsIDIgfSwgeyAwLCAxMCB9LCB7IDAsIDM3IH0sIHsgMCwg MTAwMCB9LA0KKyAgICAgIHsgMSwgMSB9LCB7IDIsIDIgfSwgeyAxMCwgMTAgfSwg eyAzNywgMzcgfSwgeyAxMDAwLCAxMDAwIH0NCisgICAgfTsNCisNCisgICAgaW50 IGxhc3RSb3dzID0gMDsNCisgICAgZm9yIChpbnQgbCA9IDA7IGwgPCBzaXplb2Yo bGltaXRzKS9zaXplb2YobGltaXRzWzBdKTsgbCsrKQ0KKyAgICB7DQorDQorICAg ICAgVWludDMyIG1heFJvd3MgPSBsaW1pdHNbbF0ucm93czsNCisgICAgICBVaW50 MzIgbWF4Qnl0ZXMgPSBsaW1pdHNbbF0uYnl0ZXM7DQorDQorICAgICAgTmRiSW5m b1NjYW5PcGVyYXRpb24qIHNjYW5PcCA9IE5VTEw7DQorICAgICAgaWYgKG5kYmlu Zm8uY3JlYXRlU2Nhbk9wZXJhdGlvbih0YWJsZSwgJnNjYW5PcCwgbWF4Um93cywg bWF4Qnl0ZXMpKQ0KKyAgICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJObyBOZGJJ bmZvU2Nhbk9wZXJhdGlvbiIgPDwgZW5kbDsNCisgICAgICAgIHJldHVybiBOREJU X0ZBSUxFRDsNCisgICAgICB9DQorDQorICAgICAgaWYgKHNjYW5PcC0+cmVhZFR1 cGxlcygpICE9IDApDQorICAgICAgew0KKyAgICAgICAgZ19lcnIgPDwgInNjYW5P cC0+cmVhZFR1cGxlcyBmYWlsZWQiIDw8IGVuZGw7DQorICAgICAgICByZXR1cm4g TkRCVF9GQUlMRUQ7DQorICAgICAgfQ0KKw0KKyAgICAgIGludCBjb2x1bW5JZCA9 IDA7DQorICAgICAgd2hpbGUgKHNjYW5PcC0+Z2V0VmFsdWUoY29sdW1uSWQpKQ0K KyAgICAgICAgY29sdW1uSWQrKzsNCisgICAgICAvLyBBdCBsZWFzdCBvbmUgY29s dW1uDQorICAgICAgYXNzZXJ0KGNvbHVtbklkID49IDEpOw0KKw0KKyAgICAgIGlm KHNjYW5PcC0+ZXhlY3V0ZSgpICE9IDApDQorICAgICAgew0KKyAgICAgICAgZ19l cnIgPDwgInNjYW5PcC0+ZXhlY3V0ZSBmYWlsZWQiIDw8IGVuZGw7DQorICAgICAg ICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgICAgfQ0KKw0KKyAgICAgIGludCBy b3cgPSAwOw0KKyAgICAgIHdoaWxlKHNjYW5PcC0+bmV4dFJlc3VsdCgpID09IDEp DQorICAgICAgICByb3crKzsNCisgICAgICBuZGJpbmZvLnJlbGVhc2VTY2FuT3Bl cmF0aW9uKHNjYW5PcCk7DQorDQorICAgICAgbmRib3V0X2MoIlsldSwldV0gcm93 czogJWQiLCBtYXhSb3dzLCBtYXhCeXRlcywgcm93KTsNCisgICAgICBpZiAobGFz dFJvd3MgIT0gMCkNCisgICAgICB7DQorICAgICAgICAvLyBDaGVjayB0aGF0IHRo ZSBudW1iZXIgb2Ygcm93cyBpcyBzYW1lIGFzIGxhc3Qgcm91bmQgb24gc2FtZSB0 YWJsZQ0KKyAgICAgICAgaWYgKGxhc3RSb3dzICE9IHJvdykNCisgICAgICAgIHsN CisgICAgICAgICAgZ19lcnIgPDwgIkdvdCBkaWZmZXJlbnQgbnVtYmVyIG9mIHJv d3MgdGhpcyByb3VuZCwgZXhwZWN0ZWQ6ICINCisgICAgICAgICAgICAgICAgPDwg bGFzdFJvd3MgPDwgIiwgZ290OiAiIDw8IHJvdyA8PCBlbmRsOw0KKyAgICAgICAg ICBuZGJpbmZvLmNsb3NlVGFibGUodGFibGUpOw0KKyAgICAgICAgICByZXR1cm4g TkRCVF9GQUlMRUQ7DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICAgIGxhc3RS b3dzID0gcm93Ow0KKyAgICB9DQorICAgIG5kYmluZm8uY2xvc2VUYWJsZSh0YWJs ZSk7DQorICAgIHRhYmxlSWQrKzsNCisgIH0NCisNCisgIC8vIFNob3VsZCBuZXZl ciBjb21lIGhlcmUNCisgIGFzc2VydChmYWxzZSk7DQorICByZXR1cm4gTkRCVF9G QUlMRUQ7DQorfQ0KKw0KK2ludCBydW5UZXN0VGFibGUoTkRCVF9Db250ZXh0KiBj dHgsIE5EQlRfU3RlcCogc3RlcCkNCit7DQorICBOZGJJbmZvIG5kYmluZm8oJmN0 eC0+bV9jbHVzdGVyX2Nvbm5lY3Rpb24sICJuZGJpbmZvLyIpOw0KKyAgaWYgKCFu ZGJpbmZvLmluaXQoKSkNCisgIHsNCisgICAgZ19lcnIgPDwgIm5kYmluZm8uaW5p dCBmYWlsZWQiIDw8IGVuZGw7DQorICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisg IH0NCisNCisgIGNvbnN0IE5kYkluZm86OkluZm9UYWJsZSogdGFibGU7DQorICBp ZiAobmRiaW5mby5vcGVuVGFibGUoIm5kYmluZm8vVEVTVCIsICZ0YWJsZSkgIT0g MCkNCisgIHsNCisgICAgZ19lcnIgPDwgIkZhaWxlZCB0byBvcGVuVGFibGUoVEVT VCkiIDw8IGVuZGw7DQorICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgIH0NCisN CisgIGZvciAoaW50IGwgPSAwOyBsIDwgY3R4LT5nZXROdW1Mb29wcygpOyBsKysp DQorICB7DQorDQorICAgIE5kYkluZm9TY2FuT3BlcmF0aW9uKiBzY2FuT3AgPSBO VUxMOw0KKyAgICBpZiAobmRiaW5mby5jcmVhdGVTY2FuT3BlcmF0aW9uKHRhYmxl LCAmc2Nhbk9wKSkNCisgICAgew0KKyAgICAgIGdfZXJyIDw8ICJObyBOZGJJbmZv U2Nhbk9wZXJhdGlvbiIgPDwgZW5kbDsNCisgICAgICByZXR1cm4gTkRCVF9GQUlM RUQ7DQorICAgIH0NCisNCisgICAgaWYgKHNjYW5PcC0+cmVhZFR1cGxlcygpICE9 IDApDQorICAgIHsNCisgICAgICBnX2VyciA8PCAic2Nhbk9wLT5yZWFkVHVwbGVz IGZhaWxlZCIgPDwgZW5kbDsNCisgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQor ICAgIH0NCisNCisgICAgY29uc3QgTmRiSW5mb1JlY0F0dHIqIG5vZGVJZD0gc2Nh bk9wLT5nZXRWYWx1ZSgiTk9ERV9JRCIpOw0KKyAgICBjb25zdCBOZGJJbmZvUmVj QXR0ciogYmxvY2tOdW1iZXI9IHNjYW5PcC0+Z2V0VmFsdWUoIkJMT0NLX05VTUJF UiIpOw0KKyAgICBjb25zdCBOZGJJbmZvUmVjQXR0ciogYmxvY2tJbnN0YW5jZT0g c2Nhbk9wLT5nZXRWYWx1ZSgiQkxPQ0tfSU5TVEFOQ0UiKTsNCisgICAgY29uc3Qg TmRiSW5mb1JlY0F0dHIqIGNvdW50ZXI9IHNjYW5PcC0+Z2V0VmFsdWUoIkNPVU5U RVIiKTsNCisNCisgICAgaWYoc2Nhbk9wLT5leGVjdXRlKCkgIT0gMCkNCisgICAg ew0KKyAgICAgIGdfZXJyIDw8ICJzY2FuT3AtPmV4ZWN1dGUgZmFpbGVkIiA8PCBl bmRsOw0KKyAgICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgICAgfQ0KKw0KKyAg ICBpbnQgcm93cyA9IDA7DQorICAgIHdoaWxlKHNjYW5PcC0+bmV4dFJlc3VsdCgp ID09IDEpDQorICAgIHsNCisgICAgICByb3dzKys7Ly8NCisgICAgfQ0KKyAgICBu ZGJvdXQgPDwgInJvd3M6ICIgPDwgcm93cyA8PCBlbmRsOw0KKyAgICBuZGJpbmZv LnJlbGVhc2VTY2FuT3BlcmF0aW9uKHNjYW5PcCk7DQorICB9DQorDQorICBuZGJp bmZvLmNsb3NlVGFibGUodGFibGUpOw0KKyAgcmV0dXJuIE5EQlRfT0s7DQorfQ0K Kw0KKw0KIE5EQlRfVEVTVFNVSVRFKHRlc3ROZGJpbmZvKTsNCiBURVNUQ0FTRSgi TmRiaW5mbyIsDQogICAgICAgICAgIlRlc3QgbmRiYXBpIGludGVyZmFjZSB0byBO REIkSU5GTyIpew0KQEAgLTgzLDYgKzM4MywyMyBAQCBURVNUQ0FTRSgiTmRiaW5m bzEwIiwNCiAgICAgICAgICAiVGVzdCBuZGJhcGkgaW50ZXJmYWNlIHRvIE5EQiRJ TkZPIil7DQogICBTVEVQUyhydW5UZXN0TmRiSW5mbywgMTApOw0KIH0NCitURVNU Q0FTRSgiU2NhbkFsbCIsDQorICAgICAgICAgIlNjYW4gYWxsIGNvbHVtcyBvZiBh bGwgdGFibGUga25vd24gdG8gTmRiSW5mbyIpew0KKyAgU1RFUFMocnVuU2NhbkFs bCwgMSk7DQorfQ0KK1RFU1RDQVNFKCJTY2FuU3RvcCIsDQorICAgICAgICAgIlJh bmRvbWx5IHN0b3AgdGhlIHNjYW4iKXsNCisgIFNURVBTKHJ1blNjYW5TdG9wLCAx KTsNCit9DQorVEVTVENBU0UoIlJhdGVsaW1pdCIsDQorICAgICAgICAgIlNjYW4g d2l0IGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgcmF0ZWxpbWl0Iil7DQorICBT VEVQUyhydW5SYXRlbGltaXQsIDEpOw0KK30NCitURVNUQ0FTRSgiVGVzdFRhYmxl IiwNCisgICAgICAgICAiU2NhbiB0aGUgdGVzdCB0YWJsZSBhbmQgbWFrZSBzdXJl IGl0IHJldHVybnMgY29ycmVjdCBudW1iZXIgIg0KKyAgICAgICAgICAib2Ygcm93 cyB3aGljaCB3aWxsIGRlcGVuZCBvbiBob3cgbWFueSBUVVAgYmxvY2tzIGFyZSBj b25maWd1cmVkIil7DQorICBTVEVQKHJ1blRlc3RUYWJsZSk7DQorfQ0KIE5EQlRf VEVTVFNVSVRFX0VORCh0ZXN0TmRiaW5mbyk7DQogDQogDQoNCg== --Boundary_(ID_PX71XAx1j7YHdDL00kcmmQ) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/magnus.blaudd@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/magnus.blaudd@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: magnus.blaudd@stripped # target_branch: file:///home/msvensson/mysql/7.1-ndbinfo/ # testament_sha1: 2523a7ee473ff54697613abc50ded23338215586 # timestamp: 2009-07-03 12:31:38 +0200 # base_revision_id: magnus.blaudd@stripped\ # tap82a8p0h8gns3i # # Begin bundle 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 pwoSD/4oB4A= --Boundary_(ID_PX71XAx1j7YHdDL00kcmmQ)--