From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x144.google.com (mail-il1-x144.google.com [IPv6:2607:f8b0:4864:20::144]) by sourceware.org (Postfix) with ESMTPS id 54CD33857007 for ; Wed, 1 Jul 2020 19:58:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 54CD33857007 Received: by mail-il1-x144.google.com with SMTP id k6so22134570ili.6 for ; Wed, 01 Jul 2020 12:58:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=V8/Dv+/oB2cmr6Qwbrn41YyHGC1M4F1kSS1w9B4vMpA=; b=EB4KHvVsoVU0ZZpiLSZBuT2i74EUlsEOgjNK3rATFAHHc4cTtiop7N7zYD+BgIKL8u 3mRCBCoWG+oYiMpWL7jQAMJL4eUhGJ8YFsZzyl3u2ya3WNb8+5+5thh3++49wN/zkK7H Kj1UC65YSZXusQ2si0NhwTG/tVsTq2U8Ua1s3sZR676AKrBQgDS6GggSB5JbtK9kinWb RtPu3dZMdKIfTM6G6xazh5sZgdIBWa3YTdDLRHeGc7CdwR2iNXOpb9eUq0Hew3AFE7yD gmYIE7Sc6QR7Dz8ceXr2O7bQWg3xIITcvfb8rjEUn4R4wUDwjKCz6w3FqCc8p3Ffe6lb RUHA== X-Gm-Message-State: AOAM5331I7zJPKs2GJiC/GX1QcKt9nEEwMEZGuxfz/4qjckz1XyOOhbH +DicqJMh9EBwUR430VmWrorbmOyLl10HjVDDeyJ9tpPtRNs= X-Google-Smtp-Source: ABdhPJy5kSHs8o1l9cyF6PkfgXV8M+jGzY9D8d8KY+xLey3pcPp98UkbPy/MFJ6oHbasHg2MCr8Vva+YG7cttHalccA= X-Received: by 2002:a92:4001:: with SMTP id n1mr9474345ila.269.1593633489398; Wed, 01 Jul 2020 12:58:09 -0700 (PDT) MIME-Version: 1.0 References: <87lfl634rs.fsf@tromey.com> <87h7vsqk5h.fsf@tromey.com> <87h7v815n7.fsf@tromey.com> <5eab18a1-c7e9-1a77-7f65-944eea10aa85@simark.ca> In-Reply-To: <5eab18a1-c7e9-1a77-7f65-944eea10aa85@simark.ca> From: Caroline Tice Date: Wed, 1 Jul 2020 12:57:58 -0700 Message-ID: Subject: Re: [PATCH] Fix issues with reading rnglists, especially from dwo files, for DWARF v5 To: Simon Marchi Cc: Tom Tromey , Eric Christopher , Caroline Tice via Gdb-patches Content-Type: multipart/mixed; boundary="0000000000000aff6e05a966b6ea" X-Spam-Status: No, score=-18.7 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH, KAM_NUMSUBJECT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USER_IN_DEF_DKIM_WL, USER_IN_DEF_SPF_WL autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2020 19:58:12 -0000 --0000000000000aff6e05a966b6ea Content-Type: text/plain; charset="UTF-8" I created the attached patch with git format-patch; I've never used that before, so I'm hoping I got it right. :-) Please let me know if there's anything else you need/want for approval. -- Caroline cmtice@google.com gdb/ChangeLog: 2020-07-01 Caroline Tice * dwarf2/read.c (struct dwop_section_names): Add rnglists_dwo. (dwop_section_names): Add .debug_rnglists.dwo, .zdebug_rnglists.dwo. (struct dwarf2_cu): Add cu_ranges_from_skeleton field. (struct dwo_sections): Add rnglists field. (dwarf2_ranges_read): Add tag parameter. (cu_debug_rnglist_section): New function (decl & definition). (cutu_reader::cutu_reader): Before replacing the skeleton unit comp_unit_die with the dwo comp_unit_die, check to see if the skeleton unit die has a DW_AT_ranges, and if so set the cu_ranges_from_skeleton field in the cu. (dwarf2_locate_dwo_sections): Add code to read rnglists_dwo section. (dwarf2_rnglists_process): Add a dwarf_tag parameter, for the kind of die whose range is being checked; add code to read the rnglist section from the dwo file rather than from the main objfile, if appropriate. Add cases for DW_RLE_base_addressx, DW_RLE_startx_length, DW_RLE_startx_endx. Also, update to only add the base address to DW_RLE_offset_pairs (not to all ranges). (dwarf2_ranges_process): Add dwarf tag parameter and pass it to dwarf2_rnglists_process. (dwarf2_ranges_read): Add dwarf tag parameter and pass it to dwarf2_ranges_process. (dwarf2_get_pc_bounds): Check for DW_FORM_rnglistx when setting need_ranges_base. Also pass die tag to dwarf2_ranges_read. (dwarf2_record_block_ranges): Check for DW_FORM_rnglistx when setting need_ranges_base. Also pass die tag to dwarf2_ranges_read. (read_full_die_1): Add code to read DW_AT_rnglists_base and assign to cu->ranges_base. (partial_die_info::read): Check for DW_FORM_rnglistx when setting need_ranges_base. Also pass die tag to dwarf2_ranges_read. (read_rnglist_index): New function. (read_attribute_reprocess): Add code for DW_FORM_rnglistx. (read_attribute_value): Mark DW_FORM_rnglistx with need_reprocess. gdb/testsuite/ChangeLog entry: 2020-07-01 Caroline Tice * gdb.dwarf2/dw5-rnglist-test.cc: New file. * gdb.dwarf2/dw5-rnglist-test.exp: New file. On Tue, Jun 30, 2020 at 5:36 PM Simon Marchi wrote: > > On 2020-06-30 8:34 p.m., Simon Marchi wrote: > > On 2020-06-23 3:04 p.m., Caroline Tice via Gdb-patches wrote: > >> I believe I have addressed all of your comments. The updated patch is > >> attached. Please let me know if this is ok now. Thanks! > > > > Hi Caroline, > > > > Just to be sure, could you please send the complete patch, including the commit message (using > > either git-format-patch or git-send-email)? It would be nice to see the patch as it will be > > merged, which includes the commit message. > > > > Simon > > > > Oh, and just a nit, git told me this when applying: > > /home/simark/patches/gdb-dwo-rnglists.updated2.patch:188: space before tab in indent. > default: > warning: 1 line adds whitespace errors. > > Simon --0000000000000aff6e05a966b6ea Content-Type: application/octet-stream; name="v2-0001-Update-GDB-to-fix-issues-with-handling-DWARF-v5-r.patch" Content-Disposition: attachment; filename="v2-0001-Update-GDB-to-fix-issues-with-handling-DWARF-v5-r.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kc3s3x410 RnJvbSA3OGM1OWEwYmY2MjZhN2RlYTgzOTQ0NzJjOGFmMzkxNDZmM2I4Y2M5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDYXJvbGluZSBUaWNlIDxjbXRpY2VAZ29vZ2xlLmNvbT4KRGF0 ZTogV2VkLCAxIEp1bCAyMDIwIDEyOjM5OjA4IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2Ml0gVXBk YXRlIEdEQiB0byBmaXggaXNzdWVzIHdpdGggaGFuZGxpbmcgRFdBUkYgdjUgcm5nbGlzdHMgJgog LmR3byBmaWxlcy4KCi0gQWRkZWQgJ3JlcHJvY2Vzc2luZycgZm9yIHJlYWRpbmcgcm5nbGlzdCBp bmRleCAoYXMgaXMgZG9uZSBmb3IgbG9jbGlzdAogIGluZGV4KS4KLSBBZGRlZCBjb2RlIGZvciBy ZWFkaW5nIHJuZ2xpc3RzIG91dCBvZiAuZHdvIGZpbGVzLgotIEFkZGVkIHNldmVyYWwgbWlzc2lu ZyBybmdsaXN0IGZvcm1zIHRvIGR3YXJmMl9ybmdsaXN0c19wcm9jZXNzLgotIEZpeGVkIGJ1ZyB0 aGF0IHdhcyBhbHdheWFzIGFkZGluZyBiYXNlIGFkZHJlc3MgZm9yIHJuZ2xpc3RzIChvbmx5CiAg b25lIGZvcm0gbmVlZHMgdGhhdCkuCi0gVXBkYXRlZCBkd2FyZjJfcm5nbGlzdHNfcHJvY2VzcyB0 byByZWFkIHJuZ2xpc3Qgb3V0IG9mIGR3byBmaWxlIHdoZW4KICBhcHByb3ByaWF0ZS4KLSBBZGRl ZCBuZXcgZnVuY3Rpb25zIGN1X2RlYnVnX3JuZ2xpc3Rfc2VjdGlvbiAmIHJlYWRfcm5nbGlzdF9p bmRleC4KLSBBZGRlZCBuZXcgdGVzdGNhc2UsIGR3NS1ybmdsaXN0LXRlc3Que2NjLGV4cH0KLS0t CiBnZGIvZHdhcmYyL3JlYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxOTAgKysr KysrKysrKysrKysrKy0tCiBnZGIvdGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc1LXJuZ2xpc3QtdGVz dC5jYyAgfCAgODggKysrKysrKysKIGdkYi90ZXN0c3VpdGUvZ2RiLmR3YXJmMi9kdzUtcm5nbGlz dC10ZXN0LmV4cCB8ICA0MCArKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI5NyBpbnNlcnRpb25zKCsp LCAyMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1aXRlL2dkYi5k d2FyZjIvZHc1LXJuZ2xpc3QtdGVzdC5jYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3Vp dGUvZ2RiLmR3YXJmMi9kdzUtcm5nbGlzdC10ZXN0LmV4cAoKZGlmZiAtLWdpdCBhL2dkYi9kd2Fy ZjIvcmVhZC5jIGIvZ2RiL2R3YXJmMi9yZWFkLmMKaW5kZXggNDYyMmQxNGEwNS4uYTE1YWYxMjE3 MiAxMDA2NDQKLS0tIGEvZ2RiL2R3YXJmMi9yZWFkLmMKKysrIGIvZ2RiL2R3YXJmMi9yZWFkLmMK QEAgLTM0MCw2ICszNDAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGR3b3Bfc2VjdGlvbl9uYW1l cwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25fbmFtZXMgbG9jbGlzdHNfZHdvOwogICBzdHJ1Y3Qg ZHdhcmYyX3NlY3Rpb25fbmFtZXMgbWFjaW5mb19kd287CiAgIHN0cnVjdCBkd2FyZjJfc2VjdGlv bl9uYW1lcyBtYWNyb19kd287CisgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9uYW1lcyBybmdsaXN0 c19kd287CiAgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9uYW1lcyBzdHJfZHdvOwogICBzdHJ1Y3Qg ZHdhcmYyX3NlY3Rpb25fbmFtZXMgc3RyX29mZnNldHNfZHdvOwogICBzdHJ1Y3QgZHdhcmYyX3Nl Y3Rpb25fbmFtZXMgdHlwZXNfZHdvOwpAQCAtMzU1LDYgKzM1Niw3IEBAIGR3b3Bfc2VjdGlvbl9u YW1lcyA9CiAgIHsgIi5kZWJ1Z19sb2NsaXN0cy5kd28iLCAiLnpkZWJ1Z19sb2NsaXN0cy5kd28i IH0sCiAgIHsgIi5kZWJ1Z19tYWNpbmZvLmR3byIsICIuemRlYnVnX21hY2luZm8uZHdvIiB9LAog ICB7ICIuZGVidWdfbWFjcm8uZHdvIiwgIi56ZGVidWdfbWFjcm8uZHdvIiB9LAorICB7ICIuZGVi dWdfcm5nbGlzdHMuZHdvIiwgIi56ZGVidWdfcm5nbGlzdHMuZHdvIiB9LAogICB7ICIuZGVidWdf c3RyLmR3byIsICIuemRlYnVnX3N0ci5kd28iIH0sCiAgIHsgIi5kZWJ1Z19zdHJfb2Zmc2V0cy5k d28iLCAiLnpkZWJ1Z19zdHJfb2Zmc2V0cy5kd28iIH0sCiAgIHsgIi5kZWJ1Z190eXBlcy5kd28i LCAiLnpkZWJ1Z190eXBlcy5kd28iIH0sCkBAIC00NDgsNiArNDUwLDkgQEAgc3RydWN0IGR3YXJm Ml9jdQogICAvKiBCYXNlIGFkZHJlc3Mgb2YgdGhpcyBjb21waWxhdGlvbiB1bml0LiAgKi8KICAg Z2RiOjpvcHRpb25hbDxDT1JFX0FERFI+IGJhc2VfYWRkcmVzczsKIAorICAvKiBDVSBybmdsaXN0 IHJhbmdlcyBjYW1lIGZyb20gc2tlbGV0b24gdW5pdC4gKi8KKyAgYm9vbCBjdV9yYW5nZXNfZnJv bV9za2VsZXRvbiA9IGZhbHNlOworCiAgIC8qIFRoZSBsYW5ndWFnZSB3ZSBhcmUgZGVidWdnaW5n LiAgKi8KICAgZW51bSBsYW5ndWFnZSBsYW5ndWFnZSA9IGxhbmd1YWdlX3Vua25vd247CiAgIGNv bnN0IHN0cnVjdCBsYW5ndWFnZV9kZWZuICpsYW5ndWFnZV9kZWZuID0gbnVsbHB0cjsKQEAgLTY1 MCw2ICs2NTUsNyBAQCBzdHJ1Y3QgZHdvX3NlY3Rpb25zCiAgIHN0cnVjdCBkd2FyZjJfc2VjdGlv bl9pbmZvIGxvY2xpc3RzOwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25faW5mbyBtYWNpbmZvOwog ICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25faW5mbyBtYWNybzsKKyAgc3RydWN0IGR3YXJmMl9zZWN0 aW9uX2luZm8gcm5nbGlzdHM7CiAgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9pbmZvIHN0cjsKICAg c3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gc3RyX29mZnNldHM7CiAgIC8qIEluIHRoZSBjYXNl IG9mIGEgdmlydHVhbCBEV08gZmlsZSwgdGhlc2UgdHdvIGFyZSB1bnVzZWQuICAqLwpAQCAtMTM3 OSwxMSArMTM4NSwxNiBAQCBzdGF0aWMgdm9pZCByZWFkX2NhbGxfc2l0ZV9zY29wZSAoc3RydWN0 IGRpZV9pbmZvICpkaWUsIHN0cnVjdCBkd2FyZjJfY3UgKmN1KTsKIHN0YXRpYyB2b2lkIHJlYWRf dmFyaWFibGUgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSk7CiAK IHN0YXRpYyBpbnQgZHdhcmYyX3Jhbmdlc19yZWFkICh1bnNpZ25lZCwgQ09SRV9BRERSICosIENP UkVfQUREUiAqLAotCQkJICAgICAgIHN0cnVjdCBkd2FyZjJfY3UgKiwgZHdhcmYyX3BzeW10YWIg Kik7CisJCQkgICAgICAgc3RydWN0IGR3YXJmMl9jdSAqLCBkd2FyZjJfcHN5bXRhYiAqLAorCQkJ ICAgICAgIGR3YXJmX3RhZyk7CiAKIC8qIFJldHVybiB0aGUgLmRlYnVnX2xvY2xpc3RzIHNlY3Rp b24gdG8gdXNlIGZvciBjdS4gICovCiBzdGF0aWMgc3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8g KmN1X2RlYnVnX2xvY19zZWN0aW9uIChzdHJ1Y3QgZHdhcmYyX2N1ICpjdSk7CiAKKy8qIFJldHVy biB0aGUgLmRlYnVnX3JuZ2xpc3RzIHNlY3Rpb24gdG8gdXNlIGZvciBjdS4gICovCitzdGF0aWMg c3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gKmN1X2RlYnVnX3JuZ2xpc3Rfc2VjdGlvbgorICAo c3RydWN0IGR3YXJmMl9jdSAqY3UpOworCiAvKiBIb3cgZHdhcmYyX2dldF9wY19ib3VuZHMgY29u c3RydWN0ZWQgaXRzICpMT1dQQyBhbmQgKkhJR0hQQyByZXR1cm4KICAgIHZhbHVlcy4gIEtlZXAg dGhlIGl0ZW1zIG9yZGVyZWQgd2l0aCBpbmNyZWFzaW5nIGNvbnN0cmFpbnRzIGNvbXBsaWFuY2Uu ICAqLwogZW51bSBwY19ib3VuZHNfa2luZApAQCAtNzIzMSw2ICs3MjQyLDggQEAgY3V0dV9yZWFk ZXI6OmN1dHVfcmVhZGVyIChkd2FyZjJfcGVyX2N1X2RhdGEgKnRoaXNfY3UsCiAJICAgICAgZHVt bXlfcCA9IHRydWU7CiAJICAgICAgcmV0dXJuOwogCSAgICB9CisgICAgICAgICAgaWYgKGNvbXBf dW5pdF9kaWUtPmF0dHIgKERXX0FUX3JhbmdlcykgIT0gbnVsbHB0cikKKyAgICAgICAgICAgICAg Y3UtPmN1X3Jhbmdlc19mcm9tX3NrZWxldG9uID0gdHJ1ZTsKIAkgIGNvbXBfdW5pdF9kaWUgPSBk d29fY29tcF91bml0X2RpZTsKIAl9CiAgICAgICBlbHNlCkBAIC0xMjQ0OCw2ICsxMjQ2MSwxMSBA QCBkd2FyZjJfbG9jYXRlX2R3b19zZWN0aW9ucyAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjdHAs IHZvaWQgKmR3b19zZWN0aW9uc19wdHIpCiAgICAgICBkd29fc2VjdGlvbnMtPm1hY3JvLnMuc2Vj dGlvbiA9IHNlY3RwOwogICAgICAgZHdvX3NlY3Rpb25zLT5tYWNyby5zaXplID0gYmZkX3NlY3Rp b25fc2l6ZSAoc2VjdHApOwogICAgIH0KKyAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cC0+ bmFtZSwgJm5hbWVzLT5ybmdsaXN0c19kd28pKQorICAgIHsKKyAgICAgIGR3b19zZWN0aW9ucy0+ cm5nbGlzdHMucy5zZWN0aW9uID0gc2VjdHA7CisgICAgICBkd29fc2VjdGlvbnMtPnJuZ2xpc3Rz LnNpemUgPSBiZmRfc2VjdGlvbl9zaXplIChzZWN0cCk7CisgICAgfQogICBlbHNlIGlmIChzZWN0 aW9uX2lzX3AgKHNlY3RwLT5uYW1lLCAmbmFtZXMtPnN0cl9kd28pKQogICAgIHsKICAgICAgIGR3 b19zZWN0aW9ucy0+c3RyLnMuc2VjdGlvbiA9IHNlY3RwOwpAQCAtMTM3OTIsNyArMTM4MTAsNyBA QCByZWFkX3ZhcmlhYmxlIChzdHJ1Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0IGR3YXJmMl9jdSAq Y3UpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2FsbGJhY2s+CiBzdGF0aWMgYm9vbAogZHdhcmYyX3Ju Z2xpc3RzX3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3YXJmMl9jdSAqY3UsCi0J CQkgQ2FsbGJhY2sgJiZjYWxsYmFjaykKKwkJCSBkd2FyZl90YWcgdGFnLCBDYWxsYmFjayAmJmNh bGxiYWNrKQogewogICBkd2FyZjJfcGVyX29iamZpbGUgKnBlcl9vYmpmaWxlID0gY3UtPnBlcl9v YmpmaWxlOwogICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSA9IHBlcl9vYmpmaWxlLT5vYmpmaWxl OwpAQCAtMTM4MDIsMTcgKzEzODIwLDM2IEBAIGR3YXJmMl9ybmdsaXN0c19wcm9jZXNzICh1bnNp Z25lZCBvZmZzZXQsIHN0cnVjdCBkd2FyZjJfY3UgKmN1LAogICBjb25zdCBnZGJfYnl0ZSAqYnVm ZmVyOwogICBDT1JFX0FERFIgYmFzZWFkZHI7CiAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKKyAg VUxPTkdFU1QgYWRkcl9pbmRleDsKKyAgYm9vbCBpZ25vcmVfZHdvX3VuaXQgPSBmYWxzZTsKKyAg c3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gKnJuZ2xpc3RzX3NlY3Rpb247CiAKICAgYmFzZSA9 IGN1LT5iYXNlX2FkZHJlc3M7CiAKLSAgcGVyX29iamZpbGUtPnBlcl9iZmQtPnJuZ2xpc3RzLnJl YWQgKG9iamZpbGUpOwotICBpZiAob2Zmc2V0ID49IHBlcl9vYmpmaWxlLT5wZXJfYmZkLT5ybmds aXN0cy5zaXplKQorICAvKiBJZiB0aGUgRFdfQVRfcmFuZ2VzIGF0dHJpYnV0ZSB3YXMgcGFydCBv ZiBhIERXX1RBR19za2VsZXRvbl91bml0IHRoYXQgd2FzCisgICAgIGNoYW5nZWQgaW50byBhIERX X1RBR19jb21waWxlX3VuaXQgYWZ0ZXIgY2FsbGluZyByZWFkX2N1dHVfZGllX2Zyb21fZHdvLAor ICAgICB3ZSB3YW50IHRvIHVzZSB0aGUgcm5nbGlzdCBpbiB0aGUgb2JqZmlsZSByYXRoZXIgdGhh biB0aGUgb25lIGluIHRoZQorICAgICBkd29fdW5pdC4gKi8KKyAgaWYgKHRhZyA9PSBEV19UQUdf Y29tcGlsZV91bml0CisgICAgICAmJiBjdS0+Y3VfcmFuZ2VzX2Zyb21fc2tlbGV0b24pCisgICAg aWdub3JlX2R3b191bml0ID0gdHJ1ZTsKKworICAvKiBFbHNlLCBpZiB0aGVyZSdzIGEgZHdvX3Vu aXQsIHdlIHdhbnQgdGhlIHJuZ2xpc3QgZnJvbSB0aGUgZHdvIGZpbGUuICAqLworICBpZiAoY3Ut PmR3b191bml0CisgICAgICAmJiBjdS0+ZHdvX3VuaXQtPmR3b19maWxlLT5zZWN0aW9ucy5ybmds aXN0cy5zaXplID4gMAorICAgICAgJiYgIWlnbm9yZV9kd29fdW5pdCkKKyAgICAgIHJuZ2xpc3Rz X3NlY3Rpb24gPSAmY3UtPmR3b191bml0LT5kd29fZmlsZS0+c2VjdGlvbnMucm5nbGlzdHM7Cisg IGVsc2UKKyAgICAgIHJuZ2xpc3RzX3NlY3Rpb24gPSAmcGVyX29iamZpbGUtPnBlcl9iZmQtPnJu Z2xpc3RzOworCisgIHJuZ2xpc3RzX3NlY3Rpb24tPnJlYWQgKG9iamZpbGUpOworICBpZiAob2Zm c2V0ID49IHJuZ2xpc3RzX3NlY3Rpb24tPnNpemUpCiAgICAgewogICAgICAgY29tcGxhaW50IChf KCJPZmZzZXQgJWQgb3V0IG9mIGJvdW5kcyBmb3IgRFdfQVRfcmFuZ2VzIGF0dHJpYnV0ZSIpLAog CQkgb2Zmc2V0KTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gIGJ1ZmZlciA9IHBlcl9v YmpmaWxlLT5wZXJfYmZkLT5ybmdsaXN0cy5idWZmZXIgKyBvZmZzZXQ7CisgIGJ1ZmZlciA9IHJu Z2xpc3RzX3NlY3Rpb24tPmJ1ZmZlciArIG9mZnNldDsKIAogICBiYXNlYWRkciA9IG9iamZpbGUt PnRleHRfc2VjdGlvbl9vZmZzZXQgKCk7CiAKQEAgLTEzODIwLDggKzEzODU3LDggQEAgZHdhcmYy X3JuZ2xpc3RzX3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3YXJmMl9jdSAqY3Us CiAgICAgewogICAgICAgLyogSW5pdGlhbGl6ZSBpdCBkdWUgdG8gYSBmYWxzZSBjb21waWxlciB3 YXJuaW5nLiAgKi8KICAgICAgIENPUkVfQUREUiByYW5nZV9iZWdpbm5pbmcgPSAwLCByYW5nZV9l bmQgPSAwOwotICAgICAgY29uc3QgZ2RiX2J5dGUgKmJ1Zl9lbmQgPSAocGVyX29iamZpbGUtPnBl cl9iZmQtPnJuZ2xpc3RzLmJ1ZmZlcgotCQkJCSArIHBlcl9vYmpmaWxlLT5wZXJfYmZkLT5ybmds aXN0cy5zaXplKTsKKyAgICAgIGNvbnN0IGdkYl9ieXRlICpidWZfZW5kID0gKHJuZ2xpc3RzX3Nl Y3Rpb24tPmJ1ZmZlcgorCQkJCSArIHJuZ2xpc3RzX3NlY3Rpb24tPnNpemUpOwogICAgICAgdW5z aWduZWQgaW50IGJ5dGVzX3JlYWQ7CiAKICAgICAgIGlmIChidWZmZXIgPT0gYnVmX2VuZCkKQEAg LTEzODQzLDYgKzEzODgwLDExIEBAIGR3YXJmMl9ybmdsaXN0c19wcm9jZXNzICh1bnNpZ25lZCBv ZmZzZXQsIHN0cnVjdCBkd2FyZjJfY3UgKmN1LAogCSAgYmFzZSA9IGN1LT5oZWFkZXIucmVhZF9h ZGRyZXNzIChvYmZkLCBidWZmZXIsICZieXRlc19yZWFkKTsKIAkgIGJ1ZmZlciArPSBieXRlc19y ZWFkOwogCSAgYnJlYWs7CisgICAgICAgIGNhc2UgRFdfUkxFX2Jhc2VfYWRkcmVzc3g6CisgICAg ICAgICAgYWRkcl9pbmRleCA9IHJlYWRfdW5zaWduZWRfbGViMTI4IChvYmZkLCBidWZmZXIsICZi eXRlc19yZWFkKTsKKyAgICAgICAgICBidWZmZXIgKz0gYnl0ZXNfcmVhZDsKKyAgICAgICAgICBi YXNlID0gcmVhZF9hZGRyX2luZGV4IChjdSwgYWRkcl9pbmRleCk7CisgICAgICAgICAgYnJlYWs7 CiAJY2FzZSBEV19STEVfc3RhcnRfbGVuZ3RoOgogCSAgaWYgKGJ1ZmZlciArIGN1LT5oZWFkZXIu YWRkcl9zaXplID4gYnVmX2VuZCkKIAkgICAgewpAQCAtMTM4NjEsNiArMTM5MDMsMTkgQEAgZHdh cmYyX3JuZ2xpc3RzX3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3YXJmMl9jdSAq Y3UsCiAJICAgICAgYnJlYWs7CiAJICAgIH0KIAkgIGJyZWFrOworCWNhc2UgRFdfUkxFX3N0YXJ0 eF9sZW5ndGg6CisgICAgICAgICAgYWRkcl9pbmRleCA9IHJlYWRfdW5zaWduZWRfbGViMTI4IChv YmZkLCBidWZmZXIsICZieXRlc19yZWFkKTsKKyAgICAgICAgICBidWZmZXIgKz0gYnl0ZXNfcmVh ZDsKKyAgICAgICAgICByYW5nZV9iZWdpbm5pbmcgPSByZWFkX2FkZHJfaW5kZXggKGN1LCBhZGRy X2luZGV4KTsKKyAgICAgICAgICBpZiAoYnVmZmVyID4gYnVmX2VuZCkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgb3ZlcmZsb3cgPSB0cnVlOworICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICByYW5nZV9lbmQgPSAocmFuZ2VfYmVnaW5uaW5nCisgICAg ICAgICAgICAgICAgICAgICAgICsgcmVhZF91bnNpZ25lZF9sZWIxMjggKG9iZmQsIGJ1ZmZlciwg JmJ5dGVzX3JlYWQpKTsKKyAgICAgICAgICBidWZmZXIgKz0gYnl0ZXNfcmVhZDsKKyAgICAgICAg ICBicmVhazsKIAljYXNlIERXX1JMRV9vZmZzZXRfcGFpcjoKIAkgIHJhbmdlX2JlZ2lubmluZyA9 IHJlYWRfdW5zaWduZWRfbGViMTI4IChvYmZkLCBidWZmZXIsICZieXRlc19yZWFkKTsKIAkgIGJ1 ZmZlciArPSBieXRlc19yZWFkOwpAQCAtMTM4ODksNyArMTM5NDQsMjAgQEAgZHdhcmYyX3JuZ2xp c3RzX3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3YXJmMl9jdSAqY3UsCiAJICBy YW5nZV9lbmQgPSBjdS0+aGVhZGVyLnJlYWRfYWRkcmVzcyAob2JmZCwgYnVmZmVyLCAmYnl0ZXNf cmVhZCk7CiAJICBidWZmZXIgKz0gYnl0ZXNfcmVhZDsKIAkgIGJyZWFrOwotCWRlZmF1bHQ6CisJ Y2FzZSBEV19STEVfc3RhcnR4X2VuZHg6CisgICAgICAgICAgYWRkcl9pbmRleCA9IHJlYWRfdW5z aWduZWRfbGViMTI4IChvYmZkLCBidWZmZXIsICZieXRlc19yZWFkKTsKKyAgICAgICAgICBidWZm ZXIgKz0gYnl0ZXNfcmVhZDsKKyAgICAgICAgICByYW5nZV9iZWdpbm5pbmcgPSByZWFkX2FkZHJf aW5kZXggKGN1LCBhZGRyX2luZGV4KTsKKyAgICAgICAgICBpZiAoYnVmZmVyID4gYnVmX2VuZCkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgb3ZlcmZsb3cgPSB0cnVlOworICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBhZGRyX2luZGV4ID0gcmVhZF91 bnNpZ25lZF9sZWIxMjggKG9iZmQsIGJ1ZmZlciwgJmJ5dGVzX3JlYWQpOworICAgICAgICAgIGJ1 ZmZlciArPSBieXRlc19yZWFkOworICAgICAgICAgIHJhbmdlX2VuZCA9IHJlYWRfYWRkcl9pbmRl eCAoY3UsIGFkZHJfaW5kZXgpOworICAgICAgICAgIGJyZWFrOworIAlkZWZhdWx0OgogCSAgY29t cGxhaW50IChfKCJJbnZhbGlkIC5kZWJ1Z19ybmdsaXN0cyBkYXRhIChubyBiYXNlIGFkZHJlc3Mp IikpOwogCSAgcmV0dXJuIGZhbHNlOwogCX0KQEAgLTEzOTE3LDggKzEzOTg1LDEyIEBAIGR3YXJm Ml9ybmdsaXN0c19wcm9jZXNzICh1bnNpZ25lZCBvZmZzZXQsIHN0cnVjdCBkd2FyZjJfY3UgKmN1 LAogICAgICAgaWYgKHJhbmdlX2JlZ2lubmluZyA9PSByYW5nZV9lbmQpCiAJY29udGludWU7CiAK LSAgICAgIHJhbmdlX2JlZ2lubmluZyArPSAqYmFzZTsKLSAgICAgIHJhbmdlX2VuZCArPSAqYmFz ZTsKKyAgICAgIC8qIE9ubHkgRFdfUkxFX29mZnNldF9wYWlyIG5lZWRzIHRoZSBiYXNlIGFkZHJl c3MgYWRkZWQuICAqLworICAgICAgaWYgKHJsZXQgPT0gRFdfUkxFX29mZnNldF9wYWlyKQorCXsK KwkgIHJhbmdlX2JlZ2lubmluZyArPSAqYmFzZTsKKwkgIHJhbmdlX2VuZCArPSAqYmFzZTsKKwl9 CiAKICAgICAgIC8qIEEgbm90LXVuY29tbW9uIGNhc2Ugb2YgYmFkIGRlYnVnIGluZm8uCiAJIERv bid0IHBvbGx1dGUgdGhlIGFkZHJtYXAgd2l0aCBiYWQgZGF0YS4gICovCkBAIC0xMzk1MSw3ICsx NDAyMyw3IEBAIGR3YXJmMl9ybmdsaXN0c19wcm9jZXNzICh1bnNpZ25lZCBvZmZzZXQsIHN0cnVj dCBkd2FyZjJfY3UgKmN1LAogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2FsbGJhY2s+CiBzdGF0aWMg aW50Ci1kd2FyZjJfcmFuZ2VzX3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3YXJm Ml9jdSAqY3UsCitkd2FyZjJfcmFuZ2VzX3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0 IGR3YXJmMl9jdSAqY3UsIGR3YXJmX3RhZyB0YWcsCiAJCSAgICAgICBDYWxsYmFjayAmJmNhbGxi YWNrKQogewogICBkd2FyZjJfcGVyX29iamZpbGUgKnBlcl9vYmpmaWxlID0gY3UtPnBlcl9vYmpm aWxlOwpAQCAtMTM5NjcsNyArMTQwMzksNyBAQCBkd2FyZjJfcmFuZ2VzX3Byb2Nlc3MgKHVuc2ln bmVkIG9mZnNldCwgc3RydWN0IGR3YXJmMl9jdSAqY3UsCiAgIENPUkVfQUREUiBiYXNlYWRkcjsK IAogICBpZiAoY3VfaGVhZGVyLT52ZXJzaW9uID49IDUpCi0gICAgcmV0dXJuIGR3YXJmMl9ybmds aXN0c19wcm9jZXNzIChvZmZzZXQsIGN1LCBjYWxsYmFjayk7CisgICAgcmV0dXJuIGR3YXJmMl9y bmdsaXN0c19wcm9jZXNzIChvZmZzZXQsIGN1LCB0YWcsIGNhbGxiYWNrKTsKIAogICBiYXNlID0g Y3UtPmJhc2VfYWRkcmVzczsKIApAQCAtMTQwNTMsNyArMTQxMjUsNyBAQCBkd2FyZjJfcmFuZ2Vz X3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3YXJmMl9jdSAqY3UsCiBzdGF0aWMg aW50CiBkd2FyZjJfcmFuZ2VzX3JlYWQgKHVuc2lnbmVkIG9mZnNldCwgQ09SRV9BRERSICpsb3df cmV0dXJuLAogCQkgICAgQ09SRV9BRERSICpoaWdoX3JldHVybiwgc3RydWN0IGR3YXJmMl9jdSAq Y3UsCi0JCSAgICBkd2FyZjJfcHN5bXRhYiAqcmFuZ2VzX3BzdCkKKwkJICAgIGR3YXJmMl9wc3lt dGFiICpyYW5nZXNfcHN0LCBkd2FyZl90YWcgdGFnKQogewogICBzdHJ1Y3Qgb2JqZmlsZSAqb2Jq ZmlsZSA9IGN1LT5wZXJfb2JqZmlsZS0+b2JqZmlsZTsKICAgc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2ggPSBvYmpmaWxlLT5hcmNoICgpOwpAQCAtMTQwNjMsNyArMTQxMzUsNyBAQCBkd2FyZjJfcmFu Z2VzX3JlYWQgKHVuc2lnbmVkIG9mZnNldCwgQ09SRV9BRERSICpsb3dfcmV0dXJuLAogICBDT1JF X0FERFIgaGlnaCA9IDA7CiAgIGludCByZXR2YWw7CiAKLSAgcmV0dmFsID0gZHdhcmYyX3Jhbmdl c19wcm9jZXNzIChvZmZzZXQsIGN1LAorICByZXR2YWwgPSBkd2FyZjJfcmFuZ2VzX3Byb2Nlc3Mg KG9mZnNldCwgY3UsIHRhZywKICAgICBbJl0gKENPUkVfQUREUiByYW5nZV9iZWdpbm5pbmcsIENP UkVfQUREUiByYW5nZV9lbmQpCiAgICAgewogICAgICAgaWYgKHJhbmdlc19wc3QgIT0gTlVMTCkK QEAgLTE0MTU2LDcgKzE0MjI4LDggQEAgZHdhcmYyX2dldF9wY19ib3VuZHMgKHN0cnVjdCBkaWVf aW5mbyAqZGllLCBDT1JFX0FERFIgKmxvd3BjLAogCSAgLyogRFdfQVRfcm5nbGlzdHNfYmFzZSBk b2VzIG5vdCBhcHBseSB0byBESUVzIGZyb20gdGhlIERXTyBza2VsZXRvbi4KIAkgICAgIFdlIHRh a2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgRFdfQVRfcmFuZ2VzIGRvZXMgbm90IGFwcGVh cgogCSAgICAgaW4gRFdfVEFHX2NvbXBpbGVfdW5pdCBvZiBEV08gZmlsZXMuICAqLwotCSAgaW50 IG5lZWRfcmFuZ2VzX2Jhc2UgPSBkaWUtPnRhZyAhPSBEV19UQUdfY29tcGlsZV91bml0OworCSAg aW50IG5lZWRfcmFuZ2VzX2Jhc2UgPSAoZGllLT50YWcgIT0gRFdfVEFHX2NvbXBpbGVfdW5pdAor CQkJCSAgJiYgYXR0ci0+Zm9ybSAhPSBEV19GT1JNX3JuZ2xpc3R4KTsKIAkgIHVuc2lnbmVkIGlu dCByYW5nZXNfb2Zmc2V0ID0gKERXX1VOU05EIChhdHRyKQogCQkJCQkrIChuZWVkX3Jhbmdlc19i YXNlCiAJCQkJCSAgID8gY3UtPnJhbmdlc19iYXNlCkBAIC0xNDE2NCw3ICsxNDIzNyw4IEBAIGR3 YXJmMl9nZXRfcGNfYm91bmRzIChzdHJ1Y3QgZGllX2luZm8gKmRpZSwgQ09SRV9BRERSICpsb3dw YywKIAogCSAgLyogVmFsdWUgb2YgdGhlIERXX0FUX3JhbmdlcyBhdHRyaWJ1dGUgaXMgdGhlIG9m ZnNldCBpbiB0aGUKIAkgICAgIC5kZWJ1Z19yYW5nZXMgc2VjdGlvbi4gICovCi0JICBpZiAoIWR3 YXJmMl9yYW5nZXNfcmVhZCAocmFuZ2VzX29mZnNldCwgJmxvdywgJmhpZ2gsIGN1LCBwc3QpKQor CSAgaWYgKCFkd2FyZjJfcmFuZ2VzX3JlYWQgKHJhbmdlc19vZmZzZXQsICZsb3csICZoaWdoLCBj dSwgcHN0LAorCQkJCSAgIGRpZS0+dGFnKSkKIAkgICAgcmV0dXJuIFBDX0JPVU5EU19JTlZBTElE OwogCSAgLyogRm91bmQgZGlzY29udGludW91cyByYW5nZSBvZiBhZGRyZXNzZXMuICAqLwogCSAg cmV0ID0gUENfQk9VTkRTX1JBTkdFUzsKQEAgLTE0MzI3LDcgKzE0NDAxLDggQEAgZHdhcmYyX3Jl Y29yZF9ibG9ja19yYW5nZXMgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1Y3QgYmxvY2sgKmJs b2NrLAogICAgICAgLyogRFdfQVRfcm5nbGlzdHNfYmFzZSBkb2VzIG5vdCBhcHBseSB0byBESUVz IGZyb20gdGhlIERXTyBza2VsZXRvbi4KIAkgV2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3Qg dGhhdCBEV19BVF9yYW5nZXMgZG9lcyBub3QgYXBwZWFyCiAJIGluIERXX1RBR19jb21waWxlX3Vu aXQgb2YgRFdPIGZpbGVzLiAgKi8KLSAgICAgIGludCBuZWVkX3Jhbmdlc19iYXNlID0gZGllLT50 YWcgIT0gRFdfVEFHX2NvbXBpbGVfdW5pdDsKKyAgICAgIGludCBuZWVkX3Jhbmdlc19iYXNlID0g KGRpZS0+dGFnICE9IERXX1RBR19jb21waWxlX3VuaXQKKwkJCSAgICAgICYmIGF0dHItPmZvcm0g IT0gRFdfRk9STV9ybmdsaXN0eCk7CiAKICAgICAgIC8qIFRoZSB2YWx1ZSBvZiB0aGUgRFdfQVRf cmFuZ2VzIGF0dHJpYnV0ZSBpcyB0aGUgb2Zmc2V0IG9mIHRoZQogICAgICAgICAgYWRkcmVzcyBy YW5nZSBsaXN0IGluIHRoZSAuZGVidWdfcmFuZ2VzIHNlY3Rpb24uICAqLwpAQCAtMTQzMzUsNyAr MTQ0MTAsNyBAQCBkd2FyZjJfcmVjb3JkX2Jsb2NrX3JhbmdlcyAoc3RydWN0IGRpZV9pbmZvICpk aWUsIHN0cnVjdCBibG9jayAqYmxvY2ssCiAJCQkgICAgICArIChuZWVkX3Jhbmdlc19iYXNlID8g Y3UtPnJhbmdlc19iYXNlIDogMCkpOwogCiAgICAgICBzdGQ6OnZlY3RvcjxibG9ja3JhbmdlPiBi bG9ja3ZlYzsKLSAgICAgIGR3YXJmMl9yYW5nZXNfcHJvY2VzcyAob2Zmc2V0LCBjdSwKKyAgICAg IGR3YXJmMl9yYW5nZXNfcHJvY2VzcyAob2Zmc2V0LCBjdSwgZGllLT50YWcsCiAJWyZdIChDT1JF X0FERFIgc3RhcnQsIENPUkVfQUREUiBlbmQpCiAJewogCSAgc3RhcnQgKz0gYmFzZWFkZHI7CkBA IC0xODE2NSw2ICsxODI0MCwxMSBAQCByZWFkX2Z1bGxfZGllXzEgKGNvbnN0IHN0cnVjdCBkaWVf cmVhZGVyX3NwZWNzICpyZWFkZXIsCiAgIGF1dG8gbWF5YmVfYWRkcl9iYXNlID0gZGllLT5hZGRy X2Jhc2UgKCk7CiAgIGlmIChtYXliZV9hZGRyX2Jhc2UuaGFzX3ZhbHVlICgpKQogICAgIGN1LT5h ZGRyX2Jhc2UgPSAqbWF5YmVfYWRkcl9iYXNlOworCisgIGF0dHIgPSBkaWUtPmF0dHIgKERXX0FU X3JuZ2xpc3RzX2Jhc2UpOworICBpZiAoYXR0ciAhPSBudWxscHRyKQorICAgIGN1LT5yYW5nZXNf YmFzZSA9IERXX1VOU05EIChhdHRyKTsKKwogICBmb3IgKGludCBpbmRleCA6IGluZGV4ZXNfdGhh dF9uZWVkX3JlcHJvY2VzcykKICAgICByZWFkX2F0dHJpYnV0ZV9yZXByb2Nlc3MgKHJlYWRlciwg JmRpZS0+YXR0cnNbaW5kZXhdKTsKICAgKmRpZXAgPSBkaWU7CkBAIC0xODY4NCw3ICsxODc2NCw4 IEBAIHBhcnRpYWxfZGllX2luZm86OnJlYWQgKGNvbnN0IHN0cnVjdCBkaWVfcmVhZGVyX3NwZWNz ICpyZWFkZXIsCiAJICAgIC8qIEl0IHdvdWxkIGJlIG5pY2UgdG8gcmV1c2UgZHdhcmYyX2dldF9w Y19ib3VuZHMgaGVyZSwKIAkgICAgICAgYnV0IHRoYXQgcmVxdWlyZXMgYSBmdWxsIERJRSwgc28g aW5zdGVhZCB3ZSBqdXN0CiAJICAgICAgIHJlaW1wbGVtZW50IGl0LiAgKi8KLQkgICAgaW50IG5l ZWRfcmFuZ2VzX2Jhc2UgPSB0YWcgIT0gRFdfVEFHX2NvbXBpbGVfdW5pdDsKKwkgICAgaW50IG5l ZWRfcmFuZ2VzX2Jhc2UgPSAodGFnICE9IERXX1RBR19jb21waWxlX3VuaXQKKwkJCQkgICAgJiYg YXR0ci5mb3JtICE9IERXX0ZPUk1fcm5nbGlzdHgpOwogCSAgICB1bnNpZ25lZCBpbnQgcmFuZ2Vz X29mZnNldCA9IChEV19VTlNORCAoJmF0dHIpCiAJCQkJCSAgKyAobmVlZF9yYW5nZXNfYmFzZQog CQkJCQkgICAgID8gY3UtPnJhbmdlc19iYXNlCkBAIC0xODY5Myw3ICsxODc3NCw3IEBAIHBhcnRp YWxfZGllX2luZm86OnJlYWQgKGNvbnN0IHN0cnVjdCBkaWVfcmVhZGVyX3NwZWNzICpyZWFkZXIs CiAJICAgIC8qIFZhbHVlIG9mIHRoZSBEV19BVF9yYW5nZXMgYXR0cmlidXRlIGlzIHRoZSBvZmZz ZXQgaW4gdGhlCiAJICAgICAgIC5kZWJ1Z19yYW5nZXMgc2VjdGlvbi4gICovCiAJICAgIGlmIChk d2FyZjJfcmFuZ2VzX3JlYWQgKHJhbmdlc19vZmZzZXQsICZsb3dwYywgJmhpZ2hwYywgY3UsCi0J CQkJICAgIG51bGxwdHIpKQorCQkJCSAgICBudWxscHRyLCB0YWcpKQogCSAgICAgIGhhc19wY19p bmZvID0gMTsKIAkgIH0KIAkgIGJyZWFrOwpAQCAtMTkwOTQsNiArMTkxNzUsNDkgQEAgcmVhZF9s b2NsaXN0X2luZGV4IChzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwgVUxPTkdFU1QgbG9jbGlzdF9pbmRl eCkKICAgICByZXR1cm4gYmZkX2dldF82NCAoYWJmZCwgaW5mb19wdHIpICsgbG9jbGlzdF9iYXNl OwogfQogCisvKiBHaXZlbiBhIERXX0ZPUk1fcm5nbGlzdHggdmFsdWUgcm5nbGlzdF9pbmRleCwg ZmV0Y2ggdGhlIG9mZnNldCBmcm9tIHRoZQorICAgYXJyYXkgb2Ygb2Zmc2V0cyBpbiB0aGUgLmRl YnVnX3JuZ2xpc3RzIHNlY3Rpb24uICAqLworc3RhdGljIENPUkVfQUREUgorcmVhZF9ybmdsaXN0 X2luZGV4IChzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwgVUxPTkdFU1Qgcm5nbGlzdF9pbmRleCkKK3sK KyAgc3RydWN0IGR3YXJmMl9wZXJfb2JqZmlsZSAqZHdhcmYyX3Blcl9vYmpmaWxlID0gY3UtPnBl cl9vYmpmaWxlOworICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSA9IGR3YXJmMl9wZXJfb2JqZmls ZS0+b2JqZmlsZTsKKyAgYmZkICphYmZkID0gb2JqZmlsZS0+b2JmZDsKKyAgVUxPTkdFU1Qgcm5n bGlzdF9oZWFkZXJfc2l6ZSA9CisgICAgKGN1LT5oZWFkZXIuaW5pdGlhbF9sZW5ndGhfc2l6ZSA9 PSA0ID8gTE9DTElTVF9IRUFERVJfU0laRTMyCisgICAgIDogTE9DTElTVF9IRUFERVJfU0laRTY0 KTsKKyAgVUxPTkdFU1Qgcm5nbGlzdF9iYXNlID0KKyAgICAgIChjdS0+ZHdvX3VuaXQpID8gcm5n bGlzdF9oZWFkZXJfc2l6ZSA6IGN1LT5yYW5nZXNfYmFzZTsKKworICBzdHJ1Y3QgZHdhcmYyX3Nl Y3Rpb25faW5mbyAqc2VjdGlvbiA9IGN1X2RlYnVnX3JuZ2xpc3Rfc2VjdGlvbiAoY3UpOworICBp ZiAoc2VjdGlvbiA9PSBudWxscHRyKQorICAgIGVycm9yIChfKCJDYW5ub3QgZmluZCAuZGVidWdf cm5nbGlzdHMgc2VjdGlvbiBbaW4gbW9kdWxlICVzXSIpLAorCSAgIG9iamZpbGVfbmFtZShvYmpm aWxlKSk7CisgIHNlY3Rpb24tPnJlYWQgKG9iamZpbGUpOworICBpZiAoc2VjdGlvbi0+YnVmZmVy ID09IE5VTEwpCisgICAgZXJyb3IgKF8oIkRXX0ZPUk1fcm5nbGlzdHggdXNlZCB3aXRob3V0IC5k ZWJ1Z19ybmdsaXN0cyBzZWN0aW9uICIKKwkgICAgICJbaW4gbW9kdWxlICVzXSIpLAorICAgICAg IG9iamZpbGVfbmFtZSAob2JqZmlsZSkpOworICBzdHJ1Y3QgbG9jbGlzdF9oZWFkZXIgaGVhZGVy OworICByZWFkX2xvY2xpc3RfaGVhZGVyICgmaGVhZGVyLCBzZWN0aW9uKTsKKyAgaWYgKHJuZ2xp c3RfaW5kZXggPj0gaGVhZGVyLm9mZnNldF9lbnRyeV9jb3VudCkKKyAgICBlcnJvciAoXygiRFdf Rk9STV9ybmdsaXN0eCBpbmRleCBwb2ludGluZyBvdXRzaWRlIG9mICIKKwkgICAgICIuZGVidWdf cm5nbGlzdHMgb2Zmc2V0IGFycmF5IFtpbiBtb2R1bGUgJXNdIiksCisJICAgIG9iamZpbGVfbmFt ZShvYmpmaWxlKSk7CisgIGlmIChybmdsaXN0X2Jhc2UgKyBybmdsaXN0X2luZGV4ICogY3UtPmhl YWRlci5vZmZzZXRfc2l6ZQorICAgICAgICA+PSBzZWN0aW9uLT5zaXplKQorICAgIGVycm9yIChf KCJEV19GT1JNX3JuZ2xpc3R4IHBvaW50aW5nIG91dHNpZGUgb2YgIgorICAgICAgICAgICAgICIu ZGVidWdfcm5nbGlzdHMgc2VjdGlvbiBbaW4gbW9kdWxlICVzXSIpLAorICAgICAgICAgIG9iamZp bGVfbmFtZShvYmpmaWxlKSk7CisgIGNvbnN0IGdkYl9ieXRlICppbmZvX3B0cgorICAgID0gc2Vj dGlvbi0+YnVmZmVyICsgcm5nbGlzdF9iYXNlICsgcm5nbGlzdF9pbmRleCAqIGN1LT5oZWFkZXIu b2Zmc2V0X3NpemU7CisKKyAgaWYgKGN1LT5oZWFkZXIub2Zmc2V0X3NpemUgPT0gNCkKKyAgICBy ZXR1cm4gcmVhZF80X2J5dGVzIChhYmZkLCBpbmZvX3B0cikgKyBybmdsaXN0X2Jhc2U7CisgIGVs c2UKKyAgICByZXR1cm4gcmVhZF84X2J5dGVzIChhYmZkLCBpbmZvX3B0cikgKyBybmdsaXN0X2Jh c2U7Cit9CisKIC8qIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZXMgdGhhdCBoYWQgdG8gYmUgc2tpcHBl ZCBpbiB0aGUgZmlyc3Qgcm91bmQuIFRoZXNlCiAgICBhdHRyaWJ1dGVzIGFyZSB0aGUgb25lcyB0 aGF0IG5lZWQgc3RyX29mZnNldHNfYmFzZSBvciBhZGRyX2Jhc2UgYXR0cmlidXRlcy4KICAgIFRo ZXkgY291bGQgbm90IGhhdmUgYmVlbiBwcm9jZXNzZWQgaW4gdGhlIGZpcnN0IHJvdW5kLCBiZWNh dXNlIGF0IHRoZSB0aW1lCkBAIC0xOTExMiw2ICsxOTIzNiw5IEBAIHJlYWRfYXR0cmlidXRlX3Jl cHJvY2VzcyAoY29uc3Qgc3RydWN0IGRpZV9yZWFkZXJfc3BlY3MgKnJlYWRlciwKICAgICAgIGNh c2UgRFdfRk9STV9sb2NsaXN0eDoKIAkgRFdfVU5TTkQgKGF0dHIpID0gcmVhZF9sb2NsaXN0X2lu ZGV4IChjdSwgRFdfVU5TTkQgKGF0dHIpKTsKIAkgYnJlYWs7CisgICAgICBjYXNlIERXX0ZPUk1f cm5nbGlzdHg6CisgICAgICAgIERXX1VOU05EIChhdHRyKSA9IHJlYWRfcm5nbGlzdF9pbmRleCAo Y3UsIERXX1VOU05EIChhdHRyKSk7CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBEV19GT1JN X3N0cng6CiAgICAgICBjYXNlIERXX0ZPUk1fc3RyeDE6CiAgICAgICBjYXNlIERXX0ZPUk1fc3Ry eDI6CkBAIC0xOTI5Myw4ICsxOTQyMCwxMCBAQCByZWFkX2F0dHJpYnV0ZV92YWx1ZSAoY29uc3Qg c3RydWN0IGRpZV9yZWFkZXJfc3BlY3MgKnJlYWRlciwKICAgICAgIERXX1NORCAoYXR0cikgPSBy ZWFkX3NpZ25lZF9sZWIxMjggKGFiZmQsIGluZm9fcHRyLCAmYnl0ZXNfcmVhZCk7CiAgICAgICBp bmZvX3B0ciArPSBieXRlc19yZWFkOwogICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEV19GT1JNX3Vk YXRhOgogICAgIGNhc2UgRFdfRk9STV9ybmdsaXN0eDoKKyAgICAgICpuZWVkX3JlcHJvY2VzcyA9 IHRydWU7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgIGNhc2UgRFdfRk9STV91ZGF0YToK ICAgICAgIERXX1VOU05EIChhdHRyKSA9IHJlYWRfdW5zaWduZWRfbGViMTI4IChhYmZkLCBpbmZv X3B0ciwgJmJ5dGVzX3JlYWQpOwogICAgICAgaW5mb19wdHIgKz0gYnl0ZXNfcmVhZDsKICAgICAg IGJyZWFrOwpAQCAtMjMzODIsNiArMjM1MTEsMjUgQEAgY3VfZGVidWdfbG9jX3NlY3Rpb24gKHN0 cnVjdCBkd2FyZjJfY3UgKmN1KQogCQkJCSAgOiAmcGVyX29iamZpbGUtPnBlcl9iZmQtPmxvYyk7 CiB9CiAKKy8qIFJldHVybiB0aGUgLmRlYnVnX3JuZ2xpc3RzIHNlY3Rpb24gdG8gdXNlIGZvciBD VS4gICovCitzdGF0aWMgc3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gKgorY3VfZGVidWdfcm5n bGlzdF9zZWN0aW9uIChzdHJ1Y3QgZHdhcmYyX2N1ICpjdSkKK3sKKyAgaWYgKGN1LT5oZWFkZXIu dmVyc2lvbiA8IDUpCisgICAgZXJyb3IgKF8oIi5kZWJ1Z19ybmdsaXN0cyBzZWN0aW9uIGNhbm5v dCBiZSB1c2VkIGluIERXQVJGICVkIiksCisJICAgY3UtPmhlYWRlci52ZXJzaW9uKTsKKyAgc3Ry dWN0IGR3YXJmMl9wZXJfb2JqZmlsZSAqZHdhcmYyX3Blcl9vYmpmaWxlID0gY3UtPnBlcl9vYmpm aWxlOworCisgIGlmIChjdS0+ZHdvX3VuaXQpCisgICAgeworICAgICAgc3RydWN0IGR3b19zZWN0 aW9ucyAqc2VjdGlvbnMgPSAmY3UtPmR3b191bml0LT5kd29fZmlsZS0+c2VjdGlvbnM7CisKKyAg ICAgIGlmIChzZWN0aW9ucy0+cm5nbGlzdHMuc2l6ZSA+IDApCisJcmV0dXJuICZzZWN0aW9ucy0+ cm5nbGlzdHM7CisgICAgfQorICByZXR1cm4gJmR3YXJmMl9wZXJfb2JqZmlsZS0+cGVyX2JmZC0+ cm5nbGlzdHM7Cit9CisKIC8qIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgZmlsbHMgaW4gYSBkd2Fy ZjJfbG9jbGlzdF9iYXRvbi4gICovCiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9nZGIvdGVz dHN1aXRlL2dkYi5kd2FyZjIvZHc1LXJuZ2xpc3QtdGVzdC5jYyBiL2dkYi90ZXN0c3VpdGUvZ2Ri LmR3YXJmMi9kdzUtcm5nbGlzdC10ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjE3Zjc4ODQzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dk Yi5kd2FyZjIvZHc1LXJuZ2xpc3QtdGVzdC5jYwpAQCAtMCwwICsxLDg4IEBACisvKiBUaGlzIHRl c3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQg MjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHZlY3Rvcj4KKwor c3RydWN0IG5vZGUgeworICBpbnQgaWQ7CisgIG5vZGUgKmxlZnQ7CisgIG5vZGUgKnJpZ2h0Owor ICBib29sIHZpc2l0ZWQ7Cit9OworCitub2RlICBub2RlX2FycmF5WzUwXTsKK3Vuc2lnbmVkIGlu dCBDVVJfSURYID0gMDsKKworbm9kZSAqIG1ha2Vfbm9kZSAoaW50IHZhbCkKK3sKKyAgbm9kZSAq bmV3X25vZGUgPSAmKG5vZGVfYXJyYXlbQ1VSX0lEWCsrXSk7CisgIG5ld19ub2RlLT5sZWZ0ID0g TlVMTDsKKyAgbmV3X25vZGUtPnJpZ2h0ID0gTlVMTDsKKyAgbmV3X25vZGUtPmlkID0gdmFsOwor ICBuZXdfbm9kZS0+dmlzaXRlZCA9IGZhbHNlOworCisgIHJldHVybiBuZXdfbm9kZTsKK30KKwor dm9pZCB0cmVlX2luc2VydCAobm9kZSAqcm9vdCwgaW50IHZhbCkKK3sKKyAgaWYgKHZhbCA8IHJv b3QtPmlkKQorICAgIHsKKyAgICAgIGlmIChyb290LT5sZWZ0KQorICAgICAgICB0cmVlX2luc2Vy dCAocm9vdC0+bGVmdCwgdmFsKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcm9vdC0+bGVmdCA9IG1h a2Vfbm9kZSh2YWwpOworICAgIH0KKyAgZWxzZSBpZiAodmFsID4gcm9vdC0+aWQpCisgICAgewor ICAgICAgaWYgKHJvb3QtPnJpZ2h0KQorICAgICAgICB0cmVlX2luc2VydCAocm9vdC0+cmlnaHQs IHZhbCk7CisgICAgICBlbHNlCisgICAgICAgIHJvb3QtPnJpZ2h0ID0gbWFrZV9ub2RlKHZhbCk7 CisgICAgfQorfQorCit2b2lkIGlub3JkZXIobm9kZSAqcm9vdCkgeworICBzdGQ6OnZlY3Rvcjxu b2RlICo+IHRvZG87CisgIHRvZG8ucHVzaF9iYWNrKHJvb3QpOworICB3aGlsZSAoIXRvZG8uZW1w dHkoKSl7CisgICAgbm9kZSAqY3VyciA9IHRvZG8uYmFjaygpOworICAgIHRvZG8ucG9wX2JhY2so KTsgLyogYnJlYWstaGVyZSAqLworICAgIGlmIChjdXJyLT52aXNpdGVkKSB7CisgICAgICBzdGQ6 OmNvdXQgPDwgY3Vyci0+aWQgPDwgIiAiOworICAgIH0gZWxzZSB7CisgICAgICBjdXJyLT52aXNp dGVkID0gdHJ1ZTsKKyAgICAgIGlmIChjdXJyLT5yaWdodCkgeyB0b2RvLnB1c2hfYmFjayhjdXJy LT5yaWdodCk7IH0KKyAgICAgIHRvZG8ucHVzaF9iYWNrKGN1cnIpOworICAgICAgaWYgKGN1cnIt PmxlZnQpIHsgdG9kby5wdXNoX2JhY2soY3Vyci0+bGVmdCk7IH0KKyAgICB9CisgIH0KK30KKwor aW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgbm9kZSAqcm9vdCA9IG1ha2Vf bm9kZSAoMzUpOworCisgIHRyZWVfaW5zZXJ0IChyb290LCAyOCk7CisgIHRyZWVfaW5zZXJ0IChy b290LCAyMCk7CisgIHRyZWVfaW5zZXJ0IChyb290LCA2MCk7CisKKyAgaW5vcmRlciAocm9vdCk7 CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5kd2FyZjIv ZHc1LXJuZ2xpc3QtdGVzdC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc1LXJuZ2xp c3QtdGVzdC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYWY2YzM0 YjVkZAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmR3YXJmMi9kdzUtcm5n bGlzdC10ZXN0LmV4cApAQCAtMCwwICsxLDQwIEBACisjIENvcHlyaWdodCAyMDIwIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisj IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIENoZWNrIHRo YXQgR0RCIGNhbiBmaW5kIHRoZSB2YXJpYWJsZXMgaW4gYSBsZXhpY2FsIGJsb2NrIHdpdGggYQor IyBEV19GT1JNX3JuZ2xpc3R4IERXX0FUX3JhbmdlcyBmaWVsZC4gIFRoaXMgdGVzdCBpcyBpbnRl bmRlZCBmb3IgRFdBUkYtNSwKKyMgY29tcGlsZWQgd2l0aCBjbGFuZysrLgorCitzdGFuZGFyZF90 ZXN0ZmlsZSAuY2MKKworIyBUaGlzIHRlc3QgaXMgaW50ZW5kZWQgZm9yIHRhcmdldHMgd2hpY2gg c3VwcG9ydCBEV0FSRi01LgorIyBTaW5jZSB3ZSBwYXNzIGFuIGV4cGxpY2l0IC1nZHdhcmYtNSB0 byB0aGUgY29tcGlsZXIsCisjIHdlIGxldCB0aGF0IGJlIHRoZSB0ZXN0IG9mIHdoZXRoZXIgdGhl IHRhcmdldCBzdXBwb3J0cyBpdC4KKworaWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAiZmFpbGVk IHRvIHByZXBhcmUiICIke3Rlc3RmaWxlfSIgXAorICAgICAgICAgICRzcmNmaWxlIHtkZWJ1ZyBj KysgYWRkaXRpb25hbF9mbGFncz0tZ2R3YXJmLTUgXAorICAgICAgICAgICAgICAgICAgICAgICAg YWRkaXRpb25hbF9mbGFncz0tTzB9XSB9IHsKKyAgICByZXR1cm4gLTEKK30KKworaWYgIVtydW50 b19tYWluXSB7CisgICAgcmV0dXJuIC0xCit9CisKK2dkYl9icmVha3BvaW50IFtnZGJfZ2V0X2xp bmVfbnVtYmVyICJicmVhay1oZXJlIl0KK2dkYl9jb250aW51ZV90b19icmVha3BvaW50ICJicmVh ay1oZXJlIiAiLiogYnJlYWstaGVyZSAuKiIKKworZ2RiX3Rlc3QgInByaW50IGN1cnIiICJcXFwo bm9kZSBcXFwqXFxcKSAkaGV4IDxub2RlX2FycmF5PiIKK2dkYl90ZXN0ICJwcmludCAqY3VyciIg Ij0ge2lkID0gMzUsIGxlZnQgPSAkaGV4IDxub2RlX2FycmF5XFwrJGRlY2ltYWw+LCByaWdodCA9 ICRoZXggPG5vZGVfYXJyYXlcXCskZGVjaW1hbD4sIHZpc2l0ZWQgPSBmYWxzZX0iCi0tIAoyLjI3 LjAuMjEyLmdlOGJhMWNjOTg4LWdvb2cKCg== --0000000000000aff6e05a966b6ea--