From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20449 invoked by alias); 16 Jun 2009 20:43:26 -0000 Received: (qmail 20361 invoked by uid 22791); 16 Jun 2009 20:43:15 -0000 X-SWARE-Spam-Status: No, hits=0.1 required=5.0 tests=AWL,BAYES_50,J_CHICKENPOX_45,J_CHICKENPOX_46,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 16 Jun 2009 20:43:04 +0000 Received: from zps35.corp.google.com (zps35.corp.google.com [172.25.146.35]) by smtp-out.google.com with ESMTP id n5GKh2iH022813 for ; Tue, 16 Jun 2009 13:43:02 -0700 Received: from qyk40 (qyk40.prod.google.com [10.241.83.168]) by zps35.corp.google.com with ESMTP id n5GKgxn6006225 for ; Tue, 16 Jun 2009 13:42:59 -0700 Received: by qyk40 with SMTP id 40so380227qyk.30 for ; Tue, 16 Jun 2009 13:42:59 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.100.81 with SMTP id x17mr1693032qcn.15.1245184978998; Tue, 16 Jun 2009 13:42:58 -0700 (PDT) In-Reply-To: References: <20090527001157.934BD76BC0@localhost> <8ac60eac0905280956v79d9a84apad9a4370212283b9@mail.gmail.com> <8ac60eac0906101839t4d3978fyc1c6d3b3e2eccb6e@mail.gmail.com> <8ac60eac0906101842y2d2fc9fco331cb4336d9508d0@mail.gmail.com> Date: Tue, 16 Jun 2009 20:43:00 -0000 Message-ID: <8ac60eac0906161342m67c30151lc7f685e0eb36e41f@mail.gmail.com> Subject: Re: [patch] Use mmap instead of obstack_alloc for dwarf debug sections. From: Paul Pluzhnikov To: tromey@redhat.com Cc: gdb-patches@sources.redhat.com Content-Type: multipart/mixed; boundary=0016367f96e05a8782046c7d387b X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-06/txt/msg00411.txt.bz2 --0016367f96e05a8782046c7d387b Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 2668 On Tue, Jun 16, 2009 at 12:19 PM, Tom Tromey wrote: > Thanks. One point of order -- if you re-send a patch, re-send the > ChangeLog entry too. Not a big deal, but it makes things simpler when > reviewing. Thanks. Will do, thanks. > I saw in your original post that this patch helps on > memory-constrained machines; your example was 2G of debug info on a 4G > machine. I just want to make sure that this doesn't hurt other cases; > I don't expect it would, but it is good to cross the t's... I saw minor gain on 16GB machine. I don't see how this could hurt: we aren't using any more memory by doing mmap, we just cooperate with buffer cache instead of fighting with it. > > Paul> + int was_mmaped; > > I would spell this "was_mmapped" (two "p"s). Fixed. > Paul> + /* When debugging .o files, we may need to apply relocations; see > Paul> + http://sourceware.org/ml/gdb-patches/2002-04/msg00136.html . > Paul> + We never compress sections in .o files, so we only need to > Paul> + try this when the section is not compressed. */ > Paul> + retbuf = symfile_relocate_debug_section (abfd, sectp, buf); > > If we're using mmap then we seem to skip this relocation step. > This seems like a bug. That's what "&& (sectp->flags & SEC_RELOC) == 0)" check before mmap is for. In symfile_relocate_debug_section(): /* We're only interested in sections with relocation information. */ if ((sectp->flags & SEC_RELOC) == 0) return NULL; I've added a comment to that effect. > IIUC, this is an unusual case. So perhaps one fix would be to > introduce a new symfile_debug_section_needs_relocate_p, then protect > the mmap branch with that. I can add symfile_debug_section_needs_relocate_p() if that's preferable. > Paul> + gdb_assert (munmap ((void *)map_begin, map_length) == 0); > > Space after the ")" of the cast to void *. Fixed. Thanks, -- Paul Pluzhnikov 2009-06-16 Paul Pluzhnikov * dwarf2read.c (dwarf_info_section, dwarf_abbrev_section) (dwarf_line_section, dwarf_pubnames_section, dwarf_aranges_section) (dwarf_loc_section, dwarf_macinfo_section, dwarf_str_section) (dwarf_ranges_section, dwarf_frame_section, dwarf_eh_frame_section): Removed. (dwarf2_resize_section): Likewise. (dwarf2_read_section): Now static, use bfd_mmap() if possible. (dwarf2_get_section_info): New function. (munmap_section_buffer): Likewise. (dwarf2_per_objfile_cleanup): Likewise. (section_is_p): Signature change. * dwarf2-frame.c (dwarf2_build_frame_info): Use dwarf2_get_section_info instead of dwarf2_read_section. --0016367f96e05a8782046c7d387b Content-Type: text/plain; charset=US-ASCII; name="gdb-dwarf2-mmap-20090616.txt" Content-Disposition: attachment; filename="gdb-dwarf2-mmap-20090616.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fw12y6fl0 Content-length: 59353 SW5kZXg6IGR3YXJmMnJlYWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2R3YXJmMnJlYWQuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4zMDgKZGlmZiAtdSAtcCAtdSAtcjEuMzA4IGR3 YXJmMnJlYWQuYwotLS0gZHdhcmYycmVhZC5jCTEzIEp1biAyMDA5IDA0OjIz OjM0IC0wMDAwCTEuMzA4CisrKyBkd2FyZjJyZWFkLmMJMTYgSnVuIDIwMDkg MjA6NDE6NTIgLTAwMDAKQEAgLTU1LDIwICs1NSw5IEBACiAjaWZkZWYgSEFW RV9aTElCX0gKICNpbmNsdWRlIDx6bGliLmg+CiAjZW5kaWYKLQotLyogQSBu b3RlIG9uIG1lbW9yeSB1c2FnZSBmb3IgdGhpcyBmaWxlLgotICAgCi0gICBB dCB0aGUgcHJlc2VudCB0aW1lLCB0aGlzIGNvZGUgcmVhZHMgdGhlIGRlYnVn IGluZm8gc2VjdGlvbnMgaW50bwotICAgdGhlIG9iamZpbGUncyBvYmpmaWxl X29ic3RhY2suICBBIGRlZmluaXRlIGltcHJvdmVtZW50IGZvciBzdGFydHVw Ci0gICB0aW1lLCBvbiBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IGVtaXQgcmVs b2NhdGlvbnMgZm9yIGRlYnVnCi0gICBzZWN0aW9ucywgd291bGQgYmUgdG8g dXNlIG1tYXAgaW5zdGVhZC4gIFRoZSBvYmplY3QncyBjb21wbGV0ZQotICAg ZGVidWcgaW5mb3JtYXRpb24gaXMgbG9hZGVkIGludG8gbWVtb3J5LCBwYXJ0 bHkgdG8gc2ltcGxpZnkKLSAgIGFic29sdXRlIERJRSByZWZlcmVuY2VzLgot Ci0gICBXaGV0aGVyIHVzaW5nIG9ic3RhY2tzIG9yIG1tYXAsIHRoZSBzZWN0 aW9ucyBzaG91bGQgcmVtYWluIGxvYWRlZAotICAgdW50aWwgdGhlIG9iamZp bGUgaXMgcmVsZWFzZWQsIGFuZCBwb2ludGVycyBpbnRvIHRoZSBzZWN0aW9u IGRhdGEKLSAgIGNhbiBiZSB1c2VkIGZvciBhbnkgb3RoZXIgZGF0YSBhc3Nv Y2lhdGVkIHRvIHRoZSBvYmpmaWxlIChzeW1ib2wKLSAgIG5hbWVzLCB0eXBl IG5hbWVzLCBsb2NhdGlvbiBleHByZXNzaW9ucyB0byBuYW1lIGEgZmV3KS4g ICovCisjaWZkZWYgSEFWRV9NTUFQCisjaW5jbHVkZSA8c3lzL21tYW4uaD4K KyNlbmRpZgogCiAjaWYgMAogLyogLmRlYnVnX2luZm8gaGVhZGVyIGZvciBh IGNvbXBpbGF0aW9uIHVuaXQKQEAgLTE0NSw2ICsxMzQsOCBAQCBfU1RBVEVN RU5UX1BST0xPR1VFOwogLyogV2hlbiBub24temVybywgZHVtcCBESUVzIGFm dGVyIHRoZXkgYXJlIHJlYWQgaW4uICAqLwogc3RhdGljIGludCBkd2FyZjJf ZGllX2RlYnVnID0gMDsKIAorc3RhdGljIGludCBwYWdlc2l6ZTsKKwogLyog V2hlbiBzZXQsIHRoZSBmaWxlIHRoYXQgd2UncmUgcHJvY2Vzc2luZyBpcyBr bm93biB0byBoYXZlIGRlYnVnZ2luZwogICAgaW5mbyBmb3IgQysrIG5hbWVz cGFjZXMuICBHQ0MgMy4zLnggZGlkIG5vdCBwcm9kdWNlIHRoaXMgaW5mb3Jt YXRpb24sCiAgICBidXQgbGF0ZXIgdmVyc2lvbnMgZG8uICAqLwpAQCAtMTUz LDI5ICsxNDQsMjcgQEAgc3RhdGljIGludCBwcm9jZXNzaW5nX2hhc19uYW1l c3BhY2VfaW5mbwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9iamZpbGVfZGF0 YSAqZHdhcmYyX29iamZpbGVfZGF0YV9rZXk7CiAKK3N0cnVjdCBkd2FyZjJf c2VjdGlvbl9pbmZvCit7CisgIGFzZWN0aW9uICphc2VjdGlvbjsKKyAgZ2Ri X2J5dGUgKmJ1ZmZlcjsKKyAgYmZkX3NpemVfdHlwZSBzaXplOworICBpbnQg d2FzX21tYXBwZWQ7Cit9OworCiBzdHJ1Y3QgZHdhcmYyX3Blcl9vYmpmaWxl CiB7Ci0gIC8qIFNpemVzIG9mIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCi0g IHVuc2lnbmVkIGludCBpbmZvX3NpemU7Ci0gIHVuc2lnbmVkIGludCBhYmJy ZXZfc2l6ZTsKLSAgdW5zaWduZWQgaW50IGxpbmVfc2l6ZTsKLSAgdW5zaWdu ZWQgaW50IHB1Ym5hbWVzX3NpemU7Ci0gIHVuc2lnbmVkIGludCBhcmFuZ2Vz X3NpemU7Ci0gIHVuc2lnbmVkIGludCBsb2Nfc2l6ZTsKLSAgdW5zaWduZWQg aW50IG1hY2luZm9fc2l6ZTsKLSAgdW5zaWduZWQgaW50IHN0cl9zaXplOwot ICB1bnNpZ25lZCBpbnQgcmFuZ2VzX3NpemU7Ci0gIHVuc2lnbmVkIGludCBm cmFtZV9zaXplOwotICB1bnNpZ25lZCBpbnQgZWhfZnJhbWVfc2l6ZTsKLQot ICAvKiBMb2FkZWQgZGF0YSBmcm9tIHRoZSBzZWN0aW9ucy4gICovCi0gIGdk Yl9ieXRlICppbmZvX2J1ZmZlcjsKLSAgZ2RiX2J5dGUgKmFiYnJldl9idWZm ZXI7Ci0gIGdkYl9ieXRlICpsaW5lX2J1ZmZlcjsKLSAgZ2RiX2J5dGUgKnN0 cl9idWZmZXI7Ci0gIGdkYl9ieXRlICptYWNpbmZvX2J1ZmZlcjsKLSAgZ2Ri X2J5dGUgKnJhbmdlc19idWZmZXI7Ci0gIGdkYl9ieXRlICpsb2NfYnVmZmVy OworICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25faW5mbyBpbmZvOworICBzdHJ1 Y3QgZHdhcmYyX3NlY3Rpb25faW5mbyBhYmJyZXY7CisgIHN0cnVjdCBkd2Fy ZjJfc2VjdGlvbl9pbmZvIGxpbmU7CisgIHN0cnVjdCBkd2FyZjJfc2VjdGlv bl9pbmZvIHB1Ym5hbWVzOworICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25faW5m byBhcmFuZ2VzOworICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25faW5mbyBsb2M7 CisgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9pbmZvIG1hY2luZm87CisgIHN0 cnVjdCBkd2FyZjJfc2VjdGlvbl9pbmZvIHN0cjsKKyAgc3RydWN0IGR3YXJm Ml9zZWN0aW9uX2luZm8gcmFuZ2VzOworICBzdHJ1Y3QgZHdhcmYyX3NlY3Rp b25faW5mbyBmcmFtZTsKKyAgc3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8g ZWhfZnJhbWU7CiAKICAgLyogQSBsaXN0IG9mIGFsbCB0aGUgY29tcGlsYXRp b24gdW5pdHMuICBUaGlzIGlzIHVzZWQgdG8gbG9jYXRlCiAgICAgIHRoZSB0 YXJnZXQgY29tcGlsYXRpb24gdW5pdCBvZiBhIHBhcnRpY3VsYXIgcmVmZXJl bmNlLiAgKi8KQEAgLTE5NSwxOCArMTg0LDYgQEAgc3RydWN0IGR3YXJmMl9w ZXJfb2JqZmlsZQogCiBzdGF0aWMgc3RydWN0IGR3YXJmMl9wZXJfb2JqZmls ZSAqZHdhcmYyX3Blcl9vYmpmaWxlOwogCi1zdGF0aWMgYXNlY3Rpb24gKmR3 YXJmX2luZm9fc2VjdGlvbjsKLXN0YXRpYyBhc2VjdGlvbiAqZHdhcmZfYWJi cmV2X3NlY3Rpb247Ci1zdGF0aWMgYXNlY3Rpb24gKmR3YXJmX2xpbmVfc2Vj dGlvbjsKLXN0YXRpYyBhc2VjdGlvbiAqZHdhcmZfcHVibmFtZXNfc2VjdGlv bjsKLXN0YXRpYyBhc2VjdGlvbiAqZHdhcmZfYXJhbmdlc19zZWN0aW9uOwot c3RhdGljIGFzZWN0aW9uICpkd2FyZl9sb2Nfc2VjdGlvbjsKLXN0YXRpYyBh c2VjdGlvbiAqZHdhcmZfbWFjaW5mb19zZWN0aW9uOwotc3RhdGljIGFzZWN0 aW9uICpkd2FyZl9zdHJfc2VjdGlvbjsKLXN0YXRpYyBhc2VjdGlvbiAqZHdh cmZfcmFuZ2VzX3NlY3Rpb247Ci1hc2VjdGlvbiAqZHdhcmZfZnJhbWVfc2Vj dGlvbjsKLWFzZWN0aW9uICpkd2FyZl9laF9mcmFtZV9zZWN0aW9uOwotCiAv KiBuYW1lcyBvZiB0aGUgZGVidWdnaW5nIHNlY3Rpb25zICovCiAKIC8qIE5v dGUgdGhhdCBpZiB0aGUgZGVidWdnaW5nIHNlY3Rpb24gaGFzIGJlZW4gY29t cHJlc3NlZCwgaXQgbWlnaHQKQEAgLTgwMyw4ICs3ODAsNiBAQCBzdGF0aWMg dm9pZCBkd2FyZjJfcHN5bXRhYl90b19zeW10YWIgKHN0CiAKIHN0YXRpYyB2 b2lkIHBzeW10YWJfdG9fc3ltdGFiXzEgKHN0cnVjdCBwYXJ0aWFsX3N5bXRh YiAqKTsKIAotZ2RiX2J5dGUgKmR3YXJmMl9yZWFkX3NlY3Rpb24gKHN0cnVj dCBvYmpmaWxlICosIGFzZWN0aW9uICopOwotCiBzdGF0aWMgdm9pZCBkd2Fy ZjJfcmVhZF9hYmJyZXZzIChiZmQgKmFiZmQsIHN0cnVjdCBkd2FyZjJfY3Ug KmN1KTsKIAogc3RhdGljIHZvaWQgZHdhcmYyX2ZyZWVfYWJicmV2X3RhYmxl ICh2b2lkICopOwpAQCAtMTEzMCwzMCArMTEwNSwyMCBAQCBkd2FyZjJfaGFz X2luZm8gKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlCiAgIHNldF9vYmpmaWxl X2RhdGEgKG9iamZpbGUsIGR3YXJmMl9vYmpmaWxlX2RhdGFfa2V5LCBkYXRh KTsKICAgZHdhcmYyX3Blcl9vYmpmaWxlID0gZGF0YTsKIAotICBkd2FyZl9p bmZvX3NlY3Rpb24gPSAwOwotICBkd2FyZl9hYmJyZXZfc2VjdGlvbiA9IDA7 Ci0gIGR3YXJmX2xpbmVfc2VjdGlvbiA9IDA7Ci0gIGR3YXJmX3N0cl9zZWN0 aW9uID0gMDsKLSAgZHdhcmZfbWFjaW5mb19zZWN0aW9uID0gMDsKLSAgZHdh cmZfZnJhbWVfc2VjdGlvbiA9IDA7Ci0gIGR3YXJmX2VoX2ZyYW1lX3NlY3Rp b24gPSAwOwotICBkd2FyZl9yYW5nZXNfc2VjdGlvbiA9IDA7Ci0gIGR3YXJm X2xvY19zZWN0aW9uID0gMDsKLSAgCiAgIGJmZF9tYXBfb3Zlcl9zZWN0aW9u cyAob2JqZmlsZS0+b2JmZCwgZHdhcmYyX2xvY2F0ZV9zZWN0aW9ucywgTlVM TCk7Ci0gIHJldHVybiAoZHdhcmZfaW5mb19zZWN0aW9uICE9IE5VTEwgJiYg ZHdhcmZfYWJicmV2X3NlY3Rpb24gIT0gTlVMTCk7CisgIHJldHVybiAoZGF0 YS0+aW5mby5hc2VjdGlvbiAhPSBOVUxMICYmIGRhdGEtPmFiYnJldi5hc2Vj dGlvbiAhPSBOVUxMKTsKIH0KIAogLyogV2hlbiBsb2FkaW5nIHNlY3Rpb25z LCB3ZSBjYW4gZWl0aGVyIGxvb2sgZm9yICIuPG5hbWU+Iiwgb3IgZm9yCiAg KiAiLno8bmFtZT4iLCB3aGljaCBpbmRpY2F0ZXMgYSBjb21wcmVzc2VkIHNl Y3Rpb24uICAqLwogCiBzdGF0aWMgaW50Ci1zZWN0aW9uX2lzX3AgKGFzZWN0 aW9uICpzZWN0cCwgY29uc3QgY2hhciAqbmFtZSkKK3NlY3Rpb25faXNfcCAo Y29uc3QgY2hhciAqc2VjdGlvbl9uYW1lLCBjb25zdCBjaGFyICpuYW1lKQog ewotICByZXR1cm4gKChzZWN0cC0+bmFtZVswXSA9PSAnLicKLSAgICAgICAg ICAgJiYgc3RyY21wIChzZWN0cC0+bmFtZSArIDEsIG5hbWUpID09IDApCi0g ICAgICAgICAgfHwgKHNlY3RwLT5uYW1lWzBdID09ICcuJyAmJiBzZWN0cC0+ bmFtZVsxXSA9PSAneicKLSAgICAgICAgICAgICAgJiYgc3RyY21wIChzZWN0 cC0+bmFtZSArIDIsIG5hbWUpID09IDApKTsKKyAgcmV0dXJuIChzZWN0aW9u X25hbWVbMF0gPT0gJy4nCisJICAmJiAoc3RyY21wIChzZWN0aW9uX25hbWUg KyAxLCBuYW1lKSA9PSAwCisJICAgICAgfHwgKHNlY3Rpb25fbmFtZVsxXSA9 PSAneicKKwkJICAmJiBzdHJjbXAgKHNlY3Rpb25fbmFtZSArIDIsIG5hbWUp ID09IDApKSk7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgbWFwcGVkIGFj cm9zcyB0aGUgc2VjdGlvbnMgYW5kIHJlbWVtYmVycyB0aGUKQEAgLTExNjMs MTQwICsxMTI4LDI2NiBAQCBzZWN0aW9uX2lzX3AgKGFzZWN0aW9uICpzZWN0 cCwgY29uc3QgY2hhCiBzdGF0aWMgdm9pZAogZHdhcmYyX2xvY2F0ZV9zZWN0 aW9ucyAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjdHAsIHZvaWQgKmlnbm9y ZV9wdHIpCiB7Ci0gIGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLCBJTkZPX1NF Q1RJT04pKQorICBpZiAoc2VjdGlvbl9pc19wIChzZWN0cC0+bmFtZSwgSU5G T19TRUNUSU9OKSkKICAgICB7Ci0gICAgICBkd2FyZjJfcGVyX29iamZpbGUt PmluZm9fc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0cCk7Ci0g ICAgICBkd2FyZl9pbmZvX3NlY3Rpb24gPSBzZWN0cDsKKyAgICAgIGR3YXJm Ml9wZXJfb2JqZmlsZS0+aW5mby5hc2VjdGlvbiA9IHNlY3RwOworICAgICAg ZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvLnNpemUgPSBiZmRfZ2V0X3NlY3Rp b25fc2l6ZSAoc2VjdHApOwogICAgIH0KLSAgZWxzZSBpZiAoc2VjdGlvbl9p c19wIChzZWN0cCwgQUJCUkVWX1NFQ1RJT04pKQorICBlbHNlIGlmIChzZWN0 aW9uX2lzX3AgKHNlY3RwLT5uYW1lLCBBQkJSRVZfU0VDVElPTikpCiAgICAg ewotICAgICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5hYmJyZXZfc2l6ZSA9IGJm ZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0cCk7Ci0gICAgICBkd2FyZl9hYmJy ZXZfc2VjdGlvbiA9IHNlY3RwOworICAgICAgZHdhcmYyX3Blcl9vYmpmaWxl LT5hYmJyZXYuYXNlY3Rpb24gPSBzZWN0cDsKKyAgICAgIGR3YXJmMl9wZXJf b2JqZmlsZS0+YWJicmV2LnNpemUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAo c2VjdHApOwogICAgIH0KLSAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0 cCwgTElORV9TRUNUSU9OKSkKKyAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChz ZWN0cC0+bmFtZSwgTElORV9TRUNUSU9OKSkKICAgICB7Ci0gICAgICBkd2Fy ZjJfcGVyX29iamZpbGUtPmxpbmVfc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9z aXplIChzZWN0cCk7Ci0gICAgICBkd2FyZl9saW5lX3NlY3Rpb24gPSBzZWN0 cDsKKyAgICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+bGluZS5hc2VjdGlvbiA9 IHNlY3RwOworICAgICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5saW5lLnNpemUg PSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAoc2VjdHApOwogICAgIH0KLSAgZWxz ZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cCwgUFVCTkFNRVNfU0VDVElPTikp CisgIGVsc2UgaWYgKHNlY3Rpb25faXNfcCAoc2VjdHAtPm5hbWUsIFBVQk5B TUVTX1NFQ1RJT04pKQogICAgIHsKLSAgICAgIGR3YXJmMl9wZXJfb2JqZmls ZS0+cHVibmFtZXNfc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0 cCk7Ci0gICAgICBkd2FyZl9wdWJuYW1lc19zZWN0aW9uID0gc2VjdHA7Cisg ICAgICBkd2FyZjJfcGVyX29iamZpbGUtPnB1Ym5hbWVzLmFzZWN0aW9uID0g c2VjdHA7CisgICAgICBkd2FyZjJfcGVyX29iamZpbGUtPnB1Ym5hbWVzLnNp emUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAoc2VjdHApOwogICAgIH0KLSAg ZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cCwgQVJBTkdFU19TRUNUSU9O KSkKKyAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cC0+bmFtZSwgQVJB TkdFU19TRUNUSU9OKSkKICAgICB7Ci0gICAgICBkd2FyZjJfcGVyX29iamZp bGUtPmFyYW5nZXNfc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0 cCk7Ci0gICAgICBkd2FyZl9hcmFuZ2VzX3NlY3Rpb24gPSBzZWN0cDsKKyAg ICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+YXJhbmdlcy5hc2VjdGlvbiA9IHNl Y3RwOworICAgICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5hcmFuZ2VzLnNpemUg PSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAoc2VjdHApOwogICAgIH0KLSAgZWxz ZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cCwgTE9DX1NFQ1RJT04pKQorICBl bHNlIGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLT5uYW1lLCBMT0NfU0VDVElP TikpCiAgICAgewotICAgICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5sb2Nfc2l6 ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0cCk7Ci0gICAgICBkd2Fy Zl9sb2Nfc2VjdGlvbiA9IHNlY3RwOworICAgICAgZHdhcmYyX3Blcl9vYmpm aWxlLT5sb2MuYXNlY3Rpb24gPSBzZWN0cDsKKyAgICAgIGR3YXJmMl9wZXJf b2JqZmlsZS0+bG9jLnNpemUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAoc2Vj dHApOwogICAgIH0KLSAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cCwg TUFDSU5GT19TRUNUSU9OKSkKKyAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChz ZWN0cC0+bmFtZSwgTUFDSU5GT19TRUNUSU9OKSkKICAgICB7Ci0gICAgICBk d2FyZjJfcGVyX29iamZpbGUtPm1hY2luZm9fc2l6ZSA9IGJmZF9nZXRfc2Vj dGlvbl9zaXplIChzZWN0cCk7Ci0gICAgICBkd2FyZl9tYWNpbmZvX3NlY3Rp b24gPSBzZWN0cDsKKyAgICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+bWFjaW5m by5hc2VjdGlvbiA9IHNlY3RwOworICAgICAgZHdhcmYyX3Blcl9vYmpmaWxl LT5tYWNpbmZvLnNpemUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAoc2VjdHAp OwogICAgIH0KLSAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cCwgU1RS X1NFQ1RJT04pKQorICBlbHNlIGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLT5u YW1lLCBTVFJfU0VDVElPTikpCiAgICAgewotICAgICAgZHdhcmYyX3Blcl9v YmpmaWxlLT5zdHJfc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0 cCk7Ci0gICAgICBkd2FyZl9zdHJfc2VjdGlvbiA9IHNlY3RwOworICAgICAg ZHdhcmYyX3Blcl9vYmpmaWxlLT5zdHIuYXNlY3Rpb24gPSBzZWN0cDsKKyAg ICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+c3RyLnNpemUgPSBiZmRfZ2V0X3Nl Y3Rpb25fc2l6ZSAoc2VjdHApOwogICAgIH0KLSAgZWxzZSBpZiAoc2VjdGlv bl9pc19wIChzZWN0cCwgRlJBTUVfU0VDVElPTikpCisgIGVsc2UgaWYgKHNl Y3Rpb25faXNfcCAoc2VjdHAtPm5hbWUsIEZSQU1FX1NFQ1RJT04pKQogICAg IHsKLSAgICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+ZnJhbWVfc2l6ZSA9IGJm ZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0cCk7Ci0gICAgICBkd2FyZl9mcmFt ZV9zZWN0aW9uID0gc2VjdHA7CisgICAgICBkd2FyZjJfcGVyX29iamZpbGUt PmZyYW1lLmFzZWN0aW9uID0gc2VjdHA7CisgICAgICBkd2FyZjJfcGVyX29i amZpbGUtPmZyYW1lLnNpemUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAoc2Vj dHApOwogICAgIH0KLSAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cCwg RUhfRlJBTUVfU0VDVElPTikpCisgIGVsc2UgaWYgKHNlY3Rpb25faXNfcCAo c2VjdHAtPm5hbWUsIEVIX0ZSQU1FX1NFQ1RJT04pKQogICAgIHsKICAgICAg IGZsYWd3b3JkIGFmbGFnID0gYmZkX2dldF9zZWN0aW9uX2ZsYWdzIChpZ25v cmVfYWJmZCwgc2VjdHApOwogICAgICAgaWYgKGFmbGFnICYgU0VDX0hBU19D T05URU5UUykKICAgICAgICAgewotICAgICAgICAgIGR3YXJmMl9wZXJfb2Jq ZmlsZS0+ZWhfZnJhbWVfc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChz ZWN0cCk7Ci0gICAgICAgICAgZHdhcmZfZWhfZnJhbWVfc2VjdGlvbiA9IHNl Y3RwOworCSAgZHdhcmYyX3Blcl9vYmpmaWxlLT5laF9mcmFtZS5hc2VjdGlv biA9IHNlY3RwOworICAgICAgICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+ZWhf ZnJhbWUuc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0cCk7CiAg ICAgICAgIH0KICAgICB9Ci0gIGVsc2UgaWYgKHNlY3Rpb25faXNfcCAoc2Vj dHAsIFJBTkdFU19TRUNUSU9OKSkKKyAgZWxzZSBpZiAoc2VjdGlvbl9pc19w IChzZWN0cC0+bmFtZSwgUkFOR0VTX1NFQ1RJT04pKQogICAgIHsKLSAgICAg IGR3YXJmMl9wZXJfb2JqZmlsZS0+cmFuZ2VzX3NpemUgPSBiZmRfZ2V0X3Nl Y3Rpb25fc2l6ZSAoc2VjdHApOwotICAgICAgZHdhcmZfcmFuZ2VzX3NlY3Rp b24gPSBzZWN0cDsKKyAgICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+cmFuZ2Vz LmFzZWN0aW9uID0gc2VjdHA7CisgICAgICBkd2FyZjJfcGVyX29iamZpbGUt PnJhbmdlcy5zaXplID0gYmZkX2dldF9zZWN0aW9uX3NpemUgKHNlY3RwKTsK ICAgICB9Ci0gIAorCiAgIGlmICgoYmZkX2dldF9zZWN0aW9uX2ZsYWdzIChh YmZkLCBzZWN0cCkgJiBTRUNfTE9BRCkKICAgICAgICYmIGJmZF9zZWN0aW9u X3ZtYSAoYWJmZCwgc2VjdHApID09IDApCiAgICAgZHdhcmYyX3Blcl9vYmpm aWxlLT5oYXNfc2VjdGlvbl9hdF96ZXJvID0gMTsKIH0KIAotLyogVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZGVjb21wcmVzc2luZyBhIHNlY3Rp b24sIHNvCi0gICBkd2FyZjJfcGVyX29iamZpbGUgY2FuIHJlY29yZCBpdHMg bmV3LCB1bmNvbXByZXNzZWQgc2l6ZS4gICovCisvKiBEZWNvbXByZXNzIGEg c2VjdGlvbiB0aGF0IHdhcyBjb21wcmVzc2VkIHVzaW5nIHpsaWIuICBTdG9y ZSB0aGUKKyAgIGRlY29tcHJlc3NlZCBidWZmZXIsIGFuZCBpdHMgc2l6ZSwg aW4gT1VUQlVGIGFuZCBPVVRTSVpFLiAgKi8KIAogc3RhdGljIHZvaWQKLWR3 YXJmMl9yZXNpemVfc2VjdGlvbiAoYXNlY3Rpb24gKnNlY3RwLCBiZmRfc2l6 ZV90eXBlIG5ld19zaXplKQoremxpYl9kZWNvbXByZXNzX3NlY3Rpb24gKHN0 cnVjdCBvYmpmaWxlICpvYmpmaWxlLCBhc2VjdGlvbiAqc2VjdHAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgZ2RiX2J5dGUgKipvdXRidWYsIGJmZF9z aXplX3R5cGUgKm91dHNpemUpCiB7Ci0gIGlmIChzZWN0aW9uX2lzX3AgKHNl Y3RwLCBJTkZPX1NFQ1RJT04pKQotICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+ aW5mb19zaXplID0gbmV3X3NpemU7Ci0gIGVsc2UgaWYgKHNlY3Rpb25faXNf cCAoc2VjdHAsIEFCQlJFVl9TRUNUSU9OKSkKLSAgICBkd2FyZjJfcGVyX29i amZpbGUtPmFiYnJldl9zaXplID0gbmV3X3NpemU7Ci0gIGVsc2UgaWYgKHNl Y3Rpb25faXNfcCAoc2VjdHAsIExJTkVfU0VDVElPTikpCi0gICAgZHdhcmYy X3Blcl9vYmpmaWxlLT5saW5lX3NpemUgPSBuZXdfc2l6ZTsKLSAgZWxzZSBp ZiAoc2VjdGlvbl9pc19wIChzZWN0cCwgUFVCTkFNRVNfU0VDVElPTikpCi0g ICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5wdWJuYW1lc19zaXplID0gbmV3X3Np emU7Ci0gIGVsc2UgaWYgKHNlY3Rpb25faXNfcCAoc2VjdHAsIEFSQU5HRVNf U0VDVElPTikpCi0gICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5hcmFuZ2VzX3Np emUgPSBuZXdfc2l6ZTsKLSAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0 cCwgTE9DX1NFQ1RJT04pKQotICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+bG9j X3NpemUgPSBuZXdfc2l6ZTsKLSAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChz ZWN0cCwgTUFDSU5GT19TRUNUSU9OKSkKLSAgICBkd2FyZjJfcGVyX29iamZp bGUtPm1hY2luZm9fc2l6ZSA9IG5ld19zaXplOwotICBlbHNlIGlmIChzZWN0 aW9uX2lzX3AgKHNlY3RwLCBTVFJfU0VDVElPTikpCi0gICAgZHdhcmYyX3Bl cl9vYmpmaWxlLT5zdHJfc2l6ZSA9IG5ld19zaXplOwotICBlbHNlIGlmIChz ZWN0aW9uX2lzX3AgKHNlY3RwLCBGUkFNRV9TRUNUSU9OKSkKLSAgICBkd2Fy ZjJfcGVyX29iamZpbGUtPmZyYW1lX3NpemUgPSBuZXdfc2l6ZTsKLSAgZWxz ZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cCwgRUhfRlJBTUVfU0VDVElPTikp Ci0gICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5laF9mcmFtZV9zaXplID0gbmV3 X3NpemU7Ci0gIGVsc2UgaWYgKHNlY3Rpb25faXNfcCAoc2VjdHAsIFJBTkdF U19TRUNUSU9OKSkKLSAgICBkd2FyZjJfcGVyX29iamZpbGUtPnJhbmdlc19z aXplID0gbmV3X3NpemU7Ci0gIGVsc2UKLSAgICBpbnRlcm5hbF9lcnJvciAo X19GSUxFX18sIF9fTElORV9fLAotCQkgICAgXygiZHdhcmYyX3Jlc2l6ZV9z ZWN0aW9uOiBtaXNzaW5nIHNlY3Rpb25faXNfcCBjaGVjazogJXMiKSwKLSAg ICAgICAgICAgICAgICAgICAgc2VjdHAtPm5hbWUpOworICBiZmQgKmFiZmQg PSBvYmpmaWxlLT5vYmZkOworI2lmbmRlZiBIQVZFX1pMSUJfSAorICBlcnJv ciAoXygiU3VwcG9ydCBmb3IgemxpYi1jb21wcmVzc2VkIERXQVJGIGRhdGEg KGZyb20gJyVzJykgIgorICAgICAgICAgICAiaXMgZGlzYWJsZWQgaW4gdGhp cyBjb3B5IG9mIEdEQiIpLAorICAgICAgICAgYmZkX2dldF9maWxlbmFtZSAo YWJmZCkpOworI2Vsc2UKKyAgYmZkX3NpemVfdHlwZSBjb21wcmVzc2VkX3Np emUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAoc2VjdHApOworICBnZGJfYnl0 ZSAqY29tcHJlc3NlZF9idWZmZXIgPSB4bWFsbG9jIChjb21wcmVzc2VkX3Np emUpOworICBiZmRfc2l6ZV90eXBlIHVuY29tcHJlc3NlZF9zaXplOworICBn ZGJfYnl0ZSAqdW5jb21wcmVzc2VkX2J1ZmZlcjsKKyAgel9zdHJlYW0gc3Ry bTsKKyAgaW50IHJjOworICBpbnQgaGVhZGVyX3NpemUgPSAxMjsKKworICBp ZiAoYmZkX3NlZWsgKGFiZmQsIHNlY3RwLT5maWxlcG9zLCBTRUVLX1NFVCkg IT0gMAorICAgICAgfHwgYmZkX2JyZWFkIChjb21wcmVzc2VkX2J1ZmZlciwg Y29tcHJlc3NlZF9zaXplLCBhYmZkKSAhPSBjb21wcmVzc2VkX3NpemUpCisg ICAgZXJyb3IgKF8oIkR3YXJmIEVycm9yOiBDYW4ndCByZWFkIERXQVJGIGRh dGEgZnJvbSAnJXMnIiksCisgICAgICAgICAgIGJmZF9nZXRfZmlsZW5hbWUg KGFiZmQpKTsKKworICAvKiBSZWFkIHRoZSB6bGliIGhlYWRlci4gIEluIHRo aXMgY2FzZSwgaXQgc2hvdWxkIGJlICJaTElCIiBmb2xsb3dlZAorICAgICBi eSB0aGUgdW5jb21wcmVzc2VkIHNlY3Rpb24gc2l6ZSwgOCBieXRlcyBpbiBi aWctZW5kaWFuIG9yZGVyLiAgKi8KKyAgaWYgKGNvbXByZXNzZWRfc2l6ZSA8 IGhlYWRlcl9zaXplCisgICAgICB8fCBzdHJuY21wIChjb21wcmVzc2VkX2J1 ZmZlciwgIlpMSUIiLCA0KSAhPSAwKQorICAgIGVycm9yIChfKCJEd2FyZiBF cnJvcjogQ29ycnVwdCBEV0FSRiBaTElCIGhlYWRlciBmcm9tICclcyciKSwK KyAgICAgICAgICAgYmZkX2dldF9maWxlbmFtZSAoYWJmZCkpOworICB1bmNv bXByZXNzZWRfc2l6ZSA9IGNvbXByZXNzZWRfYnVmZmVyWzRdOyB1bmNvbXBy ZXNzZWRfc2l6ZSA8PD0gODsKKyAgdW5jb21wcmVzc2VkX3NpemUgKz0gY29t cHJlc3NlZF9idWZmZXJbNV07IHVuY29tcHJlc3NlZF9zaXplIDw8PSA4Owor ICB1bmNvbXByZXNzZWRfc2l6ZSArPSBjb21wcmVzc2VkX2J1ZmZlcls2XTsg dW5jb21wcmVzc2VkX3NpemUgPDw9IDg7CisgIHVuY29tcHJlc3NlZF9zaXpl ICs9IGNvbXByZXNzZWRfYnVmZmVyWzddOyB1bmNvbXByZXNzZWRfc2l6ZSA8 PD0gODsKKyAgdW5jb21wcmVzc2VkX3NpemUgKz0gY29tcHJlc3NlZF9idWZm ZXJbOF07IHVuY29tcHJlc3NlZF9zaXplIDw8PSA4OworICB1bmNvbXByZXNz ZWRfc2l6ZSArPSBjb21wcmVzc2VkX2J1ZmZlcls5XTsgdW5jb21wcmVzc2Vk X3NpemUgPDw9IDg7CisgIHVuY29tcHJlc3NlZF9zaXplICs9IGNvbXByZXNz ZWRfYnVmZmVyWzEwXTsgdW5jb21wcmVzc2VkX3NpemUgPDw9IDg7CisgIHVu Y29tcHJlc3NlZF9zaXplICs9IGNvbXByZXNzZWRfYnVmZmVyWzExXTsKKwor ICAvKiBJdCBpcyBwb3NzaWJsZSB0aGUgc2VjdGlvbiBjb25zaXN0cyBvZiBz ZXZlcmFsIGNvbXByZXNzZWQKKyAgICAgYnVmZmVycyBjb25jYXRlbmF0ZWQg dG9nZXRoZXIsIHNvIHdlIHVuY29tcHJlc3MgaW4gYSBsb29wLiAgKi8KKyAg c3RybS56YWxsb2MgPSBOVUxMOworICBzdHJtLnpmcmVlID0gTlVMTDsKKyAg c3RybS5vcGFxdWUgPSBOVUxMOworICBzdHJtLmF2YWlsX2luID0gY29tcHJl c3NlZF9zaXplIC0gaGVhZGVyX3NpemU7CisgIHN0cm0ubmV4dF9pbiA9IChC eXRlZiopIGNvbXByZXNzZWRfYnVmZmVyICsgaGVhZGVyX3NpemU7CisgIHN0 cm0uYXZhaWxfb3V0ID0gdW5jb21wcmVzc2VkX3NpemU7CisgIHVuY29tcHJl c3NlZF9idWZmZXIgPSBvYnN0YWNrX2FsbG9jICgmb2JqZmlsZS0+b2JqZmls ZV9vYnN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5jb21wcmVzc2VkX3NpemUpOworICByYyA9IGluZmxhdGVJbml0 ICgmc3RybSk7CisgIHdoaWxlIChzdHJtLmF2YWlsX2luID4gMCkKKyAgICB7 CisgICAgICBpZiAocmMgIT0gWl9PSykKKyAgICAgICAgZXJyb3IgKF8oIkR3 YXJmIEVycm9yOiBzZXR0aW5nIHVwIERXQVJGIHVuY29tcHJlc3Npb24gaW4g JyVzJzogJWQiKSwKKyAgICAgICAgICAgICAgIGJmZF9nZXRfZmlsZW5hbWUg KGFiZmQpLCByYyk7CisgICAgICBzdHJtLm5leHRfb3V0ID0gKChCeXRlZiop IHVuY29tcHJlc3NlZF9idWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICAg KyAodW5jb21wcmVzc2VkX3NpemUgLSBzdHJtLmF2YWlsX291dCkpOworICAg ICAgcmMgPSBpbmZsYXRlICgmc3RybSwgWl9GSU5JU0gpOworICAgICAgaWYg KHJjICE9IFpfU1RSRUFNX0VORCkKKyAgICAgICAgZXJyb3IgKF8oIkR3YXJm IEVycm9yOiB6bGliIGVycm9yIHVuY29tcHJlc3NpbmcgZnJvbSAnJXMnOiAl ZCIpLAorICAgICAgICAgICAgICAgYmZkX2dldF9maWxlbmFtZSAoYWJmZCks IHJjKTsKKyAgICAgIHJjID0gaW5mbGF0ZVJlc2V0ICgmc3RybSk7CisgICAg fQorICByYyA9IGluZmxhdGVFbmQgKCZzdHJtKTsKKyAgaWYgKHJjICE9IFpf T0sKKyAgICAgIHx8IHN0cm0uYXZhaWxfb3V0ICE9IDApCisgICAgZXJyb3Ig KF8oIkR3YXJmIEVycm9yOiBjb25jbHVkaW5nIERXQVJGIHVuY29tcHJlc3Np b24gaW4gJyVzJzogJWQiKSwKKyAgICAgICAgICAgYmZkX2dldF9maWxlbmFt ZSAoYWJmZCksIHJjKTsKKworICB4ZnJlZSAoY29tcHJlc3NlZF9idWZmZXIp OworICAqb3V0YnVmID0gdW5jb21wcmVzc2VkX2J1ZmZlcjsKKyAgKm91dHNp emUgPSB1bmNvbXByZXNzZWRfc2l6ZTsKKyNlbmRpZgogfQogCi0vKiBCdWls ZCBhIHBhcnRpYWwgc3ltYm9sIHRhYmxlLiAgKi8KKy8qIFJlYWQgdGhlIGNv bnRlbnRzIG9mIHRoZSBzZWN0aW9uIFNFQ1RQIGZyb20gb2JqZWN0IGZpbGUg c3BlY2lmaWVkIGJ5CisgICBPQkpGSUxFLCBzdG9yZSBpbmZvIGFib3V0IHRo ZSBzZWN0aW9uIGludG8gSU5GTy4KKyAgIElmIHRoZSBzZWN0aW9uIGlzIGNv bXByZXNzZWQsIHVuY29tcHJlc3MgaXQgYmVmb3JlIHJldHVybmluZy4gICov CiAKLXZvaWQKLWR3YXJmMl9idWlsZF9wc3ltdGFicyAoc3RydWN0IG9iamZp bGUgKm9iamZpbGUsIGludCBtYWlubGluZSkKK3N0YXRpYyB2b2lkCitkd2Fy ZjJfcmVhZF9zZWN0aW9uIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwgc3Ry dWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gKmluZm8pCiB7Ci0gIC8qIFdlIGRl ZmluaXRlbHkgbmVlZCB0aGUgLmRlYnVnX2luZm8gYW5kIC5kZWJ1Z19hYmJy ZXYgc2VjdGlvbnMgKi8KKyAgYmZkICphYmZkID0gb2JqZmlsZS0+b2JmZDsK KyAgYXNlY3Rpb24gKnNlY3RwID0gaW5mby0+YXNlY3Rpb247CisgIGdkYl9i eXRlICpidWYsICpyZXRidWY7CisgIHVuc2lnbmVkIGNoYXIgaGVhZGVyWzRd OwogCi0gIGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19idWZmZXIgPSBkd2Fy ZjJfcmVhZF9zZWN0aW9uIChvYmpmaWxlLCBkd2FyZl9pbmZvX3NlY3Rpb24p OwotICBkd2FyZjJfcGVyX29iamZpbGUtPmFiYnJldl9idWZmZXIgPSBkd2Fy ZjJfcmVhZF9zZWN0aW9uIChvYmpmaWxlLCBkd2FyZl9hYmJyZXZfc2VjdGlv bik7CisgIGluZm8tPmJ1ZmZlciA9IE5VTEw7CisgIGluZm8tPndhc19tbWFw cGVkID0gMDsKIAotICBpZiAoZHdhcmZfbGluZV9zZWN0aW9uKQotICAgIGR3 YXJmMl9wZXJfb2JqZmlsZS0+bGluZV9idWZmZXIgPSBkd2FyZjJfcmVhZF9z ZWN0aW9uIChvYmpmaWxlLCBkd2FyZl9saW5lX3NlY3Rpb24pOwotICBlbHNl Ci0gICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5saW5lX2J1ZmZlciA9IE5VTEw7 CisgIGlmIChpbmZvLT5hc2VjdGlvbiA9PSBOVUxMIHx8IGluZm8tPnNpemUg PT0gMCkKKyAgICByZXR1cm47CiAKLSAgaWYgKGR3YXJmX3N0cl9zZWN0aW9u KQotICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+c3RyX2J1ZmZlciA9IGR3YXJm Ml9yZWFkX3NlY3Rpb24gKG9iamZpbGUsIGR3YXJmX3N0cl9zZWN0aW9uKTsK LSAgZWxzZQotICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+c3RyX2J1ZmZlciA9 IE5VTEw7CisgIC8qIENoZWNrIGlmIHRoZSBmaWxlIGhhcyBhIDQtYnl0ZSBo ZWFkZXIgaW5kaWNhdGluZyBjb21wcmVzc2lvbi4gICovCisgIGlmIChpbmZv LT5zaXplID4gc2l6ZW9mIChoZWFkZXIpCisgICAgICAmJiBiZmRfc2VlayAo YWJmZCwgc2VjdHAtPmZpbGVwb3MsIFNFRUtfU0VUKSA9PSAwCisgICAgICAm JiBiZmRfYnJlYWQgKGhlYWRlciwgc2l6ZW9mIChoZWFkZXIpLCBhYmZkKSA9 PSBzaXplb2YgKGhlYWRlcikpCisgICAgeworICAgICAgLyogVXBvbiBkZWNv bXByZXNzaW9uLCB1cGRhdGUgdGhlIGJ1ZmZlciBhbmQgaXRzIHNpemUuICAq LworICAgICAgaWYgKHN0cm5jbXAgKGhlYWRlciwgIlpMSUIiLCBzaXplb2Yg KGhlYWRlcikpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICB6bGliX2Rl Y29tcHJlc3Nfc2VjdGlvbiAob2JqZmlsZSwgc2VjdHAsICZpbmZvLT5idWZm ZXIsCisJCQkJICAgJmluZm8tPnNpemUpOworICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorICAgIH0KIAotICBpZiAoZHdhcmZfbWFjaW5mb19zZWN0 aW9uKQotICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+bWFjaW5mb19idWZmZXIg PSBkd2FyZjJfcmVhZF9zZWN0aW9uIChvYmpmaWxlLAotCQkJCQkJZHdhcmZf bWFjaW5mb19zZWN0aW9uKTsKLSAgZWxzZQotICAgIGR3YXJmMl9wZXJfb2Jq ZmlsZS0+bWFjaW5mb19idWZmZXIgPSBOVUxMOworI2lmZGVmIEhBVkVfTU1B UAorICBpZiAocGFnZXNpemUgPT0gMCkKKyAgICBwYWdlc2l6ZSA9IGdldHBh Z2VzaXplICgpOwogCi0gIGlmIChkd2FyZl9yYW5nZXNfc2VjdGlvbikKLSAg ICBkd2FyZjJfcGVyX29iamZpbGUtPnJhbmdlc19idWZmZXIgPSBkd2FyZjJf cmVhZF9zZWN0aW9uIChvYmpmaWxlLCBkd2FyZl9yYW5nZXNfc2VjdGlvbik7 Ci0gIGVsc2UKLSAgICBkd2FyZjJfcGVyX29iamZpbGUtPnJhbmdlc19idWZm ZXIgPSBOVUxMOworICAvKiBPbmx5IHRyeSB0byBtbWFwIHNlY3Rpb25zIHdo aWNoIGFyZSBsYXJnZSBlbm91Z2g6IHdlIGRvbid0IHdhbnQgdG8KKyAgICAg d2FzdGUgc3BhY2UgZHVlIHRvIGZyYWdtZW50YXRpb24uICBBbHNvLCBvbmx5 IHRyeSBtbWFwIGZvciBzZWN0aW9ucworICAgICB3aXRob3V0IHJlbG9jYXRp b25zLiAgKi8KIAotICBpZiAoZHdhcmZfbG9jX3NlY3Rpb24pCi0gICAgZHdh cmYyX3Blcl9vYmpmaWxlLT5sb2NfYnVmZmVyID0gZHdhcmYyX3JlYWRfc2Vj dGlvbiAob2JqZmlsZSwgZHdhcmZfbG9jX3NlY3Rpb24pOwotICBlbHNlCi0g ICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5sb2NfYnVmZmVyID0gTlVMTDsKKyAg aWYgKGluZm8tPnNpemUgPiA0ICogcGFnZXNpemUgJiYgKHNlY3RwLT5mbGFn cyAmIFNFQ19SRUxPQykgPT0gMCkKKyAgICB7CisgICAgICBvZmZfdCBwZ19v ZmZzZXQgPSBzZWN0cC0+ZmlsZXBvcyAmIH4ocGFnZXNpemUgLSAxKTsKKyAg ICAgIHNpemVfdCBtYXBfbGVuZ3RoID0gaW5mby0+c2l6ZSArIHNlY3RwLT5m aWxlcG9zIC0gcGdfb2Zmc2V0OworICAgICAgY2FkZHJfdCByZXRidWYgPSBi ZmRfbW1hcCAoYWJmZCwgMCwgbWFwX2xlbmd0aCwgUFJPVF9SRUFELAorCQkJ CSBNQVBfUFJJVkFURSwgcGdfb2Zmc2V0KTsKKworICAgICAgaWYgKHJldGJ1 ZiAhPSBNQVBfRkFJTEVEKQorCXsKKwkgIGluZm8tPndhc19tbWFwcGVkID0g MTsKKwkgIGluZm8tPmJ1ZmZlciA9IHJldGJ1ZiArIChzZWN0cC0+ZmlsZXBv cyAmIChwYWdlc2l6ZSAtIDEpKSA7CisJICByZXR1cm47CisJfQorICAgIH0K KyNlbmRpZgorCisgIC8qIElmIHdlIGdldCBoZXJlLCB3ZSBhcmUgYSBub3Jt YWwsIG5vdC1jb21wcmVzc2VkIHNlY3Rpb24uICAqLworICBpbmZvLT5idWZm ZXIgPSBidWYKKyAgICA9IG9ic3RhY2tfYWxsb2MgKCZvYmpmaWxlLT5vYmpm aWxlX29ic3RhY2ssIGluZm8tPnNpemUpOworCisgIC8qIFdoZW4gZGVidWdn aW5nIC5vIGZpbGVzLCB3ZSBtYXkgbmVlZCB0byBhcHBseSByZWxvY2F0aW9u czsgc2VlCisgICAgIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGItcGF0 Y2hlcy8yMDAyLTA0L21zZzAwMTM2Lmh0bWwgLgorICAgICBXZSBuZXZlciBj b21wcmVzcyBzZWN0aW9ucyBpbiAubyBmaWxlcywgc28gd2Ugb25seSBuZWVk IHRvCisgICAgIHRyeSB0aGlzIHdoZW4gdGhlIHNlY3Rpb24gaXMgbm90IGNv bXByZXNzZWQuICAqLworICByZXRidWYgPSBzeW1maWxlX3JlbG9jYXRlX2Rl YnVnX3NlY3Rpb24gKGFiZmQsIHNlY3RwLCBidWYpOworICBpZiAocmV0YnVm ICE9IE5VTEwpCisgICAgeworICAgICAgaW5mby0+YnVmZmVyID0gcmV0YnVm OworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoYmZkX3NlZWsgKGFi ZmQsIHNlY3RwLT5maWxlcG9zLCBTRUVLX1NFVCkgIT0gMAorICAgICAgfHwg YmZkX2JyZWFkIChidWYsIGluZm8tPnNpemUsIGFiZmQpICE9IGluZm8tPnNp emUpCisgICAgZXJyb3IgKF8oIkR3YXJmIEVycm9yOiBDYW4ndCByZWFkIERX QVJGIGRhdGEgZnJvbSAnJXMnIiksCisJICAgYmZkX2dldF9maWxlbmFtZSAo YWJmZCkpOworfQorCisvKiBGaWxsIGluIFNFQ1RQLCBCVUZQIGFuZCBTSVpF UCB3aXRoIHNlY3Rpb24gaW5mbywgZ2l2ZW4gT0JKRklMRSBhbmQKKyAgIFNF Q1RJT05fTkFNRS4gKi8KKwordm9pZAorZHdhcmYyX2dldF9zZWN0aW9uX2lu Zm8gKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLCBjb25zdCBjaGFyICpzZWN0 aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXNlY3Rpb24g KipzZWN0cCwgZ2RiX2J5dGUgKipidWZwLAorICAgICAgICAgICAgICAgICAg ICAgICAgIGJmZF9zaXplX3R5cGUgKnNpemVwKQoreworICBzdHJ1Y3QgZHdh cmYyX3Blcl9vYmpmaWxlICpkYXRhCisgICAgPSBvYmpmaWxlX2RhdGEgKG9i amZpbGUsIGR3YXJmMl9vYmpmaWxlX2RhdGFfa2V5KTsKKyAgc3RydWN0IGR3 YXJmMl9zZWN0aW9uX2luZm8gKmluZm87CisgIGlmIChzZWN0aW9uX2lzX3Ag KHNlY3Rpb25fbmFtZSwgRUhfRlJBTUVfU0VDVElPTikpCisgICAgaW5mbyA9 ICZkYXRhLT5laF9mcmFtZTsKKyAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChz ZWN0aW9uX25hbWUsIEZSQU1FX1NFQ1RJT04pKQorICAgIGluZm8gPSAmZGF0 YS0+ZnJhbWU7CisgIGVsc2UKKyAgICBnZGJfYXNzZXJ0ICgwKTsKKworICBp ZiAoaW5mby0+YXNlY3Rpb24gIT0gTlVMTCAmJiBpbmZvLT5zaXplICE9IDAg JiYgaW5mby0+YnVmZmVyID09IE5VTEwpCisgICAgLyogV2UgaGF2ZW4ndCBy ZWFkIHRoaXMgc2VjdGlvbiBpbiB5ZXQuICBEbyBpdCBub3cuICAqLworICAg IGR3YXJmMl9yZWFkX3NlY3Rpb24gKG9iamZpbGUsIGluZm8pOworCisgICpz ZWN0cCA9IGluZm8tPmFzZWN0aW9uOworICAqYnVmcCA9IGluZm8tPmJ1ZmZl cjsKKyAgKnNpemVwID0gaW5mby0+c2l6ZTsKK30KKworLyogQnVpbGQgYSBw YXJ0aWFsIHN5bWJvbCB0YWJsZS4gICovCisKK3ZvaWQKK2R3YXJmMl9idWls ZF9wc3ltdGFicyAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGludCBtYWlu bGluZSkKK3sKKyAgZHdhcmYyX3JlYWRfc2VjdGlvbiAob2JqZmlsZSwgJmR3 YXJmMl9wZXJfb2JqZmlsZS0+aW5mbyk7CisgIGR3YXJmMl9yZWFkX3NlY3Rp b24gKG9iamZpbGUsICZkd2FyZjJfcGVyX29iamZpbGUtPmFiYnJldik7Cisg IGR3YXJmMl9yZWFkX3NlY3Rpb24gKG9iamZpbGUsICZkd2FyZjJfcGVyX29i amZpbGUtPmxpbmUpOworICBkd2FyZjJfcmVhZF9zZWN0aW9uIChvYmpmaWxl LCAmZHdhcmYyX3Blcl9vYmpmaWxlLT5zdHIpOworICBkd2FyZjJfcmVhZF9z ZWN0aW9uIChvYmpmaWxlLCAmZHdhcmYyX3Blcl9vYmpmaWxlLT5tYWNpbmZv KTsKKyAgZHdhcmYyX3JlYWRfc2VjdGlvbiAob2JqZmlsZSwgJmR3YXJmMl9w ZXJfb2JqZmlsZS0+cmFuZ2VzKTsKKyAgZHdhcmYyX3JlYWRfc2VjdGlvbiAo b2JqZmlsZSwgJmR3YXJmMl9wZXJfb2JqZmlsZS0+bG9jKTsKKyAgZHdhcmYy X3JlYWRfc2VjdGlvbiAob2JqZmlsZSwgJmR3YXJmMl9wZXJfb2JqZmlsZS0+ ZWhfZnJhbWUpOworICBkd2FyZjJfcmVhZF9zZWN0aW9uIChvYmpmaWxlLCAm ZHdhcmYyX3Blcl9vYmpmaWxlLT5mcmFtZSk7CiAKICAgaWYgKG1haW5saW5l CiAgICAgICB8fCAob2JqZmlsZS0+Z2xvYmFsX3BzeW1ib2xzLnNpemUgPT0g MApAQCAtMTMzNyw3ICsxNDI4LDcgQEAgZHdhcmYyX2J1aWxkX3BzeW10YWJz X2Vhc3kgKHN0cnVjdCBvYmpmaQogICBwdWJuYW1lc19idWZmZXIgPSBkd2Fy ZjJfcmVhZF9zZWN0aW9uIChvYmpmaWxlLAogCQkJCQkgZHdhcmZfcHVibmFt ZXNfc2VjdGlvbik7CiAgIHB1Ym5hbWVzX3B0ciA9IHB1Ym5hbWVzX2J1ZmZl cjsKLSAgd2hpbGUgKChwdWJuYW1lc19wdHIgLSBwdWJuYW1lc19idWZmZXIp IDwgZHdhcmYyX3Blcl9vYmpmaWxlLT5wdWJuYW1lc19zaXplKQorICB3aGls ZSAoKHB1Ym5hbWVzX3B0ciAtIHB1Ym5hbWVzX2J1ZmZlcikgPCBkd2FyZjJf cGVyX29iamZpbGUtPnB1Ym5hbWVzLnNpemUpCiAgICAgewogICAgICAgdW5z aWduZWQgaW50IGJ5dGVzX3JlYWQ7CiAKQEAgLTE0MTIsMTkgKzE1MDMsMTkg QEAgcGFydGlhbF9yZWFkX2NvbXBfdW5pdF9oZWFkIChzdHJ1Y3QgY29tcAog CSAgICIoaXMgJWQsIHNob3VsZCBiZSAlZCkgW2luIG1vZHVsZSAlc10iKSwg aGVhZGVyLT52ZXJzaW9uLAogCSAgIDIsIGJmZF9nZXRfZmlsZW5hbWUgKGFi ZmQpKTsKIAotICBpZiAoaGVhZGVyLT5hYmJyZXZfb2Zmc2V0ID49IGR3YXJm Ml9wZXJfb2JqZmlsZS0+YWJicmV2X3NpemUpCisgIGlmIChoZWFkZXItPmFi YnJldl9vZmZzZXQgPj0gZHdhcmYyX3Blcl9vYmpmaWxlLT5hYmJyZXYuc2l6 ZSkKICAgICBlcnJvciAoXygiRHdhcmYgRXJyb3I6IGJhZCBvZmZzZXQgKDB4 JWx4KSBpbiBjb21waWxhdGlvbiB1bml0IGhlYWRlciAiCiAJICAgIihvZmZz ZXQgMHglbHggKyA2KSBbaW4gbW9kdWxlICVzXSIpLAogCSAgIChsb25nKSBo ZWFkZXItPmFiYnJldl9vZmZzZXQsCi0JICAgKGxvbmcpIChiZWdfb2ZfY29t cF91bml0IC0gZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvX2J1ZmZlciksCisJ ICAgKGxvbmcpIChiZWdfb2ZfY29tcF91bml0IC0gZHdhcmYyX3Blcl9vYmpm aWxlLT5pbmZvLmJ1ZmZlciksCiAJICAgYmZkX2dldF9maWxlbmFtZSAoYWJm ZCkpOwogCiAgIGlmIChiZWdfb2ZfY29tcF91bml0ICsgaGVhZGVyLT5sZW5n dGggKyBoZWFkZXItPmluaXRpYWxfbGVuZ3RoX3NpemUKLSAgICAgID4gZHdh cmYyX3Blcl9vYmpmaWxlLT5pbmZvX2J1ZmZlciArIGR3YXJmMl9wZXJfb2Jq ZmlsZS0+aW5mb19zaXplKQorICAgICAgPiBkd2FyZjJfcGVyX29iamZpbGUt PmluZm8uYnVmZmVyICsgZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvLnNpemUp CiAgICAgZXJyb3IgKF8oIkR3YXJmIEVycm9yOiBiYWQgbGVuZ3RoICgweCVs eCkgaW4gY29tcGlsYXRpb24gdW5pdCBoZWFkZXIgIgogCSAgICIob2Zmc2V0 IDB4JWx4ICsgMCkgW2luIG1vZHVsZSAlc10iKSwKIAkgICAobG9uZykgaGVh ZGVyLT5sZW5ndGgsCi0JICAgKGxvbmcpIChiZWdfb2ZfY29tcF91bml0IC0g ZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvX2J1ZmZlciksCisJICAgKGxvbmcp IChiZWdfb2ZfY29tcF91bml0IC0gZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZv LmJ1ZmZlciksCiAJICAgYmZkX2dldF9maWxlbmFtZSAoYWJmZCkpOwogCiAg IHJldHVybiBpbmZvX3B0cjsKQEAgLTE1MDYsNyArMTU5Nyw3IEBAIGR3YXJm Ml9idWlsZF9wc3ltdGFic19oYXJkIChzdHJ1Y3Qgb2JqZmkKICAgc3RydWN0 IGNsZWFudXAgKmJhY2tfdG87CiAgIENPUkVfQUREUiBiYXNlYWRkcjsKIAot ICBpbmZvX3B0ciA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19idWZmZXI7 CisgIGluZm9fcHRyID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvLmJ1ZmZl cjsKIAogICAvKiBBbnkgY2FjaGVkIGNvbXBpbGF0aW9uIHVuaXRzIHdpbGwg YmUgbGlua2VkIGJ5IHRoZSBwZXItb2JqZmlsZQogICAgICByZWFkX2luX2No YWluLiAgTWFrZSBzdXJlIHRvIGZyZWUgdGhlbSB3aGVuIHdlJ3JlIGRvbmUu ICAqLwpAQCAtMTUzMCw4ICsxNjIxLDggQEAgZHdhcmYyX2J1aWxkX3BzeW10 YWJzX2hhcmQgKHN0cnVjdCBvYmpmaQogCiAgICAgIEZvciB0aGlzIGxvb3Ag Y29uZGl0aW9uLCBzaW1wbHkgY2hlY2tpbmcgd2hldGhlciB0aGVyZSdzIGFu eSBkYXRhCiAgICAgIGxlZnQgYXQgYWxsIHNob3VsZCBiZSBzdWZmaWNpZW50 LiAgKi8KLSAgd2hpbGUgKGluZm9fcHRyIDwgKGR3YXJmMl9wZXJfb2JqZmls ZS0+aW5mb19idWZmZXIKLQkJICAgICArIGR3YXJmMl9wZXJfb2JqZmlsZS0+ aW5mb19zaXplKSkKKyAgd2hpbGUgKGluZm9fcHRyIDwgKGR3YXJmMl9wZXJf b2JqZmlsZS0+aW5mby5idWZmZXIKKwkJICAgICArIGR3YXJmMl9wZXJfb2Jq ZmlsZS0+aW5mby5zaXplKSkKICAgICB7CiAgICAgICBzdHJ1Y3QgY2xlYW51 cCAqYmFja190b19pbm5lcjsKICAgICAgIHN0cnVjdCBkd2FyZjJfY3UgY3U7 CkBAIC0xNTUxLDcgKzE2NDIsNyBAQCBkd2FyZjJfYnVpbGRfcHN5bXRhYnNf aGFyZCAoc3RydWN0IG9iamZpCiAgICAgICBpbmZvX3B0ciA9IHBhcnRpYWxf cmVhZF9jb21wX3VuaXRfaGVhZCAoJmN1LmhlYWRlciwgaW5mb19wdHIsIGFi ZmQpOwogCiAgICAgICAvKiBDb21wbGV0ZSB0aGUgY3VfaGVhZGVyICovCi0g ICAgICBjdS5oZWFkZXIub2Zmc2V0ID0gYmVnX29mX2NvbXBfdW5pdCAtIGR3 YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19idWZmZXI7CisgICAgICBjdS5oZWFk ZXIub2Zmc2V0ID0gYmVnX29mX2NvbXBfdW5pdCAtIGR3YXJmMl9wZXJfb2Jq ZmlsZS0+aW5mby5idWZmZXI7CiAgICAgICBjdS5oZWFkZXIuZmlyc3RfZGll X29mZnNldCA9IGluZm9fcHRyIC0gYmVnX29mX2NvbXBfdW5pdDsKIAogICAg ICAgY3UubGlzdF9pbl9zY29wZSA9ICZmaWxlX3N5bWJvbHM7CkBAIC0xNzA4 LDcgKzE3OTksNyBAQCBsb2FkX2NvbXBfdW5pdCAoc3RydWN0IGR3YXJmMl9w ZXJfY3VfZGF0CiAgIHVuc2lnbmVkIGludCBieXRlc19yZWFkOwogICBzdHJ1 Y3QgY2xlYW51cCAqYmFja190bzsKIAotICBpbmZvX3B0ciA9IGR3YXJmMl9w ZXJfb2JqZmlsZS0+aW5mb19idWZmZXIgKyB0aGlzX2N1LT5vZmZzZXQ7Cisg IGluZm9fcHRyID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvLmJ1ZmZlciAr IHRoaXNfY3UtPm9mZnNldDsKICAgYmVnX29mX2NvbXBfdW5pdCA9IGluZm9f cHRyOwogCiAgIGN1ID0geG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZHdhcmYy X2N1KSk7CkBAIC0xNzIwLDcgKzE4MTEsNyBAQCBsb2FkX2NvbXBfdW5pdCAo c3RydWN0IGR3YXJmMl9wZXJfY3VfZGF0CiAgIGluZm9fcHRyID0gcGFydGlh bF9yZWFkX2NvbXBfdW5pdF9oZWFkICgmY3UtPmhlYWRlciwgaW5mb19wdHIs IGFiZmQpOwogCiAgIC8qIENvbXBsZXRlIHRoZSBjdV9oZWFkZXIuICAqLwot ICBjdS0+aGVhZGVyLm9mZnNldCA9IGJlZ19vZl9jb21wX3VuaXQgLSBkd2Fy ZjJfcGVyX29iamZpbGUtPmluZm9fYnVmZmVyOworICBjdS0+aGVhZGVyLm9m ZnNldCA9IGJlZ19vZl9jb21wX3VuaXQgLSBkd2FyZjJfcGVyX29iamZpbGUt PmluZm8uYnVmZmVyOwogICBjdS0+aGVhZGVyLmZpcnN0X2RpZV9vZmZzZXQg PSBpbmZvX3B0ciAtIGJlZ19vZl9jb21wX3VuaXQ7CiAKICAgLyogUmVhZCB0 aGUgYWJicmV2cyBmb3IgdGhpcyBjb21waWxhdGlvbiB1bml0IGludG8gYSB0 YWJsZS4gICovCkBAIC0xNzYwLDIxICsxODUxLDIxIEBAIGNyZWF0ZV9hbGxf Y29tcF91bml0cyAoc3RydWN0IG9iamZpbGUgKm8KICAgaW50IG5fYWxsb2Nh dGVkOwogICBpbnQgbl9jb21wX3VuaXRzOwogICBzdHJ1Y3QgZHdhcmYyX3Bl cl9jdV9kYXRhICoqYWxsX2NvbXBfdW5pdHM7Ci0gIGdkYl9ieXRlICppbmZv X3B0ciA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19idWZmZXI7CisgIGdk Yl9ieXRlICppbmZvX3B0ciA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mby5i dWZmZXI7CiAKICAgbl9jb21wX3VuaXRzID0gMDsKICAgbl9hbGxvY2F0ZWQg PSAxMDsKICAgYWxsX2NvbXBfdW5pdHMgPSB4bWFsbG9jIChuX2FsbG9jYXRl ZAogCQkJICAgICogc2l6ZW9mIChzdHJ1Y3QgZHdhcmYyX3Blcl9jdV9kYXRh ICopKTsKICAgCi0gIHdoaWxlIChpbmZvX3B0ciA8IGR3YXJmMl9wZXJfb2Jq ZmlsZS0+aW5mb19idWZmZXIgKyBkd2FyZjJfcGVyX29iamZpbGUtPmluZm9f c2l6ZSkKKyAgd2hpbGUgKGluZm9fcHRyIDwgZHdhcmYyX3Blcl9vYmpmaWxl LT5pbmZvLmJ1ZmZlciArIGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mby5zaXpl KQogICAgIHsKICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgsIGluaXRpYWxf bGVuZ3RoX3NpemU7CiAgICAgICBnZGJfYnl0ZSAqYmVnX29mX2NvbXBfdW5p dDsKICAgICAgIHN0cnVjdCBkd2FyZjJfcGVyX2N1X2RhdGEgKnRoaXNfY3U7 CiAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCi0gICAgICBvZmZzZXQg PSBpbmZvX3B0ciAtIGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19idWZmZXI7 CisgICAgICBvZmZzZXQgPSBpbmZvX3B0ciAtIGR3YXJmMl9wZXJfb2JqZmls ZS0+aW5mby5idWZmZXI7CiAKICAgICAgIC8qIFJlYWQganVzdCBlbm91Z2gg aW5mb3JtYXRpb24gdG8gZmluZCBvdXQgd2hlcmUgdGhlIG5leHQKIAkgY29t cGlsYXRpb24gdW5pdCBpcy4gICovCkBAIC0yNDIwLDcgKzI1MTEsNyBAQCBz a2lwX29uZV9kaWUgKGdkYl9ieXRlICppbmZvX3B0ciwgc3RydWN0CiAJICBp ZiAoYXR0ci5mb3JtID09IERXX0ZPUk1fcmVmX2FkZHIpCiAJICAgIGNvbXBs YWludCAoJnN5bWZpbGVfY29tcGxhaW50cywgXygiaWdub3JpbmcgYWJzb2x1 dGUgRFdfQVRfc2libGluZyIpKTsKIAkgIGVsc2UKLQkgICAgcmV0dXJuIGR3 YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19idWZmZXIKKwkgICAgcmV0dXJuIGR3 YXJmMl9wZXJfb2JqZmlsZS0+aW5mby5idWZmZXIKIAkgICAgICArIGR3YXJm Ml9nZXRfcmVmX2RpZV9vZmZzZXQgKCZhdHRyKTsKIAl9CiAKQEAgLTI3MDYs NyArMjc5Nyw3IEBAIGxvYWRfZnVsbF9jb21wX3VuaXQgKHN0cnVjdCBkd2Fy ZjJfcGVyX2MKICAgLyogU2V0IGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBw YXJ0aWFsIHN5bWJvbCB0YWJsZSBpbmZvLiAgKi8KICAgb2Zmc2V0ID0gcGVy X2N1LT5vZmZzZXQ7CiAKLSAgaW5mb19wdHIgPSBkd2FyZjJfcGVyX29iamZp bGUtPmluZm9fYnVmZmVyICsgb2Zmc2V0OworICBpbmZvX3B0ciA9IGR3YXJm Ml9wZXJfb2JqZmlsZS0+aW5mby5idWZmZXIgKyBvZmZzZXQ7CiAKICAgY3Ug PSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBkd2FyZjJfY3UpKTsKICAgbWVt c2V0IChjdSwgMCwgc2l6ZW9mIChzdHJ1Y3QgZHdhcmYyX2N1KSk7CkBAIC0z MzcxLDE0ICszNDYyLDE0IEBAIGR3YXJmMl9yYW5nZXNfcmVhZCAodW5zaWdu ZWQgb2Zmc2V0LCBDT1IKICAgZm91bmRfYmFzZSA9IGN1LT5iYXNlX2tub3du OwogICBiYXNlID0gY3UtPmJhc2VfYWRkcmVzczsKIAotICBpZiAob2Zmc2V0 ID49IGR3YXJmMl9wZXJfb2JqZmlsZS0+cmFuZ2VzX3NpemUpCisgIGlmIChv ZmZzZXQgPj0gZHdhcmYyX3Blcl9vYmpmaWxlLT5yYW5nZXMuc2l6ZSkKICAg ICB7CiAgICAgICBjb21wbGFpbnQgKCZzeW1maWxlX2NvbXBsYWludHMsCiAJ CSBfKCJPZmZzZXQgJWQgb3V0IG9mIGJvdW5kcyBmb3IgRFdfQVRfcmFuZ2Vz IGF0dHJpYnV0ZSIpLAogCQkgb2Zmc2V0KTsKICAgICAgIHJldHVybiAwOwog ICAgIH0KLSAgYnVmZmVyID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5yYW5nZXNf YnVmZmVyICsgb2Zmc2V0OworICBidWZmZXIgPSBkd2FyZjJfcGVyX29iamZp bGUtPnJhbmdlcy5idWZmZXIgKyBvZmZzZXQ7CiAKICAgLyogUmVhZCBpbiB0 aGUgbGFyZ2VzdCBwb3NzaWJsZSBhZGRyZXNzLiAgKi8KICAgbWFya2VyID0g cmVhZF9hZGRyZXNzIChvYmZkLCBidWZmZXIsIGN1LCAmZHVtbXkpOwpAQCAt MzY1Myw3ICszNzQ0LDcgQEAgZHdhcmYyX3JlY29yZF9ibG9ja19yYW5nZXMg KHN0cnVjdCBkaWVfaQogICAgICAgLyogVGhlIHZhbHVlIG9mIHRoZSBEV19B VF9yYW5nZXMgYXR0cmlidXRlIGlzIHRoZSBvZmZzZXQgb2YgdGhlCiAgICAg ICAgICBhZGRyZXNzIHJhbmdlIGxpc3QgaW4gdGhlIC5kZWJ1Z19yYW5nZXMg c2VjdGlvbi4gICovCiAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCA9IERX X1VOU05EIChhdHRyKTsKLSAgICAgIGdkYl9ieXRlICpidWZmZXIgPSBkd2Fy ZjJfcGVyX29iamZpbGUtPnJhbmdlc19idWZmZXIgKyBvZmZzZXQ7CisgICAg ICBnZGJfYnl0ZSAqYnVmZmVyID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5yYW5n ZXMuYnVmZmVyICsgb2Zmc2V0OwogCiAgICAgICAvKiBGb3Igc29tZSB0YXJn ZXQgYXJjaGl0ZWN0dXJlcywgYnV0IG5vdCBvdGhlcnMsIHRoZQogICAgICAg ICAgcmVhZF9hZGRyZXNzIGZ1bmN0aW9uIHNpZ24tZXh0ZW5kcyB0aGUgYWRk cmVzc2VzIGl0IHJldHVybnMuCkBAIC0zNjcyLDcgKzM3NjMsNyBAQCBkd2Fy ZjJfcmVjb3JkX2Jsb2NrX3JhbmdlcyAoc3RydWN0IGRpZV9pCiAgICAgICBD T1JFX0FERFIgYmFzZSA9IGN1LT5iYXNlX2FkZHJlc3M7CiAgICAgICBpbnQg YmFzZV9rbm93biA9IGN1LT5iYXNlX2tub3duOwogCi0gICAgICBpZiAob2Zm c2V0ID49IGR3YXJmMl9wZXJfb2JqZmlsZS0+cmFuZ2VzX3NpemUpCisgICAg ICBpZiAob2Zmc2V0ID49IGR3YXJmMl9wZXJfb2JqZmlsZS0+cmFuZ2VzLnNp emUpCiAgICAgICAgIHsKICAgICAgICAgICBjb21wbGFpbnQgKCZzeW1maWxl X2NvbXBsYWludHMsCiAgICAgICAgICAgICAgICAgICAgICBfKCJPZmZzZXQg JWx1IG91dCBvZiBib3VuZHMgZm9yIERXX0FUX3JhbmdlcyBhdHRyaWJ1dGUi KSwKQEAgLTU1MTAsMTMxICs1NjAxLDYgQEAgcmVhZF9kaWVfYW5kX3NpYmxp bmdzIChnZGJfYnl0ZSAqaW5mb19wdAogICAgIH0KIH0KIAotLyogRGVjb21w cmVzcyBhIHNlY3Rpb24gdGhhdCB3YXMgY29tcHJlc3NlZCB1c2luZyB6bGli LiAgU3RvcmUgdGhlCi0gICBkZWNvbXByZXNzZWQgYnVmZmVyLCBhbmQgaXRz IHNpemUsIGluIE9VVEJVRiBhbmQgT1VUU0laRS4gICovCi0KLXN0YXRpYyB2 b2lkCi16bGliX2RlY29tcHJlc3Nfc2VjdGlvbiAoc3RydWN0IG9iamZpbGUg Km9iamZpbGUsIGFzZWN0aW9uICpzZWN0cCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICBnZGJfYnl0ZSAqKm91dGJ1ZiwgYmZkX3NpemVfdHlwZSAqb3V0 c2l6ZSkKLXsKLSAgYmZkICphYmZkID0gb2JqZmlsZS0+b2JmZDsKLSNpZm5k ZWYgSEFWRV9aTElCX0gKLSAgZXJyb3IgKF8oIlN1cHBvcnQgZm9yIHpsaWIt Y29tcHJlc3NlZCBEV0FSRiBkYXRhIChmcm9tICclcycpICIKLSAgICAgICAg ICAgImlzIGRpc2FibGVkIGluIHRoaXMgY29weSBvZiBHREIiKSwKLSAgICAg ICAgIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQpKTsKLSNlbHNlCi0gIGJmZF9z aXplX3R5cGUgY29tcHJlc3NlZF9zaXplID0gYmZkX2dldF9zZWN0aW9uX3Np emUgKHNlY3RwKTsKLSAgZ2RiX2J5dGUgKmNvbXByZXNzZWRfYnVmZmVyID0g eG1hbGxvYyAoY29tcHJlc3NlZF9zaXplKTsKLSAgYmZkX3NpemVfdHlwZSB1 bmNvbXByZXNzZWRfc2l6ZTsKLSAgZ2RiX2J5dGUgKnVuY29tcHJlc3NlZF9i dWZmZXI7Ci0gIHpfc3RyZWFtIHN0cm07Ci0gIGludCByYzsKLSAgaW50IGhl YWRlcl9zaXplID0gMTI7Ci0KLSAgaWYgKGJmZF9zZWVrIChhYmZkLCBzZWN0 cC0+ZmlsZXBvcywgU0VFS19TRVQpICE9IDAKLSAgICAgIHx8IGJmZF9icmVh ZCAoY29tcHJlc3NlZF9idWZmZXIsIGNvbXByZXNzZWRfc2l6ZSwgYWJmZCkg IT0gY29tcHJlc3NlZF9zaXplKQotICAgIGVycm9yIChfKCJEd2FyZiBFcnJv cjogQ2FuJ3QgcmVhZCBEV0FSRiBkYXRhIGZyb20gJyVzJyIpLAotICAgICAg ICAgICBiZmRfZ2V0X2ZpbGVuYW1lIChhYmZkKSk7Ci0KLSAgLyogUmVhZCB0 aGUgemxpYiBoZWFkZXIuICBJbiB0aGlzIGNhc2UsIGl0IHNob3VsZCBiZSAi WkxJQiIgZm9sbG93ZWQKLSAgICAgYnkgdGhlIHVuY29tcHJlc3NlZCBzZWN0 aW9uIHNpemUsIDggYnl0ZXMgaW4gYmlnLWVuZGlhbiBvcmRlci4gICovCi0g IGlmIChjb21wcmVzc2VkX3NpemUgPCBoZWFkZXJfc2l6ZQotICAgICAgfHwg c3RybmNtcCAoY29tcHJlc3NlZF9idWZmZXIsICJaTElCIiwgNCkgIT0gMCkK LSAgICBlcnJvciAoXygiRHdhcmYgRXJyb3I6IENvcnJ1cHQgRFdBUkYgWkxJ QiBoZWFkZXIgZnJvbSAnJXMnIiksCi0gICAgICAgICAgIGJmZF9nZXRfZmls ZW5hbWUgKGFiZmQpKTsKLSAgdW5jb21wcmVzc2VkX3NpemUgPSBjb21wcmVz c2VkX2J1ZmZlcls0XTsgdW5jb21wcmVzc2VkX3NpemUgPDw9IDg7Ci0gIHVu Y29tcHJlc3NlZF9zaXplICs9IGNvbXByZXNzZWRfYnVmZmVyWzVdOyB1bmNv bXByZXNzZWRfc2l6ZSA8PD0gODsKLSAgdW5jb21wcmVzc2VkX3NpemUgKz0g Y29tcHJlc3NlZF9idWZmZXJbNl07IHVuY29tcHJlc3NlZF9zaXplIDw8PSA4 OwotICB1bmNvbXByZXNzZWRfc2l6ZSArPSBjb21wcmVzc2VkX2J1ZmZlcls3 XTsgdW5jb21wcmVzc2VkX3NpemUgPDw9IDg7Ci0gIHVuY29tcHJlc3NlZF9z aXplICs9IGNvbXByZXNzZWRfYnVmZmVyWzhdOyB1bmNvbXByZXNzZWRfc2l6 ZSA8PD0gODsKLSAgdW5jb21wcmVzc2VkX3NpemUgKz0gY29tcHJlc3NlZF9i dWZmZXJbOV07IHVuY29tcHJlc3NlZF9zaXplIDw8PSA4OwotICB1bmNvbXBy ZXNzZWRfc2l6ZSArPSBjb21wcmVzc2VkX2J1ZmZlclsxMF07IHVuY29tcHJl c3NlZF9zaXplIDw8PSA4OwotICB1bmNvbXByZXNzZWRfc2l6ZSArPSBjb21w cmVzc2VkX2J1ZmZlclsxMV07Ci0KLSAgLyogSXQgaXMgcG9zc2libGUgdGhl IHNlY3Rpb24gY29uc2lzdHMgb2Ygc2V2ZXJhbCBjb21wcmVzc2VkCi0gICAg IGJ1ZmZlcnMgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLCBzbyB3ZSB1bmNvbXBy ZXNzIGluIGEgbG9vcC4gICovCi0gIHN0cm0uemFsbG9jID0gTlVMTDsKLSAg c3RybS56ZnJlZSA9IE5VTEw7Ci0gIHN0cm0ub3BhcXVlID0gTlVMTDsKLSAg c3RybS5hdmFpbF9pbiA9IGNvbXByZXNzZWRfc2l6ZSAtIGhlYWRlcl9zaXpl OwotICBzdHJtLm5leHRfaW4gPSAoQnl0ZWYqKSBjb21wcmVzc2VkX2J1ZmZl ciArIGhlYWRlcl9zaXplOwotICBzdHJtLmF2YWlsX291dCA9IHVuY29tcHJl c3NlZF9zaXplOwotICB1bmNvbXByZXNzZWRfYnVmZmVyID0gb2JzdGFja19h bGxvYyAoJm9iamZpbGUtPm9iamZpbGVfb2JzdGFjaywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZF9zaXpl KTsKLSAgcmMgPSBpbmZsYXRlSW5pdCAoJnN0cm0pOwotICB3aGlsZSAoc3Ry bS5hdmFpbF9pbiA+IDApCi0gICAgewotICAgICAgaWYgKHJjICE9IFpfT0sp Ci0gICAgICAgIGVycm9yIChfKCJEd2FyZiBFcnJvcjogc2V0dGluZyB1cCBE V0FSRiB1bmNvbXByZXNzaW9uIGluICclcyc6ICVkIiksCi0gICAgICAgICAg ICAgICBiZmRfZ2V0X2ZpbGVuYW1lIChhYmZkKSwgcmMpOwotICAgICAgc3Ry bS5uZXh0X291dCA9ICgoQnl0ZWYqKSB1bmNvbXByZXNzZWRfYnVmZmVyCi0g ICAgICAgICAgICAgICAgICAgICAgICsgKHVuY29tcHJlc3NlZF9zaXplIC0g c3RybS5hdmFpbF9vdXQpKTsKLSAgICAgIHJjID0gaW5mbGF0ZSAoJnN0cm0s IFpfRklOSVNIKTsKLSAgICAgIGlmIChyYyAhPSBaX1NUUkVBTV9FTkQpCi0g ICAgICAgIGVycm9yIChfKCJEd2FyZiBFcnJvcjogemxpYiBlcnJvciB1bmNv bXByZXNzaW5nIGZyb20gJyVzJzogJWQiKSwKLSAgICAgICAgICAgICAgIGJm ZF9nZXRfZmlsZW5hbWUgKGFiZmQpLCByYyk7Ci0gICAgICByYyA9IGluZmxh dGVSZXNldCAoJnN0cm0pOwotICAgIH0KLSAgcmMgPSBpbmZsYXRlRW5kICgm c3RybSk7Ci0gIGlmIChyYyAhPSBaX09LCi0gICAgICB8fCBzdHJtLmF2YWls X291dCAhPSAwKQotICAgIGVycm9yIChfKCJEd2FyZiBFcnJvcjogY29uY2x1 ZGluZyBEV0FSRiB1bmNvbXByZXNzaW9uIGluICclcyc6ICVkIiksCi0gICAg ICAgICAgIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQpLCByYyk7Ci0KLSAgeGZy ZWUgKGNvbXByZXNzZWRfYnVmZmVyKTsKLSAgKm91dGJ1ZiA9IHVuY29tcHJl c3NlZF9idWZmZXI7Ci0gICpvdXRzaXplID0gdW5jb21wcmVzc2VkX3NpemU7 Ci0jZW5kaWYKLX0KLQotCi0vKiBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUg c2VjdGlvbiBhdCBPRkZTRVQgYW5kIG9mIHNpemUgU0laRSBmcm9tIHRoZQot ICAgb2JqZWN0IGZpbGUgc3BlY2lmaWVkIGJ5IE9CSkZJTEUgaW50byB0aGUg b2JqZmlsZV9vYnN0YWNrIGFuZCByZXR1cm4gaXQuCi0gICBJZiB0aGUgc2Vj dGlvbiBpcyBjb21wcmVzc2VkLCB1bmNvbXByZXNzIGl0IGJlZm9yZSByZXR1 cm5pbmcuICAqLwotCi1nZGJfYnl0ZSAqCi1kd2FyZjJfcmVhZF9zZWN0aW9u IChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwgYXNlY3Rpb24gKnNlY3RwKQot ewotICBiZmQgKmFiZmQgPSBvYmpmaWxlLT5vYmZkOwotICBnZGJfYnl0ZSAq YnVmLCAqcmV0YnVmOwotICBiZmRfc2l6ZV90eXBlIHNpemUgPSBiZmRfZ2V0 X3NlY3Rpb25fc2l6ZSAoc2VjdHApOwotICB1bnNpZ25lZCBjaGFyIGhlYWRl cls0XTsKLQotICBpZiAoc2l6ZSA9PSAwKQotICAgIHJldHVybiBOVUxMOwot Ci0gIC8qIENoZWNrIGlmIHRoZSBmaWxlIGhhcyBhIDQtYnl0ZSBoZWFkZXIg aW5kaWNhdGluZyBjb21wcmVzc2lvbi4gICovCi0gIGlmIChzaXplID4gc2l6 ZW9mIChoZWFkZXIpCi0gICAgICAmJiBiZmRfc2VlayAoYWJmZCwgc2VjdHAt PmZpbGVwb3MsIFNFRUtfU0VUKSA9PSAwCi0gICAgICAmJiBiZmRfYnJlYWQg KGhlYWRlciwgc2l6ZW9mIChoZWFkZXIpLCBhYmZkKSA9PSBzaXplb2YgKGhl YWRlcikpCi0gICAgewotICAgICAgLyogVXBvbiBkZWNvbXByZXNzaW9uLCB1 cGRhdGUgdGhlIGJ1ZmZlciBhbmQgaXRzIHNpemUuICAqLwotICAgICAgaWYg KHN0cm5jbXAgKGhlYWRlciwgIlpMSUIiLCBzaXplb2YgKGhlYWRlcikpID09 IDApCi0gICAgICAgIHsKLSAgICAgICAgICB6bGliX2RlY29tcHJlc3Nfc2Vj dGlvbiAob2JqZmlsZSwgc2VjdHAsICZidWYsICZzaXplKTsKLSAgICAgICAg ICBkd2FyZjJfcmVzaXplX3NlY3Rpb24gKHNlY3RwLCBzaXplKTsKLSAgICAg ICAgICByZXR1cm4gYnVmOwotICAgICAgICB9Ci0gICAgfQotCi0gIC8qIElm IHdlIGdldCBoZXJlLCB3ZSBhcmUgYSBub3JtYWwsIG5vdC1jb21wcmVzc2Vk IHNlY3Rpb24uICAqLwotICBidWYgPSBvYnN0YWNrX2FsbG9jICgmb2JqZmls ZS0+b2JqZmlsZV9vYnN0YWNrLCBzaXplKTsKLSAgLyogV2hlbiBkZWJ1Z2dp bmcgLm8gZmlsZXMsIHdlIG1heSBuZWVkIHRvIGFwcGx5IHJlbG9jYXRpb25z OyBzZWUKLSAgICAgaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2dkYi1wYXRj aGVzLzIwMDItMDQvbXNnMDAxMzYuaHRtbCAuCi0gICAgIFdlIG5ldmVyIGNv bXByZXNzIHNlY3Rpb25zIGluIC5vIGZpbGVzLCBzbyB3ZSBvbmx5IG5lZWQg dG8KLSAgICAgdHJ5IHRoaXMgd2hlbiB0aGUgc2VjdGlvbiBpcyBub3QgY29t cHJlc3NlZC4gICovCi0gIHJldGJ1ZiA9IHN5bWZpbGVfcmVsb2NhdGVfZGVi dWdfc2VjdGlvbiAoYWJmZCwgc2VjdHAsIGJ1Zik7Ci0gIGlmIChyZXRidWYg IT0gTlVMTCkKLSAgICByZXR1cm4gcmV0YnVmOwotCi0gIGlmIChiZmRfc2Vl ayAoYWJmZCwgc2VjdHAtPmZpbGVwb3MsIFNFRUtfU0VUKSAhPSAwCi0gICAg ICB8fCBiZmRfYnJlYWQgKGJ1Ziwgc2l6ZSwgYWJmZCkgIT0gc2l6ZSkKLSAg ICBlcnJvciAoXygiRHdhcmYgRXJyb3I6IENhbid0IHJlYWQgRFdBUkYgZGF0 YSBmcm9tICclcyciKSwKLQkgICBiZmRfZ2V0X2ZpbGVuYW1lIChhYmZkKSk7 Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQogLyogSW4gRFdBUkYgdmVyc2lvbiAy LCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlv biBpcwogICAgc3RvcmVkIGluIGEgc2VwYXJhdGUgLmRlYnVnX2FiYnJldiBz ZWN0aW9uLiAgQmVmb3JlIHdlIHJlYWQgYW55CiAgICBkaWVzIGZyb20gYSBz ZWN0aW9uIHdlIHJlYWQgaW4gYWxsIGFiYnJldmlhdGlvbnMgYW5kIGluc3Rh bGwgdGhlbQpAQCAtNTY2MCw3ICs1NjI2LDcgQEAgZHdhcmYyX3JlYWRfYWJi cmV2cyAoYmZkICphYmZkLCBzdHJ1Y3QgZAogICBtZW1zZXQgKGN1LT5kd2Fy ZjJfYWJicmV2cywgMCwKICAgICAgICAgICBBQkJSRVZfSEFTSF9TSVpFICog c2l6ZW9mIChzdHJ1Y3QgYWJicmV2X2luZm8gKikpOwogCi0gIGFiYnJldl9w dHIgPSBkd2FyZjJfcGVyX29iamZpbGUtPmFiYnJldl9idWZmZXIgKyBjdV9o ZWFkZXItPmFiYnJldl9vZmZzZXQ7CisgIGFiYnJldl9wdHIgPSBkd2FyZjJf cGVyX29iamZpbGUtPmFiYnJldi5idWZmZXIgKyBjdV9oZWFkZXItPmFiYnJl dl9vZmZzZXQ7CiAgIGFiYnJldl9udW1iZXIgPSByZWFkX3Vuc2lnbmVkX2xl YjEyOCAoYWJmZCwgYWJicmV2X3B0ciwgJmJ5dGVzX3JlYWQpOwogICBhYmJy ZXZfcHRyICs9IGJ5dGVzX3JlYWQ7CiAKQEAgLTU3MzIsOCArNTY5OCw4IEBA IGR3YXJmMl9yZWFkX2FiYnJldnMgKGJmZCAqYWJmZCwgc3RydWN0IGQKICAg ICAgICAgIGFscmVhZHkgcmVhZCAod2hpY2ggbWVhbnMgd2UgYXJlIGFib3V0 IHRvIHJlYWQgdGhlIGFiYnJldmlhdGlvbnMKICAgICAgICAgIGZvciB0aGUg bmV4dCBjb21waWxlIHVuaXQpIG9yIGlmIHRoZSBlbmQgb2YgdGhlIGFiYnJl dmlhdGlvbgogICAgICAgICAgdGFibGUgaXMgcmVhY2hlZC4gICovCi0gICAg ICBpZiAoKHVuc2lnbmVkIGludCkgKGFiYnJldl9wdHIgLSBkd2FyZjJfcGVy X29iamZpbGUtPmFiYnJldl9idWZmZXIpCi0JICA+PSBkd2FyZjJfcGVyX29i amZpbGUtPmFiYnJldl9zaXplKQorICAgICAgaWYgKCh1bnNpZ25lZCBpbnQp IChhYmJyZXZfcHRyIC0gZHdhcmYyX3Blcl9vYmpmaWxlLT5hYmJyZXYuYnVm ZmVyKQorCSAgPj0gZHdhcmYyX3Blcl9vYmpmaWxlLT5hYmJyZXYuc2l6ZSkK IAlicmVhazsKICAgICAgIGFiYnJldl9udW1iZXIgPSByZWFkX3Vuc2lnbmVk X2xlYjEyOCAoYWJmZCwgYWJicmV2X3B0ciwgJmJ5dGVzX3JlYWQpOwogICAg ICAgYWJicmV2X3B0ciArPSBieXRlc19yZWFkOwpAQCAtNjA1MSw3ICs2MDE3 LDcgQEAgcmVhZF9wYXJ0aWFsX2RpZSAoc3RydWN0IHBhcnRpYWxfZGllX2lu ZgogCiAgIG1lbXNldCAocGFydF9kaWUsIDAsIHNpemVvZiAoc3RydWN0IHBh cnRpYWxfZGllX2luZm8pKTsKIAotICBwYXJ0X2RpZS0+b2Zmc2V0ID0gaW5m b19wdHIgLSBkd2FyZjJfcGVyX29iamZpbGUtPmluZm9fYnVmZmVyOworICBw YXJ0X2RpZS0+b2Zmc2V0ID0gaW5mb19wdHIgLSBkd2FyZjJfcGVyX29iamZp bGUtPmluZm8uYnVmZmVyOwogCiAgIGluZm9fcHRyICs9IGFiYnJldl9sZW47 CiAKQEAgLTYxNjQsNyArNjEzMCw3IEBAIHJlYWRfcGFydGlhbF9kaWUgKHN0 cnVjdCBwYXJ0aWFsX2RpZV9pbmYKIAkgIGlmIChhdHRyLmZvcm0gPT0gRFdf Rk9STV9yZWZfYWRkcikKIAkgICAgY29tcGxhaW50ICgmc3ltZmlsZV9jb21w bGFpbnRzLCBfKCJpZ25vcmluZyBhYnNvbHV0ZSBEV19BVF9zaWJsaW5nIikp OwogCSAgZWxzZQotCSAgICBwYXJ0X2RpZS0+c2libGluZyA9IGR3YXJmMl9w ZXJfb2JqZmlsZS0+aW5mb19idWZmZXIKKwkgICAgcGFydF9kaWUtPnNpYmxp bmcgPSBkd2FyZjJfcGVyX29iamZpbGUtPmluZm8uYnVmZmVyCiAJICAgICAg KyBkd2FyZjJfZ2V0X3JlZl9kaWVfb2Zmc2V0ICgmYXR0cik7CiAJICBicmVh azsKICAgICAgICAgY2FzZSBEV19BVF9zdG10X2xpc3Q6CkBAIC02MjgwLDcg KzYyNDYsNyBAQCBmaW5kX3BhcnRpYWxfZGllICh1bnNpZ25lZCBpbnQgb2Zm c2V0LCBzCiAJICBkd2FyZjJfcmVhZF9hYmJyZXZzIChwZXJfY3UtPmN1LT5v YmpmaWxlLT5vYmZkLCBwZXJfY3UtPmN1KTsKIAkgIGJhY2tfdG8gPSBtYWtl X2NsZWFudXAgKGR3YXJmMl9mcmVlX2FiYnJldl90YWJsZSwgcGVyX2N1LT5j dSk7CiAJfQotICAgICAgaW5mb19wdHIgPSAoZHdhcmYyX3Blcl9vYmpmaWxl LT5pbmZvX2J1ZmZlcgorICAgICAgaW5mb19wdHIgPSAoZHdhcmYyX3Blcl9v YmpmaWxlLT5pbmZvLmJ1ZmZlcgogCQkgICsgcGVyX2N1LT5jdS0+aGVhZGVy Lm9mZnNldAogCQkgICsgcGVyX2N1LT5jdS0+aGVhZGVyLmZpcnN0X2RpZV9v ZmZzZXQpOwogICAgICAgYWJicmV2ID0gcGVla19kaWVfYWJicmV2IChpbmZv X3B0ciwgJmJ5dGVzX3JlYWQsIHBlcl9jdS0+Y3UpOwpAQCAtNjM1Niw3ICs2 MzIyLDcgQEAgcmVhZF9mdWxsX2RpZSAoc3RydWN0IGRpZV9pbmZvICoqZGll cCwgYgogICBzdHJ1Y3QgYWJicmV2X2luZm8gKmFiYnJldjsKICAgc3RydWN0 IGRpZV9pbmZvICpkaWU7CiAKLSAgb2Zmc2V0ID0gaW5mb19wdHIgLSBkd2Fy ZjJfcGVyX29iamZpbGUtPmluZm9fYnVmZmVyOworICBvZmZzZXQgPSBpbmZv X3B0ciAtIGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mby5idWZmZXI7CiAgIGFi YnJldl9udW1iZXIgPSByZWFkX3Vuc2lnbmVkX2xlYjEyOCAoYWJmZCwgaW5m b19wdHIsICZieXRlc19yZWFkKTsKICAgaW5mb19wdHIgKz0gYnl0ZXNfcmVh ZDsKICAgaWYgKCFhYmJyZXZfbnVtYmVyKQpAQCAtNjc5MiwyMiArNjc1OCwy MiBAQCByZWFkX2luZGlyZWN0X3N0cmluZyAoYmZkICphYmZkLCBnZGJfYnl0 CiB7CiAgIExPTkdFU1Qgc3RyX29mZnNldCA9IHJlYWRfb2Zmc2V0IChhYmZk LCBidWYsIGN1X2hlYWRlciwgYnl0ZXNfcmVhZF9wdHIpOwogCi0gIGlmIChk d2FyZjJfcGVyX29iamZpbGUtPnN0cl9idWZmZXIgPT0gTlVMTCkKKyAgaWYg KGR3YXJmMl9wZXJfb2JqZmlsZS0+c3RyLmJ1ZmZlciA9PSBOVUxMKQogICAg IHsKICAgICAgIGVycm9yIChfKCJEV19GT1JNX3N0cnAgdXNlZCB3aXRob3V0 IC5kZWJ1Z19zdHIgc2VjdGlvbiBbaW4gbW9kdWxlICVzXSIpLAogCQkgICAg ICBiZmRfZ2V0X2ZpbGVuYW1lIChhYmZkKSk7CiAgICAgICByZXR1cm4gTlVM TDsKICAgICB9Ci0gIGlmIChzdHJfb2Zmc2V0ID49IGR3YXJmMl9wZXJfb2Jq ZmlsZS0+c3RyX3NpemUpCisgIGlmIChzdHJfb2Zmc2V0ID49IGR3YXJmMl9w ZXJfb2JqZmlsZS0+c3RyLnNpemUpCiAgICAgewogICAgICAgZXJyb3IgKF8o IkRXX0ZPUk1fc3RycCBwb2ludGluZyBvdXRzaWRlIG9mIC5kZWJ1Z19zdHIg c2VjdGlvbiBbaW4gbW9kdWxlICVzXSIpLAogCQkgICAgICBiZmRfZ2V0X2Zp bGVuYW1lIChhYmZkKSk7CiAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAg IGdkYl9hc3NlcnQgKEhPU1RfQ0hBUl9CSVQgPT0gOCk7Ci0gIGlmIChkd2Fy ZjJfcGVyX29iamZpbGUtPnN0cl9idWZmZXJbc3RyX29mZnNldF0gPT0gJ1ww JykKKyAgaWYgKGR3YXJmMl9wZXJfb2JqZmlsZS0+c3RyLmJ1ZmZlcltzdHJf b2Zmc2V0XSA9PSAnXDAnKQogICAgIHJldHVybiBOVUxMOwotICByZXR1cm4g KGNoYXIgKikgKGR3YXJmMl9wZXJfb2JqZmlsZS0+c3RyX2J1ZmZlciArIHN0 cl9vZmZzZXQpOworICByZXR1cm4gKGNoYXIgKikgKGR3YXJmMl9wZXJfb2Jq ZmlsZS0+c3RyLmJ1ZmZlciArIHN0cl9vZmZzZXQpOwogfQogCiBzdGF0aWMg dW5zaWduZWQgbG9uZwpAQCAtNzA5NCw3ICs3MDYwLDcgQEAgZHdhcmZfZGVj b2RlX2xpbmVfaGVhZGVyICh1bnNpZ25lZCBpbnQgbwogICBpbnQgaTsKICAg Y2hhciAqY3VyX2RpciwgKmN1cl9maWxlOwogCi0gIGlmIChkd2FyZjJfcGVy X29iamZpbGUtPmxpbmVfYnVmZmVyID09IE5VTEwpCisgIGlmIChkd2FyZjJf cGVyX29iamZpbGUtPmxpbmUuYnVmZmVyID09IE5VTEwpCiAgICAgewogICAg ICAgY29tcGxhaW50ICgmc3ltZmlsZV9jb21wbGFpbnRzLCBfKCJtaXNzaW5n IC5kZWJ1Z19saW5lIHNlY3Rpb24iKSk7CiAgICAgICByZXR1cm4gMDsKQEAg LTcxMDIsNyArNzA2OCw3IEBAIGR3YXJmX2RlY29kZV9saW5lX2hlYWRlciAo dW5zaWduZWQgaW50IG8KIAogICAvKiBNYWtlIHN1cmUgdGhhdCBhdCBsZWFz dCB0aGVyZSdzIHJvb20gZm9yIHRoZSB0b3RhbF9sZW5ndGggZmllbGQuCiAg ICAgIFRoYXQgY291bGQgYmUgMTIgYnl0ZXMgbG9uZywgYnV0IHdlJ3JlIGp1 c3QgZ29pbmcgdG8gZnVkZ2UgdGhhdC4gICovCi0gIGlmIChvZmZzZXQgKyA0 ID49IGR3YXJmMl9wZXJfb2JqZmlsZS0+bGluZV9zaXplKQorICBpZiAob2Zm c2V0ICsgNCA+PSBkd2FyZjJfcGVyX29iamZpbGUtPmxpbmUuc2l6ZSkKICAg ICB7CiAgICAgICBkd2FyZjJfc3RhdGVtZW50X2xpc3RfZml0c19pbl9saW5l X251bWJlcl9zZWN0aW9uX2NvbXBsYWludCAoKTsKICAgICAgIHJldHVybiAw OwpAQCAtNzExMywxNSArNzA3OSwxNSBAQCBkd2FyZl9kZWNvZGVfbGluZV9o ZWFkZXIgKHVuc2lnbmVkIGludCBvCiAgIGJhY2tfdG8gPSBtYWtlX2NsZWFu dXAgKChtYWtlX2NsZWFudXBfZnR5cGUgKikgZnJlZV9saW5lX2hlYWRlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgbGgpOwogCi0g IGxpbmVfcHRyID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5saW5lX2J1ZmZlciAr IG9mZnNldDsKKyAgbGluZV9wdHIgPSBkd2FyZjJfcGVyX29iamZpbGUtPmxp bmUuYnVmZmVyICsgb2Zmc2V0OwogCiAgIC8qIFJlYWQgaW4gdGhlIGhlYWRl ci4gICovCiAgIGxoLT50b3RhbF9sZW5ndGggPSAKICAgICByZWFkX2NoZWNr ZWRfaW5pdGlhbF9sZW5ndGhfYW5kX29mZnNldCAoYWJmZCwgbGluZV9wdHIs ICZjdS0+aGVhZGVyLAogCQkJCQkgICAgJmJ5dGVzX3JlYWQsICZvZmZzZXRf c2l6ZSk7CiAgIGxpbmVfcHRyICs9IGJ5dGVzX3JlYWQ7Ci0gIGlmIChsaW5l X3B0ciArIGxoLT50b3RhbF9sZW5ndGggPiAoZHdhcmYyX3Blcl9vYmpmaWxl LT5saW5lX2J1ZmZlcgotCQkJCSAgICAgKyBkd2FyZjJfcGVyX29iamZpbGUt PmxpbmVfc2l6ZSkpCisgIGlmIChsaW5lX3B0ciArIGxoLT50b3RhbF9sZW5n dGggPiAoZHdhcmYyX3Blcl9vYmpmaWxlLT5saW5lLmJ1ZmZlcgorCQkJCSAg ICAgKyBkd2FyZjJfcGVyX29iamZpbGUtPmxpbmUuc2l6ZSkpCiAgICAgewog ICAgICAgZHdhcmYyX3N0YXRlbWVudF9saXN0X2ZpdHNfaW5fbGluZV9udW1i ZXJfc2VjdGlvbl9jb21wbGFpbnQgKCk7CiAgICAgICByZXR1cm4gMDsKQEAg LTcxNzcsOCArNzE0Myw4IEBAIGR3YXJmX2RlY29kZV9saW5lX2hlYWRlciAo dW5zaWduZWQgaW50IG8KICAgbGluZV9wdHIgKz0gYnl0ZXNfcmVhZDsKICAg bGgtPnN0YXRlbWVudF9wcm9ncmFtX3N0YXJ0ID0gbGluZV9wdHI7IAogCi0g IGlmIChsaW5lX3B0ciA+IChkd2FyZjJfcGVyX29iamZpbGUtPmxpbmVfYnVm ZmVyCi0JCSAgKyBkd2FyZjJfcGVyX29iamZpbGUtPmxpbmVfc2l6ZSkpCisg IGlmIChsaW5lX3B0ciA+IChkd2FyZjJfcGVyX29iamZpbGUtPmxpbmUuYnVm ZmVyCisJCSAgKyBkd2FyZjJfcGVyX29iamZpbGUtPmxpbmUuc2l6ZSkpCiAg ICAgY29tcGxhaW50ICgmc3ltZmlsZV9jb21wbGFpbnRzLAogCSAgICAgICBf KCJsaW5lIG51bWJlciBpbmZvIGhlYWRlciBkb2Vzbid0IGZpdCBpbiBgLmRl YnVnX2xpbmUnIHNlY3Rpb24iKSk7CiAKQEAgLTEwMTYzLDcgKzEwMTI5LDcg QEAgZHdhcmZfZGVjb2RlX21hY3JvcyAoc3RydWN0IGxpbmVfaGVhZGVyIAog ICBlbnVtIGR3YXJmX21hY2luZm9fcmVjb3JkX3R5cGUgbWFjaW5mb190eXBl OwogICBpbnQgYXRfY29tbWFuZGxpbmU7CiAKLSAgaWYgKGR3YXJmMl9wZXJf b2JqZmlsZS0+bWFjaW5mb19idWZmZXIgPT0gTlVMTCkKKyAgaWYgKGR3YXJm Ml9wZXJfb2JqZmlsZS0+bWFjaW5mby5idWZmZXIgPT0gTlVMTCkKICAgICB7 CiAgICAgICBjb21wbGFpbnQgKCZzeW1maWxlX2NvbXBsYWludHMsIF8oIm1p c3NpbmcgLmRlYnVnX21hY2luZm8gc2VjdGlvbiIpKTsKICAgICAgIHJldHVy bjsKQEAgLTEwMTgwLDkgKzEwMTQ2LDkgQEAgZHdhcmZfZGVjb2RlX21hY3Jv cyAoc3RydWN0IGxpbmVfaGVhZGVyIAogICAgICBDVVJSRU5UX0ZJTEUgYWNj b3JkaW5nbHkgc28gdGhhdCBhbnkgbWFjcm8gZGVmaW5pdGlvbiBmb3VuZCBi ZWZvcmUgdGhlCiAgICAgIGZpcnN0IERXX01BQ0lORk9fc3RhcnRfZmlsZSBj YW4gc3RpbGwgYmUgYXNzb2NpYXRlZCB0byB0aGUgYmFzZSBmaWxlLiAgKi8K IAotICBtYWNfcHRyID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5tYWNpbmZvX2J1 ZmZlciArIG9mZnNldDsKLSAgbWFjX2VuZCA9IGR3YXJmMl9wZXJfb2JqZmls ZS0+bWFjaW5mb19idWZmZXIKLSAgICArIGR3YXJmMl9wZXJfb2JqZmlsZS0+ bWFjaW5mb19zaXplOworICBtYWNfcHRyID0gZHdhcmYyX3Blcl9vYmpmaWxl LT5tYWNpbmZvLmJ1ZmZlciArIG9mZnNldDsKKyAgbWFjX2VuZCA9IGR3YXJm Ml9wZXJfb2JqZmlsZS0+bWFjaW5mby5idWZmZXIKKyAgICArIGR3YXJmMl9w ZXJfb2JqZmlsZS0+bWFjaW5mby5zaXplOwogCiAgIGRvCiAgICAgewpAQCAt MTAyNTksNyArMTAyMjUsNyBAQCBkd2FyZl9kZWNvZGVfbWFjcm9zIChzdHJ1 Y3QgbGluZV9oZWFkZXIgCiAgICAgIGNvbW1hbmQtbGluZSBtYWNybyBkZWZp bml0aW9ucy91bmRlZmluaXRpb25zLiAgVGhpcyBmbGFnIGlzIHVuc2V0IHdo ZW4gd2UKICAgICAgcmVhY2ggdGhlIGZpcnN0IERXX01BQ0lORk9fc3RhcnRf ZmlsZSBlbnRyeS4gICovCiAKLSAgbWFjX3B0ciA9IGR3YXJmMl9wZXJfb2Jq ZmlsZS0+bWFjaW5mb19idWZmZXIgKyBvZmZzZXQ7CisgIG1hY19wdHIgPSBk d2FyZjJfcGVyX29iamZpbGUtPm1hY2luZm8uYnVmZmVyICsgb2Zmc2V0Owog CiAgIC8qIERldGVybWluZXMgaWYgR0RCIGlzIHN0aWxsIGJlZm9yZSBmaXJz dCBEV19NQUNJTkZPX3N0YXJ0X2ZpbGUuICBJZiB0cnVlCiAgICAgIEdEQiBp cyBzdGlsbCByZWFkaW5nIHRoZSBkZWZpbml0aW9ucyBmcm9tIGNvbW1hbmQg bGluZS4gIEZpcnN0CkBAIC0xMDQ3Nyw3ICsxMDQ0Myw3IEBAIGR3YXJmMl9z eW1ib2xfbWFya19jb21wdXRlZCAoc3RydWN0IGF0dHIKICAgICAgIC8qICIu ZGVidWdfbG9jIiBtYXkgbm90IGV4aXN0IGF0IGFsbCwgb3IgdGhlIG9mZnNl dCBtYXkgYmUgb3V0c2lkZQogCSB0aGUgc2VjdGlvbi4gIElmIHNvLCBmYWxs IHRocm91Z2ggdG8gdGhlIGNvbXBsYWludCBpbiB0aGUKIAkgb3RoZXIgYnJh bmNoLiAgKi8KLSAgICAgICYmIERXX1VOU05EIChhdHRyKSA8IGR3YXJmMl9w ZXJfb2JqZmlsZS0+bG9jX3NpemUpCisgICAgICAmJiBEV19VTlNORCAoYXR0 cikgPCBkd2FyZjJfcGVyX29iamZpbGUtPmxvYy5zaXplKQogICAgIHsKICAg ICAgIHN0cnVjdCBkd2FyZjJfbG9jbGlzdF9iYXRvbiAqYmF0b247CiAKQEAg LTEwNDg4LDggKzEwNDU0LDggQEAgZHdhcmYyX3N5bWJvbF9tYXJrX2NvbXB1 dGVkIChzdHJ1Y3QgYXR0cgogCiAgICAgICAvKiBXZSBkb24ndCBrbm93IGhv dyBsb25nIHRoZSBsb2NhdGlvbiBsaXN0IGlzLCBidXQgbWFrZSBzdXJlIHdl CiAJIGRvbid0IHJ1biBvZmYgdGhlIGVkZ2Ugb2YgdGhlIHNlY3Rpb24uICAq LwotICAgICAgYmF0b24tPnNpemUgPSBkd2FyZjJfcGVyX29iamZpbGUtPmxv Y19zaXplIC0gRFdfVU5TTkQgKGF0dHIpOwotICAgICAgYmF0b24tPmRhdGEg PSBkd2FyZjJfcGVyX29iamZpbGUtPmxvY19idWZmZXIgKyBEV19VTlNORCAo YXR0cik7CisgICAgICBiYXRvbi0+c2l6ZSA9IGR3YXJmMl9wZXJfb2JqZmls ZS0+bG9jLnNpemUgLSBEV19VTlNORCAoYXR0cik7CisgICAgICBiYXRvbi0+ ZGF0YSA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+bG9jLmJ1ZmZlciArIERXX1VO U05EIChhdHRyKTsKICAgICAgIGJhdG9uLT5iYXNlX2FkZHJlc3MgPSBjdS0+ YmFzZV9hZGRyZXNzOwogICAgICAgaWYgKGN1LT5iYXNlX2tub3duID09IDAp CiAJY29tcGxhaW50ICgmc3ltZmlsZV9jb21wbGFpbnRzLApAQCAtMTA1NTgs NyArMTA1MjQsNyBAQCBkd2FyZjJfcGVyX2N1X2FkZHJfc2l6ZSAoc3RydWN0 IGR3YXJmMl9wCiAgICAgICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSA9IHBl cl9jdS0+cHN5bXRhYi0+b2JqZmlsZTsKICAgICAgIHN0cnVjdCBkd2FyZjJf cGVyX29iamZpbGUgKnBlcl9vYmpmaWxlCiAJPSBvYmpmaWxlX2RhdGEgKG9i amZpbGUsIGR3YXJmMl9vYmpmaWxlX2RhdGFfa2V5KTsKLSAgICAgIGdkYl9i eXRlICppbmZvX3B0ciA9IHBlcl9vYmpmaWxlLT5pbmZvX2J1ZmZlciArIHBl cl9jdS0+b2Zmc2V0OworICAgICAgZ2RiX2J5dGUgKmluZm9fcHRyID0gcGVy X29iamZpbGUtPmluZm8uYnVmZmVyICsgcGVyX2N1LT5vZmZzZXQ7CiAKICAg ICAgIHN0cnVjdCBjb21wX3VuaXRfaGVhZCBjdV9oZWFkZXI7CiAgICAgICBt ZW1zZXQgKCZjdV9oZWFkZXIsIDAsIHNpemVvZiBjdV9oZWFkZXIpOwpAQCAt MTA5NTEsMTIgKzEwOTE3LDQ5IEBAIHNob3dfZHdhcmYyX2NtZCAoY2hhciAq YXJncywgaW50IGZyb21fdHQKICAgY21kX3Nob3dfbGlzdCAoc2hvd19kd2Fy ZjJfY21kbGlzdCwgZnJvbV90dHksICIiKTsKIH0KIAorLyogSWYgc2VjdGlv biBkZXNjcmliZWQgYnkgSU5GTyB3YXMgbW1hcHBlZCwgbXVubWFwIGl0IG5v dy4gICovCisKK3N0YXRpYyB2b2lkCittdW5tYXBfc2VjdGlvbl9idWZmZXIg KHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9pbmZvICppbmZvKQoreworICBpZiAo aW5mby0+d2FzX21tYXBwZWQpCisgICAgeworI2lmZGVmIEhBVkVfTU1BUAor ICAgICAgaW50cHRyX3QgYmVnaW4gPSAoaW50cHRyX3QpIGluZm8tPmJ1ZmZl cjsKKyAgICAgIGludHB0cl90IG1hcF9iZWdpbiA9IGJlZ2luICYgfihwYWdl c2l6ZSAtIDEpOworICAgICAgc2l6ZV90IG1hcF9sZW5ndGggPSBpbmZvLT5z aXplICsgYmVnaW4gLSBtYXBfYmVnaW47CisgICAgICBnZGJfYXNzZXJ0ICht dW5tYXAgKCh2b2lkICopIG1hcF9iZWdpbiwgbWFwX2xlbmd0aCkgPT0gMCk7 CisjZWxzZQorICAgICAgLyogV2l0aG91dCBIQVZFX01NQVAsIHdlIHNob3Vs ZCBuZXZlciBiZSBoZXJlIHRvIGJlZ2luIHdpdGguICAqLworICAgICAgZ2Ri X2Fzc2VydCAoMCk7CisjZW5kaWYKKyAgICB9Cit9CisKKy8qIG11bm1hcCBk ZWJ1ZyBzZWN0aW9ucyBmb3IgT0JKRklMRSwgaWYgbmVjZXNzYXJ5LiAgKi8K Kworc3RhdGljIHZvaWQKK2R3YXJmMl9wZXJfb2JqZmlsZV9jbGVhbnVwIChz dHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwgdm9pZCAqZCkKK3sKKyAgc3RydWN0 IGR3YXJmMl9wZXJfb2JqZmlsZSAqZGF0YSA9IGQ7CisgIG11bm1hcF9zZWN0 aW9uX2J1ZmZlciAoJmRhdGEtPmluZm8pOworICBtdW5tYXBfc2VjdGlvbl9i dWZmZXIgKCZkYXRhLT5hYmJyZXYpOworICBtdW5tYXBfc2VjdGlvbl9idWZm ZXIgKCZkYXRhLT5saW5lKTsKKyAgbXVubWFwX3NlY3Rpb25fYnVmZmVyICgm ZGF0YS0+c3RyKTsKKyAgbXVubWFwX3NlY3Rpb25fYnVmZmVyICgmZGF0YS0+ bWFjaW5mbyk7CisgIG11bm1hcF9zZWN0aW9uX2J1ZmZlciAoJmRhdGEtPnJh bmdlcyk7CisgIG11bm1hcF9zZWN0aW9uX2J1ZmZlciAoJmRhdGEtPmxvYyk7 CisgIG11bm1hcF9zZWN0aW9uX2J1ZmZlciAoJmRhdGEtPmZyYW1lKTsKKyAg bXVubWFwX3NlY3Rpb25fYnVmZmVyICgmZGF0YS0+ZWhfZnJhbWUpOworfQor CiB2b2lkIF9pbml0aWFsaXplX2R3YXJmMl9yZWFkICh2b2lkKTsKIAogdm9p ZAogX2luaXRpYWxpemVfZHdhcmYyX3JlYWQgKHZvaWQpCiB7Ci0gIGR3YXJm Ml9vYmpmaWxlX2RhdGFfa2V5ID0gcmVnaXN0ZXJfb2JqZmlsZV9kYXRhICgp OworICBkd2FyZjJfb2JqZmlsZV9kYXRhX2tleQorICAgID0gcmVnaXN0ZXJf b2JqZmlsZV9kYXRhX3dpdGhfY2xlYW51cCAoZHdhcmYyX3Blcl9vYmpmaWxl X2NsZWFudXApOwogCiAgIGFkZF9wcmVmaXhfY21kICgiZHdhcmYyIiwgY2xh c3NfbWFpbnRlbmFuY2UsIHNldF9kd2FyZjJfY21kLCBfKCJcCiBTZXQgRFdB UkYgMiBzcGVjaWZpYyB2YXJpYWJsZXMuXG5cCkluZGV4OiBkd2FyZjItZnJh bWUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Ny Yy9zcmMvZ2RiL2R3YXJmMi1mcmFtZS5jLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjg3CmRpZmYgLXUgLXAgLXUgLXIxLjg3IGR3YXJmMi1mcmFtZS5jCi0t LSBkd2FyZjItZnJhbWUuYwkzIEphbiAyMDA5IDA1OjU3OjUxIC0wMDAwCTEu ODcKKysrIGR3YXJmMi1mcmFtZS5jCTE2IEp1biAyMDA5IDIwOjQxOjUyIC0w MDAwCkBAIC0xODk2LDE1ICsxODk2LDkgQEAgZGVjb2RlX2ZyYW1lX2VudHJ5 IChzdHJ1Y3QgY29tcF91bml0ICp1bgogfQogDAogCi0vKiBGSVhNRToga2V0 dGVuaXMvMjAwMzA1MDQ6IFRoaXMgc3RpbGwgbmVlZHMgdG8gYmUgaW50ZWdy YXRlZCB3aXRoCi0gICBkd2FyZjJyZWFkLmMgaW4gYSBiZXR0ZXIgd2F5LiAg Ki8KLQotLyogSW1wb3J0ZWQgZnJvbSBkd2FyZjJyZWFkLmMuICAqLwotZXh0 ZXJuIGFzZWN0aW9uICpkd2FyZl9mcmFtZV9zZWN0aW9uOwotZXh0ZXJuIGFz ZWN0aW9uICpkd2FyZl9laF9mcmFtZV9zZWN0aW9uOwotCiAvKiBJbXBvcnRl ZCBmcm9tIGR3YXJmMnJlYWQuYy4gICovCi1leHRlcm4gZ2RiX2J5dGUgKmR3 YXJmMl9yZWFkX3NlY3Rpb24gKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLCBh c2VjdGlvbiAqc2VjdHApOworZXh0ZXJuIHZvaWQgZHdhcmYyX2dldF9zZWN0 aW9uX2luZm8gKHN0cnVjdCBvYmpmaWxlICosIGNvbnN0IGNoYXIgKiwgYXNl Y3Rpb24gKiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2RiX2J5dGUgKiosIGJmZF9zaXplX3R5cGUgKik7CiAKIHZvaWQKIGR3 YXJmMl9idWlsZF9mcmFtZV9pbmZvIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmls ZSkKQEAgLTE5MjIsMTcgKzE5MTYsMTUgQEAgZHdhcmYyX2J1aWxkX2ZyYW1l X2luZm8gKHN0cnVjdCBvYmpmaWxlIAogCiAgIC8qIEZpcnN0IGFkZCB0aGUg aW5mb3JtYXRpb24gZnJvbSB0aGUgLmVoX2ZyYW1lIHNlY3Rpb24uICBUaGF0 IHdheSwKICAgICAgdGhlIEZERXMgZnJvbSB0aGF0IHNlY3Rpb24gYXJlIHNl YXJjaGVkIGxhc3QuICAqLwotICBpZiAoZHdhcmZfZWhfZnJhbWVfc2VjdGlv bikKKyAgZHdhcmYyX2dldF9zZWN0aW9uX2luZm8gKG9iamZpbGUsICIuZWhf ZnJhbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVuaXQtPmR3 YXJmX2ZyYW1lX3NlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdW5pdC0+ZHdhcmZfZnJhbWVfYnVmZmVyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnVuaXQtPmR3YXJmX2ZyYW1lX3NpemUpOworICBpZiAo dW5pdC0+ZHdhcmZfZnJhbWVfc2l6ZSkKICAgICB7CiAgICAgICBhc2VjdGlv biAqZ290LCAqdHh0OwogCiAgICAgICB1bml0LT5jaWUgPSBOVUxMOwotICAg ICAgdW5pdC0+ZHdhcmZfZnJhbWVfYnVmZmVyID0gZHdhcmYyX3JlYWRfc2Vj dGlvbiAob2JqZmlsZSwKLQkJCQkJCSAgICAgIGR3YXJmX2VoX2ZyYW1lX3Nl Y3Rpb24pOwotCi0gICAgICB1bml0LT5kd2FyZl9mcmFtZV9zaXplID0gYmZk X2dldF9zZWN0aW9uX3NpemUgKGR3YXJmX2VoX2ZyYW1lX3NlY3Rpb24pOwot ICAgICAgdW5pdC0+ZHdhcmZfZnJhbWVfc2VjdGlvbiA9IGR3YXJmX2VoX2Zy YW1lX3NlY3Rpb247Ci0KICAgICAgIC8qIEZJWE1FOiBrZXR0ZW5pcy8yMDAz MDYwMjogVGhpcyBpcyB0aGUgRFdfRUhfUEVfZGF0YXJlbCBiYXNlCiAJIHRo YXQgaXMgdXNlZCBmb3IgdGhlIGkzODYvYW1kNjQgdGFyZ2V0LCB3aGljaCBj dXJyZW50bHkgaXMKIAkgdGhlIG9ubHkgdGFyZ2V0IGluIEdDQyB0aGF0IHN1 cHBvcnRzL3VzZXMgdGhlCkBAIC0xOTUyLDEzICsxOTQ0LDEzIEBAIGR3YXJm Ml9idWlsZF9mcmFtZV9pbmZvIChzdHJ1Y3Qgb2JqZmlsZSAKIAlmcmFtZV9w dHIgPSBkZWNvZGVfZnJhbWVfZW50cnkgKHVuaXQsIGZyYW1lX3B0ciwgMSk7 CiAgICAgfQogCi0gIGlmIChkd2FyZl9mcmFtZV9zZWN0aW9uKQorICBkd2Fy ZjJfZ2V0X3NlY3Rpb25faW5mbyAob2JqZmlsZSwgIi5kZWJ1Z19mcmFtZSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAmdW5pdC0+ZHdhcmZfZnJh bWVfc2VjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1bml0 LT5kd2FyZl9mcmFtZV9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdW5pdC0+ZHdhcmZfZnJhbWVfc2l6ZSk7CisgIGlmICh1bml0LT5k d2FyZl9mcmFtZV9zaXplKQogICAgIHsKICAgICAgIHVuaXQtPmNpZSA9IE5V TEw7Ci0gICAgICB1bml0LT5kd2FyZl9mcmFtZV9idWZmZXIgPSBkd2FyZjJf cmVhZF9zZWN0aW9uIChvYmpmaWxlLAotCQkJCQkJICAgICAgZHdhcmZfZnJh bWVfc2VjdGlvbik7Ci0gICAgICB1bml0LT5kd2FyZl9mcmFtZV9zaXplID0g YmZkX2dldF9zZWN0aW9uX3NpemUgKGR3YXJmX2ZyYW1lX3NlY3Rpb24pOwot ICAgICAgdW5pdC0+ZHdhcmZfZnJhbWVfc2VjdGlvbiA9IGR3YXJmX2ZyYW1l X3NlY3Rpb247CiAKICAgICAgIGZyYW1lX3B0ciA9IHVuaXQtPmR3YXJmX2Zy YW1lX2J1ZmZlcjsKICAgICAgIHdoaWxlIChmcmFtZV9wdHIgPCB1bml0LT5k d2FyZl9mcmFtZV9idWZmZXIgKyB1bml0LT5kd2FyZl9mcmFtZV9zaXplKQo= --0016367f96e05a8782046c7d387b--