From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id AED213858415 for ; Tue, 9 Nov 2021 13:25:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AED213858415 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-224-LPkyCJzDME-u-kCxJ9-D6g-1; Tue, 09 Nov 2021 08:25:23 -0500 X-MC-Unique: LPkyCJzDME-u-kCxJ9-D6g-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id F1F3781C6D8 for ; Tue, 9 Nov 2021 13:25:22 +0000 (UTC) Received: from comet.redhat.com (unknown [10.39.194.237]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BF9305F4F5 for ; Tue, 9 Nov 2021 13:25:21 +0000 (UTC) From: Nick Clifton To: binutils@sourceware.org Subject: Commit: Add support for displaying unicode characters Date: Tue, 09 Nov 2021 13:25:19 +0000 Message-ID: <87v9115um8.fsf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Status: No, score=-5.9 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Nov 2021 13:25:27 -0000 --=-=-= Content-Type: text/plain Hi Guys, I am applying the attached patch to add the ability to display unicode characters to the nm, strings, objdump and readelf tools. This is part of a response to the Trojan Source vulnerability that was recently disclosed. I am also working on a separate patch for gas, but that is not quite ready yet. Cheers Nick binutils/ChangeLog 2021-11-09 Nick Clifton * nm.c: Add --unicode option to control how unicode characters are handled. * objdump.c: Likewise. * readelf.c: Likewise. * strings.c: Likewise. * binutils.texi: Document the new feature. * NEWS: Document the new feature. * testsuite/binutils-all/unicode.exp: New file. * testsuite/binutils-all/nm.hex.unicode * testsuite/binutils-all/strings.escape.unicode * testsuite/binutils-all/objdump.highlight.unicode * testsuite/binutils-all/readelf.invalid.unicode --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=b.p Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2JpbnV0aWxzL05FV1MgYi9iaW51dGlscy9ORVdTCmluZGV4IGU2OTc3YjY1 MGRiLi5mOTQ4ZDM0ZjA5MSAxMDA2NDQKLS0tIGEvYmludXRpbHMvTkVXUworKysgYi9iaW51dGls cy9ORVdTCkBAIC0yLDYgKzIsMTUgQEAKIAogKiBBZGQgc3VwcG9ydCBmb3IgdGhlIExvb25nQXJj aCBpbnN0cnVjdGlvbiBzZXQuCiAKKyogVG9vbHMgd2hpY2ggZGlzcGxheSBzeW1ib2xzIG9yIHN0 cmluZ3MgKHJlYWRlbGYsIHN0cmluZ3MsIG5tLCBvYmpkdW1wKQorICBoYXZlIGEgbmV3IGNvbW1h bmQgbGluZSBvcHRpb24gd2hpY2ggY29udHJvbHMgaG93IHVuaWNvZGUgY2hhcmFjdGVycyBhcmUK KyAgaGFuZGxlZC4gIEJ5IGRlZmF1bHQgdGhleSBhcmUgdHJlYXRlZCBhcyBub3JtYWwgZm9yIHRo ZSB0b29sLiAgVXNpbmcKKyAgLS11bmljb2RlPWxvY2FsZSB3aWxsIGRpc3BsYXkgdGhlbSBhY2Nv cmRpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlLgorICBVc2luZyAtLXVuaWNvZGU9aGV4IHdpbGwg ZGlzcGxheSB0aGVtIGFzIGhleCBieXRlIHZhbHVlcywgd2hpbHN0CisgIC0tdW5pY29kZT1lc2Nh cGUgd2lsbCBkaXNwbGF5IHRoZW0gYXMgZXNjYXBlIHNlcXVlbmNlcy4gIEluIGFkZGl0aW9uCisg IHVzaW5nIC0tdW5pY29kZT1oaWdobGlnaHQgd2lsbCBkaXNwbGF5IHRoZW0gYXMgdW5pY29kZSBl c2NhcGUgc2VxdWVuY2VzCisgIGhpZ2hsaWdodGVkIGluIHJlZCAoaWYgc3VwcG9ydGVkIGJ5IHRo ZSBvdXRwdXQgZGV2aWNlKS4KKwogQ2hhbmdlcyBpbiAyLjM3OgogCiAqIFRoZSByZWFkZWxmIHRv b2wgaGFzIGEgbmV3IGNvbW1hbmQgbGluZSBvcHRpb24gd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3Bl Y2lmeQpkaWZmIC0tZ2l0IGEvYmludXRpbHMvZG9jL2JpbnV0aWxzLnRleGkgYi9iaW51dGlscy9k b2MvYmludXRpbHMudGV4aQppbmRleCA1MDRjM2VhZTE3Ny4uNWRlMDYzMWYzZjQgMTAwNjQ0Ci0t LSBhL2JpbnV0aWxzL2RvYy9iaW51dGlscy50ZXhpCisrKyBiL2JpbnV0aWxzL2RvYy9iaW51dGls cy50ZXhpCkBAIC04MTIsNiArODEyLDcgQEAgbm0gW0BvcHRpb257LUF9fEBvcHRpb257LW99fEBv cHRpb257LS1wcmludC1maWxlLW5hbWV9XQogICAgW0BvcHRpb257LXN9fEBvcHRpb257LS1wcmlu dC1hcm1hcH1dCiAgICBbQG9wdGlvbnstdH0gQHZhcntyYWRpeH18QG9wdGlvbnstLXJhZGl4PX1A dmFye3JhZGl4fV0KICAgIFtAb3B0aW9uey11fXxAb3B0aW9uey0tdW5kZWZpbmVkLW9ubHl9XQor ICAgW0BvcHRpb257LVV9IEB2YXJ7bWV0aG9kfV0gW0BvcHRpb257LS11bmljb2RlPX1AdmFye21l dGhvZH1dCiAgICBbQG9wdGlvbnstVn18QG9wdGlvbnstLXZlcnNpb259XQogICAgW0BvcHRpb257 LVggMzJfNjR9XQogICAgW0BvcHRpb257LS1kZWZpbmVkLW9ubHl9XQpAQCAtMTEzMiw2ICsxMTMz LDIxIEBAIFVzZSBAdmFye3JhZGl4fSBhcyB0aGUgcmFkaXggZm9yIHByaW50aW5nIHRoZSBzeW1i b2wgdmFsdWVzLiAgSXQgbXVzdCBiZQogQGNpbmRleCB1bmRlZmluZWQgc3ltYm9scwogRGlzcGxh eSBvbmx5IHVuZGVmaW5lZCBzeW1ib2xzICh0aG9zZSBleHRlcm5hbCB0byBlYWNoIG9iamVjdCBm aWxlKS4KIAorQGl0ZW0gLVUgQHZhcntbZHxpfGx8ZXx4fGhdfQorQGl0ZW14IC0tdW5pY29kZT1A dmFye1tkZWZhdWx0fGludmFsaWR8bG9jYWxlfGVzY2FwZXxoZXh8aGlnaGxpZ2h0XX0KK0NvbnRy b2xzIHRoZSBkaXNwbGF5IG9mIFVURi04IGVuY29kZWQgbXVsaWJ5dGUgY2hhcmFjdGVycyBpbiBz dHJpbmdzLgorVGhlIGRlZmF1bHQgKEBvcHRpb257LS11bmljb2RlPWRlZmF1bHR9KSBpcyB0byBn aXZlIHRoZW0gbm8gc3BlY2lhbAordHJlYXRtZW50LiAgVGhlIEBvcHRpb257LS11bmljb2RlPWxv Y2FsZX0gb3B0aW9uIGRpc3BsYXlzIHRoZSBzZXF1ZW5jZQoraW4gdGhlIGN1cnJlbnQgbG9jYWxl LCB3aGljaCBtYXkgb3IgbWF5IG5vdCBzdXBwb3J0IHRoZW0uICBUaGUgb3B0aW9ucworQG9wdGlv bnstLXVuaWNvZGU9aGV4fSBhbmQgQG9wdGlvbnstLXVuaWNvZGU9aW52YWxpZH0gZGlzcGxheSB0 aGVtIGFzCitoZXggYnl0ZSBzZXF1ZW5jZXMgZW5jbG9zZWQgYnkgZWl0aGVyIGFuZ2xlIGJyYWNr ZXRzIG9yIGN1cmx5IGJyYWNlcy4KKworVGhlIEBvcHRpb257LS11bmljb2RlPWVzY2FwZX0gb3B0 aW9uIGRpc3BsYXlzIHRoZW0gYXMgZXNjYXBlIHNlcXVlbmNlcworKEB2YXJ7XHV4eHh4fSkgYW5k IHRoZSBAb3B0aW9uey0tdW5pY29kZT1oaWdobGlnaHR9IG9wdGlvbiBkaXNwbGF5cwordGhlbSBh cyBlc2NhcGUgc2VxdWVuY2VzIGhpZ2hsaWdodGVkIGluIHJlZCAoaWYgc3VwcG9ydGVkIGJ5IHRo ZQorb3V0cHV0IGRldmljZSkuICBUaGUgY29sb3VyaW5nIGlzIGludGVuZGVkIHRvIGRyYXcgYXR0 ZW50aW9uIHRvIHRoZQorcHJlc2VuY2Ugb2YgdW5pY29kZSBzZXF1ZW5jZXMgd2hlcmUgdGhleSBt aWdodCBub3QgYmUgZXhwZWN0ZWQuCisKIEBpdGVtIC1WCiBAaXRlbXggLS12ZXJzaW9uCiBTaG93 IHRoZSB2ZXJzaW9uIG51bWJlciBvZiBAY29tbWFuZHtubX0gYW5kIGV4aXQuCkBAIC0yMjQ3LDYg KzIyNjMsNyBAQCBvYmpkdW1wIFtAb3B0aW9uey1hfXxAb3B0aW9uey0tYXJjaGl2ZS1oZWFkZXJz fV0KICAgICAgICAgW0BvcHRpb257LS1wcmVmaXgtc3RyaXA9fUB2YXJ7bGV2ZWx9XQogICAgICAg ICBbQG9wdGlvbnstLWluc24td2lkdGg9fUB2YXJ7d2lkdGh9XQogICAgICAgICBbQG9wdGlvbnst LXZpc3VhbGl6ZS1qdW1wc1s9Y29sb3J8PWV4dGVuZGVkLWNvbG9yfD1vZmZdfQorICAgICAgICBb QG9wdGlvbnstVX0gQHZhcnttZXRob2R9XSBbQG9wdGlvbnstLXVuaWNvZGU9fUB2YXJ7bWV0aG9k fV0KICAgICAgICAgW0BvcHRpb257LVZ9fEBvcHRpb257LS12ZXJzaW9ufV0KICAgICAgICAgW0Bv cHRpb257LUh9fEBvcHRpb257LS1oZWxwfV0KICAgICAgICAgQHZhcntvYmpmaWxlfUBkb3Rze30K QEAgLTI5MjEsNiArMjkzOCwyMSBAQCBXaGVuIGRpc3BsYXlpbmcgc3ltYm9scyBpbmNsdWRlIHRo b3NlIHdoaWNoIHRoZSB0YXJnZXQgY29uc2lkZXJzIHRvIGJlCiBzcGVjaWFsIGluIHNvbWUgd2F5 IGFuZCB3aGljaCB3b3VsZCBub3Qgbm9ybWFsbHkgYmUgb2YgaW50ZXJlc3QgdG8gdGhlCiB1c2Vy LgogCitAaXRlbSAtVSBAdmFye1tkfGl8bHxlfHh8aF19CitAaXRlbXggLS11bmljb2RlPUB2YXJ7 W2RlZmF1bHR8aW52YWxpZHxsb2NhbGV8ZXNjYXBlfGhleHxoaWdobGlnaHRdfQorQ29udHJvbHMg dGhlIGRpc3BsYXkgb2YgVVRGLTggZW5jb2RlZCBtdWxpYnl0ZSBjaGFyYWN0ZXJzIGluIHN0cmlu Z3MuCitUaGUgZGVmYXVsdCAoQG9wdGlvbnstLXVuaWNvZGU9ZGVmYXVsdH0pIGlzIHRvIGdpdmUg dGhlbSBubyBzcGVjaWFsCit0cmVhdG1lbnQuICBUaGUgQG9wdGlvbnstLXVuaWNvZGU9bG9jYWxl fSBvcHRpb24gZGlzcGxheXMgdGhlIHNlcXVlbmNlCitpbiB0aGUgY3VycmVudCBsb2NhbGUsIHdo aWNoIG1heSBvciBtYXkgbm90IHN1cHBvcnQgdGhlbS4gIFRoZSBvcHRpb25zCitAb3B0aW9uey0t dW5pY29kZT1oZXh9IGFuZCBAb3B0aW9uey0tdW5pY29kZT1pbnZhbGlkfSBkaXNwbGF5IHRoZW0g YXMKK2hleCBieXRlIHNlcXVlbmNlcyBlbmNsb3NlZCBieSBlaXRoZXIgYW5nbGUgYnJhY2tldHMg b3IgY3VybHkgYnJhY2VzLgorCitUaGUgQG9wdGlvbnstLXVuaWNvZGU9ZXNjYXBlfSBvcHRpb24g ZGlzcGxheXMgdGhlbSBhcyBlc2NhcGUgc2VxdWVuY2VzCisoQHZhcntcdXh4eHh9KSBhbmQgdGhl IEBvcHRpb257LS11bmljb2RlPWhpZ2hsaWdodH0gb3B0aW9uIGRpc3BsYXlzCit0aGVtIGFzIGVz Y2FwZSBzZXF1ZW5jZXMgaGlnaGxpZ2h0ZWQgaW4gcmVkIChpZiBzdXBwb3J0ZWQgYnkgdGhlCitv dXRwdXQgZGV2aWNlKS4gIFRoZSBjb2xvdXJpbmcgaXMgaW50ZW5kZWQgdG8gZHJhdyBhdHRlbnRp b24gdG8gdGhlCitwcmVzZW5jZSBvZiB1bmljb2RlIHNlcXVlbmNlcyB3aGVyZSB0aGV5IG1pZ2h0 IG5vdCBiZSBleHBlY3RlZC4KKwogQGl0ZW0gLVYKIEBpdGVteCAtLXZlcnNpb24KIFByaW50IHRo ZSB2ZXJzaW9uIG51bWJlciBvZiBAY29tbWFuZHtvYmpkdW1wfSBhbmQgZXhpdC4KQEAgLTMxOTcs NiArMzIyOSw3IEBAIHN0cmluZ3MgW0BvcHRpb257LWFmb3ZWfV0gW0BvcHRpb257LX1AdmFye21p bi1sZW59XQogICAgICAgICBbQG9wdGlvbnstbn0gQHZhcnttaW4tbGVufV0gW0BvcHRpb257LS1i eXRlcz19QHZhcnttaW4tbGVufV0KICAgICAgICAgW0BvcHRpb257LXR9IEB2YXJ7cmFkaXh9XSBb QG9wdGlvbnstLXJhZGl4PX1AdmFye3JhZGl4fV0KICAgICAgICAgW0BvcHRpb257LWV9IEB2YXJ7 ZW5jb2Rpbmd9XSBbQG9wdGlvbnstLWVuY29kaW5nPX1AdmFye2VuY29kaW5nfV0KKyAgICAgICAg W0BvcHRpb257LVV9IEB2YXJ7bWV0aG9kfV0gW0BvcHRpb257LS11bmljb2RlPX1AdmFye21ldGhv ZH1dCiAgICAgICAgIFtAb3B0aW9uey19XSBbQG9wdGlvbnstLWFsbH1dIFtAb3B0aW9uey0tcHJp bnQtZmlsZS1uYW1lfV0KICAgICAgICAgW0BvcHRpb257LVR9IEB2YXJ7YmZkbmFtZX1dIFtAb3B0 aW9uey0tdGFyZ2V0PX1AdmFye2JmZG5hbWV9XQogICAgICAgICBbQG9wdGlvbnstd31dIFtAb3B0 aW9uey0taW5jbHVkZS1hbGwtd2hpdGVzcGFjZX1dCkBAIC0zMjg4LDYgKzMzMjEsMjggQEAgc2lu Z2xlLTgtYml0LWJ5dGUgY2hhcmFjdGVycywgQHNhbXB7Yn0gPSAxNi1iaXQgYmlnZW5kaWFuLCBA c2FtcHtsfSA9CiBsaXR0bGVlbmRpYW4uICBVc2VmdWwgZm9yIGZpbmRpbmcgd2lkZSBjaGFyYWN0 ZXIgc3RyaW5ncy4gKEBzYW1we2x9CiBhbmQgQHNhbXB7Yn0gYXBwbHkgdG8sIGZvciBleGFtcGxl LCBVbmljb2RlIFVURi0xNi9VQ1MtMiBlbmNvZGluZ3MpLgogCitAaXRlbSAtVSBAdmFye1tkfGl8 bHxlfHh8aF19CitAaXRlbXggLS11bmljb2RlPUB2YXJ7W2RlZmF1bHR8aW52YWxpZHxsb2NhbGV8 ZXNjYXBlfGhleHxoaWdobGlnaHRdfQorQ29udHJvbHMgdGhlIGRpc3BsYXkgb2YgVVRGLTggZW5j b2RlZCBtdWxpYnl0ZSBjaGFyYWN0ZXJzIGluIHN0cmluZ3MuCitUaGUgZGVmYXVsdCAoQG9wdGlv bnstLXVuaWNvZGU9ZGVmYXVsdH0pIGlzIHRvIGdpdmUgdGhlbSBubyBzcGVjaWFsCit0cmVhdG1l bnQsIGFuZCBpbnN0ZWFkIHJlbHkgdXBvbiB0aGUgc2V0dGluZyBvZiB0aGUKK0BvcHRpb257LS1l bmNvZGluZ30gb3B0aW9uLiAgVGhlIG90aGVyIHZhbHVlcyBmb3IgdGhpcyBvcHRpb24KK2F1dG9t YXRpY2FsbHkgZW5hYmxlIEBvcHRpb257LS1lbmNvZGluZz1TfS4KKworVGhlIEBvcHRpb257LS11 bmljb2RlPWludmFsaWR9IG9wdGlvbiB0cmVhdHMgdGhlbSBhcyBub24tZ3JhcGhpYworY2hhcmFj dGVycyBhbmQgaGVuY2Ugbm90IHBhcnQgb2YgYSB2YWxpZCBzdHJpbmcuICBBbGwgdGhlIHJlbWFp bmluZworb3B0aW9ucyB0cmVhdCB0aGVtIGFzIHZhbGlkIHN0cmluZyBjaGFyYWN0ZXJzLgorCitU aGUgQG9wdGlvbnstLXVuaWNvZGU9bG9jYWxlfSBvcHRpb24gZGlzcGxheXMgdGhlbSBpbiB0aGUg Y3VycmVudAorbG9jYWxlLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBzdXBwb3J0IFVURi04IGVuY29k aW5nLiAgVGhlCitAb3B0aW9uey0tdW5pY29kZT1oZXh9IG9wdGlvbiBkaXNwbGF5cyB0aGVtIGFz IGhleCBieXRlIHNlcXVlbmNlcworZW5jbG9zZWQgYmV0d2VlbiBAdmFyezw+fSBjaGFyYWN0ZXJz LiAgVGhlIEBvcHRpb257LS11bmljb2RlPWVzY2FwZX0KK29wdGlvbiBkaXNwbGF5cyB0aGVtIGFz IGVzY2FwZSBzZXF1ZW5jZXMgKEB2YXJ7XHV4eHh4fSkgYW5kIHRoZQorQG9wdGlvbnstLXVuaWNv ZGU9aGlnaGxpZ2h0fSBvcHRpb24gZGlzcGxheXMgdGhlbSBhcyBlc2NhcGUgc2VxdWVuY2VzCito aWdobGlnaHRlZCBpbiByZWQgKGlmIHN1cHBvcnRlZCBieSB0aGUgb3V0cHV0IGRldmljZSkuICBU aGUgY29sb3VyaW5nCitpcyBpbnRlbmRlZCB0byBkcmF3IGF0dGVudGlvbiB0byB0aGUgcHJlc2Vu Y2Ugb2YgdW5pY29kZSBzZXF1ZW5jZXMKK3doZXJlIHRoZXkgbWlnaHQgbm90IGJlIGV4cGVjdGVk LgorCiBAaXRlbSAtVCBAdmFye2JmZG5hbWV9CiBAaXRlbXggLS10YXJnZXQ9QHZhcntiZmRuYW1l fQogQGNpbmRleCBvYmplY3QgY29kZSBmb3JtYXQKQEAgLTQ3OTYsNiArNDg1MSw3IEBAIHJlYWRl bGYgW0BvcHRpb257LWF9fEBvcHRpb257LS1hbGx9XQogICAgICAgICBbQG9wdGlvbnstLWRlbWFu Z2xlQHZhcns9c3R5bGV9fXxAb3B0aW9uey0tbm8tZGVtYW5nbGV9XQogICAgICAgICBbQG9wdGlv bnstLXF1aWV0fV0KICAgICAgICAgW0BvcHRpb257LS1yZWN1cnNlLWxpbWl0fXxAb3B0aW9uey0t bm8tcmVjdXJzZS1saW1pdH1dCisgICAgICAgIFtAb3B0aW9uey1VfSBAdmFye21ldGhvZH18QG9w dGlvbnstLXVuaWNvZGU9fUB2YXJ7bWV0aG9kfV0KICAgICAgICAgW0BvcHRpb257LW59fEBvcHRp b257LS1ub3Rlc31dCiAgICAgICAgIFtAb3B0aW9uey1yfXxAb3B0aW9uey0tcmVsb2NzfV0KICAg ICAgICAgW0BvcHRpb257LXV9fEBvcHRpb257LS11bndpbmR9XQpAQCAtNDk2Miw2ICs1MDE4LDI4 IEBAIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBkZW1hbmdsZSB0cnVseSBjb21wbGljYXRlZCBuYW1l cy4gIE5vdGUgaG93ZXZlcgogdGhhdCBpZiB0aGUgcmVjdXJzaW9uIGxpbWl0IGlzIGRpc2FibGVk IHRoZW4gc3RhY2sgZXhoYXVzdGlvbiBpcwogcG9zc2libGUgYW5kIGFueSBidWcgcmVwb3J0cyBh Ym91dCBzdWNoIGFuIGV2ZW50IHdpbGwgYmUgcmVqZWN0ZWQuCiAKK0BpdGVtIC1VIEB2YXJ7W2R8 aXxsfGV8eHxoXX0KK0BpdGVteCAtLXVuaWNvZGU9W2RlZmF1bHR8aW52YWxpZHxsb2NhbGV8ZXNj YXBlfGhleHxoaWdobGlnaHRdCitDb250cm9scyB0aGUgZGlzcGxheSBvZiBub24tQVNDSUkgY2hh cmFjdGVycyBpbiBpZGVudGlmaWVyIG5hbWVzLgorVGhlIGRlZmF1bHQgKEBvcHRpb257LS11bmlj b2RlPWxvY2FsZX0gb3IgQG9wdGlvbnstLXVuaWNvZGU9ZGVmYXVsdH0pIGlzCit0byB0cmVhdCB0 aGVtIGFzIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGFuZCBkaXNwbGF5IHRoZW0gaW4gdGhlIGN1cnJl bnQKK2xvY2FsZS4gIEFsbCBvdGhlciB2ZXJzaW9ucyBvZiB0aGlzIG9wdGlvbiB0cmVhdCB0aGUg Ynl0ZXMgYXMgVVRGLTgKK2VuY29kZWQgdmFsdWVzIGFuZCBhdHRlbXB0IHRvIGludGVycHJldCB0 aGVtLiAgSWYgdGhleSBjYW5ub3QgYmUKK2ludGVycHJldGVkIG9yIGlmIHRoZSBAb3B0aW9uey0t dW5pY29kZT1pbnZhbGlkfSBvcHRpb24gaXMgdXNlZCB0aGVuCit0aGV5IGFyZSBkaXNwbGF5ZWQg YXMgYSBzZXF1ZW5jZSBvZiBoZXggYnl0ZXMsIGVuY2xvc2VzIGluIGN1cmx5CitwYXJldGhlc2lz IGNoYXJhY3RlcnMuCisKK1VzaW5nIHRoZSBAb3B0aW9uey0tdW5pY29kZT1lc2NhcGV9IG9wdGlv biB3aWxsIGRpc3BsYXkgdGhlIGNoYXJhY3RlcnMKK2FzIGFzIHVuaWNvZGUgZXNjYXBlIHNlcXVl bmNlcyAoQHZhcntcdXh4eHh9KS4gIFVzaW5nIHRoZQorQG9wdGlvbnstLXVuaWNvZGU9aGV4fSB3 aWxsIGRpc3BsYXkgdGhlIGNoYXJhY3RlcnMgYXMgaGV4IGJ5dGUKK3NlcXVlbmNlcyBlbmNsb3Nl ZCBiZXR3ZWVuIGFuZ2xlIGJyYWNrZXRzLgorCitVc2luZyB0aGUgQG9wdGlvbnstLXVuaWNvZGU9 aGlnaGxpZ2h0fSB3aWxsIGRpc3BsYXkgdGhlIGNoYXJhY3RlcnMgYXMgCit1bmljb2RlIGVzY2Fw ZSBzZXF1ZW5jZXMgYnV0IGl0IHdpbGwgYWxzbyBoaWdobGlnaHRlZCB0aGVtIGluIHJlZCwKK2Fz c3VtaW5nIHRoYXQgY29sb3VyaW5nIGlzIHN1cHBvcnRlZCBieSB0aGUgb3V0cHV0IGRldmljZS4g IFRoZQorY29sb3VyaW5nIGlzIGludGVuZGVkIHRvIGRyYXcgYXR0ZW50aW9uIHRvIHRoZSBwcmVz ZW5jZSBvZiB1bmljb2RlCitzZXF1ZW5jZXMgd2hlbiB0aGV5IG1pZ2h0IG5vdCBiZSBleHBlY3Rl ZC4KKwogQGl0ZW0gLWUKIEBpdGVteCAtLWhlYWRlcnMKIERpc3BsYXkgYWxsIHRoZSBoZWFkZXJz IGluIHRoZSBmaWxlLiAgRXF1aXZhbGVudCB0byBAb3B0aW9uey1oIC1sIC1TfS4KZGlmZiAtLWdp dCBhL2JpbnV0aWxzL25tLmMgYi9iaW51dGlscy9ubS5jCmluZGV4IDc2MDY5NTZjOTJhLi5lN2Vk NmY4MjlhZiAxMDA2NDQKLS0tIGEvYmludXRpbHMvbm0uYworKysgYi9iaW51dGlscy9ubS5jCkBA IC0zOCw2ICszOCwxMSBAQAogI2luY2x1ZGUgImJ1Y29tbS5oIgogI2luY2x1ZGUgInBsdWdpbi1h cGkuaCIKICNpbmNsdWRlICJwbHVnaW4uaCIKKyNpbmNsdWRlICJzYWZlLWN0eXBlLmgiCisKKyNp Zm5kZWYgc3RyZXEKKyNkZWZpbmUgc3RyZXEoYSxiKSAoc3RyY21wICgoYSksKGIpKSA9PSAwKQor I2VuZGlmCiAKIC8qIFdoZW4gc29ydGluZyBieSBzaXplLCB3ZSB1c2UgdGhpcyBzdHJ1Y3R1cmUg dG8gaG9sZCB0aGUgc2l6ZSBhbmQgYQogICAgcG9pbnRlciB0byB0aGUgbWluaXN5bWJvbC4gICov CkBAIC0yMTYsNiArMjIxLDE4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwbHVnaW5fdGFyZ2V0ID0g TlVMTDsKIHN0YXRpYyBiZmQgKmxpbmVub19jYWNoZV9iZmQ7CiBzdGF0aWMgYmZkICpsaW5lbm9f Y2FjaGVfcmVsX2JmZDsKIAordHlwZWRlZiBlbnVtIHVuaWNvZGVfZGlzcGxheV90eXBlCit7Cisg IHVuaWNvZGVfZGVmYXVsdCA9IDAsCisgIHVuaWNvZGVfbG9jYWxlLAorICB1bmljb2RlX2VzY2Fw ZSwKKyAgdW5pY29kZV9oZXgsCisgIHVuaWNvZGVfaGlnaGxpZ2h0LAorICB1bmljb2RlX2ludmFs aWQKK30gdW5pY29kZV9kaXNwbGF5X3R5cGU7CisKK3N0YXRpYyB1bmljb2RlX2Rpc3BsYXlfdHlw ZSB1bmljb2RlX2Rpc3BsYXkgPSB1bmljb2RlX2RlZmF1bHQ7CisKIGVudW0gbG9uZ19vcHRpb25f dmFsdWVzCiB7CiAgIE9QVElPTl9UQVJHRVQgPSAyMDAsCkBAIC0yNjAsNiArMjc3LDcgQEAgc3Rh dGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPQogICB7InRhcmdldCIsIHJlcXVpcmVk X2FyZ3VtZW50LCAwLCBPUFRJT05fVEFSR0VUfSwKICAgeyJkZWZpbmVkLW9ubHkiLCBub19hcmd1 bWVudCwgJmRlZmluZWRfb25seSwgMX0sCiAgIHsidW5kZWZpbmVkLW9ubHkiLCBub19hcmd1bWVu dCwgJnVuZGVmaW5lZF9vbmx5LCAxfSwKKyAgeyJ1bmljb2RlIiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsICdVJ30sCiAgIHsidmVyc2lvbiIsIG5vX2FyZ3VtZW50LCAmc2hvd192ZXJzaW9uLCAx fSwKICAgeyJ3aXRoLXN5bWJvbC12ZXJzaW9ucyIsIG5vX2FyZ3VtZW50LCAmd2l0aF9zeW1ib2xf dmVyc2lvbnMsIDF9LAogICB7IndpdGhvdXQtc3ltYm9sLXZlcnNpb25zIiwgbm9fYXJndW1lbnQs ICZ3aXRoX3N5bWJvbF92ZXJzaW9ucywgMH0sCkBAIC0zMTMsNiArMzMxLDggQEAgdXNhZ2UgKEZJ TEUgKnN0cmVhbSwgaW50IHN0YXR1cykKICAgLXQsIC0tcmFkaXg9UkFESVggICAgICBVc2UgUkFE SVggZm9yIHByaW50aW5nIHN5bWJvbCB2YWx1ZXNcblwKICAgICAgIC0tdGFyZ2V0PUJGRE5BTUUg ICBTcGVjaWZ5IHRoZSB0YXJnZXQgb2JqZWN0IGZvcm1hdCBhcyBCRkROQU1FXG5cCiAgIC11LCAt LXVuZGVmaW5lZC1vbmx5ICAgRGlzcGxheSBvbmx5IHVuZGVmaW5lZCBzeW1ib2xzXG5cCisgIC1V IHtkfHN8aXx4fGV8aH0gICAgICAgU3BlY2lmeSBob3cgdG8gdHJlYXQgVVRGLTggZW5jb2RlZCB1 bmljb2RlIGNoYXJhY3RlcnNcblwKKyAgICAgIC0tdW5pY29kZT17ZGVmYXVsdHxzaG93fGludmFs aWR8aGV4fGVzY2FwZXxoaWdobGlnaHR9XG5cCiAgICAgICAtLXdpdGgtc3ltYm9sLXZlcnNpb25z ICBEaXNwbGF5IHZlcnNpb24gc3RyaW5ncyBhZnRlciBzeW1ib2wgbmFtZXNcblwKICAgLVggMzJf NjQgICAgICAgICAgICAgICAoaWdub3JlZClcblwKICAgQEZJTEUgICAgICAgICAgICAgICAgICBS ZWFkIG9wdGlvbnMgZnJvbSBGSUxFXG5cCkBAIC00MzIsNiArNDUyLDE4NyBAQCBnZXRfY29mZl9z eW1ib2xfdHlwZSAoY29uc3Qgc3RydWN0IGludGVybmFsX3N5bWVudCAqc3ltKQogICByZXR1cm4g YnVmcDsKIH0KIAwKKy8qIENvbnZlcnQgYSBwb3RlbnRpYWwgVVRGLTggZW5jb2RlZCBzZXF1ZW5j ZSBpbiBJTiBpbnRvIGNoYXJhY3RlcnMgaW4gT1VULgorICAgVGhlIGNvbnZlcnNpb24gZm9ybWF0 IGlzIGNvbnRyb2xsZWQgYnkgdGhlIHVuaWNvZGVfZGlzcGxheSB2YXJpYWJsZS4KKyAgIFJldHVy bnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFkZGVkIHRvIE9VVC4KKyAgIFJldHVybnMgdGhl IG51bWJlciBvZiBieXRlcyBjb25zdW1lZCBmcm9tIElOIGluIENPTlNVTUVELgorICAgQWx3YXlz IGNvbnN1bWVzIGF0IGxlYXN0IG9uZSBieXRlIGFuZCBkaXNwbGF5cyBhdCBsZWFzdCBvbmUgY2hh cmFjdGVyLiAgKi8KKyAgIAorc3RhdGljIHVuc2lnbmVkIGludAorZGlzcGxheV91dGY4IChjb25z dCB1bnNpZ25lZCBjaGFyICogaW4sIGNoYXIgKiBvdXQsIHVuc2lnbmVkIGludCAqIGNvbnN1bWVk KQoreworICBjaGFyICogICAgICAgIG9yaWdfb3V0ID0gb3V0OworICB1bnNpZ25lZCBpbnQgIG5j aGFycyA9IDA7CisgIHVuc2lnbmVkIGludCBqOworCisgIGlmICh1bmljb2RlX2Rpc3BsYXkgPT0g dW5pY29kZV9kZWZhdWx0KQorICAgIGdvdG8gaW52YWxpZDsKKworICBpZiAoaW5bMF0gPCAweGMw KQorICAgIGdvdG8gaW52YWxpZDsKKworICBpZiAoKGluWzFdICYgMHhjMCkgIT0gMHg4MCkKKyAg ICBnb3RvIGludmFsaWQ7CisKKyAgaWYgKChpblswXSAmIDB4MjApID09IDApCisgICAgeworICAg ICAgbmNoYXJzID0gMjsKKyAgICAgIGdvdG8gdmFsaWQ7CisgICAgfQorCisgIGlmICgoaW5bMl0g JiAweGMwKSAhPSAweDgwKQorICAgIGdvdG8gaW52YWxpZDsKKworICBpZiAoKGluWzBdICYgMHgx MCkgPT0gMCkKKyAgICB7CisgICAgICBuY2hhcnMgPSAzOworICAgICAgZ290byB2YWxpZDsKKyAg ICB9CisKKyAgaWYgKChpblszXSAmIDB4YzApICE9IDB4ODApCisgICAgZ290byBpbnZhbGlkOwor CisgIG5jaGFycyA9IDQ7CisKKyB2YWxpZDoKKyAgc3dpdGNoICh1bmljb2RlX2Rpc3BsYXkpCisg ICAgeworICAgIGNhc2UgdW5pY29kZV9sb2NhbGU6CisgICAgICAvKiBDb3B5IHRoZSBieXRlcyBp bnRvIHRoZSBvdXRwdXQgYnVmZmVyIGFzIGlzLiAgKi8KKyAgICAgIG1lbWNweSAob3V0LCBpbiwg bmNoYXJzKTsKKyAgICAgIG91dCArPSBuY2hhcnM7CisgICAgICBicmVhazsKKworICAgIGNhc2Ug dW5pY29kZV9pbnZhbGlkOgorICAgIGNhc2UgdW5pY29kZV9oZXg6CisgICAgICBvdXQgKz0gc3By aW50ZiAob3V0LCAiJWMiLCB1bmljb2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9oZXggPyAnPCcgOiAn eycpOworICAgICAgb3V0ICs9IHNwcmludGYgKG91dCwgIjB4Iik7CisgICAgICBmb3IgKGogPSAw OyBqIDwgbmNoYXJzOyBqKyspCisJb3V0ICs9IHNwcmludGYgKG91dCwgIiUwMngiLCBpbiBbal0p OworICAgICAgb3V0ICs9IHNwcmludGYgKG91dCwgIiVjIiwgdW5pY29kZV9kaXNwbGF5ID09IHVu aWNvZGVfaGV4ID8gJz4nIDogJ30nKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSB1 bmljb2RlX2hpZ2hsaWdodDoKKyAgICAgIGlmIChpc2F0dHkgKDEpKQorCW91dCArPSBzcHJpbnRm IChvdXQsICJceDFCWzMxOzQ3bSIpOyAvKiBSZWQuICAqLworICAgICAgLyogRmFsbCB0aHJvdWdo LiAgKi8KKyAgICBjYXNlIHVuaWNvZGVfZXNjYXBlOgorICAgICAgc3dpdGNoIChuY2hhcnMpCisJ eworCWNhc2UgMjoKKwkgIG91dCArPSBzcHJpbnRmIChvdXQsICJcXHUlMDJ4JTAyeCIsCisJCSAg KChpblswXSAmIDB4MWMpID4+IDIpLCAKKwkJICAoKGluWzBdICYgMHgwMykgPDwgNikgfCAoaW5b MV0gJiAweDNmKSk7CisJICBicmVhazsKKworCWNhc2UgMzoKKwkgIG91dCArPSBzcHJpbnRmIChv dXQsICJcXHUlMDJ4JTAyeCIsCisJCSAgKChpblswXSAmIDB4MGYpIDw8IDQpIHwgKChpblsxXSAm IDB4M2MpID4+IDIpLAorCQkgICgoaW5bMV0gJiAweDAzKSA8PCA2KSB8ICgoaW5bMl0gJiAweDNm KSkpOworCSAgYnJlYWs7CisKKwljYXNlIDQ6CisJICBvdXQgKz0gc3ByaW50ZiAob3V0LCAiXFx1 JTAyeCUwMnglMDJ4IiwKKwkJICAoKGluWzBdICYgMHgwNykgPDwgNikgfCAoKGluWzFdICYgMHgz YykgPj4gMiksCisJCSAgKChpblsxXSAmIDB4MDMpIDw8IDYpIHwgKChpblsyXSAmIDB4M2MpID4+ IDIpLAorCQkgICgoaW5bMl0gJiAweDAzKSA8PCA2KSB8ICgoaW5bM10gJiAweDNmKSkpOworCSAg YnJlYWs7CisJZGVmYXVsdDoKKwkgIC8qIFVSRy4gICovCisJICBicmVhazsKKwl9CisKKyAgICAg IGlmICh1bmljb2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9oaWdobGlnaHQgJiYgaXNhdHR5ICgxKSkK KwlvdXQgKz0gc3ByaW50ZiAob3V0LCAiXDAzM1swbSIpOyAvKiBEZWZhdWx0IGNvbG91ci4gICov CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAvKiBVUkcgKi8KKyAgICAgIGJy ZWFrOworICAgIH0KKworICAqIGNvbnN1bWVkID0gbmNoYXJzOworICByZXR1cm4gb3V0IC0gb3Jp Z19vdXQ7CisKKyBpbnZhbGlkOgorICAvKiBOb3QgYSB2YWxpZCBVVEYtOCBzZXF1ZW5jZS4gICov CisgICpvdXQgPSAqaW47CisgICogY29uc3VtZWQgPSAxOworICByZXR1cm4gMTsKK30KKworLyog Q29udmVydCBhbnkgVVRGLTggZW5jb2RlZCBjaGFyYWN0ZXJzIGluIE5BTUUgaW50byB0aGUgZm9y bSBzcGVjaWZpZWQgYnkKKyAgIHVuaWNvZGVfZGlzcGxheS4gIEFsc28gY29udmVydHMgY29udHJv bCBjaGFyYWN0ZXJzLiAgUmV0dXJucyBhIHN0YXRpYworICAgYnVmZmVyIGlmIGNvbnZlcnNpb24g d2FzIG5lY2Vzc2FyeS4KKyAgIENvZGUgc3RvbGVuIGZyb20gb2JqZHVtcC5jOnNhbml0aXplX3N0 cmluZygpLiAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKgorY29udmVydF91dGY4IChjb25zdCBj aGFyICogaW4pCit7CisgIHN0YXRpYyBjaGFyICogIGJ1ZmZlciA9IE5VTEw7CisgIHN0YXRpYyBz aXplX3QgIGJ1ZmZlcl9sZW4gPSAwOworICBjb25zdCBjaGFyICogICBvcmlnaW5hbCA9IGluOwor ICBjaGFyICogICAgICAgICBvdXQ7CisKKyAgLyogUGFyYW5vaWEuICAqLworICBpZiAoaW4gPT0g TlVMTCkKKyAgICByZXR1cm4gIiI7CisKKyAgLyogU2VlIGlmIGFueSBjb252ZXJzaW9uIGlzIG5l Y2Vzc2FyeS4KKyAgICAgSW4gdGhlIG1ham9yaXR5IG9mIGNhc2VzIGl0IHdpbGwgbm90IGJlIG5l ZWRlZC4gICovCisgIGRvCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciBjID0gKmluKys7CisK KyAgICAgIGlmIChjID09IDApCisJcmV0dXJuIG9yaWdpbmFsOworCisgICAgICBpZiAoSVNDTlRS TCAoYykpCisJYnJlYWs7CisKKyAgICAgIGlmICh1bmljb2RlX2Rpc3BsYXkgIT0gdW5pY29kZV9k ZWZhdWx0ICYmIGMgPj0gMHhjMCkKKwlicmVhazsKKyAgICB9CisgIHdoaWxlICgxKTsKKworICAv KiBDb3B5IHRoZSBpbnB1dCwgdHJhbnNsYXRpbmcgYXMgbmVlZGVkLiAgKi8KKyAgaW4gPSBvcmln aW5hbDsKKyAgaWYgKGJ1ZmZlcl9sZW4gPCAoc3RybGVuIChpbikgKiA5KSkKKyAgICB7CisgICAg ICBmcmVlICgodm9pZCAqKSBidWZmZXIpOworICAgICAgYnVmZmVyX2xlbiA9IHN0cmxlbiAoaW4p ICogOTsKKyAgICAgIGJ1ZmZlciA9IHhtYWxsb2MgKGJ1ZmZlcl9sZW4gKyAxKTsKKyAgICB9CisK KyAgb3V0ID0gYnVmZmVyOworICBkbworICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpp bisrOworCisgICAgICBpZiAoYyA9PSAwKQorCWJyZWFrOworCisgICAgICBpZiAoSVNDTlRSTCAo YykpCisJeworCSAgKm91dCsrID0gJ14nOworCSAgKm91dCsrID0gYyArIDB4NDA7CisJfQorICAg ICAgZWxzZSBpZiAodW5pY29kZV9kaXNwbGF5ICE9IHVuaWNvZGVfZGVmYXVsdCAmJiBjID49IDB4 YzApCisJeworCSAgdW5zaWduZWQgaW50IG51bV9jb25zdW1lZDsKKworCSAgb3V0ICs9IGRpc3Bs YXlfdXRmOCAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikoaW4gLSAxKSwgb3V0LCAmIG51bV9jb25z dW1lZCk7CisJICBpbiArPSBudW1fY29uc3VtZWQgLSAxOworCX0KKyAgICAgIGVsc2UKKwkqb3V0 KysgPSBjOworICAgIH0KKyAgd2hpbGUgKDEpOworCisgICpvdXQgPSAwOworICByZXR1cm4gYnVm ZmVyOworfQorCiAvKiBQcmludCBzeW1ib2wgbmFtZSBOQU1FLCByZWFkIGZyb20gQUJGRCwgd2l0 aCBwcmludGYgZm9ybWF0IEZPUk0sCiAgICBkZW1hbmdsaW5nIGl0IGlmIHJlcXVlc3RlZC4gICov CiAKQEAgLTQ0NCw2ICs2NDUsNyBAQCBwcmludF9zeW1uYW1lIChjb25zdCBjaGFyICpmb3JtLCBz dHJ1Y3QgZXh0ZW5kZWRfc3ltYm9sX2luZm8gKmluZm8sCiAKICAgaWYgKG5hbWUgPT0gTlVMTCkK ICAgICBuYW1lID0gaW5mby0+c2luZm8tPm5hbWU7CisKICAgaWYgKCF3aXRoX3N5bWJvbF92ZXJz aW9ucwogICAgICAgJiYgYmZkX2dldF9mbGF2b3VyIChhYmZkKSA9PSBiZmRfdGFyZ2V0X2VsZl9m bGF2b3VyKQogICAgIHsKQEAgLTQ1MSw2ICs2NTMsNyBAQCBwcmludF9zeW1uYW1lIChjb25zdCBj aGFyICpmb3JtLCBzdHJ1Y3QgZXh0ZW5kZWRfc3ltYm9sX2luZm8gKmluZm8sCiAgICAgICBpZiAo YXR2ZXIpCiAJKmF0dmVyID0gMDsKICAgICB9CisKICAgaWYgKGRvX2RlbWFuZ2xlICYmICpuYW1l KQogICAgIHsKICAgICAgIGFsbG9jID0gYmZkX2RlbWFuZ2xlIChhYmZkLCBuYW1lLCBkZW1hbmds ZV9mbGFncyk7CkBAIC00NTgsNiArNjYxLDExIEBAIHByaW50X3N5bW5hbWUgKGNvbnN0IGNoYXIg KmZvcm0sIHN0cnVjdCBleHRlbmRlZF9zeW1ib2xfaW5mbyAqaW5mbywKIAluYW1lID0gYWxsb2M7 CiAgICAgfQogCisgIGlmICh1bmljb2RlX2Rpc3BsYXkgIT0gdW5pY29kZV9kZWZhdWx0KQorICAg IHsKKyAgICAgIG5hbWUgPSBjb252ZXJ0X3V0ZjggKG5hbWUpOworICAgIH0KKwogICBpZiAoaW5m byAhPSBOVUxMICYmIGluZm8tPmVsZmluZm8gJiYgd2l0aF9zeW1ib2xfdmVyc2lvbnMpCiAgICAg ewogICAgICAgY29uc3QgY2hhciAqdmVyc2lvbl9zdHJpbmc7CkBAIC0xODA4LDcgKzIwMTYsNyBA QCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgZmF0YWwgKF8oImZhdGFsIGVycm9y OiBsaWJiZmQgQUJJIG1pc21hdGNoIikpOwogICBzZXRfZGVmYXVsdF9iZmRfdGFyZ2V0ICgpOwog Ci0gIHdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiYUFCQ0RlZjpnSGhqSmxu b3BQclNzdDp1dlZ2WDoiLAorICB3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwg ImFBQkNEZWY6Z0hoakpsbm9wUHJTc3Q6dVU6dlZ2WDoiLAogCQkJICAgbG9uZ19vcHRpb25zLCAo aW50ICopIDApKSAhPSBFT0YpCiAgICAgewogICAgICAgc3dpdGNoIChjKQpAQCAtMTkwMSw2ICsy MTA5LDI0IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljYXNlICd1JzoKIAkgIHVu ZGVmaW5lZF9vbmx5ID0gMTsKIAkgIGJyZWFrOworCisJY2FzZSAnVSc6CisJICBpZiAoc3RyZXEg KG9wdGFyZywgImRlZmF1bHQiKSB8fCBzdHJlcSAob3B0YXJnLCAiZCIpKQorCSAgICB1bmljb2Rl X2Rpc3BsYXkgPSB1bmljb2RlX2RlZmF1bHQ7CisJICBlbHNlIGlmIChzdHJlcSAob3B0YXJnLCAi bG9jYWxlIikgfHwgc3RyZXEgKG9wdGFyZywgImwiKSkKKwkgICAgdW5pY29kZV9kaXNwbGF5ID0g dW5pY29kZV9sb2NhbGU7CisJICBlbHNlIGlmIChzdHJlcSAob3B0YXJnLCAiZXNjYXBlIikgfHwg c3RyZXEgKG9wdGFyZywgImUiKSkKKwkgICAgdW5pY29kZV9kaXNwbGF5ID0gdW5pY29kZV9lc2Nh cGU7CisJICBlbHNlIGlmIChzdHJlcSAob3B0YXJnLCAiaW52YWxpZCIpIHx8IHN0cmVxIChvcHRh cmcsICJpIikpCisJICAgIHVuaWNvZGVfZGlzcGxheSA9IHVuaWNvZGVfaW52YWxpZDsKKwkgIGVs c2UgaWYgKHN0cmVxIChvcHRhcmcsICJoZXgiKSB8fCBzdHJlcSAob3B0YXJnLCAieCIpKQorCSAg ICB1bmljb2RlX2Rpc3BsYXkgPSB1bmljb2RlX2hleDsKKwkgIGVsc2UgaWYgKHN0cmVxIChvcHRh cmcsICJoaWdobGlnaHQiKSB8fCBzdHJlcSAob3B0YXJnLCAiaCIpKQorCSAgICB1bmljb2RlX2Rp c3BsYXkgPSB1bmljb2RlX2hpZ2hsaWdodDsKKwkgIGVsc2UKKwkgICAgZmF0YWwgKF8oImludmFs aWQgYXJndW1lbnQgdG8gLVUvLS11bmljb2RlOiAlcyIpLCBvcHRhcmcpOworCSAgYnJlYWs7CisK IAljYXNlICdWJzoKIAkgIHNob3dfdmVyc2lvbiA9IDE7CiAJICBicmVhazsKZGlmZiAtLWdpdCBh L2JpbnV0aWxzL29iamR1bXAuYyBiL2JpbnV0aWxzL29iamR1bXAuYwppbmRleCAxYmZiNWM3MWU3 YS4uMjA0OTlhYWJhMGYgMTAwNjQ0Ci0tLSBhL2JpbnV0aWxzL29iamR1bXAuYworKysgYi9iaW51 dGlscy9vYmpkdW1wLmMKQEAgLTIwNCw2ICsyMDQsMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBv YmpkdW1wX3ByaXZhdGVfZGVzYyAqIGNvbnN0IG9iamR1bXBfcHJpdmF0ZV92ZWN0b3JzW10gPQog CiAvKiBUaGUgbGlzdCBvZiBkZXRlY3RlZCBqdW1wcyBpbnNpZGUgYSBmdW5jdGlvbi4gICovCiBz dGF0aWMgc3RydWN0IGp1bXBfaW5mbyAqZGV0ZWN0ZWRfanVtcHMgPSBOVUxMOworCit0eXBlZGVm IGVudW0gdW5pY29kZV9kaXNwbGF5X3R5cGUKK3sKKyAgdW5pY29kZV9kZWZhdWx0ID0gMCwKKyAg dW5pY29kZV9sb2NhbGUsCisgIHVuaWNvZGVfZXNjYXBlLAorICB1bmljb2RlX2hleCwKKyAgdW5p Y29kZV9oaWdobGlnaHQsCisgIHVuaWNvZGVfaW52YWxpZAorfSB1bmljb2RlX2Rpc3BsYXlfdHlw ZTsKKworc3RhdGljIHVuaWNvZGVfZGlzcGxheV90eXBlIHVuaWNvZGVfZGlzcGxheSA9IHVuaWNv ZGVfZGVmYXVsdDsKIAwKIHN0YXRpYyB2b2lkIHVzYWdlIChGSUxFICosIGludCkgQVRUUklCVVRF X05PUkVUVVJOOwogc3RhdGljIHZvaWQKQEAgLTMzMCw2ICszNDIsOSBAQCB1c2FnZSAoRklMRSAq c3RyZWFtLCBpbnQgc3RhdHVzKQogICAgICAgZnByaW50ZiAoc3RyZWFtLCBfKCJcCiAgIC13LCAt LXdpZGUgICAgICAgICAgICAgICAgICAgICBGb3JtYXQgb3V0cHV0IGZvciBtb3JlIHRoYW4gODAg Y29sdW1uc1xuIikpOwogICAgICAgZnByaW50ZiAoc3RyZWFtLCBfKCJcCisgIC1VW2R8bHxpfHh8 ZXxoXSAgICAgICAgICAgICAgICBDb250cm9scyB0aGUgZGlzcGxheSBvZiBVVEYtOCB1bmljb2Rl IGNoYXJhY3RlcnNcblwKKyAgLS11bmljb2RlPVtkZWZhdWx0fGxvY2FsZXxpbnZhbGlkfGhleHxl c2NhcGV8aGlnaGxpZ2h0XVxuIikpOworICAgICAgZnByaW50ZiAoc3RyZWFtLCBfKCJcCiAgIC16 LCAtLWRpc2Fzc2VtYmxlLXplcm9lcyAgICAgICBEbyBub3Qgc2tpcCBibG9ja3Mgb2YgemVyb2Vz IHdoZW4gZGlzYXNzZW1ibGluZ1xuIikpOwogICAgICAgZnByaW50ZiAoc3RyZWFtLCBfKCJcCiAg ICAgICAtLXN0YXJ0LWFkZHJlc3M9QUREUiAgICAgICBPbmx5IHByb2Nlc3MgZGF0YSB3aG9zZSBh ZGRyZXNzIGlzID49IEFERFJcbiIpKTsKQEAgLTQyMCwxNyArNDM1LDIzIEBAIHN0YXRpYyBzdHJ1 Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdPQogewogICB7ImFkanVzdC12bWEiLCByZXF1aXJlZF9h cmd1bWVudCwgTlVMTCwgT1BUSU9OX0FESlVTVF9WTUF9LAogICB7ImFsbC1oZWFkZXJzIiwgbm9f YXJndW1lbnQsIE5VTEwsICd4J30sCi0gIHsicHJpdmF0ZS1oZWFkZXJzIiwgbm9fYXJndW1lbnQs IE5VTEwsICdwJ30sCi0gIHsicHJpdmF0ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9 LAogICB7ImFyY2hpdGVjdHVyZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnbSd9LAogICB7 ImFyY2hpdmUtaGVhZGVycyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9LAorI2lmZGVmIEVOQUJM RV9MSUJDVEYKKyAgeyJjdGYiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgT1BUSU9OX0NURn0s CisgIHsiY3RmLXBhcmVudCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fQ1RGX1BB UkVOVH0sCisjZW5kaWYKICAgeyJkZWJ1Z2dpbmciLCBub19hcmd1bWVudCwgTlVMTCwgJ2cnfSwK ICAgeyJkZWJ1Z2dpbmctdGFncyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnZSd9LAogICB7ImRlbWFu Z2xlIiwgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEwsICdDJ30sCiAgIHsiZGlzYXNzZW1ibGUiLCBv cHRpb25hbF9hcmd1bWVudCwgTlVMTCwgJ2QnfSwKICAgeyJkaXNhc3NlbWJsZS1hbGwiLCBub19h cmd1bWVudCwgTlVMTCwgJ0QnfSwKLSAgeyJkaXNhc3NlbWJsZXItb3B0aW9ucyIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnTSd9LAogICB7ImRpc2Fzc2VtYmxlLXplcm9lcyIsIG5vX2FyZ3Vt ZW50LCBOVUxMLCAneid9LAorICB7ImRpc2Fzc2VtYmxlci1vcHRpb25zIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICdNJ30sCisgIHsiZHdhcmYiLCBvcHRpb25hbF9hcmd1bWVudCwgTlVMTCwg T1BUSU9OX0RXQVJGfSwKKyAgeyJkd2FyZi1jaGVjayIsIG5vX2FyZ3VtZW50LCAwLCBPUFRJT05f RFdBUkZfQ0hFQ0t9LAorICB7ImR3YXJmLWRlcHRoIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsIE9Q VElPTl9EV0FSRl9ERVBUSH0sCisgIHsiZHdhcmYtc3RhcnQiLCByZXF1aXJlZF9hcmd1bWVudCwg MCwgT1BUSU9OX0RXQVJGX1NUQVJUfSwKICAgeyJkeW5hbWljLXJlbG9jIiwgbm9fYXJndW1lbnQs IE5VTEwsICdSJ30sCiAgIHsiZHluYW1pYy1zeW1zIiwgbm9fYXJndW1lbnQsIE5VTEwsICdUJ30s CiAgIHsiZW5kaWFuIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVElPTl9FTkRJQU59LApA QCAtNDQwLDE2ICs0NjEsMjMgQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW109 CiAgIHsiZnVsbC1jb250ZW50cyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncyd9LAogICB7ImhlYWRl cnMiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnfSwKICAgeyJoZWxwIiwgbm9fYXJndW1lbnQsIE5V TEwsICdIJ30sCisgIHsiaW5jbHVkZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnSSd9LAog ICB7ImluZm8iLCBub19hcmd1bWVudCwgTlVMTCwgJ2knfSwKKyAgeyJpbmxpbmVzIiwgbm9fYXJn dW1lbnQsIDAsIE9QVElPTl9JTkxJTkVTfSwKKyAgeyJpbnNuLXdpZHRoIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsIE9QVElPTl9JTlNOX1dJRFRIfSwKICAgeyJsaW5lLW51bWJlcnMiLCBub19h cmd1bWVudCwgTlVMTCwgJ2wnfSwKLSAgeyJuby1zaG93LXJhdy1pbnNuIiwgbm9fYXJndW1lbnQs ICZzaG93X3Jhd19pbnNuLCAtMX0sCiAgIHsibm8tYWRkcmVzc2VzIiwgbm9fYXJndW1lbnQsICZu b19hZGRyZXNzZXMsIDF9LAotICB7InByb2Nlc3MtbGlua3MiLCBub19hcmd1bWVudCwgJnByb2Nl c3NfbGlua3MsIHRydWV9LAorICB7Im5vLXJlY3Vyc2UtbGltaXQiLCBub19hcmd1bWVudCwgTlVM TCwgT1BUSU9OX05PX1JFQ1VSU0VfTElNSVR9LAorICB7Im5vLXJlY3Vyc2lvbi1saW1pdCIsIG5v X2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fTk9fUkVDVVJTRV9MSU1JVH0sCisgIHsibm8tc2hvdy1y YXctaW5zbiIsIG5vX2FyZ3VtZW50LCAmc2hvd19yYXdfaW5zbiwgLTF9LAorICB7InByZWZpeCIs IHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fUFJFRklYfSwKICAgeyJwcmVmaXgtYWRk cmVzc2VzIiwgbm9fYXJndW1lbnQsICZwcmVmaXhfYWRkcmVzc2VzLCAxfSwKKyAgeyJwcmVmaXgt c3RyaXAiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgT1BUSU9OX1BSRUZJWF9TVFJJUH0sCisg IHsicHJpdmF0ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAorICB7InByaXZhdGUt aGVhZGVycyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorICB7InByb2Nlc3MtbGlua3MiLCBu b19hcmd1bWVudCwgJnByb2Nlc3NfbGlua3MsIHRydWV9LAogICB7InJlY3Vyc2UtbGltaXQiLCBu b19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX1JFQ1VSU0VfTElNSVR9LAogICB7InJlY3Vyc2lvbi1s aW1pdCIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fUkVDVVJTRV9MSU1JVH0sCi0gIHsibm8t cmVjdXJzZS1saW1pdCIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fTk9fUkVDVVJTRV9MSU1J VH0sCi0gIHsibm8tcmVjdXJzaW9uLWxpbWl0Iiwgbm9fYXJndW1lbnQsIE5VTEwsIE9QVElPTl9O T19SRUNVUlNFX0xJTUlUfSwKICAgeyJyZWxvYyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncid9LAog ICB7InNlY3Rpb24iLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2onfSwKICAgeyJzZWN0aW9u LWhlYWRlcnMiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnfSwKQEAgLTQ1NywyOCArNDg1LDE2IEBA IHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdPQogICB7InNvdXJjZSIsIG5vX2Fy Z3VtZW50LCBOVUxMLCAnUyd9LAogICB7InNvdXJjZS1jb21tZW50Iiwgb3B0aW9uYWxfYXJndW1l bnQsIE5VTEwsIE9QVElPTl9TT1VSQ0VfQ09NTUVOVH0sCiAgIHsic3BlY2lhbC1zeW1zIiwgbm9f YXJndW1lbnQsICZkdW1wX3NwZWNpYWxfc3ltcywgMX0sCi0gIHsiaW5jbHVkZSIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnSSd9LAotICB7ImR3YXJmIiwgb3B0aW9uYWxfYXJndW1lbnQsIE5V TEwsIE9QVElPTl9EV0FSRn0sCi0jaWZkZWYgRU5BQkxFX0xJQkNURgotICB7ImN0ZiIsIG9wdGlv bmFsX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fQ1RGfSwKLSAgeyJjdGYtcGFyZW50IiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsIE9QVElPTl9DVEZfUEFSRU5UfSwKLSNlbmRpZgogICB7InN0YWJz Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdHJ30sCiAgIHsic3RhcnQtYWRkcmVzcyIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fU1RBUlRfQUREUkVTU30sCiAgIHsic3RvcC1hZGRyZXNz IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVElPTl9TVE9QX0FERFJFU1N9LAogICB7InN5 bXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3QnfSwKICAgeyJ0YXJnZXQiLCByZXF1aXJlZF9hcmd1 bWVudCwgTlVMTCwgJ2InfSwKKyAgeyJ1bmljb2RlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws ICdVJ30sCiAgIHsidmVyc2lvbiIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVid9LAotICB7IndpZGUi LCBub19hcmd1bWVudCwgTlVMTCwgJ3cnfSwKLSAgeyJwcmVmaXgiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgT1BUSU9OX1BSRUZJWH0sCi0gIHsicHJlZml4LXN0cmlwIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsIE9QVElPTl9QUkVGSVhfU1RSSVB9LAotICB7Imluc24td2lkdGgiLCByZXF1 aXJlZF9hcmd1bWVudCwgTlVMTCwgT1BUSU9OX0lOU05fV0lEVEh9LAotICB7ImR3YXJmLWRlcHRo IiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsIE9QVElPTl9EV0FSRl9ERVBUSH0sCi0gIHsiZHdhcmYt c3RhcnQiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgT1BUSU9OX0RXQVJGX1NUQVJUfSwKLSAgeyJk d2FyZi1jaGVjayIsIG5vX2FyZ3VtZW50LCAwLCBPUFRJT05fRFdBUkZfQ0hFQ0t9LAotICB7Imlu bGluZXMiLCBub19hcmd1bWVudCwgMCwgT1BUSU9OX0lOTElORVN9LAogICB7InZpc3VhbGl6ZS1q dW1wcyIsIG9wdGlvbmFsX2FyZ3VtZW50LCAwLCBPUFRJT05fVklTVUFMSVpFX0pVTVBTfSwKLSAg ezAsIG5vX2FyZ3VtZW50LCAwLCAwfQorICB7IndpZGUiLCBub19hcmd1bWVudCwgTlVMTCwgJ3cn fSwKKyAge05VTEwsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfQogfTsKIAwKIHN0YXRpYyB2b2lkCkBA IC00ODgsOSArNTA0LDEyMSBAQCBub25mYXRhbCAoY29uc3QgY2hhciAqbXNnKQogICBleGl0X3N0 YXR1cyA9IDE7CiB9CiAKKy8qIENvbnZlcnQgYSBwb3RlbnRpYWwgVVRGLTggZW5jb2RlZCBzZXF1 ZW5jZSBpbiBJTiBpbnRvIGNoYXJhY3RlcnMgaW4gT1VULgorICAgVGhlIGNvbnZlcnNpb24gZm9y bWF0IGlzIGNvbnRyb2xsZWQgYnkgdGhlIHVuaWNvZGVfZGlzcGxheSB2YXJpYWJsZS4KKyAgIFJl dHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFkZGVkIHRvIE9VVC4KKyAgIFJldHVybnMg dGhlIG51bWJlciBvZiBieXRlcyBjb25zdW1lZCBmcm9tIElOIGluIENPTlNVTUVELgorICAgQWx3 YXlzIGNvbnN1bWVzIGF0IGxlYXN0IG9uZSBieXRlIGFuZCBkaXNwbGF5cyBhdCBsZWFzdCBvbmUg Y2hhcmFjdGVyLiAgKi8KKyAgIAorc3RhdGljIHVuc2lnbmVkIGludAorZGlzcGxheV91dGY4IChj b25zdCB1bnNpZ25lZCBjaGFyICogaW4sIGNoYXIgKiBvdXQsIHVuc2lnbmVkIGludCAqIGNvbnN1 bWVkKQoreworICBjaGFyICogICAgICAgIG9yaWdfb3V0ID0gb3V0OworICB1bnNpZ25lZCBpbnQg IG5jaGFycyA9IDA7CisgIHVuc2lnbmVkIGludCBqOworCisgIGlmICh1bmljb2RlX2Rpc3BsYXkg PT0gdW5pY29kZV9kZWZhdWx0KQorICAgIGdvdG8gaW52YWxpZDsKKworICBpZiAoaW5bMF0gPCAw eGMwKQorICAgIGdvdG8gaW52YWxpZDsKKworICBpZiAoKGluWzFdICYgMHhjMCkgIT0gMHg4MCkK KyAgICBnb3RvIGludmFsaWQ7CisKKyAgaWYgKChpblswXSAmIDB4MjApID09IDApCisgICAgewor ICAgICAgbmNoYXJzID0gMjsKKyAgICAgIGdvdG8gdmFsaWQ7CisgICAgfQorCisgIGlmICgoaW5b Ml0gJiAweGMwKSAhPSAweDgwKQorICAgIGdvdG8gaW52YWxpZDsKKworICBpZiAoKGluWzBdICYg MHgxMCkgPT0gMCkKKyAgICB7CisgICAgICBuY2hhcnMgPSAzOworICAgICAgZ290byB2YWxpZDsK KyAgICB9CisKKyAgaWYgKChpblszXSAmIDB4YzApICE9IDB4ODApCisgICAgZ290byBpbnZhbGlk OworCisgIG5jaGFycyA9IDQ7CisKKyB2YWxpZDoKKyAgc3dpdGNoICh1bmljb2RlX2Rpc3BsYXkp CisgICAgeworICAgIGNhc2UgdW5pY29kZV9sb2NhbGU6CisgICAgICAvKiBDb3B5IHRoZSBieXRl cyBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyIGFzIGlzLiAgKi8KKyAgICAgIG1lbWNweSAob3V0LCBp biwgbmNoYXJzKTsKKyAgICAgIG91dCArPSBuY2hhcnM7CisgICAgICBicmVhazsKKworICAgIGNh c2UgdW5pY29kZV9pbnZhbGlkOgorICAgIGNhc2UgdW5pY29kZV9oZXg6CisgICAgICBvdXQgKz0g c3ByaW50ZiAob3V0LCAiJWMiLCB1bmljb2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9oZXggPyAnPCcg OiAneycpOworICAgICAgb3V0ICs9IHNwcmludGYgKG91dCwgIjB4Iik7CisgICAgICBmb3IgKGog PSAwOyBqIDwgbmNoYXJzOyBqKyspCisJb3V0ICs9IHNwcmludGYgKG91dCwgIiUwMngiLCBpbiBb al0pOworICAgICAgb3V0ICs9IHNwcmludGYgKG91dCwgIiVjIiwgdW5pY29kZV9kaXNwbGF5ID09 IHVuaWNvZGVfaGV4ID8gJz4nIDogJ30nKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2Fz ZSB1bmljb2RlX2hpZ2hsaWdodDoKKyAgICAgIGlmIChpc2F0dHkgKDEpKQorCW91dCArPSBzcHJp bnRmIChvdXQsICJceDFCWzMxOzQ3bSIpOyAvKiBSZWQuICAqLworICAgICAgLyogRmFsbCB0aHJv dWdoLiAgKi8KKyAgICBjYXNlIHVuaWNvZGVfZXNjYXBlOgorICAgICAgc3dpdGNoIChuY2hhcnMp CisJeworCWNhc2UgMjoKKwkgIG91dCArPSBzcHJpbnRmIChvdXQsICJcXHUlMDJ4JTAyeCIsCisJ CSAgKChpblswXSAmIDB4MWMpID4+IDIpLCAKKwkJICAoKGluWzBdICYgMHgwMykgPDwgNikgfCAo aW5bMV0gJiAweDNmKSk7CisJICBicmVhazsKKworCWNhc2UgMzoKKwkgIG91dCArPSBzcHJpbnRm IChvdXQsICJcXHUlMDJ4JTAyeCIsCisJCSAgKChpblswXSAmIDB4MGYpIDw8IDQpIHwgKChpblsx XSAmIDB4M2MpID4+IDIpLAorCQkgICgoaW5bMV0gJiAweDAzKSA8PCA2KSB8ICgoaW5bMl0gJiAw eDNmKSkpOworCSAgYnJlYWs7CisKKwljYXNlIDQ6CisJICBvdXQgKz0gc3ByaW50ZiAob3V0LCAi XFx1JTAyeCUwMnglMDJ4IiwKKwkJICAoKGluWzBdICYgMHgwNykgPDwgNikgfCAoKGluWzFdICYg MHgzYykgPj4gMiksCisJCSAgKChpblsxXSAmIDB4MDMpIDw8IDYpIHwgKChpblsyXSAmIDB4M2Mp ID4+IDIpLAorCQkgICgoaW5bMl0gJiAweDAzKSA8PCA2KSB8ICgoaW5bM10gJiAweDNmKSkpOwor CSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIC8qIFVSRy4gICovCisJICBicmVhazsKKwl9CisKKyAg ICAgIGlmICh1bmljb2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9oaWdobGlnaHQgJiYgaXNhdHR5ICgx KSkKKwlvdXQgKz0gc3ByaW50ZiAob3V0LCAiXDAzM1swbSIpOyAvKiBEZWZhdWx0IGNvbG91ci4g ICovCisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAvKiBVUkcgKi8KKyAgICAg IGJyZWFrOworICAgIH0KKworICAqIGNvbnN1bWVkID0gbmNoYXJzOworICByZXR1cm4gb3V0IC0g b3JpZ19vdXQ7CisKKyBpbnZhbGlkOgorICAvKiBOb3QgYSB2YWxpZCBVVEYtOCBzZXF1ZW5jZS4g ICovCisgICpvdXQgPSAqaW47CisgICogY29uc3VtZWQgPSAxOworICByZXR1cm4gMTsKK30KKwog LyogUmV0dXJucyBhIHZlcnNpb24gb2YgSU4gd2l0aCBhbnkgY29udHJvbCBjaGFyYWN0ZXJzCiAg ICByZXBsYWNlZCBieSBlc2NhcGUgc2VxdWVuY2VzLiAgVXNlcyBhIHN0YXRpYyBidWZmZXIKLSAg IGlmIG5lY2Vzc2FyeS4gICovCisgICBpZiBuZWNlc3NhcnkuCisKKyAgIElmIHVuaWNvZGUgZGlz cGxheSBpcyBlbmFibGVkLCB0aGVuIGFsc28gaGFuZGxlcyB0aGUKKyAgIGNvbnZlcnNpb24gb2Yg dW5pY29kZSBjaGFyYWN0ZXJzLiAgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKgogc2FuaXRpemVf c3RyaW5nIChjb25zdCBjaGFyICogaW4pCkBAIC01MDgsNDAgKzYzNiw1MCBAQCBzYW5pdGl6ZV9z dHJpbmcgKGNvbnN0IGNoYXIgKiBpbikKICAgICAgb2YgY2FzZXMgaXQgd2lsbCBub3QgYmUgbmVl ZGVkLiAgKi8KICAgZG8KICAgICB7Ci0gICAgICBjaGFyIGMgPSAqaW4rKzsKKyAgICAgIHVuc2ln bmVkIGNoYXIgYyA9ICppbisrOwogCiAgICAgICBpZiAoYyA9PSAwKQogCXJldHVybiBvcmlnaW5h bDsKIAogICAgICAgaWYgKElTQ05UUkwgKGMpKQogCWJyZWFrOworCisgICAgICBpZiAodW5pY29k ZV9kaXNwbGF5ICE9IHVuaWNvZGVfZGVmYXVsdCAmJiBjID49IDB4YzApCisJYnJlYWs7CiAgICAg fQogICB3aGlsZSAoMSk7CiAKICAgLyogQ29weSB0aGUgaW5wdXQsIHRyYW5zbGF0aW5nIGFzIG5l ZWRlZC4gICovCiAgIGluID0gb3JpZ2luYWw7Ci0gIGlmIChidWZmZXJfbGVuIDwgKHN0cmxlbiAo aW4pICogMikpCisgIGlmIChidWZmZXJfbGVuIDwgKHN0cmxlbiAoaW4pICogOSkpCiAgICAgewog ICAgICAgZnJlZSAoKHZvaWQgKikgYnVmZmVyKTsKLSAgICAgIGJ1ZmZlcl9sZW4gPSBzdHJsZW4g KGluKSAqIDI7CisgICAgICBidWZmZXJfbGVuID0gc3RybGVuIChpbikgKiA5OwogICAgICAgYnVm ZmVyID0geG1hbGxvYyAoYnVmZmVyX2xlbiArIDEpOwogICAgIH0KIAogICBvdXQgPSBidWZmZXI7 CiAgIGRvCiAgICAgewotICAgICAgY2hhciBjID0gKmluKys7CisgICAgICB1bnNpZ25lZCBjaGFy IGMgPSAqaW4rKzsKIAogICAgICAgaWYgKGMgPT0gMCkKIAlicmVhazsKIAotICAgICAgaWYgKCFJ U0NOVFJMIChjKSkKLQkqb3V0KysgPSBjOwotICAgICAgZWxzZQorICAgICAgaWYgKElTQ05UUkwg KGMpKQogCXsKIAkgICpvdXQrKyA9ICdeJzsKIAkgICpvdXQrKyA9IGMgKyAweDQwOwogCX0KKyAg ICAgIGVsc2UgaWYgKHVuaWNvZGVfZGlzcGxheSAhPSB1bmljb2RlX2RlZmF1bHQgJiYgYyA+PSAw eGMwKQorCXsKKwkgIHVuc2lnbmVkIGludCBudW1fY29uc3VtZWQ7CisKKwkgIG91dCArPSBkaXNw bGF5X3V0ZjggKChjb25zdCB1bnNpZ25lZCBjaGFyICopKGluIC0gMSksIG91dCwgJiBudW1fY29u c3VtZWQpOworCSAgaW4gKz0gbnVtX2NvbnN1bWVkIC0gMTsKKwl9CisgICAgICBlbHNlCisJKm91 dCsrID0gYzsKICAgICB9CiAgIHdoaWxlICgxKTsKIApAQCAtNDUyMiw2ICs0NjYwLDI0IEBAIGR1 bXBfc3ltYm9scyAoYmZkICphYmZkIEFUVFJJQlVURV9VTlVTRUQsIGJvb2wgZHluYW1pYykKIAkJ ICBmcmVlIChhbGxvYyk7CiAJCX0KIAkgICAgfQorCSAgZWxzZSBpZiAodW5pY29kZV9kaXNwbGF5 ICE9IHVuaWNvZGVfZGVmYXVsdAorCQkgICAmJiBuYW1lICE9IE5VTEwgJiYgKm5hbWUgIT0gJ1ww JykKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXIgKiBzYW5pdGl6ZWRfbmFtZTsKKworCSAgICAg IC8qIElmIHdlIHdhbnQgdG8gc2FuaXRpemUgdGhlIG5hbWUsIHdlIGRvIGl0IGhlcmUsIGFuZAor CQkgdGVtcG9yYXJpbHkgY2xvYmJlciBpdCB3aGlsZSBjYWxsaW5nIGJmZF9wcmludF9zeW1ib2wu CisJCSBGSVhNRTogVGhpcyBpcyBhIGdyb3NzIGhhY2suICAqLworCSAgICAgIHNhbml0aXplZF9u YW1lID0gc2FuaXRpemVfc3RyaW5nIChuYW1lKTsKKwkgICAgICBpZiAoc2FuaXRpemVkX25hbWUg IT0gbmFtZSkKKwkJKCpjdXJyZW50KS0+bmFtZSA9IHNhbml0aXplZF9uYW1lOworCSAgICAgIGVs c2UKKwkJc2FuaXRpemVkX25hbWUgPSBOVUxMOworCSAgICAgIGJmZF9wcmludF9zeW1ib2wgKGN1 cl9iZmQsIHN0ZG91dCwgKmN1cnJlbnQsCisJCQkJYmZkX3ByaW50X3N5bWJvbF9hbGwpOworCSAg ICAgIGlmIChzYW5pdGl6ZWRfbmFtZSAhPSBOVUxMKQorCQkoKmN1cnJlbnQpLT5uYW1lID0gbmFt ZTsKKwkgICAgfQogCSAgZWxzZQogCSAgICBiZmRfcHJpbnRfc3ltYm9sIChjdXJfYmZkLCBzdGRv dXQsICpjdXJyZW50LAogCQkJICAgICAgYmZkX3ByaW50X3N5bWJvbF9hbGwpOwpAQCAtNTIwNSw3 ICs1MzYxLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICBzZXRfZGVmYXVsdF9i ZmRfdGFyZ2V0ICgpOwogCiAgIHdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LAot CQkJICAgIkNERTpGR0hJOkxNOlA6UlNUVlc6OmFiOmRlZmdoaWo6bG06cHJzdHZ3eHoiLAorCQkJ ICAgIkNERTpGR0hJOkxNOlA6UlNUVTpWVzo6YWI6ZGVmZ2hpajpsbTpwcnN0dnd4eiIsCiAJCQkg ICBsb25nX29wdGlvbnMsIChpbnQgKikgMCkpCiAJICE9IEVPRikKICAgICB7CkBAIC01NDg5LDYg KzU2NDUsMjMgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAgc2VlbmZsYWcgPSB0 cnVlOwogCSAgYnJlYWs7CiAKKwljYXNlICdVJzoKKwkgIGlmIChzdHJlcSAob3B0YXJnLCAiZGVm YXVsdCIpIHx8IHN0cmVxIChvcHRhcmcsICJkIikpCisJICAgIHVuaWNvZGVfZGlzcGxheSA9IHVu aWNvZGVfZGVmYXVsdDsKKwkgIGVsc2UgaWYgKHN0cmVxIChvcHRhcmcsICJsb2NhbGUiKSB8fCBz dHJlcSAob3B0YXJnLCAibCIpKQorCSAgICB1bmljb2RlX2Rpc3BsYXkgPSB1bmljb2RlX2xvY2Fs ZTsKKwkgIGVsc2UgaWYgKHN0cmVxIChvcHRhcmcsICJlc2NhcGUiKSB8fCBzdHJlcSAob3B0YXJn LCAiZSIpKQorCSAgICB1bmljb2RlX2Rpc3BsYXkgPSB1bmljb2RlX2VzY2FwZTsKKwkgIGVsc2Ug aWYgKHN0cmVxIChvcHRhcmcsICJpbnZhbGlkIikgfHwgc3RyZXEgKG9wdGFyZywgImkiKSkKKwkg ICAgdW5pY29kZV9kaXNwbGF5ID0gdW5pY29kZV9pbnZhbGlkOworCSAgZWxzZSBpZiAoc3RyZXEg KG9wdGFyZywgImhleCIpIHx8IHN0cmVxIChvcHRhcmcsICJ4IikpCisJICAgIHVuaWNvZGVfZGlz cGxheSA9IHVuaWNvZGVfaGV4OworCSAgZWxzZSBpZiAoc3RyZXEgKG9wdGFyZywgImhpZ2hsaWdo dCIpIHx8IHN0cmVxIChvcHRhcmcsICJoIikpCisJICAgIHVuaWNvZGVfZGlzcGxheSA9IHVuaWNv ZGVfaGlnaGxpZ2h0OworCSAgZWxzZQorCSAgICBmYXRhbCAoXygiaW52YWxpZCBhcmd1bWVudCB0 byAtVS8tLXVuaWNvZGU6ICVzIiksIG9wdGFyZyk7CisJICBicmVhazsKKwogCWNhc2UgJ0gnOgog CSAgdXNhZ2UgKHN0ZG91dCwgMCk7CiAJICAvKiBObyBuZWVkIHRvIHNldCBzZWVuZmxhZyBvciB0 byBicmVhayAtIHVzYWdlKCkgZG9lcyBub3QgcmV0dXJuLiAgKi8KZGlmZiAtLWdpdCBhL2JpbnV0 aWxzL3JlYWRlbGYuYyBiL2JpbnV0aWxzL3JlYWRlbGYuYwppbmRleCBjZjMxNjhmNGE4ZS4uNTAx MjlmNGFiNGYgMTAwNjQ0Ci0tLSBhL2JpbnV0aWxzL3JlYWRlbGYuYworKysgYi9iaW51dGlscy9y ZWFkZWxmLmMKQEAgLTMyOSw2ICszMjksMTkgQEAgdHlwZWRlZiBlbnVtIHByaW50X21vZGUKIH0K IHByaW50X21vZGU7CiAKK3R5cGVkZWYgZW51bSB1bmljb2RlX2Rpc3BsYXlfdHlwZQoreworICB1 bmljb2RlX2RlZmF1bHQgPSAwLAorICB1bmljb2RlX2xvY2FsZSwKKyAgdW5pY29kZV9lc2NhcGUs CisgIHVuaWNvZGVfaGV4LAorICB1bmljb2RlX2hpZ2hsaWdodCwKKyAgdW5pY29kZV9pbnZhbGlk Cit9IHVuaWNvZGVfZGlzcGxheV90eXBlOworCitzdGF0aWMgdW5pY29kZV9kaXNwbGF5X3R5cGUg dW5pY29kZV9kaXNwbGF5ID0gdW5pY29kZV9kZWZhdWx0OworCisgIAogLyogVmVyc2lvbmVkIHN5 bWJvbCBpbmZvLiAgKi8KIGVudW0gdmVyc2lvbmVkX3N5bWJvbF9pbmZvCiB7CkBAIC02NTYsMTEg KzY2OSwxOCBAQCBwcmludF9zeW1ib2wgKHNpZ25lZCBpbnQgd2lkdGgsIGNvbnN0IGNoYXIgKiBz eW1ib2wpCiAgICAgICBpZiAoYyA9PSAwKQogCWJyZWFrOwogCi0gICAgICAvKiBEbyBub3QgcHJp bnQgY29udHJvbCBjaGFyYWN0ZXJzIGRpcmVjdGx5IGFzIHRoZXkgY2FuIGFmZmVjdCB0ZXJtaW5h bAotCSBzZXR0aW5ncy4gIFN1Y2ggY2hhcmFjdGVycyB1c3VhbGx5IGFwcGVhciBpbiB0aGUgbmFt ZXMgZ2VuZXJhdGVkCi0JIGJ5IHRoZSBhc3NlbWJsZXIgZm9yIGxvY2FsIGxhYmVscy4gICovCi0g ICAgICBpZiAoSVNDTlRSTCAoYykpCisgICAgICBpZiAoSVNQUklOVCAoYykpCisJeworCSAgcHV0 Y2hhciAoYyk7CisJICB3aWR0aF9yZW1haW5pbmcgLS07CisJICBudW1fcHJpbnRlZCArKzsKKwl9 CisgICAgICBlbHNlIGlmIChJU0NOVFJMIChjKSkKIAl7CisJICAvKiBEbyBub3QgcHJpbnQgY29u dHJvbCBjaGFyYWN0ZXJzIGRpcmVjdGx5IGFzIHRoZXkgY2FuIGFmZmVjdCB0ZXJtaW5hbAorCSAg ICAgc2V0dGluZ3MuICBTdWNoIGNoYXJhY3RlcnMgdXN1YWxseSBhcHBlYXIgaW4gdGhlIG5hbWVz IGdlbmVyYXRlZAorCSAgICAgYnkgdGhlIGFzc2VtYmxlciBmb3IgbG9jYWwgbGFiZWxzLiAgKi8K KwogCSAgaWYgKHdpZHRoX3JlbWFpbmluZyA8IDIpCiAJICAgIGJyZWFrOwogCkBAIC02NjgsMTEg KzY4OCwxMzcgQEAgcHJpbnRfc3ltYm9sIChzaWduZWQgaW50IHdpZHRoLCBjb25zdCBjaGFyICog c3ltYm9sKQogCSAgd2lkdGhfcmVtYWluaW5nIC09IDI7CiAJICBudW1fcHJpbnRlZCArPSAyOwog CX0KLSAgICAgIGVsc2UgaWYgKElTUFJJTlQgKGMpKQorICAgICAgZWxzZSBpZiAoYyA9PSAweDdm KQogCXsKLQkgIHB1dGNoYXIgKGMpOwotCSAgd2lkdGhfcmVtYWluaW5nIC0tOwotCSAgbnVtX3By aW50ZWQgKys7CisJICBpZiAod2lkdGhfcmVtYWluaW5nIDwgNSkKKwkgICAgYnJlYWs7CisJICBw cmludGYgKCI8REVMPiIpOworCSAgd2lkdGhfcmVtYWluaW5nIC09IDU7CisJICBudW1fcHJpbnRl ZCArPSA1OworCX0KKyAgICAgIGVsc2UgaWYgKHVuaWNvZGVfZGlzcGxheSAhPSB1bmljb2RlX2xv Y2FsZQorCSAgICAgICAmJiB1bmljb2RlX2Rpc3BsYXkgIT0gdW5pY29kZV9kZWZhdWx0KQorCXsK KwkgIC8qIERpc3BsYXkgdW5pY29kZSBjaGFyYWN0ZXJzIGFzIHNvbWV0aGluZyBlbHNlLiAgKi8K KwkgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbNF07CisJICBib29sICAgICAgICAgIGlzX3V0Zjg7CisJ ICB1aW50ICAgICAgICAgIG5ieXRlczsKKworCSAgYnl0ZXNbMF0gPSBjOworCisJICBpZiAoYnl0 ZXNbMF0gPCAweGMwKQorCSAgICB7CisJICAgICAgbmJ5dGVzID0gMTsKKwkgICAgICBpc191dGY4 ID0gZmFsc2U7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGJ5dGVzWzFdID0gKnN5 bWJvbCsrOworCisJICAgICAgaWYgKChieXRlc1sxXSAmIDB4YzApICE9IDB4ODApCisJCXsKKwkJ ICBpc191dGY4ID0gZmFsc2U7CisJCSAgLyogRG8gbm90IGNvbnN1bWUgdGhpcyBjaGFyYWN0ZXIu ICBJdCBtYXkgb25seQorCQkgICAgIGJlIHRoZSBmaXJzdCBieXRlIGluIHRoZSBzZXF1ZW5jZSB0 aGF0IHdhcworCQkgICAgIGNvcnJ1cHQuICAqLworCQkgIC0tc3ltYm9sOworCQkgIG5ieXRlcyA9 IDE7CisJCX0KKwkgICAgICBlbHNlIGlmICgoYnl0ZXNbMF0gJiAweDIwKSA9PSAwKQorCQl7CisJ CSAgaXNfdXRmOCA9IHRydWU7CisJCSAgbmJ5dGVzID0gMjsKKwkJfQorCSAgICAgIGVsc2UKKwkJ eworCQkgIGJ5dGVzWzJdID0gKnN5bWJvbCsrOworCisJCSAgaWYgKChieXRlc1syXSAmIDB4YzAp ICE9IDB4ODApCisJCSAgICB7CisJCSAgICAgIGlzX3V0ZjggPSBmYWxzZTsKKwkJICAgICAgc3lt Ym9sIC09IDI7CisJCSAgICAgIG5ieXRlcyA9IDE7CisJCSAgICB9CisJCSAgZWxzZSBpZiAoKGJ5 dGVzWzBdICYgMHgxMCkgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgaXNfdXRmOCA9IHRydWU7CisJ CSAgICAgIG5ieXRlcyA9IDM7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBi eXRlc1szXSA9ICpzeW1ib2wrKzsKKworCQkgICAgICBuYnl0ZXMgPSA0OworCisJCSAgICAgIGlm ICgoYnl0ZXNbM10gJiAweGMwKSAhPSAweDgwKQorCQkJeworCQkJICBpc191dGY4ID0gZmFsc2U7 CisJCQkgIHN5bWJvbCAtPSAzOworCQkJICBuYnl0ZXMgPSAxOworCQkJfQorCQkgICAgICBlbHNl CisJCQlpc191dGY4ID0gdHJ1ZTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisKKwkgIGlmICh1bmlj b2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9pbnZhbGlkKQorCSAgICBpc191dGY4ID0gZmFsc2U7CisK KwkgIGlmICh1bmljb2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9oZXggfHwgISBpc191dGY4KQorCSAg ICB7CisJICAgICAgdWludCBpOworCisJICAgICAgaWYgKHdpZHRoX3JlbWFpbmluZyA8IChuYnl0 ZXMgKiAyKSArIDIpCisJCWJyZWFrOworCSAgCisJICAgICAgcHV0Y2hhciAoaXNfdXRmOCA/ICc8 JyA6ICd7Jyk7CisJICAgICAgcHJpbnRmICgiMHgiKTsKKwkgICAgICBmb3IgKGkgPSAwOyBpIDwg bmJ5dGVzOyBpKyspCisJCXByaW50ZiAoIiUwMngiLCBieXRlc1tpXSk7CisJICAgICAgcHV0Y2hh ciAoaXNfdXRmOCA/ICc+JyA6ICd9Jyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAg IGlmICh1bmljb2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9oaWdobGlnaHQgJiYgaXNhdHR5ICgxKSkK KwkJcHJpbnRmICgiXHgxQlszMTs0N20iKTsgLyogUmVkLiAgKi8KKwkgICAgICAKKwkgICAgICBz d2l0Y2ggKG5ieXRlcykKKwkJeworCQljYXNlIDI6CisJCSAgaWYgKHdpZHRoX3JlbWFpbmluZyA8 IDYpCisJCSAgICBicmVhazsKKwkJICBwcmludGYgKCJcXHUlMDJ4JTAyeCIsCisJCQkgIChieXRl c1swXSAmIDB4MWMpID4+IDIsIAorCQkJICAoKGJ5dGVzWzBdICYgMHgwMykgPDwgNikgfCAoYnl0 ZXNbMV0gJiAweDNmKSk7CisJCSAgYnJlYWs7CisJCWNhc2UgMzoKKwkJICBpZiAod2lkdGhfcmVt YWluaW5nIDwgNikKKwkJICAgIGJyZWFrOworCQkgIHByaW50ZiAoIlxcdSUwMnglMDJ4IiwKKwkJ CSAgKChieXRlc1swXSAmIDB4MGYpIDw8IDQpIHwgKChieXRlc1sxXSAmIDB4M2MpID4+IDIpLAor CQkJICAoKGJ5dGVzWzFdICYgMHgwMykgPDwgNikgfCAoYnl0ZXNbMl0gJiAweDNmKSk7CisJCSAg YnJlYWs7CisJCWNhc2UgNDoKKwkJICBpZiAod2lkdGhfcmVtYWluaW5nIDwgOCkKKwkJICAgIGJy ZWFrOworCQkgIHByaW50ZiAoIlxcdSUwMnglMDJ4JTAyeCIsCisJCQkgICgoYnl0ZXNbMF0gJiAw eDA3KSA8PCA2KSB8ICgoYnl0ZXNbMV0gJiAweDNjKSA+PiAyKSwKKwkJCSAgKChieXRlc1sxXSAm IDB4MDMpIDw8IDYpIHwgKChieXRlc1syXSAmIDB4M2MpID4+IDIpLAorCQkJICAoKGJ5dGVzWzJd ICYgMHgwMykgPDwgNikgfCAoYnl0ZXNbM10gJiAweDNmKSk7CisJCSAgCisJCSAgYnJlYWs7CisJ CWRlZmF1bHQ6CisJCSAgLyogVVJHLiAgKi8KKwkJICBicmVhazsKKwkJfQorCisJICAgICAgaWYg KHVuaWNvZGVfZGlzcGxheSA9PSB1bmljb2RlX2hpZ2hsaWdodCAmJiBpc2F0dHkgKDEpKQorCQlw cmludGYgKCJcMDMzWzBtIik7IC8qIERlZmF1bHQgY29sb3VyLiAgKi8KKwkgICAgfQorCSAgCisJ ICBpZiAoYnl0ZXNbbmJ5dGVzIC0gMV0gPT0gMCkKKwkgICAgYnJlYWs7CiAJfQogICAgICAgZWxz ZQogCXsKQEAgLTQ3MzEsNiArNDg3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNb XSA9CiAgIHsic3ltcyIsCSAgICAgICBub19hcmd1bWVudCwgMCwgJ3MnfSwKICAgeyJzaWxlbnQt dHJ1bmNhdGlvbiIsbm9fYXJndW1lbnQsIDAsICdUJ30sCiAgIHsic2VjdGlvbi1kZXRhaWxzIiwg IG5vX2FyZ3VtZW50LCAwLCAndCd9LAorICB7InVuaWNvZGUiLCAgICAgICAgICByZXF1aXJlZF9h cmd1bWVudCwgTlVMTCwgJ1UnfSwKICAgeyJ1bndpbmQiLAkgICAgICAgbm9fYXJndW1lbnQsIDAs ICd1J30sCiAgIHsidmVyc2lvbi1pbmZvIiwgICAgIG5vX2FyZ3VtZW50LCAwLCAnVid9LAogICB7 InZlcnNpb24iLAkgICAgICAgbm9fYXJndW1lbnQsIDAsICd2J30sCkBAIC00ODA2LDYgKzQ5NTMs MTIgQEAgdXNhZ2UgKEZJTEUgKiBzdHJlYW0pCiAgICAgIC0tcmVjdXJzZS1saW1pdCAgICAgRW5h YmxlIGEgZGVtYW5nbGluZyByZWN1cnNpb24gbGltaXQuICAoZGVmYXVsdClcbiIpKTsKICAgZnBy aW50ZiAoc3RyZWFtLCBfKCJcCiAgICAgIC0tbm8tcmVjdXJzZS1saW1pdCAgRGlzYWJsZSBhIGRl bWFuZ2xpbmcgcmVjdXJzaW9uIGxpbWl0XG4iKSk7CisgIGZwcmludGYgKHN0cmVhbSwgXygiXAor ICAgICAtVVtkbGV4aGldIC0tdW5pY29kZT1bZGVmYXVsdHxsb2NhbGV8ZXNjYXBlfGhleHxoaWdo bGlnaHR8aW52YWxpZF1cblwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5IHVuaWNv ZGUgY2hhcmFjdGVycyBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBjdXJyZW50IGxvY2FsZVxuXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCksIGVzY2FwZSBzZXF1ZW5jZXMsIFwiPGhl eCBzZXF1ZW5jZXM+XCIsIGhpZ2hsaWdodGVkXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAg IGVzY2FwZSBzZXF1ZW5jZXMsIG9yIHRyZWF0IHRoZW0gYXMgaW52YWxpZCBhbmQgZGlzcGxheSBh c1xuXAorICAgICAgICAgICAgICAgICAgICAgICAgICBcIntoZXggc2VxdWVuY2VzfVwiXG4iKSk7 CiAgIGZwcmludGYgKHN0cmVhbSwgXygiXAogICAtbiAtLW5vdGVzICAgICAgICAgICAgIERpc3Bs YXkgdGhlIGNvcmUgbm90ZXMgKGlmIHByZXNlbnQpXG4iKSk7CiAgIGZwcmludGYgKHN0cmVhbSwg XygiXApAQCAtNDk5MCw3ICs1MTQzLDcgQEAgcGFyc2VfYXJncyAoc3RydWN0IGR1bXBfZGF0YSAq ZHVtcGRhdGEsIGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCiAgICAgdXNhZ2UgKHN0ZGVycik7CiAK ICAgd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcKLQkgIChhcmdjLCBhcmd2LCAiQUNESElMTlBSOlNU VldhY2RlZ2hpOmxucDpyc3R1dnc6Ong6eiIsIG9wdGlvbnMsIE5VTEwpKSAhPSBFT0YpCisJICAo YXJnYywgYXJndiwgIkFDREhJTE5QUjpTVFU6VldhY2RlZ2hpOmxucDpyc3R1dnc6Ong6eiIsIG9w dGlvbnMsIE5VTEwpKSAhPSBFT0YpCiAgICAgewogICAgICAgc3dpdGNoIChjKQogCXsKQEAgLTUx OTIsNiArNTM0NSwyNSBAQCBwYXJzZV9hcmdzIChzdHJ1Y3QgZHVtcF9kYXRhICpkdW1wZGF0YSwg aW50IGFyZ2MsIGNoYXIgKiogYXJndikKIAkgIC8qIElnbm9yZWQgZm9yIGJhY2t3YXJkIGNvbXBh dGliaWxpdHkuICAqLwogCSAgYnJlYWs7CiAKKwljYXNlICdVJzoKKwkgIGlmIChvcHRhcmcgPT0g TlVMTCkKKwkgICAgZXJyb3IgKF8oIk1pc3NpbmcgYXJnIHRvIC1VLy0tdW5pY29kZSIpKTsgLyog Q2FuIHRoaXMgaGFwcGVuID8gICovCisJICBlbHNlIGlmIChzdHJlcSAob3B0YXJnLCAiZGVmYXVs dCIpIHx8IHN0cmVxIChvcHRhcmcsICJkIikpCisJICAgIHVuaWNvZGVfZGlzcGxheSA9IHVuaWNv ZGVfZGVmYXVsdDsKKwkgIGVsc2UgaWYgKHN0cmVxIChvcHRhcmcsICJsb2NhbGUiKSB8fCBzdHJl cSAob3B0YXJnLCAibCIpKQorCSAgICB1bmljb2RlX2Rpc3BsYXkgPSB1bmljb2RlX2xvY2FsZTsK KwkgIGVsc2UgaWYgKHN0cmVxIChvcHRhcmcsICJlc2NhcGUiKSB8fCBzdHJlcSAob3B0YXJnLCAi ZSIpKQorCSAgICB1bmljb2RlX2Rpc3BsYXkgPSB1bmljb2RlX2VzY2FwZTsKKwkgIGVsc2UgaWYg KHN0cmVxIChvcHRhcmcsICJpbnZhbGlkIikgfHwgc3RyZXEgKG9wdGFyZywgImkiKSkKKwkgICAg dW5pY29kZV9kaXNwbGF5ID0gdW5pY29kZV9pbnZhbGlkOworCSAgZWxzZSBpZiAoc3RyZXEgKG9w dGFyZywgImhleCIpIHx8IHN0cmVxIChvcHRhcmcsICJ4IikpCisJICAgIHVuaWNvZGVfZGlzcGxh eSA9IHVuaWNvZGVfaGV4OworCSAgZWxzZSBpZiAoc3RyZXEgKG9wdGFyZywgImhpZ2hsaWdodCIp IHx8IHN0cmVxIChvcHRhcmcsICJoIikpCisJICAgIHVuaWNvZGVfZGlzcGxheSA9IHVuaWNvZGVf aGlnaGxpZ2h0OworCSAgZWxzZQorCSAgICBlcnJvciAoXygiaW52YWxpZCBhcmd1bWVudCB0byAt VS8tLXVuaWNvZGU6ICVzIiksIG9wdGFyZyk7CisJICBicmVhazsKKwogCWNhc2UgT1BUSU9OX1NZ TV9CQVNFOgogCSAgc3ltX2Jhc2UgPSAwOwogCSAgaWYgKG9wdGFyZyAhPSBOVUxMKQpkaWZmIC0t Z2l0IGEvYmludXRpbHMvc3RyaW5ncy5jIGIvYmludXRpbHMvc3RyaW5ncy5jCmluZGV4IDQ0YThl MWRhNjQ0Li5mNTBiYWRmOTgzZSAxMDA2NDQKLS0tIGEvYmludXRpbHMvc3RyaW5ncy5jCisrKyBi L2JpbnV0aWxzL3N0cmluZ3MuYwpAQCAtNTUsNiArNTUsMTkgQEAKICAgIC1UIHtiZmRuYW1lfQog CQlTcGVjaWZ5IGEgbm9uLWRlZmF1bHQgb2JqZWN0IGZpbGUgZm9ybWF0LgogCisgIC0tdW5pY29k ZT17ZGVmYXVsdHxsb2NhbGV8aW52YWxpZHxoZXh8ZXNjYXBlfGhpZ2hsaWdodH0KKyAgLXUge2R8 bHxpfHh8ZXxofQorICAgICAgICAgICAgICAgIERldGVybWluZSBob3cgdG8gaGFuZGxlIFVURi04 IHVuaWNvZGUgY2hhcmFjdGVycy4gIFRoZSBkZWZhdWx0CisJCWlzIG5vIHNwZWNpYWwgdHJlYXRt ZW50LiAgQWxsIG90aGVyIHZlcnNpb25zIG9mIHRoaXMgb3B0aW9uCisJCW9ubHkgYXBwbHkgaWYg dGhlIGVuY29kaW5nIGlzIHZhbGlkIGFuZCBlbmFibGluZyB0aGUgb3B0aW9uCisJCWltcGxpZXMg LS1lbmNvZGluZz1TLgorCQlUaGUgJ2xvY2FsZScgb3B0aW9uIGRpc3BsYXlzIHRoZSBjaGFyYWN0 ZXJzIGFjY29yZGluZyB0byB0aGUKKwkJY3VycmVudCBsb2NhbGUuICBUaGUgJ2ludmFsaWQnIG9w dGlvbiB0cmVhdHMgdGhlbSBhcworCQlub24tc3RyaW5nIGNoYXJhY3RlcnMuICBUaGUgJ2hleCcg b3B0aW9uIGRpc3BsYXlzIHRoZW0gYXMgaGV4CisJCWJ5dGUgc2VxdWVuY2VzLiAgVGhlICdlc2Nh cGUnIG9wdGlvbiBkaXNwbGF5cyB0aGVtIGFzIGVzY2FwZQorCQlzZXF1ZW5jZXMgYW5kIHRoZSAn aGlnaGxpZ2h0JyBvcHRpb24gZGlzcGxheXMgdGhlbSBhcworCQljb2xvdXJlZCBlc2NhcGUgc2Vx dWVuY2VzLgorCiAgIC0tb3V0cHV0LXNlcGFyYXRvcj1zZXBfc3RyaW5nCiAgIC1zIHNlcF9zdHJp bmcJU3RyaW5nIHVzZWQgdG8gc2VwYXJhdGUgcGFyc2VkIHN0cmluZ3MgaW4gb3V0cHV0LgogCQlE ZWZhdWx0IGlzIG5ld2xpbmUuCkBAIC03Niw2ICs4OSwyMiBAQAogI2luY2x1ZGUgInNhZmUtY3R5 cGUuaCIKICNpbmNsdWRlICJidWNvbW0uaCIKIAorI2lmbmRlZiBzdHJlcQorI2RlZmluZSBzdHJl cShhLGIpIChzdHJjbXAgKChhKSwoYikpID09IDApCisjZW5kaWYKKwordHlwZWRlZiBlbnVtIHVu aWNvZGVfZGlzcGxheV90eXBlCit7CisgIHVuaWNvZGVfZGVmYXVsdCA9IDAsCisgIHVuaWNvZGVf bG9jYWxlLAorICB1bmljb2RlX2VzY2FwZSwKKyAgdW5pY29kZV9oZXgsCisgIHVuaWNvZGVfaGln aGxpZ2h0LAorICB1bmljb2RlX2ludmFsaWQKK30gdW5pY29kZV9kaXNwbGF5X3R5cGU7CisKK3N0 YXRpYyB1bmljb2RlX2Rpc3BsYXlfdHlwZSB1bmljb2RlX2Rpc3BsYXkgPSB1bmljb2RlX2RlZmF1 bHQ7CisKICNkZWZpbmUgU1RSSU5HX0lTR1JBUEhJQyhjKSBcCiAgICAgICAoICAgKGMpID49IDAg XAogICAgICAgICYmIChjKSA8PSAyNTUgXApAQCAtOTQsNyArMTIzLDcgQEAgZXh0ZXJuIGludCBl cnJubzsKIHN0YXRpYyBpbnQgYWRkcmVzc19yYWRpeDsKIAogLyogTWluaW11bSBsZW5ndGggb2Yg c2VxdWVuY2Ugb2YgZ3JhcGhpYyBjaGFycyB0byB0cmlnZ2VyIG91dHB1dC4gICovCi1zdGF0aWMg aW50IHN0cmluZ19taW47CitzdGF0aWMgdWludCBzdHJpbmdfbWluOwogCiAvKiBXaGV0aGVyIG9y IG5vdCB3ZSBpbmNsdWRlIGFsbCB3aGl0ZXNwYWNlIGFzIGEgZ3JhcGhpYyBjaGFyLiAgICovCiBz dGF0aWMgYm9vbCBpbmNsdWRlX2FsbF93aGl0ZXNwYWNlOwpAQCAtMTIxLDIxICsxNTAsMjIgQEAg c3RhdGljIGNoYXIgKm91dHB1dF9zZXBhcmF0b3I7CiBzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25n X29wdGlvbnNbXSA9CiB7CiAgIHsiYWxsIiwgbm9fYXJndW1lbnQsIE5VTEwsICdhJ30sCisgIHsi Ynl0ZXMiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ24nfSwKICAgeyJkYXRhIiwgbm9fYXJn dW1lbnQsIE5VTEwsICdkJ30sCisgIHsiZW5jb2RpbmciLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgJ2UnfSwKKyAgeyJoZWxwIiwgbm9fYXJndW1lbnQsIE5VTEwsICdoJ30sCisgIHsiaW5jbHVk ZS1hbGwtd2hpdGVzcGFjZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAndyd9LAorICB7Im91dHB1dC1z ZXBhcmF0b3IiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3MnfSwKICAgeyJwcmludC1maWxl LW5hbWUiLCBub19hcmd1bWVudCwgTlVMTCwgJ2YnfSwKLSAgeyJieXRlcyIsIHJlcXVpcmVkX2Fy Z3VtZW50LCBOVUxMLCAnbid9LAogICB7InJhZGl4IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws ICd0J30sCi0gIHsiaW5jbHVkZS1hbGwtd2hpdGVzcGFjZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAn dyd9LAotICB7ImVuY29kaW5nIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdlJ30sCiAgIHsi dGFyZ2V0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdUJ30sCi0gIHsib3V0cHV0LXNlcGFy YXRvciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncyd9LAotICB7ImhlbHAiLCBub19hcmd1 bWVudCwgTlVMTCwgJ2gnfSwKKyAgeyJ1bmljb2RlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws ICdVJ30sCiAgIHsidmVyc2lvbiIsIG5vX2FyZ3VtZW50LCBOVUxMLCAndid9LAogICB7TlVMTCwg MCwgTlVMTCwgMH0KIH07CiAKIHN0YXRpYyBib29sIHN0cmluZ3NfZmlsZSAoY2hhciAqKTsKLXN0 YXRpYyB2b2lkIHByaW50X3N0cmluZ3MgKGNvbnN0IGNoYXIgKiwgRklMRSAqLCBmaWxlX3B0ciwg aW50LCBpbnQsIGNoYXIgKik7CitzdGF0aWMgdm9pZCBwcmludF9zdHJpbmdzIChjb25zdCBjaGFy ICosIEZJTEUgKiwgZmlsZV9wdHIsIGludCwgY2hhciAqKTsKIHN0YXRpYyB2b2lkIHVzYWdlIChG SUxFICosIGludCkgQVRUUklCVVRFX05PUkVUVVJOOwogDAogaW50IG1haW4gKGludCwgY2hhciAq Kik7CkBAIC0xNzEsNyArMjAxLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICBl bmNvZGluZyA9ICdzJzsKICAgb3V0cHV0X3NlcGFyYXRvciA9IE5VTEw7CiAKLSAgd2hpbGUgKChv cHRjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJhZGZoSG46d290OmU6VDpzOlZ2MDEyMzQ1 Njc4OSIsCisgIHdoaWxlICgob3B0YyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiYWRmaEhu OndvdDplOlQ6czpVOlZ2MDEyMzQ1Njc4OSIsCiAJCQkgICAgICBsb25nX29wdGlvbnMsIChpbnQg KikgMCkpICE9IEVPRikKICAgICB7CiAgICAgICBzd2l0Y2ggKG9wdGMpCkBAIC0yNDQsNiArMjc0 LDIzIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgIG91dHB1dF9zZXBhcmF0b3Ig PSBvcHRhcmc7CiAgICAgICAgICAgYnJlYWs7CiAKKwljYXNlICdVJzoKKwkgIGlmIChzdHJlcSAo b3B0YXJnLCAiZGVmYXVsdCIpIHx8IHN0cmVxIChvcHRhcmcsICJkIikpCisJICAgIHVuaWNvZGVf ZGlzcGxheSA9IHVuaWNvZGVfZGVmYXVsdDsKKwkgIGVsc2UgaWYgKHN0cmVxIChvcHRhcmcsICJs b2NhbGUiKSB8fCBzdHJlcSAob3B0YXJnLCAibCIpKQorCSAgICB1bmljb2RlX2Rpc3BsYXkgPSB1 bmljb2RlX2xvY2FsZTsKKwkgIGVsc2UgaWYgKHN0cmVxIChvcHRhcmcsICJlc2NhcGUiKSB8fCBz dHJlcSAob3B0YXJnLCAiZSIpKQorCSAgICB1bmljb2RlX2Rpc3BsYXkgPSB1bmljb2RlX2VzY2Fw ZTsKKwkgIGVsc2UgaWYgKHN0cmVxIChvcHRhcmcsICJpbnZhbGlkIikgfHwgc3RyZXEgKG9wdGFy ZywgImkiKSkKKwkgICAgdW5pY29kZV9kaXNwbGF5ID0gdW5pY29kZV9pbnZhbGlkOworCSAgZWxz ZSBpZiAoc3RyZXEgKG9wdGFyZywgImhleCIpIHx8IHN0cmVxIChvcHRhcmcsICJ4IikpCisJICAg IHVuaWNvZGVfZGlzcGxheSA9IHVuaWNvZGVfaGV4OworCSAgZWxzZSBpZiAoc3RyZXEgKG9wdGFy ZywgImhpZ2hsaWdodCIpIHx8IHN0cmVxIChvcHRhcmcsICJoIikpCisJICAgIHVuaWNvZGVfZGlz cGxheSA9IHVuaWNvZGVfaGlnaGxpZ2h0OworCSAgZWxzZQorCSAgICBmYXRhbCAoXygiaW52YWxp ZCBhcmd1bWVudCB0byAtVS8tLXVuaWNvZGU6ICVzIiksIG9wdGFyZyk7CisJICBicmVhazsKKwog CWNhc2UgJ1YnOgogCWNhc2UgJ3YnOgogCSAgcHJpbnRfdmVyc2lvbiAoInN0cmluZ3MiKTsKQEAg LTI1OCw2ICszMDUsOSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJfQogICAgIH0K IAorICBpZiAodW5pY29kZV9kaXNwbGF5ICE9IHVuaWNvZGVfZGVmYXVsdCkKKyAgICBlbmNvZGlu ZyA9ICdTJzsKKwogICBpZiAobnVtZXJpY19vcHQgIT0gMCkKICAgICB7CiAgICAgICBzdHJpbmdf bWluID0gKGludCkgc3RydG91bCAoYXJndltudW1lcmljX29wdCAtIDFdICsgMSwgJnMsIDApOwpA QCAtMjkzLDE0ICszNDMsMTQgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIHsK ICAgICAgIGRhdGFzZWN0aW9uX29ubHkgPSBmYWxzZTsKICAgICAgIFNFVF9CSU5BUlkgKGZpbGVu byAoc3RkaW4pKTsKLSAgICAgIHByaW50X3N0cmluZ3MgKCJ7c3RhbmRhcmQgaW5wdXR9Iiwgc3Rk aW4sIDAsIDAsIDAsIChjaGFyICopIE5VTEwpOworICAgICAgcHJpbnRfc3RyaW5ncyAoIntzdGFu ZGFyZCBpbnB1dH0iLCBzdGRpbiwgMCwgMCwgKGNoYXIgKikgTlVMTCk7CiAgICAgICBmaWxlc19n aXZlbiA9IHRydWU7CiAgICAgfQogICBlbHNlCiAgICAgewogICAgICAgZm9yICg7IG9wdGluZCA8 IGFyZ2M7ICsrb3B0aW5kKQogCXsKLQkgIGlmIChzdHJjbXAgKGFyZ3Zbb3B0aW5kXSwgIi0iKSA9 PSAwKQorCSAgaWYgKHN0cmVxIChhcmd2W29wdGluZF0sICItIikpCiAJICAgIGRhdGFzZWN0aW9u X29ubHkgPSBmYWxzZTsKIAkgIGVsc2UKIAkgICAgewpAQCAtMzQyLDcgKzM5Miw3IEBAIHN0cmlu Z3NfYV9zZWN0aW9uIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0LCBjb25zdCBjaGFyICpmaWxl bmFtZSwKICAgICB9CiAKICAgKmdvdF9hX3NlY3Rpb24gPSB0cnVlOwotICBwcmludF9zdHJpbmdz IChmaWxlbmFtZSwgTlVMTCwgc2VjdC0+ZmlsZXBvcywgMCwgc2VjdHNpemUsIChjaGFyICopIG1l bSk7CisgIHByaW50X3N0cmluZ3MgKGZpbGVuYW1lLCBOVUxMLCBzZWN0LT5maWxlcG9zLCBzZWN0 c2l6ZSwgKGNoYXIgKikgbWVtKTsKICAgZnJlZSAobWVtKTsKIH0KIApAQCAtNDI3LDcgKzQ3Nyw3 IEBAIHN0cmluZ3NfZmlsZSAoY2hhciAqZmlsZSkKIAkgIHJldHVybiBmYWxzZTsKIAl9CiAKLSAg ICAgIHByaW50X3N0cmluZ3MgKGZpbGUsIHN0cmVhbSwgKGZpbGVfcHRyKSAwLCAwLCAwLCAoY2hh ciAqKSAwKTsKKyAgICAgIHByaW50X3N0cmluZ3MgKGZpbGUsIHN0cmVhbSwgKGZpbGVfcHRyKSAw LCAwLCAoY2hhciAqKSBOVUxMKTsKIAogICAgICAgaWYgKGZjbG9zZSAoc3RyZWFtKSA9PSBFT0Yp CiAJewpAQCAtNTUxLDExICs2MDEsNjI3IEBAIHVuZ2V0X3BhcnRfY2hhciAobG9uZyBjLCBmaWxl X3B0ciAqYWRkcmVzcywgaW50ICptYWdpY2NvdW50LCBjaGFyICoqbWFnaWMpCiAJfQogICAgIH0K IH0KKworc3RhdGljIHZvaWQKK3ByaW50X2ZpbGVuYW1lX2FuZF9hZGRyZXNzIChjb25zdCBjaGFy ICogZmlsZW5hbWUsIGZpbGVfcHRyIGFkZHJlc3MpCit7CisgIGlmIChwcmludF9maWxlbmFtZXMp CisgICAgcHJpbnRmICgiJXM6ICIsIGZpbGVuYW1lKTsKKworICBpZiAoISBwcmludF9hZGRyZXNz ZXMpCisgICAgcmV0dXJuOworCisgIHN3aXRjaCAoYWRkcmVzc19yYWRpeCkKKyAgICB7CisgICAg Y2FzZSA4OgorICAgICAgaWYgKHNpemVvZiAoYWRkcmVzcykgPiBzaXplb2YgKGxvbmcpKQorCXsK KyNpZm5kZWYgX19NU1ZDUlRfXworCSAgcHJpbnRmICgiJTdsbG8gIiwgKHVuc2lnbmVkIGxvbmcg bG9uZykgYWRkcmVzcyk7CisjZWxzZQorCSAgcHJpbnRmICgiJTdJNjRvICIsICh1bnNpZ25lZCBs b25nIGxvbmcpIGFkZHJlc3MpOworI2VuZGlmCisJfQorICAgICAgZWxzZQorCXByaW50ZiAoIiU3 bG8gIiwgKHVuc2lnbmVkIGxvbmcpIGFkZHJlc3MpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNl IDEwOgorICAgICAgaWYgKHNpemVvZiAoYWRkcmVzcykgPiBzaXplb2YgKGxvbmcpKQorCXsKKyNp Zm5kZWYgX19NU1ZDUlRfXworCSAgcHJpbnRmICgiJTdsbHUgIiwgKHVuc2lnbmVkIGxvbmcgbG9u ZykgYWRkcmVzcyk7CisjZWxzZQorCSAgcHJpbnRmICgiJTdJNjRkICIsICh1bnNpZ25lZCBsb25n IGxvbmcpIGFkZHJlc3MpOworI2VuZGlmCisJfQorICAgICAgZWxzZQorCXByaW50ZiAoIiU3bGQg IiwgKGxvbmcpIGFkZHJlc3MpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE2OgorICAgICAg aWYgKHNpemVvZiAoYWRkcmVzcykgPiBzaXplb2YgKGxvbmcpKQorCXsKKyNpZm5kZWYgX19NU1ZD UlRfXworCSAgcHJpbnRmICgiJTdsbHggIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgYWRkcmVzcyk7 CisjZWxzZQorCSAgcHJpbnRmICgiJTdJNjR4ICIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGFkZHJl c3MpOworI2VuZGlmCisJfQorICAgICAgZWxzZQorCXByaW50ZiAoIiU3bHggIiwgKHVuc2lnbmVk IGxvbmcpIGFkZHJlc3MpOworICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKiBSZXR1cm4gbm9u LXplcm8gaWYgdGhlIGJ5dGVzIHN0YXJ0aW5nIGF0IEJVRkZFUiBmb3JtIGEgdmFsaWQgVVRGLTgg ZW5jb2RpbmcuCisgICBJZiB0aGUgZW5jb2RpbmcgaXMgdmFsaWQgdGhlbiByZXR1cm5zIHRoZSBu dW1iZXIgb2YgYnl0ZXMgaXQgdXNlcy4gICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2lzX3Zh bGlkX3V0ZjggKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVm bGVuKQoreworICBpZiAoYnVmZmVyWzBdIDwgMHhjMCkKKyAgICByZXR1cm4gMDsKKworICBpZiAo YnVmbGVuIDwgMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoKGJ1ZmZlclsxXSAmIDB4YzApICE9 IDB4ODApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChidWZmZXJbMF0gJiAweDIwKSA9PSAwKQor ICAgIHJldHVybiAyOworCisgIGlmIChidWZsZW4gPCAzKQorICAgIHJldHVybiAwOworCisgIGlm ICgoYnVmZmVyWzJdICYgMHhjMCkgIT0gMHg4MCkKKyAgICByZXR1cm4gMDsKKyAgCisgIGlmICgo YnVmZmVyWzBdICYgMHgxMCkgPT0gMCkKKyAgICByZXR1cm4gMzsKKworICBpZiAoYnVmbGVuIDwg NCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKGJ1ZmZlclszXSAmIDB4YzApICE9IDB4ODApCisg ICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDQ7Cit9CisKKy8qIERpc3BsYXkgYSBVVEYtOCBlbmNv ZGVkIGNoYXJhY3RlciBpbiBCVUZGRVIgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5nCisgICBvZiB1 bmljb2RlX2Rpc3BsYXkuICBUaGUgY2hhcmFjdGVyIGlzIGtub3duIHRvIGJlIHZhbGlkLgorICAg UmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkLiAgKi8KKworc3RhdGljIHVpbnQK K2Rpc3BsYXlfdXRmOF9jaGFyIChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZmVyKQoreworICB1 aW50IGo7CisgIHVpbnQgdXRmOF9sZW47CisKKyAgc3dpdGNoIChidWZmZXJbMF0gJiAweDMwKQor ICAgIHsKKyAgICBjYXNlIDB4MDA6CisgICAgY2FzZSAweDEwOgorICAgICAgdXRmOF9sZW4gPSAy OworICAgICAgYnJlYWs7CisgICAgY2FzZSAweDIwOgorICAgICAgdXRmOF9sZW4gPSAzOworICAg ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHV0ZjhfbGVuID0gNDsKKyAgICB9CisgICAg ICAKKyAgc3dpdGNoICh1bmljb2RlX2Rpc3BsYXkpCisgICAgeworICAgIGRlZmF1bHQ6CisgICAg ICBmcHJpbnRmIChzdGRlcnIsICJJQ0U6IHVuZXhwZWN0ZWQgdW5pY29kZSBkaXNwbGF5IHR5cGVc biIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIHVuaWNvZGVfZXNjYXBlOgorICAgIGNhc2Ug dW5pY29kZV9oaWdobGlnaHQ6CisgICAgICBpZiAodW5pY29kZV9kaXNwbGF5ID09IHVuaWNvZGVf aGlnaGxpZ2h0ICYmIGlzYXR0eSAoMSkpCisJcHJpbnRmICgiXHgxQlszMTs0N20iKTsgLyogUmVk LiAgKi8KKworICAgICAgc3dpdGNoICh1dGY4X2xlbikKKwl7CisJY2FzZSAyOgorCSAgcHJpbnRm ICgiXFx1JTAyeCUwMngiLAorCQkgICgoYnVmZmVyWzBdICYgMHgxYykgPj4gMiksIAorCQkgICgo YnVmZmVyWzBdICYgMHgwMykgPDwgNikgfCAoYnVmZmVyWzFdICYgMHgzZikpOworCSAgYnJlYWs7 CisKKwljYXNlIDM6CisJICBwcmludGYgKCJcXHUlMDJ4JTAyeCIsCisJCSAgKChidWZmZXJbMF0g JiAweDBmKSA8PCA0KSB8ICgoYnVmZmVyWzFdICYgMHgzYykgPj4gMiksCisJCSAgKChidWZmZXJb MV0gJiAweDAzKSA8PCA2KSB8ICgoYnVmZmVyWzJdICYgMHgzZikpKTsKKwkgIGJyZWFrOworCisJ Y2FzZSA0OgorCSAgcHJpbnRmICgiXFx1JTAyeCUwMnglMDJ4IiwKKwkJICAoKGJ1ZmZlclswXSAm IDB4MDcpIDw8IDYpIHwgKChidWZmZXJbMV0gJiAweDNjKSA+PiAyKSwKKwkJICAoKGJ1ZmZlclsx XSAmIDB4MDMpIDw8IDYpIHwgKChidWZmZXJbMl0gJiAweDNjKSA+PiAyKSwKKwkJICAoKGJ1ZmZl clsyXSAmIDB4MDMpIDw8IDYpIHwgKChidWZmZXJbM10gJiAweDNmKSkpOworCSAgYnJlYWs7CisJ ZGVmYXVsdDoKKwkgIC8qIFVSRy4gICovCisJICBicmVhazsKKwl9CisKKyAgICAgIGlmICh1bmlj b2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9oaWdobGlnaHQgJiYgaXNhdHR5ICgxKSkKKwlwcmludGYg KCJcMDMzWzBtIik7IC8qIERlZmF1bHQgY29sb3VyLiAgKi8KKyAgICAgIGJyZWFrOworCisgICAg Y2FzZSB1bmljb2RlX2hleDoKKyAgICAgIHB1dGNoYXIgKCc8Jyk7CisgICAgICBwcmludGYgKCIw eCIpOworICAgICAgZm9yIChqID0gMDsgaiA8IHV0ZjhfbGVuOyBqKyspCisJcHJpbnRmICgiJTAy eCIsIGJ1ZmZlciBbal0pOworICAgICAgcHV0Y2hhciAoJz4nKTsKKyAgICAgIGJyZWFrOworCisg ICAgY2FzZSB1bmljb2RlX2xvY2FsZToKKyAgICAgIHByaW50ZiAoIiUuMXMiLCBidWZmZXIpOwor ICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiB1dGY4X2xlbjsKK30KKworLyogRGlzcGxh eSBzdHJpbmdzIGluIEJVRkZFUi4gIFRyZWF0IGFueSBVVEYtOCBlbmNvZGVkIGNoYXJhY3RlcnMg ZW5jb3VudGVyZWQKKyAgIGFjY29yZGluZyB0byB0aGUgc2V0dGluZyBvZiB0aGUgdW5pY29kZV9k aXNwbGF5IHZhcmlhYmxlLiAgVGhlIGJ1ZmZlcgorICAgY29udGFpbnMgQlVGTEVOIGJ5dGVzLgor CisgICBEaXNwbGF5IHRoZSBjaGFyYWN0ZXJzIGFzIGlmIHRoZXkgc3RhcnRlZCBhdCBBRERSRVNT IGFuZCBhcmUgY29udGFpbmVkIGluCisgICBGSUxFTkFNRS4gICovCisKK3N0YXRpYyB2b2lkCitw cmludF91bmljb2RlX2J1ZmZlciAoY29uc3QgY2hhciAqICAgICAgICAgICAgZmlsZW5hbWUsCisJ CSAgICAgIGZpbGVfcHRyICAgICAgICAgICAgICAgIGFkZHJlc3MsCisJCSAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKiAgIGJ1ZmZlciwKKwkJICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAg YnVmbGVuKQoreworICAvKiBQYXJhbm9pYSBjaGVja3MuLi4gICovCisgIGlmIChmaWxlbmFtZSA9 PSBOVUxMCisgICAgICB8fCBidWZmZXIgPT0gTlVMTAorICAgICAgfHwgdW5pY29kZV9kaXNwbGF5 ID09IHVuaWNvZGVfZGVmYXVsdAorICAgICAgfHwgZW5jb2RpbmcgIT0gJ1MnCisgICAgICB8fCBl bmNvZGluZ19ieXRlcyAhPSAxKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIklDRTog YmFkIGFyZ3VtZW50cyB0byBwcmludF91bmljb2RlX2J1ZmZlclxuIik7CisgICAgICByZXR1cm47 CisgICAgfQorCisgIGlmIChidWZsZW4gPT0gMCkKKyAgICByZXR1cm47CisKKyAgLyogV2UgbXVz dCBvbmx5IGRpc3BsYXkgc3RyaW5ncyB0aGF0IGFyZSBhdCBsZWFzdCBzdHJpbmdfbWluICpjaGFy YWN0ZXJzKgorICAgICBsb25nLiAgU28gd2Ugc2NhbiB0aGUgYnVmZmVyIGluIHR3byBzdGFnZXMu ICBGaXJzdCB3ZSBsb2NhdGUgdGhlIHN0YXJ0CisgICAgIG9mIGEgcG90ZW50aWFsIHN0cmluZy4g IFRoZW4gd2Ugd2FsayBhbG9uZyBpdCB1bnRpbCB3ZSBoYXZlIGZvdW5kCisgICAgIHN0cmluZ19t aW4gY2hhcmFjdGVycy4gIFRoZW4gd2UgZ28gYmFjayB0byB0aGUgc3RhcnQgcG9pbnQgYW5kIHN0 YXJ0CisgICAgIGRpc3BsYXlpbmcgY2hhcmFjdGVycyBhY2NvcmRpbmcgdG8gdGhlIHVuaWNvZGVf ZGlzcGxheSBzZXR0aW5nLiAgKi8KKworICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BvaW50ID0gMDsK KyAgdW5zaWduZWQgbG9uZyBpID0gMDsKKyAgdW5zaWduZWQgaW50IGNoYXJfbGVuID0gMTsKKyAg dW5zaWduZWQgaW50IG51bV9mb3VuZCA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8IGJ1Zmxlbjsg aSArPSBjaGFyX2xlbikKKyAgICB7CisgICAgICBpbnQgYyA9IGJ1ZmZlcltpXTsKKworICAgICAg Y2hhcl9sZW4gPSAxOworCisgICAgICAvKiBGaW5kIHRoZSBmaXJzdCBwb3RlbnRpYWwgY2hhcmFj dGVyIG9mIGEgc3RyaW5nLiAgKi8KKyAgICAgIGlmICghIFNUUklOR19JU0dSQVBISUMgKGMpKQor CXsKKwkgIG51bV9mb3VuZCA9IDA7CisJICBjb250aW51ZTsKKwl9CisKKyAgICAgIGlmIChjID4g MTI2KQorCXsKKwkgIGlmIChjIDwgMHhjMCkKKwkgICAgeworCSAgICAgIG51bV9mb3VuZCA9IDA7 CisJICAgICAgY29udGludWU7CisJICAgIH0KKworCSAgaWYgKChjaGFyX2xlbiA9IGlzX3ZhbGlk X3V0ZjggKGJ1ZmZlciArIGksIGJ1ZmxlbiAtIGkpKSA9PSAwKQorCSAgICB7CisJICAgICAgY2hh cl9sZW4gPSAxOworCSAgICAgIG51bV9mb3VuZCA9IDA7CisJICAgICAgY29udGludWU7CisJICAg IH0KKworCSAgaWYgKHVuaWNvZGVfZGlzcGxheSA9PSB1bmljb2RlX2ludmFsaWQpCisJICAgIHsK KwkgICAgICAvKiBXZSBoYXZlIGZvdW5kIGEgdmFsaWQgVVRGLTggY2hhcmFjdGVyLCBidXQgd2Ug dHJlYXQgaXQgYXMgbm9uLWdyYXBoaWMuICAqLworCSAgICAgIG51bV9mb3VuZCA9IDA7CisJICAg ICAgY29udGludWU7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChudW1fZm91bmQgPT0gMCkKKwkv KiBXZSBoYXZlIGZvdW5kIGEgcG90ZW50aWFsIHN0YXJ0aW5nIHBvaW50IGZvciBhIHN0cmluZy4g ICovCisJc3RhcnRfcG9pbnQgPSBpOworCisgICAgICArKyBudW1fZm91bmQ7CisKKyAgICAgIGlm IChudW1fZm91bmQgPj0gc3RyaW5nX21pbikKKwlicmVhazsKKyAgICB9CisKKyAgaWYgKG51bV9m b3VuZCA8IHN0cmluZ19taW4pCisgICAgcmV0dXJuOworCisgIHByaW50X2ZpbGVuYW1lX2FuZF9h ZGRyZXNzIChmaWxlbmFtZSwgYWRkcmVzcyArIHN0YXJ0X3BvaW50KTsKKyAgCisgIC8qIFdlIGhh dmUgZm91bmQgc3RyaW5nX21pbiBjaGFyYWN0ZXJzLiAgRGlzcGxheSB0aGVtIGFuZCBhbnkKKyAg ICAgbW9yZSB0aGF0IGZvbGxvdy4gICovCisgIGZvciAoaSA9IHN0YXJ0X3BvaW50OyBpIDwgYnVm bGVuOyBpICs9IGNoYXJfbGVuKQorICAgIHsKKyAgICAgIGludCBjID0gYnVmZmVyW2ldOworCisg ICAgICBjaGFyX2xlbiA9IDE7CisKKyAgICAgIGlmICghIFNUUklOR19JU0dSQVBISUMgKGMpKQor CWJyZWFrOworICAgICAgZWxzZSBpZiAoYyA8IDEyNykKKwlwdXRjaGFyIChjKTsKKyAgICAgIGVs c2UgaWYgKCEgaXNfdmFsaWRfdXRmOCAoYnVmZmVyICsgaSwgYnVmbGVuIC0gaSkpCisJYnJlYWs7 CisgICAgICBlbHNlIGlmICh1bmljb2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9pbnZhbGlkKQorCWJy ZWFrOworICAgICAgZWxzZQorCWNoYXJfbGVuID0gZGlzcGxheV91dGY4X2NoYXIgKGJ1ZmZlciAr IGkpOworICAgIH0KKworICBpZiAob3V0cHV0X3NlcGFyYXRvcikKKyAgICBmcHV0cyAob3V0cHV0 X3NlcGFyYXRvciwgc3Rkb3V0KTsKKyAgZWxzZQorICAgIHB1dGNoYXIgKCdcbicpOworCisgIC8q IEZJWE1FOiBVc2luZyB0YWlsIHJlY3Vyc2lvbiBoZXJlIGlzIGxhenkgcHJvZ3JhbW1pbmcuLi4g ICovCisgIHByaW50X3VuaWNvZGVfYnVmZmVyIChmaWxlbmFtZSwgYWRkcmVzcyArIGksIGJ1ZmZl ciArIGksIGJ1ZmxlbiAtIGkpOworfQorCitzdGF0aWMgaW50CitnZXRfdW5pY29kZV9ieXRlIChG SUxFICogc3RyZWFtLCB1bnNpZ25lZCBjaGFyICogcHV0YmFjaywgdWludCAqIG51bV9wdXRiYWNr LCB1aW50ICogbnVtX3JlYWQpCit7CisgIGlmICgqIG51bV9wdXRiYWNrID4gMCkKKyAgICB7Cisg ICAgICAqIG51bV9wdXRiYWNrID0gKiBudW1fcHV0YmFjayAtIDE7CisgICAgICByZXR1cm4gcHV0 YmFjayBbKiBudW1fcHV0YmFja107CisgICAgfQorCisgICogbnVtX3JlYWQgPSAqIG51bV9yZWFk ICsgMTsKKworI2lmIGRlZmluZWQoSEFWRV9HRVRDX1VOTE9DS0VEKSAmJiBIQVZFX0RFQ0xfR0VU Q19VTkxPQ0tFRAorICByZXR1cm4gZ2V0Y191bmxvY2tlZCAoc3RyZWFtKTsKKyNlbHNlCisgIHJl dHVybiBnZXRjIChzdHJlYW0pOworI2VuZGlmCit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3Ig cHJpbnRfdW5pY29kZV9zdHJlYW0uICAqLworCitzdGF0aWMgdm9pZAorcHJpbnRfdW5pY29kZV9z dHJlYW1fYm9keSAoY29uc3QgY2hhciAqICAgICBmaWxlbmFtZSwKKwkJCSAgIGZpbGVfcHRyICAg ICAgICAgYWRkcmVzcywKKwkJCSAgIEZJTEUgKiAgICAgICAgICAgc3RyZWFtLAorCQkJICAgdW5z aWduZWQgY2hhciAqICBwdXRiYWNrX2J1ZiwKKwkJCSAgIHVpbnQgICAgICAgICAgICAgbnVtX3B1 dGJhY2ssCisJCQkgICB1bnNpZ25lZCBjaGFyICogIHByaW50X2J1ZikKK3sKKyAgLyogSXQgd291 bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBqdXN0IHJlYWQgdGhlIHN0cmVhbSBpbnRvIGEgYnVmZmVy CisgICAgIGFuZCB0aGVuIHByb2Nlc3MgaWYgd2l0aCBwcmludF91bmljb2RlX2J1ZmZlci4gIEJ1 dCB0aGUgaW5wdXQKKyAgICAgbWlnaHQgYmUgaHVnZSBvciBpdCBtaWdodCB0aW1lLWxvY2tlZCAo ZWcgc3RkaW4pLiAgU28gaW5zdGVhZAorICAgICB3ZSBnbyBvbmUgYnl0ZSBhdCBhIHRpbWUuLi4g ICovCisKKyAgZmlsZV9wdHIgc3RhcnRfcG9pbnQgPSAwOworICB1aW50IG51bV9yZWFkID0gMDsK KyAgdWludCBudW1fY2hhcnMgPSAwOworICB1aW50IG51bV9wcmludCA9IDA7CisgIGludCBjOwor CisgIC8qIEZpbmQgYSBzZXJpZXMgb2Ygc3RyaW5nX21pbiBjaGFyYWN0ZXJzLiAgUHV0IHRoZW0g aW50byBwcmludF9idWYuICAqLworICBkbworICAgIHsKKyAgICAgIGlmIChudW1fY2hhcnMgPj0g c3RyaW5nX21pbikKKwlicmVhazsKKworICAgICAgYyA9IGdldF91bmljb2RlX2J5dGUgKHN0cmVh bSwgcHV0YmFja19idWYsICYgbnVtX3B1dGJhY2ssICYgbnVtX3JlYWQpOworICAgICAgaWYgKGMg PT0gRU9GKQorCWJyZWFrOworCisgICAgICBpZiAoISBTVFJJTkdfSVNHUkFQSElDIChjKSkKKwl7 CisJICBudW1fY2hhcnMgPSBudW1fcHJpbnQgPSAwOworCSAgY29udGludWU7CisJfQorCisgICAg ICBpZiAobnVtX2NoYXJzID09IDApCisJc3RhcnRfcG9pbnQgPSBudW1fcmVhZCAtIDE7CisKKyAg ICAgIGlmIChjIDwgMTI3KQorCXsKKwkgIHByaW50X2J1ZltudW1fcHJpbnRdID0gYzsKKwkgIG51 bV9jaGFycyArKzsKKwkgIG51bV9wcmludCArKzsKKwkgIGNvbnRpbnVlOworCX0KKworICAgICAg aWYgKGMgPCAweGMwKQorCXsKKwkgIG51bV9jaGFycyA9IG51bV9wcmludCA9IDA7CisJICBjb250 aW51ZTsKKwl9CisKKyAgICAgIC8qIFdlICptaWdodCogaGF2ZSBhIFVURi04IHNlcXVlbmNlLiAg VGltZSB0byBzdGFydCBwZWVraW5nLiAgKi8KKyAgICAgIGNoYXIgdXRmOFs0XTsKKworICAgICAg dXRmOFswXSA9IGM7CisgICAgICBjID0gZ2V0X3VuaWNvZGVfYnl0ZSAoc3RyZWFtLCBwdXRiYWNr X2J1ZiwgJiBudW1fcHV0YmFjaywgJiBudW1fcmVhZCk7CisgICAgICBpZiAoYyA9PSBFT0YpCisJ YnJlYWs7CisgICAgICB1dGY4WzFdID0gYzsKKworICAgICAgaWYgKCh1dGY4WzFdICYgMHhjMCkg IT0gMHg4MCkKKwl7CisJICAvKiBJbnZhbGlkIFVURi04LiAgKi8KKwkgIHB1dGJhY2tfYnVmW251 bV9wdXRiYWNrKytdID0gdXRmOFsxXTsKKwkgIG51bV9jaGFycyA9IG51bV9wcmludCA9IDA7CisJ ICBjb250aW51ZTsKKwl9CisgICAgICBlbHNlIGlmICgodXRmOFswXSAmIDB4MjApID09IDApCisJ eworCSAgLyogQSB2YWxpZCAyLWJ5dGUgVVRGLTggZW5jb2RpbmcuICAqLworCSAgaWYgKHVuaWNv ZGVfZGlzcGxheSA9PSB1bmljb2RlX2ludmFsaWQpCisJICAgIHsKKwkgICAgICBwdXRiYWNrX2J1 ZltudW1fcHV0YmFjaysrXSA9IHV0ZjhbMV07CisJICAgICAgbnVtX2NoYXJzID0gbnVtX3ByaW50 ID0gMDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgcHJpbnRfYnVmW251bV9wcmlu dCArK10gPSB1dGY4WzBdOworCSAgICAgIHByaW50X2J1ZltudW1fcHJpbnQgKytdID0gdXRmOFsx XTsKKwkgICAgICBudW1fY2hhcnMgKys7CisJICAgIH0KKwkgIGNvbnRpbnVlOworCX0KKworICAg ICAgYyA9IGdldF91bmljb2RlX2J5dGUgKHN0cmVhbSwgcHV0YmFja19idWYsICYgbnVtX3B1dGJh Y2ssICYgbnVtX3JlYWQpOworICAgICAgaWYgKGMgPT0gRU9GKQorCWJyZWFrOworICAgICAgdXRm OFsyXSA9IGM7CisKKyAgICAgIGlmICgodXRmOFsyXSAmIDB4YzApICE9IDB4ODApCisJeworCSAg LyogSW52YWxpZCBVVEYtOC4gICovCisJICBwdXRiYWNrX2J1ZltudW1fcHV0YmFjaysrXSA9IHV0 ZjhbMl07CisJICBwdXRiYWNrX2J1ZltudW1fcHV0YmFjaysrXSA9IHV0ZjhbMV07CisJICBudW1f Y2hhcnMgPSBudW1fcHJpbnQgPSAwOworCSAgY29udGludWU7CisJfQorICAgICAgZWxzZSBpZiAo KHV0ZjhbMF0gJiAweDEwKSA9PSAwKQorCXsKKwkgIC8qIEEgdmFsaWQgMy1ieXRlIFVURi04IGVu Y29kaW5nLiAgKi8KKwkgIGlmICh1bmljb2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9pbnZhbGlkKQor CSAgICB7CisJICAgICAgcHV0YmFja19idWZbbnVtX3B1dGJhY2srK10gPSB1dGY4WzJdOworCSAg ICAgIHB1dGJhY2tfYnVmW251bV9wdXRiYWNrKytdID0gdXRmOFsxXTsKKwkgICAgICBudW1fY2hh cnMgPSBudW1fcHJpbnQgPSAwOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBwcmlu dF9idWZbbnVtX3ByaW50ICsrXSA9IHV0ZjhbMF07CisJICAgICAgcHJpbnRfYnVmW251bV9wcmlu dCArK10gPSB1dGY4WzFdOworCSAgICAgIHByaW50X2J1ZltudW1fcHJpbnQgKytdID0gdXRmOFsy XTsKKwkgICAgICBudW1fY2hhcnMgKys7CisJICAgIH0KKwkgIGNvbnRpbnVlOworCX0KKworICAg ICAgYyA9IGdldF91bmljb2RlX2J5dGUgKHN0cmVhbSwgcHV0YmFja19idWYsICYgbnVtX3B1dGJh Y2ssICYgbnVtX3JlYWQpOworICAgICAgaWYgKGMgPT0gRU9GKQorCWJyZWFrOworICAgICAgdXRm OFszXSA9IGM7CisKKyAgICAgIGlmICgodXRmOFszXSAmIDB4YzApICE9IDB4ODApCisJeworCSAg LyogSW52YWxpZCBVVEYtOC4gICovCisJICBwdXRiYWNrX2J1ZltudW1fcHV0YmFjaysrXSA9IHV0 ZjhbM107CisJICBwdXRiYWNrX2J1ZltudW1fcHV0YmFjaysrXSA9IHV0ZjhbMl07CisJICBwdXRi YWNrX2J1ZltudW1fcHV0YmFjaysrXSA9IHV0ZjhbMV07CisJICBudW1fY2hhcnMgPSBudW1fcHJp bnQgPSAwOworCX0KKyAgICAgIC8qIFdlIGhhdmUgYSB2YWxpZCA0LWJ5dGUgVVRGLTggZW5jb2Rp bmcuICAqLworICAgICAgZWxzZSBpZiAodW5pY29kZV9kaXNwbGF5ID09IHVuaWNvZGVfaW52YWxp ZCkKKwl7CisJICBwdXRiYWNrX2J1ZltudW1fcHV0YmFjaysrXSA9IHV0ZjhbM107CisJICBwdXRi YWNrX2J1ZltudW1fcHV0YmFjaysrXSA9IHV0ZjhbMV07CisJICBwdXRiYWNrX2J1ZltudW1fcHV0 YmFjaysrXSA9IHV0ZjhbMl07CisJICBudW1fY2hhcnMgPSBudW1fcHJpbnQgPSAwOworCX0KKyAg ICAgIGVsc2UKKwl7CisJICBwcmludF9idWZbbnVtX3ByaW50ICsrXSA9IHV0ZjhbMF07CisJICBw cmludF9idWZbbnVtX3ByaW50ICsrXSA9IHV0ZjhbMV07CisJICBwcmludF9idWZbbnVtX3ByaW50 ICsrXSA9IHV0ZjhbMl07CisJICBwcmludF9idWZbbnVtX3ByaW50ICsrXSA9IHV0ZjhbM107CisJ ICBudW1fY2hhcnMgKys7CisJfQorICAgIH0KKyAgd2hpbGUgKDEpOworCisgIGlmIChudW1fY2hh cnMgPj0gc3RyaW5nX21pbikKKyAgICB7CisgICAgICAvKiBXZSBrbm93IHRoYXQgd2UgaGF2ZSBz dHJpbmdfbWluIHZhbGlkIGNoYXJhY3RlcnMgaW4gcHJpbnRfYnVmLAorCSBhbmQgdGhlcmUgbWF5 IGJlIG1vcmUgdG8gY29tZSBpbiB0aGUgc3RyZWFtLiAgU3RhcnQgZGlzcGxheWluZworCSB0aGVt LiAgKi8KKworICAgICAgcHJpbnRfZmlsZW5hbWVfYW5kX2FkZHJlc3MgKGZpbGVuYW1lLCBhZGRy ZXNzICsgc3RhcnRfcG9pbnQpOworCisgICAgICB1aW50IGk7CisgICAgICBmb3IgKGkgPSAwOyBp IDwgbnVtX3ByaW50OykKKwl7CisJICBpZiAocHJpbnRfYnVmW2ldIDwgMTI3KQorCSAgICBwdXRj aGFyIChwcmludF9idWZbaSsrXSk7CisJICBlbHNlCisJICAgIGkgKz0gZGlzcGxheV91dGY4X2No YXIgKHByaW50X2J1ZiArIGkpOworCX0KKworICAgICAgLyogT0sgc28gbm93IHdlIGhhdmUgdG8g c3RhcnQgcmVhZCB1bmNoZWNrZWQgYnl0ZXMuICAqLworCisgICAgICAgIC8qIEZpbmQgYSBzZXJp ZXMgb2Ygc3RyaW5nX21pbiBjaGFyYWN0ZXJzLiAgUHV0IHRoZW0gaW50byBwcmludF9idWYuICAq LworICAgICAgZG8KKwl7CisJICBjID0gZ2V0X3VuaWNvZGVfYnl0ZSAoc3RyZWFtLCBwdXRiYWNr X2J1ZiwgJiBudW1fcHV0YmFjaywgJiBudW1fcmVhZCk7CisJICBpZiAoYyA9PSBFT0YpCisJICAg IGJyZWFrOworCisJICBpZiAoISBTVFJJTkdfSVNHUkFQSElDIChjKSkKKwkgICAgYnJlYWs7CisK KwkgIGlmIChjIDwgMTI3KQorCSAgICB7CisJICAgICAgcHV0Y2hhciAoYyk7CisJICAgICAgY29u dGludWU7CisJICAgIH0KKworCSAgaWYgKGMgPCAweGMwKQorCSAgICBicmVhazsKKworCSAgLyog V2UgKm1pZ2h0KiBoYXZlIGEgVVRGLTggc2VxdWVuY2UuICBUaW1lIHRvIHN0YXJ0IHBlZWtpbmcu ICAqLworCSAgdW5zaWduZWQgY2hhciB1dGY4WzRdOworCisJICB1dGY4WzBdID0gYzsKKwkgIGMg PSBnZXRfdW5pY29kZV9ieXRlIChzdHJlYW0sIHB1dGJhY2tfYnVmLCAmIG51bV9wdXRiYWNrLCAm IG51bV9yZWFkKTsKKwkgIGlmIChjID09IEVPRikKKwkgICAgYnJlYWs7CisJICB1dGY4WzFdID0g YzsKKworCSAgaWYgKCh1dGY4WzFdICYgMHhjMCkgIT0gMHg4MCkKKwkgICAgeworCSAgICAgIC8q IEludmFsaWQgVVRGLTguICAqLworCSAgICAgIHB1dGJhY2tfYnVmW251bV9wdXRiYWNrKytdID0g dXRmOFsxXTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgZWxzZSBpZiAoKHV0ZjhbMF0gJiAw eDIwKSA9PSAwKQorCSAgICB7CisJICAgICAgLyogVmFsaWQgMi1ieXRlIFVURi04LiAgKi8KKwkg ICAgICBpZiAodW5pY29kZV9kaXNwbGF5ID09IHVuaWNvZGVfaW52YWxpZCkKKwkJeworCQkgIHB1 dGJhY2tfYnVmW251bV9wdXRiYWNrKytdID0gdXRmOFsxXTsKKwkJICBicmVhazsKKwkJfQorCSAg ICAgIGVsc2UKKwkJeworCQkgICh2b2lkKSBkaXNwbGF5X3V0ZjhfY2hhciAodXRmOCk7CisJCSAg Y29udGludWU7CisJCX0KKwkgICAgfQorCisJICBjID0gZ2V0X3VuaWNvZGVfYnl0ZSAoc3RyZWFt LCBwdXRiYWNrX2J1ZiwgJiBudW1fcHV0YmFjaywgJiBudW1fcmVhZCk7CisJICBpZiAoYyA9PSBF T0YpCisJICAgIGJyZWFrOworCSAgdXRmOFsyXSA9IGM7CisKKwkgIGlmICgodXRmOFsyXSAmIDB4 YzApICE9IDB4ODApCisJICAgIHsKKwkgICAgICAvKiBJbnZhbGlkIFVURi04LiAgKi8KKwkgICAg ICBwdXRiYWNrX2J1ZltudW1fcHV0YmFjaysrXSA9IHV0ZjhbMl07CisJICAgICAgcHV0YmFja19i dWZbbnVtX3B1dGJhY2srK10gPSB1dGY4WzFdOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBl bHNlIGlmICgodXRmOFswXSAmIDB4MTApID09IDApCisJICAgIHsKKwkgICAgICAvKiBWYWxpZCAz LWJ5dGUgVVRGLTguICAqLworCSAgICAgIGlmICh1bmljb2RlX2Rpc3BsYXkgPT0gdW5pY29kZV9p bnZhbGlkKQorCQl7CisJCSAgcHV0YmFja19idWZbbnVtX3B1dGJhY2srK10gPSB1dGY4WzJdOwor CQkgIHB1dGJhY2tfYnVmW251bV9wdXRiYWNrKytdID0gdXRmOFsxXTsKKwkJICBicmVhazsKKwkJ fQorCSAgICAgIGVsc2UKKwkJeworCQkgICh2b2lkKSBkaXNwbGF5X3V0ZjhfY2hhciAodXRmOCk7 CisJCSAgY29udGludWU7CisJCX0KKwkgICAgfQorCisJICBjID0gZ2V0X3VuaWNvZGVfYnl0ZSAo c3RyZWFtLCBwdXRiYWNrX2J1ZiwgJiBudW1fcHV0YmFjaywgJiBudW1fcmVhZCk7CisJICBpZiAo YyA9PSBFT0YpCisJICAgIGJyZWFrOworCSAgdXRmOFszXSA9IGM7CisKKwkgIGlmICgodXRmOFsz XSAmIDB4YzApICE9IDB4ODApCisJICAgIHsKKwkgICAgICAvKiBJbnZhbGlkIFVURi04LiAgKi8K KwkgICAgICBwdXRiYWNrX2J1ZltudW1fcHV0YmFjaysrXSA9IHV0ZjhbM107CisJICAgICAgcHV0 YmFja19idWZbbnVtX3B1dGJhY2srK10gPSB1dGY4WzJdOworCSAgICAgIHB1dGJhY2tfYnVmW251 bV9wdXRiYWNrKytdID0gdXRmOFsxXTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgZWxzZSBp ZiAodW5pY29kZV9kaXNwbGF5ID09IHVuaWNvZGVfaW52YWxpZCkKKwkgICAgeworCSAgICAgIHB1 dGJhY2tfYnVmW251bV9wdXRiYWNrKytdID0gdXRmOFszXTsKKwkgICAgICBwdXRiYWNrX2J1Zltu dW1fcHV0YmFjaysrXSA9IHV0ZjhbMl07CisJICAgICAgcHV0YmFja19idWZbbnVtX3B1dGJhY2sr K10gPSB1dGY4WzFdOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBlbHNlCisJICAgIC8qIEEg dmFsaWQgNC1ieXRlIFVURi04IGVuY29kaW5nLiAgKi8KKwkgICAgKHZvaWQpIGRpc3BsYXlfdXRm OF9jaGFyICh1dGY4KTsKKwl9CisgICAgICB3aGlsZSAoMSk7CisKKyAgICAgIGlmIChvdXRwdXRf c2VwYXJhdG9yKQorCWZwdXRzIChvdXRwdXRfc2VwYXJhdG9yLCBzdGRvdXQpOworICAgICAgZWxz ZQorCXB1dGNoYXIgKCdcbicpOworICAgIH0KKworICBpZiAoYyAhPSBFT0YpCisgICAgLyogRklY TUU6IFVzaW5nIHRhaWwgcmVjdXJzaW9uIGhlcmUgaXMgbGF6eSwgYnV0IGl0IHdvcmtzLiAgKi8K KyAgICBwcmludF91bmljb2RlX3N0cmVhbV9ib2R5IChmaWxlbmFtZSwgYWRkcmVzcyArIG51bV9y ZWFkLCBzdHJlYW0sIHB1dGJhY2tfYnVmLCBudW1fcHV0YmFjaywgcHJpbnRfYnVmKTsKK30KKwor LyogRGlzcGxheSBzdHJpbmdzIHJlYWQgaW4gZnJvbSBTVFJFQU0uICBUcmVhdCBhbnkgVVRGLTgg ZW5jb2RlZCBjaGFyYWN0ZXJzCisgICBlbmNvdW50ZXJlZCBhY2NvcmRpbmcgdG8gdGhlIHNldHRp bmcgb2YgdGhlIHVuaWNvZGVfZGlzcGxheSB2YXJpYWJsZS4KKyAgIFRoZSBzdHJlYW0gaXMgcG9z aXRpb25lZCBhdCBBRERSRVNTIGFuZCBpcyBhdHRhY2hlZCB0byBGSUxFTkFNRS4gICovCisKK3N0 YXRpYyB2b2lkCitwcmludF91bmljb2RlX3N0cmVhbSAoY29uc3QgY2hhciAqIGZpbGVuYW1lLAor CQkgICAgICBmaWxlX3B0ciAgICAgYWRkcmVzcywKKwkJICAgICAgRklMRSAqICAgICAgIHN0cmVh bSkKK3sKKyAgLyogUGFyYW5vaWEgY2hlY2tzLi4uICAqLworICBpZiAoZmlsZW5hbWUgPT0gTlVM TAorICAgICAgfHwgc3RyZWFtID09IE5VTEwKKyAgICAgIHx8IHVuaWNvZGVfZGlzcGxheSA9PSB1 bmljb2RlX2RlZmF1bHQKKyAgICAgIHx8IGVuY29kaW5nICE9ICdTJworICAgICAgfHwgZW5jb2Rp bmdfYnl0ZXMgIT0gMSkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJJQ0U6IGJhZCBh cmd1bWVudHMgdG8gcHJpbnRfdW5pY29kZV9zdHJlYW1cbiIpOworICAgICAgcmV0dXJuOworICAg IH0KKworICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3Igc3RyaW5nX21pbiA0LWJ5dGUgdXRmLTggY2hh cmFjdGVycy4gICovCisgIHVuc2lnbmVkIGNoYXIgKiBwcmludF9idWYgPSB4bWFsbG9jICgoNCAq IHN0cmluZ19taW4pICsgMSk7CisgIC8qIFdlIHNob3VsZCBuZXZlciBoYXZlIHRvIHB1dCBiYWNr IG1vcmUgdGhhbiA0IGJ5dGVzLiAgKi8KKyAgdW5zaWduZWQgY2hhciBwdXRiYWNrX2J1Zls1XTsK KyAgdWludCBudW1fcHV0YmFjayA9IDA7CisKKyAgcHJpbnRfdW5pY29kZV9zdHJlYW1fYm9keSAo ZmlsZW5hbWUsIGFkZHJlc3MsIHN0cmVhbSwgcHV0YmFja19idWYsIG51bV9wdXRiYWNrLCBwcmlu dF9idWYpOworICBmcmVlIChwcmludF9idWYpOworfQogDAogLyogRmluZCB0aGUgc3RyaW5ncyBp biBmaWxlIEZJTEVOQU1FLCByZWFkIGZyb20gU1RSRUFNLgogICAgQXNzdW1lIHRoYXQgU1RSRUFN IGlzIHBvc2l0aW9uZWQgc28gdGhhdCB0aGUgbmV4dCBieXRlIHJlYWQKICAgIGlzIGF0IGFkZHJl c3MgQUREUkVTUyBpbiB0aGUgZmlsZS4KLSAgIFN0b3AgcmVhZGluZyBhdCBhZGRyZXNzIFNUT1Bf UE9JTlQgaW4gdGhlIGZpbGUsIGlmIG5vbnplcm8uCiAKICAgIElmIFNUUkVBTSBpcyBOVUxMLCBk byBub3QgcmVhZCBmcm9tIGl0LgogICAgVGhlIGNhbGxlciBjYW4gc3VwcGx5IGEgYnVmZmVyIG9m IGNoYXJhY3RlcnMKQEAgLTU2NiwyMCArMTIzMiwyOSBAQCB1bmdldF9wYXJ0X2NoYXIgKGxvbmcg YywgZmlsZV9wdHIgKmFkZHJlc3MsIGludCAqbWFnaWNjb3VudCwgY2hhciAqKm1hZ2ljKQogCiBz dGF0aWMgdm9pZAogcHJpbnRfc3RyaW5ncyAoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKnN0 cmVhbSwgZmlsZV9wdHIgYWRkcmVzcywKLQkgICAgICAgaW50IHN0b3BfcG9pbnQsIGludCBtYWdp Y2NvdW50LCBjaGFyICptYWdpYykKKwkgICAgICAgaW50IG1hZ2ljY291bnQsIGNoYXIgKm1hZ2lj KQogeworICBpZiAodW5pY29kZV9kaXNwbGF5ICE9IHVuaWNvZGVfZGVmYXVsdCkKKyAgICB7Cisg ICAgICBpZiAobWFnaWMgIT0gTlVMTCkKKwlwcmludF91bmljb2RlX2J1ZmZlciAoZmlsZW5hbWUs IGFkZHJlc3MsCisJCQkgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYWdpYywgbWFnaWNj b3VudCk7CisKKyAgICAgIGlmIChzdHJlYW0gIT0gTlVMTCkKKwlwcmludF91bmljb2RlX3N0cmVh bSAoZmlsZW5hbWUsIGFkZHJlc3MsIHN0cmVhbSk7CisgICAgICByZXR1cm47CisgICAgfQorCiAg IGNoYXIgKmJ1ZiA9IChjaGFyICopIHhtYWxsb2MgKHNpemVvZiAoY2hhcikgKiAoc3RyaW5nX21p biArIDEpKTsKIAogICB3aGlsZSAoMSkKICAgICB7CiAgICAgICBmaWxlX3B0ciBzdGFydDsKLSAg ICAgIGludCBpOworICAgICAgdWludCBpOwogICAgICAgbG9uZyBjOwogCiAgICAgICAvKiBTZWUg aWYgdGhlIG5leHQgYHN0cmluZ19taW4nIGNoYXJzIGFyZSBhbGwgZ3JhcGhpYyBjaGFycy4gICov CiAgICAgdHJ5bGluZToKLSAgICAgIGlmIChzdG9wX3BvaW50ICYmIGFkZHJlc3MgPj0gc3RvcF9w b2ludCkKLQlicmVhazsKICAgICAgIHN0YXJ0ID0gYWRkcmVzczsKICAgICAgIGZvciAoaSA9IDA7 IGkgPCBzdHJpbmdfbWluOyBpKyspCiAJewpAQCAtNjAxLDUxICsxMjc2LDcgQEAgcHJpbnRfc3Ry aW5ncyAoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKnN0cmVhbSwgZmlsZV9wdHIgYWRkcmVz cywKIAogICAgICAgLyogV2UgZm91bmQgYSBydW4gb2YgYHN0cmluZ19taW4nIGdyYXBoaWMgY2hh cmFjdGVycy4gIFByaW50IHVwCiAJIHRvIHRoZSBuZXh0IG5vbi1ncmFwaGljIGNoYXJhY3Rlci4g ICovCi0KLSAgICAgIGlmIChwcmludF9maWxlbmFtZXMpCi0JcHJpbnRmICgiJXM6ICIsIGZpbGVu YW1lKTsKLSAgICAgIGlmIChwcmludF9hZGRyZXNzZXMpCi0Jc3dpdGNoIChhZGRyZXNzX3JhZGl4 KQotCSAgewotCSAgY2FzZSA4OgotCSAgICBpZiAoc2l6ZW9mIChzdGFydCkgPiBzaXplb2YgKGxv bmcpKQotCSAgICAgIHsKLSNpZm5kZWYgX19NU1ZDUlRfXwotCQlwcmludGYgKCIlN2xsbyAiLCAo dW5zaWduZWQgbG9uZyBsb25nKSBzdGFydCk7Ci0jZWxzZQotCQlwcmludGYgKCIlN0k2NG8gIiwg KHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQpOwotI2VuZGlmCi0JICAgICAgfQotCSAgICBlbHNl Ci0JICAgICAgcHJpbnRmICgiJTdsbyAiLCAodW5zaWduZWQgbG9uZykgc3RhcnQpOwotCSAgICBi cmVhazsKLQotCSAgY2FzZSAxMDoKLQkgICAgaWYgKHNpemVvZiAoc3RhcnQpID4gc2l6ZW9mIChs b25nKSkKLQkgICAgICB7Ci0jaWZuZGVmIF9fTVNWQ1JUX18KLQkJcHJpbnRmICgiJTdsbHUgIiwg KHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQpOwotI2Vsc2UKLQkJcHJpbnRmICgiJTdJNjRkICIs ICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXJ0KTsKLSNlbmRpZgotCSAgICAgIH0KLQkgICAgZWxz ZQotCSAgICAgIHByaW50ZiAoIiU3bGQgIiwgKGxvbmcpIHN0YXJ0KTsKLQkgICAgYnJlYWs7Ci0K LQkgIGNhc2UgMTY6Ci0JICAgIGlmIChzaXplb2YgKHN0YXJ0KSA+IHNpemVvZiAobG9uZykpCi0J ICAgICAgewotI2lmbmRlZiBfX01TVkNSVF9fCi0JCXByaW50ZiAoIiU3bGx4ICIsICh1bnNpZ25l ZCBsb25nIGxvbmcpIHN0YXJ0KTsKLSNlbHNlCi0JCXByaW50ZiAoIiU3STY0eCAiLCAodW5zaWdu ZWQgbG9uZyBsb25nKSBzdGFydCk7Ci0jZW5kaWYKLQkgICAgICB9Ci0JICAgIGVsc2UKLQkgICAg ICBwcmludGYgKCIlN2x4ICIsICh1bnNpZ25lZCBsb25nKSBzdGFydCk7Ci0JICAgIGJyZWFrOwot CSAgfQorICAgICAgcHJpbnRfZmlsZW5hbWVfYW5kX2FkZHJlc3MgKGZpbGVuYW1lLCBzdGFydCk7 CiAKICAgICAgIGJ1ZltpXSA9ICdcMCc7CiAgICAgICBmcHV0cyAoYnVmLCBzdGRvdXQpOwpAQCAt Njk3LDYgKzEzMjgsOCBAQCB1c2FnZSAoRklMRSAqc3RyZWFtLCBpbnQgc3RhdHVzKQogICAtVCAt LXRhcmdldD08QkZETkFNRT4gICAgIFNwZWNpZnkgdGhlIGJpbmFyeSBmaWxlIGZvcm1hdFxuXAog ICAtZSAtLWVuY29kaW5nPXtzLFMsYixsLEIsTH0gU2VsZWN0IGNoYXJhY3RlciBzaXplIGFuZCBl bmRpYW5uZXNzOlxuXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSA3LWJpdCwgUyA9 IDgtYml0LCB7YixsfSA9IDE2LWJpdCwge0IsTH0gPSAzMi1iaXRcblwKKyAgLS11bmljb2RlPXtk ZWZhdWx0fHNob3d8aW52YWxpZHxoZXh8ZXNjYXBlfGhpZ2hsaWdodH1cblwKKyAgLXUge2R8c3xp fHh8ZXxofSAgICAgICAgICBTcGVjaWZ5IGhvdyB0byB0cmVhdCBVVEYtOCBlbmNvZGVkIHVuaWNv ZGUgY2hhcmFjdGVyc1xuXAogICAtcyAtLW91dHB1dC1zZXBhcmF0b3I9PHN0cmluZz4gU3RyaW5n IHVzZWQgdG8gc2VwYXJhdGUgc3RyaW5ncyBpbiBvdXRwdXQuXG5cCiAgIEA8ZmlsZT4gICAgICAg ICAgICAgICAgICAgUmVhZCBvcHRpb25zIGZyb20gPGZpbGU+XG5cCiAgIC1oIC0taGVscCAgICAg ICAgICAgICAgICAgRGlzcGxheSB0aGlzIGluZm9ybWF0aW9uXG5cCi0tLSAvZGV2L251bGwJMjAy MS0xMS0wOSAwOToyMTowMi42NjIzMTA5MjQgKzAwMDAKKysrIGJpbnV0aWxzL3Rlc3RzdWl0ZS9i aW51dGlscy1hbGwvdW5pY29kZS5leHAJMjAyMS0xMS0wOSAxMjowMzoxMi43MDI5MDU2MDkgKzAw MDAKQEAgLTAsMCArMSw3MSBAQAorIyAgIENvcHlyaWdodCAoQykgMjAyMSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisK KyMgV3JpdHRlbiBieSBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+CisKK3Byb2MgdW5p Y29kZV90ZXN0IHsgcHJvZ3JhbSBvcHRpb25zIGJpbmFyeV9maWxlIHJlZ2V4cF9maWxlIH0gewor CisgICAgZ2xvYmFsIHNyY2RpcgorICAgIGdsb2JhbCBzdWJkaXIKKworICAgIHNldCB0ZXN0bmFt ZSAidW5pY29kZSAkcHJvZ3JhbSAkb3B0aW9ucyBbZmlsZSByb290bmFtZSBbZmlsZSB0YWlsICRi aW5hcnlfZmlsZV1dIgorCisgICAgc2VuZF9sb2cgImV4ZWMgJHByb2dyYW0gJG9wdGlvbnMgJGJp bmFyeV9maWxlID4gcHJvZy5vdXRcbiIKKyAgICBzZXQgZ290IFtyZW1vdGVfZXhlYyBob3N0ICIk cHJvZ3JhbSAkb3B0aW9ucyAkYmluYXJ5X2ZpbGUiICIiICIvZGV2L251bGwiICJwcm9nLm91dCJd CisKKyAgICBpZiB7IFtsaW5kZXggJGdvdCAwXSAhPSAwIH0gdGhlbiB7CisJZmFpbCAiJHRlc3Ru YW1lIChyZWFzb246IGV4ZWN1dGlvbiBmYWlsZWQpIgorCXNlbmRfbG9nICRnb3QKKwlzZW5kX2xv ZyAiXG4iCisJcmV0dXJuCisgICAgfQorCisgICAgaWYgeyAhW3N0cmluZyBtYXRjaCAiIiBbbGlu ZGV4ICRnb3QgMV1dIH0gdGhlbiB7CisJZmFpbCAiJHRlc3RuYW1lIChyZWFzb246IGVycm9yIG91 dHB1dCkiCisJc2VuZF9sb2cgJGdvdAorCXNlbmRfbG9nICJcbiIKKwlyZXR1cm4KKyAgICB9CisK KyAgICBpZiB7IFtyZWdleHBfZGlmZiBwcm9nLm91dCAkc3JjZGlyLyRzdWJkaXIvJHJlZ2V4cF9m aWxlXSB9IHRoZW4geworCXNlbmRfbG9nIFtmaWxlX2NvbnRlbnRzIHByb2cub3V0XQorCXNlbmRf bG9nICJcbiIKKwlmYWlsICR0ZXN0bmFtZQorCXJldHVybgorICAgIH0KKworICAgIHBhc3MgJHRl c3RuYW1lCit9CisKKyMgQXNzZW1ibGUgdGhlIHRlc3QgZmlsZS4KK2lmIHshW2JpbnV0aWxzX2Fz c2VtYmxlICRzcmNkaXIvJHN1YmRpci90cmljay1oZWxsby5zIHRtcGRpci90cmljay1oZWxsby5v XX0gdGhlbiB7CisgICAgdW5zdXBwb3J0ZWQgInVuaWNvZGUgdGVzdHMgKGZhaWxlZCB0byBhc3Nl bWJsZSB0ZXN0IGZpbGUpIgorfSBlbHNlIHsKKyAgICBpZiAhW2lzX3JlbW90ZSBob3N0XSB7CisJ c2V0IHRlbXBmaWxlIHRtcGRpci90cmljay1oZWxsby5vCisgICAgfSBlbHNlIHsKKwlzZXQgdGVt cGZpbGUgW3JlbW90ZV9kb3dubG9hZCBob3N0IHRtcGRpci90cmljay1oZWxsby5vXQorICAgIH0K KworICAgIGdsb2JhbCBOTSBTVFJJTkdTIE9CSkRVTVAgUkVBREVMRgorICAgIHVuaWNvZGVfdGVz dCAkTk0gICAgICB7LS11bmljb2RlPWhleH0gICAgJHRlbXBmaWxlIG5tLmhleC51bmljb2RlCisg ICAgdW5pY29kZV90ZXN0ICRTVFJJTkdTIHstLXVuaWNvZGU9ZXNjYXBlfSAkdGVtcGZpbGUgc3Ry aW5ncy5lc2NhcGUudW5pY29kZQorICAgIHVuaWNvZGVfdGVzdCAkT0JKRFVNUCB7LXRVaH0gICAg ICAgICAgICAgJHRlbXBmaWxlIG9iamR1bXAuaGlnaGxpZ2h0LnVuaWNvZGUKKworICAgIGlmIFtp c19lbGZfZm9ybWF0XSB7CisJdW5pY29kZV90ZXN0ICRSRUFERUxGIHstc1VpfSAgICAgICAgICR0 ZW1wZmlsZSByZWFkZWxmLmludmFsaWQudW5pY29kZQorICAgIH0KK30KLS0tIC9kZXYvbnVsbAky MDIxLTExLTA5IDA5OjIxOjAyLjY2MjMxMDkyNCArMDAwMAorKysgYmludXRpbHMvdGVzdHN1aXRl L2JpbnV0aWxzLWFsbC9ubS5oZXgudW5pY29kZQkyMDIxLTExLTA5IDEyOjAwOjQ3Ljk5OTg0MTcy MiArMDAwMApAQCAtMCwwICsxLDMgQEAKKyMuLi4KKy4qaGU8MHhlMjgwYWU+b2xsPDB4ZTI4MGFj PgorI3Bhc3MKLS0tIC9kZXYvbnVsbAkyMDIxLTExLTA5IDA5OjIxOjAyLjY2MjMxMDkyNCArMDAw MAorKysgYmludXRpbHMvdGVzdHN1aXRlL2JpbnV0aWxzLWFsbC9vYmpkdW1wLmhpZ2hsaWdodC51 bmljb2RlCTIwMjEtMTEtMDkgMTI6MDE6MDMuODg4NzM5NDgzICswMDAwCkBAIC0wLDAgKzEsMyBA QAorIy4uLgorLipoZVxcdTIwMmVvbGxcXHUyMDJjCisjcGFzcwotLS0gL2Rldi9udWxsCTIwMjEt MTEtMDkgMDk6MjE6MDIuNjYyMzEwOTI0ICswMDAwCisrKyBiaW51dGlscy90ZXN0c3VpdGUvYmlu dXRpbHMtYWxsL3N0cmluZ3MuZXNjYXBlLnVuaWNvZGUJMjAyMS0xMS0wOSAxMTo0NDoxMC4yNDYy NjI1MTAgKzAwMDAKQEAgLTAsMCArMSwzIEBACisjLi4uCitoZVxcdTIwMmVvbGxcXHUyMDJjCisj cGFzcwotLS0gL2Rldi9udWxsCTIwMjEtMTEtMDkgMDk6MjE6MDIuNjYyMzEwOTI0ICswMDAwCisr KyBiaW51dGlscy90ZXN0c3VpdGUvYmludXRpbHMtYWxsL3JlYWRlbGYuaW52YWxpZC51bmljb2Rl CTIwMjEtMTEtMDkgMTI6MDE6MjcuNDU0NTg3ODI4ICswMDAwCkBAIC0wLDAgKzEsMyBAQAorIy4u LgorLipoZVx7MHhlMjgwYWVcfW9sbFx7MHhlMjgwYWNcfQorI3Bhc3MK --=-=-=--