Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qF1Lo-0005OA-V3 for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Jun 2023 23:47:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qF1Ll-0003mS-Mb for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Jun 2023 23:46:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qF1Ll-0003mJ-51 for pgsql-hackers@lists.postgresql.org; Thu, 29 Jun 2023 23:46:57 +0000 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qF1Lc-001Fuo-NW for pgsql-hackers@lists.postgresql.org; Thu, 29 Jun 2023 23:46:54 +0000 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-1b80b514fb7so7640245ad.0 for ; Thu, 29 Jun 2023 16:46:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=timescale.com; s=google; t=1688082406; x=1690674406; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=fPwRVonnR0fzap3xOV/69UvdrXImOZm0CrB1ikJtBaQ=; b=BaRahJuTjHM/1WKYvTS/p6N3w+PKDQ5RWUJBiPeDoPj5dP6e9VYY34VMHYWaU8uKJa bJ1Mr1cF15sEB6ZriKhGahJhq7u/zmvPUNVQysz1Vnqa1pVNkNJV7RtK2vfiuIBMW7jZ o47BpqaCXaxuaYNjDRqyqf7roxzGFRxeNV5HphDWGtaKPSb7im2MgBusOgKQ7Fw9e42y V/9VvHnh/8XxqNVqheQTmhlCKrLeHqZE+Txoqp8A6a1sVfsAfcSYIz/Q58vaSN7h6HDy ex5Efzuw2V3JbeclKhYCS3l4NZZ0NKswLy/5kg/+ROOK+jrSPZp7WQDKXW/H0oyx4rQb s//Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688082406; x=1690674406; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=fPwRVonnR0fzap3xOV/69UvdrXImOZm0CrB1ikJtBaQ=; b=gfdJn6PBdMOOIqMmjASg2fi/hkL0c5gWM5ktVh6A/KczHG/aqA9nu6o2bEDxvkwyXl l4CWVisopv3P2onLEU/exA2WCUDh5LFB8kl1mYHEyGf+sP+6Ig5YGiFWusCL6rHr2n/u kYI6f9GUueMt3Gw1dTaEf2JF4LNvvU9Nz895vHXhxhRBbkPmoYUZlhgIr5S0/FmfBnwT th80tdzu4T62rJufeQoG7x1lx1eoP6UqwgIaU+ZGadAuAbCiD0MYEKy7qP6XyQnxCNTB Aazei+QFE1PgJ1kIhXzarlGZJbmZiP0Si3LZO5+i7E0t2adGv5ge832ZqVT+x7LrxQKD K/BA== X-Gm-Message-State: ABy/qLby2NAG/3BTn/jlZ5siArHQAghco7UA6mTpRI1sliL6FQMMSFLH eREvZk80aRl5IpPfZBwmHYYUXDyVXtCmZ11wLl2DEg== X-Google-Smtp-Source: APBJJlFqdKrXfqwSf7PgyUi9zBVSBeFiTwRcX8gG1Mx0gJgc8wnE8aNLykk/nH6Vo9JJ8G8EofGWVg== X-Received: by 2002:a17:902:d4d0:b0:1b6:771a:3516 with SMTP id o16-20020a170902d4d000b001b6771a3516mr670505plg.22.1688082406247; Thu, 29 Jun 2023 16:46:46 -0700 (PDT) Received: from [192.168.1.21] ([50.53.8.205]) by smtp.gmail.com with ESMTPSA id i2-20020a17090332c200b001b55f00bb9dsm9564619plr.256.2023.06.29.16.46.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 29 Jun 2023 16:46:45 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------t3G0JkSKKjR0VSJl6T1XOBWh" Message-ID: <7eca2186-5da7-9e3c-6faf-ced69536031c@timescale.com> Date: Thu, 29 Jun 2023 16:46:44 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: RFC: logical publication via inheritance root? From: Jacob Champion To: PostgreSQL Hackers Cc: Aleksander Alekseev , Peter Smith , Amit Kapila References: <13971415-416b-1e98-2fe5-ad394c6ddc2c@timescale.com> Content-Language: en-US In-Reply-To: <13971415-416b-1e98-2fe5-ad394c6ddc2c@timescale.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------t3G0JkSKKjR0VSJl6T1XOBWh Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 6/6/23 08:50, Jacob Champion wrote: > Commit 062a84442 necessitated some rework of the new > pg_get_publication_rels_to_sync() helper. It now takes a list of > publications so that we can handle conflicts in the pubviaroot settings. > This is more complicated than before -- unlike partitions, standard > inheritance trees can selectively publish tables that aren't leaves. But > I think I've finally settled on some semantics for it which are > unsurprising. The semantics I've picked are wrong :( I've accidentally reintroduced a bug that's similar to the one discussed upthread, where if you have two leaf tables published through different roots: tree pub1 pub2 ----- ----- ----- A - A B C B - - - D D D then a subscription on both publications will duplicate the data in the leaf (D in the above example). I need to choose semantics that are closer to the current behavior of partitions. > I wonder if pg_set_logical_root() might be better implemented as part of > ALTER TABLE. Maybe with a relation option? If it all went through ALTER > TABLE ONLY ... SET, then we wouldn't have to worry about a user > modifying roots while reading pg_get_publication_rels_to_sync() in the > same query. The permissions checks should be more consistent with less > effort, and there's an existing way to set/clear the option that already > plays well with pg_dump and pg_upgrade. I've implemented ALTER TABLE in v3; I like it a lot more. The new reloption is named publish_via_parent. So now we can unset the flag and dump/restore. v3 also fixes a nasty uninitialized stack variable, along with a bad collation assumption I made. > The downsides I can see are the > need to handle simultaneous changes to INHERIT and SET (since we'd be > manipulating pg_inherits in both), (This didn't turn out to be as bad as I feared.) > as well as the fact that ALTER TABLE > ... SET defaults to altering the entire table hierarchy, which may be > bad UX for this case. This was just wrong -- ALTER TABLE ... SET does not recurse. I think the docs are misleading here, and I'm not sure why we allow an explicit '*' after a table name if we're going to ignore it. But I also don't really want to poke at that in this patchset, if I can avoid it. --Jacob --------------t3G0JkSKKjR0VSJl6T1XOBWh Content-Type: text/plain; charset=UTF-8; name="since-v2.diff.txt" Content-Disposition: attachment; filename="since-v2.diff.txt" Content-Transfer-Encoding: base64 MTogIDc2MWI5MWIzZjEgPSAxOiAgN2U2OGY5NmFmNiBwZ291dHB1dDogcmVmYWN0b3IgcHVi bGljYXRpb24gY2FjaGUgY29uc3RydWN0aW9uCjI6ICAwMzk3YTUyNTgzICEgMjogIGE0ODU2 MzkxOWUgV0lQOiBpbnRyb2R1Y2UgcGdfc2V0X2xvZ2ljYWxfcm9vdCBmb3IgdXNlIHdpdGgg cHVidmlhcm9vdAogICAgQEAgTWV0YWRhdGEKICAgICBBdXRob3I6IEphY29iIENoYW1waW9u IDxqY2hhbXBpb25AdGltZXNjYWxlLmNvbT4KICAgICAKICAgICAgIyMgQ29tbWl0IG1lc3Nh Z2UgIyMKICAgIC0gICAgV0lQOiBpbnRyb2R1Y2UgcGdfc2V0X2xvZ2ljYWxfcm9vdCBmb3Ig dXNlIHdpdGggcHVidmlhcm9vdAogICAgKyAgICBXSVA6IGludHJvZHVjZSBwdWJsaXNoX3Zp YV9wYXJlbnQgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24KICAgICAKICAgIC0gICAgQWxsb3dz IHJlZ3VsYXIgaW5oZXJpdGVkIHRhYmxlcyB0byBiZSBwdWJsaXNoZWQgdmlhIHRoZWlyIHJv b3QgdGFibGUsCiAgICAtICAgIGp1c3QgbGlrZSBwYXJ0aXRpb25zLiBUaGlzIHdvcmtzIGJ5 IGhpamFja2luZyBwZ19pbmhlcml0J3MgaW5oc2Vxbm8KICAgIC0gICAgY29sdW1uLCBhbmQg cmVwbGFjaW5nIGEgKHNpbmdsZSkgZXhpc3RpbmcgZW50cnkgZm9yIHRoZSBjaGlsZCB3aXRo IHRoZQogICAgLSAgICB2YWx1ZSB6ZXJvLCBpbmRpY2F0aW5nIHRoYXQgaXQgc2hvdWxkIGJl IHRyZWF0ZWQgYXMgYSBsb2dpY2FsIHBhcnRpdGlvbgogICAgLSAgICBieSB0aGUgcHVibGlj YXRpb24gbWFjaGluZXJ5LgogICAgKyAgICBUaGlzIG5ldyByZWxhdGlvbiBvcHRpb24gYWxs b3dzIHJlZ3VsYXIgaW5oZXJpdGVkIHRhYmxlcyB0byBiZSBwdWJsaXNoZWQKICAgICsgICAg dmlhIHRoZWlyIHJvb3QgdGFibGUsIGp1c3QgbGlrZSBwYXJ0aXRpb25zLiBUaGlzIHdvcmtz IGJ5IGhpamFja2luZwogICAgKyAgICBwZ19pbmhlcml0J3MgaW5oc2Vxbm8gY29sdW1uLCBh bmQgcmVwbGFjaW5nIGEgKHNpbmdsZSkgZXhpc3RpbmcgZW50cnkKICAgICsgICAgZm9yIHRo ZSBjaGlsZCB3aXRoIHRoZSB2YWx1ZSB6ZXJvLCBpbmRpY2F0aW5nIHRoYXQgaXQgc2hvdWxk IGJlIHRyZWF0ZWQKICAgICsgICAgYXMgYSBsb2dpY2FsIHBhcnRpdGlvbiBieSB0aGUgcHVi bGljYXRpb24gbWFjaGluZXJ5LgogICAgIAogICAgICAgICBJbml0aWFsIHN5bmMgd29ya3Mg YnkgYXNraW5nIHRoZSBwdWJsaXNoZXIgZm9yIGEgbGlzdCBvZiBsb2dpY2FsCiAgICAgICAg IGRlc2NlbmRhbnRzIG9mIHRoZSBwdWJsaXNoZWQgdGFibGUsIHRoZW4gQ09QWWluZyB0aGVt IG9uZS1ieS1vbmUgaW50bwogICAgQEAgQ29tbWl0IG1lc3NhZ2UKICAgICAgICAgcm9vdHMu CiAgICAgCiAgICAgICAgIEtub3duIGJ1Z3MvVE9ET3M6CiAgICAtICAgIC0gVGhlIHBnX2lu aGVyaXRzIG1hY2hpbmVyeSBkb2Vzbid0IHByb2hpYml0IGNoYW5nZXMgdG8gaW5oZXJpdGFu Y2UKICAgIC0gICAgICBhZnRlciBhbiBlbnRyeSBoYXMgYmVlbiBtYXJrZWQgYXMgYSBsb2dp Y2FsIHJvb3QuCiAgICArICAgIC0gSWYgdHdvIHB1YmxpY2F0aW9ucyBwdWJsaXNoIHRoZSBz YW1lIGxlYXZlcyBvZiBhIHRhYmxlIGhpZXJhcmNoeSwgYnV0CiAgICArICAgICAgaGF2ZSBk aWZmZXJlbnQgcm9vdHMsIHRoZSBzaGFyZWQgbGVhZiB0YWJsZXMgd2lsbCBiZSBpbmNvcnJl Y3RseQogICAgKyAgICAgIGR1cGxpY2F0ZWQgd2hlbiBzdWJzY3JpYmluZyB0byBib3RoIHB1 YmxpY2F0aW9ucyBzaW11bHRhbmVvdXNseS4KICAgICAgICAgLSBJIGhhdmVuJ3QgZ2l2ZW4g YW55IHRob3VnaHQgdG8gaW50ZXJhY3Rpb25zIHdpdGggcm93IGZpbHRlcnMsIG9yIHRvCiAg ICAgICAgICAgY29sdW1uIGxpc3RzLgogICAgICAgICAtIEknbSBub3Qgc3VyZSB0aGF0IEkn bSB0YWtpbmcgYWxsIHRoZSBuZWNlc3NhcnkgbG9ja3MgeWV0LCBhbmQgdGhvc2UgSQogICAg ICAgICAgIGRvIHRha2UgbWF5IGJlIHRha2VuIGluIHRoZSB3cm9uZyBvcmRlci4KICAgIC0g ICAgLSBEdW1wIGFuZCB1cGdyYWRlIGFyZW4ndCBzdXBwb3J0ZWQgeWV0LgogICAgKwogICAg KyAjIyBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyAjIwogICAgK0BA IHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jOiBzdGF0aWMgcmVsb3B0 X2Jvb2wgYm9vbFJlbE9wdHNbXSA9CiAgICArIAkJfSwKICAgICsgCQlmYWxzZQogICAgKyAJ fSwKICAgICsrCXsKICAgICsrCQl7CiAgICArKwkJCSJwdWJsaXNoX3ZpYV9wYXJlbnQiLAog ICAgKysJCQkiUmVwbGljYXRlIHRoaXMgdGFibGUncyBjb250ZW50cyB2aWEgaXRzIHBhcmVu dCB0YWJsZSB3aGVuIHB1Ymxpc2hpbmcgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCIsCiAgICArKwkJCVJFTE9QVF9LSU5EX0hFQVAsCiAgICArKwkJCUFjY2Vzc0V4Y2x1c2l2 ZUxvY2sKICAgICsrCQl9LAogICAgKysJCWZhbHNlCiAgICArKwl9LAogICAgKyAJewogICAg KyAJCXsKICAgICsgCQkJImZhc3R1cGRhdGUiLAogICAgK0BAIHNyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vcmVsb3B0aW9ucy5jOiBkZWZhdWx0X3JlbG9wdGlvbnMoRGF0dW0gcmVsb3B0 aW9ucywgYm9vbCB2YWxpZGF0ZSwgcmVsb3B0X2tpbmQga2luZCkKICAgICsgCQlvZmZzZXRv ZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIGFu YWx5emVfc2NhbGVfZmFjdG9yKX0sCiAgICArIAkJeyJ1c2VyX2NhdGFsb2dfdGFibGUiLCBS RUxPUFRfVFlQRV9CT09MLAogICAgKyAJCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgdXNlcl9j YXRhbG9nX3RhYmxlKX0sCiAgICArKwkJeyJwdWJsaXNoX3ZpYV9wYXJlbnQiLCBSRUxPUFRf VFlQRV9CT09MLAogICAgKysJCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgcHVibGlzaF92aWFf cGFyZW50KX0sCiAgICArIAkJeyJwYXJhbGxlbF93b3JrZXJzIiwgUkVMT1BUX1RZUEVfSU5U LAogICAgKyAJCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgcGFyYWxsZWxfd29ya2Vycyl9LAog ICAgKyAJCXsidmFjdXVtX2luZGV4X2NsZWFudXAiLCBSRUxPUFRfVFlQRV9FTlVNLAogICAg IAogICAgICAjIyBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgIyMKICAgICBA QAogICAgQEAgc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jOiBmaW5kX2luaGVy aXRhbmNlX2NoaWxkcmVuKE9pZCBwYXJlbnRyZWxJZCwgTE8KICAgICAgICogY29tbWl0dGVk IHRvIHRoZSBhY3RpdmUgc25hcHNob3QuICBJbiBhZGRpdGlvbiwgKmRldGFjaGVkX3htaW4g KGlmIG5vdCBudWxsKQogICAgICAgKiBpcyBzZXQgdG8gdGhlIHhtaW4gb2YgdGhlIHJvdyBv ZiB0aGUgZGV0YWNoZWQgcGFydGl0aW9uLgogICAgICsgKgogICAgLSsgKiBJZiBsb2dpY2Fs X29ubHkgaXMgdHJ1ZSwgb25seSB0YWJsZXMgbWFya2VkIGV4cGxpY2l0bHkgdmlhCiAgICAt KyAqIHBnX3NldF9sb2dpY2FsX3Jvb3QoKSBhcmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBs aXN0LgogICAgKysgKiBJZiBsb2dpY2FsX29ubHkgaXMgdHJ1ZSwgb25seSB0YWJsZXMgbWFy a2VkIGV4cGxpY2l0bHkgdmlhIHB1Ymxpc2hfdmlhX3BhcmVudAogICAgKysgKiBhcmUgaW5j bHVkZWQgaW4gdGhlIG91dHB1dCBsaXN0LgogICAgICAgKi8KICAgICAgTGlzdCAqCiAgICAg IGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBi b29sIG9taXRfZGV0YWNoZWQsCiAgICBAQCBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVy aXRzLmM6IFBhcnRpdGlvbkhhc1BlbmRpbmdEZXRhY2goT2lkIHBhcnRvaWQpCiAgICAgK2hh c19sb2dpY2FsX3BhcmVudChSZWxhdGlvbiBpbmhSZWwsIE9pZCByZWxpZCkKICAgICArewog ICAgICsJcmV0dXJuIChnZXRfbG9naWNhbF9wYXJlbnRfd29ya2VyKGluaFJlbCwgcmVsaWQp ICE9IEludmFsaWRPaWQpOwogICAgLSt9CiAgICAtKwogICAgLStEYXR1bQogICAgLStwZ19z ZXRfbG9naWNhbF9yb290KFBHX0ZVTkNUSU9OX0FSR1MpCiAgICAtK3sKICAgIC0rCU9pZAkJ CXRhYmxlb2lkID0gUEdfR0VUQVJHX09JRCgwKTsKICAgIC0rCU9pZAkJCXJvb3RvaWQgPSBQ R19HRVRBUkdfT0lEKDEpOwogICAgLSsJY2hhcgkgICAqdGFibGVuYW1lOwogICAgLSsJY2hh cgkgICAqcm9vdG5hbWU7CiAgICAtKwlSZWxhdGlvbglpbmhSZWw7CiAgICAtKwlTY2FuS2V5 RGF0YSBrZXk7CiAgICAtKwlTeXNTY2FuRGVzYyBzY2FuOwogICAgLSsJT2lkCQkJcGFyZW50 ID0gSW52YWxpZE9pZDsKICAgIC0rCUhlYXBUdXBsZQl0dXBsZSwgY29weVR1cGxlOwogICAg LSsJRm9ybV9wZ19pbmhlcml0cyBmb3JtOwogICAgLSsKICAgIC0rCS8qCiAgICAtKwkgKiBD aGVjayB0aGF0IHRoZSB0YWJsZXMgZXhpc3QuCiAgICAtKwkgKiBUT0RPOiBjaGVjayBpZGVu dGljYWwgc2NoZW1hcyB0b28/IG9yIGRvZXMgcmVwbGljYXRpb24gaGFuZGxlIHRoYXQ/CiAg ICAtKwkgKi8KICAgIC0rCXRhYmxlbmFtZSA9IGdldF9yZWxfbmFtZSh0YWJsZW9pZCk7CiAg ICAtKwlpZiAodGFibGVuYW1lID09IE5VTEwpCiAgICAtKwkJZXJlcG9ydChFUlJPUiwKICAg IC0rCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX1RBQkxFKSwKICAgIC0rCQkJCSBl cnJtc2coIk9JRCAldSBkb2VzIG5vdCByZWZlciB0byBhIHRhYmxlIiwgdGFibGVvaWQpKSk7 CiAgICAtKwlyb290bmFtZSA9IGdldF9yZWxfbmFtZShyb290b2lkKTsKICAgIC0rCWlmIChy b290bmFtZSA9PSBOVUxMKQogICAgLSsJCWVyZXBvcnQoRVJST1IsCiAgICAtKwkJCQkoZXJy Y29kZShFUlJDT0RFX1VOREVGSU5FRF9UQUJMRSksCiAgICAtKwkJCQkgZXJybXNnKCJPSUQg JXUgZG9lcyBub3QgcmVmZXIgdG8gYSB0YWJsZSIsIHJvb3RvaWQpKSk7CiAgICAtKwogICAg LSsJLyogQ2hlY2sgb3duZXJzaGlwLiAqLwogICAgLSsJaWYgKCFvYmplY3Rfb3duZXJjaGVj ayhSZWxhdGlvblJlbGF0aW9uSWQsIHRhYmxlb2lkLCBHZXRVc2VySWQoKSkpCiAgICAtKwkJ YWNsY2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLAogICAgLSsJCQkJCSAgIGdldF9y ZWxraW5kX29ianR5cGUoZ2V0X3JlbF9yZWxraW5kKHRhYmxlb2lkKSksCiAgICAtKwkJCQkJ ICAgdGFibGVuYW1lKTsKICAgIC0rCWlmICghb2JqZWN0X293bmVyY2hlY2soUmVsYXRpb25S ZWxhdGlvbklkLCByb290b2lkLCBHZXRVc2VySWQoKSkpCiAgICAtKwkJYWNsY2hlY2tfZXJy b3IoQUNMQ0hFQ0tfTk9UX09XTkVSLAogICAgLSsJCQkJCSAgIGdldF9yZWxraW5kX29ianR5 cGUoZ2V0X3JlbF9yZWxraW5kKHJvb3RvaWQpKSwKICAgIC0rCQkJCQkgICByb290bmFtZSk7 CiAgICAtKwogICAgLSsJLyogT3BlbiBwZ19pbmhlcml0cyB3aXRoIFJvd0V4Y2x1c2l2ZUxv Y2sgc28gdGhhdCB3ZSBjYW4gdXBkYXRlIGl0LiAqLwogICAgLSsJaW5oUmVsID0gdGFibGVf b3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogICAgLSsKICAg IC0rCS8qCiAgICAtKwkgKiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmhlcml0 YW5jZSByZWxhdGlvbnNoaXAgYWxyZWFkeSBleGlzdHMsCiAgICAtKwkgKiBhbmQgdGhhdCB0 aGVyZSBpcyBvbmx5IG9uZSBleGlzdGluZyBwYXJlbnQgZm9yIHRoaXMgdGFibGUuCiAgICAt KwkgKgogICAgLSsJICogVE9ETzogZG8gd2UgaGF2ZSB0byBsb2NrIHRoZSB0YWJsZXMgdGhl bXNlbHZlcyB0byBhdm9pZCByYWNlcz8KICAgIC0rCSAqLwogICAgLSsJU2NhbktleUluaXQo JmtleSwKICAgIC0rCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCiAgICAtKwkJCQlC VEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCiAgICAtKwkJCQlPYmplY3RJZEdldERh dHVtKHRhYmxlb2lkKSk7CiAgICAtKwogICAgLSsJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihpbmhSZWwsIEluaGVyaXRzUmVsaWRTZXFub0luZGV4SWQsIHRydWUsCiAgICAtKwkJCQkJ CQkgIE5VTEwsIDEsICZrZXkpOwogICAgLSsJdHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNj YW4pOwogICAgLSsJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQogICAgLSsJewogICAg LSsJCWZvcm0gPSAoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKHR1cGxlKTsKICAgIC0r CQlwYXJlbnQgPSBmb3JtLT5pbmhwYXJlbnQ7CiAgICAtKwkJY29weVR1cGxlID0gaGVhcF9j b3B5dHVwbGUodHVwbGUpOwogICAgLSsKICAgIC0rCQlpZiAoSGVhcFR1cGxlSXNWYWxpZChz eXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKICAgIC0rCQkJZXJlcG9ydChFUlJPUiwKICAgIC0r CQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRF KSwKICAgIC0rCQkJCQkgZXJybXNnKCJ0YWJsZSBcIiVzXCIgaW5oZXJpdHMgZnJvbSBtdWx0 aXBsZSB0YWJsZXMiLAogICAgLSsJCQkJCQkJdGFibGVuYW1lKSkpOwogICAgLSsJfQogICAg LSsKICAgIC0rCWlmIChwYXJlbnQgIT0gcm9vdG9pZCkKICAgIC0rCQllcmVwb3J0KEVSUk9S LAogICAgLSsJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lU RV9TVEFURSksCiAgICAtKwkJCQkgZXJybXNnKCJ0YWJsZSBcIiVzXCIgZG9lcyBub3QgaW5o ZXJpdCBmcm9tIGludGVuZGVkIHJvb3QgdGFibGUgXCIlc1wiIiwKICAgIC0rCQkJCQkJdGFi bGVuYW1lLCByb290bmFtZSkpKTsKICAgIC0rCiAgICAtKwlzeXN0YWJsZV9lbmRzY2FuKHNj YW4pOwogICAgLSsKICAgIC0rCS8qIE1hcmsgdGhlIGluaGVyaXRhbmNlIGFzIGEgbG9naWNh bCByb290IGJ5IHNldHRpbmcgaXQgdG8gemVyby4gKi8KICAgIC0rCWZvcm0gPSAoRm9ybV9w Z19pbmhlcml0cykgR0VUU1RSVUNUKGNvcHlUdXBsZSk7CiAgICAtKwlmb3JtLT5pbmhzZXFu byA9IDA7CiAgICAtKwogICAgLSsJQ2F0YWxvZ1R1cGxlVXBkYXRlKGluaFJlbCwgJmNvcHlU dXBsZS0+dF9zZWxmLCBjb3B5VHVwbGUpOwogICAgLSsKICAgIC0rCWhlYXBfZnJlZXR1cGxl KGNvcHlUdXBsZSk7CiAgICAtKwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1c2l2ZUxv Y2spOwogICAgLSsKICAgIC0rCVBHX1JFVFVSTl9WT0lEKCk7CiAgICAgK30KICAgICAKICAg ICAgIyMgc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICMjCiAgICBAQCBz cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmM6IHBnX2dldF9wdWJsaWNhdGlv bl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUwogICAgICsgKiBUaGUgb25seSB0aW1lIHRoaXMg bGlzdCBjb25zaXN0cyBvZiBhbnl0aGluZyBtb3JlIHRoYW4gdGhlIHRhYmxlIGl0c2VsZiBp cwogICAgICsgKiB3aGVuIGEgcHVibGljYXRpb24ncyBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdCBpcyBzZXQgdG8gdHJ1ZSBhbmQgdGhlIHRhYmxlCiAgICAgKyAqIGhhcyBpbmhlcml0 ZWQgY2hpbGQgdGFibGVzIGluIHRoZSBwdWJsaWNhdGlvbnMgdGhhdCBoYXZlIGJlZW4gbWFy a2VkIHdpdGgKICAgIC0rICogcGdfc2V0X2xvZ2ljYWxfcm9vdCgpLgogICAgKysgKiBwdWJs aXNoX3ZpYV9wYXJlbnQuCiAgICAgKyAqLwogICAgICtEYXR1bQogICAgICtwZ19nZXRfcHVi bGljYXRpb25fcmVsc190b19zeW5jKFBHX0ZVTkNUSU9OX0FSR1MpCiAgICBAQCBzcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmM6IHByb2Nlc3NfcmVsYXRpb25fcHVibGlj YXRpb25zKE9pZCByZWxpZCwgYwogICAgIC0JCQkgKiBGb3IgYSBwYXJ0aXRpb24sIGNoZWNr IGlmIGFueSBvZiB0aGUgYW5jZXN0b3JzIGFyZQogICAgIC0JCQkgKiBwdWJsaXNoZWQuICBJ ZiBzbywgbm90ZSBkb3duIHRoZSB0b3Btb3N0IGFuY2VzdG9yIHRoYXQgaXMKICAgICArCQkJ ICogQ2hlY2sgaWYgYW55IG9mIHRoZSBsb2dpY2FsIGFuY2VzdG9ycyAodGhhdCBpcywgcGFy dGl0aW9uCiAgICAtKwkJCSAqIHBhcmVudHMgb3IgdGFibGVzIG1hcmtlZCB3aXRoIHBnX3Nl dF9sb2dpY2FsX3Jvb3QoKSkgYXJlCiAgICArKwkJCSAqIHBhcmVudHMgb3IgdGFibGVzIG1h cmtlZCB3aXRoIHB1Ymxpc2hfdmlhX3BhcmVudCkgYXJlCiAgICAgKwkJCSAqIHB1Ymxpc2hl ZC4gSWYgc28sIG5vdGUgZG93biB0aGUgdG9wbW9zdCBhbmNlc3RvciB0aGF0IGlzCiAgICAg IAkJCSAqIHB1Ymxpc2hlZCB2aWEgdGhpcyBwdWJsaWNhdGlvbiwgd2hpY2ggd2lsbCBiZSB1 c2VkIGFzIHRoZQogICAgIC0JCQkgKiByZWxhdGlvbiB2aWEgd2hpY2ggdG8gcHVibGlzaCB0 aGUgcGFydGl0aW9uJ3MgY2hhbmdlcy4KICAgIEBAIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdf cHVibGljYXRpb24uYzogcHJvY2Vzc19yZWxhdGlvbl9wdWJsaWNhdGlvbnMoT2lkIHJlbGlk LCBjCiAgICAgIAlyZXR1cm4gcmVsX3B1YmxpY2F0aW9uczsKICAgICAgfQogICAgICAKICAg ICtAQCBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmM6IHBnX2dldF9yZWxh dGlvbl9wdWJsaXNoaW5nX2luZm8oUEdfRlVOQ1RJT05fQVJHUykKICAgICsgCiAgICArIAl7 CiAgICArIAkJTGlzdAkgICAqcmVsX3B1YmxpY2F0aW9uczsKICAgICstCQlQdWJsaWNhdGlv bkFjdGlvbnMgcHViYWN0aW9uczsKICAgICsrCQlQdWJsaWNhdGlvbkFjdGlvbnMgcHViYWN0 aW9ucyA9IHswfTsKICAgICsgCQlPaWQJCQlwdWJsaXNoX2FzX3JlbGlkOwogICAgKyAJCUxp c3RDZWxsICAgKmxjOwogICAgKyAJCURhdHVtCSAgICpwdWJvaWRzOwogICAgIAogICAgICAj IyBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAjIwogICAgIEBAIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jOiBjb250YWluX2ludmFsaWRf cmZjb2x1bW5fd2Fsa2VyKE5vZGUgKm5vZGUsIHJmX2NvbnRleHQgKmNvbnRleHQpCiAgICBA QCBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYzogY29udGFpbl9pbnZh bGlkX3JmY29sdW1uX3dhbGtlcihOb2RlICpubwogICAgICAJCSAqIGluZm9ybWF0aW9uIG9m IHRoZSBjaGlsZCB0YWJsZS4gU28sIGdldCB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUKICAg ICAgCQkgKiBjaGlsZCB0YWJsZSBhcyBwYXJlbnQgYW5kIGNoaWxkIGNvbHVtbiBvcmRlciBj b3VsZCBiZSBkaWZmZXJlbnQuCiAgICAgKwkJICoKICAgIC0rCQkgKiBUT0RPOiBpcyB0aGlz IGFwcGxpY2FibGUgdG8gcGdfc2V0X2xvZ2ljYWxfcm9vdCgpPwogICAgKysJCSAqIFRPRE86 IGlzIHRoaXMgYXBwbGljYWJsZSB0byBwdWJsaXNoX3ZpYV9wYXJlbnQ/CiAgICAgIAkJICov CiAgICAgIAkJaWYgKGNvbnRleHQtPnB1YnZpYXJvb3QpCiAgICAgIAkJewogICAgQEAgc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmM6IHB1Yl9yZl9jb250YWluc19p bnZhbGlkX2NvbHVtbihPaWQgcHViaWQKICAgICAgCSAqIE5vdGUgdGhhdCBldmVuIHRob3Vn aCB0aGUgcm93IGZpbHRlciB1c2VkIGlzIGZvciBhbiBhbmNlc3RvciwgdGhlCiAgICAgIAkg KiBSRVBMSUNBIElERU5USVRZIHVzZWQgd2lsbCBiZSBmb3IgdGhlIGFjdHVhbCBjaGlsZCB0 YWJsZS4KICAgICArCSAqCiAgICAtKwkgKiBUT0RPOiBpcyB0aGlzIGFwcGxpY2FibGUgdG8g cGdfc2V0X2xvZ2ljYWxfcm9vdCgpPwogICAgKysJICogVE9ETzogaXMgdGhpcyBhcHBsaWNh YmxlIHRvIHB1Ymxpc2hfdmlhX3BhcmVudD8KICAgICAgCSAqLwogICAgICAJaWYgKHB1YnZp YXJvb3QgJiYgcmVsYXRpb24tPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCiAgICAgIAl7CiAg ICBAQCBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYzogcHViX3JmX2Nv bnRhaW5zX2ludmFsaWRfY29sdW1uKE9pZCBwdWJpZAogICAgICAgKgogICAgICAgKiBSZXR1 cm5zIHRydWUgaWYgYW55IHJlcGxpY2EgaWRlbnRpdHkgY29sdW1uIGlzIG5vdCBjb3ZlcmVk IGJ5IGNvbHVtbiBsaXN0LgogICAgICsgKgogICAgLSsgKiBUT0RPOiBwZ19zZXRfbG9naWNh bF9yb290KCk/CiAgICArKyAqIFRPRE86IHB1Ymxpc2hfdmlhX3BhcmVudD8KICAgICAgICov CiAgICAgIGJvb2wKICAgICAgcHViX2NvbGxpc3RfY29udGFpbnNfaW52YWxpZF9jb2x1bW4o T2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqYW5jZXN0b3JzLAogICAgQEAg c3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmM6IFRyYW5zZm9ybVB1Yldo ZXJlQ2xhdXNlcyhMaXN0ICp0YWJsZXMsIGMKICAgICAgCQkgKiB0YWJsZSwgdGhlIHBhcnRp dGlvbidzIHJvdyBmaWx0ZXIgd2lsbCBiZSB1c2VkLiBTbyBkaXNhbGxvdyB1c2luZwogICAg ICAJCSAqIFdIRVJFIGNsYXVzZSBvbiBwYXJ0aXRpb25lZCB0YWJsZSBpbiB0aGlzIGNhc2Uu CiAgICAgKwkJICoKICAgIC0rCQkgKiBUT0RPOiBkZWNpZGUgaG93IHRoaXMgaW50ZXJhY3Rz IHdpdGggcGdfc2V0X2xvZ2ljYWxfcm9vdAogICAgKysJCSAqIFRPRE86IGRlY2lkZSBob3cg dGhpcyBpbnRlcmFjdHMgd2l0aCBwdWJsaXNoX3ZpYV9wYXJlbnQKICAgICAgCQkgKi8KICAg ICAgCQlpZiAoIXB1YnZpYXJvb3QgJiYKICAgICAgCQkJcHJpLT5yZWxhdGlvbi0+cmRfcmVs LT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCiAgICBAQCBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYzogQ2hlY2tQdWJSZWxhdGlvbkNvbHVt bkxpc3QoY2hhciAqcHVibmFtZQogICAgICAJCSAqIHRhYmxlLCB0aGUgcGFydGl0aW9uJ3Mg Y29sdW1uIGxpc3Qgd2lsbCBiZSB1c2VkLiBTbyBkaXNhbGxvdyB1c2luZwogICAgICAJCSAq IGEgY29sdW1uIGxpc3Qgb24gdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGluIHRoaXMgY2FzZS4K ICAgICArCQkgKgogICAgLSsJCSAqIFRPRE86IGRlY2lkZSBpZiB0aGlzIGludGVyYWN0cyB3 aXRoIHBnX3NldF9sb2dpY2FsX3Jvb3QoKQogICAgKysJCSAqIFRPRE86IGRlY2lkZSBpZiB0 aGlzIGludGVyYWN0cyB3aXRoIHB1Ymxpc2hfdmlhX3BhcmVudAogICAgICAJCSAqLwogICAg ICAJCWlmICghcHVidmlhcm9vdCAmJgogICAgICAJCQlwcmktPnJlbGF0aW9uLT5yZF9yZWwt PnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKICAgICAKICAgICsgIyMg c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgIyMKICAgICtAQCBzcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYzogc3RhdGljIGJvb2wgTWVyZ2VDaGVja0NvbnN0cmFp bnQoTGlzdCAqY29uc3RyYWludHMsIGNoYXIgKm5hbWUsIE5vZGUgKmV4cHIpOwogICAgKyBz dGF0aWMgdm9pZCBNZXJnZUF0dHJpYnV0ZXNJbnRvRXhpc3RpbmcoUmVsYXRpb24gY2hpbGRf cmVsLCBSZWxhdGlvbiBwYXJlbnRfcmVsKTsKICAgICsgc3RhdGljIHZvaWQgTWVyZ2VDb25z dHJhaW50c0ludG9FeGlzdGluZyhSZWxhdGlvbiBjaGlsZF9yZWwsIFJlbGF0aW9uIHBhcmVu dF9yZWwpOwogICAgKyBzdGF0aWMgdm9pZCBTdG9yZUNhdGFsb2dJbmhlcml0YW5jZShPaWQg cmVsYXRpb25JZCwgTGlzdCAqc3VwZXJzLAogICAgKy0JCQkJCQkJCQlib29sIGNoaWxkX2lz X3BhcnRpdGlvbik7CiAgICArKwkJCQkJCQkJCWJvb2wgY2hpbGRfaXNfcGFydGl0aW9uLAog ICAgKysJCQkJCQkJCQlib29sIHB1Ymxpc2hfdmlhX3BhcmVudCk7CiAgICArIHN0YXRpYyB2 b2lkIFN0b3JlQ2F0YWxvZ0luaGVyaXRhbmNlMShPaWQgcmVsYXRpb25JZCwgT2lkIHBhcmVu dE9pZCwKICAgICsgCQkJCQkJCQkJIGludDMyIHNlcU51bWJlciwgUmVsYXRpb24gaW5oUmVs YXRpb24sCiAgICArIAkJCQkJCQkJCSBib29sIGNoaWxkX2lzX3BhcnRpdGlvbik7CiAgICAr QEAgc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmM6IHN0YXRpYyB2b2lkIEFUUHJl cFNldFRhYmxlU3BhY2UoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAg ICArIAkJCQkJCQkJY29uc3QgY2hhciAqdGFibGVzcGFjZW5hbWUsIExPQ0tNT0RFIGxvY2tt b2RlKTsKICAgICsgc3RhdGljIHZvaWQgQVRFeGVjU2V0VGFibGVTcGFjZShPaWQgdGFibGVP aWQsIE9pZCBuZXdUYWJsZVNwYWNlLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiAgICArIHN0YXRp YyB2b2lkIEFURXhlY1NldFRhYmxlU3BhY2VOb1N0b3JhZ2UoUmVsYXRpb24gcmVsLCBPaWQg bmV3VGFibGVTcGFjZSk7CiAgICArK3N0YXRpYyB2b2lkIGNoYW5nZV9wdWJsaXNoX3ZpYV9w YXJlbnQoUmVsYXRpb24gcmVsLCBib29sIHNldCk7CiAgICArIHN0YXRpYyB2b2lkIEFURXhl Y1NldFJlbE9wdGlvbnMoUmVsYXRpb24gcmVsLCBMaXN0ICpkZWZMaXN0LAogICAgKyAJCQkJ CQkJCUFsdGVyVGFibGVUeXBlIG9wZXJhdGlvbiwKICAgICsgCQkJCQkJCQlMT0NLTU9ERSBs b2NrbW9kZSk7CiAgICArQEAgc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmM6IERl ZmluZVJlbGF0aW9uKENyZWF0ZVN0bXQgKnN0bXQsIGNoYXIgcmVsa2luZCwgT2lkIG93bmVy SWQsCiAgICArIAl9CiAgICArIAogICAgKyAJLyogU3RvcmUgaW5oZXJpdGFuY2UgaW5mb3Jt YXRpb24gZm9yIG5ldyByZWwuICovCiAgICArLQlTdG9yZUNhdGFsb2dJbmhlcml0YW5jZShy ZWxhdGlvbklkLCBpbmhlcml0T2lkcywgc3RtdC0+cGFydGJvdW5kICE9IE5VTEwpOwogICAg KysJU3RvcmVDYXRhbG9nSW5oZXJpdGFuY2UocmVsYXRpb25JZCwgaW5oZXJpdE9pZHMsIHN0 bXQtPnBhcnRib3VuZCAhPSBOVUxMLAogICAgKysJCQkJCQkJUmVsYXRpb25Jc1B1Ymxpc2hl ZFZpYVBhcmVudChyZWwpKTsKICAgICsgCiAgICArIAkvKgogICAgKyAJICogUHJvY2VzcyB0 aGUgcGFydGl0aW9uaW5nIHNwZWNpZmljYXRpb24gKGlmIGFueSkgYW5kIHN0b3JlIHRoZSBw YXJ0aXRpb24KICAgICtAQCBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYzogTWVy Z2VDaGVja0NvbnN0cmFpbnQoTGlzdCAqY29uc3RyYWludHMsIGNoYXIgKm5hbWUsIE5vZGUg KmV4cHIpCiAgICArICAqLwogICAgKyBzdGF0aWMgdm9pZAogICAgKyBTdG9yZUNhdGFsb2dJ bmhlcml0YW5jZShPaWQgcmVsYXRpb25JZCwgTGlzdCAqc3VwZXJzLAogICAgKy0JCQkJCQli b29sIGNoaWxkX2lzX3BhcnRpdGlvbikKICAgICsrCQkJCQkJYm9vbCBjaGlsZF9pc19wYXJ0 aXRpb24sIGJvb2wgcHVibGlzaF92aWFfcGFyZW50KQogICAgKyB7CiAgICArIAlSZWxhdGlv bglyZWxhdGlvbjsKICAgICsgCWludDMyCQlzZXFOdW1iZXI7CiAgICArQEAgc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmM6IFN0b3JlQ2F0YWxvZ0luaGVyaXRhbmNlKE9pZCBy ZWxhdGlvbklkLCBMaXN0ICpzdXBlcnMsCiAgICArIAkgKi8KICAgICsgCUFzc2VydChPaWRJ c1ZhbGlkKHJlbGF0aW9uSWQpKTsKICAgICsgCiAgICArKwkvKgogICAgKysJICogcHVibGlz aF92aWFfcGFyZW50IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhcmVudC4gVHJ5IHRvIGtlZXAg dGhpcwogICAgKysJICogbWVzc2FnaW5nIGNvbnNpc3RlbnQgd2l0aCBBTFRFUiBUQUJMRS9j aGFuZ2VfcHVibGlzaF92aWFfcGFyZW50KCkuCiAgICArKwkgKgogICAgKysJICogRWFybGll ciwgaW4gTWVyZ2VBdHRyaWJ1dGVzLCB3ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB3ZSBoYWQg b3duZXJzaGlwIG9mCiAgICArKwkgKiB0aGUgcGFyZW50IHRhYmxlLCBzbyB3ZSBkb24ndCBu ZWVkIHRvIGNoZWNrIHRoYXQgYWdhaW4gdGhlIHdheSB0aGF0CiAgICArKwkgKiBjaGFuZ2Vf cHVibGlzaF92aWFfcGFyZW50KCkgZG9lcy4KICAgICsrCSAqLwogICAgKysJaWYgKHB1Ymxp c2hfdmlhX3BhcmVudCAmJiBsaXN0X2xlbmd0aChzdXBlcnMpICE9IDEpCiAgICArKwkJZXJl cG9ydChFUlJPUiwKICAgICsrCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9Q UkVSRVFVSVNJVEVfU1RBVEUpLAogICAgKysJCQkJIGVycm1zZygobGlzdF9sZW5ndGgoc3Vw ZXJzKSA9PSAwKQogICAgKysJCQkJCQk/ICJ0YWJsZSBcIiVzXCIgZG9lcyBub3QgaW5oZXJp dCBmcm9tIGFueSB0YWJsZXMiCiAgICArKwkJCQkJCTogInRhYmxlIFwiJXNcIiBpbmhlcml0 cyBmcm9tIG11bHRpcGxlIHRhYmxlcyIsCiAgICArKwkJCQkJCWdldF9yZWxfbmFtZShyZWxh dGlvbklkKSkpKTsKICAgICsrCiAgICArIAlpZiAoc3VwZXJzID09IE5JTCkKICAgICsgCQly ZXR1cm47CiAgICArIAogICAgK0BAIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5j OiBTdG9yZUNhdGFsb2dJbmhlcml0YW5jZShPaWQgcmVsYXRpb25JZCwgTGlzdCAqc3VwZXJz LAogICAgKyAJICovCiAgICArIAlyZWxhdGlvbiA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxh dGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKICAgICsgCiAgICArLQlzZXFOdW1iZXIgPSAx OwogICAgKysJLyoKICAgICsrCSAqIE5vcm1hbGx5IGluaHNlcW5vIHN0YXJ0cyBhdCBvbmUs IGJ1dCBmb3IgcHVibGlzaF92aWFfcGFyZW50LCBpdCdzIGdpdmVuIGEKICAgICsrCSAqIHNl bnRpbmVsIHZhbHVlIG9mIHplcm8uIChJbiB0aGF0IGNhc2UsIHdlJ2xsIG9ubHkgZ28gdGhy b3VnaCB0aGlzIGxvb3AKICAgICsrCSAqIG9uY2UsIGFzIHRoZSBsaXN0X2xlbmd0aCgpIGNo ZWNrIGFib3ZlIGVuZm9yY2VzLikKICAgICsrCSAqLwogICAgKysJc2VxTnVtYmVyID0gcHVi bGlzaF92aWFfcGFyZW50ID8gMCA6IDE7CiAgICArIAlmb3JlYWNoKGVudHJ5LCBzdXBlcnMp CiAgICArIAl7CiAgICArIAkJT2lkCQkJcGFyZW50T2lkID0gbGZpcnN0X29pZChlbnRyeSk7 CiAgICArQEAgc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmM6IEFUUHJlcFNldFRh YmxlU3BhY2UoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNo YXIgKnRhYmxlc3BhY2VuCiAgICArIAl0YWItPm5ld1RhYmxlU3BhY2UgPSB0YWJsZXNwYWNl SWQ7CiAgICArIH0KICAgICsgCiAgICArK3N0YXRpYyB2b2lkCiAgICArK2NoYW5nZV9wdWJs aXNoX3ZpYV9wYXJlbnQoUmVsYXRpb24gcmVsLCBib29sIHNldCkKICAgICsrewogICAgKysJ UmVsYXRpb24JaW5oUmVsOwogICAgKysJU2NhbktleURhdGEga2V5OwogICAgKysJU3lzU2Nh bkRlc2Mgc2NhbjsKICAgICsrCU9pZAkJCXBhcmVudE9pZDsKICAgICsrCVJlbGF0aW9uCXBh cmVudFJlbDsKICAgICsrCUhlYXBUdXBsZQl0dXBsZSwgY29weVR1cGxlOwogICAgKysJRm9y bV9wZ19pbmhlcml0cyBmb3JtOwogICAgKysKICAgICsrCS8qIE9wZW4gcGdfaW5oZXJpdHMg d2l0aCBSb3dFeGNsdXNpdmVMb2NrIHNvIHRoYXQgd2UgY2FuIHVwZGF0ZSBpdC4gKi8KICAg ICsrCWluaFJlbCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNp dmVMb2NrKTsKICAgICsrCiAgICArKwkvKgogICAgKysJICogV2UgaGF2ZSB0byBtYWtlIHN1 cmUgdGhhdCBhbiBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgYWxyZWFkeSBleGlzdHMsIGFu ZAogICAgKysJICogdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBjYW5kaWRhdGUgcGFyZW50IGZv ciB0aGlzIHRhYmxlLgogICAgKysJICoKICAgICsrCSAqIFRPRE86IGRvIHdlIGhhdmUgdG8g bG9jayB0aGUgdGFibGVzIHRoZW1zZWx2ZXMgdG8gYXZvaWQgcmFjZXM/CiAgICArKwkgKi8K ICAgICsrCVNjYW5LZXlJbml0KCZrZXksCiAgICArKwkJCQlBbnVtX3BnX2luaGVyaXRzX2lu aHJlbGlkLAogICAgKysJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAogICAg KysJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbCkpKTsKICAgICsr CiAgICArKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5oZXJpdHNSZWxp ZFNlcW5vSW5kZXhJZCwgdHJ1ZSwKICAgICsrCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CiAg ICArKwl0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CiAgICArKwogICAgKysJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKICAgICsrCQllcmVwb3J0KEVSUk9SLAogICAg KysJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFU RSksCiAgICArKwkJCQkgZXJybXNnKCJ0YWJsZSBcIiVzXCIgZG9lcyBub3QgaW5oZXJpdCBm cm9tIGFueSB0YWJsZXMiLAogICAgKysJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpKSkpOwogICAgKysKICAgICsrCWZvcm0gPSAoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RS VUNUKHR1cGxlKTsKICAgICsrCXBhcmVudE9pZCA9IGZvcm0tPmluaHBhcmVudDsKICAgICsr CWNvcHlUdXBsZSA9IGhlYXBfY29weXR1cGxlKHR1cGxlKTsKICAgICsrCiAgICArKwlpZiAo SGVhcFR1cGxlSXNWYWxpZChzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKICAgICsrCQllcmVw b3J0KEVSUk9SLAogICAgKysJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BS RVJFUVVJU0lURV9TVEFURSksCiAgICArKwkJCQkgZXJybXNnKCJ0YWJsZSBcIiVzXCIgaW5o ZXJpdHMgZnJvbSBtdWx0aXBsZSB0YWJsZXMiLAogICAgKysJCQkJCQlSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpKSkpOwogICAgKysKICAgICsrCXN5c3RhYmxlX2VuZHNjYW4oc2Nh bik7CiAgICArKwogICAgKysJaWYgKHNldCkKICAgICsrCXsKICAgICsrCQkvKgogICAgKysJ CSAqIE9wZW4gb3VyIHBhcmVudCB0YWJsZSBhbmQgY2hlY2sgcGVybWlzc2lvbnMuIExpa2Ug QVRUQUNIIFBBUlRJVElPTiwKICAgICsrCQkgKiB3ZSByZXF1aXJlIG93bmVyc2hpcCBvZiB0 aGUgcGFyZW50IHRhYmxlIGluIGFkZGl0aW9uIHRvIHRoZSBjaGlsZAogICAgKysJCSAqICh3 aGljaCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgaW4gQVRQcmVwQ21kKS4KICAgICsrCQkg KgogICAgKysJCSAqIFRPRE86IHdoYXQgbG9jayBzdHJlbmd0aCBpcyBuZWVkZWQgaGVyZT8g SXMgbmVzdGluZyBpdCBpbnNpZGUgdGhlCiAgICArKwkJICogaW5oUmVsIGxvY2sgYSByaXNr PwogICAgKysJCSAqLwogICAgKysJCXBhcmVudFJlbCA9IHRhYmxlX29wZW4ocGFyZW50T2lk LCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKICAgICsrCQlBVFNpbXBsZVBlcm1pc3Npb25zKEFU X1NldFJlbE9wdGlvbnMsIHBhcmVudFJlbCwgQVRUX1RBQkxFKTsKICAgICsrCQl0YWJsZV9j bG9zZShwYXJlbnRSZWwsIE5vTG9jayk7IC8qIFRPRE86IGRvIHdlIG5lZWQgdG8gaGFuZyBv bnRvIHRoZSBsb2NrPyAqLwogICAgKysJfQogICAgKysJZWxzZQogICAgKysJewogICAgKysJ CS8qCiAgICArKwkJICogT3duZXJzaGlwIG9mIHRoZSBwYXJlbnQgaXNuJ3QgbmVlZGVkIGZv ciB1bnNldHRpbmcgdGhlIGZsYWcsIGp1c3QKICAgICsrCQkgKiBsaWtlIHdlIHdvdWxkbid0 IGNoZWNrIG93bmVyc2hpcCBkdXJpbmcgTk8gSU5IRVJJVC4KICAgICsrCQkgKi8KICAgICsr CX0KICAgICsrCiAgICArKwkvKgogICAgKysJICogTWFyayB0aGUgaW5oZXJpdGFuY2UgYXMg YSBsb2dpY2FsIHJvb3QgYnkgc2V0dGluZyBpbmhzZXFubyB0byB6ZXJvLgogICAgKysJICog VW5tYXJrIGl0IGJ5IHNldHRpbmcgaW5oc2Vxbm8gdG8gb25lIChzaW5jZSB0aGVyZSdzIG9u bHkgb25lIHBhcmVudCkuCiAgICArKwkgKi8KICAgICsrCWZvcm0gPSAoRm9ybV9wZ19pbmhl cml0cykgR0VUU1RSVUNUKGNvcHlUdXBsZSk7CiAgICArKwlmb3JtLT5pbmhzZXFubyA9IHNl dCA/IDAgOiAxOwogICAgKysKICAgICsrCUNhdGFsb2dUdXBsZVVwZGF0ZShpbmhSZWwsICZj b3B5VHVwbGUtPnRfc2VsZiwgY29weVR1cGxlKTsKICAgICsrCiAgICArKwloZWFwX2ZyZWV0 dXBsZShjb3B5VHVwbGUpOwogICAgKysJdGFibGVfY2xvc2UoaW5oUmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKICAgICsrfQogICAgKysKICAgICsgLyoKICAgICsgICogU2V0LCByZXNldCwg b3IgcmVwbGFjZSByZWxvcHRpb25zLgogICAgKyAgKi8KICAgICtAQCBzcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYzogQVRFeGVjU2V0UmVsT3B0aW9ucyhSZWxhdGlvbiByZWws IExpc3QgKmRlZkxpc3QsIEFsdGVyVGFibGVUeXBlIG9wZXJhdGlvbiwKICAgICsgCQl9CiAg ICArIAl9CiAgICArIAogICAgKysJLyogRXh0cmEgd29yayBmb3IgcHVibGlzaF92aWFfcGFy ZW50ICovCiAgICArKwlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9SRUxB VElPTikKICAgICsrCXsKICAgICsrCQlMaXN0CSAgICpoZWFwX29wdGlvbnMgPSB1bnRyYW5z Zm9ybVJlbE9wdGlvbnMobmV3T3B0aW9ucyk7CiAgICArKwkJTGlzdENlbGwgICAqY2VsbDsK ICAgICsrCQlib29sCQljdXJTZXR0aW5nID0gUmVsYXRpb25Jc1B1Ymxpc2hlZFZpYVBhcmVu dChyZWwpOwogICAgKysJCURlZkVsZW0gICAgKnB1YkVsZW0gPSBOVUxMOwogICAgKysKICAg ICsrCQlmb3JlYWNoIChjZWxsLCBoZWFwX29wdGlvbnMpCiAgICArKwkJewogICAgKysJCQlE ZWZFbGVtICAgICpkZWZlbCA9IGxmaXJzdF9ub2RlKERlZkVsZW0sIGNlbGwpOwogICAgKysK ICAgICsrCQkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInB1Ymxpc2hfdmlhX3BhcmVu dCIpID09IDApCiAgICArKwkJCXsKICAgICsrCQkJCXB1YkVsZW0gPSBkZWZlbDsKICAgICsr CQkJCWJyZWFrOwogICAgKysJCQl9CiAgICArKwkJfQogICAgKysKICAgICsrCQlpZiAocHVi RWxlbSkKICAgICsrCQl7CiAgICArKwkJCWJvb2wJCW5ld1NldHRpbmcgPSBkZWZHZXRCb29s ZWFuKHB1YkVsZW0pOwogICAgKysKICAgICsrCQkJaWYgKG5ld1NldHRpbmcgIT0gY3VyU2V0 dGluZykKICAgICsrCQkJCWNoYW5nZV9wdWJsaXNoX3ZpYV9wYXJlbnQocmVsLCBuZXdTZXR0 aW5nKTsKICAgICsrCQl9CiAgICArKwkJZWxzZSBpZiAoY3VyU2V0dGluZykKICAgICsrCQl7 CiAgICArKwkJCS8qIHB1Ymxpc2hfdmlhX3BhcmVudCB3YXMgUkVTRVQgKi8KICAgICsrCQkJ Y2hhbmdlX3B1Ymxpc2hfdmlhX3BhcmVudChyZWwsIGZhbHNlKTsKICAgICsrCQl9CiAgICAr Kwl9CiAgICArKwogICAgKyAJLyoKICAgICsgCSAqIEFsbCB3ZSBuZWVkIGRvIGhlcmUgaXMg dXBkYXRlIHRoZSBwZ19jbGFzcyByb3c7IHRoZSBuZXcgb3B0aW9ucyB3aWxsIGJlCiAgICAr IAkgKiBwcm9wYWdhdGVkIGludG8gcmVsY2FjaGVzIGR1cmluZyBwb3N0LWNvbW1pdCBjYWNo ZSBpbnZhbC4KICAgICtAQCBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYzogQVRF eGVjQWRkSW5oZXJpdChSZWxhdGlvbiBjaGlsZF9yZWwsIFJhbmdlVmFyICpwYXJlbnQsIExP Q0tNT0RFIGxvY2ttb2RlKQogICAgKyAJCQkJCQl0cmlnZ2VyX25hbWUsIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKGNoaWxkX3JlbCkpLAogICAgKyAJCQkJIGVycmRldGFpbCgiUk9XIHRy aWdnZXJzIHdpdGggdHJhbnNpdGlvbiB0YWJsZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5o ZXJpdGFuY2UgaGllcmFyY2hpZXMuIikpKTsKICAgICsgCiAgICArKwkvKiBwdWJsaXNoX3Zp YV9wYXJlbnQgdGFibGVzIGFyZSBub3QgYWxsb3dlZCB0byBhZGQgYWRkaXRpb25hbCBwYXJl bnRzLiAqLwogICAgKysJaWYgKFJlbGF0aW9uSXNQdWJsaXNoZWRWaWFQYXJlbnQoY2hpbGRf cmVsKSkKICAgICsrCQllcmVwb3J0KEVSUk9SLAogICAgKysJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogICAgKysJCQkJIGVycm1zZygicmVsYXRpb24g b3B0aW9uIFwiJXNcIiBwcmV2ZW50cyB0YWJsZSBcIiVzXCIgZnJvbSBjaGFuZ2luZyBpbmhl cml0YW5jZSIsCiAgICArKwkJCQkJCSJwdWJsaXNoX3ZpYV9wYXJlbnQiLCBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShjaGlsZF9yZWwpKSkpOwogICAgKysKICAgICsgCS8qIE9LIHRvIGNy ZWF0ZSBpbmhlcml0YW5jZSAqLwogICAgKyAJQ3JlYXRlSW5oZXJpdGFuY2UoY2hpbGRfcmVs LCBwYXJlbnRfcmVsKTsKICAgICsgCiAgICArQEAgc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmM6IEFURXhlY0Ryb3BJbmhlcml0KFJlbGF0aW9uIHJlbCwgUmFuZ2VWYXIgKnBh cmVudCwgTE9DS01PREUgbG9ja21vZGUpCiAgICArIAkJCQkoZXJyY29kZShFUlJDT0RFX1dS T05HX09CSkVDVF9UWVBFKSwKICAgICsgCQkJCSBlcnJtc2coImNhbm5vdCBjaGFuZ2UgaW5o ZXJpdGFuY2Ugb2YgYSBwYXJ0aXRpb24iKSkpOwogICAgKyAKICAgICsrCS8qIHB1Ymxpc2hf dmlhX3BhcmVudCB0YWJsZXMgYXJlIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSB0aGVpciBwYXJl bnQuICovCiAgICArKwlpZiAoUmVsYXRpb25Jc1B1Ymxpc2hlZFZpYVBhcmVudChyZWwpKQog ICAgKysJCWVyZXBvcnQoRVJST1IsCiAgICArKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCiAgICArKwkJCQkgZXJybXNnKCJyZWxhdGlvbiBvcHRpb24g XCIlc1wiIHByZXZlbnRzIHRhYmxlIFwiJXNcIiBmcm9tIGNoYW5naW5nIGluaGVyaXRhbmNl IiwKICAgICsrCQkJCQkJInB1Ymxpc2hfdmlhX3BhcmVudCIsIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbCkpKSk7CiAgICArKwogICAgKyAJLyoKICAgICsgCSAqIEFjY2Vzc1NoYXJl TG9jayBvbiB0aGUgcGFyZW50IGlzIHByb2JhYmx5IGVub3VnaCwgc2VlaW5nIHRoYXQgRFJP UAogICAgKyAJICogVEFCTEUgZG9lc24ndCBsb2NrIHBhcmVudCB0YWJsZXMgYXQgYWxsLiAg V2UgbmVlZCBzb21lIGxvY2sgc2luY2Ugd2UnbGwKICAgICsKICAgICAgIyMgc3JjL2JhY2tl bmQvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmMgIyMKICAgICBAQCBzcmMvYmFja2VuZC9wYXJ0 aXRpb25pbmcvcGFydGRlc2MuYzogUmVsYXRpb25CdWlsZFBhcnRpdGlvbkRlc2MoUmVsYXRp b24gcmVsLCBib29sIG9taXRfZGV0YWNoZWQpCiAgICAgIAlpbmhvaWRzID0gZmluZF9pbmhl cml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChSZWxhdGlvbkdldFJlbGlkKHJlbCksCiAgICBA QCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jOiBmZXRjaF9y ZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYQogICAgICsJLyoKICAgICArCSAqIFNlZSBp ZiB0aGVyZSBhcmUgYW55IG90aGVyIHRhYmxlcyB0byBiZSBjb3BpZWQgYmVzaWRlcyB0aGUg b3JpZ2luYWwuIFRoaXMKICAgICArCSAqIGhhcHBlbnMgd2hlbiBhIGRlc2NlbmRhbnQgaW4g dGhlIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcCBpcyBtYXJrZWQgd2l0aAogICAgLSsJICog cGdfc2V0X2xvZ2ljYWxfcm9vdCgpIGFuZCBpcyBwYXJ0IG9mIGEgcHVibGljYXRpb24gd2l0 aAogICAgKysJICogcHVibGlzaF92aWFfcGFyZW50IGFuZCBpcyBwYXJ0IG9mIGEgcHVibGlj YXRpb24gd2l0aAogICAgICsJICogcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVl LgogICAgICsJICoKICAgICArCSAqIEZJWE1FOiBpZiB0d28gcHVibGljYXRpb25zIGhhdmUg Y29uZmxpY3Rpbmcgc2V0dGluZ3MgZm9yCiAgICBAQCBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9wZ291dHB1dC9wZ291dHB1dC5jOiBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5n Q29udAogICAgICAJCXRhcmdldHJlbCA9IGFuY2VzdG9yOwogICAgICAJfQogICAgIAogICAg KyAjIyBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAjIwogICAgK0BAIHNyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsOiBteSAldGVzdHMgPSAoCiAgICArIAkJCW5v X3RhYmxlX2FjY2Vzc19tZXRob2QgPT4gMSwKICAgICsgCQkJb25seV9kdW1wX21lYXN1cmVt ZW50ID0+IDEsCiAgICArIAkJfSwKICAgICsrCX0sCiAgICArKwogICAgKysJJ0NSRUFURSBU QUJMRSByZWdyZXNzX3BnX2R1bXBfcHVibGlzaF92aWFfcGFyZW50JyA9PiB7CiAgICArKwkJ Y3JlYXRlX29yZGVyID0+IDMsCiAgICArKwkJY3JlYXRlX3NxbCA9PiAnCiAgICArKwkJCUNS RUFURSBUQUJMRSBkdW1wX3Rlc3QucmVncmVzc19wZ19kdW1wX3B1Ymxpc2hfdmlhX3BhcmVu dCAoY29sMSBpbnQpOwogICAgKysJCQlDUkVBVEUgVEFCTEUgZHVtcF90ZXN0LnJlZ3Jlc3Nf cGdfZHVtcF9wdWJsaXNoX3ZpYV9wYXJlbnRfMSgpIElOSEVSSVRTIChkdW1wX3Rlc3QucmVn cmVzc19wZ19kdW1wX3B1Ymxpc2hfdmlhX3BhcmVudCkgV0lUSCAocHVibGlzaF92aWFfcGFy ZW50KTsnLAogICAgKysJCXJlZ2V4cCA9PiBxci9eCiAgICArKwkJCVxRQ1JFQVRFIFRBQkxF IGR1bXBfdGVzdC5yZWdyZXNzX3BnX2R1bXBfcHVibGlzaF92aWFfcGFyZW50IChcRQogICAg KysJCQlcblxzK1xRY29sMSBpbnRlZ2VyXEUKICAgICsrCQkJXG5cKTsKICAgICsrCQkJKFxu LiopKz8KICAgICsrCQkJXG5cUUNSRUFURSBUQUJMRSBkdW1wX3Rlc3QucmVncmVzc19wZ19k dW1wX3B1Ymxpc2hfdmlhX3BhcmVudF8xIChcRQogICAgKysJCQlcblwpCiAgICArKwkJCVxu XFFJTkhFUklUUyAoZHVtcF90ZXN0LnJlZ3Jlc3NfcGdfZHVtcF9wdWJsaXNoX3ZpYV9wYXJl bnQpXEUKICAgICsrCQkJXG5cUVdJVEggKHB1Ymxpc2hfdmlhX3BhcmVudD0ndHJ1ZScpXEU7 L3htLAogICAgKysJCWxpa2UgPT4gewogICAgKysJCQklZnVsbF9ydW5zLCAlZHVtcF90ZXN0 X3NjaGVtYV9ydW5zLCBzZWN0aW9uX3ByZV9kYXRhID0+IDEsCiAgICArKwkJfSwKICAgICsr CQl1bmxpa2UgPT4gewogICAgKysJCQliaW5hcnlfdXBncmFkZSA9PiAxLAogICAgKysJCQll eGNsdWRlX2R1bXBfdGVzdF9zY2hlbWEgPT4gMSwKICAgICsrCQkJb25seV9kdW1wX21lYXN1 cmVtZW50ID0+IDEsCiAgICArKwkJfSwKICAgICsgCX0pOwogICAgKyAKICAgICsgIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICsKICAgICsgIyMgc3Jj L2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jICMjCiAgICArQEAgc3JjL2Jpbi9wc3FsL3RhYi1j b21wbGV0ZS5jOiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGFibGVfc3RvcmFnZV9wYXJh bWV0ZXJzW10gPSB7CiAgICArIAkiZmlsbGZhY3RvciIsCiAgICArIAkibG9nX2F1dG92YWN1 dW1fbWluX2R1cmF0aW9uIiwKICAgICsgCSJwYXJhbGxlbF93b3JrZXJzIiwKICAgICsrCSJw dWJsaXNoX3ZpYV9wYXJlbnQiLAogICAgKyAJInRvYXN0LmF1dG92YWN1dW1fZW5hYmxlZCIs CiAgICArIAkidG9hc3QuYXV0b3ZhY3V1bV9mcmVlemVfbWF4X2FnZSIsCiAgICArIAkidG9h c3QuYXV0b3ZhY3V1bV9mcmVlemVfbWluX2FnZSIsCiAgICArCiAgICAgICMjIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAjIwogICAgK0BACiAgICArIAogICAgKyAjaW5j bHVkZSAibm9kZXMvcGdfbGlzdC5oIgogICAgKyAjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgi CiAgICArKyNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogICAgKyAKICAgICsgLyogLS0t LS0tLS0tLS0tLS0tLQogICAgKyAgKgkJcGdfaW5oZXJpdHMgZGVmaW5pdGlvbi4gIGNwcCB0 dXJucyB0aGlzIGludG8KICAgICBAQCBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRz Lmg6IHR5cGVkZWYgRm9ybURhdGFfcGdfaW5oZXJpdHMgKkZvcm1fcGdfaW5oZXJpdHM7CiAg ICAgIAogICAgICBERUNMQVJFX1VOSVFVRV9JTkRFWF9QS0VZKHBnX2luaGVyaXRzX3JlbGlk X3NlcW5vX2luZGV4LCAyNjgwLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLCBvbiBwZ19p bmhlcml0cyB1c2luZyBidHJlZShpbmhyZWxpZCBvaWRfb3BzLCBpbmhzZXFubyBpbnQ0X29w cykpOwogICAgQEAgc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAogICAgICB7IG9p ZCA9PiAnODEzOScsCiAgICAgICAgZGVzY3IgPT4gJ2dldCBpbmZvcm1hdGlvbiBvbiBob3cg YSByZWxhdGlvbiB3aWxsIGJlIHB1Ymxpc2hlZCB2aWEgYSBsaXN0IG9mIHB1YmxpY2F0aW9u cycsCiAgICAgICAgcHJvbmFtZSA9PiAncGdfZ2V0X3JlbGF0aW9uX3B1Ymxpc2hpbmdfaW5m bycsIHByb3ZhcmlhZGljID0+ICd0ZXh0JywKICAgIC1AQAogICAgLSAgIHByb25hbWUgPT4g J3BnX3BhcnRpdGlvbl9yb290JywgcHJvcmV0dHlwZSA9PiAncmVnY2xhc3MnLAogICAgLSAg IHByb2FyZ3R5cGVzID0+ICdyZWdjbGFzcycsIHByb3NyYyA9PiAncGdfcGFydGl0aW9uX3Jv b3QnIH0sCiAgICArCiAgICArICMjIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICMjCiAgICAr QEAgc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmg6IHR5cGVkZWYgc3RydWN0IFN0ZFJkT3B0aW9u cwogICAgKyAJaW50CQkJdG9hc3RfdHVwbGVfdGFyZ2V0OyAvKiB0YXJnZXQgZm9yIHR1cGxl IHRvYXN0aW5nICovCiAgICArIAlBdXRvVmFjT3B0cyBhdXRvdmFjdXVtOwkJLyogYXV0b3Zh Y3V1bS1yZWxhdGVkIG9wdGlvbnMgKi8KICAgICsgCWJvb2wJCXVzZXJfY2F0YWxvZ190YWJs ZTsgLyogdXNlIGFzIGFuIGFkZGl0aW9uYWwgY2F0YWxvZyByZWxhdGlvbiAqLwogICAgKysJ Ym9vbAkJcHVibGlzaF92aWFfcGFyZW50OyAvKiBwdWJsaXNoIHZpYSBwYXJlbnQncyByZWxp ZCBmb3IgbG9ncmVwICovCiAgICArIAlpbnQJCQlwYXJhbGxlbF93b3JrZXJzOwkvKiBtYXgg bnVtYmVyIG9mIHBhcmFsbGVsIHdvcmtlcnMgKi8KICAgICsgCVN0ZFJkT3B0SW5kZXhDbGVh bnVwIHZhY3V1bV9pbmRleF9jbGVhbnVwOwkvKiBjb250cm9scyBpbmRleCB2YWN1dW1pbmcg Ki8KICAgICsgCWJvb2wJCXZhY3V1bV90cnVuY2F0ZTsJLyogZW5hYmxlcyB2YWN1dW0gdG8g dHJ1bmNhdGUgYSByZWxhdGlvbiAqLwogICAgK0BAIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5o OiB0eXBlZGVmIHN0cnVjdCBTdGRSZE9wdGlvbnMKICAgICsgCSAgKHJlbGF0aW9uKS0+cmRf cmVsLT5yZWxraW5kID09IFJFTEtJTkRfTUFUVklFVykgPyBcCiAgICArIAkgKChTdGRSZE9w dGlvbnMgKikgKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyktPnVzZXJfY2F0YWxvZ190YWJsZSA6 IGZhbHNlKQogICAgICAKICAgIC0reyBvaWQgPT4gJzgxMzYnLCBkZXNjciA9PiAnbWFyayBh IHRhYmxlIHJvb3QgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24nLAogICAgLSsgIHByb25hbWUg PT4gJ3BnX3NldF9sb2dpY2FsX3Jvb3QnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3BhcmFs bGVsID0+ICd1JywKICAgIC0rICBwcm9yZXR0eXBlID0+ICd2b2lkJywgcHJvYXJndHlwZXMg PT4gJ3JlZ2NsYXNzIHJlZ2NsYXNzJywKICAgIC0rICBwcm9zcmMgPT4gJ3BnX3NldF9sb2dp Y2FsX3Jvb3QnIH0sCiAgICArKy8qCiAgICArKyAqIFJlbGF0aW9uSXNQdWJsaXNoZWRWaWFQ YXJlbnQKICAgICsrICoJCVJldHVybnMgd2hldGhlciB0aGUgcmVsYXRpb24ncyBjb250ZW50 cyBzaG91bGQgYmUgbG9naWNhbGx5IHJlcGxpY2F0ZWQKICAgICsrICoJCXZpYSBpdHMgcGFy ZW50IHRhYmxlJ3MgcmVsaWQsIHdoZW4gcHVibGlzaGVkIHVuZGVyIHRoZSBlZmZlY3RzIG9m CiAgICArKyAqCQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdC4gIE5vdGUgbXVsdGlwbGUg ZXZhbCBvZiBhcmd1bWVudCEKICAgICsrICovCiAgICArKyNkZWZpbmUgUmVsYXRpb25Jc1B1 Ymxpc2hlZFZpYVBhcmVudChyZWxhdGlvbikJXAogICAgKysJKChyZWxhdGlvbiktPnJkX29w dGlvbnMgJiYgXAogICAgKysJICgocmVsYXRpb24pLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVM S0lORF9SRUxBVElPTikgJiYgXAogICAgKysJICgoU3RkUmRPcHRpb25zICopIChyZWxhdGlv biktPnJkX29wdGlvbnMpLT5wdWJsaXNoX3ZpYV9wYXJlbnQpCiAgICAgKwogICAgLSB7IG9p ZCA9PiAnNDM1MCcsIGRlc2NyID0+ICdVbmljb2RlIG5vcm1hbGl6YXRpb24nLAogICAgLSAg IHByb25hbWUgPT4gJ25vcm1hbGl6ZScsIHByb3JldHR5cGUgPT4gJ3RleHQnLCBwcm9hcmd0 eXBlcyA9PiAndGV4dCB0ZXh0JywKICAgIC0gICBwcm9zcmMgPT4gJ3VuaWNvZGVfbm9ybWFs aXplX2Z1bmMnIH0sCiAgICArIC8qCiAgICArICAqIFJlbGF0aW9uR2V0UGFyYWxsZWxXb3Jr ZXJzCiAgICArICAqCQlSZXR1cm5zIHRoZSByZWxhdGlvbidzIHBhcmFsbGVsX3dvcmtlcnMg cmVsb3B0aW9uIHNldHRpbmcuCiAgICAgCiAgICAgICMjIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHVibGljYXRpb24ub3V0ICMjCiAgICAgQEAgc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQ6IENSRUFURSBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciBMT0dJTiBTVVBFUlVTRVI7CiAgICBAQCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3B1YmxpY2F0aW9uLm91dDogU0VMRUNUICogRlJPTSBwZ19wdWJsaWNhdGlvbl90YWJsZXM7 CiAgICAgICBwdWIgICAgIHwgc2NoMSAgICAgICB8IHRibDEgICAgICB8IHthfSAgICAgIHwg CiAgICAgICgxIHJvdykKICAgICAgCiAgICAtKy0tIFNhbml0eSBjaGVjayBjYXNlcyBmb3Ig cGdfc2V0X2xvZ2ljYWxfcm9vdCgpLgogICAgKystLSBTYW5pdHkgY2hlY2sgY2FzZXMgZm9y IHB1Ymxpc2hfdmlhX3BhcmVudC4KICAgICArQ1JFQVRFIFRBQkxFIHNjaDEuaXJvb3QgKGEg aW50KTsKICAgICArQ1JFQVRFIFRBQkxFIHNjaDEuaXBhcnQxIChhIGludCk7CiAgICAgK0NS RUFURSBUQUJMRSBzY2gxLmlwYXJ0MiAoKSBJTkhFUklUUyAoc2NoMS5pcm9vdCk7CiAgICAr Ky0tIHNob3VsZCBkbyBub3RoaW5nIGF0IGFsbAogICAgKytBTFRFUiBUQUJMRSBzY2gxLmly b290IFNFVCAocHVibGlzaF92aWFfcGFyZW50ID0gZmFsc2UpOwogICAgKytBTFRFUiBUQUJM RSBzY2gxLmlyb290IFJFU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQpOwogICAgICstLSBtYXJr aW5nIHJvb3RzIGJldHdlZW4gdW5yZWxhdGVkIHRhYmxlcyBpcyBub3QgYWxsb3dlZAogICAg LStTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgnc2NoMS5pcGFydDEnLCAnc2NoMS5pcm9v dCcpOwogICAgLStFUlJPUjogIHRhYmxlICJpcGFydDEiIGRvZXMgbm90IGluaGVyaXQgZnJv bSBpbnRlbmRlZCByb290IHRhYmxlICJpcm9vdCIKICAgIC0rU0VMRUNUIHBnX3NldF9sb2dp Y2FsX3Jvb3QoJ3NjaDEuaXBhcnQyJywgJ3NjaDEudGJsMScpOwogICAgLStFUlJPUjogIHRh YmxlICJpcGFydDIiIGRvZXMgbm90IGluaGVyaXQgZnJvbSBpbnRlbmRlZCByb290IHRhYmxl ICJ0YmwxIgogICAgKytBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0MSBTRVQgKHB1Ymxpc2hfdmlh X3BhcmVudCk7CiAgICArK0VSUk9SOiAgdGFibGUgImlwYXJ0MSIgZG9lcyBub3QgaW5oZXJp dCBmcm9tIGFueSB0YWJsZXMKICAgICsrQ1JFQVRFIFRBQkxFIGZhaWwgKGEgaW50KSBXSVRI IChwdWJsaXNoX3ZpYV9wYXJlbnQpOwogICAgKytFUlJPUjogIHRhYmxlICJmYWlsIiBkb2Vz IG5vdCBpbmhlcml0IGZyb20gYW55IHRhYmxlcwogICAgICstLSBlc3RhYmxpc2hpbmcgYW4g aW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwIGZpeGVzIHRoZSBwcm9ibGVtCiAgICAtK0FMVEVS IFRBQkxFIHNjaDEuaXBhcnQxIElOSEVSSVQgc2NoMS5pcm9vdDsKICAgIC0rU0VMRUNUIHBn X3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQxJywgJ3NjaDEuaXJvb3QnKTsKICAgIC0r IHBnX3NldF9sb2dpY2FsX3Jvb3QgCiAgICAtKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg LSsgCiAgICAtKygxIHJvdykKICAgIC0rCiAgICArK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQx IElOSEVSSVQgc2NoMS5pcm9vdCwKICAgICsrCQkJCQkJU0VUIChwdWJsaXNoX3ZpYV9wYXJl bnQpOwogICAgICstLSBidXQgbXVsdGlwbGUgaW5oZXJpdGFuY2UgaXMgbm90IGFsbG93ZWQK ICAgIC0rQUxURVIgVEFCTEUgc2NoMS5pcGFydDIgSU5IRVJJVCBzY2gxLmlwYXJ0MTsKICAg IC0rU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQyJywgJ3NjaDEuaXJv b3QnKTsKICAgICsrQUxURVIgVEFCTEUgc2NoMS5pcGFydDIgSU5IRVJJVCBzY2gxLmlwYXJ0 MSwKICAgICsrCQkJCQkJU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQpOwogICAgICtFUlJPUjog IHRhYmxlICJpcGFydDIiIGluaGVyaXRzIGZyb20gbXVsdGlwbGUgdGFibGVzCiAgICAtK0FM VEVSIFRBQkxFIHNjaDEuaXBhcnQyIE5PIElOSEVSSVQgc2NoMS5pcGFydDE7CiAgICAtK1NF TEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdzY2gxLmlwYXJ0MicsICdzY2gxLmlyb290Jyk7 CiAgICAtKyBwZ19zZXRfbG9naWNhbF9yb290IAogICAgLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAgIC0rIAogICAgLSsoMSByb3cpCiAgICAtKwogICAgKystLSBvbmNlIHB1Ymxpc2hf dmlhX3BhcmVudCBpcyBzZXQsIGluaGVyaXRhbmNlIGNhbm5vdCBiZSBjaGFuZ2VkCiAgICAr K0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQyIFNFVCAocHVibGlzaF92aWFfcGFyZW50KTsKICAg ICsrQUxURVIgVEFCTEUgc2NoMS5pcGFydDIgTk8gSU5IRVJJVCBzY2gxLmlyb290OwogICAg KytFUlJPUjogIHJlbGF0aW9uIG9wdGlvbiAicHVibGlzaF92aWFfcGFyZW50IiBwcmV2ZW50 cyB0YWJsZSAiaXBhcnQyIiBmcm9tIGNoYW5naW5nIGluaGVyaXRhbmNlCiAgICArK0FMVEVS IFRBQkxFIHNjaDEuaXBhcnQyIElOSEVSSVQgc2NoMS5pcGFydDE7CiAgICArK0VSUk9SOiAg cmVsYXRpb24gb3B0aW9uICJwdWJsaXNoX3ZpYV9wYXJlbnQiIHByZXZlbnRzIHRhYmxlICJp cGFydDIiIGZyb20gY2hhbmdpbmcgaW5oZXJpdGFuY2UKICAgICArLS0gdGFibGUgb3duZXJz aGlwIG11c3QgbWF0Y2gsIGxpa2UgQVRUQUNIIFBBUlRJVElPTgogICAgICtDUkVBVEUgUk9M RSByZWdyZXNzX3Rlc3RfbWU7CiAgICAgK0NSRUFURSBST0xFIHJlZ3Jlc3NfdGVzdF9ub3Rf bWU7CiAgICBAQCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dDog U0VMRUNUICogRlJPTSBwZ19wdWJsaWNhdGlvbl90YWJsZXM7CiAgICAgK0FMVEVSIFRBQkxF IHJvb3QgT1dORVIgVE8gcmVncmVzc190ZXN0X21lOwogICAgICtBTFRFUiBUQUJMRSBwYXJ0 IE9XTkVSIFRPIHJlZ3Jlc3NfdGVzdF9ub3RfbWU7CiAgICAgK1NFVCBTRVNTSU9OIEFVVEhP UklaQVRJT04gcmVncmVzc190ZXN0X21lOwogICAgLStTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxf cm9vdCgncGFydCcsICdyb290Jyk7IC0tIHNob3VsZCBmYWlsCiAgICArK0FMVEVSIFRBQkxF IHBhcnQgU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQpOyAtLSBzaG91bGQgZmFpbAogICAgICtF UlJPUjogIG11c3QgYmUgb3duZXIgb2YgdGFibGUgcGFydAogICAgICtSRVNFVCBTRVNTSU9O IEFVVEhPUklaQVRJT047CiAgICAgK0FMVEVSIFRBQkxFIHJvb3QgT1dORVIgVE8gcmVncmVz c190ZXN0X25vdF9tZTsKICAgICArQUxURVIgVEFCTEUgcGFydCBPV05FUiBUTyByZWdyZXNz X3Rlc3RfbWU7CiAgICAgK1NFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04gcmVncmVzc190ZXN0 X21lOwogICAgLStTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgncGFydCcsICdyb290Jyk7 IC0tIHNob3VsZCBhbHNvIGZhaWwKICAgICsrQUxURVIgVEFCTEUgcGFydCBTRVQgKHB1Ymxp c2hfdmlhX3BhcmVudCk7IC0tIHNob3VsZCBhbHNvIGZhaWwKICAgICsrRVJST1I6ICBtdXN0 IGJlIG93bmVyIG9mIHRhYmxlIHJvb3QKICAgICsrQ1JFQVRFIFRBQkxFIGZhaWwgKCkgSU5I RVJJVFMgKHJvb3QpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcmVudCk7CiAgICAgK0VSUk9SOiAg bXVzdCBiZSBvd25lciBvZiB0YWJsZSByb290CiAgICAgK1JFU0VUIFNFU1NJT04gQVVUSE9S SVpBVElPTjsKICAgICArRFJPUCBUQUJMRSByb290LCBwYXJ0OwogICAgICtEUk9QIFJPTEUg cmVncmVzc190ZXN0X25vdF9tZTsKICAgICArRFJPUCBST0xFIHJlZ3Jlc3NfdGVzdF9tZTsK ICAgIC0rLS0gVE9ETzogbWFrZSBzdXJlIGV4aXN0aW5nIGxvZ2ljYWwgZGVzY2VuZGFudCBj YW4ndCBiZSBBTFRFUmVkIFtOT10gSU5IRVJJVAogICAgICstLSBNaXhlZCBwdWJsaWNhdGlv biBzZXR0aW5ncyBmb3IgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QsIGF0IGRpZmZlcmVu dAogICAgICstLSBsZXZlbHMgb2YgdGhlIGluaGVyaXRhbmNlIHRyZWUsIHRvIHBpbiBjb3Jy ZWN0IGJlaGF2aW9yIGluIHRoZSB3b3JzdCBjYXNlcy4KICAgIC0rQ1JFQVRFIFRBQkxFIHNj aDEuaXBhcnQxX2EgKCkgSU5IRVJJVFMgKHNjaDEuaXBhcnQxKTsKICAgICsrQ1JFQVRFIFRB QkxFIHNjaDEuaXBhcnQxX2EgKCkgSU5IRVJJVFMgKHNjaDEuaXBhcnQxKSBXSVRIIChwdWJs aXNoX3ZpYV9wYXJlbnQpOwogICAgICtDUkVBVEUgVEFCTEUgc2NoMS5pcGFydDFfYTEgKCkg SU5IRVJJVFMgKHNjaDEuaXBhcnQxX2EpOwogICAgLStTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxf cm9vdCgnc2NoMS5pcGFydDFfYScsICdzY2gxLmlwYXJ0MScpOwogICAgLSsgcGdfc2V0X2xv Z2ljYWxfcm9vdCAKICAgIC0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAtKyAKICAgIC0r KDEgcm93KQogICAgLSsKICAgIC0rU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEu aXBhcnQxX2ExJywgJ3NjaDEuaXBhcnQxX2EnKTsKICAgIC0rIHBnX3NldF9sb2dpY2FsX3Jv b3QgCiAgICAtKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLSsgCiAgICAtKygxIHJvdykK ICAgIC0rCiAgICArK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQxX2ExIFNFVCAocHVibGlzaF92 aWFfcGFyZW50KTsKICAgICArQ1JFQVRFIFBVQkxJQ0FUSU9OIGlwdWJfcm9vdCBGT1IgVEFC TEUgc2NoMS5pcm9vdDsKICAgICArQ1JFQVRFIFBVQkxJQ0FUSU9OIGlwdWJfcGFydDEgRk9S IFRBQkxFIE9OTFkgc2NoMS5pcGFydDEsIE9OTFkgc2NoMS5pcGFydDFfYTEKICAgICArICAg ICAgIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKICAgIEBAIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0OiBTRUxFQ1QgKiBGUk9NIHBnX3B1 YmxpY2F0aW9uX3RhYmxlczsKICAgICArIGlwdWJfb3RoZXIgfCBzY2gxLmlyb290ICB8IHNj aDEuaXBhcnQxX2EKICAgICArKDEwIHJvd3MpCiAgICAgKwogICAgKystLSAiRGV0YWNoaW5n IiBwYXJ0aXRpb25zIHNob3VsZCBjaGFuZ2UgdGhlIHN1YnNjcmlwdGlvbnMKICAgICsrQUxU RVIgVEFCTEUgc2NoMS5pcGFydDIgU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQgPSBmYWxzZSk7 CiAgICArK1NFTEVDVCBwdWJuYW1lLCByZWxpZDo6cmVnY2xhc3MKICAgICsrICBGUk9NIHBn X2dldF9wdWJsaWNhdGlvbl90YWJsZXMoJ2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJywgJ2lw dWJfb3RoZXInKSB0CiAgICArKyAgSk9JTiBwZ19wdWJsaWNhdGlvbiBwIE9OIChwLm9pZCA9 IHQucHViaWQpOwogICAgKysgIHB1Ym5hbWUgICB8ICAgIHJlbGlkICAgIAogICAgKystLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLQogICAgKysgaXB1Yl9yb290ICB8IHNjaDEuaXJvb3QK ICAgICsrIGlwdWJfcm9vdCAgfCBzY2gxLmlwYXJ0MQogICAgKysgaXB1Yl9yb290ICB8IHNj aDEuaXBhcnQyCiAgICArKyBpcHViX3BhcnQxIHwgc2NoMS5pcGFydDEKICAgICsrIGlwdWJf b3RoZXIgfCBzY2gxLmlyb290CiAgICArKyBpcHViX290aGVyIHwgc2NoMS5pcGFydDIKICAg ICsrKDYgcm93cykKICAgICsrCiAgICArK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N5bmMo J2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKTsKICAgICsrICBwdWJs aXNoZWQgIHwgICAgIHN5bmNlZCAgICAgCiAgICArKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLQogICAgKysgc2NoMS5pcm9vdCAgfCBzY2gxLmlyb290CiAgICArKyBzY2gxLmly b290ICB8IHNjaDEuaXBhcnQxX2EKICAgICsrIHNjaDEuaXBhcnQxIHwgc2NoMS5pcGFydDEK ICAgICsrIHNjaDEuaXBhcnQxIHwgc2NoMS5pcGFydDFfYTEKICAgICsrIHNjaDEuaXBhcnQy IHwgc2NoMS5pcGFydDIKICAgICsrKDUgcm93cykKICAgICsrCiAgICArK1NFTEVDVCAqIEZS T00gcHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9yb290JywgJ2lwdWJfcGFydDEnLCAnaXB1Yl9v dGhlcicpOwogICAgKysgIHB1Ym5hbWUgICB8ICBwdWJsaXNoZWQgIHwgICAgIHN5bmNlZCAg ICAgCiAgICArKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0K ICAgICsrIGlwdWJfcm9vdCAgfCBzY2gxLmlyb290ICB8IHNjaDEuaXJvb3QKICAgICsrIGlw dWJfcm9vdCAgfCBzY2gxLmlyb290ICB8IHNjaDEuaXBhcnQxX2EKICAgICsrIGlwdWJfcm9v dCAgfCBzY2gxLmlwYXJ0MSB8IHNjaDEuaXBhcnQxCiAgICArKyBpcHViX3Jvb3QgIHwgc2No MS5pcGFydDEgfCBzY2gxLmlwYXJ0MV9hMQogICAgKysgaXB1Yl9yb290ICB8IHNjaDEuaXBh cnQyIHwgc2NoMS5pcGFydDIKICAgICsrIGlwdWJfcGFydDEgfCBzY2gxLmlwYXJ0MSB8IHNj aDEuaXBhcnQxCiAgICArKyBpcHViX3BhcnQxIHwgc2NoMS5pcGFydDEgfCBzY2gxLmlwYXJ0 MV9hMQogICAgKysgaXB1Yl9vdGhlciB8IHNjaDEuaXJvb3QgIHwgc2NoMS5pcm9vdAogICAg KysgaXB1Yl9vdGhlciB8IHNjaDEuaXJvb3QgIHwgc2NoMS5pcGFydDFfYQogICAgKysgaXB1 Yl9vdGhlciB8IHNjaDEuaXBhcnQyIHwgc2NoMS5pcGFydDIKICAgICsrKDEwIHJvd3MpCiAg ICArKwogICAgKytBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0MV9hMSBSRVNFVCAocHVibGlzaF92 aWFfcGFyZW50KTsKICAgICsrU0VMRUNUIHJlbGlkOjpyZWdjbGFzcyBGUk9NIHBnX2dldF9w dWJsaWNhdGlvbl90YWJsZXMoJ2lwdWJfcGFydDEnKTsKICAgICsrICAgICByZWxpZCAgICAg IAogICAgKystLS0tLS0tLS0tLS0tLS0tCiAgICArKyBzY2gxLmlwYXJ0MQogICAgKysgc2No MS5pcGFydDFfYTEKICAgICsrKDIgcm93cykKICAgICsrCiAgICArK1NFTEVDVCAqIEZST00g cHVibGlzaGVkX3N5bmMoJ2lwdWJfcGFydDEnKTsKICAgICsrICAgcHVibGlzaGVkICAgIHwg ICAgIHN5bmNlZCAgICAgCiAgICArKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LQogICAgKysgc2NoMS5pcGFydDEgICAgfCBzY2gxLmlwYXJ0MQogICAgKysgc2NoMS5pcGFy dDFfYTEgfCBzY2gxLmlwYXJ0MV9hMQogICAgKysoMiByb3dzKQogICAgKysKICAgICsrU0VM RUNUICogRlJPTSBwdWJsaXNoZWRfc3RyZWFtKCdpcHViX3BhcnQxJyk7CiAgICArKyAgcHVi bmFtZSAgIHwgICBwdWJsaXNoZWQgICAgfCAgICAgc3luY2VkICAgICAKICAgICsrLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQogICAgKysgaXB1Yl9w YXJ0MSB8IHNjaDEuaXBhcnQxICAgIHwgc2NoMS5pcGFydDEKICAgICsrIGlwdWJfcGFydDEg fCBzY2gxLmlwYXJ0MV9hMSB8IHNjaDEuaXBhcnQxX2ExCiAgICArKygyIHJvd3MpCiAgICAr KwogICAgICtEUk9QIFBVQkxJQ0FUSU9OIGlwdWJfb3RoZXI7CiAgICAgK0RST1AgUFVCTElD QVRJT04gaXB1Yl9wYXJ0MTsKICAgICArRFJPUCBQVUJMSUNBVElPTiBpcHViX3Jvb3Q7CiAg ICBAQCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWw6IEFMVEVSIFRBQkxF IHNjaDEudGJsMSBBVFRBQ0ggUEFSVElUSU9OIHNjaAogICAgICBDUkVBVEUgUFVCTElDQVRJ T04gcHViIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDEgV0lUSCAoUFVCTElTSF9WSUFfUEFS VElUSU9OX1JPT1Q9MSk7CiAgICAgIFNFTEVDVCAqIEZST00gcGdfcHVibGljYXRpb25fdGFi bGVzOwogICAgICAKICAgIC0rLS0gU2FuaXR5IGNoZWNrIGNhc2VzIGZvciBwZ19zZXRfbG9n aWNhbF9yb290KCkuCiAgICArKy0tIFNhbml0eSBjaGVjayBjYXNlcyBmb3IgcHVibGlzaF92 aWFfcGFyZW50LgogICAgICtDUkVBVEUgVEFCTEUgc2NoMS5pcm9vdCAoYSBpbnQpOwogICAg ICtDUkVBVEUgVEFCTEUgc2NoMS5pcGFydDEgKGEgaW50KTsKICAgICArQ1JFQVRFIFRBQkxF IHNjaDEuaXBhcnQyICgpIElOSEVSSVRTIChzY2gxLmlyb290KTsKICAgICArCiAgICArKy0t IHNob3VsZCBkbyBub3RoaW5nIGF0IGFsbAogICAgKytBTFRFUiBUQUJMRSBzY2gxLmlyb290 IFNFVCAocHVibGlzaF92aWFfcGFyZW50ID0gZmFsc2UpOwogICAgKytBTFRFUiBUQUJMRSBz Y2gxLmlyb290IFJFU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQpOwogICAgKysKICAgICArLS0g bWFya2luZyByb290cyBiZXR3ZWVuIHVucmVsYXRlZCB0YWJsZXMgaXMgbm90IGFsbG93ZWQK ICAgIC0rU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQxJywgJ3NjaDEu aXJvb3QnKTsKICAgIC0rU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQy JywgJ3NjaDEudGJsMScpOwogICAgKytBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0MSBTRVQgKHB1 Ymxpc2hfdmlhX3BhcmVudCk7CiAgICArK0NSRUFURSBUQUJMRSBmYWlsIChhIGludCkgV0lU SCAocHVibGlzaF92aWFfcGFyZW50KTsKICAgICArCiAgICAgKy0tIGVzdGFibGlzaGluZyBh biBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgZml4ZXMgdGhlIHByb2JsZW0KICAgIC0rQUxU RVIgVEFCTEUgc2NoMS5pcGFydDEgSU5IRVJJVCBzY2gxLmlyb290OwogICAgLStTRUxFQ1Qg cGdfc2V0X2xvZ2ljYWxfcm9vdCgnc2NoMS5pcGFydDEnLCAnc2NoMS5pcm9vdCcpOwogICAg KytBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0MSBJTkhFUklUIHNjaDEuaXJvb3QsCiAgICArKwkJ CQkJCVNFVCAocHVibGlzaF92aWFfcGFyZW50KTsKICAgICArCiAgICAgKy0tIGJ1dCBtdWx0 aXBsZSBpbmhlcml0YW5jZSBpcyBub3QgYWxsb3dlZAogICAgLStBTFRFUiBUQUJMRSBzY2gx LmlwYXJ0MiBJTkhFUklUIHNjaDEuaXBhcnQxOwogICAgLStTRUxFQ1QgcGdfc2V0X2xvZ2lj YWxfcm9vdCgnc2NoMS5pcGFydDInLCAnc2NoMS5pcm9vdCcpOwogICAgKytBTFRFUiBUQUJM RSBzY2gxLmlwYXJ0MiBJTkhFUklUIHNjaDEuaXBhcnQxLAogICAgKysJCQkJCQlTRVQgKHB1 Ymxpc2hfdmlhX3BhcmVudCk7CiAgICAgKwogICAgLStBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0 MiBOTyBJTkhFUklUIHNjaDEuaXBhcnQxOwogICAgLStTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxf cm9vdCgnc2NoMS5pcGFydDInLCAnc2NoMS5pcm9vdCcpOwogICAgKystLSBvbmNlIHB1Ymxp c2hfdmlhX3BhcmVudCBpcyBzZXQsIGluaGVyaXRhbmNlIGNhbm5vdCBiZSBjaGFuZ2VkCiAg ICArK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQyIFNFVCAocHVibGlzaF92aWFfcGFyZW50KTsK ICAgICsrQUxURVIgVEFCTEUgc2NoMS5pcGFydDIgTk8gSU5IRVJJVCBzY2gxLmlyb290Owog ICAgKytBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0MiBJTkhFUklUIHNjaDEuaXBhcnQxOwogICAg ICsKICAgICArLS0gdGFibGUgb3duZXJzaGlwIG11c3QgbWF0Y2gsIGxpa2UgQVRUQUNIIFBB UlRJVElPTgogICAgICtDUkVBVEUgUk9MRSByZWdyZXNzX3Rlc3RfbWU7CiAgICAgK0NSRUFU RSBST0xFIHJlZ3Jlc3NfdGVzdF9ub3RfbWU7CiAgICAgK0NSRUFURSBUQUJMRSByb290IChh IGludCk7CiAgICAgK0NSRUFURSBUQUJMRSBwYXJ0ICgpIElOSEVSSVRTIChyb290KTsKICAg ICsrCiAgICAgK0FMVEVSIFRBQkxFIHJvb3QgT1dORVIgVE8gcmVncmVzc190ZXN0X21lOwog ICAgICtBTFRFUiBUQUJMRSBwYXJ0IE9XTkVSIFRPIHJlZ3Jlc3NfdGVzdF9ub3RfbWU7CiAg ICAgK1NFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04gcmVncmVzc190ZXN0X21lOwogICAgLStT RUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgncGFydCcsICdyb290Jyk7IC0tIHNob3VsZCBm YWlsCiAgICArK0FMVEVSIFRBQkxFIHBhcnQgU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQpOyAt LSBzaG91bGQgZmFpbAogICAgICtSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CiAgICAr KwogICAgICtBTFRFUiBUQUJMRSByb290IE9XTkVSIFRPIHJlZ3Jlc3NfdGVzdF9ub3RfbWU7 CiAgICAgK0FMVEVSIFRBQkxFIHBhcnQgT1dORVIgVE8gcmVncmVzc190ZXN0X21lOwogICAg ICtTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHJlZ3Jlc3NfdGVzdF9tZTsKICAgIC0rU0VM RUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3BhcnQnLCAncm9vdCcpOyAtLSBzaG91bGQgYWxz byBmYWlsCiAgICArK0FMVEVSIFRBQkxFIHBhcnQgU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQp OyAtLSBzaG91bGQgYWxzbyBmYWlsCiAgICArK0NSRUFURSBUQUJMRSBmYWlsICgpIElOSEVS SVRTIChyb290KSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJlbnQpOwogICAgICtSRVNFVCBTRVNT SU9OIEFVVEhPUklaQVRJT047CiAgICArKwogICAgICtEUk9QIFRBQkxFIHJvb3QsIHBhcnQ7 CiAgICAgK0RST1AgUk9MRSByZWdyZXNzX3Rlc3Rfbm90X21lOwogICAgICtEUk9QIFJPTEUg cmVncmVzc190ZXN0X21lOwogICAgICsKICAgIC0rLS0gVE9ETzogbWFrZSBzdXJlIGV4aXN0 aW5nIGxvZ2ljYWwgZGVzY2VuZGFudCBjYW4ndCBiZSBBTFRFUmVkIFtOT10gSU5IRVJJVAog ICAgLSsKICAgICArLS0gTWl4ZWQgcHVibGljYXRpb24gc2V0dGluZ3MgZm9yIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290LCBhdCBkaWZmZXJlbnQKICAgICArLS0gbGV2ZWxzIG9mIHRo ZSBpbmhlcml0YW5jZSB0cmVlLCB0byBwaW4gY29ycmVjdCBiZWhhdmlvciBpbiB0aGUgd29y c3QgY2FzZXMuCiAgICAtK0NSRUFURSBUQUJMRSBzY2gxLmlwYXJ0MV9hICgpIElOSEVSSVRT IChzY2gxLmlwYXJ0MSk7CiAgICArK0NSRUFURSBUQUJMRSBzY2gxLmlwYXJ0MV9hICgpIElO SEVSSVRTIChzY2gxLmlwYXJ0MSkgV0lUSCAocHVibGlzaF92aWFfcGFyZW50KTsKICAgICAr Q1JFQVRFIFRBQkxFIHNjaDEuaXBhcnQxX2ExICgpIElOSEVSSVRTIChzY2gxLmlwYXJ0MV9h KTsKICAgIC0rCiAgICAtK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdzY2gxLmlwYXJ0 MV9hJywgJ3NjaDEuaXBhcnQxJyk7CiAgICAtK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290 KCdzY2gxLmlwYXJ0MV9hMScsICdzY2gxLmlwYXJ0MV9hJyk7CiAgICArK0FMVEVSIFRBQkxF IHNjaDEuaXBhcnQxX2ExIFNFVCAocHVibGlzaF92aWFfcGFyZW50KTsKICAgICArCiAgICAg K0NSRUFURSBQVUJMSUNBVElPTiBpcHViX3Jvb3QgRk9SIFRBQkxFIHNjaDEuaXJvb3Q7CiAg ICAgK0NSRUFURSBQVUJMSUNBVElPTiBpcHViX3BhcnQxIEZPUiBUQUJMRSBPTkxZIHNjaDEu aXBhcnQxLCBPTkxZIHNjaDEuaXBhcnQxX2ExCiAgICBAQCBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9wdWJsaWNhdGlvbi5zcWw6IEFMVEVSIFRBQkxFIHNjaDEudGJsMSBBVFRBQ0ggUEFSVElU SU9OIHNjaAogICAgICtTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zeW5jKCdpcHViX3Jvb3Qn LCAnaXB1Yl9wYXJ0MScsICdpcHViX290aGVyJyk7CiAgICAgK1NFTEVDVCAqIEZST00gcHVi bGlzaGVkX3N0cmVhbSgnaXB1Yl9yb290JywgJ2lwdWJfcGFydDEnLCAnaXB1Yl9vdGhlcicp OwogICAgICsKICAgICsrLS0gIkRldGFjaGluZyIgcGFydGl0aW9ucyBzaG91bGQgY2hhbmdl IHRoZSBzdWJzY3JpcHRpb25zCiAgICArK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQyIFNFVCAo cHVibGlzaF92aWFfcGFyZW50ID0gZmFsc2UpOwogICAgKytTRUxFQ1QgcHVibmFtZSwgcmVs aWQ6OnJlZ2NsYXNzCiAgICArKyAgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKCdp cHViX3Jvb3QnLCAnaXB1Yl9wYXJ0MScsICdpcHViX290aGVyJykgdAogICAgKysgIEpPSU4g cGdfcHVibGljYXRpb24gcCBPTiAocC5vaWQgPSB0LnB1YmlkKTsKICAgICsrU0VMRUNUICog RlJPTSBwdWJsaXNoZWRfc3luYygnaXB1Yl9yb290JywgJ2lwdWJfcGFydDEnLCAnaXB1Yl9v dGhlcicpOwogICAgKytTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zdHJlYW0oJ2lwdWJfcm9v dCcsICdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKTsKICAgICsrCiAgICArK0FMVEVSIFRB QkxFIHNjaDEuaXBhcnQxX2ExIFJFU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQpOwogICAgKytT RUxFQ1QgcmVsaWQ6OnJlZ2NsYXNzIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcygn aXB1Yl9wYXJ0MScpOwogICAgKytTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zeW5jKCdpcHVi X3BhcnQxJyk7CiAgICArK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9w YXJ0MScpOwogICAgKysKICAgICArRFJPUCBQVUJMSUNBVElPTiBpcHViX290aGVyOwogICAg ICtEUk9QIFBVQkxJQ0FUSU9OIGlwdWJfcGFydDE7CiAgICAgK0RST1AgUFVCTElDQVRJT04g aXB1Yl9yb290OwogICAgQEAgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlv bi5wbDogJG5vZGVfc3Vic2NyaWJlcjEtPmFwcGVuZF9jb25mKCdwb3N0Z3IKICAgICAgJG5v ZGVfc3Vic2NyaWJlcjEtPnJlbG9hZDsKICAgICAgCiAgICAgKyMgTWFrZSBzdXJlIHN0YW5k YXJkIGluaGVyaXRhbmNlIHNldHVwcyBhcmVuJ3QgYnJva2VuIGJ5IHRoZSBuZXcKICAgIC0r IyBwZ19zZXRfbG9naWNhbF9yb290KCkgaGFuZGxpbmcuCiAgICArKyMgcHVibGlzaF92aWFf cGFyZW50IGhhbmRsaW5nLgogICAgICskbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCiAgICAgKwkiQ1JFQVRFIFRBQkxFIGl0YWIxIChhIGludCwgYiB0ZXh0KSIp OwogICAgICskbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAgICBA QCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTNfcGFydGl0aW9uLnBsOiAkbm9kZV9zdWJz Y3JpYmVyMS0+YXBwZW5kX2NvbmYoJ3Bvc3RncgogICAgICsJIkNSRUFURSBUQUJMRSBpdGFi MV8yIChDSEVDSyAoYSA9IDIpKSBJTkhFUklUUyAoaXRhYjEpIik7CiAgICAgKwogICAgICsk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogICAgLSsJIlNFTEVDVCBw Z19zZXRfbG9naWNhbF9yb290KCdpdGFiMV8xJywgJ2l0YWIxJykiKTsKICAgICsrCSJBTFRF UiBUQUJMRSBpdGFiMV8xIFNFVCAocHVibGlzaF92aWFfcGFyZW50ID0gdHJ1ZSkiKTsKICAg ICArJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKICAgIC0rCSJTRUxF Q1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgnaXRhYjFfMicsICdpdGFiMScpIik7CiAgICArKwki QUxURVIgVEFCTEUgaXRhYjFfMiBTRVQgKHB1Ymxpc2hfdmlhX3BhcmVudCA9IHRydWUpIik7 CiAgICAgKwogICAgICskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gaXRhYjEgVkFMVUVTICgwLCAnaXRhYjEnKSIpOwogICAgICskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gaXRhYjFfMSBW QUxVRVMgKDEsICdpdGFiMScpIik7CiAgICBAQCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MTNfcGFydGl0aW9uLnBsOiAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNx bAogICAgICsJRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gaXRhYjFfdHJpZ2dlcigp OyIpOwogICAgICsKICAgICArJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKICAgIC0rCSJTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgnaXRhYjFfMScsICdpdGFi MScpIik7CiAgICArKwkiQUxURVIgVEFCTEUgaXRhYjFfMSBTRVQgKHB1Ymxpc2hfdmlhX3Bh cmVudCA9IHRydWUpIik7CiAgICAgKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCiAgICAtKwkiU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ2l0YWIxXzInLCAn aXRhYjEnKSIpOwogICAgKysJIkFMVEVSIFRBQkxFIGl0YWIxXzIgU0VUIChwdWJsaXNoX3Zp YV9wYXJlbnQgPSB0cnVlKSIpOwogICAgICsKICAgICArJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKICAgICArCSJDUkVBVEUgVEFCTEUgaXRhYjIgKGEgaW50LCBi IHRleHQpIik7CiAgICBAQCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTNfcGFydGl0aW9u LnBsOiAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbAogICAgICsJRk9S IEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gaXRhYjJfdHJpZ2dlcigpOyIpOwogICAgICsK ICAgICArJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKICAgIC0rCSJT RUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgnaXRhYjJfMScsICdpdGFiMicpIik7CiAgICAr KwkiQUxURVIgVEFCTEUgaXRhYjJfMSBTRVQgKHB1Ymxpc2hfdmlhX3BhcmVudCA9IHRydWUp Iik7CiAgICAgKwogICAgICsjIGl0YWIyXzEgc2hvdWxkIGJlIHB1Ymxpc2hlZCB1c2luZyBp dHMgb3duIGlkZW50aXR5IGhlcmUsIHNpbmNlIGl0cyBwYXJlbnQgaXMKICAgICArIyBub3Qg aW5jbHVkZWQuIGl0YWIxXzEgc2hvdWxkIGJlIHB1Ymxpc2hlZCB2aWEgaXRzIHBhcmVudCwg aXRhYjEsIHdpdGhvdXQKICAgIEBAIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxM19wYXJ0 aXRpb24ucGw6ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsCiAgICAg KwkiQ1JFQVRFIFRBQkxFIGl0YWIzXzFfMSAoKSBJTkhFUklUUyAoaXRhYjNfMSkiKTsKICAg ICArCiAgICAgKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAgICAt KwkiU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ2l0YWIzXzEnLCAnaXRhYjMnKSIpOwog ICAgKysJIkFMVEVSIFRBQkxFIGl0YWIzXzEgU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQgPSB0 cnVlKSIpOwogICAgICskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAog ICAgLSsJIlNFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdpdGFiM18xXzEnLCAnaXRhYjNf MScpIik7CiAgICArKwkiQUxURVIgVEFCTEUgaXRhYjNfMV8xIFNFVCAocHVibGlzaF92aWFf cGFyZW50ID0gdHJ1ZSkiKTsKICAgICArCiAgICAgKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCiAgICAgKwkiSU5TRVJUIElOVE8gaXRhYjMgVkFMVUVTICgxLCAn aXRhYjMnKSIpOwogICAgQEAgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlv bi5wbDogJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwKICAgICAraXMo JHJlc3VsdCwgcXEoKSwgJ2luaXRpYWwgZGF0YSByb3V0ZWQgZm9yIGl0YWIzXzFfMSBvbiBz dWJzY3JpYmVyIDInKTsKICAgICArCiAgICAgKyMgbWFrZSBzdXJlIG5ldyBkYXRhIGlzIGFs c28gY29ycmVjdGx5IHJvdXRlZCB0byB0aGUgcm9vdHMKICAgIC0rJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIzIFZBTFVFUyAoNCwg J2l0YWIzLW5ldycpIik7CiAgICAtKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiM18xIFZBTFVFUyAoNCwgJ2l0YWIzXzEtbmV3Jyki KTsKICAgIC0rJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIGl0YWIzXzFfMSBWQUxVRVMgKDQsICdpdGFiM18xXzEtbmV3JykiKTsKICAgICsr JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0 YWIzIFZBTFVFUyAoNCwgJ2l0YWIzX25ldycpIik7CiAgICArKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiM18xIFZBTFVFUyAoNCwg J2l0YWIzXzFfbmV3JykiKTsKICAgICsrJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIzXzFfMSBWQUxVRVMgKDQsICdpdGFiM18xXzFf bmV3JykiKTsKICAgICArCiAgICAgKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbWl4ZWQnKTsKICAgICArCiAgICAgKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAgICAgKwkiU0VMRUNUIGEsIGIgRlJPTSBPTkxZIGl0 YWIzIE9SREVSIEJZIDEsIDIiKTsKICAgICAraXMoJHJlc3VsdCwgcXEoMXxpdGFiMwogICAg LSs0fGl0YWIzLW5ldyksICduZXcgZGF0YSByb3V0ZWQgZm9yIGl0YWIzIG9uIHN1YnNjcmli ZXIgMicpOwogICAgKys0fGl0YWIzX25ldyksICduZXcgZGF0YSByb3V0ZWQgZm9yIGl0YWIz IG9uIHN1YnNjcmliZXIgMicpOwogICAgICsKICAgICArJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKICAgICArCSJTRUxFQ1QgYSwgYiBGUk9N IE9OTFkgaXRhYjNfMSBPUkRFUiBCWSAxLCAyIik7CiAgICAgK2lzKCRyZXN1bHQsIHFxKDJ8 aXRhYjNfMQogICAgICszfGl0YWIzXzFfMQogICAgLSs0fGl0YWIzXzEtbmV3CiAgICAtKzR8 aXRhYjNfMV8xLW5ldyksICduZXcgZGF0YSByb3V0ZWQgZm9yIGl0YWIzXzEgb24gc3Vic2Ny aWJlciAyJyk7CiAgICArKzR8aXRhYjNfMV8xX25ldwogICAgKys0fGl0YWIzXzFfbmV3KSwg J25ldyBkYXRhIHJvdXRlZCBmb3IgaXRhYjNfMSBvbiBzdWJzY3JpYmVyIDInKTsKICAgICAr CiAgICAgKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCiAgICAgKwkiU0VMRUNUIGEsIGIgRlJPTSBPTkxZIGl0YWIzXzFfMSIpOwo= --------------t3G0JkSKKjR0VSJl6T1XOBWh Content-Type: text/x-patch; charset=UTF-8; name="v3-0001-pgoutput-refactor-publication-cache-construction.patch" Content-Disposition: attachment; filename*0="v3-0001-pgoutput-refactor-publication-cache-construction.pat"; filename*1="ch" Content-Transfer-Encoding: base64 RnJvbSA3ZTY4Zjk2YWY2ZTE4MTExMTMwNTRiNGYyMzhiNWVkNDI5ZjdkNjI4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amNoYW1waW9uQHRpbWVz Y2FsZS5jb20+CkRhdGU6IEZyaSwgNyBBcHIgMjAyMyAwOTo1NToyNyAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjMgMS8yXSBwZ291dHB1dDogcmVmYWN0b3IgcHVibGljYXRpb24gY2FjaGUg Y29uc3RydWN0aW9uCgpCcmVha2luZyB0aGlzIGxvZ2ljIGludG8gYSBzdGFuZGFsb25lIGhl bHBlciBzaG91bGQgaGVscCBleHBvc2UgdGhlCmJlaGF2aW9yIGZvciB0ZXN0aW5nLiAgQWRk aXRpb25hbGx5LCBtb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiB1bmRlciB0aGUKcGdfcHVibGlj YXRpb24gY2F0YWxvZyBoZWxwZXJzLCBzaW5jZSBpdCBzZWVtcyBsaWtlIGl0J3MgaW5oZXJl bnQgdG8gdGhlCnB1YmxpY2F0aW9uIHNldHRpbmdzIChhbmQgaXQgbXVzdCBtYXRjaCB0aGUg YmVoYXZpb3Igb2YgdGhlIGluaXRpYWwKc3luYywgd2hpY2ggZG9lc24ndCBzZWVtIHRvIGJl IGNvbnRyb2xsZWQgYnkgdGhlIG91dHB1dCBwbHVnaW4gYXQgYWxsKS4KLS0tCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgIHwgMjE1ICsrKysrKysrKysr KysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5j IHwgMTM3ICstLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg ICAgICAgICAgICAgfCAgIDggKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oICAgICAgICB8ICAgNCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0 aW9uLm91dCAgIHwgIDI2ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24u c3FsICAgICAgICB8ICAxNSArKwogNiBmaWxlcyBjaGFuZ2VkLCAyNzIgaW5zZXJ0aW9ucygr KSwgMTMzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv cGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24u YwppbmRleCBjNDg4YjYzNzBiLi5kZjlhYmYwOWMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jCkBAIC0xMjU5LDMgKzEyNTksMjE4IEBAIHBnX2dldF9wdWJsaWNh dGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAogCVNSRl9SRVRVUk5fRE9ORShmdW5j Y3R4KTsKIH0KKworTGlzdCAqCitwcm9jZXNzX3JlbGF0aW9uX3B1YmxpY2F0aW9ucyhPaWQg cmVsaWQsIGNvbnN0IExpc3QgKnB1YmxpY2F0aW9ucywKKwkJCQkJCQkgIFB1YmxpY2F0aW9u QWN0aW9ucyAqcHViYWN0aW9ucywKKwkJCQkJCQkgIE9pZCAqcHVibGlzaF9hc19yZWxpZCkK K3sKKwlPaWQJCQlzY2hlbWFJZCA9IGdldF9yZWxfbmFtZXNwYWNlKHJlbGlkKTsKKwlMaXN0 CSAgICpwdWJpZHMgPSBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhyZWxpZCk7CisKKwkvKgor CSAqIFdlIGRvbid0IGFjcXVpcmUgYSBsb2NrIG9uIHRoZSBuYW1lc3BhY2Ugc3lzdGVtIHRh YmxlIGFzIHdlIGJ1aWxkCisJICogdGhlIGNhY2hlIGVudHJ5IHVzaW5nIGEgaGlzdG9yaWMg c25hcHNob3QgYW5kIGFsbCB0aGUgbGF0ZXIgY2hhbmdlcworCSAqIGFyZSBhYnNvcmJlZCB3 aGlsZSBkZWNvZGluZyBXQUwuCisJICovCisJTGlzdAkgICAqc2NoZW1hUHViaWRzID0gR2V0 U2NoZW1hUHVibGljYXRpb25zKHNjaGVtYUlkKTsKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJ CQlwdWJsaXNoX2FuY2VzdG9yX2xldmVsID0gMDsKKwlib29sCQlhbV9wYXJ0aXRpb24gPSBn ZXRfcmVsX3JlbGlzcGFydGl0aW9uKHJlbGlkKTsKKwljaGFyCQlyZWxraW5kID0gZ2V0X3Jl bF9yZWxraW5kKHJlbGlkKTsKKwlMaXN0CSAgICpyZWxfcHVibGljYXRpb25zID0gTklMOwor CisJKnB1Ymxpc2hfYXNfcmVsaWQgPSByZWxpZDsKKworCWZvcmVhY2gobGMsIHB1YmxpY2F0 aW9ucykKKwl7CisJCVB1YmxpY2F0aW9uICpwdWIgPSBsZmlyc3QobGMpOworCQlib29sCQlw dWJsaXNoID0gZmFsc2U7CisKKwkJLyoKKwkJICogVW5kZXIgd2hhdCByZWxpZCBzaG91bGQg d2UgcHVibGlzaCBjaGFuZ2VzIGluIHRoaXMgcHVibGljYXRpb24/CisJCSAqIFdlJ2xsIHVz ZSB0aGUgdG9wLW1vc3QgcmVsaWQgYWNyb3NzIGFsbCBwdWJsaWNhdGlvbnMuIEFsc28KKwkJ ICogdHJhY2sgdGhlIGFuY2VzdG9yIGxldmVsIGZvciB0aGlzIHB1YmxpY2F0aW9uLgorCQkg Ki8KKwkJT2lkCQkJcHViX3JlbGlkID0gcmVsaWQ7CisJCWludAkJCWFuY2VzdG9yX2xldmVs ID0gMDsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgRk9SIEFMTCBUQUJMRVMgcHVibGlj YXRpb24sIHBpY2sgdGhlIHBhcnRpdGlvbgorCQkgKiByb290IGFuZCBzZXQgdGhlIGFuY2Vz dG9yIGxldmVsIGFjY29yZGluZ2x5LgorCQkgKi8KKwkJaWYgKHB1Yi0+YWxsdGFibGVzKQor CQl7CisJCQlwdWJsaXNoID0gdHJ1ZTsKKwkJCWlmIChwdWItPnB1YnZpYXJvb3QgJiYgYW1f cGFydGl0aW9uKQorCQkJeworCQkJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRp b25fYW5jZXN0b3JzKHJlbGlkKTsKKworCQkJCXB1Yl9yZWxpZCA9IGxsYXN0X29pZChhbmNl c3RvcnMpOworCQkJCWFuY2VzdG9yX2xldmVsID0gbGlzdF9sZW5ndGgoYW5jZXN0b3JzKTsK KwkJCX0KKwkJfQorCisJCWlmICghcHVibGlzaCkKKwkJeworCQkJYm9vbAkJYW5jZXN0b3Jf cHVibGlzaGVkID0gZmFsc2U7CisKKwkJCS8qCisJCQkgKiBGb3IgYSBwYXJ0aXRpb24sIGNo ZWNrIGlmIGFueSBvZiB0aGUgYW5jZXN0b3JzIGFyZQorCQkJICogcHVibGlzaGVkLiAgSWYg c28sIG5vdGUgZG93biB0aGUgdG9wbW9zdCBhbmNlc3RvciB0aGF0IGlzCisJCQkgKiBwdWJs aXNoZWQgdmlhIHRoaXMgcHVibGljYXRpb24sIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyB0aGUK KwkJCSAqIHJlbGF0aW9uIHZpYSB3aGljaCB0byBwdWJsaXNoIHRoZSBwYXJ0aXRpb24ncyBj aGFuZ2VzLgorCQkJICovCisJCQlpZiAoYW1fcGFydGl0aW9uKQorCQkJeworCQkJCU9pZAkJ CWFuY2VzdG9yOworCQkJCWludAkJCWxldmVsOworCQkJCUxpc3QJICAgKmFuY2VzdG9ycyA9 IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKTsKKworCQkJCWFuY2VzdG9yID0gR2V0 VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvbihwdWItPm9pZCwKKwkJCQkJCQkJCQkJCQkJ ICAgYW5jZXN0b3JzLAorCQkJCQkJCQkJCQkJCQkgICAmbGV2ZWwpOworCisJCQkJaWYgKGFu Y2VzdG9yICE9IEludmFsaWRPaWQpCisJCQkJeworCQkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQg PSB0cnVlOworCQkJCQlpZiAocHViLT5wdWJ2aWFyb290KQorCQkJCQl7CisJCQkJCQlwdWJf cmVsaWQgPSBhbmNlc3RvcjsKKwkJCQkJCWFuY2VzdG9yX2xldmVsID0gbGV2ZWw7CisJCQkJ CX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChsaXN0X21lbWJlcl9vaWQocHViaWRzLCBwdWIt Pm9pZCkgfHwKKwkJCQlsaXN0X21lbWJlcl9vaWQoc2NoZW1hUHViaWRzLCBwdWItPm9pZCkg fHwKKwkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQpCisJCQkJcHVibGlzaCA9IHRydWU7CisJCX0K KworCQkvKgorCQkgKiBJZiB0aGUgcmVsYXRpb24gaXMgdG8gYmUgcHVibGlzaGVkLCBkZXRl cm1pbmUgYWN0aW9ucyB0bworCQkgKiBwdWJsaXNoLCBhbmQgbGlzdCBvZiBjb2x1bW5zLCBp ZiBhcHByb3ByaWF0ZS4KKwkJICoKKwkJICogRG9uJ3QgcHVibGlzaCBjaGFuZ2VzIGZvciBw YXJ0aXRpb25lZCB0YWJsZXMsIGJlY2F1c2UKKwkJICogcHVibGlzaGluZyB0aG9zZSBvZiBp dHMgcGFydGl0aW9ucyBzdWZmaWNlcywgdW5sZXNzIHBhcnRpdGlvbgorCQkgKiBjaGFuZ2Vz IHdvbid0IGJlIHB1Ymxpc2hlZCBkdWUgdG8gcHVidmlhcm9vdCBiZWluZyBzZXQuCisJCSAq LworCQlpZiAocHVibGlzaCAmJgorCQkJKHJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSB8fCBwdWItPnB1YnZpYXJvb3QpKQorCQl7CisJCQlwdWJhY3Rpb25zLT5wdWJp bnNlcnQgfD0gcHViLT5wdWJhY3Rpb25zLnB1Ymluc2VydDsKKwkJCXB1YmFjdGlvbnMtPnB1 YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlOworCQkJcHViYWN0aW9ucy0+ cHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7CisJCQlwdWJhY3Rpb25z LT5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CisKKwkJCS8q CisJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2ggdGhlIGNoYW5nZXMgYXMgdGhlIHRvcC1tb3N0 IGFuY2VzdG9yCisJCQkgKiBhY3Jvc3MgYWxsIHB1YmxpY2F0aW9ucy4gU28gd2UgbmVlZCB0 byBjaGVjayBpZiB0aGUgYWxyZWFkeQorCQkJICogY2FsY3VsYXRlZCBsZXZlbCBpcyBoaWdo ZXIgdGhhbiB0aGUgbmV3IG9uZS4gSWYgeWVzLCB3ZSBjYW4KKwkJCSAqIGlnbm9yZSB0aGUg bmV3IHZhbHVlIChhcyBpdCdzIGEgY2hpbGQpLiBPdGhlcndpc2UgdGhlIG5ldworCQkJICog dmFsdWUgaXMgYW4gYW5jZXN0b3IsIHNvIHdlIGtlZXAgaXQuCisJCQkgKi8KKwkJCWlmIChw dWJsaXNoX2FuY2VzdG9yX2xldmVsID4gYW5jZXN0b3JfbGV2ZWwpCisJCQkJY29udGludWU7 CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBmb3VuZCBhbiBhbmNlc3RvciBoaWdoZXIgdXAgaW4g dGhlIHRyZWUsIGRpc2NhcmQgdGhlCisJCQkgKiBsaXN0IG9mIHB1YmxpY2F0aW9ucyB0aHJv dWdoIHdoaWNoIHdlIHJlcGxpY2F0ZSBpdCwgYW5kIHVzZQorCQkJICogdGhlIG5ldyBhbmNl c3Rvci4KKwkJCSAqLworCQkJaWYgKHB1Ymxpc2hfYW5jZXN0b3JfbGV2ZWwgPCBhbmNlc3Rv cl9sZXZlbCkKKwkJCXsKKwkJCQkqcHVibGlzaF9hc19yZWxpZCA9IHB1Yl9yZWxpZDsKKwkJ CQlwdWJsaXNoX2FuY2VzdG9yX2xldmVsID0gYW5jZXN0b3JfbGV2ZWw7CisKKwkJCQkvKiBy ZXNldCB0aGUgcHVibGljYXRpb24gbGlzdCBmb3IgdGhpcyByZWxhdGlvbiAqLworCQkJCXJl bF9wdWJsaWNhdGlvbnMgPSBOSUw7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogU2Ft ZSBhbmNlc3RvciBsZXZlbCwgaGFzIHRvIGJlIHRoZSBzYW1lIE9JRC4gKi8KKwkJCQlBc3Nl cnQoKnB1Ymxpc2hfYXNfcmVsaWQgPT0gcHViX3JlbGlkKTsKKwkJCX0KKworCQkJLyogVHJh Y2sgcHVibGljYXRpb25zIGZvciB0aGlzIGFuY2VzdG9yLiAqLworCQkJcmVsX3B1YmxpY2F0 aW9ucyA9IGxhcHBlbmQocmVsX3B1YmxpY2F0aW9ucywgcHViKTsKKwkJfQorCX0KKworCWxp c3RfZnJlZShwdWJpZHMpOworCWxpc3RfZnJlZShzY2hlbWFQdWJpZHMpOworCisJcmV0dXJu IHJlbF9wdWJsaWNhdGlvbnM7Cit9CisKK0RhdHVtCitwZ19nZXRfcmVsYXRpb25fcHVibGlz aGluZ19pbmZvKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJcmVsaWQgPSBQR19HRVRB UkdfT0lEKDApOworCUxpc3QJICAgKnB1YmxpY2F0aW9ucyA9IE5JTDsKKwlBcnJheVR5cGUg ICphcnI7CisJRGF0dW0JICAgKmVsZW1zOworCWludAkJCW5lbGVtcywKKwkJCQlpOworCVR1 cGxlRGVzYwl0dXBkZXNjOworCUhlYXBUdXBsZQlodHVwOworCisJaWYgKGdldF9jYWxsX3Jl c3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lU RSkKKwkJZWxvZyhFUlJPUiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpOwor CisJYXJyID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDEpOworCWRlY29uc3RydWN0X2FycmF5 KGFyciwgVEVYVE9JRCwgLTEsIGZhbHNlLCBUWVBBTElHTl9JTlQsICZlbGVtcywgTlVMTCwK KwkJCQkJICAmbmVsZW1zKTsKKworCS8qIEdldCBPaWRzIG9mIHRhYmxlcyBmcm9tIGVhY2gg cHVibGljYXRpb24uICovCisJZm9yIChpID0gMDsgaSA8IG5lbGVtczsgaSsrKQorCXsKKwkJ Y2hhcgkgICAqcHVibmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoZWxlbXNbaV0pOworCQlQ dWJsaWNhdGlvbiAqcHViID0gR2V0UHVibGljYXRpb25CeU5hbWUocHVibmFtZSwgZmFsc2Up OworCisJCXB1YmxpY2F0aW9ucyA9IGxhcHBlbmQocHVibGljYXRpb25zLCBwdWIpOworCX0K KworCXsKKwkJTGlzdAkgICAqcmVsX3B1YmxpY2F0aW9uczsKKwkJUHVibGljYXRpb25BY3Rp b25zIHB1YmFjdGlvbnM7CisJCU9pZAkJCXB1Ymxpc2hfYXNfcmVsaWQ7CisJCUxpc3RDZWxs ICAgKmxjOworCQlEYXR1bQkgICAqcHVib2lkczsKKwkJQXJyYXlUeXBlICAqcHVib2lkYXJy YXk7CisJCURhdHVtCQl2YWx1ZXNbNl07CisJCWJvb2wJCW51bGxzWzZdOworCisJCXJlbF9w dWJsaWNhdGlvbnMgPQorCQkJcHJvY2Vzc19yZWxhdGlvbl9wdWJsaWNhdGlvbnMocmVsaWQs IHB1YmxpY2F0aW9ucywgJnB1YmFjdGlvbnMsCisJCQkJCQkJCQkJICAmcHVibGlzaF9hc19y ZWxpZCk7CisKKwkJLyogVHJhbnNsYXRlIHRoZSByZWxfcHVibGljYXRpb25zIExpc3QgaW50 byBhbiBPSUQgYXJyYXkuICovCisJCXB1Ym9pZHMgPSBwYWxsb2Moc2l6ZW9mKERhdHVtKSAq IGxpc3RfbGVuZ3RoKHJlbF9wdWJsaWNhdGlvbnMpKTsKKworCQlmb3JlYWNoKGxjLCByZWxf cHVibGljYXRpb25zKQorCQl7CisJCQlQdWJsaWNhdGlvbiAqcHViID0gbGZpcnN0KGxjKTsK KworCQkJaSA9IGZvcmVhY2hfY3VycmVudF9pbmRleChsYyk7CisJCQlwdWJvaWRzW2ldID0g T2JqZWN0SWRHZXREYXR1bShwdWItPm9pZCk7CisJCX0KKworCQlwdWJvaWRhcnJheSA9IGNv bnN0cnVjdF9hcnJheShwdWJvaWRzLCBsaXN0X2xlbmd0aChyZWxfcHVibGljYXRpb25zKSwK KwkJCQkJCQkJCSAgT0lET0lELCBzaXplb2YoT2lkKSwgdHJ1ZSwgVFlQQUxJR05fSU5UKTsK KworCQl2YWx1ZXNbMF0gPSBQb2ludGVyR2V0RGF0dW0ocHVib2lkYXJyYXkpOworCQl2YWx1 ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKHB1Ymxpc2hfYXNfcmVsaWQpOworCQl2YWx1ZXNb Ml0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJpbnNlcnQpOworCQl2YWx1ZXNbM10g PSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ1cGRhdGUpOworCQl2YWx1ZXNbNF0gPSBC b29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZWxldGUpOworCQl2YWx1ZXNbNV0gPSBCb29s R2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisKKwkJbWVtc2V0KG51bGxzLCBm YWxzZSwgc2l6ZW9mKG51bGxzKSk7CisKKwkJaHR1cCA9IGhlYXBfZm9ybV90dXBsZSh0dXBk ZXNjLCB2YWx1ZXMsIG51bGxzKTsKKwl9CisKKwlQR19SRVRVUk5fREFUVU0oSGVhcFR1cGxl R2V0RGF0dW0oaHR1cCkpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKaW5kZXggYjA4Y2E1NTA0MS4uNjQwNjc2ZTdkYyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0xOTg2LDIw ICsxOTg2LDYgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVs YXRpb24gcmVsYXRpb24pCiAJLyogVmFsaWRhdGUgdGhlIGVudHJ5ICovCiAJaWYgKCFlbnRy eS0+cmVwbGljYXRlX3ZhbGlkKQogCXsKLQkJT2lkCQkJc2NoZW1hSWQgPSBnZXRfcmVsX25h bWVzcGFjZShyZWxpZCk7Ci0JCUxpc3QJICAgKnB1YmlkcyA9IEdldFJlbGF0aW9uUHVibGlj YXRpb25zKHJlbGlkKTsKLQotCQkvKgotCQkgKiBXZSBkb24ndCBhY3F1aXJlIGEgbG9jayBv biB0aGUgbmFtZXNwYWNlIHN5c3RlbSB0YWJsZSBhcyB3ZSBidWlsZAotCQkgKiB0aGUgY2Fj aGUgZW50cnkgdXNpbmcgYSBoaXN0b3JpYyBzbmFwc2hvdCBhbmQgYWxsIHRoZSBsYXRlciBj aGFuZ2VzCi0JCSAqIGFyZSBhYnNvcmJlZCB3aGlsZSBkZWNvZGluZyBXQUwuCi0JCSAqLwot CQlMaXN0CSAgICpzY2hlbWFQdWJpZHMgPSBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1h SWQpOwotCQlMaXN0Q2VsbCAgICpsYzsKLQkJT2lkCQkJcHVibGlzaF9hc19yZWxpZCA9IHJl bGlkOwotCQlpbnQJCQlwdWJsaXNoX2FuY2VzdG9yX2xldmVsID0gMDsKLQkJYm9vbAkJYW1f cGFydGl0aW9uID0gZ2V0X3JlbF9yZWxpc3BhcnRpdGlvbihyZWxpZCk7Ci0JCWNoYXIJCXJl bGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQocmVsaWQpOwogCQlMaXN0CSAgICpyZWxfcHVibGlj YXRpb25zID0gTklMOwogCiAJCS8qIFJlbG9hZCBwdWJsaWNhdGlvbnMgaWYgbmVlZGVkIGJl Zm9yZSB1c2UuICovCkBAIC0yMDYzLDEyMyArMjA0OSwxMCBAQCBnZXRfcmVsX3N5bmNfZW50 cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJICogYnV0IGhl cmUgd2Ugb25seSBuZWVkIHRvIGNvbnNpZGVyIG9uZXMgdGhhdCB0aGUgc3Vic2NyaWJlcgog CQkgKiByZXF1ZXN0ZWQuCiAJCSAqLwotCQlmb3JlYWNoKGxjLCBkYXRhLT5wdWJsaWNhdGlv bnMpCi0JCXsKLQkJCVB1YmxpY2F0aW9uICpwdWIgPSBsZmlyc3QobGMpOwotCQkJYm9vbAkJ cHVibGlzaCA9IGZhbHNlOwotCi0JCQkvKgotCQkJICogVW5kZXIgd2hhdCByZWxpZCBzaG91 bGQgd2UgcHVibGlzaCBjaGFuZ2VzIGluIHRoaXMgcHVibGljYXRpb24/Ci0JCQkgKiBXZSds bCB1c2UgdGhlIHRvcC1tb3N0IHJlbGlkIGFjcm9zcyBhbGwgcHVibGljYXRpb25zLiBBbHNv Ci0JCQkgKiB0cmFjayB0aGUgYW5jZXN0b3IgbGV2ZWwgZm9yIHRoaXMgcHVibGljYXRpb24u Ci0JCQkgKi8KLQkJCU9pZAkJCXB1Yl9yZWxpZCA9IHJlbGlkOwotCQkJaW50CQkJYW5jZXN0 b3JfbGV2ZWwgPSAwOwotCi0JCQkvKgotCQkJICogSWYgdGhpcyBpcyBhIEZPUiBBTEwgVEFC TEVTIHB1YmxpY2F0aW9uLCBwaWNrIHRoZSBwYXJ0aXRpb24KLQkJCSAqIHJvb3QgYW5kIHNl dCB0aGUgYW5jZXN0b3IgbGV2ZWwgYWNjb3JkaW5nbHkuCi0JCQkgKi8KLQkJCWlmIChwdWIt PmFsbHRhYmxlcykKLQkJCXsKLQkJCQlwdWJsaXNoID0gdHJ1ZTsKLQkJCQlpZiAocHViLT5w dWJ2aWFyb290ICYmIGFtX3BhcnRpdGlvbikKLQkJCQl7Ci0JCQkJCUxpc3QJICAgKmFuY2Vz dG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKTsKLQotCQkJCQlwdWJfcmVs aWQgPSBsbGFzdF9vaWQoYW5jZXN0b3JzKTsKLQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsaXN0 X2xlbmd0aChhbmNlc3RvcnMpOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKCFwdWJsaXNoKQot CQkJewotCQkJCWJvb2wJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IGZhbHNlOwotCi0JCQkJLyoK LQkJCQkgKiBGb3IgYSBwYXJ0aXRpb24sIGNoZWNrIGlmIGFueSBvZiB0aGUgYW5jZXN0b3Jz IGFyZQotCQkJCSAqIHB1Ymxpc2hlZC4gIElmIHNvLCBub3RlIGRvd24gdGhlIHRvcG1vc3Qg YW5jZXN0b3IgdGhhdCBpcwotCQkJCSAqIHB1Ymxpc2hlZCB2aWEgdGhpcyBwdWJsaWNhdGlv biwgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIHRoZQotCQkJCSAqIHJlbGF0aW9uIHZpYSB3aGlj aCB0byBwdWJsaXNoIHRoZSBwYXJ0aXRpb24ncyBjaGFuZ2VzLgotCQkJCSAqLwotCQkJCWlm IChhbV9wYXJ0aXRpb24pCi0JCQkJewotCQkJCQlPaWQJCQlhbmNlc3RvcjsKLQkJCQkJaW50 CQkJbGV2ZWw7Ci0JCQkJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5j ZXN0b3JzKHJlbGlkKTsKLQotCQkJCQlhbmNlc3RvciA9IEdldFRvcE1vc3RBbmNlc3Rvcklu UHVibGljYXRpb24ocHViLT5vaWQsCi0JCQkJCQkJCQkJCQkJCQkgICBhbmNlc3RvcnMsCi0J CQkJCQkJCQkJCQkJCQkgICAmbGV2ZWwpOwotCi0JCQkJCWlmIChhbmNlc3RvciAhPSBJbnZh bGlkT2lkKQotCQkJCQl7Ci0JCQkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQgPSB0cnVlOwotCQkJ CQkJaWYgKHB1Yi0+cHVidmlhcm9vdCkKLQkJCQkJCXsKLQkJCQkJCQlwdWJfcmVsaWQgPSBh bmNlc3RvcjsKLQkJCQkJCQlhbmNlc3Rvcl9sZXZlbCA9IGxldmVsOwotCQkJCQkJfQotCQkJ CQl9Ci0JCQkJfQotCi0JCQkJaWYgKGxpc3RfbWVtYmVyX29pZChwdWJpZHMsIHB1Yi0+b2lk KSB8fAotCQkJCQlsaXN0X21lbWJlcl9vaWQoc2NoZW1hUHViaWRzLCBwdWItPm9pZCkgfHwK LQkJCQkJYW5jZXN0b3JfcHVibGlzaGVkKQotCQkJCQlwdWJsaXNoID0gdHJ1ZTsKLQkJCX0K LQotCQkJLyoKLQkJCSAqIElmIHRoZSByZWxhdGlvbiBpcyB0byBiZSBwdWJsaXNoZWQsIGRl dGVybWluZSBhY3Rpb25zIHRvCi0JCQkgKiBwdWJsaXNoLCBhbmQgbGlzdCBvZiBjb2x1bW5z LCBpZiBhcHByb3ByaWF0ZS4KLQkJCSAqCi0JCQkgKiBEb24ndCBwdWJsaXNoIGNoYW5nZXMg Zm9yIHBhcnRpdGlvbmVkIHRhYmxlcywgYmVjYXVzZQotCQkJICogcHVibGlzaGluZyB0aG9z ZSBvZiBpdHMgcGFydGl0aW9ucyBzdWZmaWNlcywgdW5sZXNzIHBhcnRpdGlvbgotCQkJICog Y2hhbmdlcyB3b24ndCBiZSBwdWJsaXNoZWQgZHVlIHRvIHB1YnZpYXJvb3QgYmVpbmcgc2V0 LgotCQkJICovCi0JCQlpZiAocHVibGlzaCAmJgotCQkJCShyZWxraW5kICE9IFJFTEtJTkRf UEFSVElUSU9ORURfVEFCTEUgfHwgcHViLT5wdWJ2aWFyb290KSkKLQkJCXsKLQkJCQllbnRy eS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgfD0gcHViLT5wdWJhY3Rpb25zLnB1Ymluc2VydDsK LQkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1 YnVwZGF0ZTsKLQkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViLT5wdWJh Y3Rpb25zLnB1YmRlbGV0ZTsKLQkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8 PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7Ci0KLQkJCQkvKgotCQkJCSAqIFdlIHdh bnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKLQkJ CQkgKiBhY3Jvc3MgYWxsIHB1YmxpY2F0aW9ucy4gU28gd2UgbmVlZCB0byBjaGVjayBpZiB0 aGUgYWxyZWFkeQotCQkJCSAqIGNhbGN1bGF0ZWQgbGV2ZWwgaXMgaGlnaGVyIHRoYW4gdGhl IG5ldyBvbmUuIElmIHllcywgd2UgY2FuCi0JCQkJICogaWdub3JlIHRoZSBuZXcgdmFsdWUg KGFzIGl0J3MgYSBjaGlsZCkuIE90aGVyd2lzZSB0aGUgbmV3Ci0JCQkJICogdmFsdWUgaXMg YW4gYW5jZXN0b3IsIHNvIHdlIGtlZXAgaXQuCi0JCQkJICovCi0JCQkJaWYgKHB1Ymxpc2hf YW5jZXN0b3JfbGV2ZWwgPiBhbmNlc3Rvcl9sZXZlbCkKLQkJCQkJY29udGludWU7Ci0KLQkJ CQkvKgotCQkJCSAqIElmIHdlIGZvdW5kIGFuIGFuY2VzdG9yIGhpZ2hlciB1cCBpbiB0aGUg dHJlZSwgZGlzY2FyZCB0aGUKLQkJCQkgKiBsaXN0IG9mIHB1YmxpY2F0aW9ucyB0aHJvdWdo IHdoaWNoIHdlIHJlcGxpY2F0ZSBpdCwgYW5kIHVzZQotCQkJCSAqIHRoZSBuZXcgYW5jZXN0 b3IuCi0JCQkJICovCi0JCQkJaWYgKHB1Ymxpc2hfYW5jZXN0b3JfbGV2ZWwgPCBhbmNlc3Rv cl9sZXZlbCkKLQkJCQl7Ci0JCQkJCXB1Ymxpc2hfYXNfcmVsaWQgPSBwdWJfcmVsaWQ7Ci0J CQkJCXB1Ymxpc2hfYW5jZXN0b3JfbGV2ZWwgPSBhbmNlc3Rvcl9sZXZlbDsKLQotCQkJCQkv KiByZXNldCB0aGUgcHVibGljYXRpb24gbGlzdCBmb3IgdGhpcyByZWxhdGlvbiAqLwotCQkJ CQlyZWxfcHVibGljYXRpb25zID0gTklMOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJ CQkvKiBTYW1lIGFuY2VzdG9yIGxldmVsLCBoYXMgdG8gYmUgdGhlIHNhbWUgT0lELiAqLwot CQkJCQlBc3NlcnQocHVibGlzaF9hc19yZWxpZCA9PSBwdWJfcmVsaWQpOwotCQkJCX0KLQot CQkJCS8qIFRyYWNrIHB1YmxpY2F0aW9ucyBmb3IgdGhpcyBhbmNlc3Rvci4gKi8KLQkJCQly ZWxfcHVibGljYXRpb25zID0gbGFwcGVuZChyZWxfcHVibGljYXRpb25zLCBwdWIpOwotCQkJ fQotCQl9Ci0KLQkJZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgPSBwdWJsaXNoX2FzX3JlbGlk OworCQlyZWxfcHVibGljYXRpb25zID0KKwkJCXByb2Nlc3NfcmVsYXRpb25fcHVibGljYXRp b25zKHJlbGlkLCBkYXRhLT5wdWJsaWNhdGlvbnMsCisJCQkJCQkJCQkJICAmZW50cnktPnB1 YmFjdGlvbnMsCisJCQkJCQkJCQkJICAmZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQpOwogCiAJ CS8qCiAJCSAqIEluaXRpYWxpemUgdGhlIHR1cGxlIHNsb3QsIG1hcCwgYW5kIHJvdyBmaWx0 ZXIuIFRoZXNlIGFyZSBvbmx5IHVzZWQKQEAgLTIxOTgsOCArMjA3MSw2IEBAIGdldF9yZWxf c3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJ cGdvdXRwdXRfY29sdW1uX2xpc3RfaW5pdChkYXRhLCByZWxfcHVibGljYXRpb25zLCBlbnRy eSk7CiAJCX0KIAotCQlsaXN0X2ZyZWUocHViaWRzKTsKLQkJbGlzdF9mcmVlKHNjaGVtYVB1 Ymlkcyk7CiAJCWxpc3RfZnJlZShyZWxfcHVibGljYXRpb25zKTsKIAogCQllbnRyeS0+cmVw bGljYXRlX3ZhbGlkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDY5 OTYwNzM5ODkuLmVkNjcxNjgzNzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAt MTE4MzMsNiArMTE4MzMsMTQgQEAKICAgcHJvbmFtZSA9PiAncGdfcmVsYXRpb25faXNfcHVi bGlzaGFibGUnLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3JldHR5cGUgPT4gJ2Jvb2wn LCBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MnLAogICBwcm9zcmMgPT4gJ3BnX3JlbGF0aW9u X2lzX3B1Ymxpc2hhYmxlJyB9LAoreyBvaWQgPT4gJzgxMzknLAorICBkZXNjciA9PiAnZ2V0 IGluZm9ybWF0aW9uIG9uIGhvdyBhIHJlbGF0aW9uIHdpbGwgYmUgcHVibGlzaGVkIHZpYSBh IGxpc3Qgb2YgcHVibGljYXRpb25zJywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X3JlbGF0aW9u X3B1Ymxpc2hpbmdfaW5mbycsIHByb3ZhcmlhZGljID0+ICd0ZXh0JywKKyAgcHJvdm9sYXRp bGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAncmVn Y2xhc3MgX3RleHQnLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne3JlZ2NsYXNzLF90ZXh0LF9v aWQsb2lkLGJvb2wsYm9vbCxib29sLGJvb2x9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tpLHYs byxvLG8sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tyZWxpZCxwdWJuYW1lcyxwdWJp ZHMscHViYXNyZWxpZCxwdWJpbnNlcnQscHVidXBkYXRlLHB1YmRlbGV0ZSxwdWJ0cnVuY2F0 ZX0nLAorICBwcm9zcmMgPT4gJ3BnX2dldF9yZWxhdGlvbl9wdWJsaXNoaW5nX2luZm8nIH0s CiAKICMgcmxzCiB7IG9pZCA9PiAnMzI5OCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmgKaW5kZXggNmVjYWEyYTAxZS4uZDRlMzQ4ODkxNyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtMTU1LDQgKzE1NSw4IEBAIGV4dGVybiBPYmpl Y3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHB1YmlkLCBPaWQgc2NoZW1h aWQsCiBleHRlcm4gQml0bWFwc2V0ICpwdWJfY29sbGlzdF90b19iaXRtYXBzZXQoQml0bWFw c2V0ICpjb2x1bW5zLCBEYXR1bSBwdWJjb2xzLAogCQkJCQkJCQkJCSAgIE1lbW9yeUNvbnRl eHQgbWN4dCk7CiAKK2V4dGVybiBMaXN0ICpwcm9jZXNzX3JlbGF0aW9uX3B1YmxpY2F0aW9u cyhPaWQgcmVsaWQsIGNvbnN0IExpc3QgKnB1YmxpY2F0aW9ucywKKwkJCQkJCQkJCQkgICBQ dWJsaWNhdGlvbkFjdGlvbnMgKnB1YmFjdGlvbnMsCisJCQkJCQkJCQkJICAgT2lkICpwdWJs aXNoX2FzX3JlbGlkKTsKKwogI2VuZGlmCQkJCQkJCS8qIFBHX1BVQkxJQ0FUSU9OX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNjlk YzZjZmQ4NS4uZGQ4ZmM5OTExMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w dWJsaWNhdGlvbi5vdXQKQEAgLTUsNiArNSwxNyBAQCBDUkVBVEUgUk9MRSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgTE9HSU4gU1VQRVJVU0VSOwogQ1JFQVRFIFJPTEUgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyMjsKIENSRUFURSBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl cl9kdW1teSBMT0dJTiBOT1NVUEVSVVNFUjsKIFNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04g J3JlZ3Jlc3NfcHVibGljYXRpb25fdXNlcic7CitDUkVBVEUgRlVOQ1RJT04gcHVibGlzaGVk X3N0cmVhbSAoVkFSSUFESUMgcHVibmFtZXMgdGV4dFtdKQorICAgICAgICAgICAgICAgIFJF VFVSTlMgVEFCTEUgKHB1Ym5hbWUgdGV4dCwgcHVibGlzaGVkIHJlZ2NsYXNzLCBzeW5jZWQg cmVnY2xhc3MpIEFTICQkCisgIC0tIEZvciBlYWNoIHB1YmxpY2F0aW9uLCBzaG93IGVhY2gg cHVibGlzaGVkIHJvb3QgYWxvbmdzaWRlIHRoZSB0YWJsZXMgd2hpY2gKKyAgLS0gYXJlIHB1 Ymxpc2hlZCB2aWEgaXRzIE9JRC4KKyAgU0VMRUNUIHAucHVibmFtZSwgcnBpLnB1YmFzcmVs aWQ6OnJlZ2NsYXNzLCBwci5wcnJlbGlkOjpyZWdjbGFzcworICAgIEZST00gcGdfcHVibGlj YXRpb25fcmVsIHByCisgICAgSk9JTiBwZ19wdWJsaWNhdGlvbiBwIE9OIChwLm9pZCA9IHBy LnBycHViaWQpLAorICAgICAgICAgcGdfZ2V0X3JlbGF0aW9uX3B1Ymxpc2hpbmdfaW5mbyhw ci5wcnJlbGlkLCBWQVJJQURJQyBwdWJuYW1lcykgcnBpCisgICBXSEVSRSBwLnB1Ym5hbWUg PSBBTlkgKHB1Ym5hbWVzKQorICAgT1JERVIgQlkgcC5vaWQsIDIsIDM7CiskJCBMQU5HVUFH RSBzcWw7CiAtLSBzdXBwcmVzcyB3YXJuaW5nIHRoYXQgZGVwZW5kcyBvbiB3YWxfbGV2ZWwK IFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViX2RlZmF1bHQ7CkBAIC0xNjg2LDYgKzE2OTcsMTMgQEAgU0VMRUNUICogRlJP TSBwZ19wdWJsaWNhdGlvbl90YWJsZXM7CiAgcHViICAgICB8IHNjaDEgICAgICAgfCB0Ymwx ICAgICAgfCB7YX0gICAgICB8IAogKDEgcm93KQogCitTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hl ZF9zdHJlYW0oJ3B1YicpOworIHB1Ym5hbWUgfCBwdWJsaXNoZWQgfCAgICAgc3luY2VkICAg ICAgCistLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KKyBwdWIgICAg IHwgc2NoMS50YmwxIHwgc2NoMS50YmwxCisgcHViICAgICB8IHNjaDEudGJsMSB8IHNjaDIu dGJsMV9wYXJ0MQorKDIgcm93cykKKwogRFJPUCBQVUJMSUNBVElPTiBwdWI7CiAtLSBTY2hl bWEgcHVibGljYXRpb24gdGhhdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzY2hlbWEgdGhhdCBo YXMgdGhlIHBhcmVudCB0YWJsZQogQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YiBGT1IgVEFCTEVT IElOIFNDSEVNQSBzY2gyIFdJVEggKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTApOwpA QCAtMTcxMiw2ICsxNzMwLDEzIEBAIFNFTEVDVCAqIEZST00gcGdfcHVibGljYXRpb25fdGFi bGVzOwogIHB1YiAgICAgfCBzY2gyICAgICAgIHwgdGJsMV9wYXJ0MSB8IHthfSAgICAgIHwg CiAoMSByb3cpCiAKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgncHViJyk7Cisg cHVibmFtZSB8ICAgIHB1Ymxpc2hlZCAgICB8ICAgICBzeW5jZWQgICAgICAKKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLQorIHB1YiAgICAgfCBzY2gx LnRibDEgICAgICAgfCBzY2gxLnRibDEKKyBwdWIgICAgIHwgc2NoMi50YmwxX3BhcnQxIHwg c2NoMi50YmwxX3BhcnQxCisoMiByb3dzKQorCiBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsKIERS T1AgVEFCTEUgc2NoMi50YmwxX3BhcnQxOwogRFJPUCBUQUJMRSBzY2gxLnRibDE7CkBAIC0x NzMyLDYgKzE3NTcsNyBAQCBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsKIERST1AgVEFCTEUgc2No MS50YmwxOwogRFJPUCBTQ0hFTUEgc2NoMSBjYXNjYWRlOwogRFJPUCBTQ0hFTUEgc2NoMiBj YXNjYWRlOworRFJPUCBGVU5DVElPTiBwdWJsaXNoZWRfc3RyZWFtOwogUkVTRVQgU0VTU0lP TiBBVVRIT1JJWkFUSU9OOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXJfZHVtbXk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJs aWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5k ZXggZDUwNTFhNWU3NC4uNmJmOTU1NGQ0OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcHVibGljYXRpb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1Ymxp Y2F0aW9uLnNxbApAQCAtNiw2ICs2LDE4IEBAIENSRUFURSBST0xFIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlcjI7CiBDUkVBVEUgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXJfZHVt bXkgTE9HSU4gTk9TVVBFUlVTRVI7CiBTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OICdyZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXInOwogCitDUkVBVEUgRlVOQ1RJT04gcHVibGlzaGVkX3N0 cmVhbSAoVkFSSUFESUMgcHVibmFtZXMgdGV4dFtdKQorICAgICAgICAgICAgICAgIFJFVFVS TlMgVEFCTEUgKHB1Ym5hbWUgdGV4dCwgcHVibGlzaGVkIHJlZ2NsYXNzLCBzeW5jZWQgcmVn Y2xhc3MpIEFTICQkCisgIC0tIEZvciBlYWNoIHB1YmxpY2F0aW9uLCBzaG93IGVhY2ggcHVi bGlzaGVkIHJvb3QgYWxvbmdzaWRlIHRoZSB0YWJsZXMgd2hpY2gKKyAgLS0gYXJlIHB1Ymxp c2hlZCB2aWEgaXRzIE9JRC4KKyAgU0VMRUNUIHAucHVibmFtZSwgcnBpLnB1YmFzcmVsaWQ6 OnJlZ2NsYXNzLCBwci5wcnJlbGlkOjpyZWdjbGFzcworICAgIEZST00gcGdfcHVibGljYXRp b25fcmVsIHByCisgICAgSk9JTiBwZ19wdWJsaWNhdGlvbiBwIE9OIChwLm9pZCA9IHByLnBy cHViaWQpLAorICAgICAgICAgcGdfZ2V0X3JlbGF0aW9uX3B1Ymxpc2hpbmdfaW5mbyhwci5w cnJlbGlkLCBWQVJJQURJQyBwdWJuYW1lcykgcnBpCisgICBXSEVSRSBwLnB1Ym5hbWUgPSBB TlkgKHB1Ym5hbWVzKQorICAgT1JERVIgQlkgcC5vaWQsIDIsIDM7CiskJCBMQU5HVUFHRSBz cWw7CisKIC0tIHN1cHByZXNzIHdhcm5pbmcgdGhhdCBkZXBlbmRzIG9uIHdhbF9sZXZlbAog U0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWJfZGVmYXVsdDsKQEAgLTEwNjQsNiArMTA3Niw3IEBAIFNFTEVDVCAqIEZST00g cGdfcHVibGljYXRpb25fdGFibGVzOwogLS0gVGFibGUgcHVibGljYXRpb24gdGhhdCBpbmNs dWRlcyBib3RoIHRoZSBwYXJlbnQgdGFibGUgYW5kIHRoZSBjaGlsZCB0YWJsZQogQUxURVIg UFVCTElDQVRJT04gcHViIEFERCBUQUJMRSBzY2gxLnRibDE7CiBTRUxFQ1QgKiBGUk9NIHBn X3B1YmxpY2F0aW9uX3RhYmxlczsKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgn cHViJyk7CiAKIERST1AgUFVCTElDQVRJT04gcHViOwogLS0gU2NoZW1hIHB1YmxpY2F0aW9u IHRoYXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc2NoZW1hIHRoYXQgaGFzIHRoZSBwYXJlbnQg dGFibGUKQEAgLTEwNzgsNiArMTA5MSw3IEBAIFNFTEVDVCAqIEZST00gcGdfcHVibGljYXRp b25fdGFibGVzOwogLS0gVGFibGUgcHVibGljYXRpb24gdGhhdCBpbmNsdWRlcyBib3RoIHRo ZSBwYXJlbnQgdGFibGUgYW5kIHRoZSBjaGlsZCB0YWJsZQogQUxURVIgUFVCTElDQVRJT04g cHViIEFERCBUQUJMRSBzY2gxLnRibDE7CiBTRUxFQ1QgKiBGUk9NIHBnX3B1YmxpY2F0aW9u X3RhYmxlczsKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgncHViJyk7CiAKIERS T1AgUFVCTElDQVRJT04gcHViOwogRFJPUCBUQUJMRSBzY2gyLnRibDFfcGFydDE7CkBAIC0x MDk2LDYgKzExMTAsNyBAQCBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsKIERST1AgVEFCTEUgc2No MS50YmwxOwogRFJPUCBTQ0hFTUEgc2NoMSBjYXNjYWRlOwogRFJPUCBTQ0hFTUEgc2NoMiBj YXNjYWRlOworRFJPUCBGVU5DVElPTiBwdWJsaXNoZWRfc3RyZWFtOwogCiBSRVNFVCBTRVNT SU9OIEFVVEhPUklaQVRJT047CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy LCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwotLSAKMi4yNS4xCgo= --------------t3G0JkSKKjR0VSJl6T1XOBWh Content-Type: text/x-patch; charset=UTF-8; name="v3-0002-WIP-introduce-publish_via_parent-for-logical-repl.patch" Content-Disposition: attachment; filename*0="v3-0002-WIP-introduce-publish_via_parent-for-logical-repl.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhNDg1NjM5MTllMGQ0YTcwYjcxMTU1NTFhNWQwNjFiMmUxN2I1MjQzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amNoYW1waW9uQHRpbWVz Y2FsZS5jb20+CkRhdGU6IE1vbiwgMjYgU2VwIDIwMjIgMTM6MjM6NTEgLTA3MDAKU3ViamVj dDogW1BBVENIIHYzIDIvMl0gV0lQOiBpbnRyb2R1Y2UgcHVibGlzaF92aWFfcGFyZW50IGZv ciBsb2dpY2FsCiByZXBsaWNhdGlvbgoKVGhpcyBuZXcgcmVsYXRpb24gb3B0aW9uIGFsbG93 cyByZWd1bGFyIGluaGVyaXRlZCB0YWJsZXMgdG8gYmUgcHVibGlzaGVkCnZpYSB0aGVpciBy b290IHRhYmxlLCBqdXN0IGxpa2UgcGFydGl0aW9ucy4gVGhpcyB3b3JrcyBieSBoaWphY2tp bmcKcGdfaW5oZXJpdCdzIGluaHNlcW5vIGNvbHVtbiwgYW5kIHJlcGxhY2luZyBhIChzaW5n bGUpIGV4aXN0aW5nIGVudHJ5CmZvciB0aGUgY2hpbGQgd2l0aCB0aGUgdmFsdWUgemVybywg aW5kaWNhdGluZyB0aGF0IGl0IHNob3VsZCBiZSB0cmVhdGVkCmFzIGEgbG9naWNhbCBwYXJ0 aXRpb24gYnkgdGhlIHB1YmxpY2F0aW9uIG1hY2hpbmVyeS4KCkluaXRpYWwgc3luYyB3b3Jr cyBieSBhc2tpbmcgdGhlIHB1Ymxpc2hlciBmb3IgYSBsaXN0IG9mIGxvZ2ljYWwKZGVzY2Vu ZGFudHMgb2YgdGhlIHB1Ymxpc2hlZCB0YWJsZSwgdGhlbiBDT1BZaW5nIHRoZW0gb25lLWJ5 LW9uZSBpbnRvCnRoZSByb290LiBUaGUgcHVibGlzaGVyIHJldXNlcyB0aGUgZXhpc3Rpbmcg cHVidmlhcm9vdCBsb2dpYywgYWRkaW5nIHRoZQpuZXcgbG9naWNhbCByb290cyB0byBjb2Rl IHRoYXQgcHJldmlvdXNseSBsb29rZWQgb25seSBmb3IgcGFydGl0aW9uCnJvb3RzLgoKS25v d24gYnVncy9UT0RPczoKLSBJZiB0d28gcHVibGljYXRpb25zIHB1Ymxpc2ggdGhlIHNhbWUg bGVhdmVzIG9mIGEgdGFibGUgaGllcmFyY2h5LCBidXQKICBoYXZlIGRpZmZlcmVudCByb290 cywgdGhlIHNoYXJlZCBsZWFmIHRhYmxlcyB3aWxsIGJlIGluY29ycmVjdGx5CiAgZHVwbGlj YXRlZCB3aGVuIHN1YnNjcmliaW5nIHRvIGJvdGggcHVibGljYXRpb25zIHNpbXVsdGFuZW91 c2x5LgotIEkgaGF2ZW4ndCBnaXZlbiBhbnkgdGhvdWdodCB0byBpbnRlcmFjdGlvbnMgd2l0 aCByb3cgZmlsdGVycywgb3IgdG8KICBjb2x1bW4gbGlzdHMuCi0gSSdtIG5vdCBzdXJlIHRo YXQgSSdtIHRha2luZyBhbGwgdGhlIG5lY2Vzc2FyeSBsb2NrcyB5ZXQsIGFuZCB0aG9zZSBJ CiAgZG8gdGFrZSBtYXkgYmUgdGFrZW4gaW4gdGhlIHdyb25nIG9yZGVyLgotLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jICAgICAgfCAgMTEgKwogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jICAgICAgICAgICB8IDEyMyArKysrKysrLQog c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICB8IDI4NCArKysr KysrKysrKysrLS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5j ICAgICAgfCAgMTAgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAg ICAgICB8IDE2MSArKysrKysrKystCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGRl c2MuYyAgICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3RhYmxlc3luYy5jIHwgMjU3ICsrKysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgfCAgIDEgLQogc3JjL2Jpbi9wZ19kdW1wL3Qv MDAyX3BnX2R1bXAucGwgICAgICAgICAgICB8ICAyNCArKwogc3JjL2Jpbi9wc3FsL3RhYi1j b21wbGV0ZS5jICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX2luaGVyaXRzLmggICAgICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0ICAgICAgICAgICAgIHwgICA3ICsKIHNyYy9pbmNsdWRlL3V0aWxzL3Jl bC5oICAgICAgICAgICAgICAgICAgICAgfCAgMTIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQgICB8IDMxNSArKysrKysrKysrKysrKysrKysrKwogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsICAgICAgICB8IDE0MCArKysrKysr KysKIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxM19wYXJ0aXRpb24ucGwgICAgfCAzMTIg KysrKysrKysrKysrKysrKysrKwogMTYgZmlsZXMgY2hhbmdlZCwgMTQ5MCBpbnNlcnRpb25z KCspLCAxNzkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2NvbW1vbi9yZWxvcHRpb25zLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9w dGlvbnMuYwppbmRleCAxMWNjNDMxNjc3Li42ZDAxZTI0NzdkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYwpAQCAtMTIyLDYgKzEyMiwxNSBAQCBzdGF0aWMg cmVsb3B0X2Jvb2wgYm9vbFJlbE9wdHNbXSA9CiAJCX0sCiAJCWZhbHNlCiAJfSwKKwl7CisJ CXsKKwkJCSJwdWJsaXNoX3ZpYV9wYXJlbnQiLAorCQkJIlJlcGxpY2F0ZSB0aGlzIHRhYmxl J3MgY29udGVudHMgdmlhIGl0cyBwYXJlbnQgdGFibGUgd2hlbiBwdWJsaXNoaW5nIHdpdGgg cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLAorCQkJUkVMT1BUX0tJTkRfSEVBUCwKKwkJ CUFjY2Vzc0V4Y2x1c2l2ZUxvY2sKKwkJfSwKKwkJZmFsc2UKKwl9LAogCXsKIAkJewogCQkJ ImZhc3R1cGRhdGUiLApAQCAtMTg3Nyw2ICsxODg2LDggQEAgZGVmYXVsdF9yZWxvcHRpb25z KERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUsIHJlbG9wdF9raW5kIGtpbmQpCiAJ CW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBvZmZzZXRvZihBdXRvVmFj T3B0cywgYW5hbHl6ZV9zY2FsZV9mYWN0b3IpfSwKIAkJeyJ1c2VyX2NhdGFsb2dfdGFibGUi LCBSRUxPUFRfVFlQRV9CT09MLAogCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIHVzZXJfY2F0 YWxvZ190YWJsZSl9LAorCQl7InB1Ymxpc2hfdmlhX3BhcmVudCIsIFJFTE9QVF9UWVBFX0JP T0wsCisJCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgcHVibGlzaF92aWFfcGFyZW50KX0sCiAJ CXsicGFyYWxsZWxfd29ya2VycyIsIFJFTE9QVF9UWVBFX0lOVCwKIAkJb2Zmc2V0b2YoU3Rk UmRPcHRpb25zLCBwYXJhbGxlbF93b3JrZXJzKX0sCiAJCXsidmFjdXVtX2luZGV4X2NsZWFu dXAiLCBSRUxPUFRfVFlQRV9FTlVNLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19pbmhlcml0cy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCmlu ZGV4IGRhOTY5YmQyZjkuLmNmOTA3Njk0NTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfaW5oZXJpdHMuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVy aXRzLmMKQEAgLTI0LDE0ICsyNCwyMiBAQAogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgog I2luY2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2lu aGVyaXRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgogI2luY2x1ZGUg InN0b3JhZ2UvbG1nci5oIgorI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRl ICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgi CiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAorc3RhdGljIExpc3QgKiBmaW5kX2Fs bF9pbmhlcml0b3JzX2ludGVybmFsKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01PREUgbG9ja21v ZGUsCisJCQkJCQkJCQkJICAgTGlzdCAqKm51bXBhcmVudHMsIGJvb2wgbG9naWNhbF9vbmx5 KTsKKwogLyoKICAqIEVudHJ5IG9mIGEgaGFzaCB0YWJsZSB1c2VkIGluIGZpbmRfYWxsX2lu aGVyaXRvcnMuIFNlZSBiZWxvdy4KICAqLwpAQCAtNTksMTQgKzY3LDE0IEBAIExpc3QgKgog ZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbihPaWQgcGFyZW50cmVsSWQsIExPQ0tNT0RFIGxv Y2ttb2RlKQogewogCXJldHVybiBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVk KHBhcmVudHJlbElkLCB0cnVlLCBsb2NrbW9kZSwKLQkJCQkJCQkJCQkJICBOVUxMLCBOVUxM KTsKKwkJCQkJCQkJCQkJICBOVUxMLCBOVUxMLCBmYWxzZSk7CiB9CiAKIC8qCiAgKiBmaW5k X2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkCiAgKgogICogQXMgZmluZF9pbmhlcml0 YW5jZV9jaGlsZHJlbiwgd2l0aCBtb3JlIG9wdGlvbnMgcmVnYXJkaW5nIGRldGFjaGVkCi0g KiBwYXJ0aXRpb25zLgorICogcGFydGl0aW9ucyBhbmQgbG9naWNhbCByb290cy4KICAqCiAg KiBJZiBhIHBhcnRpdGlvbidzIHBnX2luaGVyaXRzIHJvdyBpcyBtYXJrZWQgImRldGFjaCBw ZW5kaW5nIiwKICAqICpkZXRhY2hlZF9leGlzdCAoaWYgbm90IG51bGwpIGlzIHNldCB0cnVl LgpAQCAtNzgsMTYgKzg2LDIxIEBAIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oT2lkIHBh cmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSkKICAqIHdoZXRoZXIgdGhlIHRyYW5zYWN0 aW9uIHRoYXQgbWFya2VkIHRob3NlIHBhcnRpdGlvbnMgYXMgZGV0YWNoZWQgYXBwZWFycwog ICogY29tbWl0dGVkIHRvIHRoZSBhY3RpdmUgc25hcHNob3QuICBJbiBhZGRpdGlvbiwgKmRl dGFjaGVkX3htaW4gKGlmIG5vdCBudWxsKQogICogaXMgc2V0IHRvIHRoZSB4bWluIG9mIHRo ZSByb3cgb2YgdGhlIGRldGFjaGVkIHBhcnRpdGlvbi4KKyAqCisgKiBJZiBsb2dpY2FsX29u bHkgaXMgdHJ1ZSwgb25seSB0YWJsZXMgbWFya2VkIGV4cGxpY2l0bHkgdmlhIHB1Ymxpc2hf dmlhX3BhcmVudAorICogYXJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgbGlzdC4KICAqLwog TGlzdCAqCiBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRy ZWxJZCwgYm9vbCBvbWl0X2RldGFjaGVkLAogCQkJCQkJCQkgICBMT0NLTU9ERSBsb2NrbW9k ZSwgYm9vbCAqZGV0YWNoZWRfZXhpc3QsCi0JCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKmRl dGFjaGVkX3htaW4pCisJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKmRldGFjaGVkX3htaW4s CisJCQkJCQkJCSAgIGJvb2wgbG9naWNhbF9vbmx5KQogewogCUxpc3QJICAgKmxpc3QgPSBO SUw7CiAJUmVsYXRpb24JcmVsYXRpb247CisJT2lkCQkJaW5kZXg7CiAJU3lzU2NhbkRlc2Mg c2NhbjsKLQlTY2FuS2V5RGF0YSBrZXlbMV07CisJU2NhbktleURhdGEga2V5WzJdOwogCUhl YXBUdXBsZQlpbmhlcml0c1R1cGxlOwogCU9pZAkJCWluaHJlbGlkOwogCU9pZAkJICAgKm9p ZGFycjsKQEAgLTExMCwxNCArMTIzLDI0IEBAIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5f ZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0YWNoZWQsCiAJbnVtb2lk cyA9IDA7CiAKIAlyZWxhdGlvbiA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBB Y2Nlc3NTaGFyZUxvY2spOworCWluZGV4ID0gSW5oZXJpdHNQYXJlbnRJbmRleElkOwogCiAJ U2NhbktleUluaXQoJmtleVswXSwKIAkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHBhcmVudCwK IAkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCiAJCQkJT2JqZWN0SWRHZXRE YXR1bShwYXJlbnRyZWxJZCkpOwogCi0Jc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWxh dGlvbiwgSW5oZXJpdHNQYXJlbnRJbmRleElkLCB0cnVlLAotCQkJCQkJCSAgTlVMTCwgMSwg a2V5KTsKKwlpZiAobG9naWNhbF9vbmx5KQorCXsKKwkJaW5kZXggPSBJbmhlcml0c1BhcmVu dFNlcW5vSW5kZXhJZDsKKwkJU2NhbktleUluaXQoJmtleVsxXSwKKwkJCQkJQW51bV9wZ19p bmhlcml0c19pbmhzZXFubywKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRF USwKKwkJCQkJSW50MzJHZXREYXR1bSgwKSk7CisJfQorCisJc2NhbiA9IHN5c3RhYmxlX2Jl Z2luc2NhbihyZWxhdGlvbiwgaW5kZXgsIHRydWUsCisJCQkJCQkJICBOVUxMLCBsb2dpY2Fs X29ubHkgPyAyIDogMSwga2V5KTsKIAogCXdoaWxlICgoaW5oZXJpdHNUdXBsZSA9IHN5c3Rh YmxlX2dldG5leHQoc2NhbikpICE9IE5VTEwpCiAJewpAQCAtMjU0LDYgKzI3NywyMCBAQCBm aW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRyZWxJZCwgYm9v bCBvbWl0X2RldGFjaGVkLAogICovCiBMaXN0ICoKIGZpbmRfYWxsX2luaGVyaXRvcnMoT2lk IHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSwgTGlzdCAqKm51bXBhcmVudHMpCit7 CisJcmV0dXJuIGZpbmRfYWxsX2luaGVyaXRvcnNfaW50ZXJuYWwocGFyZW50cmVsSWQsIGxv Y2ttb2RlLCBudW1wYXJlbnRzLAorCQkJCQkJCQkJCWZhbHNlKTsKK30KKworTGlzdCAqCitm aW5kX2FsbF9sb2dpY2FsX2luaGVyaXRvcnMoT2lkIHBhcmVudHJlbElkKQoreworCXJldHVy biBmaW5kX2FsbF9pbmhlcml0b3JzX2ludGVybmFsKHBhcmVudHJlbElkLCBOb0xvY2ssIE5V TEwsIHRydWUpOworfQorCitzdGF0aWMgTGlzdCAqCitmaW5kX2FsbF9pbmhlcml0b3JzX2lu dGVybmFsKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01PREUgbG9ja21vZGUsCisJCQkJCQkJIExp c3QgKipudW1wYXJlbnRzLCBib29sIGxvZ2ljYWxfb25seSkKIHsKIAkvKiBoYXNoIHRhYmxl IGZvciBPKDEpIHJlbF9vaWQgLT4gcmVsX251bXBhcmVudHMgY2VsbCBsb29rdXAgKi8KIAlI VEFCCSAgICpzZWVuX3JlbHM7CkBAIC0yOTAsNyArMzI3LDkgQEAgZmluZF9hbGxfaW5oZXJp dG9ycyhPaWQgcGFyZW50cmVsSWQsIExPQ0tNT0RFIGxvY2ttb2RlLCBMaXN0ICoqbnVtcGFy ZW50cykKIAkJTGlzdENlbGwgICAqbGM7CiAKIAkJLyogR2V0IHRoZSBkaXJlY3QgY2hpbGRy ZW4gb2YgdGhpcyByZWwgKi8KLQkJY3VycmVudGNoaWxkcmVuID0gZmluZF9pbmhlcml0YW5j ZV9jaGlsZHJlbihjdXJyZW50cmVsLCBsb2NrbW9kZSk7CisJCWN1cnJlbnRjaGlsZHJlbiA9 CisJCQlmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKGN1cnJlbnRyZWwsIHRy dWUsIGxvY2ttb2RlLAorCQkJCQkJCQkJCQkgICBOVUxMLCBOVUxMLCBsb2dpY2FsX29ubHkp OwogCiAJCS8qCiAJCSAqIEFkZCB0byB0aGUgcXVldWUgb25seSB0aG9zZSBjaGlsZHJlbiBu b3QgYWxyZWFkeSBzZWVuLiBUaGlzIGF2b2lkcwpAQCAtNjU1LDMgKzY5NCw3MyBAQCBQYXJ0 aXRpb25IYXNQZW5kaW5nRGV0YWNoKE9pZCBwYXJ0b2lkKQogCWVsb2coRVJST1IsICJyZWxh dGlvbiAldSBpcyBub3QgYSBwYXJ0aXRpb24iLCBwYXJ0b2lkKTsKIAlyZXR1cm4gZmFsc2U7 CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KKworc3RhdGljIE9pZAorZ2V0X2xv Z2ljYWxfcGFyZW50X3dvcmtlcihSZWxhdGlvbiBpbmhSZWwsIE9pZCByZWxpZCkKK3sKKwlT eXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleVsyXTsKKwlPaWQJCQlyZXN1bHQg PSBJbnZhbGlkT2lkOworCUhlYXBUdXBsZQl0dXBsZTsKKworCVNjYW5LZXlJbml0KCZrZXlb MF0sCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxpZCkpOworCVNj YW5LZXlJbml0KCZrZXlbMV0sCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhzZXFubywKKwkJ CQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0o MCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmhSZWwsIEluaGVyaXRzUmVs aWRTZXFub0luZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAyLCBrZXkpOworCXR1cGxl ID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXBs ZSkpCisJeworCQlGb3JtX3BnX2luaGVyaXRzIGZvcm0gPSAoRm9ybV9wZ19pbmhlcml0cykg R0VUU1RSVUNUKHR1cGxlKTsKKwkJcmVzdWx0ID0gZm9ybS0+aW5ocGFyZW50OworCX0KKwor CXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0 aWMgdm9pZAorZ2V0X2xvZ2ljYWxfYW5jZXN0b3JzX3dvcmtlcihSZWxhdGlvbiBpbmhSZWws IE9pZCByZWxpZCwgTGlzdCAqKmFuY2VzdG9ycykKK3sKKwlPaWQJCQlwYXJlbnRPaWQ7CisK KwkvKgorCSAqIFJlY3Vyc2lvbiBlbmRzIGF0IHRoZSB0b3Btb3N0IGxldmVsLCBpZS4sIHdo ZW4gdGhlcmUncyBubyBwYXJlbnQuCisJICovCisJcGFyZW50T2lkID0gZ2V0X2xvZ2ljYWxf cGFyZW50X3dvcmtlcihpbmhSZWwsIHJlbGlkKTsKKwlpZiAocGFyZW50T2lkID09IEludmFs aWRPaWQpCisJCXJldHVybjsKKworCSphbmNlc3RvcnMgPSBsYXBwZW5kX29pZCgqYW5jZXN0 b3JzLCBwYXJlbnRPaWQpOworCWdldF9sb2dpY2FsX2FuY2VzdG9yc193b3JrZXIoaW5oUmVs LCBwYXJlbnRPaWQsIGFuY2VzdG9ycyk7Cit9CisKK0xpc3QgKgorZ2V0X2xvZ2ljYWxfYW5j ZXN0b3JzKE9pZCByZWxpZCwgYm9vbCBpc19wYXJ0aXRpb24pCit7CisJTGlzdAkgICAqcmVz dWx0ID0gTklMOworCVJlbGF0aW9uCWluaFJlbDsKKworCS8qIEZvciBwYXJ0aXRpb25zLCB0 aGlzIGlzIGlkZW50aWNhbCB0byBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycygpLiAqLworCWlm IChpc19wYXJ0aXRpb24pCisJCXJldHVybiBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxp ZCk7CisKKwlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlnZXRfbG9naWNhbF9hbmNlc3RvcnNfd29ya2VyKGluaFJlbCwgcmVs aWQsICZyZXN1bHQpOworCXRhYmxlX2Nsb3NlKGluaFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wKK2hhc19sb2dpY2FsX3BhcmVudChSZWxh dGlvbiBpbmhSZWwsIE9pZCByZWxpZCkKK3sKKwlyZXR1cm4gKGdldF9sb2dpY2FsX3BhcmVu dF93b3JrZXIoaW5oUmVsLCByZWxpZCkgIT0gSW52YWxpZE9pZCk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggZGY5YWJmMDljMy4uODczY2JmOTU1ZSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtNTEsNiArNTEsNyBA QCB0eXBlZGVmIHN0cnVjdAogCU9pZAkJCXJlbGlkOwkJCS8qIE9JRCBvZiBwdWJsaXNoZWQg dGFibGUgKi8KIAlPaWQJCQlwdWJpZDsJCQkvKiBPSUQgb2YgcHVibGljYXRpb24gdGhhdCBw dWJsaXNoZXMgdGhpcwogCQkJCQkJCQkgKiB0YWJsZS4gKi8KKwlib29sCQl2aWFyb290OwkJ LyogZG9lcyBwdWJpZCB1c2UgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Q/ICovCiB9IHB1 Ymxpc2hlZF9yZWw7CiAKIHN0YXRpYyB2b2lkIHB1YmxpY2F0aW9uX3RyYW5zbGF0ZV9jb2x1 bW5zKFJlbGF0aW9uIHRhcmdldHJlbCwgTGlzdCAqY29sdW1ucywKQEAgLTE4MCw1NiArMTgx LDQ2IEBAIHBnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxlKFBHX0ZVTkNUSU9OX0FSR1MpCiB9 CiAKIC8qCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFuY2VzdG9yIGlzIGluIHRoZSBsaXN0 IG9mIHB1Ymxpc2hlZCByZWxhdGlvbnMuCi0gKiBPdGhlcndpc2UsIHJldHVybnMgZmFsc2Uu Ci0gKi8KLXN0YXRpYyBib29sCi1pc19hbmNlc3Rvcl9tZW1iZXJfdGFibGVpbmZvcyhPaWQg YW5jZXN0b3IsIExpc3QgKnRhYmxlX2luZm9zKQotewotCUxpc3RDZWxsICAgKmxjOwotCi0J Zm9yZWFjaChsYywgdGFibGVfaW5mb3MpCi0JewotCQlPaWQJCQlyZWxpZCA9ICgocHVibGlz aGVkX3JlbCAqKSBsZmlyc3QobGMpKS0+cmVsaWQ7Ci0KLQkJaWYgKHJlbGlkID09IGFuY2Vz dG9yKQotCQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi0vKgot ICogRmlsdGVyIG91dCB0aGUgcGFydGl0aW9ucyB3aG9zZSBwYXJlbnQgdGFibGVzIGFyZSBh bHNvIHByZXNlbnQgaW4gdGhlIGxpc3QuCisgKiBGaWx0ZXIgb3V0IHRoZSB0YWJsZXMgd2hv IGFyZSBhbHJlYWR5IGJlaW5nIHB1Ymxpc2hlZCB2aWEgYSBsb2dpY2FsIHJvb3QuCisgKgor ICogSWYgd2Ugb25seSBoYWQgcGFydGl0aW9uZWQgdGFibGVzIHRvIGNoZWNrLCB0aGlzIHdv dWxkIGJlIG11Y2ggZWFzaWVyOiBpdCdzCisgKiBpbXBvc3NpYmxlIGZvciBhIHBhcnRpdGlv biByb290IHRvIGJlIGluIHRoaXMgbGlzdCB1bmxlc3MgcHVidmlhcm9vdD10cnVlIGZvcgor ICogdGhhdCB0YWJsZSwgc28gd2Ugd291bGQganVzdCBoYXZlIHRvIGNoZWNrIGZvciB0aGUg ZXhpc3RlbmNlIG9mIGFuIGFuY2VzdG9yLAorICogYW5kIGlmIGFueSB3ZXJlIGZvdW5kIHRo ZW4gd2UnZCBmaWx0ZXIgdGhlIHRhYmxlLgorICoKKyAqIExvZ2ljYWwgcm9vdHMgYWRkIGFu b3RoZXIgd3JpbmtsZSwgYmVjYXVzZSBpdCdzIGFjY2VwdGFibGUgZm9yIGEKKyAqIHB1YnZp YXJvb3Q9ZmFsc2UgcHVibGljYXRpb24gdG8gY29udGFpbiBhIGxvZ2ljYWwgcm9vdC4gKExv Z2ljYWwgcm9vdHMgY2FuCisgKiBjb250YWluIGRhdGEgb2YgdGhlaXIgb3duLCB1bmxpa2Ug cGFydGl0aW9uIHJvb3RzLikgSXQncyBhbHNvIHBvc3NpYmxlIGZvciBhCisgKiBsb2dpY2Fs IHJvb3QgdG8gYmUgaW5jbHVkZWQgaW4gYSBwdWJ2aWFyb290IHB1YmxpY2F0aW9uIHdpdGhv dXQgYW55IG9yIGFsbCBvZgorICogaXRzIGNoaWxkcmVuLiBUaGlzIGlzIG5vdCBwb3NzaWJs ZSBmb3IgYSBwYXJ0aXRpb24gcm9vdCwgd2hlcmUgYWxsIG9mIHRoZQorICogbGVhdmVzIGFy ZSBpbXBsaWNpdGx5IGluY2x1ZGVkLgorICoKKyAqIFNvLCB0byBrZWVwIHRoaW5ncyByZWxh dGl2ZWx5IGNvbnNpc3RlbnQsIHRoaXMgbm93IHVzZXMgdGhlIHNhbWUgY29kZSB0aGF0Cisg KiB0aGUgb3V0cHV0IHBsdWdpbiB1c2VzIHRvIGRlY2lkZSB3aGljaCByZWxhdGlvbiBPSUQg dG8gcHVibGlzaCBkYXRhIHVuZGVyLiBJZgorICogdGhlIHB1Ymxpc2hpbmcgT0lEIGlzIG5v dCB0aGUgc2FtZSBhcyB0aGUgcmVsYXRpb24gT0lELCB3ZSByZW1vdmUgaXQgZnJvbQorICog dGhpcyBsaXN0LgorICoKKyAqIFhYWCBBbmQgdGhhdCdzIGV4cGVuc2l2ZS4KICAqLwogc3Rh dGljIHZvaWQKLWZpbHRlcl9wYXJ0aXRpb25zKExpc3QgKnRhYmxlX2luZm9zKQorZmlsdGVy X3B1Ymxpc2hlZF9kZXNjZW5kYW50cyhMaXN0ICp0YWJsZV9pbmZvcywgTGlzdCAqcHVibGlj YXRpb25zKQogewogCUxpc3RDZWxsICAgKmxjOwogCiAJZm9yZWFjaChsYywgdGFibGVfaW5m b3MpCiAJewotCQlib29sCQlza2lwID0gZmFsc2U7Ci0JCUxpc3QJICAgKmFuY2VzdG9ycyA9 IE5JTDsKLQkJTGlzdENlbGwgICAqbGMyOwogCQlwdWJsaXNoZWRfcmVsICp0YWJsZV9pbmZv ID0gKHB1Ymxpc2hlZF9yZWwgKikgbGZpcnN0KGxjKTsKKwkJT2lkCQkJcHVibGlzaF9hc19y ZWxpZDsKKwkJTGlzdAkgICAqcmVsX3B1YmxpY2F0aW9uczsKIAotCQlpZiAoZ2V0X3JlbF9y ZWxpc3BhcnRpdGlvbih0YWJsZV9pbmZvLT5yZWxpZCkpCi0JCQlhbmNlc3RvcnMgPSBnZXRf cGFydGl0aW9uX2FuY2VzdG9ycyh0YWJsZV9pbmZvLT5yZWxpZCk7Ci0KLQkJZm9yZWFjaChs YzIsIGFuY2VzdG9ycykKLQkJewotCQkJT2lkCQkJYW5jZXN0b3IgPSBsZmlyc3Rfb2lkKGxj Mik7Ci0KLQkJCWlmIChpc19hbmNlc3Rvcl9tZW1iZXJfdGFibGVpbmZvcyhhbmNlc3Rvciwg dGFibGVfaW5mb3MpKQotCQkJewotCQkJCXNraXAgPSB0cnVlOwotCQkJCWJyZWFrOwotCQkJ fQotCQl9CisJCXJlbF9wdWJsaWNhdGlvbnMgPQorCQkJcHJvY2Vzc19yZWxhdGlvbl9wdWJs aWNhdGlvbnModGFibGVfaW5mby0+cmVsaWQsIHB1YmxpY2F0aW9ucywgTlVMTCwKKwkJCQkJ CQkJCQkgICZwdWJsaXNoX2FzX3JlbGlkKTsKIAotCQlpZiAoc2tpcCkKKwkJaWYgKHB1Ymxp c2hfYXNfcmVsaWQgIT0gdGFibGVfaW5mby0+cmVsaWQpCiAJCQl0YWJsZV9pbmZvcyA9IGZv cmVhY2hfZGVsZXRlX2N1cnJlbnQodGFibGVfaW5mb3MsIGxjKTsKKworCQlsaXN0X2ZyZWUo cmVsX3B1YmxpY2F0aW9ucyk7CiAJfQogfQogCkBAIC04MDUsMTEgKzc5NiwxNSBAQCBMaXN0 ICoKIEdldEFsbFRhYmxlc1B1YmxpY2F0aW9uUmVsYXRpb25zKGJvb2wgcHVidmlhcm9vdCkK IHsKIAlSZWxhdGlvbgljbGFzc1JlbDsKKwlSZWxhdGlvbglpbmhSZWw7CiAJU2NhbktleURh dGEga2V5WzFdOwogCVRhYmxlU2NhbkRlc2Mgc2NhbjsKIAlIZWFwVHVwbGUJdHVwbGU7CiAJ TGlzdAkgICAqcmVzdWx0ID0gTklMOwogCisJLyogVE9ETzogaXMgdGhlcmUgYSByZXF1aXJl ZCBvcmRlciB0byBhY3F1aXJlIHRoZXNlIGxvY2tzPyAqLworCWlmIChwdWJ2aWFyb290KQor CQlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVM b2NrKTsKIAljbGFzc1JlbCA9IHRhYmxlX29wZW4oUmVsYXRpb25SZWxhdGlvbklkLCBBY2Nl c3NTaGFyZUxvY2spOwogCiAJU2NhbktleUluaXQoJmtleVswXSwKQEAgLTgyNSw3ICs4MjAs OCBAQCBHZXRBbGxUYWJsZXNQdWJsaWNhdGlvblJlbGF0aW9ucyhib29sIHB1YnZpYXJvb3Qp CiAJCU9pZAkJCXJlbGlkID0gcmVsRm9ybS0+b2lkOwogCiAJCWlmIChpc19wdWJsaXNoYWJs ZV9jbGFzcyhyZWxpZCwgcmVsRm9ybSkgJiYKLQkJCSEocmVsRm9ybS0+cmVsaXNwYXJ0aXRp b24gJiYgcHVidmlhcm9vdCkpCisJCQkhKHJlbEZvcm0tPnJlbGlzcGFydGl0aW9uICYmIHB1 YnZpYXJvb3QpICYmCisJCQkhKHB1YnZpYXJvb3QgJiYgaGFzX2xvZ2ljYWxfcGFyZW50KGlu aFJlbCwgcmVsaWQpKSkKIAkJCXJlc3VsdCA9IGxhcHBlbmRfb2lkKHJlc3VsdCwgcmVsaWQp OwogCX0KIApAQCAtODU0LDYgKzg1MCw5IEBAIEdldEFsbFRhYmxlc1B1YmxpY2F0aW9uUmVs YXRpb25zKGJvb2wgcHVidmlhcm9vdCkKIAl9CiAKIAl0YWJsZV9jbG9zZShjbGFzc1JlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKwlpZiAocHVidmlhcm9vdCkKKwkJdGFibGVfY2xvc2UoaW5o UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTA3 MCw2ICsxMDY5LDcgQEAgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhQR19GVU5DVElPTl9B UkdTKQogCQlpbnQJCQluZWxlbXMsCiAJCQkJCWk7CiAJCWJvb2wJCXZpYXJvb3QgPSBmYWxz ZTsKKwkJTGlzdAkgICAqcHVibGljYXRpb25zID0gTklMOwogCiAJCS8qIGNyZWF0ZSBhIGZ1 bmN0aW9uIGNvbnRleHQgZm9yIGNyb3NzLWNhbGwgcGVyc2lzdGVuY2UgKi8KIAkJZnVuY2N0 eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOwpAQCAtMTA5Myw2ICsxMDkzLDcgQEAgcGdfZ2V0 X3B1YmxpY2F0aW9uX3RhYmxlcyhQR19GVU5DVElPTl9BUkdTKQogCQkJTGlzdENlbGwgICAq bGM7CiAKIAkJCXB1Yl9lbGVtID0gR2V0UHVibGljYXRpb25CeU5hbWUoVGV4dERhdHVtR2V0 Q1N0cmluZyhlbGVtc1tpXSksIGZhbHNlKTsKKwkJCXB1YmxpY2F0aW9ucyA9IGxhcHBlbmQo cHVibGljYXRpb25zLCBwdWJfZWxlbSk7CiAKIAkJCS8qCiAJCQkgKiBQdWJsaWNhdGlvbnMg c3VwcG9ydCBwYXJ0aXRpb25lZCB0YWJsZXMuIElmCkBAIC0xMTMyLDYgKzExMzMsNyBAQCBw Z19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAkJCQl0YWJs ZV9pbmZvLT5yZWxpZCA9IGxmaXJzdF9vaWQobGMpOwogCQkJCXRhYmxlX2luZm8tPnB1Ymlk ID0gcHViX2VsZW0tPm9pZDsKKwkJCQl0YWJsZV9pbmZvLT52aWFyb290ID0gcHViX2VsZW0t PnB1YnZpYXJvb3Q7CiAJCQkJdGFibGVfaW5mb3MgPSBsYXBwZW5kKHRhYmxlX2luZm9zLCB0 YWJsZV9pbmZvKTsKIAkJCX0KIApAQCAtMTE0MSwxNSArMTE0MywxNCBAQCBwZ19nZXRfcHVi bGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCX0KIAogCQkvKgotCQkgKiBJ ZiB0aGUgcHVibGljYXRpb24gcHVibGlzaGVzIHBhcnRpdGlvbiBjaGFuZ2VzIHZpYSB0aGVp ciByZXNwZWN0aXZlCi0JCSAqIHJvb3QgcGFydGl0aW9uZWQgdGFibGVzLCB3ZSBtdXN0IGV4 Y2x1ZGUgcGFydGl0aW9ucyBpbiBmYXZvciBvZgotCQkgKiBpbmNsdWRpbmcgdGhlIHJvb3Qg cGFydGl0aW9uZWQgdGFibGVzLiBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbgotCQkgKiBjb3Vs ZCByZXR1cm4gYm90aCB0aGUgY2hpbGQgYW5kIHBhcmVudCB0YWJsZXMgd2hpY2ggY291bGQg Y2F1c2UKLQkJICogZGF0YSBvZiB0aGUgY2hpbGQgdGFibGUgdG8gYmUgZG91YmxlLXB1Ymxp c2hlZCBvbiB0aGUgc3Vic2NyaWJlcgotCQkgKiBzaWRlLgorCQkgKiBJZiB0aGUgcHVibGlj YXRpb24gcHVibGlzaGVzIHRhYmxlIGNoYW5nZXMgdmlhIHRoZWlyIHJlc3BlY3RpdmUKKwkJ ICogbG9naWNhbCByb290IHRhYmxlcywgd2UgbXVzdCBleGNsdWRlIHBhcnRpdGlvbnMgaW4g ZmF2b3Igb2YKKwkJICogaW5jbHVkaW5nIHRoZSByb290IHRhYmxlcy4gT3RoZXJ3aXNlLCB0 aGUgZnVuY3Rpb24gY291bGQgcmV0dXJuCisJCSAqIGJvdGggdGhlIGNoaWxkIGFuZCBwYXJl bnQgdGFibGVzIHdoaWNoIGNvdWxkIGNhdXNlIGRhdGEgb2YgdGhlCisJCSAqIGNoaWxkIHRh YmxlIHRvIGJlIGRvdWJsZS1wdWJsaXNoZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4KIAkJ ICovCiAJCWlmICh2aWFyb290KQotCQkJZmlsdGVyX3BhcnRpdGlvbnModGFibGVfaW5mb3Mp OworCQkJZmlsdGVyX3B1Ymxpc2hlZF9kZXNjZW5kYW50cyh0YWJsZV9pbmZvcywgcHVibGlj YXRpb25zKTsKIAogCQkvKiBDb25zdHJ1Y3QgYSB0dXBsZSBkZXNjcmlwdG9yIGZvciB0aGUg cmVzdWx0IHJvd3MuICovCiAJCXR1cGRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYyhO VU1fUFVCTElDQVRJT05fVEFCTEVTX0VMRU0pOwpAQCAtMTE2NSw2ICsxMTY2LDggQEAgcGdf Z2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhQR19GVU5DVElPTl9BUkdTKQogCQlmdW5jY3R4LT50 dXBsZV9kZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAJCWZ1bmNjdHgtPnVzZXJf ZmN0eCA9ICh2b2lkICopIHRhYmxlX2luZm9zOwogCisJCWxpc3RfZnJlZShwdWJsaWNhdGlv bnMpOworCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAl9CiAKQEAg LTEyNjAsNiArMTI2MywxMTggQEAgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhQR19GVU5D VElPTl9BUkdTKQogCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKIH0KIAorLyoKKyAqIFJl dHVybnMgYSBsaXN0IG9mIHRhYmxlcyB0aGF0IHNob3VsZCBiZSBjb3BpZWQgZHVyaW5nIGlu aXRpYWwgc3luYyBmb3IgdGhlCisgKiBnaXZlbiByb290IHRhYmxlIGFuZCBwdWJsaWNhdGlv bnMuCisgKgorICogVGhlIG9ubHkgdGltZSB0aGlzIGxpc3QgY29uc2lzdHMgb2YgYW55dGhp bmcgbW9yZSB0aGFuIHRoZSB0YWJsZSBpdHNlbGYgaXMKKyAqIHdoZW4gYSBwdWJsaWNhdGlv bidzIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIHNldCB0byB0cnVlIGFuZCB0aGUg dGFibGUKKyAqIGhhcyBpbmhlcml0ZWQgY2hpbGQgdGFibGVzIGluIHRoZSBwdWJsaWNhdGlv bnMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIHdpdGgKKyAqIHB1Ymxpc2hfdmlhX3BhcmVudC4K KyAqLworRGF0dW0KK3BnX2dldF9wdWJsaWNhdGlvbl9yZWxzX3RvX3N5bmMoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJTGlzdAkgICAqdGFi bGVzID0gTklMOworCisJLyogc3R1ZmYgZG9uZSBvbmx5IG9uIHRoZSBmaXJzdCBjYWxsIG9m IHRoZSBmdW5jdGlvbiAqLworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlPaWQJ CQlyb290aWQgPSBQR19HRVRBUkdfT0lEKDApOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRl eHQ7CisJCUFycmF5VHlwZSAgKmFycjsKKwkJRGF0dW0JICAgKmVsZW1zOworCQlpbnQJCQlu ZWxlbXMsCisJCQkJCWk7CisKKwkJLyogY3JlYXRlIGEgZnVuY3Rpb24gY29udGV4dCBmb3Ig Y3Jvc3MtY2FsbCBwZXJzaXN0ZW5jZSAqLworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9J TklUKCk7CisKKwkJLyogc3dpdGNoIHRvIG1lbW9yeSBjb250ZXh0IGFwcHJvcHJpYXRlIGZv ciBtdWx0aXBsZSBmdW5jdGlvbiBjYWxscyAqLworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisKKwkJLyoK KwkJICogRGVjb25zdHJ1Y3QgdGhlIHBhcmFtZXRlciBpbnRvIGVsZW1lbnRzIHdoZXJlIGVh Y2ggZWxlbWVudCBpcyBhCisJCSAqIHB1YmxpY2F0aW9uIG5hbWUuCisJCSAqLworCQlhcnIg PSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMSk7CisJCWRlY29uc3RydWN0X2FycmF5KGFyciwg VEVYVE9JRCwgLTEsIGZhbHNlLCBUWVBBTElHTl9JTlQsCisJCQkJCQkgICZlbGVtcywgTlVM TCwgJm5lbGVtcyk7CisKKwkJLyogR2V0IE9pZHMgb2YgdGFibGVzIGZyb20gZWFjaCBwdWJs aWNhdGlvbi4gKi8KKwkJZm9yIChpID0gMDsgaSA8IG5lbGVtczsgaSsrKQorCQl7CisJCQlj aGFyCSAgICpwdWJuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhlbGVtc1tpXSk7CisJCQlQ dWJsaWNhdGlvbiAqcHVibGljYXRpb24gPSBHZXRQdWJsaWNhdGlvbkJ5TmFtZShwdWJuYW1l LCBmYWxzZSk7CisJCQlMaXN0CSAgICpwdWJfdGFibGVzID0gTklMOworCisJCQkvKiBUT0RP OiBkbyB0aGUgdGFibGVzIGluIHRoaXMgbGlzdCBuZWVkIHRvIGJlIGxvY2tlZD8gKi8KKwkJ CWlmIChwdWJsaWNhdGlvbi0+cHVidmlhcm9vdCkKKwkJCQlwdWJfdGFibGVzID0gZmluZF9h bGxfbG9naWNhbF9pbmhlcml0b3JzKHJvb3RpZCk7CisJCQllbHNlCisJCQkJcHViX3RhYmxl cyA9IGxpc3RfbWFrZTFfb2lkKHJvb3RpZCk7CisKKwkJCWlmICghcHVibGljYXRpb24tPmFs bHRhYmxlcykKKwkJCXsKKwkJCQlMaXN0CSAgICpyZWxpZHM7CisJCQkJTGlzdAkgICAqc2No ZW1hcmVsaWRzOworCQkJCUxpc3QJICAgKnB1Ymxpc2hlZDsKKwkJCQlMaXN0Q2VsbCAgICpj ZWxsOworCisJCQkJcmVsaWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHVibGljYXRp b24tPm9pZCwKKwkJCQkJCQkJCQkJCSBwdWJsaWNhdGlvbi0+cHVidmlhcm9vdCA/CisJCQkJ CQkJCQkJCQkgUFVCTElDQVRJT05fUEFSVF9ST09UIDoKKwkJCQkJCQkJCQkJCSBQVUJMSUNB VElPTl9QQVJUX0FMTCk7CisJCQkJc2NoZW1hcmVsaWRzID0gR2V0QWxsU2NoZW1hUHVibGlj YXRpb25SZWxhdGlvbnMocHVibGljYXRpb24tPm9pZCwKKwkJCQkJCQkJCQkJCQkJCQlwdWJs aWNhdGlvbi0+cHVidmlhcm9vdCA/CisJCQkJCQkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFS VF9ST09UIDoKKwkJCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX0xFQUYpOworCQkJ CXB1Ymxpc2hlZCA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocmVsaWRzLCBzY2hlbWFyZWxp ZHMpOworCisJCQkJLyoKKwkJCQkgKiBGaXJzdCB3ZSBoYXZlIHRvIGNoZWNrIHRvIG1ha2Ug c3VyZSB0aGUgcm9vdCB0YWJsZSBpcworCQkJCSAqIGFjdHVhbGx5IHBhcnQgb2YgdGhlIHB1 YmxpY2F0aW9uOyBpZiBub3QsIG5vbmUgb2YgaXRzCisJCQkJICogZGVzY2VuZGFudHMnIGNv bnRlbnRzIGJlbG9uZyB0byBpdC4KKwkJCQkgKi8KKwkJCQlpZiAoIWxpc3RfbWVtYmVyX29p ZChwdWJsaXNoZWQsIHJvb3RpZCkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkg KiBOb3cgZmlsdGVyIG91dCBhbnkgZGVzY2VuZGFudHMgdGhhdCBhcmVuJ3QgcGFydCBvZiB0 aGlzCisJCQkJICogcGFydGljdWxhciBwdWJsaWNhdGlvbi4KKwkJCQkgKi8KKwkJCQlmb3Jl YWNoKGNlbGwsIHB1Yl90YWJsZXMpCisJCQkJeworCQkJCQlPaWQJCWN1cnJlbnQgPSBsZmly c3Rfb2lkKGNlbGwpOworCisJCQkJCWlmICghbGlzdF9tZW1iZXJfb2lkKHB1Ymxpc2hlZCwg Y3VycmVudCkpCisJCQkJCQlwdWJfdGFibGVzID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChw dWJfdGFibGVzLCBjZWxsKTsKKwkJCQl9CisJCQl9CisKKwkJCXRhYmxlcyA9IGxpc3RfY29u Y2F0X3VuaXF1ZV9vaWQodGFibGVzLCBwdWJfdGFibGVzKTsKKwkJfQorCisJCWZ1bmNjdHgt PnVzZXJfZmN0eCA9ICh2b2lkICopIHRhYmxlczsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisJfQorCisJLyogc3R1ZmYgZG9uZSBvbiBldmVyeSBjYWxsIG9m IHRoZSBmdW5jdGlvbiAqLworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCXRh YmxlcyA9IChMaXN0ICopIGZ1bmNjdHgtPnVzZXJfZmN0eDsKKworCWlmIChmdW5jY3R4LT5j YWxsX2NudHIgPCBsaXN0X2xlbmd0aCh0YWJsZXMpKQorCXsKKwkJT2lkCQkJcmVsaWQgPSBs aXN0X250aF9vaWQodGFibGVzLCBmdW5jY3R4LT5jYWxsX2NudHIpOworCisJCVNSRl9SRVRV Uk5fTkVYVChmdW5jY3R4LCBPYmplY3RJZEdldERhdHVtKHJlbGlkKSk7CisJfQorCisJU1JG X1JFVFVSTl9ET05FKGZ1bmNjdHgpOworfQorCiBMaXN0ICoKIHByb2Nlc3NfcmVsYXRpb25f cHVibGljYXRpb25zKE9pZCByZWxpZCwgY29uc3QgTGlzdCAqcHVibGljYXRpb25zLAogCQkJ CQkJCSAgUHVibGljYXRpb25BY3Rpb25zICpwdWJhY3Rpb25zLApAQCAtMTI3OSw4ICsxMzk0 LDcgQEAgcHJvY2Vzc19yZWxhdGlvbl9wdWJsaWNhdGlvbnMoT2lkIHJlbGlkLCBjb25zdCBM aXN0ICpwdWJsaWNhdGlvbnMsCiAJYm9vbAkJYW1fcGFydGl0aW9uID0gZ2V0X3JlbF9yZWxp c3BhcnRpdGlvbihyZWxpZCk7CiAJY2hhcgkJcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZChy ZWxpZCk7CiAJTGlzdAkgICAqcmVsX3B1YmxpY2F0aW9ucyA9IE5JTDsKLQotCSpwdWJsaXNo X2FzX3JlbGlkID0gcmVsaWQ7CisJT2lkCQkJcHVibGlzaF9jYW5kaWRhdGUgPSByZWxpZDsK IAogCWZvcmVhY2gobGMsIHB1YmxpY2F0aW9ucykKIAl7CkBAIC0xMjk2LDU1ICsxNDEwLDU3 IEBAIHByb2Nlc3NfcmVsYXRpb25fcHVibGljYXRpb25zKE9pZCByZWxpZCwgY29uc3QgTGlz dCAqcHVibGljYXRpb25zLAogCQlpbnQJCQlhbmNlc3Rvcl9sZXZlbCA9IDA7CiAKIAkJLyoK LQkJICogSWYgdGhpcyBpcyBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uLCBwaWNrIHRo ZSBwYXJ0aXRpb24KKwkJICogSWYgdGhpcyBpcyBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0 aW9uLCBwaWNrIHRoZSBsb2dpY2FsCiAJCSAqIHJvb3QgYW5kIHNldCB0aGUgYW5jZXN0b3Ig bGV2ZWwgYWNjb3JkaW5nbHkuCiAJCSAqLwogCQlpZiAocHViLT5hbGx0YWJsZXMpCiAJCXsK IAkJCXB1Ymxpc2ggPSB0cnVlOwotCQkJaWYgKHB1Yi0+cHVidmlhcm9vdCAmJiBhbV9wYXJ0 aXRpb24pCisJCQlpZiAocHViLT5wdWJ2aWFyb290KQogCQkJewotCQkJCUxpc3QJICAgKmFu Y2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKTsKKwkJCQlMaXN0CSAg ICphbmNlc3RvcnM7CiAKLQkJCQlwdWJfcmVsaWQgPSBsbGFzdF9vaWQoYW5jZXN0b3JzKTsK LQkJCQlhbmNlc3Rvcl9sZXZlbCA9IGxpc3RfbGVuZ3RoKGFuY2VzdG9ycyk7CisJCQkJYW5j ZXN0b3JzID0gZ2V0X2xvZ2ljYWxfYW5jZXN0b3JzKHJlbGlkLCBhbV9wYXJ0aXRpb24pOwor CQkJCWlmIChhbmNlc3RvcnMgIT0gTklMKQorCQkJCXsKKwkJCQkJcHViX3JlbGlkID0gbGxh c3Rfb2lkKGFuY2VzdG9ycyk7CisJCQkJCWFuY2VzdG9yX2xldmVsID0gbGlzdF9sZW5ndGgo YW5jZXN0b3JzKTsKKwkJCQl9CiAJCQl9CiAJCX0KIAogCQlpZiAoIXB1Ymxpc2gpCiAJCXsK IAkJCWJvb2wJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IGZhbHNlOworCQkJT2lkCQkJYW5jZXN0 b3I7CisJCQlpbnQJCQlsZXZlbDsKKwkJCUxpc3QJICAgKmFuY2VzdG9yczsKIAogCQkJLyoK LQkJCSAqIEZvciBhIHBhcnRpdGlvbiwgY2hlY2sgaWYgYW55IG9mIHRoZSBhbmNlc3RvcnMg YXJlCi0JCQkgKiBwdWJsaXNoZWQuICBJZiBzbywgbm90ZSBkb3duIHRoZSB0b3Btb3N0IGFu Y2VzdG9yIHRoYXQgaXMKKwkJCSAqIENoZWNrIGlmIGFueSBvZiB0aGUgbG9naWNhbCBhbmNl c3RvcnMgKHRoYXQgaXMsIHBhcnRpdGlvbgorCQkJICogcGFyZW50cyBvciB0YWJsZXMgbWFy a2VkIHdpdGggcHVibGlzaF92aWFfcGFyZW50KSBhcmUKKwkJCSAqIHB1Ymxpc2hlZC4gSWYg c28sIG5vdGUgZG93biB0aGUgdG9wbW9zdCBhbmNlc3RvciB0aGF0IGlzCiAJCQkgKiBwdWJs aXNoZWQgdmlhIHRoaXMgcHVibGljYXRpb24sIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyB0aGUK LQkJCSAqIHJlbGF0aW9uIHZpYSB3aGljaCB0byBwdWJsaXNoIHRoZSBwYXJ0aXRpb24ncyBj aGFuZ2VzLgorCQkJICogcmVsYXRpb24gdmlhIHdoaWNoIHRvIHB1Ymxpc2ggdGhpcyB0YWJs ZSdzIGNoYW5nZXMuCiAJCQkgKi8KLQkJCWlmIChhbV9wYXJ0aXRpb24pCi0JCQl7Ci0JCQkJ T2lkCQkJYW5jZXN0b3I7Ci0JCQkJaW50CQkJbGV2ZWw7Ci0JCQkJTGlzdAkgICAqYW5jZXN0 b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOwotCi0JCQkJYW5jZXN0b3Ig PSBHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKHB1Yi0+b2lkLAotCQkJCQkJCQkJ CQkJCQkgICBhbmNlc3RvcnMsCi0JCQkJCQkJCQkJCQkJCSAgICZsZXZlbCk7CisJCQlhbmNl c3RvcnMgPSBnZXRfbG9naWNhbF9hbmNlc3RvcnMocmVsaWQsIGFtX3BhcnRpdGlvbik7CisJ CQlhbmNlc3RvciA9IEdldFRvcE1vc3RBbmNlc3RvckluUHVibGljYXRpb24ocHViLT5vaWQs CisJCQkJCQkJCQkJCQkJICAgYW5jZXN0b3JzLAorCQkJCQkJCQkJCQkJCSAgICZsZXZlbCk7 CiAKLQkJCQlpZiAoYW5jZXN0b3IgIT0gSW52YWxpZE9pZCkKKwkJCWlmIChhbmNlc3RvciAh PSBJbnZhbGlkT2lkKQorCQkJeworCQkJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IHRydWU7CisJ CQkJaWYgKHB1Yi0+cHVidmlhcm9vdCkKIAkJCQl7Ci0JCQkJCWFuY2VzdG9yX3B1Ymxpc2hl ZCA9IHRydWU7Ci0JCQkJCWlmIChwdWItPnB1YnZpYXJvb3QpCi0JCQkJCXsKLQkJCQkJCXB1 Yl9yZWxpZCA9IGFuY2VzdG9yOwotCQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsZXZlbDsKLQkJ CQkJfQorCQkJCQlwdWJfcmVsaWQgPSBhbmNlc3RvcjsKKwkJCQkJYW5jZXN0b3JfbGV2ZWwg PSBsZXZlbDsKIAkJCQl9CiAJCQl9CiAKIAkJCWlmIChsaXN0X21lbWJlcl9vaWQocHViaWRz LCBwdWItPm9pZCkgfHwKIAkJCQlsaXN0X21lbWJlcl9vaWQoc2NoZW1hUHViaWRzLCBwdWIt Pm9pZCkgfHwKLQkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQpCisJCQkJKGFtX3BhcnRpdGlvbiAm JiBhbmNlc3Rvcl9wdWJsaXNoZWQpKQogCQkJCXB1Ymxpc2ggPSB0cnVlOwogCQl9CiAKQEAg LTEzNTksMTAgKzE0NzUsMTMgQEAgcHJvY2Vzc19yZWxhdGlvbl9wdWJsaWNhdGlvbnMoT2lk IHJlbGlkLCBjb25zdCBMaXN0ICpwdWJsaWNhdGlvbnMsCiAJCWlmIChwdWJsaXNoICYmCiAJ CQkocmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFIHx8IHB1Yi0+cHVidmlh cm9vdCkpCiAJCXsKLQkJCXB1YmFjdGlvbnMtPnB1Ymluc2VydCB8PSBwdWItPnB1YmFjdGlv bnMucHViaW5zZXJ0OwotCQkJcHViYWN0aW9ucy0+cHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0 aW9ucy5wdWJ1cGRhdGU7Ci0JCQlwdWJhY3Rpb25zLT5wdWJkZWxldGUgfD0gcHViLT5wdWJh Y3Rpb25zLnB1YmRlbGV0ZTsKLQkJCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRlIHw9IHB1Yi0+ cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZTsKKwkJCWlmIChwdWJhY3Rpb25zKQorCQkJeworCQkJ CXB1YmFjdGlvbnMtPnB1Ymluc2VydCB8PSBwdWItPnB1YmFjdGlvbnMucHViaW5zZXJ0Owor CQkJCXB1YmFjdGlvbnMtPnB1YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidXBkYXRl OworCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGVs ZXRlOworCQkJCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5w dWJ0cnVuY2F0ZTsKKwkJCX0KIAogCQkJLyoKIAkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0 aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKQEAgLTEzODEsNyArMTUwMCw3 IEBAIHByb2Nlc3NfcmVsYXRpb25fcHVibGljYXRpb25zKE9pZCByZWxpZCwgY29uc3QgTGlz dCAqcHVibGljYXRpb25zLAogCQkJICovCiAJCQlpZiAocHVibGlzaF9hbmNlc3Rvcl9sZXZl bCA8IGFuY2VzdG9yX2xldmVsKQogCQkJewotCQkJCSpwdWJsaXNoX2FzX3JlbGlkID0gcHVi X3JlbGlkOworCQkJCXB1Ymxpc2hfY2FuZGlkYXRlID0gcHViX3JlbGlkOwogCQkJCXB1Ymxp c2hfYW5jZXN0b3JfbGV2ZWwgPSBhbmNlc3Rvcl9sZXZlbDsKIAogCQkJCS8qIHJlc2V0IHRo ZSBwdWJsaWNhdGlvbiBsaXN0IGZvciB0aGlzIHJlbGF0aW9uICovCkBAIC0xMzkwLDcgKzE1 MDksNyBAQCBwcm9jZXNzX3JlbGF0aW9uX3B1YmxpY2F0aW9ucyhPaWQgcmVsaWQsIGNvbnN0 IExpc3QgKnB1YmxpY2F0aW9ucywKIAkJCWVsc2UKIAkJCXsKIAkJCQkvKiBTYW1lIGFuY2Vz dG9yIGxldmVsLCBoYXMgdG8gYmUgdGhlIHNhbWUgT0lELiAqLwotCQkJCUFzc2VydCgqcHVi bGlzaF9hc19yZWxpZCA9PSBwdWJfcmVsaWQpOworCQkJCUFzc2VydChwdWJsaXNoX2NhbmRp ZGF0ZSA9PSBwdWJfcmVsaWQpOwogCQkJfQogCiAJCQkvKiBUcmFjayBwdWJsaWNhdGlvbnMg Zm9yIHRoaXMgYW5jZXN0b3IuICovCkBAIC0xNDAxLDYgKzE1MjAsOSBAQCBwcm9jZXNzX3Jl bGF0aW9uX3B1YmxpY2F0aW9ucyhPaWQgcmVsaWQsIGNvbnN0IExpc3QgKnB1YmxpY2F0aW9u cywKIAlsaXN0X2ZyZWUocHViaWRzKTsKIAlsaXN0X2ZyZWUoc2NoZW1hUHViaWRzKTsKIAor CWlmIChwdWJsaXNoX2FzX3JlbGlkKQorCQkqcHVibGlzaF9hc19yZWxpZCA9IHB1Ymxpc2hf Y2FuZGlkYXRlOworCiAJcmV0dXJuIHJlbF9wdWJsaWNhdGlvbnM7CiB9CiAKQEAgLTE0MzQs NyArMTU1Niw3IEBAIHBnX2dldF9yZWxhdGlvbl9wdWJsaXNoaW5nX2luZm8oUEdfRlVOQ1RJ T05fQVJHUykKIAogCXsKIAkJTGlzdAkgICAqcmVsX3B1YmxpY2F0aW9uczsKLQkJUHVibGlj YXRpb25BY3Rpb25zIHB1YmFjdGlvbnM7CisJCVB1YmxpY2F0aW9uQWN0aW9ucyBwdWJhY3Rp b25zID0gezB9OwogCQlPaWQJCQlwdWJsaXNoX2FzX3JlbGlkOwogCQlMaXN0Q2VsbCAgICps YzsKIAkJRGF0dW0JICAgKnB1Ym9pZHM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jCmluZGV4IGY0YmE1NzI2OTcuLjRjYWJjOTcxOWUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0yMzgsNiArMjM4LDggQEAgY29udGFp bl9pbnZhbGlkX3JmY29sdW1uX3dhbGtlcihOb2RlICpub2RlLCByZl9jb250ZXh0ICpjb250 ZXh0KQogCQkgKiBwYXJlbnQgdGFibGUsIGJ1dCB0aGUgYml0bWFwIGNvbnRhaW5zIHRoZSBy ZXBsaWNhIGlkZW50aXR5CiAJCSAqIGluZm9ybWF0aW9uIG9mIHRoZSBjaGlsZCB0YWJsZS4g U28sIGdldCB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUKIAkJICogY2hpbGQgdGFibGUgYXMg cGFyZW50IGFuZCBjaGlsZCBjb2x1bW4gb3JkZXIgY291bGQgYmUgZGlmZmVyZW50LgorCQkg KgorCQkgKiBUT0RPOiBpcyB0aGlzIGFwcGxpY2FibGUgdG8gcHVibGlzaF92aWFfcGFyZW50 PwogCQkgKi8KIAkJaWYgKGNvbnRleHQtPnB1YnZpYXJvb3QpCiAJCXsKQEAgLTI4Niw2ICsy ODgsOCBAQCBwdWJfcmZfY29udGFpbnNfaW52YWxpZF9jb2x1bW4oT2lkIHB1YmlkLCBSZWxh dGlvbiByZWxhdGlvbiwgTGlzdCAqYW5jZXN0b3JzLAogCSAqCiAJICogTm90ZSB0aGF0IGV2 ZW4gdGhvdWdoIHRoZSByb3cgZmlsdGVyIHVzZWQgaXMgZm9yIGFuIGFuY2VzdG9yLCB0aGUK IAkgKiBSRVBMSUNBIElERU5USVRZIHVzZWQgd2lsbCBiZSBmb3IgdGhlIGFjdHVhbCBjaGls ZCB0YWJsZS4KKwkgKgorCSAqIFRPRE86IGlzIHRoaXMgYXBwbGljYWJsZSB0byBwdWJsaXNo X3ZpYV9wYXJlbnQ/CiAJICovCiAJaWYgKHB1YnZpYXJvb3QgJiYgcmVsYXRpb24tPnJkX3Jl bC0+cmVsaXNwYXJ0aXRpb24pCiAJewpAQCAtMzM2LDYgKzM0MCw4IEBAIHB1Yl9yZl9jb250 YWluc19pbnZhbGlkX2NvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0 ICphbmNlc3RvcnMsCiAgKiB0aGUgY29sdW1uIGxpc3QuCiAgKgogICogUmV0dXJucyB0cnVl IGlmIGFueSByZXBsaWNhIGlkZW50aXR5IGNvbHVtbiBpcyBub3QgY292ZXJlZCBieSBjb2x1 bW4gbGlzdC4KKyAqCisgKiBUT0RPOiBwdWJsaXNoX3ZpYV9wYXJlbnQ/CiAgKi8KIGJvb2wK IHB1Yl9jb2xsaXN0X2NvbnRhaW5zX2ludmFsaWRfY29sdW1uKE9pZCBwdWJpZCwgUmVsYXRp b24gcmVsYXRpb24sIExpc3QgKmFuY2VzdG9ycywKQEAgLTYyOCw2ICs2MzQsOCBAQCBUcmFu c2Zvcm1QdWJXaGVyZUNsYXVzZXMoTGlzdCAqdGFibGVzLCBjb25zdCBjaGFyICpxdWVyeVN0 cmluZywKIAkJICogSWYgdGhlIHB1YmxpY2F0aW9uIGRvZXNuJ3QgcHVibGlzaCBjaGFuZ2Vz IHZpYSB0aGUgcm9vdCBwYXJ0aXRpb25lZAogCQkgKiB0YWJsZSwgdGhlIHBhcnRpdGlvbidz IHJvdyBmaWx0ZXIgd2lsbCBiZSB1c2VkLiBTbyBkaXNhbGxvdyB1c2luZwogCQkgKiBXSEVS RSBjbGF1c2Ugb24gcGFydGl0aW9uZWQgdGFibGUgaW4gdGhpcyBjYXNlLgorCQkgKgorCQkg KiBUT0RPOiBkZWNpZGUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggcHVibGlzaF92aWFfcGFy ZW50CiAJCSAqLwogCQlpZiAoIXB1YnZpYXJvb3QgJiYKIAkJCXByaS0+cmVsYXRpb24tPnJk X3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQpAQCAtNzE1LDYg KzcyMyw4IEBAIENoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KGNoYXIgKnB1Ym5hbWUsIExp c3QgKnRhYmxlcywKIAkJICogSWYgdGhlIHB1YmxpY2F0aW9uIGRvZXNuJ3QgcHVibGlzaCBj aGFuZ2VzIHZpYSB0aGUgcm9vdCBwYXJ0aXRpb25lZAogCQkgKiB0YWJsZSwgdGhlIHBhcnRp dGlvbidzIGNvbHVtbiBsaXN0IHdpbGwgYmUgdXNlZC4gU28gZGlzYWxsb3cgdXNpbmcKIAkJ ICogYSBjb2x1bW4gbGlzdCBvbiB0aGUgcGFydGl0aW9uZWQgdGFibGUgaW4gdGhpcyBjYXNl LgorCQkgKgorCQkgKiBUT0RPOiBkZWNpZGUgaWYgdGhpcyBpbnRlcmFjdHMgd2l0aCBwdWJs aXNoX3ZpYV9wYXJlbnQKIAkJICovCiAJCWlmICghcHVidmlhcm9vdCAmJgogCQkJcHJpLT5y ZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUp CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IGQ5ODUyNzhhYzYuLjgyNTA2NDA2 NDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0zNTUsNyArMzU1LDggQEAg c3RhdGljIGJvb2wgTWVyZ2VDaGVja0NvbnN0cmFpbnQoTGlzdCAqY29uc3RyYWludHMsIGNo YXIgKm5hbWUsIE5vZGUgKmV4cHIpOwogc3RhdGljIHZvaWQgTWVyZ2VBdHRyaWJ1dGVzSW50 b0V4aXN0aW5nKFJlbGF0aW9uIGNoaWxkX3JlbCwgUmVsYXRpb24gcGFyZW50X3JlbCk7CiBz dGF0aWMgdm9pZCBNZXJnZUNvbnN0cmFpbnRzSW50b0V4aXN0aW5nKFJlbGF0aW9uIGNoaWxk X3JlbCwgUmVsYXRpb24gcGFyZW50X3JlbCk7CiBzdGF0aWMgdm9pZCBTdG9yZUNhdGFsb2dJ bmhlcml0YW5jZShPaWQgcmVsYXRpb25JZCwgTGlzdCAqc3VwZXJzLAotCQkJCQkJCQkJYm9v bCBjaGlsZF9pc19wYXJ0aXRpb24pOworCQkJCQkJCQkJYm9vbCBjaGlsZF9pc19wYXJ0aXRp b24sCisJCQkJCQkJCQlib29sIHB1Ymxpc2hfdmlhX3BhcmVudCk7CiBzdGF0aWMgdm9pZCBT dG9yZUNhdGFsb2dJbmhlcml0YW5jZTEoT2lkIHJlbGF0aW9uSWQsIE9pZCBwYXJlbnRPaWQs CiAJCQkJCQkJCQkgaW50MzIgc2VxTnVtYmVyLCBSZWxhdGlvbiBpbmhSZWxhdGlvbiwKIAkJ CQkJCQkJCSBib29sIGNoaWxkX2lzX3BhcnRpdGlvbik7CkBAIC01NzcsNiArNTc4LDcgQEAg c3RhdGljIHZvaWQgQVRQcmVwU2V0VGFibGVTcGFjZShBbHRlcmVkVGFibGVJbmZvICp0YWIs IFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJY29uc3QgY2hhciAqdGFibGVzcGFjZW5hbWUsIExP Q0tNT0RFIGxvY2ttb2RlKTsKIHN0YXRpYyB2b2lkIEFURXhlY1NldFRhYmxlU3BhY2UoT2lk IHRhYmxlT2lkLCBPaWQgbmV3VGFibGVTcGFjZSwgTE9DS01PREUgbG9ja21vZGUpOwogc3Rh dGljIHZvaWQgQVRFeGVjU2V0VGFibGVTcGFjZU5vU3RvcmFnZShSZWxhdGlvbiByZWwsIE9p ZCBuZXdUYWJsZVNwYWNlKTsKK3N0YXRpYyB2b2lkIGNoYW5nZV9wdWJsaXNoX3ZpYV9wYXJl bnQoUmVsYXRpb24gcmVsLCBib29sIHNldCk7CiBzdGF0aWMgdm9pZCBBVEV4ZWNTZXRSZWxP cHRpb25zKFJlbGF0aW9uIHJlbCwgTGlzdCAqZGVmTGlzdCwKIAkJCQkJCQkJQWx0ZXJUYWJs ZVR5cGUgb3BlcmF0aW9uLAogCQkJCQkJCQlMT0NLTU9ERSBsb2NrbW9kZSk7CkBAIC0xMTE1 LDcgKzExMTcsOCBAQCBEZWZpbmVSZWxhdGlvbihDcmVhdGVTdG10ICpzdG10LCBjaGFyIHJl bGtpbmQsIE9pZCBvd25lcklkLAogCX0KIAogCS8qIFN0b3JlIGluaGVyaXRhbmNlIGluZm9y bWF0aW9uIGZvciBuZXcgcmVsLiAqLwotCVN0b3JlQ2F0YWxvZ0luaGVyaXRhbmNlKHJlbGF0 aW9uSWQsIGluaGVyaXRPaWRzLCBzdG10LT5wYXJ0Ym91bmQgIT0gTlVMTCk7CisJU3RvcmVD YXRhbG9nSW5oZXJpdGFuY2UocmVsYXRpb25JZCwgaW5oZXJpdE9pZHMsIHN0bXQtPnBhcnRi b3VuZCAhPSBOVUxMLAorCQkJCQkJCVJlbGF0aW9uSXNQdWJsaXNoZWRWaWFQYXJlbnQocmVs KSk7CiAKIAkvKgogCSAqIFByb2Nlc3MgdGhlIHBhcnRpdGlvbmluZyBzcGVjaWZpY2F0aW9u IChpZiBhbnkpIGFuZCBzdG9yZSB0aGUgcGFydGl0aW9uCkBAIC0zMjE4LDcgKzMyMjEsNyBA QCBNZXJnZUNoZWNrQ29uc3RyYWludChMaXN0ICpjb25zdHJhaW50cywgY2hhciAqbmFtZSwg Tm9kZSAqZXhwcikKICAqLwogc3RhdGljIHZvaWQKIFN0b3JlQ2F0YWxvZ0luaGVyaXRhbmNl KE9pZCByZWxhdGlvbklkLCBMaXN0ICpzdXBlcnMsCi0JCQkJCQlib29sIGNoaWxkX2lzX3Bh cnRpdGlvbikKKwkJCQkJCWJvb2wgY2hpbGRfaXNfcGFydGl0aW9uLCBib29sIHB1Ymxpc2hf dmlhX3BhcmVudCkKIHsKIAlSZWxhdGlvbglyZWxhdGlvbjsKIAlpbnQzMgkJc2VxTnVtYmVy OwpAQCAtMzIyOSw2ICszMjMyLDIyIEBAIFN0b3JlQ2F0YWxvZ0luaGVyaXRhbmNlKE9pZCBy ZWxhdGlvbklkLCBMaXN0ICpzdXBlcnMsCiAJICovCiAJQXNzZXJ0KE9pZElzVmFsaWQocmVs YXRpb25JZCkpOwogCisJLyoKKwkgKiBwdWJsaXNoX3ZpYV9wYXJlbnQgcmVxdWlyZXMgZXhh Y3RseSBvbmUgcGFyZW50LiBUcnkgdG8ga2VlcCB0aGlzCisJICogbWVzc2FnaW5nIGNvbnNp c3RlbnQgd2l0aCBBTFRFUiBUQUJMRS9jaGFuZ2VfcHVibGlzaF92aWFfcGFyZW50KCkuCisJ ICoKKwkgKiBFYXJsaWVyLCBpbiBNZXJnZUF0dHJpYnV0ZXMsIHdlIGFscmVhZHkgY2hlY2tl ZCB0aGF0IHdlIGhhZCBvd25lcnNoaXAgb2YKKwkgKiB0aGUgcGFyZW50IHRhYmxlLCBzbyB3 ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoYXQgYWdhaW4gdGhlIHdheSB0aGF0CisJICogY2hh bmdlX3B1Ymxpc2hfdmlhX3BhcmVudCgpIGRvZXMuCisJICovCisJaWYgKHB1Ymxpc2hfdmlh X3BhcmVudCAmJiBsaXN0X2xlbmd0aChzdXBlcnMpICE9IDEpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFU RSksCisJCQkJIGVycm1zZygobGlzdF9sZW5ndGgoc3VwZXJzKSA9PSAwKQorCQkJCQkJPyAi dGFibGUgXCIlc1wiIGRvZXMgbm90IGluaGVyaXQgZnJvbSBhbnkgdGFibGVzIgorCQkJCQkJ OiAidGFibGUgXCIlc1wiIGluaGVyaXRzIGZyb20gbXVsdGlwbGUgdGFibGVzIiwKKwkJCQkJ CWdldF9yZWxfbmFtZShyZWxhdGlvbklkKSkpKTsKKwogCWlmIChzdXBlcnMgPT0gTklMKQog CQlyZXR1cm47CiAKQEAgLTMyNDMsNyArMzI2MiwxMiBAQCBTdG9yZUNhdGFsb2dJbmhlcml0 YW5jZShPaWQgcmVsYXRpb25JZCwgTGlzdCAqc3VwZXJzLAogCSAqLwogCXJlbGF0aW9uID0g dGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCi0J c2VxTnVtYmVyID0gMTsKKwkvKgorCSAqIE5vcm1hbGx5IGluaHNlcW5vIHN0YXJ0cyBhdCBv bmUsIGJ1dCBmb3IgcHVibGlzaF92aWFfcGFyZW50LCBpdCdzIGdpdmVuIGEKKwkgKiBzZW50 aW5lbCB2YWx1ZSBvZiB6ZXJvLiAoSW4gdGhhdCBjYXNlLCB3ZSdsbCBvbmx5IGdvIHRocm91 Z2ggdGhpcyBsb29wCisJICogb25jZSwgYXMgdGhlIGxpc3RfbGVuZ3RoKCkgY2hlY2sgYWJv dmUgZW5mb3JjZXMuKQorCSAqLworCXNlcU51bWJlciA9IHB1Ymxpc2hfdmlhX3BhcmVudCA/ IDAgOiAxOwogCWZvcmVhY2goZW50cnksIHN1cGVycykKIAl7CiAJCU9pZAkJCXBhcmVudE9p ZCA9IGxmaXJzdF9vaWQoZW50cnkpOwpAQCAtMTQyNzYsNiArMTQzMDAsODggQEAgQVRQcmVw U2V0VGFibGVTcGFjZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwgY29u c3QgY2hhciAqdGFibGVzcGFjZW4KIAl0YWItPm5ld1RhYmxlU3BhY2UgPSB0YWJsZXNwYWNl SWQ7CiB9CiAKK3N0YXRpYyB2b2lkCitjaGFuZ2VfcHVibGlzaF92aWFfcGFyZW50KFJlbGF0 aW9uIHJlbCwgYm9vbCBzZXQpCit7CisJUmVsYXRpb24JaW5oUmVsOworCVNjYW5LZXlEYXRh IGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCU9pZAkJCXBhcmVudE9pZDsKKwlSZWxhdGlv bglwYXJlbnRSZWw7CisJSGVhcFR1cGxlCXR1cGxlLCBjb3B5VHVwbGU7CisJRm9ybV9wZ19p bmhlcml0cyBmb3JtOworCisJLyogT3BlbiBwZ19pbmhlcml0cyB3aXRoIFJvd0V4Y2x1c2l2 ZUxvY2sgc28gdGhhdCB3ZSBjYW4gdXBkYXRlIGl0LiAqLworCWluaFJlbCA9IHRhYmxlX29w ZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qCisJICog V2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBhbiBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAg YWxyZWFkeSBleGlzdHMsIGFuZAorCSAqIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgY2FuZGlk YXRlIHBhcmVudCBmb3IgdGhpcyB0YWJsZS4KKwkgKgorCSAqIFRPRE86IGRvIHdlIGhhdmUg dG8gbG9jayB0aGUgdGFibGVzIHRoZW1zZWx2ZXMgdG8gYXZvaWQgcmFjZXM/CisJICovCisJ U2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVt KFJlbGF0aW9uR2V0UmVsaWQocmVsKSkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihpbmhSZWwsIEluaGVyaXRzUmVsaWRTZXFub0luZGV4SWQsIHRydWUsCisJCQkJCQkJICBO VUxMLCAxLCAma2V5KTsKKwl0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJ CSBlcnJtc2coInRhYmxlIFwiJXNcIiBkb2VzIG5vdCBpbmhlcml0IGZyb20gYW55IHRhYmxl cyIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOworCisJZm9ybSA9 IChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QodHVwbGUpOworCXBhcmVudE9pZCA9IGZv cm0tPmluaHBhcmVudDsKKwljb3B5VHVwbGUgPSBoZWFwX2NvcHl0dXBsZSh0dXBsZSk7CisK KwlpZiAoSGVhcFR1cGxlSXNWYWxpZChzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVR VUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJ0YWJsZSBcIiVzXCIgaW5oZXJpdHMgZnJv bSBtdWx0aXBsZSB0YWJsZXMiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSkpKTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisKKwlpZiAoc2V0KQorCXsKKwkJ LyoKKwkJICogT3BlbiBvdXIgcGFyZW50IHRhYmxlIGFuZCBjaGVjayBwZXJtaXNzaW9ucy4g TGlrZSBBVFRBQ0ggUEFSVElUSU9OLAorCQkgKiB3ZSByZXF1aXJlIG93bmVyc2hpcCBvZiB0 aGUgcGFyZW50IHRhYmxlIGluIGFkZGl0aW9uIHRvIHRoZSBjaGlsZAorCQkgKiAod2hpY2gg aGFzIGFscmVhZHkgYmVlbiBjaGVja2VkIGluIEFUUHJlcENtZCkuCisJCSAqCisJCSAqIFRP RE86IHdoYXQgbG9jayBzdHJlbmd0aCBpcyBuZWVkZWQgaGVyZT8gSXMgbmVzdGluZyBpdCBp bnNpZGUgdGhlCisJCSAqIGluaFJlbCBsb2NrIGEgcmlzaz8KKwkJICovCisJCXBhcmVudFJl bCA9IHRhYmxlX29wZW4ocGFyZW50T2lkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJQVRT aW1wbGVQZXJtaXNzaW9ucyhBVF9TZXRSZWxPcHRpb25zLCBwYXJlbnRSZWwsIEFUVF9UQUJM RSk7CisJCXRhYmxlX2Nsb3NlKHBhcmVudFJlbCwgTm9Mb2NrKTsgLyogVE9ETzogZG8gd2Ug bmVlZCB0byBoYW5nIG9udG8gdGhlIGxvY2s/ICovCisJfQorCWVsc2UKKwl7CisJCS8qCisJ CSAqIE93bmVyc2hpcCBvZiB0aGUgcGFyZW50IGlzbid0IG5lZWRlZCBmb3IgdW5zZXR0aW5n IHRoZSBmbGFnLCBqdXN0CisJCSAqIGxpa2Ugd2Ugd291bGRuJ3QgY2hlY2sgb3duZXJzaGlw IGR1cmluZyBOTyBJTkhFUklULgorCQkgKi8KKwl9CisKKwkvKgorCSAqIE1hcmsgdGhlIGlu aGVyaXRhbmNlIGFzIGEgbG9naWNhbCByb290IGJ5IHNldHRpbmcgaW5oc2Vxbm8gdG8gemVy by4KKwkgKiBVbm1hcmsgaXQgYnkgc2V0dGluZyBpbmhzZXFubyB0byBvbmUgKHNpbmNlIHRo ZXJlJ3Mgb25seSBvbmUgcGFyZW50KS4KKwkgKi8KKwlmb3JtID0gKEZvcm1fcGdfaW5oZXJp dHMpIEdFVFNUUlVDVChjb3B5VHVwbGUpOworCWZvcm0tPmluaHNlcW5vID0gc2V0ID8gMCA6 IDE7CisKKwlDYXRhbG9nVHVwbGVVcGRhdGUoaW5oUmVsLCAmY29weVR1cGxlLT50X3NlbGYs IGNvcHlUdXBsZSk7CisKKwloZWFwX2ZyZWV0dXBsZShjb3B5VHVwbGUpOworCXRhYmxlX2Ns b3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9jayk7Cit9CisKIC8qCiAgKiBTZXQsIHJlc2V0 LCBvciByZXBsYWNlIHJlbG9wdGlvbnMuCiAgKi8KQEAgLTE0Mzg3LDYgKzE0NDkzLDM5IEBA IEFURXhlY1NldFJlbE9wdGlvbnMoUmVsYXRpb24gcmVsLCBMaXN0ICpkZWZMaXN0LCBBbHRl clRhYmxlVHlwZSBvcGVyYXRpb24sCiAJCX0KIAl9CiAKKwkvKiBFeHRyYSB3b3JrIGZvciBw dWJsaXNoX3ZpYV9wYXJlbnQgKi8KKwlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVM S0lORF9SRUxBVElPTikKKwl7CisJCUxpc3QJICAgKmhlYXBfb3B0aW9ucyA9IHVudHJhbnNm b3JtUmVsT3B0aW9ucyhuZXdPcHRpb25zKTsKKwkJTGlzdENlbGwgICAqY2VsbDsKKwkJYm9v bAkJY3VyU2V0dGluZyA9IFJlbGF0aW9uSXNQdWJsaXNoZWRWaWFQYXJlbnQocmVsKTsKKwkJ RGVmRWxlbSAgICAqcHViRWxlbSA9IE5VTEw7CisKKwkJZm9yZWFjaCAoY2VsbCwgaGVhcF9v cHRpb25zKQorCQl7CisJCQlEZWZFbGVtICAgICpkZWZlbCA9IGxmaXJzdF9ub2RlKERlZkVs ZW0sIGNlbGwpOworCisJCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAicHVibGlzaF92 aWFfcGFyZW50IikgPT0gMCkKKwkJCXsKKwkJCQlwdWJFbGVtID0gZGVmZWw7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKworCQlpZiAocHViRWxlbSkKKwkJeworCQkJYm9vbAkJbmV3U2V0 dGluZyA9IGRlZkdldEJvb2xlYW4ocHViRWxlbSk7CisKKwkJCWlmIChuZXdTZXR0aW5nICE9 IGN1clNldHRpbmcpCisJCQkJY2hhbmdlX3B1Ymxpc2hfdmlhX3BhcmVudChyZWwsIG5ld1Nl dHRpbmcpOworCQl9CisJCWVsc2UgaWYgKGN1clNldHRpbmcpCisJCXsKKwkJCS8qIHB1Ymxp c2hfdmlhX3BhcmVudCB3YXMgUkVTRVQgKi8KKwkJCWNoYW5nZV9wdWJsaXNoX3ZpYV9wYXJl bnQocmVsLCBmYWxzZSk7CisJCX0KKwl9CisKIAkvKgogCSAqIEFsbCB3ZSBuZWVkIGRvIGhl cmUgaXMgdXBkYXRlIHRoZSBwZ19jbGFzcyByb3c7IHRoZSBuZXcgb3B0aW9ucyB3aWxsIGJl CiAJICogcHJvcGFnYXRlZCBpbnRvIHJlbGNhY2hlcyBkdXJpbmcgcG9zdC1jb21taXQgY2Fj aGUgaW52YWwuCkBAIC0xNDk3OSw2ICsxNTExOCwxMyBAQCBBVEV4ZWNBZGRJbmhlcml0KFJl bGF0aW9uIGNoaWxkX3JlbCwgUmFuZ2VWYXIgKnBhcmVudCwgTE9DS01PREUgbG9ja21vZGUp CiAJCQkJCQl0cmlnZ2VyX25hbWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNoaWxkX3Jl bCkpLAogCQkJCSBlcnJkZXRhaWwoIlJPVyB0cmlnZ2VycyB3aXRoIHRyYW5zaXRpb24gdGFi bGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluaGVyaXRhbmNlIGhpZXJhcmNoaWVzLiIpKSk7 CiAKKwkvKiBwdWJsaXNoX3ZpYV9wYXJlbnQgdGFibGVzIGFyZSBub3QgYWxsb3dlZCB0byBh ZGQgYWRkaXRpb25hbCBwYXJlbnRzLiAqLworCWlmIChSZWxhdGlvbklzUHVibGlzaGVkVmlh UGFyZW50KGNoaWxkX3JlbCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coInJlbGF0aW9uIG9w dGlvbiBcIiVzXCIgcHJldmVudHMgdGFibGUgXCIlc1wiIGZyb20gY2hhbmdpbmcgaW5oZXJp dGFuY2UiLAorCQkJCQkJInB1Ymxpc2hfdmlhX3BhcmVudCIsIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKGNoaWxkX3JlbCkpKSk7CisKIAkvKiBPSyB0byBjcmVhdGUgaW5oZXJpdGFuY2Ug Ki8KIAlDcmVhdGVJbmhlcml0YW5jZShjaGlsZF9yZWwsIHBhcmVudF9yZWwpOwogCkBAIC0x NTM5NSw2ICsxNTU0MSwxMyBAQCBBVEV4ZWNEcm9wSW5oZXJpdChSZWxhdGlvbiByZWwsIFJh bmdlVmFyICpwYXJlbnQsIExPQ0tNT0RFIGxvY2ttb2RlKQogCQkJCShlcnJjb2RlKEVSUkNP REVfV1JPTkdfT0JKRUNUX1RZUEUpLAogCQkJCSBlcnJtc2coImNhbm5vdCBjaGFuZ2UgaW5o ZXJpdGFuY2Ugb2YgYSBwYXJ0aXRpb24iKSkpOwogCisJLyogcHVibGlzaF92aWFfcGFyZW50 IHRhYmxlcyBhcmUgbm90IGFsbG93ZWQgdG8gcmVtb3ZlIHRoZWlyIHBhcmVudC4gKi8KKwlp ZiAoUmVsYXRpb25Jc1B1Ymxpc2hlZFZpYVBhcmVudChyZWwpKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkg ZXJybXNnKCJyZWxhdGlvbiBvcHRpb24gXCIlc1wiIHByZXZlbnRzIHRhYmxlIFwiJXNcIiBm cm9tIGNoYW5naW5nIGluaGVyaXRhbmNlIiwKKwkJCQkJCSJwdWJsaXNoX3ZpYV9wYXJlbnQi LCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOworCiAJLyoKIAkgKiBBY2Nlc3NT aGFyZUxvY2sgb24gdGhlIHBhcmVudCBpcyBwcm9iYWJseSBlbm91Z2gsIHNlZWluZyB0aGF0 IERST1AKIAkgKiBUQUJMRSBkb2Vzbid0IGxvY2sgcGFyZW50IHRhYmxlcyBhdCBhbGwuICBX ZSBuZWVkIHNvbWUgbG9jayBzaW5jZSB3ZSdsbApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFydGl0aW9uaW5nL3BhcnRkZXNjLmMgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFy dGRlc2MuYwppbmRleCA3YTJiNWU1N2ZmLi5kZmIyNzk5MGY5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGRlc2MuYworKysgYi9zcmMvYmFja2VuZC9wYXJ0 aXRpb25pbmcvcGFydGRlc2MuYwpAQCAtMTYyLDcgKzE2Miw4IEBAIFJlbGF0aW9uQnVpbGRQ YXJ0aXRpb25EZXNjKFJlbGF0aW9uIHJlbCwgYm9vbCBvbWl0X2RldGFjaGVkKQogCWluaG9p ZHMgPSBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKFJlbGF0aW9uR2V0UmVs aWQocmVsKSwKIAkJCQkJCQkJCQkJCSBvbWl0X2RldGFjaGVkLCBOb0xvY2ssCiAJCQkJCQkJ CQkJCQkgJmRldGFjaGVkX2V4aXN0LAotCQkJCQkJCQkJCQkJICZkZXRhY2hlZF94bWluKTsK KwkJCQkJCQkJCQkJCSAmZGV0YWNoZWRfeG1pbiwKKwkJCQkJCQkJCQkJCSBmYWxzZSk7CiAK IAlucGFydHMgPSBsaXN0X2xlbmd0aChpbmhvaWRzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5kZXggNmQ0NjE2NTRhYi4uOGQwZjA4 MWRhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJs ZXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3lu Yy5jCkBAIC03NTgsMTEgKzc1OCwxMiBAQCBjb3B5X3JlYWRfZGF0YSh2b2lkICpvdXRidWYs IGludCBtaW5yZWFkLCBpbnQgbWF4cmVhZCkKIC8qCiAgKiBHZXQgaW5mb3JtYXRpb24gYWJv dXQgcmVtb3RlIHJlbGF0aW9uIGluIHNpbWlsYXIgZmFzaGlvbiB0aGUgUkVMQVRJT04KICAq IG1lc3NhZ2UgcHJvdmlkZXMgZHVyaW5nIHJlcGxpY2F0aW9uLiBUaGlzIGZ1bmN0aW9uIGFs c28gcmV0dXJucyB0aGUgcmVsYXRpb24KLSAqIHF1YWxpZmljYXRpb25zIHRvIGJlIHVzZWQg aW4gdGhlIENPUFkgY29tbWFuZC4KKyAqIHF1YWxpZmljYXRpb25zIHRvIGJlIHVzZWQgaW4g dGhlIENPUFkgY29tbWFuZCwgYW5kIHRoZSBsaXN0IG9mIHRhYmxlcyB0byBDT1BZCisgKiAo d2hpY2ggZm9yIG1vc3QgdGFibGVzIHdpbGwgY29udGFpbiBvbmx5IG9uZSBlbnRyeSkuCiAg Ki8KIHN0YXRpYyB2b2lkCiBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1l LCBjaGFyICpyZWxuYW1lLAotCQkJCQkJTG9naWNhbFJlcFJlbGF0aW9uICpscmVsLCBMaXN0 ICoqcXVhbCkKKwkJCQkJCUxvZ2ljYWxSZXBSZWxhdGlvbiAqbHJlbCwgTGlzdCAqKnF1YWws IExpc3QgKip0b19jb3B5KQogewogCVdhbFJjdkV4ZWNSZXN1bHQgKnJlczsKIAlTdHJpbmdJ bmZvRGF0YSBjbWQ7CkBAIC0xMDczLDYgKzEwNzQsODcgQEAgZmV0Y2hfcmVtb3RlX3RhYmxl X2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwKIAkJd2FscmN2X2NsZWFyX3Jl c3VsdChyZXMpOwogCX0KIAorCS8qCisJICogU2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIg dGFibGVzIHRvIGJlIGNvcGllZCBiZXNpZGVzIHRoZSBvcmlnaW5hbC4gVGhpcworCSAqIGhh cHBlbnMgd2hlbiBhIGRlc2NlbmRhbnQgaW4gdGhlIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hp cCBpcyBtYXJrZWQgd2l0aAorCSAqIHB1Ymxpc2hfdmlhX3BhcmVudCBhbmQgaXMgcGFydCBv ZiBhIHB1YmxpY2F0aW9uIHdpdGgKKwkgKiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9 IHRydWUuCisJICoKKwkgKiBGSVhNRTogaWYgdHdvIHB1YmxpY2F0aW9ucyBoYXZlIGNvbmZs aWN0aW5nIHNldHRpbmdzIGZvcgorCSAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LCB0 aGlzIGJlaGF2ZXMgc3RyYW5nZWx5LiBJdCBsb29rcyBsaWtlIHRoYXQncworCSAqIHRydWUg Zm9yIHJlZ3VsYXIgcGFydGl0aW9ucyB0b28uLi4KKwkgKi8KKwlpZiAod2FscmN2X3NlcnZl cl92ZXJzaW9uKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pID49IDE2MDAwMCkKKwl7CisJCU9p ZAkJCWRlc2NSb3dbXSA9IHtURVhUT0lELCBURVhUT0lEfTsKKwkJU3RyaW5nSW5mb0RhdGEg cHViX25hbWVzOworCisJCS8qIEJ1aWxkIHRoZSBwdWJuYW1lIGxpc3QuICovCisJCWluaXRT dHJpbmdJbmZvKCZwdWJfbmFtZXMpOworCQlmb3JlYWNoKGxjLCBNeVN1YnNjcmlwdGlvbi0+ cHVibGljYXRpb25zKQorCQl7CisJCQljaGFyCSAgICpwdWJuYW1lID0gc3RyVmFsKGxmaXJz dChsYykpOworCisJCQlpZiAoZm9yZWFjaF9jdXJyZW50X2luZGV4KGxjKSA+IDApCisJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcHViX25hbWVzLCAiLCAiKTsKKworCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmcHViX25hbWVzLCBxdW90ZV9saXRlcmFsX2NzdHIocHVibmFt ZSkpOworCQl9CisKKwkJLyoKKwkJICogQXNrIHRoZSBzZXJ2ZXIgd2hhdCBpdCB3YW50cyB1 cyB0byBzeW5jLgorCQkgKi8KKwkJcmVzZXRTdHJpbmdJbmZvKCZjbWQpOworCQlhcHBlbmRT dHJpbmdJbmZvKCZjbWQsCisJCQkJCQkgIlNFTEVDVCBESVNUSU5DVCBuLm5zcG5hbWUsIGMu cmVsbmFtZSIKKwkJCQkJCSAiICBGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcCwi CisJCQkJCQkgIiAgICAgICBwZ19jYXRhbG9nLnBnX2NsYXNzIGMiCisJCQkJCQkgIiAgSk9J TiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIgorCQkJCQkJICIgICAgT04gKGMucmVsbmFt ZXNwYWNlID0gbi5vaWQpIgorCQkJCQkJICIgIEpPSU4gTEFURVJBTCBwZ19jYXRhbG9nLnBn X2dldF9wdWJsaWNhdGlvbl9yZWxzX3RvX3N5bmMoJXU6OnJlZ2NsYXNzLCBwLnB1Ym5hbWUp IHJlbGlkIgorCQkJCQkJICIgICAgT04gKGMub2lkID0gcmVsaWQpIgorCQkJCQkJICIgV0hF UkUgcC5wdWJuYW1lIElOICggJXMgKSIsCisJCQkJCQkgbHJlbC0+cmVtb3RlaWQsIHB1Yl9u YW1lcy5kYXRhKTsKKworCQlyZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZD b25uLCBjbWQuZGF0YSwKKwkJCQkJCSAgbGVuZ3Rob2YoZGVzY1JvdyksIGRlc2NSb3cpOwor CisJCWlmIChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVTKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IGZldGNoIGxvZ2ljYWwgZGVzY2VuZGFu dHMgZm9yIHRhYmxlIFwiJXMuJXNcIiBmcm9tIHB1Ymxpc2hlcjogJXMiLAorCQkJCQkJCW5z cG5hbWUsIHJlbG5hbWUsIHJlcy0+ZXJyKSkpOworCisJCXNsb3QgPSBNYWtlU2luZ2xlVHVw bGVUYWJsZVNsb3QocmVzLT50dXBsZWRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCQl3 aGlsZSAodHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QocmVzLT50dXBsZXN0b3JlLCB0cnVlLCBm YWxzZSwgc2xvdCkpCisJCXsKKwkJCWNoYXIJICAgKmRlc2NfbnNwbmFtZTsKKwkJCWNoYXIJ ICAgKmRlc2NfcmVsbmFtZTsKKwkJCWNoYXIJICAgKnF1b3RlZDsKKworCQkJZGVzY19uc3Bu YW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dldGF0dHIoc2xvdCwgMSwgJmlzbnVs bCkpOworCQkJQXNzZXJ0KCFpc251bGwpOworCQkJZGVzY19yZWxuYW1lID0gVGV4dERhdHVt R2V0Q1N0cmluZyhzbG90X2dldGF0dHIoc2xvdCwgMiwgJmlzbnVsbCkpOworCQkJQXNzZXJ0 KCFpc251bGwpOworCisJCQlxdW90ZWQgPSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihk ZXNjX25zcG5hbWUsIGRlc2NfcmVsbmFtZSk7CisJCQkqdG9fY29weSA9IGxhcHBlbmQoKnRv X2NvcHksIHF1b3RlZCk7CisKKwkJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCQl9CisKKwkJ RXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKwkJd2FscmN2X2NsZWFyX3Jl c3VsdChyZXMpOworCisJCXBmcmVlKHB1Yl9uYW1lcy5kYXRhKTsKKwl9CisJZWxzZQorCXsK KwkJLyogRm9yIG9sZGVyIHNlcnZlcnMsIHdlIG9ubHkgQ09QWSB0aGUgdGFibGUgaXRzZWxm LiAqLworCQljaGFyICAgKnF1b3RlZCA9IHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGxy ZWwtPm5zcG5hbWUsCisJCQkJCQkJCQkJCQkJbHJlbC0+cmVsbmFtZSk7CisJCSp0b19jb3B5 ID0gbGFwcGVuZCgqdG9fY29weSwgcXVvdGVkKTsKKwl9CisKIAlwZnJlZShjbWQuZGF0YSk7 CiB9CiAKQEAgLTEwODcsNiArMTE2OSw4IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQog CUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsbWFwZW50cnk7CiAJTG9naWNhbFJlcFJlbGF0 aW9uIGxyZWw7CiAJTGlzdAkgICAqcXVhbCA9IE5JTDsKKwlMaXN0CSAgICp0b19jb3B5ID0g TklMOworCUxpc3RDZWxsICAgKmN1cjsKIAlXYWxSY3ZFeGVjUmVzdWx0ICpyZXM7CiAJU3Ry aW5nSW5mb0RhdGEgY21kOwogCUNvcHlGcm9tU3RhdGUgY3N0YXRlOwpAQCAtMTA5Niw3ICsx MTgwLDggQEAgY29weV90YWJsZShSZWxhdGlvbiByZWwpCiAKIAkvKiBHZXQgdGhlIHB1Ymxp c2hlciByZWxhdGlvbiBpbmZvLiAqLwogCWZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGdldF9u YW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpKSwKLQkJCQkJCQlSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLCAmbHJlbCwgJnF1YWwpOworCQkJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksICZscmVsLCAmcXVhbCwKKwkJCQkJCQkmdG9fY29w eSk7CiAKIAkvKiBQdXQgdGhlIHJlbGF0aW9uIGludG8gcmVsbWFwLiAqLwogCWxvZ2ljYWxy ZXBfcmVsbWFwX3VwZGF0ZSgmbHJlbCk7CkBAIC0xMTA1LDEwNSArMTE5MCwxMDkgQEAgY29w eV90YWJsZShSZWxhdGlvbiByZWwpCiAJcmVsbWFwZW50cnkgPSBsb2dpY2FscmVwX3JlbF9v cGVuKGxyZWwucmVtb3RlaWQsIE5vTG9jayk7CiAJQXNzZXJ0KHJlbCA9PSByZWxtYXBlbnRy eS0+bG9jYWxyZWwpOwogCi0JLyogU3RhcnQgY29weSBvbiB0aGUgcHVibGlzaGVyLiAqLwot CWluaXRTdHJpbmdJbmZvKCZjbWQpOwotCi0JLyogUmVndWxhciB0YWJsZSB3aXRoIG5vIHJv dyBmaWx0ZXIgKi8KLQlpZiAobHJlbC5yZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04gJiYg cXVhbCA9PSBOSUwpCisJZm9yZWFjaChjdXIsIHRvX2NvcHkpCiAJewotCQlhcHBlbmRTdHJp bmdJbmZvKCZjbWQsICJDT1BZICVzICgiLAotCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVu dGlmaWVyKGxyZWwubnNwbmFtZSwgbHJlbC5yZWxuYW1lKSk7Ci0KLQkJLyoKLQkJICogWFhY IERvIHdlIG5lZWQgdG8gbGlzdCB0aGUgY29sdW1ucyBpbiBhbGwgY2FzZXM/IE1heWJlIHdl J3JlCi0JCSAqIHJlcGxpY2F0aW5nIGFsbCBjb2x1bW5zPwotCQkgKi8KLQkJZm9yIChpbnQg aSA9IDA7IGkgPCBscmVsLm5hdHRzOyBpKyspCi0JCXsKLQkJCWlmIChpID4gMCkKLQkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIsICIpOworCQljaGFyCSAgICpxdW90ZWRf bmFtZSA9IGxmaXJzdChjdXIpOwogCi0JCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQs IHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkpOwotCQl9CisJCS8qIFN0YXJ0 IGNvcHkgb24gdGhlIHB1Ymxpc2hlci4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJmNtZCk7CiAK LQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiKSBUTyBTVERPVVQiKTsKLQl9Ci0J ZWxzZQotCXsKLQkJLyoKLQkJICogRm9yIG5vbi10YWJsZXMgYW5kIHRhYmxlcyB3aXRoIHJv dyBmaWx0ZXJzLCB3ZSBuZWVkIHRvIGRvIENPUFkKLQkJICogKFNFTEVDVCAuLi4pLCBidXQg d2UgY2FuJ3QganVzdCBkbyBTRUxFQ1QgKiBiZWNhdXNlIHdlIG5lZWQgdG8gbm90Ci0JCSAq IGNvcHkgZ2VuZXJhdGVkIGNvbHVtbnMuIEZvciB0YWJsZXMgd2l0aCBhbnkgcm93IGZpbHRl cnMsIGJ1aWxkIGEKLQkJICogU0VMRUNUIHF1ZXJ5IHdpdGggT1InZWQgcm93IGZpbHRlcnMg Zm9yIENPUFkuCi0JCSAqLwotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICJDT1BZ IChTRUxFQ1QgIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbHJlbC5uYXR0czsgaSsrKQor CQkvKiBSZWd1bGFyIHRhYmxlIHdpdGggbm8gcm93IGZpbHRlciAqLworCQlpZiAobHJlbC5y ZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04gJiYgcXVhbCA9PSBOSUwpCiAJCXsKLQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgcXVvdGVfaWRlbnRpZmllcihscmVsLmF0dG5h bWVzW2ldKSk7Ci0JCQlpZiAoaSA8IGxyZWwubmF0dHMgLSAxKQotCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmNtZCwgIiwgIik7Ci0JCX0KKwkJCWFwcGVuZFN0cmluZ0luZm8oJmNt ZCwgIkNPUFkgJXMgKCIsIHF1b3RlZF9uYW1lKTsKIAotCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjbWQsICIgRlJPTSAiKTsKKwkJCS8qCisJCQkgKiBYWFggRG8gd2UgbmVlZCB0byBs aXN0IHRoZSBjb2x1bW5zIGluIGFsbCBjYXNlcz8gTWF5YmUgd2UncmUKKwkJCSAqIHJlcGxp Y2F0aW5nIGFsbCBjb2x1bW5zPworCQkJICovCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGxy ZWwubmF0dHM7IGkrKykKKwkJCXsKKwkJCQlpZiAoaSA+IDApCisJCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmNtZCwgIiwgIik7CiAKLQkJLyoKLQkJICogRm9yIHJlZ3VsYXIgdGFi bGVzLCBtYWtlIHN1cmUgd2UgZG9uJ3QgY29weSBkYXRhIGZyb20gYSBjaGlsZCB0aGF0Ci0J CSAqIGluaGVyaXRzIHRoZSBuYW1lZCB0YWJsZSBhcyB0aG9zZSB3aWxsIGJlIGNvcGllZCBz ZXBhcmF0ZWx5LgotCQkgKi8KLQkJaWYgKGxyZWwucmVsa2luZCA9PSBSRUxLSU5EX1JFTEFU SU9OKQotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiT05MWSAiKTsKKwkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsIHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRu YW1lc1tpXSkpOworCQkJfQogCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgcXVv dGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobHJlbC5uc3BuYW1lLCBscmVsLnJlbG5hbWUpKTsK LQkJLyogbGlzdCBvZiBPUidlZCBmaWx0ZXJzICovCi0JCWlmIChxdWFsICE9IE5JTCkKKwkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIikgVE8gU1RET1VUIik7CisJCX0KKwkJ ZWxzZQogCQl7Ci0JCQlMaXN0Q2VsbCAgICpsYzsKLQkJCWNoYXIJICAgKnEgPSBzdHJWYWwo bGluaXRpYWwocXVhbCkpOworCQkJLyoKKwkJCSAqIEZvciBub24tdGFibGVzIGFuZCB0YWJs ZXMgd2l0aCByb3cgZmlsdGVycywgd2UgbmVlZCB0byBkbyBDT1BZCisJCQkgKiAoU0VMRUNU IC4uLiksIGJ1dCB3ZSBjYW4ndCBqdXN0IGRvIFNFTEVDVCAqIGJlY2F1c2Ugd2UgbmVlZCB0 byBub3QKKwkJCSAqIGNvcHkgZ2VuZXJhdGVkIGNvbHVtbnMuIEZvciB0YWJsZXMgd2l0aCBh bnkgcm93IGZpbHRlcnMsIGJ1aWxkIGEKKwkJCSAqIFNFTEVDVCBxdWVyeSB3aXRoIE9SJ2Vk IHJvdyBmaWx0ZXJzIGZvciBDT1BZLgorCQkJICovCisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjbWQsICJDT1BZIChTRUxFQ1QgIik7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGxy ZWwubmF0dHM7IGkrKykKKwkJCXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQs IHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkpOworCQkJCWlmIChpIDwgbHJl bC5uYXR0cyAtIDEpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiwgIik7 CisJCQl9CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiBGUk9NICIpOwor CisJCQkvKgorCQkJICogRm9yIHJlZ3VsYXIgdGFibGVzLCBtYWtlIHN1cmUgd2UgZG9uJ3Qg Y29weSBkYXRhIGZyb20gYSBjaGlsZCB0aGF0CisJCQkgKiBpbmhlcml0cyB0aGUgbmFtZWQg dGFibGUgYXMgdGhvc2Ugd2lsbCBiZSBjb3BpZWQgc2VwYXJhdGVseS4KKwkJCSAqLworCQkJ aWYgKGxyZWwucmVsa2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OKQorCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmNtZCwgIk9OTFkgIik7CiAKLQkJCWFwcGVuZFN0cmluZ0luZm8oJmNt ZCwgIiBXSEVSRSAlcyIsIHEpOwotCQkJZm9yX2VhY2hfZnJvbShsYywgcXVhbCwgMSkKKwkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgcXVvdGVkX25hbWUpOworCQkJLyogbGlz dCBvZiBPUidlZCBmaWx0ZXJzICovCisJCQlpZiAocXVhbCAhPSBOSUwpCiAJCQl7Ci0JCQkJ cSA9IHN0clZhbChsZmlyc3QobGMpKTsKLQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICIg T1IgJXMiLCBxKTsKKwkJCQlMaXN0Q2VsbCAgICpsYzsKKwkJCQljaGFyCSAgICpxID0gc3Ry VmFsKGxpbml0aWFsKHF1YWwpKTsKKworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIiBX SEVSRSAlcyIsIHEpOworCQkJCWZvcl9lYWNoX2Zyb20obGMsIHF1YWwsIDEpCisJCQkJewor CQkJCQlxID0gc3RyVmFsKGxmaXJzdChsYykpOworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZj bWQsICIgT1IgJXMiLCBxKTsKKwkJCQl9CisJCQkJbGlzdF9mcmVlX2RlZXAocXVhbCk7CiAJ CQl9Ci0JCQlsaXN0X2ZyZWVfZGVlcChxdWFsKTsKLQkJfQogCi0JCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmNtZCwgIikgVE8gU1RET1VUIik7Ci0JfQorCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmY21kLCAiKSBUTyBTVERPVVQiKTsKKwkJfQogCi0JLyoKLQkgKiBQcmlvciB0 byB2MTYsIGluaXRpYWwgdGFibGUgc3luY2hyb25pemF0aW9uIHdpbGwgdXNlIHRleHQgZm9y bWF0IGV2ZW4KLQkgKiBpZiB0aGUgYmluYXJ5IG9wdGlvbiBpcyBlbmFibGVkIGZvciBhIHN1 YnNjcmlwdGlvbi4KLQkgKi8KLQlpZiAod2FscmN2X3NlcnZlcl92ZXJzaW9uKExvZ1JlcFdv cmtlcldhbFJjdkNvbm4pID49IDE2MDAwMCAmJgotCQlNeVN1YnNjcmlwdGlvbi0+YmluYXJ5 KQotCXsKLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiIFdJVEggKEZPUk1BVCBi aW5hcnkpIik7Ci0JCW9wdGlvbnMgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJmb3JtYXQi LAotCQkJCQkJCQkJCSAoTm9kZSAqKSBtYWtlU3RyaW5nKCJiaW5hcnkiKSwgLTEpKTsKLQl9 CisJCS8qCisJCSAqIFByaW9yIHRvIHYxNiwgaW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6YXRp b24gd2lsbCB1c2UgdGV4dCBmb3JtYXQgZXZlbgorCQkgKiBpZiB0aGUgYmluYXJ5IG9wdGlv biBpcyBlbmFibGVkIGZvciBhIHN1YnNjcmlwdGlvbi4KKwkJICovCisJCWlmICh3YWxyY3Zf c2VydmVyX3ZlcnNpb24oTG9nUmVwV29ya2VyV2FsUmN2Q29ubikgPj0gMTYwMDAwICYmCisJ CQlNeVN1YnNjcmlwdGlvbi0+YmluYXJ5KQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjbWQsICIgV0lUSCAoRk9STUFUIGJpbmFyeSkiKTsKKwkJCW9wdGlvbnMgPSBsaXN0 X21ha2UxKG1ha2VEZWZFbGVtKCJmb3JtYXQiLAorCQkJCQkJCQkJCQkgKE5vZGUgKikgbWFr ZVN0cmluZygiYmluYXJ5IiksIC0xKSk7CisJCX0KIAotCXJlcyA9IHdhbHJjdl9leGVjKExv Z1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLCAwLCBOVUxMKTsKLQlwZnJlZShjbWQu ZGF0YSk7Ci0JaWYgKHJlcy0+c3RhdHVzICE9IFdBTFJDVl9PS19DT1BZX09VVCkKLQkJZXJl cG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSks Ci0JCQkJIGVycm1zZygiY291bGQgbm90IHN0YXJ0IGluaXRpYWwgY29udGVudHMgY29weSBm b3IgdGFibGUgXCIlcy4lc1wiOiAlcyIsCi0JCQkJCQlscmVsLm5zcG5hbWUsIGxyZWwucmVs bmFtZSwgcmVzLT5lcnIpKSk7Ci0Jd2FscmN2X2NsZWFyX3Jlc3VsdChyZXMpOworCQlyZXMg PSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBjbWQuZGF0YSwgMCwgTlVM TCk7CisJCXBmcmVlKGNtZC5kYXRhKTsKKwkJaWYgKHJlcy0+c3RhdHVzICE9IFdBTFJDVl9P S19DT1BZX09VVCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf Q09OTkVDVElPTl9GQUlMVVJFKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IHN0YXJ0IGlu aXRpYWwgY29udGVudHMgY29weSBmb3IgdGFibGUgXCIlcy4lc1wiIGZyb20gcmVtb3RlICVz OiAlcyIsCisJCQkJCQkJbHJlbC5uc3BuYW1lLCBscmVsLnJlbG5hbWUsIHF1b3RlZF9uYW1l LCByZXMtPmVycikpKTsKKwkJd2FscmN2X2NsZWFyX3Jlc3VsdChyZXMpOwogCi0JY29weWJ1 ZiA9IG1ha2VTdHJpbmdJbmZvKCk7CisJCWNvcHlidWYgPSBtYWtlU3RyaW5nSW5mbygpOwog Ci0JcHN0YXRlID0gbWFrZV9wYXJzZXN0YXRlKE5VTEwpOwotCSh2b2lkKSBhZGRSYW5nZVRh YmxlRW50cnlGb3JSZWxhdGlvbihwc3RhdGUsIHJlbCwgQWNjZXNzU2hhcmVMb2NrLAotCQkJ CQkJCQkJCSBOVUxMLCBmYWxzZSwgZmFsc2UpOworCQlwc3RhdGUgPSBtYWtlX3BhcnNlc3Rh dGUoTlVMTCk7CisJCSh2b2lkKSBhZGRSYW5nZVRhYmxlRW50cnlGb3JSZWxhdGlvbihwc3Rh dGUsIHJlbCwgQWNjZXNzU2hhcmVMb2NrLAorCQkJCQkJCQkJCQkgTlVMTCwgZmFsc2UsIGZh bHNlKTsKIAotCWF0dG5hbWVsaXN0ID0gbWFrZV9jb3B5X2F0dG5hbWVsaXN0KHJlbG1hcGVu dHJ5KTsKLQljc3RhdGUgPSBCZWdpbkNvcHlGcm9tKHBzdGF0ZSwgcmVsLCBOVUxMLCBOVUxM LCBmYWxzZSwgY29weV9yZWFkX2RhdGEsIGF0dG5hbWVsaXN0LCBvcHRpb25zKTsKKwkJYXR0 bmFtZWxpc3QgPSBtYWtlX2NvcHlfYXR0bmFtZWxpc3QocmVsbWFwZW50cnkpOworCQljc3Rh dGUgPSBCZWdpbkNvcHlGcm9tKHBzdGF0ZSwgcmVsLCBOVUxMLCBOVUxMLCBmYWxzZSwgY29w eV9yZWFkX2RhdGEsIGF0dG5hbWVsaXN0LCBvcHRpb25zKTsKIAotCS8qIERvIHRoZSBjb3B5 ICovCi0JKHZvaWQpIENvcHlGcm9tKGNzdGF0ZSk7CisJCS8qIERvIHRoZSBjb3B5ICovCisJ CSh2b2lkKSBDb3B5RnJvbShjc3RhdGUpOworCX0KIAogCWxvZ2ljYWxyZXBfcmVsX2Nsb3Nl KHJlbG1hcGVudHJ5LCBOb0xvY2spOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggNjQwNjc2ZTdkYy4uN2M1NGI0NmFjNyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0x NDYyLDcgKzE0NjIsNiBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJLyogU3dpdGNoIHJlbGF0aW9uIGlm IHB1Ymxpc2hpbmcgdmlhIHJvb3QuICovCiAJaWYgKHJlbGVudHJ5LT5wdWJsaXNoX2FzX3Jl bGlkICE9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pKQogCXsKLQkJQXNzZXJ0KHJlbGF0 aW9uLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKTsKIAkJYW5jZXN0b3IgPSBSZWxhdGlvbklk R2V0UmVsYXRpb24ocmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQpOwogCQl0YXJnZXRyZWwg PSBhbmNlc3RvcjsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdf ZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IDYzYmI0 Njg5ZDQuLmQ5MDc0NWFmNzEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9w Z19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC00 NTczLDYgKzQ1NzMsMzAgQEAgbXkgJXRlc3RzID0gKAogCQkJbm9fdGFibGVfYWNjZXNzX21l dGhvZCA9PiAxLAogCQkJb25seV9kdW1wX21lYXN1cmVtZW50ID0+IDEsCiAJCX0sCisJfSwK KworCSdDUkVBVEUgVEFCTEUgcmVncmVzc19wZ19kdW1wX3B1Ymxpc2hfdmlhX3BhcmVudCcg PT4geworCQljcmVhdGVfb3JkZXIgPT4gMywKKwkJY3JlYXRlX3NxbCA9PiAnCisJCQlDUkVB VEUgVEFCTEUgZHVtcF90ZXN0LnJlZ3Jlc3NfcGdfZHVtcF9wdWJsaXNoX3ZpYV9wYXJlbnQg KGNvbDEgaW50KTsKKwkJCUNSRUFURSBUQUJMRSBkdW1wX3Rlc3QucmVncmVzc19wZ19kdW1w X3B1Ymxpc2hfdmlhX3BhcmVudF8xKCkgSU5IRVJJVFMgKGR1bXBfdGVzdC5yZWdyZXNzX3Bn X2R1bXBfcHVibGlzaF92aWFfcGFyZW50KSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJlbnQpOycs CisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUUNSRUFURSBUQUJMRSBkdW1wX3Rlc3QucmVncmVz c19wZ19kdW1wX3B1Ymxpc2hfdmlhX3BhcmVudCAoXEUKKwkJCVxuXHMrXFFjb2wxIGludGVn ZXJcRQorCQkJXG5cKTsKKwkJCShcbi4qKSs/CisJCQlcblxRQ1JFQVRFIFRBQkxFIGR1bXBf dGVzdC5yZWdyZXNzX3BnX2R1bXBfcHVibGlzaF92aWFfcGFyZW50XzEgKFxFCisJCQlcblwp CisJCQlcblxRSU5IRVJJVFMgKGR1bXBfdGVzdC5yZWdyZXNzX3BnX2R1bXBfcHVibGlzaF92 aWFfcGFyZW50KVxFCisJCQlcblxRV0lUSCAocHVibGlzaF92aWFfcGFyZW50PSd0cnVlJylc RTsveG0sCisJCWxpa2UgPT4geworCQkJJWZ1bGxfcnVucywgJWR1bXBfdGVzdF9zY2hlbWFf cnVucywgc2VjdGlvbl9wcmVfZGF0YSA9PiAxLAorCQl9LAorCQl1bmxpa2UgPT4geworCQkJ YmluYXJ5X3VwZ3JhZGUgPT4gMSwKKwkJCWV4Y2x1ZGVfZHVtcF90ZXN0X3NjaGVtYSA9PiAx LAorCQkJb25seV9kdW1wX21lYXN1cmVtZW50ID0+IDEsCisJCX0sCiAJfSk7CiAKICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9zcmMv YmluL3BzcWwvdGFiLWNvbXBsZXRlLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMK aW5kZXggNjc3ODQ3ZTQzNC4uNDYwNjI3MmMwYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3Fs L3RhYi1jb21wbGV0ZS5jCisrKyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwpAQCAt MTMwMiw2ICsxMzAyLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRhYmxlX3N0b3Jh Z2VfcGFyYW1ldGVyc1tdID0gewogCSJmaWxsZmFjdG9yIiwKIAkibG9nX2F1dG92YWN1dW1f bWluX2R1cmF0aW9uIiwKIAkicGFyYWxsZWxfd29ya2VycyIsCisJInB1Ymxpc2hfdmlhX3Bh cmVudCIsCiAJInRvYXN0LmF1dG92YWN1dW1fZW5hYmxlZCIsCiAJInRvYXN0LmF1dG92YWN1 dW1fZnJlZXplX21heF9hZ2UiLAogCSJ0b2FzdC5hdXRvdmFjdXVtX2ZyZWV6ZV9taW5fYWdl IiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaAppbmRleCBjZTE1NGFiOTQzLi5mYzUz OWU3NDAxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmgK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCkBAIC0yMyw2ICsyMyw3 IEBACiAKICNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9s b2NrLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKIAogLyogLS0tLS0tLS0tLS0t LS0tLQogICoJCXBnX2luaGVyaXRzIGRlZmluaXRpb24uICBjcHAgdHVybnMgdGhpcyBpbnRv CkBAIC00NiwxNCArNDcsMTcgQEAgdHlwZWRlZiBGb3JtRGF0YV9wZ19pbmhlcml0cyAqRm9y bV9wZ19pbmhlcml0czsKIAogREVDTEFSRV9VTklRVUVfSU5ERVhfUEtFWShwZ19pbmhlcml0 c19yZWxpZF9zZXFub19pbmRleCwgMjY4MCwgSW5oZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwg b24gcGdfaW5oZXJpdHMgdXNpbmcgYnRyZWUoaW5ocmVsaWQgb2lkX29wcywgaW5oc2Vxbm8g aW50NF9vcHMpKTsKIERFQ0xBUkVfSU5ERVgocGdfaW5oZXJpdHNfcGFyZW50X2luZGV4LCAy MTg3LCBJbmhlcml0c1BhcmVudEluZGV4SWQsIG9uIHBnX2luaGVyaXRzIHVzaW5nIGJ0cmVl KGluaHBhcmVudCBvaWRfb3BzKSk7CitERUNMQVJFX0lOREVYKHBnX2luaGVyaXRzX3BhcmVu dF9zZXFub19pbmRleCwgODEzOCwgSW5oZXJpdHNQYXJlbnRTZXFub0luZGV4SWQsIG9uIHBn X2luaGVyaXRzIHVzaW5nIGJ0cmVlKGluaHBhcmVudCBvaWRfb3BzLCBpbmhzZXFubyBpbnQ0 X29wcykpOwogCiAKIGV4dGVybiBMaXN0ICpmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKE9p ZCBwYXJlbnRyZWxJZCwgTE9DS01PREUgbG9ja21vZGUpOwogZXh0ZXJuIExpc3QgKmZpbmRf aW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9t aXRfZGV0YWNoZWQsCi0JCQkJCQkJCQkJCQlMT0NLTU9ERSBsb2NrbW9kZSwgYm9vbCAqZGV0 YWNoZWRfZXhpc3QsIFRyYW5zYWN0aW9uSWQgKmRldGFjaGVkX3htaW4pOworCQkJCQkJCQkJ CQkJTE9DS01PREUgbG9ja21vZGUsIGJvb2wgKmRldGFjaGVkX2V4aXN0LCBUcmFuc2FjdGlv bklkICpkZXRhY2hlZF94bWluLAorCQkJCQkJCQkJCQkJYm9vbCBsb2dpY2FsX29ubHkpOwog CiBleHRlcm4gTGlzdCAqZmluZF9hbGxfaW5oZXJpdG9ycyhPaWQgcGFyZW50cmVsSWQsIExP Q0tNT0RFIGxvY2ttb2RlLAogCQkJCQkJCQkgTGlzdCAqKm51bXBhcmVudHMpOworZXh0ZXJu IExpc3QgKmZpbmRfYWxsX2xvZ2ljYWxfaW5oZXJpdG9ycyhPaWQgcGFyZW50cmVsSWQpOwog ZXh0ZXJuIGJvb2wgaGFzX3N1YmNsYXNzKE9pZCByZWxhdGlvbklkKTsKIGV4dGVybiBib29s IGhhc19zdXBlcmNsYXNzKE9pZCByZWxhdGlvbklkKTsKIGV4dGVybiBib29sIHR5cGVJbmhl cml0c0Zyb20oT2lkIHN1YmNsYXNzVHlwZUlkLCBPaWQgc3VwZXJjbGFzc1R5cGVJZCk7CkBA IC02Myw1ICs2Nyw3IEBAIGV4dGVybiBib29sIERlbGV0ZUluaGVyaXRzVHVwbGUoT2lkIGlu aHJlbGlkLCBPaWQgaW5ocGFyZW50LAogCQkJCQkJCQlib29sIGV4cGVjdF9kZXRhY2hfcGVu ZGluZywKIAkJCQkJCQkJY29uc3QgY2hhciAqY2hpbGRuYW1lKTsKIGV4dGVybiBib29sIFBh cnRpdGlvbkhhc1BlbmRpbmdEZXRhY2goT2lkIHBhcnRvaWQpOworZXh0ZXJuIExpc3QgKmdl dF9sb2dpY2FsX2FuY2VzdG9ycyhPaWQgcmVsaWQsIGJvb2wgaXNfcGFydGl0aW9uKTsKK2V4 dGVybiBib29sIGhhc19sb2dpY2FsX3BhcmVudChSZWxhdGlvbiBpbmhSZWwsIE9pZCByZWxp ZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBQR19JTkhFUklUU19IICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAppbmRleCBlZDY3MTY4Mzc0Li5hNjBjNmI2NmQ4IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKQEAgLTExODMzLDYgKzExODMzLDEzIEBACiAgIHByb25hbWUgPT4g J3BnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxlJywgcHJvdm9sYXRpbGUgPT4gJ3MnLAogICBw cm9yZXR0eXBlID0+ICdib29sJywgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzJywKICAgcHJv c3JjID0+ICdwZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZScgfSwKK3sgb2lkID0+ICc4MTM3 JywKKyAgZGVzY3IgPT4gJ2dldCB0aGUgcmVsYXRpb25zIHRvIGNvcHkgZnJvbSBhbGwgc3Bl Y2lmaWVkIHB1YmxpY2F0aW9ucyBkdXJpbmcgYSB0YWJsZVwncyBpbml0aWFsIHN5bmMnLAor ICBwcm9uYW1lID0+ICdwZ19nZXRfcHVibGljYXRpb25fcmVsc190b19zeW5jJywgcHJvcm93 cyA9PiAnMTAnLAorICBwcm92YXJpYWRpYyA9PiAndGV4dCcsIHByb3JldHNldCA9PiAndCcs IHByb3ZvbGF0aWxlID0+ICdzJywKKyAgcHJvcmV0dHlwZSA9PiAncmVnY2xhc3MnLCBwcm9h cmd0eXBlcyA9PiAncmVnY2xhc3MgX3RleHQnLAorICBwcm9hcmdtb2RlcyA9PiAne2ksdn0n LCBwcm9hcmduYW1lcyA9PiAne3Jvb3RpZCxwdWJuYW1lc30nLAorICBwcm9zcmMgPT4gJ3Bn X2dldF9wdWJsaWNhdGlvbl9yZWxzX3RvX3N5bmMnIH0sCiB7IG9pZCA9PiAnODEzOScsCiAg IGRlc2NyID0+ICdnZXQgaW5mb3JtYXRpb24gb24gaG93IGEgcmVsYXRpb24gd2lsbCBiZSBw dWJsaXNoZWQgdmlhIGEgbGlzdCBvZiBwdWJsaWNhdGlvbnMnLAogICBwcm9uYW1lID0+ICdw Z19nZXRfcmVsYXRpb25fcHVibGlzaGluZ19pbmZvJywgcHJvdmFyaWFkaWMgPT4gJ3RleHQn LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggYi9zcmMvaW5jbHVkZS91 dGlscy9yZWwuaAppbmRleCAxNDI2YTM1M2NkLi4zYzVlYTVhMzdhIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaApA QCAtMzM5LDYgKzMzOSw3IEBAIHR5cGVkZWYgc3RydWN0IFN0ZFJkT3B0aW9ucwogCWludAkJ CXRvYXN0X3R1cGxlX3RhcmdldDsgLyogdGFyZ2V0IGZvciB0dXBsZSB0b2FzdGluZyAqLwog CUF1dG9WYWNPcHRzIGF1dG92YWN1dW07CQkvKiBhdXRvdmFjdXVtLXJlbGF0ZWQgb3B0aW9u cyAqLwogCWJvb2wJCXVzZXJfY2F0YWxvZ190YWJsZTsgLyogdXNlIGFzIGFuIGFkZGl0aW9u YWwgY2F0YWxvZyByZWxhdGlvbiAqLworCWJvb2wJCXB1Ymxpc2hfdmlhX3BhcmVudDsgLyog cHVibGlzaCB2aWEgcGFyZW50J3MgcmVsaWQgZm9yIGxvZ3JlcCAqLwogCWludAkJCXBhcmFs bGVsX3dvcmtlcnM7CS8qIG1heCBudW1iZXIgb2YgcGFyYWxsZWwgd29ya2VycyAqLwogCVN0 ZFJkT3B0SW5kZXhDbGVhbnVwIHZhY3V1bV9pbmRleF9jbGVhbnVwOwkvKiBjb250cm9scyBp bmRleCB2YWN1dW1pbmcgKi8KIAlib29sCQl2YWN1dW1fdHJ1bmNhdGU7CS8qIGVuYWJsZXMg dmFjdXVtIHRvIHRydW5jYXRlIGEgcmVsYXRpb24gKi8KQEAgLTM4OCw2ICszODksMTcgQEAg dHlwZWRlZiBzdHJ1Y3QgU3RkUmRPcHRpb25zCiAJICAocmVsYXRpb24pLT5yZF9yZWwtPnJl bGtpbmQgPT0gUkVMS0lORF9NQVRWSUVXKSA/IFwKIAkgKChTdGRSZE9wdGlvbnMgKikgKHJl bGF0aW9uKS0+cmRfb3B0aW9ucyktPnVzZXJfY2F0YWxvZ190YWJsZSA6IGZhbHNlKQogCisv KgorICogUmVsYXRpb25Jc1B1Ymxpc2hlZFZpYVBhcmVudAorICoJCVJldHVybnMgd2hldGhl ciB0aGUgcmVsYXRpb24ncyBjb250ZW50cyBzaG91bGQgYmUgbG9naWNhbGx5IHJlcGxpY2F0 ZWQKKyAqCQl2aWEgaXRzIHBhcmVudCB0YWJsZSdzIHJlbGlkLCB3aGVuIHB1Ymxpc2hlZCB1 bmRlciB0aGUgZWZmZWN0cyBvZgorICoJCXB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LiAg Tm90ZSBtdWx0aXBsZSBldmFsIG9mIGFyZ3VtZW50IQorICovCisjZGVmaW5lIFJlbGF0aW9u SXNQdWJsaXNoZWRWaWFQYXJlbnQocmVsYXRpb24pCVwKKwkoKHJlbGF0aW9uKS0+cmRfb3B0 aW9ucyAmJiBcCisJICgocmVsYXRpb24pLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9S RUxBVElPTikgJiYgXAorCSAoKFN0ZFJkT3B0aW9ucyAqKSAocmVsYXRpb24pLT5yZF9vcHRp b25zKS0+cHVibGlzaF92aWFfcGFyZW50KQorCiAvKgogICogUmVsYXRpb25HZXRQYXJhbGxl bFdvcmtlcnMKICAqCQlSZXR1cm5zIHRoZSByZWxhdGlvbidzIHBhcmFsbGVsX3dvcmtlcnMg cmVsb3B0aW9uIHNldHRpbmcuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0CmluZGV4IGRkOGZjOTkxMTEuLjVlZTViOGVhM2IgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC01LDYgKzUsMTcgQEAgQ1JF QVRFIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIExPR0lOIFNVUEVSVVNFUjsKIENS RUFURSBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBDUkVBVEUgUk9MRSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXJfZHVtbXkgTE9HSU4gTk9TVVBFUlVTRVI7CiBTRVQgU0VT U0lPTiBBVVRIT1JJWkFUSU9OICdyZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXInOworQ1JFQVRF IEZVTkNUSU9OIHB1Ymxpc2hlZF9zeW5jIChWQVJJQURJQyBwdWJuYW1lcyB0ZXh0W10pCisg ICAgICAgICAgICAgICAgUkVUVVJOUyBUQUJMRSAocHVibGlzaGVkIHJlZ2NsYXNzLCBzeW5j ZWQgcmVnY2xhc3MpIEFTICQkCisgIC0tIFNob3cgZWFjaCBwdWJsaXNoZWQgdGFibGUgYWxv bmdzaWRlIHRoZSB0YWJsZXMgdG8gYmUgY29waWVkIGludG8gaXQgZHVyaW5nCisgIC0tIGlu aXRpYWwgc3luYy4KKyAgU0VMRUNUIHQucHVibGlzaGVkLCBzeW5jZWQKKyAgICBGUk9NIChT RUxFQ1QgRElTVElOQ1QgcmVsaWQ6OnJlZ2NsYXNzIEFTIHB1Ymxpc2hlZAorICAgICAgICAg ICAgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFZBUklBRElDIHB1Ym5hbWVzKSkg dAorICAgIEpPSU4gTEFURVJBTCBwZ19nZXRfcHVibGljYXRpb25fcmVsc190b19zeW5jKHQu cHVibGlzaGVkLCBWQVJJQURJQyBwdWJuYW1lcykgc3luY2VkCisgICAgICBPTiB0cnVlCisg ICAgT1JERVIgQlkgMSwgMjsKKyQkIExBTkdVQUdFIHNxbDsKIENSRUFURSBGVU5DVElPTiBw dWJsaXNoZWRfc3RyZWFtIChWQVJJQURJQyBwdWJuYW1lcyB0ZXh0W10pCiAgICAgICAgICAg ICAgICAgUkVUVVJOUyBUQUJMRSAocHVibmFtZSB0ZXh0LCBwdWJsaXNoZWQgcmVnY2xhc3Ms IHN5bmNlZCByZWdjbGFzcykgQVMgJCQKICAgLS0gRm9yIGVhY2ggcHVibGljYXRpb24sIHNo b3cgZWFjaCBwdWJsaXNoZWQgcm9vdCBhbG9uZ3NpZGUgdGhlIHRhYmxlcyB3aGljaApAQCAt MTY5Nyw2ICsxNzA4LDEyIEBAIFNFTEVDVCAqIEZST00gcGdfcHVibGljYXRpb25fdGFibGVz OwogIHB1YiAgICAgfCBzY2gxICAgICAgIHwgdGJsMSAgICAgIHwge2F9ICAgICAgfCAKICgx IHJvdykKIAorU0VMRUNUICogRlJPTSBwdWJsaXNoZWRfc3luYygncHViJyk7CisgcHVibGlz aGVkIHwgIHN5bmNlZCAgIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KKyBzY2gxLnRibDEg fCBzY2gxLnRibDEKKygxIHJvdykKKwogU0VMRUNUICogRlJPTSBwdWJsaXNoZWRfc3RyZWFt KCdwdWInKTsKICBwdWJuYW1lIHwgcHVibGlzaGVkIHwgICAgIHN5bmNlZCAgICAgIAogLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNzMwLDYgKzE3NDcs MTIgQEAgU0VMRUNUICogRlJPTSBwZ19wdWJsaWNhdGlvbl90YWJsZXM7CiAgcHViICAgICB8 IHNjaDIgICAgICAgfCB0YmwxX3BhcnQxIHwge2F9ICAgICAgfCAKICgxIHJvdykKIAorU0VM RUNUICogRlJPTSBwdWJsaXNoZWRfc3luYygncHViJyk7CisgICAgcHVibGlzaGVkICAgIHwg ICAgIHN5bmNlZCAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0K KyBzY2gyLnRibDFfcGFydDEgfCBzY2gyLnRibDFfcGFydDEKKygxIHJvdykKKwogU0VMRUNU ICogRlJPTSBwdWJsaXNoZWRfc3RyZWFtKCdwdWInKTsKICBwdWJuYW1lIHwgICAgcHVibGlz aGVkICAgIHwgICAgIHN5bmNlZCAgICAgIAogLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNzUyLDEyICsxNzc1LDMwNCBAQCBTRUxFQ1QgKiBG Uk9NIHBnX3B1YmxpY2F0aW9uX3RhYmxlczsKICBwdWIgICAgIHwgc2NoMSAgICAgICB8IHRi bDEgICAgICB8IHthfSAgICAgIHwgCiAoMSByb3cpCiAKKy0tIFNhbml0eSBjaGVjayBjYXNl cyBmb3IgcHVibGlzaF92aWFfcGFyZW50LgorQ1JFQVRFIFRBQkxFIHNjaDEuaXJvb3QgKGEg aW50KTsKK0NSRUFURSBUQUJMRSBzY2gxLmlwYXJ0MSAoYSBpbnQpOworQ1JFQVRFIFRBQkxF IHNjaDEuaXBhcnQyICgpIElOSEVSSVRTIChzY2gxLmlyb290KTsKKy0tIHNob3VsZCBkbyBu b3RoaW5nIGF0IGFsbAorQUxURVIgVEFCTEUgc2NoMS5pcm9vdCBTRVQgKHB1Ymxpc2hfdmlh X3BhcmVudCA9IGZhbHNlKTsKK0FMVEVSIFRBQkxFIHNjaDEuaXJvb3QgUkVTRVQgKHB1Ymxp c2hfdmlhX3BhcmVudCk7CistLSBtYXJraW5nIHJvb3RzIGJldHdlZW4gdW5yZWxhdGVkIHRh YmxlcyBpcyBub3QgYWxsb3dlZAorQUxURVIgVEFCTEUgc2NoMS5pcGFydDEgU0VUIChwdWJs aXNoX3ZpYV9wYXJlbnQpOworRVJST1I6ICB0YWJsZSAiaXBhcnQxIiBkb2VzIG5vdCBpbmhl cml0IGZyb20gYW55IHRhYmxlcworQ1JFQVRFIFRBQkxFIGZhaWwgKGEgaW50KSBXSVRIIChw dWJsaXNoX3ZpYV9wYXJlbnQpOworRVJST1I6ICB0YWJsZSAiZmFpbCIgZG9lcyBub3QgaW5o ZXJpdCBmcm9tIGFueSB0YWJsZXMKKy0tIGVzdGFibGlzaGluZyBhbiBpbmhlcml0YW5jZSBy ZWxhdGlvbnNoaXAgZml4ZXMgdGhlIHByb2JsZW0KK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQx IElOSEVSSVQgc2NoMS5pcm9vdCwKKwkJCQkJCVNFVCAocHVibGlzaF92aWFfcGFyZW50KTsK Ky0tIGJ1dCBtdWx0aXBsZSBpbmhlcml0YW5jZSBpcyBub3QgYWxsb3dlZAorQUxURVIgVEFC TEUgc2NoMS5pcGFydDIgSU5IRVJJVCBzY2gxLmlwYXJ0MSwKKwkJCQkJCVNFVCAocHVibGlz aF92aWFfcGFyZW50KTsKK0VSUk9SOiAgdGFibGUgImlwYXJ0MiIgaW5oZXJpdHMgZnJvbSBt dWx0aXBsZSB0YWJsZXMKKy0tIG9uY2UgcHVibGlzaF92aWFfcGFyZW50IGlzIHNldCwgaW5o ZXJpdGFuY2UgY2Fubm90IGJlIGNoYW5nZWQKK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQyIFNF VCAocHVibGlzaF92aWFfcGFyZW50KTsKK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQyIE5PIElO SEVSSVQgc2NoMS5pcm9vdDsKK0VSUk9SOiAgcmVsYXRpb24gb3B0aW9uICJwdWJsaXNoX3Zp YV9wYXJlbnQiIHByZXZlbnRzIHRhYmxlICJpcGFydDIiIGZyb20gY2hhbmdpbmcgaW5oZXJp dGFuY2UKK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQyIElOSEVSSVQgc2NoMS5pcGFydDE7CitF UlJPUjogIHJlbGF0aW9uIG9wdGlvbiAicHVibGlzaF92aWFfcGFyZW50IiBwcmV2ZW50cyB0 YWJsZSAiaXBhcnQyIiBmcm9tIGNoYW5naW5nIGluaGVyaXRhbmNlCistLSB0YWJsZSBvd25l cnNoaXAgbXVzdCBtYXRjaCwgbGlrZSBBVFRBQ0ggUEFSVElUSU9OCitDUkVBVEUgUk9MRSBy ZWdyZXNzX3Rlc3RfbWU7CitDUkVBVEUgUk9MRSByZWdyZXNzX3Rlc3Rfbm90X21lOworQ1JF QVRFIFRBQkxFIHJvb3QgKGEgaW50KTsKK0NSRUFURSBUQUJMRSBwYXJ0ICgpIElOSEVSSVRT IChyb290KTsKK0FMVEVSIFRBQkxFIHJvb3QgT1dORVIgVE8gcmVncmVzc190ZXN0X21lOwor QUxURVIgVEFCTEUgcGFydCBPV05FUiBUTyByZWdyZXNzX3Rlc3Rfbm90X21lOworU0VUIFNF U1NJT04gQVVUSE9SSVpBVElPTiByZWdyZXNzX3Rlc3RfbWU7CitBTFRFUiBUQUJMRSBwYXJ0 IFNFVCAocHVibGlzaF92aWFfcGFyZW50KTsgLS0gc2hvdWxkIGZhaWwKK0VSUk9SOiAgbXVz dCBiZSBvd25lciBvZiB0YWJsZSBwYXJ0CitSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047 CitBTFRFUiBUQUJMRSByb290IE9XTkVSIFRPIHJlZ3Jlc3NfdGVzdF9ub3RfbWU7CitBTFRF UiBUQUJMRSBwYXJ0IE9XTkVSIFRPIHJlZ3Jlc3NfdGVzdF9tZTsKK1NFVCBTRVNTSU9OIEFV VEhPUklaQVRJT04gcmVncmVzc190ZXN0X21lOworQUxURVIgVEFCTEUgcGFydCBTRVQgKHB1 Ymxpc2hfdmlhX3BhcmVudCk7IC0tIHNob3VsZCBhbHNvIGZhaWwKK0VSUk9SOiAgbXVzdCBi ZSBvd25lciBvZiB0YWJsZSByb290CitDUkVBVEUgVEFCTEUgZmFpbCAoKSBJTkhFUklUUyAo cm9vdCkgV0lUSCAocHVibGlzaF92aWFfcGFyZW50KTsKK0VSUk9SOiAgbXVzdCBiZSBvd25l ciBvZiB0YWJsZSByb290CitSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CitEUk9QIFRB QkxFIHJvb3QsIHBhcnQ7CitEUk9QIFJPTEUgcmVncmVzc190ZXN0X25vdF9tZTsKK0RST1Ag Uk9MRSByZWdyZXNzX3Rlc3RfbWU7CistLSBNaXhlZCBwdWJsaWNhdGlvbiBzZXR0aW5ncyBm b3IgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QsIGF0IGRpZmZlcmVudAorLS0gbGV2ZWxz IG9mIHRoZSBpbmhlcml0YW5jZSB0cmVlLCB0byBwaW4gY29ycmVjdCBiZWhhdmlvciBpbiB0 aGUgd29yc3QgY2FzZXMuCitDUkVBVEUgVEFCTEUgc2NoMS5pcGFydDFfYSAoKSBJTkhFUklU UyAoc2NoMS5pcGFydDEpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcmVudCk7CitDUkVBVEUgVEFC TEUgc2NoMS5pcGFydDFfYTEgKCkgSU5IRVJJVFMgKHNjaDEuaXBhcnQxX2EpOworQUxURVIg VEFCTEUgc2NoMS5pcGFydDFfYTEgU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQpOworQ1JFQVRF IFBVQkxJQ0FUSU9OIGlwdWJfcm9vdCBGT1IgVEFCTEUgc2NoMS5pcm9vdDsKK0NSRUFURSBQ VUJMSUNBVElPTiBpcHViX3BhcnQxIEZPUiBUQUJMRSBPTkxZIHNjaDEuaXBhcnQxLCBPTkxZ IHNjaDEuaXBhcnQxX2ExCisgICAgICAgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIGlwdWJfb3RoZXIgRk9SIFRBQkxFIE9OTFkgc2No MS5pcm9vdCwgT05MWSBzY2gxLmlwYXJ0MV9hLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE9OTFkgc2NoMS5pcGFydDIKKyAgICAgICBXSVRIIChwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCk7CistLSBBdCB0aGlzIHBvaW50LCB0aGUgcHVibGlzaGVk IHRyZWVzIGxvb2sgbGlrZSB0aGlzOgorLS0KKy0tIGlwdWJfcm9vdCAgICAgICAgICAgICBp cHViX3BhcnQxIChwdWJ2aWFyb290KSAgICBpcHViX290aGVyIChwdWJ2aWFyb290KQorLS0g LS0tLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCistLSAgaXJvb3QgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlyb290CistLSAgKy0gaXBhcnQxICAgICAgICAgICAgICAg IGlwYXJ0MSAgICAgICAgICAgICAgICAgIHwKKy0tICB8ICstIGlwYXJ0MV9hICAgICAgICAg ICAgfCAgICAgICAgICAgICAgICAgICAgICAgKy0tLSBpcGFydDFfYQorLS0gIHwgICArLSBp cGFydDFfYTEgICAgICAgICArLS0tIGlwYXJ0MV9hMSAgICAgICAgICB8CistLSAgKy0gaXBh cnQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstIGlwYXJ0Mgor LS0gV2hhdCBhIHN1YnNjcmlwdGlvbiB0byBvbmx5IGlwdWJfcm9vdCBzaG91bGQgc2VlCitT RUxFQ1QgcmVsaWQ6OnJlZ2NsYXNzIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcygn aXB1Yl9yb290Jyk7CisgICAgIHJlbGlkICAgICAgCistLS0tLS0tLS0tLS0tLS0tCisgc2No MS5pcm9vdAorIHNjaDEuaXBhcnQxCisgc2NoMS5pcGFydDIKKyBzY2gxLmlwYXJ0MV9hCisg c2NoMS5pcGFydDFfYTEKKyg1IHJvd3MpCisKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N5 bmMoJ2lwdWJfcm9vdCcpOworICAgcHVibGlzaGVkICAgIHwgICAgIHN5bmNlZCAgICAgCist LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0KKyBzY2gxLmlyb290ICAgICB8IHNj aDEuaXJvb3QKKyBzY2gxLmlwYXJ0MSAgICB8IHNjaDEuaXBhcnQxCisgc2NoMS5pcGFydDIg ICAgfCBzY2gxLmlwYXJ0MgorIHNjaDEuaXBhcnQxX2EgIHwgc2NoMS5pcGFydDFfYQorIHNj aDEuaXBhcnQxX2ExIHwgc2NoMS5pcGFydDFfYTEKKyg1IHJvd3MpCisKK1NFTEVDVCAqIEZS T00gcHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9yb290Jyk7CisgIHB1Ym5hbWUgIHwgICBwdWJs aXNoZWQgICAgfCAgICAgc3luY2VkICAgICAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLQorIGlwdWJfcm9vdCB8IHNjaDEuaXJvb3QgICAgIHwgc2No MS5pcm9vdAorIGlwdWJfcm9vdCB8IHNjaDEuaXBhcnQxICAgIHwgc2NoMS5pcGFydDEKKyBp cHViX3Jvb3QgfCBzY2gxLmlwYXJ0MiAgICB8IHNjaDEuaXBhcnQyCisgaXB1Yl9yb290IHwg c2NoMS5pcGFydDFfYSAgfCBzY2gxLmlwYXJ0MV9hCisgaXB1Yl9yb290IHwgc2NoMS5pcGFy dDFfYTEgfCBzY2gxLmlwYXJ0MV9hMQorKDUgcm93cykKKworLS0gV2hhdCBhIHN1YnNjcmlw dGlvbiB0byBvbmx5IGlwdWJfcGFydDEgc2hvdWxkIHNlZQorU0VMRUNUIHJlbGlkOjpyZWdj bGFzcyBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoJ2lwdWJfcGFydDEnKTsKKyAg ICByZWxpZCAgICAKKy0tLS0tLS0tLS0tLS0KKyBzY2gxLmlwYXJ0MQorKDEgcm93KQorCitT RUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zeW5jKCdpcHViX3BhcnQxJyk7CisgIHB1Ymxpc2hl ZCAgfCAgICAgc3luY2VkICAgICAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQor IHNjaDEuaXBhcnQxIHwgc2NoMS5pcGFydDEKKyBzY2gxLmlwYXJ0MSB8IHNjaDEuaXBhcnQx X2ExCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zdHJlYW0oJ2lwdWJf cGFydDEnKTsKKyAgcHVibmFtZSAgIHwgIHB1Ymxpc2hlZCAgfCAgICAgc3luY2VkICAgICAK Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0KKyBpcHViX3Bh cnQxIHwgc2NoMS5pcGFydDEgfCBzY2gxLmlwYXJ0MQorIGlwdWJfcGFydDEgfCBzY2gxLmlw YXJ0MSB8IHNjaDEuaXBhcnQxX2ExCisoMiByb3dzKQorCistLSBXaGF0IGEgc3Vic2NyaXB0 aW9uIHRvIGJvdGggaXB1Yl9yb290IGFuZCBpcHViX3BhcnQxIHNob3VsZCBzZWUKK1NFTEVD VCBwdWJuYW1lLCByZWxpZDo6cmVnY2xhc3MKKyAgRlJPTSBwZ19nZXRfcHVibGljYXRpb25f dGFibGVzKCdpcHViX3Jvb3QnLCAnaXB1Yl9wYXJ0MScpIHQKKyAgSk9JTiBwZ19wdWJsaWNh dGlvbiBwIE9OIChwLm9pZCA9IHQucHViaWQpOworICBwdWJuYW1lICAgfCAgICAgcmVsaWQg ICAgIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorIGlwdWJfcm9vdCAgfCBzY2gx Lmlyb290CisgaXB1Yl9yb290ICB8IHNjaDEuaXBhcnQxCisgaXB1Yl9yb290ICB8IHNjaDEu aXBhcnQyCisgaXB1Yl9yb290ICB8IHNjaDEuaXBhcnQxX2EKKyBpcHViX3BhcnQxIHwgc2No MS5pcGFydDEKKyg1IHJvd3MpCisKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N5bmMoJ2lw dWJfcm9vdCcsICdpcHViX3BhcnQxJyk7CisgICBwdWJsaXNoZWQgICB8ICAgICBzeW5jZWQg ICAgIAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0KKyBzY2gxLmlyb290ICAg IHwgc2NoMS5pcm9vdAorIHNjaDEuaXBhcnQxICAgfCBzY2gxLmlwYXJ0MQorIHNjaDEuaXBh cnQxICAgfCBzY2gxLmlwYXJ0MV9hMQorIHNjaDEuaXBhcnQyICAgfCBzY2gxLmlwYXJ0Mgor IHNjaDEuaXBhcnQxX2EgfCBzY2gxLmlwYXJ0MV9hCisoNSByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIHB1Ymxpc2hlZF9zdHJlYW0oJ2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJyk7CisgIHB1 Ym5hbWUgICB8ICAgcHVibGlzaGVkICAgfCAgICAgc3luY2VkICAgICAKKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQorIGlwdWJfcm9vdCAgfCBzY2gx Lmlyb290ICAgIHwgc2NoMS5pcm9vdAorIGlwdWJfcm9vdCAgfCBzY2gxLmlwYXJ0MSAgIHwg c2NoMS5pcGFydDEKKyBpcHViX3Jvb3QgIHwgc2NoMS5pcGFydDEgICB8IHNjaDEuaXBhcnQx X2ExCisgaXB1Yl9yb290ICB8IHNjaDEuaXBhcnQyICAgfCBzY2gxLmlwYXJ0MgorIGlwdWJf cm9vdCAgfCBzY2gxLmlwYXJ0MV9hIHwgc2NoMS5pcGFydDFfYQorIGlwdWJfcGFydDEgfCBz Y2gxLmlwYXJ0MSAgIHwgc2NoMS5pcGFydDEKKyBpcHViX3BhcnQxIHwgc2NoMS5pcGFydDEg ICB8IHNjaDEuaXBhcnQxX2ExCisoNyByb3dzKQorCistLSBXaGF0IGEgc3Vic2NyaXB0aW9u IHRvIGJvdGggaXB1Yl9wYXJ0MSBhbmQgaXB1Yl9vdGhlciBzaG91bGQgc2VlCitTRUxFQ1Qg cHVibmFtZSwgcmVsaWQ6OnJlZ2NsYXNzCisgIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3Rh YmxlcygnaXB1Yl9wYXJ0MScsICdpcHViX290aGVyJykgdAorICBKT0lOIHBnX3B1YmxpY2F0 aW9uIHAgT04gKHAub2lkID0gdC5wdWJpZCk7CisgIHB1Ym5hbWUgICB8ICAgIHJlbGlkICAg IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBpcHViX3BhcnQxIHwgc2NoMS5pcGFy dDEKKyBpcHViX290aGVyIHwgc2NoMS5pcm9vdAorKDIgcm93cykKKworU0VMRUNUICogRlJP TSBwdWJsaXNoZWRfc3luYygnaXB1Yl9wYXJ0MScsICdpcHViX290aGVyJyk7CisgIHB1Ymxp c2hlZCAgfCAgICAgc3luY2VkICAgICAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LQorIHNjaDEuaXJvb3QgIHwgc2NoMS5pcm9vdAorIHNjaDEuaXJvb3QgIHwgc2NoMS5pcGFy dDIKKyBzY2gxLmlyb290ICB8IHNjaDEuaXBhcnQxX2EKKyBzY2gxLmlwYXJ0MSB8IHNjaDEu aXBhcnQxCisgc2NoMS5pcGFydDEgfCBzY2gxLmlwYXJ0MV9hMQorKDUgcm93cykKKworU0VM RUNUICogRlJPTSBwdWJsaXNoZWRfc3RyZWFtKCdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXIn KTsKKyAgcHVibmFtZSAgIHwgIHB1Ymxpc2hlZCAgfCAgICAgc3luY2VkICAgICAKKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0KKyBpcHViX3BhcnQxIHwg c2NoMS5pcGFydDEgfCBzY2gxLmlwYXJ0MQorIGlwdWJfcGFydDEgfCBzY2gxLmlwYXJ0MSB8 IHNjaDEuaXBhcnQxX2ExCisgaXB1Yl9vdGhlciB8IHNjaDEuaXJvb3QgIHwgc2NoMS5pcm9v dAorIGlwdWJfb3RoZXIgfCBzY2gxLmlyb290ICB8IHNjaDEuaXBhcnQyCisgaXB1Yl9vdGhl ciB8IHNjaDEuaXJvb3QgIHwgc2NoMS5pcGFydDFfYQorKDUgcm93cykKKworLS0gV2hhdCBh IHN1YnNjcmlwdGlvbiB0byBhbGwgdGhyZWUgc2hvdWxkIHNlZQorU0VMRUNUIHB1Ym5hbWUs IHJlbGlkOjpyZWdjbGFzcworICBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoJ2lw dWJfcm9vdCcsICdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKSB0CisgIEpPSU4gcGdfcHVi bGljYXRpb24gcCBPTiAocC5vaWQgPSB0LnB1YmlkKTsKKyAgcHVibmFtZSAgIHwgICAgcmVs aWQgICAgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGlwdWJfcm9vdCAgfCBzY2gx Lmlyb290CisgaXB1Yl9yb290ICB8IHNjaDEuaXBhcnQxCisgaXB1Yl9wYXJ0MSB8IHNjaDEu aXBhcnQxCisgaXB1Yl9vdGhlciB8IHNjaDEuaXJvb3QKKyg0IHJvd3MpCisKK1NFTEVDVCAq IEZST00gcHVibGlzaGVkX3N5bmMoJ2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJywgJ2lwdWJf b3RoZXInKTsKKyAgcHVibGlzaGVkICB8ICAgICBzeW5jZWQgICAgIAorLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tCisgc2NoMS5pcm9vdCAgfCBzY2gxLmlyb290Cisgc2NoMS5p cm9vdCAgfCBzY2gxLmlwYXJ0MgorIHNjaDEuaXJvb3QgIHwgc2NoMS5pcGFydDFfYQorIHNj aDEuaXBhcnQxIHwgc2NoMS5pcGFydDEKKyBzY2gxLmlwYXJ0MSB8IHNjaDEuaXBhcnQxX2Ex CisoNSByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zdHJlYW0oJ2lwdWJfcm9v dCcsICdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKTsKKyAgcHVibmFtZSAgIHwgIHB1Ymxp c2hlZCAgfCAgICAgc3luY2VkICAgICAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0KKyBpcHViX3Jvb3QgIHwgc2NoMS5pcm9vdCAgfCBzY2gxLmlyb290 CisgaXB1Yl9yb290ICB8IHNjaDEuaXJvb3QgIHwgc2NoMS5pcGFydDIKKyBpcHViX3Jvb3Qg IHwgc2NoMS5pcm9vdCAgfCBzY2gxLmlwYXJ0MV9hCisgaXB1Yl9yb290ICB8IHNjaDEuaXBh cnQxIHwgc2NoMS5pcGFydDEKKyBpcHViX3Jvb3QgIHwgc2NoMS5pcGFydDEgfCBzY2gxLmlw YXJ0MV9hMQorIGlwdWJfcGFydDEgfCBzY2gxLmlwYXJ0MSB8IHNjaDEuaXBhcnQxCisgaXB1 Yl9wYXJ0MSB8IHNjaDEuaXBhcnQxIHwgc2NoMS5pcGFydDFfYTEKKyBpcHViX290aGVyIHwg c2NoMS5pcm9vdCAgfCBzY2gxLmlyb290CisgaXB1Yl9vdGhlciB8IHNjaDEuaXJvb3QgIHwg c2NoMS5pcGFydDIKKyBpcHViX290aGVyIHwgc2NoMS5pcm9vdCAgfCBzY2gxLmlwYXJ0MV9h CisoMTAgcm93cykKKworLS0gIkRldGFjaGluZyIgcGFydGl0aW9ucyBzaG91bGQgY2hhbmdl IHRoZSBzdWJzY3JpcHRpb25zCitBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0MiBTRVQgKHB1Ymxp c2hfdmlhX3BhcmVudCA9IGZhbHNlKTsKK1NFTEVDVCBwdWJuYW1lLCByZWxpZDo6cmVnY2xh c3MKKyAgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKCdpcHViX3Jvb3QnLCAnaXB1 Yl9wYXJ0MScsICdpcHViX290aGVyJykgdAorICBKT0lOIHBnX3B1YmxpY2F0aW9uIHAgT04g KHAub2lkID0gdC5wdWJpZCk7CisgIHB1Ym5hbWUgICB8ICAgIHJlbGlkICAgIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBpcHViX3Jvb3QgIHwgc2NoMS5pcm9vdAorIGlwdWJf cm9vdCAgfCBzY2gxLmlwYXJ0MQorIGlwdWJfcm9vdCAgfCBzY2gxLmlwYXJ0MgorIGlwdWJf cGFydDEgfCBzY2gxLmlwYXJ0MQorIGlwdWJfb3RoZXIgfCBzY2gxLmlyb290CisgaXB1Yl9v dGhlciB8IHNjaDEuaXBhcnQyCisoNiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hl ZF9zeW5jKCdpcHViX3Jvb3QnLCAnaXB1Yl9wYXJ0MScsICdpcHViX290aGVyJyk7CisgIHB1 Ymxpc2hlZCAgfCAgICAgc3luY2VkICAgICAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLQorIHNjaDEuaXJvb3QgIHwgc2NoMS5pcm9vdAorIHNjaDEuaXJvb3QgIHwgc2NoMS5p cGFydDFfYQorIHNjaDEuaXBhcnQxIHwgc2NoMS5pcGFydDEKKyBzY2gxLmlwYXJ0MSB8IHNj aDEuaXBhcnQxX2ExCisgc2NoMS5pcGFydDIgfCBzY2gxLmlwYXJ0MgorKDUgcm93cykKKwor U0VMRUNUICogRlJPTSBwdWJsaXNoZWRfc3RyZWFtKCdpcHViX3Jvb3QnLCAnaXB1Yl9wYXJ0 MScsICdpcHViX290aGVyJyk7CisgIHB1Ym5hbWUgICB8ICBwdWJsaXNoZWQgIHwgICAgIHN5 bmNlZCAgICAgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t CisgaXB1Yl9yb290ICB8IHNjaDEuaXJvb3QgIHwgc2NoMS5pcm9vdAorIGlwdWJfcm9vdCAg fCBzY2gxLmlyb290ICB8IHNjaDEuaXBhcnQxX2EKKyBpcHViX3Jvb3QgIHwgc2NoMS5pcGFy dDEgfCBzY2gxLmlwYXJ0MQorIGlwdWJfcm9vdCAgfCBzY2gxLmlwYXJ0MSB8IHNjaDEuaXBh cnQxX2ExCisgaXB1Yl9yb290ICB8IHNjaDEuaXBhcnQyIHwgc2NoMS5pcGFydDIKKyBpcHVi X3BhcnQxIHwgc2NoMS5pcGFydDEgfCBzY2gxLmlwYXJ0MQorIGlwdWJfcGFydDEgfCBzY2gx LmlwYXJ0MSB8IHNjaDEuaXBhcnQxX2ExCisgaXB1Yl9vdGhlciB8IHNjaDEuaXJvb3QgIHwg c2NoMS5pcm9vdAorIGlwdWJfb3RoZXIgfCBzY2gxLmlyb290ICB8IHNjaDEuaXBhcnQxX2EK KyBpcHViX290aGVyIHwgc2NoMS5pcGFydDIgfCBzY2gxLmlwYXJ0MgorKDEwIHJvd3MpCisK K0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQxX2ExIFJFU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQp OworU0VMRUNUIHJlbGlkOjpyZWdjbGFzcyBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90YWJs ZXMoJ2lwdWJfcGFydDEnKTsKKyAgICAgcmVsaWQgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0K KyBzY2gxLmlwYXJ0MQorIHNjaDEuaXBhcnQxX2ExCisoMiByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIHB1Ymxpc2hlZF9zeW5jKCdpcHViX3BhcnQxJyk7CisgICBwdWJsaXNoZWQgICAgfCAg ICAgc3luY2VkICAgICAKKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQorIHNj aDEuaXBhcnQxICAgIHwgc2NoMS5pcGFydDEKKyBzY2gxLmlwYXJ0MV9hMSB8IHNjaDEuaXBh cnQxX2ExCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zdHJlYW0oJ2lw dWJfcGFydDEnKTsKKyAgcHVibmFtZSAgIHwgICBwdWJsaXNoZWQgICAgfCAgICAgc3luY2Vk ICAgICAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0K KyBpcHViX3BhcnQxIHwgc2NoMS5pcGFydDEgICAgfCBzY2gxLmlwYXJ0MQorIGlwdWJfcGFy dDEgfCBzY2gxLmlwYXJ0MV9hMSB8IHNjaDEuaXBhcnQxX2ExCisoMiByb3dzKQorCitEUk9Q IFBVQkxJQ0FUSU9OIGlwdWJfb3RoZXI7CitEUk9QIFBVQkxJQ0FUSU9OIGlwdWJfcGFydDE7 CitEUk9QIFBVQkxJQ0FUSU9OIGlwdWJfcm9vdDsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXM7CiBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsKIERST1AgVEFCTEUgc2NoMS50YmwxOworRFJP UCBUQUJMRSBzY2gxLmlwYXJ0MV9hMTsKK0RST1AgVEFCTEUgc2NoMS5pcGFydDFfYTsKK0RS T1AgVEFCTEUgc2NoMS5pcGFydDE7CitEUk9QIFRBQkxFIHNjaDEuaXBhcnQyOworRFJPUCBU QUJMRSBzY2gxLmlyb290OwogRFJPUCBTQ0hFTUEgc2NoMSBjYXNjYWRlOwogRFJPUCBTQ0hF TUEgc2NoMiBjYXNjYWRlOwogRFJPUCBGVU5DVElPTiBwdWJsaXNoZWRfc3RyZWFtOworRFJP UCBGVU5DVElPTiBwdWJsaXNoZWRfc3luYzsKIFJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElP TjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIsIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlcjI7CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyX2R1bW15 OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCmluZGV4IDZiZjk1NTRkNDgu LmQxZWE3NzdlZjkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0 aW9uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKQEAg LTYsNiArNiwxOCBAQCBDUkVBVEUgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwog Q1JFQVRFIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyX2R1bW15IExPR0lOIE5PU1VQ RVJVU0VSOwogU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiAncmVncmVzc19wdWJsaWNhdGlv bl91c2VyJzsKIAorQ1JFQVRFIEZVTkNUSU9OIHB1Ymxpc2hlZF9zeW5jIChWQVJJQURJQyBw dWJuYW1lcyB0ZXh0W10pCisgICAgICAgICAgICAgICAgUkVUVVJOUyBUQUJMRSAocHVibGlz aGVkIHJlZ2NsYXNzLCBzeW5jZWQgcmVnY2xhc3MpIEFTICQkCisgIC0tIFNob3cgZWFjaCBw dWJsaXNoZWQgdGFibGUgYWxvbmdzaWRlIHRoZSB0YWJsZXMgdG8gYmUgY29waWVkIGludG8g aXQgZHVyaW5nCisgIC0tIGluaXRpYWwgc3luYy4KKyAgU0VMRUNUIHQucHVibGlzaGVkLCBz eW5jZWQKKyAgICBGUk9NIChTRUxFQ1QgRElTVElOQ1QgcmVsaWQ6OnJlZ2NsYXNzIEFTIHB1 Ymxpc2hlZAorICAgICAgICAgICAgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFZB UklBRElDIHB1Ym5hbWVzKSkgdAorICAgIEpPSU4gTEFURVJBTCBwZ19nZXRfcHVibGljYXRp b25fcmVsc190b19zeW5jKHQucHVibGlzaGVkLCBWQVJJQURJQyBwdWJuYW1lcykgc3luY2Vk CisgICAgICBPTiB0cnVlCisgICAgT1JERVIgQlkgMSwgMjsKKyQkIExBTkdVQUdFIHNxbDsK KwogQ1JFQVRFIEZVTkNUSU9OIHB1Ymxpc2hlZF9zdHJlYW0gKFZBUklBRElDIHB1Ym5hbWVz IHRleHRbXSkKICAgICAgICAgICAgICAgICBSRVRVUk5TIFRBQkxFIChwdWJuYW1lIHRleHQs IHB1Ymxpc2hlZCByZWdjbGFzcywgc3luY2VkIHJlZ2NsYXNzKSBBUyAkJAogICAtLSBGb3Ig ZWFjaCBwdWJsaWNhdGlvbiwgc2hvdyBlYWNoIHB1Ymxpc2hlZCByb290IGFsb25nc2lkZSB0 aGUgdGFibGVzIHdoaWNoCkBAIC0xMDc2LDYgKzEwODgsNyBAQCBTRUxFQ1QgKiBGUk9NIHBn X3B1YmxpY2F0aW9uX3RhYmxlczsKIC0tIFRhYmxlIHB1YmxpY2F0aW9uIHRoYXQgaW5jbHVk ZXMgYm90aCB0aGUgcGFyZW50IHRhYmxlIGFuZCB0aGUgY2hpbGQgdGFibGUKIEFMVEVSIFBV QkxJQ0FUSU9OIHB1YiBBREQgVEFCTEUgc2NoMS50YmwxOwogU0VMRUNUICogRlJPTSBwZ19w dWJsaWNhdGlvbl90YWJsZXM7CitTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zeW5jKCdwdWIn KTsKIFNFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgncHViJyk7CiAKIERST1AgUFVC TElDQVRJT04gcHViOwpAQCAtMTA5MSw2ICsxMTA0LDcgQEAgU0VMRUNUICogRlJPTSBwZ19w dWJsaWNhdGlvbl90YWJsZXM7CiAtLSBUYWJsZSBwdWJsaWNhdGlvbiB0aGF0IGluY2x1ZGVz IGJvdGggdGhlIHBhcmVudCB0YWJsZSBhbmQgdGhlIGNoaWxkIHRhYmxlCiBBTFRFUiBQVUJM SUNBVElPTiBwdWIgQUREIFRBQkxFIHNjaDEudGJsMTsKIFNFTEVDVCAqIEZST00gcGdfcHVi bGljYXRpb25fdGFibGVzOworU0VMRUNUICogRlJPTSBwdWJsaXNoZWRfc3luYygncHViJyk7 CiBTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zdHJlYW0oJ3B1YicpOwogCiBEUk9QIFBVQkxJ Q0FUSU9OIHB1YjsKQEAgLTExMDUsMTIgKzExMTksMTM4IEBAIEFMVEVSIFRBQkxFIHNjaDEu dGJsMSBBVFRBQ0ggUEFSVElUSU9OIHNjaDEudGJsMV9wYXJ0MyBGT1IgVkFMVUVTIEZST00g KDIwKSB0byAoCiBDUkVBVEUgUFVCTElDQVRJT04gcHViIEZPUiBUQUJMRVMgSU4gU0NIRU1B IHNjaDEgV0lUSCAoUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MSk7CiBTRUxFQ1QgKiBG Uk9NIHBnX3B1YmxpY2F0aW9uX3RhYmxlczsKIAorLS0gU2FuaXR5IGNoZWNrIGNhc2VzIGZv ciBwdWJsaXNoX3ZpYV9wYXJlbnQuCitDUkVBVEUgVEFCTEUgc2NoMS5pcm9vdCAoYSBpbnQp OworQ1JFQVRFIFRBQkxFIHNjaDEuaXBhcnQxIChhIGludCk7CitDUkVBVEUgVEFCTEUgc2No MS5pcGFydDIgKCkgSU5IRVJJVFMgKHNjaDEuaXJvb3QpOworCistLSBzaG91bGQgZG8gbm90 aGluZyBhdCBhbGwKK0FMVEVSIFRBQkxFIHNjaDEuaXJvb3QgU0VUIChwdWJsaXNoX3ZpYV9w YXJlbnQgPSBmYWxzZSk7CitBTFRFUiBUQUJMRSBzY2gxLmlyb290IFJFU0VUIChwdWJsaXNo X3ZpYV9wYXJlbnQpOworCistLSBtYXJraW5nIHJvb3RzIGJldHdlZW4gdW5yZWxhdGVkIHRh YmxlcyBpcyBub3QgYWxsb3dlZAorQUxURVIgVEFCTEUgc2NoMS5pcGFydDEgU0VUIChwdWJs aXNoX3ZpYV9wYXJlbnQpOworQ1JFQVRFIFRBQkxFIGZhaWwgKGEgaW50KSBXSVRIIChwdWJs aXNoX3ZpYV9wYXJlbnQpOworCistLSBlc3RhYmxpc2hpbmcgYW4gaW5oZXJpdGFuY2UgcmVs YXRpb25zaGlwIGZpeGVzIHRoZSBwcm9ibGVtCitBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0MSBJ TkhFUklUIHNjaDEuaXJvb3QsCisJCQkJCQlTRVQgKHB1Ymxpc2hfdmlhX3BhcmVudCk7CisK Ky0tIGJ1dCBtdWx0aXBsZSBpbmhlcml0YW5jZSBpcyBub3QgYWxsb3dlZAorQUxURVIgVEFC TEUgc2NoMS5pcGFydDIgSU5IRVJJVCBzY2gxLmlwYXJ0MSwKKwkJCQkJCVNFVCAocHVibGlz aF92aWFfcGFyZW50KTsKKworLS0gb25jZSBwdWJsaXNoX3ZpYV9wYXJlbnQgaXMgc2V0LCBp bmhlcml0YW5jZSBjYW5ub3QgYmUgY2hhbmdlZAorQUxURVIgVEFCTEUgc2NoMS5pcGFydDIg U0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQpOworQUxURVIgVEFCTEUgc2NoMS5pcGFydDIgTk8g SU5IRVJJVCBzY2gxLmlyb290OworQUxURVIgVEFCTEUgc2NoMS5pcGFydDIgSU5IRVJJVCBz Y2gxLmlwYXJ0MTsKKworLS0gdGFibGUgb3duZXJzaGlwIG11c3QgbWF0Y2gsIGxpa2UgQVRU QUNIIFBBUlRJVElPTgorQ1JFQVRFIFJPTEUgcmVncmVzc190ZXN0X21lOworQ1JFQVRFIFJP TEUgcmVncmVzc190ZXN0X25vdF9tZTsKK0NSRUFURSBUQUJMRSByb290IChhIGludCk7CitD UkVBVEUgVEFCTEUgcGFydCAoKSBJTkhFUklUUyAocm9vdCk7CisKK0FMVEVSIFRBQkxFIHJv b3QgT1dORVIgVE8gcmVncmVzc190ZXN0X21lOworQUxURVIgVEFCTEUgcGFydCBPV05FUiBU TyByZWdyZXNzX3Rlc3Rfbm90X21lOworU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiByZWdy ZXNzX3Rlc3RfbWU7CitBTFRFUiBUQUJMRSBwYXJ0IFNFVCAocHVibGlzaF92aWFfcGFyZW50 KTsgLS0gc2hvdWxkIGZhaWwKK1JFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKKworQUxU RVIgVEFCTEUgcm9vdCBPV05FUiBUTyByZWdyZXNzX3Rlc3Rfbm90X21lOworQUxURVIgVEFC TEUgcGFydCBPV05FUiBUTyByZWdyZXNzX3Rlc3RfbWU7CitTRVQgU0VTU0lPTiBBVVRIT1JJ WkFUSU9OIHJlZ3Jlc3NfdGVzdF9tZTsKK0FMVEVSIFRBQkxFIHBhcnQgU0VUIChwdWJsaXNo X3ZpYV9wYXJlbnQpOyAtLSBzaG91bGQgYWxzbyBmYWlsCitDUkVBVEUgVEFCTEUgZmFpbCAo KSBJTkhFUklUUyAocm9vdCkgV0lUSCAocHVibGlzaF92aWFfcGFyZW50KTsKK1JFU0VUIFNF U1NJT04gQVVUSE9SSVpBVElPTjsKKworRFJPUCBUQUJMRSByb290LCBwYXJ0OworRFJPUCBS T0xFIHJlZ3Jlc3NfdGVzdF9ub3RfbWU7CitEUk9QIFJPTEUgcmVncmVzc190ZXN0X21lOwor CistLSBNaXhlZCBwdWJsaWNhdGlvbiBzZXR0aW5ncyBmb3IgcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QsIGF0IGRpZmZlcmVudAorLS0gbGV2ZWxzIG9mIHRoZSBpbmhlcml0YW5jZSB0 cmVlLCB0byBwaW4gY29ycmVjdCBiZWhhdmlvciBpbiB0aGUgd29yc3QgY2FzZXMuCitDUkVB VEUgVEFCTEUgc2NoMS5pcGFydDFfYSAoKSBJTkhFUklUUyAoc2NoMS5pcGFydDEpIFdJVEgg KHB1Ymxpc2hfdmlhX3BhcmVudCk7CitDUkVBVEUgVEFCTEUgc2NoMS5pcGFydDFfYTEgKCkg SU5IRVJJVFMgKHNjaDEuaXBhcnQxX2EpOworQUxURVIgVEFCTEUgc2NoMS5pcGFydDFfYTEg U0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQpOworCitDUkVBVEUgUFVCTElDQVRJT04gaXB1Yl9y b290IEZPUiBUQUJMRSBzY2gxLmlyb290OworQ1JFQVRFIFBVQkxJQ0FUSU9OIGlwdWJfcGFy dDEgRk9SIFRBQkxFIE9OTFkgc2NoMS5pcGFydDEsIE9OTFkgc2NoMS5pcGFydDFfYTEKKyAg ICAgICBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CitDUkVBVEUgUFVCTElD QVRJT04gaXB1Yl9vdGhlciBGT1IgVEFCTEUgT05MWSBzY2gxLmlyb290LCBPTkxZIHNjaDEu aXBhcnQxX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT05M WSBzY2gxLmlwYXJ0MgorICAgICAgIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 KTsKKworLS0gQXQgdGhpcyBwb2ludCwgdGhlIHB1Ymxpc2hlZCB0cmVlcyBsb29rIGxpa2Ug dGhpczoKKy0tCistLSBpcHViX3Jvb3QgICAgICAgICAgICAgaXB1Yl9wYXJ0MSAocHVidmlh cm9vdCkgICAgaXB1Yl9vdGhlciAocHVidmlhcm9vdCkKKy0tIC0tLS0tLS0tLS0tLS0tLS0t LSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorLS0gIGlyb290ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpcm9vdAorLS0gICstIGlwYXJ0MSAgICAgICAgICAgICAgICBpcGFydDEgICAgICAgICAg ICAgICAgICB8CistLSAgfCArLSBpcGFydDFfYSAgICAgICAgICAgIHwgICAgICAgICAgICAg ICAgICAgICAgICstLS0gaXBhcnQxX2EKKy0tICB8ICAgKy0gaXBhcnQxX2ExICAgICAgICAg Ky0tLSBpcGFydDFfYTEgICAgICAgICAgfAorLS0gICstIGlwYXJ0MiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArLSBpcGFydDIKKworLS0gV2hhdCBhIHN1YnNj cmlwdGlvbiB0byBvbmx5IGlwdWJfcm9vdCBzaG91bGQgc2VlCitTRUxFQ1QgcmVsaWQ6OnJl Z2NsYXNzIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcygnaXB1Yl9yb290Jyk7CitT RUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zeW5jKCdpcHViX3Jvb3QnKTsKK1NFTEVDVCAqIEZS T00gcHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9yb290Jyk7CisKKy0tIFdoYXQgYSBzdWJzY3Jp cHRpb24gdG8gb25seSBpcHViX3BhcnQxIHNob3VsZCBzZWUKK1NFTEVDVCByZWxpZDo6cmVn Y2xhc3MgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKCdpcHViX3BhcnQxJyk7CitT RUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zeW5jKCdpcHViX3BhcnQxJyk7CitTRUxFQ1QgKiBG Uk9NIHB1Ymxpc2hlZF9zdHJlYW0oJ2lwdWJfcGFydDEnKTsKKworLS0gV2hhdCBhIHN1YnNj cmlwdGlvbiB0byBib3RoIGlwdWJfcm9vdCBhbmQgaXB1Yl9wYXJ0MSBzaG91bGQgc2VlCitT RUxFQ1QgcHVibmFtZSwgcmVsaWQ6OnJlZ2NsYXNzCisgIEZST00gcGdfZ2V0X3B1YmxpY2F0 aW9uX3RhYmxlcygnaXB1Yl9yb290JywgJ2lwdWJfcGFydDEnKSB0CisgIEpPSU4gcGdfcHVi bGljYXRpb24gcCBPTiAocC5vaWQgPSB0LnB1YmlkKTsKK1NFTEVDVCAqIEZST00gcHVibGlz aGVkX3N5bmMoJ2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJyk7CitTRUxFQ1QgKiBGUk9NIHB1 Ymxpc2hlZF9zdHJlYW0oJ2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJyk7CisKKy0tIFdoYXQg YSBzdWJzY3JpcHRpb24gdG8gYm90aCBpcHViX3BhcnQxIGFuZCBpcHViX290aGVyIHNob3Vs ZCBzZWUKK1NFTEVDVCBwdWJuYW1lLCByZWxpZDo6cmVnY2xhc3MKKyAgRlJPTSBwZ19nZXRf cHVibGljYXRpb25fdGFibGVzKCdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKSB0CisgIEpP SU4gcGdfcHVibGljYXRpb24gcCBPTiAocC5vaWQgPSB0LnB1YmlkKTsKK1NFTEVDVCAqIEZS T00gcHVibGlzaGVkX3N5bmMoJ2lwdWJfcGFydDEnLCAnaXB1Yl9vdGhlcicpOworU0VMRUNU ICogRlJPTSBwdWJsaXNoZWRfc3RyZWFtKCdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKTsK KworLS0gV2hhdCBhIHN1YnNjcmlwdGlvbiB0byBhbGwgdGhyZWUgc2hvdWxkIHNlZQorU0VM RUNUIHB1Ym5hbWUsIHJlbGlkOjpyZWdjbGFzcworICBGUk9NIHBnX2dldF9wdWJsaWNhdGlv bl90YWJsZXMoJ2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKSB0Cisg IEpPSU4gcGdfcHVibGljYXRpb24gcCBPTiAocC5vaWQgPSB0LnB1YmlkKTsKK1NFTEVDVCAq IEZST00gcHVibGlzaGVkX3N5bmMoJ2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJywgJ2lwdWJf b3RoZXInKTsKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9yb290Jywg J2lwdWJfcGFydDEnLCAnaXB1Yl9vdGhlcicpOworCistLSAiRGV0YWNoaW5nIiBwYXJ0aXRp b25zIHNob3VsZCBjaGFuZ2UgdGhlIHN1YnNjcmlwdGlvbnMKK0FMVEVSIFRBQkxFIHNjaDEu aXBhcnQyIFNFVCAocHVibGlzaF92aWFfcGFyZW50ID0gZmFsc2UpOworU0VMRUNUIHB1Ym5h bWUsIHJlbGlkOjpyZWdjbGFzcworICBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMo J2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKSB0CisgIEpPSU4gcGdf cHVibGljYXRpb24gcCBPTiAocC5vaWQgPSB0LnB1YmlkKTsKK1NFTEVDVCAqIEZST00gcHVi bGlzaGVkX3N5bmMoJ2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKTsK K1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9yb290JywgJ2lwdWJfcGFy dDEnLCAnaXB1Yl9vdGhlcicpOworCitBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0MV9hMSBSRVNF VCAocHVibGlzaF92aWFfcGFyZW50KTsKK1NFTEVDVCByZWxpZDo6cmVnY2xhc3MgRlJPTSBw Z19nZXRfcHVibGljYXRpb25fdGFibGVzKCdpcHViX3BhcnQxJyk7CitTRUxFQ1QgKiBGUk9N IHB1Ymxpc2hlZF9zeW5jKCdpcHViX3BhcnQxJyk7CitTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hl ZF9zdHJlYW0oJ2lwdWJfcGFydDEnKTsKKworRFJPUCBQVUJMSUNBVElPTiBpcHViX290aGVy OworRFJPUCBQVUJMSUNBVElPTiBpcHViX3BhcnQxOworRFJPUCBQVUJMSUNBVElPTiBpcHVi X3Jvb3Q7CisKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBEUk9QIFBVQkxJQ0FUSU9O IHB1YjsKIERST1AgVEFCTEUgc2NoMS50YmwxOworRFJPUCBUQUJMRSBzY2gxLmlwYXJ0MV9h MTsKK0RST1AgVEFCTEUgc2NoMS5pcGFydDFfYTsKK0RST1AgVEFCTEUgc2NoMS5pcGFydDE7 CitEUk9QIFRBQkxFIHNjaDEuaXBhcnQyOworRFJPUCBUQUJMRSBzY2gxLmlyb290OwogRFJP UCBTQ0hFTUEgc2NoMSBjYXNjYWRlOwogRFJPUCBTQ0hFTUEgc2NoMiBjYXNjYWRlOwogRFJP UCBGVU5DVElPTiBwdWJsaXNoZWRfc3RyZWFtOworRFJPUCBGVU5DVElPTiBwdWJsaXNoZWRf c3luYzsKIAogUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwogRFJPUCBST0xFIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxM19wYXJ0aXRpb24ucGwgYi9zcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wMTNfcGFydGl0aW9uLnBsCmluZGV4IDI3NWZiM2I1MjUu LjA5ZTNmMmQwMjggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxM19w YXJ0aXRpb24ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlv bi5wbApAQCAtMzg4LDYgKzM4OCw1OSBAQCAkbm9kZV9zdWJzY3JpYmVyMS0+YXBwZW5kX2Nv bmYoJ3Bvc3RncmVzcWwuY29uZicsCiAJImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7 CiAkbm9kZV9zdWJzY3JpYmVyMS0+cmVsb2FkOwogCisjIE1ha2Ugc3VyZSBzdGFuZGFyZCBp bmhlcml0YW5jZSBzZXR1cHMgYXJlbid0IGJyb2tlbiBieSB0aGUgbmV3CisjIHB1Ymxpc2hf dmlhX3BhcmVudCBoYW5kbGluZy4KKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIxIChhIGludCwgYiB0ZXh0KSIpOworJG5v ZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUg aXRhYjFfMSAoTElLRSBpdGFiMSkiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIxXzIgKExJS0UgaXRhYjEpIik7CisK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSBpdGFiMSAoYSBpbnQsIGIgdGV4dCkiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMV8xIChDSEVDSyAoYSA9IDEpKSBJ TkhFUklUUyAoaXRhYjEpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjFfMiAoQ0hFQ0sgKGEgPSAyKSkgSU5IRVJJVFMg KGl0YWIxKSIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJBTFRFUiBUQUJMRSBpdGFiMV8xIFNFVCAocHVibGlzaF92aWFfcGFyZW50ID0gdHJ1ZSki KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFRB QkxFIGl0YWIxXzIgU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQgPSB0cnVlKSIpOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gaXRhYjEg VkFMVUVTICgwLCAnaXRhYjEnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIxXzEgVkFMVUVTICgxLCAnaXRhYjEnKSIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0 YWIxXzIgVkFMVUVTICgyLCAnaXRhYjEnKSIpOworCisjIFJlZ3Jlc3Npb246IENyZWF0ZSBh IHB1YmxpY2F0aW9uIGZvciBhbiB1bnJlbGF0ZWQgdGFibGUgYW5kIHNldAorIyBwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdC4gVGhpcyBzaG91bGQgaGF2ZSBubyBlZmZlY3QgYXQgYWxs LCBzaW5jZSBpdGFiMQorIyBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2luZyB0aGlzIHB1Ymxp Y2F0aW9uLi4uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgUFVCTElDQVRJT04gZHVtbXlfcHViIEZPUiBUQUJMRSB0YWIxIFdJVEggKHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSkiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHN1YjIgQUREIFBV QkxJQ0FUSU9OIGR1bW15X3B1YiIpOworJG5vZGVfc3Vic2NyaWJlcjItPndhaXRfZm9yX3N1 YnNjcmlwdGlvbl9zeW5jOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIxIik7CitpcygkcmVz dWx0LCBxcSgwfGl0YWIxKSwgJ2luaXRpYWwgZGF0YSBzeW5jZWQgZm9yIGl0YWIxIG9uIHN1 YnNjcmliZXIgMicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBpdGFiMV8xIik7CitpcygkcmVzdWx0 LCBxcSgxfGl0YWIxKSwgJ2luaXRpYWwgZGF0YSBzeW5jZWQgZm9yIGl0YWIxXzEgb24gc3Vi c2NyaWJlciAyJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIxXzIiKTsKK2lzKCRyZXN1bHQs IHFxKDJ8aXRhYjEpLCAnaW5pdGlhbCBkYXRhIHN5bmNlZCBmb3IgaXRhYjFfMiBvbiBzdWJz Y3JpYmVyIDInKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiRFJPUCBUQUJMRSBpdGFiMSBDQVNDQURFOyIpOworJG5vZGVfc3Vic2NyaWJlcjItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJEUk9QIFRBQkxFIGl0YWIxIENBU0NBREU7Iik7CisK KyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VC U0NSSVBUSU9OIHN1YjIgRFJPUCBQVUJMSUNBVElPTiBkdW1teV9wdWIiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9OIGR1bW15 X3B1YiIpOworCiAjIFRlc3RzIGZvciByZXBsaWNhdGlvbiB1c2luZyByb290IHRhYmxlIGlk ZW50aXR5IGFuZCBzY2hlbWEKIAogIyBwdWJsaXNoZXIKQEAgLTg4Niw0ICs5MzksMjYzIEBA ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJ IlNFTEVDVCBhLCBiLCBjIEZST00gdGFiNV8xIE9SREVSIEJZIDEiKTsKIGlzKCRyZXN1bHQs IHFxKDR8fDEpLCAndXBkYXRlcyBvZiB0YWI1IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CiAK KyMgVGVzdCB0aGF0IHJlcGxpY2F0aW9uIHdvcmtzIGZvciBvbGRlciBpbmhlcml0YW5jZS90 cmlnZ2VyIHNldHVwcyBhcyB3ZWxsLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIxIChhIGludCwgYiB0ZXh0KSIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0 YWIxXzEgKENIRUNLIChhID0gMSkpIElOSEVSSVRTIChpdGFiMSkiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMV8yIChD SEVDSyAoYSA9IDIpKSBJTkhFUklUUyAoaXRhYjEpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKKwlDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBp dGFiMV90cmlnZ2VyKCkKKwlSRVRVUk5TIFRSSUdHRVIgQVMgXCRcJAorCUJFR0lOCisJCUlG ICggTkVXLmEgPSAxICkgVEhFTiBJTlNFUlQgSU5UTyBpdGFiMV8xIFZBTFVFUyAoTkVXLiop OworCQlFTFNJRiAoIE5FVy5hID0gMiApIFRIRU4gSU5TRVJUIElOVE8gaXRhYjFfMiBWQUxV RVMgKE5FVy4qKTsKKwkJRUxTRSBSRVRVUk4gTkVXOworCQlFTkQgSUY7CisJCVJFVFVSTiBO VUxMOworCUVORDsKKwlcJFwkCisJTEFOR1VBR0UgcGxwZ3NxbDsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKKwlDUkVBVEUgVFJJR0dFUiBpdGFiMV90 cmlnZ2VyCisJQkVGT1JFIElOU0VSVCBPTiBpdGFiMQorCUZPUiBFQUNIIFJPVyBFWEVDVVRF IEZVTkNUSU9OIGl0YWIxX3RyaWdnZXIoKTsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUgaXRhYjFfMSBTRVQgKHB1Ymxpc2hf dmlhX3BhcmVudCA9IHRydWUpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJBTFRFUiBUQUJMRSBpdGFiMV8yIFNFVCAocHVibGlzaF92aWFfcGFyZW50 ID0gdHJ1ZSkiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQ1JFQVRFIFRBQkxFIGl0YWIyIChhIGludCwgYiB0ZXh0KSIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIyXzEgKENI RUNLIChhID0gMSkpIElOSEVSSVRTIChpdGFiMikiKTsKKworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIgorCUNSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGl0 YWIyX3RyaWdnZXIoKQorCVJFVFVSTlMgVFJJR0dFUiBBUyBcJFwkCisJQkVHSU4KKwkJSUYg KCBORVcuYSA9IDEgKSBUSEVOIElOU0VSVCBJTlRPIGl0YWIyXzEgVkFMVUVTIChORVcuKik7 CisJCUVMU0UgUkVUVVJOIE5FVzsKKwkJRU5EIElGOworCQlSRVRVUk4gTlVMTDsKKwlFTkQ7 CisJXCRcJAorCUxBTkdVQUdFIHBscGdzcWw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiCisJQ1JFQVRFIFRSSUdHRVIgaXRhYjJfdHJpZ2dlcgorCUJF Rk9SRSBJTlNFUlQgT04gaXRhYjIKKwlGT1IgRUFDSCBST1cgRVhFQ1VURSBGVU5DVElPTiBp dGFiMl90cmlnZ2VyKCk7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIkFMVEVSIFRBQkxFIGl0YWIyXzEgU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQg PSB0cnVlKSIpOworCisjIGl0YWIyXzEgc2hvdWxkIGJlIHB1Ymxpc2hlZCB1c2luZyBpdHMg b3duIGlkZW50aXR5IGhlcmUsIHNpbmNlIGl0cyBwYXJlbnQgaXMKKyMgbm90IGluY2x1ZGVk LiBpdGFiMV8xIHNob3VsZCBiZSBwdWJsaXNoZWQgdmlhIGl0cyBwYXJlbnQsIGl0YWIxLCB3 aXRob3V0CisjIGR1cGxpY2F0aW5nIHRoZSByb3dzLgorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgUFVCTElDQVRJT04gcHViX3ZpYXJvb3QgQURE IFRBQkxFIGl0YWIxLCBpdGFiMV8xLCBpdGFiMl8xIik7CisKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiMSBWQUxVRVMgKDAsICdp dGFiMScpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gaXRhYjEgVkFMVUVTICgxLCAnaXRhYjEnKSIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIxIFZBTFVFUyAoMiwg J2l0YWIxJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyBpdGFiMiBWQUxVRVMgKDAsICdpdGFiMicpIik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gaXRhYjIgVkFMVUVTICgx LCAnaXRhYjInKSIpOworCisjIFN1YnNjcmliZXIgMSBvbmx5IHN1YnNjcmliZXMgdG8gc29t ZSBvZiB0aGUgcGFydGl0aW9ucywgYW5kIGRvZXMgbm90IHNldCB1cAorIyBwYXJ0aXRpb24g dHJpZ2dlcnMsIHRvIGNoZWNrIGZvciB0aGUgY29ycmVjdCByb3V0aW5nLgorJG5vZGVfc3Vi c2NyaWJlcjEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjEg KGEgaW50LCBiIHRleHQpIik7Ciskbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMV8xIChDSEVDSyAoYSA9IDEpKSBJTkhFUklU UyAoaXRhYjEpIik7Ciskbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBUQUJMRSBpdGFiMl8xIChhIGludCwgYiB0ZXh0KSIpOworCisjIFN1YnNj cmliZXIgMiBoYXMgZGlmZmVyZW50IHBhcnRpdGlvbiBuYW1lcyBmb3IgaXRhYjEsIGFuZCBp dCBkb2Vzbid0IHBhcnRpdGlvbgorIyBpdGFiMiBhdCBhbGwuCiskbm9kZV9zdWJzY3JpYmVy Mi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMSAoYSBpbnQs IGIgdGV4dCkiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQ1JFQVRFIFRBQkxFIGl0YWIxX3BhcnQxIChDSEVDSyAoYSA9IDEpKSBJTkhFUklUUyAo aXRhYjEpIik7Ciskbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IkNSRUFURSBUQUJMRSBpdGFiMV9wYXJ0MiAoQ0hFQ0sgKGEgPSAyKSkgSU5IRVJJVFMgKGl0 YWIxKSIpOworCiskbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIK KwlDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBpdGFiX3RyaWdnZXIoKQorCVJFVFVSTlMg VFJJR0dFUiBBUyBcJFwkCisJQkVHSU4KKwkJSUYgKCBORVcuYSA9IDEgKSBUSEVOIElOU0VS VCBJTlRPIHB1YmxpYy5pdGFiMV9wYXJ0MSBWQUxVRVMgKE5FVy4qKTsKKwkJRUxTSUYgKCBO RVcuYSA9IDIgKSBUSEVOIElOU0VSVCBJTlRPIHB1YmxpYy5pdGFiMV9wYXJ0MiBWQUxVRVMg KE5FVy4qKTsKKwkJRUxTRSBSRVRVUk4gTkVXOworCQlFTkQgSUY7CisJCVJFVFVSTiBOVUxM OworCUVORDsKKwlcJFwkCisJTEFOR1VBR0UgcGxwZ3NxbDsiKTsKKyRub2RlX3N1YnNjcmli ZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgorCUNSRUFURSBUUklHR0VSIGl0YWJfdHJp Z2dlcgorCUJFRk9SRSBJTlNFUlQgT04gaXRhYjEKKwlGT1IgRUFDSCBST1cgRVhFQ1VURSBG VU5DVElPTiBpdGFiX3RyaWdnZXIoKTsiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIgorCUFMVEVSIFRBQkxFIGl0YWIxIEVOQUJMRSBBTFdBWVMgVFJJ R0dFUiBpdGFiX3RyaWdnZXI7Iik7CisKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIyIChhIGludCwgYiB0ZXh0KSIpOwor Ciskbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNV QlNDUklQVElPTiBzdWJfdmlhcm9vdCBSRUZSRVNIIFBVQkxJQ0FUSU9OIik7Ciskbm9kZV9z dWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElP TiBzdWIyIFJFRlJFU0ggUFVCTElDQVRJT04iKTsKKworJG5vZGVfc3Vic2NyaWJlcjEtPndh aXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jOworJG5vZGVfc3Vic2NyaWJlcjItPndhaXRfZm9y X3N1YnNjcmlwdGlvbl9zeW5jOworCisjIGNoZWNrIHRoYXQgZGF0YSBpcyBzeW5jZWQgY29y cmVjdGx5CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZST00gaXRhYjEgT1JERVIgQlkgMSwgMiIpOworaXMo JHJlc3VsdCwgcXEoMHxpdGFiMQorMXxpdGFiMQorMnxpdGFiMSksICdpbml0aWFsIGRhdGEg c3luY2VkIGZvciBpdGFiMSBvbiBzdWJzY3JpYmVyIDEnKTsKKworIyBhbGwgb2YgdGhlIGRh dGEgc2hvdWxkIGhhdmUgYmVlbiByb3V0ZWQgdG8gaXRhYjEgZGlyZWN0bHkgKHRoZXJlIGFy ZSBubworIyB0cmlnZ2VycyBvbiBzdWJzY3JpYmVyIDEgdG8gbW92ZSBpdCBlbHNld2hlcmUp CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJTRUxFQ1QgYSwgYiBGUk9NIE9OTFkgaXRhYjEgT1JERVIgQlkgMSwgMiIpOworaXMoJHJl c3VsdCwgcXEoMHxpdGFiMQorMXxpdGFiMQorMnxpdGFiMSksICdpbml0aWFsIGRhdGEgY29y cmVjdGx5IHJvdXRlZCBmb3IgaXRhYjEgb24gc3Vic2NyaWJlciAxJyk7CisKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBh LCBiIEZST00gaXRhYjJfMSBPUkRFUiBCWSAxLCAyIik7CitpcygkcmVzdWx0LCBxcSgxfGl0 YWIyKSwgJ2luaXRpYWwgZGF0YSBzeW5jZWQgZm9yIGl0YWIyXzEgb24gc3Vic2NyaWJlciAx Jyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIlNFTEVDVCBhLCBiIEZST00gaXRhYjEgT1JERVIgQlkgMSwgMiIpOworaXMoJHJl c3VsdCwgcXEoMHxpdGFiMQorMXxpdGFiMQorMnxpdGFiMSksICdpbml0aWFsIGRhdGEgc3lu Y2VkIGZvciBpdGFiMSBvbiBzdWJzY3JpYmVyIDInKTsKKworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBP TkxZIGl0YWIxIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDB8aXRhYjEpLCAn aW5pdGlhbCBkYXRhIGNvcnJlY3RseSByb3V0ZWQgZm9yIGl0YWIxIG9uIHN1YnNjcmliZXIg MicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIyIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRy ZXN1bHQsIHFxKDB8aXRhYjIKKzF8aXRhYjIpLCAnaW5pdGlhbCBkYXRhIHN5bmNlZCBmb3Ig aXRhYjIgb24gc3Vic2NyaWJlciAyJyk7CisKKyMgbWFrZSBzdXJlIG5ldyBkYXRhIGlzIGFs c28gY29ycmVjdGx5IHJvdXRlZCB0byB0aGUgcm9vdHMKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiMSBWQUxVRVMgKDEsICdpdGFi MS1uZXcnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIGl0YWIyIFZBTFVFUyAoMSwgJ2l0YWIyLW5ldycpIik7CisKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViX3ZpYXJvb3QnKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlcjEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIE9O TFkgaXRhYjEgT1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMHxpdGFiMQorMXxp dGFiMQorMXxpdGFiMS1uZXcKKzJ8aXRhYjEpLCAnbmV3IGRhdGEgcm91dGVkIGZvciBpdGFi MSBvbiBzdWJzY3JpYmVyIDEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIxLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBpdGFiMl8xIE9SREVS IEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDF8aXRhYjIKKzF8aXRhYjItbmV3KSwgJ25l dyBkYXRhIHJvdXRlZCBmb3IgaXRhYjJfMSBvbiBzdWJzY3JpYmVyIDEnKTsKKworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNU IGEsIGIgRlJPTSBpdGFiMSBPUkRFUiBCWSAxLCAyIik7CitpcygkcmVzdWx0LCBxcSgwfGl0 YWIxCisxfGl0YWIxCisxfGl0YWIxLW5ldworMnxpdGFiMSksICduZXcgZGF0YSByb3V0ZWQg Zm9yIGl0YWIxIG9uIHN1YnNjcmliZXIgMicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIx X3BhcnQxIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDF8aXRhYjEKKzF8aXRh YjEtbmV3KSwgJ25ldyBkYXRhIG1vdmVkIHRvIGl0YWIxX3BhcnQxIG9uIHN1YnNjcmliZXIg MicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIyIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRy ZXN1bHQsIHFxKDB8aXRhYjIKKzF8aXRhYjIKKzF8aXRhYjItbmV3KSwgJ25ldyBkYXRhIHJv dXRlZCBmb3IgaXRhYjIgb24gc3Vic2NyaWJlciAyJyk7CisKKyMgRmluYWxseSwgY2hlY2sg dGhlIGVmZmVjdCBvZiBtaXhlZCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBzZXR0aW5n cyBvbgorIyBsb2dpY2FsIHJvb3RzLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIzIChhIGludCwgYiB0ZXh0KSIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0 YWIzXzEgKCkgSU5IRVJJVFMgKGl0YWIzKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIzXzFfMSAoKSBJTkhFUklUUyAo aXRhYjNfMSkiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQUxURVIgVEFCTEUgaXRhYjNfMSBTRVQgKHB1Ymxpc2hfdmlhX3BhcmVudCA9IHRydWUp Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBU QUJMRSBpdGFiM18xXzEgU0VUIChwdWJsaXNoX3ZpYV9wYXJlbnQgPSB0cnVlKSIpOworCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBp dGFiMyBWQUxVRVMgKDEsICdpdGFiMycpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBpdGFiM18xIFZBTFVFUyAoMiwgJ2l0YWIz XzEnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5T RVJUIElOVE8gaXRhYjNfMV8xIFZBTFVFUyAoMywgJ2l0YWIzXzFfMScpIik7CisKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElP TiBpcHViMyBGT1IgVEFCTEUgaXRhYjMgKiIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIGlwdWIzXzEgRk9SIFRBQkxF IGl0YWIzXzEgKiBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpIik7 CisKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFRBQkxFIGl0YWIzIChhIGludCwgYiB0ZXh0KSIpOworJG5vZGVfc3Vic2NyaWJlcjItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjNfMSAoKSBJTkhFUklU UyAoaXRhYjMpIik7Ciskbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBUQUJMRSBpdGFiM18xXzEgKCkgSU5IRVJJVFMgKGl0YWIzXzEpIik7CisK KyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNV QlNDUklQVElPTiBtaXhlZCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIGlwdWIzLCBpcHViM18xIik7Ciskbm9kZV9zdWJzY3JpYmVyMi0+d2FpdF9mb3Jf c3Vic2NyaXB0aW9uX3N5bmM7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZST00gT05MWSBpdGFiMyIpOwor aXMoJHJlc3VsdCwgcXEoMXxpdGFiMyksICdpbml0aWFsIGRhdGEgcm91dGVkIGZvciBpdGFi MyBvbiBzdWJzY3JpYmVyIDInKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBPTkxZIGl0YWIzXzEg T1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMnxpdGFiM18xCiszfGl0YWIzXzFf MSksICdpbml0aWFsIGRhdGEgcm91dGVkIGZvciBpdGFiM18xIG9uIHN1YnNjcmliZXIgMicp OworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgYSwgYiBGUk9NIE9OTFkgaXRhYjNfMV8xIik7CitpcygkcmVzdWx0LCBx cSgpLCAnaW5pdGlhbCBkYXRhIHJvdXRlZCBmb3IgaXRhYjNfMV8xIG9uIHN1YnNjcmliZXIg MicpOworCisjIG1ha2Ugc3VyZSBuZXcgZGF0YSBpcyBhbHNvIGNvcnJlY3RseSByb3V0ZWQg dG8gdGhlIHJvb3RzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gaXRhYjMgVkFMVUVTICg0LCAnaXRhYjNfbmV3JykiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiM18xIFZB TFVFUyAoNCwgJ2l0YWIzXzFfbmV3JykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiM18xXzEgVkFMVUVTICg0LCAnaXRhYjNf MV8xX25ldycpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbWl4 ZWQnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBPTkxZIGl0YWIzIE9SREVSIEJZIDEsIDIiKTsK K2lzKCRyZXN1bHQsIHFxKDF8aXRhYjMKKzR8aXRhYjNfbmV3KSwgJ25ldyBkYXRhIHJvdXRl ZCBmb3IgaXRhYjMgb24gc3Vic2NyaWJlciAyJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZST00gT05M WSBpdGFiM18xIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDJ8aXRhYjNfMQor M3xpdGFiM18xXzEKKzR8aXRhYjNfMV8xX25ldworNHxpdGFiM18xX25ldyksICduZXcgZGF0 YSByb3V0ZWQgZm9yIGl0YWIzXzEgb24gc3Vic2NyaWJlciAyJyk7CisKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBi IEZST00gT05MWSBpdGFiM18xXzEiKTsKK2lzKCRyZXN1bHQsIHFxKCksICduZXcgZGF0YSBy b3V0ZWQgZm9yIGl0YWIzXzFfMSBvbiBzdWJzY3JpYmVyIDInKTsKKwogZG9uZV90ZXN0aW5n KCk7Ci0tIAoyLjI1LjEKCg== --------------t3G0JkSKKjR0VSJl6T1XOBWh--