From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-relay-2.sys.kth.se (smtp-relay-2.sys.kth.se [IPv6:2001:6b0:1:1200:250:56ff:fead:963e]) by sourceware.org (Postfix) with ESMTPS id 2B4243858415 for ; Wed, 6 Oct 2021 08:23:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 2B4243858415 Received: from exdb4.ug.kth.se (exdb4.ug.kth.se [192.168.32.59]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-relay-2.sys.kth.se (Postfix) with ESMTPS id 4HPSBx6lW2zPHxR for ; Wed, 6 Oct 2021 10:23:21 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp-relay-2.sys.kth.se 4HPSBx6lW2zPHxR Received: from exdb6.ug.kth.se (192.168.32.61) by exdb4.ug.kth.se (192.168.32.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.922.13; Wed, 6 Oct 2021 10:23:21 +0200 Received: from exdb6.ug.kth.se ([192.168.32.61]) by exdb6.ug.kth.se ([192.168.32.61]) with mapi id 15.02.0922.013; Wed, 6 Oct 2021 10:23:21 +0200 From: Petter Tomner To: "jit@gcc.gnu.org" Subject: [RFC] Setting data segment and loong constants - WIP Thread-Topic: [RFC] Setting data segment and loong constants - WIP Thread-Index: AQHXuoqmNtfxGA76ZkuBuB66scSAWQ== Date: Wed, 6 Oct 2021 08:23:20 +0000 Message-ID: <626c20889db34821ae574cae072b26c0@kth.se> Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [192.168.32.250] Content-Type: multipart/mixed; boundary="_002_626c20889db34821ae574cae072b26c0kthse_" MIME-Version: 1.0 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_ASCII_DIVIDERS, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, 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: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Oct 2021 08:23:34 -0000 --_002_626c20889db34821ae574cae072b26c0kthse_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi, I have two patches I am working with and I wanted to share the concept if anyone has feedback. Both are dependent on my patch pending review on complex types: https://gcc.gnu.org/pipermail/jit/2021q3/001365.html So essentially it is one patch with: gcc_jit_context_new_rvalue_from_long_long (...) gcc_jit_context_new_rvalue_from_long_double (...) gcc_jit_context_new_rvalue_from_complex_long_double (...) Those do what it seems. long_long is for making 64bit constants on 32bit machines without silly workarounds.=20 And one patch adding support for setting initial values of global variables: gcc_jit_lvalue * gcc_jit_global_set_initializer_rvalue (gcc_jit_lvalue *global, gcc_jit_rvalue *init_value); gcc_jit_rvalue * gcc_jit_context_new_constructor (gcc_jit_context *ctxt, gcc_jit_location *loc, gcc_jit_type *type, int arr_length, gcc_jit_field **fields, gcc_jit_rvalue **values); gcc_jit_global_set_initializer_rvalue() assigns the rvalue to DECL_INITIAL (global). There is another patch in the mailing list for this (https://gcc.gnu.org/pipermail/jit/2021q2/001308.html) but it has problems with that the rvalue need to be created before the global, for replay order. Also it has no constructor support. gcc_jit_context_new_constructor() is needed for setting init values of global array, struct or union variables. But it could also be used for=20 locals, in theory. Each field in fields is set to its corresponding rvalue= =20 in values, by index. They do not need to be in the same order as in a=20 struct definition. Unspecified fields are set to 0. Any thoughts? I attached a WIP patch mess if someone wants a looksie. Needs more work on error handling and array and union ctor functionality. Regards,= --_002_626c20889db34821ae574cae072b26c0kthse_ Content-Type: text/x-patch; name="WIP-patches.patch" Content-Description: WIP-patches.patch Content-Disposition: attachment; filename="WIP-patches.patch"; size=164286; creation-date="Wed, 06 Oct 2021 08:00:27 GMT"; modification-date="Wed, 06 Oct 2021 08:00:27 GMT" Content-Transfer-Encoding: base64 RnJvbSBiZWMyYjRkMzBlNjg5ZTAxMzViMWQ3MTUxMzMxN2EwNDJhYjhiNzcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVyIDx0b21uZXJAa3RoLnNlPgpEYXRlOiBX ZWQsIDE1IFNlcCAyMDIxIDEzOjE5OjQ4ICswMjAwClN1YmplY3Q6IFtQQVRDSCAxLzNdIGNvbXBs ZXgKCi0tLQogZ2NjL2ppdC9kb2NzL3RvcGljcy9jb250ZXh0cy5yc3QgICAgICAgICAgICAgIHwg IDIwICsKIGdjYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0ICAgICAgICAgICB8ICA4 OSArKy0KIGdjYy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0ICAgICAgICAgICAgICAgICB8ICAx MiArLQogZ2NjL2ppdC9qaXQtY29tbW9uLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx ICsKIGdjYy9qaXQvaml0LXBsYXliYWNrLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDE2NSAr KysrLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMgICAgICAgICAgICAgICAgICAgICAgIHwgMTE2 ICsrLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggICAgICAgICAgICAgICAgICAgICAgIHwgIDI4 ICsKIGdjYy9qaXQvbGliZ2Njaml0KysuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMyAr LQogZ2NjL2ppdC9saWJnY2NqaXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDk3ICsr LQogZ2NjL2ppdC9saWJnY2NqaXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ1ICst CiBnY2Mvaml0L2xpYmdjY2ppdC5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwog Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmggIHwgIDMwICsKIGdj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC1idWlsdGlucy5jICB8IDIxNyArKysrKysK IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC1saXRlcmFscy5jICB8IDE0NSArKysr CiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtbWlzYy5jICAgICAgfCAyMDYgKysr KysrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtb3BlcmF0b3JzLmMgfCAzNTMg KysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtdHlwZXMuYyAgICAg fCA2NzcgKysrKysrKysrKysrKysrKysrCiAxNyBmaWxlcyBjaGFuZ2VkLCAyMTg4IGluc2VydGlv bnMoKyksIDQyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtY29tcGxleC1idWlsdGlucy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LWxpdGVyYWxzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtbWlzYy5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LW9wZXJhdG9ycy5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LXR5cGVzLmMK CmRpZmYgLS1naXQgYS9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbnRleHRzLnJzdCBiL2djYy9qaXQv ZG9jcy90b3BpY3MvY29udGV4dHMucnN0CmluZGV4IDAwZmIxN2UxNTVkLi40MmZkZWY3YzY1NCAx MDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb250ZXh0cy5yc3QKKysrIGIvZ2NjL2pp dC9kb2NzL3RvcGljcy9jb250ZXh0cy5yc3QKQEAgLTQ4OSw2ICs0ODksMjYgQEAgQm9vbGVhbiBv cHRpb25zCiAKICAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0X2NvbnRleHRfc2V0 X2Jvb2xfdXNlX2V4dGVybmFsX2RyaXZlcgogCisuLiBmdW5jdGlvbjo6IHZvaWRcCisJICAgICAg Z2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsIFwKKwkJCQkJICAgICAgIGludCBib29sX3ZhbHVlKTsKKworICAgVGhpcyBv cHRpb24gY2FuIGVuYWJsZSBjb21wbGV4IHR5cGUgc3VwcG9ydCBpbiBsaWJnY2NqaXQuIEJ5IGRl ZmF1bHQsCisgICBubyBjb21wbGV4IHR5cGVzIGNhbiBiZSB1c2VkLgorCisgICBJZiB5b3UgdXNl IGNvbXBsZXggdHlwZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBidWlsdGluIGZ1bmN0aW9u cworICAgYGNyZWFsYCwgYGNpbWFnYCBhbmQgYGNvbmpgIGV0Yy4gd2l0aCB0aGUgY29ycmVjdCB0 eXBlIHN1ZmZpeCwgc2luY2UKKyAgIHRob3NlIGFyZSBpbmxpbmVkIGludG8gdGhlIGNvZGUsIHJh dGhlciB0aGVuIGltcG9ydGVkIGZ1bmN0aW9ucyBmcm9tCisgICB0aGUgbWF0aCBsaWIgd2hpY2gg YXJlIG5vdC4gU2VlIDpyZWY6YGdjY19qaXRfY29udGV4dF9nZXRfYnVpbHRpbl9mdW5jdGlvbmAu CisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8x NmA7IHlvdSBjYW4gdGVzdCBmb3IKKyAgIGl0cyBwcmVzZW5jZSB1c2luZworCisgICAuLiBjb2Rl LWJsb2NrOjogYworCisgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09NUExFWAorCisJCQkJ CSAgICAgICAKIEludGVnZXIgb3B0aW9ucwogKioqKioqKioqKioqKioqCiAKZGlmZiAtLWdpdCBh L2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGlj cy9leHByZXNzaW9ucy5yc3QKaW5kZXggMzk2MjU5ZWYwN2UuLmZjMDM0NWMzZTFkIDEwMDY0NAot LS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdAorKysgYi9nY2Mvaml0L2Rv Y3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdApAQCAtOTgsNiArOTgsMTUgQEAgU2ltcGxlIGV4cHJl c3Npb25zCiAgICBHaXZlbiBhIG51bWVyaWMgdHlwZSAoaW50ZWdlciBvciBmbG9hdGluZyBwb2lu dCksIGJ1aWxkIGFuIHJ2YWx1ZSBmb3IKICAgIHRoZSBnaXZlbiBjb25zdGFudCA6Yzp0eXBlOmBk b3VibGVgIHZhbHVlLgogCisuLiBmdW5jdGlvbjo6IGdjY19qaXRfcnZhbHVlICpcCisJICAgICAg Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLCBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Db21wbGV4IGRvdWJsZSB2YWx1ZSkKKworICAgR2l2ZW4gYSBmbG9hdGluZyBwb2ludCB0eXBl LCBidWlsZCBhbiBydmFsdWUgZm9yCisgICB0aGUgZ2l2ZW4gY29uc3RhbnQgOmM6dHlwZTpgX0Nv bXBsZXggZG91YmxlYC4gV2hlbiB0aGUgcmVzdWx0IHR5cGUgaXMKKyAgIG5vbi1jb21wbGV4LCB0 aGUgaW1hZ2luYXJ5IHBhcnQgaXMgZGlzY2FyZGVkLgorCiAuLiBmdW5jdGlvbjo6IGdjY19qaXRf cnZhbHVlICpcCiAgICAgICAgICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f cHRyIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdjY19qaXRfdHlwZSAqcG9pbnRlcl90eXBlLCBcCkBA IC0xNjgsMTQgKzE3NywxNCBAQCBVbmFyeSBPcGVyYXRpb25zCiAKIFRoZSBhdmFpbGFibGUgdW5h cnkgb3BlcmF0aW9ucyBhcmU6CiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSAgPT09PT09PT09PT09Ci1VbmFyeSBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEMgZXF1aXZhbGVudAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ICA9PT09PT09PT09PT0KLTpjOm1hY3JvOmBHQ0NfSklUX1VOQVJZX09QX01JTlVT YCAgICAgICAgICAgYC0oRVhQUilgCi06YzptYWNybzpgR0NDX0pJVF9VTkFSWV9PUF9CSVRXSVNF X05FR0FURWAgIGB+KEVYUFIpYAotOmM6bWFjcm86YEdDQ19KSVRfVU5BUllfT1BfTE9HSUNBTF9O RUdBVEVgICBgIShFWFBSKWAKLTpjOm1hY3JvOmBHQ0NfSklUX1VOQVJZX09QX0FCU2AgICAgICAg ICAgICAgYGFicyAoRVhQUilgCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0gID09PT09PT09PT09PQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ICA9PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT0KK1VuYXJ5IE9wZXJh dGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyBlcXVpdmFsZW50ICBTdXBwb3J0ZWQg dHlwZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09 PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09Cis6YzptYWNybzpgR0NDX0pJVF9VTkFSWV9P UF9NSU5VU2AgICAgICAgICAgIGAtKEVYUFIpYCAgICAgaW50ZWdlciwgcmVhbCwgY29tcGxleAor OmM6bWFjcm86YEdDQ19KSVRfVU5BUllfT1BfQklUV0lTRV9ORUdBVEVgICBgfihFWFBSKWAgICAg IGludGVnZXIKKzpjOm1hY3JvOmBHQ0NfSklUX1VOQVJZX09QX0xPR0lDQUxfTkVHQVRFYCAgYCEo RVhQUilgICAgICBpbnRlZ2VyCis6YzptYWNybzpgR0NDX0pJVF9VTkFSWV9PUF9BQlNgICAgICAg ICAgICAgIGBhYnMgKEVYUFIpYCAgaW50ZWdlciwgcmVhbAorPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09 PT0KIAogLi4gYzptYWNybzo6IEdDQ19KSVRfVU5BUllfT1BfTUlOVVMKIApAQCAtMjM1LDIyICsy NDQsMjMgQEAgQmluYXJ5IE9wZXJhdGlvbnMKIAogVGhlIGF2YWlsYWJsZSBiaW5hcnkgb3BlcmF0 aW9ucyBhcmU6CiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09 PT09PT09PT09PQotQmluYXJ5IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgQyBl cXVpdmFsZW50Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09 PT09PT09PT0KLTpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTYCAgICAgICAgIGB4ICsg eWAKLTpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9NSU5VU2AgICAgICAgIGB4IC0geWAKLTpj Om1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9NVUxUYCAgICAgICAgIGB4ICogeWAKLTpjOm1hY3Jv OmBHQ0NfSklUX0JJTkFSWV9PUF9ESVZJREVgICAgICAgIGB4IC8geWAKLTpjOm1hY3JvOmBHQ0Nf SklUX0JJTkFSWV9PUF9NT0RVTE9gICAgICAgIGB4ICUgeWAKLTpjOm1hY3JvOmBHQ0NfSklUX0JJ TkFSWV9PUF9CSVRXSVNFX0FORGAgIGB4ICYgeWAKLTpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9P UF9CSVRXSVNFX1hPUmAgIGB4IF4geWAKLTpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9CSVRX SVNFX09SYCAgIGB4IHwgeWAKLTpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9MT0dJQ0FMX0FO RGAgIGB4ICYmIHlgCi06YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfTE9HSUNBTF9PUmAgICBg eCB8fCB5YAotOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX0xTSElGVGAgICAgICAgYHggPDwg eWAKLTpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9SU0hJRlRgICAgICAgIGB4ID4+IHlgCi09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT0KKz09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PSAgICA9 PT09PT09PT09PT09PT09PT09PT09PQorQmluYXJ5IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAg ICAgICAgICAgQyBlcXVpdmFsZW50ICAgIFN1cHBvcnRlZCBvcGVyYW5kIHR5cGVzCis9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT0gICAgPT09PT09 PT09PT09PT09PT09PT09PT0KKzpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTYCAgICAg ICAgIGB4ICsgeWAgICAgICAgICBpbnRlZ2VyLCByZWFsLCBjb21wbGV4Cis6YzptYWNybzpgR0ND X0pJVF9CSU5BUllfT1BfTUlOVVNgICAgICAgICBgeCAtIHlgICAgICAgICAgaW50ZWdlciwgcmVh bCwgY29tcGxleAorOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX01VTFRgICAgICAgICAgYHgg KiB5YCAgICAgICAgIGludGVnZXIsIHJlYWwsIGNvbXBsZXgKKzpjOm1hY3JvOmBHQ0NfSklUX0JJ TkFSWV9PUF9ESVZJREVgICAgICAgIGB4IC8geWAgICAgICAgICBpbnRlZ2VyLCByZWFsLCBjb21w bGV4Cis6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfTU9EVUxPYCAgICAgICBgeCAlIHlgICAg ICAgICAgaW50ZWdlcgorOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX0JJVFdJU0VfQU5EYCAg YHggJiB5YCAgICAgICAgIGludGVnZXIKKzpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9CSVRX SVNFX1hPUmAgIGB4IF4geWAgICAgICAgICBpbnRlZ2VyCis6YzptYWNybzpgR0NDX0pJVF9CSU5B UllfT1BfQklUV0lTRV9PUmAgICBgeCB8IHlgICAgICAgICAgaW50ZWdlcgorOmM6bWFjcm86YEdD Q19KSVRfQklOQVJZX09QX0xPR0lDQUxfQU5EYCAgYHggJiYgeWAgICAgICAgIGludGVnZXIKKzpj Om1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9MT0dJQ0FMX09SYCAgIGB4IHx8IHlgICAgICAgICBp bnRlZ2VyCis6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfTFNISUZUYCAgICAgICBgeCA8PCB5 YCAgICAgICAgaW50ZWdlcgorOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX1JTSElGVGAgICAg ICAgYHggPj4geWAgICAgICAgIGludGVnZXIKKzpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9D T01QTEVYYCAgICAgIGBDTVBMWCAociwgaSlgICByZWFsCis9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09 PT0KIAogLi4gYzptYWNybzo6IEdDQ19KSVRfQklOQVJZX09QX1BMVVMKIApAQCAtMzc4LDYgKzM4 OCwyNSBAQCBCaW5hcnkgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICBDIGVxdWl2 YWxlbnQKIAogICAgaW4gQy4KIAorLi4gYzptYWNybzo6IEdDQ19KSVRfQklOQVJZX09QX0NPTVBM RVgKKworICAgQ3JlYXRlIGEgY29tcGxleCBmbG9hdGluZyBwb2ludCB2YWx1ZSBmcm9tCisgICB0 d28gcmVhbCBmbG9hdGluZyBwb2ludCB2YWx1ZXMgd2l0aCB0aGUgc2FtZQorICAgc2l6ZSBxdWFs aWZpZXIgYXMgdGhlIGNvbXBsZXggcmVzdWx0IHR5cGUuCisgICBJLmUgdHdvIGZsb2F0cyBmb3Ig YSBfQ29tcGxleCBmbG9hdCwgZXRjLgorCisgICBBbmFsb2dvdXMgdG86CisgICAgIENNUExYIChy ZWFsLGltYWcpCisgICBpbiBDLgorCisgICBUaGUgZmlyc3Qgb3BlcmFuZCBpcyB0aGUgcmVhbCBw YXJ0LCB0aGUgb3RoZXIKKyAgIHRoZSBpbWFnaW5hcnkuIE5lZ2F0aXZlIHplcm9lcyBhcmUgcHJl c2VydmVkCisgICBhbmQgSW5mOnMgZG8gbm90IGxlYWQgdG8gTmFOcy4KKworICAgVGhpcyBvcGVy YXRvciAgd2FzIGFkZGVkIGluIExJQkdDQ0pJVF9BQklfMTY7CisgICB5b3UgY2FuIHRlc3QgZm9y IGl0cyBwcmVzZW5jZSB1c2luZworICAgICAgIGAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09NUExF WGAKKyAgIAogQ29tcGFyaXNvbnMKICoqKioqKioqKioqCiAKQEAgLTQwMiw2ICs0MzEsNyBAQCBD b21wYXJpc29uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgZXF1aXZhbGVudAogOmM6 bWFjcm86YEdDQ19KSVRfQ09NUEFSSVNPTl9HRWAgICAgICAgICBgeCA+PSB5YAogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT0KIAorICAgTm90ZTog T25seSBgPT1gIGFuZCBgIT1gIGFyZSBkZWZpbmVkIGZvciBjb21wbGV4IHR5cGVzLgogCiBGdW5j dGlvbiBjYWxscwogKioqKioqKioqKioqKioKQEAgLTUwNCwxMCArNTM0LDE3IEBAIFR5cGUtY29l cmNpb24KIAogICAgQ3VycmVudGx5IG9ubHkgYSBsaW1pdGVkIHNldCBvZiBjb252ZXJzaW9ucyBh cmUgcG9zc2libGU6CiAKLSAgICAgKiBpbnQgPC0+IGZsb2F0Ci0gICAgICogaW50IDwtPiBib29s CisgICAgICogaW50ZWdlciA8LT4gaW50ZWdlcgorICAgICAqIGZsb2F0aW5nIHBvaW50IDwtPiBm bG9hdGluZyBwb2ludCAKKyAgICAgKiBpbnRlZ2VyIDwtPiBmbG9hdGluZyBwb2ludAorICAgICAq IGludGVnZXIgPC0+IGJvb2wKICAgICAgKiBQKiAgPC0+IFEqLCBmb3IgcG9pbnRlciB0eXBlcyBQ IGFuZCBRCiAKKyAgIE5vdGU6ICJmbG9hdGluZyBwb2ludCIgaW5jbHVkZXMgY29tcGxleCB0eXBl cy4KKyAgICAgICAKKyAgIFdoZW4gYSBjb21wbGV4IHR5cGUgaXMgY29udmVydGVkIHRvIGEgbm9u LWNvbXBsZXggdHlwZSwgdGhlCisgICBpbWFnaW5hcnkgcGFydCBpcyBkaXNjYXJkZWQuCisgICAg ICAgCiBMdmFsdWVzCiAtLS0tLS0tCiAKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3Mv dHlwZXMucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QKaW5kZXggODMxZjExYjY3 OWEuLjViNWJhMDUwNjU4IDEwMDY0NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJz dAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJzdApAQCAtODIsMTEgKzgyLDE3IEBA IFN0YW5kYXJkIHR5cGVzCiAgICA6YzpkYXRhOmBHQ0NfSklUX1RZUEVfQ09OU1RfQ0hBUl9QVFJg ICAgICAgIEMgdHlwZTogYGAoY29uc3QgY2hhciAqKWBgCiAgICA6YzpkYXRhOmBHQ0NfSklUX1RZ UEVfU0laRV9UYCAgICAgICAgICAgICAgIEMncyBgYHNpemVfdGBgIHR5cGUKICAgIDpjOmRhdGE6 YEdDQ19KSVRfVFlQRV9GSUxFX1BUUmAgICAgICAgICAgICAgQyB0eXBlOiBgYChGSUxFICopYGAK LSAgIDpjOmRhdGE6YEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FUYCAgICAgICAgQzk5J3MgYGBf Q29tcGxleCBmbG9hdGBgCi0gICA6YzpkYXRhOmBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEVg ICAgICAgIEM5OSdzIGBgX0NvbXBsZXggZG91YmxlYGAKLSAgIDpjOmRhdGE6YEdDQ19KSVRfVFlQ RV9DT01QTEVYX0xPTkdfRE9VQkxFYCAgQzk5J3MgYGBfQ29tcGxleCBsb25nIGRvdWJsZWBgCisg ICA6YzpkYXRhOmBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVGAgICAgICAgIEM5OSdzIGBgX0Nv bXBsZXggZmxvYXRgYCwgQUJJIDE2CisgICA6YzpkYXRhOmBHQ0NfSklUX1RZUEVfQ09NUExFWF9E T1VCTEVgICAgICAgIEM5OSdzIGBgX0NvbXBsZXggZG91YmxlYGAsIEFCSSAxNgorICAgOmM6ZGF0 YTpgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEVgICBDOTkncyBgYF9Db21wbGV4IGxv bmcgZG91YmxlYGAsIEFCSSAxNgogICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisgICBUaGUgY29t cGxleCB0eXBlcyBhcmUgYXZhaWxhYmxlIGZyb20gOnJlZjpgTElCR0NDSklUX0FCSV8xNmAgYWZ0 ZXIKKyAgIHNldHRpbmcgOnJlZjpgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21w bGV4X3R5cGVzYC4KKworICAgWW91IGNhbiB0ZXN0IGZvciBjb21wbGV4IHR5cGVzIHN1cHBvcnQg d2l0aCB0aGUgZGVmaW5lCisgICBgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NPTVBMRVhgLgorCiAu LiBmdW5jdGlvbjo6IGdjY19qaXRfdHlwZSAqXAogICAgICAgICAgICAgICBnY2Nfaml0X2NvbnRl eHRfZ2V0X2ludF90eXBlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIFwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9ieXRlcywgaW50IGlzX3NpZ25l ZCkKZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LWNvbW1vbi5oIGIvZ2NjL2ppdC9qaXQtY29tbW9u LmgKaW5kZXggZjg4ZTY3NTViMDAuLmJjMDQ1M2ZiYTA1IDEwMDY0NAotLS0gYS9nY2Mvaml0L2pp dC1jb21tb24uaAorKysgYi9nY2Mvaml0L2ppdC1jb21tb24uaApAQCAtMTk4LDYgKzE5OCw3IEBA IGVudW0gaW5uZXJfYm9vbF9vcHRpb24KIHsKICAgSU5ORVJfQk9PTF9PUFRJT05fQUxMT1dfVU5S RUFDSEFCTEVfQkxPQ0tTLAogICBJTk5FUl9CT09MX09QVElPTl9VU0VfRVhURVJOQUxfRFJJVkVS LAorICBJTk5FUl9CT09MX09QVElPTl9FTkFCTEVfQ09NUExFWF9UWVBFUywKIAogICBOVU1fSU5O RVJfQk9PTF9PUFRJT05TCiB9OwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suYyBi L2djYy9qaXQvaml0LXBsYXliYWNrLmMKaW5kZXggNTkzOTlkZWUyNTEuLjhlNDk3MTk1OGMzIDEw MDY0NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jCisrKyBiL2djYy9qaXQvaml0LXBsYXli YWNrLmMKQEAgLTQwLDYgKzQwLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJnY2MuaCIKICNpbmNsdWRlICJkaWFnbm9zdGlj LmgiCiAjaW5jbHVkZSAic3RtdC5oIgorI2luY2x1ZGUgImNvbXBsZXguaCIKIAogI2luY2x1ZGUg PHB0aHJlYWQuaD4KIApAQCAtNzgsNiArNzksOCBAQCBjb252ZXJ0ICh0cmVlIGRzdF90eXBlLCB0 cmVlIGV4cHIpCiAgICAgY2FzZSBJTlRFR0VSX1RZUEU6CiAgICAgY2FzZSBFTlVNRVJBTF9UWVBF OgogICAgICAgcmV0dXJuIGZvbGQgKGNvbnZlcnRfdG9faW50ZWdlciAoZHN0X3R5cGUsIGV4cHIp KTsKKyAgICBjYXNlIFJFQUxfVFlQRToKKyAgICAgIHJldHVybiBmb2xkIChjb252ZXJ0X3RvX3Jl YWwgKGRzdF90eXBlLCBleHByKSk7CiAKICAgICBkZWZhdWx0OgogICAgICAgZ2NjX2Fzc2VydCAo Z2NjOjpqaXQ6OmFjdGl2ZV9wbGF5YmFja19jdHh0KTsKQEAgLTY3OSw2ICs2ODIsMjQgQEAgbmV3 X2dsb2JhbF9pbml0aWFsaXplZCAobG9jYXRpb24gKmxvYywKIG5hbWVzcGFjZSBwbGF5YmFjawog ewogCisvKiBSZXR1cm4gdGhlIGNvcnJlbnNwb25kaW5nIG5vdCBjb21wbGV4IGZsb2F0IHR5cGUg b2YgYQorICAgZmxvYXQgdHlwZS4gSS5lLiBjb21wbGV4IGZsb2F0IC0+IGZsb2F0ICovCitzdGF0 aWMgdHJlZQorY29tcGxleF9yZWFsX3RvX3JlYWwgKHRyZWUgY29tcGxleF90eXBlKQoreworICBp ZiAoVFlQRV9DQU5PTklDQUwgKGNvbXBsZXhfdHlwZSkgPT0KKyAgICAgICAgICAgIFRZUEVfQ0FO T05JQ0FMIChjb21wbGV4X2Zsb2F0X3R5cGVfbm9kZSkpCisgICAgcmV0dXJuIGZsb2F0X3R5cGVf bm9kZTsKKyAgZWxzZSBpZiAoVFlQRV9DQU5PTklDQUwgKGNvbXBsZXhfdHlwZSkgPT0KKwkgICAg VFlQRV9DQU5PTklDQUwgKGNvbXBsZXhfZG91YmxlX3R5cGVfbm9kZSkpCisgICAgcmV0dXJuIGRv dWJsZV90eXBlX25vZGU7CisgIGVsc2UgaWYgKFRZUEVfQ0FOT05JQ0FMIChjb21wbGV4X3R5cGUp ID09CisJICAgIFRZUEVfQ0FOT05JQ0FMIChjb21wbGV4X2xvbmdfZG91YmxlX3R5cGVfbm9kZSkp CisgICAgcmV0dXJuIGxvbmdfZG91YmxlX3R5cGVfbm9kZTsKKyAgZWxzZQorICAgIGdjY191bnJl YWNoYWJsZSgpOworfQorCiAvKiBTcGVjaWFsaXphdGlvbiBvZiBtYWtpbmcgYW4gcnZhbHVlIGZy b20gYSBjb25zdCwgZm9yIGhvc3QgPGludD4uICAqLwogCiB0ZW1wbGF0ZSA8PgpAQCAtNjk0LDYg KzcxNSwyNSBAQCBuZXdfcnZhbHVlX2Zyb21fY29uc3QgPGludD4gKHR5cGUgKnR5cGUsCiAgICAg ICB0cmVlIGlubmVyID0gYnVpbGRfaW50X2NzdCAoaW5uZXJfdHlwZSwgdmFsdWUpOwogICAgICAg cmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKICAgICB9CisgIGVsc2UgaWYgKENPTVBM RVhfRkxPQVRfVFlQRV9QIChpbm5lcl90eXBlKSkKKyAgICB7CisgICAgICB0cmVlIHRyZWVfcmVh bDsKKyAgICAgIHRyZWUgdHJlZV9pbWFnOworICAgICAgdHJlZSByZWFsX3R5cGU7CisgICAgICBS RUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZTsKKyAgICAgIFJFQUxfVkFMVUVfVFlQRSBpbWFnX3Zh bHVlOworCisgICAgICByZWFsX3R5cGUgPSBjb21wbGV4X3JlYWxfdG9fcmVhbCAoaW5uZXJfdHlw ZSk7CisKKyAgICAgIHJlYWxfZnJvbV9pbnRlZ2VyICgmcmVhbF92YWx1ZSwgVk9JRG1vZGUsIHZh bHVlLCBTSUdORUQpOworICAgICAgcmVhbF9mcm9tX2ludGVnZXIgKCZpbWFnX3ZhbHVlLCBWT0lE bW9kZSwgMCwgU0lHTkVEKTsKKworICAgICAgdHJlZV9yZWFsID0gYnVpbGRfcmVhbCAocmVhbF90 eXBlLCByZWFsX3ZhbHVlKTsKKyAgICAgIHRyZWVfaW1hZyA9IGJ1aWxkX3JlYWwgKHJlYWxfdHlw ZSwgaW1hZ192YWx1ZSk7CisKKyAgICAgIHRyZWUgaW5uZXIgPSBidWlsZF9jb21wbGV4IChpbm5l cl90eXBlLCB0cmVlX3JlYWwsIHRyZWVfaW1hZyk7CisgICAgICByZXR1cm4gbmV3IHJ2YWx1ZSAo dGhpcywgaW5uZXIpOworICAgIH0KICAgZWxzZQogICAgIHsKICAgICAgIFJFQUxfVkFMVUVfVFlQ RSByZWFsX3ZhbHVlOwpAQCAtNzE4LDYgKzc1OCwyNSBAQCBuZXdfcnZhbHVlX2Zyb21fY29uc3Qg PGxvbmc+ICh0eXBlICp0eXBlLAogICAgICAgdHJlZSBpbm5lciA9IGJ1aWxkX2ludF9jc3QgKGlu bmVyX3R5cGUsIHZhbHVlKTsKICAgICAgIHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7 CiAgICAgfQorICBlbHNlIGlmIChDT01QTEVYX0ZMT0FUX1RZUEVfUCAoaW5uZXJfdHlwZSkpCisg ICAgeworICAgICAgdHJlZSB0cmVlX3JlYWw7CisgICAgICB0cmVlIHRyZWVfaW1hZzsKKyAgICAg IHRyZWUgcmVhbF90eXBlOworICAgICAgUkVBTF9WQUxVRV9UWVBFIHJlYWxfdmFsdWU7CisgICAg ICBSRUFMX1ZBTFVFX1RZUEUgaW1hZ192YWx1ZTsKKworICAgICAgcmVhbF90eXBlID0gY29tcGxl eF9yZWFsX3RvX3JlYWwgKGlubmVyX3R5cGUpOworCisgICAgICByZWFsX2Zyb21faW50ZWdlciAo JnJlYWxfdmFsdWUsIFZPSURtb2RlLCB2YWx1ZSwgU0lHTkVEKTsKKyAgICAgIHJlYWxfZnJvbV9p bnRlZ2VyICgmaW1hZ192YWx1ZSwgVk9JRG1vZGUsIDAsIFNJR05FRCk7CisKKyAgICAgIHRyZWVf cmVhbCA9IGJ1aWxkX3JlYWwgKHJlYWxfdHlwZSwgcmVhbF92YWx1ZSk7CisgICAgICB0cmVlX2lt YWcgPSBidWlsZF9yZWFsIChyZWFsX3R5cGUsIGltYWdfdmFsdWUpOworCisgICAgICB0cmVlIGlu bmVyID0gYnVpbGRfY29tcGxleCAoaW5uZXJfdHlwZSwgdHJlZV9yZWFsLCB0cmVlX2ltYWcpOwor ICAgICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9CiAgIGVsc2UKICAg ICB7CiAgICAgICBSRUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZTsKQEAgLTc0MywxOSArODAyLDEw NCBAQCBuZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT4gKHR5cGUgKnR5cGUsCiAgICAgIHJl YWwuYzpyZWFsX2Zyb21fdGFyZ2V0IGFwcGVhcnMgdG8gcmVxdWlyZSB0aGUgcmVwcmVzZW50YXRp b24gdG8gYmUKICAgICAgc3BsaXQgaW50byAzMi1iaXQgdmFsdWVzLCBhbmQgdGhlbiBzZW50IGFz IGFuIHBhaXIgb2YgaG9zdCBsb25nCiAgICAgIGludHMuICAqLworCisgIHVuaW9uCisgIHsKKyAg ICBkb3VibGUgYXNfZG91YmxlOworICAgIHVpbnQzMl90IGFzX3VpbnQzMnNbMl07CisgIH0gdV9y ZWFsLCB1X2ltYWc7CisKKyAgdV9yZWFsLmFzX2RvdWJsZSA9IHZhbHVlOworICBsb25nIGludCBh c19sb25nX2ludHNbMl07CisgIGFzX2xvbmdfaW50c1swXSA9IHVfcmVhbC5hc191aW50MzJzWzBd OworICBhc19sb25nX2ludHNbMV0gPSB1X3JlYWwuYXNfdWludDMyc1sxXTsKKwogICBSRUFMX1ZB TFVFX1RZUEUgcmVhbF92YWx1ZTsKKyAgcmVhbF9mcm9tX3RhcmdldCAoJnJlYWxfdmFsdWUsIGFz X2xvbmdfaW50cywgREZtb2RlKTsKKworICBpZiAoQ09NUExFWF9GTE9BVF9UWVBFX1AgKGlubmVy X3R5cGUpKQorICAgIHsKKyAgICAgIHRyZWUgdHJlZV9yZWFsOworICAgICAgdHJlZSB0cmVlX2lt YWc7CisgICAgICB0cmVlIHJlYWxfdHlwZTsKKworICAgICAgUkVBTF9WQUxVRV9UWVBFIGltYWdf dmFsdWU7CisKKyAgICAgIGxvbmcgaW50IHplcm9fYXNfbG9uZ19pbnRzWzJdOworICAgICAgdV9p bWFnLmFzX2RvdWJsZSA9IDAuOworICAgICAgemVyb19hc19sb25nX2ludHNbMF0gPSB1X2ltYWcu YXNfdWludDMyc1swXTsKKyAgICAgIHplcm9fYXNfbG9uZ19pbnRzWzFdID0gdV9pbWFnLmFzX3Vp bnQzMnNbMV07CisKKyAgICAgIHJlYWxfZnJvbV90YXJnZXQgKCZpbWFnX3ZhbHVlLCB6ZXJvX2Fz X2xvbmdfaW50cywgREZtb2RlKTsKKworICAgICAgcmVhbF90eXBlID0gY29tcGxleF9yZWFsX3Rv X3JlYWwgKGlubmVyX3R5cGUpOworCisgICAgICB0cmVlX3JlYWwgPSBidWlsZF9yZWFsIChyZWFs X3R5cGUsIHJlYWxfdmFsdWUpOworICAgICAgdHJlZV9pbWFnID0gYnVpbGRfcmVhbCAocmVhbF90 eXBlLCBpbWFnX3ZhbHVlKTsKKworICAgICAgdHJlZSBpbm5lciA9IGJ1aWxkX2NvbXBsZXggKGlu bmVyX3R5cGUsIHRyZWVfcmVhbCwgdHJlZV9pbWFnKTsKKyAgICAgIHJldHVybiBuZXcgcnZhbHVl ICh0aGlzLCBpbm5lcik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdHJlZSBpbm5lciA9 IGJ1aWxkX3JlYWwgKGlubmVyX3R5cGUsIHJlYWxfdmFsdWUpOworICAgICAgcmV0dXJuIG5ldyBy dmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9Cit9CisKKy8qIFNwZWNpYWxpemF0aW9uIG9mIG1h a2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0LAorICAgZm9yIGhvc3QgPGRvdWJsZSBfQ29tcGxl eD4uICovCisKK3RlbXBsYXRlIDw+CitydmFsdWUgKgorY29udGV4dDo6CituZXdfcnZhbHVlX2Zy b21fY29uc3QgPF9Db21wbGV4IGRvdWJsZT4gKHR5cGUgKnR5cGUsCisgICAgICAgICAgICAgICAg X0NvbXBsZXggZG91YmxlICB2YWx1ZSkKK3sKKyAgdHJlZSBpbm5lcl90eXBlID0gdHlwZS0+YXNf dHJlZSAoKTsKKwogICB1bmlvbgogICB7CiAgICAgZG91YmxlIGFzX2RvdWJsZTsKICAgICB1aW50 MzJfdCBhc191aW50MzJzWzJdOwotICB9IHU7Ci0gIHUuYXNfZG91YmxlID0gdmFsdWU7CisgIH0g dV9yZWFsLCB1X2ltYWc7CisKKyAgdV9yZWFsLmFzX2RvdWJsZSA9IGNyZWFsKHZhbHVlKTsKICAg bG9uZyBpbnQgYXNfbG9uZ19pbnRzWzJdOwotICBhc19sb25nX2ludHNbMF0gPSB1LmFzX3VpbnQz MnNbMF07Ci0gIGFzX2xvbmdfaW50c1sxXSA9IHUuYXNfdWludDMyc1sxXTsKKyAgYXNfbG9uZ19p bnRzWzBdID0gdV9yZWFsLmFzX3VpbnQzMnNbMF07CisgIGFzX2xvbmdfaW50c1sxXSA9IHVfcmVh bC5hc191aW50MzJzWzFdOworCisgIFJFQUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlOwogICByZWFs X2Zyb21fdGFyZ2V0ICgmcmVhbF92YWx1ZSwgYXNfbG9uZ19pbnRzLCBERm1vZGUpOwotICB0cmVl IGlubmVyID0gYnVpbGRfcmVhbCAoaW5uZXJfdHlwZSwgcmVhbF92YWx1ZSk7Ci0gIHJldHVybiBu ZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7CisKKyAgaWYgKENPTVBMRVhfRkxPQVRfVFlQRV9QIChp bm5lcl90eXBlKSkKKyAgICB7CisgICAgICB0cmVlIHRyZWVfcmVhbDsKKyAgICAgIHRyZWUgdHJl ZV9pbWFnOworICAgICAgdHJlZSByZWFsX3R5cGU7CisKKyAgICAgIFJFQUxfVkFMVUVfVFlQRSBp bWFnX3ZhbHVlOworCisgICAgICBsb25nIGludCB2YWx1ZV9hc19sb25nX2ludHNbMl07CisgICAg ICB1X2ltYWcuYXNfZG91YmxlID0gY2ltYWcodmFsdWUpOworICAgICAgdmFsdWVfYXNfbG9uZ19p bnRzWzBdID0gdV9pbWFnLmFzX3VpbnQzMnNbMF07CisgICAgICB2YWx1ZV9hc19sb25nX2ludHNb MV0gPSB1X2ltYWcuYXNfdWludDMyc1sxXTsKKworICAgICAgcmVhbF9mcm9tX3RhcmdldCAoJmlt YWdfdmFsdWUsIHZhbHVlX2FzX2xvbmdfaW50cywgREZtb2RlKTsKKworICAgICAgcmVhbF90eXBl ID0gY29tcGxleF9yZWFsX3RvX3JlYWwgKGlubmVyX3R5cGUpOworCisgICAgICB0cmVlX3JlYWwg PSBidWlsZF9yZWFsIChyZWFsX3R5cGUsIHJlYWxfdmFsdWUpOworICAgICAgdHJlZV9pbWFnID0g YnVpbGRfcmVhbCAocmVhbF90eXBlLCBpbWFnX3ZhbHVlKTsKKworICAgICAgdHJlZSBpbm5lciA9 IGJ1aWxkX2NvbXBsZXggKGlubmVyX3R5cGUsIHRyZWVfcmVhbCwgdHJlZV9pbWFnKTsKKyAgICAg IHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7CisgICAgfQorICBlbHNlCisgICAgewor ICAgICAgdHJlZSBpbm5lciA9IGJ1aWxkX3JlYWwgKGlubmVyX3R5cGUsIHJlYWxfdmFsdWUpOwor ICAgICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9CiB9CiAKIC8qIFNw ZWNpYWxpemF0aW9uIG9mIG1ha2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0LCBmb3IgaG9zdCA8 dm9pZCAqPi4gICovCkBAIC05ODUsNiArMTEyOSwxMSBAQCBuZXdfYmluYXJ5X29wIChsb2NhdGlv biAqbG9jLAogICAgIGNhc2UgR0NDX0pJVF9CSU5BUllfT1BfUlNISUZUOgogICAgICAgaW5uZXJf b3AgPSBSU0hJRlRfRVhQUjsKICAgICAgIGJyZWFrOworCisgICAgLyogQ3JlYXRlIGNvbXBsZXgg dmFsdWUgZnJvbSB0d28gcmVhbCB2YWx1ZXMgKi8KKyAgICBjYXNlIEdDQ19KSVRfQklOQVJZX09Q X0NPTVBMRVg6CisgICAgICBpbm5lcl9vcCA9IENPTVBMRVhfRVhQUjsKKyAgICAgIGJyZWFrOwog ICAgIH0KIAogICB0cmVlIGlubmVyX2V4cHIgPSBidWlsZDIgKGlubmVyX29wLApAQCAtMTE2Myw2 ICsxMzEyLDEwIEBAIHBsYXliYWNrOjpjb250ZXh0OjpidWlsZF9jYXN0IChwbGF5YmFjazo6bG9j YXRpb24gKmxvYywKIAkJICAgICAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFICh0X2V4cHIpLCAw KSk7CiAgICAgICBnb3RvIG1heWJlX2ZvbGQ7CiAKKyAgICBjYXNlIENPTVBMRVhfVFlQRToKKyAg ICAgIHRfcmV0ID0gY29udmVydF90b19jb21wbGV4ICh0X2RzdF90eXBlLCB0X2V4cHIpOworICAg ICAgZ290byBtYXliZV9mb2xkOworCiAgICAgY2FzZSBSRUFMX1RZUEU6CiAgICAgICB0X3JldCA9 IGNvbnZlcnRfdG9fcmVhbCAodF9kc3RfdHlwZSwgdF9leHByKTsKICAgICAgIGdvdG8gbWF5YmVf Zm9sZDsKZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXJlY29yZGluZy5jIGIvZ2NjL2ppdC9qaXQt cmVjb3JkaW5nLmMKaW5kZXggMTE3ZmY3MDExNGMuLjU2NWQwNzhkNTE3IDEwMDY0NAotLS0gYS9n Y2Mvaml0L2ppdC1yZWNvcmRpbmcuYworKysgYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuYwpAQCAt MjYsNiArMjYsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYg bm90IHNlZQogI2luY2x1ZGUgInRvcGxldi5oIgogCiAjaW5jbHVkZSA8cHRocmVhZC5oPgorI2lu Y2x1ZGUgPGNvbXBsZXguaD4KIAogI2luY2x1ZGUgImppdC1idWlsdGlucy5oIgogI2luY2x1ZGUg ImppdC1yZWNvcmRpbmcuaCIKQEAgLTE2MDksNyArMTYxMCw4IEBAIHN0YXRpYyBjb25zdCBjaGFy ICogY29uc3QKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QKICBpbm5lcl9ib29sX29wdGlvbl9y ZXByb2R1Y2VyX3N0cmluZ3NbTlVNX0lOTkVSX0JPT0xfT1BUSU9OU10gPSB7CiAgICJnY2Nfaml0 X2NvbnRleHRfc2V0X2Jvb2xfYWxsb3dfdW5yZWFjaGFibGVfYmxvY2tzIiwKLSAgImdjY19qaXRf Y29udGV4dF9zZXRfYm9vbF91c2VfZXh0ZXJuYWxfZHJpdmVyIgorICAiZ2NjX2ppdF9jb250ZXh0 X3NldF9ib29sX3VzZV9leHRlcm5hbF9kcml2ZXIiLAorICAiZ2NjX2ppdF9jb250ZXh0X3NldF9i b29sX2VuYWJsZV9jb21wbGV4X3R5cGVzIgogfTsKIAogLyogV3JpdGUgdGhlIGN1cnJlbnQgdmFs dWUgb2YgYWxsIG9wdGlvbnMgdG8gdGhlIGxvZyBmaWxlIChpZiBhbnkpLiAgKi8KQEAgLTI0MjMs NiArMjQyNSw1OSBAQCByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGU6OmlzX2Zsb2F0ICgp IGNvbnN0CiAgICAgfQogfQogCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBwdXJlIHZpcnR1YWwgaG9v ayByZWNvcmRpbmc6OnR5cGU6OmlzX2NvbXBsZXggZm9yCisgICByZWNvcmRpbmc6Om1lbWVudG9f b2ZfZ2V0X3R5cGUuICAqLworCitib29sCityZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGU6 OmlzX2NvbXBsZXggKCkgY29uc3QKK3sKKyAgc3dpdGNoIChtX2tpbmQpCisgICAgeworICAgIGRl ZmF1bHQ6IGdjY191bnJlYWNoYWJsZSAoKTsKKworICAgIGNhc2UgR0NDX0pJVF9UWVBFX1ZPSUQ6 CisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9WT0lEX1BUUjoK KyAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgR0NDX0pJVF9UWVBFX0JPT0w6CisgICAg ICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9DSEFSOgorICAgIGNhc2Ug R0NDX0pJVF9UWVBFX1NJR05FRF9DSEFSOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX1VOU0lHTkVE X0NIQVI6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfU0hPUlQ6CisgICAgY2FzZSBHQ0NfSklUX1RZ UEVfVU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UOgorICAgIGNhc2Ug R0NDX0pJVF9UWVBFX1VOU0lHTkVEX0lOVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9MT05HOgor ICAgIGNhc2UgR0NDX0pJVF9UWVBFX1VOU0lHTkVEX0xPTkc6CisgICAgY2FzZSBHQ0NfSklUX1RZ UEVfTE9OR19MT05HOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX1VOU0lHTkVEX0xPTkdfTE9ORzoK KyAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgR0NDX0pJVF9UWVBFX0ZMT0FUOgorICAg IGNhc2UgR0NDX0pJVF9UWVBFX0RPVUJMRToKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9MT05HX0RP VUJMRToKKyAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgR0NDX0pJVF9UWVBFX0NPTlNU X0NIQVJfUFRSOgorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBHQ0NfSklUX1RZUEVf U0laRV9UOgorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBHQ0NfSklUX1RZUEVfRklM RV9QVFI6CisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9DT01Q TEVYX0ZMT0FUOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxFOgorICAgIGNh c2UgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEU6CisgICAgICByZXR1cm4gdHJ1ZTsK KyAgICB9Cit9CisKIC8qIEltcGxlbWVudGF0aW9uIG9mIHB1cmUgdmlydHVhbCBob29rIHJlY29y ZGluZzo6dHlwZTo6aXNfYm9vbCBmb3IKICAgIHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlw ZS4gICovCiAKQEAgLTQ3MDQsNiArNDc1OSw3IEBAIHJlY29yZGluZzo6Z2xvYmFsOjp3cml0ZV9y ZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogdGVtcGxhdGUgY2xhc3MgcmVjb3JkaW5nOjptZW1l bnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8aW50PjsKIHRlbXBsYXRlIGNsYXNzIHJlY29y ZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmc+OwogdGVtcGxhdGUg Y2xhc3MgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8ZG91Ymxl PjsKK3RlbXBsYXRlIGNsYXNzIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21f Y29uc3QgPF9Db21wbGV4IGRvdWJsZT47CiB0ZW1wbGF0ZSBjbGFzcyByZWNvcmRpbmc6Om1lbWVu dG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDx2b2lkICo+OwogCiAvKiBJbXBsZW1lbnRhdGlv biBvZiB0aGUgcHVyZSB2aXJ0dWFsIGhvb2sgcmVjb3JkaW5nOjptZW1lbnRvOjpyZXBsYXlfaW50 bwpAQCAtNDg4MSw2ICs0OTM3LDUxIEBAIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVl X2Zyb21fY29uc3QgPGRvdWJsZT46OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjCiAgICAgbV92 YWx1ZSk7CiB9CiAKKy8qIFRoZSBtYWtlX2RlYnVnX3N0cmluZyBzcGVjaWFsaXphdGlvbiBmb3Ig PGRvdWJsZSBjb21wbGV4PiwgcmVuZGVyaW5nIGl0IGFzCisgICAgIChUQVJHRVRfVFlQRSlMSVRF UkFMCisgICBlLmcuCisgICAgICIoY29tcGxleCBmbG9hdCkoNDIuMCs0Mi4waikiLiAgKi8KKwor dGVtcGxhdGUgPD4KK3N0cmluZyAqCittZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8 X0NvbXBsZXggZG91YmxlPjo6bWFrZV9kZWJ1Z19zdHJpbmcgKCkKK3sKKyAgZG91YmxlIHJlYWwg PSBjcmVhbChtX3ZhbHVlKTsKKyAgZG91YmxlIGltYWcgPSBjaW1hZyhtX3ZhbHVlKTsKKyAgcmV0 dXJuIHN0cmluZzo6ZnJvbV9wcmludGYgKG1fY3R4dCwKKyAgICAgICAgICAgICAgICAgICIoJXMp KCVnJStnaikiLAorICAgICAgICAgICAgICAgICAgbV90eXBlLT5nZXRfZGVidWdfc3RyaW5nICgp LAorICAgICAgICAgICAgICAgICAgcmVhbCwgaW1hZyk7Cit9CisKKy8qIFRoZSBnZXRfd2lkZV9p bnQgc3BlY2lhbGl6YXRpb24gZm9yIDxkb3VibGUgY29tcGxleD4uICAqLworCit0ZW1wbGF0ZSA8 PgorYm9vbAorbWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPF9Db21wbGV4IGRvdWJs ZT46OmdldF93aWRlX2ludCAod2lkZV9pbnQgKikgY29uc3QKK3sKKyAgcmV0dXJuIGZhbHNlOwor fQorCisvKiBUaGUgd3JpdGVfcmVwcm9kdWNlciBzcGVjaWFsaXphdGlvbiBmb3IgPGRvdWJsZT4u ICAqLworCit0ZW1wbGF0ZSA8Pgordm9pZAorcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFs dWVfZnJvbV9jb25zdCA8X0NvbXBsZXggZG91YmxlPjo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9k dWNlciAmcikKK3sKKyAgY29uc3QgY2hhciAqaWQgPSByLm1ha2VfaWRlbnRpZmllciAodGhpcywg InJ2YWx1ZSIpOworICBkb3VibGUgcmVhbCA9IGNyZWFsKG1fdmFsdWUpOworICBkb3VibGUgaW1h ZyA9IGNpbWFnKG1fdmFsdWUpOworICByLndyaXRlICgiICBnY2Nfaml0X3J2YWx1ZSAqJXMgPVxu IgorICAgICIgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJs ZSAoJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAqL1xuIgorICAgICIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51bWVy aWNfdHlwZSAqL1xuIgorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICVmKyVmaik7IC8qIGRvdWJsZSB2YWx1ZSAqL1xuIiwKKyAgICBpZCwKKyAgICByLmdl dF9pZGVudGlmaWVyIChnZXRfY29udGV4dCAoKSksCisgICAgci5nZXRfaWRlbnRpZmllcl9hc190 eXBlIChtX3R5cGUpLAorICAgIHJlYWwsIGltYWcpOworfQorCiAvKiBUaGUgbWFrZV9kZWJ1Z19z dHJpbmcgc3BlY2lhbGl6YXRpb24gZm9yIDx2b2lkICo+LCByZW5kZXJpbmcgaXQgYXMKICAgICAg KFRBUkdFVF9UWVBFKUhFWAogICAgZS5nLgpAQCAtNTE3OCwxMyArNTI3OSwyMCBAQCBzdGF0aWMg Y29uc3QgY2hhciAqIGNvbnN0IGJpbmFyeV9vcF9zdHJpbmdzW10gPSB7CiAgICJ8fCIsIC8qIEdD Q19KSVRfQklOQVJZX09QX0xPR0lDQUxfT1IgKi8KICAgIjw8IiwgLyogR0NDX0pJVF9CSU5BUllf T1BfTFNISUZUICovCiAgICI+PiIsIC8qIEdDQ19KSVRfQklOQVJZX09QX1JTSElGVCAqLworICAi IiwgLyogR0NDX0pJVF9CSU5BUllfT1BfQ09NUExFWCAtIGR1bW15IG5vdCB1c2VkICovCiB9Owog CiByZWNvcmRpbmc6OnN0cmluZyAqCiByZWNvcmRpbmc6OmJpbmFyeV9vcDo6bWFrZV9kZWJ1Z19z dHJpbmcgKCkKIHsKICAgZW51bSBwcmVjZWRlbmNlIHByZWMgPSBnZXRfcHJlY2VkZW5jZSAoKTsK LSAgcmV0dXJuIHN0cmluZzo6ZnJvbV9wcmludGYgKG1fY3R4dCwKKyAgaWYgKG1fb3AgPT0gR0ND X0pJVF9CSU5BUllfT1BfQ09NUExFWCkKKyAgICByZXR1cm4gc3RyaW5nOjpmcm9tX3ByaW50ZiAo bV9jdHh0LAorCQkJICAgICAgIiglcyArICVzICogX0ltYWdpbmFyeV9JKSIsCisJCQkgICAgICBt X2EtPmdldF9kZWJ1Z19zdHJpbmdfcGFyZW5zIChwcmVjKSwKKwkJCSAgICAgIG1fYi0+Z2V0X2Rl YnVnX3N0cmluZ19wYXJlbnMgKHByZWMpKTsKKyAgZWxzZQorICAgIHJldHVybiBzdHJpbmc6OmZy b21fcHJpbnRmIChtX2N0eHQsCiAJCQkgICAgICAiJXMgJXMgJXMiLAogCQkJICAgICAgbV9hLT5n ZXRfZGVidWdfc3RyaW5nX3BhcmVucyAocHJlYyksCiAJCQkgICAgICBiaW5hcnlfb3Bfc3RyaW5n c1ttX29wXSwKQEAgLTUyMDMsNyArNTMxMSw4IEBAIGNvbnN0IGNoYXIgKiBjb25zdCBiaW5hcnlf b3BfcmVwcm9kdWNlcl9zdHJpbmdzW10gPSB7CiAgICJHQ0NfSklUX0JJTkFSWV9PUF9MT0dJQ0FM X0FORCIsCiAgICJHQ0NfSklUX0JJTkFSWV9PUF9MT0dJQ0FMX09SIiwKICAgIkdDQ19KSVRfQklO QVJZX09QX0xTSElGVCIsCi0gICJHQ0NfSklUX0JJTkFSWV9PUF9SU0hJRlQiCisgICJHQ0NfSklU X0JJTkFSWV9PUF9SU0hJRlQiLAorICAiR0NDX0pJVF9CSU5BUllfT1BfQ09NUExFWCIsCiB9Owog CiAvKiBJbXBsZW1lbnRhdGlvbiBvZiByZWNvcmRpbmc6Om1lbWVudG86OndyaXRlX3JlcHJvZHVj ZXIgZm9yIGJpbmFyeSBvcHMuICAqLwpAQCAtNTI0NCw2ICs1MzUzLDcgQEAgc3RhdGljIGNvbnN0 IGVudW0gcHJlY2VkZW5jZSBiaW5hcnlfb3BfcHJlY2VkZW5jZVtdID0gewogICBQUkVDRURFTkNF X0xPR0lDQUxfT1IsIC8qIEdDQ19KSVRfQklOQVJZX09QX0xPR0lDQUxfT1IgKi8KICAgUFJFQ0VE RU5DRV9TSElGVCwgLyogR0NDX0pJVF9CSU5BUllfT1BfTFNISUZUICovCiAgIFBSRUNFREVOQ0Vf U0hJRlQsIC8qIEdDQ19KSVRfQklOQVJZX09QX1JTSElGVCAqLworICBQUkVDRURFTkNFX0NBU1Qs IC8qIEdDQ19KSVRfQklOQVJZX09QX0NPTVBMRVggKi8KIH07CiB9IC8qIG5hbWVzcGFjZSByZWNv cmRpbmcgKi8KIApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggYi9nY2Mvaml0 L2ppdC1yZWNvcmRpbmcuaAppbmRleCAwM2ZhMTE2MGNmMC4uZDVlMGMzNTlhNDggMTAwNjQ0Ci0t LSBhL2djYy9qaXQvaml0LXJlY29yZGluZy5oCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5o CkBAIC01NDQsMTAgKzU0NCwxNCBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBpc19pbnQgKCkg Y29uc3QgPSAwOwogICB2aXJ0dWFsIGJvb2wgaXNfZmxvYXQgKCkgY29uc3QgPSAwOwogICB2aXJ0 dWFsIGJvb2wgaXNfYm9vbCAoKSBjb25zdCA9IDA7CisgIHZpcnR1YWwgYm9vbCBpc19jb21wbGV4 ICgpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB0eXBlICppc19wb2ludGVyICgpID0gMDsKICAgdmly dHVhbCB0eXBlICppc19hcnJheSAoKSA9IDA7CiAgIHZpcnR1YWwgYm9vbCBpc192b2lkICgpIGNv bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgIHZpcnR1YWwgYm9vbCBoYXNfa25vd25fc2l6ZSAoKSBj b25zdCB7IHJldHVybiB0cnVlOyB9CisgIC8qIFVzZWQgdG8gcGFpciBjb21wbGV4IGZsb2F0IHR5 cGVzIHdpdGggcmVhbCBmbG9hdCB0eXBlCisgICAgIG9mIHRoZSBzYW1lICJiYXNlIHR5cGUiLiAq LworICB2aXJ0dWFsIGludCBmbG9hdF9zaXplX3F1YWwgKCkgY29uc3QgeyByZXR1cm4gMDsgfQog CiAgIGJvb2wgaXNfbnVtZXJpYyAoKSBjb25zdAogICB7CkBAIC01OTgsOSArNjAyLDI4IEBAIHB1 YmxpYzoKICAgICByZXR1cm4gdHlwZTo6YWNjZXB0c193cml0ZXNfZnJvbSAocnR5cGUpOwogICB9 CiAKKyAgaW50IGZsb2F0X3NpemVfcXVhbCAoKSBjb25zdCBGSU5BTCBPVkVSUklERQorICB7Cisg ICAgc3dpdGNoIChtX2tpbmQpCisgICAgICB7CisgICAgICBkZWZhdWx0OgorCXJldHVybiAwOwor ICAgICAgY2FzZSBHQ0NfSklUX1RZUEVfRkxPQVQ6CisgICAgICBjYXNlIEdDQ19KSVRfVFlQRV9D T01QTEVYX0ZMT0FUOgorCXJldHVybiAxOworICAgICAgY2FzZSBHQ0NfSklUX1RZUEVfRE9VQkxF OgorICAgICAgY2FzZSBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEU6CisJcmV0dXJuIDI7Cisg ICAgICBjYXNlIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRToKKyAgICAgIGNhc2UgR0NDX0pJVF9U WVBFX0NPTVBMRVhfTE9OR19ET1VCTEU6CisJcmV0dXJuIDM7CisgICAgICB9CisgIH0KKwogICBi b29sIGlzX2ludCAoKSBjb25zdCBGSU5BTCBPVkVSUklERTsKICAgYm9vbCBpc19mbG9hdCAoKSBj b25zdCBGSU5BTCBPVkVSUklERTsKICAgYm9vbCBpc19ib29sICgpIGNvbnN0IEZJTkFMIE9WRVJS SURFOworICBib29sIGlzX2NvbXBsZXggKCkgY29uc3QgRklOQUwgT1ZFUlJJREU7CiAgIHR5cGUg KmlzX3BvaW50ZXIgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gZGVyZWZlcmVuY2UgKCk7IH0K ICAgdHlwZSAqaXNfYXJyYXkgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gTlVMTDsgfQogICBi b29sIGlzX3ZvaWQgKCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9raW5kID09IEdD Q19KSVRfVFlQRV9WT0lEOyB9CkBAIC02MzUsNiArNjU4LDcgQEAgcHVibGljOgogICBib29sIGlz X2ludCAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICBib29sIGlz X2Zsb2F0ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgIGJvb2wg aXNfYm9vbCAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICBib29s IGlzX2NvbXBsZXggKCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAg dHlwZSAqaXNfcG9pbnRlciAoKSBGSU5BTCBPVkVSUklERSB7IHJldHVybiBtX290aGVyX3R5cGU7 IH0KICAgdHlwZSAqaXNfYXJyYXkgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gTlVMTDsgfQog CkBAIC02NjEsNiArNjg1LDcgQEAgcHVibGljOgogICBib29sIGlzX2ludCAoKSBjb25zdCBGSU5B TCBPVkVSUklERSB7IHJldHVybiBtX290aGVyX3R5cGUtPmlzX2ludCAoKTsgfQogICBib29sIGlz X2Zsb2F0ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIG1fb3RoZXJfdHlwZS0+aXNf ZmxvYXQgKCk7IH0KICAgYm9vbCBpc19ib29sICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0 dXJuIG1fb3RoZXJfdHlwZS0+aXNfYm9vbCAoKTsgfQorICBib29sIGlzX2NvbXBsZXggKCkgY29u c3QgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9vdGhlcl90eXBlLT5pc19jb21wbGV4ICgpOyB9 CiAgIHR5cGUgKmlzX3BvaW50ZXIgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9vdGhlcl90 eXBlLT5pc19wb2ludGVyICgpOyB9CiAgIHR5cGUgKmlzX2FycmF5ICgpIEZJTkFMIE9WRVJSSURF IHsgcmV0dXJuIG1fb3RoZXJfdHlwZS0+aXNfYXJyYXkgKCk7IH0KIApAQCAtNzcxLDYgKzc5Niw3 IEBAIGNsYXNzIGFycmF5X3R5cGUgOiBwdWJsaWMgdHlwZQogICBib29sIGlzX2ludCAoKSBjb25z dCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICBib29sIGlzX2Zsb2F0ICgpIGNv bnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgIGJvb2wgaXNfYm9vbCAoKSBj b25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICBib29sIGlzX2NvbXBsZXgg KCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgdHlwZSAqaXNfcG9p bnRlciAoKSBGSU5BTCBPVkVSUklERSB7IHJldHVybiBOVUxMOyB9CiAgIHR5cGUgKmlzX2FycmF5 ICgpIEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIG1fZWxlbWVudF90eXBlOyB9CiAgIGludCBudW1f ZWxlbWVudHMgKCkgeyByZXR1cm4gbV9udW1fZWxlbWVudHM7IH0KQEAgLTgwNSw2ICs4MzEsNyBA QCBwdWJsaWM6CiAgIGJvb2wgaXNfaW50ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJu IGZhbHNlOyB9CiAgIGJvb2wgaXNfZmxvYXQgKCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1 cm4gZmFsc2U7IH0KICAgYm9vbCBpc19ib29sICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0 dXJuIGZhbHNlOyB9CisgIGJvb2wgaXNfY29tcGxleCAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7 IHJldHVybiBmYWxzZTsgfQogICB0eXBlICppc19wb2ludGVyICgpIEZJTkFMIE9WRVJSSURFIHsg cmV0dXJuIE5VTEw7IH0KICAgdHlwZSAqaXNfYXJyYXkgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1 cm4gTlVMTDsgfQogCkBAIC05MTgsNiArOTQ1LDcgQEAgcHVibGljOgogICBib29sIGlzX2ludCAo KSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICBib29sIGlzX2Zsb2F0 ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgIGJvb2wgaXNfYm9v bCAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICBib29sIGlzX2Nv bXBsZXggKCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgdHlwZSAq aXNfcG9pbnRlciAoKSBGSU5BTCBPVkVSUklERSB7IHJldHVybiBOVUxMOyB9CiAgIHR5cGUgKmlz X2FycmF5ICgpIEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIE5VTEw7IH0KIApkaWZmIC0tZ2l0IGEv Z2NjL2ppdC9saWJnY2NqaXQrKy5oIGIvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCmluZGV4IDgyODMx ZmY1ZGEwLi42YmU1YTliOWNjMyAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCisr KyBiL2djYy9qaXQvbGliZ2Njaml0KysuaApAQCAtMTI4LDcgKzEyOCw4IEBAIG5hbWVzcGFjZSBn Y2NqaXQKIAogICAgIHZvaWQgc2V0X2Jvb2xfYWxsb3dfdW5yZWFjaGFibGVfYmxvY2tzIChpbnQg Ym9vbF92YWx1ZSk7CiAgICAgdm9pZCBzZXRfYm9vbF91c2VfZXh0ZXJuYWxfZHJpdmVyIChpbnQg Ym9vbF92YWx1ZSk7Ci0KKyAgICB2b2lkIHNldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzIChp bnQgYm9vbF92YWx1ZSk7CisgICAgCiAgICAgdm9pZCBhZGRfY29tbWFuZF9saW5lX29wdGlvbiAo Y29uc3QgY2hhciAqb3B0bmFtZSk7CiAgICAgdm9pZCBhZGRfZHJpdmVyX29wdGlvbiAoY29uc3Qg Y2hhciAqb3B0bmFtZSk7CiAKQEAgLTE5MSw2ICsxOTIsOCBAQCBuYW1lc3BhY2UgZ2Njaml0CiAg ICAgcnZhbHVlIG9uZSAodHlwZSBudW1lcmljX3R5cGUpIGNvbnN0OwogICAgIHJ2YWx1ZSBuZXdf cnZhbHVlICh0eXBlIG51bWVyaWNfdHlwZSwKIAkJICAgICAgIGRvdWJsZSB2YWx1ZSkgY29uc3Q7 CisgICAgcnZhbHVlIG5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAorCQkgICAgICAgX0Nv bXBsZXggZG91YmxlIHZhbHVlKSBjb25zdDsKICAgICBydmFsdWUgbmV3X3J2YWx1ZSAodHlwZSBw b2ludGVyX3R5cGUsCiAJCSAgICAgICB2b2lkICp2YWx1ZSkgY29uc3Q7CiAgICAgcnZhbHVlIG5l d19ydmFsdWUgKGNvbnN0IHN0ZDo6c3RyaW5nICZ2YWx1ZSkgY29uc3Q7CkBAIC03MzIsNiArNzM1 LDEzIEBAIGNvbnRleHQ6OnNldF9ib29sX3VzZV9leHRlcm5hbF9kcml2ZXIgKGludCBib29sX3Zh bHVlKQogCQkJCQkJYm9vbF92YWx1ZSk7CiB9CiAKK2lubGluZSB2b2lkCitjb250ZXh0OjpzZXRf Ym9vbF9lbmFibGVfY29tcGxleF90eXBlcyAoaW50IGJvb2xfdmFsdWUpCit7CisgIGdjY19qaXRf Y29udGV4dF9zZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlcyAobV9pbm5lcl9jdHh0LAorCQkJ CQkJIGJvb2xfdmFsdWUpOworfQorCiBpbmxpbmUgdm9pZAogY29udGV4dDo6YWRkX2NvbW1hbmRf bGluZV9vcHRpb24gKGNvbnN0IGNoYXIgKm9wdG5hbWUpCiB7CkBAIC05NTAsNiArOTYwLDE3IEBA IGNvbnRleHQ6Om5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAogCQkJCQkgICAgdmFsdWUp KTsKIH0KIAoraW5saW5lIHJ2YWx1ZQorY29udGV4dDo6bmV3X3J2YWx1ZSAodHlwZSBudW1lcmlj X3R5cGUsCisJCSAgICAgX0NvbXBsZXggZG91YmxlIHZhbHVlKSBjb25zdAoreworICByZXR1cm4g cnZhbHVlICgKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91 YmxlICgKKyAgICAgIG1faW5uZXJfY3R4dCwKKyAgICAgIG51bWVyaWNfdHlwZS5nZXRfaW5uZXJf dHlwZSAoKSwKKyAgICAgIHZhbHVlKSk7Cit9CisKIGlubGluZSBydmFsdWUKIGNvbnRleHQ6Om5l d19ydmFsdWUgKHR5cGUgcG9pbnRlcl90eXBlLAogCQkgICAgIHZvaWQgKnZhbHVlKSBjb25zdApk aWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQuYyBiL2djYy9qaXQvbGliZ2Njaml0LmMKaW5k ZXggN2ZhOTQ4MDA3YWQuLjA4NTliMzhmNjA5IDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2pp dC5jCisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmMKQEAgLTQ0OCw5ICs0NDgsMTcgQEAgZ2NjX2pp dF9jb250ZXh0X2dldF90eXBlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAgIEpJVF9MT0dfRlVO QyAoY3R4dC0+Z2V0X2xvZ2dlciAoKSk7CiAgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAo CiAgICAgKHR5cGUgPj0gR0NDX0pJVF9UWVBFX1ZPSUQKLSAgICAgJiYgdHlwZSA8PSBHQ0NfSklU X1RZUEVfRklMRV9QVFIpLAorICAgICAmJiB0eXBlIDw9IEdDQ19KSVRfVFlQRV9DT01QTEVYX0xP TkdfRE9VQkxFKSwKICAgICBjdHh0LCBOVUxMLAogICAgICJ1bnJlY29nbml6ZWQgdmFsdWUgZm9y IGVudW0gZ2NjX2ppdF90eXBlczogJWkiLCB0eXBlKTsKKyAgaWYgKHR5cGUgPj0gR0NDX0pJVF9U WVBFX0NPTVBMRVhfRkxPQVQKKyAgICAgICYmIHR5cGUgPD0gR0NDX0pJVF9UWVBFX0NPTVBMRVhf TE9OR19ET1VCTEUpCisgICAgUkVUVVJOX05VTExfSUZfRkFJTCAoCisgICAgICBjdHh0LT5nZXRf aW5uZXJfYm9vbF9vcHRpb24oCisgICAgICAgIGdjYzo6aml0OjpJTk5FUl9CT09MX09QVElPTl9F TkFCTEVfQ09NUExFWF9UWVBFUyksCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgImNvbXBsZXgg dHlwZSBhcmUgb25seSBhdmFpbGFibGUgYWZ0ZXIgZW5hYmxpbmcgdGhlbSB3aXRoIgorICAgICAg IiBnY2Nfaml0X2NvbnRleHRfc2V0X2Jvb2xfZW5hYmxlX2NvbXBsZXhfdHlwZXMoKSIpOwogCiAg IHJldHVybiAoZ2NjX2ppdF90eXBlICopY3R4dC0+Z2V0X3R5cGUgKHR5cGUpOwogfQpAQCAtMTMy MCw2ICsxMzI4LDI2IEBAIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlIChn Y2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJICAtPm5ld19ydmFsdWVfZnJvbV9jb25zdCA8ZG91Ymxl PiAobnVtZXJpY190eXBlLCB2YWx1ZSkpOwogfQogCitnY2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0 X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsCisgICAgICAgICAgICAgICAgICAgIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLAor ICAgICAgICAgICAgICAgICAgICBkb3VibGUgX0NvbXBsZXggdmFsdWUpCit7CisgIFJFVFVSTl9O VUxMX0lGX0ZBSUwgKGN0eHQsIE5VTEwsIE5VTEwsICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xP R19GVU5DIChjdHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9OT05O VUxMX05VTUVSSUNfVFlQRSAoY3R4dCwgbnVtZXJpY190eXBlKTsKKworICBSRVRVUk5fTlVMTF9J Rl9GQUlMX1BSSU5URjEgKAorICAgIG51bWVyaWNfdHlwZS0+aXNfZmxvYXQgKCksCisgICAgY3R4 dCwgTlVMTCwKKyAgICAibm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSAodHlwZTogJXMpIiwKKyAg ICBudW1lcmljX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIHJldHVybiAoKGdjY19q aXRfcnZhbHVlICopY3R4dAorICAgICAgLT5uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZSBf Q29tcGxleD4gKG51bWVyaWNfdHlwZSwgdmFsdWUpKTsKK30KKworCiAvKiBQdWJsaWMgZW50cnlw b2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KIAogICAgQWZ0ZXIgZXJyb3It Y2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKQEAgLTE0MTUsNiArMTQ0Mywx NCBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X3VuYXJ5X29wIChnY2Nfaml0X2NvbnRleHQgKmN0eHQs CiAgICAgcmVzdWx0X3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOwogICBSRVRVUk5fTlVMTF9J Rl9GQUlMIChydmFsdWUsIGN0eHQsIGxvYywgIk5VTEwgcnZhbHVlIik7CiAKKyAgaWYgKHJ2YWx1 ZS0+Z2V0X3R5cGUgKCktPmlzX2NvbXBsZXggKCkpCisgICAgUkVUVVJOX05VTExfSUZfRkFJTF9Q UklOVEYyICgKKyAgICAgIG9wID09IEdDQ19KSVRfVU5BUllfT1BfTUlOVVMsCisgICAgICBjdHh0 LCBsb2MsCisgICAgICAib25seSB1bmFyeSBtaW51cyBkZWZpbmVkIGZvciBjb21wbGV4IHR5cGVz OiAlcyAodHlwZTogJXMpIiwKKyAgICAgIHJ2YWx1ZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKyAg ICAgIHJ2YWx1ZS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCiAgIHJldHVy biAoZ2NjX2ppdF9ydmFsdWUgKiljdHh0LT5uZXdfdW5hcnlfb3AgKGxvYywgb3AsIHJlc3VsdF90 eXBlLCBydmFsdWUpOwogfQogCkBAIC0xNDI2LDcgKzE0NjIsNyBAQCBzdGF0aWMgYm9vbAogdmFs aWRfYmluYXJ5X29wX3AgKGVudW0gZ2NjX2ppdF9iaW5hcnlfb3Agb3ApCiB7CiAgIHJldHVybiAo b3AgPj0gR0NDX0pJVF9CSU5BUllfT1BfUExVUwotCSAgJiYgb3AgPD0gR0NDX0pJVF9CSU5BUllf T1BfUlNISUZUKTsKKwkgICYmIG9wIDw9IEdDQ19KSVRfQklOQVJZX09QX0NPTVBMRVgpOwogfQog CiAvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4K QEAgLTE0NzAsNiArMTUwNiwzOCBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAoZ2Nj X2ppdF9jb250ZXh0ICpjdHh0LAogICAgIGEtPmdldF9kZWJ1Z19zdHJpbmcgKCksIGItPmdldF9k ZWJ1Z19zdHJpbmcgKCksCiAgICAgcmVzdWx0X3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOwog CisgIGlmIChvcCA9PSBHQ0NfSklUX0JJTkFSWV9PUF9DT01QTEVYKQorICAgIHsKKyAgICAgIFJF VFVSTl9OVUxMX0lGX0ZBSUwgKAorICAgICAgIHJlc3VsdF90eXBlLT5pc19jb21wbGV4ICgpLAor ICAgICAgIGN0eHQsIGxvYywKKyAgICAgICAicmV0dXJuIHR5cGUgaXMgbm90IGNvbXBsZXgiKTsK KyAgICAgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMyAoCisJIWEtPmdldF90eXBlICgpLT5p c19jb21wbGV4ICgpICYmCisJYS0+Z2V0X3R5cGUgKCktPmlzX2Zsb2F0ICgpLAorCWN0eHQsIGxv YywKKwkiZmlyc3Qgb3BlcmFuZCBvZiAlcyBpcyBub3QgcmVhbDogJXMgKHR5cGU6ICVzKSIsCisJ Z2NjOjpqaXQ6OmJpbmFyeV9vcF9yZXByb2R1Y2VyX3N0cmluZ3Nbb3BdLAorCWEtPmdldF9kZWJ1 Z19zdHJpbmcgKCksCisJYS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICAg ICAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYzICgKKwkhYi0+Z2V0X3R5cGUgKCktPmlzX2Nv bXBsZXggKCkgJiYKKwliLT5nZXRfdHlwZSAoKS0+aXNfZmxvYXQgKCksCisJY3R4dCwgbG9jLAor CSIybmQgb3BlcmFuZCBvZiAlcyBpcyBub3QgcmVhbDogJXMgKHR5cGU6ICVzKSIsCisJZ2NjOjpq aXQ6OmJpbmFyeV9vcF9yZXByb2R1Y2VyX3N0cmluZ3Nbb3BdLAorCWItPmdldF9kZWJ1Z19zdHJp bmcgKCksCisJYi0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICAgICAgUkVU VVJOX05VTExfSUZfRkFJTF9QUklOVEYyICgKKyAgICAgICAgYS0+Z2V0X3R5cGUgKCktPiBmbG9h dF9zaXplX3F1YWwgKCkgPT0KKyAgICAgICAgcmVzdWx0X3R5cGUtPmZsb2F0X3NpemVfcXVhbCAo KSwKKwljdHh0LCBsb2MsCisJInNpemUgcXVhbGlmaWVycyBvZiBjb21wbGV4IG9wZXJhbmQncyBu b3QgdGhlIHNhbWUgYXMgdGhlIHJlc3VsdDoiCisJIiBvcGVyYW5kczogJXMsIHJlc3VsdDogICVz IiwKKwlhLT5nZXRfdHlwZSAoKS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwlyZXN1bHRfdHlwZS0+ Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisgICAgfQorCiAgIHJldHVybiAoZ2NjX2ppdF9ydmFsdWUg KiljdHh0LT5uZXdfYmluYXJ5X29wIChsb2MsIG9wLCByZXN1bHRfdHlwZSwgYSwgYik7CiB9CiAK QEAgLTE1MDYsNiArMTU3NCwxNCBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbXBhcmlzb24gKGdj Y19qaXRfY29udGV4dCAqY3R4dCwKICAgICBiLT5nZXRfZGVidWdfc3RyaW5nICgpLAogICAgIGIt PmdldF90eXBlICgpLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKIAorICBpZiAoYS0+Z2V0X3R5cGUg KCktPmlzX2NvbXBsZXgoKSkKKyAgICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKAorICAg ICAob3AgPT0gR0NDX0pJVF9DT01QQVJJU09OX0VRCisgICAgICB8fCBvcCA9PSBHQ0NfSklUX0NP TVBBUklTT05fTkUpLAorICAgICBjdHh0LCBsb2MsCisgICAgICJpbnZhbGlkIGVudW0gZ2NjX2pp dF9jb21wYXJpc29uIGZvciBjb21wbGV4IG9wZXJhbmRzOiAlaSIsCisgICAgIG9wKTsKKwogICBy ZXR1cm4gKGdjY19qaXRfcnZhbHVlICopY3R4dC0+bmV3X2NvbXBhcmlzb24gKGxvYywgb3AsIGEs IGIpOwogfQogCkBAIC0yNzM1LDYgKzI4MTEsMjMgQEAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29s X2FsbG93X3VucmVhY2hhYmxlX2Jsb2NrcyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogICAgIGJv b2xfdmFsdWUpOwogfQogCisvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBp biBsaWJnY2NqaXQuaC4KKworICAgQWZ0ZXIgZXJyb3ItY2hlY2tpbmcsIHRoZSByZWFsIHdvcmsg aXMgZG9uZSBieSB0aGUKKyAgIGdjYzo6aml0OjpyZWNvcmRpbmc6OmNvbnRleHQ6OnNldF9pbm5l cl9ib29sX29wdGlvbiBtZXRob2QgaW4KKyAgIGppdC1yZWNvcmRpbmcuYy4gKi8KKwordm9pZAor Z2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsCisJCQkJCQkgICBpbnQgYm9vbF92YWx1ZSkKK3sKKyAgUkVUVVJOX0lGX0ZB SUwgKGN0eHQsIE5VTEwsIE5VTEwsICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChj dHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAgY3R4dC0+c2V0X2lubmVyX2Jvb2xfb3B0aW9uICgKKyAg ICBnY2M6OmppdDo6SU5ORVJfQk9PTF9PUFRJT05fRU5BQkxFX0NPTVBMRVhfVFlQRVMsCisgICAg Ym9vbF92YWx1ZSk7Cit9CisKIC8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0aW9u IGluIGxpYmdjY2ppdC5oLgogCiAgICBBZnRlciBlcnJvci1jaGVja2luZywgdGhlIHJlYWwgd29y ayBpcyBkb25lIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQuaCBiL2djYy9q aXQvbGliZ2Njaml0LmgKaW5kZXggNWM3MjJjMmM1N2YuLmYzZDJjNDBkOGJlIDEwMDY0NAotLS0g YS9nY2Mvaml0L2xpYmdjY2ppdC5oCisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmgKQEAgLTg0OCw2 ICs4NDgsMTcgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9kb3VibGUgKGdjY19q aXRfY29udGV4dCAqY3R4dCwKIAkJCQkJZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsCiAJCQkJ CWRvdWJsZSB2YWx1ZSk7CiAKKy8qIENvbXBsZXggZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgor CisgICBUaGlzIEFQSSBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzE2OyB5 b3UgY2FuIHRlc3QgZm9yIGl0cworICAgcHJlc2VuY2UgdXNpbmcKKyAgICAgI2lmZGVmIExJQkdD Q0pJVF9IQVZFX0NPTVBMRVgKKyovCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpj dHh0LAorCQkJCQlnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKKwkJCQkJZG91YmxlIF9Db21w bGV4IHZhbHVlKTsKKwogLyogUG9pbnRlcnMuICAqLwogZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoK IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fcHRyIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsCkBAIC05NTksNyArOTcwLDI2IEBAIGVudW0gZ2NjX2ppdF9iaW5hcnlfb3AKICAgLyogUmln aHQgc2hpZnQ7IGFuYWxvZ291cyB0bzoKICAgICAgICAoRVhQUl9BKSA+PiAoRVhQUl9CKQogICAg ICBpbiBDLiAgKi8KLSAgR0NDX0pJVF9CSU5BUllfT1BfUlNISUZUCisgIEdDQ19KSVRfQklOQVJZ X09QX1JTSElGVCwKKworICAvKiBDcmVhdGUgYSBjb21wbGV4IGZsb2F0aW5nIHBvaW50IHZhbHVl IGZyb20KKyAgICAgdHdvIHJlYWwgZmxvYXRpbmcgcG9pbnQgdmFsdWVzLiBUaGUgb3BlcmFuZHMK KyAgICAgYW5kIHRoZSByZXN1bHQgbmVlZCB0byBoYXZlIHRoZSBzYW1lIHNpemUKKyAgICAgcXVh bGlmaWVyLgorCisgICAgIEFuYWxvZ291cyB0bzoKKyAgICAgICBDTVBMWCAocmVhbCxpbWFnKQor ICAgICBpbiBDLgorCisgICAgIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHRoZSByZWFsIHBhcnQsIHRo ZSBvdGhlcgorICAgICB0aGUgaW1hZ2luYXJ5LiBOZWdhdGl2ZSB6ZXJvZXMgYXJlIHByZXNlcnZl ZAorICAgICBhbmQgSW5mOnMgZG8gbm90IGxlYWQgdG8gTmFOcy4KKworICAgICBUaGlzIG9wZXJh dG9yICB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8xNjsKKyAgICAgeW91IGNhbiB0ZXN0IGZv ciBpdHMgcHJlc2VuY2UgdXNpbmcKKyAgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09NUExF WAorICAqLworICBHQ0NfSklUX0JJTkFSWV9PUF9DT01QTEVYCiB9OwogCiBleHRlcm4gZ2NjX2pp dF9ydmFsdWUgKgpAQCAtMTQzNCw2ICsxNDY0LDE5IEBAIGdjY19qaXRfdGltZXJfcHJpbnQgKGdj Y19qaXRfdGltZXIgKnRpbWVyLAogCQkgICAgIEZJTEUgKmZfb3V0KTsKIAogCisjZGVmaW5lIExJ QkdDQ0pJVF9IQVZFX0NPTVBMRVgKKworLyogRW5hYmxlcyBjb21wbGV4IHR5cGUgc3VwcG9ydCBp biBsaWJnY2NqaXQuCisKKyAgIFRoaXMgQVBJIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIExJQkdD Q0pJVF9BQklfMTY7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2luZworICAg ICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09NUExFWAorKi8KKworZXh0ZXJuIHZvaWQKK2djY19q aXRfY29udGV4dF9zZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlcyAoZ2NjX2ppdF9jb250ZXh0 ICpjdHh0LAorCQkJCQkgICAgICAgaW50IGJvb2xfdmFsdWUpOworCiAjZGVmaW5lIExJQkdDQ0pJ VF9IQVZFX2djY19qaXRfcnZhbHVlX3NldF9ib29sX3JlcXVpcmVfdGFpbF9jYWxsCiAKIC8qIE1h cmsvY2xlYXIgYSBjYWxsIGFzIG5lZWRpbmcgdGFpbC1jYWxsIG9wdGltaXphdGlvbi4KZGlmZiAt LWdpdCBhL2djYy9qaXQvbGliZ2Njaml0Lm1hcCBiL2djYy9qaXQvbGliZ2Njaml0Lm1hcAppbmRl eCAzMzdlYTZjN2ZlNC4uYzliMDQ0ZGM4ZjUgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0 Lm1hcAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKQEAgLTIwNSwzICsyMDUsOSBAQCBMSUJH Q0NKSVRfQUJJXzE1IHsKICAgICBnY2Nfaml0X2V4dGVuZGVkX2FzbV9hZGRfY2xvYmJlcjsKICAg ICBnY2Nfaml0X2NvbnRleHRfYWRkX3RvcF9sZXZlbF9hc207CiB9IExJQkdDQ0pJVF9BQklfMTQ7 CisKK0xJQkdDQ0pJVF9BQklfMTYgeworICBnbG9iYWw6CisgICAgZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZTsKKyAgICBnY2Nfaml0X2NvbnRleHRfc2V0X2Jv b2xfZW5hYmxlX2NvbXBsZXhfdHlwZXM7Cit9IExJQkdDQ0pJVF9BQklfMTU7ClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5v bi1mYWlsaW5nLXRlc3RzLmggYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmct dGVzdHMuaAppbmRleCA4NGVmNTRhMDM4Ni4uN2I0NWFjZDRiOWMgMTAwNjQ0Ci0tLSBhL2djYy90 ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCisrKyBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCkBAIC0xMDUsNiArMTA1LDM2IEBACiAj dW5kZWYgY3JlYXRlX2NvZGUKICN1bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0LWNvbXBsZXgt YnVpbHRpbnMuYyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9jb21wbGV4X2J1 aWx0aW5zCisjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2NvbXBsZXhfYnVpbHRpbnMK KyNpbmNsdWRlICJ0ZXN0LWNvbXBsZXgtYnVpbHRpbnMuYyIKKyN1bmRlZiBjcmVhdGVfY29kZQor I3VuZGVmIHZlcmlmeV9jb2RlCisKKy8qIHRlc3QtY29tcGxleC1saXRlcmFscy5jICovCisjZGVm aW5lIGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX2NvbXBsZXhfbGl0ZXJhbHMKKyNkZWZpbmUgdmVy aWZ5X2NvZGUgdmVyaWZ5X2NvZGVfY29tcGxleF9saXRlcmFscworI2luY2x1ZGUgInRlc3QtY29t cGxleC1saXRlcmFscy5jIgorI3VuZGVmIGNyZWF0ZV9jb2RlCisjdW5kZWYgdmVyaWZ5X2NvZGUK KworLyogdGVzdC1jb21wbGV4LW1pc2MuYyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVf Y29kZV9jb21wbGV4X21pc2MKKyNkZWZpbmUgdmVyaWZ5X2NvZGUgdmVyaWZ5X2NvZGVfY29tcGxl eF9taXNjCisjaW5jbHVkZSAidGVzdC1jb21wbGV4LW1pc2MuYyIKKyN1bmRlZiBjcmVhdGVfY29k ZQorI3VuZGVmIHZlcmlmeV9jb2RlCisKKy8qIHRlc3QtY29tcGxleC1vcGVyYXRvcnMuYyAqLwor I2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9jb21wbGV4X29wZXJhdG9ycworI2RlZmlu ZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9jb21wbGV4X29wZXJhdG9ycworI2luY2x1ZGUgInRl c3QtY29tcGxleC1vcGVyYXRvcnMuYyIKKyN1bmRlZiBjcmVhdGVfY29kZQorI3VuZGVmIHZlcmlm eV9jb2RlCisKKy8qIHRlc3QtY29tcGxleC10eXBlcy5jOiBRdWl0ZSBsb25nLCBkb24ndCBpbmNs dWRlIGhlcmUgKi8KKwogLyogdGVzdC1jb21wb3VuZC1hc3NpZ25tZW50LmMgKi8KICNkZWZpbmUg Y3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfY29tcG91bmRfYXNzaWdubWVudAogI2RlZmluZSB2ZXJp ZnlfY29kZSB2ZXJpZnlfY29kZV9jb21wb3VuZF9hc3NpZ25tZW50CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtYnVpbHRpbnMuYyBiL2djYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtY29tcGxleC1idWlsdGlucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5mY2UyYzliMmQwOQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL3Rlc3QtY29tcGxleC1idWlsdGlucy5jCkBAIC0wLDAgKzEsMjE3IEBACisvKgor ICBUaGlzIHRlc3QganVzdCBjaGVja3MgdGhhdCB0aGUgYnVpbHRpbnMgY2ltYWcsIGNyZWFsIGFu ZAorICBjb25qIGFyZSB1c2FibGUuCisKKyAgQWxzbywgdGhleSBzaG91bGQgYmUgaW5saW5lZCwg d2hpY2ggY2FuIGJlIGNoZWNrZWQgYnkKKyAgZGlzYXNzZW1ibGluZyB0aGUgb2JqZWN0IGZpbGUg bWFudWFsbHkuCisqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGNvbXBsZXguaD4K KworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCitzdGF0 aWMgdm9pZAorbWFrZV9jb2RlX3Vub3BfYnVpbHRpbnMgKGdjY19qaXRfY29udGV4dCAqY3R4dCwK KwkJIGNvbnN0IGNoYXIgKmZuX25hbWUsCisJCSBpbnQgdHlwZV9yZXR1cm4sCisJCSBpbnQgdHlw ZV9hcmcsCisJCSBnY2Nfaml0X2Z1bmN0aW9uICpmbikKK3sgCisgIGdjY19qaXRfYmxvY2sgKmJs b2NrOworCisgIGdjY19qaXRfdHlwZSAqdHIgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0 eHQsIHR5cGVfcmV0dXJuKTsKKyAgZ2NjX2ppdF90eXBlICp0YSA9IGdjY19qaXRfY29udGV4dF9n ZXRfdHlwZSAoY3R4dCwgdHlwZV9hcmcpOworICAKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0xID0g Z2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwgMCwgdGEsICJmMSIpOworCisgIGdjY19q aXRfcGFyYW0gKnBhcmFtc1tdID0ge3BhcmFtMX07CisgIAorICBnY2Nfaml0X2Z1bmN0aW9uICpm b28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAwLAorICAgIEdDQ19KSVRf RlVOQ1RJT05fRVhQT1JURUQsCisgICAgdHIsIGZuX25hbWUsIDEsIHBhcmFtcywgMCk7CisgIAor ICBibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIpOworCisg IGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlICgKKyAgICBnY2Nf aml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm9vLCAwKSk7CisKKyAgZ2NjX2ppdF9ydmFsdWUgKmFy Z3NbXSA9IHsKKyAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGYxKQorICB9OworICAKKyAg LyogcmV0dXJuIGZuKGYxKTsgKi8KKyAgZ2NjX2ppdF9ydmFsdWUgKnIgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2NhbGwKKyAgICAoY3R4dCwgMCwgZm4sCisgICAgIDEsCisgICAgIGFyZ3MpOworICAK KyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLCAwLCByKTsKK30KKworc3Rh dGljIHZvaWQKK21ha2VfY29kZV9iaW5vcF9idWlsdGlucyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0 LAorCQkgY29uc3QgY2hhciAqZm5fbmFtZSwKKwkJIGludCB0eXBlMSwKKwkJIGludCB0eXBlMiwK KwkJIGdjY19qaXRfZnVuY3Rpb24gKmJ1aWx0aW4pCit7CisgIGdjY19qaXRfYmxvY2sgKmJsb2Nr OworICAKKyAgZ2NjX2ppdF90eXBlICp0MSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4 dCwgdHlwZTEpOworICBnY2Nfaml0X3R5cGUgKnQyID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBl IChjdHh0LCB0eXBlMik7CisgIAorICBnY2Nfaml0X3BhcmFtICpwYXJhbTEgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3BhcmFtIChjdHh0LCAwLCB0MSwgImYxIik7CisgIGdjY19qaXRfcGFyYW0gKnBh cmFtMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIDAsIHQyLCAiZjIiKTsKKwor ICBnY2Nfaml0X3BhcmFtICpwYXJhbXNbXSA9IHtwYXJhbTEsIHBhcmFtMn07CisgIAorICBnY2Nf aml0X2Z1bmN0aW9uICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAw LAorICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisgICAgdDEsIGZuX25hbWUsIDIsIHBh cmFtcywgMCk7CisgIAorICBibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28s ICJzdGFydCIpOworCisgIGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfcGFyYW1fYXNfbHZh bHVlICgKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbShmb28sIDApKTsKKyAgZ2NjX2pp dF9sdmFsdWUgKmYyID0gZ2NjX2ppdF9wYXJhbV9hc19sdmFsdWUgKAorICAgIGdjY19qaXRfZnVu Y3Rpb25fZ2V0X3BhcmFtKGZvbywgMSkpOworCisgIGdjY19qaXRfcnZhbHVlICphcmdzW10gPSB7 CisgICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChmMSksCisgICAgZ2NjX2ppdF9sdmFsdWVf YXNfcnZhbHVlIChmMikKKyAgfTsKKyAgCisgIC8qIHJldHVybiBidWlsdGluKGYxLGYyKTsgKi8K KyAgZ2NjX2ppdF9ydmFsdWUgKnIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwKKyAgICAoY3R4 dCwgMCwgYnVpbHRpbiwKKyAgICAgMiwKKyAgICAgYXJncyk7CisgIAorICBnY2Nfaml0X2Jsb2Nr X2VuZF93aXRoX3JldHVybiAoYmxvY2ssIDAsIHIpOworfQorCit2b2lkCitjcmVhdGVfY29kZSAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICh2b2lkKSB1c2Vy X2RhdGE7CisKKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVz IChjdHh0LCAxKTsKKyAgCisgIGdjY19qaXRfZnVuY3Rpb24gKmZuX2Nwb3cgPSBnY2Nfaml0X2Nv bnRleHRfZ2V0X2J1aWx0aW5fZnVuY3Rpb24KKyAgICAoY3R4dCwgIl9fYnVpbHRpbl9jcG93Iik7 CisKKyAgbWFrZV9jb2RlX2Jpbm9wX2J1aWx0aW5zIChjdHh0LCAiY3Bvd19idWlsdGluIiwKKwkJ ICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxFLAorCQkgICBHQ0NfSklUX1RZUEVfQ09NUExF WF9ET1VCTEUsCisJCSAgIGZuX2Nwb3cpOworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZuX2Nvbmog PSBnY2Nfaml0X2NvbnRleHRfZ2V0X2J1aWx0aW5fZnVuY3Rpb24KKyAgICAoY3R4dCwgIl9fYnVp bHRpbl9jb25qIik7CisgIAorICAvKiBJbiBhIGdvb2Qgd29ybGQgY29uaiBzaG91bGQgYmUgaW5s aW5lZCAqLworICBtYWtlX2NvZGVfdW5vcF9idWlsdGlucyAoY3R4dCwgImNvbmpfaW5saW5lZCIs CisJCSAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxFLAorCQkgIEdDQ19KSVRfVFlQRV9DT01Q TEVYX0RPVUJMRSwKKwkJICBmbl9jb25qKTsKKworICBnY2Nfaml0X2Z1bmN0aW9uICpmbl9jcmVh bCA9IGdjY19qaXRfY29udGV4dF9nZXRfYnVpbHRpbl9mdW5jdGlvbgorICAgIChjdHh0LCAiX19i dWlsdGluX2NyZWFsIik7CisgIGdjY19qaXRfZnVuY3Rpb24gKmZuX2NyZWFsZiA9IGdjY19qaXRf Y29udGV4dF9nZXRfYnVpbHRpbl9mdW5jdGlvbgorICAgIChjdHh0LCAiX19idWlsdGluX2NyZWFs ZiIpOworICBnY2Nfaml0X2Z1bmN0aW9uICpmbl9jcmVhbGwgPSBnY2Nfaml0X2NvbnRleHRfZ2V0 X2J1aWx0aW5fZnVuY3Rpb24KKyAgICAoY3R4dCwgIl9fYnVpbHRpbl9jcmVhbGwiKTsKKyAgZ2Nj X2ppdF9mdW5jdGlvbiAqZm5fY2ltYWcgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X2J1aWx0aW5fZnVu Y3Rpb24KKyAgICAoY3R4dCwgIl9fYnVpbHRpbl9jaW1hZyIpOworCisgIC8qIFRoZXNlIHNob3Vs ZCBiZSBpbmxpbmVkIHRvbyAqLworICBtYWtlX2NvZGVfdW5vcF9idWlsdGlucyAoY3R4dCwgImNy ZWFsX2lubGluZWQiLAorCQkgIEdDQ19KSVRfVFlQRV9ET1VCTEUsCisJCSAgR0NDX0pJVF9UWVBF X0NPTVBMRVhfRE9VQkxFLAorCQkgIGZuX2NyZWFsKTsKKyAgbWFrZV9jb2RlX3Vub3BfYnVpbHRp bnMgKGN0eHQsICJjaW1hZ19pbmxpbmVkIiwKKwkJICBHQ0NfSklUX1RZUEVfRE9VQkxFLAorCQkg IEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkJICBmbl9jaW1hZyk7CisKKyAgbWFrZV9j b2RlX3Vub3BfYnVpbHRpbnMgKGN0eHQsICJjcmVhbGZfaW5saW5lZCIsCisJCSAgR0NDX0pJVF9U WVBFX0ZMT0FULAorCQkgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgIGZuX2NyZWFs Zik7CisgIG1ha2VfY29kZV91bm9wX2J1aWx0aW5zIChjdHh0LCAiY3JlYWxsX2lubGluZWQiLAor CQkgIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRSwKKwkJICBHQ0NfSklUX1RZUEVfQ09NUExFWF9M T05HX0RPVUJMRSwKKwkJICBmbl9jcmVhbGwpOworICAKKyAgLyogVXNlIHRvIGluc3BlY3QgY29k ZSBtYW51YWxseSBhbmQgYXNzdXJlIGNvbmosIGNyZWFsLCBjaW1hZworICAgICBhcmUgaW5saW5l ZC4gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZyB0aGV5IGFyZSBvbiBteSB4NjQgbWFjaGluZSAqLwor ICAjaWYgMAorICBnY2Nfaml0X2NvbnRleHRfY29tcGlsZV90b19maWxlIChjdHh0LCBHQ0NfSklU X09VVFBVVF9LSU5EX09CSkVDVF9GSUxFLAorCQkJCSAgICJ0ZXN0LWNvbXBsZXgtYnVpbHRpbnMu byIpOworICAjZW5kaWYKK30KKwordHlwZWRlZiBfQ29tcGxleCBkb3VibGUgKCpjZF9jZGNkKShf Q29tcGxleCBkb3VibGUsIF9Db21wbGV4IGRvdWJsZSk7Cit0eXBlZGVmIF9Db21wbGV4IGRvdWJs ZSAoKmNkX2NkKShfQ29tcGxleCBkb3VibGUpOwordHlwZWRlZiBkb3VibGUgKCpkX2NkKShfQ29t cGxleCBkb3VibGUpOwordHlwZWRlZiBmbG9hdCAoKmZfY2YpKF9Db21wbGV4IGZsb2F0KTsKK3R5 cGVkZWYgbG9uZyBkb3VibGUgKCpsZF9jbGQpKF9Db21wbGV4IGxvbmcgZG91YmxlKTsKKworLyog V2UgbmVlZCB0aGlzIHRvIGZvb2wgR0NDIGludG8gbm90IHByZWNvbXB1dGluZyB0aGUgYnVpbHQt aW4gLi4uCisgICBwcmVjb21wdXRpbmcgc2VlbXMgbGlrZSBhIGZldXR1cmUgbGliZ2Njaml0IG1p c3Nlcy4gKi8KK3ZvbGF0aWxlIF9Db21wbGV4IGRvdWJsZSBoYWxmID0gMC41OworCit2b2lkCit2 ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0 KQoreworICBDSEVDS19OT05fTlVMTCAocmVzdWx0KTsKKworICB7LyogVGVzdCBiaW5hcnkgYnVp bHRpbnMgKi8KKyAgICB7CisgICAgICAgY2RfY2RjZCBmbiA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0 X2NvZGUgKHJlc3VsdCwgImNwb3dfYnVpbHRpbiIpOworICAgICAgIENIRUNLX05PTl9OVUxMIChm bik7CisgICAgICAgCisgICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgyLCAyKSwgNC4pOworICAgICAg IF9Db21wbGV4IGRvdWJsZSBhbnMgPSBmbiAoLTEuLCAwLjUpOworICAgICAgIF9Db21wbGV4IGRv dWJsZSBrZXkgPSBfX2J1aWx0aW5fY3BvdyAoLTEuLCBoYWxmKTsKKworICAgICAgIC8qIFRoaXMg dGVzdCBmYWlscyBpZiBsaWJnY2NqaXQgY2FuIHByZWNvbXB1dGUgYnVpbHRpbnMgKi8KKyAgICAg ICBDSEVDS19WQUxVRSAoYW5zLCBrZXkpOyAvKiBBbG1vc3QgMS5qICovCisgICAgfQorICB9Cisg IHsvKiBUZXN0IHVuYXJ5IGJ1aWx0aW5zICovCisgICAgeyAvKiBjb25qICovCisgICAgICBjZF9j ZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb25qX2lubGluZWQiKTsK KyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAKKyAgICAgIENIRUNLX1ZBTFVFKCBm biAoMS4gLSAxLmopLCAxLiArIDEuaik7CisgICAgfQorICAgIHsgLyogY3JlYWwgKi8KKyAgICAg IGRfY2QgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY3JlYWxfaW5saW5l ZCIpOworICAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKyAgICAgIAorICAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLiAtIDEuaiksIDEuKTsKKyAgICB9CisgICAgeyAvKiBjaW1hZyAqLworICAgICAg ZF9jZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjaW1hZ19pbmxpbmVk Iik7CisgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworICAgICAgCisgICAgICBDSEVDS19WQUxV RSAoZm4gKDEuIC0gMS5qKSwgLTEuKTsKKyAgICB9CisgICAgeyAvKiBjcmVhbGYgKi8KKyAgICAg IGZfY2YgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY3JlYWxmX2lubGlu ZWQiKTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAKKyAgICAgIENIRUNLX1ZB TFVFIChmbiAoMS5mIC0gMS5maiksIDEuZik7CisgICAgfQorICAgIHsgLyogY3JlYWxsICovCisg ICAgICBsZF9jbGQgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY3JlYWxs X2lubGluZWQiKTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAKKyAgICAgIENI RUNLX1ZBTFVFIChmbiAoMS5MIC0gMS5MaiksIDEuTCk7CisgICAgfQorICB9Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtbGl0ZXJhbHMuYyBiL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC1saXRlcmFscy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MjJjZmYxMDQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC1saXRlcmFscy5jCkBAIC0wLDAgKzEsMTQ1 IEBACisvKgorICBUZXN0IHRoZSBuZXcgJ2djY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f Y29tcGxleF9kb3VibGUoKScKKyAgYXN3ZWxsIGFzIHRlc3QgdGhhdCB0aGUgb2xkICdfZnJvbV9p bnQgLi4uIF9mcm9tX2RvdWJsZSIKKyAgY2FuIHByb2R1Y2UgY29tcGxleCB2YWx1ZXMuCisqLwor CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGNvbXBsZXguaD4KKworI2luY2x1ZGUgImxp YmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKworc3RhdGljIHZvaWQKK21ha2VfY29k ZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCSAgIGNvbnN0IGNoYXIgKmZuX25hbWUsCisJICAg aW50IHR5cGUsCisJICAgX0NvbXBsZXggZG91YmxlIGxvY2FsX3ZhbCwKKwkgICBpbnQgbGl0X3R5 cGUpCit7CisgIGdjY19qaXRfdHlwZSAqdHQgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0 eHQsIHR5cGUpOworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZvbyA9IGdjY19qaXRfY29udGV4dF9u ZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKyAg ICB0dCwgZm5fbmFtZSwgMCwgMCwgMCk7CisgIAorICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdj Y19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIpOworCisgIC8qIGxvY2FsX3R5 cGUgZjEgPSBsb2NhbF92YWw7ICovCisgIGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfZnVu Y3Rpb25fbmV3X2xvY2FsIChmb28sIDAsIHR0LCAiZjEiKTsKKworICBnY2Nfaml0X3J2YWx1ZSAq cjE7CisKKyAgaWYgKGxpdF90eXBlID09ICdjJykKKyAgICByMSA9IGdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGUgKGN0eHQsIHR0LCBsb2NhbF92YWwpOworICBl bHNlIGlmIChsaXRfdHlwZSA9PSAnZCcpCisgICAgcjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2RvdWJsZSAoY3R4dCwgdHQsIGNyZWFsKGxvY2FsX3ZhbCkpOworICBlbHNlIGlm IChsaXRfdHlwZSA9PSAnbCcpCisgICAgcjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2xvbmcgKGN0eHQsIHR0LCBjcmVhbChsb2NhbF92YWwpKTsKKyAgZWxzZSBpZiAobGl0X3R5 cGUgPT0gJ2knKQorICAgIHIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQg KGN0eHQsIHR0LCBjcmVhbChsb2NhbF92YWwpKTsKKyAgICAKKyAgZ2NjX2ppdF9ibG9ja19hZGRf YXNzaWdubWVudCAoYmxvY2ssIDAsIGYxLCByMSk7CisgIAorICBnY2Nfaml0X2Jsb2NrX2VuZF93 aXRoX3JldHVybiAoYmxvY2ssIDAsIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShmMSkpOworfQor Cit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2Rh dGEpCit7CisgICh2b2lkKSB1c2VyX2RhdGE7CisKKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29s X2VuYWJsZV9jb21wbGV4X3R5cGVzIChjdHh0LCAxKTsKKworICBtYWtlX2NvZGUgKGN0eHQsICJj b21wbGV4X2Zsb2F0X2NsaXRfMWMxXzJjMmoiLAorCSAgICAgICBHQ0NfSklUX1RZUEVfQ09NUExF WF9GTE9BVCwKKwkgICAgICAgMS4xICsgMi4yaiwgJ2MnKTsKKyAgbWFrZV9jb2RlIChjdHh0LCAi Y29tcGxleF9kb3VibGVfY2xpdF8xYzFfMmMyaiIsCisJICAgICAgIEdDQ19KSVRfVFlQRV9DT01Q TEVYX0RPVUJMRSwKKwkgICAgICAgMS4xICsgMi4yaiwgJ2MnKTsKKyAgbWFrZV9jb2RlIChjdHh0 LCAiY29tcGxleF9sb25nX2RvdWJsZV9jbGl0XzFjMV8yYzJqIiwKKwkgICAgICAgR0NDX0pJVF9U WVBFX0NPTVBMRVhfTE9OR19ET1VCTEUsCisJICAgICAgIDEuMSArIDIuMmosICdjJyk7CisgIG1h a2VfY29kZSAoY3R4dCwgImZsb2F0X2NsaXRfMWMxIiwKKwkgICAgICAgR0NDX0pJVF9UWVBFX0ZM T0FULAorCSAgICAgICAxLjEgKyAyLjJqLCAnYycpOworICBtYWtlX2NvZGUgKGN0eHQsICJkb3Vi bGVfY2xpdF8xYzEiLAorCSAgICAgICBHQ0NfSklUX1RZUEVfRE9VQkxFLAorCSAgICAgICAxLjEg KyAyLjJqLCAnYycpOworICBtYWtlX2NvZGUgKGN0eHQsICJsb25nX2RvdWJsZV9jbGl0XzFjMSIs CisJICAgICAgIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRSwKKwkgICAgICAgMS4xICsgMi4yaiwg J2MnKTsKKworICAvKiBNYWtlIGNvbXBsZXggZnJvbSAiZnJvbV9kb3VibGUiLCAiZnJvbV9sb25n IiwiZnJvbV9pbnQiICovCisgIG1ha2VfY29kZSAoY3R4dCwgImNvbXBsZXhfZmxvYXRfZGxpdF8x YzEiLAorCSAgICAgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVCwKKwkgICAgICAgMS4xLCAn ZCcpOworICBtYWtlX2NvZGUgKGN0eHQsICJjb21wbGV4X2RvdWJsZV9kbGl0XzFjMSIsCisJICAg ICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkgICAgICAgMS4xLCAnZCcpOworICBt YWtlX2NvZGUgKGN0eHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2RsaXRfMWMxIiwKKwkgICAgICAg R0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEUsCisJICAgICAgIDEuMSwgJ2QnKTsKKyAg bWFrZV9jb2RlIChjdHh0LCAiY29tcGxleF9kb3VibGVfbGxpdF8yIiwKKwkgICAgICAgR0NDX0pJ VF9UWVBFX0NPTVBMRVhfRE9VQkxFLAorCSAgICAgICAyLCAnbCcpOworICBtYWtlX2NvZGUgKGN0 eHQsICJjb21wbGV4X2RvdWJsZV9pbGl0XzMiLAorCSAgICAgICBHQ0NfSklUX1RZUEVfQ09NUExF WF9ET1VCTEUsCisJICAgICAgIDMsICdpJyk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nf aml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIENIRUNLX05P Tl9OVUxMIChyZXN1bHQpOworCisgIHsvKiBUZXN0IGxpdGVyYWxzICovCisgICAgeworICAgICAg X0NvbXBsZXggZmxvYXQgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwg ImNvbXBsZXhfZmxvYXRfY2xpdF8xYzFfMmMyaiIpOworCisgICAgICBDSEVDS19WQUxVRShmICgp LCAxLjFmICsgMi4yZmopOworICAgIH0KKyAgICB7CisgICAgICBfQ29tcGxleCBkb3VibGUgKCpm KSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZG91YmxlX2Ns aXRfMWMxXzJjMmoiKTsKKyAgICAgIENIRUNLX1ZBTFVFKGYgKCksIDEuMSArIDIuMmopOworICAg IH0KKyAgICB7CisgICAgICBfQ29tcGxleCBsb25nIGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jl c3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV9jbGl0XzFjMV8yYzJq Iik7CisgICAgICAvKiBOb3RlOiBUaGUgbGl0ZXJhbCBpbiB0aGUgZnVuY3Rpb24gaXMgY29tcGxl eCBkb3VibGUgKi8KKyAgICAgIENIRUNLX1ZBTFVFKGYgKCksMS4xICsgMi4yaik7CisgICAgfQor ICAgIHsKKyAgICAgIGZsb2F0ICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1 bHQsICJmbG9hdF9jbGl0XzFjMSIpOworICAgICAgQ0hFQ0tfVkFMVUUoZiAoKSwgMS4xZik7Cisg ICAgfQorICAgIHsKKyAgICAgIGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29k ZSAocmVzdWx0LCAiZG91YmxlX2NsaXRfMWMxIik7CisgICAgICBDSEVDS19WQUxVRShmICgpLCAx LjEpOworICAgIH0KKyAgICB7CisgICAgICBsb25nIGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jl c3VsdF9nZXRfY29kZSAocmVzdWx0LCAibG9uZ19kb3VibGVfY2xpdF8xYzEiKTsKKyAgICAgIENI RUNLX1ZBTFVFKGYgKCksIDEuMSk7CisgICAgfQorICAgIHsKKyAgICAgIGZsb2F0ICgqZikoKSA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X2RsaXRfMWMx Iik7CisgICAgICBDSEVDS19WQUxVRShmICgpLCAxLjFmKTsKKyAgICB9CisgICAgeworICAgICAg X0NvbXBsZXggZG91YmxlICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJjb21wbGV4X2RvdWJsZV9kbGl0XzFjMSIpOworICAgICAgQ0hFQ0tfVkFMVUUoZiAoKSwgMS4x KTsKKyAgICB9CisgICAgeworICAgICAgX0NvbXBsZXggbG9uZyBkb3VibGUgKCpmKSgpID0gZ2Nj X2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfZGxpdF8x YzEiKTsKKyAgICAgIC8qIE5vdGU6IFRoZSBsaXRlcmFsIGluIHRoZSBmdW5jdGlvbiBpcyBjb21w bGV4IGRvdWJsZSAqLworICAgICAgQ0hFQ0tfVkFMVUUoZiAoKSwgMS4xKTsKKyAgICB9CisgICAg eworICAgICAgX0NvbXBsZXggZG91YmxlICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2Rl IChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV9sbGl0XzIiKTsKKyAgICAgIENIRUNLX1ZBTFVFKGYg KCksIDIpOworICAgIH0KKyAgICB7CisgICAgICBfQ29tcGxleCBkb3VibGUgKCpmKSgpID0gZ2Nj X2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZG91YmxlX2lsaXRfMyIpOwor ICAgICAgQ0hFQ0tfVkFMVUUoZiAoKSwgMyk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtbWlzYy5jIGIvZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvdGVzdC1jb21wbGV4LW1pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYzM1Mjc1YjIxZGUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LWNvbXBsZXgtbWlzYy5jCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICBUaGlzIHRl c3QgY2hlY2tzIHdldGhlciBjb21wbGV4IHR5cGVzIHdvcmsgd2l0aCBzdHJ1Y3RzLCB1bmlvbnMK KyAgYW5kIHBvaW50ZXJzLgorCisgIEFzd2VsbCBhcyBjb25zdCBhbmQgdm9sYXRpbGUsIGJ1dCBv bmx5IGluIHRoZSBzZW5zZSB0aGF0IGhhdmluZworICB0aG9zZSBxdWFsaWZpZXJzIGRvZXNuJ3Qg Y3Jhc2ggZ2NjLgorCisqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGNvbXBsZXgu aD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2 b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEp Cit7CisgICh2b2lkKSB1c2VyX2RhdGE7CisKKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2Vu YWJsZV9jb21wbGV4X3R5cGVzIChjdHh0LCAxKTsKKworICBnY2Nfaml0X3R5cGUgKnR5cGVfaW50 ID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQp OworICBnY2Nfaml0X3R5cGUgKnR5cGVfY2QgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlw ZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxFKTsKKworICBnY2Nfaml0X2x2YWx1 ZSAqY2RfZ2JsID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgIGN0eHQsIDAsIEdD Q19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgIHR5cGVfY2QsCisgICAgImFfY29tcGxleF9nbG9i YWxfZG91YmxlXzIiKTsKKworICAvKiBUaGVzZSBnbG9iYWxzIGFyZSBub3QgdXNlZCBmb3IgYW55 dGhpbmcgKi8KKyAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgIGN0eHQsIDAsIEdD Q19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgIGdjY19qaXRfdHlwZV9nZXRfdm9sYXRpbGUgKHR5 cGVfY2QpLAorICAgICJhX3ZvbGF0aWxlX2NvbXBsZXhfZG91YmxlIik7CisgIGdjY19qaXRfY29u dGV4dF9uZXdfZ2xvYmFsICgKKyAgICBjdHh0LCAwLCBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICBnY2Nfaml0X3R5cGVfZ2V0X2NvbnN0ICh0eXBlX2NkKSwKKyAgICAiYV9jb25zdF9jb21w bGV4X2RvdWJsZSIpOworCisgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPQorICAgIGdjY19qaXRf Y29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKyAgICAgIDAsIHR5cGVfY2QsIDEwKTsKKyAg Z2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgIGN0eHQsIDAsIEdDQ19KSVRfR0xPQkFM X0VYUE9SVEVELAorICAgIGFycl90eXBlLAorICAgICJhX2NvbnN0X2NvbXBsZXhfZG91YmxlX2Fy cmF5Iik7ICAKKworICB7LyogTWFrZSBhIGZ1bmN0aW9uIHJldHVybmluZyB1bmlvbiB3aXRoIDMu MTQgKyAxNTE2LmogaW4gaXQgKi8KKyAgICBnY2Nfaml0X2ZpZWxkICpjZF9maWVsZCA9IAorICAg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkgMCwKKwkJCSAgICAgICAg IHR5cGVfY2QsCisJCQkgICAgICAgICAiY2QiKTsKKyAgICBnY2Nfaml0X2ZpZWxkICppX2ZpZWxk ID0gCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJICAgICAgICAg MCwKKwkJCSAgICAgICAgIHR5cGVfaW50LAorCQkJICAgICAgICAgImkiKTsKKyAgICBnY2Nfaml0 X2ZpZWxkICpmaWVsZHNbXSA9IHtjZF9maWVsZCwgaV9maWVsZH07CisgICAgZ2NjX2ppdF90eXBl ICpjZGkgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld191bmlvbl90eXBlIChjdHh0LAorCQkJ CSAgICAgIDAsCisJCQkJICAgICAgImNkaSIsCisJCQkJICAgICAgMiwKKwkJCQkgICAgICBmaWVs ZHMpOworCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19m dW5jdGlvbiAoY3R4dCwgMCwKKyAgICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisgICAg ICBjZGksICJhX3VuaW9ueV9mbl9yZXR1cm5pbmdfdW5pb24iLCAwLCAwLCAwKTsKKworICAgIGdj Y19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZvbywgInN0 YXJ0Iik7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmxvY2FsID0KKyAgICAgIGdjY19qaXRfZnVuY3Rp b25fbmV3X2xvY2FsIChmb28sIDAsIGNkaSwgInVuaW9uX2xvY2FsIik7CisgICAgZ2NjX2ppdF9s dmFsdWUgKmx2X2ZpZWxkID0gZ2NjX2ppdF9sdmFsdWVfYWNjZXNzX2ZpZWxkCisgICAgICAobG9j YWwsIDAsIGNkX2ZpZWxkKTsKKyAgICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50CisgICAg ICAoYmxvY2ssIDAsIGx2X2ZpZWxkLAorICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21fY29tcGxleF9kb3VibGUgKAorICAgICAgICAgY3R4dCwgdHlwZV9jZCwgMy4xNCArIDE1 OTIuaikpOworCisgICAgLyogTm90ZTogV3JpdGVzIHRvIGdsb2JhbCBoZXJlICovCisgICAgZ2Nj X2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoCisgICAgICBibG9jaywgMCwgY2RfZ2JsLAorICAg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoCisgICAg ICAgICBjdHh0LCB0eXBlX2NkLCA2NTM1ICsgOS5qKSk7CisgICAgCisgICAgZ2NjX2ppdF9ibG9j a19lbmRfd2l0aF9yZXR1cm4gKAorICAgICAgYmxvY2ssIDAsIGdjY19qaXRfbHZhbHVlX2FzX3J2 YWx1ZSAobG9jYWwpKTsKKyAgfQorICB7LyogTWFrZSBhIGZ1bmN0aW9uIHJldHVybmluZyBhIGNv bXBsZXh5IHN0cnVjdCAqLworICAgIGdjY19qaXRfZmllbGQgKmNkX2ZpZWxkID0gCisgICAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCSAwLAorCQkJICAgICAgICAgdHlw ZV9jZCwKKwkJCSAgICAgICAgICJjZCIpOworICAgIGdjY19qaXRfZmllbGQgKmlfZmllbGQgPSAK KyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkgICAgICAgICAwLAor CQkJICAgICAgICAgdHlwZV9pbnQsCisJCQkgICAgICAgICAiaSIpOworICAgIGdjY19qaXRfZmll bGQgKmZpZWxkc1tdID0ge2NkX2ZpZWxkLCBpX2ZpZWxkfTsKKyAgICBnY2Nfaml0X3R5cGUgKmNk aV9zdHJ1Y3QgPQorICAgICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSgKKwlnY2Nfaml0X2NvbnRl eHRfbmV3X3N0cnVjdF90eXBlIChjdHh0LAorCQkJCQkwLAorCQkJCQkiY2RpX3N0cnVjdCIsCisJ CQkJCTIsCisJCQkJCWZpZWxkcykpOworCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vID0gZ2Nj X2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKyAgICAgIEdDQ19KSVRfRlVOQ1RJ T05fRVhQT1JURUQsCisgICAgICBjZGlfc3RydWN0LCAiYV9zdHJ1Y3R5X2ZuX3JldHVybmluZ19z dHJ1Y3QiLCAwLCAwLCAwKTsKKworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9m dW5jdGlvbl9uZXdfYmxvY2sgKGZvbywgInN0YXJ0Iik7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmxv Y2FsID0KKyAgICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmb28sIDAsIGNkaV9zdHJ1 Y3QsICJsb2NhbCIpOworICAgIGdjY19qaXRfbHZhbHVlICpsdl9maWVsZCA9IGdjY19qaXRfbHZh bHVlX2FjY2Vzc19maWVsZCAoCisgICAgICBsb2NhbCwgMCwgY2RfZmllbGQpOworICAgIGdjY19q aXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKAorICAgICAgIGJsb2NrLCAwLCBsdl9maWVsZCwKKyAg ICAgICAvKiBOb3RlOiBSZWFkcyBmcm9tIGdsb2JhbCBoZXJlICovCisgICAgICAgZ2NjX2ppdF9s dmFsdWVfYXNfcnZhbHVlKGNkX2dibCkpOworICAgIAorICAgIGdjY19qaXRfYmxvY2tfZW5kX3dp dGhfcmV0dXJuICgKKyAgICAgIGJsb2NrLCAwLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGxv Y2FsKSk7CisgIH0KKyAgey8qIE1ha2UgYSBmdW5jdGlvbiB0YWtpbmcgYSBwb2ludGVyIHRvIGEg Y29tcGxleCBkb3VibGUsCisgICAgICBhZGQgMSsxLmogdG8gaXQsIGFuZCByZXR1cm4gdGhlIHBv aW50ZXIgKi8KKyAgICAgIGdjY19qaXRfdHlwZSAqdHlwZV9yZXR1cm4gPQorCWdjY19qaXRfdHlw ZV9nZXRfcG9pbnRlciAodHlwZV9jZCk7CisgICAgICAKKyAgICAgIGdjY19qaXRfcGFyYW0gKnBh cmFtID0gZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoCisJY3R4dCwgMCwgZ2NjX2ppdF90eXBl X2dldF9wb2ludGVyICh0eXBlX2NkKSwgInBjZCIpOworICAgICAgCisgICAgICBnY2Nfaml0X2Z1 bmN0aW9uICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAwLAorCUdD Q19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJdHlwZV9yZXR1cm4sCisJImFfcG9pbnR5X2ZuX3Jl dHVybmluZ19wb2ludHMiLCAxLCAmcGFyYW0sIDApOworICAgICAgZ2NjX2ppdF9ibG9jayAqYmxv Y2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vLCAic3RhcnQiKTsKKyAgICAgIAor ICAgICAgZ2NjX2ppdF9ydmFsdWUgKnBhcmFtX3J2ID0gZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUg KAorICAgICAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm9vLCAwKSk7CisKKyAgICAg IGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKAor CWN0eHQsIDAsIEdDQ19KSVRfQklOQVJZX09QX1BMVVMsIHR5cGVfY2QsCisJZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoCisJICBjdHh0LCB0eXBlX2NkLCAx ICsgMS5qKSwKKwlnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKAorCSAgZ2NjX2ppdF9ydmFsdWVf ZGVyZWZlcmVuY2UgKAorCSAgICBwYXJhbV9ydiwgMCkpKTsKKyAgICAgIGdjY19qaXRfYmxvY2tf YWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLAorICAgICAgICBnY2Nfaml0X3J2YWx1ZV9kZXJlZmVy ZW5jZSAoCisJICAgIHBhcmFtX3J2LCAwKSwKKwlydmFsKTsKKworICAgICAgZ2NjX2ppdF9ibG9j a19lbmRfd2l0aF9yZXR1cm4gKAorCWJsb2NrLCAwLCBwYXJhbV9ydik7CisgIH0KKworICBnY2Nf aml0X2NvbnRleHRfY29tcGlsZV90b19maWxlIChjdHh0LCBHQ0NfSklUX09VVFBVVF9LSU5EX09C SkVDVF9GSUxFLCAibWlzYy5vIik7Cit9CisKK3R5cGVkZWYgdW5pb24geworICBfQ29tcGxleCBk b3VibGUgY2Q7CisgIGludCBpOworfSBjb21wbGV4X3Rlc3RfdW5pb247CisKK3R5cGVkZWYgc3Ry dWN0IHsKKyAgX0NvbXBsZXggZG91YmxlIGNkOworICBpbnQgaTsKK30gY29tcGxleF90ZXN0X3N0 cnVjdDsKKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2pp dF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgQ0hFQ0tfTk9OX05VTEwgKHJlc3VsdCk7CisKKyAgewor ICAgIGNvbXBsZXhfdGVzdF91bmlvbiAoKmZuKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUg KHJlc3VsdCwgImFfdW5pb255X2ZuX3JldHVybmluZ191bmlvbiIpOworICAgIENIRUNLX05PTl9O VUxMIChmbik7CisKKyAgICBjb21wbGV4X3Rlc3RfdW5pb24gdSA9IGZuKCk7CisgICAgQ0hFQ0tf VkFMVUUgKHUuY2QsIDMuMTQgKyAxNTkyLmopOworICB9CisgIHsKKyAgICBjb21wbGV4X3Rlc3Rf c3RydWN0ICgqZm4pKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiYV9zdHJ1 Y3R5X2ZuX3JldHVybmluZ19zdHJ1Y3QiKTsKKyAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisg ICAgY29tcGxleF90ZXN0X3N0cnVjdCBzID0gZm4oKTsKKyAgICBDSEVDS19WQUxVRSAocy5jZCwg NjUzNSArIDkuaik7CisgIH0KKyAgeworICAgIF9Db21wbGV4IGRvdWJsZSAqCisgICAgKCpmbiko X0NvbXBsZXggZG91YmxlICopID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImFf cG9pbnR5X2ZuX3JldHVybmluZ19wb2ludHMiKTsKKyAgICBDSEVDS19OT05fTlVMTCAoZm4pOwor CisgICAgX0NvbXBsZXggZG91YmxlIHMgPSAyLiArIDMuaTsKKyAgICBfQ29tcGxleCBkb3VibGUg KnAgPSBmbigmcyk7CisgICAgQ0hFQ0tfVkFMVUUgKHAsICZzKTsKKyAgICBDSEVDS19WQUxVRSAo cywgMy4gKyA0LmkpOworICB9Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWNvbXBsZXgtb3BlcmF0b3JzLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBs ZXgtb3BlcmF0b3JzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA5 MWI1NmZiNGQyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1j b21wbGV4LW9wZXJhdG9ycy5jCkBAIC0wLDAgKzEsMzUzIEBACisvKgorICBUZXN0ID09LCAhPSwg dGhlIGNyZWF0ZS1jb21wbGV4LWZyb20tcmVhbHMtb3BlcmF0b3IsCisgIHVuYXJ5IG1pbnVzIGFu ZCAqLS8rCisgKi8KKworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGNvbXBsZXguaD4K KworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKworc3RhdGlj IHZvaWQKK21ha2VfY29kZV9jb21wb3AgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJICBjb25z dCBjaGFyICpmbl9uYW1lLAorCQkgIGludCB0eXBlLAorCQkgIGVudW0gZ2NjX2ppdF9jb21wYXJp c29uIG9wKQoreworICBnY2Nfaml0X3R5cGUgKnR0ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBl IChjdHh0LCB0eXBlKTsKKyAgZ2NjX2ppdF90eXBlICpib29sX3R5cGUgPSBnY2Nfaml0X2NvbnRl eHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9CT09MKTsKKyAgCisgIGdjY19qaXRfcGFy YW0gKnBhcmFtMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIDAsIHR0LCAiZjEi KTsKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0yID0gZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAo Y3R4dCwgMCwgdHQsICJmMiIpOworCisgIGdjY19qaXRfcGFyYW0gKnBhcmFtc1tdID0ge3BhcmFt MSwgcGFyYW0yfTsKKyAgCisgIGdjY19qaXRfZnVuY3Rpb24gKmZvbyA9IGdjY19qaXRfY29udGV4 dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwK KyAgICBib29sX3R5cGUsIGZuX25hbWUsIDIsIHBhcmFtcywgMCk7CisgIAorICBnY2Nfaml0X2Js b2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIpOwor CisgIGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlICgKKyAgICBn Y2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm9vLCAwKSk7CisgIGdjY19qaXRfbHZhbHVlICpm MiA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlICgKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9w YXJhbSAoZm9vLCAxKSk7CisgCisgIC8qIHJldHVybiBmMSBvcCBmMjsgKi8KKyAgZ2NjX2ppdF9y dmFsdWUgKnJjb21wb3AgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbXBhcmlzb24KKyAgICAoY3R4 dCwgMCwgb3AsCisgICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZjEpLAorICAgICBnY2Nf aml0X2x2YWx1ZV9hc19ydmFsdWUgKGYyKSk7CisgIAorICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRo X3JldHVybiAoYmxvY2ssIDAsIHJjb21wb3ApOworfQorCitzdGF0aWMgdm9pZAorbWFrZV9jb2Rl X2Jpbm9wIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBjb25zdCBjaGFyICpmbl9uYW1lLAor CQkgaW50IHR5cGUxLAorCQkgaW50IHR5cGUyLAorCQkgaW50IHJldHVybl90eXBlLAorCQkgZW51 bSBnY2Nfaml0X2JpbmFyeV9vcCBvcCkKK3sKKyAgZ2NjX2ppdF90eXBlICp0dDEgPSBnY2Nfaml0 X2NvbnRleHRfZ2V0X3R5cGUoY3R4dCwgdHlwZTEpOworICBnY2Nfaml0X3R5cGUgKnR0MiA9IGdj Y19qaXRfY29udGV4dF9nZXRfdHlwZShjdHh0LCB0eXBlMik7CisgIGdjY19qaXRfdHlwZSAqdHIg PSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUoY3R4dCwgcmV0dXJuX3R5cGUpOworICAKKyAgZ2Nj X2ppdF9wYXJhbSAqcGFyYW0xID0gZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbShjdHh0LCAwLCB0 dDEsICJmMSIpOworICBnY2Nfaml0X3BhcmFtICpwYXJhbTIgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X3BhcmFtKGN0eHQsIDAsIHR0MiwgImYyIik7CisKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW1zW10g PSB7cGFyYW0xLCBwYXJhbTJ9OworICAKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vID0gZ2NjX2pp dF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKyAgICBHQ0NfSklUX0ZVTkNUSU9OX0VY UE9SVEVELAorICAgIHRyLCBmbl9uYW1lLCAyLCBwYXJhbXMsIDApOworICAKKyAgZ2NjX2ppdF9i bG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayhmb28sICJzdGFydCIpOwor CisgIGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlKAorICAgIGdj Y19qaXRfZnVuY3Rpb25fZ2V0X3BhcmFtKGZvbywgMCkpOworICBnY2Nfaml0X2x2YWx1ZSAqZjIg PSBnY2Nfaml0X3BhcmFtX2FzX2x2YWx1ZSgKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJh bShmb28sIDEpKTsKKyAKKyAgLyogcmV0dXJuIGYxIG9wIGYyOyAqLworICBnY2Nfaml0X3J2YWx1 ZSAqcmJpbm9wID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AKKyAgICAoY3R4dCwgMCwg b3AsIHRyLAorICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGYxKSwKKyAgICAgZ2NjX2pp dF9sdmFsdWVfYXNfcnZhbHVlIChmMikpOworICAKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9y ZXR1cm4gKGJsb2NrLCAwLCByYmlub3ApOworfQorCitzdGF0aWMgdm9pZAorbWFrZV9jb2RlX3Vu b3AgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkgICAgY29uc3QgY2hhciAqZm5fbmFtZSwKKwkg ICAgaW50IHR5cGUxLAorCSAgICBlbnVtIGdjY19qaXRfdW5hcnlfb3Agb3ApCit7CisgIGdjY19q aXRfdHlwZSAqdHQgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUoY3R4dCwgdHlwZTEpOworICAK KyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0xID0gZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbShjdHh0 LCAwLCB0dCwgImYxIik7CisKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW1zW10gPSB7cGFyYW0xfTsK KyAgCisgIGdjY19qaXRfZnVuY3Rpb24gKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rp b24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKyAgICB0dCwgZm5f bmFtZSwgMSwgcGFyYW1zLCAwKTsKKyAgCisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2pp dF9mdW5jdGlvbl9uZXdfYmxvY2soZm9vLCAic3RhcnQiKTsKKworICBnY2Nfaml0X2x2YWx1ZSAq ZjEgPSBnY2Nfaml0X3BhcmFtX2FzX2x2YWx1ZSgKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9w YXJhbShmb28sIDApKTsKKyAKKyAgLyogcmV0dXJuIG9wIGYxOyAqLworICBnY2Nfaml0X3J2YWx1 ZSAqcmJpbm9wID0gZ2NjX2ppdF9jb250ZXh0X25ld191bmFyeV9vcAorICAgIChjdHh0LCAwLCBv cCwgdHQsCisgICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZjEpKTsKKyAgCisgIGdjY19q aXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywgMCwgcmJpbm9wKTsKK30KKwordm9pZAor Y3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQorewor ICAodm9pZCkgdXNlcl9kYXRhOworCisgIGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFibGVf Y29tcGxleF90eXBlcyAoY3R4dCwgMSk7CisKKyAgbWFrZV9jb2RlX2Jpbm9wIChjdHh0LCAicGx1 c19jb21wbGV4X2Zsb2F0X2NvbXBsZXhfZmxvYXQiLAorCQkgICBHQ0NfSklUX1RZUEVfQ09NUExF WF9GTE9BVCwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJCSAgIEdDQ19KSVRf VFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTKTsKKyAgbWFr ZV9jb2RlX2Jpbm9wIChjdHh0LCAibWludXNfY29tcGxleF9mbG9hdF9jb21wbGV4X2Zsb2F0IiwK KwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJCSAgIEdDQ19KSVRfVFlQRV9DT01Q TEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVCwKKwkJICAgR0NDX0pJ VF9CSU5BUllfT1BfTUlOVVMpOworICBtYWtlX2NvZGVfYmlub3AgKGN0eHQsICJkaXZfY29tcGxl eF9mbG9hdF9jb21wbGV4X2Zsb2F0IiwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQs CisJCSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX1RZUEVfQ09N UExFWF9GTE9BVCwKKwkJICAgR0NDX0pJVF9CSU5BUllfT1BfRElWSURFKTsKKyAgbWFrZV9jb2Rl X2Jpbm9wIChjdHh0LCAibXVsX2NvbXBsZXhfZmxvYXRfY29tcGxleF9mbG9hdCIsCisJCSAgIEdD Q19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9B VCwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJCSAgIEdDQ19KSVRfQklOQVJZ X09QX01VTFQpOworCisgIG1ha2VfY29kZV9iaW5vcCAoY3R4dCwgImNtcGx4X2Zsb2F0X2Zsb2F0 IiwKKwkJICAgR0NDX0pJVF9UWVBFX0ZMT0FULAorCQkgICBHQ0NfSklUX1RZUEVfRkxPQVQsCisJ CSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX0JJTkFSWV9PUF9D T01QTEVYKTsKKworICAvKiBVbnVuZGVmIHRvIHRlc3QgZGlmZmVyZW50IGVycm9yIG1zZ3MgKi8K KyNpZiAwCisgIG1ha2VfY29kZV9iaW5vcCAoY3R4dCwgInNob3VsZF9ub3Rfd29yayIsCisJCSAg IEdDQ19KSVRfVFlQRV9GTE9BVCwKKwkJICAgR0NDX0pJVF9UWVBFX0ZMT0FULAorCQkgICBHQ0Nf SklUX1RZUEVfQ09NUExFWF9ET1VCTEUsCisJCSAgIEdDQ19KSVRfQklOQVJZX09QX0NPTVBMRVgp OworI2VuZGlmCisKKyAgbWFrZV9jb2RlX2Jpbm9wIChjdHh0LCAiY21wbHhfZG91YmxlX2RvdWJs ZSIsCisJCSAgIEdDQ19KSVRfVFlQRV9ET1VCTEUsCisJCSAgIEdDQ19KSVRfVFlQRV9ET1VCTEUs CisJCSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkJICAgR0NDX0pJVF9CSU5BUllf T1BfQ09NUExFWCk7CisKKyAgbWFrZV9jb2RlX2Jpbm9wIChjdHh0LCAiY21wbHhfbG9uZ19kb3Vi bGVfbG9uZ19kb3VibGUiLAorCQkgICBHQ0NfSklUX1RZUEVfTE9OR19ET1VCTEUsCisJCSAgIEdD Q19KSVRfVFlQRV9MT05HX0RPVUJMRSwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19E T1VCTEUsCisJCSAgIEdDQ19KSVRfQklOQVJZX09QX0NPTVBMRVgpOworICAKKyAgbWFrZV9jb2Rl X3Vub3AgKGN0eHQsICJtaW51c19jb21wbGV4X2Zsb2F0IiwKKwkJICAgR0NDX0pJVF9UWVBFX0NP TVBMRVhfRkxPQVQsCisJCSAgIEdDQ19KSVRfVU5BUllfT1BfTUlOVVMpOworCisgIG1ha2VfY29k ZV9jb21wb3AgKGN0eHQsICJlcXVhbF9jb21wbGV4X2Zsb2F0IiwKKwkJICAgIEdDQ19KSVRfVFlQ RV9DT01QTEVYX0ZMT0FULAorCQkgICAgR0NDX0pJVF9DT01QQVJJU09OX0VRKTsKKyAgbWFrZV9j b2RlX2NvbXBvcCAoY3R4dCwgIm5lcXVhbF9jb21wbGV4X2Zsb2F0IiwKKwkJICAgIEdDQ19KSVRf VFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICAgR0NDX0pJVF9DT01QQVJJU09OX05FKTsKKyAgbWFr ZV9jb2RlX2NvbXBvcCAoY3R4dCwgImVxdWFsX2NvbXBsZXhfZG91YmxlIiwKKwkJICAgIEdDQ19K SVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkJICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9FUSk7Cisg IG1ha2VfY29kZV9jb21wb3AgKGN0eHQsICJuZXF1YWxfY29tcGxleF9kb3VibGUiLAorCQkgICAg R0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxFLAorCQkgICAgR0NDX0pJVF9DT01QQVJJU09OX05F KTsKKyAgbWFrZV9jb2RlX2NvbXBvcCAoY3R4dCwgImVxdWFsX2NvbXBsZXhfbG9uZ19kb3VibGUi LAorCQkgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEUsCisJCSAgICBHQ0NfSklU X0NPTVBBUklTT05fRVEpOworICBtYWtlX2NvZGVfY29tcG9wIChjdHh0LCAibmVxdWFsX2NvbXBs ZXhfbG9uZ19kb3VibGUiLAorCQkgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEUs CisJCSAgICBHQ0NfSklUX0NPTVBBUklTT05fTkUpOworCisgIC8qIFVudW5kZWYgdG8gdGVzdCBk aWZmZXJlbnQgZXJyb3IgbXNncyAqLworI2lmIDAKKyAgbWFrZV9jb2RlX2NvbXBvcCAoY3R4dCwg InF3ZWFzZHp4YyIsCisJCSAgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9MT05HX0RPVUJMRSwKKwkJ ICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9HRSk7CisjZW5kaWYKKworfQorCit0eXBlZGVmIF9Db21w bGV4IGZsb2F0ICgqY2ZfY2ZjZikoX0NvbXBsZXggZmxvYXQsIF9Db21wbGV4IGZsb2F0KTsKK3R5 cGVkZWYgX0NvbXBsZXggZmxvYXQgKCpjZl9jZikoX0NvbXBsZXggZmxvYXQpOwordHlwZWRlZiBf Qm9vbCAoKmJfY2ZjZikoX0NvbXBsZXggZmxvYXQsIF9Db21wbGV4IGZsb2F0KTsKK3R5cGVkZWYg X0Jvb2wgKCpiX2NkY2QpKF9Db21wbGV4IGRvdWJsZSwgX0NvbXBsZXggZG91YmxlKTsKK3R5cGVk ZWYgX0Jvb2wgKCpiX2NsZGNsZCkoX0NvbXBsZXggbG9uZyBkb3VibGUsIF9Db21wbGV4IGxvbmcg ZG91YmxlKTsKKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2Nj X2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgKHZvaWQpIGN0eHQ7CisgIENIRUNLX05PTl9OVUxM IChyZXN1bHQpOworCisgIHsvKiBUZXN0IGJpbmFyeSBvcGVyYXRvcnMgKi8KKyAgICB7CisgICAg ICBjZl9jZmNmIGZuID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAicGx1c19j b21wbGV4X2Zsb2F0X2NvbXBsZXhfZmxvYXQiKTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7 CisgICAgICAKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS5mICsgMi5maiwgMy5mICsgNC5maiks ICgxLmYgKyAyLmZqKSArICgzLmYgKyA0LmZqKSk7CisgICAgfQorICAgIHsKKyAgICAgIGNmX2Nm Y2YgZm4gPQorCWdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJtaW51c19jb21wbGV4 X2Zsb2F0X2NvbXBsZXhfZmxvYXQiKTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAg ICAKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS5mICsgMi5maiwgMy5mICsgNC5maiksICgxLmYg KyAyLmZqKSAtICgzLmYgKyA0LmZqKSk7CisgICAgfQorICAgIHsKKyAgICAgIGNmX2NmY2YgZm4g PQorCWdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJkaXZfY29tcGxleF9mbG9hdF9j b21wbGV4X2Zsb2F0Iik7CisgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworICAgICAgCisgICAg ICBDSEVDS19WQUxVRSAoZm4gKDEuZiArIDIuZmosIDMuZiArIDQuZmopLCAoMS5mICsgMi5maikv KDMuZiArIDQuZmopKTsKKyAgICB9CisgICAgeworICAgICAgY2ZfY2ZjZiBmbiA9CisJZ2NjX2pp dF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgIm11bF9jb21wbGV4X2Zsb2F0X2NvbXBsZXhfZmxv YXQiKTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAKKyAgICAgIENIRUNLX1ZB TFVFIChmbiAoMS5mICsgMi5maiwgMy5mICsgNC5maiksICgxLmYgKyAyLmZqKSooMy5mICsgNC5m aikpOworICAgIH0KKyAgICB7CisgICAgICBfQ29tcGxleCBmbG9hdCAoKmZuKShmbG9hdCwgZmxv YXQpID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY21wbHhfZmxvYXRfZmxv YXQiKTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAKKyAgICAgIENIRUNLX1ZB TFVFIChmbiAoMSwgMiksIDEuZiArIDIuZmkpOworICAgICAgLyogTm90ZSB0aGF0IHRoZSByZWFs IGFuc3dlciBpcyAwIG5vdCBuYW4gYXMgaXQgd291bGQgaGF2ZSBiZWVuIGJ5CisJIG11bHRpcGx5 aW5nIElORiAqIDEuZmkgKi8KKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMCwgSU5GSU5JVFkpLCBD TVBMWEYgKDAsIElORklOSVRZKSk7CisgICAgICBDSEVDS19WQUxVRSAoZm4gKDAsIC1JTkZJTklU WSksIENNUExYRiAoMCwgLUlORklOSVRZKSk7CisKKyAgICAgIENIRUNLX1ZBTFVFIChjcmVhbGYg KGZuICgwLCBOQU4pKSwgY3JlYWxmIChDTVBMWEYgKDAsIE5BTikpKTsKKyAgICAgIENIRUNLIChp c25hbmYgKGNpbWFnZiAoZm4gKDAsIE5BTikpKSk7CisgICAgICAKKyAgICAgIC8qIC0wIG5lZWQg YmUgcHJlc2VydmVkICovCisgICAgICBfQ29tcGxleCBmbG9hdCBmID0gZm4gKDAsIC0wLik7Cisg ICAgICBDSEVDSyAoc2lnbmJpdCAoIGNpbWFnZiAoZikpICE9IDApOworICAgICAgQ0hFQ0tfVkFM VUUgKGYsIENNUExYRiAoMCwgLTAuKSk7IAorICAgIH0KKyAgICB7CisgICAgICBfQ29tcGxleCBk b3VibGUgKCpmbikoZG91YmxlLCBkb3VibGUpID0KKyAgICAgICAgZ2NjX2ppdF9yZXN1bHRfZ2V0 X2NvZGUgKHJlc3VsdCwgImNtcGx4X2RvdWJsZV9kb3VibGUiKTsKKyAgICAgIENIRUNLX05PTl9O VUxMIChmbik7CisgICAgICAKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMSwgMiksIDEuICsgMi5p KTsKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMCwgSU5GSU5JVFkpLCBDTVBMWCAoMCwgSU5GSU5J VFkpKTsKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMCwgLUlORklOSVRZKSwgQ01QTFggKDAsIC1J TkZJTklUWSkpOworICAgICAgCisgICAgICBDSEVDS19WQUxVRSAoY3JlYWwgKGZuICgwLCBOQU4p KSwgY3JlYWwgKENNUExYICgwLCBOQU4pKSk7CisgICAgICBDSEVDSyAoaXNuYW4gKGNpbWFnIChm biAoMCwgTkFOKSkpKTsgICAgICAKKyAgICAgIAorICAgICAgX0NvbXBsZXggZG91YmxlIGYgPSBm biAoMCwgLTAuKTsKKyAgICAgIENIRUNLIChzaWduYml0IChjaW1hZyAoZikpICE9IDApOworICAg ICAgQ0hFQ0tfVkFMVUUgKGYsIENNUExYRiAoMCwgLTAuKSk7IAorICAgIH0KKyAgICB7CisgICAg ICBfQ29tcGxleCBsb25nIGRvdWJsZSAoKmZuKShsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpID0K KwlnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY21wbHhfbG9uZ19kb3VibGVfbG9u Z19kb3VibGUiKTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAKKyAgICAgIENI RUNLX1ZBTFVFIChmbiAoMSwgMiksIDEuTCArIDIuTGkpOworICAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgwLCBJTkZJTklUWSksIENNUExYTCAoMCwgSU5GSU5JVFkpKTsKKyAgICAgIENIRUNLX1ZBTFVF IChmbiAoMCwgLUlORklOSVRZKSwgQ01QTFhMICgwLCAtSU5GSU5JVFkpKTsKKworICAgICAgQ0hF Q0tfVkFMVUUgKGNyZWFsbCAoZm4gKDAsIE5BTikpLCBjcmVhbGwgKENNUExYTCAoMCwgTkFOKSkp OworICAgICAgQ0hFQ0sgKGlzbmFubCAoY2ltYWdsIChmbiAoMCwgTkFOKSkpKTsgICAgICAKKwor ICAgICAgX0NvbXBsZXggbG9uZyBkb3VibGUgZiA9IGZuICgwLCAtMC4pOworICAgICAgQ0hFQ0sg KHNpZ25iaXQgKGNpbWFnIChmKSkgIT0gMCk7CisgICAgICBDSEVDS19WQUxVRSAoZiwgQ01QTFhM ICgwLCAtMC4pKTsgCisgICAgfQorICB9CisKKyAgey8qIFRlc3QgdW5hcnkgb3BzICovCisgICAg eworICAgICAgIGNmX2NmIGZuID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAi bWludXNfY29tcGxleF9mbG9hdCIpOworICAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKyAgICAg IAorICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLmYgKyAyLmZqKSwgLSgxLmYgKyAyLmZqKSk7Cisg ICAgfQorICB9CisgIHsvKiBUZXN0IGNvbXAgb3BzICovCisgICAgeworICAgICAgIGJfY2ZjZiBm biA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImVxdWFsX2NvbXBsZXhfZmxv YXQiKTsKKyAgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworICAgICAgIAorICAgICAgIENIRUNL X1ZBTFVFIChmbiAoMS5mICsgMi5maiwgMS5mICsgMi5maiApLCAxKTsKKyAgICAgICBDSEVDS19W QUxVRSAoZm4gKDEuZiArIDMuZmosIDEuZiArIDIuZmogKSwgMCk7CisgICAgfQorICAgIHsKKyAg ICAgICBiX2NmY2YgZm4gPQorCWdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJuZXF1 YWxfY29tcGxleF9mbG9hdCIpOworICAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAg CisgICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLmYgKyAyLmZqLCAxLmYgKyAyLmZqICksIDApOwor ICAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS5mICsgMy5maiwgMS5mICsgMi5maiApLCAxKTsKKyAg ICB9CisgICAgeworICAgICAgIGJfY2RjZCBmbiA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUg KHJlc3VsdCwgImVxdWFsX2NvbXBsZXhfZG91YmxlIik7CisgICAgICAgQ0hFQ0tfTk9OX05VTEwg KGZuKTsKKyAgICAgICAKKyAgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuICsgMi5qLCAxLiArIDIu aiApLCAxKTsKKyAgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuICsgMy5qLCAxLiArIDIuaiApLCAw KTsKKyAgICB9CisgICAgeworICAgICAgIGJfY2RjZCBmbiA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0 X2NvZGUgKHJlc3VsdCwgIm5lcXVhbF9jb21wbGV4X2RvdWJsZSIpOworICAgICAgIENIRUNLX05P Tl9OVUxMIChmbik7CisgICAgICAgCisgICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLiArIDIuaiwg MS4gKyAyLmogKSwgMCk7CisgICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLiArIDMuaiwgMS4gKyAy LmogKSwgMSk7CisgICAgfQorICAgIHsKKyAgICAgICBiX2NsZGNsZCBmbiA9CisJZ2NjX2ppdF9y ZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImVxdWFsX2NvbXBsZXhfbG9uZ19kb3VibGUiKTsKKyAg ICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworICAgICAgIAorICAgICAgIENIRUNLX1ZBTFVFIChm biAoMS4gKyAyLmosIDEuICsgMi5qICksIDEpOworICAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4g KyAzLmosIDEuICsgMi5qICksIDApOworICAgIH0KKyAgICB7CisgICAgICAgYl9jbGRjbGQgZm4g PQorCWdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJuZXF1YWxfY29tcGxleF9sb25n X2RvdWJsZSIpOworICAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAgCisgICAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLiArIDIuaiwgMS4gKyAyLmogKSwgMCk7CisgICAgICAgQ0hFQ0tf VkFMVUUgKGZuICgxLiArIDMuaiwgMS4gKyAyLmogKSwgMSk7CisgICAgfQorICB9Cit9CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtdHlwZXMuYyBiL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC10eXBlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5jNTU1MTMzMzY3YgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC10eXBlcy5jCkBAIC0wLDAgKzEsNjc3IEBACisv KgorICBUZXN0IGNhc3QgZnJvbSBhbGwgY29tcGxleCB0eXBlcyB0byBhbGwgcHJpbWl0aXZlIHR5 cGVzCisgIGV4Y2VwdCBib29sIGFuZCBhbW9uZ3N0IHRoZSBjb21wbGV4IHR5cGVzIHRoZW0gc2Vs Zi4KKworICBBbHNvIHRlc3Qgc29tZSBjYXN0IGZyb20gbm9uLWNvbXBsZXggdG8gY29tcGxleC4K KworICBBbHNvIGNhbGwgYSBtYXRobGliIGNvbXBsZXggZnVuY3Rpb24gYW5kIGNyZWF0ZSBhCisg IGNvbXBsZXggZ2xvYmFsLgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8Y29t cGxleC5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgor CisvKgorICBNYWtlIGNvZGUgMTogKGNoZWNrIHRoYXQgZnVuY3Rpb24gY2FsbHMgd29ya3MpCisg ICBjb21wbGV4IGZsb2F0IGNzcXJ0Zihjb21wbGV4IGZsb2F0IGYpOworCisgICBjb21wbGV4IGZs b2F0IGNvbXBsZXhfZmxvYXRfZm9vKGNvbXBsZXggZmxvYXQgZikKKyAgIHsKKyAgICAgcmV0dXJu IGNzcXJ0ZiggZiAqIChjb21wbGV4IGZsb2F0KTIuKTsKKyAgIH0KKworICBNYWtlIGNvZGUgMjog KGNoZWNrIGNhc3RzKQorICAgaW50IGZsb2F0IGNvbXBsZXhfZmxvYXRfdG9faW50IChjb21wbGV4 IGZsb2F0IGYpCisgICB7CisgICAgIHJldHVybiBmOworICAgfQorICAgCisgIHdpdGggZGlmZmVy ZW50IHR5cGVzIGFuZCBmdW5jdGlvbiBuYW1lcy4KKyAqLworCisKK3N0YXRpYyB2b2lkCittYWtl X2NvZGUxKGdjY19qaXRfY29udGV4dCogY3R4dCwKKwkgICBjb25zdCBjaGFyICpmbl9uYW1lLAor CSAgIGNvbnN0IGNoYXIgKnNxcnRfZm4sCisJICAgaW50IHR5cGUpCit7CisgIGdjY19qaXRfcnZh bHVlICpydmFsMSwgKnJ2YWwyOworICBnY2Nfaml0X2Jsb2NrICpibG9jazsKKworICBnY2Nfaml0 X3R5cGUgKmN0ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCB0eXBlKTsKKyAgZ2Nj X2ppdF9wYXJhbSAqcGFyYW0gPSBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCAwLCBj dCwgImYiKTsKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYyA9IGdjY19qaXRfY29udGV4dF9uZXdf ZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9GVU5DVElPTl9JTVBPUlRFRCwKKyAgICBj dCwgc3FydF9mbiwgMSwgJnBhcmFtLCAwKTsKKworICBwYXJhbSA9IGdjY19qaXRfY29udGV4dF9u ZXdfcGFyYW0gKGN0eHQsIDAsIGN0LCAiZiIpOworICBnY2Nfaml0X2Z1bmN0aW9uICpmb28gPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAwLAorICAgIEdDQ19KSVRfRlVOQ1RJ T05fRVhQT1JURUQsCisgICAgY3QsIGZuX25hbWUsIDEsICZwYXJhbSwgMCk7CisgIAorICBibG9j ayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIpOworICAKKyAgcnZh bDEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwgMCwgR0NDX0pJVF9CSU5B UllfT1BfTVVMVCwgY3QsCisgICAgZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUgKAorICAgICAgICBn Y2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm9vLCAwKSksCisgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9kb3VibGUgKGN0eHQsIGN0LCAyLikpOworICAKKyAgcnZhbDIgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIDAsIGZ1bmMsIDEsICZydmFsMSk7CisgIAor ICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssIDAsIHJ2YWwyKTsKK30KKwor c3RhdGljIHZvaWQKK21ha2VfY29kZTIgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkgICAgY29u c3QgY2hhciAqZm5fbmFtZSwKKwkgICAgaW50IGNvbXBsZXhfdHlwZSwKKwkgICAgaW50IHRhcmdl dF90eXBlKQoreworICBnY2Nfaml0X2Jsb2NrICpibG9jazsKKyAgZ2NjX2ppdF90eXBlICp0dCA9 IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgdGFyZ2V0X3R5cGUpOworICBnY2Nfaml0 X3R5cGUgKmN0ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBjb21wbGV4X3R5cGUp OworICAKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0gPSBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFt IChjdHh0LCAwLCBjdCwgImYiKTsKKworICBnY2Nfaml0X2Z1bmN0aW9uICpmb28gPSBnY2Nfaml0 X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAwLAorICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQ T1JURUQsCisgICAgdHQsIGZuX25hbWUsIDEsICZwYXJhbSwgMCk7CisgIAorICBibG9jayA9IGdj Y19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIpOworCisgIGdjY19qaXRfYmxv Y2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywgMCwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Nh c3QgKGN0eHQsIDAsCisgICAgICBnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoCisgICAgICAgIGdj Y19qaXRfZnVuY3Rpb25fZ2V0X3BhcmFtIChmb28sIDApKSwgdHQpKTsKK30KKwordm9pZAorY3Jl YXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAo dm9pZCkgdXNlcl9kYXRhOworCisgIGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFibGVfY29t cGxleF90eXBlcyAoY3R4dCwgMSk7CisKKyAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAor ICAgIGN0eHQsIDAsIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgIGdjY19qaXRfY29udGV4 dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxFKSwKKyAgICAiYV9j b21wbGV4X2dsb2JhbF9kb3VibGUiKTsKKyAgCisgIG1ha2VfY29kZTEgKGN0eHQsICJjb21wbGV4 X2Zsb2F0X2ZvbyIsICJjc3FydGYiLCBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVCk7CisgIG1h a2VfY29kZTEgKGN0eHQsICJjb21wbGV4X2RvdWJsZV9mb28iLCAiY3NxcnQiLCBHQ0NfSklUX1RZ UEVfQ09NUExFWF9ET1VCTEUpOworICBtYWtlX2NvZGUxIChjdHh0LCAiY29tcGxleF9sb25nX2Rv dWJsZV9mb28iLCAiY3NxcnRsIiwgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEUpOwor CisjZGVmaW5lIE1BS0VfQ09ERV8yKG5hbWUgLGNvbXBsZXhfdHlwZSwgdGFyZ2V0X3R5cGUpXAor ICBtYWtlX2NvZGUyIChjdHh0LCAjbmFtZSwgR0NDX0pJVF9UWVBFXyAjIyBjb21wbGV4X3R5cGUs IEdDQ19KSVRfVFlQRV8gIyMgdGFyZ2V0X3R5cGUpOworCisjZGVmaW5lIE1BS0VfQ09ERV8yX09V VEVSKG5hbWUsIHR5cGUpXAorICBNQUtFX0NPREVfMihuYW1lICMjIF90b19jaGFyLCB0eXBlLCBD SEFSKVwKKyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fbG9uZ19kb3VibGUsIHR5cGUsIExPTkdf RE9VQkxFKVwKKyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fZG91YmxlLCB0eXBlLCBET1VCTEUp XAorICBNQUtFX0NPREVfMihuYW1lICMjIF90b19mbG9hdCwgdHlwZSwgRkxPQVQpXAorICBNQUtF X0NPREVfMihuYW1lICMjIF90b19zaWduZWRfY2hhciwgdHlwZSwgU0lHTkVEX0NIQVIpXAorICBN QUtFX0NPREVfMihuYW1lICMjIF90b19zaG9ydCwgdHlwZSwgU0hPUlQpXAorICBNQUtFX0NPREVf MihuYW1lICMjIF90b19pbnQsIHR5cGUsIElOVClcCisgIE1BS0VfQ09ERV8yKG5hbWUgIyMgX3Rv X2xvbmcsIHR5cGUsIExPTkcpXAorICBNQUtFX0NPREVfMihuYW1lICMjIF90b19sb25nX2xvbmcs IHR5cGUsIExPTkdfTE9ORylcCisgIE1BS0VfQ09ERV8yKG5hbWUgIyMgX3RvX3VfY2hhciwgdHlw ZSwgVU5TSUdORURfQ0hBUilcCisgIE1BS0VfQ09ERV8yKG5hbWUgIyMgX3RvX3Vfc2hvcnQsIHR5 cGUsIFVOU0lHTkVEX1NIT1JUKVwKKyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fdV9pbnQsIHR5 cGUsIFVOU0lHTkVEX0lOVClcCisgIE1BS0VfQ09ERV8yKG5hbWUgIyMgX3RvX3VfbG9uZywgdHlw ZSwgVU5TSUdORURfTE9ORylcCisgIE1BS0VfQ09ERV8yKG5hbWUgIyMgX3RvX3VfbG9uZ19sb25n LCB0eXBlLCBVTlNJR05FRF9MT05HX0xPTkcpXAorICBNQUtFX0NPREVfMihuYW1lICMjIF90b19j b21wbGV4X2Zsb2F0LCB0eXBlLCBDT01QTEVYX0ZMT0FUKVwKKyAgTUFLRV9DT0RFXzIobmFtZSAj IyBfdG9fY29tcGxleF9kb3VibGUsIHR5cGUsIENPTVBMRVhfRE9VQkxFKVwKKyAgTUFLRV9DT0RF XzIobmFtZSAjIyBfdG9fY29tcGxleF9sb25nX2RvdWJsZSwgdHlwZSwgQ09NUExFWF9MT05HX0RP VUJMRSkKKworICAvKiBUZXN0IGFsbCB0aGVzZSBjYXN0cyAqLworICBNQUtFX0NPREVfMl9PVVRF UiAoY29tcGxleF9mbG9hdCwgQ09NUExFWF9GTE9BVCkKKyAgTUFLRV9DT0RFXzJfT1VURVIgKGNv bXBsZXhfZG91YmxlLCBDT01QTEVYX0RPVUJMRSkKKyAgTUFLRV9DT0RFXzJfT1VURVIgKGNvbXBs ZXhfbG9uZ19kb3VibGUsIENPTVBMRVhfTE9OR19ET1VCTEUpICAgIAorCisgIC8qIFRlc3Qgc29t ZSBvZiB0aGVzZSBjYXN0cyAqLworICBNQUtFX0NPREVfMl9PVVRFUih1bnNpZ25lZF9sb25nLCBV TlNJR05FRF9MT05HKQorICBNQUtFX0NPREVfMl9PVVRFUihmbG9hdCwgRkxPQVQpCisgIE1BS0Vf Q09ERV8yX09VVEVSKGludCwgSU5UKQorCisgIC8qIFdyaXRpbmcgdGhlIHJlcHJvZHVjZXIgdGFr ZXMgYW5ub3lpbmdseSBsb25nIHRpbWUgd2l0aCBhbGwgdGhlc2UKKyAgICAgZnVuY3Rpb25zIGJl bGxvdywgc28gI2lmIHRoZW0gb3V0LiAqLworI2lmIDAKKyAgTUFLRV9DT0RFXzJfT1VURVIobG9u Z19kb3VibGUsTE9OR19ET1VCTEUpCisgIE1BS0VfQ09ERV8yX09VVEVSKGRvdWJsZSwgRE9VQkxF KQorICBNQUtFX0NPREVfMl9PVVRFUihsb25nX2xvbmcsIExPTkdfTE9ORykKKyAgTUFLRV9DT0RF XzJfT1VURVIobG9uZywgTE9ORykKKyAgTUFLRV9DT0RFXzJfT1VURVIoc2hvcnQsIFVOU0lHTkVE X1NIT1JUKQorICBNQUtFX0NPREVfMl9PVVRFUihzaWduZWRfY2hhciwgU0lHTkVEX0NIQVIpCisg IE1BS0VfQ09ERV8yX09VVEVSKHVuc2lnbmVkX2xvbmdfbG9uZywgVU5TSUdORURfTE9OR19MT05H KQorICBNQUtFX0NPREVfMl9PVVRFUih1bnNpZ25lZF9sb25nLCBVTlNJR05FRF9MT05HKQorICBN QUtFX0NPREVfMl9PVVRFUih1bnNpZ25lZF9pbnQsIFVOU0lHTkVEX0lOVCkKKyAgTUFLRV9DT0RF XzJfT1VURVIodW5zaWduZWRfc2hvcnQsIFVOU0lHTkVEX1NIT1JUKQorICBNQUtFX0NPREVfMl9P VVRFUih1bnNpZ25lZF9jaGFyLCBVTlNJR05FRF9DSEFSKQorCisgIE1BS0VfQ09ERV8yX09VVEVS KGNoYXIsIENIQVIpCisgIC8qIE5vdGU6IE5vIGJvb2wgKi8KKyNlbmRpZgorICAgIAorI3VuZGVm IE1BS0VfQ09ERV8yCisjdW5kZWYgTUFLRV9DT0RFXzJfT1VURVIKK30KKwordHlwZWRlZiBjb21w bGV4IGxvbmcgZG91YmxlICgqbGRfZm9vcCkoKTsKK3R5cGVkZWYgY29tcGxleCBkb3VibGUgKCpk X2Zvb3ApKCk7Cit0eXBlZGVmIGNvbXBsZXggZmxvYXQgKCpmX2Zvb3ApKCk7CisKKyNkZWZpbmUg Rk9PX3RvX0JBUihmb28sIGZvb190eHQpIFwKK3R5cGVkZWYgbG9uZyBsb25nICgqIGZvb190eHQg IyMgX3RvX2xsKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgbG9uZyAoKiBmb29fdHh0ICMjIF90 b19sKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgaW50ICgqIGZvb190eHQgIyMgX3RvX2kpKF9D b21wbGV4IGZvbyk7XAordHlwZWRlZiBzaG9ydCAoKiBmb29fdHh0ICMjIF90b19oKShfQ29tcGxl eCBmb28pO1wKK3R5cGVkZWYgc2lnbmVkIGNoYXIgKCogZm9vX3R4dCAjIyBfdG9fc2MpKF9Db21w bGV4IGZvbyk7XAordHlwZWRlZiBjaGFyICgqIGZvb190eHQgIyMgX3RvX2MpKF9Db21wbGV4IGZv byk7XAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgKCogZm9vX3R4dCAjIyBfdG9fdWxsKShf Q29tcGxleCBmb28pO1wKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAoKiBmb29fdHh0ICMjIF90b191 bCkoX0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIHVuc2lnbmVkIGludCAoKiBmb29fdHh0ICMjIF90 b191aSkoX0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICgqIGZvb190eHQg IyMgX3RvX3VoKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAoKiBmb29f dHh0ICMjIF90b191YykoX0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIGRvdWJsZSAoKiBmb29fdHh0 ICMjIF90b19kKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgZmxvYXQgKCogZm9vX3R4dCAjIyBf dG9fZikoX0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIGxvbmcgZG91YmxlICgqIGZvb190eHQgIyMg X3RvX2xkKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgX0NvbXBsZXggZG91YmxlICgqIGZvb190 eHQgIyMgX3RvX2NkKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgX0NvbXBsZXggZmxvYXQgKCog Zm9vX3R4dCAjIyBfdG9fY2YpKF9Db21wbGV4IGZvbyk7XAordHlwZWRlZiBfQ29tcGxleCBsb25n IGRvdWJsZSAoKiBmb29fdHh0ICMjIF90b19jbGQpKF9Db21wbGV4IGZvbyk7XAordHlwZWRlZiBf Qm9vbCAoKiBmb29fdHh0ICMjIF90b19iKShfQ29tcGxleCBmb28pOworIAorRk9PX3RvX0JBUiAo ZmxvYXQsIGNmKQorRk9PX3RvX0JBUiAoZG91YmxlLCBjZCkKK0ZPT190b19CQVIgKGxvbmcgZG91 YmxlLCBjbGQpCisgICAgIAorI3VuZGVmIEZPT190b19CQVIKKyAgCit2b2lkCit2ZXJpZnlfY29k ZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICBD SEVDS19OT05fTlVMTCAocmVzdWx0KTsKKworICB7CisgICB7LyogSnVzdCBjaGVjayB0aGF0IHdl IGNhbiBnZXQgdGhlIGdsb2JhbC4gKi8KKyAgICAgX0NvbXBsZXggZG91YmxlICpkID0gZ2NjX2pp dF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiYV9jb21wbGV4X2dsb2JhbF9kb3VibGUiKTsK KyAgICAgQ0hFQ0tfTk9OX05VTEwgKGQpOworICAgfQorICB9CisgIHsvKiBDaGVjayB0aGUgc3F1 YXJlIHJvb3R5IHRoaW5nLiAqLworICAgeyAKKyAgICAgZF9mb29wIGRfZm9vcCA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV9mb28iKTsKKyAgICAgQ0hF Q0tfTk9OX05VTEwgKGRfZm9vcCk7CisKKyAgICAgY29tcGxleCBkb3VibGUgcSA9IDIuICsgMi5p OworICAgICBjb21wbGV4IGRvdWJsZSByZWYgPSBjc3FydCAocSAqIDIuKTsKKyAgICAgY29tcGxl eCBkb3VibGUgYW5zID0gZF9mb29wIChxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKHJlZiwgYW5zKTsK KyAgIH0KKyAgIHsKKyAgICAgZl9mb29wIGZfZm9vcCA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2Rl IChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X2ZvbyIpOworICAgICBDSEVDS19OT05fTlVMTCAoZl9m b29wKTsKKworICAgICBjb21wbGV4IGZsb2F0IHEgPSAyLmYgKyAyLmZpOworICAgICBjb21wbGV4 IGZsb2F0IHJlZiA9IGNzcXJ0ZiAocSAqIDIuZik7CisgICAgIGNvbXBsZXggZmxvYXQgYW5zID0g Zl9mb29wIChxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKHJlZiwgYW5zKTsKKyAgIH0KKyAgIHsKKyAg ICAgbGRfZm9vcCBsZF9mb29wID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNv bXBsZXhfbG9uZ19kb3VibGVfZm9vIik7CisgICAgIENIRUNLX05PTl9OVUxMIChsZF9mb29wKTsK KworICAgICBjb21wbGV4IGxvbmcgZG91YmxlIHEgPSAyLkwgKyAyLkxpOworICAgICBjb21wbGV4 IGxvbmcgZG91YmxlIHJlZiA9IGNzcXJ0bCAocSAqIDIuTCk7CisgICAgIGNvbXBsZXggbG9uZyBk b3VibGUgYW5zID0gbGRfZm9vcCAocSk7CisgICAgIENIRUNLX1ZBTFVFIChyZWYsIGFucyk7Cisg ICB9CisgIH0KKyAgLyogV2l0aCB0aGUgcG93ZXIgb2YgTS13IEMteSAqLworCisgIHsvKiBDYXN0 IGhpdGhlciBhbmQgdGhpdGhlciAqLworICAgeworICAgICBjZl90b19sZCBmbiA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X3RvX2xvbmdfZG91YmxlIik7 CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFm ICsgMi4yZmkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMC4wZmkpLCAx LjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjBmICsgMi4yZmkpLCAwLjBmKTsKKyAgIH0K KyAgIHsKKyAgICAgY2ZfdG9fZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJjb21wbGV4X2Zsb2F0X3RvX2RvdWJsZSIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOwor CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDIuMmZpKSwgMS4xZik7CisgICAgIENIRUNL X1ZBTFVFIChmbiAoMS4xZiArIDAuMGZpKSwgMS4xZik7CisgICAgIENIRUNLX1ZBTFVFIChmbiAo MC4wZiArIDIuMmZpKSwgMC4wZik7CisgICB9CisgICB7CisgICAgIGNmX3RvX2YgZm4gPSBnY2Nf aml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b19mbG9hdCIpOwor ICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiAr IDIuMmZpKSwgMS4xZik7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDAuZmkpLCAxLjFm KTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLmYgKyAyLjJmaSksIDAuZik7CisgICB9CisgICB7 CisgICAgIGNmX3RvX2xsIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNv bXBsZXhfZmxvYXRfdG9fbG9uZ19sb25nIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisK KyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMi4yZmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLjFmICsgMC5maSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuZiArIDIu MmZpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNmX3RvX2wgZm4gPSBnY2Nfaml0X3Jlc3VsdF9n ZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b19sb25nIik7CisgICAgIENIRUNLX05P Tl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMi4yZmkpLCAxKTsK KyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMC5maSksIDEpOworICAgICBDSEVDS19WQUxV RSAoZm4gKDAuZiArIDIuMmZpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNmX3RvX2kgZm4gPSBn Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b19pbnQiKTsK KyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYg KyAyLjJmaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7Cisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAg Y2ZfdG9faCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zs b2F0X3RvX3Nob3J0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tf VkFMVUUgKGZuICgxLjFmICsgMi4yZmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFm ICsgMC5maSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuZiArIDIuMmZpKSwgMCk7Cisg ICB9CisgICB7CisgICAgIGNmX3RvX3NjIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJl c3VsdCwgImNvbXBsZXhfZmxvYXRfdG9fc2lnbmVkX2NoYXIiKTsKKyAgICAgQ0hFQ0tfTk9OX05V TEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOworICAg ICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChm biAoMC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fYyBmbiA9IGdjY19q aXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X3RvX2NoYXIiKTsKKyAg ICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAy LjJmaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7CisgICAg IENIRUNLX1ZBTFVFIChmbiAoMC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2Zf dG9fdWxsIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZmxv YXRfdG9fdV9sb25nX2xvbmciKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBD SEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4g KDEuMWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC5mICsgMi4yZmkpLCAw KTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fdWwgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29k ZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b191X2xvbmciKTsKKyAgICAgQ0hFQ0tfTk9OX05V TEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOworICAg ICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChm biAoMC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fdWkgZm4gPSBnY2Nf aml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b191X2ludCIpOwor ICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiAr IDIuMmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDAuZmkpLCAxKTsKKyAg ICAgQ0hFQ0tfVkFMVUUgKGZuICgwLmYgKyAyLjJmaSksIDApOworICAgfQorICAgeworICAgICBj Zl90b191aCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zs b2F0X3RvX3Vfc2hvcnQiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVD S19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEu MWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC5mICsgMi4yZmkpLCAwKTsK KyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fdWMgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAo cmVzdWx0LCAiY29tcGxleF9mbG9hdF90b191X2NoYXIiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwg KGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOworICAgICBD SEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAo MC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgfQorICAKKyAgey8qIGNvbXBsZXggZG91YmxlIHRv IC4uLiAqLworICAgeworICAgICBjZF90b19sZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2Rl IChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b19sb25nX2RvdWJsZSIpOworICAgICBDSEVDS19O T05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEuMSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEuMSk7CisgICAgIENIRUNLX1ZB TFVFIChmbiAoMC4wICsgMi4yaSksIDAuKTsKKyAgIH0KKyAgIHsKKyAgICAgY2RfdG9fZCBmbiA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b19kb3Vi bGUiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4g KDEuMWYgKyAyLjJmaSksIDEuMWYpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLjBm aSksIDEuMWYpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMGYgKyAyLjJmaSksIDAuMGYpOwor ICAgfQorICAgeworICAgICBjZF90b19mIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJl c3VsdCwgImNvbXBsZXhfZG91YmxlX3RvX2Zsb2F0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChm bik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMi4yZmkpLCAxLjFmKTsKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMC4wZmkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUg KGZuICgwLjBmICsgMi4yZmkpLCAwLjBmKTsKKyAgIH0KKyAgIHsKKyAgICAgY2RfdG9fbGwgZm4g PSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9kb3VibGVfdG9fbG9u Z19sb25nIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUg KGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSks IDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsK KyAgICAgY2RfdG9fbCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21w bGV4X2RvdWJsZV90b19sb25nIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAo MS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwKTsK KyAgIH0KKyAgIHsKKyAgICAgY2RfdG9faSBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChy ZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b19pbnQiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZu KTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tf VkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsg Mi4yaSksIDApOworICAgfQorICAgeworICAgICBjZF90b19oIGZuID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZG91YmxlX3RvX3Nob3J0Iik7CisgICAgIENIRUNL X05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19WQUxV RSAoZm4gKDAuMCArIDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2RfdG9fc2MgZm4gPSBn Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9kb3VibGVfdG9fc2lnbmVk X2NoYXIiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAo Zm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwg MSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgewor ICAgICBjZF90b19jIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBs ZXhfZG91YmxlX3RvX2NoYXIiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBD SEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgx LjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOwor ICAgfQorICAgeworICAgICBjZF90b191bGwgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAo cmVzdWx0LCAiY29tcGxleF9kb3VibGVfdG9fdV9sb25nX2xvbmciKTsKKyAgICAgQ0hFQ0tfTk9O X05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAg ICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChm biAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAgICBjZF90b191bCBmbiA9IGdjY19q aXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b191X2xvbmciKTsK KyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSAr IDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAg IENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAgICBjZF90 b191aSBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJs ZV90b191X2ludCIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZB TFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAu MGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9Cisg ICB7CisgICAgIGNkX3RvX3VoIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwg ImNvbXBsZXhfZG91YmxlX3RvX3Vfc2hvcnQiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsK KworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4y aSksIDApOworICAgfQorICAgeworICAgICBjZF90b191YyBmbiA9IGdjY19qaXRfcmVzdWx0X2dl dF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b191X2NoYXIiKTsKKyAgICAgQ0hFQ0tf Tk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsK KyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVF IChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICB9CisKKyAgey8qIGNvbXBsZXggbG9uZyBk b3VibGUgdG8gLi4uICovCisgICB7CisgICAgIGNsZF90b19sZCBmbiA9IGdjY19qaXRfcmVzdWx0 X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX3RvX2xvbmdfZG91YmxlIik7 CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFM ICsgMi4yTGkpLCAxLjFMKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMC4wTGkpLCAx LjFMKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjBMICsgMi4yTGkpLCAwLik7CisgICB9Cisg ICB7CisgICAgIGNsZF90b19kIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwg ImNvbXBsZXhfbG9uZ19kb3VibGVfdG9fZG91YmxlIik7CisgICAgIENIRUNLX05PTl9OVUxMIChm bik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMi4yTGkpLCAxLjEpOworICAgICBD SEVDS19WQUxVRSAoZm4gKDEuMUwgKyAwLjBMaSksIDEuMSk7CisgICAgIENIRUNLX1ZBTFVFIChm biAoMC4wTCArIDIuMkxpKSwgMC4pOworICAgfQorICAgeworICAgICBjbGRfdG9fZiBmbiA9IGdj Y19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX3RvX2Zs b2F0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgxLjFMICsgMi4yTGkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMC4w TGkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjBMICsgMi4yTGkpLCAwLik7Cisg ICB9ICAgIAorICAgeworICAgICBjbGRfdG9fbGwgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29k ZSAocmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV90b19sb25nX2xvbmciKTsKKyAgICAgQ0hF Q0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAx KTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZB TFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAgICBjbGRfdG9fbCBmbiA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX3Rv X2xvbmciKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAo Zm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwg MSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgewor ICAgICBjbGRfdG9faSBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21w bGV4X2xvbmdfZG91YmxlX3RvX2ludCIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxVRSAo Zm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwg MCk7CisgICB9CisgICB7CisgICAgIGNsZF90b19oIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2Nv ZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfdG9fc2hvcnQiKTsKKyAgICAgQ0hFQ0tf Tk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsK KyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVF IChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAgICBjbGRfdG9fc2MgZm4gPSBn Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV90b19z aWduZWRfY2hhciIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZB TFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAu MGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9Cisg ICB7CisgICAgIGNsZF90b19jIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwg ImNvbXBsZXhfbG9uZ19kb3VibGVfdG9fY2hhciIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4p OworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19W QUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAy LjJpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNsZF90b191bGwgZm4gPSBnY2Nfaml0X3Jlc3Vs dF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV90b191X2xvbmdfbG9uZyIp OworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4x ICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAg ICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNs ZF90b191bCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xv bmdfZG91YmxlX3RvX3VfbG9uZyIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAg IENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4g KDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7 CisgICB9CisgICB7CisgICAgIGNsZF90b191aSBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2Rl IChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX3RvX3VfaW50Iik7CisgICAgIENIRUNLX05P Tl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7Cisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAo Zm4gKDAuMCArIDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2xkX3RvX3VoIGZuID0gZ2Nj X2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfdG9fdV9z aG9ydCIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChm biAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAx KTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9CisgICB7Cisg ICAgIGNsZF90b191YyBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21w bGV4X2xvbmdfZG91YmxlX3RvX3VfY2hhciIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOwor CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxV RSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJp KSwgMCk7CisgICB9CisgIH0KKworICB7IC8qIFRyeSBjYXN0aW5nIGNvbXBsZXggdHlwZXMgdG8g Y29tcGxleCB0eXBlcyAqLworICAgeworICAgICBjbGRfdG9fY2xkIGZuID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfdG9fY29tcGxleF9sb25n X2RvdWJsZSIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVF IChmbiAoMS4xTCArIDIuMkxpKSwgMS4xTCArIDIuMkxpKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgxLjFMICsgMC4wTGkpLCAxLjFMICsgMC4wTGkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAu MEwgKyAyLjJMaSksIDAuMEwgKyAyLjJMaSk7CisgICB9CisgICB7CisgICAgIGNsZF90b19jZCBm biA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91Ymxl X3RvX2NvbXBsZXhfZG91YmxlIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMi4yTGkpLCAxLjEgKyAyLjJpKTsKKyAgICAgQ0hFQ0tf VkFMVUUgKGZuICgxLjFMICsgMC4wTGkpLCAxLjEgKyAwLjBpKTsKKyAgICAgQ0hFQ0tfVkFMVUUg KGZuICgwLjBMICsgMi4yTGkpLCAwLjAgKyAyLjJpKTsKKyAgIH0KKyAgIHsKKyAgICAgY2xkX3Rv X2NmIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19k b3VibGVfdG9fY29tcGxleF9mbG9hdCIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xTCArIDIuMkxpKSwgMS4xZiArIDIuMmZpKTsKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMC4wTGkpLCAxLjFmICsgMC4wZmkpOworICAgICBDSEVD S19WQUxVRSAoZm4gKDAuMEwgKyAyLjJMaSksIDAuMGYgKyAyLjJmaSk7CisgICB9CisgICB7Cisg ICAgIGNkX3RvX2NsZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21w bGV4X2RvdWJsZV90b19jb21wbGV4X2xvbmdfZG91YmxlIik7CisgICAgIENIRUNLX05PTl9OVUxM IChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMS4xICsgMi4yaSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEuMSArIDAuMGkpOworICAgICBD SEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwLjAgKyAyLjJpKTsKKyAgIH0KKyAgIHsKKyAg ICAgY2RfdG9fY2QgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxl eF9kb3VibGVfdG9fY29tcGxleF9kb3VibGUiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsK KworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxLjEgKyAyLjJpKTsKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMS4xICsgMC4waSk7CisgICAgIENIRUNLX1ZB TFVFIChmbiAoMC4wICsgMi4yaSksIDAuMCArIDIuMmkpOworICAgfQorICAgeworICAgICBjZF90 b19jZiBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJs ZV90b19jb21wbGV4X2Zsb2F0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMS4xZiArIDIuMmZpKTsKKyAgICAgQ0hFQ0tf VkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMS4xZiArIDAuMGZpKTsKKyAgICAgQ0hFQ0tfVkFMVUUg KGZuICgwLjAgKyAyLjJpKSwgMC4wZiArIDIuMmZpKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9f Y2xkIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZmxvYXRf dG9fY29tcGxleF9sb25nX2RvdWJsZSIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEuMWYgKyAyLjJmaSk7CisgICAgIENI RUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEuMWYgKyAwLjBmaSk7CisgICAgIENIRUNLX1ZB TFVFIChmbiAoMC4wICsgMi4yaSksIDAuMGYgKyAyLjJmaSk7CisgICB9CisgICB7CisgICAgIGNm X3RvX2NkIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZmxv YXRfdG9fY29tcGxleF9kb3VibGUiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAg ICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxLjFmICsgMi4yZmkpOworICAgICBDSEVD S19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxLjFmICsgMC4wZmkpOworICAgICBDSEVDS19WQUxV RSAoZm4gKDAuMCArIDIuMmkpLCAwLjBmICsgMi4yZmkpOworICAgfQorICAgeworICAgICBjZl90 b19jZiBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zsb2F0 X3RvX2NvbXBsZXhfZmxvYXQiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBD SEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxLjFmICsgMi4yZmkpOworICAgICBDSEVDS19W QUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxLjFmICsgMC4wZmkpOworICAgICBDSEVDS19WQUxVRSAo Zm4gKDAuMCArIDIuMmkpLCAwLjBmICsgMi4yZmkpOworICAgfQorICB9CisKKyAgey8qIFRlc3Qg c29tZSBvZiB0aGUgbm9uLWNvbXBsZXggdG8gbm9uLWNvbXBsZXgvY29tcGxleCBjYXN0cyAgKi8K KyAgICB7CisgICAgICBfQ29tcGxleCBmbG9hdCgqZm4pKGZsb2F0KSA9IGdjY19qaXRfcmVzdWx0 X2dldF9jb2RlIChyZXN1bHQsICJmbG9hdF90b19jb21wbGV4X2Zsb2F0Iik7CisgICAgICBDSEVD S19WQUxVRSAoIGZuKDMuZiksIDMuZik7CisgICAgfQorICAgIHsKKyAgICAgIF9Db21wbGV4IGZs b2F0KCpmbikoaW50KSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJpbnRfdG9f Y29tcGxleF9mbG9hdCIpOworICAgICAgQ0hFQ0tfVkFMVUUgKCBmbigtMyksIC0zLmYpOworICAg IH0KKyAgICB7CisgICAgICBfQ29tcGxleCBkb3VibGUoKmZuKSh1bnNpZ25lZCBsb25nKSA9IGdj Y19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJ1bnNpZ25lZF9sb25nX3RvX2NvbXBsZXhf ZG91YmxlIik7CisgICAgICBDSEVDS19WQUxVRSAoIGZuKDMpLCAzLmYpOworICAgIH0KKyAgICB7 CisgICAgICBkb3VibGUoKmZuKShpbnQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3Vs dCwgImludF90b19kb3VibGUiKTsKKyAgICAgIENIRUNLX1ZBTFVFICggZm4oMyksIDMuZik7Cisg ICAgfQorICAgIHsKKyAgICAgIGludCgqZm4pKGZsb2F0KSA9IGdjY19qaXRfcmVzdWx0X2dldF9j b2RlIChyZXN1bHQsICJmbG9hdF90b19pbnQiKTsKKyAgICAgIENIRUNLX1ZBTFVFICggZm4oMy4p LCAzKTsKKyAgICB9CisgIH0gCit9Ci0tIAoyLjMwLjIKCkZyb20gYzY3YzAyN2NlNTUzMjkxNTk0 MTMzYWI3ZTllNzBiNTk2MDU3MGJhYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogUGV0 dGVyIFRvbW5lciA8dG9tbmVyQGt0aC5zZT4KRGF0ZTogVGh1LCAxNiBTZXAgMjAyMSAwOTowNDow NyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBXSVAKCi0tLQogZ2NjL2ppdC9kb2NzL3RvcGlj cy9leHByZXNzaW9ucy5yc3QgICAgICAgICAgfCAgNDUgKy0KIGdjYy9qaXQvaml0LXBsYXliYWNr LmMgICAgICAgICAgICAgICAgICAgICAgIHwgMTQ1ICsrKysrLQogZ2NjL2ppdC9qaXQtcmVjb3Jk aW5nLmMgICAgICAgICAgICAgICAgICAgICAgfCA0NjggKysrKysrKysrKysrKysrKystLQogZ2Nj L2ppdC9saWJnY2NqaXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDYgKysKIGdjYy9q aXQvbGliZ2Njaml0LmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDM5ICstCiBnY2Mvaml0 L2xpYmdjY2ppdC5tYXAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBnY2MvdGVzdHN1 aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCB8ICAgNyArCiBnY2MvdGVzdHN1aXRl L2ppdC5kZy90ZXN0LWxvbmctbGl0ZXJhbHMuYyAgICB8IDI4MyArKysrKysrKysrKwogOCBmaWxl cyBjaGFuZ2VkLCA5OTYgaW5zZXJ0aW9ucygrKSwgNDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1sb25nLWxpdGVyYWxzLmMKCmRpZmYg LS1naXQgYS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdCBiL2djYy9qaXQvZG9j cy90b3BpY3MvZXhwcmVzc2lvbnMucnN0CmluZGV4IGZjMDM0NWMzZTFkLi40MmY2MDhmZWIwNCAx MDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QKKysrIGIvZ2Nj L2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QKQEAgLTcwLDYgKzcwLDE4IEBAIFNpbXBs ZSBleHByZXNzaW9ucwogICAgR2l2ZW4gYSBudW1lcmljIHR5cGUgKGludGVnZXIgb3IgZmxvYXRp bmcgcG9pbnQpLCBidWlsZCBhbiBydmFsdWUgZm9yCiAgICB0aGUgZ2l2ZW4gY29uc3RhbnQgOmM6 dHlwZTpgbG9uZ2AgdmFsdWUuCiAKKy4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9ydmFsdWUgKlwKKyAg ICAgICAgICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2xvbmcgKGdj Y19qaXRfY29udGV4dCAqY3R4dCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv bmcgbG9uZyB2YWx1ZSkKKworICAgR2l2ZW4gYSBudW1lcmljIHR5cGUgKGludGVnZXIgb3IgZmxv YXRpbmcgcG9pbnQpLCBidWlsZCBhbiBydmFsdWUgZm9yCisgICB0aGUgZ2l2ZW4gY29uc3RhbnQg OmM6dHlwZTpgbG9uZyBsb25nYCB2YWx1ZS4KKworICAgVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQg aW4gOnJlZjpgTElCR0NDSklUX0FCSV8xNmA7CisgICB5b3UgY2FuIHRlc3QgZm9yIGl0cyBwcmVz ZW5jZSB1c2luZworICAgICAgIGAjaWZkZWYgTElCR0NDSklUX0hBVkVfTE9OR0xPTkdfQ09OU1RB TlRTYAorCiAuLiBmdW5jdGlvbjo6ICBnY2Nfaml0X3J2YWx1ZSAqZ2NjX2ppdF9jb250ZXh0X3pl cm8gKGdjY19qaXRfY29udGV4dCAqY3R4dCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSkKIApA QCAtOTksNyArMTExLDE5IEBAIFNpbXBsZSBleHByZXNzaW9ucwogICAgdGhlIGdpdmVuIGNvbnN0 YW50IDpjOnR5cGU6YGRvdWJsZWAgdmFsdWUuCiAKIC4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9ydmFs dWUgKlwKLQkgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91 YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIFwKKwkgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2xvbmdfZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Nj X2ppdF90eXBlICpudW1lcmljX3R5cGUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3VibGUgdmFsdWUpCisKKyAgIEdp dmVuIGEgZmxvYXRpbmcgcG9pbnQgdHlwZSwgYnVpbGQgYW4gcnZhbHVlIGZvcgorICAgdGhlIGdp dmVuIGNvbnN0YW50IDpjOnR5cGU6YGxvbmcgZG91YmxlYC4KKworICAgVGhpcyBmdW5jdGlvbiB3 YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8xNmA7CisgICB5b3UgY2FuIHRlc3QgZm9y IGl0cyBwcmVzZW5jZSB1c2luZworICAgICAgIGAjaWZkZWYgTElCR0NDSklUX0hBVkVfTE9OR0xP TkdfQ09OU1RBTlRTYAorCisuLiBmdW5jdGlvbjo6IGdjY19qaXRfcnZhbHVlICpcCisgICAgICAg ICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGUgKGdj Y19qaXRfY29udGV4dCAqY3R4dCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwg XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQ29tcGxleCBkb3VibGUgdmFsdWUpCiAKQEAgLTEwNyw2ICsxMzEsMjMgQEAgU2lt cGxlIGV4cHJlc3Npb25zCiAgICB0aGUgZ2l2ZW4gY29uc3RhbnQgOmM6dHlwZTpgX0NvbXBsZXgg ZG91YmxlYC4gV2hlbiB0aGUgcmVzdWx0IHR5cGUgaXMKICAgIG5vbi1jb21wbGV4LCB0aGUgaW1h Z2luYXJ5IHBhcnQgaXMgZGlzY2FyZGVkLgogCisgICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBp biA6cmVmOmBMSUJHQ0NKSVRfQUJJXzE2YDsKKyAgIHlvdSBjYW4gdGVzdCBmb3IgaXRzIHByZXNl bmNlIHVzaW5nCisgICAgICAgYCNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DT01QTEVYYAorCisuLiBm dW5jdGlvbjo6IGV4dGVybiBnY2Nfaml0X3J2YWx1ZSAqXAorCSAgICAgIGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9sb25nX2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpj dHh0LFwKKwkJCQkJICAgICAgICAgICAgIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLFwKKwkJ CQkJICAgICAgICAgICAgIF9Db21wbGV4IGxvbmcgZG91YmxlIHZhbHVlKTsKKworICAgR2l2ZW4g YSBmbG9hdGluZyBwb2ludCB0eXBlLCBidWlsZCBhbiBydmFsdWUgZm9yCisgICB0aGUgZ2l2ZW4g Y29uc3RhbnQgOmM6dHlwZTpgX0NvbXBsZXggbG9uZyBkb3VibGVgLiBXaGVuIHRoZSByZXN1bHQg dHlwZSBpcworICAgbm9uLWNvbXBsZXgsIHRoZSBpbWFnaW5hcnkgcGFydCBpcyBkaXNjYXJkZWQu CisKKyAgIFRoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMTZg OworICAgeW91IGNhbiB0ZXN0IGZvciBpdHMgcHJlc2VuY2UgdXNpbmcKKyAgICAgICBgI2lmZGVm IExJQkdDQ0pJVF9IQVZFX0xPTkdMT05HX0NPTlNUQU5UU2AKKwogLi4gZnVuY3Rpb246OiBnY2Nf aml0X3J2YWx1ZSAqXAogICAgICAgICAgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX3B0ciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBcCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKnBvaW50ZXJfdHlwZSwg XApAQCAtNDAzLDcgKzQ0NCw3IEBAIEJpbmFyeSBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAg ICAgICAgIEMgZXF1aXZhbGVudCAgICBTdXBwb3J0ZWQgb3BlcmFuZCB0eXBlCiAgICB0aGUgaW1h Z2luYXJ5LiBOZWdhdGl2ZSB6ZXJvZXMgYXJlIHByZXNlcnZlZAogICAgYW5kIEluZjpzIGRvIG5v dCBsZWFkIHRvIE5hTnMuCiAKLSAgIFRoaXMgb3BlcmF0b3IgIHdhcyBhZGRlZCBpbiBMSUJHQ0NK SVRfQUJJXzE2OworICAgVGhpcyBvcGVyYXRvciAgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJ VF9BQklfMTZgOwogICAgeW91IGNhbiB0ZXN0IGZvciBpdHMgcHJlc2VuY2UgdXNpbmcKICAgICAg ICBgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NPTVBMRVhgCiAgICAKZGlmZiAtLWdpdCBhL2djYy9q aXQvaml0LXBsYXliYWNrLmMgYi9nY2Mvaml0L2ppdC1wbGF5YmFjay5jCmluZGV4IDhlNDk3MTk1 OGMzLi5mNjJjZmM1YzgwNCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suYworKysg Yi9nY2Mvaml0L2ppdC1wbGF5YmFjay5jCkBAIC02MSw2ICs2MSwxMyBAQCBhbG9uZyB3aXRoIEdD Qzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2RlZmluZSBTRVRfREVDTF9K SVRfQklUX0ZJRUxEKE5PREUpIFwKICAgKERFQ0xfTEFOR19GTEFHXzQgKEZJRUxEX0RFQ0xfQ0hF Q0sgKE5PREUpKSA9IDEpCiAKKy8qICJUaGVyZSBhcmUgYWx3YXlzIFthdGxlYXN0XSAzMiBiaXRz IGluIGVhY2ggbG9uZywgbm8gbWF0dGVyIHRoZQorICAgIHNpemUgb2YgdGhlIGhvc3RzIGxvbmcu ICBXZSBoYW5kbGUgZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb25zCisgICAgd2l0aCB1cCB0 byAxOTIgYml0cyIsIHNheXMgbmF0aXZlX2ludGVycHJldF9yZWFsKCkgaW4gZm9sZC1jb25zdC5j LgorICAgIFRoYXQgbWVhbnMgNiBsb25ncyB0byBzdG9yZSBhIGxvbmcgZG91YmxlLiBXZSdsbCBt YWtlIGl0IDggdG8KKyAgICBiZSBzYWZlIHdpdGggcGFkZGluZy4gKi8KKyNkZWZpbmUgTl9MT05H U19MRE9VQkxFIDgKKwogLyogZ2NjOjpqaXQ6OnBsYXliYWNrOjpjb250ZXh0OjpidWlsZF9jYXN0 IHVzZXMgdGhlIGNvbnZlcnQuaCBBUEksCiAgICB3aGljaCBpbiB0dXJuIHJlcXVpcmVzIHRoZSBm cm9udGVuZCB0byBwcm92aWRlIGEgImNvbnZlcnQiCiAgICBmdW5jdGlvbiwgYXBwYXJlbnRseSBh cyBhIGZhbGxiYWNrIGZvciBjYXN0cyB0aGF0IGNhbiBiZSBzaW1wbGlmaWVkCkBAIC03NDMsMTUg Kzc1MCwxNCBAQCBuZXdfcnZhbHVlX2Zyb21fY29uc3QgPGludD4gKHR5cGUgKnR5cGUsCiAgICAg fQogfQogCi0vKiBTcGVjaWFsaXphdGlvbiBvZiBtYWtpbmcgYW4gcnZhbHVlIGZyb20gYSBjb25z dCwgZm9yIGhvc3QgPGxvbmc+LiAgKi8KKy8qIFNwZWNpYWxpemF0aW9uIG9mIG1ha2luZyBhbiBy dmFsdWUgZnJvbSBhIGNvbnN0LCBmb3IgaG9zdCA8bG9uZyBsb25nPi4gKi8KIAogdGVtcGxhdGUg PD4KIHJ2YWx1ZSAqCiBjb250ZXh0OjoKLW5ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZz4gKHR5 cGUgKnR5cGUsCi0JCQkgICAgICBsb25nIHZhbHVlKQorbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxs b25nIGxvbmc+ICh0eXBlICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsb25nIGxvbmcgdmFsdWUpCiB7Ci0gIC8vIEZJWE1FOiB0eXBlLWNoZWNraW5nLCBvciBjb2Vy Y2lvbj8KICAgdHJlZSBpbm5lcl90eXBlID0gdHlwZS0+YXNfdHJlZSAoKTsKICAgaWYgKElOVEVH UkFMX1RZUEVfUCAoaW5uZXJfdHlwZSkpCiAgICAgewpAQCAtNzg2LDYgKzc5MiwxNyBAQCBuZXdf cnZhbHVlX2Zyb21fY29uc3QgPGxvbmc+ICh0eXBlICp0eXBlLAogICAgIH0KIH0KIAorLyogU3Bl Y2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEgY29uc3QsIGZvciBob3N0IDxs b25nPi4gICovCisKK3RlbXBsYXRlIDw+CitydmFsdWUgKgorY29udGV4dDo6CituZXdfcnZhbHVl X2Zyb21fY29uc3QgPGxvbmc+ICh0eXBlICp0eXBlLAorCQkJICAgICAgbG9uZyB2YWx1ZSkKK3sK KyAgcmV0dXJuIG5ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBsb25nPiAodHlwZSwgdmFsdWUp OworfQorCiAvKiBTcGVjaWFsaXphdGlvbiBvZiBtYWtpbmcgYW4gcnZhbHVlIGZyb20gYSBjb25z dCwgZm9yIGhvc3QgPGRvdWJsZT4uICAqLwogCiB0ZW1wbGF0ZSA8PgpAQCAtODQ3LDYgKzg2NCw2 NSBAQCBuZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT4gKHR5cGUgKnR5cGUsCiAgICAgfQog fQogCisvKiBTcGVjaWFsaXphdGlvbiBvZiBtYWtpbmcgYW4gcnZhbHVlIGZyb20gYSBjb25zdCwg Zm9yIGhvc3QgPGRvdWJsZT4uICAqLworCit0ZW1wbGF0ZSA8PgorcnZhbHVlICoKK2NvbnRleHQ6 OgorbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGRvdWJsZT4gKHR5cGUgKnR5cGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3VibGUgdmFsdWUpCit7Cisg IHRyZWUgaW5uZXJfdHlwZSA9IHR5cGUtPmFzX3RyZWUgKCk7CisKKyAgc2NhbGFyX2Zsb2F0X21v ZGUgbW9kZSA9IFNDQUxBUl9GTE9BVF9UWVBFX01PREUgKGxvbmdfZG91YmxlX3R5cGVfbm9kZSk7 CisKKyAgdW5pb24KKyAgeworICAgIGxvbmcgZG91YmxlIGFzX2xvbmdfZG91YmxlOworICAgIHVp bnQzMl90IGFzX3VpbnQzMnNbTl9MT05HU19MRE9VQkxFXTsKKyAgfSB1X3JlYWwsIHVfaW1hZzsK KworICB1X3JlYWwuYXNfbG9uZ19kb3VibGUgPSB2YWx1ZTsKKworICBsb25nIGludCBhc19sb25n X2ludHNbTl9MT05HU19MRE9VQkxFXTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IE5fTE9OR1Nf TERPVUJMRTsgaSsrKQorICAgIGFzX2xvbmdfaW50c1tpXSA9IHVfcmVhbC5hc191aW50MzJzW2ld OworCisgIFJFQUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlOworICByZWFsX2Zyb21fdGFyZ2V0ICgm cmVhbF92YWx1ZSwgYXNfbG9uZ19pbnRzLCBtb2RlKTsKKworICBpZiAoQ09NUExFWF9GTE9BVF9U WVBFX1AgKGlubmVyX3R5cGUpKQorICAgIHsKKyAgICAgIHRyZWUgdHJlZV9yZWFsOworICAgICAg dHJlZSB0cmVlX2ltYWc7CisgICAgICB0cmVlIHJlYWxfdHlwZTsKKworICAgICAgUkVBTF9WQUxV RV9UWVBFIGltYWdfdmFsdWU7CisKKyAgICAgIGxvbmcgaW50IHplcm9fYXNfbG9uZ19pbnRzW05f TE9OR1NfTERPVUJMRV07CisgICAgICB1X2ltYWcuYXNfbG9uZ19kb3VibGUgPSAwLjsKKworICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOX0xPTkdTX0xET1VCTEU7IGkrKykKKyAgICAgICAgemVy b19hc19sb25nX2ludHNbaV0gPSB1X2ltYWcuYXNfdWludDMyc1tpXTsKKworICAgICAgcmVhbF9m cm9tX3RhcmdldCAoJmltYWdfdmFsdWUsIHplcm9fYXNfbG9uZ19pbnRzLCBtb2RlKTsKKworICAg ICAgcmVhbF90eXBlID0gY29tcGxleF9yZWFsX3RvX3JlYWwgKGlubmVyX3R5cGUpOworCisgICAg ICB0cmVlX3JlYWwgPSBidWlsZF9yZWFsIChyZWFsX3R5cGUsIHJlYWxfdmFsdWUpOworICAgICAg dHJlZV9pbWFnID0gYnVpbGRfcmVhbCAocmVhbF90eXBlLCBpbWFnX3ZhbHVlKTsKKworICAgICAg dHJlZSBpbm5lciA9IGJ1aWxkX2NvbXBsZXggKGlubmVyX3R5cGUsIHRyZWVfcmVhbCwgdHJlZV9p bWFnKTsKKyAgICAgIHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgdHJlZSBpbm5lciA9IGJ1aWxkX3JlYWwgKGlubmVyX3R5cGUsIHJl YWxfdmFsdWUpOworICAgICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9 Cit9CisKIC8qIFNwZWNpYWxpemF0aW9uIG9mIG1ha2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0 LAogICAgZm9yIGhvc3QgPGRvdWJsZSBfQ29tcGxleD4uICovCiAKQEAgLTg1NCw3ICs5MzAsNyBA QCB0ZW1wbGF0ZSA8PgogcnZhbHVlICoKIGNvbnRleHQ6OgogbmV3X3J2YWx1ZV9mcm9tX2NvbnN0 IDxfQ29tcGxleCBkb3VibGU+ICh0eXBlICp0eXBlLAotICAgICAgICAgICAgICAgIF9Db21wbGV4 IGRvdWJsZSAgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Db21wbGV4IGRvdWJsZSAgdmFsdWUpCiB7CiAgIHRyZWUgaW5uZXJfdHlwZSA9IHR5cGUtPmFz X3RyZWUgKCk7CiAKQEAgLTkwMiw2ICs5NzgsNjUgQEAgbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxf Q29tcGxleCBkb3VibGU+ICh0eXBlICp0eXBlLAogICAgIH0KIH0KIAorLyogU3BlY2lhbGl6YXRp b24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEgY29uc3QsCisgICBmb3IgaG9zdCA8X0NvbXBs ZXggbG9uZyBkb3VibGU+LiAqLworCit0ZW1wbGF0ZSA8PgorcnZhbHVlICoKK2NvbnRleHQ6Ogor bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBsb25nIGRvdWJsZT4gKHR5cGUgKnR5cGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBsZXgg bG9uZyBkb3VibGUgdmFsdWUpCit7CisgIHRyZWUgaW5uZXJfdHlwZSA9IHR5cGUtPmFzX3RyZWUg KCk7CisKKyAgc2NhbGFyX2Zsb2F0X21vZGUgbW9kZSA9IFNDQUxBUl9GTE9BVF9UWVBFX01PREUg KGxvbmdfZG91YmxlX3R5cGVfbm9kZSk7CisKKyAgdW5pb24KKyAgeworICAgIGxvbmcgZG91Ymxl IGFzX2xvbmdfZG91YmxlOworICAgIHVpbnQzMl90IGFzX3VpbnQzMnNbTl9MT05HU19MRE9VQkxF XTsKKyAgfSB1X3JlYWwsIHVfaW1hZzsKKworICB1X3JlYWwuYXNfbG9uZ19kb3VibGUgPSBjcmVh bGwodmFsdWUpOworICBsb25nIGludCBhc19sb25nX2ludHNbTl9MT05HU19MRE9VQkxFXTsKKwor ICBmb3IgKGludCBpID0gMDsgaSA8IE5fTE9OR1NfTERPVUJMRTsgaSsrKQorICAgIGFzX2xvbmdf aW50c1tpXSA9IHVfcmVhbC5hc191aW50MzJzW2ldOworCisgIFJFQUxfVkFMVUVfVFlQRSByZWFs X3ZhbHVlOworICByZWFsX2Zyb21fdGFyZ2V0ICgmcmVhbF92YWx1ZSwgYXNfbG9uZ19pbnRzLCBt b2RlKTsKKworICBpZiAoQ09NUExFWF9GTE9BVF9UWVBFX1AgKGlubmVyX3R5cGUpKQorICAgIHsK KyAgICAgIHRyZWUgdHJlZV9yZWFsOworICAgICAgdHJlZSB0cmVlX2ltYWc7CisgICAgICB0cmVl IHJlYWxfdHlwZTsKKworICAgICAgUkVBTF9WQUxVRV9UWVBFIGltYWdfdmFsdWU7CisKKyAgICAg IGxvbmcgaW50IHZhbHVlX2FzX2xvbmdfaW50c1tOX0xPTkdTX0xET1VCTEVdOworICAgICAgdV9p bWFnLmFzX2xvbmdfZG91YmxlID0gY2ltYWdsKHZhbHVlKTsKKworICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBOX0xPTkdTX0xET1VCTEU7IGkrKykKKwl2YWx1ZV9hc19sb25nX2ludHNbaV0gPSB1 X2ltYWcuYXNfdWludDMyc1tpXTsKKworICAgICAgcmVhbF9mcm9tX3RhcmdldCAoJmltYWdfdmFs dWUsIHZhbHVlX2FzX2xvbmdfaW50cywgbW9kZSk7CisKKyAgICAgIHJlYWxfdHlwZSA9IGNvbXBs ZXhfcmVhbF90b19yZWFsIChpbm5lcl90eXBlKTsKKworICAgICAgdHJlZV9yZWFsID0gYnVpbGRf cmVhbCAocmVhbF90eXBlLCByZWFsX3ZhbHVlKTsKKyAgICAgIHRyZWVfaW1hZyA9IGJ1aWxkX3Jl YWwgKHJlYWxfdHlwZSwgaW1hZ192YWx1ZSk7CisKKyAgICAgIHRyZWUgaW5uZXIgPSBidWlsZF9j b21wbGV4IChpbm5lcl90eXBlLCB0cmVlX3JlYWwsIHRyZWVfaW1hZyk7CisgICAgICByZXR1cm4g bmV3IHJ2YWx1ZSAodGhpcywgaW5uZXIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRy ZWUgaW5uZXIgPSBidWlsZF9yZWFsIChpbm5lcl90eXBlLCByZWFsX3ZhbHVlKTsKKyAgICAgIHJl dHVybiBuZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7CisgICAgfQorfQorCiAvKiBTcGVjaWFsaXph dGlvbiBvZiBtYWtpbmcgYW4gcnZhbHVlIGZyb20gYSBjb25zdCwgZm9yIGhvc3QgPHZvaWQgKj4u ICAqLwogCiB0ZW1wbGF0ZSA8PgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMg Yi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuYwppbmRleCA1NjVkMDc4ZDUxNy4uOWQwNzA2MjEzMWUg MTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXJlY29yZGluZy5jCisrKyBiL2djYy9qaXQvaml0LXJl Y29yZGluZy5jCkBAIC0yNyw2ICsyNyw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUg Q09QWUlORzMuICBJZiBub3Qgc2VlCiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjaW5jbHVkZSA8 Y29tcGxleC5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CiAKICNpbmNsdWRlICJqaXQtYnVpbHRpbnMu aCIKICNpbmNsdWRlICJqaXQtcmVjb3JkaW5nLmgiCkBAIC0xNzM0LDggKzE3MzUsNDggQEAgcmVj b3JkaW5nOjpjb250ZXh0OjpkdW1wX3JlcHJvZHVjZXJfdG9fZmlsZSAoY29uc3QgY2hhciAqcGF0 aCkKIAkgICAiIGdjY19qaXRfY29udGV4dF9kdW1wX3JlcHJvZHVjZXJfdG9fZmlsZS5cblxuIik7 CiAgIHByaW50X3ZlcnNpb24gKHIuZ2V0X2ZpbGUgKCksICIgICIsIGZhbHNlKTsKICAgci53cml0 ZSAoIiovXG4iKTsKLSAgci53cml0ZSAoIiNpbmNsdWRlIDxsaWJnY2NqaXQuaD5cblxuIik7Ci0g IHIud3JpdGUgKCIjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC12YXJp YWJsZVwiXG5cbiIpOworICByLndyaXRlICgKKyAgICAiI2luY2x1ZGUgPGxpYmdjY2ppdC5oPlxu IgorICAgICIjaW5jbHVkZSA8bWF0aC5oPlxuIgorICAgICIjaW5jbHVkZSA8Y29tcGxleC5oPlxu IgorICAgICIjaW5jbHVkZSA8c3RyaW5nLmg+XG5cbiIpOworICByLndyaXRlICgiI3ByYWdtYSBH Q0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bnVzZWQtdmFyaWFibGVcIlxuIik7CisgIHIud3Jp dGUgKCIjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC1mdW5jdGlvblwi XG5cbiIpOworICAvKiBUeXBlIHBydW5uaW5nIHVuaW9ucyAqLworICByLndyaXRlICgidW5pb24g ZHVsbCB7IGRvdWJsZSBkOyB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOyB9O1xuXG4iKTsKKyAgci53 cml0ZSAoCisgICAgInVuaW9uIGxkYXJyIHsgbG9uZyBkb3VibGUgbGQ7IHVuc2lnbmVkIGFycltz aXplb2YgKGxvbmcgZG91YmxlKV07fTtcblxuIik7CisKKyAgLyogRnVuY3Rpb25zIGZvciB0eXBl IHB1bm5pbmcgbmFuOnMsIGtlZXBpbmcgYml0IHJlcHJlc2VudGF0aW9uICovCisgIHIud3JpdGUg KAorICAgICIvKiBDb252ZXJ0IHR5cGUgcHVubmVkIHVpbnQgNjQgdG8gZG91YmxlIE5hTi5cbiIK KyAgICAiICAgTWlnaHQgbG9zZS9jb3JydXB0IHBheWxvYWQgYmV0d2VlbiBhcmNoaXRlY3R1cmVz LiAqL1xuIgorICAgICJzdGF0aWMgZG91YmxlXG4iCisgICAgInVsbF90b19kICh1bnNpZ25lZCBs b25nIGxvbmcgdWxsKVxuIgorICAgICJ7XG4iCisgICAgIiAgdW5pb24gZHVsbCB1OyB1LnVsbCA9 IHVsbDtcbiIKKyAgICAiICAvKiBQYXJhbm9pYSBjaGVjayBmb3IgZm9yZWlnbiBOYU4gcmVwcmVz ZW50YXRpb24uICovXG4iCisgICAgIiAgaWYgKCFpc25hbiAodS5kKSkgcmV0dXJuIE5BTjtcbiIK KyAgICAiICByZXR1cm4gdS5kO1xuIgorICAgICJ9XG5cbiIpOworICByLndyaXRlICgKKyAgICAi LyogQ29udmVydCBhcnJheSB0byBsb25nIGRvdWJsZSBOYU4uXG4iCisgICAgIiAgIE1pZ2h0IGxv c2UvY29ycnVwdCBwYXlsb2FkIGJldHdlZW4gYXJjaGl0ZWN0dXJlcy4gKi9cbiIKKyAgICAic3Rh dGljIGxvbmcgZG91YmxlXG4iCisgICAgImFycl90b19sZCAodW5zaWduZWQgY2hhciAqYXJyLCBp bnQgbGVuKVxuIgorICAgICJ7XG4iCisgICAgIiAgdW5pb24gbGRhcnIgdTtcbiIKKyAgICAvKiBT aW5jZSBsb25nIGRvdWJsZSBzaXplcyBjYW4gdmFyeSBiZXR3ZWVuIGFyY2hpdGVjdHVyZXMsCisg ICAgICAgd2UgbmVlZCB0byBoYW5kbGUgdGhhdC4gKi8KKyAgICAiICAvKiBGb3IgZm9yZWlnbiBs b25nIGRvdWJsZSBzaXplcyAqL1xuIgorICAgICIgIGlmIChzaXplb2YgdS5hcnIgIT0gbGVuKSBy ZXR1cm4gTkFOO1xuIgorICAgICIgIG1lbWNweSAodS5hcnIsIGFyciwgbGVuKTtcbiIKKyAgICAv KiBUaGUgc2l6ZSBtaWdodCBmb29sIHVzIGJlY291c2Ugb2YgcGFkZGluZywgc28gY2hlY2sgaXQg aXMgYSBuYW4uICovCisgICAgIiAgLyogSGFuZGxlIGZvcmVpZ24gcmVwcmVzZW50YXRpb25zIHRo YXQgaXMgbm90IE5hTiBvbiB0aGlzIG1hY2hpbmUuICovXG4iCisgICAgIiAgaWYgKCFpc25hbiAo dS5sZCkpIHJldHVybiBOQU47XG4iCisgICAgIiAgcmV0dXJuIHUubGQ7XG4iCisgICAgIn1cblxu Iik7CisKICAgci53cml0ZSAoInN0YXRpYyB2b2lkXG5zZXRfb3B0aW9ucyAoIik7CiAgIHIud3Jp dGVfcGFyYW1zIChjb250ZXh0cyk7CiAgIHIud3JpdGUgKCIpO1xuXG4iKTsKQEAgLTQ3NTgsOCAr NDc5OSwxMSBAQCByZWNvcmRpbmc6Omdsb2JhbDo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNl ciAmcikKIC8qIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIG9mIHRoZSB2YXJpb3VzIG1lbWVudG9z IHdlJ3JlIGludGVyZXN0ZWQgaW4uICAqLwogdGVtcGxhdGUgY2xhc3MgcmVjb3JkaW5nOjptZW1l bnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8aW50PjsKIHRlbXBsYXRlIGNsYXNzIHJlY29y ZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmc+OwordGVtcGxhdGUg Y2xhc3MgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBs b25nPjsKIHRlbXBsYXRlIGNsYXNzIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zy b21fY29uc3QgPGRvdWJsZT47Cit0ZW1wbGF0ZSBjbGFzcyByZWNvcmRpbmc6Om1lbWVudG9fb2Zf bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGRvdWJsZT47CiB0ZW1wbGF0ZSBjbGFzcyByZWNv cmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBkb3VibGU+ OwordGVtcGxhdGUgY2xhc3MgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9j b25zdCA8X0NvbXBsZXggbG9uZyBkb3VibGU+OwogdGVtcGxhdGUgY2xhc3MgcmVjb3JkaW5nOjpt ZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8dm9pZCAqPjsKIAogLyogSW1wbGVtZW50 YXRpb24gb2YgdGhlIHB1cmUgdmlydHVhbCBob29rIHJlY29yZGluZzo6bWVtZW50bzo6cmVwbGF5 X2ludG8KQEAgLTQ4OTYsNiArNDk0MCw3MCBAQCByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2 YWx1ZV9mcm9tX2NvbnN0IDxsb25nPjo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlcgogCSAg IG1fdmFsdWUpOwogCSAgIH0KIAorLyogVGhlIG1ha2VfZGVidWdfc3RyaW5nIHNwZWNpYWxpemF0 aW9uIGZvciA8bG9uZyBsb25nPiwgcmVuZGVyaW5nIGl0IGFzCisgICAgIChUQVJHRVRfVFlQRSlM SVRFUkFMCisgICBlLmcuCisgICAgICIobG9uZyBsb25nKTQyIi4gKi8KKwkgICAKK3RlbXBsYXRl IDw+CitzdHJpbmcgKgorbWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgbG9u Zz46Om1ha2VfZGVidWdfc3RyaW5nICgpCit7CisgIHJldHVybiBzdHJpbmc6OmZyb21fcHJpbnRm IChtX2N0eHQsCisJCQkgICAgICAiKCVzKSVsbGkiLAorCQkJICAgICAgbV90eXBlLT5nZXRfZGVi dWdfc3RyaW5nICgpLAorCQkJICAgICAgbV92YWx1ZSk7Cit9CisKKy8qIFRoZSBnZXRfd2lkZV9p bnQgc3BlY2lhbGl6YXRpb24gZm9yIDxsb25nIGxvbmc+LiAqLworCit0ZW1wbGF0ZSA8PgorYm9v bAorbWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgbG9uZz46OmdldF93aWRl X2ludCAod2lkZV9pbnQgKm91dCkgY29uc3QKK3sKKyAgKm91dCA9IHdpOjpzaHdpIChtX3ZhbHVl LCBzaXplb2YgKG1fdmFsdWUpICogOCk7CisgIHJldHVybiB0cnVlOworfQorCisvKiBUaGUgd3Jp dGVfcmVwcm9kdWNlciBzcGVjaWFsaXphdGlvbiBmb3IgPGxvbmcgbG9uZz4uICovCisKK3RlbXBs YXRlIDw+Cit2b2lkCityZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0 IDxsb25nIGxvbmc+OjoKK3dyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCit7CisgIGNv bnN0IGNoYXIgKmlkID0gci5tYWtlX2lkZW50aWZpZXIgKHRoaXMsICJydmFsdWUiKTsKKworICAv KiBTYW1lIHNwZWNpYWwgY2FzZSBhcyBpbiBsb25nICovCisgIGlmIChtX3ZhbHVlID09IExPTkdf TE9OR19NSU4pCisgICAgeworICAgICAgci53cml0ZSAoCisgICAgICAgICIgIGdjY19qaXRfcnZh bHVlIColcyA9XG4iCisgICAgICAgICIgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9sb25nX2xvbmcgKFxuIgorICAgICAgICAiICAgICAgJXMsIC8qIGdjY19qaXRfY29udGV4dCAq Y3R4dCAqL1xuIgorICAgICAgICAiICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqbnVtZXJpY190 eXBlICovXG4iCisgICAgICAgICIgICAgICAlbGxkTEwgLSAxKTsgLyogbG9uZyBsb25nIHZhbHVl ICovXG4iLAorICAgICAgICBpZCwKKyAgICAgICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRl eHQgKCkpLAorICAgICAgICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fdHlwZSksCisgICAg ICAgIG1fdmFsdWUgKyAxKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgci53cml0ZSAoCisg ICAgIiAgZ2NjX2ppdF9ydmFsdWUgKiVzID1cbiIKKyAgICAiICAgIGdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21fbG9uZ19sb25nIChcbiIKKyAgICAiICAgICAgJXMsIC8qIGdjY19qaXRf Y29udGV4dCAqY3R4dCAqL1xuIgorICAgICIgICAgICAlcywgLyogZ2NjX2ppdF90eXBlICpudW1l cmljX3R5cGUgKi9cbiIKKyAgICAiICAgICAgJWxsZExMKTsgLyogbG9uZyBsb25nIHZhbHVlICov XG4iLAorICAgIGlkLAorICAgIHIuZ2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKyAg ICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fdHlwZSksCisgICAgbV92YWx1ZSk7Cit9CisK KworCiAvKiBUaGUgbWFrZV9kZWJ1Z19zdHJpbmcgc3BlY2lhbGl6YXRpb24gZm9yIDxkb3VibGU+ LCByZW5kZXJpbmcgaXQgYXMKICAgICAgKFRBUkdFVF9UWVBFKUxJVEVSQUwKICAgIGUuZy4KQEAg LTQ5MDYsNyArNTAxNCw3IEBAIHN0cmluZyAqCiBtZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9j b25zdCA8ZG91YmxlPjo6bWFrZV9kZWJ1Z19zdHJpbmcgKCkKIHsKICAgcmV0dXJuIHN0cmluZzo6 ZnJvbV9wcmludGYgKG1fY3R4dCwKLQkJCSAgICAgICIoJXMpJWYiLAorCQkJICAgICAgIiglcykl ZyIsCiAJCQkgICAgICBtX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCiAJCQkgICAgICBtX3Zh bHVlKTsKIH0KQEAgLTQ5MjAsNiArNTAyOCwxOCBAQCBtZW1lbnRvX29mX25ld19ydmFsdWVfZnJv bV9jb25zdCA8ZG91YmxlPjo6Z2V0X3dpZGVfaW50ICh3aWRlX2ludCAqKSBjb25zdAogICByZXR1 cm4gZmFsc2U7CiB9CiAKKy8qIEZvciB0eXBlcHJ1bmluZyBOYU5zLiAqLwordW5pb24gZHVsbCB7 CisgIGRvdWJsZSBkOworICB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOworfTsKKwordW5pb24gbGRh cnIgeworICBsb25nIGRvdWJsZSBsZDsKKyAgdW5zaWduZWQgY2hhciBhcnJbc2l6ZW9mKGxvbmcg ZG91YmxlKV07Cit9OworCisKIC8qIFRoZSB3cml0ZV9yZXByb2R1Y2VyIHNwZWNpYWxpemF0aW9u IGZvciA8ZG91YmxlPi4gICovCiAKIHRlbXBsYXRlIDw+CkBAIC00OTI3LDE0ICs1MDQ3LDE1NCBA QCB2b2lkCiByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3Vi bGU+Ojp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogewogICBjb25zdCBjaGFyICpp ZCA9IHIubWFrZV9pZGVudGlmaWVyICh0aGlzLCAicnZhbHVlIik7Ci0gIHIud3JpdGUgKCIgIGdj Y19qaXRfcnZhbHVlIColcyA9XG4iCi0gICAgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2RvdWJsZSAoJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAqL1xuIgotICAgICIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0 X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICVmKTsgLyogZG91YmxlIHZhbHVlICovXG4iLAotICAgIGlkLAot ICAgIHIuZ2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKLSAgICByLmdldF9pZGVudGlm aWVyX2FzX3R5cGUgKG1fdHlwZSksCi0gICAgbV92YWx1ZSk7CisKKyAgaWYgKHN0ZDo6aXNmaW5p dGUgKG1fdmFsdWUpKQorICAgIHIud3JpdGUgKCIgIGdjY19qaXRfcnZhbHVlIColcyA9XG4iCisg ICAgICAiICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlICglcywgLyog Z2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCisgICAgICAiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAlcywgLyogZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUg Ki9cbiIKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qICUuOWcgKi9cbiIKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICVhKTtcbiIsCisgICAgICBpZCwKKyAgICAgIHIuZ2V0X2lkZW50aWZpZXIgKGdl dF9jb250ZXh0ICgpKSwKKyAgICAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwK KyAgICAgIG1fdmFsdWUsIG1fdmFsdWUpOworICAgZWxzZSBpZiAoc3RkOjppc2luZiAobV92YWx1 ZSkpCisgICAgIHsKKyAgICAgICBjb25zdCBjaGFyICpzaWduID0gIiI7CisgICAgICAgaWYgKG1f dmFsdWUgPCAwKQorCSBzaWduID0gIi0iOworCisgICAgICAgci53cml0ZSAoIiAgZ2NjX2ppdF9y dmFsdWUgKiVzID1cbiIKKwkgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2Rv dWJsZSAoJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAqL1xuIgorCSAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlcywgLyogZ2NjX2ppdF90eXBlICpudW1l cmljX3R5cGUgKi9cbiIKKwkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogaW5mICovXG4iCisJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICVzSU5GSU5JVFkpO1xuIiwKKwkgaWQsCisJIHIuZ2V0X2lkZW50aWZpZXIgKGdl dF9jb250ZXh0ICgpKSwKKwkgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX3R5cGUpLAorCSBz aWduKTsKKyAgICAgIH0KKyAgICBlbHNlIGlmIChzdGQ6OmlzbmFuIChtX3ZhbHVlKSkgeworICAg ICAgdW5pb24gZHVsbCB1OworICAgICAgdS5kID0gbV92YWx1ZTsKKyAgICAgIHIud3JpdGUgKCIg IGdjY19qaXRfcnZhbHVlIColcyA9XG4iCisJIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2RvdWJsZSAoJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAqL1xuIgorCSIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0X3R5 cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5hTiAqL1xuIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVsbF90b19kKCUjbGx4KSk7XG4iLAorCWlkLAorCXIuZ2V0X2lkZW50 aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKwlyLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fdHlw ZSksCisJdS51bGwpOworICAgICAgCisgICAgfQorfQorCisvKiBUaGUgbWFrZV9kZWJ1Z19zdHJp bmcgc3BlY2lhbGl6YXRpb24gZm9yIDxsb25nIGRvdWJsZT4sIHJlbmRlcmluZyBpdCBhcworICAg ICAoVEFSR0VUX1RZUEUpTElURVJBTAorICAgZS5nLgorICAgICAiKGZsb2F0KTQyLjAiLiAgKi8K KwordGVtcGxhdGUgPD4KK3N0cmluZyAqCittZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25z dCA8bG9uZyBkb3VibGU+OjptYWtlX2RlYnVnX3N0cmluZyAoKQoreworICByZXR1cm4gc3RyaW5n Ojpmcm9tX3ByaW50ZiAobV9jdHh0LAorCQkJICAgICAgIiglcyklTGciLAorCQkJICAgICAgbV90 eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCQkJICAgICAgbV92YWx1ZSk7Cit9CisKKy8qIFRo ZSBnZXRfd2lkZV9pbnQgc3BlY2lhbGl6YXRpb24gZm9yIDxkb3VibGU+LiAgKi8KKwordGVtcGxh dGUgPD4KK2Jvb2wKK21lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGRvdWJs ZT46OmdldF93aWRlX2ludCAod2lkZV9pbnQgKikgY29uc3QKK3sKKyAgcmV0dXJuIGZhbHNlOwor fQorCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHdyaXRlX3JlcHJvZHVjZXIoKQorCisgICBXcml0 ZSBhbiBhcnJheSBvZiB1bnNpZ25lZCBjaGFycyB0byB0aGUgcmVwcm9kdWNlciwgbGlrZToKKyAg IHt7MHgxMn0sIHsweDM0fSwgLi4uIH0gKi8KK3N0YXRpYyB2b2lkCityZXByb2R1Y2VyX3dyaXRl X2FyciAocmVwcm9kdWNlciAmciwgdW5zaWduZWQgY2hhciAqYXJyLCBpbnQgbGVuKQoreworICBp ZiAobGVuID09IDApCisgICAgcmV0dXJuOworCisgIHIud3JpdGUgKCJ7Iik7CisgIGZvciAoaW50 IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKQorICAgIHIud3JpdGUgKCIlI3ggLCAiLCBhcnJbaV0p OworICByLndyaXRlICgiJSN4IH0iLCBhcnJbbGVuIC0gMV0pOworfQorCisvKiBUaGUgd3JpdGVf cmVwcm9kdWNlciBzcGVjaWFsaXphdGlvbiBmb3IgPGRvdWJsZT4uICAqLworCit0ZW1wbGF0ZSA8 Pgordm9pZAorcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9u ZyBkb3VibGU+OjoKK3dyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCit7CisgIGNvbnN0 IGNoYXIgKmlkID0gci5tYWtlX2lkZW50aWZpZXIgKHRoaXMsICJydmFsdWUiKTsKKworICBpZiAo c3RkOjppc2Zpbml0ZSAobV92YWx1ZSkpCisgICAgci53cml0ZSAoCisgICAgICAiICBnY2Nfaml0 X3J2YWx1ZSAqJXMgPVxuIgorICAgICAgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2xvbmdfZG91YmxlIChcbiIKKyAgICAgICIgICAgICAlcywgLyogZ2NjX2ppdF9jb250ZXh0 ICpjdHh0ICovXG4iCisgICAgICAiICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqbnVtZXJpY190 eXBlICovXG4iCisgICAgICAiICAgICAgLyogJS45TGcgKi9cbiIKKyAgICAgICIgICAgICAlTGFM KTsgLyogbG9uZyBkb3VibGUgdmFsdWUgKi9cbiIsCisgICAgICBpZCwKKyAgICAgIHIuZ2V0X2lk ZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKyAgICAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlw ZSAobV90eXBlKSwKKyAgICAgIG1fdmFsdWUsIG1fdmFsdWUpOworICBlbHNlIGlmIChzdGQ6Omlz aW5mIChtX3ZhbHVlKSkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpzaWduID0gIiI7CisgICAg ICBpZiAobV92YWx1ZSA8IDApCisgICAgICAgIHNpZ24gPSAiLSI7CisgICAgICByLndyaXRlICgK KyAgICAgICIgIGdjY19qaXRfcnZhbHVlIColcyA9XG4iCisgICAgICAiICAgIGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGUgKFxuIgorICAgICAgIiAgICAgICVzLCAv KiBnY2Nfaml0X2NvbnRleHQgKmN0eHQgKi9cbiIKKyAgICAgICIgICAgICAlcywgLyogZ2NjX2pp dF90eXBlICpudW1lcmljX3R5cGUgKi9cbiIKKyAgICAgICIgICAgICAvKiBpbmYgKi9cbiIKKyAg ICAgICIgICAgICAlc0lORklOSVRZKTtcbiIsCisgICAgICBpZCwKKyAgICAgIHIuZ2V0X2lkZW50 aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKyAgICAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAo bV90eXBlKSwKKyAgICAgIHNpZ24pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuaW9u IGxkYXJyIHU7IC8qIEZvciB0eXBlIHB1bm5pbmcgdG8gYXJyYXkgKi8KKyAgICAgIHUubGQgPSBt X3ZhbHVlOworCisgICAgICByLndyaXRlICgiICBnY2Nfaml0X3J2YWx1ZSAqJXM7XG4iLCBpZCk7 CisgICAgICAvKiBTY29wZSBmb3IgbG9jYWwgKi8KKyAgICAgIHIud3JpdGUgKCIgIHsgLyogbG9u ZyBkb3VibGUgTmFOIHN0b3JlZCBpbiBjaGFyIGFyciAqL1xuIik7CisgICAgICAvKiBXcml0ZSBh biBjaGFyIGFyciBvZiB0aGUgYnl0ZXMgb2YgdGhlIE5hTiAqLworICAgICAgci53cml0ZSAoIiAg ICB1bnNpZ25lZCBjaGFyIGFycltdID0gIik7CisgICAgICByZXByb2R1Y2VyX3dyaXRlX2FyciAo ciwgdS5hcnIsIHNpemVvZiB1LmFycik7CisgICAgICByLndyaXRlICgiO1xuIik7CisKKyAgICAg IHIud3JpdGUgKAorICAgICAgIiAgICAlcyA9XG4iCisgICAgICAiICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2RvdWJsZSAoXG4iCisgICAgICAiICAgICAgICAlcywg LyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCisgICAgICAiICAgICAgICAlcywgLyogZ2Nj X2ppdF90eXBlICpudW1lcmljX3R5cGUgKi9cbiIKKyAgICAgICIgICAgICAgIC8qICVMZyAqL1xu IgorICAgICAgIiAgICAgICAgYXJyX3RvX2xkIChhcnIsIHNpemVvZiBhcnIpKTtcbiIsCisgICAg ICBpZCwKKyAgICAgIHIuZ2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKyAgICAgIHIu Z2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKKyAgICAgIG1fdmFsdWUpOworCisgICAg ICByLndyaXRlICgiICB9XG4iKTsgLyogQ2xvc2Ugc2NvcGUgKi8KKyAgICB9CiB9CiAKIC8qIFRo ZSBtYWtlX2RlYnVnX3N0cmluZyBzcGVjaWFsaXphdGlvbiBmb3IgPGRvdWJsZSBjb21wbGV4Piwg cmVuZGVyaW5nIGl0IGFzCkBAIC00OTQ5LDM3ICs1MjA5LDE4OSBAQCBtZW1lbnRvX29mX25ld19y dmFsdWVfZnJvbV9jb25zdCA8X0NvbXBsZXggZG91YmxlPjo6bWFrZV9kZWJ1Z19zdHJpbmcgKCkK ICAgZG91YmxlIHJlYWwgPSBjcmVhbChtX3ZhbHVlKTsKICAgZG91YmxlIGltYWcgPSBjaW1hZyht X3ZhbHVlKTsKICAgcmV0dXJuIHN0cmluZzo6ZnJvbV9wcmludGYgKG1fY3R4dCwKLSAgICAgICAg ICAgICAgICAgICIoJXMpKCVnJStnaikiLAotICAgICAgICAgICAgICAgICAgbV90eXBlLT5nZXRf ZGVidWdfc3RyaW5nICgpLAotICAgICAgICAgICAgICAgICAgcmVhbCwgaW1hZyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiKCVzKSglZyUrZ2opIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1fdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlYWwsIGltYWcpOwogfQogCiAvKiBUaGUgZ2V0X3dpZGVfaW50IHNw ZWNpYWxpemF0aW9uIGZvciA8ZG91YmxlIGNvbXBsZXg+LiAgKi8KIAogdGVtcGxhdGUgPD4KIGJv b2wKLW1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBkb3VibGU+Ojpn ZXRfd2lkZV9pbnQgKHdpZGVfaW50ICopIGNvbnN0CittZW1lbnRvX29mX25ld19ydmFsdWVfZnJv bV9jb25zdCA8X0NvbXBsZXggZG91YmxlPjo6CitnZXRfd2lkZV9pbnQgKHdpZGVfaW50ICopIGNv bnN0CiB7CiAgIHJldHVybiBmYWxzZTsKIH0KIAotLyogVGhlIHdyaXRlX3JlcHJvZHVjZXIgc3Bl Y2lhbGl6YXRpb24gZm9yIDxkb3VibGU+LiAgKi8KKy8qIFRoZSB3cml0ZV9yZXByb2R1Y2VyIHNw ZWNpYWxpemF0aW9uIGZvciA8X0NvbXBsZXggZG91YmxlPi4gICovCiAKIHRlbXBsYXRlIDw+CiB2 b2lkCi1yZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxl eCBkb3VibGU+Ojp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQorcmVjb3JkaW5nOjpt ZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8X0NvbXBsZXggZG91YmxlPjo6Cit3cml0 ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogewogICBjb25zdCBjaGFyICppZCA9IHIubWFr ZV9pZGVudGlmaWVyICh0aGlzLCAicnZhbHVlIik7CiAgIGRvdWJsZSByZWFsID0gY3JlYWwobV92 YWx1ZSk7CiAgIGRvdWJsZSBpbWFnID0gY2ltYWcobV92YWx1ZSk7Ci0gIHIud3JpdGUgKCIgIGdj Y19qaXRfcnZhbHVlIColcyA9XG4iCi0gICAgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2NvbXBsZXhfZG91YmxlICglcywgLyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4i Ci0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMsIC8q IGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlICovXG4iCi0gICAgIiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJWYrJWZqKTsgLyogZG91YmxlIHZhbHVlICovXG4i LAorCisgIHIud3JpdGUgKAorICAgICIgIGdjY19qaXRfcnZhbHVlIColcyA9XG4iCisgICAgIiAg ICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlIChcbiIKKyAg ICAiICAgICAgJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAqL1xuIgorICAgICIgICAgICAl cywgLyogZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUgKi9cbiIKKyAgICAiICAgICAgLyogJS45 ZyArICUuOWdqICovXG4iCisgICAgIiAgICAgIENNUExYICgiLC8qIC4uLiByZWFsLCBpbWFnKSk7 ICovCiAgICAgaWQsCiAgICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAogICAg IHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKICAgICByZWFsLCBpbWFnKTsKKwor ICBpZiAoc3RkOjppc2Zpbml0ZSAocmVhbCkpCisgICAgci53cml0ZSgiJWEsIiwgcmVhbCk7Cisg IGVsc2UgaWYgKHN0ZDo6aXNpbmYgKHJlYWwpKQorICAgIHsKKyAgICAgIGlmIChyZWFsIDwgMCkK KyAgICAgICAgci53cml0ZSAoIi1JTkZJTklUWSwiKTsKKyAgICAgIGVsc2UKKyAgICAgICAgci53 cml0ZSAoIklORklOSVRZLCIpOworICAgIH0KKyAgZWxzZSAvKiBOYU4gKi8KKyAgICB7CisgICAg ICAvKiBTdG9yZSB0aGUgTmFOIGFzIGEgdW5zaWduZWQgbG9uZyBsb25nIGxpdGVyYWwuCisgICAg ICAgICB1bGxfdG9fZCgpIHdpbGwgY29udmVydCBpdCBiYWNrIHRvIGRvdWJsZSAqLworICAgICAg dW5pb24gZHVsbCB1OworICAgICAgdS5kID0gcmVhbDsKKyAgICAgIHIud3JpdGUgKCJ1bGxfdG9f ZCAoJSNsbHgpLCIsIHUudWxsKTsKKyAgICB9CisKKyAgaWYgKHN0ZDo6aXNmaW5pdGUgKGltYWcp KQorICAgIHIud3JpdGUoIiVhKSIsIGltYWcpOworICBlbHNlIGlmIChzdGQ6OmlzaW5mIChpbWFn KSkKKyAgICB7CisgICAgICBpZiAocmVhbCA8IDApCisgICAgICAgIHIud3JpdGUgKCItSU5GSU5J VFkpIik7CisgICAgICBlbHNlCisgICAgICAgIHIud3JpdGUgKCJJTkZJTklUWSkiKTsKKyAgICB9 CisgIGVsc2UgLyogTmFOICovCisgICAgeworICAgICAgdW5pb24gZHVsbCB1OworICAgICAgdS5k ID0gaW1hZzsKKyAgICAgIHIud3JpdGUgKCJ1bGxfdG9fZCAoJSNsbHgpKSIsIHUudWxsKTsKKyAg ICB9CisKKyAgci53cml0ZSAoIik7XG5cbiIpOyAvKiBDbG9zZSB0aGUgZnVuY3Rpb24gY2FsbCAq LworfQorCit0ZW1wbGF0ZSA8Pgorc3RyaW5nICoKK21lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9t X2NvbnN0IDxfQ29tcGxleCBsb25nIGRvdWJsZT46Om1ha2VfZGVidWdfc3RyaW5nICgpCit7Cisg IGxvbmcgZG91YmxlIHJlYWwgPSBjcmVhbGwobV92YWx1ZSk7CisgIGxvbmcgZG91YmxlIGltYWcg PSBjaW1hZ2wobV92YWx1ZSk7CisgIHJldHVybiBzdHJpbmc6OmZyb21fcHJpbnRmIChtX2N0eHQs CisgICAgICAgICAgICAgICAgICAiKCVzKSglTGclK0xnaikiLAorICAgICAgICAgICAgICAgICAg bV90eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpLAorICAgICAgICAgICAgICAgICAgcmVhbCwgaW1h Zyk7Cit9CisKKy8qIFRoZSBnZXRfd2lkZV9pbnQgc3BlY2lhbGl6YXRpb24gZm9yIDxfQ29tcGxl eCBsb25nIGRvdWJsZT4uICAqLworCit0ZW1wbGF0ZSA8PgorYm9vbAorbWVtZW50b19vZl9uZXdf cnZhbHVlX2Zyb21fY29uc3QgPF9Db21wbGV4IGxvbmcgZG91YmxlPjo6CitnZXRfd2lkZV9pbnQg KHdpZGVfaW50ICopIGNvbnN0Cit7CisgIHJldHVybiBmYWxzZTsKK30KKworLyogVGhlIHdyaXRl X3JlcHJvZHVjZXIgc3BlY2lhbGl6YXRpb24gZm9yIDxfQ29tcGxleCBsb25nIGRvdWJsZT4uICAq LworCit0ZW1wbGF0ZSA8Pgordm9pZAorcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVf ZnJvbV9jb25zdCA8X0NvbXBsZXggbG9uZyBkb3VibGU+OjoKK3dyaXRlX3JlcHJvZHVjZXIgKHJl cHJvZHVjZXIgJnIpCit7CisgIHVuaW9uIGxkYXJyIHVyZWFsLCB1aW1hZzsKKyAgY29uc3QgY2hh ciAqaWQgPSByLm1ha2VfaWRlbnRpZmllciAodGhpcywgInJ2YWx1ZSIpOworICBsb25nIGRvdWJs ZSByZWFsID0gY3JlYWxsKG1fdmFsdWUpOworICBsb25nIGRvdWJsZSBpbWFnID0gY2ltYWdsKG1f dmFsdWUpOworCisgIGludCBoYXNfbmFuID0gc3RkOjppc25hbiAocmVhbCkgfHwgc3RkOjppc25h biAoaW1hZyk7CisKKyAgaWYgKGhhc19uYW4pCisgICAgeworICAgICAgci53cml0ZSAoIiAgZ2Nj X2ppdF9ydmFsdWUgKiVzO1xuIiwgaWQpOworICAgICAgLyogU2NvcGUgZm9yIG11bHRpcGxlICJO YU4tYXJyYXlzIiBpbiB0aGUgc291cmNlIGZpbGUgIHRvIG5vdCBjbGFzaCAqLworICAgICAgci53 cml0ZSAoIiAge1xuIik7CisgICAgfQorICBpZiAoc3RkOjppc25hbiAocmVhbCkpCisgICAgewor ICAgICAgLyogV3JpdGUgdGhlIHJhdyBieXRlcyBvZiB0aGUgbG9uZyBkb3VibGUgYXMgYW4gY2hh ciBhcnJheQorICAgICAgICAgdG8gc3RvcmUgaXQgaW4gdGhlIHNvdXJjZSBjb2RlLgorICAgICAg ICAgSS5lLiB1bnNpZ25lZCBjaGFyIGFycltdID0gezB4MSwgMHgyLCAweDMgLi4uIH07ICovCisg ICAgICB1cmVhbC5sZCA9IHJlYWw7CisgICAgICByLndyaXRlICgiICAgIHVuc2lnbmVkIGNoYXIg YXJyX3JlYWxbXSA9ICIpOworICAgICAgcmVwcm9kdWNlcl93cml0ZV9hcnIgKHIsIHVyZWFsLmFy ciwgc2l6ZW9mIHVyZWFsLmFycik7CisgICAgICByLndyaXRlICgiO1xuIik7CisgICAgfQorICBp ZiAoc3RkOjppc25hbiAoaW1hZykpCisgICAgeworICAgICAgdWltYWcubGQgPSBpbWFnOworICAg ICAgci53cml0ZSAoIiAgICB1bnNpZ25lZCBjaGFyIGFycl9pbWFnW10gPSAiKTsKKyAgICAgIHJl cHJvZHVjZXJfd3JpdGVfYXJyIChyLCB1aW1hZy5hcnIsIHNpemVvZiB1aW1hZy5hcnIpOworICAg ICAgci53cml0ZSAoIjtcbiIpOworICAgIH0KKworICBpZiAoaGFzX25hbikKKyAgICByLndyaXRl ICgiICAiKTsgLyogRGVmaW5pdGlvbiBpcyBvdXRzaWRlIHRoZSBzY29wZSBmb3IgTmFOcyAqLwor ICBlbHNlCisgICAgci53cml0ZSAoIiAgZ2NjX2ppdF9ydmFsdWUgKiIpOworCisgIHIud3JpdGUg KCIlcyA9XG4iCisgICAgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBs ZXhfbG9uZ19kb3VibGUgKFxuIgorICAgICIgICAgICAlcywgLyogZ2NjX2ppdF9jb250ZXh0ICpj dHh0ICovXG4iCisgICAgIiAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAq L1xuIgorICAgICIgICAgICAvKiAlLjlMZyArIGkqJS45TGcgKi9cbiIKKyAgICAiICAgICAgQ01Q TFhMICgiLAorICAgIGlkLAorICAgIHIuZ2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwK KyAgICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fdHlwZSksCisgICAgcmVhbCwgaW1hZyk7 CisKKyAgaWYgKHN0ZDo6aXNmaW5pdGUgKHJlYWwpKQorICAgIHIud3JpdGUgKCIlTGFMLCAiLCBy ZWFsKTsKKyAgZWxzZSBpZiAoc3RkOjppc2luZiAocmVhbCkpCisgICAgeworICAgICAgaWYgKHJl YWwgPCAwKQorICAgICAgICByLndyaXRlICgiLUlORklOSVRZLCAiKTsKKyAgICAgIGVsc2UKKyAg ICAgICAgci53cml0ZSAoIklORklOSVRZLCAiKTsKKyAgICB9CisgIGVsc2UgaWYgKHN0ZDo6aXNu YW4gKHJlYWwpKQorICAgIHsKKyAgICAgIC8qIENvbnZlcnQgdGhlIGNoYXIgYXJyYXkgd3JpdHRl biBhYm92ZSwgdG8gYSBsb25nIGRvdWJsZSAqLworICAgICAgci53cml0ZSAoImFycl90b19sZCAo YXJyX3JlYWwsIHNpemVvZiBhcnJfcmVhbCksICIpOworICAgIH0KKworICBpZiAoc3RkOjppc2Zp bml0ZSAoaW1hZykpCisgICAgci53cml0ZSAoIiVMYUwpIiwgaW1hZyk7CisgIGVsc2UgaWYgKHN0 ZDo6aXNpbmYgKGltYWcpKQorICAgIHsKKyAgICAgIGlmIChpbWFnIDwgMCkKKyAgICAgICAgci53 cml0ZSAoIi1JTkZJTklUWSkiKTsKKyAgICAgIGVsc2UKKyAgICAgICAgci53cml0ZSAoIklORklO SVRZKSIpOworICAgIH0KKyAgZWxzZSBpZiAoc3RkOjppc25hbiAoaW1hZykpCisgICAgeworICAg ICAgci53cml0ZSAoImFycl90b19sZCAoYXJyX2ltYWcsIHNpemVvZiBhcnJfaW1hZykpIik7Cisg ICAgfQorICByLndyaXRlKCIpO1xuXG4iKTsgLyogQ2xvc2UgZnVuY3Rpb24gY2FsbCAqLworCisg IGlmIChoYXNfbmFuKQorICAgIHIud3JpdGUgKCIgIH1cbiIpOyAvKiBDbG9zZSBOYU4tYXJyYXkg c2NvcGUgKi8KIH0KIAogLyogVGhlIG1ha2VfZGVidWdfc3RyaW5nIHNwZWNpYWxpemF0aW9uIGZv ciA8dm9pZCAqPiwgcmVuZGVyaW5nIGl0IGFzCkBAIC01Mjg4LDE1ICs1NzAwLDE1IEBAIHJlY29y ZGluZzo6YmluYXJ5X29wOjptYWtlX2RlYnVnX3N0cmluZyAoKQogICBlbnVtIHByZWNlZGVuY2Ug cHJlYyA9IGdldF9wcmVjZWRlbmNlICgpOwogICBpZiAobV9vcCA9PSBHQ0NfSklUX0JJTkFSWV9P UF9DT01QTEVYKQogICAgIHJldHVybiBzdHJpbmc6OmZyb21fcHJpbnRmIChtX2N0eHQsCi0JCQkg ICAgICAiKCVzICsgJXMgKiBfSW1hZ2luYXJ5X0kpIiwKLQkJCSAgICAgIG1fYS0+Z2V0X2RlYnVn X3N0cmluZ19wYXJlbnMgKHByZWMpLAotCQkJICAgICAgbV9iLT5nZXRfZGVidWdfc3RyaW5nX3Bh cmVucyAocHJlYykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCVzICsgJXMg KiBfSW1hZ2luYXJ5X0kpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hLT5n ZXRfZGVidWdfc3RyaW5nX3BhcmVucyAocHJlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1fYi0+Z2V0X2RlYnVnX3N0cmluZ19wYXJlbnMgKHByZWMpKTsKICAgZWxzZQogICAg IHJldHVybiBzdHJpbmc6OmZyb21fcHJpbnRmIChtX2N0eHQsCi0JCQkgICAgICAiJXMgJXMgJXMi LAotCQkJICAgICAgbV9hLT5nZXRfZGVidWdfc3RyaW5nX3BhcmVucyAocHJlYyksCi0JCQkgICAg ICBiaW5hcnlfb3Bfc3RyaW5nc1ttX29wXSwKLQkJCSAgICAgIG1fYi0+Z2V0X2RlYnVnX3N0cmlu Z19wYXJlbnMgKHByZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICVz ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hLT5nZXRfZGVidWdfc3Ry aW5nX3BhcmVucyAocHJlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFy eV9vcF9zdHJpbmdzW21fb3BdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2It PmdldF9kZWJ1Z19zdHJpbmdfcGFyZW5zIChwcmVjKSk7CiB9CiAKIGNvbnN0IGNoYXIgKiBjb25z dCBiaW5hcnlfb3BfcmVwcm9kdWNlcl9zdHJpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9nY2Mvaml0 L2xpYmdjY2ppdC5jIGIvZ2NjL2ppdC9saWJnY2NqaXQuYwppbmRleCAwODU5YjM4ZjYwOS4uOWI0 ZTg0N2M0OTkgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmMKKysrIGIvZ2NjL2ppdC9s aWJnY2NqaXQuYwpAQCAtMTI3NSw2ICsxMjc1LDE5IEBAIGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21fbG9uZyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogCSAgLT5uZXdfcnZhbHVlX2Zy b21fY29uc3QgPGxvbmc+IChudW1lcmljX3R5cGUsIHZhbHVlKSk7CiB9CiAKK2djY19qaXRfcnZh bHVlICoKK2djY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19sb25nIChnY2Nfaml0 X2NvbnRleHQgKmN0eHQsCisJCQkJCSAgIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLAorCQkJ CQkgICBsb25nIGxvbmcgdmFsdWUpCit7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGN0eHQsIE5V TEwsIE5VTEwsICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9n Z2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9OT05OVUxMX05VTUVSSUNfVFlQRSAoY3R4 dCwgbnVtZXJpY190eXBlKTsKKworICByZXR1cm4gKChnY2Nfaml0X3J2YWx1ZSAqKWN0eHQKKwkg IC0+bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGxvbmc+IChudW1lcmljX3R5cGUsIHZhbHVl KSk7Cit9CisKIC8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0aW9uIGluIGxpYmdj Y2ppdC5oLgogCiAgICBUaGlzIGlzIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG86CkBAIC0xMzI4 LDYgKzEzNDEsMTkgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9kb3VibGUgKGdj Y19qaXRfY29udGV4dCAqY3R4dCwKIAkgIC0+bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3VibGU+ IChudW1lcmljX3R5cGUsIHZhbHVlKSk7CiB9CiAKK2djY19qaXRfcnZhbHVlICoKK2djY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGUgKGdjY19qaXRfY29udGV4dCAqY3R4 dCwKKwkJCQkJICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKKwkJCQkJICAgICBsb25n IGRvdWJsZSB2YWx1ZSkKK3sKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAoY3R4dCwgTlVMTCwgTlVM TCwgIk5VTEwgY29udGV4dCIpOworICBKSVRfTE9HX0ZVTkMgKGN0eHQtPmdldF9sb2dnZXIgKCkp OworICBSRVRVUk5fTlVMTF9JRl9GQUlMX05PTk5VTExfTlVNRVJJQ19UWVBFIChjdHh0LCBudW1l cmljX3R5cGUpOworCisgIHJldHVybiAoKGdjY19qaXRfcnZhbHVlICopY3R4dAorCSAgLT5uZXdf cnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgZG91YmxlPiAobnVtZXJpY190eXBlLCB2YWx1ZSkpOwor fQorCiBnY2Nfaml0X3J2YWx1ZSAqCiBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2Nv bXBsZXhfZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAgICAgICAgICAgICAgICAgICAg IGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLApAQCAtMTM0Nyw2ICsxMzczLDI2IEBAIGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGUgKGdjY19qaXRfY29udGV4 dCAqY3R4dCwKICAgICAgIC0+bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3VibGUgX0NvbXBsZXg+ IChudW1lcmljX3R5cGUsIHZhbHVlKSk7CiB9CiAKK2djY19qaXRfcnZhbHVlICoKK2djY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9sb25nX2RvdWJsZSAoCisgIGdjY19qaXRf Y29udGV4dCAqY3R4dCwKKyAgZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsCisgIF9Db21wbGV4 IGxvbmcgZG91YmxlIHZhbHVlKQoreworICBSRVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0LCBOVUxM LCBOVUxMLCAiTlVMTCBjb250ZXh0Iik7CisgIEpJVF9MT0dfRlVOQyAoY3R4dC0+Z2V0X2xvZ2dl ciAoKSk7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfTk9OTlVMTF9OVU1FUklDX1RZUEUgKGN0eHQs IG51bWVyaWNfdHlwZSk7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYxICgKKyAgICBu dW1lcmljX3R5cGUtPmlzX2Zsb2F0ICgpLAorICAgIGN0eHQsIE5VTEwsCisgICAgIm5vdCBhIGZs b2F0aW5nIHBvaW50IHR5cGUgKHR5cGU6ICVzKSIsCisgICAgbnVtZXJpY190eXBlLT5nZXRfZGVi dWdfc3RyaW5nICgpKTsKKworICByZXR1cm4gKChnY2Nfaml0X3J2YWx1ZSAqKWN0eHQKKyAgICAg IC0+bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBsb25nIGRvdWJsZT4gKG51bWVyaWNf dHlwZSwgdmFsdWUpKTsKK30KKwogCiAvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlw dGlvbiBpbiBsaWJnY2NqaXQuaC4KIApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQuaCBi L2djYy9qaXQvbGliZ2Njaml0LmgKaW5kZXggZjNkMmM0MGQ4YmUuLjQ5ZTM1OWY0MjBjIDEwMDY0 NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5oCisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmgKQEAg LTgzNCw2ICs4MzQsMTYgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nIChn Y2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJCQkJICAgICAgZ2NjX2ppdF90eXBlICpudW1lcmljX3R5 cGUsCiAJCQkJICAgICAgbG9uZyB2YWx1ZSk7CiAKKyNkZWZpbmUgTElCR0NDSklUX0hBVkVfTE9O R0xPTkdfQ09OU1RBTlRTCisvKiBHZXQgYSBjb25zdGFudCBmcm9tIGEgbG9uZyBsb25nLgorCisg ICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzE2LiBZb3UgY2FuIHRl c3QgZm9yCisgICBpdHMgcHJlc2VucyB3aXRoOgorICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVf TE9OR0xPTkdfQ09OU1RBTlRTICovCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2xvbmcgKGdjY19qaXRfY29udGV4dCAqY3R4dCwK KwkJCQkJICAgZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsCisJCQkJCSAgIGxvbmcgbG9uZyB2 YWx1ZSk7CiBleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgogZ2NjX2ppdF9jb250ZXh0X3plcm8gKGdj Y19qaXRfY29udGV4dCAqY3R4dCwKIAkJICAgICAgZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUp OwpAQCAtODQ3LDE3ICs4NTcsMzYgQEAgZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoKIGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJ CQkJCWdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLAogCQkJCQlkb3VibGUgdmFsdWUpOworCQkJ CQkKKy8qIEdldCBhIGNvbnN0YW50IGZyb20gYSBsb25nIGRvdWJsZS4KKworICAgVGhpcyBmdW5j dGlvbiB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8xNi4gWW91IGNhbiB0ZXN0IGZvcgorICAg aXRzIHByZXNlbmNlIHdpdGg6CisgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9MT05HTE9OR19D T05TVEFOVFMgKi8KK2V4dGVybiBnY2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2xvbmdfZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJCSAg ICAgZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsCisJCQkJCSAgICAgbG9uZyBkb3VibGUgdmFs dWUpOwogCi0vKiBDb21wbGV4IGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKy8qIEdldCBhIGNv bnN0YW50IGZyb20gYSBjb21wbGV4IGRvdWJsZS4KIAogICAgVGhpcyBBUEkgZW50cnlwb2ludCB3 YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8xNjsgeW91IGNhbiB0ZXN0IGZvciBpdHMKICAgIHBy ZXNlbmNlIHVzaW5nCi0gICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DT01QTEVYCi0qLworICAg ICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09NUExFWCAqLwogZXh0ZXJuIGdjY19qaXRfcnZhbHVl ICoKIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGUgKGdjY19q aXRfY29udGV4dCAqY3R4dCwKLQkJCQkJZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsCi0JCQkJ CWRvdWJsZSBfQ29tcGxleCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wbGV4IGRvdWJsZSB2YWx1 ZSk7CisvKiBHZXQgYSBjb25zdGFudCBmcm9tIGEgY29tcGxleCBsb25nIGRvdWJsZS4KKworICAg VGhpcyBBUEkgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8xNjsgeW91IGNh biB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbmNlIHVzaW5nCisgICAgICNpZmRlZiBMSUJHQ0NKSVRf SEFWRV9MT05HTE9OR19DT05TVEFOVFMgKi8KK2V4dGVybiBnY2Nfaml0X3J2YWx1ZSAqCitnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfbG9uZ19kb3VibGUgKAorICBnY2Nf aml0X2NvbnRleHQgKmN0eHQsCisgIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLAorICBfQ29t cGxleCBsb25nIGRvdWJsZSB2YWx1ZSk7CiAKIC8qIFBvaW50ZXJzLiAgKi8KIGV4dGVybiBnY2Nf aml0X3J2YWx1ZSAqCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAgYi9nY2Mvaml0 L2xpYmdjY2ppdC5tYXAKaW5kZXggYzliMDQ0ZGM4ZjUuLjQwMjJkYmI2ZmJjIDEwMDY0NAotLS0g YS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQubWFwCkBAIC0y MDksNSArMjA5LDggQEAgTElCR0NDSklUX0FCSV8xNSB7CiBMSUJHQ0NKSVRfQUJJXzE2IHsKICAg Z2xvYmFsOgogICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3Vi bGU7CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2xvbmdfZG91 YmxlOwogICAgIGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlczsK KyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfZG91YmxlOworICAgIGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19sb25nOwogfSBMSUJHQ0NKSVRfQUJJ XzE1OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv YWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKaW5kZXggN2I0NWFjZDRiOWMuLjg0MTZiMzEyYmFkIDEw MDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaAor KysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaApAQCAtMjM5 LDYgKzIzOSwxMyBAQAogI3VuZGVmIGNyZWF0ZV9jb2RlCiAjdW5kZWYgdmVyaWZ5X2NvZGUKIAor LyogdGVzdC1sb25nLWxpdGVyYWxzLmMgKi8KKyNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2Nv ZGVfbG9uZ19saXRlcmFscworI2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9sb25nX2xp dGVyYWxzCisjaW5jbHVkZSAidGVzdC1sb25nLWxpdGVyYWxzLmMiCisjdW5kZWYgY3JlYXRlX2Nv ZGUKKyN1bmRlZiB2ZXJpZnlfY29kZQorCiAvKiB0ZXN0LWxvbmctc3RyaW5nLWxpdGVyYWwuYyAq LwogI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9sb25nX3N0cmluZ19saXRlcmFsCiAj ZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2xvbmdfc3RyaW5nX2xpdGVyYWwKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9uZy1saXRlcmFscy5jIGIvZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1sb25nLWxpdGVyYWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmE4M2FmOGIwZWIxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1sb25nLWxpdGVyYWxzLmMKQEAgLTAsMCArMSwyODMgQEAKKy8q IFRlc3QgbG9uZyBsaXRlcmFscy4KKworICAgSS5lLiBsb25nIGxvbmcsIGxvbmcgZG91YmxlIGFu ZCBsb25nIGNvbXBsZXggZG91Ymxlcy4KKworICAgQWxzbyB0ZXN0IE5hTjpzIGFuZCBpbmY6cyB3 aXRoIGRvdWJsZS4gKi8KKworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorI2luY2x1ZGUgPGxpbWl0 cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUg ImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKworaW50IGNvbXBhcmVfbmFucyhk b3VibGUgZDEsIGRvdWJsZSBkMikKK3sKKyAgdW5pb24ge2RvdWJsZSBkOyB1bnNpZ25lZCBsb25n IGxvbmcgdWxsO30gdTEsIHUyOworCisgIHUxLmQgPSBkMTsKKyAgdTIuZCA9IGQyOworCisgIHJl dHVybiB1MS51bGwgPT0gdTIudWxsOworfQorCitpbnQgY29tcGFyZV9uYW5zbChsb25nIGRvdWJs ZSBkMSwgbG9uZyBkb3VibGUgZDIpCit7CisgIHVuaW9uIHsgbG9uZyBkb3VibGUgbGQ7IHVuc2ln bmVkIGNoYXIgYXJyW3NpemVvZiAobG9uZyBkb3VibGUpXTt9CisgICAgdTEgPSB7LmFyciA9IHsw fX0sCisgICAgdTIgPSB7LmFyciA9IHswfX07CisgIC8qIFplcm8gdGhlIGFycnMuIEkgZG9uJ3Qg a25vdyBpZiBsb25nIGRvdWJsZSB6ZXJvZXMgYWxsIGl0cyBzaXplCisgICAgIHNpbmNlIHNvbWUg b2YgaXQgaXMgcGFkZGluZy4gKi8KKworICB1MS5sZCA9IGQxOworICB1Mi5sZCA9IGQyOworCisg IHJldHVybiBtZW1jbXAgKHUxLmFyciwgdTIuYXJyLCBzaXplb2YgdTEuYXJyKSA9PSAwOworfQor CitzdGF0aWMgdm9pZAorbWFrZV9jb2RlX2xpdF9jbGQoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAor ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm5fbmFtZSwKKyAgICAgICAgICAgICAgICAg IGludCB0eXBlLAorICAgICAgICAgICAgICAgICAgX0NvbXBsZXggbG9uZyBkb3VibGUgbG9jYWxf dmFsLAorICAgICAgICAgICAgICAgICAgaW50IGxpdF90eXBlKQoreworICBnY2Nfaml0X3R5cGUg KnR0ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCB0eXBlKTsKKworICBnY2Nfaml0 X2Z1bmN0aW9uICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAwLAor ICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisgICAgdHQsIGZuX25hbWUsIDAsIDAsIDAp OworCisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sg KGZvbywgInN0YXJ0Iik7CisKKyAgLyogbG9jYWxfdHlwZSBmMSA9IGxvY2FsX3ZhbDsgKi8KKyAg Z2NjX2ppdF9sdmFsdWUgKmYxID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKGZvbywgMCwg dHQsICJmMSIpOworCisgIGdjY19qaXRfcnZhbHVlICpyMTsKKworICBpZiAobGl0X3R5cGUgPT0g J0wnKQorICAgIHIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2RvdWJs ZSAoCisgICAgICBjdHh0LCB0dCwgY3JlYWxsKGxvY2FsX3ZhbCkpOworICBlbHNlIGlmIChsaXRf dHlwZSA9PSAnQycpCisgICAgcjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2Nv bXBsZXhfbG9uZ19kb3VibGUgKAorICAgICAgY3R4dCwgdHQsIGxvY2FsX3ZhbCk7CisKKyAgZ2Nj X2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAsIGYxLCByMSk7CisKKyAgZ2NjX2pp dF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLCAwLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFs dWUoZjEpKTsKK30KKworc3RhdGljIHZvaWQKK21ha2VfY29kZV9saXRfZCAoZ2NjX2ppdF9jb250 ZXh0ICpjdHh0LAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbl9uYW1lLAorICAgICAg ICAgICAgICAgICBpbnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgX0NvbXBsZXggIGRvdWJsZSBs b2NhbF92YWwsCisgICAgICAgICAgICAgICAgaW50IGxpdF90eXBlKQoreworICBnY2Nfaml0X3R5 cGUgKnR0ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCB0eXBlKTsKKworICBnY2Nf aml0X2Z1bmN0aW9uICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAw LAorICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisgICAgdHQsIGZuX25hbWUsIDAsIDAs IDApOworCisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxv Y2sgKGZvbywgInN0YXJ0Iik7CisKKyAgLyogbG9jYWxfdHlwZSBmMSA9IGxvY2FsX3ZhbDsgKi8K KyAgZ2NjX2ppdF9sdmFsdWUgKmYxID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKGZvbywg MCwgdHQsICJmMSIpOworCisgIGdjY19qaXRfcnZhbHVlICpyMTsKKworICBpZiAobGl0X3R5cGUg PT0gJ2QnKQorICAgIHIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9kb3VibGUg KAorICAgICAgY3R4dCwgdHQsIGxvY2FsX3ZhbCk7CisgIGVsc2UgaWYgKGxpdF90eXBlID09ICdj JykKKyAgICByMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3Vi bGUgKAorICAgICAgY3R4dCwgdHQsIGxvY2FsX3ZhbCk7CisKKyAgZ2NjX2ppdF9ibG9ja19hZGRf YXNzaWdubWVudCAoYmxvY2ssIDAsIGYxLCByMSk7CisKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0 aF9yZXR1cm4gKGJsb2NrLCAwLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoZjEpKTsKK30KKwor c3RhdGljIHZvaWQKK21ha2VfY29kZV9saXRfbGwgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKyAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZuX25hbWUsCisgICAgICAgICAgICAgICAgICBp bnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBsb2NhbF92YWwpCit7CisgIGdj Y19qaXRfdHlwZSAqdHQgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIHR5cGUpOwor CisgIGdjY19qaXRfZnVuY3Rpb24gKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24g KGN0eHQsIDAsCisgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKyAgICB0dCwgZm5fbmFt ZSwgMCwgMCwgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9u X25ld19ibG9jayAoZm9vLCAic3RhcnQiKTsKKworICAvKiBsb2NhbF90eXBlIGYxID0gbG9jYWxf dmFsOyAqLworICBnY2Nfaml0X2x2YWx1ZSAqZjEgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2Nh bCAoZm9vLCAwLCB0dCwgImYxIik7CisKKyAgZ2NjX2ppdF9ydmFsdWUgKnIxOworCisgIHIxID0g Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2xvbmcgKAorICAgIGN0eHQsIHR0 LCBjcmVhbGwobG9jYWxfdmFsKSk7CisKKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAo YmxvY2ssIDAsIGYxLCByMSk7CisKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJs b2NrLCAwLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoZjEpKTsKK30KKworCit1bmlvbiB1dSB7 IGRvdWJsZSBkOyBsb25nIGxvbmcgbDsgfSB1OworCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2pp dF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICh2b2lkKSB1c2VyX2RhdGE7 CisKKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzIChjdHh0 LCAxKTsKKworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImxvbmdfZG91YmxlX2xkbGl0XzFj MSIsCisgICAgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFLAorICAgIC0xLjFMLCAnTCcpOworICBt YWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImxvbmdfZG91YmxlX2xkbGl0XzFMZGl2M0wiLAorICAg IEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRSwKKyAgICAxLzMuTCwgJ0wnKTsKKyAgbWFrZV9jb2Rl X2xpdF9jbGQgKGN0eHQsICJsb25nX2RvdWJsZV9sZGxpdF9pbmYiLAorICAgIEdDQ19KSVRfVFlQ RV9MT05HX0RPVUJMRSwKKyAgICBJTkZJTklUWSwgJ0wnKTsKKyAgbWFrZV9jb2RlX2xpdF9jbGQg KGN0eHQsICJsb25nX2RvdWJsZV9sZGxpdF9taW5mIiwKKyAgICBHQ0NfSklUX1RZUEVfTE9OR19E T1VCTEUsCisgICAgLUlORklOSVRZLCAnTCcpOworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwg ImxvbmdfZG91YmxlX2xkbGl0X25hbjEiLAorICAgIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRSwK KyAgICBuYW5sKCIxIiksICdMJyk7CisKKyAgbWFrZV9jb2RlX2xpdF9jbGQgKGN0eHQsICJjb21w bGV4X2xvbmdfZG91YmxlX2NsZGxpdF8xZGl2M18yZGl2M2oiLAorICAgIEdDQ19KSVRfVFlQRV9D T01QTEVYX0xPTkdfRE9VQkxFLAorICAgIDEvMy5MICsgMi5Mai8zLCAnQycpOworCisgIG1ha2Vf Y29kZV9saXRfY2xkIChjdHh0LCAiY29tcGxleF9sb25nX2RvdWJsZV9jbGRsaXRfaW5mX2luZmoi LAorICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFLAorICAgIENNUExYTCAoSU5G SU5JVFksIElORklOSVRZKSwgJ0MnKTsKKyAgbWFrZV9jb2RlX2xpdF9jbGQgKGN0eHQsICJjb21w bGV4X2xvbmdfZG91YmxlX2NsZGxpdF9taW5mX21pbmZqIiwKKyAgICBHQ0NfSklUX1RZUEVfQ09N UExFWF9MT05HX0RPVUJMRSwKKyAgICBDTVBMWEwgKC1JTkZJTklUWSwgLUlORklOSVRZKSwgJ0Mn KTsKKyAgbWFrZV9jb2RlX2xpdF9jbGQgKGN0eHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2NsZGxp dF9uYW4xX25hbjJqIiwKKyAgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9MT05HX0RPVUJMRSwKKyAg ICBDTVBMWEwgKG5hbmwgKCIxIiksIG5hbmwgKCIyIikpLCAnQycpOworCisgIG1ha2VfY29kZV9s aXRfbGwgKGN0eHQsICJsb25nX2xvbmdfbGxsaXRfMiIsCisgICAgR0NDX0pJVF9UWVBFX0xPTkdf TE9ORywKKyAgICAyKTsKKworICBtYWtlX2NvZGVfbGl0X2xsIChjdHh0LCAibG9uZ19sb25nX2xs bGl0X21pbiIsCisgICAgR0NDX0pJVF9UWVBFX0xPTkdfTE9ORywKKyAgICBMTE9OR19NSU4pOwor CisgIG1ha2VfY29kZV9saXRfbGwgKGN0eHQsICJsb25nX2xvbmdfbGxsaXRfbWF4IiwKKyAgICBH Q0NfSklUX1RZUEVfTE9OR19MT05HLAorICAgIExMT05HX01BWCk7CisKKyAgbWFrZV9jb2RlX2xp dF9sbCAoY3R4dCwgInVsb25nX2xvbmdfbGxsaXRfbWF4IiwKKyAgICBHQ0NfSklUX1RZUEVfVU5T SUdORURfTE9OR19MT05HLAorICAgIFVMTE9OR19NQVgpOworCisgIG1ha2VfY29kZV9saXRfZCAo Y3R4dCwgImRvdWJsZV9uYW4xIiwKKyAgICBHQ0NfSklUX1RZUEVfRE9VQkxFLAorICAgIG5hbigi MSIpLCAnZCcpOworICBtYWtlX2NvZGVfbGl0X2QgKGN0eHQsICJkb3VibGVfaW5mIiwKKyAgICBH Q0NfSklUX1RZUEVfRE9VQkxFLAorICAgIElORklOSVRZLCAnZCcpOworICBtYWtlX2NvZGVfbGl0 X2QgKGN0eHQsICJkb3VibGVfbWluZiIsCisgICAgR0NDX0pJVF9UWVBFX0RPVUJMRSwKKyAgICAt SU5GSU5JVFksICdkJyk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIENIRUNLX05PTl9OVUxMIChyZXN1 bHQpOworICB7CisgICAgZG91YmxlICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgK KyAgICAgIHJlc3VsdCwgImRvdWJsZV9uYW4xIik7CisKKyAgICBDSEVDSyhjb21wYXJlX25hbnMg KGYoKSwgbmFuKCIxIikpKTsKKyAgfQorICB7CisgICAgZG91YmxlICgqZikoKSA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgImRvdWJsZV9pbmYiKTsKKworICAgIENI RUNLX1ZBTFVFIChmKCksIElORklOSVRZKTsKKyAgfQorICB7CisgICAgZG91YmxlICgqZikoKSA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgImRvdWJsZV9taW5mIik7 CisKKyAgICBDSEVDS19WQUxVRSAoZigpLCAtSU5GSU5JVFkpOworICB9CisgIHsKKyAgICBsb25n IGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisgICAgICByZXN1bHQs ICJsb25nX2RvdWJsZV9sZGxpdF8xYzEiKTsKKworICAgIENIRUNLX1ZBTFVFKGYgKCksIC0xLjFM KTsKKyAgfQorICB7CisgICAgbG9uZyBkb3VibGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0 X2NvZGUgKAorICAgICAgcmVzdWx0LCAibG9uZ19kb3VibGVfbGRsaXRfMUxkaXYzTCIpOworCisg ICAgQ0hFQ0tfVkFMVUUoZiAoKSwgMS5MLzMuTCk7CisgIH0KKyAgeworICAgIF9Db21wbGV4IGxv bmcgZG91YmxlICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3Vs dCwgImNvbXBsZXhfbG9uZ19kb3VibGVfY2xkbGl0XzFkaXYzXzJkaXYzaiIpOworCisgICAgQ0hF Q0tfVkFMVUUgKGYoKSwgMS8zLkwgKyAyLkxqLzMpOworICB9CisgIHsKKyAgICBfQ29tcGxleCBs b25nIGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisgICAgICByZXN1 bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2NsZGxpdF9pbmZfaW5maiIpOworCisgICAgQ0hFQ0tf VkFMVUUgKGYoKSxDTVBMWEwgKElORklOSVRZLCBJTkZJTklUWSkpOworICB9CisgIHsKKyAgICBf Q29tcGxleCBsb25nIGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisg ICAgICByZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2NsZGxpdF9taW5mX21pbmZqIik7CisK KyAgICBDSEVDS19WQUxVRSAoZigpLENNUExYTCAoLUlORklOSVRZLCAtSU5GSU5JVFkpKTsKKyAg fQorICB7CisgICAgX0NvbXBsZXggbG9uZyBkb3VibGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV9jbGRsaXRfbmFu MV9uYW4yaiIpOworICAgIF9Db21wbGV4IGRvdWJsZSBrZXkgPSBDTVBMWEwgKG5hbmwgKCIxIiks IG5hbmwgKCIyIikpOworICAgIF9Db21wbGV4IGRvdWJsZSBhbnMgPSBmKCk7CisKKyAgICBDSEVD SyAoY29tcGFyZV9uYW5zbCAoY3JlYWxsIChrZXkpLCBjcmVhbGwgKGFucykpKTsKKyAgICBDSEVD SyAoY29tcGFyZV9uYW5zbCAoY2ltYWdsIChrZXkpLCBjaW1hZ2wgKGFucykpKTsKKyAgfQorICB7 CisgICAgbG9uZyBsb25nICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAg IHJlc3VsdCwgImxvbmdfbG9uZ19sbGxpdF8yIik7CisKKyAgICBDSEVDS19WQUxVRSAoZigpLCAy KTsKKyAgfQorICB7CisgICAgbG9uZyBsb25nICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9j b2RlICgKKyAgICAgIHJlc3VsdCwgImxvbmdfbG9uZ19sbGxpdF9taW4iKTsKKworICAgIENIRUNL X1ZBTFVFIChmKCksIExMT05HX01JTik7CisgIH0KKyAgeworICAgIGxvbmcgbG9uZyAoKmYpKCkg PSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisgICAgICByZXN1bHQsICJsb25nX2xvbmdfbGxs aXRfbWF4Iik7CisKKyAgICBDSEVDS19WQUxVRSAoZigpLCBMTE9OR19NQVgpOworICB9CisgIHsK KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUg KAorICAgICAgcmVzdWx0LCAidWxvbmdfbG9uZ19sbGxpdF9tYXgiKTsKKworICAgIENIRUNLX1ZB TFVFIChmKCksIFVMTE9OR19NQVgpOworICB9Cit9Ci0tIAoyLjMwLjIKCkZyb20gYjE1MmUzMmEw ZjNmNDU2OTlhOTVjNTUyNTYyYTE1ZDY5M2NjOGUxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK RnJvbTogUGV0dGVyIFRvbW5lciA8dG9tbmVyQGt0aC5zZT4KRGF0ZTogTW9uLCAyMCBTZXAgMjAy MSAxNzo0NzoyNiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMy8zXSBnbG9iYWwgaW5pdAoKLS0tCiBn Y2Mvaml0L2ppdC1wbGF5YmFjay5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgOTUgKystCiBn Y2Mvaml0L2ppdC1wbGF5YmFjay5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTEgKwogZ2Nj L2ppdC9qaXQtcmVjb3JkaW5nLmMgICAgICAgICAgICAgICAgICAgICAgIHwgMTk4ICsrKysrKysK IGdjYy9qaXQvaml0LXJlY29yZGluZy5oICAgICAgICAgICAgICAgICAgICAgICB8ICA4NiArKy0K IGdjYy9qaXQvbGliZ2Njaml0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMiArCiBn Y2Mvaml0L2xpYmdjY2ppdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTIgKwogZ2Nj L2ppdC9saWJnY2NqaXQubWFwICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiAuLi4v aml0LmRnL3Rlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMgICAgICAgICAgfCA1NTQgKysrKysrKysr KysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDk4MiBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWdsb2Jh bC1pbml0LXJ2YWx1ZS5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suYyBiL2dj Yy9qaXQvaml0LXBsYXliYWNrLmMKaW5kZXggZjYyY2ZjNWM4MDQuLmRkOWE3ZjExN2NkIDEwMDY0 NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jCisrKyBiL2djYy9qaXQvaml0LXBsYXliYWNr LmMKQEAgLTYwNSw2ICs2MDUsNzEgQEAgbmV3X2dsb2JhbCAobG9jYXRpb24gKmxvYywKICAgcmV0 dXJuIGdsb2JhbF9maW5hbGl6ZV9sdmFsdWUgKGlubmVyKTsKIH0KIAordm9pZAorcGxheWJhY2s6 OmNvbnRleHQ6OgorZ2xvYmFsX3NldF9pbml0X3J2YWx1ZSAobHZhbHVlKiBnbG9iYWwsCisJCQly dmFsdWUqIGluaXQpCit7CisgIHRyZWUgaW5uZXIgPSBnbG9iYWwtPmFzX3RyZWUgKCk7CisgIC8q IFdlIG5lZWQgdG8gZm9sZCBhbGwgZXhwcmVzc2lvbnMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVGhl IGNvZGUKKyAgICAgZm9yIGEgREVDTF9JTklUSUFMIG9ubHkgaGFuZGxlcyBzb21lIG9wZXJhdGlv bnMgLi4uCisgICAgIGV0YyBhZGRpdGlvbiwgbWludXMsICdhZGRyZXNzIG9mJy4gU2VlIG91dHB1 dF9hZGRyZXNzZWRfY29uc3RhbnRzKCkKKyAgICAgaW4gdmFyYXNtLmMgICovCisgIAorICB0cmVl IGZvbGRlZCA9IGZvbGQoaW5pdC0+YXNfdHJlZSAoKSk7CisgIERFQ0xfSU5JVElBTCAoaW5uZXIp ID0gZm9sZGVkOworICBnY2NfYXNzZXJ0IChUUkVFX0NPTlNUQU5UIChERUNMX0lOSVRJQUwgKGlu bmVyKSkpOworfQorCitwbGF5YmFjazo6cnZhbHVlICoKK3BsYXliYWNrOjpjb250ZXh0OjoKK25l d19jdG9yIChsb2NhdGlvbiAqbG9jLAorCSAgdHlwZSAqdHlwZSwKKwkgIGNvbnN0IGF1dG9fdmVj PGZpZWxkKj4gKmZpZWxkcywKKwkgIGNvbnN0IGF1dG9fdmVjPHJ2YWx1ZSo+ICpydmFsdWVzKQor eworICB0cmVlIHR5cGVfdHJlZSA9IHR5cGUtPmFzX3RyZWUgKCk7CisgIC8qIEhhbmRsZSBlbXB0 eSBjdG9ycyBmaXJzdC4gSS5lLiBzZXQgZXZlcnl0aGluZyB0byAiMCIgKi8KKyAgaWYgKGZpZWxk cy0+bGVuZ3RoICgpID09IDApCisgICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGJ1aWxkX2Nv bnN0cnVjdG9yICh0eXBlX3RyZWUsIE5VTEwpKTsKKworICBpbnQgbiA9IGZpZWxkcy0+bGVuZ3Ro ICgpOworICAKKyAgLyogVGhlIHZlYyBmb3IgdGhlIGNvbnN0cnVjdG9yIG5vZGUgKi8KKyAgdmVj PGNvbnN0cnVjdG9yX2VsdCwgdmFfZ2M+ICp2ID0gTlVMTDsKKyAgdmVjX2FsbG9jKHYsIG4pOwor CisgIGludCBpID0gMDsKKyAgdHJlZSBmaWVsZCA9IFRZUEVfRklFTERTICh0eXBlX3RyZWUpOwor CisgIC8qIEl0ZXJhdGUgb3ZlciB0aGUgZmllbGRzLCBidWlsZGluZyBpbml0aWFsaXphdGlvbnMu ICAqLworICBmb3IgKDsgZmllbGQgJiYgaSA8IG47IGZpZWxkID0gREVDTF9DSEFJTiAoZmllbGQp LCBpKyspCisgICAgeworICAgICAgLyoKKyAgICAgIHRyZWUgdGQgPSBERUNMX05BTUUoZmllbGQp OworICAgICAgY29uc3QgY2hhciogZmllbGRfbmFtZSA9IElERU5USUZJRVJfUE9JTlRFUiAodGQp OworICAgICAgKi8KKyAgICAgIAorICAgICAgLyogSWYgdGhlIHZhbHVlIGlzIE5VTEwsIGl0IG1l YW5zIHdlIHNob3VsZCB6ZXJvIHRoZSBmaWVsZCAqLworICAgICAgaWYgKCgqcnZhbHVlcylbaV0p CisJQ09OU1RSVUNUT1JfQVBQRU5EX0VMVCh2LCBmaWVsZCwgKCpydmFsdWVzKVtpXS0+YXNfdHJl ZSAoKSk7CisgICAgICBlbHNlCisJeworCSAgdHJlZSB6ZXJvX2NzdCA9IGJ1aWxkX3plcm9fY3N0 IChUUkVFX1RZUEUgKGZpZWxkKSk7CisJICBDT05TVFJVQ1RPUl9BUFBFTkRfRUxUKHYsIGZpZWxk LCB6ZXJvX2NzdCk7CisJfQorICAgIH0KKworICAvKiBBbnkgZmllbGRzIHJlbWFpbmluZyBhcmUg c2V0IHRvIDAgKi8KKyAgZm9yICg7IGZpZWxkOyBmaWVsZCA9IERFQ0xfQ0hBSU4gKGZpZWxkKSkK KyAgICB7CisgICAgICB0cmVlIHplcm9fY3N0ID0gYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAo ZmllbGQpKTsKKyAgICAgIENPTlNUUlVDVE9SX0FQUEVORF9FTFQodiwgZmllbGQsIHplcm9fY3N0 KTsKKyAgICB9CisgIAorICByZXR1cm4gbmV3IHJ2YWx1ZSh0aGlzLCBidWlsZF9jb25zdHJ1Y3Rv ciAodHlwZV90cmVlLCB2KSk7Cit9CisKIC8qIEZpbGwgJ2NvbnN0cnVjdG9yX2VsZW1lbnRzJyB3 aXRoIHRoZSBtZW1vcnkgY29udGVudCBvZgogICAgJ2luaXRpYWxpemVyJy4gIEVhY2ggZWxlbWVu dCBvZiB0aGUgaW5pdGlhbGl6ZXIgaXMgb2YgdGhlIHNpemUgb2YKICAgIHR5cGUgVC4gIEluIHVz ZSBieSBuZXdfZ2xvYmFsX2luaXRpYWxpemVkLiovCkBAIC0xMTA5LDcgKzExNzQsOCBAQCBhc190 cnV0aF92YWx1ZSAodHJlZSBleHByLCBsb2NhdGlvbiAqbG9jKQogICBpZiAobG9jKQogICAgIHNl dF90cmVlX2xvY2F0aW9uICh0eXBlZF96ZXJvLCBsb2MpOwogCi0gIGV4cHIgPSBidWlsZDIgKE5F X0VYUFIsIGludGVnZXJfdHlwZV9ub2RlLCBleHByLCB0eXBlZF96ZXJvKTsKKyAgZXhwciA9IGZv bGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwKKyAgICBORV9FWFBSLCBpbnRlZ2VyX3R5 cGVfbm9kZSwgZXhwciwgdHlwZWRfemVybyk7CiAgIGlmIChsb2MpCiAgICAgc2V0X3RyZWVfbG9j YXRpb24gKGV4cHIsIGxvYyk7CiAKQEAgLTExNzYsNiArMTI0MiwxMCBAQCBuZXdfdW5hcnlfb3Ag KGxvY2F0aW9uICpsb2MsCiAgIGlubmVyX3Jlc3VsdCA9IGJ1aWxkMSAoaW5uZXJfb3AsCiAJCQkg cmVzdWx0X3R5cGUtPmFzX3RyZWUgKCksCiAJCQkgbm9kZSk7CisKKyAgLyogVHJ5IHRvIGZvbGQg Ki8JCQkgICAgCisgIGlubmVyX3Jlc3VsdCA9IGZvbGQgKGlubmVyX3Jlc3VsdCk7CisgIAogICBp ZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9uIChpbm5lcl9yZXN1bHQsIGxvYyk7CiAKQEAg LTEyNzUsNiArMTM0NSwxMCBAQCBuZXdfYmluYXJ5X29wIChsb2NhdGlvbiAqbG9jLAogCQkJICAg IHJlc3VsdF90eXBlLT5hc190cmVlICgpLAogCQkJICAgIG5vZGVfYSwKIAkJCSAgICBub2RlX2Ip OworCisgIC8qIFRyeSB0byBmb2xkIHRoZSBleHByZXNzaW9uICovCisgIGlubmVyX2V4cHIgPSBm b2xkIChpbm5lcl9leHByKTsKKyAgCiAgIGlmIChsb2MpCiAgICAgc2V0X3RyZWVfbG9jYXRpb24g KGlubmVyX2V4cHIsIGxvYyk7CiAKQEAgLTEzMjYsNiArMTQwMCwxMCBAQCBuZXdfY29tcGFyaXNv biAobG9jYXRpb24gKmxvYywKIAkJCSAgICBib29sZWFuX3R5cGVfbm9kZSwKIAkJCSAgICBhLT5h c190cmVlICgpLAogCQkJICAgIGItPmFzX3RyZWUgKCkpOworCisgIC8qIFRyeSB0byBmb2xkICov CQkJICAgIAorICBpbm5lcl9leHByID0gZm9sZCAoaW5uZXJfZXhwcik7CisJCQkgICAgCiAgIGlm IChsb2MpCiAgICAgc2V0X3RyZWVfbG9jYXRpb24gKGlubmVyX2V4cHIsIGxvYyk7CiAgIHJldHVy biBuZXcgcnZhbHVlICh0aGlzLCBpbm5lcl9leHByKTsKQEAgLTE1MTUsNiArMTU5Myw3IEBAIG5l d19hcnJheV9hY2Nlc3MgKGxvY2F0aW9uICpsb2MsCiAgICAgewogICAgICAgdHJlZSB0X3Jlc3Vs dCA9IGJ1aWxkNCAoQVJSQVlfUkVGLCB0X3R5cGVfc3Rhcl9wdHIsIHRfcHRyLCB0X2luZGV4LAog CQkJICAgICAgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICAgICAgdF9yZXN1bHQgPSBmb2xkICh0 X3Jlc3VsdCk7CiAgICAgICBpZiAobG9jKQogCXNldF90cmVlX2xvY2F0aW9uICh0X3Jlc3VsdCwg bG9jKTsKICAgICAgIHJldHVybiBuZXcgbHZhbHVlICh0aGlzLCB0X3Jlc3VsdCk7CkBAIC0xNTI0 LDEyICsxNjAzLDE0IEBAIG5ld19hcnJheV9hY2Nlc3MgKGxvY2F0aW9uICpsb2MsCiAgICAgICAv KiBDb252ZXJ0IGluZGV4IHRvIGFuIG9mZnNldCBpbiBieXRlcy4gICovCiAgICAgICB0cmVlIHRf c2l6ZW9mID0gc2l6ZV9pbl9ieXRlcyAodF90eXBlX3N0YXJfcHRyKTsKICAgICAgIHRfaW5kZXgg PSBmb2xkX2J1aWxkMSAoQ09OVkVSVF9FWFBSLCBzaXpldHlwZSwgdF9pbmRleCk7Ci0gICAgICB0 cmVlIHRfb2Zmc2V0ID0gYnVpbGQyIChNVUxUX0VYUFIsIHNpemV0eXBlLCB0X2luZGV4LCB0X3Np emVvZik7Ci0KKyAgICAgIHRyZWUgdF9vZmZzZXQgPSBmb2xkX2J1aWxkMl9sb2MgKFVOS05PV05f TE9DQVRJT04sCisgICAgICAgIE1VTFRfRVhQUiwgc2l6ZXR5cGUsIHRfaW5kZXgsIHRfc2l6ZW9m KTsKKyAgICAgIAogICAgICAgLyogTG9jYXRlIChwdHIgKyBvZmZzZXQpLiAgKi8KLSAgICAgIHRy ZWUgdF9hZGRyZXNzID0gYnVpbGQyIChQT0lOVEVSX1BMVVNfRVhQUiwgdF90eXBlX3B0ciwgdF9w dHIsIHRfb2Zmc2V0KTsKKyAgICAgIHRyZWUgdF9hZGRyZXNzID0gZm9sZF9idWlsZDJfbG9jIChV TktOT1dOX0xPQ0FUSU9OLAorICAgICAgICBQT0lOVEVSX1BMVVNfRVhQUiwgdF90eXBlX3B0ciwg dF9wdHIsIHRfb2Zmc2V0KTsKIAotICAgICAgdHJlZSB0X2luZGlyZWN0aW9uID0gYnVpbGQxIChJ TkRJUkVDVF9SRUYsIHRfdHlwZV9zdGFyX3B0ciwgdF9hZGRyZXNzKTsKKyAgICAgIHRyZWUgdF9p bmRpcmVjdGlvbiA9IGZvbGRfYnVpbGQxIChJTkRJUkVDVF9SRUYsIHRfdHlwZV9zdGFyX3B0ciwg dF9hZGRyZXNzKTsKICAgICAgIGlmIChsb2MpCiAJewogCSAgc2V0X3RyZWVfbG9jYXRpb24gKHRf c2l6ZW9mLCBsb2MpOwpAQCAtMTU3Nyw3ICsxNjU4LDcgQEAgbmV3X2RlcmVmZXJlbmNlICh0cmVl IHB0ciwKICAgZ2NjX2Fzc2VydCAocHRyKTsKIAogICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKFRS RUVfVFlQRShwdHIpKTsKLSAgdHJlZSBkYXR1bSA9IGJ1aWxkMSAoSU5ESVJFQ1RfUkVGLCB0eXBl LCBwdHIpOworICB0cmVlIGRhdHVtID0gZm9sZF9idWlsZDEgKElORElSRUNUX1JFRiwgdHlwZSwg cHRyKTsKICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9sb2NhdGlvbiAoZGF0dW0sIGxvYyk7CiAg IHJldHVybiBkYXR1bTsKQEAgLTE3MzEsNyArMTgxMiw3IEBAIGdldF9hZGRyZXNzIChsb2NhdGlv biAqbG9jKQogICB0cmVlIHRfbHZhbHVlID0gYXNfdHJlZSAoKTsKICAgdHJlZSB0X3RoaXN0eXBl ID0gVFJFRV9UWVBFICh0X2x2YWx1ZSk7CiAgIHRyZWUgdF9wdHJ0eXBlID0gYnVpbGRfcG9pbnRl cl90eXBlICh0X3RoaXN0eXBlKTsKLSAgdHJlZSBwdHIgPSBidWlsZDEgKEFERFJfRVhQUiwgdF9w dHJ0eXBlLCB0X2x2YWx1ZSk7CisgIHRyZWUgcHRyID0gZm9sZF9idWlsZDEgKEFERFJfRVhQUiwg dF9wdHJ0eXBlLCB0X2x2YWx1ZSk7CiAgIGlmIChsb2MpCiAgICAgZ2V0X2NvbnRleHQgKCktPnNl dF90cmVlX2xvY2F0aW9uIChwdHIsIGxvYyk7CiAgIGlmIChtYXJrX2FkZHJlc3NhYmxlIChsb2Mp KQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suaCBiL2djYy9qaXQvaml0LXBsYXli YWNrLmgKaW5kZXggZjY3MGM5ZTgxZGYuLjBkMDYyNzYxYTA2IDEwMDY0NAotLS0gYS9nY2Mvaml0 L2ppdC1wbGF5YmFjay5oCisrKyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmgKQEAgLTEyMCw2ICsx MjAsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpp bml0aWFsaXplciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7 CiAKKyAgcnZhbHVlICoKKyAgbmV3X2N0b3IgKGxvY2F0aW9uICpsb2csCisJICAgIHR5cGUgKnR5 cGUsCisJICAgIGNvbnN0IGF1dG9fdmVjPGZpZWxkKj4gKmZpZWxkcywKKwkgICAgY29uc3QgYXV0 b192ZWM8cnZhbHVlKj4gKnJ2YWx1ZXMpOworCSAgICAKKworICB2b2lkCisgIGdsb2JhbF9zZXRf aW5pdF9ydmFsdWUgKGx2YWx1ZSogZ2xvYmFsLAorCQkJICBydmFsdWUqIGluaXQpOworCiAgIHRl bXBsYXRlIDx0eXBlbmFtZSBIT1NUX1RZUEU+CiAgIHJ2YWx1ZSAqCiAgIG5ld19ydmFsdWVfZnJv bV9jb25zdCAodHlwZSAqdHlwZSwKZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXJlY29yZGluZy5j IGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMKaW5kZXggOWQwNzA2MjEzMWUuLjA3MWRkMzAyYWY5 IDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuYworKysgYi9nY2Mvaml0L2ppdC1y ZWNvcmRpbmcuYwpAQCAtMTA2NCw2ICsxMDY0LDE1IEBAIHJlY29yZGluZzo6Y29udGV4dDo6bmV3 X2dsb2JhbCAocmVjb3JkaW5nOjpsb2NhdGlvbiAqbG9jLAogICByZXR1cm4gcmVzdWx0OwogfQog Cit2b2lkCityZWNvcmRpbmc6OmNvbnRleHQ6Om5ld19nbG9iYWxfaW5pdF9ydmFsdWUgKGx2YWx1 ZSAqZ2xvYmFsLAorCQkJCQkgICAgcnZhbHVlICppbml0KQoreworICByZWNvcmRpbmc6Omdsb2Jh bF9pbml0X3J2YWx1ZSAqb2JqID0KKyAgICBuZXcgcmVjb3JkaW5nOjpnbG9iYWxfaW5pdF9ydmFs dWUgKHRoaXMsIGdsb2JhbCwgaW5pdCk7CisgIHJlY29yZCAob2JqKTsKK30KKwogLyogQ3JlYXRl IGEgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19zdHJpbmdfbGl0ZXJhbCBpbnN0YW5jZSBhbmQg YWRkIGl0CiAgICB0byB0aGlzIGNvbnRleHQncyBsaXN0IG9mIG1lbWVudG9zLgogCkBAIC0xMDk2 LDEyICsxMTA1LDI2IEBAIHJlY29yZGluZzo6Y29udGV4dDo6bmV3X3J2YWx1ZV9mcm9tX3ZlY3Rv ciAobG9jYXRpb24gKmxvYywKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorcmVjb3JkaW5nOjpydmFs dWUgKgorcmVjb3JkaW5nOjpjb250ZXh0OjpuZXdfY3RvciAocmVjb3JkaW5nOjpsb2NhdGlvbiAq bG9jLAorCQkJICAgICAgcmVjb3JkaW5nOjp0eXBlICp0eXBlLAorCQkJICAgICAgaW50IHNpemUs CisJCQkgICAgICByZWNvcmRpbmc6OmZpZWxkICoqZmllbGRzLAorCQkJICAgICAgcmVjb3JkaW5n OjpydmFsdWUgKipydmFsdWVzKQoreworICByZWNvcmRpbmc6OnJ2YWx1ZSAqcmVzdWx0ID0KKyAg ICBuZXcgY3RvciAodGhpcywgbG9jLCB0eXBlLCBzaXplLCBmaWVsZHMsIHJ2YWx1ZXMpOworICBy ZWNvcmQgKHJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKIC8qIENyZWF0ZSBhIHJlY29y ZGluZzo6dW5hcnlfb3AgaW5zdGFuY2UgYW5kIGFkZCBpdCB0byB0aGlzIGNvbnRleHQncwogICAg bGlzdCBvZiBtZW1lbnRvcy4KIAogICAgSW1wbGVtZW50cyB0aGUgcG9zdC1lcnJvci1jaGVja2lu ZyBwYXJ0IG9mCiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3VuYXJ5X29wLiAgKi8KIAorCiByZWNv cmRpbmc6OnJ2YWx1ZSAqCiByZWNvcmRpbmc6OmNvbnRleHQ6Om5ld191bmFyeV9vcCAocmVjb3Jk aW5nOjpsb2NhdGlvbiAqbG9jLAogCQkJCSAgZW51bSBnY2Nfaml0X3VuYXJ5X29wIG9wLApAQCAt NTU4Myw2ICs1NjA2LDE1MCBAQCByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9t X3ZlY3Rvcjo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKIAkgICBlbGVtZW50c19p ZCk7CiB9CiAKK3ZvaWQKK3JlY29yZGluZzo6Y3Rvcjo6dmlzaXRfY2hpbGRyZW4gKHJ2YWx1ZV92 aXNpdG9yICp2KQoreworICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fdmFsdWVzLmxl bmd0aCAoKTsgaSsrKQorICAgIHYtPnZpc2l0IChtX3ZhbHVlc1tpXSk7Cit9CisKK3JlY29yZGlu Zzo6c3RyaW5nICoKK3JlY29yZGluZzo6Y3Rvcjo6bWFrZV9kZWJ1Z19zdHJpbmcgKCkKK3sKKyAg cmV0dXJuIHN0cmluZzo6ZnJvbV9wcmludGYgKG1fY3R4dCwKKwkJCSAgICAgICJjdG9yIik7Cit9 CisKK3ZvaWQKK3JlY29yZGluZzo6Y3Rvcjo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAm cikKK3sKKyAgY29uc3QgY2hhciAqaWQgPSByLm1ha2VfaWRlbnRpZmllciAodGhpcywgInJ2YWx1 ZSIpOworICByLndyaXRlICgiICBnY2Nfaml0X3J2YWx1ZSAqJXM7XG4iLCBpZCk7CisgIHIud3Jp dGUgKCIgIHtcbiIpOyAvKiBPcGVuIHNjb3BlIGZvciBsb2NhbHMgKi8KKworICAvKiBXcml0ZSB0 aGUgYXJyYXkgb2YgdmFsdWVzICovCisgIHIud3JpdGUgKCIgICAgZ2NjX2ppdF9ydmFsdWUgKnZh bHVlc1tdID0ge1xuIik7CisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV92YWx1ZXMu bGVuZ3RoICgpOyBpKyspCisgICAgci53cml0ZSAoIiAgICAgICVzLFxuIiwgci5nZXRfaWRlbnRp ZmllciAobV92YWx1ZXNbaV0pKTsKKyAgci53cml0ZSAoIiAgICAgIH07XG4iKTsKKyAgLyogV3Jp dGUgdGhlIGFycmF5IG9mIGZpZWxkcyAqLworICByLndyaXRlICgiICAgIGdjY19qaXRfZmllbGQg KmZpZWxkc1tdID0ge1xuIik7CisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9maWVs ZHMubGVuZ3RoICgpOyBpKyspCisgICAgci53cml0ZSAoIiAgICAgICVzLFxuIiwgci5nZXRfaWRl bnRpZmllciAobV9maWVsZHNbaV0pKTsKKyAgci53cml0ZSAoIiAgICAgIH07XG4iKTsKKyAgCisg IHIud3JpdGUgKAorIiAgICAlcyA9XG4iCisiICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb25z dHJ1Y3RvciAoJXMsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JXMsIC8qIGdjY19qaXRfbG9jYXRpb24gKmxvYyAqL1xuIgorIiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKnR5cGUgKi9cbiIKKyIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlaSwgLyogaW50IGFycl9sZW5ndGgg Ki9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMsXG4i CisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKTtcbiIsCisJ ICAgICBpZCwKKwkgICAgIHIuZ2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKwkgICAg IHIuZ2V0X2lkZW50aWZpZXIgKG1fbG9jKSwKKwkgICAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlw ZSAoZ2V0X3R5cGUgKCkpLAorCSAgICAgbV9maWVsZHMubGVuZ3RoICgpKTsKKyAgCisgIHIud3Jp dGUgKCIgIH1cbiIpOyAvKiBDbG9zZSBzY29wZSBmb3IgbG9jYWxzICovCit9CisKK3ZvaWQKK3Jl Y29yZGluZzo6Y3Rvcjo6cmVwbGF5X2ludG8gKHJlcGxheWVyICpyKQoreworICBhdXRvX3ZlYzxw bGF5YmFjazo6cnZhbHVlICo+IHBsYXliYWNrX3ZhbHVlczsKKyAgYXV0b192ZWM8cGxheWJhY2s6 OmZpZWxkICo+IHBsYXliYWNrX2ZpZWxkczsKKworICBpbnQgbiA9IG1fdmFsdWVzLmxlbmd0aCgp OworICBwbGF5YmFja192YWx1ZXMucmVzZXJ2ZSAobiwgZmFsc2UpOworICBwbGF5YmFja19maWVs ZHMucmVzZXJ2ZSAobiwgZmFsc2UpOworCisgIC8qIENoZWNrIGlmIHdlIG5lZWQgdG8gc29ydCB0 aGUgZmllbGRzICovCisgIGludCBpc19zb3J0ZWQgPSAxOworCisgIHR5cGUgKnR5cGUgPSBnZXRf dHlwZSAoKTsKKyAgY29tcG91bmRfdHlwZSAqY3QgPSBzdGF0aWNfY2FzdDxjb21wb3VuZF90eXBl ICo+KHR5cGUpOworICAKKyAgZmllbGRzICpmaWVsZHMgPSBjdC0+Z2V0X2ZpZWxkcyAoKTsKKyAg aW50IG5fZmllbGRzID0gZmllbGRzLT5sZW5ndGggKCk7CisgIAorICBmb3IgKGludCBpID0gMDsg aSA8IG4gJiYgaSA8IG5fZmllbGRzOyBpKyspCisgICAgeworICAgICAgZmllbGQgKmZpZWxkX3N0 cnVjdCA9IGZpZWxkcy0+Z2V0X2ZpZWxkIChpKTsKKyAgICAgIGZpZWxkICpmaWVsZF9jdG9yID0g bV9maWVsZHNbaV07CisKKyAgICAgIC8qIERvIHRoZSBmaWVsZHMgaGF2ZSB0aGUgc2FtZSB0eXBl IGFuZCB0aGUgc2FtZSBuYW1lPyAqLworICAgICAgaWYgKAorCSAgICAoZmllbGRfc3RydWN0LT5n ZXRfdHlwZSAoKS0+CisJICAgICAgIGFjY2VwdHNfd3JpdGVzX2Zyb20gKGZpZWxkX2N0b3ItPmdl dF90eXBlKCkpKQorCSAgICAmJgorCSAgICAoMCA9PSBzdHJjbXAgKGZpZWxkX3N0cnVjdC0+Z2V0 X25hbWUgKCktPmNfc3RyICgpLAorCQkJICAgIGZpZWxkX2N0b3ItPmdldF9uYW1lICgpLT5jX3N0 ciAoKSkpCisJICkKKwk7CisgICAgICBlbHNlCisJeworCSAgaXNfc29ydGVkID0gMDsKKwkgIGJy ZWFrOworCX0KKyAgICB9CisKKyAgaWYgKGlzX3NvcnRlZCkKKyAgICB7CisgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IG47IGkrKykKKwlwbGF5YmFja192YWx1ZXMucXVpY2tfcHVzaCAobV92YWx1 ZXNbaV0tPnBsYXliYWNrX3J2YWx1ZSAoKSk7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47 IGkrKykKKwlwbGF5YmFja19maWVsZHMucXVpY2tfcHVzaCAobV9maWVsZHNbaV0tPnBsYXliYWNr X2ZpZWxkICgpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgbl9oaXRzID0gMDsK KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbl9maWVsZHM7IGkrKykKKwl7CisJICBmaWVsZCAq ZmllbGRfc3RydWN0ID0gZmllbGRzLT5nZXRfZmllbGQgKGkpOworCisJICBpbnQgZm91bmQgPSAw OworCSAgZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspCisJICAgIHsKKwkgICAgICBmaWVsZCAq ZmllbGRfY3RvciA9IG1fZmllbGRzW2pdOworCisJICAgICAgaWYgKAorCQkgICAoZmllbGRfc3Ry dWN0LT5nZXRfdHlwZSAoKS0+CisJCSAgICAgICBhY2NlcHRzX3dyaXRlc19mcm9tIChmaWVsZF9j dG9yLT5nZXRfdHlwZSgpKSkKKwkJICAgICYmCisJCSAgICgwID09IHN0cmNtcCAoZmllbGRfc3Ry dWN0LT5nZXRfbmFtZSAoKS0+Y19zdHIgKCksCisJCQkJIGZpZWxkX2N0b3ItPmdldF9uYW1lICgp LT5jX3N0ciAoKSkpCisJCSApCisJICAgICAgICB7CisJCSAgcGxheWJhY2tfdmFsdWVzLnNhZmVf cHVzaCAobV92YWx1ZXNbal0tPnBsYXliYWNrX3J2YWx1ZSAoKSk7CisJCSAgcGxheWJhY2tfZmll bGRzLnNhZmVfcHVzaCAobV9maWVsZHNbal0tPnBsYXliYWNrX2ZpZWxkICgpKTsKKwkJICBmb3Vu ZCA9IDE7CisJCSAgbl9oaXRzKys7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgLyogUHVz aCBudWxsIHZhbHVlIGlmIG5vdCBmb3VuZCwgdG8gemVybyB0aGUgZmllbGQuICovCisJICBpZiAo IWZvdW5kKQorCSAgICB7CisJICAgICAgcGxheWJhY2tfdmFsdWVzLnNhZmVfcHVzaCAoTlVMTCk7 CisJICAgICAgcGxheWJhY2tfZmllbGRzLnNhZmVfcHVzaCAoZmllbGRfc3RydWN0LT5wbGF5YmFj a19maWVsZCAoKSk7CisJICAgIH0KKwl9CisgICAgICAvKiBWZXJpZnkgdGhhdCB3ZSBmb3VuZCBh bGwgdGhlIGZpZWxkcyBzcGVjaWZpZWQuICovCisgICAgICBpZiAobl9oaXRzICE9IG4pCisJewor CSAgLyogVE9ETzogTW92ZSB0byBuZXdfY3RvciBhbmQgcmFpc2UgZXJyb3IuICovCisJfQorICAg ICAgCisgICAgfQorICAKKyAgc2V0X3BsYXliYWNrX29iaiAoci0+bmV3X2N0b3IgKHBsYXliYWNr X2xvY2F0aW9uIChyLCBtX2xvYyksCisJCQkJIGdldF90eXBlICgpLT5wbGF5YmFja190eXBlICgp LAorCQkJCSAmcGxheWJhY2tfZmllbGRzLAorCQkJCSAmcGxheWJhY2tfdmFsdWVzKSk7Cit9CisK IC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjbGFzcyBnY2M6OmppdDo6cmVjb3JkaW5nOjp1bmFy eV9vcC4gICovCiAKIC8qIEltcGxlbWVudGF0aW9uIG9mIHB1cmUgdmlydHVhbCBob29rIHJlY29y ZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8KQEAgLTc1NTYsNiArNzcyMywzNyBAQCByZWNvcmRp bmc6OnRvcF9sZXZlbF9hc206OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAJICAg bV9hc21fc3RtdHMtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOwogfQogCit2b2lkCityZWNvcmRpbmc6 Omdsb2JhbF9pbml0X3J2YWx1ZTo6cmVwbGF5X2ludG8gKHJlcGxheWVyICpyKQoreworICByLT5n bG9iYWxfc2V0X2luaXRfcnZhbHVlIChtX2dsb2JhbC0+cGxheWJhY2tfbHZhbHVlKCksCisJCQkg ICAgIG1faW5pdC0+cGxheWJhY2tfcnZhbHVlKCkpOworfQorCit2b2lkCityZWNvcmRpbmc6Omds b2JhbF9pbml0X3J2YWx1ZTo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKK3sKKyAg ci53cml0ZSAoCisgICAgIiAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAo JXMsIC8qIGx2YWx1ZSAqZ2xvYmFsICovXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJXMpOy8qIHJ2YWx1ZSAqaW5pdCAqL1xuIiwKKyAgICByLmdldF9p ZGVudGlmaWVyIChtX2dsb2JhbCksCisgICAgci5nZXRfaWRlbnRpZmllciAobV9pbml0KSk7Cit9 CisKK3ZvaWQKK3JlY29yZGluZzo6Z2xvYmFsX2luaXRfcnZhbHVlOjp3cml0ZV90b19kdW1wIChk dW1wICZkKQoreworICBkLndyaXRlICgiJXM7XG4iLCBnZXRfZGVidWdfc3RyaW5nICgpKTsKK30K KworcmVjb3JkaW5nOjpzdHJpbmcgKgorcmVjb3JkaW5nOjpnbG9iYWxfaW5pdF9ydmFsdWU6Om1h a2VfZGVidWdfc3RyaW5nICgpCit7CisgICAgcmV0dXJuIHN0cmluZzo6ZnJvbV9wcmludGYobV9j dHh0LCAiJXMgPSB7JXN9IiwKKyAgICAgIG1fZ2xvYmFsLT5nZXRfZGVidWdfc3RyaW5nICgpLAor ICAgICAgbV9pbml0LT5nZXRfZGVidWdfc3RyaW5nICgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug Z2NjOjpqaXQKIAogfSAvLyBuYW1lc3BhY2UgZ2NjCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1y ZWNvcmRpbmcuaCBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCmluZGV4IGQ1ZTBjMzU5YTQ4Li5l NzExZGNlMjVjOCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKKysrIGIvZ2Nj L2ppdC9qaXQtcmVjb3JkaW5nLmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgcmVwcm9kdWNlcjsK ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwogCiBuYW1lc3BhY2UgcmVjb3JkaW5nIHsKLQorICAKIHBsYXliYWNr Ojpsb2NhdGlvbiAqCiBwbGF5YmFja19sb2NhdGlvbiAocmVwbGF5ZXIgKnIsIGxvY2F0aW9uICps b2MpOwogCkBAIC0xNDksNiArMTQ5LDE3IEBAIHB1YmxpYzoKIAkgICAgICB0eXBlICp0eXBlLAog CSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOwogCisgIHJ2YWx1ZSAqCisgIG5ld19jdG9yIChsb2Nh dGlvbiAqbG9jLAorCSAgICB0eXBlICp0eXBlLAorCSAgICBpbnQgc2l6ZSwKKwkgICAgZmllbGQg KipmaWVsZHMsCisJICAgIHJ2YWx1ZSAqKnZhbHVlcyk7CisKKyAgdm9pZAorICBuZXdfZ2xvYmFs X2luaXRfcnZhbHVlIChsdmFsdWUgKmdsb2JhbCwKKwkJCSAgcnZhbHVlICppbml0KTsKKwogICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgSE9TVF9UWVBFPgogICBydmFsdWUgKgogICBuZXdfcnZhbHVlX2Zy b21fY29uc3QgKHR5cGUgKnR5cGUsCkBAIC04NzMsNiArODg0LDcgQEAgcHVibGljOgogICB7fQog CiAgIHR5cGUgKiBnZXRfdHlwZSAoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgc3RyaW5n ICogZ2V0X25hbWUgKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKICAgY29tcG91bmRfdHlw ZSAqIGdldF9jb250YWluZXIgKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXI7IH0KICAgdm9p ZCBzZXRfY29udGFpbmVyIChjb21wb3VuZF90eXBlICpjKSB7IG1fY29udGFpbmVyID0gYzsgfQpA QCAtMTM5Nyw3ICsxNDA5LDE0IEBAIHB1YmxpYzoKIAogICB2b2lkIHJlcGxheV9pbnRvIChyZXBs YXllciAqKSBGSU5BTCBPVkVSUklERTsKIAotICB2b2lkIHZpc2l0X2NoaWxkcmVuIChydmFsdWVf dmlzaXRvciAqKSBGSU5BTCBPVkVSUklERSB7fQorICB2b2lkIHZpc2l0X2NoaWxkcmVuIChydmFs dWVfdmlzaXRvciAqdikgRklOQUwgT1ZFUlJJREUKKyAgeworICAgIGlmIChtX2luaXRfcnZhbHVl KQorICAgICAgeworCXYtPnZpc2l0IChtX2luaXRfcnZhbHVlKTsKKwkvL21faW5pdF9ydmFsdWUt PnZpc2l0X2NoaWxkcmVuICh2KTsKKyAgICAgIH0KKyAgfQogCiAgIHZvaWQgd3JpdGVfdG9fZHVt cCAoZHVtcCAmZCkgRklOQUwgT1ZFUlJJREU7CiAKQEAgLTE0MTQsNiArMTQzMywxMiBAQCBwdWJs aWM6CiAgICAgbV9pbml0aWFsaXplcl9udW1fYnl0ZXMgPSBudW1fYnl0ZXM7CiAgIH0KIAorICB2 b2lkCisgIHNldF9pbml0aWFsaXplcl9ydmFsdWUgKHJ2YWx1ZSAqcnYpCisgIHsKKyAgICBtX2lu aXRfcnZhbHVlID0gcnY7CisgIH0KKwogcHJpdmF0ZToKICAgc3RyaW5nICogbWFrZV9kZWJ1Z19z dHJpbmcgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9uYW1lOyB9CiAgIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgpAQCAtMTQyMyw2ICsxNDQ4LDcgQEAgcHJpdmF0ZToKICAgewogICAgIHJldHVy biBQUkVDRURFTkNFX1BSSU1BUlk7CiAgIH0KKyAgcnZhbHVlICptX2luaXRfcnZhbHVlID0gMDsK IAogcHJpdmF0ZToKICAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIG1fa2luZDsKQEAgLTE1MTIs NiArMTUzOCw0NCBAQCBwcml2YXRlOgogICBhdXRvX3ZlYzxydmFsdWUgKj4gbV9lbGVtZW50czsK IH07CiAKK2NsYXNzIGN0b3IgOiBwdWJsaWMgcnZhbHVlCit7CitwdWJsaWM6CisgIGN0b3IgKGNv bnRleHQgKmN0eHQsCisJbG9jYXRpb24gKmxvYywKKwl0eXBlICp0eXBlLAorCWludCBzaXplLAor CWZpZWxkICoqZmllbGRzLAorCXJ2YWx1ZSAqKnZhbHVlcykKKyAgOiBydmFsdWUgKGN0eHQsIGxv YywgdHlwZSkKKyAgeworICAgIG1fZmllbGRzLnJlc2VydmUgKHNpemUsIGZhbHNlKTsKKyAgICBt X3ZhbHVlcy5yZXNlcnZlIChzaXplLCBmYWxzZSk7CisgICAgCisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBzaXplOyBpKyspCisgICAgICB7CisJbV9maWVsZHMucXVpY2tfcHVzaCAoZmllbGRzW2ld KTsKKwltX3ZhbHVlcy5xdWlja19wdXNoICh2YWx1ZXNbaV0pOworICAgICAgfQorICB9CisKKyAg dm9pZCByZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpIEZJTkFMIE9WRVJSSURFOworCisgIHZvaWQg dmlzaXRfY2hpbGRyZW4gKHJ2YWx1ZV92aXNpdG9yICopIEZJTkFMIE9WRVJSSURFOworCitwcml2 YXRlOgorICBzdHJpbmcgKiBtYWtlX2RlYnVnX3N0cmluZyAoKSBGSU5BTCBPVkVSUklERTsKKyAg dm9pZCB3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKSBGSU5BTCBPVkVSUklERTsKKyAg ZW51bSBwcmVjZWRlbmNlIGdldF9wcmVjZWRlbmNlICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFCisg IHsKKyAgICByZXR1cm4gUFJFQ0VERU5DRV9QUklNQVJZOworICB9CisKK3ByaXZhdGU6CisgIGF1 dG9fdmVjPGZpZWxkICo+IG1fZmllbGRzOworICBhdXRvX3ZlYzxydmFsdWUgKj4gbV92YWx1ZXM7 Cit9OworCiBjbGFzcyB1bmFyeV9vcCA6IHB1YmxpYyBydmFsdWUKIHsKIHB1YmxpYzoKQEAgLTIz NTUsNiArMjQxOSwyNCBAQCBwcml2YXRlOgogICBzdHJpbmcgKm1fYXNtX3N0bXRzOwogfTsKIAor Y2xhc3MgZ2xvYmFsX2luaXRfcnZhbHVlIDogcHVibGljIG1lbWVudG8KK3sKK3B1YmxpYzoKKyAg Z2xvYmFsX2luaXRfcnZhbHVlIChjb250ZXh0ICpjdHh0LCBsdmFsdWUgKmdsb2JhbCwgcnZhbHVl ICppbml0KSA6CisgICAgbWVtZW50byhjdHh0KSwgbV9nbG9iYWwgKGdsb2JhbCksIG1faW5pdCAo aW5pdCkge307CisKKyAgdm9pZCB3cml0ZV90b19kdW1wIChkdW1wICZkKSBGSU5BTCBPVkVSUklE RTsKKworcHJpdmF0ZToKKyAgdm9pZCByZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpIEZJTkFMIE9W RVJSSURFOworICBzdHJpbmcgKiBtYWtlX2RlYnVnX3N0cmluZyAoKSBGSU5BTCBPVkVSUklERTsK KyAgdm9pZCB3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKSBGSU5BTCBPVkVSUklERTsK KworcHJpdmF0ZToKKyAgbHZhbHVlICptX2dsb2JhbDsKKyAgcnZhbHVlICptX2luaXQ7Cit9Owor CiB9IC8vIG5hbWVzcGFjZSBnY2M6OmppdDo6cmVjb3JkaW5nCiAKIC8qIENyZWF0ZSBhIHJlY29y ZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgaW5zdGFuY2UgYW5kIGFkZApk aWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQuYyBiL2djYy9qaXQvbGliZ2Njaml0LmMKaW5k ZXggOWI0ZTg0N2M0OTkuLmZkMTljNjFiZDNlIDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2pp dC5jCisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmMKQEAgLTExMzAsNiArMTEzMCwzOCBAQCBnY2Nf aml0X2NvbnRleHRfbmV3X2dsb2JhbCAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogICByZXR1cm4g KGdjY19qaXRfbHZhbHVlICopY3R4dC0+bmV3X2dsb2JhbCAobG9jLCBraW5kLCB0eXBlLCBuYW1l KTsKIH0KIAorCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld19j b25zdHJ1Y3RvciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCSBnY2Nfaml0X2xvY2F0aW9u ICpsb2MsCisJCQkJIGdjY19qaXRfdHlwZSAqdHlwZSwKKwkJCQkgaW50IGFycl9sZW5ndGgsCisJ CQkJIGdjY19qaXRfZmllbGQgKipmaWVsZHMsCisJCQkJIGdjY19qaXRfcnZhbHVlICoqdmFsdWVz KQoreworICBpbnQgYSA9IDM7CisgIHJldHVybiAoZ2NjX2ppdF9ydmFsdWUgKiljdHh0LT5uZXdf Y3RvciAoCisgICAgbG9jLAorICAgIHR5cGUsCisgICAgYXJyX2xlbmd0aCwKKyAgICAoZ2NjOjpq aXQ6OnJlY29yZGluZzo6ZmllbGQgKiopZmllbGRzLAorICAgIChnY2M6OmppdDo6cmVjb3JkaW5n OjpydmFsdWUgKiopdmFsdWVzKTsKK30KKworZXh0ZXJuIGdjY19qaXRfbHZhbHVlICoKK2djY19q aXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGdjY19qaXRfbHZhbHVlICpnbG9iYWws CisJCQkJICAgICAgIGdjY19qaXRfcnZhbHVlICppbml0X3ZhbHVlKQoreworICBSRVRVUk5fTlVM TF9JRl9GQUlMKCBnbG9iYWwsIE5VTEwsIE5VTEwsIk5VTEwgZ2xvYmFsIik7CisgIFJFVFVSTl9O VUxMX0lGX0ZBSUxfUFJJTlRGMSAoZ2xvYmFsLT5pc19nbG9iYWwgKCksIE5VTEwsIE5VTEwsCisJ CQkgICAgICAgImx2YWx1ZSBcIiVzXCIgbm90IGEgZ2xvYmFsIiwKKwkJCSAgICAgICBnbG9iYWwt PmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIGdsb2JhbC0+Z2V0X2NvbnRleHQgKCktPm5ld19n bG9iYWxfaW5pdF9ydmFsdWUgKGdsb2JhbCwgaW5pdF92YWx1ZSk7CisgIAorICByZXR1cm4gZ2xv YmFsOworfQorCiAvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJn Y2NqaXQuaC4KIAogICAgQWZ0ZXIgZXJyb3ItY2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9u ZSBieSB0aGUKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmggYi9nY2Mvaml0L2xpYmdj Y2ppdC5oCmluZGV4IDQ5ZTM1OWY0MjBjLi5iZTFkOTA5NmM0ZSAxMDA2NDQKLS0tIGEvZ2NjL2pp dC9saWJnY2NqaXQuaAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5oCkBAIC03OTUsNiArNzk1LDE4 IEBAIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJ CQkgICAgZ2NjX2ppdF90eXBlICp0eXBlLAogCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpOwogCitl eHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvciAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCSBnY2Nfaml0X2xvY2F0aW9uICpsb2MsCisJCQkJ IGdjY19qaXRfdHlwZSAqdHlwZSwKKwkJCQkgaW50IGFycl9sZW5ndGgsCisJCQkJIGdjY19qaXRf ZmllbGQgKipmaWVsZHMsCisJCQkJIGdjY19qaXRfcnZhbHVlICoqdmFsdWVzKTsKKwkgICAgCitl eHRlcm4gZ2NjX2ppdF9sdmFsdWUgKgorZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2 YWx1ZSAoZ2NjX2ppdF9sdmFsdWUgKmdsb2JhbCwKKwkJCQkgICAgICAgZ2NjX2ppdF9ydmFsdWUg KmluaXRfdmFsdWUpOworCQkJICAgIAogI2RlZmluZSBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0X2ds b2JhbF9zZXRfaW5pdGlhbGl6ZXIKIAogLyogU2V0IGFuIGluaXRpYWwgdmFsdWUgZm9yIGEgZ2xv YmFsLCB3aGljaCBtdXN0IGJlIGFuIGFycmF5IG9mCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdj Y2ppdC5tYXAgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKaW5kZXggNDAyMmRiYjZmYmMuLmM1YTFh ZmRlYWNmIDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKKysrIGIvZ2NjL2ppdC9s aWJnY2NqaXQubWFwCkBAIC0yMDgsOSArMjA4LDExIEBAIExJQkdDQ0pJVF9BQklfMTUgewogCiBM SUJHQ0NKSVRfQUJJXzE2IHsKICAgZ2xvYmFsOgorICAgIGdjY19qaXRfY29udGV4dF9uZXdfY29u c3RydWN0b3I7CiAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2Rv dWJsZTsKICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfbG9uZ19k b3VibGU7Ci0gICAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVz OwogICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGU7CiAgICAg Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2xvbmc7CisgICAgZ2NjX2ppdF9j b250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzOworICAgIGdjY19qaXRfZ2xvYmFs X3NldF9pbml0aWFsaXplcl9ydmFsdWU7CiB9IExJQkdDQ0pJVF9BQklfMTU7ClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1n bG9iYWwtaW5pdC1ydmFsdWUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZ2xvYmFsLWlu aXQtcnZhbHVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVmZDc3 ZWQyNzUzCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1nbG9i YWwtaW5pdC1ydmFsdWUuYwpAQCAtMCwwICsxLDU1NCBAQAorCisKKyNpbmNsdWRlIDxzdGRpby5o PgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3Zv aWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkK K3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAo Y3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAgZ2NjX2ppdF90eXBlICpwaW50X3R5cGUg PSBnY2Nfaml0X3R5cGVfZ2V0X3BvaW50ZXIgKGludF90eXBlKTsKKyAgZ2NjX2ppdF90eXBlICpk b3VibGVfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklU X1RZUEVfRE9VQkxFKTsKKyAgZ2NjX2ppdF90eXBlICpmbG9hdF90eXBlID0gZ2NjX2ppdF9jb250 ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7CisgIGdjY19qaXRf dHlwZSAqYm9vbF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdD Q19KSVRfVFlQRV9CT09MKTsKKworICAvKiBNYWtlIGEgc3RydWN0OiBzdHJ1Y3QgZmkgeyBmbG9h dCBmOyBpbnQgaTt9ICovCisgIGdjY19qaXRfZmllbGQgKmYxID0gZ2NjX2ppdF9jb250ZXh0X25l d19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGZsb2F0X3R5cGUsCisJCQkJCQkgImYi KTsKKyAgZ2NjX2ppdF9maWVsZCAqZjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0 LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImkiKTsKKyAgZ2NjX2ppdF9m aWVsZCAqZmllbGRzW10gPSB7ZjEsIGYyfTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9maV90 eXBlID0KKyAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBlICgKKyAgICAgIGdjY19qaXRfY29udGV4 dF9uZXdfc3RydWN0X3R5cGUgKGN0eHQsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgICJmaSIs CisJCQkJICAgICAgIDIsCisJCQkJICAgICAgIGZpZWxkcykpOworCisgIC8qIE1ha2UgYSBzdHJ1 Y3Q6CisKKyAgICAgc3RyaWN0IGJhciB7CisgICAgICAgaW50IGlpOworICAgICAgIHN0cnVjdCBm aSBmaTsKKyAgICAgICBmbG9hdCBmZjsKKyAgICAgfQorICAqLworICBmMSA9IGdjY19qaXRfY29u dGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJICAwLAorCQkJCSAgZmxvYXRfdHlwZSwKKwkJCQkg ICJmZiIpOworICBmMiA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJICAw LAorCQkJCSAgaW50X3R5cGUsCisJCQkJICAiaWkiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmkgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgc3RydWN0 X2ZpX3R5cGUsCisJCQkJCQkgImZpIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkczJbXSA9IHtm MSwgZmksIGYyfTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9iYXJfdHlwZSA9CisgICAgZ2Nj X2ppdF9zdHJ1Y3RfYXNfdHlwZSAoCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF90 eXBlIChjdHh0LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICAiYmFyIiwKKwkJCQkgICAgICAg MywKKwkJCQkgICAgICAgZmllbGRzMikpOworCisgIC8qIE1ha2UgZ2xvYmFscyBpbml0aWFsaXpl ZCB3aXRoIGN0b3JzICovCisgIAorICB7IC8qIHN0cnVjdCBiYXIgYmFyID0gey5paSA9IDQsIC5m ZiA9IDEsIC5maSA9IHsuaSA9IDMsIC5mID0gMn19OworICAgICAgIEkuZS4gbmVzdGVkIHN0cnVj dCBhbmQgbmVzdGVkIGN0b3JzIGluICJ3cm9uZyIgb3JkZXIuCisgICAgICovCisgICAgZ2NjX2pp dF9sdmFsdWUgKmJhciA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQs IE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHN0cnVjdF9iYXJf dHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0X2Jhcl8xIik7CisKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0 eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVlICppdmFsID0gZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOwor ICAgIAorICAgIGdjY19qaXRfZmllbGQgKmZpX2YgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxk IChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIGZsb2F0X3R5cGUsCisJCQkJCQkgICAiZiIp OworICAgIGdjY19qaXRfZmllbGQgKmZpX2kgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChj dHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIGludF90eXBlLAorCQkJCQkJICAgImkiKTsgICAK KyAgICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyBpdmFsLCBmdmFsfTsKKyAgICBn Y2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9pLCBmaV9mfTsKKyAgICAKKyAgICBnY2Nfaml0 X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IKKyAgICAgIChj dHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDIsCisgICAgICAgZmllbGRz LAorICAgICAgIHZhbHMpOworCisgICAgaXZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA0KTsKKyAgICBmdmFsID0gZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwg MSk7CisKKyAgICBnY2Nfaml0X2ZpZWxkICpiYXJfZmkgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Zp ZWxkIChjdHh0LAorCQkJCQkJICAgICAgIDAsCisJCQkJCQkgICAgICAgc3RydWN0X2ZpX3R5cGUs CisJCQkJCQkgICAgICAgImZpIik7CisgICAgZ2NjX2ppdF9maWVsZCAqYmFyX2ZmID0gZ2NjX2pp dF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgICAgICAwLAorCQkJCQkJICAgICAg IGZsb2F0X3R5cGUsCisJCQkJCQkgICAgICAgImZmIik7CisgICAgZ2NjX2ppdF9maWVsZCAqYmFy X2lpID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgICAgICAwLAor CQkJCQkJICAgICAgIGludF90eXBlLAorCQkJCQkJICAgICAgICJpaSIpOworICAgIAorICAgIGdj Y19qaXRfcnZhbHVlICp2YWxzMltdID0ge2l2YWwsIGZ2YWwsIGN0b3J9OworICAgIGdjY19qaXRf ZmllbGQgKmZpZWxkczJbXSA9IHtiYXJfaWksIGJhcl9mZiwgYmFyX2ZpfTsKKworICAgIGdjY19q aXRfcnZhbHVlICpjdG9yX2JhciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IKKyAg ICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9iYXJfdHlwZSwKKyAgICAgICAzLAorICAgICAg IGZpZWxkczIsCisgICAgICAgdmFsczIpOworICAgIAorICAgIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKGJhciwgY3Rvcl9iYXIpOworICB9Cit7IC8qIHN0cnVjdCBiYXIg YmFyID0gezEsIHsyLCAzfSwgNH07CisgICAgICAgSS5lLiBuZXN0ZWQgc3RydWN0IGFuZCBuZXN0 ZWQgY3RvcnMgaW4gInJpZ2h0IiBvcmRlci4KKyAgICAgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAq YmFyID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAg ICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0X2Jhcl90eXBlLAorICAg ICAgImdsb2JhbF9zdHJ1Y3RfYmFyXzIiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpmdmFsID0g Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRf dHlwZSwgMik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKml2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgCisgICAg Z2NjX2ppdF9maWVsZCAqZmlfZiA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJ CQkJCQkgICAwLAorCQkJCQkJICAgZmxvYXRfdHlwZSwKKwkJCQkJCSAgICJmIik7CisgICAgZ2Nj X2ppdF9maWVsZCAqZmlfaSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJ CQkgICAwLAorCQkJCQkJICAgaW50X3R5cGUsCisJCQkJCQkgICAiaSIpOyAgIAorICAgIAorICAg IGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7IGZ2YWwsIGl2YWx9OworICAgIGdjY19qaXRfZmll bGQgKmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworICAgIAorICAgIGdjY19qaXRfcnZhbHVlICpj dG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisg ICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAgMiwKKyAgICAgICBmaWVsZHMsCisgICAgICAg dmFscyk7CisKKyAgICBpdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQg KAorICAgICAgY3R4dCwgaW50X3R5cGUsIDQpOworICAgIGZ2YWwgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90eXBlLCAxKTsKKworICAg IGdjY19qaXRfZmllbGQgKmJhcl9maSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQs CisJCQkJCQkgICAgICAgMCwKKwkJCQkJCSAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkJCSAg ICAgICAiZmkiKTsKKyAgICBnY2Nfaml0X2ZpZWxkICpiYXJfZmYgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAgIDAsCisJCQkJCQkgICAgICAgZmxvYXRfdHlw ZSwKKwkJCQkJCSAgICAgICAiZmYiKTsKKyAgICBnY2Nfaml0X2ZpZWxkICpiYXJfaWkgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAgIDAsCisJCQkJCQkgICAg ICAgaW50X3R5cGUsCisJCQkJCQkgICAgICAgImlpIik7CisgICAgCisgICAgZ2NjX2ppdF9ydmFs dWUgKnZhbHMyW10gPSB7ZnZhbCwgY3RvciwgaXZhbH07CisgICAgZ2NjX2ppdF9maWVsZCAqZmll bGRzMltdID0ge2Jhcl9mZiwgYmFyX2ZpLCBiYXJfaWl9OworCisgICAgZ2NjX2ppdF9ydmFsdWUg KmN0b3JfYmFyID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQs IDAsCisgICAgICAgc3RydWN0X2Jhcl90eXBlLAorICAgICAgIDMsCisgICAgICAgZmllbGRzMiwK KyAgICAgICB2YWxzMik7CisgICAgCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVy X3J2YWx1ZSAoYmFyLCBjdG9yX2Jhcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vID0gezIs IDN9OyAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ds b2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQs CisgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0X2ZpXzEiKTsKKwor ICAgIGdjY19qaXRfcnZhbHVlICpmdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7CisgICAgZ2NjX2ppdF9ydmFsdWUg Kml2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMyk7CisgICAgCisgICAgZ2NjX2ppdF9maWVsZCAqZjEgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIGZsb2F0X3R5cGUs CisJCQkJCQkgICAiZiIpOworICAgIGdjY19qaXRfZmllbGQgKmYyID0gZ2NjX2ppdF9jb250ZXh0 X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgIDAsCisJCQkJCQkgICBpbnRfdHlwZSwKKwkJCQkJ CSAgICJpIik7ICAgIAorICAgIAorICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7IGZ2YWws IGl2YWx9OworICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0ge2YxLCBmMn07CisgICAgCisg ICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9y CisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAg ICAgIGZpZWxkcywKKyAgICAgICB2YWxzKTsKKyAgICAKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRf aW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZv byA9IHsuaSA9IDMsIC5mID0gMn07CisKKyAgICAgICBJLmUuICJ3cm9uZyIgb3JkZXIgb2YgZmll bGRzLiAgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19n bG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVE LAorICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9maV8yIik7CisK KyAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVl ICppdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4 dCwgaW50X3R5cGUsIDMpOworICAgIAorICAgIGdjY19qaXRfZmllbGQgKmYxID0gZ2NjX2ppdF9j b250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgIDAsCisJCQkJCQkgICBmbG9hdF90eXBl LAorCQkJCQkJICAgImYiKTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmMiA9IGdjY19qaXRfY29udGV4 dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgaW50X3R5cGUsCisJCQkJ CQkgICAiaSIpOyAgICAKKyAgICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyBpdmFs LCBmdmFsfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmMiwgZjF9OworICAgIAor ICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3Rv cgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAgMiwKKyAg ICAgICBmaWVsZHMsCisgICAgICAgdmFscyk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRp YWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIHN0cnVjdCBmaSBmb28gPSB7 MiAqIDIsIDN9OyAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2NvbnRleHRf bmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQ T1JURUQsCisgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0X2ZpXzMi KTsKKworICAgIGdjY19qaXRfcnZhbHVlICpmdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7CisgICAgZ2NjX2ppdF9y dmFsdWUgKmZ2YWwyID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAg ICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKml2YWwgPSBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwg Myk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfbXVsID0gZ2NjX2ppdF9jb250ZXh0X25ld19i aW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9NVUxULAorICAgICAg ZmxvYXRfdHlwZSwKKyAgICAgIGZ2YWwsCisgICAgICBmdmFsMik7CisgICAgCisgICAgZ2NjX2pp dF9maWVsZCAqZjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAg MCwKKwkJCQkJCSAgIGZsb2F0X3R5cGUsCisJCQkJCQkgICAiZiIpOworICAgIGdjY19qaXRfZmll bGQgKmYyID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgIDAsCisJ CQkJCQkgICBpbnRfdHlwZSwKKwkJCQkJCSAgICJpIik7ICAgIAorICAgIAorICAgIGdjY19qaXRf cnZhbHVlICp2YWxzW10gPSB7IHJ2YWxfbXVsLCBpdmFsfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpm aWVsZHNbXSA9IHtmMSwgZjJ9OworICAgIAorICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2Nj X2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3Ry dWN0X2ZpX3R5cGUsCisgICAgICAgMiwKKyAgICAgICBmaWVsZHMsCisgICAgICAgdmFscyk7Cisg ICAgCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9y KTsKKyAgfSAKKyAgeyAvKiBpbnQgZm9vID0gMzsgKi8KKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZh bCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGlu dF90eXBlLCAzKTsgCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRf bmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQ T1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfaW50MV8zIik7IAorICAgIGdj Y19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWwpOwor ICB9CisgIHsgLyogVHJ5IHRoZSBhYm92ZSwgYnV0IHdpdGggb3Bwb3NpdGUgb3JkZXIgb2YgZ2xv YmFsIGFuZCBsaXRlcmFsIGNhbGxzICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nf aml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJ VF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfaW50Ml8z Iik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7ICAgIAorICAgIGdjY19qaXRf Z2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWwpOworICB9Cisg IHsgLyogaW50IGZvbyA9IDMgKiAoMyArIDMpICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9 ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAg R0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxf aW50M18xOCIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsM18wID0gZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdj Y19qaXRfcnZhbHVlICpydmFsM18xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9p bnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFs M18yID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwg aW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX3BsdXMgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwgMCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09QX1BM VVMsCisgICAgICBpbnRfdHlwZSwKKyAgICAgIHJ2YWwzXzAsCisgICAgICBydmFsM18xKTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9tdWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9v cCAoY3R4dCwgMCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09QX01VTFQsCisgICAgICBpbnRfdHlw ZSwKKyAgICAgIHJ2YWxfcGx1cywKKyAgICAgIHJ2YWwzXzIpOworICAgIAorICAgIGdjY19qaXRf Z2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWxfbXVsKTsKKyAg fQorICB7IC8qIGludCBmb28gPSAzOyBpbnQgKnBmb28gPSAmZm9vOyAqLworICAgIGdjY19qaXRf bHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwg TlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisg ICAgICAiZ2xvYmFsX2ludDRfMyIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMp OyAgICAKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sCisg ICAgICBydmFsKTsKKworICAgIGdjY19qaXRfbHZhbHVlICpwZm9vID0gIGdjY19qaXRfY29udGV4 dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9F WFBPUlRFRCwKKyAgICAgIHBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfcGludDUiKTsKKyAgICBn Y2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChwZm9vLAorICAgICAgZ2NjX2pp dF9sdmFsdWVfZ2V0X2FkZHJlc3MgKGZvbywgMCkpOworICB9CisgIHsgLyogaW50IGZvbyA9IDM7 IGludCAqcGZvbyA9ICZmb28gKyAxOyAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19K SVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2ludDZf MyIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOyAgICAKKyAgICBnY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sCisgICAgICBydmFsKTsKKworICAg IGdjY19qaXRfbHZhbHVlICpwZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAg ICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHBp bnRfdHlwZSwKKyAgICAgICJnbG9iYWxfcGludDciKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRf aW5pdGlhbGl6ZXJfcnZhbHVlIChwZm9vLAorICAgICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJl c3MgKAorCWdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfYWNjZXNzKAorCSAgY3R4dCwKKwkgIDAs CisJICBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVzcyhmb28sIDApLAorCSAgZ2NjX2ppdF9jb250 ZXh0X29uZShjdHh0LCBpbnRfdHlwZSkpLAorCTApKTsKKyAgfQorICB7CisgICAgZ2NjX2ppdF9s dmFsdWUgKmRvdWJsZTEgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorCWN0eHQsIE5V TEwsCisJR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisJZG91YmxlX3R5cGUsCisJImdsb2JhbF9k b3VibGUxXzMiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGRvdWJsZV90eXBlLCAzKTsKKyAgICBn Y2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChkb3VibGUxLAorICAgICAgcnZh bCk7CisgIH0KKyAgeyAvKiBkb3VibGUgZm9vID0gMyAqIDMgKyAzICovCisgICAgZ2NjX2ppdF9s dmFsdWUgKmRvdWJsZTEgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorCWN0eHQsIE5V TEwsCisJR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisJZG91YmxlX3R5cGUsCisJImdsb2JhbF9k b3VibGUyXzEyIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBkb3VibGVfdHlwZSwgMyk7CisgICAg Z2NjX2ppdF9ydmFsdWUgKnJ2YWxfbXVsID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3Ag KGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9NVUxULAorICAgICAgZG91YmxlX3R5 cGUsCisgICAgICBydmFsLAorICAgICAgcnZhbCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxf cGx1cyA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0ND X0pJVF9CSU5BUllfT1BfUExVUywKKyAgICAgIGRvdWJsZV90eXBlLAorICAgICAgcnZhbF9tdWws CisgICAgICBydmFsKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVl IChkb3VibGUxLAorICAgICAgcnZhbF9wbHVzKTsKKyAgfQorICB7IC8qIGJvb2wgZm9vID0gMyAr IDMgPD0gNjsgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9u ZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBP UlRFRCwKKyAgICAgIGJvb2xfdHlwZSwKKyAgICAgICJnbG9iYWxfYm9vbDFfMSIpOworICAgIGdj Y19qaXRfcnZhbHVlICpydmFsM18wID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9p bnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFs M18xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwg aW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsNiA9IGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA2KTsKKyAgICBn Y2Nfaml0X3J2YWx1ZSAqcnZhbF9wbHVzID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3Ag KGN0eHQsCisgICAgICAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfUExVUywKKyAgICAgIGlu dF90eXBlLAorICAgICAgcnZhbDNfMCwKKyAgICAgIHJ2YWwzXzEpOworICAgIGdjY19qaXRfcnZh bHVlICpydmFsX2xlID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJpc29uIChjdHh0LAorICAg ICAgMCwKKyAgICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9MRSwKKyAgICAgIHJ2YWxfcGx1cywKKyAg ICAgIHJ2YWw2KTsKKyAgICAKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZh bHVlIChmb28sCisgICAgICBydmFsX2xlKTsKKyAgfQorfQorCitzdHJ1Y3QgZmkgeworICBmbG9h dCBmOworICBpbnQgaTsKK307CisKK3N0cnVjdCBiYXIgeworICBmbG9hdCBmZjsKKyAgc3RydWN0 IGZpIGZpOworICBpbnQgaWk7Cit9OworCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250 ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICBDSEVDS19OT05fTlVMTCAo cmVzdWx0KTsKKworICB7CisgICAgc3RydWN0IGZpICpmaSA9IGdjY19qaXRfcmVzdWx0X2dldF9n bG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfZmlfMSIpOworCisgICAgQ0hFQ0tfVkFMVUUg KGZpLT5mLCAyKTsKKyAgICBDSEVDS19WQUxVRSAoZmktPmksIDMpOworICB9CisgIHsKKyAgICBz dHJ1Y3QgZmkgKmZpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFs X3N0cnVjdF9maV8yIik7CisKKyAgICBDSEVDS19WQUxVRSAoZmktPmYsIDIpOworICAgIENIRUNL X1ZBTFVFIChmaS0+aSwgMyk7CisgIH0KKyAgeworICAgIHN0cnVjdCBmaSAqZmkgPSBnY2Nfaml0 X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfc3RydWN0X2ZpXzMiKTsKKworICAg IENIRUNLX1ZBTFVFIChmaS0+ZiwgMiAqIDIpOworICAgIENIRUNLX1ZBTFVFIChmaS0+aSwgMyk7 CisgIH0KKyAgeworICAgIHN0cnVjdCBiYXIgKmJhciA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9i YWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfYmFyXzEiKTsKKworICAgIENIRUNLX1ZBTFVFIChi YXItPmZmLCAxKTsKKyAgICBDSEVDS19WQUxVRSAoYmFyLT5paSwgNCk7CisgICAgQ0hFQ0tfVkFM VUUgKGJhci0+ZmkuZiwgMik7CisgICAgQ0hFQ0tfVkFMVUUgKGJhci0+ZmkuaSwgMyk7CisKKyAg ICBiYXIgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfc3RydWN0 X2Jhcl8yIik7CisKKyAgICBDSEVDS19WQUxVRSAoYmFyLT5mZiwgMSk7CisgICAgQ0hFQ0tfVkFM VUUgKGJhci0+aWksIDQpOworICAgIENIRUNLX1ZBTFVFIChiYXItPmZpLmYsIDIpOworICAgIENI RUNLX1ZBTFVFIChiYXItPmZpLmksIDMpOworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9IGdjY19q aXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9pbnQxXzMiKTsKKworICAgIENI RUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgfQorICB7CisgICAgaW50ICpmb28gPSBnY2Nfaml0X3Jl c3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50Ml8zIik7CisKKyAgICBDSEVDS19W QUxVRSAoKmZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludDNfMTgiKTsKKworICAgIENIRUNLX1ZBTFVF ICgqZm9vLCAxOCk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0 X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludDRfMyIpOworICAgIGludCAqKnBmb28gPSBnY2Nf aml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfcGludDUiKTsKKworICAgIENI RUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vLCAqcGZvbyk7CisgICAg Q0hFQ0tfVkFMVUUgKCoqcGZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2pp dF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludDZfMyIpOworICAgIGludCAq KnBmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfcGludDci KTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vICsg MSwgKnBmb28pOworICAgIENIRUNLX1ZBTFVFICgqKCpwZm9vIC0gMSksIDMpOworICB9CisgIHsK KyAgICBkb3VibGUgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImds b2JhbF9kb3VibGUxXzMiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgfQorICB7 CisgICAgZG91YmxlICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJn bG9iYWxfZG91YmxlMl8xMiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKCpmb28sIDEyKTsKKyAgfQor ICB7CisgICAgX0Jvb2wgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwg Imdsb2JhbF9ib29sMV8xIik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMSk7CisgIH0KK30K LS0gCjIuMzAuMgoK --_002_626c20889db34821ae574cae072b26c0kthse_--