Re: Block level parallel vacuum
Amit Kapila <[email protected]> Tue, 14 Jan 2020 18:13:22 +0530
| Newsgroups | gmane.comp.db.postgresql.devel.general |
|---|---|
| Message-ID | <CAA4eK1KgD+SnP4iddBNQP8fDOWLfKCJMo0G0witwz47sd9fhKw@mail.gmail.com> |
--000000000000a9643b059c18f087 Content-Type: text/plain; charset="UTF-8" On Tue, Jan 14, 2020 at 10:04 AM Masahiko Sawada <[email protected]> wrote: > > On Mon, 13 Jan 2020 at 12:50, Amit Kapila <[email protected]> wrote: > > > > On Sat, Jan 11, 2020 at 7:48 PM Masahiko Sawada > > <[email protected]> wrote: > > > > Okay, would it better if we get rid of this variable and have code like below? > > > > /* Skip the indexes that can be processed by parallel workers */ > > if ( !(get_indstats(lps->lvshared, i) == NULL || > > skip_parallel_vacuum_index(Irel[i], lps->lvshared))) > > continue; > > Make sense to me. > I have changed the comment and condition to make it a positive test so that it is more clear. > > ... > > > Agreed. But with the updated patch the PARALLEL option without the > > > parallel degree doesn't display warning because params->nworkers = 0 > > > in that case. So how about restoring params->nworkers at the end of > > > vacuum_rel()? > > > > > > > I had also thought on those lines, but I was not entirely sure about > > this resetting of workers. Today, again thinking about it, it seems > > the idea Mahendra is suggesting that is giving an error if the > > parallel degree is not specified seems reasonable to me. This means > > Vacuum (parallel), Vacuum (parallel) <tbl_name>, etc. will give an > > error "parallel degree must be specified". This idea has merit as now > > we are supporting a parallel vacuum by default, so a 'parallel' option > > without a parallel degree doesn't have any meaning. If we do that, > > then we don't need to do anything additional about the handling of > > temp tables (other than what patch is already doing) as well. What do > > you think? > > > > Good point! Agreed. > Thanks, changed accordingly. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com --000000000000a9643b059c18f087 Content-Type: application/octet-stream; name="v47-0001-Introduce-IndexAM-fields-for-parallel-vacuum.patch" Content-Disposition: attachment; filename="v47-0001-Introduce-IndexAM-fields-for-parallel-vacuum.patch" Content-Transfer-Encoding: base64 Content-ID: <f_k5dva2zd0> X-Attachment-Id: f_k5dva2zd0 RnJvbSAzZDU3M2RiODc1NzE0MDI1OTM5ODAyYjRlOGRlYjNlOTVhNjIxODIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IEthcGlsYSA8YWthcGlsYUBwb3N0Z3Jlc3FsLm9yZz4K RGF0ZTogVGh1LCA5IEphbiAyMDIwIDE0OjM2OjM1ICswNTMwClN1YmplY3Q6IFtQQVRDSCAxLzJd IEludHJvZHVjZSBJbmRleEFNIGZpZWxkcyBmb3IgcGFyYWxsZWwgdmFjdXVtLgoKSW50cm9kdWNl IG5ldyBmaWVsZHMgYW11c2VtYWludGVuYW5jZXdvcmttZW0gYW5kIGFtcGFyYWxsZWx2YWN1dW1v cHRpb25zCmluIEluZGV4QW1Sb3V0aW5lIGZvciBwYXJhbGxlbCB2YWN1dW0uICBUaGUgYW11c2Vt YWludGVuYW5jZXdvcmttZW0gdGVsbHMKd2hldGhlciBhIHBhcnRpY3VsYXIgSW5kZXhBTSB1c2Vz IG1haW50ZW5hbmNlX3dvcmtfbWVtIG9yIG5vdC4gIFRoaXMgd2lsbApoZWxwIGluIGNvbnRyb2xs aW5nIHRoZSBtZW1vcnkgdXNlZCBieSBpbmRpdmlkdWFsIHdvcmtlcnMgYXMgb3RoZXJ3aXNlLApl YWNoIHdvcmtlciBjYW4gY29uc3VtZSBtZW1vcnkgZXF1YWwgdG8gbWFpbnRlbmFuY2Vfd29ya19t ZW0uICBUaGUKYW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgdGVsbCB3aGV0aGVyIGEgcGFydGljdWxh ciBJbmRleEFNIHBhcnRpY2lwYXRlcyBpbgphIHBhcmFsbGVsIHZhY3V1bSBhbmQgaWYgc28gaW4g d2hpY2ggcGhhc2UgKGJ1bGtkZWxldGUsIHZhY3V1bWNsZWFudXApIG9mCnZhY3V1bS4KCkF1dGhv cjogTWFzYWhpa28gU2F3YWRhIGFuZCBBbWl0IEthcGlsYQpSZXZpZXdlZC1ieTogRGlsaXAgS3Vt YXIsIEFtaXQgS2FwaWxhLCBUb21hcyBWb25kcmEgYW5kIFJvYmVydCBIYWFzCkRpc2N1c3Npb246 Cmh0dHBzOi8vcG9zdGdyLmVzL20vQ0FEMjFBb0RUUE1nelNrVjRFM1NGbzFDSF94NTBiZjVQcVpG UWY0am1xamstQzAzQldnQG1haWwuZ21haWwuY29tCmh0dHBzOi8vcG9zdGdyLmVzL20vQ0FBNGVL MUxtY0Q1YVBvZ3p3aW01Tm41OEtpKzc0YTZFZGdoeDRXZDhoQXNrdkhhcTVBQG1haWwuZ21haWwu Y29tCi0tLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDQgKysrCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAgICAgICAgICAg ICAgfCAgNCArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyAgICAgICAgICAgICAg ICAgICB8ICA0ICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAg ICAgICAgIHwgIDQgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAg ICAgICAgICAgfCAgNCArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICAg ICAgICAgICAgICB8ICAzICsrCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAg ICAgICAgICAgICAgfCAgMyArKwogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5j ICAgICAgICAgICAgIHwgIDQgKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAg ICAgICAgICAgICAgICAgfCAgNCArKysKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oICAg ICAgICAgICAgICAgICAgICB8IDM4ICsrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3Qv bW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jIHwgIDMgKysKIDExIGZpbGVz IGNoYW5nZWQsIDc1IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2Js dXRpbHMuYyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCmluZGV4IDIzZDk1OWI5ZjAuLjAxMDRk MDJmNjcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIv Ymxvb20vYmx1dGlscy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9w dGlvbnMuaCIKICNpbmNsdWRlICJibG9vbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIK KyNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZnJlZXNwYWNlLmgi CkBAIC0xMjEsNiArMTIyLDkgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0 aW5lLT5hbXByZWRsb2NrcyA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZh bHNlOwogCWFtcm91dGluZS0+YW1jYW5pbmNsdWRlID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXVz ZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOworCWFtcm91dGluZS0+YW1wYXJhbGxlbHZhY3V1 bW9wdGlvbnMgPQorCQlWQUNVVU1fT1BUSU9OX1BBUkFMTEVMX0JVTEtERUwgfCBWQUNVVU1fT1BU SU9OX1BBUkFMTEVMX0NMRUFOVVA7CiAJYW1yb3V0aW5lLT5hbWtleXR5cGUgPSBJbnZhbGlkT2lk OwogCiAJYW1yb3V0aW5lLT5hbWJ1aWxkID0gYmxidWlsZDsKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IGRkNTRj Njg4MDIuLjM3ZjhkODc2MGEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtMTIyLDYgKzEyMiwxMCBAQCB0eXBl ZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGJvb2wgICAgICAgIGFtY2FucGFyYWxsZWw7 CiAgICAgLyogZG9lcyBBTSBzdXBwb3J0IGNvbHVtbnMgaW5jbHVkZWQgd2l0aCBjbGF1c2UgSU5D TFVERT8gKi8KICAgICBib29sICAgICAgICBhbWNhbmluY2x1ZGU7CisgICAgLyogZG9lcyBBTSB1 c2UgbWFpbnRlbmFuY2Vfd29ya19tZW0/ICovCisgICAgYm9vbCAgICAgICAgYW11c2VtYWludGVu YW5jZXdvcmttZW07CisgICAgLyogT1Igb2YgcGFyYWxsZWwgdmFjdXVtIGZsYWdzICovCisgICAg dWludDggICAgICAgYW1wYXJhbGxlbHZhY3V1bW9wdGlvbnM7CiAgICAgLyogdHlwZSBvZiBkYXRh IHN0b3JlZCBpbiBpbmRleCwgb3IgSW52YWxpZE9pZCBpZiB2YXJpYWJsZSAqLwogICAgIE9pZCAg ICAgICAgIGFta2V5dHlwZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IGQ4OWFmNzg0NGQu LjJlOGY2N2VmMTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNp bmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgi CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAi cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCkBAIC0xMDEsNiArMTAyLDkgQEAgYnJpbmhhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtcHJlZGxvY2tzID0gZmFsc2U7CiAJYW1y b3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUg PSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3b3JrbWVtID0gZmFsc2U7CisJ YW1yb3V0aW5lLT5hbXBhcmFsbGVsdmFjdXVtb3B0aW9ucyA9CisJCVZBQ1VVTV9PUFRJT05fUEFS QUxMRUxfQ0xFQU5VUDsKIAlhbXJvdXRpbmUtPmFta2V5dHlwZSA9IEludmFsaWRPaWQ7CiAKIAlh bXJvdXRpbmUtPmFtYnVpbGQgPSBicmluYnVpbGQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCmlu ZGV4IDkxMGYwYmNiOTEuLmE3ZTU1Y2FmMjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBA IC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgor I2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvaW5kZXhmc20uaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKQEAg LTUzLDYgKzU0LDkgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+ YW1wcmVkbG9ja3MgPSB0cnVlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwog CWFtcm91dGluZS0+YW1jYW5pbmNsdWRlID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXVzZW1haW50 ZW5hbmNld29ya21lbSA9IHRydWU7CisJYW1yb3V0aW5lLT5hbXBhcmFsbGVsdmFjdXVtb3B0aW9u cyA9CisJCVZBQ1VVTV9PUFRJT05fUEFSQUxMRUxfQlVMS0RFTCB8IFZBQ1VVTV9PUFRJT05fUEFS QUxMRUxfQ0xFQU5VUDsKIAlhbXJvdXRpbmUtPmFta2V5dHlwZSA9IEludmFsaWRPaWQ7CiAKIAlh bXJvdXRpbmUtPmFtYnVpbGQgPSBnaW5idWlsZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCA1 YzlhZDM0MWIzLi5hZWZjMzAyZWQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCkBAIC0xNyw2ICsx Nyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vz cy9naXN0c2Nhbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi bm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCkBAIC03NCw2ICs3 NSw5IEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXByZWRs b2NrcyA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CiAJYW1yb3V0 aW5lLT5hbWNhbmluY2x1ZGUgPSB0cnVlOworCWFtcm91dGluZS0+YW11c2VtYWludGVuYW5jZXdv cmttZW0gPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtcGFyYWxsZWx2YWN1dW1vcHRpb25zID0KKwkJ VkFDVVVNX09QVElPTl9QQVJBTExFTF9CVUxLREVMIHwgVkFDVVVNX09QVElPTl9QQVJBTExFTF9D T05EX0NMRUFOVVA7CiAJYW1yb3V0aW5lLT5hbWtleXR5cGUgPSBJbnZhbGlkT2lkOwogCiAJYW1y b3V0aW5lLT5hbWJ1aWxkID0gZ2lzdGJ1aWxkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDRi YjZlZmM5OGYuLjQ4NzFiN2ZmNGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTcyLDYgKzcy LDkgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtcHJlZGxv Y2tzID0gdHJ1ZTsKIAlhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsKIAlhbXJvdXRp bmUtPmFtY2FuaW5jbHVkZSA9IGZhbHNlOworCWFtcm91dGluZS0+YW11c2VtYWludGVuYW5jZXdv cmttZW0gPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtcGFyYWxsZWx2YWN1dW1vcHRpb25zID0KKwkJ VkFDVVVNX09QVElPTl9QQVJBTExFTF9CVUxLREVMOwogCWFtcm91dGluZS0+YW1rZXl0eXBlID0g SU5UNE9JRDsKIAogCWFtcm91dGluZS0+YW1idWlsZCA9IGhhc2hidWlsZDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlZS5jCmluZGV4IDgzNzZhNWU2YjcuLjUyNTRiYzdlZjUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtMTIxLDYgKzEyMSw5IEBAIGJ0aGFuZGxlcihQR19GVU5D VElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1wcmVkbG9ja3MgPSB0cnVlOwogCWFtcm91dGluZS0+ YW1jYW5wYXJhbGxlbCA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUgPSB0cnVlOwor CWFtcm91dGluZS0+YW11c2VtYWludGVuYW5jZXdvcmttZW0gPSBmYWxzZTsKKwlhbXJvdXRpbmUt PmFtcGFyYWxsZWx2YWN1dW1vcHRpb25zID0KKwkJVkFDVVVNX09QVElPTl9QQVJBTExFTF9CVUxL REVMIHwgVkFDVVVNX09QVElPTl9QQVJBTExFTF9DT05EX0NMRUFOVVA7CiAJYW1yb3V0aW5lLT5h bWtleXR5cGUgPSBJbnZhbGlkT2lkOwogCiAJYW1yb3V0aW5lLT5hbWJ1aWxkID0gYnRidWlsZDsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCBkNzE1OTA4NzY0Li40OTI0YWUx YzU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC0yMiw2ICsyMiw3IEBA CiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfYW1vcC5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5o IgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pbmRleGZz bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgpAQCAtNTYsNiArNTcsOSBAQCBzcGdoYW5k bGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9IGZhbHNlOwog CWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5pbmNs dWRlID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNl OworCWFtcm91dGluZS0+YW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgPQorCQlWQUNVVU1fT1BUSU9O X1BBUkFMTEVMX0JVTEtERUwgfCBWQUNVVU1fT1BUSU9OX1BBUkFMTEVMX0NPTkRfQ0xFQU5VUDsK IAlhbXJvdXRpbmUtPmFta2V5dHlwZSA9IEludmFsaWRPaWQ7CiAKIAlhbXJvdXRpbmUtPmFtYnVp bGQgPSBzcGdidWlsZDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggZDJhNDllOGQzZS4uM2IzZTIyZjczZCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2FtYXBpLmgKQEAgLTE5Nyw2ICsxOTcsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhB bVJvdXRpbmUKIAlib29sCQlhbWNhbnBhcmFsbGVsOwogCS8qIGRvZXMgQU0gc3VwcG9ydCBjb2x1 bW5zIGluY2x1ZGVkIHdpdGggY2xhdXNlIElOQ0xVREU/ICovCiAJYm9vbAkJYW1jYW5pbmNsdWRl OworCS8qIGRvZXMgQU0gdXNlIG1haW50ZW5hbmNlX3dvcmtfbWVtPyAqLworCWJvb2wJCWFtdXNl bWFpbnRlbmFuY2V3b3JrbWVtOworCS8qIE9SIG9mIHBhcmFsbGVsIHZhY3V1bSBmbGFncy4gIFNl ZSB2YWN1dW0uaCBmb3IgZmxhZ3MuICovCisJdWludDgJCWFtcGFyYWxsZWx2YWN1dW1vcHRpb25z OwogCS8qIHR5cGUgb2YgZGF0YSBzdG9yZWQgaW4gaW5kZXgsIG9yIEludmFsaWRPaWQgaWYgdmFy aWFibGUgKi8KIAlPaWQJCQlhbWtleXR5cGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKaW5kZXggNWRj NDFkZDBjMS4uYjMzNTFhZDQwNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFj dXVtLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKQEAgLTIzLDYgKzIzLDQ0 IEBACiAjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUu aCIKIAorLyoKKyAqIEZsYWdzIGZvciBhbXBhcmFsbGVsdmFjdXVtb3B0aW9ucyB0byBjb250cm9s IHRoZSBwYXJ0aWNpcGF0aW9uIG9mIGJ1bGtkZWxldGUKKyAqIGFuZCB2YWN1dW1jbGVhbnVwIGlu IHBhcmFsbGVsIHZhY3V1bS4KKyAqLworCisvKgorICogQm90aCBidWxrZGVsZXRlIGFuZCB2YWN1 dW1jbGVhbnVwIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVGhpcyB3aWxsIGJlCisgKiB1c2Vk IGJ5IEluZGV4QU0ncyB0aGF0IGRvbid0IHdhbnQgdG8gb3IgY2Fubm90IHBhcnRpY2lwYXRlIGlu IHBhcmFsbGVsCisgKiB2YWN1dW0uICBGb3IgZXhhbXBsZSwgaWYgYW4gaW5kZXggQU0gZG9lc24n dCBoYXZlIGEgd2F5IHRvIGNvbW11bmljYXRlIHRoZQorICogaW5kZXggc3RhdGlzdGljcyBhbGxv Y2F0ZWQgYnkgdGhlIGZpcnN0IGFtYnVsa2RlbGV0ZSBjYWxsIHRvIHRoZSBzdWJzZXF1ZW50Cisg KiBvbmVzIHVudGlsIGFtdmFjdXVtY2xlYW51cCwgdGhlIGluZGV4IEFNIGNhbm5vdCBwYXJ0aWNp cGF0ZSBpbiBwYXJhbGxlbAorICogdmFjdXVtLgorICovCisjZGVmaW5lIFZBQ1VVTV9PUFRJT05f Tk9fUEFSQUxMRUwJCQkwCisKKy8qCisgKiBidWxrZGVsZXRlIGNhbiBiZSBwZXJmb3JtZWQgaW4g cGFyYWxsZWwuICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBieQorICogSW5kZXhBbSdzIHRoYXQg bmVlZCB0byBzY2FuIHRoZSBpbmRleCB0byBkZWxldGUgdGhlIHR1cGxlcy4KKyAqLworI2RlZmlu ZSBWQUNVVU1fT1BUSU9OX1BBUkFMTEVMX0JVTEtERUwJCSgxIDw8IDApCisKKy8qCisgKiB2YWN1 dW1jbGVhbnVwIGNhbiBiZSBwZXJmb3JtZWQgaW4gcGFyYWxsZWwgaWYgYnVsa2RlbGV0ZSBpcyBu b3QgcGVyZm9ybWVkCisgKiB5ZXQuICBUaGlzIHdpbGwgYmUgdXNlZCBieSBJbmRleEFNJ3MgdGhh dCBjYW4gc2NhbiB0aGUgaW5kZXggaWYgdGhlCisgKiBidWxrZGVsZXRlIGlzIG5vdCBwZXJmb3Jt ZWQuCisgKi8KKyNkZWZpbmUgVkFDVVVNX09QVElPTl9QQVJBTExFTF9DT05EX0NMRUFOVVAJKDEg PDwgMSkKKworLyoKKyAqIHZhY3V1bWNsZWFudXAgY2FuIGJlIHBlcmZvcm1lZCBpbiBwYXJhbGxl bCBldmVuIGlmIGJ1bGtkZWxldGUgaGFzIGFscmVhZHkKKyAqIHByb2Nlc3NlZCB0aGUgaW5kZXgu ICBUaGlzIHdpbGwgYmUgdXNlZCBieSBJbmRleEFNJ3MgdGhhdCBzY2FuIHRoZSBpbmRleAorICog ZHVyaW5nIHRoZSBjbGVhbnVwIHBoYXNlIG9mIGluZGV4IGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVy IHRoZSBpbmRleCBpcworICogYWxyZWFkeSBzY2FubmVkIG9yIG5vdCBkdXJpbmcgYnVsa2RlbGV0 ZSBwaGFzZS4KKyAqLworI2RlZmluZSBWQUNVVU1fT1BUSU9OX1BBUkFMTEVMX0NMRUFOVVAJCSgx IDw8IDIpCisKKy8qIHZhbHVlIGZvciBjaGVja2luZyB2YWN1dW0gZmxhZ3MgKi8KKyNkZWZpbmUg VkFDVVVNX09QVElPTl9NQVhfVkFMSURfVkFMVUUJCSgoMSA8PCAzKSAtIDEpCiAKIC8qLS0tLS0t LS0tLQogICogQU5BTFlaRSBidWlsZHMgb25lIG9mIHRoZXNlIHN0cnVjdHMgZm9yIGVhY2ggYXR0 cmlidXRlIChjb2x1bW4pIHRoYXQgaXMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVt bXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5k ZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwppbmRleCA4OThhYjA2NjM5Li5mMzI2MzIwODliIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBA IC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3JlbG9wdGlvbnMuaCIKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCisjaW5jbHVkZSAi Y29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCiAjaW5jbHVk ZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCkBAIC0yOTQsNiArMjk1LDgg QEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9 IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwogCWFtcm91dGluZS0+ YW1jYW5pbmNsdWRlID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21l bSA9IGZhbHNlOworCWFtcm91dGluZS0+YW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgPSBWQUNVVU1f T1BUSU9OX05PX1BBUkFMTEVMOwogCWFtcm91dGluZS0+YW1rZXl0eXBlID0gSW52YWxpZE9pZDsK IAogCWFtcm91dGluZS0+YW1idWlsZCA9IGRpYnVpbGQ7Ci0tIAoyLjE2LjIud2luZG93cy4xCgo= --000000000000a9643b059c18f087 Content-Type: application/octet-stream; name="v47-0002-Allow-vacuum-command-to-process-indexes-in-parallel.patch" Content-Disposition: attachment; filename="v47-0002-Allow-vacuum-command-to-process-indexes-in-parallel.patch" Content-Transfer-Encoding: base64 Content-ID: <f_k5dva6x21> X-Attachment-Id: f_k5dva6x21 RnJvbSBjMGVhNDdjOGY2MjM3NjZkZmNiZDc5MTdmMGQ1NGZiYjg0Zjc5NmNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IEthcGlsYSA8YWthcGlsYUBwb3N0Z3Jlc3FsLm9yZz4K RGF0ZTogVGh1LCA5IEphbiAyMDIwIDE1OjQ5OjQ2ICswNTMwClN1YmplY3Q6IFtQQVRDSCAyLzJd IEFsbG93IHZhY3V1bSBjb21tYW5kIHRvIHByb2Nlc3MgaW5kZXhlcyBpbiBwYXJhbGxlbC4KClRo aXMgZmVhdHVyZSBhbGxvd3MgdGhlIHZhY3V1bSB0byBsZXZlcmFnZSBtdWx0aXBsZSBDUFVzIGlu IG9yZGVyIHRvCnByb2Nlc3MgaW5kZXhlcy4gIFRoaXMgZW5hYmxlcyB1cyB0byBwZXJmb3JtIGlu ZGV4IHZhY3V1bWluZyBhbmQgaW5kZXgKY2xlYW51cCB3aXRoIGJhY2tncm91bmQgd29ya2Vycy4g IFRoaXMgYWRkcyBhIFBBUkFMTEVMIG9wdGlvbiB0byBWQUNVVU0KY29tbWFuZCB3aGVyZSB0aGUg dXNlciBjYW4gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIHdvcmtlcnMgdGhhdCBjYW4gYmUgdXNlZAp0 byBwZXJmb3JtIHRoZSBjb21tYW5kIHdoaWNoIGlzIGxpbWl0ZWQgYnkgdGhlIG51bWJlciBvZiBp bmRleGVzIG9uIGEKdGFibGUuICBTcGVjaWZ5aW5nIHplcm8gYXMgYSBudW1iZXIgb2Ygd29ya2Vy cyB3aWxsIGRpc2FibGUgcGFyYWxsZWxpc20uClRoaXMgb3B0aW9uIGNhbid0IGJlIHVzZWQgd2l0 aCB0aGUgRlVMTCBvcHRpb24uCgpFYWNoIGluZGV4IGlzIHByb2Nlc3NlZCBieSBhdCBtb3N0IG9u ZSB2YWN1dW0gcHJvY2Vzcy4gIFRoZXJlZm9yZSBwYXJhbGxlbAp2YWN1dW0gY2FuIGJlIHVzZWQg d2hlbiB0aGUgdGFibGUgaGFzIGF0IGxlYXN0IHR3byBpbmRleGVzLgoKVGhlIHBhcmFsbGVsIGRl Z3JlZSBpcyBlaXRoZXIgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIG9yIGRldGVybWluZWQgYmFzZWQg b24KdGhlIG51bWJlciBvZiBpbmRleGVzIHRoYXQgdGhlIHRhYmxlIGhhcywgYW5kIGZ1cnRoZXIg bGltaXRlZCBieQptYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2Vycy4gIFRoZSBpbmRleCBj YW4gcGFydGljaXBhdGUgaW4gcGFyYWxsZWwKdmFjdXVtIGlmZiBpdCdzIHNpemUgaXMgZ3JlYXRl ciB0aGFuIG1pbl9wYXJhbGxlbF9pbmRleF9zY2FuX3NpemUuCgpBdXRob3I6IE1hc2FoaWtvIFNh d2FkYSBhbmQgQW1pdCBLYXBpbGEKUmV2aWV3ZWQtYnk6IERpbGlwIEt1bWFyLCBBbWl0IEthcGls YSwgUm9iZXJ0IEhhYXMsIFRvbWFzIFZvbmRyYSwKTWFoZW5kcmEgU2luZ2ggYW5kIFNlcmdlaSBL b3JuaWxvdgpUZXN0ZWQtYnk6IE1haGVuZHJhIFNpbmdoIGFuZCBQcmFiaGF0IFNhaHUKRGlzY3Vz c2lvbjoKaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUQyMUFvRFRQTWd6U2tWNEUzU0ZvMUNIX3g1MGJm NVBxWkZRZjRqbXFqay1DMDNCV2dAbWFpbC5nbWFpbC5jb20KaHR0cHM6Ly9wb3N0Z3IuZXMvbS9D QUE0ZUsxSi1Wb1I5Z3pTNUU3NXBjRC1PSDBtRXlDZHA4UmloY3dLcmN1dzdKLVEwK3dAbWFpbC5n bWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgIHwgICAx OCArLQogZG9jL3NyYy9zZ21sL3JlZi92YWN1dW0uc2dtbCAgICAgICAgICB8ICAgNjEgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyAgfCAxMjY1ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwu YyB8ICAgMjYgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jICAgICAgICAgfCAgMTMz ICsrKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgfCAgICAyICsKIHNy Yy9iaW4vcHNxbC90YWItY29tcGxldGUuYyAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv cGFyYWxsZWwuaCAgICAgICAgIHwgICAgNCArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVt LmggICAgICAgICB8ICAgMTIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC92YWN1dW0ub3V0 ICB8ICAgMjggKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvdmFjdXVtLnNxbCAgICAgICB8ICAgMjcg Kwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICB8ICAgIDQgKwogMTMgZmls ZXMgY2hhbmdlZCwgMTQ0OSBpbnNlcnRpb25zKCspLCAxMzYgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s CmluZGV4IDVkMWM5MDI4MmYuLmJlYjNkNTk5YzkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9j b25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTIzMDgsMTMgKzIz MDgsMTMgQEAgaW5jbHVkZV9kaXIgJ2NvbmYuZCcKICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAg IDxwYXJhPgogICAgICAgICAgU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgd29y a2VycyB0aGF0IGNhbiBiZQotICAgICAgICAgc3RhcnRlZCBieSBhIHNpbmdsZSB1dGlsaXR5IGNv bW1hbmQuICBDdXJyZW50bHksIHRoZSBvbmx5Ci0gICAgICAgICBwYXJhbGxlbCB1dGlsaXR5IGNv bW1hbmQgdGhhdCBzdXBwb3J0cyB0aGUgdXNlIG9mIHBhcmFsbGVsCi0gICAgICAgICB3b3JrZXJz IGlzIDxjb21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFuZD4sIGFuZCBvbmx5IHdoZW4KLSAgICAg ICAgIGJ1aWxkaW5nIGEgQi10cmVlIGluZGV4LiAgUGFyYWxsZWwgd29ya2VycyBhcmUgdGFrZW4g ZnJvbSB0aGUKLSAgICAgICAgIHBvb2wgb2YgcHJvY2Vzc2VzIGVzdGFibGlzaGVkIGJ5IDx4cmVm Ci0gICAgICAgICBsaW5rZW5kPSJndWMtbWF4LXdvcmtlci1wcm9jZXNzZXMiLz4sIGxpbWl0ZWQg YnkgPHhyZWYKLSAgICAgICAgIGxpbmtlbmQ9Imd1Yy1tYXgtcGFyYWxsZWwtd29ya2VycyIvPi4g IE5vdGUgdGhhdCB0aGUgcmVxdWVzdGVkCisgICAgICAgICBzdGFydGVkIGJ5IGEgc2luZ2xlIHV0 aWxpdHkgY29tbWFuZC4gIEN1cnJlbnRseSwgdGhlIHBhcmFsbGVsCisgICAgICAgICB1dGlsaXR5 IGNvbW1hbmRzIHRoYXQgc3VwcG9ydCB0aGUgdXNlIG9mIHBhcmFsbGVsIHdvcmtlcnMgYXJlCisg ICAgICAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+IG9ubHkgd2hlbiBidWlsZGlu ZyBhIEItdHJlZSBpbmRleCwKKyAgICAgICAgIGFuZCA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+ IHdpdGhvdXQgPGxpdGVyYWw+RlVMTDwvbGl0ZXJhbD4KKyAgICAgICAgIG9wdGlvbi4gIFBhcmFs bGVsIHdvcmtlcnMgYXJlIHRha2VuIGZyb20gdGhlIHBvb2wgb2YgcHJvY2Vzc2VzCisgICAgICAg ICBlc3RhYmxpc2hlZCBieSA8eHJlZiBsaW5rZW5kPSJndWMtbWF4LXdvcmtlci1wcm9jZXNzZXMi Lz4sIGxpbWl0ZWQKKyAgICAgICAgIGJ5IDx4cmVmIGxpbmtlbmQ9Imd1Yy1tYXgtcGFyYWxsZWwt d29ya2VycyIvPi4gIE5vdGUgdGhhdCB0aGUgcmVxdWVzdGVkCiAgICAgICAgICBudW1iZXIgb2Yg d29ya2VycyBtYXkgbm90IGFjdHVhbGx5IGJlIGF2YWlsYWJsZSBhdCBydW4gdGltZS4KICAgICAg ICAgIElmIHRoaXMgb2NjdXJzLCB0aGUgdXRpbGl0eSBvcGVyYXRpb24gd2lsbCBydW4gd2l0aCBm ZXdlcgogICAgICAgICAgd29ya2VycyB0aGFuIGV4cGVjdGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUg aXMgMi4gIFNldHRpbmcgdGhpcwpAQCAtNDg5NSw3ICs0ODk1LDkgQEAgQU5ZIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxl IGNsYXNzPSIKICAgICAgICAgZm9yIGEgcGFyYWxsZWwgc2NhbiB0byBiZSBjb25zaWRlcmVkLiAg Tm90ZSB0aGF0IGEgcGFyYWxsZWwgaW5kZXggc2NhbgogICAgICAgICB0eXBpY2FsbHkgd29uJ3Qg dG91Y2ggdGhlIGVudGlyZSBpbmRleDsgaXQgaXMgdGhlIG51bWJlciBvZiBwYWdlcwogICAgICAg ICB3aGljaCB0aGUgcGxhbm5lciBiZWxpZXZlcyB3aWxsIGFjdHVhbGx5IGJlIHRvdWNoZWQgYnkg dGhlIHNjYW4gd2hpY2gKLSAgICAgICAgaXMgcmVsZXZhbnQuCisgICAgICAgIGlzIHJlbGV2YW50 LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYWxzbyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIGEKKyAgICAg ICAgcGFydGljdWxhciBpbmRleCBjYW4gcGFydGljaXBhdGUgaW4gYSBwYXJhbGxlbCB2YWN1dW0u ICBTZWUKKyAgICAgICAgPHhyZWYgbGlua2VuZD0ic3FsLXZhY3V1bSIvPi4KICAgICAgICAgSWYg dGhpcyB2YWx1ZSBpcyBzcGVjaWZpZWQgd2l0aG91dCB1bml0cywgaXQgaXMgdGFrZW4gYXMgYmxv Y2tzLAogICAgICAgICB0aGF0IGlzIDxzeW1ib2w+QkxDS1NaPC9zeW1ib2w+IGJ5dGVzLCB0eXBp Y2FsbHkgOGtCLgogICAgICAgICBUaGUgZGVmYXVsdCBpcyA1MTIga2lsb2J5dGVzICg8bGl0ZXJh bD41MTJrQjwvbGl0ZXJhbD4pLgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi92YWN1dW0u c2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvdmFjdXVtLnNnbWwKaW5kZXggZjliMGZiODc5NC4uODQ2 MDU2YTM1MyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi92YWN1dW0uc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvcmVmL3ZhY3V1bS5zZ21sCkBAIC0zNCw2ICszNCw3IEBAIFZBQ1VVTSBbIEZV TEwgXSBbIEZSRUVaRSBdIFsgVkVSQk9TRSBdIFsgQU5BTFlaRSBdIFsgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0CiAgICAgU0tJUF9MT0NLRUQgWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFibGU+IF0KICAgICBJTkRFWF9DTEVBTlVQIFsgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmJvb2xlYW48L3JlcGxhY2VhYmxlPiBdCiAgICAgVFJV TkNBVEUgWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFi bGU+IF0KKyAgICBQQVJBTExFTCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW50ZWdl cjwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj50YWJsZV9hbmRfY29sdW1uczwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgogCkBAIC03 NSwxMCArNzYsMTQgQEAgVkFDVVVNIFsgRlVMTCBdIFsgRlJFRVpFIF0gWyBWRVJCT1NFIF0gWyBB TkFMWVpFIF0gWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXQKICAgIHdpdGggbm9ybWFsIHJl YWRpbmcgYW5kIHdyaXRpbmcgb2YgdGhlIHRhYmxlLCBhcyBhbiBleGNsdXNpdmUgbG9jawogICAg aXMgbm90IG9idGFpbmVkLiAgSG93ZXZlciwgZXh0cmEgc3BhY2UgaXMgbm90IHJldHVybmVkIHRv IHRoZSBvcGVyYXRpbmcKICAgIHN5c3RlbSAoaW4gbW9zdCBjYXNlcyk7IGl0J3MganVzdCBrZXB0 IGF2YWlsYWJsZSBmb3IgcmUtdXNlIHdpdGhpbiB0aGUKLSAgIHNhbWUgdGFibGUuICA8Y29tbWFu ZD5WQUNVVU0gRlVMTDwvY29tbWFuZD4gcmV3cml0ZXMgdGhlIGVudGlyZSBjb250ZW50cwotICAg b2YgdGhlIHRhYmxlIGludG8gYSBuZXcgZGlzayBmaWxlIHdpdGggbm8gZXh0cmEgc3BhY2UsIGFs bG93aW5nIHVudXNlZAotICAgc3BhY2UgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIG9wZXJhdGluZyBz eXN0ZW0uICBUaGlzIGZvcm0gaXMgbXVjaCBzbG93ZXIgYW5kCi0gICByZXF1aXJlcyBhbiBleGNs dXNpdmUgbG9jayBvbiBlYWNoIHRhYmxlIHdoaWxlIGl0IGlzIGJlaW5nIHByb2Nlc3NlZC4KKyAg IHNhbWUgdGFibGUuICBJdCBhbHNvIGFsbG93cyB1cyB0byBsZXZlcmFnZSBtdWx0aXBsZSBDUFVz IGluIG9yZGVyIHRvIHByb2Nlc3MKKyAgIGluZGV4ZXMuICBUaGlzIGZlYXR1cmUgaXMga25vd24g YXMgPGZpcnN0dGVybT5wYXJhbGxlbCB2YWN1dW08L2ZpcnN0dGVybT4uCisgICBUbyBkaXNhYmxl IHRoaXMgZmVhdHVyZSwgb25lIGNhbiB1c2UgPGxpdGVyYWw+UEFSQUxMRUw8L2xpdGVyYWw+IG9w dGlvbiBhbmQKKyAgIHNwZWNpZnkgcGFyYWxsZWwgd29ya2VycyBhcyB6ZXJvLiAgPGNvbW1hbmQ+ VkFDVVVNIEZVTEw8L2NvbW1hbmQ+IHJld3JpdGVzCisgICB0aGUgZW50aXJlIGNvbnRlbnRzIG9m IHRoZSB0YWJsZSBpbnRvIGEgbmV3IGRpc2sgZmlsZSB3aXRoIG5vIGV4dHJhIHNwYWNlLAorICAg YWxsb3dpbmcgdW51c2VkIHNwYWNlIHRvIGJlIHJldHVybmVkIHRvIHRoZSBvcGVyYXRpbmcgc3lz dGVtLiAgVGhpcyBmb3JtIGlzCisgICBtdWNoIHNsb3dlciBhbmQgcmVxdWlyZXMgYW4gZXhjbHVz aXZlIGxvY2sgb24gZWFjaCB0YWJsZSB3aGlsZSBpdCBpcyBiZWluZworICAgcHJvY2Vzc2VkLgog ICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0yMjMsNiArMjI4LDMzIEBAIFZBQ1VVTSBbIEZVTEwg XSBbIEZSRUVaRSBdIFsgVkVSQk9TRSBdIFsgQU5BTFlaRSBdIFsgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8dmFy bGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPlBBUkFMTEVMPC9saXRlcmFsPjwvdGVybT4K KyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUGVyZm9ybSB2YWN1dW0gaW5kZXgg YW5kIGNsZWFudXAgaW5kZXggcGhhc2VzIG9mIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4KKyAg ICAgIGluIHBhcmFsbGVsIHVzaW5nIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbnRl Z2VyPC9yZXBsYWNlYWJsZT4KKyAgICAgIGJhY2tncm91bmQgd29ya2VycyAoZm9yIHRoZSBkZXRh aWwgb2YgZWFjaCB2YWN1dW0gcGhhc2VzLCBwbGVhc2UKKyAgICAgIHJlZmVyIHRvIDx4cmVmIGxp bmtlbmQ9InZhY3V1bS1waGFzZXMiLz4pLiAgSWYgdGhlCisgICAgICA8bGl0ZXJhbD5QQVJBTExF TDwvbGl0ZXJhbD4gb3B0aW9uIGlzIG9taXR0ZWQsIHRoZW4KKyAgICAgIDxjb21tYW5kPlZBQ1VV TTwvY29tbWFuZD4gZGVjaWRlcyB0aGUgbnVtYmVyIG9mIHdvcmtlcnMgYmFzZWQgb24gbnVtYmVy CisgICAgICBvZiBpbmRleGVzIHRoYXQgc3VwcG9ydCBwYXJhbGxlbCB2YWN1dW0gb3BlcmF0aW9u IG9uIHRoZSByZWxhdGlvbiB3aGljaAorICAgICAgaXMgZnVydGhlciBsaW1pdGVkIGJ5IDx4cmVm IGxpbmtlbmQ9Imd1Yy1tYXgtcGFyYWxsZWwtd29ya2Vycy1tYWludGVuYW5jZSIvPi4KKyAgICAg IFRoZSBpbmRleCBjYW4gcGFydGljaXBhdGUgaW4gYSBwYXJhbGxlbCB2YWN1dW0gaWYgYW5kIG9u bHkgaWYgdGhlIHNpemUKKyAgICAgIG9mIHRoZSBpbmRleCBpcyBtb3JlIHRoYW4gPHhyZWYgbGlu a2VuZD0iZ3VjLW1pbi1wYXJhbGxlbC1pbmRleC1zY2FuLXNpemUiLz4uCisgICAgICBQbGVhc2Ug bm90ZSB0aGF0IGl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXQgdGhlIG51bWJlciBvZiBwYXJhbGxl bCB3b3JrZXJzCisgICAgICBzcGVjaWZpZWQgaW4gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmludGVnZXI8L3JlcGxhY2VhYmxlPiB3aWxsCisgICAgICBiZSB1c2VkIGR1cmluZyBleGVj dXRpb24uICBJdCBpcyBwb3NzaWJsZSBmb3IgYSB2YWN1dW0gdG8gcnVuIHdpdGggZmV3ZXIKKyAg ICAgIHdvcmtlcnMgdGhhbiBzcGVjaWZpZWQsIG9yIGV2ZW4gd2l0aCBubyB3b3JrZXJzIGF0IGFs bC4gIE9ubHkgb25lIHdvcmtlcgorICAgICAgY2FuIGJlIHVzZWQgcGVyIGluZGV4LiAgU28gcGFy YWxsZWwgd29ya2VycyBhcmUgbGF1bmNoZWQgb25seSB3aGVuIHRoZXJlCisgICAgICBhcmUgYXQg bGVhc3QgPGxpdGVyYWw+MjwvbGl0ZXJhbD4gaW5kZXhlcyBpbiB0aGUgdGFibGUuICBXb3JrZXJz IGZvcgorICAgICAgdmFjdXVtIGxhdW5jaGVzIGJlZm9yZSBzdGFydGluZyBlYWNoIHBoYXNlIGFu ZCBleGl0IGF0IHRoZSBlbmQgb2YKKyAgICAgIHRoZSBwaGFzZS4gIFRoZXNlIGJlaGF2aW9ycyBt aWdodCBjaGFuZ2UgaW4gYSBmdXR1cmUgcmVsZWFzZS4gIFRoaXMKKyAgICAgIG9wdGlvbiBjYW4n dCBiZSB1c2VkIHdpdGggdGhlIDxsaXRlcmFsPkZVTEw8L2xpdGVyYWw+IG9wdGlvbi4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgPHZhcmxp c3RlbnRyeT4KICAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVh bjwvcmVwbGFjZWFibGU+PC90ZXJtPgogICAgIDxsaXN0aXRlbT4KQEAgLTIzNyw2ICsyNjksMTUg QEAgVkFDVVVNIFsgRlVMTCBdIFsgRlJFRVpFIF0gWyBWRVJCT1NFIF0gWyBBTkFMWVpFIF0gWyA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXQKICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0 ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmludGVnZXI8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+ CisgICAgIDxwYXJhPgorICAgICAgU3BlY2lmaWVzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFs dWUgcGFzc2VkIHRvIHRoZSBzZWxlY3RlZCBvcHRpb24uCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRl cm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxl PjwvdGVybT4KICAgICA8bGlzdGl0ZW0+CkBAIC0zMTYsMTEgKzM1NywxOSBAQCBWQUNVVU0gWyBG VUxMIF0gWyBGUkVFWkUgXSBbIFZFUkJPU0UgXSBbIEFOQUxZWkUgXSBbIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldAogICAgIG1vcmUgdGhhbiBhIHBsYWluIDxjb21tYW5kPlZBQ1VVTTwvY29t bWFuZD4gd291bGQuCiAgICA8L3BhcmE+CiAKKyAgIDxwYXJhPgorICAgICBUaGUgPG9wdGlvbj5Q QVJBTExFTDwvb3B0aW9uPiBvcHRpb24gaXMgdXNlZCBvbmx5IGZvciB2YWN1dW0gcHVycG9zZS4K KyAgICAgRXZlbiBpZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgd2l0aCA8b3B0aW9uPkFOQUxZ WkU8L29wdGlvbj4gb3B0aW9uCisgICAgIGl0IGRvZXMgbm90IGFmZmVjdCA8b3B0aW9uPkFOQUxZ WkU8L29wdGlvbj4uCisgICA8L3BhcmE+CisKICAgIDxwYXJhPgogICAgIDxjb21tYW5kPlZBQ1VV TTwvY29tbWFuZD4gY2F1c2VzIGEgc3Vic3RhbnRpYWwgaW5jcmVhc2UgaW4gSS9PIHRyYWZmaWMs CiAgICAgd2hpY2ggbWlnaHQgY2F1c2UgcG9vciBwZXJmb3JtYW5jZSBmb3Igb3RoZXIgYWN0aXZl IHNlc3Npb25zLiAgVGhlcmVmb3JlLAotICAgIGl0IGlzIHNvbWV0aW1lcyBhZHZpc2FibGUgdG8g dXNlIHRoZSBjb3N0LWJhc2VkIHZhY3V1bSBkZWxheSBmZWF0dXJlLgotICAgIFNlZSA8eHJlZiBs aW5rZW5kPSJydW50aW1lLWNvbmZpZy1yZXNvdXJjZS12YWN1dW0tY29zdCIvPiBmb3IgZGV0YWls cy4KKyAgICBpdCBpcyBzb21ldGltZXMgYWR2aXNhYmxlIHRvIHVzZSB0aGUgY29zdC1iYXNlZCB2 YWN1dW0gZGVsYXkgZmVhdHVyZS4gIEZvcgorICAgIHBhcmFsbGVsIHZhY3V1bSwgZWFjaCB3b3Jr ZXIgc2xlZXBzIHByb3BvcnRpb25hbCB0byB0aGUgd29yayBkb25lIGJ5IHRoYXQKKyAgICB3b3Jr ZXIuICBTZWUgPHhyZWYgbGlua2VuZD0icnVudGltZS1jb25maWctcmVzb3VyY2UtdmFjdXVtLWNv c3QiLz4gZm9yCisgICAgZGV0YWlscy4KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKaW5kZXggYTVmZTkwNDg1Zi4uZDJjODk1YTZmYiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMjIsNiArMjIsMjAgQEAKICAqIG9m IGluZGV4IHNjYW5zIHBlcmZvcm1lZC4gIFNvIHdlIGRvbid0IHVzZSBtYWludGVuYW5jZV93b3Jr X21lbSBtZW1vcnkgZm9yCiAgKiB0aGUgVElEIGFycmF5LCBqdXN0IGVub3VnaCB0byBob2xkIGFz IG1hbnkgaGVhcCB0dXBsZXMgYXMgZml0IG9uIG9uZSBwYWdlLgogICoKKyAqIExhenkgdmFjdXVt IHN1cHBvcnRzIHBhcmFsbGVsIGV4ZWN1dGlvbiB3aXRoIHBhcmFsbGVsIHdvcmtlciBwcm9jZXNz ZXMuICBJbgorICogYSBwYXJhbGxlbCBsYXp5IHZhY3V1bSwgd2UgcGVyZm9ybSBib3RoIGluZGV4 IHZhY3V1bSBhbmQgaW5kZXggY2xlYW51cCB3aXRoCisgKiBwYXJhbGxlbCB3b3JrZXIgcHJvY2Vz c2VzLiAgSW5kaXZpZHVhbCBpbmRleGVzIGFyZSBwcm9jZXNzZWQgYnkgb25lIHZhY3V1bQorICog cHJvY2Vzcy4gIEF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsYXp5IHZhY3V1bSAoYXQgbGF6eV9zY2Fu X2hlYXApIHdlIHByZXBhcmUKKyAqIHRoZSBwYXJhbGxlbCBjb250ZXh0IGFuZCBpbml0aWFsaXpl IHRoZSBEU00gc2VnbWVudCB0aGF0IGNvbnRhaW5zIHNoYXJlZAorICogaW5mb3JtYXRpb24gYXMg d2VsbCBhcyB0aGUgbWVtb3J5IHNwYWNlIGZvciBzdG9yaW5nIGRlYWQgdHVwbGVzLiAgV2hlbgor ICogc3RhcnRpbmcgZWl0aGVyIGluZGV4IHZhY3V1bSBvciBpbmRleCBjbGVhbnVwLCB3ZSBsYXVu Y2ggcGFyYWxsZWwgd29ya2VyCisgKiBwcm9jZXNzZXMuICBPbmNlIGFsbCBpbmRleGVzIGFyZSBw cm9jZXNzZWQgdGhlIHBhcmFsbGVsIHdvcmtlciBwcm9jZXNzZXMKKyAqIGV4aXQuICBBZnRlciB0 aGF0LCB0aGUgbGVhZGVyIHByb2Nlc3MgcmUtaW5pdGlhbGl6ZXMgdGhlIHBhcmFsbGVsIGNvbnRl eHQKKyAqIHNvIHRoYXQgaXQgY2FuIHVzZSB0aGUgc2FtZSBEU00gZm9yIG11bHRpcGxlIHBhc3Nl cyBvZiBpbmRleCB2YWN1dW0gYW5kCisgKiBmb3IgcGVyZm9ybWluZyBpbmRleCBjbGVhbnVwLiAg Rm9yIHVwZGF0aW5nIHRoZSBpbmRleCBzdGF0aXN0aWNzLCB3ZSBuZWVkCisgKiB0byB1cGRhdGUg dGhlIHN5c3RlbSB0YWJsZSBhbmQgc2luY2UgdXBkYXRlcyBhcmUgbm90IGFsbG93ZWQgZHVyaW5n CisgKiBwYXJhbGxlbCBtb2RlIHdlIHVwZGF0ZSB0aGUgaW5kZXggc3RhdGlzdGljcyBhZnRlciBl eGl0aW5nIGZyb20gdGhlCisgKiBwYXJhbGxlbCBtb2RlLgogICoKICAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDIwLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAog ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEKQEAgLTM2LDI1ICs1MCwzMCBAQAogCiAjaW5jbHVkZSA8bWF0aC5oPgog CisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAj aW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW1feGxvZy5o IgogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvbXVs dGl4YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgorI2luY2x1ZGUg ImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNsdWRlICJjYXRh bG9nL3N0b3JhZ2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kYmNvbW1hbmRzLmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0YWJpbGl0eS9pbnN0cl90aW1lLmgiCiAjaW5j bHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL2ZyZWVzcGFjZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1n ci5oIgorI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX3J1 c2FnZS5oIgpAQCAtMTEwLDYgKzEyOSwxNDIgQEAKICAqLwogI2RlZmluZSBQUkVGRVRDSF9TSVpF CQkJKChCbG9ja051bWJlcikgMzIpCiAKKy8qCisgKiBEU00ga2V5cyBmb3IgcGFyYWxsZWwgbGF6 eSB2YWN1dW0uICBVbmxpa2Ugb3RoZXIgcGFyYWxsZWwgZXhlY3V0aW9uIGNvZGUsCisgKiBzaW5j ZSB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IERTTSBrZXlzIGNvbmZsaWN0aW5nIHdpdGgg cGxhbl9ub2RlX2lkCisgKiB3ZSBjYW4gdXNlIHNtYWxsIGludGVnZXJzLgorICovCisjZGVmaW5l IFBBUkFMTEVMX1ZBQ1VVTV9LRVlfU0hBUkVECQkJMQorI2RlZmluZSBQQVJBTExFTF9WQUNVVU1f S0VZX0RFQURfVFVQTEVTCQkyCisjZGVmaW5lIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfUVVFUllfVEVY VAkJMworCisvKgorICogTWFjcm8gdG8gY2hlY2sgaWYgd2UgYXJlIGluIGEgcGFyYWxsZWwgbGF6 eSB2YWN1dW0uICBJZiB0cnVlLCB3ZSBhcmUKKyAqIGluIHRoZSBwYXJhbGxlbCBtb2RlIGFuZCB0 aGUgRFNNIHNlZ21lbnQgaXMgaW5pdGlhbGl6ZWQuCisgKi8KKyNkZWZpbmUgUGFyYWxsZWxWYWN1 dW1Jc0FjdGl2ZShscHMpICgoKExWUGFyYWxsZWxTdGF0ZSAqKSAobHBzKSkgIT0gTlVMTCkKKwor LyoKKyAqIExWRGVhZFR1cGxlcyBzdG9yZXMgdGhlIGRlYWQgdHVwbGUgVElEcyBjb2xsZWN0ZWQg ZHVyaW5nIHRoZSBoZWFwIHNjYW4uCisgKiBUaGlzIGlzIGFsbG9jYXRlZCBpbiB0aGUgRFNNIHNl Z21lbnQgaW4gcGFyYWxsZWwgbW9kZSBhbmQgaW4gbG9jYWwgbWVtb3J5CisgKiBpbiBub24tcGFy YWxsZWwgbW9kZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTFZEZWFkVHVwbGVzCit7CisJaW50CQkJ bWF4X3R1cGxlczsJCS8qICMgc2xvdHMgYWxsb2NhdGVkIGluIGFycmF5ICovCisJaW50CQkJbnVt X3R1cGxlczsJCS8qIGN1cnJlbnQgIyBvZiBlbnRyaWVzICovCisJLyogTGlzdCBvZiBUSURzIG9m IHR1cGxlcyB3ZSBpbnRlbmQgdG8gZGVsZXRlICovCisJLyogTkI6IHRoaXMgbGlzdCBpcyBvcmRl cmVkIGJ5IFRJRCBhZGRyZXNzICovCisJSXRlbVBvaW50ZXJEYXRhIGl0ZW1wdHJzW0ZMRVhJQkxF X0FSUkFZX01FTUJFUl07CS8qIGFycmF5IG9mCisJCQkJCQkJCQkJCQkJCSAqIEl0ZW1Qb2ludGVy RGF0YSAqLworfSBMVkRlYWRUdXBsZXM7CisKKyNkZWZpbmUgU2l6ZU9mTFZEZWFkVHVwbGVzKGNu dCkgXAorCQlhZGRfc2l6ZSgob2Zmc2V0b2YoTFZEZWFkVHVwbGVzLCBpdGVtcHRycykpLCBcCisJ CQkJIG11bF9zaXplKHNpemVvZihJdGVtUG9pbnRlckRhdGEpLCBjbnQpKQorCisvKgorICogU2hh cmVkIGluZm9ybWF0aW9uIGFtb25nIHBhcmFsbGVsIHdvcmtlcnMuICBTbyB0aGlzIGlzIGFsbG9j YXRlZCBpbiB0aGUgRFNNCisgKiBzZWdtZW50LgorICovCit0eXBlZGVmIHN0cnVjdCBMVlNoYXJl ZAoreworCS8qCisJICogVGFyZ2V0IHRhYmxlIHJlbGlkIGFuZCBsb2cgbGV2ZWwuICBUaGVzZSBm aWVsZHMgYXJlIG5vdCBtb2RpZmllZCBkdXJpbmcKKwkgKiB0aGUgbGF6eSB2YWN1dW0uCisJICov CisJT2lkCQkJcmVsaWQ7CisJaW50CQkJZWxldmVsOworCisJLyoKKwkgKiBBbiBpbmRpY2F0aW9u IGZvciB2YWN1dW0gd29ya2VycyB0byBwZXJmb3JtIGVpdGhlciBpbmRleCB2YWN1dW0gb3IKKwkg KiBpbmRleCBjbGVhbnVwLiAgZmlyc3RfdGltZSBpcyB0cnVlIG9ubHkgaWYgZm9yX2NsZWFudXAg aXMgdHJ1ZSBhbmQKKwkgKiBidWxrLWRlbGV0aW9uIGlzIG5vdCBwZXJmb3JtZWQgeWV0LgorCSAq LworCWJvb2wJCWZvcl9jbGVhbnVwOworCWJvb2wJCWZpcnN0X3RpbWU7CisKKwkvKgorCSAqIEZp ZWxkcyBmb3IgYm90aCBpbmRleCB2YWN1dW0gYW5kIGNsZWFudXAuCisJICoKKwkgKiByZWx0dXBs ZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBpbnB1dCBoZWFwIHR1cGxlcy4gIFdlIHNldCBlaXRo ZXIgb2xkCisJICogbGl2ZSB0dXBsZXMgaW4gdGhlIGluZGV4IHZhY3V1bSBjYXNlIG9yIHRoZSBu ZXcgbGl2ZSB0dXBsZXMgaW4gdGhlCisJICogaW5kZXggY2xlYW51cCBjYXNlLgorCSAqCisJICog ZXN0aW1hdGVkX2NvdW50IGlzIHRydWUgaWYgdGhlIHJlbHR1cGxlcyBpcyBhbiBlc3RpbWF0ZWQg dmFsdWUuCisJICovCisJZG91YmxlCQlyZWx0dXBsZXM7CisJYm9vbAkJZXN0aW1hdGVkX2NvdW50 OworCisJLyoKKwkgKiBJbiBzaW5nbGUgcHJvY2VzcyBsYXp5IHZhY3V1bSB3ZSBjb3VsZCBjb25z dW1lIG1vcmUgbWVtb3J5IGR1cmluZyBpbmRleAorCSAqIHZhY3V1bWluZyBvciBjbGVhbnVwIGFw YXJ0IGZyb20gdGhlIG1lbW9yeSBmb3IgaGVhcCBzY2FubmluZy4gSW4KKwkgKiBwYXJhbGxlbCBp bmRleCB2YWN1dW0sIHNpbmNlIGluZGl2aWR1YWwgdmFjdXVtIHdvcmtlcnMgY2FuIGNvbnN1bWUK KwkgKiBtZW1vcnkgZXF1YWwgdG8gbWFpbnRlbmFuY2Vfd29ya19tZW0sIHRoZSBuZXcgbWFpbnRl bmFuY2Vfd29ya19tZW0gZm9yCisJICogZWFjaCB3b3JrZXIgaXMgc2V0IHN1Y2ggdGhhdCB0aGUg cGFyYWxsZWwgb3BlcmF0aW9uIGRvZXNuJ3QgY29uc3VtZQorCSAqIG1vcmUgbWVtb3J5IHRoYW4g c2luZ2xlIHByb2Nlc3MgbGF6eSB2YWN1dW0uCisJICovCisJaW50CQkJbWFpbnRlbmFuY2Vfd29y a19tZW1fd29ya2VyOworCisJLyoKKwkgKiBTaGFyZWQgdmFjdXVtIGNvc3QgYmFsYW5jZS4gIER1 cmluZyBwYXJhbGxlbCBpbmRleCB2YWN1dW1pbmcKKwkgKiBWYWN1dW1TaGFyZWRDb3N0QmFsYW5j ZSBwb2ludHMgdG8gdGhpcyB2YWx1ZSBhbmQgaXQgYWNjdW11bGF0ZXMgdGhlCisJICogYmFsYW5j ZSBvZiBlYWNoIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXIuCisJICovCisJcGdfYXRvbWljX3VpbnQz MiBjb3N0X2JhbGFuY2U7CisKKwkvKgorCSAqIE51bWJlciBvZiBhY3RpdmUgcGFyYWxsZWwgd29y a2Vycy4gIFRoaXMgaXMgdXNlZCBmb3IgY29tcHV0aW5nIHRoZQorCSAqIG1pbmltdW0gdGhyZXNo b2xkIG9mIHRoZSB2YWN1dW0gY29zdCBiYWxhbmNlIGZvciBhIHdvcmtlciB0byBnbyBmb3IgdGhl CisJICogZGVsYXkuCisJICovCisJcGdfYXRvbWljX3VpbnQzMiBhY3RpdmVfbndvcmtlcnM7CisK KwkvKgorCSAqIFZhcmlhYmxlcyB0byBjb250cm9sIHBhcmFsbGVsIGluZGV4IHZhY3V1bWluZy4g IFdlIGhhdmUgYSBiaXRtYXAgdG8KKwkgKiBpbmRpY2F0ZSB3aGljaCBpbmRleCBoYXMgc3RhdHMg aW4gc2hhcmVkIG1lbW9yeS4gIFRoZSBzZXQgYml0IGluIHRoZQorCSAqIG1hcCBpbmRpY2F0ZXMg dGhhdCB0aGUgcGFydGljdWxhciBpbmRleCBzdXBwb3J0cyBhIHBhcmFsbGVsIHZhY3V1bS4KKwkg Ki8KKwlwZ19hdG9taWNfdWludDMyIGlkeDsJCS8qIGNvdW50ZXIgZm9yIHZhY3V1bWluZyBhbmQg Y2xlYW4gdXAgKi8KKwl1aW50MzIJCW9mZnNldDsJCQkvKiBzaXplb2YgaGVhZGVyIGluY2wuIGJp dG1hcCAqLworCWJpdHM4CQliaXRtYXBbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsJLyogYml0IG1h cCBvZiBOVUxMcyAqLworCisJLyogU2hhcmVkIGluZGV4IHN0YXRpc3RpY3MgZGF0YSBmb2xsb3dz IGF0IGVuZCBvZiBzdHJ1Y3QgKi8KK30gTFZTaGFyZWQ7CisKKyNkZWZpbmUgU2l6ZU9mTFZTaGFy ZWQgKG9mZnNldG9mKExWU2hhcmVkLCBiaXRtYXApICsgc2l6ZW9mKGJpdHM4KSkKKyNkZWZpbmUg R2V0U2hhcmVkSW5kU3RhdHMocykgXAorCSgoTFZTaGFyZWRJbmRTdGF0cyAqKSgoY2hhciAqKShz KSArICgoTFZTaGFyZWQgKikocykpLT5vZmZzZXQpKQorI2RlZmluZSBJbmRTdGF0c0lzTnVsbChz LCBpKSBcCisJKCEoKChMVlNoYXJlZCAqKShzKSktPmJpdG1hcFsoaSkgPj4gM10gJiAoMSA8PCAo KGkpICYgMHgwNykpKSkKKworLyoKKyAqIFN0cnVjdCBmb3IgYW4gaW5kZXggYnVsay1kZWxldGlv biBzdGF0aXN0aWMgdXNlZCBmb3IgcGFyYWxsZWwgbGF6eQorICogdmFjdXVtLiAgVGhpcyBpcyBh bGxvY2F0ZWQgaW4gdGhlIERTTSBzZWdtZW50LgorICovCit0eXBlZGVmIHN0cnVjdCBMVlNoYXJl ZEluZFN0YXRzCit7CisJYm9vbAkJdXBkYXRlZDsJCS8qIGFyZSB0aGUgc3RhdHMgdXBkYXRlZD8g Ki8KKwlJbmRleEJ1bGtEZWxldGVSZXN1bHQgc3RhdHM7Cit9IExWU2hhcmVkSW5kU3RhdHM7CisK Ky8qIFN0cnVjdCBmb3IgbWFpbnRhaW5pbmcgYSBwYXJhbGxlbCB2YWN1dW0gc3RhdGUuICovCit0 eXBlZGVmIHN0cnVjdCBMVlBhcmFsbGVsU3RhdGUKK3sKKwlQYXJhbGxlbENvbnRleHQgKnBjeHQ7 CisKKwkvKiBTaGFyZWQgaW5mb3JtYXRpb24gYW1vbmcgcGFyYWxsZWwgdmFjdXVtIHdvcmtlcnMg Ki8KKwlMVlNoYXJlZCAgICpsdnNoYXJlZDsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBpbmRl eGVzIHRoYXQgc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBidWxrLWRlbGV0aW9uIGFuZAorCSAqIHBh cmFsbGVsIGluZGV4IGNsZWFudXAgcmVzcGVjdGl2ZWx5LgorCSAqLworCWludAkJCW5pbmRleGVz X3BhcmFsbGVsX2J1bGtkZWw7CisJaW50CQkJbmluZGV4ZXNfcGFyYWxsZWxfY2xlYW51cDsKKwlp bnQJCQluaW5kZXhlc19wYXJhbGxlbF9jb25kY2xlYW51cDsKK30gTFZQYXJhbGxlbFN0YXRlOwor CiB0eXBlZGVmIHN0cnVjdCBMVlJlbFN0YXRzCiB7CiAJLyogdXNlaW5kZXggPSB0cnVlIG1lYW5z IHR3by1wYXNzIHN0cmF0ZWd5OyBmYWxzZSBtZWFucyBvbmUtcGFzcyAqLwpAQCAtMTI4LDExICsy ODMsNyBAQCB0eXBlZGVmIHN0cnVjdCBMVlJlbFN0YXRzCiAJQmxvY2tOdW1iZXIgcGFnZXNfcmVt b3ZlZDsKIAlkb3VibGUJCXR1cGxlc19kZWxldGVkOwogCUJsb2NrTnVtYmVyIG5vbmVtcHR5X3Bh Z2VzOyAvKiBhY3R1YWxseSwgbGFzdCBub25lbXB0eSBwYWdlICsgMSAqLwotCS8qIExpc3Qgb2Yg VElEcyBvZiB0dXBsZXMgd2UgaW50ZW5kIHRvIGRlbGV0ZSAqLwotCS8qIE5COiB0aGlzIGxpc3Qg aXMgb3JkZXJlZCBieSBUSUQgYWRkcmVzcyAqLwotCWludAkJCW51bV9kZWFkX3R1cGxlczsJLyog Y3VycmVudCAjIG9mIGVudHJpZXMgKi8KLQlpbnQJCQltYXhfZGVhZF90dXBsZXM7CS8qICMgc2xv dHMgYWxsb2NhdGVkIGluIGFycmF5ICovCi0JSXRlbVBvaW50ZXIgZGVhZF90dXBsZXM7CS8qIGFy cmF5IG9mIEl0ZW1Qb2ludGVyRGF0YSAqLworCUxWRGVhZFR1cGxlcyAqZGVhZF90dXBsZXM7CiAJ aW50CQkJbnVtX2luZGV4X3NjYW5zOwogCVRyYW5zYWN0aW9uSWQgbGF0ZXN0UmVtb3ZlZFhpZDsK IAlib29sCQlsb2NrX3dhaXRlcl9kZXRlY3RlZDsKQEAgLTE1NSwxNSArMzA2LDE1IEBAIHN0YXRp YyB2b2lkIGxhenlfc2Nhbl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJh bXMsCiAJCQkJCQkgICBib29sIGFnZ3Jlc3NpdmUpOwogc3RhdGljIHZvaWQgbGF6eV92YWN1dW1f aGVhcChSZWxhdGlvbiBvbmVyZWwsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzKTsKIHN0YXRpYyBi b29sIGxhenlfY2hlY2tfbmVlZHNfZnJlZXplKEJ1ZmZlciBidWYsIGJvb2wgKmhhc3R1cCk7Ci1z dGF0aWMgdm9pZCBsYXp5X3ZhY3V1bV9pbmRleChSZWxhdGlvbiBpbmRyZWwsCi0JCQkJCQkJICBJ bmRleEJ1bGtEZWxldGVSZXN1bHQgKipzdGF0cywKLQkJCQkJCQkgIExWUmVsU3RhdHMgKnZhY3Jl bHN0YXRzKTsKLXN0YXRpYyB2b2lkIGxhenlfdmFjdXVtX2FsbF9pbmRleGVzKFJlbGF0aW9uIG9u ZXJlbCwgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsCi0JCQkJCQkJCQlSZWxhdGlvbiAqSXJlbCwg aW50IG5pbmRleGVzLAotCQkJCQkJCQkJSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqaW5kc3RhdHMp Oworc3RhdGljIHZvaWQgbGF6eV92YWN1dW1fYWxsX2luZGV4ZXMoUmVsYXRpb24gb25lcmVsLCBS ZWxhdGlvbiAqSXJlbCwKKwkJCQkJCQkJCUluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAor CQkJCQkJCQkJTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsIExWUGFyYWxsZWxTdGF0ZSAqbHBzLAor CQkJCQkJCQkJaW50IG5pbmRleGVzKTsKK3N0YXRpYyB2b2lkIGxhenlfdmFjdXVtX2luZGV4KFJl bGF0aW9uIGluZHJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJCQkJICBM VkRlYWRUdXBsZXMgKmRlYWRfdHVwbGVzLCBkb3VibGUgcmVsdHVwbGVzKTsKIHN0YXRpYyB2b2lk IGxhenlfY2xlYW51cF9pbmRleChSZWxhdGlvbiBpbmRyZWwsCi0JCQkJCQkJICAgSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICpzdGF0cywKLQkJCQkJCQkgICBMVlJlbFN0YXRzICp2YWNyZWxzdGF0cyk7 CisJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJCQkJICAgZG91 YmxlIHJlbHR1cGxlcywgYm9vbCBlc3RpbWF0ZWRfY291bnQpOwogc3RhdGljIGludAlsYXp5X3Zh Y3V1bV9wYWdlKFJlbGF0aW9uIG9uZXJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIEJ1ZmZlciBidWZm ZXIsCiAJCQkJCQkJIGludCB0dXBpbmRleCwgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsIEJ1ZmZl ciAqdm1idWZmZXIpOwogc3RhdGljIGJvb2wgc2hvdWxkX2F0dGVtcHRfdHJ1bmNhdGlvbihWYWN1 dW1QYXJhbXMgKnBhcmFtcywKQEAgLTE3MiwxMiArMzIzLDQxIEBAIHN0YXRpYyB2b2lkIGxhenlf dHJ1bmNhdGVfaGVhcChSZWxhdGlvbiBvbmVyZWwsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzKTsK IHN0YXRpYyBCbG9ja051bWJlciBjb3VudF9ub25kZWxldGFibGVfcGFnZXMoUmVsYXRpb24gb25l cmVsLAogCQkJCQkJCQkJCQlMVlJlbFN0YXRzICp2YWNyZWxzdGF0cyk7CiBzdGF0aWMgdm9pZCBs YXp5X3NwYWNlX2FsbG9jKExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBCbG9ja051bWJlciByZWxi bG9ja3MpOwotc3RhdGljIHZvaWQgbGF6eV9yZWNvcmRfZGVhZF90dXBsZShMVlJlbFN0YXRzICp2 YWNyZWxzdGF0cywKK3N0YXRpYyB2b2lkIGxhenlfcmVjb3JkX2RlYWRfdHVwbGUoTFZEZWFkVHVw bGVzICpkZWFkX3R1cGxlcywKIAkJCQkJCQkJICAgSXRlbVBvaW50ZXIgaXRlbXB0cik7CiBzdGF0 aWMgYm9vbCBsYXp5X3RpZF9yZWFwZWQoSXRlbVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3RhdGUp Owogc3RhdGljIGludAl2YWNfY21wX2l0ZW1wdHIoY29uc3Qgdm9pZCAqbGVmdCwgY29uc3Qgdm9p ZCAqcmlnaHQpOwogc3RhdGljIGJvb2wgaGVhcF9wYWdlX2lzX2FsbF92aXNpYmxlKFJlbGF0aW9u IHJlbCwgQnVmZmVyIGJ1ZiwKIAkJCQkJCQkJCSBUcmFuc2FjdGlvbklkICp2aXNpYmlsaXR5X2N1 dG9mZl94aWQsIGJvb2wgKmFsbF9mcm96ZW4pOworc3RhdGljIHZvaWQgbGF6eV9wYXJhbGxlbF92 YWN1dW1faW5kZXhlcyhSZWxhdGlvbiAqSXJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3Rh dHMsCisJCQkJCQkJCQkJIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3RhdGUg KmxwcywKKwkJCQkJCQkJCQkgaW50IG5pbmRleGVzKTsKK3N0YXRpYyB2b2lkIHBhcmFsbGVsX3Zh Y3V1bV9pbmRleChSZWxhdGlvbiAqSXJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMs CisJCQkJCQkJCSAgTFZTaGFyZWQgKmx2c2hhcmVkLCBMVkRlYWRUdXBsZXMgKmRlYWRfdHVwbGVz LAorCQkJCQkJCQkgIGludCBuaW5kZXhlcyk7CitzdGF0aWMgdm9pZCB2YWN1dW1faW5kZXhlc19s ZWFkZXIoUmVsYXRpb24gKklyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAorCQkJ CQkJCQkgIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3RhdGUgKmxwcywKKwkJ CQkJCQkJICBpbnQgbmluZGV4ZXMpOworc3RhdGljIHZvaWQgdmFjdXVtX29uZV9pbmRleChSZWxh dGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAorCQkJCQkJCSBMVlNo YXJlZCAqbHZzaGFyZWQsIExWU2hhcmVkSW5kU3RhdHMgKnNoYXJlZF9pbmRzdGF0cywKKwkJCQkJ CQkgTFZEZWFkVHVwbGVzICpkZWFkX3R1cGxlcyk7CitzdGF0aWMgdm9pZCBsYXp5X2NsZWFudXBf YWxsX2luZGV4ZXMoUmVsYXRpb24gKklyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRz LAorCQkJCQkJCQkJIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3RhdGUgKmxw cywKKwkJCQkJCQkJCSBpbnQgbmluZGV4ZXMpOworc3RhdGljIGxvbmcgY29tcHV0ZV9tYXhfZGVh ZF90dXBsZXMoQmxvY2tOdW1iZXIgcmVsYmxvY2tzLCBib29sIGhhc2luZGV4KTsKK3N0YXRpYyBp bnQJY29tcHV0ZV9wYXJhbGxlbF92YWN1dW1fd29ya2VycyhSZWxhdGlvbiAqSXJlbCwgaW50IG5p bmRleGVzLCBpbnQgbnJlcXVlc3RlZCwKKwkJCQkJCQkJCQkJYm9vbCAqY2FuX3BhcmFsbGVsX3Zh Y3V1bSk7CitzdGF0aWMgdm9pZCBwcmVwYXJlX2luZGV4X3N0YXRpc3RpY3MoTFZTaGFyZWQgKmx2 c2hhcmVkLCBib29sICpjYW5fcGFyYWxsZWxfdmFjdXVtLAorCQkJCQkJCQkJIGludCBuaW5kZXhl cyk7CitzdGF0aWMgdm9pZCB1cGRhdGVfaW5kZXhfc3RhdGlzdGljcyhSZWxhdGlvbiAqSXJlbCwg SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJCQkJCQlpbnQgbmluZGV4ZXMpOwor c3RhdGljIExWUGFyYWxsZWxTdGF0ZSAqYmVnaW5fcGFyYWxsZWxfdmFjdXVtKE9pZCByZWxpZCwg UmVsYXRpb24gKklyZWwsCisJCQkJCQkJCQkJCSAgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsIEJs b2NrTnVtYmVyIG5ibG9ja3MsCisJCQkJCQkJCQkJCSAgaW50IG5pbmRleGVzLCBpbnQgbnJlcXVl c3RlZCk7CitzdGF0aWMgdm9pZCBlbmRfcGFyYWxsZWxfdmFjdXVtKFJlbGF0aW9uICpJcmVsLCBJ bmRleEJ1bGtEZWxldGVSZXN1bHQgKipzdGF0cywKKwkJCQkJCQkJTFZQYXJhbGxlbFN0YXRlICps cHMsIGludCBuaW5kZXhlcyk7CitzdGF0aWMgTFZTaGFyZWRJbmRTdGF0cyAqZ2V0X2luZHN0YXRz KExWU2hhcmVkICpsdnNoYXJlZCwgaW50IG4pOworc3RhdGljIGJvb2wgc2tpcF9wYXJhbGxlbF92 YWN1dW1faW5kZXgoUmVsYXRpb24gaW5kcmVsLCBMVlNoYXJlZCAqbHZzaGFyZWQpOwogCiAKIC8q CkBAIC00OTEsNiArNjcxLDE4IEBAIHZhY3V1bV9sb2dfY2xlYW51cF9pbmZvKFJlbGF0aW9uIHJl bCwgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMpCiAgKgkJZGVhZC10dXBsZSBUSURzLCBpbnZva2Ug dmFjdXVtaW5nIG9mIGluZGV4ZXMgYW5kIGNhbGwgbGF6eV92YWN1dW1faGVhcAogICoJCXRvIHJl Y2xhaW0gZGVhZCBsaW5lIHBvaW50ZXJzLgogICoKKyAqCQlJZiB0aGUgdGFibGUgaGFzIGF0IGxl YXN0IHR3byBpbmRleGVzIGFuZCBwYXJhbGxlbCBsYXp5IHZhY3V1bSBpcworICoJCXJlcXVlc3Rl ZCwgd2UgZXhlY3V0ZSBib3RoIGluZGV4IHZhY3V1bSBhbmQgaW5kZXggY2xlYW51cCB3aXRoCisg KgkJcGFyYWxsZWwgd29ya2Vycy4gIEluIHBhcmFsbGVsIGxhenkgdmFjdXVtLCB3ZSBlbnRlciBw YXJhbGxlbCBtb2RlIGFuZAorICoJCXRoZW4gY3JlYXRlIGJvdGggdGhlIHBhcmFsbGVsIGNvbnRl eHQgYW5kIHRoZSBEU00gc2VnbWVudCBiZWZvcmUgc3RhcnRpbmcKKyAqCQloZWFwIHNjYW4gc28g dGhhdCB3ZSBjYW4gcmVjb3JkIGRlYWQgdHVwbGVzIHRvIHRoZSBEU00gc2VnbWVudC4gIEFsbAor ICoJCXBhcmFsbGVsIHdvcmtlcnMgYXJlIGxhdW5jaGVkIGF0IGJlZ2lubmluZyBvZiBpbmRleCB2 YWN1dW1pbmcgYW5kIGluZGV4CisgKgkJY2xlYW51cCBhbmQgdGhleSBleGl0IG9uY2UgZG9uZSB3 aXRoIGFsbCBpbmRleGVzLiAgQXQgdGhlIGVuZCBvZiB0aGlzCisgKgkJZnVuY3Rpb24gd2UgZXhp dCBmcm9tIHBhcmFsbGVsIG1vZGUuICBJbmRleCBidWxrLWRlbGV0aW9uIHJlc3VsdHMgYXJlCisg KgkJc3RvcmVkIGluIHRoZSBEU00gc2VnbWVudCBhbmQgd2UgdXBkYXRlIGluZGV4IHN0YXRpc3Rp Y3MgZm9yIGFsbCB0aGUKKyAqCQlpbmRleGVzIGFmdGVyIGV4aXRpbmcgZnJvbSBwYXJhbGxlbCBt b2RlIHNpbmNlIHdyaXRlcyBhcmUgbm90IGFsbG93ZWQKKyAqCQlkdXJpbmcgcGFyYWxsZWwgbW9k ZS4KKyAqCiAgKgkJSWYgdGhlcmUgYXJlIG5vIGluZGV4ZXMgdGhlbiB3ZSBjYW4gcmVjbGFpbSBs aW5lIHBvaW50ZXJzIG9uIHRoZSBmbHk7CiAgKgkJZGVhZCBsaW5lIHBvaW50ZXJzIG5lZWQgb25s eSBiZSByZXRhaW5lZCB1bnRpbCBhbGwgaW5kZXggcG9pbnRlcnMgdGhhdAogICoJCXJlZmVyZW5j ZSB0aGVtIGhhdmUgYmVlbiBraWxsZWQuCkBAIC00OTksNiArNjkxLDggQEAgc3RhdGljIHZvaWQK IGxhenlfc2Nhbl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExW UmVsU3RhdHMgKnZhY3JlbHN0YXRzLAogCQkJICAgUmVsYXRpb24gKklyZWwsIGludCBuaW5kZXhl cywgYm9vbCBhZ2dyZXNzaXZlKQogeworCUxWUGFyYWxsZWxTdGF0ZSAqbHBzID0gTlVMTDsKKwlM VkRlYWRUdXBsZXMgKmRlYWRfdHVwbGVzOwogCUJsb2NrTnVtYmVyIG5ibG9ja3MsCiAJCQkJYmxr bm87CiAJSGVhcFR1cGxlRGF0YSB0dXBsZTsKQEAgLTU1NiwxMyArNzUwLDQ2IEBAIGxhenlfc2Nh bl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExWUmVsU3RhdHMg KnZhY3JlbHN0YXRzLAogCXZhY3JlbHN0YXRzLT5ub25lbXB0eV9wYWdlcyA9IDA7CiAJdmFjcmVs c3RhdHMtPmxhdGVzdFJlbW92ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAotCWxhenlf c3BhY2VfYWxsb2ModmFjcmVsc3RhdHMsIG5ibG9ja3MpOworCS8qCisJICogSW5pdGlhbGl6ZSB0 aGUgc3RhdGUgZm9yIHBhcmFsbGVsIHZhY3V1bQorCSAqLworCWlmIChwYXJhbXMtPm53b3JrZXJz ID49IDAgJiYgdmFjcmVsc3RhdHMtPnVzZWluZGV4KQorCXsKKwkJLyoKKwkJICogU2luY2UgcGFy YWxsZWwgd29ya2VycyBjYW5ub3QgYWNjZXNzIGRhdGEgaW4gdGVtcG9yYXJ5IHRhYmxlcywgd2UK KwkJICogY2FuJ3QgcGVyZm9ybSBwYXJhbGxlbCB2YWN1dW0gb24gdGhlbS4KKwkJICovCisJCWlm IChSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMob25lcmVsKSkKKwkJeworCQkJLyoKKwkJCSAqIEdp dmUgd2FybmluZyBvbmx5IGlmIHRoZSB1c2VyIGV4cGxpY2l0bHkgdHJpZXMgdG8gcGVyZm9ybSBh CisJCQkgKiBwYXJhbGxlbCB2YWN1dW0gb24gdGhlIHRlbXBvcmFyeSB0YWJsZS4KKwkJCSAqLwor CQkJaWYgKHBhcmFtcy0+bndvcmtlcnMgPiAwKQorCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJ CShlcnJtc2coImRpc2FibGluZyBwYXJhbGxlbCBvcHRpb24gb2YgdmFjdXVtIG9uIFwiJXNcIiAt LS0gY2Fubm90IHZhY3V1bSB0ZW1wb3JhcnkgdGFibGVzIGluIHBhcmFsbGVsIiwKKwkJCQkJCQkJ UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUob25lcmVsKSkpKTsKKwkJfQorCQllbHNlCisJCQlscHMg PSBiZWdpbl9wYXJhbGxlbF92YWN1dW0oUmVsYXRpb25HZXRSZWxpZChvbmVyZWwpLCBJcmVsLAor CQkJCQkJCQkJCXZhY3JlbHN0YXRzLCBuYmxvY2tzLCBuaW5kZXhlcywKKwkJCQkJCQkJCQlwYXJh bXMtPm53b3JrZXJzKTsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgZGVh ZCB0dXBsZXMgaW4gY2FzZSB0aGUgcGFyYWxsZWwgdmFjdXVtIGlzIG5vdAorCSAqIGluaXRpYWxp emVkLgorCSAqLworCWlmICghUGFyYWxsZWxWYWN1dW1Jc0FjdGl2ZShscHMpKQorCQlsYXp5X3Nw YWNlX2FsbG9jKHZhY3JlbHN0YXRzLCBuYmxvY2tzKTsKKworCWRlYWRfdHVwbGVzID0gdmFjcmVs c3RhdHMtPmRlYWRfdHVwbGVzOwogCWZyb3plbiA9IHBhbGxvYyhzaXplb2YoeGxfaGVhcF9mcmVl emVfdHVwbGUpICogTWF4SGVhcFR1cGxlc1BlclBhZ2UpOwogCiAJLyogUmVwb3J0IHRoYXQgd2Un cmUgc2Nhbm5pbmcgdGhlIGhlYXAsIGFkdmVydGlzaW5nIHRvdGFsICMgb2YgYmxvY2tzICovCiAJ aW5pdHByb2dfdmFsWzBdID0gUFJPR1JFU1NfVkFDVVVNX1BIQVNFX1NDQU5fSEVBUDsKIAlpbml0 cHJvZ192YWxbMV0gPSBuYmxvY2tzOwotCWluaXRwcm9nX3ZhbFsyXSA9IHZhY3JlbHN0YXRzLT5t YXhfZGVhZF90dXBsZXM7CisJaW5pdHByb2dfdmFsWzJdID0gZGVhZF90dXBsZXMtPm1heF90dXBs ZXM7CiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbSgzLCBpbml0cHJvZ19pbmRl eCwgaW5pdHByb2dfdmFsKTsKIAogCS8qCkBAIC03NDAsOCArOTY3LDggQEAgbGF6eV9zY2FuX2hl YXAoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywgTFZSZWxTdGF0cyAqdmFj cmVsc3RhdHMsCiAJCSAqIElmIHdlIGFyZSBjbG9zZSB0byBvdmVycnVubmluZyB0aGUgYXZhaWxh YmxlIHNwYWNlIGZvciBkZWFkLXR1cGxlCiAJCSAqIFRJRHMsIHBhdXNlIGFuZCBkbyBhIGN5Y2xl IG9mIHZhY3V1bWluZyBiZWZvcmUgd2UgdGFja2xlIHRoaXMgcGFnZS4KIAkJICovCi0JCWlmICgo dmFjcmVsc3RhdHMtPm1heF9kZWFkX3R1cGxlcyAtIHZhY3JlbHN0YXRzLT5udW1fZGVhZF90dXBs ZXMpIDwgTWF4SGVhcFR1cGxlc1BlclBhZ2UgJiYKLQkJCXZhY3JlbHN0YXRzLT5udW1fZGVhZF90 dXBsZXMgPiAwKQorCQlpZiAoKGRlYWRfdHVwbGVzLT5tYXhfdHVwbGVzIC0gZGVhZF90dXBsZXMt Pm51bV90dXBsZXMpIDwgTWF4SGVhcFR1cGxlc1BlclBhZ2UgJiYKKwkJCWRlYWRfdHVwbGVzLT5u dW1fdHVwbGVzID4gMCkKIAkJewogCQkJLyoKIAkJCSAqIEJlZm9yZSBiZWdpbm5pbmcgaW5kZXgg dmFjdXVtaW5nLCB3ZSByZWxlYXNlIGFueSBwaW4gd2UgbWF5CkBAIC03NTYsOCArOTgzLDggQEAg bGF6eV9zY2FuX2hlYXAoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywgTFZS ZWxTdGF0cyAqdmFjcmVsc3RhdHMsCiAJCQl9CiAKIAkJCS8qIFdvcmsgb24gYWxsIHRoZSBpbmRl eGVzLCB0aGVuIHRoZSBoZWFwICovCi0JCQlsYXp5X3ZhY3V1bV9hbGxfaW5kZXhlcyhvbmVyZWws IHZhY3JlbHN0YXRzLCBJcmVsLAotCQkJCQkJCQkJbmluZGV4ZXMsIGluZHN0YXRzKTsKKwkJCWxh enlfdmFjdXVtX2FsbF9pbmRleGVzKG9uZXJlbCwgSXJlbCwgaW5kc3RhdHMsCisJCQkJCQkJCQl2 YWNyZWxzdGF0cywgbHBzLCBuaW5kZXhlcyk7CiAKIAkJCS8qIFJlbW92ZSB0dXBsZXMgZnJvbSBo ZWFwICovCiAJCQlsYXp5X3ZhY3V1bV9oZWFwKG9uZXJlbCwgdmFjcmVsc3RhdHMpOwpAQCAtNzY3 LDcgKzk5NCw3IEBAIGxhenlfc2Nhbl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1z ICpwYXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLAogCQkJICogbm90IHRvIHJlc2V0IGxh dGVzdFJlbW92ZWRYaWQgc2luY2Ugd2Ugd2FudCB0aGF0IHZhbHVlIHRvIGJlCiAJCQkgKiB2YWxp ZC4KIAkJCSAqLwotCQkJdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlcyA9IDA7CisJCQlkZWFk X3R1cGxlcy0+bnVtX3R1cGxlcyA9IDA7CiAKIAkJCS8qCiAJCQkgKiBWYWN1dW0gdGhlIEZyZWUg U3BhY2UgTWFwIHRvIG1ha2UgbmV3bHktZnJlZWQgc3BhY2UgdmlzaWJsZSBvbgpAQCAtOTYyLDcg KzExODksNyBAQCBsYXp5X3NjYW5faGVhcChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVBhcmFtcyAq cGFyYW1zLCBMVlJlbFN0YXRzICp2YWNyZWxzdGF0cywKIAkJaGFzX2RlYWRfdHVwbGVzID0gZmFs c2U7CiAJCW5mcm96ZW4gPSAwOwogCQloYXN0dXAgPSBmYWxzZTsKLQkJcHJldl9kZWFkX2NvdW50 ID0gdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlczsKKwkJcHJldl9kZWFkX2NvdW50ID0gZGVh ZF90dXBsZXMtPm51bV90dXBsZXM7CiAJCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIo cGFnZSk7CiAKIAkJLyoKQEAgLTEwMDEsNyArMTIyOCw3IEBAIGxhenlfc2Nhbl9oZWFwKFJlbGF0 aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRz LAogCQkJICovCiAJCQlpZiAoSXRlbUlkSXNEZWFkKGl0ZW1pZCkpCiAJCQl7Ci0JCQkJbGF6eV9y ZWNvcmRfZGVhZF90dXBsZSh2YWNyZWxzdGF0cywgJih0dXBsZS50X3NlbGYpKTsKKwkJCQlsYXp5 X3JlY29yZF9kZWFkX3R1cGxlKGRlYWRfdHVwbGVzLCAmKHR1cGxlLnRfc2VsZikpOwogCQkJCWFs bF92aXNpYmxlID0gZmFsc2U7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0xMTQ3LDcgKzEzNzQs NyBAQCBsYXp5X3NjYW5faGVhcChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1z LCBMVlJlbFN0YXRzICp2YWNyZWxzdGF0cywKIAogCQkJaWYgKHR1cGdvbmUpCiAJCQl7Ci0JCQkJ bGF6eV9yZWNvcmRfZGVhZF90dXBsZSh2YWNyZWxzdGF0cywgJih0dXBsZS50X3NlbGYpKTsKKwkJ CQlsYXp5X3JlY29yZF9kZWFkX3R1cGxlKGRlYWRfdHVwbGVzLCAmKHR1cGxlLnRfc2VsZikpOwog CQkJCUhlYXBUdXBsZUhlYWRlckFkdmFuY2VMYXRlc3RSZW1vdmVkWGlkKHR1cGxlLnRfZGF0YSwK IAkJCQkJCQkJCQkJCQkgICAmdmFjcmVsc3RhdHMtPmxhdGVzdFJlbW92ZWRYaWQpOwogCQkJCXR1 cHNfdmFjdXVtZWQgKz0gMTsKQEAgLTEyMTcsNyArMTQ0NCw3IEBAIGxhenlfc2Nhbl9oZWFwKFJl bGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0 YXRzLAogCQkgKiBkb2luZyBhIHNlY29uZCBzY2FuLiBBbHNvIHdlIGRvbid0IGRvIHRoYXQgYnV0 IGZvcmdldCBkZWFkIHR1cGxlcwogCQkgKiB3aGVuIGluZGV4IGNsZWFudXAgaXMgZGlzYWJsZWQu CiAJCSAqLwotCQlpZiAoIXZhY3JlbHN0YXRzLT51c2VpbmRleCAmJiB2YWNyZWxzdGF0cy0+bnVt X2RlYWRfdHVwbGVzID4gMCkKKwkJaWYgKCF2YWNyZWxzdGF0cy0+dXNlaW5kZXggJiYgZGVhZF90 dXBsZXMtPm51bV90dXBsZXMgPiAwKQogCQl7CiAJCQlpZiAobmluZGV4ZXMgPT0gMCkKIAkJCXsK QEAgLTEyNDYsNyArMTQ3Myw3IEBAIGxhenlfc2Nhbl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFj dXVtUGFyYW1zICpwYXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLAogCQkJICogbm90IHRv IHJlc2V0IGxhdGVzdFJlbW92ZWRYaWQgc2luY2Ugd2Ugd2FudCB0aGF0IHZhbHVlIHRvIGJlCiAJ CQkgKiB2YWxpZC4KIAkJCSAqLwotCQkJdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlcyA9IDA7 CisJCQlkZWFkX3R1cGxlcy0+bnVtX3R1cGxlcyA9IDA7CiAKIAkJCS8qCiAJCQkgKiBQZXJpb2Rp Y2FsbHkgZG8gaW5jcmVtZW50YWwgRlNNIHZhY3V1bWluZyB0byBtYWtlIG5ld2x5LWZyZWVkCkBA IC0xMzYxLDcgKzE1ODgsNyBAQCBsYXp5X3NjYW5faGVhcChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1 bVBhcmFtcyAqcGFyYW1zLCBMVlJlbFN0YXRzICp2YWNyZWxzdGF0cywKIAkJICogcGFnZSwgc28g cmVtZW1iZXIgaXRzIGZyZWUgc3BhY2UgYXMtaXMuICAoVGhpcyBwYXRoIHdpbGwgYWx3YXlzIGJl CiAJCSAqIHRha2VuIGlmIHRoZXJlIGFyZSBubyBpbmRleGVzLikKIAkJICovCi0JCWlmICh2YWNy ZWxzdGF0cy0+bnVtX2RlYWRfdHVwbGVzID09IHByZXZfZGVhZF9jb3VudCkKKwkJaWYgKGRlYWRf dHVwbGVzLT5udW1fdHVwbGVzID09IHByZXZfZGVhZF9jb3VudCkKIAkJCVJlY29yZFBhZ2VXaXRo RnJlZVNwYWNlKG9uZXJlbCwgYmxrbm8sIGZyZWVzcGFjZSk7CiAJfQogCkBAIC0xMzk1LDExICsx NjIyLDExIEBAIGxhenlfc2Nhbl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpw YXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLAogCiAJLyogSWYgYW55IHR1cGxlcyBuZWVk IHRvIGJlIGRlbGV0ZWQsIHBlcmZvcm0gZmluYWwgdmFjdXVtIGN5Y2xlICovCiAJLyogWFhYIHB1 dCBhIHRocmVzaG9sZCBvbiBtaW4gbnVtYmVyIG9mIHR1cGxlcyBoZXJlPyAqLwotCWlmICh2YWNy ZWxzdGF0cy0+bnVtX2RlYWRfdHVwbGVzID4gMCkKKwlpZiAoZGVhZF90dXBsZXMtPm51bV90dXBs ZXMgPiAwKQogCXsKIAkJLyogV29yayBvbiBhbGwgdGhlIGluZGV4ZXMsIGFuZCB0aGVuIHRoZSBo ZWFwICovCi0JCWxhenlfdmFjdXVtX2FsbF9pbmRleGVzKG9uZXJlbCwgdmFjcmVsc3RhdHMsIEly ZWwsIG5pbmRleGVzLAotCQkJCQkJCQlpbmRzdGF0cyk7CisJCWxhenlfdmFjdXVtX2FsbF9pbmRl eGVzKG9uZXJlbCwgSXJlbCwgaW5kc3RhdHMsIHZhY3JlbHN0YXRzLAorCQkJCQkJCQlscHMsIG5p bmRleGVzKTsKIAogCQkvKiBSZW1vdmUgdHVwbGVzIGZyb20gaGVhcCAqLwogCQlsYXp5X3ZhY3V1 bV9oZWFwKG9uZXJlbCwgdmFjcmVsc3RhdHMpOwpAQCAtMTQxMiwxNyArMTYzOSwyMiBAQCBsYXp5 X3NjYW5faGVhcChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLCBMVlJlbFN0 YXRzICp2YWNyZWxzdGF0cywKIAlpZiAoYmxrbm8gPiBuZXh0X2ZzbV9ibG9ja190b192YWN1dW0p CiAJCUZyZWVTcGFjZU1hcFZhY3V1bVJhbmdlKG9uZXJlbCwgbmV4dF9mc21fYmxvY2tfdG9fdmFj dXVtLCBibGtubyk7CiAKLQkvKiByZXBvcnQgYWxsIGJsb2NrcyB2YWN1dW1lZDsgYW5kIHRoYXQg d2UncmUgY2xlYW5pbmcgdXAgKi8KKwkvKiByZXBvcnQgYWxsIGJsb2NrcyB2YWN1dW1lZCAqLwog CXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfVkFDVVVNX0hFQVBfQkxLU19W QUNVVU1FRCwgYmxrbm8pOwotCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1Nf VkFDVVVNX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfVkFDVVVNX1BIQVNFX0lOREVYX0NMRUFO VVApOwogCi0JLyogRG8gcG9zdC12YWN1dW0gY2xlYW51cCBhbmQgc3RhdGlzdGljcyB1cGRhdGUg Zm9yIGVhY2ggaW5kZXggKi8KKwkvKiBEbyBwb3N0LXZhY3V1bSBjbGVhbnVwICovCiAJaWYgKHZh Y3JlbHN0YXRzLT51c2VpbmRleCkKLQl7Ci0JCWZvciAoaSA9IDA7IGkgPCBuaW5kZXhlczsgaSsr KQotCQkJbGF6eV9jbGVhbnVwX2luZGV4KElyZWxbaV0sIGluZHN0YXRzW2ldLCB2YWNyZWxzdGF0 cyk7Ci0JfQorCQlsYXp5X2NsZWFudXBfYWxsX2luZGV4ZXMoSXJlbCwgaW5kc3RhdHMsIHZhY3Jl bHN0YXRzLCBscHMsIG5pbmRleGVzKTsKKworCS8qCisJICogRW5kIHBhcmFsbGVsIG1vZGUgYmVm b3JlIHVwZGF0aW5nIGluZGV4IHN0YXRpc3RpY3MgYXMgd2UgY2Fubm90IHdyaXRlCisJICogZHVy aW5nIHBhcmFsbGVsIG1vZGUuCisJICovCisJaWYgKFBhcmFsbGVsVmFjdXVtSXNBY3RpdmUobHBz KSkKKwkJZW5kX3BhcmFsbGVsX3ZhY3V1bShJcmVsLCBpbmRzdGF0cywgbHBzLCBuaW5kZXhlcyk7 CisKKwkvKiBVcGRhdGUgaW5kZXggc3RhdGlzdGljcyAqLworCXVwZGF0ZV9pbmRleF9zdGF0aXN0 aWNzKElyZWwsIGluZHN0YXRzLCBuaW5kZXhlcyk7CiAKIAkvKiBJZiBubyBpbmRleGVzLCBtYWtl IGxvZyByZXBvcnQgdGhhdCBsYXp5X3ZhY3V1bV9oZWFwIHdvdWxkJ3ZlIG1hZGUgKi8KIAlpZiAo dmFjdXVtZWRfcGFnZXMpCkBAIC0xNDY3LDE1ICsxNjk5LDE2IEBAIGxhenlfc2Nhbl9oZWFwKFJl bGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0 YXRzLAogLyoKICAqCWxhenlfdmFjdXVtX2FsbF9pbmRleGVzKCkgLS0gdmFjdXVtIGFsbCBpbmRl eGVzIG9mIHJlbGF0aW9uLgogICoKLSAqCQlUaGlzIGlzIGEgdXRpbGl0eSB3cmFwcGVyIGZvciBs YXp5X3ZhY3V1bV9pbmRleCgpLCBhYmxlIHRvIGRvCi0gKgkJcHJvZ3Jlc3MgcmVwb3J0aW5nLgor ICogV2UgcHJvY2VzcyB0aGUgaW5kZXhlcyBzZXJpYWxseSB1bmxlc3Mgd2UgYXJlIGRvaW5nIHBh cmFsbGVsIHZhY3V1bS4KICAqLwogc3RhdGljIHZvaWQKLWxhenlfdmFjdXVtX2FsbF9pbmRleGVz KFJlbGF0aW9uIG9uZXJlbCwgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsCi0JCQkJCQlSZWxhdGlv biAqSXJlbCwgaW50IG5pbmRleGVzLAotCQkJCQkJSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqaW5k c3RhdHMpCitsYXp5X3ZhY3V1bV9hbGxfaW5kZXhlcyhSZWxhdGlvbiBvbmVyZWwsIFJlbGF0aW9u ICpJcmVsLAorCQkJCQkJSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJCQlMVlJl bFN0YXRzICp2YWNyZWxzdGF0cywgTFZQYXJhbGxlbFN0YXRlICpscHMsCisJCQkJCQlpbnQgbmlu ZGV4ZXMpCiB7Ci0JaW50CQkJaTsKKwlBc3NlcnQoIUlzUGFyYWxsZWxXb3JrZXIoKSk7CisJQXNz ZXJ0KG5pbmRleGVzID4gMCk7CiAKIAkvKiBMb2cgY2xlYW51cCBpbmZvIGJlZm9yZSB3ZSB0b3Vj aCBpbmRleGVzICovCiAJdmFjdXVtX2xvZ19jbGVhbnVwX2luZm8ob25lcmVsLCB2YWNyZWxzdGF0 cyk7CkBAIC0xNDg0LDkgKzE3MTcsMzAgQEAgbGF6eV92YWN1dW1fYWxsX2luZGV4ZXMoUmVsYXRp b24gb25lcmVsLCBMVlJlbFN0YXRzICp2YWNyZWxzdGF0cywKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBk YXRlX3BhcmFtKFBST0dSRVNTX1ZBQ1VVTV9QSEFTRSwKIAkJCQkJCQkJIFBST0dSRVNTX1ZBQ1VV TV9QSEFTRV9WQUNVVU1fSU5ERVgpOwogCi0JLyogUmVtb3ZlIGluZGV4IGVudHJpZXMgKi8KLQlm b3IgKGkgPSAwOyBpIDwgbmluZGV4ZXM7IGkrKykKLQkJbGF6eV92YWN1dW1faW5kZXgoSXJlbFtp XSwgJmluZHN0YXRzW2ldLCB2YWNyZWxzdGF0cyk7CisJLyogUGVyZm9ybSBpbmRleCB2YWN1dW1p bmcgd2l0aCBwYXJhbGxlbCB3b3JrZXJzIGZvciBwYXJhbGxlbCB2YWN1dW0uICovCisJaWYgKFBh cmFsbGVsVmFjdXVtSXNBY3RpdmUobHBzKSkKKwl7CisJCS8qIFRlbGwgcGFyYWxsZWwgd29ya2Vy cyB0byBkbyBpbmRleCB2YWN1dW1pbmcgKi8KKwkJbHBzLT5sdnNoYXJlZC0+Zm9yX2NsZWFudXAg PSBmYWxzZTsKKwkJbHBzLT5sdnNoYXJlZC0+Zmlyc3RfdGltZSA9IGZhbHNlOworCisJCS8qCisJ CSAqIFdlIGNhbiBvbmx5IHByb3ZpZGUgYW4gYXBwcm94aW1hdGUgdmFsdWUgb2YgbnVtX2hlYXBf dHVwbGVzIGluCisJCSAqIHZhY3V1bSBjYXNlcy4KKwkJICovCisJCWxwcy0+bHZzaGFyZWQtPnJl bHR1cGxlcyA9IHZhY3JlbHN0YXRzLT5vbGRfbGl2ZV90dXBsZXM7CisJCWxwcy0+bHZzaGFyZWQt PmVzdGltYXRlZF9jb3VudCA9IHRydWU7CisKKwkJbGF6eV9wYXJhbGxlbF92YWN1dW1faW5kZXhl cyhJcmVsLCBzdGF0cywgdmFjcmVsc3RhdHMsIGxwcywgbmluZGV4ZXMpOworCX0KKwllbHNlCisJ eworCQlpbnQJCQlpZHg7CisKKwkJZm9yIChpZHggPSAwOyBpZHggPCBuaW5kZXhlczsgaWR4Kysp CisJCQlsYXp5X3ZhY3V1bV9pbmRleChJcmVsW2lkeF0sICZzdGF0c1tpZHhdLCB2YWNyZWxzdGF0 cy0+ZGVhZF90dXBsZXMsCisJCQkJCQkJICB2YWNyZWxzdGF0cy0+b2xkX2xpdmVfdHVwbGVzKTsK Kwl9CiAKIAkvKiBJbmNyZWFzZSBhbmQgcmVwb3J0IHRoZSBudW1iZXIgb2YgaW5kZXggc2NhbnMg Ki8KIAl2YWNyZWxzdGF0cy0+bnVtX2luZGV4X3NjYW5zKys7CkBAIC0xNTIyLDcgKzE3NzYsNyBA QCBsYXp5X3ZhY3V1bV9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgTFZSZWxTdGF0cyAqdmFjcmVsc3Rh dHMpCiAJbnBhZ2VzID0gMDsKIAogCXR1cGluZGV4ID0gMDsKLQl3aGlsZSAodHVwaW5kZXggPCB2 YWNyZWxzdGF0cy0+bnVtX2RlYWRfdHVwbGVzKQorCXdoaWxlICh0dXBpbmRleCA8IHZhY3JlbHN0 YXRzLT5kZWFkX3R1cGxlcy0+bnVtX3R1cGxlcykKIAl7CiAJCUJsb2NrTnVtYmVyIHRibGs7CiAJ CUJ1ZmZlcgkJYnVmOwpAQCAtMTUzMSw3ICsxNzg1LDcgQEAgbGF6eV92YWN1dW1faGVhcChSZWxh dGlvbiBvbmVyZWwsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzKQogCiAJCXZhY3V1bV9kZWxheV9w b2ludCgpOwogCi0JCXRibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZ2YWNyZWxzdGF0 cy0+ZGVhZF90dXBsZXNbdHVwaW5kZXhdKTsKKwkJdGJsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIoJnZhY3JlbHN0YXRzLT5kZWFkX3R1cGxlcy0+aXRlbXB0cnNbdHVwaW5kZXhdKTsKIAkJ YnVmID0gUmVhZEJ1ZmZlckV4dGVuZGVkKG9uZXJlbCwgTUFJTl9GT1JLTlVNLCB0YmxrLCBSQk1f Tk9STUFMLAogCQkJCQkJCQkgdmFjX3N0cmF0ZWd5KTsKIAkJaWYgKCFDb25kaXRpb25hbExvY2tC dWZmZXJGb3JDbGVhbnVwKGJ1ZikpCkBAIC0xNTc5LDYgKzE4MzMsNyBAQCBzdGF0aWMgaW50CiBs YXp5X3ZhY3V1bV9wYWdlKFJlbGF0aW9uIG9uZXJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIEJ1ZmZl ciBidWZmZXIsCiAJCQkJIGludCB0dXBpbmRleCwgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsIEJ1 ZmZlciAqdm1idWZmZXIpCiB7CisJTFZEZWFkVHVwbGVzICpkZWFkX3R1cGxlcyA9IHZhY3JlbHN0 YXRzLT5kZWFkX3R1cGxlczsKIAlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOwog CU9mZnNldE51bWJlciB1bnVzZWRbTWF4T2Zmc2V0TnVtYmVyXTsKIAlpbnQJCQl1bmNudCA9IDA7 CkBAIC0xNTg5LDE2ICsxODQ0LDE2IEBAIGxhenlfdmFjdXVtX3BhZ2UoUmVsYXRpb24gb25lcmVs LCBCbG9ja051bWJlciBibGtubywgQnVmZmVyIGJ1ZmZlciwKIAogCVNUQVJUX0NSSVRfU0VDVElP TigpOwogCi0JZm9yICg7IHR1cGluZGV4IDwgdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlczsg dHVwaW5kZXgrKykKKwlmb3IgKDsgdHVwaW5kZXggPCBkZWFkX3R1cGxlcy0+bnVtX3R1cGxlczsg dHVwaW5kZXgrKykKIAl7CiAJCUJsb2NrTnVtYmVyIHRibGs7CiAJCU9mZnNldE51bWJlciB0b2Zm OwogCQlJdGVtSWQJCWl0ZW1pZDsKIAotCQl0YmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cigmdmFjcmVsc3RhdHMtPmRlYWRfdHVwbGVzW3R1cGluZGV4XSk7CisJCXRibGsgPSBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKCZkZWFkX3R1cGxlcy0+aXRlbXB0cnNbdHVwaW5kZXhdKTsKIAkJ aWYgKHRibGsgIT0gYmxrbm8pCiAJCQlicmVhazsJCQkJLyogcGFzdCBlbmQgb2YgdHVwbGVzIGZv ciB0aGlzIGJsb2NrICovCi0JCXRvZmYgPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmdmFj cmVsc3RhdHMtPmRlYWRfdHVwbGVzW3R1cGluZGV4XSk7CisJCXRvZmYgPSBJdGVtUG9pbnRlckdl dE9mZnNldE51bWJlcigmZGVhZF90dXBsZXMtPml0ZW1wdHJzW3R1cGluZGV4XSk7CiAJCWl0ZW1p ZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgdG9mZik7CiAJCUl0ZW1JZFNldFVudXNlZChpdGVtaWQp OwogCQl1bnVzZWRbdW5jbnQrK10gPSB0b2ZmOwpAQCAtMTcxOSwxOSArMTk3NCwzNTMgQEAgbGF6 eV9jaGVja19uZWVkc19mcmVlemUoQnVmZmVyIGJ1ZiwgYm9vbCAqaGFzdHVwKQogCXJldHVybiBm YWxzZTsKIH0KIAorLyoKKyAqIFBlcmZvcm0gaW5kZXggdmFjdXVtIG9yIGluZGV4IGNsZWFudXAg d2l0aCBwYXJhbGxlbCB3b3JrZXJzLiAgVGhpcyBmdW5jdGlvbgorICogbXVzdCBiZSB1c2VkIGJ5 IHRoZSBwYXJhbGxlbCB2YWN1dW0gbGVhZGVyIHByb2Nlc3MuICBUaGUgY2FsbGVyIG11c3Qgc2V0 CisgKiBscHMtPmx2c2hhcmVkLT5mb3JfY2xlYW51cCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIHBl cmZvcm0gdmFjdXVtIG9yCisgKiBjbGVhbnVwLgorICovCitzdGF0aWMgdm9pZAorbGF6eV9wYXJh bGxlbF92YWN1dW1faW5kZXhlcyhSZWxhdGlvbiAqSXJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0 ICoqc3RhdHMsCisJCQkJCQkJIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3Rh dGUgKmxwcywKKwkJCQkJCQkgaW50IG5pbmRleGVzKQoreworCWludAkJCW53b3JrZXJzOworCisJ QXNzZXJ0KCFJc1BhcmFsbGVsV29ya2VyKCkpOworCUFzc2VydChQYXJhbGxlbFZhY3V1bUlzQWN0 aXZlKGxwcykpOworCUFzc2VydChuaW5kZXhlcyA+IDApOworCisJLyogRGV0ZXJtaW5lIHRoZSBu dW1iZXIgb2YgcGFyYWxsZWwgd29ya2VycyB0byBsYXVuY2ggKi8KKwlpZiAobHBzLT5sdnNoYXJl ZC0+Zm9yX2NsZWFudXApCisJeworCQlpZiAobHBzLT5sdnNoYXJlZC0+Zmlyc3RfdGltZSkKKwkJ CW53b3JrZXJzID0gbHBzLT5uaW5kZXhlc19wYXJhbGxlbF9jbGVhbnVwICsKKwkJCQlscHMtPm5p bmRleGVzX3BhcmFsbGVsX2NvbmRjbGVhbnVwOworCQllbHNlCisJCQlud29ya2VycyA9IGxwcy0+ bmluZGV4ZXNfcGFyYWxsZWxfY2xlYW51cDsKKworCX0KKwllbHNlCisJCW53b3JrZXJzID0gbHBz LT5uaW5kZXhlc19wYXJhbGxlbF9idWxrZGVsOworCisJLyogVGhlIGxlYWRlciBwcm9jZXNzIHdp bGwgcGFydGljaXBhdGUgKi8KKwlud29ya2Vycy0tOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJs ZSB0aGF0IHBhcmFsbGVsIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBmZXdlciB3b3JrZXJz CisJICogdGhlbiB0aGUgbnVtYmVyIG9mIGluZGV4ZXMgdGhhdCBuZWVkIGEgc2VwYXJhdGUgd29y a2VyIGluIHRoZSBjdXJyZW50CisJICogcGhhc2UsIHNvIHdlIG5lZWQgdG8gY29uc2lkZXIgaXQu ICBTZWUgY29tcHV0ZV9wYXJhbGxlbF92YWN1dW1fd29ya2Vycy4KKwkgKi8KKwlud29ya2VycyA9 IE1pbihud29ya2VycywgbHBzLT5wY3h0LT5ud29ya2Vycyk7CisKKwkvKiBTZXR1cCB0aGUgc2hh cmVkIGNvc3QtYmFzZWQgdmFjdXVtIGRlbGF5IGFuZCBsYXVuY2ggd29ya2VycyAqLworCWlmIChu d29ya2VycyA+IDApCisJeworCQlpZiAodmFjcmVsc3RhdHMtPm51bV9pbmRleF9zY2FucyA+IDAp CisJCXsKKwkJCS8qIFJlc2V0IHRoZSBwYXJhbGxlbCBpbmRleCBwcm9jZXNzaW5nIGNvdW50ZXIg Ki8KKwkJCXBnX2F0b21pY193cml0ZV91MzIoJihscHMtPmx2c2hhcmVkLT5pZHgpLCAwKTsKKwor CQkJLyogUmVpbml0aWFsaXplIHRoZSBwYXJhbGxlbCBjb250ZXh0IHRvIHJlbGF1bmNoIHBhcmFs bGVsIHdvcmtlcnMgKi8KKwkJCVJlaW5pdGlhbGl6ZVBhcmFsbGVsRFNNKGxwcy0+cGN4dCk7CisJ CX0KKworCQkvKiBFbmFibGUgc2hhcmVkIGNvc3QgYmFsYW5jZSAqLworCQlWYWN1dW1TaGFyZWRD b3N0QmFsYW5jZSA9ICYobHBzLT5sdnNoYXJlZC0+Y29zdF9iYWxhbmNlKTsKKwkJVmFjdXVtQWN0 aXZlTldvcmtlcnMgPSAmKGxwcy0+bHZzaGFyZWQtPmFjdGl2ZV9ud29ya2Vycyk7CisKKwkJLyoK KwkJICogU2V0IHVwIHNoYXJlZCBjb3N0IGJhbGFuY2UgYW5kIHRoZSBudW1iZXIgb2YgYWN0aXZl IHdvcmtlcnMgZm9yCisJCSAqIHZhY3V1bSBkZWxheS4KKwkJICovCisJCXBnX2F0b21pY193cml0 ZV91MzIoVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UsIFZhY3V1bUNvc3RCYWxhbmNlKTsKKwkJcGdf YXRvbWljX3dyaXRlX3UzMihWYWN1dW1BY3RpdmVOV29ya2VycywgMCk7CisKKwkJLyoKKwkJICog VGhlIG51bWJlciBvZiB3b3JrZXJzIGNhbiB2YXJ5IGJldHdlZW4gYnVsa2RlbGV0ZSBhbmQgY2xl YW51cAorCQkgKiBwaGFzZS4KKwkJICovCisJCVJlaW5pdGlhbGl6ZVBhcmFsbGVsV29ya2Vycyhs cHMtPnBjeHQsIG53b3JrZXJzKTsKKworCQlMYXVuY2hQYXJhbGxlbFdvcmtlcnMobHBzLT5wY3h0 KTsKKworCQlpZiAobHBzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCA+IDApCisJCXsKKwkJCS8q CisJCQkgKiBSZXNldCB0aGUgbG9jYWwgY29zdCB2YWx1ZXMgZm9yIGxlYWRlciBiYWNrZW5kIGFz IHdlIGhhdmUKKwkJCSAqIGFscmVhZHkgYWNjdW11bGF0ZWQgdGhlIHJlbWFpbmluZyBiYWxhbmNl IG9mIGhlYXAuCisJCQkgKi8KKwkJCVZhY3V1bUNvc3RCYWxhbmNlID0gMDsKKwkJCVZhY3V1bUNv c3RCYWxhbmNlTG9jYWwgPSAwOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIERpc2Fi bGUgc2hhcmVkIGNvc3QgYmFsYW5jZSBpZiB3ZSBhcmUgbm90IGFibGUgdG8gbGF1bmNoCisJCQkg KiB3b3JrZXJzLgorCQkJICovCisJCQlWYWN1dW1TaGFyZWRDb3N0QmFsYW5jZSA9IE5VTEw7CisJ CQlWYWN1dW1BY3RpdmVOV29ya2VycyA9IE5VTEw7CisJCX0KKworCQlpZiAobHBzLT5sdnNoYXJl ZC0+Zm9yX2NsZWFudXApCisJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJKGVycm1zZyhuZ2V0dGV4 dCgibGF1bmNoZWQgJWQgcGFyYWxsZWwgdmFjdXVtIHdvcmtlciBmb3IgaW5kZXggY2xlYW51cCAo cGxhbm5lZDogJWQpIiwKKwkJCQkJCQkJCSAibGF1bmNoZWQgJWQgcGFyYWxsZWwgdmFjdXVtIHdv cmtlcnMgZm9yIGluZGV4IGNsZWFudXAgKHBsYW5uZWQ6ICVkKSIsCisJCQkJCQkJCQkgbHBzLT5w Y3h0LT5ud29ya2Vyc19sYXVuY2hlZCksCisJCQkJCQkJbHBzLT5wY3h0LT5ud29ya2Vyc19sYXVu Y2hlZCwgbndvcmtlcnMpKSk7CisJCWVsc2UKKwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQkoZXJy bXNnKG5nZXR0ZXh0KCJsYXVuY2hlZCAlZCBwYXJhbGxlbCB2YWN1dW0gd29ya2VyIGZvciBpbmRl eCB2YWN1dW1pbmcgKHBsYW5uZWQ6ICVkKSIsCisJCQkJCQkJCQkgImxhdW5jaGVkICVkIHBhcmFs bGVsIHZhY3V1bSB3b3JrZXJzIGZvciBpbmRleCB2YWN1dW1pbmcgKHBsYW5uZWQ6ICVkKSIsCisJ CQkJCQkJCQkgbHBzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCksCisJCQkJCQkJbHBzLT5wY3h0 LT5ud29ya2Vyc19sYXVuY2hlZCwgbndvcmtlcnMpKSk7CisJfQorCisJLyogUHJvY2VzcyB0aGUg aW5kZXhlcyB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgYnkgb25seSBsZWFkZXIgcHJvY2VzcyAqLwor CXZhY3V1bV9pbmRleGVzX2xlYWRlcihJcmVsLCBzdGF0cywgdmFjcmVsc3RhdHMsIGxwcywgbmlu ZGV4ZXMpOworCisJLyoKKwkgKiBKb2luIGFzIGEgcGFyYWxsZWwgd29ya2VyLiAgVGhlIGxlYWRl ciBwcm9jZXNzIGFsb25lIHByb2Nlc3NlcyBhbGwgdGhlCisJICogaW5kZXhlcyBpbiB0aGUgY2Fz ZSB3aGVyZSBubyB3b3JrZXJzIGFyZSBsYXVuY2hlZC4KKwkgKi8KKwlwYXJhbGxlbF92YWN1dW1f aW5kZXgoSXJlbCwgc3RhdHMsIGxwcy0+bHZzaGFyZWQsCisJCQkJCQkgIHZhY3JlbHN0YXRzLT5k ZWFkX3R1cGxlcywgbmluZGV4ZXMpOworCisJLyogV2FpdCBmb3IgYWxsIHZhY3V1bSB3b3JrZXJz IHRvIGZpbmlzaCAqLworCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0ZpbmlzaChscHMtPnBjeHQp OworCisJLyogQ2FycnkgdGhlIHNoYXJlZCBiYWxhbmNlIHZhbHVlIHRvIGhlYXAgc2NhbiAqLwor CWlmIChWYWN1dW1TaGFyZWRDb3N0QmFsYW5jZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgPSBwZ19h dG9taWNfcmVhZF91MzIoVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UpOworCisJaWYgKG53b3JrZXJz ID4gMCkKKwl7CisJCS8qIERpc2FibGUgc2hhcmVkIGNvc3QgYmFsYW5jZSAqLworCQlWYWN1dW1T aGFyZWRDb3N0QmFsYW5jZSA9IE5VTEw7CisJCVZhY3V1bUFjdGl2ZU5Xb3JrZXJzID0gTlVMTDsK Kwl9Cit9CisKKy8qCisgKiBJbmRleCB2YWN1dW0vY2xlYW51cCByb3V0aW5lIHVzZWQgYnkgdGhl IGxlYWRlciBwcm9jZXNzIGFuZCBwYXJhbGxlbAorICogdmFjdXVtIHdvcmtlciBwcm9jZXNzZXMg dG8gcHJvY2VzcyB0aGUgaW5kZXhlcyBpbiBwYXJhbGxlbC4KKyAqLworc3RhdGljIHZvaWQKK3Bh cmFsbGVsX3ZhY3V1bV9pbmRleChSZWxhdGlvbiAqSXJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0 ICoqc3RhdHMsCisJCQkJCSAgTFZTaGFyZWQgKmx2c2hhcmVkLCBMVkRlYWRUdXBsZXMgKmRlYWRf dHVwbGVzLAorCQkJCQkgIGludCBuaW5kZXhlcykKK3sKKwkvKgorCSAqIEluY3JlbWVudCB0aGUg YWN0aXZlIHdvcmtlciBjb3VudCBpZiB3ZSBhcmUgYWJsZSB0byBsYXVuY2ggYW55IHdvcmtlci4K KwkgKi8KKwlpZiAoVmFjdXVtQWN0aXZlTldvcmtlcnMpCisJCXBnX2F0b21pY19hZGRfZmV0Y2hf dTMyKFZhY3V1bUFjdGl2ZU5Xb3JrZXJzLCAxKTsKKworCS8qIExvb3AgdW50aWwgYWxsIGluZGV4 ZXMgYXJlIHZhY3V1bWVkICovCisJZm9yICg7OykKKwl7CisJCWludAkJCWlkeDsKKwkJTFZTaGFy ZWRJbmRTdGF0cyAqc2hhcmVkX2luZHN0YXRzOworCisJCS8qIEdldCBhbiBpbmRleCBudW1iZXIg dG8gcHJvY2VzcyAqLworCQlpZHggPSBwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMigmKGx2c2hhcmVk LT5pZHgpLCAxKTsKKworCQkvKiBEb25lIGZvciBhbGwgaW5kZXhlcz8gKi8KKwkJaWYgKGlkeCA+ PSBuaW5kZXhlcykKKwkJCWJyZWFrOworCisJCS8qIEdldCB0aGUgaW5kZXggc3RhdGlzdGljcyBv ZiB0aGlzIGluZGV4IGZyb20gRFNNICovCisJCXNoYXJlZF9pbmRzdGF0cyA9IGdldF9pbmRzdGF0 cyhsdnNoYXJlZCwgaWR4KTsKKworCQkvKgorCQkgKiBTa2lwIHByb2Nlc3NpbmcgaW5kZXhlcyB0 aGF0IGRvZXNuJ3QgcGFydGljaXBhdGUgaW4gcGFyYWxsZWwKKwkJICogb3BlcmF0aW9uCisJCSAq LworCQlpZiAoc2hhcmVkX2luZHN0YXRzID09IE5VTEwgfHwKKwkJCXNraXBfcGFyYWxsZWxfdmFj dXVtX2luZGV4KElyZWxbaWR4XSwgbHZzaGFyZWQpKQorCQkJY29udGludWU7CisKKwkJLyogRG8g dmFjdXVtIG9yIGNsZWFudXAgb2YgdGhlIGluZGV4ICovCisJCXZhY3V1bV9vbmVfaW5kZXgoSXJl bFtpZHhdLCAmKHN0YXRzW2lkeF0pLCBsdnNoYXJlZCwgc2hhcmVkX2luZHN0YXRzLAorCQkJCQkJ IGRlYWRfdHVwbGVzKTsKKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgY29tcGxldGVkIHRoZSBpbmRl eCB2YWN1dW0gc28gZGVjcmVtZW50IHRoZSBhY3RpdmUgd29ya2VyCisJICogY291bnQuCisJICov CisJaWYgKFZhY3V1bUFjdGl2ZU5Xb3JrZXJzKQorCQlwZ19hdG9taWNfc3ViX2ZldGNoX3UzMihW YWN1dW1BY3RpdmVOV29ya2VycywgMSk7Cit9CisKKy8qCisgKiBWYWN1dW0gb3IgY2xlYW51cCBp bmRleGVzIHRoYXQgY2FuIGJlIHByb2Nlc3NlZCBieSBvbmx5IHRoZSBsZWFkZXIgcHJvY2Vzcwor ICogYmVjYXVzZSB0aGVzZSBpbmRleGVzIGRvbid0IHN1cHBvcnQgcGFyYWxsZWwgb3BlcmF0aW9u IGF0IHRoYXQgcGhhc2UuCisgKi8KK3N0YXRpYyB2b2lkCit2YWN1dW1faW5kZXhlc19sZWFkZXIo UmVsYXRpb24gKklyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAorCQkJCQkgIExW UmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3RhdGUgKmxwcywKKwkJCQkJICBpbnQg bmluZGV4ZXMpCit7CisJaW50CQkJaTsKKworCUFzc2VydCghSXNQYXJhbGxlbFdvcmtlcigpKTsK KworCS8qCisJICogSW5jcmVtZW50IHRoZSBhY3RpdmUgd29ya2VyIGNvdW50IGlmIHdlIGFyZSBh YmxlIHRvIGxhdW5jaCBhbnkgd29ya2VyLgorCSAqLworCWlmIChWYWN1dW1BY3RpdmVOV29ya2Vy cykKKwkJcGdfYXRvbWljX2FkZF9mZXRjaF91MzIoVmFjdXVtQWN0aXZlTldvcmtlcnMsIDEpOwor CisJZm9yIChpID0gMDsgaSA8IG5pbmRleGVzOyBpKyspCisJeworCQlMVlNoYXJlZEluZFN0YXRz ICpzaGFyZWRfaW5kc3RhdHM7CisKKwkJc2hhcmVkX2luZHN0YXRzID0gZ2V0X2luZHN0YXRzKGxw cy0+bHZzaGFyZWQsIGkpOworCisJCS8qIFByb2Nlc3MgdGhlIGluZGV4ZXMgc2tpcHBlZCBieSBw YXJhbGxlbCB3b3JrZXJzICovCisJCWlmIChzaGFyZWRfaW5kc3RhdHMgPT0gTlVMTCB8fAorCQkJ c2tpcF9wYXJhbGxlbF92YWN1dW1faW5kZXgoSXJlbFtpXSwgbHBzLT5sdnNoYXJlZCkpCisJCQl2 YWN1dW1fb25lX2luZGV4KElyZWxbaV0sICYoc3RhdHNbaV0pLCBscHMtPmx2c2hhcmVkLAorCQkJ CQkJCSBzaGFyZWRfaW5kc3RhdHMsIHZhY3JlbHN0YXRzLT5kZWFkX3R1cGxlcyk7CisJfQorCisJ LyoKKwkgKiBXZSBoYXZlIGNvbXBsZXRlZCB0aGUgaW5kZXggdmFjdXVtIHNvIGRlY3JlbWVudCB0 aGUgYWN0aXZlIHdvcmtlcgorCSAqIGNvdW50LgorCSAqLworCWlmIChWYWN1dW1BY3RpdmVOV29y a2VycykKKwkJcGdfYXRvbWljX3N1Yl9mZXRjaF91MzIoVmFjdXVtQWN0aXZlTldvcmtlcnMsIDEp OworfQorCisvKgorICogVmFjdXVtIG9yIGNsZWFudXAgaW5kZXggZWl0aGVyIGJ5IGxlYWRlciBw cm9jZXNzIG9yIGJ5IG9uZSBvZiB0aGUgd29ya2VyCisgKiBwcm9jZXNzLiAgQWZ0ZXIgcHJvY2Vz c2luZyB0aGUgaW5kZXggdGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGluZGV4CisgKiBzdGF0aXN0 aWNzIHJldHVybmVkIGZyb20gYW1idWxrZGVsZXRlIGFuZCBhbXZhY3V1bWNsZWFudXAgdG8gdGhl IERTTQorICogc2VnbWVudC4KKyAqLworc3RhdGljIHZvaWQKK3ZhY3V1bV9vbmVfaW5kZXgoUmVs YXRpb24gaW5kcmVsLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKipzdGF0cywKKwkJCQkgTFZTaGFy ZWQgKmx2c2hhcmVkLCBMVlNoYXJlZEluZFN0YXRzICpzaGFyZWRfaW5kc3RhdHMsCisJCQkJIExW RGVhZFR1cGxlcyAqZGVhZF90dXBsZXMpCit7CisJSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpidWxr ZGVsZXRlX3JlcyA9IE5VTEw7CisKKwlpZiAoc2hhcmVkX2luZHN0YXRzKQorCXsKKwkJLyogR2V0 IHRoZSBzcGFjZSBmb3IgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICovCisJCWJ1bGtkZWxldGVfcmVz ID0gJihzaGFyZWRfaW5kc3RhdHMtPnN0YXRzKTsKKworCQkvKgorCQkgKiBVcGRhdGUgdGhlIHBv aW50ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYnVsay1kZWxldGlvbiByZXN1bHQgaWYKKwkJICog c29tZW9uZSBoYXMgYWxyZWFkeSB1cGRhdGVkIGl0LgorCQkgKi8KKwkJaWYgKHNoYXJlZF9pbmRz dGF0cy0+dXBkYXRlZCAmJiAqc3RhdHMgPT0gTlVMTCkKKwkJCSpzdGF0cyA9IGJ1bGtkZWxldGVf cmVzOworCX0KKworCS8qIERvIHZhY3V1bSBvciBjbGVhbnVwIG9mIHRoZSBpbmRleCAqLworCWlm IChsdnNoYXJlZC0+Zm9yX2NsZWFudXApCisJCWxhenlfY2xlYW51cF9pbmRleChpbmRyZWwsIHN0 YXRzLCBsdnNoYXJlZC0+cmVsdHVwbGVzLAorCQkJCQkJICAgbHZzaGFyZWQtPmVzdGltYXRlZF9j b3VudCk7CisJZWxzZQorCQlsYXp5X3ZhY3V1bV9pbmRleChpbmRyZWwsIHN0YXRzLCBkZWFkX3R1 cGxlcywKKwkJCQkJCSAgbHZzaGFyZWQtPnJlbHR1cGxlcyk7CisKKwkvKgorCSAqIENvcHkgdGhl IGluZGV4IGJ1bGstZGVsZXRpb24gcmVzdWx0IHJldHVybmVkIGZyb20gYW1idWxrZGVsZXRlIGFu ZAorCSAqIGFtdmFjdXVtY2xlYW51cCB0byB0aGUgRFNNIHNlZ21lbnQgaWYgaXQncyB0aGUgZmly c3QgdGltZSB0byBnZXQgaXQKKwkgKiBmcm9tIHRoZW0sIGJlY2F1c2UgdGhleSBhbGxvY2F0ZSBp dCBsb2NhbGx5IGFuZCBpdCdzIHBvc3NpYmxlIHRoYXQgYW4KKwkgKiBpbmRleCB3aWxsIGJlIHZh Y3V1bWVkIGJ5IHRoZSBkaWZmZXJlbnQgdmFjdXVtIHByb2Nlc3MgYXQgdGhlIG5leHQKKwkgKiB0 aW1lLiAgVGhlIGNvcHlpbmcgb2YgdGhlIHJlc3VsdCBub3JtYWxseSBoYXBwZW5zIG9ubHkgYWZ0 ZXIgdGhlIGZpcnN0CisJICogdGltZSBvZiBpbmRleCB2YWN1dW1pbmcuICBGcm9tIHRoZSBzZWNv bmQgdGltZSwgd2UgcGFzcyB0aGUgcmVzdWx0IG9uCisJICogdGhlIERTTSBzZWdtZW50IHNvIHRo YXQgdGhleSB0aGVuIHVwZGF0ZSBpdCBkaXJlY3RseS4KKwkgKgorCSAqIFNpbmNlIGFsbCB2YWN1 dW0gd29ya2VycyB3cml0ZSB0aGUgYnVsay1kZWxldGlvbiByZXN1bHQgYXQgZGlmZmVyZW50CisJ ICogc2xvdHMgd2UgY2FuIHdyaXRlIHRoZW0gd2l0aG91dCBsb2NraW5nLgorCSAqLworCWlmIChz aGFyZWRfaW5kc3RhdHMgJiYgIXNoYXJlZF9pbmRzdGF0cy0+dXBkYXRlZCAmJiAqc3RhdHMgIT0g TlVMTCkKKwl7CisJCW1lbWNweShidWxrZGVsZXRlX3JlcywgKnN0YXRzLCBzaXplb2YoSW5kZXhC dWxrRGVsZXRlUmVzdWx0KSk7CisJCXNoYXJlZF9pbmRzdGF0cy0+dXBkYXRlZCA9IHRydWU7CisK KwkJLyoKKwkJICogTm93IHRoYXQgdGhlIHN0YXRzW2lkeF0gcG9pbnRzIHRvIHRoZSBEU00gc2Vn bWVudCwgd2UgZG9uJ3QgbmVlZAorCQkgKiB0aGUgbG9jYWxseSBhbGxvY2F0ZWQgcmVzdWx0cy4K KwkJICovCisJCXBmcmVlKCpzdGF0cyk7CisJCSpzdGF0cyA9IGJ1bGtkZWxldGVfcmVzOworCX0K K30KKworLyoKKyAqCWxhenlfY2xlYW51cF9hbGxfaW5kZXhlcygpIC0tIGNsZWFudXAgYWxsIGlu ZGV4ZXMgb2YgcmVsYXRpb24uCisgKgorICogQ2xlYW51cCBpbmRleGVzLiAgV2UgcHJvY2VzcyB0 aGUgaW5kZXhlcyBzZXJpYWxseSB1bmxlc3Mgd2UgYXJlIGRvaW5nCisgKiBwYXJhbGxlbCB2YWN1 dW0uCisgKi8KK3N0YXRpYyB2b2lkCitsYXp5X2NsZWFudXBfYWxsX2luZGV4ZXMoUmVsYXRpb24g KklyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAorCQkJCQkJIExWUmVsU3RhdHMg KnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3RhdGUgKmxwcywKKwkJCQkJCSBpbnQgbmluZGV4ZXMp Cit7CisJaW50CQkJaWR4OworCisJQXNzZXJ0KCFJc1BhcmFsbGVsV29ya2VyKCkpOworCUFzc2Vy dChuaW5kZXhlcyA+IDApOworCisJLyogUmVwb3J0IHRoYXQgd2UgYXJlIG5vdyBjbGVhbmluZyB1 cCBpbmRleGVzICovCisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19WQUNV VU1fUEhBU0UsCisJCQkJCQkJCSBQUk9HUkVTU19WQUNVVU1fUEhBU0VfSU5ERVhfQ0xFQU5VUCk7 CisKKwkvKgorCSAqIElmIHBhcmFsbGVsIHZhY3V1bSBpcyBhY3RpdmUgd2UgcGVyZm9ybSBpbmRl eCBjbGVhbnVwIHdpdGggcGFyYWxsZWwKKwkgKiB3b3JrZXJzLgorCSAqLworCWlmIChQYXJhbGxl bFZhY3V1bUlzQWN0aXZlKGxwcykpCisJeworCQkvKiBUZWxsIHBhcmFsbGVsIHdvcmtlcnMgdG8g ZG8gaW5kZXggY2xlYW51cCAqLworCQlscHMtPmx2c2hhcmVkLT5mb3JfY2xlYW51cCA9IHRydWU7 CisJCWxwcy0+bHZzaGFyZWQtPmZpcnN0X3RpbWUgPQorCQkJKHZhY3JlbHN0YXRzLT5udW1faW5k ZXhfc2NhbnMgPT0gMCk7CisKKwkJLyoKKwkJICogTm93IHdlIGNhbiBwcm92aWRlIGEgYmV0dGVy IGVzdGltYXRlIG9mIHRvdGFsIG51bWJlciBvZiBzdXJ2aXZpbmcKKwkJICogdHVwbGVzICh3ZSBh c3N1bWUgaW5kZXhlcyBhcmUgbW9yZSBpbnRlcmVzdGVkIGluIHRoYXQgdGhhbiBpbiB0aGUKKwkJ ICogbnVtYmVyIG9mIG5vbWluYWxseSBsaXZlIHR1cGxlcykuCisJCSAqLworCQlscHMtPmx2c2hh cmVkLT5yZWx0dXBsZXMgPSB2YWNyZWxzdGF0cy0+bmV3X3JlbF90dXBsZXM7CisJCWxwcy0+bHZz aGFyZWQtPmVzdGltYXRlZF9jb3VudCA9CisJCQkodmFjcmVsc3RhdHMtPnR1cGNvdW50X3BhZ2Vz IDwgdmFjcmVsc3RhdHMtPnJlbF9wYWdlcyk7CisKKwkJbGF6eV9wYXJhbGxlbF92YWN1dW1faW5k ZXhlcyhJcmVsLCBzdGF0cywgdmFjcmVsc3RhdHMsIGxwcywgbmluZGV4ZXMpOworCX0KKwllbHNl CisJeworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IG5pbmRleGVzOyBpZHgrKykKKwkJCWxhenlfY2xl YW51cF9pbmRleChJcmVsW2lkeF0sICZzdGF0c1tpZHhdLAorCQkJCQkJCSAgIHZhY3JlbHN0YXRz LT5uZXdfcmVsX3R1cGxlcywKKwkJCQkJCQkgICB2YWNyZWxzdGF0cy0+dHVwY291bnRfcGFnZXMg PCB2YWNyZWxzdGF0cy0+cmVsX3BhZ2VzKTsKKwl9Cit9CiAKIC8qCiAgKglsYXp5X3ZhY3V1bV9p bmRleCgpIC0tIHZhY3V1bSBvbmUgaW5kZXggcmVsYXRpb24uCiAgKgogICoJCURlbGV0ZSBhbGwg dGhlIGluZGV4IGVudHJpZXMgcG9pbnRpbmcgdG8gdHVwbGVzIGxpc3RlZCBpbgotICoJCXZhY3Jl bHN0YXRzLT5kZWFkX3R1cGxlcywgYW5kIHVwZGF0ZSBydW5uaW5nIHN0YXRpc3RpY3MuCisgKgkJ ZGVhZF90dXBsZXMsIGFuZCB1cGRhdGUgcnVubmluZyBzdGF0aXN0aWNzLgorICoKKyAqCQlyZWx0 dXBsZXMgaXMgdGhlIG51bWJlciBvZiBoZWFwIHR1cGxlcyB0byBiZSBwYXNzZWQgdG8gdGhlCisg KgkJYnVsa2RlbGV0ZSBjYWxsYmFjay4KICAqLwogc3RhdGljIHZvaWQKLWxhenlfdmFjdXVtX2lu ZGV4KFJlbGF0aW9uIGluZHJlbCwKLQkJCQkgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRz LAotCQkJCSAgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMpCitsYXp5X3ZhY3V1bV9pbmRleChSZWxh dGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAorCQkJCSAgTFZEZWFk VHVwbGVzICpkZWFkX3R1cGxlcywgZG91YmxlIHJlbHR1cGxlcykKIHsKIAlJbmRleFZhY3V1bUlu Zm8gaXZpbmZvOworCWNvbnN0IGNoYXIgKm1zZzsKIAlQR1JVc2FnZQlydTA7CiAKIAlwZ19ydXNh Z2VfaW5pdCgmcnUwKTsKQEAgLTE3NDEsMzAgKzIzMzAsMzggQEAgbGF6eV92YWN1dW1faW5kZXgo UmVsYXRpb24gaW5kcmVsLAogCWl2aW5mby5yZXBvcnRfcHJvZ3Jlc3MgPSBmYWxzZTsKIAlpdmlu Zm8uZXN0aW1hdGVkX2NvdW50ID0gdHJ1ZTsKIAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IGVsZXZl bDsKLQkvKiBXZSBjYW4gb25seSBwcm92aWRlIGFuIGFwcHJveGltYXRlIHZhbHVlIG9mIG51bV9o ZWFwX3R1cGxlcyBoZXJlICovCi0JaXZpbmZvLm51bV9oZWFwX3R1cGxlcyA9IHZhY3JlbHN0YXRz LT5vbGRfbGl2ZV90dXBsZXM7CisJaXZpbmZvLm51bV9oZWFwX3R1cGxlcyA9IHJlbHR1cGxlczsK IAlpdmluZm8uc3RyYXRlZ3kgPSB2YWNfc3RyYXRlZ3k7CiAKIAkvKiBEbyBidWxrIGRlbGV0aW9u ICovCiAJKnN0YXRzID0gaW5kZXhfYnVsa19kZWxldGUoJml2aW5mbywgKnN0YXRzLAotCQkJCQkJ CSAgIGxhenlfdGlkX3JlYXBlZCwgKHZvaWQgKikgdmFjcmVsc3RhdHMpOworCQkJCQkJCSAgIGxh enlfdGlkX3JlYXBlZCwgKHZvaWQgKikgZGVhZF90dXBsZXMpOworCisJaWYgKElzUGFyYWxsZWxX b3JrZXIoKSkKKwkJbXNnID0gZ2V0dGV4dF9ub29wKCJzY2FubmVkIGluZGV4IFwiJXNcIiB0byBy ZW1vdmUgJWQgcm93IHZlcnNpb25zIGJ5IHBhcmFsbGVsIHZhY3V1bSB3b3JrZXIiKTsKKwllbHNl CisJCW1zZyA9IGdldHRleHRfbm9vcCgic2Nhbm5lZCBpbmRleCBcIiVzXCIgdG8gcmVtb3ZlICVk IHJvdyB2ZXJzaW9ucyIpOwogCiAJZXJlcG9ydChlbGV2ZWwsCi0JCQkoZXJybXNnKCJzY2FubmVk IGluZGV4IFwiJXNcIiB0byByZW1vdmUgJWQgcm93IHZlcnNpb25zIiwKKwkJCShlcnJtc2cobXNn LAogCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpbmRyZWwpLAotCQkJCQl2YWNyZWxzdGF0 cy0+bnVtX2RlYWRfdHVwbGVzKSwKKwkJCQkJZGVhZF90dXBsZXMtPm51bV90dXBsZXMpLAogCQkJ IGVycmRldGFpbF9pbnRlcm5hbCgiJXMiLCBwZ19ydXNhZ2Vfc2hvdygmcnUwKSkpKTsKIH0KIAog LyoKICAqCWxhenlfY2xlYW51cF9pbmRleCgpIC0tIGRvIHBvc3QtdmFjdXVtIGNsZWFudXAgZm9y IG9uZSBpbmRleCByZWxhdGlvbi4KKyAqCisgKgkJcmVsdHVwbGVzIGlzIHRoZSBudW1iZXIgb2Yg aGVhcCB0dXBsZXMgYW5kIGVzdGltYXRlZF9jb3VudCBpcyB0cnVlCisgKgkJaWYgdGhlIHJlbHR1 cGxlcyBpcyBhbiBlc3RpbWF0ZWQgdmFsdWUuCiAgKi8KIHN0YXRpYyB2b2lkCiBsYXp5X2NsZWFu dXBfaW5kZXgoUmVsYXRpb24gaW5kcmVsLAotCQkJCSAgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq c3RhdHMsCi0JCQkJICAgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMpCisJCQkJICAgSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJICAgZG91YmxlIHJlbHR1cGxlcywgYm9vbCBlc3Rp bWF0ZWRfY291bnQpCiB7CiAJSW5kZXhWYWN1dW1JbmZvIGl2aW5mbzsKKwljb25zdCBjaGFyICpt c2c7CiAJUEdSVXNhZ2UJcnUwOwogCiAJcGdfcnVzYWdlX2luaXQoJnJ1MCk7CkBAIC0xNzcyLDQ5 ICsyMzY5LDMzIEBAIGxhenlfY2xlYW51cF9pbmRleChSZWxhdGlvbiBpbmRyZWwsCiAJaXZpbmZv LmluZGV4ID0gaW5kcmVsOwogCWl2aW5mby5hbmFseXplX29ubHkgPSBmYWxzZTsKIAlpdmluZm8u cmVwb3J0X3Byb2dyZXNzID0gZmFsc2U7Ci0JaXZpbmZvLmVzdGltYXRlZF9jb3VudCA9ICh2YWNy ZWxzdGF0cy0+dHVwY291bnRfcGFnZXMgPCB2YWNyZWxzdGF0cy0+cmVsX3BhZ2VzKTsKKwlpdmlu Zm8uZXN0aW1hdGVkX2NvdW50ID0gZXN0aW1hdGVkX2NvdW50OwogCWl2aW5mby5tZXNzYWdlX2xl dmVsID0gZWxldmVsOwogCi0JLyoKLQkgKiBOb3cgd2UgY2FuIHByb3ZpZGUgYSBiZXR0ZXIgZXN0 aW1hdGUgb2YgdG90YWwgbnVtYmVyIG9mIHN1cnZpdmluZwotCSAqIHR1cGxlcyAod2UgYXNzdW1l IGluZGV4ZXMgYXJlIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGF0IHRoYW4gaW4gdGhlCi0JICogbnVt YmVyIG9mIG5vbWluYWxseSBsaXZlIHR1cGxlcykuCi0JICovCi0JaXZpbmZvLm51bV9oZWFwX3R1 cGxlcyA9IHZhY3JlbHN0YXRzLT5uZXdfcmVsX3R1cGxlczsKKwlpdmluZm8ubnVtX2hlYXBfdHVw bGVzID0gcmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IHZhY19zdHJhdGVneTsKIAotCXN0 YXRzID0gaW5kZXhfdmFjdXVtX2NsZWFudXAoJml2aW5mbywgc3RhdHMpOworCSpzdGF0cyA9IGlu ZGV4X3ZhY3V1bV9jbGVhbnVwKCZpdmluZm8sICpzdGF0cyk7CiAKLQlpZiAoIXN0YXRzKQorCWlm ICghKCpzdGF0cykpCiAJCXJldHVybjsKIAotCS8qCi0JICogTm93IHVwZGF0ZSBzdGF0aXN0aWNz IGluIHBnX2NsYXNzLCBidXQgb25seSBpZiB0aGUgaW5kZXggc2F5cyB0aGUgY291bnQKLQkgKiBp cyBhY2N1cmF0ZS4KLQkgKi8KLQlpZiAoIXN0YXRzLT5lc3RpbWF0ZWRfY291bnQpCi0JCXZhY191 cGRhdGVfcmVsc3RhdHMoaW5kcmVsLAotCQkJCQkJCXN0YXRzLT5udW1fcGFnZXMsCi0JCQkJCQkJ c3RhdHMtPm51bV9pbmRleF90dXBsZXMsCi0JCQkJCQkJMCwKLQkJCQkJCQlmYWxzZSwKLQkJCQkJ CQlJbnZhbGlkVHJhbnNhY3Rpb25JZCwKLQkJCQkJCQlJbnZhbGlkTXVsdGlYYWN0SWQsCi0JCQkJ CQkJZmFsc2UpOworCWlmIChJc1BhcmFsbGVsV29ya2VyKCkpCisJCW1zZyA9IGdldHRleHRfbm9v cCgiaW5kZXggXCIlc1wiIG5vdyBjb250YWlucyAlLjBmIHJvdyB2ZXJzaW9ucyBpbiAldSBwYWdl cyBhcyByZXBvcnRlZCBieSBwYXJhbGxlbCB2YWN1dW0gd29ya2VyIik7CisJZWxzZQorCQltc2cg PSBnZXR0ZXh0X25vb3AoImluZGV4IFwiJXNcIiBub3cgY29udGFpbnMgJS4wZiByb3cgdmVyc2lv bnMgaW4gJXUgcGFnZXMiKTsKIAogCWVyZXBvcnQoZWxldmVsLAotCQkJKGVycm1zZygiaW5kZXgg XCIlc1wiIG5vdyBjb250YWlucyAlLjBmIHJvdyB2ZXJzaW9ucyBpbiAldSBwYWdlcyIsCisJCQko ZXJybXNnKG1zZywKIAkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaW5kcmVsKSwKLQkJCQkJ c3RhdHMtPm51bV9pbmRleF90dXBsZXMsCi0JCQkJCXN0YXRzLT5udW1fcGFnZXMpLAorCQkJCQko KnN0YXRzKS0+bnVtX2luZGV4X3R1cGxlcywKKwkJCQkJKCpzdGF0cyktPm51bV9wYWdlcyksCiAJ CQkgZXJyZGV0YWlsKCIlLjBmIGluZGV4IHJvdyB2ZXJzaW9ucyB3ZXJlIHJlbW92ZWQuXG4iCiAJ CQkJCSAgICIldSBpbmRleCBwYWdlcyBoYXZlIGJlZW4gZGVsZXRlZCwgJXUgYXJlIGN1cnJlbnRs eSByZXVzYWJsZS5cbiIKIAkJCQkJICAgIiVzLiIsCi0JCQkJCSAgIHN0YXRzLT50dXBsZXNfcmVt b3ZlZCwKLQkJCQkJICAgc3RhdHMtPnBhZ2VzX2RlbGV0ZWQsIHN0YXRzLT5wYWdlc19mcmVlLAor CQkJCQkgICAoKnN0YXRzKS0+dHVwbGVzX3JlbW92ZWQsCisJCQkJCSAgICgqc3RhdHMpLT5wYWdl c19kZWxldGVkLCAoKnN0YXRzKS0+cGFnZXNfZnJlZSwKIAkJCQkJICAgcGdfcnVzYWdlX3Nob3co JnJ1MCkpKSk7Ci0KLQlwZnJlZShzdGF0cyk7CiB9CiAKIC8qCkBAIC0yMTIyLDE5ICsyNzAzLDE3 IEBAIGNvdW50X25vbmRlbGV0YWJsZV9wYWdlcyhSZWxhdGlvbiBvbmVyZWwsIExWUmVsU3RhdHMg KnZhY3JlbHN0YXRzKQogfQogCiAvKgotICogbGF6eV9zcGFjZV9hbGxvYyAtIHNwYWNlIGFsbG9j YXRpb24gZGVjaXNpb25zIGZvciBsYXp5IHZhY3V1bQotICoKLSAqIFNlZSB0aGUgY29tbWVudHMg YXQgdGhlIGhlYWQgb2YgdGhpcyBmaWxlIGZvciByYXRpb25hbGUuCisgKiBSZXR1cm4gdGhlIG1h eGltdW0gbnVtYmVyIG9mIGRlYWQgdHVwbGVzIHdlIGNhbiByZWNvcmQuCiAgKi8KLXN0YXRpYyB2 b2lkCi1sYXp5X3NwYWNlX2FsbG9jKExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBCbG9ja051bWJl ciByZWxibG9ja3MpCitzdGF0aWMgbG9uZworY29tcHV0ZV9tYXhfZGVhZF90dXBsZXMoQmxvY2tO dW1iZXIgcmVsYmxvY2tzLCBib29sIHVzZWluZGV4KQogewogCWxvbmcJCW1heHR1cGxlczsKIAlp bnQJCQl2YWNfd29ya19tZW0gPSBJc0F1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgJiYKIAlhdXRv dmFjdXVtX3dvcmtfbWVtICE9IC0xID8KIAlhdXRvdmFjdXVtX3dvcmtfbWVtIDogbWFpbnRlbmFu Y2Vfd29ya19tZW07CiAKLQlpZiAodmFjcmVsc3RhdHMtPnVzZWluZGV4KQorCWlmICh1c2VpbmRl eCkKIAl7CiAJCW1heHR1cGxlcyA9ICh2YWNfd29ya19tZW0gKiAxMDI0TCkgLyBzaXplb2YoSXRl bVBvaW50ZXJEYXRhKTsKIAkJbWF4dHVwbGVzID0gTWluKG1heHR1cGxlcywgSU5UX01BWCk7CkBA IC0yMTQ4LDM0ICsyNzI3LDQ4IEBAIGxhenlfc3BhY2VfYWxsb2MoTFZSZWxTdGF0cyAqdmFjcmVs c3RhdHMsIEJsb2NrTnVtYmVyIHJlbGJsb2NrcykKIAkJbWF4dHVwbGVzID0gTWF4KG1heHR1cGxl cywgTWF4SGVhcFR1cGxlc1BlclBhZ2UpOwogCX0KIAllbHNlCi0JewogCQltYXh0dXBsZXMgPSBN YXhIZWFwVHVwbGVzUGVyUGFnZTsKLQl9CiAKLQl2YWNyZWxzdGF0cy0+bnVtX2RlYWRfdHVwbGVz ID0gMDsKLQl2YWNyZWxzdGF0cy0+bWF4X2RlYWRfdHVwbGVzID0gKGludCkgbWF4dHVwbGVzOwot CXZhY3JlbHN0YXRzLT5kZWFkX3R1cGxlcyA9IChJdGVtUG9pbnRlcikKLQkJcGFsbG9jKG1heHR1 cGxlcyAqIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKwlyZXR1cm4gbWF4dHVwbGVzOworfQor CisvKgorICogbGF6eV9zcGFjZV9hbGxvYyAtIHNwYWNlIGFsbG9jYXRpb24gZGVjaXNpb25zIGZv ciBsYXp5IHZhY3V1bQorICoKKyAqIFNlZSB0aGUgY29tbWVudHMgYXQgdGhlIGhlYWQgb2YgdGhp cyBmaWxlIGZvciByYXRpb25hbGUuCisgKi8KK3N0YXRpYyB2b2lkCitsYXp5X3NwYWNlX2FsbG9j KExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBCbG9ja051bWJlciByZWxibG9ja3MpCit7CisJTFZE ZWFkVHVwbGVzICpkZWFkX3R1cGxlcyA9IE5VTEw7CisJbG9uZwkJbWF4dHVwbGVzOworCisJbWF4 dHVwbGVzID0gY29tcHV0ZV9tYXhfZGVhZF90dXBsZXMocmVsYmxvY2tzLCB2YWNyZWxzdGF0cy0+ dXNlaW5kZXgpOworCisJZGVhZF90dXBsZXMgPSAoTFZEZWFkVHVwbGVzICopIHBhbGxvYyhTaXpl T2ZMVkRlYWRUdXBsZXMobWF4dHVwbGVzKSk7CisJZGVhZF90dXBsZXMtPm51bV90dXBsZXMgPSAw OworCWRlYWRfdHVwbGVzLT5tYXhfdHVwbGVzID0gKGludCkgbWF4dHVwbGVzOworCisJdmFjcmVs c3RhdHMtPmRlYWRfdHVwbGVzID0gZGVhZF90dXBsZXM7CiB9CiAKIC8qCiAgKiBsYXp5X3JlY29y ZF9kZWFkX3R1cGxlIC0gcmVtZW1iZXIgb25lIGRlbGV0YWJsZSB0dXBsZQogICovCiBzdGF0aWMg dm9pZAotbGF6eV9yZWNvcmRfZGVhZF90dXBsZShMVlJlbFN0YXRzICp2YWNyZWxzdGF0cywKLQkJ CQkJICAgSXRlbVBvaW50ZXIgaXRlbXB0cikKK2xhenlfcmVjb3JkX2RlYWRfdHVwbGUoTFZEZWFk VHVwbGVzICpkZWFkX3R1cGxlcywgSXRlbVBvaW50ZXIgaXRlbXB0cikKIHsKIAkvKgogCSAqIFRo ZSBhcnJheSBzaG91bGRuJ3Qgb3ZlcmZsb3cgdW5kZXIgbm9ybWFsIGJlaGF2aW9yLCBidXQgcGVy aGFwcyBpdAogCSAqIGNvdWxkIGlmIHdlIGFyZSBnaXZlbiBhIHJlYWxseSBzbWFsbCBtYWludGVu YW5jZV93b3JrX21lbS4gSW4gdGhhdAogCSAqIGNhc2UsIGp1c3QgZm9yZ2V0IHRoZSBsYXN0IGZl dyB0dXBsZXMgKHdlJ2xsIGdldCAnZW0gbmV4dCB0aW1lKS4KIAkgKi8KLQlpZiAodmFjcmVsc3Rh dHMtPm51bV9kZWFkX3R1cGxlcyA8IHZhY3JlbHN0YXRzLT5tYXhfZGVhZF90dXBsZXMpCisJaWYg KGRlYWRfdHVwbGVzLT5udW1fdHVwbGVzIDwgZGVhZF90dXBsZXMtPm1heF90dXBsZXMpCiAJewot CQl2YWNyZWxzdGF0cy0+ZGVhZF90dXBsZXNbdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlc10g PSAqaXRlbXB0cjsKLQkJdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlcysrOworCQlkZWFkX3R1 cGxlcy0+aXRlbXB0cnNbZGVhZF90dXBsZXMtPm51bV90dXBsZXNdID0gKml0ZW1wdHI7CisJCWRl YWRfdHVwbGVzLT5udW1fdHVwbGVzKys7CiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0o UFJPR1JFU1NfVkFDVVVNX05VTV9ERUFEX1RVUExFUywKLQkJCQkJCQkJCSB2YWNyZWxzdGF0cy0+ bnVtX2RlYWRfdHVwbGVzKTsKKwkJCQkJCQkJCSBkZWFkX3R1cGxlcy0+bnVtX3R1cGxlcyk7CiAJ fQogfQogCkBAIC0yMTg5LDEyICsyNzgyLDEyIEBAIGxhenlfcmVjb3JkX2RlYWRfdHVwbGUoTFZS ZWxTdGF0cyAqdmFjcmVsc3RhdHMsCiBzdGF0aWMgYm9vbAogbGF6eV90aWRfcmVhcGVkKEl0ZW1Q b2ludGVyIGl0ZW1wdHIsIHZvaWQgKnN0YXRlKQogewotCUxWUmVsU3RhdHMgKnZhY3JlbHN0YXRz ID0gKExWUmVsU3RhdHMgKikgc3RhdGU7CisJTFZEZWFkVHVwbGVzICpkZWFkX3R1cGxlcyA9IChM VkRlYWRUdXBsZXMgKikgc3RhdGU7CiAJSXRlbVBvaW50ZXIgcmVzOwogCiAJcmVzID0gKEl0ZW1Q b2ludGVyKSBic2VhcmNoKCh2b2lkICopIGl0ZW1wdHIsCi0JCQkJCQkJCSh2b2lkICopIHZhY3Jl bHN0YXRzLT5kZWFkX3R1cGxlcywKLQkJCQkJCQkJdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxl cywKKwkJCQkJCQkJKHZvaWQgKikgZGVhZF90dXBsZXMtPml0ZW1wdHJzLAorCQkJCQkJCQlkZWFk X3R1cGxlcy0+bnVtX3R1cGxlcywKIAkJCQkJCQkJc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSksCiAJ CQkJCQkJCXZhY19jbXBfaXRlbXB0cik7CiAKQEAgLTIzNDIsMyArMjkzNSw0NDkgQEAgaGVhcF9w YWdlX2lzX2FsbF92aXNpYmxlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwKIAogCXJldHVybiBh bGxfdmlzaWJsZTsKIH0KKworLyoKKyAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBwYXJhbGxlbCB3 b3JrZXIgcHJvY2Vzc2VzIHRvIHJlcXVlc3QuICBCb3RoIGluZGV4CisgKiB2YWN1dW0gYW5kIGlu ZGV4IGNsZWFudXAgY2FuIGJlIGV4ZWN1dGVkIHdpdGggcGFyYWxsZWwgd29ya2Vycy4gIFRoZQor ICogcmVsYXRpb24gc2l6ZSBvZiB0aGUgdGFibGUgZG9uJ3QgYWZmZWN0IHRoZSBwYXJhbGxlbCBk ZWdyZWUgZm9yIG5vdy4KKyAqCisgKiBucmVxdWVzdGVkIGlzIHRoZSBudW1iZXIgb2YgcGFyYWxs ZWwgd29ya2VycyB0aGF0IHVzZXIgcmVxdWVzdGVkLiAgSWYKKyAqIG5yZXF1ZXN0ZWQgaXMgMCwg d2UgY29tcHV0ZSB0aGUgcGFyYWxsZWwgZGVncmVlIGJhc2VkIG9uIG5pbmRleGVzLCB0aGF0IGlz CisgKiB0aGUgbnVtYmVyIG9mIGluZGV4ZXMgdGhhdCBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHZh Y3V1bWluZy4gIFRoaXMgZnVuY3Rpb24KKyAqIGFsc28gc2V0cyBjYW5fcGFyYWxsZWxfdmFjdXVt IHRvIHJlbWVtYmVyIGluZGV4ZXMgdGhhdCBwYXJ0aWNpcGF0ZSBpbgorICogcGFyYWxsZWwgaW5k ZXggdmFjdXVtLgorICovCitzdGF0aWMgaW50Citjb21wdXRlX3BhcmFsbGVsX3ZhY3V1bV93b3Jr ZXJzKFJlbGF0aW9uICpJcmVsLCBpbnQgbmluZGV4ZXMsIGludCBucmVxdWVzdGVkLAorCQkJCQkJ CQlib29sICpjYW5fcGFyYWxsZWxfdmFjdXVtKQoreworCWludAkJCW5pbmRleGVzX3BhcmFsbGVs ID0gMDsKKwlpbnQJCQluaW5kZXhlc19wYXJhbGxlbF9idWxrZGVsID0gMDsKKwlpbnQJCQluaW5k ZXhlc19wYXJhbGxlbF9jbGVhbnVwID0gMDsKKwlpbnQJCQlwYXJhbGxlbF93b3JrZXJzOworCWlu dAkJCWk7CisKKwkvKgorCSAqIFdlIGRvbid0IGFsbG93IHRvIHBlcmZvcm0gcGFyYWxsZWwgb3Bl cmF0aW9uIGluIHN0YW5kYWxvbmUgYmFja2VuZCBvcgorCSAqIHdoZW4gcGFyYWxsZWxpc20gaXMg ZGlzYWJsZWQuCisJICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlciB8fCBtYXhfcGFyYWxsZWxf bWFpbnRlbmFuY2Vfd29ya2VycyA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ29tcHV0 ZSB0aGUgbnVtYmVyIG9mIGluZGV4ZXMgdGhhdCBjYW4gcGFydGljaXBhdGUgaW4gcGFyYWxsZWwg aW5kZXgKKwkgKiB2YWN1dW1pbmcuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5pbmRleGVzOyBp KyspCisJeworCQl1aW50OAkJdmFjb3B0aW9ucyA9IElyZWxbaV0tPnJkX2luZGFtLT5hbXBhcmFs bGVsdmFjdXVtb3B0aW9uczsKKworCQlpZiAodmFjb3B0aW9ucyA9PSBWQUNVVU1fT1BUSU9OX05P X1BBUkFMTEVMIHx8CisJCQlSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKElyZWxbaV0pIDwgbWlu X3BhcmFsbGVsX2luZGV4X3NjYW5fc2l6ZSkKKwkJCWNvbnRpbnVlOworCisJCWNhbl9wYXJhbGxl bF92YWN1dW1baV0gPSB0cnVlOworCisJCWlmICgodmFjb3B0aW9ucyAmIFZBQ1VVTV9PUFRJT05f UEFSQUxMRUxfQlVMS0RFTCkgIT0gMCkKKwkJCW5pbmRleGVzX3BhcmFsbGVsX2J1bGtkZWwrKzsK KwkJaWYgKCgodmFjb3B0aW9ucyAmIFZBQ1VVTV9PUFRJT05fUEFSQUxMRUxfQ0xFQU5VUCkgIT0g MCkgfHwKKwkJCSgodmFjb3B0aW9ucyAmIFZBQ1VVTV9PUFRJT05fUEFSQUxMRUxfQ09ORF9DTEVB TlVQKSAhPSAwKSkKKwkJCW5pbmRleGVzX3BhcmFsbGVsX2NsZWFudXArKzsKKwl9CisKKwluaW5k ZXhlc19wYXJhbGxlbCA9IE1heChuaW5kZXhlc19wYXJhbGxlbF9idWxrZGVsLAorCQkJCQkJCW5p bmRleGVzX3BhcmFsbGVsX2NsZWFudXApOworCisJLyogTm8gaW5kZXggc3VwcG9ydHMgcGFyYWxs ZWwgaW5kZXggdmFjdXVtaW5nICovCisJaWYgKG5pbmRleGVzX3BhcmFsbGVsID09IDApCisJCXJl dHVybiAwOworCisJLyogVGhlIGxlYWRlciBwcm9jZXNzIHRha2VzIG9uZSBpbmRleCAqLworCW5p bmRleGVzX3BhcmFsbGVsLS07CisKKwkvKiBDb21wdXRlIHRoZSBwYXJhbGxlbCBkZWdyZWUgKi8K KwlwYXJhbGxlbF93b3JrZXJzID0gKG5yZXF1ZXN0ZWQgPiAwKSA/CisJCU1pbihucmVxdWVzdGVk LCBuaW5kZXhlc19wYXJhbGxlbCkgOiBuaW5kZXhlc19wYXJhbGxlbDsKKworCS8qIENhcCBieSBt YXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2VycyAqLworCXBhcmFsbGVsX3dvcmtlcnMgPSBN aW4ocGFyYWxsZWxfd29ya2VycywgbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMpOwor CisJcmV0dXJuIHBhcmFsbGVsX3dvcmtlcnM7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHZhcmlh YmxlcyBmb3Igc2hhcmVkIGluZGV4IHN0YXRpc3RpY3MsIHNldCBOVUxMIGJpdG1hcCBhbmQgdGhl CisgKiBzaXplIG9mIHN0YXRzIGZvciBlYWNoIGluZGV4LgorICovCitzdGF0aWMgdm9pZAorcHJl cGFyZV9pbmRleF9zdGF0aXN0aWNzKExWU2hhcmVkICpsdnNoYXJlZCwgYm9vbCAqY2FuX3BhcmFs bGVsX3ZhY3V1bSwKKwkJCQkJCSBpbnQgbmluZGV4ZXMpCit7CisJaW50CQkJaTsKKworCS8qIEN1 cnJlbnRseSwgd2UgZG9uJ3Qgc3VwcG9ydCBwYXJhbGxlbCB2YWN1dW0gZm9yIGF1dG92YWN1dW0g Ki8KKwlBc3NlcnQoIUlzQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSk7CisKKwkvKiBTZXQgTlVM TCBmb3IgYWxsIGluZGV4ZXMgKi8KKwltZW1zZXQobHZzaGFyZWQtPmJpdG1hcCwgMHgwMCwgQklU TUFQTEVOKG5pbmRleGVzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmluZGV4ZXM7IGkrKykKKwl7 CisJCWlmICghY2FuX3BhcmFsbGVsX3ZhY3V1bVtpXSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNl dCBOT1QgTlVMTCBhcyB0aGlzIGluZGV4IGRvIHN1cHBvcnQgcGFyYWxsZWxpc20gKi8KKwkJbHZz aGFyZWQtPmJpdG1hcFtpID4+IDNdIHw9IDEgPDwgKGkgJiAweDA3KTsKKwl9Cit9CisKKy8qCisg KiBVcGRhdGUgaW5kZXggc3RhdGlzdGljcyBpbiBwZ19jbGFzcyBpZiB0aGUgc3RhdGlzdGljcyBp cyBhY2N1cmF0ZS4KKyAqLworc3RhdGljIHZvaWQKK3VwZGF0ZV9pbmRleF9zdGF0aXN0aWNzKFJl bGF0aW9uICpJcmVsLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKipzdGF0cywKKwkJCQkJCWludCBu aW5kZXhlcykKK3sKKwlpbnQJCQlpOworCisJQXNzZXJ0KCFJc0luUGFyYWxsZWxNb2RlKCkpOwor CisJZm9yIChpID0gMDsgaSA8IG5pbmRleGVzOyBpKyspCisJeworCQlpZiAoc3RhdHNbaV0gPT0g TlVMTCB8fCBzdGF0c1tpXS0+ZXN0aW1hdGVkX2NvdW50KQorCQkJY29udGludWU7CisKKwkJLyog VXBkYXRlIGluZGV4IHN0YXRpc3RpY3MgKi8KKwkJdmFjX3VwZGF0ZV9yZWxzdGF0cyhJcmVsW2ld LAorCQkJCQkJCXN0YXRzW2ldLT5udW1fcGFnZXMsCisJCQkJCQkJc3RhdHNbaV0tPm51bV9pbmRl eF90dXBsZXMsCisJCQkJCQkJMCwKKwkJCQkJCQlmYWxzZSwKKwkJCQkJCQlJbnZhbGlkVHJhbnNh Y3Rpb25JZCwKKwkJCQkJCQlJbnZhbGlkTXVsdGlYYWN0SWQsCisJCQkJCQkJZmFsc2UpOworCQlw ZnJlZShzdGF0c1tpXSk7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBh bmQgcmV0dXJucyBwYXJhbGxlbCB2YWN1dW0gc3RhdGUgaWYgd2UgY2FuIGxhdW5jaAorICogZXZl biBvbmUgd29ya2VyLiAgVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSB0byBjcmVhdGUgYSBw YXJhbGxlbAorICogY29udGV4dCwgZW50ZXIgcGFyYWxsZWwgbW9kZSwgYW5kIHRoZW4gaW5pdGlh bGl6ZSB0aGUgRFNNIHNlZ21lbnQuCisgKi8KK3N0YXRpYyBMVlBhcmFsbGVsU3RhdGUgKgorYmVn aW5fcGFyYWxsZWxfdmFjdXVtKE9pZCByZWxpZCwgUmVsYXRpb24gKklyZWwsIExWUmVsU3RhdHMg KnZhY3JlbHN0YXRzLAorCQkJCQkgIEJsb2NrTnVtYmVyIG5ibG9ja3MsIGludCBuaW5kZXhlcywg aW50IG5yZXF1ZXN0ZWQpCit7CisJTFZQYXJhbGxlbFN0YXRlICpscHMgPSBOVUxMOworCVBhcmFs bGVsQ29udGV4dCAqcGN4dDsKKwlMVlNoYXJlZCAgICpzaGFyZWQ7CisJTFZEZWFkVHVwbGVzICpk ZWFkX3R1cGxlczsKKwlib29sCSAgICpjYW5fcGFyYWxsZWxfdmFjdXVtOworCWxvbmcJCW1heHR1 cGxlczsKKwljaGFyCSAgICpzaGFyZWRxdWVyeTsKKwlTaXplCQllc3Rfc2hhcmVkOworCVNpemUJ CWVzdF9kZWFkdHVwbGVzOworCWludAkJCW5pbmRleGVzX213bSA9IDA7CisJaW50CQkJcGFyYWxs ZWxfd29ya2VycyA9IDA7CisJaW50CQkJcXVlcnlsZW47CisJaW50CQkJaTsKKworCS8qCisJICog QSBwYXJhbGxlbCB2YWN1dW0gbXVzdCBiZSByZXF1ZXN0ZWQgYW5kIHRoZXJlIG11c3QgYmUgaW5k ZXhlcyBvbiB0aGUKKwkgKiByZWxhdGlvbgorCSAqLworCUFzc2VydChucmVxdWVzdGVkID49IDAp OworCUFzc2VydChuaW5kZXhlcyA+IDApOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBudW1iZXIg b2YgcGFyYWxsZWwgdmFjdXVtIHdvcmtlcnMgdG8gbGF1bmNoCisJICovCisJY2FuX3BhcmFsbGVs X3ZhY3V1bSA9IChib29sICopIHBhbGxvYzAoc2l6ZW9mKGJvb2wpICogbmluZGV4ZXMpOworCXBh cmFsbGVsX3dvcmtlcnMgPSBjb21wdXRlX3BhcmFsbGVsX3ZhY3V1bV93b3JrZXJzKElyZWwsIG5p bmRleGVzLAorCQkJCQkJCQkJCQkJCSAgIG5yZXF1ZXN0ZWQsCisJCQkJCQkJCQkJCQkJICAgY2Fu X3BhcmFsbGVsX3ZhY3V1bSk7CisKKwkvKiBDYW4ndCBwZXJmb3JtIHZhY3V1bSBpbiBwYXJhbGxl bCAqLworCWlmIChwYXJhbGxlbF93b3JrZXJzIDw9IDApCisJeworCQlwZnJlZShjYW5fcGFyYWxs ZWxfdmFjdXVtKTsKKwkJcmV0dXJuIGxwczsKKwl9CisKKwlscHMgPSAoTFZQYXJhbGxlbFN0YXRl ICopIHBhbGxvYzAoc2l6ZW9mKExWUGFyYWxsZWxTdGF0ZSkpOworCisJRW50ZXJQYXJhbGxlbE1v ZGUoKTsKKwlwY3h0ID0gQ3JlYXRlUGFyYWxsZWxDb250ZXh0KCJwb3N0Z3JlcyIsICJwYXJhbGxl bF92YWN1dW1fbWFpbiIsCisJCQkJCQkJCSBwYXJhbGxlbF93b3JrZXJzKTsKKwlBc3NlcnQocGN4 dC0+bndvcmtlcnMgPiAwKTsKKwlscHMtPnBjeHQgPSBwY3h0OworCisJLyogRXN0aW1hdGUgc2l6 ZSBmb3Igc2hhcmVkIGluZm9ybWF0aW9uIC0tIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfU0hBUkVEICov CisJZXN0X3NoYXJlZCA9IE1BWEFMSUdOKGFkZF9zaXplKFNpemVPZkxWU2hhcmVkLCBCSVRNQVBM RU4obmluZGV4ZXMpKSk7CisJZm9yIChpID0gMDsgaSA8IG5pbmRleGVzOyBpKyspCisJeworCQl1 aW50OAkJdmFjb3B0aW9ucyA9IElyZWxbaV0tPnJkX2luZGFtLT5hbXBhcmFsbGVsdmFjdXVtb3B0 aW9uczsKKworCQkvKgorCQkgKiBDbGVhbnVwIG9wdGlvbiBzaG91bGQgYmUgZWl0aGVyIGRpc2Fi bGVkLCBhbHdheXMgcGVyZm9ybWluZyBpbgorCQkgKiBwYXJhbGxlbCBvciBjb25kaXRpb25hbGx5 IHBlcmZvcm1pbmcgaW4gcGFyYWxsZWwuCisJCSAqLworCQlBc3NlcnQoKCh2YWNvcHRpb25zICYg VkFDVVVNX09QVElPTl9QQVJBTExFTF9DTEVBTlVQKSA9PSAwKSB8fAorCQkJICAgKCh2YWNvcHRp b25zICYgVkFDVVVNX09QVElPTl9QQVJBTExFTF9DT05EX0NMRUFOVVApID09IDApKTsKKwkJQXNz ZXJ0KHZhY29wdGlvbnMgPD0gVkFDVVVNX09QVElPTl9NQVhfVkFMSURfVkFMVUUpOworCisJCS8q IFNraXAgaW5kZXhlcyB0aGF0IGRvbid0IHBhcnRpY2lwYXRlIGluIHBhcmFsbGVsIGluZGV4IHZh Y3V1bSAqLworCQlpZiAoIWNhbl9wYXJhbGxlbF92YWN1dW1baV0pCisJCQljb250aW51ZTsKKwor CQlpZiAoSXJlbFtpXS0+cmRfaW5kYW0tPmFtdXNlbWFpbnRlbmFuY2V3b3JrbWVtKQorCQkJbmlu ZGV4ZXNfbXdtKys7CisKKwkJZXN0X3NoYXJlZCA9IGFkZF9zaXplKGVzdF9zaGFyZWQsIHNpemVv ZihMVlNoYXJlZEluZFN0YXRzKSk7CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIG51bWJlciBv ZiBpbmRleGVzIHRoYXQgc3VwcG9ydCBwYXJhbGxlbCBvcGVyYXRpb24gZm9yCisJCSAqIGVhY2gg cGhhc2UuCisJCSAqLworCQlpZiAoKHZhY29wdGlvbnMgJiBWQUNVVU1fT1BUSU9OX1BBUkFMTEVM X0JVTEtERUwpICE9IDApCisJCQlscHMtPm5pbmRleGVzX3BhcmFsbGVsX2J1bGtkZWwrKzsKKwkJ aWYgKCh2YWNvcHRpb25zICYgVkFDVVVNX09QVElPTl9QQVJBTExFTF9DTEVBTlVQKSAhPSAwKQor CQkJbHBzLT5uaW5kZXhlc19wYXJhbGxlbF9jbGVhbnVwKys7CisJCWlmICgodmFjb3B0aW9ucyAm IFZBQ1VVTV9PUFRJT05fUEFSQUxMRUxfQ09ORF9DTEVBTlVQKSAhPSAwKQorCQkJbHBzLT5uaW5k ZXhlc19wYXJhbGxlbF9jb25kY2xlYW51cCsrOworCX0KKwlzaG1fdG9jX2VzdGltYXRlX2NodW5r KCZwY3h0LT5lc3RpbWF0b3IsIGVzdF9zaGFyZWQpOworCXNobV90b2NfZXN0aW1hdGVfa2V5cygm cGN4dC0+ZXN0aW1hdG9yLCAxKTsKKworCS8qIEVzdGltYXRlIHNpemUgZm9yIGRlYWQgdHVwbGVz IC0tIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfREVBRF9UVVBMRVMgKi8KKwltYXh0dXBsZXMgPSBjb21w dXRlX21heF9kZWFkX3R1cGxlcyhuYmxvY2tzLCB0cnVlKTsKKwllc3RfZGVhZHR1cGxlcyA9IE1B WEFMSUdOKFNpemVPZkxWRGVhZFR1cGxlcyhtYXh0dXBsZXMpKTsKKwlzaG1fdG9jX2VzdGltYXRl X2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIGVzdF9kZWFkdHVwbGVzKTsKKwlzaG1fdG9jX2VzdGlt YXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CisKKwkvKiBGaW5hbGx5LCBlc3RpbWF0ZSBQ QVJBTExFTF9WQUNVVU1fS0VZX1FVRVJZX1RFWFQgc3BhY2UgKi8KKwlxdWVyeWxlbiA9IHN0cmxl bihkZWJ1Z19xdWVyeV9zdHJpbmcpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVz dGltYXRvciwgcXVlcnlsZW4gKyAxKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVz dGltYXRvciwgMSk7CisKKwlJbml0aWFsaXplUGFyYWxsZWxEU00ocGN4dCk7CisKKwkvKiBQcmVw YXJlIHNoYXJlZCBpbmZvcm1hdGlvbiAqLworCXNoYXJlZCA9IChMVlNoYXJlZCAqKSBzaG1fdG9j X2FsbG9jYXRlKHBjeHQtPnRvYywgZXN0X3NoYXJlZCk7CisJTWVtU2V0KHNoYXJlZCwgMCwgZXN0 X3NoYXJlZCk7CisJc2hhcmVkLT5yZWxpZCA9IHJlbGlkOworCXNoYXJlZC0+ZWxldmVsID0gZWxl dmVsOworCXNoYXJlZC0+bWFpbnRlbmFuY2Vfd29ya19tZW1fd29ya2VyID0KKwkJKG5pbmRleGVz X213bSA+IDApID8KKwkJbWFpbnRlbmFuY2Vfd29ya19tZW0gLyBNaW4ocGFyYWxsZWxfd29ya2Vy cywgbmluZGV4ZXNfbXdtKSA6CisJCW1haW50ZW5hbmNlX3dvcmtfbWVtOworCisJLyoKKwkgKiBX ZSBuZWVkIHRvIGNhcmUgYWJvdXQgYWxpZ25tZW50IGJlY2F1c2Ugd2UgZXN0aW1hdGUgdGhlIHNo YXJlZCBtZW1vcnkKKwkgKiBpbiB0aGF0IHdheS4KKwkgKi8KKwlzaGFyZWQtPm9mZnNldCA9IE1B WEFMSUdOKGFkZF9zaXplKFNpemVPZkxWU2hhcmVkLCBCSVRNQVBMRU4obmluZGV4ZXMpKSk7CisJ cHJlcGFyZV9pbmRleF9zdGF0aXN0aWNzKHNoYXJlZCwgY2FuX3BhcmFsbGVsX3ZhY3V1bSwgbmlu ZGV4ZXMpOworCXBnX2F0b21pY19pbml0X3UzMigmKHNoYXJlZC0+aWR4KSwgMCk7CisJcGdfYXRv bWljX2luaXRfdTMyKCYoc2hhcmVkLT5jb3N0X2JhbGFuY2UpLCAwKTsKKwlwZ19hdG9taWNfaW5p dF91MzIoJihzaGFyZWQtPmFjdGl2ZV9ud29ya2VycyksIDApOworCisJc2htX3RvY19pbnNlcnQo cGN4dC0+dG9jLCBQQVJBTExFTF9WQUNVVU1fS0VZX1NIQVJFRCwgc2hhcmVkKTsKKwlscHMtPmx2 c2hhcmVkID0gc2hhcmVkOworCisJLyogUHJlcGFyZSB0aGUgZGVhZCB0dXBsZSBzcGFjZSAqLwor CWRlYWRfdHVwbGVzID0gKExWRGVhZFR1cGxlcyAqKSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRv YywgZXN0X2RlYWR0dXBsZXMpOworCWRlYWRfdHVwbGVzLT5tYXhfdHVwbGVzID0gbWF4dHVwbGVz OworCWRlYWRfdHVwbGVzLT5udW1fdHVwbGVzID0gMDsKKwlNZW1TZXQoZGVhZF90dXBsZXMtPml0 ZW1wdHJzLCAwLCBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIG1heHR1cGxlcyk7CisJc2htX3Rv Y19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9WQUNVVU1fS0VZX0RFQURfVFVQTEVTLCBkZWFk X3R1cGxlcyk7CisJdmFjcmVsc3RhdHMtPmRlYWRfdHVwbGVzID0gZGVhZF90dXBsZXM7CisKKwkv KiBTdG9yZSBxdWVyeSBzdHJpbmcgZm9yIHdvcmtlcnMgKi8KKwlzaGFyZWRxdWVyeSA9IChjaGFy ICopIHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBxdWVyeWxlbiArIDEpOworCW1lbWNweShz aGFyZWRxdWVyeSwgZGVidWdfcXVlcnlfc3RyaW5nLCBxdWVyeWxlbiArIDEpOworCXNoYXJlZHF1 ZXJ5W3F1ZXJ5bGVuXSA9ICdcMCc7CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExF TF9WQUNVVU1fS0VZX1FVRVJZX1RFWFQsIHNoYXJlZHF1ZXJ5KTsKKworCXBmcmVlKGNhbl9wYXJh bGxlbF92YWN1dW0pOworCXJldHVybiBscHM7Cit9CisKKy8qCisgKiBEZXN0cm95IHRoZSBwYXJh bGxlbCBjb250ZXh0LCBhbmQgZW5kIHBhcmFsbGVsIG1vZGUuCisgKgorICogU2luY2Ugd3JpdGVz IGFyZSBub3QgYWxsb3dlZCBkdXJpbmcgdGhlIHBhcmFsbGVsIG1vZGUsIHNvIHdlIGNvcHkgdGhl CisgKiB1cGRhdGVkIGluZGV4IHN0YXRpc3RpY3MgZnJvbSBEU00gaW4gbG9jYWwgbWVtb3J5IGFu ZCB0aGVuIGxhdGVyIHVzZSB0aGF0CisgKiB0byB1cGRhdGUgdGhlIGluZGV4IHN0YXRpc3RpY3Mu ICBPbmUgbWlnaHQgdGhpbmsgdGhhdCB3ZSBjYW4gZXhpdCBmcm9tCisgKiBwYXJhbGxlbCBtb2Rl LCB1cGRhdGUgdGhlIGluZGV4IHN0YXRpc3RpY3MgYW5kIHRoZW4gZGVzdHJveSBwYXJhbGxlbAor ICogY29udGV4dCwgYnV0IHRoYXQgd29uJ3QgYmUgc2FmZSAoc2VlIEV4aXRQYXJhbGxlbE1vZGUp LgorICovCitzdGF0aWMgdm9pZAorZW5kX3BhcmFsbGVsX3ZhY3V1bShSZWxhdGlvbiAqSXJlbCwg SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJCUxWUGFyYWxsZWxTdGF0ZSAqbHBz LCBpbnQgbmluZGV4ZXMpCit7CisJaW50CQkJaTsKKworCUFzc2VydCghSXNQYXJhbGxlbFdvcmtl cigpKTsKKworCS8qIENvcHkgdGhlIHVwZGF0ZWQgc3RhdGlzdGljcyAqLworCWZvciAoaSA9IDA7 IGkgPCBuaW5kZXhlczsgaSsrKQorCXsKKwkJTFZTaGFyZWRJbmRTdGF0cyAqaW5kc3RhdHMgPSBn ZXRfaW5kc3RhdHMobHBzLT5sdnNoYXJlZCwgaSk7CisKKwkJLyoKKwkJICogU2tpcCB1bnVzZWQg c2xvdC4gIFRoZSBzdGF0aXN0aWNzIG9mIHRoaXMgaW5kZXggYXJlIGFscmVhZHkgc3RvcmVkCisJ CSAqIGluIGxvY2FsIG1lbW9yeS4KKwkJICovCisJCWlmIChpbmRzdGF0cyA9PSBOVUxMKQorCQkJ Y29udGludWU7CisKKwkJaWYgKGluZHN0YXRzLT51cGRhdGVkKQorCQl7CisJCQlzdGF0c1tpXSA9 IChJbmRleEJ1bGtEZWxldGVSZXN1bHQgKikgcGFsbG9jMChzaXplb2YoSW5kZXhCdWxrRGVsZXRl UmVzdWx0KSk7CisJCQltZW1jcHkoc3RhdHNbaV0sICYoaW5kc3RhdHMtPnN0YXRzKSwgc2l6ZW9m KEluZGV4QnVsa0RlbGV0ZVJlc3VsdCkpOworCQl9CisJCWVsc2UKKwkJCXN0YXRzW2ldID0gTlVM TDsKKwl9CisKKwlEZXN0cm95UGFyYWxsZWxDb250ZXh0KGxwcy0+cGN4dCk7CisJRXhpdFBhcmFs bGVsTW9kZSgpOworCisJLyogRGVhY3RpdmF0ZSBwYXJhbGxlbCB2YWN1dW0gKi8KKwlwZnJlZShs cHMpOworCWxwcyA9IE5VTEw7Cit9CisKKy8qIFJldHVybiB0aGUgTnRoIGluZGV4IHN0YXRpc3Rp Y3Mgb3IgTlVMTCAqLworc3RhdGljIExWU2hhcmVkSW5kU3RhdHMgKgorZ2V0X2luZHN0YXRzKExW U2hhcmVkICpsdnNoYXJlZCwgaW50IG4pCit7CisJaW50CQkJaTsKKwljaGFyCSAgICpwOworCisJ aWYgKEluZFN0YXRzSXNOdWxsKGx2c2hhcmVkLCBuKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwID0g KGNoYXIgKikgR2V0U2hhcmVkSW5kU3RhdHMobHZzaGFyZWQpOworCWZvciAoaSA9IDA7IGkgPCBu OyBpKyspCisJeworCQlpZiAoSW5kU3RhdHNJc051bGwobHZzaGFyZWQsIGkpKQorCQkJY29udGlu dWU7CisKKwkJcCArPSBzaXplb2YoTFZTaGFyZWRJbmRTdGF0cyk7CisJfQorCisJcmV0dXJuIChM VlNoYXJlZEluZFN0YXRzICopIHA7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBn aXZlbiBpbmRleCBjYW4ndCBwYXJ0aWNpcGF0ZSBpbiBwYXJhbGxlbCBpbmRleCB2YWN1dW0KKyAq IG9yIHBhcmFsbGVsIGluZGV4IGNsZWFudXAsIGZhbHNlLCBvdGhlcndpc2UuCisgKi8KK3N0YXRp YyBib29sCitza2lwX3BhcmFsbGVsX3ZhY3V1bV9pbmRleChSZWxhdGlvbiBpbmRyZWwsIExWU2hh cmVkICpsdnNoYXJlZCkKK3sKKwl1aW50OAkJdmFjb3B0aW9ucyA9IGluZHJlbC0+cmRfaW5kYW0t PmFtcGFyYWxsZWx2YWN1dW1vcHRpb25zOworCisJLyogZmlyc3RfdGltZSBtdXN0IGJlIHRydWUg b25seSBpZiBmb3JfY2xlYW51cCBpcyB0cnVlICovCisJQXNzZXJ0KGx2c2hhcmVkLT5mb3JfY2xl YW51cCB8fCAhbHZzaGFyZWQtPmZpcnN0X3RpbWUpOworCisJaWYgKGx2c2hhcmVkLT5mb3JfY2xl YW51cCkKKwl7CisJCS8qIFNraXAsIGlmIHRoZSBpbmRleCBkb2VzIG5vdCBzdXBwb3J0IHBhcmFs bGVsIGNsZWFudXAgKi8KKwkJaWYgKCgodmFjb3B0aW9ucyAmIFZBQ1VVTV9PUFRJT05fUEFSQUxM RUxfQ0xFQU5VUCkgPT0gMCkgJiYKKwkJCSgodmFjb3B0aW9ucyAmIFZBQ1VVTV9PUFRJT05fUEFS QUxMRUxfQ09ORF9DTEVBTlVQKSA9PSAwKSkKKwkJCXJldHVybiB0cnVlOworCisJCS8qCisJCSAq IFNraXAsIGlmIHRoZSBpbmRleCBzdXBwb3J0cyBwYXJhbGxlbCBjbGVhbnVwIGNvbmRpdGlvbmFs bHksIGJ1dCB3ZQorCQkgKiBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkIHRoZSBpbmRleCAoZm9yIGJ1 bGtkZWxldGUpLiAgU2VlIHRoZQorCQkgKiBjb21tZW50cyBmb3Igb3B0aW9uIFZBQ1VVTV9PUFRJ T05fUEFSQUxMRUxfQ09ORF9DTEVBTlVQIHRvIGtub3cKKwkJICogd2hlbiBpbmRleGVzIHN1cHBv cnQgcGFyYWxsZWwgY2xlYW51cCBjb25kaXRpb25hbGx5LgorCQkgKi8KKwkJaWYgKCFsdnNoYXJl ZC0+Zmlyc3RfdGltZSAmJgorCQkJKCh2YWNvcHRpb25zICYgVkFDVVVNX09QVElPTl9QQVJBTExF TF9DT05EX0NMRUFOVVApICE9IDApKQorCQkJcmV0dXJuIHRydWU7CisJfQorCWVsc2UgaWYgKCh2 YWNvcHRpb25zICYgVkFDVVVNX09QVElPTl9QQVJBTExFTF9CVUxLREVMKSA9PSAwKQorCXsKKwkJ LyogU2tpcCBpZiB0aGUgaW5kZXggZG9lcyBub3Qgc3VwcG9ydCBwYXJhbGxlbCBidWxrIGRlbGV0 aW9uICovCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAq IFBlcmZvcm0gd29yayB3aXRoaW4gYSBsYXVuY2hlZCBwYXJhbGxlbCBwcm9jZXNzLgorICoKKyAq IFNpbmNlIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXJzIHBlcmZvcm0gb25seSBpbmRleCB2YWN1dW0g b3IgaW5kZXggY2xlYW51cCwKKyAqIHdlIGRvbid0IG5lZWQgdG8gcmVwb3J0IHRoZSBwcm9ncmVz cyBpbmZvcm1hdGlvbi4KKyAqLwordm9pZAorcGFyYWxsZWxfdmFjdXVtX21haW4oZHNtX3NlZ21l bnQgKnNlZywgc2htX3RvYyAqdG9jKQoreworCVJlbGF0aW9uCW9uZXJlbDsKKwlSZWxhdGlvbiAg ICppbmRyZWxzOworCUxWU2hhcmVkICAgKmx2c2hhcmVkOworCUxWRGVhZFR1cGxlcyAqZGVhZF90 dXBsZXM7CisJaW50CQkJbmluZGV4ZXM7CisJY2hhcgkgICAqc2hhcmVkcXVlcnk7CisJSW5kZXhC dWxrRGVsZXRlUmVzdWx0ICoqc3RhdHM7CisKKwlsdnNoYXJlZCA9IChMVlNoYXJlZCAqKSBzaG1f dG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfU0hBUkVELAorCQkJCQkJCQkJCSAg IGZhbHNlKTsKKwllbGV2ZWwgPSBsdnNoYXJlZC0+ZWxldmVsOworCisJZXJlcG9ydChERUJVRzEs CisJCQkoZXJybXNnKCJzdGFydGluZyBwYXJhbGxlbCBsYXp5IHZhY3V1bSB3b3JrZXIgZm9yICVz IiwKKwkJCQkJbHZzaGFyZWQtPmZvcl9jbGVhbnVwID8gImNsZWFudXAiIDogInZhY3V1bWluZyIp KSk7CisKKwkvKiBTZXQgZGVidWdfcXVlcnlfc3RyaW5nIGZvciBpbmRpdmlkdWFsIHdvcmtlcnMg Ki8KKwlzaGFyZWRxdWVyeSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfVkFDVVVNX0tF WV9RVUVSWV9URVhULCBmYWxzZSk7CisJZGVidWdfcXVlcnlfc3RyaW5nID0gc2hhcmVkcXVlcnk7 CisJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9SVU5OSU5HLCBkZWJ1Z19xdWVyeV9zdHJp bmcpOworCisJLyoKKwkgKiBPcGVuIHRhYmxlLiAgVGhlIGxvY2sgbW9kZSBpcyB0aGUgc2FtZSBh cyB0aGUgbGVhZGVyIHByb2Nlc3MuICBJdCdzCisJICogb2theSBiZWNhdXNlIHRoZSBsb2NrIG1v ZGUgZG9lcyBub3QgY29uZmxpY3QgYW1vbmcgdGhlIHBhcmFsbGVsCisJICogd29ya2Vycy4KKwkg Ki8KKwlvbmVyZWwgPSB0YWJsZV9vcGVuKGx2c2hhcmVkLT5yZWxpZCwgU2hhcmVVcGRhdGVFeGNs dXNpdmVMb2NrKTsKKworCS8qCisJICogT3BlbiBhbGwgaW5kZXhlcy4gaW5kcmVscyBhcmUgc29y dGVkIGluIG9yZGVyIGJ5IE9JRCwgd2hpY2ggc2hvdWxkIGJlCisJICogbWF0Y2hlZCB0byB0aGUg bGVhZGVyJ3Mgb25lLgorCSAqLworCXZhY19vcGVuX2luZGV4ZXMob25lcmVsLCBSb3dFeGNsdXNp dmVMb2NrLCAmbmluZGV4ZXMsICZpbmRyZWxzKTsKKwlBc3NlcnQobmluZGV4ZXMgPiAwKTsKKwor CS8qIFNldCBkZWFkIHR1cGxlIHNwYWNlICovCisJZGVhZF90dXBsZXMgPSAoTFZEZWFkVHVwbGVz ICopIHNobV90b2NfbG9va3VwKHRvYywKKwkJCQkJCQkJCQkJCSAgUEFSQUxMRUxfVkFDVVVNX0tF WV9ERUFEX1RVUExFUywKKwkJCQkJCQkJCQkJCSAgZmFsc2UpOworCisJLyogU2V0IGNvc3QtYmFz ZWQgdmFjdXVtIGRlbGF5ICovCisJVmFjdXVtQ29zdEFjdGl2ZSA9IChWYWN1dW1Db3N0RGVsYXkg PiAwKTsKKwlWYWN1dW1Db3N0QmFsYW5jZSA9IDA7CisJVmFjdXVtUGFnZUhpdCA9IDA7CisJVmFj dXVtUGFnZU1pc3MgPSAwOworCVZhY3V1bVBhZ2VEaXJ0eSA9IDA7CisJVmFjdXVtU2hhcmVkQ29z dEJhbGFuY2UgPSAmKGx2c2hhcmVkLT5jb3N0X2JhbGFuY2UpOworCVZhY3V1bUFjdGl2ZU5Xb3Jr ZXJzID0gJihsdnNoYXJlZC0+YWN0aXZlX253b3JrZXJzKTsKKworCXN0YXRzID0gKEluZGV4QnVs a0RlbGV0ZVJlc3VsdCAqKikKKwkJcGFsbG9jMChuaW5kZXhlcyAqIHNpemVvZihJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKikpOworCisJaWYgKGx2c2hhcmVkLT5tYWludGVuYW5jZV93b3JrX21lbV93 b3JrZXIgPiAwKQorCQltYWludGVuYW5jZV93b3JrX21lbSA9IGx2c2hhcmVkLT5tYWludGVuYW5j ZV93b3JrX21lbV93b3JrZXI7CisKKwkvKiBQcm9jZXNzIGluZGV4ZXMgdG8gcGVyZm9ybSB2YWN1 dW0vY2xlYW51cCAqLworCXBhcmFsbGVsX3ZhY3V1bV9pbmRleChpbmRyZWxzLCBzdGF0cywgbHZz aGFyZWQsIGRlYWRfdHVwbGVzLCBuaW5kZXhlcyk7CisKKwl2YWNfY2xvc2VfaW5kZXhlcyhuaW5k ZXhlcywgaW5kcmVscywgUm93RXhjbHVzaXZlTG9jayk7CisJdGFibGVfY2xvc2Uob25lcmVsLCBT aGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCXBmcmVlKHN0YXRzKTsKK30KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9wYXJhbGxlbC5jCmluZGV4IGYzZTIyNTQ5NTQuLmRmMDZlN2QxNzQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5j bHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRl ICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3Nlc3Npb24uaCIKQEAgLTEzOSw2ICsxNDAsOSBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0CiAJfSwKIAl7CiAJCSJfYnRfcGFyYWxsZWxfYnVpbGRfbWFpbiIsIF9idF9wYXJhbGxlbF9i dWlsZF9tYWluCisJfSwKKwl7CisJCSJwYXJhbGxlbF92YWN1dW1fbWFpbiIsIHBhcmFsbGVsX3Zh Y3V1bV9tYWluCiAJfQogfTsKIApAQCAtMTc0LDYgKzE3OCw3IEBAIENyZWF0ZVBhcmFsbGVsQ29u dGV4dChjb25zdCBjaGFyICpsaWJyYXJ5X25hbWUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUs CiAJcGN4dCA9IHBhbGxvYzAoc2l6ZW9mKFBhcmFsbGVsQ29udGV4dCkpOwogCXBjeHQtPnN1Ymlk ID0gR2V0Q3VycmVudFN1YlRyYW5zYWN0aW9uSWQoKTsKIAlwY3h0LT5ud29ya2VycyA9IG53b3Jr ZXJzOworCXBjeHQtPm53b3JrZXJzX3RvX2xhdW5jaCA9IG53b3JrZXJzOwogCXBjeHQtPmxpYnJh cnlfbmFtZSA9IHBzdHJkdXAobGlicmFyeV9uYW1lKTsKIAlwY3h0LT5mdW5jdGlvbl9uYW1lID0g cHN0cmR1cChmdW5jdGlvbl9uYW1lKTsKIAlwY3h0LT5lcnJvcl9jb250ZXh0X3N0YWNrID0gZXJy b3JfY29udGV4dF9zdGFjazsKQEAgLTQ4Niw2ICs0OTEsMjMgQEAgUmVpbml0aWFsaXplUGFyYWxs ZWxEU00oUGFyYWxsZWxDb250ZXh0ICpwY3h0KQogCX0KIH0KIAorLyoKKyAqIFJlaW5pdGlhbGl6 ZSBwYXJhbGxlbCB3b3JrZXJzIGZvciBhIHBhcmFsbGVsIGNvbnRleHQgc3VjaCB0aGF0IHdlIGNv dWxkCisgKiBsYXVuY2ggdGhlIGRpZmZlcmVudCBudW1iZXIgb2Ygd29ya2Vycy4gIFRoaXMgaXMg cmVxdWlyZWQgZm9yIGNhc2VzIHdoZXJlCisgKiB3ZSBuZWVkIHRvIHJldXNlIHRoZSBzYW1lIERT TSBzZWdtZW50LCBidXQgdGhlIG51bWJlciBvZiB3b3JrZXJzIGNhbgorICogdmFyeSBmcm9tIHJ1 bi10by1ydW4uCisgKi8KK3ZvaWQKK1JlaW5pdGlhbGl6ZVBhcmFsbGVsV29ya2VycyhQYXJhbGxl bENvbnRleHQgKnBjeHQsIGludCBud29ya2Vyc190b19sYXVuY2gpCit7CisJLyoKKwkgKiBUaGUg bnVtYmVyIG9mIHdvcmtlcnMgdGhhdCBuZWVkIHRvIGJlIGxhdW5jaGVkIG11c3QgYmUgbGVzcyB0 aGFuIHRoZQorCSAqIG51bWJlciBvZiB3b3JrZXJzIHdpdGggd2hpY2ggdGhlIHBhcmFsbGVsIGNv bnRleHQgaXMgaW5pdGlhbGl6ZWQuCisJICovCisJQXNzZXJ0KHBjeHQtPm53b3JrZXJzID49IG53 b3JrZXJzX3RvX2xhdW5jaCk7CisJcGN4dC0+bndvcmtlcnNfdG9fbGF1bmNoID0gbndvcmtlcnNf dG9fbGF1bmNoOworfQorCiAvKgogICogTGF1bmNoIHBhcmFsbGVsIHdvcmtlcnMuCiAgKi8KQEAg LTQ5OCw3ICs1MjAsNyBAQCBMYXVuY2hQYXJhbGxlbFdvcmtlcnMoUGFyYWxsZWxDb250ZXh0ICpw Y3h0KQogCWJvb2wJCWFueV9yZWdpc3RyYXRpb25zX2ZhaWxlZCA9IGZhbHNlOwogCiAJLyogU2tp cCB0aGlzIGlmIHdlIGhhdmUgbm8gd29ya2Vycy4gKi8KLQlpZiAocGN4dC0+bndvcmtlcnMgPT0g MCkKKwlpZiAocGN4dC0+bndvcmtlcnMgPT0gMCB8fCBwY3h0LT5ud29ya2Vyc190b19sYXVuY2gg PT0gMCkKIAkJcmV0dXJuOwogCiAJLyogV2UgbmVlZCB0byBiZSBhIGxvY2sgZ3JvdXAgbGVhZGVy LiAqLwpAQCAtNTMzLDcgKzU1NSw3IEBAIExhdW5jaFBhcmFsbGVsV29ya2VycyhQYXJhbGxlbENv bnRleHQgKnBjeHQpCiAJICogZmFpbHMuICBJdCB3b3VsZG4ndCBoZWxwIG11Y2ggYW55d2F5LCBi ZWNhdXNlIHJlZ2lzdGVyaW5nIHRoZSB3b3JrZXIgaW4KIAkgKiBubyB3YXkgZ3VhcmFudGVlcyB0 aGF0IGl0IHdpbGwgc3RhcnQgdXAgYW5kIGluaXRpYWxpemUgc3VjY2Vzc2Z1bGx5LgogCSAqLwot CWZvciAoaSA9IDA7IGkgPCBwY3h0LT5ud29ya2VyczsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBw Y3h0LT5ud29ya2Vyc190b19sYXVuY2g7ICsraSkKIAl7CiAJCW1lbWNweSh3b3JrZXIuYmd3X2V4 dHJhLCAmaSwgc2l6ZW9mKGludCkpOwogCQlpZiAoIWFueV9yZWdpc3RyYXRpb25zX2ZhaWxlZCAm JgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCBiYjM0ZTI1MmU0Li4xY2Q3N2U3OWQyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW0uYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5j cy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1 bS5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3Byb2MuaCIKQEAgLTY4LDYgKzY5LDE0IEBAIHN0YXRpYyBNZW1vcnlDb250ZXh0 IHZhY19jb250ZXh0ID0gTlVMTDsKIHN0YXRpYyBCdWZmZXJBY2Nlc3NTdHJhdGVneSB2YWNfc3Ry YXRlZ3k7CiAKIAorLyoKKyAqIFZhcmlhYmxlcyBmb3IgY29zdC1iYXNlZCBwYXJhbGxlbCB2YWN1 dW0uICBTZWUgY29tbWVudHMgYXRvcAorICogY29tcHV0ZV9wYXJhbGxlbF9kZWxheSB0byB1bmRl cnN0YW5kIGhvdyBpdCB3b3Jrcy4KKyAqLworcGdfYXRvbWljX3VpbnQzMiAqVmFjdXVtU2hhcmVk Q29zdEJhbGFuY2UgPSBOVUxMOworcGdfYXRvbWljX3VpbnQzMiAqVmFjdXVtQWN0aXZlTldvcmtl cnMgPSBOVUxMOworaW50CQkJVmFjdXVtQ29zdEJhbGFuY2VMb2NhbCA9IDA7CisKIC8qIG5vbi1l eHBvcnQgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3RhdGljIExpc3QgKmV4cGFuZF92YWN1dW1f cmVsKFZhY3V1bVJlbGF0aW9uICp2cmVsLCBpbnQgb3B0aW9ucyk7CiBzdGF0aWMgTGlzdCAqZ2V0 X2FsbF92YWN1dW1fcmVscyhpbnQgb3B0aW9ucyk7CkBAIC03Niw2ICs4NSw3IEBAIHN0YXRpYyB2 b2lkIHZhY190cnVuY2F0ZV9jbG9nKFRyYW5zYWN0aW9uSWQgZnJvemVuWElELAogCQkJCQkJCSAg VHJhbnNhY3Rpb25JZCBsYXN0U2FuZUZyb3plblhpZCwKIAkJCQkJCQkgIE11bHRpWGFjdElkIGxh c3RTYW5lTWluTXVsdGkpOwogc3RhdGljIGJvb2wgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdl VmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMpOworc3RhdGljIGRvdWJsZSBjb21w dXRlX3BhcmFsbGVsX2RlbGF5KHZvaWQpOwogc3RhdGljIFZhY09wdFRlcm5hcnlWYWx1ZSBnZXRf dmFjb3B0X3Rlcm5hcnlfdmFsdWUoRGVmRWxlbSAqZGVmKTsKIAogLyoKQEAgLTk0LDEyICsxMDQs MTYgQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3RhdGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQs IGJvb2wgaXNUb3BMZXZlbCkKIAlib29sCQlmcmVlemUgPSBmYWxzZTsKIAlib29sCQlmdWxsID0g ZmFsc2U7CiAJYm9vbAkJZGlzYWJsZV9wYWdlX3NraXBwaW5nID0gZmFsc2U7CisJYm9vbAkJcGFy YWxsZWxfb3B0aW9uID0gZmFsc2U7CiAJTGlzdENlbGwgICAqbGM7CiAKIAkvKiBTZXQgZGVmYXVs dCB2YWx1ZSAqLwogCXBhcmFtcy5pbmRleF9jbGVhbnVwID0gVkFDT1BUX1RFUk5BUllfREVGQVVM VDsKIAlwYXJhbXMudHJ1bmNhdGUgPSBWQUNPUFRfVEVSTkFSWV9ERUZBVUxUOwogCisJLyogQnkg ZGVmYXVsdCBwYXJhbGxlbCB2YWN1dW0gaXMgZW5hYmxlZCAqLworCXBhcmFtcy5ud29ya2VycyA9 IDA7CisKIAkvKiBQYXJzZSBvcHRpb25zIGxpc3QgKi8KIAlmb3JlYWNoKGxjLCB2YWNzdG10LT5v cHRpb25zKQogCXsKQEAgLTEyOSw2ICsxNDMsMzkgQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpw c3RhdGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIAkJCXBhcmFtcy5p bmRleF9jbGVhbnVwID0gZ2V0X3ZhY29wdF90ZXJuYXJ5X3ZhbHVlKG9wdCk7CiAJCWVsc2UgaWYg KHN0cmNtcChvcHQtPmRlZm5hbWUsICJ0cnVuY2F0ZSIpID09IDApCiAJCQlwYXJhbXMudHJ1bmNh dGUgPSBnZXRfdmFjb3B0X3Rlcm5hcnlfdmFsdWUob3B0KTsKKwkJZWxzZSBpZiAoc3RyY21wKG9w dC0+ZGVmbmFtZSwgInBhcmFsbGVsIikgPT0gMCkKKwkJeworCQkJcGFyYWxsZWxfb3B0aW9uID0g dHJ1ZTsKKwkJCWlmIChvcHQtPmFyZyA9PSBOVUxMKQorCQkJeworCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJw YXJhbGxlbCBvcHRpb24gcmVxdWlyZXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kICVkIiwKKwkJCQkJ CQkJTUFYX1BBUkFMTEVMX1dPUktFUl9MSU1JVCksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9u KHBzdGF0ZSwgb3B0LT5sb2NhdGlvbikpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpbnQJ CQlud29ya2VyczsKKworCQkJCW53b3JrZXJzID0gZGVmR2V0SW50MzIob3B0KTsKKwkJCQlpZiAo bndvcmtlcnMgPCAwIHx8IG53b3JrZXJzID4gTUFYX1BBUkFMTEVMX1dPUktFUl9MSU1JVCkKKwkJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiks CisJCQkJCQkJIGVycm1zZygicGFyYWxsZWwgdmFjdXVtIGRlZ3JlZSBtdXN0IGJlIGJldHdlZW4g MCBhbmQgJWQiLAorCQkJCQkJCQkJTUFYX1BBUkFMTEVMX1dPUktFUl9MSU1JVCksCisJCQkJCQkJ IHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIG9wdC0+bG9jYXRpb24pKSk7CisKKwkJCQkvKgor CQkJCSAqIERpc2FibGUgcGFyYWxsZWwgdmFjdXVtLCBpZiB1c2VyIGhhcyBzcGVjaWZpZWQgcGFy YWxsZWwKKwkJCQkgKiBkZWdyZWUgYXMgemVyby4KKwkJCQkgKi8KKwkJCQlpZiAobndvcmtlcnMg PT0gMCkKKwkJCQkJcGFyYW1zLm53b3JrZXJzID0gLTE7CisJCQkJZWxzZQorCQkJCQlwYXJhbXMu bndvcmtlcnMgPSBud29ya2VyczsKKwkJCX0KKwkJfQogCQllbHNlCiAJCQllcmVwb3J0KEVSUk9S LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC0xNTIsNiArMTk5LDEx IEBAIEV4ZWNWYWN1dW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBWYWN1dW1TdG10ICp2YWNzdG10LCBi b29sIGlzVG9wTGV2ZWwpCiAJCSAgICEocGFyYW1zLm9wdGlvbnMgJiAoVkFDT1BUX0ZVTEwgfCBW QUNPUFRfRlJFRVpFKSkpOwogCUFzc2VydCghKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX1NLSVBU T0FTVCkpOwogCisJaWYgKChwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9GVUxMKSAmJiBwYXJhbGxl bF9vcHRpb24pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJF X05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5IGJvdGggRlVMTCBh bmQgUEFSQUxMRUwgb3B0aW9ucyIpKSk7CisKIAkvKgogCSAqIE1ha2Ugc3VyZSBWQUNPUFRfQU5B TFlaRSBpcyBzcGVjaWZpZWQgaWYgYW55IGNvbHVtbiBsaXN0cyBhcmUgcHJlc2VudC4KIAkgKi8K QEAgLTM4Myw2ICs0MzUsNyBAQCB2YWN1dW0oTGlzdCAqcmVsYXRpb25zLCBWYWN1dW1QYXJhbXMg KnBhcmFtcywKIAkJVmFjdXVtUGFnZUhpdCA9IDA7CiAJCVZhY3V1bVBhZ2VNaXNzID0gMDsKIAkJ VmFjdXVtUGFnZURpcnR5ID0gMDsKKwkJVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UgPSBOVUxMOwog CiAJCS8qCiAJCSAqIExvb3AgdG8gcHJvY2VzcyBlYWNoIHNlbGVjdGVkIHJlbGF0aW9uLgpAQCAt MTk0MSwxNiArMTk5NCwyNiBAQCB2YWNfY2xvc2VfaW5kZXhlcyhpbnQgbmluZGV4ZXMsIFJlbGF0 aW9uICpJcmVsLCBMT0NLTU9ERSBsb2NrbW9kZSkKIHZvaWQKIHZhY3V1bV9kZWxheV9wb2ludCh2 b2lkKQogeworCWRvdWJsZQkJbXNlYyA9IDA7CisKIAkvKiBBbHdheXMgY2hlY2sgZm9yIGludGVy cnVwdHMgKi8KIAlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JLyogTmFwIGlmIGFwcHJvcHJp YXRlICovCi0JaWYgKFZhY3V1bUNvc3RBY3RpdmUgJiYgIUludGVycnVwdFBlbmRpbmcgJiYKLQkJ VmFjdXVtQ29zdEJhbGFuY2UgPj0gVmFjdXVtQ29zdExpbWl0KQotCXsKLQkJZG91YmxlCQltc2Vj OworCWlmICghVmFjdXVtQ29zdEFjdGl2ZSB8fCBJbnRlcnJ1cHRQZW5kaW5nKQorCQlyZXR1cm47 CiAKKwkvKgorCSAqIEZvciBwYXJhbGxlbCB2YWN1dW0sIHRoZSBkZWxheSBpcyBjb21wdXRlZCBi YXNlZCBvbiB0aGUgc2hhcmVkIGNvc3QKKwkgKiBiYWxhbmNlLiAgU2VlIGNvbXB1dGVfcGFyYWxs ZWxfZGVsYXkuCisJICovCisJaWYgKFZhY3V1bVNoYXJlZENvc3RCYWxhbmNlICE9IE5VTEwpCisJ CW1zZWMgPSBjb21wdXRlX3BhcmFsbGVsX2RlbGF5KCk7CisJZWxzZSBpZiAoVmFjdXVtQ29zdEJh bGFuY2UgPj0gVmFjdXVtQ29zdExpbWl0KQogCQltc2VjID0gVmFjdXVtQ29zdERlbGF5ICogVmFj dXVtQ29zdEJhbGFuY2UgLyBWYWN1dW1Db3N0TGltaXQ7CisKKwkvKiBOYXAgaWYgYXBwcm9wcmlh dGUgKi8KKwlpZiAobXNlYyA+IDApCisJewogCQlpZiAobXNlYyA+IFZhY3V1bUNvc3REZWxheSAq IDQpCiAJCQltc2VjID0gVmFjdXVtQ29zdERlbGF5ICogNDsKIApAQCAtMTk2Niw2ICsyMDI5LDY2 IEBAIHZhY3V1bV9kZWxheV9wb2ludCh2b2lkKQogCX0KIH0KIAorLyoKKyAqIENvbXB1dGVzIHRo ZSB2YWN1dW0gZGVsYXkgZm9yIHBhcmFsbGVsIHdvcmtlcnMuCisgKgorICogVGhlIGJhc2ljIGlk ZWEgb2YgYSBjb3N0LWJhc2VkIHZhY3V1bSBkZWxheSBmb3IgcGFyYWxsZWwgaW5kZXggdmFjdXVt aW5nCisgKiBpcyB0byBhbGxvdyBlYWNoIHdvcmtlciB0byBzbGVlcCBwcm9wb3J0aW9uYWwgdG8g dGhlIHdvcmsgZG9uZSBieSBpdC4gIFdlCisgKiBhY2hpZXZlIHRoaXMgYnkgYWxsb3dpbmcgYWxs IHBhcmFsbGVsIHZhY3V1bSB3b3JrZXJzIGluY2x1ZGluZyB0aGUgbGVhZGVyCisgKiBwcm9jZXNz IHRvIGhhdmUgYSBzaGFyZWQgdmlldyBvZiBjb3N0IHJlbGF0ZWQgcGFyYW1ldGVycyAobWFpbmx5 CisgKiBWYWN1dW1Db3N0QmFsYW5jZSkuICBXZSBhbGxvdyBlYWNoIHdvcmtlciB0byB1cGRhdGUg aXQgYXMgYW5kIHdoZW4gaXQgaGFzCisgKiBpbmN1cnJlZCBhbnkgY29zdCBhbmQgdGhlbiBiYXNl ZCBvbiB0aGF0IGRlY2lkZSB3aGV0aGVyIGl0IG5lZWRzIHRvIHNsZWVwLgorICogV2UgY29tcHV0 ZSB0aGUgdGltZSB0byBzbGVlcCBmb3IgYSB3b3JrZXIgYmFzZWQgb24gdGhlIGNvc3QgaXQgaGFz IGluY3VycmVkCisgKiAoVmFjdXVtQ29zdEJhbGFuY2VMb2NhbCkgYW5kIHRoZW4gcmVkdWNlIHRo ZSBWYWN1dW1TaGFyZWRDb3N0QmFsYW5jZSBieQorICogdGhhdCBhbW91bnQuICBUaGlzIGF2b2lk cyBsZXR0aW5nIHRoZSB3b3JrZXJzIHNsZWVwIHdobyBoYXZlIGRvbmUgbGVzcyBvcgorICogbm8g SS9PIGFzIGNvbXBhcmVkIHRvIG90aGVyIHdvcmtlcnMgYW5kIHRoZXJlZm9yZSBjYW4gZW5zdXJl IHRoYXQgd29ya2VycworICogd2hvIGFyZSBkb2luZyBtb3JlIEkvTyBnb3QgdGhyb3R0bGVkIG1v cmUuCisgKgorICogV2UgYWxsb3cgYW55IHdvcmtlciB0byBzbGVlcCBvbmx5IGlmIGl0IGhhcyBw ZXJmb3JtZWQgdGhlIEkvTyBhYm92ZSBhCisgKiBjZXJ0YWluIHRocmVzaG9sZCwgd2hpY2ggaXMg Y2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGFjdGl2ZQorICogd29ya2VycyAoVmFj dXVtQWN0aXZlTldvcmtlcnMpLCBhbmQgdGhlIG92ZXJhbGwgY29zdCBiYWxhbmNlIGlzIG1vcmUg dGhhbgorICogVmFjdXVtQ29zdExpbWl0IHNldCBieSB0aGUgc3lzdGVtLiAgVGhlIHRlc3Rpbmcg cmV2ZWFscyB0aGF0IHdlIGFjaGlldmUKKyAqIHRoZSByZXF1aXJlZCB0aHJvdHRsaW5nIGlmIHdl IGFsbG93IGEgd29ya2VyIHRoYXQgaGFzIGRvbmUgbW9yZSB0aGFuIDUwJQorICogb2YgaXRzIHNo YXJlIG9mIHdvcmsgdG8gc2xlZXAuCisgKi8KK3N0YXRpYyBkb3VibGUKK2NvbXB1dGVfcGFyYWxs ZWxfZGVsYXkodm9pZCkKK3sKKwlkb3VibGUJCW1zZWMgPSAwOworCXVpbnQzMgkJc2hhcmVkX2Jh bGFuY2U7CisJaW50CQkJbndvcmtlcnM7CisKKwkvKiBQYXJhbGxlbCB2YWN1dW0gbXVzdCBiZSBh Y3RpdmUgKi8KKwlBc3NlcnQoVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UpOworCisJbndvcmtlcnMg PSBwZ19hdG9taWNfcmVhZF91MzIoVmFjdXVtQWN0aXZlTldvcmtlcnMpOworCisJLyogQXQgbGVh c3QgY291bnQgaXRzZWxmICovCisJQXNzZXJ0KG53b3JrZXJzID49IDEpOworCisJLyogVXBkYXRl IHRoZSBzaGFyZWQgY29zdCBiYWxhbmNlIHZhbHVlIGF0b21pY2FsbHkgKi8KKwlzaGFyZWRfYmFs YW5jZSA9IHBnX2F0b21pY19hZGRfZmV0Y2hfdTMyKFZhY3V1bVNoYXJlZENvc3RCYWxhbmNlLCBW YWN1dW1Db3N0QmFsYW5jZSk7CisKKwkvKiBDb21wdXRlIHRoZSB0b3RhbCBsb2NhbCBiYWxhbmNl IGZvciB0aGUgY3VycmVudCB3b3JrZXIgKi8KKwlWYWN1dW1Db3N0QmFsYW5jZUxvY2FsICs9IFZh Y3V1bUNvc3RCYWxhbmNlOworCisJaWYgKChzaGFyZWRfYmFsYW5jZSA+PSBWYWN1dW1Db3N0TGlt aXQpICYmCisJCShWYWN1dW1Db3N0QmFsYW5jZUxvY2FsID4gMC41ICogKFZhY3V1bUNvc3RMaW1p dCAvIG53b3JrZXJzKSkpCisJeworCQkvKiBDb21wdXRlIHNsZWVwIHRpbWUgYmFzZWQgb24gdGhl IGxvY2FsIGNvc3QgYmFsYW5jZSAqLworCQltc2VjID0gVmFjdXVtQ29zdERlbGF5ICogVmFjdXVt Q29zdEJhbGFuY2VMb2NhbCAvIFZhY3V1bUNvc3RMaW1pdDsKKwkJcGdfYXRvbWljX3N1Yl9mZXRj aF91MzIoVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UsIFZhY3V1bUNvc3RCYWxhbmNlTG9jYWwpOwor CQlWYWN1dW1Db3N0QmFsYW5jZUxvY2FsID0gMDsKKwl9CisKKwkvKgorCSAqIFJlc2V0IHRoZSBs b2NhbCBiYWxhbmNlIGFzIHdlIGFjY3VtdWxhdGVkIGl0IGludG8gdGhlIHNoYXJlZCB2YWx1ZS4K KwkgKi8KKwlWYWN1dW1Db3N0QmFsYW5jZSA9IDA7CisKKwlyZXR1cm4gbXNlYzsKK30KKwogLyoK ICAqIEEgd3JhcHBlciBmdW5jdGlvbiBvZiBkZWZHZXRCb29sZWFuKCkuCiAgKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2F1dG92YWN1dW0uYwppbmRleCBmMGU0MGUzNmFmLi42ZDFmMjhjMzI3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtMjg4Niw2ICsyODg2LDggQEAgdGFibGVfcmVj aGVja19hdXRvdmFjKE9pZCByZWxpZCwgSFRBQiAqdGFibGVfdG9hc3RfbWFwLAogCQkJKCF3cmFw YXJvdW5kID8gVkFDT1BUX1NLSVBfTE9DS0VEIDogMCk7CiAJCXRhYi0+YXRfcGFyYW1zLmluZGV4 X2NsZWFudXAgPSBWQUNPUFRfVEVSTkFSWV9ERUZBVUxUOwogCQl0YWItPmF0X3BhcmFtcy50cnVu Y2F0ZSA9IFZBQ09QVF9URVJOQVJZX0RFRkFVTFQ7CisJCS8qIEFzIG9mIG5vdywgd2UgZG9uJ3Qg c3VwcG9ydCBwYXJhbGxlbCB2YWN1dW0gZm9yIGF1dG92YWN1dW0gKi8KKwkJdGFiLT5hdF9wYXJh bXMubndvcmtlcnMgPSAtMTsKIAkJdGFiLT5hdF9wYXJhbXMuZnJlZXplX21pbl9hZ2UgPSBmcmVl emVfbWluX2FnZTsKIAkJdGFiLT5hdF9wYXJhbXMuZnJlZXplX3RhYmxlX2FnZSA9IGZyZWV6ZV90 YWJsZV9hZ2U7CiAJCXRhYi0+YXRfcGFyYW1zLm11bHRpeGFjdF9mcmVlemVfbWluX2FnZSA9IG11 bHRpeGFjdF9mcmVlemVfbWluX2FnZTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29t cGxldGUuYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwppbmRleCAyZmQ4ODg2NmM5Li45 OTQ1MWZkOTQyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKKysrIGIv c3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jCkBAIC0zNTk3LDcgKzM1OTcsNyBAQCBwc3FsX2Nv bXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCQlpZiAoZW5k c193aXRoKHByZXZfd2QsICcoJykgfHwgZW5kc193aXRoKHByZXZfd2QsICcsJykpCiAJCQlDT01Q TEVURV9XSVRIKCJGVUxMIiwgIkZSRUVaRSIsICJBTkFMWVpFIiwgIlZFUkJPU0UiLAogCQkJCQkJ ICAiRElTQUJMRV9QQUdFX1NLSVBQSU5HIiwgIlNLSVBfTE9DS0VEIiwKLQkJCQkJCSAgIklOREVY X0NMRUFOVVAiLCAiVFJVTkNBVEUiKTsKKwkJCQkJCSAgIklOREVYX0NMRUFOVVAiLCAiVFJVTkNB VEUiLCAiUEFSQUxMRUwiKTsKIAkJZWxzZSBpZiAoVGFpbE1hdGNoZXMoIkZVTEx8RlJFRVpFfEFO QUxZWkV8VkVSQk9TRXxESVNBQkxFX1BBR0VfU0tJUFBJTkd8U0tJUF9MT0NLRUR8SU5ERVhfQ0xF QU5VUHxUUlVOQ0FURSIpKQogCQkJQ09NUExFVEVfV0lUSCgiT04iLCAiT0ZGIik7CiAJfQpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCmluZGV4IDU4MGI0Y2FlZjcuLjQ3OWYxN2M1NWYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK QEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlICJub2Rlcy9wcmltbm9kZXMuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2J1ZnBhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2tkZWZzLmgiCisjaW5j bHVkZSAic3RvcmFnZS9zaG1fdG9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc20uaCIKICNpbmNs dWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBzaG90LmgiCiAKQEAg LTE5Myw2ICsxOTUsNyBAQCBleHRlcm4gU2l6ZSBTeW5jU2NhblNobWVtU2l6ZSh2b2lkKTsKIHN0 cnVjdCBWYWN1dW1QYXJhbXM7CiBleHRlcm4gdm9pZCBoZWFwX3ZhY3V1bV9yZWwoUmVsYXRpb24g b25lcmVsLAogCQkJCQkJCXN0cnVjdCBWYWN1dW1QYXJhbXMgKnBhcmFtcywgQnVmZmVyQWNjZXNz U3RyYXRlZ3kgYnN0cmF0ZWd5KTsKK2V4dGVybiB2b2lkIHBhcmFsbGVsX3ZhY3V1bV9tYWluKGRz bV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYyk7CiAKIC8qIGluIGhlYXAvaGVhcGFtX3Zpc2li aWxpdHkuYyAqLwogZXh0ZXJuIGJvb2wgSGVhcFR1cGxlU2F0aXNmaWVzVmlzaWJpbGl0eShIZWFw VHVwbGUgc3R1cCwgU25hcHNob3Qgc25hcHNob3QsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvcGFyYWxsZWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9wYXJhbGxlbC5oCmluZGV4IDY0 NjcwOGJhNWYuLmZjNmE1NjAzYmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9wYXJh bGxlbC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9wYXJhbGxlbC5oCkBAIC0zMyw3ICszMyw4 IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQ29udGV4dAogewogCWRsaXN0X25vZGUJbm9kZTsK IAlTdWJUcmFuc2FjdGlvbklkIHN1YmlkOwotCWludAkJCW53b3JrZXJzOworCWludAkJCW53b3Jr ZXJzOwkJLyogTWF4aW11bSBudW1iZXIgb2Ygd29ya2VycyB0byBsYXVuY2ggKi8KKwlpbnQJCQlu d29ya2Vyc190b19sYXVuY2g7IC8qIEFjdHVhbCBudW1iZXIgb2Ygd29ya2VycyB0byBsYXVuY2gg Ki8KIAlpbnQJCQlud29ya2Vyc19sYXVuY2hlZDsKIAljaGFyCSAgICpsaWJyYXJ5X25hbWU7CiAJ Y2hhcgkgICAqZnVuY3Rpb25fbmFtZTsKQEAgLTYzLDYgKzY0LDcgQEAgZXh0ZXJuIFBhcmFsbGVs Q29udGV4dCAqQ3JlYXRlUGFyYWxsZWxDb250ZXh0KGNvbnN0IGNoYXIgKmxpYnJhcnlfbmFtZSwK IAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lLCBpbnQgbndvcmtlcnMpOwog ZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZVBhcmFsbGVsRFNNKFBhcmFsbGVsQ29udGV4dCAqcGN4dCk7 CiBleHRlcm4gdm9pZCBSZWluaXRpYWxpemVQYXJhbGxlbERTTShQYXJhbGxlbENvbnRleHQgKnBj eHQpOworZXh0ZXJuIHZvaWQgUmVpbml0aWFsaXplUGFyYWxsZWxXb3JrZXJzKFBhcmFsbGVsQ29u dGV4dCAqcGN4dCwgaW50IG53b3JrZXJzX3RvX2xhdW5jaCk7CiBleHRlcm4gdm9pZCBMYXVuY2hQ YXJhbGxlbFdvcmtlcnMoUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKIGV4dGVybiB2b2lkIFdhaXRG b3JQYXJhbGxlbFdvcmtlcnNUb0F0dGFjaChQYXJhbGxlbENvbnRleHQgKnBjeHQpOwogZXh0ZXJu IHZvaWQgV2FpdEZvclBhcmFsbGVsV29ya2Vyc1RvRmluaXNoKFBhcmFsbGVsQ29udGV4dCAqcGN4 dCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaCBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL3ZhY3V1bS5oCmluZGV4IGIzMzUxYWQ0MDYuLjYyZGQwMWY0MWYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCisrKyBiL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3ZhY3V1bS5oCkBAIC0yMjIsNiArMjIyLDEzIEBAIHR5cGVkZWYgc3RydWN0IFZhY3V1 bVBhcmFtcwogCQkJCQkJCQkJCSAqIGRlZmF1bHQgdmFsdWUgZGVwZW5kcyBvbiByZWxvcHRpb25z ICovCiAJVmFjT3B0VGVybmFyeVZhbHVlIHRydW5jYXRlOwkvKiBUcnVuY2F0ZSBlbXB0eSBwYWdl cyBhdCB0aGUgZW5kLAogCQkJCQkJCQkJICogZGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uIHJlbG9w dGlvbnMgKi8KKworCS8qCisJICogVGhlIG51bWJlciBvZiBwYXJhbGxlbCB2YWN1dW0gd29ya2Vy cy4gIDAgYnkgZGVmYXVsdCB3aGljaCBtZWFucyBjaG9vc2UKKwkgKiBiYXNlZCBvbiB0aGUgbnVt YmVyIG9mIGluZGV4ZXMuICAtMSBpbmRpY2F0ZXMgYSBwYXJhbGxlbCB2YWN1dW0gaXMKKwkgKiBk aXNhYmxlZC4KKwkgKi8KKwlpbnQJCQlud29ya2VyczsKIH0gVmFjdXVtUGFyYW1zOwogCiAvKiBH VUMgcGFyYW1ldGVycyAqLwpAQCAtMjMxLDYgKzIzOCwxMSBAQCBleHRlcm4gaW50CXZhY3V1bV9m cmVlemVfdGFibGVfYWdlOwogZXh0ZXJuIGludAl2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9taW5f YWdlOwogZXh0ZXJuIGludAl2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2U7CiAKKy8q IFZhcmlhYmxlcyBmb3IgY29zdC1iYXNlZCBwYXJhbGxlbCB2YWN1dW0gICovCitleHRlcm4gcGdf YXRvbWljX3VpbnQzMiAqVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2U7CitleHRlcm4gcGdfYXRvbWlj X3VpbnQzMiAqVmFjdXVtQWN0aXZlTldvcmtlcnM7CitleHRlcm4gaW50CVZhY3V1bUNvc3RCYWxh bmNlTG9jYWw7CisKIAogLyogaW4gY29tbWFuZHMvdmFjdXVtLmMgKi8KIGV4dGVybiB2b2lkIEV4 ZWNWYWN1dW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBWYWN1dW1TdG10ICp2YWNzdG10LCBib29sIGlz VG9wTGV2ZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC92YWN1dW0u b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC92YWN1dW0ub3V0CmluZGV4IDk5OTZkODgy ZDEuLjIyY2NhNzA2ODcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdmFj dXVtLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQKQEAgLTky LDYgKzkyLDM0IEBAIENPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gImRvX2FuYWx5emUiIHN0YXRlbWVu dCAxCiBTUUwgZnVuY3Rpb24gIndyYXBfZG9fYW5hbHl6ZSIgc3RhdGVtZW50IDEKIFZBQ1VVTSBG VUxMIHZhY3RzdDsKIFZBQ1VVTSAoRElTQUJMRV9QQUdFX1NLSVBQSU5HKSB2YWNjbHVzdGVyOwor LS0gUEFSQUxMRUwgb3B0aW9uCitDUkVBVEUgVEFCTEUgcHZhY3RzdCAoaSBJTlQsIGEgSU5UW10s IHAgUE9JTlQpIHdpdGggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZik7CitJTlNFUlQgSU5UTyBw dmFjdHN0IFNFTEVDVCBpLCBhcnJheVsxLDIsM10sIHBvaW50KGksIGkrMSkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwxMDAwKSBpOworQ1JFQVRFIElOREVYIGJ0cmVlX3B2YWN0c3QgT04gcHZhY3Rz dCBVU0lORyBidHJlZSAoaSk7CitDUkVBVEUgSU5ERVggaGFzaF9wdmFjdHN0IE9OIHB2YWN0c3Qg VVNJTkcgaGFzaCAoaSk7CitDUkVBVEUgSU5ERVggYnJpbl9wdmFjdHN0IE9OIHB2YWN0c3QgVVNJ TkcgYnJpbiAoaSk7CitDUkVBVEUgSU5ERVggZ2luX3B2YWN0c3QgT04gcHZhY3RzdCBVU0lORyBn aW4gKGEpOworQ1JFQVRFIElOREVYIGdpc3RfcHZhY3RzdCBPTiBwdmFjdHN0IFVTSU5HIGdpc3Qg KHApOworQ1JFQVRFIElOREVYIHNwZ2lzdF9wdmFjdHN0IE9OIHB2YWN0c3QgVVNJTkcgc3BnaXN0 IChwKTsKKy0tIFZBQ1VVTSBpbnZva2VzIHBhcmFsbGVsIGluZGV4IGNsZWFudXAKK1NFVCBtaW5f cGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplIHRvIDA7CitWQUNVVU0gKFBBUkFMTEVMIDIpIHB2YWN0 c3Q7CistLSBWQUNVVU0gaW52b2tlcyBwYXJhbGxlbCBidWxrLWRlbGV0aW9uCitVUERBVEUgcHZh Y3RzdCBTRVQgaSA9IGkgV0hFUkUgaSA8IDEwMDA7CitWQUNVVU0gKFBBUkFMTEVMIDIpIHB2YWN0 c3Q7CitWQUNVVU0gKFBBUkFMTEVMIC0xKSBwdmFjdHN0OyAtLSBlcnJvcgorRVJST1I6ICBwYXJh bGxlbCB2YWN1dW0gZGVncmVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDI0CitMSU5FIDE6IFZB Q1VVTSAoUEFSQUxMRUwgLTEpIHB2YWN0c3Q7CisgICAgICAgICAgICAgICAgXgorVkFDVVVNIChQ QVJBTExFTCAyLCBJTkRFWF9DTEVBTlVQIEZBTFNFKSBwdmFjdHN0OworVkFDVVVNIChQQVJBTExF TCAyLCBGVUxMIFRSVUUpIHB2YWN0c3Q7IC0tIGVycm9yLCBjYW5ub3QgdXNlIGJvdGggUEFSQUxM RUwgYW5kIEZVTEwKK0VSUk9SOiAgY2Fubm90IHNwZWNpZnkgYm90aCBGVUxMIGFuZCBQQVJBTExF TCBvcHRpb25zCitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRtcCAoYSBpbnQgUFJJTUFSWSBLRVkp OworQ1JFQVRFIElOREVYIHRtcF9pZHgxIE9OIHRtcCAoYSk7CitWQUNVVU0gKFBBUkFMTEVMIDEp IHRtcDsgLS0gZGlzYWJsZXMgcGFyYWxsZWwgdmFjdXVtIG9wdGlvbgorV0FSTklORzogIGRpc2Fi bGluZyBwYXJhbGxlbCBvcHRpb24gb2YgdmFjdXVtIG9uICJ0bXAiIC0tLSBjYW5ub3QgdmFjdXVt IHRlbXBvcmFyeSB0YWJsZXMgaW4gcGFyYWxsZWwKK1JFU0VUIG1pbl9wYXJhbGxlbF9pbmRleF9z Y2FuX3NpemU7CitEUk9QIFRBQkxFIHB2YWN0c3Q7CiAtLSBJTkRFWF9DTEVBTlVQIG9wdGlvbgog Q1JFQVRFIFRBQkxFIG5vX2luZGV4X2NsZWFudXAgKGkgSU5UIFBSSU1BUlkgS0VZLCB0IFRFWFQp OwogLS0gVXNlIHVuY29tcHJlc3NlZCBkYXRhIHN0b3JlZCBpbiB0b2FzdC4KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC92 YWN1dW0uc3FsCmluZGV4IDY5OTg3Zjc1ZTkuLmQ2ODU5YTViYzkgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdmFj dXVtLnNxbApAQCAtNzUsNiArNzUsMzMgQEAgVkFDVVVNIEZVTEwgdmFjdHN0OwogCiBWQUNVVU0g KERJU0FCTEVfUEFHRV9TS0lQUElORykgdmFjY2x1c3RlcjsKIAorLS0gUEFSQUxMRUwgb3B0aW9u CitDUkVBVEUgVEFCTEUgcHZhY3RzdCAoaSBJTlQsIGEgSU5UW10sIHAgUE9JTlQpIHdpdGggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IG9mZik7CitJTlNFUlQgSU5UTyBwdmFjdHN0IFNFTEVDVCBpLCBh cnJheVsxLDIsM10sIHBvaW50KGksIGkrMSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBp OworQ1JFQVRFIElOREVYIGJ0cmVlX3B2YWN0c3QgT04gcHZhY3RzdCBVU0lORyBidHJlZSAoaSk7 CitDUkVBVEUgSU5ERVggaGFzaF9wdmFjdHN0IE9OIHB2YWN0c3QgVVNJTkcgaGFzaCAoaSk7CitD UkVBVEUgSU5ERVggYnJpbl9wdmFjdHN0IE9OIHB2YWN0c3QgVVNJTkcgYnJpbiAoaSk7CitDUkVB VEUgSU5ERVggZ2luX3B2YWN0c3QgT04gcHZhY3RzdCBVU0lORyBnaW4gKGEpOworQ1JFQVRFIElO REVYIGdpc3RfcHZhY3RzdCBPTiBwdmFjdHN0IFVTSU5HIGdpc3QgKHApOworQ1JFQVRFIElOREVY IHNwZ2lzdF9wdmFjdHN0IE9OIHB2YWN0c3QgVVNJTkcgc3BnaXN0IChwKTsKKworLS0gVkFDVVVN IGludm9rZXMgcGFyYWxsZWwgaW5kZXggY2xlYW51cAorU0VUIG1pbl9wYXJhbGxlbF9pbmRleF9z Y2FuX3NpemUgdG8gMDsKK1ZBQ1VVTSAoUEFSQUxMRUwgMikgcHZhY3RzdDsKKworLS0gVkFDVVVN IGludm9rZXMgcGFyYWxsZWwgYnVsay1kZWxldGlvbgorVVBEQVRFIHB2YWN0c3QgU0VUIGkgPSBp IFdIRVJFIGkgPCAxMDAwOworVkFDVVVNIChQQVJBTExFTCAyKSBwdmFjdHN0OworCitWQUNVVU0g KFBBUkFMTEVMIC0xKSBwdmFjdHN0OyAtLSBlcnJvcgorVkFDVVVNIChQQVJBTExFTCAyLCBJTkRF WF9DTEVBTlVQIEZBTFNFKSBwdmFjdHN0OworVkFDVVVNIChQQVJBTExFTCAyLCBGVUxMIFRSVUUp IHB2YWN0c3Q7IC0tIGVycm9yLCBjYW5ub3QgdXNlIGJvdGggUEFSQUxMRUwgYW5kIEZVTEwKK0NS RUFURSBURU1QT1JBUlkgVEFCTEUgdG1wIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgSU5E RVggdG1wX2lkeDEgT04gdG1wIChhKTsKK1ZBQ1VVTSAoUEFSQUxMRUwgMSkgdG1wOyAtLSBkaXNh YmxlcyBwYXJhbGxlbCB2YWN1dW0gb3B0aW9uCitSRVNFVCBtaW5fcGFyYWxsZWxfaW5kZXhfc2Nh bl9zaXplOworRFJPUCBUQUJMRSBwdmFjdHN0OworCiAtLSBJTkRFWF9DTEVBTlVQIG9wdGlvbgog Q1JFQVRFIFRBQkxFIG5vX2luZGV4X2NsZWFudXAgKGkgSU5UIFBSSU1BUlkgS0VZLCB0IFRFWFQp OwogLS0gVXNlIHVuY29tcHJlc3NlZCBkYXRhIHN0b3JlZCBpbiB0b2FzdC4KZGlmZiAtLWdpdCBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKaW5kZXggY2FmNmI4NmY5Mi4uMDI0MmU2NjI3ZCAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTEyMTYsNyArMTIxNiwxMSBAQCBMUFZPSUQKIExQV1NUUgogTFNFRwog TFVJRAorTFZEZWFkVHVwbGVzCiBMVlJlbFN0YXRzCitMVlNoYXJlZAorTFZTaGFyZWRJbmRTdGF0 cworTFZQYXJhbGxlbFN0YXRlCiBMV0xvY2sKIExXTG9ja0hhbmRsZQogTFdMb2NrTWluaW1hbGx5 UGFkZGVkCi0tIAoyLjE2LjIud2luZG93cy4xCgo= --000000000000a9643b059c18f087--