From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 937B63875439 for ; Wed, 22 Jul 2020 16:25:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 937B63875439 Received: from pps.filterd (m0098393.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 06MG3ed2058865; Wed, 22 Jul 2020 12:25:45 -0400 Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 32ecpaqbns-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Jul 2020 12:25:45 -0400 Received: from m0098393.ppops.net (m0098393.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 06MG3cE2058712; Wed, 22 Jul 2020 12:25:45 -0400 Received: from ppma05fra.de.ibm.com (6c.4a.5195.ip4.static.sl-reverse.com [149.81.74.108]) by mx0a-001b2d01.pphosted.com with ESMTP id 32ecpaqbmj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Jul 2020 12:25:44 -0400 Received: from pps.filterd (ppma05fra.de.ibm.com [127.0.0.1]) by ppma05fra.de.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 06MGKYfG010423; Wed, 22 Jul 2020 16:25:42 GMT Received: from b06cxnps4075.portsmouth.uk.ibm.com (d06relay12.portsmouth.uk.ibm.com [9.149.109.197]) by ppma05fra.de.ibm.com with ESMTP id 32brq82s0b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Jul 2020 16:25:42 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 06MGPeMY62586948 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Jul 2020 16:25:40 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 179914C040; Wed, 22 Jul 2020 16:25:40 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9AEC64C046; Wed, 22 Jul 2020 16:25:37 +0000 (GMT) Received: from KewenLins-MacBook-Pro.local (unknown [9.197.238.225]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Wed, 22 Jul 2020 16:25:37 +0000 (GMT) Subject: Re: [PATCH v3] vect/rs6000: Support vector with length cost modeling To: richard.sandiford@arm.com Cc: GCC Patches , Bill Schmidt , Segher Boessenkool , Richard Biener References: <419f1fad-05be-115c-1a53-cb710ae7b2dc@linux.ibm.com> <1aeabdc7-0cf4-055b-a3ec-74c283053cf5@linux.ibm.com> From: "Kewen.Lin" Message-ID: Date: Thu, 23 Jul 2020 00:25:36 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.9.0 MIME-Version: 1.0 In-Reply-To: <1aeabdc7-0cf4-055b-a3ec-74c283053cf5@linux.ibm.com> Content-Type: multipart/mixed; boundary="------------A91C17B4CB79F34825D310DC" Content-Language: en-US X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235, 18.0.687 definitions=2020-07-22_09:2020-07-22, 2020-07-22 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 spamscore=0 impostorscore=0 clxscore=1015 suspectscore=1 phishscore=0 malwarescore=0 priorityscore=1501 adultscore=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2006250000 definitions=main-2007220107 X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Jul 2020 16:25:52 -0000 This is a multi-part message in MIME format. --------------A91C17B4CB79F34825D310DC Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hi, Sorry, please ignore the previously attached file, which isn't the latest one although almost are the same. The latest tested is attached here. Sorry for the inconvenience. BR, Kewen on 2020/7/22 下午11:48, Kewen.Lin via Gcc-patches wrote: > > It's a great idea, by following your subsequent suggestion to make the structure > like: > > - calculate peel_iters_prologue > - calculate peel_iters_epilogue > - add costs associated with peel_iters_prologue > - add costs associated with peel_iters_epilogue > - add costs related to branch taken/not_taken. > > the updated v3 is attached. > > Just bootstrapped/regtested on powerpc64le-linux-gnu (P9) with explicit > param vect-partial-vector-usage=1, I'll test it without partial vectors > setting, also on aarch64 later. > > BR, > Kewen > ----- > gcc/ChangeLog: > > * config/rs6000/rs6000.c (adjust_vect_cost_per_loop): New function. > (rs6000_finish_cost): Call adjust_vect_cost_per_loop. > * tree-vect-loop.c (vect_get_known_peeling_cost): Factor out some code > to determine peel_iters_epilogue to function ... > (vect_get_peel_iters_epilogue): ... this. New function. > (vect_estimate_min_profitable_iters): Add cost modeling for vector > with length, refactor cost calculation on peel_iters_prologue and > peel_iters_epilogue. > --------------A91C17B4CB79F34825D310DC Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="cost_v3.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="cost_v3.diff" ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jIGIvZ2NjL2NvbmZpZy9y czYwMDAvcnM2MDAwLmMKaW5kZXggMDA5YWZjNWY4OTQuLmQ3MWYyYmYxYzE2IDEwMDY0NAot LS0gYS9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYworKysgYi9nY2MvY29uZmlnL3JzNjAw MC9yczYwMDAuYwpAQCAtNTE3Nyw2ICs1MTc3LDM0IEBAIHJzNjAwMF9hZGRfc3RtdF9jb3N0 IChjbGFzcyB2ZWNfaW5mbyAqdmluZm8sIHZvaWQgKmRhdGEsIGludCBjb3VudCwKICAgcmV0 dXJuIHJldHZhbDsKIH0KIAorLyogRm9yIHNvbWUgdGFyZ2V0IHNwZWNpZmljIHZlY3Rvcml6 YXRpb24gY29zdCB3aGljaCBjYW4ndCBiZSBoYW5kbGVkIHBlciBzdG10LAorICAgd2UgY2hl Y2sgdGhlIHJlcXVpc2l0ZSBjb25kaXRpb25zIGFuZCBhZGp1c3QgdGhlIHZlY3Rvcml6YXRp b24gY29zdAorICAgYWNjb3JkaW5nbHkgaWYgc2F0aXNmaWVkLiAgT25lIHR5cGljYWwgZXhh bXBsZSBpcyB0byBtb2RlbCBzaGlmdCBjb3N0IGZvcgorICAgdmVjdG9yIHdpdGggbGVuZ3Ro IGJ5IGNvdW50aW5nIG51bWJlciBvZiByZXF1aXJlZCBsZW5ndGhzIHVuZGVyIGNvbmRpdGlv bgorICAgTE9PUF9WSU5GT19GVUxMWV9XSVRIX0xFTkdUSF9QLiAgKi8KKworc3RhdGljIHZv aWQKK2FkanVzdF92ZWN0X2Nvc3RfcGVyX2xvb3AgKHJzNjAwMF9jb3N0X2RhdGEgKmRhdGEp Cit7CisgIHN0cnVjdCBsb29wICpsb29wID0gZGF0YS0+bG9vcF9pbmZvOworICBnY2NfYXNz ZXJ0IChsb29wKTsKKyAgbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvID0gbG9vcF92ZWNfaW5m b19mb3JfbG9vcCAobG9vcCk7CisKKyAgaWYgKExPT1BfVklORk9fRlVMTFlfV0lUSF9MRU5H VEhfUCAobG9vcF92aW5mbykpCisgICAgeworICAgICAgcmdyb3VwX2NvbnRyb2xzICpyZ2M7 CisgICAgICB1bnNpZ25lZCBpbnQgbnVtX3ZlY3RvcnNfbTE7CisgICAgICB1bnNpZ25lZCBp bnQgc2hpZnRfY250ID0gMDsKKyAgICAgIEZPUl9FQUNIX1ZFQ19FTFQgKExPT1BfVklORk9f TEVOUyAobG9vcF92aW5mbyksIG51bV92ZWN0b3JzX20xLCByZ2MpCisJaWYgKHJnYy0+dHlw ZSkKKwkgIC8qIEVhY2ggbGVuZ3RoIG5lZWRzIG9uZSBzaGlmdCB0byBmaWxsIGludG8gYml0 cyAwLTcuICAqLworCSAgc2hpZnRfY250ICs9IChudW1fdmVjdG9yc19tMSArIDEpOworCisg ICAgICByczYwMDBfYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgKHZvaWQgKikgZGF0YSwg c2hpZnRfY250LCBzY2FsYXJfc3RtdCwKKwkJCSAgICBOVUxMLCBOVUxMX1RSRUUsIDAsIHZl Y3RfYm9keSk7CisgICAgfQorfQorCiAvKiBJbXBsZW1lbnQgdGFyZ2V0bS52ZWN0b3JpemUu ZmluaXNoX2Nvc3QuICAqLwogCiBzdGF0aWMgdm9pZApAQCAtNTE4Niw3ICs1MjE0LDEwIEBA IHJzNjAwMF9maW5pc2hfY29zdCAodm9pZCAqZGF0YSwgdW5zaWduZWQgKnByb2xvZ3VlX2Nv c3QsCiAgIHJzNjAwMF9jb3N0X2RhdGEgKmNvc3RfZGF0YSA9IChyczYwMDBfY29zdF9kYXRh KikgZGF0YTsKIAogICBpZiAoY29zdF9kYXRhLT5sb29wX2luZm8pCi0gICAgcnM2MDAwX2Rl bnNpdHlfdGVzdCAoY29zdF9kYXRhKTsKKyAgICB7CisgICAgICBhZGp1c3RfdmVjdF9jb3N0 X3Blcl9sb29wIChjb3N0X2RhdGEpOworICAgICAgcnM2MDAwX2RlbnNpdHlfdGVzdCAoY29z dF9kYXRhKTsKKyAgICB9CiAKICAgLyogRG9uJ3QgdmVjdG9yaXplIG1pbmltdW0tdmVjdG9y aXphdGlvbi1mYWN0b3IsIHNpbXBsZSBjb3B5IGxvb3BzCiAgICAgIHRoYXQgcmVxdWlyZSB2 ZXJzaW9uaW5nIGZvciBhbnkgcmVhc29uLiAgVGhlIHZlY3Rvcml6YXRpb24gaXMgYXQKZGlm ZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtbG9vcC5jIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmMK aW5kZXggZTkzMzQ0MWI5MjIuLjg3NDZjNWFlNTgyIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12 ZWN0LWxvb3AuYworKysgYi9nY2MvdHJlZS12ZWN0LWxvb3AuYwpAQCAtMzQ3NCw0MiArMzQ3 NCw1NiBAQCB2ZWN0X2lzX3NpbXBsZV9yZWR1Y3Rpb24gKGxvb3BfdmVjX2luZm8gbG9vcF9p bmZvLCBzdG10X3ZlY19pbmZvIHBoaV9pbmZvLAogICByZXR1cm4gTlVMTDsKIH0KIAotLyog Q2FsY3VsYXRlIGNvc3Qgb2YgcGVlbGluZyB0aGUgbG9vcCBQRUVMX0lURVJTX1BST0xPR1VF IHRpbWVzLiAgKi8KLWludAotdmVjdF9nZXRfa25vd25fcGVlbGluZ19jb3N0IChsb29wX3Zl Y19pbmZvIGxvb3BfdmluZm8sIGludCBwZWVsX2l0ZXJzX3Byb2xvZ3VlLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKnBlZWxfaXRlcnNfZXBpbG9ndWUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0bXRfdmVjdG9yX2Zvcl9jb3N0ICpzY2FsYXJfY29z dF92ZWMsCi0JCQkgICAgIHN0bXRfdmVjdG9yX2Zvcl9jb3N0ICpwcm9sb2d1ZV9jb3N0X3Zl YywKLQkJCSAgICAgc3RtdF92ZWN0b3JfZm9yX2Nvc3QgKmVwaWxvZ3VlX2Nvc3RfdmVjKQor LyogQ2FsY3VsYXRlIGhvdyBtYW55IGl0ZXJhdGlvbnMgcGVlbGVkIGZvciBlcGlsb2d1ZSB3 aXRoIGluZm9ybWF0aW9uIExPT1BfVklORk8KKyAgIGFuZCBQRUVMX0lURVJTX1BST0xPR1VF LiAgKi8KKworc3RhdGljIGludAordmVjdF9nZXRfcGVlbF9pdGVyc19lcGlsb2d1ZSAobG9v cF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBpbnQgcGVlbF9pdGVyc19wcm9sb2d1ZSkKIHsKLSAg aW50IHJldHZhbCA9IDA7CiAgIGludCBhc3N1bWVkX3ZmID0gdmVjdF92Zl9mb3JfY29zdCAo bG9vcF92aW5mbyk7Ci0KICAgaWYgKCFMT09QX1ZJTkZPX05JVEVSU19LTk9XTl9QIChsb29w X3ZpbmZvKSkKICAgICB7Ci0gICAgICAqcGVlbF9pdGVyc19lcGlsb2d1ZSA9IGFzc3VtZWRf dmYgLyAyOwogICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQotICAgICAgICBkdW1wX3By aW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLAorCWR1bXBfcHJpbnRmX2xvYyAo TVNHX05PVEUsIHZlY3RfbG9jYXRpb24sCiAJCQkgImNvc3QgbW9kZWw6IGVwaWxvZ3VlIHBl ZWwgaXRlcnMgc2V0IHRvIHZmLzIgIgogCQkJICJiZWNhdXNlIGxvb3AgaXRlcmF0aW9ucyBh cmUgdW5rbm93biAuXG4iKTsKLQotICAgICAgLyogSWYgcGVlbGVkIGl0ZXJhdGlvbnMgYXJl IGtub3duIGJ1dCBudW1iZXIgb2Ygc2NhbGFyIGxvb3AKLSAgICAgICAgIGl0ZXJhdGlvbnMg YXJlIHVua25vd24sIGNvdW50IGEgdGFrZW4gYnJhbmNoIHBlciBwZWVsZWQgbG9vcC4gICov Ci0gICAgICByZXR2YWwgPSByZWNvcmRfc3RtdF9jb3N0IChwcm9sb2d1ZV9jb3N0X3ZlYywg MSwgY29uZF9icmFuY2hfdGFrZW4sCi0JCQkJIE5VTEwsIE5VTExfVFJFRSwgMCwgdmVjdF9w cm9sb2d1ZSk7Ci0gICAgICByZXR2YWwgKz0gcmVjb3JkX3N0bXRfY29zdCAoZXBpbG9ndWVf Y29zdF92ZWMsIDEsIGNvbmRfYnJhbmNoX3Rha2VuLAotCQkJCSAgTlVMTCwgTlVMTF9UUkVF LCAwLCB2ZWN0X2VwaWxvZ3VlKTsKKyAgICAgIHJldHVybiBhc3N1bWVkX3ZmIC8gMjsKICAg ICB9CiAgIGVsc2UKICAgICB7CiAgICAgICBpbnQgbml0ZXJzID0gTE9PUF9WSU5GT19JTlRf TklURVJTIChsb29wX3ZpbmZvKTsKLSAgICAgIHBlZWxfaXRlcnNfcHJvbG9ndWUgPSBuaXRl cnMgPCBwZWVsX2l0ZXJzX3Byb2xvZ3VlID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuaXRlcnMgOiBwZWVsX2l0ZXJzX3Byb2xvZ3VlOwotICAgICAgKnBlZWxfaXRlcnNfZXBp bG9ndWUgPSAobml0ZXJzIC0gcGVlbF9pdGVyc19wcm9sb2d1ZSkgJSBhc3N1bWVkX3ZmOwor ICAgICAgaW50IG5wZWVsX3Byb2wKKwk9IG5pdGVycyA8IHBlZWxfaXRlcnNfcHJvbG9ndWUg PyBuaXRlcnMgOiBwZWVsX2l0ZXJzX3Byb2xvZ3VlOworICAgICAgaW50IG5wZWVsX2VwaWwg PSAobml0ZXJzIC0gbnBlZWxfcHJvbCkgJSBhc3N1bWVkX3ZmOwogICAgICAgLyogSWYgd2Ug bmVlZCB0byBwZWVsIGZvciBnYXBzLCBidXQgbm8gcGVlbGluZyBpcyByZXF1aXJlZCwgd2Ug aGF2ZSB0bwogCSBwZWVsIFZGIGl0ZXJhdGlvbnMuICAqLwotICAgICAgaWYgKExPT1BfVklO Rk9fUEVFTElOR19GT1JfR0FQUyAobG9vcF92aW5mbykgJiYgISpwZWVsX2l0ZXJzX2VwaWxv Z3VlKQotCSpwZWVsX2l0ZXJzX2VwaWxvZ3VlID0gYXNzdW1lZF92ZjsKKyAgICAgIGlmIChM T09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dBUFMgKGxvb3BfdmluZm8pICYmICFucGVlbF9lcGls KQorCW5wZWVsX2VwaWwgPSBhc3N1bWVkX3ZmOworICAgICAgcmV0dXJuIG5wZWVsX2VwaWw7 CisgICAgfQorfQorCisvKiBDYWxjdWxhdGUgY29zdCBvZiBwZWVsaW5nIHRoZSBsb29wIFBF RUxfSVRFUlNfUFJPTE9HVUUgdGltZXMuICAqLworaW50Cit2ZWN0X2dldF9rbm93bl9wZWVs aW5nX2Nvc3QgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgaW50IHBlZWxfaXRlcnNfcHJv bG9ndWUsCisJCQkgICAgIGludCAqcGVlbF9pdGVyc19lcGlsb2d1ZSwKKwkJCSAgICAgc3Rt dF92ZWN0b3JfZm9yX2Nvc3QgKnNjYWxhcl9jb3N0X3ZlYywKKwkJCSAgICAgc3RtdF92ZWN0 b3JfZm9yX2Nvc3QgKnByb2xvZ3VlX2Nvc3RfdmVjLAorCQkJICAgICBzdG10X3ZlY3Rvcl9m b3JfY29zdCAqZXBpbG9ndWVfY29zdF92ZWMpCit7CisgIGludCByZXR2YWwgPSAwOworCisg ICpwZWVsX2l0ZXJzX2VwaWxvZ3VlCisgICAgPSB2ZWN0X2dldF9wZWVsX2l0ZXJzX2VwaWxv Z3VlIChsb29wX3ZpbmZvLCBwZWVsX2l0ZXJzX3Byb2xvZ3VlKTsKKworICBpZiAoIUxPT1Bf VklORk9fTklURVJTX0tOT1dOX1AgKGxvb3BfdmluZm8pKQorICAgIHsKKyAgICAgIC8qIElm IHBlZWxlZCBpdGVyYXRpb25zIGFyZSBrbm93biBidXQgbnVtYmVyIG9mIHNjYWxhciBsb29w CisJIGl0ZXJhdGlvbnMgYXJlIHVua25vd24sIGNvdW50IGEgdGFrZW4gYnJhbmNoIHBlciBw ZWVsZWQgbG9vcC4gICovCisgICAgICByZXR2YWwgPSByZWNvcmRfc3RtdF9jb3N0IChwcm9s b2d1ZV9jb3N0X3ZlYywgMSwgY29uZF9icmFuY2hfdGFrZW4sIE5VTEwsCisJCQkJIE5VTExf VFJFRSwgMCwgdmVjdF9wcm9sb2d1ZSk7CisgICAgICByZXR2YWwgKz0gcmVjb3JkX3N0bXRf Y29zdCAoZXBpbG9ndWVfY29zdF92ZWMsIDEsIGNvbmRfYnJhbmNoX3Rha2VuLCBOVUxMLAor CQkJCSAgTlVMTF9UUkVFLCAwLCB2ZWN0X2VwaWxvZ3VlKTsKICAgICB9CiAKICAgc3RtdF9p bmZvX2Zvcl9jb3N0ICpzaTsKQEAgLTM2NTIsMjQgKzM2NjYsMTA5IEBAIHZlY3RfZXN0aW1h dGVfbWluX3Byb2ZpdGFibGVfaXRlcnMgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKICAg ICAgVE9ETzogQnVpbGQgYW4gZXhwcmVzc2lvbiB0aGF0IHJlcHJlc2VudHMgcGVlbF9pdGVy cyBmb3IgcHJvbG9ndWUgYW5kCiAgICAgIGVwaWxvZ3VlIHRvIGJlIHVzZWQgaW4gYSBydW4t dGltZSB0ZXN0LiAgKi8KIAotICBpZiAoTE9PUF9WSU5GT19GVUxMWV9NQVNLRURfUCAobG9v cF92aW5mbykpCisgIGJvb2wgcHJvbF9uZWVkX2JyX3Rha2VuX2Nvc3QgPSBmYWxzZTsKKyAg Ym9vbCBwcm9sX25lZWRfYnJfbm90X3Rha2VuX2Nvc3QgPSBmYWxzZTsKKworICAvKiBDYWxj dWxhdGUgcGVlbF9pdGVyc19wcm9sb2d1ZS4gICovCisgIGlmICh2ZWN0X3VzZV9sb29wX21h c2tfZm9yX2FsaWdubWVudF9wIChsb29wX3ZpbmZvKSkKKyAgICBwZWVsX2l0ZXJzX3Byb2xv Z3VlID0gMDsKKyAgZWxzZSBpZiAobnBlZWwgPCAwKQogICAgIHsKLSAgICAgIHBlZWxfaXRl cnNfcHJvbG9ndWUgPSAwOwotICAgICAgcGVlbF9pdGVyc19lcGlsb2d1ZSA9IDA7CisgICAg ICBwZWVsX2l0ZXJzX3Byb2xvZ3VlID0gYXNzdW1lZF92ZiAvIDI7CisgICAgICBpZiAoZHVt cF9lbmFibGVkX3AgKCkpCisJZHVtcF9wcmludGYgKE1TR19OT1RFLCAiY29zdCBtb2RlbDog IgorCQkJICAgICAgICJwcm9sb2d1ZSBwZWVsIGl0ZXJzIHNldCB0byB2Zi8yLlxuIik7CiAK LSAgICAgIGlmIChMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dBUFMgKGxvb3BfdmluZm8pKQot CXsKLQkgIC8qIFdlIG5lZWQgdG8gcGVlbCBleGFjdGx5IG9uZSBpdGVyYXRpb24uICAqLwot CSAgcGVlbF9pdGVyc19lcGlsb2d1ZSArPSAxOwotCSAgc3RtdF9pbmZvX2Zvcl9jb3N0ICpz aTsKLQkgIGludCBqOwotCSAgRk9SX0VBQ0hfVkVDX0VMVCAoTE9PUF9WSU5GT19TQ0FMQVJf SVRFUkFUSU9OX0NPU1QgKGxvb3BfdmluZm8pLAotCQkJICAgIGosIHNpKQotCSAgICAodm9p ZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nvc3RfZGF0YSwgc2ktPmNv dW50LAotCQkJCSAgc2ktPmtpbmQsIHNpLT5zdG10X2luZm8sIHNpLT52ZWN0eXBlLAotCQkJ CSAgc2ktPm1pc2FsaWduLCB2ZWN0X2VwaWxvZ3VlKTsKLQl9CisgICAgICAvKiBJZiBwZWVs ZWQgaXRlcmF0aW9ucyBhcmUgdW5rbm93biwgY291bnQgYSB0YWtlbiBicmFuY2ggYW5kIGEg bm90IHRha2VuCisJIGJyYW5jaCBwZXIgcGVlbGVkIGxvb3AuIEV2ZW4gaWYgc2NhbGFyIGxv b3AgaXRlcmF0aW9ucyBhcmUga25vd24sCisJIHZlY3RvciBpdGVyYXRpb25zIGFyZSBub3Qg a25vd24gc2luY2UgcGVlbGVkIHByb2xvZ3VlIGl0ZXJhdGlvbnMgYXJlCisJIG5vdCBrbm93 bi4gSGVuY2UgZ3VhcmRzIHJlbWFpbiB0aGUgc2FtZS4gICovCisgICAgICBwcm9sX25lZWRf YnJfdGFrZW5fY29zdCA9IHRydWU7CisgICAgICBwcm9sX25lZWRfYnJfbm90X3Rha2VuX2Nv c3QgPSB0cnVlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHBlZWxfaXRlcnNfcHJv bG9ndWUgPSBucGVlbDsKKyAgICAgIGlmICghTE9PUF9WSU5GT19OSVRFUlNfS05PV05fUCAo bG9vcF92aW5mbykpCisJLyogSWYgcGVlbGVkIGl0ZXJhdGlvbnMgYXJlIGtub3duIGJ1dCBu dW1iZXIgb2Ygc2NhbGFyIGxvb3AKKwkgICBpdGVyYXRpb25zIGFyZSB1bmtub3duLCBjb3Vu dCBhIHRha2VuIGJyYW5jaCBwZXIgcGVlbGVkIGxvb3AuICAqLworCXByb2xfbmVlZF9icl90 YWtlbl9jb3N0ID0gdHJ1ZTsKKyAgICB9CisKKyAgYm9vbCBlcGlsX25lZWRfYnJfdGFrZW5f Y29zdCA9IGZhbHNlOworICBib29sIGVwaWxfbmVlZF9icl9ub3RfdGFrZW5fY29zdCA9IGZh bHNlOwogCisgIC8qIENhbGN1bGF0ZSBwZWVsX2l0ZXJzX2VwaWxvZ3VlLiAgKi8KKyAgaWYg KExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JTX1AgKGxvb3BfdmluZm8pKQorICAg IC8qIFdlIG5lZWQgdG8gcGVlbCBleGFjdGx5IG9uZSBpdGVyYXRpb24gZm9yIGdhcHMuICAq LworICAgIHBlZWxfaXRlcnNfZXBpbG9ndWUgPSBMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dB UFMgKGxvb3BfdmluZm8pID8gMSA6IDA7CisgIGVsc2UgaWYgKG5wZWVsIDwgMCkKKyAgICB7 CisgICAgICAvKiBJZiBwZWVsaW5nIGZvciBhbGlnbm1lbnQgaXMgdW5rbm93biwgbG9vcCBi b3VuZCBvZiBtYWluIGxvb3AKKwkgYmVjb21lcyB1bmtub3duLiAgKi8KKyAgICAgIHBlZWxf aXRlcnNfZXBpbG9ndWUgPSBhc3N1bWVkX3ZmIC8gMjsKKyAgICAgIGlmIChkdW1wX2VuYWJs ZWRfcCAoKSkKKwlkdW1wX3ByaW50ZiAoTVNHX05PVEUsICJjb3N0IG1vZGVsOiAiCisJCQkg ICAgICAgImVwaWxvZ3VlIHBlZWwgaXRlcnMgc2V0IHRvIHZmLzIgYmVjYXVzZSAiCisJCQkg ICAgICAgInBlZWxpbmcgZm9yIGFsaWdubWVudCBpcyB1bmtub3duLlxuIik7CisKKyAgICAg IC8qIFNlZSB0aGUgc2FtZSByZWFzb24gYWJvdmUgaW4gcGVlbF9pdGVyc19wcm9sb2d1ZSBj YWxjdWxhdGlvbi4gICovCisgICAgICBlcGlsX25lZWRfYnJfdGFrZW5fY29zdCA9IHRydWU7 CisgICAgICBlcGlsX25lZWRfYnJfbm90X3Rha2VuX2Nvc3QgPSB0cnVlOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIHBlZWxfaXRlcnNfZXBpbG9ndWUgPSB2ZWN0X2dldF9wZWVs X2l0ZXJzX2VwaWxvZ3VlIChsb29wX3ZpbmZvLCBucGVlbCk7CisgICAgICBpZiAoIUxPT1Bf VklORk9fTklURVJTX0tOT1dOX1AgKGxvb3BfdmluZm8pKQorCS8qIElmIHBlZWxlZCBpdGVy YXRpb25zIGFyZSBrbm93biBidXQgbnVtYmVyIG9mIHNjYWxhciBsb29wCisJICAgaXRlcmF0 aW9ucyBhcmUgdW5rbm93biwgY291bnQgYSB0YWtlbiBicmFuY2ggcGVyIHBlZWxlZCBsb29w LiAgKi8KKwllcGlsX25lZWRfYnJfdGFrZW5fY29zdCA9IHRydWU7CisgICAgfQorCisgIHN0 bXRfaW5mb19mb3JfY29zdCAqc2k7CisgIGludCBqOworICAvKiBBZGQgY29zdHMgYXNzb2Np YXRlZCB3aXRoIHBlZWxfaXRlcnNfcHJvbG9ndWUuICAqLworICBpZiAocGVlbF9pdGVyc19w cm9sb2d1ZSkKKyAgICBGT1JfRUFDSF9WRUNfRUxUIChMT09QX1ZJTkZPX1NDQUxBUl9JVEVS QVRJT05fQ09TVCAobG9vcF92aW5mbyksIGosIHNpKQorICAgICAgeworCSh2b2lkKSBhZGRf c3RtdF9jb3N0IChsb29wX3ZpbmZvLCB0YXJnZXRfY29zdF9kYXRhLAorCQkJICAgICAgc2kt PmNvdW50ICogcGVlbF9pdGVyc19wcm9sb2d1ZSwgc2ktPmtpbmQsCisJCQkgICAgICBzaS0+ c3RtdF9pbmZvLCBzaS0+dmVjdHlwZSwgc2ktPm1pc2FsaWduLAorCQkJICAgICAgdmVjdF9w cm9sb2d1ZSk7CisgICAgICB9CisKKyAgLyogQWRkIGNvc3RzIGFzc29jaWF0ZWQgd2l0aCBw ZWVsX2l0ZXJzX3Byb2xvZ3VlLiAgKi8KKyAgaWYgKHBlZWxfaXRlcnNfZXBpbG9ndWUpCisg ICAgRk9SX0VBQ0hfVkVDX0VMVCAoTE9PUF9WSU5GT19TQ0FMQVJfSVRFUkFUSU9OX0NPU1Qg KGxvb3BfdmluZm8pLCBqLCBzaSkKKyAgICAgIHsKKwkodm9pZCkgYWRkX3N0bXRfY29zdCAo bG9vcF92aW5mbywgdGFyZ2V0X2Nvc3RfZGF0YSwKKwkJCSAgICAgIHNpLT5jb3VudCAqIHBl ZWxfaXRlcnNfZXBpbG9ndWUsIHNpLT5raW5kLAorCQkJICAgICAgc2ktPnN0bXRfaW5mbywg c2ktPnZlY3R5cGUsIHNpLT5taXNhbGlnbiwKKwkJCSAgICAgIHZlY3RfZXBpbG9ndWUpOwor ICAgICAgfQorCisgIC8qIEFkZCBwb3NzaWJsZSBjb25kX2JyYW5jaF90YWtlbi9jb25kX2Jy YW5jaF9ub3RfdGFrZW4gY29zdC4gICovCisgIGlmIChwcm9sX25lZWRfYnJfdGFrZW5fY29z dCkKKyAgICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nvc3Rf ZGF0YSwgMSwgY29uZF9icmFuY2hfdGFrZW4sCisJCQkgIE5VTEwsIE5VTExfVFJFRSwgMCwg dmVjdF9wcm9sb2d1ZSk7CisKKyAgaWYgKHByb2xfbmVlZF9icl9ub3RfdGFrZW5fY29zdCkK KyAgICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nvc3RfZGF0 YSwgMSwKKwkJCSAgY29uZF9icmFuY2hfbm90X3Rha2VuLCBOVUxMLCBOVUxMX1RSRUUsIDAs CisJCQkgIHZlY3RfcHJvbG9ndWUpOworCisgIGlmIChlcGlsX25lZWRfYnJfdGFrZW5fY29z dCkKKyAgICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nvc3Rf ZGF0YSwgMSwgY29uZF9icmFuY2hfdGFrZW4sCisJCQkgIE5VTEwsIE5VTExfVFJFRSwgMCwg dmVjdF9lcGlsb2d1ZSk7CisKKyAgaWYgKGVwaWxfbmVlZF9icl9ub3RfdGFrZW5fY29zdCkK KyAgICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nvc3RfZGF0 YSwgMSwKKwkJCSAgY29uZF9icmFuY2hfbm90X3Rha2VuLCBOVUxMLCBOVUxMX1RSRUUsIDAs CisJCQkgIHZlY3RfZXBpbG9ndWUpOworCisgIC8qIFRha2UgY2FyZSBvZiBzcGVjaWFsIGNv c3RzIGZvciByZ3JvdXAgY29udHJvbHMgb2YgcGFydGlhbCB2ZWN0b3JzLiAgKi8KKyAgaWYg KExPT1BfVklORk9fRlVMTFlfTUFTS0VEX1AgKGxvb3BfdmluZm8pKQorICAgIHsKICAgICAg IC8qIENhbGN1bGF0ZSBob3cgbWFueSBtYXNrcyB3ZSBuZWVkIHRvIGdlbmVyYXRlLiAgKi8K ICAgICAgIHVuc2lnbmVkIGludCBudW1fbWFza3MgPSAwOwogICAgICAgcmdyb3VwX2NvbnRy b2xzICpyZ207CkBAIC0zNjkxLDkzICszNzkwLDc5IEBAIHZlY3RfZXN0aW1hdGVfbWluX3By b2ZpdGFibGVfaXRlcnMgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKIAkgc2ltcGxlciBh bmQgc2FmZXIgdG8gdXNlIHRoZSB3b3JzdC1jYXNlIGNvc3Q7IGlmIHRoaXMgZW5kcyB1cAog CSBiZWluZyB0aGUgdGllLWJyZWFrZXIgYmV0d2VlbiB2ZWN0b3JpemluZyBvciBub3QsIHRo ZW4gaXQncwogCSBwcm9iYWJseSBiZXR0ZXIgbm90IHRvIHZlY3Rvcml6ZS4gICovCi0gICAg ICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywKLQkJCSAgICB0YXJnZXRfY29z dF9kYXRhLCBudW1fbWFza3MsIHZlY3Rvcl9zdG10LAotCQkJICAgIE5VTEwsIE5VTExfVFJF RSwgMCwgdmVjdF9wcm9sb2d1ZSk7Ci0gICAgICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9v cF92aW5mbywKLQkJCSAgICB0YXJnZXRfY29zdF9kYXRhLCBudW1fbWFza3MgLSAxLCB2ZWN0 b3Jfc3RtdCwKLQkJCSAgICBOVUxMLCBOVUxMX1RSRUUsIDAsIHZlY3RfYm9keSk7CisgICAg ICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nvc3RfZGF0YSwg bnVtX21hc2tzLAorCQkJICAgIHZlY3Rvcl9zdG10LCBOVUxMLCBOVUxMX1RSRUUsIDAsIHZl Y3RfcHJvbG9ndWUpOworICAgICAgKHZvaWQpIGFkZF9zdG10X2Nvc3QgKGxvb3BfdmluZm8s IHRhcmdldF9jb3N0X2RhdGEsIG51bV9tYXNrcyAtIDEsCisJCQkgICAgdmVjdG9yX3N0bXQs IE5VTEwsIE5VTExfVFJFRSwgMCwgdmVjdF9ib2R5KTsKICAgICB9CiAgIGVsc2UgaWYgKExP T1BfVklORk9fRlVMTFlfV0lUSF9MRU5HVEhfUCAobG9vcF92aW5mbykpCiAgICAgewotICAg ICAgcGVlbF9pdGVyc19wcm9sb2d1ZSA9IDA7Ci0gICAgICBwZWVsX2l0ZXJzX2VwaWxvZ3Vl ID0gMDsKLSAgICB9Ci0gIGVsc2UgaWYgKG5wZWVsIDwgMCkKLSAgICB7Ci0gICAgICBwZWVs X2l0ZXJzX3Byb2xvZ3VlID0gYXNzdW1lZF92ZiAvIDI7Ci0gICAgICBpZiAoZHVtcF9lbmFi bGVkX3AgKCkpCi0JZHVtcF9wcmludGYgKE1TR19OT1RFLCAiY29zdCBtb2RlbDogIgotCQkg ICAgICJwcm9sb2d1ZSBwZWVsIGl0ZXJzIHNldCB0byB2Zi8yLlxuIik7Ci0KLSAgICAgIC8q IElmIHBlZWxpbmcgZm9yIGFsaWdubWVudCBpcyB1bmtub3duLCBsb29wIGJvdW5kIG9mIG1h aW4gbG9vcCBiZWNvbWVzCi0gICAgICAgICB1bmtub3duLiAgKi8KLSAgICAgIHBlZWxfaXRl cnNfZXBpbG9ndWUgPSBhc3N1bWVkX3ZmIC8gMjsKLSAgICAgIGlmIChkdW1wX2VuYWJsZWRf cCAoKSkKLQlkdW1wX3ByaW50ZiAoTVNHX05PVEUsICJjb3N0IG1vZGVsOiAiCi0JCSAgICAg ImVwaWxvZ3VlIHBlZWwgaXRlcnMgc2V0IHRvIHZmLzIgYmVjYXVzZSAiCi0JCSAgICAgInBl ZWxpbmcgZm9yIGFsaWdubWVudCBpcyB1bmtub3duLlxuIik7CisgICAgICAvKiBSZWZlciB0 byB0aGUgZnVuY3Rpb25zIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX3BhcnRpYWxfdmVjdG9y cworCSBhbmQgdmVjdF9zZXRfbG9vcF9jb250cm9sc19kaXJlY3RseSwgd2UgbmVlZCB0byBn ZW5lcmF0ZSBlYWNoCisJIGxlbmd0aCBpbiB0aGUgcHJvbG9ndWUgYW5kIGluIHRoZSBsb29w IGJvZHkgaWYgcmVxdWlyZWQuIEFsdGhvdWdoCisJIHRoZXJlIGFyZSBzb21lIHBvc3NpYmxl IG9wdGltaXphdGlvbiwgd2UgY29uc2lkZXIgdGhlIHdvcnN0IGNhc2UKKwkgaGVyZS4gICov CisKKyAgICAgIC8qIEZvciBub3cgd2Ugb25seSBvcGVyYXRlIGxlbmd0aC1iYXNlZCBwYXJ0 aWFsIHZlY3RvcnMgb24gUG93ZXIsCisJIHdoaWNoIGhhcyBjb25zdGFudCBWRiBhbGwgdGhl IHRpbWUsIHdlIG5lZWQgc29tZSB0d2Vha2luZ3MgYmVsb3cKKwkgaWYgaXQgZG9lc24ndCBo b2xkIGluIGZ1dHVyZS4gICovCisgICAgICBnY2NfYXNzZXJ0IChMT09QX1ZJTkZPX1ZFQ1Rf RkFDVE9SIChsb29wX3ZpbmZvKS5pc19jb25zdGFudCAoKSk7CisKKyAgICAgIC8qIEZvciB3 cmFwIGFyb3VuZCBjaGVja2luZy4gICovCisgICAgICB0cmVlIGNvbXBhcmVfdHlwZSA9IExP T1BfVklORk9fUkdST1VQX0NPTVBBUkVfVFlQRSAobG9vcF92aW5mbyk7CisgICAgICB1bnNp Z25lZCBpbnQgY29tcGFyZV9wcmVjaXNpb24gPSBUWVBFX1BSRUNJU0lPTiAoY29tcGFyZV90 eXBlKTsKKyAgICAgIHdpZGVzdF9pbnQgaXZfbGltaXQgPSB2ZWN0X2l2X2xpbWl0X2Zvcl9w YXJ0aWFsX3ZlY3RvcnMgKGxvb3BfdmluZm8pOworCisgICAgICBib29sIG5pdGVyc19rbm93 bl9wID0gTE9PUF9WSU5GT19OSVRFUlNfS05PV05fUCAobG9vcF92aW5mbyk7CisgICAgICBi b29sIG5lZWRfaXRlcmF0ZV9wCisJPSAoIUxPT1BfVklORk9fRVBJTE9HVUVfUCAobG9vcF92 aW5mbykKKwkgICAmJiAhdmVjdF9rbm93bl9uaXRlcnNfc21hbGxlcl90aGFuX3ZmIChsb29w X3ZpbmZvKSk7CisKKyAgICAgIC8qIEluaXQgbWluL21heCwgc2hpZnQgYW5kIG1pbnVzIGNv c3QgcmVsYXRpdmUgdG8gc2luZ2xlCisJIHNjYWxhcl9zdG10LiBGb3Igbm93IHdlIG9ubHkg dXNlIGxlbmd0aC1iYXNlZCBwYXJ0aWFsIHZlY3RvcnMgb24KKwkgUG93ZXIsIHRhcmdldCBz cGVjaWZpYyBjb3N0IHR3ZWFraW5nIG1heSBiZSBuZWVkZWQgZm9yIG90aGVyCisJIHBvcnRz IGluIGZ1dHVyZS4gICovCisgICAgICB1bnNpZ25lZCBpbnQgbWluX21heF9jb3N0ID0gMjsK KyAgICAgIHVuc2lnbmVkIGludCBzaGlmdF9jb3N0ID0gMSwgbWludXNfY29zdCA9IDE7CisK KyAgICAgIC8qIEluaXQgY29zdCByZWxhdGl2ZSB0byBzaW5nbGUgc2NhbGFyX3N0bXQuICAq LworICAgICAgdW5zaWduZWQgaW50IHByb2xfY250ID0gMDsKKyAgICAgIHVuc2lnbmVkIGlu dCBib2R5X2NudCA9IDA7CisKKyAgICAgIHJncm91cF9jb250cm9scyAqcmdjOworICAgICAg dW5zaWduZWQgaW50IG51bV92ZWN0b3JzX20xOworICAgICAgRk9SX0VBQ0hfVkVDX0VMVCAo TE9PUF9WSU5GT19MRU5TIChsb29wX3ZpbmZvKSwgbnVtX3ZlY3RvcnNfbTEsIHJnYykKKwlp ZiAocmdjLT50eXBlKQorCSAgeworCSAgICB1bnNpZ25lZCBuaXRlbXMgPSByZ2MtPm1heF9u c2NhbGFyc19wZXJfaXRlciAqIHJnYy0+ZmFjdG9yOwogCi0gICAgICAvKiBJZiBwZWVsZWQg aXRlcmF0aW9ucyBhcmUgdW5rbm93biwgY291bnQgYSB0YWtlbiBicmFuY2ggYW5kIGEgbm90 IHRha2VuCi0gICAgICAgICBicmFuY2ggcGVyIHBlZWxlZCBsb29wLiBFdmVuIGlmIHNjYWxh ciBsb29wIGl0ZXJhdGlvbnMgYXJlIGtub3duLAotICAgICAgICAgdmVjdG9yIGl0ZXJhdGlv bnMgYXJlIG5vdCBrbm93biBzaW5jZSBwZWVsZWQgcHJvbG9ndWUgaXRlcmF0aW9ucyBhcmUK LSAgICAgICAgIG5vdCBrbm93bi4gSGVuY2UgZ3VhcmRzIHJlbWFpbiB0aGUgc2FtZS4gICov Ci0gICAgICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywgdGFyZ2V0X2Nvc3Rf ZGF0YSwgMSwgY29uZF9icmFuY2hfdGFrZW4sCi0JCQkgICAgTlVMTCwgTlVMTF9UUkVFLCAw LCB2ZWN0X3Byb2xvZ3VlKTsKLSAgICAgICh2b2lkKSBhZGRfc3RtdF9jb3N0IChsb29wX3Zp bmZvLAotCQkJICAgIHRhcmdldF9jb3N0X2RhdGEsIDEsIGNvbmRfYnJhbmNoX25vdF90YWtl biwKLQkJCSAgICBOVUxMLCBOVUxMX1RSRUUsIDAsIHZlY3RfcHJvbG9ndWUpOwotICAgICAg KHZvaWQpIGFkZF9zdG10X2Nvc3QgKGxvb3BfdmluZm8sIHRhcmdldF9jb3N0X2RhdGEsIDEs IGNvbmRfYnJhbmNoX3Rha2VuLAotCQkJICAgIE5VTEwsIE5VTExfVFJFRSwgMCwgdmVjdF9l cGlsb2d1ZSk7Ci0gICAgICAodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywKLQkJ CSAgICB0YXJnZXRfY29zdF9kYXRhLCAxLCBjb25kX2JyYW5jaF9ub3RfdGFrZW4sCi0JCQkg ICAgTlVMTCwgTlVMTF9UUkVFLCAwLCB2ZWN0X2VwaWxvZ3VlKTsKLSAgICAgIHN0bXRfaW5m b19mb3JfY29zdCAqc2k7Ci0gICAgICBpbnQgajsKLSAgICAgIEZPUl9FQUNIX1ZFQ19FTFQg KExPT1BfVklORk9fU0NBTEFSX0lURVJBVElPTl9DT1NUIChsb29wX3ZpbmZvKSwgaiwgc2kp Ci0JewotCSAgKHZvaWQpIGFkZF9zdG10X2Nvc3QgKGxvb3BfdmluZm8sIHRhcmdldF9jb3N0 X2RhdGEsCi0JCQkJc2ktPmNvdW50ICogcGVlbF9pdGVyc19wcm9sb2d1ZSwKLQkJCQlzaS0+ a2luZCwgc2ktPnN0bXRfaW5mbywgc2ktPnZlY3R5cGUsCi0JCQkJc2ktPm1pc2FsaWduLAot CQkJCXZlY3RfcHJvbG9ndWUpOwotCSAgKHZvaWQpIGFkZF9zdG10X2Nvc3QgKGxvb3Bfdmlu Zm8sIHRhcmdldF9jb3N0X2RhdGEsCi0JCQkJc2ktPmNvdW50ICogcGVlbF9pdGVyc19lcGls b2d1ZSwKLQkJCQlzaS0+a2luZCwgc2ktPnN0bXRfaW5mbywgc2ktPnZlY3R5cGUsCi0JCQkJ c2ktPm1pc2FsaWduLAotCQkJCXZlY3RfZXBpbG9ndWUpOwotCX0KLSAgICB9Ci0gIGVsc2UK LSAgICB7Ci0gICAgICBzdG10X3ZlY3Rvcl9mb3JfY29zdCBwcm9sb2d1ZV9jb3N0X3ZlYywg ZXBpbG9ndWVfY29zdF92ZWM7Ci0gICAgICBzdG10X2luZm9fZm9yX2Nvc3QgKnNpOwotICAg ICAgaW50IGo7Ci0gICAgICB2b2lkICpkYXRhID0gTE9PUF9WSU5GT19UQVJHRVRfQ09TVF9E QVRBIChsb29wX3ZpbmZvKTsKKwkgICAgLyogTmVlZCBvbmUgc2hpZnQgZm9yIG5pdGVyc190 b3RhbCBjb21wdXRhdGlvbi4gICovCisJICAgIGlmICghbml0ZXJzX2tub3duX3AgJiYgbml0 ZW1zICE9IDEpCisJICAgICAgcHJvbF9jbnQgKz0gc2hpZnRfY29zdDsKIAotICAgICAgcHJv bG9ndWVfY29zdF92ZWMuY3JlYXRlICgyKTsKLSAgICAgIGVwaWxvZ3VlX2Nvc3RfdmVjLmNy ZWF0ZSAoMik7Ci0gICAgICBwZWVsX2l0ZXJzX3Byb2xvZ3VlID0gbnBlZWw7CisJICAgIC8q IE5lZWQgdG8gaGFuZGxlIHdyYXAgYXJvdW5kLiAgKi8KKwkgICAgaWYgKGl2X2xpbWl0ID09 IC0xCisJCXx8ICh3aTo6bWluX3ByZWNpc2lvbiAoaXZfbGltaXQgKiBuaXRlbXMsIFVOU0lH TkVEKQorCQkgICAgPiBjb21wYXJlX3ByZWNpc2lvbikpCisJICAgICAgcHJvbF9jbnQgKz0g KG1pbl9tYXhfY29zdCArIG1pbnVzX2Nvc3QpOwogCi0gICAgICAodm9pZCkgdmVjdF9nZXRf a25vd25fcGVlbGluZ19jb3N0IChsb29wX3ZpbmZvLCBwZWVsX2l0ZXJzX3Byb2xvZ3VlLAot CQkJCQkgICZwZWVsX2l0ZXJzX2VwaWxvZ3VlLAotCQkJCQkgICZMT09QX1ZJTkZPX1NDQUxB Ul9JVEVSQVRJT05fQ09TVAotCQkJCQkgICAgKGxvb3BfdmluZm8pLAotCQkJCQkgICZwcm9s b2d1ZV9jb3N0X3ZlYywKLQkJCQkJICAmZXBpbG9ndWVfY29zdF92ZWMpOworCSAgICAvKiBO ZWVkIHRvIGhhbmRsZSBiYXRjaCBsaW1pdCBleGNlcHRpbmcgZm9yIHRoZSAxc3Qgb25lLiAg Ki8KKwkgICAgcHJvbF9jbnQgKz0gKG1pbl9tYXhfY29zdCArIG1pbnVzX2Nvc3QpICogbnVt X3ZlY3RvcnNfbTE7CiAKLSAgICAgIEZPUl9FQUNIX1ZFQ19FTFQgKHByb2xvZ3VlX2Nvc3Rf dmVjLCBqLCBzaSkKLQkodm9pZCkgYWRkX3N0bXRfY29zdCAobG9vcF92aW5mbywKLQkJCSAg ICAgIGRhdGEsIHNpLT5jb3VudCwgc2ktPmtpbmQsIHNpLT5zdG10X2luZm8sCi0JCQkgICAg ICBzaS0+dmVjdHlwZSwgc2ktPm1pc2FsaWduLCB2ZWN0X3Byb2xvZ3VlKTsKKwkgICAgdW5z aWduZWQgaW50IG51bV92ZWN0b3JzID0gbnVtX3ZlY3RvcnNfbTEgKyAxOworCSAgICAvKiBO ZWVkIHRvIHNldCB1cCBsZW5ndGhzIGluIHByb2xvZ3VlLCBvbmx5IG9uZSBNSU4gcmVxdWly ZWQKKwkgICAgICAgc2luY2Ugc3RhcnQgaW5kZXggaXMgemVyby4gICovCisJICAgIHByb2xf Y250ICs9IG1pbl9tYXhfY29zdCAqIG51bV92ZWN0b3JzOwogCi0gICAgICBGT1JfRUFDSF9W RUNfRUxUIChlcGlsb2d1ZV9jb3N0X3ZlYywgaiwgc2kpCi0JKHZvaWQpIGFkZF9zdG10X2Nv c3QgKGxvb3BfdmluZm8sCi0JCQkgICAgICBkYXRhLCBzaS0+Y291bnQsIHNpLT5raW5kLCBz aS0+c3RtdF9pbmZvLAotCQkJICAgICAgc2ktPnZlY3R5cGUsIHNpLT5taXNhbGlnbiwgdmVj dF9lcGlsb2d1ZSk7CisJICAgIC8qIE5lZWQgdG8gdXBkYXRlIGxlbmd0aHMgaW4gYm9keSBm b3IgbmV4dCBpdGVyYXRpb24uICAqLworCSAgICBpZiAobmVlZF9pdGVyYXRlX3ApCisJICAg ICAgYm9keV9jbnQgKz0gKDIgKiBtaW5fbWF4X2Nvc3QgKyBtaW51c19jb3N0KSAqIG51bV92 ZWN0b3JzOworCSAgfQogCi0gICAgICBwcm9sb2d1ZV9jb3N0X3ZlYy5yZWxlYXNlICgpOwot ICAgICAgZXBpbG9ndWVfY29zdF92ZWMucmVsZWFzZSAoKTsKKyAgICAgICh2b2lkKSBhZGRf c3RtdF9jb3N0IChsb29wX3ZpbmZvLCB0YXJnZXRfY29zdF9kYXRhLCBwcm9sX2NudCwgc2Nh bGFyX3N0bXQsCisJCQkgICAgTlVMTCwgTlVMTF9UUkVFLCAwLCB2ZWN0X3Byb2xvZ3VlKTsK KyAgICAgICh2b2lkKSBhZGRfc3RtdF9jb3N0IChsb29wX3ZpbmZvLCB0YXJnZXRfY29zdF9k YXRhLCBib2R5X2NudCwgc2NhbGFyX3N0bXQsCisJCQkgICAgTlVMTCwgTlVMTF9UUkVFLCAw LCB2ZWN0X2JvZHkpOwogICAgIH0KIAogICAvKiBGT1JOT1c6IFRoZSBzY2FsYXIgb3V0c2lk ZSBjb3N0IGlzIGluY3JlbWVudGVkIGluIG9uZSBvZiB0aGUKQEAgLTM5MTMsOCArMzk5OCw4 IEBAIHZlY3RfZXN0aW1hdGVfbWluX3Byb2ZpdGFibGVfaXRlcnMgKGxvb3BfdmVjX2luZm8g bG9vcF92aW5mbywKICAgICB9CiAKICAgLyogPz8/IFRoZSAiaWYiIGFybSBpcyB3cml0dGVu IHRvIGhhbmRsZSBhbGwgY2FzZXM7IHNlZSBiZWxvdyBmb3Igd2hhdAotICAgICB3ZSB3b3Vs ZCBkbyBmb3IgIUxPT1BfVklORk9fRlVMTFlfTUFTS0VEX1AuICAqLwotICBpZiAoTE9PUF9W SU5GT19GVUxMWV9NQVNLRURfUCAobG9vcF92aW5mbykpCisgICAgIHdlIHdvdWxkIGRvIGZv ciAhTE9PUF9WSU5GT19VU0lOR19QQVJUSUFMX1ZFQ1RPUlNfUC4gICovCisgIGlmIChMT09Q X1ZJTkZPX1VTSU5HX1BBUlRJQUxfVkVDVE9SU19QIChsb29wX3ZpbmZvKSkKICAgICB7CiAg ICAgICAvKiBSZXdyaXRpbmcgdGhlIGNvbmRpdGlvbiBhYm92ZSBpbiB0ZXJtcyBvZiB0aGUg bnVtYmVyIG9mCiAJIHZlY3RvciBpdGVyYXRpb25zICh2bml0ZXJzKSByYXRoZXIgdGhhbiB0 aGUgbnVtYmVyIG9mCkBAIC0zOTQxLDcgKzQwMjYsNyBAQCB2ZWN0X2VzdGltYXRlX21pbl9w cm9maXRhYmxlX2l0ZXJzIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sCiAJZHVtcF9wcmlu dGYgKE1TR19OT1RFLCAiICBNaW5pbXVtIG51bWJlciBvZiB2ZWN0b3IgaXRlcmF0aW9uczog JWRcbiIsCiAJCSAgICAgbWluX3ZlY19uaXRlcnMpOwogCi0gICAgICBpZiAoTE9PUF9WSU5G T19GVUxMWV9NQVNLRURfUCAobG9vcF92aW5mbykpCisgICAgICBpZiAoTE9PUF9WSU5GT19V U0lOR19QQVJUSUFMX1ZFQ1RPUlNfUCAobG9vcF92aW5mbykpCiAJewogCSAgLyogTm93IHRo YXQgd2Uga25vdyB0aGUgbWluaW11bSBudW1iZXIgb2YgdmVjdG9yIGl0ZXJhdGlvbnMsCiAJ ICAgICBmaW5kIHRoZSBtaW5pbXVtIG5pdGVycyBmb3Igd2hpY2ggdGhlIHNjYWxhciBjb3N0 IGlzIGxhcmdlcjoKQEAgLTM5OTYsNiArNDA4MSwxMCBAQCB2ZWN0X2VzdGltYXRlX21pbl9w cm9maXRhYmxlX2l0ZXJzIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sCiAgICAgICAmJiBt aW5fcHJvZml0YWJsZV9pdGVycyA8IChhc3N1bWVkX3ZmICsgcGVlbF9pdGVyc19wcm9sb2d1 ZSkpCiAgICAgLyogV2Ugd2FudCB0aGUgdmVjdG9yaXplZCBsb29wIHRvIGV4ZWN1dGUgYXQg bGVhc3Qgb25jZS4gICovCiAgICAgbWluX3Byb2ZpdGFibGVfaXRlcnMgPSBhc3N1bWVkX3Zm ICsgcGVlbF9pdGVyc19wcm9sb2d1ZTsKKyAgZWxzZSBpZiAobWluX3Byb2ZpdGFibGVfaXRl cnMgPCBwZWVsX2l0ZXJzX3Byb2xvZ3VlKQorICAgIC8qIEZvciBMT09QX1ZJTkZPX1VTSU5H X1BBUlRJQUxfVkVDVE9SU19QLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUKKyAgICAgICB2ZWN0 b3JpemVkIGxvb3AgdG8gZXhlY3V0ZSBhdCBsZWFzdCBvbmNlLiAgKi8KKyAgICBtaW5fcHJv Zml0YWJsZV9pdGVycyA9IHBlZWxfaXRlcnNfcHJvbG9ndWU7CiAKICAgaWYgKGR1bXBfZW5h YmxlZF9wICgpKQogICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRp b24sCkBAIC00MDEzLDcgKzQxMDIsNyBAQCB2ZWN0X2VzdGltYXRlX21pbl9wcm9maXRhYmxl X2l0ZXJzIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sCiAKICAgaWYgKHZlY19vdXRzaWRl X2Nvc3QgPD0gMCkKICAgICBtaW5fcHJvZml0YWJsZV9lc3RpbWF0ZSA9IDA7Ci0gIGVsc2Ug aWYgKExPT1BfVklORk9fRlVMTFlfTUFTS0VEX1AgKGxvb3BfdmluZm8pKQorICBlbHNlIGlm IChMT09QX1ZJTkZPX1VTSU5HX1BBUlRJQUxfVkVDVE9SU19QIChsb29wX3ZpbmZvKSkKICAg ICB7CiAgICAgICAvKiBUaGlzIGlzIGEgcmVwZWF0IG9mIHRoZSBjb2RlIGFib3ZlLCBidXQg d2l0aCArIFNPQyByYXRoZXIKIAkgdGhhbiAtIFNPQy4gICovCkBAIC00MDI1LDcgKzQxMTQs NyBAQCB2ZWN0X2VzdGltYXRlX21pbl9wcm9maXRhYmxlX2l0ZXJzIChsb29wX3ZlY19pbmZv IGxvb3BfdmluZm8sCiAgICAgICBpZiAob3V0c2lkZV9vdmVyaGVhZCA+IDApCiAJbWluX3Zl Y19uaXRlcnMgPSBvdXRzaWRlX292ZXJoZWFkIC8gc2F2aW5nX3Blcl92aXRlciArIDE7CiAK LSAgICAgIGlmIChMT09QX1ZJTkZPX0ZVTExZX01BU0tFRF9QIChsb29wX3ZpbmZvKSkKKyAg ICAgIGlmIChMT09QX1ZJTkZPX1VTSU5HX1BBUlRJQUxfVkVDVE9SU19QIChsb29wX3ZpbmZv KSkKIAl7CiAJICBpbnQgdGhyZXNob2xkID0gKHZlY19pbnNpZGVfY29zdCAqIG1pbl92ZWNf bml0ZXJzCiAJCQkgICArIHZlY19vdXRzaWRlX2Nvc3QK --------------A91C17B4CB79F34825D310DC--