Re: [WIP] Effective storage of duplicates in B-tree index.
Peter Geoghegan <[email protected]> Tue, 14 Jan 2020 18:08:57 -0800
| Newsgroups | gmane.comp.db.postgresql.devel.general |
|---|---|
| Message-ID | <CAH2-Wz=Tr6mxMsKRmv_=9-05_O9QWqOzQ8GweRV2DXS6+Y38QQ@mail.gmail.com> |
--000000000000f3369d059c2431aa Content-Type: text/plain; charset="UTF-8" On Fri, Jan 10, 2020 at 1:36 PM Peter Geoghegan <[email protected]> wrote: > Still, v29 doesn't resolve the following points you've raised, where I > haven't reached a final opinion on what to do myself. These items are > as follows (I'm quoting your modified patch file sent on January 8th > here): Still no progress on these items, but I am now posting v30. A new version seems warranted, because I now want to revive a patch from a couple of years back as part of the deduplication project -- it would be good to get feedback on that sooner rather than later. This is a patch that you [Heikki] are already familiar with -- the patch to speed up compactify_tuples() [1]. Sokolov Yura is CC'd here, since he is the original author. The deduplication patch is much faster with this in place. For example, with v30: pg@regression:5432 [25216]=# create unlogged table foo(bar int4); CREATE TABLE pg@regression:5432 [25216]=# create index unlogged_foo_idx on foo(bar); CREATE INDEX pg@regression:5432 [25216]=# insert into foo select g from generate_series(1, 1000000) g, generate_series(1,10) i; INSERT 0 10000000 Time: 17842.455 ms (00:17.842) If I revert the "Bucket sort for compactify_tuples" commit locally, then the same insert statement takes 31.614 seconds! In other words, the insert statement is made ~77% faster by that commit alone. The improvement is stable and reproducible. Clearly there is a big compactify_tuples() bottleneck that comes from PageIndexMultiDelete(). The hot spot is quite visible with "perf top -e branch-misses". The compactify_tuples() patch stalled because it wasn't clear if it was worth the trouble at the time. It was originally written to address a much smaller PageRepairFragmentation() bottleneck in heap pruning. ISTM that deduplication alone is a good enough reason to commit this patch. I haven't really changed anything about the 2017/2018 patch -- I need to do more review of that. We probably don't need to qsort() inlining stuff (the bucket sort thing is the real win), but I included it in v30 all the same. Other changes in v30: * We now avoid extra _bt_compare() calls within _bt_check_unique() -- no need to call _bt_compare() once per TID (once per equal tuple is quite enough). This is a noticeable performance win, even though the change was originally intended to make the logic in _bt_check_unique() clearer. * Reduced the limit on the size of a posting list tuple to 1/6 of a page -- down from 1/3. This seems like a good idea on the grounds that it keeps our options open if we split a page full of duplicates due to UPDATEs rather than INSERTs (i.e. we split a page full of duplicates that isn't also the rightmost page among pages that store only those duplicates). A lower limit is more conservative, and yet doesn't cost us that much space. * Refined nbtsort.c/CREATE INDEX to work sensibly with non-standard fillfactor settings. This last item is a minor bugfix, really. [1] https://commitfest.postgresql.org/14/1138/ -- Peter Geoghegan --000000000000f3369d059c2431aa Content-Type: application/octet-stream; name="v30-0005-DEBUG-Show-index-values-in-pageinspect.patch" Content-Disposition: attachment; filename="v30-0005-DEBUG-Show-index-values-in-pageinspect.patch" Content-Transfer-Encoding: base64 Content-ID: <f_k5en9nku4> X-Attachment-Id: f_k5en9nku4 RnJvbSA1MmM2MmNlMmRiZTY1YTc0OThjZDgxMjhjYzE2MmE0ZDU4MzEyYTk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMTggTm92IDIwMTkgMTk6MzU6MzAgLTA4MDAKU3ViamVjdDogW1BBVENIIHYzMCA1LzVdIERF QlVHOiBTaG93IGluZGV4IHZhbHVlcyBpbiBwYWdlaW5zcGVjdAoKVGhpcyBpcyBub3QgaW50ZW5k ZWQgZm9yIGNvbW1pdC4gIEl0IGlzIGluY2x1ZGVkIGFzIGEgY29udmVuaWVuY2UgZm9yCnJldmll d2Vycy4KLS0tCiBjb250cmliL3BhZ2VpbnNwZWN0L2J0cmVlZnVuY3MuYyAgICAgICB8IDY1ICsr KysrKysrKysrKysrKysrKy0tLS0tLS0tCiBjb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0 cmVlLm91dCB8ICAyICstCiAyIGZpbGVzIGNoYW5nZWQsIDQ3IGluc2VydGlvbnMoKyksIDIwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGFnZWluc3BlY3QvYnRyZWVmdW5jcy5j IGIvY29udHJpYi9wYWdlaW5zcGVjdC9idHJlZWZ1bmNzLmMKaW5kZXggMWIyZWExNDEyMi4uZmMx MjUyNDU1ZCAxMDA2NDQKLS0tIGEvY29udHJpYi9wYWdlaW5zcGVjdC9idHJlZWZ1bmNzLmMKKysr IGIvY29udHJpYi9wYWdlaW5zcGVjdC9idHJlZWZ1bmNzLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAog I2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNs dWRlICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKQEAgLTI0NSw2ICsyNDYsNyBAQCBidF9wYWdlX3N0 YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAgKi8KIHN0cnVjdCB1c2VyX2FyZ3MKIHsKKwlSZWxhdGlv bglyZWw7CiAJUGFnZQkJcGFnZTsKIAlPZmZzZXROdW1iZXIgb2Zmc2V0OwogCWJvb2wJCWxlYWZw YWdlOwpAQCAtMjYxLDYgKzI2Myw3IEBAIHN0cnVjdCB1c2VyX2FyZ3MKIHN0YXRpYyBEYXR1bQog YnRfcGFnZV9wcmludF90dXBsZXMoRnVuY0NhbGxDb250ZXh0ICpmY3R4LCBzdHJ1Y3QgdXNlcl9h cmdzICp1YXJncykKIHsKKwlSZWxhdGlvbglyZWwgPSB1YXJncy0+cmVsOwogCVBhZ2UJCXBhZ2Ug PSB1YXJncy0+cGFnZTsKIAlPZmZzZXROdW1iZXIgb2Zmc2V0ID0gdWFyZ3MtPm9mZnNldDsKIAli b29sCQlsZWFmcGFnZSA9IHVhcmdzLT5sZWFmcGFnZTsKQEAgLTI5NSwyNiArMjk4LDQ4IEBAIGJ0 X3BhZ2VfcHJpbnRfdHVwbGVzKEZ1bmNDYWxsQ29udGV4dCAqZmN0eCwgc3RydWN0IHVzZXJfYXJn cyAqdWFyZ3MpCiAJdmFsdWVzW2orK10gPSBCb29sR2V0RGF0dW0oSW5kZXhUdXBsZUhhc1Zhcndp ZHRocyhpdHVwKSk7CiAKIAlwdHIgPSAoY2hhciAqKSBpdHVwICsgSW5kZXhJbmZvRmluZERhdGFP ZmZzZXQoaXR1cC0+dF9pbmZvKTsKLQlkbGVuID0gSW5kZXhUdXBsZVNpemUoaXR1cCkgLSBJbmRl eEluZm9GaW5kRGF0YU9mZnNldChpdHVwLT50X2luZm8pOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUg dGhhdCAiZGF0YSIgY29sdW1uIGRvZXMgbm90IGluY2x1ZGUgcG9zdGluZyBsaXN0IG9yIHBpdm90 Ci0JICogdHVwbGUgcmVwcmVzZW50YXRpb24gb2YgaGVhcCBUSUQKLQkgKi8KLQlpZiAoQlRyZWVU dXBsZUlzUG9zdGluZyhpdHVwKSkKLQkJZGxlbiAtPSBJbmRleFR1cGxlU2l6ZShpdHVwKSAtIEJU cmVlVHVwbGVHZXRQb3N0aW5nT2Zmc2V0KGl0dXApOwotCWVsc2UgaWYgKEJUcmVlVHVwbGVJc1Bp dm90KGl0dXApICYmIEJUcmVlVHVwbGVHZXRIZWFwVElEKGl0dXApICE9IE5VTEwpCi0JCWRsZW4g LT0gTUFYQUxJR04oc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkpOwotCi0JZHVtcCA9IHBhbGxvYzAo ZGxlbiAqIDMgKyAxKTsKLQlkYXRhY3N0cmluZyA9IGR1bXA7Ci0JZm9yIChvZmYgPSAwOyBvZmYg PCBkbGVuOyBvZmYrKykKKwlpZiAocmVsKQogCXsKLQkJaWYgKG9mZiA+IDApCi0JCQkqZHVtcCsr ID0gJyAnOwotCQlzcHJpbnRmKGR1bXAsICIlMDJ4IiwgKihwdHIgKyBvZmYpICYgMHhmZik7Ci0J CWR1bXAgKz0gMjsKKwkJVHVwbGVEZXNjCWl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwp OworCQlEYXR1bQkJZGF0dmFsdWVzW0lOREVYX01BWF9LRVlTXTsKKwkJYm9vbAkJaXNudWxsW0lO REVYX01BWF9LRVlTXTsKKwkJaW50CQkJbmF0dHM7CisJCWludAkJCWluZG5rZXlhdHRzID0gcmVs LT5yZF9pbmRleC0+aW5kbmtleWF0dHM7CisKKwkJbmF0dHMgPSBCVHJlZVR1cGxlR2V0TkF0dHMo aXR1cCwgcmVsKTsKKworCQlpdHVwZGVzYy0+bmF0dHMgPSBNaW4oaW5kbmtleWF0dHMsIG5hdHRz KTsKKwkJbWVtc2V0KCZpc251bGwsIDB4RkYsIHNpemVvZihpc251bGwpKTsKKwkJaW5kZXhfZGVm b3JtX3R1cGxlKGl0dXAsIGl0dXBkZXNjLCBkYXR2YWx1ZXMsIGlzbnVsbCk7CisJCXJlbC0+cmRf aW5kZXgtPmluZG5rZXlhdHRzID0gbmF0dHM7CisJCWRhdGFjc3RyaW5nID0gQnVpbGRJbmRleFZh bHVlRGVzY3JpcHRpb24ocmVsLCBkYXR2YWx1ZXMsIGlzbnVsbCk7CisJCWl0dXBkZXNjLT5uYXR0 cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMocmVsKTsKKwkJcmVsLT5yZF9p bmRleC0+aW5kbmtleWF0dHMgPSBpbmRua2V5YXR0czsKIAl9CisJZWxzZQorCXsKKwkJZGxlbiA9 IEluZGV4VHVwbGVTaXplKGl0dXApIC0gSW5kZXhJbmZvRmluZERhdGFPZmZzZXQoaXR1cC0+dF9p bmZvKTsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhhdCAiZGF0YSIgY29sdW1uIGRvZXMgbm90 IGluY2x1ZGUgcG9zdGluZyBsaXN0IG9yIHBpdm90CisJCSAqIHR1cGxlIHJlcHJlc2VudGF0aW9u IG9mIGhlYXAgVElECisJCSAqLworCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKKwkJ CWRsZW4gLT0gSW5kZXhUdXBsZVNpemUoaXR1cCkgLSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNl dChpdHVwKTsKKwkJZWxzZSBpZiAoQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkgJiYgQlRyZWVUdXBs ZUdldEhlYXBUSUQoaXR1cCkgIT0gTlVMTCkKKwkJCWRsZW4gLT0gTUFYQUxJR04oc2l6ZW9mKEl0 ZW1Qb2ludGVyRGF0YSkpOworCisJCWR1bXAgPSBwYWxsb2MwKGRsZW4gKiAzICsgMSk7CisJCWRh dGFjc3RyaW5nID0gZHVtcDsKKwkJZm9yIChvZmYgPSAwOyBvZmYgPCBkbGVuOyBvZmYrKykKKwkJ eworCQkJaWYgKG9mZiA+IDApCisJCQkJKmR1bXArKyA9ICcgJzsKKwkJCXNwcmludGYoZHVtcCwg IiUwMngiLCAqKHB0ciArIG9mZikgJiAweGZmKTsKKwkJCWR1bXAgKz0gMjsKKwkJfQorCX0KKwog CXZhbHVlc1tqKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShkYXRhY3N0cmluZyk7CiAJcGZyZWUo ZGF0YWNzdHJpbmcpOwogCkBAIC00MzcsMTEgKzQ2MiwxMSBAQCBidF9wYWdlX2l0ZW1zKFBHX0ZV TkNUSU9OX0FSR1MpCiAKIAkJdWFyZ3MgPSBwYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2VyX2FyZ3Mp KTsKIAorCQl1YXJncy0+cmVsID0gcmVsOwogCQl1YXJncy0+cGFnZSA9IHBhbGxvYyhCTENLU1op OwogCQltZW1jcHkodWFyZ3MtPnBhZ2UsIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSwgQkxDS1NaKTsK IAogCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7Ci0JCXJlbGF0aW9uX2Nsb3NlKHJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKIAogCQl1YXJncy0+b2Zmc2V0ID0gRmlyc3RPZmZzZXROdW1iZXI7 CiAKQEAgLTQ3NSw2ICs1MDAsNyBAQCBidF9wYWdlX2l0ZW1zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ fQogCWVsc2UKIAl7CisJCXJlbGF0aW9uX2Nsb3NlKHVhcmdzLT5yZWwsIEFjY2Vzc1NoYXJlTG9j ayk7CiAJCXBmcmVlKHVhcmdzLT5wYWdlKTsKIAkJcGZyZWUodWFyZ3MpOwogCQlTUkZfUkVUVVJO X0RPTkUoZmN0eCk7CkBAIC01MjIsNiArNTQ4LDcgQEAgYnRfcGFnZV9pdGVtc19ieXRlYShQR19G VU5DVElPTl9BUkdTKQogCiAJCXVhcmdzID0gcGFsbG9jKHNpemVvZihzdHJ1Y3QgdXNlcl9hcmdz KSk7CiAKKwkJdWFyZ3MtPnJlbCA9IE5VTEw7CiAJCXVhcmdzLT5wYWdlID0gVkFSREFUQShyYXdf cGFnZSk7CiAKIAkJdWFyZ3MtPm9mZnNldCA9IEZpcnN0T2Zmc2V0TnVtYmVyOwpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wYWdlaW5zcGVjdC9leHBlY3RlZC9idHJlZS5vdXQgYi9jb250cmliL3BhZ2Vp bnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dAppbmRleCA5MmQ1YzU5NjU0Li5mYzY3OTRlZjY1IDEw MDY0NAotLS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dAorKysgYi9j b250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dApAQCAtNDEsNyArNDEsNyBAQCBj dGlkICAgICAgIHwgKDAsMSkKIGl0ZW1sZW4gICAgfCAxNgogbnVsbHMgICAgICB8IGYKIHZhcnMg ICAgICAgfCBmCi1kYXRhICAgICAgIHwgMDEgMDAgMDAgMDAgMDAgMDAgMDAgMDEKK2RhdGEgICAg ICAgfCAoYSk9KDcyMDU3NTk0MDM3OTI3OTM3KQogZGVhZCAgICAgICB8IGYKIGh0aWQgICAgICAg fCAoMCwxKQogdGlkcyAgICAgICB8IAotLSAKMi4xNy4xCgo= --000000000000f3369d059c2431aa Content-Type: application/octet-stream; name="v30-0004-Teach-pageinspect-about-nbtree-posting-lists.patch" Content-Disposition: attachment; filename="v30-0004-Teach-pageinspect-about-nbtree-posting-lists.patch" Content-Transfer-Encoding: base64 Content-ID: <f_k5en9nkt3> X-Attachment-Id: f_k5en9nkt3 RnJvbSBiMzY5Y2Y1ZTJhOTFlZjAxYjJlN2I2MzI1MzUwYTZjMTEzYmY1ZTcxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMTAgU2VwIDIwMTggMTk6NTM6NTEgLTA3MDAKU3ViamVjdDogW1BBVENIIHYzMCA0LzVdIFRl YWNoIHBhZ2VpbnNwZWN0IGFib3V0IG5idHJlZSBwb3N0aW5nIGxpc3RzLgoKQWRkIGEgY29sdW1u IGZvciBwb3N0aW5nIGxpc3QgVElEcyB0byBidF9wYWdlX2l0ZW1zKCkuICBBbHNvIGFkZCBhCmNv bHVtbiB0aGF0IGRpc3BsYXlzIGEgc2luZ2xlIGhlYXAgVElEIHZhbHVlIGZvciBlYWNoIHR1cGxl LCByZWdhcmRsZXNzCm9mIHdoZXRoZXIgb3Igbm90ICJjdGlkIiBpcyB1c2VkIGZvciBoZWFwIFRJ RC4gIEluIHRoZSBjYXNlIG9mIHBvc3RpbmcKbGlzdCB0dXBsZXMsIHRoZSB2YWx1ZSBpcyB0aGUg bG93ZXN0IGhlYXAgVElEIGluIHRoZSBwb3N0aW5nIGxpc3QuCkFyZ3VhYmx5IEkgc2hvdWxkIGhh dmUgZG9uZSB0aGlzIHdoZW4gY29tbWl0IGRkMjk5ZGY4IHdlbnQgaW4sIHNpbmNlCnRoYXQgYWRk ZWQgYSBwaXZvdCB0dXBsZSByZXByZXNlbnRhdGlvbiB0aGF0IGNvdWxkIGhhdmUgYSBoZWFwIFRJ RCBidXQKZGlkbid0IHVzZSBjdGlkIGZvciB0aGF0IHB1cnBvc2UuCgpBbHNvIGFkZCBhIGJvb2xl YW4gY29sdW1uIHRoYXQgZGlzcGxheXMgdGhlIExQX0RFQUQgYml0IHZhbHVlIGZvciBlYWNoCm5v bi1waXZvdCB0dXBsZS4KCk5vIHZlcnNpb24gYnVtcCBmb3IgdGhlIHBhZ2VpbnNwZWN0IGV4dGVu c2lvbiwgc2luY2UgdGhlcmUgaGFzbid0IGJlZW4gYQpzdGFibGUgcmVsZWFzZSBzaW5jZSB0aGUg bGFzdCB2ZXJzaW9uIGJ1bXAgKHNlZSBjb21taXQgNThiNGNiMzApLgotLS0KIGNvbnRyaWIvcGFn ZWluc3BlY3QvYnRyZWVmdW5jcy5jICAgICAgICAgICAgICB8IDExOCArKysrKysrKysrKysrKyst LS0KIGNvbnRyaWIvcGFnZWluc3BlY3QvZXhwZWN0ZWQvYnRyZWUub3V0ICAgICAgICB8ICAgNyAr KwogY29udHJpYi9wYWdlaW5zcGVjdC9wYWdlaW5zcGVjdC0tMS43LS0xLjguc3FsIHwgIDUzICsr KysrKysrCiBkb2Mvc3JjL3NnbWwvcGFnZWluc3BlY3Quc2dtbCAgICAgICAgICAgICAgICAgfCAg ODMgKysrKysrLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDIwNiBpbnNlcnRpb25zKCspLCA1NSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BhZ2VpbnNwZWN0L2J0cmVlZnVuY3Mu YyBiL2NvbnRyaWIvcGFnZWluc3BlY3QvYnRyZWVmdW5jcy5jCmluZGV4IDc4Y2RjNjllYzcuLjFi MmVhMTQxMjIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGFnZWluc3BlY3QvYnRyZWVmdW5jcy5jCisr KyBiL2NvbnRyaWIvcGFnZWluc3BlY3QvYnRyZWVmdW5jcy5jCkBAIC0zMSw5ICszMSwxMSBAQAog I2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNl LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlw ZS5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwYWdlaW5zcGVjdC5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGls cy92YXJsZW5hLmgiCkBAIC00NSw2ICs0Nyw4IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoYnRfcGFn ZV9zdGF0cyk7CiAKICNkZWZpbmUgSVNfSU5ERVgocikgKChyKS0+cmRfcmVsLT5yZWxraW5kID09 IFJFTEtJTkRfSU5ERVgpCiAjZGVmaW5lIElTX0JUUkVFKHIpICgociktPnJkX3JlbC0+cmVsYW0g PT0gQlRSRUVfQU1fT0lEKQorI2RlZmluZSBEYXR1bUdldEl0ZW1Qb2ludGVyKFgpCSAoKEl0ZW1Q b2ludGVyKSBEYXR1bUdldFBvaW50ZXIoWCkpCisjZGVmaW5lIEl0ZW1Qb2ludGVyR2V0RGF0dW0o WCkJIFBvaW50ZXJHZXREYXR1bShYKQogCiAvKiBub3RlOiBCbG9ja051bWJlciBpcyB1bnNpZ25l ZCwgaGVuY2UgY2FuJ3QgYmUgbmVnYXRpdmUgKi8KICNkZWZpbmUgQ0hFQ0tfUkVMQVRJT05fQkxP Q0tfUkFOR0UocmVsLCBibGtubykgeyBcCkBAIC0yNDMsNiArMjQ3LDkgQEAgc3RydWN0IHVzZXJf YXJncwogewogCVBhZ2UJCXBhZ2U7CiAJT2Zmc2V0TnVtYmVyIG9mZnNldDsKKwlib29sCQlsZWFm cGFnZTsKKwlib29sCQlyaWdodG1vc3Q7CisJVHVwbGVEZXNjCXR1cGQ7CiB9OwogCiAvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI1 MiwxNyArMjU5LDI1IEBAIHN0cnVjdCB1c2VyX2FyZ3MKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgRGF0dW0KLWJ0 X3BhZ2VfcHJpbnRfdHVwbGVzKEZ1bmNDYWxsQ29udGV4dCAqZmN0eCwgUGFnZSBwYWdlLCBPZmZz ZXROdW1iZXIgb2Zmc2V0KQorYnRfcGFnZV9wcmludF90dXBsZXMoRnVuY0NhbGxDb250ZXh0ICpm Y3R4LCBzdHJ1Y3QgdXNlcl9hcmdzICp1YXJncykKIHsKLQljaGFyCSAgICp2YWx1ZXNbNl07CisJ UGFnZQkJcGFnZSA9IHVhcmdzLT5wYWdlOworCU9mZnNldE51bWJlciBvZmZzZXQgPSB1YXJncy0+ b2Zmc2V0OworCWJvb2wJCWxlYWZwYWdlID0gdWFyZ3MtPmxlYWZwYWdlOworCWJvb2wJCXJpZ2h0 bW9zdCA9IHVhcmdzLT5yaWdodG1vc3Q7CisJYm9vbAkJcGl2b3RvZmZzZXQ7CisJRGF0dW0JCXZh bHVlc1s5XTsKKwlib29sCQludWxsc1s5XTsKIAlIZWFwVHVwbGUJdHVwbGU7CiAJSXRlbUlkCQlp ZDsKIAlJbmRleFR1cGxlCWl0dXA7CiAJaW50CQkJajsKIAlpbnQJCQlvZmY7CiAJaW50CQkJZGxl bjsKLQljaGFyCSAgICpkdW1wOworCWNoYXIJICAgKmR1bXAsCisJCQkgICAqZGF0YWNzdHJpbmc7 CiAJY2hhcgkgICAqcHRyOworCUl0ZW1Qb2ludGVyIGh0aWQ7CiAKIAlpZCA9IFBhZ2VHZXRJdGVt SWQocGFnZSwgb2Zmc2V0KTsKIApAQCAtMjcyLDE4ICsyODcsMjcgQEAgYnRfcGFnZV9wcmludF90 dXBsZXMoRnVuY0NhbGxDb250ZXh0ICpmY3R4LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZz ZXQpCiAJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpZCk7CiAKIAlqID0g MDsKLQl2YWx1ZXNbaisrXSA9IHBzcHJpbnRmKCIlZCIsIG9mZnNldCk7Ci0JdmFsdWVzW2orK10g PSBwc3ByaW50ZigiKCV1LCV1KSIsCi0JCQkJCQkgICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVy Tm9DaGVjaygmaXR1cC0+dF90aWQpLAotCQkJCQkJICAgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1i ZXJOb0NoZWNrKCZpdHVwLT50X3RpZCkpOwotCXZhbHVlc1tqKytdID0gcHNwcmludGYoIiVkIiwg KGludCkgSW5kZXhUdXBsZVNpemUoaXR1cCkpOwotCXZhbHVlc1tqKytdID0gcHNwcmludGYoIiVj IiwgSW5kZXhUdXBsZUhhc051bGxzKGl0dXApID8gJ3QnIDogJ2YnKTsKLQl2YWx1ZXNbaisrXSA9 IHBzcHJpbnRmKCIlYyIsIEluZGV4VHVwbGVIYXNWYXJ3aWR0aHMoaXR1cCkgPyAndCcgOiAnZicp OworCW1lbXNldChudWxscywgMCwgc2l6ZW9mKG51bGxzKSk7CisJdmFsdWVzW2orK10gPSBEYXR1 bUdldEludDE2KG9mZnNldCk7CisJdmFsdWVzW2orK10gPSBJdGVtUG9pbnRlckdldERhdHVtKCZp dHVwLT50X3RpZCk7CisJdmFsdWVzW2orK10gPSBJbnQzMkdldERhdHVtKChpbnQpIEluZGV4VHVw bGVTaXplKGl0dXApKTsKKwl2YWx1ZXNbaisrXSA9IEJvb2xHZXREYXR1bShJbmRleFR1cGxlSGFz TnVsbHMoaXR1cCkpOworCXZhbHVlc1tqKytdID0gQm9vbEdldERhdHVtKEluZGV4VHVwbGVIYXNW YXJ3aWR0aHMoaXR1cCkpOwogCiAJcHRyID0gKGNoYXIgKikgaXR1cCArIEluZGV4SW5mb0ZpbmRE YXRhT2Zmc2V0KGl0dXAtPnRfaW5mbyk7CiAJZGxlbiA9IEluZGV4VHVwbGVTaXplKGl0dXApIC0g SW5kZXhJbmZvRmluZERhdGFPZmZzZXQoaXR1cC0+dF9pbmZvKTsKKworCS8qCisJICogTWFrZSBz dXJlIHRoYXQgImRhdGEiIGNvbHVtbiBkb2VzIG5vdCBpbmNsdWRlIHBvc3RpbmcgbGlzdCBvciBw aXZvdAorCSAqIHR1cGxlIHJlcHJlc2VudGF0aW9uIG9mIGhlYXAgVElECisJICovCisJaWYgKEJU cmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCisJCWRsZW4gLT0gSW5kZXhUdXBsZVNpemUoaXR1cCkg LSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNldChpdHVwKTsKKwllbHNlIGlmIChCVHJlZVR1cGxl SXNQaXZvdChpdHVwKSAmJiBCVHJlZVR1cGxlR2V0SGVhcFRJRChpdHVwKSAhPSBOVUxMKQorCQlk bGVuIC09IE1BWEFMSUdOKHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKwogCWR1bXAgPSBwYWxs b2MwKGRsZW4gKiAzICsgMSk7Ci0JdmFsdWVzW2pdID0gZHVtcDsKKwlkYXRhY3N0cmluZyA9IGR1 bXA7CiAJZm9yIChvZmYgPSAwOyBvZmYgPCBkbGVuOyBvZmYrKykKIAl7CiAJCWlmIChvZmYgPiAw KQpAQCAtMjkxLDggKzMxNSw1NyBAQCBidF9wYWdlX3ByaW50X3R1cGxlcyhGdW5jQ2FsbENvbnRl eHQgKmZjdHgsIFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9mZnNldCkKIAkJc3ByaW50ZihkdW1w LCAiJTAyeCIsICoocHRyICsgb2ZmKSAmIDB4ZmYpOwogCQlkdW1wICs9IDI7CiAJfQorCXZhbHVl c1tqKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShkYXRhY3N0cmluZyk7CisJcGZyZWUoZGF0YWNz dHJpbmcpOwogCi0JdHVwbGUgPSBCdWlsZFR1cGxlRnJvbUNTdHJpbmdzKGZjdHgtPmF0dGlubWV0 YSwgdmFsdWVzKTsKKwkvKgorCSAqIEF2b2lkIGluZGljYXRpbmcgdGhhdCBwaXZvdCB0dXBsZSBm cm9tICFoZWFwa2V5c3BhY2UgaW5kZXggKHdoaWNoIHdvbid0CisJICogaGF2ZSB2NCsgc3RhdHVz IGJpdCBzZXQpIGlzIGRlYWQgb3IgaGFzIGEgaGVhcCBUSUQgLS0gdGhhdCBjYW4gb25seQorCSAq IGhhcHBlbiB3aXRoIG5vbi1waXZvdCB0dXBsZXMuICAoTW9zdCBiYWNrZW5kIGNvZGUgY2FuIHVz ZSB0aGUKKwkgKiBoZWFwa2V5c3BhY2UgZmllbGQgZnJvbSB0aGUgbWV0YXBhZ2UgdG8gZmlndXJl IG91dCB3aGljaCByZXByZXNlbnRhdGlvbgorCSAqIHRvIGV4cGVjdCwgYnV0IHdlIGhhdmUgdG8g YmUgYSBiaXQgY3JlYXRpdmUgaGVyZS4pCisJICovCisJcGl2b3RvZmZzZXQgPSAoIWxlYWZwYWdl IHx8ICghcmlnaHRtb3N0ICYmIG9mZnNldCA9PSBQX0hJS0VZKSk7CisKKwkvKiBMUF9ERUFEIHN0 YXR1cyBiaXQgKi8KKwlpZiAoIXBpdm90b2Zmc2V0KQorCQl2YWx1ZXNbaisrXSA9IEJvb2xHZXRE YXR1bShJdGVtSWRJc0RlYWQoaWQpKTsKKwllbHNlCisJCW51bGxzW2orK10gPSB0cnVlOworCisJ aHRpZCA9IEJUcmVlVHVwbGVHZXRIZWFwVElEKGl0dXApOworCWlmIChwaXZvdG9mZnNldCAmJiAh QlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpCisJCWh0aWQgPSBOVUxMOworCisJaWYgKGh0aWQpCisJ CXZhbHVlc1tqKytdID0gSXRlbVBvaW50ZXJHZXREYXR1bShodGlkKTsKKwllbHNlCisJCW51bGxz W2orK10gPSB0cnVlOworCisJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCisJeworCQkv KiBidWlsZCBhbiBhcnJheSBvZiBpdGVtIHBvaW50ZXJzICovCisJCUl0ZW1Qb2ludGVyIHRpZHM7 CisJCURhdHVtCSAgICp0aWRzX2RhdHVtOworCQlpbnQJCQlucG9zdGluZzsKKworCQl0aWRzID0g QlRyZWVUdXBsZUdldFBvc3RpbmcoaXR1cCk7CisJCW5wb3N0aW5nID0gQlRyZWVUdXBsZUdldE5Q b3N0aW5nKGl0dXApOworCQl0aWRzX2RhdHVtID0gKERhdHVtICopIHBhbGxvYyhucG9zdGluZyAq IHNpemVvZihEYXR1bSkpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG5wb3N0aW5nOyBpKyspCisJ CQl0aWRzX2RhdHVtW2ldID0gSXRlbVBvaW50ZXJHZXREYXR1bSgmdGlkc1tpXSk7CisJCXZhbHVl c1tqKytdID0gUG9pbnRlckdldERhdHVtKGNvbnN0cnVjdF9hcnJheSh0aWRzX2RhdHVtLAorCQkJ CQkJCQkJCQkJCSAgbnBvc3RpbmcsCisJCQkJCQkJCQkJCQkJICBUSURPSUQsCisJCQkJCQkJCQkJ CQkJICBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSwKKwkJCQkJCQkJCQkJCQkgIGZhbHNlLCAncycp KTsKKwkJcGZyZWUodGlkc19kYXR1bSk7CisJfQorCWVsc2UKKwkJbnVsbHNbaisrXSA9IHRydWU7 CisKKwkvKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgdHVwbGUgKi8KKwl0dXBsZSA9IGhl YXBfZm9ybV90dXBsZSh1YXJncy0+dHVwZCwgdmFsdWVzLCBudWxscyk7CiAKIAlyZXR1cm4gSGVh cFR1cGxlR2V0RGF0dW0odHVwbGUpOwogfQpAQCAtMzc4LDEyICs0NTEsMTMgQEAgYnRfcGFnZV9p dGVtcyhQR19GVU5DVElPTl9BUkdTKQogCQkJZWxvZyhOT1RJQ0UsICJwYWdlIGlzIGRlbGV0ZWQi KTsKIAogCQlmY3R4LT5tYXhfY2FsbHMgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHVhcmdzLT5w YWdlKTsKKwkJdWFyZ3MtPmxlYWZwYWdlID0gUF9JU0xFQUYob3BhcXVlKTsKKwkJdWFyZ3MtPnJp Z2h0bW9zdCA9IFBfUklHSFRNT1NUKG9wYXF1ZSk7CiAKIAkJLyogQnVpbGQgYSB0dXBsZSBkZXNj cmlwdG9yIGZvciBvdXIgcmVzdWx0IHR5cGUgKi8KIAkJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBl KGZjaW5mbywgTlVMTCwgJnR1cGxlRGVzYykgIT0gVFlQRUZVTkNfQ09NUE9TSVRFKQogCQkJZWxv ZyhFUlJPUiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpOwotCi0JCWZjdHgtPmF0 dGlubWV0YSA9IFR1cGxlRGVzY0dldEF0dEluTWV0YWRhdGEodHVwbGVEZXNjKTsKKwkJdWFyZ3Mt PnR1cGQgPSB0dXBsZURlc2M7CiAKIAkJZmN0eC0+dXNlcl9mY3R4ID0gdWFyZ3M7CiAKQEAgLTM5 NSw3ICs0NjksNyBAQCBidF9wYWdlX2l0ZW1zKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlpZiAoZmN0 eC0+Y2FsbF9jbnRyIDwgZmN0eC0+bWF4X2NhbGxzKQogCXsKLQkJcmVzdWx0ID0gYnRfcGFnZV9w cmludF90dXBsZXMoZmN0eCwgdWFyZ3MtPnBhZ2UsIHVhcmdzLT5vZmZzZXQpOworCQlyZXN1bHQg PSBidF9wYWdlX3ByaW50X3R1cGxlcyhmY3R4LCB1YXJncyk7CiAJCXVhcmdzLT5vZmZzZXQrKzsK IAkJU1JGX1JFVFVSTl9ORVhUKGZjdHgsIHJlc3VsdCk7CiAJfQpAQCAtNDYzLDEyICs1MzcsMTMg QEAgYnRfcGFnZV9pdGVtc19ieXRlYShQR19GVU5DVElPTl9BUkdTKQogCQkJZWxvZyhOT1RJQ0Us ICJwYWdlIGlzIGRlbGV0ZWQiKTsKIAogCQlmY3R4LT5tYXhfY2FsbHMgPSBQYWdlR2V0TWF4T2Zm c2V0TnVtYmVyKHVhcmdzLT5wYWdlKTsKKwkJdWFyZ3MtPmxlYWZwYWdlID0gUF9JU0xFQUYob3Bh cXVlKTsKKwkJdWFyZ3MtPnJpZ2h0bW9zdCA9IFBfUklHSFRNT1NUKG9wYXF1ZSk7CiAKIAkJLyog QnVpbGQgYSB0dXBsZSBkZXNjcmlwdG9yIGZvciBvdXIgcmVzdWx0IHR5cGUgKi8KIAkJaWYgKGdl dF9jYWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGxlRGVzYykgIT0gVFlQRUZVTkNf Q09NUE9TSVRFKQogCQkJZWxvZyhFUlJPUiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlw ZSIpOwotCi0JCWZjdHgtPmF0dGlubWV0YSA9IFR1cGxlRGVzY0dldEF0dEluTWV0YWRhdGEodHVw bGVEZXNjKTsKKwkJdWFyZ3MtPnR1cGQgPSB0dXBsZURlc2M7CiAKIAkJZmN0eC0+dXNlcl9mY3R4 ID0gdWFyZ3M7CiAKQEAgLTQ4MCw3ICs1NTUsNyBAQCBidF9wYWdlX2l0ZW1zX2J5dGVhKFBHX0ZV TkNUSU9OX0FSR1MpCiAKIAlpZiAoZmN0eC0+Y2FsbF9jbnRyIDwgZmN0eC0+bWF4X2NhbGxzKQog CXsKLQkJcmVzdWx0ID0gYnRfcGFnZV9wcmludF90dXBsZXMoZmN0eCwgdWFyZ3MtPnBhZ2UsIHVh cmdzLT5vZmZzZXQpOworCQlyZXN1bHQgPSBidF9wYWdlX3ByaW50X3R1cGxlcyhmY3R4LCB1YXJn cyk7CiAJCXVhcmdzLT5vZmZzZXQrKzsKIAkJU1JGX1JFVFVSTl9ORVhUKGZjdHgsIHJlc3VsdCk7 CiAJfQpAQCAtNTEwLDcgKzU4NSw3IEBAIGJ0X21ldGFwKFBHX0ZVTkNUSU9OX0FSR1MpCiAJQlRN ZXRhUGFnZURhdGEgKm1ldGFkOwogCVR1cGxlRGVzYwl0dXBsZURlc2M7CiAJaW50CQkJajsKLQlj aGFyCSAgICp2YWx1ZXNbOF07CisJY2hhcgkgICAqdmFsdWVzWzldOwogCUJ1ZmZlcgkJYnVmZmVy OwogCVBhZ2UJCXBhZ2U7CiAJSGVhcFR1cGxlCXR1cGxlOwpAQCAtNTU3LDE3ICs2MzIsMjAgQEAg YnRfbWV0YXAoUEdfRlVOQ1RJT05fQVJHUykKIAogCS8qCiAJICogR2V0IHZhbHVlcyBvZiBleHRl bmRlZCBtZXRhZGF0YSBpZiBhdmFpbGFibGUsIHVzZSBkZWZhdWx0IHZhbHVlcwotCSAqIG90aGVy d2lzZS4KKwkgKiBvdGhlcndpc2UuICBOb3RlIHRoYXQgd2UgcmVseSBvbiB0aGUgYXNzdW1wdGlv biB0aGF0IGJ0bV9zYWZlZGVkdXAgaXMKKwkgKiBpbml0aWFsaXplZCB0byB6ZXJvIG9uIGRhdGFi YXNlcyB0aGF0IHdlcmUgaW5pdGRiJ2QgYmVmb3JlIFBvc3RncmVzIDEzLgogCSAqLwogCWlmICht ZXRhZC0+YnRtX3ZlcnNpb24gPj0gQlRSRUVfTk9WQUNfVkVSU0lPTikKIAl7CiAJCXZhbHVlc1tq KytdID0gcHNwcmludGYoIiV1IiwgbWV0YWQtPmJ0bV9vbGRlc3RfYnRwb194YWN0KTsKIAkJdmFs dWVzW2orK10gPSBwc3ByaW50ZigiJWYiLCBtZXRhZC0+YnRtX2xhc3RfY2xlYW51cF9udW1faGVh cF90dXBsZXMpOworCQl2YWx1ZXNbaisrXSA9IG1ldGFkLT5idG1fc2FmZWRlZHVwID8gInQiIDog ImYiOwogCX0KIAllbHNlCiAJewogCQl2YWx1ZXNbaisrXSA9ICIwIjsKIAkJdmFsdWVzW2orK10g PSAiLTEiOworCQl2YWx1ZXNbaisrXSA9ICJmIjsKIAl9CiAKIAl0dXBsZSA9IEJ1aWxkVHVwbGVG cm9tQ1N0cmluZ3MoVHVwbGVEZXNjR2V0QXR0SW5NZXRhZGF0YSh0dXBsZURlc2MpLApkaWZmIC0t Z2l0IGEvY29udHJpYi9wYWdlaW5zcGVjdC9leHBlY3RlZC9idHJlZS5vdXQgYi9jb250cmliL3Bh Z2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dAppbmRleCAwN2MyZGNkNzcxLi45MmQ1YzU5NjU0 IDEwMDY0NAotLS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dAorKysg Yi9jb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dApAQCAtMTIsNiArMTIsNyBA QCBmYXN0cm9vdCAgICAgICAgICAgICAgICB8IDEKIGZhc3RsZXZlbCAgICAgICAgICAgICAgIHwg MAogb2xkZXN0X3hhY3QgICAgICAgICAgICAgfCAwCiBsYXN0X2NsZWFudXBfbnVtX3R1cGxlcyB8 IC0xCitzYWZlZGVkdXAgICAgICAgICAgICAgICB8IHQKIAogU0VMRUNUICogRlJPTSBidF9wYWdl X3N0YXRzKCd0ZXN0MV9hX2lkeCcsIDApOwogRVJST1I6ICBibG9jayAwIGlzIGEgbWV0YSBwYWdl CkBAIC00MSw2ICs0Miw5IEBAIGl0ZW1sZW4gICAgfCAxNgogbnVsbHMgICAgICB8IGYKIHZhcnMg ICAgICAgfCBmCiBkYXRhICAgICAgIHwgMDEgMDAgMDAgMDAgMDAgMDAgMDAgMDEKK2RlYWQgICAg ICAgfCBmCitodGlkICAgICAgIHwgKDAsMSkKK3RpZHMgICAgICAgfCAKIAogU0VMRUNUICogRlJP TSBidF9wYWdlX2l0ZW1zKCd0ZXN0MV9hX2lkeCcsIDIpOwogRVJST1I6ICBibG9jayBudW1iZXIg b3V0IG9mIHJhbmdlCkBAIC01NCw2ICs1OCw5IEBAIGl0ZW1sZW4gICAgfCAxNgogbnVsbHMgICAg ICB8IGYKIHZhcnMgICAgICAgfCBmCiBkYXRhICAgICAgIHwgMDEgMDAgMDAgMDAgMDAgMDAgMDAg MDEKK2RlYWQgICAgICAgfCBmCitodGlkICAgICAgIHwgKDAsMSkKK3RpZHMgICAgICAgfCAKIAog U0VMRUNUICogRlJPTSBidF9wYWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgndGVzdDFfYV9pZHgnLCAy KSk7CiBFUlJPUjogIGJsb2NrIG51bWJlciAyIGlzIG91dCBvZiByYW5nZSBmb3IgcmVsYXRpb24g InRlc3QxX2FfaWR4IgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wYWdlaW5zcGVjdC9wYWdlaW5zcGVj dC0tMS43LS0xLjguc3FsIGIvY29udHJpYi9wYWdlaW5zcGVjdC9wYWdlaW5zcGVjdC0tMS43LS0x Ljguc3FsCmluZGV4IDJhN2M0YjM1MTYuLjkzZWEzN2NkZTMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv cGFnZWluc3BlY3QvcGFnZWluc3BlY3QtLTEuNy0tMS44LnNxbAorKysgYi9jb250cmliL3BhZ2Vp bnNwZWN0L3BhZ2VpbnNwZWN0LS0xLjctLTEuOC5zcWwKQEAgLTE0LDMgKzE0LDU2IEBAIENSRUFU RSBGVU5DVElPTiBoZWFwX3R1cGxlX2luZm9tYXNrX2ZsYWdzKAogUkVUVVJOUyByZWNvcmQKIEFT ICdNT0RVTEVfUEFUSE5BTUUnLCAnaGVhcF90dXBsZV9pbmZvbWFza19mbGFncycKIExBTkdVQUdF IEMgU1RSSUNUIFBBUkFMTEVMIFNBRkU7CisKKy0tCistLSBidF9tZXRhcCgpCistLQorRFJPUCBG VU5DVElPTiBidF9tZXRhcCh0ZXh0KTsKK0NSRUFURSBGVU5DVElPTiBidF9tZXRhcChJTiByZWxu YW1lIHRleHQsCisgICAgT1VUIG1hZ2ljIGludDQsCisgICAgT1VUIHZlcnNpb24gaW50NCwKKyAg ICBPVVQgcm9vdCBpbnQ0LAorICAgIE9VVCBsZXZlbCBpbnQ0LAorICAgIE9VVCBmYXN0cm9vdCBp bnQ0LAorICAgIE9VVCBmYXN0bGV2ZWwgaW50NCwKKyAgICBPVVQgb2xkZXN0X3hhY3QgaW50NCwK KyAgICBPVVQgbGFzdF9jbGVhbnVwX251bV90dXBsZXMgcmVhbCwKKyAgICBPVVQgc2FmZWRlZHVw IGJvb2xlYW4pCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ2J0X21ldGFwJworTEFOR1VBR0UgQyBT VFJJQ1QgUEFSQUxMRUwgU0FGRTsKKworLS0KKy0tIGJ0X3BhZ2VfaXRlbXModGV4dCwgaW50NCkK Ky0tCitEUk9QIEZVTkNUSU9OIGJ0X3BhZ2VfaXRlbXModGV4dCwgaW50NCk7CitDUkVBVEUgRlVO Q1RJT04gYnRfcGFnZV9pdGVtcyhJTiByZWxuYW1lIHRleHQsIElOIGJsa25vIGludDQsCisgICAg T1VUIGl0ZW1vZmZzZXQgc21hbGxpbnQsCisgICAgT1VUIGN0aWQgdGlkLAorICAgIE9VVCBpdGVt bGVuIHNtYWxsaW50LAorICAgIE9VVCBudWxscyBib29sLAorICAgIE9VVCB2YXJzIGJvb2wsCisg ICAgT1VUIGRhdGEgdGV4dCwKKyAgICBPVVQgZGVhZCBib29sZWFuLAorICAgIE9VVCBodGlkIHRp ZCwKKyAgICBPVVQgdGlkcyB0aWRbXSkKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ2J0X3BhZ2VfaXRlbXMnCitMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExFTCBT QUZFOworCistLQorLS0gYnRfcGFnZV9pdGVtcyhieXRlYSkKKy0tCitEUk9QIEZVTkNUSU9OIGJ0 X3BhZ2VfaXRlbXMoYnl0ZWEpOworQ1JFQVRFIEZVTkNUSU9OIGJ0X3BhZ2VfaXRlbXMoSU4gcGFn ZSBieXRlYSwKKyAgICBPVVQgaXRlbW9mZnNldCBzbWFsbGludCwKKyAgICBPVVQgY3RpZCB0aWQs CisgICAgT1VUIGl0ZW1sZW4gc21hbGxpbnQsCisgICAgT1VUIG51bGxzIGJvb2wsCisgICAgT1VU IHZhcnMgYm9vbCwKKyAgICBPVVQgZGF0YSB0ZXh0LAorICAgIE9VVCBkZWFkIGJvb2xlYW4sCisg ICAgT1VUIGh0aWQgdGlkLAorICAgIE9VVCB0aWRzIHRpZFtdKQorUkVUVVJOUyBTRVRPRiByZWNv cmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAnYnRfcGFnZV9pdGVtc19ieXRlYScKK0xBTkdVQUdF IEMgU1RSSUNUIFBBUkFMTEVMIFNBRkU7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGFnZWlu c3BlY3Quc2dtbCBiL2RvYy9zcmMvc2dtbC9wYWdlaW5zcGVjdC5zZ21sCmluZGV4IDdlMmUxNDg3 ZDcuLmI1MjdkYWY2Y2EgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wYWdlaW5zcGVjdC5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9wYWdlaW5zcGVjdC5zZ21sCkBAIC0zMDAsMTMgKzMwMCwxNCBA QCB0ZXN0PSMgU0VMRUNUIHRfY3RpZCwgcmF3X2ZsYWdzLCBjb21iaW5lZF9mbGFncwogdGVzdD0j IFNFTEVDVCAqIEZST00gYnRfbWV0YXAoJ3BnX2Nhc3Rfb2lkX2luZGV4Jyk7CiAtWyBSRUNPUkQg MSBdLS0tLS0tLS0tLS0rLS0tLS0tLQogbWFnaWMgICAgICAgICAgICAgICAgICAgfCAzNDAzMjIK LXZlcnNpb24gICAgICAgICAgICAgICAgIHwgMwordmVyc2lvbiAgICAgICAgICAgICAgICAgfCA0 CiByb290ICAgICAgICAgICAgICAgICAgICB8IDEKIGxldmVsICAgICAgICAgICAgICAgICAgIHwg MAogZmFzdHJvb3QgICAgICAgICAgICAgICAgfCAxCiBmYXN0bGV2ZWwgICAgICAgICAgICAgICB8 IDAKIG9sZGVzdF94YWN0ICAgICAgICAgICAgIHwgNTgyCiBsYXN0X2NsZWFudXBfbnVtX3R1cGxl cyB8IDEwMDAKK3NhZmVkZWR1cCAgICAgICAgICAgICAgIHwgZgogPC9zY3JlZW4+CiAgICAgIDwv cGFyYT4KICAgICA8L2xpc3RpdGVtPgpAQCAtMzI5LDExICszMzAsMTEgQEAgdGVzdD0jIFNFTEVD VCAqIEZST00gYnRfcGFnZV9zdGF0cygncGdfY2FzdF9vaWRfaW5kZXgnLCAxKTsKIC1bIFJFQ09S RCAxIF0tKy0tLS0tCiBibGtubyAgICAgICAgIHwgMQogdHlwZSAgICAgICAgICB8IGwKLWxpdmVf aXRlbXMgICAgfCAyNTYKK2xpdmVfaXRlbXMgICAgfCAyMjQKIGRlYWRfaXRlbXMgICAgfCAwCi1h dmdfaXRlbV9zaXplIHwgMTIKK2F2Z19pdGVtX3NpemUgfCAxNgogcGFnZV9zaXplICAgICB8IDgx OTIKLWZyZWVfc2l6ZSAgICAgfCA0MDU2CitmcmVlX3NpemUgICAgIHwgMzY2OAogYnRwb19wcmV2 ICAgICB8IDAKIGJ0cG9fbmV4dCAgICAgfCAwCiBidHBvICAgICAgICAgIHwgMApAQCAtMzU2LDMz ICszNTcsNDUgQEAgYnRwb19mbGFncyAgICB8IDMKICAgICAgIDxmdW5jdGlvbj5idF9wYWdlX2l0 ZW1zPC9mdW5jdGlvbj4gcmV0dXJucyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dAogICAgICAg YWxsIG9mIHRoZSBpdGVtcyBvbiBhIEItdHJlZSBpbmRleCBwYWdlLiAgRm9yIGV4YW1wbGU6CiA8 c2NyZWVuPgotdGVzdD0jIFNFTEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcygncGdfY2FzdF9vaWRf aW5kZXgnLCAxKTsKLSBpdGVtb2Zmc2V0IHwgIGN0aWQgICB8IGl0ZW1sZW4gfCBudWxscyB8IHZh cnMgfCAgICBkYXRhCi0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0t LS0tLSstLS0tLS0tLS0tLS0tCi0gICAgICAgICAgMSB8ICgwLDEpICAgfCAgICAgIDEyIHwgZiAg ICAgfCBmICAgIHwgMjMgMjcgMDAgMDAKLSAgICAgICAgICAyIHwgKDAsMikgICB8ICAgICAgMTIg fCBmICAgICB8IGYgICAgfCAyNCAyNyAwMCAwMAotICAgICAgICAgIDMgfCAoMCwzKSAgIHwgICAg ICAxMiB8IGYgICAgIHwgZiAgICB8IDI1IDI3IDAwIDAwCi0gICAgICAgICAgNCB8ICgwLDQpICAg fCAgICAgIDEyIHwgZiAgICAgfCBmICAgIHwgMjYgMjcgMDAgMDAKLSAgICAgICAgICA1IHwgKDAs NSkgICB8ICAgICAgMTIgfCBmICAgICB8IGYgICAgfCAyNyAyNyAwMCAwMAotICAgICAgICAgIDYg fCAoMCw2KSAgIHwgICAgICAxMiB8IGYgICAgIHwgZiAgICB8IDI4IDI3IDAwIDAwCi0gICAgICAg ICAgNyB8ICgwLDcpICAgfCAgICAgIDEyIHwgZiAgICAgfCBmICAgIHwgMjkgMjcgMDAgMDAKLSAg ICAgICAgICA4IHwgKDAsOCkgICB8ICAgICAgMTIgfCBmICAgICB8IGYgICAgfCAyYSAyNyAwMCAw MAorcmVncmVzc2lvbj0jIFNFTEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcygndGVuazJfdW5pcXVl MScsIDUpOworIGl0ZW1vZmZzZXQgfCAgIGN0aWQgICB8IGl0ZW1sZW4gfCBudWxscyB8IHZhcnMg fCAgICAgICAgICBkYXRhICAgICAgICAgICB8IGRlYWQgfCAgIGh0aWQgICB8IHRpZHMKKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorICAgICAgICAgIDEgfCAoNDAs MSkgICB8ICAgICAgMTYgfCBmICAgICB8IGYgICAgfCBiOCAwNSAwMCAwMCAwMCAwMCAwMCAwMCB8 ICAgICAgfCAgICAgICAgICB8CisgICAgICAgICAgMiB8ICg1OCwxMSkgIHwgICAgICAxNiB8IGYg ICAgIHwgZiAgICB8IDRhIDA0IDAwIDAwIDAwIDAwIDAwIDAwIHwgZiAgICB8ICg1OCwxMSkgIHwK KyAgICAgICAgICAzIHwgKDI2Niw0KSAgfCAgICAgIDE2IHwgZiAgICAgfCBmICAgIHwgNGIgMDQg MDAgMDAgMDAgMDAgMDAgMDAgfCBmICAgIHwgKDI2Niw0KSAgfAorICAgICAgICAgIDQgfCAoMjc5 LDI1KSB8ICAgICAgMTYgfCBmICAgICB8IGYgICAgfCA0YyAwNCAwMCAwMCAwMCAwMCAwMCAwMCB8 IGYgICAgfCAoMjc5LDI1KSB8CisgICAgICAgICAgNSB8ICgzMzMsMTEpIHwgICAgICAxNiB8IGYg ICAgIHwgZiAgICB8IDRkIDA0IDAwIDAwIDAwIDAwIDAwIDAwIHwgZiAgICB8ICgzMzMsMTEpIHwK KyAgICAgICAgICA2IHwgKDg3LDI0KSAgfCAgICAgIDE2IHwgZiAgICAgfCBmICAgIHwgNGUgMDQg MDAgMDAgMDAgMDAgMDAgMDAgfCBmICAgIHwgKDg3LDI0KSAgfAorICAgICAgICAgIDcgfCAoMzgs MjIpICB8ICAgICAgMTYgfCBmICAgICB8IGYgICAgfCA0ZiAwNCAwMCAwMCAwMCAwMCAwMCAwMCB8 IGYgICAgfCAoMzgsMjIpICB8CisgICAgICAgICAgOCB8ICgyNzIsMTcpIHwgICAgICAxNiB8IGYg ICAgIHwgZiAgICB8IDUwIDA0IDAwIDAwIDAwIDAwIDAwIDAwIHwgZiAgICB8ICgyNzIsMTcpIHwK IDwvc2NyZWVuPgotICAgICAgSW4gYSBCLXRyZWUgbGVhZiBwYWdlLCA8c3RydWN0ZmllbGQ+Y3Rp ZDwvc3RydWN0ZmllbGQ+IHBvaW50cyB0byBhIGhlYXAgdHVwbGUuCi0gICAgICBJbiBhbiBpbnRl cm5hbCBwYWdlLCB0aGUgYmxvY2sgbnVtYmVyIHBhcnQgb2YgPHN0cnVjdGZpZWxkPmN0aWQ8L3N0 cnVjdGZpZWxkPgotICAgICAgcG9pbnRzIHRvIGFub3RoZXIgcGFnZSBpbiB0aGUgaW5kZXggaXRz ZWxmLCB3aGlsZSB0aGUgb2Zmc2V0IHBhcnQKLSAgICAgICh0aGUgc2Vjb25kIG51bWJlcikgaXMg aWdub3JlZCBhbmQgaXMgdXN1YWxseSAxLgorICAgICAgSW4gYSBCLXRyZWUgbGVhZiBwYWdlLCA8 c3RydWN0ZmllbGQ+Y3RpZDwvc3RydWN0ZmllbGQ+IHVzdWFsbHkKKyAgICAgIHBvaW50cyB0byBh IGhlYXAgdHVwbGUsIGFuZCA8c3RydWN0ZmllbGQ+ZGVhZDwvc3RydWN0ZmllbGQ+IG1heQorICAg ICAgaW5kaWNhdGUgdGhhdCB0aGUgaXRlbSBoYXMgaXRzIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVy YWw+IGJpdAorICAgICAgc2V0LiAgSW4gYW4gaW50ZXJuYWwgcGFnZSwgdGhlIGJsb2NrIG51bWJl ciBwYXJ0IG9mCisgICAgICA8c3RydWN0ZmllbGQ+Y3RpZDwvc3RydWN0ZmllbGQ+IHBvaW50cyB0 byBhbm90aGVyIHBhZ2UgaW4gdGhlCisgICAgICBpbmRleCBpdHNlbGYsIHdoaWxlIHRoZSBvZmZz ZXQgcGFydCAodGhlIHNlY29uZCBudW1iZXIpIGVuY29kZXMKKyAgICAgIG1ldGFkYXRhIGFib3V0 IHRoZSB0dXBsZS4gIFBvc3RpbmcgbGlzdCB0dXBsZXMgb24gbGVhZiBwYWdlcworICAgICAgYWxz byB1c2UgPHN0cnVjdGZpZWxkPmN0aWQ8L3N0cnVjdGZpZWxkPiBmb3IgbWV0YWRhdGEuCisgICAg ICA8c3RydWN0ZmllbGQ+aHRpZDwvc3RydWN0ZmllbGQ+IGFsd2F5cyBzaG93cyBhIHNpbmdsZSBo ZWFwIFRJRAorICAgICAgZm9yIHRoZSB0dXBsZSwgcmVnYXJkbGVzcyBvZiBob3cgaXQgaXMgcmVw cmVzZW50ZWQgKGludGVybmFsCisgICAgICBwYWdlIHR1cGxlcyBtYXkgbmVlZCB0byBzdG9yZSBh IGhlYXAgVElEIHdoZW4gdGhlcmUgYXJlIG1hbnkKKyAgICAgIGR1cGxpY2F0ZSB0dXBsZXMgb24g ZGVzY2VuZGVudCBsZWFmIHBhZ2VzKS4KKyAgICAgIDxzdHJ1Y3RmaWVsZD50aWRzPC9zdHJ1Y3Rm aWVsZD4gaXMgYSBsaXN0IG9mIFRJRHMgdGhhdCBpcyBzdG9yZWQKKyAgICAgIHdpdGhpbiBwb3N0 aW5nIGxpc3QgdHVwbGVzICh0dXBsZXMgY3JlYXRlZCBieSBkZWR1cGxpY2F0aW9uKS4KICAgICAg PC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgIE5vdGUgdGhhdCB0aGUgZmlyc3QgaXRlbSBvbiBh bnkgbm9uLXJpZ2h0bW9zdCBwYWdlIChhbnkgcGFnZSB3aXRoCiAgICAgICBhIG5vbi16ZXJvIHZh bHVlIGluIHRoZSA8c3RydWN0ZmllbGQ+YnRwb19uZXh0PC9zdHJ1Y3RmaWVsZD4gZmllbGQpIGlz IHRoZQogICAgICAgcGFnZSdzIDxxdW90ZT5oaWdoIGtleTwvcXVvdGU+LCBtZWFuaW5nIGl0cyA8 c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+CiAgICAgICBzZXJ2ZXMgYXMgYW4gdXBwZXIg Ym91bmQgb24gYWxsIGl0ZW1zIGFwcGVhcmluZyBvbiB0aGUgcGFnZSwgd2hpbGUKLSAgICAgIGl0 cyA8c3RydWN0ZmllbGQ+Y3RpZDwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIG1lYW5pbmdsZXNzLiAg QWxzbywgb24gbm9uLWxlYWYKLSAgICAgIHBhZ2VzLCB0aGUgZmlyc3QgcmVhbCBkYXRhIGl0ZW0g KHRoZSBmaXJzdCBpdGVtIHRoYXQgaXMgbm90IGEgaGlnaAotICAgICAga2V5KSBpcyBhIDxxdW90 ZT5taW51cyBpbmZpbml0eTwvcXVvdGU+IGl0ZW0sIHdpdGggbm8gYWN0dWFsIHZhbHVlCi0gICAg ICBpbiBpdHMgPHN0cnVjdGZpZWxkPmRhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZC4gIFN1Y2ggYW4g aXRlbSBkb2VzIGhhdmUgYSB2YWxpZAotICAgICAgZG93bmxpbmsgaW4gaXRzIDxzdHJ1Y3RmaWVs ZD5jdGlkPC9zdHJ1Y3RmaWVsZD4gZmllbGQsIGhvd2V2ZXIuCisgICAgICBpdHMgPHN0cnVjdGZp ZWxkPmN0aWQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBkb2VzIG5vdCBwb2ludCB0bworICAgICAgYW5v dGhlciBibG9jay4gIEFsc28sIG9uIG5vbi1sZWFmIHBhZ2VzLCB0aGUgZmlyc3QgcmVhbCBkYXRh IGl0ZW0KKyAgICAgICh0aGUgZmlyc3QgaXRlbSB0aGF0IGlzIG5vdCBhIGhpZ2gga2V5KSBpcyBh IDxxdW90ZT5taW51cworICAgICAgaW5maW5pdHk8L3F1b3RlPiBpdGVtLCB3aXRoIG5vIGFjdHVh bCB2YWx1ZSBpbiBpdHMKKyAgICAgIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZmll bGQuICBTdWNoIGFuIGl0ZW0gZG9lcyBoYXZlIGEKKyAgICAgIHZhbGlkIGRvd25saW5rIGluIGl0 cyA8c3RydWN0ZmllbGQ+Y3RpZDwvc3RydWN0ZmllbGQ+IGZpZWxkLAorICAgICAgaG93ZXZlci4K ICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTQw MiwxNyArNDE1LDE3IEBAIHRlc3Q9IyBTRUxFQ1QgKiBGUk9NIGJ0X3BhZ2VfaXRlbXMoJ3BnX2Nh c3Rfb2lkX2luZGV4JywgMSk7CiAgICAgICB3aXRoIDxmdW5jdGlvbj5nZXRfcmF3X3BhZ2U8L2Z1 bmN0aW9uPiBzaG91bGQgYmUgcGFzc2VkIGFzIGFyZ3VtZW50LiAgU28KICAgICAgIHRoZSBsYXN0 IGV4YW1wbGUgY291bGQgYWxzbyBiZSByZXdyaXR0ZW4gbGlrZSB0aGlzOgogPHNjcmVlbj4KLXRl c3Q9IyBTRUxFQ1QgKiBGUk9NIGJ0X3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCdwZ19jYXN0X29p ZF9pbmRleCcsIDEpKTsKLSBpdGVtb2Zmc2V0IHwgIGN0aWQgICB8IGl0ZW1sZW4gfCBudWxscyB8 IHZhcnMgfCAgICBkYXRhCi0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t Ky0tLS0tLSstLS0tLS0tLS0tLS0tCi0gICAgICAgICAgMSB8ICgwLDEpICAgfCAgICAgIDEyIHwg ZiAgICAgfCBmICAgIHwgMjMgMjcgMDAgMDAKLSAgICAgICAgICAyIHwgKDAsMikgICB8ICAgICAg MTIgfCBmICAgICB8IGYgICAgfCAyNCAyNyAwMCAwMAotICAgICAgICAgIDMgfCAoMCwzKSAgIHwg ICAgICAxMiB8IGYgICAgIHwgZiAgICB8IDI1IDI3IDAwIDAwCi0gICAgICAgICAgNCB8ICgwLDQp ICAgfCAgICAgIDEyIHwgZiAgICAgfCBmICAgIHwgMjYgMjcgMDAgMDAKLSAgICAgICAgICA1IHwg KDAsNSkgICB8ICAgICAgMTIgfCBmICAgICB8IGYgICAgfCAyNyAyNyAwMCAwMAotICAgICAgICAg IDYgfCAoMCw2KSAgIHwgICAgICAxMiB8IGYgICAgIHwgZiAgICB8IDI4IDI3IDAwIDAwCi0gICAg ICAgICAgNyB8ICgwLDcpICAgfCAgICAgIDEyIHwgZiAgICAgfCBmICAgIHwgMjkgMjcgMDAgMDAK LSAgICAgICAgICA4IHwgKDAsOCkgICB8ICAgICAgMTIgfCBmICAgICB8IGYgICAgfCAyYSAyNyAw MCAwMAorcmVncmVzc2lvbj0jIFNFTEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcyhnZXRfcmF3X3Bh Z2UoJ3RlbmsyX3VuaXF1ZTEnLCA1KSk7CisgaXRlbW9mZnNldCB8ICAgY3RpZCAgIHwgaXRlbWxl biB8IG51bGxzIHwgdmFycyB8ICAgICAgICAgIGRhdGEgICAgICAgICAgIHwgZGVhZCB8ICAgaHRp ZCAgIHwgdGlkcworLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg ICAgICAgICAgMSB8ICg0MCwxKSAgIHwgICAgICAxNiB8IGYgICAgIHwgZiAgICB8IGI4IDA1IDAw IDAwIDAwIDAwIDAwIDAwIHwgICAgICB8ICAgICAgICAgIHwKKyAgICAgICAgICAyIHwgKDU4LDEx KSAgfCAgICAgIDE2IHwgZiAgICAgfCBmICAgIHwgNGEgMDQgMDAgMDAgMDAgMDAgMDAgMDAgfCBm ICAgIHwgKDU4LDExKSAgfAorICAgICAgICAgIDMgfCAoMjY2LDQpICB8ICAgICAgMTYgfCBmICAg ICB8IGYgICAgfCA0YiAwNCAwMCAwMCAwMCAwMCAwMCAwMCB8IGYgICAgfCAoMjY2LDQpICB8Cisg ICAgICAgICAgNCB8ICgyNzksMjUpIHwgICAgICAxNiB8IGYgICAgIHwgZiAgICB8IDRjIDA0IDAw IDAwIDAwIDAwIDAwIDAwIHwgZiAgICB8ICgyNzksMjUpIHwKKyAgICAgICAgICA1IHwgKDMzMywx MSkgfCAgICAgIDE2IHwgZiAgICAgfCBmICAgIHwgNGQgMDQgMDAgMDAgMDAgMDAgMDAgMDAgfCBm ICAgIHwgKDMzMywxMSkgfAorICAgICAgICAgIDYgfCAoODcsMjQpICB8ICAgICAgMTYgfCBmICAg ICB8IGYgICAgfCA0ZSAwNCAwMCAwMCAwMCAwMCAwMCAwMCB8IGYgICAgfCAoODcsMjQpICB8Cisg ICAgICAgICAgNyB8ICgzOCwyMikgIHwgICAgICAxNiB8IGYgICAgIHwgZiAgICB8IDRmIDA0IDAw IDAwIDAwIDAwIDAwIDAwIHwgZiAgICB8ICgzOCwyMikgIHwKKyAgICAgICAgICA4IHwgKDI3Miwx NykgfCAgICAgIDE2IHwgZiAgICAgfCBmICAgIHwgNTAgMDQgMDAgMDAgMDAgMDAgMDAgMDAgfCBm ICAgIHwgKDI3MiwxNykgfAogPC9zY3JlZW4+CiAgICAgICBBbGwgdGhlIG90aGVyIGRldGFpbHMg YXJlIHRoZSBzYW1lIGFzIGV4cGxhaW5lZCBpbiB0aGUgcHJldmlvdXMgaXRlbS4KICAgICAgPC9w YXJhPgotLSAKMi4xNy4xCgo= --000000000000f3369d059c2431aa Content-Type: application/octet-stream; name="v30-0003-Bucket-sort-for-compactify_tuples.patch" Content-Disposition: attachment; filename="v30-0003-Bucket-sort-for-compactify_tuples.patch" Content-Transfer-Encoding: base64 Content-ID: <f_k5en9nkt2> X-Attachment-Id: f_k5en9nkt2 RnJvbSA2NGMwM2IyMDQwZWVmYTgxNjQ0NDc1MzRiZjFjM2RkNWQ1Y2JiMzIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTQgSmFuIDIwMjAgMTU6Mjc6NTQgLTA4MDAKU3ViamVjdDogW1BBVENIIHYzMCAzLzVdIEJ1 Y2tldCBzb3J0IGZvciBjb21wYWN0aWZ5X3R1cGxlcy4KCk9yaWdpbmFsIGNvbW1pdCBtZXNzYWdl IGZyb20gU29rb2xvdiBZdXJhOgoKVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGJ1Y2tldCBzb3J0IGZv ciBjb21wYWN0aWZ5X3R1cGxlczoKLSBvbmUgcGFzcyBvZiBzdGFibGUgcHJlZml4IHNvcnQgb24g aGlnaCA4IGJpdHMgb2Ygb2Zmc2V0Ci0gYW5kIGluc2VydGlvbiBzb3J0IGZvciBidWNrZXRzIGxh cmdlciB0aGFuIDEgZWxlbWVudAoKVGhpcyBhcHByb2FjaCBhbGxvd3MgdG8gc2F2ZSAzJSBvZiBj cHUgaW4gZGVnZW5lcmF0ZSBjYXNlCihoaWdobHkgaW50ZW5zaXZlIEhPVCByYW5kb20gdXBkYXRl cyBvbiB1bmxvZ2dlZCB0YWJsZSB3aXRoCiBzeW5jaHJvbml6ZWRfY29tbWl0PW9mZiksIGFuZCBz cGVlZHMgdXAgV0FMIHJlcGxheWluZyAoYXMgd2VyZQpmb3VuZCBieSBIZWlra2kgTGlubmFrYW5n YXMpLgoKU2FtZSBhcHByb2FjaCB3ZXJlIGltcGxlbWVudGVkIGJ5IEhlaWtraSBMaW5uYWthbmdh cyBzb21lIHRpbWUgYWdvIHdpdGgKc2V2ZXJhbCBkaXN0aW5jdGlvbnMuCgpUaGlzIHBhdGNoIHdh cyByZXRyaWV2ZWQgZnJvbToKaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUwtckNBMm43VWZWdTFVaTBm JTJCN2NWTjR2QUtWTTAlMkItY1pLYl9rYTYtbUdRQkFGOTJ3JTQwbWFpbC5nbWFpbC5jb20KCkNG IEVudHJ5IGZvciBwYXRjaDogaHR0cHM6Ly9jb21taXRmZXN0LnBvc3RncmVzcWwub3JnLzE0LzEx MzgvCgpSZWxhdGVkIHRocmVhZDogaHR0cHM6Ly9wb3N0Z3IuZXMvbS81NDZCODlERS43MDMwOTA2 JTQwdm13YXJlLmNvbQotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMgfCA4 MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA3OCBpbnNl cnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvcGFnZS9idWZwYWdlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jCmlu ZGV4IDMyZmYwM2IzZTQuLjAwODFkZDkyMWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvcGFnZS9idWZwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2Uu YwpAQCAtNDM2LDYgKzQzNiw3OSBAQCBpdGVtb2ZmY29tcGFyZShjb25zdCB2b2lkICppdGVtaWRw MSwgY29uc3Qgdm9pZCAqaXRlbWlkcDIpCiAJCSgoaXRlbUlkU29ydCkgaXRlbWlkcDEpLT5pdGVt b2ZmOwogfQogCisjZGVmaW5lIFFTX1NVRkZJWCBpdGVtSWRzCisjZGVmaW5lIFFTX1RZUEUgaXRl bUlkU29ydERhdGEKKyNkZWZpbmUgUVNfU0NPUEUgc3RhdGljCisjZGVmaW5lIFFTX0NNUCBpdGVt b2ZmY29tcGFyZQorI2RlZmluZSBRU19ERUZJTkUKKyNkZWZpbmUgUVNfU0tJUF9NRUQzCisjaW5j bHVkZSAibGliL3Fzb3J0X3RlbXBsYXRlLmgiCisKKy8qCisgKiBTb3J0IGFuIGFycmF5IG9mIGl0 ZW1JZFNvcnQncyBvbiBpdGVtb2ZmLCBkZXNjZW5kaW5nLgorICoKKyAqIEl0IHVzZXMgYnVja2V0 IHNvcnQ6CisgKiAtIHNpbmdsZSBwYXNzIG9mIHN0YWJsZSBwcmVmaXggc29ydCBvbiBoaWdoIDgg Yml0cworICogLSBhbmQgaW5zZXJ0aW9uIHNvcnQgb24gYnVja2V0cyBsYXJnZXIgdGhhbiAxIGVs ZW1lbnQKKyAqLworc3RhdGljIHZvaWQKK2J1Y2tldHNvcnRfaXRlbUlkcyhpdGVtSWRTb3J0IGl0 ZW1pZGJhc2UsIGludCBuaXRlbXMpCit7CisJaXRlbUlkU29ydERhdGEgY29weVtNYXgoTWF4SW5k ZXhUdXBsZXNQZXJQYWdlLCBNYXhIZWFwVHVwbGVzUGVyUGFnZSldOworI2RlZmluZSBOU1BMSVQg MjU2CisjZGVmaW5lIFBSRUZESVYgKEJMQ0tTWiAvIE5TUExJVCkKKwkvKiB0d28gZXh0cmEgZWxl bWVudHMgdG8gZW11bGF0ZSBvZmZzZXQgb24gcHJldmlvdXMgc3RlcCAqLworCXVpbnQxNgkJY291 bnRbTlNQTElUICsgMl0gPSB7MH07CisJaW50CQkJaSwKKwkJCQltYXgsCisJCQkJdG90YWwsCisJ CQkJcG9zLAorCQkJCWhpZ2hiaXRzOworCisJQXNzZXJ0KG5pdGVtcyA8PSBNYXhJbmRleFR1cGxl c1BlclBhZ2UpOworCWZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKwl7CisJCWhpZ2hiaXRz ID0gaXRlbWlkYmFzZVtpXS5pdGVtb2ZmIC8gUFJFRkRJVjsKKwkJY291bnRbaGlnaGJpdHNdKys7 CisJfQorCS8qIHNvcnQgaW4gZGVjcmVhc2luZyBvcmRlciAqLworCW1heCA9IHRvdGFsID0gY291 bnRbTlNQTElUIC0gMV07CisJZm9yIChpID0gTlNQTElUIC0gMjsgaSA+PSAwOyBpLS0pCisJewor CQltYXggfD0gY291bnRbaV07CisJCXRvdGFsICs9IGNvdW50W2ldOworCQljb3VudFtpXSA9IHRv dGFsOworCX0KKworCS8qCisJICogY291bnRbaysxXSBpcyBzdGFydCBvZiBidWNrZXQgaywgY291 bnRba10gaXMgZW5kIG9mIGJ1Y2tldCBrLCBhbmQKKwkgKiBjb3VudFtrXSAtIGNvdW50W2srMV0g aXMgbGVuZ3RoIG9mIGJ1Y2tldCBrLgorCSAqLworCUFzc2VydChjb3VudFswXSA9PSBuaXRlbXMp OworCWZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKwl7CisJCWhpZ2hiaXRzID0gaXRlbWlk YmFzZVtpXS5pdGVtb2ZmIC8gUFJFRkRJVjsKKwkJcG9zID0gY291bnRbaGlnaGJpdHMgKyAxXTsK KwkJY291bnRbaGlnaGJpdHMgKyAxXSsrOworCQljb3B5W3Bvc10gPSBpdGVtaWRiYXNlW2ldOwor CX0KKwlBc3NlcnQoY291bnRbMV0gPT0gbml0ZW1zKTsKKworCWlmIChtYXggPiAxKQorCXsKKwkJ LyoKKwkJICogY291bnRbaysyXSBpcyBzdGFydCBvZiBidWNrZXQgaywgY291bnRbaysxXSBpcyBl bmQgb2YgYnVja2V0IGssIGFuZAorCQkgKiBjb3VudFtrKzFdLWNvdW50W2srMl0gaXMgbGVuZ3Ro IG9mIGJ1Y2tldCBrLgorCQkgKi8KKwkJZm9yIChpID0gTlNQTElUOyBpID4gMDsgaS0tKQorCQl7 CisJCQlpbnNlcnRpb25fc29ydF9pdGVtSWRzKGNvcHkgKyBjb3VudFtpICsgMV0sIGNvdW50W2ld IC0gY291bnRbaSArIDFdKTsKKwkJfQorCX0KKworCW1lbWNweShpdGVtaWRiYXNlLCBjb3B5LCBz aXplb2YoaXRlbUlkU29ydERhdGEpICogbml0ZW1zKTsKK30KKwogLyoKICAqIEFmdGVyIHJlbW92 aW5nIG9yIG1hcmtpbmcgc29tZSBsaW5lIHBvaW50ZXJzIHVudXNlZCwgbW92ZSB0aGUgdHVwbGVz IHRvCiAgKiByZW1vdmUgdGhlIGdhcHMgY2F1c2VkIGJ5IHRoZSByZW1vdmVkIGl0ZW1zLgpAQCAt NDQ4LDggKzUyMSwxMSBAQCBjb21wYWN0aWZ5X3R1cGxlcyhpdGVtSWRTb3J0IGl0ZW1pZGJhc2Us IGludCBuaXRlbXMsIFBhZ2UgcGFnZSkKIAlpbnQJCQlpOwogCiAJLyogc29ydCBpdGVtSWRTb3J0 RGF0YSBhcnJheSBpbnRvIGRlY3JlYXNpbmcgaXRlbW9mZiBvcmRlciAqLwotCXFzb3J0KChjaGFy ICopIGl0ZW1pZGJhc2UsIG5pdGVtcywgc2l6ZW9mKGl0ZW1JZFNvcnREYXRhKSwKLQkJICBpdGVt b2ZmY29tcGFyZSk7CisJaWYgKG5pdGVtcyA+IDQ4KQorCQlidWNrZXRzb3J0X2l0ZW1JZHMoaXRl bWlkYmFzZSwgbml0ZW1zKTsKKwllbHNlCisJCXFzb3J0X2l0ZW1JZHMoaXRlbWlkYmFzZSwgbml0 ZW1zKTsKKwogCiAJdXBwZXIgPSBwaGRyLT5wZF9zcGVjaWFsOwogCWZvciAoaSA9IDA7IGkgPCBu aXRlbXM7IGkrKykKLS0gCjIuMTcuMQoK --000000000000f3369d059c2431aa Content-Type: application/octet-stream; name="v30-0001-Add-deduplication-to-nbtree.patch" Content-Disposition: attachment; filename="v30-0001-Add-deduplication-to-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: <f_k5en9nk10> X-Attachment-Id: f_k5en9nk10 RnJvbSA1ZDk3MTNjNzgyMGRiYTA4NGUwMzZhYThjMDBjZjkyNzNhNTdmZjM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgU2VwIDIwMTkgMTA6MDg6NTMgLTA3MDAKU3ViamVjdDogW1BBVENIIHYzMCAxLzVdIEFk ZCBkZWR1cGxpY2F0aW9uIHRvIG5idHJlZS4KCkRlZHVwbGljYXRpb24gcmVkdWNlcyB0aGUgc3Rv cmFnZSBvdmVyaGVhZCBvZiBkdXBsaWNhdGVzIGluIGluZGV4ZXMgdGhhdAp1c2UgdGhlIHN0YW5k YXJkIG5idHJlZSBpbmRleCBhY2Nlc3MgbWV0aG9kLiAgVGhlIGRlZHVwbGljYXRpb24gcHJvY2Vz cwppcyBhcHBsaWVkIGxhemlseSwgYWZ0ZXIgdGhlIHBvaW50IHdoZXJlIG9wcG9ydHVuaXN0aWMg ZGVsZXRpb24gb2YKTFBfREVBRC1tYXJrZWQgaW5kZXggdHVwbGVzIG9jY3Vycy4gIERlZHVwbGlj YXRpb24gaXMgb25seSBhcHBsaWVkIGF0CnRoZSBwb2ludCB3aGVyZSBhIGxlYWYgcGFnZSBzcGxp dCB3b3VsZCBvdGhlcndpc2UgYmUgcmVxdWlyZWQuICBOZXcKInBvc3RpbmcgbGlzdCB0dXBsZXMi IGFyZSBmb3JtZWQgYnkgbWVyZ2luZyB0b2dldGhlciBleGlzdGluZyBkdXBsaWNhdGUKdHVwbGVz LiAgVGhlIHBoeXNpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpdGVtcyBvbiBhbiBuYnRyZWUg bGVhZiBwYWdlCmlzIG1hZGUgbW9yZSBzcGFjZSBlZmZpY2llbnQgYnkgZGVkdXBsaWNhdGlvbiwg YnV0IHRoZSBsb2dpY2FsIGNvbnRlbnRzCm9mIHRoZSBwYWdlIGFyZSBub3QgY2hhbmdlZC4KClRl c3RpbmcgaGFzIHNob3duIHRoYXQgbmJ0cmVlIGRlZHVwbGljYXRpb24gY2FuIGdlbmVyYWxseSBt YWtlIGluZGV4ZXMKd2l0aCBhYm91dCAxMCBvciAxNSB0dXBsZXMgZm9yIGVhY2ggZGlzdGluY3Qg a2V5IHZhbHVlIGFib3V0IDIuNVggLSA0WApzbWFsbGVyLCBldmVuIHdpdGggc2luZ2xlIGNvbHVt biBpbnRlZ2VyIGluZGV4ZXMgKGUuZy4sIGFuIGluZGV4IG9uIGEKcmVmZXJlbmNpbmcgY29sdW1u IHRoYXQgYWNjb21wYW5pZXMgYSBmb3JlaWduIGtleSkuICBUaGUgZmluYWwgc2l6ZSBvZgpzaW5n bGUgY29sdW1uIG5idHJlZSBpbmRleGVzIGNvbWVzIGNsb3NlIHRvIHRoZSBmaW5hbCBzaXplIG9m IGEgc2ltaWxhcgpjb250cmliL2J0cmVlX2dpbiBpbmRleCwgYXQgbGVhc3QgaW4gY2FzZXMgd2hl cmUgR0lOJ3MgcG9zdGluZyBsaXN0CmNvbXByZXNzaW9uIGlzbid0IHZlcnkgZWZmZWN0aXZlLgoK VGhlIGxhenkgYXBwcm9hY2ggdGFrZW4gYnkgbmJ0cmVlIGhhcyBzaWduaWZpY2FudCBhZHZhbnRh Z2VzIG92ZXIgYQpHSU4gc3R5bGUgZWFnZXIgYXBwcm9hY2guICBNb3N0IGluZGl2aWR1YWwgaW5z ZXJ0cyBvZiBpbmRleCB0dXBsZXMgaGF2ZQpleGFjdGx5IHRoZSBzYW1lIG92ZXJoZWFkIGFzIGJl Zm9yZS4gIFRoZSBleHRyYSBvdmVyaGVhZCBvZgpkZWR1cGxpY2F0aW9uIGlzIGFtb3J0aXplZCBh Y3Jvc3MgaW5zZXJ0aW9ucywganVzdCBsaWtlIHRoZSBvdmVyaGVhZCBvZgpwYWdlIHNwbGl0cy4g IFRoZSBrZXkgc3BhY2Ugb2YgaW5kZXhlcyB3b3JrcyBpbiB0aGUgc2FtZSB3YXkgYXMgaXQgaGFz CnNpbmNlIGNvbW1pdCBkZDI5OWRmOCAodGhlIGNvbW1pdCB3aGljaCBtYWRlIGhlYXAgVElEIGEg dGllYnJlYWtlcgpjb2x1bW4pLCBzaW5jZSBvbmx5IHRoZSBwaHlzaWNhbCByZXByZXNlbnRhdGlv biBvZiB0dXBsZXMgaXMgY2hhbmdlZC4KRnVydGhlcm1vcmUsIGRlZHVwbGljYXRpb24gY2FuIGVh c2lseSBiZSB0dXJuZWQgb24gb3Igb2ZmLiAgVGhlIHNwbGl0CnBvaW50IGNob2ljZSBsb2dpYyBk b2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZCwgc2luY2UgcG9zdGluZyBsaXN0IHR1cGxlcwphcmUg anVzdCB0dXBsZXMgd2l0aCBwYXlsb2FkLCBtdWNoIGxpa2UgdHVwbGVzIHdpdGggbm9uLWtleSBj b2x1bW5zIGluCklOQ0xVREUgaW5kZXhlcy4gIChuYnRzcGxpdGxvYy5jIGlzIHN0aWxsIG9wdGlt aXplZCB0byBtYWtlIGludGVsbGlnZW50CmNob2ljZXMgaW4gdGhlIHByZXNlbmNlIG9mIHBvc3Rp bmcgbGlzdCB0dXBsZXMsIHRob3VnaCBvbmx5IGJlY2F1c2UKc3VmZml4IHRydW5jYXRpb24gd2ls bCByb3V0aW5lbHkgbWFrZSBuZXcgaGlnaCBrZXlzIGZhciBmYXIgc21hbGxlciB0aGFuCnRoZSBu b24tcGl2b3QgdHVwbGUgdGhleSdyZSBkZXJpdmVkIGZyb20pLgoKSW4gZ2VuZXJhbCwgbmJ0cmVl IHVuaXF1ZSBpbmRleGVzIHNvbWV0aW1lcyBuZWVkIHRvIHN0b3JlIG11bHRpcGxlIGVxdWFsCihu b24tTlVMTCkgdHVwbGVzIGZvciB0aGUgc2FtZSBsb2dpY2FsIHJvdyAob25lIHBlciBwaHlzaWNh bCByb3cKdmVyc2lvbikuICBVbmlxdWUgaW5kZXhlcyBjYW4gdXNlIGRlZHVwbGljYXRpb24gc3Bl Y2lmaWNhbGx5IHRvIG1lcmdlCnRvZ2V0aGVyIG11bHRpcGxlIHBoeXNpY2FsIHZlcnNpb25zIChp bmRleCB0dXBsZXMpLCB0aG91Z2ggdGhlIG92ZXJhbGwKc3RyYXRlZ3kgdXNlZCB0aGVyZSBpcyBz b21ld2hhdCBkaWZmZXJlbnQuICBUaGUgaGlnaC1sZXZlbCBnb2FsIHdpdGgKdW5pcXVlIGluZGV4 ZXMgaXMgdG8gcHJldmVudCAidW5uZWNlc3NhcnkiIHBhZ2Ugc3BsaXRzIC0tIHNwbGl0cyBjYXVz ZWQKb25seSBieSBhIHNob3J0IHRlcm0gYnVyc3Qgb2YgaW5kZXggdHVwbGUgdmVyc2lvbnMuICBU aGlzIGlzIG9mdGVuIGEKY29uY2VybiB3aXRoIGZyZXF1ZW50bHkgdXBkYXRlZCB0YWJsZXMgd2hl cmUgVVBEQVRFcyBhbHdheXMgbW9kaWZ5IGF0CmxlYXN0IG9uZSBpbmRleGVkIGNvbHVtbiAobWFr aW5nIGl0IGltcG9zc2libGUgZm9yIHRoZSB0YWJsZSBhbSB0byB1c2UKYW4gb3B0aW1pemF0aW9u IGxpa2UgaGVhcGFtJ3MgaGVhcC1vbmx5IHR1cGxlcyBvcHRpbWl6YXRpb24pLgpEZWR1cGxpY2F0 aW9uIGluIHVuaXF1ZSBpbmRleGVzIGVmZmVjdGl2ZWx5ICJidXlzIHRpbWUiIGZvciBleGlzdGlu ZwpuYnRyZWUgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXMgdG8gcnVuIGFuZCBwcmV2ZW50 IHRoZXNlIHBhZ2UKc3BsaXRzICh0aGUgTFBfREVBRCBiaXQgc2V0dGluZyBwZXJmb3JtZWQgZHVy aW5nIHRoZSB1bmlxdWVuZXNzIGNoZWNrIGlzCnRoZSBtb3N0IGltcG9ydGFudCBtZWNoYW5pc20g Zm9yIGNvbnRyb2xsaW5nIGJsb2F0IHdpdGggYWZmZWN0ZWQKd29ya2xvYWRzKS4KCkRlZHVwbGlj YXRpb24gaW4gbm9uLXVuaXF1ZSBpbmRleGVzIGlzIGNvbnRyb2xsZWQgYnkgYSBuZXcgR1VDLApk ZWR1cGxpY2F0ZV9idHJlZV9pdGVtcy4gIEEgbmV3IHN0b3JhZ2UgcGFyYW1ldGVyIChkZWR1cGxp Y2F0ZV9pdGVtcykgaXMKYWxzbyBhZGRlZCwgd2hpY2ggY29udHJvbHMgZGVkdXBsaWNhdGlvbiBh dCB0aGUgaW5kZXggcmVsYXRpb24KZ3JhbnVsYXJpdHkuICBJdCBjYW4gYmUgdXNlZCB0byBkaXNh YmxlIGRlZHVwbGljYXRpb24gaW4gdW5pcXVlIGluZGV4ZXMKZm9yIGRlYnVnZ2luZyBwdXJwb3Nl cy4gKFRoZSBnZW5lcmFsIGNyaXRlcmlhIGZvciBhcHBseWluZyBkZWR1cGxpY2F0aW9uCmluIHVu aXF1ZSBpbmRleGVzIGVuc3VyZXMgdGhhdCBvbmx5IGNhc2VzIHdpdGggc29tZSBkdXBsaWNhdGVz IHdpbGwKYWN0dWFsbHkgZ2V0IGEgZGVkdXBsaWNhdGlvbiBwYXNzIC0tIHRoYXQncyB3aHkgdW5p cXVlIGluZGV4ZXMgYXJlIG5vdAphZmZlY3RlZCBieSB0aGUgZGVkdXBsaWNhdGVfYnRyZWVfaXRl bXMgR1VDLikKClNpbmNlIHBvc3RpbmcgbGlzdCB0dXBsZXMgaGF2ZSBvbmx5IG9uZSBsaW5lIHBv aW50ZXIgKGp1c3QgbGlrZSBhbnkKb3RoZXIgdHVwbGUpLCB0aGV5IGhhdmUgb25seSBvbmUgTFBf REVBRCBiaXQuICBUaGUgTFBfREVBRCBiaXQgY2FuIHN0aWxsCmJlIHNldCBieSBib3RoIHVuaXF1 ZSBjaGVja2luZyBhbmQgdGhlIGtpbGxfcHJpb3JfdHVwbGUgb3B0aW1pemF0aW9uLApidXQgb25s eSB3aGVuIGFsbCBoZWFwIFRJRHMgYXJlIGRlYWQtdG8tYWxsLiAgVGhpcyAibG9zcyBvZiBncmFu dWxhcml0eSIKZm9yIExQX0RFQUQgYml0cyBpcyBjb25zaWRlcmVkIGFuIGFjY2VwdGFibGUgZG93 bnNpZGUgb2YgdGhlCmRlZHVwbGljYXRpb24gZGVzaWduLiAgV2UgYWx3YXlzIHByZWZlciBkZWxl dGluZyBMUF9ERUFEIGl0ZW1zIHRvIGEKZGVkdXBsaWNhdGlvbiBwYXNzLCBhbmQgYSBkZWR1cGxp Y2F0aW9uIHBhc3MgY2FuIG9ubHkgdGFrZSBwbGFjZSBhdCB0aGUKcG9pbnQgd2hlcmUgd2UnZCBw cmV2aW91c2x5IGhhdmUgaGFkIHRvIHNwbGl0IHRoZSBwYWdlLCBzbyBhbnkgd29ya2xvYWQKdGhh dCBwYXlzIGEgY29zdCBoZXJlIG11c3QgYWxzbyBnZXQgYSBzaWduaWZpY2FudCBiZW5lZml0LgoK QnVtcCBYTE9HX1BBR0VfTUFHSUMgYmVjYXVzZSB4bF9idHJlZV92YWN1dW0gY2hhbmdlZC4KCk5v IGJ1bXAgaW4gQlRSRUVfVkVSU0lPTiwgc2luY2UgZGVkdXBsaWNhdGlvbiBvbmx5IGFmZmVjdHMg dGhlIHBoeXNpY2FsCnJlcHJlc2VudGF0aW9uIG9mIHR1cGxlcy4gIEhvd2V2ZXIsIHVzZXJzIG11 c3Qgc3RpbGwgUkVJTkRFWCBhCnBnX3VwZ3JhZGUnZCBpbmRleCB0byBiZWZvcmUgaXRzIGxlYWYg cGFnZSBzcGxpdHMgd2lsbCBhcHBseQpkZWR1cGxpY2F0aW9uLiAgQW4gaW5kZXggYnVpbGQgaXMg dGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgbmV3IG5idHJlZQptZXRhcGFnZSBmbGFnIGluZGljYXRp bmcgdGhhdCBkZWR1cGxpY2F0aW9uIGlzIGdlbmVyYWxseSBzYWZlLgoKQXV0aG9yOiBBbmFzdGFz aWEgTHViZW5uaWtvdmEsIFBldGVyIEdlb2doZWdhbgpSZXZpZXdlZC1CeTogUGV0ZXIgR2VvZ2hl Z2FuLCBIZWlra2kgTGlubmFrYW5nYXMKRGlzY3Vzc2lvbjoKICAgIGh0dHBzOi8vcG9zdGdyLmVz L20vNTVFNDA1MUIuNzAyMDIwOUBwb3N0Z3Jlc3Byby5ydQogICAgaHR0cHM6Ly9wb3N0Z3IuZXMv bS80YWI2ZTJkYi1iY2VlLWY0Y2YtMDkxNi0zYTA2ZTZjY2JiNTVAcG9zdGdyZXNwcm8ucnUKLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAgICAgICAgfCA0MDcgKysr KysrKy0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oICAgICAgICAgICAgICAgICAgfCAg OTYgKystCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaCAgICAgICAgICAgICAgICAgfCAg IDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jICAgICAgICB8ICAg OSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAgIDQg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAgICB8IDE1MSArKyst CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMgICAgICAgICAgfCA4MDkgKysr KysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jICAg ICAgICAgfCAzOTcgKysrKysrKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2Uu YyAgICAgICAgICAgfCAyMjMgKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVl LmMgICAgICAgICAgICB8IDE4MCArKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNl YXJjaC5jICAgICAgICAgfCAyNzEgKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHNvcnQuYyAgICAgICAgICAgfCAxOTAgKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRzcGxpdGxvYy5jICAgICAgIHwgIDM5ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHV0aWxzLmMgICAgICAgICAgfCAyMjYgKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0eGxvZy5jICAgICAgICAgICB8IDIwMiArKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL25idGRlc2MuYyAgICAgICAgIHwgIDIzICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2Uv YnVmcGFnZS5jICAgICAgICAgICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj LmMgICAgICAgICAgICAgICAgICB8ICAxMCArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwogc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jICAg ICAgICAgICAgICAgICAgIHwgICA0ICstCiBjb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5j ICAgICAgICAgICAgICAgfCAyMzEgKysrKy0KIGRvYy9zcmMvc2dtbC9idHJlZS5zZ21sICAgICAg ICAgICAgICAgICAgICAgICB8IDEyMCArKy0KIGRvYy9zcmMvc2dtbC9jaGFyc2V0LnNnbWwgICAg ICAgICAgICAgICAgICAgICB8ICAgOSArLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAg ICAgICAgICAgICAgICAgIHwgIDI1ICsKIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNn bWwgICAgICAgICAgICB8ICAzOCArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9idHJlZV9p bmRleC5vdXQgICAgIHwgIDE2ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX2luZGV4LnNx bCAgICAgICAgICB8ICAxNyArCiAyOCBmaWxlcyBjaGFuZ2VkLCAzMzkwIGluc2VydGlvbnMoKyks IDMyMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idGRlZHVwLmMKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVl LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggMjBhY2U2OWRhYi4uMDM2YTlk OWU5NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtMjQsNiArMjQsOSBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1fdG9jLmgiCiAKKy8qIEdVQyBwYXJh bWV0ZXIgKi8KK2V4dGVybiBib29sIGRlZHVwbGljYXRlX2J0cmVlX2l0ZW1zOworCiAvKiBUaGVy ZSdzIHJvb20gZm9yIGEgMTYtYml0IHZhY3V1bSBjeWNsZSBJRCBpbiBCVFBhZ2VPcGFxdWVEYXRh ICovCiB0eXBlZGVmIHVpbnQxNiBCVEN5Y2xlSWQ7CiAKQEAgLTEwOCw2ICsxMTEsNyBAQCB0eXBl ZGVmIHN0cnVjdCBCVE1ldGFQYWdlRGF0YQogCQkJCQkJCQkJCSAqIHBhZ2VzICovCiAJZmxvYXQ4 CQlidG1fbGFzdF9jbGVhbnVwX251bV9oZWFwX3R1cGxlczsJLyogbnVtYmVyIG9mIGhlYXAgdHVw bGVzCiAJCQkJCQkJCQkJCQkJICogZHVyaW5nIGxhc3QgY2xlYW51cCAqLworCWJvb2wJCWJ0bV9z YWZlZGVkdXA7CS8qIGRlZHVwbGljYXRpb24ga25vd24gdG8gYmUgc2FmZT8gKi8KIH0gQlRNZXRh UGFnZURhdGE7CiAKICNkZWZpbmUgQlRQYWdlR2V0TWV0YShwKSBcCkBAIC0xMjQsNiArMTI4LDEz IEBAIHR5cGVkZWYgc3RydWN0IEJUTWV0YVBhZ2VEYXRhCiAgKiBuZWVkIHRvIGJlIGltbWVkaWF0 ZWx5IHJlLWluZGV4ZWQgYXQgcGdfdXBncmFkZS4gIEluIG9yZGVyIHRvIGdldCB0aGUKICAqIG5l dyBoZWFwa2V5c3BhY2Ugc2VtYW50aWNzLCBob3dldmVyLCBhIFJFSU5ERVggaXMgbmVlZGVkLgog ICoKKyAqIERlZHVwbGljYXRpb24gaXMgc2FmZSB0byB1c2Ugd2hlbiB0aGUgYnRtX3NhZmVkZWR1 cCBmaWVsZCBpcyBzZXQgdG8KKyAqIHRydWUuICBJdCdzIHNhZmUgdG8gcmVhZCB0aGUgYnRtX3Nh ZmVkZWR1cCBmaWVsZCBvbiB2ZXJzaW9uIDMsIGJ1dCBvbmx5CisgKiB2ZXJzaW9uIDQgaW5kZXhl cyBtYWtlIHVzZSBvZiBkZWR1cGxpY2F0aW9uLiAgRXZlbiB2ZXJzaW9uIDQgaW5kZXhlcworICog Y3JlYXRlZCBvbiBQb3N0Z3JlU1FMIHYxMiB3aWxsIG5lZWQgYSBSRUlOREVYIHRvIG1ha2UgdXNl IG9mCisgKiBkZWR1cGxpY2F0aW9uLCB0aG91Z2gsIHNpbmNlIHRoZXJlIGlzIG5vIG90aGVyIHdh eSB0byBzZXQgYnRtX3NhZmVkZWR1cAorICogdG8gdHJ1ZSAocGdfdXBncmFkZSBoYXNuJ3QgYmVl biB0YXVnaHQgdG8gc2V0IHRoZSBtZXRhcGFnZSBmaWVsZCkuCisgKgogICogQnRyZWUgdmVyc2lv biAyIGlzIG1vc3RseSB0aGUgc2FtZSBhcyB2ZXJzaW9uIDMuICBUaGVyZSBhcmUgdHdvIG5ldwog ICogZmllbGRzIGluIHRoZSBtZXRhcGFnZSB0aGF0IHdlcmUgaW50cm9kdWNlZCBpbiB2ZXJzaW9u IDMuICBBIHZlcnNpb24gMgogICogbWV0YXBhZ2Ugd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHVwZ3Jh ZGVkIHRvIHZlcnNpb24gMyBvbiB0aGUgZmlyc3QKQEAgLTE1Niw2ICsxNjcsMjEgQEAgdHlwZWRl ZiBzdHJ1Y3QgQlRNZXRhUGFnZURhdGEKIAkJCQkgICBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVy RGF0YSArIDMqc2l6ZW9mKEl0ZW1JZERhdGEpKSAtIFwKIAkJCQkgICBNQVhBTElHTihzaXplb2Yo QlRQYWdlT3BhcXVlRGF0YSkpKSAvIDMpCiAKKy8qCisgKiBNYXhUSURzUGVyQlRyZWVQYWdlIGlz IGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgaGVhcCBUSURzIHR1cGxlcworICogdGhh dCBtYXkgYmUgc3RvcmVkIG9uIGEgYnRyZWUgbGVhZiBwYWdlLiAgSXQgaXMgdXNlZCB0byBzaXpl IHRoZQorICogcGVyLXBhZ2UgdGVtcG9yYXJ5IGJ1ZmZlcnMgdXNlZCBieSBpbmRleCBzY2Fucy4p CisgKgorICogTm90ZTogd2UgZG9uJ3QgYm90aGVyIGNvbnNpZGVyaW5nIHBlci10dXBsZSBvdmVy aGVhZHMgaGVyZSB0byBrZWVwCisgKiB0aGluZ3Mgc2ltcGxlICh2YWx1ZSBpcyBiYXNlZCBvbiBo b3cgbWFueSBlbGVtZW50cyBhIHNpbmdsZSBhcnJheSBvZgorICogaGVhcCBUSURzIG11c3QgaGF2 ZSB0byBmaWxsIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBwYWdlIGhlYWRlciBhbmQKKyAqIHNwZWNp YWwgYXJlYSkuICBUaGUgdmFsdWUgaXMgc2xpZ2h0bHkgaGlnaGVyIChpLmUuIG1vcmUgY29uc2Vy dmF0aXZlKQorICogdGhhbiBuZWNlc3NhcnkgYXMgYSByZXN1bHQsIHdoaWNoIGlzIGNvbnNpZGVy ZWQgYWNjZXB0YWJsZS4KKyAqLworI2RlZmluZSBNYXhUSURzUGVyQlRyZWVQYWdlIFwKKwkoaW50 KSAoKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhIC0gc2l6ZW9mKEJUUGFnZU9wYXF1ZURh dGEpKSAvIFwKKwkJICAgc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkpCisKIC8qCiAgKiBUaGUgbGVh Zi1wYWdlIGZpbGxmYWN0b3IgZGVmYXVsdHMgdG8gOTAlIGJ1dCBpcyB1c2VyLWFkanVzdGFibGUu CiAgKiBGb3IgcGFnZXMgYWJvdmUgdGhlIGxlYWYgbGV2ZWwsIHdlIHVzZSBhIGZpeGVkIDcwJSBm aWxsZmFjdG9yLgpAQCAtMjMwLDE2ICsyNTYsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRNZXRhUGFn ZURhdGEKICAqIHR1cGxlcyAobm9uLXBpdm90IHR1cGxlcykuICBfYnRfY2hlY2tfbmF0dHMoKSBl bmZvcmNlcyB0aGUgcnVsZXMKICAqIGRlc2NyaWJlZCBoZXJlLgogICoKLSAqIE5vbi1waXZvdCB0 dXBsZSBmb3JtYXQ6CisgKiBOb24tcGl2b3QgdHVwbGUgZm9ybWF0IChwbGFpbi9ub24tcG9zdGlu ZyB2YXJpYW50KToKICAqCiAgKiAgdF90aWQgfCB0X2luZm8gfCBrZXkgdmFsdWVzIHwgSU5DTFVE RSBjb2x1bW5zLCBpZiBhbnkKICAqCiAgKiB0X3RpZCBwb2ludHMgdG8gdGhlIGhlYXAgVElELCB3 aGljaCBpcyBhIHRpZWJyZWFrZXIga2V5IGNvbHVtbiBhcyBvZgotICogQlRSRUVfVkVSU0lPTiA0 LiAgQ3VycmVudGx5LCB0aGUgSU5ERVhfQUxUX1RJRF9NQVNLIHN0YXR1cyBiaXQgaXMgbmV2ZXIK LSAqIHNldCBmb3Igbm9uLXBpdm90IHR1cGxlcy4KKyAqIEJUUkVFX1ZFUlNJT04gNC4KICAqCi0g KiBBbGwgb3RoZXIgdHlwZXMgb2YgaW5kZXggdHVwbGVzICgicGl2b3QiIHR1cGxlcykgb25seSBo YXZlIGtleSBjb2x1bW5zLAotICogc2luY2UgcGl2b3QgdHVwbGVzIG9ubHkgZXhpc3QgdG8gcmVw cmVzZW50IGhvdyB0aGUga2V5IHNwYWNlIGlzCisgKiBOb24tcGl2b3QgdHVwbGVzIGNvbXBsZW1l bnQgcGl2b3QgdHVwbGVzLCB3aGljaCBvbmx5IGhhdmUga2V5IGNvbHVtbnMuCisgKiBUaGUgc29s ZSBwdXJwb3NlIG9mIHBpdm90IHR1cGxlcyBpcyB0byByZXByZXNlbnQgaG93IHRoZSBrZXkgc3Bh Y2UgaXMKICAqIHNlcGFyYXRlZC4gIEluIGdlbmVyYWwsIGFueSBCLVRyZWUgaW5kZXggdGhhdCBo YXMgbW9yZSB0aGFuIG9uZSBsZXZlbAogICogKGkuZS4gYW55IGluZGV4IHRoYXQgZG9lcyBub3Qg anVzdCBjb25zaXN0IG9mIGEgbWV0YXBhZ2UgYW5kIGEgc2luZ2xlCiAgKiBsZWFmIHJvb3QgcGFn ZSkgbXVzdCBoYXZlIHNvbWUgbnVtYmVyIG9mIHBpdm90IHR1cGxlcywgc2luY2UgcGl2b3QKQEAg LTI2NCw3ICsyODksOCBAQCB0eXBlZGVmIHN0cnVjdCBCVE1ldGFQYWdlRGF0YQogICogSU5ERVhf QUxUX1RJRF9NQVNLIGJpdCBpcyBzZXQsIHdoaWNoIGRvZXNuJ3QgY291bnQgdGhlIHRyYWlsaW5n IGhlYXAKICAqIFRJRCBjb2x1bW4gc29tZXRpbWVzIHN0b3JlZCBpbiBwaXZvdCB0dXBsZXMgLS0g dGhhdCdzIHJlcHJlc2VudGVkIGJ5CiAgKiB0aGUgcHJlc2VuY2Ugb2YgQlRfUElWT1RfSEVBUF9U SURfQVRUUi4gIFRoZSBJTkRFWF9BTFRfVElEX01BU0sgYml0IGluCi0gKiB0X2luZm8gaXMgYWx3 YXlzIHNldCBvbiBCVFJFRV9WRVJTSU9OIDQgcGl2b3QgdHVwbGVzLgorICogdF9pbmZvIGlzIGFs d2F5cyBzZXQgb24gQlRSRUVfVkVSU0lPTiA0IHBpdm90IHR1cGxlcywgc2luY2UKKyAqIEJUcmVl VHVwbGVJc1Bpdm90KCkgbXVzdCB3b3JrIHJlbGlhYmx5IG9uIGhlYXBrZXlzcGFjZSB2ZXJzaW9u cy4KICAqCiAgKiBJbiB2ZXJzaW9uIDMgaW5kZXhlcywgdGhlIElOREVYX0FMVF9USURfTUFTSyBm bGFnIG1pZ2h0IG5vdCBiZSBzZXQgaW4KICAqIHBpdm90IHR1cGxlcy4gIEluIHRoYXQgY2FzZSwg dGhlIG51bWJlciBvZiBrZXkgY29sdW1ucyBpcyBpbXBsaWNpdGx5CkBAIC0yNzksOTAgKzMwNSwy NTYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRNZXRhUGFnZURhdGEKICAqIFRoZSAxMiBsZWFzdCBzaWdu aWZpY2FudCBvZmZzZXQgYml0cyBmcm9tIHRfdGlkIGFyZSB1c2VkIHRvIHJlcHJlc2VudAogICog dGhlIG51bWJlciBvZiBjb2x1bW5zIGluIElOREVYX0FMVF9USURfTUFTSyB0dXBsZXMsIGxlYXZp bmcgNCBzdGF0dXMKICAqIGJpdHMgKEJUX1JFU0VSVkVEX09GRlNFVF9NQVNLIGJpdHMpLCAzIG9m IHdoaWNoIHRoYXQgYXJlIHJlc2VydmVkIGZvcgotICogZnV0dXJlIHVzZS4gIEJUX05fS0VZU19P RkZTRVRfTUFTSyBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIGFueQotICogbnVtYmVy IG9mIGNvbHVtbnMvYXR0cmlidXRlcyA8PSBJTkRFWF9NQVhfS0VZUy4KKyAqIGZ1dHVyZSB1c2Uu ICBCVF9PRkZTRVRfTUFTSyBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIGFueSBudW1i ZXIKKyAqIG9mIGNvbHVtbnMvYXR0cmlidXRlcyA8PSBJTkRFWF9NQVhfS0VZUy4KKyAqCisgKiBT b21ldGltZXMgbm9uLXBpdm90IHR1cGxlcyBhbHNvIHVzZSBhIHJlcHJlc2VudGF0aW9uIHRoYXQg cmVwdXJwb3NlcworICogdF90aWQgdG8gc3RvcmUgbWV0YWRhdGEgcmF0aGVyIHRoYW4gYSBUSUQu ICBQb3N0Z3JlU1FMIHYxMyBpbnRyb2R1Y2VkIGEKKyAqIG5ldyBub24tcGl2b3QgdHVwbGUgZm9y bWF0IHRvIHN1cHBvcnQgZGVkdXBsaWNhdGlvbjogcG9zdGluZyBsaXN0CisgKiB0dXBsZXMuICBE ZWR1cGxpY2F0aW9uIG1lcmdlcyB0b2dldGhlciBtdWx0aXBsZSBlcXVhbCBub24tcGl2b3QgdHVw bGVzCisgKiBpbnRvIGEgbG9naWNhbGx5IGVxdWl2YWxlbnQsIHNwYWNlIGVmZmljaWVudCByZXBy ZXNlbnRhdGlvbi4gIEEgcG9zdGluZworICogbGlzdCBpcyBhbiBhcnJheSBvZiBJdGVtUG9pbnRl ckRhdGEgZWxlbWVudHMuICBOb24tcGl2b3QgdHVwbGVzIGFyZQorICogbWVyZ2VkIHRvZ2V0aGVy IHRvIGZvcm0gcG9zdGluZyBsaXN0IHR1cGxlcyBsYXppbHksIGF0IHRoZSBwb2ludCB3aGVyZQor ICogd2UnZCBvdGhlcndpc2UgaGF2ZSB0byBzcGxpdCBhIGxlYWYgcGFnZS4KKyAqCisgKiBQb3N0 aW5nIHR1cGxlIGZvcm1hdCAoYWx0ZXJuYXRpdmUgbm9uLXBpdm90IHR1cGxlIHJlcHJlc2VudGF0 aW9uKToKKyAqCisgKiAgdF90aWQgfCB0X2luZm8gfCBrZXkgdmFsdWVzIHwgcG9zdGluZyBsaXN0 IChUSUQgYXJyYXkpCisgKgorICogUG9zdGluZyBsaXN0IHR1cGxlcyBhcmUgcmVjb2duaXplZCBh cyBzdWNoIGJ5IGhhdmluZyB0aGUKKyAqIElOREVYX0FMVF9USURfTUFTSyBzdGF0dXMgYml0IHNl dCBpbiB0X2luZm8gYW5kIHRoZSBCVF9JU19QT1NUSU5HIHN0YXR1cworICogYml0IHNldCBpbiB0 X3RpZC4gIFRoZXNlIGZsYWdzIHJlZGVmaW5lIHRoZSBjb250ZW50IG9mIHRoZSBwb3N0aW5nCisg KiB0dXBsZSdzIHRfdGlkIHRvIHN0b3JlIGFuIG9mZnNldCB0byB0aGUgcG9zdGluZyBsaXN0LCBh cyB3ZWxsIGFzIHRoZQorICogdG90YWwgbnVtYmVyIG9mIHBvc3RpbmcgbGlzdCBhcnJheSBlbGVt ZW50cy4KKyAqCisgKiBUaGUgMTIgbGVhc3Qgc2lnbmlmaWNhbnQgb2Zmc2V0IGJpdHMgZnJvbSB0 X3RpZCBhcmUgdXNlZCB0byByZXByZXNlbnQKKyAqIHRoZSBudW1iZXIgb2YgcG9zdGluZyBpdGVt cyBwcmVzZW50IGluIHRoZSB0dXBsZSwgbGVhdmluZyA0IHN0YXR1cworICogYml0cyAoQlRfUkVT RVJWRURfT0ZGU0VUX01BU0sgYml0cyksIDMgb2Ygd2hpY2ggdGhhdCBhcmUgcmVzZXJ2ZWQgZm9y CisgKiBmdXR1cmUgdXNlLiAgTGlrZSBhbnkgbm9uLXBpdm90IHR1cGxlLCB0aGUgbnVtYmVyIG9m IGNvbHVtbnMgc3RvcmVkIGlzCisgKiBhbHdheXMgaW1wbGljaXRseSB0aGUgdG90YWwgbnVtYmVy IGluIHRoZSBpbmRleCAoaW4gcHJhY3RpY2UgdGhlcmUgY2FuCisgKiBuZXZlciBiZSBub24ta2V5 IGNvbHVtbnMgc3RvcmVkLCBzaW5jZSBkZWR1cGxpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAq IHdpdGggSU5DTFVERSBpbmRleGVzKS4gIEJUX09GRlNFVF9NQVNLIHNob3VsZCBiZSBsYXJnZSBl bm91Z2ggdG8gc3RvcmUKKyAqIGFueSBudW1iZXIgb2YgcG9zdGluZyBsaXN0IFRJRHMgdGhhdCBt aWdodCBiZSBwcmVzZW50IGluIGEgdHVwbGUgKHNpbmNlCisgKiB0dXBsZSBzaXplIGlzIHN1Ympl Y3QgdG8gdGhlIElOREVYX1NJWkVfTUFTSyBsaW1pdCkuCiAgKgogICogTm90ZSB3ZWxsOiBUaGUg bWFjcm9zIHRoYXQgZGVhbCB3aXRoIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBpbiB0dXBsZXMK LSAqIGFzc3VtZSB0aGF0IGEgdHVwbGUgd2l0aCBJTkRFWF9BTFRfVElEX01BU0sgc2V0IG11c3Qg YmUgYSBwaXZvdCB0dXBsZSwKLSAqIGFuZCB0aGF0IGEgdHVwbGUgd2l0aG91dCBJTkRFWF9BTFRf VElEX01BU0sgc2V0IG11c3QgYmUgYSBub24tcGl2b3QKLSAqIHR1cGxlIChvciBtdXN0IGhhdmUg dGhlIHNhbWUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYXMgdGhlIGluZGV4IGhhcwotICogZ2VuZXJh bGx5IGluIHRoZSBjYXNlIG9mICFoZWFwa2V5c3BhY2UgaW5kZXhlcykuICBUaGV5IHdpbGwgbmVl ZCB0byBiZQotICogdXBkYXRlZCBpZiBub24tcGl2b3QgdHVwbGVzIGV2ZXIgZ2V0IHRhdWdodCB0 byB1c2UgSU5ERVhfQUxUX1RJRF9NQVNLCi0gKiBmb3Igc29tZXRoaW5nIGVsc2UuCisgKiBhc3N1 bWUgdGhhdCBhIHR1cGxlIHdpdGggSU5ERVhfQUxUX1RJRF9NQVNLIHNldCBtdXN0IGJlIGEgcGl2 b3QgdHVwbGUgb3IKKyAqIG5vbi1waXZvdCBwb3N0aW5nIHR1cGxlLCBhbmQgdGhhdCBhIHR1cGxl IHdpdGhvdXQgSU5ERVhfQUxUX1RJRF9NQVNLIHNldAorICogbXVzdCBiZSBhIG5vbi1waXZvdCB0 dXBsZSAob3IgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBhdHRyaWJ1dGVzIGFzCisgKiB0 aGUgaW5kZXggaGFzIGdlbmVyYWxseSBpbiB0aGUgY2FzZSBvZiAhaGVhcGtleXNwYWNlIGluZGV4 ZXMpLgogICovCiAjZGVmaW5lIElOREVYX0FMVF9USURfTUFTSwkJCUlOREVYX0FNX1JFU0VSVkVE X0JJVAogCiAvKiBJdGVtIHBvaW50ZXIgb2Zmc2V0IGJpdHMgKi8KICNkZWZpbmUgQlRfUkVTRVJW RURfT0ZGU0VUX01BU0sJCTB4RjAwMAotI2RlZmluZSBCVF9OX0tFWVNfT0ZGU0VUX01BU0sJCTB4 MEZGRgorI2RlZmluZSBCVF9PRkZTRVRfTUFTSwkJCQkweDBGRkYKICNkZWZpbmUgQlRfUElWT1Rf SEVBUF9USURfQVRUUgkJMHgxMDAwCi0KLS8qIEdldC9zZXQgZG93bmxpbmsgYmxvY2sgbnVtYmVy IGluIHBpdm90IHR1cGxlICovCi0jZGVmaW5lIEJUcmVlVHVwbGVHZXREb3duTGluayhpdHVwKSBc Ci0JSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlck5vQ2hlY2soJigoaXR1cCktPnRfdGlkKSkKLSNk ZWZpbmUgQlRyZWVUdXBsZVNldERvd25MaW5rKGl0dXAsIGJsa25vKSBcCi0JSXRlbVBvaW50ZXJT ZXRCbG9ja051bWJlcigmKChpdHVwKS0+dF90aWQpLCAoYmxrbm8pKQorI2RlZmluZSBCVF9JU19Q T1NUSU5HCQkJCTB4MjAwMAogCiAvKgotICogR2V0L3NldCBsZWFmIHBhZ2UgaGlnaGtleSdzIGxp bmsuIER1cmluZyB0aGUgc2Vjb25kIHBoYXNlIG9mIGRlbGV0aW9uLCB0aGUKLSAqIHRhcmdldCBs ZWFmIHBhZ2UncyBoaWdoIGtleSBtYXkgcG9pbnQgdG8gYW4gYW5jZXN0b3IgcGFnZSAoYXQgYWxs IG90aGVyCi0gKiB0aW1lcywgdGhlIGxlYWYgbGV2ZWwgaGlnaCBrZXkncyBsaW5rIGlzIG5vdCB1 c2VkKS4gIFNlZSB0aGUgbmJ0cmVlIFJFQURNRQotICogZm9yIGZ1bGwgZGV0YWlscy4KKyAqIE5v dGU6IEJUcmVlVHVwbGVJc1Bpdm90KCkgY2FuIGhhdmUgZmFsc2UgbmVnYXRpdmVzIChidXQgbm90 IGZhbHNlCisgKiBwb3NpdGl2ZXMpIHdoZW4gdXNlZCB3aXRoICFoZWFwa2V5c3BhY2UgaW5kZXhl cwogICovCi0jZGVmaW5lIEJUcmVlVHVwbGVHZXRUb3BQYXJlbnQoaXR1cCkgXAotCUl0ZW1Qb2lu dGVyR2V0QmxvY2tOdW1iZXJOb0NoZWNrKCYoKGl0dXApLT50X3RpZCkpCi0jZGVmaW5lIEJUcmVl VHVwbGVTZXRUb3BQYXJlbnQoaXR1cCwgYmxrbm8pCVwKLQlkbyB7IFwKLQkJSXRlbVBvaW50ZXJT ZXRCbG9ja051bWJlcigmKChpdHVwKS0+dF90aWQpLCAoYmxrbm8pKTsgXAotCQlCVHJlZVR1cGxl U2V0TkF0dHMoKGl0dXApLCAwKTsgXAotCX0gd2hpbGUoMCkKK3N0YXRpYyBpbmxpbmUgYm9vbAor QlRyZWVUdXBsZUlzUGl2b3QoSW5kZXhUdXBsZSBpdHVwKQoreworCWlmICgoaXR1cC0+dF9pbmZv ICYgSU5ERVhfQUxUX1RJRF9NQVNLKSA9PSAwKQorCQlyZXR1cm4gZmFsc2U7CisJLyogYWJzZW5j ZSBvZiBCVF9JU19QT1NUSU5HIGluIG9mZnNldCBudW1iZXIgaW5kaWNhdGVzIHBpdm90IHR1cGxl ICovCisJaWYgKChJdGVtUG9pbnRlckdldE9mZnNldE51bWJlck5vQ2hlY2soJml0dXAtPnRfdGlk KSAmIEJUX0lTX1BPU1RJTkcpICE9IDApCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVl OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK0JUcmVlVHVwbGVJc1Bvc3RpbmcoSW5kZXhUdXBs ZSBpdHVwKQoreworCWlmICgoaXR1cC0+dF9pbmZvICYgSU5ERVhfQUxUX1RJRF9NQVNLKSA9PSAw KQorCQlyZXR1cm4gZmFsc2U7CisJLyogcHJlc2VuY2Ugb2YgQlRfSVNfUE9TVElORyBpbiBvZmZz ZXQgbnVtYmVyIGluZGljYXRlcyBwb3N0aW5nIHR1cGxlICovCisJaWYgKChJdGVtUG9pbnRlckdl dE9mZnNldE51bWJlck5vQ2hlY2soJml0dXAtPnRfdGlkKSAmIEJUX0lTX1BPU1RJTkcpID09IDAp CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQKK0JUcmVlVHVwbGVTZXRQb3N0aW5nKEluZGV4VHVwbGUgaXR1cCwgaW50IG5odGlkcywgaW50 IHBvc3RpbmdvZmZzZXQpCit7CisJQXNzZXJ0KG5odGlkcyA+IDEgJiYgKG5odGlkcyAmIEJUX09G RlNFVF9NQVNLKSA9PSBuaHRpZHMpOworCUFzc2VydChwb3N0aW5nb2Zmc2V0ID09IE1BWEFMSUdO KHBvc3RpbmdvZmZzZXQpKTsKKwlBc3NlcnQocG9zdGluZ29mZnNldCA8IElOREVYX1NJWkVfTUFT Syk7CisKKwlpdHVwLT50X2luZm8gfD0gSU5ERVhfQUxUX1RJRF9NQVNLOworCUl0ZW1Qb2ludGVy U2V0T2Zmc2V0TnVtYmVyKCZpdHVwLT50X3RpZCwgKG5odGlkcyB8IEJUX0lTX1BPU1RJTkcpKTsK KwlJdGVtUG9pbnRlclNldEJsb2NrTnVtYmVyKCZpdHVwLT50X3RpZCwgcG9zdGluZ29mZnNldCk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2CitCVHJlZVR1cGxlR2V0TlBvc3RpbmcoSW5kZXhU dXBsZSBwb3N0aW5nKQoreworCU9mZnNldE51bWJlciBleGlzdGluZzsKKworCUFzc2VydChCVHJl ZVR1cGxlSXNQb3N0aW5nKHBvc3RpbmcpKTsKKworCWV4aXN0aW5nID0gSXRlbVBvaW50ZXJHZXRP ZmZzZXROdW1iZXJOb0NoZWNrKCZwb3N0aW5nLT50X3RpZCk7CisJcmV0dXJuIChleGlzdGluZyAm IEJUX09GRlNFVF9NQVNLKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzIKK0JUcmVlVHVwbGVH ZXRQb3N0aW5nT2Zmc2V0KEluZGV4VHVwbGUgcG9zdGluZykKK3sKKwlBc3NlcnQoQlRyZWVUdXBs ZUlzUG9zdGluZyhwb3N0aW5nKSk7CisKKwlyZXR1cm4gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl ck5vQ2hlY2soJnBvc3RpbmctPnRfdGlkKTsKK30KKworc3RhdGljIGlubGluZSBJdGVtUG9pbnRl cgorQlRyZWVUdXBsZUdldFBvc3RpbmcoSW5kZXhUdXBsZSBwb3N0aW5nKQoreworCXJldHVybiAo SXRlbVBvaW50ZXIpICgoY2hhciAqKSBwb3N0aW5nICsKKwkJCQkJCSAgQlRyZWVUdXBsZUdldFBv c3RpbmdPZmZzZXQocG9zdGluZykpOworfQorCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitC VHJlZVR1cGxlR2V0UG9zdGluZ04oSW5kZXhUdXBsZSBwb3N0aW5nLCBpbnQgbikKK3sKKwlyZXR1 cm4gQlRyZWVUdXBsZUdldFBvc3RpbmcocG9zdGluZykgKyBuOworfQogCiAvKgotICogR2V0L3Nl dCBudW1iZXIgb2YgYXR0cmlidXRlcyB3aXRoaW4gQi10cmVlIGluZGV4IHR1cGxlLgorICogR2V0 L3NldCBkb3dubGluayBibG9jayBudW1iZXIgaW4gcGl2b3QgdHVwbGUuCisgKgorICogTm90ZTog Q2Fubm90IGFzc2VydCB0aGF0IHR1cGxlIGlzIGEgcGl2b3QgdHVwbGUuICBJZiB3ZSBkaWQgc28g dGhlbgorICogIWhlYXBrZXlzcGFjZSBpbmRleGVzIHdvdWxkIGV4aGliaXQgZmFsc2UgcG9zaXRp dmUgYXNzZXJ0aW9uIGZhaWx1cmVzLgorICovCitzdGF0aWMgaW5saW5lIEJsb2NrTnVtYmVyCitC VHJlZVR1cGxlR2V0RG93bkxpbmsoSW5kZXhUdXBsZSBwaXZvdCkKK3sKKwlyZXR1cm4gSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlck5vQ2hlY2soJnBpdm90LT50X3RpZCk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorQlRyZWVUdXBsZVNldERvd25MaW5rKEluZGV4VHVwbGUgcGl2b3QsIEJsb2Nr TnVtYmVyIGJsa25vKQoreworCUl0ZW1Qb2ludGVyU2V0QmxvY2tOdW1iZXIoJnBpdm90LT50X3Rp ZCwgYmxrbm8pOworfQorCisvKgorICogR2V0IG51bWJlciBvZiBhdHRyaWJ1dGVzIHdpdGhpbiB0 dXBsZS4KICAqCiAgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIGFuIGltcGxpY2l0 IHRpZWJyZWFrZXIgaGVhcCBUSUQKICAqIGF0dHJpYnV0ZSwgaWYgYW55LiAgTm90ZSBhbHNvIHRo YXQgdGhlIG51bWJlciBvZiBrZXkgYXR0cmlidXRlcyBtdXN0IGJlCiAgKiBleHBsaWNpdGx5IHJl cHJlc2VudGVkIGluIGFsbCBoZWFwa2V5c3BhY2UgcGl2b3QgdHVwbGVzLgorICoKKyAqIE5vdGU6 IFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1hY3JvIHJhdGhlciB0aGFuIGFuIGlubGluZSBmdW5jdGlv biB0bworICogYXZvaWQgaW5jbHVkaW5nIHJlbC5oLgogICovCiAjZGVmaW5lIEJUcmVlVHVwbGVH ZXROQXR0cyhpdHVwLCByZWwpCVwKIAkoIFwKLQkJKGl0dXApLT50X2luZm8gJiBJTkRFWF9BTFRf VElEX01BU0sgPyBcCisJCShCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSkgPyBcCiAJCSggXAotCQkJ SXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXJOb0NoZWNrKCYoaXR1cCktPnRfdGlkKSAmIEJUX05f S0VZU19PRkZTRVRfTUFTSyBcCisJCQlJdGVtUG9pbnRlckdldE9mZnNldE51bWJlck5vQ2hlY2so JihpdHVwKS0+dF90aWQpICYgQlRfT0ZGU0VUX01BU0sgXAogCQkpIFwKIAkJOiBcCiAJCUluZGV4 UmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMocmVsKSBcCiAJKQotI2RlZmluZSBCVHJlZVR1 cGxlU2V0TkF0dHMoaXR1cCwgbikgXAotCWRvIHsgXAotCQkoaXR1cCktPnRfaW5mbyB8PSBJTkRF WF9BTFRfVElEX01BU0s7IFwKLQkJSXRlbVBvaW50ZXJTZXRPZmZzZXROdW1iZXIoJihpdHVwKS0+ dF90aWQsIChuKSAmIEJUX05fS0VZU19PRkZTRVRfTUFTSyk7IFwKLQl9IHdoaWxlKDApCiAKIC8q Ci0gKiBHZXQgdGllYnJlYWtlciBoZWFwIFRJRCBhdHRyaWJ1dGUsIGlmIGFueS4gIE1hY3JvIHdv cmtzIHdpdGggYm90aCBwaXZvdAotICogYW5kIG5vbi1waXZvdCB0dXBsZXMsIGRlc3BpdGUgZGlm ZmVyZW5jZXMgaW4gaG93IGhlYXAgVElEIGlzIHJlcHJlc2VudGVkLgorICogU2V0IG51bWJlciBv ZiBhdHRyaWJ1dGVzIGluIHR1cGxlLCBtYWtpbmcgaXQgaW50byBhIHBpdm90IHR1cGxlCiAgKi8K LSNkZWZpbmUgQlRyZWVUdXBsZUdldEhlYXBUSUQoaXR1cCkgXAotCSggXAotCSAgKGl0dXApLT50 X2luZm8gJiBJTkRFWF9BTFRfVElEX01BU0sgJiYgXAotCSAgKEl0ZW1Qb2ludGVyR2V0T2Zmc2V0 TnVtYmVyTm9DaGVjaygmKGl0dXApLT50X3RpZCkgJiBCVF9QSVZPVF9IRUFQX1RJRF9BVFRSKSAh PSAwID8gXAotCSAgKCBcCi0JCShJdGVtUG9pbnRlcikgKCgoY2hhciAqKSAoaXR1cCkgKyBJbmRl eFR1cGxlU2l6ZShpdHVwKSkgLSBcCi0JCQkJCSAgIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKSBc Ci0JICApIFwKLQkgIDogKGl0dXApLT50X2luZm8gJiBJTkRFWF9BTFRfVElEX01BU0sgPyBOVUxM IDogKEl0ZW1Qb2ludGVyKSAmKChpdHVwKS0+dF90aWQpIFwKLQkpCitzdGF0aWMgaW5saW5lIHZv aWQKK0JUcmVlVHVwbGVTZXROQXR0cyhJbmRleFR1cGxlIGl0dXAsIGludCBuYXR0cykKK3sKKwlB c3NlcnQobmF0dHMgPD0gSU5ERVhfTUFYX0tFWVMpOworCisJaXR1cC0+dF9pbmZvIHw9IElOREVY X0FMVF9USURfTUFTSzsKKwkvKiBCVF9JU19QT1NUSU5HIGJpdCBtYXkgYmUgdW5zZXQgLS0gdHVw bGUgYWx3YXlzIGJlY29tZXMgYSBwaXZvdCB0dXBsZSAqLworCUl0ZW1Qb2ludGVyU2V0T2Zmc2V0 TnVtYmVyKCZpdHVwLT50X3RpZCwgbmF0dHMpOworCUFzc2VydChCVHJlZVR1cGxlSXNQaXZvdChp dHVwKSk7Cit9CisKIC8qCi0gKiBTZXQgdGhlIGhlYXAgVElEIGF0dHJpYnV0ZSBmb3IgYSB0dXBs ZSB0aGF0IHVzZXMgdGhlIElOREVYX0FMVF9USURfTUFTSwotICogcmVwcmVzZW50YXRpb24gKGN1 cnJlbnRseSBsaW1pdGVkIHRvIHBpdm90IHR1cGxlcykKKyAqIFNldCB0aGUgYml0IGluZGljYXRp bmcgaGVhcCBUSUQgYXR0cmlidXRlIHByZXNlbnQgaW4gcGl2b3QgdHVwbGUKICAqLwotI2RlZmlu ZSBCVHJlZVR1cGxlU2V0QWx0SGVhcFRJRChpdHVwKSBcCi0JZG8geyBcCi0JCUFzc2VydCgoaXR1 cCktPnRfaW5mbyAmIElOREVYX0FMVF9USURfTUFTSyk7IFwKLQkJSXRlbVBvaW50ZXJTZXRPZmZz ZXROdW1iZXIoJihpdHVwKS0+dF90aWQsIFwKLQkJCQkJCQkJICAgSXRlbVBvaW50ZXJHZXRPZmZz ZXROdW1iZXJOb0NoZWNrKCYoaXR1cCktPnRfdGlkKSB8IEJUX1BJVk9UX0hFQVBfVElEX0FUVFIp OyBcCi0JfSB3aGlsZSgwKQorc3RhdGljIGlubGluZSB2b2lkCitCVHJlZVR1cGxlU2V0QWx0SGVh cFRJRChJbmRleFR1cGxlIHBpdm90KQoreworCU9mZnNldE51bWJlciBleGlzdGluZzsKKworCUFz c2VydChCVHJlZVR1cGxlSXNQaXZvdChwaXZvdCkpOworCisJZXhpc3RpbmcgPSBJdGVtUG9pbnRl ckdldE9mZnNldE51bWJlck5vQ2hlY2soJnBpdm90LT50X3RpZCk7CisJSXRlbVBvaW50ZXJTZXRP ZmZzZXROdW1iZXIoJnBpdm90LT50X3RpZCwKKwkJCQkJCQkgICBleGlzdGluZyB8IEJUX1BJVk9U X0hFQVBfVElEX0FUVFIpOworfQorCisvKgorICogR2V0L3NldCBsZWFmIHBhZ2UncyAidG9wIHBh cmVudCIgbGluayBmcm9tIGl0cyBoaWdoIGtleS4gIFVzZWQgZHVyaW5nIHBhZ2UKKyAqIGRlbGV0 aW9uLgorICoKKyAqIE5vdGU6IENhbm5vdCBhc3NlcnQgdGhhdCB0dXBsZSBpcyBhIHBpdm90IHR1 cGxlLiAgSWYgd2UgZGlkIHNvIHRoZW4KKyAqICFoZWFwa2V5c3BhY2UgaW5kZXhlcyB3b3VsZCBl eGhpYml0IGZhbHNlIHBvc2l0aXZlIGFzc2VydGlvbiBmYWlsdXJlcy4KKyAqLworc3RhdGljIGlu bGluZSBCbG9ja051bWJlcgorQlRyZWVUdXBsZUdldFRvcFBhcmVudChJbmRleFR1cGxlIGxlYWZo aWtleSkKK3sKKwlyZXR1cm4gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlck5vQ2hlY2soJmxlYWZo aWtleS0+dF90aWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0JUcmVlVHVwbGVTZXRUb3BQ YXJlbnQoSW5kZXhUdXBsZSBsZWFmaGlrZXksIEJsb2NrTnVtYmVyIGJsa25vKQoreworCUl0ZW1Q b2ludGVyU2V0QmxvY2tOdW1iZXIoJmxlYWZoaWtleS0+dF90aWQsIGJsa25vKTsKKwlCVHJlZVR1 cGxlU2V0TkF0dHMobGVhZmhpa2V5LCAwKTsKK30KKworLyoKKyAqIEdldCB0aWVicmVha2VyIGhl YXAgVElEIGF0dHJpYnV0ZSwgaWYgYW55LgorICoKKyAqIFRoaXMgcmV0dXJucyB0aGUgZmlyc3Qv bG93ZXN0IGhlYXAgVElEIGluIHRoZSBjYXNlIG9mIGEgcG9zdGluZyBsaXN0IHR1cGxlLgorICov CitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitCVHJlZVR1cGxlR2V0SGVhcFRJRChJbmRleFR1 cGxlIGl0dXApCit7CisJaWYgKEJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKQorCXsKKwkJLyogUGl2 b3QgdHVwbGUgaGVhcCBUSUQgcmVwcmVzZW50YXRpb24/ICovCisJCWlmICgoSXRlbVBvaW50ZXJH ZXRPZmZzZXROdW1iZXJOb0NoZWNrKCZpdHVwLT50X3RpZCkgJgorCQkJIEJUX1BJVk9UX0hFQVBf VElEX0FUVFIpICE9IDApCisJCQlyZXR1cm4gKEl0ZW1Qb2ludGVyKSAoKGNoYXIgKikgaXR1cCAr IEluZGV4VHVwbGVTaXplKGl0dXApIC0KKwkJCQkJCQkJICBzaXplb2YoSXRlbVBvaW50ZXJEYXRh KSk7CisKKwkJLyogSGVhcCBUSUQgYXR0cmlidXRlIHdhcyB0cnVuY2F0ZWQgKi8KKwkJcmV0dXJu IE5VTEw7CisJfQorCWVsc2UgaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCisJCXJldHVy biBCVHJlZVR1cGxlR2V0UG9zdGluZyhpdHVwKTsKKworCXJldHVybiAmaXR1cC0+dF90aWQ7Cit9 CisKKy8qCisgKiBHZXQgbWF4aW11bSBoZWFwIFRJRCBhdHRyaWJ1dGUsIHdoaWNoIGNvdWxkIGJl IHRoZSBvbmx5IFRJRCBpbiB0aGUgY2FzZSBvZgorICogYSBub24tcGl2b3QgdHVwbGUgdGhhdCBk b2VzIG5vdCBoYXZlIGEgcG9zdGluZyBsaXN0IHR1cGxlLgorICoKKyAqIFdvcmtzIHdpdGggbm9u LXBpdm90IHR1cGxlcyBvbmx5LgorICovCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitCVHJl ZVR1cGxlR2V0TWF4SGVhcFRJRChJbmRleFR1cGxlIGl0dXApCit7CisJQXNzZXJ0KCFCVHJlZVR1 cGxlSXNQaXZvdChpdHVwKSk7CisKKwlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKKwl7 CisJCXVpbnQxNgkJbnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7CisKKwkJ cmV0dXJuIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBucG9zdGluZyAtIDEpOworCX0KKwor CXJldHVybiAmaXR1cC0+dF90aWQ7Cit9CiAKIC8qCiAgKglPcGVyYXRvciBzdHJhdGVneSBudW1i ZXJzIGZvciBCLXRyZWUgaGF2ZSBiZWVuIG1vdmVkIHRvIGFjY2Vzcy9zdHJhdG51bS5oLApAQCAt NDM0LDYgKzYyNiw5IEBAIHR5cGVkZWYgQlRTdGFja0RhdGEgKkJUU3RhY2s7CiAgKiBpbmRleGVz IHdob3NlIHZlcnNpb24gaXMgPj0gdmVyc2lvbiA0LiAgSXQncyBjb252ZW5pZW50IHRvIGtlZXAg dGhpcyBjbG9zZQogICogYnksIHJhdGhlciB0aGFuIGFjY2Vzc2luZyB0aGUgbWV0YXBhZ2UgcmVw ZWF0ZWRseS4KICAqCisgKiBzYWZlZGVkdXAgaXMgc2V0IHRvIGluZGljYXRlIHRoYXQgaW5kZXgg bWF5IHVzZSBkZWR1cGxpY2F0aW9uIHNhZmVseS4KKyAqIFRoaXMgaXMgYWxzbyBhIHByb3BlcnR5 IG9mIHRoZSBpbmRleCByZWxhdGlvbiByYXRoZXIgdGhhbiBhbiBpbmRleHNjYW4uCisgKgogICog YW55bnVsbGtleXMgaW5kaWNhdGVzIGlmIGFueSBvZiB0aGUga2V5cyBoYWQgTlVMTCB2YWx1ZSB3 aGVuIHNjYW5rZXkgd2FzCiAgKiBidWlsdCBmcm9tIGluZGV4IHR1cGxlIChub3RlIHRoYXQgYWxy ZWFkeS10cnVuY2F0ZWQgdHVwbGUga2V5IGF0dHJpYnV0ZXMKICAqIHNldCBOVUxMIGFzIGEgcGxh Y2Vob2xkZXIga2V5IHZhbHVlLCB3aGljaCBhbHNvIGFmZmVjdHMgdmFsdWUgb2YKQEAgLTQ2OSw2 ICs2NjQsNyBAQCB0eXBlZGVmIEJUU3RhY2tEYXRhICpCVFN0YWNrOwogdHlwZWRlZiBzdHJ1Y3Qg QlRTY2FuSW5zZXJ0RGF0YQogewogCWJvb2wJCWhlYXBrZXlzcGFjZTsKKwlib29sCQlzYWZlZGVk dXA7CiAJYm9vbAkJYW55bnVsbGtleXM7CiAJYm9vbAkJbmV4dGtleTsKIAlib29sCQlwaXZvdHNl YXJjaDsKQEAgLTUwNywxMCArNzAzLDU5IEBAIHR5cGVkZWYgc3RydWN0IEJUSW5zZXJ0U3RhdGVE YXRhCiAJYm9vbAkJYm91bmRzX3ZhbGlkOwogCU9mZnNldE51bWJlciBsb3c7CiAJT2Zmc2V0TnVt YmVyIHN0cmljdGhpZ2g7CisKKwkvKgorCSAqIGlmIF9idF9iaW5zcmNoX2luc2VydCBmb3VuZCB0 aGUgbG9jYXRpb24gaW5zaWRlIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCwKKwkgKiBzYXZlIHRoZSBw b3NpdGlvbiBpbnNpZGUgdGhlIGxpc3QuICAtMSBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0ZXMgb3Zl cmxhcAorCSAqIHdpdGggYW4gZXhpc3RpbmcgcG9zdGluZyBsaXN0IHR1cGxlIHRoYXQgaGFzIGl0 cyBMUF9ERUFEIGJpdCBzZXQuCisJICovCisJaW50CQkJcG9zdGluZ29mZjsKIH0gQlRJbnNlcnRT dGF0ZURhdGE7CiAKIHR5cGVkZWYgQlRJbnNlcnRTdGF0ZURhdGEgKkJUSW5zZXJ0U3RhdGU7CiAK Ky8qCisgKiBCVERlZHVwU3RhdGVEYXRhIGlzIGEgd29ya2luZyBhcmVhIHVzZWQgZHVyaW5nIGRl ZHVwbGljYXRpb24uCisgKgorICogVGhlIHN0YXR1cyBpbmZvIGZpZWxkcyB0cmFjayB0aGUgc3Rh dGUgb2YgYSB3aG9sZS1wYWdlIGRlZHVwbGljYXRpb24gcGFzcy4KKyAqIFN0YXRlIGFib3V0IHRo ZSBjdXJyZW50IHBlbmRpbmcgcG9zdGluZyBsaXN0IGlzIGFsc28gdHJhY2tlZC4KKyAqCisgKiBB IHBlbmRpbmcgcG9zdGluZyBsaXN0IGlzIGNvbXByaXNlZCBvZiBhIGNvbnRpZ3VvdXMgZ3JvdXAg b2YgZXF1YWwgaXRlbXMKKyAqIGZyb20gdGhlIHBhZ2UsIHN0YXJ0aW5nIGZyb20gcGFnZSBvZmZz ZXQgbnVtYmVyICdiYXNlb2ZmJy4gIFRoaXMgaXMgdGhlCisgKiBvZmZzZXQgbnVtYmVyIG9mIHRo ZSAiYmFzZSIgdHVwbGUgZm9yIG5ldyBwb3N0aW5nIGxpc3QuICAnbml0ZW1zJyBpcyB0aGUKKyAq IGN1cnJlbnQgdG90YWwgbnVtYmVyIG9mIGV4aXN0aW5nIGl0ZW1zIGZyb20gdGhlIHBhZ2UgdGhh dCB3aWxsIGJlIG1lcmdlZCB0bworICogbWFrZSBhIG5ldyBwb3N0aW5nIGxpc3QgdHVwbGUsIGlu Y2x1ZGluZyB0aGUgYmFzZSB0dXBsZSBpdGVtLiAgKEV4aXN0aW5nCisgKiBpdGVtcyBtYXkgdGhl bXNlbHZlcyBiZSBwb3N0aW5nIGxpc3QgdHVwbGVzLCBvciByZWd1bGFyIG5vbi1waXZvdCB0dXBs ZXMuKQorICoKKyAqIE5vdGUgdGhhdCB3aGVuIGRlZHVwbGljYXRpb24gbWVyZ2VzIHRvZ2V0aGVy IGV4aXN0aW5nIHR1cGxlcywgdGhlIHBhZ2UgaXMKKyAqIG1vZGlmaWVkIGVhZ2VybHkuICBUaGlz IG1ha2VzIHRyYWNraW5nIHRoZSBkZXRhaWxzIG9mIG1vcmUgdGhhbiBhIHNpbmdsZQorICogcGVu ZGluZyBwb3N0aW5nIGxpc3QgYXQgYSB0aW1lIHVubmVjZXNzYXJ5LiAgVGhlIHRvdGFsIHNpemUg b2YgdGhlIGV4aXN0aW5nCisgKiB0dXBsZXMgdG8gYmUgZnJlZWQgd2hlbiBwZW5kaW5nIHBvc3Rp bmcgbGlzdCBpcyBwcm9jZXNzZWQgZ2V0cyB0cmFja2VkIGJ5CisgKiAncGh5c3R1cHNpemUnLiAg VGhpcyBpbmZvcm1hdGlvbiBhbGxvd3MgZGVkdXBsaWNhdGlvbiB0byBjYWxjdWxhdGUgdGhlCisg KiBzcGFjZSBzYXZpbmcgZm9yIGVhY2ggbmV3IHBvc3RpbmcgbGlzdCB0dXBsZSwgYW5kIGZvciB0 aGUgZW50aXJlIHBhc3Mgb3ZlcgorICogdGhlIHBhZ2UgYXMgYSB3aG9sZS4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgQlREZWR1cFN0YXRlRGF0YQoreworCS8qIERlZHVwbGljYXRpb24gc3RhdHVzIGlu Zm8gZm9yIGVudGlyZSBwYXNzIG92ZXIgcGFnZSAqLworCVNpemUJCW1heHBvc3RpbmdzaXplOyAv KiBMaW1pdCBvbiBzaXplIG9mIGZpbmFsIHR1cGxlICovCisJYm9vbAkJY2hlY2tpbmd1bmlxdWU7 IC8qIFVzZSB1bmlxdWUgaW5kZXggc3RyYXRlZ3k/ICovCisJT2Zmc2V0TnVtYmVyIHNraXBwZWRi YXNlOwkvKiBGaXJzdCBvZmZzZXQgc2tpcHBlZCBieSBjaGVja2luZ3VuaXF1ZSAqLworCisJLyog TWV0YWRhdGEgYWJvdXQgYmFzZSB0dXBsZSBvZiBjdXJyZW50IHBlbmRpbmcgcG9zdGluZyBsaXN0 ICovCisJSW5kZXhUdXBsZQliYXNlOwkJCS8qIFVzZSB0byBmb3JtIG5ldyBwb3N0aW5nIGxpc3Qg Ki8KKwlPZmZzZXROdW1iZXIgYmFzZW9mZjsJCS8qIHBhZ2Ugb2Zmc2V0IG9mIGJhc2UgKi8KKwlT aXplCQliYXNldHVwc2l6ZTsJLyogYmFzZSBzaXplIHdpdGhvdXQgb3JpZ2luYWwgcG9zdGluZyBs aXN0ICovCisKKwkvKiBPdGhlciBtZXRhZGF0YSBhYm91dCBwZW5kaW5nIHBvc3RpbmcgbGlzdCAq LworCUl0ZW1Qb2ludGVyIGh0aWRzOwkJCS8qIEhlYXAgVElEcyBpbiBwZW5kaW5nIHBvc3Rpbmcg bGlzdCAqLworCWludAkJCW5odGlkczsJCQkvKiBOdW1iZXIgb2YgaGVhcCBUSURzIGluIG5odGlk cyBhcnJheSAqLworCWludAkJCW5pdGVtczsJCQkvKiBOdW1iZXIgb2YgZXhpc3RpbmcgdHVwbGVz L2xpbmUgcG9pbnRlcnMgKi8KKwlTaXplCQlwaHlzdHVwc2l6ZTsJLyogSW5jbHVkZXMgbGluZSBw b2ludGVyIG92ZXJoZWFkICovCit9IEJURGVkdXBTdGF0ZURhdGE7CisKK3R5cGVkZWYgQlREZWR1 cFN0YXRlRGF0YSAqQlREZWR1cFN0YXRlOworCiAvKgogICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0 aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KICAqIFRoaXMg Y29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tl eXMoKSBmb3IKQEAgLTUzNCw3ICs3NzksOSBAQCB0eXBlZGVmIEJUSW5zZXJ0U3RhdGVEYXRhICpC VEluc2VydFN0YXRlOwogICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ug c2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKICAqIG1hdGNoZWQgaXRlbSwgb3Ro ZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhUdXBsZXMgZ28K ICAqIGludG8gYSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2FuUG9zSXRlbSBz dG9yZXMgaXRzIHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4KKyAqIG9mZnNl dCB3aXRoaW4gdGhhdCBhcnJheS4gIFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIg dHVwbGUgb25jZSwKKyAqIGFsbG93aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3Ig ZWFjaCBUSUQgaW4gdGhlIHBvc3RpbmcgbGlzdAorICogdHVwbGUuCiAgKi8KIAogdHlwZWRlZiBz dHJ1Y3QgQlRTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2gg Ki8KQEAgLTU3OCw3ICs4MjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NEYXRhCiAJaW50 CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KIAlpbnQJCQlp dGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KIAotCUJUU2NhblBvc0l0 ZW0gaXRlbXNbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsgLyogTVVTVCBCRSBMQVNUICovCisJQlRT Y2FuUG9zSXRlbSBpdGVtc1tNYXhUSURzUGVyQlRyZWVQYWdlXTsJLyogTVVTVCBCRSBMQVNUICov CiB9IEJUU2NhblBvc0RhdGE7CiAKIHR5cGVkZWYgQlRTY2FuUG9zRGF0YSAqQlRTY2FuUG9zOwpA QCAtNjg2LDYgKzkzMyw3IEBAIHR5cGVkZWYgc3RydWN0IEJUT3B0aW9ucwogCWludAkJCWZpbGxm YWN0b3I7CQkvKiBwYWdlIGZpbGwgZmFjdG9yIGluIHBlcmNlbnQgKDAuLjEwMCkgKi8KIAkvKiBm cmFjdGlvbiBvZiBuZXdseSBpbnNlcnRlZCB0dXBsZXMgcHJpb3IgdG8gdHJpZ2dlciBpbmRleCBj bGVhbnVwICovCiAJZmxvYXQ4CQl2YWN1dW1fY2xlYW51cF9pbmRleF9zY2FsZV9mYWN0b3I7CisJ Ym9vbAkJZGVkdXBsaWNhdGVfaXRlbXM7CS8qIFVzZSBkZWR1cGxpY2F0aW9uIHdoZXJlIHNhZmU/ ICovCiB9IEJUT3B0aW9uczsKIAogI2RlZmluZSBCVEdldEZpbGxGYWN0b3IocmVsYXRpb24pIFwK QEAgLTY5NCw4ICs5NDIsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRPcHRpb25zCiAJIChyZWxhdGlv biktPnJkX29wdGlvbnMgPyBcCiAJICgoQlRPcHRpb25zICopIChyZWxhdGlvbiktPnJkX29wdGlv bnMpLT5maWxsZmFjdG9yIDogXAogCSBCVFJFRV9ERUZBVUxUX0ZJTExGQUNUT1IpCisjZGVmaW5l IEJUR2V0VXNlRGVkdXAocmVsYXRpb24pIFwKKwkoQXNzZXJ0TWFjcm8ocmVsYXRpb24tPnJkX3Jl bC0+cmVsa2luZCA9PSBSRUxLSU5EX0lOREVYICYmIFwKKwkJCQkgcmVsYXRpb24tPnJkX3JlbC0+ cmVsYW0gPT0gQlRSRUVfQU1fT0lEKSwgXAorCSgocmVsYXRpb24pLT5yZF9vcHRpb25zID8gXAor CSAoKEJUT3B0aW9ucyAqKSAocmVsYXRpb24pLT5yZF9vcHRpb25zKS0+ZGVkdXBsaWNhdGVfaXRl bXMgOiBcCisJIEJUR2V0VXNlRGVkdXBHVUMocmVsYXRpb24pKSkKICNkZWZpbmUgQlRHZXRUYXJn ZXRQYWdlRnJlZVNwYWNlKHJlbGF0aW9uKSBcCiAJKEJMQ0tTWiAqICgxMDAgLSBCVEdldEZpbGxG YWN0b3IocmVsYXRpb24pKSAvIDEwMCkKKyNkZWZpbmUgQlRHZXRVc2VEZWR1cEdVQyhyZWxhdGlv bikgXAorCShyZWxhdGlvbi0+cmRfaW5kZXgtPmluZGlzdW5pcXVlIHx8IGRlZHVwbGljYXRlX2J0 cmVlX2l0ZW1zKQogCiAvKgogICogQ29uc3RhbnQgZGVmaW5pdGlvbiBmb3IgcHJvZ3Jlc3MgcmVw b3J0aW5nLiAgUGhhc2UgbnVtYmVycyBtdXN0IG1hdGNoCkBAIC03NDIsNiArOTk4LDIyIEBAIGV4 dGVybiB2b2lkIF9idF9wYXJhbGxlbF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tO dW1iZXIgc2Nhbl9wYWdlKTsKIGV4dGVybiB2b2lkIF9idF9wYXJhbGxlbF9kb25lKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBfYnRfcGFyYWxsZWxfYWR2YW5jZV9hcnJheV9rZXlz KEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKKy8qCisgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMg aW4gbmJ0ZGVkdXAuYworICovCitleHRlcm4gdm9pZCBfYnRfZGVkdXBfb25lX3BhZ2UoUmVsYXRp b24gcmVsLCBCdWZmZXIgYnVmLCBSZWxhdGlvbiBoZWFwUmVsLAorCQkJCQkJCSAgIEluZGV4VHVw bGUgbmV3aXRlbSwgU2l6ZSBuZXdpdGVtc3osCisJCQkJCQkJICAgYm9vbCBjaGVja2luZ3VuaXF1 ZSk7CitleHRlcm4gdm9pZCBfYnRfZGVkdXBfc3RhcnRfcGVuZGluZyhCVERlZHVwU3RhdGUgc3Rh dGUsIEluZGV4VHVwbGUgYmFzZSwKKwkJCQkJCQkJCU9mZnNldE51bWJlciBiYXNlX29mZik7Citl eHRlcm4gYm9vbCBfYnRfZGVkdXBfc2F2ZV9odGlkKEJURGVkdXBTdGF0ZSBzdGF0ZSwgSW5kZXhU dXBsZSBpdHVwKTsKK2V4dGVybiBTaXplIF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhCdWZmZXIg YnVmLCBCVERlZHVwU3RhdGUgc3RhdGUsCisJCQkJCQkJCQkgYm9vbCBsb2dnZWQpOworZXh0ZXJu IEluZGV4VHVwbGUgX2J0X2Zvcm1fcG9zdGluZyhJbmRleFR1cGxlIGJhc2UsIEl0ZW1Qb2ludGVy IGh0aWRzLAorCQkJCQkJCQkgICBpbnQgbmh0aWRzKTsKK2V4dGVybiBJbmRleFR1cGxlIF9idF9z d2FwX3Bvc3RpbmcoSW5kZXhUdXBsZSBuZXdpdGVtLCBJbmRleFR1cGxlIG9wb3N0aW5nLAorCQkJ CQkJCQkgICBpbnQgcG9zdGluZ29mZik7CisKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlv bnMgaW4gbmJ0aW5zZXJ0LmMKICAqLwpAQCAtNzYwLDE0ICsxMDMyLDE2IEBAIGV4dGVybiBPZmZz ZXROdW1iZXIgX2J0X2ZpbmRzcGxpdGxvYyhSZWxhdGlvbiByZWwsIFBhZ2UgcGFnZSwKIC8qCiAg KiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0cGFnZS5jCiAgKi8KLWV4dGVybiB2b2lk IF9idF9pbml0bWV0YXBhZ2UoUGFnZSBwYWdlLCBCbG9ja051bWJlciByb290YmtudW0sIHVpbnQz MiBsZXZlbCk7CitleHRlcm4gdm9pZCBfYnRfaW5pdG1ldGFwYWdlKFBhZ2UgcGFnZSwgQmxvY2tO dW1iZXIgcm9vdGJrbnVtLCB1aW50MzIgbGV2ZWwsCisJCQkJCQkJIGJvb2wgc2FmZWRlZHVwKTsK IGV4dGVybiB2b2lkIF9idF91cGRhdGVfbWV0YV9jbGVhbnVwX2luZm8oUmVsYXRpb24gcmVsLAog CQkJCQkJCQkJCSBUcmFuc2FjdGlvbklkIG9sZGVzdEJ0cG9YYWN0LCBmbG9hdDggbnVtSGVhcFR1 cGxlcyk7CiBleHRlcm4gdm9pZCBfYnRfdXBncmFkZW1ldGFwYWdlKFBhZ2UgcGFnZSk7CiBleHRl cm4gQnVmZmVyIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgaW50IGFjY2Vzcyk7CiBleHRlcm4g QnVmZmVyIF9idF9nZXR0cnVlcm9vdChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIGludAlfYnRfZ2V0 cm9vdGhlaWdodChSZWxhdGlvbiByZWwpOwotZXh0ZXJuIGJvb2wgX2J0X2hlYXBrZXlzcGFjZShS ZWxhdGlvbiByZWwpOworZXh0ZXJuIHZvaWQgX2J0X21ldGF2ZXJzaW9uKFJlbGF0aW9uIHJlbCwg Ym9vbCAqaGVhcGtleXNwYWNlLAorCQkJCQkJCWJvb2wgKnNhZmVkZWR1cCk7CiBleHRlcm4gdm9p ZCBfYnRfY2hlY2twYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Zik7CiBleHRlcm4gQnVmZmVy IF9idF9nZXRidWYoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgaW50IGFjY2Vzcyk7 CiBleHRlcm4gQnVmZmVyIF9idF9yZWxhbmRnZXRidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgb2J1 ZiwKQEAgLTc3Niw3ICsxMDUwLDkgQEAgZXh0ZXJuIHZvaWQgX2J0X3JlbGJ1ZihSZWxhdGlvbiBy ZWwsIEJ1ZmZlciBidWYpOwogZXh0ZXJuIHZvaWQgX2J0X3BhZ2Vpbml0KFBhZ2UgcGFnZSwgU2l6 ZSBzaXplKTsKIGV4dGVybiBib29sIF9idF9wYWdlX3JlY3ljbGFibGUoUGFnZSBwYWdlKTsKIGV4 dGVybiB2b2lkIF9idF9kZWxpdGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAot CQkJCQkJCQlPZmZzZXROdW1iZXIgKmRlbGV0YWJsZSwgaW50IG5kZWxldGFibGUpOworCQkJCQkJ CQlPZmZzZXROdW1iZXIgKmRlbGV0YWJsZSwgaW50IG5kZWxldGFibGUsCisJCQkJCQkJCU9mZnNl dE51bWJlciAqdXBkYXRhYmxlLCBJbmRleFR1cGxlICp1cGRhdGVkLAorCQkJCQkJCQlpbnQgbnVw ZGF0YWJsZSk7CiBleHRlcm4gdm9pZCBfYnRfZGVsaXRlbXNfZGVsZXRlKFJlbGF0aW9uIHJlbCwg QnVmZmVyIGJ1ZiwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyICpkZWxldGFibGUsIGludCBuZGVsZXRh YmxlLAogCQkJCQkJCQlSZWxhdGlvbiBoZWFwUmVsKTsKQEAgLTgyOSw2ICsxMTA1LDcgQEAgZXh0 ZXJuIGJvb2wgX2J0X2NoZWNrX25hdHRzKFJlbGF0aW9uIHJlbCwgYm9vbCBoZWFwa2V5c3BhY2Us IFBhZ2UgcGFnZSwKIAkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKIGV4dGVybiB2b2lkIF9i dF9jaGVja190aGlyZF9wYWdlKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcCwKIAkJCQkJCQkJ IGJvb2wgbmVlZGhlYXB0aWRzcGFjZSwgUGFnZSBwYWdlLCBJbmRleFR1cGxlIG5ld3R1cCk7Citl eHRlcm4gYm9vbCBfYnRfb3BjbGFzc2VzX3N1cHBvcnRfZGVkdXAoUmVsYXRpb24gaW5kZXgpOwog CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHZhbGlkYXRlLmMKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnR4bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv bmJ0eGxvZy5oCmluZGV4IDc3NmE5YmQ3MjMuLmJhZDhkYTRiMzAgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnR4bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cu aApAQCAtMjgsNyArMjgsOCBAQAogI2RlZmluZSBYTE9HX0JUUkVFX0lOU0VSVF9NRVRBCTB4MjAJ Lyogc2FtZSwgcGx1cyB1cGRhdGUgbWV0YXBhZ2UgKi8KICNkZWZpbmUgWExPR19CVFJFRV9TUExJ VF9MCQkweDMwCS8qIGFkZCBpbmRleCB0dXBsZSB3aXRoIHNwbGl0ICovCiAjZGVmaW5lIFhMT0df QlRSRUVfU1BMSVRfUgkJMHg0MAkvKiBhcyBhYm92ZSwgbmV3IGl0ZW0gb24gcmlnaHQgKi8KLS8q IDB4NTAgYW5kIDB4NjAgYXJlIHVudXNlZCAqLworI2RlZmluZSBYTE9HX0JUUkVFX0RFRFVQX1BB R0UJMHg1MAkvKiBkZWR1cGxpY2F0ZSB0dXBsZXMgb24gbGVhZiBwYWdlICovCisjZGVmaW5lIFhM T0dfQlRSRUVfSU5TRVJUX1BPU1QJMHg2MAkvKiBhZGQgaW5kZXggdHVwbGUgd2l0aCBwb3N0aW5n IHNwbGl0ICovCiAjZGVmaW5lIFhMT0dfQlRSRUVfREVMRVRFCQkweDcwCS8qIGRlbGV0ZSBsZWFm IGluZGV4IHR1cGxlcyBmb3IgYSBwYWdlICovCiAjZGVmaW5lIFhMT0dfQlRSRUVfVU5MSU5LX1BB R0UJMHg4MAkvKiBkZWxldGUgYSBoYWxmLWRlYWQgcGFnZSAqLwogI2RlZmluZSBYTE9HX0JUUkVF X1VOTElOS19QQUdFX01FVEEgMHg5MAkvKiBzYW1lLCBhbmQgdXBkYXRlIG1ldGFwYWdlICovCkBA IC01MywyMSArNTQsMzQgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfYnRyZWVfbWV0YWRhdGEKIAl1aW50 MzIJCWZhc3RsZXZlbDsKIAlUcmFuc2FjdGlvbklkIG9sZGVzdF9idHBvX3hhY3Q7CiAJZmxvYXQ4 CQlsYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVzOworCWJvb2wJCXNhZmVkZWR1cDsKIH0geGxf YnRyZWVfbWV0YWRhdGE7CiAKIC8qCiAgKiBUaGlzIGlzIHdoYXQgd2UgbmVlZCB0byBrbm93IGFi b3V0IHNpbXBsZSAod2l0aG91dCBzcGxpdCkgaW5zZXJ0LgogICoKLSAqIFRoaXMgZGF0YSByZWNv cmQgaXMgdXNlZCBmb3IgSU5TRVJUX0xFQUYsIElOU0VSVF9VUFBFUiwgSU5TRVJUX01FVEEuCi0g KiBOb3RlIHRoYXQgSU5TRVJUX01FVEEgaW1wbGllcyBpdCdzIG5vdCBhIGxlYWYgcGFnZS4KKyAq IFRoaXMgZGF0YSByZWNvcmQgaXMgdXNlZCBmb3IgSU5TRVJUX0xFQUYsIElOU0VSVF9VUFBFUiwg SU5TRVJUX01FVEEsIGFuZAorICogSU5TRVJUX1BPU1QuICBOb3RlIHRoYXQgSU5TRVJUX01FVEEg YW5kIElOU0VSVF9VUFBFUiBpbXBsaWVzIGl0J3Mgbm90IGEKKyAqIGxlYWYgcGFnZSwgd2hpbGUg SU5TRVJUX1BPU1QgYW5kIElOU0VSVF9MRUFGIGltcGx5IHRoYXQgaXQgbXVzdCBiZSBhIGxlYWYK KyAqIHBhZ2UuCiAgKgotICogQmFja3VwIEJsayAwOiBvcmlnaW5hbCBwYWdlIChkYXRhIGNvbnRh aW5zIHRoZSBpbnNlcnRlZCB0dXBsZSkKKyAqIEJhY2t1cCBCbGsgMDogb3JpZ2luYWwgcGFnZQog ICogQmFja3VwIEJsayAxOiBjaGlsZCdzIGxlZnQgc2libGluZywgaWYgSU5TRVJUX1VQUEVSIG9y IElOU0VSVF9NRVRBCiAgKiBCYWNrdXAgQmxrIDI6IHhsX2J0cmVlX21ldGFkYXRhLCBpZiBJTlNF UlRfTUVUQQorICoKKyAqIE5vdGU6IFRoZSBuZXcgdHVwbGUgaXMgYWN0dWFsbHkgdGhlICJvcmln aW5hbCIgbmV3IGl0ZW0gaW4gdGhlIHBvc3RpbmcKKyAqIGxpc3Qgc3BsaXQgaW5zZXJ0IGNhc2Ug KGkuZS4gdGhlIElOU0VSVF9QT1NUIGNhc2UpLiAgQSBzcGxpdCBvZmZzZXQgZm9yCisgKiB0aGUg cG9zdGluZyBsaXN0IGlzIGxvZ2dlZCBiZWZvcmUgdGhlIG9yaWdpbmFsIG5ldyBpdGVtLiAgUmVj b3ZlcnkgbmVlZHMKKyAqIGJvdGgsIHNpbmNlIGl0IG11c3QgZG8gYW4gaW4tcGxhY2UgdXBkYXRl IG9mIHRoZSBleGlzdGluZyBwb3N0aW5nIGxpc3QKKyAqIHRoYXQgd2FzIHNwbGl0IGFzIGFuIGV4 dHJhIHN0ZXAuICBBbHNvLCByZWNvdmVyeSBnZW5lcmF0ZXMgYSAiZmluYWwiCisgKiBuZXdpdGVt LiAgU2VlIF9idF9zd2FwX3Bvc3RpbmcoKSBmb3IgZGV0YWlscyBvbiBwb3N0aW5nIGxpc3Qgc3Bs aXRzLgogICovCiB0eXBlZGVmIHN0cnVjdCB4bF9idHJlZV9pbnNlcnQKIHsKIAlPZmZzZXROdW1i ZXIgb2ZmbnVtOworCisJLyogUE9TVElORyBTUExJVCBPRkZTRVQgRk9MTE9XUyAoSU5TRVJUX1BP U1QgY2FzZSkgKi8KKwkvKiBORVcgVFVQTEUgQUxXQVlTIEZPTExPV1MgQVQgVEhFIEVORCAqLwog fSB4bF9idHJlZV9pbnNlcnQ7CiAKICNkZWZpbmUgU2l6ZU9mQnRyZWVJbnNlcnQJKG9mZnNldG9m KHhsX2J0cmVlX2luc2VydCwgb2ZmbnVtKSArIHNpemVvZihPZmZzZXROdW1iZXIpKQpAQCAtOTIs OCArMTA2LDM3IEBAIHR5cGVkZWYgc3RydWN0IHhsX2J0cmVlX2luc2VydAogICogQmFja3VwIEJs ayAwOiBvcmlnaW5hbCBwYWdlIC8gbmV3IGxlZnQgcGFnZQogICoKICAqIFRoZSBsZWZ0IHBhZ2Un cyBkYXRhIHBvcnRpb24gY29udGFpbnMgdGhlIG5ldyBpdGVtLCBpZiBpdCdzIHRoZSBfTCB2YXJp YW50LgotICogQW4gSW5kZXhUdXBsZSByZXByZXNlbnRpbmcgdGhlIGhpZ2gga2V5IG9mIHRoZSBs ZWZ0IHBhZ2UgbXVzdCBmb2xsb3cgd2l0aAotICogZWl0aGVyIHZhcmlhbnQuCisgKiBfUiB2YXJp YW50IHNwbGl0IHJlY29yZHMgZ2VuZXJhbGx5IGRvIG5vdCBoYXZlIGEgbmV3aXRlbSAoX1IgdmFy aWFudCBsZWFmCisgKiBwYWdlIHNwbGl0IHJlY29yZHMgdGhhdCBtdXN0IGRlYWwgd2l0aCBhIHBv c3RpbmcgbGlzdCBzcGxpdCB3aWxsIGluY2x1ZGUgYW4KKyAqIGV4cGxpY2l0IG5ld2l0ZW0sIHRo b3VnaCBpdCBpcyBuZXZlciB1c2VkIG9uIHRoZSByaWdodCBwYWdlIC0tIGl0IGlzCisgKiBhY3R1 YWxseSBhbiBvcmlnbmV3aXRlbSBuZWVkZWQgdG8gdXBkYXRlIGV4aXN0aW5nIHBvc3RpbmcgbGlz dCkuICBUaGUgbmV3CisgKiBoaWdoIGtleSBvZiB0aGUgbGVmdC9vcmlnaW5hbCBwYWdlIGFwcGVh cnMgbGFzdCBvZiBhbGwgKGFuZCBtdXN0IGFsd2F5cyBiZQorICogcHJlc2VudCkuCisgKgorICog UGFnZSBzcGxpdCByZWNvcmRzIHRoYXQgbmVlZCB0aGUgUkVETyByb3V0aW5lIHRvIGRlYWwgd2l0 aCBhIHBvc3RpbmcgbGlzdAorICogc3BsaXQgZGlyZWN0bHkgd2lsbCBoYXZlIGFuIGV4cGxpY2l0 IG5ld2l0ZW0sIHdoaWNoIGlzIGFjdHVhbGx5IGFuCisgKiBvcmlnbmV3aXRlbSAodGhlIG5ld2l0 ZW0gYXMgaXQgd2FzIGJlZm9yZSB0aGUgcG9zdGluZyBsaXN0IHNwbGl0LCBub3QKKyAqIGFmdGVy KS4gIEEgcG9zdGluZyBsaXN0IHNwbGl0IGFsd2F5cyBoYXMgYSBuZXdpdGVtIHRoYXQgY29tZXMg aW1tZWRpYXRlbHkKKyAqIGFmdGVyIHRoZSBwb3N0aW5nIGxpc3QgYmVpbmcgc3BsaXQgKHdoaWNo IHdvdWxkIGhhdmUgb3ZlcmxhcHBlZCB3aXRoCisgKiBvcmlnbmV3aXRlbSBwcmlvciB0byBzcGxp dCkuICBVc3VhbGx5IFJFRE8gbXVzdCBkZWFsIHdpdGggcG9zdGluZyBsaXN0CisgKiBzcGxpdHMg d2l0aCBhbiBfTCB2YXJpYW50IHBhZ2Ugc3BsaXQgcmVjb3JkLCBhbmQgdXN1YWxseSBib3RoIHRo ZSBuZXcKKyAqIHBvc3RpbmcgbGlzdCBhbmQgdGhlIGZpbmFsIG5ld2l0ZW0gZ28gb24gdGhlIGxl ZnQgcGFnZSAodGhlIGV4aXN0aW5nCisgKiBwb3N0aW5nIGxpc3Qgd2lsbCBiZSBpbnNlcnRlZCBp bnN0ZWFkIG9mIHRoZSBvbGQsIGFuZCB0aGUgZmluYWwgbmV3aXRlbQorICogd2lsbCBiZSBpbnNl cnRlZCBuZXh0IHRvIHRoYXQpLiAgSG93ZXZlciwgX1IgdmFyaWFudCBzcGxpdCByZWNvcmRzIHdp bGwKKyAqIGluY2x1ZGUgYW4gb3JpZ25ld2l0ZW0gd2hlbiB0aGUgc3BsaXQgcG9pbnQgZm9yIHRo ZSBwYWdlIGhhcHBlbnMgdG8gaGF2ZSBhCisgKiBsYXN0bGVmdCB0dXBsZSB0aGF0IGlzIGFsc28g dGhlIHBvc3RpbmcgbGlzdCBiZWluZyBzcGxpdCAobGVhdmluZyBuZXdpdGVtCisgKiBhcyB0aGUg cGFnZSBzcGxpdCdzIGZpcnN0cmlnaHQgdHVwbGUpLiAgVGhlIGV4aXN0ZW5jZSBvZiB0aGlzIGNv cm5lciBjYXNlCisgKiBkb2VzIG5vdCBjaGFuZ2UgdGhlIGJhc2ljIGZhY3QgYWJvdXQgbmV3aXRl bS9vcmlnbmV3aXRlbSBmb3IgdGhlIFJFRE8KKyAqIHJvdXRpbmU6IGl0IGlzIGFsd2F5cyBzdGF0 ZSB1c2VkIGZvciB0aGUgbGVmdCBwYWdlIGFsb25lLiAgKFRoaXMgaXMgd2h5IHRoZQorICogcmVj b3JkJ3MgcG9zdGluZ29mZiBmaWVsZCBpc24ndCBhIHJlbGlhYmxlIGluZGljYXRvciBvZiB3aGV0 aGVyIG9yIG5vdCBhCisgKiBwb3N0aW5nIGxpc3Qgc3BsaXQgb2NjdXJyZWQgZHVyaW5nIHRoZSBw YWdlIHNwbGl0OyBhIG5vbi16ZXJvIHZhbHVlIG1lcmVseQorICogaW5kaWNhdGVzIHRoYXQgdGhl IFJFRE8gcm91dGluZSBtdXN0IHJlY29uc3RydWN0IGEgbmV3IHBvc3RpbmcgbGlzdCB0dXBsZQor ICogdGhhdCBpcyBuZWVkZWQgZm9yIHRoZSBsZWZ0IHBhZ2UuKQorICoKKyAqIFRoaXMgcG9zdGlu ZyBsaXN0IHNwbGl0IGhhbmRsaW5nIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHhsX2J0cmVlX2luc2Vy dCBSRURPCisgKiByb3V0aW5lJ3MgSU5TRVJUX1BPU1QgaGFuZGxpbmcuICBXaGlsZSB0aGUgZGV0 YWlscyBhcmUgbW9yZSBjb21wbGljYXRlZAorICogaGVyZSwgdGhlIGNvbmNlcHQgYW5kIGdvYWxz IGFyZSBleGFjdGx5IHRoZSBzYW1lLiAgU2VlIF9idF9zd2FwX3Bvc3RpbmcoKQorICogZm9yIGRl dGFpbHMgb24gcG9zdGluZyBsaXN0IHNwbGl0cy4KICAqCiAgKiBCYWNrdXAgQmxrIDE6IG5ldyBy aWdodCBwYWdlCiAgKgpAQCAtMTExLDE1ICsxNTQsMzIgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfYnRy ZWVfc3BsaXQKIHsKIAl1aW50MzIJCWxldmVsOwkJCS8qIHRyZWUgbGV2ZWwgb2YgcGFnZSBiZWlu ZyBzcGxpdCAqLwogCU9mZnNldE51bWJlciBmaXJzdHJpZ2h0OwkvKiBmaXJzdCBpdGVtIG1vdmVk IHRvIHJpZ2h0IHBhZ2UgKi8KLQlPZmZzZXROdW1iZXIgbmV3aXRlbW9mZjsJLyogbmV3IGl0ZW0n cyBvZmZzZXQgKHVzZWZ1bCBmb3IgX0wgdmFyaWFudCkgKi8KKwlPZmZzZXROdW1iZXIgbmV3aXRl bW9mZjsJLyogbmV3IGl0ZW0ncyBvZmZzZXQgKi8KKwl1aW50MTYJCXBvc3RpbmdvZmY7CQkvKiBv ZmZzZXQgaW5zaWRlIG9yaWcgcG9zdGluZyB0dXBsZSAqLwogfSB4bF9idHJlZV9zcGxpdDsKIAot I2RlZmluZSBTaXplT2ZCdHJlZVNwbGl0CShvZmZzZXRvZih4bF9idHJlZV9zcGxpdCwgbmV3aXRl bW9mZikgKyBzaXplb2YoT2Zmc2V0TnVtYmVyKSkKKyNkZWZpbmUgU2l6ZU9mQnRyZWVTcGxpdAko b2Zmc2V0b2YoeGxfYnRyZWVfc3BsaXQsIHBvc3RpbmdvZmYpICsgc2l6ZW9mKHVpbnQxNikpCisK Ky8qCisgKiBXaGVuIHBhZ2UgaXMgZGVkdXBsaWNhdGVkLCBjb25zZWN1dGl2ZSBncm91cHMgb2Yg dHVwbGVzIHdpdGggZXF1YWwga2V5cyBhcmUKKyAqIG1lcmdlZCB0b2dldGhlciBpbnRvIHBvc3Rp bmcgbGlzdCB0dXBsZXMuCisgKgorICogVGhlIFdBTCByZWNvcmQgcmVwcmVzZW50cyB0aGUgaW50 ZXJ2YWwgdGhhdCBkZXNjcmliZXMgdGhlIHBvc3RpbmcgdHVwbGUKKyAqIHRoYXQgc2hvdWxkIGJl IGFkZGVkIHRvIHRoZSBwYWdlLgorICovCit0eXBlZGVmIHN0cnVjdCB4bF9idHJlZV9kZWR1cAor eworCU9mZnNldE51bWJlciBiYXNlb2ZmOworCXVpbnQxNgkJbml0ZW1zOworfSB4bF9idHJlZV9k ZWR1cDsKKworI2RlZmluZSBTaXplT2ZCdHJlZURlZHVwIAkob2Zmc2V0b2YoeGxfYnRyZWVfZGVk dXAsIG5pdGVtcykgKyBzaXplb2YodWludDE2KSkKIAogLyoKICAqIFRoaXMgaXMgd2hhdCB3ZSBu ZWVkIHRvIGtub3cgYWJvdXQgZGVsZXRlIG9mIGluZGl2aWR1YWwgbGVhZiBpbmRleCB0dXBsZXMu CiAgKiBUaGUgV0FMIHJlY29yZCBjYW4gcmVwcmVzZW50IGRlbGV0aW9uIG9mIGFueSBudW1iZXIg b2YgaW5kZXggdHVwbGVzIG9uIGEKLSAqIHNpbmdsZSBpbmRleCBwYWdlIHdoZW4gKm5vdCogZXhl Y3V0ZWQgYnkgVkFDVVVNLgorICogc2luZ2xlIGluZGV4IHBhZ2Ugd2hlbiAqbm90KiBleGVjdXRl ZCBieSBWQUNVVU0uICBEZWxldGlvbiBvZiBhIHN1YnNldCBvZgorICogdGhlIFRJRHMgd2l0aGlu IGEgcG9zdGluZyBsaXN0IHR1cGxlIGlzIG5vdCBzdXBwb3J0ZWQuCiAgKgogICogQmFja3VwIEJs ayAwOiBpbmRleCBwYWdlCiAgKi8KQEAgLTE1MiwxOSArMjEyLDIzIEBAIHR5cGVkZWYgc3RydWN0 IHhsX2J0cmVlX3JldXNlX3BhZ2UKIC8qCiAgKiBUaGlzIGlzIHdoYXQgd2UgbmVlZCB0byBrbm93 IGFib3V0IHZhY3V1bSBvZiBpbmRpdmlkdWFsIGxlYWYgaW5kZXggdHVwbGVzLgogICogVGhlIFdB TCByZWNvcmQgY2FuIHJlcHJlc2VudCBkZWxldGlvbiBvZiBhbnkgbnVtYmVyIG9mIGluZGV4IHR1 cGxlcyBvbiBhCi0gKiBzaW5nbGUgaW5kZXggcGFnZSB3aGVuIGV4ZWN1dGVkIGJ5IFZBQ1VVTS4K LSAqCi0gKiBOb3RlIHRoYXQgdGhlIFdBTCByZWNvcmQgaW4gYW55IHZhY3V1bSBvZiBhbiBpbmRl eCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lCi0gKiBpdGVtIHRvIGRlbGV0ZS4KKyAqIHNpbmdsZSBp bmRleCBwYWdlIHdoZW4gZXhlY3V0ZWQgYnkgVkFDVVVNLiAgSXQgY2FuIGFsc28gc3VwcG9ydCAi dXBkYXRlcyIKKyAqIG9mIGluZGV4IHR1cGxlcywgd2hpY2ggYXJlIGhvdyBkZWxldGVzIG9mIGEg c3Vic2V0IG9mIFRJRHMgY29udGFpbmVkIGluIGFuCisgKiBleGlzdGluZyBwb3N0aW5nIGxpc3Qg dHVwbGUgYXJlIGltcGxlbWVudGVkLiAoVXBkYXRlcyBhcmUgb25seSB1c2VkIHdoZW4KKyAqIHRo ZXJlIHdpbGwgYmUgc29tZSByZW1haW5pbmcgVElEcyBvbmNlIFZBQ1VVTSBmaW5pc2hlczsgb3Ro ZXJ3aXNlIHRoZQorICogcG9zdGluZyBsaXN0IHR1cGxlIGNhbiBqdXN0IGJlIGRlbGV0ZWQpLgog ICovCiB0eXBlZGVmIHN0cnVjdCB4bF9idHJlZV92YWN1dW0KIHsKLQl1aW50MzIJCW5kZWxldGVk OworCXVpbnQxNgkJbmRlbGV0ZWQ7CisJdWludDE2CQludXBkYXRlZDsKIAogCS8qIERFTEVURUQg VEFSR0VUIE9GRlNFVCBOVU1CRVJTIEZPTExPVyAqLworCS8qIFVQREFURUQgVEFSR0VUIE9GRlNF VCBOVU1CRVJTIEZPTExPVyAqLworCS8qIFVQREFURUQgVFVQTEVTIEZPUiBPVkVSV1JJVEVTIEZP TExPVyAqLwogfSB4bF9idHJlZV92YWN1dW07CiAKLSNkZWZpbmUgU2l6ZU9mQnRyZWVWYWN1dW0J KG9mZnNldG9mKHhsX2J0cmVlX3ZhY3V1bSwgbmRlbGV0ZWQpICsgc2l6ZW9mKHVpbnQzMikpCisj ZGVmaW5lIFNpemVPZkJ0cmVlVmFjdXVtCShvZmZzZXRvZih4bF9idHJlZV92YWN1dW0sIG51cGRh dGVkKSArIHNpemVvZih1aW50MTYpKQogCiAvKgogICogVGhpcyBpcyB3aGF0IHdlIG5lZWQgdG8g a25vdyBhYm91dCBtYXJraW5nIGFuIGVtcHR5IGJyYW5jaCBmb3IgZGVsZXRpb24uCkBAIC0yNDUs NiArMzA5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfYnRyZWVfbmV3cm9vdAogZXh0ZXJuIHZvaWQg YnRyZWVfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CiBleHRlcm4gdm9pZCBidHJlZV9k ZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CiBleHRlcm4gY29u c3QgY2hhciAqYnRyZWVfaWRlbnRpZnkodWludDggaW5mbyk7CitleHRlcm4gdm9pZCBidHJlZV94 bG9nX3N0YXJ0dXAodm9pZCk7CitleHRlcm4gdm9pZCBidHJlZV94bG9nX2NsZWFudXAodm9pZCk7 CiBleHRlcm4gdm9pZCBidHJlZV9tYXNrKGNoYXIgKnBhZ2VkYXRhLCBCbG9ja051bWJlciBibGtu byk7CiAKICNlbmRpZgkJCQkJCQkvKiBOQlRYTE9HX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5k ZXggYzg4ZGNjZmI4ZC4uNmMxNWRmN2U3MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAgLTM2LDcg KzM2LDcgQEAgUEdfUk1HUihSTV9SRUxNQVBfSUQsICJSZWxNYXAiLCByZWxtYXBfcmVkbywgcmVs bWFwX2Rlc2MsIHJlbG1hcF9pZGVudGlmeSwgTlVMTCwKIFBHX1JNR1IoUk1fU1RBTkRCWV9JRCwg IlN0YW5kYnkiLCBzdGFuZGJ5X3JlZG8sIHN0YW5kYnlfZGVzYywgc3RhbmRieV9pZGVudGlmeSwg TlVMTCwgTlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fSEVBUDJfSUQsICJIZWFwMiIsIGhlYXAyX3Jl ZG8sIGhlYXAyX2Rlc2MsIGhlYXAyX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBoZWFwX21hc2spCiBQ R19STUdSKFJNX0hFQVBfSUQsICJIZWFwIiwgaGVhcF9yZWRvLCBoZWFwX2Rlc2MsIGhlYXBfaWRl bnRpZnksIE5VTEwsIE5VTEwsIGhlYXBfbWFzaykKLVBHX1JNR1IoUk1fQlRSRUVfSUQsICJCdHJl ZSIsIGJ0cmVlX3JlZG8sIGJ0cmVlX2Rlc2MsIGJ0cmVlX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBi dHJlZV9tYXNrKQorUEdfUk1HUihSTV9CVFJFRV9JRCwgIkJ0cmVlIiwgYnRyZWVfcmVkbywgYnRy ZWVfZGVzYywgYnRyZWVfaWRlbnRpZnksIGJ0cmVlX3hsb2dfc3RhcnR1cCwgYnRyZWVfeGxvZ19j bGVhbnVwLCBidHJlZV9tYXNrKQogUEdfUk1HUihSTV9IQVNIX0lELCAiSGFzaCIsIGhhc2hfcmVk bywgaGFzaF9kZXNjLCBoYXNoX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBoYXNoX21hc2spCiBQR19S TUdSKFJNX0dJTl9JRCwgIkdpbiIsIGdpbl9yZWRvLCBnaW5fZGVzYywgZ2luX2lkZW50aWZ5LCBn aW5feGxvZ19zdGFydHVwLCBnaW5feGxvZ19jbGVhbnVwLCBnaW5fbWFzaykKIFBHX1JNR1IoUk1f R0lTVF9JRCwgIkdpc3QiLCBnaXN0X3JlZG8sIGdpc3RfZGVzYywgZ2lzdF9pZGVudGlmeSwgZ2lz dF94bG9nX3N0YXJ0dXAsIGdpc3RfeGxvZ19jbGVhbnVwLCBnaXN0X21hc2spCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCmluZGV4IDc5NDMwZDJiN2IuLmYyYjAzYTZjZmMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCkBAIC0xNTgsNiArMTU4LDE1IEBA IHN0YXRpYyByZWxvcHRfYm9vbCBib29sUmVsT3B0c1tdID0KIAkJfSwKIAkJdHJ1ZQogCX0sCisJ eworCQl7CisJCQkiZGVkdXBsaWNhdGVfaXRlbXMiLAorCQkJIkVuYWJsZXMgZGVkdXBsaWNhdGlv biBvbiBidHJlZSBpbmRleCBsZWFmIHBhZ2VzIiwKKwkJCVJFTE9QVF9LSU5EX0JUUkVFLAorCQkJ U2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCisJCX0sCisJCXRydWUKKwl9LAogCS8qIGxpc3QgdGVy bWluYXRvciAqLwogCXt7TlVMTH19CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCBj MTZlYjA1NDE2Li5kZmJhNWFlMzlhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtMjc2 LDYgKzI3NiwxMCBAQCBCdWlsZEluZGV4VmFsdWVEZXNjcmlwdGlvbihSZWxhdGlvbiBpbmRleFJl bGF0aW9uLAogLyoKICAqIEdldCB0aGUgbGF0ZXN0UmVtb3ZlZFhpZCBmcm9tIHRoZSB0YWJsZSBl bnRyaWVzIHBvaW50ZWQgYXQgYnkgdGhlIGluZGV4CiAgKiB0dXBsZXMgYmVpbmcgZGVsZXRlZC4K KyAqCisgKiBOb3RlOiBpbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IGRvbid0IGNvbnNpc3RlbnRs eSB1c2UgdGhlIHN0YW5kYXJkCisgKiBJbmRleFR1cGxlICsgaGVhcCBUSUQgaXRlbSBwb2ludGVy IHJlcHJlc2VudGF0aW9uIHdpbGwgbmVlZCB0byBwcm92aWRlCisgKiB0aGVpciBvd24gdmVyc2lv biBvZiB0aGlzIGZ1bmN0aW9uLgogICovCiBUcmFuc2FjdGlvbklkCiBpbmRleF9jb21wdXRlX3hp ZF9ob3Jpem9uX2Zvcl90dXBsZXMoUmVsYXRpb24gaXJlbCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL01h a2VmaWxlCmluZGV4IGJmMjQ1ZjVkYWIuLmQ2OTgwOGU3OGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQCBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMv TWFrZWZpbGUuZ2xvYmFsCiAKIE9CSlMgPSBcCiAJbmJ0Y29tcGFyZS5vIFwKKwluYnRkZWR1cC5v IFwKIAluYnRpbnNlcnQubyBcCiAJbmJ0cGFnZS5vIFwKIAluYnRyZWUubyBcCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvUkVBRE1FCmluZGV4IGM2MGE0ZDBkOWUuLmYyNjczMzI4YjQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvUkVBRE1FCkBAIC00MzIsNyArNDMyLDEwIEBAIGJlY2F1c2Ugd2UgYWxsb3cgTFBfREVB RCB0byBiZSBzZXQgd2l0aCBvbmx5IGEgc2hhcmUgbG9jayAoaXQncyBleGFjdGx5CiBsaWtlIGEg aGludCBiaXQgZm9yIGEgaGVhcCB0dXBsZSksIGJ1dCBwaHlzaWNhbGx5IHJlbW92aW5nIHR1cGxl cyByZXF1aXJlcwogZXhjbHVzaXZlIGxvY2suICBJbiB0aGUgY3VycmVudCBjb2RlIHdlIHRyeSB0 byByZW1vdmUgTFBfREVBRCB0dXBsZXMgd2hlbgogd2UgYXJlIG90aGVyd2lzZSBmYWNlZCB3aXRo IGhhdmluZyB0byBzcGxpdCBhIHBhZ2UgdG8gZG8gYW4gaW5zZXJ0aW9uIChhbmQKLWhlbmNlIGhh dmUgZXhjbHVzaXZlIGxvY2sgb24gaXQgYWxyZWFkeSkuCitoZW5jZSBoYXZlIGV4Y2x1c2l2ZSBs b2NrIG9uIGl0IGFscmVhZHkpLiAgRGVkdXBsaWNhdGlvbiBjYW4gYWxzbyBwcmV2ZW50CithIHBh Z2Ugc3BsaXQsIGJ1dCByZW1vdmluZyBMUF9ERUFEIHR1cGxlcyBpcyB0aGUgcHJlZmVycmVkIGFw cHJvYWNoLgorKE5vdGUgdGhhdCBwb3N0aW5nIGxpc3QgdHVwbGVzIGNhbiBvbmx5IGhhdmUgdGhl aXIgTFBfREVBRCBiaXQgc2V0IHdoZW4KK2V2ZXJ5IHRhYmxlIFRJRCB3aXRoaW4gdGhlIHBvc3Rp bmcgbGlzdCBpcyBrbm93biBkZWFkLikKIAogVGhpcyBsZWF2ZXMgdGhlIGluZGV4IGluIGEgc3Rh dGUgd2hlcmUgaXQgaGFzIG5vIGVudHJ5IGZvciBhIGRlYWQgdHVwbGUKIHRoYXQgc3RpbGwgZXhp c3RzIGluIHRoZSBoZWFwLiAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIGZvciB0aGUgY3VycmVudApA QCAtNzI2LDYgKzcyOSwxNTIgQEAgaWYgaXQgbXVzdC4gIFdoZW4gYSBwYWdlIHRoYXQncyBhbHJl YWR5IGZ1bGwgb2YgZHVwbGljYXRlcyBtdXN0IGJlIHNwbGl0LAogdGhlIGZhbGxiYWNrIHN0cmF0 ZWd5IGFzc3VtZXMgdGhhdCBkdXBsaWNhdGVzIGFyZSBtb3N0bHkgaW5zZXJ0ZWQgaW4KIGFzY2Vu ZGluZyBoZWFwIFRJRCBvcmRlci4gIFRoZSBwYWdlIGlzIHNwbGl0IGluIGEgd2F5IHRoYXQgbGVh dmVzIHRoZSBsZWZ0CiBoYWxmIG9mIHRoZSBwYWdlIG1vc3RseSBmdWxsLCBhbmQgdGhlIHJpZ2h0 IGhhbGYgb2YgdGhlIHBhZ2UgbW9zdGx5IGVtcHR5LgorVGhlIG92ZXJhbGwgZWZmZWN0IGlzIHRo YXQgbGVhZiBwYWdlIHNwbGl0cyBncmFjZWZ1bGx5IGFkYXB0IHRvIGluc2VydHMgb2YKK2xhcmdl IGdyb3VwcyBvZiBkdXBsaWNhdGVzLCBtYXhpbWl6aW5nIHNwYWNlIHV0aWxpemF0aW9uLiAgTm90 ZSBhbHNvIHRoYXQKKyJ0cmFwcGluZyIgbGFyZ2UgZ3JvdXBzIG9mIGR1cGxpY2F0ZXMgb24gdGhl IHNhbWUgbGVhZiBwYWdlIGxpa2UgdGhpcyBtYWtlcworZGVkdXBsaWNhdGlvbiBtb3JlIGVmZmlj aWVudC4gIERlZHVwbGljYXRpb24gY2FuIGJlIHBlcmZvcm1lZCBpbmZyZXF1ZW50bHksCit3aXRo b3V0IG1lcmdpbmcgdG9nZXRoZXIgZXhpc3RpbmcgcG9zdGluZyBsaXN0IHR1cGxlcyB0b28gb2Z0 ZW4uCisKK05vdGVzIGFib3V0IGRlZHVwbGljYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKworV2UgZGVkdXBsaWNhdGUgbm9uLXBpdm90IHR1cGxlcyBpbiBub24tdW5pcXVlIGluZGV4 ZXMgdG8gcmVkdWNlIHN0b3JhZ2UKK292ZXJoZWFkLCBhbmQgdG8gYXZvaWQgKG9yIGF0IGxlYXN0 IGRlbGF5KSBwYWdlIHNwbGl0cy4gIE5vdGUgdGhhdCB0aGUKK2dvYWxzIGZvciBkZWR1cGxpY2F0 aW9uIGluIHVuaXF1ZSBpbmRleGVzIGFyZSByYXRoZXIgZGlmZmVyZW50OyBzZWUgbGF0ZXIKK3Nl Y3Rpb24gZm9yIGRldGFpbHMuICBEZWR1cGxpY2F0aW9uIGFsdGVycyB0aGUgcGh5c2ljYWwgcmVw cmVzZW50YXRpb24gb2YKK3R1cGxlcyB3aXRob3V0IGNoYW5naW5nIHRoZSBsb2dpY2FsIGNvbnRl bnRzIG9mIHRoZSBpbmRleCwgYW5kIHdpdGhvdXQKK2FkZGluZyBvdmVyaGVhZCB0byByZWFkIHF1 ZXJpZXMuICBOb24tcGl2b3QgdHVwbGVzIGFyZSBtZXJnZWQgdG9nZXRoZXIKK2ludG8gYSBzaW5n bGUgcGh5c2ljYWwgdHVwbGUgd2l0aCBhIHBvc3RpbmcgbGlzdCAoYSBzaW1wbGUgYXJyYXkgb2Yg aGVhcAorVElEcyB3aXRoIHRoZSBzdGFuZGFyZCBpdGVtIHBvaW50ZXIgZm9ybWF0KS4gIERlZHVw bGljYXRpb24gaXMgYWx3YXlzCithcHBsaWVkIGxhemlseSwgYXQgdGhlIHBvaW50IHdoZXJlIGl0 IHdvdWxkIG90aGVyd2lzZSBiZSBuZWNlc3NhcnkgdG8KK3BlcmZvcm0gYSBwYWdlIHNwbGl0LiAg SXQgb2NjdXJzIG9ubHkgd2hlbiBMUF9ERUFEIGl0ZW1zIGhhdmUgYmVlbgorcmVtb3ZlZCwgYXMg b3VyIGxhc3QgbGluZSBvZiBkZWZlbnNlIGFnYWluc3Qgc3BsaXR0aW5nIGEgbGVhZiBwYWdlLiAg V2UKK2NhbiBzZXQgdGhlIExQX0RFQUQgYml0IHdpdGggcG9zdGluZyBsaXN0IHR1cGxlcywgdGhv dWdoIG9ubHkgd2hlbiBhbGwKK1RJRHMgYXJlIGtub3duIGRlYWQuCisKK091ciBsYXp5IGFwcHJv YWNoIHRvIGRlZHVwbGljYXRpb24gYWxsb3dzIHRoZSBwYWdlIHNwYWNlIGFjY291bnRpbmcgdXNl ZAorZHVyaW5nIHBhZ2Ugc3BsaXRzIHRvIGhhdmUgYWJzb2x1dGVseSBtaW5pbWFsIHNwZWNpYWwg Y2FzZSBsb2dpYyBmb3IKK3Bvc3RpbmcgbGlzdHMuICBQb3N0aW5nIGxpc3RzIGNhbiBiZSB0aG91 Z2h0IG9mIGFzIGV4dHJhIHBheWxvYWQgdGhhdAorc3VmZml4IHRydW5jYXRpb24gd2lsbCByZWxp YWJseSB0cnVuY2F0ZSBhd2F5IGFzIG5lZWRlZCBkdXJpbmcgcGFnZQorc3BsaXRzLCBqdXN0IGxp a2Ugbm9uLWtleSBjb2x1bW5zIGZyb20gYW4gSU5DTFVERSBpbmRleCB0dXBsZS4KK0luY29taW5n L25ldyB0dXBsZXMgY2FuIGdlbmVyYWxseSBiZSB0cmVhdGVkIGFzIG5vbi1vdmVybGFwcGluZyBw bGFpbgoraXRlbXMgKHRob3VnaCBzZWUgc2VjdGlvbiBvbiBwb3N0aW5nIGxpc3Qgc3BsaXRzIGZv ciBpbmZvcm1hdGlvbiBhYm91dCBob3cKK292ZXJsYXBwaW5nIG5ldy9pbmNvbWluZyBpdGVtcyBh cmUgcmVhbGx5IGhhbmRsZWQpLgorCitUaGUgcmVwcmVzZW50YXRpb24gb2YgcG9zdGluZyBsaXN0 cyBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBwb3N0aW5nCitsaXN0cyB1c2VkIGJ5IEdJTiwg c28gaXQgd291bGQgYmUgc3RyYWlnaHRmb3J3YXJkIHRvIGFwcGx5IEdJTidzIHZhcmJ5dGUKK2Vu Y29kaW5nIGNvbXByZXNzaW9uIHNjaGVtZSB0byBpbmRpdmlkdWFsIHBvc3RpbmcgbGlzdHMuICBQ b3N0aW5nIGxpc3QKK2NvbXByZXNzaW9uIHdvdWxkIGJyZWFrIHRoZSBhc3N1bXB0aW9ucyBtYWRl IGJ5IHBvc3RpbmcgbGlzdCBzcGxpdHMgYWJvdXQKK3BhZ2Ugc3BhY2UgYWNjb3VudGluZyAoc2Vl IGxhdGVyIHNlY3Rpb24pLCBzbyBpdCdzIG5vdCBjbGVhciBob3cKK2NvbXByZXNzaW9uIGNvdWxk IGJlIGludGVncmF0ZWQgd2l0aCBuYnRyZWUuICBCZXNpZGVzLCBwb3N0aW5nIGxpc3QKK2NvbXBy ZXNzaW9uIGRvZXMgbm90IG9mZmVyIGEgY29tcGVsbGluZyB0cmFkZS1vZmYgZm9yIG5idHJlZSwg c2luY2UgaW4KK2dlbmVyYWwgbmJ0cmVlIGlzIG9wdGltaXplZCBmb3IgY29uc2lzdGVudCBwZXJm b3JtYW5jZSB3aXRoIG1hbnkKK2NvbmN1cnJlbnQgcmVhZGVycyBhbmQgd3JpdGVycy4KKworQSBt YWpvciBnb2FsIG9mIG91ciBsYXp5IGFwcHJvYWNoIHRvIGRlZHVwbGljYXRpb24gaXMgdG8gbGlt aXQgdGhlCitwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgZGVkdXBsaWNhdGlvbiB3aXRoIHJhbmRvbSB1 cGRhdGVzLiAgRXZlbiBjb25jdXJyZW50CithcHBlbmQtb25seSBpbnNlcnRzIG9mIHRoZSBzYW1l IGtleSB2YWx1ZSB3aWxsIHRlbmQgdG8gaGF2ZSBpbnNlcnRzIG9mCitpbmRpdmlkdWFsIGluZGV4 IHR1cGxlcyBpbiBhbiBvcmRlciB0aGF0IGRvZXNuJ3QgcXVpdGUgbWF0Y2ggaGVhcCBUSUQKK29y ZGVyLiAgRGVsYXlpbmcgZGVkdXBsaWNhdGlvbiBtaW5pbWl6ZXMgcGFnZSBsZXZlbCBmcmFnbWVu dGF0aW9uLgorCitEZWR1cGxpY2F0aW9uIGluIHVuaXF1ZSBpbmRleGVzCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisKK1Zlcnkgb2Z0ZW4sIHRoZSByYW5nZSBvZiB2YWx1ZXMgdGhh dCBjYW4gYmUgcGxhY2VkIG9uIGEgZ2l2ZW4gbGVhZiBwYWdlIGluCithIHVuaXF1ZSBpbmRleCBp cyBmaXhlZCBhbmQgcGVybWFuZW50LiAgRm9yIGV4YW1wbGUsIGEgcHJpbWFyeSBrZXkgb24gYW4K K2lkZW50aXR5IGNvbHVtbiB3aWxsIHVzdWFsbHkgb25seSBoYXZlIHBhZ2Ugc3BsaXRzIGNhdXNl ZCBieSB0aGUgaW5zZXJ0aW9uCitvZiBuZXcgbG9naWNhbCByb3dzIHdpdGhpbiB0aGUgcmlnaHRt b3N0IGxlYWYgcGFnZS4gIElmIHRoZXJlIGlzIGEgc3BsaXQKK29mIGEgbm9uLXJpZ2h0bW9zdCBs ZWFmIHBhZ2UsIHRoZW4gdGhlIHNwbGl0IG11c3QgaGF2ZSBiZWVuIHRyaWdnZXJlZCBieQoraW5z ZXJ0cyBhc3NvY2lhdGVkIHdpdGggYW4gVVBEQVRFIG9mIGFuIGV4aXN0aW5nIGxvZ2ljYWwgcm93 LiAgU3BsaXR0aW5nIGEKK2xlYWYgcGFnZSBwdXJlbHkgdG8gc3RvcmUgbXVsdGlwbGUgdmVyc2lv bnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQKK3BhdGhvbG9naWNhbCwgc2luY2UgaXQgcGVybWFuZW50 bHkgZGVncmFkZXMgdGhlIGluZGV4IHN0cnVjdHVyZSBpbiBvcmRlcgordG8gYWJzb3JiIGEgdGVt cG9yYXJ5IGJ1cnN0IG9mIGR1cGxpY2F0ZXMuICBEZWR1cGxpY2F0aW9uIGluIHVuaXF1ZQoraW5k ZXhlcyBoZWxwcyB0byBwcmV2ZW50IHRoZXNlIHBhdGhvbG9naWNhbCBwYWdlIHNwbGl0cy4KKwor TGlrZSBhbGwgaW5kZXggYWNjZXNzIG1ldGhvZHMsIG5idHJlZSBkb2VzIG5vdCBoYXZlIGRpcmVj dCBrbm93bGVkZ2Ugb2YKK3ZlcnNpb25pbmcgb3Igb2YgTVZDQzsgaXQgZGVhbHMgb25seSB3aXRo IHBoeXNpY2FsIHR1cGxlcy4gIEhvd2V2ZXIsIHVuaXF1ZQoraW5kZXhlcyBpbXBsaWNpdGx5IGdp dmUgbmJ0cmVlIGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IHR1cGxlIHZlcnNpb25pbmcsCitzaW5j ZSBieSBkZWZpbml0aW9uIHplcm8gb3Igb25lIHR1cGxlcyBvZiBhbnkgZ2l2ZW4ga2V5IHZhbHVl IGNhbiBiZQordmlzaWJsZSB0byBhbnkgcG9zc2libGUgTVZDQyBzbmFwc2hvdCAoZXhjbHVkaW5n IGluZGV4IGVudHJpZXMgd2l0aCBOVUxMCit2YWx1ZXMpLiAgV2hlbiBvcHRpbWl6YXRpb25zIHN1 Y2ggYXMgaGVhcGFtJ3MgSGVhcC1vbmx5IHR1cGxlcyAoSE9UKSBoYXBwZW4KK3RvIGJlIGluZWZm ZWN0aXZlLCBuYnRyZWUncyBvbi10aGUtZmx5IGRlbGV0aW9uIG9mIHR1cGxlcyBpbiB1bmlxdWUg aW5kZXhlcworY2FuIGJlIHZlcnkgaW1wb3J0YW50IHdpdGggVVBEQVRFLWhlYXZ5IHdvcmtsb2Fk cy4gIFVuaXF1ZSBjaGVja2luZydzCitMUF9ERUFEIGJpdCBzZXR0aW5nIHJlbGlhYmx5IGF0dGVt cHRzIHRvIGtpbGwgb2xkLCBlcXVhbCBpbmRleCB0dXBsZQordmVyc2lvbnMuICBUaGlzIHByZXZl bnRzIChvciBhdCBsZWFzdCBkZWxheXMpIHBhZ2Ugc3BsaXRzIHRoYXQgYXJlCituZWNlc3Nhcnkg b25seSBiZWNhdXNlIGEgbGVhZiBwYWdlIG11c3QgY29udGFpbiBtdWx0aXBsZSBwaHlzaWNhbCB0 dXBsZXMKK2ZvciB0aGUgc2FtZSBsb2dpY2FsIHJvdy4gIERlZHVwbGljYXRpb24gaW4gdW5pcXVl IGluZGV4ZXMgbXVzdCBjb29wZXJhdGUKK3dpdGggdGhpcyBtZWNoYW5pc20uICBEZWxldGluZyBp dGVtcyBvbiB0aGUgcGFnZSBpcyBhbHdheXMgcHJlZmVyYWJsZSB0bworZGVkdXBsaWNhdGlvbi4K KworVGhlIHN0cmF0ZWd5IHVzZWQgZHVyaW5nIGEgZGVkdXBsaWNhdGlvbiBwYXNzIGhhcyBzaWdu aWZpY2FudCBkaWZmZXJlbmNlcwordG8gdGhlIHN0cmF0ZWd5IHVzZWQgZm9yIGluZGV4ZXMgdGhh dCBjYW4gaGF2ZSBtdWx0aXBsZSBsb2dpY2FsIHJvd3Mgd2l0aAordGhlIHNhbWUga2V5IHZhbHVl LiAgV2UncmUgbm90IHJlYWxseSB0cnlpbmcgdG8gc3RvcmUgZHVwbGljYXRlcyBpbiBhCitzcGFj ZSBlZmZpY2llbnQgbWFubmVyLCBzaW5jZSBpbiB0aGUgbG9uZyBydW4gdGhlcmUgd29uJ3QgYmUg YW55CitkdXBsaWNhdGVzIGFueXdheS4gIFJhdGhlciwgd2UncmUgYnV5aW5nIHRpbWUgZm9yIGdh cmJhZ2UgY29sbGVjdGlvbgorbWVjaGFuaXNtcyB0byBydW4gYmVmb3JlIGEgcGFnZSBzcGxpdCBp cyBuZWVkZWQuCisKK1VuaXF1ZSBpbmRleCBsZWFmIHBhZ2VzIG9ubHkgZ2V0IGEgZGVkdXBsaWNh dGlvbiBwYXNzIHdoZW4gYW4gaW5zZXJ0aW9uCisodGhhdCBtaWdodCBoYXZlIHRvIHNwbGl0IHRo ZSBwYWdlKSBvYnNlcnZlZCBhbiBleGlzdGluZyBkdXBsaWNhdGUgb24gdGhlCitwYWdlIGluIHBh c3NpbmcuICBUaGlzIGlzIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgZGVkdXBsaWNhdGlv biB3aWxsCitvbmx5IHdvcmsgb3V0IHdoZW4gX2FsbF8gbmV3IGluc2VydGlvbnMgYXJlIGR1cGxp Y2F0ZXMgZnJvbSBVUERBVEVzLiAgVGhpcworbWF5IG1lYW4gdGhhdCB3ZSBtaXNzIGFuIG9wcG9y dHVuaXR5IHRvIGRlbGF5IGEgcGFnZSBzcGxpdCwgYnV0IHRoYXQncworb2theSBiZWNhdXNlIG91 ciB1bHRpbWF0ZSBnb2FsIGlzIHRvIGRlbGF5IGxlYWYgcGFnZSBzcGxpdHMgX2luZGVmaW5pdGVs eV8KKyhpLmUuIHRvIHByZXZlbnQgdGhlbSBhbHRvZ2V0aGVyKS4gIFRoZXJlIGlzIGxpdHRsZSBw b2ludCBpbiB0cnlpbmcgdG8KK2RlbGF5IGEgc3BsaXQgdGhhdCBpcyBwcm9iYWJseSBpbmV2aXRh YmxlIGFueXdheS4gIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkCit0aGUgb3ZlcmhlYWQgb2YgYXR0 ZW1wdGluZyB0byBkZWR1cGxpY2F0ZSB3aXRoIHVuaXF1ZSBpbmRleGVzIHRoYXQgYWx3YXlzCito YXZlIGZldyBvciBubyBkdXBsaWNhdGVzLgorCitQb3N0aW5nIGxpc3Qgc3BsaXRzCistLS0tLS0t LS0tLS0tLS0tLS0tCisKK1doZW4gdGhlIGluY29taW5nIHR1cGxlIGhhcHBlbnMgdG8gb3Zlcmxh cCB3aXRoIGFuIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCwKK2EgcG9zdGluZyBsaXN0IHNwbGl0IGlz IHBlcmZvcm1lZC4gIExpa2UgYSBwYWdlIHNwbGl0LCBhIHBvc3RpbmcgbGlzdAorc3BsaXQgcmVz b2x2ZXMgYSBzaXR1YXRpb24gd2hlcmUgYSBuZXcvaW5jb21pbmcgaXRlbSAid29uJ3QgZml0Iiwg d2hpbGUKK2luc2VydGluZyB0aGUgaW5jb21pbmcgaXRlbSBpbiBwYXNzaW5nIChpLmUuIGFzIHBh cnQgb2YgdGhlIHNhbWUgYXRvbWljCithY3Rpb24pLiAgSXQncyBwb3NzaWJsZSAodGhvdWdoIG5v dCBwYXJ0aWN1bGFybHkgbGlrZWx5KSB0aGF0IGFuIGluc2VydCBvZgorYSBuZXcgaXRlbSBvbiB0 byBhbiBhbG1vc3QtZnVsbCBwYWdlIHdpbGwgb3ZlcmxhcCB3aXRoIGEgcG9zdGluZyBsaXN0LAor cmVzdWx0aW5nIGluIGJvdGggYSBwb3N0aW5nIGxpc3Qgc3BsaXQgYW5kIGEgcGFnZSBzcGxpdC4g IEV2ZW4gdGhlbiwgdGhlCithdG9taWMgYWN0aW9uIHRoYXQgc3BsaXRzIHRoZSBwb3N0aW5nIGxp c3QgYWxzbyBpbnNlcnRzIHRoZSBuZXcgaXRlbQorKHNpbmNlIHBhZ2Ugc3BsaXRzIGFsd2F5cyBp bnNlcnQgdGhlIG5ldyBpdGVtIGluIHBhc3NpbmcpLiAgSW5jbHVkaW5nIHRoZQorcG9zdGluZyBs aXN0IHNwbGl0IGluIHRoZSBzYW1lIGF0b21pYyBhY3Rpb24gYXMgdGhlIGluc2VydCBhdm9pZHMg cHJvYmxlbXMKK2NhdXNlZCBieSBjb25jdXJyZW50IGluc2VydHMgaW50byB0aGUgc2FtZSBwb3N0 aW5nIGxpc3QgLS0gIHRoZSBleGFjdAorZGV0YWlscyBvZiBob3cgd2UgY2hhbmdlIHRoZSBwb3N0 aW5nIGxpc3QgZGVwZW5kIHVwb24gdGhlIG5ldyBpdGVtLCBhbmQKK3ZpY2UtdmVyc2EuICBBIHNp bmdsZSBhdG9taWMgYWN0aW9uIGFsc28gbWluaW1pemVzIHRoZSB2b2x1bWUgb2YgZXh0cmEKK1dB TCByZXF1aXJlZCBmb3IgYSBwb3N0aW5nIGxpc3Qgc3BsaXQsIHNpbmNlIHdlIGRvbid0IGhhdmUg dG8gZXhwbGljaXRseQorV0FMLWxvZyB0aGUgb3JpZ2luYWwgcG9zdGluZyBsaXN0IHR1cGxlLgor CitEZXNwaXRlIHBpZ2d5LWJhY2tpbmcgb24gdGhlIHNhbWUgYXRvbWljIGFjdGlvbiB0aGF0IGlu c2VydHMgYSBuZXcgdHVwbGUsCitwb3N0aW5nIGxpc3Qgc3BsaXRzIGNhbiBiZSB0aG91Z2h0IG9m IGFzIGEgc2VwYXJhdGUsIGV4dHJhIGFjdGlvbiB0byB0aGUKK2luc2VydCBpdHNlbGYgKG9yIHRv IHRoZSBwYWdlIHNwbGl0IGl0c2VsZikuICBQb3N0aW5nIGxpc3Qgc3BsaXRzCitjb25jZXB0dWFs bHkgInJld3JpdGUiIGFuIGluc2VydCB0aGF0IG92ZXJsYXBzIHdpdGggYW4gZXhpc3RpbmcgcG9z dGluZworbGlzdCBpbnRvIGFuIGluc2VydCB0aGF0IGFkZHMgaXRzIGZpbmFsIG5ldyBpdGVtIGp1 c3QgdG8gdGhlIHJpZ2h0IG9mIHRoZQorcG9zdGluZyBsaXN0IGluc3RlYWQuICBUaGUgc2l6ZSBv ZiB0aGUgcG9zdGluZyBsaXN0IHdvbid0IGNoYW5nZSwgYW5kIHNvCitwYWdlIHNwYWNlIGFjY291 bnRpbmcgY29kZSBkb2VzIG5vdCBuZWVkIHRvIGNhcmUgYWJvdXQgcG9zdGluZyBsaXN0IHNwbGl0 cworYXQgYWxsLiAgVGhpcyBpcyBhbiBpbXBvcnRhbnQgdXBzaWRlIG9mIG91ciBkZXNpZ247IHRo ZSBwYWdlIHNwbGl0IHBvaW50CitjaG9pY2UgbG9naWMgaXMgdmVyeSBzdWJ0bGUgZXZlbiB3aXRo b3V0IGl0IG5lZWRpbmcgdG8gZGVhbCB3aXRoIHBvc3RpbmcKK2xpc3Qgc3BsaXRzLgorCitPbmx5 IGEgZmV3IGlzb2xhdGVkIGV4dHJhIHN0ZXBzIGFyZSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUg aWxsdXNpb24gdGhhdAordGhlIG5ldyBpdGVtIG5ldmVyIG92ZXJsYXBwZWQgd2l0aCBhbiBleGlz dGluZyBwb3N0aW5nIGxpc3QgaW4gdGhlIGZpcnN0CitwbGFjZTogdGhlIGhlYXAgVElEIG9mIHRo ZSBpbmNvbWluZyB0dXBsZSBpcyBzd2FwcGVkIHdpdGggdGhlIHJpZ2h0bW9zdC9tYXgKK2hlYXAg VElEIGZyb20gdGhlIGV4aXN0aW5nL29yaWdpbmFsbHkgb3ZlcmxhcHBpbmcgcG9zdGluZyBsaXN0 LiAgQWxzbywgdGhlCitwb3N0aW5nLXNwbGl0LXdpdGgtcGFnZS1zcGxpdCBjYXNlIG11c3QgZ2Vu ZXJhdGUgYSBuZXcgaGlnaCBrZXkgYmFzZWQgb24KK2FuIGltYWdpbmFyeSB2ZXJzaW9uIG9mIHRo ZSBvcmlnaW5hbCBwYWdlIHRoYXQgaGFzIGJvdGggdGhlIGZpbmFsIG5ldyBpdGVtCithbmQgdGhl IGFmdGVyLWxpc3Qtc3BsaXQgcG9zdGluZyB0dXBsZSAocGFnZSBzcGxpdHMgdXN1YWxseSBqdXN0 IG9wZXJhdGUKK2FnYWluc3QgYW4gaW1hZ2luYXJ5IHZlcnNpb24gdGhhdCBjb250YWlucyB0aGUg bmV3IGl0ZW0vaXRlbSB0aGF0IHdvbid0CitmaXQpLgorCitUaGlzIGFwcHJvYWNoIGF2b2lkcyBp bnZlbnRpbmcgYW4gImVhZ2VyIiBhdG9taWMgcG9zdGluZyBzcGxpdCBvcGVyYXRpb24KK3RoYXQg c3BsaXRzIHRoZSBwb3N0aW5nIGxpc3Qgd2l0aG91dCBzaW11bHRhbmVvdXNseSBmaW5pc2hpbmcg dGhlIGluc2VydAorb2YgdGhlIGluY29taW5nIGl0ZW0uICBUaGlzIGFsdGVybmF0aXZlIGRlc2ln biBtaWdodCBzZWVtIGNsZWFuZXIsIGJ1dCBpdAorY3JlYXRlcyBzdWJ0bGUgcHJvYmxlbXMgZm9y IHBhZ2Ugc3BhY2UgYWNjb3VudGluZy4gIEluIGdlbmVyYWwsIHRoZXJlCittaWdodCBub3QgYmUg ZW5vdWdoIGZyZWUgc3BhY2Ugb24gdGhlIHBhZ2UgdG8gc3BsaXQgYSBwb3N0aW5nIGxpc3Qgc3Vj aAordGhhdCB0aGUgaW5jb21pbmcvbmV3IGl0ZW0gbm8gbG9uZ2VyIG92ZXJsYXBzIHdpdGggZWl0 aGVyIHBvc3RpbmcgbGlzdAoraGFsZiAtLS0gdGhlIG9wZXJhdGlvbiBjb3VsZCBmYWlsIGJlZm9y ZSB0aGUgYWN0dWFsIHJldGFpbCBpbnNlcnQgb2YgdGhlCituZXcgaXRlbSBldmVuIGJlZ2lucy4g IFdlJ2QgZW5kIHVwIGhhdmluZyB0byBoYW5kbGUgcG9zdGluZyBsaXN0IHNwbGl0cwordGhhdCBu ZWVkIGEgcGFnZSBzcGxpdCBhbnl3YXkuICBCZXNpZGVzLCBzdXBwb3J0aW5nIHZhcmlhYmxlICJz cGxpdCBwb2ludHMiCit3aGlsZSBzcGxpdHRpbmcgcG9zdGluZyBsaXN0cyB3b24ndCBhY3R1YWxs eSBpbXByb3ZlIG92ZXJhbGwgc3BhY2UKK3V0aWxpemF0aW9uLgogCiBOb3RlcyBBYm91dCBEYXRh IFJlcHJlc2VudGF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uYzMyNmE4YzY2NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0ZGVkdXAuYwpAQCAtMCwwICsxLDgwOSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogbmJ0ZGVkdXAuYworICoJICBEZWR1cGxpY2F0ZSBpdGVtcyBpbiBQb3N0Z3JlcyBidHJl ZXMuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjAsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvbmJ0eGxvZy5oIgorI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorCitzdGF0aWMgYm9v bCBfYnRfZG9fc2luZ2xldmFsKFJlbGF0aW9uIHJlbCwgUGFnZSBwYWdlLCBCVERlZHVwU3RhdGUg c3RhdGUsCisJCQkJCQkJIE9mZnNldE51bWJlciBtaW5vZmYsIEluZGV4VHVwbGUgbmV3aXRlbSk7 CitzdGF0aWMgdm9pZCBfYnRfc2luZ2xldmFsX2ZpbGxmYWN0b3IoUGFnZSBwYWdlLCBCVERlZHVw U3RhdGUgc3RhdGUsCisJCQkJCQkJCQkgU2l6ZSBuZXdpdGVtc3opOworI2lmZGVmIFVTRV9BU1NF UlRfQ0hFQ0tJTkcKK3N0YXRpYyBib29sIF9idF9wb3N0aW5nX3ZhbGlkKEluZGV4VHVwbGUgcG9z dGluZyk7CisjZW5kaWYKKworLyoKKyAqIFRyeSB0byBkZWR1cGxpY2F0ZSBpdGVtcyB0byBmcmVl IGF0IGxlYXN0IGVub3VnaCBzcGFjZSB0byBhdm9pZCBhIHBhZ2UKKyAqIHNwbGl0LiAgVGhpcyBm dW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyBpbnNlcnRpb24sIG9ubHkgYWZ0ZXIgTFBf REVBRAorICogaXRlbXMgd2VyZSByZW1vdmVkIGJ5IF9idF92YWN1dW1fb25lX3BhZ2UoKSB0byBw cmV2ZW50IGEgcGFnZSBzcGxpdC4KKyAqIChXZSdsbCBoYXZlIHRvIGtpbGwgTFBfREVBRCBpdGVt cyBoZXJlIHdoZW4gdGhlIHBhZ2UncyBCVFBfSEFTX0dBUkJBR0UgaGludAorICogd2FzIG5vdCBz ZXQsIGJ1dCB0aGF0IHNob3VsZCBiZSByYXJlLikKKyAqCisgKiBUaGUgZ2VuZXJhbCBhcHByb2Fj aCB0YWtlbiB3aXRoICFjaGVja2luZ3VuaXF1ZSBjYWxsZXJzIGlzIHRvIHBlcmZvcm0gYXMKKyAq IG11Y2ggZGVkdXBsaWNhdGlvbiBhcyBwb3NzaWJsZSB0byBmcmVlIGFzIG11Y2ggc3BhY2UgYXMg cG9zc2libGUgbm93LiAgTm90ZQorICogdGhhdCAic2luZ2xlIHZhbHVlIiBzdHJhdGVneSBpcyBz b21ldGltZXMgdXNlZC4gIFRoaXMgbWF4aW1pemVzIHNwYWNlCisgKiB1dGlsaXphdGlvbiBvdmVy IHRpbWUgZ2l2ZW4gYSB3b3JrbG9hZCB3aGVyZSBtYW55IGxlYWYgcGFnZXMgYXJlIG5lZWRlZCB0 bworICogc3RvcmUgZHVwbGljYXRlcyB0aGF0IGFsbCBoYXZlIHRoZSBzYW1lIGR1cGxpY2F0ZSB2 YWx1ZSAoZS5nLiwgYSBzaW5nbGUKKyAqIGNvbHVtbiBpbmRleCB3aGVyZSBhIHNpZ25pZmljYW50 IGZyYWN0aW9uIG9mIGFsbCB0dXBsZXMgYXJlIE5VTExzKS4KKyAqCisgKiBUaGUgc3RyYXRlZ3kg Zm9yIGNoZWNraW5ndW5pcXVlIGNhbGxlcnMgaXMgY29tcGxldGVseSBkaWZmZXJlbnQuCisgKiBE ZWR1cGxpY2F0aW9uIHdvcmtzIGluIHRhbmRlbSB3aXRoIGdhcmJhZ2UgY29sbGVjdGlvbiwgZXNw ZWNpYWxseSB0aGUKKyAqIExQX0RFQUQgYml0IHNldHRpbmcgdGhhdCB0YWtlcyBwbGFjZSBpbiBf YnRfY2hlY2tfdW5pcXVlKCkuICBXZSBnaXZlIHVwIGFzCisgKiBzb29uIGFzIGl0IGJlY29tZXMg Y2xlYXIgdGhhdCBlbm91Z2ggc3BhY2UgaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8KKyAqIGlu c2VydCBuZXdpdGVtIHdpdGhvdXQgbmVlZGluZyB0byBzcGxpdCB0aGUgcGFnZS4gIEFsc28sIHdl IG1lcmdlIHRvZ2V0aGVyCisgKiBsYXJnZXIgZ3JvdXBzIG9mIGR1cGxpY2F0ZSB0dXBsZXMgZmly c3QgKG1lcmdpbmcgdG9nZXRoZXIgdHdvIGluZGV4IHR1cGxlcworICogdXN1YWxseSBzYXZlcyB2 ZXJ5IGxpdHRsZSBzcGFjZSksIGFuZCBhdm9pZCBtZXJnaW5nIHRvZ2V0aGVyIGV4aXN0aW5nCisg KiBwb3N0aW5nIGxpc3QgdHVwbGVzLiAgVGhlIGdvYWwgaXMgdG8gZ2VuZXJhdGUgcG9zdGluZyBs aXN0cyB3aXRoIFRJRHMgdGhhdAorICogYXJlICJjbG9zZSB0b2dldGhlciBpbiB0aW1lIiwgaW4g b3JkZXIgdG8gbWF4aW1pemUgdGhlIGNoYW5jZXMgb2YgYW4KKyAqIExQX0RFQUQgYml0IGJlaW5n IHNldCBvcHBvcnR1bmlzdGljYWxseS4gIFNlZSBuYnRyZWUvUkVBRE1FIGZvciBtb3JlCisgKiBp bmZvcm1hdGlvbiBvbiBkZWR1cGxpY2F0aW9uIHdpdGhpbiB1bmlxdWUgaW5kZXhlcy4KKyAqCisg KiBOb3RlIHRoYXQgdW5pcXVlIGluZGV4ZXMgd2lsbCB1c2UgdGhlICFjaGVja2luZ3VuaXF1ZSBz dHJhdGVneSB3aGVuIGFuCisgKiBpbnNlcnQgb2YgYSB0dXBsZSB3aXRoIE5VTExzIGNhdXNlcyBh IGRlZHVwbGljYXRpb24gcGFzcy4gIFRoaXMgY2FzZSBpcworICogc3RpbGwgbm90IGFmZmVjdGVk IGJ5IHRoZSBkZWR1cGxpY2F0ZV9idHJlZV9pdGVtcyBHVUMsIHNpbmNlIHVuaXF1ZSBpbmRleGVz CisgKiBuZXZlciB1c2UgaXQsIGFuZCBpdCBkb2Vzbid0IHNlZW0gd29ydGggY3JlYXRpbmcgYSBz cGVjaWFsIGNhc2UgZm9yLgorICoKKyAqIG5idGluc2VydC5jIGNhbGxlciBzaG91bGQgY2FsbCBf YnRfdmFjdXVtX29uZV9wYWdlKCkgYmVmb3JlIGNhbGxpbmcgaGVyZQorICogd2hlbiBCVFBfSEFT X0dBUkJBR0UgZmxhZyBpcyBzZXQuICBOb3RlIHRoYXQgdGhpcyByb3V0aW5lIHdpbGwgZGVsZXRl IGFsbAorICogaXRlbXMgb24gdGhlIHBhZ2UgdGhhdCBoYXZlIHRoZWlyIExQX0RFQUQgYml0IHNl dCwgZXZlbiB3aGVuIHBhZ2UncyBmbGFnCisgKiBiaXQgaXMgbm90IHNldCAodGhvdWdoIHRoYXQg c2hvdWxkIGJlIHJhcmUpLiAgQ2FsbGVyIGNhbiByZWx5IG9uIHRoYXQgdG8KKyAqIGF2b2lkIGlu c2VydGluZyBhIG5ldyB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gb3ZlcmxhcCB3aXRoIGFuIGV4aXN0 aW5nCisgKiBwb3N0aW5nIGxpc3QgdHVwbGUgd2l0aCBpdHMgTFBfREVBRCBiaXQgc2V0LiAoQ2Fs bGluZyBoZXJlIHdpdGggYSBuZXdpdGVtc3oKKyAqIG9mIDAgd2lsbCByZWxpYWJseSBkZWxldGUg dGhlIGV4aXN0aW5nIGl0ZW0sIG1ha2luZyBpdCBwb3NzaWJsZSB0byBhdm9pZAorICogdW5zZXR0 aW5nIHRoZSBMUF9ERUFEIGJpdCBqdXN0IHRvIGluc2VydCB0aGUgbmV3IGl0ZW0uICBJbiBnZW5l cmFsLCBwb3N0aW5nCisgKiBsaXN0IHNwbGl0cyBzaG91bGQgbmV2ZXIgaGF2ZSB0byBkZWFsIHdp dGggYSBwb3N0aW5nIGxpc3QgdHVwbGUgd2l0aCBpdHMKKyAqIExQX0RFQUQgYml0IHNldC4pCisg KgorICogTm90ZTogSWYgbmV3aXRlbSBjb250YWlucyBOVUxMIHZhbHVlcyBpbiBrZXkgYXR0cmli dXRlcywgY2FsbGVyIHdpbGwgYmUKKyAqICFjaGVja2luZ3VuaXF1ZSBldmVuIHdoZW4gcmVsIGlz IGEgdW5pcXVlIGluZGV4LiAgVGhlIHBhZ2UgaW4gcXVlc3Rpb24gd2lsbAorICogdXN1YWxseSBo YXZlIG1hbnkgZXhpc3RpbmcgaXRlbXMgd2l0aCBOVUxMcy4KKyAqLwordm9pZAorX2J0X2RlZHVw X29uZV9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgUmVsYXRpb24gaGVhcFJlbCwKKwkJ CQkgICBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LCBib29sIGNoZWNraW5ndW5p cXVlKQoreworCU9mZnNldE51bWJlciBvZmZudW0sCisJCQkJbWlub2ZmLAorCQkJCW1heG9mZjsK KwlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCUJUUGFnZU9wYXF1ZSBvcGFxdWU7 CisJT2Zmc2V0TnVtYmVyIGRlbGV0YWJsZVtNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCUJURGVk dXBTdGF0ZSBzdGF0ZTsKKwlpbnQJCQluYXR0cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZkF0 dHJpYnV0ZXMocmVsKTsKKwlib29sCQltaW5pbWFsID0gY2hlY2tpbmd1bmlxdWU7CisJaW50CQkJ bmRlbGV0YWJsZSA9IDA7CisJU2l6ZQkJcGFnZXNhdmluZyA9IDA7CisJaW50CQkJcGFnZW5pdGVt cyA9IDA7CisJYm9vbAkJc2luZ2xldmFsc3RyYXQgPSBmYWxzZTsKKworCS8qCisJICogQ2FsbGVy IHNob3VsZCBjYWxsIF9idF92YWN1dW1fb25lX3BhZ2UoKSBiZWZvcmUgY2FsbGluZyBoZXJlIHdo ZW4gaXQKKwkgKiBsb29rZWQgbGlrZSB0aGVyZSB3ZXJlIExQX0RFQUQgaXRlbXMgb24gdGhlIHBh Z2UuICBIb3dldmVyLCB3ZSBjYW4ndAorCSAqIGFzc3VtZSB0aGF0IHRoZXJlIGFyZSBubyBMUF9E RUFEIGl0ZW1zIChmb3Igb25lIHRoaW5nLCBWQUNVVU0gd2lsbAorCSAqIGNsZWFyIHRoZSBCVFBf SEFTX0dBUkJBR0UgaGludCB3aXRob3V0IHJlbGlhYmx5IHJlbW92aW5nIGl0ZW1zIHRoYXQgYXJl CisJICogbWFya2VkIExQX0RFQUQpLiAgV2UgbXVzdCBiZSBjYXJlZnVsIHRvIGNsZWFyIGFsbCBM UF9ERUFEIGl0ZW1zIGJlY2F1c2UKKwkgKiBwb3N0aW5nIGxpc3Qgc3BsaXRzIGNhbm5vdCBnbyBh aGVhZCBpZiBhbiBleGlzdGluZyBwb3N0aW5nIGxpc3QgaXRlbQorCSAqIGhhcyBpdHMgTFBfREVB RCBiaXQgc2V0LiAoQWxzbywgd2UgZG9uJ3Qgd2FudCB0byB1bm5lY2Vzc2FyaWx5IHVuc2V0CisJ ICogTFBfREVBRCBiaXRzIHdoZW4gZGVkdXBsaWNhdGluZyBpdGVtcyBvbiB0aGUgcGFnZSBiZWxv dywgdGhvdWdoIHRoYXQKKwkgKiBzaG91bGQgYmUgaGFybWxlc3MuKQorCSAqCisJICogVGhlIG9w cG9zaXRlIHByb2JsZW0gaXMgYWxzbyBwb3NzaWJsZTogX2J0X3ZhY3V1bV9vbmVfcGFnZSgpIHdv bid0CisJICogY2xlYXIgdGhlIEJUUF9IQVNfR0FSQkFHRSBiaXQgd2hlbiBpdCBpcyBmYWxzZWx5 IHNldCAoaS5lLiB3aGVuIHRoZXJlCisJICogYXJlIG5vIExQX0RFQUQgYml0cykuICBUaGlzIHBy b2JhYmx5IGRvZXNuJ3QgbWF0dGVyIGluIHByYWN0aWNlLCBzaW5jZQorCSAqIGl0J3Mgb25seSBh IGhpbnQsIGFuZCBWQUNVVU0gd2lsbCBjbGVhciBpdCBhdCBzb21lIHBvaW50IGFueXdheS4gIEV2 ZW4KKwkgKiBzdGlsbCwgd2UgY2xlYXIgdGhlIEJUUF9IQVNfR0FSQkFHRSBoaW50IHJlbGlhYmx5 IGhlcmUuIChTZWVtcyBsaWtlIGEKKwkgKiBnb29kIGlkZWEgZm9yIGRlZHVwbGljYXRpb24gdG8g b25seSBiZWdpbiB3aGVuIHdlIHVuYW1iaWd1b3VzbHkgaGF2ZSBubworCSAqIExQX0RFQUQgaXRl bXMuKQorCSAqLworCW9wYXF1ZSA9IChCVFBhZ2VPcGFxdWUpIFBhZ2VHZXRTcGVjaWFsUG9pbnRl cihwYWdlKTsKKwltaW5vZmYgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOworCW1heG9mZiA9IFBh Z2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisJZm9yIChvZmZudW0gPSBtaW5vZmY7CisJCSBv ZmZudW0gPD0gbWF4b2ZmOworCQkgb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pKQor CXsKKwkJSXRlbUlkCQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisKKwkJ aWYgKEl0ZW1JZElzRGVhZChpdGVtaWQpKQorCQkJZGVsZXRhYmxlW25kZWxldGFibGUrK10gPSBv ZmZudW07CisJfQorCisJaWYgKG5kZWxldGFibGUgPiAwKQorCXsKKwkJX2J0X2RlbGl0ZW1zX2Rl bGV0ZShyZWwsIGJ1ZiwgZGVsZXRhYmxlLCBuZGVsZXRhYmxlLCBoZWFwUmVsKTsKKworCQkvKgor CQkgKiBSZXR1cm4gd2hlbiBhIHNwbGl0IHdpbGwgYmUgYXZvaWRlZC4gIFRoaXMgaXMgZXF1aXZh bGVudCB0bworCQkgKiBhdm9pZGluZyBhIHNwbGl0IHVzaW5nIHRoZSB1c3VhbCBfYnRfdmFjdXVt X29uZV9wYWdlKCkgcGF0aC4KKwkJICovCisJCWlmIChQYWdlR2V0RnJlZVNwYWNlKHBhZ2UpID49 IG5ld2l0ZW1zeikKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBSZWNvbnNpZGVyIG51bWJlciBv ZiBpdGVtcyBvbiBwYWdlLCBpbiBjYXNlIF9idF9kZWxpdGVtc19kZWxldGUoKQorCQkgKiBtYW5h Z2VkIHRvIGRlbGV0ZSBhbiBpdGVtIG9yIHR3bworCQkgKi8KKwkJbWlub2ZmID0gUF9GSVJTVERB VEFLRVkob3BhcXVlKTsKKwkJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsK Kwl9CisJZWxzZSBpZiAoUF9IQVNfR0FSQkFHRShvcGFxdWUpKQorCXsKKwkJb3BhcXVlLT5idHBv X2ZsYWdzICY9IH5CVFBfSEFTX0dBUkJBR0U7CisJCU1hcmtCdWZmZXJEaXJ0eUhpbnQoYnVmLCB0 cnVlKTsKKwl9CisKKwkvKgorCSAqIFJldHVybiBlYXJseSBpbiBjYXNlIHdoZXJlIGNhbGxlciBq dXN0IHdhbnRzIHVzIHRvIGtpbGwgYW4gZXhpc3RpbmcKKwkgKiBMUF9ERUFEIHBvc3RpbmcgbGlz dCB0dXBsZQorCSAqLworCUFzc2VydCghUF9IQVNfR0FSQkFHRShvcGFxdWUpKTsKKwlpZiAobmV3 aXRlbXN6ID09IDApCisJCXJldHVybjsKKworCS8qIFBhc3NlZC1pbiBuZXdpdGVtc3ogaXMgTUFY QUxJR05FRCBidXQgZG9lcyBub3QgaW5jbHVkZSBsaW5lIHBvaW50ZXIgKi8KKwluZXdpdGVtc3og Kz0gc2l6ZW9mKEl0ZW1JZERhdGEpOworCisJLyoKKwkgKiBCeSBoZXJlLCBpdCdzIGNsZWFyIHRo YXQgZGVkdXBsaWNhdGlvbiB3aWxsIGRlZmluaXRlbHkgYmUgYXR0ZW1wdGVkLgorCSAqIEluaXRp YWxpemUgZGVkdXBsaWNhdGlvbiBzdGF0ZS4KKwkgKgorCSAqIEl0IHdvdWxkIGJlIHBvc3NpYmxl IGZvciBtYXhwb3N0aW5nc2l6ZSAobGltaXQgb24gcG9zdGluZyBsaXN0IHR1cGxlCisJICogc2l6 ZSkgdG8gYmUgc2V0IHRvIG9uZSB0aGlyZCBvZiB0aGUgcGFnZS4gIEhvd2V2ZXIsIGl0IHNlZW1z IGxpa2UgYQorCSAqIGdvb2QgaWRlYSB0byBsaW1pdCB0aGUgc2l6ZSBvZiBwb3N0aW5nIGxpc3Rz IHRvIG9uZSBzaXh0aCBvZiBhIHBhZ2UuCisJICogVGhhdCBvdWdodCB0byBsZWF2ZSB1cyB3aXRo IGEgZ29vZCBzcGxpdCBwb2ludCB3aGVuIHBhZ2VzIGZ1bGwgb2YKKwkgKiBkdXBsaWNhdGVzIGNh biBiZSBzcGxpdCBzZXZlcmFsIHRpbWVzLgorCSAqLworCXN0YXRlID0gKEJURGVkdXBTdGF0ZSkg cGFsbG9jKHNpemVvZihCVERlZHVwU3RhdGVEYXRhKSk7CisJc3RhdGUtPm1heHBvc3RpbmdzaXpl ID0gTWluKEJUTWF4SXRlbVNpemUocGFnZSkgLyAyLCBJTkRFWF9TSVpFX01BU0spOworCXN0YXRl LT5jaGVja2luZ3VuaXF1ZSA9IGNoZWNraW5ndW5pcXVlOworCXN0YXRlLT5za2lwcGVkYmFzZSA9 IEludmFsaWRPZmZzZXROdW1iZXI7CisJLyogTWV0YWRhdGEgYWJvdXQgYmFzZSB0dXBsZSBvZiBj dXJyZW50IHBlbmRpbmcgcG9zdGluZyBsaXN0ICovCisJc3RhdGUtPmJhc2UgPSBOVUxMOworCXN0 YXRlLT5iYXNlb2ZmID0gSW52YWxpZE9mZnNldE51bWJlcjsKKwlzdGF0ZS0+YmFzZXR1cHNpemUg PSAwOworCS8qIE1ldGFkYXRhIGFib3V0IGN1cnJlbnQgcGVuZGluZyBwb3N0aW5nIGxpc3QgVElE cyAqLworCXN0YXRlLT5odGlkcyA9IHBhbGxvYyhzdGF0ZS0+bWF4cG9zdGluZ3NpemUpOworCXN0 YXRlLT5uaHRpZHMgPSAwOworCXN0YXRlLT5uaXRlbXMgPSAwOworCS8qIFNpemUgb2YgYWxsIHBo eXNpY2FsIHR1cGxlcyB0byBiZSByZXBsYWNlZCBieSBwZW5kaW5nIHBvc3RpbmcgbGlzdCAqLwor CXN0YXRlLT5waHlzdHVwc2l6ZSA9IDA7CisKKwkvKiBEZXRlcm1pbmUgaWYgInNpbmdsZSB2YWx1 ZSIgc3RyYXRlZ3kgc2hvdWxkIGJlIHVzZWQgKi8KKwlpZiAoIWNoZWNraW5ndW5pcXVlKQorCQlz aW5nbGV2YWxzdHJhdCA9IF9idF9kb19zaW5nbGV2YWwocmVsLCBwYWdlLCBzdGF0ZSwgbWlub2Zm LCBuZXdpdGVtKTsKKworCW9mZm51bSA9IG1pbm9mZjsKK3JldHJ5OgorCisJLyoKKwkgKiBEZWR1 cGxpY2F0ZSBpdGVtcywgc3RhcnRpbmcgZnJvbSBvZmZudW0uCisJICoKKwkgKiBOb3RlOiBXZSBk ZWxpYmVyYXRlbHkgcmVhc3Nlc3MgdGhlIG1heCBvZmZzZXQgbnVtYmVyIG9uIGVhY2ggaXRlcmF0 aW9uLgorCSAqIFRoZSBudW1iZXIgb2YgaXRlbXMgb24gdGhlIHBhZ2UgZ29lcyBkb3duIGFzIGV4 aXN0aW5nIGl0ZW1zIGFyZQorCSAqIGRlZHVwbGljYXRlZC4KKwkgKi8KKwl3aGlsZSAob2ZmbnVt IDw9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkpCisJeworCQlJdGVtSWQJCWl0ZW1pZCA9 IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJSW5kZXhUdXBsZQlpdHVwID0gKEluZGV4 VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGl0ZW1pZCk7CisKKwkJQXNzZXJ0KCFJdGVtSWRJc0Rl YWQoaXRlbWlkKSk7CisKKwkJaWYgKHN0YXRlLT5uaXRlbXMgPT0gMCkKKwkJeworCQkJLyoKKwkJ CSAqIE5vIHByZXZpb3VzL2Jhc2UgdHVwbGUgZm9yIHRoZSBkYXRhIGl0ZW0gLS0gdXNlIHRoZSBk YXRhIGl0ZW0KKwkJCSAqIGFzIGJhc2UgdHVwbGUgb2YgcGVuZGluZyBwb3N0aW5nIGxpc3QKKwkJ CSAqLworCQkJX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoc3RhdGUsIGl0dXAsIG9mZm51bSk7CisJ CX0KKwkJZWxzZSBpZiAoX2J0X2tlZXBfbmF0dHNfZmFzdChyZWwsIHN0YXRlLT5iYXNlLCBpdHVw KSA+IG5hdHRzICYmCisJCQkJIF9idF9kZWR1cF9zYXZlX2h0aWQoc3RhdGUsIGl0dXApKQorCQl7 CisJCQkvKgorCQkJICogVHVwbGUgaXMgZXF1YWwgdG8gYmFzZSB0dXBsZSBvZiBwZW5kaW5nIHBv c3RpbmcgbGlzdC4gIEhlYXAKKwkJCSAqIFRJRChzKSBmb3IgaXR1cCBoYXZlIGJlZW4gc2F2ZWQg aW4gc3RhdGUuCisJCQkgKi8KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBUdXBsZSBp cyBub3QgZXF1YWwgdG8gcGVuZGluZyBwb3N0aW5nIGxpc3QgdHVwbGUsIG9yCisJCQkgKiBfYnRf ZGVkdXBfc2F2ZV9odGlkKCkgb3B0ZWQgdG8gbm90IG1lcmdlIGN1cnJlbnQgaXRlbSBpbnRvCisJ CQkgKiBwZW5kaW5nIHBvc3RpbmcgbGlzdCBmb3Igc29tZSBvdGhlciByZWFzb24gKGUuZy4sIGFk ZGluZyBtb3JlCisJCQkgKiBUSURzIHdvdWxkIGhhdmUgY2F1c2VkIHBvc3RpbmcgbGlzdCB0byBl eGNlZWQgY3VycmVudAorCQkJICogbWF4cG9zdGluZ3NpemUpLgorCQkJICoKKwkJCSAqIElmIHN0 YXRlIGNvbnRhaW5zIHBlbmRpbmcgcG9zdGluZyBsaXN0IHdpdGggbW9yZSB0aGFuIG9uZSBpdGVt LAorCQkJICogZm9ybSBuZXcgcG9zdGluZyB0dXBsZSwgYW5kIGFjdHVhbGx5IHVwZGF0ZSB0aGUg cGFnZS4gIEVsc2UKKwkJCSAqIHJlc2V0IHRoZSBzdGF0ZSBhbmQgbW92ZSBvbiB3aXRob3V0IG1v ZGlmeWluZyB0aGUgcGFnZS4KKwkJCSAqLworCQkJcGFnZXNhdmluZyArPSBfYnRfZGVkdXBfZmlu aXNoX3BlbmRpbmcoYnVmLCBzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgIFJlbGF0aW9uTmVlZHNXQUwo cmVsKSk7CisJCQlwYWdlbml0ZW1zKys7CisKKwkJCWlmIChzaW5nbGV2YWxzdHJhdCkKKwkJCXsK KwkJCQkvKgorCQkJCSAqIFNpbmdsZSB2YWx1ZSBzdHJhdGVneSdzIGV4dHJhIHN0ZXBzLgorCQkJ CSAqCisJCQkJICogTG93ZXIgbWF4cG9zdGluZ3NpemUgZm9yIHNpeHRoIGFuZCBmaW5hbCBpdGVt IHRoYXQgbWlnaHQgYmUKKwkJCQkgKiBkZWR1cGxpY2F0ZWQgYnkgY3VycmVudCBkZWR1cGxpY2F0 aW9uIHBhc3MuICBXaGVuIHNpeHRoCisJCQkJICogaXRlbSBmb3JtZWQvb2JzZXJ2ZWQsIGVuZCBw YXNzLgorCQkJCSAqCisJCQkJICogTm90ZTogSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgd2lsbCBi ZSByZWFjaGVkIGV2ZW4gd2hlbgorCQkJCSAqIGN1cnJlbnQgZGVkdXBsaWNhdGlvbiBwYXNzIGhh cyB5ZXQgdG8gbW9kaWZ5IHRoZSBwYWdlLiAgSXQKKwkJCQkgKiBkb2Vzbid0IG1hdHRlciB3aGV0 aGVyIG9yIG5vdCB0aGUgY3VycmVudCBjYWxsIGdlbmVyYXRlZAorCQkJCSAqIHRoZSBtYXhwb3N0 aW5nc2l6ZS1jYXBwZWQgZHVwbGljYXRlIHR1cGxlcyBhdCB0aGUgc3RhcnQgb2YKKwkJCQkgKiB0 aGUgcGFnZS4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoIW1pbmltYWwgJiYgcGFnZW5pdGVtcyA8PSA2 KTsKKwkJCQlpZiAocGFnZW5pdGVtcyA9PSA1KQorCQkJCQlfYnRfc2luZ2xldmFsX2ZpbGxmYWN0 b3IocGFnZSwgc3RhdGUsIG5ld2l0ZW1zeik7CisJCQkJZWxzZSBpZiAocGFnZW5pdGVtcyA9PSA2 KQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFN0b3AgZGVkdXBsaWNhdGluZyBm b3IgYSBjaGVja2luZ3VuaXF1ZSAobWluaW1hbCkgY2FsbGVyIG9uY2UKKwkJCSAqIHdlJ3ZlIGZy ZWVkIGVub3VnaCBzcGFjZSB0byBhdm9pZCBhbiBpbW1lZGlhdGUgcGFnZSBzcGxpdAorCQkJICov CisJCQllbHNlIGlmIChtaW5pbWFsICYmIHBhZ2VzYXZpbmcgPj0gbmV3aXRlbXN6KQorCQkJCWJy ZWFrOworCisJCQkvKgorCQkJICogTmV4dCBpdGVyYXRpb24gc3RhcnRzIGltbWVkaWF0ZWx5IGFm dGVyIGJhc2UgdHVwbGUgb2Zmc2V0ICh0aGlzCisJCQkgKiB3aWxsIGJlIHRoZSBuZXh0IG9mZnNl dCBvbiB0aGUgcGFnZSB3aGVuIHdlIGRpZG4ndCBtb2RpZnkgdGhlCisJCQkgKiBwYWdlKQorCQkJ ICovCisJCQlvZmZudW0gPSBzdGF0ZS0+YmFzZW9mZjsKKwkJfQorCisJCW9mZm51bSA9IE9mZnNl dE51bWJlck5leHQob2ZmbnVtKTsKKwl9CisKKwkvKiBIYW5kbGUgdGhlIGxhc3QgaXRlbSB3aGVu IHBlbmRpbmcgcG9zdGluZyBsaXN0IGlzIG5vdCBlbXB0eSAqLworCWlmIChzdGF0ZS0+bml0ZW1z ICE9IDApCisJeworCQlwYWdlc2F2aW5nICs9IF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhidWYs IHN0YXRlLAorCQkJCQkJCQkJCQkgICBSZWxhdGlvbk5lZWRzV0FMKHJlbCkpOworCQlwYWdlbml0 ZW1zKys7CisJfQorCisJaWYgKHBhZ2VzYXZpbmcgPCBuZXdpdGVtc3ogJiYgc3RhdGUtPnNraXBw ZWRiYXNlICE9IEludmFsaWRPZmZzZXROdW1iZXIpCisJeworCQkvKgorCQkgKiBEaWRuJ3QgZnJl ZSBlbm91Z2ggc3BhY2UgZm9yIG5ldyBpdGVtIGluIGZpcnN0IGNoZWNraW5ndW5pcXVlIHBhc3Mu CisJCSAqIFRyeSBtYWtpbmcgYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBwYWdlLCB0aGlzIHRpbWUg c3RhcnRpbmcgZnJvbSB0aGUKKwkJICogZmlyc3QgY2FuZGlkYXRlIHBvc3RpbmcgbGlzdCBiYXNl IG9mZnNldCB0aGF0IHdhcyBza2lwcGVkIG92ZXIgaW4KKwkJICogdGhlIGZpcnN0IHBhc3MgKG9u bHkgZG8gYSBzZWNvbmQgcGFzcyB3aGVuIHRoaXMgYWN0dWFsbHkgaGFwcGVuZWQpLgorCQkgKgor CQkgKiBUaGUgc2Vjb25kIHBhc3Mgb3ZlciB0aGUgcGFnZSBtYXkgZGVkdXBsaWNhdGUgaXRlbXMg dGhhdCB3ZXJlCisJCSAqIGluaXRpYWxseSBwYXNzZWQgb3ZlciBkdWUgdG8gY29uY2VybnMgYWJv dXQgbGltaXRpbmcgdGhlCisJCSAqIGVmZmVjdGl2ZW5lc3Mgb2YgTFBfREVBRCBiaXQgc2V0dGlu ZyB3aXRoaW4gX2J0X2NoZWNrX3VuaXF1ZSgpLgorCQkgKiBOb3RlIHRoYXQgdGhlIHNlY29uZCBw YXNzIHdpbGwgc3RpbGwgc3RvcCBkZWR1cGxpY2F0aW5nIGFzIHNvb24gYXMKKwkJICogZW5vdWdo IHNwYWNlIGhhcyBiZWVuIGZyZWVkIHRvIGF2b2lkIGFuIGltbWVkaWF0ZSBwYWdlIHNwbGl0Lgor CQkgKi8KKwkJb2ZmbnVtID0gc3RhdGUtPnNraXBwZWRiYXNlOworCQlwYWdlbml0ZW1zID0gMDsK KworCQlBc3NlcnQoc3RhdGUtPmNoZWNraW5ndW5pcXVlKTsKKwkJc3RhdGUtPmNoZWNraW5ndW5p cXVlID0gZmFsc2U7CisJCXN0YXRlLT5za2lwcGVkYmFzZSA9IEludmFsaWRPZmZzZXROdW1iZXI7 CisKKwkJZ290byByZXRyeTsKKwl9CisKKwkvKiBMb2NhbCBzcGFjZSBhY2NvdW50aW5nIHNob3Vs ZCBhZ3JlZSB3aXRoIHBhZ2UgYWNjb3VudGluZyAqLworCUFzc2VydChwYWdlc2F2aW5nIDwgbmV3 aXRlbXN6IHx8IFBhZ2VHZXRFeGFjdEZyZWVTcGFjZShwYWdlKSA+PSBuZXdpdGVtc3opOworCisJ LyogY2Fubm90IGxlYWsgbWVtb3J5IGhlcmUgKi8KKwlwZnJlZShzdGF0ZS0+aHRpZHMpOworCXBm cmVlKHN0YXRlKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIG5ldyBwZW5kaW5nIHBvc3RpbmcgbGlz dCB0dXBsZSBiYXNlZCBvbiBjYWxsZXIncyBiYXNlIHR1cGxlLgorICoKKyAqIEV2ZXJ5IHR1cGxl IHByb2Nlc3NlZCBieSBkZWR1cGxpY2F0aW9uIGVpdGhlciBiZWNvbWVzIHRoZSBiYXNlIHR1cGxl IGZvciBhCisgKiBwb3N0aW5nIGxpc3QsIG9yIGdldHMgaXRzIGhlYXAgVElEKHMpIGFjY2VwdGVk IGludG8gYSBwZW5kaW5nIHBvc3RpbmcgbGlzdC4KKyAqIEEgdHVwbGUgdGhhdCBzdGFydHMgb3V0 IGFzIHRoZSBiYXNlIHR1cGxlIGZvciBhIHBvc3RpbmcgbGlzdCB3aWxsIG9ubHkKKyAqIGFjdHVh bGx5IGJlIHJld3JpdHRlbiB3aXRoaW4gX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKCkgd2hlbiBp dCB0dXJucyBvdXQKKyAqIHRoYXQgdGhlcmUgYXJlIGR1cGxpY2F0ZXMgdGhhdCBjYW4gYmUgbWVy Z2VkIGludG8gdGhlIGJhc2UgdHVwbGUuCisgKi8KK3ZvaWQKK19idF9kZWR1cF9zdGFydF9wZW5k aW5nKEJURGVkdXBTdGF0ZSBzdGF0ZSwgSW5kZXhUdXBsZSBiYXNlLAorCQkJCQkJT2Zmc2V0TnVt YmVyIGJhc2VvZmYpCit7CisJQXNzZXJ0KHN0YXRlLT5uaHRpZHMgPT0gMCk7CisJQXNzZXJ0KHN0 YXRlLT5uaXRlbXMgPT0gMCk7CisJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChiYXNlKSk7CisK KwkvKgorCSAqIENvcHkgaGVhcCBUSUQocykgZnJvbSBuZXcgYmFzZSB0dXBsZSBmb3IgbmV3IGNh bmRpZGF0ZSBwb3N0aW5nIGxpc3QKKwkgKiBpbnRvIHdvcmtpbmcgc3RhdGUncyBhcnJheQorCSAq LworCWlmICghQlRyZWVUdXBsZUlzUG9zdGluZyhiYXNlKSkKKwl7CisJCW1lbWNweShzdGF0ZS0+ aHRpZHMsIGJhc2UsIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKwkJc3RhdGUtPm5odGlkcyA9 IDE7CisJCXN0YXRlLT5iYXNldHVwc2l6ZSA9IEluZGV4VHVwbGVTaXplKGJhc2UpOworCX0KKwll bHNlCisJeworCQlpbnQJCQlucG9zdGluZzsKKworCQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXRO UG9zdGluZyhiYXNlKTsKKwkJbWVtY3B5KHN0YXRlLT5odGlkcywgQlRyZWVUdXBsZUdldFBvc3Rp bmcoYmFzZSksCisJCQkgICBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIG5wb3N0aW5nKTsKKwkJ c3RhdGUtPm5odGlkcyA9IG5wb3N0aW5nOworCQkvKiBiYXNldHVwc2l6ZSBzaG91bGQgbm90IGlu Y2x1ZGUgZXhpc3RpbmcgcG9zdGluZyBsaXN0ICovCisJCXN0YXRlLT5iYXNldHVwc2l6ZSA9IEJU cmVlVHVwbGVHZXRQb3N0aW5nT2Zmc2V0KGJhc2UpOworCX0KKworCS8qCisJICogU2F2ZSBuZXcg YmFzZSB0dXBsZSBpdHNlbGYgLS0gaXQnbGwgYmUgbmVlZGVkIGlmIHdlIGFjdHVhbGx5IGNyZWF0 ZSBhCisJICogbmV3IHBvc3RpbmcgbGlzdCBmcm9tIG5ldyBwZW5kaW5nIHBvc3RpbmcgbGlzdC4K KwkgKgorCSAqIE11c3QgbWFpbnRhaW4gcGh5c2ljYWwgc2l6ZSBvZiBhbGwgZXhpc3RpbmcgdHVw bGVzIChpbmNsdWRpbmcgbGluZQorCSAqIHBvaW50ZXIgb3ZlcmhlYWQpIHNvIHRoYXQgd2UgY2Fu IGNhbGN1bGF0ZSBzcGFjZSBzYXZpbmdzIG9uIHBhZ2UuCisJICovCisJc3RhdGUtPm5pdGVtcyA9 IDE7CisJc3RhdGUtPmJhc2UgPSBiYXNlOworCXN0YXRlLT5iYXNlb2ZmID0gYmFzZW9mZjsKKwlz dGF0ZS0+cGh5c3R1cHNpemUgPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShiYXNlKSkgKyBzaXpl b2YoSXRlbUlkRGF0YSk7Cit9CisKKy8qCisgKiBTYXZlIGl0dXAgaGVhcCBUSUQocykgaW50byBw ZW5kaW5nIHBvc3RpbmcgbGlzdCB3aGVyZSBwb3NzaWJsZS4KKyAqCisgKiBSZXR1cm5zIGJvb2wg aW5kaWNhdGluZyBpZiB0aGUgcGVuZGluZyBwb3N0aW5nIGxpc3QgbWFuYWdlZCBieSBzdGF0ZSBu b3cKKyAqIGluY2x1ZGVzIGl0dXAncyBoZWFwIFRJRChzKS4KKyAqLworYm9vbAorX2J0X2RlZHVw X3NhdmVfaHRpZChCVERlZHVwU3RhdGUgc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKK3sKKwlpbnQJ CQluaHRpZHM7CisJSXRlbVBvaW50ZXIgaHRpZHM7CisJU2l6ZQkJbWVyZ2VkdHVwc3o7CisKKwlB c3NlcnQoIUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKTsKKworCWlmICghQlRyZWVUdXBsZUlzUG9z dGluZyhpdHVwKSkKKwl7CisJCW5odGlkcyA9IDE7CisJCWh0aWRzID0gJml0dXAtPnRfdGlkOwor CX0KKwllbHNlCisJeworCQluaHRpZHMgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7CisJ CWh0aWRzID0gQlRyZWVUdXBsZUdldFBvc3RpbmcoaXR1cCk7CisJfQorCisJLyoKKwkgKiBEb24n dCBhcHBlbmQgKGhhdmUgY2FsbGVyIGZpbmlzaCBwZW5kaW5nIHBvc3RpbmcgbGlzdCBhcy1pcykg aWYKKwkgKiBhcHBlbmRpbmcgaGVhcCBUSUQocykgZnJvbSBpdHVwIHdvdWxkIHB1dCB1cyBvdmVy IG1heHBvc3RpbmdzaXplIGxpbWl0LgorCSAqCisJICogVGhpcyBjYWxjdWxhdGlvbiBuZWVkcyB0 byBtYXRjaCB0aGUgY29kZSB1c2VkIHdpdGhpbiBfYnRfZm9ybV9wb3N0aW5nKCkKKwkgKiBmb3Ig bmV3IHBvc3RpbmcgbGlzdCB0dXBsZXMuCisJICovCisJbWVyZ2VkdHVwc3ogPSBNQVhBTElHTihz dGF0ZS0+YmFzZXR1cHNpemUgKworCQkJCQkJICAgKHN0YXRlLT5uaHRpZHMgKyBuaHRpZHMpICog c2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkpOworCisJaWYgKG1lcmdlZHR1cHN6ID4gc3RhdGUtPm1h eHBvc3RpbmdzaXplKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBEb24ndCBtZXJnZSBleGlzdGlu ZyBwb3N0aW5nIGxpc3RzIGluIGZpcnN0IGNoZWNraW5ndW5pcXVlIHBhc3MgKi8KKwlpZiAoc3Rh dGUtPmNoZWNraW5ndW5pcXVlICYmCisJCShCVHJlZVR1cGxlSXNQb3N0aW5nKHN0YXRlLT5iYXNl KSB8fCBuaHRpZHMgPiAxKSkKKwl7CisJCS8qIE1heSBiZWdpbiBoZXJlIGlmIHNlY29uZCBwYXNz IG92ZXIgcGFnZSBpcyByZXF1aXJlZCAqLworCQlpZiAoc3RhdGUtPnNraXBwZWRiYXNlID09IElu dmFsaWRPZmZzZXROdW1iZXIpCisJCQlzdGF0ZS0+c2tpcHBlZGJhc2UgPSBzdGF0ZS0+YmFzZW9m ZjsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogU2F2ZSBoZWFwIFRJRHMgdG8gcGVu ZGluZyBwb3N0aW5nIGxpc3QgdHVwbGUgLS0gaXR1cCBjYW4gYmUgbWVyZ2VkIGludG8KKwkgKiBw ZW5kaW5nIHBvc3RpbmcgbGlzdAorCSAqLworCXN0YXRlLT5uaXRlbXMrKzsKKwltZW1jcHkoc3Rh dGUtPmh0aWRzICsgc3RhdGUtPm5odGlkcywgaHRpZHMsCisJCSAgIHNpemVvZihJdGVtUG9pbnRl ckRhdGEpICogbmh0aWRzKTsKKwlzdGF0ZS0+bmh0aWRzICs9IG5odGlkczsKKwlzdGF0ZS0+cGh5 c3R1cHNpemUgKz0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoaXR1cCkpICsgc2l6ZW9mKEl0ZW1J ZERhdGEpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBGaW5hbGl6ZSBwZW5kaW5nIHBv c3RpbmcgbGlzdCB0dXBsZSwgYW5kIGFkZCBpdCB0byB0aGUgcGFnZS4gIEZpbmFsIHR1cGxlCisg KiBpcyBiYXNlZCBvbiBzYXZlZCBiYXNlIHR1cGxlLCBhbmQgc2F2ZWQgbGlzdCBvZiBoZWFwIFRJ RHMuCisgKgorICogUmV0dXJucyBzcGFjZSBzYXZpbmcgZnJvbSBkZWR1cGxpY2F0aW5nIHRvIG1h a2UgYSBuZXcgcG9zdGluZyBsaXN0IHR1cGxlLgorICogTm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMg bGluZSBwb2ludGVyIG92ZXJoZWFkLiAgVGhpcyBpcyB6ZXJvIGluIHRoZSBjYXNlCisgKiB3aGVy ZSBubyBkZWR1cGxpY2F0aW9uIHdhcyBwb3NzaWJsZS4KKyAqLworU2l6ZQorX2J0X2RlZHVwX2Zp bmlzaF9wZW5kaW5nKEJ1ZmZlciBidWYsIEJURGVkdXBTdGF0ZSBzdGF0ZSwgYm9vbCBsb2dnZWQp Cit7CisJU2l6ZQkJc3BhY2VzYXZpbmcgPSAwOworCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KGJ1Zik7CisJaW50CQkJbWluaW11bSA9IDI7CisKKwlBc3NlcnQoc3RhdGUtPm5pdGVtcyA+IDAp OworCUFzc2VydChzdGF0ZS0+bml0ZW1zIDw9IHN0YXRlLT5uaHRpZHMpOworCisJLyoKKwkgKiBP bmx5IGNyZWF0ZSBhIHBvc3RpbmcgbGlzdCB3aGVuIGF0IGxlYXN0IDMgaGVhcCBUSURzIHdpbGwg YXBwZWFyIGluIHRoZQorCSAqIGNoZWNraW5ndW5pcXVlIGNhc2UgKGNoZWNraW5ndW5pcXVlIHN0 cmF0ZWd5IHdvbid0IG1lcmdlIGV4aXN0aW5nCisJICogcG9zdGluZyBsaXN0IHR1cGxlcywgc28g d2Uga25vdyB0aGF0IHRoZSBudW1iZXIgb2YgaXRlbXMgaGVyZSBtdXN0IGFsc28KKwkgKiBiZSB0 aGUgdG90YWwgbnVtYmVyIG9mIGhlYXAgVElEcykuICBDcmVhdGluZyBhIG5ldyBwb3N0aW5nIGxp c3RzIHdpdGgKKwkgKiBvbmx5IHR3byBoZWFwIFRJRHMgd29uJ3QgZXZlbiBzYXZlIGVub3VnaCBz cGFjZSB0byBmaXQgYW5vdGhlcgorCSAqIGR1cGxpY2F0ZSB3aXRoIHRoZSBzYW1lIGtleSBhcyB0 aGUgcG9zdGluZyBsaXN0LiAgVGhpcyBpcyBhIGJhZAorCSAqIHRyYWRlLW9mZiBpZiB0aGVyZSBp cyBhIGNoYW5jZSB0aGF0IHRoZSBMUF9ERUFEIGJpdCBjYW4gYmUgc2V0IGZvcgorCSAqIGVpdGhl ciBleGlzdGluZyB0dXBsZSBieSBwdXR0aW5nIG9mZiBkZWR1cGxpY2F0aW9uLgorCSAqCisJICog KE5vdGUgdGhhdCBhIHNlY29uZCBwYXNzIG92ZXIgdGhlIHBhZ2UgY2FuIGRlZHVwbGljYXRlIHRo ZSBpdGVtIGlmIHRoYXQKKwkgKiBpcyB0cnVseSB0aGUgb25seSB3YXkgdG8gYXZvaWQgYSBwYWdl IHNwbGl0IGZvciBjaGVja2luZ3VuaXF1ZSBjYWxsZXIuKQorCSAqLworCUFzc2VydCghc3RhdGUt PmNoZWNraW5ndW5pcXVlIHx8IHN0YXRlLT5uaXRlbXMgPT0gMSB8fAorCQkgICBzdGF0ZS0+bmh0 aWRzID09IHN0YXRlLT5uaXRlbXMpOworCWlmIChzdGF0ZS0+Y2hlY2tpbmd1bmlxdWUpCisJewor CQltaW5pbXVtID0gMzsKKwkJLyogTWF5IGJlZ2luIGhlcmUgaWYgc2Vjb25kIHBhc3Mgb3ZlciBw YWdlIGlzIHJlcXVpcmVkICovCisJCWlmIChzdGF0ZS0+bml0ZW1zID09IDIgJiYgc3RhdGUtPnNr aXBwZWRiYXNlID09IEludmFsaWRPZmZzZXROdW1iZXIpCisJCQlzdGF0ZS0+c2tpcHBlZGJhc2Ug PSBzdGF0ZS0+YmFzZW9mZjsKKwl9CisKKwlpZiAoc3RhdGUtPm5pdGVtcyA+PSBtaW5pbXVtKQor CXsKKwkJT2Zmc2V0TnVtYmVyIGRlbGV0YWJsZVtNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCQlp bnQJCQluZGVsZXRhYmxlID0gMDsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bTsKKwkJSW5kZXhUdXBs ZQlmaW5hbDsKKwkJU2l6ZQkJZmluYWxzejsKKworCQkvKiBmaW5kIGFsbCB0dXBsZXMgdGhhdCB3 aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhpcyBuZXcgcG9zdGluZyB0dXBsZSAqLworCQlmb3IgKG9m Zm51bSA9IHN0YXRlLT5iYXNlb2ZmOworCQkJIG9mZm51bSA8IHN0YXRlLT5iYXNlb2ZmICsgc3Rh dGUtPm5pdGVtczsKKwkJCSBvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSkpCisJCQlk ZWxldGFibGVbbmRlbGV0YWJsZSsrXSA9IG9mZm51bTsKKworCQkvKiBGb3JtIGEgdHVwbGUgd2l0 aCBhIHBvc3RpbmcgbGlzdCAqLworCQlmaW5hbCA9IF9idF9mb3JtX3Bvc3Rpbmcoc3RhdGUtPmJh c2UsIHN0YXRlLT5odGlkcywgc3RhdGUtPm5odGlkcyk7CisJCWZpbmFsc3ogPSBJbmRleFR1cGxl U2l6ZShmaW5hbCk7CisJCXNwYWNlc2F2aW5nID0gc3RhdGUtPnBoeXN0dXBzaXplIC0gKGZpbmFs c3ogKyBzaXplb2YoSXRlbUlkRGF0YSkpOworCQkvKiBNdXN0IHNhdmUgc29tZSBzcGFjZSwgYW5k IG11c3Qgbm90IGV4Y2VlZCB0dXBsZSBsaW1pdHMgKi8KKwkJQXNzZXJ0KHNwYWNlc2F2aW5nID4g MCAmJiBzcGFjZXNhdmluZyA8IEJMQ0tTWik7CisJCUFzc2VydChmaW5hbHN6IDw9IHN0YXRlLT5t YXhwb3N0aW5nc2l6ZSk7CisJCUFzc2VydChmaW5hbHN6ID09IE1BWEFMSUdOKEluZGV4VHVwbGVT aXplKGZpbmFsKSkpOworCisJCVNUQVJUX0NSSVRfU0VDVElPTigpOworCisJCS8qIERlbGV0ZSBv cmlnaW5hbCBpdGVtcyAqLworCQlQYWdlSW5kZXhNdWx0aURlbGV0ZShwYWdlLCBkZWxldGFibGUs IG5kZWxldGFibGUpOworCQkvKiBJbnNlcnQgcG9zdGluZyB0dXBsZSwgcmVwbGFjaW5nIG9yaWdp bmFsIGl0ZW1zICovCisJCWlmIChQYWdlQWRkSXRlbShwYWdlLCAoSXRlbSkgZmluYWwsIGZpbmFs c3osIHN0YXRlLT5iYXNlb2ZmLCBmYWxzZSwKKwkJCQkJCWZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0 TnVtYmVyKQorCQkJZWxvZyhFUlJPUiwgImRlZHVwbGljYXRpb24gZmFpbGVkIHRvIGFkZCB0dXBs ZSB0byBwYWdlIik7CisKKwkJTWFya0J1ZmZlckRpcnR5KGJ1Zik7CisKKwkJLyogTG9nIGRlZHVw bGljYXRlZCBpdGVtcyAqLworCQlpZiAobG9nZ2VkKQorCQl7CisJCQlYTG9nUmVjUHRyCXJlY3B0 cjsKKwkJCXhsX2J0cmVlX2RlZHVwIHhscmVjX2RlZHVwOworCisJCQl4bHJlY19kZWR1cC5iYXNl b2ZmID0gc3RhdGUtPmJhc2VvZmY7CisJCQl4bHJlY19kZWR1cC5uaXRlbXMgPSBzdGF0ZS0+bml0 ZW1zOworCisJCQlYTG9nQmVnaW5JbnNlcnQoKTsKKwkJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBi dWYsIFJFR0JVRl9TVEFOREFSRCk7CisJCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopICZ4bHJl Y19kZWR1cCwgU2l6ZU9mQnRyZWVEZWR1cCk7CisKKwkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1f QlRSRUVfSUQsIFhMT0dfQlRSRUVfREVEVVBfUEFHRSk7CisKKwkJCVBhZ2VTZXRMU04ocGFnZSwg cmVjcHRyKTsKKwkJfQorCisJCUVORF9DUklUX1NFQ1RJT04oKTsKKworCQlwZnJlZShmaW5hbCk7 CisJfQorCisJLyogUmVzZXQgc3RhdGUgZm9yIG5leHQgcGVuZGluZyBwb3N0aW5nIGxpc3QgKi8K KwlzdGF0ZS0+bmh0aWRzID0gMDsKKwlzdGF0ZS0+bml0ZW1zID0gMDsKKwlzdGF0ZS0+cGh5c3R1 cHNpemUgPSAwOworCisJcmV0dXJuIHNwYWNlc2F2aW5nOworfQorCisvKgorICogRGV0ZXJtaW5l IGlmIHBhZ2Ugbm9uLXBpdm90IHR1cGxlcyAoZGF0YSBpdGVtcykgYXJlIGFsbCBkdXBsaWNhdGVz IG9mIHRoZQorICogc2FtZSB2YWx1ZSAtLSBpZiB0aGV5IGFyZSwgZGVkdXBsaWNhdGlvbidzICJz aW5nbGUgdmFsdWUiIHN0cmF0ZWd5IHNob3VsZAorICogYmUgYXBwbGllZC4gIFRoZSBnZW5lcmFs IGdvYWwgb2YgdGhpcyBzdHJhdGVneSBpcyB0byBlbnN1cmUgdGhhdAorICogbmJ0c3BsaXRsb2Mu YyAod2hpY2ggdXNlcyBpdHMgb3duIHNpbmdsZSB2YWx1ZSBzdHJhdGVneSkgd2lsbCBmaW5kIGEg dXNlZnVsCisgKiBzcGxpdCBwb2ludCBhcyBmdXJ0aGVyIGR1cGxpY2F0ZXMgYXJlIGluc2VydGVk LCBhbmQgc3VjY2Vzc2l2ZSByaWdodG1vc3QKKyAqIHBhZ2Ugc3BsaXRzIG9jY3VyIGFtb25nIHBh Z2VzIHRoYXQgc3RvcmUgdGhlIHNhbWUgZHVwbGljYXRlIHZhbHVlLiAgV2hlbgorICogdGhlIHBh Z2UgZmluYWxseSBzcGxpdHMsIGl0IHNob3VsZCBlbmQgdXAgQlRSRUVfU0lOR0xFVkFMX0ZJTExG QUNUT1IlIGZ1bGwsCisgKiBqdXN0IGxpa2UgaXQgd291bGQgaWYgZGVkdXBsaWNhdGlvbiB3ZXJl IGRpc2FibGVkLgorICoKKyAqIFdlIGV4cGVjdCB0aGF0IGFmZmVjdGVkIHdvcmtsb2FkcyB3aWxs IHJlcXVpcmUgX3NldmVyYWxfIHNpbmdsZSB2YWx1ZQorICogc3RyYXRlZ3kgZGVkdXBsaWNhdGlv biBwYXNzZXMgKG92ZXIgYSBwYWdlIHRoYXQgb25seSBzdG9yZXMgZHVwbGljYXRlcykKKyAqIGJl Zm9yZSB0aGUgcGFnZSBpcyBmaW5hbGx5IHNwbGl0LiAgVGhlIGZpcnN0IGRlZHVwbGljYXRpb24g cGFzcyBzaG91bGQgb25seQorICogZmluZCByZWd1bGFyIG5vbi1waXZvdCB0dXBsZXMuICBMYXRl ciBkZWR1cGxpY2F0aW9uIHBhc3NlcyB3aWxsIGZpbmQKKyAqIGV4aXN0aW5nIG1heHBvc3Rpbmdz aXplLWNhcHBlZCBwb3N0aW5nIGxpc3QgdHVwbGVzLCB3aGljaCBtdXN0IGJlIHNraXBwZWQKKyAq IG92ZXIuICBUaGUgcGVudWx0aW1hdGUgcGFzcyBpcyBnZW5lcmFsbHkgdGhlIGZpcnN0IHBhc3Mg dGhhdCBhY3R1YWxseQorICogcmVhY2hlcyBfYnRfc2luZ2xldmFsX2ZpbGxmYWN0b3IoKSwgYW5k IHNvIHdpbGwgZGVsaWJlcmF0ZWx5IGxlYXZlIGJlaGluZCBhCisgKiBmZXcgdW50b3VjaGVkIG5v bi1waXZvdCB0dXBsZXMuICBUaGUgZmluYWwgZGVkdXBsaWNhdGlvbiBwYXNzIHdvbid0IGZyZWUK KyAqIGFueSBzcGFjZSAtLSBpdCB3aWxsIHNraXAgb3ZlciBldmVyeXRoaW5nIHdpdGhvdXQgbWVy Z2luZyBhbnl0aGluZyAoaXQKKyAqIHJldHJhY2VzIHRoZSBzdGVwcyBvZiB0aGUgcGVudWx0aW1h dGUgcGFzcykuCisgKgorICogRm9ydHVuYXRlbHksIGhhdmluZyBzZXZlcmFsIHBhc3NlcyBpc24n dCB0b28gZXhwZW5zaXZlLiAgRWFjaCBwYXNzIChhZnRlcgorICogdGhlIGZpcnN0IHBhc3MpIHdv bid0IHNwZW5kIG1hbnkgY3ljbGVzIG9uIHRoZSBsYXJnZSBwb3N0aW5nIGxpc3QgdHVwbGVzCisg KiBsZWZ0IGJ5IHByZXZpb3VzIHBhc3Nlcy4gIEVhY2ggcGFzcyB3aWxsIGZpbmQgYSBsYXJnZSBj b250aWd1b3VzIGdyb3VwIG9mCisgKiBzbWFsbGVyIGR1cGxpY2F0ZSB0dXBsZXMgdG8gbWVyZ2Ug dG9nZXRoZXIgYXQgdGhlIGVuZCBvZiB0aGUgcGFnZS4KKyAqCisgKiBOb3RlOiBXZSBkZWxpYmVy YXRlbHkgZG9uJ3QgYm90aGVyIGNoZWNraW5nIGlmIHRoZSBoaWdoIGtleSBpcyBhIGRpc3RpbmN0 CisgKiB2YWx1ZSAocHJpb3IgdG8gdGhlIFRJRCB0aWVicmVha2VyIGNvbHVtbikgYmVmb3JlIHBy b2NlZWRpbmcsIHVubGlrZQorICogbmJ0c3BsaXRsb2MuYy4gIEl0cyBzaW5nbGUgdmFsdWUgc3Ry YXRlZ3kgb25seSBnZXRzIGFwcGxpZWQgb24gdGhlCisgKiByaWdodG1vc3QgcGFnZSBvZiBkdXBs aWNhdGVzIG9mIHRoZSBzYW1lIHZhbHVlIChvdGhlciBsZWFmIHBhZ2VzIGZ1bGwgb2YKKyAqIGR1 cGxpY2F0ZXMgd2lsbCBnZXQgYSBzaW1wbGUgNTA6NTAgcGFnZSBzcGxpdCBpbnN0ZWFkIG9mIHNw bGl0dGluZyB0b3dhcmRzCisgKiB0aGUgZW5kIG9mIHRoZSBwYWdlKS4gIFRoZXJlIGlzIGxpdHRs ZSBwb2ludCBpbiBtYWtpbmcgdGhlIHNhbWUgZGlzdGluY3Rpb24KKyAqIGhlcmUuCisgKi8KK3N0 YXRpYyBib29sCitfYnRfZG9fc2luZ2xldmFsKFJlbGF0aW9uIHJlbCwgUGFnZSBwYWdlLCBCVERl ZHVwU3RhdGUgc3RhdGUsCisJCQkJIE9mZnNldE51bWJlciBtaW5vZmYsIEluZGV4VHVwbGUgbmV3 aXRlbSkKK3sKKwlpbnQJCQluYXR0cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0 ZXMocmVsKTsKKwlJdGVtSWQJCWl0ZW1pZDsKKwlJbmRleFR1cGxlCWl0dXA7CisKKwlpdGVtaWQg PSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG1pbm9mZik7CisJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdl R2V0SXRlbShwYWdlLCBpdGVtaWQpOworCisJaWYgKF9idF9rZWVwX25hdHRzX2Zhc3QocmVsLCBu ZXdpdGVtLCBpdHVwKSA+IG5hdHRzKQorCXsKKwkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChwYWdl LCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpKTsKKwkJaXR1cCA9IChJbmRleFR1cGxlKSBQ YWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOworCisJCWlmIChfYnRfa2VlcF9uYXR0c19mYXN0KHJl bCwgbmV3aXRlbSwgaXR1cCkgPiBuYXR0cykKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKworLyoKKyAqIExvd2VyIG1heHBvc3RpbmdzaXplIHdoZW4gdXNpbmcgInNp bmdsZSB2YWx1ZSIgc3RyYXRlZ3ksIHRvIGF2b2lkIGEgc2l4dGgKKyAqIGFuZCBmaW5hbCBtYXhw b3N0aW5nc2l6ZS1jYXBwZWQgdHVwbGUuICBUaGUgc2l4dGggYW5kIGZpbmFsIHBvc3RpbmcgbGlz dAorICogdHVwbGUgd2lsbCBlbmQgdXAgc29tZXdoYXQgc21hbGxlciB0aGFuIHRoZSBmaXJzdCBm aXZlLiAgKE5vdGU6IFRoZSBmaXJzdAorICogZml2ZSB0dXBsZXMgY291bGQgYWN0dWFsbHkganVz dCBiZSB2ZXJ5IGxhcmdlIGR1cGxpY2F0ZSB0dXBsZXMgdGhhdAorICogY291bGRuJ3QgYmUgbWVy Z2VkIHRvZ2V0aGVyIGF0IGFsbC4gIERlZHVwbGljYXRpb24gd2lsbCBzaW1wbHkgbm90IG1vZGlm eQorICogdGhlIHBhZ2Ugd2hlbiB0aGF0IGhhcHBlbnMuKQorICoKKyAqIFdoZW4gdGhlcmUgYXJl IHNpeCBwb3N0aW5nIGxpc3RzIG9uIHRoZSBwYWdlIChhZnRlciBjdXJyZW50IGRlZHVwbGljYXRp b24KKyAqIHBhc3MgZ29lcyBvbiB0byBjcmVhdGUvb2JzZXJ2ZSBhIHNpeHRoIHZlcnkgbGFyZ2Ug dHVwbGUpLCBjYWxsZXIgc2hvdWxkIGVuZAorICogaXRzIGRlZHVwbGljYXRpb24gcGFzcy4gIEl0 IGlzbid0IHVzZWZ1bCB0byB0cnkgdG8gZGVkdXBsaWNhdGUgaXRlbXMgdGhhdAorICogYXJlIHN1 cHBvc2VkIHRvIGVuZCB1cCBvbiB0aGUgbmV3IHJpZ2h0IHNpYmxpbmcgcGFnZSBmb2xsb3dpbmcg dGhlCisgKiBhbnRpY2lwYXRlZCBwYWdlIHNwbGl0LiAgQSBmdXR1cmUgZGVkdXBsaWNhdGlvbiBw YXNzIG9mIGZ1dHVyZSByaWdodAorICogc2libGluZyBwYWdlIG1pZ2h0IHRha2UgY2FyZSBvZiBp dC4gIChUaGlzIGlzIHdoeSB0aGUgZmlyc3Qgc2luZ2xlIHZhbHVlCisgKiBzdHJhdGVneSBkZWR1 cGxpY2F0aW9uIHBhc3MgZm9yIGEgZ2l2ZW4gbGVhZiBwYWdlIHdpbGwgZ2VuZXJhbGx5IGZpbmQg b25seQorICogcGxhaW4gbm9uLXBpdm90IHR1cGxlcyAtLSBzZWUgX2J0X2RvX3NpbmdsZXZhbCgp IGNvbW1lbnRzLikKKyAqLworc3RhdGljIHZvaWQKK19idF9zaW5nbGV2YWxfZmlsbGZhY3RvcihQ YWdlIHBhZ2UsIEJURGVkdXBTdGF0ZSBzdGF0ZSwgU2l6ZSBuZXdpdGVtc3opCit7CisJU2l6ZQkJ bGVmdGZyZWU7CisJaW50CQkJcmVkdWN0aW9uOworCisJLyogVGhpcyBjYWxjdWxhdGlvbiBuZWVk cyB0byBtYXRjaCBuYnRzcGxpdGxvYy5jICovCisJbGVmdGZyZWUgPSBQYWdlR2V0UGFnZVNpemUo cGFnZSkgLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSAtCisJCU1BWEFMSUdOKHNpemVvZihCVFBhZ2VP cGFxdWVEYXRhKSk7CisJLyogU3VidHJhY3Qgc2l6ZSBvZiBuZXcgaGlnaCBrZXkgKGluY2x1ZGVz IHBpdm90IGhlYXAgVElEIHNwYWNlKSAqLworCWxlZnRmcmVlIC09IG5ld2l0ZW1zeiArIE1BWEFM SUdOKHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKworCS8qCisJICogUmVkdWNlIG1heHBvc3Rp bmdzaXplIGJ5IGFuIGFtb3VudCBlcXVhbCB0byB0YXJnZXQgZnJlZSBzcGFjZSBvbiBsZWZ0CisJ ICogaGFsZiBvZiBwYWdlCisJICovCisJcmVkdWN0aW9uID0gbGVmdGZyZWUgKiAoKDEwMCAtIEJU UkVFX1NJTkdMRVZBTF9GSUxMRkFDVE9SKSAvIDEwMC4wKTsKKwlpZiAoc3RhdGUtPm1heHBvc3Rp bmdzaXplID4gcmVkdWN0aW9uKQorCQlzdGF0ZS0+bWF4cG9zdGluZ3NpemUgLT0gcmVkdWN0aW9u OworCWVsc2UKKwkJc3RhdGUtPm1heHBvc3RpbmdzaXplID0gMDsKK30KKworLyoKKyAqIEJ1aWxk IGEgcG9zdGluZyBsaXN0IHR1cGxlIGJhc2VkIG9uIGNhbGxlcidzICJiYXNlIiBpbmRleCB0dXBs ZSBhbmQgbGlzdCBvZgorICogaGVhcCBUSURzLiAgV2hlbiBuaHRpZHMgPT0gMSwgYnVpbGRzIGEg c3RhbmRhcmQgbm9uLXBpdm90IHR1cGxlIHdpdGhvdXQgYQorICogcG9zdGluZyBsaXN0LiAoUG9z dGluZyBsaXN0IHR1cGxlcyBjYW4gbmV2ZXIgaGF2ZSBhIHNpbmdsZSBoZWFwIFRJRCwgcGFydGx5 CisgKiBiZWNhdXNlIHRoYXQgZW5zdXJlcyB0aGF0IGRlZHVwbGljYXRpb24gYWx3YXlzIHJlZHVj ZXMgZmluYWwgTUFYQUxJR04oKSdkCisgKiBzaXplIG9mIGVudGlyZSB0dXBsZS4pCisgKgorICog Q29udmVudGlvbiBpcyB0aGF0IHBvc3RpbmcgbGlzdCBzdGFydHMgYXQgYSBNQVhBTElHTigpJ2Qg b2Zmc2V0IChyYXRoZXIKKyAqIHRoYW4gYSBTSE9SVEFMSUdOKCknZCBvZmZzZXQpLCBpbiBsaW5l IHdpdGggdGhlIGFwcHJvYWNoIHRha2VuIHdoZW4KKyAqIGFwcGVuZGluZyBhIGhlYXAgVElEIHRv IG5ldyBwaXZvdCB0dXBsZS9oaWdoIGtleSBkdXJpbmcgc3VmZml4IHRydW5jYXRpb24uCisgKiBU aGlzIHNvbWV0aW1lcyB3YXN0ZXMgYSBsaXR0bGUgc3BhY2UgdGhhdCB3YXMgb25seSBuZWVkZWQg YXMgYWxpZ25tZW50CisgKiBwYWRkaW5nIGluIHRoZSBvcmlnaW5hbCB0dXBsZS4gIEZvbGxvd2lu ZyB0aGlzIGNvbnZlbnRpb24gc2ltcGxpZmllcyB0aGUKKyAqIHNwYWNlIGFjY291bnRpbmcgdXNl ZCB3aGVuIGRlZHVwbGljYXRpbmcgYSBwYWdlICh0aGUgc2FtZSBjb252ZW50aW9uCisgKiBzaW1w bGlmaWVzIHRoZSBhY2NvdW50aW5nIGZvciBjaG9vc2luZyBhIHBvaW50IHRvIHNwbGl0IGEgcGFn ZSBhdCkuCisgKgorICogTm90ZTogQ2FsbGVyJ3MgImh0aWRzIiBhcnJheSBtdXN0IGJlIHVuaXF1 ZSBhbmQgYWxyZWFkeSBpbiBhc2NlbmRpbmcgVElECisgKiBvcmRlci4gIEFueSBleGlzdGluZyBo ZWFwIFRJRHMgZnJvbSAiYmFzZSIgd29uJ3QgYXV0b21hdGljYWxseSBhcHBlYXIgaW4KKyAqIHJl dHVybmVkIHBvc3RpbmcgbGlzdCB0dXBsZSAodGhleSBtdXN0IGJlIGluY2x1ZGVkIGluIGh0aWRz IGFycmF5LikKKyAqLworSW5kZXhUdXBsZQorX2J0X2Zvcm1fcG9zdGluZyhJbmRleFR1cGxlIGJh c2UsIEl0ZW1Qb2ludGVyIGh0aWRzLCBpbnQgbmh0aWRzKQoreworCXVpbnQzMgkJa2V5c2l6ZSwK KwkJCQluZXdzaXplOworCUluZGV4VHVwbGUJaXR1cDsKKworCWlmIChCVHJlZVR1cGxlSXNQb3N0 aW5nKGJhc2UpKQorCQlrZXlzaXplID0gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoYmFzZSk7 CisJZWxzZQorCQlrZXlzaXplID0gSW5kZXhUdXBsZVNpemUoYmFzZSk7CisKKwlBc3NlcnQoIUJU cmVlVHVwbGVJc1Bpdm90KGJhc2UpKTsKKwlBc3NlcnQobmh0aWRzID4gMCAmJiBuaHRpZHMgPD0g UEdfVUlOVDE2X01BWCk7CisJQXNzZXJ0KGtleXNpemUgPT0gTUFYQUxJR04oa2V5c2l6ZSkpOwor CisJLyoKKwkgKiBEZXRlcm1pbmUgZmluYWwgc2l6ZSBvZiBuZXcgdHVwbGUuCisJICoKKwkgKiBU aGUgY2FsY3VsYXRpb24gdXNlZCB3aGVuIG5ldyB0dXBsZSBoYXMgYSBwb3N0aW5nIGxpc3QgbmVl ZHMgdG8gbWF0Y2gKKwkgKiB0aGUgY29kZSB1c2VkIHdpdGhpbiBfYnRfZGVkdXBfc2F2ZV9odGlk KCkuCisJICovCisJaWYgKG5odGlkcyA+IDEpCisJCW5ld3NpemUgPSBNQVhBTElHTihrZXlzaXpl ICsKKwkJCQkJCSAgIG5odGlkcyAqIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKwllbHNlCisJ CW5ld3NpemUgPSBrZXlzaXplOworCisJQXNzZXJ0KG5ld3NpemUgPD0gSU5ERVhfU0laRV9NQVNL KTsKKwlBc3NlcnQobmV3c2l6ZSA9PSBNQVhBTElHTihuZXdzaXplKSk7CisKKwkvKiBBbGxvY2F0 ZSBtZW1vcnkgdXNpbmcgcGFsbG9jMCgpIChtYXRjaGVzIGluZGV4X2Zvcm1fdHVwbGUoKSkgKi8K KwlpdHVwID0gcGFsbG9jMChuZXdzaXplKTsKKwltZW1jcHkoaXR1cCwgYmFzZSwga2V5c2l6ZSk7 CisJaXR1cC0+dF9pbmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CisJaXR1cC0+dF9pbmZvIHw9IG5l d3NpemU7CisJaWYgKG5odGlkcyA+IDEpCisJeworCQkvKiBGb3JtIHBvc3RpbmcgbGlzdCB0dXBs ZSAqLworCQlCVHJlZVR1cGxlU2V0UG9zdGluZyhpdHVwLCBuaHRpZHMsIGtleXNpemUpOworCQlt ZW1jcHkoQlRyZWVUdXBsZUdldFBvc3RpbmcoaXR1cCksIGh0aWRzLAorCQkJICAgc2l6ZW9mKEl0 ZW1Qb2ludGVyRGF0YSkgKiBuaHRpZHMpOworCQlBc3NlcnQoX2J0X3Bvc3RpbmdfdmFsaWQoaXR1 cCkpOworCX0KKwllbHNlCisJeworCQkvKiBGb3JtIHN0YW5kYXJkIG5vbi1waXZvdCB0dXBsZSAq LworCQlpdHVwLT50X2luZm8gJj0gfklOREVYX0FMVF9USURfTUFTSzsKKwkJSXRlbVBvaW50ZXJD b3B5KGh0aWRzLCAmaXR1cC0+dF90aWQpOworCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZp dHVwLT50X3RpZCkpOworCX0KKworCXJldHVybiBpdHVwOworfQorCisvKgorICogUHJlcGFyZSBm b3IgYSBwb3N0aW5nIGxpc3Qgc3BsaXQgYnkgc3dhcHBpbmcgaGVhcCBUSUQgaW4gbmV3aXRlbSB3 aXRoIGhlYXAKKyAqIFRJRCBmcm9tIG9yaWdpbmFsIHBvc3RpbmcgbGlzdCAodGhlICdvcG9zdGlu ZycgaGVhcCBUSUQgbG9jYXRlZCBhdCBvZmZzZXQKKyAqICdwb3N0aW5nb2ZmJykuICBNb2RpZmll cyBuZXdpdGVtLCBzbyBjYWxsZXIgc2hvdWxkIHBhc3MgdGhlaXIgb3duIHByaXZhdGUKKyAqIGNv cHkgdGhhdCBjYW4gc2FmZWx5IGJlIG1vZGlmaWVkLgorICoKKyAqIFJldHVybnMgbmV3IHBvc3Rp bmcgbGlzdCB0dXBsZSwgd2hpY2ggaXMgcGFsbG9jKCknZCBpbiBjYWxsZXIncyBjb250ZXh0Lgor ICogVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIHNpemUgYXMgJ29wb3N0aW5nJy4g IE1vZGlmaWVkIG5ld2l0ZW0gaXMKKyAqIHdoYXQgY2FsbGVyIGFjdHVhbGx5IGluc2VydHMuIChU aGlzIGdlbmVyYWxseSBoYXBwZW5zIGluc2lkZSB0aGUgc2FtZQorICogY3JpdGljYWwgc2VjdGlv biB0aGF0IHBlcmZvcm1zIGFuIGluLXBsYWNlIHVwZGF0ZSBvZiBvbGQgcG9zdGluZyBsaXN0IHVz aW5nCisgKiBuZXcgcG9zdGluZyBsaXN0IHJldHVybmVkIGhlcmUpLgorICoKKyAqIFdoaWxlIHRo ZSBrZXlzIGZyb20gbmV3aXRlbSBhbmQgb3Bvc3RpbmcgbXVzdCBiZSBvcGNsYXNzIGVxdWFsLCBh bmQgbXVzdAorICogZ2VuZXJhdGUgaWRlbnRpY2FsIG91dHB1dCB3aGVuIHJ1biB0aHJvdWdoIHRo ZSB1bmRlcmx5aW5nIHR5cGUncyBvdXRwdXQKKyAqIGZ1bmN0aW9uLCBpdCBkb2Vzbid0IGZvbGxv dyB0aGF0IHRoZWlyIHJlcHJlc2VudGF0aW9ucyBtYXRjaCBleGFjdGx5LgorICogQ2FsbGVyIG11 c3QgYXZvaWQgYXNzdW1pbmcgdGhhdCB0aGVyZSBjYW4ndCBiZSByZXByZXNlbnRhdGlvbmFsIGRp ZmZlcmVuY2VzCisgKiB0aGF0IG1ha2UgZGF0dW1zIGZyb20gb3Bvc3RpbmcgYmlnZ2VyIG9yIHNt YWxsZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZworICogZGF0dW1zIGZyb20gbmV3aXRlbS4gIEZv ciBleGFtcGxlLCBkaWZmZXJlbmNlcyBpbiBUT0FTVCBpbnB1dCBzdGF0ZSBtaWdodAorICogYnJl YWsgYSBmYXVsdHkgYXNzdW1wdGlvbiBhYm91dCB0dXBsZSBzaXplICh0aGUgZXhlY3V0b3IgaXMg ZW50aXRsZWQgdG8KKyAqIGFwcGx5IFRPQVNUIGNvbXByZXNzaW9uIGJhc2VkIG9uIGl0cyBvd24g Y3JpdGVyaWEpLiAgSXQgYWxzbyBzZWVtcyBwb3NzaWJsZQorICogdGhhdCBmdXJ0aGVyIHJlcHJl c2VudGF0aW9uYWwgdmFyaWF0aW9uIHdpbGwgYmUgaW50cm9kdWNlZCBpbiB0aGUgZnV0dXJlLAor ICogaW4gb3JkZXIgdG8gc3VwcG9ydCBuYnRyZWUgZmVhdHVyZXMgbGlrZSBwYWdlLWxldmVsIHBy ZWZpeCBjb21wcmVzc2lvbi4KKyAqCisgKiBTZWUgbmJ0cmVlL1JFQURNRSBmb3IgZGV0YWlscyBv biB0aGUgZGVzaWduIG9mIHBvc3RpbmcgbGlzdCBzcGxpdHMuCisgKi8KK0luZGV4VHVwbGUKK19i dF9zd2FwX3Bvc3RpbmcoSW5kZXhUdXBsZSBuZXdpdGVtLCBJbmRleFR1cGxlIG9wb3N0aW5nLCBp bnQgcG9zdGluZ29mZikKK3sKKwlpbnQJCQluaHRpZHM7CisJY2hhcgkgICAqcmVwbGFjZXBvczsK KwljaGFyCSAgICpyZXBsYWNlcG9zcmlnaHQ7CisJU2l6ZQkJbm1vdmVieXRlczsKKwlJbmRleFR1 cGxlCW5wb3N0aW5nOworCisJbmh0aWRzID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKG9wb3N0aW5n KTsKKwlBc3NlcnQoX2J0X3Bvc3RpbmdfdmFsaWQob3Bvc3RpbmcpKTsKKwlBc3NlcnQocG9zdGlu Z29mZiA+IDAgJiYgcG9zdGluZ29mZiA8IG5odGlkcyk7CisKKwkvKgorCSAqIE1vdmUgaXRlbSBw b2ludGVycyBpbiBwb3N0aW5nIGxpc3QgdG8gbWFrZSBhIGdhcCBmb3IgdGhlIG5ldyBpdGVtJ3MK KwkgKiBoZWFwIFRJRC4gIFdlIHNoaWZ0IFRJRHMgb25lIHBsYWNlIHRvIHRoZSByaWdodCwgbG9z aW5nIG9yaWdpbmFsCisJICogcmlnaHRtb3N0IFRJRC4gKG5tb3ZlYnl0ZXMgbXVzdCBub3QgaW5j bHVkZSBUSURzIHRvIHRoZSBsZWZ0IG9mCisJICogcG9zdGluZ29mZiwgbm9yIHRoZSBleGlzdGlu ZyByaWdodG1vc3QvbWF4IFRJRCB0aGF0IGdldHMgb3ZlcndyaXR0ZW4uKQorCSAqLworCW5wb3N0 aW5nID0gQ29weUluZGV4VHVwbGUob3Bvc3RpbmcpOworCXJlcGxhY2Vwb3MgPSAoY2hhciAqKSBC VHJlZVR1cGxlR2V0UG9zdGluZ04obnBvc3RpbmcsIHBvc3RpbmdvZmYpOworCXJlcGxhY2Vwb3Ny aWdodCA9IChjaGFyICopIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihucG9zdGluZywgcG9zdGluZ29m ZiArIDEpOworCW5tb3ZlYnl0ZXMgPSAobmh0aWRzIC0gcG9zdGluZ29mZiAtIDEpICogc2l6ZW9m KEl0ZW1Qb2ludGVyRGF0YSk7CisJbWVtbW92ZShyZXBsYWNlcG9zcmlnaHQsIHJlcGxhY2Vwb3Ms IG5tb3ZlYnl0ZXMpOworCisJLyogRmlsbCB0aGUgZ2FwIGF0IHBvc3RpbmdvZmYgd2l0aCBUSUQg b2YgbmV3IGl0ZW0gKG9yaWdpbmFsIG5ldyBUSUQpICovCisJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQ aXZvdChuZXdpdGVtKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhuZXdpdGVtKSk7CisJSXRlbVBv aW50ZXJDb3B5KCZuZXdpdGVtLT50X3RpZCwgKEl0ZW1Qb2ludGVyKSByZXBsYWNlcG9zKTsKKwor CS8qIE5vdyBjb3B5IG9wb3N0aW5nJ3MgcmlnaHRtb3N0L21heCBUSUQgaW50byBuZXcgaXRlbSAo ZmluYWwgbmV3IFRJRCkgKi8KKwlJdGVtUG9pbnRlckNvcHkoQlRyZWVUdXBsZUdldE1heEhlYXBU SUQob3Bvc3RpbmcpLCAmbmV3aXRlbS0+dF90aWQpOworCisJQXNzZXJ0KEl0ZW1Qb2ludGVyQ29t cGFyZShCVHJlZVR1cGxlR2V0TWF4SGVhcFRJRChucG9zdGluZyksCisJCQkJCQkJICBCVHJlZVR1 cGxlR2V0SGVhcFRJRChuZXdpdGVtKSkgPCAwKTsKKwlBc3NlcnQoX2J0X3Bvc3RpbmdfdmFsaWQo bnBvc3RpbmcpKTsKKworCXJldHVybiBucG9zdGluZzsKK30KKworLyoKKyAqIFZlcmlmeSBwb3N0 aW5nIGxpc3QgaW52YXJpYW50cyBmb3IgInBvc3RpbmciLCB3aGljaCBtdXN0IGJlIGEgcG9zdGlu ZyBsaXN0CisgKiB0dXBsZS4gIFVzZWQgd2l0aGluIGFzc2VydGlvbnMuCisgKi8KKyNpZmRlZiBV U0VfQVNTRVJUX0NIRUNLSU5HCitzdGF0aWMgYm9vbAorX2J0X3Bvc3RpbmdfdmFsaWQoSW5kZXhU dXBsZSBwb3N0aW5nKQoreworCUl0ZW1Qb2ludGVyRGF0YSBsYXN0OworCUl0ZW1Qb2ludGVyIGh0 aWQ7CisKKwlpZiAoIUJUcmVlVHVwbGVJc1Bvc3RpbmcocG9zdGluZykgfHwgQlRyZWVUdXBsZUdl dE5Qb3N0aW5nKHBvc3RpbmcpIDwgMikKKwkJcmV0dXJuIGZhbHNlOworCisJLyogUmVtZW1iZXIg Zmlyc3QgaGVhcCBUSUQgZm9yIGxvb3AgKi8KKwlJdGVtUG9pbnRlckNvcHkoQlRyZWVUdXBsZUdl dEhlYXBUSUQocG9zdGluZyksICZsYXN0KTsKKwlpZiAoIUl0ZW1Qb2ludGVySXNWYWxpZCgmbGFz dCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEl0ZXJhdGUsIHN0YXJ0aW5nIGZyb20gc2Vjb25k IFRJRCAqLworCWZvciAoaW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKHBvc3Rp bmcpOyBpKyspCisJeworCQlodGlkID0gQlRyZWVUdXBsZUdldFBvc3RpbmdOKHBvc3RpbmcsIGkp OworCisJCWlmICghSXRlbVBvaW50ZXJJc1ZhbGlkKGh0aWQpKQorCQkJcmV0dXJuIGZhbHNlOwor CQlpZiAoSXRlbVBvaW50ZXJDb21wYXJlKGh0aWQsICZsYXN0KSA8PSAwKQorCQkJcmV0dXJuIGZh bHNlOworCQlJdGVtUG9pbnRlckNvcHkoaHRpZCwgJmxhc3QpOworCX0KKworCXJldHVybiB0cnVl OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGlu c2VydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwppbmRleCA3ZGRi YTNmZjlmLi4xNzUzYWY4ZjhiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idGluc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMK QEAgLTI4LDYgKzI4LDggQEAKIC8qIE1pbmltdW0gdHJlZSBoZWlnaHQgZm9yIGFwcGxpY2F0aW9u IG9mIGZhc3RwYXRoIG9wdGltaXphdGlvbiAqLwogI2RlZmluZSBCVFJFRV9GQVNUUEFUSF9NSU5f TEVWRUwJMgogCisvKiBHVUMgcGFyYW1ldGVyICovCitib29sCQlkZWR1cGxpY2F0ZV9idHJlZV9p dGVtcyA9IHRydWU7CiAKIHN0YXRpYyBCdWZmZXIgX2J0X25ld3Jvb3QoUmVsYXRpb24gcmVsLCBC dWZmZXIgbGJ1ZiwgQnVmZmVyIHJidWYpOwogCkBAIC00NywxMCArNDksMTIgQEAgc3RhdGljIHZv aWQgX2J0X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksCiAJ CQkJCQkgICBCVFN0YWNrIHN0YWNrLAogCQkJCQkJICAgSW5kZXhUdXBsZSBpdHVwLAogCQkJCQkJ ICAgT2Zmc2V0TnVtYmVyIG5ld2l0ZW1vZmYsCisJCQkJCQkgICBpbnQgcG9zdGluZ29mZiwKIAkJ CQkJCSAgIGJvb2wgc3BsaXRfb25seV9wYWdlKTsKIHN0YXRpYyBCdWZmZXIgX2J0X3NwbGl0KFJl bGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLAogCQkJCQkJQnVm ZmVyIGNidWYsIE9mZnNldE51bWJlciBuZXdpdGVtb2ZmLCBTaXplIG5ld2l0ZW1zeiwKLQkJCQkJ CUluZGV4VHVwbGUgbmV3aXRlbSk7CisJCQkJCQlJbmRleFR1cGxlIG5ld2l0ZW0sIEluZGV4VHVw bGUgb3JpZ25ld2l0ZW0sCisJCQkJCQlJbmRleFR1cGxlIG5wb3N0aW5nLCB1aW50MTYgcG9zdGlu Z29mZik7CiBzdGF0aWMgdm9pZCBfYnRfaW5zZXJ0X3BhcmVudChSZWxhdGlvbiByZWwsIEJ1ZmZl ciBidWYsIEJ1ZmZlciByYnVmLAogCQkJCQkJCSAgQlRTdGFjayBzdGFjaywgYm9vbCBpc19yb290 LCBib29sIGlzX29ubHkpOwogc3RhdGljIGJvb2wgX2J0X3BnYWRkdHVwKFBhZ2UgcGFnZSwgU2l6 ZSBpdGVtc2l6ZSwgSW5kZXhUdXBsZSBpdHVwLApAQCAtMTI1LDYgKzEyOSw3IEBAIF9idF9kb2lu c2VydChSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCwKIAlpbnNlcnRzdGF0ZS5pdHVwX2tl eSA9IGl0dXBfa2V5OwogCWluc2VydHN0YXRlLmJvdW5kc192YWxpZCA9IGZhbHNlOwogCWluc2Vy dHN0YXRlLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJaW5zZXJ0c3RhdGUucG9zdGluZ29mZiA9IDA7 CiAKIAkvKgogCSAqIEl0J3MgdmVyeSBjb21tb24gdG8gaGF2ZSBhbiBpbmRleCBvbiBhbiBhdXRv LWluY3JlbWVudGVkIG9yCkBAIC0yOTUsNyArMzAwLDcgQEAgdG9wOgogCQluZXdpdGVtb2ZmID0g X2J0X2ZpbmRpbnNlcnRsb2MocmVsLCAmaW5zZXJ0c3RhdGUsIGNoZWNraW5ndW5pcXVlLAogCQkJ CQkJCQkJICAgc3RhY2ssIGhlYXBSZWwpOwogCQlfYnRfaW5zZXJ0b25wZyhyZWwsIGl0dXBfa2V5 LCBpbnNlcnRzdGF0ZS5idWYsIEludmFsaWRCdWZmZXIsIHN0YWNrLAotCQkJCQkgICBpdHVwLCBu ZXdpdGVtb2ZmLCBmYWxzZSk7CisJCQkJCSAgIGl0dXAsIG5ld2l0ZW1vZmYsIGluc2VydHN0YXRl LnBvc3RpbmdvZmYsIGZhbHNlKTsKIAl9CiAJZWxzZQogCXsKQEAgLTM0MCw2ICszNDUsOCBAQCBf YnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwg UmVsYXRpb24gaGVhcFJlbCwKIAkJCQkgdWludDMyICpzcGVjdWxhdGl2ZVRva2VuKQogewogCUlu ZGV4VHVwbGUJaXR1cCA9IGluc2VydHN0YXRlLT5pdHVwOworCUluZGV4VHVwbGUJY3VyaXR1cDsK KwlJdGVtSWQJCWN1cml0ZW1pZDsKIAlCVFNjYW5JbnNlcnQgaXR1cF9rZXkgPSBpbnNlcnRzdGF0 ZS0+aXR1cF9rZXk7CiAJU25hcHNob3REYXRhIFNuYXBzaG90RGlydHk7CiAJT2Zmc2V0TnVtYmVy IG9mZnNldDsKQEAgLTM0OCw2ICszNTUsOSBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJl bCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAlCVFBhZ2VP cGFxdWUgb3BhcXVlOwogCUJ1ZmZlcgkJbmJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJYm9vbAkJZm91 bmQgPSBmYWxzZTsKKwlib29sCQlpbnBvc3RpbmcgPSBmYWxzZTsKKwlib29sCQlwcmV2YWxsZGVh ZCA9IHRydWU7CisJaW50CQkJY3VycG9zdGkgPSAwOwogCiAJLyogQXNzdW1lIHVuaXF1ZSB1bnRp bCB3ZSBmaW5kIGEgZHVwbGljYXRlICovCiAJKmlzX3VuaXF1ZSA9IHRydWU7CkBAIC0zNzUsMTMg KzM4NSwyMSBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBp bnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAlBc3NlcnQoaXR1cF9rZXktPnNjYW50aWQg PT0gTlVMTCk7CiAJZm9yICg7OykKIAl7Ci0JCUl0ZW1JZAkJY3VyaXRlbWlkOwotCQlJbmRleFR1 cGxlCWN1cml0dXA7Ci0JCUJsb2NrTnVtYmVyIG5ibGtubzsKLQogCQkvKgotCQkgKiBtYWtlIHN1 cmUgdGhlIG9mZnNldCBwb2ludHMgdG8gYW4gYWN0dWFsIGl0ZW0gYmVmb3JlIHRyeWluZyB0bwot CQkgKiBleGFtaW5lIGl0Li4uCisJCSAqIEVhY2ggaXRlcmF0aW9uIG9mIHRoZSBsb29wIHByb2Nl c3NlcyBvbmUgaGVhcCBUSUQsIG5vdCBvbmUgaW5kZXgKKwkJICogdHVwbGUuICBDdXJyZW50IG9m ZnNldCBudW1iZXIgZm9yIHBhZ2UgaXNuJ3QgdXN1YWxseSBhZHZhbmNlZCBvbgorCQkgKiBpdGVy YXRpb25zIHRoYXQgcHJvY2VzcyBoZWFwIFRJRHMgZnJvbSBwb3N0aW5nIGxpc3QgdHVwbGVzLgor CQkgKgorCQkgKiAiaW5wb3N0aW5nIiBzdGF0ZSBpcyBzZXQgd2hlbiBfaW5zaWRlXyBhIHBvc3Rp bmcgbGlzdCAtLS0gbm90IHdoZW4KKwkJICogd2UncmUgYXQgdGhlIHN0YXJ0IChvciBlbmQpIG9m IGEgcG9zdGluZyBsaXN0LiAgV2UgYWR2YW5jZSBjdXJwb3N0aQorCQkgKiBhdCB0aGUgZW5kIG9m IHRoZSBpdGVyYXRpb24gd2hlbiBpbnNpZGUgYSBwb3N0aW5nIGxpc3QgdHVwbGUuICBJbgorCQkg KiBnZW5lcmFsLCBldmVyeSBsb29wIGl0ZXJhdGlvbiBlaXRoZXIgYWR2YW5jZXMgdGhlIHBhZ2Ug b2Zmc2V0IG9yCisJCSAqIGFkdmFuY2VzIGN1cnBvc3RpIC0tLSBhbiBpdGVyYXRpb24gdGhhdCBo YW5kbGVzIHRoZSByaWdodG1vc3QvbWF4CisJCSAqIGhlYXAgVElEIGluIGEgcG9zdGluZyBsaXN0 IGZpbmFsbHkgYWR2YW5jZXMgdGhlIHBhZ2Ugb2Zmc2V0IChhbmQKKwkJICogdW5zZXRzICJpbnBv c3RpbmciKS4KKwkJICoKKwkJICogTWFrZSBzdXJlIHRoZSBvZmZzZXQgcG9pbnRzIHRvIGFuIGFj dHVhbCBpbmRleCB0dXBsZSBiZWZvcmUgdHJ5aW5nCisJCSAqIHRvIGV4YW1pbmUgaXQuLi4KIAkJ ICovCiAJCWlmIChvZmZzZXQgPD0gbWF4b2ZmKQogCQl7CkBAIC00MDYsMzEgKzQyNCw2MCBAQCBf YnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwg UmVsYXRpb24gaGVhcFJlbCwKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJY3VyaXRlbWlkID0gUGFn ZUdldEl0ZW1JZChwYWdlLCBvZmZzZXQpOwotCiAJCQkvKgotCQkJICogV2UgY2FuIHNraXAgaXRl bXMgdGhhdCBhcmUgbWFya2VkIGtpbGxlZC4KKwkJCSAqIFdlIGNhbiBza2lwIGl0ZW1zIHRoYXQg YXJlIGFscmVhZHkgbWFya2VkIGtpbGxlZC4KIAkJCSAqCiAJCQkgKiBJbiB0aGUgcHJlc2VuY2Ug b2YgaGVhdnkgdXBkYXRlIGFjdGl2aXR5IGFuIGluZGV4IG1heSBjb250YWluCiAJCQkgKiBtYW55 IGtpbGxlZCBpdGVtcyB3aXRoIHRoZSBzYW1lIGtleTsgcnVubmluZyBfYnRfY29tcGFyZSgpIG9u CiAJCQkgKiBlYWNoIGtpbGxlZCBpdGVtIGdldHMgZXhwZW5zaXZlLiAgSnVzdCBhZHZhbmNlIG92 ZXIga2lsbGVkCiAJCQkgKiBpdGVtcyBhcyBxdWlja2x5IGFzIHdlIGNhbi4gIFdlIG9ubHkgYXBw bHkgX2J0X2NvbXBhcmUoKSB3aGVuCi0JCQkgKiB3ZSBnZXQgdG8gYSBub24ta2lsbGVkIGl0ZW0u ICBFdmVuIHRob3NlIGNvbXBhcmlzb25zIGNvdWxkIGJlCi0JCQkgKiBhdm9pZGVkIChpbiB0aGUg Y29tbW9uIGNhc2Ugd2hlcmUgdGhlcmUgaXMgb25seSBvbmUgcGFnZSB0bwotCQkJICogdmlzaXQp IGJ5IHJldXNpbmcgYm91bmRzLCBidXQganVzdCBza2lwcGluZyBkZWFkIGl0ZW1zIGlzIGZhc3QK LQkJCSAqIGVub3VnaC4KKwkJCSAqIHdlIGdldCB0byBhIG5vbi1raWxsZWQgaXRlbS4gIFdlIGNv dWxkIHJldXNlIHRoZSBib3VuZHMgdG8KKwkJCSAqIGF2b2lkIF9idF9jb21wYXJlKCkgY2FsbHMg Zm9yIGtub3duIGVxdWFsIHR1cGxlcywgYnV0IGl0CisJCQkgKiBkb2Vzbid0IHNlZW0gd29ydGgg aXQuICBXb3JrbG9hZHMgd2l0aCBoZWF2eSB1cGRhdGUgYWN0aXZpdHkKKwkJCSAqIHRlbmQgdG8g aGF2ZSBtYW55IGRlZHVwbGljYXRpb24gcGFzc2VzLCBzbyB3ZSdsbCBvZnRlbiBhdm9pZAorCQkJ ICogbW9zdCBvZiB0aG9zZSBjb21wYXJpc29ucywgdG9vICh3ZSBjYWxsIF9idF9jb21wYXJlKCkg d2hlbiB0aGUKKwkJCSAqIHBvc3RpbmcgbGlzdCB0dXBsZSBpcyBpbml0aWFsbHkgZW5jb3VudGVy ZWQsIHRob3VnaCBub3Qgd2hlbgorCQkJICogcHJvY2Vzc2luZyBsYXRlciBUSURzIGZyb20gdGhl IHNhbWUgdHVwbGUpLgogCQkJICovCi0JCQlpZiAoIUl0ZW1JZElzRGVhZChjdXJpdGVtaWQpKQor CQkJaWYgKCFpbnBvc3RpbmcpCisJCQkJY3VyaXRlbWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBv ZmZzZXQpOworCQkJaWYgKGlucG9zdGluZyB8fCAhSXRlbUlkSXNEZWFkKGN1cml0ZW1pZCkpCiAJ CQl7CiAJCQkJSXRlbVBvaW50ZXJEYXRhIGh0aWQ7CiAJCQkJYm9vbAkJYWxsX2RlYWQ7CiAKLQkJ CQlpZiAoX2J0X2NvbXBhcmUocmVsLCBpdHVwX2tleSwgcGFnZSwgb2Zmc2V0KSAhPSAwKQotCQkJ CQlicmVhazsJCS8qIHdlJ3JlIHBhc3QgYWxsIHRoZSBlcXVhbCB0dXBsZXMgKi8KKwkJCQlpZiAo IWlucG9zdGluZykKKwkJCQl7CisJCQkJCS8qIFBsYWluIHR1cGxlLCBvciBmaXJzdCBUSUQgaW4g cG9zdGluZyBsaXN0IHR1cGxlICovCisJCQkJCWlmIChfYnRfY29tcGFyZShyZWwsIGl0dXBfa2V5 LCBwYWdlLCBvZmZzZXQpICE9IDApCisJCQkJCQlicmVhazsJLyogd2UncmUgcGFzdCBhbGwgdGhl IGVxdWFsIHR1cGxlcyAqLwogCi0JCQkJLyogb2theSwgd2UgZ290dGEgZmV0Y2ggdGhlIGhlYXAg dHVwbGUgLi4uICovCi0JCQkJY3VyaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdl LCBjdXJpdGVtaWQpOwotCQkJCWh0aWQgPSBjdXJpdHVwLT50X3RpZDsKKwkJCQkJLyogQWR2YW5j ZWQgY3VyaXR1cCAqLworCQkJCQljdXJpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBh Z2UsIGN1cml0ZW1pZCk7CisJCQkJCUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoY3VyaXR1cCkp OworCQkJCX0KKworCQkJCS8qIG9rYXksIHdlIGdvdHRhIGZldGNoIHRoZSBoZWFwIHR1cGxlIHVz aW5nIGh0aWQgLi4uICovCisJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGN1cml0dXApKQor CQkJCXsKKwkJCQkJLyogLi4uIGh0aWQgaXMgZnJvbSBzaW1wbGUgbm9uLXBpdm90IHR1cGxlICov CisJCQkJCUFzc2VydCghaW5wb3N0aW5nKTsKKwkJCQkJaHRpZCA9IGN1cml0dXAtPnRfdGlkOwor CQkJCX0KKwkJCQllbHNlIGlmICghaW5wb3N0aW5nKQorCQkJCXsKKwkJCQkJLyogLi4uIGh0aWQg aXMgZmlyc3QgVElEIGluIG5ldyBwb3N0aW5nIGxpc3QgKi8KKwkJCQkJaW5wb3N0aW5nID0gdHJ1 ZTsKKwkJCQkJcHJldmFsbGRlYWQgPSB0cnVlOworCQkJCQljdXJwb3N0aSA9IDA7CisJCQkJCWh0 aWQgPSAqQlRyZWVUdXBsZUdldFBvc3RpbmdOKGN1cml0dXAsIDApOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQkvKiAuLi4gaHRpZCBpcyBzZWNvbmQgb3Igc3Vic2VxdWVudCBUSUQgaW4g cG9zdGluZyBsaXN0ICovCisJCQkJCUFzc2VydChjdXJwb3N0aSA+IDApOworCQkJCQlodGlkID0g KkJUcmVlVHVwbGVHZXRQb3N0aW5nTihjdXJpdHVwLCBjdXJwb3N0aSk7CisJCQkJfQogCiAJCQkJ LyoKIAkJCQkgKiBJZiB3ZSBhcmUgZG9pbmcgYSByZWNoZWNrLCB3ZSBleHBlY3QgdG8gZmluZCB0 aGUgdHVwbGUgd2UKQEAgLTUwNiw4ICs1NTMsNyBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9u IHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJ ICogbm90IHBhcnQgb2YgdGhpcyBjaGFpbiBiZWNhdXNlIGl0IGhhZCBhIGRpZmZlcmVudCBpbmRl eAogCQkJCQkgKiBlbnRyeS4KIAkJCQkJICovCi0JCQkJCWh0aWQgPSBpdHVwLT50X3RpZDsKLQkJ CQkJaWYgKHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKGhlYXBSZWwsICZodGlkLAorCQkJ CQlpZiAodGFibGVfaW5kZXhfZmV0Y2hfdHVwbGVfY2hlY2soaGVhcFJlbCwgJml0dXAtPnRfdGlk LAogCQkJCQkJCQkJCQkJCSAgU25hcHNob3RTZWxmLCBOVUxMKSkKIAkJCQkJewogCQkJCQkJLyog Tm9ybWFsIGNhc2UgLS0tIGl0J3Mgc3RpbGwgbGl2ZSAqLwpAQCAtNTY1LDEyICs2MTEsMTQgQEAg X2J0X2NoZWNrX3VuaXF1ZShSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUs IFJlbGF0aW9uIGhlYXBSZWwsCiAJCQkJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsKSkpKTsKIAkJCQkJfQogCQkJCX0KLQkJCQllbHNlIGlmIChhbGxfZGVhZCkKKwkJCQllbHNl IGlmIChhbGxfZGVhZCAmJiAoIWlucG9zdGluZyB8fAorCQkJCQkJCQkJICAocHJldmFsbGRlYWQg JiYKKwkJCQkJCQkJCSAgIGN1cnBvc3RpID09IEJUcmVlVHVwbGVHZXROUG9zdGluZyhjdXJpdHVw KSAtIDEpKSkKIAkJCQl7CiAJCQkJCS8qCi0JCQkJCSAqIFRoZSBjb25mbGljdGluZyB0dXBsZSAo b3Igd2hvbGUgSE9UIGNoYWluKSBpcyBkZWFkIHRvCi0JCQkJCSAqIGV2ZXJ5b25lLCBzbyB3ZSBt YXkgYXMgd2VsbCBtYXJrIHRoZSBpbmRleCBlbnRyeQotCQkJCQkgKiBraWxsZWQuCisJCQkJCSAq IFRoZSBjb25mbGljdGluZyB0dXBsZSAob3IgYWxsIEhPVCBjaGFpbnMgcG9pbnRlZCB0byBieQor CQkJCQkgKiBhbGwgcG9zdGluZyBsaXN0IFRJRHMpIGlzIGRlYWQgdG8gZXZlcnlvbmUsIHNvIG1h cmsgdGhlCisJCQkJCSAqIGluZGV4IGVudHJ5IGtpbGxlZC4KIAkJCQkJICovCiAJCQkJCUl0ZW1J ZE1hcmtEZWFkKGN1cml0ZW1pZCk7CiAJCQkJCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFT X0dBUkJBR0U7CkBAIC01ODQsMTQgKzYzMiwyOSBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9u IHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJ ZWxzZQogCQkJCQkJTWFya0J1ZmZlckRpcnR5SGludChpbnNlcnRzdGF0ZS0+YnVmLCB0cnVlKTsK IAkJCQl9CisKKwkJCQkvKgorCQkJCSAqIFJlbWVtYmVyIGlmIHBvc3RpbmcgbGlzdCB0dXBsZSBo YXMgZXZlbiBhIHNpbmdsZSBIT1QgY2hhaW4KKwkJCQkgKiB3aG9zZSBtZW1iZXJzIGFyZSBub3Qg YWxsIGRlYWQKKwkJCQkgKi8KKwkJCQlpZiAoIWFsbF9kZWFkICYmIGlucG9zdGluZykKKwkJCQkJ cHJldmFsbGRlYWQgPSBmYWxzZTsKIAkJCX0KIAkJfQogCi0JCS8qCi0JCSAqIEFkdmFuY2UgdG8g bmV4dCB0dXBsZSB0byBjb250aW51ZSBjaGVja2luZy4KLQkJICovCi0JCWlmIChvZmZzZXQgPCBt YXhvZmYpCisJCWlmIChpbnBvc3RpbmcgJiYgY3VycG9zdGkgPCBCVHJlZVR1cGxlR2V0TlBvc3Rp bmcoY3VyaXR1cCkgLSAxKQorCQl7CisJCQkvKiBBZHZhbmNlIHRvIG5leHQgVElEIGluIHNhbWUg cG9zdGluZyBsaXN0ICovCisJCQljdXJwb3N0aSsrOworCQkJY29udGludWU7CisJCX0KKwkJZWxz ZSBpZiAob2Zmc2V0IDwgbWF4b2ZmKQorCQl7CisJCQkvKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUg Ki8KKwkJCWN1cnBvc3RpID0gMDsKKwkJCWlucG9zdGluZyA9IGZhbHNlOwogCQkJb2Zmc2V0ID0g T2Zmc2V0TnVtYmVyTmV4dChvZmZzZXQpOworCQl9CiAJCWVsc2UKIAkJewogCQkJaW50CQkJaGln aGtleWNtcDsKQEAgLTYwNiw3ICs2NjksOCBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJl bCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCS8qIEFk dmFuY2UgdG8gbmV4dCBub24tZGVhZCBwYWdlIC0tLSB0aGVyZSBtdXN0IGJlIG9uZSAqLwogCQkJ Zm9yICg7OykKIAkJCXsKLQkJCQluYmxrbm8gPSBvcGFxdWUtPmJ0cG9fbmV4dDsKKwkJCQlCbG9j a051bWJlciBuYmxrbm8gPSBvcGFxdWUtPmJ0cG9fbmV4dDsKKwogCQkJCW5idWYgPSBfYnRfcmVs YW5kZ2V0YnVmKHJlbCwgbmJ1ZiwgbmJsa25vLCBCVF9SRUFEKTsKIAkJCQlwYWdlID0gQnVmZmVy R2V0UGFnZShuYnVmKTsKIAkJCQlvcGFxdWUgPSAoQlRQYWdlT3BhcXVlKSBQYWdlR2V0U3BlY2lh bFBvaW50ZXIocGFnZSk7CkBAIC02MTYsNiArNjgwLDkgQEAgX2J0X2NoZWNrX3VuaXF1ZShSZWxh dGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUsIFJlbGF0aW9uIGhlYXBSZWwsCiAJ CQkJCWVsb2coRVJST1IsICJmZWxsIG9mZiB0aGUgZW5kIG9mIGluZGV4IFwiJXNcIiIsCiAJCQkJ CQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CiAJCQl9CisJCQkvKiBXaWxsIGFsc28g YWR2YW5jZSB0byBuZXh0IHR1cGxlICovCisJCQljdXJwb3N0aSA9IDA7CisJCQlpbnBvc3Rpbmcg PSBmYWxzZTsKIAkJCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CiAJCQlv ZmZzZXQgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOwogCQkJLyogRG9uJ3QgaW52YWxpZGF0ZSBi aW5hcnkgc2VhcmNoIGJvdW5kcyAqLwpAQCAtNjg0LDYgKzc1MSw3IEBAIF9idF9maW5kaW5zZXJ0 bG9jKFJlbGF0aW9uIHJlbCwKIAlCVFNjYW5JbnNlcnQgaXR1cF9rZXkgPSBpbnNlcnRzdGF0ZS0+ aXR1cF9rZXk7CiAJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoaW5zZXJ0c3RhdGUtPmJ1Zik7 CiAJQlRQYWdlT3BhcXVlIGxwYWdlb3A7CisJT2Zmc2V0TnVtYmVyIG5ld2l0ZW1vZmY7CiAKIAls cGFnZW9wID0gKEJUUGFnZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQb2ludGVyKHBhZ2UpOwogCkBA IC02OTksNiArNzY3LDggQEAgX2J0X2ZpbmRpbnNlcnRsb2MoUmVsYXRpb24gcmVsLAogCiAJaWYg KGl0dXBfa2V5LT5oZWFwa2V5c3BhY2UpCiAJeworCQlib29sCQlkZWR1cHVuaXF1ZSA9IGZhbHNl OworCiAJCS8qCiAJCSAqIElmIHdlJ3JlIGluc2VydGluZyBpbnRvIGEgdW5pcXVlIGluZGV4LCB3 ZSBtYXkgaGF2ZSB0byB3YWxrIHJpZ2h0CiAJCSAqIHRocm91Z2ggbGVhZiBwYWdlcyB0byBmaW5k IHRoZSBvbmUgbGVhZiBwYWdlIHRoYXQgd2UgbXVzdCBpbnNlcnQgb24KQEAgLTcxMiw5ICs3ODIs MjUgQEAgX2J0X2ZpbmRpbnNlcnRsb2MoUmVsYXRpb24gcmVsLAogCQkgKiB0dXBsZSBiZWxvbmdz IG9uLiAgVGhlIGhlYXAgVElEIGF0dHJpYnV0ZSBmb3IgbmV3IHR1cGxlIChzY2FudGlkKQogCQkg KiBjb3VsZCBmb3JjZSB1cyB0byBpbnNlcnQgb24gYSBzaWJsaW5nIHBhZ2UsIHRob3VnaCB0aGF0 IHNob3VsZCBiZQogCQkgKiB2ZXJ5IHJhcmUgaW4gcHJhY3RpY2UuCisJCSAqCisJCSAqIGNoZWNr aW5ndW5pcXVlIGluc2VydGVycyB0aGF0IGVuY291bnRlciBhIGR1cGxpY2F0ZSB3aWxsIGFwcGx5 CisJCSAqIGRlZHVwbGljYXRpb24gd2hlbiBpdCBsb29rcyBsaWtlIHRoZXJlIHdpbGwgYmUgYSBw YWdlIHNwbGl0LCBidXQKKwkJICogdGhlcmUgaXMgbm8gTFBfREVBRCBnYXJiYWdlIG9uIHRoZSBs ZWFmIHBhZ2UgdG8gdmFjdXVtIGF3YXkgKG9yCisJCSAqIHRoZXJlIHdhc24ndCBlbm91Z2ggc3Bh Y2UgZnJlZWQgYnkgTFBfREVBRCBjbGVhbnVwKS4gIFRoaXMKKwkJICogY29tcGxlbWVudHMgdGhl IG9wcG9ydHVuaXN0aWMgTFBfREVBRCB2YWN1dW1pbmcgbWVjaGFuaXNtLiAgVGhlCisJCSAqIGhp Z2ggbGV2ZWwgZ29hbCBpcyB0byBhdm9pZCBwYWdlIHNwbGl0cyBjYXVzZWQgYnkgbmV3LCB1bmNo YW5nZWQKKwkJICogdmVyc2lvbnMgb2YgZXhpc3RpbmcgbG9naWNhbCByb3dzIGFsdG9nZXRoZXIu ICBTZWUgbmJ0cmVlL1JFQURNRQorCQkgKiBmb3IgZnVsbCBkZXRhaWxzLgogCQkgKi8KIAkJaWYg KGNoZWNraW5ndW5pcXVlKQogCQl7CisJCQlpZiAoaW5zZXJ0c3RhdGUtPmxvdyA8IGluc2VydHN0 YXRlLT5zdHJpY3RoaWdoKQorCQkJeworCQkJCS8qIEVuY291bnRlcmVkIGEgZHVwbGljYXRlIGlu IF9idF9jaGVja191bmlxdWUoKSAqLworCQkJCUFzc2VydChpbnNlcnRzdGF0ZS0+Ym91bmRzX3Zh bGlkKTsKKwkJCQlkZWR1cHVuaXF1ZSA9IHRydWU7CisJCQl9CisKIAkJCWZvciAoOzspCiAJCQl7 CiAJCQkJLyoKQEAgLTc0MSwxOCArODI3LDM3IEBAIF9idF9maW5kaW5zZXJ0bG9jKFJlbGF0aW9u IHJlbCwKIAkJCQkvKiBVcGRhdGUgbG9jYWwgc3RhdGUgYWZ0ZXIgc3RlcHBpbmcgcmlnaHQgKi8K IAkJCQlwYWdlID0gQnVmZmVyR2V0UGFnZShpbnNlcnRzdGF0ZS0+YnVmKTsKIAkJCQlscGFnZW9w ID0gKEJUUGFnZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQb2ludGVyKHBhZ2UpOworCQkJCS8qIEFz c3VtZSBkdXBsaWNhdGVzIChoZWxwZnVsIHdoZW4gaW5pdGlhbCBwYWdlIGlzIGVtcHR5KSAqLwor CQkJCWRlZHVwdW5pcXVlID0gdHJ1ZTsKIAkJCX0KIAkJfQogCiAJCS8qCiAJCSAqIElmIHRoZSB0 YXJnZXQgcGFnZSBpcyBmdWxsLCBzZWUgaWYgd2UgY2FuIG9idGFpbiBlbm91Z2ggc3BhY2UgYnkK LQkJICogZXJhc2luZyBMUF9ERUFEIGl0ZW1zCisJCSAqIGVyYXNpbmcgTFBfREVBRCBpdGVtcy4g IElmIHRoYXQgZG9lc24ndCB3b3JrIG91dCwgdHJ5IHRvIG9idGFpbgorCQkgKiBlbm91Z2ggZnJl ZSBzcGFjZSB0byBhdm9pZCBhIHBhZ2Ugc3BsaXQgYnkgZGVkdXBsaWNhdGluZyBleGlzdGluZwor CQkgKiBpdGVtcyAoaWYgZGVkdXBsaWNhdGlvbiBpcyBzYWZlKS4KIAkJICovCi0JCWlmIChQYWdl R2V0RnJlZVNwYWNlKHBhZ2UpIDwgaW5zZXJ0c3RhdGUtPml0ZW1zeiAmJgotCQkJUF9IQVNfR0FS QkFHRShscGFnZW9wKSkKKwkJaWYgKFBhZ2VHZXRGcmVlU3BhY2UocGFnZSkgPCBpbnNlcnRzdGF0 ZS0+aXRlbXN6KQogCQl7Ci0JCQlfYnRfdmFjdXVtX29uZV9wYWdlKHJlbCwgaW5zZXJ0c3RhdGUt PmJ1ZiwgaGVhcFJlbCk7Ci0JCQlpbnNlcnRzdGF0ZS0+Ym91bmRzX3ZhbGlkID0gZmFsc2U7CisJ CQlpZiAoUF9IQVNfR0FSQkFHRShscGFnZW9wKSkKKwkJCXsKKwkJCQlfYnRfdmFjdXVtX29uZV9w YWdlKHJlbCwgaW5zZXJ0c3RhdGUtPmJ1ZiwgaGVhcFJlbCk7CisJCQkJaW5zZXJ0c3RhdGUtPmJv dW5kc192YWxpZCA9IGZhbHNlOworCisJCQkJLyogTWlnaHQgYXMgd2VsbCBhc3N1bWUgZHVwbGlj YXRlcyBpZiBjaGVja2luZ3VuaXF1ZSAqLworCQkJCWRlZHVwdW5pcXVlID0gdHJ1ZTsKKwkJCX0K KworCQkJaWYgKGl0dXBfa2V5LT5zYWZlZGVkdXAgJiYgQlRHZXRVc2VEZWR1cChyZWwpICYmCisJ CQkJUGFnZUdldEZyZWVTcGFjZShwYWdlKSA8IGluc2VydHN0YXRlLT5pdGVtc3ogJiYKKwkJCQko IWNoZWNraW5ndW5pcXVlIHx8IGRlZHVwdW5pcXVlKSkKKwkJCXsKKwkJCQlfYnRfZGVkdXBfb25l X3BhZ2UocmVsLCBpbnNlcnRzdGF0ZS0+YnVmLCBoZWFwUmVsLAorCQkJCQkJCQkgICBpbnNlcnRz dGF0ZS0+aXR1cCwgaW5zZXJ0c3RhdGUtPml0ZW1zeiwKKwkJCQkJCQkJICAgY2hlY2tpbmd1bmlx dWUpOworCQkJCWluc2VydHN0YXRlLT5ib3VuZHNfdmFsaWQgPSBmYWxzZTsKKwkJCX0KIAkJfQog CX0KIAllbHNlCkBAIC04MzQsNyArOTM5LDM2IEBAIF9idF9maW5kaW5zZXJ0bG9jKFJlbGF0aW9u IHJlbCwKIAlBc3NlcnQoUF9SSUdIVE1PU1QobHBhZ2VvcCkgfHwKIAkJICAgX2J0X2NvbXBhcmUo cmVsLCBpdHVwX2tleSwgcGFnZSwgUF9ISUtFWSkgPD0gMCk7CiAKLQlyZXR1cm4gX2J0X2JpbnNy Y2hfaW5zZXJ0KHJlbCwgaW5zZXJ0c3RhdGUpOworCW5ld2l0ZW1vZmYgPSBfYnRfYmluc3JjaF9p bnNlcnQocmVsLCBpbnNlcnRzdGF0ZSk7CisKKwlpZiAoaW5zZXJ0c3RhdGUtPnBvc3RpbmdvZmYg PT0gLTEpCisJeworCQkvKgorCQkgKiBUaGVyZSBpcyBhbiBvdmVybGFwcGluZyBwb3N0aW5nIGxp c3QgdHVwbGUgd2l0aCBpdHMgTFBfREVBRCBiaXQKKwkJICogc2V0LiAgX2J0X2luc2VydG9ucGco KSBjYW5ub3QgaGFuZGxlIHRoaXMsIHNvIGRlbGV0ZSBhbGwgTFBfREVBRAorCQkgKiBpdGVtcyBl YXJseS4gIFRoaXMgaXMgdGhlIG9ubHkgY2FzZSB3aGVyZSBMUF9ERUFEIGRlbGV0ZXMgaGFwcGVu CisJCSAqIGV2ZW4gdGhvdWdoIGEgcGFnZSBzcGxpdCB3b3VsZG4ndCB0YWtlIHBsYWNlIGlmIHdl IHdlbnQgc3RyYWlnaHQgdG8KKwkJICogdGhlIF9idF9pbnNlcnRvbnBnKCkgY2FsbC4KKwkJICoK KwkJICogQ2FsbCBfYnRfZGVkdXBfb25lX3BhZ2UoKSBpbnN0ZWFkIG9mIF9idF92YWN1dW1fb25l X3BhZ2UoKSB0byBmb3JjZQorCQkgKiBkZWxldGVzICh0aGlzIGF2b2lkcyByZWx5aW5nIG9uIHRo ZSBCVFBfSEFTX0dBUkJBR0UgaGludCBmbGFnLAorCQkgKiB3aGljaCBtaWdodCBiZSBmYWxzZWx5 IHVuc2V0KS4gIENhbGwgY2FuJ3QgYWN0dWFsbHkgZGVkdXAgaXRlbXMsCisJCSAqIHNpbmNlIHdl IHBhc3MgYSBuZXdpdGVtc3ogb2YgMC4KKwkJICovCisJCV9idF9kZWR1cF9vbmVfcGFnZShyZWws IGluc2VydHN0YXRlLT5idWYsIGhlYXBSZWwsIGluc2VydHN0YXRlLT5pdHVwLAorCQkJCQkJICAg MCwgdHJ1ZSk7CisKKwkJLyoKKwkJICogRG8gbmV3IGJpbmFyeSBzZWFyY2guICBOZXcgaW5zZXJ0 IGxvY2F0aW9uIGNhbm5vdCBvdmVybGFwIHdpdGggYW55CisJCSAqIHBvc3RpbmcgbGlzdCBub3cu CisJCSAqLworCQlpbnNlcnRzdGF0ZS0+Ym91bmRzX3ZhbGlkID0gZmFsc2U7CisJCWluc2VydHN0 YXRlLT5wb3N0aW5nb2ZmID0gMDsKKwkJbmV3aXRlbW9mZiA9IF9idF9iaW5zcmNoX2luc2VydChy ZWwsIGluc2VydHN0YXRlKTsKKwkJQXNzZXJ0KGluc2VydHN0YXRlLT5wb3N0aW5nb2ZmID09IDAp OworCX0KKworCXJldHVybiBuZXdpdGVtb2ZmOwogfQogCiAvKgpAQCAtOTAwLDEwICsxMDM0LDEy IEBAIF9idF9zdGVwcmlnaHQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRl LCBCVFN0YWNrIHN0YWNrKQogICoKICAqCQlUaGlzIHJlY3Vyc2l2ZSBwcm9jZWR1cmUgZG9lcyB0 aGUgZm9sbG93aW5nIHRoaW5nczoKICAqCisgKgkJCSsgIGlmIHBvc3RpbmdvZmYgIT0gMCwgc3Bs aXRzIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCB0dXBsZQorICoJCQkgICAoc2luY2UgaXQgb3Zlcmxh cHMgd2l0aCBuZXcgJ2l0dXAnIHR1cGxlKS4KICAqCQkJKyAgaWYgbmVjZXNzYXJ5LCBzcGxpdHMg dGhlIHRhcmdldCBwYWdlLCB1c2luZyAnaXR1cF9rZXknIGZvcgogICoJCQkgICBzdWZmaXggdHJ1 bmNhdGlvbiBvbiBsZWFmIHBhZ2VzIChjYWxsZXIgcGFzc2VzIE5VTEwgZm9yCiAgKgkJCSAgIG5v bi1sZWFmIHBhZ2VzKS4KLSAqCQkJKyAgaW5zZXJ0cyB0aGUgdHVwbGUuCisgKgkJCSsgIGluc2Vy dHMgdGhlIG5ldyB0dXBsZSAobWlnaHQgYmUgc3BsaXQgZnJvbSBwb3N0aW5nIGxpc3QpLgogICoJ CQkrICBpZiB0aGUgcGFnZSB3YXMgc3BsaXQsIHBvcHMgdGhlIHBhcmVudCBzdGFjaywgYW5kIGZp bmRzIHRoZQogICoJCQkgICByaWdodCBwbGFjZSB0byBpbnNlcnQgdGhlIG5ldyBjaGlsZCBwb2lu dGVyIChieSB3YWxraW5nCiAgKgkJCSAgIHJpZ2h0IHVzaW5nIGluZm9ybWF0aW9uIHN0b3JlZCBp biB0aGUgcGFyZW50IHN0YWNrKS4KQEAgLTkzMSwxMSArMTA2NywxNSBAQCBfYnRfaW5zZXJ0b25w ZyhSZWxhdGlvbiByZWwsCiAJCQkgICBCVFN0YWNrIHN0YWNrLAogCQkJICAgSW5kZXhUdXBsZSBp dHVwLAogCQkJICAgT2Zmc2V0TnVtYmVyIG5ld2l0ZW1vZmYsCisJCQkgICBpbnQgcG9zdGluZ29m ZiwKIAkJCSAgIGJvb2wgc3BsaXRfb25seV9wYWdlKQogewogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdl T3BhcXVlIGxwYWdlb3A7CiAJU2l6ZQkJaXRlbXN6OworCUluZGV4VHVwbGUJb3Bvc3Rpbmc7CisJ SW5kZXhUdXBsZQlvcmlnaXR1cCA9IE5VTEw7CisJSW5kZXhUdXBsZQlucG9zdGluZyA9IE5VTEw7 CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCWxwYWdlb3AgPSAoQlRQYWdlT3BhcXVl KSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSk7CkBAIC05NDksNiArMTA4OSw3IEBAIF9idF9p bnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwKIAlBc3NlcnQoUF9JU0xFQUYobHBhZ2VvcCkgfHwKIAkJ ICAgQlRyZWVUdXBsZUdldE5BdHRzKGl0dXAsIHJlbCkgPD0KIAkJICAgSW5kZXhSZWxhdGlvbkdl dE51bWJlck9mS2V5QXR0cmlidXRlcyhyZWwpKTsKKwlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bvc3Rp bmcoaXR1cCkpOwogCiAJLyogVGhlIGNhbGxlciBzaG91bGQndmUgZmluaXNoZWQgYW55IGluY29t cGxldGUgc3BsaXRzIGFscmVhZHkuICovCiAJaWYgKFBfSU5DT01QTEVURV9TUExJVChscGFnZW9w KSkKQEAgLTk1OSw2ICsxMTAwLDM0IEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwKIAlp dGVtc3ogPSBNQVhBTElHTihpdGVtc3opOwkvKiBiZSBzYWZlLCBQYWdlQWRkSXRlbSB3aWxsIGRv IHRoaXMgYnV0IHdlCiAJCQkJCQkJCSAqIG5lZWQgdG8gYmUgY29uc2lzdGVudCAqLwogCisJLyoK KwkgKiBEbyB3ZSBuZWVkIHRvIHNwbGl0IGFuIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCBpdGVtPwor CSAqLworCWlmIChwb3N0aW5nb2ZmICE9IDApCisJeworCQlJdGVtSWQJCWl0ZW1pZCA9IFBhZ2VH ZXRJdGVtSWQocGFnZSwgbmV3aXRlbW9mZik7CisKKwkJLyoKKwkJICogVGhlIG5ldyB0dXBsZSBp cyBhIGR1cGxpY2F0ZSB3aXRoIGEgaGVhcCBUSUQgdGhhdCBmYWxscyBpbnNpZGUgdGhlCisJCSAq IHJhbmdlIG9mIGFuIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCB0dXBsZSBvbiBhIGxlYWYgcGFnZS4g IFByZXBhcmUgdG8KKwkJICogc3BsaXQgYW4gZXhpc3RpbmcgcG9zdGluZyBsaXN0LiAgT3Zlcndy aXRpbmcgdGhlIHBvc3RpbmcgbGlzdCB3aXRoCisJCSAqIGl0cyBwb3N0LXNwbGl0IHZlcnNpb24g aXMgdHJlYXRlZCBhcyBhbiBleHRyYSBzdGVwIGluIGVpdGhlciB0aGUKKwkJICogaW5zZXJ0IG9y IHBhZ2Ugc3BsaXQgY3JpdGljYWwgc2VjdGlvbi4KKwkJICovCisJCUFzc2VydChQX0lTTEVBRihs cGFnZW9wKSAmJiAhSXRlbUlkSXNEZWFkKGl0ZW1pZCkpOworCQlBc3NlcnQoaXR1cF9rZXktPmhl YXBrZXlzcGFjZSAmJiBpdHVwX2tleS0+c2FmZWRlZHVwKTsKKwkJb3Bvc3RpbmcgPSAoSW5kZXhU dXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaXRlbWlkKTsKKworCQkvKiB1c2UgYSBtdXRhYmxlIGNv cHkgb2YgaXR1cCBhcyBvdXIgaXR1cCBmcm9tIGhlcmUgb24gKi8KKwkJb3JpZ2l0dXAgPSBpdHVw OworCQlpdHVwID0gQ29weUluZGV4VHVwbGUob3JpZ2l0dXApOworCQlucG9zdGluZyA9IF9idF9z d2FwX3Bvc3RpbmcoaXR1cCwgb3Bvc3RpbmcsIHBvc3RpbmdvZmYpOworCQkvKiBpdHVwIG5vdyBj b250YWlucyByaWdodG1vc3QvbWF4IFRJRCBmcm9tIG9wb3N0aW5nICovCisKKwkJLyogQWx0ZXIg b2Zmc2V0IHNvIHRoYXQgbmV3aXRlbSBnb2VzIGFmdGVyIHBvc3RpbmcgbGlzdCAqLworCQluZXdp dGVtb2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChuZXdpdGVtb2ZmKTsKKwl9CisKIAkvKgogCSAqIERv IHdlIG5lZWQgdG8gc3BsaXQgdGhlIHBhZ2UgdG8gZml0IHRoZSBpdGVtIG9uIGl0PwogCSAqCkBA IC05OTEsNyArMTE2MCw4IEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwKIAkJCQkgQmxv Y2tOdW1iZXJJc1ZhbGlkKFJlbGF0aW9uR2V0VGFyZ2V0QmxvY2socmVsKSkpKTsKIAogCQkvKiBz cGxpdCB0aGUgYnVmZmVyIGludG8gbGVmdCBhbmQgcmlnaHQgaGFsdmVzICovCi0JCXJidWYgPSBf YnRfc3BsaXQocmVsLCBpdHVwX2tleSwgYnVmLCBjYnVmLCBuZXdpdGVtb2ZmLCBpdGVtc3osIGl0 dXApOworCQlyYnVmID0gX2J0X3NwbGl0KHJlbCwgaXR1cF9rZXksIGJ1ZiwgY2J1ZiwgbmV3aXRl bW9mZiwgaXRlbXN6LCBpdHVwLAorCQkJCQkJIG9yaWdpdHVwLCBucG9zdGluZywgcG9zdGluZ29m Zik7CiAJCVByZWRpY2F0ZUxvY2tQYWdlU3BsaXQocmVsLAogCQkJCQkJCSAgIEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZiksCiAJCQkJCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIocmJ1ZikpOwpA QCAtMTA2Niw2ICsxMjM2LDkgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLAogCQkvKiBE byB0aGUgdXBkYXRlLiAgTm8gZXJlcG9ydChFUlJPUikgdW50aWwgY2hhbmdlcyBhcmUgbG9nZ2Vk ICovCiAJCVNUQVJUX0NSSVRfU0VDVElPTigpOwogCisJCWlmIChwb3N0aW5nb2ZmICE9IDApCisJ CQltZW1jcHkob3Bvc3RpbmcsIG5wb3N0aW5nLCBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShucG9z dGluZykpKTsKKwogCQlpZiAoIV9idF9wZ2FkZHR1cChwYWdlLCBpdGVtc3osIGl0dXAsIG5ld2l0 ZW1vZmYpKQogCQkJZWxvZyhQQU5JQywgImZhaWxlZCB0byBhZGQgbmV3IGl0ZW0gdG8gYmxvY2sg JXUgaW4gaW5kZXggXCIlc1wiIiwKIAkJCQkgaXR1cF9ibGtubywgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsKSk7CkBAIC0xMTE1LDggKzEyODgsMTkgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRp b24gcmVsLAogCQkJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFy ICopICZ4bHJlYywgU2l6ZU9mQnRyZWVJbnNlcnQpOwogCi0JCQlpZiAoUF9JU0xFQUYobHBhZ2Vv cCkpCisJCQlpZiAoUF9JU0xFQUYobHBhZ2VvcCkgJiYgcG9zdGluZ29mZiA9PSAwKQorCQkJewor CQkJCS8qIFNpbXBsZSBsZWFmIGluc2VydCAqLwogCQkJCXhsaW5mbyA9IFhMT0dfQlRSRUVfSU5T RVJUX0xFQUY7CisJCQl9CisJCQllbHNlIGlmIChwb3N0aW5nb2ZmICE9IDApCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBMZWFmIGluc2VydCB3aXRoIHBvc3RpbmcgbGlzdCBzcGxpdC4gIE11c3QgaW5j bHVkZQorCQkJCSAqIHBvc3RpbmdvZmYgZmllbGQgYmVmb3JlIG5ld2l0ZW0vb3JpZ25ld2l0ZW0u CisJCQkJICovCisJCQkJeGxpbmZvID0gWExPR19CVFJFRV9JTlNFUlRfUE9TVDsKKwkJCX0KIAkJ CWVsc2UKIAkJCXsKIAkJCQkvKgpAQCAtMTEzOSw2ICsxMzIzLDcgQEAgX2J0X2luc2VydG9ucGco UmVsYXRpb24gcmVsLAogCQkJCXhsbWV0YS5vbGRlc3RfYnRwb194YWN0ID0gbWV0YWQtPmJ0bV9v bGRlc3RfYnRwb194YWN0OwogCQkJCXhsbWV0YS5sYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVz ID0KIAkJCQkJbWV0YWQtPmJ0bV9sYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVzOworCQkJCXhs bWV0YS5zYWZlZGVkdXAgPSBtZXRhZC0+YnRtX3NhZmVkZWR1cDsKIAogCQkJCVhMb2dSZWdpc3Rl ckJ1ZmZlcigyLCBtZXRhYnVmLCBSRUdCVUZfV0lMTF9JTklUIHwgUkVHQlVGX1NUQU5EQVJEKTsK IAkJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDIsIChjaGFyICopICZ4bG1ldGEsIHNpemVvZih4bF9i dHJlZV9tZXRhZGF0YSkpOwpAQCAtMTE0Nyw3ICsxMzMyLDI3IEBAIF9idF9pbnNlcnRvbnBnKFJl bGF0aW9uIHJlbCwKIAkJCX0KIAogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAsIGJ1ZiwgUkVHQlVG X1NUQU5EQVJEKTsKLQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgKGNoYXIgKikgaXR1cCwgSW5k ZXhUdXBsZVNpemUoaXR1cCkpOworCQkJaWYgKHBvc3RpbmdvZmYgPT0gMCkKKwkJCXsKKwkJCQkv KiBTaW1wbGUsIGNvbW1vbiBjYXNlIC0tIGxvZyBpdHVwIGZyb20gY2FsbGVyICovCisJCQkJWExv Z1JlZ2lzdGVyQnVmRGF0YSgwLCAoY2hhciAqKSBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVwKSk7 CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJbnNlcnQgd2l0aCBwb3N0aW5n IGxpc3Qgc3BsaXQgKFhMT0dfQlRSRUVfSU5TRVJUX1BPU1QKKwkJCQkgKiByZWNvcmQpIGNhc2Uu CisJCQkJICoKKwkJCQkgKiBMb2cgcG9zdGluZ29mZi4gIEFsc28gbG9nIG9yaWdpdHVwLCBub3Qg aXR1cC4gIFJFRE8gcm91dGluZQorCQkJCSAqIG11c3QgcmVjb25zdHJ1Y3QgZmluYWwgaXR1cCAo YXMgd2VsbCBhcyBucG9zdGluZykgdXNpbmcKKwkJCQkgKiBfYnRfc3dhcF9wb3N0aW5nKCkuCisJ CQkJICovCisJCQkJdWludDE2CQl1cG9zdGluZ29mZiA9IHBvc3RpbmdvZmY7CisKKwkJCQlYTG9n UmVnaXN0ZXJCdWZEYXRhKDAsIChjaGFyICopICZ1cG9zdGluZ29mZiwgc2l6ZW9mKHVpbnQxNikp OworCQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgKGNoYXIgKikgb3JpZ2l0dXAsCisJCQkJCQkJ CQlJbmRleFR1cGxlU2l6ZShvcmlnaXR1cCkpOworCQkJfQogCiAJCQlyZWNwdHIgPSBYTG9nSW5z ZXJ0KFJNX0JUUkVFX0lELCB4bGluZm8pOwogCkBAIC0xMTg5LDYgKzEzOTQsMTQgQEAgX2J0X2lu c2VydG9ucGcoUmVsYXRpb24gcmVsLAogCQkJX2J0X2dldHJvb3RoZWlnaHQocmVsKSA+PSBCVFJF RV9GQVNUUEFUSF9NSU5fTEVWRUwpCiAJCQlSZWxhdGlvblNldFRhcmdldEJsb2NrKHJlbCwgY2Fj aGVkQmxvY2spOwogCX0KKworCS8qIGJlIHRpZHkgKi8KKwlpZiAocG9zdGluZ29mZiAhPSAwKQor CXsKKwkJLyogaXR1cCBpcyBhY3R1YWxseSBhIG1vZGlmaWVkIGNvcHkgb2YgY2FsbGVyJ3Mgb3Jp Z2luYWwgKi8KKwkJcGZyZWUobnBvc3RpbmcpOworCQlwZnJlZShpdHVwKTsKKwl9CiB9CiAKIC8q CkBAIC0xMjA0LDEyICsxNDE3LDI0IEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwKICAq CQlUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgdGhlIElOQ09NUExFVEVfU1BMSVQgZmxhZyBvbiBp dCwgYW5kCiAgKgkJcmVsZWFzZSB0aGUgYnVmZmVyLgogICoKKyAqCQlvcmlnbmV3aXRlbSwgbnBv c3RpbmcsIGFuZCBwb3N0aW5nb2ZmIGFyZSBuZWVkZWQgd2hlbiBhbiBpbnNlcnQgb2YKKyAqCQlv cmlnbmV3aXRlbSByZXN1bHRzIGluIGJvdGggYSBwb3N0aW5nIGxpc3Qgc3BsaXQgYW5kIGEgcGFn ZSBzcGxpdC4KKyAqCQlUaGVzZSBleHRyYSBwb3N0aW5nIGxpc3Qgc3BsaXQgZGV0YWlscyBhcmUg dXNlZCBoZXJlIGluIHRoZSBzYW1lCisgKgkJd2F5IGFzIHRoZXkgYXJlIHVzZWQgaW4gdGhlIG1v cmUgY29tbW9uIGNhc2Ugd2hlcmUgYSBwb3N0aW5nIGxpc3QKKyAqCQlzcGxpdCBkb2VzIG5vdCBj b2luY2lkZSB3aXRoIGEgcGFnZSBzcGxpdC4gIFdlIG5lZWQgdG8gZGVhbCB3aXRoCisgKgkJcG9z dGluZyBsaXN0IHNwbGl0cyBkaXJlY3RseSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBldmVyeXRo aW5nCisgKgkJdGhhdCBmb2xsb3dzIGZyb20gdGhlIGluc2VydCBvZiBvcmlnbmV3aXRlbSBpcyBo YW5kbGVkIGFzIGEgc2luZ2xlCisgKgkJYXRvbWljIG9wZXJhdGlvbiAodGhvdWdoIGNhbGxlcidz IGluc2VydCBvZiBhIG5ldyBwaXZvdC9kb3dubGluaworICoJCWludG8gcGFyZW50IHBhZ2Ugd2ls bCBzdGlsbCBiZSBhIHNlcGFyYXRlIG9wZXJhdGlvbikuICBTZWUKKyAqCQluYnRyZWUvUkVBRE1F IGZvciBkZXRhaWxzIG9uIHRoZSBkZXNpZ24gb2YgcG9zdGluZyBsaXN0IHNwbGl0cy4KKyAqCiAg KgkJUmV0dXJucyB0aGUgbmV3IHJpZ2h0IHNpYmxpbmcgb2YgYnVmLCBwaW5uZWQgYW5kIHdyaXRl LWxvY2tlZC4KICAqCQlUaGUgcGluIGFuZCBsb2NrIG9uIGJ1ZiBhcmUgbWFpbnRhaW5lZC4KICAq Lwogc3RhdGljIEJ1ZmZlcgogX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGl0 dXBfa2V5LCBCdWZmZXIgYnVmLCBCdWZmZXIgY2J1ZiwKLQkJICBPZmZzZXROdW1iZXIgbmV3aXRl bW9mZiwgU2l6ZSBuZXdpdGVtc3osIEluZGV4VHVwbGUgbmV3aXRlbSkKKwkJICBPZmZzZXROdW1i ZXIgbmV3aXRlbW9mZiwgU2l6ZSBuZXdpdGVtc3osIEluZGV4VHVwbGUgbmV3aXRlbSwKKwkJICBJ bmRleFR1cGxlIG9yaWduZXdpdGVtLCBJbmRleFR1cGxlIG5wb3N0aW5nLCB1aW50MTYgcG9zdGlu Z29mZikKIHsKIAlCdWZmZXIJCXJidWY7CiAJUGFnZQkJb3JpZ3BhZ2U7CkBAIC0xMjI5LDYgKzE0 NTQsNyBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1 ZmZlciBidWYsIEJ1ZmZlciBjYnVmLAogCU9mZnNldE51bWJlciBsZWZ0b2ZmLAogCQkJCXJpZ2h0 b2ZmOwogCU9mZnNldE51bWJlciBmaXJzdHJpZ2h0OworCU9mZnNldE51bWJlciBvcmlncGFnZXBv c3RpbmdvZmY7CiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsKIAlPZmZzZXROdW1iZXIgaTsKIAlib29s CQluZXdpdGVtb25sZWZ0LApAQCAtMTI5OCw2ICsxNTI0LDM0IEBAIF9idF9zcGxpdChSZWxhdGlv biByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwgQnVmZmVyIGNidWYsCiAJ UGFnZVNldExTTihsZWZ0cGFnZSwgUGFnZUdldExTTihvcmlncGFnZSkpOwogCWlzbGVhZiA9IFBf SVNMRUFGKG9vcGFxdWUpOwogCisJLyoKKwkgKiBEZXRlcm1pbmUgcGFnZSBvZmZzZXQgbnVtYmVy IG9mIGV4aXN0aW5nIG92ZXJsYXBwZWQtd2l0aC1vcmlnbmV3aXRlbQorCSAqIHBvc3RpbmcgbGlz dCB3aGVuIGl0IGlzIG5lY2Vzc2FyeSB0byBwZXJmb3JtIGEgcG9zdGluZyBsaXN0IHNwbGl0IGlu CisJICogcGFzc2luZy4gIE5vdGUgdGhhdCBuZXdpdGVtIHdhcyBhbHJlYWR5IGNoYW5nZWQgYnkg Y2FsbGVyIChuZXdpdGVtIG5vCisJICogbG9uZ2VyIGhhcyB0aGUgb3JpZ25ld2l0ZW0gVElEKS4K KwkgKgorCSAqIFRoaXMgcGFnZSBvZmZzZXQgbnVtYmVyIChvcmlncGFnZXBvc3RpbmdvZmYpIHdp bGwgYmUgdXNlZCB0byBwcmV0ZW5kCisJICogdGhhdCB0aGUgcG9zdGluZyBzcGxpdCBoYXMgYWxy ZWFkeSB0YWtlbiBwbGFjZSwgZXZlbiB0aG91Z2ggdGhlCisJICogcmVxdWlyZWQgbW9kaWZpY2F0 aW9ucyB0byBvcmlncGFnZSB3b24ndCBvY2N1ciB1bnRpbCB3ZSByZWFjaCB0aGUKKwkgKiBjcml0 aWNhbCBzZWN0aW9uLiAgVGhlIGxhc3RsZWZ0IGFuZCBmaXJzdHJpZ2h0IHR1cGxlcyBvZiBvdXIg cGFnZSBzcGxpdAorCSAqIHBvaW50IHNob3VsZCwgaW4gZWZmZWN0LCBjb21lIGZyb20gYW4gaW1h Z2luYXJ5IHZlcnNpb24gb2Ygb3JpZ3BhZ2UKKwkgKiB0aGF0IGhhcyB0aGUgbnBvc3RpbmcgdHVw bGUgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgcG9zdGluZyBsaXN0IHR1cGxlLgorCSAqCisJICog Tm90ZTogX2J0X2ZpbmRzcGxpdGxvYygpIHNob3VsZCBoYXZlIGNvbXBlbnNhdGVkIGZvciBjb2lu Y2lkaW5nIHBvc3RpbmcKKwkgKiBsaXN0IHNwbGl0cyBpbiBqdXN0IHRoZSBzYW1lIHdheSwgYXQg bGVhc3QgaW4gdGhlb3J5LiAgSXQgZG9lc24ndAorCSAqIGJvdGhlciB3aXRoIHRoYXQsIHRob3Vn aC4gIEluIHByYWN0aWNlIGl0IHdvbid0IGFmZmVjdCBpdHMgY2hvaWNlIG9mCisJICogc3BsaXQg cG9pbnQuCisJICovCisJb3JpZ3BhZ2Vwb3N0aW5nb2ZmID0gSW52YWxpZE9mZnNldE51bWJlcjsK KwlpZiAocG9zdGluZ29mZiAhPSAwKQorCXsKKwkJQXNzZXJ0KGlzbGVhZik7CisJCUFzc2VydChJ dGVtUG9pbnRlckNvbXBhcmUoJm9yaWduZXdpdGVtLT50X3RpZCwKKwkJCQkJCQkJICAmbmV3aXRl bS0+dF90aWQpIDwgMCk7CisJCUFzc2VydChCVHJlZVR1cGxlSXNQb3N0aW5nKG5wb3N0aW5nKSk7 CisJCW9yaWdwYWdlcG9zdGluZ29mZiA9IE9mZnNldE51bWJlclByZXYobmV3aXRlbW9mZik7CisJ fQorCiAJLyoKIAkgKiBUaGUgImhpZ2gga2V5IiBmb3IgdGhlIG5ldyBsZWZ0IHBhZ2Ugd2lsbCBi ZSB0aGUgZmlyc3Qga2V5IHRoYXQncyBnb2luZwogCSAqIHRvIGdvIGludG8gdGhlIG5ldyByaWdo dCBwYWdlLCBvciBhIHRydW5jYXRlZCB2ZXJzaW9uIGlmIHRoaXMgaXMgYSBsZWFmCkBAIC0xMzM1 LDYgKzE1ODksOCBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9r ZXksIEJ1ZmZlciBidWYsIEJ1ZmZlciBjYnVmLAogCQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKG9y aWdwYWdlLCBmaXJzdHJpZ2h0KTsKIAkJaXRlbXN6ID0gSXRlbUlkR2V0TGVuZ3RoKGl0ZW1pZCk7 CiAJCWl0ZW0gPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ob3JpZ3BhZ2UsIGl0ZW1pZCk7CisJ CWlmIChmaXJzdHJpZ2h0ID09IG9yaWdwYWdlcG9zdGluZ29mZikKKwkJCWl0ZW0gPSBucG9zdGlu ZzsKIAl9CiAKIAkvKgpAQCAtMTM2OCw2ICsxNjI0LDggQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJl bCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLCBCdWZmZXIgY2J1ZiwKIAkJCUFz c2VydChsYXN0bGVmdG9mZiA+PSBQX0ZJUlNUREFUQUtFWShvb3BhcXVlKSk7CiAJCQlpdGVtaWQg PSBQYWdlR2V0SXRlbUlkKG9yaWdwYWdlLCBsYXN0bGVmdG9mZik7CiAJCQlsYXN0bGVmdCA9IChJ bmRleFR1cGxlKSBQYWdlR2V0SXRlbShvcmlncGFnZSwgaXRlbWlkKTsKKwkJCWlmIChsYXN0bGVm dG9mZiA9PSBvcmlncGFnZXBvc3RpbmdvZmYpCisJCQkJbGFzdGxlZnQgPSBucG9zdGluZzsKIAkJ fQogCiAJCUFzc2VydChsYXN0bGVmdCAhPSBpdGVtKTsKQEAgLTEzODMsNiArMTY0MSw3IEBAIF9i dF9zcGxpdChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1Ziwg QnVmZmVyIGNidWYsCiAJICovCiAJbGVmdG9mZiA9IFBfSElLRVk7CiAKKwlBc3NlcnQoQlRyZWVU dXBsZUlzUGl2b3QobGVmdGhpa2V5KSB8fCAhaXR1cF9rZXktPmhlYXBrZXlzcGFjZSk7CiAJQXNz ZXJ0KEJUcmVlVHVwbGVHZXROQXR0cyhsZWZ0aGlrZXksIHJlbCkgPiAwKTsKIAlBc3NlcnQoQlRy ZWVUdXBsZUdldE5BdHRzKGxlZnRoaWtleSwgcmVsKSA8PSBpbmRua2V5YXR0cyk7CiAJaWYgKFBh Z2VBZGRJdGVtKGxlZnRwYWdlLCAoSXRlbSkgbGVmdGhpa2V5LCBpdGVtc3osIGxlZnRvZmYsCkBA IC0xNDQ3LDYgKzE3MDYsNyBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQg aXR1cF9rZXksIEJ1ZmZlciBidWYsIEJ1ZmZlciBjYnVmLAogCQlpdGVtaWQgPSBQYWdlR2V0SXRl bUlkKG9yaWdwYWdlLCBQX0hJS0VZKTsKIAkJaXRlbXN6ID0gSXRlbUlkR2V0TGVuZ3RoKGl0ZW1p ZCk7CiAJCWl0ZW0gPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ob3JpZ3BhZ2UsIGl0ZW1pZCk7 CisJCUFzc2VydChCVHJlZVR1cGxlSXNQaXZvdChpdGVtKSB8fCAhaXR1cF9rZXktPmhlYXBrZXlz cGFjZSk7CiAJCUFzc2VydChCVHJlZVR1cGxlR2V0TkF0dHMoaXRlbSwgcmVsKSA+IDApOwogCQlB c3NlcnQoQlRyZWVUdXBsZUdldE5BdHRzKGl0ZW0sIHJlbCkgPD0gaW5kbmtleWF0dHMpOwogCQlp ZiAoUGFnZUFkZEl0ZW0ocmlnaHRwYWdlLCAoSXRlbSkgaXRlbSwgaXRlbXN6LCByaWdodG9mZiwK QEAgLTE0NzUsOCArMTczNSwxNiBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNl cnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsIEJ1ZmZlciBjYnVmLAogCQlpdGVtc3ogPSBJdGVtSWRH ZXRMZW5ndGgoaXRlbWlkKTsKIAkJaXRlbSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShvcmln cGFnZSwgaXRlbWlkKTsKIAorCQkvKiByZXBsYWNlIG9yaWdpbmFsIGl0ZW0gd2l0aCBucG9zdGlu ZyBkdWUgdG8gcG9zdGluZyBzcGxpdD8gKi8KKwkJaWYgKGkgPT0gb3JpZ3BhZ2Vwb3N0aW5nb2Zm KQorCQl7CisJCQlBc3NlcnQoQlRyZWVUdXBsZUlzUG9zdGluZyhpdGVtKSk7CisJCQlBc3NlcnQo aXRlbXN6ID09IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKG5wb3N0aW5nKSkpOworCQkJaXRlbSA9 IG5wb3N0aW5nOworCQl9CisKIAkJLyogZG9lcyBuZXcgaXRlbSBiZWxvbmcgYmVmb3JlIHRoaXMg b25lPyAqLwotCQlpZiAoaSA9PSBuZXdpdGVtb2ZmKQorCQllbHNlIGlmIChpID09IG5ld2l0ZW1v ZmYpCiAJCXsKIAkJCWlmIChuZXdpdGVtb25sZWZ0KQogCQkJewpAQCAtMTY0NSw4ICsxOTEzLDEy IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVy IGJ1ZiwgQnVmZmVyIGNidWYsCiAJCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLmxldmVs ID0gcm9wYXF1ZS0+YnRwby5sZXZlbDsKKwkJLyogU2VlIGNvbW1lbnRzIGJlbG93IG9uIG5ld2l0 ZW0sIG9yaWduZXdpdGVtLCBhbmQgcG9zdGluZyBsaXN0cyAqLwogCQl4bHJlYy5maXJzdHJpZ2h0 ID0gZmlyc3RyaWdodDsKIAkJeGxyZWMubmV3aXRlbW9mZiA9IG5ld2l0ZW1vZmY7CisJCXhscmVj LnBvc3RpbmdvZmYgPSAwOworCQlpZiAocG9zdGluZ29mZiAhPSAwICYmIG9yaWdwYWdlcG9zdGlu Z29mZiA8IGZpcnN0cmlnaHQpCisJCQl4bHJlYy5wb3N0aW5nb2ZmID0gcG9zdGluZ29mZjsKIAog CQlYTG9nQmVnaW5JbnNlcnQoKTsKIAkJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMs IFNpemVPZkJ0cmVlU3BsaXQpOwpAQCAtMTY2NSwxMSArMTkzNywzNSBAQCBfYnRfc3BsaXQoUmVs YXRpb24gcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsIEJ1ZmZlciBjYnVm LAogCQkgKiBiZWNhdXNlIGl0J3MgaW5jbHVkZWQgd2l0aCBhbGwgdGhlIG90aGVyIGl0ZW1zIG9u IHRoZSByaWdodCBwYWdlLikKIAkJICogU2hvdyB0aGUgbmV3IGl0ZW0gYXMgYmVsb25naW5nIHRv IHRoZSBsZWZ0IHBhZ2UgYnVmZmVyLCBzbyB0aGF0IGl0CiAJCSAqIGlzIG5vdCBzdG9yZWQgaWYg WExvZ0luc2VydCBkZWNpZGVzIGl0IG5lZWRzIGEgZnVsbC1wYWdlIGltYWdlIG9mCi0JCSAqIHRo ZSBsZWZ0IHBhZ2UuICBXZSBzdG9yZSB0aGUgb2Zmc2V0IGFueXdheSwgdGhvdWdoLCB0byBzdXBw b3J0Ci0JCSAqIGFyY2hpdmUgY29tcHJlc3Npb24gb2YgdGhlc2UgcmVjb3Jkcy4KKwkJICogdGhl IGxlZnQgcGFnZS4gIFdlIGFsd2F5cyBzdG9yZSBuZXdpdGVtb2ZmIGluIHRoZSByZWNvcmQsIHRo b3VnaC4KKwkJICoKKwkJICogVGhlIGRldGFpbHMgYXJlIHNvbWV0aW1lcyBzbGlnaHRseSBkaWZm ZXJlbnQgZm9yIHBhZ2Ugc3BsaXRzIHRoYXQKKwkJICogY29pbmNpZGUgd2l0aCBhIHBvc3Rpbmcg bGlzdCBzcGxpdC4gIElmIGJvdGggdGhlIHJlcGxhY2VtZW50CisJCSAqIHBvc3RpbmcgbGlzdCBh bmQgbmV3aXRlbSBnbyBvbiB0aGUgcmlnaHQgcGFnZSwgdGhlbiB3ZSBkb24ndCBuZWVkCisJCSAq IHRvIGxvZyBhbnl0aGluZyBleHRyYSwganVzdCBsaWtlIHRoZSBzaW1wbGUgIW5ld2l0ZW1vbmxl ZnQKKwkJICogbm8tcG9zdGluZy1zcGxpdCBjYXNlIChwb3N0aW5nb2ZmIGlzIHNldCB0byB6ZXJv IGluIHRoZSBXQUwgcmVjb3JkLAorCQkgKiBzbyByZWNvdmVyeSBkb2Vzbid0IG5lZWQgdG8gcHJv Y2VzcyBhIHBvc3RpbmcgbGlzdCBzcGxpdCBhdCBhbGwpLgorCQkgKiBPdGhlcndpc2UsIHdlIHNl dCBwb3N0aW5nb2ZmIGFuZCBsb2cgb3JpZ25ld2l0ZW0gaW5zdGVhZCBvZgorCQkgKiBuZXdpdGVt LCBkZXNwaXRlIGhhdmluZyBhY3R1YWxseSBpbnNlcnRlZCBuZXdpdGVtLiAgUkVETyByb3V0aW5l CisJCSAqIG11c3QgcmVjb25zdHJ1Y3QgbnBvc3RpbmcgYW5kIG5ld2l0ZW0gdXNpbmcgX2J0X3N3 YXBfcG9zdGluZygpLgorCQkgKgorCQkgKiBOb3RlOiBJdCdzIHBvc3NpYmxlIHRoYXQgb3VyIHBh Z2Ugc3BsaXQgcG9pbnQgaXMgdGhlIHBvaW50IHRoYXQKKwkJICogbWFrZXMgdGhlIHBvc3Rpbmcg bGlzdCBsYXN0bGVmdCBhbmQgbmV3aXRlbSBmaXJzdHJpZ2h0LiAgVGhpcyBpcworCQkgKiB0aGUg b25seSBjYXNlIHdoZXJlIHdlIGxvZyBvcmlnbmV3aXRlbS9uZXdpdGVtIGRlc3BpdGUgbmV3aXRl bQorCQkgKiBnb2luZyBvbiB0aGUgcmlnaHQgcGFnZS4gIElmIFhMb2dJbnNlcnQgZGVjaWRlcyB0 aGF0IGl0IGNhbiBvbWl0CisJCSAqIG9yaWduZXdpdGVtIGR1ZSB0byBsb2dnaW5nIGEgZnVsbC1w YWdlIGltYWdlIG9mIHRoZSBsZWZ0IHBhZ2UsCisJCSAqIGV2ZXJ5dGhpbmcgc3RpbGwgd29ya3Mg b3V0LCBzaW5jZSByZWNvdmVyeSBvbmx5IG5lZWRzIHRvIGxvZworCQkgKiBvcmlnbmV3aXRlbSBm b3IgaXRlbXMgb24gdGhlIGxlZnQgcGFnZSAoanVzdCBsaWtlIHRoZSByZWd1bGFyCisJCSAqIG5l d2l0ZW0tbG9nZ2VkIGNhc2UpLgogCQkgKi8KLQkJaWYgKG5ld2l0ZW1vbmxlZnQpCisJCWlmIChu ZXdpdGVtb25sZWZ0ICYmIHhscmVjLnBvc3RpbmdvZmYgPT0gMCkKIAkJCVhMb2dSZWdpc3RlckJ1 ZkRhdGEoMCwgKGNoYXIgKikgbmV3aXRlbSwgTUFYQUxJR04obmV3aXRlbXN6KSk7CisJCWVsc2Ug aWYgKHhscmVjLnBvc3RpbmdvZmYgIT0gMCkKKwkJeworCQkJQXNzZXJ0KG5ld2l0ZW1vbmxlZnQg fHwgZmlyc3RyaWdodCA9PSBuZXdpdGVtb2ZmKTsKKwkJCUFzc2VydChNQVhBTElHTihuZXdpdGVt c3opID09IEluZGV4VHVwbGVTaXplKG9yaWduZXdpdGVtKSk7CisJCQlYTG9nUmVnaXN0ZXJCdWZE YXRhKDAsIChjaGFyICopIG9yaWduZXdpdGVtLCBNQVhBTElHTihuZXdpdGVtc3opKTsKKwkJfQog CiAJCS8qIExvZyB0aGUgbGVmdCBwYWdlJ3MgbmV3IGhpZ2gga2V5ICovCiAJCWl0ZW1pZCA9IFBh Z2VHZXRJdGVtSWQob3JpZ3BhZ2UsIFBfSElLRVkpOwpAQCAtMTgyOSw3ICsyMTI1LDcgQEAgX2J0 X2luc2VydF9wYXJlbnQoUmVsYXRpb24gcmVsLAogCiAJCS8qIFJlY3Vyc2l2ZWx5IGluc2VydCBp bnRvIHRoZSBwYXJlbnQgKi8KIAkJX2J0X2luc2VydG9ucGcocmVsLCBOVUxMLCBwYnVmLCBidWYs IHN0YWNrLT5idHNfcGFyZW50LAotCQkJCQkgICBuZXdfaXRlbSwgc3RhY2stPmJ0c19vZmZzZXQg KyAxLAorCQkJCQkgICBuZXdfaXRlbSwgc3RhY2stPmJ0c19vZmZzZXQgKyAxLCAwLAogCQkJCQkg ICBpc19vbmx5KTsKIAogCQkvKiBiZSB0aWR5ICovCkBAIC0yMTg1LDYgKzI0ODEsNyBAQCBfYnRf bmV3cm9vdChSZWxhdGlvbiByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIgcmJ1ZikKIAkJbWQuZmFz dGxldmVsID0gbWV0YWQtPmJ0bV9sZXZlbDsKIAkJbWQub2xkZXN0X2J0cG9feGFjdCA9IG1ldGFk LT5idG1fb2xkZXN0X2J0cG9feGFjdDsKIAkJbWQubGFzdF9jbGVhbnVwX251bV9oZWFwX3R1cGxl cyA9IG1ldGFkLT5idG1fbGFzdF9jbGVhbnVwX251bV9oZWFwX3R1cGxlczsKKwkJbWQuc2FmZWRl ZHVwID0gbWV0YWQtPmJ0bV9zYWZlZGVkdXA7CiAKIAkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgyLCAo Y2hhciAqKSAmbWQsIHNpemVvZih4bF9idHJlZV9tZXRhZGF0YSkpOwogCkBAIC0yMjY1LDcgKzI1 NjIsNyBAQCBfYnRfcGdhZGR0dXAoUGFnZSBwYWdlLAogc3RhdGljIHZvaWQKIF9idF92YWN1dW1f b25lX3BhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmZmVyLCBSZWxhdGlvbiBoZWFwUmVsKQog ewotCU9mZnNldE51bWJlciBkZWxldGFibGVbTWF4T2Zmc2V0TnVtYmVyXTsKKwlPZmZzZXROdW1i ZXIgZGVsZXRhYmxlW01heEluZGV4VHVwbGVzUGVyUGFnZV07CiAJaW50CQkJbmRlbGV0YWJsZSA9 IDA7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQltaW5vZmYsCkBAIC0yMjk4LDYgKzI1OTUs NiBAQCBfYnRfdmFjdXVtX29uZV9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZmZlciwgUmVs YXRpb24gaGVhcFJlbCkKIAkgKiBOb3RlOiBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgTFBfREVBRCBp dGVtcywgdGhlbiB0aGUgcGFnZSdzCiAJICogQlRQX0hBU19HQVJCQUdFIGhpbnQgYml0IGlzIGZh bHNlbHkgc2V0LiAgV2UgZG8gbm90IGJvdGhlciBleHBlbmRpbmcgYQogCSAqIHNlcGFyYXRlIHdy aXRlIHRvIGNsZWFyIGl0LCBob3dldmVyLiAgV2Ugd2lsbCBjbGVhciBpdCB3aGVuIHdlIHNwbGl0 Ci0JICogdGhlIHBhZ2UuCisJICogdGhlIHBhZ2UsIG9yIHdoZW4gZGVkdXBsaWNhdGlvbiBydW5z LgogCSAqLwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdl LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwppbmRleCBmMDVjYmU3NDY3 Li43MmIzOTIxMTE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBh Z2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpAQCAtMjQsNiAr MjQsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9u YnR4bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3Mv dHJhbnNhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hs b2dpbnNlcnQuaCIKQEAgLTM3LDYgKzM4LDggQEAgc3RhdGljIEJUTWV0YVBhZ2VEYXRhICpfYnRf Z2V0bWV0YShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmKTsKIHN0YXRpYyBib29sIF9idF9t YXJrX3BhZ2VfaGFsZmRlYWQoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBCVFN0YWNrIHN0YWNr KTsKIHN0YXRpYyBib29sIF9idF91bmxpbmtfaGFsZmRlYWRfcGFnZShSZWxhdGlvbiByZWwsIEJ1 ZmZlciBsZWFmYnVmLAogCQkJCQkJCQkJIGJvb2wgKnJpZ2h0c2liX2VtcHR5KTsKK3N0YXRpYyBU cmFuc2FjdGlvbklkIF9idF94aWRfaG9yaXpvbihSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXBS ZWwsIFBhZ2UgcGFnZSwKKwkJCQkJCQkJCSBPZmZzZXROdW1iZXIgKmRlbGV0YWJsZSwgaW50IG5k ZWxldGFibGUpOwogc3RhdGljIGJvb2wgX2J0X2xvY2tfYnJhbmNoX3BhcmVudChSZWxhdGlvbiBy ZWwsIEJsb2NrTnVtYmVyIGNoaWxkLAogCQkJCQkJCQkgICBCVFN0YWNrIHN0YWNrLCBCdWZmZXIg KnRvcHBhcmVudCwgT2Zmc2V0TnVtYmVyICp0b3BvZmYsCiAJCQkJCQkJCSAgIEJsb2NrTnVtYmVy ICp0YXJnZXQsIEJsb2NrTnVtYmVyICpyaWdodHNpYik7CkBAIC00Nyw3ICs1MCw4IEBAIHN0YXRp YyB2b2lkIF9idF9sb2dfcmV1c2VfcGFnZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGJsa25v LAogICoJX2J0X2luaXRtZXRhcGFnZSgpIC0tIEZpbGwgYSBwYWdlIGJ1ZmZlciB3aXRoIGEgY29y cmVjdCBtZXRhcGFnZSBpbWFnZQogICovCiB2b2lkCi1fYnRfaW5pdG1ldGFwYWdlKFBhZ2UgcGFn ZSwgQmxvY2tOdW1iZXIgcm9vdGJrbnVtLCB1aW50MzIgbGV2ZWwpCitfYnRfaW5pdG1ldGFwYWdl KFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgcm9vdGJrbnVtLCB1aW50MzIgbGV2ZWwsCisJCQkJIGJv b2wgc2FmZWRlZHVwKQogewogCUJUTWV0YVBhZ2VEYXRhICptZXRhZDsKIAlCVFBhZ2VPcGFxdWUg bWV0YW9wYXF1ZTsKQEAgLTYzLDYgKzY3LDcgQEAgX2J0X2luaXRtZXRhcGFnZShQYWdlIHBhZ2Us IEJsb2NrTnVtYmVyIHJvb3Ria251bSwgdWludDMyIGxldmVsKQogCW1ldGFkLT5idG1fZmFzdGxl dmVsID0gbGV2ZWw7CiAJbWV0YWQtPmJ0bV9vbGRlc3RfYnRwb194YWN0ID0gSW52YWxpZFRyYW5z YWN0aW9uSWQ7CiAJbWV0YWQtPmJ0bV9sYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVzID0gLTEu MDsKKwltZXRhZC0+YnRtX3NhZmVkZWR1cCA9IHNhZmVkZWR1cDsKIAogCW1ldGFvcGFxdWUgPSAo QlRQYWdlT3BhcXVlKSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSk7CiAJbWV0YW9wYXF1ZS0+ YnRwb19mbGFncyA9IEJUUF9NRVRBOwpAQCAtMTAyLDYgKzEwNyw5IEBAIF9idF91cGdyYWRlbWV0 YXBhZ2UoUGFnZSBwYWdlKQogCW1ldGFkLT5idG1fdmVyc2lvbiA9IEJUUkVFX05PVkFDX1ZFUlNJ T047CiAJbWV0YWQtPmJ0bV9vbGRlc3RfYnRwb194YWN0ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7 CiAJbWV0YWQtPmJ0bV9sYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVzID0gLTEuMDsKKwkvKiBP bmx5IGEgUkVJTkRFWCBjYW4gc2V0IHRoaXMgZmllbGQgKi8KKwlBc3NlcnQoIW1ldGFkLT5idG1f c2FmZWRlZHVwKTsKKwltZXRhZC0+YnRtX3NhZmVkZWR1cCA9IGZhbHNlOwogCiAJLyogQWRqdXN0 IHBkX2xvd2VyIChzZWUgX2J0X2luaXRtZXRhcGFnZSgpIGZvciBkZXRhaWxzKSAqLwogCSgoUGFn ZUhlYWRlcikgcGFnZSktPnBkX2xvd2VyID0KQEAgLTIxMyw2ICsyMjEsNyBAQCBfYnRfdXBkYXRl X21ldGFfY2xlYW51cF9pbmZvKFJlbGF0aW9uIHJlbCwgVHJhbnNhY3Rpb25JZCBvbGRlc3RCdHBv WGFjdCwKIAkJbWQuZmFzdGxldmVsID0gbWV0YWQtPmJ0bV9mYXN0bGV2ZWw7CiAJCW1kLm9sZGVz dF9idHBvX3hhY3QgPSBvbGRlc3RCdHBvWGFjdDsKIAkJbWQubGFzdF9jbGVhbnVwX251bV9oZWFw X3R1cGxlcyA9IG51bUhlYXBUdXBsZXM7CisJCW1kLnNhZmVkZWR1cCA9IG1ldGFkLT5idG1fc2Fm ZWRlZHVwOwogCiAJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgKGNoYXIgKikgJm1kLCBzaXplb2Yo eGxfYnRyZWVfbWV0YWRhdGEpKTsKIApAQCAtMjc0LDYgKzI4Myw4IEBAIF9idF9nZXRyb290KFJl bGF0aW9uIHJlbCwgaW50IGFjY2VzcykKIAkJQXNzZXJ0KG1ldGFkLT5idG1fbWFnaWMgPT0gQlRS RUVfTUFHSUMpOwogCQlBc3NlcnQobWV0YWQtPmJ0bV92ZXJzaW9uID49IEJUUkVFX01JTl9WRVJT SU9OKTsKIAkJQXNzZXJ0KG1ldGFkLT5idG1fdmVyc2lvbiA8PSBCVFJFRV9WRVJTSU9OKTsKKwkJ QXNzZXJ0KCFtZXRhZC0+YnRtX3NhZmVkZWR1cCB8fAorCQkJICAgbWV0YWQtPmJ0bV92ZXJzaW9u ID4gQlRSRUVfTk9WQUNfVkVSU0lPTik7CiAJCUFzc2VydChtZXRhZC0+YnRtX3Jvb3QgIT0gUF9O T05FKTsKIAogCQlyb290Ymxrbm8gPSBtZXRhZC0+YnRtX2Zhc3Ryb290OwpAQCAtMzk0LDYgKzQw NSw3IEBAIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgaW50IGFjY2VzcykKIAkJCW1kLmZhc3Rs ZXZlbCA9IDA7CiAJCQltZC5vbGRlc3RfYnRwb194YWN0ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7 CiAJCQltZC5sYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVzID0gLTEuMDsKKwkJCW1kLnNhZmVk ZWR1cCA9IG1ldGFkLT5idG1fc2FmZWRlZHVwOwogCiAJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDIs IChjaGFyICopICZtZCwgc2l6ZW9mKHhsX2J0cmVlX21ldGFkYXRhKSk7CiAKQEAgLTYxOCwyMiAr NjMwLDMzIEBAIF9idF9nZXRyb290aGVpZ2h0KFJlbGF0aW9uIHJlbCkKIAlBc3NlcnQobWV0YWQt PmJ0bV9tYWdpYyA9PSBCVFJFRV9NQUdJQyk7CiAJQXNzZXJ0KG1ldGFkLT5idG1fdmVyc2lvbiA+ PSBCVFJFRV9NSU5fVkVSU0lPTik7CiAJQXNzZXJ0KG1ldGFkLT5idG1fdmVyc2lvbiA8PSBCVFJF RV9WRVJTSU9OKTsKKwlBc3NlcnQoIW1ldGFkLT5idG1fc2FmZWRlZHVwIHx8IG1ldGFkLT5idG1f dmVyc2lvbiA+IEJUUkVFX05PVkFDX1ZFUlNJT04pOwogCUFzc2VydChtZXRhZC0+YnRtX2Zhc3Ry b290ICE9IFBfTk9ORSk7CiAKIAlyZXR1cm4gbWV0YWQtPmJ0bV9mYXN0bGV2ZWw7CiB9CiAKIC8q Ci0gKglfYnRfaGVhcGtleXNwYWNlKCkgLS0gaXMgaGVhcCBUSUQgYmVpbmcgdHJlYXRlZCBhcyBh IGtleT8KKyAqCV9idF9tZXRhdmVyc2lvbigpIC0tIEdldCB2ZXJzaW9uL3N0YXR1cyBpbmZvIGZy b20gbWV0YXBhZ2UuCisgKgorICoJCVNldHMgY2FsbGVyJ3MgKmhlYXBrZXlzcGFjZSBhbmQgKnNh ZmVkZWR1cCBhcmd1bWVudHMgdXNpbmcgZGF0YSBmcm9tCisgKgkJdGhlIEItVHJlZSBtZXRhcGFn ZSAoY291bGQgYmUgbG9jYWxseS1jYWNoZWQgdmVyc2lvbikuICBUaGlzCisgKgkJaW5mb3JtYXRp b24gbmVlZHMgdG8gYmUgc3Rhc2hlZCBpbiBpbnNlcnRpb24gc2NhbmtleSwgc28gd2UgcHJvdmlk ZSBhCisgKgkJc2luZ2xlIGZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyBib3RoIGF0IG9uY2UuCiAgKgog ICoJCVRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJ1bGVzIHRoYXQgbXVzdCBiZSB1c2Vk IHRvIGRlc2NlbmQgYQogICoJCWJ0cmVlLiAgVmVyc2lvbiA0IGluZGV4ZXMgdHJlYXQgaGVhcCBU SUQgYXMgYSB0aWVicmVha2VyIGF0dHJpYnV0ZS4KICAqCQlwZ191cGdyYWRlJ2QgdmVyc2lvbiAz IGluZGV4ZXMgbmVlZCBleHRyYSBzdGVwcyB0byBwcmVzZXJ2ZSByZWFzb25hYmxlCiAgKgkJcGVy Zm9ybWFuY2Ugd2hlbiBpbnNlcnRpbmcgYSBuZXcgQlRTY2FuSW5zZXJ0LXdpc2UgZHVwbGljYXRl IHR1cGxlCiAgKgkJYW1vbmcgbWFueSBsZWFmIHBhZ2VzIGFscmVhZHkgZnVsbCBvZiBzdWNoIGR1 cGxpY2F0ZXMuCisgKgorICoJCUFsc28gc2V0cyBmaWVsZCB0aGF0IGluZGljYXRlcyB0byBjYWxs ZXIgd2hldGhlciBvciBub3QgaXQgaXMgc2FmZSB0bworICoJCWFwcGx5IGRlZHVwbGljYXRpb24g d2l0aGluIGluZGV4LiAgTm90ZSB0aGF0IHdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24KKyAqCQl0 aGF0IGJ0bV9zYWZlZGVkdXAgd2lsbCBiZSB6ZXJvJ2VkIG9uIGhlYXBrZXlzcGFjZSBpbmRleGVz IHRoYXQgd2VyZQorICoJCXBnX3VwZ3JhZGUnZCBmcm9tIFBvc3RncmVzIDEyLgogICovCi1ib29s Ci1fYnRfaGVhcGtleXNwYWNlKFJlbGF0aW9uIHJlbCkKK3ZvaWQKK19idF9tZXRhdmVyc2lvbihS ZWxhdGlvbiByZWwsIGJvb2wgKmhlYXBrZXlzcGFjZSwgYm9vbCAqc2FmZWRlZHVwKQogewogCUJU TWV0YVBhZ2VEYXRhICptZXRhZDsKIApAQCAtNjUxLDEwICs2NzQsMTEgQEAgX2J0X2hlYXBrZXlz cGFjZShSZWxhdGlvbiByZWwpCiAJCSAqLwogCQlpZiAobWV0YWQtPmJ0bV9yb290ID09IFBfTk9O RSkKIAkJewotCQkJdWludDMyCQlidG1fdmVyc2lvbiA9IG1ldGFkLT5idG1fdmVyc2lvbjsKKwkJ CSpoZWFwa2V5c3BhY2UgPSBtZXRhZC0+YnRtX3ZlcnNpb24gPiBCVFJFRV9OT1ZBQ19WRVJTSU9O OworCQkJKnNhZmVkZWR1cCA9IG1ldGFkLT5idG1fc2FmZWRlZHVwOwogCiAJCQlfYnRfcmVsYnVm KHJlbCwgbWV0YWJ1Zik7Ci0JCQlyZXR1cm4gYnRtX3ZlcnNpb24gPiBCVFJFRV9OT1ZBQ19WRVJT SU9OOworCQkJcmV0dXJuOwogCQl9CiAKIAkJLyoKQEAgLTY3OCw5ICs3MDIsMTEgQEAgX2J0X2hl YXBrZXlzcGFjZShSZWxhdGlvbiByZWwpCiAJQXNzZXJ0KG1ldGFkLT5idG1fbWFnaWMgPT0gQlRS RUVfTUFHSUMpOwogCUFzc2VydChtZXRhZC0+YnRtX3ZlcnNpb24gPj0gQlRSRUVfTUlOX1ZFUlNJ T04pOwogCUFzc2VydChtZXRhZC0+YnRtX3ZlcnNpb24gPD0gQlRSRUVfVkVSU0lPTik7CisJQXNz ZXJ0KCFtZXRhZC0+YnRtX3NhZmVkZWR1cCB8fCBtZXRhZC0+YnRtX3ZlcnNpb24gPiBCVFJFRV9O T1ZBQ19WRVJTSU9OKTsKIAlBc3NlcnQobWV0YWQtPmJ0bV9mYXN0cm9vdCAhPSBQX05PTkUpOwog Ci0JcmV0dXJuIG1ldGFkLT5idG1fdmVyc2lvbiA+IEJUUkVFX05PVkFDX1ZFUlNJT047CisJKmhl YXBrZXlzcGFjZSA9IG1ldGFkLT5idG1fdmVyc2lvbiA+IEJUUkVFX05PVkFDX1ZFUlNJT047CisJ KnNhZmVkZWR1cCA9IG1ldGFkLT5idG1fc2FmZWRlZHVwOwogfQogCiAvKgpAQCAtOTY0LDI4ICs5 OTAsODggQEAgX2J0X3BhZ2VfcmVjeWNsYWJsZShQYWdlIHBhZ2UpCiAgKiBEZWxldGUgaXRlbShz KSBmcm9tIGEgYnRyZWUgbGVhZiBwYWdlIGR1cmluZyBWQUNVVU0uCiAgKgogICogVGhpcyByb3V0 aW5lIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIGhhcyBhIHN1cGVyLWV4Y2x1c2l2ZSB3cml0ZSBs b2NrIG9uCi0gKiB0aGUgYnVmZmVyLiAgQWxzbywgdGhlIGdpdmVuIGRlbGV0YWJsZSBhcnJheSAq bXVzdCogYmUgc29ydGVkIGluIGFzY2VuZGluZwotICogb3JkZXIuCisgKiB0aGUgYnVmZmVyLiAg QWxzbywgdGhlIGdpdmVuIGRlbGV0YWJsZSBhbmQgdXBkYXRhYmxlIGFycmF5cyAqbXVzdCogYmUK KyAqIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuCisgKgorICogUm91dGluZSBkZWFscyB3aXRo IGRlbGV0aW5nIFRJRHMgd2hlbiBzb21lIChidXQgbm90IGFsbCkgb2YgdGhlIGhlYXAgVElEcwor ICogaW4gYW4gZXhpc3RpbmcgcG9zdGluZyBsaXN0IGl0ZW0gYXJlIHRvIGJlIHJlbW92ZWQgYnkg VkFDVVVNLiAgVGhpcyB3b3JrcworICogYnkgdXBkYXRpbmcvb3ZlcndyaXRpbmcgYW4gZXhpc3Rp bmcgaXRlbSB3aXRoIGNhbGxlcidzIG5ldyB2ZXJzaW9uIG9mIHRoZQorICogaXRlbSAoYSB2ZXJz aW9uIHRoYXQgbGFja3MgdGhlIFRJRHMgdGhhdCBhcmUgdG8gYmUgZGVsZXRlZCkuCiAgKgogICog V2UgcmVjb3JkIFZBQ1VVTXMgYW5kIGItdHJlZSBkZWxldGVzIGRpZmZlcmVudGx5IGluIFdBTC4g IERlbGV0ZXMgbXVzdAogICogZ2VuZXJhdGUgdGhlaXIgb3duIGxhdGVzdFJlbW92ZWRYaWQgYnkg YWNjZXNzaW5nIHRoZSBoZWFwIGRpcmVjdGx5LCB3aGVyZWFzCi0gKiBWQUNVVU1zIHJlbHkgb24g dGhlIGluaXRpYWwgaGVhcCBzY2FuIHRha2luZyBjYXJlIG9mIGl0IGluZGlyZWN0bHkuCisgKiBW QUNVVU1zIHJlbHkgb24gdGhlIGluaXRpYWwgaGVhcCBzY2FuIHRha2luZyBjYXJlIG9mIGl0IGlu ZGlyZWN0bHkuICBBbHNvLAorICogb25seSBWQUNVVU0gY2FuIHBlcmZvcm0gZ3JhbnVsYXIgZGVs ZXRlcyBvZiBpbmRpdmlkdWFsIFRJRHMgaW4gcG9zdGluZyBsaXN0CisgKiB0dXBsZXMuCiAgKi8K IHZvaWQKIF9idF9kZWxpdGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAotCQkJ CQlPZmZzZXROdW1iZXIgKmRlbGV0YWJsZSwgaW50IG5kZWxldGFibGUpCisJCQkJCU9mZnNldE51 bWJlciAqZGVsZXRhYmxlLCBpbnQgbmRlbGV0YWJsZSwKKwkJCQkJT2Zmc2V0TnVtYmVyICp1cGRh dGFibGUsIEluZGV4VHVwbGUgKnVwZGF0ZWQsCisJCQkJCWludCBudXBkYXRhYmxlKQogewogCVBh Z2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKKwlJ bmRleFR1cGxlCWl0dXA7CisJU2l6ZQkJaXRlbXN6OworCWNoYXIJICAgKnVwZGF0ZWRidWYgPSBO VUxMOworCVNpemUJCXVwZGF0ZWRidWZsZW4gPSAwOwogCiAJLyogU2hvdWxkbid0IGJlIGNhbGxl ZCB1bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KLQlBc3NlcnQobmRlbGV0YWJsZSA+ IDApOworCUFzc2VydChuZGVsZXRhYmxlID4gMCB8fCBudXBkYXRhYmxlID4gMCk7CisKKwkvKiBY TE9HIHN0dWZmIC0tIGFsbG9jYXRlIGFuZCBmaWxsIGJ1ZmZlciBiZWZvcmUgY3JpdGljYWwgc2Vj dGlvbiAqLworCWlmIChudXBkYXRhYmxlID4gMCAmJiBSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCisJ eworCQlTaXplCQlvZmZzZXQgPSAwOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVwZGF0YWJs ZTsgaSsrKQorCQl7CisJCQlpdHVwID0gdXBkYXRlZFtpXTsKKwkJCWl0ZW1zeiA9IE1BWEFMSUdO KEluZGV4VHVwbGVTaXplKGl0dXApKTsKKwkJCXVwZGF0ZWRidWZsZW4gKz0gaXRlbXN6OworCQl9 CisKKwkJdXBkYXRlZGJ1ZiA9IHBhbGxvYyh1cGRhdGVkYnVmbGVuKTsKKwkJZm9yIChpbnQgaSA9 IDA7IGkgPCBudXBkYXRhYmxlOyBpKyspCisJCXsKKwkJCWl0dXAgPSB1cGRhdGVkW2ldOworCQkJ aXRlbXN6ID0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoaXR1cCkpOworCQkJbWVtY3B5KHVwZGF0 ZWRidWYgKyBvZmZzZXQsIGl0dXAsIGl0ZW1zeik7CisJCQlvZmZzZXQgKz0gaXRlbXN6OworCQl9 CisJfQogCiAJLyogTm8gZXJlcG9ydChFUlJPUikgdW50aWwgY2hhbmdlcyBhcmUgbG9nZ2VkICov CiAJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CiAKLQkvKiBGaXggdGhlIHBhZ2UgKi8KLQlQYWdlSW5k ZXhNdWx0aURlbGV0ZShwYWdlLCBkZWxldGFibGUsIG5kZWxldGFibGUpOworCS8qCisJICogSGFu ZGxlIHBvc3RpbmcgdHVwbGUgdXBkYXRlcy4KKwkgKgorCSAqIERlbGliZXJhdGVseSBkbyB0aGlz IGJlZm9yZSBoYW5kbGluZyBzaW1wbGUgZGVsZXRlcy4gIElmIHdlIGRpZCBpdCB0aGUKKwkgKiBv dGhlciB3YXkgYXJvdW5kIChpLmUuIFdBTCByZWNvcmQgb3JkZXIgLS0gc2ltcGxlIGRlbGV0ZXMg YmVmb3JlCisJICogdXBkYXRlcykgdGhlbiB3ZSdkIGhhdmUgdG8gbWFrZSBjb21wZW5zYXRpbmcg Y2hhbmdlcyB0byB0aGUgJ3VwZGF0YWJsZScKKwkgKiBhcnJheSBvZiBvZmZzZXQgbnVtYmVycy4K KwkgKgorCSAqIFBhZ2VJbmRleFR1cGxlT3ZlcndyaXRlKCkgd29uJ3QgdW5zZXQgZWFjaCBpdGVt J3MgTFBfREVBRCBiaXQgd2hlbiBpdAorCSAqIGhhcHBlbnMgdG8gYWxyZWFkeSBiZSBzZXQuICBB bHRob3VnaCB3ZSB1bnNldCB0aGUgQlRQX0hBU19HQVJCQUdFIHBhZ2UKKwkgKiBsZXZlbCBmbGFn LCB1bnNldHRpbmcgaW5kaXZpZHVhbCBMUF9ERUFEIGJpdHMgc2hvdWxkIHN0aWxsIGJlIGF2b2lk ZWQuCisJICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudXBkYXRhYmxlOyBpKyspCisJeworCQlP ZmZzZXROdW1iZXIgb2ZmbnVtID0gdXBkYXRhYmxlW2ldOworCisJCWl0dXAgPSB1cGRhdGVkW2ld OworCQlpdGVtc3ogPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShpdHVwKSk7CisKKwkJaWYgKCFQ YWdlSW5kZXhUdXBsZU92ZXJ3cml0ZShwYWdlLCBvZmZudW0sIChJdGVtKSBpdHVwLCBpdGVtc3op KQorCQkJZWxvZyhQQU5JQywgImNvdWxkIG5vdCB1cGRhdGUgcGFydGlhbGx5IGRlYWQgaXRlbSBp biBibG9jayAldSBvZiBpbmRleCBcIiVzXCIiLAorCQkJCSBCdWZmZXJHZXRCbG9ja051bWJlcihi dWYpLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKwl9CisKKwkvKiBOb3cgaGFuZGxl IHNpbXBsZSBkZWxldGVzIG9mIGVudGlyZSB0dXBsZXMgKi8KKwlpZiAobmRlbGV0YWJsZSA+IDAp CisJCVBhZ2VJbmRleE11bHRpRGVsZXRlKHBhZ2UsIGRlbGV0YWJsZSwgbmRlbGV0YWJsZSk7CiAK IAkvKgogCSAqIFdlIGNhbiBjbGVhciB0aGUgdmFjdXVtIGN5Y2xlIElEIHNpbmNlIHRoaXMgcGFn ZSBoYXMgY2VydGFpbmx5IGJlZW4KQEAgLTEwMDYsNyArMTA5Miw5IEBAIF9idF9kZWxpdGVtc192 YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCSAqIGxpbWl0ZWQsIHNpbmNlIHdlIG5l dmVyIGZhbHNlbHkgdW5zZXQgYW4gTFBfREVBRCBiaXQuICBXb3JrbG9hZHMgdGhhdAogCSAqIGFy ZSBwYXJ0aWN1bGFybHkgZGVwZW5kZW50IG9uIExQX0RFQUQgYml0cyBiZWluZyBzZXQgcXVpY2ts eSB3aWxsCiAJICogdXN1YWxseSBtYW5hZ2UgdG8gc2V0IHRoZSBCVFBfSEFTX0dBUkJBR0UgZmxh ZyBiZWZvcmUgdGhlIHBhZ2UgZmlsbHMgdXAKLQkgKiBhZ2FpbiBhbnl3YXkuCisJICogYWdhaW4g YW55d2F5LiAgRnVydGhlcm1vcmUsIGF0dGVtcHRpbmcgYSBkZWR1cGxpY2F0aW9uIHBhc3Mgd2ls bCByZW1vdmUKKwkgKiBhbGwgTFBfREVBRCBpdGVtcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRo ZSBCVFBfSEFTX0dBUkJBR0UgaGludCBiaXQKKwkgKiBpcyBzZXQgb3Igbm90LgogCSAqLwogCW9w YXF1ZS0+YnRwb19mbGFncyAmPSB+QlRQX0hBU19HQVJCQUdFOwogCkBAIC0xMDE5LDE4ICsxMTA3 LDIyIEBAIF9idF9kZWxpdGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCQl4 bF9idHJlZV92YWN1dW0geGxyZWNfdmFjdXVtOwogCiAJCXhscmVjX3ZhY3V1bS5uZGVsZXRlZCA9 IG5kZWxldGFibGU7CisJCXhscmVjX3ZhY3V1bS5udXBkYXRlZCA9IG51cGRhdGFibGU7CiAKIAkJ WExvZ0JlZ2luSW5zZXJ0KCk7CiAJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBidWYsIFJFR0JVRl9T VEFOREFSRCk7CiAJCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjX3ZhY3V1bSwgU2l6 ZU9mQnRyZWVWYWN1dW0pOwogCi0JCS8qCi0JCSAqIFRoZSBkZWxldGFibGUgYXJyYXkgaXMgbm90 IGluIHRoZSBidWZmZXIsIGJ1dCBwcmV0ZW5kIHRoYXQgaXQgaXMuCi0JCSAqIFdoZW4gWExvZ0lu c2VydCBzdG9yZXMgdGhlIHdob2xlIGJ1ZmZlciwgdGhlIGFycmF5IG5lZWQgbm90IGJlCi0JCSAq IHN0b3JlZCB0b28uCi0JCSAqLwotCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIChjaGFyICopIGRl bGV0YWJsZSwKLQkJCQkJCQluZGVsZXRhYmxlICogc2l6ZW9mKE9mZnNldE51bWJlcikpOworCQlp ZiAobmRlbGV0YWJsZSA+IDApCisJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIChjaGFyICopIGRl bGV0YWJsZSwKKwkJCQkJCQkJbmRlbGV0YWJsZSAqIHNpemVvZihPZmZzZXROdW1iZXIpKTsKKwor CQlpZiAobnVwZGF0YWJsZSA+IDApCisJCXsKKwkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgKGNo YXIgKikgdXBkYXRhYmxlLAorCQkJCQkJCQludXBkYXRhYmxlICogc2l6ZW9mKE9mZnNldE51bWJl cikpOworCQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCB1cGRhdGVkYnVmLCB1cGRhdGVkYnVmbGVu KTsKKwkJfQogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fQlRSRUVfSUQsIFhMT0dfQlRSRUVf VkFDVVVNKTsKIApAQCAtMTAzOCw2ICsxMTMwLDEwIEBAIF9idF9kZWxpdGVtc192YWN1dW0oUmVs YXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCX0KIAogCUVORF9DUklUX1NFQ1RJT04oKTsKKworCS8q IGNhbid0IGxlYWsgbWVtb3J5IGhlcmUgKi8KKwlpZiAodXBkYXRlZGJ1ZiAhPSBOVUxMKQorCQlw ZnJlZSh1cGRhdGVkYnVmKTsKIH0KIAogLyoKQEAgLTEwNTAsNiArMTE0Niw4IEBAIF9idF9kZWxp dGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogICogVGhpcyBpcyBuZWFybHkg dGhlIHNhbWUgYXMgX2J0X2RlbGl0ZW1zX3ZhY3V1bSBhcyBmYXIgYXMgd2hhdCBpdCBkb2VzIHRv CiAgKiB0aGUgcGFnZSwgYnV0IGl0IG5lZWRzIHRvIGdlbmVyYXRlIGl0cyBvd24gbGF0ZXN0UmVt b3ZlZFhpZCBieSBhY2Nlc3NpbmcKICAqIHRoZSBoZWFwLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSBS RURPIHJvdXRpbmUgdG8gZ2VuZXJhdGUgcmVjb3ZlcnkgY29uZmxpY3RzLgorICogQWxzbywgaXQg ZG9lc24ndCBoYW5kbGUgcG9zdGluZyBsaXN0IHR1cGxlcyB1bmxlc3MgdGhlIGVudGlyZSB0dXBs ZSBjYW4gYmUKKyAqIGRlbGV0ZWQgYXMgYSB3aG9sZSAoc2luY2UgdGhlcmUgaXMgb25seSBvbmUg TFBfREVBRCBiaXQgcGVyIGxpbmUgcG9pbnRlcikuCiAgKi8KIHZvaWQKIF9idF9kZWxpdGVtc19k ZWxldGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLApAQCAtMTA2NSw4ICsxMTYzLDcgQEAgX2J0 X2RlbGl0ZW1zX2RlbGV0ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAKIAlpZiAoWExvZ1N0 YW5kYnlJbmZvQWN0aXZlKCkgJiYgUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCQlsYXRlc3RSZW1v dmVkWGlkID0KLQkJCWluZGV4X2NvbXB1dGVfeGlkX2hvcml6b25fZm9yX3R1cGxlcyhyZWwsIGhl YXBSZWwsIGJ1ZiwKLQkJCQkJCQkJCQkJCSBkZWxldGFibGUsIG5kZWxldGFibGUpOworCQkJX2J0 X3hpZF9ob3Jpem9uKHJlbCwgaGVhcFJlbCwgcGFnZSwgZGVsZXRhYmxlLCBuZGVsZXRhYmxlKTsK IAogCS8qIE5vIGVyZXBvcnQoRVJST1IpIHVudGlsIGNoYW5nZXMgYXJlIGxvZ2dlZCAqLwogCVNU QVJUX0NSSVRfU0VDVElPTigpOwpAQCAtMTExMyw2ICsxMjEwLDgzIEBAIF9idF9kZWxpdGVtc19k ZWxldGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCUVORF9DUklUX1NFQ1RJT04oKTsKIH0K IAorLyoKKyAqIEdldCB0aGUgbGF0ZXN0UmVtb3ZlZFhpZCBmcm9tIHRoZSB0YWJsZSBlbnRyaWVz IHBvaW50ZWQgdG8gYnkgdGhlIG5vbi1waXZvdAorICogdHVwbGVzIGJlaW5nIGRlbGV0ZWQuCisg KgorICogVGhpcyBpcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgaW5kZXhfY29tcHV0ZV94aWRf aG9yaXpvbl9mb3JfdHVwbGVzKCkuCisgKiBJdCdzIG5lZWRlZCBiZWNhdXNlIGJ0cmVlIHR1cGxl cyBkb24ndCBhbHdheXMgc3RvcmUgdGFibGUgVElEIHVzaW5nIHRoZQorICogc3RhbmRhcmQgaW5k ZXggdHVwbGUgaGVhZGVyIGZpZWxkLgorICovCitzdGF0aWMgVHJhbnNhY3Rpb25JZAorX2J0X3hp ZF9ob3Jpem9uKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcFJlbCwgUGFnZSBwYWdlLAorCQkJ CU9mZnNldE51bWJlciAqZGVsZXRhYmxlLCBpbnQgbmRlbGV0YWJsZSkKK3sKKwlUcmFuc2FjdGlv bklkIGxhdGVzdFJlbW92ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlpbnQJCQlzcGFj ZW5odGlkczsKKwlpbnQJCQluaHRpZHM7CisJSXRlbVBvaW50ZXIgaHRpZHM7CisKKwkvKiBBcnJh eSB3aWxsIGdyb3cgaWZmIHRoZXJlIGFyZSBwb3N0aW5nIGxpc3QgdHVwbGVzIHRvIGNvbnNpZGVy ICovCisJc3BhY2VuaHRpZHMgPSBuZGVsZXRhYmxlOworCW5odGlkcyA9IDA7CisJaHRpZHMgPSAo SXRlbVBvaW50ZXIpIHBhbGxvYyhzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIHNwYWNlbmh0aWRz KTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5kZWxldGFibGU7IGkrKykKKwl7CisJCUl0ZW1JZAkJ aXRlbWlkOworCQlJbmRleFR1cGxlCWl0dXA7CisKKwkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChw YWdlLCBkZWxldGFibGVbaV0pOworCQlpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBh Z2UsIGl0ZW1pZCk7CisKKwkJQXNzZXJ0KEl0ZW1JZElzRGVhZChpdGVtaWQpKTsKKwkJQXNzZXJ0 KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSk7CisKKwkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5n KGl0dXApKQorCQl7CisJCQlpZiAobmh0aWRzICsgMSA+IHNwYWNlbmh0aWRzKQorCQkJeworCQkJ CXNwYWNlbmh0aWRzICo9IDI7CisJCQkJaHRpZHMgPSAoSXRlbVBvaW50ZXIpCisJCQkJCXJlcGFs bG9jKGh0aWRzLCBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIHNwYWNlbmh0aWRzKTsKKwkJCX0K KworCQkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmaXR1cC0+dF90aWQpKTsKKwkJCUl0ZW1Q b2ludGVyQ29weSgmaXR1cC0+dF90aWQsICZodGlkc1tuaHRpZHNdKTsKKwkJCW5odGlkcysrOwor CQl9CisJCWVsc2UKKwkJeworCQkJaW50CQkJbnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3Rp bmcoaXR1cCk7CisKKwkJCWlmIChuaHRpZHMgKyBucG9zdGluZyA+IHNwYWNlbmh0aWRzKQorCQkJ eworCQkJCXNwYWNlbmh0aWRzID0gTWF4KHNwYWNlbmh0aWRzICogMiwgbmh0aWRzICsgbnBvc3Rp bmcpOworCQkJCWh0aWRzID0gKEl0ZW1Qb2ludGVyKQorCQkJCQlyZXBhbGxvYyhodGlkcywgc2l6 ZW9mKEl0ZW1Qb2ludGVyRGF0YSkgKiBzcGFjZW5odGlkcyk7CisJCQl9CisKKwkJCWZvciAoaW50 IGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKKwkJCXsKKwkJCQlJdGVtUG9pbnRlciBodGlkID0g QlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGopOworCisJCQkJQXNzZXJ0KEl0ZW1Qb2ludGVy SXNWYWxpZChodGlkKSk7CisJCQkJSXRlbVBvaW50ZXJDb3B5KGh0aWQsICZodGlkc1tuaHRpZHNd KTsKKwkJCQluaHRpZHMrKzsKKwkJCX0KKwkJfQorCX0KKworCUFzc2VydChuaHRpZHMgPj0gbmRl bGV0YWJsZSk7CisKKwlsYXRlc3RSZW1vdmVkWGlkID0KKwkJdGFibGVfY29tcHV0ZV94aWRfaG9y aXpvbl9mb3JfdHVwbGVzKGhlYXBSZWwsIGh0aWRzLCBuaHRpZHMpOworCisJcGZyZWUoaHRpZHMp OworCisJcmV0dXJuIGxhdGVzdFJlbW92ZWRYaWQ7Cit9CisKIC8qCiAgKiBSZXR1cm5zIHRydWUs IGlmIHRoZSBnaXZlbiBibG9jayBoYXMgdGhlIGhhbGYtZGVhZCBmbGFnIHNldC4KICAqLwpAQCAt MjA1OCw2ICsyMjMyLDcgQEAgX2J0X3VubGlua19oYWxmZGVhZF9wYWdlKFJlbGF0aW9uIHJlbCwg QnVmZmVyIGxlYWZidWYsIGJvb2wgKnJpZ2h0c2liX2VtcHR5KQogCQkJeGxtZXRhLmZhc3RsZXZl bCA9IG1ldGFkLT5idG1fZmFzdGxldmVsOwogCQkJeGxtZXRhLm9sZGVzdF9idHBvX3hhY3QgPSBt ZXRhZC0+YnRtX29sZGVzdF9idHBvX3hhY3Q7CiAJCQl4bG1ldGEubGFzdF9jbGVhbnVwX251bV9o ZWFwX3R1cGxlcyA9IG1ldGFkLT5idG1fbGFzdF9jbGVhbnVwX251bV9oZWFwX3R1cGxlczsKKwkJ CXhsbWV0YS5zYWZlZGVkdXAgPSBtZXRhZC0+YnRtX3NhZmVkZWR1cDsKIAogCQkJWExvZ1JlZ2lz dGVyQnVmRGF0YSg0LCAoY2hhciAqKSAmeGxtZXRhLCBzaXplb2YoeGxfYnRyZWVfbWV0YWRhdGEp KTsKIAkJCXhsaW5mbyA9IFhMT0dfQlRSRUVfVU5MSU5LX1BBR0VfTUVUQTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlZS5jCmluZGV4IDgzNzZhNWU2YjcuLjkxMjgxOWI5ZGIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtOTUsNiArOTUsOCBAQCBzdGF0aWMgdm9pZCBidHZhY3V1 bXNjYW4oSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRz LAogCQkJCQkJIEJUQ3ljbGVJZCBjeWNsZWlkLCBUcmFuc2FjdGlvbklkICpvbGRlc3RCdHBvWGFj dCk7CiBzdGF0aWMgdm9pZCBidHZhY3V1bXBhZ2UoQlRWYWNTdGF0ZSAqdnN0YXRlLCBCbG9ja051 bWJlciBibGtubywKIAkJCQkJCSBCbG9ja051bWJlciBvcmlnX2Jsa25vKTsKK3N0YXRpYyBJdGVt UG9pbnRlciBidHJlZXZhY3V1bXBvc3RpbmcoQlRWYWNTdGF0ZSAqdnN0YXRlLCBJbmRleFR1cGxl IHBvc3RpbmcsCisJCQkJCQkJCQkgIGludCAqbnJlbWFpbmluZyk7CiAKIAogLyoKQEAgLTE1OCw3 ICsxNjAsNyBAQCBidGJ1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAKIAkvKiBDb25zdHJ1Y3Qg bWV0YXBhZ2UuICovCiAJbWV0YXBhZ2UgPSAoUGFnZSkgcGFsbG9jKEJMQ0tTWik7Ci0JX2J0X2lu aXRtZXRhcGFnZShtZXRhcGFnZSwgUF9OT05FLCAwKTsKKwlfYnRfaW5pdG1ldGFwYWdlKG1ldGFw YWdlLCBQX05PTkUsIDAsIF9idF9vcGNsYXNzZXNfc3VwcG9ydF9kZWR1cChpbmRleCkpOwogCiAJ LyoKIAkgKiBXcml0ZSB0aGUgcGFnZSBhbmQgbG9nIGl0LiAgSXQgbWlnaHQgc2VlbSB0aGF0IGFu IGltbWVkaWF0ZSBzeW5jIHdvdWxkCkBAIC0yNjEsOCArMjYzLDggQEAgYnRnZXR0dXBsZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJCSAqLwogCQkJCWlmIChzby0+ a2lsbGVkSXRlbXMgPT0gTlVMTCkKIAkJCQkJc28tPmtpbGxlZEl0ZW1zID0gKGludCAqKQotCQkJ CQkJcGFsbG9jKE1heEluZGV4VHVwbGVzUGVyUGFnZSAqIHNpemVvZihpbnQpKTsKLQkJCQlpZiAo c28tPm51bUtpbGxlZCA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKKwkJCQkJCXBhbGxvYyhNYXhU SURzUGVyQlRyZWVQYWdlICogc2l6ZW9mKGludCkpOworCQkJCWlmIChzby0+bnVtS2lsbGVkIDwg TWF4VElEc1BlckJUcmVlUGFnZSkKIAkJCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQr K10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7CiAJCQl9CiAKQEAgLTExNTEsMTEgKzExNTMsMTYg QEAgcmVzdGFydDoKIAl9CiAJZWxzZSBpZiAoUF9JU0xFQUYob3BhcXVlKSkKIAl7Ci0JCU9mZnNl dE51bWJlciBkZWxldGFibGVbTWF4T2Zmc2V0TnVtYmVyXTsKKwkJT2Zmc2V0TnVtYmVyIGRlbGV0 YWJsZVtNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwogCQlpbnQJCQluZGVsZXRhYmxlOworCQlJbmRl eFR1cGxlCXVwZGF0ZWRbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsKKwkJT2Zmc2V0TnVtYmVyIHVw ZGF0YWJsZVtNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCQlpbnQJCQludXBkYXRhYmxlOwogCQlP ZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQltaW5vZmYsCiAJCQkJCW1heG9mZjsKKwkJaW50CQkJ bmh0aWRzZGVhZCwKKwkJCQkJbmh0aWRzbGl2ZTsKIAogCQkvKgogCQkgKiBUcmFkZSBpbiB0aGUg aW5pdGlhbCByZWFkIGxvY2sgZm9yIGEgc3VwZXItZXhjbHVzaXZlIHdyaXRlIGxvY2sgb24KQEAg LTExODcsOCArMTE5NCwxMSBAQCByZXN0YXJ0OgogCQkgKiBwb2ludCB1c2luZyBjYWxsYmFjay4K IAkJICovCiAJCW5kZWxldGFibGUgPSAwOworCQludXBkYXRhYmxlID0gMDsKIAkJbWlub2ZmID0g UF9GSVJTVERBVEFLRVkob3BhcXVlKTsKIAkJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJl cihwYWdlKTsKKwkJbmh0aWRzZGVhZCA9IDA7CisJCW5odGlkc2xpdmUgPSAwOwogCQlpZiAoY2Fs bGJhY2spCiAJCXsKIAkJCWZvciAob2ZmbnVtID0gbWlub2ZmOwpAQCAtMTE5NiwxMSArMTIwNiw5 IEBAIHJlc3RhcnQ6CiAJCQkJIG9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKSkKIAkJ CXsKIAkJCQlJbmRleFR1cGxlCWl0dXA7Ci0JCQkJSXRlbVBvaW50ZXIgaHR1cDsKIAogCQkJCWl0 dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwKIAkJCQkJCQkJCQkJCVBhZ2VHZXRJ dGVtSWQocGFnZSwgb2ZmbnVtKSk7Ci0JCQkJaHR1cCA9ICYoaXR1cC0+dF90aWQpOwogCiAJCQkJ LyoKIAkJCQkgKiBIb3QgU3RhbmRieSBhc3N1bWVzIHRoYXQgaXQncyBva2F5IHRoYXQgWExPR19C VFJFRV9WQUNVVU0KQEAgLTEyMjMsMjIgKzEyMzEsODYgQEAgcmVzdGFydDoKIAkJCQkgKiBzaW1w bGUsIGFuZCBhbGxvd3MgdXMgdG8gYWx3YXlzIGF2b2lkIGdlbmVyYXRpbmcgb3VyIG93bgogCQkJ CSAqIGNvbmZsaWN0cy4KIAkJCQkgKi8KLQkJCQlpZiAoY2FsbGJhY2soaHR1cCwgY2FsbGJhY2tf c3RhdGUpKQotCQkJCQlkZWxldGFibGVbbmRlbGV0YWJsZSsrXSA9IG9mZm51bTsKKwkJCQlBc3Nl cnQoIUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKTsKKwkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bvc3Rp bmcoaXR1cCkpCisJCQkJeworCQkJCQkvKiBSZWd1bGFyIHR1cGxlLCBzdGFuZGFyZCB0YWJsZSBU SUQgcmVwcmVzZW50YXRpb24gKi8KKwkJCQkJaWYgKGNhbGxiYWNrKCZpdHVwLT50X3RpZCwgY2Fs bGJhY2tfc3RhdGUpKQorCQkJCQl7CisJCQkJCQlkZWxldGFibGVbbmRlbGV0YWJsZSsrXSA9IG9m Zm51bTsKKwkJCQkJCW5odGlkc2RlYWQrKzsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCQluaHRp ZHNsaXZlKys7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUl0ZW1Qb2ludGVyIG5ld2h0 aWRzOworCQkJCQlpbnQJCQlucmVtYWluaW5nOworCisJCQkJCS8qIFBvc3RpbmcgbGlzdCB0dXBs ZSAqLworCQkJCQluZXdodGlkcyA9IGJ0cmVldmFjdXVtcG9zdGluZyh2c3RhdGUsIGl0dXAsICZu cmVtYWluaW5nKTsKKwkJCQkJaWYgKG5ld2h0aWRzID09IE5VTEwpCisJCQkJCXsKKwkJCQkJCS8q CisJCQkJCQkgKiBBbGwgdGFibGUgVElEcyBmcm9tIHRoZSBwb3N0aW5nIHR1cGxlIHJlbWFpbiwg c28gbm8KKwkJCQkJCSAqIGRlbGV0ZSBvciB1cGRhdGUgcmVxdWlyZWQKKwkJCQkJCSAqLworCQkJ CQkJQXNzZXJ0KG5yZW1haW5pbmcgPT0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApKTsKKwkJ CQkJfQorCQkJCQllbHNlIGlmIChucmVtYWluaW5nID4gMCkKKwkJCQkJeworCQkJCQkJSW5kZXhU dXBsZQl1cGRhdGVkdHVwbGU7CisKKwkJCQkJCS8qCisJCQkJCQkgKiBGb3JtIG5ldyB0dXBsZSB0 aGF0IGNvbnRhaW5zIG9ubHkgcmVtYWluaW5nIFRJRHMuCisJCQkJCQkgKiBSZW1lbWJlciB0aGlz IG5ldyB0dXBsZSBhbmQgdGhlIG9mZnNldCBvZiB0aGUgdHVwbGUKKwkJCQkJCSAqIHRvIGJlIHVw ZGF0ZWQgZm9yIHRoZSBwYWdlJ3MgX2J0X2RlbGl0ZW1zX3ZhY3V1bSgpCisJCQkJCQkgKiBjYWxs LgorCQkJCQkJICovCisJCQkJCQlBc3NlcnQobnJlbWFpbmluZyA8IEJUcmVlVHVwbGVHZXROUG9z dGluZyhpdHVwKSk7CisJCQkJCQl1cGRhdGVkdHVwbGUgPSBfYnRfZm9ybV9wb3N0aW5nKGl0dXAs IG5ld2h0aWRzLAorCQkJCQkJCQkJCQkJCQlucmVtYWluaW5nKTsKKwkJCQkJCXVwZGF0ZWRbbnVw ZGF0YWJsZV0gPSB1cGRhdGVkdHVwbGU7CisJCQkJCQl1cGRhdGFibGVbbnVwZGF0YWJsZSsrXSA9 IG9mZm51bTsKKwkJCQkJCW5odGlkc2RlYWQgKz0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXAp IC0gbnJlbWFpbmluZzsKKwkJCQkJCXBmcmVlKG5ld2h0aWRzKTsKKwkJCQkJfQorCQkJCQllbHNl CisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBBbGwgdGFibGUgVElEcyBmcm9tIHRoZSBwb3N0 aW5nIGxpc3QgbXVzdCBiZQorCQkJCQkJICogZGVsZXRlZC4gIFdlJ2xsIGRlbGV0ZSB0aGUgaW5k ZXggdHVwbGUgY29tcGxldGVseQorCQkJCQkJICogKG5vIHVwZGF0ZSkuCisJCQkJCQkgKi8KKwkJ CQkJCUFzc2VydChucmVtYWluaW5nID09IDApOworCQkJCQkJZGVsZXRhYmxlW25kZWxldGFibGUr K10gPSBvZmZudW07CisJCQkJCQluaHRpZHNkZWFkICs9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhp dHVwKTsKKwkJCQkJCXBmcmVlKG5ld2h0aWRzKTsKKwkJCQkJfQorCisJCQkJCW5odGlkc2xpdmUg Kz0gbnJlbWFpbmluZzsKKwkJCQl9CiAJCQl9CiAJCX0KIAogCQkvKgotCQkgKiBBcHBseSBhbnkg bmVlZGVkIGRlbGV0ZXMuICBXZSBpc3N1ZSBqdXN0IG9uZSBfYnRfZGVsaXRlbXNfdmFjdXVtKCkK LQkJICogY2FsbCBwZXIgcGFnZSwgc28gYXMgdG8gbWluaW1pemUgV0FMIHRyYWZmaWMuCisJCSAq IEFwcGx5IGFueSBuZWVkZWQgZGVsZXRlcyBvciB1cGRhdGVzLiAgV2UgaXNzdWUganVzdCBvbmUK KwkJICogX2J0X2RlbGl0ZW1zX3ZhY3V1bSgpIGNhbGwgcGVyIHBhZ2UsIHNvIGFzIHRvIG1pbmlt aXplIFdBTCB0cmFmZmljLgogCQkgKi8KLQkJaWYgKG5kZWxldGFibGUgPiAwKQorCQlpZiAobmRl bGV0YWJsZSA+IDAgfHwgbnVwZGF0YWJsZSA+IDApCiAJCXsKLQkJCV9idF9kZWxpdGVtc192YWN1 dW0ocmVsLCBidWYsIGRlbGV0YWJsZSwgbmRlbGV0YWJsZSk7CisJCQlBc3NlcnQobmh0aWRzZGVh ZCA+PSBNYXgobmRlbGV0YWJsZSwgMSkpOworCQkJX2J0X2RlbGl0ZW1zX3ZhY3V1bShyZWwsIGJ1 ZiwgZGVsZXRhYmxlLCBuZGVsZXRhYmxlLCB1cGRhdGFibGUsCisJCQkJCQkJCXVwZGF0ZWQsIG51 cGRhdGFibGUpOwogCi0JCQlzdGF0cy0+dHVwbGVzX3JlbW92ZWQgKz0gbmRlbGV0YWJsZTsKKwkJ CXN0YXRzLT50dXBsZXNfcmVtb3ZlZCArPSBuaHRpZHNkZWFkOwogCQkJLyogbXVzdCByZWNvbXB1 dGUgbWF4b2ZmICovCiAJCQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwor CisJCQkvKiBjYW4ndCBsZWFrIG1lbW9yeSBoZXJlICovCisJCQlmb3IgKGludCBpID0gMDsgaSA8 IG51cGRhdGFibGU7IGkrKykKKwkJCQlwZnJlZSh1cGRhdGVkW2ldKTsKIAkJfQogCQllbHNlCiAJ CXsKQEAgLTEyNTEsNiArMTMyMyw3IEBAIHJlc3RhcnQ6CiAJCQkgKiBXZSB0cmVhdCB0aGlzIGxp a2UgYSBoaW50LWJpdCB1cGRhdGUgYmVjYXVzZSB0aGVyZSdzIG5vIG5lZWQgdG8KIAkJCSAqIFdB TC1sb2cgaXQuCiAJCQkgKi8KKwkJCUFzc2VydChuaHRpZHNkZWFkID09IDApOwogCQkJaWYgKHZz dGF0ZS0+Y3ljbGVpZCAhPSAwICYmCiAJCQkJb3BhcXVlLT5idHBvX2N5Y2xlaWQgPT0gdnN0YXRl LT5jeWNsZWlkKQogCQkJewpAQCAtMTI2MCwxNSArMTMzMywxOCBAQCByZXN0YXJ0OgogCQl9CiAK IAkJLyoKLQkJICogSWYgaXQncyBub3cgZW1wdHksIHRyeSB0byBkZWxldGU7IGVsc2UgY291bnQg dGhlIGxpdmUgdHVwbGVzLiBXZQotCQkgKiBkb24ndCBkZWxldGUgd2hlbiByZWN1cnNpbmcsIHRo b3VnaCwgdG8gYXZvaWQgcHV0dGluZyBlbnRyaWVzIGludG8KLQkJICogZnJlZVBhZ2VzIG91dC1v Zi1vcmRlciAoZG9lc24ndCBzZWVtIHdvcnRoIGFueSBleHRyYSBjb2RlIHRvIGhhbmRsZQotCQkg KiB0aGUgY2FzZSkuCisJCSAqIElmIGl0J3Mgbm93IGVtcHR5LCB0cnkgdG8gZGVsZXRlOyBlbHNl IGNvdW50IHRoZSBsaXZlIHR1cGxlcyAobGl2ZQorCQkgKiB0YWJsZSBUSURzIGluIHBvc3Rpbmcg bGlzdHMgYXJlIGNvdW50ZWQgYXMgc2VwYXJhdGUgbGl2ZSB0dXBsZXMpLgorCQkgKiBXZSBkb24n dCBkZWxldGUgd2hlbiByZWN1cnNpbmcsIHRob3VnaCwgdG8gYXZvaWQgcHV0dGluZyBlbnRyaWVz CisJCSAqIGludG8gZnJlZVBhZ2VzIG91dC1vZi1vcmRlciAoZG9lc24ndCBzZWVtIHdvcnRoIGFu eSBleHRyYSBjb2RlIHRvCisJCSAqIGhhbmRsZSB0aGUgY2FzZSkuCiAJCSAqLwogCQlpZiAobWlu b2ZmID4gbWF4b2ZmKQogCQkJZGVsZXRlX25vdyA9IChibGtubyA9PSBvcmlnX2Jsa25vKTsKIAkJ ZWxzZQotCQkJc3RhdHMtPm51bV9pbmRleF90dXBsZXMgKz0gbWF4b2ZmIC0gbWlub2ZmICsgMTsK KwkJCXN0YXRzLT5udW1faW5kZXhfdHVwbGVzICs9IG5odGlkc2xpdmU7CisKKwkJQXNzZXJ0KCFk ZWxldGVfbm93IHx8IG5odGlkc2xpdmUgPT0gMCk7CiAJfQogCiAJaWYgKGRlbGV0ZV9ub3cpCkBA IC0xMzAwLDkgKzEzNzYsMTAgQEAgcmVzdGFydDoKIAkvKgogCSAqIFRoaXMgaXMgcmVhbGx5IHRh aWwgcmVjdXJzaW9uLCBidXQgaWYgdGhlIGNvbXBpbGVyIGlzIHRvbyBzdHVwaWQgdG8KIAkgKiBv cHRpbWl6ZSBpdCBhcyBzdWNoLCB3ZSdkIGVhdCBhbiB1bmNvbWZvcnRhYmx5IGxhcmdlIGFtb3Vu dCBvZiBzdGFjawotCSAqIHNwYWNlIHBlciByZWN1cnNpb24gbGV2ZWwgKGR1ZSB0byB0aGUgZGVs ZXRhYmxlW10gYXJyYXkpLiBBIGZhaWx1cmUgaXMKLQkgKiBpbXByb2JhYmxlIHNpbmNlIHRoZSBu dW1iZXIgb2YgbGV2ZWxzIGlzbid0IGxpa2VseSB0byBiZSBsYXJnZSAuLi4gYnV0Ci0JICoganVz dCBpbiBjYXNlLCBsZXQncyBoYW5kLW9wdGltaXplIGludG8gYSBsb29wLgorCSAqIHNwYWNlIHBl ciByZWN1cnNpb24gbGV2ZWwgKGR1ZSB0byB0aGUgYXJyYXlzIHVzZWQgdG8gdHJhY2sgZGV0YWls cyBvZgorCSAqIGRlbGV0YWJsZS91cGRhdGFibGUgaXRlbXMpLiAgQSBmYWlsdXJlIGlzIGltcHJv YmFibGUgc2luY2UgdGhlIG51bWJlcgorCSAqIG9mIGxldmVscyBpc24ndCBsaWtlbHkgdG8gYmUg bGFyZ2UgLi4uICBidXQganVzdCBpbiBjYXNlLCBsZXQncworCSAqIGhhbmQtb3B0aW1pemUgaW50 byBhIGxvb3AuCiAJICovCiAJaWYgKHJlY3Vyc2VfdG8gIT0gUF9OT05FKQogCXsKQEAgLTEzMTEs NiArMTM4OCw2NyBAQCByZXN0YXJ0OgogCX0KIH0KIAorLyoKKyAqIGJ0cmVldmFjdXVtcG9zdGlu ZyAtLS0gZGV0ZXJtaW5lIFRJRHMgc3RpbGwgbmVlZGVkIGluIHBvc3RpbmcgbGlzdAorICoKKyAq IFJldHVybnMgbmV3IHBhbGxvYydkIGFycmF5IG9mIGl0ZW0gcG9pbnRlcnMgbmVlZGVkIHRvIGJ1 aWxkCisgKiByZXBsYWNlbWVudCBwb3N0aW5nIGxpc3QgdHVwbGUgd2l0aG91dCB0aGUgVElEcyB0 aGF0IFZBQ1VVTSBuZWVkcyB0bworICogZGVsZXRlLiAgUmV0dXJuZWQgdmFsdWUgaXMgTlVMTCBp biB0aGUgY29tbW9uIGNhc2Ugbm8gY2hhbmdlcyBhcmUKKyAqIG5lZWRlZCBpbiBjYWxsZXIncyBw b3N0aW5nIGxpc3QgdHVwbGUgKHdlIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5CisgKiBoZXJlIGFz IGFuIG9wdGltaXphdGlvbikuCisgKgorICogVGhlIG51bWJlciBvZiBUSURzIHRoYXQgc2hvdWxk IHJlbWFpbiBpbiB0aGUgcG9zdGluZyBsaXN0IHR1cGxlIGlzCisgKiBzZXQgZm9yIGNhbGxlciBp biAqbnJlbWFpbmluZy4gIFRoaXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKyAq IGluIHRoZSByZXR1cm5lZCBhcnJheSAoYXNzdW1pbmcgdGhhdCByZXR1cm4gdmFsdWUgaXNuJ3Qg anVzdCBOVUxMKS4KKyAqLworc3RhdGljIEl0ZW1Qb2ludGVyCitidHJlZXZhY3V1bXBvc3Rpbmco QlRWYWNTdGF0ZSAqdnN0YXRlLCBJbmRleFR1cGxlIHBvc3RpbmcsIGludCAqbnJlbWFpbmluZykK K3sKKwlpbnQJCQlsaXZlID0gMDsKKwlpbnQJCQluaXRlbSA9IEJUcmVlVHVwbGVHZXROUG9zdGlu Zyhwb3N0aW5nKTsKKwlJdGVtUG9pbnRlciB0bXBpdGVtcyA9IE5VTEwsCisJCQkJaXRlbXMgPSBC VHJlZVR1cGxlR2V0UG9zdGluZyhwb3N0aW5nKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbml0 ZW07IGkrKykKKwl7CisJCWlmICghdnN0YXRlLT5jYWxsYmFjayhpdGVtcyArIGksIHZzdGF0ZS0+ Y2FsbGJhY2tfc3RhdGUpKQorCQl7CisJCQkvKgorCQkJICogTGl2ZSB0YWJsZSBUSUQuCisJCQkg KgorCQkJICogT25seSBzYXZlIGxpdmUgVElEIHdoZW4gd2UgYWxyZWFkeSBrbm93IHRoYXQgd2Un cmUgZ29pbmcgdG8KKwkJCSAqIGhhdmUgdG8ga2lsbCBhdCBsZWFzdCBvbmUgVElELCBhbmQgaGF2 ZSBhbHJlYWR5IGFsbG9jYXRlZAorCQkJICogbWVtb3J5LgorCQkJICovCisJCQlpZiAodG1waXRl bXMpCisJCQkJdG1waXRlbXNbbGl2ZV0gPSBpdGVtc1tpXTsKKwkJCWxpdmUrKzsKKwkJfQorCQll bHNlIGlmICh0bXBpdGVtcyA9PSBOVUxMKQorCQl7CisJCQkvKgorCQkJICogRmlyc3QgZGVhZCB0 YWJsZSBUSUQgZW5jb3VudGVyZWQuCisJCQkgKgorCQkJICogSXQncyBub3cgY2xlYXIgdGhhdCB3 ZSBuZWVkIHRvIGRlbGV0ZSBvbmUgb3IgbW9yZSBkZWFkIHRhYmxlCisJCQkgKiBUSURzLCBzbyBz dGFydCBtYWludGFpbmluZyBhbiBhcnJheSBvZiBsaXZlIFRJRHMgZm9yIGNhbGxlciB0bworCQkJ ICogcmVjb25zdHJ1Y3Qgc21hbGxlciByZXBsYWNlbWVudCBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJ CSAqLworCQkJdG1waXRlbXMgPSBwYWxsb2Moc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkgKiBuaXRl bSk7CisKKwkJCS8qIENvcHkgbGl2ZSBUSURzIHNraXBwZWQgaW4gcHJldmlvdXMgaXRlcmF0aW9u cywgaWYgYW55ICovCisJCQlpZiAobGl2ZSA+IDApCisJCQkJbWVtY3B5KHRtcGl0ZW1zLCBpdGVt cywgc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkgKiBsaXZlKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CS8qIFNlY29uZCBvciBzdWJzZXF1ZW50IGRlYWQgdGFibGUgVElEICovCisJCX0KKwl9CisKKwkq bnJlbWFpbmluZyA9IGxpdmU7CisJcmV0dXJuIHRtcGl0ZW1zOworfQorCiAvKgogICoJYnRjYW5y ZXR1cm4oKSAtLSBDaGVjayB3aGV0aGVyIGJ0cmVlIGluZGV4ZXMgc3VwcG9ydCBpbmRleC1vbmx5 IHNjYW5zLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IGM1NzM4 MTRmMDEuLmM4YzhlZTA1N2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpA QCAtMjYsMTAgKzI2LDE4IEBACiAKIHN0YXRpYyB2b2lkIF9idF9kcm9wX2xvY2tfYW5kX21heWJl X3BpbihJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2NhblBvcyBzcCk7CiBzdGF0aWMgT2Zmc2V0TnVt YmVyIF9idF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyIGJ1 Zik7CitzdGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0IGtleSwgUGFn ZSBwYWdlLAorCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKIHN0YXRpYyBib29sIF9idF9y ZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJIE9m ZnNldE51bWJlciBvZmZudW0pOwogc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1 ZSBzbywgaW50IGl0ZW1JbmRleCwKIAkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1 cGxlIGl0dXApOworc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVl IHNvLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIEl0ZW1Q b2ludGVyIGhlYXBUaWQsCisJCQkJCQkJCSAgSW5kZXhUdXBsZSBpdHVwKTsKK3N0YXRpYyBpbmxp bmUgdm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRl eCwKKwkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkJCQkgICBJdGVtUG9p bnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpOwogc3RhdGljIGJvb2wgX2J0X3N0ZXBwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogc3RhdGljIGJvb2wgX2J0 X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiBzdGF0aWMgYm9vbCBfYnRfcGFyYWxsZWxfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKQEAgLTE0Miw2ICsxNTAsNyBAQCBfYnRf c2VhcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyICpidWZQLCBpbnQg YWNjZXNzLAogCQlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsIGtleSwgKmJ1ZlApOwogCQlpdGVt aWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CiAJCWl0dXAgPSAoSW5kZXhUdXBsZSkg UGFnZUdldEl0ZW0ocGFnZSwgaXRlbWlkKTsKKwkJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bpdm90KGl0 dXApIHx8ICFrZXktPmhlYXBrZXlzcGFjZSk7CiAJCWJsa25vID0gQlRyZWVUdXBsZUdldERvd25M aW5rKGl0dXApOwogCQlwYXJfYmxrbm8gPSBCdWZmZXJHZXRCbG9ja051bWJlcigqYnVmUCk7CiAK QEAgLTQzNCw3ICs0NDMsMTAgQEAgX2J0X2JpbnNyY2goUmVsYXRpb24gcmVsLAogICogbG93KSBt YWtlcyBib3VuZHMgaW52YWxpZC4KICAqCiAgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGlu dmFsaWRhdGluZyBib3VuZHMgd2hlbiBpdCBtb2RpZmllcyB0aGUgcGFnZQotICogYmVmb3JlIGNh bGxpbmcgaGVyZSBhIHNlY29uZCB0aW1lLgorICogYmVmb3JlIGNhbGxpbmcgaGVyZSBhIHNlY29u ZCB0aW1lLCBhbmQgZm9yIGRlYWxpbmcgd2l0aCBwb3N0aW5nIGxpc3QKKyAqIHR1cGxlIG1hdGNo ZXMgKGNhbGxlcnMgY2FuIHVzZSBpbnNlcnRzdGF0ZSdzIHBvc3RpbmdvZmYgZmllbGQgdG8KKyAq IGRldGVybWluZSB3aGljaCBleGlzdGluZyBoZWFwIFRJRCB3aWxsIG5lZWQgdG8gYmUgcmVwbGFj ZWQgYnkgYSBwb3N0aW5nCisgKiBsaXN0IHNwbGl0KS4KICAqLwogT2Zmc2V0TnVtYmVyCiBfYnRf Ymluc3JjaF9pbnNlcnQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlKQpA QCAtNDUzLDYgKzQ2NSw3IEBAIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5z ZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpCiAKIAlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAJQXNz ZXJ0KCFrZXktPm5leHRrZXkpOworCUFzc2VydChpbnNlcnRzdGF0ZS0+cG9zdGluZ29mZiA9PSAw KTsKIAogCWlmICghaW5zZXJ0c3RhdGUtPmJvdW5kc192YWxpZCkKIAl7CkBAIC01MDksNiArNTIy LDE2IEBAIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5z ZXJ0c3RhdGUpCiAJCQlpZiAocmVzdWx0ICE9IDApCiAJCQkJc3RyaWN0aGlnaCA9IGhpZ2g7CiAJ CX0KKworCQkvKgorCQkgKiBJZiB0dXBsZSBhdCBvZmZzZXQgbG9jYXRlZCBieSBiaW5hcnkgc2Vh cmNoIGlzIGEgcG9zdGluZyBsaXN0IHdob3NlCisJCSAqIFRJRCByYW5nZSBvdmVybGFwcyB3aXRo IGNhbGxlcidzIHNjYW50aWQsIHBlcmZvcm0gcG9zdGluZyBsaXN0CisJCSAqIGJpbmFyeSBzZWFy Y2ggdG8gc2V0IHBvc3RpbmdvZmYgZm9yIGNhbGxlci4gIENhbGxlciBtdXN0IHNwbGl0IHRoZQor CQkgKiBwb3N0aW5nIGxpc3Qgd2hlbiBwb3N0aW5nb2ZmIGlzIHNldC4gIFRoaXMgc2hvdWxkIGhh cHBlbgorCQkgKiBpbmZyZXF1ZW50bHkuCisJCSAqLworCQlpZiAodW5saWtlbHkocmVzdWx0ID09 IDAgJiYga2V5LT5zY2FudGlkICE9IE5VTEwpKQorCQkJaW5zZXJ0c3RhdGUtPnBvc3RpbmdvZmYg PSBfYnRfYmluc3JjaF9wb3N0aW5nKGtleSwgcGFnZSwgbWlkKTsKIAl9CiAKIAkvKgpAQCAtNTI4 LDYgKzU1MSw3MyBAQCBfYnRfYmluc3JjaF9pbnNlcnQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0 YXRlIGluc2VydHN0YXRlKQogCXJldHVybiBsb3c7CiB9CiAKKy8qLS0tLS0tLS0tLQorICoJX2J0 X2JpbnNyY2hfcG9zdGluZygpIC0tIHBvc3RpbmcgbGlzdCBiaW5hcnkgc2VhcmNoLgorICoKKyAq IEhlbHBlciByb3V0aW5lIGZvciBfYnRfYmluc3JjaF9pbnNlcnQoKS4KKyAqCisgKiBSZXR1cm5z IG9mZnNldCBpbnRvIHBvc3RpbmcgbGlzdCB3aGVyZSBjYWxsZXIncyBzY2FudGlkIGJlbG9uZ3Mu CisgKi0tLS0tLS0tLS0KKyAqLworc3RhdGljIGludAorX2J0X2JpbnNyY2hfcG9zdGluZyhCVFNj YW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pCit7CisJSW5kZXhU dXBsZQlpdHVwOworCUl0ZW1JZAkJaXRlbWlkOworCWludAkJCWxvdywKKwkJCQloaWdoLAorCQkJ CW1pZCwKKwkJCQlyZXM7CisKKwkvKgorCSAqIElmIHRoaXMgaXNuJ3QgYSBwb3N0aW5nIHR1cGxl LCB0aGVuIHRoZSBpbmRleCBtdXN0IGJlIGNvcnJ1cHQgKGlmIGl0IGlzCisJICogYW4gb3JkaW5h cnkgbm9uLXBpdm90IHR1cGxlIHRoZW4gdGhlcmUgbXVzdCBiZSBhbiBleGlzdGluZyB0dXBsZSB3 aXRoIGEKKwkgKiBoZWFwIFRJRCB0aGF0IGVxdWFscyBpbnNlcnRlcidzIG5ldyBoZWFwIFRJRC9z Y2FudGlkKS4gIERlZmVuc2l2ZWx5CisJICogY2hlY2sgdGhhdCB0dXBsZSBpcyBhIHBvc3Rpbmcg bGlzdCB0dXBsZSB3aG9zZSBwb3N0aW5nIGxpc3QgcmFuZ2UKKwkgKiBpbmNsdWRlcyBjYWxsZXIn cyBzY2FudGlkLgorCSAqCisJICogKFRoaXMgaXMgYWxzbyBuZWVkZWQgYmVjYXVzZSBjb250cmli L2FtY2hlY2sncyByb290ZGVzY2VuZCBvcHRpb24gbmVlZHMKKwkgKiB0byBiZSBhYmxlIHRvIHJl bG9jYXRlIGEgbm9uLXBpdm90IHR1cGxlIHVzaW5nIF9idF9iaW5zcmNoX2luc2VydCgpLikKKwkg Ki8KKwlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJaXR1cCA9IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOworCWlmICghQlRyZWVUdXBsZUlzUG9z dGluZyhpdHVwKSkKKwkJcmV0dXJuIDA7CisKKwlBc3NlcnQoa2V5LT5oZWFwa2V5c3BhY2UgJiYg a2V5LT5zYWZlZGVkdXApOworCisJLyoKKwkgKiBJbiB0aGUgZXZlbnQgdGhhdCBwb3N0aW5nIGxp c3QgdHVwbGUgaGFzIExQX0RFQUQgYml0IHNldCwgaW5kaWNhdGUgdGhpcworCSAqIHRvIF9idF9i aW5zcmNoX2luc2VydCgpIGNhbGxlciBieSByZXR1cm5pbmcgLTEsIGEgc2VudGluZWwgdmFsdWUu ICBBCisJICogc2Vjb25kIGNhbGwgdG8gX2J0X2JpbnNyY2hfaW5zZXJ0KCkgY2FuIHRha2UgcGxh Y2Ugd2hlbiBpdHMgY2FsbGVyIGhhcworCSAqIHJlbW92ZWQgdGhlIGRlYWQgaXRlbS4KKwkgKi8K KwlpZiAoSXRlbUlkSXNEZWFkKGl0ZW1pZCkpCisJCXJldHVybiAtMTsKKworCS8qICJoaWdoIiBp cyBwYXN0IGVuZCBvZiBwb3N0aW5nIGxpc3QgZm9yIGxvb3AgaW52YXJpYW50ICovCisJbG93ID0g MDsKKwloaWdoID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOworCUFzc2VydChoaWdoID49 IDIpOworCisJd2hpbGUgKGhpZ2ggPiBsb3cpCisJeworCQltaWQgPSBsb3cgKyAoKGhpZ2ggLSBs b3cpIC8gMik7CisJCXJlcyA9IEl0ZW1Qb2ludGVyQ29tcGFyZShrZXktPnNjYW50aWQsCisJCQkJ CQkJCSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgbWlkKSk7CisKKwkJaWYgKHJlcyA+IDAp CisJCQlsb3cgPSBtaWQgKyAxOworCQllbHNlIGlmIChyZXMgPCAwKQorCQkJaGlnaCA9IG1pZDsK KwkJZWxzZQorCQkJcmV0dXJuIG1pZDsKKwl9CisKKwkvKiBFeGFjdCBtYXRjaCBub3QgZm91bmQg Ki8KKwlyZXR1cm4gbG93OworfQorCiAvKi0tLS0tLS0tLS0KICAqCV9idF9jb21wYXJlKCkgLS0g Q29tcGFyZSBpbnNlcnRpb24tdHlwZSBzY2Fua2V5IHRvIHR1cGxlIG9uIGEgcGFnZS4KICAqCkBA IC01MzcsOSArNjI3LDE0IEBAIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5z ZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpCiAgKgkJCTwwIGlmIHNjYW5rZXkgPCB0dXBsZSBhdCBvZmZu dW07CiAgKgkJCSAwIGlmIHNjYW5rZXkgPT0gdHVwbGUgYXQgb2ZmbnVtOwogICoJCQk+MCBpZiBz Y2Fua2V5ID4gdHVwbGUgYXQgb2ZmbnVtLgotICoJCU5VTExzIGluIHRoZSBrZXlzIGFyZSB0cmVh dGVkIGFzIHNvcnRhYmxlIHZhbHVlcy4gIFRoZXJlZm9yZQotICoJCSJlcXVhbGl0eSIgZG9lcyBu b3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHRoZSBpdGVtIHNob3VsZCBiZQotICoJCXJldHVybmVk IHRvIHRoZSBjYWxsZXIgYXMgYSBtYXRjaGluZyBrZXkhCisgKgorICogTlVMTHMgaW4gdGhlIGtl eXMgYXJlIHRyZWF0ZWQgYXMgc29ydGFibGUgdmFsdWVzLiAgVGhlcmVmb3JlCisgKiAiZXF1YWxp dHkiIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCB0aGUgaXRlbSBzaG91bGQgYmUgcmV0 dXJuZWQKKyAqIHRvIHRoZSBjYWxsZXIgYXMgYSBtYXRjaGluZyBrZXkuICBTaW1pbGFybHksIGFu IGluc2VydGlvbiBzY2Fua2V5CisgKiB3aXRoIGl0cyBzY2FudGlkIHNldCBpcyB0cmVhdGVkIGFz IGVxdWFsIHRvIGEgcG9zdGluZyB0dXBsZSB3aG9zZSBUSUQKKyAqIHJhbmdlIG92ZXJsYXBzIHdp dGggdGhlaXIgc2NhbnRpZC4gIFRoZXJlIGdlbmVyYWxseSB3b24ndCBiZSBhCisgKiBtYXRjaGlu ZyBUSUQgaW4gdGhlIHBvc3RpbmcgdHVwbGUsIHdoaWNoIGNhbGxlciBtdXN0IGhhbmRsZQorICog dGhlbXNlbHZlcyAoZS5nLiwgYnkgc3BsaXR0aW5nIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUpLgog ICoKICAqIENSVUNJQUwgTk9URTogb24gYSBub24tbGVhZiBwYWdlLCB0aGUgZmlyc3QgZGF0YSBr ZXkgaXMgYXNzdW1lZCB0byBiZQogICogIm1pbnVzIGluZmluaXR5IjogdGhpcyByb3V0aW5lIHdp bGwgYWx3YXlzIGNsYWltIGl0IGlzIGxlc3MgdGhhbiB0aGUKQEAgLTU2Myw2ICs2NTgsNyBAQCBf YnRfY29tcGFyZShSZWxhdGlvbiByZWwsCiAJU2NhbktleQkJc2NhbmtleTsKIAlpbnQJCQluY21w a2V5OwogCWludAkJCW50dXBhdHRzOworCWludDMyCQlyZXN1bHQ7CiAKIAlBc3NlcnQoX2J0X2No ZWNrX25hdHRzKHJlbCwga2V5LT5oZWFwa2V5c3BhY2UsIHBhZ2UsIG9mZm51bSkpOwogCUFzc2Vy dChrZXktPmtleXN6IDw9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVs KSk7CkBAIC01OTcsNyArNjkzLDYgQEAgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLAogCXsKIAkJ RGF0dW0JCWRhdHVtOwogCQlib29sCQlpc051bGw7Ci0JCWludDMyCQlyZXN1bHQ7CiAKIAkJZGF0 dW0gPSBpbmRleF9nZXRhdHRyKGl0dXAsIHNjYW5rZXktPnNrX2F0dG5vLCBpdHVwZGVzYywgJmlz TnVsbCk7CiAKQEAgLTcxMyw4ICs4MDgsMjUgQEAgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLAog CWlmIChoZWFwVGlkID09IE5VTEwpCiAJCXJldHVybiAxOwogCisJLyoKKwkgKiBTY2Fua2V5IG11 c3QgYmUgdHJlYXRlZCBhcyBlcXVhbCB0byBhIHBvc3RpbmcgbGlzdCB0dXBsZSBpZiBpdHMgc2Nh bnRpZAorCSAqIHZhbHVlIGZhbGxzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdGhlIHBvc3RpbmcgbGlz dC4gIEluIGFsbCBvdGhlciBjYXNlcworCSAqIHRoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGhl YXAgVElEIHZhbHVlLCB3aGljaCBpcyBjb21wYXJlZCBkaXJlY3RseQorCSAqIGFzIGEgc2ltcGxl IHNjYWxhciB2YWx1ZS4KKwkgKi8KIAlBc3NlcnQobnR1cGF0dHMgPj0gSW5kZXhSZWxhdGlvbkdl dE51bWJlck9mS2V5QXR0cmlidXRlcyhyZWwpKTsKLQlyZXR1cm4gSXRlbVBvaW50ZXJDb21wYXJl KGtleS0+c2NhbnRpZCwgaGVhcFRpZCk7CisJcmVzdWx0ID0gSXRlbVBvaW50ZXJDb21wYXJlKGtl eS0+c2NhbnRpZCwgaGVhcFRpZCk7CisJaWYgKHJlc3VsdCA8PSAwIHx8ICFCVHJlZVR1cGxlSXNQ b3N0aW5nKGl0dXApKQorCQlyZXR1cm4gcmVzdWx0OworCWVsc2UKKwl7CisJCXJlc3VsdCA9IEl0 ZW1Qb2ludGVyQ29tcGFyZShrZXktPnNjYW50aWQsCisJCQkJCQkJCQlCVHJlZVR1cGxlR2V0TWF4 SGVhcFRJRChpdHVwKSk7CisJCWlmIChyZXN1bHQgPiAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJ cmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMjI5LDcgKzEzNDEsNyBAQCBfYnRfZmlyc3QoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAl9CiAKIAkvKiBJbml0aWFsaXplIHJl bWFpbmluZyBpbnNlcnRpb24gc2NhbiBrZXkgZmllbGRzICovCi0JaW5za2V5LmhlYXBrZXlzcGFj ZSA9IF9idF9oZWFwa2V5c3BhY2UocmVsKTsKKwlfYnRfbWV0YXZlcnNpb24ocmVsLCAmaW5za2V5 LmhlYXBrZXlzcGFjZSwgJmluc2tleS5zYWZlZGVkdXApOwogCWluc2tleS5hbnludWxsa2V5cyA9 IGZhbHNlOyAvKiB1bnVzZWQgKi8KIAlpbnNrZXkubmV4dGtleSA9IG5leHRrZXk7CiAJaW5za2V5 LnBpdm90c2VhcmNoID0gZmFsc2U7CkBAIC0xNDg0LDkgKzE1OTYsMzUgQEAgX2J0X3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZu dW0pCiAKIAkJCWlmIChfYnRfY2hlY2trZXlzKHNjYW4sIGl0dXAsIGluZG5hdHRzLCBkaXIsICZj b250aW51ZXNjYW4pKQogCQkJewotCQkJCS8qIHR1cGxlIHBhc3NlcyBhbGwgc2NhbiBrZXkgY29u ZGl0aW9ucywgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRl eCwgb2ZmbnVtLCBpdHVwKTsKLQkJCQlpdGVtSW5kZXgrKzsKKwkJCQkvKiB0dXBsZSBwYXNzZXMg YWxsIHNjYW4ga2V5IGNvbmRpdGlvbnMgKi8KKwkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bvc3Rpbmco aXR1cCkpCisJCQkJeworCQkJCQkvKiBSZW1lbWJlciBpdCAqLworCQkJCQlfYnRfc2F2ZWl0ZW0o c28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJaXRlbUluZGV4Kys7CisJCQkJfQor CQkJCWVsc2UKKwkJCQl7CisJCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCisJCQkJCS8qCisJCQkJ CSAqIFNldCB1cCBzdGF0ZSB0byByZXR1cm4gcG9zdGluZyBsaXN0LCBhbmQgcmVtZW1iZXIgZmly c3QKKwkJCQkJICogVElECisJCQkJCSAqLworCQkJCQl0dXBsZU9mZnNldCA9CisJCQkJCQlfYnRf c2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJCQkJCQkgIEJU cmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKKwkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJ aXRlbUluZGV4Kys7CisJCQkJCS8qIFJlbWVtYmVyIGFkZGl0aW9uYWwgVElEcyAqLworCQkJCQlm b3IgKGludCBpID0gMTsgaSA8IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsgaSsrKQorCQkJ CQl7CisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJ CQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAorCQkJCQkJCQkJCQl0dXBs ZU9mZnNldCk7CisJCQkJCQlpdGVtSW5kZXgrKzsKKwkJCQkJfQorCQkJCX0KIAkJCX0KIAkJCS8q IFdoZW4gIWNvbnRpbnVlc2NhbiwgdGhlcmUgY2FuJ3QgYmUgYW55IG1vcmUgbWF0Y2hlcywgc28g c3RvcCAqLwogCQkJaWYgKCFjb250aW51ZXNjYW4pCkBAIC0xNTE5LDcgKzE2NTcsNyBAQCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSkKIAkJaWYgKCFjb250aW51ZXNjYW4pCiAJCQlzby0+Y3VyclBvcy5tb3JlUmln aHQgPSBmYWxzZTsKIAotCQlBc3NlcnQoaXRlbUluZGV4IDw9IE1heEluZGV4VHVwbGVzUGVyUGFn ZSk7CisJCUFzc2VydChpdGVtSW5kZXggPD0gTWF4VElEc1BlckJUcmVlUGFnZSk7CiAJCXNvLT5j dXJyUG9zLmZpcnN0SXRlbSA9IDA7CiAJCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4 IC0gMTsKIAkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKQEAgLTE1MjcsNyArMTY2NSw3IEBA IF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZz ZXROdW1iZXIgb2ZmbnVtKQogCWVsc2UKIAl7CiAJCS8qIGxvYWQgaXRlbXNbXSBpbiBkZXNjZW5k aW5nIG9yZGVyICovCi0JCWl0ZW1JbmRleCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZTsKKwkJaXRl bUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZTsKIAogCQlvZmZudW0gPSBNaW4ob2ZmbnVtLCBt YXhvZmYpOwogCkBAIC0xNTY4LDkgKzE3MDYsNDEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0pCiAJCQkJCQkJ CQkJICZjb250aW51ZXNjYW4pOwogCQkJaWYgKHBhc3Nlc19xdWFscyAmJiB0dXBsZV9hbGl2ZSkK IAkJCXsKLQkJCQkvKiB0dXBsZSBwYXNzZXMgYWxsIHNjYW4ga2V5IGNvbmRpdGlvbnMsIHNvIHJl bWVtYmVyIGl0ICovCi0JCQkJaXRlbUluZGV4LS07Ci0JCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVt SW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJLyogdHVwbGUgcGFzc2VzIGFsbCBzY2FuIGtleSBj b25kaXRpb25zICovCisJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQorCQkJCXsK KwkJCQkJLyogUmVtZW1iZXIgaXQgKi8KKwkJCQkJaXRlbUluZGV4LS07CisJCQkJCV9idF9zYXZl aXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCX0KKwkJCQllbHNlCisJCQkJ eworCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKworCQkJCQkvKgorCQkJCQkgKiBTZXQgdXAgc3Rh dGUgdG8gcmV0dXJuIHBvc3RpbmcgbGlzdCwgYW5kIHJlbWVtYmVyIGZpcnN0CisJCQkJCSAqIFRJ RC4KKwkJCQkJICoKKwkJCQkJICogTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSBzYXZlL3JldHVy biBpdGVtcyBmcm9tCisJCQkJCSAqIHBvc3RpbmcgbGlzdHMgaW4gYXNjZW5kaW5nIGhlYXAgVElE IG9yZGVyIGZvciBiYWNrd2FyZHMKKwkJCQkJICogc2NhbnMuICBUaGlzIGFsbG93cyBfYnRfa2ls bGl0ZW1zKCkgdG8gbWFrZSBhCisJCQkJCSAqIGNvbnNpc3RlbnQgYXNzdW1wdGlvbiBhYm91dCB0 aGUgb3JkZXIgb2YgaXRlbXMKKwkJCQkJICogYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIHBvc3Rp bmcgbGlzdCB0dXBsZS4KKwkJCQkJICovCisJCQkJCWl0ZW1JbmRleC0tOworCQkJCQl0dXBsZU9m ZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVt LAorCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKKwkJCQkJCQkJ CQkJICBpdHVwKTsKKwkJCQkJLyogUmVtZW1iZXIgYWRkaXRpb25hbCBUSURzICovCisJCQkJCWZv ciAoaW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCisJCQkJ CXsKKwkJCQkJCWl0ZW1JbmRleC0tOworCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRl bUluZGV4LCBvZmZudW0sCisJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBp KSwKKwkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOworCQkJCQl9CisJCQkJfQogCQkJfQogCQkJaWYg KCFjb250aW51ZXNjYW4pCiAJCQl7CkBAIC0xNTg0LDggKzE3NTQsOCBAQCBfYnRfcmVhZHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51 bSkKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49IDApOwogCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0g PSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQ YWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdl IC0gMTsKKwkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsK KwkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CiAJfQog CiAJcmV0dXJuIChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0p OwpAQCAtMTU5OCw2ICsxNzY4LDggQEAgX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50 IGl0ZW1JbmRleCwKIHsKIAlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tpdGVtSW5kZXhdOwogCisJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSAmJiAh QlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CisKIAljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAt PnRfdGlkOwogCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKIAlpZiAoc28tPmN1cnJU dXBsZXMpCkBAIC0xNjEwLDYgKzE3ODIsNzEgQEAgX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBz bywgaW50IGl0ZW1JbmRleCwKIAl9CiB9CiAKKy8qCisgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJ RHMvaXRlbXMgZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUuCisgKgorICogU2F2ZXMg YW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0 aGF0IGlzCisgKiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQg VElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZAorICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRf c2F2ZXBvc3RpbmdpdGVtKCkuCisgKgorICogUmV0dXJucyBhbiBvZmZzZXQgaW50byB0dXBsZSBz dG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcyBzdG9yZWQgYXQgaWYKKyAqIG5lZWRlZC4K KyAqLworc3RhdGljIGludAorX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywg aW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJICBJdGVtUG9pbnRlciBo ZWFwVGlkLCBJbmRleFR1cGxlIGl0dXApCit7CisJQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAm c28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKworCUFzc2VydChCVHJlZVR1cGxlSXNQb3N0 aW5nKGl0dXApKTsKKworCWN1cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7CisJY3Vyckl0ZW0t PmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWlmIChzby0+Y3VyclR1cGxlcykKKwl7CisJCS8qIFNh dmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICovCisJCUluZGV4VHVw bGUJYmFzZTsKKwkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoaXR1 cCk7CisKKwkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKKwkJY3Vyckl0ZW0tPnR1cGxlT2Zm c2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4VHVwbGUp IChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7CisJCW1lbWNw eShiYXNlLCBpdHVwLCBpdHVwc3opOworCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVh IGluZGV4IHR1cGxlIGhlYWRlciBzaXplICovCisJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0la RV9NQVNLOworCQliYXNlLT50X2luZm8gfD0gaXR1cHN6OworCQlzby0+Y3VyclBvcy5uZXh0VHVw bGVPZmZzZXQgKz0gaXR1cHN6OworCisJCXJldHVybiBjdXJySXRlbS0+dHVwbGVPZmZzZXQ7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+ Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKKyAqIHR1cGxlLgor ICoKKyAqIEFzc3VtZXMgdGhhdCBfYnRfc2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxyZWFkeSBi ZWVuIGNhbGxlZCBmb3IgY3VycmVudAorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBh c3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIHR1cGxlT2Zmc2V0LgorICovCitzdGF0aWMgaW5saW5l IHZvaWQKK19idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4 LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVw bGVPZmZzZXQpCit7CisJQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRl bXNbaXRlbUluZGV4XTsKKworCWN1cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7CisJY3Vyckl0 ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJLyoKKwkgKiBIYXZlIGluZGV4LW9ubHkgc2Nh bnMgcmV0dXJuIHRoZSBzYW1lIGJhc2UgSW5kZXhUdXBsZSBmb3IgZXZlcnkgVElECisJICogdGhh dCBvcmlnaW5hdGVzIGZyb20gdGhlIHNhbWUgcG9zdGluZyBsaXN0CisJICovCisJaWYgKHNvLT5j dXJyVHVwbGVzKQorCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKK30KKwog LyoKICAqCV9idF9zdGVwcGFnZSgpIC0tIFN0ZXAgdG8gbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFs aWQgZGF0YSBmb3Igc2NhbgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0c29ydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKaW5kZXgg ZjE2MzQ5MWQ2MC4uZGRkZmUxNGQ1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRzb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMK QEAgLTI0Myw2ICsyNDMsNyBAQCB0eXBlZGVmIHN0cnVjdCBCVFBhZ2VTdGF0ZQogCUJsb2NrTnVt YmVyIGJ0cHNfYmxrbm87CQkvKiBibG9jayAjIHRvIHdyaXRlIHRoaXMgcGFnZSBhdCAqLwogCUlu ZGV4VHVwbGUJYnRwc19sb3drZXk7CS8qIHBhZ2UncyBzdHJpY3QgbG93ZXIgYm91bmQgcGl2b3Qg dHVwbGUgKi8KIAlPZmZzZXROdW1iZXIgYnRwc19sYXN0b2ZmOwkvKiBsYXN0IGl0ZW0gb2Zmc2V0 IGxvYWRlZCAqLworCVNpemUJCWJ0cHNfbGFzdGV4dHJhOyAvKiBsYXN0IGl0ZW0ncyBleHRyYSBw b3N0aW5nIGxpc3Qgc3BhY2UgKi8KIAl1aW50MzIJCWJ0cHNfbGV2ZWw7CQkvKiB0cmVlIGxldmVs ICgwID0gbGVhZikgKi8KIAlTaXplCQlidHBzX2Z1bGw7CQkvKiAiZnVsbCIgaWYgbGVzcyB0aGFu IHRoaXMgbXVjaCBmcmVlIHNwYWNlICovCiAJc3RydWN0IEJUUGFnZVN0YXRlICpidHBzX25leHQ7 CS8qIGxpbmsgdG8gcGFyZW50IGxldmVsLCBpZiBhbnkgKi8KQEAgLTI3Nyw3ICsyNzgsMTAgQEAg c3RhdGljIHZvaWQgX2J0X3NsaWRlbGVmdChQYWdlIHBhZ2UpOwogc3RhdGljIHZvaWQgX2J0X3Nv cnRhZGR0dXAoUGFnZSBwYWdlLCBTaXplIGl0ZW1zaXplLAogCQkJCQkJICAgSW5kZXhUdXBsZSBp dHVwLCBPZmZzZXROdW1iZXIgaXR1cF9vZmYpOwogc3RhdGljIHZvaWQgX2J0X2J1aWxkYWRkKEJU V3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAqc3RhdGUsCi0JCQkJCQkgSW5kZXhUdXBs ZSBpdHVwKTsKKwkJCQkJCSBJbmRleFR1cGxlIGl0dXAsIFNpemUgdHJ1bmNleHRyYSk7CitzdGF0 aWMgdm9pZCBfYnRfc29ydF9kZWR1cF9maW5pc2hfcGVuZGluZyhCVFdyaXRlU3RhdGUgKndzdGF0 ZSwKKwkJCQkJCQkJCQkgIEJUUGFnZVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCQkgIEJURGVkdXBT dGF0ZSBkc3RhdGUpOwogc3RhdGljIHZvaWQgX2J0X3VwcGVyc2h1dGRvd24oQlRXcml0ZVN0YXRl ICp3c3RhdGUsIEJUUGFnZVN0YXRlICpzdGF0ZSk7CiBzdGF0aWMgdm9pZCBfYnRfbG9hZChCVFdy aXRlU3RhdGUgKndzdGF0ZSwKIAkJCQkJIEJUU3Bvb2wgKmJ0c3Bvb2wsIEJUU3Bvb2wgKmJ0c3Bv b2wyKTsKQEAgLTcxMSw2ICs3MTUsNyBAQCBfYnRfcGFnZXN0YXRlKEJUV3JpdGVTdGF0ZSAqd3N0 YXRlLCB1aW50MzIgbGV2ZWwpCiAJc3RhdGUtPmJ0cHNfbG93a2V5ID0gTlVMTDsKIAkvKiBpbml0 aWFsaXplIGxhc3RvZmYgc28gZmlyc3QgaXRlbSBnb2VzIGludG8gUF9GSVJTVEtFWSAqLwogCXN0 YXRlLT5idHBzX2xhc3RvZmYgPSBQX0hJS0VZOworCXN0YXRlLT5idHBzX2xhc3RleHRyYSA9IDA7 CiAJc3RhdGUtPmJ0cHNfbGV2ZWwgPSBsZXZlbDsKIAkvKiBzZXQgImZ1bGwiIHRocmVzaG9sZCBi YXNlZCBvbiBsZXZlbC4gIFNlZSBub3RlcyBhdCBoZWFkIG9mIGZpbGUuICovCiAJaWYgKGxldmVs ID4gMCkKQEAgLTc4OSw3ICs3OTQsOCBAQCBfYnRfc29ydGFkZHR1cChQYWdlIHBhZ2UsCiB9CiAK IC8qLS0tLS0tLS0tLQotICogQWRkIGFuIGl0ZW0gdG8gYSBkaXNrIHBhZ2UgZnJvbSB0aGUgc29y dCBvdXRwdXQuCisgKiBBZGQgYW4gaXRlbSB0byBhIGRpc2sgcGFnZSBmcm9tIHRoZSBzb3J0IG91 dHB1dCAob3IgYWRkIGEgcG9zdGluZyBsaXN0CisgKiBpdGVtIGZvcm1lZCBmcm9tIHRoZSBzb3J0 IG91dHB1dCkuCiAgKgogICogV2UgbXVzdCBiZSBjYXJlZnVsIHRvIG9ic2VydmUgdGhlIHBhZ2Ug bGF5b3V0IGNvbnZlbnRpb25zIG9mIG5idHNlYXJjaC5jOgogICogLSByaWdodG1vc3QgcGFnZXMg c3RhcnQgZGF0YSBpdGVtcyBhdCBQX0hJS0VZIGluc3RlYWQgb2YgYXQgUF9GSVJTVEtFWS4KQEAg LTgyMSwxNCArODI3LDI3IEBAIF9idF9zb3J0YWRkdHVwKFBhZ2UgcGFnZSwKICAqIHRoZSB0cnVu Y2F0ZWQgaGlnaCBrZXkgYXQgb2Zmc2V0IDEuCiAgKgogICogJ2xhc3QnIHBvaW50ZXIgaW5kaWNh dGVzIHRoZSBsYXN0IG9mZnNldCBhZGRlZCB0byB0aGUgcGFnZS4KKyAqCisgKiAndHJ1bmNleHRy YScgaXMgdGhlIHNpemUgb2YgdGhlIHBvc3RpbmcgbGlzdCBpbiBpdHVwLCBpZiBhbnkuICBUaGlz CisgKiBpbmZvcm1hdGlvbiBpcyBzdGFzaGVkIGZvciB0aGUgbmV4dCBjYWxsIGhlcmUsIHdoZW4g d2UgbWF5IGJlbmVmaXQKKyAqIGZyb20gY29uc2lkZXJpbmcgdGhlIGltcGFjdCBvZiB0cnVuY2F0 aW5nIGF3YXkgdGhlIHBvc3RpbmcgbGlzdCBvbgorICogdGhlIHBhZ2UgYmVmb3JlIGRlY2lkaW5n IHRvIGZpbmlzaCB0aGUgcGFnZSBvZmYuICBQb3N0aW5nIGxpc3RzIGFyZQorICogb2Z0ZW4gcmVs YXRpdmVseSBsYXJnZSwgc28gaXQgaXMgd29ydGggZ29pbmcgdG8gdGhlIHRyb3VibGUgb2YKKyAq IGFjY291bnRpbmcgZm9yIHRoZSBzYXZpbmcgZnJvbSB0cnVuY2F0aW5nIGF3YXkgdGhlIHBvc3Rp bmcgbGlzdCBvZgorICogdGhlIHR1cGxlIHRoYXQgYmVjb21lcyB0aGUgaGlnaCBrZXkgKHRoYXQg bWF5IGJlIHRoZSBvbmx5IHdheSB0bworICogZ2V0IGNsb3NlIHRvIHRhcmdldCBmcmVlIHNwYWNl IG9uIHRoZSBwYWdlKS4gIE5vdGUgdGhhdCB0aGlzIGlzCisgKiBvbmx5IHVzZWQgZm9yIHRoZSBz b2Z0IGZpbGxmYWN0b3Itd2lzZSBsaW1pdCwgbm90IHRoZSBjcml0aWNhbCBoYXJkCisgKiBsaW1p dC4KICAqLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZAotX2J0X2J1aWxkYWRkKEJUV3JpdGVT dGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKK19idF9i dWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUgKnN0YXRlLCBJbmRleFR1 cGxlIGl0dXAsCisJCQkgU2l6ZSB0cnVuY2V4dHJhKQogewogCVBhZ2UJCW5wYWdlOwogCUJsb2Nr TnVtYmVyIG5ibGtubzsKIAlPZmZzZXROdW1iZXIgbGFzdF9vZmY7CisJU2l6ZQkJbGFzdF90cnVu Y2V4dHJhOwogCVNpemUJCXBnc3BjOwogCVNpemUJCWl0dXBzejsKIAlib29sCQlpc2xlYWY7CkBA IC04NDIsNiArODYxLDggQEAgX2J0X2J1aWxkYWRkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBh Z2VTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIAlucGFnZSA9IHN0YXRlLT5idHBzX3Bh Z2U7CiAJbmJsa25vID0gc3RhdGUtPmJ0cHNfYmxrbm87CiAJbGFzdF9vZmYgPSBzdGF0ZS0+YnRw c19sYXN0b2ZmOworCWxhc3RfdHJ1bmNleHRyYSA9IHN0YXRlLT5idHBzX2xhc3RleHRyYTsKKwlz dGF0ZS0+YnRwc19sYXN0ZXh0cmEgPSB0cnVuY2V4dHJhOwogCiAJcGdzcGMgPSBQYWdlR2V0RnJl ZVNwYWNlKG5wYWdlKTsKIAlpdHVwc3ogPSBJbmRleFR1cGxlU2l6ZShpdHVwKTsKQEAgLTg4Mywx MCArOTA0LDEwIEBAIF9idF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3Rh dGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJICogcGFnZS4gIERpc3JlZ2FyZCBmaWxsZmFj dG9yIGFuZCBpbnNlcnQgb24gImZ1bGwiIGN1cnJlbnQgcGFnZSBpZiB3ZQogCSAqIGRvbid0IGhh dmUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHlldC4gIChOb3RlIHRoYXQgd2UgZGVsaWJl cmF0ZWx5CiAJICogYXNzdW1lIHRoYXQgc3VmZml4IHRydW5jYXRpb24gbmVpdGhlciBlbmxhcmdl cyBub3Igc2hyaW5rcyBuZXcgaGlnaCBrZXkKLQkgKiB3aGVuIGFwcGx5aW5nIHNvZnQgbGltaXQu KQorCSAqIHdoZW4gYXBwbHlpbmcgc29mdCBsaW1pdCwgZXhjZXB0IHdoZW4gbGFzdCB0dXBsZSBo YWQgYSBwb3N0aW5nIGxpc3QuKQogCSAqLwogCWlmIChwZ3NwYyA8IGl0dXBzeiArIChpc2xlYWYg PyBNQVhBTElHTihzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSkgOiAwKSB8fAotCQkocGdzcGMgPCBz dGF0ZS0+YnRwc19mdWxsICYmIGxhc3Rfb2ZmID4gUF9GSVJTVEtFWSkpCisJCShwZ3NwYyArIGxh c3RfdHJ1bmNleHRyYSA8IHN0YXRlLT5idHBzX2Z1bGwgJiYgbGFzdF9vZmYgPiBQX0ZJUlNUS0VZ KSkKIAl7CiAJCS8qCiAJCSAqIEZpbmlzaCBvZmYgdGhlIHBhZ2UgYW5kIHdyaXRlIGl0IG91dC4K QEAgLTk0NCwxMSArOTY1LDE0IEBAIF9idF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwg QlRQYWdlU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJCQkgKiBXZSBkb24ndCB0cnkg dG8gYmlhcyBvdXIgY2hvaWNlIG9mIHNwbGl0IHBvaW50IHRvIG1ha2UgaXQgbW9yZQogCQkJICog bGlrZWx5IHRoYXQgX2J0X3RydW5jYXRlKCkgY2FuIHRydW5jYXRlIGF3YXkgbW9yZSBhdHRyaWJ1 dGVzLAogCQkJICogd2hlcmVhcyB0aGUgc3BsaXQgcG9pbnQgdXNlZCB3aXRoaW4gX2J0X3NwbGl0 KCkgaXMgY2hvc2VuIG11Y2gKLQkJCSAqIG1vcmUgZGVsaWNhdGVseS4gIFN1ZmZpeCB0cnVuY2F0 aW9uIGlzIG1vc3RseSB1c2VmdWwgYmVjYXVzZSBpdAotCQkJICogaW1wcm92ZXMgc3BhY2UgdXRp bGl6YXRpb24gZm9yIHdvcmtsb2FkcyB3aXRoIHJhbmRvbQotCQkJICogaW5zZXJ0aW9ucy4gIEl0 IGRvZXNuJ3Qgc2VlbSB3b3J0aHdoaWxlIHRvIGFkZCBsb2dpYyBmb3IKLQkJCSAqIGNob29zaW5n IGEgc3BsaXQgcG9pbnQgaGVyZSBmb3IgYSBiZW5lZml0IHRoYXQgaXMgYm91bmQgdG8gYmUKLQkJ CSAqIG11Y2ggc21hbGxlci4KKwkJCSAqIG1vcmUgZGVsaWNhdGVseS4gIEV2ZW4gc3RpbGwsIHRo ZSBsYXN0bGVmdCBhbmQgZmlyc3RyaWdodAorCQkJICogdHVwbGVzIHBhc3NlZCB0byBfYnRfdHJ1 bmNhdGUoKSBoZXJlIGFyZSBhdCBsZWFzdCBub3QgZnVsbHkKKwkJCSAqIGVxdWFsIHRvIGVhY2gg b3RoZXIgd2hlbiBkZWR1cGxpY2F0aW9uIGlzIHVzZWQsIHVubGVzcyB0aGVyZSBpcworCQkJICog YSBsYXJnZSBncm91cCBvZiBkdXBsaWNhdGVzIChhbHNvLCB1bmlxdWUgaW5kZXggYnVpbGRzIHVz dWFsbHkKKwkJCSAqIGhhdmUgZmV3IG9yIG5vIHNwb29sMiBkdXBsaWNhdGVzKS4gIFdoZW4gdGhl IHNwbGl0IHBvaW50IGlzCisJCQkgKiBiZXR3ZWVuIHR3byB1bmVxdWFsIHR1cGxlcywgX2J0X3Ry dW5jYXRlKCkgd2lsbCBhdm9pZCBpbmNsdWRpbmcKKwkJCSAqIGEgaGVhcCBUSUQgaW4gdGhlIG5l dyBoaWdoIGtleSwgd2hpY2ggaXMgdGhlIG1vc3QgaW1wb3J0YW50CisJCQkgKiBiZW5lZml0IG9m IHN1ZmZpeCB0cnVuY2F0aW9uLgogCQkJICoKIAkJCSAqIE92ZXJ3cml0ZSB0aGUgb2xkIGl0ZW0g d2l0aCBuZXcgdHJ1bmNhdGVkIGhpZ2gga2V5IGRpcmVjdGx5LgogCQkJICogb2l0dXAgaXMgYWxy ZWFkeSBsb2NhdGVkIGF0IHRoZSBwaHlzaWNhbCBiZWdpbm5pbmcgb2YgdHVwbGUKQEAgLTk4Myw3 ICsxMDA3LDcgQEAgX2J0X2J1aWxkYWRkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0 ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIAkJQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0cyhz dGF0ZS0+YnRwc19sb3drZXksIHdzdGF0ZS0+aW5kZXgpID09IDAgfHwKIAkJCSAgICFQX0xFRlRN T1NUKChCVFBhZ2VPcGFxdWUpIFBhZ2VHZXRTcGVjaWFsUG9pbnRlcihvcGFnZSkpKTsKIAkJQlRy ZWVUdXBsZVNldERvd25MaW5rKHN0YXRlLT5idHBzX2xvd2tleSwgb2Jsa25vKTsKLQkJX2J0X2J1 aWxkYWRkKHdzdGF0ZSwgc3RhdGUtPmJ0cHNfbmV4dCwgc3RhdGUtPmJ0cHNfbG93a2V5KTsKKwkJ X2J0X2J1aWxkYWRkKHdzdGF0ZSwgc3RhdGUtPmJ0cHNfbmV4dCwgc3RhdGUtPmJ0cHNfbG93a2V5 LCAwKTsKIAkJcGZyZWUoc3RhdGUtPmJ0cHNfbG93a2V5KTsKIAogCQkvKgpAQCAtMTA0NSw2ICsx MDY5LDQzIEBAIF9idF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUg KnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJc3RhdGUtPmJ0cHNfbGFzdG9mZiA9IGxhc3Rfb2Zm OwogfQogCisvKgorICogRmluYWxpemUgcGVuZGluZyBwb3N0aW5nIGxpc3QgdHVwbGUsIGFuZCBh ZGQgaXQgdG8gdGhlIGluZGV4LiAgRmluYWwgdHVwbGUKKyAqIGlzIGJhc2VkIG9uIHNhdmVkIGJh c2UgdHVwbGUsIGFuZCBzYXZlZCBsaXN0IG9mIGhlYXAgVElEcy4KKyAqCisgKiBUaGlzIGlzIGFs bW9zdCBsaWtlIF9idF9kZWR1cF9maW5pc2hfcGVuZGluZygpLCBidXQgaXQgYWRkcyBhIG5ldyB0 dXBsZQorICogdXNpbmcgX2J0X2J1aWxkYWRkKCkuCisgKi8KK3N0YXRpYyB2b2lkCitfYnRfc29y dF9kZWR1cF9maW5pc2hfcGVuZGluZyhCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUg KnN0YXRlLAorCQkJCQkJCSAgQlREZWR1cFN0YXRlIGRzdGF0ZSkKK3sKKwlBc3NlcnQoZHN0YXRl LT5uaXRlbXMgPiAwKTsKKworCWlmIChkc3RhdGUtPm5pdGVtcyA9PSAxKQorCQlfYnRfYnVpbGRh ZGQod3N0YXRlLCBzdGF0ZSwgZHN0YXRlLT5iYXNlLCAwKTsKKwllbHNlCisJeworCQlJbmRleFR1 cGxlCXBvc3Rpbmd0dXBsZTsKKwkJU2l6ZQkJdHJ1bmNleHRyYTsKKworCQkvKiBmb3JtIGEgdHVw bGUgd2l0aCBhIHBvc3RpbmcgbGlzdCAqLworCQlwb3N0aW5ndHVwbGUgPSBfYnRfZm9ybV9wb3N0 aW5nKGRzdGF0ZS0+YmFzZSwKKwkJCQkJCQkJCQlkc3RhdGUtPmh0aWRzLAorCQkJCQkJCQkJCWRz dGF0ZS0+bmh0aWRzKTsKKwkJLyogQ2FsY3VsYXRlIHBvc3RpbmcgbGlzdCBvdmVyaGVhZCAqLwor CQl0cnVuY2V4dHJhID0gSW5kZXhUdXBsZVNpemUocG9zdGluZ3R1cGxlKSAtCisJCQlCVHJlZVR1 cGxlR2V0UG9zdGluZ09mZnNldChwb3N0aW5ndHVwbGUpOworCisJCV9idF9idWlsZGFkZCh3c3Rh dGUsIHN0YXRlLCBwb3N0aW5ndHVwbGUsIHRydW5jZXh0cmEpOworCQlwZnJlZShwb3N0aW5ndHVw bGUpOworCX0KKworCWRzdGF0ZS0+bmh0aWRzID0gMDsKKwlkc3RhdGUtPm5pdGVtcyA9IDA7CisJ ZHN0YXRlLT5waHlzdHVwc2l6ZSA9IDA7Cit9CisKIC8qCiAgKiBGaW5pc2ggd3JpdGluZyBvdXQg dGhlIGNvbXBsZXRlZCBidHJlZS4KICAqLwpAQCAtMTA5MCw3ICsxMTUxLDcgQEAgX2J0X3VwcGVy c2h1dGRvd24oQlRXcml0ZVN0YXRlICp3c3RhdGUsIEJUUGFnZVN0YXRlICpzdGF0ZSkKIAkJCUFz c2VydChCVHJlZVR1cGxlR2V0TkF0dHMocy0+YnRwc19sb3drZXksIHdzdGF0ZS0+aW5kZXgpID09 IDAgfHwKIAkJCQkgICAhUF9MRUZUTU9TVChvcGFxdWUpKTsKIAkJCUJUcmVlVHVwbGVTZXREb3du TGluayhzLT5idHBzX2xvd2tleSwgYmxrbm8pOwotCQkJX2J0X2J1aWxkYWRkKHdzdGF0ZSwgcy0+ YnRwc19uZXh0LCBzLT5idHBzX2xvd2tleSk7CisJCQlfYnRfYnVpbGRhZGQod3N0YXRlLCBzLT5i dHBzX25leHQsIHMtPmJ0cHNfbG93a2V5LCAwKTsKIAkJCXBmcmVlKHMtPmJ0cHNfbG93a2V5KTsK IAkJCXMtPmJ0cHNfbG93a2V5ID0gTlVMTDsKIAkJfQpAQCAtMTExMSw3ICsxMTcyLDggQEAgX2J0 X3VwcGVyc2h1dGRvd24oQlRXcml0ZVN0YXRlICp3c3RhdGUsIEJUUGFnZVN0YXRlICpzdGF0ZSkK IAkgKiBieSBmaWxsaW5nIGluIGEgdmFsaWQgbWFnaWMgbnVtYmVyIGluIHRoZSBtZXRhcGFnZS4K IAkgKi8KIAltZXRhcGFnZSA9IChQYWdlKSBwYWxsb2MoQkxDS1NaKTsKLQlfYnRfaW5pdG1ldGFw YWdlKG1ldGFwYWdlLCByb290Ymxrbm8sIHJvb3RsZXZlbCk7CisJX2J0X2luaXRtZXRhcGFnZSht ZXRhcGFnZSwgcm9vdGJsa25vLCByb290bGV2ZWwsCisJCQkJCSB3c3RhdGUtPmluc2tleS0+c2Fm ZWRlZHVwKTsKIAlfYnRfYmx3cml0ZXBhZ2Uod3N0YXRlLCBtZXRhcGFnZSwgQlRSRUVfTUVUQVBB R0UpOwogfQogCkBAIC0xMTMyLDYgKzExOTQsOSBAQCBfYnRfbG9hZChCVFdyaXRlU3RhdGUgKndz dGF0ZSwgQlRTcG9vbCAqYnRzcG9vbCwgQlRTcG9vbCAqYnRzcG9vbDIpCiAJCQkJa2V5c3ogPSBJ bmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKHdzdGF0ZS0+aW5kZXgpOwogCVNv cnRTdXBwb3J0IHNvcnRLZXlzOwogCWludDY0CQl0dXBsZXNfZG9uZSA9IDA7CisJYm9vbAkJZGVk dXBsaWNhdGU7CisKKwlkZWR1cGxpY2F0ZSA9IHdzdGF0ZS0+aW5za2V5LT5zYWZlZGVkdXAgJiYg QlRHZXRVc2VEZWR1cCh3c3RhdGUtPmluZGV4KTsKIAogCWlmIChtZXJnZSkKIAl7CkBAIC0xMjI4 LDEyICsxMjkzLDEyIEBAIF9idF9sb2FkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFNwb29sICpi dHNwb29sLCBCVFNwb29sICpidHNwb29sMikKIAogCQkJaWYgKGxvYWQxKQogCQkJewotCQkJCV9i dF9idWlsZGFkZCh3c3RhdGUsIHN0YXRlLCBpdHVwKTsKKwkJCQlfYnRfYnVpbGRhZGQod3N0YXRl LCBzdGF0ZSwgaXR1cCwgMCk7CiAJCQkJaXR1cCA9IHR1cGxlc29ydF9nZXRpbmRleHR1cGxlKGJ0 c3Bvb2wtPnNvcnRzdGF0ZSwgdHJ1ZSk7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJX2J0X2J1 aWxkYWRkKHdzdGF0ZSwgc3RhdGUsIGl0dXAyKTsKKwkJCQlfYnRfYnVpbGRhZGQod3N0YXRlLCBz dGF0ZSwgaXR1cDIsIDApOwogCQkJCWl0dXAyID0gdHVwbGVzb3J0X2dldGluZGV4dHVwbGUoYnRz cG9vbDItPnNvcnRzdGF0ZSwgdHJ1ZSk7CiAJCQl9CiAKQEAgLTEyNDMsOSArMTMwOCwxMDAgQEAg X2J0X2xvYWQoQlRXcml0ZVN0YXRlICp3c3RhdGUsIEJUU3Bvb2wgKmJ0c3Bvb2wsIEJUU3Bvb2wg KmJ0c3Bvb2wyKQogCQl9CiAJCXBmcmVlKHNvcnRLZXlzKTsKIAl9CisJZWxzZSBpZiAoZGVkdXBs aWNhdGUpCisJeworCQkvKiBtZXJnZSBpcyB1bm5lY2Vzc2FyeSwgZGVkdXBsaWNhdGUgaW50byBw b3N0aW5nIGxpc3RzICovCisJCUJURGVkdXBTdGF0ZSBkc3RhdGU7CisKKwkJZHN0YXRlID0gKEJU RGVkdXBTdGF0ZSkgcGFsbG9jKHNpemVvZihCVERlZHVwU3RhdGVEYXRhKSk7CisJCWRzdGF0ZS0+ bWF4cG9zdGluZ3NpemUgPSAwOyAvKiBzZXQgbGF0ZXIgKi8KKwkJZHN0YXRlLT5jaGVja2luZ3Vu aXF1ZSA9IGZhbHNlOyAvKiB1bnVzZWQgKi8KKwkJZHN0YXRlLT5za2lwcGVkYmFzZSA9IEludmFs aWRPZmZzZXROdW1iZXI7CisJCS8qIE1ldGFkYXRhIGFib3V0IGJhc2UgdHVwbGUgb2YgY3VycmVu dCBwZW5kaW5nIHBvc3RpbmcgbGlzdCAqLworCQlkc3RhdGUtPmJhc2UgPSBOVUxMOworCQlkc3Rh dGUtPmJhc2VvZmYgPSBJbnZhbGlkT2Zmc2V0TnVtYmVyOwkvKiB1bnVzZWQgKi8KKwkJZHN0YXRl LT5iYXNldHVwc2l6ZSA9IDA7CisJCS8qIE1ldGFkYXRhIGFib3V0IGN1cnJlbnQgcGVuZGluZyBw b3N0aW5nIGxpc3QgVElEcyAqLworCQlkc3RhdGUtPmh0aWRzID0gTlVMTDsKKwkJZHN0YXRlLT5u aHRpZHMgPSAwOworCQlkc3RhdGUtPm5pdGVtcyA9IDA7CisJCWRzdGF0ZS0+cGh5c3R1cHNpemUg PSAwOwkvKiB1bnVzZWQgKi8KKworCQl3aGlsZSAoKGl0dXAgPSB0dXBsZXNvcnRfZ2V0aW5kZXh0 dXBsZShidHNwb29sLT5zb3J0c3RhdGUsCisJCQkJCQkJCQkJCSAgIHRydWUpKSAhPSBOVUxMKQor CQl7CisJCQkvKiBXaGVuIHdlIHNlZSBmaXJzdCB0dXBsZSwgY3JlYXRlIGZpcnN0IGluZGV4IHBh Z2UgKi8KKwkJCWlmIChzdGF0ZSA9PSBOVUxMKQorCQkJeworCQkJCXN0YXRlID0gX2J0X3BhZ2Vz dGF0ZSh3c3RhdGUsIDApOworCisJCQkJLyoKKwkJCQkgKiBMaW1pdCBzaXplIG9mIHBvc3Rpbmcg bGlzdCB0dXBsZXMgdG8gMS8xMCBzcGFjZSB3ZSB3YW50IHRvCisJCQkJICogbGVhdmUgYmVoaW5k IG9uIHRoZSBwYWdlLCBwbHVzIHNwYWNlIGZvciBmaW5hbCBpdGVtJ3MgbGluZQorCQkJCSAqIHBv aW50ZXIuICBUaGlzIGlzIGVxdWFsIHRvIHRoZSBzcGFjZSB0aGF0IHdlJ2QgbGlrZSB0bworCQkJ CSAqIGxlYXZlIGJlaGluZCBvbiBlYWNoIGxlYWYgcGFnZSB3aGVuIGZpbGxmYWN0b3IgaXMgOTAs CisJCQkJICogYWxsb3dpbmcgdXMgdG8gZ2V0IGNsb3NlIHRvIGZpbGxmYWN0b3IlIHNwYWNlIHV0 aWxpemF0aW9uCisJCQkJICogd2hlbiB0aGVyZSBoYXBwZW4gdG8gYmUgYSBncmVhdCBtYW55IGR1 cGxpY2F0ZXMuICAoVGhpcworCQkJCSAqIG1ha2VzIGhpZ2hlciBsZWFmIGZpbGxmYWN0b3Igc2V0 dGluZ3MgaW5lZmZlY3RpdmUgd2hlbgorCQkJCSAqIGJ1aWxkaW5nIGluZGV4ZXMgdGhhdCBoYXZl IG1hbnkgZHVwbGljYXRlcywgYnV0IHBhY2tpbmcKKwkJCQkgKiBsZWFmIHBhZ2VzIGZ1bGwgd2l0 aCBmZXcgdmVyeSBsYXJnZSB0dXBsZXMgZG9lc24ndCBzZWVtCisJCQkJICogbGlrZSBhIHVzZWZ1 bCBnb2FsLikKKwkJCQkgKi8KKwkJCQlkc3RhdGUtPm1heHBvc3RpbmdzaXplID0gTUFYQUxJR05f RE9XTigoQkxDS1NaICogMTAgLyAxMDApKSAtCisJCQkJCXNpemVvZihJdGVtSWREYXRhKTsKKwkJ CQlBc3NlcnQoZHN0YXRlLT5tYXhwb3N0aW5nc2l6ZSA8PSBCVE1heEl0ZW1TaXplKHN0YXRlLT5i dHBzX3BhZ2UpICYmCisJCQkJCSAgIGRzdGF0ZS0+bWF4cG9zdGluZ3NpemUgPD0gSU5ERVhfU0la RV9NQVNLKTsKKwkJCQlkc3RhdGUtPmh0aWRzID0gcGFsbG9jKGRzdGF0ZS0+bWF4cG9zdGluZ3Np emUpOworCisJCQkJLyogc3RhcnQgbmV3IHBlbmRpbmcgcG9zdGluZyBsaXN0IHdpdGggaXR1cCBj b3B5ICovCisJCQkJX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoZHN0YXRlLCBDb3B5SW5kZXhUdXBs ZShpdHVwKSwKKwkJCQkJCQkJCQlJbnZhbGlkT2Zmc2V0TnVtYmVyKTsKKwkJCX0KKwkJCWVsc2Ug aWYgKF9idF9rZWVwX25hdHRzX2Zhc3Qod3N0YXRlLT5pbmRleCwgZHN0YXRlLT5iYXNlLAorCQkJ CQkJCQkJCSBpdHVwKSA+IGtleXN6ICYmCisJCQkJCSBfYnRfZGVkdXBfc2F2ZV9odGlkKGRzdGF0 ZSwgaXR1cCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUdXBsZSBpcyBlcXVhbCB0byBiYXNlIHR1 cGxlIG9mIHBlbmRpbmcgcG9zdGluZyBsaXN0LiAgSGVhcAorCQkJCSAqIFRJRCBmcm9tIGl0dXAg aGFzIGJlZW4gc2F2ZWQgaW4gc3RhdGUuCisJCQkJICovCisJCQl9CisJCQllbHNlCisJCQl7CisJ CQkJLyoKKwkJCQkgKiBUdXBsZSBpcyBub3QgZXF1YWwgdG8gcGVuZGluZyBwb3N0aW5nIGxpc3Qg dHVwbGUsIG9yCisJCQkJICogX2J0X2RlZHVwX3NhdmVfaHRpZCgpIG9wdGVkIHRvIG5vdCBtZXJn ZSBjdXJyZW50IGl0ZW0gaW50bworCQkJCSAqIHBlbmRpbmcgcG9zdGluZyBsaXN0LgorCQkJCSAq LworCQkJCV9idF9zb3J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKHdzdGF0ZSwgc3RhdGUsIGRzdGF0 ZSk7CisJCQkJcGZyZWUoZHN0YXRlLT5iYXNlKTsKKworCQkJCS8qIHN0YXJ0IG5ldyBwZW5kaW5n IHBvc3RpbmcgbGlzdCB3aXRoIGl0dXAgY29weSAqLworCQkJCV9idF9kZWR1cF9zdGFydF9wZW5k aW5nKGRzdGF0ZSwgQ29weUluZGV4VHVwbGUoaXR1cCksCisJCQkJCQkJCQkJSW52YWxpZE9mZnNl dE51bWJlcik7CisJCQl9CisKKwkJCS8qIFJlcG9ydCBwcm9ncmVzcyAqLworCQkJcGdzdGF0X3By b2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQTEVTX0RPTkUsCisJCQkJ CQkJCQkJICsrdHVwbGVzX2RvbmUpOworCQl9CisKKwkJaWYgKHN0YXRlKQorCQl7CisJCQkvKgor CQkJICogSGFuZGxlIHRoZSBsYXN0IGl0ZW0gKHRoZXJlIG11c3QgYmUgYSBsYXN0IGl0ZW0gd2hl biB0aGUKKwkJCSAqIHR1cGxlc29ydCByZXR1cm5lZCBvbmUgb3IgbW9yZSB0dXBsZXMpCisJCQkg Ki8KKwkJCV9idF9zb3J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKHdzdGF0ZSwgc3RhdGUsIGRzdGF0 ZSk7CisJCQlwZnJlZShkc3RhdGUtPmJhc2UpOworCQkJcGZyZWUoZHN0YXRlLT5odGlkcyk7CisJ CX0KKworCQlwZnJlZShkc3RhdGUpOworCX0KIAllbHNlCiAJewotCQkvKiBtZXJnZSBpcyB1bm5l Y2Vzc2FyeSAqLworCQkvKiBtZXJnaW5nIGFuZCBkZWR1cGxpY2F0aW9uIGFyZSBib3RoIHVubmVj ZXNzYXJ5ICovCiAJCXdoaWxlICgoaXR1cCA9IHR1cGxlc29ydF9nZXRpbmRleHR1cGxlKGJ0c3Bv b2wtPnNvcnRzdGF0ZSwKIAkJCQkJCQkJCQkJICAgdHJ1ZSkpICE9IE5VTEwpCiAJCXsKQEAgLTEy NTMsNyArMTQwOSw3IEBAIF9idF9sb2FkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFNwb29sICpi dHNwb29sLCBCVFNwb29sICpidHNwb29sMikKIAkJCWlmIChzdGF0ZSA9PSBOVUxMKQogCQkJCXN0 YXRlID0gX2J0X3BhZ2VzdGF0ZSh3c3RhdGUsIDApOwogCi0JCQlfYnRfYnVpbGRhZGQod3N0YXRl LCBzdGF0ZSwgaXR1cCk7CisJCQlfYnRfYnVpbGRhZGQod3N0YXRlLCBzdGF0ZSwgaXR1cCwgMCk7 CiAKIAkJCS8qIFJlcG9ydCBwcm9ncmVzcyAqLwogCQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9w YXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQTEVTX0RPTkUsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNwbGl0bG9jLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHNwbGl0bG9jLmMKaW5kZXggNzZjMmQ5NDVjOC4uOGJhMDU1YmU5ZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzcGxpdGxvYy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c3BsaXRsb2MuYwpAQCAtMTgzLDYgKzE4Myw5IEBAIF9idF9m aW5kc3BsaXRsb2MoUmVsYXRpb24gcmVsLAogCXN0YXRlLm1pbmZpcnN0cmlnaHRzeiA9IFNJWkVf TUFYOwogCXN0YXRlLm5ld2l0ZW1vZmYgPSBuZXdpdGVtb2ZmOwogCisJLyogbmV3aXRlbSBjYW5u b3QgYmUgYSBwb3N0aW5nIGxpc3QgaXRlbSAqLworCUFzc2VydCghQlRyZWVUdXBsZUlzUG9zdGlu ZyhuZXdpdGVtKSk7CisKIAkvKgogCSAqIG1heHNwbGl0cyBzaG91bGQgbmV2ZXIgZXhjZWVkIG1h eG9mZiBiZWNhdXNlIHRoZXJlIHdpbGwgYmUgYXQgbW9zdCBhcwogCSAqIG1hbnkgY2FuZGlkYXRl IHNwbGl0IHBvaW50cyBhcyB0aGVyZSBhcmUgcG9pbnRzIF9iZXR3ZWVuXyB0dXBsZXMsIG9uY2UK QEAgLTQ1OSw2ICs0NjIsNyBAQCBfYnRfcmVjc3BsaXRsb2MoRmluZFNwbGl0RGF0YSAqc3RhdGUs CiAJaW50MTYJCWxlZnRmcmVlLAogCQkJCXJpZ2h0ZnJlZTsKIAlTaXplCQlmaXJzdHJpZ2h0aXRl bXN6OworCVNpemUJCXBvc3RpbmdzeiA9IDA7CiAJYm9vbAkJbmV3aXRlbWlzZmlyc3RvbnJpZ2h0 OwogCiAJLyogSXMgdGhlIG5ldyBpdGVtIGdvaW5nIHRvIGJlIHRoZSBmaXJzdCBpdGVtIG9uIHRo ZSByaWdodCBwYWdlPyAqLwpAQCAtNDY4LDggKzQ3MiwzMCBAQCBfYnRfcmVjc3BsaXRsb2MoRmlu ZFNwbGl0RGF0YSAqc3RhdGUsCiAJaWYgKG5ld2l0ZW1pc2ZpcnN0b25yaWdodCkKIAkJZmlyc3Ry aWdodGl0ZW1zeiA9IHN0YXRlLT5uZXdpdGVtc3o7CiAJZWxzZQorCXsKIAkJZmlyc3RyaWdodGl0 ZW1zeiA9IGZpcnN0b2xkb25yaWdodHN6OwogCisJCS8qCisJCSAqIENhbGN1bGF0ZSBzdWZmaXgg dHJ1bmNhdGlvbiBzcGFjZSBzYXZpbmcgd2hlbiBmaXJzdHJpZ2h0IGlzIGEKKwkJICogcG9zdGlu ZyBsaXN0IHR1cGxlLCB0aG91Z2ggb25seSB3aGVuIHRoZSBmaXJzdHJpZ2h0IGlzIG92ZXIgNjQK KwkJICogYnl0ZXMgaW5jbHVkaW5nIGxpbmUgcG9pbnRlciBvdmVyaGVhZCAoYXJiaXRyYXJ5KS4g IFRoaXMgYXZvaWRzCisJCSAqIGFjY2Vzc2luZyB0aGUgdHVwbGUgaW4gY2FzZXMgd2hlcmUgaXRz IHBvc3RpbmcgbGlzdCBtdXN0IGJlIHZlcnkKKwkJICogc21hbGwgKGlmIGZpcnN0cmlnaHQgaGFz IG9uZSBhdCBhbGwpLgorCQkgKi8KKwkJaWYgKHN0YXRlLT5pc19sZWFmICYmIGZpcnN0cmlnaHRp dGVtc3ogPiA2NCkKKwkJeworCQkJSXRlbUlkCQlpdGVtaWQ7CisJCQlJbmRleFR1cGxlCW5ld2hp Z2hrZXk7CisKKwkJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQoc3RhdGUtPnBhZ2UsIGZpcnN0b2xk b25yaWdodCk7CisJCQluZXdoaWdoa2V5ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRl LT5wYWdlLCBpdGVtaWQpOworCisJCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhuZXdoaWdoa2V5 KSkKKwkJCQlwb3N0aW5nc3ogPSBJbmRleFR1cGxlU2l6ZShuZXdoaWdoa2V5KSAtCisJCQkJCUJU cmVlVHVwbGVHZXRQb3N0aW5nT2Zmc2V0KG5ld2hpZ2hrZXkpOworCQl9CisJfQorCiAJLyogQWNj b3VudCBmb3IgYWxsIHRoZSBvbGQgdHVwbGVzICovCiAJbGVmdGZyZWUgPSBzdGF0ZS0+bGVmdHNw YWNlIC0gb2xkZGF0YWl0ZW1zdG9sZWZ0OwogCXJpZ2h0ZnJlZSA9IHN0YXRlLT5yaWdodHNwYWNl IC0KQEAgLTQ5MSwxMSArNTE3LDE3IEBAIF9idF9yZWNzcGxpdGxvYyhGaW5kU3BsaXREYXRhICpz dGF0ZSwKIAkgKiBJZiB3ZSBhcmUgb24gdGhlIGxlYWYgbGV2ZWwsIGFzc3VtZSB0aGF0IHN1ZmZp eCB0cnVuY2F0aW9uIGNhbm5vdCBhdm9pZAogCSAqIGFkZGluZyBhIGhlYXAgVElEIHRvIHRoZSBs ZWZ0IGhhbGYncyBuZXcgaGlnaCBrZXkgd2hlbiBzcGxpdHRpbmcgYXQgdGhlCiAJICogbGVhZiBs ZXZlbC4gIEluIHByYWN0aWNlIHRoZSBuZXcgaGlnaCBrZXkgd2lsbCBvZnRlbiBiZSBzbWFsbGVy IGFuZAotCSAqIHdpbGwgcmFyZWx5IGJlIGxhcmdlciwgYnV0IGNvbnNlcnZhdGl2ZWx5IGFzc3Vt ZSB0aGUgd29yc3QgY2FzZS4KKwkgKiB3aWxsIHJhcmVseSBiZSBsYXJnZXIsIGJ1dCBjb25zZXJ2 YXRpdmVseSBhc3N1bWUgdGhlIHdvcnN0IGNhc2UuICBXZSBkbworCSAqIGdvIHRvIHRoZSB0cm91 YmxlIG9mIHN1YnRyYWN0aW5nIGF3YXkgcG9zdGluZyBsaXN0IG92ZXJoZWFkLCB0aG91Z2gKKwkg KiBvbmx5IHdoZW4gaXQgbG9va3MgbGlrZSBpdCB3aWxsIG1ha2UgYW4gYXBwcmVjaWFibGUgZGlm ZmVyZW5jZS4KKwkgKiAoUG9zdGluZyBsaXN0cyBhcmUgdGhlIG9ubHkgY2FzZSB3aGVyZSB0cnVu Y2F0aW9uIHdpbGwgdHlwaWNhbGx5IG1ha2UKKwkgKiB0aGUgZmluYWwgaGlnaCBrZXkgZmFyIHNt YWxsZXIgdGhhbiBmaXJzdHJpZ2h0LCBzbyBiZWluZyBhIGJpdCBtb3JlCisJICogcHJlY2lzZSB0 aGVyZSBub3RpY2VhYmx5IGltcHJvdmVzIHRoZSBiYWxhbmNlIG9mIGZyZWUgc3BhY2UuKQogCSAq LwogCWlmIChzdGF0ZS0+aXNfbGVhZikKIAkJbGVmdGZyZWUgLT0gKGludDE2KSAoZmlyc3RyaWdo dGl0ZW1zeiArCi0JCQkJCQkJIE1BWEFMSUdOKHNpemVvZihJdGVtUG9pbnRlckRhdGEpKSk7CisJ CQkJCQkJIE1BWEFMSUdOKHNpemVvZihJdGVtUG9pbnRlckRhdGEpKSAtCisJCQkJCQkJIHBvc3Rp bmdzeik7CiAJZWxzZQogCQlsZWZ0ZnJlZSAtPSAoaW50MTYpIGZpcnN0cmlnaHRpdGVtc3o7CiAK QEAgLTY5MSw3ICs3MjMsOCBAQCBfYnRfYWZ0ZXJuZXdpdGVtb2ZmKEZpbmRTcGxpdERhdGEgKnN0 YXRlLCBPZmZzZXROdW1iZXIgbWF4b2ZmLAogCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQoc3RhdGUt PnBhZ2UsIE9mZnNldE51bWJlclByZXYoc3RhdGUtPm5ld2l0ZW1vZmYpKTsKIAl0dXAgPSAoSW5k ZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPnBhZ2UsIGl0ZW1pZCk7CiAJLyogRG8gY2hlYXBl ciB0ZXN0IGZpcnN0ICovCi0JaWYgKCFfYnRfYWRqYWNlbnRodGlkKCZ0dXAtPnRfdGlkLCAmc3Rh dGUtPm5ld2l0ZW0tPnRfdGlkKSkKKwlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyh0dXApIHx8CisJ CSFfYnRfYWRqYWNlbnRodGlkKCZ0dXAtPnRfdGlkLCAmc3RhdGUtPm5ld2l0ZW0tPnRfdGlkKSkK IAkJcmV0dXJuIGZhbHNlOwogCS8qIENoZWNrIHNhbWUgY29uZGl0aW9ucyBhcyByaWdodG1vc3Qg aXRlbSBjYXNlLCB0b28gKi8KIAlrZWVwbmF0dHMgPSBfYnRfa2VlcF9uYXR0c19mYXN0KHN0YXRl LT5yZWwsIHR1cCwgc3RhdGUtPm5ld2l0ZW0pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGls cy5jCmluZGV4IDVhYjRlNzEyZjEuLjVlZDA5NjQwYWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHV0aWxzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nh bi5oIgorI2luY2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3By b2dyZXNzLmgiCiAjaW5jbHVkZSAibGliL3F1bmlxdWUuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKQEAgLTEwNyw3ICsxMDgsMTMgQEAgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4 VHVwbGUgaXR1cCkKIAkgKi8KIAlrZXkgPSBwYWxsb2Mob2Zmc2V0b2YoQlRTY2FuSW5zZXJ0RGF0 YSwgc2NhbmtleXMpICsKIAkJCQkgc2l6ZW9mKFNjYW5LZXlEYXRhKSAqIGluZG5rZXlhdHRzKTsK LQlrZXktPmhlYXBrZXlzcGFjZSA9IGl0dXAgPT0gTlVMTCB8fCBfYnRfaGVhcGtleXNwYWNlKHJl bCk7CisJaWYgKGl0dXApCisJCV9idF9tZXRhdmVyc2lvbihyZWwsICZrZXktPmhlYXBrZXlzcGFj ZSwgJmtleS0+c2FmZWRlZHVwKTsKKwllbHNlCisJeworCQlrZXktPmhlYXBrZXlzcGFjZSA9IHRy dWU7CisJCWtleS0+c2FmZWRlZHVwID0gX2J0X29wY2xhc3Nlc19zdXBwb3J0X2RlZHVwKHJlbCk7 CisJfQogCWtleS0+YW55bnVsbGtleXMgPSBmYWxzZTsJLyogaW5pdGlhbCBhc3N1bXB0aW9uICov CiAJa2V5LT5uZXh0a2V5ID0gZmFsc2U7CiAJa2V5LT5waXZvdHNlYXJjaCA9IGZhbHNlOwpAQCAt MTM3Myw2ICsxMzgwLDcgQEAgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cywKIAkJCSAqIGF0dHJpYnV0ZSBwYXNzZXMgdGhlIHF1 YWwuCiAJCQkgKi8KIAkJCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpOworCQkJ QXNzZXJ0KEJUcmVlVHVwbGVJc1Bpdm90KHR1cGxlKSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBA IC0xNTM0LDYgKzE1NDIsNyBAQCBfYnRfY2hlY2tfcm93Y29tcGFyZShTY2FuS2V5IHNrZXksIElu ZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cywKIAkJCSAqIGF0dHJpYnV0ZSBwYXNzZXMgdGhl IHF1YWwuCiAJCQkgKi8KIAkJCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpOwor CQkJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bpdm90KHR1cGxlKSk7CiAJCQljbXByZXN1bHQgPSAwOwog CQkJaWYgKHN1YmtleS0+c2tfZmxhZ3MgJiBTS19ST1dfRU5EKQogCQkJCWJyZWFrOwpAQCAtMTc3 MywxMCArMTc4Miw2NSBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJewog CQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CiAJCQlJbmRleFR1 cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCQkJYm9v bAkJa2lsbHR1cGxlID0gZmFsc2U7CiAKLQkJCWlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxl LT50X3RpZCwgJmtpdGVtLT5oZWFwVGlkKSkKKwkJCWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0 dXBsZSkpCiAJCQl7Ci0JCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KKwkJCQlpbnQJCQlwaSA9IGkg KyAxOworCQkJCWludAkJCW5wb3N0aW5nID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXBsZSk7 CisJCQkJaW50CQkJajsKKworCQkJCS8qCisJCQkJICogTm90ZSB0aGF0IHdlIHJlbHkgb24gdGhl IGFzc3VtcHRpb24gdGhhdCBoZWFwIFRJRHMgaW4gdGhlCisJCQkJICogc2NhbnBvcyBpdGVtcyBh cnJheSBhcmUgYWx3YXlzIGluIGFzY2VuZGluZyBoZWFwIFRJRCBvcmRlcgorCQkJCSAqIHdpdGhp biBhIHBvc3RpbmcgbGlzdAorCQkJCSAqLworCQkJCWZvciAoaiA9IDA7IGogPCBucG9zdGluZzsg aisrKQorCQkJCXsKKwkJCQkJSXRlbVBvaW50ZXIgaXRlbSA9IEJUcmVlVHVwbGVHZXRQb3N0aW5n TihpdHVwbGUsIGopOworCisJCQkJCWlmICghSXRlbVBvaW50ZXJFcXVhbHMoaXRlbSwgJmtpdGVt LT5oZWFwVGlkKSkKKwkJCQkJCWJyZWFrOwkvKiBvdXQgb2YgcG9zdGluZyBsaXN0IGxvb3AgKi8K KworCQkJCQkvKiBraXRlbSBtdXN0IGhhdmUgbWF0Y2hpbmcgb2ZmbnVtIHdoZW4gaGVhcCBUSURz IG1hdGNoICovCisJCQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtKTsKKwor CQkJCQkvKgorCQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJlLgorCQkJCQkg KgorCQkJCQkgKiBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgbm90IGFkdmFuY2luZyBr aXRlbSBoZXJlCisJCQkJCSAqIHdpbGwgcHJldmVudCB1cyBmcm9tIGNvbnNpZGVyaW5nIHRoZSBw b3N0aW5nIGxpc3QgdHVwbGUKKwkJCQkJICogZnVsbHkgZGVhZCBieSBub3QgbWF0Y2hpbmcgaXRz IG5leHQgaGVhcCBUSUQgaW4gbmV4dAorCQkJCQkgKiBsb29wIGl0ZXJhdGlvbi4KKwkJCQkJICoK KwkJCQkJICogSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIGlzIHRoZSBmaW5hbCBoZWFwIFRJ RCBpbgorCQkJCQkgKiB0aGUgcG9zdGluZyBsaXN0IHR1cGxlLCB0aGVuIHR1cGxlIGdldHMga2ls bGVkCisJCQkJCSAqIHJlZ2FyZGxlc3MgKGkuZS4gd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo ZSBsYXN0CisJCQkJCSAqIGtpdGVtIGlzIGFsc28gdGhlIGxhc3QgaGVhcCBUSUQgaW4gdGhlIGxh c3QgaW5kZXggdHVwbGUKKwkJCQkJICogY29ycmVjdGx5IC0tIHBvc3RpbmcgdHVwbGUgc3RpbGwg Z2V0cyBraWxsZWQpLgorCQkJCQkgKi8KKwkJCQkJaWYgKHBpIDwgbnVtS2lsbGVkKQorCQkJCQkJ a2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW3BpKytdXTsKKwkJCQl9 CisKKwkJCQkvKgorCQkJCSAqIERvbid0IGJvdGhlciBhZHZhbmNpbmcgdGhlIG91dGVybW9zdCBs b29wJ3MgaW50IGl0ZXJhdG9yIHRvCisJCQkJICogYXZvaWQgcHJvY2Vzc2luZyBraWxsZWQgaXRl bXMgdGhhdCByZWxhdGUgdG8gdGhlIHNhbWUKKwkJCQkgKiBvZmZudW0vcG9zdGluZyBsaXN0IHR1 cGxlLiAgVGhpcyBtaWNyby1vcHRpbWl6YXRpb24gaGFyZGx5CisJCQkJICogc2VlbXMgd29ydGgg aXQuICAoRnVydGhlciBpdGVyYXRpb25zIG9mIHRoZSBvdXRlcm1vc3QgbG9vcAorCQkJCSAqIHdp bGwgZmFpbCB0byBtYXRjaCBvbiB0aGlzIHNhbWUgcG9zdGluZyBsaXN0J3MgZmlyc3QgaGVhcAor CQkJCSAqIFRJRCBpbnN0ZWFkLCBzbyB3ZSdsbCBhZHZhbmNlIHRvIHRoZSBuZXh0IG9mZm51bS9p bmRleAorCQkJCSAqIHR1cGxlIHByZXR0eSBxdWlja2x5LikKKwkJCQkgKi8KKwkJCQlpZiAoaiA9 PSBucG9zdGluZykKKwkJCQkJa2lsbHR1cGxlID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKEl0 ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAma2l0ZW0tPmhlYXBUaWQpKQorCQkJCWtp bGx0dXBsZSA9IHRydWU7CisKKwkJCWlmIChraWxsdHVwbGUpCisJCQl7CisJCQkJLyogZm91bmQg dGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLwogCQkJCUl0ZW1JZE1hcmtEZWFkKGlp ZCk7CiAJCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKIAkJCQlicmVhazsJCQkvKiBvdXQgb2Yg aW5uZXIgc2VhcmNoIGxvb3AgKi8KQEAgLTIwMTcsNyArMjA4MSw5IEBAIGJ0b3B0aW9ucyhEYXR1 bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKQogCXN0YXRpYyBjb25zdCByZWxvcHRfcGFyc2Vf ZWx0IHRhYltdID0gewogCQl7ImZpbGxmYWN0b3IiLCBSRUxPUFRfVFlQRV9JTlQsIG9mZnNldG9m KEJUT3B0aW9ucywgZmlsbGZhY3Rvcil9LAogCQl7InZhY3V1bV9jbGVhbnVwX2luZGV4X3NjYWxl X2ZhY3RvciIsIFJFTE9QVF9UWVBFX1JFQUwsCi0JCW9mZnNldG9mKEJUT3B0aW9ucywgdmFjdXVt X2NsZWFudXBfaW5kZXhfc2NhbGVfZmFjdG9yKX0KKwkJb2Zmc2V0b2YoQlRPcHRpb25zLCB2YWN1 dW1fY2xlYW51cF9pbmRleF9zY2FsZV9mYWN0b3IpfSwKKwkJeyJkZWR1cGxpY2F0ZV9pdGVtcyIs IFJFTE9QVF9UWVBFX0JPT0wsCisJCW9mZnNldG9mKEJUT3B0aW9ucywgZGVkdXBsaWNhdGVfaXRl bXMpfQogCiAJfTsKIApAQCAtMjExOCwxMSArMjE4NCwxMCBAQCBfYnRfdHJ1bmNhdGUoUmVsYXRp b24gcmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQsCiAJU2l6 ZQkJbmV3c2l6ZTsKIAogCS8qCi0JICogV2Ugc2hvdWxkIG9ubHkgZXZlciB0cnVuY2F0ZSBsZWFm IGluZGV4IHR1cGxlcy4gIEl0J3MgbmV2ZXIgb2theSB0bwotCSAqIHRydW5jYXRlIGEgc2Vjb25k IHRpbWUuCisJICogV2Ugc2hvdWxkIG9ubHkgZXZlciB0cnVuY2F0ZSBub24tcGl2b3QgdHVwbGVz IGZyb20gbGVhZiBwYWdlcy4gIEl0J3MKKwkgKiBuZXZlciBva2F5IHRvIHRydW5jYXRlIHdoZW4g c3BsaXR0aW5nIGFuIGludGVybmFsIHBhZ2UuCiAJICovCi0JQXNzZXJ0KEJUcmVlVHVwbGVHZXRO QXR0cyhsYXN0bGVmdCwgcmVsKSA9PSBuYXR0cyk7Ci0JQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0 cyhmaXJzdHJpZ2h0LCByZWwpID09IG5hdHRzKTsKKwlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bpdm90 KGxhc3RsZWZ0KSAmJiAhQlRyZWVUdXBsZUlzUGl2b3QoZmlyc3RyaWdodCkpOwogCiAJLyogRGV0 ZXJtaW5lIGhvdyBtYW55IGF0dHJpYnV0ZXMgbXVzdCBiZSBrZXB0IGluIHRydW5jYXRlZCB0dXBs ZSAqLwogCWtlZXBuYXR0cyA9IF9idF9rZWVwX25hdHRzKHJlbCwgbGFzdGxlZnQsIGZpcnN0cmln aHQsIGl0dXBfa2V5KTsKQEAgLTIxMzgsNiArMjIwMywxOSBAQCBfYnRfdHJ1bmNhdGUoUmVsYXRp b24gcmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQsCiAKIAkJ cGl2b3QgPSBpbmRleF90cnVuY2F0ZV90dXBsZShpdHVwZGVzYywgZmlyc3RyaWdodCwga2VlcG5h dHRzKTsKIAorCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhwaXZvdCkpCisJCXsKKwkJCS8qCisJ CQkgKiBpbmRleF90cnVuY2F0ZV90dXBsZSgpIGp1c3QgcmV0dXJucyBhIHN0cmFpZ2h0IGNvcHkg b2YKKwkJCSAqIGZpcnN0cmlnaHQgd2hlbiBpdCBoYXMgbm8ga2V5IGF0dHJpYnV0ZXMgdG8gdHJ1 bmNhdGUuICBXZSBuZWVkCisJCQkgKiB0byB0cnVuY2F0ZSBhd2F5IHRoZSBwb3N0aW5nIGxpc3Qg b3Vyc2VsdmVzLgorCQkJICovCisJCQlBc3NlcnQoa2VlcG5hdHRzID09IG5rZXlhdHRzKTsKKwkJ CUFzc2VydChuYXR0cyA9PSBua2V5YXR0cyk7CisJCQlwaXZvdC0+dF9pbmZvICY9IH5JTkRFWF9T SVpFX01BU0s7CisJCQlwaXZvdC0+dF9pbmZvIHw9IE1BWEFMSUdOKEJUcmVlVHVwbGVHZXRQb3N0 aW5nT2Zmc2V0KGZpcnN0cmlnaHQpKTsKKwkJfQorCiAJCS8qCiAJCSAqIElmIHRoZXJlIGlzIGEg ZGlzdGluZ3Vpc2hpbmcga2V5IGF0dHJpYnV0ZSB3aXRoaW4gbmV3IHBpdm90IHR1cGxlLAogCQkg KiB0aGVyZSBpcyBubyBuZWVkIHRvIGFkZCBhbiBleHBsaWNpdCBoZWFwIFRJRCBhdHRyaWJ1dGUK QEAgLTIxNTQsNiArMjIzMiw4IEBAIF9idF90cnVuY2F0ZShSZWxhdGlvbiByZWwsIEluZGV4VHVw bGUgbGFzdGxlZnQsIEluZGV4VHVwbGUgZmlyc3RyaWdodCwKIAkJICogYXR0cmlidXRlIHRvIHRo ZSBuZXcgcGl2b3QgdHVwbGUuCiAJCSAqLwogCQlBc3NlcnQobmF0dHMgIT0gbmtleWF0dHMpOwor CQlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bvc3RpbmcobGFzdGxlZnQpICYmCisJCQkgICAhQlRyZWVU dXBsZUlzUG9zdGluZyhmaXJzdHJpZ2h0KSk7CiAJCW5ld3NpemUgPSBJbmRleFR1cGxlU2l6ZShw aXZvdCkgKyBNQVhBTElHTihzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSk7CiAJCXRpZHBpdm90ID0g cGFsbG9jMChuZXdzaXplKTsKIAkJbWVtY3B5KHRpZHBpdm90LCBwaXZvdCwgSW5kZXhUdXBsZVNp emUocGl2b3QpKTsKQEAgLTIxNzEsNiArMjI1MSwxOSBAQCBfYnRfdHJ1bmNhdGUoUmVsYXRpb24g cmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQsCiAJCW5ld3Np emUgPSBJbmRleFR1cGxlU2l6ZShmaXJzdHJpZ2h0KSArIE1BWEFMSUdOKHNpemVvZihJdGVtUG9p bnRlckRhdGEpKTsKIAkJcGl2b3QgPSBwYWxsb2MwKG5ld3NpemUpOwogCQltZW1jcHkocGl2b3Qs IGZpcnN0cmlnaHQsIEluZGV4VHVwbGVTaXplKGZpcnN0cmlnaHQpKTsKKworCQlpZiAoQlRyZWVU dXBsZUlzUG9zdGluZyhmaXJzdHJpZ2h0KSkKKwkJeworCQkJLyoKKwkJCSAqIE5ldyBwaXZvdCB0 dXBsZSB3YXMgY29waWVkIGZyb20gZmlyc3RyaWdodCwgd2hpY2ggaGFwcGVucyB0byBiZQorCQkJ ICogYSBwb3N0aW5nIGxpc3QgdHVwbGUuICBXZSB3aWxsIGhhdmUgdG8gaW5jbHVkZSB0aGUgbWF4 IGxhc3RsZWZ0CisJCQkgKiBoZWFwIFRJRCBpbiB0aGUgZmluYWwgcGl2b3QgdHVwbGUsIGJ1dCB3 ZSBjYW4gcmVtb3ZlIHRoZQorCQkJICogcG9zdGluZyBsaXN0IG5vdy4gKFBpdm90IHR1cGxlcyBz aG91bGQgbmV2ZXIgY29udGFpbiBhIHBvc3RpbmcKKwkJCSAqIGxpc3QuKQorCQkJICovCisJCQlu ZXdzaXplID0gTUFYQUxJR04oQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoZmlyc3RyaWdodCkp ICsKKwkJCQlNQVhBTElHTihzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSk7CisJCX0KIAl9CiAKIAkv KgpAQCAtMjE5OCw3ICsyMjkxLDcgQEAgX2J0X3RydW5jYXRlKFJlbGF0aW9uIHJlbCwgSW5kZXhU dXBsZSBsYXN0bGVmdCwgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LAogCSAqLwogCXBpdm90aGVhcHRp ZCA9IChJdGVtUG9pbnRlcikgKChjaGFyICopIHBpdm90ICsgbmV3c2l6ZSAtCiAJCQkJCQkJCSAg c2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkpOwotCUl0ZW1Qb2ludGVyQ29weSgmbGFzdGxlZnQtPnRf dGlkLCBwaXZvdGhlYXB0aWQpOworCUl0ZW1Qb2ludGVyQ29weShCVHJlZVR1cGxlR2V0TWF4SGVh cFRJRChsYXN0bGVmdCksIHBpdm90aGVhcHRpZCk7CiAKIAkvKgogCSAqIExlaG1hbiBhbmQgWWFv IHJlcXVpcmUgdGhhdCB0aGUgZG93bmxpbmsgdG8gdGhlIHJpZ2h0IHBhZ2UsIHdoaWNoIGlzIHRv CkBAIC0yMjA5LDkgKzIzMDIsMTIgQEAgX2J0X3RydW5jYXRlKFJlbGF0aW9uIHJlbCwgSW5kZXhU dXBsZSBsYXN0bGVmdCwgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LAogCSAqIHRpZWJyZWFrZXIuCiAJ ICovCiAjaWZuZGVmIERFQlVHX05PX1RSVU5DQVRFCi0JQXNzZXJ0KEl0ZW1Qb2ludGVyQ29tcGFy ZSgmbGFzdGxlZnQtPnRfdGlkLCAmZmlyc3RyaWdodC0+dF90aWQpIDwgMCk7Ci0JQXNzZXJ0KEl0 ZW1Qb2ludGVyQ29tcGFyZShwaXZvdGhlYXB0aWQsICZsYXN0bGVmdC0+dF90aWQpID49IDApOwot CUFzc2VydChJdGVtUG9pbnRlckNvbXBhcmUocGl2b3RoZWFwdGlkLCAmZmlyc3RyaWdodC0+dF90 aWQpIDwgMCk7CisJQXNzZXJ0KEl0ZW1Qb2ludGVyQ29tcGFyZShCVHJlZVR1cGxlR2V0TWF4SGVh cFRJRChsYXN0bGVmdCksCisJCQkJCQkJICBCVHJlZVR1cGxlR2V0SGVhcFRJRChmaXJzdHJpZ2h0 KSkgPCAwKTsKKwlBc3NlcnQoSXRlbVBvaW50ZXJDb21wYXJlKHBpdm90aGVhcHRpZCwKKwkJCQkJ CQkgIEJUcmVlVHVwbGVHZXRIZWFwVElEKGxhc3RsZWZ0KSkgPj0gMCk7CisJQXNzZXJ0KEl0ZW1Q b2ludGVyQ29tcGFyZShwaXZvdGhlYXB0aWQsCisJCQkJCQkJICBCVHJlZVR1cGxlR2V0SGVhcFRJ RChmaXJzdHJpZ2h0KSkgPCAwKTsKICNlbHNlCiAKIAkvKgpAQCAtMjIyNCw3ICsyMzIwLDcgQEAg X2J0X3RydW5jYXRlKFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwgSW5kZXhUdXBs ZSBmaXJzdHJpZ2h0LAogCSAqIGF0dHJpYnV0ZSB2YWx1ZXMgYWxvbmcgd2l0aCBsYXN0bGVmdCdz IGhlYXAgVElEIHZhbHVlIHdoZW4gbGFzdGxlZnQncwogCSAqIFRJRCBoYXBwZW5zIHRvIGJlIGdy ZWF0ZXIgdGhhbiBmaXJzdHJpZ2h0J3MgVElELgogCSAqLwotCUl0ZW1Qb2ludGVyQ29weSgmZmly c3RyaWdodC0+dF90aWQsIHBpdm90aGVhcHRpZCk7CisJSXRlbVBvaW50ZXJDb3B5KEJUcmVlVHVw bGVHZXRIZWFwVElEKGZpcnN0cmlnaHQpLCBwaXZvdGhlYXB0aWQpOwogCiAJLyoKIAkgKiBQaXZv dCBoZWFwIFRJRCBzaG91bGQgbmV2ZXIgYmUgZnVsbHkgZXF1YWwgdG8gZmlyc3RyaWdodC4gIE5v dGUgdGhhdApAQCAtMjIzMyw3ICsyMzI5LDggQEAgX2J0X3RydW5jYXRlKFJlbGF0aW9uIHJlbCwg SW5kZXhUdXBsZSBsYXN0bGVmdCwgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LAogCSAqLwogCUl0ZW1Q b2ludGVyU2V0T2Zmc2V0TnVtYmVyKHBpdm90aGVhcHRpZCwKIAkJCQkJCQkgICBPZmZzZXROdW1i ZXJQcmV2KEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKHBpdm90aGVhcHRpZCkpKTsKLQlBc3Nl cnQoSXRlbVBvaW50ZXJDb21wYXJlKHBpdm90aGVhcHRpZCwgJmZpcnN0cmlnaHQtPnRfdGlkKSA8 IDApOworCUFzc2VydChJdGVtUG9pbnRlckNvbXBhcmUocGl2b3RoZWFwdGlkLAorCQkJCQkJCSAg QlRyZWVUdXBsZUdldEhlYXBUSUQoZmlyc3RyaWdodCkpIDwgMCk7CiAjZW5kaWYKIAogCUJUcmVl VHVwbGVTZXROQXR0cyhwaXZvdCwgbmtleWF0dHMpOwpAQCAtMjMxNCwxMyArMjQxMSwxNiBAQCBf YnRfa2VlcF9uYXR0cyhSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxlZnQsIEluZGV4VHVw bGUgZmlyc3RyaWdodCwKICAqIFRoZSBhcHByb2FjaCB0YWtlbiBoZXJlIHVzdWFsbHkgcHJvdmlk ZXMgdGhlIHNhbWUgYW5zd2VyIGFzIF9idF9rZWVwX25hdHRzCiAgKiB3aWxsIChmb3IgdGhlIHNh bWUgcGFpciBvZiB0dXBsZXMgZnJvbSBhIGhlYXBrZXlzcGFjZSBpbmRleCksIHNpbmNlIHRoZQog ICogbWFqb3JpdHkgb2YgYnRyZWUgb3BjbGFzc2VzIGNhbiBuZXZlciBpbmRpY2F0ZSB0aGF0IHR3 byBkYXR1bXMgYXJlIGVxdWFsCi0gKiB1bmxlc3MgdGhleSdyZSBiaXR3aXNlIGVxdWFsIGFmdGVy IGRldG9hc3RpbmcuCisgKiB1bmxlc3MgdGhleSdyZSBiaXR3aXNlIGVxdWFsIGFmdGVyIGRldG9h c3RpbmcuICBXaGVuIGFuIGluZGV4IGlzIGNvbnNpZGVyZWQKKyAqIGRlZHVwbGljYXRpb24tc2Fm ZSBieSBfYnRfb3BjbGFzc2VzX3N1cHBvcnRfZGVkdXAsIHJvdXRpbmUgaXMgZ3VhcmFudGVlZCB0 bworICogZ2l2ZSB0aGUgc2FtZSByZXN1bHQgYXMgX2J0X2tlZXBfbmF0dHMgd291bGQuCiAgKgot ICogVGhlc2UgaXNzdWVzIG11c3QgYmUgYWNjZXB0YWJsZSB0byBjYWxsZXJzLCB0eXBpY2FsbHkg YmVjYXVzZSB0aGV5J3JlIG9ubHkKLSAqIGNvbmNlcm5lZCBhYm91dCBtYWtpbmcgc3VmZml4IHRy dW5jYXRpb24gYXMgZWZmZWN0aXZlIGFzIHBvc3NpYmxlIHdpdGhvdXQKLSAqIGxlYXZpbmcgZXhj ZXNzaXZlIGFtb3VudHMgb2YgZnJlZSBzcGFjZSBvbiBlaXRoZXIgc2lkZSBvZiBwYWdlIHNwbGl0 LgogICogQ2FsbGVycyBjYW4gcmVseSBvbiB0aGUgZmFjdCB0aGF0IGF0dHJpYnV0ZXMgY29uc2lk ZXJlZCBlcXVhbCBoZXJlIGFyZQotICogZGVmaW5pdGVseSBhbHNvIGVxdWFsIGFjY29yZGluZyB0 byBfYnRfa2VlcF9uYXR0cy4KKyAqIGRlZmluaXRlbHkgYWxzbyBlcXVhbCBhY2NvcmRpbmcgdG8g X2J0X2tlZXBfbmF0dHMsIGV2ZW4gd2hlbiB0aGUgaW5kZXggdXNlcworICogYW4gb3BjbGFzcyBv ciBjb2xsYXRpb24gdGhhdCBpcyBub3QgZGVkdXBsaWNhdGlvbi1zYWZlLiAgVGhpcyB3ZWFrZXIK KyAqIGd1YXJhbnRlZSBpcyBnb29kIGVub3VnaCBmb3IgbmJ0c3BsaXRsb2MuYyBjYWxsZXIsIHNp bmNlIGZhbHNlIG5lZ2F0aXZlcworICogZ2VuZXJhbGx5IG9ubHkgaGF2ZSB0aGUgZWZmZWN0IG9m IG1ha2luZyBsZWFmIHBhZ2Ugc3BsaXRzIHVzZSBhIG1vcmUKKyAqIGJhbGFuY2VkIHNwbGl0IHBv aW50LgogICovCiBpbnQKIF9idF9rZWVwX25hdHRzX2Zhc3QoUmVsYXRpb24gcmVsLCBJbmRleFR1 cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQpCkBAIC0yMzkyLDI4ICsyNDkyLDQy IEBAIF9idF9jaGVja19uYXR0cyhSZWxhdGlvbiByZWwsIGJvb2wgaGVhcGtleXNwYWNlLCBQYWdl IHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pCiAJICogTWFzayBhbGxvY2F0ZWQgZm9yIG51bWJl ciBvZiBrZXlzIGluIGluZGV4IHR1cGxlIG11c3QgYmUgYWJsZSB0byBmaXQKIAkgKiBtYXhpbXVt IHBvc3NpYmxlIG51bWJlciBvZiBpbmRleCBhdHRyaWJ1dGVzCiAJICovCi0JU3RhdGljQXNzZXJ0 U3RtdChCVF9OX0tFWVNfT0ZGU0VUX01BU0sgPj0gSU5ERVhfTUFYX0tFWVMsCi0JCQkJCSAiQlRf Tl9LRVlTX09GRlNFVF9NQVNLIGNhbid0IGZpdCBJTkRFWF9NQVhfS0VZUyIpOworCVN0YXRpY0Fz c2VydFN0bXQoQlRfT0ZGU0VUX01BU0sgPj0gSU5ERVhfTUFYX0tFWVMsCisJCQkJCSAiQlRfT0ZG U0VUX01BU0sgY2FuJ3QgZml0IElOREVYX01BWF9LRVlTIik7CiAKIAlpdHVwID0gKEluZGV4VHVw bGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKSk7CiAJdHVw bmF0dHMgPSBCVHJlZVR1cGxlR2V0TkF0dHMoaXR1cCwgcmVsKTsKIAorCS8qICFoZWFwa2V5c3Bh Y2UgaW5kZXhlcyBkbyBub3Qgc3VwcG9ydCBkZWR1cGxpY2F0aW9uICovCisJaWYgKCFoZWFwa2V5 c3BhY2UgJiYgQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKKwkJcmV0dXJuIGZhbHNlOworCisJ LyogUG9zdGluZyBsaXN0IHR1cGxlcyBzaG91bGQgbmV2ZXIgaGF2ZSAicGl2b3QgaGVhcCBUSUQi IGJpdCBzZXQgKi8KKwlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSAmJgorCQkoSXRlbVBv aW50ZXJHZXRPZmZzZXROdW1iZXJOb0NoZWNrKCZpdHVwLT50X3RpZCkgJgorCQkgQlRfUElWT1Rf SEVBUF9USURfQVRUUikgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogSU5DTFVERSBpbmRl eGVzIGRvIG5vdCBzdXBwb3J0IGRlZHVwbGljYXRpb24gKi8KKwlpZiAobmF0dHMgIT0gbmtleWF0 dHMgJiYgQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKKwkJcmV0dXJuIGZhbHNlOworCiAJaWYg KFBfSVNMRUFGKG9wYXF1ZSkpCiAJewogCQlpZiAob2ZmbnVtID49IFBfRklSU1REQVRBS0VZKG9w YXF1ZSkpCiAJCXsKIAkJCS8qCi0JCQkgKiBOb24tcGl2b3QgdHVwbGVzIGN1cnJlbnRseSBuZXZl ciB1c2UgYWx0ZXJuYXRpdmUgaGVhcCBUSUQKLQkJCSAqIHJlcHJlc2VudGF0aW9uIC0tIGV2ZW4g dGhvc2Ugd2l0aGluIGhlYXBrZXlzcGFjZSBpbmRleGVzCisJCQkgKiBOb24tcGl2b3QgdHVwbGUg c2hvdWxkIG5ldmVyIGJlIGV4cGxpY2l0bHkgbWFya2VkIGFzIGEgcGl2b3QKKwkJCSAqIHR1cGxl CiAJCQkgKi8KLQkJCWlmICgoaXR1cC0+dF9pbmZvICYgSU5ERVhfQUxUX1RJRF9NQVNLKSAhPSAw KQorCQkJaWYgKEJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKQogCQkJCXJldHVybiBmYWxzZTsKIAog CQkJLyoKIAkJCSAqIExlYWYgdHVwbGVzIHRoYXQgYXJlIG5vdCB0aGUgcGFnZSBoaWdoIGtleSAo bm9uLXBpdm90IHR1cGxlcykKIAkJCSAqIHNob3VsZCBuZXZlciBiZSB0cnVuY2F0ZWQuICAoTm90 ZSB0aGF0IHR1cG5hdHRzIG11c3QgaGF2ZSBiZWVuCi0JCQkgKiBpbmZlcnJlZCwgcmF0aGVyIHRo YW4gY29taW5nIGZyb20gYW4gZXhwbGljaXQgb24tZGlzawotCQkJICogcmVwcmVzZW50YXRpb24u KQorCQkJICogaW5mZXJyZWQsIGV2ZW4gd2l0aCBhIHBvc3RpbmcgbGlzdCB0dXBsZSwgYmVjYXVz ZSBvbmx5IHBpdm90CisJCQkgKiB0dXBsZXMgc3RvcmUgdHVwbmF0dHMgZGlyZWN0bHkuKQogCQkJ ICovCiAJCQlyZXR1cm4gdHVwbmF0dHMgPT0gbmF0dHM7CiAJCX0KQEAgLTI0NTcsMTIgKzI1NzEs MTIgQEAgX2J0X2NoZWNrX25hdHRzKFJlbGF0aW9uIHJlbCwgYm9vbCBoZWFwa2V5c3BhY2UsIFBh Z2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9mZm51bSkKIAkJCSAqIG5vbi16ZXJvLCBvciB3aGVuIHRo ZXJlIGlzIG5vIGV4cGxpY2l0IHJlcHJlc2VudGF0aW9uIGFuZCB0aGUKIAkJCSAqIHR1cGxlIGlz IGV2aWRlbnRseSBub3QgYSBwcmUtcGdfdXBncmFkZSB0dXBsZS4KIAkJCSAqCi0JCQkgKiBQcmlv ciB0byB2MTEsIGRvd25saW5rcyBhbHdheXMgaGFkIFBfSElLRVkgYXMgdGhlaXIgb2Zmc2V0LiBV c2UKLQkJCSAqIHRoYXQgdG8gZGVjaWRlIGlmIHRoZSB0dXBsZSBpcyBhIHByZS12MTEgdHVwbGUu CisJCQkgKiBQcmlvciB0byB2MTEsIGRvd25saW5rcyBhbHdheXMgaGFkIFBfSElLRVkgYXMgdGhl aXIgb2Zmc2V0LgorCQkJICogQWNjZXB0IHRoYXQgYXMgYW4gYWx0ZXJuYXRpdmUgaW5kaWNhdGlv biBvZiBhIHZhbGlkCisJCQkgKiAhaGVhcGtleXNwYWNlIG5lZ2F0aXZlIGluZmluaXR5IHR1cGxl LgogCQkJICovCiAJCQlyZXR1cm4gdHVwbmF0dHMgPT0gMCB8fAotCQkJCSgoaXR1cC0+dF9pbmZv ICYgSU5ERVhfQUxUX1RJRF9NQVNLKSA9PSAwICYmCi0JCQkJIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0 TnVtYmVyKCYoaXR1cC0+dF90aWQpKSA9PSBQX0hJS0VZKTsKKwkJCQlJdGVtUG9pbnRlckdldE9m ZnNldE51bWJlcigmKGl0dXAtPnRfdGlkKSkgPT0gUF9ISUtFWTsKIAkJfQogCQllbHNlCiAJCXsK QEAgLTI0ODgsNyArMjYwMiwxMSBAQCBfYnRfY2hlY2tfbmF0dHMoUmVsYXRpb24gcmVsLCBib29s IGhlYXBrZXlzcGFjZSwgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCSAqIGhlYXBr ZXlzcGFjZSBpbmRleCBwaXZvdCB0dXBsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3Qg dGhlcmUgYXJlCiAJICogbm9uLWtleSBhdHRyaWJ1dGVzLgogCSAqLwotCWlmICgoaXR1cC0+dF9p bmZvICYgSU5ERVhfQUxUX1RJRF9NQVNLKSA9PSAwKQorCWlmICghQlRyZWVUdXBsZUlzUGl2b3Qo aXR1cCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFBpdm90IHR1cGxlIHNob3VsZCBub3QgdXNl IHBvc3RpbmcgbGlzdCByZXByZXNlbnRhdGlvbiAocmVkdW5kYW50KSAqLworCWlmIChCVHJlZVR1 cGxlSXNQb3N0aW5nKGl0dXApKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpAQCAtMjU1OCwxMSAr MjY3Niw1MyBAQCBfYnRfY2hlY2tfdGhpcmRfcGFnZShSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhl YXAsIGJvb2wgbmVlZGhlYXB0aWRzcGFjZSwKIAkJCQkJQlRNYXhJdGVtU2l6ZU5vSGVhcFRpZChw YWdlKSwKIAkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCiAJCQkgZXJyZGV0YWls KCJJbmRleCByb3cgcmVmZXJlbmNlcyB0dXBsZSAoJXUsJXUpIGluIHJlbGF0aW9uIFwiJXNcIi4i LAotCQkJCQkgICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZuZXd0dXAtPnRfdGlkKSwKLQkJ CQkJICAgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoJm5ld3R1cC0+dF90aWQpLAorCQkJCQkg ICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKEJUcmVlVHVwbGVHZXRIZWFwVElEKG5ld3R1cCkp LAorCQkJCQkgICBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcihCVHJlZVR1cGxlR2V0SGVhcFRJ RChuZXd0dXApKSwKIAkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcCkpLAogCQkJ IGVycmhpbnQoIlZhbHVlcyBsYXJnZXIgdGhhbiAxLzMgb2YgYSBidWZmZXIgcGFnZSBjYW5ub3Qg YmUgaW5kZXhlZC5cbiIKIAkJCQkJICJDb25zaWRlciBhIGZ1bmN0aW9uIGluZGV4IG9mIGFuIE1E NSBoYXNoIG9mIHRoZSB2YWx1ZSwgIgogCQkJCQkgIm9yIHVzZSBmdWxsIHRleHQgaW5kZXhpbmcu IiksCiAJCQkgZXJydGFibGVjb25zdHJhaW50KGhlYXAsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCkpKSk7CiB9CisKKy8qCisgKiBJcyBpdCBzYWZlIHRvIHBlcmZvcm0gZGVkdXBsaWNhdGlv biBmb3IgYW4gaW5kZXgsIGdpdmVuIHRoZSBvcGNsYXNzZXMgYW5kCisgKiBjb2xsYXRpb25zIHVz ZWQ/CisgKgorICogUmV0dXJuZWQgdmFsdWUgaXMgc3RvcmVkIGluIGluZGV4IG1ldGFwYWdlIGR1 cmluZyBpbmRleCBidWlsZHMuICBGdW5jdGlvbgorICogZG9lcyBub3QgYWNjb3VudCBmb3IgaW5j b21wYXRpYmlsaXRpZXMgY2F1c2VkIGJ5IGluZGV4IGJlaW5nIG9uIGFuIGVhcmxpZXIKKyAqIG5i dHJlZSB2ZXJzaW9uLgorICovCitib29sCitfYnRfb3BjbGFzc2VzX3N1cHBvcnRfZGVkdXAoUmVs YXRpb24gaW5kZXgpCit7CisJLyogSU5DTFVERSBpbmRleGVzIGRvbid0IHN1cHBvcnQgZGVkdXBs aWNhdGlvbiAqLworCWlmIChJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKGluZGV4 KSAhPQorCQlJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKGluZGV4KSkKKwkJ cmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBUaGVyZSBpcyBubyByZWFzb24gd2h5IGRlZHVwbGlj YXRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCBzeXN0ZW0gY2F0YWxvZworCSAqIGluZGV4ZXMuICBI b3dldmVyLCB3ZSBkZWVtIGl0IGdlbmVyYWxseSB1bnNhZmUgYmVjYXVzZSBpdCdzIG5vdCBjbGVh cgorCSAqIGhvdyBpdCBjb3VsZCBiZSBkaXNhYmxlZC4gIChBTFRFUiBJTkRFWCBpcyBub3Qgc3Vw cG9ydGVkIHdpdGggc3lzdGVtCisJICogY2F0YWxvZyBpbmRleGVzLCBzbyB1c2VycyBoYXZlIG5v IHdheSB0byBzZXQgdGhlIHN0b3JhZ2UgcGFyYW1ldGVyLikKKwkgKi8KKwlpZiAoSXNDYXRhbG9n UmVsYXRpb24oaW5kZXgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlmb3IgKGludCBpID0gMDsgaSA8 IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMoaW5kZXgpOyBpKyspCisJewor CQlPaWQJCQlvcGZhbWlseSA9IGluZGV4LT5yZF9vcGZhbWlseVtpXTsKKwkJT2lkCQkJY29sbGF0 aW9uID0gaW5kZXgtPnJkX2luZGNvbGxhdGlvbltpXTsKKworCQkvKiBUT0RPIGFkZCBhZGVxdWF0 ZSBjaGVjayBvZiBvcGNsYXNzZXMgYW5kIGNvbGxhdGlvbnMgKi8KKwkJZWxvZyhERUJVRzQsICJp bmRleCAlcyBjb2x1bW4gaSAlZCBvcGZhbWlseU9pZCAldSBjb2xsYXRpb25PaWQgJXUiLAorCQkJ IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGluZGV4KSwgaSwgb3BmYW1pbHksIGNvbGxhdGlvbik7 CisKKwkJLyogTlVNRVJJQyBidHJlZSBvcGZhbWlseSBPSUQgaXMgMTk4OCAqLworCQlpZiAob3Bm YW1pbHkgPT0gMTk4OCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKaW5kZXggMmU1MjAyYzJkNi4uMWQxY2Q3YjY2 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKQEAgLTIyLDYgKzIyLDkgQEAKICNp bmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgor CitzdGF0aWMgTWVtb3J5Q29udGV4dCBvcEN0eDsJCS8qIHdvcmtpbmcgbWVtb3J5IGZvciBvcGVy YXRpb25zICovCiAKIC8qCiAgKiBfYnRfcmVzdG9yZV9wYWdlIC0tIHJlLWVudGVyIGFsbCB0aGUg aW5kZXggdHVwbGVzIG9uIGEgcGFnZQpAQCAtMTExLDYgKzExNCw3IEBAIF9idF9yZXN0b3JlX21l dGEoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQsIHVpbnQ4IGJsb2NrX2lkKQogCUFzc2VydChtZC0+ YnRtX3ZlcnNpb24gPj0gQlRSRUVfTk9WQUNfVkVSU0lPTik7CiAJbWQtPmJ0bV9vbGRlc3RfYnRw b194YWN0ID0geGxyZWMtPm9sZGVzdF9idHBvX3hhY3Q7CiAJbWQtPmJ0bV9sYXN0X2NsZWFudXBf bnVtX2hlYXBfdHVwbGVzID0geGxyZWMtPmxhc3RfY2xlYW51cF9udW1faGVhcF90dXBsZXM7CisJ bWQtPmJ0bV9zYWZlZGVkdXAgPSB4bHJlYy0+c2FmZWRlZHVwOwogCiAJcGFnZW9wID0gKEJUUGFn ZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQb2ludGVyKG1ldGFwZyk7CiAJcGFnZW9wLT5idHBvX2Zs YWdzID0gQlRQX01FVEE7CkBAIC0xNTYsNyArMTYwLDggQEAgX2J0X2NsZWFyX2luY29tcGxldGVf c3BsaXQoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQsIHVpbnQ4IGJsb2NrX2lkKQogfQogCiBzdGF0 aWMgdm9pZAotYnRyZWVfeGxvZ19pbnNlcnQoYm9vbCBpc2xlYWYsIGJvb2wgaXNtZXRhLCBYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCkKK2J0cmVlX3hsb2dfaW5zZXJ0KGJvb2wgaXNsZWFmLCBib29s IGlzbWV0YSwgYm9vbCBwb3N0aW5nLAorCQkJCSAgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiB7 CiAJWExvZ1JlY1B0cglsc24gPSByZWNvcmQtPkVuZFJlY1B0cjsKIAl4bF9idHJlZV9pbnNlcnQg KnhscmVjID0gKHhsX2J0cmVlX2luc2VydCAqKSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOwpAQCAt MTgxLDkgKzE4Niw1MiBAQCBidHJlZV94bG9nX2luc2VydChib29sIGlzbGVhZiwgYm9vbCBpc21l dGEsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCiAJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1 ZmZlcik7CiAKLQkJaWYgKFBhZ2VBZGRJdGVtKHBhZ2UsIChJdGVtKSBkYXRhcG9zLCBkYXRhbGVu LCB4bHJlYy0+b2ZmbnVtLAotCQkJCQkJZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVt YmVyKQotCQkJZWxvZyhQQU5JQywgImJ0cmVlX3hsb2dfaW5zZXJ0OiBmYWlsZWQgdG8gYWRkIGl0 ZW0iKTsKKwkJaWYgKCFwb3N0aW5nKQorCQl7CisJCQkvKiBTaW1wbGUgcmV0YWlsIGluc2VydGlv biAqLworCQkJaWYgKFBhZ2VBZGRJdGVtKHBhZ2UsIChJdGVtKSBkYXRhcG9zLCBkYXRhbGVuLCB4 bHJlYy0+b2ZmbnVtLAorCQkJCQkJCWZhbHNlLCBmYWxzZSkgPT0gSW52YWxpZE9mZnNldE51bWJl cikKKwkJCQllbG9nKFBBTklDLCAiYnRyZWVfeGxvZ19pbnNlcnQ6IGZhaWxlZCB0byBhZGQgaXRl bSIpOworCQl9CisJCWVsc2UKKwkJeworCQkJSXRlbUlkCQlpdGVtaWQ7CisJCQlJbmRleFR1cGxl CW9wb3N0aW5nLAorCQkJCQkJbmV3aXRlbSwKKwkJCQkJCW5wb3N0aW5nOworCQkJdWludDE2CQlw b3N0aW5nb2ZmOworCisJCQkvKgorCQkJICogQSBwb3N0aW5nIGxpc3Qgc3BsaXQgb2NjdXJyZWQg ZHVyaW5nIGxlYWYgcGFnZSBpbnNlcnRpb24uICBXQUwKKwkJCSAqIHJlY29yZCBkYXRhIHdpbGwg c3RhcnQgd2l0aCBhbiBvZmZzZXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUKKwkJCSAqIHBvaW50 IGluIGFuIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCB0aGF0IGEgc3BsaXQgb2NjdXJzIGF0LgorCQkJ ICoKKwkJCSAqIFVzZSBfYnRfc3dhcF9wb3N0aW5nKCkgdG8gcmVwZWF0IHBvc3RpbmcgbGlzdCBz cGxpdCBzdGVwcyBmcm9tCisJCQkgKiBwcmltYXJ5LiAgTm90ZSB0aGF0IG5ld2l0ZW0gZnJvbSBX QUwgcmVjb3JkIGlzICdvcmlnbmV3aXRlbScsCisJCQkgKiBub3QgdGhlIGZpbmFsIHZlcnNpb24g b2YgbmV3aXRlbSB0aGF0IGlzIGFjdHVhbGx5IGluc2VydGVkIG9uCisJCQkgKiBwYWdlLgorCQkJ ICovCisJCQlwb3N0aW5nb2ZmID0gKigodWludDE2ICopIGRhdGFwb3MpOworCQkJZGF0YXBvcyAr PSBzaXplb2YodWludDE2KTsKKwkJCWRhdGFsZW4gLT0gc2l6ZW9mKHVpbnQxNik7CisKKwkJCWl0 ZW1pZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgT2Zmc2V0TnVtYmVyUHJldih4bHJlYy0+b2ZmbnVt KSk7CisJCQlvcG9zdGluZyA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQp OworCisJCQkvKiBVc2UgbXV0YWJsZSwgYWxpZ25lZCBuZXdpdGVtIGNvcHkgaW4gX2J0X3N3YXBf cG9zdGluZygpICovCisJCQlBc3NlcnQoaXNsZWFmICYmIHBvc3RpbmdvZmYgPiAwKTsKKwkJCW5l d2l0ZW0gPSBDb3B5SW5kZXhUdXBsZSgoSW5kZXhUdXBsZSkgZGF0YXBvcyk7CisJCQlucG9zdGlu ZyA9IF9idF9zd2FwX3Bvc3RpbmcobmV3aXRlbSwgb3Bvc3RpbmcsIHBvc3RpbmdvZmYpOworCisJ CQkvKiBSZXBsYWNlIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCB3aXRoIHBvc3Qtc3BsaXQgdmVyc2lv biAqLworCQkJbWVtY3B5KG9wb3N0aW5nLCBucG9zdGluZywgTUFYQUxJR04oSW5kZXhUdXBsZVNp emUobnBvc3RpbmcpKSk7CisKKwkJCS8qIEluc2VydCAiZmluYWwiIG5ldyBpdGVtIChub3Qgb3Jp Z25ld2l0ZW0gZnJvbSBXQUwgc3RyZWFtKSAqLworCQkJQXNzZXJ0KEluZGV4VHVwbGVTaXplKG5l d2l0ZW0pID09IGRhdGFsZW4pOworCQkJaWYgKFBhZ2VBZGRJdGVtKHBhZ2UsIChJdGVtKSBuZXdp dGVtLCBkYXRhbGVuLCB4bHJlYy0+b2ZmbnVtLAorCQkJCQkJCWZhbHNlLCBmYWxzZSkgPT0gSW52 YWxpZE9mZnNldE51bWJlcikKKwkJCQllbG9nKFBBTklDLCAiYnRyZWVfeGxvZ19pbnNlcnQ6IGZh aWxlZCB0byBhZGQgcG9zdGluZyBzcGxpdCBuZXcgaXRlbSIpOworCQl9CiAKIAkJUGFnZVNldExT TihwYWdlLCBsc24pOwogCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKQEAgLTI2NSwyMCArMzEz LDM4IEBAIGJ0cmVlX3hsb2dfc3BsaXQoYm9vbCBvbmxlZnQsIFhMb2dSZWFkZXJTdGF0ZSAqcmVj b3JkKQogCQlCVFBhZ2VPcGFxdWUgbG9wYXF1ZSA9IChCVFBhZ2VPcGFxdWUpIFBhZ2VHZXRTcGVj aWFsUG9pbnRlcihscGFnZSk7CiAJCU9mZnNldE51bWJlciBvZmY7CiAJCUluZGV4VHVwbGUJbmV3 aXRlbSA9IE5VTEwsCi0JCQkJCWxlZnRfaGlrZXkgPSBOVUxMOworCQkJCQlsZWZ0X2hpa2V5ID0g TlVMTCwKKwkJCQkJbnBvc3RpbmcgPSBOVUxMOwogCQlTaXplCQluZXdpdGVtc3ogPSAwLAogCQkJ CQlsZWZ0X2hpa2V5c3ogPSAwOwogCQlQYWdlCQluZXdscGFnZTsKLQkJT2Zmc2V0TnVtYmVyIGxl ZnRvZmY7CisJCU9mZnNldE51bWJlciBsZWZ0b2ZmLAorCQkJCQlyZXBsYWNlcG9zdGluZ29mZiA9 IEludmFsaWRPZmZzZXROdW1iZXI7CiAKIAkJZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEo cmVjb3JkLCAwLCAmZGF0YWxlbik7CiAKLQkJaWYgKG9ubGVmdCkKKwkJaWYgKG9ubGVmdCB8fCB4 bHJlYy0+cG9zdGluZ29mZiAhPSAwKQogCQl7CiAJCQluZXdpdGVtID0gKEluZGV4VHVwbGUpIGRh dGFwb3M7CiAJCQluZXdpdGVtc3ogPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShuZXdpdGVtKSk7 CiAJCQlkYXRhcG9zICs9IG5ld2l0ZW1zejsKIAkJCWRhdGFsZW4gLT0gbmV3aXRlbXN6OworCisJ CQlpZiAoeGxyZWMtPnBvc3RpbmdvZmYgIT0gMCkKKwkJCXsKKwkJCQlJdGVtSWQJCWl0ZW1pZDsK KwkJCQlJbmRleFR1cGxlCW9wb3N0aW5nOworCisJCQkJLyogUG9zdGluZyBsaXN0IG11c3QgYmUg YXQgb2Zmc2V0IG51bWJlciBiZWZvcmUgbmV3IGl0ZW0ncyAqLworCQkJCXJlcGxhY2Vwb3N0aW5n b2ZmID0gT2Zmc2V0TnVtYmVyUHJldih4bHJlYy0+bmV3aXRlbW9mZik7CisKKwkJCQkvKiBVc2Ug bXV0YWJsZSwgYWxpZ25lZCBuZXdpdGVtIGNvcHkgaW4gX2J0X3N3YXBfcG9zdGluZygpICovCisJ CQkJbmV3aXRlbSA9IENvcHlJbmRleFR1cGxlKG5ld2l0ZW0pOworCQkJCWl0ZW1pZCA9IFBhZ2VH ZXRJdGVtSWQobHBhZ2UsIHJlcGxhY2Vwb3N0aW5nb2ZmKTsKKwkJCQlvcG9zdGluZyA9IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShscGFnZSwgaXRlbWlkKTsKKwkJCQlucG9zdGluZyA9IF9idF9z d2FwX3Bvc3RpbmcobmV3aXRlbSwgb3Bvc3RpbmcsCisJCQkJCQkJCQkJCXhscmVjLT5wb3N0aW5n b2ZmKTsKKwkJCX0KIAkJfQogCiAJCS8qCkBAIC0zMDgsOCArMzc0LDIwIEBAIGJ0cmVlX3hsb2df c3BsaXQoYm9vbCBvbmxlZnQsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJU2l6ZQkJaXRl bXN6OwogCQkJSW5kZXhUdXBsZQlpdGVtOwogCisJCQkvKiBBZGQgcmVwbGFjZW1lbnQgcG9zdGlu ZyBsaXN0IHdoZW4gcmVxdWlyZWQgKi8KKwkJCWlmIChvZmYgPT0gcmVwbGFjZXBvc3RpbmdvZmYp CisJCQl7CisJCQkJQXNzZXJ0KG9ubGVmdCB8fCB4bHJlYy0+Zmlyc3RyaWdodCA9PSB4bHJlYy0+ bmV3aXRlbW9mZik7CisJCQkJaWYgKFBhZ2VBZGRJdGVtKG5ld2xwYWdlLCAoSXRlbSkgbnBvc3Rp bmcsCisJCQkJCQkJCU1BWEFMSUdOKEluZGV4VHVwbGVTaXplKG5wb3N0aW5nKSksIGxlZnRvZmYs CisJCQkJCQkJCWZhbHNlLCBmYWxzZSkgPT0gSW52YWxpZE9mZnNldE51bWJlcikKKwkJCQkJZWxv ZyhFUlJPUiwgImZhaWxlZCB0byBhZGQgbmV3IHBvc3RpbmcgbGlzdCBpdGVtIHRvIGxlZnQgcGFn ZSBhZnRlciBzcGxpdCIpOworCQkJCWxlZnRvZmYgPSBPZmZzZXROdW1iZXJOZXh0KGxlZnRvZmYp OworCQkJCWNvbnRpbnVlOwkJLyogZG9uJ3QgaW5zZXJ0IG9wb3N0aW5nICovCisJCQl9CisKIAkJ CS8qIGFkZCB0aGUgbmV3IGl0ZW0gaWYgaXQgd2FzIGluc2VydGVkIG9uIGxlZnQgcGFnZSAqLwot CQkJaWYgKG9ubGVmdCAmJiBvZmYgPT0geGxyZWMtPm5ld2l0ZW1vZmYpCisJCQllbHNlIGlmIChv bmxlZnQgJiYgb2ZmID09IHhscmVjLT5uZXdpdGVtb2ZmKQogCQkJewogCQkJCWlmIChQYWdlQWRk SXRlbShuZXdscGFnZSwgKEl0ZW0pIG5ld2l0ZW0sIG5ld2l0ZW1zeiwgbGVmdG9mZiwKIAkJCQkJ CQkJZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQpAQCAtMzgzLDYgKzQ2MSw1 NiBAQCBidHJlZV94bG9nX3NwbGl0KGJvb2wgb25sZWZ0LCBYTG9nUmVhZGVyU3RhdGUgKnJlY29y ZCkKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitidHJlZV94bG9nX2RlZHVwKFhMb2dSZWFkZXJTdGF0 ZSAqcmVjb3JkKQoreworCVhMb2dSZWNQdHIJbHNuID0gcmVjb3JkLT5FbmRSZWNQdHI7CisJeGxf YnRyZWVfZGVkdXAgKnhscmVjID0gKHhsX2J0cmVlX2RlZHVwICopIFhMb2dSZWNHZXREYXRhKHJl Y29yZCk7CisJQnVmZmVyCQlidWY7CisKKwlpZiAoWExvZ1JlYWRCdWZmZXJGb3JSZWRvKHJlY29y ZCwgMCwgJmJ1ZikgPT0gQkxLX05FRURTX1JFRE8pCisJeworCQlQYWdlCQlwYWdlID0gKFBhZ2Up IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bTsKKwkJQlREZWR1cFN0 YXRlIHN0YXRlOworCisJCXN0YXRlID0gKEJURGVkdXBTdGF0ZSkgcGFsbG9jKHNpemVvZihCVERl ZHVwU3RhdGVEYXRhKSk7CisJCS8qIENvbnNlcnZhdGl2ZWx5IHVzZSBsYXJnZXIgbWF4cG9zdGlu Z3NpemUgdGhhbiBwcmltYXJ5ICovCisJCXN0YXRlLT5tYXhwb3N0aW5nc2l6ZSA9IEJUTWF4SXRl bVNpemUocGFnZSk7CisJCXN0YXRlLT5jaGVja2luZ3VuaXF1ZSA9IGZhbHNlOwkvKiB1bnVzZWQg Ki8KKwkJc3RhdGUtPnNraXBwZWRiYXNlID0gSW52YWxpZE9mZnNldE51bWJlcjsKKwkJc3RhdGUt PmJhc2UgPSBOVUxMOworCQlzdGF0ZS0+YmFzZW9mZiA9IEludmFsaWRPZmZzZXROdW1iZXI7CisJ CXN0YXRlLT5iYXNldHVwc2l6ZSA9IDA7CisJCXN0YXRlLT5odGlkcyA9IHBhbGxvYyhzdGF0ZS0+ bWF4cG9zdGluZ3NpemUpOworCQlzdGF0ZS0+bmh0aWRzID0gMDsKKwkJc3RhdGUtPm5pdGVtcyA9 IDA7CisJCXN0YXRlLT5waHlzdHVwc2l6ZSA9IDA7CisKKwkJZm9yIChvZmZudW0gPSB4bHJlYy0+ YmFzZW9mZjsKKwkJCSBvZmZudW0gPCB4bHJlYy0+YmFzZW9mZiArIHhscmVjLT5uaXRlbXM7CisJ CQkgb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pKQorCQl7CisJCQlJdGVtSWQJCWl0 ZW1pZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJCUluZGV4VHVwbGUJaXR1cCA9 IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOworCisJCQlpZiAob2ZmbnVt ID09IHhscmVjLT5iYXNlb2ZmKQorCQkJCV9idF9kZWR1cF9zdGFydF9wZW5kaW5nKHN0YXRlLCBp dHVwLCBvZmZudW0pOworCQkJZWxzZSBpZiAoIV9idF9kZWR1cF9zYXZlX2h0aWQoc3RhdGUsIGl0 dXApKQorCQkJCWVsb2coRVJST1IsICJjb3VsZCBub3QgYWRkIGhlYXAgdGlkIHRvIHBlbmRpbmcg cG9zdGluZyBsaXN0Iik7CisJCX0KKworCQlBc3NlcnQoc3RhdGUtPm5pdGVtcyA9PSB4bHJlYy0+ bml0ZW1zKTsKKwkJX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKGJ1Ziwgc3RhdGUsIGZhbHNlKTsK KworCQlQYWdlU2V0TFNOKHBhZ2UsIGxzbik7CisJCU1hcmtCdWZmZXJEaXJ0eShidWYpOworCX0K KworCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsK K30KKwogc3RhdGljIHZvaWQKIGJ0cmVlX3hsb2dfdmFjdXVtKFhMb2dSZWFkZXJTdGF0ZSAqcmVj b3JkKQogewpAQCAtNDA1LDcgKzUzMywzMiBAQCBidHJlZV94bG9nX3ZhY3V1bShYTG9nUmVhZGVy U3RhdGUgKnJlY29yZCkKIAogCQlwYWdlID0gKFBhZ2UpIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsK IAotCQlQYWdlSW5kZXhNdWx0aURlbGV0ZShwYWdlLCAoT2Zmc2V0TnVtYmVyICopIHB0ciwgeGxy ZWMtPm5kZWxldGVkKTsKKwkJaWYgKHhscmVjLT5udXBkYXRlZCA+IDApCisJCXsKKwkJCU9mZnNl dE51bWJlciAqdXBkYXRlZG9mZnNldHM7CisJCQlJbmRleFR1cGxlCXVwZGF0ZWQ7CisJCQlTaXpl CQlpdGVtc3o7CisKKwkJCXVwZGF0ZWRvZmZzZXRzID0gKE9mZnNldE51bWJlciAqKQorCQkJCShw dHIgKyB4bHJlYy0+bmRlbGV0ZWQgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7CisJCQl1cGRhdGVk ID0gKEluZGV4VHVwbGUpICgoY2hhciAqKSB1cGRhdGVkb2Zmc2V0cyArCisJCQkJCQkJCQl4bHJl Yy0+bnVwZGF0ZWQgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7CisKKwkJCWZvciAoaW50IGkgPSAw OyBpIDwgeGxyZWMtPm51cGRhdGVkOyBpKyspCisJCQl7CisJCQkJQXNzZXJ0KEJUcmVlVHVwbGVJ c1Bvc3RpbmcodXBkYXRlZCkpOworCQkJCWl0ZW1zeiA9IE1BWEFMSUdOKEluZGV4VHVwbGVTaXpl KHVwZGF0ZWQpKTsKKworCQkJCWlmICghUGFnZUluZGV4VHVwbGVPdmVyd3JpdGUocGFnZSwgdXBk YXRlZG9mZnNldHNbaV0sCisJCQkJCQkJCQkJCSAoSXRlbSkgdXBkYXRlZCwgaXRlbXN6KSkKKwkJ CQkJZWxvZyhQQU5JQywgImNvdWxkIG5vdCB1cGRhdGUgcGFydGlhbGx5IGRlYWQgaXRlbSIpOwor CisJCQkJdXBkYXRlZCA9IChJbmRleFR1cGxlKSAoKGNoYXIgKikgdXBkYXRlZCArIGl0ZW1zeik7 CisJCQl9CisJCX0KKworCQlpZiAoeGxyZWMtPm5kZWxldGVkID4gMCkKKwkJCVBhZ2VJbmRleE11 bHRpRGVsZXRlKHBhZ2UsIChPZmZzZXROdW1iZXIgKikgcHRyLCB4bHJlYy0+bmRlbGV0ZWQpOwog CiAJCS8qCiAJCSAqIE1hcmsgdGhlIHBhZ2UgYXMgbm90IGNvbnRhaW5pbmcgYW55IExQX0RFQUQg aXRlbXMgLS0tIHNlZSBjb21tZW50cwpAQCAtNzI0LDE3ICs4NzcsMjIgQEAgdm9pZAogYnRyZWVf cmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIHsKIAl1aW50OAkJaW5mbyA9IFhMb2dSZWNH ZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsKKwlNZW1vcnlDb250ZXh0IG9sZEN0eDsK IAorCW9sZEN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvcEN0eCk7CiAJc3dpdGNoIChpbmZv KQogCXsKIAkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9MRUFGOgotCQkJYnRyZWVfeGxvZ19pbnNl cnQodHJ1ZSwgZmFsc2UsIHJlY29yZCk7CisJCQlidHJlZV94bG9nX2luc2VydCh0cnVlLCBmYWxz ZSwgZmFsc2UsIHJlY29yZCk7CiAJCQlicmVhazsKIAkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9V UFBFUjoKLQkJCWJ0cmVlX3hsb2dfaW5zZXJ0KGZhbHNlLCBmYWxzZSwgcmVjb3JkKTsKKwkJCWJ0 cmVlX3hsb2dfaW5zZXJ0KGZhbHNlLCBmYWxzZSwgZmFsc2UsIHJlY29yZCk7CiAJCQlicmVhazsK IAkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9NRVRBOgotCQkJYnRyZWVfeGxvZ19pbnNlcnQoZmFs c2UsIHRydWUsIHJlY29yZCk7CisJCQlidHJlZV94bG9nX2luc2VydChmYWxzZSwgdHJ1ZSwgZmFs c2UsIHJlY29yZCk7CisJCQlicmVhazsKKwkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9QT1NUOgor CQkJYnRyZWVfeGxvZ19pbnNlcnQodHJ1ZSwgZmFsc2UsIHRydWUsIHJlY29yZCk7CiAJCQlicmVh azsKIAkJY2FzZSBYTE9HX0JUUkVFX1NQTElUX0w6CiAJCQlidHJlZV94bG9nX3NwbGl0KHRydWUs IHJlY29yZCk7CkBAIC03NDIsNiArOTAwLDkgQEAgYnRyZWVfcmVkbyhYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKIAkJY2FzZSBYTE9HX0JUUkVFX1NQTElUX1I6CiAJCQlidHJlZV94bG9nX3NwbGl0 KGZhbHNlLCByZWNvcmQpOwogCQkJYnJlYWs7CisJCWNhc2UgWExPR19CVFJFRV9ERURVUF9QQUdF OgorCQkJYnRyZWVfeGxvZ19kZWR1cChyZWNvcmQpOworCQkJYnJlYWs7CiAJCWNhc2UgWExPR19C VFJFRV9WQUNVVU06CiAJCQlidHJlZV94bG9nX3ZhY3V1bShyZWNvcmQpOwogCQkJYnJlYWs7CkBA IC03NjcsNiArOTI4LDIzIEBAIGJ0cmVlX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJ CWRlZmF1bHQ6CiAJCQllbG9nKFBBTklDLCAiYnRyZWVfcmVkbzogdW5rbm93biBvcCBjb2RlICV1 IiwgaW5mbyk7CiAJfQorCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDdHgpOworCU1lbW9yeUNv bnRleHRSZXNldChvcEN0eCk7Cit9CisKK3ZvaWQKK2J0cmVlX3hsb2dfc3RhcnR1cCh2b2lkKQor eworCW9wQ3R4ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAor CQkJCQkJCQkgICJCdHJlZSByZWNvdmVyeSB0ZW1wb3JhcnkgY29udGV4dCIsCisJCQkJCQkJCSAg QUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7Cit9CisKK3ZvaWQKK2J0cmVlX3hsb2dfY2xlYW51cCh2 b2lkKQoreworCU1lbW9yeUNvbnRleHREZWxldGUob3BDdHgpOworCW9wQ3R4ID0gTlVMTDsKIH0K IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9uYnRkZXNjLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbmJ0ZGVzYy5jCmluZGV4IDdkNjNhNzEyNGUu LjY4ZmFkMWM5MWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9uYnRk ZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL25idGRlc2MuYwpAQCAtMjcs NiArMjcsNyBAQCBidHJlZV9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkKIAkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9MRUFGOgogCQljYXNlIFhMT0dfQlRSRUVf SU5TRVJUX1VQUEVSOgogCQljYXNlIFhMT0dfQlRSRUVfSU5TRVJUX01FVEE6CisJCWNhc2UgWExP R19CVFJFRV9JTlNFUlRfUE9TVDoKIAkJCXsKIAkJCQl4bF9idHJlZV9pbnNlcnQgKnhscmVjID0g KHhsX2J0cmVlX2luc2VydCAqKSByZWM7CiAKQEAgLTM4LDE1ICszOSwyNSBAQCBidHJlZV9kZXNj KFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJCXsKIAkJCQl4bF9i dHJlZV9zcGxpdCAqeGxyZWMgPSAoeGxfYnRyZWVfc3BsaXQgKikgcmVjOwogCi0JCQkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICJsZXZlbCAldSwgZmlyc3RyaWdodCAlZCwgbmV3aXRlbW9mZiAlZCIs Ci0JCQkJCQkJCSB4bHJlYy0+bGV2ZWwsIHhscmVjLT5maXJzdHJpZ2h0LCB4bHJlYy0+bmV3aXRl bW9mZik7CisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJsZXZlbCAldSwgZmlyc3RyaWdodCAl ZCwgbmV3aXRlbW9mZiAlZCwgcG9zdGluZ29mZiAlZCIsCisJCQkJCQkJCSB4bHJlYy0+bGV2ZWws IHhscmVjLT5maXJzdHJpZ2h0LAorCQkJCQkJCQkgeGxyZWMtPm5ld2l0ZW1vZmYsIHhscmVjLT5w b3N0aW5nb2ZmKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBYTE9HX0JUUkVFX0RFRFVQX1BB R0U6CisJCQl7CisJCQkJeGxfYnRyZWVfZGVkdXAgKnhscmVjID0gKHhsX2J0cmVlX2RlZHVwICop IHJlYzsKKworCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiYmFzZW9mZiAldTsgbml0ZW1zICV1 IiwKKwkJCQkJCQkJIHhscmVjLT5iYXNlb2ZmLCB4bHJlYy0+bml0ZW1zKTsKIAkJCQlicmVhazsK IAkJCX0KIAkJY2FzZSBYTE9HX0JUUkVFX1ZBQ1VVTToKIAkJCXsKIAkJCQl4bF9idHJlZV92YWN1 dW0gKnhscmVjID0gKHhsX2J0cmVlX3ZhY3V1bSAqKSByZWM7CiAKLQkJCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIm5kZWxldGVkICV1IiwgeGxyZWMtPm5kZWxldGVkKTsKKwkJCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIm5kZWxldGVkICV1OyBudXBkYXRlZCAldSIsCisJCQkJCQkJCSB4bHJlYy0+ bmRlbGV0ZWQsIHhscmVjLT5udXBkYXRlZCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCWNhc2UgWExP R19CVFJFRV9ERUxFVEU6CkBAIC0xMzAsNiArMTQxLDEyIEBAIGJ0cmVlX2lkZW50aWZ5KHVpbnQ4 IGluZm8pCiAJCWNhc2UgWExPR19CVFJFRV9TUExJVF9SOgogCQkJaWQgPSAiU1BMSVRfUiI7CiAJ CQlicmVhazsKKwkJY2FzZSBYTE9HX0JUUkVFX0RFRFVQX1BBR0U6CisJCQlpZCA9ICJERURVUExJ Q0FURSI7CisJCQlicmVhazsKKwkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9QT1NUOgorCQkJaWQg PSAiSU5TRVJUX1BPU1QiOworCQkJYnJlYWs7CiAJCWNhc2UgWExPR19CVFJFRV9WQUNVVU06CiAJ CQlpZCA9ICJWQUNVVU0iOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL3BhZ2UvYnVmcGFnZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYwpp bmRleCBmNDcxNzY3NTNkLi4zMmZmMDNiM2U0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL3BhZ2UvYnVmcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdl LmMKQEAgLTEwNTUsOCArMTA1NSwxMCBAQCBQYWdlSW5kZXhUdXBsZURlbGV0ZU5vQ29tcGFjdChQ YWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pCiAgKiBUaGlzIGlzIGJldHRlciB0aGFuIGRl bGV0aW5nIGFuZCByZWluc2VydGluZyB0aGUgdHVwbGUsIGJlY2F1c2UgaXQKICAqIGF2b2lkcyBh bnkgZGF0YSBzaGlmdGluZyB3aGVuIHRoZSB0dXBsZSBzaXplIGRvZXNuJ3QgY2hhbmdlOyBhbmQK ICAqIGV2ZW4gd2hlbiBpdCBkb2VzLCB3ZSBhdm9pZCBtb3ZpbmcgdGhlIGxpbmUgcG9pbnRlcnMg YXJvdW5kLgotICogQ29uY2VpdmFibHkgdGhpcyBjb3VsZCBhbHNvIGJlIG9mIHVzZSB0byBhbiBp bmRleCBBTSB0aGF0IGNhcmVzIGFib3V0Ci0gKiB0aGUgcGh5c2ljYWwgb3JkZXIgb2YgdHVwbGVz IGFzIHdlbGwgYXMgdGhlaXIgSXRlbUlkIG9yZGVyLgorICogVGhpcyBjb3VsZCBiZSB1c2VkIGJ5 IGFuIGluZGV4IEFNIHRoYXQgZG9lc24ndCB3YW50IHRvIHVuc2V0IHRoZQorICogTFBfREVBRCBi aXQgd2hlbiBpdCBoYXBwZW5zIHRvIGJlIHNldC4gIEl0IGNvdWxkIGNvbmNlaXZhYmx5IGFsc28g YmUKKyAqIHVzZWQgYnkgYW4gaW5kZXggQU0gdGhhdCBjYXJlcyBhYm91dCB0aGUgcGh5c2ljYWwg b3JkZXIgb2YgdHVwbGVzIGFzCisgKiB3ZWxsIGFzIHRoZWlyIGxvZ2ljYWwvSXRlbUlkIG9yZGVy LgogICoKICAqIElmIHRoZXJlJ3MgaW5zdWZmaWNpZW50IHNwYWNlIGZvciB0aGUgbmV3IHR1cGxl LCByZXR1cm4gZmFsc2UuICBPdGhlcgogICogZXJyb3JzIHJlcHJlc2VudCBkYXRhLWNvcnJ1cHRp b24gcHJvYmxlbXMsIHNvIHdlIGp1c3QgZWxvZy4KQEAgLTExNDIsNyArMTE0NCw4IEBAIFBhZ2VJ bmRleFR1cGxlT3ZlcndyaXRlKFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAl9CiAK IAkvKiBVcGRhdGUgdGhlIGl0ZW0ncyB0dXBsZSBsZW5ndGggKG90aGVyIGZpZWxkcyBzaG91bGRu J3QgY2hhbmdlKSAqLwotCUl0ZW1JZFNldE5vcm1hbCh0dXBpZCwgb2Zmc2V0ICsgc2l6ZV9kaWZm LCBuZXdzaXplKTsKKwl0dXBpZC0+bHBfb2ZmID0gb2Zmc2V0ICsgc2l6ZV9kaWZmOworCXR1cGlk LT5scF9sZW4gPSBuZXdzaXplOwogCiAJLyogQ29weSBuZXcgdHVwbGUgZGF0YSBvbnRvIHBhZ2Ug Ki8KIAltZW1jcHkoUGFnZUdldEl0ZW0ocGFnZSwgdHVwaWQpLCBuZXd0dXAsIG5ld3NpemUpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjLmMKaW5kZXggZTVmOGExMzAxZi4uNzNkYTI3MTZmMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Yy5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvY29tbWl0X3RzLmgi CiAjaW5jbHVkZSAiYWNjZXNzL2dpbi5oIgorI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNp bmNsdWRlICJhY2Nlc3Mvcm1nci5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKQEAgLTEwOTEsNiArMTA5MiwxNSBAQCBzdGF0aWMgc3Ry dWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJZmFsc2UsCiAJCWNoZWNr X2JvbmpvdXIsIE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJkZWR1cGxpY2F0ZV9idHJlZV9pdGVt cyIsIFBHQ19VU0VSU0VULCBDTElFTlRfQ09OTl9TVEFURU1FTlQsCisJCQlnZXR0ZXh0X25vb3Ao IkVuYWJsZXMgQi10cmVlIGluZGV4IGRlZHVwbGljYXRpb24gb3B0aW1pemF0aW9uLiIpLAorCQkJ TlVMTAorCQl9LAorCQkmZGVkdXBsaWNhdGVfYnRyZWVfaXRlbXMsCisJCXRydWUsCisJCU5VTEws IE5VTEwsIE5VTEwKKwl9LAogCXsKIAkJeyJ0cmFja19jb21taXRfdGltZXN0YW1wIiwgUEdDX1BP U1RNQVNURVIsIFJFUExJQ0FUSU9OLAogCQkJZ2V0dGV4dF9ub29wKCJDb2xsZWN0cyB0cmFuc2Fj dGlvbiBjb21taXQgdGltZS4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZQppbmRleCBlMTA0OGMwMDQ3Li5iM2E5ODM0NWZhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC02NTIsNiArNjUyLDcg QEAKICN2YWN1dW1fY2xlYW51cF9pbmRleF9zY2FsZV9mYWN0b3IgPSAwLjEJIyBmcmFjdGlvbiBv ZiB0b3RhbCBudW1iZXIgb2YgdHVwbGVzCiAJCQkJCQkjIGJlZm9yZSBpbmRleCBjbGVhbnVwLCAw IGFsd2F5cyBwZXJmb3JtcwogCQkJCQkJIyBpbmRleCBjbGVhbnVwCisjZGVkdXBsaWNhdGVfYnRy ZWVfaXRlbXMgPSBvbgogI2J5dGVhX291dHB1dCA9ICdoZXgnCQkJIyBoZXgsIGVzY2FwZQogI3ht bGJpbmFyeSA9ICdiYXNlNjQnCiAjeG1sb3B0aW9uID0gJ2NvbnRlbnQnCmRpZmYgLS1naXQgYS9z cmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMK aW5kZXggYjUyMzk2YzE3YS4uOTg3ZTY0MDBlMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3Rh Yi1jb21wbGV0ZS5jCisrKyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwpAQCAtMTY4NSwx NCArMTY4NSwxNCBAQCBwc3FsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0 LCBpbnQgZW5kKQogCS8qIEFMVEVSIElOREVYIDxmb28+IFNFVHxSRVNFVCAoICovCiAJZWxzZSBp ZiAoTWF0Y2hlcygiQUxURVIiLCAiSU5ERVgiLCBNYXRjaEFueSwgIlJFU0VUIiwgIigiKSkKIAkJ Q09NUExFVEVfV0lUSCgiZmlsbGZhY3RvciIsCi0JCQkJCSAgInZhY3V1bV9jbGVhbnVwX2luZGV4 X3NjYWxlX2ZhY3RvciIsCS8qIEJUUkVFICovCisJCQkJCSAgInZhY3V1bV9jbGVhbnVwX2luZGV4 X3NjYWxlX2ZhY3RvciIsICJkZWR1cGxpY2F0ZV9pdGVtcyIsCS8qIEJUUkVFICovCiAJCQkJCSAg ImZhc3R1cGRhdGUiLCAiZ2luX3BlbmRpbmdfbGlzdF9saW1pdCIsCS8qIEdJTiAqLwogCQkJCQkg ICJidWZmZXJpbmciLAkvKiBHaVNUICovCiAJCQkJCSAgInBhZ2VzX3Blcl9yYW5nZSIsICJhdXRv c3VtbWFyaXplIgkvKiBCUklOICovCiAJCQkpOwogCWVsc2UgaWYgKE1hdGNoZXMoIkFMVEVSIiwg IklOREVYIiwgTWF0Y2hBbnksICJTRVQiLCAiKCIpKQogCQlDT01QTEVURV9XSVRIKCJmaWxsZmFj dG9yID0iLAotCQkJCQkgICJ2YWN1dW1fY2xlYW51cF9pbmRleF9zY2FsZV9mYWN0b3IgPSIsCS8q IEJUUkVFICovCisJCQkJCSAgInZhY3V1bV9jbGVhbnVwX2luZGV4X3NjYWxlX2ZhY3RvciA9Iiwg ImRlZHVwbGljYXRlX2l0ZW1zID0iLAkvKiBCVFJFRSAqLwogCQkJCQkgICJmYXN0dXBkYXRlID0i LCAiZ2luX3BlbmRpbmdfbGlzdF9saW1pdCA9IiwJLyogR0lOICovCiAJCQkJCSAgImJ1ZmZlcmlu ZyA9IiwJLyogR2lTVCAqLwogCQkJCQkgICJwYWdlc19wZXJfcmFuZ2UgPSIsICJhdXRvc3VtbWFy aXplID0iCS8qIEJSSU4gKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0 cmVlLmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCmluZGV4IDZhMDU4Y2NkYWMu LjM1OWI1YzE4ZGMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMK KysrIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwpAQCAtMTQ1LDYgKzE0NSw3IEBA IHN0YXRpYyB2b2lkIGJ0X3R1cGxlX3ByZXNlbnRfY2FsbGJhY2soUmVsYXRpb24gaW5kZXgsIEl0 ZW1Qb2ludGVyIHRpZCwKIAkJCQkJCQkJCSAgYm9vbCB0dXBsZUlzQWxpdmUsIHZvaWQgKmNoZWNr c3RhdGUpOwogc3RhdGljIEluZGV4VHVwbGUgYnRfbm9ybWFsaXplX3R1cGxlKEJ0cmVlQ2hlY2tT dGF0ZSAqc3RhdGUsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBpdHVwKTsKK3N0YXRpYyBpbmxpbmUg SW5kZXhUdXBsZSBidF9wb3N0aW5nX3BsYWluX3R1cGxlKEluZGV4VHVwbGUgaXR1cCwgaW50IG4p Owogc3RhdGljIGJvb2wgYnRfcm9vdGRlc2NlbmQoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgSW5k ZXhUdXBsZSBpdHVwKTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBvZmZzZXRfaXNfbmVnYXRpdmVfaW5m aW5pdHkoQlRQYWdlT3BhcXVlIG9wYXF1ZSwKIAkJCQkJCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9m ZnNldCk7CkBAIC0xNjcsNiArMTY4LDcgQEAgc3RhdGljIEl0ZW1JZCBQYWdlR2V0SXRlbUlkQ2Fy ZWZ1bChCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBCbG9ja051bWJlciBibG9jaywKIAkJCQkJCQkJ ICAgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2Zmc2V0KTsKIHN0YXRpYyBpbmxpbmUgSXRlbVBv aW50ZXIgQlRyZWVUdXBsZUdldEhlYXBUSURDYXJlZnVsKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUs CiAJCQkJCQkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGJvb2wgbm9ucGl2b3QpOworc3RhdGlj IGlubGluZSBJdGVtUG9pbnRlciBCVHJlZVR1cGxlR2V0UG9pbnRzVG9USUQoSW5kZXhUdXBsZSBp dHVwKTsKIAogLyoKICAqIGJ0X2luZGV4X2NoZWNrKGluZGV4IHJlZ2NsYXNzLCBoZWFwYWxsaW5k ZXhlZCBib29sZWFuKQpAQCAtMjc4LDcgKzI4MCw4IEBAIGJ0X2luZGV4X2NoZWNrX2ludGVybmFs KE9pZCBpbmRyZWxpZCwgYm9vbCBwYXJlbnRjaGVjaywgYm9vbCBoZWFwYWxsaW5kZXhlZCwKIAog CWlmIChidHJlZV9pbmRleF9tYWluZm9ya19leHBlY3RlZChpbmRyZWwpKQogCXsKLQkJYm9vbAlo ZWFwa2V5c3BhY2U7CisJCWJvb2wJCWhlYXBrZXlzcGFjZSwKKwkJCQkJc2FmZWRlZHVwOwogCiAJ CVJlbGF0aW9uT3BlblNtZ3IoaW5kcmVsKTsKIAkJaWYgKCFzbWdyZXhpc3RzKGluZHJlbC0+cmRf c21nciwgTUFJTl9GT1JLTlVNKSkKQEAgLTI4OCw3ICsyOTEsNyBAQCBidF9pbmRleF9jaGVja19p bnRlcm5hbChPaWQgaW5kcmVsaWQsIGJvb2wgcGFyZW50Y2hlY2ssIGJvb2wgaGVhcGFsbGluZGV4 ZWQsCiAJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaW5kcmVsKSkpKTsKIAogCQkvKiBD aGVjayBpbmRleCwgcG9zc2libHkgYWdhaW5zdCB0YWJsZSBpdCBpcyBhbiBpbmRleCBvbiAqLwot CQloZWFwa2V5c3BhY2UgPSBfYnRfaGVhcGtleXNwYWNlKGluZHJlbCk7CisJCV9idF9tZXRhdmVy c2lvbihpbmRyZWwsICZoZWFwa2V5c3BhY2UsICZzYWZlZGVkdXApOwogCQlidF9jaGVja19ldmVy eV9sZXZlbChpbmRyZWwsIGhlYXByZWwsIGhlYXBrZXlzcGFjZSwgcGFyZW50Y2hlY2ssCiAJCQkJ CQkJIGhlYXBhbGxpbmRleGVkLCByb290ZGVzY2VuZCk7CiAJfQpAQCAtNDE5LDEyICs0MjIsMTIg QEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBi b29sIGhlYXBrZXlzcGFjZSwKIAkJLyoKIAkJICogU2l6ZSBCbG9vbSBmaWx0ZXIgYmFzZWQgb24g ZXN0aW1hdGVkIG51bWJlciBvZiB0dXBsZXMgaW4gaW5kZXgsCiAJCSAqIHdoaWxlIGNvbnNlcnZh dGl2ZWx5IGFzc3VtaW5nIHRoYXQgZWFjaCBibG9jayBtdXN0IGNvbnRhaW4gYXQgbGVhc3QKLQkJ ICogTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC8gNSBub24tcGl2b3QgdHVwbGVzLiAgKE5vbi1sZWFm IHBhZ2VzIGNhbm5vdAotCQkgKiBjb250YWluIG5vbi1waXZvdCB0dXBsZXMuICBUaGF0J3Mgb2th eSBiZWNhdXNlIHRoZXkgZ2VuZXJhbGx5IG1ha2UKLQkJICogdXAgbm8gbW9yZSB0aGFuIGFib3V0 IDElIG9mIGFsbCBwYWdlcyBpbiB0aGUgaW5kZXguKQorCQkgKiBNYXhUSURzUGVyQlRyZWVQYWdl IC8gMyAicGxhaW4iIHR1cGxlcyAtLSBzZWUKKwkJICogYnRfcG9zdGluZ19wbGFpbl90dXBsZSgp IGZvciBkZWZpbml0aW9uLCBhbmQgZGV0YWlscyBvZiBob3cgcG9zdGluZworCQkgKiBsaXN0IHR1 cGxlcyBhcmUgaGFuZGxlZC4KIAkJICovCiAJCXRvdGFsX3BhZ2VzID0gUmVsYXRpb25HZXROdW1i ZXJPZkJsb2NrcyhyZWwpOwotCQl0b3RhbF9lbGVtcyA9IE1heCh0b3RhbF9wYWdlcyAqIChNYXhJ bmRleFR1cGxlc1BlclBhZ2UgLyA1KSwKKwkJdG90YWxfZWxlbXMgPSBNYXgodG90YWxfcGFnZXMg KiAoTWF4VElEc1BlckJUcmVlUGFnZSAvIDMpLAogCQkJCQkJICAoaW50NjQpIHN0YXRlLT5yZWwt PnJkX3JlbC0+cmVsdHVwbGVzKTsKIAkJLyogUmFuZG9tIHNlZWQgcmVsaWVzIG9uIGJhY2tlbmQg c3JhbmRvbSgpIGNhbGwgdG8gYXZvaWQgcmVwZXRpdGlvbiAqLwogCQlzZWVkID0gcmFuZG9tKCk7 CkBAIC05MjQsNiArOTI3LDcgQEAgYnRfdGFyZ2V0X3BhZ2VfY2hlY2soQnRyZWVDaGVja1N0YXRl ICpzdGF0ZSkKIAkJc2l6ZV90CQl0dXBzaXplOwogCQlCVFNjYW5JbnNlcnQgc2tleTsKIAkJYm9v bAkJbG93ZXJzaXplbGltaXQ7CisJCUl0ZW1Qb2ludGVyIHNjYW50aWQ7CiAKIAkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKIApAQCAtOTU0LDEzICs5NTgsMTUgQEAgYnRfdGFyZ2V0X3BhZ2VfY2hl Y2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSkKIAkJaWYgKCFfYnRfY2hlY2tfbmF0dHMoc3RhdGUt PnJlbCwgc3RhdGUtPmhlYXBrZXlzcGFjZSwgc3RhdGUtPnRhcmdldCwKIAkJCQkJCQkgb2Zmc2V0 KSkKIAkJeworCQkJSXRlbVBvaW50ZXIgdGlkOwogCQkJY2hhcgkgICAqaXRpZCwKIAkJCQkJICAg Kmh0aWQ7CiAKIAkJCWl0aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsIHN0YXRlLT50YXJnZXRibG9j aywgb2Zmc2V0KTsKKwkJCXRpZCA9IEJUcmVlVHVwbGVHZXRQb2ludHNUb1RJRChpdHVwKTsKIAkJ CWh0aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051 bWJlck5vQ2hlY2soJihpdHVwLT50X3RpZCkpLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0T2Zmc2V0 TnVtYmVyTm9DaGVjaygmKGl0dXAtPnRfdGlkKSkpOworCQkJCQkJCUl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXJOb0NoZWNrKHRpZCksCisJCQkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXJO b0NoZWNrKHRpZCkpOwogCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOREVYX0NPUlJVUFRFRCksCkBAIC05OTQsMTggKzEwMDAsMjAgQEAgYnRfdGFyZ2V0X3BhZ2Vf Y2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSkKIAogCQkvKgogCQkgKiBSZWFkb25seSBjYWxs ZXJzIG1heSBvcHRpb25hbGx5IHZlcmlmeSB0aGF0IG5vbi1waXZvdCB0dXBsZXMgY2FuCi0JCSAq IGVhY2ggYmUgZm91bmQgYnkgYW4gaW5kZXBlbmRlbnQgc2VhcmNoIHRoYXQgc3RhcnRzIGZyb20g dGhlIHJvb3QKKwkJICogZWFjaCBiZSBmb3VuZCBieSBhbiBpbmRlcGVuZGVudCBzZWFyY2ggdGhh dCBzdGFydHMgZnJvbSB0aGUgcm9vdC4KKwkJICogTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSBk b24ndCBkbyBpbmRpdmlkdWFsIHNlYXJjaGVzIGZvciBlYWNoCisJCSAqIFRJRCwgc2luY2UgdGhl IHBvc3RpbmcgbGlzdCBpdHNlbGYgaXMgdmFsaWRhdGVkIGJ5IG90aGVyIGNoZWNrcy4KIAkJICov CiAJCWlmIChzdGF0ZS0+cm9vdGRlc2NlbmQgJiYgUF9JU0xFQUYodG9wYXF1ZSkgJiYKIAkJCSFi dF9yb290ZGVzY2VuZChzdGF0ZSwgaXR1cCkpCiAJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZCA9IEJU cmVlVHVwbGVHZXRQb2ludHNUb1RJRChpdHVwKTsKIAkJCWNoYXIJICAgKml0aWQsCiAJCQkJCSAg ICpodGlkOwogCiAJCQlpdGlkID0gcHNwcmludGYoIigldSwldSkiLCBzdGF0ZS0+dGFyZ2V0Ymxv Y2ssIG9mZnNldCk7Ci0JCQlodGlkID0gcHNwcmludGYoIigldSwldSkiLAotCQkJCQkJCUl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIoJihpdHVwLT50X3RpZCkpLAotCQkJCQkJCUl0ZW1Qb2ludGVy R2V0T2Zmc2V0TnVtYmVyKCYoaXR1cC0+dF90aWQpKSk7CisJCQlodGlkID0gcHNwcmludGYoIigl dSwldSkiLCBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJSXRlbVBvaW50 ZXJHZXRPZmZzZXROdW1iZXIodGlkKSk7CiAKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwKQEAgLTEwMTcsNiArMTAyNSw0MCBAQCBidF90 YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQogCQkJCQkJCQkJCSh1aW50 MzIpIHN0YXRlLT50YXJnZXRsc24pKSk7CiAJCX0KIAorCQkvKgorCQkgKiBJZiB0dXBsZSBpcyBh IHBvc3RpbmcgbGlzdCB0dXBsZSwgbWFrZSBzdXJlIHBvc3RpbmcgbGlzdCBUSURzIGFyZQorCQkg KiBpbiBvcmRlcgorCQkgKi8KKwkJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCisJCXsK KwkJCUl0ZW1Qb2ludGVyRGF0YSBsYXN0OworCQkJSXRlbVBvaW50ZXIgY3VycmVudDsKKworCQkJ SXRlbVBvaW50ZXJDb3B5KEJUcmVlVHVwbGVHZXRIZWFwVElEKGl0dXApLCAmbGFzdCk7CisKKwkJ CWZvciAoaW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCisJ CQl7CisKKwkJCQljdXJyZW50ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpOworCisJ CQkJaWYgKEl0ZW1Qb2ludGVyQ29tcGFyZShjdXJyZW50LCAmbGFzdCkgPD0gMCkKKwkJCQl7CisJ CQkJCWNoYXIJICAgKml0aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsIHN0YXRlLT50YXJnZXRibG9j aywgb2Zmc2V0KTsKKworCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5ERVhfQ09SUlVQVEVEKSwKKwkJCQkJCQkgZXJybXNnKCJwb3N0aW5nIGxpc3QgaGVhcCBU SURzIG91dCBvZiBvcmRlciBpbiBpbmRleCBcIiVzXCIiLAorCQkJCQkJCQkJUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUoc3RhdGUtPnJlbCkpLAorCQkJCQkJCSBlcnJkZXRhaWxfaW50ZXJuYWwoIklu ZGV4IHRpZD0lcyBwb3N0aW5nIGxpc3Qgb2Zmc2V0PSVkIHBhZ2UgbHNuPSVYLyVYLiIsCisJCQkJ CQkJCQkJCQlpdGlkLCBpLAorCQkJCQkJCQkJCQkJKHVpbnQzMikgKHN0YXRlLT50YXJnZXRsc24g Pj4gMzIpLAorCQkJCQkJCQkJCQkJKHVpbnQzMikgc3RhdGUtPnRhcmdldGxzbikpKTsKKwkJCQl9 CisKKwkJCQlJdGVtUG9pbnRlckNvcHkoY3VycmVudCwgJmxhc3QpOworCQkJfQorCQl9CisKIAkJ LyogQnVpbGQgaW5zZXJ0aW9uIHNjYW5rZXkgZm9yIGN1cnJlbnQgcGFnZSBvZmZzZXQgKi8KIAkJ c2tleSA9IGJ0X21rc2NhbmtleV9waXZvdHNlYXJjaChzdGF0ZS0+cmVsLCBpdHVwKTsKIApAQCAt MTA0OSwxMyArMTA5MSwxNCBAQCBidF90YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUg KnN0YXRlKQogCQlpZiAodHVwc2l6ZSA+IChsb3dlcnNpemVsaW1pdCA/IEJUTWF4SXRlbVNpemUo c3RhdGUtPnRhcmdldCkgOgogCQkJCQkgICBCVE1heEl0ZW1TaXplTm9IZWFwVGlkKHN0YXRlLT50 YXJnZXQpKSkKIAkJeworCQkJSXRlbVBvaW50ZXIgdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1Rv VElEKGl0dXApOwogCQkJY2hhcgkgICAqaXRpZCwKIAkJCQkJICAgKmh0aWQ7CiAKIAkJCWl0aWQg PSBwc3ByaW50ZigiKCV1LCV1KSIsIHN0YXRlLT50YXJnZXRibG9jaywgb2Zmc2V0KTsKIAkJCWh0 aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl ck5vQ2hlY2soJihpdHVwLT50X3RpZCkpLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVt YmVyTm9DaGVjaygmKGl0dXAtPnRfdGlkKSkpOworCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXJOb0NoZWNrKHRpZCksCisJCQkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXJOb0No ZWNrKHRpZCkpOwogCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO REVYX0NPUlJVUFRFRCksCkBAIC0xMDc0LDEyICsxMTE3LDMyIEBAIGJ0X3RhcmdldF9wYWdlX2No ZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUpCiAJCXsKIAkJCUluZGV4VHVwbGUJbm9ybTsKIAot CQkJbm9ybSA9IGJ0X25vcm1hbGl6ZV90dXBsZShzdGF0ZSwgaXR1cCk7Ci0JCQlibG9vbV9hZGRf ZWxlbWVudChzdGF0ZS0+ZmlsdGVyLCAodW5zaWduZWQgY2hhciAqKSBub3JtLAotCQkJCQkJCSAg SW5kZXhUdXBsZVNpemUobm9ybSkpOwotCQkJLyogQmUgdGlkeSAqLwotCQkJaWYgKG5vcm0gIT0g aXR1cCkKLQkJCQlwZnJlZShub3JtKTsKKwkJCWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXAp KQorCQkJeworCQkJCS8qIEZpbmdlcnByaW50IGFsbCBlbGVtZW50cyBhcyBkaXN0aW5jdCAicGxh aW4iIHR1cGxlcyAqLworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0 aW5nKGl0dXApOyBpKyspCisJCQkJeworCQkJCQlJbmRleFR1cGxlCWxvZ3R1cGxlOworCisJCQkJ CWxvZ3R1cGxlID0gYnRfcG9zdGluZ19wbGFpbl90dXBsZShpdHVwLCBpKTsKKwkJCQkJbm9ybSA9 IGJ0X25vcm1hbGl6ZV90dXBsZShzdGF0ZSwgbG9ndHVwbGUpOworCQkJCQlibG9vbV9hZGRfZWxl bWVudChzdGF0ZS0+ZmlsdGVyLCAodW5zaWduZWQgY2hhciAqKSBub3JtLAorCQkJCQkJCQkJICBJ bmRleFR1cGxlU2l6ZShub3JtKSk7CisJCQkJCS8qIEJlIHRpZHkgKi8KKwkJCQkJaWYgKG5vcm0g IT0gbG9ndHVwbGUpCisJCQkJCQlwZnJlZShub3JtKTsKKwkJCQkJcGZyZWUobG9ndHVwbGUpOwor CQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlub3JtID0gYnRfbm9ybWFsaXplX3R1cGxl KHN0YXRlLCBpdHVwKTsKKwkJCQlibG9vbV9hZGRfZWxlbWVudChzdGF0ZS0+ZmlsdGVyLCAodW5z aWduZWQgY2hhciAqKSBub3JtLAorCQkJCQkJCQkgIEluZGV4VHVwbGVTaXplKG5vcm0pKTsKKwkJ CQkvKiBCZSB0aWR5ICovCisJCQkJaWYgKG5vcm0gIT0gaXR1cCkKKwkJCQkJcGZyZWUobm9ybSk7 CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTA4Nyw3ICsxMTUwLDggQEAgYnRfdGFyZ2V0X3BhZ2Vf Y2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSkKIAkJICoKIAkJICogSWYgdGhlcmUgaXMgYSBo aWdoIGtleSAoaWYgdGhpcyBpcyBub3QgdGhlIHJpZ2h0bW9zdCBwYWdlIG9uIGl0cwogCQkgKiBl bnRpcmUgbGV2ZWwpLCBjaGVjayB0aGF0IGhpZ2gga2V5IGFjdHVhbGx5IGlzIHVwcGVyIGJvdW5k IG9uIGFsbAotCQkgKiBwYWdlIGl0ZW1zLgorCQkgKiBwYWdlIGl0ZW1zLiAgSWYgdGhpcyBpcyBh IHBvc3RpbmcgbGlzdCB0dXBsZSwgd2UnbGwgbmVlZCB0byBzZXQKKwkJICogc2NhbnRpZCB0byBi ZSBoaWdoZXN0IFRJRCBpbiBwb3N0aW5nIGxpc3QuCiAJCSAqCiAJCSAqIFdlIHByZWZlciB0byBj aGVjayBhbGwgaXRlbXMgYWdhaW5zdCBoaWdoIGtleSByYXRoZXIgdGhhbiBjaGVja2luZwogCQkg KiBqdXN0IHRoZSBsYXN0IGFuZCB0cnVzdGluZyB0aGF0IHRoZSBvcGVyYXRvciBjbGFzcyBvYmV5 cyB0aGUKQEAgLTExMjcsMTcgKzExOTEsMjIgQEAgYnRfdGFyZ2V0X3BhZ2VfY2hlY2soQnRyZWVD aGVja1N0YXRlICpzdGF0ZSkKIAkJICogdHVwbGUuIChTZWUgYWxzbzogIk5vdGVzIEFib3V0IERh dGEgUmVwcmVzZW50YXRpb24iIGluIHRoZSBuYnRyZWUKIAkJICogUkVBRE1FLikKIAkJICovCisJ CXNjYW50aWQgPSBza2V5LT5zY2FudGlkOworCQlpZiAoc3RhdGUtPmhlYXBrZXlzcGFjZSAmJiBC VHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQorCQkJc2tleS0+c2NhbnRpZCA9IEJUcmVlVHVwbGVH ZXRNYXhIZWFwVElEKGl0dXApOworCiAJCWlmICghUF9SSUdIVE1PU1QodG9wYXF1ZSkgJiYKIAkJ CSEoUF9JU0xFQUYodG9wYXF1ZSkgPyBpbnZhcmlhbnRfbGVxX29mZnNldChzdGF0ZSwgc2tleSwg UF9ISUtFWSkgOgogCQkJICBpbnZhcmlhbnRfbF9vZmZzZXQoc3RhdGUsIHNrZXksIFBfSElLRVkp KSkKIAkJeworCQkJSXRlbVBvaW50ZXIgdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1RvVElEKGl0 dXApOwogCQkJY2hhcgkgICAqaXRpZCwKIAkJCQkJICAgKmh0aWQ7CiAKIAkJCWl0aWQgPSBwc3By aW50ZigiKCV1LCV1KSIsIHN0YXRlLT50YXJnZXRibG9jaywgb2Zmc2V0KTsKIAkJCWh0aWQgPSBw c3ByaW50ZigiKCV1LCV1KSIsCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlck5vQ2hl Y2soJihpdHVwLT50X3RpZCkpLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyTm9D aGVjaygmKGl0dXAtPnRfdGlkKSkpOworCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXJO b0NoZWNrKHRpZCksCisJCQkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXJOb0NoZWNrKHRp ZCkpOwogCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NP UlJVUFRFRCksCkBAIC0xMTUwLDYgKzEyMTksOCBAQCBidF90YXJnZXRfcGFnZV9jaGVjayhCdHJl ZUNoZWNrU3RhdGUgKnN0YXRlKQogCQkJCQkJCQkJCSh1aW50MzIpIChzdGF0ZS0+dGFyZ2V0bHNu ID4+IDMyKSwKIAkJCQkJCQkJCQkodWludDMyKSBzdGF0ZS0+dGFyZ2V0bHNuKSkpOwogCQl9CisJ CS8qIFJlc2V0LCBpbiBjYXNlIHNjYW50aWQgd2FzIHNldCB0byAoaXR1cCkgcG9zdGluZyB0dXBs ZSdzIG1heCBUSUQgKi8KKwkJc2tleS0+c2NhbnRpZCA9IHNjYW50aWQ7CiAKIAkJLyoKIAkJICog KiBJdGVtIG9yZGVyIGNoZWNrICoKQEAgLTExNjAsMTUgKzEyMzEsMTcgQEAgYnRfdGFyZ2V0X3Bh Z2VfY2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSkKIAkJaWYgKE9mZnNldE51bWJlck5leHQo b2Zmc2V0KSA8PSBtYXggJiYKIAkJCSFpbnZhcmlhbnRfbF9vZmZzZXQoc3RhdGUsIHNrZXksIE9m ZnNldE51bWJlck5leHQob2Zmc2V0KSkpCiAJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZDsKIAkJCWNo YXIJICAgKml0aWQsCiAJCQkJCSAgICpodGlkLAogCQkJCQkgICAqbml0aWQsCiAJCQkJCSAgICpu aHRpZDsKIAogCQkJaXRpZCA9IHBzcHJpbnRmKCIoJXUsJXUpIiwgc3RhdGUtPnRhcmdldGJsb2Nr LCBvZmZzZXQpOworCQkJdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1RvVElEKGl0dXApOwogCQkJ aHRpZCA9IHBzcHJpbnRmKCIoJXUsJXUpIiwKLQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVt YmVyTm9DaGVjaygmKGl0dXAtPnRfdGlkKSksCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXRO dW1iZXJOb0NoZWNrKCYoaXR1cC0+dF90aWQpKSk7CisJCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlck5vQ2hlY2sodGlkKSwKKwkJCQkJCQlJdGVtUG9pbnRlckdldE9mZnNldE51bWJlck5v Q2hlY2sodGlkKSk7CiAJCQluaXRpZCA9IHBzcHJpbnRmKCIoJXUsJXUpIiwgc3RhdGUtPnRhcmdl dGJsb2NrLAogCQkJCQkJCSBPZmZzZXROdW1iZXJOZXh0KG9mZnNldCkpOwogCkBAIC0xMTc3LDkg KzEyNTAsMTAgQEAgYnRfdGFyZ2V0X3BhZ2VfY2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSkK IAkJCQkJCQkJCQkgIHN0YXRlLT50YXJnZXQsCiAJCQkJCQkJCQkJICBPZmZzZXROdW1iZXJOZXh0 KG9mZnNldCkpOwogCQkJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+dGFy Z2V0LCBpdGVtaWQpOworCQkJdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1RvVElEKGl0dXApOwog CQkJbmh0aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsCi0JCQkJCQkJIEl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXJOb0NoZWNrKCYoaXR1cC0+dF90aWQpKSwKLQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRP ZmZzZXROdW1iZXJOb0NoZWNrKCYoaXR1cC0+dF90aWQpKSk7CisJCQkJCQkJIEl0ZW1Qb2ludGVy R2V0QmxvY2tOdW1iZXJOb0NoZWNrKHRpZCksCisJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0 TnVtYmVyTm9DaGVjayh0aWQpKTsKIAogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLApAQCAtMTk1MywxMCArMjAyNyw5IEBAIGJ0X3R1cGxl X3ByZXNlbnRfY2FsbGJhY2soUmVsYXRpb24gaW5kZXgsIEl0ZW1Qb2ludGVyIHRpZCwgRGF0dW0g KnZhbHVlcywKICAqIHZlcmlmaWNhdGlvbi4gIEluIHBhcnRpY3VsYXIsIGl0IHdvbid0IHRyeSB0 byBub3JtYWxpemUgb3BjbGFzcy1lcXVhbAogICogZGF0dW1zIHdpdGggcG90ZW50aWFsbHkgZGlz dGluY3QgcmVwcmVzZW50YXRpb25zIChlLmcuLCBidHJlZS9udW1lcmljX29wcwogICogaW5kZXgg ZGF0dW1zIHdpbGwgbm90IGdldCB0aGVpciBkaXNwbGF5IHNjYWxlIG5vcm1hbGl6ZWQtYXdheSBo ZXJlKS4KLSAqIE5vcm1hbGl6YXRpb24gbWF5IG5lZWQgdG8gYmUgZXhwYW5kZWQgdG8gaGFuZGxl IG1vcmUgY2FzZXMgaW4gdGhlIGZ1dHVyZSwKLSAqIHRob3VnaC4gIEZvciBleGFtcGxlLCBpdCdz IHBvc3NpYmxlIHRoYXQgbm9uLXBpdm90IHR1cGxlcyBjb3VsZCBpbiB0aGUKLSAqIGZ1dHVyZSBo YXZlIGFsdGVybmF0aXZlIGxvZ2ljYWxseSBlcXVpdmFsZW50IHJlcHJlc2VudGF0aW9ucyBkdWUg dG8gdXNpbmcKLSAqIHRoZSBJTkRFWF9BTFRfVElEX01BU0sgYml0IHRvIGltcGxlbWVudCBpbnRl bGxpZ2VudCBkZWR1cGxpY2F0aW9uLgorICogQ2FsbGVyIGRvZXMgbm9ybWFsaXphdGlvbiBmb3Ig bm9uLXBpdm90IHR1cGxlcyB0aGF0IGhhdmUgYSBwb3N0aW5nIGxpc3QsCisgKiBzaW5jZSBkdW1t eSBDUkVBVEUgSU5ERVggY2FsbGJhY2sgY29kZSBnZW5lcmF0ZXMgbmV3IHR1cGxlcyB3aXRoIHRo ZSBzYW1lCisgKiBub3JtYWxpemVkIHJlcHJlc2VudGF0aW9uLgogICovCiBzdGF0aWMgSW5kZXhU dXBsZQogYnRfbm9ybWFsaXplX3R1cGxlKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVw bGUgaXR1cCkKQEAgLTE5NjksNiArMjA0Miw5IEBAIGJ0X25vcm1hbGl6ZV90dXBsZShCdHJlZUNo ZWNrU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJSW5kZXhUdXBsZQlyZWZvcm1lZDsK IAlpbnQJCQlpOwogCisJLyogQ2FsbGVyIHNob3VsZCBvbmx5IHBhc3MgImxvZ2ljYWwiIG5vbi1w aXZvdCB0dXBsZXMgaGVyZSAqLworCUFzc2VydCghQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSAm JiAhQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpOworCiAJLyogRWFzeSBjYXNlOiBJdCdzIGltbWVk aWF0ZWx5IGNsZWFyIHRoYXQgdHVwbGUgaGFzIG5vIHZhcmxlbmEgZGF0dW1zICovCiAJaWYgKCFJ bmRleFR1cGxlSGFzVmFyd2lkdGhzKGl0dXApKQogCQlyZXR1cm4gaXR1cDsKQEAgLTIwMzEsNiAr MjEwNywyOSBAQCBidF9ub3JtYWxpemVfdHVwbGUoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgSW5k ZXhUdXBsZSBpdHVwKQogCXJldHVybiByZWZvcm1lZDsKIH0KIAorLyoKKyAqIFByb2R1Y2UgcGFs bG9jKCknZCAicGxhaW4iIHR1cGxlIGZvciBudGggcG9zdGluZyBsaXN0IGVudHJ5L1RJRC4KKyAq CisgKiBJbiBnZW5lcmFsLCBkZWR1cGxpY2F0aW9uIGlzIG5vdCBzdXBwb3NlZCB0byBjaGFuZ2Ug dGhlIGxvZ2ljYWwgY29udGVudHMgb2YKKyAqIGFuIGluZGV4LiAgTXVsdGlwbGUgaW5kZXggdHVw bGVzIGFyZSBtZXJnZWQgdG9nZXRoZXIgaW50byBvbmUgZXF1aXZhbGVudAorICogcG9zdGluZyBs aXN0IGluZGV4IHR1cGxlIHdoZW4gY29udmVuaWVudC4KKyAqCisgKiBoZWFwYWxsaW5kZXhlZCB2 ZXJpZmljYXRpb24gbXVzdCBub3JtYWxpemUtYXdheSB0aGlzIHZhcmlhdGlvbiBpbgorICogcmVw cmVzZW50YXRpb24gYnkgY29udmVydGluZyBwb3N0aW5nIGxpc3QgdHVwbGVzIGludG8gdHdvIG9y IG1vcmUgInBsYWluIgorICogdHVwbGVzLiAgRWFjaCB0dXBsZSBtdXN0IGJlIGZpbmdlcnByaW50 ZWQgc2VwYXJhdGVseSAtLSB0aGVyZSBtdXN0IGJlIG9uZQorICogdHVwbGUgZm9yIGVhY2ggY29y cmVzcG9uZGluZyBCbG9vbSBmaWx0ZXIgcHJvYmUgZHVyaW5nIHRoZSBoZWFwIHNjYW4uCisgKgor ICogTm90ZTogQ2FsbGVyIHN0aWxsIG5lZWRzIHRvIGNhbGwgYnRfbm9ybWFsaXplX3R1cGxlKCkg d2l0aCByZXR1cm5lZCB0dXBsZS4KKyAqLworc3RhdGljIGlubGluZSBJbmRleFR1cGxlCitidF9w b3N0aW5nX3BsYWluX3R1cGxlKEluZGV4VHVwbGUgaXR1cCwgaW50IG4pCit7CisJQXNzZXJ0KEJU cmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpOworCisJLyogUmV0dXJucyBub24tcG9zdGluZy1saXN0 IHR1cGxlICovCisJcmV0dXJuIF9idF9mb3JtX3Bvc3RpbmcoaXR1cCwgQlRyZWVUdXBsZUdldFBv c3RpbmdOKGl0dXAsIG4pLCAxKTsKK30KKwogLyoKICAqIFNlYXJjaCBmb3IgaXR1cCBpbiBpbmRl eCwgc3RhcnRpbmcgZnJvbSBmYXN0IHJvb3QgcGFnZS4gIGl0dXAgbXVzdCBiZSBhCiAgKiBub24t cGl2b3QgdHVwbGUuICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggaGVhcGtleXNwYWNlIGlu ZGV4ZXMsIHNpbmNlCkBAIC0yMDg3LDYgKzIxODYsNyBAQCBidF9yb290ZGVzY2VuZChCdHJlZUNo ZWNrU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJCWluc2VydHN0YXRlLml0dXAgPSBp dHVwOwogCQlpbnNlcnRzdGF0ZS5pdGVtc3ogPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShpdHVw KSk7CiAJCWluc2VydHN0YXRlLml0dXBfa2V5ID0ga2V5OworCQlpbnNlcnRzdGF0ZS5wb3N0aW5n b2ZmID0gMDsKIAkJaW5zZXJ0c3RhdGUuYm91bmRzX3ZhbGlkID0gZmFsc2U7CiAJCWluc2VydHN0 YXRlLmJ1ZiA9IGxidWY7CiAKQEAgLTIwOTQsNyArMjE5NCw5IEBAIGJ0X3Jvb3RkZXNjZW5kKEJ0 cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIAkJb2ZmbnVtID0gX2J0X2Jp bnNyY2hfaW5zZXJ0KHN0YXRlLT5yZWwsICZpbnNlcnRzdGF0ZSk7CiAJCS8qIENvbXBhcmUgZmly c3QgPj0gbWF0Y2hpbmcgaXRlbSBvbiBsZWFmIHBhZ2UsIGlmIGFueSAqLwogCQlwYWdlID0gQnVm ZmVyR2V0UGFnZShsYnVmKTsKKwkJLyogU2hvdWxkIG1hdGNoIG9uIGZpcnN0IGhlYXAgVElEIHdo ZW4gdHVwbGUgaGFzIGEgcG9zdGluZyBsaXN0ICovCiAJCWlmIChvZmZudW0gPD0gUGFnZUdldE1h eE9mZnNldE51bWJlcihwYWdlKSAmJgorCQkJaW5zZXJ0c3RhdGUucG9zdGluZ29mZiA8PSAwICYm CiAJCQlfYnRfY29tcGFyZShzdGF0ZS0+cmVsLCBrZXksIHBhZ2UsIG9mZm51bSkgPT0gMCkKIAkJ CWV4aXN0cyA9IHRydWU7CiAJCV9idF9yZWxidWYoc3RhdGUtPnJlbCwgbGJ1Zik7CkBAIC0yNTQ4 LDI2ICsyNjUwLDY5IEBAIFBhZ2VHZXRJdGVtSWRDYXJlZnVsKEJ0cmVlQ2hlY2tTdGF0ZSAqc3Rh dGUsIEJsb2NrTnVtYmVyIGJsb2NrLCBQYWdlIHBhZ2UsCiB9CiAKIC8qCi0gKiBCVHJlZVR1cGxl R2V0SGVhcFRJRCgpIHdyYXBwZXIgdGhhdCBsZXRzIGNhbGxlciBlbmZvcmNlIHRoYXQgYSBoZWFw IFRJRCBtdXN0Ci0gKiBiZSBwcmVzZW50IGluIGNhc2VzIHdoZXJlIHRoYXQgaXMgbWFuZGF0b3J5 LgotICoKLSAqIFRoaXMgZG9lc24ndCBhZGQgbXVjaCBhcyBvZiBCVFJFRV9WRVJTSU9OIDQsIHNp bmNlIHRoZSBJTkRFWF9BTFRfVElEX01BU0sKLSAqIGJpdCBpcyBlZmZlY3RpdmVseSBhIHByb3h5 IGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgdHVwbGUgaXMgYSBwaXZvdCB0dXBsZS4KLSAqIEl0IG1h eSBiZWNvbWUgbW9yZSB1c2VmdWwgaW4gdGhlIGZ1dHVyZSwgd2hlbiBub24tcGl2b3QgdHVwbGVz IHN1cHBvcnQgdGhlaXIKLSAqIG93biBhbHRlcm5hdGl2ZSBJTkRFWF9BTFRfVElEX01BU0sgcmVw cmVzZW50YXRpb24uCisgKiBCVHJlZVR1cGxlR2V0SGVhcFRJRCgpIHdyYXBwZXIgdGhhdCBlbmZv cmNlcyB0aGF0IGEgaGVhcCBUSUQgaXMgcHJlc2VudCBpbgorICogY2FzZXMgd2hlcmUgdGhhdCBp cyBtYW5kYXRvcnkgKGkuZS4gZm9yIG5vbi1waXZvdCB0dXBsZXMpCiAgKi8KIHN0YXRpYyBpbmxp bmUgSXRlbVBvaW50ZXIKIEJUcmVlVHVwbGVHZXRIZWFwVElEQ2FyZWZ1bChCdHJlZUNoZWNrU3Rh dGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXAsCiAJCQkJCQkJYm9vbCBub25waXZvdCkKIHsKLQlJ dGVtUG9pbnRlciByZXN1bHQgPSBCVHJlZVR1cGxlR2V0SGVhcFRJRChpdHVwKTsKLQlCbG9ja051 bWJlciB0YXJnZXRibG9jayA9IHN0YXRlLT50YXJnZXRibG9jazsKKwlJdGVtUG9pbnRlciBodGlk OwogCi0JaWYgKHJlc3VsdCA9PSBOVUxMICYmIG5vbnBpdm90KQorCS8qCisJICogQ2FsbGVyIGRl dGVybWluZXMgd2hldGhlciB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIGEgcGl2b3Qgb3Igbm9uLXBp dm90CisJICogdHVwbGUgdXNpbmcgcGFnZSB0eXBlIGFuZCBpdGVtIG9mZnNldCBudW1iZXIuICBW ZXJpZnkgdGhhdCB0dXBsZQorCSAqIG1ldGFkYXRhIGFncmVlcyB3aXRoIHRoaXMuCisJICovCisJ QXNzZXJ0KHN0YXRlLT5oZWFwa2V5c3BhY2UpOworCWlmIChCVHJlZVR1cGxlSXNQaXZvdChpdHVw KSAmJiBub25waXZvdCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO REVYX0NPUlJVUFRFRCksCisJCQkJIGVycm1zZ19pbnRlcm5hbCgiYmxvY2sgJXUgb3IgaXRzIHJp Z2h0IHNpYmxpbmcgYmxvY2sgb3IgY2hpbGQgYmxvY2sgaW4gaW5kZXggXCIlc1wiIGhhcyB1bmV4 cGVjdGVkIHBpdm90IHR1cGxlIiwKKwkJCQkJCQkJIHN0YXRlLT50YXJnZXRibG9jaywKKwkJCQkJ CQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5yZWwpKSkpOworCisJaWYgKCFCVHJl ZVR1cGxlSXNQaXZvdChpdHVwKSAmJiAhbm9ucGl2b3QpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLAorCQkJCSBlcnJtc2dfaW50ZXJuYWwo ImJsb2NrICV1IG9yIGl0cyByaWdodCBzaWJsaW5nIGJsb2NrIG9yIGNoaWxkIGJsb2NrIGluIGlu ZGV4IFwiJXNcIiBoYXMgdW5leHBlY3RlZCBub24tcGl2b3QgdHVwbGUiLAorCQkJCQkJCQkgc3Rh dGUtPnRhcmdldGJsb2NrLAorCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdGUt PnJlbCkpKSk7CisKKwlodGlkID0gQlRyZWVUdXBsZUdldEhlYXBUSUQoaXR1cCk7CisJaWYgKCFJ dGVtUG9pbnRlcklzVmFsaWQoaHRpZCkgJiYgbm9ucGl2b3QpCiAJCWVyZXBvcnQoRVJST1IsCiAJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLAogCQkJCSBlcnJtc2coImJsb2Nr ICV1IG9yIGl0cyByaWdodCBzaWJsaW5nIGJsb2NrIG9yIGNoaWxkIGJsb2NrIGluIGluZGV4IFwi JXNcIiBjb250YWlucyBub24tcGl2b3QgdHVwbGUgdGhhdCBsYWNrcyBhIGhlYXAgVElEIiwKLQkJ CQkJCXRhcmdldGJsb2NrLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+cmVsKSkpKTsK KwkJCQkJCXN0YXRlLT50YXJnZXRibG9jaywKKwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHN0YXRlLT5yZWwpKSkpOwogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gaHRpZDsKK30KKwor LyoKKyAqIFJldHVybiB0aGUgInBvaW50ZWQgdG8iIFRJRCBmb3IgaXR1cCwgd2hpY2ggaXMgdXNl ZCB0byBnZW5lcmF0ZSBhCisgKiBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlLiAgaXR1cCBtdXN0 IGJlIGEgImRhdGEgaXRlbSIgdHVwbGUgKGl0IHdvdWxkbid0CisgKiBtYWtlIG11Y2ggc2Vuc2Ug dG8gY2FsbCBoZXJlIHdpdGggYSBoaWdoIGtleSB0dXBsZSwgc2luY2UgdGhlcmUgd29uJ3QgYmUg YQorICogdmFsaWQgZG93bmxpbmsvYmxvY2sgbnVtYmVyIHRvIGRpc3BsYXkpLgorICoKKyAqIFJl dHVybnMgZWl0aGVyIGEgaGVhcCBUSUQgKHdoaWNoIHdpbGwgYmUgdGhlIGZpcnN0IGhlYXAgVElE IGluIHBvc3RpbmcgbGlzdAorICogaWYgaXR1cCBpcyBwb3N0aW5nIGxpc3QgdHVwbGUpLCBvciBh IFRJRCB0aGF0IGNvbnRhaW5zIGRvd25saW5rIGJsb2NrCisgKiBudW1iZXIsIHBsdXMgc29tZSBl bmNvZGVkIG1ldGFkYXRhIChlLmcuLCB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgcHJlc2VudAor ICogaW4gaXR1cCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgSXRlbVBvaW50ZXIKK0JUcmVlVHVwbGVH ZXRQb2ludHNUb1RJRChJbmRleFR1cGxlIGl0dXApCit7CisJLyoKKwkgKiBSZWx5IG9uIHRoZSBh c3N1bXB0aW9uIHRoYXQgIWhlYXBrZXlzcGFjZSBpbnRlcm5hbCBwYWdlIGRhdGEgaXRlbXMgd2ls bAorCSAqIGNvcnJlY3RseSByZXR1cm4gVElEIHdpdGggZG93bmxpbmsgaGVyZSAtLSBCVHJlZVR1 cGxlR2V0SGVhcFRJRCgpIHdvbid0CisJICogcmVjb2duaXplIGl0IGFzIGEgcGl2b3QgdHVwbGUs IGJ1dCBldmVyeXRoaW5nIHN0aWxsIHdvcmtzIG91dCBiZWNhdXNlCisJICogdGhlIHRfdGlkIGZp ZWxkIGlzIHN0aWxsIHJldHVybmVkCisJICovCisJaWYgKCFCVHJlZVR1cGxlSXNQaXZvdChpdHVw KSkKKwkJcmV0dXJuIEJUcmVlVHVwbGVHZXRIZWFwVElEKGl0dXApOworCisJLyogUGl2b3QgdHVw bGUgcmV0dXJucyBUSUQgd2l0aCBkb3dubGluayBibG9jayAoaGVhcGtleXNwYWNlIHZhcmlhbnQp ICovCisJcmV0dXJuICZpdHVwLT50X3RpZDsKIH0KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9i dHJlZS5zZ21sIGIvZG9jL3NyYy9zZ21sL2J0cmVlLnNnbWwKaW5kZXggNTg4MWVhNWRkNi4uZGE3 MDA3MTM1ZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2J0cmVlLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL2J0cmVlLnNnbWwKQEAgLTQzMywxMSArNDMzLDEyNyBAQCByZXR1cm5zIGJvb2wKIDxz ZWN0MSBpZD0iYnRyZWUtaW1wbGVtZW50YXRpb24iPgogIDx0aXRsZT5JbXBsZW1lbnRhdGlvbjwv dGl0bGU+CiAKKyA8cGFyYT4KKyAgSW50ZXJuYWxseSwgYSBCLXRyZWUgaW5kZXggY29uc2lzdHMg b2YgYSB0cmVlIHN0cnVjdHVyZSB3aXRoIGxlYWYKKyAgcGFnZXMuICBFYWNoIGxlYWYgcGFnZSBj b250YWlucyB0dXBsZXMgdGhhdCBwb2ludCB0byB0YWJsZSBlbnRyaWVzCisgIHVzaW5nIGEgaGVh cCBpdGVtIHBvaW50ZXIuICBFYWNoIHR1cGxlJ3Mga2V5IGlzIGNvbnNpZGVyZWQgdW5pcXVlCisg IGludGVybmFsbHksIHNpbmNlIHRoZSBpdGVtIHBvaW50ZXIgaXMgdHJlYXRlZCBhcyBwYXJ0IG9m IHRoZSBrZXkuCisgPC9wYXJhPgorIDxwYXJhPgorICBBbiBpbnRyb2R1Y3Rpb24gdG8gdGhlIGJ0 cmVlIGluZGV4IGltcGxlbWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbgorICA8ZmlsZW5hbWU+c3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUU8L2ZpbGVuYW1lPi4KKyA8L3BhcmE+CisKKyA8 c2VjdDIgaWQ9ImJ0cmVlLWRlZHVwbGljYXRpb24iPgorICA8dGl0bGU+RGVkdXBsaWNhdGlvbjwv dGl0bGU+CiAgIDxwYXJhPgotICAgQW4gaW50cm9kdWN0aW9uIHRvIHRoZSBidHJlZSBpbmRleCBp bXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4KLSAgIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL1JFQURNRTwvZmlsZW5hbWU+LgorICAgQi1UcmVlIHN1cHBvcnRzIDxmaXJz dHRlcm0+ZGVkdXBsaWNhdGlvbjwvZmlyc3R0ZXJtPi4gIEV4aXN0aW5nCisgICBsZWFmIHBhZ2Ug dHVwbGVzIHdpdGggZnVsbHkgZXF1YWwga2V5cyAoZXF1YWwgcHJpb3IgdG8gdGhlIGhlYXAKKyAg IGl0ZW0gcG9pbnRlcikgYXJlIG1lcmdlZCB0b2dldGhlciBpbnRvIGEgc2luZ2xlIDxxdW90ZT5w b3N0aW5nCisgICBsaXN0PC9xdW90ZT4gdHVwbGUuICBUaGUga2V5cyBhcHBlYXIgb25seSBvbmNl IGluIHRoaXMKKyAgIHJlcHJlc2VudGF0aW9uLiAgQSBzaW1wbGUgYXJyYXkgb2YgaGVhcCBpdGVt IHBvaW50ZXJzIGZvbGxvd3MuCisgICBQb3N0aW5nIGxpc3RzIGFyZSBmb3JtZWQgPHF1b3RlPmxh emlseTwvcXVvdGU+LCB3aGVuIGEgbmV3IGl0ZW0gaXMKKyAgIGluc2VydGVkIHRoYXQgY2Fubm90 IGZpdCBvbiBhbiBleGlzdGluZyBsZWFmIHBhZ2UuICBUaGUgaW1tZWRpYXRlCisgICBnb2FsIG9m IHRoZSBkZWR1cGxpY2F0aW9uIHByb2Nlc3MgaXMgdG8gYXQgbGVhc3QgZnJlZSBlbm91Z2ggc3Bh Y2UKKyAgIHRvIGZpdCB0aGUgbmV3IGl0ZW07IG90aGVyd2lzZSBhIGxlYWYgcGFnZSBzcGxpdCBv Y2N1cnMsIHdoaWNoCisgICBhbGxvY2F0ZXMgYSBuZXcgbGVhZiBwYWdlLiAgVGhlIDxmaXJzdHRl cm0+a2V5IHNwYWNlPC9maXJzdHRlcm0+CisgICBjb3ZlcmVkIGJ5IHRoZSBvcmlnaW5hbCBsZWFm IHBhZ2UgaXMgc2hhcmVkIGFtb25nIHRoZSBvcmlnaW5hbCBwYWdlLAorICAgYW5kIGl0cyBuZXcg cmlnaHQgc2libGluZyBwYWdlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgQSBkdXBsaWNhdGUg aXMgYSByb3cgd2hlcmUgPGVtcGhhc2lzPmFsbDwvZW1waGFzaXM+IGluZGV4ZWQga2V5CisgICBj b2x1bW5zIGFyZSBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW4gdmFsdWVzIGZyb20g c29tZQorICAgb3RoZXIgcm93LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgRGVkdXBsaWNhdGlv biBjYW4gZ3JlYXRseSBpbmNyZWFzZSBpbmRleCBzcGFjZSBlZmZpY2llbmN5IHdpdGggZGF0YQor ICAgc2V0cyB3aGVyZSBlYWNoIGRpc3RpbmN0IGtleSBhcHBlYXJzIGF0IGxlYXN0IGEgZmV3IHRp bWVzIG9uCisgICBhdmVyYWdlLiAgSXQgY2FuIGFsc28gcmVkdWNlIHRoZSBjb3N0IG9mIHN1YnNl cXVlbnQgaW5kZXggc2NhbnMsCisgICBlc3BlY2lhbGx5IHdoZW4gbWFueSBsZWFmIHBhZ2VzIG11 c3QgYmUgYWNjZXNzZWQuICBGb3IgZXhhbXBsZSwgYW4KKyAgIGluZGV4IG9uIGEgc2ltcGxlIDx0 eXBlPmludGVnZXI8L3R5cGU+IGNvbHVtbiB0aGF0IHVzZXMKKyAgIGRlZHVwbGljYXRpb24gd2ls bCBoYXZlIGEgc3RvcmFnZSBzaXplIHRoYXQgaXMgb25seSBhYm91dCA2NSUgb2YgYW4KKyAgIGVx dWl2YWxlbnQgdW5vcHRpbWl6ZWQgaW5kZXggd2hlbiBlYWNoIGRpc3RpbmN0CisgICA8dHlwZT5p bnRlZ2VyPC90eXBlPiB2YWx1ZSBhcHBlYXJzIHRocmVlIHRpbWVzLiAgSWYgZWFjaCBkaXN0aW5j dAorICAgPHR5cGU+aW50ZWdlcjwvdHlwZT4gdmFsdWUgYXBwZWFycyBzaXggdGltZXMsIHRoZSBz dG9yYWdlIG92ZXJoZWFkCisgICBjYW4gYmUgYXMgbG93IGFzIDUwJSBvZiBiYXNlbGluZS4gIFdp dGggaHVuZHJlZHMgb2YgZHVwbGljYXRlcyBwZXIKKyAgIGRpc3RpbmN0IHZhbHVlIChvciB3aXRo IGxhcmdlciA8cXVvdGU+YmFzZTwvcXVvdGU+IGtleSB2YWx1ZXMpLCBhCisgICBzdG9yYWdlIHNp emUgb2YgYWJvdXQgb25lIHRoaXJkIG9mIHRoZSB1bm9wdGltaXplZCBjYXNlIGlzCisgICBleHBl Y3RlZC4gIFRoZXJlIGlzIHVzdWFsbHkgYSBkaXJlY3QgYmVuZWZpdCBmb3IgcXVlcmllcywgYXMg d2VsbAorICAgYXMgYW4gaW5kaXJlY3QgYmVuZWZpdCBkdWUgdG8gcmVkdWNlZCBJL08gZHVyaW5n IHJvdXRpbmUgdmFjdXVtaW5nLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgQ2FzZXMgdGhhdCBk b24ndCBiZW5lZml0IGR1ZSB0byBoYXZpbmcgbm8gZHVwbGljYXRlIHZhbHVlcyB3aWxsCisgICBp bmN1ciBhIHNtYWxsIHBlcmZvcm1hbmNlIHBlbmFsdHkgd2l0aCBtaXhlZCByZWFkLXdyaXRlIHdv cmtsb2Fkcy4KKyAgIFRoZXJlIGlzIG5vIHBlcmZvcm1hbmNlIHBlbmFsdHkgd2l0aCByZWFkLW9u bHkgd29ya2xvYWRzLCBzaW5jZQorICAgcmVhZGluZyBmcm9tIHBvc3RpbmcgbGlzdHMgaXMgYXQg bGVhc3QgYXMgZWZmaWNpZW50IGFzIHJlYWRpbmcgdGhlCisgICBzdGFuZGFyZCBpbmRleCB0dXBs ZSByZXByZXNlbnRhdGlvbi4KKyAgPC9wYXJhPgorIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9ImJ0 cmVlLWRlZHVwbGljYXRpb24tY29uZmlndXJlIj4KKyAgPHRpdGxlPkNvbmZpZ3VyaW5nIERlZHVw bGljYXRpb248L3RpdGxlPgorCisgIDxwYXJhPgorICAgVGhlIDx4cmVmIGxpbmtlbmQ9Imd1Yy1i dHJlZS1kZWR1cGxpY2F0ZS1pdGVtcyIvPiBjb25maWd1cmF0aW9uCisgICBwYXJhbWV0ZXIgY29u dHJvbHMgZGVkdXBsaWNhdGlvbi4gIEJ5IGRlZmF1bHQsIGRlZHVwbGljYXRpb24gaXMKKyAgIGVu YWJsZWQuICBUaGUgPGxpdGVyYWw+ZGVkdXBsaWNhdGVfaXRlbXM8L2xpdGVyYWw+IHN0b3JhZ2UK KyAgIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgY29uZmlndXJhdGlvbiBw YXJhbWF0ZXIgZm9yCisgICBpbmRpdmlkdWFsIGluZGV4ZXMuICBTZWUgPHhyZWYKKyAgIGxpbmtl bmQ9InNxbC1jcmVhdGVpbmRleC1zdG9yYWdlLXBhcmFtZXRlcnMiLz4gZnJvbSB0aGUKKyAgIDxj b21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFuZD4gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4K KyAgPC9wYXJhPgorIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9ImJ0cmVlLWRlZHVwbGljYXRpb24t cmVzdHJpY3Rpb25zIj4KKyAgPHRpdGxlPlJlc3RyaWN0aW9uczwvdGl0bGU+CisKKyAgPHBhcmE+ CisgICBEZWR1cGxpY2F0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBhIEItVHJlZSBpbmRleCB3 aGVuCisgICA8ZW1waGFzaXM+YWxsPC9lbXBoYXNpcz4gaW5kZXhlZCBjb2x1bW5zIHVzZSBhIGRl ZHVwbGljYXRpb24tc2FmZQorICAgb3BlcmF0b3IgY2xhc3MgdGhhdCBleHBsaWNpdGx5IGluZGlj YXRlcyB0aGF0IGRlZHVwbGljYXRpb24gaXMgc2FmZQorICAgYXQgPGNvbW1hbmQ+Q1JFQVRFIElO REVYPC9jb21tYW5kPiB0aW1lLiAgSW4gcHJhY3RpY2UgYWxtb3N0IGFsbAorICAgZGF0YXR5cGVz IHN1cHBvcnQgZGVkdXBsaWNhdGlvbi4gIDx0eXBlPm51bWVyaWM8L3R5cGU+IGlzIGEgbm90YWJs ZQorICAgZXhjZXB0aW9uICg8cXVvdGU+ZGlzcGxheSBzY2FsZTwvcXVvdGU+IG1ha2VzIGl0IGlt cG9zc2libGUgdG8KKyAgIGVuYWJsZSBkZWR1cGxpY2F0aW9uIHdpdGhvdXQgbG9zaW5nIHVzZWZ1 bCBpbmZvcm1hdGlvbiBhYm91dCBlcXVhbAorICAgPHR5cGU+bnVtZXJpYzwvdHlwZT4gZGF0dW1z KS4gIFNvbWUgb3BlcmF0b3IgY2xhc3NlcyBzdXBwb3J0CisgICBkZWR1cGxpY2F0aW9uIGNvbmRp dGlvbmFsbHkuICBGb3IgZXhhbXBsZSwgZGVkdXBsaWNhdGlvbiBvZiBpbmRleGVzCisgICBvbiBh IDx0eXBlPnRleHQ8L3R5cGU+IGNvbHVtbiAod2l0aCB0aGUgZGVmYXVsdAorICAgPGxpdGVyYWw+ YnRyZWUvdGV4dF9vcHM8L2xpdGVyYWw+IG9wZXJhdG9yIGNsYXNzKSBpcyBub3Qgc3VwcG9ydGVk CisgICB3aGVuIHRoZSBjb2x1bW4gdXNlcyBhICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbi4K KyAgPC9wYXJhPgorICA8cGFyYT4KKyAgIDxsaXRlcmFsPklOQ0xVREU8L2xpdGVyYWw+IGluZGV4 ZXMgZG8gbm90IHN1cHBvcnQgZGVkdXBsaWNhdGlvbi4KICAgPC9wYXJhPgogCisgPC9zZWN0Mj4K KworIDxzZWN0MiBpZD0iYnRyZWUtZGVkdXBsaWNhdGlvbi11bmlxdWUiPgorICA8dGl0bGU+SW50 ZXJuYWwgdXNlIG9mIERlZHVwbGljYXRpb24gaW4gdW5pcXVlIGluZGV4ZXM8L3RpdGxlPgorCisg IDxwYXJhPgorICAgUGFnZSBzcGxpdHMgdGhhdCBvY2N1ciBkdWUgdG8gaW5zZXJ0aW5nIG11bHRp cGxlIHBoeXNpY2FsIHZlcnNpb25zCisgICAocmF0aGVyIHRoYW4gaW5zZXJ0aW5nIG5ldyBsb2dp Y2FsIHJvd3MpIHRlbmQgdG8gZGVncmFkZSB0aGUKKyAgIHN0cnVjdHVyZSBvZiBpbmRleGVzLCBl c3BlY2lhbGx5IGluIHRoZSBjYXNlIG9mIHVuaXF1ZSBpbmRleGVzLgorICAgVW5pcXVlIGluZGV4 ZXMgdXNlIGRlZHVwbGljYXRpb24gPGVtcGhhc2lzPmludGVybmFsbHk8L2VtcGhhc2lzPgorICAg YW5kIDxlbXBoYXNpcz5zZWxlY3RpdmVseTwvZW1waGFzaXM+IHRvIGRlbGF5IChhbmQgaWRlYWxs eSB0bworICAgcHJldmVudCkgdGhlc2UgPHF1b3RlPnVubmVjZXNzYXJ5PC9xdW90ZT4gcGFnZSBz cGxpdHMuCisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IG9yIGF1dG92YWN1dW0gd2lsbCBl dmVudHVhbGx5IHJlbW92ZSBkZWFkCisgICB2ZXJzaW9ucyBvZiB0dXBsZXMgZnJvbSBldmVyeSBp bmRleCBpbiBhbnkgY2FzZSwgYnV0IHVzdWFsbHkgY2Fubm90CisgICByZXZlcnNlIHBhZ2Ugc3Bs aXRzIChpbiBnZW5lcmFsLCB0aGUgcGFnZSBtdXN0IGJlIGNvbXBsZXRlbHkgZW1wdHkKKyAgIGJl Zm9yZSA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IGNhbiA8cXVvdGU+ZGVsZXRlPC9xdW90ZT4g aXQpLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgVGhlIDx4cmVmIGxpbmtlbmQ9Imd1Yy1idHJl ZS1kZWR1cGxpY2F0ZS1pdGVtcyIvPiBjb25maWd1cmF0aW9uCisgICBwYXJhbWV0ZXIgZG9lcyBu b3QgYWZmZWN0IHdoZXRoZXIgb3Igbm90IGRlZHVwbGljYXRpb24gaXMgdXNlZAorICAgd2l0aGlu IHVuaXF1ZSBpbmRleGVzLiAgVGhlIGludGVybmFsIHVzZSBvZiBkZWR1cGxpY2F0aW9uIGZvcgor ICAgdW5pcXVlIGluZGV4ZXMgaXMgc3ViamVjdCB0byBhbGwgb2YgdGhlIHNhbWUgcmVzdHJpY3Rp b25zIGFzCisgICBkZWR1cGxpY2F0aW9uIGluIGdlbmVyYWwuICBUaGUgPGxpdGVyYWw+ZGVkdXBs aWNhdGVfaXRlbXM8L2xpdGVyYWw+CisgICBzdG9yYWdlIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRv IDxsaXRlcmFsPk9GRjwvbGl0ZXJhbD4gdG8gZGlzYWJsZQorICAgZGVkdXBsaWNhdGlvbiBpbiB1 bmlxdWUgaW5kZXhlcywgYnV0IHRoaXMgaXMgaW50ZW5kZWQgb25seSBhcyBhCisgICBkZWJ1Z2dp bmcgb3B0aW9uIGZvciBkZXZlbG9wZXJzLgorICA8L3BhcmE+CisKKyA8L3NlY3QyPgogPC9zZWN0 MT4KIAogPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NoYXJzZXQuc2dtbCBi L2RvYy9zcmMvc2dtbC9jaGFyc2V0LnNnbWwKaW5kZXggNTU2NjliNWNhZC4uOWYzNzFkM2UzYSAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NoYXJzZXQuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv Y2hhcnNldC5zZ21sCkBAIC05MjgsMTAgKzkyOCwxMSBAQCBDUkVBVEUgQ09MTEFUSU9OIGlnbm9y ZV9hY2NlbnRzIChwcm92aWRlciA9IGljdSwgbG9jYWxlID0gJ3VuZC11LWtzLWxldmVsMS1rYy10 cgogICAgICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgZ2l2ZSBhIG1vcmUgPHF1b3RlPmNv cnJlY3Q8L3F1b3RlPiBiZWhhdmlvciwKICAgICAgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5n IHRoZSBmdWxsIHBvd2VyIG9mIFVuaWNvZGUgYW5kIGl0cyBtYW55CiAgICAgIHNwZWNpYWwgY2Fz ZXMsIHRoZXkgYWxzbyBoYXZlIHNvbWUgZHJhd2JhY2tzLiAgRm9yZW1vc3QsIHRoZWlyIHVzZSBs ZWFkcwotICAgICB0byBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuICBBbHNvLCBjZXJ0YWluIG9wZXJh dGlvbnMgYXJlIG5vdCBwb3NzaWJsZSB3aXRoCi0gICAgIG5vbmRldGVybWluaXN0aWMgY29sbGF0 aW9ucywgc3VjaCBhcyBwYXR0ZXJuIG1hdGNoaW5nIG9wZXJhdGlvbnMuCi0gICAgIFRoZXJlZm9y ZSwgdGhleSBzaG91bGQgYmUgdXNlZCBvbmx5IGluIGNhc2VzIHdoZXJlIHRoZXkgYXJlIHNwZWNp ZmljYWxseQotICAgICB3YW50ZWQuCisgICAgIHRvIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4gIE5v dGUsIGluIHBhcnRpY3VsYXIsIHRoYXQgQi10cmVlIGNhbm5vdCB1c2UKKyAgICAgZGVkdXBsaWNh dGlvbiB3aXRoIGluZGV4ZXMgdGhhdCB1c2UgYSBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbi4g IEFsc28sCisgICAgIGNlcnRhaW4gb3BlcmF0aW9ucyBhcmUgbm90IHBvc3NpYmxlIHdpdGggbm9u ZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zLAorICAgICBzdWNoIGFzIHBhdHRlcm4gbWF0Y2hpbmcg b3BlcmF0aW9ucy4gIFRoZXJlZm9yZSwgdGhleSBzaG91bGQgYmUgdXNlZAorICAgICBvbmx5IGlu IGNhc2VzIHdoZXJlIHRoZXkgYXJlIHNwZWNpZmljYWxseSB3YW50ZWQuCiAgICAgPC9wYXJhPgog ICAgPC9zZWN0Mz4KICAgPC9zZWN0Mj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcu c2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCA1ZDQ1YjZmN2NiLi41NWE4MGQ5 ZjRlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL2NvbmZpZy5zZ21sCkBAIC04MDQxLDYgKzgwNDEsMzEgQEAgQ09QWSBwb3N0Z3Jlc19sb2cg RlJPTSAnL2Z1bGwvcGF0aC90by9sb2dmaWxlLmNzdicgV0lUSCBjc3Y7CiAgICAgICA8L2xpc3Rp dGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt YnRyZWUtZGVkdXBsaWNhdGUtaXRlbXMiIHhyZWZsYWJlbD0iZGVkdXBsaWNhdGVfYnRyZWVfaXRl bXMiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZGVkdXBsaWNhdGVfYnRyZWVfaXRlbXM8L3Zhcm5h bWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHBy aW1hcnk+PHZhcm5hbWU+ZGVkdXBsaWNhdGVfYnRyZWVfaXRlbXM8L3Zhcm5hbWU+PC9wcmltYXJ5 PgorICAgICAgIDxzZWNvbmRhcnk+Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3NlY29uZGFyeT4K KyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAg ICAgIDxwYXJhPgorICAgICAgICBDb250cm9scyB3aGV0aGVyIGRlZHVwbGljYXRpb24gc2hvdWxk IGJlIHVzZWQgd2l0aGluIEItVHJlZQorICAgICAgICBpbmRleGVzLiAgRGVkdXBsaWNhdGlvbiBp cyBhbiBvcHRpbWl6YXRpb24gdGhhdCByZWR1Y2VzIHRoZQorICAgICAgICBzdG9yYWdlIHNpemUg b2YgaW5kZXhlcyBieSBzdG9yaW5nIGVxdWFsIGluZGV4IGtleXMgb25seSBvbmNlLgorICAgICAg ICBTZWUgPHhyZWYgbGlua2VuZD0iYnRyZWUtZGVkdXBsaWNhdGlvbiIvPiBmb3IgbW9yZQorICAg ICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KKyAgICAg ICAgVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIGZvciBpbmRpdmlkdWFsIEItVHJlZSBp bmRleGVzCisgICAgICAgIGJ5IGNoYW5naW5nIGluZGV4IHN0b3JhZ2UgcGFyYW1ldGVycy4gIFNl ZSA8eHJlZgorICAgICAgICBsaW5rZW5kPSJzcWwtY3JlYXRlaW5kZXgtc3RvcmFnZS1wYXJhbWV0 ZXJzIi8+IGZyb20gdGhlCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFuZD4g ZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3Rp dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt Ynl0ZWEtb3V0cHV0IiB4cmVmbGFiZWw9ImJ5dGVhX291dHB1dCI+CiAgICAgICA8dGVybT48dmFy bmFtZT5ieXRlYV9vdXRwdXQ8L3Zhcm5hbWU+ICg8dHlwZT5lbnVtPC90eXBlPikKICAgICAgIDxp bmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAppbmRleCA2MjlhMzFlZjc5Li42 NjU5ZDE1YmY0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKQEAgLTE2Niw2ICsxNjYs OCBAQCBDUkVBVEUgWyBVTklRVUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBdIFsgWyBJRiBOT1Qg RVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPQogICAgICAgICBtYXhpbXVtIHNpemUgYWxsb3dl ZCBmb3IgdGhlIGluZGV4IHR5cGUsIGRhdGEgaW5zZXJ0aW9uIHdpbGwgZmFpbC4KICAgICAgICAg SW4gYW55IGNhc2UsIG5vbi1rZXkgY29sdW1ucyBkdXBsaWNhdGUgZGF0YSBmcm9tIHRoZSBpbmRl eCdzIHRhYmxlCiAgICAgICAgIGFuZCBibG9hdCB0aGUgc2l6ZSBvZiB0aGUgaW5kZXgsIHRodXMg cG90ZW50aWFsbHkgc2xvd2luZyBzZWFyY2hlcy4KKyAgICAgICAgTW9yZW92ZXIsIEItdHJlZSBk ZWR1cGxpY2F0aW9uIGlzIG5ldmVyIHVzZWQgd2l0aCBpbmRleGVzIHRoYXQKKyAgICAgICAgaGF2 ZSBhIG5vbi1rZXkgY29sdW1uLgogICAgICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAt Mzg4LDEwICszOTAsNDAgQEAgQ1JFQVRFIFsgVU5JUVVFIF0gSU5ERVggWyBDT05DVVJSRU5UTFkg XSBbIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0KICAgIDwvdmFyaWFibGVs aXN0PgogCiAgICA8cGFyYT4KLSAgICBCLXRyZWUgaW5kZXhlcyBhZGRpdGlvbmFsbHkgYWNjZXB0 IHRoaXMgcGFyYW1ldGVyOgorICAgIEItdHJlZSBpbmRleGVzIGFsc28gYWNjZXB0IHRoZXNlIHBh cmFtZXRlcnM6CiAgICA8L3BhcmE+CiAKICAgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVu dHJ5IGlkPSJpbmRleC1yZWxvcHRpb24tZGVkdXBsaWNhdGlvbiIgeHJlZmxhYmVsPSJkZWR1cGxp Y2F0ZV9pdGVtcyI+CisgICAgPHRlcm0+PGxpdGVyYWw+ZGVkdXBsaWNhdGVfaXRlbXM8L2xpdGVy YWw+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5kZWR1cGxpY2F0 ZV9pdGVtczwvdmFybmFtZT48L3ByaW1hcnk+CisgICAgICA8c2Vjb25kYXJ5PnN0b3JhZ2UgcGFy YW1ldGVyPC9zZWNvbmRhcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8 bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgICBQZXItaW5kZXggdmFsdWUgZm9yIDx4cmVmCisg ICAgICBsaW5rZW5kPSJndWMtYnRyZWUtZGVkdXBsaWNhdGUtaXRlbXMiLz4uICBDb250cm9scyB1 c2FnZSBvZiB0aGUKKyAgICAgIEItdHJlZSBkZWR1cGxpY2F0aW9uIHRlY2huaXF1ZSBkZXNjcmli ZWQgaW4gPHhyZWYKKyAgICAgIGxpbmtlbmQ9ImJ0cmVlLWRlZHVwbGljYXRpb24iLz4uICBTZXQg dG8gPGxpdGVyYWw+T048L2xpdGVyYWw+CisgICAgICBvciA8bGl0ZXJhbD5PRkY8L2xpdGVyYWw+ IHRvIG92ZXJyaWRlIEdVQy4gIChBbHRlcm5hdGl2ZQorICAgICAgc3BlbGxpbmdzIG9mIDxsaXRl cmFsPk9OPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+T0ZGPC9saXRlcmFsPgorICAgICAgYXJlIGFs bG93ZWQgYXMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImNvbmZpZy1zZXR0aW5nIi8+LikK KyAgICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPk9OPC9saXRlcmFsPi4KKyAgICA8L3BhcmE+ CisKKyAgICA8bm90ZT4KKyAgICAgPHBhcmE+CisgICAgICBUdXJuaW5nIDxsaXRlcmFsPmRlZHVw bGljYXRlX2l0ZW1zPC9saXRlcmFsPiBvZmYgdmlhCisgICAgICA8Y29tbWFuZD5BTFRFUiBJTkRF WDwvY29tbWFuZD4gcHJldmVudHMgZnV0dXJlIGluc2VydGlvbnMgZnJvbQorICAgICAgdHJpZ2dl cmluZyBkZWR1cGxpY2F0aW9uLCBidXQgZG9lcyBub3QgaW4gaXRzZWxmIG1ha2UgZXhpc3RpbmcK KyAgICAgIHBvc3RpbmcgbGlzdCB0dXBsZXMgdXNlIHRoZSBzdGFuZGFyZCB0dXBsZSByZXByZXNl bnRhdGlvbi4KKyAgICAgPC9wYXJhPgorICAgIDwvbm90ZT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImluZGV4LXJlbG9wdGlvbi12 YWN1dW0tY2xlYW51cC1pbmRleC1zY2FsZS1mYWN0b3IiIHhyZWZsYWJlbD0idmFjdXVtX2NsZWFu dXBfaW5kZXhfc2NhbGVfZmFjdG9yIj4KICAgICA8dGVybT48bGl0ZXJhbD52YWN1dW1fY2xlYW51 cF9pbmRleF9zY2FsZV9mYWN0b3I8L2xpdGVyYWw+CiAgICAgIDxpbmRleHRlcm0+CkBAIC00NDYs OSArNDc4LDcgQEAgQ1JFQVRFIFsgVU5JUVVFIF0gSU5ERVggWyBDT05DVVJSRU5UTFkgXSBbIFsg SUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0KICAgICAgVGhpcyBzZXR0aW5nIGNv bnRyb2xzIHVzYWdlIG9mIHRoZSBmYXN0IHVwZGF0ZSB0ZWNobmlxdWUgZGVzY3JpYmVkIGluCiAg ICAgIDx4cmVmIGxpbmtlbmQ9Imdpbi1mYXN0LXVwZGF0ZSIvPi4gIEl0IGlzIGEgQm9vbGVhbiBw YXJhbWV0ZXI6CiAgICAgIDxsaXRlcmFsPk9OPC9saXRlcmFsPiBlbmFibGVzIGZhc3QgdXBkYXRl LCA8bGl0ZXJhbD5PRkY8L2xpdGVyYWw+IGRpc2FibGVzIGl0LgotICAgICAoQWx0ZXJuYXRpdmUg c3BlbGxpbmdzIG9mIDxsaXRlcmFsPk9OPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+T0ZGPC9saXRl cmFsPiBhcmUKLSAgICAgYWxsb3dlZCBhcyBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0iY29u ZmlnLXNldHRpbmciLz4uKSAgVGhlCi0gICAgIGRlZmF1bHQgaXMgPGxpdGVyYWw+T048L2xpdGVy YWw+LgorICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5PTjwvbGl0ZXJhbD4uCiAgICAgPC9w YXJhPgogCiAgICAgPG5vdGU+CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2J0cmVlX2luZGV4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfaW5kZXgu b3V0CmluZGV4IGY1NjcxMTdhNDYuLjNkMzUzY2VmZGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvYnRyZWVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvYnRyZWVfaW5kZXgub3V0CkBAIC0yNjYsNiArMjY2LDIyIEBAIHNlbGVjdCAqIGZyb20g YnRyZWVfYnBjaGFyIHdoZXJlIGYxOjpicGNoYXIgbGlrZSAnZm9vJSc7CiAgZm9vbAogKDIgcm93 cykKIAorLS0KKy0tIFBlcmZvcm0gdW5pcXVlIGNoZWNraW5nLCB3aXRoIGFuZCB3aXRob3V0IHRo ZSB1c2Ugb2YgZGVkdXBsaWNhdGlvbgorLS0KK0NSRUFURSBUQUJMRSBkZWR1cF91bmlxdWVfdGVz dF90YWJsZSAoYSBpbnQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSk7CitDUkVBVEUg VU5JUVVFIElOREVYIGRlZHVwX3VuaXF1ZSBPTiBkZWR1cF91bmlxdWVfdGVzdF90YWJsZSAoYSkg V0lUSCAoZGVkdXBsaWNhdGVfaXRlbXM9b24pOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBwbGFpbl91 bmlxdWUgT04gZGVkdXBfdW5pcXVlX3Rlc3RfdGFibGUgKGEpIFdJVEggKGRlZHVwbGljYXRlX2l0 ZW1zPW9mZik7CistLSBHZW5lcmF0ZSBlbm91Z2ggZ2FyYmFnZSB0dXBsZXMgaW4gaW5kZXggdG8g ZW5zdXJlIHRoYXQgZXZlbiB0aGUgdW5pcXVlIGluZGV4CistLSB3aXRoIGRlZHVwbGljYXRpb24g ZW5hYmxlZCBoYXMgdG8gY2hlY2sgbXVsdGlwbGUgbGVhZiBwYWdlcyBkdXJpbmcgdW5pcXVlCist LSBjaGVja2luZyAoYXQgbGVhc3Qgd2l0aCBhIEJMQ0tTWiBvZiA4MTkyIG9yIGxlc3MpCitETyAk JAorQkVHSU4KKyAgICBGT1IgciBJTiAxLi4xMzUwIExPT1AKKyAgICAgICAgREVMRVRFIEZST00g ZGVkdXBfdW5pcXVlX3Rlc3RfdGFibGU7CisgICAgICAgIElOU0VSVCBJTlRPIGRlZHVwX3VuaXF1 ZV90ZXN0X3RhYmxlIFNFTEVDVCAxOworICAgIEVORCBMT09QOworRU5EJCQ7CiAtLQogLS0gVGVz dCBCLXRyZWUgZmFzdCBwYXRoIChjYWNoZSByaWdodG1vc3QgbGVhZiBwYWdlKSBvcHRpbWl6YXRp b24uCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5kZXguc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5kZXguc3FsCmluZGV4IDU1OGRjYWUwZWMu LmIwYjgxYjJiOWEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX2luZGV4 LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9pbmRleC5zcWwKQEAgLTEwMyw2 ICsxMDMsMjMgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKQogc2VsZWN0ICogZnJvbSBidHJlZV9icGNo YXIgd2hlcmUgZjE6OmJwY2hhciBsaWtlICdmb28lJzsKIHNlbGVjdCAqIGZyb20gYnRyZWVfYnBj aGFyIHdoZXJlIGYxOjpicGNoYXIgbGlrZSAnZm9vJSc7CiAKKy0tCistLSBQZXJmb3JtIHVuaXF1 ZSBjaGVja2luZywgd2l0aCBhbmQgd2l0aG91dCB0aGUgdXNlIG9mIGRlZHVwbGljYXRpb24KKy0t CitDUkVBVEUgVEFCTEUgZGVkdXBfdW5pcXVlX3Rlc3RfdGFibGUgKGEgaW50KSBXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQ9ZmFsc2UpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBkZWR1cF91bmlxdWUg T04gZGVkdXBfdW5pcXVlX3Rlc3RfdGFibGUgKGEpIFdJVEggKGRlZHVwbGljYXRlX2l0ZW1zPW9u KTsKK0NSRUFURSBVTklRVUUgSU5ERVggcGxhaW5fdW5pcXVlIE9OIGRlZHVwX3VuaXF1ZV90ZXN0 X3RhYmxlIChhKSBXSVRIIChkZWR1cGxpY2F0ZV9pdGVtcz1vZmYpOworLS0gR2VuZXJhdGUgZW5v dWdoIGdhcmJhZ2UgdHVwbGVzIGluIGluZGV4IHRvIGVuc3VyZSB0aGF0IGV2ZW4gdGhlIHVuaXF1 ZSBpbmRleAorLS0gd2l0aCBkZWR1cGxpY2F0aW9uIGVuYWJsZWQgaGFzIHRvIGNoZWNrIG11bHRp cGxlIGxlYWYgcGFnZXMgZHVyaW5nIHVuaXF1ZQorLS0gY2hlY2tpbmcgKGF0IGxlYXN0IHdpdGgg YSBCTENLU1ogb2YgODE5MiBvciBsZXNzKQorRE8gJCQKK0JFR0lOCisgICAgRk9SIHIgSU4gMS4u MTM1MCBMT09QCisgICAgICAgIERFTEVURSBGUk9NIGRlZHVwX3VuaXF1ZV90ZXN0X3RhYmxlOwor ICAgICAgICBJTlNFUlQgSU5UTyBkZWR1cF91bmlxdWVfdGVzdF90YWJsZSBTRUxFQ1QgMTsKKyAg ICBFTkQgTE9PUDsKK0VORCQkOworCiAtLQogLS0gVGVzdCBCLXRyZWUgZmFzdCBwYXRoIChjYWNo ZSByaWdodG1vc3QgbGVhZiBwYWdlKSBvcHRpbWl6YXRpb24uCiAtLQotLSAKMi4xNy4xCgo= --000000000000f3369d059c2431aa Content-Type: application/octet-stream; name="v30-0002-Header-for-customized-qsort.patch" Content-Disposition: attachment; filename="v30-0002-Header-for-customized-qsort.patch" Content-Transfer-Encoding: base64 Content-ID: <f_k5en9nkr1> X-Attachment-Id: f_k5en9nkr1 RnJvbSA0NTY2NGU1MjgyZmEyMTdhYzc3Mzc0M2FjNzUwOTBkOGI1MmJiZjNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTQgSmFuIDIwMjAgMTQ6MDE6NTUgLTA4MDAKU3ViamVjdDogW1BBVENIIHYzMCAyLzVdIEhl YWRlciBmb3IgY3VzdG9taXplZCBxc29ydC4KClRoaXMgaXMgYSBkZXBlbmRlbmN5IG9mIHRoZSAi QnVja2V0IHNvcnQgZm9yIGNvbXBhY3RpZnlfdHVwbGVzIiBjb21taXQKdGhhdCBmb2xsb3dzLiAg KFdlIHByb2JhYmx5IHdvbid0IG5lZWQgdG8gaW5saW5lIHFzb3J0LCBidXQgbGVhdmUgaXQgZm9y Cm5vdy4pCgpUaGlzIHBhdGNoIHdhcyByZXRyaWV2ZWQgZnJvbToKaHR0cHM6Ly9wb3N0Z3IuZXMv bS9DQUwtckNBMm43VWZWdTFVaTBmJTJCN2NWTjR2QUtWTTAlMkItY1pLYl9rYTYtbUdRQkFGOTJ3 JTQwbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9saWIvcXNvcnRfdGVtcGxhdGUuaCAg ICAgICAgICB8IDMyNSArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvcG9ydC9xc29ydC5jICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL3BvcnQvcXNvcnRfYXJnLmMgICAg ICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQvTWFrZWZp bGUgICAgICAgICAgIHwgICA3IC0KIHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQvZ2VuX3Fzb3J0X3R1 cGxlLnBsIHwgMjcwIC0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90 dXBsZXNvcnQuYyAgICAgICAgfCAgMjcgKy0KIHNyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtICAg ICAgICAgICAgICAgIHwgIDEwICsKIHNyYy90b29scy9tc3ZjL2NsZWFuLmJhdCAgICAgICAgICAg ICAgICAgIHwgICAxIC0KIDggZmlsZXMgY2hhbmdlZCwgMzYzIGluc2VydGlvbnMoKyksIDI4MSBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9saWIvcXNvcnRfdGVt cGxhdGUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQvZ2VuX3Fz b3J0X3R1cGxlLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL3Fzb3J0X3RlbXBsYXRl LmggYi9zcmMvaW5jbHVkZS9saWIvcXNvcnRfdGVtcGxhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi4zZDlmZmJkODFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2lu Y2x1ZGUvbGliL3Fzb3J0X3RlbXBsYXRlLmgKQEAgLTAsMCArMSwzMjUgQEAKKy8qCSROZXRCU0Q6 IHFzb3J0LmMsdiAxLjEzIDIwMDMvMDgvMDcgMTY6NDM6NDIgYWdjIEV4cCAkCSovCisKKy8qLQor ICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKgkgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisgKgkgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqCSAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l aXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u dHJpYnV0b3JzCisgKgkgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICoJICB3aXRob3V0IHNwZWNpZmljIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV Q0ggREFNQUdFLgorICovCisKKy8qCisgKiBRc29ydCByb3V0aW5lIGJhc2VkIG9uIEouIEwuIEJl bnRsZXkgYW5kIE0uIEQuIE1jSWxyb3ksCisgKiAiRW5naW5lZXJpbmcgYSBzb3J0IGZ1bmN0aW9u IiwKKyAqIFNvZnR3YXJlLS1QcmFjdGljZSBhbmQgRXhwZXJpZW5jZSAyMyAoMTk5MykgMTI0OS0x MjY1LgorICoKKyAqIFdlIGhhdmUgbW9kaWZpZWQgdGhlaXIgb3JpZ2luYWwgYnkgYWRkaW5nIGEg Y2hlY2sgZm9yIGFscmVhZHktc29ydGVkIGlucHV0LAorICogd2hpY2ggc2VlbXMgdG8gYmUgYSB3 aW4gcGVyIGRpc2N1c3Npb25zIG9uIHBnc3FsLWhhY2tlcnMgYXJvdW5kIDIwMDYtMDMtMjEuCisg KgorICogQWxzbywgd2UgcmVjdXJzZSBvbiB0aGUgc21hbGxlciBwYXJ0aXRpb24gYW5kIGl0ZXJh dGUgb24gdGhlIGxhcmdlciBvbmUsCisgKiB3aGljaCBlbnN1cmVzIHdlIGNhbm5vdCByZWN1cnNl IG1vcmUgdGhhbiBsb2coTikgbGV2ZWxzIChzaW5jZSB0aGUKKyAqIHBhcnRpdGlvbiByZWN1cnNl ZCB0byBpcyBzdXJlbHkgbm8gbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGlucHV0KS4gIEJlbnRsZXkK KyAqIGFuZCBNY0lscm95IGV4cGxpY2l0bHkgcmVqZWN0ZWQgZG9pbmcgdGhpcyBvbiB0aGUgZ3Jv dW5kcyB0aGF0IGl0J3MgIm5vdAorICogd29ydGggdGhlIGVmZm9ydCIsIGJ1dCB3ZSBoYXZlIHNl ZW4gY3Jhc2hlcyBpbiB0aGUgZmllbGQgZHVlIHRvIHN0YWNrCisgKiBvdmVycnVuLCBzbyB0aGF0 IGp1ZGdtZW50IHNlZW1zIHdyb25nLgorICovCisKKworLyoKKyAqIFRlbXBsYXRlIHBhcmFtZXRl cnMgYXJlOgorICogUVNfU1VGRklYIC0gbmFtZSBzdWZmaXguCisgKiBRU19UWVBFIC0gYXJyYXkg ZWxlbWVudCB0eXBlLgorICogUVNfQ01QICAtIEZ1bmN0aW9uIHVzZWQgdG8gY29tcGFyZSBlbGVt ZW50cywgc2hvdWxkIGJlIGRlZmluZWQKKyAqICAgICAgICAgICBiZWZvcmUgaW5jbHVzaW9uLCBv ciBwYXNzZWQgdXNpbmcgUVNfRVhUUkFQQVJBTVMvUVNfRVhUUkFBUkdTLgorICogICAgICAgICAg IERlZmF1bHQgaXMgYGNtcF8jI1FTX1NVRkZJWGAKKyAqIFFTX0VYVFJBUEFSQU1TIC0gZXh0cmEg cGFyYW1ldGVycyBjb25zdW1lZCBieSBxc29ydCBhbmQgaW5zZXJ0aW9uIHNvcnQuCisgKiBRU19F WFRSQUFSR1MgLSBleHRyYSBhcmd1bWVudHMgcGFzc2VkIHRvIHFzb3J0IGFuZCBpbnNlcnRpb24g c29ydC4KKyAqIFFTX0NNUEFSR1MgLSBleHRyYSBhcmd1bWVudHMgcGFzc2VkIHRvIGNtcCBmdW5j dGlvbi4KKyAqCisgKiBpZiBRU19FWFRSQVBBUkFNUywgUVNfRVhUUkFBUkdTIGFuZCBRU19DTVBB UkdTIGFyZSBhbGwgdW5kZWZpbmVkLCB0aGVuCisgKiBRU19DTVAgYXNzdW1tZWQgdG8gYmUgcHJl ZGVmaW5lZCBhbmQgYWNjZXB0aW5nIG9ubHkgZWxlbWVudHMgdG8gY29tcGFyZQorICogKGllIG5v IGV4dHJhIHBhcmFtZXRlcnMpLgorICoKKyAqIFFTX0RFQ0xBUkUgLSBpZiBkZWZpbmVkIGZ1bmN0 aW9uIHByb3RvdHlwZXMgYW5kIHR5cGUgZGVjbGFyYXRpb25zIGFyZQorICoJCSAgICAgICAgZ2Vu ZXJhdGVkCisgKiBRU19ERUZJTkUgLSBpZiBkZWZpbmVkIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFy ZSBnZW5lcmF0ZWQKKyAqIFFTX1NDT1BFIC0gaW4gd2hpY2ggc2NvcGUgKGUuZy4gZXh0ZXJuLCBz dGF0aWMpIGRvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyByZXNpZGUKKyAqCisgKiBRU19DSEVDS19G T1JfSU5URVJSVVBUUyAtIGlmIGRlZmluZWQsIHRoZW4gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMgaXMg Y2FsbGVkCisgKgkJCXBlcmlvZGljYWxseS4KKyAqIFFTX0NIRUNLX1BSRVNPUlRFRCAtIGlmIGRl ZmluZWQsIGNoZWNrIGZvciBwcmVzb3J0ZWQgYXJyYXkgaXMgaW5jbHVkZWQuCisgKi8KKworI2lm bmRlZiBRU19TVUZGSVgKKyNlcnJvciAiUVNfU1VGRklYIHNob3VsZCBiZSBkZWZpbmVkIgorI2Vu ZGlmCisjaWZuZGVmIFFTX1RZUEUKKyNlcnJvciAiUVNfVFlQRSBzaG91bGQgYmUgZGVmaW5lZCIK KyNlbmRpZgorCisvKiBoZWxwZXJzICovCisjZGVmaW5lIFFTX01BS0VfTkFNRV8oYSwgYikgQ3Bw Q29uY2F0KGEsIGIpCisjZGVmaW5lIFFTX01BS0VfTkFNRShhKSBRU19NQUtFX05BTUVfKGEsIFFT X1NVRkZJWCkKKworI2RlZmluZSBRU19TV0FQTUFOWSBRU19NQUtFX05BTUUocXNzd2FwbWFueV8p CisjZGVmaW5lIFFTX1NXQVBPTkUgUVNfTUFLRV9OQU1FKHFzc3dhcG9uZV8pCisjZGVmaW5lIFFT X01FRDMgUVNfTUFLRV9OQU1FKHFzbWVkM18pCisjZGVmaW5lIFFTX0lOU0VSVElPTl9TT1JUIFFT X01BS0VfTkFNRShpbnNlcnRpb25fc29ydF8pCisjZGVmaW5lIFFTX1FTT1JUIFFTX01BS0VfTkFN RShxc29ydF8pCisjZGVmaW5lIFFTX1FTT1JUX0lNUEwgUVNfTUFLRV9OQU1FKHFzb3J0X2ltcGxf KQorI2lmbmRlZiBRU19DTVAKKyNkZWZpbmUgUVNfQ01QIFFTX01BS0VfTkFNRShjbXBfKQorI2Vu ZGlmCisKKyNpZiAhZGVmaW5lZChRU19FWFRSQVBBUkFNUykgJiYgIWRlZmluZWQoUVNfRVhUUkFB UkdTKSAmJiAhZGVmaW5lZChRU19DTVBBUkdTKQorI2RlZmluZSBRU19FWFRSQVBBUkFNUworI2Rl ZmluZSBRU19FWFRSQUFSR1MKKyNkZWZpbmUgUVNfQ01QQVJHUworI2Vsc2UKKyNpZm5kZWYgUVNf RVhUUkFQQVJBTVMKKyNlcnJvciAiUVNfRVhUUkFQQVJBTVMgc2hvdWxkIGJlIGRlZmluZWQiCisj ZW5kaWYKKyNpZm5kZWYgUVNfRVhUUkFBUkdTCisjZXJyb3IgIlFTX0VYVFJBQVJHUyBzaG91bGQg YmUgZGVmaW5lZCIKKyNlbmRpZgorI2lmbmRlZiBRU19DTVBBUkdTCisjZXJyb3IgIlFTX0NNUEFS R1Mgc2hvdWxkIGJlIGRlZmluZWQiCisjZW5kaWYKKyNlbmRpZgorCisvKiBnZW5lcmF0ZSBmb3J3 YXJkIGRlY2xhcmF0aW9ucyBuZWNlc3NhcnkgdG8gdXNlIHRoZSBoYXNoIHRhYmxlICovCisjaWZk ZWYgUVNfREVDTEFSRQorUVNfU0NPUEUgdm9pZCBRU19JTlNFUlRJT05fU09SVChRU19UWVBFICog YSwgUVNfVFlQRSAqIGIgUVNfRVhUUkFQQVJBTVMpOworUVNfU0NPUEUgdm9pZCBRU19RU09SVChR U19UWVBFICogYSwgUVNfVFlQRSAqIGIgUVNfRVhUUkFQQVJBTVMpOworI2VuZGlmCisKKyNpZmRl ZiBRU19ERUZJTkUKK3N0YXRpYyBpbmxpbmUgdm9pZAorUVNfU1dBUE9ORShRU19UWVBFICogYSwg UVNfVFlQRSAqIGIpCit7CisJUVNfVFlQRQkJdCA9ICphOworCisJKmEgPSAqYjsKKwkqYiA9IHQ7 Cit9CisKK3N0YXRpYyB2b2lkCitRU19TV0FQTUFOWShRU19UWVBFICogYSwgUVNfVFlQRSAqIGIs IHNpemVfdCBuKQoreworCWZvciAoOyBuID4gMDsgbi0tLCBhKyssIGIrKykKKwkJUVNfU1dBUE9O RShhLCBiKTsKK30KKworI2lmbmRlZiBRU19TS0lQX01FRDMKK3N0YXRpYyBRU19UWVBFICoKK1FT X01FRDMoUVNfVFlQRSAqIGEsIFFTX1RZUEUgKiBiLCBRU19UWVBFICogYyBRU19FWFRSQVBBUkFN UykKK3sKKwlyZXR1cm4gUVNfQ01QKGEsIGIgUVNfQ01QQVJHUykgPCAwID8KKwkJKFFTX0NNUChi LCBjIFFTX0NNUEFSR1MpIDwgMCA/IGIgOgorCQkgKFFTX0NNUChhLCBjIFFTX0NNUEFSR1MpIDwg MCA/IGMgOiBhKSkKKwkJOiAoUVNfQ01QKGIsIGMgUVNfQ01QQVJHUykgPiAwID8gYiA6CisJCSAg IChRU19DTVAoYSwgYyBRU19DTVBBUkdTKSA8IDAgPyBhIDogYykpOworfQorI2VuZGlmCisKK1FT X1NDT1BFIHZvaWQKK1FTX0lOU0VSVElPTl9TT1JUKFFTX1RZUEUgKiBhLCBzaXplX3QgbiBRU19F WFRSQVBBUkFNUykKK3sKKwlRU19UWVBFICAgICpwbSwKKwkJCSAgICpwbDsKKworCWZvciAocG0g PSBhICsgMTsgcG0gPCBhICsgbjsgcG0rKykKKwkJZm9yIChwbCA9IHBtOyBwbCA+IGEgJiYgUVNf Q01QKHBsIC0gMSwgcGwgUVNfQ01QQVJHUykgPiAwOyBwbC0tKQorCQkJUVNfU1dBUE9ORShwbCwg cGwgLSAxKTsKK30KKworI2lmZGVmIFFTX0NIRUNLX0ZPUl9JTlRFUlJVUFRTCisjZGVmaW5lIERP X0NIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKQorI2Vsc2UKKyNk ZWZpbmUgRE9fQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKQorI2VuZGlmCisKK1FTX1NDT1BFIHZvaWQK K1FTX1FTT1JUKFFTX1RZUEUgKiBhLCBzaXplX3QgbiBRU19FWFRSQVBBUkFNUykKK3sKKwlRU19U WVBFICAgICpwYSwKKwkJCSAgICpwYiwKKwkJCSAgICpwYywKKwkJCSAgICpwZCwKKwkJCSAgICpw bSwKKwkJCSAgICpwbjsKKwlzaXplX3QJCWQxLAorCQkJCWQyOworCWludAkJCXI7CisKK2xvb3A6 CisJRE9fQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwlpZiAobiA8IDcpCisJeworCQlRU19JTlNF UlRJT05fU09SVChhLCBuIFFTX0VYVFJBQVJHUyk7CisJCXJldHVybjsKKwl9CisKKyNpZmRlZiBR U19DSEVDS19QUkVTT1JURUQKKwl7CisJCWludAkJCXByZXNvcnRlZCA9IDE7CisKKwkJZm9yIChw bSA9IGEgKyAxOyBwbSA8IGEgKyBuOyBwbSsrKQorCQl7CisJCQlET19DSEVDS19GT1JfSU5URVJS VVBUUygpOworCQkJaWYgKFFTX0NNUChwbSAtIDEsIHBtIFFTX0NNUEFSR1MpID4gMCkKKwkJCXsK KwkJCQlwcmVzb3J0ZWQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChwcmVzb3J0 ZWQpCisJCQlyZXR1cm47CisJfQorI2VuZGlmCisJcG0gPSBhICsgKG4gLyAyKTsKKyNpZm5kZWYg UVNfU0tJUF9NRUQzCisJaWYgKG4gPiA3KQorCXsKKwkJUVNfVFlQRSAgICAqcGwgPSBhOworCisJ CXBuID0gYSArIChuIC0gMSk7CisjaWZuZGVmIFFTX1NLSVBfTUVEX09GX01FRAorCQlpZiAobiA+ IDQwKQorCQl7CisJCQlzaXplX3QJCWQgPSAobiAvIDgpOworCisJCQlwbCA9IFFTX01FRDMocGws IHBsICsgZCwgcGwgKyAyICogZCBRU19FWFRSQUFSR1MpOworCQkJcG0gPSBRU19NRUQzKHBtIC0g ZCwgcG0sIHBtICsgZCBRU19FWFRSQUFSR1MpOworCQkJcG4gPSBRU19NRUQzKHBuIC0gMiAqIGQs IHBuIC0gZCwgcG4gUVNfRVhUUkFBUkdTKTsKKwkJfQorI2VuZGlmCisJCXBtID0gUVNfTUVEMyhw bCwgcG0sIHBuIFFTX0VYVFJBQVJHUyk7CisJfQorI2VuZGlmCisJUVNfU1dBUE9ORShhLCBwbSk7 CisJcGEgPSBwYiA9IGEgKyAxOworCXBjID0gcGQgPSBhICsgKG4gLSAxKTsKKwlmb3IgKDs7KQor CXsKKwkJd2hpbGUgKHBiIDw9IHBjICYmIChyID0gUVNfQ01QKHBiLCBhIFFTX0NNUEFSR1MpKSA8 PSAwKQorCQl7CisJCQlpZiAociA9PSAwKQorCQkJeworCQkJCVFTX1NXQVBPTkUocGEsIHBiKTsK KwkJCQlwYSsrOworCQkJfQorCQkJcGIrKzsKKwkJCURPX0NIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7 CisJCX0KKwkJd2hpbGUgKHBiIDw9IHBjICYmIChyID0gUVNfQ01QKHBjLCBhIFFTX0NNUEFSR1Mp KSA+PSAwKQorCQl7CisJCQlpZiAociA9PSAwKQorCQkJeworCQkJCVFTX1NXQVBPTkUocGMsIHBk KTsKKwkJCQlwZC0tOworCQkJfQorCQkJcGMtLTsKKwkJCURPX0NIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CisJCX0KKwkJaWYgKHBiID4gcGMpCisJCQlicmVhazsKKwkJUVNfU1dBUE9ORShwYiwgcGMp OworCQlwYisrOworCQlwYy0tOworCX0KKwlwbiA9IGEgKyBuOworCWQxID0gTWluKHBhIC0gYSwg cGIgLSBwYSk7CisJaWYgKGQxID4gMCkKKwkJUVNfU1dBUE1BTlkoYSwgcGIgLSBkMSwgZDEpOwor CWQxID0gTWluKHBkIC0gcGMsIHBuIC0gcGQgLSAxKTsKKwlpZiAoZDEgPiAwKQorCQlRU19TV0FQ TUFOWShwYiwgcG4gLSBkMSwgZDEpOworCWQxID0gcGIgLSBwYTsKKwlkMiA9IHBkIC0gcGM7CisJ aWYgKGQxIDw9IGQyKQorCXsKKwkJLyogUmVjdXJzZSBvbiBsZWZ0IHBhcnRpdGlvbiwgdGhlbiBp dGVyYXRlIG9uIHJpZ2h0IHBhcnRpdGlvbiAqLworCQlpZiAoZDEgPiAxKQorCQkJUVNfUVNPUlQo YSwgZDEgUVNfRVhUUkFBUkdTKTsKKwkJaWYgKGQyID4gMSkKKwkJeworCQkJLyogSXRlcmF0ZSBy YXRoZXIgdGhhbiByZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2UgKi8KKwkJCS8qIFFTX1FTT1JU KHBuIC0gZDIsIGQyIEVYVFJBQVJHUyk7ICovCisJCQlhID0gcG4gLSBkMjsKKwkJCW4gPSBkMjsK KwkJCWdvdG8gbG9vcDsKKwkJfQorCX0KKwllbHNlCisJeworCQkvKiBSZWN1cnNlIG9uIHJpZ2h0 IHBhcnRpdGlvbiwgdGhlbiBpdGVyYXRlIG9uIGxlZnQgcGFydGl0aW9uICovCisJCWlmIChkMiA+ IDEpCisJCQlRU19RU09SVChwbiAtIGQyLCBkMiBRU19FWFRSQUFSR1MpOworCQlpZiAoZDEgPiAx KQorCQl7CisJCQkvKiBJdGVyYXRlIHJhdGhlciB0aGFuIHJlY3Vyc2UgdG8gc2F2ZSBzdGFjayBz cGFjZSAqLworCQkJLyogUVNfUVNPUlQoYSwgZDEgRVhUUkFBUkdTKTsgKi8KKwkJCW4gPSBkMTsK KwkJCWdvdG8gbG9vcDsKKwkJfQorCX0KK30KKyNlbmRpZgorCisjdW5kZWYgUVNfU1VGRklYCisj dW5kZWYgUVNfVFlQRQorI2lmZGVmIFFTX0RFQ0xBUkUKKyN1bmRlZiBRU19ERUNMQVJFCisjZW5k aWYKKyNpZmRlZiBRU19ERUZJTkUKKyN1bmRlZiBRU19ERUZJTkUKKyNlbmRpZgorI2lmZGVmIFFT X1NDT1BFCisjdW5kZWYgUVNfU0NPUEUKKyNlbmRpZgorI2lmZGVmIFFTX0NIRUNLX0ZPUl9JTlRF UlJVUFRTCisjdW5kZWYgUVNfQ0hFQ0tfRk9SX0lOVEVSUlVQVFMKKyNlbmRpZgorI2lmZGVmIFFT X0NIRUNLX1BSRVNPUlRFRAorI3VuZGVmIFFTX0NIRUNLX1BSRVNPUlRFRAorI2VuZGlmCisjaWZk ZWYgUVNfU0tJUF9NRUQzCisjdW5kZWYgUVNfU0tJUF9NRUQzCisjZW5kaWYKKyNpZmRlZiBRU19T S0lQX01FRF9PRl9NRUQKKyN1bmRlZiBRU19TS0lQX01FRF9PRl9NRUQKKyNlbmRpZgorI3VuZGVm IERPX0NIRUNLX0ZPUl9JTlRFUlJVUFRTCisjdW5kZWYgUVNfTUFLRV9OQU1FCisjdW5kZWYgUVNf U1dBUE1BTlkKKyN1bmRlZiBRU19TV0FQT05FCisjdW5kZWYgUVNfTUVEMworI3VuZGVmIFFTX0lO U0VSVElPTl9TT1JUCisjdW5kZWYgUVNfUVNPUlQKKyN1bmRlZiBRU19RU09SVF9JTVBMCisjdW5k ZWYgUVNfQ01QCisjdW5kZWYgUVNfRVhUUkFQQVJBTVMKKyN1bmRlZiBRU19FWFRSQUFSR1MKKyN1 bmRlZiBRU19DTVBBUkdTCmRpZmYgLS1naXQgYS9zcmMvcG9ydC9xc29ydC5jIGIvc3JjL3BvcnQv cXNvcnQuYwppbmRleCA0MDlmNjlhMTI4Li5iMzhiMzNhNjNhIDEwMDY0NAotLS0gYS9zcmMvcG9y dC9xc29ydC5jCisrKyBiL3NyYy9wb3J0L3Fzb3J0LmMKQEAgLTgsNyArOCw3IEBACiAgKgkgIGlu IGZhdm9yIG9mIGEgc2ltcGxlIGNoZWNrIGZvciBwcmVzb3J0ZWQgaW5wdXQuCiAgKgkgIFRha2Ug Y2FyZSB0byByZWN1cnNlIG9uIHRoZSBzbWFsbGVyIHBhcnRpdGlvbiwgdG8gYm91bmQgc3RhY2sg dXNhZ2UuCiAgKgotICoJQ0FVVElPTjogaWYgeW91IGNoYW5nZSB0aGlzIGZpbGUsIHNlZSBhbHNv IHFzb3J0X2FyZy5jLCBnZW5fcXNvcnRfdHVwbGUucGwKKyAqCUNBVVRJT046IGlmIHlvdSBjaGFu Z2UgdGhpcyBmaWxlLCBzZWUgYWxzbyBxc29ydF9hcmcuYywgcXNvcnRfdGVtcGxhdGUuaAogICoK ICAqCXNyYy9wb3J0L3Fzb3J0LmMKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BvcnQvcXNvcnRfYXJn LmMgYi9zcmMvcG9ydC9xc29ydF9hcmcuYwppbmRleCBhMjE5NGIwZmIxLi45YmM3ZTZlZGNhIDEw MDY0NAotLS0gYS9zcmMvcG9ydC9xc29ydF9hcmcuYworKysgYi9zcmMvcG9ydC9xc29ydF9hcmcu YwpAQCAtOCw3ICs4LDcgQEAKICAqCSAgaW4gZmF2b3Igb2YgYSBzaW1wbGUgY2hlY2sgZm9yIHBy ZXNvcnRlZCBpbnB1dC4KICAqCSAgVGFrZSBjYXJlIHRvIHJlY3Vyc2Ugb24gdGhlIHNtYWxsZXIg cGFydGl0aW9uLCB0byBib3VuZCBzdGFjayB1c2FnZS4KICAqCi0gKglDQVVUSU9OOiBpZiB5b3Ug Y2hhbmdlIHRoaXMgZmlsZSwgc2VlIGFsc28gcXNvcnQuYywgZ2VuX3Fzb3J0X3R1cGxlLnBsCisg KglDQVVUSU9OOiBpZiB5b3UgY2hhbmdlIHRoaXMgZmlsZSwgc2VlIGFsc28gcXNvcnRfYXJnLmMs IHFzb3J0X3RlbXBsYXRlLmgKICAqCiAgKglzcmMvcG9ydC9xc29ydF9hcmcuYwogICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvdXRp bHMvc29ydC9NYWtlZmlsZQppbmRleCA3YWMzNjU5MjYxLi5mYmQwMDA0NmY0IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9zb3J0L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L3NvcnQvTWFrZWZpbGUKQEAgLTIxLDEyICsyMSw1IEBAIE9CSlMgPSBcCiAJdHVwbGVzb3J0Lm8g XAogCXR1cGxlc3RvcmUubwogCi10dXBsZXNvcnQubzogcXNvcnRfdHVwbGUuYwotCi1xc29ydF90 dXBsZS5jOiBnZW5fcXNvcnRfdHVwbGUucGwKLQkkKFBFUkwpICQoc3JjZGlyKS9nZW5fcXNvcnRf dHVwbGUucGwgJDwgPiAkQAotCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29t bW9uLm1rCiAKLW1haW50YWluZXItY2xlYW46Ci0Jcm0gLWYgcXNvcnRfdHVwbGUuYwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9nZW5fcXNvcnRfdHVwbGUucGwgYi9zcmMvYmFj a2VuZC91dGlscy9zb3J0L2dlbl9xc29ydF90dXBsZS5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggYjZiMmZmYTdkMC4uMDAwMDAwMDAwMAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9z b3J0L2dlbl9xc29ydF90dXBsZS5wbAorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi0j IS91c3IvYmluL3BlcmwgLXcKLQotIwotIyBnZW5fcXNvcnRfdHVwbGUucGwKLSMKLSMgVGhpcyBz Y3JpcHQgZ2VuZXJhdGVzIHNwZWNpYWxpemVkIHZlcnNpb25zIG9mIHRoZSBxdWlja3NvcnQgYWxn b3JpdGhtIGZvcgotIyB0dXBsZSBzb3J0aW5nLiAgVGhlIHF1aWNrc29ydCBjb2RlIGlzIGRlcml2 ZWQgZnJvbSB0aGUgTmV0QlNEIGNvZGUuICBUaGUKLSMgY29kZSBnZW5lcmF0ZWQgYnkgdGhpcyBz Y3JpcHQgcnVucyBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHZhbmlsbGEgcXNvcnQKLSMgd2hl biB1c2VkIHRvIHNvcnQgdHVwbGVzLiAgVGhpcyBzcGVlZHVwIGNvbWVzIGZyb20gYSBudW1iZXIg b2YgcGxhY2VzLgotIyBUaGUgbWFqb3IgZWZmZWN0cyBhcmUgKDEpIGlubGluaW5nIHNpbXBsZSB0 dXBsZSBjb21wYXJhdG9ycyBpcyBtdWNoIGZhc3RlcgotIyB0aGFuIGp1bXBpbmcgdGhyb3VnaCBh IGZ1bmN0aW9uIHBvaW50ZXIgYW5kICgyKSBzd2FwIGFuZCB2ZWNzd2FwIG9wZXJhdGlvbnMKLSMg c3BlY2lhbGl6ZWQgdG8gdGhlIHBhcnRpY3VsYXIgZGF0YSB0eXBlIG9mIGludGVyZXN0IChpbiB0 aGlzIGNhc2UsIFNvcnRUdXBsZSkKLSMgYXJlIGZhc3RlciB0aGFuIHRoZSBnZW5lcmljIHJvdXRp bmVzLgotIwotIwlNb2RpZmljYXRpb25zIGZyb20gdmFuaWxsYSBOZXRCU0Qgc291cmNlOgotIwkg IEFkZCBkbyAuLi4gd2hpbGUoKSBtYWNybyBmaXgKLSMJICBSZW1vdmUgX19pbmxpbmUsIF9ESUFH QVNTRVJUcywgX19QCi0jCSAgUmVtb3ZlIGlsbC1jb25zaWRlcmVkICJzd2FwX2NudCIgc3dpdGNo IHRvIGluc2VydGlvbiBzb3J0LAotIwkgIGluIGZhdm9yIG9mIGEgc2ltcGxlIGNoZWNrIGZvciBw cmVzb3J0ZWQgaW5wdXQuCi0jCSAgVGFrZSBjYXJlIHRvIHJlY3Vyc2Ugb24gdGhlIHNtYWxsZXIg cGFydGl0aW9uLCB0byBib3VuZCBzdGFjayB1c2FnZS4KLSMKLSMgICAgIEluc3RlYWQgb2Ygc29y dGluZyBhcmJpdHJhcnkgb2JqZWN0cywgd2UncmUgYWx3YXlzIHNvcnRpbmcgU29ydFR1cGxlcy4K LSMgICAgIEFkZCBDSEVDS19GT1JfSU5URVJSVVBUUygpLgotIwotIyBDQVVUSU9OOiBpZiB5b3Ug Y2hhbmdlIHRoaXMgZmlsZSwgc2VlIGFsc28gcXNvcnQuYyBhbmQgcXNvcnRfYXJnLmMKLSMKLQot dXNlIHN0cmljdDsKLQotbXkgJFNVRkZJWDsKLW15ICRFWFRSQUFSR1M7Ci1teSAkRVhUUkFQQVJB TVM7Ci1teSAkQ01QUEFSQU1TOwotCi1lbWl0X3Fzb3J0X2JvaWxlcnBsYXRlKCk7Ci0KLSRTVUZG SVggICAgICA9ICd0dXBsZSc7Ci0kRVhUUkFBUkdTICAgPSAnLCBTb3J0VHVwbGVDb21wYXJhdG9y IGNtcF90dXBsZSwgVHVwbGVzb3J0c3RhdGUgKnN0YXRlJzsKLSRFWFRSQVBBUkFNUyA9ICcsIGNt cF90dXBsZSwgc3RhdGUnOwotJENNUFBBUkFNUyAgID0gJywgc3RhdGUnOwotZW1pdF9xc29ydF9p bXBsZW1lbnRhdGlvbigpOwotCi0kU1VGRklYICAgICAgPSAnc3N1cCc7Ci0kRVhUUkFBUkdTICAg PSAnLCBTb3J0U3VwcG9ydCBzc3VwJzsKLSRFWFRSQVBBUkFNUyA9ICcsIHNzdXAnOwotJENNUFBB UkFNUyAgID0gJywgc3N1cCc7Ci1wcmludCA8PCdFT00nOwotCi0jZGVmaW5lIGNtcF9zc3VwKGEs IGIsIHNzdXApIFwKLQlBcHBseVNvcnRDb21wYXJhdG9yKChhKS0+ZGF0dW0xLCAoYSktPmlzbnVs bDEsIFwKLQkJCQkJCShiKS0+ZGF0dW0xLCAoYiktPmlzbnVsbDEsIHNzdXApCi0KLUVPTQotZW1p dF9xc29ydF9pbXBsZW1lbnRhdGlvbigpOwotCi1zdWIgZW1pdF9xc29ydF9ib2lsZXJwbGF0ZQot ewotCXByaW50IDw8J0VPTSc7Ci0vKgotICogYXV0b2dlbmVyYXRlZCBieSBzcmMvYmFja2VuZC91 dGlscy9zb3J0L2dlbl9xc29ydF90dXBsZS5wbCwgZG8gbm90IGVkaXQhCi0gKgotICogVGhpcyBm aWxlIGlzIGluY2x1ZGVkIGJ5IHR1cGxlc29ydC5jLCByYXRoZXIgdGhhbiBjb21waWxlZCBzZXBh cmF0ZWx5LgotICovCi0KLS8qCSROZXRCU0Q6IHFzb3J0LmMsdiAxLjEzIDIwMDMvMDgvMDcgMTY6 NDM6NDIgYWdjIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCi0g KglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0gKgkgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKgkgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK LSAqCSAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNp dHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKgkgIG1heSBiZSB1c2VkIHRv IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQot ICoJICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMg YGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICog QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklC VVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK LSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBRc29y dCByb3V0aW5lIGJhc2VkIG9uIEouIEwuIEJlbnRsZXkgYW5kIE0uIEQuIE1jSWxyb3ksCi0gKiAi RW5naW5lZXJpbmcgYSBzb3J0IGZ1bmN0aW9uIiwKLSAqIFNvZnR3YXJlLS1QcmFjdGljZSBhbmQg RXhwZXJpZW5jZSAyMyAoMTk5MykgMTI0OS0xMjY1LgotICoKLSAqIFdlIGhhdmUgbW9kaWZpZWQg dGhlaXIgb3JpZ2luYWwgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGFscmVhZHktc29ydGVkIGlucHV0 LAotICogd2hpY2ggc2VlbXMgdG8gYmUgYSB3aW4gcGVyIGRpc2N1c3Npb25zIG9uIHBnc3FsLWhh Y2tlcnMgYXJvdW5kIDIwMDYtMDMtMjEuCi0gKgotICogQWxzbywgd2UgcmVjdXJzZSBvbiB0aGUg c21hbGxlciBwYXJ0aXRpb24gYW5kIGl0ZXJhdGUgb24gdGhlIGxhcmdlciBvbmUsCi0gKiB3aGlj aCBlbnN1cmVzIHdlIGNhbm5vdCByZWN1cnNlIG1vcmUgdGhhbiBsb2coTikgbGV2ZWxzIChzaW5j ZSB0aGUKLSAqIHBhcnRpdGlvbiByZWN1cnNlZCB0byBpcyBzdXJlbHkgbm8gbW9yZSB0aGFuIGhh bGYgb2YgdGhlIGlucHV0KS4gIEJlbnRsZXkKLSAqIGFuZCBNY0lscm95IGV4cGxpY2l0bHkgcmVq ZWN0ZWQgZG9pbmcgdGhpcyBvbiB0aGUgZ3JvdW5kcyB0aGF0IGl0J3MgIm5vdAotICogd29ydGgg dGhlIGVmZm9ydCIsIGJ1dCB3ZSBoYXZlIHNlZW4gY3Jhc2hlcyBpbiB0aGUgZmllbGQgZHVlIHRv IHN0YWNrCi0gKiBvdmVycnVuLCBzbyB0aGF0IGp1ZGdtZW50IHNlZW1zIHdyb25nLgotICovCi0K LXN0YXRpYyB2b2lkCi1zd2FwZnVuYyhTb3J0VHVwbGUgKmEsIFNvcnRUdXBsZSAqYiwgc2l6ZV90 IG4pCi17Ci0JZG8KLQl7Ci0JCVNvcnRUdXBsZSAJdCA9ICphOwotCQkqYSsrID0gKmI7Ci0JCSpi KysgPSB0OwotCX0gd2hpbGUgKC0tbiA+IDApOwotfQotCi0jZGVmaW5lIHN3YXAoYSwgYikJCQkJ CQlcCi0JZG8geyAJCQkJCQkJCVwKLQkJU29ydFR1cGxlIHQgPSAqKGEpOwkJCQlcCi0JCSooYSkg PSAqKGIpOwkJCQkJXAotCQkqKGIpID0gdDsJCQkJCQlcCi0JfSB3aGlsZSAoMCk7Ci0KLSNkZWZp bmUgdmVjc3dhcChhLCBiLCBuKSBpZiAoKG4pID4gMCkgc3dhcGZ1bmMoYSwgYiwgbikKLQotRU9N Ci0KLQlyZXR1cm47Ci19Ci0KLXN1YiBlbWl0X3Fzb3J0X2ltcGxlbWVudGF0aW9uCi17Ci0JcHJp bnQgPDxFT007Ci1zdGF0aWMgU29ydFR1cGxlICoKLW1lZDNfJFNVRkZJWChTb3J0VHVwbGUgKmEs IFNvcnRUdXBsZSAqYiwgU29ydFR1cGxlICpjJEVYVFJBQVJHUykKLXsKLQlyZXR1cm4gY21wXyRT VUZGSVgoYSwgYiRDTVBQQVJBTVMpIDwgMCA/Ci0JCShjbXBfJFNVRkZJWChiLCBjJENNUFBBUkFN UykgPCAwID8gYiA6Ci0JCQkoY21wXyRTVUZGSVgoYSwgYyRDTVBQQVJBTVMpIDwgMCA/IGMgOiBh KSkKLQkJOiAoY21wXyRTVUZGSVgoYiwgYyRDTVBQQVJBTVMpID4gMCA/IGIgOgotCQkJKGNtcF8k U1VGRklYKGEsIGMkQ01QUEFSQU1TKSA8IDAgPyBhIDogYykpOwotfQotCi1zdGF0aWMgdm9pZAot cXNvcnRfJFNVRkZJWChTb3J0VHVwbGUgKmEsIHNpemVfdCBuJEVYVFJBQVJHUykKLXsKLQlTb3J0 VHVwbGUgICpwYSwKLQkJCSAgICpwYiwKLQkJCSAgICpwYywKLQkJCSAgICpwZCwKLQkJCSAgICpw bCwKLQkJCSAgICpwbSwKLQkJCSAgICpwbjsKLQlzaXplX3QJCWQxLAotCQkJCWQyOwotCWludAkJ CXIsCi0JCQkJcHJlc29ydGVkOwotCi1sb29wOgotCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0J aWYgKG4gPCA3KQotCXsKLQkJZm9yIChwbSA9IGEgKyAxOyBwbSA8IGEgKyBuOyBwbSsrKQotCQkJ Zm9yIChwbCA9IHBtOyBwbCA+IGEgJiYgY21wXyRTVUZGSVgocGwgLSAxLCBwbCRDTVBQQVJBTVMp ID4gMDsgcGwtLSkKLQkJCQlzd2FwKHBsLCBwbCAtIDEpOwotCQlyZXR1cm47Ci0JfQotCXByZXNv cnRlZCA9IDE7Ci0JZm9yIChwbSA9IGEgKyAxOyBwbSA8IGEgKyBuOyBwbSsrKQotCXsKLQkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJaWYgKGNtcF8kU1VGRklYKHBtIC0gMSwgcG0kQ01QUEFS QU1TKSA+IDApCi0JCXsKLQkJCXByZXNvcnRlZCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlp ZiAocHJlc29ydGVkKQotCQlyZXR1cm47Ci0JcG0gPSBhICsgKG4gLyAyKTsKLQlpZiAobiA+IDcp Ci0JewotCQlwbCA9IGE7Ci0JCXBuID0gYSArIChuIC0gMSk7Ci0JCWlmIChuID4gNDApCi0JCXsK LQkJCXNpemVfdAkJZCA9IChuIC8gOCk7Ci0KLQkJCXBsID0gbWVkM18kU1VGRklYKHBsLCBwbCAr IGQsIHBsICsgMiAqIGQkRVhUUkFQQVJBTVMpOwotCQkJcG0gPSBtZWQzXyRTVUZGSVgocG0gLSBk LCBwbSwgcG0gKyBkJEVYVFJBUEFSQU1TKTsKLQkJCXBuID0gbWVkM18kU1VGRklYKHBuIC0gMiAq IGQsIHBuIC0gZCwgcG4kRVhUUkFQQVJBTVMpOwotCQl9Ci0JCXBtID0gbWVkM18kU1VGRklYKHBs LCBwbSwgcG4kRVhUUkFQQVJBTVMpOwotCX0KLQlzd2FwKGEsIHBtKTsKLQlwYSA9IHBiID0gYSAr IDE7Ci0JcGMgPSBwZCA9IGEgKyAobiAtIDEpOwotCWZvciAoOzspCi0JewotCQl3aGlsZSAocGIg PD0gcGMgJiYgKHIgPSBjbXBfJFNVRkZJWChwYiwgYSRDTVBQQVJBTVMpKSA8PSAwKQotCQl7Ci0J CQlpZiAociA9PSAwKQotCQkJewotCQkJCXN3YXAocGEsIHBiKTsKLQkJCQlwYSsrOwotCQkJfQot CQkJcGIrKzsKLQkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCX0KLQkJd2hpbGUgKHBiIDw9 IHBjICYmIChyID0gY21wXyRTVUZGSVgocGMsIGEkQ01QUEFSQU1TKSkgPj0gMCkKLQkJewotCQkJ aWYgKHIgPT0gMCkKLQkJCXsKLQkJCQlzd2FwKHBjLCBwZCk7Ci0JCQkJcGQtLTsKLQkJCX0KLQkJ CXBjLS07Ci0JCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9Ci0JCWlmIChwYiA+IHBjKQot CQkJYnJlYWs7Ci0JCXN3YXAocGIsIHBjKTsKLQkJcGIrKzsKLQkJcGMtLTsKLQl9Ci0JcG4gPSBh ICsgbjsKLQlkMSA9IE1pbihwYSAtIGEsIHBiIC0gcGEpOwotCXZlY3N3YXAoYSwgcGIgLSBkMSwg ZDEpOwotCWQxID0gTWluKHBkIC0gcGMsIHBuIC0gcGQgLSAxKTsKLQl2ZWNzd2FwKHBiLCBwbiAt IGQxLCBkMSk7Ci0JZDEgPSBwYiAtIHBhOwotCWQyID0gcGQgLSBwYzsKLQlpZiAoZDEgPD0gZDIp Ci0JewotCQkvKiBSZWN1cnNlIG9uIGxlZnQgcGFydGl0aW9uLCB0aGVuIGl0ZXJhdGUgb24gcmln aHQgcGFydGl0aW9uICovCi0JCWlmIChkMSA+IDEpCi0JCQlxc29ydF8kU1VGRklYKGEsIGQxJEVY VFJBUEFSQU1TKTsKLQkJaWYgKGQyID4gMSkKLQkJewotCQkJLyogSXRlcmF0ZSByYXRoZXIgdGhh biByZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2UgKi8KLQkJCS8qIHFzb3J0XyRTVUZGSVgocG4g LSBkMiwgZDIkRVhUUkFQQVJBTVMpOyAqLwotCQkJYSA9IHBuIC0gZDI7Ci0JCQluID0gZDI7Ci0J CQlnb3RvIGxvb3A7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJLyogUmVjdXJzZSBvbiByaWdodCBw YXJ0aXRpb24sIHRoZW4gaXRlcmF0ZSBvbiBsZWZ0IHBhcnRpdGlvbiAqLwotCQlpZiAoZDIgPiAx KQotCQkJcXNvcnRfJFNVRkZJWChwbiAtIGQyLCBkMiRFWFRSQVBBUkFNUyk7Ci0JCWlmIChkMSA+ IDEpCi0JCXsKLQkJCS8qIEl0ZXJhdGUgcmF0aGVyIHRoYW4gcmVjdXJzZSB0byBzYXZlIHN0YWNr IHNwYWNlICovCi0JCQkvKiBxc29ydF8kU1VGRklYKGEsIGQxJEVYVFJBUEFSQU1TKTsgKi8KLQkJ CW4gPSBkMTsKLQkJCWdvdG8gbG9vcDsKLQkJfQotCX0KLX0KLUVPTQotCi0JcmV0dXJuOwotfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMKaW5kZXggZDAyZTY3NmFhMy4uZWNiOTI0MWZhZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jCkBAIC02NTUsOCArNjU1LDMzIEBAIHN0YXRp YyB2b2lkIGZyZWVfc29ydF90dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAq c3R1cCk7CiAgKiByZWR1Y2VzIHRvIEFwcGx5U29ydENvbXBhcmF0b3IoKSwgdGhhdCBpcyBzaW5n bGUta2V5IE1pbmltYWxUdXBsZSBzb3J0cwogICogYW5kIERhdHVtIHNvcnRzLgogICovCi0jaW5j bHVkZSAicXNvcnRfdHVwbGUuYyIKKyNkZWZpbmUgUVNfU1VGRklYIHR1cGxlCisjZGVmaW5lIFFT X1RZUEUgU29ydFR1cGxlCisjZGVmaW5lIFFTX0VYVFJBUEFSQU1TICwgU29ydFR1cGxlQ29tcGFy YXRvciBjbXBfdHVwbGUsIFR1cGxlc29ydHN0YXRlICpzdGF0ZQorI2RlZmluZSBRU19FWFRSQUFS R1MgLCBjbXBfdHVwbGUsIHN0YXRlCisjZGVmaW5lIFFTX0NNUEFSR1MgLCBzdGF0ZQorI2RlZmlu ZSBRU19DSEVDS19GT1JfSU5URVJSVVBUUworI2RlZmluZSBRU19DSEVDS19QUkVTT1JURUQKKyNk ZWZpbmUgUVNfU0NPUEUgc3RhdGljCisjZGVmaW5lIFFTX0RFRklORQorI2luY2x1ZGUgImxpYi9x c29ydF90ZW1wbGF0ZS5oIgogCisjZGVmaW5lIFFTX1NVRkZJWCBzc3VwCisjZGVmaW5lIFFTX1RZ UEUgU29ydFR1cGxlCisjZGVmaW5lIFFTX0VYVFJBUEFSQU1TICwgU29ydFN1cHBvcnQgc3N1cAor I2RlZmluZSBRU19FWFRSQUFSR1MgLCBzc3VwCisjZGVmaW5lIFFTX0NNUEFSR1MgLCBzc3VwCisj ZGVmaW5lIFFTX0NIRUNLX0ZPUl9JTlRFUlJVUFRTCisjZGVmaW5lIFFTX0NIRUNLX1BSRVNPUlRF RAorI2RlZmluZSBRU19TQ09QRSBzdGF0aWMKK3N0YXRpYyBpbmxpbmUgaW50CitjbXBfc3N1cChT b3J0VHVwbGUgKmEsIFNvcnRUdXBsZSAqYiwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlyZXR1cm4g QXBwbHlTb3J0Q29tcGFyYXRvcihhLT5kYXR1bTEsIGEtPmlzbnVsbDEsCisJCQkJCQkJICAgYi0+ ZGF0dW0xLCBiLT5pc251bGwxLCBzc3VwKTsKK30KKyNkZWZpbmUgUVNfREVGSU5FCisjaW5jbHVk ZSAibGliL3Fzb3J0X3RlbXBsYXRlLmgiCiAKIC8qCiAgKgkJdHVwbGVzb3J0X2JlZ2luX3h4eApk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL21zdmMvU29sdXRpb24ucG0gYi9zcmMvdG9vbHMvbXN2Yy9T b2x1dGlvbi5wbQppbmRleCA5MDliZGVkNTkyLi43Y2ZkMGZlODYzIDEwMDY0NAotLS0gYS9zcmMv dG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbQorKysgYi9zcmMvdG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbQpA QCAtNjY4LDYgKzY2OCwxNiBAQCBzdWIgR2VuZXJhdGVGaWxlcwogCQkpOwogCX0KIAorCWlmIChJ c05ld2VyKAorCQkJJ3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvcXNvcnRfdHVwbGUuYycsCisJCQkn c3JjL2JhY2tlbmQvdXRpbHMvc29ydC9nZW5fcXNvcnRfdHVwbGUucGwnKSkKKwl7CisJCXByaW50 ICJHZW5lcmF0aW5nIHFzb3J0X3R1cGxlLmMuLi5cbiI7CisJCXN5c3RlbSgKKydwZXJsIHNyYy9i YWNrZW5kL3V0aWxzL3NvcnQvZ2VuX3Fzb3J0X3R1cGxlLnBsID4gc3JjL2JhY2tlbmQvdXRpbHMv c29ydC9xc29ydF90dXBsZS5jJworCQkpOworCX0KKwogCWlmIChJc05ld2VyKAogCQkJJ3NyYy9p bnRlcmZhY2VzL2xpYnBxL2xpYnBxLnJjJywKIAkJCSdzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJw cS5yYy5pbicpKQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL21zdmMvY2xlYW4uYmF0IGIvc3JjL3Rv b2xzL21zdmMvY2xlYW4uYmF0CmluZGV4IGQwMzRlYzU3NjUuLmIxZWI3NTlmNTIgMTAwNzU1Ci0t LSBhL3NyYy90b29scy9tc3ZjL2NsZWFuLmJhdAorKysgYi9zcmMvdG9vbHMvbXN2Yy9jbGVhbi5i YXQKQEAgLTYxLDcgKzYxLDYgQEAgaWYgJURJU1QlPT0xIGlmIGV4aXN0IHNyY1xiYWNrZW5kXHN0 b3JhZ2VcbG1nclxsd2xvY2tuYW1lcy5oIGRlbCAvcSBzcmNcYmFja2VuZFwKIGlmICVESVNUJT09 MSBpZiBleGlzdCBzcmNccGxccGxweXRob25cc3BpZXhjZXB0aW9ucy5oIGRlbCAvcSBzcmNccGxc cGxweXRob25cc3BpZXhjZXB0aW9ucy5oCiBpZiAlRElTVCU9PTEgaWYgZXhpc3Qgc3JjXHBsXHBs cGdzcWxcc3JjXHBsZXJyY29kZXMuaCBkZWwgL3Egc3JjXHBsXHBscGdzcWxcc3JjXHBsZXJyY29k ZXMuaAogaWYgJURJU1QlPT0xIGlmIGV4aXN0IHNyY1xwbFx0Y2xccGx0Y2xlcnJjb2Rlcy5oIGRl bCAvcSBzcmNccGxcdGNsXHBsdGNsZXJyY29kZXMuaAotaWYgJURJU1QlPT0xIGlmIGV4aXN0IHNy Y1xiYWNrZW5kXHV0aWxzXHNvcnRccXNvcnRfdHVwbGUuYyBkZWwgL3Egc3JjXGJhY2tlbmRcdXRp bHNcc29ydFxxc29ydF90dXBsZS5jCiBpZiAlRElTVCU9PTEgaWYgZXhpc3Qgc3JjXGJpblxwc3Fs XHNxbF9oZWxwLmMgZGVsIC9xIHNyY1xiaW5ccHNxbFxzcWxfaGVscC5jCiBpZiAlRElTVCU9PTEg aWYgZXhpc3Qgc3JjXGJpblxwc3FsXHNxbF9oZWxwLmggZGVsIC9xIHNyY1xiaW5ccHNxbFxzcWxf aGVscC5oCiBpZiAlRElTVCU9PTEgaWYgZXhpc3Qgc3JjXGNvbW1vblxrd2xpc3RfZC5oIGRlbCAv cSBzcmNcY29tbW9uXGt3bGlzdF9kLmgKLS0gCjIuMTcuMQoK --000000000000f3369d059c2431aa--