From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpbgsg1.qq.com (smtpbgsg1.qq.com [54.254.200.92]) by sourceware.org (Postfix) with ESMTPS id 996CE3858CDB for ; Fri, 1 Dec 2023 00:58:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 996CE3858CDB Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivai.ai Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivai.ai ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 996CE3858CDB Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=54.254.200.92 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701392324; cv=none; b=hlUaNl9A6pFefgi9HvCbzJvg9SDeh26f0Ar9E19/BUbWLRSgRfrD3rbmp7+k+eA2dYYSvbW/KhJF3HSN5JUrV0/EZu/YWQ4cYbfvjqPMjSAM5wN+cb0sT6GBtWcsFGieAHg0bBakQxyGKgd5kppbEL5P9DSfH1xnGpiSgWP/+E8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701392324; c=relaxed/simple; bh=FHUgEwM2wMuczxAXWuX6aJ010/LXmvDFCwWJObIAIEU=; h=Date:From:To:Subject:Mime-Version:Message-ID; b=xscmIOF/rR91K/+i6N10ndYdRYDI6T4X+cmz7LxPEJIIRIYHzG3OnDIYWRiDooHcWKdLOcaYgA4Cbu8TFJGit5Ul12Ir1TzjgS2d5kHtgUZekXFWvFIrGKQnD3JnTdSSVXJaiYEqK+fQh1MDKaiApQ+sdWp1aTt9UR1Yx3SEiK8= ARC-Authentication-Results: i=1; server2.sourceware.org X-QQ-mid: bizesmtp78t1701392311tkn0g9p2 Received: from LAPTOP-EPITNQBU ( [113.104.251.10]) by bizesmtp.qq.com (ESMTP) with id ; Fri, 01 Dec 2023 08:58:29 +0800 (CST) X-QQ-SSF: 01400000000000G0V000000A0000000 X-QQ-FEAT: zRsAnMWGNjrBuF8Cx5RIjdtK78+/mlOFmfS+AaZ1X+7yLWTZwzp49H0O37ZYn AGh97YQ59zozCdWprksQ4UB8adswyLxH/8qSukJN/0rFJXcvIbfd9X5baRa1Q8VEWIj2dtQ vQCQLt1hS8+FtPn/0MZmWLu19B+6CTsSwi6/ulJog4B5ksfvfPZA8lU2qz2kDg8s01hKTAc LBRbNkcHKma00QvMfaAIlPowTLmwfVnRdFkqfttu9N7qwcQp6WZbhxX0WiCVWsYINBTCIf7 NpGrZlA1MzEeEoGYGtui7k8vd4SoTs+ZhV/BJKNtlLBhrBizCvNE7hABk9+6hvc36/bgdWh GKKv2Ey7Ymf/RB1f2bY5aNQSw5ns7eXtSHheCPZs2qmf9Iy0ikaVuByKZg4NAcm5p9RbhfI NwsiJblGqps= X-QQ-GoodBg: 2 X-BIZMAIL-ID: 59605477067935989 Date: Fri, 1 Dec 2023 08:58:30 +0800 From: "juzhe.zhong@rivai.ai" To: "Robin Dapp" , gcc-patches , palmer , kito.cheng , jeffreyalaw Cc: "Robin Dapp" Subject: Re: [PATCH] RISC-V: Vectorized str(n)cmp and strlen. References: <2cf2fa3f-541b-4c39-8689-161c7a047f7a@gmail.com> X-Priority: 3 X-GUID: EF3A7290-337A-47D8-8C93-230A466CBA3C X-Has-Attach: no X-Mailer: Foxmail 7.2.16.188[cn] Mime-Version: 1.0 Message-ID: <6712256FF7FABED7+2023120108583006599323@rivai.ai> Content-Type: multipart/alternative; boundary="----=_001_NextPart810522378322_=----" X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00,GIT_PATCH_0,HTML_MESSAGE,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_KAM_HTML_FONT_INVALID,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. ------=_001_NextPart810522378322_=---- Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 SGksIFJvYmluLg0KDQpUaGFua3MgZm9yIHdvcmtpbmcgb24gdGhpcy4gSSBr bm93IHRoaXMgaXMgYSB0ZWRpb3VzIHdvcmsuDQoNCkEgY291cGxlIGNvbW1l bnRzIGhlcmU6DQoNCg0KLSAgaWYgKFRBUkdFVF9aQkIgfHwgVEFSR0VUX1hU SEVBREJCKQorICBpZiAoVEFSR0VUX1ZFQ1RPUiAmJiBzdHJpbmdvcF9zdHJh dGVneSAmIFNUUklOR09QX1NUUkFURUdZX1ZFQ1RPUikKKyAgICB7CisgICAg ICBib29sIG9rID0gcmlzY3ZfdmVjdG9yOjpleHBhbmRfc3RyY21wIChyZXN1 bHQsIHNyYzEsIHNyYzIsIGJ5dGVzX3J0eCwKKwkJCQkJICAgICBhbGlnbm1l bnQsIG5jb21wYXJlKTsKKyAgICAgIGlmIChvaykKKwlyZXR1cm4gdHJ1ZTsK KyAgICB9DQorICBpZiAoVEFSR0VUX1ZFQ1RPUiAmJiAoc3RyaW5nb3Bfc3Ry YXRlZ3kgJiBTVFJJTkdPUF9TVFJBVEVHWV9WRUNUT1IpKQorICAgIHsKKyAg ICAgIHJpc2N2X3ZlY3Rvcjo6ZXhwYW5kX3Jhd21lbWNociAoRV9RSW1vZGUs IHJlc3VsdCwgc3JjLCBzZWFyY2hfY2hhciwKKwkJCQkgICAgICAvKiBzdHJs ZW4gKi8gdHJ1ZSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9DQoNClRv IG1ha2UgY29kZSBjb25zaXN0ZW50LCBJIHRoaW5rIHlvdSBzaG91bGQgY2hh bmdlIGl0IGNweW1lbToNCihkZWZpbmVfZXhwYW5kICJjcHltZW08bW9kZT4i DQogIFsocGFyYWxsZWwgWyhzZXQgKG1hdGNoX29wZXJhbmQ6QkxLIDAgImdl bmVyYWxfb3BlcmFuZCIpDQogICAgICAgKG1hdGNoX29wZXJhbmQ6QkxLIDEg ImdlbmVyYWxfb3BlcmFuZCIpKQ0KICAgICAgICAodXNlIChtYXRjaF9vcGVy YW5kOlAgMiAiIikpDQogICAgICAgICh1c2UgKG1hdGNoX29wZXJhbmQ6U0kg MyAiY29uc3RfaW50X29wZXJhbmQiKSldKV0NCiAgIiINCnsNCiAgaWYgKHJp c2N2X3ZlY3Rvcjo6ZXhwYW5kX2Jsb2NrX21vdmUgKG9wZXJhbmRzWzBdLCBv cGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKQ0KICAgIERPTkU7DQogIGVsc2Ug aWYgKHJpc2N2X2V4cGFuZF9ibG9ja19tb3ZlIChvcGVyYW5kc1swXSwgb3Bl cmFuZHNbMV0sIG9wZXJhbmRzWzJdKSkNCiAgICBET05FOw0KICBlbHNlDQog ICAgRkFJTDsNCn0pDQoNCk9yIHlvdSBzaG91bGQgY2hhbmdlIGNweW1lbSBj b2RlIGZpcnN0IChpbiBhbm90aGVyIHBhdGNoKSBsaWtlIHN0cmNtcC9zdHJs ZW4geW91IGRpZCBpbiB0aGlzIHBhdGNoLg0KDQpJIGRvbid0IGhhdmUgc3Ry b25nIG9waW5pb24gaGVyZSwgZGVwZW5kIG9uIHlvdS4NCg0KIC1ib29sDQot cmlzY3ZfZXhwYW5kX2Jsb2NrX21vdmUgKHJ0eCBkZXN0LCBydHggc3JjLCBy dHggbGVuZ3RoKQorc3RhdGljIGJvb2wKK3Jpc2N2X2V4cGFuZF9ibG9ja19t b3ZlX3NjYWxhciAocnR4IGRlc3QsIHJ0eCBzcmMsIHJ0eCBsZW5ndGgpCiB7 Ci0gIGlmIChyaXNjdl9tZW1jcHlfc3RyYXRlZ3kgPT0gVVNFX0xJQkNBTEwK LSAgICAgIHx8IHJpc2N2X21lbWNweV9zdHJhdGVneSA9PSBVU0VfVkVDVE9S KQorICBpZiAoIUNPTlNUX0lOVF9QIChsZW5ndGgpKQogICAgIHJldHVybiBm YWxzZTsKIAotICBpZiAoQ09OU1RfSU5UX1AgKGxlbmd0aCkpCi0gICAgewot ICAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBod2lfbGVuZ3RoID0gVUlO VFZBTCAobGVuZ3RoKTsKLSAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQg ZmFjdG9yLCBhbGlnbjsKKyAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBod2lf bGVuZ3RoID0gVUlOVFZBTCAobGVuZ3RoKTsKKyAgdW5zaWduZWQgSE9TVF9X SURFX0lOVCBmYWN0b3IsIGFsaWduOwogCi0gICAgICBhbGlnbiA9IE1JTiAo TUlOIChNRU1fQUxJR04gKHNyYyksIE1FTV9BTElHTiAoZGVzdCkpLCBCSVRT X1BFUl9XT1JEKTsKLSAgICAgIGZhY3RvciA9IEJJVFNfUEVSX1dPUkQgLyBh bGlnbjsKKyAgYWxpZ24gPSBNSU4gKE1JTiAoTUVNX0FMSUdOIChzcmMpLCBN RU1fQUxJR04gKGRlc3QpKSwgQklUU19QRVJfV09SRCk7CisgIGZhY3RvciA9 IEJJVFNfUEVSX1dPUkQgLyBhbGlnbjsKIAotICAgICAgaWYgKG9wdGltaXpl X2Z1bmN0aW9uX2Zvcl9zaXplX3AgKGNmdW4pCi0JICAmJiBod2lfbGVuZ3Ro ICogZmFjdG9yICogVU5JVFNfUEVSX1dPUkQgPiBNT1ZFX1JBVElPIChmYWxz ZSkpCi0JcmV0dXJuIGZhbHNlOworICBpZiAob3B0aW1pemVfZnVuY3Rpb25f Zm9yX3NpemVfcCAoY2Z1bikKKyAgICAgICYmIGh3aV9sZW5ndGggKiBmYWN0 b3IgKiBVTklUU19QRVJfV09SRCA+IE1PVkVfUkFUSU8gKGZhbHNlKSkKKyAg ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgIGlmIChod2lfbGVuZ3RoIDw9IChS SVNDVl9NQVhfTU9WRV9CWVRFU19TVFJBSUdIVCAvIGZhY3RvcikpCisgIGlm IChod2lfbGVuZ3RoIDw9IChSSVNDVl9NQVhfTU9WRV9CWVRFU19TVFJBSUdI VCAvIGZhY3RvcikpCisgICAgeworICAgICAgcmlzY3ZfYmxvY2tfbW92ZV9z dHJhaWdodCAoZGVzdCwgc3JjLCBJTlRWQUwgKGxlbmd0aCkpOworICAgICAg cmV0dXJuIHRydWU7CisgICAgfQorICBlbHNlIGlmIChvcHRpbWl6ZSAmJiBh bGlnbiA+PSBCSVRTX1BFUl9XT1JEKQorICAgIHsKKyAgICAgIHVuc2lnbmVk IG1pbl9pdGVyX3dvcmRzCisJPSBSSVNDVl9NQVhfTU9WRV9CWVRFU19QRVJf TE9PUF9JVEVSIC8gVU5JVFNfUEVSX1dPUkQ7CisgICAgICB1bnNpZ25lZCBp dGVyX3dvcmRzID0gbWluX2l0ZXJfd29yZHM7CisgICAgICB1bnNpZ25lZCBI T1NUX1dJREVfSU5UIGJ5dGVzID0gaHdpX2xlbmd0aDsKKyAgICAgIHVuc2ln bmVkIEhPU1RfV0lERV9JTlQgd29yZHMgPSBieXRlcyAvIFVOSVRTX1BFUl9X T1JEOworCisgICAgICAvKiBMZW5ndGhlbiB0aGUgbG9vcCBib2R5IGlmIGl0 IHNob3J0ZW5zIHRoZSB0YWlsLiAgKi8KKyAgICAgIGZvciAodW5zaWduZWQg aSA9IG1pbl9pdGVyX3dvcmRzOyBpIDwgbWluX2l0ZXJfd29yZHMgKiAyIC0g MTsgaSsrKQogCXsKLQkgIHJpc2N2X2Jsb2NrX21vdmVfc3RyYWlnaHQgKGRl c3QsIHNyYywgSU5UVkFMIChsZW5ndGgpKTsKLQkgIHJldHVybiB0cnVlOwor CSAgdW5zaWduZWQgY3VyX2Nvc3QgPSBpdGVyX3dvcmRzICsgd29yZHMgJSBp dGVyX3dvcmRzOworCSAgdW5zaWduZWQgbmV3X2Nvc3QgPSBpICsgd29yZHMg JSBpOworCSAgaWYgKG5ld19jb3N0IDw9IGN1cl9jb3N0KQorCSAgICBpdGVy X3dvcmRzID0gaTsKIAl9Ci0gICAgICBlbHNlIGlmIChvcHRpbWl6ZSAmJiBh bGlnbiA+PSBCSVRTX1BFUl9XT1JEKQotCXsKLQkgIHVuc2lnbmVkIG1pbl9p dGVyX3dvcmRzCi0JICAgID0gUklTQ1ZfTUFYX01PVkVfQllURVNfUEVSX0xP T1BfSVRFUiAvIFVOSVRTX1BFUl9XT1JEOwotCSAgdW5zaWduZWQgaXRlcl93 b3JkcyA9IG1pbl9pdGVyX3dvcmRzOwotCSAgdW5zaWduZWQgSE9TVF9XSURF X0lOVCBieXRlcyA9IGh3aV9sZW5ndGg7Ci0JICB1bnNpZ25lZCBIT1NUX1dJ REVfSU5UIHdvcmRzID0gYnl0ZXMgLyBVTklUU19QRVJfV09SRDsKLQotCSAg LyogTGVuZ3RoZW4gdGhlIGxvb3AgYm9keSBpZiBpdCBzaG9ydGVucyB0aGUg dGFpbC4gICovCi0JICBmb3IgKHVuc2lnbmVkIGkgPSBtaW5faXRlcl93b3Jk czsgaSA8IG1pbl9pdGVyX3dvcmRzICogMiAtIDE7IGkrKykKLQkgICAgewot CSAgICAgIHVuc2lnbmVkIGN1cl9jb3N0ID0gaXRlcl93b3JkcyArIHdvcmRz ICUgaXRlcl93b3JkczsKLQkgICAgICB1bnNpZ25lZCBuZXdfY29zdCA9IGkg KyB3b3JkcyAlIGk7Ci0JICAgICAgaWYgKG5ld19jb3N0IDw9IGN1cl9jb3N0 KQotCQlpdGVyX3dvcmRzID0gaTsKLQkgICAgfQogCi0JICByaXNjdl9ibG9j a19tb3ZlX2xvb3AgKGRlc3QsIHNyYywgYnl0ZXMsIGl0ZXJfd29yZHMgKiBV TklUU19QRVJfV09SRCk7Ci0JICByZXR1cm4gdHJ1ZTsKLQl9CisgICAgICBy aXNjdl9ibG9ja19tb3ZlX2xvb3AgKGRlc3QsIHNyYywgYnl0ZXMsIGl0ZXJf d29yZHMgKiBVTklUU19QRVJfV09SRCk7CisgICAgICByZXR1cm4gdHJ1ZTsK KyAgICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQ0KSSBkb24ndCB1bmRlcnN0 YW5kIHdoeSB5b3UgdG91Y2ggc2NhbGFyIHBhcnQgaGVyZSA/IEl0IGxvb2tz IGxpa2UgZm9ybWF0aW5nID8NCklmIHllcywgaXQgc2hvdWxkIGJlIGFub3Ro ZXIgc2VwYXJhdGUgcGF0Y2guDQoNCk90aGVyd2lzZSwgT2sgZnJvbSBteSBz aWRlLg0KDQoNCg0KanV6aGUuemhvbmdAcml2YWkuYWkNCiANCkZyb206IFJv YmluIERhcHANCkRhdGU6IDIwMjMtMTItMDEgMDY6MjINClRvOiBnY2MtcGF0 Y2hlczsgcGFsbWVyOyBLaXRvIENoZW5nOyBqZWZmcmV5YWxhdzsganV6aGUu emhvbmdAcml2YWkuYWkNCkNDOiByZGFwcC5nY2MNClN1YmplY3Q6IFtQQVRD SF0gUklTQy1WOiBWZWN0b3JpemVkIHN0cihuKWNtcCBhbmQgc3RybGVuLg0K SGksDQogDQp0aGlzIGFkZHMgdmVjdG9yaXplZCBpbXBsZW1lbnRhdGlvbnMg b2Ygc3RyY21wIGFuZCBzdHJuY21wIGFzIHdlbGwgYXMNCnN0cmxlbi4gIHN0 cmxlbiBmYWxscyBiYWNrIHRvIHRoZSBwcmV2aW91c2x5IGltcGxlbWVudGVk IHJhd21lbWNoci4NCkFsc28sIGl0IGZpeGVzIGEgcmF3bWVtY2hyIGJ1ZyBj YXVzaW5nIGEgU1BFQzIwMTcgZXhlY3V0aW9uIGZhaWx1cmU6DQpXZSB3b3Vs ZCBvbmx5IGV2ZXIgaW5jcmVtZW50IHRoZSBzb3VyY2UgYWRkcmVzcyBieSAx IHJlZ2FyZGxlc3Mgb2YNCnRoZSBpbnB1dCB0eXBlLg0KIA0KVGhlIHBhdGNo IGFsc28gY2hhbmdlcyB0aGUgc3RyaW5nb3Atc3RyYXRlZ3kgaGFuZGxpbmcg c2xpZ2h0bHk6DQphdXRvIGlzIG5vdyBhbiBhZ2dyZWdhdGUgKGluY2x1ZGlu ZyB2ZWN0b3IgYW5kIHNjYWxhciwNCnBvc3NpYmx5IG1vcmUgaW4gdGhlIGZ1 dHVyZSkgYW5kIGV4cGFuc2lvbiBmdW5jdGlvbnMgdHJ5IGFsbA0KbWF0Y2hp bmcgc3RyYXRlZ2llcyBpbiB0aGVpciBwcmVmZXJyZWQgb3JkZXIuDQogDQpB cyBiZWZvcmUsIHN0ciogZXhwYW5zaW9uIGlzIGd1YXJkZWQgYnkgLW1pbmxp bmUtc3RyKiBhbmQgbm90IGFjdGl2ZQ0KYnkgZGVmYXVsdC4gIFRoaXMgbWln aHQgY2hhbmdlIGluIHRoZSBmdXR1cmUgYXMgSSB3b3VsZCByYXRoZXIgaGF2 ZQ0KdGhvc2Ugb24gYnkgZGVmYXVsdC4gIEFzIG9mIG5vdywgdGhvdWdoLCB0 aGVyZSBpcyBzdGlsbCBhIGxhdGVudCBidWc6DQogDQpXaXRoIC1taW5saW5l LXN0cmxlbiBhbmQgLW1pbmxpbmUtc3RyY21wIHdlIGhhdmUgc2V2ZXJhbCBl eGVjdXRpb24NCmZhaWx1cmVzIGluIGdjYy5jLXRvcnR1cmUvZXhlY3V0ZS9i dWlsdGlucy8uICBGcm9tIG15IGluaXRpYWwgYW5hbHlzaXMNCml0IGxvb2tz IGxpa2Ugd2UgZG9uJ3QgaW5zZXJ0IGEgdnNldHZsIGF0IHRoZSByaWdodCBz cG90ICh3aGljaCB3b3VsZA0KYmUgcmlnaHQgYWZ0ZXIgYSBzZXRqbXAgaW4g dGhvc2UgY2FzZXMpLiAgVGhpcyBsZWF2ZXMgdGhlIGluaXRpYWwNCnZsZThm ZiB3aXRob3V0IGEgcHJvcGVyIHZ0eXBlIG9yIHZsIGNhdXNpbmcgYSBTSUdJ TEwuDQpTdGlsbCwgSSBmaWd1cmVkIEknZCByYXRoZXIgcG9zdCB0aGUgcGF0 Y2ggYXMtaXMgc28gdGhlIGJ1ZyBjYW4gYmUNCnJlcHJvZHVjZWQgdXBzdHJl YW0uDQogDQpSZWdhcmRzDQpSb2Jpbg0KIA0KZ2NjL0NoYW5nZUxvZzoNCiAN ClBSIHRhcmdldC8xMTIxMDkNCiANCiogY29uZmlnL3Jpc2N2L3Jpc2N2LW9w dHMuaCAoZW51bSByaXNjdl9zdHJpbmdvcF9zdHJhdGVneV9lbnVtKToNClJl bmFtZS4NCihlbnVtIHN0cmluZ29wX3N0cmF0ZWd5X2VudW0pOiBUbyB0aGlz Lg0KKiBjb25maWcvcmlzY3YvcmlzY3YtcHJvdG9zLmggKGV4cGFuZF9yYXdt ZW1jaHIpOiBBZGQgc3RybGVuDQpwYXJhbS4NCihleHBhbmRfc3RyY21wKTog RGVmaW5lLg0KKiBjb25maWcvcmlzY3YvcmlzY3Ytc3RyaW5nLmNjIChyaXNj dl9leHBhbmRfc3RyY21wKTogIEFkZA0KdmVjdG9yIHZlcnNpb24uDQoocmlz Y3ZfZXhwYW5kX3N0cmxlbik6IERpdHRvLg0KKHJpc2N2X2V4cGFuZF9ibG9j a19tb3ZlX3NjYWxhcik6IEhhbmRsZSBleGlzdGluZyBzY2FsYXIgZXhwYW5z aW9uLg0KKHJpc2N2X2V4cGFuZF9ibG9ja19tb3ZlKTogRXhwYW5kIHRvIGVp dGhlciB2ZWN0b3Igb3Igc2NhbGFyDQp2ZXJzaW9uLg0KKGV4cGFuZF9ibG9j a19tb3ZlKTogQWRkIHN0cmluZ29wIHN0cmF0ZWd5Lg0KKGV4cGFuZF9yYXdt ZW1jaHIpOiBIYW5kbGUgc3RybGVuIGFuZCBmaXggaW5jcmVtZW50IGJ1Zy4N CihleHBhbmRfc3RyY21wKTogTmV3IGV4cGFuZGVyLg0KKiBjb25maWcvcmlz Y3YvcmlzY3YubWQ6IEFkZCB2ZWN0b3IuDQoqIGNvbmZpZy9yaXNjdi9yaXNj di5vcHQ6IERpdHRvLg0KIA0KZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6DQog DQoqIGdjYy50YXJnZXQvcmlzY3YvcnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJj bXAtcnVuLmM6IE5ldyB0ZXN0Lg0KKiBnY2MudGFyZ2V0L3Jpc2N2L3J2di9h dXRvdmVjL2J1aWx0aW4vc3RyY21wLmM6IE5ldyB0ZXN0Lg0KKiBnY2MudGFy Z2V0L3Jpc2N2L3J2di9hdXRvdmVjL2J1aWx0aW4vc3RybGVuLXJ1bi5jOiBO ZXcgdGVzdC4NCiogZ2NjLnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9idWls dGluL3N0cmxlbi5jOiBOZXcgdGVzdC4NCi0tLQ0KZ2NjL2NvbmZpZy9yaXNj di9yaXNjdi1vcHRzLmggICAgICAgICAgICAgICAgIHwgIDIwICstDQpnY2Mv Y29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oICAgICAgICAgICAgICAgfCAg IDQgKy0NCmdjYy9jb25maWcvcmlzY3YvcmlzY3Ytc3RyaW5nLmNjICAgICAg ICAgICAgICB8IDI4NyArKysrKysrKysrKysrKystLS0NCmdjYy9jb25maWcv cmlzY3YvcmlzY3YubWQgICAgICAgICAgICAgICAgICAgICB8ICAxOCArLQ0K Z2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5vcHQgICAgICAgICAgICAgICAgICAg IHwgIDE4ICstDQouLi4vcmlzY3YvcnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJj bXAtcnVuLmMgICAgfCAgMzIgKysNCi4uLi9yaXNjdi9ydnYvYXV0b3ZlYy9i dWlsdGluL3N0cmNtcC5jICAgICAgICB8ICAxMyArDQouLi4vcmlzY3YvcnZ2 L2F1dG92ZWMvYnVpbHRpbi9zdHJsZW4tcnVuLmMgICAgfCAgMzcgKysrDQou Li4vcmlzY3YvcnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJsZW4uYyAgICAgICAg fCAgMTIgKw0KOSBmaWxlcyBjaGFuZ2VkLCAzNjMgaW5zZXJ0aW9ucygrKSwg NzggZGVsZXRpb25zKC0pDQpjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9hdXRvdmVjL2J1aWx0aW4vc3Ry Y21wLXJ1bi5jDQpjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L3Jpc2N2L3J2di9hdXRvdmVjL2J1aWx0aW4vc3RyY21wLmMN CmNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv cmlzY3YvcnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJsZW4tcnVuLmMNCmNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yv cnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJsZW4uYw0KIA0KZGlmZiAtLWdpdCBh L2djYy9jb25maWcvcmlzY3YvcmlzY3Ytb3B0cy5oIGIvZ2NjL2NvbmZpZy9y aXNjdi9yaXNjdi1vcHRzLmgNCmluZGV4IGU2ZTU1YWQ3MDcxLi4zMTVmNmRk YjIzOSAxMDA2NDQNCi0tLSBhL2djYy9jb25maWcvcmlzY3YvcmlzY3Ytb3B0 cy5oDQorKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LW9wdHMuaA0KQEAg LTEwMywxNiArMTAzLDE2IEBAIGVudW0gcmlzY3ZfZW50aXR5DQogICBNQVhf UklTQ1ZfRU5USVRJRVMNCn07DQotLyogUklTQy1WIHN0cmluZ29wIHN0cmF0 ZWd5LiAqLw0KLWVudW0gcmlzY3Zfc3RyaW5nb3Bfc3RyYXRlZ3lfZW51bSB7 DQotICAvKiBVc2Ugc2NhbGFyIG9yIHZlY3RvciBpbnN0cnVjdGlvbnMuICov DQotICBVU0VfQVVUTywNCi0gIC8qIEFsd2F5cyB1c2UgYSBsaWJyYXJ5IGNh bGwuICovDQotICBVU0VfTElCQ0FMTCwNCi0gIC8qIE9ubHkgdXNlIHNjYWxh ciBpbnN0cnVjdGlvbnMuICovDQotICBVU0VfU0NBTEFSLA0KLSAgLyogT25s eSB1c2UgdmVjdG9yIGluc3RydWN0aW9ucy4gKi8NCi0gIFVTRV9WRUNUT1IN CisvKiBSSVNDLVYgYnVpbHRpbiBzdHJhdGVneS4gKi8NCitlbnVtIHN0cmlu Z29wX3N0cmF0ZWd5X2VudW0gew0KKyAgLyogTm8gZXhwYW5zaW9uLiAqLw0K KyAgU1RSSU5HT1BfU1RSQVRFR1lfTElCQ0FMTCA9IDEsDQorICAvKiBVc2Ug c2NhbGFyIGV4cGFuc2lvbiBpZiBwb3NzaWJsZS4gKi8NCisgIFNUUklOR09Q X1NUUkFURUdZX1NDQUxBUiA9IDIsDQorICAvKiBPbmx5IHZlY3RvciBleHBh bnNpb24gaWYgcG9zc2libGUuICovDQorICBTVFJJTkdPUF9TVFJBVEVHWV9W RUNUT1IgPSA0LA0KKyAgLyogVXNlIGFueS4gKi8NCisgIFNUUklOR09QX1NU UkFURUdZX0FVVE8gPSBTVFJJTkdPUF9TVFJBVEVHWV9TQ0FMQVIgfCBTVFJJ TkdPUF9TVFJBVEVHWV9WRUNUT1INCn07DQojZGVmaW5lIFRBUkdFVF9aSUNP TkRfTElLRSAoVEFSR0VUX1pJQ09ORCB8fCAoVEFSR0VUX1hWRU5UQU5BQ09O RE9QUyAmJiBUQVJHRVRfNjRCSVQpKQ0KZGlmZiAtLWdpdCBhL2djYy9jb25m aWcvcmlzY3YvcmlzY3YtcHJvdG9zLmggYi9nY2MvY29uZmlnL3Jpc2N2L3Jp c2N2LXByb3Rvcy5oDQppbmRleCA2OTVlZTI0YWQ2Zi4uNTEzNTkxNTQ4NDYg MTAwNjQ0DQotLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5o DQorKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oDQpAQCAt NTU3LDcgKzU1Nyw5IEBAIHZvaWQgZXhwYW5kX2NvbmRfdW5vcCAodW5zaWdu ZWQsIHJ0eCAqKTsNCnZvaWQgZXhwYW5kX2NvbmRfYmlub3AgKHVuc2lnbmVk LCBydHggKik7DQp2b2lkIGV4cGFuZF9jb25kX3Rlcm5vcCAodW5zaWduZWQs IHJ0eCAqKTsNCnZvaWQgZXhwYW5kX3BvcGNvdW50IChydHggKik7DQotdm9p ZCBleHBhbmRfcmF3bWVtY2hyIChtYWNoaW5lX21vZGUsIHJ0eCwgcnR4LCBy dHgpOw0KK3ZvaWQgZXhwYW5kX3Jhd21lbWNociAobWFjaGluZV9tb2RlLCBy dHgsIHJ0eCwgcnR4LCBib29sID0gZmFsc2UpOw0KK2Jvb2wgZXhwYW5kX3N0 cmNtcCAocnR4LCBydHgsIHJ0eCwgcnR4LA0KKyAgICAgdW5zaWduZWQgSE9T VF9XSURFX0lOVCwgYm9vbCk7DQp2b2lkIGVtaXRfdmVjX2V4dHJhY3QgKHJ0 eCwgcnR4LCBwb2x5X2ludDY0KTsNCi8qIFJvdW5kaW5nIG1vZGUgYml0Zmll bGQgZm9yIGZpeGVkIHBvaW50IFZYUk0uICAqLw0KZGlmZiAtLWdpdCBhL2dj Yy9jb25maWcvcmlzY3YvcmlzY3Ytc3RyaW5nLmNjIGIvZ2NjL2NvbmZpZy9y aXNjdi9yaXNjdi1zdHJpbmcuY2MNCmluZGV4IDgwZTNiNTk4MWFmLi5jZTI1 OTgzMWE1YyAxMDA2NDQNCi0tLSBhL2djYy9jb25maWcvcmlzY3YvcmlzY3Yt c3RyaW5nLmNjDQorKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXN0cmlu Zy5jYw0KQEAgLTUxMSw3ICs1MTEsMTYgQEAgcmlzY3ZfZXhwYW5kX3N0cmNt cCAocnR4IHJlc3VsdCwgcnR4IHNyYzEsIHJ0eCBzcmMyLA0KICAgICByZXR1 cm4gZmFsc2U7DQogICBhbGlnbm1lbnQgPSBVSU5UVkFMIChhbGlnbl9ydHgp Ow0KLSAgaWYgKFRBUkdFVF9aQkIgfHwgVEFSR0VUX1hUSEVBREJCKQ0KKyAg aWYgKFRBUkdFVF9WRUNUT1IgJiYgc3RyaW5nb3Bfc3RyYXRlZ3kgJiBTVFJJ TkdPUF9TVFJBVEVHWV9WRUNUT1IpDQorICAgIHsNCisgICAgICBib29sIG9r ID0gcmlzY3ZfdmVjdG9yOjpleHBhbmRfc3RyY21wIChyZXN1bHQsIHNyYzEs IHNyYzIsIGJ5dGVzX3J0eCwNCisgICAgICBhbGlnbm1lbnQsIG5jb21wYXJl KTsNCisgICAgICBpZiAob2spDQorIHJldHVybiB0cnVlOw0KKyAgICB9DQor DQorICBpZiAoKFRBUkdFVF9aQkIgfHwgVEFSR0VUX1hUSEVBREJCKQ0KKyAg ICAgICYmIHN0cmluZ29wX3N0cmF0ZWd5ICYgU1RSSU5HT1BfU1RSQVRFR1lf U0NBTEFSKQ0KICAgICB7DQogICAgICAgcmV0dXJuIHJpc2N2X2V4cGFuZF9z dHJjbXBfc2NhbGFyIChyZXN1bHQsIHNyYzEsIHNyYzIsIG5ieXRlcywgYWxp Z25tZW50LA0KbmNvbXBhcmUpOw0KQEAgLTU4OCw5ICs1OTcsMTcgQEAgcmlz Y3ZfZXhwYW5kX3N0cmxlbl9zY2FsYXIgKHJ0eCByZXN1bHQsIHJ0eCBzcmMs IHJ0eCBhbGlnbikNCmJvb2wNCnJpc2N2X2V4cGFuZF9zdHJsZW4gKHJ0eCBy ZXN1bHQsIHJ0eCBzcmMsIHJ0eCBzZWFyY2hfY2hhciwgcnR4IGFsaWduKQ0K ew0KKyAgaWYgKFRBUkdFVF9WRUNUT1IgJiYgKHN0cmluZ29wX3N0cmF0ZWd5 ICYgU1RSSU5HT1BfU1RSQVRFR1lfVkVDVE9SKSkNCisgICAgew0KKyAgICAg IHJpc2N2X3ZlY3Rvcjo6ZXhwYW5kX3Jhd21lbWNociAoRV9RSW1vZGUsIHJl c3VsdCwgc3JjLCBzZWFyY2hfY2hhciwNCisgICAgICAgLyogc3RybGVuICov IHRydWUpOw0KKyAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQogICBn Y2NfYXNzZXJ0IChzZWFyY2hfY2hhciA9PSBjb25zdDBfcnR4KTsNCi0gIGlm IChUQVJHRVRfWkJCIHx8IFRBUkdFVF9YVEhFQURCQikNCisgIGlmICgoVEFS R0VUX1pCQiB8fCBUQVJHRVRfWFRIRUFEQkIpDQorICAgICAgJiYgc3RyaW5n b3Bfc3RyYXRlZ3kgJiBTVFJJTkdPUF9TVFJBVEVHWV9TQ0FMQVIpDQogICAg IHJldHVybiByaXNjdl9leHBhbmRfc3RybGVuX3NjYWxhciAocmVzdWx0LCBz cmMsIGFsaWduKTsNCiAgIHJldHVybiBmYWxzZTsNCkBAIC03MDcsNTEgKzcy NCw2OCBAQCByaXNjdl9ibG9ja19tb3ZlX2xvb3AgKHJ0eCBkZXN0LCBydHgg c3JjLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGxlbmd0aCwNCi8qIEV4cGFu ZCBhIGNweW1lbXNpIGluc3RydWN0aW9uLCB3aGljaCBjb3BpZXMgTEVOR1RI IGJ5dGVzIGZyb20NCiAgICBtZW1vcnkgcmVmZXJlbmNlIFNSQyB0byBtZW1v cnkgcmVmZXJlbmNlIERFU1QuICAqLw0KLWJvb2wNCi1yaXNjdl9leHBhbmRf YmxvY2tfbW92ZSAocnR4IGRlc3QsIHJ0eCBzcmMsIHJ0eCBsZW5ndGgpDQor c3RhdGljIGJvb2wNCityaXNjdl9leHBhbmRfYmxvY2tfbW92ZV9zY2FsYXIg KHJ0eCBkZXN0LCBydHggc3JjLCBydHggbGVuZ3RoKQ0Kew0KLSAgaWYgKHJp c2N2X21lbWNweV9zdHJhdGVneSA9PSBVU0VfTElCQ0FMTA0KLSAgICAgIHx8 IHJpc2N2X21lbWNweV9zdHJhdGVneSA9PSBVU0VfVkVDVE9SKQ0KKyAgaWYg KCFDT05TVF9JTlRfUCAobGVuZ3RoKSkNCiAgICAgcmV0dXJuIGZhbHNlOw0K LSAgaWYgKENPTlNUX0lOVF9QIChsZW5ndGgpKQ0KLSAgICB7DQotICAgICAg dW5zaWduZWQgSE9TVF9XSURFX0lOVCBod2lfbGVuZ3RoID0gVUlOVFZBTCAo bGVuZ3RoKTsNCi0gICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGZhY3Rv ciwgYWxpZ247DQorICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGh3aV9sZW5n dGggPSBVSU5UVkFMIChsZW5ndGgpOw0KKyAgdW5zaWduZWQgSE9TVF9XSURF X0lOVCBmYWN0b3IsIGFsaWduOw0KLSAgICAgIGFsaWduID0gTUlOIChNSU4g KE1FTV9BTElHTiAoc3JjKSwgTUVNX0FMSUdOIChkZXN0KSksIEJJVFNfUEVS X1dPUkQpOw0KLSAgICAgIGZhY3RvciA9IEJJVFNfUEVSX1dPUkQgLyBhbGln bjsNCisgIGFsaWduID0gTUlOIChNSU4gKE1FTV9BTElHTiAoc3JjKSwgTUVN X0FMSUdOIChkZXN0KSksIEJJVFNfUEVSX1dPUkQpOw0KKyAgZmFjdG9yID0g QklUU19QRVJfV09SRCAvIGFsaWduOw0KLSAgICAgIGlmIChvcHRpbWl6ZV9m dW5jdGlvbl9mb3Jfc2l6ZV9wIChjZnVuKQ0KLSAgICYmIGh3aV9sZW5ndGgg KiBmYWN0b3IgKiBVTklUU19QRVJfV09SRCA+IE1PVkVfUkFUSU8gKGZhbHNl KSkNCi0gcmV0dXJuIGZhbHNlOw0KKyAgaWYgKG9wdGltaXplX2Z1bmN0aW9u X2Zvcl9zaXplX3AgKGNmdW4pDQorICAgICAgJiYgaHdpX2xlbmd0aCAqIGZh Y3RvciAqIFVOSVRTX1BFUl9XT1JEID4gTU9WRV9SQVRJTyAoZmFsc2UpKQ0K KyAgICByZXR1cm4gZmFsc2U7DQotICAgICAgaWYgKGh3aV9sZW5ndGggPD0g KFJJU0NWX01BWF9NT1ZFX0JZVEVTX1NUUkFJR0hUIC8gZmFjdG9yKSkNCisg IGlmIChod2lfbGVuZ3RoIDw9IChSSVNDVl9NQVhfTU9WRV9CWVRFU19TVFJB SUdIVCAvIGZhY3RvcikpDQorICAgIHsNCisgICAgICByaXNjdl9ibG9ja19t b3ZlX3N0cmFpZ2h0IChkZXN0LCBzcmMsIElOVFZBTCAobGVuZ3RoKSk7DQor ICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisgIGVsc2UgaWYgKG9wdGlt aXplICYmIGFsaWduID49IEJJVFNfUEVSX1dPUkQpDQorICAgIHsNCisgICAg ICB1bnNpZ25lZCBtaW5faXRlcl93b3Jkcw0KKyA9IFJJU0NWX01BWF9NT1ZF X0JZVEVTX1BFUl9MT09QX0lURVIgLyBVTklUU19QRVJfV09SRDsNCisgICAg ICB1bnNpZ25lZCBpdGVyX3dvcmRzID0gbWluX2l0ZXJfd29yZHM7DQorICAg ICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBieXRlcyA9IGh3aV9sZW5ndGg7 DQorICAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCB3b3JkcyA9IGJ5dGVz IC8gVU5JVFNfUEVSX1dPUkQ7DQorDQorICAgICAgLyogTGVuZ3RoZW4gdGhl IGxvb3AgYm9keSBpZiBpdCBzaG9ydGVucyB0aGUgdGFpbC4gICovDQorICAg ICAgZm9yICh1bnNpZ25lZCBpID0gbWluX2l0ZXJfd29yZHM7IGkgPCBtaW5f aXRlcl93b3JkcyAqIDIgLSAxOyBpKyspDQp7DQotICAgcmlzY3ZfYmxvY2tf bW92ZV9zdHJhaWdodCAoZGVzdCwgc3JjLCBJTlRWQUwgKGxlbmd0aCkpOw0K LSAgIHJldHVybiB0cnVlOw0KKyAgIHVuc2lnbmVkIGN1cl9jb3N0ID0gaXRl cl93b3JkcyArIHdvcmRzICUgaXRlcl93b3JkczsNCisgICB1bnNpZ25lZCBu ZXdfY29zdCA9IGkgKyB3b3JkcyAlIGk7DQorICAgaWYgKG5ld19jb3N0IDw9 IGN1cl9jb3N0KQ0KKyAgICAgaXRlcl93b3JkcyA9IGk7DQp9DQotICAgICAg ZWxzZSBpZiAob3B0aW1pemUgJiYgYWxpZ24gPj0gQklUU19QRVJfV09SRCkN Ci0gew0KLSAgIHVuc2lnbmVkIG1pbl9pdGVyX3dvcmRzDQotICAgICA9IFJJ U0NWX01BWF9NT1ZFX0JZVEVTX1BFUl9MT09QX0lURVIgLyBVTklUU19QRVJf V09SRDsNCi0gICB1bnNpZ25lZCBpdGVyX3dvcmRzID0gbWluX2l0ZXJfd29y ZHM7DQotICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBieXRlcyA9IGh3aV9s ZW5ndGg7DQotICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCB3b3JkcyA9IGJ5 dGVzIC8gVU5JVFNfUEVSX1dPUkQ7DQotDQotICAgLyogTGVuZ3RoZW4gdGhl IGxvb3AgYm9keSBpZiBpdCBzaG9ydGVucyB0aGUgdGFpbC4gICovDQotICAg Zm9yICh1bnNpZ25lZCBpID0gbWluX2l0ZXJfd29yZHM7IGkgPCBtaW5faXRl cl93b3JkcyAqIDIgLSAxOyBpKyspDQotICAgICB7DQotICAgICAgIHVuc2ln bmVkIGN1cl9jb3N0ID0gaXRlcl93b3JkcyArIHdvcmRzICUgaXRlcl93b3Jk czsNCi0gICAgICAgdW5zaWduZWQgbmV3X2Nvc3QgPSBpICsgd29yZHMgJSBp Ow0KLSAgICAgICBpZiAobmV3X2Nvc3QgPD0gY3VyX2Nvc3QpDQotIGl0ZXJf d29yZHMgPSBpOw0KLSAgICAgfQ0KLSAgIHJpc2N2X2Jsb2NrX21vdmVfbG9v cCAoZGVzdCwgc3JjLCBieXRlcywgaXRlcl93b3JkcyAqIFVOSVRTX1BFUl9X T1JEKTsNCi0gICByZXR1cm4gdHJ1ZTsNCi0gfQ0KKyAgICAgIHJpc2N2X2Js b2NrX21vdmVfbG9vcCAoZGVzdCwgc3JjLCBieXRlcywgaXRlcl93b3JkcyAq IFVOSVRTX1BFUl9XT1JEKTsNCisgICAgICByZXR1cm4gdHJ1ZTsNCisgICAg fQ0KKw0KKyAgcmV0dXJuIGZhbHNlOw0KK30NCisNCisvKiBUaGlzIGZ1bmN0 aW9uIGRlbGVnYXRlcyBibG9jay1tb3ZlIGV4cGFuc2lvbiB0byBlaXRoZXIg dGhlIHZlY3Rvcg0KKyAgIGltcGxlbWVudGF0aW9uIG9yIHRoZSBzY2FsYXIg b25lLiAgUmV0dXJuIFRSVUUgaWYgc3VjY2Vzc2Z1bCBvciBGQUxTRQ0KKyAg IG90aGVyd2lzZS4gICovDQorDQorYm9vbA0KK3Jpc2N2X2V4cGFuZF9ibG9j a19tb3ZlIChydHggZGVzdCwgcnR4IHNyYywgcnR4IGxlbmd0aCkNCit7DQor ICBpZiAoVEFSR0VUX1ZFQ1RPUiAmJiBzdHJpbmdvcF9zdHJhdGVneSAmIFNU UklOR09QX1NUUkFURUdZX1ZFQ1RPUikNCisgICAgew0KKyAgICAgIGJvb2wg b2sgPSByaXNjdl92ZWN0b3I6OmV4cGFuZF9ibG9ja19tb3ZlIChkZXN0LCBz cmMsIGxlbmd0aCk7DQorICAgICAgaWYgKG9rKQ0KKyByZXR1cm4gdHJ1ZTsN CiAgICAgfQ0KKw0KKyAgaWYgKHN0cmluZ29wX3N0cmF0ZWd5ICYgU1RSSU5H T1BfU1RSQVRFR1lfU0NBTEFSKQ0KKyAgICByZXR1cm4gcmlzY3ZfZXhwYW5k X2Jsb2NrX21vdmVfc2NhbGFyIChkZXN0LCBzcmMsIGxlbmd0aCk7DQorDQog ICByZXR1cm4gZmFsc2U7DQp9DQpAQCAtNzc3LDkgKzgxMSw2IEBAIGV4cGFu ZF9ibG9ja19tb3ZlIChydHggZHN0X2luLCBydHggc3JjX2luLCBydHggbGVu Z3RoX2luKQ0KYm5leiBhMiwgbG9vcCAgICAgICAgICAgICAgICAgICAjIEFu eSBtb3JlPw0KcmV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJl dHVybg0KICAgKi8NCi0gIGlmICghVEFSR0VUX1ZFQ1RPUiB8fCByaXNjdl9t ZW1jcHlfc3RyYXRlZ3kgPT0gVVNFX0xJQkNBTEwNCi0gICAgICB8fCByaXNj dl9tZW1jcHlfc3RyYXRlZ3kgPT0gVVNFX1NDQUxBUikNCi0gICAgcmV0dXJu IGZhbHNlOw0KICAgSE9TVF9XSURFX0lOVCBwb3RlbnRpYWxfZXcNCiAgICAg PSAoTUlOIChNSU4gKE1FTV9BTElHTiAoc3JjX2luKSwgTUVNX0FMSUdOIChk c3RfaW4pKSwgQklUU19QRVJfV09SRCkNCiAgICAgICAgLyBCSVRTX1BFUl9V TklUKTsNCkBAIC05NjgsNyArOTk5LDggQEAgZXhwYW5kX2Jsb2NrX21vdmUg KHJ0eCBkc3RfaW4sIHJ0eCBzcmNfaW4sIHJ0eCBsZW5ndGhfaW4pDQogICAg YmVoYXZpb3IgaXMgdW5kZWZpbmVkLiAgKi8NCnZvaWQNCi1leHBhbmRfcmF3 bWVtY2hyIChtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGRzdCwgcnR4IHNyYywg cnR4IHBhdCkNCitleHBhbmRfcmF3bWVtY2hyIChtYWNoaW5lX21vZGUgbW9k ZSwgcnR4IGRzdCwgcnR4IHNyYywgcnR4IHBhdCwNCisgICBib29sIHN0cmxl bikNCnsNCiAgIC8qDQogICAgIHJhd21lbWNocjoNCkBAIC0xMDAxLDYgKzEw MzMsOCBAQCBleHBhbmRfcmF3bWVtY2hyIChtYWNoaW5lX21vZGUgbW9kZSwg cnR4IGRzdCwgcnR4IHNyYywgcnR4IHBhdCkNCiAgIG1hY2hpbmVfbW9kZSBt YXNrX21vZGUgPSByaXNjdl92ZWN0b3I6OmdldF9tYXNrX21vZGUgKHZtb2Rl KTsNCiAgIHJ0eCBjbnQgPSBnZW5fcmVnX3J0eCAoUG1vZGUpOw0KKyAgZW1p dF9tb3ZlX2luc24gKGNudCwgQ09OU1QwX1JUWCAoUG1vZGUpKTsNCisNCiAg IHJ0eCBlbmQgPSBnZW5fcmVnX3J0eCAoUG1vZGUpOw0KICAgcnR4IHZlYyA9 IGdlbl9yZWdfcnR4ICh2bW9kZSk7DQogICBydHggbWFzayA9IGdlbl9yZWdf cnR4IChtYXNrX21vZGUpOw0KQEAgLTEwMTEsMTIgKzEwNDUsMTggQEAgZXhw YW5kX3Jhd21lbWNociAobWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBkc3QsIHJ0 eCBzcmMsIHJ0eCBwYXQpDQogICB1bnNpZ25lZCBpbnQgc2hpZnQgPSBleGFj dF9sb2cyIChHRVRfTU9ERV9TSVpFIChtb2RlKS50b19jb25zdGFudCAoKSk7 DQogICBydHggc3JjX2FkZHIgPSBjb3B5X2FkZHJfdG9fcmVnIChYRVhQIChz cmMsIDApKTsNCisgIHJ0eCBzdGFydF9hZGRyID0gY29weV9hZGRyX3RvX3Jl ZyAoWEVYUCAoc3JjLCAwKSk7DQogICBydHggbG9vcCA9IGdlbl9sYWJlbF9y dHggKCk7DQogICBlbWl0X2xhYmVsIChsb29wKTsNCiAgIHJ0eCB2c3JjID0g Y2hhbmdlX2FkZHJlc3MgKHNyYywgdm1vZGUsIHNyY19hZGRyKTsNCisgIC8q IEJ1bXAgdGhlIHBvaW50ZXIuICAqLw0KKyAgcnR4IHN0ZXAgPSBnZW5fcmVn X3J0eCAoUG1vZGUpOw0KKyAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoc3Rl cCwgZ2VuX3J0eF9BU0hJRlQgKFBtb2RlLCBjbnQsIEdFTl9JTlQgKHNoaWZ0 KSkpKTsNCisgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKHNyY19hZGRyLCBn ZW5fcnR4X1BMVVMgKFBtb2RlLCBzcmNfYWRkciwgc3RlcCkpKTsNCisNCiAg IC8qIEVtaXQgYSBmaXJzdC1mYXVsdCBsb2FkLiAgKi8NCiAgIHJ0eCB2bG9w c1tdID0ge3ZlYywgdnNyY307DQogICBlbWl0X3ZsbWF4X2luc24gKGNvZGVf Zm9yX3ByZWRfZmF1bHRfbG9hZCAodm1vZGUpLA0KQEAgLTEwMzksMTkgKzEw NzksMTY2IEBAIGV4cGFuZF9yYXdtZW1jaHIgKG1hY2hpbmVfbW9kZSBtb2Rl LCBydHggZHN0LCBydHggc3JjLCBydHggcGF0KQ0KICAgZW1pdF9ub252bG1h eF9pbnNuIChjb2RlX2Zvcl9wcmVkX2ZmcyAobWFza19tb2RlLCBQbW9kZSks DQogICAgICByaXNjdl92ZWN0b3I6OkNQT1BfT1AsIHZmb3BzLCBjbnQpOw0K LSAgLyogQnVtcCB0aGUgcG9pbnRlci4gICovDQotICBlbWl0X2luc24gKGdl bl9ydHhfU0VUIChzcmNfYWRkciwgZ2VuX3J0eF9QTFVTIChQbW9kZSwgc3Jj X2FkZHIsIGNudCkpKTsNCi0NCiAgIC8qIEVtaXQgdGhlIGxvb3AgY29uZGl0 aW9uLiAgKi8NCiAgIHJ0eCB0ZXN0ID0gZ2VuX3J0eF9MVCAoVk9JRG1vZGUs IGVuZCwgY29uc3QwX3J0eCk7DQogICBlbWl0X2p1bXBfaW5zbiAoZ2VuX2Ni cmFuY2g0IChQbW9kZSwgdGVzdCwgZW5kLCBjb25zdDBfcnR4LCBsb29wKSk7 DQotICAvKiAgV2Ugb3ZlcnJhbiBieSBDTlQsIHN1YnRyYWN0IGl0LiAgKi8N Ci0gIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKHNyY19hZGRyLCBnZW5fcnR4 X01JTlVTIChQbW9kZSwgc3JjX2FkZHIsIGNudCkpKTsNCi0NCi0gIC8qICBX ZSBmb3VuZCBzb21ldGhpbmcgYXQgU1JDICsgRU5EICogWzEsMiw0LDhdLiAg Ki8NCi0gIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKGVuZCwgZ2VuX3J0eF9B U0hJRlQgKFBtb2RlLCBlbmQsIEdFTl9JTlQgKHNoaWZ0KSkpKTsNCi0gIGVt aXRfaW5zbiAoZ2VuX3J0eF9TRVQgKGRzdCwgZ2VuX3J0eF9QTFVTIChQbW9k ZSwgc3JjX2FkZHIsIGVuZCkpKTsNCisgIGlmIChzdHJsZW4pDQorICAgIHsN CisgICAgICAvKiBGb3Igc3RybGVuLCByZXR1cm4gdGhlIGxlbmd0aC4gICov DQorICAgICAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoZHN0LCBnZW5fcnR4 X1BMVVMgKFBtb2RlLCBzcmNfYWRkciwgZW5kKSkpOw0KKyAgICAgIGVtaXRf aW5zbiAoZ2VuX3J0eF9TRVQgKGRzdCwgZ2VuX3J0eF9NSU5VUyAoUG1vZGUs IGRzdCwgc3RhcnRfYWRkcikpKTsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7 DQorICAgICAgLyogIEZvciByYXdtZW1jaHIsIHJldHVybiB0aGUgcG9zaXRp b24gYXQgU1JDICsgRU5EICogWzEsMiw0LDhdLiAgKi8NCisgICAgICBlbWl0 X2luc24gKGdlbl9ydHhfU0VUIChlbmQsIGdlbl9ydHhfQVNISUZUIChQbW9k ZSwgZW5kLCBHRU5fSU5UIChzaGlmdCkpKSk7DQorICAgICAgZW1pdF9pbnNu IChnZW5fcnR4X1NFVCAoZHN0LCBnZW5fcnR4X1BMVVMgKFBtb2RlLCBzcmNf YWRkciwgZW5kKSkpOw0KKyAgICB9DQp9DQorLyogSW1wbGVtZW50IGNtcHN0 cjxtb2RlPiB1c2luZyB2ZWN0b3IgaW5zdHJ1Y3Rpb25zLiAgKi8NCisNCiti b29sDQorZXhwYW5kX3N0cmNtcCAocnR4IHJlc3VsdCwgcnR4IHNyYzEsIHJ0 eCBzcmMyLCBydHggbmJ5dGVzLA0KKyAgICAgICAgdW5zaWduZWQgSE9TVF9X SURFX0lOVCwgYm9vbCkNCit7DQorICBnY2NfYXNzZXJ0IChUQVJHRVRfVkVD VE9SKTsNCisNCisgIC8qIFdlIGRvbid0IHN1cHBvcnQgYmlnIGVuZGlhbi4g ICovDQorICBpZiAoQllURVNfQklHX0VORElBTikNCisgICAgcmV0dXJuIGZh bHNlOw0KKw0KKyAgYm9vbCB3aXRoX2xlbmd0aCA9IG5ieXRlcyAhPSBOVUxM X1JUWDsNCisNCisgIGlmICh3aXRoX2xlbmd0aA0KKyAgICAgICYmICghUkVH X1AgKG5ieXRlcykgJiYgIVNVQlJFR19QIChuYnl0ZXMpICYmICFDT05TVF9J TlRfUCAobmJ5dGVzKSkpDQorICAgIHJldHVybiBmYWxzZTsNCisNCisgIGlm ICh3aXRoX2xlbmd0aCAmJiBDT05TVF9JTlRfUCAobmJ5dGVzKSkNCisgICAg bmJ5dGVzID0gZm9yY2VfcmVnIChQbW9kZSwgbmJ5dGVzKTsNCisNCisgIG1h Y2hpbmVfbW9kZSBtb2RlID0gRV9RSW1vZGU7DQorICB1bnNpZ25lZCBpbnQg aXNpemUgPSBHRVRfTU9ERV9TSVpFIChtb2RlKS50b19jb25zdGFudCAoKTsN CisgIGludCBsbXVsID0gVEFSR0VUX01BWF9MTVVMOw0KKyAgcG9seV9pbnQ2 NCBudW5pdHMgPSBleGFjdF9kaXYgKEJZVEVTX1BFUl9SSVNDVl9WRUNUT1Ig KiBsbXVsLCBpc2l6ZSk7DQorDQorICBtYWNoaW5lX21vZGUgdm1vZGU7DQor ICBpZiAoIXJpc2N2X3ZlY3Rvcjo6Z2V0X3ZlY3Rvcl9tb2RlIChHRVRfTU9E RV9JTk5FUiAobW9kZSksDQorICAgICAgIG51bml0cykuZXhpc3RzICgmdm1v ZGUpKQ0KKyAgICBnY2NfdW5yZWFjaGFibGUgKCk7DQorDQorICBtYWNoaW5l X21vZGUgbWFza19tb2RlID0gcmlzY3ZfdmVjdG9yOjpnZXRfbWFza19tb2Rl ICh2bW9kZSk7DQorDQorICAvKiBQcmVwYXJlIGFkZHJlc3Nlcy4gICovDQor ICBydHggc3JjX2FkZHIxID0gY29weV9hZGRyX3RvX3JlZyAoWEVYUCAoc3Jj MSwgMCkpOw0KKyAgcnR4IHZzcmMxID0gY2hhbmdlX2FkZHJlc3MgKHNyYzEs IHZtb2RlLCBzcmNfYWRkcjEpOw0KKw0KKyAgcnR4IHNyY19hZGRyMiA9IGNv cHlfYWRkcl90b19yZWcgKFhFWFAgKHNyYzIsIDApKTsNCisgIHJ0eCB2c3Jj MiA9IGNoYW5nZV9hZGRyZXNzIChzcmMyLCB2bW9kZSwgc3JjX2FkZHIyKTsN CisNCisgIC8qIFNldCBpbml0aWFsIHBvaW50ZXIgYnVtcCB0byAwLiAgKi8N CisgIHJ0eCBjbnQgPSBnZW5fcmVnX3J0eCAoUG1vZGUpOw0KKyAgZW1pdF9t b3ZlX2luc24gKGNudCwgQ09OU1QwX1JUWCAoUG1vZGUpKTsNCisNCisgIHJ0 eCBzdWIgPSBnZW5fcmVnX3J0eCAoUG1vZGUpOw0KKyAgZW1pdF9tb3ZlX2lu c24gKHN1YiwgQ09OU1QwX1JUWCAoUG1vZGUpKTsNCisNCisgIC8qIENyZWF0 ZSBzb3VyY2UgdmVjdG9ycy4gICovDQorICBydHggdmVjMSA9IGdlbl9yZWdf cnR4ICh2bW9kZSk7DQorICBydHggdmVjMiA9IGdlbl9yZWdfcnR4ICh2bW9k ZSk7DQorDQorICBydHggZG9uZSA9IGdlbl9sYWJlbF9ydHggKCk7DQorICBy dHggbG9vcCA9IGdlbl9sYWJlbF9ydHggKCk7DQorICBlbWl0X2xhYmVsIChs b29wKTsNCisNCisgIC8qIEJ1bXAgdGhlIHBvaW50ZXJzLiAgKi8NCisgIGVt aXRfaW5zbiAoZ2VuX3J0eF9TRVQgKHNyY19hZGRyMSwgZ2VuX3J0eF9QTFVT IChQbW9kZSwgc3JjX2FkZHIxLCBjbnQpKSk7DQorICBlbWl0X2luc24gKGdl bl9ydHhfU0VUIChzcmNfYWRkcjIsIGdlbl9ydHhfUExVUyAoUG1vZGUsIHNy Y19hZGRyMiwgY250KSkpOw0KKw0KKyAgcnR4IHZsb3BzMVtdID0ge3ZlYzEs IHZzcmMxfTsNCisgIHJ0eCB2bG9wczJbXSA9IHt2ZWMyLCB2c3JjMn07DQor DQorICBpZiAoIXdpdGhfbGVuZ3RoKQ0KKyAgICB7DQorICAgICAgZW1pdF92 bG1heF9pbnNuIChjb2RlX2Zvcl9wcmVkX2ZhdWx0X2xvYWQgKHZtb2RlKSwN CisgICAgICAgIHJpc2N2X3ZlY3Rvcjo6VU5BUllfT1AsIHZsb3BzMSk7DQor DQorICAgICAgZW1pdF92bG1heF9pbnNuIChjb2RlX2Zvcl9wcmVkX2ZhdWx0 X2xvYWQgKHZtb2RlKSwNCisgICAgICAgIHJpc2N2X3ZlY3Rvcjo6VU5BUllf T1AsIHZsb3BzMik7DQorICAgIH0NCisgIGVsc2UNCisgICAgew0KKyAgICAg IG5ieXRlcyA9IGdlbl9sb3dwYXJ0IChQbW9kZSwgbmJ5dGVzKTsNCisgICAg ICBlbWl0X25vbnZsbWF4X2luc24gKGNvZGVfZm9yX3ByZWRfZmF1bHRfbG9h ZCAodm1vZGUpLA0KKyAgIHJpc2N2X3ZlY3Rvcjo6VU5BUllfT1AsIHZsb3Bz MSwgbmJ5dGVzKTsNCisNCisgICAgICBlbWl0X25vbnZsbWF4X2luc24gKGNv ZGVfZm9yX3ByZWRfZmF1bHRfbG9hZCAodm1vZGUpLA0KKyAgIHJpc2N2X3Zl Y3Rvcjo6VU5BUllfT1AsIHZsb3BzMiwgbmJ5dGVzKTsNCisgICAgfQ0KKw0K KyAgLyogUmVhZCB0aGUgdmwgZm9yIHRoZSBuZXh0IHBvaW50ZXIgYnVtcC4g ICovDQorICBpZiAoUG1vZGUgPT0gU0ltb2RlKQ0KKyAgICBlbWl0X2luc24g KGdlbl9yZWFkX3Zsc2kgKGNudCkpOw0KKyAgZWxzZQ0KKyAgICBlbWl0X2lu c24gKGdlbl9yZWFkX3ZsZGlfemVyb19leHRlbmQgKGNudCkpOw0KKw0KKyAg aWYgKHdpdGhfbGVuZ3RoKQ0KKyAgICB7DQorICAgICAgcnR4IHRlc3RfZG9u ZSA9IGdlbl9ydHhfRVEgKFZPSURtb2RlLCBjbnQsIGNvbnN0MF9ydHgpOw0K KyAgICAgIGVtaXRfanVtcF9pbnNuIChnZW5fY2JyYW5jaDQgKFBtb2RlLCB0 ZXN0X2RvbmUsIGNudCwgY29uc3QwX3J0eCwgZG9uZSkpOw0KKyAgICAgIGVt aXRfaW5zbiAoZ2VuX3J0eF9TRVQgKG5ieXRlcywgZ2VuX3J0eF9NSU5VUyAo UG1vZGUsIG5ieXRlcywgY250KSkpOw0KKyAgICB9DQorDQorICAvKiBMb29r IGZvciBhIFwwIGluIHRoZSBmaXJzdCBzdHJpbmcuICAqLw0KKyAgcnR4IG1h c2swID0gZ2VuX3JlZ19ydHggKG1hc2tfbW9kZSk7DQorICBydHggZXEwID0g Z2VuX3J0eF9FUSAobWFza19tb2RlLA0KKyBnZW5fY29uc3RfdmVjX2R1cGxp Y2F0ZSAodm1vZGUsIENPTlNUMF9SVFggKG1vZGUpKSwNCisgdmVjMSk7DQor ICBydHggdm1zb3BzMVtdID0ge21hc2swLCBlcTAsIHZlYzEsIENPTlNUMF9S VFggKG1vZGUpfTsNCisgIGVtaXRfbm9udmxtYXhfaW5zbiAoY29kZV9mb3Jf cHJlZF9lcW5lX3NjYWxhciAodm1vZGUpLA0KKyAgICAgICByaXNjdl92ZWN0 b3I6OkNPTVBBUkVfT1AsIHZtc29wczEsIGNudCk7DQorDQorICAvKiBMb29r IGZvciB2ZWMxICE9IHZlYzIgKGluY2x1ZGVzIHZlYzJbaV0gPT0gMCkuICAq Lw0KKyAgcnR4IG1hc2tuZSA9IGdlbl9yZWdfcnR4IChtYXNrX21vZGUpOw0K KyAgcnR4IG5lID0gZ2VuX3J0eF9ORSAobWFza19tb2RlLCB2ZWMxLCB2ZWMy KTsNCisgIHJ0eCB2bXNvcHNbXSA9IHttYXNrbmUsIG5lLCB2ZWMxLCB2ZWMy fTsNCisgIGVtaXRfbm9udmxtYXhfaW5zbiAoY29kZV9mb3JfcHJlZF9jbXAg KHZtb2RlKSwNCisgICAgICAgcmlzY3ZfdmVjdG9yOjpDT01QQVJFX09QLCB2 bXNvcHMsIGNudCk7DQorDQorICAvKiBDb21iaW5lIGJvdGggbWFza3MgaW50 byBvbmUuICAqLw0KKyAgcnR4IG1hc2sgPSBnZW5fcmVnX3J0eCAobWFza19t b2RlKTsNCisgIHJ0eCB2bW9yb3BzW10gPSB7bWFzaywgbWFzazAsIG1hc2tu ZX07DQorICBlbWl0X25vbnZsbWF4X2luc24gKGNvZGVfZm9yX3ByZWQgKElP UiwgbWFza19tb2RlKSwNCisgICAgICAgcmlzY3ZfdmVjdG9yOjpCSU5BUllf TUFTS19PUCwgdm1vcm9wcywgY250KTsNCisNCisgIC8qIEZpbmQgdGhlIGZp cnN0IGJpdCBpbiB0aGUgbWFzayAodGhlIGZpcnN0IHVuZXF1YWwgZWxlbWVu dCkuICAqLw0KKyAgcnR4IGZvdW5kX2F0ID0gZ2VuX3JlZ19ydHggKFBtb2Rl KTsNCisgIHJ0eCB2Zm9wc1tdID0ge2ZvdW5kX2F0LCBtYXNrfTsNCisgIGVt aXRfbm9udmxtYXhfaW5zbiAoY29kZV9mb3JfcHJlZF9mZnMgKG1hc2tfbW9k ZSwgUG1vZGUpLA0KKyAgICAgICByaXNjdl92ZWN0b3I6OkNQT1BfT1AsIHZm b3BzLCBjbnQpOw0KKw0KKyAgLyogRW1pdCB0aGUgbG9vcCBjb25kaXRpb24u ICAqLw0KKyAgcnR4IHRlc3QgPSBnZW5fcnR4X0xUIChWT0lEbW9kZSwgZm91 bmRfYXQsIGNvbnN0MF9ydHgpOw0KKyAgZW1pdF9qdW1wX2luc24gKGdlbl9j YnJhbmNoNCAoUG1vZGUsIHRlc3QsIGZvdW5kX2F0LCBjb25zdDBfcnR4LCBs b29wKSk7DQorDQorICAvKiBXYWxrIHVwIHRvIHRoZSBkaWZmZXJlbmNlIHBv aW50LiAgKi8NCisgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKHNyY19hZGRy MSwgZ2VuX3J0eF9QTFVTIChQbW9kZSwgc3JjX2FkZHIxLCBmb3VuZF9hdCkp KTsNCisgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKHNyY19hZGRyMiwgZ2Vu X3J0eF9QTFVTIChQbW9kZSwgc3JjX2FkZHIyLCBmb3VuZF9hdCkpKTsNCisN CisgIC8qIExvYWQgdGhlIHJlc3BlY3RpdmUgYnl0ZSBhbmQgY29tcHV0ZSB0 aGUgZGlmZmVyZW5jZS4gICovDQorICBydHggYzEgPSBnZW5fcmVnX3J0eCAo UG1vZGUpOw0KKyAgcnR4IGMyID0gZ2VuX3JlZ19ydHggKFBtb2RlKTsNCisN CisgIGRvX2xvYWRfZnJvbV9hZGRyIChtb2RlLCBjMSwgc3JjX2FkZHIxLCBz cmMxKTsNCisgIGRvX2xvYWRfZnJvbV9hZGRyIChtb2RlLCBjMiwgc3JjX2Fk ZHIyLCBzcmMyKTsNCisNCisgIGRvX3N1YjMgKHN1YiwgYzEsIGMyKTsNCisN CisgIGlmICh3aXRoX2xlbmd0aCkNCisgICAgZW1pdF9sYWJlbCAoZG9uZSk7 DQorDQorICBlbWl0X2luc24gKGdlbl9tb3ZzaSAocmVzdWx0LCBnZW5fbG93 cGFydCAoU0ltb2RlLCBzdWIpKSk7DQorICByZXR1cm4gdHJ1ZTsNCit9DQp9 DQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5tZCBiL2dj Yy9jb25maWcvcmlzY3YvcmlzY3YubWQNCmluZGV4IDZiZjJkZmRmOWI0Li5j ZTA5MmU5MjQ2NSAxMDA2NDQNCi0tLSBhL2djYy9jb25maWcvcmlzY3Yvcmlz Y3YubWQNCisrKyBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YubWQNCkBAIC0y MzM2LDkgKzIzMzYsNyBAQCAoZGVmaW5lX2V4cGFuZCAiY3B5bWVtPG1vZGU+ Ig0KICAgICAgKHVzZSAobWF0Y2hfb3BlcmFuZDpTSSAzICJjb25zdF9pbnRf b3BlcmFuZCIpKV0pXQ0KICAgIiINCnsNCi0gIGlmIChyaXNjdl92ZWN0b3I6 OmV4cGFuZF9ibG9ja19tb3ZlIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0s IG9wZXJhbmRzWzJdKSkNCi0gICAgRE9ORTsNCi0gIGVsc2UgaWYgKHJpc2N2 X2V4cGFuZF9ibG9ja19tb3ZlIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0s IG9wZXJhbmRzWzJdKSkNCisgIGlmIChyaXNjdl9leHBhbmRfYmxvY2tfbW92 ZSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpDQog ICAgIERPTkU7DQogICBlbHNlDQogICAgIEZBSUw7DQpAQCAtMzcwNSw3ICsz NzAzLDggQEAgKGRlZmluZV9leHBhbmQgImNtcHN0cm5zaSINCiAgKG1hdGNo X29wZXJhbmQ6QkxLIDIpKSkNCiAgICAgICh1c2UgKG1hdGNoX29wZXJhbmQ6 U0kgMykpDQogICAgICAodXNlIChtYXRjaF9vcGVyYW5kOlNJIDQpKV0pXQ0K LSAgInJpc2N2X2lubGluZV9zdHJuY21wICYmICFvcHRpbWl6ZV9zaXplICYm IChUQVJHRVRfWkJCIHx8IFRBUkdFVF9YVEhFQURCQikiDQorICAicmlzY3Zf aW5saW5lX3N0cm5jbXAgJiYgIW9wdGltaXplX3NpemUNCisgICAgICAmJiAo VEFSR0VUX1pCQiB8fCBUQVJHRVRfWFRIRUFEQkIgfHwgVEFSR0VUX1ZFQ1RP UikiDQp7DQogICBpZiAocmlzY3ZfZXhwYW5kX3N0cmNtcCAob3BlcmFuZHNb MF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvcGVyYW5kc1szXSwgb3BlcmFuZHNbNF0pKQ0KQEAg LTM3MjUsNyArMzcyNCw4IEBAIChkZWZpbmVfZXhwYW5kICJjbXBzdHJzaSIN CiAgICAgIChjb21wYXJlOlNJIChtYXRjaF9vcGVyYW5kOkJMSyAxKQ0KICAo bWF0Y2hfb3BlcmFuZDpCTEsgMikpKQ0KICAgICAgKHVzZSAobWF0Y2hfb3Bl cmFuZDpTSSAzKSldKV0NCi0gICJyaXNjdl9pbmxpbmVfc3RyY21wICYmICFv cHRpbWl6ZV9zaXplICYmIChUQVJHRVRfWkJCIHx8IFRBUkdFVF9YVEhFQURC QikiDQorICAicmlzY3ZfaW5saW5lX3N0cmNtcCAmJiAhb3B0aW1pemVfc2l6 ZQ0KKyAgICAgICYmIChUQVJHRVRfWkJCIHx8IFRBUkdFVF9YVEhFQURCQiB8 fCBUQVJHRVRfVkVDVE9SKSINCnsNCiAgIGlmIChyaXNjdl9leHBhbmRfc3Ry Y21wIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTExfUlRYLCBvcGVyYW5k c1szXSkpDQpAQCAtMzc0NiwxNCArMzc0NiwxNiBAQCAoZGVmaW5lX2V4cGFu ZCAic3RybGVuPG1vZGU+Ig0KICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJj b25zdF9pbnRfb3BlcmFuZCIpDQogICAgIChtYXRjaF9vcGVyYW5kOlNJIDMg ImNvbnN0X2ludF9vcGVyYW5kIildDQogIFVOU1BFQ19TVFJMRU4pKV0NCi0g ICJyaXNjdl9pbmxpbmVfc3RybGVuICYmICFvcHRpbWl6ZV9zaXplICYmIChU QVJHRVRfWkJCIHx8IFRBUkdFVF9YVEhFQURCQikiDQorICAicmlzY3ZfaW5s aW5lX3N0cmxlbiAmJiAhb3B0aW1pemVfc2l6ZQ0KKyAgICAgJiYgKFRBUkdF VF9aQkIgfHwgVEFSR0VUX1hUSEVBREJCIHx8IFRBUkdFVF9WRUNUT1IpIg0K ew0KICAgcnR4IHNlYXJjaF9jaGFyID0gb3BlcmFuZHNbMl07DQotICBpZiAo c2VhcmNoX2NoYXIgIT0gY29uc3QwX3J0eCkNCisgIGlmIChzZWFyY2hfY2hh ciAhPSBjb25zdDBfcnR4ICYmICFUQVJHRVRfVkVDVE9SKQ0KICAgICBGQUlM Ow0KLSAgaWYgKHJpc2N2X2V4cGFuZF9zdHJsZW4gKG9wZXJhbmRzWzBdLCBv cGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0sIG9wZXJhbmRzWzNdKSkNCisgIGVs c2UgaWYgKHJpc2N2X2V4cGFuZF9zdHJsZW4gKG9wZXJhbmRzWzBdLCBvcGVy YW5kc1sxXSwgb3BlcmFuZHNbMl0sDQorIG9wZXJhbmRzWzNdKSkNCiAgICAg RE9ORTsNCiAgIGVsc2UNCiAgICAgRkFJTDsNCmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL3Jpc2N2L3Jpc2N2Lm9wdCBiL2djYy9jb25maWcvcmlzY3Yvcmlz Y3Yub3B0DQppbmRleCAwYzY1MTdiZGM4Yi4uMDBiNTJmNWRjNzcgMTAwNjQ0 DQotLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2Lm9wdA0KKysrIGIvZ2Nj L2NvbmZpZy9yaXNjdi9yaXNjdi5vcHQNCkBAIC01MzYsMjEgKzUzNiwyMSBA QCBFbmFibGUgdGhlIHVzZSBvZiB2ZWN0b3IgcmVnaXN0ZXJzIGZvciBmdW5j dGlvbiBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZS4NClRoaXMgaXMgYW4g ZXhwZXJpbWVudGFsIHN3aXRjaCBhbmQgbWF5IGJlIHN1YmplY3QgdG8gY2hh bmdlIGluIHRoZSBmdXR1cmUuDQpFbnVtDQotTmFtZShyaXNjdl9zdHJpbmdv cF9zdHJhdGVneSkgVHlwZShlbnVtIHJpc2N2X3N0cmluZ29wX3N0cmF0ZWd5 X2VudW0pDQotVmFsaWQgYXJndW1lbnRzIHRvIC1tbWVtY3B5LXN0cmF0ZWd5 PToNCitOYW1lKHN0cmluZ29wX3N0cmF0ZWd5KSBUeXBlKGVudW0gc3RyaW5n b3Bfc3RyYXRlZ3lfZW51bSkNCitWYWxpZCBhcmd1bWVudHMgdG8gLW1idWls aW4tc3RyYXRlZ3k9Og0KRW51bVZhbHVlDQotRW51bShyaXNjdl9zdHJpbmdv cF9zdHJhdGVneSkgU3RyaW5nKGF1dG8pIFZhbHVlKFVTRV9BVVRPKQ0KK0Vu dW0oc3RyaW5nb3Bfc3RyYXRlZ3kpIFN0cmluZyhhdXRvKSBWYWx1ZShTVFJJ TkdPUF9TVFJBVEVHWV9BVVRPKQ0KRW51bVZhbHVlDQotRW51bShyaXNjdl9z dHJpbmdvcF9zdHJhdGVneSkgU3RyaW5nKGxpYmNhbGwpIFZhbHVlKFVTRV9M SUJDQUxMKQ0KK0VudW0oc3RyaW5nb3Bfc3RyYXRlZ3kpIFN0cmluZyhsaWJj YWxsKSBWYWx1ZShTVFJJTkdPUF9TVFJBVEVHWV9MSUJDQUxMKQ0KRW51bVZh bHVlDQotRW51bShyaXNjdl9zdHJpbmdvcF9zdHJhdGVneSkgU3RyaW5nKHNj YWxhcikgVmFsdWUoVVNFX1NDQUxBUikNCitFbnVtKHN0cmluZ29wX3N0cmF0 ZWd5KSBTdHJpbmcoc2NhbGFyKSBWYWx1ZShTVFJJTkdPUF9TVFJBVEVHWV9T Q0FMQVIpDQpFbnVtVmFsdWUNCi1FbnVtKHJpc2N2X3N0cmluZ29wX3N0cmF0 ZWd5KSBTdHJpbmcodmVjdG9yKSBWYWx1ZShVU0VfVkVDVE9SKQ0KK0VudW0o c3RyaW5nb3Bfc3RyYXRlZ3kpIFN0cmluZyh2ZWN0b3IpIFZhbHVlKFNUUklO R09QX1NUUkFURUdZX1ZFQ1RPUikNCi1tbWVtY3B5LXN0cmF0ZWd5PQ0KLVRh cmdldCBSZWplY3ROZWdhdGl2ZSBKb2luZWQgRW51bShyaXNjdl9zdHJpbmdv cF9zdHJhdGVneSkgVmFyKHJpc2N2X21lbWNweV9zdHJhdGVneSkgSW5pdChV U0VfQVVUTykNCi1TcGVjaWZ5IG1lbWNweSBleHBhbnNpb24gc3RyYXRlZ3ku DQorbWJ1aWx0aW4tc3RyYXRlZ3k9DQorVGFyZ2V0IFJlamVjdE5lZ2F0aXZl IEpvaW5lZCBFbnVtKHN0cmluZ29wX3N0cmF0ZWd5KSBWYXIoc3RyaW5nb3Bf c3RyYXRlZ3kpIEluaXQoU1RSSU5HT1BfU1RSQVRFR1lfQVVUTykNCitTcGVj aWZ5IGJ1aWx0aW4gZXhwYW5zaW9uIHN0cmF0ZWd5Lg0KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9i dWlsdGluL3N0cmNtcC1ydW4uYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9yaXNjdi9ydnYvYXV0b3ZlYy9idWlsdGluL3N0cmNtcC1ydW4uYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwLi42ZGVjN2Rh OTFjMQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L3Jpc2N2L3J2di9hdXRvdmVjL2J1aWx0aW4vc3RyY21wLXJ1bi5j DQpAQCAtMCwwICsxLDMyIEBADQorLyogeyBkZy1kbyBydW4gfSAqLw0KKy8q IHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItTzMgLW1pbmxpbmUtc3RyY21w IiB9ICovDQorDQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKw0KK2ludA0KK19f YXR0cmlidXRlX18gKChub2lwYSkpDQorZm9vIChjb25zdCBjaGFyICpzLCBj b25zdCBjaGFyICp0KQ0KK3sNCisgIHJldHVybiBfX2J1aWx0aW5fc3RyY21w IChzLCB0KTsNCit9DQorDQoraW50DQorX19hdHRyaWJ1dGVfXyAoKG5vaXBh LCBvcHRpbWl6ZSAoIjAiKSkpDQorZm9vMiAoY29uc3QgY2hhciAqcywgY29u c3QgY2hhciAqdCkNCit7DQorICByZXR1cm4gc3RyY21wIChzLCB0KTsNCit9 DQorDQorI2RlZmluZSBTWiAxMA0KKw0KK2ludCBtYWluICgpDQorew0KKyAg Y29uc3QgY2hhciAqc1tTWl0NCisgICAgPSB7IiIsICAiYXNkZiIsICIwIiwg IlwwIiwgIiFAIyQlKioqbTExMjNmZG5tb2k0MyIsDQorICAgICAgICJhIiwg InoiLCAgICAiMSIsICI5IiwgICIxMjM0NTY3ODkwMTIzNDU2Nzg4OTAxMjM0 NTY3ODkwMTIzNDU2Nzg5MCJ9Ow0KKw0KKyAgZm9yIChpbnQgaSA9IDA7IGkg PCBTWjsgaSsrKQ0KKyAgICBmb3IgKGludCBqID0gMDsgaiA8IFNaOyBqKysp DQorICAgICAgaWYgKGZvbyAoc1tpXSwgc1tqXSkgIT0gZm9vMiAoc1tpXSwg c1tqXSkpDQorICAgICAgICBfX2J1aWx0aW5fYWJvcnQgKCk7DQorfQ0KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYv YXV0b3ZlYy9idWlsdGluL3N0cmNtcC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L3Jpc2N2L3J2di9hdXRvdmVjL2J1aWx0aW4vc3RyY21wLmMNCm5l dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uZjlkMzNh NzRmYzUNCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9idWlsdGluL3N0cmNtcC5jDQpA QCAtMCwwICsxLDEzIEBADQorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0 IHsgcmlzY3ZfdiB9IH0gfSAqLw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRp b25zICItTzMgLW1pbmxpbmUtc3RyY21wIiB9ICovDQorDQoraW50DQorX19h dHRyaWJ1dGVfXyAoKG5vaXBhKSkNCitmb28gKGNvbnN0IGNoYXIgKnMsIGNv bnN0IGNoYXIgKnQpDQorew0KKyAgcmV0dXJuIF9fYnVpbHRpbl9zdHJjbXAg KHMsIHQpOw0KK30NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMgInZsZThmZiIgMiB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgInZmaXJzdC5tIiAxIH0gfSAqLw0KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidm1vci5tIiAx IH0gfSAqLw0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9yaXNjdi9ydnYvYXV0b3ZlYy9idWlsdGluL3N0cmxlbi1ydW4uYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9idWls dGluL3N0cmxlbi1ydW4uYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAwLi5kMjkyOTdhNWY4Ng0KLS0tIC9kZXYvbnVsbA0KKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9hdXRvdmVj L2J1aWx0aW4vc3RybGVuLXJ1bi5jDQpAQCAtMCwwICsxLDM3IEBADQorLyog eyBkZy1kbyBydW4gfSAqLw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItTzMgLW1pbmxpbmUtc3RybGVuIiB9ICovDQorDQoraW50DQorX19hdHRy aWJ1dGVfXyAoKG5vaXBhKSkNCitmb28gKGNvbnN0IGNoYXIgKnMpDQorew0K KyAgcmV0dXJuIF9fYnVpbHRpbl9zdHJsZW4gKHMpOw0KK30NCisNCitpbnQN CitfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQ0KK2ZvbzIgKGNvbnN0IGNoYXIg KnMpDQorew0KKyAgaW50IG4gPSAwOw0KKyAgd2hpbGUgKCpzKysgIT0gJ1ww JykNCisgICAgew0KKyAgICAgIGFzbSB2b2xhdGlsZSAoIiIpOw0KKyAgICAg IG4rKzsNCisgICAgfQ0KKyAgcmV0dXJuIG47DQorfQ0KKw0KKyNkZWZpbmUg U1ogMTANCisNCitpbnQgbWFpbiAoKQ0KK3sNCisgIGNvbnN0IGNoYXIgKnNb U1pdDQorICAgID0geyIiLCAgImFzZGYiLCAiMCIsICJcMCIsICIhQCMkJSoq Km0xMTIzZmRubW9pNDMiLA0KKyAgICAgICAiYSIsICJ6IiwgICAgIjEiLCAi OSIsICAiMTIzNDU2Nzg5MDEyMzQ1Njc4ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4 OTAifTsNCisNCisgIGZvciAoaW50IGkgPSAwOyBpIDwgU1o7IGkrKykNCisg ICAgew0KKyAgICAgIGlmIChmb28gKHNbaV0pICE9IGZvbzIgKHNbaV0pKQ0K KyAgICAgICAgX19idWlsdGluX2Fib3J0ICgpOw0KKyAgICB9DQorfQ0KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYv YXV0b3ZlYy9idWlsdGluL3N0cmxlbi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L3Jpc2N2L3J2di9hdXRvdmVjL2J1aWx0aW4vc3RybGVuLmMNCm5l dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uMGM2Y2Nh NjNlYmYNCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9idWlsdGluL3N0cmxlbi5jDQpA QCAtMCwwICsxLDEyIEBADQorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0 IHsgcmlzY3ZfdiB9IH0gfSAqLw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRp b25zICItTzMgLW1pbmxpbmUtc3RybGVuIiB9ICovDQorDQoraW50DQorX19h dHRyaWJ1dGVfXyAoKG5vaXBhKSkNCitmb28gKGNvbnN0IGNoYXIgKnMpDQor ew0KKyAgcmV0dXJuIF9fYnVpbHRpbl9zdHJsZW4gKHMpOw0KK30NCisNCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZsZThmZiIg MSB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMgInZmaXJzdC5tIiAxIH0gfSAqLw0KLS0gDQoyLjQzLjANCiANCg== ------=_001_NextPart810522378322_=------