Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tun7I-00Bac1-7G for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Mar 2025 06:41:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tun7G-00EvuZ-ER for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Mar 2025 06:41:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tun7F-00Evt8-TV for pgsql-hackers@lists.postgresql.org; Wed, 19 Mar 2025 06:41:26 +0000 Received: from mail-qt1-x836.google.com ([2607:f8b0:4864:20::836]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tun7B-003i8U-2M for pgsql-hackers@lists.postgresql.org; Wed, 19 Mar 2025 06:41:25 +0000 Received: by mail-qt1-x836.google.com with SMTP id d75a77b69052e-46c8474d8f6so58099441cf.3 for ; Tue, 18 Mar 2025 23:41:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742366481; x=1742971281; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=LIL5SfMk7ZRJ07u+PmjrA45nL1azQ2LJ/JCjTK2VZhY=; b=LzWQMPd6eRjudjK8grZgUyvqpLhL802n+EdH5xcN9kaNuDB8PHhYrD10CSdQHTOYSy RMCBEk9HxNoy6yto+GhScX1v407kwzd96Hf2D4Fh/XuNeWCMER7ymEFDfpxpS+F2B/fe yI5i66aK9KE6/qHH5Qa+OSn3/nfLkE7nVb+Ph9kwsFa3Gw7SOzsF3gDc1PqTT8s95vfh 2oP9N3jV0Av4pMUaoq1BGuO8TKyJDb7wSaSyWBC7n+Jpl+qhiKzpZMcopx7wJXlTHete z19ZnMdo68s1KYhM8d/E4k5XpxaGdyNTVprgVGafBnVGThMd2n3onZVm7/DByWVy634A nLDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742366481; x=1742971281; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=LIL5SfMk7ZRJ07u+PmjrA45nL1azQ2LJ/JCjTK2VZhY=; b=m1AqBqNqQCJ+hdEbD4BFDA4tr4EciCRYAnUez2A/90dp35RqDQzEvDJ/6NKl2Y1Krm Y0f8RNaEkUqnnKdRpRTCKt24aNk4nTw7Px5mqu7W0o2vXMk61K7GaqSuMS1/mHihsGsZ It3bhwnZXmcPnzPLnxliLRtMSaQOcfHN7mq4bGewDg1lLWFExz1xNkn8UHWPUiE9KJMc AXfHcyZQbcJ8pGTRxKIs70o5UfBMR72zPqUm4831A3gl7WISdyHxj/N5+lpPATE0yrX7 69Qg6w5HUSHINevKioJdi0U7uMgRYaFAPZieSA/uS2L1aWeoUd6fpvlyE9VHw7fXrvi5 PXHA== X-Forwarded-Encrypted: i=1; AJvYcCVQ0JHqs/QKNg5/TPzoBcoYmcfsTDODzrwBE07+ovHVr6ksC7nXvSaPWKkdgBVya683+FP0zu/gcnamDeXK@lists.postgresql.org X-Gm-Message-State: AOJu0Yw1SmDZSTR+u/ylhw7LLYjAdxc7D3kg7orR7JTNM6njLK6Nfudl B1m2N/4e+hFWXUhM0Cj/onuiaGOxDPGEMYHbw/O/6Peu5ea4Wg1FbwyH45CLnGXP0W9Dcdc0ACD Eo29UJsT68+l2RSjyzixv1bn1DEo= X-Gm-Gg: ASbGncskhq2fJWISaPCDYvpP2XxsruYNnxzNTPvT5L6Tix67qzDhhLT2R5dIGUfiWwz XC2CJEs0XyGog/B1hUerxDxDhuCZXP1u9bBZsPosoLsoK7bntiB7i6t8J0d2poQkI/RZHO8KyCO 8cXfI78uSxwBHtGwuMTLEhAS6W1n576/rKK7jazgqWR2cFaXTcESobFZZeN8MxRlciaoTAymY= X-Google-Smtp-Source: AGHT+IHWqPzZa8lHevkAuGevoOz9L3uQRelN5DYjrBDavVIxvEvzhW56VvMTjVOt9y7PpXtb/+Sd/upSYiD3uI+A9fk= X-Received: by 2002:a05:622a:1b16:b0:476:63e5:eb96 with SMTP id d75a77b69052e-4770830ad83mr26533101cf.28.1742366481365; Tue, 18 Mar 2025 23:41:21 -0700 (PDT) MIME-Version: 1.0 References: <202503111705.xy7fddu36qae@alvherre.pgsql> <4ef51faa-993f-46ea-9e68-7baf736c07b8@dunslane.net> In-Reply-To: <4ef51faa-993f-46ea-9e68-7baf736c07b8@dunslane.net> From: Mahendra Singh Thalor Date: Wed, 19 Mar 2025 12:11:09 +0530 X-Gm-Features: AQ5f1JoGyt470NgmxrF_icPSKuZ2-HL7LLS-QarfQPVOUIpCgKbDs1n5VxcGA90 Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Andrew Dunstan Cc: jian he , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000003142180630ac4fde" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003142180630ac4fde Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 12 Mar 2025 at 21:18, Andrew Dunstan wrote: > > > On 2025-03-12 We 3:03 AM, jian he wrote: > > On Wed, Mar 12, 2025 at 1:06=E2=80=AFAM =C3=81lvaro Herrera wrote: > >> Hello, > >> > >> On 2025-Mar-11, Mahendra Singh Thalor wrote: > >> > >>> In map.dat file, I tried to fix this issue by adding number of charac= ters > >>> in dbname but as per code comments, as of now, we are not supporting = \n\r > >>> in dbnames so i removed handling. > >>> I will do some more study to fix this issue. > >> Yeah, I think this is saying that you should not consider the contents > >> of map.dat as a shell string. After all, you're not going to _execute= _ > >> that file via the shell. > >> > >> Maybe for map.dat you need to escape such characters somehow, so that > >> they don't appear as literal newlines/carriage returns. > >> > > I am confused. > > currently pg_dumpall plain format will abort when encountering dbname > > containing newline. > > the left dumped plain file does not contain all the cluster databases d= ata. > > > > > > if pg_dumpall non-text format aborts earlier, > > it's aligned with pg_dumpall plain format? > > it's also an improvement since aborts earlier, nothing will be dumped? > > > > > > am i missing something? > > > > > > I think we should fix that. > > But for the current proposal, =C3=81lvaro and I were talking this morning= , > and we thought the simplest thing here would be to have the one line > format and escape NL/CRs in the database name. > > > cheers > Okay. As per discussions, we will keep one line entry for each database into map.file. Thanks all for feedback and review. Here, I am attaching updated patches for review and testing. These patches can be applied on commit a6524105d20b. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --0000000000003142180630ac4fde Content-Type: application/octet-stream; name="v24_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Disposition: attachment; filename="v24_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8fjwtdj0 RnJvbSA0ODc3ZjM2MTc1MTFkMjQ1ZWRmMDAxMmRjOGFlODI4ZGQ4YTU5NWUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogV2VkLCAxOSBNYXIgMjAyNSAwMToxODo0NiArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBtb3ZlIGNvbW1vbiBjb2RlIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0byBuZXcgdGhl IGZpbGUKCkNvbm5lY3REYXRhYmFzZSBpcyB1c2VkIGJ5IGJvdGggcGdfZHVtcGFsbCwgcGdfcmVz dG9yZQphbmQgcGdfZHVtcCBzbyBtb3ZlIGNvbW1vbiBjb2RlIHRvIG5ldyBmaWxlLgoKbmV3IGZp bGUgbmFtZTogY29ubmVjdGRiLmMKLS0tCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAg ICAgICAgfCAgIDUgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYyAgICAgICAgICB8IDI5 NCArKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIu aCAgICAgICAgICB8ICAyNiArKysKIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAg ICB8ICAgMyArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0K IHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyB8ICAgNiArLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9kYi5jICAgICAgIHwgIDc1ICstLS0tLS0KIHNyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBh bGwuYyAgICAgICAgIHwgMjc4ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDkgZmlsZXMgY2hh bmdlZCwgMzUwIGluc2VydGlvbnMoKyksIDM0MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmluL3BnX2R1bXAvY29ubmVjdGRiLmgKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFr ZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggMjMzYWQxNWNhNzUuLmZhNzk1 ODgzZTlmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBAIE9CSlMgPSBcCiAJY29tcHJlc3Nf bHo0Lm8gXAogCWNvbXByZXNzX25vbmUubyBcCiAJY29tcHJlc3NfenN0ZC5vIFwKKwljb25uZWN0 ZGIubyBcCiAJZHVtcHV0aWxzLm8gXAogCWZpbHRlci5vIFwKIAlwYXJhbGxlbC5vIFwKQEAgLTUw LDggKzUxLDggQEAgcGdfZHVtcDogcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBfc29ydC5vICQo T0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGcKIHBnX3Jlc3RvcmU6IHBnX3Jlc3Rv cmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxp YnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0b3JlLm8gJChPQkpTKSAkKExERkxB R1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAotcGdfZHVtcGFsbDogcGdfZHVt cGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBz dWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZMQUdTKSBw Z19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgJChMREZMQUdTKSAk KExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCitwZ19kdW1wYWxsOiBwZ19kdW1wYWxsLm8g JChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2Zl dXRpbHMKKwkkKENDKSAkKENGTEFHUykgcGdfZHVtcGFsbC5vICQoT0JKUykgJChMREZMQUdTKSAk KExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKIGluc3RhbGw6IGFsbCBpbnN0YWxsZGly cwogCSQoSU5TVEFMTF9QUk9HUkFNKSBwZ19kdW1wJChYKSAnJChERVNURElSKSQoYmluZGlyKScv cGdfZHVtcCQoWCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uM2UxZmJlOThjMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAv Y29ubmVjdGRiLmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IGNvbm5lY3RkYi5jCisgKiAgICBUaGlzIGlzIGEgY29tbW9uIGZpbGUgY29ubmVjdGlvbiB0byB0 aGUgZGF0YWJhc2UuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAq IElERU5USUZJQ0FUSU9OCisgKiAgICBzcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2lu Y2x1ZGUgImNvbW1vbi9jb25uZWN0LmgiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKKyNp bmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCisjaW5jbHVk ZSAiZHVtcHV0aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCisKK3N0 YXRpYyBjaGFyICpjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3Qg Y2hhciAqKnZhbHVlcyk7CisKKy8qCisgKiBDb25uZWN0RGF0YWJhc2UKKyAqCisgKiBNYWtlIGEg ZGF0YWJhc2UgY29ubmVjdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4KKyAqIGlu dGVyYWN0aXZlIHBhc3N3b3JkIHByb21wdCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiByZXF1 aXJlZC4KKyAqCisgKiBJZiBmYWlsX29uX2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4gTlVMTCB3 aXRob3V0IHByaW50aW5nIGFueSBtZXNzYWdlCisgKiBvbiBmYWlsdXJlLCBidXQgcHJlc2VydmUg YW55IHByb21wdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV4dCB0cnkuCisgKgorICogT24gc3VjY2Vz cywgdGhlICdjb25uc3RyJyBpcyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZyBjb250YWluaW5n CisgKiB0aGUgb3B0aW9ucyB1c2VkIGFuZCAnc2VydmVyX3ZlcnNpb24nIGlzIHNldCB0byB2ZXJz aW9uIHNvIHRoYXQgY2FsbGVyCisgKiBjYW4gdXNlIHRoZW0uCisgKi8KK1BHY29ubiAqCitDb25u ZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0 cmluZywKKwkJCQljb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3Qg Y2hhciAqcGd1c2VyLAorCQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29u X2Vycm9yLCBjb25zdCBjaGFyICpwcm9nbmFtZSwKKwkJCQljb25zdCBjaGFyICoqY29ubnN0ciwg aW50ICpzZXJ2ZXJfdmVyc2lvbiwgY2hhciAqcGFzc3dvcmQsCisJCQkJY2hhciAqb3ZlcnJpZGVf ZGJuYW1lKQoreworCVBHY29ubgkgICAqY29ubjsKKwlib29sCQluZXdfcGFzczsKKwljb25zdCBj aGFyICpyZW1vdGV2ZXJzaW9uX3N0cjsKKwlpbnQJCQlteV92ZXJzaW9uOworCWNvbnN0IGNoYXIg KiprZXl3b3JkcyA9IE5VTEw7CisJY29uc3QgY2hhciAqKnZhbHVlcyA9IE5VTEw7CisJUFFjb25u aW5mb09wdGlvbiAqY29ubl9vcHRzID0gTlVMTDsKKwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbl90ZW1w OworCisJaWYgKHByb21wdF9wYXNzd29yZCA9PSBUUklfWUVTICYmICFwYXNzd29yZCkKKwkJcGFz c3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCisJLyoKKwkgKiBT dGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJl cXVlc3RlZCBieQorCSAqIGJhY2tlbmQuCisJICovCisJZG8KKwl7CisJCWludAkJCWFyZ2NvdW50 ID0gODsKKwkJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHQ7CisJCWNoYXIJICAgKmVycl9tc2cg PSBOVUxMOworCQlpbnQJCQlpID0gMDsKKworCQlmcmVlKGtleXdvcmRzKTsKKwkJZnJlZSh2YWx1 ZXMpOworCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJCS8qCisJCSAqIE1lcmdlIHRo ZSBjb25uZWN0aW9uIGluZm8gaW5wdXRzIGdpdmVuIGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJp bmcKKwkJICogYW5kIG90aGVyIG9wdGlvbnMuICBFeHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFt ZSB2YWx1ZSBpbiB0aGUKKwkJICogY29ubmVjdGlvbiBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25u ZWN0ZGJQYXJhbXMoKSB3b3VsZCBpbnRlcnByZXQKKwkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBp dHNlbGYgYSBjb25uZWN0aW9uIHN0cmluZy4KKwkJICovCisJCWlmIChjb25uZWN0aW9uX3N0cmlu ZykKKwkJeworCQkJY29ubl9vcHRzID0gUFFjb25uaW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5n LCAmZXJyX21zZyk7CisJCQlpZiAoY29ubl9vcHRzID09IE5VTEwpCisJCQkJcGdfZmF0YWwoIiVz IiwgZXJyX21zZyk7CisKKwkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5r ZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwg IT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5f b3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKKwkJCQkJYXJnY291bnQrKzsKKwkJCX0KKwor CQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3Jk cykpOworCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFs dWVzKSk7CisKKwkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3Jk ICE9IE5VTEw7IGNvbm5fb3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVM TCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5r ZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKKwkJCQl7CisJCQkJCWtleXdvcmRzW2ldID0gY29ubl9v cHQtPmtleXdvcmQ7CisJCQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0LT52YWw7CisJCQkJCWkrKzsK KwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAo KGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7CisJCQl2YWx1ZXMgPSBwZ19tYWxs b2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKKwkJfQorCisJCWlmIChwZ2hv c3QpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImhvc3QiOworCQkJdmFsdWVzW2ldID0gcGdob3N0 OworCQkJaSsrOworCQl9CisJCWlmIChwZ3BvcnQpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBv cnQiOworCQkJdmFsdWVzW2ldID0gcGdwb3J0OworCQkJaSsrOworCQl9CisJCWlmIChwZ3VzZXIp CisJCXsKKwkJCWtleXdvcmRzW2ldID0gInVzZXIiOworCQkJdmFsdWVzW2ldID0gcGd1c2VyOwor CQkJaSsrOworCQl9CisJCWlmIChwYXNzd29yZCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAicGFz c3dvcmQiOworCQkJdmFsdWVzW2ldID0gcGFzc3dvcmQ7CisJCQlpKys7CisJCX0KKwkJaWYgKGRi bmFtZSkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAiZGJuYW1lIjsKKwkJCXZhbHVlc1tpXSA9IGRi bmFtZTsKKwkJCWkrKzsKKwkJfQorCQlpZiAob3ZlcnJpZGVfZGJuYW1lKQorCQl7CisJCQlrZXl3 b3Jkc1tpXSA9ICJkYm5hbWUiOworCQkJdmFsdWVzW2krK10gPSBvdmVycmlkZV9kYm5hbWU7CisJ CX0KKworCQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKKwkJdmFs dWVzW2ldID0gcHJvZ25hbWU7CisJCWkrKzsKKworCQluZXdfcGFzcyA9IGZhbHNlOworCQljb25u ID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7CisKKwkJaWYgKCFj b25uKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIs IGRibmFtZSk7CisKKwkJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCisJ CQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKGNvbm4pICYmCisJCQkhcGFzc3dvcmQgJiYKKwkJ CXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCisJCXsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJ cGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCQkJbmV3X3Bh c3MgPSB0cnVlOworCQl9CisJfSB3aGlsZSAobmV3X3Bhc3MpOworCisJLyogY2hlY2sgdG8gc2Vl IHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KKwlp ZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCisJeworCQlpZiAoZmFpbF9vbl9l cnJvcikKKwkJCXBnX2ZhdGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJZWxzZQor CQl7CisJCQlQUWZpbmlzaChjb25uKTsKKworCQkJZnJlZShrZXl3b3Jkcyk7CisJCQlmcmVlKHZh bHVlcyk7CisJCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJCQlyZXR1cm4gTlVMTDsK KwkJfQorCX0KKworCS8qCisJICogT2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIElmIHJlcXVl c3RlZCwgcmVtZW1iZXIgdGhlIG9wdGlvbnMgdXNlZCwgaW4gdGhlCisJICogZm9ybSBvZiBhIGNv bm5lY3Rpb24gc3RyaW5nLgorCSAqLworCWlmIChjb25uc3RyKQorCQkqY29ubnN0ciA9IGNvbnN0 cnVjdENvbm5TdHIoa2V5d29yZHMsIHZhbHVlcyk7CisKKwlmcmVlKGtleXdvcmRzKTsKKwlmcmVl KHZhbHVlcyk7CisJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCS8qIENoZWNrIHZlcnNp b24gKi8KKwlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFyYW1ldGVyU3RhdHVzKGNvbm4sICJzZXJ2 ZXJfdmVyc2lvbiIpOworCWlmICghcmVtb3RldmVyc2lvbl9zdHIpCisJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7CisKKwlzZXJ2ZXJfdmVyc2lvbl90ZW1wID0gUFFz ZXJ2ZXJWZXJzaW9uKGNvbm4pOworCWlmIChzZXJ2ZXJfdmVyc2lvbl90ZW1wID09IDApCisJCXBn X2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIlc1wiIiwKKwkJCQkgcmVt b3RldmVyc2lvbl9zdHIpOworCisJLyogSWYgcmVxdWVzdGVkLCB0aGVuIGNvcHkgc2VydmVyIHZl cnNpb24gdG8gb3V0IHZhcmlhYmxlLiAqLworCWlmIChzZXJ2ZXJfdmVyc2lvbikKKwkJKnNlcnZl cl92ZXJzaW9uID0gc2VydmVyX3ZlcnNpb25fdGVtcDsKKworCW15X3ZlcnNpb24gPSBQR19WRVJT SU9OX05VTTsKKworCS8qCisJICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDku MiwgYW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9mCisJICogb3VyIG93biBtYWpvciB2ZXJz aW9uLiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcC5jLikKKwkgKi8KKwlpZiAo bXlfdmVyc2lvbiAhPSBzZXJ2ZXJfdmVyc2lvbl90ZW1wCisJCSYmIChzZXJ2ZXJfdmVyc2lvbl90 ZW1wIDwgOTAyMDAgfHwKKwkJCShzZXJ2ZXJfdmVyc2lvbl90ZW1wIC8gMTAwKSA+IChteV92ZXJz aW9uIC8gMTAwKSkpCisJeworCQlwZ19sb2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2Vy dmVyIHZlcnNpb24gbWlzbWF0Y2giKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZl cnNpb246ICVzOyAlcyB2ZXJzaW9uOiAlcyIsCisJCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHBy b2duYW1lLCBQR19WRVJTSU9OKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJUFFjbGVhcihl eGVjdXRlUXVlcnkoY29ubiwgQUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKKworCXJl dHVybiBjb25uOworfQorCisvKgorICogY29uc3RydWN0Q29ublN0cgorICoKKyAqIENvbnN0cnVj dCBhIGNvbm5lY3Rpb24gc3RyaW5nIGZyb20gdGhlIGdpdmVuIGtleXdvcmQvdmFsdWUgcGFpcnMu IEl0IGlzCisgKiB1c2VkIHRvIHBhc3MgdGhlIGNvbm5lY3Rpb24gb3B0aW9ucyB0byB0aGUgcGdf ZHVtcCBzdWJwcm9jZXNzLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZXhj bHVkZWQ6CisgKglkYm5hbWUJCS0gdmFyaWVzIGluIGVhY2ggcGdfZHVtcCBpbnZvY2F0aW9uCisg KglwYXNzd29yZAktIGl0J3Mgbm90IHNlY3VyZSB0byBwYXNzIGEgcGFzc3dvcmQgb24gdGhlIGNv bW1hbmQgbGluZQorICoJZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSAtIHdlJ2xsIGxldCBwZ19k dW1wIHNldCBpdAorICovCitzdGF0aWMgY2hhciAqCitjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNo YXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcykKK3sKKwlQUUV4cEJ1ZmZlciBidWYg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCWNoYXIJICAgKmNvbm5zdHI7CisJaW50CQkJaTsKKwli b29sCQlmaXJzdGtleXdvcmQgPSB0cnVlOworCisJLyogQ29uc3RydWN0IGEgbmV3IGNvbm5lY3Rp b24gc3RyaW5nIGluIGtleT0ndmFsdWUnIGZvcm1hdC4gKi8KKwlmb3IgKGkgPSAwOyBrZXl3b3Jk c1tpXSAhPSBOVUxMOyBpKyspCisJeworCQlpZiAoc3RyY21wKGtleXdvcmRzW2ldLCAiZGJuYW1l IikgPT0gMCB8fAorCQkJc3RyY21wKGtleXdvcmRzW2ldLCAicGFzc3dvcmQiKSA9PSAwIHx8CisJ CQlzdHJjbXAoa2V5d29yZHNbaV0sICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIikgPT0gMCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3RrZXl3b3JkKQorCQkJYXBwZW5kUFFFeHBCdWZm ZXJDaGFyKGJ1ZiwgJyAnKTsKKwkJZmlyc3RrZXl3b3JkID0gZmFsc2U7CisJCWFwcGVuZFBRRXhw QnVmZmVyKGJ1ZiwgIiVzPSIsIGtleXdvcmRzW2ldKTsKKwkJYXBwZW5kQ29ublN0clZhbChidWYs IHZhbHVlc1tpXSk7CisJfQorCisJY29ubnN0ciA9IHBnX3N0cmR1cChidWYtPmRhdGEpOworCWRl c3Ryb3lQUUV4cEJ1ZmZlcihidWYpOworCXJldHVybiBjb25uc3RyOworfQorCisvKgorICogZXhl Y3V0ZVF1ZXJ5CisgKgorICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0cywgZXhpdCBw cm9ncmFtIG9uIGZhaWx1cmUuCisgKi8KK1BHcmVzdWx0ICoKK2V4ZWN1dGVRdWVyeShQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQoreworCVBHcmVzdWx0ICAgKnJlczsKKworCXBnX2xv Z19pbmZvKCJleGVjdXRpbmcgJXMiLCBxdWVyeSk7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgcXVl cnkpOworCWlmICghcmVzIHx8CisJCVBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVT X09LKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3Nh Z2UoY29ubikpOworCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkp OworCQlQUWZpbmlzaChjb25uKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJcmV0dXJuIHJl czsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaCBiL3NyYy9iaW4v cGdfZHVtcC9jb25uZWN0ZGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uOWUxZTdlZjMzZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29ubmVj dGRiLmgKQEAgLTAsMCArMSwyNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29ubmVj dGRiLmgKKyAqICAgICAgQ29tbW9uIGhlYWRlciBmaWxlIGZvciBjb25uZWN0aW9uIHRvIHRoZSBk YXRhYmFzZS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURF TlRJRklDQVRJT04KKyAqICAgIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaAorICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIENPTk5FQ1REQl9ICisjZGVmaW5lIENPTk5FQ1RE Ql9ICisKKyNpbmNsdWRlICJwZ19iYWNrdXAuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMu aCIKKworZXh0ZXJuIFBHY29ubiAqQ29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwg Y29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsIGNvbnN0IGNoYXIgKnBnaG9zdCwKKwkJCQkJ CQkgICBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKKwkJCQkJCQkgICB0 cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvciwKKwkJCQkJCQkgICBj b25zdCBjaGFyICpwcm9nbmFtZSwgY29uc3QgY2hhciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3Zl cnNpb24sCisJCQkJCQkJICAgY2hhciAqcGFzc3dvcmQsIGNoYXIgKm92ZXJyaWRlX2RibmFtZSk7 CitleHRlcm4gIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFy ICpxdWVyeSk7CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTk5FQ1REQl9I ICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKaW5kZXggNjAzYmE2Y2ZiZjAuLjkwMzE3MzdkMDEzIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21l c29uLmJ1aWxkCkBAIC02LDYgKzYsNyBAQCBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmlsZXMo CiAgICdjb21wcmVzc19sejQuYycsCiAgICdjb21wcmVzc19ub25lLmMnLAogICAnY29tcHJlc3Nf enN0ZC5jJywKKyAgJ2Nvbm5lY3RkYi5jJywKICAgJ2R1bXB1dGlscy5jJywKICAgJ2ZpbHRlci5j JywKICAgJ3BhcmFsbGVsLmMnLApAQCAtNDgsNiArNDksNyBAQCBiaW5fdGFyZ2V0cyArPSBwZ19k dW1wCiAKIAogcGdfZHVtcGFsbF9zb3VyY2VzID0gZmlsZXMoCisgICdjb25uZWN0ZGIuYycsCiAg ICdwZ19kdW1wYWxsLmMnLAogKQogCkBAIC02Nyw2ICs2OSw3IEBAIGJpbl90YXJnZXRzICs9IHBn X2R1bXBhbGwKIAogCiBwZ19yZXN0b3JlX3NvdXJjZXMgPSBmaWxlcygKKyAgJ2Nvbm5lY3RkYi5j JywKICAgJ3BnX3Jlc3RvcmUuYycsCiApCiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAppbmRleCA2NTg5ODZkZTZm OC4uYzY4YTIxMDI3ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAor KysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAgLTI5Myw3ICsyOTMsNyBAQCB0eXBl ZGVmIHZvaWQgKCpTZXR1cFdvcmtlclB0clR5cGUpIChBcmNoaXZlICpBSCk7CiAgKiBNYWluIGFy Y2hpdmVyIGludGVyZmFjZS4KICAqLwogCi1leHRlcm4gdm9pZCBDb25uZWN0RGF0YWJhc2UoQXJj aGl2ZSAqQUhYLAorZXh0ZXJuIHZvaWQgQ29ubmVjdERhdGFiYXNlQWh4KEFyY2hpdmUgKkFIWCwK IAkJCQkJCQljb25zdCBDb25uUGFyYW1zICpjcGFyYW1zLAogCQkJCQkJCWJvb2wgaXNSZWNvbm5l Y3QpOwogZXh0ZXJuIHZvaWQgRGlzY29ubmVjdERhdGFiYXNlKEFyY2hpdmUgKkFIWCk7CmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggODJkNTFjODlhYzYuLjNmZDI4MTgyMjNj IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC00MTQsNyArNDE0LDcgQEAg UmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCQlBSFgtPm1pblJlbW90ZVZlcnNpb24gPSAw OwogCQlBSFgtPm1heFJlbW90ZVZlcnNpb24gPSA5OTk5OTk5OwogCi0JCUNvbm5lY3REYXRhYmFz ZShBSFgsICZyb3B0LT5jcGFyYW1zLCBmYWxzZSk7CisJCUNvbm5lY3REYXRhYmFzZUFoeChBSFgs ICZyb3B0LT5jcGFyYW1zLCBmYWxzZSk7CiAKIAkJLyoKIAkJICogSWYgd2UncmUgdGFsa2luZyB0 byB0aGUgREIgZGlyZWN0bHksIGRvbid0IHNlbmQgY29tbWVudHMgc2luY2UgdGhleQpAQCAtNDQz Nyw3ICs0NDM3LDcgQEAgcmVzdG9yZV90b2NfZW50cmllc19wb3N0Zm9yayhBcmNoaXZlSGFuZGxl ICpBSCwgVG9jRW50cnkgKnBlbmRpbmdfbGlzdCkKIAkvKgogCSAqIE5vdyByZWNvbm5lY3QgdGhl IHNpbmdsZSBwYXJlbnQgY29ubmVjdGlvbi4KIAkgKi8KLQlDb25uZWN0RGF0YWJhc2UoKEFyY2hp dmUgKikgQUgsICZyb3B0LT5jcGFyYW1zLCB0cnVlKTsKKwlDb25uZWN0RGF0YWJhc2VBaHgoKEFy Y2hpdmUgKikgQUgsICZyb3B0LT5jcGFyYW1zLCB0cnVlKTsKIAogCS8qIHJlLWVzdGFibGlzaCBm aXhlZCBzdGF0ZSAqLwogCV9kb1NldEZpeGVkT3V0cHV0U3RhdGUoQUgpOwpAQCAtNTA1NCw3ICs1 MDU0LDcgQEAgQ2xvbmVBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCSAqIENvbm5lY3Qgb3Vy IG5ldyBjbG9uZSBvYmplY3QgdG8gdGhlIGRhdGFiYXNlLCB1c2luZyB0aGUgc2FtZSBjb25uZWN0 aW9uCiAJICogcGFyYW1ldGVycyB1c2VkIGZvciB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbi4KIAkg Ki8KLQlDb25uZWN0RGF0YWJhc2UoKEFyY2hpdmUgKikgY2xvbmUsICZjbG9uZS0+cHVibGljLnJv cHQtPmNwYXJhbXMsIHRydWUpOworCUNvbm5lY3REYXRhYmFzZUFoeCgoQXJjaGl2ZSAqKSBjbG9u ZSwgJmNsb25lLT5wdWJsaWMucm9wdC0+Y3BhcmFtcywgdHJ1ZSk7CiAKIAkvKiByZS1lc3RhYmxp c2ggZml4ZWQgc3RhdGUgKi8KIAlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVSZWFkKQpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9kYi5jCmluZGV4IDcxYzU1ZDI0NjZhLi4yMjdkZDk2Mzk4NCAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfZGIuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2Nvbm5lY3Qu aCIKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCiAj aW5jbHVkZSAicGFyYWxsZWwuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIKICNp bmNsdWRlICJwZ19iYWNrdXBfZGIuaCIKQEAgLTg2LDkgKzg3LDkgQEAgUmVjb25uZWN0VG9TZXJ2 ZXIoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmRibmFtZSkKIAkgKiBBcmNoaXZlSGFu ZGxlJ3MgY29ubkNhbmNlbCwgYmVmb3JlIGNsb3Npbmcgb2xkIGNvbm5lY3Rpb24uICBPdGhlcndp c2UKIAkgKiBhbiBpbGwtdGltZWQgU0lHSU5UIGNvdWxkIHRyeSB0byBhY2Nlc3MgYSBkZWFkIGNv bm5lY3Rpb24uCiAJICovCi0JQUgtPmNvbm5lY3Rpb24gPSBOVUxMOwkJLyogZG9kZ2UgZXJyb3Ig Y2hlY2sgaW4gQ29ubmVjdERhdGFiYXNlICovCisJQUgtPmNvbm5lY3Rpb24gPSBOVUxMOwkJLyog ZG9kZ2UgZXJyb3IgY2hlY2sgaW4gQ29ubmVjdERhdGFiYXNlQWh4ICovCiAKLQlDb25uZWN0RGF0 YWJhc2UoKEFyY2hpdmUgKikgQUgsICZyb3B0LT5jcGFyYW1zLCB0cnVlKTsKKwlDb25uZWN0RGF0 YWJhc2VBaHgoKEFyY2hpdmUgKikgQUgsICZyb3B0LT5jcGFyYW1zLCB0cnVlKTsKIAogCVBRZmlu aXNoKG9sZENvbm4pOwogfQpAQCAtMTA1LDE0ICsxMDYsMTMgQEAgUmVjb25uZWN0VG9TZXJ2ZXIo QXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmRibmFtZSkKICAqIHVzZXJuYW1lIG5ldmVy IGRvZXMgY2hhbmdlLCBzbyBvbmUgc2F2ZWRQYXNzd29yZCBpcyBzdWZmaWNpZW50LgogICovCiB2 b2lkCi1Db25uZWN0RGF0YWJhc2UoQXJjaGl2ZSAqQUhYLAorQ29ubmVjdERhdGFiYXNlQWh4KEFy Y2hpdmUgKkFIWCwKIAkJCQljb25zdCBDb25uUGFyYW1zICpjcGFyYW1zLAogCQkJCWJvb2wgaXNS ZWNvbm5lY3QpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7 CiAJdHJpdmFsdWUJcHJvbXB0X3Bhc3N3b3JkOwogCWNoYXIJICAgKnBhc3N3b3JkOwotCWJvb2wJ CW5ld19wYXNzOwogCiAJaWYgKEFILT5jb25uZWN0aW9uKQogCQlwZ19mYXRhbCgiYWxyZWFkeSBj b25uZWN0ZWQgdG8gYSBkYXRhYmFzZSIpOwpAQCAtMTI1LDY5ICsxMjUsMTAgQEAgQ29ubmVjdERh dGFiYXNlKEFyY2hpdmUgKkFIWCwKIAlpZiAocHJvbXB0X3Bhc3N3b3JkID09IFRSSV9ZRVMgJiYg cGFzc3dvcmQgPT0gTlVMTCkKIAkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDog IiwgZmFsc2UpOwogCi0JLyoKLQkgKiBTdGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50aWwg d2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQotCSAqIGJhY2tlbmQuCi0JICovCi0J ZG8KLQl7Ci0JCWNvbnN0IGNoYXIgKmtleXdvcmRzWzhdOwotCQljb25zdCBjaGFyICp2YWx1ZXNb OF07Ci0JCWludAkJCWkgPSAwOwotCi0JCS8qCi0JCSAqIElmIGRibmFtZSBpcyBhIGNvbm5zdHJp bmcsIGl0cyBlbnRyaWVzIGNhbiBvdmVycmlkZSB0aGUgb3RoZXIKLQkJICogdmFsdWVzIG9idGFp bmVkIGZyb20gY3BhcmFtczsgYnV0IGluIHR1cm4sIG92ZXJyaWRlX2RibmFtZSBjYW4KLQkJICog b3ZlcnJpZGUgdGhlIGRibmFtZSBjb21wb25lbnQgb2YgaXQuCi0JCSAqLwotCQlrZXl3b3Jkc1tp XSA9ICJob3N0IjsKLQkJdmFsdWVzW2krK10gPSBjcGFyYW1zLT5wZ2hvc3Q7Ci0JCWtleXdvcmRz W2ldID0gInBvcnQiOwotCQl2YWx1ZXNbaSsrXSA9IGNwYXJhbXMtPnBncG9ydDsKLQkJa2V5d29y ZHNbaV0gPSAidXNlciI7Ci0JCXZhbHVlc1tpKytdID0gY3BhcmFtcy0+dXNlcm5hbWU7Ci0JCWtl eXdvcmRzW2ldID0gInBhc3N3b3JkIjsKLQkJdmFsdWVzW2krK10gPSBwYXNzd29yZDsKLQkJa2V5 d29yZHNbaV0gPSAiZGJuYW1lIjsKLQkJdmFsdWVzW2krK10gPSBjcGFyYW1zLT5kYm5hbWU7Ci0J CWlmIChjcGFyYW1zLT5vdmVycmlkZV9kYm5hbWUpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gImRi bmFtZSI7Ci0JCQl2YWx1ZXNbaSsrXSA9IGNwYXJhbXMtPm92ZXJyaWRlX2RibmFtZTsKLQkJfQot CQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKLQkJdmFsdWVzW2kr K10gPSBwcm9nbmFtZTsKLQkJa2V5d29yZHNbaV0gPSBOVUxMOwotCQl2YWx1ZXNbaSsrXSA9IE5V TEw7Ci0JCUFzc2VydChpIDw9IGxlbmd0aG9mKGtleXdvcmRzKSk7Ci0KLQkJbmV3X3Bhc3MgPSBm YWxzZTsKLQkJQUgtPmNvbm5lY3Rpb24gPSBQUWNvbm5lY3RkYlBhcmFtcyhrZXl3b3JkcywgdmFs dWVzLCB0cnVlKTsKLQotCQlpZiAoIUFILT5jb25uZWN0aW9uKQotCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIik7Ci0KLQkJaWYgKFBRc3RhdHVzKEFILT5jb25uZWN0 aW9uKSA9PSBDT05ORUNUSU9OX0JBRCAmJgotCQkJUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChB SC0+Y29ubmVjdGlvbikgJiYKLQkJCXBhc3N3b3JkID09IE5VTEwgJiYKLQkJCXByb21wdF9wYXNz d29yZCAhPSBUUklfTk8pCi0JCXsKLQkJCVBRZmluaXNoKEFILT5jb25uZWN0aW9uKTsKLQkJCXBh c3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQkJCW5ld19wYXNz ID0gdHJ1ZTsKLQkJfQotCX0gd2hpbGUgKG5ld19wYXNzKTsKLQotCS8qIGNoZWNrIHRvIHNlZSB0 aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCi0JaWYg KFBRc3RhdHVzKEFILT5jb25uZWN0aW9uKSA9PSBDT05ORUNUSU9OX0JBRCkKLQl7Ci0JCWlmIChp c1JlY29ubmVjdCkKLQkJCXBnX2ZhdGFsKCJyZWNvbm5lY3Rpb24gZmFpbGVkOiAlcyIsCi0JCQkJ CSBQUWVycm9yTWVzc2FnZShBSC0+Y29ubmVjdGlvbikpOwotCQllbHNlCi0JCQlwZ19mYXRhbCgi JXMiLAotCQkJCQkgUFFlcnJvck1lc3NhZ2UoQUgtPmNvbm5lY3Rpb24pKTsKLQl9CisJQUgtPmNv bm5lY3Rpb24gPSBDb25uZWN0RGF0YWJhc2UoY3BhcmFtcy0+ZGJuYW1lLCBOVUxMLCBjcGFyYW1z LT5wZ2hvc3QsCisJCQljcGFyYW1zLT5wZ3BvcnQsIGNwYXJhbXMtPnVzZXJuYW1lLAorCQkJcHJv bXB0X3Bhc3N3b3JkLCB0cnVlLAorCQkJcHJvZ25hbWUsIE5VTEwsIE5VTEwsIHBhc3N3b3JkLCBj cGFyYW1zLT5vdmVycmlkZV9kYm5hbWUpOwogCiAJLyogU3RhcnQgc3RyaWN0OyBsYXRlciBwaGFz ZXMgbWF5IG92ZXJyaWRlIHRoaXMuICovCiAJUFFjbGVhcihFeGVjdXRlU3FsUXVlcnlGb3JTaW5n bGVSb3coKEFyY2hpdmUgKikgQUgsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA0MjhlZDJkNjBmYy4uZjgxNjY3 NDAzZGMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtOTM1LDcgKzkzNSw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCSAqIE9wZW4gdGhlIGRhdGFiYXNlIHVzaW5nIHRoZSBBcmNoaXZlciwgc28g aXQga25vd3MgYWJvdXQgaXQuIEVycm9ycyBtZWFuCiAJICogZGVhdGguCiAJICovCi0JQ29ubmVj dERhdGFiYXNlKGZvdXQsICZkb3B0LmNwYXJhbXMsIGZhbHNlKTsKKwlDb25uZWN0RGF0YWJhc2VB aHgoZm91dCwgJmRvcHQuY3BhcmFtcywgZmFsc2UpOwogCXNldHVwX2Nvbm5lY3Rpb24oZm91dCwg ZHVtcGVuY29kaW5nLCBkdW1wc25hcHNob3QsIHVzZV9yb2xlKTsKIAogCS8qCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBh bGwuYwppbmRleCAyOTM1Y2FjMmM0Ni4uNDU1MTAzZTM4YmMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpA QCAtMjQsMTEgKzI0LDExIEBACiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgog I2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgor I2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUg ImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUg ImdldG9wdF9sb25nLmgiCi0jaW5jbHVkZSAicGdfYmFja3VwLmgiCiAKIC8qIHZlcnNpb24gc3Ry aW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lP TlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIKQEAgLTcxLDIxICs3 MSwxNCBAQCBzdGF0aWMgdm9pZCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJ CQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0 IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKm9iam5hbWUsCiAJCQkJCQkJIFBRRXhwQnVmZmVy IGJ1ZmZlcik7Ci1zdGF0aWMgUEdjb25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJu YW1lLAotCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLCBjb25zdCBjaGFy ICpwZ2hvc3QsCi0JCQkJCQkJICAgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3Vz ZXIsCi0JCQkJCQkJICAgdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJy b3IpOwotc3RhdGljIGNoYXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRz LCBjb25zdCBjaGFyICoqdmFsdWVzKTsKLXN0YXRpYyBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5KFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1h bmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBhbmRf ZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMs CiAJCQkJCQkJCSAgIFNpbXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRf ZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpw YXR0ZXJuKTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRIXTsKLXN0YXRpYyBj b25zdCBjaGFyICpwcm9nbmFtZTsKIHN0YXRpYyBQUUV4cEJ1ZmZlciBwZ2R1bXBvcHRzOwotc3Rh dGljIGNoYXIgKmNvbm5zdHIgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25uc3RyID0gIiI7 CiBzdGF0aWMgYm9vbCBvdXRwdXRfY2xlYW4gPSBmYWxzZTsKIHN0YXRpYyBib29sIHNraXBfYWNs cyA9IGZhbHNlOwogc3RhdGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtMTI2LDggKzExOSw2 IEBAIHN0YXRpYyBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CiBzdGF0aWMgU2ltcGxlU3RyaW5nTGlz dCBkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9Owogc3RhdGljIFNpbXBs ZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKIAotI2Rl ZmluZSBleGl0X25pY2VseShjb2RlKSBleGl0KGNvZGUpCi0KIGludAogbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogewpAQCAtNDg3LDE5ICs0NzgsMjIgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCSAqLwogCWlmIChwZ2RiKQogCXsKLQkJY29ubiA9IGNvbm5lY3REYXRhYmFz ZShwZ2RiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCSAgIHByb21w dF9wYXNzd29yZCwgZmFsc2UpOworCQljb25uID0gQ29ubmVjdERhdGFiYXNlKHBnZGIsIGNvbm5z dHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBm YWxzZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbiwgTlVM TCwgTlVMTCk7CiAKIAkJaWYgKCFjb25uKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0 IHRvIGRhdGFiYXNlIFwiJXNcIiIsIHBnZGIpOwogCX0KIAllbHNlCiAJewotCQljb25uID0gY29u bmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIs Ci0JCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSk7CisJCWNvbm4gPSBDb25uZWN0RGF0 YWJhc2UoInBvc3RncmVzIiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwKKwkJCQkJ CQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlLAorCQkJCQkJCSAgIHByb2duYW1lLCAmY29ubnN0 ciwgJnNlcnZlcl92ZXJzaW9uLCBOVUxMLCBOVUxMKTsKIAkJaWYgKCFjb25uKQotCQkJY29ubiA9 IGNvbm5lY3REYXRhYmFzZSgidGVtcGxhdGUxIiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBn dXNlciwKLQkJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCB0cnVlKTsKKwkJCWNvbm4gPSBDb25u ZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIs CisJCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgdHJ1ZSwKKwkJCQkJCQkJICAgcHJvZ25hbWUs ICZjb25uc3RyLCAmc2VydmVyX3ZlcnNpb24sIE5VTEwsIE5VTEwpOwogCiAJCWlmICghY29ubikK IAkJewpAQCAtMTcyMywyNTYgKzE3MTcsNiBAQCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJZGVzdHJveVBRRXhw QnVmZmVyKHNxbCk7CiB9CiAKLS8qCi0gKiBNYWtlIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB3aXRo IHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4KLSAqIGludGVyYWN0aXZlIHBhc3N3b3JkIHByb21w dCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiByZXF1aXJlZC4KLSAqCi0gKiBJZiBmYWlsX29u X2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4gTlVMTCB3aXRob3V0IHByaW50aW5nIGFueSBtZXNz YWdlCi0gKiBvbiBmYWlsdXJlLCBidXQgcHJlc2VydmUgYW55IHByb21wdGVkIHBhc3N3b3JkIGZv ciB0aGUgbmV4dCB0cnkuCi0gKgotICogT24gc3VjY2VzcywgdGhlIGdsb2JhbCB2YXJpYWJsZSAn Y29ubnN0cicgaXMgc2V0IHRvIGEgY29ubmVjdGlvbiBzdHJpbmcKLSAqIGNvbnRhaW5pbmcgdGhl IG9wdGlvbnMgdXNlZC4KLSAqLwotc3RhdGljIFBHY29ubiAqCi1jb25uZWN0RGF0YWJhc2UoY29u c3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywKLQkJCQljb25z dCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAot CQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yKQotewotCVBH Y29ubgkgICAqY29ubjsKLQlib29sCQluZXdfcGFzczsKLQljb25zdCBjaGFyICpyZW1vdGV2ZXJz aW9uX3N0cjsKLQlpbnQJCQlteV92ZXJzaW9uOwotCWNvbnN0IGNoYXIgKiprZXl3b3JkcyA9IE5V TEw7Ci0JY29uc3QgY2hhciAqKnZhbHVlcyA9IE5VTEw7Ci0JUFFjb25uaW5mb09wdGlvbiAqY29u bl9vcHRzID0gTlVMTDsKLQlzdGF0aWMgY2hhciAqcGFzc3dvcmQgPSBOVUxMOwotCi0JaWYgKHBy b21wdF9wYXNzd29yZCA9PSBUUklfWUVTICYmICFwYXNzd29yZCkKLQkJcGFzc3dvcmQgPSBzaW1w bGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOwotCi0JLyoKLQkgKiBTdGFydCB0aGUgY29u bmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQot CSAqIGJhY2tlbmQuCi0JICovCi0JZG8KLQl7Ci0JCWludAkJCWFyZ2NvdW50ID0gNjsKLQkJUFFj b25uaW5mb09wdGlvbiAqY29ubl9vcHQ7Ci0JCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOwotCQlp bnQJCQlpID0gMDsKLQotCQlmcmVlKGtleXdvcmRzKTsKLQkJZnJlZSh2YWx1ZXMpOwotCQlQUWNv bm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0JCS8qCi0JCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9u IGluZm8gaW5wdXRzIGdpdmVuIGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKLQkJICogYW5k IG90aGVyIG9wdGlvbnMuICBFeHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0 aGUKLQkJICogY29ubmVjdGlvbiBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMo KSB3b3VsZCBpbnRlcnByZXQKLQkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25u ZWN0aW9uIHN0cmluZy4KLQkJICovCi0JCWlmIChjb25uZWN0aW9uX3N0cmluZykKLQkJewotCQkJ Y29ubl9vcHRzID0gUFFjb25uaW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7 Ci0JCQlpZiAoY29ubl9vcHRzID09IE5VTEwpCi0JCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7 Ci0KLQkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5V TEw7IGNvbm5fb3B0KyspCi0JCQl7Ci0JCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBj b25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYKLQkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3Jk LCAiZGJuYW1lIikgIT0gMCkKLQkJCQkJYXJnY291bnQrKzsKLQkJCX0KLQotCQkJa2V5d29yZHMg PSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOwotCQkJdmFs dWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7Ci0KLQkJ CWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNv bm5fb3B0KyspCi0JCQl7Ci0JCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29w dC0+dmFsWzBdICE9ICdcMCcgJiYKLQkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJu YW1lIikgIT0gMCkKLQkJCQl7Ci0JCQkJCWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7 Ci0JCQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0LT52YWw7Ci0JCQkJCWkrKzsKLQkJCQl9Ci0JCQl9 Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsg MSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0JCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3Vu dCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKLQkJfQotCi0JCWlmIChwZ2hvc3QpCi0JCXsKLQkJ CWtleXdvcmRzW2ldID0gImhvc3QiOwotCQkJdmFsdWVzW2ldID0gcGdob3N0OwotCQkJaSsrOwot CQl9Ci0JCWlmIChwZ3BvcnQpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gInBvcnQiOwotCQkJdmFs dWVzW2ldID0gcGdwb3J0OwotCQkJaSsrOwotCQl9Ci0JCWlmIChwZ3VzZXIpCi0JCXsKLQkJCWtl eXdvcmRzW2ldID0gInVzZXIiOwotCQkJdmFsdWVzW2ldID0gcGd1c2VyOwotCQkJaSsrOwotCQl9 Ci0JCWlmIChwYXNzd29yZCkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOwotCQkJ dmFsdWVzW2ldID0gcGFzc3dvcmQ7Ci0JCQlpKys7Ci0JCX0KLQkJaWYgKGRibmFtZSkKLQkJewot CQkJa2V5d29yZHNbaV0gPSAiZGJuYW1lIjsKLQkJCXZhbHVlc1tpXSA9IGRibmFtZTsKLQkJCWkr KzsKLQkJfQotCQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKLQkJ dmFsdWVzW2ldID0gcHJvZ25hbWU7Ci0JCWkrKzsKLQotCQluZXdfcGFzcyA9IGZhbHNlOwotCQlj b25uID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7Ci0KLQkJaWYg KCFjb25uKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNc IiIsIGRibmFtZSk7Ci0KLQkJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYm Ci0JCQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKGNvbm4pICYmCi0JCQkhcGFzc3dvcmQgJiYK LQkJCXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCi0JCXsKLQkJCVBRZmluaXNoKGNvbm4pOwot CQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOwotCQkJbmV3 X3Bhc3MgPSB0cnVlOwotCQl9Ci0JfSB3aGlsZSAobmV3X3Bhc3MpOwotCi0JLyogY2hlY2sgdG8g c2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8K LQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCi0JewotCQlpZiAoZmFpbF9v bl9lcnJvcikKLQkJCXBnX2ZhdGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKLQkJZWxz ZQotCQl7Ci0JCQlQUWZpbmlzaChjb25uKTsKLQotCQkJZnJlZShrZXl3b3Jkcyk7Ci0JCQlmcmVl KHZhbHVlcyk7Ci0JCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0JCQlyZXR1cm4gTlVM TDsKLQkJfQotCX0KLQotCS8qCi0JICogT2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIFJlbWVt YmVyIHRoZSBvcHRpb25zIHVzZWQsIGluIHRoZSBmb3JtIG9mIGEKLQkgKiBjb25uZWN0aW9uIHN0 cmluZy4KLQkgKi8KLQljb25uc3RyID0gY29uc3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFsdWVz KTsKLQotCWZyZWUoa2V5d29yZHMpOwotCWZyZWUodmFsdWVzKTsKLQlQUWNvbm5pbmZvRnJlZShj b25uX29wdHMpOwotCi0JLyogQ2hlY2sgdmVyc2lvbiAqLwotCXJlbW90ZXZlcnNpb25fc3RyID0g UFFwYXJhbWV0ZXJTdGF0dXMoY29ubiwgInNlcnZlcl92ZXJzaW9uIik7Ci0JaWYgKCFyZW1vdGV2 ZXJzaW9uX3N0cikKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24iKTsK LQlzZXJ2ZXJfdmVyc2lvbiA9IFBRc2VydmVyVmVyc2lvbihjb25uKTsKLQlpZiAoc2VydmVyX3Zl cnNpb24gPT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBwYXJzZSBzZXJ2ZXIgdmVyc2lvbiBc IiVzXCIiLAotCQkJCSByZW1vdGV2ZXJzaW9uX3N0cik7Ci0KLQlteV92ZXJzaW9uID0gUEdfVkVS U0lPTl9OVU07Ci0KLQkvKgotCSAqIFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5 LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZSBvZgotCSAqIG91ciBvd24gbWFqb3IgdmVy c2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGluIHBnX2R1bXAuYy4pCi0JICovCi0JaWYg KG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNpb24KLQkJJiYgKHNlcnZlcl92ZXJzaW9uIDwgOTAy MDAgfHwKLQkJCShzZXJ2ZXJfdmVyc2lvbiAvIDEwMCkgPiAobXlfdmVyc2lvbiAvIDEwMCkpKQot CXsKLQkJcGdfbG9nX2Vycm9yKCJhYm9ydGluZyBiZWNhdXNlIG9mIHNlcnZlciB2ZXJzaW9uIG1p c21hdGNoIik7Ci0JCXBnX2xvZ19lcnJvcl9kZXRhaWwoInNlcnZlciB2ZXJzaW9uOiAlczsgJXMg dmVyc2lvbjogJXMiLAotCQkJCQkJCXJlbW90ZXZlcnNpb25fc3RyLCBwcm9nbmFtZSwgUEdfVkVS U0lPTik7Ci0JCWV4aXRfbmljZWx5KDEpOwotCX0KLQotCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNv bm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BBVEhfU1FMKSk7Ci0KLQlyZXR1cm4gY29ubjsKLX0K LQotLyogLS0tLS0tLS0tLQotICogQ29uc3RydWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0 aGUgZ2l2ZW4ga2V5d29yZC92YWx1ZSBwYWlycy4gSXQgaXMKLSAqIHVzZWQgdG8gcGFzcyB0aGUg Y29ubmVjdGlvbiBvcHRpb25zIHRvIHRoZSBwZ19kdW1wIHN1YnByb2Nlc3MuCi0gKgotICogVGhl IGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBleGNsdWRlZDoKLSAqCWRibmFtZQkJLSB2YXJpZXMg aW4gZWFjaCBwZ19kdW1wIGludm9jYXRpb24KLSAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2VjdXJl IHRvIHBhc3MgYSBwYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lCi0gKglmYWxsYmFja19hcHBs aWNhdGlvbl9uYW1lIC0gd2UnbGwgbGV0IHBnX2R1bXAgc2V0IGl0Ci0gKiAtLS0tLS0tLS0tCi0g Ki8KLXN0YXRpYyBjaGFyICoKLWNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRz LCBjb25zdCBjaGFyICoqdmFsdWVzKQotewotCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7Ci0JY2hhcgkgICAqY29ubnN0cjsKLQlpbnQJCQlpOwotCWJvb2wJCWZpcnN0a2V5 d29yZCA9IHRydWU7Ci0KLQkvKiBDb25zdHJ1Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcgaW4g a2V5PSd2YWx1ZScgZm9ybWF0LiAqLwotCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7 IGkrKykKLQl7Ci0JCWlmIChzdHJjbXAoa2V5d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8Ci0J CQlzdHJjbXAoa2V5d29yZHNbaV0sICJwYXNzd29yZCIpID09IDAgfHwKLQkJCXN0cmNtcChrZXl3 b3Jkc1tpXSwgImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiKSA9PSAwKQotCQkJY29udGludWU7 Ci0KLQkJaWYgKCFmaXJzdGtleXdvcmQpCi0JCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAn ICcpOwotCQlmaXJzdGtleXdvcmQgPSBmYWxzZTsKLQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAi JXM9Iiwga2V5d29yZHNbaV0pOwotCQlhcHBlbmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsK LQl9Ci0KLQljb25uc3RyID0gcGdfc3RyZHVwKGJ1Zi0+ZGF0YSk7Ci0JZGVzdHJveVBRRXhwQnVm ZmVyKGJ1Zik7Ci0JcmV0dXJuIGNvbm5zdHI7Ci19Ci0KLS8qCi0gKiBSdW4gYSBxdWVyeSwgcmV0 dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIFBH cmVzdWx0ICoKLWV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQot ewotCVBHcmVzdWx0ICAgKnJlczsKLQotCXBnX2xvZ19pbmZvKCJleGVjdXRpbmcgJXMiLCBxdWVy eSk7Ci0KLQlyZXMgPSBQUWV4ZWMoY29ubiwgcXVlcnkpOwotCWlmICghcmVzIHx8Ci0JCVBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQotCXsKLQkJcGdfbG9nX2Vycm9yKCJx dWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCQlwZ19sb2dfZXJyb3Jf ZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOwotCQlQUWZpbmlzaChjb25uKTsKLQkJZXhp dF9uaWNlbHkoMSk7Ci0JfQotCi0JcmV0dXJuIHJlczsKLX0KLQogLyoKICAqIEFzIGFib3ZlIGZv ciBhIFNRTCBjb21tYW5kICh3aGljaCByZXR1cm5zIG5vdGhpbmcpLgogICovCi0tIAoyLjM5LjMK Cg== --0000000000003142180630ac4fde Content-Type: application/octet-stream; name="v24_0002_pg_dumpall-with-non-text_format-18th_march.patch" Content-Disposition: attachment; filename="v24_0002_pg_dumpall-with-non-text_format-18th_march.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8fjwtdq1 RnJvbSAyMTM4ZWZiMjRhMWM4NGQxODJiM2VmNGNlNzhhZTYyMGQ2Y2VmNTZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogV2VkLCAxOSBNYXIgMjAyNSAwMTozMDoxMiArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBwZ19kdW1wYWxsIHdpdGggZGlyZWN0b3J5fHRhcnxjdXN0b20gZm9ybWF0IGFuZCBy ZXN0b3JlCiBpdCBieSBwZ19yZXN0b3JlCgpuZXcgb3B0aW9uIHRvIHBnX2R1bXBhbGw6Ci1GLCAt LWZvcm1hdD1kfHR8Y3xwICBvdXRwdXQgZmlsZSBmb3JtYXQgKCBwbGFpbiB0ZXh0IChkZWZhdWx0 KSkKCkV4OjEgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtLWZpbGU9ZHVtcERpck5h bWUKRXg6MiAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDoz IC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1jdXN0b20gLS1maWxlPWR1bXBEaXJOYW1lCkV4OjQgLi9w Z19kdW1wYWxsIC0tZm9ybWF0PXBsYWluIC0tZmlsZT1kdW1wRGlyTmFtZQoKZHVtcHMgYXJlIGFz OgpnbG9iYWwuZGF0IDo6OiBnbG9iYWwgc3FsIGNvbW1hbmRzIGluIHNpbXBsZSBwbGFpbiBmb3Jt YXQKbWFwLmRhdC4gICA6OjogZGJvaWQgZGJuYW1lIC0tLWVudHJpZXMgZm9yIGFsbCBkYXRhYmFz ZXMgaW4gc2ltcGxlIHRleHQgZm9ybQpkYXRhYmFzZXMuIDo6OgogICAgICBzdWJkaXIgICAgIGRi b2lkMSAgLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1hdAogICAgICBz dWJkaXIgICAgIGRib2lkMi4gLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZv cm1hdAogICAgICAgICAgICAgIGV0YwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTk9URToKaWYgbmVlZGVk LCByZXN0b3JlIHNpbmdsZSBkYiBieSBwYXJ0aWN1bGFyIHN1YmRpcgoKRXg6IC4vcGdfcmVzdG9y ZSAtLWZvcm1hdD1kaXJlY3RvcnkgLWQgcG9zdGdyZXMgZHVtcERpck5hbWUvZGF0YWJhc2VzLzUK ICAgLS0gaGVyZSwgNSBpcyB0aGUgZGJvaWQgb2YgcG9zdGdyZXMgZGIKICAgLS0gdG8gZ2V0IGRi b2lkLCByZWZlciBkYm5hbWUgaW4gbWFwLmZpbGUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5ldyBvcHRp b25zIHRvIHBnX3Jlc3RvcmU6Ci1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBv bmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXMKLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRF Uk4gICBleGNsdWRlIGRhdGFiYXNlIHdob3NlIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuCgpXaGVuIHdl IGdpdmUgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uLCB0aGVuIG9ubHkgcmVzdG9yZSBnbG9iYWxz LCBubyBkYiByZXN0b3JpbmcuCgpEZXNpZ246CldoZW4gLS1mb3JtYXQ9ZHx0fGMgaXMgc3BlY2lm aWVkIGFuZCB0aGVyZSBpcyBubyB0b2MuZGF0IGluIG1haW4gZGlyZWN0b3J5LCB0aGVuIGNoZWNr CmZvciBnbG9iYWwuZGF0IHRvIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4gSWYgZ2xvYmFsLmRhdCBm aWxlIGlzIGV4aXN0IGluIGRpcmVjdG9yeSwKdGhlbiBmaXJzdCByZXN0b3JlIGFsbCBnbG9iYWxz IGZyb20gZ2xvYmFsLmRhdCBhbmQgdGhlbiByZXN0b3JlIGFsbCBkYXRhYmFzZXMgb25lIGJ5IG9u ZQpmcm9tIG1hcC5kYXQgbGlzdCAoaWYgZXhpc3QpCgpmb3IgLS1leGNsdWRlLWRhdGFiYXNlPVBB VFRFUk4gZm9yIHBnX3Jlc3RvcmUKCmFzIG9mIG5vdywgU0VMRUNUIDEgV0hFUkUgWFhYIE9QRVJB VE9SKHBnX2NhdGFsb2cufikgJ14oUEFUVEVSTikkJyBDT0xMQVRFIHBnX2NhdGFsb2cuZGVmYXVs dAppZiBubyBkYiBjb25uZWN0aW9uLCB0aGVuIFBBVFRFUk49TkFNRSBtYXRjaGluZyBvbmx5Cgpm b3IgZWFjaCBkYXRhYmFzZSwgd2UgYXJlIGNsZWFuaW5nIG9uX2V4aXRfbmljZWx5X2luZGV4IGxp c3QuCgphdCB0aGUgZW5kIG9mIHJlc3RvcmUsIHdlIGFyZSBnaXZpbmcgd2FybmluZyB3aXRoIHRv dGFsIG51bWJlciBvZiBlcnJvcnMgKGluY2x1ZGluZyBnbG9iYWwuZGF0LAphbmQgZWFjaCBkYXRh YmFzZSBlcnJvcnMpIGFuZCBmb3IgZWFjaCBkYXRhYmFzZSwgd2UgYXJlIHByaW50aW5nIHdhcm5p bmcgd2l0aCBkYm5hbWUgYW5kIHRvdGFsCmVycm9ycy4KCnRocmVhZDoKaHR0cHM6Ly93d3cucG9z dGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L0NBS1l0TkFwOXZPdHlkWEwzX3BuR0olMkJUZXRa dE4lM0RGWVNuWlNNQ3FYY2VVM21rSFB4UGclNDBtYWlsLmdtYWlsLmNvbSMwNjY0MzNjYjVhZTAw N2NiZTM1ZmVmZGRmNzk2ZDUyZgotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21s ICAgICB8ICA4MCArKy0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICB8ICA0 MSArLQogc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMgICAgICAgICAgIHwgIDExICstCiBzcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyB8ICAyMCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5oIHwgICAzICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAg ICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYyAgICB8ICAyMiAr LQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5oICAgIHwgICAzICstCiBzcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9w Z19kdW1wYWxsLmMgICAgICAgICB8IDI4MCArKysrKysrLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19y ZXN0b3JlLmMgICAgICAgICB8IDg0NyArKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9i aW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCAgICAgICB8ICAgOSArCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgfCAgIDIgKwogMTQgZmlsZXMgY2hhbmdlZCwgMTI0NiBpbnNl cnRpb25zKCspLCA3OCBkZWxldGlvbnMoLSkKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUg c3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApp bmRleCBhZTVhZmIzYzdkNS4uYzM4OTA2YTFhYWMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9y ZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21s CkBAIC0xNiw3ICsxNiw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5hbWVk aXY+CiAgIDxyZWZuYW1lPnBnX2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJh Y3QgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0 ZXIgaW50byBhIHNjcmlwdCBmaWxlPC9yZWZwdXJwb3NlPgorICA8cmVmcHVycG9zZT5leHRyYWN0 IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVy IGJhc2VkIG9uIHNwZWNpZmllZCBkdW1wIGZvcm1hdCA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1l ZGl2PgogCiAgPHJlZnN5bm9wc2lzZGl2PgpAQCAtMTIxLDcgKzEyMSw4MyBAQCBQb3N0Z3JlU1FM IGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAgICAgICAgU2VuZCBvdXRwdXQgdG8gdGhl IHNwZWNpZmllZCBmaWxlLiAgSWYgdGhpcyBpcyBvbWl0dGVkLCB0aGUKICAgICAgICAgc3RhbmRh cmQgb3V0cHV0IGlzIHVzZWQuCi0gICAgICAgPC9wYXJhPgorICAgICAgICBOb3RlOiBUaGlzIG9w dGlvbiBjYW4gYmUgb21pdHRlZCBvbmx5IHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBp cyBwbGFpbgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1GIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IGZvcm1hdCBvZiBkdW1w IGZpbGVzLiAgSWYgd2Ugd2FudCB0byBkdW1wIGFsbCB0aGUgZGF0YWJhc2VzLAorICAgICAgICB0 aGVuIHBhc3MgdGhpcyBhcyBub24tcGxhaW4gc28gdGhhdCBkdW1wIG9mIGFsbCBkYXRhYmFzZXMg Y2FuIGJlIHRha2VuCisgICAgICAgIGluIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbiBhcmNoaXZl IGZvcm1hdC4KKyAgICAgICAgYnkgZGVmYXVsdCwgdGhpcyBpcyBwbGFpbiBmb3JtYXQuCisKKyAg ICAgICAgSWYgbm9uLXBsYWluIG1vZGUgaXMgcGFzc2VkLCB0aGVuIGdsb2JhbC5kYXQgKGdsb2Jh bCBzcWwgY29tbWFuZHMpIGFuZAorICAgICAgICBtYXAuZGF0KGRib2lkIGFuZCBkYm5hbWVzIGxp c3Qgb2YgYWxsIHRoZSBkYXRhYmFzZXMpIGZpbGVzIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAg QXBhcnQgZnJvbSB0aGVzZSBmaWxlcywgb25lIHN1YmRpcmVjdG9yeSB3aXRoIGRhdGFiYXNlcyBu YW1lIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAgVW5kZXIgdGhpcyBkYXRhYmFzZXMgc3ViZGly ZWN0b3J5LCB0aGVyZSB3aWxsIGJlIGZpbGVzIHdpdGggZGJvaWQgbmFtZSBmb3IgZWFjaAorICAg ICAgICBkYXRhYmFzZSBhbmQgaWYgPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBkaXJlY3Rv cnksIHRoZW4gdG9jLmRhdCBhbmQgb3RoZXIKKyAgICAgICAgZHVtcCBmaWxlcyB3aWxsIGJlIHVu ZGVyIGRib2lkIHN1YmRpcmVjdG9yeS4KKworICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0ZXJhbD48L3Rlcm0+Cisg ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBh IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0 b3JlLiBVbmRlciBkYm9pZAorICAgICAgICAgICBzdWJkaXJlY3RvcnksIHRoaXMgd2lsbCBjcmVh dGUgYSBkaXJlY3Rvcnkgd2l0aCBvbmUgZmlsZSBmb3IgZWFjaCB0YWJsZSBhbmQgbGFyZ2UKKyAg ICAgICAgICAgb2JqZWN0IGJlaW5nIGR1bXBlZCwgcGx1cyBhIHNvLWNhbGxlZCBUYWJsZSBvZiBD b250ZW50cyBmaWxlIGRlc2NyaWJpbmcgdGhlIGR1bXBlZAorICAgICAgICAgICBvYmplY3RzIGlu IGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQgdGhhdCBwZ19yZXN0b3JlIGNhbiByZWFkLiBBIGRp cmVjdG9yeSBmb3JtYXQKKyAgICAgICAgICAgYXJjaGl2ZSBjYW4gYmUgbWFuaXB1bGF0ZWQgd2l0 aCBzdGFuZGFyZCBVbml4IHRvb2xzOyBmb3IgZXhhbXBsZSwgZmlsZXMgaW4gYW4KKyAgICAgICAg ICAgdW5jb21wcmVzc2VkIGFyY2hpdmUgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgZ3ppcCwg bHo0LCBvciB6c3RkIHRvb2xzLiBUaGlzCisgICAgICAgICAgIGZvcm1hdCBpcyBjb21wcmVzc2Vk IGJ5IGRlZmF1bHQgdXNpbmcgZ3ppcCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0 ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAg ICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0aGUgZGVmYXVsdCku CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRl cmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1 dCBpbnRvIHBnX3Jlc3RvcmUuIFRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgIGRpcmVjdG9y eSBvdXRwdXQgZm9ybWF0LCB0aGlzIGlzIHRoZSBtb3N0IGZsZXhpYmxlIG91dHB1dCBmb3JtYXQg aW4gdGhhdCBpdCBhbGxvd3MgbWFudWFsCisgICAgICAgICAgIHNlbGVjdGlvbiBhbmQgcmVvcmRl cmluZyBvZiBhcmNoaXZlZCBpdGVtcyBkdXJpbmcgcmVzdG9yZS4gVGhpcyBmb3JtYXQgaXMgYWxz bworICAgICAgICAgICBjb21wcmVzc2VkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHRhci1m b3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgdGFy IGZvcm1hdCBpcworICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGRpcmVjdG9yeSBmb3Jt YXQ6IGV4dHJhY3RpbmcgYSB0YXItZm9ybWF0IGFyY2hpdmUgcHJvZHVjZXMgYSB2YWxpZAorICAg ICAgICAgICBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmUuIEhvd2V2ZXIsIHRoZSB0YXIgZm9ybWF0 IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24uIEFsc28sCisgICAgICAgICAgIHdoZW4gdXNp bmcgdGFyIGZvcm1hdCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGFibGUgZGF0YSBpdGVtcyBjYW5u b3QgYmUgY2hhbmdlZCBkdXJpbmcgcmVzdG9yZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAg ICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8L3Zhcmlh YmxlbGlzdD4KKyAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJs aXN0ZW50cnk+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggMzUxNDAxODc4MDcuLjRj ZjQ2ZWE5MzMzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMTgsOCArMTgsOSBAQCBQ b3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHJlZm5hbWU+cGdfcmVzdG9yZTwvcmVmbmFtZT4K IAogICA8cmVmcHVycG9zZT4KLSAgIHJlc3RvcmUgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KLSAgIGFyY2hpdmUgZmlsZSBjcmVhdGVkIGJ5 IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4KKyAgIHJlc3RvcmUgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuCisgICBhcmNoaXZl IGZpbGUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisg ICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+CiAgIDwvcmVmcHVycG9zZT4K ICA8L3JlZm5hbWVkaXY+CiAKQEAgLTM3LDkgKzM4LDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgogCiAgIDxwYXJhPgotICAgPGFwcGxp Y2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3Rvcmlu ZyBhCisgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0 eSBmb3IgcmVzdG9yaW5nCiAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ IGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZQotICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJh cHAtcGdkdW1wIi8+IGluIG9uZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKKyAgIGNyZWF0ZWQgYnkg PHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBvcgorICAgPHhyZWYgbGlua2VuZD0iYXBwLXBn LWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAogICAgZm9ybWF0cy4gIEl0 IHdpbGwgaXNzdWUgdGhlIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWNvbnN0cnVjdCB0aGUKICAg IGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVk LiAgVGhlCiAgICBhcmNoaXZlIGZpbGVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3Rv cmU8L2FwcGxpY2F0aW9uPiB0bwpAQCAtMTQwLDYgKzE0Miw4IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICAgICAgICBjb21tYW5kcyB0aGF0IG1lbnRpb24gdGhpcyBkYXRhYmFzZS4KICAg ICAgICAgQWNjZXNzIHByaXZpbGVnZXMgZm9yIHRoZSBkYXRhYmFzZSBpdHNlbGYgYXJlIGFsc28g cmVzdG9yZWQsCiAgICAgICAgIHVubGVzcyA8b3B0aW9uPi0tbm8tYWNsPC9vcHRpb24+IGlzIHNw ZWNpZmllZC4KKyAgICAgICAgPG9wdGlvbj4tLWNyZWF0ZTwvb3B0aW9uPiBpcyByZXF1aXJlZCB3 aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMKKyAgICAgICAgZnJvbSBkdW1wIG9mIDxh cHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCiAgICAgICAgPC9wYXJhPgogCiAg ICAgICAgPHBhcmE+CkBAIC0xNjYsNiArMTcwLDI1IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlv bgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rl cm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIERvIG5vdCByZXN0 b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgTXVsdGlwbGUg cGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUKKyAgICAgICAgPG9w dGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAgICAg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJh bWV0ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0byB0 aGUgc2FtZSBydWxlcyB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNh dGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8eHJl ZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAgIHNvIG11bHRpcGxlIGRh dGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAgICAg IGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUgY2Fy ZWZ1bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVudCBz aGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0 ZXJtPjxvcHRpb24+LWU8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZXhp dC1vbi1lcnJvcjwvb3B0aW9uPjwvdGVybT4KQEAgLTMxNSw2ICszMzgsMTYgQEAgUG9zdGdyZVNR TCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4K IAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwv dGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+ CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJlc3RvcmUgb25seSBn bG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgorICAg ICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAg ICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1JIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAg ICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5p bmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BhcmFsbGVsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwppbmRleCAwODZh ZGNkYzUwMi4uYTM2ZDJhNWJmODQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxl bC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBAIC0zMjYsMTEgKzMyNiwxOCBA QCBnZXRUaHJlYWRMb2NhbFBRRXhwQnVmZmVyKHZvaWQpCiAgKiBwZ19kdW1wIGFuZCBwZ19yZXN0 b3JlIGNhbGwgdGhpcyB0byByZWdpc3RlciB0aGUgY2xlYW51cCBoYW5kbGVyCiAgKiBhcyBzb29u IGFzIHRoZXkndmUgY3JlYXRlZCB0aGUgQXJjaGl2ZUhhbmRsZS4KICAqLwotdm9pZAoraW50CiBv bl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKQogewogCXNodXRkb3duX2luZm8uQUhY ID0gQUhYOwotCW9uX2V4aXRfbmljZWx5KGFyY2hpdmVfY2xvc2VfY29ubmVjdGlvbiwgJnNodXRk b3duX2luZm8pOworCXJldHVybiBvbl9leGl0X25pY2VseShhcmNoaXZlX2Nsb3NlX2Nvbm5lY3Rp b24sICZzaHV0ZG93bl9pbmZvKTsKK30KKwordm9pZAorcmVwbGFjZV9vbl9leGl0X2Nsb3NlX2Fy Y2hpdmUoQXJjaGl2ZSAqQUhYLCBpbnQgaWR4KQoreworCXNodXRkb3duX2luZm8uQUhYID0gQUhY OworCXNldF9vbl9leGl0X25pY2VseV9lbnRyeShhcmNoaXZlX2Nsb3NlX2Nvbm5lY3Rpb24sICZz aHV0ZG93bl9pbmZvLCBpZHgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IGM2OGEyMTAy N2ZhLi44OTQ1OWRlZGM0YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5o CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzExLDcgKzMxMSw3IEBAIGV4 dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBEdW1wT3B0aW9ucyAqZG9w dCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nlc3NBcmNoaXZlUmVzdG9y ZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJj aGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9v bCBhcHBlbmRfZGF0YSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJu IEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZl Rm9ybWF0IGZtdCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggM2ZkMjgx ODIyM2MuLmUyMmE4ODEwYjQ1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBA IC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpB SCk7CiBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMg dm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRp bWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25z dCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWMpOworCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjLCBib29sIGFwcGVuZF9kYXRhKTsKIHN0YXRpYyBDb21wcmVzc0ZpbGVI YW5kbGUgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgUmVzdG9y ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1 dCk7CiAKQEAgLTMzNyw5ICszMzcsMTQgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhB cmNoaXZlICpBSFgpCiAJCVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9CiAKLS8qIFB1YmxpYyAq LworLyoKKyAqIFJlc3RvcmVBcmNoaXZlCisgKgorICogSWYgYXBwZW5kX2RhdGEgaXMgc2V0LCB0 aGVuIGFwcGVuZCBkYXRhIGludG8gZmlsZSBhcyB3ZSBhcmUgcmVzdG9yaW5nIGR1bXAKKyAqIG9m IG11bHRpcGxlIGRhdGFiYXNlcyB3aGljaCB3YXMgdGFrZW4gYnkgcGdfZHVtcGFsbC4KKyAqLwog dm9pZAotUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFyY2hpdmUoQXJjaGl2 ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hp dmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0 OwpAQCAtNDU2LDcgKzQ2MSw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkgKi8K IAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUgfHwgcm9wdC0+Y29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJU2V0T3V0 cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91 dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMsIGFwcGVuZF9k YXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgZHVtcFxu LS1cblxuIik7CiAKQEAgLTEyOTIsNyArMTI5Nyw3IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZl ICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUpCi0J CVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjKTsKKwkJ U2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMsIGZhbHNl KTsKIAogCWlmIChzdHJmdGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQR0RVTVBf U1RSRlRJTUVfRk1ULAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0gMCkKQEAg LTE2NzEsNyArMTY3Niw4IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNoYXIgKmZt dCwuLi4pCiAKIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0 IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Npb25fc3BlYykKKwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwpAQCAtMTY5MSw3ICsxNjk3LDcgQEAgU2V0T3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCWZu ID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJ aWYgKGFwcGVuZF9kYXRhIHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQogCQltb2RlID0g UEdfQklOQVJZX0E7CiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmgKaW5kZXggYTIwNjRmNDcxZWQuLmFlNDMzMTMyNDM1IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zODUsNyArMzg1LDggQEAgc3RydWN0IF90 b2NFbnRyeQogfTsKIAogZXh0ZXJuIGludAlwYXJhbGxlbF9yZXN0b3JlKEFyY2hpdmVIYW5kbGUg KkFILCBUb2NFbnRyeSAqdGUpOwotZXh0ZXJuIHZvaWQgb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFy Y2hpdmUgKkFIWCk7CitleHRlcm4gaW50IG9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpB SFgpOworZXh0ZXJuIHZvaWQgcmVwbGFjZV9vbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAq QUhYLCBpbnQgaWR4KTsKIAogZXh0ZXJuIHZvaWQgd2Fybl9vcl9leGl0X2hvcnJpYmx5KEFyY2hp dmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVfcHJpbnRmKDIs IDMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCBiNWJhM2I0NmRkOS4uZDk0ZDBkZTJh NWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtODI2LDcgKzgyNiw3IEBAIF9DbG9zZUFy Y2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXNhdlZlcmJvc2UgPSBBSC0+cHVibGljLnZlcmJv c2U7CiAJCUFILT5wdWJsaWMudmVyYm9zZSA9IDA7CiAKLQkJUmVzdG9yZUFyY2hpdmUoKEFyY2hp dmUgKikgQUgpOworCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCwgZmFsc2UpOwogCiAJ CVNldEFyY2hpdmVPcHRpb25zKChBcmNoaXZlICopIEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF91dGlscy5jCmluZGV4IDc5YWVjNWY1MTU4Li41OWVjZTI5OTlhOCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCisrKyBiL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYwpAQCAtNjEsMTQgKzYxLDI2IEBAIHNldF9kdW1w X3NlY3Rpb24oY29uc3QgY2hhciAqYXJnLCBpbnQgKmR1bXBTZWN0aW9ucykKIAogCiAvKiBSZWdp c3RlciBhIGNhbGxiYWNrIHRvIGJlIHJ1biB3aGVuIGV4aXRfbmljZWx5IGlzIGludm9rZWQuICov Ci12b2lkCitpbnQKIG9uX2V4aXRfbmljZWx5KG9uX2V4aXRfbmljZWx5X2NhbGxiYWNrIGZ1bmN0 aW9uLCB2b2lkICphcmcpCiB7Ci0JaWYgKG9uX2V4aXRfbmljZWx5X2luZGV4ID49IE1BWF9PTl9F WElUX05JQ0VMWSkKLQkJcGdfZmF0YWwoIm91dCBvZiBvbl9leGl0X25pY2VseSBzbG90cyIpOwot CW9uX2V4aXRfbmljZWx5X2xpc3Rbb25fZXhpdF9uaWNlbHlfaW5kZXhdLmZ1bmN0aW9uID0gZnVu Y3Rpb247Ci0Jb25fZXhpdF9uaWNlbHlfbGlzdFtvbl9leGl0X25pY2VseV9pbmRleF0uYXJnID0g YXJnOworCXNldF9vbl9leGl0X25pY2VseV9lbnRyeShmdW5jdGlvbiwgYXJnLCBvbl9leGl0X25p Y2VseV9pbmRleCk7CiAJb25fZXhpdF9uaWNlbHlfaW5kZXgrKzsKKworCXJldHVybiAob25fZXhp dF9uaWNlbHlfaW5kZXggLSAxKTsKK30KKwordm9pZAorc2V0X29uX2V4aXRfbmljZWx5X2VudHJ5 KG9uX2V4aXRfbmljZWx5X2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICphcmcsIGludCBpKQorewor CWlmIChpID49IE1BWF9PTl9FWElUX05JQ0VMWSkKKwkJcGdfZmF0YWwoIm91dCBvZiBvbl9leGl0 X25pY2VseSBzbG90cyIpOworCisJaWYgKGkgPiBvbl9leGl0X25pY2VseV9pbmRleCkKKwkJcGdf ZmF0YWwoIm5vIGVudHJ5IGV4aXN0cyBvbiAlZCBpbmRleCBpbnRvIG9uX2V4aXRfbmljZWx5IHNs b3RzIiwgaSk7CisKKwlvbl9leGl0X25pY2VseV9saXN0W2ldLmZ1bmN0aW9uID0gZnVuY3Rpb247 CisJb25fZXhpdF9uaWNlbHlfbGlzdFtpXS5hcmcgPSBhcmc7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmggYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX3V0aWxzLmgKaW5kZXggYmEwNDIwMTY4NzkuLmJiZWZkYzExMmY1IDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF91dGlscy5oCkBAIC0yOCw3ICsyOCw4IEBAIHR5cGVkZWYgdm9pZCAoKm9uX2V4 aXRfbmljZWx5X2NhbGxiYWNrKSAoaW50IGNvZGUsIHZvaWQgKmFyZyk7CiBleHRlcm4gY29uc3Qg Y2hhciAqcHJvZ25hbWU7CiAKIGV4dGVybiB2b2lkIHNldF9kdW1wX3NlY3Rpb24oY29uc3QgY2hh ciAqYXJnLCBpbnQgKmR1bXBTZWN0aW9ucyk7Ci1leHRlcm4gdm9pZCBvbl9leGl0X25pY2VseShv bl9leGl0X25pY2VseV9jYWxsYmFjayBmdW5jdGlvbiwgdm9pZCAqYXJnKTsKK2V4dGVybiBpbnQg b25fZXhpdF9uaWNlbHkob25fZXhpdF9uaWNlbHlfY2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmFy Zyk7CitleHRlcm4gdm9pZCBzZXRfb25fZXhpdF9uaWNlbHlfZW50cnkob25fZXhpdF9uaWNlbHlf Y2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmFyZywgaW50IGlkeCk7CiBwZ19ub3JldHVybiBleHRl cm4gdm9pZCBleGl0X25pY2VseShpbnQgY29kZSk7CiAKIC8qIEluIHBnX2R1bXAsIHdlIG1vZGlm eSBwZ19mYXRhbCB0byBjYWxsIGV4aXRfbmljZWx5IGluc3RlYWQgb2YgZXhpdCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMKaW5kZXggZjgxNjY3NDAzZGMuLjc2Zjc0YmExNjY2IDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTExODgs NyArMTE4OCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5vdy4K IAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVzdG9y ZUFyY2hpdmUoZm91dCwgZmFsc2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXBhbGwuYwppbmRleCA0NTUxMDNlMzhiYy4uMWE1NzA3Nzk4NmIgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwu YwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1 ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgog CkBAIC02NCw5ICs2NSwxMCBAQCBzdGF0aWMgdm9pZCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpj b25uKTsKIHN0YXRpYyB2b2lkIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGlj IHZvaWQgZHJvcERCcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFVzZXJDb25maWco UEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSk7Ci1zdGF0aWMgdm9pZCBkdW1wRGF0 YWJhc2VzKFBHY29ubiAqY29ubik7CitzdGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9pZCBkdW1wVGlt ZXN0YW1wKGNvbnN0IGNoYXIgKm1zZyk7Ci1zdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFy ICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKTsKK3N0YXRpYyBpbnQJcnVuUGdEdW1w KGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsCisJCWNoYXIgKmRi ZmlsZSwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9pZCBidWlsZFNo U2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1l LCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIg Km9iam5hbWUsCkBAIC03NSw2ICs3Nyw4IEBAIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5kKFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhwYW5kX2RibmFt ZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAogCQkJ CQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBzdGF0aWMgdm9pZCByZWFkX2R1bXBh bGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVy bik7CitzdGF0aWMgdm9pZCBjcmVhdGVfb3Jfb3Blbl9kaXIoY29uc3QgY2hhciAqZGlybmFtZSk7 CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0 KTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRIXTsKIHN0YXRpYyBQUUV4cEJ1 ZmZlciBwZ2R1bXBvcHRzOwpAQCAtMTA0LDcgKzEwOCw3IEBAIHN0YXRpYyBpbnQJbm9fc3Vic2Ny aXB0aW9ucyA9IDA7CiBzdGF0aWMgaW50CW5vX3RvYXN0X2NvbXByZXNzaW9uID0gMDsKIHN0YXRp YyBpbnQJbm9fdW5sb2dnZWRfdGFibGVfZGF0YSA9IDA7CiBzdGF0aWMgaW50CW5vX3JvbGVfcGFz c3dvcmRzID0gMDsKLXN0YXRpYyBpbnQJc2VydmVyX3ZlcnNpb247CitzdGF0aWMgaW50IHNlcnZl cl92ZXJzaW9uOwogc3RhdGljIGludAlsb2FkX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IDA7CiBzdGF0 aWMgaW50CW9uX2NvbmZsaWN0X2RvX25vdGhpbmcgPSAwOwogc3RhdGljIGludAlzdGF0aXN0aWNz X29ubHkgPSAwOwpAQCAtMTQzLDYgKzE0Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJeyJwYXNzd29yZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAogCQl7Im5vLXByaXZp bGVnZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3gnfSwKIAkJeyJuby1hY2wiLCBub19hcmd1bWVu dCwgTlVMTCwgJ3gnfSwKKwkJeyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0Yn fSwKIAogCQkvKgogCQkgKiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZG9uJ3QgaGF2ZSBhbiBlcXVp dmFsZW50IHNob3J0IG9wdGlvbiBsZXR0ZXIKQEAgLTE4OSw2ICsxOTQsOCBAQCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7CiAJY2hhcgkgICAqdXNl X3JvbGUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmR1bXBlbmNvZGluZyA9IE5VTEw7CisJQXJjaGl2 ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWNvbnN0IGNoYXIgKmZvcm1hdE5h bWUgPSAicCI7CiAJdHJpdmFsdWUJcHJvbXB0X3Bhc3N3b3JkID0gVFJJX0RFRkFVTFQ7CiAJYm9v bAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CkBAIC0y MzgsNyArMjQ1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJcGdkdW1wb3B0 cyA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdj LCBhcmd2LCAiYWNkOkU6ZjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0 aW5kZXgpKSAhPSAtMSkKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNk OkU6ZjpGOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9 IC0xKQogCXsKIAkJc3dpdGNoIChjKQogCQl7CkBAIC0yNjYsNyArMjczLDkgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMs ICIgLWYgIik7CiAJCQkJYXBwZW5kU2hlbGxTdHJpbmcocGdkdW1wb3B0cywgZmlsZW5hbWUpOwog CQkJCWJyZWFrOwotCisJCQljYXNlICdGJzoKKwkJCQlmb3JtYXROYW1lID0gcGdfc3RyZHVwKG9w dGFyZyk7CisJCQkJYnJlYWs7CiAJCQljYXNlICdnJzoKIAkJCQlnbG9iYWxzX29ubHkgPSB0cnVl OwogCQkJCWJyZWFrOwpAQCAtNDE1LDYgKzQyNCwyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJCWV4aXRfbmljZWx5KDEpOwogCX0KIAorCS8qIEdldCBmb3JtYXQgZm9yIGR1bXAu ICovCisJYXJjaER1bXBGb3JtYXQgPSBwYXJzZUR1bXBGb3JtYXQoZm9ybWF0TmFtZSk7CisKKwkv KgorCSAqIElmIG5vbi1wbGFpbiBmb3JtYXQgaXMgc3BlY2lmaWVkIHRoZW4gd2UgbXVzdCBwcm92 aWRlIHRoZQorCSAqIGZpbGUgbmFtZSB0byBjcmVhdGUgb25lIG1haW4gZGlyZWN0b3J5LgorCSAq LworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCAmJgorCQkJKCFmaWxlbmFtZSB8fCBz dHJjbXAoZmlsZW5hbWUsICIiKSA9PSAwKSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9ucyAt Ri8tLWZvcm1hdD1kfGN8dCByZXF1aXJlcyBvcHRpb24gLWYvLS1maWxlIHdpdGggbm9uLWVtcHR5 IHN0cmluZyIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1v cmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkv KgogCSAqIElmIHBhc3N3b3JkIHZhbHVlcyBhcmUgbm90IHJlcXVpcmVkIGluIHRoZSBkdW1wLCBz d2l0Y2ggdG8gdXNpbmcKIAkgKiBwZ19yb2xlcyB3aGljaCBpcyBlcXVhbGx5IHVzZWZ1bCwganVz dCBtb3JlIGxpa2VseSB0byBoYXZlIHVucmVzdHJpY3RlZApAQCAtNDcxLDYgKzQ5NSwzMyBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHN0YXRpc3RpY3Nfb25seSkKIAkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtLXN0YXRpc3RpY3Mtb25seSIpOwogCisJ LyoKKwkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBz dGRvdXQuICBJZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNyZWF0ZSBuZXcgZGlyZWN0b3J5IGFuZCBn bG9iYWwuZGF0IGZpbGUuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQor CXsKKwkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhdOworCisJCS8qIENyZWF0ZSBuZXcgZGlyZWN0 b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5LiAqLworCQljcmVhdGVf b3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCisJCXNucHJpbnRmKHRvY19wYXRoLCBNQVhQR1BBVEgs ICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOworCisJCU9QRiA9IGZvcGVuKHRvY19wYXRoLCBQ R19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGds b2JhbC5kYXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKwllbHNlIGlmIChmaWxl bmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7CisJCWlmICgh T1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0i LAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9QRiA9IHN0ZG91dDsKKwogCS8qCiAJ ICogSWYgdGhlcmUgd2FzIGEgZGF0YWJhc2Ugc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUs IHVzZSB0aGF0LAogCSAqIG90aGVyd2lzZSB0cnkgdG8gY29ubmVjdCB0byBkYXRhYmFzZSAicG9z dGdyZXMiLCBhbmQgZmFpbGluZyB0aGF0CkBAIC01MTAsMTkgKzU2MSw2IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAlleHBhbmRfZGJuYW1lX3BhdHRlcm5zKGNvbm4sICZkYXRhYmFz ZV9leGNsdWRlX3BhdHRlcm5zLAogCQkJCQkJICAgJmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwog Ci0JLyoKLQkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVz ZSBzdGRvdXQKLQkgKi8KLQlpZiAoZmlsZW5hbWUpCi0JewotCQlPUEYgPSBmb3BlbihmaWxlbmFt ZSwgUEdfQklOQVJZX1cpOwotCQlpZiAoIU9QRikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJIGZpbGVuYW1lKTsKLQl9Ci0JZWxzZQot CQlPUEYgPSBzdGRvdXQ7Ci0KIAkvKgogCSAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5nIGlmIHJl cXVlc3RlZC4KIAkgKi8KQEAgLTYyMiw3ICs2NjAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJfQogCiAJaWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxl c3BhY2VzX29ubHkpCi0JCWR1bXBEYXRhYmFzZXMoY29ubik7CisJCWR1bXBEYXRhYmFzZXMoY29u biwgYXJjaER1bXBGb3JtYXQpOwogCiAJUFFmaW5pc2goY29ubik7CiAKQEAgLTYzNSw3ICs2NzMs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWZjbG9zZShPUEYpOwogCiAJCS8q IHN5bmMgdGhlIHJlc3VsdGluZyBmaWxlLCBlcnJvcnMgYXJlIG5vdCBmYXRhbCAqLwotCQlpZiAo ZG9zeW5jKQorCQlpZiAoZG9zeW5jICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJ CQkodm9pZCkgZnN5bmNfZm5hbWUoZmlsZW5hbWUsIGZhbHNlKTsKIAl9CiAKQEAgLTY0NiwxMiAr Njg0LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHN0YXRpYyB2b2lkCiBoZWxw KHZvaWQpCiB7Ci0JcHJpbnRmKF8oIiVzIGV4dHJhY3RzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBj bHVzdGVyIGludG8gYW4gU1FMIHNjcmlwdCBmaWxlLlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50 ZihfKCIlcyBleHRyYWN0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBiYXNlZCBvbiBz cGVjaWZpZWQgZHVtcCBmb3JtYXQuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdl OlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uXG4iKSwgcHJvZ25hbWUpOwogCiAJ cHJpbnRmKF8oIlxuR2VuZXJhbCBvcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIgIC1mLCAtLWZp bGU9RklMRU5BTUUgICAgICAgICAgb3V0cHV0IGZpbGUgbmFtZVxuIikpOworCXByaW50ZihfKCIg IC1GLCAtLWZvcm1hdD1jfGR8dHxwICAgICAgICAgb3V0cHV0IGZpbGUgZm9ybWF0IChjdXN0b20s IGRpcmVjdG9yeSwgdGFyLFxuIgorCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGxhaW4gdGV4dCAoZGVmYXVsdCkpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0tdmVyYm9zZSAg ICAgICAgICAgICAgICB2ZXJib3NlIG1vZGVcbiIpKTsKIAlwcmludGYoXygiICAtViwgLS12ZXJz aW9uICAgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRc biIpKTsKIAlwcmludGYoXygiICAtLWxvY2std2FpdC10aW1lb3V0PVRJTUVPVVQgIGZhaWwgYWZ0 ZXIgd2FpdGluZyBUSU1FT1VUIGZvciBhIHRhYmxlIGxvY2tcbiIpKTsKQEAgLTE1NTUsMTAgKzE1 OTUsMTMgQEAgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sCiAgKiBEdW1wIGNv bnRlbnRzIG9mIGRhdGFiYXNlcy4KICAqLwogc3RhdGljIHZvaWQKLWR1bXBEYXRhYmFzZXMoUEdj b25uICpjb25uKQorZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJj aER1bXBGb3JtYXQpCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7CisJY2hhcgkJZGJf c3ViZGlyW01BWFBHUEFUSF07CisJY2hhcgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOworCUZJTEUg ICAgICAgKm1hcF9maWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2Vk IG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE1 NzIsNyArMTYxNSw3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCSAqIGRvZXNuJ3Qg aGF2ZSBzb21lIGZhaWx1cmUgbW9kZSB3aXRoIC0tY2xlYW4uCiAJICovCiAJcmVzID0gZXhlY3V0 ZVF1ZXJ5KGNvbm4sCi0JCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSAiCisJCQkJCSAgICJTRUxFQ1Qg ZGF0bmFtZSwgb2lkICIKIAkJCQkJICAgIkZST00gcGdfZGF0YWJhc2UgZCAiCiAJCQkJCSAgICJX SEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5saW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRF UiBCWSAoZGF0bmFtZSA8PiAndGVtcGxhdGUxJyksIGRhdG5hbWUiKTsKQEAgLTE1ODAsOSArMTYy MywzMyBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAlpZiAoUFFudHVwbGVzKHJlcykg PiAwKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNcbi0tXG5cbiIpOwogCisJLyoK KwkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1c3RvbSBmb3JtYXQgaXMgc3BlY2lmaWVkIHRoZW4gY3Jl YXRlIGEgc3ViZGlyZWN0b3J5CisJICogdW5kZXIgdGhlIG1haW4gZGlyZWN0b3J5IGFuZCBlYWNo IGRhdGFiYXNlIGR1bXAgZmlsZSBzdWJkaXJlY3Rvcnkgd2lsbAorCSAqIGJlIGNyZWF0ZWQgdW5k ZXIgdGhlIHN1YmRpcmVjdG9yeSBpbiBhcmNoaXZlIG1vZGUgYXMgcGVyIHNpbmdsZSBkYiBwZ19k dW1wLgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNoYXIJ bWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCisJCXNucHJpbnRmKGRiX3N1YmRpciwgTUFYUEdQ QVRILCAiJXMvZGF0YWJhc2VzIiwgZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBhIHN1YmRpcmVj dG9yeSB3aXRoICdkYXRhYmFzZXMnIG5hbWUgdW5kZXIgbWFpbiBkaXJlY3RvcnkuICovCisJCWlm IChta2RpcihkYl9zdWJkaXIsIDA3NTUpICE9IDApCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNy ZWF0ZSBzdWJkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkJc25wcmludGYo bWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsKKworCQkv KiBDcmVhdGUgYSBtYXAgZmlsZSAodG8gc3RvcmUgZGJvaWQgYW5kIGRibmFtZSkgKi8KKwkJbWFw X2ZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7CisJCWlmICghbWFwX2Zp bGUpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gbWFwIGZpbGU6ICVzIiwgc3RyZXJyb3Io ZXJybm8pKTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7 CiAJCWNoYXIJICAgKmRibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKKwkJY2hhcgkgICAq b2lkID0gUFFnZXR2YWx1ZShyZXMsIGksIDEpOwogCQljb25zdCBjaGFyICpjcmVhdGVfb3B0czsK IAkJaW50CQkJcmV0OwogCkBAIC0xNTk3LDYgKzE2NjQsMTggQEAgZHVtcERhdGFiYXNlcyhQR2Nv bm4gKmNvbm4pCiAJCQljb250aW51ZTsKIAkJfQogCisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm9u LXBsYWluIGR1bXAgZm9ybWF0LCB0aGVuIGFwcGVuZCBkYm9pZCBhbmQgZGJuYW1lIHRvCisJCSAq IHRoZSBtYXAuZGF0IGZpbGUuCisJCSAqLworCQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51 bGwpCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVz XCIiLCBkYl9zdWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBmb3IgZGJv aWQgYW5kIGRibmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAl c1xuIiwgb2lkLCBwZ19zdHJkdXAoZGJuYW1lKSk7CisJCX0KKwogCQlwZ19sb2dfaW5mbygiZHVt cGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCiAJCWZwcmludGYoT1BGLCAiLS1cbi0t IERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBkYm5hbWUpOwpAQCAtMTYxNSw5ICsxNjk0 LDE3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQkJCWNyZWF0ZV9vcHRzID0gIi0t Y2xlYW4gLS1jcmVhdGUiOwogCQkJZWxzZQogCQkJewotCQkJCWNyZWF0ZV9vcHRzID0gIiI7CiAJ CQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVz dCAqLwotCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJ aWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCXsKKwkJCQkJY3JlYXRlX29wdHMg PSAiIjsKKwkJCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJ CQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyogRHVtcGluZyBhbGwgZGF0YWJhc2VzIHNvIGFk ZCAtLWNyZWF0ZSBvcHRpb24uICovCisJCQkJCWNyZWF0ZV9vcHRzID0gIi0tY3JlYXRlIjsKKwkJ CQl9CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAtMTYyNiwxOSArMTcxMywzMCBAQCBkdW1wRGF0YWJh c2VzKFBHY29ubiAqY29ubikKIAkJaWYgKGZpbGVuYW1lKQogCQkJZmNsb3NlKE9QRik7CiAKLQkJ cmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMpOworCQlyZXQgPSBydW5QZ0R1bXAo ZGJuYW1lLCBjcmVhdGVfb3B0cywgZGJmaWxlcGF0aCwgYXJjaER1bXBGb3JtYXQpOwogCQlpZiAo cmV0ICE9IDApCiAJCQlwZ19mYXRhbCgicGdfZHVtcCBmYWlsZWQgb24gZGF0YWJhc2UgXCIlc1wi LCBleGl0aW5nIiwgZGJuYW1lKTsKIAogCQlpZiAoZmlsZW5hbWUpCiAJCXsKLQkJCU9QRiA9IGZv cGVuKGZpbGVuYW1lLCBQR19CSU5BUllfQSk7CisJCQljaGFyCXRvY19wYXRoW01BWFBHUEFUSF07 CisKKwkJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJCQlzbnByaW50Zih0b2Nf cGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGZpbGVuYW1lKTsKKwkJCWVsc2UKKwkJ CQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBmaWxlbmFtZSk7CisKKwkJCU9Q RiA9IGZvcGVuKHRvY19wYXRoLCBQR19CSU5BUllfQSk7CiAJCQlpZiAoIU9QRikKIAkJCQlwZ19m YXRhbCgiY291bGQgbm90IHJlLW9wZW4gdGhlIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLAotCQkJ CQkJIGZpbGVuYW1lKTsKKwkJCQkJCSB0b2NfcGF0aCk7CiAJCX0KIAl9CiAKKwkvKiBDbG9zZSBt YXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJZmNsb3NlKG1h cF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAtMTY0OCw3ICsxNzQ2LDggQEAgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4gcGdfZHVtcCBvbiBkYm5hbWUsIHdpdGgg c3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJ1blBnRHVtcChjb25zdCBjaGFy ICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQorcnVuUGdEdW1wKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSwKKwkJQXJjaGl2 ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkKIHsKIAlQUUV4cEJ1ZmZlckRhdGEgY29ubnN0cmJ1ZjsK IAlQUUV4cEJ1ZmZlckRhdGEgY21kOwpAQCAtMTY1NywxNyArMTc1NiwzNiBAQCBydW5QZ0R1bXAo Y29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKIAlpbml0UFFFeHBC dWZmZXIoJmNvbm5zdHJidWYpOwogCWluaXRQUUV4cEJ1ZmZlcigmY21kKTsKIAotCXByaW50ZlBR RXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKLQkJCQkJICBwZ2R1 bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkvKgotCSAqIElmIHdlIGhhdmUgYSBmaWxl bmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKLQkgKiBmb3Jt YXQuCisJICogSWYgdGhpcyBpcyBub24tcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGZp bGUgbmFtZSBhbmQgZHVtcAorCSAqIGZvcm1hdCB0byB0aGUgcGdfZHVtcCBjb21tYW5kIHRvIGdl dCBhcmNoaXZlIGR1bXAuCiAJICovCi0JaWYgKGZpbGVuYW1lKQotCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiIC1GYSAiKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJ eworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiIC1mICVzICVzIiwgcGdfZHVtcF9i aW4sCisJCQkJCQkgIGRiZmlsZSwgY3JlYXRlX29wdHMpOworCisJCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoRGlyZWN0b3J5KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1m b3JtYXQ9ZGlyZWN0b3J5ICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3Vz dG9tKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9Y3VzdG9tICIp OworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9dGFyICIpOworCX0KIAllbHNlCi0JCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNt ZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJcGdkdW1wb3B0cy0+ZGF0YSwg Y3JlYXRlX29wdHMpOworCisJCS8qCisJCSogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhl IHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAorCQkqIGZvcm1hdC4KKwkJKi8KKwkJ aWYgKGZpbGVuYW1lKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJ CWVsc2UKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCX0KIAogCS8q CiAJICogQXBwZW5kIHRoZSBkYXRhYmFzZSBuYW1lIHRvIHRoZSBhbHJlYWR5LWNvbnN0cnVjdGVk IHN0ZW0gb2YgY29ubmVjdGlvbgpAQCAtMTgxMiwzICsxOTMwLDkxIEBAIHJlYWRfZHVtcGFsbF9m aWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKQog CiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBjcmVhdGVfb3Jfb3Blbl9kaXIK KyAqCisgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSB3aXRoIGdpdmVuIG5hbWUu ICBJZiB0aGVyZSBpcyBhbHJlYWR5IHNhbWUKKyAqIGVtcHR5IGRpcmVjdG9yeSBleGlzdCwgdGhl biB1c2UgaXQuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfb3Jfb3Blbl9kaXIoY29uc3QgY2hh ciAqZGlybmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdAkJc3Q7CisJYm9vbAkJCWlzX2VtcHR5ID0gZmFs c2U7CisKKwkvKiB3ZSBhY2NlcHQgYW4gZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5ICovCisJaWYg KHN0YXQoZGlybmFtZSwgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJeworCQlE SVIJCSpkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworCisJCWlmIChkaXIpCisJCXsKKwkJCXN0cnVj dCBkaXJlbnQJKmQ7CisKKwkJCWlzX2VtcHR5ID0gdHJ1ZTsKKworCQkJd2hpbGUgKGVycm5vID0g MCwgKGQgPSByZWFkZGlyKGRpcikpKQorCQkJeworCQkJCWlmIChzdHJjbXAoZC0+ZF9uYW1lLCAi LiIpICE9IDAgJiYgc3RyY21wKGQtPmRfbmFtZSwgIi4uIikgIT0gMCkKKwkJCQl7CisJCQkJCWlz X2VtcHR5ID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGVycm5v KQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJ CQkJCQlkaXJuYW1lKTsKKworCQkJaWYgKGNsb3NlZGlyKGRpcikpCisJCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBjbG9zZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCQlkaXJuYW1lKTsKKwkJ fQorCisJCWlmKCFpc19lbXB0eSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJkaXJlY3RvcnkgXCIl c1wiIGV4aXN0cyBidXQgaXMgbm90IGVtcHR5IiwgZGlybmFtZSk7CisJCQlwZ19sb2dfZXJyb3Jf aGludCgiSWYgeW91IHdhbnQgdG8gZHVtcCBkYXRhIG9uIHRoaXMgZGlyZWN0b3J5LCBlaXRoZXIg cmVtb3ZlIG9yIGVtcHR5ICIKKwkJCQkJCQkgICJ0aGlzIGRpcmVjdG9yeSBcIiVzXCIgb3IgcnVu ICVzICIKKwkJCQkJCQkgICJ3aXRoIGFuIGFyZ3VtZW50IG90aGVyIHRoYW4gXCIlc1wiLiIsCisJ CQkJCQkJICBkaXJuYW1lLCBwcm9nbmFtZSwgZGlybmFtZSk7CisJCQlleGl0X25pY2VseSgxKTsK KwkJfQorCX0KKwllbHNlIGlmIChta2RpcihkaXJuYW1lLCAwNzAwKSA8IDApCisJCXBnX2ZhdGFs KCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGlybmFtZSk7Cit9CisK Ky8qCisgKiBwYXJzZUR1bXBGb3JtYXQKKyAqCisgKiBUaGlzIHdpbGwgdmFsaWRhdGUgZHVtcCBm b3JtYXRzLgorICovCitzdGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1wRm9ybWF0KGNvbnN0 IGNoYXIgKmZvcm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0CWFyY2hEdW1wRm9ybWF0OworCisJaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJj aEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1c3RvbSIpID09IDAp CisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21w KGZvcm1hdCwgImQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJ ZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9PSAwKQorCQlhcmNo RHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3Jt YXQsICJwIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChw Z19zdHJjYXNlY21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBh cmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQiKSA9PSAwKQorCQlh cmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQs ICJ0YXIiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZQorCQlwZ19m YXRhbCgidW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0IFwiJXNcIjsgcGxlYXNlIHNwZWNpZnkg XCJjXCIsIFwiZFwiLCBcInBcIiwgb3IgXCJ0XCIiLAorCQkJCWZvcm1hdCk7CisKKwlyZXR1cm4g YXJjaER1bXBGb3JtYXQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9y ZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwppbmRleCAzMzdlNjRhOGEyOS4uZWYx NjRmYmU0YmIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBwZ19y ZXN0b3JlLmMKICAqCXBnX3Jlc3RvcmUgaXMgYW4gdXRpbGl0eSBleHRyYWN0aW5nIHBvc3RncmVz IGRhdGFiYXNlIGRlZmluaXRpb25zCi0gKglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBi eSBwZ19kdW1wIHVzaW5nIHRoZSBhcmNoaXZlcgorICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNy ZWF0ZWQgYnkgcGdfZHVtcC9wZ19kdW1wYWxsIHVzaW5nIHRoZSBhcmNoaXZlcgogICoJaW50ZXJm YWNlLgogICoKICAqCXBnX3Jlc3RvcmUgd2lsbCByZWFkIHRoZSBiYWNrdXAgYXJjaGl2ZSBhbmQK QEAgLTQxLDMwICs0MSw3NyBAQAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNpbmNsdWRl IDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaWZkZWYgSEFWRV9URVJNSU9TX0gK ICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgImNvbW1vbi9jb25uZWN0 LmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgi CisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxz LmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVy LmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgorI2lu Y2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5o IgogCit0eXBlZGVmIHN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCit7CisJc3RydWN0 IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKm5leHQ7CisJT2lkCQkJCQkJCQkJZGJfb2lkOwor CWNvbnN0IGNoYXIJCQkJCQkJKmRiX25hbWU7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGw7 CisKK3R5cGVkZWYgc3RydWN0IFNpbXBsZURhdGFiYXNlT2lkTGlzdAoreworCVNpbXBsZURhdGFi YXNlT2lkTGlzdENlbGwgKmhlYWQ7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqdGFpbDsK K30gU2ltcGxlRGF0YWJhc2VPaWRMaXN0OworCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFy ICpwcm9nbmFtZSk7CiBzdGF0aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFy ICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOworc3RhdGljIGJvb2wgSXNGaWxlRXhp c3RzSW5EaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7Citz dGF0aWMgaW50IHJlc3RvcmVPbmVEYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBS ZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJCQkgIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVu ZF9kYXRhLCBpbnQgbnVtKTsKK3N0YXRpYyBpbnQgUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZv IGluQnVmLCBGSUxFICpwZmlsZSk7CitzdGF0aWMgaW50IHJlc3RvcmVBbGxEYXRhYmFzZXMoUEdj b25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkgICBTaW1wbGVTdHJp bmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVt V29ya2Vycyk7CitzdGF0aWMgaW50IHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm91 dGZpbGUpOworc3RhdGljIHZvaWQgY29weV9vcl9wcmludF9nbG9iYWxfZmlsZShjb25zdCBjaGFy ICpvdXRmaWxlLCBGSUxFICpwZmlsZSk7CitzdGF0aWMgaW50IGdldF9kYm5hbWVzX2xpc3RfdG9f cmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29p ZF9saXN0LAorCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpOworc3RhdGlj IGludCBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBh dGgsCisJCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCk7 CitzdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lk TGlzdCAqbGlzdCwgT2lkIGRiX29pZCwKKwkJCQkJCQkJCSAgY29uc3QgY2hhciAqZGJuYW1lKTsK K3N0YXRpYyB2b2lkIHNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdM aXN0ICpsaXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfZnVsbF9saXN0X2RlbGV0ZShT aW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9s aXN0X2RlbGV0ZShTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsCisJCQkJCQkJCQkgIFNpbXBs ZURhdGFiYXNlT2lkTGlzdENlbGwgKmNlbGwsCisJCQkJCQkJCQkgIFNpbXBsZURhdGFiYXNlT2lk TGlzdENlbGwgKnByZXYpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChT aW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsCisJCU9pZCBkYl9vaWQsIGNvbnN0IGNoYXIgKmRi bmFtZSk7CitzdGF0aWMgc2l6ZV90IHF1b3RlX2xpdGVyYWxfaW50ZXJuYWwoY2hhciAqZHN0LCBj b25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4pOworc3RhdGljIGNoYXIgKnF1b3RlX2xpdGVyYWxf Y3N0cihjb25zdCBjaGFyICpyYXdzdHIpOworc3RhdGljIGludCBvbl9leGl0X2luZGV4ID0gMDsK IAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlSZXN0b3JlT3B0aW9ucyAq b3B0czsKIAlpbnQJCQljOwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJCQludW1Xb3JrZXJzID0g MTsKLQlBcmNoaXZlICAgICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVTcGVjOwogCWJvb2wJCWRh dGFfb25seSA9IGZhbHNlOwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJaW50CQkJbl9l cnJvcnMgPSAwOworCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOworCVNpbXBsZVN0cmluZ0xp c3QJZGJfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIAlzdGF0aWMgaW50CWRpc2Fi bGVfdHJpZ2dlcnMgPSAwOwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CiAJ c3RhdGljIGludAlpZl9leGlzdHMgPSAwOwpAQCAtODcsNiArMTM0LDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIs IDAsIE5VTEwsICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9i YWxzLW9ubHkiLCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJ CXsiZXhpdC1vbi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAx LCBOVUxMLCAnTid9LApAQCAtMTM4LDYgKzE4Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCQl7Im5vLXN0YXRpc3RpY3MiLCBub19hcmd1bWVudCwgJm5vX3N0YXRpc3RpY3MsIDF9 LAogCQl7InN0YXRpc3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3RhdGlzdGljc19vbmx5LCAx fSwKIAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCisJCXsiZXhjbHVk ZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2fSwKIAogCQl7TlVMTCwgMCwg TlVMTCwgMH0KIAl9OwpAQCAtMTY2LDcgKzIxNSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFj Q2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9 IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpPcDpQOlJz Uzp0OlQ6VTp2d1d4MSIsCiAJCQkJCQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dp dGNoIChjKQpAQCAtMTkzLDExICsyNDIsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBw Z19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3Rv cmUgb25seSBnbG9iYWwuZGF0IGZpbGUgZnJvbSBkaXJlY3RvcnkgKi8KKwkJCQlnbG9iYWxzX29u bHkgPSB0cnVlOworCQkJCWJyZWFrOwogCQkJY2FzZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRh cmcpICE9IDApCiAJCQkJCW9wdHMtPmNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7 CiAJCQkJYnJlYWs7Ci0KIAkJCWNhc2UgJ2onOgkJCS8qIG51bWJlciBvZiByZXN0b3JlIGpvYnMg Ki8KIAkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLWovLS1qb2JzIiwgMSwKIAkJ CQkJCQkJCSAgUEdfTUFYX0pPQlMsCkBAIC0zMTIsNiArMzY0LDEwIEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCQkJCQlleGl0KDEpOwogCQkJCW9wdHMtPmV4aXRfb25fZXJyb3IgPSB0 cnVlOwogCQkJCWJyZWFrOworCQkJY2FzZSA2OgorCQkJCS8qIGxpc3Qgb2YgZGF0YWJhc2VzIHBh dHRlcm5zIHRob3NlIG5lZWRzIHRvIHNraXAgd2hpbGUgcmVzdG9yaW5nICovCisJCQkJc2ltcGxl X3N0cmluZ19saXN0X2FwcGVuZCgmZGJfZXhjbHVkZV9wYXR0ZXJucywgb3B0YXJnKTsKKwkJCQli cmVhazsKIAogCQkJZGVmYXVsdDoKIAkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVtaXR0ZWQg YSBjb21wbGFpbnQgKi8KQEAgLTMzOSw2ICszOTUsMTMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJaWYgKCFvcHRzLT5jcGFyYW1zLmRibmFtZSAmJiAhb3B0cy0+ZmlsZW5hbWUgJiYg IW9wdHMtPnRvY1N1bW1hcnkpCiAJCXBnX2ZhdGFsKCJvbmUgb2YgLWQvLS1kYm5hbWUgYW5kIC1m Ly0tZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogCisJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMu aGVhZCAhPSBOVUxMICYmIGdsb2JhbHNfb25seSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9u IC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xv YmFscy1vbmx5Iik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3Ig bW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKwog CS8qIFNob3VsZCBnZXQgYXQgbW9zdCBvbmUgb2YgLWQgYW5kIC1mLCBlbHNlIHVzZXIgaXMgY29u ZnVzZWQgKi8KIAlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCiAJewpAQCAtNDIwLDYgKzQ4Mywx MDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCSBvcHRzLT5mb3JtYXROYW1l KTsKIAl9CiAKKwkvKgorCSAqIElmIHRvYy5kYXQgZmlsZSBkb2VzIG5vdCBwcmVzZW50IGluIGN1 cnJlbnQgcGF0aCwgdGhlbiBjaGVjayBmb3IKKwkgKiBnbG9iYWwuZGF0LiAgSWYgZ2xvYmFsLmRh dCBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhlCisJICogZGF0YWJhc2VzIGZy b20gbWFwLmRhdChpZiBleGlzdCkgZmlsZSBsaXN0IGFuZCBza2lwIHJlc3RvcmluZyBmb3IKKwkg KiAtLWV4Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybnMuCisJICovCisJaWYgKGlucHV0RmlsZVNwZWMg IT0gTlVMTCAmJiAhSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5k YXQiKSAmJgorCQkJSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgImdsb2Jh bC5kYXQiKSkKKwl7CisJCVBHY29ubiAgKmNvbm4gPSBOVUxMOyAvKiBDb25uZWN0aW9uIHRvIHJl c3RvcmUgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKworCQkvKgorCQkgKiBVc2VyIGlzIHN1Z2dl c3RlZCB0byB1c2Ugc2luZ2xlIGRhdGFiYXNlIGR1bXAgZm9yIC0tbGlzdCBvcHRpb24uCisJCSAq LworCQlpZiAob3B0cy0+dG9jU3VtbWFyeSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLWwvLS1saXN0 IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcyBieSBhcmNo aXZlIG9mIHBnX2R1bXBhbGwiKTsKKworCQkvKgorCQkgKiBUbyByZXN0b3JlIG11bHRpcGxlIGRh dGFiYXNlcywgLUMgKGNyZWF0ZSBkYXRhYmFzZSkgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQu CisJCSAqIEV2ZW4gdGhlcmUgaXMgc2luZ2xlIGRhdGFiYXNlIGluIGR1bXAsIHJlcG9ydCBlcnJv ciBiZWNhdXNlIGl0IG1pZ2h0IGJlIHBvc3NpYmxlCisJCSAqIHRoYXQgZGF0YWJhc2UgaGFzbid0 IGNyZWF0ZWQgc28gYmV0dGVyIHdlIHJlcG9ydCBlcnJvci4KKwkJICovCisJCWlmICghZ2xvYmFs c19vbmx5ICYmIG9wdHMtPmNyZWF0ZURCICE9IDEpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiLUMv LS1jcmVhdGUgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgbXVsdGlw bGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOworCQkJcGdfbG9nX2Vycm9y X2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1l KTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50KCJJZiBkYiBpcyBhbHJlYWR5IGNyZWF0ZWQgYW5kIGR1 bXAgaGFzIHNpbmdsZSBkYiBkdW1wLCB0aGVuIHVzZSBwYXJ0aWN1bGFyIGR1bXAgZmlsZS4iKTsK KwkJCWV4aXRfbmljZWx5KDEpOworCQl9CisKKwkJLyoKKwkJICogQ29ubmVjdCB0byBkYXRhYmFz ZSB0byBleGVjdXRlIGdsb2JhbCBzcWwgY29tbWFuZHMgZnJvbSBnbG9iYWwuZGF0IGZpbGUuCisJ CSAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCWNvbm4gPSBDb25uZWN0 RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0 LAorCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJ X0RFRkFVTFQsCisJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7 CisKKwkJCWlmICghY29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0 YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJLyogSWYgZ2xv YmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9tIGhlcmUuICovCisJCWlmIChnbG9iYWxzX29ubHkp CisJCXsKKwkJCS8qIE9wZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCBleGVjdXRlL2FwcGVuZCBhbGwg dGhlIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJCQluX2Vycm9ycyA9IHByb2Nlc3NfZ2xvYmFs X3NxbF9jb21tYW5kcyhjb25uLCBpbnB1dEZpbGVTcGVjLAorCQkJCQlvcHRzLT5maWxlbmFtZSk7 CisKKwkJCWlmIChjb25uKQorCQkJCVBRZmluaXNoKGNvbm4pOworCisJCQlwZ19sb2dfaW5mbygi ZGF0YWJhc2VzIHJlc3RvcmluZyBpcyBza2lwcGVkIGFzIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlv biBpcyBzcGVjaWZpZWQiKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE5vdyByZXN0b3JlIGFs bCB0aGUgZGF0YWJhc2VzIGZyb20gbWFwLmRhdCBmaWxlLiAqLworCQkJbl9lcnJvcnMgPSByZXN0 b3JlQWxsRGF0YWJhc2VzKGNvbm4sIGlucHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0dGVybnMs CisJCQkJCW9wdHMsIG51bVdvcmtlcnMpOworCQl9CisKKwkJLyogRnJlZSBkYiBwYXR0ZXJuIGxp c3QuICovCisJCXNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZSgmZGJfZXhjbHVkZV9wYXR0 ZXJucyk7CisJfQorCWVsc2UgLyogcHJvY2VzcyBpZiBnbG9iYWwuZGF0IGZpbGUgZG9lcyBub3Qg ZXhpc3QuICovCisJeworCQlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwpCisJ CQlwZ19mYXRhbCgib3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmUgdXNlZCBvbmx5IHdo ZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcyBieSBhcmNoaXZlIG9mIHBnX2R1bXBhbGwi KTsKKworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAtZy8tLWdsb2Jh bHMtb25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNl cyBieSBhcmNoaXZlIG9mIHBnX2R1bXBhbGwiKTsKKworCQluX2Vycm9ycyA9IHJlc3RvcmVPbmVE YXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSwgMCk7CisJfQor CisJb25fZXhpdF9pbmRleCA9IDA7IC8qIFJlc2V0IGluZGV4LiAqLworCisJLyogRG9uZSwgcHJp bnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1cmluZyByZXN0b3JlLiAqLworCWlmIChu X2Vycm9ycykKKwl7CisJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0b3Jl OiAlZCIsIG5fZXJyb3JzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8q CisgKiByZXN0b3JlT25lRGF0YWJhc2UKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0 YWJhc2UgdXNpbmcgdG9jLmRhdCBmaWxlLgorICoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBl cnJvcnMgd2hpbGUgZG9pbmcgcmVzdG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZU9uZURh dGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAor CQkJCSAgIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtKQoreworCUFy Y2hpdmUJCSpBSDsKKwlpbnQJCQluX2Vycm9yczsKKwogCUFIID0gT3BlbkFyY2hpdmUoaW5wdXRG aWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVPcHRpb25zKEFILCBOVUxMLCBv cHRzKTsKQEAgLTQyOCw4ICs1OTMsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ ICogV2UgZG9uJ3QgaGF2ZSBhIGNvbm5lY3Rpb24geWV0IGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVy LiBUaGUgY29ubmVjdGlvbgogCSAqIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIGlmIHdlIHRl cm1pbmF0ZSB0aHJvdWdoIGV4aXRfbmljZWx5KCkgd2hpbGUKIAkgKiBpdCdzIHN0aWxsIE5VTEws IHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9wLgorCSAqIElmIHdlIGFy ZSByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzLCB0aGVuIHNhdmUgaW5kZXggb2YgZXhpdF9u aWNlbHkKKwkgKiBzbyB0aGF0IHdlIGNhbiB1c2Ugc2FtZSBzbG90IGZvciBhbGwgdGhlIGRhdGFi YXNlcyBhcyB3ZSBhbHJlYWR5IGNsb3NlZAorCSAqIHRoZSBwcmV2aW91cyBhcmNoaXZlIGJ5IENs b3NlQXJjaGl2ZS4KIAkgKi8KLQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOworCWlmICghYXBw ZW5kX2RhdGEgfHwgbnVtID09IDApCisJCW9uX2V4aXRfaW5kZXggPSBvbl9leGl0X2Nsb3NlX2Fy Y2hpdmUoQUgpOworCWVsc2UKKwkJcmVwbGFjZV9vbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgsIG9u X2V4aXRfaW5kZXgpOwogCiAJLyogTGV0IHRoZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0byBi ZSAqLwogCUFILT52ZXJib3NlID0gb3B0cy0+dmVyYm9zZTsKQEAgLTQ0OSwyNSArNjIwLDIyIEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZl UmVzdG9yZU9wdGlvbnMoQUgpOwotCQlSZXN0b3JlQXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNo aXZlKEFILCBhcHBlbmRfZGF0YSk7CiAJfQogCi0JLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9m IGlnbm9yZWQgZXJyb3JzICovCi0JaWYgKEFILT5uX2Vycm9ycykKLQkJcGdfbG9nX3dhcm5pbmco ImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwgQUgtPm5fZXJyb3JzKTsKKwluX2Vycm9y cyA9IEFILT5uX2Vycm9yczsKIAogCS8qIEFIIG1heSBiZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ ICovCi0JZXhpdF9jb2RlID0gQUgtPm5fZXJyb3JzID8gMSA6IDA7Ci0KIAlDbG9zZUFyY2hpdmUo QUgpOwogCi0JcmV0dXJuIGV4aXRfY29kZTsKKwlyZXR1cm4gbl9lcnJvcnM7CiB9CiAKIHN0YXRp YyB2b2lkCiB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIHsKLQlwcmludGYoXygiJXMgcmVz dG9yZXMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBn X2R1bXAuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdy ZVNRTCBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuIgorCQkJ CSJJZiBhcmNoaXZlIGlzIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCwgdGhlbiByZXN0b3JlcyBtdWx0 aXBsZSBkYXRhYmFzZXMgYWxzby4gXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdl OlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uIFtGSUxFXVxuIiksIHByb2duYW1l KTsKIApAQCAtNDg1LDYgKzY1Myw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXBy aW50ZihfKCIgIC1jLCAtLWNsZWFuICAgICAgICAgICAgICAgICAgY2xlYW4gKGRyb3ApIGRhdGFi YXNlIG9iamVjdHMgYmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmludGYoXygiICAtQywgLS1j cmVhdGUgICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRhdGFiYXNlXG4iKSk7CiAJ cHJpbnRmKF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBleGl0IG9uIGVycm9yLCBk ZWZhdWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7CisJcHJpbnRmKF8oIiAgLWcsIC0tZ2xvYmFscy1v bmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMsIG5vIGRhdGFiYXNlc1xu IikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAgICAgICAgcmVzdG9yZSBu YW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9TlVNICAgICAgICAgICAg ICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVcbiIpKTsKIAlwcmludGYo XygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVzZSB0YWJsZSBvZiBjb250ZW50cyBm cm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTQ5Nyw2ICs2NjYsNyBAQCB1c2FnZShjb25zdCBjaGFy ICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtUywgLS1zdXBlcnVzZXI9TkFNRSAgICAgICAgIHN1 cGVydXNlciB1c2VyIG5hbWUgdG8gdXNlIGZvciBkaXNhYmxpbmcgdHJpZ2dlcnNcbiIpKTsKIAlw cmludGYoXygiICAtdCwgLS10YWJsZT1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgcmVs YXRpb24gKHRhYmxlLCB2aWV3LCBldGMuKVxuIikpOwogCXByaW50ZihfKCIgIC1ULCAtLXRyaWdn ZXI9TkFNRSAgICAgICAgICAgcmVzdG9yZSBuYW1lZCB0cmlnZ2VyXG4iKSk7CisJcHJpbnRmKF8o IiAgLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gICBleGNsdWRlIGRhdGFiYXNlcyB3aG9zZSBu YW1lIG1hdGNoZXMgd2l0aCBwYXR0ZXJuXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXgsIC0tbm8tcHJp dmlsZWdlcyAgICAgICAgICBza2lwIHJlc3RvcmF0aW9uIG9mIGFjY2VzcyBwcml2aWxlZ2VzIChn cmFudC9yZXZva2UpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLTEsIC0tc2luZ2xlLXRyYW5zYWN0aW9u ICAgICByZXN0b3JlIGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4iKSk7CiAJcHJpbnRmKF8oIiAg LS1kaXNhYmxlLXRyaWdnZXJzICAgICAgICAgICBkaXNhYmxlIHRyaWdnZXJzIGR1cmluZyBkYXRh LW9ubHkgcmVzdG9yZVxuIikpOwpAQCAtNTM0LDggKzcwNCw4IEBAIHVzYWdlKGNvbnN0IGNoYXIg KnByb2duYW1lKQogCXByaW50ZihfKCIgIC0tcm9sZT1ST0xFTkFNRSAgICAgICAgICBkbyBTRVQg Uk9MRSBiZWZvcmUgcmVzdG9yZVxuIikpOwogCiAJcHJpbnRmKF8oIlxuIgotCQkJICJUaGUgb3B0 aW9ucyAtSSwgLW4sIC1OLCAtUCwgLXQsIC1ULCBhbmQgLS1zZWN0aW9uIGNhbiBiZSBjb21iaW5l ZCBhbmQgc3BlY2lmaWVkXG4iCi0JCQkgIm11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBs ZSBvYmplY3RzLlxuIikpOworCQkJICJUaGUgb3B0aW9ucyAtSSwgLW4sIC1OLCAtUCwgLXQsIC1U LCAtLXNlY3Rpb24sIGFuZCAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlIGNvbWJpbmVkXG4iCisJ CQkgImFuZCBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVj dHMuXG4iKSk7CiAJcHJpbnRmKF8oIlxuSWYgbm8gaW5wdXQgZmlsZSBuYW1lIGlzIHN1cHBsaWVk LCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuXG5cbiIpKTsKIAlwcmludGYoXygiUmVwb3J0 IGJ1Z3MgdG8gPCVzPi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CiAJcHJpbnRmKF8oIiVzIGhv bWUgcGFnZTogPCVzPlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9VUkwpOwpAQCAtNjQwLDMg KzgxMCw2NDggQEAgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJl c3RvcmVPcHRpb25zICpvcHRzKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisg KiBJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBmaWxlIGV4 aXN0IGluIGN1cnJlbnQgZGlyZWN0b3J5LgorICovCitzdGF0aWMgYm9vbAorSXNGaWxlRXhpc3Rz SW5EaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlz dHJ1Y3Qgc3RhdAkJCXN0OworCWNoYXIJCQkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmlu dGYoYnVmLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkK KwkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJ cmV0dXJuIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQor CisvKgorICogUmVhZE9uZVN0YXRlbWVudAorICoKKyAqIFRoaXMgd2lsbCBzdGFydCByZWFkaW5n IGZyb20gcGFzc2VkIGZpbGUgcG9pbnRlciB1c2luZyBmZ2V0YyBhbmQgcmVhZCB0aWxsCisgKiBz ZW1pY29sb24oc3FsIHN0YXRlbWVudCB0ZXJtaW5hdG9yIGZvciBnbG9iYWwuZGF0IGZpbGUpCisg KgorICogRU9GIGlzIHJldHVybmVkIGlmIGVuZC1vZi1maWxlIGlucHV0IGlzIHNlZW47IHRpbWUg dG8gc2h1dCBkb3duLgorICovCisKK3N0YXRpYyBpbnQKK1JlYWRPbmVTdGF0ZW1lbnQoU3RyaW5n SW5mbyBpbkJ1ZiwgRklMRSAqcGZpbGUpCit7CisJaW50CQkJYzsgLyogY2hhcmFjdGVyIHJlYWQg ZnJvbSBnZXRjKCkgKi8KKwlpbnQJCQltOworCisJU3RyaW5nSW5mb0RhdGEJcTsKKwlpbml0U3Ry aW5nSW5mbygmcSk7CisKKwlyZXNldFN0cmluZ0luZm8oaW5CdWYpOworCisJLyoKKwkgKiBSZWFk IGNoYXJhY3RlcnMgdW50aWwgRU9GIG9yIHRoZSBhcHByb3ByaWF0ZSBkZWxpbWl0ZXIgaXMgc2Vl bi4KKwkgKi8KKwl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwl7CisJCWlmIChj ICE9ICdcJycgJiYgYyAhPSAnIicgJiYgYyAhPSAnXG4nICYmIGMgIT0gJzsnKQorCQl7CisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpIGMpOworCQkJd2hpbGUgKChjID0gZmdl dGMocGZpbGUpKSAhPSBFT0YpCisJCQl7CisJCQkJaWYgKGMgIT0gJ1wnJyAmJiBjICE9ICciJyAm JiBjICE9ICc7JyAmJiBjICE9ICdcbicpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVm LCAoY2hhcikgYyk7CisJCQkJZWxzZQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChj ID09ICdcJycgfHwgYyA9PSAnIicpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZxLCAo Y2hhcikgYyk7CisJCQltID0gYzsKKworCQkJd2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBF T0YpCisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnEsIChjaGFyKSBjKTsKKworCQkJ CWlmKGMgPT0gbSkKKwkJCQl7CisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoaW5CdWYsIHEu ZGF0YSk7CisJCQkJCXJlc2V0U3RyaW5nSW5mbygmcSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CX0KKwkJfQorCisJCWlmIChjID09ICc7JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo aW5CdWYsIChjaGFyKSAnOycpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYyA9PSAnXG4nKQor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSAnXG4nKTsKKwl9CisKKwkvKiBO byBpbnB1dCBiZWZvcmUgRU9GIHNpZ25hbCBtZWFucyB0aW1lIHRvIHF1aXQuICovCisJaWYgKGMg PT0gRU9GICYmIGluQnVmLT5sZW4gPT0gMCkKKwkJcmV0dXJuIEVPRjsKKworCS8qIEFkZCAnXDAn IHRvIG1ha2UgaXQgbG9vayB0aGUgc2FtZSBhcyBtZXNzYWdlIGNhc2UuICovCisJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSAnXDAnKTsKKworCXJldHVybiAnUSc7Cit9CisKKy8q CisgKiBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUKKyAqCisgKiBUaGlzIHdpbGwgcmVtb3Zl IGVudHJpZXMgZnJvbSBkYm5hbWVfb2lkX2xpc3QgdGhhdCBwYXR0ZXJuIG1hdGNoaW5nIGFueQor ICogaW4gdGhlIGRiX2V4Y2x1ZGVfcGF0dGVybnMgbGlzdC4gIGRibmFtZV9vaWRfbGlzdCBtYXli ZSBpbnBsYWNlIG1vZGlmaWVkLgorICoKKyAqIHJldHVybnMsIG51bWJlciBvZiBkYXRhYmFzZSB3 aWxsIGJlIHJlc3RvcmVkLgorICoKKyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZXNfbGlzdF90 b19yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVf b2lkX2xpc3QsCisJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykKK3sKKwlT aW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpkYm9pZF9jZWxsID0gZGJuYW1lX29pZF9saXN0LT5o ZWFkOworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmRib2lkcHJlY2VsbCA9IE5VTEw7CisJ aW50CQkJCQkJCWNvdW50X2RiID0gMDsKKwlQUUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAg ICpyZXM7CisKKwkvKiBSZXR1cm4gMCBpZiB0aGVyZSBpcyBubyBkYXRhYmFzZSB0byByZXN0b3Jl LiAqLworCWlmIChkYm9pZF9jZWxsID09IE5VTEwpCisJCXJldHVybiAwOworCisJcXVlcnkgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCisJaWYgKCFjb25uKQorCQlwZ19sb2dfaW5mbygiY29uc2lk ZXJpbmcgUEFUVEVSTiBhcyBOQU1FIGZvciAtLWV4Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uIGFzIG5v IGRiIGNvbm5lY3Rpb24gd2hpbGUgZG9pbmcgcGdfcmVzdG9yZS4iKTsKKworCS8qCisJICogUHJv Y2VzcyBvbmUgYnkgb25lIGFsbCBkYm5hbWVzIGFuZCBpZiBzcGVjaWZpZWQgdG8gc2tpcCByZXN0 b3JpbmcsIHRoZW4KKwkgKiByZW1vdmUgZGJuYW1lIGZyb20gbGlzdC4KKwkgKi8KKwl3aGlsZSAo ZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJYm9vbAkJCQkJCXNraXBfZGJfcmVzdG9yZSA9IGZh bHNlOworCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0ID0gZGJvaWRfY2VsbC0+bmV4 dDsKKworCQlmb3IgKFNpbXBsZVN0cmluZ0xpc3RDZWxsICpjZWxsZGIgPSBkYl9leGNsdWRlX3Bh dHRlcm5zLmhlYWQ7IGNlbGxkYjsgY2VsbGRiID0gY2VsbGRiLT5uZXh0KQorCQl7CisJCQkvKgor CQkJICogdGhlIGNvbnN0cnVjdCBwYXR0ZXJuIG1hdGNoaW5nIHF1ZXJ5OgorCQkJICogU0VMRUNU IDEgV0hFUkUgWFhYIE9QRVJBVE9SKHBnX2NhdGFsb2cufikgJ14oUEFUVEVSTikkJyBDT0xMQVRF CisJCQkgKiBwZ19jYXRhbG9nLmRlZmF1bHQKKwkJCSAqCisJCQkgKiBYWFggcmVwcmVzZW50cyB0 aGUgc3RyaW5nIGxpdGVyYWwgZGF0YWJhc2UgbmFtZSBkZXJpdmVkIGZyb20gdGhlCisJCQkgKiBk Ym5hbWVfb2lkX2xpc3QsIHdoaWNoIGlzIGluaXRpYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUgbWFw LmRhdAorCQkJICogZmlsZSBsb2NhdGVkIGluIHRoZSBiYWNrdXAgZGlyZWN0b3J5LiAgdGhhdCdz IHdoeSB3ZSBuZWVkCisJCQkgKiBxdW90ZV9saXRlcmFsX2NzdHIuCisJCQkgKgorCQkJICogSWYg bm8gZGIgY29ubmVjdGlvbiwgdGhlbiBjb25zaWRlciBQQVRURVJOIGFzIE5BTUUuCisJCQkgKi8K KwkJCWlmIChwZ19zdHJjYXNlY21wKGRib2lkX2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKSA9 PSAwKQorCQkJICAgc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCWVsc2UgaWYgKGNvbm4pCisJ CQl7CisJCQkJaW50CWRvdGNudDsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAi U0VMRUNUIDEgIik7CisJCQkJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKGNvbm4sIHF1ZXJ5LCBjZWxs ZGItPnZhbCwgZmFsc2UsCisJCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBxdW90ZV9saXRlcmFsX2Nz dHIoZGJvaWRfY2VsbC0+ZGJfbmFtZSksCisJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEwsICZk b3RjbnQpOworCisJCQkJaWYgKGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3Io ImltcHJvcGVyIHF1YWxpZmllZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIsCisJ CQkJCQkJCSAgY2VsbGRiLT52YWwpOworCQkJCQlQUWZpbmlzaChjb25uKTsKKwkJCQkJZXhpdF9u aWNlbHkoMSk7CisJCQkJfQorCisJCQkJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5k YXRhKTsKKworCQkJCWlmICgoUFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19UVVBMRVNfT0sp ICYmIFBRbnR1cGxlcyhyZXMpKQorCQkJCXsKKwkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsK KwkJCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIFwiJXNcIiBpcyBtYXRjaGluZyB3aXRoIGV4Y2x1 ZGUgcGF0dGVybjogXCIlc1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSwgY2VsbGRiLT52YWwpOwor CQkJCX0KKworCQkJCVBRY2xlYXIocmVzKTsKKwkJCQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsK KwkJCX0KKworCQkJaWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJCQlicmVhazsKKwkJfQorCisJCS8q IEluY3JlbWVudCBjb3VudCBpZiBkYXRhYmFzZSBuZWVkcyB0byBiZSByZXN0b3JlZC4gKi8KKwkJ aWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdfbG9nX2luZm8oImV4Y2x1ZGluZyBkYXRh YmFzZSBcIiVzXCIiLCBkYm9pZF9jZWxsLT5kYl9uYW1lKTsKKwkJCXNpbXBsZV9kYl9vaWRfbGlz dF9kZWxldGUoZGJuYW1lX29pZF9saXN0LCBkYm9pZF9jZWxsLCBkYm9pZHByZWNlbGwpOworCQl9 CisJCWVsc2UKKwkJeworCQkJY291bnRfZGIrKzsKKwkJCWRib2lkcHJlY2VsbCA9IGRib2lkX2Nl bGw7CisJCX0KKworCQkvKiBQcm9jZXNzIG5leHQgZGJuYW1lIGZyb20gZGJuYW1lIGxpc3QuICov CisJCWRib2lkX2NlbGwgPSBuZXh0OworCX0KKworCXJldHVybiBjb3VudF9kYjsKK30KKworLyoK KyAqIGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZQorICoKKyAqIE9wZW4gbWFwLmRhdCBm aWxlIGFuZCByZWFkIGxpbmUgYnkgbGluZSBhbmQgdGhlbiBwcmVwYXJlIGEgbGlzdCBvZiBkYXRh YmFzZQorICogbmFtZXMgYW5kIGNvcnJlc3BvbmRpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMs IHRvdGFsIG51bWJlciBvZiBkYXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0 YXRpYyBpbnQKK2dldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1w ZGlycGF0aCwgU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJRklM RSAgICAqcGZpbGU7CisJY2hhciAgICBtYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJY2hhciAg ICBsaW5lW01BWFBHUEFUSF07CisJaW50ICAgICBjb3VudCA9IDA7CisKKwkvKgorCSAqIElmIHRo ZXJlIGlzIG9ubHkgZ2xvYmFsLmRhdCBmaWxlIGluIGR1bXAsIHRoZW4gcmV0dXJuIGZyb20gaGVy ZSBhcyB0aGVyZQorCSAqIGlzIG5vIGRhdGFiYXNlIHRvIHJlc3RvcmUuCisJICovCisJaWYgKCFJ c0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShwZ19zdHJkdXAoZHVtcGRpcnBhdGgpLCAibWFwLmRhdCIp KQorCXsKKwkJcGdfbG9nX2luZm8oImRhdGFiYXNlcyByZXN0b3JpbmcgaXMgc2tpcHBlZCBhcyBt YXAuZGF0IGZpbGUgaXMgbm90IHByZXNlbnQgaW4gXCIlc1wiIiwgZHVtcGRpcnBhdGgpOworCQly ZXR1cm4gMDsKKwl9CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9t YXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZp bGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0g TlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG1hcC5kYXQgZmlsZTogXCIlc1wiIiwg bWFwX2ZpbGVfcGF0aCk7CisKKwkvKiBBcHBlbmQgYWxsIHRoZSBkYm5hbWUgYW5kIGRiX29pZCB0 byB0aGUgbGlzdC4gKi8KKwl3aGlsZSgoZmdldHMobGluZSwgTUFYUEdQQVRILCBwZmlsZSkpICE9 IE5VTEwpCisJeworCQlPaWQgICAgICAgICBkYl9vaWQgPSBJbnZhbGlkT2lkOworCQljaGFyCQlk Yl9vaWRfc3RyW01BWFBHUEFUSCArIDFdID0geydcMCd9OworCQljaGFyICAgICAgICBkYm5hbWVb TUFYUEdQQVRIICsgMV0gPSB7J1wwJ307CisKKwkJLyogRXh0cmFjdCBkYm9pZC4gKi8KKwkJc3Nj YW5mKGxpbmUsICIldSIgLCAmZGJfb2lkKTsKKwkJc3NjYW5mKGxpbmUsICIlcyIgLCBkYl9vaWRf c3RyKTsKKworCQkvKiBOb3cgY29weSBkYm5hbWUuICovCisJCXN0cmNweShkYm5hbWUsIGxpbmUg KyBzdHJsZW4oZGJfb2lkX3N0cikgKyAxKTsKKworCQkvKiBSZW1vdmUgXG4gZnJvbSBkYmFubWUu ICovCisJCWRibmFtZVtzdHJsZW4oZGJuYW1lKSAtIDFdID0gJ1wwJzsKKworCQlwZ19sb2dfaW5m bygiZm91bmQgZGF0YWJhc2UgXCIlc1wiIChPSUQ6ICV1KSBpbiBtYXAuZGF0IGZpbGUgd2hpbGUg cmVzdG9yaW5nLiIsIGRibmFtZSwgZGJfb2lkKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgYW5kIGV4 aXQgaWYgdGhlIGZpbGUgaGFzIGFueSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1Zh bGlkKGRiX29pZCkgfHwgc3RybGVuKGRibmFtZSkgPT0gMCkKKwkJCXBnX2ZhdGFsKCJpbnZhbGlk IGVudHJ5IGluIG1hcC5kYXQgZmlsZSBhdCBsaW5lIDogJWQiLCBjb3VudCArIDEpOworCisJCS8q CisJCSAqIFhYWCA6IGJlZm9yZSBhZGRpbmcgZGJuYW1lIGludG8gbGlzdCwgd2UgY2FuIHZlcmlm eSB0aGF0IHRoaXMgZGIKKwkJICogbmVlZHMgdG8gc2tpcHBlZCBmb3IgcmVzdG9yZSBvciBub3Qg YnV0IGFzIG9mIG5vdywgd2UgYXJlIG1ha2luZworCQkgKiBhIGxpc3Qgb2YgYWxsIHRoZSBkYXRh YmFzZXMuCisJCSAqLworCQlzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKGRibmFtZV9vaWRfbGlz dCwgZGJfb2lkLCBkYm5hbWUpOworCQljb3VudCsrOworCX0KKworCS8qIENsb3NlIG1hcC5kYXQg ZmlsZS4gKi8KKwlmY2xvc2UocGZpbGUpOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICog cmVzdG9yZUFsbERhdGFiYXNlcworICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIGRhdGFiYXNlcyB0 aG9zZSBkdW1wcyBhcmUgcHJlc2VudCBpbgorICogZGlyZWN0b3J5IGJhc2VkIG9uIG1hcC5kYXQg ZmlsZSBtYXBwaW5nLgorICoKKyAqIFRoaXMgd2lsbCBza2lwIHJlc3RvcmluZyBmb3IgZGF0YWJh c2VzIHRoYXQgYXJlIHNwZWNpZmllZCB3aXRoCisgKiBleGNsdWRlLWRhdGFiYXNlIG9wdGlvbi4K KyAqCisgKiByZXR1cm5zLCBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJlc3RvcmUuCisg Ki8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVBbGxEYXRhYmFzZXMoUEdjb25uICpjb25uLCBjb25zdCBj aGFyICpkdW1wZGlycGF0aCwKKwkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRl cm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJaW50IG51bVdvcmtlcnMpCit7CisJU2lt cGxlRGF0YWJhc2VPaWRMaXN0CQkJZGJuYW1lX29pZF9saXN0ID0ge05VTEwsIE5VTEx9OworCVNp bXBsZURhdGFiYXNlT2lkTGlzdENlbGwJCSpkYm9pZF9jZWxsOworCWludAkJCQkJCQkJbnVtX2Ri X3Jlc3RvcmUgPSAwOworCWludAkJCQkJCQkJbnVtX3RvdGFsX2RiOworCWludAkJCQkJCQkJbl9l cnJvcnNfdG90YWw7CisJaW50CQkJCQkJCQljb3VudCA9IDA7CisKKwludW1fdG90YWxfZGIgPSBn ZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoZHVtcGRpcnBhdGgsICZkYm5hbWVfb2lkX2xp c3QpOworCisJLyoKKwkgKiBJZiBtYXAuZGF0IGhhcyBubyBlbnRyeSwgcmV0dXJuIGZyb20gaGVy ZSBhZnRlciBwcm9jZXNzaW5nCisJICogZ2xvYmFsLmRhdCBmaWxlLgorCSAqLworCWlmIChkYm5h bWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMKQorCQlyZXR1cm4gcHJvY2Vzc19nbG9iYWxfc3FsX2Nv bW1hbmRzKGNvbm4sIGR1bXBkaXJwYXRoLCBvcHRzLT5maWxlbmFtZSk7CisKKwlwZ19sb2dfaW5m bygiZm91bmQgdG90YWwgJWQgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlIiwgbnVtX3Rv dGFsX2RiKTsKKworCWlmICghY29ubikKKwl7CisJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29u bmVjdCBkYXRhYmFzZSBcInBvc3RncmVzXCIgIHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOworCisJ CWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInBvc3RncmVzIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5w Z2hvc3QsCisJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNl cm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCk7CisKKwkJLyogVHJ5IHdpdGggdGVtcGxhdGUxLiAqLworCQlpZiAoIWNv bm4pCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCBkYXRhYmFzZSBcInRl bXBsYXRlMVwiIGFzIGZhaWxlZCB0byBjb25uZWN0IHRvIGRhdGFiYXNlIFwicG9zdGdyZXNcIiB0 byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQkJY29ubiA9IENvbm5lY3REYXRhYmFzZSgidGVt cGxhdGUxIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCSAgIG9wdHMtPmNw YXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJ CQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJfQorCX0K KworCS8qCisJICogcHJvY2Vzc2luZyBwZ19yZXRzb3JlIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRU RVJOL05BTUUgaWYgbm8gY29ubmVjdGlvbi4KKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGdldF9k Ym5hbWVzX2xpc3RfdG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJZGJfZXhj bHVkZV9wYXR0ZXJucyk7CisKKwkvKiBPcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9h cHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCW5fZXJyb3JzX3RvdGFsID0g cHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzKGNvbm4sIGR1bXBkaXJwYXRoLCBvcHRzLT5maWxl bmFtZSk7CisKKwkvKiBDbG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3ZSBhcmUgZG9uZSB3aXRo IGdsb2JhbHMgYW5kIHBhdHRlcm5zLiAqLworCWlmIChjb25uKQorCQlQUWZpbmlzaChjb25uKTsK KworCS8qIEV4aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJaWYgKGRibmFt ZV9vaWRfbGlzdC5oZWFkID09IE5VTEwpCisJeworCQlwZ19sb2dfaW5mbygibm8gZGF0YWJhc2Ug bmVlZHMgdG8gcmVzdG9yZSBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX3RvdGFsX2RiKTsKKwkJ cmV0dXJuIG5fZXJyb3JzX3RvdGFsOworCX0KKworCXBnX2xvZ19pbmZvKCJuZWVkcyB0byByZXN0 b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51 bV90b3RhbF9kYik7CisKKwkvKgorCSAqIFRpbGwgbm93LCB3ZSBtYWRlIGEgbGlzdCBvZiBkYXRh YmFzZXMsIHRob3NlIG5lZWRzIHRvIGJlIHJlc3RvcmVkCisJICogYWZ0ZXIgc2tpcHBpbmcgbmFt ZXMgb2YgZXhjbHVkZS1kYXRhYmFzZS4gIE5vdyB3ZSBjYW4gbGF1bmNoIHBhcmFsbGVsCisJICog d29ya2VycyB0byByZXN0b3JlIHRoZXNlIGRhdGFiYXNlcy4KKwkgKi8KKwlkYm9pZF9jZWxsID0g ZGJuYW1lX29pZF9saXN0LmhlYWQ7CisKKwl3aGlsZShkYm9pZF9jZWxsICE9IE5VTEwpCisJewor CQljaGFyCQlzdWJkaXJwYXRoW01BWFBHUEFUSF07CisJCWludAkJCW5fZXJyb3JzOworCisJCS8q CisJCSAqIFdlIG5lZWQgdG8gcmVzZXQgb3ZlcnJpZGVfZGJuYW1lIHNvIHRoYXQgb2JqZWN0cyBj YW4gYmUgcmVzdG9yZWQgaW50bworCQkgKiBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UuICh1c2Vk IHdpdGggLWQvLS1kYm5hbWUgb3B0aW9uKQorCQkgKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMub3Zl cnJpZGVfZGJuYW1lKQorCQl7CisJCQlwZnJlZShvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFt ZSk7CisJCQlvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSA9IE5VTEw7CisJCX0KKworCQlz bnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUiLCBkdW1wZGly cGF0aCwgZGJvaWRfY2VsbC0+ZGJfb2lkKTsKKworCQlwZ19sb2dfaW5mbygicmVzdG9yaW5nIGRh dGFiYXNlIFwiJXNcIiIsIGRib2lkX2NlbGwtPmRiX25hbWUpOworCisJCS8qIFJlc3RvcmUgc2lu Z2xlIGRhdGFiYXNlLiAqLworCQluX2Vycm9ycyA9IHJlc3RvcmVPbmVEYXRhYmFzZShzdWJkaXJw YXRoLCBvcHRzLCBudW1Xb3JrZXJzLCB0cnVlLCBjb3VudCk7CisKKwkJLyogUHJpbnQgYSBzdW1t YXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1cmluZyBzaW5nbGUgZGF0YWJhc2UgcmVzdG9yZS4gKi8K KwkJaWYgKG5fZXJyb3JzKQorCQl7CisJCQluX2Vycm9yc190b3RhbCArPSBuX2Vycm9yczsKKwkJ CXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9y ZTogJWQiLCBkYm9pZF9jZWxsLT5kYl9uYW1lLCBuX2Vycm9ycyk7CisJCX0KKworCQlkYm9pZF9j ZWxsID0gZGJvaWRfY2VsbC0+bmV4dDsKKwkJY291bnQrKzsKKwl9CisKKwkvKiBMb2cgbnVtYmVy IG9mIHByb2Nlc3NlZCBkYXRhYmFzZXMuKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJlc3Rv cmVkIGRhdGFiYXNlcyBhcmUgJWQiLCBudW1fZGJfcmVzdG9yZSk7CisKKwkvKiBGcmVlIGRibmFt ZSBhbmQgZGJvaWQgbGlzdC4gKi8KKwlzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoJmRi bmFtZV9vaWRfbGlzdCk7CisKKwlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Cit9CisKKy8qCisgKiBw cm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMKKyAqCisgKiBUaGlzIHdpbGwgb3BlbiBnbG9iYWwu ZGF0IGZpbGUgYW5kIHdpbGwgZXhlY3V0ZSBhbGwgZ2xvYmFsIHNxbCBjb21tYW5kcyBvbmUKKyAq IGJ5IG9uZSBzdGF0ZW1lbnQuCisgKiBTZW1pY29sb24gaXMgY29uc2lkZXJlZCBhcyBzdGF0ZW1l bnQgdGVybWluYXRvci4gIElmIG91dGZpbGUgaXMgcGFzc2VkLCB0aGVuCisgKiB0aGlzIHdpbGwg Y29weSBhbGwgc3FsIGNvbW1hbmRzIGludG8gb3V0ZmlsZSByYXRoZXIgdGhlbiBleGVjdXRpbmcg dGhlbS4KKyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIHByb2Nlc3Np bmcgZ2xvYmFsLmRhdAorICovCitzdGF0aWMgaW50Citwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFu ZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgY29uc3QgY2hhciAqb3V0 ZmlsZSkKK3sKKwljaGFyICAgICAgICAgICAgZ2xvYmFsX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOwor CVBHcmVzdWx0CQkqcmVzdWx0OworCVN0cmluZ0luZm9EYXRhCXNxbHN0YXRlbWVudDsKKwlGSUxF CQkJKnBmaWxlOworCWludAkJCQluX2Vycm9ycyA9IDA7CisKKwlzbnByaW50ZihnbG9iYWxfZmls ZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyog T3BlbiBnbG9iYWwuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3BlbihnbG9iYWxfZmlsZV9wYXRo LCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIGdsb2JhbC5kYXQgZmlsZTogXCIlc1wiIiwgZ2xvYmFsX2ZpbGVfcGF0aCk7CisK KwkvKgorCSAqIElmIG91dGZpbGUgaXMgZ2l2ZW4sIHRoZW4ganVzdCBjb3B5IGFsbCBnbG9iYWwu ZGF0IGZpbGUgZGF0YSBpbnRvCisJICogb3V0ZmlsZS4KKwkgKi8KKwlpZiAob3V0ZmlsZSkKKwl7 CisJCWNvcHlfb3JfcHJpbnRfZ2xvYmFsX2ZpbGUob3V0ZmlsZSwgcGZpbGUpOworCQlyZXR1cm4g MDsKKwl9CisKKwkvKiBJbml0IHNxbHN0YXRlbWVudCB0byBhcHBlbmQgY29tbWFuZHMuICovCisJ aW5pdFN0cmluZ0luZm8oJnNxbHN0YXRlbWVudCk7CisKKwkvKiBQcm9jZXNzIGZpbGUgdGlsbCBF T0YgYW5kIGV4ZWN1dGUgc3FsIHN0YXRlbWVudHMuICovCisJd2hpbGUgKFJlYWRPbmVTdGF0ZW1l bnQoJnNxbHN0YXRlbWVudCwgcGZpbGUpICE9IEVPRikKKwl7CisJCXBnX2xvZ19pbmZvKCJleGVj dXRpbmcgcXVlcnk6ICVzIiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCQlyZXN1bHQgPSBQUWV4ZWMo Y29ubiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCisJCXN3aXRjaCAoUFFyZXN1bHRTdGF0dXMocmVz dWx0KSkKKwkJeworCQkJY2FzZSBQR1JFU19DT01NQU5EX09LOgorCQkJY2FzZSBQR1JFU19UVVBM RVNfT0s6CisJCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOgorCQkJCWJyZWFrOworCQkJZGVmYXVs dDoKKwkJCQluX2Vycm9ycysrOworCQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGV4ZWN1dGUg cXVlcnk6IFwiJXNcIiBcbkNvbW1hbmQgd2FzOiBcIiVzXCIiLCBQUWVycm9yTWVzc2FnZShjb25u KSwgc3Fsc3RhdGVtZW50LmRhdGEpOworCQl9CisJCVBRY2xlYXIocmVzdWx0KTsKKwl9CisKKwkv KiBQcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIGdsb2JhbC5kYXQuICov CisJaWYgKG5fZXJyb3JzKQorCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gZ2xv YmFsLmRhdCBmaWxlIHJlc3RvcmU6ICVkIiwgbl9lcnJvcnMpOworCisJZmNsb3NlKHBmaWxlKTsK KworCXJldHVybiBuX2Vycm9yczsKK30KKworLyoKKyAqIGNvcHlfb3JfcHJpbnRfZ2xvYmFsX2Zp bGUKKyAqCisgKiBUaGlzIHdpbGwgY29weSBnbG9iYWwuZGF0IGZpbGUgaW50byBvdXQgZmlsZS4g IElmICItIiBpcyB1c2VkIGFzIG91dGZpbGUsCisgKiB0aGVuIHByaW50IGNvbW1hbmRzIHRvIHRo ZSBzdGRvdXQuCisgKi8KK3N0YXRpYyB2b2lkCitjb3B5X29yX3ByaW50X2dsb2JhbF9maWxlKGNv bnN0IGNoYXIgKm91dGZpbGUsIEZJTEUgKnBmaWxlKQoreworCWNoYXIJb3V0X2ZpbGVfcGF0aFtN QVhQR1BBVEhdOworCUZJTEUJKk9QRjsKKwlpbnQJCWM7CisKKwkvKiAiLSIgaXMgdXNlZCBmb3Ig c3Rkb3V0LiAqLworCWlmIChzdHJjbXAob3V0ZmlsZSwgIi0iKSA9PSAwKQorCQlPUEYgPSBzdGRv dXQ7CisJZWxzZQorCXsKKwkJc25wcmludGYob3V0X2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMi LCBvdXRmaWxlKTsKKwkJT1BGID0gZm9wZW4ob3V0X2ZpbGVfcGF0aCwgUEdfQklOQVJZX1cpOwor CisJCWlmIChPUEYgPT0gTlVMTCkKKwkJeworCQkJZmNsb3NlKHBmaWxlKTsKKwkJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBmaWxlOiBcIiVzXCIiLCBvdXRmaWxlKTsKKwkJfQorCX0KKworCS8q IEFwcGVuZCBnbG9iYWwuZGF0IGludG8gb3V0IGZpbGUgb3IgcHJpbnQgdG8gdGhlIHN0ZG91dC4g Ki8KKwl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwkJZnB1dGMoYywgT1BGKTsK KworCWZjbG9zZShwZmlsZSk7CisKKwkvKiBDbG9zZSBvdXQgZmlsZS4gKi8KKwlpZiAoc3RyY21w KG91dGZpbGUsICItIikgIT0gMCkKKwkJZmNsb3NlKE9QRik7Cit9CisKKy8qCisgKiBzaW1wbGVf ZGJfb2lkX2xpc3RfYXBwZW5kCisgKgorICogYXBwZW5kcyBhIG5vZGUgdG8gdGhlIGxpc3QgaW4g dGhlIGVuZC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2lt cGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lkLAorCQljb25zdCBjaGFyICpkYm5h bWUpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbDsKKworCWNlbGwgPSBwZ19t YWxsb2Nfb2JqZWN0KFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwpOworCisJY2VsbC0+bmV4dCA9 IE5VTEw7CisJY2VsbC0+ZGJfb2lkID0gZGJfb2lkOworCWNlbGwtPmRiX25hbWUgPSBwZ19zdHJk dXAoZGJuYW1lKTsKKworCWlmIChsaXN0LT50YWlsKQorCQlsaXN0LT50YWlsLT5uZXh0ID0gY2Vs bDsKKwllbHNlCisJCWxpc3QtPmhlYWQgPSBjZWxsOworCWxpc3QtPnRhaWwgPSBjZWxsOworfQor CisvKgorICogc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGFs bCBjZWxsIGZyb20gZGJuYW1lIGFuZCBkYm9pZCBsaXN0LgorICovCitzdGF0aWMgdm9pZAorc2lt cGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCkK K3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1w bGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0Y2VsbCA9IE5VTEw7CisKKwl3aGlsZSAoY2VsbCkK Kwl7CisJCW5leHRjZWxsID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUgKGNlbGwpOworCQljZWxsID0g bmV4dGNlbGw7CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFpbCA9IE5VTEw7 Cit9CisKKy8qCisgKiBzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxl dGUgYWxsIGNlbGwgZnJvbSBzdHJpbmcgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9z dHJpbmdfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0ICpsaXN0KQoreworCVNpbXBs ZVN0cmluZ0xpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1wbGVTdHJpbmdMaXN0Q2Vs bCAgICAqY2VsbG5leHQgPSBOVUxMOworCisJd2hpbGUgKGNlbGwpCisJeworCQljZWxsbmV4dCA9 IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCQljZWxsID0gY2VsbG5leHQ7CisJfQorCisJ bGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFpbCA9IE5VTEw7Cit9CisKKy8qCisgKiBzaW1w bGVfZGJfb2lkX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGNlbGwgZnJvbSBkYXRhYmFzZSBh bmQgb2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRl KFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2Vs bCAqY2VsbCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldikKK3sKKwlpZiAocHJl diA9PSBOVUxMKQorCXsKKwkJbGlzdC0+aGVhZCA9IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwp OworCX0KKwllbHNlCisJeworCQlwcmV2LT5uZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2Vs bCk7CisJfQorfQorCisvKgorICogcXVvdGVfbGl0ZXJhbF9pbnRlcm5hbAorICovCitzdGF0aWMg c2l6ZV90CitxdW90ZV9saXRlcmFsX2ludGVybmFsKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3Jj LCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnM7CisJY2hhcgkgICAqc2F2ZWRzdCA9IGRz dDsKKworCWZvciAocyA9IHNyYzsgcyA8IHNyYyArIGxlbjsgcysrKQorCXsKKwkJaWYgKCpzID09 ICdcXCcpCisJCXsKKwkJCSpkc3QrKyA9IEVTQ0FQRV9TVFJJTkdfU1lOVEFYOworCQkJYnJlYWs7 CisJCX0KKwl9CisKKwkqZHN0KysgPSAnXCcnOworCXdoaWxlIChsZW4tLSA+IDApCisJeworCQlp ZiAoU1FMX1NUUl9ET1VCTEUoKnNyYywgdHJ1ZSkpCisJCQkqZHN0KysgPSAqc3JjOworCQkqZHN0 KysgPSAqc3JjKys7CisJfQorCSpkc3QrKyA9ICdcJyc7CisKKwlyZXR1cm4gZHN0IC0gc2F2ZWRz dDsKK30KKworLyoKKyAqIHF1b3RlX2xpdGVyYWxfY3N0cgorICoKKyAqCSAgcmV0dXJucyBhIHBy b3Blcmx5IHF1b3RlZCBsaXRlcmFsCisgKiBjb3BpZWQgZnJvbSBzcmMvYmFja2VuZC91dGlscy9h ZHQvcXVvdGUuYworICovCitzdGF0aWMgY2hhciAqCitxdW90ZV9saXRlcmFsX2NzdHIoY29uc3Qg Y2hhciAqcmF3c3RyKQoreworCWNoYXIJICAgKnJlc3VsdDsKKwlpbnQJCQlsZW47CisJaW50CQkJ bmV3bGVuOworCisJbGVuID0gc3RybGVuKHJhd3N0cik7CisKKwkvKiBXZSBtYWtlIGEgd29yc3Qt Y2FzZSByZXN1bHQgYXJlYTsgd2FzdGluZyBhIGxpdHRsZSBzcGFjZSBpcyBPSyAqLworCXJlc3Vs dCA9IHBnX21hbGxvYyhsZW4gKiAyICsgMyArIDEpOworCisJbmV3bGVuID0gcXVvdGVfbGl0ZXJh bF9pbnRlcm5hbChyZXN1bHQsIHJhd3N0ciwgbGVuKTsKKwlyZXN1bHRbbmV3bGVuXSA9ICdcMCc7 CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAx X2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCm9sZCBtb2RlIDEwMDY0 NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzdkODkzZDVlNmEuLjBiYmNkYmU4NGE3Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFf YmFzaWMucGwKQEAgLTIzNyw2ICsyMzcsMTEgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCSdwZ19y ZXN0b3JlOiBvcHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQgLTFcLy0tc2luZ2xlLXRyYW5zYWN0aW9u IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsg J3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScs ICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVk ZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8tLWdsb2JhbHMtb25s eVxFLywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUg dXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Jyk7CisKICMgYWxzbyBmYWlscyBm b3IgLXIgYW5kIC10LCBidXQgaXQgc2VlbXMgcG9pbnRsZXNzIHRvIGFkZCBtb3JlIHRlc3RzIGZv ciB0aG9zZS4KIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlbICdwZ19kdW1wYWxsJywgJy0tZXhjbHVk ZS1kYXRhYmFzZT1mb28nLCAnLS1nbG9iYWxzLW9ubHknIF0sCkBAIC0yNDQsNCArMjQ5LDggQEAg Y29tbWFuZF9mYWlsc19saWtlKAogCSdwZ19kdW1wYWxsOiBvcHRpb24gLS1leGNsdWRlLWRhdGFi YXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCiApOwog Citjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICd4JyBd LAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCAi eCI7XEUvLAorCSdwZ19kdW1wYWxsOiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQnKTsKIGRv bmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjMDRhNDdjZjIyMi4u YmU3NTczOWU5OTUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNzIyLDYgKzI3MjIs OCBAQCBTaHV0ZG93bk1vZGUKIFNpZ25UU1ZlY3RvcgogU2ltcGxlQWN0aW9uTGlzdAogU2ltcGxl QWN0aW9uTGlzdENlbGwKK1NpbXBsZURhdGFiYXNlT2lkTGlzdAorU2ltcGxlRGF0YWJhc2VPaWRM aXN0Q2VsbAogU2ltcGxlRWNvbnRleHRTdGFja0VudHJ5CiBTaW1wbGVPaWRMaXN0CiBTaW1wbGVP aWRMaXN0Q2VsbAotLSAKMi4zOS4zCgo= --0000000000003142180630ac4fde--