Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whR1c-000Djw-0t for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 12:05:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whR1a-0078a2-1S for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 12:05:11 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whR1a-0078Zu-0B for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 12:05:10 +0000 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whR1W-00000000Ebs-1l8y for pgsql-hackers@postgresql.org; Wed, 08 Jul 2026 12:05:08 +0000 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-382a3fe0d28so606137a91.0 for ; Wed, 08 Jul 2026 05:05:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783512305; cv=none; d=google.com; s=arc-20260327; b=mNPM0Z53mceNozDLFqD2oIBsDiwUaEkYBsfACQSR69AFY1Wl6DbatdleGuLj82ul0w MfvvkwoHhxLJxLAMZLyjzoHMHWAro+VgvPP3xlwVfmAWjoVudr26NZWvj4XMgzxep5mm q1DZN2dmR70Jl8QwmVuoAAf71SzIMK8+ySA0bL8m1cXWsa4LGU8+qcSIH6ysLPfgtYih HVgP4DdUgk7rcFTf3xV4F2g06wwmyUShnG6TLY8a8ZVU7Qz8u+jisM9059o8cb5gIN3G qrip5gtwytXedmuwV1jzxIH7oaWodSi+8DwORptGwl73PXeIbOynh0I/h+dO/8X6vKTb DKsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=be4zpMaqGm8Y3Wf/jTB8N2kOili/5/c49c3DP6Bmfgo=; fh=5LA7l5ojUqKA66O0JRUhGOdnX1jHnJJTkzbXhmt8/kg=; b=sZ+togYYQMhw7F5Hgq7twHadhQ45nbRb2Xt9IXJ6eB0cCQk62AXkYQXSpWnqWg6/R4 k9GrUT8X7niKmEgGqr8n5TutSpJBJnV9Ifo4rvqeqL6D8iSbNtGywBKUskw58kkxxPfA +agpvgvdmlMFMPetrolusIwj55R9bDTWocpOkR56UaTVKwcXq068a3ozHm8pUMsPeitK FDL7eDbAd5dl4did9cD8oQLHw+4mKiU2LrnJ3KPZOUgqcxyV00YMciqg+uDs5rujh/Br tfF31Ixspb/FpwY+WrA3/DzwAvdzooaqho5BCoWxZkOssoqbl/SPJNjndUgL9ae4i/Bs e05w==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783512305; x=1784117105; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=be4zpMaqGm8Y3Wf/jTB8N2kOili/5/c49c3DP6Bmfgo=; b=oIo5l7Vp1K7sKio+C3bS76DDseFjJ7Aq5NsMTC9KaFTwki3c4ipG65JthU6C4RXMlO Mj/HZ0VvvKIUpwm4cOPTpDfaqPxRxlYtLUfEDHt8scaPXNrz0N6/RpHbfo59d3VOBZJp PBwbIhasxEEFZqp02g9hvtsVFjyfN3xP4Ns7Kd1EfnWXcb4biT1AaOXgvMXAFOP5qoUl ELXazgWXB3kWGU5T9k/0VGhMhdZOLAm1/YrWhQ277JBxvFTRHEPJvRDtWIKU0OhZQCN3 gEmGCJj5lrkCpRKFCEJ97LROk1upg+o1ZXNxjcVTOGikZ5tZdgN9CIF1DG4fHI4xFcTr 67dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783512305; x=1784117105; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=be4zpMaqGm8Y3Wf/jTB8N2kOili/5/c49c3DP6Bmfgo=; b=kzOEGv4/VdtSrWNdvWG0bXWL7Hz8jwK4fygR7N9wp6H3wCIF7WYrVh5CQ8ilInK+js GFgXnkU7H0x1s1l8JGQflfqxKmIb8jJkaFgd+4gO9tiN8fjp/8aTsOrk1vcOddNIoEUo 3Ae91SXwVJ2+CUT8ZSLVPhpgu2D3ZbzEpS4wNpotNHOHyZi2F1vs9I9N7V7dezN0e8Hx BHC7r423EqSGXXOJ6pUJmMUdUu4Gr9gSgEl5y4S0wjOMTUv/Ct9Mn1uTnP5Qe+9EYqUc FMTQ5Bpk5ewAdPeIbuUy5ahU3En1p74NVD3yox80XuIjyGVx0hKvFREDSNzG+CHwK8z9 jgiw== X-Forwarded-Encrypted: i=1; AHgh+RqW2/QtuaKbGGsOWp7fuGs9A+e0Y+quX4TAWK4KxC/cvt4ALjMFPLkPiGuic9nyZK0DUyI3cQyh7WVOQo3J@postgresql.org X-Gm-Message-State: AOJu0Yx5CT4uftWh3o8izDU5Urd/wCVBkR1eVjET9gGlHAJ3k38yvWQg ER6ZMSbqVzdWTCqH9BLVvWWSexJoDc6L2xqFtNtc13u1HQMfZeXS4n57KiSWE8hCBMAJWkQxsFF pc3gYb1ox8QAD2PvORTLq7dnIDY6q+C8= X-Gm-Gg: AfdE7clKZOqsIyjzVniDzdfT+NZVRlXO2FYGBJ1Jkr0oYdhfAE7Pa5uDZw5fURruxHZ YusE87DVsch+o+lHt57hsT0YPUfVD3uGpeutPSvGChhQehEICkqy/6CP0v6EPba8+fG9sp5QOi7 imySyKzyWEQyvi8sPqLpluj5woqSyJCXSaSi/vHXE89qCA5uzzwPkY15Se4DDTRwXPq09xLuoBK ygPg/n6TQUxKG9Bho9GTjG6FDY0pQNALJkVP7sR7IK9zD42h1QJGajqM7OkKtnRpCmtjF79P+UD Jm3v8MziPIlkzFow2t8Z0DPqbI762B7jhvEiykRqVr2A3Jf8khPB+ODECYM52/93NjoE6uUMBLB 0f63pg+O7hIijonTGz0g4YndOBfI2SA== X-Received: by 2002:a17:90a:e184:b0:37f:fb1d:63fa with SMTP id 98e67ed59e1d1-3893fc693famr2353311a91.15.1783512304539; Wed, 08 Jul 2026 05:05:04 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Etsuro Fujita Date: Wed, 8 Jul 2026 21:04:51 +0900 X-Gm-Features: AVVi8CfkpYkj4130pTtMopjUSQ6zS0l6g_v4-eYWRBllXgXyRblzk21ZhoDFscE Message-ID: Subject: Re: use of SPI by postgresImportForeignStatistics To: Corey Huinker Cc: Robert Haas , "pgsql-hackers@postgresql.org" Content-Type: multipart/mixed; boundary="0000000000005d6ed606561851a0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005d6ed606561851a0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jul 3, 2026 at 6:47=E2=80=AFPM Etsuro Fujita wrote: > On Thu, Jul 2, 2026 at 5:35=E2=80=AFAM Corey Huinker wrote: > > On Wed, Jul 1, 2026 at 8:10=E2=80=AFAM Etsuro Fujita wrote: > >> On Wed, Jul 1, 2026 at 12:55=E2=80=AFAM Corey Huinker wrote: > > >> >> In relation to this change, I moved helper functions set_XXX_arg() > >> >> that you added to relation_stats.c and attribute_stats.c to > >> >> postgres_fdw.c. The helper functions had soft error handling, but = in > >> >> the postgres_fdw use, there is no need for that, so I removed that > >> >> handling as well. > >> > > >> > My inclination would be to move the set_*_arg functions could be mov= ed to some common utility file in v20, as other FDWs will find themselves w= ith the same need. > >> > >> Seems like a good idea. I moved the set_*_arg functions to > >> stat_utils.c, and renamed them to stats_set_*_arg. Attached is a new > >> version of the patch. > > > > I'm concerned that by making these non-error-safe function calls availa= ble, we create a barrier to making those same functions error-safe in the f= uture. > > > >> > As for removing the error-handling, it might still be handy because = it would allow us to give a more context-aware error message, rather than t= he very narrow "this_string is an invalid this_type", for string that the u= ser most certainly never saw. Having said that, it's something we could eas= ily change back to error-safe if we wanted to. > >> > >> Ok, I think we could do so later if needed. > > > > I agree we could do it later if they were private functions, no problem= . But if they're available outside of postgres_fdw then changing them to be= error-safe potentially disrupts other callers. Someone please let me know = if I'm being unnecessarily cautious here. > > Ah, I misunderstood your comments. I agree with you here, so I'll > move back the functions to postgres_fdw.c. Done. > > Other Thoughts: > > > > 1. The internal functions should accept a server_version_number paramet= er, and we should document that setting that parameter to 0 mean that we ca= n assume the current version. I know that we presently have no translation = issues going forward with statistics, but someday that won't be the case, a= nd if we don't have this parameter in place then it'll be too late to fix i= t. > > Good idea! Will do. I used the name "version" for the consistency with pg_restore_relation_stats/pg_restore_attribute_stats. Also, as I couldn't find a note about the arrangement in the source code, I added this comment to match a comment in stats_fill_fcinfo_from_arg_pairs: * For now, the 'version' argument is ignored. In the future it can be used * to interpret older statistics properly. > > 3. The import_stats_functions in their current "bridging" form should d= o null checks on all of the NullableDatum pointers, or at least Assert()s o= n them. > > Will do. Done. As the functions are provided for developers, I just added the assertions. Also, I updated comments/docs a little bit. Attached is a new version of the patch. I'm planning to push and back-patch it, if no objections. Best regards, Etsuro Fujita --0000000000005d6ed606561851a0 Content-Type: application/octet-stream; name="v3-Remove-SPI-from-stat-import-in-postgres-fdw-efujita.patch" Content-Disposition: attachment; filename="v3-Remove-SPI-from-stat-import-in-postgres-fdw-efujita.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrc13vd90 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5v dXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4 IDVlYmFlMWNlZGMyLi4wNDhmNjI0YmEwYyAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19m ZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9l eHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0xMzA2Nyw2ICsxMzA2Nyw0MyBAQCBBTkFMWVpF IGR0ZXN0X3RhYmxlOwogQU5BTFlaRSBWRVJCT1NFIGR0ZXN0X2Z0YWJsZTsgICAgICAgICAgICAg LS0gc2hvdWxkIHdvcmsKIElORk86ICBpbXBvcnRpbmcgc3RhdGlzdGljcyBmb3IgZm9yZWlnbiB0 YWJsZSAicHVibGljLmR0ZXN0X2Z0YWJsZSIKIElORk86ICBmaW5pc2hlZCBpbXBvcnRpbmcgc3Rh dGlzdGljcyBmb3IgZm9yZWlnbiB0YWJsZSAicHVibGljLmR0ZXN0X2Z0YWJsZSIKKy0tIGR0ZXN0 X2Z0YWJsZSdzIHN0YXRzIHNob3VsZCBub3cgZXhhY3RseSBtYXRjaCBkdGVzdF90YWJsZSdzCist LSBjb21wYXJlIHZhbHVlcywgc2hvdWxkIG1hdGNoCitTRUxFQ1QgcmVscGFnZXMsIHJlbHR1cGxl cyBGUk9NIHBnX2NsYXNzCitXSEVSRSBvaWQgPSAncHVibGljLmR0ZXN0X3RhYmxlJzo6cmVnY2xh c3MKK0VYQ0VQVAorU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMgRlJPTSBwZ19jbGFzcworV0hF UkUgb2lkID0gJ3B1YmxpYy5kdGVzdF9mdGFibGUnOjpyZWdjbGFzczsKKyByZWxwYWdlcyB8IHJl bHR1cGxlcyAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKKy0tIGNvbXBhcmUg dGhlIHJvd2NvdW50cywgc2hvdWxkIGdldCAwIHJvd3MgYmFjaworU0VMRUNUIENPVU5UKCopIEZS T00gcGdfc3RhdHMKK1dIRVJFIHNjaGVtYW5hbWUgPSAncHVibGljJyBBTkQgdGFibGVuYW1lID0g J2R0ZXN0X3RhYmxlJworRVhDRVBUCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19zdGF0cworV0hF UkUgc2NoZW1hbmFtZSA9ICdwdWJsaWMnIEFORCB0YWJsZW5hbWUgPSAnZHRlc3RfZnRhYmxlJzsK KyBjb3VudCAKKy0tLS0tLS0KKygwIHJvd3MpCisKKy0tIHRlc3Qgb25seSBhIGZldyBzdGF0cyBj b2x1bW5zIGNvbW1vbiB0byBpbnRlZ2VyIHR5cGVzCitTRUxFQ1QgYXR0bmFtZSwgaW5oZXJpdGVk LCBudWxsX2ZyYWMsIGF2Z193aWR0aCwgbl9kaXN0aW5jdCwKKyAgbW9zdF9jb21tb25fdmFsczo6 dGV4dCBhcyBtY3YsIG1vc3RfY29tbW9uX2ZyZXFzLAorICBoaXN0b2dyYW1fYm91bmRzOjp0ZXh0 IGFzIGhiLCBjb3JyZWxhdGlvbgorRlJPTSBwZ19zdGF0cworV0hFUkUgc2NoZW1hbmFtZSA9ICdw dWJsaWMnIEFORCB0YWJsZW5hbWUgPSAnZHRlc3RfdGFibGUnCitFWENFUFQKK1NFTEVDVCBhdHRu YW1lLCBpbmhlcml0ZWQsIG51bGxfZnJhYywgYXZnX3dpZHRoLCBuX2Rpc3RpbmN0LAorICBtb3N0 X2NvbW1vbl92YWxzOjp0ZXh0IGFzIG1jdiwgbW9zdF9jb21tb25fZnJlcXMsCisgIGhpc3RvZ3Jh bV9ib3VuZHM6OnRleHQgYXMgaGIsIGNvcnJlbGF0aW9uCitGUk9NIHBnX3N0YXRzCitXSEVSRSBz Y2hlbWFuYW1lID0gJ3B1YmxpYycgQU5EIHRhYmxlbmFtZSA9ICdkdGVzdF9mdGFibGUnOworIGF0 dG5hbWUgfCBpbmhlcml0ZWQgfCBudWxsX2ZyYWMgfCBhdmdfd2lkdGggfCBuX2Rpc3RpbmN0IHwg bWN2IHwgbW9zdF9jb21tb25fZnJlcXMgfCBoYiB8IGNvcnJlbGF0aW9uIAorLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKwogLS0gY2xlYW51 cAogRFJPUCBGT1JFSUdOIFRBQkxFIHNpbXBvcnRfZnRhYmxlOwogRFJPUCBGT1JFSUdOIFRBQkxF IHNpbXBvcnRfZnZpZXc7CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IDBlYTcy YTY0Y2U1Li5lNmUwYTRhYjliNSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9z dGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKQEAg LTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNsdWRlICJl eGVjdXRvci9leGVjQXN5bmMuaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCi0j aW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNp bmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC00Nyw2ICs0Niw3 IEBACiAjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCiAjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5o IgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgog I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC0zMzcsOSArMzM3LDkgQEAgdHlwZWRlZiBz dHJ1Y3QKIHsKIAlQR3Jlc3VsdCAgICpyZWw7CiAJUEdyZXN1bHQgICAqYXR0OwotCWludAkJCXNl cnZlcl92ZXJzaW9uX251bTsKIAlkb3VibGUJCWxpdmV0dXBsZXM7CiAJZG91YmxlCQlkZWFkdHVw bGVzOworCWludAkJCXZlcnNpb247CiB9IFJlbW90ZVN0YXRzUmVzdWx0czsKIAogLyogQ29sdW1u IG9yZGVyIGluIHJlbGF0aW9uIHN0YXRzIHF1ZXJ5ICovCkBAIC0zNzEsMTM2ICszNzEsNiBAQCBl bnVtIEF0dFN0YXRzQ29sdW1ucwogCUFUVFNUQVRTX05VTV9GSUVMRFMsCiB9OwogCi0vKiBSZWxh dGlvbiBzdGF0cyBpbXBvcnQgcXVlcnkgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpyZWxpbXBvcnRf c3FsID0KLSJTRUxFQ1QgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX3JlbGF0aW9uX3N0YXRzKFxuIgot Ilx0J3ZlcnNpb24nLCAkMSxcbiIKLSJcdCdzY2hlbWFuYW1lJywgJDIsXG4iCi0iXHQncmVsbmFt ZScsICQzLFxuIgotIlx0J3JlbHBhZ2VzJywgJDQ6OmludGVnZXIsXG4iCi0iXHQncmVsdHVwbGVz JywgJDU6OnJlYWwpIjsKLQotLyogQXJndW1lbnQgb3JkZXIgaW4gcmVsYXRpb24gc3RhdHMgaW1w b3J0IHF1ZXJ5ICovCi1lbnVtIFJlbEltcG9ydFNxbEFyZ3MKLXsKLQlSRUxJTVBPUlRfU1FMX1ZF UlNJT04gPSAwLAotCVJFTElNUE9SVF9TUUxfU0NIRU1BTkFNRSwKLQlSRUxJTVBPUlRfU1FMX1JF TE5BTUUsCi0JUkVMSU1QT1JUX1NRTF9SRUxQQUdFUywKLQlSRUxJTVBPUlRfU1FMX1JFTFRVUExF UywKLQlSRUxJTVBPUlRfU1FMX05VTV9GSUVMRFMKLX07Ci0KLS8qIEFyZ3VtZW50IHR5cGVzIGlu IHJlbGF0aW9uIHN0YXRzIGltcG9ydCBxdWVyeSAqLwotc3RhdGljIGNvbnN0IE9pZCByZWxpbXBv cnRfYXJndHlwZXNbUkVMSU1QT1JUX1NRTF9OVU1fRklFTERTXSA9Ci17Ci0JSU5UNE9JRCwgVEVY VE9JRCwgVEVYVE9JRCwgVEVYVE9JRCwKLQlURVhUT0lELAotfTsKLQotLyogQXR0cmlidXRlIHN0 YXRzIGltcG9ydCBxdWVyeSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmF0dGltcG9ydF9zcWwgPQot IlNFTEVDVCBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfYXR0cmlidXRlX3N0YXRzKFxuIgotIlx0J3Zl cnNpb24nLCAkMSxcbiIKLSJcdCdzY2hlbWFuYW1lJywgJDIsXG4iCi0iXHQncmVsbmFtZScsICQz LFxuIgotIlx0J2F0dG51bScsICQ0LFxuIgotIlx0J2luaGVyaXRlZCcsIGZhbHNlOjpib29sZWFu LFxuIgotIlx0J251bGxfZnJhYycsICQ1OjpyZWFsLFxuIgotIlx0J2F2Z193aWR0aCcsICQ2Ojpp bnRlZ2VyLFxuIgotIlx0J25fZGlzdGluY3QnLCAkNzo6cmVhbCxcbiIKLSJcdCdtb3N0X2NvbW1v bl92YWxzJywgJDgsXG4iCi0iXHQnbW9zdF9jb21tb25fZnJlcXMnLCAkOTo6cmVhbFtdLFxuIgot Ilx0J2hpc3RvZ3JhbV9ib3VuZHMnLCAkMTAsXG4iCi0iXHQnY29ycmVsYXRpb24nLCAkMTE6OnJl YWwsXG4iCi0iXHQnbW9zdF9jb21tb25fZWxlbXMnLCAkMTIsXG4iCi0iXHQnbW9zdF9jb21tb25f ZWxlbV9mcmVxcycsICQxMzo6cmVhbFtdLFxuIgotIlx0J2VsZW1fY291bnRfaGlzdG9ncmFtJywg JDE0OjpyZWFsW10sXG4iCi0iXHQncmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbScsICQxNSxcbiIKLSJc dCdyYW5nZV9lbXB0eV9mcmFjJywgJDE2OjpyZWFsLFxuIgotIlx0J3JhbmdlX2JvdW5kc19oaXN0 b2dyYW0nLCAkMTcpIjsKLQotLyogQXJndW1lbnQgb3JkZXIgaW4gYXR0cmlidXRlIHN0YXRzIGlt cG9ydCBxdWVyeSAqLwotZW51bSBBdHRJbXBvcnRTcWxBcmdzCi17Ci0JQVRUSU1QT1JUX1NRTF9W RVJTSU9OID0gMCwKLQlBVFRJTVBPUlRfU1FMX1NDSEVNQU5BTUUsCi0JQVRUSU1QT1JUX1NRTF9S RUxOQU1FLAotCUFUVElNUE9SVF9TUUxfQVRUTlVNLAotCUFUVElNUE9SVF9TUUxfTlVMTF9GUkFD LAotCUFUVElNUE9SVF9TUUxfQVZHX1dJRFRILAotCUFUVElNUE9SVF9TUUxfTl9ESVNUSU5DVCwK LQlBVFRJTVBPUlRfU1FMX01PU1RfQ09NTU9OX1ZBTFMsCi0JQVRUSU1QT1JUX1NRTF9NT1NUX0NP TU1PTl9GUkVRUywKLQlBVFRJTVBPUlRfU1FMX0hJU1RPR1JBTV9CT1VORFMsCi0JQVRUSU1QT1JU X1NRTF9DT1JSRUxBVElPTiwKLQlBVFRJTVBPUlRfU1FMX01PU1RfQ09NTU9OX0VMRU1TLAotCUFU VElNUE9SVF9TUUxfTU9TVF9DT01NT05fRUxFTV9GUkVRUywKLQlBVFRJTVBPUlRfU1FMX0VMRU1f Q09VTlRfSElTVE9HUkFNLAotCUFUVElNUE9SVF9TUUxfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwK LQlBVFRJTVBPUlRfU1FMX1JBTkdFX0VNUFRZX0ZSQUMsCi0JQVRUSU1QT1JUX1NRTF9SQU5HRV9C T1VORFNfSElTVE9HUkFNLAotCUFUVElNUE9SVF9TUUxfTlVNX0ZJRUxEUwotfTsKLQotLyogQXJn dW1lbnQgdHlwZXMgaW4gYXR0cmlidXRlIHN0YXRzIGltcG9ydCBxdWVyeSAqLwotc3RhdGljIGNv bnN0IE9pZCBhdHRpbXBvcnRfYXJndHlwZXNbQVRUSU1QT1JUX1NRTF9OVU1fRklFTERTXSA9Ci17 Ci0JSU5UNE9JRCwgVEVYVE9JRCwgVEVYVE9JRCwgSU5UMk9JRCwKLQlURVhUT0lELCBURVhUT0lE LCBURVhUT0lELCBURVhUT0lELAotCVRFWFRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsIFRFWFRPSUQs Ci0JVEVYVE9JRCwgVEVYVE9JRCwgVEVYVE9JRCwgVEVYVE9JRCwKLQlURVhUT0lELAotfTsKLQot LyoKLSAqIFRoZSBtYXBwaW5nIG9mIGF0dHJpYnV0ZSBzdGF0cyBxdWVyeSBjb2x1bW5zIHRvIHRo ZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbgotICogdGhlIHByZXBhcmVkIHBnX3Jlc3RvcmVfYXR0 cmlidXRlX3N0YXRzKCkgc3RhdGVtZW50LgotICovCi10eXBlZGVmIHN0cnVjdAotewotCWVudW0g QXR0U3RhdHNDb2x1bW5zIHJlc19maWVsZDsKLQllbnVtIEF0dEltcG9ydFNxbEFyZ3MgYXJnX251 bTsKLX0gQXR0clJlc3VsdEFyZ01hcDsKLQotI2RlZmluZSBOVU1fTUFQUEVEX0FUVElNUE9SVF9B UkdTIDEzCi0KLXN0YXRpYyBjb25zdCBBdHRyUmVzdWx0QXJnTWFwIGF0dHJfcmVzdWx0X2FyZ19t YXBbTlVNX01BUFBFRF9BVFRJTVBPUlRfQVJHU10gPQotewotCXtBVFRTVEFUU19OVUxMX0ZSQUMs IEFUVElNUE9SVF9TUUxfTlVMTF9GUkFDfSwKLQl7QVRUU1RBVFNfQVZHX1dJRFRILCBBVFRJTVBP UlRfU1FMX0FWR19XSURUSH0sCi0Je0FUVFNUQVRTX05fRElTVElOQ1QsIEFUVElNUE9SVF9TUUxf Tl9ESVNUSU5DVH0sCi0Je0FUVFNUQVRTX01PU1RfQ09NTU9OX1ZBTFMsIEFUVElNUE9SVF9TUUxf TU9TVF9DT01NT05fVkFMU30sCi0Je0FUVFNUQVRTX01PU1RfQ09NTU9OX0ZSRVFTLCBBVFRJTVBP UlRfU1FMX01PU1RfQ09NTU9OX0ZSRVFTfSwKLQl7QVRUU1RBVFNfSElTVE9HUkFNX0JPVU5EUywg QVRUSU1QT1JUX1NRTF9ISVNUT0dSQU1fQk9VTkRTfSwKLQl7QVRUU1RBVFNfQ09SUkVMQVRJT04s IEFUVElNUE9SVF9TUUxfQ09SUkVMQVRJT059LAotCXtBVFRTVEFUU19NT1NUX0NPTU1PTl9FTEVN UywgQVRUSU1QT1JUX1NRTF9NT1NUX0NPTU1PTl9FTEVNU30sCi0Je0FUVFNUQVRTX01PU1RfQ09N TU9OX0VMRU1fRlJFUVMsIEFUVElNUE9SVF9TUUxfTU9TVF9DT01NT05fRUxFTV9GUkVRU30sCi0J e0FUVFNUQVRTX0VMRU1fQ09VTlRfSElTVE9HUkFNLCBBVFRJTVBPUlRfU1FMX0VMRU1fQ09VTlRf SElTVE9HUkFNfSwKLQl7QVRUU1RBVFNfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwgQVRUSU1QT1JU X1NRTF9SQU5HRV9MRU5HVEhfSElTVE9HUkFNfSwKLQl7QVRUU1RBVFNfUkFOR0VfRU1QVFlfRlJB QywgQVRUSU1QT1JUX1NRTF9SQU5HRV9FTVBUWV9GUkFDfSwKLQl7QVRUU1RBVFNfUkFOR0VfQk9V TkRTX0hJU1RPR1JBTSwgQVRUSU1QT1JUX1NRTF9SQU5HRV9CT1VORFNfSElTVE9HUkFNfSwKLX07 Ci0KLS8qIEF0dHJpYnV0ZSBzdGF0cyBjbGVhciBxdWVyeSAqLwotc3RhdGljIGNvbnN0IGNoYXIg KmF0dGNsZWFyX3NxbCA9Ci0iU0VMRUNUIHBnX2NhdGFsb2cucGdfY2xlYXJfYXR0cmlidXRlX3N0 YXRzKCQxLCAkMiwgJDMsIGZhbHNlKSI7Ci0KLS8qIEFyZ3VtZW50IG9yZGVyIGluIGF0dHJpYnV0 ZSBzdGF0cyBjbGVhciBxdWVyeSAqLwotZW51bSBBdHRDbGVhclNxbEFyZ3MKLXsKLQlBVFRDTEVB Ul9TUUxfU0NIRU1BTkFNRSA9IDAsCi0JQVRUQ0xFQVJfU1FMX1JFTE5BTUUsCi0JQVRUQ0xFQVJf U1FMX0FUVE5BTUUsCi0JQVRUQ0xFQVJfU1FMX05VTV9GSUVMRFMKLX07Ci0KLS8qIEFyZ3VtZW50 IHR5cGVzIGluIGF0dHJpYnV0ZSBzdGF0cyBjbGVhciBxdWVyeSAqLwotc3RhdGljIGNvbnN0IE9p ZCBhdHRjbGVhcl9hcmd0eXBlc1tBVFRDTEVBUl9TUUxfTlVNX0ZJRUxEU10gPQotewotCVRFWFRP SUQsIFRFWFRPSUQsIFRFWFRPSUQsCi19OwotCiAvKgogICogU1FMIGZ1bmN0aW9ucwogICovCkBA IC03MTgsMTQgKzU4OCwxOCBAQCBzdGF0aWMgYm9vbCBtYXRjaF9hdHRybWFwKFBHcmVzdWx0ICpy ZXMsCiAJCQkJCQkgIGNvbnN0IGNoYXIgKnJlbW90ZV9yZWxuYW1lLAogCQkJCQkJICBpbnQgYXR0 cmNudCwKIAkJCQkJCSAgUmVtb3RlQXR0cmlidXRlTWFwcGluZyAqcmVtYXR0cm1hcCk7Ci1zdGF0 aWMgYm9vbCBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUs CitzdGF0aWMgYm9vbCBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbGF0aW9u LAorCQkJCQkJCQkJICBjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCQkJCQkJICBjb25zdCBj aGFyICpyZWxuYW1lLAogCQkJCQkJCQkJICBpbnQgYXR0cmNudCwKIAkJCQkJCQkJCSAgY29uc3Qg UmVtb3RlQXR0cmlidXRlTWFwcGluZyAqcmVtYXR0cm1hcCwKIAkJCQkJCQkJCSAgUmVtb3RlU3Rh dHNSZXN1bHRzICpyZW1zdGF0cyk7Ci1zdGF0aWMgdm9pZCBtYXBfZmllbGRfdG9fYXJnKFBHcmVz dWx0ICpyZXMsIGludCByb3csIGludCBmaWVsZCwKLQkJCQkJCQkgaW50IGFyZywgRGF0dW0gKnZh bHVlcywgY2hhciAqbnVsbHMpOwotc3RhdGljIGJvb2wgaW1wb3J0X3NwaV9xdWVyeV9vayh2b2lk KTsKK3N0YXRpYyBjaGFyICpnZXRfb3B0X3ZhbHVlKFBHcmVzdWx0ICpyZXMsIGludCByb3csIGlu dCBjb2wpOworc3RhdGljIHZvaWQgc2V0X3RleHRfYXJnKE51bGxhYmxlRGF0dW0gKmFyZywgY29u c3QgY2hhciAqcyk7CitzdGF0aWMgdm9pZCBzZXRfaW50MzJfYXJnKE51bGxhYmxlRGF0dW0gKmFy ZywgY29uc3QgY2hhciAqcyk7CitzdGF0aWMgdm9pZCBzZXRfdWludDMyX2FyZyhOdWxsYWJsZURh dHVtICphcmcsIGNvbnN0IGNoYXIgKnMpOworc3RhdGljIHZvaWQgc2V0X2Zsb2F0X2FyZyhOdWxs YWJsZURhdHVtICphcmcsIGNvbnN0IGNoYXIgKnMpOworc3RhdGljIHZvaWQgc2V0X2Zsb2F0YXJy X2FyZyhOdWxsYWJsZURhdHVtICphcmcsIGNvbnN0IGNoYXIgKnMpOwogc3RhdGljIHZvaWQgcHJv ZHVjZV90dXBsZV9hc3luY2hyb25vdXNseShBc3luY1JlcXVlc3QgKmFyZXEsIGJvb2wgZmV0Y2gp Owogc3RhdGljIHZvaWQgZmV0Y2hfbW9yZV9kYXRhX2JlZ2luKEFzeW5jUmVxdWVzdCAqYXJlcSk7 CiBzdGF0aWMgdm9pZCBjb21wbGV0ZV9wZW5kaW5nX3JlcXVlc3QoQXN5bmNSZXF1ZXN0ICphcmVx KTsKQEAgLTU2NjgsNyArNTU0Miw3IEBAIHBvc3RncmVzSW1wb3J0Rm9yZWlnblN0YXRpc3RpY3Mo UmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnZhX2NvbHMsIGludCBlbGV2ZWwpCiAJCQkJCQkJCSAm YXR0cmNudCwgJnJlbWF0dHJtYXAsICZyZW1zdGF0cyk7CiAKIAlpZiAob2spCi0JCW9rID0gaW1w b3J0X2ZldGNoZWRfc3RhdGlzdGljcyhzY2hlbWFuYW1lLCByZWxuYW1lLAorCQlvayA9IGltcG9y dF9mZXRjaGVkX3N0YXRpc3RpY3MocmVsYXRpb24sIHNjaGVtYW5hbWUsIHJlbG5hbWUsCiAJCQkJ CQkJCQkgICBhdHRyY250LCByZW1hdHRybWFwLCAmcmVtc3RhdHMpOwogCiAJaWYgKG9rKQpAQCAt NTczOCw3ICs1NjEyLDcgQEAgZmV0Y2hfcmVtb3RlX3N0YXRpc3RpY3MoUmVsYXRpb24gcmVsYXRp b24sCiAJICovCiAJdXNlciA9IEdldFVzZXJNYXBwaW5nKEdldFVzZXJJZCgpLCB0YWJsZS0+c2Vy dmVyaWQpOwogCWNvbm4gPSBHZXRDb25uZWN0aW9uKHVzZXIsIGZhbHNlLCBOVUxMKTsKLQlyZW1z dGF0cy0+c2VydmVyX3ZlcnNpb25fbnVtID0gc2VydmVyX3ZlcnNpb25fbnVtID0gUFFzZXJ2ZXJW ZXJzaW9uKGNvbm4pOworCXJlbXN0YXRzLT52ZXJzaW9uID0gc2VydmVyX3ZlcnNpb25fbnVtID0g UFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOwogCiAJLyogRmV0Y2ggcmVsYXRpb24gc3RhdHMuICovCiAJ cmVtc3RhdHMtPnJlbCA9IHJlbHN0YXRzID0gZmV0Y2hfcmVsc3RhdHMoY29ubiwgcmVsYXRpb24p OwpAQCAtNjE0NCwxOTEgKzYwMTgsMjMyIEBAIG1hdGNoX2F0dHJtYXAoUEdyZXN1bHQgKnJlcywK ICAqIEltcG9ydCBmZXRjaGVkIHN0YXRpc3RpY3MgaW50byB0aGUgbG9jYWwgc3RhdGlzdGljcyB0 YWJsZXMuCiAgKi8KIHN0YXRpYyBib29sCi1pbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKGNvbnN0 IGNoYXIgKnNjaGVtYW5hbWUsCitpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKFJlbGF0aW9uIHJl bGF0aW9uLAorCQkJCQkJICBjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCQkJICBjb25zdCBj aGFyICpyZWxuYW1lLAogCQkJCQkJICBpbnQgYXR0cmNudCwKIAkJCQkJCSAgY29uc3QgUmVtb3Rl QXR0cmlidXRlTWFwcGluZyAqcmVtYXR0cm1hcCwKIAkJCQkJCSAgUmVtb3RlU3RhdHNSZXN1bHRz ICpyZW1zdGF0cykKIHsKLQlTUElQbGFuUHRyCWF0dGltcG9ydF9wbGFuID0gTlVMTDsKLQlTUElQ bGFuUHRyCWF0dGNsZWFyX3BsYW4gPSBOVUxMOwotCURhdHVtCQl2YWx1ZXNbQVRUSU1QT1JUX1NR TF9OVU1fRklFTERTXTsKLQljaGFyCQludWxsc1tBVFRJTVBPUlRfU1FMX05VTV9GSUVMRFNdOwot CWludAkJCXNwaXJjOwotCWJvb2wJCW9rID0gZmFsc2U7Ci0KLQkvKiBBc3NpZ24gYWxsIHRoZSBp bnZhcmlhbnQgcGFyYW1ldGVycyBjb21tb24gdG8gcmVsYXRpb24vYXR0cmlidXRlIHN0YXRzICov Ci0JdmFsdWVzW0FUVElNUE9SVF9TUUxfVkVSU0lPTl0gPSBJbnQzMkdldERhdHVtKHJlbXN0YXRz LT5zZXJ2ZXJfdmVyc2lvbl9udW0pOwotCW51bGxzW0FUVElNUE9SVF9TUUxfVkVSU0lPTl0gPSAn ICc7Ci0KLQl2YWx1ZXNbQVRUSU1QT1JUX1NRTF9TQ0hFTUFOQU1FXSA9IENTdHJpbmdHZXRUZXh0 RGF0dW0oc2NoZW1hbmFtZSk7Ci0JbnVsbHNbQVRUSU1QT1JUX1NRTF9TQ0hFTUFOQU1FXSA9ICcg JzsKLQotCXZhbHVlc1tBVFRJTVBPUlRfU1FMX1JFTE5BTUVdID0gQ1N0cmluZ0dldFRleHREYXR1 bShyZWxuYW1lKTsKLQludWxsc1tBVFRJTVBPUlRfU1FMX1JFTE5BTUVdID0gJyAnOworCVBHcmVz dWx0ICAgKnJlczsKKwlOdWxsYWJsZURhdHVtIGFyZ3NbQVRUU1RBVFNfTlVNX0ZJRUxEU107CiAK LQlTUElfY29ubmVjdCgpOworCS8qIFNldCB0aGUgJ3ZlcnNpb24nIHBhcmFtZXRlciwgd2hpY2gg aXMgY29tbW9uIHRvIGJvdGggc3RhdGlzdGljcy4gKi8KKwlhcmdzWzBdLnZhbHVlID0gVUludDMy R2V0RGF0dW0ocmVtc3RhdHMtPnZlcnNpb24pOworCWFyZ3NbMF0uaXNudWxsID0gZmFsc2U7CiAK IAkvKgogCSAqIFdlIGltcG9ydCBhdHRyaWJ1dGUgc3RhdGlzdGljcyBmaXJzdCwgaWYgYW55LCBi ZWNhdXNlIHRob3NlIGFyZSBtb3JlCiAJICogcHJvbmUgdG8gZXJyb3JzLiAgVGhpcyBhdm9pZHMg bWFraW5nIGEgbW9kaWZpY2F0aW9uIG9mIHBnX2NsYXNzIHRoYXQKIAkgKiB3aWxsIGp1c3QgZ2V0 IHJvbGxlZCBiYWNrIGJ5IGEgZmFpbGVkIGF0dHJpYnV0ZSBpbXBvcnQuCiAJICovCi0JaWYgKHJl bXN0YXRzLT5hdHQgIT0gTlVMTCkKKwlyZXMgPSByZW1zdGF0cy0+YXR0OworCWlmIChyZXMgIT0g TlVMTCkKIAl7Ci0JCUFzc2VydChQUW5maWVsZHMocmVtc3RhdHMtPmF0dCkgPT0gQVRUU1RBVFNf TlVNX0ZJRUxEUyk7Ci0JCUFzc2VydChQUW50dXBsZXMocmVtc3RhdHMtPmF0dCkgPj0gMSk7Ci0K LQkJYXR0aW1wb3J0X3BsYW4gPSBTUElfcHJlcGFyZShhdHRpbXBvcnRfc3FsLCBBVFRJTVBPUlRf U1FMX05VTV9GSUVMRFMsCi0JCQkJCQkJCQkgYXR0aW1wb3J0X2FyZ3R5cGVzKTsKLQkJaWYgKGF0 dGltcG9ydF9wbGFuID09IE5VTEwpCi0JCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIHByZXBhcmUg YXR0aW1wb3J0X3NxbCBxdWVyeSIpOwotCi0JCWF0dGNsZWFyX3BsYW4gPSBTUElfcHJlcGFyZShh dHRjbGVhcl9zcWwsIEFUVENMRUFSX1NRTF9OVU1fRklFTERTLAotCQkJCQkJCQkJYXR0Y2xlYXJf YXJndHlwZXMpOwotCQlpZiAoYXR0Y2xlYXJfcGxhbiA9PSBOVUxMKQotCQkJZWxvZyhFUlJPUiwg ImZhaWxlZCB0byBwcmVwYXJlIGF0dGNsZWFyX3NxbCBxdWVyeSIpOwotCi0JCW51bGxzW0FUVElN UE9SVF9TUUxfQVRUTlVNXSA9ICcgJzsKKwkJQXNzZXJ0KFBRbmZpZWxkcyhyZXMpID09IEFUVFNU QVRTX05VTV9GSUVMRFMpOworCQlBc3NlcnQoUFFudHVwbGVzKHJlcykgPj0gMSk7CiAKIAkJZm9y IChpbnQgbWFwaWR4ID0gMDsgbWFwaWR4IDwgYXR0cmNudDsgbWFwaWR4KyspCiAJCXsKIAkJCWlu dAkJCXJvdyA9IHJlbWF0dHJtYXBbbWFwaWR4XS5yZXNfaW5kZXg7Ci0JCQlEYXR1bQkgICAqdmFs dWVzMiA9IHZhbHVlcyArIDE7Ci0JCQljaGFyCSAgICpudWxsczIgPSBudWxscyArIDE7CisJCQlB dHRyTnVtYmVyCWF0dG51bSA9IHJlbWF0dHJtYXBbbWFwaWR4XS5sb2NhbF9hdHRudW07CiAKIAkJ CS8qIEFsbCBtYXBwaW5ncyBzaG91bGQgaGF2ZSBiZWVuIGFzc2lnbmVkIGEgcmVzdWx0IHNldCBy b3cuICovCiAJCQlBc3NlcnQocm93ID49IDApOwogCi0JCQkvKgotCQkJICogQ2hlY2sgZm9yIHVz ZXItcmVxdWVzdGVkIGFib3J0LgotCQkJICovCisJCQkvKiBDaGVjayBmb3IgdXNlci1yZXF1ZXN0 ZWQgYWJvcnQuICovCiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCQkvKgotCQkJICog Rmlyc3QsIGNsZWFyIGV4aXN0aW5nIGF0dHJpYnV0ZSBzdGF0cy4KLQkJCSAqCi0JCQkgKiBXZSBj YW4gcmUtdXNlIHRoZSB2YWx1ZXMvbnVsbHMgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIHBhcmFtZXRl cnMKLQkJCSAqIGlzIGxlc3MgYW5kIHRoZSBmaXJzdCB0d28gcGFyYW1zIGFyZSB0aGUgc2FtZSBh cyB0aGUgc2Vjb25kIGFuZAotCQkJICogdGhpcmQgb25lcyBpbiBhdHRpbXBvcnRfc3FsLgotCQkJ ICovCi0JCQl2YWx1ZXMyW0FUVENMRUFSX1NRTF9BVFROQU1FXSA9Ci0JCQkJQ1N0cmluZ0dldFRl eHREYXR1bShyZW1hdHRybWFwW21hcGlkeF0ubG9jYWxfYXR0bmFtZSk7Ci0KLQkJCXNwaXJjID0g U1BJX2V4ZWN1dGVfcGxhbihhdHRjbGVhcl9wbGFuLCB2YWx1ZXMyLCBudWxsczIsIGZhbHNlLCAx KTsKLQkJCWlmIChzcGlyYyAhPSBTUElfT0tfU0VMRUNUKQotCQkJCWVsb2coRVJST1IsICJmYWls ZWQgdG8gZXhlY3V0ZSBhdHRjbGVhcl9zcWwgcXVlcnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgZm9y ZWlnbiB0YWJsZSBcIiVzLiVzXCIiLAotCQkJCQkgcmVtYXR0cm1hcFttYXBpZHhdLmxvY2FsX2F0 dG5hbWUsIHNjaGVtYW5hbWUsIHJlbG5hbWUpOwotCi0JCQl2YWx1ZXNbQVRUSU1QT1JUX1NRTF9B VFROVU1dID0KLQkJCQlJbnQxNkdldERhdHVtKHJlbWF0dHJtYXBbbWFwaWR4XS5sb2NhbF9hdHRu dW0pOwotCi0JCQkvKiBMb29wIHRocm91Z2ggYWxsIG1hcHBhYmxlIGNvbHVtbnMgdG8gc2V0IHJl bWFpbmluZyBhcmd1bWVudHMgKi8KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgTlVNX01BUFBFRF9B VFRJTVBPUlRfQVJHUzsgaSsrKQotCQkJCW1hcF9maWVsZF90b19hcmcocmVtc3RhdHMtPmF0dCwg cm93LAotCQkJCQkJCQkgYXR0cl9yZXN1bHRfYXJnX21hcFtpXS5yZXNfZmllbGQsCi0JCQkJCQkJ CSBhdHRyX3Jlc3VsdF9hcmdfbWFwW2ldLmFyZ19udW0sCi0JCQkJCQkJCSB2YWx1ZXMsIG51bGxz KTsKLQotCQkJc3BpcmMgPSBTUElfZXhlY3V0ZV9wbGFuKGF0dGltcG9ydF9wbGFuLCB2YWx1ZXMs IG51bGxzLCBmYWxzZSwgMSk7Ci0JCQlpZiAoc3BpcmMgIT0gU1BJX09LX1NFTEVDVCkKLQkJCQll bG9nKEVSUk9SLCAiZmFpbGVkIHRvIGV4ZWN1dGUgYXR0aW1wb3J0X3NxbCBxdWVyeSBmb3IgY29s dW1uIFwiJXNcIiBvZiBmb3JlaWduIHRhYmxlIFwiJXMuJXNcIiIsCi0JCQkJCSByZW1hdHRybWFw W21hcGlkeF0ubG9jYWxfYXR0bmFtZSwgc2NoZW1hbmFtZSwgcmVsbmFtZSk7Ci0KLQkJCWlmICgh aW1wb3J0X3NwaV9xdWVyeV9vaygpKQorCQkJLyogQ2xlYXIgZXhpc3RpbmcgYXR0cmlidXRlIHN0 YXRpc3RpY3MuICovCisJCQlkZWxldGVfYXR0cmlidXRlX3N0YXRpc3RpY3MocmVsYXRpb24sIGF0 dG51bSwgZmFsc2UpOworCisJCQkvKiBTZXQgdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzLiAqLwor CQkJc2V0X2Zsb2F0X2FyZygmYXJnc1sxXSwKKwkJCQkJCSAgZ2V0X29wdF92YWx1ZShyZXMsIHJv dywgQVRUU1RBVFNfTlVMTF9GUkFDKSk7CisJCQlzZXRfaW50MzJfYXJnKCZhcmdzWzJdLAorCQkJ CQkJICBnZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19BVkdfV0lEVEgpKTsKKwkJCXNl dF9mbG9hdF9hcmcoJmFyZ3NbM10sCisJCQkJCQkgIGdldF9vcHRfdmFsdWUocmVzLCByb3csIEFU VFNUQVRTX05fRElTVElOQ1QpKTsKKwkJCXNldF90ZXh0X2FyZygmYXJnc1s0XSwKKwkJCQkJCSBn ZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19NT1NUX0NPTU1PTl9WQUxTKSk7CisJCQlz ZXRfZmxvYXRhcnJfYXJnKCZhcmdzWzVdLAorCQkJCQkJCSBnZXRfb3B0X3ZhbHVlKHJlcywgcm93 LCBBVFRTVEFUU19NT1NUX0NPTU1PTl9GUkVRUykpOworCQkJc2V0X3RleHRfYXJnKCZhcmdzWzZd LAorCQkJCQkJIGdldF9vcHRfdmFsdWUocmVzLCByb3csIEFUVFNUQVRTX0hJU1RPR1JBTV9CT1VO RFMpKTsKKwkJCXNldF9mbG9hdF9hcmcoJmFyZ3NbN10sCisJCQkJCQkgIGdldF9vcHRfdmFsdWUo cmVzLCByb3csIEFUVFNUQVRTX0NPUlJFTEFUSU9OKSk7CisJCQlzZXRfdGV4dF9hcmcoJmFyZ3Nb OF0sCisJCQkJCQkgZ2V0X29wdF92YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfTU9TVF9DT01NT05f RUxFTVMpKTsKKwkJCXNldF9mbG9hdGFycl9hcmcoJmFyZ3NbOV0sCisJCQkJCQkJIGdldF9vcHRf dmFsdWUocmVzLCByb3csIEFUVFNUQVRTX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMpKTsKKwkJCXNl dF9mbG9hdGFycl9hcmcoJmFyZ3NbMTBdLAorCQkJCQkJCSBnZXRfb3B0X3ZhbHVlKHJlcywgcm93 LCBBVFRTVEFUU19FTEVNX0NPVU5UX0hJU1RPR1JBTSkpOworCQkJc2V0X3RleHRfYXJnKCZhcmdz WzExXSwKKwkJCQkJCSBnZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19SQU5HRV9MRU5H VEhfSElTVE9HUkFNKSk7CisJCQlzZXRfZmxvYXRfYXJnKCZhcmdzWzEyXSwKKwkJCQkJCSAgZ2V0 X29wdF92YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfUkFOR0VfRU1QVFlfRlJBQykpOworCQkJc2V0 X3RleHRfYXJnKCZhcmdzWzEzXSwKKwkJCQkJCSBnZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRT VEFUU19SQU5HRV9CT1VORFNfSElTVE9HUkFNKSk7CisKKwkJCS8qIFRyeSB0byBpbXBvcnQgdGhl IHN0YXRpc3RpY3MuICovCisJCQlpZiAoIWltcG9ydF9hdHRyaWJ1dGVfc3RhdGlzdGljcyhyZWxh dGlvbiwgYXR0bnVtLCBmYWxzZSwKKwkJCQkJCQkJCQkJICZhcmdzWzBdLCAmYXJnc1sxXSwgJmFy Z3NbMl0sCisJCQkJCQkJCQkJCSAmYXJnc1szXSwgJmFyZ3NbNF0sICZhcmdzWzVdLAorCQkJCQkJ CQkJCQkgJmFyZ3NbNl0sICZhcmdzWzddLCAmYXJnc1s4XSwKKwkJCQkJCQkJCQkJICZhcmdzWzld LCAmYXJnc1sxMF0sICZhcmdzWzExXSwKKwkJCQkJCQkJCQkJICZhcmdzWzEyXSwgJmFyZ3NbMTNd KSkKIAkJCXsKIAkJCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJCQllcnJtc2coImNvdWxkIG5vdCBp bXBvcnQgc3RhdGlzdGljcyBmb3IgZm9yZWlnbiB0YWJsZSBcIiVzLiVzXCIgLS0tIGF0dHJpYnV0 ZSBzdGF0aXN0aWNzIGltcG9ydCBmYWlsZWQgZm9yIGNvbHVtbiBcIiVzXCIgb2YgdGhpcyBmb3Jl aWduIHRhYmxlIiwKIAkJCQkJCQkgICBzY2hlbWFuYW1lLCByZWxuYW1lLAogCQkJCQkJCSAgIHJl bWF0dHJtYXBbbWFwaWR4XS5sb2NhbF9hdHRuYW1lKSk7Ci0JCQkJZ290byBpbXBvcnRfY2xlYW51 cDsKKwkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KIAl9CiAKIAkvKgotCSAqIEltcG9ydCBy ZWxhdGlvbiBzdGF0cy4gIFdlIG9ubHkgcGVyZm9ybSB0aGlzIG9uY2UsIHNvIHRoZXJlIGlzIG5v IHBvaW50Ci0JICogaW4gcHJlcGFyaW5nIHRoZSBzdGF0ZW1lbnQuCi0JICoKLQkgKiBXZSBjYW4g cmUtdXNlIHRoZSB2YWx1ZXMvbnVsbHMgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMg aXMgbGVzcwotCSAqIGFuZCB0aGUgZmlyc3QgdGhyZWUgcGFyYW1zIGFyZSB0aGUgc2FtZSBhcyBh dHRpbXBvcnRfc3FsLgotCSAqLwotCUFzc2VydChyZW1zdGF0cy0+cmVsICE9IE5VTEwpOwotCUFz c2VydChQUW5maWVsZHMocmVtc3RhdHMtPnJlbCkgPT0gUkVMU1RBVFNfTlVNX0ZJRUxEUyk7Ci0J QXNzZXJ0KFBRbnR1cGxlcyhyZW1zdGF0cy0+cmVsKSA9PSAxKTsKLQltYXBfZmllbGRfdG9fYXJn KHJlbXN0YXRzLT5yZWwsIDAsIFJFTFNUQVRTX1JFTFBBR0VTLAotCQkJCQkgUkVMSU1QT1JUX1NR TF9SRUxQQUdFUywgdmFsdWVzLCBudWxscyk7Ci0JbWFwX2ZpZWxkX3RvX2FyZyhyZW1zdGF0cy0+ cmVsLCAwLCBSRUxTVEFUU19SRUxUVVBMRVMsCi0JCQkJCSBSRUxJTVBPUlRfU1FMX1JFTFRVUExF UywgdmFsdWVzLCBudWxscyk7Ci0KLQlzcGlyYyA9IFNQSV9leGVjdXRlX3dpdGhfYXJncyhyZWxp bXBvcnRfc3FsLAotCQkJCQkJCQkgIFJFTElNUE9SVF9TUUxfTlVNX0ZJRUxEUywKLQkJCQkJCQkJ ICByZWxpbXBvcnRfYXJndHlwZXMsCi0JCQkJCQkJCSAgdmFsdWVzLCBudWxscywgZmFsc2UsIDEp OwotCWlmIChzcGlyYyAhPSBTUElfT0tfU0VMRUNUKQotCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRv IGV4ZWN1dGUgcmVsaW1wb3J0X3NxbCBxdWVyeSBmb3IgZm9yZWlnbiB0YWJsZSBcIiVzLiVzXCIi LAotCQkJIHNjaGVtYW5hbWUsIHJlbG5hbWUpOwotCi0JaWYgKCFpbXBvcnRfc3BpX3F1ZXJ5X29r KCkpCisJICogSW1wb3J0IHJlbGF0aW9uIHN0YXRpc3RpY3MuCisJICovCisJcmVzID0gcmVtc3Rh dHMtPnJlbDsKKwlBc3NlcnQocmVzICE9IE5VTEwpOworCUFzc2VydChQUW5maWVsZHMocmVzKSA9 PSBSRUxTVEFUU19OVU1fRklFTERTKTsKKwlBc3NlcnQoUFFudHVwbGVzKHJlcykgPT0gMSk7CisK KwkvKiBTZXQgdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzLiAqLworCXNldF91aW50MzJfYXJnKCZh cmdzWzFdLCBnZXRfb3B0X3ZhbHVlKHJlcywgMCwgUkVMU1RBVFNfUkVMUEFHRVMpKTsKKwlBc3Nl cnQoIWFyZ3NbMV0uaXNudWxsKTsKKwlzZXRfZmxvYXRfYXJnKCZhcmdzWzJdLCBnZXRfb3B0X3Zh bHVlKHJlcywgMCwgUkVMU1RBVFNfUkVMVFVQTEVTKSk7CisJQXNzZXJ0KCFhcmdzWzJdLmlzbnVs bCk7CisJYXJnc1szXS52YWx1ZSA9IChEYXR1bSkgMDsKKwlhcmdzWzNdLmlzbnVsbCA9IHRydWU7 CisJYXJnc1s0XS52YWx1ZSA9IChEYXR1bSkgMDsKKwlhcmdzWzRdLmlzbnVsbCA9IHRydWU7CisK KwkvKiBUcnkgdG8gaW1wb3J0IHRoZSBzdGF0aXN0aWNzLiAqLworCWlmICghaW1wb3J0X3JlbGF0 aW9uX3N0YXRpc3RpY3MocmVsYXRpb24sICZhcmdzWzBdLCAmYXJnc1sxXSwKKwkJCQkJCQkJCSZh cmdzWzJdLCAmYXJnc1szXSwgJmFyZ3NbNF0pKQogCXsKIAkJZXJlcG9ydChXQVJOSU5HLAogCQkJ CWVycm1zZygiY291bGQgbm90IGltcG9ydCBzdGF0aXN0aWNzIGZvciBmb3JlaWduIHRhYmxlIFwi JXMuJXNcIiAtLS0gcmVsYXRpb24gc3RhdGlzdGljcyBpbXBvcnQgZmFpbGVkIGZvciB0aGlzIGZv cmVpZ24gdGFibGUiLAogCQkJCQkgICBzY2hlbWFuYW1lLCByZWxuYW1lKSk7Ci0JCWdvdG8gaW1w b3J0X2NsZWFudXA7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlvayA9IHRydWU7CisJcmV0dXJu IHRydWU7Cit9CiAKLWltcG9ydF9jbGVhbnVwOgotCWlmIChhdHRpbXBvcnRfcGxhbikKLQkJU1BJ X2ZyZWVwbGFuKGF0dGltcG9ydF9wbGFuKTsKLQlpZiAoYXR0Y2xlYXJfcGxhbikKLQkJU1BJX2Zy ZWVwbGFuKGF0dGNsZWFyX3BsYW4pOwotCVNQSV9maW5pc2goKTsKLQlyZXR1cm4gb2s7CisvKgor ICogQ29uZW5pZW5jZSByb3V0aW5lIHRvIGZldGNoIHRoZSB2YWx1ZSBmb3IgdGhlIHJvdy9jb2x1 bW4gb2YgdGhlIFBHcmVzdWx0CisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9vcHRfdmFsdWUoUEdy ZXN1bHQgKnJlcywgaW50IHJvdywgaW50IGNvbCkKK3sKKwlpZiAoUFFnZXRpc251bGwocmVzLCBy b3csIGNvbCkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBQUWdldHZhbHVlKHJlcywgcm93LCBj b2wpOwogfQogCiAvKgotICogTW92ZSBhIHN0cmluZyB2YWx1ZSBmcm9tIGEgcmVzdWx0IHNldCB0 byBhIFRleHQgdmFsdWUgb2YgYSBEYXR1bSBhcnJheS4KKyAqIENvbnZlbmllbmNlIHJvdXRpbmUg Zm9yIHNldHRpbmcgb3B0aW9uYWwgdGV4dCBhcmd1bWVudHMKICAqLwotc3RhdGljIHZvaWQKLW1h cF9maWVsZF90b19hcmcoUEdyZXN1bHQgKnJlcywgaW50IHJvdywgaW50IGZpZWxkLAotCQkJCSBp bnQgYXJnLCBEYXR1bSAqdmFsdWVzLCBjaGFyICpudWxscykKK3ZvaWQKK3NldF90ZXh0X2FyZyhO dWxsYWJsZURhdHVtICphcmcsIGNvbnN0IGNoYXIgKnMpCiB7Ci0JaWYgKFBRZ2V0aXNudWxsKHJl cywgcm93LCBmaWVsZCkpCisJaWYgKHMpCiAJewotCQl2YWx1ZXNbYXJnXSA9IChEYXR1bSkgMDsK LQkJbnVsbHNbYXJnXSA9ICduJzsKKwkJYXJnLT52YWx1ZSA9IENTdHJpbmdHZXRUZXh0RGF0dW0o cyk7CisJCWFyZy0+aXNudWxsID0gZmFsc2U7CiAJfQogCWVsc2UKIAl7Ci0JCWNvbnN0IGNoYXIg KnMgPSBQUWdldHZhbHVlKHJlcywgcm93LCBmaWVsZCk7CisJCWFyZy0+dmFsdWUgPSAoRGF0dW0p IDA7CisJCWFyZy0+aXNudWxsID0gdHJ1ZTsKKwl9Cit9CiAKLQkJdmFsdWVzW2FyZ10gPSBDU3Ry aW5nR2V0VGV4dERhdHVtKHMpOwotCQludWxsc1thcmddID0gJyAnOworLyoKKyAqIENvbnZlbmll bmNlIHJvdXRpbmUgZm9yIHNldHRpbmcgb3B0aW9uYWwgaW50MzIgYXJndW1lbnRzCisgKi8KK3Zv aWQKK3NldF9pbnQzMl9hcmcoTnVsbGFibGVEYXR1bSAqYXJnLCBjb25zdCBjaGFyICpzKQorewor CWlmIChzKQorCXsKKwkJaW50MzIJCXZhbCA9IHBnX3N0cnRvaW50MzIocyk7CisKKwkJYXJnLT52 YWx1ZSA9IEludDMyR2V0RGF0dW0odmFsKTsKKwkJYXJnLT5pc251bGwgPSBmYWxzZTsKKwl9CisJ ZWxzZQorCXsKKwkJYXJnLT52YWx1ZSA9IChEYXR1bSkgMDsKKwkJYXJnLT5pc251bGwgPSB0cnVl OwogCX0KIH0KIAogLyoKLSAqIENoZWNrIHRoZSAxeDEgcmVzdWx0IHNldCBvZiBhIHBnX3Jlc3Rv cmVfKl9zdGF0cygpIGNvbW1hbmQgZm9yIHN1Y2Nlc3MuCisgKiBDb252ZW5pZW5jZSByb3V0aW5l IGZvciBzZXR0aW5nIG9wdGlvbmFsIHVpbnQzMiBhcmd1bWVudHMKICAqLwotc3RhdGljIGJvb2wK LWltcG9ydF9zcGlfcXVlcnlfb2sodm9pZCkKK3ZvaWQKK3NldF91aW50MzJfYXJnKE51bGxhYmxl RGF0dW0gKmFyZywgY29uc3QgY2hhciAqcykKIHsKLQlUdXBsZURlc2MJdHVwZGVzYzsKLQlEYXR1 bQkJZGF0OwotCWJvb2wJCWlzbnVsbDsKKwlpZiAocykKKwl7CisJCXVpbnQzMgkJdmFsID0gdWlu dDMyaW5fc3VicihzLCBOVUxMLCAidWludDMyIiwgTlVMTCk7CiAKLQlBc3NlcnQoU1BJX3R1cHRh YmxlICE9IE5VTEwpOwotCUFzc2VydChTUElfcHJvY2Vzc2VkID09IDEpOworCQlhcmctPnZhbHVl ID0gVUludDMyR2V0RGF0dW0odmFsKTsKKwkJYXJnLT5pc251bGwgPSBmYWxzZTsKKwl9CisJZWxz ZQorCXsKKwkJYXJnLT52YWx1ZSA9IChEYXR1bSkgMDsKKwkJYXJnLT5pc251bGwgPSB0cnVlOwor CX0KK30KKworLyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgZm9yIHNldHRpbmcgb3B0aW9uYWwg ZmxvYXQgYXJndW1lbnRzCisgKi8KK3ZvaWQKK3NldF9mbG9hdF9hcmcoTnVsbGFibGVEYXR1bSAq YXJnLCBjb25zdCBjaGFyICpzKQoreworCWlmIChzKQorCXsKKwkJZmxvYXQ0CQl2YWwgPSBmbG9h dDRpbl9pbnRlcm5hbCgoY2hhciAqKSBzLCBOVUxMLCAiZmxvYXQiLCBzLCBOVUxMKTsKKworCQlh cmctPnZhbHVlID0gRmxvYXQ0R2V0RGF0dW0odmFsKTsKKwkJYXJnLT5pc251bGwgPSBmYWxzZTsK Kwl9CisJZWxzZQorCXsKKwkJYXJnLT52YWx1ZSA9IChEYXR1bSkgMDsKKwkJYXJnLT5pc251bGwg PSB0cnVlOworCX0KK30KKworLyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgZm9yIHNldHRpbmcg b3B0aW9uYWwgZmxvYXRbXSBhcmd1bWVudHMKKyAqLwordm9pZAorc2V0X2Zsb2F0YXJyX2FyZyhO dWxsYWJsZURhdHVtICphcmcsIGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKHMpCisJeworCQlGbWdy SW5mbwlmbGluZm87CisJCURhdHVtCQl2YWw7CiAKLQl0dXBkZXNjID0gU1BJX3R1cHRhYmxlLT50 dXBkZXNjOwotCUFzc2VydCh0dXBkZXNjLT5uYXR0cyA9PSAxKTsKLQlBc3NlcnQoVHVwbGVEZXNj QXR0cih0dXBkZXNjLCAwKS0+YXR0dHlwaWQgPT0gQk9PTE9JRCk7Ci0JZGF0ID0gU1BJX2dldGJp bnZhbChTUElfdHVwdGFibGUtPnZhbHNbMF0sIHR1cGRlc2MsIDEsICZpc251bGwpOwotCUFzc2Vy dCghaXNudWxsKTsKKwkJZm1ncl9pbmZvKEZfQVJSQVlfSU4sICZmbGluZm8pOworCQl2YWwgPSBJ bnB1dEZ1bmN0aW9uQ2FsbCgmZmxpbmZvLCAoY2hhciAqKSBzLCBGTE9BVDRPSUQsIC0xKTsKIAot CXJldHVybiBEYXR1bUdldEJvb2woZGF0KTsKKwkJYXJnLT52YWx1ZSA9IHZhbDsKKwkJYXJnLT5p c251bGwgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJYXJnLT52YWx1ZSA9IChEYXR1bSkgMDsK KwkJYXJnLT5pc251bGwgPSB0cnVlOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv c3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXggZTg2OGRhMDBhY2UuLmVkMmM4YjU4ZTYwIDEwMDY0 NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtNDY1Miw2ICs0NjUy LDM0IEBAIEFOQUxZWkUgZHRlc3RfdGFibGU7CiAKIEFOQUxZWkUgVkVSQk9TRSBkdGVzdF9mdGFi bGU7ICAgICAgICAgICAgIC0tIHNob3VsZCB3b3JrCiAKKy0tIGR0ZXN0X2Z0YWJsZSdzIHN0YXRz IHNob3VsZCBub3cgZXhhY3RseSBtYXRjaCBkdGVzdF90YWJsZSdzCistLSBjb21wYXJlIHZhbHVl cywgc2hvdWxkIG1hdGNoCitTRUxFQ1QgcmVscGFnZXMsIHJlbHR1cGxlcyBGUk9NIHBnX2NsYXNz CitXSEVSRSBvaWQgPSAncHVibGljLmR0ZXN0X3RhYmxlJzo6cmVnY2xhc3MKK0VYQ0VQVAorU0VM RUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMgRlJPTSBwZ19jbGFzcworV0hFUkUgb2lkID0gJ3B1Ymxp Yy5kdGVzdF9mdGFibGUnOjpyZWdjbGFzczsKKworLS0gY29tcGFyZSB0aGUgcm93Y291bnRzLCBz aG91bGQgZ2V0IDAgcm93cyBiYWNrCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19zdGF0cworV0hF UkUgc2NoZW1hbmFtZSA9ICdwdWJsaWMnIEFORCB0YWJsZW5hbWUgPSAnZHRlc3RfdGFibGUnCitF WENFUFQKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX3N0YXRzCitXSEVSRSBzY2hlbWFuYW1lID0g J3B1YmxpYycgQU5EIHRhYmxlbmFtZSA9ICdkdGVzdF9mdGFibGUnOworCistLSB0ZXN0IG9ubHkg YSBmZXcgc3RhdHMgY29sdW1ucyBjb21tb24gdG8gaW50ZWdlciB0eXBlcworU0VMRUNUIGF0dG5h bWUsIGluaGVyaXRlZCwgbnVsbF9mcmFjLCBhdmdfd2lkdGgsIG5fZGlzdGluY3QsCisgIG1vc3Rf Y29tbW9uX3ZhbHM6OnRleHQgYXMgbWN2LCBtb3N0X2NvbW1vbl9mcmVxcywKKyAgaGlzdG9ncmFt X2JvdW5kczo6dGV4dCBhcyBoYiwgY29ycmVsYXRpb24KK0ZST00gcGdfc3RhdHMKK1dIRVJFIHNj aGVtYW5hbWUgPSAncHVibGljJyBBTkQgdGFibGVuYW1lID0gJ2R0ZXN0X3RhYmxlJworRVhDRVBU CitTRUxFQ1QgYXR0bmFtZSwgaW5oZXJpdGVkLCBudWxsX2ZyYWMsIGF2Z193aWR0aCwgbl9kaXN0 aW5jdCwKKyAgbW9zdF9jb21tb25fdmFsczo6dGV4dCBhcyBtY3YsIG1vc3RfY29tbW9uX2ZyZXFz LAorICBoaXN0b2dyYW1fYm91bmRzOjp0ZXh0IGFzIGhiLCBjb3JyZWxhdGlvbgorRlJPTSBwZ19z dGF0cworV0hFUkUgc2NoZW1hbmFtZSA9ICdwdWJsaWMnIEFORCB0YWJsZW5hbWUgPSAnZHRlc3Rf ZnRhYmxlJzsKKwogLS0gY2xlYW51cAogRFJPUCBGT1JFSUdOIFRBQkxFIHNpbXBvcnRfZnRhYmxl OwogRFJPUCBGT1JFSUdOIFRBQkxFIHNpbXBvcnRfZnZpZXc7CmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvZmR3aGFuZGxlci5zZ21sIGIvZG9jL3NyYy9zZ21sL2Zkd2hhbmRsZXIuc2dtbAppbmRl eCA4Njg1YTA3OGM1Mi4uMDEwM2ZkYWNmZGYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mZHdo YW5kbGVyLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Zkd2hhbmRsZXIuc2dtbApAQCAtMTQzOCw4 ICsxNDM4LDkgQEAgSW1wb3J0Rm9yZWlnblN0YXRpc3RpY3MoUmVsYXRpb24gcmVsYXRpb24sCiAg ICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gaXMgZm91bmQgaW4KICAg ICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2NvbW1hbmQvYW5hbHl6ZS5jPC9maWxlbmFtZT4uCiAg ICAgIEl0J3MgcmVjb21tZW5kZWQgdG8gaW1wb3J0IHRhYmxlLWxldmVsIGFuZCBjb2x1bW4tbGV2 ZWwgc3RhdGlzdGljcyBmb3IgdGhlCi0gICAgIGZvcmVpZ24gdGFibGUgdXNpbmcgPGZ1bmN0aW9u PnBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHM8L2Z1bmN0aW9uPiBhbmQKLSAgICAgPGZ1bmN0aW9u PnBnX3Jlc3RvcmVfYXR0cmlidXRlX3N0YXRzPC9mdW5jdGlvbj4sIHJlc3BlY3RpdmVseS4KKyAg ICAgZm9yZWlnbiB0YWJsZSB1c2luZyA8ZnVuY3Rpb24+aW1wb3J0X3JlbGF0aW9uX3N0YXRpc3Rp Y3M8L2Z1bmN0aW9uPiwKKyAgICAgPGZ1bmN0aW9uPmltcG9ydF9hdHRyaWJ1dGVfc3RhdGlzdGlj czwvZnVuY3Rpb24+LCBhbmQKKyAgICAgPGZ1bmN0aW9uPmRlbGV0ZV9hdHRyaWJ1dGVfc3RhdGlz dGljczwvZnVuY3Rpb24+LgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYyBiL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKaW5kZXggMWNjNGQ2NTcyMzEuLmJhMjI2NzFjYmY5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jCisr KyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKQEAgLTEwNSw2ICsx MDUsMTEgQEAgc3RhdGljIHN0cnVjdCBTdGF0c0FyZ0luZm8gY2xlYXJhcmdpbmZvW10gPQogfTsK IAogc3RhdGljIGJvb2wgYXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvKTsKK3N0YXRpYyBib29sIGF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZV9pbnRl cm5hbChPaWQgcmVsb2lkLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmF0dG5hbWUsCisJCQkJ CQkJCQkJCQkgQXR0ck51bWJlciBhdHRudW0sCisJCQkJCQkJCQkJCQkgYm9vbCBpbmhlcml0ZWQs CisJCQkJCQkJCQkJCQkgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pOwogc3RhdGljIHZvaWQgdXBz ZXJ0X3BnX3N0YXRpc3RpYyhSZWxhdGlvbiBzdGFyZWwsIEhlYXBUdXBsZSBvbGR0dXAsCiAJCQkJ CQkJCWNvbnN0IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKm51bGxzLCBjb25zdCBib29sICpy ZXBsYWNlcyk7CiBzdGF0aWMgYm9vbCBkZWxldGVfcGdfc3RhdGlzdGljKE9pZCByZWxvaWQsIEF0 dHJOdW1iZXIgYXR0bnVtLCBib29sIHN0YWluaGVyaXQpOwpAQCAtMTM2LDM4ICsxNDEsNiBAQCBh dHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJYm9v bAkJaW5oZXJpdGVkOwogCU9pZAkJCWxvY2tlZF90YWJsZSA9IEludmFsaWRPaWQ7CiAKLQlSZWxh dGlvbglzdGFyZWw7Ci0JSGVhcFR1cGxlCXN0YXR1cDsKLQotCU9pZAkJCWF0dHR5cGlkID0gSW52 YWxpZE9pZDsKLQlpbnQzMgkJYXR0dHlwbW9kOwotCWNoYXIJCWF0dHR5cHR5cGU7Ci0JT2lkCQkJ YXR0dHlwY29sbCA9IEludmFsaWRPaWQ7Ci0JT2lkCQkJZXFfb3ByID0gSW52YWxpZE9pZDsKLQlP aWQJCQlsdF9vcHIgPSBJbnZhbGlkT2lkOwotCi0JT2lkCQkJZWxlbXR5cGlkID0gSW52YWxpZE9p ZDsKLQlPaWQJCQllbGVtX2VxX29wciA9IEludmFsaWRPaWQ7Ci0KLQlGbWdySW5mbwlhcnJheV9p bl9mbjsKLQotCWJvb2wJCWRvX21jdiA9ICFQR19BUkdJU05VTEwoTU9TVF9DT01NT05fRlJFUVNf QVJHKSAmJgotCQkhUEdfQVJHSVNOVUxMKE1PU1RfQ09NTU9OX1ZBTFNfQVJHKTsKLQlib29sCQlk b19oaXN0b2dyYW0gPSAhUEdfQVJHSVNOVUxMKEhJU1RPR1JBTV9CT1VORFNfQVJHKTsKLQlib29s CQlkb19jb3JyZWxhdGlvbiA9ICFQR19BUkdJU05VTEwoQ09SUkVMQVRJT05fQVJHKTsKLQlib29s CQlkb19tY2VsZW0gPSAhUEdfQVJHSVNOVUxMKE1PU1RfQ09NTU9OX0VMRU1TX0FSRykgJiYKLQkJ IVBHX0FSR0lTTlVMTChNT1NUX0NPTU1PTl9FTEVNX0ZSRVFTX0FSRyk7Ci0JYm9vbAkJZG9fZGVj aGlzdCA9ICFQR19BUkdJU05VTEwoRUxFTV9DT1VOVF9ISVNUT0dSQU1fQVJHKTsKLQlib29sCQlk b19ib3VuZHNfaGlzdG9ncmFtID0gIVBHX0FSR0lTTlVMTChSQU5HRV9CT1VORFNfSElTVE9HUkFN X0FSRyk7Ci0JYm9vbAkJZG9fcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSA9ICFQR19BUkdJU05VTEwo UkFOR0VfTEVOR1RIX0hJU1RPR1JBTV9BUkcpICYmCi0JCSFQR19BUkdJU05VTEwoUkFOR0VfRU1Q VFlfRlJBQ19BUkcpOwotCi0JRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19zdGF0aXN0aWNdID0gezB9 OwotCWJvb2wJCW51bGxzW05hdHRzX3BnX3N0YXRpc3RpY10gPSB7MH07Ci0JYm9vbAkJcmVwbGFj ZXNbTmF0dHNfcGdfc3RhdGlzdGljXSA9IHswfTsKLQotCWJvb2wJCXJlc3VsdCA9IHRydWU7Ci0K IAlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBhdHRhcmdpbmZvLCBBVFRSRUxTQ0hF TUFfQVJHKTsKIAlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBhdHRhcmdpbmZvLCBB VFRSRUxOQU1FX0FSRyk7CiAKQEAgLTIzMSw2ICsyMDQsNTAgQEAgYXR0cmlidXRlX3N0YXRpc3Rp Y3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCXN0YXRzX2NoZWNrX3JlcXVpcmVk X2FyZyhmY2luZm8sIGF0dGFyZ2luZm8sIElOSEVSSVRFRF9BUkcpOwogCWluaGVyaXRlZCA9IFBH X0dFVEFSR19CT09MKElOSEVSSVRFRF9BUkcpOwogCisJcmV0dXJuIGF0dHJpYnV0ZV9zdGF0aXN0 aWNzX3VwZGF0ZV9pbnRlcm5hbChyZWxvaWQsIGF0dG5hbWUsIGF0dG51bSwKKwkJCQkJCQkJCQkJ CWluaGVyaXRlZCwgZmNpbmZvKTsKK30KKworLyoKKyAqIFdvcmtob3JzZSBmdW5jdGlvbiBmb3Ig YXR0cmlidXRlX3N0YXRpc3RpY3NfdXBkYXRlLgorICovCitzdGF0aWMgYm9vbAorYXR0cmlidXRl X3N0YXRpc3RpY3NfdXBkYXRlX2ludGVybmFsKE9pZCByZWxvaWQsCisJCQkJCQkJCQkgY29uc3Qg Y2hhciAqYXR0bmFtZSwgQXR0ck51bWJlciBhdHRudW0sCisJCQkJCQkJCQkgYm9vbCBpbmhlcml0 ZWQsIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQoreworCVJlbGF0aW9uCXN0YXJlbDsKKwlIZWFw VHVwbGUJc3RhdHVwOworCisJT2lkCQkJYXR0dHlwaWQgPSBJbnZhbGlkT2lkOworCWludDMyCQlh dHR0eXBtb2Q7CisJY2hhcgkJYXR0dHlwdHlwZTsKKwlPaWQJCQlhdHR0eXBjb2xsID0gSW52YWxp ZE9pZDsKKwlPaWQJCQllcV9vcHIgPSBJbnZhbGlkT2lkOworCU9pZAkJCWx0X29wciA9IEludmFs aWRPaWQ7CisKKwlPaWQJCQllbGVtdHlwaWQgPSBJbnZhbGlkT2lkOworCU9pZAkJCWVsZW1fZXFf b3ByID0gSW52YWxpZE9pZDsKKworCUZtZ3JJbmZvCWFycmF5X2luX2ZuOworCisJYm9vbAkJZG9f bWN2ID0gIVBHX0FSR0lTTlVMTChNT1NUX0NPTU1PTl9GUkVRU19BUkcpICYmCisJCSFQR19BUkdJ U05VTEwoTU9TVF9DT01NT05fVkFMU19BUkcpOworCWJvb2wJCWRvX2hpc3RvZ3JhbSA9ICFQR19B UkdJU05VTEwoSElTVE9HUkFNX0JPVU5EU19BUkcpOworCWJvb2wJCWRvX2NvcnJlbGF0aW9uID0g IVBHX0FSR0lTTlVMTChDT1JSRUxBVElPTl9BUkcpOworCWJvb2wJCWRvX21jZWxlbSA9ICFQR19B UkdJU05VTEwoTU9TVF9DT01NT05fRUxFTVNfQVJHKSAmJgorCQkhUEdfQVJHSVNOVUxMKE1PU1Rf Q09NTU9OX0VMRU1fRlJFUVNfQVJHKTsKKwlib29sCQlkb19kZWNoaXN0ID0gIVBHX0FSR0lTTlVM TChFTEVNX0NPVU5UX0hJU1RPR1JBTV9BUkcpOworCWJvb2wJCWRvX2JvdW5kc19oaXN0b2dyYW0g PSAhUEdfQVJHSVNOVUxMKFJBTkdFX0JPVU5EU19ISVNUT0dSQU1fQVJHKTsKKwlib29sCQlkb19y YW5nZV9sZW5ndGhfaGlzdG9ncmFtID0gIVBHX0FSR0lTTlVMTChSQU5HRV9MRU5HVEhfSElTVE9H UkFNX0FSRykgJiYKKwkJIVBHX0FSR0lTTlVMTChSQU5HRV9FTVBUWV9GUkFDX0FSRyk7CisKKwlE YXR1bQkJdmFsdWVzW05hdHRzX3BnX3N0YXRpc3RpY10gPSB7MH07CisJYm9vbAkJbnVsbHNbTmF0 dHNfcGdfc3RhdGlzdGljXSA9IHswfTsKKwlib29sCQlyZXBsYWNlc1tOYXR0c19wZ19zdGF0aXN0 aWNdID0gezB9OworCisJYm9vbAkJcmVzdWx0ID0gdHJ1ZTsKKwogCS8qCiAJICogQ2hlY2sgYXJn dW1lbnQgc2FuaXR5LiBJZiBzb21lIGFyZ3VtZW50cyBhcmUgdW51c2FibGUsIGVtaXQgYSBXQVJO SU5HCiAJICogYW5kIHNldCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCB0byBOVUxMIGluIGZj aW5mby4KQEAgLTY4OCwzICs3MDUsOTYgQEAgcGdfcmVzdG9yZV9hdHRyaWJ1dGVfc3RhdHMoUEdf RlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7CiB9CisKKy8qCisgKiBJ bXBvcnQgYXR0cmlidXRlIHN0YXRpc3RpY3MgZnJvbSBOdWxsYWJsZURhdHVtIGlucHV0cyBmb3Ig YWxsIHN0YXRpdGljYWwKKyAqIHZhbHVlcy4KKyAqCisgKiBGb3Igbm93LCB0aGUgJ3ZlcnNpb24n IGFyZ3VtZW50IGlzIGlnbm9yZWQuIEluIHRoZSBmdXR1cmUgaXQgY2FuIGJlIHVzZWQKKyAqIHRv IGludGVycHJldCBvbGRlciBzdGF0aXN0aWNzIHByb3Blcmx5LgorICovCitib29sCitpbXBvcnRf YXR0cmlidXRlX3N0YXRpc3RpY3MoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwgYm9v bCBpbmhlcml0ZWQsCisJCQkJCQkJY29uc3QgTnVsbGFibGVEYXR1bSAqdmVyc2lvbiwKKwkJCQkJ CQljb25zdCBOdWxsYWJsZURhdHVtICpudWxsX2ZyYWMsCisJCQkJCQkJY29uc3QgTnVsbGFibGVE YXR1bSAqYXZnX3dpZHRoLAorCQkJCQkJCWNvbnN0IE51bGxhYmxlRGF0dW0gKm5fZGlzdGluY3Qs CisJCQkJCQkJY29uc3QgTnVsbGFibGVEYXR1bSAqbW9zdF9jb21tb25fdmFscywKKwkJCQkJCQlj b25zdCBOdWxsYWJsZURhdHVtICptb3N0X2NvbW1vbl9mcmVxcywKKwkJCQkJCQljb25zdCBOdWxs YWJsZURhdHVtICpoaXN0b2dyYW1fYm91bmRzLAorCQkJCQkJCWNvbnN0IE51bGxhYmxlRGF0dW0g KmNvcnJlbGF0aW9uLAorCQkJCQkJCWNvbnN0IE51bGxhYmxlRGF0dW0gKm1vc3RfY29tbW9uX2Vs ZW1zLAorCQkJCQkJCWNvbnN0IE51bGxhYmxlRGF0dW0gKm1vc3RfY29tbW9uX2VsZW1fZnJlcXMs CisJCQkJCQkJY29uc3QgTnVsbGFibGVEYXR1bSAqZWxlbV9jb3VudF9oaXN0b2dyYW0sCisJCQkJ CQkJY29uc3QgTnVsbGFibGVEYXR1bSAqcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSwKKwkJCQkJCQlj b25zdCBOdWxsYWJsZURhdHVtICpyYW5nZV9lbXB0eV9mcmFjLAorCQkJCQkJCWNvbnN0IE51bGxh YmxlRGF0dW0gKnJhbmdlX2JvdW5kc19oaXN0b2dyYW0pCit7CisJTE9DQUxfRkNJTkZPKG5ld2Zj aW5mbywgTlVNX0FUVFJJQlVURV9TVEFUU19BUkdTKTsKKwlPaWQJCQlyZWxvaWQgPSBSZWxhdGlv bkdldFJlbGlkKHJlbCk7CisJY2hhcgkgICAqcmVsbmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbCk7CisJY2hhcgkgICAqYXR0bmFtZSAgPSBnZXRfYXR0bmFtZShyZWxvaWQsIGF0dG51 bSwgdHJ1ZSk7CisKKwlBc3NlcnQobnVsbF9mcmFjKTsKKwlBc3NlcnQoYXZnX3dpZHRoKTsKKwlB c3NlcnQobl9kaXN0aW5jdCk7CisJQXNzZXJ0KG1vc3RfY29tbW9uX3ZhbHMpOworCUFzc2VydCht b3N0X2NvbW1vbl9mcmVxcyk7CisJQXNzZXJ0KGhpc3RvZ3JhbV9ib3VuZHMpOworCUFzc2VydChj b3JyZWxhdGlvbik7CisJQXNzZXJ0KG1vc3RfY29tbW9uX2VsZW1zKTsKKwlBc3NlcnQobW9zdF9j b21tb25fZWxlbV9mcmVxcyk7CisJQXNzZXJ0KGVsZW1fY291bnRfaGlzdG9ncmFtKTsKKwlBc3Nl cnQocmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSk7CisJQXNzZXJ0KHJhbmdlX2VtcHR5X2ZyYWMpOwor CUFzc2VydChyYW5nZV9ib3VuZHNfaGlzdG9ncmFtKTsKKworCS8qIGFubm95aW5nbHksIGdldF9h dHRuYW1lIGRvZXNuJ3QgY2hlY2sgYXR0aXNkcm9wcGVkICovCisJaWYgKGF0dG5hbWUgPT0gTlVM TCB8fAorCQkhU2VhcmNoU3lzQ2FjaGVFeGlzdHNBdHROYW1lKHJlbG9pZCwgYXR0bmFtZSkpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfQ09MVU1OKSwK KwkJCQkgZXJybXNnKCJjb2x1bW4gJWQgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IGV4aXN0 IiwKKwkJCQkJCWF0dG51bSwgcmVsbmFtZSkpKTsKKworCUluaXRGdW5jdGlvbkNhbGxJbmZvRGF0 YSgqbmV3ZmNpbmZvLCBOVUxMLCBOVU1fQVRUUklCVVRFX1NUQVRTX0FSR1MsCisJCQkJCQkJIElu dmFsaWRPaWQsIE5VTEwsIE5VTEwpOworCisJbmV3ZmNpbmZvLT5hcmdzW0FUVFJFTFNDSEVNQV9B UkddLnZhbHVlID0KKwkJQ1N0cmluZ0dldFRleHREYXR1bShnZXRfbmFtZXNwYWNlX25hbWUoUmVs YXRpb25HZXROYW1lc3BhY2UocmVsKSkpOworCW5ld2ZjaW5mby0+YXJnc1tBVFRSRUxTQ0hFTUFf QVJHXS5pc251bGwgPSBmYWxzZTsKKwluZXdmY2luZm8tPmFyZ3NbQVRUUkVMTkFNRV9BUkddLnZh bHVlID0gQ1N0cmluZ0dldFRleHREYXR1bShyZWxuYW1lKTsKKwluZXdmY2luZm8tPmFyZ3NbQVRU UkVMTkFNRV9BUkddLmlzbnVsbCA9IGZhbHNlOworCW5ld2ZjaW5mby0+YXJnc1tBVFROQU1FX0FS R10udmFsdWUgPSBDU3RyaW5nR2V0VGV4dERhdHVtKGF0dG5hbWUpOworCW5ld2ZjaW5mby0+YXJn c1tBVFROQU1FX0FSR10uaXNudWxsID0gZmFsc2U7CisJbmV3ZmNpbmZvLT5hcmdzW0FUVE5VTV9B UkddLnZhbHVlID0gSW50MTZHZXREYXR1bShhdHRudW0pOworCW5ld2ZjaW5mby0+YXJnc1tBVFRO VU1fQVJHXS5pc251bGwgPSBmYWxzZTsKKwluZXdmY2luZm8tPmFyZ3NbSU5IRVJJVEVEX0FSR10u dmFsdWUgPSBCb29sR2V0RGF0dW0oaW5oZXJpdGVkKTsKKwluZXdmY2luZm8tPmFyZ3NbSU5IRVJJ VEVEX0FSR10uaXNudWxsID0gZmFsc2U7CisKKwluZXdmY2luZm8tPmFyZ3NbTlVMTF9GUkFDX0FS R10gPSAqbnVsbF9mcmFjOworCW5ld2ZjaW5mby0+YXJnc1tBVkdfV0lEVEhfQVJHXSA9ICphdmdf d2lkdGg7CisJbmV3ZmNpbmZvLT5hcmdzW05fRElTVElOQ1RfQVJHXSA9ICpuX2Rpc3RpbmN0Owor CW5ld2ZjaW5mby0+YXJnc1tNT1NUX0NPTU1PTl9WQUxTX0FSR10gPSAqbW9zdF9jb21tb25fdmFs czsKKwluZXdmY2luZm8tPmFyZ3NbTU9TVF9DT01NT05fRlJFUVNfQVJHXSA9ICptb3N0X2NvbW1v bl9mcmVxczsKKwluZXdmY2luZm8tPmFyZ3NbSElTVE9HUkFNX0JPVU5EU19BUkddID0gKmhpc3Rv Z3JhbV9ib3VuZHM7CisJbmV3ZmNpbmZvLT5hcmdzW0NPUlJFTEFUSU9OX0FSR10gPSAqY29ycmVs YXRpb247CisJbmV3ZmNpbmZvLT5hcmdzW01PU1RfQ09NTU9OX0VMRU1TX0FSR10gPSAqbW9zdF9j b21tb25fZWxlbXM7CisJbmV3ZmNpbmZvLT5hcmdzW01PU1RfQ09NTU9OX0VMRU1fRlJFUVNfQVJH XSA9ICptb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOworCW5ld2ZjaW5mby0+YXJnc1tFTEVNX0NPVU5U X0hJU1RPR1JBTV9BUkddID0gKmVsZW1fY291bnRfaGlzdG9ncmFtOworCW5ld2ZjaW5mby0+YXJn c1tSQU5HRV9MRU5HVEhfSElTVE9HUkFNX0FSR10gPSAqcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbTsK KwluZXdmY2luZm8tPmFyZ3NbUkFOR0VfRU1QVFlfRlJBQ19BUkddID0gKnJhbmdlX2VtcHR5X2Zy YWM7CisJbmV3ZmNpbmZvLT5hcmdzW1JBTkdFX0JPVU5EU19ISVNUT0dSQU1fQVJHXSA9ICpyYW5n ZV9ib3VuZHNfaGlzdG9ncmFtOworCisJcmV0dXJuIGF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0 ZV9pbnRlcm5hbChyZWxvaWQsIGF0dG5hbWUsIGF0dG51bSwKKwkJCQkJCQkJCQkJCWluaGVyaXRl ZCwgbmV3ZmNpbmZvKTsKK30KKworLyoKKyAqIERlbGV0ZSBhdHRyaWJ1dGUgc3RhdGlzdGljcy4K KyAqLworYm9vbAorZGVsZXRlX2F0dHJpYnV0ZV9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwgQXR0 ck51bWJlciBhdHRudW0sIGJvb2wgaW5oZXJpdGVkKQoreworCXJldHVybiBkZWxldGVfcGdfc3Rh dGlzdGljKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCBpbmhlcml0ZWQpOworfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jIGIvc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jCmluZGV4IGQ2NjMxZTlhOWE0Li45OTBh NzUxMWQwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0 cy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYwpAQCAtMjEs NiArMjEsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcuaCIKICNpbmNsdWRlICJjYXRh bG9nL25hbWVzcGFjZS5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUg InN0YXRpc3RpY3Mvc3RhdGlzdGljcy5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3Mvc3RhdF91dGls cy5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9p ZHMuaCIKQEAgLTU3LDYgKzU4LDggQEAgc3RhdGljIHN0cnVjdCBTdGF0c0FyZ0luZm8gcmVsYXJn aW5mb1tdID0KIH07CiAKIHN0YXRpYyBib29sIHJlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvKTsKK3N0YXRpYyBib29sIHJlbGF0aW9uX3N0YXRpc3RpY3Nf dXBkYXRlX2ludGVybmFsKE9pZCByZWxvaWQsCisJCQkJCQkJCQkJCQlGdW5jdGlvbkNhbGxJbmZv IGZjaW5mbyk7CiAKIC8qCiAgKiBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgbW9kaWZ5aW5nIHN0YXRp c3RpY3MgZm9yIGEgcmVsYXRpb24uCkBAIC02NCwyNSArNjcsOSBAQCBzdGF0aWMgYm9vbCByZWxh dGlvbl9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbyk7CiBzdGF0aWMg Ym9vbAogcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8p CiB7Ci0JYm9vbAkJcmVzdWx0ID0gdHJ1ZTsKIAljaGFyCSAgICpuc3BuYW1lOwogCWNoYXIJICAg KnJlbG5hbWU7CiAJT2lkCQkJcmVsb2lkOwotCVJlbGF0aW9uCWNyZWw7Ci0JQmxvY2tOdW1iZXIg cmVscGFnZXMgPSAwOwotCWJvb2wJCXVwZGF0ZV9yZWxwYWdlcyA9IGZhbHNlOwotCWZsb2F0CQly ZWx0dXBsZXMgPSAwOwotCWJvb2wJCXVwZGF0ZV9yZWx0dXBsZXMgPSBmYWxzZTsKLQlCbG9ja051 bWJlciByZWxhbGx2aXNpYmxlID0gMDsKLQlib29sCQl1cGRhdGVfcmVsYWxsdmlzaWJsZSA9IGZh bHNlOwotCUJsb2NrTnVtYmVyIHJlbGFsbGZyb3plbiA9IDA7Ci0JYm9vbAkJdXBkYXRlX3JlbGFs bGZyb3plbiA9IGZhbHNlOwotCUhlYXBUdXBsZQljdHVwOwotCUZvcm1fcGdfY2xhc3MgcGdjZm9y bTsKLQlpbnQJCQlyZXBsYWNlc1s0XSA9IHswfTsKLQlEYXR1bQkJdmFsdWVzWzRdID0gezB9Owot CWJvb2wJCW51bGxzWzRdID0gezB9OwotCWludAkJCW5yZXBsYWNlcyA9IDA7CiAJT2lkCQkJbG9j a2VkX3RhYmxlID0gSW52YWxpZE9pZDsKIAogCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2lu Zm8sIHJlbGFyZ2luZm8sIFJFTFNDSEVNQV9BUkcpOwpAQCAtMTAxLDYgKzg4LDMyIEBAIHJlbGF0 aW9uX3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCQkJCQkJCQkJ ICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssIDAsCiAJCQkJCQkJCQkgIFJhbmdlVmFyQ2FsbGJh Y2tGb3JTdGF0cywgJmxvY2tlZF90YWJsZSk7CiAKKwlyZXR1cm4gcmVsYXRpb25fc3RhdGlzdGlj c191cGRhdGVfaW50ZXJuYWwocmVsb2lkLCBmY2luZm8pOworfQorCisvKgorICogV29ya2hvcnNl IGZ1bmN0aW9uIGZvciByZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0ZS4KKyAqLworc3RhdGljIGJv b2wKK3JlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlX2ludGVybmFsKE9pZCByZWxvaWQsIEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvKQoreworCUJsb2NrTnVtYmVyIHJlbHBhZ2VzID0gMDsKKwlib29s CQl1cGRhdGVfcmVscGFnZXMgPSBmYWxzZTsKKwlmbG9hdAkJcmVsdHVwbGVzID0gMDsKKwlib29s CQl1cGRhdGVfcmVsdHVwbGVzID0gZmFsc2U7CisJQmxvY2tOdW1iZXIgcmVsYWxsdmlzaWJsZSA9 IDA7CisJYm9vbAkJdXBkYXRlX3JlbGFsbHZpc2libGUgPSBmYWxzZTsKKwlCbG9ja051bWJlciBy ZWxhbGxmcm96ZW4gPSAwOworCWJvb2wJCXVwZGF0ZV9yZWxhbGxmcm96ZW4gPSBmYWxzZTsKKwlS ZWxhdGlvbgljcmVsOworCUhlYXBUdXBsZQljdHVwOworCUZvcm1fcGdfY2xhc3MgcGdjZm9ybTsK KwlpbnQJCQlyZXBsYWNlc1s0XSA9IHswfTsKKwlEYXR1bQkJdmFsdWVzWzRdID0gezB9OworCWJv b2wJCW51bGxzWzRdID0gezB9OworCWludAkJCW5yZXBsYWNlcyA9IDA7CisJYm9vbAkJcmVzdWx0 ID0gdHJ1ZTsKKwogCWlmICghUEdfQVJHSVNOVUxMKFJFTFBBR0VTX0FSRykpCiAJewogCQlyZWxw YWdlcyA9IFBHX0dFVEFSR19VSU5UMzIoUkVMUEFHRVNfQVJHKTsKQEAgLTI0MSwzICsyNTQsNDQg QEAgcGdfcmVzdG9yZV9yZWxhdGlvbl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVU VVJOX0JPT0wocmVzdWx0KTsKIH0KKworLyoKKyAqIEltcG9ydCByZWxhdGlvbiBzdGF0aXN0aWNz IGZyb20gTnVsbGFibGVEYXR1bSBpbnB1dHMgZm9yIGFsbCBzdGF0aXRpY2FsCisgKiB2YWx1ZXMu CisgKgorICogRm9yIG5vdywgdGhlICd2ZXJzaW9uJyBhcmd1bWVudCBpcyBpZ25vcmVkLiBJbiB0 aGUgZnV0dXJlIGl0IGNhbiBiZSB1c2VkCisgKiB0byBpbnRlcnByZXQgb2xkZXIgc3RhdGlzdGlj cyBwcm9wZXJseS4KKyAqLworYm9vbAoraW1wb3J0X3JlbGF0aW9uX3N0YXRpc3RpY3MoUmVsYXRp b24gcmVsLAorCQkJCQkJICAgY29uc3QgTnVsbGFibGVEYXR1bSAqdmVyc2lvbiwKKwkJCQkJCSAg IGNvbnN0IE51bGxhYmxlRGF0dW0gKnJlbHBhZ2VzLAorCQkJCQkJICAgY29uc3QgTnVsbGFibGVE YXR1bSAqcmVsdHVwbGVzLAorCQkJCQkJICAgY29uc3QgTnVsbGFibGVEYXR1bSAqcmVsYWxsdmlz aWJsZSwKKwkJCQkJCSAgIGNvbnN0IE51bGxhYmxlRGF0dW0gKnJlbGFsbGZyb3plbikKK3sKKwlM T0NBTF9GQ0lORk8obmV3ZmNpbmZvLCBOVU1fUkVMQVRJT05fU1RBVFNfQVJHUyk7CisKKwlBc3Nl cnQocmVscGFnZXMpOworCUFzc2VydChyZWx0dXBsZXMpOworCUFzc2VydChyZWxhbGx2aXNpYmxl KTsKKwlBc3NlcnQocmVsYWxsZnJvemVuKTsKKworCUluaXRGdW5jdGlvbkNhbGxJbmZvRGF0YSgq bmV3ZmNpbmZvLCBOVUxMLCBOVU1fUkVMQVRJT05fU1RBVFNfQVJHUywKKwkJCQkJCQkgSW52YWxp ZE9pZCwgTlVMTCwgTlVMTCk7CisKKwluZXdmY2luZm8tPmFyZ3NbUkVMU0NIRU1BX0FSR10udmFs dWUgPQorCQlDU3RyaW5nR2V0VGV4dERhdHVtKGdldF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdl dE5hbWVzcGFjZShyZWwpKSk7CisJbmV3ZmNpbmZvLT5hcmdzW1JFTFNDSEVNQV9BUkddLmlzbnVs bCA9IGZhbHNlOworCW5ld2ZjaW5mby0+YXJnc1tSRUxOQU1FX0FSR10udmFsdWUgPQorCQlDU3Ry aW5nR2V0VGV4dERhdHVtKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCW5ld2ZjaW5m by0+YXJnc1tSRUxOQU1FX0FSR10uaXNudWxsID0gZmFsc2U7CisKKwluZXdmY2luZm8tPmFyZ3Nb UkVMUEFHRVNfQVJHXSA9ICpyZWxwYWdlczsKKwluZXdmY2luZm8tPmFyZ3NbUkVMVFVQTEVTX0FS R10gPSAqcmVsdHVwbGVzOworCW5ld2ZjaW5mby0+YXJnc1tSRUxBTExWSVNJQkxFX0FSR10gPSAq cmVsYWxsdmlzaWJsZTsKKwluZXdmY2luZm8tPmFyZ3NbUkVMQUxMRlJPWkVOX0FSR10gPSAqcmVs YWxsZnJvemVuOworCisJcmV0dXJuIHJlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlX2ludGVybmFs KFJlbGF0aW9uR2V0UmVsaWQocmVsKSwKKwkJCQkJCQkJCQkJICAgbmV3ZmNpbmZvKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3RhdGlzdGljcy5oIGIvc3JjL2luY2x1 ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmgKaW5kZXggOGY5YjlkMjM3ZmQuLjBiMTYzMTAzYTcy IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaAorKysgYi9z cmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaApAQCAtMTI4LDQgKzEyOCwyOSBAQCBl eHRlcm4gU3RhdGlzdGljRXh0SW5mbyAqY2hvb3NlX2Jlc3Rfc3RhdGlzdGljcyhMaXN0ICpzdGF0 cywgY2hhciByZXF1aXJlZGtpbmQsCiAJCQkJCQkJCQkJCQlpbnQgbmNsYXVzZXMpOwogZXh0ZXJu IEhlYXBUdXBsZSBzdGF0ZXh0X2V4cHJlc3Npb25zX2xvYWQoT2lkIHN0eG9pZCwgYm9vbCBpbmgs IGludCBpZHgpOwogCitleHRlcm4gYm9vbCBpbXBvcnRfcmVsYXRpb25fc3RhdGlzdGljcyhSZWxh dGlvbiByZWwsCisJCQkJCQkJCQkgICBjb25zdCBOdWxsYWJsZURhdHVtICp2ZXJzaW9uLAorCQkJ CQkJCQkJICAgY29uc3QgTnVsbGFibGVEYXR1bSAqcmVscGFnZXMsCisJCQkJCQkJCQkgICBjb25z dCBOdWxsYWJsZURhdHVtICpyZWx0dXBsZXMsCisJCQkJCQkJCQkgICBjb25zdCBOdWxsYWJsZURh dHVtICpyZWxhbGx2aXNpYmxlLAorCQkJCQkJCQkJICAgY29uc3QgTnVsbGFibGVEYXR1bSAqcmVs YWxsZnJvemVuKTsKK2V4dGVybiBib29sIGltcG9ydF9hdHRyaWJ1dGVfc3RhdGlzdGljcyhSZWxh dGlvbiByZWwsCisJCQkJCQkJCQkJQXR0ck51bWJlciBhdHRudW0sIGJvb2wgaW5oZXJpdGVkLAor CQkJCQkJCQkJCWNvbnN0IE51bGxhYmxlRGF0dW0gKnZlcnNpb24sCisJCQkJCQkJCQkJY29uc3Qg TnVsbGFibGVEYXR1bSAqbnVsbF9mcmFjLAorCQkJCQkJCQkJCWNvbnN0IE51bGxhYmxlRGF0dW0g KmF2Z193aWR0aCwKKwkJCQkJCQkJCQljb25zdCBOdWxsYWJsZURhdHVtICpuX2Rpc3RpbmN0LAor CQkJCQkJCQkJCWNvbnN0IE51bGxhYmxlRGF0dW0gKm1vc3RfY29tbW9uX3ZhbHMsCisJCQkJCQkJ CQkJY29uc3QgTnVsbGFibGVEYXR1bSAqbW9zdF9jb21tb25fZnJlcXMsCisJCQkJCQkJCQkJY29u c3QgTnVsbGFibGVEYXR1bSAqaGlzdG9ncmFtX2JvdW5kcywKKwkJCQkJCQkJCQljb25zdCBOdWxs YWJsZURhdHVtICpjb3JyZWxhdGlvbiwKKwkJCQkJCQkJCQljb25zdCBOdWxsYWJsZURhdHVtICpt b3N0X2NvbW1vbl9lbGVtcywKKwkJCQkJCQkJCQljb25zdCBOdWxsYWJsZURhdHVtICptb3N0X2Nv bW1vbl9lbGVtX2ZyZXFzLAorCQkJCQkJCQkJCWNvbnN0IE51bGxhYmxlRGF0dW0gKmVsZW1fY291 bnRfaGlzdG9ncmFtLAorCQkJCQkJCQkJCWNvbnN0IE51bGxhYmxlRGF0dW0gKnJhbmdlX2xlbmd0 aF9oaXN0b2dyYW0sCisJCQkJCQkJCQkJY29uc3QgTnVsbGFibGVEYXR1bSAqcmFuZ2VfZW1wdHlf ZnJhYywKKwkJCQkJCQkJCQljb25zdCBOdWxsYWJsZURhdHVtICpyYW5nZV9ib3VuZHNfaGlzdG9n cmFtKTsKK2V4dGVybiBib29sIGRlbGV0ZV9hdHRyaWJ1dGVfc3RhdGlzdGljcyhSZWxhdGlvbiBy ZWwsCisJCQkJCQkJCQkJQXR0ck51bWJlciBhdHRudW0sIGJvb2wgaW5oZXJpdGVkKTsKKwogI2Vu ZGlmCQkJCQkJCS8qIFNUQVRJU1RJQ1NfSCAqLwo= --0000000000005d6ed606561851a0--