From: Mattias Jonsson Date: April 27 2012 11:22am Subject: bzr push into mysql-trunk branch (mattias.jonsson:3752 to 3754) Bug#11761652 List-Archive: http://lists.mysql.com/commits/143669 X-Bug: 11761652 Message-Id: <201204271122.q3RBMMxM006292@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 IDM3NTQgTWF0dGlhcyBKb25zc29uCTIwMTItMDQtMjcKICAgICAgYnVnIzExNzYxNjUyLAogICAg ICBwcmUtcHVzaCBmaXggb2YgcmVzdWx0IGZpbGUsIGR1ZSB0byBjaGFuZ2VkIGVycm9yIGNvZGUu CgogICAgbW9kaWZpZWQ6CiAgICAgIG15c3FsLXRlc3Qvc3VpdGUvaW5ub2RiL3IvaW5ub2RiX2Nv cnJ1cHRfYml0LnJlc3VsdAogMzc1MyBNYXR0aWFzIEpvbnNzb24JMjAxMi0wNC0yNgogICAgICBC dWcjMTE3NjE2NTI6IDU0MTY2OiBIQV9STkRfSU5JVCgpIFJFU1VMVCBDT0RFIE5PVCBDSEVDS0VE CiAgICAgIEJ1ZyMxMTc0NjM5OTogMjYwNDA6IFJFVFVSTiBWQUxVRVMgT0YgSEFfSU5ERVhfSU5J VCgpIEFORAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRF WF9JTklUKCkgSUdOT1JFRAogICAgICAKICAgICAgQWRkZWQgY2hlY2tzIGZvciBoYV9ybmRfaW5p dCBhbmQgaGFfaW5kZXhfaW5pdCByZXR1cm4gY29kZXMuCiAgICAgIAogICAgICBBbHNvIGFkZGVk IERCVUdfQVNTRVJUJ3MgdG8gc3BvdCBTRSBBUEkgdmlvbGF0aW9ucy4KICAgICAgCiAgICAgIENo YW5nZWQgSW5ub0RCIHRvIHJldHVybiBhIG1vcmUgY29ycmVjdCBlcnJvciBpbiBpbmRleF9pbml0 LgogICAgICAKICAgICAgQWxsIHRoaXMgY2hhbmdlcyBhcmUgZG9uZSB0byBlbmZvcmNlIGNvcnJl Y3QgbG9ja2luZyBhbmQgY3Vyc29yL2hhbmRsZXIKICAgICAgdXNhZ2UgYnkgdGhlIHNlcnZlciBp biBkZWJ1ZyBtb2RlLgogICAgICAKICAgICAgVXBkYXRlZCBhY2NvcmRpbmcgdG8gcmV2aWV3ZXJz IGNvbW1lbnRzLgoKICAgIG1vZGlmaWVkOgogICAgICBteXNxbC10ZXN0L3N1aXRlL2lubm9kYi9y L2lubm9kYl9jb3JydXB0X2JpdC5yZXN1bHQKICAgICAgbXlzcWwtdGVzdC9zdWl0ZS9pbm5vZGIv dC9pbm5vZGJfY29ycnVwdF9iaXQudGVzdAogICAgICBzcWwvZXZlbnRfZGJfcmVwb3NpdG9yeS5j YwogICAgICBzcWwvZmlsZXNvcnQuY2MKICAgICAgc3FsL2hhX3BhcnRpdGlvbi5jYwogICAgICBz cWwvaGFuZGxlci5jYwogICAgICBzcWwvaGFuZGxlci5oCiAgICAgIHNxbC9pdGVtX3N1YnNlbGVj dC5jYwogICAgICBzcWwvbG9nX2V2ZW50LmNjCiAgICAgIHNxbC9sb2dfZXZlbnRfb2xkLmNjCiAg ICAgIHNxbC9vcHRfcmFuZ2UuY2MKICAgICAgc3FsL29wdF9zdW0uY2MKICAgICAgc3FsL3NwLmNj CiAgICAgIHNxbC9zcWxfYWNsLmNjCiAgICAgIHNxbC9zcWxfZXhlY3V0b3IuY2MKICAgICAgc3Fs L3NxbF9oZWxwLmNjCiAgICAgIHNxbC9zcWxfam9pbl9idWZmZXIuY2MKICAgICAgc3FsL3NxbF9z aG93LmNjCiAgICAgIHNxbC9zcWxfdG1wX3RhYmxlLmNjCiAgICAgIHNxbC9zcWxfdXBkYXRlLmNj CiAgICAgIHNxbC90enRpbWUuY2MKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9oYW5kbGVyL2hhX2lu bm9kYi5jYwogMzc1MiBZYXN1ZnVtaSBLaW5vc2hpdGEJMjAxMi0wNC0yNyBbbWVyZ2VdCiAgICAg IEJ1ZyMxMTc1ODUxMCAoIzUwNzIzKTogSU5OT0RCIENIRUNLIFRBQkxFIEZBVEFMIFNFTUFQSE9S RSBXQUlUIFRJTUVPVVQgUE9TU0lCTFkgVE9PIFNIT1JUIEZPUiBCSQogICAgICBGaXhlZCBub3Qg dG8gY2hlY2sgdGltZW91dCBkdXJpbmcgdGhlIGNoZWNrIHRhYmxlLgoKICAgIG1vZGlmaWVkOgog ICAgICBzdG9yYWdlL2lubm9iYXNlL2RpY3QvZGljdDBsb2FkLmNjCiAgICAgIHN0b3JhZ2UvaW5u b2Jhc2UvaGFuZGxlci9oYV9pbm5vZGIuY2MKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9pbmNsdWRl L3NydjBzcnYuaAogICAgICBzdG9yYWdlL2lubm9iYXNlL3N5bmMvc3luYzBhcnIuY2MKPT09IG1v ZGlmaWVkIGZpbGUgJ215c3FsLXRlc3Qvc3VpdGUvaW5ub2RiL3IvaW5ub2RiX2NvcnJ1cHRfYml0 LnJlc3VsdCcKLS0tIGEvbXlzcWwtdGVzdC9zdWl0ZS9pbm5vZGIvci9pbm5vZGJfY29ycnVwdF9i aXQucmVzdWx0CXJldmlkOnlhc3VmdW1pLmtpbm9zaGl0YUBvcmFjbGUuY29tLTIwMTIwNDI3MTA0 MjM4LTN4YnI2djB5NHN6cjdia3EKKysrIGIvbXlzcWwtdGVzdC9zdWl0ZS9pbm5vZGIvci9pbm5v ZGJfY29ycnVwdF9iaXQucmVzdWx0CXJldmlkOm1hdHRpYXMuam9uc3NvbkBvcmFjbGUuY29tLTIw MTIwNDI3MDkzODI3LTAxNTZ0ZGpjcHRzOGg0MHMKQEAgLTQwLDEzICs0MCwxMyBAQCB0ZXN0LmNv cnJ1cHRfYml0X3Rlc3Rf4pSAw7wJY2hlY2sJV2FybmluZwlJCiB0ZXN0LmNvcnJ1cHRfYml0X3Rl c3Rf4pSAw7wJY2hlY2sJV2FybmluZwlJbm5vREI6IFRoZSBCLXRyZWUgb2YgaW5kZXggImlkeOKU gMO0IiBpcyBjb3JydXB0ZWQuCiB0ZXN0LmNvcnJ1cHRfYml0X3Rlc3Rf4pSAw7wJY2hlY2sJZXJy b3IJQ29ycnVwdAogc2VsZWN0IGMgZnJvbSBjb3JydXB0X2JpdF90ZXN0X+KUgMO8OwotRVJST1Ig SFkwMDA6IEluY29ycmVjdCBrZXkgZmlsZSBmb3IgdGFibGUgJ2NvcnJ1cHRfYml0X3Rlc3Rf4pSA w7wnOyB0cnkgdG8gcmVwYWlyIGl0CitFUlJPUiBIWTAwMDogSW5kZXggY29ycnVwdF9iaXRfdGVz dF/ilIDDvCBpcyBjb3JydXB0ZWQKIHNlbGVjdCB6IGZyb20gY29ycnVwdF9iaXRfdGVzdF/ilIDD vDsKLUVSUk9SIEhZMDAwOiBJbmNvcnJlY3Qga2V5IGZpbGUgZm9yIHRhYmxlICdjb3JydXB0X2Jp dF90ZXN0X+KUgMO8JzsgdHJ5IHRvIHJlcGFpciBpdAorRVJST1IgSFkwMDA6IEluZGV4IGNvcnJ1 cHRfYml0X3Rlc3Rf4pSAw7wgaXMgY29ycnVwdGVkCiBzaG93IHdhcm5pbmdzOwogTGV2ZWwJQ29k ZQlNZXNzYWdlCiBXYXJuaW5nCTE4MAlJbm5vREI6IEluZGV4ICJpZHjilIDDtCIgZm9yIHRhYmxl ICJ0ZXN0Ii4iY29ycnVwdF9iaXRfdGVzdF/ilIDDvCIgaXMgbWFya2VkIGFzIGNvcnJ1cHRlZAot RXJyb3IJMTAzNAlJbmNvcnJlY3Qga2V5IGZpbGUgZm9yIHRhYmxlICdjb3JydXB0X2JpdF90ZXN0 X+KUgMO8JzsgdHJ5IHRvIHJlcGFpciBpdAorRXJyb3IJMTcxMglJbmRleCBjb3JydXB0X2JpdF90 ZXN0X+KUgMO8IGlzIGNvcnJ1cHRlZAogaW5zZXJ0IGludG8gY29ycnVwdF9iaXRfdGVzdF/ilIDD vCB2YWx1ZXMgKDEwMDAxLCAiYSIsIDIwMDAxLCAyMDAwMSk7CiBzZWxlY3QgKiBmcm9tIGNvcnJ1 cHRfYml0X3Rlc3Rf4pSAw7wgdXNlIGluZGV4KHByaW1hcnkpIHdoZXJlIGEgPSAxMDAwMTsKIGEJ YgljCXoKQEAgLTYzLDcgKzYzLDcgQEAgdGVzdC5jb3JydXB0X2JpdF90ZXN0X+KUgMO8CWNoZWNr CVdhcm5pbmcJSQogdGVzdC5jb3JydXB0X2JpdF90ZXN0X+KUgMO8CWNoZWNrCWVycm9yCUNvcnJ1 cHQKIHNldCBuYW1lcyB1dGY4Owogc2VsZWN0IHogZnJvbSBjb3JydXB0X2JpdF90ZXN0X+KUgMO8 OwotRVJST1IgSFkwMDA6IEluY29ycmVjdCBrZXkgZmlsZSBmb3IgdGFibGUgJ2NvcnJ1cHRfYml0 X3Rlc3Rf4pSAw7wnOyB0cnkgdG8gcmVwYWlyIGl0CitFUlJPUiBIWTAwMDogSW5kZXggY29ycnVw dF9iaXRfdGVzdF/ilIDDvCBpcyBjb3JydXB0ZWQKIGRyb3AgaW5kZXggaWR44pSAw7Qgb24gY29y cnVwdF9iaXRfdGVzdF/ilIDDvDsKIHNlbGVjdCB6IGZyb20gY29ycnVwdF9iaXRfdGVzdF/ilIDD vCBsaW1pdCAxMDsKIHoKCj09PSBtb2RpZmllZCBmaWxlICdteXNxbC10ZXN0L3N1aXRlL2lubm9k Yi90L2lubm9kYl9jb3JydXB0X2JpdC50ZXN0JwotLS0gYS9teXNxbC10ZXN0L3N1aXRlL2lubm9k Yi90L2lubm9kYl9jb3JydXB0X2JpdC50ZXN0CXJldmlkOnlhc3VmdW1pLmtpbm9zaGl0YUBvcmFj bGUuY29tLTIwMTIwNDI3MTA0MjM4LTN4YnI2djB5NHN6cjdia3EKKysrIGIvbXlzcWwtdGVzdC9z dWl0ZS9pbm5vZGIvdC9pbm5vZGJfY29ycnVwdF9iaXQudGVzdAlyZXZpZDptYXR0aWFzLmpvbnNz b25Ab3JhY2xlLmNvbS0yMDEyMDQyNzA5MzgyNy0wMTU2dGRqY3B0czhoNDBzCkBAIC04MCwxMCAr ODAsMTAgQEAgQ1JFQVRFIElOREVYIGlkeDQgT04gY29ycnVwdF9iaXRfdGVzdF/ilIDDvAogY2hl Y2sgdGFibGUgY29ycnVwdF9iaXRfdGVzdF/ilIDDvDsKIAogIyBUaGlzIHNlbGVjdGlvbiBpbnRl bmQgdG8gdXNlIHRoZSBjb3JydXB0ZWQgaW5kZXguIEV4cGVjdCB0byBmYWlsCi0tLSBlcnJvciBF Ul9OT1RfS0VZRklMRQorLS0gZXJyb3IgRVJfSU5ERVhfQ09SUlVQVAogc2VsZWN0IGMgZnJvbSBj b3JydXB0X2JpdF90ZXN0X+KUgMO8OwogCi0tLSBlcnJvciBFUl9OT1RfS0VZRklMRQorLS0gZXJy b3IgRVJfSU5ERVhfQ09SUlVQVAogc2VsZWN0IHogZnJvbSBjb3JydXB0X2JpdF90ZXN0X+KUgMO8 OwogCiBzaG93IHdhcm5pbmdzOwpAQCAtMTA5LDcgKzEwOSw3IEBAIGNoZWNrIHRhYmxlIGNvcnJ1 cHRfYml0X3Rlc3Rf4pSAw7w7CiAKIHNldCBuYW1lcyB1dGY4OwogCi0tLSBlcnJvciBFUl9OT1Rf S0VZRklMRQorLS0gZXJyb3IgRVJfSU5ERVhfQ09SUlVQVAogc2VsZWN0IHogZnJvbSBjb3JydXB0 X2JpdF90ZXN0X+KUgMO8OwogCiAjIERyb3AgdGhlIGNvcnJ1cHRlZCBpbmRleAoKPT09IG1vZGlm aWVkIGZpbGUgJ3NxbC9ldmVudF9kYl9yZXBvc2l0b3J5LmNjJwotLS0gYS9zcWwvZXZlbnRfZGJf cmVwb3NpdG9yeS5jYwlyZXZpZDp5YXN1ZnVtaS5raW5vc2hpdGFAb3JhY2xlLmNvbS0yMDEyMDQy NzEwNDIzOC0zeGJyNnYweTRzenI3YmtxCisrKyBiL3NxbC9ldmVudF9kYl9yZXBvc2l0b3J5LmNj CXJldmlkOm1hdHRpYXMuam9uc3NvbkBvcmFjbGUuY29tLTIwMTIwNDI3MDkzODI3LTAxNTZ0ZGpj cHRzOGg0MHMKQEAgLTQxNiw3ICs0MTYsMTEgQEAgRXZlbnRfZGJfcmVwb3NpdG9yeTo6aW5kZXhf cmVhZF9mb3JfZGJfZgogICBEQlVHX0VOVEVSKCJFdmVudF9kYl9yZXBvc2l0b3J5OjppbmRleF9y ZWFkX2Zvcl9kYl9mb3JfaV9zIik7CiAKICAgREJVR19QUklOVCgiaW5mbyIsICgiVXNpbmcgcHJl Zml4IHNjYW5uaW5nIG9uIFBLIikpOwotICBldmVudF90YWJsZS0+ZmlsZS0+aGFfaW5kZXhfaW5p dCgwLCAxKTsKKyAgaWYgKChyZXQ9IGV2ZW50X3RhYmxlLT5maWxlLT5oYV9pbmRleF9pbml0KDAs IDEpKSkKKyAgeworICAgIGV2ZW50X3RhYmxlLT5maWxlLT5wcmludF9lcnJvcihyZXQsIE1ZRigw KSk7CisgICAgREJVR19SRVRVUk4odHJ1ZSk7CisgIH0KICAga2V5X2luZm89IGV2ZW50X3RhYmxl LT5rZXlfaW5mbzsKIAogICBpZiAoa2V5X2luZm8tPmtleV9wYXJ0cyA9PSAwIHx8Cgo9PT0gbW9k aWZpZWQgZmlsZSAnc3FsL2ZpbGVzb3J0LmNjJwotLS0gYS9zcWwvZmlsZXNvcnQuY2MJcmV2aWQ6 eWFzdWZ1bWkua2lub3NoaXRhQG9yYWNsZS5jb20tMjAxMjA0MjcxMDQyMzgtM3hicjZ2MHk0c3py N2JrcQorKysgYi9zcWwvZmlsZXNvcnQuY2MJcmV2aWQ6bWF0dGlhcy5qb25zc29uQG9yYWNsZS5j b20tMjAxMjA0MjcwOTM4MjctMDE1NnRkamNwdHM4aDQwcwpAQCAtNjU4LDcgKzY1OCw4IEBAIHN0 YXRpYyBoYV9yb3dzIGZpbmRfYWxsX2tleXMoU29ydF9wYXJhbSAKICAgaWYgKCFxdWlja19zZWxl Y3QpCiAgIHsKICAgICBuZXh0X3Bvcz0odWNoYXIqKSAwOwkJCS8qIEZpbmQgcmVjb3JkcyBpbiBz ZXF1ZW5jZSAqLwotICAgIGZpbGUtPmhhX3JuZF9pbml0KDEpOworICAgIGlmIChmaWxlLT5oYV9y bmRfaW5pdCgxKSkKKyAgICAgIERCVUdfUkVUVVJOKEhBX1BPU19FUlJPUik7CiAgICAgZmlsZS0+ ZXh0cmFfb3B0KEhBX0VYVFJBX0NBQ0hFLAogCQkgICAgY3VycmVudF90aGQtPnZhcmlhYmxlcy5y ZWFkX2J1ZmZfc2l6ZSk7CiAgIH0KCj09PSBtb2RpZmllZCBmaWxlICdzcWwvaGFfcGFydGl0aW9u LmNjJwotLS0gYS9zcWwvaGFfcGFydGl0aW9uLmNjCXJldmlkOnlhc3VmdW1pLmtpbm9zaGl0YUBv cmFjbGUuY29tLTIwMTIwNDI3MTA0MjM4LTN4YnI2djB5NHN6cjdia3EKKysrIGIvc3FsL2hhX3Bh cnRpdGlvbi5jYwlyZXZpZDptYXR0aWFzLmpvbnNzb25Ab3JhY2xlLmNvbS0yMDEyMDQyNzA5Mzgy Ny0wMTU2dGRqY3B0czhoNDBzCkBAIC00NjMxLDcgKzQ2MzEsNiBAQCBpbnQgaGFfcGFydGl0aW9u OjppbmRleF9pbml0KHVpbnQgaW54LCBiCiAgIGZpbGU9IG1fZmlsZTsKICAgZG8KICAgewotICAg IC8qIFRPRE8gUk9OTTogQ2hhbmdlIHRvIGluZGV4X2luaXQoKSB3aGVuIGNvZGUgaXMgc3RhYmxl ICovCiAgICAgaWYgKGJpdG1hcF9pc19zZXQoJihtX3BhcnRfaW5mby0+cmVhZF9wYXJ0aXRpb25z KSwgKGZpbGUgLSBtX2ZpbGUpKSkKICAgICAgIGlmICgoZXJyb3I9ICgqZmlsZSktPmhhX2luZGV4 X2luaXQoaW54LCBzb3J0ZWQpKSkKICAgICAgIHsKQEAgLTQ2NzAsNyArNDY2OSw2IEBAIGludCBo YV9wYXJ0aXRpb246OmluZGV4X2VuZCgpCiAgIGRvCiAgIHsKICAgICBpbnQgdG1wOwotICAgIC8q IFRPRE8gUk9OTTogQ2hhbmdlIHRvIGluZGV4X2VuZCgpIHdoZW4gY29kZSBpcyBzdGFibGUgKi8K ICAgICBpZiAoYml0bWFwX2lzX3NldCgmKG1fcGFydF9pbmZvLT5yZWFkX3BhcnRpdGlvbnMpLCAo ZmlsZSAtIG1fZmlsZSkpKQogICAgICAgaWYgKCh0bXA9ICgqZmlsZSktPmhhX2luZGV4X2VuZCgp KSkKICAgICAgICAgZXJyb3I9IHRtcDsKQEAgLTc1ODEsNyArNzU3OSw3IEBAIHZvaWQgaGFfcGFy dGl0aW9uOjpnZXRfYXV0b19pbmNyZW1lbnQodWwKICAgICAgIC8qIE9ubHkgbmJfZGVzaXJlZF92 YWx1ZXMgPSAxIG1ha2VzIHNlbnNlICovCiAgICAgICAoKmZpbGUpLT5nZXRfYXV0b19pbmNyZW1l bnQob2Zmc2V0LCBpbmNyZW1lbnQsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZmlyc3RfdmFsdWVfcGFydCwgJm5iX3Jlc2VydmVkX3ZhbHVlc19wYXJ0KTsKLSAgICAgIGlm IChmaXJzdF92YWx1ZV9wYXJ0ID09IH4odWxvbmdsb25nKSgwKSkgLy8gZXJyb3IgaW4gb25lIHBh cnRpdGlvbgorICAgICAgaWYgKGZpcnN0X3ZhbHVlX3BhcnQgPT0gVUxPTkdMT05HX01BWCkgLy8g ZXJyb3IgaW4gb25lIHBhcnRpdGlvbgogICAgICAgewogICAgICAgICAqZmlyc3RfdmFsdWU9IGZp cnN0X3ZhbHVlX3BhcnQ7CiAgICAgICAgIC8qIGxvZyB0aGF0IHRoZSBlcnJvciB3YXMgYmV0d2Vl biB0YWJsZS9wYXJ0aXRpb24gaGFuZGxlciAqLwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NxbC9oYW5k bGVyLmNjJwotLS0gYS9zcWwvaGFuZGxlci5jYwlyZXZpZDp5YXN1ZnVtaS5raW5vc2hpdGFAb3Jh Y2xlLmNvbS0yMDEyMDQyNzEwNDIzOC0zeGJyNnYweTRzenI3YmtxCisrKyBiL3NxbC9oYW5kbGVy LmNjCXJldmlkOm1hdHRpYXMuam9uc3NvbkBvcmFjbGUuY29tLTIwMTIwNDI3MDkzODI3LTAxNTZ0 ZGpjcHRzOGg0MHMKQEAgLTIzNzMsNTIgKzIzNzMsMjEzIEBAIGludCBoYW5kbGVyOjpoYV9vcGVu KFRBQkxFICp0YWJsZV9hcmcsIGMKICAgREJVR19SRVRVUk4oZXJyb3IpOwogfQogCisKKy8qKgor ICBDbG9zZSBoYW5kbGVyLgorKi8KKwogaW50IGhhbmRsZXI6OmhhX2Nsb3NlKHZvaWQpCiB7Cisg IERCVUdfRU5URVIoImhhbmRsZXI6OmhhX2Nsb3NlIik7CiAjaWZkZWYgSEFWRV9QU0lfVEFCTEVf SU5URVJGQUNFCiAgIFBTSV9DQUxMKGNsb3NlX3RhYmxlKShtX3BzaSk7CiAgIG1fcHNpPSBOVUxM OyAvKiBpbnN0cnVtZW50YXRpb24gaGFuZGxlLCBpbnZhbGlkIGFmdGVyIGNsb3NlX3RhYmxlKCkg Ki8KICNlbmRpZgogICBEQlVHX0FTU0VSVChtX3BzaSA9PSBOVUxMKTsKICAgREJVR19BU1NFUlQo bV9sb2NrX3R5cGUgPT0gRl9VTkxDSyk7Ci0gIHJldHVybiBjbG9zZSgpOworICBEQlVHX0FTU0VS VChpbml0ZWQgPT0gTk9ORSk7CisgIERCVUdfUkVUVVJOKGNsb3NlKCkpOworfQorCisKKy8qKgor ICBJbml0aWFsaXplIHVzZSBvZiBpbmRleC4KKworICBAcGFyYW0gaWR4ICAgICBJbmRleCB0byB1 c2UKKyAgQHBhcmFtIHNvcnRlZCAgVXNlIHNvcnRlZCBvcmRlcgorCisgIEByZXR1cm4gT3BlcmF0 aW9uIHN0YXR1cworICAgIEByZXR2YWwgMCAgICAgU3VjY2VzcworICAgIEByZXR2YWwgIT0gMCAg RXJyb3IgKGVycm9yIGNvZGUgcmV0dXJuZWQpCisqLworCitpbnQgaGFuZGxlcjo6aGFfaW5kZXhf aW5pdCh1aW50IGlkeCwgYm9vbCBzb3J0ZWQpCit7CisgIGludCByZXN1bHQ7CisgIERCVUdfRU5U RVIoImhhX2luZGV4X2luaXQiKTsKKyAgREJVR19BU1NFUlQodGFibGVfc2hhcmUtPnRtcF90YWJs ZSAhPSBOT19UTVBfVEFCTEUgfHwKKyAgICAgICAgICAgICAgbV9sb2NrX3R5cGUgIT0gRl9VTkxD Syk7CisgIERCVUdfQVNTRVJUKGluaXRlZCA9PSBOT05FKTsKKyAgaWYgKCEocmVzdWx0PSBpbmRl eF9pbml0KGlkeCwgc29ydGVkKSkpCisgICAgaW5pdGVkPSBJTkRFWDsKKyAgZW5kX3JhbmdlPSBO VUxMOworICBEQlVHX1JFVFVSTihyZXN1bHQpOworfQorCisKKy8qKgorICBFbmQgdXNlIG9mIGlu ZGV4LgorCisgIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cworICAgIEByZXR2YWwgMCAgICAgU3Vj Y2VzcworICAgIEByZXR2YWwgIT0gMCAgRXJyb3IgKGVycm9yIGNvZGUgcmV0dXJuZWQpCisqLwor CitpbnQgaGFuZGxlcjo6aGFfaW5kZXhfZW5kKCkKK3sKKyAgREJVR19FTlRFUigiaGFfaW5kZXhf ZW5kIik7CisgIC8qIFNRTCBIQU5ETEVSIGZ1bmN0aW9uIGNhbiBjYWxsIHRoaXMgd2l0aG91dCBo YXZpbmcgaXQgbG9ja2VkLiAqLworICBEQlVHX0FTU0VSVCh0YWJsZS0+b3Blbl9ieV9oYW5kbGVy IHx8CisgICAgICAgICAgICAgIHRhYmxlX3NoYXJlLT50bXBfdGFibGUgIT0gTk9fVE1QX1RBQkxF IHx8CisgICAgICAgICAgICAgIG1fbG9ja190eXBlICE9IEZfVU5MQ0spOworICBEQlVHX0FTU0VS VChpbml0ZWQgPT0gSU5ERVgpOworICBpbml0ZWQ9IE5PTkU7CisgIGVuZF9yYW5nZT0gTlVMTDsK KyAgREJVR19SRVRVUk4oaW5kZXhfZW5kKCkpOworfQorCisKKy8qKgorICBJbml0aWFsaXplIHRh YmxlIGZvciByYW5kb20gcmVhZCBvciBzY2FuLgorCisgIEBwYXJhbSBzY2FuICBpZiB0cnVlOiBJ bml0aWFsaXplIGZvciByYW5kb20gc2NhbnMgdGhyb3VnaCBybmRfbmV4dCgpCisgICAgICAgICAg ICAgICBpZiBmYWxzZTogSW5pdGlhbGl6ZSBmb3IgcmFuZG9tIHJlYWRzIHRocm91Z2ggcm5kX3Bv cygpCisKKyAgQHJldHVybiBPcGVyYXRpb24gc3RhdHVzCisgICAgQHJldHZhbCAwICAgICBTdWNj ZXNzCisgICAgQHJldHZhbCAhPSAwICBFcnJvciAoZXJyb3IgY29kZSByZXR1cm5lZCkKKyovCisK K2ludCBoYW5kbGVyOjpoYV9ybmRfaW5pdChib29sIHNjYW4pCit7CisgIGludCByZXN1bHQ7Cisg IERCVUdfRU5URVIoImhhX3JuZF9pbml0Iik7CisgIERCVUdfQVNTRVJUKHRhYmxlX3NoYXJlLT50 bXBfdGFibGUgIT0gTk9fVE1QX1RBQkxFIHx8CisgICAgICAgICAgICAgIG1fbG9ja190eXBlICE9 IEZfVU5MQ0spOworICBEQlVHX0FTU0VSVChpbml0ZWQgPT0gTk9ORSB8fCAoaW5pdGVkID09IFJO RCAmJiBzY2FuKSk7CisgIGluaXRlZD0gKHJlc3VsdD0gcm5kX2luaXQoc2NhbikpID8gTk9ORSA6 IFJORDsKKyAgZW5kX3JhbmdlPSBOVUxMOworICBEQlVHX1JFVFVSTihyZXN1bHQpOwogfQogCisK Ky8qKgorICBFbmQgdXNlIG9mIHJhbmRvbSBhY2Nlc3MuCisKKyAgQHJldHVybiBPcGVyYXRpb24g c3RhdHVzCisgICAgQHJldHZhbCAwICAgICBTdWNjZXNzCisgICAgQHJldHZhbCAhPSAwICBFcnJv ciAoZXJyb3IgY29kZSByZXR1cm5lZCkKKyovCisKK2ludCBoYW5kbGVyOjpoYV9ybmRfZW5kKCkK K3sKKyAgREJVR19FTlRFUigiaGFfcm5kX2VuZCIpOworICAvKiBTUUwgSEFORExFUiBmdW5jdGlv biBjYW4gY2FsbCB0aGlzIHdpdGhvdXQgaGF2aW5nIGl0IGxvY2tlZC4gKi8KKyAgREJVR19BU1NF UlQodGFibGUtPm9wZW5fYnlfaGFuZGxlciB8fAorICAgICAgICAgICAgICB0YWJsZV9zaGFyZS0+ dG1wX3RhYmxlICE9IE5PX1RNUF9UQUJMRSB8fAorICAgICAgICAgICAgICBtX2xvY2tfdHlwZSAh PSBGX1VOTENLKTsKKyAgREJVR19BU1NFUlQoaW5pdGVkID09IFJORCk7CisgIGluaXRlZD0gTk9O RTsKKyAgZW5kX3JhbmdlPSBOVUxMOworICBEQlVHX1JFVFVSTihybmRfZW5kKCkpOworfQorCisK Ky8qKgorICBSZWFkIG5leHQgcm93IHZpYSByYW5kb20gc2Nhbi4KKworICBAcGFyYW0gYnVmICBC dWZmZXIgdG8gcmVhZCB0aGUgcm93IGludG8KKworICBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMK KyAgICBAcmV0dmFsIDAgICAgIFN1Y2Nlc3MKKyAgICBAcmV0dmFsICE9IDAgIEVycm9yIChlcnJv ciBjb2RlIHJldHVybmVkKQorKi8KKwogaW50IGhhbmRsZXI6OmhhX3JuZF9uZXh0KHVjaGFyICpi dWYpCiB7CiAgIGludCByZXN1bHQ7CisgIERCVUdfRU5URVIoImhhbmRsZXI6OmhhX3JuZF9uZXh0 Iik7CiAgIERCVUdfQVNTRVJUKHRhYmxlX3NoYXJlLT50bXBfdGFibGUgIT0gTk9fVE1QX1RBQkxF IHx8CiAgICAgICAgICAgICAgIG1fbG9ja190eXBlICE9IEZfVU5MQ0spOworICBEQlVHX0FTU0VS VChpbml0ZWQgPT0gUk5EKTsKIAogICBNWVNRTF9UQUJMRV9JT19XQUlUKG1fcHNpLCBQU0lfVEFC TEVfRkVUQ0hfUk9XLCBNQVhfS0VZLCAwLAogICAgIHsgcmVzdWx0PSBybmRfbmV4dChidWYpOyB9 KQotICByZXR1cm4gcmVzdWx0OworICBEQlVHX1JFVFVSTihyZXN1bHQpOwogfQogCisKKy8qKgor ICBSZWFkIHJvdyB2aWEgcmFuZG9tIHNjYW4gZnJvbSBwb3NpdGlvbi4KKworICBAcGFyYW1bb3V0 XSBidWYgIEJ1ZmZlciB0byByZWFkIHRoZSByb3cgaW50bworICBAcGFyYW0gICAgICBwb3MgIFBv c2l0aW9uIGZyb20gcG9zaXRpb24oKSBjYWxsCisKKyAgQHJldHVybiBPcGVyYXRpb24gc3RhdHVz CisgICAgQHJldHZhbCAwICAgICBTdWNjZXNzCisgICAgQHJldHZhbCAhPSAwICBFcnJvciAoZXJy b3IgY29kZSByZXR1cm5lZCkKKyovCisKIGludCBoYW5kbGVyOjpoYV9ybmRfcG9zKHVjaGFyICpi dWYsIHVjaGFyICpwb3MpCiB7CiAgIGludCByZXN1bHQ7CisgIERCVUdfRU5URVIoImhhbmRsZXI6 OmhhX3JuZF9wb3MiKTsKICAgREJVR19BU1NFUlQodGFibGVfc2hhcmUtPnRtcF90YWJsZSAhPSBO T19UTVBfVEFCTEUgfHwKICAgICAgICAgICAgICAgbV9sb2NrX3R5cGUgIT0gRl9VTkxDSyk7Cisg IC8qIFRPRE86IEZpbmQgb3V0IGhvdyB0byBzb2x2ZSBoYV9ybmRfcG9zIHdoZW4gZmluZGluZyBk dXBsaWNhdGUgdXBkYXRlLiAqLworICAvKiBEQlVHX0FTU0VSVChpbml0ZWQgPT0gUk5EKTsgKi8K IAogICBNWVNRTF9UQUJMRV9JT19XQUlUKG1fcHNpLCBQU0lfVEFCTEVfRkVUQ0hfUk9XLCBNQVhf S0VZLCAwLAogICAgIHsgcmVzdWx0PSBybmRfcG9zKGJ1ZiwgcG9zKTsgfSkKLSAgcmV0dXJuIHJl c3VsdDsKKyAgREJVR19SRVRVUk4ocmVzdWx0KTsKIH0KIAorCisvKioKKyAgUmVhZCBbcGFydCBv Zl0gcm93IHZpYSBbcGFydCBvZl0gaW5kZXguCisgIEBwYXJhbVtvdXRdIGJ1ZiAgICAgICAgICBi dWZmZXIgd2hlcmUgc3RvcmUgdGhlIGRhdGEKKyAgQHBhcmFtICAgICAga2V5ICAgICAgICAgIEtl eSB0byBzZWFyY2ggZm9yCisgIEBwYXJhbSAgICAgIGtleXBhcnRfbWFwICBXaGljaCBwYXJ0IG9m IGtleSB0byB1c2UKKyAgQHBhcmFtICAgICAgZmluZF9mbGFnICAgIERpcmVjdGlvbi9jb25kaXRp b24gb24ga2V5IHVzYWdlCisKKyAgQHJldHVybnMgT3BlcmF0aW9uIHN0YXR1cworICAgIEByZXR2 YWwgIDAgICAgICAgICAgICAgICAgICAgU3VjY2VzcyAoZm91bmQgYSByZWNvcmQsIGFuZCBmdW5j dGlvbiBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0YWJsZS0+c3Rh dHVzIHRvIDApCisgICAgQHJldHZhbCAgSEFfRVJSX0VORF9PRl9GSUxFICBSb3cgbm90IGZvdW5k IChmdW5jdGlvbiBoYXMgc2V0IHRhYmxlLT5zdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRvIFNUQVRVU19OT1RfRk9VTkQpCisgICAgQHJldHZhbCAgIT0gMCAgICAgICAg ICAgICAgICBFcnJvcgorCisgIEBub3RlIFBvc2l0aW9ucyBhbiBpbmRleCBjdXJzb3IgdG8gdGhl IGluZGV4IHNwZWNpZmllZCBpbiB0aGUgaGFuZGxlLgorICBGZXRjaGVzIHRoZSByb3cgaWYgYXZh aWxhYmxlLiBJZiB0aGUga2V5IHZhbHVlIGlzIG51bGwsCisgIGJlZ2luIGF0IHRoZSBmaXJzdCBr ZXkgb2YgdGhlIGluZGV4LgorICBoYV9pbmRleF9yZWFkX21hcCBjYW4gYmUgcmVzdGFydGVkIHdp dGhvdXQgY2FsbGluZyBpbmRleF9lbmQgb24gdGhlIHByZXZpb3VzCisgIGluZGV4IHNjYW4gYW5k IHdpdGhvdXQgY2FsbGluZyBoYV9pbmRleF9pbml0LiBJbiB0aGlzIGNhc2UgdGhlCisgIGhhX2lu ZGV4X3JlYWRfbWFwIGlzIG9uIHRoZSBzYW1lIGluZGV4IGFzIHRoZSBwcmV2aW91cyBoYV9pbmRl eF9zY2FuLgorICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgg bXVsdGkgcmVhZCByYW5nZXMuCisqLworCiBpbnQgaGFuZGxlcjo6aGFfaW5kZXhfcmVhZF9tYXAo dWNoYXIgKmJ1ZiwgY29uc3QgdWNoYXIgKmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrZXlfcGFydF9tYXAga2V5cGFydF9tYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBoYV9ya2V5X2Z1bmN0aW9uIGZpbmRfZmxhZykKIHsKICAgaW50IHJlc3VsdDsK KyAgREJVR19FTlRFUigiaGFuZGxlcjo6aGFfaW5kZXhfcmVhZF9tYXAiKTsKICAgREJVR19BU1NF UlQodGFibGVfc2hhcmUtPnRtcF90YWJsZSAhPSBOT19UTVBfVEFCTEUgfHwKICAgICAgICAgICAg ICAgbV9sb2NrX3R5cGUgIT0gRl9VTkxDSyk7CisgIERCVUdfQVNTRVJUKGluaXRlZCA9PSBJTkRF WCk7CiAKICAgTVlTUUxfVEFCTEVfSU9fV0FJVChtX3BzaSwgUFNJX1RBQkxFX0ZFVENIX1JPVywg YWN0aXZlX2luZGV4LCAwLAogICAgIHsgcmVzdWx0PSBpbmRleF9yZWFkX21hcChidWYsIGtleSwg a2V5cGFydF9tYXAsIGZpbmRfZmxhZyk7IH0pCi0gIHJldHVybiByZXN1bHQ7CisgIERCVUdfUkVU VVJOKHJlc3VsdCk7CiB9CiAKKworLyoqCisgIEluaXRpYWxpemVzIGFuIGluZGV4IGFuZCByZWFk IGl0LgorCisgIEBzZWUgaGFuZGxlcjo6aGFfaW5kZXhfcmVhZF9tYXAuCisqLworCiBpbnQgaGFu ZGxlcjo6aGFfaW5kZXhfcmVhZF9pZHhfbWFwKHVjaGFyICpidWYsIHVpbnQgaW5kZXgsIGNvbnN0 IHVjaGFyICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9wYXJ0 X21hcCBrZXlwYXJ0X21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBoYV9ya2V5X2Z1bmN0aW9uIGZpbmRfZmxhZykKQEAgLTI0MzMsODQgKzI1OTQsMTg2IEBAIGlu dCBoYW5kbGVyOjpoYV9pbmRleF9yZWFkX2lkeF9tYXAodWNoYXIKICAgcmV0dXJuIHJlc3VsdDsK IH0KIAorCisvKioKKyAgUmVhZHMgdGhlIG5leHQgcm93IHZpYSBpbmRleC4KKworICBAcGFyYW1b b3V0XSBidWYgIFJvdyBkYXRhCisKKyAgQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICAgIEBy ZXR2YWwgIDAgICAgICAgICAgICAgICAgICAgU3VjY2VzcworICAgIEByZXR2YWwgIEhBX0VSUl9F TkRfT0ZfRklMRSAgUm93IG5vdCBmb3VuZAorICAgIEByZXR2YWwgICE9IDAgICAgICAgICAgICAg ICAgRXJyb3IKKyovCisKIGludCBoYW5kbGVyOjpoYV9pbmRleF9uZXh0KHVjaGFyICogYnVmKQog ewogICBpbnQgcmVzdWx0OworICBEQlVHX0VOVEVSKCJoYW5kbGVyOjpoYV9pbmRleF9uZXh0Iik7 CiAgIERCVUdfQVNTRVJUKHRhYmxlX3NoYXJlLT50bXBfdGFibGUgIT0gTk9fVE1QX1RBQkxFIHx8 CiAgICAgICAgICAgICAgIG1fbG9ja190eXBlICE9IEZfVU5MQ0spOworICBEQlVHX0FTU0VSVChp bml0ZWQgPT0gSU5ERVgpOwogCiAgIE1ZU1FMX1RBQkxFX0lPX1dBSVQobV9wc2ksIFBTSV9UQUJM RV9GRVRDSF9ST1csIGFjdGl2ZV9pbmRleCwgMCwKICAgICB7IHJlc3VsdD0gaW5kZXhfbmV4dChi dWYpOyB9KQotICByZXR1cm4gcmVzdWx0OworICBEQlVHX1JFVFVSTihyZXN1bHQpOwogfQogCisK Ky8qKgorICBSZWFkcyB0aGUgcHJldmlvdXMgcm93IHZpYSBpbmRleC4KKworICBAcGFyYW1bb3V0 XSBidWYgIFJvdyBkYXRhCisKKyAgQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICAgIEByZXR2 YWwgIDAgICAgICAgICAgICAgICAgICAgU3VjY2VzcworICAgIEByZXR2YWwgIEhBX0VSUl9FTkRf T0ZfRklMRSAgUm93IG5vdCBmb3VuZAorICAgIEByZXR2YWwgICE9IDAgICAgICAgICAgICAgICAg RXJyb3IKKyovCisKIGludCBoYW5kbGVyOjpoYV9pbmRleF9wcmV2KHVjaGFyICogYnVmKQogewog ICBpbnQgcmVzdWx0OworICBEQlVHX0VOVEVSKCJoYW5kbGVyOjpoYV9pbmRleF9wcmV2Iik7CiAg IERCVUdfQVNTRVJUKHRhYmxlX3NoYXJlLT50bXBfdGFibGUgIT0gTk9fVE1QX1RBQkxFIHx8CiAg ICAgICAgICAgICAgIG1fbG9ja190eXBlICE9IEZfVU5MQ0spOworICBEQlVHX0FTU0VSVChpbml0 ZWQgPT0gSU5ERVgpOwogCiAgIE1ZU1FMX1RBQkxFX0lPX1dBSVQobV9wc2ksIFBTSV9UQUJMRV9G RVRDSF9ST1csIGFjdGl2ZV9pbmRleCwgMCwKICAgICB7IHJlc3VsdD0gaW5kZXhfcHJldihidWYp OyB9KQotICByZXR1cm4gcmVzdWx0OworICBEQlVHX1JFVFVSTihyZXN1bHQpOwogfQogCisKKy8q KgorICBSZWFkcyB0aGUgZmlyc3Qgcm93IHZpYSBpbmRleC4KKworICBAcGFyYW1bb3V0XSBidWYg IFJvdyBkYXRhCisKKyAgQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICAgIEByZXR2YWwgIDAg ICAgICAgICAgICAgICAgICAgU3VjY2VzcworICAgIEByZXR2YWwgIEhBX0VSUl9FTkRfT0ZfRklM RSAgUm93IG5vdCBmb3VuZAorICAgIEByZXR2YWwgICE9IDAgICAgICAgICAgICAgICAgRXJyb3IK KyovCisKIGludCBoYW5kbGVyOjpoYV9pbmRleF9maXJzdCh1Y2hhciAqIGJ1ZikKIHsKICAgaW50 IHJlc3VsdDsKICAgREJVR19BU1NFUlQodGFibGVfc2hhcmUtPnRtcF90YWJsZSAhPSBOT19UTVBf VEFCTEUgfHwKICAgICAgICAgICAgICAgbV9sb2NrX3R5cGUgIT0gRl9VTkxDSyk7CisgIERCVUdf QVNTRVJUKGluaXRlZCA9PSBJTkRFWCk7CiAKICAgTVlTUUxfVEFCTEVfSU9fV0FJVChtX3BzaSwg UFNJX1RBQkxFX0ZFVENIX1JPVywgYWN0aXZlX2luZGV4LCAwLAogICAgIHsgcmVzdWx0PSBpbmRl eF9maXJzdChidWYpOyB9KQogICByZXR1cm4gcmVzdWx0OwogfQogCisKKy8qKgorICBSZWFkcyB0 aGUgbGFzdCByb3cgdmlhIGluZGV4LgorCisgIEBwYXJhbVtvdXRdIGJ1ZiAgUm93IGRhdGEKKwor ICBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgICAgQHJldHZhbCAgMCAgICAgICAgICAgICAg ICAgICBTdWNjZXNzCisgICAgQHJldHZhbCAgSEFfRVJSX0VORF9PRl9GSUxFICBSb3cgbm90IGZv dW5kCisgICAgQHJldHZhbCAgIT0gMCAgICAgICAgICAgICAgICBFcnJvcgorKi8KKwogaW50IGhh bmRsZXI6OmhhX2luZGV4X2xhc3QodWNoYXIgKiBidWYpCiB7CiAgIGludCByZXN1bHQ7CiAgIERC VUdfQVNTRVJUKHRhYmxlX3NoYXJlLT50bXBfdGFibGUgIT0gTk9fVE1QX1RBQkxFIHx8CiAgICAg ICAgICAgICAgIG1fbG9ja190eXBlICE9IEZfVU5MQ0spOworICBEQlVHX0FTU0VSVChpbml0ZWQg PT0gSU5ERVgpOwogCiAgIE1ZU1FMX1RBQkxFX0lPX1dBSVQobV9wc2ksIFBTSV9UQUJMRV9GRVRD SF9ST1csIGFjdGl2ZV9pbmRleCwgMCwKICAgICB7IHJlc3VsdD0gaW5kZXhfbGFzdChidWYpOyB9 KQogICByZXR1cm4gcmVzdWx0OwogfQogCisKKy8qKgorICBSZWFkcyB0aGUgbmV4dCBzYW1lIHJv dyB2aWEgaW5kZXguCisKKyAgQHBhcmFtW291dF0gYnVmICAgICBSb3cgZGF0YQorICBAcGFyYW0g ICAgICBrZXkgICAgIEtleSB0byBzZWFyY2ggZm9yCisgIEBwYXJhbSAgICAgIGtleWxlbiAgTGVu Z3RoIG9mIGtleQorCisgIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAgICBAcmV0dmFsICAw ICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MKKyAgICBAcmV0dmFsICBIQV9FUlJfRU5EX09GX0ZJ TEUgIFJvdyBub3QgZm91bmQKKyAgICBAcmV0dmFsICAhPSAwICAgICAgICAgICAgICAgIEVycm9y CisqLworCiBpbnQgaGFuZGxlcjo6aGFfaW5kZXhfbmV4dF9zYW1lKHVjaGFyICpidWYsIGNvbnN0 IHVjaGFyICprZXksIHVpbnQga2V5bGVuKQogewogICBpbnQgcmVzdWx0OwogICBEQlVHX0FTU0VS VCh0YWJsZV9zaGFyZS0+dG1wX3RhYmxlICE9IE5PX1RNUF9UQUJMRSB8fAogICAgICAgICAgICAg ICBtX2xvY2tfdHlwZSAhPSBGX1VOTENLKTsKKyAgREJVR19BU1NFUlQoaW5pdGVkID09IElOREVY KTsKIAogICBNWVNRTF9UQUJMRV9JT19XQUlUKG1fcHNpLCBQU0lfVEFCTEVfRkVUQ0hfUk9XLCBh Y3RpdmVfaW5kZXgsIDAsCiAgICAgeyByZXN1bHQ9IGluZGV4X25leHRfc2FtZShidWYsIGtleSwg a2V5bGVuKTsgfSkKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorCisKKy8qKgorICBSZWFkIG9uZSBy b3cgdmlhIGluZGV4LgorCisgIEBwYXJhbVtvdXRdIGJ1ZiAgICAgICAgUm93IGRhdGEKKyAgQHBh cmFtICAgICAga2V5ICAgICAgICBLZXkgdG8gc2VhcmNoIGZvcgorICBAcGFyYW0gICAgICBrZXls ZW4gICAgIExlbmd0aCBvZiBrZXkKKyAgQHBhcmFtICAgICAgZmluZF9mbGFnICBEaXJlY3Rpb24v Y29uZGl0aW9uIG9uIGtleSB1c2FnZQorCisgIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAg ICBAcmV0dmFsICAwICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MKKyAgICBAcmV0dmFsICBIQV9F UlJfRU5EX09GX0ZJTEUgIFJvdyBub3QgZm91bmQKKyAgICBAcmV0dmFsICAhPSAwICAgICAgICAg ICAgICAgIEVycm9yCisqLworCiBpbnQgaGFuZGxlcjo6aGFfaW5kZXhfcmVhZCh1Y2hhciAqYnVm LCBjb25zdCB1Y2hhciAqa2V5LCB1aW50IGtleV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIGhhX3JrZXlfZnVuY3Rpb24gZmluZF9mbGFnKQogewogICBpbnQgcmVzdWx0Owog ICBEQlVHX0FTU0VSVCh0YWJsZV9zaGFyZS0+dG1wX3RhYmxlICE9IE5PX1RNUF9UQUJMRSB8fAog ICAgICAgICAgICAgICBtX2xvY2tfdHlwZSAhPSBGX1VOTENLKTsKKyAgREJVR19BU1NFUlQoaW5p dGVkID09IElOREVYKTsKIAogICBNWVNRTF9UQUJMRV9JT19XQUlUKG1fcHNpLCBQU0lfVEFCTEVf RkVUQ0hfUk9XLCBhY3RpdmVfaW5kZXgsIDAsCiAgICAgeyByZXN1bHQ9IGluZGV4X3JlYWQoYnVm LCBrZXksIGtleV9sZW4sIGZpbmRfZmxhZyk7IH0pCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKKwor LyoqCisgIFJlYWRzIHRoZSBsYXN0IHJvdyB2aWEgaW5kZXguCisKKyAgQHBhcmFtW291dF0gYnVm ICAgICAgICBSb3cgZGF0YQorICBAcGFyYW0gICAgICBrZXkgICAgICAgIEtleSB0byBzZWFyY2gg Zm9yCisgIEBwYXJhbSAgICAgIGtleWxlbiAgICAgTGVuZ3RoIG9mIGtleQorCisgIEByZXR1cm4g T3BlcmF0aW9uIHN0YXR1cy4KKyAgICBAcmV0dmFsICAwICAgICAgICAgICAgICAgICAgIFN1Y2Nl c3MKKyAgICBAcmV0dmFsICBIQV9FUlJfRU5EX09GX0ZJTEUgIFJvdyBub3QgZm91bmQKKyAgICBA cmV0dmFsICAhPSAwICAgICAgICAgICAgICAgIEVycm9yCisqLworCiBpbnQgaGFuZGxlcjo6aGFf aW5kZXhfcmVhZF9sYXN0KHVjaGFyICpidWYsIGNvbnN0IHVjaGFyICprZXksIHVpbnQga2V5X2xl bikKIHsKICAgaW50IHJlc3VsdDsKICAgREJVR19BU1NFUlQodGFibGVfc2hhcmUtPnRtcF90YWJs ZSAhPSBOT19UTVBfVEFCTEUgfHwKICAgICAgICAgICAgICAgbV9sb2NrX3R5cGUgIT0gRl9VTkxD Syk7CisgIERCVUdfQVNTRVJUKGluaXRlZCA9PSBJTkRFWCk7CiAKICAgTVlTUUxfVEFCTEVfSU9f V0FJVChtX3BzaSwgUFNJX1RBQkxFX0ZFVENIX1JPVywgYWN0aXZlX2luZGV4LCAwLAogICAgIHsg cmVzdWx0PSBpbmRleF9yZWFkX2xhc3QoYnVmLCBrZXksIGtleV9sZW4pOyB9KQogICByZXR1cm4g cmVzdWx0OwogfQogCisKIC8qKgogICBSZWFkIGZpcnN0IHJvdyAob25seSkgZnJvbSBhIHRhYmxl LgogCkBAIC0yNTMyLDE2ICsyNzk1LDI3IEBAIGludCBoYW5kbGVyOjpyZWFkX2ZpcnN0X3Jvdyh1 Y2hhciAqIGJ1ZiwKICAgaWYgKHN0YXRzLmRlbGV0ZWQgPCAxMCB8fCBwcmltYXJ5X2tleSA+PSBN QVhfS0VZIHx8CiAgICAgICAhKGluZGV4X2ZsYWdzKHByaW1hcnlfa2V5LCAwLCAwKSAmIEhBX1JF QURfT1JERVIpKQogICB7Ci0gICAgKHZvaWQpIGhhX3JuZF9pbml0KDEpOwotICAgIHdoaWxlICgo ZXJyb3I9IGhhX3JuZF9uZXh0KGJ1ZikpID09IEhBX0VSUl9SRUNPUkRfREVMRVRFRCkgOwotICAg ICh2b2lkKSBoYV9ybmRfZW5kKCk7CisgICAgaWYgKCEoZXJyb3I9IGhhX3JuZF9pbml0KDEpKSkK KyAgICB7CisgICAgICBpbnQgZW5kX2Vycm9yOworICAgICAgd2hpbGUgKChlcnJvcj0gaGFfcm5k X25leHQoYnVmKSkgPT0gSEFfRVJSX1JFQ09SRF9ERUxFVEVEKQorICAgICAgICAvKiBza2lwIGRl bGV0ZWQgcm93ICovOworICAgICAgZW5kX2Vycm9yPSBoYV9ybmRfZW5kKCk7CisgICAgICBpZiAo IWVycm9yKQorICAgICAgICBlcnJvcj0gZW5kX2Vycm9yOworICAgIH0KICAgfQogICBlbHNlCiAg IHsKICAgICAvKiBGaW5kIHRoZSBmaXJzdCByb3cgdGhyb3VnaCB0aGUgcHJpbWFyeSBrZXkgKi8K LSAgICAodm9pZCkgaGFfaW5kZXhfaW5pdChwcmltYXJ5X2tleSwgMCk7Ci0gICAgZXJyb3I9IGhh X2luZGV4X2ZpcnN0KGJ1Zik7Ci0gICAgKHZvaWQpIGhhX2luZGV4X2VuZCgpOworICAgIGlmICgh KGVycm9yPSBoYV9pbmRleF9pbml0KHByaW1hcnlfa2V5LCAwKSkpCisgICAgeworICAgICAgaW50 IGVuZF9lcnJvcjsKKyAgICAgIGVycm9yPSBoYV9pbmRleF9maXJzdChidWYpOworICAgICAgZW5k X2Vycm9yPSBoYV9pbmRleF9lbmQoKTsKKyAgICAgIGlmICghZXJyb3IpCisgICAgICAgIGVycm9y PSBlbmRfZXJyb3I7CisgICAgfQogICB9CiAgIERCVUdfUkVUVVJOKGVycm9yKTsKIH0KQEAgLTI4 OTgsMjMgKzMxNzIsMjIgQEAgdm9pZCBoYW5kbGVyOjpjb2x1bW5fYml0bWFwc19zaWduYWwoKQog fQogCiAKLS8qKiBAYnJpZWYKKy8qKgogICBSZXNlcnZlcyBhbiBpbnRlcnZhbCBvZiBhdXRvX2lu Y3JlbWVudCB2YWx1ZXMgZnJvbSB0aGUgaGFuZGxlci4KIAotICBTWU5PUFNJUwotICAgIGdldF9h dXRvX2luY3JlbWVudCgpCi0gICAgb2Zmc2V0ICAgICAgICAgICAgICAKLSAgICBpbmNyZW1lbnQK LSAgICBuYl9kZXNpcmVkX3ZhbHVlcyAgIGhvdyBtYW55IHZhbHVlcyB3ZSB3YW50Ci0gICAgZmly c3RfdmFsdWUgICAgICAgICAoT1VUKSB0aGUgZmlyc3QgdmFsdWUgcmVzZXJ2ZWQgYnkgdGhlIGhh bmRsZXIKLSAgICBuYl9yZXNlcnZlZF92YWx1ZXMgIChPVVQpIGhvdyBtYW55IHZhbHVlcyB0aGUg aGFuZGxlciByZXNlcnZlZAorICBAcGFyYW0gICAgICAgb2Zmc2V0ICAgICAgICAgICAgICBvZmZz ZXQgKG1vZHVsdXMgaW5jcmVtZW50KQorICBAcGFyYW0gICAgICAgaW5jcmVtZW50ICAgICAgICAg ICBpbmNyZW1lbnQgYmV0d2VlbiBjYWxscworICBAcGFyYW0gICAgICAgbmJfZGVzaXJlZF92YWx1 ZXMgICBob3cgbWFueSB2YWx1ZXMgd2Ugd2FudAorICBAcGFyYW1bb3V0XSAgZmlyc3RfdmFsdWUg ICAgICAgICB0aGUgZmlyc3QgdmFsdWUgcmVzZXJ2ZWQgYnkgdGhlIGhhbmRsZXIKKyAgQHBhcmFt W291dF0gIG5iX3Jlc2VydmVkX3ZhbHVlcyAgaG93IG1hbnkgdmFsdWVzIHRoZSBoYW5kbGVyIHJl c2VydmVkCiAKICAgb2Zmc2V0IGFuZCBpbmNyZW1lbnQgbWVhbnMgdGhhdCB3ZSB3YW50IHZhbHVl cyB0byBiZSBvZiB0aGUgZm9ybQogICBvZmZzZXQgKyBOICogaW5jcmVtZW50LCB3aGVyZSBOPj0w IGlzIGludGVnZXIuCi0gIElmIHRoZSBmdW5jdGlvbiBzZXRzICpmaXJzdF92YWx1ZSB0byB+KHVs b25nbG9uZykwIGl0IG1lYW5zIGFuIGVycm9yLgorICBJZiB0aGUgZnVuY3Rpb24gc2V0cyAqZmly c3RfdmFsdWUgdG8gVUxPTkdMT05HX01BWCBpdCBtZWFucyBhbiBlcnJvci4KICAgSWYgdGhlIGZ1 bmN0aW9uIHNldHMgKm5iX3Jlc2VydmVkX3ZhbHVlcyB0byBVTE9OR0xPTkdfTUFYIGl0IG1lYW5z IGl0IGhhcwogICByZXNlcnZlZCB0byAicG9zaXRpdmUgaW5maW5pdGUiLgogKi8KKwogdm9pZCBo YW5kbGVyOjpnZXRfYXV0b19pbmNyZW1lbnQodWxvbmdsb25nIG9mZnNldCwgdWxvbmdsb25nIGlu Y3JlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nbG9uZyBuYl9k ZXNpcmVkX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nbG9u ZyAqZmlyc3RfdmFsdWUsCkBAIC0yOTIyLDEyICszMTk1LDIwIEBAIHZvaWQgaGFuZGxlcjo6Z2V0 X2F1dG9faW5jcmVtZW50KHVsb25nbG8KIHsKICAgdWxvbmdsb25nIG5yOwogICBpbnQgZXJyb3I7 CisgIERCVUdfRU5URVIoImhhbmRsZXI6OmdldF9hdXRvX2luY3JlbWVudCIpOwogCiAgICh2b2lk KSBleHRyYShIQV9FWFRSQV9LRVlSRUFEKTsKICAgdGFibGUtPm1hcmtfY29sdW1uc191c2VkX2J5 X2luZGV4X25vX3Jlc2V0KHRhYmxlLT5zLT5uZXh0X251bWJlcl9pbmRleCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS0+cmVhZF9zZXQpOwogICBjb2x1bW5f Yml0bWFwc19zaWduYWwoKTsKLSAgaW5kZXhfaW5pdCh0YWJsZS0+cy0+bmV4dF9udW1iZXJfaW5k ZXgsIDEpOworICBpZiAoaGFfaW5kZXhfaW5pdCh0YWJsZS0+cy0+bmV4dF9udW1iZXJfaW5kZXgs IDEpKQorICB7CisgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhc3NlcnQgaW4gZGVi dWcsIGFuZCBmYWlsIGluIHJlbGVhc2UgYnVpbGQgKi8KKyAgICBEQlVHX0FTU0VSVCgwKTsKKyAg ICAqZmlyc3RfdmFsdWU9IFVMT05HTE9OR19NQVg7CisgICAgKm5iX3Jlc2VydmVkX3ZhbHVlcz0g MDsKKyAgICBEQlVHX1ZPSURfUkVUVVJOOworICB9CiAgIGlmICh0YWJsZS0+cy0+bmV4dF9udW1i ZXJfa2V5cGFydCA9PSAwKQogICB7CQkJCQkJLy8gQXV0b2luY3JlbWVudCBhdCBrZXktc3RhcnQK ICAgICBlcnJvcj0gaGFfaW5kZXhfbGFzdCh0YWJsZS0+cmVjb3JkWzFdKTsKQEAgLTI5NTcsMTMg KzMyMzgsMjUgQEAgdm9pZCBoYW5kbGVyOjpnZXRfYXV0b19pbmNyZW1lbnQodWxvbmdsbwogICB9 CiAKICAgaWYgKGVycm9yKQotICAgIG5yPTE7CisgIHsKKyAgICBpZiAoZXJyb3IgPT0gSEFfRVJS X0VORF9PRl9GSUxFIHx8IGVycm9yID09IEhBX0VSUl9LRVlfTk9UX0ZPVU5EKQorICAgIHsKKyAg ICAgIC8qIE5vIGVudHJ5IGZvdW5kLCBzdGFydCB3aXRoIDEuICovCisgICAgICBucj0gMTsKKyAg ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIERCVUdfQVNTRVJUKDApOworICAgICAgbnI9IFVM T05HTE9OR19NQVg7CisgICAgfQorICB9CiAgIGVsc2UKICAgICBucj0gKCh1bG9uZ2xvbmcpIHRh YmxlLT5uZXh0X251bWJlcl9maWVsZC0+CiAgICAgICAgICB2YWxfaW50X29mZnNldCh0YWJsZS0+ cy0+cmVjX2J1ZmZfbGVuZ3RoKSsxKTsKLSAgaW5kZXhfZW5kKCk7CisgIGhhX2luZGV4X2VuZCgp OwogICAodm9pZCkgZXh0cmEoSEFfRVhUUkFfTk9fS0VZUkVBRCk7CiAgICpmaXJzdF92YWx1ZT0g bnI7CisgIERCVUdfVk9JRF9SRVRVUk47CiB9CiAKIApAQCAtMzYwMyw2ICszODk2LDQzIEBAIGlu dCBoYW5kbGVyOjpoYV9yZXBhaXIoVEhEKiB0aGQsIEhBX0NIRUMKIAogCiAvKioKKyAgU3RhcnQg YnVsayBpbnNlcnQuCisKKyAgQWxsb3cgdGhlIGhhbmRsZXIgdG8gb3B0aW1pemUgZm9yIG11bHRp cGxlIHJvdyBpbnNlcnQuCisKKyAgQHBhcmFtIHJvd3MgIEVzdGltYXRlZCByb3dzIHRvIGluc2Vy dAorKi8KKwordm9pZCBoYW5kbGVyOjpoYV9zdGFydF9idWxrX2luc2VydChoYV9yb3dzIHJvd3Mp Cit7CisgIERCVUdfRU5URVIoImhhbmRsZXI6OmhhX3N0YXJ0X2J1bGtfaW5zZXJ0Iik7CisgIERC VUdfQVNTRVJUKHRhYmxlX3NoYXJlLT50bXBfdGFibGUgIT0gTk9fVE1QX1RBQkxFIHx8CisgICAg ICAgICAgICAgIG1fbG9ja190eXBlID09IEZfV1JMQ0spOworICBlc3RpbWF0aW9uX3Jvd3NfdG9f aW5zZXJ0PSByb3dzOworICBzdGFydF9idWxrX2luc2VydChyb3dzKTsKKyAgREJVR19WT0lEX1JF VFVSTjsKK30KKworCisvKioKKyAgRW5kIGJ1bGsgaW5zZXJ0LgorCisgIEByZXR1cm4gT3BlcmF0 aW9uIHN0YXR1cworICAgIEByZXR2YWwgMCAgICAgU3VjY2VzcworICAgIEByZXR2YWwgIT0gMCAg RmFpbHVyZSAoZXJyb3IgY29kZSByZXR1cm5lZCkKKyovCisKK2ludCBoYW5kbGVyOjpoYV9lbmRf YnVsa19pbnNlcnQoKQoreworICBEQlVHX0VOVEVSKCJoYW5kbGVyOjpoYV9lbmRfYnVsa19pbnNl cnQiKTsKKyAgREJVR19BU1NFUlQodGFibGVfc2hhcmUtPnRtcF90YWJsZSAhPSBOT19UTVBfVEFC TEUgfHwKKyAgICAgICAgICAgICAgbV9sb2NrX3R5cGUgPT0gRl9XUkxDSyk7CisgIGVzdGltYXRp b25fcm93c190b19pbnNlcnQ9IDA7CisgIERCVUdfUkVUVVJOKGVuZF9idWxrX2luc2VydCgpKTsK K30KKworCisvKioKICAgQnVsayB1cGRhdGUgcm93OiBwdWJsaWMgaW50ZXJmYWNlLgogCiAgIEBz YSBoYW5kbGVyOjpidWxrX3VwZGF0ZV9yb3coKQpAQCAtNjQyMyw3ICs2NzUzLDIxIEBAIGludCBo YW5kbGVyOjpoYV9leHRlcm5hbF9sb2NrKFRIRCAqdGhkLCAKICAgREJVR19BU1NFUlQodGFibGVf c2hhcmUtPnRtcF90YWJsZSAhPSBOT19UTVBfVEFCTEUgfHwKICAgICAgICAgICAgICAgKChsb2Nr X3R5cGUgIT0gRl9VTkxDSyAmJiBtX2xvY2tfdHlwZSA9PSBGX1VOTENLKSB8fAogICAgICAgICAg ICAgICAgbG9ja190eXBlID09IEZfVU5MQ0spKTsKLSAgICAgICAgICAgICAgCisgIC8qIFNRTCBI QU5ETEVSIGNhbGwgbG9ja3MvdW5sb2NrIHdoaWxlIHNjYW5uaW5nIChSTkQvSU5ERVgpLiAqLwor ICBEQlVHX0FTU0VSVChpbml0ZWQgPT0gTk9ORSB8fCB0YWJsZS0+b3Blbl9ieV9oYW5kbGVyKTsK KyNpZm5kZWYgREJVR19PRkYKKyAgLyoKKyAgICBJZiB0aGlzIGhhbmRsZXIgaXMgY2xvbmVkLCB0 aGVuIHRhYmxlLT5maWxlIGlzIG5vdCB0aGlzIGhhbmRsZXIhCisgICAgVE9ETzogaGF2ZSBhbiBp bmRpY2F0b3IgaW4gdGhlIGhhbmRsZXIgdG8gc2hvdyB0aGF0IGl0IGlzIGNsb25lLAorICAgIHNp bmNlIHRhYmxlLT5maWxlIG1heSBwb2ludCB0byBoYV9wYXJ0aXRpb24gdG9vLi4uCisgICovCisg IGlmICh0YWJsZS0+a2V5X3JlYWQgIT0gMCAmJiB0YWJsZS0+ZmlsZSA9PSB0aGlzKQorICB7Cisg ICAgREJVR19QUklOVCgiZXJyb3IiLCAoImtleV9yZWFkICE9IDAgKCVkKSIsIHRhYmxlLT5rZXlf cmVhZCkpOworICAgIHRhYmxlLT5rZXlfcmVhZD0gMDsKKyAgICBEQlVHX0FTU0VSVCgwKTsKKyAg fQorI2VuZGlmCiAKICAgaWYgKE1ZU1FMX0hBTkRMRVJfUkRMT0NLX1NUQVJUX0VOQUJMRUQoKSB8 fAogICAgICAgTVlTUUxfSEFORExFUl9XUkxPQ0tfU1RBUlRfRU5BQkxFRCgpIHx8Cgo9PT0gbW9k aWZpZWQgZmlsZSAnc3FsL2hhbmRsZXIuaCcKLS0tIGEvc3FsL2hhbmRsZXIuaAlyZXZpZDp5YXN1 ZnVtaS5raW5vc2hpdGFAb3JhY2xlLmNvbS0yMDEyMDQyNzEwNDIzOC0zeGJyNnYweTRzenI3Ymtx CisrKyBiL3NxbC9oYW5kbGVyLmgJcmV2aWQ6bWF0dGlhcy5qb25zc29uQG9yYWNsZS5jb20tMjAx MjA0MjcwOTM4MjctMDE1NnRkamNwdHM4aDQwcwpAQCAtOTYsNyArOTYsNyBAQCBlbnVtIGVudW1f YWx0ZXJfaW5wbGFjZV9yZXN1bHQgewogKi8KICNkZWZpbmUgSEFfUkVRVUlSRVNfS0VZX0NPTFVN TlNfRk9SX0RFTEVURSAoMSA8PCA2KQogI2RlZmluZSBIQV9OVUxMX0lOX0tFWSAgICAgICAgICgx IDw8IDcpIC8qIE9uZSBjYW4gaGF2ZSBrZXlzIHdpdGggTlVMTCAqLwotI2RlZmluZSBIQV9EVVBM SUNBVEVfUE9TICAgICAgICgxIDw8IDgpICAgIC8qIGhhX3Bvc2l0aW9uKCkgZ2l2ZXMgZHVwIHJv dyAqLworI2RlZmluZSBIQV9EVVBMSUNBVEVfUE9TICAgICAgICgxIDw8IDgpICAgIC8qIHBvc2l0 aW9uKCkgZ2l2ZXMgZHVwIHJvdyAqLwogI2RlZmluZSBIQV9OT19CTE9CUyAgICAgICAgICAgICgx IDw8IDkpIC8qIERvZXNuJ3Qgc3VwcG9ydCBibG9icyAqLwogI2RlZmluZSBIQV9DQU5fSU5ERVhf QkxPQlMgICAgICgxIDw8IDEwKQogI2RlZmluZSBIQV9BVVRPX1BBUlRfS0VZICAgICAgICgxIDw8 IDExKSAvKiBhdXRvLWluY3JlbWVudCBpbiBtdWx0aS1wYXJ0IGtleSAqLwpAQCAtMTc3Miw0MSAr MTc3MiwxMCBAQCBwdWJsaWM6CiAKICAgaW50IGhhX29wZW4oVEFCTEUgKnRhYmxlLCBjb25zdCBj aGFyICpuYW1lLCBpbnQgbW9kZSwgaW50IHRlc3RfaWZfbG9ja2VkKTsKICAgaW50IGhhX2Nsb3Nl KHZvaWQpOwotICBpbnQgaGFfaW5kZXhfaW5pdCh1aW50IGlkeCwgYm9vbCBzb3J0ZWQpCi0gIHsK LSAgICBpbnQgcmVzdWx0OwotICAgIERCVUdfRU5URVIoImhhX2luZGV4X2luaXQiKTsKLSAgICBE QlVHX0FTU0VSVChpbml0ZWQ9PU5PTkUpOwotICAgIGlmICghKHJlc3VsdD0gaW5kZXhfaW5pdChp ZHgsIHNvcnRlZCkpKQotICAgICAgaW5pdGVkPUlOREVYOwotICAgIGVuZF9yYW5nZT0gTlVMTDsK LSAgICBEQlVHX1JFVFVSTihyZXN1bHQpOwotICB9Ci0gIGludCBoYV9pbmRleF9lbmQoKQotICB7 Ci0gICAgREJVR19FTlRFUigiaGFfaW5kZXhfZW5kIik7Ci0gICAgREJVR19BU1NFUlQoaW5pdGVk PT1JTkRFWCk7Ci0gICAgaW5pdGVkPU5PTkU7Ci0gICAgZW5kX3JhbmdlPSBOVUxMOwotICAgIERC VUdfUkVUVVJOKGluZGV4X2VuZCgpKTsKLSAgfQotICBpbnQgaGFfcm5kX2luaXQoYm9vbCBzY2Fu KQotICB7Ci0gICAgaW50IHJlc3VsdDsKLSAgICBEQlVHX0VOVEVSKCJoYV9ybmRfaW5pdCIpOwot ICAgIERCVUdfQVNTRVJUKGluaXRlZD09Tk9ORSB8fCAoaW5pdGVkPT1STkQgJiYgc2NhbikpOwot ICAgIGluaXRlZD0gKHJlc3VsdD0gcm5kX2luaXQoc2NhbikpID8gTk9ORTogUk5EOwotICAgIGVu ZF9yYW5nZT0gTlVMTDsKLSAgICBEQlVHX1JFVFVSTihyZXN1bHQpOwotICB9Ci0gIGludCBoYV9y bmRfZW5kKCkKLSAgewotICAgIERCVUdfRU5URVIoImhhX3JuZF9lbmQiKTsKLSAgICBEQlVHX0FT U0VSVChpbml0ZWQ9PVJORCk7Ci0gICAgaW5pdGVkPU5PTkU7Ci0gICAgZW5kX3JhbmdlPSBOVUxM OwotICAgIERCVUdfUkVUVVJOKHJuZF9lbmQoKSk7Ci0gIH0KKyAgaW50IGhhX2luZGV4X2luaXQo dWludCBpZHgsIGJvb2wgc29ydGVkKTsKKyAgaW50IGhhX2luZGV4X2VuZCgpOworICBpbnQgaGFf cm5kX2luaXQoYm9vbCBzY2FuKTsKKyAgaW50IGhhX3JuZF9lbmQoKTsKICAgaW50IGhhX3JuZF9u ZXh0KHVjaGFyICpidWYpOwogICBpbnQgaGFfcm5kX3Bvcyh1Y2hhciAqIGJ1ZiwgdWNoYXIgKnBv cyk7CiAgIGludCBoYV9pbmRleF9yZWFkX21hcCh1Y2hhciAqYnVmLCBjb25zdCB1Y2hhciAqa2V5 LApAQCAtMTg1MCwxNiArMTgxOSw4IEBAIHB1YmxpYzoKICAgLyoqIHRvIGJlIGFjdHVhbGx5IGNh bGxlZCB0byBnZXQgJ2NoZWNrKCknIGZ1bmN0aW9uYWxpdHkqLwogICBpbnQgaGFfY2hlY2soVEhE ICp0aGQsIEhBX0NIRUNLX09QVCAqY2hlY2tfb3B0KTsKICAgaW50IGhhX3JlcGFpcihUSEQqIHRo ZCwgSEFfQ0hFQ0tfT1BUKiBjaGVja19vcHQpOwotICB2b2lkIGhhX3N0YXJ0X2J1bGtfaW5zZXJ0 KGhhX3Jvd3Mgcm93cykKLSAgewotICAgIGVzdGltYXRpb25fcm93c190b19pbnNlcnQ9IHJvd3M7 Ci0gICAgc3RhcnRfYnVsa19pbnNlcnQocm93cyk7Ci0gIH0KLSAgaW50IGhhX2VuZF9idWxrX2lu c2VydCgpCi0gIHsKLSAgICBlc3RpbWF0aW9uX3Jvd3NfdG9faW5zZXJ0PSAwOwotICAgIHJldHVy biBlbmRfYnVsa19pbnNlcnQoKTsKLSAgfQorICB2b2lkIGhhX3N0YXJ0X2J1bGtfaW5zZXJ0KGhh X3Jvd3Mgcm93cyk7CisgIGludCBoYV9lbmRfYnVsa19pbnNlcnQoKTsKICAgaW50IGhhX2J1bGtf dXBkYXRlX3Jvdyhjb25zdCB1Y2hhciAqb2xkX2RhdGEsIHVjaGFyICpuZXdfZGF0YSwKICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50ICpkdXBfa2V5X2ZvdW5kKTsKICAgaW50IGhhX2RlbGV0 ZV9hbGxfcm93cygpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NxbC9pdGVtX3N1YnNlbGVjdC5jYycK LS0tIGEvc3FsL2l0ZW1fc3Vic2VsZWN0LmNjCXJldmlkOnlhc3VmdW1pLmtpbm9zaGl0YUBvcmFj bGUuY29tLTIwMTIwNDI3MTA0MjM4LTN4YnI2djB5NHN6cjdia3EKKysrIGIvc3FsL2l0ZW1fc3Vi c2VsZWN0LmNjCXJldmlkOm1hdHRpYXMuam9uc3NvbkBvcmFjbGUuY29tLTIwMTIwNDI3MDkzODI3 LTAxNTZ0ZGpjcHRzOGg0MHMKQEAgLTI1OTcsMTAgKzI1OTcsMTggQEAgYm9vbCBzdWJzZWxlY3Rf aW5kZXhzdWJxdWVyeV9lbmdpbmU6OnNjYQogICAvLyBXZSBuZXZlciBuZWVkIHRvIGRvIGEgdGFi bGUgc2NhbiBvZiB0aGUgbWF0ZXJpYWxpemVkIHRhYmxlLgogICBEQlVHX0FTU0VSVChlbmdpbmVf dHlwZSgpICE9IEhBU0hfU0pfRU5HSU5FKTsKIAotICBpZiAodGFibGUtPmZpbGUtPmluaXRlZCkK LSAgICB0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfZW5kKCk7CisgIGlmICh0YWJsZS0+ZmlsZS0+aW5p dGVkICYmCisgICAgICAoZXJyb3I9IHRhYmxlLT5maWxlLT5oYV9pbmRleF9lbmQoKSkpCisgIHsK KyAgICAodm9pZCkgcmVwb3J0X2Vycm9yKHRhYmxlLCBlcnJvcik7CisgICAgREJVR19SRVRVUk4o dHJ1ZSk7CisgIH0KICAKLSAgdGFibGUtPmZpbGUtPmhhX3JuZF9pbml0KDEpOworICBpZiAoKGVy cm9yPSB0YWJsZS0+ZmlsZS0+aGFfcm5kX2luaXQoMSkpKQorICB7CisgICAgKHZvaWQpIHJlcG9y dF9lcnJvcih0YWJsZSwgZXJyb3IpOworICAgIERCVUdfUkVUVVJOKHRydWUpOworICB9CiAgIHRh YmxlLT5maWxlLT5leHRyYV9vcHQoSEFfRVhUUkFfQ0FDSEUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgY3VycmVudF90aGQtPnZhcmlhYmxlcy5yZWFkX2J1ZmZfc2l6ZSk7CiAgIHRhYmxlLT5u dWxsX3Jvdz0gMDsKQEAgLTI4NDEsOCArMjg0OSwxMiBAQCBib29sIHN1YnNlbGVjdF9pbmRleHN1 YnF1ZXJ5X2VuZ2luZTo6ZXhlCiAgICAgREJVR19SRVRVUk4oc2Nhbl9yZXN1bHQpOwogICB9CiAK LSAgaWYgKCF0YWJsZS0+ZmlsZS0+aW5pdGVkKQotICAgIHRhYmxlLT5maWxlLT5oYV9pbmRleF9p bml0KHRhYi0+cmVmLmtleSwgIXVuaXF1ZSAvKiBzb3J0ZWQgKi8pOworICBpZiAoIXRhYmxlLT5m aWxlLT5pbml0ZWQgJiYKKyAgICAgIChlcnJvcj0gdGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQo dGFiLT5yZWYua2V5LCAhdW5pcXVlIC8qIHNvcnRlZCAqLykpKQorICB7CisgICAgKHZvaWQpIHJl cG9ydF9lcnJvcih0YWJsZSwgZXJyb3IpOworICAgIERCVUdfUkVUVVJOKHRydWUpOworICB9CiAg IGVycm9yPSB0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfcmVhZF9tYXAodGFibGUtPnJlY29yZFswXSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWItPnJlZi5rZXlfYnVm ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3ByZXZfa2V5 cGFydF9tYXAodGFiLT5yZWYua2V5X3BhcnRzKSwKCj09PSBtb2RpZmllZCBmaWxlICdzcWwvbG9n X2V2ZW50LmNjJwotLS0gYS9zcWwvbG9nX2V2ZW50LmNjCXJldmlkOnlhc3VmdW1pLmtpbm9zaGl0 YUBvcmFjbGUuY29tLTIwMTIwNDI3MTA0MjM4LTN4YnI2djB5NHN6cjdia3EKKysrIGIvc3FsL2xv Z19ldmVudC5jYwlyZXZpZDptYXR0aWFzLmpvbnNzb25Ab3JhY2xlLmNvbS0yMDEyMDQyNzA5Mzgy Ny0wMTU2dGRqY3B0czhoNDBzCkBAIC0xMDQzMCw5ICsxMDQzMCwxNSBAQCBSb3dzX2xvZ19ldmVu dDo6d3JpdGVfcm93KGNvbnN0IFJlbGF5X2xvCiAgICAgICBEQlVHX1BSSU5UKCJpbmZvIiwoIkxv Y2F0aW5nIG9mZmVuZGluZyByZWNvcmQgdXNpbmcgaGFfcm5kX3BvcygpIikpOwogCiAgICAgICBp ZiAodGFibGUtPmZpbGUtPmluaXRlZCAmJiAoZXJyb3I9IHRhYmxlLT5maWxlLT5oYV9pbmRleF9l bmQoKSkpCi0gICAgICAgIERCVUdfUkVUVVJOKGVycm9yKTsKKyAgICAgIHsKKyAgICAgICAgdGFi bGUtPmZpbGUtPnByaW50X2Vycm9yKGVycm9yLCBNWUYoMCkpOworICAgICAgICBnb3RvIGVycm9y OworICAgICAgfQogICAgICAgaWYgKChlcnJvcj0gdGFibGUtPmZpbGUtPmhhX3JuZF9pbml0KEZB TFNFKSkpCi0gICAgICAgIERCVUdfUkVUVVJOKGVycm9yKTsKKyAgICAgIHsKKyAgICAgICAgdGFi bGUtPmZpbGUtPnByaW50X2Vycm9yKGVycm9yLCBNWUYoMCkpOworICAgICAgICBnb3RvIGVycm9y OworICAgICAgfQogCiAgICAgICBlcnJvcj0gdGFibGUtPmZpbGUtPmhhX3JuZF9wb3ModGFibGUt PnJlY29yZFsxXSwgdGFibGUtPmZpbGUtPmR1cF9yZWYpOwogCkBAIC0xMTI4NywxNCArMTEyOTMs MjAgQEAgVEFCTEVfU0NBTjoKIAogICAgICAgY2FzZSBIQV9FUlJfRU5EX09GX0ZJTEU6CiAgICAg ICAgIGlmICgrK3Jlc3RhcnRfY291bnQgPCAyKQotICAgICAgICAgIHRhYmxlLT5maWxlLT5oYV9y bmRfaW5pdCgxKTsKKyAgICAgICAgeworICAgICAgICAgIGlmICgoZXJyb3I9IHRhYmxlLT5maWxl LT5oYV9ybmRfaW5pdCgxKSkpCisgICAgICAgICAgeworICAgICAgICAgICAgdGFibGUtPmZpbGUt PnByaW50X2Vycm9yKGVycm9yLCBNWUYoMCkpOworICAgICAgICAgICAgZ290byBlcnI7CisgICAg ICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBkZWZhdWx0OgogICAg ICAgICBEQlVHX1BSSU5UKCJpbmZvIiwgKCJGYWlsZWQgdG8gZ2V0IG5leHQgcmVjb3JkIgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIgKGhhX3JuZF9uZXh0IHJldHVybnMgJWQpIixlcnJv cikpOwogICAgICAgICB0YWJsZS0+ZmlsZS0+cHJpbnRfZXJyb3IoZXJyb3IsIE1ZRigwKSk7Ci0g ICAgICAgIHRhYmxlLT5maWxlLT5oYV9ybmRfZW5kKCk7CisgICAgICAgICh2b2lkKSB0YWJsZS0+ ZmlsZS0+aGFfcm5kX2VuZCgpOwogICAgICAgICBnb3RvIGVycjsKICAgICAgIH0KICAgICB9Cgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3FsL2xvZ19ldmVudF9vbGQuY2MnCi0tLSBhL3NxbC9sb2dfZXZl bnRfb2xkLmNjCXJldmlkOnlhc3VmdW1pLmtpbm9zaGl0YUBvcmFjbGUuY29tLTIwMTIwNDI3MTA0 MjM4LTN4YnI2djB5NHN6cjdia3EKKysrIGIvc3FsL2xvZ19ldmVudF9vbGQuY2MJcmV2aWQ6bWF0 dGlhcy5qb25zc29uQG9yYWNsZS5jb20tMjAxMjA0MjcwOTM4MjctMDE1NnRkamNwdHM4aDQwcwpA QCAtNzI5LDcgKzcyOSwxMCBAQCBzdGF0aWMgaW50IGZpbmRfYW5kX2ZldGNoX3JvdyhUQUJMRSAq dGFiCiAgICAgaW50IGVycm9yOwogICAgIC8qIFdlIGhhdmUgYSBrZXk6IHNlYXJjaCB0aGUgdGFi bGUgdXNpbmcgdGhlIGluZGV4ICovCiAgICAgaWYgKCF0YWJsZS0+ZmlsZS0+aW5pdGVkICYmIChl cnJvcj0gdGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQoMCwgRkFMU0UpKSkKKyAgICB7CisgICAg ICB0YWJsZS0+ZmlsZS0+cHJpbnRfZXJyb3IoZXJyb3IsIE1ZRigwKSk7CiAgICAgICBEQlVHX1JF VFVSTihlcnJvcik7CisgICAgfQogCiAgIC8qCiAgICAgRG9uJ3QgcHJpbnQgZGVidWcgbWVzc2Fn ZXMgd2hlbiBydW5uaW5nIHZhbGdyaW5kIHNpbmNlIHRoZXkgY2FuCkBAIC04MjcsNyArODMwLDEw IEBAIHN0YXRpYyBpbnQgZmluZF9hbmRfZmV0Y2hfcm93KFRBQkxFICp0YWIKIAogICAgIC8qIFdl IGRvbid0IGhhdmUgYSBrZXk6IHNlYXJjaCB0aGUgdGFibGUgdXNpbmcgaGFfcm5kX25leHQoKSAq LwogICAgIGlmICgoZXJyb3I9IHRhYmxlLT5maWxlLT5oYV9ybmRfaW5pdCgxKSkpCisgICAgewor ICAgICAgdGFibGUtPmZpbGUtPnByaW50X2Vycm9yKGVycm9yLCBNWUYoMCkpOwogICAgICAgcmV0 dXJuIGVycm9yOworICAgIH0KIAogICAgIC8qIENvbnRpbnVlIHVudGlsIHdlIGZpbmQgdGhlIHJp Z2h0IHJlY29yZCBvciBoYXZlIG1hZGUgYSBmdWxsIGxvb3AgKi8KICAgICBkbwpAQCAtODUwLDE0 ICs4NTYsMjAgQEAgc3RhdGljIGludCBmaW5kX2FuZF9mZXRjaF9yb3coVEFCTEUgKnRhYgogICAg ICAgICBnb3RvIHJlc3RhcnRfaGFfcm5kX25leHQ7CiAKICAgICAgIGNhc2UgSEFfRVJSX0VORF9P Rl9GSUxFOgotICBpZiAoKytyZXN0YXJ0X2NvdW50IDwgMikKLSAgICB0YWJsZS0+ZmlsZS0+aGFf cm5kX2luaXQoMSk7Ci0gIGJyZWFrOworICAgICAgICBpZiAoKytyZXN0YXJ0X2NvdW50IDwgMikK KyAgICAgICAgeworICAgICAgICAgIGlmICgoZXJyb3I9IHRhYmxlLT5maWxlLT5oYV9ybmRfaW5p dCgxKSkpCisgICAgICAgICAgeworICAgICAgICAgICAgdGFibGUtPmZpbGUtPnByaW50X2Vycm9y KGVycm9yLCBNWUYoMCkpOworICAgICAgICAgICAgREJVR19SRVRVUk4oZXJyb3IpOworICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgIGJyZWFrOwogCiAgICAgICBkZWZhdWx0OgogICB0YWJs ZS0+ZmlsZS0+cHJpbnRfZXJyb3IoZXJyb3IsIE1ZRigwKSk7CiAgICAgICAgIERCVUdfUFJJTlQo ImluZm8iLCAoIlJlY29yZCBub3QgZm91bmQiKSk7Ci0gICAgICAgIHRhYmxlLT5maWxlLT5oYV9y bmRfZW5kKCk7CisgICAgICAgICh2b2lkKSB0YWJsZS0+ZmlsZS0+aGFfcm5kX2VuZCgpOwogICBE QlVHX1JFVFVSTihlcnJvcik7CiAgICAgICB9CiAgICAgfQpAQCAtMjQwMCw3ICsyNDEyLDcgQEAg aW50IE9sZF9yb3dzX2xvZ19ldmVudDo6ZmluZF9yb3coY29uc3QgUgogICAgICAgICAgIGNvbnRp bnVlOwogICAgICAgICBEQlVHX1BSSU5UKCJpbmZvIiwoIm5vIHJlY29yZCBtYXRjaGluZyB0aGUg Z2l2ZW4gcm93IGZvdW5kIikpOwogICAgICAgICB0YWJsZS0+ZmlsZS0+cHJpbnRfZXJyb3IoZXJy b3IsIE1ZRigwKSk7Ci0gICAgICAgIHRhYmxlLT5maWxlLT5oYV9pbmRleF9lbmQoKTsKKyAgICAg ICAgKHZvaWQpIHRhYmxlLT5maWxlLT5oYV9pbmRleF9lbmQoKTsKICAgICAgICAgREJVR19SRVRV Uk4oZXJyb3IpOwogICAgICAgfQogICAgIH0KQEAgLTI0NDEsNyArMjQ1MywxMyBAQCBpbnQgT2xk X3Jvd3NfbG9nX2V2ZW50OjpmaW5kX3Jvdyhjb25zdCBSCiAKICAgICAgIGNhc2UgSEFfRVJSX0VO RF9PRl9GSUxFOgogICAgICAgICBpZiAoKytyZXN0YXJ0X2NvdW50IDwgMikKLSAgICAgICAgICB0 YWJsZS0+ZmlsZS0+aGFfcm5kX2luaXQoMSk7CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKGVy cm9yPSB0YWJsZS0+ZmlsZS0+aGFfcm5kX2luaXQoMSkpKQorICAgICAgICAgIHsKKyAgICAgICAg ICAgIHRhYmxlLT5maWxlLT5wcmludF9lcnJvcihlcnJvciwgTVlGKDApKTsKKyAgICAgICAgICAg IERCVUdfUkVUVVJOKGVycm9yKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgYnJl YWs7CiAKICAgICAgIGRlZmF1bHQ6Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3FsL29wdF9yYW5nZS5j YycKLS0tIGEvc3FsL29wdF9yYW5nZS5jYwlyZXZpZDp5YXN1ZnVtaS5raW5vc2hpdGFAb3JhY2xl LmNvbS0yMDEyMDQyNzEwNDIzOC0zeGJyNnYweTRzenI3YmtxCisrKyBiL3NxbC9vcHRfcmFuZ2Uu Y2MJcmV2aWQ6bWF0dGlhcy5qb25zc29uQG9yYWNsZS5jb20tMjAxMjA0MjcwOTM4MjctMDE1NnRk amNwdHM4aDQwcwpAQCAtMTMyNiw3ICsxMzI2LDcgQEAgaW50IFFVSUNLX1JBTkdFX1NFTEVDVDo6 aW5pdCgpCiB7CiAgIERCVUdfRU5URVIoIlFVSUNLX1JBTkdFX1NFTEVDVDo6aW5pdCIpOwogCi0g IGlmIChmaWxlLT5pbml0ZWQgIT0gaGFuZGxlcjo6Tk9ORSkKKyAgaWYgKGZpbGUtPmluaXRlZCkK ICAgICBmaWxlLT5oYV9pbmRleF9vcl9ybmRfZW5kKCk7CiAgIERCVUdfUkVUVVJOKEZBTFNFKTsK IH0KQEAgLTEzMzQsNyArMTMzNCw3IEBAIGludCBRVUlDS19SQU5HRV9TRUxFQ1Q6OmluaXQoKQog CiB2b2lkIFFVSUNLX1JBTkdFX1NFTEVDVDo6cmFuZ2VfZW5kKCkKIHsKLSAgaWYgKGZpbGUtPmlu aXRlZCAhPSBoYW5kbGVyOjpOT05FKQorICBpZiAoZmlsZS0+aW5pdGVkKQogICAgIGZpbGUtPmhh X2luZGV4X29yX3JuZF9lbmQoKTsKIH0KIApAQCAtMTU4NSw2ICsxNTg1LDcgQEAgZmFpbHVyZToK ICovCiBpbnQgUVVJQ0tfUk9SX0lOVEVSU0VDVF9TRUxFQ1Q6OmluaXRfcm9yX21lcmdlZF9zY2Fu KGJvb2wgcmV1c2VfaGFuZGxlcikKIHsKKyAgaW50IGVycm9yOwogICBMaXN0X2l0ZXJhdG9yX2Zh c3Q8UVVJQ0tfUkFOR0VfU0VMRUNUPiBxdWlja19pdChxdWlja19zZWxlY3RzKTsKICAgUVVJQ0tf UkFOR0VfU0VMRUNUKiBxdWljazsKICAgREJVR19FTlRFUigiUVVJQ0tfUk9SX0lOVEVSU0VDVF9T RUxFQ1Q6OmluaXRfcm9yX21lcmdlZF9zY2FuIik7CkBAIC0xNTk4LDggKzE1OTksOCBAQCBpbnQg UVVJQ0tfUk9SX0lOVEVSU0VDVF9TRUxFQ1Q6OmluaXRfcm9yCiAgICAgICBUaGVyZSBpcyBubyB1 c2Ugb2YgdGhpcy0+ZmlsZS4gVXNlIGl0IGZvciB0aGUgZmlyc3Qgb2YgbWVyZ2VkIHJhbmdlCiAg ICAgICBzZWxlY3RzLgogICAgICovCi0gICAgaWYgKHF1aWNrLT5pbml0X3Jvcl9tZXJnZWRfc2Nh bihUUlVFKSkKLSAgICAgIERCVUdfUkVUVVJOKDEpOworICAgIGlmICgoZXJyb3I9IHF1aWNrLT5p bml0X3Jvcl9tZXJnZWRfc2NhbihUUlVFKSkpCisgICAgICBEQlVHX1JFVFVSTihlcnJvcik7CiAg ICAgcXVpY2stPmZpbGUtPmV4dHJhKEhBX0VYVFJBX0tFWVJFQURfUFJFU0VSVkVfRklFTERTKTsK ICAgfQogICB3aGlsZSAoKHF1aWNrPSBxdWlja19pdCsrKSkKQEAgLTE2MDgsOCArMTYwOSw4IEBA IGludCBRVUlDS19ST1JfSU5URVJTRUNUX1NFTEVDVDo6aW5pdF9yb3IKICAgICBjb25zdCBNWV9C SVRNQVAgKiBjb25zdCBzYXZlX3JlYWRfc2V0PSBxdWljay0+aGVhZC0+cmVhZF9zZXQ7CiAgICAg Y29uc3QgTVlfQklUTUFQICogY29uc3Qgc2F2ZV93cml0ZV9zZXQ9IHF1aWNrLT5oZWFkLT53cml0 ZV9zZXQ7CiAjZW5kaWYKLSAgICBpZiAocXVpY2stPmluaXRfcm9yX21lcmdlZF9zY2FuKEZBTFNF KSkKLSAgICAgIERCVUdfUkVUVVJOKDEpOworICAgIGlmICgoZXJyb3I9IHF1aWNrLT5pbml0X3Jv cl9tZXJnZWRfc2NhbihGQUxTRSkpKQorICAgICAgREJVR19SRVRVUk4oZXJyb3IpOwogICAgIHF1 aWNrLT5maWxlLT5leHRyYShIQV9FWFRSQV9LRVlSRUFEX1BSRVNFUlZFX0ZJRUxEUyk7CiAgICAg Ly8gU2V0cyBhcmUgc2hhcmVkIGJ5IGFsbCBtZW1iZXJzIG9mICJxdWlja19zZWxlY3RzIiBzbyBt dXN0IG5vdCBjaGFuZ2UKICAgICBEQlVHX0FTU0VSVChxdWljay0+aGVhZC0+cmVhZF9zZXQgPT0g c2F2ZV9yZWFkX3NldCk7CkBAIC0xNjE4LDEwICsxNjE5LDEwIEBAIGludCBRVUlDS19ST1JfSU5U RVJTRUNUX1NFTEVDVDo6aW5pdF9yb3IKICAgICBxdWljay0+cmVjb3JkPSBoZWFkLT5yZWNvcmRb MF07CiAgIH0KIAotICBpZiAobmVlZF90b19mZXRjaF9yb3cgJiYgaGVhZC0+ZmlsZS0+aGFfcm5k X2luaXQoMSkpCisgIGlmIChuZWVkX3RvX2ZldGNoX3JvdyAmJiAoZXJyb3I9IGhlYWQtPmZpbGUt PmhhX3JuZF9pbml0KDEpKSkKICAgewogICAgIERCVUdfUFJJTlQoImVycm9yIiwgKCJST1IgaW5k ZXhfbWVyZ2Ugcm5kX2luaXQgY2FsbCBmYWlsZWQiKSk7Ci0gICAgREJVR19SRVRVUk4oMSk7Cisg ICAgREJVR19SRVRVUk4oZXJyb3IpOwogICB9CiAgIERCVUdfUkVUVVJOKDApOwogfQpAQCAtMTY3 Nyw3ICsxNjc4LDcgQEAgUVVJQ0tfUk9SX0lOVEVSU0VDVF9TRUxFQ1Q6On5RVUlDS19ST1JfSQog ICBxdWlja19zZWxlY3RzLmRlbGV0ZV9lbGVtZW50cygpOwogICBkZWxldGUgY3BrX3F1aWNrOwog ICBmcmVlX3Jvb3QoJmFsbG9jLE1ZRigwKSk7Ci0gIGlmIChuZWVkX3RvX2ZldGNoX3JvdyAmJiBo ZWFkLT5maWxlLT5pbml0ZWQgIT0gaGFuZGxlcjo6Tk9ORSkKKyAgaWYgKG5lZWRfdG9fZmV0Y2hf cm93ICYmIGhlYWQtPmZpbGUtPmluaXRlZCkKICAgICBoZWFkLT5maWxlLT5oYV9ybmRfZW5kKCk7 CiAgIERCVUdfVk9JRF9SRVRVUk47CiB9CkBAIC0xNzgxLDggKzE3ODIsOCBAQCBpbnQgUVVJQ0tf Uk9SX1VOSU9OX1NFTEVDVDo6cmVzZXQoKQogICBMaXN0X2l0ZXJhdG9yX2Zhc3Q8UVVJQ0tfU0VM RUNUX0k+IGl0KHF1aWNrX3NlbGVjdHMpOwogICB3aGlsZSAoKHF1aWNrPSBpdCsrKSkKICAgewot ICAgIGlmIChxdWljay0+cmVzZXQoKSkKLSAgICAgIERCVUdfUkVUVVJOKDEpOworICAgIGlmICgo ZXJyb3I9IHF1aWNrLT5yZXNldCgpKSkKKyAgICAgIERCVUdfUkVUVVJOKGVycm9yKTsKICAgICBp ZiAoKGVycm9yPSBxdWljay0+Z2V0X25leHQoKSkpCiAgICAgewogICAgICAgaWYgKGVycm9yID09 IEhBX0VSUl9FTkRfT0ZfRklMRSkKQEAgLTE3OTMsMTAgKzE3OTQsMTAgQEAgaW50IFFVSUNLX1JP Ul9VTklPTl9TRUxFQ1Q6OnJlc2V0KCkKICAgICBxdWV1ZV9pbnNlcnQoJnF1ZXVlLCAodWNoYXIq KXF1aWNrKTsKICAgfQogCi0gIGlmIChoZWFkLT5maWxlLT5oYV9ybmRfaW5pdCgxKSkKKyAgaWYg KChlcnJvcj0gaGVhZC0+ZmlsZS0+aGFfcm5kX2luaXQoMSkpKQogICB7CiAgICAgREJVR19QUklO VCgiZXJyb3IiLCAoIlJPUiBpbmRleF9tZXJnZSBybmRfaW5pdCBjYWxsIGZhaWxlZCIpKTsKLSAg ICBEQlVHX1JFVFVSTigxKTsKKyAgICBEQlVHX1JFVFVSTihlcnJvcik7CiAgIH0KIAogICBEQlVH X1JFVFVSTigwKTsKQEAgLTE4MTQsNyArMTgxNSw3IEBAIFFVSUNLX1JPUl9VTklPTl9TRUxFQ1Q6 On5RVUlDS19ST1JfVU5JT04KICAgREJVR19FTlRFUigiUVVJQ0tfUk9SX1VOSU9OX1NFTEVDVDo6 flFVSUNLX1JPUl9VTklPTl9TRUxFQ1QiKTsKICAgZGVsZXRlX3F1ZXVlKCZxdWV1ZSk7CiAgIHF1 aWNrX3NlbGVjdHMuZGVsZXRlX2VsZW1lbnRzKCk7Ci0gIGlmIChoZWFkLT5maWxlLT5pbml0ZWQg IT0gaGFuZGxlcjo6Tk9ORSkKKyAgaWYgKGhlYWQtPmZpbGUtPmluaXRlZCkKICAgICBoZWFkLT5m aWxlLT5oYV9ybmRfZW5kKCk7CiAgIGZyZWVfcm9vdCgmYWxsb2MsTVlGKDApKTsKICAgREJVR19W T0lEX1JFVFVSTjsKQEAgLTk2MDMsNyArOTYwNCw3IEBAIGludCBRVUlDS19JTkRFWF9NRVJHRV9T RUxFQ1Q6OnJlYWRfa2V5c18KICAgICAgIGlmICghY3VyX3F1aWNrKQogICAgICAgICBicmVhazsK IAotICAgICAgaWYgKGN1cl9xdWljay0+ZmlsZS0+aW5pdGVkICE9IGhhbmRsZXI6Ok5PTkUpIAor ICAgICAgaWYgKGN1cl9xdWljay0+ZmlsZS0+aW5pdGVkKSAKICAgICAgICAgY3VyX3F1aWNrLT5m aWxlLT5oYV9pbmRleF9lbmQoKTsKICAgICAgIGlmIChjdXJfcXVpY2stPmluaXQoKSB8fCBjdXJf cXVpY2stPnJlc2V0KCkpCiAgICAgICAgIERCVUdfUkVUVVJOKDEpOwpAQCAtOTg1Miw3ICs5ODUz LDcgQEAgaW50IFFVSUNLX1JBTkdFX1NFTEVDVDo6cmVzZXQoKQogICBsYXN0X3JhbmdlPSBOVUxM OwogICBjdXJfcmFuZ2U9IChRVUlDS19SQU5HRSoqKSByYW5nZXMuYnVmZmVyOwogCi0gIGlmIChm aWxlLT5pbml0ZWQgPT0gaGFuZGxlcjo6Tk9ORSkKKyAgaWYgKCFmaWxlLT5pbml0ZWQpCiAgIHsK ICAgICBpZiAoaW5fcm9yX21lcmdlZF9zY2FuKQogICAgICAgaGVhZC0+Y29sdW1uX2JpdG1hcHNf c2V0X25vX3NpZ25hbCgmY29sdW1uX2JpdG1hcCwgJmNvbHVtbl9iaXRtYXApOwpAQCAtMTIwNTQs NyArMTIwNTUsNyBAQCBpbnQgUVVJQ0tfR1JPVVBfTUlOX01BWF9TRUxFQ1Q6OmluaXQoKQogUVVJ Q0tfR1JPVVBfTUlOX01BWF9TRUxFQ1Q6On5RVUlDS19HUk9VUF9NSU5fTUFYX1NFTEVDVCgpCiB7 CiAgIERCVUdfRU5URVIoIlFVSUNLX0dST1VQX01JTl9NQVhfU0VMRUNUOjp+UVVJQ0tfR1JPVVBf TUlOX01BWF9TRUxFQ1QiKTsKLSAgaWYgKGhlYWQtPmZpbGUtPmluaXRlZCAhPSBoYW5kbGVyOjpO T05FKSAKKyAgaWYgKGhlYWQtPmZpbGUtPmluaXRlZCkgCiAgICAgaGVhZC0+ZmlsZS0+aGFfaW5k ZXhfZW5kKCk7CiAgIGlmIChtaW5fbWF4X2FyZ19wYXJ0KQogICAgIGRlbGV0ZV9keW5hbWljKCZt aW5fbWF4X3Jhbmdlcyk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3FsL29wdF9zdW0uY2MnCi0tLSBh L3NxbC9vcHRfc3VtLmNjCXJldmlkOnlhc3VmdW1pLmtpbm9zaGl0YUBvcmFjbGUuY29tLTIwMTIw NDI3MTA0MjM4LTN4YnI2djB5NHN6cjdia3EKKysrIGIvc3FsL29wdF9zdW0uY2MJcmV2aWQ6bWF0 dGlhcy5qb25zc29uQG9yYWNsZS5jb20tMjAxMjA0MjcwOTM4MjctMDE1NnRkamNwdHM4aDQwcwpA QCAtNDE1LDcgKzQxNSwxMSBAQCBpbnQgb3B0X3N1bV9xdWVyeShUSEQgKnRoZCwKICAgICAgICAg ICAgIGNvbnN0X3Jlc3VsdD0gMDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KLSAg ICAgICAgICB0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfaW5pdCgodWludCkgcmVmLmtleSwgMSk7Cisg ICAgICAgICAgaWYgKChlcnJvcj0gdGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQoKHVpbnQpIHJl Zi5rZXksIDEpKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICB0YWJsZS0+ZmlsZS0+cHJpbnRf ZXJyb3IoZXJyb3IsIE1ZRigwKSk7CisgICAgICAgICAgICBEQlVHX1JFVFVSTihlcnJvcik7Cisg ICAgICAgICAgfQogCiAgICAgICAgICAgZXJyb3I9IGlzX21heCA/IAogICAgICAgICAgICAgICAg ICBnZXRfaW5kZXhfbWF4X3ZhbHVlKHRhYmxlLCAmcmVmLCByYW5nZV9mbCkgOgoKPT09IG1vZGlm aWVkIGZpbGUgJ3NxbC9zcC5jYycKLS0tIGEvc3FsL3NwLmNjCXJldmlkOnlhc3VmdW1pLmtpbm9z aGl0YUBvcmFjbGUuY29tLTIwMTIwNDI3MTA0MjM4LTN4YnI2djB5NHN6cjdia3EKKysrIGIvc3Fs L3NwLmNjCXJldmlkOm1hdHRpYXMuam9uc3NvbkBvcmFjbGUuY29tLTIwMTIwNDI3MDkzODI3LTAx NTZ0ZGpjcHRzOGg0MHMKQEAgLTE0NzAsNyArMTQ3MCwxMiBAQCBib29sIGxvY2tfZGJfcm91dGlu ZXMoVEhEICp0aGQsIGNoYXIgKmRiCiAKICAgdGFibGUtPmZpZWxkW01ZU1FMX1BST0NfRklFTERf REJdLT5zdG9yZShkYiwgc3RybGVuKGRiKSwgc3lzdGVtX2NoYXJzZXRfaW5mbyk7CiAgIGtleV9s ZW49IHRhYmxlLT5rZXlfaW5mby0+a2V5X3BhcnRbMF0uc3RvcmVfbGVuZ3RoOwotICB0YWJsZS0+ ZmlsZS0+aGFfaW5kZXhfaW5pdCgwLCAxKTsKKyAgaWYgKChueHRyZXM9IHRhYmxlLT5maWxlLT5o YV9pbmRleF9pbml0KDAsIDEpKSkKKyAgeworICAgIHRhYmxlLT5maWxlLT5wcmludF9lcnJvcihu eHRyZXMsIE1ZRigwKSk7CisgICAgY2xvc2Vfc3lzdGVtX3RhYmxlcyh0aGQsICZvcGVuX3RhYmxl c19zdGF0ZV9iYWNrdXApOworICAgIERCVUdfUkVUVVJOKHRydWUpOworICB9CiAKICAgaWYgKCEg dGFibGUtPmZpbGUtPmluZGV4X3JlYWRfbWFwKHRhYmxlLT5yZWNvcmRbMF0sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS0+ZmllbGRbTVlTUUxfUFJPQ19GSUVMRF9E Ql0tPnB0ciwKQEAgLTE1MzQsNyArMTUzOSwxMSBAQCBzcF9kcm9wX2RiX3JvdXRpbmVzKFRIRCAq dGhkLCBjaGFyICpkYikKICAga2V5X2xlbj0gdGFibGUtPmtleV9pbmZvLT5rZXlfcGFydFswXS5z dG9yZV9sZW5ndGg7CiAKICAgcmV0PSBTUF9PSzsKLSAgdGFibGUtPmZpbGUtPmhhX2luZGV4X2lu aXQoMCwgMSk7CisgIGlmICh0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfaW5pdCgwLCAxKSkKKyAgewor ICAgIHJldD0gU1BfS0VZX05PVF9GT1VORDsKKyAgICBnb3RvIGVycl9pZHhfaW5pdDsKKyAgfQog ICBpZiAoISB0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfcmVhZF9tYXAodGFibGUtPnJlY29yZFswXSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y2hhciAqKXRhYmxlLT5m aWVsZFtNWVNRTF9QUk9DX0ZJRUxEX0RCXS0+cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGtleV9wYXJ0X21hcCkxLCBIQV9SRUFEX0tFWV9FWEFDVCkpCkBAIC0x NTYyLDYgKzE1NzEsNyBAQCBzcF9kcm9wX2RiX3JvdXRpbmVzKFRIRCAqdGhkLCBjaGFyICpkYikK ICAgfQogICB0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfZW5kKCk7CiAKK2Vycl9pZHhfaW5pdDoKICAg Y2xvc2VfdGhyZWFkX3RhYmxlcyh0aGQpOwogICAvKgogICAgIE1ha2Ugc3VyZSB0byBvbmx5IHJl bGVhc2UgdGhlIE1ETCBsb2NrIG9uIG15c3FsLnByb2MsIG5vdCBvdGhlcgoKPT09IG1vZGlmaWVk IGZpbGUgJ3NxbC9zcWxfYWNsLmNjJwotLS0gYS9zcWwvc3FsX2FjbC5jYwlyZXZpZDp5YXN1ZnVt aS5raW5vc2hpdGFAb3JhY2xlLmNvbS0yMDEyMDQyNzEwNDIzOC0zeGJyNnYweTRzenI3YmtxCisr KyBiL3NxbC9zcWxfYWNsLmNjCXJldmlkOm1hdHRpYXMuam9uc3NvbkBvcmFjbGUuY29tLTIwMTIw NDI3MDkzODI3LTAxNTZ0ZGpjcHRzOGg0MHMKQEAgLTI2NzUsNyArMjY3NSwxMyBAQCByZXBsYWNl X3Byb3hpZXNfcHJpdl90YWJsZShUSEQgKnRoZCwgVEFCCiAKICAgZ2V0X2dyYW50b3IodGhkLCBn cmFudG9yKTsKIAotICB0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfaW5pdCgwLCAxKTsKKyAgaWYgKChl cnJvcj0gdGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQoMCwgMSkpKQorICB7CisgICAgdGFibGUt PmZpbGUtPnByaW50X2Vycm9yKGVycm9yLCBNWUYoMCkpOworICAgIERCVUdfUFJJTlQoImluZm8i LCAoImhhX2luZGV4X2luaXQgZXJyb3IiKSk7CisgICAgREJVR19SRVRVUk4oLTEpOworICB9CisK ICAgaWYgKHRhYmxlLT5maWxlLT5oYV9pbmRleF9yZWFkX21hcCh0YWJsZS0+cmVjb3JkWzBdLCB1 c2VyX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQV9XSE9MRV9L RVksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFfUkVBRF9LRVlfRVhB Q1QpKQpAQCAtMjkxNSw3ICsyOTIxLDEyIEBAIEdSQU5UX1RBQkxFOjpHUkFOVF9UQUJMRShUQUJM RSAqZm9ybSwgVEEKICAgICBrZXlfY29weShrZXksIGNvbF9wcml2cy0+cmVjb3JkWzBdLCBjb2xf cHJpdnMtPmtleV9pbmZvLCBrZXlfcHJlZml4X2xlbik7CiAgICAgY29sX3ByaXZzLT5maWVsZFs0 XS0+c3RvcmUoIiIsMCwgJm15X2NoYXJzZXRfbGF0aW4xKTsKIAotICAgIGNvbF9wcml2cy0+Zmls ZS0+aGFfaW5kZXhfaW5pdCgwLCAxKTsKKyAgICBpZiAoY29sX3ByaXZzLT5maWxlLT5oYV9pbmRl eF9pbml0KDAsIDEpKQorICAgIHsKKyAgICAgIGNvbHM9IDA7CisgICAgICByZXR1cm47CisgICAg fQorCiAgICAgaWYgKGNvbF9wcml2cy0+ZmlsZS0+aGFfaW5kZXhfcmVhZF9tYXAoY29sX3ByaXZz LT5yZWNvcmRbMF0sICh1Y2hhciopIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoa2V5X3BhcnRfbWFwKTE1LCBIQV9SRUFEX0tFWV9FWEFDVCkpCiAgICAg ewpAQCAtMzA3Myw3ICszMDg0LDExIEBAIHN0YXRpYyBpbnQgcmVwbGFjZV9jb2x1bW5fdGFibGUo R1JBTlRfVEEKIAogICBMaXN0X2l0ZXJhdG9yIDxMRVhfQ09MVU1OPiBpdGVyKGNvbHVtbnMpOwog ICBjbGFzcyBMRVhfQ09MVU1OICpjb2x1bW47Ci0gIHRhYmxlLT5maWxlLT5oYV9pbmRleF9pbml0 KDAsIDEpOworICBpZiAoKGVycm9yPSB0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfaW5pdCgwLCAxKSkp CisgIHsKKyAgICB0YWJsZS0+ZmlsZS0+cHJpbnRfZXJyb3IoZXJyb3IsIE1ZRigwKSk7CisgICAg REJVR19SRVRVUk4oLTEpOworICB9CiAgIHdoaWxlICgoY29sdW1uPSBpdGVyKyspKQogICB7CiAg ICAgdWxvbmcgcHJpdmlsZWdlcz0gY29sdW1uLT5yaWdodHM7CkBAIC00MjM4LDcgKzQyNTMsOCBA QCBzdGF0aWMgbXlfYm9vbCBncmFudF9sb2FkX3Byb2NzX3ByaXYoVEFCCiAgICh2b2lkKSBteV9o YXNoX2luaXQoJmZ1bmNfcHJpdl9oYXNoLCAmbXlfY2hhcnNldF91dGY4X2JpbiwKICAgICAgICAg ICAgICAgICAgICAgICAwLDAsMCwgKG15X2hhc2hfZ2V0X2tleSkgZ2V0X2dyYW50X3RhYmxlLAog ICAgICAgICAgICAgICAgICAgICAgIDAsMCk7Ci0gIHBfdGFibGUtPmZpbGUtPmhhX2luZGV4X2lu aXQoMCwgMSk7CisgIGlmIChwX3RhYmxlLT5maWxlLT5oYV9pbmRleF9pbml0KDAsIDEpKQorICAg IERCVUdfUkVUVVJOKFRSVUUpOwogICBwX3RhYmxlLT51c2VfYWxsX2NvbHVtbnMoKTsKIAogICBp ZiAoIXBfdGFibGUtPmZpbGUtPmhhX2luZGV4X2ZpcnN0KHBfdGFibGUtPnJlY29yZFswXSkpCkBA IC00MzM5LDcgKzQzNTUsOCBAQCBzdGF0aWMgbXlfYm9vbCBncmFudF9sb2FkKFRIRCAqdGhkLCBU QUJMCiAKICAgdF90YWJsZSA9IHRhYmxlc1swXS50YWJsZTsKICAgY190YWJsZSA9IHRhYmxlc1sx XS50YWJsZTsKLSAgdF90YWJsZS0+ZmlsZS0+aGFfaW5kZXhfaW5pdCgwLCAxKTsKKyAgaWYgKHRf dGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQoMCwgMSkpCisgICAgZ290byBlbmRfaW5kZXhfaW5p dDsKICAgdF90YWJsZS0+dXNlX2FsbF9jb2x1bW5zKCk7CiAgIGNfdGFibGUtPnVzZV9hbGxfY29s dW1ucygpOwogCkBAIC00Mzg0LDkgKzQ0MDEsMTAgQEAgc3RhdGljIG15X2Jvb2wgZ3JhbnRfbG9h ZChUSEQgKnRoZCwgVEFCTAogICByZXR1cm5fdmFsPTA7CQkJCQkvLyBSZXR1cm4gb2sKIAogZW5k X3VubG9jazoKLSAgdGhkLT52YXJpYWJsZXMuc3FsX21vZGU9IG9sZF9zcWxfbW9kZTsKICAgdF90 YWJsZS0+ZmlsZS0+aGFfaW5kZXhfZW5kKCk7CiAgIG15X3B0aHJlYWRfc2V0c3BlY2lmaWNfcHRy KFRIUl9NQUxMT0MsIHNhdmVfbWVtX3Jvb3RfcHRyKTsKK2VuZF9pbmRleF9pbml0OgorICB0aGQt PnZhcmlhYmxlcy5zcWxfbW9kZT0gb2xkX3NxbF9tb2RlOwogICBEQlVHX1JFVFVSTihyZXR1cm5f dmFsKTsKIH0KIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NxbC9zcWxfZXhlY3V0b3IuY2MnCi0tLSBh L3NxbC9zcWxfZXhlY3V0b3IuY2MJcmV2aWQ6eWFzdWZ1bWkua2lub3NoaXRhQG9yYWNsZS5jb20t MjAxMjA0MjcxMDQyMzgtM3hicjZ2MHk0c3pyN2JrcQorKysgYi9zcWwvc3FsX2V4ZWN1dG9yLmNj CXJldmlkOm1hdHRpYXMuam9uc3NvbkBvcmFjbGUuY29tLTIwMTIwNDI3MDkzODI3LTAxNTZ0ZGpj cHRzOGg0MHMKQEAgLTE1OTQsNyArMTU5NCwxMyBAQCBkb19zZWxlY3QoSk9JTiAqam9pbixMaXN0 PEl0ZW0+ICpmaWVsZHMsCiAgICAgZW1wdHlfcmVjb3JkKHRhYmxlKTsKICAgICBpZiAodGFibGUt Pmdyb3VwICYmIGpvaW4tPnRtcF90YWJsZV9wYXJhbS5zdW1fZnVuY19jb3VudCAmJgogICAgICAg ICB0YWJsZS0+cy0+a2V5cyAmJiAhdGFibGUtPmZpbGUtPmluaXRlZCkKLSAgICAgIHRhYmxlLT5m aWxlLT5oYV9pbmRleF9pbml0KDAsIDApOworICAgIHsKKyAgICAgIGlmICgocmM9IHRhYmxlLT5m aWxlLT5oYV9pbmRleF9pbml0KDAsIDApKSkKKyAgICAgIHsKKyAgICAgICAgdGFibGUtPmZpbGUt PnByaW50X2Vycm9yKHJjLCBNWUYoMCkpOworICAgICAgICBEQlVHX1JFVFVSTigtMSk7CisgICAg ICB9CisgICAgfQogICB9CiAgIC8qIFNldCB1cCBzZWxlY3RfZW5kICovCiAgIE5leHRfc2VsZWN0 X2Z1bmMgZW5kX3NlbGVjdD0gc2V0dXBfZW5kX3NlbGVjdF9mdW5jKGpvaW4pOwpAQCAtMjg5OSw3 ICsyOTA1LDExIEBAIGpvaW5fcmVhZF9rZXkyKEpPSU5fVEFCICp0YWIsIFRBQkxFICp0YWIKICAg aWYgKCF0YWJsZS0+ZmlsZS0+aW5pdGVkKQogICB7CiAgICAgREJVR19BU1NFUlQoIXRhYi0+c29y dGVkKTsgIC8vIERvbid0IGV4cGVjdCBzb3J0IHJlcS4gZm9yIHNpbmdsZSByb3cuCi0gICAgdGFi bGUtPmZpbGUtPmhhX2luZGV4X2luaXQodGFibGVfcmVmLT5rZXksIHRhYi0+c29ydGVkKTsKKyAg ICBpZiAoKGVycm9yPSB0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfaW5pdCh0YWJsZV9yZWYtPmtleSwg dGFiLT5zb3J0ZWQpKSkKKyAgICB7CisgICAgICAodm9pZCkgcmVwb3J0X2Vycm9yKHRhYmxlLCBl cnJvcik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CiAgIH0KIAogICAvKgpAQCAtMjk4OCw4ICsy OTk4LDEyIEBAIGpvaW5fcmVhZF9hbHdheXNfa2V5KEpPSU5fVEFCICp0YWIpCiAgIFRBQkxFICp0 YWJsZT0gdGFiLT50YWJsZTsKIAogICAvKiBJbml0aWFsaXplIHRoZSBpbmRleCBmaXJzdCAqLwot ICBpZiAoIXRhYmxlLT5maWxlLT5pbml0ZWQpCi0gICAgdGFibGUtPmZpbGUtPmhhX2luZGV4X2lu aXQodGFiLT5yZWYua2V5LCB0YWItPnNvcnRlZCk7CisgIGlmICghdGFibGUtPmZpbGUtPmluaXRl ZCAmJgorICAgICAgKGVycm9yPSB0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfaW5pdCh0YWItPnJlZi5r ZXksIHRhYi0+c29ydGVkKSkpCisgIHsKKyAgICAodm9pZCkgcmVwb3J0X2Vycm9yKHRhYmxlLCBl cnJvcik7CisgICAgcmV0dXJuIDE7CisgIH0KIAogICAvKiBQZXJmb3JtICJMYXRlIE5VTExzIEZp bHRlcmluZyIgKHNlZSBpbnRlcm5hbHMgbWFudWFsIGZvciBleHBsYW5hdGlvbnMpICovCiAgIFRB QkxFX1JFRiAqcmVmPSAmdGFiLT5yZWY7CkBAIC0zMDI1LDggKzMwMzksMTIgQEAgam9pbl9yZWFk X2xhc3Rfa2V5KEpPSU5fVEFCICp0YWIpCiAgIGludCBlcnJvcjsKICAgVEFCTEUgKnRhYmxlPSB0 YWItPnRhYmxlOwogCi0gIGlmICghdGFibGUtPmZpbGUtPmluaXRlZCkKLSAgICB0YWJsZS0+Zmls ZS0+aGFfaW5kZXhfaW5pdCh0YWItPnJlZi5rZXksIHRhYi0+c29ydGVkKTsKKyAgaWYgKCF0YWJs ZS0+ZmlsZS0+aW5pdGVkICYmCisgICAgICAoZXJyb3I9IHRhYmxlLT5maWxlLT5oYV9pbmRleF9p bml0KHRhYi0+cmVmLmtleSwgdGFiLT5zb3J0ZWQpKSkKKyAgeworICAgICh2b2lkKSByZXBvcnRf ZXJyb3IodGFibGUsIGVycm9yKTsKKyAgICByZXR1cm4gMTsKKyAgfQogICBpZiAoY3BfYnVmZmVy X2Zyb21fcmVmKHRhYi0+am9pbi0+dGhkLCB0YWJsZSwgJnRhYi0+cmVmKSkKICAgICByZXR1cm4g LTE7CiAgIGlmICgoZXJyb3I9dGFibGUtPmZpbGUtPmluZGV4X3JlYWRfbGFzdF9tYXAodGFibGUt PnJlY29yZFswXSwKQEAgLTMxOTksOCArMzIxNywxMiBAQCBqb2luX3JlYWRfZmlyc3QoSk9JTl9U QUIgKnRhYikKICAgdGFiLT5yZWFkX3JlY29yZC5yZWNvcmQ9dGFibGUtPnJlY29yZFswXTsKICAg dGFiLT5yZWFkX3JlY29yZC5yZWFkX3JlY29yZD1qb2luX3JlYWRfbmV4dDsKIAotICBpZiAoIXRh YmxlLT5maWxlLT5pbml0ZWQpCi0gICAgdGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQodGFiLT5p bmRleCwgdGFiLT5zb3J0ZWQpOworICBpZiAoIXRhYmxlLT5maWxlLT5pbml0ZWQgJiYKKyAgICAg IChlcnJvcj0gdGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQodGFiLT5pbmRleCwgdGFiLT5zb3J0 ZWQpKSkKKyAgeworICAgICh2b2lkKSByZXBvcnRfZXJyb3IodGFibGUsIGVycm9yKTsKKyAgICBy ZXR1cm4gMTsKKyAgfQogICBpZiAoKGVycm9yPSB0YWItPnRhYmxlLT5maWxlLT5oYV9pbmRleF9m aXJzdCh0YWItPnRhYmxlLT5yZWNvcmRbMF0pKSkKICAgewogICAgIGlmIChlcnJvciAhPSBIQV9F UlJfS0VZX05PVF9GT1VORCAmJiBlcnJvciAhPSBIQV9FUlJfRU5EX09GX0ZJTEUpCkBAIC0zMjMz LDggKzMyNTUsMTIgQEAgam9pbl9yZWFkX2xhc3QoSk9JTl9UQUIgKnRhYikKICAgdGFiLT5yZWFk X3JlY29yZC50YWJsZT10YWJsZTsKICAgdGFiLT5yZWFkX3JlY29yZC5pbmRleD10YWItPmluZGV4 OwogICB0YWItPnJlYWRfcmVjb3JkLnJlY29yZD10YWJsZS0+cmVjb3JkWzBdOwotICBpZiAoIXRh YmxlLT5maWxlLT5pbml0ZWQpCi0gICAgdGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQodGFiLT5p bmRleCwgdGFiLT5zb3J0ZWQpOworICBpZiAoIXRhYmxlLT5maWxlLT5pbml0ZWQgJiYKKyAgICAg IChlcnJvcj0gdGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQodGFiLT5pbmRleCwgdGFiLT5zb3J0 ZWQpKSkKKyAgeworICAgICh2b2lkKSByZXBvcnRfZXJyb3IodGFibGUsIGVycm9yKTsKKyAgICBy ZXR1cm4gMTsKKyAgfQogICBpZiAoKGVycm9yPSB0YWItPnRhYmxlLT5maWxlLT5oYV9pbmRleF9s YXN0KHRhYi0+dGFibGUtPnJlY29yZFswXSkpKQogICAgIHJldHVybiByZXBvcnRfZXJyb3IodGFi bGUsIGVycm9yKTsKICAgcmV0dXJuIDA7CkBAIC0zMjU3LDggKzMyODMsMTIgQEAgam9pbl9mdF9y ZWFkX2ZpcnN0KEpPSU5fVEFCICp0YWIpCiAgIGludCBlcnJvcjsKICAgVEFCTEUgKnRhYmxlPSB0 YWItPnRhYmxlOwogCi0gIGlmICghdGFibGUtPmZpbGUtPmluaXRlZCkKLSAgICB0YWJsZS0+Zmls ZS0+aGFfaW5kZXhfaW5pdCh0YWItPnJlZi5rZXksIHRhYi0+c29ydGVkKTsKKyAgaWYgKCF0YWJs ZS0+ZmlsZS0+aW5pdGVkICYmCisgICAgICAoZXJyb3I9IHRhYmxlLT5maWxlLT5oYV9pbmRleF9p bml0KHRhYi0+cmVmLmtleSwgdGFiLT5zb3J0ZWQpKSkKKyAgeworICAgICh2b2lkKSByZXBvcnRf ZXJyb3IodGFibGUsIGVycm9yKTsKKyAgICByZXR1cm4gMTsKKyAgfQogICB0YWJsZS0+ZmlsZS0+ ZnRfaW5pdCgpOwogCiAgIGlmICgoZXJyb3I9IHRhYmxlLT5maWxlLT5mdF9yZWFkKHRhYmxlLT5y ZWNvcmRbMF0pKSkKQEAgLTM3NDksNyArMzc3OSwxMSBAQCBlbmRfdXBkYXRlKEpPSU4gKmpvaW4s IEpPSU5fVEFCICpqb2luX3RhCiAJCQkJZXJyb3IsIEZBTFNFLCBOVUxMKSkKICAgICAgIERCVUdf UkVUVVJOKE5FU1RFRF9MT09QX0VSUk9SKTsgICAgICAgICAgICAvLyBOb3QgYSB0YWJsZV9pc19m dWxsIGVycm9yCiAgICAgLyogQ2hhbmdlIG1ldGhvZCB0byB1cGRhdGUgcm93cyAqLwotICAgIHRh YmxlLT5maWxlLT5oYV9pbmRleF9pbml0KDAsIDApOworICAgIGlmICgoZXJyb3I9IHRhYmxlLT5m aWxlLT5oYV9pbmRleF9pbml0KDAsIDApKSkKKyAgICB7CisgICAgICB0YWJsZS0+ZmlsZS0+cHJp bnRfZXJyb3IoZXJyb3IsIE1ZRigwKSk7CisgICAgICBEQlVHX1JFVFVSTihORVNURURfTE9PUF9F UlJPUik7CisgICAgfQogICAgIGpvaW4tPmpvaW5fdGFiW2pvaW4tPnRhYmxlcy0xXS5uZXh0X3Nl bGVjdD1lbmRfdW5pcXVlX3VwZGF0ZTsKICAgfQogICBqb2luLT5zZW5kX3JlY29yZHMrKzsKQEAg LTQxNzgsNyArNDIxMiw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2R1cF93aXRoX2NvbXBhcmUoVEhE ICoKICAgb3JnX3JlY29yZD0oY2hhciopIChyZWNvcmQ9dGFibGUtPnJlY29yZFswXSkrb2Zmc2V0 OwogICBuZXdfcmVjb3JkPShjaGFyKikgdGFibGUtPnJlY29yZFsxXStvZmZzZXQ7CiAKLSAgZmls ZS0+aGFfcm5kX2luaXQoMSk7CisgIGlmICgoZXJyb3I9IGZpbGUtPmhhX3JuZF9pbml0KDEpKSkK KyAgICBnb3RvIGVycjsKICAgZXJyb3I9ZmlsZS0+aGFfcm5kX25leHQocmVjb3JkKTsKICAgZm9y ICg7OykKICAgewpAQCAtNDMwNiw3ICs0MzQxLDggQEAgc3RhdGljIGludCByZW1vdmVfZHVwX3dp dGhfaGFzaF9pbmRleChUSAogICAgIERCVUdfUkVUVVJOKDEpOwogICB9CiAKLSAgZmlsZS0+aGFf cm5kX2luaXQoMSk7CisgIGlmICgoZXJyb3I9IGZpbGUtPmhhX3JuZF9pbml0KDEpKSkKKyAgICBn b3RvIGVycjsKICAga2V5X3Bvcz1rZXlfYnVmZmVyOwogICBmb3IgKDs7KQogICB7CkBAIC00MzY0 LDcgKzQ0MDAsOCBAQCBlcnI6CiAgIG15X2ZyZWUoa2V5X2J1ZmZlcik7CiAgIG15X2hhc2hfZnJl ZSgmaGFzaCk7CiAgIGZpbGUtPmV4dHJhKEhBX0VYVFJBX05PX0NBQ0hFKTsKLSAgKHZvaWQpIGZp bGUtPmhhX3JuZF9lbmQoKTsKKyAgaWYgKGZpbGUtPmluaXRlZCkKKyAgICAodm9pZCkgZmlsZS0+ aGFfcm5kX2VuZCgpOwogICBpZiAoZXJyb3IpCiAgICAgZmlsZS0+cHJpbnRfZXJyb3IoZXJyb3Is TVlGKDApKTsKICAgREJVR19SRVRVUk4oMSk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3FsL3NxbF9o ZWxwLmNjJwotLS0gYS9zcWwvc3FsX2hlbHAuY2MJcmV2aWQ6eWFzdWZ1bWkua2lub3NoaXRhQG9y YWNsZS5jb20tMjAxMjA0MjcxMDQyMzgtM3hicjZ2MHk0c3pyN2JrcQorKysgYi9zcWwvc3FsX2hl bHAuY2MJcmV2aWQ6bWF0dGlhcy5qb25zc29uQG9yYWNsZS5jb20tMjAxMjA0MjcwOTM4MjctMDE1 NnRkamNwdHM4aDQwcwpAQCAtMzAyLDggKzMwMiwxNyBAQCBpbnQgZ2V0X3RvcGljc19mb3Jfa2V5 d29yZChUSEQgKnRoZCwgVEFCCiAgIHJ0b3BpY19pZD0gZmluZF9maWVsZHNbaGVscF9yZWxhdGlv bl9oZWxwX3RvcGljX2lkXS5maWVsZDsKICAgcmtleV9pZD0gICBmaW5kX2ZpZWxkc1toZWxwX3Jl bGF0aW9uX2hlbHBfa2V5d29yZF9pZF0uZmllbGQ7CiAKLSAgdG9waWNzLT5maWxlLT5oYV9pbmRl eF9pbml0KGlpbmRleF90b3BpYywxKTsKLSAgcmVsYXRpb25zLT5maWxlLT5oYV9pbmRleF9pbml0 KGlpbmRleF9yZWxhdGlvbnMsMSk7CisgIGlmICh0b3BpY3MtPmZpbGUtPmhhX2luZGV4X2luaXQo aWluZGV4X3RvcGljLCAxKSkKKyAgeworICAgIG15X21lc3NhZ2UoRVJfQ09SUlVQVF9IRUxQX0RC LCBFUihFUl9DT1JSVVBUX0hFTFBfREIpLCBNWUYoMCkpOworICAgIERCVUdfUkVUVVJOKC0xKTsK KyAgfQorICBpZiAocmVsYXRpb25zLT5maWxlLT5oYV9pbmRleF9pbml0KGlpbmRleF9yZWxhdGlv bnMsIDEpKQorICB7CisgICAgdG9waWNzLT5maWxlLT5oYV9pbmRleF9lbmQoKTsKKyAgICBteV9t ZXNzYWdlKEVSX0NPUlJVUFRfSEVMUF9EQiwgRVIoRVJfQ09SUlVQVF9IRUxQX0RCKSwgTVlGKDAp KTsKKyAgICBEQlVHX1JFVFVSTigtMSk7CisgIH0KIAogICBya2V5X2lkLT5zdG9yZSgobG9uZ2xv bmcpIGtleV9pZCwgVFJVRSk7CiAgIHJrZXlfaWQtPmdldF9rZXlfaW1hZ2UoYnVmZiwgcmtleV9p ZC0+cGFja19sZW5ndGgoKSwgRmllbGQ6Oml0UkFXKTsKCj09PSBtb2RpZmllZCBmaWxlICdzcWwv c3FsX2pvaW5fYnVmZmVyLmNjJwotLS0gYS9zcWwvc3FsX2pvaW5fYnVmZmVyLmNjCXJldmlkOnlh c3VmdW1pLmtpbm9zaGl0YUBvcmFjbGUuY29tLTIwMTIwNDI3MTA0MjM4LTN4YnI2djB5NHN6cjdi a3EKKysrIGIvc3FsL3NxbF9qb2luX2J1ZmZlci5jYwlyZXZpZDptYXR0aWFzLmpvbnNzb25Ab3Jh Y2xlLmNvbS0yMDEyMDQyNzA5MzgyNy0wMTU2dGRqY3B0czhoNDBzCkBAIC0yNDAwLDggKzI0MDAs OSBAQCBKT0lOX0NBQ0hFX0JLQTo6aW5pdF9qb2luX21hdGNoaW5nX3JlY29yCiAgICAgUHJlcGFy ZSB0byBpdGVyYXRlIG92ZXIga2V5cyBmcm9tIHRoZSBqb2luIGJ1ZmZlciBhbmQgdG8gZ2V0CiAg ICAgbWF0Y2hpbmcgY2FuZGlkYXRlcyBvYnRhaW5lZCB3aXRoIE1NUiBoYW5kbGVyIGZ1bmN0aW9u cy4KICAgKi8gCi0gIGlmICghZmlsZS0+aW5pdGVkKQotICAgIGZpbGUtPmhhX2luZGV4X2luaXQo am9pbl90YWItPnJlZi5rZXksIDEpOworICBpZiAoIWZpbGUtPmluaXRlZCAmJgorICAgICAgKGVy cm9yPSBmaWxlLT5oYV9pbmRleF9pbml0KGpvaW5fdGFiLT5yZWYua2V5LCAxKSkpCisgICAgcmV0 dXJuIE5FU1RFRF9MT09QX0VSUk9SOwogICBpZiAoKGVycm9yPSBmaWxlLT5tdWx0aV9yYW5nZV9y ZWFkX2luaXQoc2VxX2Z1bmNzLCAodm9pZCopIHRoaXMsIHJhbmdlcywKIAkJCQkJICBtcnJfbW9k ZSwgJm1ycl9idWZmKSkpCiAgICAgcmM9IGVycm9yIDwgMCA/IE5FU1RFRF9MT09QX05PX01PUkVf Uk9XUzogTkVTVEVEX0xPT1BfRVJST1I7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3FsL3NxbF9zaG93 LmNjJwotLS0gYS9zcWwvc3FsX3Nob3cuY2MJcmV2aWQ6eWFzdWZ1bWkua2lub3NoaXRhQG9yYWNs ZS5jb20tMjAxMjA0MjcxMDQyMzgtM3hicjZ2MHk0c3pyN2JrcQorKysgYi9zcWwvc3FsX3Nob3cu Y2MJcmV2aWQ6bWF0dGlhcy5qb25zc29uQG9yYWNsZS5jb20tMjAxMjA0MjcwOTM4MjctMDE1NnRk amNwdHM4aDQwcwpAQCAtNTI1NCw3ICs1MjU0LDExIEBAIGludCBmaWxsX3NjaGVtYV9wcm9jKFRI RCAqdGhkLCBUQUJMRV9MSVMKICAgewogICAgIERCVUdfUkVUVVJOKDEpOwogICB9Ci0gIHByb2Nf dGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQoMCwgMSk7CisgIGlmIChwcm9jX3RhYmxlLT5maWxl LT5oYV9pbmRleF9pbml0KDAsIDEpKQorICB7CisgICAgcmVzPSAxOworICAgIGdvdG8gZXJyOwor ICB9CiAgIGlmICgocmVzPSBwcm9jX3RhYmxlLT5maWxlLT5oYV9pbmRleF9maXJzdChwcm9jX3Rh YmxlLT5yZWNvcmRbMF0pKSkKICAgewogICAgIHJlcz0gKHJlcyA9PSBIQV9FUlJfRU5EX09GX0ZJ TEUpID8gMCA6IDE7CkBAIC01MjgwLDcgKzUyODQsOCBAQCBpbnQgZmlsbF9zY2hlbWFfcHJvYyhU SEQgKnRoZCwgVEFCTEVfTElTCiAgIH0KIAogZXJyOgotICBwcm9jX3RhYmxlLT5maWxlLT5oYV9p bmRleF9lbmQoKTsKKyAgaWYgKHByb2NfdGFibGUtPmZpbGUtPmluaXRlZCkKKyAgICAodm9pZCkg cHJvY190YWJsZS0+ZmlsZS0+aGFfaW5kZXhfZW5kKCk7CiAgIGNsb3NlX3N5c3RlbV90YWJsZXMo dGhkLCAmb3Blbl90YWJsZXNfc3RhdGVfYmFja3VwKTsKICAgREJVR19SRVRVUk4ocmVzKTsKIH0K Cj09PSBtb2RpZmllZCBmaWxlICdzcWwvc3FsX3RtcF90YWJsZS5jYycKLS0tIGEvc3FsL3NxbF90 bXBfdGFibGUuY2MJcmV2aWQ6eWFzdWZ1bWkua2lub3NoaXRhQG9yYWNsZS5jb20tMjAxMjA0Mjcx MDQyMzgtM3hicjZ2MHk0c3pyN2JrcQorKysgYi9zcWwvc3FsX3RtcF90YWJsZS5jYwlyZXZpZDpt YXR0aWFzLmpvbnNzb25Ab3JhY2xlLmNvbS0yMDEyMDQyNzA5MzgyNy0wMTU2dGRqY3B0czhoNDBz CkBAIC0xOTE4LDcgKzE5MTgsNyBAQCBib29sIGNyZWF0ZV9teWlzYW1fZnJvbV9oZWFwKFRIRCAq dGhkLCBUCiAgIFRBQkxFIG5ld190YWJsZTsKICAgVEFCTEVfU0hBUkUgc2hhcmU7CiAgIGNvbnN0 IGNoYXIgKnNhdmVfcHJvY19pbmZvOwotICBpbnQgd3JpdGVfZXJyOworICBpbnQgd3JpdGVfZXJy PSAwOwogICBEQlVHX0VOVEVSKCJjcmVhdGVfbXlpc2FtX2Zyb21faGVhcCIpOwogCiAgIGlmICh0 YWJsZS0+cy0+ZGJfdHlwZSgpICE9IGhlYXBfaHRvbiB8fCAKQEAgLTE5NzQsNyArMTk3NCwxMiBA QCBib29sIGNyZWF0ZV9teWlzYW1fZnJvbV9oZWFwKFRIRCAqdGhkLCBUCiAgIGlmICh0YWJsZS0+ ZmlsZS0+aW5kZXhlc19hcmVfZGlzYWJsZWQoKSkKICAgICBuZXdfdGFibGUuZmlsZS0+aGFfZGlz YWJsZV9pbmRleGVzKEhBX0tFWV9TV0lUQ0hfQUxMKTsKICAgdGFibGUtPmZpbGUtPmhhX2luZGV4 X29yX3JuZF9lbmQoKTsKLSAgdGFibGUtPmZpbGUtPmhhX3JuZF9pbml0KDEpOworICBpZiAoKHdy aXRlX2Vycj0gdGFibGUtPmZpbGUtPmhhX3JuZF9pbml0KDEpKSkKKyAgeworICAgIHRhYmxlLT5m aWxlLT5wcmludF9lcnJvcih3cml0ZV9lcnIsIE1ZRihNRV9GQVRBTEVSUk9SKSk7CisgICAgd3Jp dGVfZXJyPSAwOworICAgIGdvdG8gZXJyOworICB9CiAgIGlmICh0YWJsZS0+bm9fcm93cykKICAg ewogICAgIG5ld190YWJsZS5maWxlLT5leHRyYShIQV9FWFRSQV9OT19ST1dTKTsKQEAgLTIwNTMs OSArMjA1OCwxMyBAQCBib29sIGNyZWF0ZV9teWlzYW1fZnJvbV9oZWFwKFRIRCAqdGhkLCBUCiAg IERCVUdfUkVUVVJOKDApOwogCiAgZXJyOgotICBEQlVHX1BSSU5UKCJlcnJvciIsKCJHb3QgZXJy b3I6ICVkIix3cml0ZV9lcnIpKTsKLSAgdGFibGUtPmZpbGUtPnByaW50X2Vycm9yKHdyaXRlX2Vy ciwgTVlGKDApKTsKLSAgKHZvaWQpIHRhYmxlLT5maWxlLT5oYV9ybmRfZW5kKCk7CisgIGlmICh3 cml0ZV9lcnIpCisgIHsKKyAgICBEQlVHX1BSSU5UKCJlcnJvciIsKCJHb3QgZXJyb3I6ICVkIix3 cml0ZV9lcnIpKTsKKyAgICBuZXdfdGFibGUuZmlsZS0+cHJpbnRfZXJyb3Iod3JpdGVfZXJyLCBN WUYoMCkpOworICB9CisgIGlmICh0YWJsZS0+ZmlsZS0+aW5pdGVkKQorICAgICh2b2lkKSB0YWJs ZS0+ZmlsZS0+aGFfcm5kX2VuZCgpOwogICAodm9pZCkgbmV3X3RhYmxlLmZpbGUtPmhhX2Nsb3Nl KCk7CiAgZXJyMToKICAgbmV3X3RhYmxlLmZpbGUtPmhhX2RlbGV0ZV90YWJsZShuZXdfdGFibGUu cy0+dGFibGVfbmFtZS5zdHIpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NxbC9zcWxfdXBkYXRlLmNj JwotLS0gYS9zcWwvc3FsX3VwZGF0ZS5jYwlyZXZpZDp5YXN1ZnVtaS5raW5vc2hpdGFAb3JhY2xl LmNvbS0yMDEyMDQyNzEwNDIzOC0zeGJyNnYweTRzenI3YmtxCisrKyBiL3NxbC9zcWxfdXBkYXRl LmNjCXJldmlkOm1hdHRpYXMuam9uc3NvbkBvcmFjbGUuY29tLTIwMTIwNDI3MDkzODI3LTAxNTZ0 ZGpjcHRzOGg0MHMKQEAgLTIxNjUsNyArMjE2NSw4IEBAIGludCBtdWx0aV91cGRhdGU6OmRvX3Vw ZGF0ZXMoKQogICAgIG9yZ191cGRhdGVkPSB1cGRhdGVkOwogICAgIHRtcF90YWJsZT0gdG1wX3Rh Ymxlc1tjdXJfdGFibGUtPnNoYXJlZF07CiAgICAgdG1wX3RhYmxlLT5maWxlLT5leHRyYShIQV9F WFRSQV9DQUNIRSk7CS8vIENoYW5nZSB0byByZWFkIGNhY2hlCi0gICAgKHZvaWQpIHRhYmxlLT5m aWxlLT5oYV9ybmRfaW5pdCgwKTsKKyAgICBpZiAoKGxvY2FsX2Vycm9yPSB0YWJsZS0+ZmlsZS0+ aGFfcm5kX2luaXQoMCkpKQorICAgICAgZ290byBlcnI7CiAgICAgdGFibGUtPmZpbGUtPmV4dHJh KEhBX0VYVFJBX05PX0NBQ0hFKTsKIAogICAgIGNoZWNrX29wdF9pdC5yZXdpbmQoKTsKQEAgLTIy OTAsMTEgKzIyOTEsMTYgQEAgZXJyOgogICB9CiAKIGVycjI6Ci0gICh2b2lkKSB0YWJsZS0+Zmls ZS0+aGFfcm5kX2VuZCgpOwotICAodm9pZCkgdG1wX3RhYmxlLT5maWxlLT5oYV9ybmRfZW5kKCk7 CisgIGlmICh0YWJsZS0+ZmlsZS0+aW5pdGVkKQorICAgICh2b2lkKSB0YWJsZS0+ZmlsZS0+aGFf cm5kX2VuZCgpOworICBpZiAodG1wX3RhYmxlLT5maWxlLT5pbml0ZWQpCisgICAgKHZvaWQpIHRt cF90YWJsZS0+ZmlsZS0+aGFfcm5kX2VuZCgpOwogICBjaGVja19vcHRfaXQucmV3aW5kKCk7CiAg IHdoaWxlIChUQUJMRSAqdGJsPSBjaGVja19vcHRfaXQrKykKLSAgICAgIHRibC0+ZmlsZS0+aGFf cm5kX2VuZCgpOworICB7CisgICAgaWYgKHRibC0+ZmlsZS0+aW5pdGVkKQorICAgICAgKHZvaWQp IHRibC0+ZmlsZS0+aGFfcm5kX2VuZCgpOworICB9CiAKICAgaWYgKHVwZGF0ZWQgIT0gb3JnX3Vw ZGF0ZWQpCiAgIHsKCj09PSBtb2RpZmllZCBmaWxlICdzcWwvdHp0aW1lLmNjJwotLS0gYS9zcWwv dHp0aW1lLmNjCXJldmlkOnlhc3VmdW1pLmtpbm9zaGl0YUBvcmFjbGUuY29tLTIwMTIwNDI3MTA0 MjM4LTN4YnI2djB5NHN6cjdia3EKKysrIGIvc3FsL3R6dGltZS5jYwlyZXZpZDptYXR0aWFzLmpv bnNzb25Ab3JhY2xlLmNvbS0yMDEyMDQyNzA5MzgyNy0wMTU2dGRqY3B0czhoNDBzCkBAIC0xNzAx LDEyICsxNzAxLDkgQEAgbXlfdHpfaW5pdChUSEQgKm9yZ190aGQsIGNvbnN0IGNoYXIgKmRlZgog ICB9CiAKICAgdGFibGU9IHR6X3RhYmxlc1swXS50YWJsZTsKLSAgLyoKLSAgICBJdCBpcyBPSyB0 byBpZ25vcmUgaGFfaW5kZXhfaW5pdCgpL2hhX2luZGV4X2VuZCgpIHJldHVybiB2YWx1ZXMgc2lu Y2UKLSAgICBteXNxbC50aW1lX3pvbmUqIHRhYmxlcyBhcmUgTXlJU0FNIGFuZCB0aGVzZSBvcGVy YXRpb25zIGFsd2F5cyBzdWNjZWVkCi0gICAgZm9yIE15SVNBTS4KLSAgKi8KLSAgKHZvaWQpdGFi bGUtPmZpbGUtPmhhX2luZGV4X2luaXQoMCwgMSk7CisKKyAgaWYgKHRhYmxlLT5maWxlLT5oYV9p bmRleF9pbml0KDAsIDEpKQorICAgIGdvdG8gZW5kX3dpdGhfY2xvc2U7CiAgIHRhYmxlLT51c2Vf YWxsX2NvbHVtbnMoKTsKIAogICB0el9sZWFwY250PSAwOwpAQCAtMTg5NCwxMiArMTg5MSw5IEBA IHR6X2xvYWRfZnJvbV9vcGVuX3RhYmxlcyhjb25zdCBTdHJpbmcgKnQKICAgdHpfdGFibGVzPSB0 el90YWJsZXMtPm5leHRfbG9jYWw7CiAgIHRhYmxlLT5maWVsZFswXS0+c3RvcmUodHpfbmFtZS0+ cHRyKCksIHR6X25hbWUtPmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICZteV9j aGFyc2V0X2xhdGluMSk7Ci0gIC8qCi0gICAgSXQgaXMgT0sgdG8gaWdub3JlIGhhX2luZGV4X2lu aXQoKS9oYV9pbmRleF9lbmQoKSByZXR1cm4gdmFsdWVzIHNpbmNlCi0gICAgbXlzcWwudGltZV96 b25lKiB0YWJsZXMgYXJlIE15SVNBTSBhbmQgdGhlc2Ugb3BlcmF0aW9ucyBhbHdheXMgc3VjY2Vl ZAotICAgIGZvciBNeUlTQU0uCi0gICovCi0gICh2b2lkKXRhYmxlLT5maWxlLT5oYV9pbmRleF9p bml0KDAsIDEpOworCisgIGlmICh0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfaW5pdCgwLCAxKSkKKyAg ICBnb3RvIGVuZDsKIAogICBpZiAodGFibGUtPmZpbGUtPmhhX2luZGV4X3JlYWRfbWFwKHRhYmxl LT5yZWNvcmRbMF0sIHRhYmxlLT5maWVsZFswXS0+cHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEhBX1dIT0xFX0tFWSwgSEFfUkVBRF9LRVlfRVhBQ1QpKQpAQCAtMTky Nyw3ICsxOTIxLDggQEAgdHpfbG9hZF9mcm9tX29wZW5fdGFibGVzKGNvbnN0IFN0cmluZyAqdAog ICB0YWJsZT0gdHpfdGFibGVzLT50YWJsZTsKICAgdHpfdGFibGVzPSB0el90YWJsZXMtPm5leHRf bG9jYWw7CiAgIHRhYmxlLT5maWVsZFswXS0+c3RvcmUoKGxvbmdsb25nKSB0emlkLCBUUlVFKTsK LSAgKHZvaWQpdGFibGUtPmZpbGUtPmhhX2luZGV4X2luaXQoMCwgMSk7CisgIGlmICh0YWJsZS0+ ZmlsZS0+aGFfaW5kZXhfaW5pdCgwLCAxKSkKKyAgICBnb3RvIGVuZDsKIAogICBpZiAodGFibGUt PmZpbGUtPmhhX2luZGV4X3JlYWRfbWFwKHRhYmxlLT5yZWNvcmRbMF0sIHRhYmxlLT5maWVsZFsw XS0+cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBX1dIT0xFX0tF WSwgSEFfUkVBRF9LRVlfRVhBQ1QpKQpAQCAtMTk1NCw3ICsxOTQ5LDggQEAgdHpfbG9hZF9mcm9t X29wZW5fdGFibGVzKGNvbnN0IFN0cmluZyAqdAogICB0YWJsZT0gdHpfdGFibGVzLT50YWJsZTsK ICAgdHpfdGFibGVzPSB0el90YWJsZXMtPm5leHRfbG9jYWw7CiAgIHRhYmxlLT5maWVsZFswXS0+ c3RvcmUoKGxvbmdsb25nKSB0emlkLCBUUlVFKTsKLSAgKHZvaWQpdGFibGUtPmZpbGUtPmhhX2lu ZGV4X2luaXQoMCwgMSk7CisgIGlmICh0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfaW5pdCgwLCAxKSkK KyAgICBnb3RvIGVuZDsKIAogICByZXM9IHRhYmxlLT5maWxlLT5oYV9pbmRleF9yZWFkX21hcCh0 YWJsZS0+cmVjb3JkWzBdLCB0YWJsZS0+ZmllbGRbMF0tPnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGtleV9wYXJ0X21hcCkxLCBIQV9SRUFEX0tFWV9FWEFDVCk7 CkBAIC0yMDI1LDcgKzIwMjEsOCBAQCB0el9sb2FkX2Zyb21fb3Blbl90YWJsZXMoY29uc3QgU3Ry aW5nICp0CiAgICovCiAgIHRhYmxlPSB0el90YWJsZXMtPnRhYmxlOyAKICAgdGFibGUtPmZpZWxk WzBdLT5zdG9yZSgobG9uZ2xvbmcpIHR6aWQsIFRSVUUpOwotICAodm9pZCl0YWJsZS0+ZmlsZS0+ aGFfaW5kZXhfaW5pdCgwLCAxKTsKKyAgaWYgKHRhYmxlLT5maWxlLT5oYV9pbmRleF9pbml0KDAs IDEpKQorICAgIGdvdG8gZW5kOwogCiAgIHJlcz0gdGFibGUtPmZpbGUtPmhhX2luZGV4X3JlYWRf bWFwKHRhYmxlLT5yZWNvcmRbMF0sIHRhYmxlLT5maWVsZFswXS0+cHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5X3BhcnRfbWFwKTEsIEhBX1JFQURfS0VZX0VY QUNUKTsKQEAgLTIxNjAsOCArMjE1Nyw4IEBAIHR6X2xvYWRfZnJvbV9vcGVuX3RhYmxlcyhjb25z dCBTdHJpbmcgKnQKIAogZW5kOgogCi0gIGlmICh0YWJsZSkKLSAgICAodm9pZCl0YWJsZS0+Zmls ZS0+aGFfaW5kZXhfZW5kKCk7CisgIGlmICh0YWJsZSAmJiB0YWJsZS0+ZmlsZS0+aW5pdGVkKQor ICAgICh2b2lkKSB0YWJsZS0+ZmlsZS0+aGFfaW5kZXhfZW5kKCk7CiAKICAgREJVR19SRVRVUk4o cmV0dXJuX3ZhbCk7CiB9Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9pbm5vYmFzZS9oYW5k bGVyL2hhX2lubm9kYi5jYycKLS0tIGEvc3RvcmFnZS9pbm5vYmFzZS9oYW5kbGVyL2hhX2lubm9k Yi5jYwlyZXZpZDp5YXN1ZnVtaS5raW5vc2hpdGFAb3JhY2xlLmNvbS0yMDEyMDQyNzEwNDIzOC0z eGJyNnYweTRzenI3YmtxCisrKyBiL3N0b3JhZ2UvaW5ub2Jhc2UvaGFuZGxlci9oYV9pbm5vZGIu Y2MJcmV2aWQ6bWF0dGlhcy5qb25zc29uQG9yYWNsZS5jb20tMjAxMjA0MjcwOTM4MjctMDE1NnRk amNwdHM4aDQwcwpAQCAtNzM2Miw3ICs3MzYyLDcgQEAgaGFfaW5ub2Jhc2U6OmNoYW5nZV9hY3Rp dmVfaW5kZXgoCiAJCQkJIklubm9EQjogSW5kZXggJXMgZm9yIHRhYmxlICVzIGlzIgogCQkJCSIg bWFya2VkIGFzIGNvcnJ1cHRlZCIsCiAJCQkJaW5kZXhfbmFtZSwgdGFibGVfbmFtZSk7Ci0JCQlE QlVHX1JFVFVSTigxKTsKKwkJCURCVUdfUkVUVVJOKEhBX0VSUl9JTkRFWF9DT1JSVVBUKTsKIAkJ fSBlbHNlIHsKIAkJCXB1c2hfd2FybmluZ19wcmludGYoCiAJCQkJdXNlcl90aGQsIFNxbF9jb25k aXRpb246OldBUk5fTEVWRUxfV0FSTiwKQEAgLTczNzMsNyArNzM3Myw3IEBAIGhhX2lubm9iYXNl OjpjaGFuZ2VfYWN0aXZlX2luZGV4KAogCiAJCS8qIFRoZSBjYWxsZXIgc2VlbXMgdG8gaWdub3Jl IHRoaXMuICBUaHVzLCB3ZSBtdXN0IGNoZWNrCiAJCXRoaXMgYWdhaW4gaW4gcm93X3NlYXJjaF9m b3JfbXlzcWwoKS4gKi8KLQkJREJVR19SRVRVUk4oMik7CisJCURCVUdfUkVUVVJOKEhBX0VSUl9U QUJMRV9ERUZfQ0hBTkdFRCk7CiAJfQogCiAJdXRfYShwcmVidWlsdC0+c2VhcmNoX3R1cGxlICE9 IDApOwoKTm8gYnVuZGxlIChyZWFzb246IHVzZWxlc3MgZm9yIHB1c2ggZW1haWxzKS4=