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 1thj0e-0069PO-WC for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Feb 2025 05:40:37 +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 1thj0d-007WHd-Cz for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Feb 2025 05:40:35 +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 1thj0c-007WHU-R6 for pgsql-hackers@lists.postgresql.org; Tue, 11 Feb 2025 05:40:35 +0000 Received: from mail-qt1-x835.google.com ([2607:f8b0:4864:20::835]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1thj0Y-000ASA-3B for pgsql-hackers@lists.postgresql.org; Tue, 11 Feb 2025 05:40:34 +0000 Received: by mail-qt1-x835.google.com with SMTP id d75a77b69052e-47196e33b43so14051731cf.1 for ; Mon, 10 Feb 2025 21:40:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739252429; x=1739857229; 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=su8slKRlO5ufZjFP+MG0xBsVopNq9O5DMPXRTBM7BhE=; b=Kz1IU0VW++Ad8wyxc/Ii1wQU3WDt2UsTWt/00/hjRhuEI+OxKOVMyQ1gGtX0tOGIuW 0aKH9BCgB2bW5IbmZrtN/H+Hq3pv4mLZ4aRalWnp/y2ReBW8jpiUbd5L08+xEIHz5E33 BjExMtZ38sn2M9Fi5XGe79Z7KHwIT0tFcue29OYey3J9yDaNqt77uLquTbp+MQ0nM7Qe ff8KoRuZz25uKXdRBGPd7crNVz0kRYwlY+IxdLyZRELHm7+mT5vimol0KAZospO09v9y 9YvokbV+CHCxD4hybhGkbxPqmhrMHj2iIA7JCeCXI2cx9wT95w2wQw89NcZc9Ranj88k 3cbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739252429; x=1739857229; 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=su8slKRlO5ufZjFP+MG0xBsVopNq9O5DMPXRTBM7BhE=; b=hdxBBgg0rHDxkaLPXGXkJ/u5rrsOIe+SQqtD1RN4tgy7QcbYVFjG/PRfopAtqulzKm J31aAAI5zxn5+WK2ZwFeLWFhHCXsXzbkq8DLWvJ8b8BqYuMQ+h8DinHOHcXMcDkQvRxp RYCx8dMkjIGWfVhMWkwlZhPatVWQdbJq5luZjNXRNPDAwYQXSa+OnmytdjFIHLmp0q19 Te1uftMqAq6kK5DjdR3k/mEI0wMNkuzbXyfmEhJokJ/6anqgoECOHxG7d+9rozuaSiBn 4a/wRYQAzXLn04u2H2YhEJyZRwVv1q9mUDvKqjTb6/7qCwXpBd+6VvgDTSenl0jn4MyZ 7saA== X-Forwarded-Encrypted: i=1; AJvYcCXXrdKH4n0wIemJB9/I26Gakm1cWDMUCo0y4+xzBQSVW9hX0OZNiXiOKVcEE827+T0n8OzVJLim3kFXSxVI@lists.postgresql.org X-Gm-Message-State: AOJu0YwB8h74M7otZzhLIMAORFR/W083XsdE5ZvXhM4228jMReP6vWla +z0z04+HWtb3lVqQP6K8+SCg/Ir84YmsZ2IoEaS3e7Jx9i8A7yyQby+wPG6ALVThtRwtwVqT3nh 51q9Apf2SELUY/NOz/AQCqt0IeTQ= X-Gm-Gg: ASbGnct6Wsn2vI4vdESMnvGEg5aw2nKCnVmKAHyUOESgeDr8Qe67pn6GqWanz0KkxAN o4TLNjVC7G2p+Yj1egGLE6DOphwXQlsP76FmEkAm5fJm6onGEr5jSfOl8QFW5Dp/noytXbTN/Jn Na0wYr2ZOkdW0msATlNDdzylZJ5eiCmBA= X-Google-Smtp-Source: AGHT+IENegwn+8k46NqcIsnEcLXm1nzL1LGcb7IBq6ggKh1D5MrbJ55cJ5j7pSekWbw/oFADHFDHM83kEnV8zNByZFU= X-Received: by 2002:a05:622a:5444:b0:471:8c1a:8bec with SMTP id d75a77b69052e-4718c1a8df3mr70194361cf.33.1739252429335; Mon, 10 Feb 2025 21:40:29 -0800 (PST) MIME-Version: 1.0 References: <202501110844.5ztsym4vbflm@alvherre.pgsql> In-Reply-To: From: Mahendra Singh Thalor Date: Tue, 11 Feb 2025 11:10:17 +0530 X-Gm-Features: AWEUYZmH-6NJX-NSlrEhqOqnjHIpG7X6-D9j9zQFXzMnRLU5ecx_j1xF2dAEG0E Message-ID: Subject: Re: Non-text mode for pg_dumpall To: jian he Cc: Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000039ee2f062dd7432c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000039ee2f062dd7432c Content-Type: text/plain; charset="UTF-8" Thanks Jian. On Tue, 4 Feb 2025 at 07:35, jian he wrote: > > hi. > > just a quick response for v15. > > the pg_restore man page says option --list as "List the table of > contents of the archive". > but > $BIN10/pg_restore --format=directory --list --file=1.sql dir10 > also output the contents of "global.dat", we should not output it. I think we can add an error for --list option if used with the dump of pg_dumpall. If a user wants to use --list option, then they can use a single dump file. > > in restoreAllDatabases, we can do the following change: > ``` > /* Open global.dat file and execute/append all the global sql commands. */ > if (!opts->tocSummary) > process_global_sql_commands(conn, dumpdirpath, opts->filename); > ``` > > > what should happen with > $BIN10/pg_restore --format=directory --globals-only --verbose dir10 --list > > Should we error out saying "--globals-only" and "--list" are conflict options? > if so then in main function we can do the following change: Fixed. > > ``` > if (globals_only) > { > process_global_sql_commands(conn, inputFileSpec, opts->filename); > if (conn) > PQfinish(conn); > pg_log_info("databases restoring is skipped as -g/--globals-only > option is specified"); > } > ``` > > > in restoreAllDatabases, if num_db_restore == 0, we will still call > process_global_sql_commands. > I am not sure this is what we expected. This is correct. We should run global commands as we are dumping those even if we don't dump any database. Apart from these, I merged v15 delta to print db names. Either we can print the db name or we can remove also but as of now, I merged delta patch. Here, I am attaching an updated patch for review and testing. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000039ee2f062dd7432c Content-Type: application/octet-stream; name="v16_pg_dumpall-with-non-text_format-11th_feb.patch" Content-Disposition: attachment; filename="v16_pg_dumpall-with-non-text_format-11th_feb.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m701z8is0 RnJvbSAzNmFlYTExZTA3ZWUyMjgzOGQ5Njk4ZmFhMGZhNTUxOGUzMjlhYmM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAxMSBGZWIgMjAyNSAxMDo1ODowNCArMDUzMApTdWJqZWN0OiBbUEFU Q0hdIHBnX2R1bXBhbGwgd2l0aCBkaXJlY3Rvcnl8dGFyfGN1c3RvbSBmb3JtYXQgYW5kIHJlc3Rv cmUgIGl0IAogYnkgcGdfcmVzdG9yZQoKbmV3IG9wdGlvbiB0byBwZ19kdW1wYWxsOgotRiwgLS1m b3JtYXQ9ZHx0fGN8cCAgb3V0cHV0IGZpbGUgZm9ybWF0ICggcGxhaW4gdGV4dCAoZGVmYXVsdCkp CgpFeDoxIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLS1maWxlPWR1bXBEaXJOYW1l CkV4OjIgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PXRhciAtLWZpbGU9ZHVtcERpck5hbWUKRXg6MyAu L3BnX2R1bXBhbGwgLS1mb3JtYXQ9Y3VzdG9tIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDo0IC4vcGdf ZHVtcGFsbCAtLWZvcm1hdD1wbGFpbiAtLWZpbGU9ZHVtcERpck5hbWUKCmR1bXBzIGFyZSBhczoK Z2xvYmFsLmRhdCA6OjogZ2xvYmFsIHNxbCBjb21tYW5kcyBpbiBzaW1wbGUgcGxhaW4gZm9ybWF0 Cm1hcC5kYXQuICAgOjo6IGRib2lkIGRibmFtZSAtLS1lbnRyaWVzIGZvciBhbGwgZGF0YWJhc2Vz IGluIHNpbXBsZSB0ZXh0IGZvcm0KZGF0YWJhc2VzLiA6OjoKICAgICAgc3ViZGlyICAgICBkYm9p ZDEgIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3JtYXQKICAgICAgc3Vi ZGlyICAgICBkYm9pZDIuIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3Jt YXQKICAgICAgICAgICAgICBldGMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5PVEU6CmlmIG5lZWRlZCwg cmVzdG9yZSBzaW5nbGUgZGIgYnkgcGFydGljdWxhciBzdWJkaXIKCkV4OiAuL3BnX3Jlc3RvcmUg LS1mb3JtYXQ9ZGlyZWN0b3J5IC1kIHBvc3RncmVzIGR1bXBEaXJOYW1lL2RhdGFiYXNlcy81CiAg IC0tIGhlcmUsIDUgaXMgdGhlIGRib2lkIG9mIHBvc3RncmVzIGRiCiAgIC0tIHRvIGdldCBkYm9p ZCwgcmVmZXIgZGJuYW1lIGluIG1hcC5maWxlCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpuZXcgb3B0aW9u cyB0byBwZ19yZXN0b3JlOgotZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25s eSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzCi0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJO ICAgZXhjbHVkZSBkYXRhYmFzZSB3aG9zZSBuYW1lIG1hdGNoZXMgcGF0dGVybgoKV2hlbiB3ZSBn aXZlIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlvbiwgdGhlbiBvbmx5IHJlc3RvcmUgZ2xvYmFscywg bm8gZGIgcmVzdG9yaW5nLgoKRGVzaWduOgpXaGVuIC0tZm9ybWF0PWR8dHxjIGlzIHNwZWNpZmll ZCBhbmQgdGhlcmUgaXMgbm8gdG9jLmRhdCBpbiBtYWluIGRpcmVjdG9yeSwgdGhlbiBjaGVjawpm b3IgZ2xvYmFsLmRhdCB0byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuIElmIGdsb2JhbC5kYXQgZmls ZSBpcyBleGlzdCBpbiBkaXJlY3RvcnksCnRoZW4gZmlyc3QgcmVzdG9yZSBhbGwgZ2xvYmFscyBm cm9tIGdsb2JhbC5kYXQgYW5kIHRoZW4gcmVzdG9yZSBhbGwgZGF0YWJhc2VzIG9uZSBieSBvbmUK ZnJvbSBtYXAuZGF0IGxpc3QgKGlmIGV4aXN0KQoKVE9ETzE6IFdlIG5lZWQgdG8gdGhpbmsgZm9y IC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOIGZvciBwZ19yZXN0b3JlLgphcyBvZiBub3csIFNF TEVDVCAxIFdIRVJFIFhYWCBPUEVSQVRPUihwZ19jYXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09M TEFURSBwZ19jYXRhbG9nLmRlZmF1bHQKaWYgZGIgY29ubmVjdGlvbiwKaWYgbm8gZGIgY29ubmVj dGlvbiwgdGhlbiBQQVRURVJOPU5BTUUgbWF0Y2hpbmcgb25seQoKVE9ETzI6IFdlIG5lZWQgdG8g bWFrZSBjaGFuZ2VzIGZvciBleGl0X25pY2VseSBhcyB3ZSBhcmUgb25lIGVudHJ5IGZvciBlYWNo IGRhdGFiYXNlIHdoaWxlCnJlc3RvcmluZy4gTUFYX09OX0VYSVRfTklDRUxZCgpUT0RPMzogc29t ZSBtb3JlIHRlc3QgY2FzZXMgZm9yIG5ldyBhZGRlZCBvcHRpb25zLgoKVE9ETzQ6IFdlIGNhbiBk dW1wIGFuZCByZXN0b3JlIGRhdGFiYXNlcyBpbiBwYXJhbGxlbCBtb2RlLgpUaGlzIG5lZWRzIG1v cmUgc3R1ZHkKCnRocmVhZDoKaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9m bGF0L0NBS1l0TkFwOXZPdHlkWEwzX3BuR0olMkJUZXRadE4lM0RGWVNuWlNNQ3FYY2VVM21rSFB4 UGclNDBtYWlsLmdtYWlsLmNvbSMwNjY0MzNjYjVhZTAwN2NiZTM1ZmVmZGRmNzk2ZDUyZgotLS0K LS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbCAgICAgICAgIHwgIDgwICsrLQog ZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgICAgICAgICB8ICAzMSArCiBzcmMvYmlu L3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICA4ICstCiBzcmMvYmluL3BnX2R1 bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jIHwgMjg2ICsrKysrKysrCiBzcmMvYmluL3BnX2R1 bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIHwgIDI2ICsKIHNyYy9iaW4vcGdfZHVtcC9tZXNv bi5idWlsZCAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5o ICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5jICAgICB8ICA0MSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAgICAgICAg ICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jICAgICAgICB8ICAg MyArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICB8ICAgMiArLQog c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyAgICAgICAgICAgICB8IDU1MiArKysrKysrLS0t LS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAgICAgIHwgNzk3ICsr KysrKysrKysrKysrKysrKysrKystCiBzcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgICAg ICAgICAgIHwgICA5ICsKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg fCAgIDIgKwogMTUgZmlsZXMgY2hhbmdlZCwgMTUxMyBpbnNlcnRpb25zKCspLCAzMzIgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxs X3Jlc3RvcmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVt cGFsbF9yZXN0b3JlLmgKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3JjL2Jpbi9wZ19k dW1wL3QvMDAxX2Jhc2ljLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1w YWxsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCAzOWQ5M2My YzBlMy4uNmUxOTc1ZjVmZjAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFs bC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xNiw3ICsx Niw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5hbWVkaXY+CiAgIDxyZWZu YW1lPnBnX2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8cHJvZHVj dG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgaW50byBhIHNj cmlwdCBmaWxlPC9yZWZwdXJwb3NlPgorICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGJhc2VkIG9uIHNw ZWNpZmllZCBkdW1wIGZvcm1hdCA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCiAgPHJl ZnN5bm9wc2lzZGl2PgpAQCAtMTIxLDcgKzEyMSw4MyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRp b24KICAgICAgICA8cGFyYT4KICAgICAgICAgU2VuZCBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBm aWxlLiAgSWYgdGhpcyBpcyBvbWl0dGVkLCB0aGUKICAgICAgICAgc3RhbmRhcmQgb3V0cHV0IGlz IHVzZWQuCi0gICAgICAgPC9wYXJhPgorICAgICAgICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4gYmUg b21pdHRlZCBvbmx5IHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBwbGFpbgorICAg ICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IGZvcm1hdCBvZiBkdW1wIGZpbGVzLiAgSWYg d2Ugd2FudCB0byBkdW1wIGFsbCB0aGUgZGF0YWJhc2VzLAorICAgICAgICB0aGVuIHBhc3MgdGhp cyBhcyBub24tcGxhaW4gc28gdGhhdCBkdW1wIG9mIGFsbCBkYXRhYmFzZXMgY2FuIGJlIHRha2Vu CisgICAgICAgIGluIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbiBhcmNoaXZlIGZvcm1hdC4KKyAg ICAgICAgYnkgZGVmYXVsdCwgdGhpcyBpcyBwbGFpbiBmb3JtYXQuCisKKyAgICAgICAgSWYgbm9u LXBsYWluIG1vZGUgaXMgcGFzc2VkLCB0aGVuIGdsb2JhbC5kYXQgKGdsb2JhbCBzcWwgY29tbWFu ZHMpIGFuZAorICAgICAgICBtYXAuZGF0KGRib2lkIGFuZCBkYm5hbWVzIGxpc3Qgb2YgYWxsIHRo ZSBkYXRhYmFzZXMpIGZpbGVzIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAgQXBhcnQgZnJvbSB0 aGVzZSBmaWxlcywgb25lIHN1YmRpcmVjdG9yeSB3aXRoIGRhdGFiYXNlcyBuYW1lIHdpbGwgYmUg Y3JlYXRlZC4KKyAgICAgICAgVW5kZXIgdGhpcyBkYXRhYmFzZXMgc3ViZGlyZWN0b3J5LCB0aGVy ZSB3aWxsIGJlIGZpbGVzIHdpdGggZGJvaWQgbmFtZSBmb3IgZWFjaAorICAgICAgICBkYXRhYmFz ZSBhbmQgaWYgPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBkaXJlY3RvcnksIHRoZW4gdG9j LmRhdCBhbmQgb3RoZXIKKyAgICAgICAgZHVtcCBmaWxlcyB3aWxsIGJlIHVuZGVyIGRib2lkIHN1 YmRpcmVjdG9yeS4KKworICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0ZW50 cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlz dGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGRpcmVjdG9yeS1m b3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBVbmRlciBk Ym9pZAorICAgICAgICAgICBzdWJkaXJlY3RvcnksIHRoaXMgd2lsbCBjcmVhdGUgYSBkaXJlY3Rv cnkgd2l0aCBvbmUgZmlsZSBmb3IgZWFjaCB0YWJsZSBhbmQgbGFyZ2UKKyAgICAgICAgICAgb2Jq ZWN0IGJlaW5nIGR1bXBlZCwgcGx1cyBhIHNvLWNhbGxlZCBUYWJsZSBvZiBDb250ZW50cyBmaWxl IGRlc2NyaWJpbmcgdGhlIGR1bXBlZAorICAgICAgICAgICBvYmplY3RzIGluIGEgbWFjaGluZS1y ZWFkYWJsZSBmb3JtYXQgdGhhdCBwZ19yZXN0b3JlIGNhbiByZWFkLiBBIGRpcmVjdG9yeSBmb3Jt YXQKKyAgICAgICAgICAgYXJjaGl2ZSBjYW4gYmUgbWFuaXB1bGF0ZWQgd2l0aCBzdGFuZGFyZCBV bml4IHRvb2xzOyBmb3IgZXhhbXBsZSwgZmlsZXMgaW4gYW4KKyAgICAgICAgICAgdW5jb21wcmVz c2VkIGFyY2hpdmUgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgZ3ppcCwgbHo0LCBvciB6c3Rk IHRvb2xzLiBUaGlzCisgICAgICAgICAgIGZvcm1hdCBpcyBjb21wcmVzc2VkIGJ5IGRlZmF1bHQg dXNpbmcgZ3ppcCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4KKyAgICAgICAgICA8 L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKwor ICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cDwvbGl0ZXJh bD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0ZXJhbD48L3Rlcm0+ CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1 dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0aGUgZGVmYXVsdCkuCisgICAgICAgICAg PC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisK KyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmM8L2xpdGVy YWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0 cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jl c3RvcmUuIFRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgIGRpcmVjdG9yeSBvdXRwdXQgZm9y bWF0LCB0aGlzIGlzIHRoZSBtb3N0IGZsZXhpYmxlIG91dHB1dCBmb3JtYXQgaW4gdGhhdCBpdCBh bGxvd3MgbWFudWFsCisgICAgICAgICAgIHNlbGVjdGlvbiBhbmQgcmVvcmRlcmluZyBvZiBhcmNo aXZlZCBpdGVtcyBkdXJpbmcgcmVzdG9yZS4gVGhpcyBmb3JtYXQgaXMgYWxzbworICAgICAgICAg ICBjb21wcmVzc2VkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgIDx2YXJsaXN0ZW50 cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHRhci1mb3JtYXQgYXJjaGl2 ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgdGFyIGZvcm1hdCBpcwor ICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGRpcmVjdG9yeSBmb3JtYXQ6IGV4dHJhY3Rp bmcgYSB0YXItZm9ybWF0IGFyY2hpdmUgcHJvZHVjZXMgYSB2YWxpZAorICAgICAgICAgICBkaXJl Y3RvcnktZm9ybWF0IGFyY2hpdmUuIEhvd2V2ZXIsIHRoZSB0YXIgZm9ybWF0IGRvZXMgbm90IHN1 cHBvcnQgY29tcHJlc3Npb24uIEFsc28sCisgICAgICAgICAgIHdoZW4gdXNpbmcgdGFyIGZvcm1h dCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGFibGUgZGF0YSBpdGVtcyBjYW5ub3QgYmUgY2hhbmdl ZCBkdXJpbmcgcmVzdG9yZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVt PgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAg ICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggYjhiMjdlMTcxOWUuLjA2MDliN2ViNTM0IDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMjAsNiArMjAsOCBAQCBQb3N0Z3JlU1FMIGRv Y3VtZW50YXRpb24KICAgPHJlZnB1cnBvc2U+CiAgICByZXN0b3JlIGEgPHByb2R1Y3RuYW1lPlBv c3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuCiAgICBhcmNoaXZlIGZpbGUg Y3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+CisgICBvciByZXN0 b3JlIG11bHRpcGxlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJh c2UgZnJvbSBhbgorICAgYXJjaGl2ZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCBieSA8YXBwbGljYXRp b24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+CiAgIDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVk aXY+CiAKQEAgLTE2Niw2ICsxNjgsMjUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAg ICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U9PHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHJlc3RvcmUgZGF0 YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+LgorICAgICAgICBNdWx0aXBsZSBwYXR0ZXJu cyBjYW4gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyBtdWx0aXBsZQorICAgICAgICA8b3B0aW9uPi0t ZXhjbHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBzd2l0Y2hlcy4gIFRoZQorICAgICAgICA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+IHBhcmFtZXRlciBp cworICAgICAgICBpbnRlcnByZXRlZCBhcyBhIHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBzYW1l IHJ1bGVzIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPidz IDxsaXRlcmFsPlxkPC9saXRlcmFsPgorICAgICAgICBjb21tYW5kcyAoc2VlIDx4cmVmIGxpbmtl bmQ9ImFwcC1wc3FsLXBhdHRlcm5zIi8+KSwKKyAgICAgICAgc28gbXVsdGlwbGUgZGF0YWJhc2Vz IGNhbiBhbHNvIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgd2lsZGNhcmQKKyAgICAgICAgY2hhcmFj dGVycyBpbiB0aGUgcGF0dGVybi4gIFdoZW4gdXNpbmcgd2lsZGNhcmRzLCBiZSBjYXJlZnVsIHRv CisgICAgICAgIHF1b3RlIHRoZSBwYXR0ZXJuIGlmIG5lZWRlZCB0byBwcmV2ZW50IHNoZWxsIHdp bGRjYXJkIGV4cGFuc2lvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAg ICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9w dGlvbj4tZTwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGl0LW9uLWVy cm9yPC9vcHRpb24+PC90ZXJtPgpAQCAtMzE1LDYgKzMzNiwxNiBAQCBQb3N0Z3JlU1FMIGRvY3Vt ZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgor ICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGdsb2JhbCBv YmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAgPC9w YXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZh cmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVy bT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv TWFrZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggMjMzYWQxNWNhNzUuLmE0 ZTU1N2Q2MmM3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC00NywxMSArNDcsMTEgQEAgYWxsOiBwZ19kdW1wIHBn X3Jlc3RvcmUgcGdfZHVtcGFsbAogcGdfZHVtcDogcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBf c29ydC5vICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2Ut bGlicGdmZXV0aWxzCiAJJChDQykgJChDRkxBR1MpIHBnX2R1bXAubyBjb21tb24ubyBwZ19kdW1w X3NvcnQubyAkKE9CSlMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChY KQogCi1wZ19yZXN0b3JlOiBwZ19yZXN0b3JlLm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3Vi bWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKLQkkKENDKSAkKENGTEFHUykgcGdf cmVzdG9yZS5vICQoT0JKUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAk KFgpCitwZ19yZXN0b3JlOiBwZ19yZXN0b3JlLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQo T0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0 aWxzCisJJChDQykgJChDRkxBR1MpIHBnX3Jlc3RvcmUubyBjb21tb25fZHVtcGFsbF9yZXN0b3Jl Lm8gJChPQkpTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAot cGdfZHVtcGFsbDogcGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMp IHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwot CSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4z MlJFUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCitwZ19kdW1w YWxsOiBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJt YWtlLWxpYnBnZmV1dGlscworCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxz Lm8gZmlsdGVyLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lOMzJSRVMpICQoTERGTEFH UykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQogCiBpbnN0YWxsOiBhbGwgaW5zdGFs bGRpcnMKIAkkKElOU1RBTExfUFJPR1JBTSkgcGdfZHVtcCQoWCkgJyQoREVTVERJUikkKGJpbmRp ciknL3BnX2R1bXAkKFgpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBh bGxfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjE2MmNmNjk0MTIKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCkBA IC0wLDAgKzEsMjg2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21tb25fZHVtcGFs bF9yZXN0b3JlLmMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICog VGhpcyBpcyBhIGNvbW1vbiBmaWxlIGZvciBwZ19kdW1wYWxsIGFuZCBwZ19yZXN0b3JlLgorICog c3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSAiY29t bW9uL2Nvbm5lY3QuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImNv bW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21tb25fZHVtcGFsbF9yZXN0b3JlLmgiCisjaW5j bHVkZSAiZHVtcHV0aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCisK K3N0YXRpYyBjaGFyICpjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29u c3QgY2hhciAqKnZhbHVlcyk7CisjZGVmaW5lIGV4aXRfbmljZWx5KGNvZGUpIGV4aXQoY29kZSkK KworLyoKKyAqIGNvbm5lY3REYXRhYmFzZQorICoKKyAqIE1ha2UgYSBkYXRhYmFzZSBjb25uZWN0 aW9uIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuICBBbgorICogaW50ZXJhY3RpdmUgcGFzc3dv cmQgcHJvbXB0IGlzIGF1dG9tYXRpY2FsbHkgaXNzdWVkIGlmIHJlcXVpcmVkLgorICoKKyAqIElm IGZhaWxfb25fZXJyb3IgaXMgZmFsc2UsIHdlIHJldHVybiBOVUxMIHdpdGhvdXQgcHJpbnRpbmcg YW55IG1lc3NhZ2UKKyAqIG9uIGZhaWx1cmUsIGJ1dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQgcGFz c3dvcmQgZm9yIHRoZSBuZXh0IHRyeS4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgZ2xvYmFsIHZh cmlhYmxlICdjb25uc3RyJyBpcyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZworICogY29udGFp bmluZyB0aGUgb3B0aW9ucyB1c2VkLgorICovCitQR2Nvbm4gKgorY29ubmVjdERhdGFiYXNlKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsCisJCQkJY29u c3QgY2hhciAqcGdob3N0LCBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwK KwkJCQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvciwgY29uc3Qg Y2hhciAqcHJvZ25hbWUsCisJCQkJY29uc3QgY2hhciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3Zl cnNpb24pCit7CisJUEdjb25uCSAgICpjb25uOworCWJvb2wJCW5ld19wYXNzOworCWNvbnN0IGNo YXIgKnJlbW90ZXZlcnNpb25fc3RyOworCWludAkJCW15X3ZlcnNpb247CisJY29uc3QgY2hhciAq KmtleXdvcmRzID0gTlVMTDsKKwljb25zdCBjaGFyICoqdmFsdWVzID0gTlVMTDsKKwlQUWNvbm5p bmZvT3B0aW9uICpjb25uX29wdHMgPSBOVUxMOworCXN0YXRpYyBjaGFyICpwYXNzd29yZCA9IE5V TEw7CisJaW50CQkJc2VydmVyX3ZlcnNpb25fdGVtcDsKKworCWlmIChwcm9tcHRfcGFzc3dvcmQg PT0gVFJJX1lFUyAmJiAhcGFzc3dvcmQpCisJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFz c3dvcmQ6ICIsIGZhbHNlKTsKKworCS8qCisJICogU3RhcnQgdGhlIGNvbm5lY3Rpb24uICBMb29w IHVudGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0ZWQgYnkKKwkgKiBiYWNrZW5kLgor CSAqLworCWRvCisJeworCQlpbnQJCQlhcmdjb3VudCA9IDY7CisJCVBRY29ubmluZm9PcHRpb24g KmNvbm5fb3B0OworCQljaGFyCSAgICplcnJfbXNnID0gTlVMTDsKKwkJaW50CQkJaSA9IDA7CisK KwkJZnJlZShrZXl3b3Jkcyk7CisJCWZyZWUodmFsdWVzKTsKKwkJUFFjb25uaW5mb0ZyZWUoY29u bl9vcHRzKTsKKworCQkvKgorCQkgKiBNZXJnZSB0aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBn aXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rpb24gc3RyaW5nCisJCSAqIGFuZCBvdGhlciBvcHRpb25z LiAgRXhwbGljaXRseSBkaXNjYXJkIGFueSBkYm5hbWUgdmFsdWUgaW4gdGhlCisJCSAqIGNvbm5l Y3Rpb24gc3RyaW5nOyBvdGhlcndpc2UsIFBRY29ubmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJw cmV0CisJCSAqIHRoYXQgdmFsdWUgYXMgYmVpbmcgaXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcu CisJCSAqLworCQlpZiAoY29ubmVjdGlvbl9zdHJpbmcpCisJCXsKKwkJCWNvbm5fb3B0cyA9IFBR Y29ubmluZm9QYXJzZShjb25uZWN0aW9uX3N0cmluZywgJmVycl9tc2cpOworCQkJaWYgKGNvbm5f b3B0cyA9PSBOVUxMKQorCQkJCXBnX2ZhdGFsKCIlcyIsIGVycl9tc2cpOworCisJCQlmb3IgKGNv bm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsr KQorCQkJeworCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFsw XSAhPSAnXDAnICYmCisJCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9 IDApCisJCQkJCWFyZ2NvdW50Kys7CisJCQl9CisKKwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgo YXJnY291bnQgKyAxKSAqIHNpemVvZigqa2V5d29yZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxv YzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOworCisJCQlmb3IgKGNvbm5fb3B0 ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJ eworCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAn XDAnICYmCisJCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJ CQkJeworCQkJCQlrZXl3b3Jkc1tpXSA9IGNvbm5fb3B0LT5rZXl3b3JkOworCQkJCQl2YWx1ZXNb aV0gPSBjb25uX29wdC0+dmFsOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UK KwkJeworCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCpr ZXl3b3JkcykpOworCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVv ZigqdmFsdWVzKSk7CisJCX0KKworCQlpZiAocGdob3N0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9 ICJob3N0IjsKKwkJCXZhbHVlc1tpXSA9IHBnaG9zdDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGdw b3J0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJwb3J0IjsKKwkJCXZhbHVlc1tpXSA9IHBncG9y dDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGd1c2VyKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJ1 c2VyIjsKKwkJCXZhbHVlc1tpXSA9IHBndXNlcjsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGFzc3dv cmQpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBhc3N3b3JkIjsKKwkJCXZhbHVlc1tpXSA9IHBh c3N3b3JkOworCQkJaSsrOworCQl9CisJCWlmIChkYm5hbWUpCisJCXsKKwkJCWtleXdvcmRzW2ld ID0gImRibmFtZSI7CisJCQl2YWx1ZXNbaV0gPSBkYm5hbWU7CisJCQlpKys7CisJCX0KKwkJa2V5 d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7CisJCXZhbHVlc1tpXSA9IHBy b2duYW1lOworCQlpKys7CisKKwkJbmV3X3Bhc3MgPSBmYWxzZTsKKwkJY29ubiA9IFBRY29ubmVj dGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMsIHRydWUpOworCisJCWlmICghY29ubikKKwkJCXBn X2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwor CisJCWlmIChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCAmJgorCQkJUFFjb25uZWN0 aW9uTmVlZHNQYXNzd29yZChjb25uKSAmJgorCQkJIXBhc3N3b3JkICYmCisJCQlwcm9tcHRfcGFz c3dvcmQgIT0gVFJJX05PKQorCQl7CisJCQlQUWZpbmlzaChjb25uKTsKKwkJCXBhc3N3b3JkID0g c2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKKwkJCW5ld19wYXNzID0gdHJ1ZTsK KwkJfQorCX0gd2hpbGUgKG5ld19wYXNzKTsKKworCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBi YWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCisJaWYgKFBRc3RhdHVz KGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCXsKKwkJaWYgKGZhaWxfb25fZXJyb3IpCisJCQlw Z19mYXRhbCgiJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCWVsc2UKKwkJeworCQkJUFFm aW5pc2goY29ubik7CisKKwkJCWZyZWUoa2V5d29yZHMpOworCQkJZnJlZSh2YWx1ZXMpOworCQkJ UFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisK KwkvKgorCSAqIE9rLCBjb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5LiBSZW1lbWJlciB0aGUgb3B0aW9u cyB1c2VkLCBpbiB0aGUgZm9ybSBvZiBhCisJICogY29ubmVjdGlvbiBzdHJpbmcuCisJICovCisJ aWYgKGNvbm5zdHIpCisJCSpjb25uc3RyID0gY29uc3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFs dWVzKTsKKworCWZyZWUoa2V5d29yZHMpOworCWZyZWUodmFsdWVzKTsKKwlQUWNvbm5pbmZvRnJl ZShjb25uX29wdHMpOworCisJLyogQ2hlY2sgdmVyc2lvbiAqLworCXJlbW90ZXZlcnNpb25fc3Ry ID0gUFFwYXJhbWV0ZXJTdGF0dXMoY29ubiwgInNlcnZlcl92ZXJzaW9uIik7CisJaWYgKCFyZW1v dGV2ZXJzaW9uX3N0cikKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24i KTsKKwlzZXJ2ZXJfdmVyc2lvbl90ZW1wID0gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOworCWlmIChz ZXJ2ZXJfdmVyc2lvbl90ZW1wID09IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2Vy dmVyIHZlcnNpb24gXCIlc1wiIiwKKwkJCQkgcmVtb3RldmVyc2lvbl9zdHIpOworCisJLyogSWYg bmVlZGVkLCB0aGVuIGNvcHkgc2VydmVyIHZlcnNpb24gdG8gb3V0ZXIgZnVuY3Rpb24uICovCisJ aWYgKHNlcnZlcl92ZXJzaW9uKQorCQkqc2VydmVyX3ZlcnNpb24gPSBzZXJ2ZXJfdmVyc2lvbl90 ZW1wOworCisJbXlfdmVyc2lvbiA9IFBHX1ZFUlNJT05fTlVNOworCisJLyoKKwkgKiBXZSBhbGxv dyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVh c2Ugb2YKKwkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVj ayBpbiBwZ19kdW1wLmMuKQorCSAqLworCWlmIChteV92ZXJzaW9uICE9IHNlcnZlcl92ZXJzaW9u X3RlbXAKKwkJJiYgKHNlcnZlcl92ZXJzaW9uX3RlbXAgPCA5MDIwMCB8fAorCQkJKHNlcnZlcl92 ZXJzaW9uX3RlbXAgLyAxMDApID4gKG15X3ZlcnNpb24gLyAxMDApKSkKKwl7CisJCXBnX2xvZ19l cnJvcigiYWJvcnRpbmcgYmVjYXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOworCQlw Z19sb2dfZXJyb3JfZGV0YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwK KwkJCQkJCQlyZW1vdGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04pOworCQlleGl0 X25pY2VseSgxKTsKKwl9CisKKwlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VD VVJFX1NFQVJDSF9QQVRIX1NRTCkpOworCisJcmV0dXJuIGNvbm47Cit9CisKKy8qCisgKiBjb25z dHJ1Y3RDb25uU3RyCisgKgorICogQ29uc3RydWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0 aGUgZ2l2ZW4ga2V5d29yZC92YWx1ZSBwYWlycy4gSXQgaXMKKyAqIHVzZWQgdG8gcGFzcyB0aGUg Y29ubmVjdGlvbiBvcHRpb25zIHRvIHRoZSBwZ19kdW1wIHN1YnByb2Nlc3MuCisgKgorICogVGhl IGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBleGNsdWRlZDoKKyAqCWRibmFtZQkJLSB2YXJpZXMg aW4gZWFjaCBwZ19kdW1wIGludm9jYXRpb24KKyAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2VjdXJl IHRvIHBhc3MgYSBwYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lCisgKglmYWxsYmFja19hcHBs aWNhdGlvbl9uYW1lIC0gd2UnbGwgbGV0IHBnX2R1bXAgc2V0IGl0CisgKi8KK3N0YXRpYyBjaGFy ICoKK2NvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoq dmFsdWVzKQoreworCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJY2hh cgkgICAqY29ubnN0cjsKKwlpbnQJCQlpOworCWJvb2wJCWZpcnN0a2V5d29yZCA9IHRydWU7CisK KwkvKiBDb25zdHJ1Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcgaW4ga2V5PSd2YWx1ZScgZm9y bWF0LiAqLworCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7IGkrKykKKwl7CisJCWlm IChzdHJjbXAoa2V5d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8CisJCQlzdHJjbXAoa2V5d29y ZHNbaV0sICJwYXNzd29yZCIpID09IDAgfHwKKwkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgImZhbGxi YWNrX2FwcGxpY2F0aW9uX25hbWUiKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJz dGtleXdvcmQpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAnICcpOworCQlmaXJzdGtl eXdvcmQgPSBmYWxzZTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiJXM9Iiwga2V5d29yZHNb aV0pOworCQlhcHBlbmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsKKwl9CisKKwljb25uc3Ry ID0gcGdfc3RyZHVwKGJ1Zi0+ZGF0YSk7CisJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CisJcmV0 dXJuIGNvbm5zdHI7Cit9CisKKy8qCisgKiBleGVjdXRlUXVlcnkKKyAqCisgKiBSdW4gYSBxdWVy eSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24gZmFpbHVyZS4KKyAqLworUEdy ZXN1bHQgKgorZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCit7 CisJUEdyZXN1bHQgICAqcmVzOworCisJcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5 KTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCBxdWVyeSk7CisJaWYgKCFyZXMgfHwKKwkJUFFyZXN1 bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoInF1 ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCXBnX2xvZ19lcnJvcl9k ZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7CisJCVBRZmluaXNoKGNvbm4pOworCQlleGl0 X25pY2VseSgxKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25f ZHVtcGFsbF9yZXN0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmEwZGNkYmUwODA3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9k dW1wYWxsX3Jlc3RvcmUuaApAQCAtMCwwICsxLDI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBjb21tb25fZHVtcGFsbF9yZXN0b3JlLmgKKyAqICAgICAgQ29tbW9uIGhlYWRlciBmaWxl IGZvciBwZ19kdW1wYWxsIGFuZCBwZ19yZXN0b3JlCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKiAgICBzcmMvYmluL3BnX2R1bXAv Y29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp Zm5kZWYgQ09NTU9OX0RVTVBBTExfUkVTVE9SRV9ICisjZGVmaW5lIENPTU1PTl9EVU1QQUxMX1JF U1RPUkVfSAorCisjaW5jbHVkZSAicGdfYmFja3VwLmgiCisKKy8qIFRPRE86IGluY3JlYXNpbmcg dGhpcyB0byBrZWVwIDEwMCBkYiByZXN0b3JpbmcgYnkgc2luZ2xlIHBnX3Jlc3RvcmUgY29tbWFu ZC4gKi8KKyNkZWZpbmUgTUFYX09OX0VYSVRfTklDRUxZCQkJCTEwMAorZXh0ZXJuIFBHY29ubiAq Y29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlv bl9zdHJpbmcsIGNvbnN0IGNoYXIgKnBnaG9zdCwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpwZ3Bv cnQsIGNvbnN0IGNoYXIgKnBndXNlciwKKwkJCQkJCQkgICB0cml2YWx1ZSBwcm9tcHRfcGFzc3dv cmQsIGJvb2wgZmFpbF9vbl9lcnJvciwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpwcm9nbmFtZSwg Y29uc3QgY2hhciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3ZlcnNpb24pOworZXh0ZXJuICBQR3Jl c3VsdCAqZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOworI2Vu ZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT01NT05fRFVNUEFMTF9SRVNUT1JFX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdf ZHVtcC9tZXNvbi5idWlsZAppbmRleCA2MDNiYTZjZmJmMC4uZGRlY2FjNWNmMDkgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVz b24uYnVpbGQKQEAgLTQ5LDYgKzQ5LDcgQEAgYmluX3RhcmdldHMgKz0gcGdfZHVtcAogCiBwZ19k dW1wYWxsX3NvdXJjZXMgPSBmaWxlcygKICAgJ3BnX2R1bXBhbGwuYycsCisgICdjb21tb25fZHVt cGFsbF9yZXN0b3JlLmMnLAogKQogCiBpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKQEAgLTY4 LDYgKzY5LDcgQEAgYmluX3RhcmdldHMgKz0gcGdfZHVtcGFsbAogCiBwZ19yZXN0b3JlX3NvdXJj ZXMgPSBmaWxlcygKICAgJ3BnX3Jlc3RvcmUuYycsCisgICdjb21tb25fZHVtcGFsbF9yZXN0b3Jl LmMnLAogKQogCiBpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAppbmRl eCBmMGYxOWJiMGIyOS4uNzI5ZmZjOWUxMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAgLTMwNiw3ICsz MDYsNyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9ucyhBcmNoaXZlICpBSCwgRHVtcE9w dGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBleHRlcm4gdm9pZCBQcm9jZXNzQXJj aGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAKLWV4dGVybiB2b2lkIFJlc3RvcmVB cmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZl ICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEsIGNvbnN0IGNoYXIgKmRibmFtZSk7CiAKIC8qIE9wZW4g YW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJuIEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0 IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCk7CkBAIC0zMTksNyArMzE5 LDcgQEAgZXh0ZXJuIEFyY2hpdmUgKkNyZWF0ZUFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMs IGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCQkJCQkJCSAgRGF0YURpclN5bmNNZXRob2Qgc3lu Y19tZXRob2QpOwogCiAvKiBUaGUgLS1saXN0IG9wdGlvbiAqLwotZXh0ZXJuIHZvaWQgUHJpbnRU T0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBQcmludFRPQ1N1bW1hcnkoQXJj aGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKTsKIAogZXh0ZXJuIFJlc3RvcmVPcHRpb25zICpO ZXdSZXN0b3JlT3B0aW9ucyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j CmluZGV4IDcwN2EzZmM4NDRjLi5mZDZmZDE2NjQyZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYwpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJj aGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAq QUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFu ZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKwkJCWNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMg Q29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRp YyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRs ZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0zMzEsOSArMzMxLDE2IEBAIFByb2Nlc3NBcmNoaXZlUmVz dG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQog Ci0vKiBQdWJsaWMgKi8KKy8qCisgKiBSZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9k YXRhIGlzIHNldCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3Rvcmlu ZyBkdW1wCisgKiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1 bXBhbGwuCisgKiBJZiBkYm5hbWUgaXMgbm90IE5VTEwsIHRoZW4gcGdfcmVzdG9yZSByZXN0b3Jl IGFyY2hpdmUgdG8gZmlsZSB3aWxsIGhhdmUKKyAqIGNvbW1lbnRzIGFib3V0IHdoaWNoIGRhdGFi YXNlIGN1cnJlbnRseSBpcyBiZWluZyBkdW1wZWQuCisgKi8KIHZvaWQKLVJlc3RvcmVBcmNoaXZl KEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRf ZGF0YSwgY29uc3QgY2hhciAqZGJuYW1lKQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hp dmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0 OwpAQCAtNDUwLDkgKzQ1NywxMiBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJICov CiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNv bXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVNldE91 dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMpOworCQlTZXRP dXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRf ZGF0YSk7CiAKLQlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBc bi0tXG5cbiIpOworCWlmIChhcHBlbmRfZGF0YSAmJiBkYm5hbWUgIT0gTlVMTCkKKwkJYWhwcmlu dGYoQUgsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIGRibmFtZSk7CisJ ZWxzZQorCQlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0t XG5cbiIpOwogCiAJaWYgKEFILT5hcmNoaXZlUmVtb3RlVmVyc2lvbikKIAkJYWhwcmludGYoQUgs ICItLSBEdW1wZWQgZnJvbSBkYXRhYmFzZSB2ZXJzaW9uICVzXG4iLApAQCAtNzkyLDggKzgwMiwx MCBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJaWYgKEFILT5wdWJsaWMudmVyYm9z ZSkKIAkJZHVtcFRpbWVzdGFtcChBSCwgIkNvbXBsZXRlZCBvbiIsIHRpbWUoTlVMTCkpOwogCi0J YWhwcmludGYoQUgsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1wIGNvbXBsZXRlXG4t LVxuXG4iKTsKLQorCWlmIChhcHBlbmRfZGF0YSAmJiBkYm5hbWUgIT0gTlVMTCkKKwkJYWhwcmlu dGYoQUgsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXAgY29tcGxldGVcbi0tXG5cbiIsIGRi bmFtZSk7CisJZWxzZQorCQlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNl IGR1bXBcbi0tXG5cbiIpOwogCS8qCiAJICogQ2xlYW4gdXAgJiB3ZSdyZSBkb25lLgogCSAqLwpA QCAtMTI2Myw3ICsxMjc1LDcgQEAgQXJjaGl2ZUVudHJ5KEFyY2hpdmUgKkFIWCwgQ2F0YWxvZ0lk IGNhdGFsb2dJZCwgRHVtcElkIGR1bXBJZCwKIAogLyogUHVibGljICovCiB2b2lkCi1QcmludFRP Q1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQorUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCwgYm9v bCBhcHBlbmRfZGF0YSkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICop IEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKQEAgLTEyNzks NyArMTI5MSw3IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZl T3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5m aWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWlmIChzdHJm dGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQR0RVTVBfU1RSRlRJTUVfRk1ULAog CQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0gMCkKQEAgLTE2NTgsNyArMTY3MCw4 IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAKIHN0YXRp YyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1l LAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykK KwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJ CSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25z dCBjaGFyICptb2RlOwpAQCAtMTY3OCw3ICsxNjkxLDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91 dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJaWYgKGFwcGVuZF9kYXRh IHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJ ZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CkBAIC0yOTIwLDEzICsyOTMzLDEzIEBAIF90b2NF bnRyeVJlcXVpcmVkKFRvY0VudHJ5ICp0ZSwgdGVTZWN0aW9uIGN1clNlY3Rpb24sIEFyY2hpdmVI YW5kbGUgKkFIKQogCiAJLyoKIAkgKiBEQVRBQkFTRSBhbmQgREFUQUJBU0UgUFJPUEVSVElFUyBh bHNvIGhhdmUgYSBzcGVjaWFsIHJ1bGU6IHRoZXkgYXJlCi0JICogcmVzdG9yZWQgaW4gY3JlYXRl REIgbW9kZSwgYW5kIG5vdCByZXN0b3JlZCBvdGhlcndpc2UsIGluZGVwZW5kZW50bHkgb2YKLQkg KiBhbGwgZWxzZS4KKwkgKiByZXN0b3JlZCBpbiBjcmVhdGVEQiBtb2RlIG9yIHJlc3RvcmVkIGZv cm1hdCBpcyBub3QgcGxhaW4gZmlsZSwgYW5kIG5vdAorCSAqIHJlc3RvcmVkIG90aGVyd2lzZSwg aW5kZXBlbmRlbnRseSBvZiBhbGwgZWxzZS4KIAkgKi8KIAlpZiAoc3RyY21wKHRlLT5kZXNjLCAi REFUQUJBU0UiKSA9PSAwIHx8CiAJCXN0cmNtcCh0ZS0+ZGVzYywgIkRBVEFCQVNFIFBST1BFUlRJ RVMiKSA9PSAwKQogCXsKLQkJaWYgKHJvcHQtPmNyZWF0ZURCKQorCQlpZiAocm9wdC0+Y3JlYXRl REIgfHwgQUgtPmZvcm1hdCAhPSBhcmNoTnVsbCkKIAkJCXJldHVybiBSRVFfU0NIRU1BOwogCQll bHNlCiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf dGFyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGI1YmEzYjQ2ZGQ5 Li40NWYwZmI0NmUwZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCkBAIC04MjYsNyArODI2LDcg QEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9IEFILT5w dWJsaWMudmVyYm9zZTsKIAkJQUgtPnB1YmxpYy52ZXJib3NlID0gMDsKIAotCQlSZXN0b3JlQXJj aGl2ZSgoQXJjaGl2ZSAqKSBBSCk7CisJCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFILCBm YWxzZSwgTlVMTCk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFyY2hpdmUgKikgQUgsIHNhdkRv cHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0 aWxzLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMKaW5kZXggNzlhZWM1ZjUx NTguLjQ3NTg5Y2NhOTBmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0 aWxzLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCkBAIC0xMyw2ICsx Myw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSAiY29tbW9u X2R1bXBhbGxfcmVzdG9yZS5oIgogI2lmZGVmIFdJTjMyCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIK ICNlbmRpZgpAQCAtMjEsOCArMjIsNiBAQAogLyogR2xvYmFscyBleHBvcnRlZCBieSB0aGlzIGZp bGUgKi8KIGNvbnN0IGNoYXIgKnByb2duYW1lID0gTlVMTDsKIAotI2RlZmluZSBNQVhfT05fRVhJ VF9OSUNFTFkJCQkJMjAKLQogc3RhdGljIHN0cnVjdAogewogCW9uX2V4aXRfbmljZWx5X2NhbGxi YWNrIGZ1bmN0aW9uOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggMDJlMWZkZjhmNzguLjUxYzU5NWE3YTVmIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMKQEAgLTExNDgsNyArMTE0OCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCSAqIHJpZ2h0IG5vdy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJj aGl2ZShmb3V0KTsKKwkJUmVzdG9yZUFyY2hpdmUoZm91dCwgZmFsc2UsIE5VTEwpOwogCiAJQ2xv c2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFs bC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCAzOTZmNzk3ODFjNS4uODAz NDFkYjMyNGQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVk ZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dGlt ZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCkBAIC0yNCwxNCArMjUsMTcgQEAKICNpbmNsdWRl ICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIK ICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmlu Z191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgi CiAjaW5jbHVkZSAicGdfYmFja3VwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgi CiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2Rl ZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9O ICJcbiIKKyNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQogCiB0eXBlZGVmIHN0 cnVjdAogewpAQCAtNjQsMjggKzY4LDI1IEBAIHN0YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQ R2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7 CiBzdGF0aWMgdm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNl ckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lk IGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKTsKK3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMo UEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lk IGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludCBy dW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywKKwkJ CQkJIGNoYXIgKmRiZmlsZSwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMg dm9pZCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAq Y2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUs IGNvbnN0IGNoYXIgKm9iam5hbWUsCiAJCQkJCQkJIFBRRXhwQnVmZmVyIGJ1ZmZlcik7Ci1zdGF0 aWMgUEdjb25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLAotCQkJCQkJCSAg IGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLCBjb25zdCBjaGFyICpwZ2hvc3QsCi0JCQkJ CQkJICAgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCi0JCQkJCQkJICAg dHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpOwotc3RhdGljIGNo YXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoq dmFsdWVzKTsKLXN0YXRpYyBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1hbmQoUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBhbmRfZGJuYW1lX3BhdHRlcm5z KFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJCSAgIFNp bXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRfZHVtcGFsbF9maWx0ZXJz KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKTsKK3N0YXRp YyB2b2lkIGNyZWF0ZV9vcl9vcGVuX2Rpcihjb25zdCBjaGFyICpkaXJuYW1lKTsKK3N0YXRpYyBB cmNoaXZlRm9ybWF0IHBhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpOwogCiBzdGF0 aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIGNvbnN0IGNoYXIgKnByb2du YW1lOwogc3RhdGljIFBRRXhwQnVmZmVyIHBnZHVtcG9wdHM7Ci1zdGF0aWMgY2hhciAqY29ubnN0 ciA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbm5zdHIgPSAiIjsKIHN0YXRpYyBib29sIG91 dHB1dF9jbGVhbiA9IGZhbHNlOwogc3RhdGljIGJvb2wgc2tpcF9hY2xzID0gZmFsc2U7CiBzdGF0 aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CkBAIC0xMDcsNyArMTA4LDcgQEAgc3RhdGljIGludAlu b19zdWJzY3JpcHRpb25zID0gMDsKIHN0YXRpYyBpbnQJbm9fdG9hc3RfY29tcHJlc3Npb24gPSAw Owogc3RhdGljIGludAlub191bmxvZ2dlZF90YWJsZV9kYXRhID0gMDsKIHN0YXRpYyBpbnQJbm9f cm9sZV9wYXNzd29yZHMgPSAwOwotc3RhdGljIGludAlzZXJ2ZXJfdmVyc2lvbjsKK3N0YXRpYyBp bnQgc2VydmVyX3ZlcnNpb247CiBzdGF0aWMgaW50CWxvYWRfdmlhX3BhcnRpdGlvbl9yb290ID0g MDsKIHN0YXRpYyBpbnQJb25fY29uZmxpY3RfZG9fbm90aGluZyA9IDA7CiAKQEAgLTEyMSw4ICsx MjIsNiBAQCBzdGF0aWMgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogc3RhdGljIFNpbXBsZVN0cmlu Z0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBT aW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAK LSNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQotCiBpbnQKIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIHsKQEAgLTE0Nyw2ICsxNDYsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJ eyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwg bm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhh dmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xODgsNiArMTg4LDggQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNo YXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxM OworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwljb25zdCBjaGFy ICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZB VUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZh bHNlOwpAQCAtMjM3LDcgKzIzOSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAog CXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0 aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywg YXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0 aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjY1LDcgKzI2Nyw5IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihw Z2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZp bGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0TmFtZSA9IHBn X3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19v bmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQxNCw2ICs0MTgsMjEgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKKwkvKiBHZXQgZm9ybWF0 IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5h bWUpOworCisJLyoKKwkgKiBJZiBub24tcGxhaW4gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIHdl IG11c3QgcHJvdmlkZSB0aGUKKwkgKiBmaWxlIG5hbWUgdG8gY3JlYXRlIG9uZSBtYWluIGRpcmVj dG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYKKwkJCSghZmls ZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3Io Im9wdGlvbnMgLUYvLS1mb3JtYXQ9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mLy0tZmlsZSB3aXRo IG5vbi1lbXB0eSBzdHJpbmciKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVs cFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7 CisJfQorCiAJLyoKIAkgKiBJZiBwYXNzd29yZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0 aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5nCiAJICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1 c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8gaGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ2MCw2ICs0 NzksMzMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChvbl9jb25mbGljdF9k b19ub3RoaW5nKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC0tb24tY29u ZmxpY3QtZG8tbm90aGluZyIpOwogCisJLyoKKwkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiBy ZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuICBJZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNy ZWF0ZSBuZXcgZGlyZWN0b3J5IGFuZCBnbG9iYWwuZGF0IGZpbGUuCisJICovCisJaWYgKGFyY2hE dW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhdOwor CisJCS8qIENyZWF0ZSBuZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3Rpbmcg ZGlyZWN0b3J5LiAqLworCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCisJCXNucHJp bnRmKHRvY19wYXRoLCBNQVhQR1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOworCisJ CU9QRiA9IGZvcGVuKHRvY19wYXRoLCBQR19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBvcGVuIGdsb2JhbC5kYXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJu bykpOworCX0KKwllbHNlIGlmIChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1l LCBQR19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVu IG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJ CU9QRiA9IHN0ZG91dDsKKwogCS8qCiAJICogSWYgdGhlcmUgd2FzIGEgZGF0YWJhc2Ugc3BlY2lm aWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHVzZSB0aGF0LAogCSAqIG90aGVyd2lzZSB0cnkgdG8g Y29ubmVjdCB0byBkYXRhYmFzZSAicG9zdGdyZXMiLCBhbmQgZmFpbGluZyB0aGF0CkBAIC00Njgs NyArNTE0LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChwZ2RiKQogCXsK IAkJY29ubiA9IGNvbm5lY3REYXRhYmFzZShwZ2RiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwg cGd1c2VyLAotCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2UpOworCQkJCQkJCSAgIHBy b21wdF9wYXNzd29yZCwgZmFsc2UsCisJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2Vy dmVyX3ZlcnNpb24pOwogCiAJCWlmICghY29ubikKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29u bmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBwZ2RiKTsKQEAgLTQ3NiwxMCArNTIzLDEyIEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAllbHNlCiAJewogCQljb25uID0gY29ubmVjdERh dGFiYXNlKCJwb3N0Z3JlcyIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJ CQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSk7CisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3Jk LCBmYWxzZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbik7 CiAJCWlmICghY29ubikKIAkJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIGNv bm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJCQkJCSAgIHByb21wdF9wYXNzd29y ZCwgdHJ1ZSk7CisJCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgdHJ1ZSwKKwkJCQkJCQkJICAg cHJvZ25hbWUsICZjb25uc3RyLCAmc2VydmVyX3ZlcnNpb24pOwogCiAJCWlmICghY29ubikKIAkJ ewpAQCAtNDk2LDE5ICs1NDUsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhw YW5kX2RibmFtZV9wYXR0ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJ CQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0 cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZp bGVuYW1lKQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYg KCFPUEYpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAl bSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoK IAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC02MDcs NyArNjQzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogCWlmICghZ2xv YmFsc19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQotCQlkdW1wRGF0 YWJhc2VzKGNvbm4pOworCQlkdW1wRGF0YWJhc2VzKGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsKIAog CVBRZmluaXNoKGNvbm4pOwogCkBAIC02MjAsNyArNjU2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCQlmY2xvc2UoT1BGKTsKIAogCQkvKiBzeW5jIHRoZSByZXN1bHRpbmcgZmls ZSwgZXJyb3JzIGFyZSBub3QgZmF0YWwgKi8KLQkJaWYgKGRvc3luYykKKwkJaWYgKGRvc3luYyAm JiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZp bGVuYW1lLCBmYWxzZSk7CiAJfQogCkBAIC02MzEsMTIgKzY2NywxNCBAQCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiBzdGF0aWMgdm9pZAogaGVscCh2b2lkKQogewotCXByaW50ZihfKCIl cyBleHRyYWN0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3Jp cHQgZmlsZS5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgZXh0cmFjdHMgYSBQb3N0 Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgYmFzZWQgb24gc3BlY2lmaWVkIGR1bXAgZm9ybWF0Llxu XG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAl cyBbT1BUSU9OXS4uLlxuIiksIHByb2duYW1lKTsKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0 aW9uczpcbiIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91 dHB1dCBmaWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAg ICAgICAgIG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJ CSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxu IikpOwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBt b2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRw dXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1s b2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBmb3Ig YSB0YWJsZSBsb2NrXG4iKSk7CkBAIC0xNDg3LDEwICsxNTI1LDEzIEBAIGV4cGFuZF9kYm5hbWVf cGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAg Ki8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFz ZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBHcmVz dWx0ICAgKnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNo YXIJCWRiZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFICAgICAgICptYXBfZmlsZSA9IE5VTEw7 CiAKIAkvKgogCSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5j ZSB3ZSdkIGJlIHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNTA0LDcgKzE1NDUsNyBAQCBkdW1wRGF0 YWJhc2VzKFBHY29ubiAqY29ubikKIAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1vZGUg d2l0aCAtLWNsZWFuLgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkgICAi U0VMRUNUIGRhdG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJCSAg ICJGUk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBk YXRjb25ubGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3RlbXBs YXRlMScpLCBkYXRuYW1lIik7CkBAIC0xNTEyLDkgKzE1NTMsMzMgQEAgZHVtcERhdGFiYXNlcyhQ R2Nvbm4gKmNvbm4pCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihPUEYsICIt LVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0b3J5L3Rhci9j dXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeQorCSAq IHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZpbGUgc3Vi ZGlyZWN0b3J5IHdpbGwKKwkgKiBiZSBjcmVhdGVkIHVuZGVyIHRoZSBzdWJkaXJlY3RvcnkgaW4g YXJjaGl2ZSBtb2RlIGFzIHBlciBzaW5nbGUgZGIgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1 bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRI XTsKKworCQlzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZp bGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBu YW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCQlpZiAobWtkaXIoZGJfc3ViZGlyLCAwNzU1 KSAhPSAwKQorCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIHN1YmRpcmVjdG9yeSBc IiVzXCI6ICVtIiwgZGJfc3ViZGlyKTsKKworCQlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQ R1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBhIG1hcCBmaWxl ICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCQltYXBfZmlsZSA9IGZvcGVuKG1hcF9m aWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFtYXBfZmlsZSkKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBtYXAgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKwogCWZv ciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqZGJuYW1l ID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOworCQljaGFyCSAgICpvaWQgPSBQUWdldHZhbHVlKHJl cywgaSwgMSk7CiAJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOwogCQlpbnQJCQlyZXQ7CiAKQEAg LTE1MjksNiArMTU5NCwxOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJCWNvbnRp bnVlOwogCQl9CiAKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub24tcGxhaW4gZHVtcCBmb3JtYXQs IHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5kYXQgZmlsZS4K KwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJeworCQkJc25wcmlu dGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRiX3N1YmRpciwgb2lk KTsKKworCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBhbmQgZGJuYW1lIGluIG1h cCBmaWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVzXG4iLCBvaWQsIHBnX3N0cmR1 cChkYm5hbWUpKTsKKwkJfQorCiAJCXBnX2xvZ19pbmZvKCJkdW1waW5nIGRhdGFiYXNlIFwiJXNc IiIsIGRibmFtZSk7CiAKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1 bXBcbi0tXG5cbiIsIGRibmFtZSk7CkBAIC0xNTQ3LDkgKzE2MjQsMTcgQEAgZHVtcERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4pCiAJCQkJY3JlYXRlX29wdHMgPSAiLS1jbGVhbiAtLWNyZWF0ZSI7CiAJ CQllbHNlCiAJCQl7Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsKIAkJCQkvKiBTaW5jZSBwZ19kdW1w IHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJZnByaW50ZihP UEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCQkJeworCQkJCQljcmVhdGVfb3B0cyA9ICIiOworCQkJCQlmcHJpbnRm KE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJ eworCQkJCQkvKiBEdW1waW5nIGFsbCBkYXRhYmFzZXMgc28gYWRkIC0tY3JlYXRlIG9wdGlvbi4g Ki8KKwkJCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOworCQkJCX0KIAkJCX0KIAkJfQogCQll bHNlCkBAIC0xNTU4LDE5ICsxNjQzLDMwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQog CQlpZiAoZmlsZW5hbWUpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJu YW1lLCBjcmVhdGVfb3B0cyk7CisJCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRz LCBkYmZpbGVwYXRoLCBhcmNoRHVtcEZvcm1hdCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2Zh dGFsKCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUp OwogCiAJCWlmIChmaWxlbmFtZSkKIAkJewotCQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJ TkFSWV9BKTsKKwkJCWNoYXIJdG9jX3BhdGhbTUFYUEdQQVRIXTsKKworCQkJaWYgKGFyY2hEdW1w Rm9ybWF0ICE9IGFyY2hOdWxsKQorCQkJCXNucHJpbnRmKHRvY19wYXRoLCBNQVhQR1BBVEgsICIl cy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKHRvY19wYXRo LCBNQVhQR1BBVEgsICIlcyIsIGZpbGVuYW1lKTsKKworCQkJT1BGID0gZm9wZW4odG9jX3BhdGgs IFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BGKQogCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmUt b3BlbiB0aGUgb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQkgZmlsZW5hbWUpOworCQkJ CQkJIHRvY19wYXRoKTsKIAkJfQogCX0KIAorCS8qIENsb3NlIG1hcCBmaWxlICovCisJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFwX2ZpbGUpOworCiAJUFFjbGVh cihyZXMpOwogfQogCkBAIC0xNTgwLDcgKzE2NzYsOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubikKICAqIFJ1biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBzcGVjaWZpZWQgb3B0aW9ucy4K ICAqLwogc3RhdGljIGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hh ciAqY3JlYXRlX29wdHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFy ICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlLAorCQlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9y bWF0KQogewogCVBRRXhwQnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVyRGF0YSBj bWQ7CkBAIC0xNTg5LDE3ICsxNjg2LDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUs IGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7 CiAJaW5pdFBRRXhwQnVmZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwi JXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0 ZV9vcHRzKTsKLQogCS8qCi0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9j dW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJZiB0aGlzIGlz IG5vbi1wbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFuZCBkdW1wCisJ ICogZm9ybWF0IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUgZHVtcC4KIAkg Ki8KLQlpZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIp OworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBRRXhwQnVm ZmVyKCZjbWQsICJcIiVzXCIgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgZGJmaWxl LCBjcmVhdGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3Rvcnkp CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1kaXJlY3RvcnkgIik7 CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJCWVsc2UgaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAt LWZvcm1hdD10YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwg IiAtRnAgIik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwg cGdfZHVtcF9iaW4sCisJCQkJCQlwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7CisKKwkJ LyoKKwkJKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWlu LWFwcGVuZCBwZ19kdW1wCisJCSogZm9ybWF0LgorCQkqLworCQlpZiAoZmlsZW5hbWUpCisJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwkJZWxzZQorCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJLyoKIAkgKiBBcHBlbmQgdGhlIGRh dGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0ZWQgc3RlbSBvZiBjb25uZWN0aW9u CkBAIC0xNjQ5LDI1NiArMTc2NSw2IEBAIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAlkZXN0cm95UFFFeHBCdWZm ZXIoc3FsKTsKIH0KIAotLyoKLSAqIE1ha2UgYSBkYXRhYmFzZSBjb25uZWN0aW9uIHdpdGggdGhl IGdpdmVuIHBhcmFtZXRlcnMuICBBbgotICogaW50ZXJhY3RpdmUgcGFzc3dvcmQgcHJvbXB0IGlz IGF1dG9tYXRpY2FsbHkgaXNzdWVkIGlmIHJlcXVpcmVkLgotICoKLSAqIElmIGZhaWxfb25fZXJy b3IgaXMgZmFsc2UsIHdlIHJldHVybiBOVUxMIHdpdGhvdXQgcHJpbnRpbmcgYW55IG1lc3NhZ2UK LSAqIG9uIGZhaWx1cmUsIGJ1dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQgcGFzc3dvcmQgZm9yIHRo ZSBuZXh0IHRyeS4KLSAqCi0gKiBPbiBzdWNjZXNzLCB0aGUgZ2xvYmFsIHZhcmlhYmxlICdjb25u c3RyJyBpcyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZwotICogY29udGFpbmluZyB0aGUgb3B0 aW9ucyB1c2VkLgotICovCi1zdGF0aWMgUEdjb25uICoKLWNvbm5lY3REYXRhYmFzZShjb25zdCBj aGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAotCQkJCWNvbnN0IGNo YXIgKnBnaG9zdCwgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCi0JCQkJ dHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpCi17Ci0JUEdjb25u CSAgICpjb25uOwotCWJvb2wJCW5ld19wYXNzOwotCWNvbnN0IGNoYXIgKnJlbW90ZXZlcnNpb25f c3RyOwotCWludAkJCW15X3ZlcnNpb247Ci0JY29uc3QgY2hhciAqKmtleXdvcmRzID0gTlVMTDsK LQljb25zdCBjaGFyICoqdmFsdWVzID0gTlVMTDsKLQlQUWNvbm5pbmZvT3B0aW9uICpjb25uX29w dHMgPSBOVUxMOwotCXN0YXRpYyBjaGFyICpwYXNzd29yZCA9IE5VTEw7Ci0KLQlpZiAocHJvbXB0 X3Bhc3N3b3JkID09IFRSSV9ZRVMgJiYgIXBhc3N3b3JkKQotCQlwYXNzd29yZCA9IHNpbXBsZV9w cm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7Ci0KLQkvKgotCSAqIFN0YXJ0IHRoZSBjb25uZWN0 aW9uLiAgTG9vcCB1bnRpbCB3ZSBoYXZlIGEgcGFzc3dvcmQgaWYgcmVxdWVzdGVkIGJ5Ci0JICog YmFja2VuZC4KLQkgKi8KLQlkbwotCXsKLQkJaW50CQkJYXJnY291bnQgPSA2OwotCQlQUWNvbm5p bmZvT3B0aW9uICpjb25uX29wdDsKLQkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7Ci0JCWludAkJ CWkgPSAwOwotCi0JCWZyZWUoa2V5d29yZHMpOwotCQlmcmVlKHZhbHVlcyk7Ci0JCVBRY29ubmlu Zm9GcmVlKGNvbm5fb3B0cyk7Ci0KLQkJLyoKLQkJICogTWVyZ2UgdGhlIGNvbm5lY3Rpb24gaW5m byBpbnB1dHMgZ2l2ZW4gaW4gZm9ybSBvZiBjb25uZWN0aW9uIHN0cmluZwotCQkgKiBhbmQgb3Ro ZXIgb3B0aW9ucy4gIEV4cGxpY2l0bHkgZGlzY2FyZCBhbnkgZGJuYW1lIHZhbHVlIGluIHRoZQot CQkgKiBjb25uZWN0aW9uIHN0cmluZzsgb3RoZXJ3aXNlLCBQUWNvbm5lY3RkYlBhcmFtcygpIHdv dWxkIGludGVycHJldAotCQkgKiB0aGF0IHZhbHVlIGFzIGJlaW5nIGl0c2VsZiBhIGNvbm5lY3Rp b24gc3RyaW5nLgotCQkgKi8KLQkJaWYgKGNvbm5lY3Rpb25fc3RyaW5nKQotCQl7Ci0JCQljb25u X29wdHMgPSBQUWNvbm5pbmZvUGFyc2UoY29ubmVjdGlvbl9zdHJpbmcsICZlcnJfbXNnKTsKLQkJ CWlmIChjb25uX29wdHMgPT0gTlVMTCkKLQkJCQlwZ19mYXRhbCgiJXMiLCBlcnJfbXNnKTsKLQot CQkJZm9yIChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsg Y29ubl9vcHQrKykKLQkJCXsKLQkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5f b3B0LT52YWxbMF0gIT0gJ1wwJyAmJgotCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJk Ym5hbWUiKSAhPSAwKQotCQkJCQlhcmdjb3VudCsrOwotCQkJfQotCi0JCQlrZXl3b3JkcyA9IHBn X21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0JCQl2YWx1ZXMg PSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKLQotCQkJZm9y IChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9v cHQrKykKLQkJCXsKLQkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52 YWxbMF0gIT0gJ1wwJyAmJgotCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUi KSAhPSAwKQotCQkJCXsKLQkJCQkJa2V5d29yZHNbaV0gPSBjb25uX29wdC0+a2V5d29yZDsKLQkJ CQkJdmFsdWVzW2ldID0gY29ubl9vcHQtPnZhbDsKLQkJCQkJaSsrOwotCQkJCX0KLQkJCX0KLQkJ fQotCQllbHNlCi0JCXsKLQkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAq IHNpemVvZigqa2V5d29yZHMpKTsKLQkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsg MSkgKiBzaXplb2YoKnZhbHVlcykpOwotCQl9Ci0KLQkJaWYgKHBnaG9zdCkKLQkJewotCQkJa2V5 d29yZHNbaV0gPSAiaG9zdCI7Ci0JCQl2YWx1ZXNbaV0gPSBwZ2hvc3Q7Ci0JCQlpKys7Ci0JCX0K LQkJaWYgKHBncG9ydCkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAicG9ydCI7Ci0JCQl2YWx1ZXNb aV0gPSBwZ3BvcnQ7Ci0JCQlpKys7Ci0JCX0KLQkJaWYgKHBndXNlcikKLQkJewotCQkJa2V5d29y ZHNbaV0gPSAidXNlciI7Ci0JCQl2YWx1ZXNbaV0gPSBwZ3VzZXI7Ci0JCQlpKys7Ci0JCX0KLQkJ aWYgKHBhc3N3b3JkKQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJwYXNzd29yZCI7Ci0JCQl2YWx1 ZXNbaV0gPSBwYXNzd29yZDsKLQkJCWkrKzsKLQkJfQotCQlpZiAoZGJuYW1lKQotCQl7Ci0JCQlr ZXl3b3Jkc1tpXSA9ICJkYm5hbWUiOwotCQkJdmFsdWVzW2ldID0gZGJuYW1lOwotCQkJaSsrOwot CQl9Ci0JCWtleXdvcmRzW2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiOwotCQl2YWx1 ZXNbaV0gPSBwcm9nbmFtZTsKLQkJaSsrOwotCi0JCW5ld19wYXNzID0gZmFsc2U7Ci0JCWNvbm4g PSBQUWNvbm5lY3RkYlBhcmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKLQotCQlpZiAoIWNv bm4pCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwg ZGJuYW1lKTsKLQotCQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQgJiYKLQkJ CVBRY29ubmVjdGlvbk5lZWRzUGFzc3dvcmQoY29ubikgJiYKLQkJCSFwYXNzd29yZCAmJgotCQkJ cHJvbXB0X3Bhc3N3b3JkICE9IFRSSV9OTykKLQkJewotCQkJUFFmaW5pc2goY29ubik7Ci0JCQlw YXNzd29yZCA9IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7Ci0JCQluZXdfcGFz cyA9IHRydWU7Ci0JCX0KLQl9IHdoaWxlIChuZXdfcGFzcyk7Ci0KLQkvKiBjaGVjayB0byBzZWUg dGhhdCB0aGUgYmFja2VuZCBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLwotCWlm IChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCkKLQl7Ci0JCWlmIChmYWlsX29uX2Vy cm9yKQotCQkJcGdfZmF0YWwoIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCQllbHNlCi0J CXsKLQkJCVBRZmluaXNoKGNvbm4pOwotCi0JCQlmcmVlKGtleXdvcmRzKTsKLQkJCWZyZWUodmFs dWVzKTsKLQkJCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7Ci0KLQkJCXJldHVybiBOVUxMOwot CQl9Ci0JfQotCi0JLyoKLQkgKiBPaywgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gUmVtZW1iZXIg dGhlIG9wdGlvbnMgdXNlZCwgaW4gdGhlIGZvcm0gb2YgYQotCSAqIGNvbm5lY3Rpb24gc3RyaW5n LgotCSAqLwotCWNvbm5zdHIgPSBjb25zdHJ1Y3RDb25uU3RyKGtleXdvcmRzLCB2YWx1ZXMpOwot Ci0JZnJlZShrZXl3b3Jkcyk7Ci0JZnJlZSh2YWx1ZXMpOwotCVBRY29ubmluZm9GcmVlKGNvbm5f b3B0cyk7Ci0KLQkvKiBDaGVjayB2ZXJzaW9uICovCi0JcmVtb3RldmVyc2lvbl9zdHIgPSBQUXBh cmFtZXRlclN0YXR1cyhjb25uLCAic2VydmVyX3ZlcnNpb24iKTsKLQlpZiAoIXJlbW90ZXZlcnNp b25fc3RyKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzZXJ2ZXIgdmVyc2lvbiIpOwotCXNl cnZlcl92ZXJzaW9uID0gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOwotCWlmIChzZXJ2ZXJfdmVyc2lv biA9PSAwKQotCQlwZ19mYXRhbCgiY291bGQgbm90IHBhcnNlIHNlcnZlciB2ZXJzaW9uIFwiJXNc IiIsCi0JCQkJIHJlbW90ZXZlcnNpb25fc3RyKTsKLQotCW15X3ZlcnNpb24gPSBQR19WRVJTSU9O X05VTTsKLQotCS8qCi0JICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwg YW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9mCi0JICogb3VyIG93biBtYWpvciB2ZXJzaW9u LiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcC5jLikKLQkgKi8KLQlpZiAobXlf dmVyc2lvbiAhPSBzZXJ2ZXJfdmVyc2lvbgotCQkmJiAoc2VydmVyX3ZlcnNpb24gPCA5MDIwMCB8 fAotCQkJKHNlcnZlcl92ZXJzaW9uIC8gMTAwKSA+IChteV92ZXJzaW9uIC8gMTAwKSkpCi0Jewot CQlwZ19sb2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2VydmVyIHZlcnNpb24gbWlzbWF0 Y2giKTsKLQkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZlcnNpb246ICVzOyAlcyB2ZXJz aW9uOiAlcyIsCi0JCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHByb2duYW1lLCBQR19WRVJTSU9O KTsKLQkJZXhpdF9uaWNlbHkoMSk7Ci0JfQotCi0JUFFjbGVhcihleGVjdXRlUXVlcnkoY29ubiwg QUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKLQotCXJldHVybiBjb25uOwotfQotCi0v KiAtLS0tLS0tLS0tCi0gKiBDb25zdHJ1Y3QgYSBjb25uZWN0aW9uIHN0cmluZyBmcm9tIHRoZSBn aXZlbiBrZXl3b3JkL3ZhbHVlIHBhaXJzLiBJdCBpcwotICogdXNlZCB0byBwYXNzIHRoZSBjb25u ZWN0aW9uIG9wdGlvbnMgdG8gdGhlIHBnX2R1bXAgc3VicHJvY2Vzcy4KLSAqCi0gKiBUaGUgZm9s bG93aW5nIHBhcmFtZXRlcnMgYXJlIGV4Y2x1ZGVkOgotICoJZGJuYW1lCQktIHZhcmllcyBpbiBl YWNoIHBnX2R1bXAgaW52b2NhdGlvbgotICoJcGFzc3dvcmQJLSBpdCdzIG5vdCBzZWN1cmUgdG8g cGFzcyBhIHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUKLSAqCWZhbGxiYWNrX2FwcGxpY2F0 aW9uX25hbWUgLSB3ZSdsbCBsZXQgcGdfZHVtcCBzZXQgaXQKLSAqIC0tLS0tLS0tLS0KLSAqLwot c3RhdGljIGNoYXIgKgotY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNv bnN0IGNoYXIgKip2YWx1ZXMpCi17Ci0JUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKLQljaGFyCSAgICpjb25uc3RyOwotCWludAkJCWk7Ci0JYm9vbAkJZmlyc3RrZXl3b3Jk ID0gdHJ1ZTsKLQotCS8qIENvbnN0cnVjdCBhIG5ldyBjb25uZWN0aW9uIHN0cmluZyBpbiBrZXk9 J3ZhbHVlJyBmb3JtYXQuICovCi0JZm9yIChpID0gMDsga2V5d29yZHNbaV0gIT0gTlVMTDsgaSsr KQotCXsKLQkJaWYgKHN0cmNtcChrZXl3b3Jkc1tpXSwgImRibmFtZSIpID09IDAgfHwKLQkJCXN0 cmNtcChrZXl3b3Jkc1tpXSwgInBhc3N3b3JkIikgPT0gMCB8fAotCQkJc3RyY21wKGtleXdvcmRz W2ldLCAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSIpID09IDApCi0JCQljb250aW51ZTsKLQot CQlpZiAoIWZpcnN0a2V5d29yZCkKLQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcgJyk7 Ci0JCWZpcnN0a2V5d29yZCA9IGZhbHNlOwotCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIlcz0i LCBrZXl3b3Jkc1tpXSk7Ci0JCWFwcGVuZENvbm5TdHJWYWwoYnVmLCB2YWx1ZXNbaV0pOwotCX0K LQotCWNvbm5zdHIgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKLQlkZXN0cm95UFFFeHBCdWZmZXIo YnVmKTsKLQlyZXR1cm4gY29ubnN0cjsKLX0KLQotLyoKLSAqIFJ1biBhIHF1ZXJ5LCByZXR1cm4g dGhlIHJlc3VsdHMsIGV4aXQgcHJvZ3JhbSBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMgUEdyZXN1 bHQgKgotZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCi17Ci0J UEdyZXN1bHQgICAqcmVzOwotCi0JcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5KTsK LQotCXJlcyA9IFBRZXhlYyhjb25uLCBxdWVyeSk7Ci0JaWYgKCFyZXMgfHwKLQkJUFFyZXN1bHRT dGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCi0JewotCQlwZ19sb2dfZXJyb3IoInF1ZXJ5 IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7Ci0JCXBnX2xvZ19lcnJvcl9kZXRh aWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7Ci0JCVBRZmluaXNoKGNvbm4pOwotCQlleGl0X25p Y2VseSgxKTsKLQl9Ci0KLQlyZXR1cm4gcmVzOwotfQotCiAvKgogICogQXMgYWJvdmUgZm9yIGEg U1FMIGNvbW1hbmQgKHdoaWNoIHJldHVybnMgbm90aGluZykuCiAgKi8KQEAgLTE5OTQsMyArMTg2 MCw5MSBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxl U3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgor ICogY3JlYXRlX29yX29wZW5fZGlyCisgKgorICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBkaXJl Y3Rvcnkgd2l0aCBnaXZlbiBuYW1lLiAgSWYgdGhlcmUgaXMgYWxyZWFkeSBzYW1lCisgKiBlbXB0 eSBkaXJlY3RvcnkgZXhpc3QsIHRoZW4gdXNlIGl0LgorICovCitzdGF0aWMgdm9pZAorY3JlYXRl X29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJc3RydWN0IHN0YXQJCXN0Owor CWJvb2wJCQlpc19lbXB0eSA9IGZhbHNlOworCisJLyogd2UgYWNjZXB0IGFuIGVtcHR5IGV4aXN0 aW5nIGRpcmVjdG9yeSAqLworCWlmIChzdGF0KGRpcm5hbWUsICZzdCkgPT0gMCAmJiBTX0lTRElS KHN0LnN0X21vZGUpKQorCXsKKwkJRElSCQkqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKKworCQlp ZiAoZGlyKQorCQl7CisJCQlzdHJ1Y3QgZGlyZW50CSpkOworCisJCQlpc19lbXB0eSA9IHRydWU7 CisKKwkJCXdoaWxlIChlcnJubyA9IDAsIChkID0gcmVhZGRpcihkaXIpKSkKKwkJCXsKKwkJCQlp ZiAoc3RyY21wKGQtPmRfbmFtZSwgIi4iKSAhPSAwICYmIHN0cmNtcChkLT5kX25hbWUsICIuLiIp ICE9IDApCisJCQkJeworCQkJCQlpc19lbXB0eSA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQl9 CisJCQl9CisKKwkJCWlmIChlcnJubykKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZGly ZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJZGlybmFtZSk7CisKKwkJCWlmIChjbG9zZWRpcihk aXIpKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGlyZWN0b3J5IFwiJXNcIjogJW0i LAorCQkJCQkJZGlybmFtZSk7CisJCX0KKworCQlpZighaXNfZW1wdHkpCisJCXsKKwkJCXBnX2xv Z19lcnJvcigiZGlyZWN0b3J5IFwiJXNcIiBleGlzdHMgYnV0IGlzIG5vdCBlbXB0eSIsIGRpcm5h bWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIklmIHlvdSB3YW50IHRvIGR1bXAgZGF0YSBvbiB0 aGlzIGRpcmVjdG9yeSwgZWl0aGVyIHJlbW92ZSBvciBlbXB0eSAiCisJCQkJCQkJICAidGhpcyBk aXJlY3RvcnkgXCIlc1wiIG9yIHJ1biAlcyAiCisJCQkJCQkJICAid2l0aCBhbiBhcmd1bWVudCBv dGhlciB0aGFuIFwiJXNcIi4iLAorCQkJCQkJCSAgZGlybmFtZSwgcHJvZ25hbWUsIGRpcm5hbWUp OworCQkJZXhpdF9uaWNlbHkoMSk7CisJCX0KKwl9CisJZWxzZSBpZiAobWtkaXIoZGlybmFtZSwg MDcwMCkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wi OiAlbSIsIGRpcm5hbWUpOworfQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgorICogVGhp cyB3aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hpdmVGb3JtYXQK K3BhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2ZUZvcm1hdAlh cmNoRHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImMiKSA9PSAwKQor CQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChm b3JtYXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJ ZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikgPT0gMCkKKwkJYXJjaER1bXBGb3Jt YXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZGly ZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2Ug aWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0g YXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwbGFpbiIpID09IDAp CisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChm b3JtYXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBh cmNoVGFyOworCWVsc2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCBc IiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwidFwiIiwKKwkJ CQlmb3JtYXQpOworCisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMK aW5kZXggYzYwMjI3MmQ3ZGIuLmFmN2Q4MTVhNzcwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAgLTIs NyArMiw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFuIHV0aWxp dHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJZnJvbSBhIGJh Y2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIKKyAqCWZy b20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFsbCB1c2luZyB0 aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3JlIHdpbGwgcmVhZCB0 aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwyNyArNDEsNzEgQEAKICNpbmNsdWRlICJwb3N0 Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgog I2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2VuZGlmCiAKKyNp bmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisjaW5j bHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUu aCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGls cy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRf bG9uZy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hp dmVyLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKK3R5cGVkZWYgc3RydWN0IFNp bXBsZURhdGFiYXNlT2lkTGlzdENlbGwKK3sKKwlzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbAkqbmV4dDsKKwlPaWQJCQkJCQkJCQlkYl9vaWQ7CisJY29uc3QgY2hhcgkJCQkJCQkqZGJf bmFtZTsKK30gU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbDsKKwordHlwZWRlZiBzdHJ1Y3QgU2lt cGxlRGF0YWJhc2VPaWRMaXN0Cit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqaGVhZDsK KwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICp0YWlsOworfSBTaW1wbGVEYXRhYmFzZU9pZExp c3Q7CisKIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKTsKIHN0YXRpYyB2 b2lkIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0 aW9ucyAqb3B0cyk7CitzdGF0aWMgYm9vbCBJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShjb25zdCBj aGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyBpbnQgcmVzdG9yZU9uZURh dGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAor CQkJCQkJCSAgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsCisJCQkJCQkJICBjb25z dCBjaGFyICpkYm5hbWUpOworc3RhdGljIGludCBSZWFkT25lU3RhdGVtZW50KFN0cmluZ0luZm8g aW5CdWYsIEZJTEUgKnBmaWxlKTsKK3N0YXRpYyBpbnQgcmVzdG9yZUFsbERhdGFiYXNlcyhQR2Nv bm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCSAgIFNpbXBsZVN0cmlu Z0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1X b3JrZXJzKTsKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm91 dGZpbGUpOworc3RhdGljIHZvaWQgY29weV9nbG9iYWxfZmlsZV90b19vdXRfZmlsZShjb25zdCBj aGFyICpvdXRmaWxlLCBGSUxFICpwZmlsZSk7CitzdGF0aWMgaW50IGZpbHRlcl9kYm5hbWVzX2Zv cl9yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0 ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJCQkgIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVk ZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShj b25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQkgIFNpbXBsZURhdGFiYXNlT2lkTGlz dCAqZGJuYW1lX29pZF9saXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBl bmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lkLAorCQkJCQkJCQkJICBj b25zdCBjaGFyICpkYm5hbWUpOworc3RhdGljIHZvaWQgc2ltcGxlX3N0cmluZ19mdWxsX2xpc3Rf ZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxpc3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29p ZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCk7CitzdGF0aWMg dm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlz dCwKKwkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbCwKKwkJCQkJCQkJ CSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldik7CitzdGF0aWMgdm9pZCBzaW1wbGVf ZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwKKwkJT2lkIGRi X29pZCwgY29uc3QgY2hhciAqZGJuYW1lKTsKK3N0YXRpYyBzaXplX3QgcXVvdGVfbGl0ZXJhbF9p bnRlcm5hbChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbik7CitzdGF0aWMg Y2hhciAqcXVvdGVfbGl0ZXJhbF9jc3RyKGNvbnN0IGNoYXIgKnJhd3N0cik7CiAKIGludAogbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJUmVzdG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50 CQkJYzsKLQlpbnQJCQlleGl0X2NvZGU7CiAJaW50CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2 ZSAgICAqQUg7CiAJY2hhcgkgICAqaW5wdXRGaWxlU3BlYzsKIAlzdGF0aWMgaW50CWRpc2FibGVf dHJpZ2dlcnMgPSAwOwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CkBAIC03 NywxMSArMTIxLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXN0YXRpYyBpbnQJ c3RyaWN0X25hbWVzID0gMDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlzY2hl bWFfb25seSA9IGZhbHNlOworCWJvb2wJCQkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxl U3RyaW5nTGlzdAlkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCiAJc3RydWN0 IG9wdGlvbiBjbWRvcHRzW10gPSB7CiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNy ZWF0ZSIsIDAsIE5VTEwsICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJ eyJnbG9iYWxzLW9ubHkiLCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdk J30sCiAJCXsiZXhpdC1vbi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hl bWEiLCAxLCBOVUxMLCAnTid9LApAQCAtMTI4LDYgKzE3NSw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQl7Im5vLXNlY3VyaXR5LWxhYmVscyIsIG5vX2FyZ3VtZW50LCAmbm9fc2Vj dXJpdHlfbGFiZWxzLCAxfSwKIAkJeyJuby1zdWJzY3JpcHRpb25zIiwgbm9fYXJndW1lbnQsICZu b19zdWJzY3JpcHRpb25zLCAxfSwKIAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgNH0sCisJCXsiZXhjbHVkZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2 fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtMTU2LDcgKzIwNCw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xv bmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndX eDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhQWNDZDplZjpGOmdo Okk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwp KSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTE4MywxMSArMjMxLDE0IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlv cHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNl ICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xvYmFsLmRhdCBmaWxlIGZyb20gZGlyZWN0b3J5 ICovCisJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2gnOgog CQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5jcGFyYW1zLnBnaG9zdCA9 IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwotCiAJCQljYXNlICdqJzoJCQkvKiBudW1i ZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJCQkJaWYgKCFvcHRpb25fcGFyc2VfaW50KG9wdGFyZywg Ii1qLy0tam9icyIsIDEsCiAJCQkJCQkJCQkgIFBHX01BWF9KT0JTLApAQCAtMzAyLDYgKzM1Mywx MCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJZXhpdCgxKTsKIAkJCQlvcHRz LT5leGl0X29uX2Vycm9yID0gdHJ1ZTsKIAkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQkvKiBs aXN0IG9mIGRhdGFiYXNlcyBwYXR0ZXJucyB0aG9zZSBuZWVkcyB0byBza2lwIHdoaWxlIHJlc3Rv cmluZyAqLworCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVy bnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xv bmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCkBAIC0zMjksNiArMzg0LDEzIEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYg IW9wdHMtPmZpbGVuYW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9m IC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChk Yl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlw Z19sb2dfZXJyb3IoIm9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9n ZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5 IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0 X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAt ZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQog CXsKQEAgLTQwNCw2ICs0NjYsODYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJ CSBvcHRzLT5mb3JtYXROYW1lKTsKIAl9CiAKKwkvKgorCSAqIElmIHRvYy5kYXQgZmlsZSBkb2Vz IG5vdCBwcmVzZW50IGluIGN1cnJlbnQgcGF0aCwgdGhlbiBjaGVjayBmb3IKKwkgKiBnbG9iYWwu ZGF0LiAgSWYgZ2xvYmFsLmRhdCBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhl CisJICogZGF0YWJhc2VzIGZyb20gbWFwLmRhdChpZiBleGlzdCkgZmlsZSBsaXN0IGFuZCBza2lw IHJlc3RvcmluZyBmb3IKKwkgKiAtLWV4Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybnMuCisJICovCisJ aWYgKGlucHV0RmlsZVNwZWMgIT0gTlVMTCAmJgorCQkhSXNGaWxlRXhpc3RzSW5EaXJlY3Rvcnko aW5wdXRGaWxlU3BlYywgInRvYy5kYXQiKSkKKwl7CisJCS8qIElmIGdsb2JhbC5kYXQgaXMgZXhp c3QsIHRoZW4gcHJvY2VzcyBpdC4gKi8KKwkJaWYgKElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KHBn X3N0cmR1cChpbnB1dEZpbGVTcGVjKSwgImdsb2JhbC5kYXQiKSkKKwkJeworCQkJUEdjb25uICAq Y29ubiA9IE5VTEw7IC8qIENvbm5lY3Rpb24gdG8gcmVzdG9yZSBnbG9iYWwgc3FsIGNvbW1hbmRz LiAqLworCQkJaW50ICAgICBleGl0X2NvZGUgPSAwOworCisJCQkvKgorCQkJICogVXNlciBpcyBz dWdnZXN0ZWQgdG8gdXNlIHNpbmdsZSBkYXRhYmFzZSBkdW1wIGZvciAtLWxpc3Qgb3B0aW9uLgor CQkJICovCisJCQlpZiAob3B0cy0+dG9jU3VtbWFyeSkKKwkJCQlwZ19mYXRhbCgib3B0aW9uIC1s Ly0tbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHVzaW5nIGR1bXAgb2YgcGdfZHVtcGFsbCIpOwor CisJCQkvKgorCQkJICogQ29ubmVjdCB0byBkYXRhYmFzZSB0byBleGVjdXRlIGdsb2JhbCBzcWwg Y29tbWFuZHMgZnJvbQorCQkJICogZ2xvYmFsLmRhdCBmaWxlLgorCQkJICovCisJCQlpZiAob3B0 cy0+Y3BhcmFtcy5kYm5hbWUpCisJCQl7CisJCQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZShvcHRz LT5jcGFyYW1zLmRibmFtZSwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCQkg ICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFV TFQsCisJCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCisJCQkJaWYg KCFjb25uKQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIl c1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQkJfQorCisJCQkvKiBJZiBnbG9iYWxzLW9u bHksIHRoZW4gcmV0dXJuIGZyb20gaGVyZS4gKi8KKwkJCWlmIChnbG9iYWxzX29ubHkpCisJCQl7 CisJCQkJLyoKKwkJCQkgKiBPcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQg YWxsIHRoZSBnbG9iYWwgc3FsCisJCQkJICogY29tbWFuZHMuCisJCQkJICovCisJCQkJcHJvY2Vz c19nbG9iYWxfc3FsX2NvbW1hbmRzKGNvbm4sIGlucHV0RmlsZVNwZWMsIG9wdHMtPmZpbGVuYW1l KTsKKworCQkJCWlmIChjb25uKQorCQkJCQlQUWZpbmlzaChjb25uKTsKKworCQkJCXBnX2xvZ19p bmZvKCJkYXRhYmFzZXMgcmVzdG9yaW5nIGlzIHNraXBwZWQgYXMgLWcvLS1nbG9iYWxzLW9ubHkg b3B0aW9uIGlzIHNwZWNpZmllZCIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIE5vdyBy ZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2VzIGZyb20gbWFwLmRhdCBmaWxlLiAqLworCQkJCWV4aXRf Y29kZSA9IHJlc3RvcmVBbGxEYXRhYmFzZXMoY29ubiwgaW5wdXRGaWxlU3BlYywKKwkJCQkJCQkJ CQkJCWRiX2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJCQkJCQkJCQlvcHRzLAorCQkJCQkJCQkJCQkJ bnVtV29ya2Vycyk7CisJCQl9CisKKwkJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQkJ c2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKCZkYl9leGNsdWRlX3BhdHRlcm5zKTsKKwor CQkJcmV0dXJuIGV4aXRfY29kZTsKKwkJfQorCX0KKworCXJldHVybiByZXN0b3JlT25lRGF0YWJh c2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIE5VTEwpOworfQorLyoK KyAqIHJlc3RvcmVPbmVEYXRhYmFzZQorICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBkYXRh YmFzZSB1c2luZyB0b2MuZGF0IGZpbGUuCisgKiBkYm5hbWUgaXMgdGhlIGN1cnJlbnQgdG8gYmUg cmVzdG9yZWQgZGF0YWJhc2UgbmFtZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZU9uZURhdGFi YXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJ CSAgIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBjb25zdCBjaGFyICpkYm5hbWUp Cit7CisJQXJjaGl2ZQkJKkFIOworCWludAkJCWV4aXRfY29kZTsKKwogCUFIID0gT3BlbkFyY2hp dmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVPcHRpb25zKEFI LCBOVUxMLCBvcHRzKTsKQEAgLTQyOSwxMSArNTcxLDExIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCUFILT5udW1Xb3JrZXJzID0gbnVtV29ya2VyczsKIAogCWlmIChvcHRzLT50b2NT dW1tYXJ5KQotCQlQcmludFRPQ1N1bW1hcnkoQUgpOworCQlQcmludFRPQ1N1bW1hcnkoQUgsIGFw cGVuZF9kYXRhKTsKIAllbHNlCiAJewogCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFI KTsKLQkJUmVzdG9yZUFyY2hpdmUoQUgpOworCQlSZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2Rh dGEsIGRibmFtZSk7CiAJfQogCiAJLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQg ZXJyb3JzICovCkBAIC00NjksNiArNjExLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUp CiAJcHJpbnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkg ZGF0YWJhc2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1D LCAtLWNyZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2VcbiIp KTsKIAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQgb24gZXJy b3IsIGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAtZywgLS1nbG9i YWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJh c2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAgICAgICAgICAgICByZXN0 b3JlIG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWosIC0tam9icz1OVU0gICAgICAg ICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMgdG8gcmVzdG9yZVxuIikpOwogCXBy aW50ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1FICAgICAgdXNlIHRhYmxlIG9mIGNvbnRl bnRzIGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAtNDgxLDYgKzYyNCw3IEBAIHVzYWdlKGNvbnN0 IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1TLCAtLXN1cGVydXNlcj1OQU1FICAgICAg ICAgc3VwZXJ1c2VyIHVzZXIgbmFtZSB0byB1c2UgZm9yIGRpc2FibGluZyB0cmlnZ2Vyc1xuIikp OwogCXByaW50ZihfKCIgIC10LCAtLXRhYmxlPU5BTUUgICAgICAgICAgICAgcmVzdG9yZSBuYW1l ZCByZWxhdGlvbiAodGFibGUsIHZpZXcsIGV0Yy4pXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVQsIC0t dHJpZ2dlcj1OQU1FICAgICAgICAgICByZXN0b3JlIG5hbWVkIHRyaWdnZXJcbiIpKTsKKwlwcmlu dGYoXygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTiAgIGV4Y2x1ZGUgZGF0YWJhc2VzIHdo b3NlIG5hbWUgbWF0Y2hlcyB3aXRoIHBhdHRlcm5cbiIpKTsKIAlwcmludGYoXygiICAteCwgLS1u by1wcml2aWxlZ2VzICAgICAgICAgIHNraXAgcmVzdG9yYXRpb24gb2YgYWNjZXNzIHByaXZpbGVn ZXMgKGdyYW50L3Jldm9rZSlcbiIpKTsKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJhbnNh Y3Rpb24gICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmludGYo XygiICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVyaW5n IGRhdGEtb25seSByZXN0b3JlXG4iKSk7CkBAIC02MTksMyArNzYzLDY0MiBAQCByZWFkX3Jlc3Rv cmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpCiAK IAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIElzRmlsZUV4aXN0c0luRGlyZWN0 b3J5CisgKgorICogUmV0dXJucyB0cnVlIGlmIGZpbGUgZXhpc3QgaW4gY3VycmVudCBkaXJlY3Rv cnkuCisgKi8KK3N0YXRpYyBib29sCitJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShjb25zdCBjaGFy ICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0CQkJc3Q7CisJY2hh cgkJCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVz LyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5 IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3Qp ID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKKy8qCisgKiBSZWFkT25lU3RhdGVt ZW50CisgKgorICogVGhpcyB3aWxsIHN0YXJ0IHJlYWRpbmcgZnJvbSBwYXNzZWQgZmlsZSBwb2lu dGVyIHVzaW5nIGZnZXRjIGFuZCByZWFkIHRpbGwKKyAqIHNlbWljb2xvbihzcWwgc3RhdGVtZW50 IHRlcm1pbmF0b3IgZm9yIGdsb2JhbC5zcWwgZmlsZSkKKyAqCisgKiBFT0YgaXMgcmV0dXJuZWQg aWYgZW5kLW9mLWZpbGUgaW5wdXQgaXMgc2VlbjsgdGltZSB0byBzaHV0IGRvd24uCisgKi8KKwor c3RhdGljIGludAorUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVmLCBGSUxFICpwZmls ZSkKK3sKKwlpbnQJCQljOyAvKiBjaGFyYWN0ZXIgcmVhZCBmcm9tIGdldGMoKSAqLworCWludAkJ CW07CisKKwlTdHJpbmdJbmZvRGF0YQlxOworCWluaXRTdHJpbmdJbmZvKCZxKTsKKworCXJlc2V0 U3RyaW5nSW5mbyhpbkJ1Zik7CisKKwkvKgorCSAqIFJlYWQgY2hhcmFjdGVycyB1bnRpbCBFT0Yg b3IgdGhlIGFwcHJvcHJpYXRlIGRlbGltaXRlciBpcyBzZWVuLgorCSAqLworCXdoaWxlICgoYyA9 IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCXsKKwkJaWYgKGMgIT0gJ1wnJyAmJiBjICE9ICciJyAm JiBjICE9ICdcbicgJiYgYyAhPSAnOycpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGlu QnVmLCAoY2hhcikgYyk7CisJCQl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwkJ CXsKKwkJCQlpZiAoYyAhPSAnXCcnICYmIGMgIT0gJyInICYmIGMgIT0gJzsnICYmIGMgIT0gJ1xu JykKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSBjKTsKKwkJCQllbHNl CisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGMgPT0gJ1wnJyB8fCBjID09ICciJykK KwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnEsIChjaGFyKSBjKTsKKwkJCW0gPSBjOwor CisJCQl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwkJCXsKKwkJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcigmcSwgKGNoYXIpIGMpOworCisJCQkJaWYoYyA9PSBtKQorCQkJCXsKKwkJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhpbkJ1ZiwgcS5kYXRhKTsKKwkJCQkJcmVzZXRTdHJp bmdJbmZvKCZxKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGMgPT0g JzsnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpICc7Jyk7CisJ CQlicmVhazsKKwkJfQorCisJCWlmIChjID09ICdcbicpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihpbkJ1ZiwgKGNoYXIpICdcbicpOworCX0KKworCS8qIE5vIGlucHV0IGJlZm9yZSBFT0Ygc2ln bmFsIG1lYW5zIHRpbWUgdG8gcXVpdC4gKi8KKwlpZiAoYyA9PSBFT0YgJiYgaW5CdWYtPmxlbiA9 PSAwKQorCQlyZXR1cm4gRU9GOworCisJLyogQWRkICdcMCcgdG8gbWFrZSBpdCBsb29rIHRoZSBz YW1lIGFzIG1lc3NhZ2UgY2FzZS4gKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNo YXIpICdcMCcpOworCisJcmV0dXJuICdRJzsKK30KKworLyoKKyAqIGZpbHRlcl9kYm5hbWVzX2Zv cl9yZXN0b3JlCisgKgorICogVGhpcyB3aWxsIHJlbW92ZSBuYW1lcyBmcm9tIGFsbCBkYmxpc3Qg dGhvc2UgY2FuCisgKiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGRhdGFiYXNlX2V4Y2x1ZGVfcGF0dGVy biBsaXN0LgorICoKKyAqIHJldHVybnMgbnVtYmVyIG9mIGRibmFtZXMgdGhvc2Ugd2lsbCBiZSBy ZXN0b3JlZC4KKyAqLworc3RhdGljIGludAorZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoUEdj b25uICpjb25uLAorCQkJCQkJICAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xp c3QsCisJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpCit7CisJ U2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+ aGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpkYm9pZHByZWNlbGwgPSBOVUxMOwor CWludAkJCQkJCQljb3VudF9kYiA9IDA7CisJUFFFeHBCdWZmZXIgcXVlcnk7CisJUEdyZXN1bHQg ICAqcmVzOworCisJLyogUmV0dXJuIDAgaWYgdGhlcmUgaXMgbm8gZGIgdG8gcmVzdG9yZS4gKi8K KwlpZiAoZGJvaWRfY2VsbCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXF1ZXJ5ID0gY3JlYXRl UFFFeHBCdWZmZXIoKTsKKworCWlmICghY29ubikKKwkJcGdfbG9nX2luZm8oImNvbnNpZGVyaW5n IFBBVFRFUk4gYXMgTkFNRSBmb3IgLS1leGNsdWRlLWRhdGFiYXNlIG9wdGlvbiBhcyBubyBkYiBj b25uZWN0aW9uIHdoaWxlIGRvaW5nIHBnX3Jlc3RvcmUuIik7CisKKwkvKgorCSAqIFByb2Nlc3Mg b25lIGJ5IG9uZSBhbGwgZGJuYW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5n LCB0aGVuCisJICogcmVtb3ZlIGRibmFtZSBmcm9tIGxpc3QuCisJICovCisJd2hpbGUgKGRib2lk X2NlbGwgIT0gTlVMTCkKKwl7CisJCWJvb2wJCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsK KwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqbmV4dCA9IGRib2lkX2NlbGwtPm5leHQ7CisK KwkJZm9yIChTaW1wbGVTdHJpbmdMaXN0Q2VsbCAqY2VsbGRiID0gZGJfZXhjbHVkZV9wYXR0ZXJu cy5oZWFkOyBjZWxsZGI7IGNlbGxkYiA9IGNlbGxkYi0+bmV4dCkKKwkJeworCQkJLyoKKwkJCSAq IHRoZSBjb25zdHJ1Y3QgcGF0dGVybiBtYXRjaGluZyBxdWVyeToKKwkJCSAqIFNFTEVDVCAxIFdI RVJFIFhYWCBPUEVSQVRPUihwZ19jYXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09MTEFURQorCQkJ ICogcGdfY2F0YWxvZy5kZWZhdWx0CisJCQkgKgorCQkJICogWFhYIHJlcHJlc2VudHMgdGhlIHN0 cmluZyBsaXRlcmFsIGRhdGFiYXNlIG5hbWUgZGVyaXZlZCBmcm9tIHRoZQorCQkJICogZGJvaWRf bGlzdCB2YXJpYWJsZSwgd2hpY2ggaXMgaW5pdGlhbGx5IGV4dHJhY3RlZCBmcm9tIHRoZQorCQkJ ICogbWFwLmRhdCBmaWxlIGxvY2F0ZWQgaW4gdGhlIGJhY2t1cCBkaXJlY3RvcnkuICB0aGF0J3Mg d2h5IHdlCisJCQkgKiBuZWVkIHF1b3RlX2xpdGVyYWxfY3N0ci4KKwkJCSAqCisJCQkgKiBJZiB3 ZSBkb24ndCBoYXZlIGRiIGNvbm5lY3Rpb24sIHRoZW4gY29uc2lkZXIgcGF0dGVybnMgYXMgTkFN RQorCQkJICogb25seS4KKwkJCSAqLworCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGJvaWRfY2VsbC0+ ZGJfbmFtZSwgY2VsbGRiLT52YWwpID09IDApCisJCQkgICBza2lwX2RiX3Jlc3RvcmUgPSB0cnVl OworCQkJZWxzZSBpZiAoY29ubikKKwkJCXsKKwkJCQlpbnQJZG90Y250OworCisJCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXVlcnksICJTRUxFQ1QgMSAiKTsKKwkJCQlwcm9jZXNzU1FMTmFtZVBh dHRlcm4oY29ubiwgcXVlcnksIGNlbGxkYi0+dmFsLCBmYWxzZSwKKwkJCQkJCQkJCSAgZmFsc2Us IE5VTEwsIHF1b3RlX2xpdGVyYWxfY3N0cihkYm9pZF9jZWxsLT5kYl9uYW1lKSwKKwkJCQkJCQkJ CSAgTlVMTCwgTlVMTCwgTlVMTCwgJmRvdGNudCk7CisKKwkJCQlpZiAoZG90Y250ID4gMCkKKwkJ CQl7CisJCQkJCXBnX2xvZ19lcnJvcigiaW1wcm9wZXIgcXVhbGlmaWVkIG5hbWUgKHRvbyBtYW55 IGRvdHRlZCBuYW1lcyk6ICVzIiwKKwkJCQkJCQkJICBjZWxsZGItPnZhbCk7CisJCQkJCVBRZmlu aXNoKGNvbm4pOworCQkJCQlleGl0X25pY2VseSgxKTsKKwkJCQl9CisKKwkJCQlyZXMgPSBleGVj dXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOworCisJCQkJaWYgKChQUXJlc3VsdFN0YXR1cyhy ZXMpID09IFBHUkVTX1RVUExFU19PSykgJiYgUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlz a2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgXCIlc1wi IGlzIG1hdGNoaW5nIHdpdGggZXhjbHVkZSBwYXR0ZXJuOiBcIiVzXCIiLCBkYm9pZF9jZWxsLT5k Yl9uYW1lLCBjZWxsZGItPnZhbCk7CisJCQkJfQorCisJCQkJUFFjbGVhcihyZXMpOworCQkJCXJl c2V0UFFFeHBCdWZmZXIocXVlcnkpOworCQkJfQorCisJCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQor CQkJCWJyZWFrOworCQl9CisKKwkJLyogSW5jcmVtZW50IGNvdW50IGlmIGRiIG5lZWRzIHRvIGJl IHJlc3RvcmVkLiAqLworCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQl7CisJCQlwZ19sb2dfaW5m bygiZXhjbHVkaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRib2lkX2NlbGwtPmRiX25hbWUpOworCQkJ c2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShkYm5hbWVfb2lkX2xpc3QsIGRib2lkX2NlbGwsIGRi b2lkcHJlY2VsbCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQljb3VudF9kYisrOyAvKiBJbmNyZW1l bnQgZGIgY291bnRlci4gKi8KKwkJCWRib2lkcHJlY2VsbCA9IGRib2lkX2NlbGw7CisJCX0KKwor CQkvKiBQcm9jZXNzIG5leHQgZGJuYW1lIGZyb20gZGJuYW1lIGxpc3QuICovCisJCWRib2lkX2Nl bGwgPSBuZXh0OworCX0KKworCXJldHVybiBjb3VudF9kYjsKK30KKworLyoKKyAqIGdldF9kYm5h bWVfb2lkX2xpc3RfZnJvbV9tZmlsZQorICoKKyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCByZWFk IGxpbmUgYnkgbGluZSBhbmQgdGhlbiBwcmVwYXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICogbmFt ZXMgYW5kIGNvcnJlc3BvbmRpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJl ciBvZiBkYXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dl dF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgU2lt cGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJRklMRSAgICAqcGZpbGU7 CisJY2hhciAgICBtYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJY2hhciAgICBsaW5lW01BWFBH UEFUSF07CisJaW50ICAgICBjb3VudCA9IDA7CisKKwlpZiAoIUlzRmlsZUV4aXN0c0luRGlyZWN0 b3J5KHBnX3N0cmR1cChkdW1wZGlycGF0aCksICJtYXAuZGF0IikpCisJeworCQlwZ19sb2dfaW5m bygiZGF0YWJhc2VzIHJlc3RvcmluZyBpcyBza2lwcGVkIGFzIG1hcC5kYXQgZmlsZSBpcyBub3Qg cHJlc2VudCBpbiBcIiVzXCIiLCBkdW1wZGlycGF0aCk7CisJCXJldHVybiAwOworCX0KKworCXNu cHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1wZGlycGF0 aCk7CisKKwkvKiBPcGVuIG1hcC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKG1hcF9maWxl X3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgi Y291bGQgbm90IG9wZW4gbWFwLmRhdCBmaWxlOiBcIiVzXCIiLCBtYXBfZmlsZV9wYXRoKTsKKwor CS8qIEFwcGVuZCBhbGwgdGhlIGRibmFtZSBhbmQgZGJfb2lkIHRvIHRoZSBsaXN0LiAqLworCXdo aWxlKChmZ2V0cyhsaW5lLCBNQVhQR1BBVEgsIHBmaWxlKSkgIT0gTlVMTCkKKwl7CisJCU9pZCAg ICAgICAgIGRiX29pZCA9IEludmFsaWRPaWQ7CisJCWNoYXIJCWRiX29pZF9zdHJbTUFYUEdQQVRI ICsgMV0gPSB7J1wwJ307CisJCWNoYXIgICAgICAgIGRibmFtZVtNQVhQR1BBVEggKyAxXSA9IHsn XDAnfTsKKworCQkvKiBFeHRyYWN0IGRib2lkLiAqLworCQlzc2NhbmYobGluZSwgIiV1IiAsICZk Yl9vaWQpOworCQlzc2NhbmYobGluZSwgIiVzIiAsIGRiX29pZF9zdHIpOworCisJCS8qIE5vdyBj b3B5IGRibmFtZS4gKi8KKwkJc3RyY3B5KGRibmFtZSwgbGluZSArIHN0cmxlbihkYl9vaWRfc3Ry KSArIDEpOworCisJCS8qIFJlbW92ZSBcbiBmcm9tIGRiYW5tZS4gKi8KKwkJZGJuYW1lW3N0cmxl bihkYm5hbWUpIC0gMV0gPSAnXDAnOworCisJCXBnX2xvZ19pbmZvKCJmb3VuZCBkYXRhYmFzZSBc IiVzXCIgKE9JRDogJXUpIGluIG1hcC5kYXQgZmlsZSB3aGlsZSByZXN0b3JpbmcuIiwgZGJuYW1l LCBkYl9vaWQpOworCisJCS8qIFJlcG9ydCBlcnJvciBpZiBmaWxlIGhhcyBhbnkgY29ycnVwdGVk IGRhdGEuICovCisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQpIHx8IHN0cmxlbihkYm5hbWUpID09 IDApCisJCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRyeSBpbiBtYXAuZGF0IGZpbGUgYXQgbGluZSA6 ICVkIiwgY291bnQgKyAxKTsKKworCQkvKgorCQkgKiBYWFggOiBiZWZvcmUgYWRkaW5nIGRibmFt ZSBpbnRvIGxpc3QsIHdlIGNhbiB2ZXJpZnkgdGhhdCB0aGlzIGRiCisJCSAqIG5lZWRzIHRvIHNr aXBwZWQgZm9yIHJlc3RvcmUgb3Igbm90IGJ1dCBhcyBvZiBub3csIHdlIGFyZSBtYWtpbmcKKwkJ ICogYSBsaXN0IG9mIGFsbCB0aGUgZGF0YWJhc2VzLgorCQkgKi8KKwkJc2ltcGxlX2RiX29pZF9s aXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRiX29pZCwgZGJuYW1lKTsKKwkJY291bnQrKzsK Kwl9CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCisJZmNsb3NlKHBmaWxlKTsKKworCXJl dHVybiBjb3VudDsKK30KKworLyoKKyAqIHJlc3RvcmVBbGxEYXRhYmFzZXMKKyAqCisgKiBUaGlz IHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNlbnQgaW4KKyAqIGRp cmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAqCisgKiBUaGlzIHdpbGwg c2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZpZWQgd2l0aAorICog ZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVBbGxEYXRh YmFzZXMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJU2ltcGxl U3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJ CQkJaW50IG51bVdvcmtlcnMpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0CQkJZGJuYW1lX29p ZF9saXN0ID0ge05VTEwsIE5VTEx9OworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJCSpkYm9p ZF9jZWxsOworCWludAkJCQkJCQkJZXhpdF9jb2RlID0gMDsKKwlpbnQJCQkJCQkJCW51bV9kYl9y ZXN0b3JlID0gMDsKKwlpbnQJCQkJCQkJCW51bV90b3RhbF9kYjsKKworCW51bV90b3RhbF9kYiA9 IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShkdW1wZGlycGF0aCwgJmRibmFtZV9vaWRf bGlzdCk7CisKKwkvKiBJZiBtYXAuZGF0IGhhcyBubyBlbnRyeSwgcmV0dXJuIGZyb20gaGVyZS4g Ki8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlw Z19sb2dfaW5mbygiZm91bmQgdG90YWwgJWQgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxl IiwgbnVtX3RvdGFsX2RiKTsKKworCWlmICghY29ubikKKwl7CisJCXBnX2xvZ19pbmZvKCJ0cnlp bmcgdG8gY29ubmVjdCBkYXRhYmFzZSBcInBvc3RncmVzXCIgIHRvIGR1bXAgaW50byBvdXQgZmls ZSIpOworCisJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UoInBvc3RncmVzIiwgTlVMTCwgb3B0cy0+ Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNw YXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwg TlVMTCwgTlVMTCk7CisKKwkJLyogVHJ5IHdpdGggdGVtcGxhdGUxLiAqLworCQlpZiAoIWNvbm4p CisJCXsKKwkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCBkYXRhYmFzZSBcInRlbXBs YXRlMVwiIGFzIGZhaWxlZCB0byBjb25uZWN0IHRvIGRhdGFiYXNlIFwicG9zdGdyZXNcIiB0byBk dW1wIGludG8gb3V0IGZpbGUiKTsKKworCQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgidGVtcGxh dGUxIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCSAgIG9wdHMtPmNwYXJh bXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJCQkJ ICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMKTsKKworCQkJaWYgKCFjb25uKQorCQkJCXBn X2xvZ19pbmZvKCJ0aGVyZSBpcyBubyBkYXRhYmFzZSBjb25uZWN0aW9uIHNvIGNvbnNpZGVyIHBh dHRlcm4gYXMgc2ltcGxlIG5hbWUgZm9yIC0tZXhjbHVkZS1kYXRhYmFzZSIpOworCQl9CisJfQor CisJLyoKKwkgKiBwcm9jZXNzaW5nIHBnX3JldHNvcmUgLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRF Uk4vTkFNRSBpZiBubyBjb25uZWN0aW9uLgorCSAqLworCW51bV9kYl9yZXN0b3JlID0gZmlsdGVy X2RibmFtZXNfZm9yX3Jlc3RvcmUoY29ubiwgJmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQkJCQkJ CWRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJLyoKKwkgKiBUbyByZXN0b3JlIG11bHRpcGxlIGRh dGFiYXNlcywgLUMgKGNyZWF0ZSBkYXRhYmFzZSkgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQK KwkgKiBvciBhbGwgZGF0YWJhc2VzIHNob3VsZCBiZSBjcmVhdGVkIGJlZm9yZSBwZ19yZXN0b3Jl LgorCSAqLworCWlmIChvcHRzLT5jcmVhdGVEQiAhPSAxKQorCQlwZ19sb2dfaW5mbygicmVzdG9y aW5nIGR1bXAgb2YgcGdfZHVtcGFsbCB3aXRob3V0IC1DIG9wdGlvbiwgdGhlcmUgbWlnaHQgYmUg bXVsdGlwbGUgZGF0YWJhc2VzIGluIGRpcmVjdG9yeS4iKTsKKworCS8qIFRPRE86IE1BWF9PTl9F WElUX05JQ0VMWSBpcyAxMDAgbm93Li4uIG1heCBBSCBoYW5kbGUgcmVnaXN0ZXIgb24gZXhpdCAu Ki8KKwlpZiAobnVtX2RiX3Jlc3RvcmUgPiBNQVhfT05fRVhJVF9OSUNFTFkpCisJeworCQlzaW1w bGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoJmRibmFtZV9vaWRfbGlzdCk7CisJCXBnX2ZhdGFs KCJjb3VuZCBub3QgcmVzdG9yZSBtb3JlIHRoYW4gJWQgZGF0YWJhc2VzIGJ5IHNpbmdsZSBwZ19y ZXN0b3JlLCBoZXJlIHRvdGFsIGRhdGFiYXNlOiVkIiwKKwkJCQkgIE1BWF9PTl9FWElUX05JQ0VM WSwKKwkJCQkgIG51bV9kYl9yZXN0b3JlKTsKKwl9CisKKwkvKiBPcGVuIGdsb2JhbC5kYXQgZmls ZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCXBy b2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhjb25uLCBkdW1wZGlycGF0aCwgb3B0cy0+ZmlsZW5h bWUpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5lY3Rpb24gYXMgd2UgYXJlIGRvbmUgd2l0aCBn bG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlpZiAoY29ubikKKwkJUFFmaW5pc2goY29ubik7CisK KwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChkYm5hbWVf b2lkX2xpc3QuaGVhZCA9PSBOVUxMKQorCXsKKwkJcGdfbG9nX2luZm8oIm5vIGRhdGFiYXNlIG5l ZWRzIHRvIHJlc3RvcmUgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV90b3RhbF9kYik7CisJCXJl dHVybiAwOworCX0KKworCXBnX2xvZ19pbmZvKCJuZWVkcyB0byByZXN0b3JlICVkIGRhdGFiYXNl cyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51bV90b3RhbF9kYik7CisK KwkvKgorCSAqIFhYWDogVE9ETyB0aWxsIG5vdywgd2UgbWFkZSBhIGxpc3Qgb2YgZGF0YWJhc2Vz LCB0aG9zZSBuZWVkcyB0byBiZSByZXN0b3JlZAorCSAqIGFmdGVyIHNraXBwaW5nIG5hbWVzIG9m IGV4Y2x1ZGUtZGF0YWJhc2UuICBOb3cgd2UgY2FuIGxhdW5jaCBwYXJhbGxlbAorCSAqIHdvcmtl cnMgdG8gcmVzdG9yZSB0aGVzZSBkYXRhYmFzZXMuCisJICovCisJZGJvaWRfY2VsbCA9IGRibmFt ZV9vaWRfbGlzdC5oZWFkOworCisJd2hpbGUoZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJY2hh cgkJc3ViZGlycGF0aFtNQVhQR1BBVEhdOworCQlpbnQJCQlkYmV4aXRfY29kZTsKKworCQkvKgor CQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJyaWRlX2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2Fu IGJlIHJlc3RvcmVkIGludG8KKwkJICogYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3 aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJICovCisJCWlmIChvcHRzLT5jcGFyYW1zLm92ZXJy aWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUp OworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUgPSBOVUxMOworCQl9CisKKwkJc25w cmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgZHVtcGRpcnBh dGgsIGRib2lkX2NlbGwtPmRiX29pZCk7CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRh YmFzZSBcIiVzXCIiLCBkYm9pZF9jZWxsLT5kYl9uYW1lKTsKKworCQlkYmV4aXRfY29kZSA9IHJl c3RvcmVPbmVEYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCB0cnVlLCBkYm9p ZF9jZWxsLT5kYl9uYW1lKTsKKworCQkvKiBTdG9yZSBleGl0X2NvZGUgdG8gcmVwb3J0IGl0IGJh Y2suICovCisJCWlmIChleGl0X2NvZGUgPT0gMCAmJiBkYmV4aXRfY29kZSAhPSAwKQorCQkJZXhp dF9jb2RlID0gZGJleGl0X2NvZGU7CisKKwkJZGJvaWRfY2VsbCA9IGRib2lkX2NlbGwtPm5leHQ7 CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJhc2VzLiovCisJcGdfbG9n X2luZm8oIm51bWJlciBvZiByZXN0b3JlZCBkYXRhYmFzZXMgYXJlICVkIiwgbnVtX2RiX3Jlc3Rv cmUpOworCisJLyogRnJlZSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuICovCisJc2ltcGxlX2RiX29p ZF9mdWxsX2xpc3RfZGVsZXRlKCZkYm5hbWVfb2lkX2xpc3QpOworCisJcmV0dXJuIGV4aXRfY29k ZTsKK30KKworLyoKKyAqIHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcworICoKKyAqIFRoaXMg d2lsbCBvcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgd2lsbCBleGVjdXRlIGFsbCBnbG9iYWwgc3Fs IGNvbW1hbmRzIG9uZQorICogYnkgb25lIHN0YXRlbWVudC4KKyAqIFNlbWljb2xvbiBpcyBjb25z aWRlcmVkIGFzIHN0YXRlbWVudCB0ZXJtaW5hdG9yLiAgSWYgb3V0ZmlsZSBpcyBwYXNzZWQsIHRo ZW4KKyAqIHRoaXMgd2lsbCBjb3B5IGFsbCBzcWwgY29tbWFuZHMgaW50byBvdXRmaWxlIHJhdGhl ciB0aGVuIGV4ZWN1dGluZyB0aGVtLgorICovCitzdGF0aWMgdm9pZAorcHJvY2Vzc19nbG9iYWxf c3FsX2NvbW1hbmRzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIGNvbnN0 IGNoYXIgKm91dGZpbGUpCit7CisJY2hhciAgICAgICAgICAgIGdsb2JhbF9maWxlX3BhdGhbTUFY UEdQQVRIXTsKKwlQR3Jlc3VsdAkJKnJlc3VsdDsKKwlTdHJpbmdJbmZvRGF0YQlzcWxzdGF0ZW1l bnQ7CisJRklMRQkJCSpwZmlsZTsKKworCXNucHJpbnRmKGdsb2JhbF9maWxlX3BhdGgsIE1BWFBH UEFUSCwgIiVzL2dsb2JhbC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBOb3cgb3BlbiBnbG9i YWwuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3BlbihnbG9iYWxfZmlsZV9wYXRoLCBQR19CSU5B UllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVu IGdsb2JhbC5kYXQgZmlsZTogXCIlc1wiIiwgZ2xvYmFsX2ZpbGVfcGF0aCk7CisKKwkvKgorCSAq IElmIG91dGZpbGUgaXMgZ2l2ZW4sIHRoZW4ganVzdCBjb3B5IGFsbCBnbG9iYWwuZGF0IGZpbGUg ZGF0YSBpbnRvCisJICogb3V0ZmlsZS4KKwkgKi8KKwlpZiAob3V0ZmlsZSkKKwl7CisJCWNvcHlf Z2xvYmFsX2ZpbGVfdG9fb3V0X2ZpbGUob3V0ZmlsZSwgcGZpbGUpOworCQlyZXR1cm47CisJfQor CisJLyogSW5pdCBzcWxzdGF0ZW1lbnQgdG8gYXBwZW5kIGNvbW1hbmRzLiAqLworCWluaXRTdHJp bmdJbmZvKCZzcWxzdGF0ZW1lbnQpOworCisJLyogUHJvY2VzcyBmaWxlIHRpbGwgRU9GIGFuZCBl eGVjdXRlIHNxbCBzdGF0ZW1lbnRzLiAqLworCXdoaWxlIChSZWFkT25lU3RhdGVtZW50KCZzcWxz dGF0ZW1lbnQsIHBmaWxlKSAhPSBFT0YpCisJeworCQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVz Iiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCQlyZXN1bHQgPSBQUWV4ZWMoY29ubiwgc3Fsc3RhdGVt ZW50LmRhdGEpOworCisJCXN3aXRjaCAoUFFyZXN1bHRTdGF0dXMocmVzdWx0KSkKKwkJeworCQkJ Y2FzZSBQR1JFU19DT01NQU5EX09LOgorCQkJY2FzZSBQR1JFU19UVVBMRVNfT0s6CisJCQljYXNl IFBHUkVTX0VNUFRZX1FVRVJZOgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwZ19sb2df ZXJyb3IoImNvdWxkIG5vdCBleGVjdXRlIHF1ZXJ5OiBcIiVzXCIgXG5Db21tYW5kIHdhczogXCIl c1wiIiwgUFFlcnJvck1lc3NhZ2UoY29ubiksIHNxbHN0YXRlbWVudC5kYXRhKTsKKwkJfQorCQlQ UWNsZWFyKHJlc3VsdCk7CisJfQorCisJZmNsb3NlKHBmaWxlKTsKK30KKworLyoKKyAqIGNvcHlf Z2xvYmFsX2ZpbGVfdG9fb3V0X2ZpbGUKKyAqCisgKiBUaGlzIHdpbGwgY29weSBnbG9iYWwuZGF0 IGZpbGUgaW50byBvdXQgZmlsZS4gIElmICItIiBpcyB1c2VkIGFzIG91dGZpbGUsCisgKiB0aGVu IHByaW50IGNvbW1hbmRzIHRvIHRoZSBzdGRvdXQuCisgKi8KK3N0YXRpYyB2b2lkCitjb3B5X2ds b2JhbF9maWxlX3RvX291dF9maWxlKGNvbnN0IGNoYXIgKm91dGZpbGUsIEZJTEUgKnBmaWxlKQor eworCWNoYXIJb3V0X2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCUZJTEUJKk9QRjsKKwlpbnQJCWM7 CisKKwkvKiAiLSIgaXMgdXNlZCBmb3Igc3Rkb3V0LiAqLworCWlmIChzdHJjbXAob3V0ZmlsZSwg Ii0iKSA9PSAwKQorCQlPUEYgPSBzdGRvdXQ7CisJZWxzZQorCXsKKwkJc25wcmludGYob3V0X2Zp bGVfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBvdXRmaWxlKTsKKwkJT1BGID0gZm9wZW4ob3V0X2Zp bGVfcGF0aCwgUEdfQklOQVJZX1cpOworCisJCWlmIChPUEYgPT0gTlVMTCkKKwkJeworCQkJZmNs b3NlKHBmaWxlKTsKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlOiBcIiVzXCIiLCBv dXRmaWxlKTsKKwkJfQorCX0KKworCS8qIE5vdyBhcHBlbmQgZ2xvYmFsLmRhdCBpbnRvIG91dCBm aWxlLiAqLworCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQlmcHV0YyhjLCBP UEYpOworCisJZmNsb3NlKHBmaWxlKTsKKworCS8qIENsb3NlIG91dCBmaWxlLiAqLworCWlmIChz dHJjbXAob3V0ZmlsZSwgIi0iKSAhPSAwKQorCQlmY2xvc2UoT1BGKTsKK30KKworLyoKKyAqIHNp bXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQKKyAqCisgKiBhcHBlbmRzIGEgbm9kZSB0byB0aGUgbGlz dCBpbiB0aGUgZW5kLgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX2RiX29pZF9saXN0X2FwcGVu ZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQsCisJCWNvbnN0IGNoYXIg KmRibmFtZSkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsOworCisJY2VsbCA9 IHBnX21hbGxvY19vYmplY3QoU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCk7CisKKwljZWxsLT5u ZXh0ID0gTlVMTDsKKwljZWxsLT5kYl9vaWQgPSBkYl9vaWQ7CisJY2VsbC0+ZGJfbmFtZSA9IHBn X3N0cmR1cChkYm5hbWUpOworCisJaWYgKGxpc3QtPnRhaWwpCisJCWxpc3QtPnRhaWwtPm5leHQg PSBjZWxsOworCWVsc2UKKwkJbGlzdC0+aGVhZCA9IGNlbGw7CisJbGlzdC0+dGFpbCA9IGNlbGw7 Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxl dGUgYWxsIGNlbGwgZnJvbSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lk CitzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICps aXN0KQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOwor CVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKm5leHRjZWxsID0gTlVMTDsKKworCXdoaWxlIChj ZWxsKQorCXsKKwkJbmV4dGNlbGwgPSBjZWxsLT5uZXh0OworCQlwZnJlZSAoY2VsbCk7CisJCWNl bGwgPSBuZXh0Y2VsbDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0g TlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZQorICoKKyAq IGRlbGV0ZSBhbGwgY2VsbCBmcm9tIHN0cmluZyBsaXN0LgorICovCitzdGF0aWMgdm9pZAorc2lt cGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxpc3QpCit7CisJ U2ltcGxlU3RyaW5nTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOworCVNpbXBsZVN0cmluZ0xp c3RDZWxsICAgICpjZWxsbmV4dCA9IE5VTEw7CisKKwl3aGlsZSAoY2VsbCkKKwl7CisJCWNlbGxu ZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJCWNlbGwgPSBjZWxsbmV4dDsKKwl9 CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0gTlVMTDsKK30KKworLyoKKyAq IHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUgY2VsbCBmcm9tIGRhdGFi YXNlIGFuZCBvaWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9k ZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LAorCQlTaW1wbGVEYXRhYmFzZU9pZExp c3RDZWxsICpjZWxsLAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpwcmV2KQoreworCWlm IChwcmV2ID09IE5VTEwpCisJeworCQlsaXN0LT5oZWFkID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUo Y2VsbCk7CisJfQorCWVsc2UKKwl7CisJCXByZXYtPm5leHQgPSBjZWxsLT5uZXh0OworCQlwZnJl ZShjZWxsKTsKKwl9Cit9CisKKy8qCisgKiBxdW90ZV9saXRlcmFsX2ludGVybmFsCisgKi8KK3N0 YXRpYyBzaXplX3QKK3F1b3RlX2xpdGVyYWxfaW50ZXJuYWwoY2hhciAqZHN0LCBjb25zdCBjaGFy ICpzcmMsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqczsKKwljaGFyCSAgICpzYXZlZHN0 ID0gZHN0OworCisJZm9yIChzID0gc3JjOyBzIDwgc3JjICsgbGVuOyBzKyspCisJeworCQlpZiAo KnMgPT0gJ1xcJykKKwkJeworCQkJKmRzdCsrID0gRVNDQVBFX1NUUklOR19TWU5UQVg7CisJCQli cmVhazsKKwkJfQorCX0KKworCSpkc3QrKyA9ICdcJyc7CisJd2hpbGUgKGxlbi0tID4gMCkKKwl7 CisJCWlmIChTUUxfU1RSX0RPVUJMRSgqc3JjLCB0cnVlKSkKKwkJCSpkc3QrKyA9ICpzcmM7CisJ CSpkc3QrKyA9ICpzcmMrKzsKKwl9CisJKmRzdCsrID0gJ1wnJzsKKworCXJldHVybiBkc3QgLSBz YXZlZHN0OworfQorCisvKgorICogcXVvdGVfbGl0ZXJhbF9jc3RyCisgKgorICoJICByZXR1cm5z IGEgcHJvcGVybHkgcXVvdGVkIGxpdGVyYWwKKyAqIGNvcGllZCBmcm9tIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9xdW90ZS5jCisgKi8KK3N0YXRpYyBjaGFyICoKK3F1b3RlX2xpdGVyYWxfY3N0cihj b25zdCBjaGFyICpyYXdzdHIpCit7CisJY2hhcgkgICAqcmVzdWx0OworCWludAkJCWxlbjsKKwlp bnQJCQluZXdsZW47CisKKwlsZW4gPSBzdHJsZW4ocmF3c3RyKTsKKworCS8qIFdlIG1ha2UgYSB3 b3JzdC1jYXNlIHJlc3VsdCBhcmVhOyB3YXN0aW5nIGEgbGl0dGxlIHNwYWNlIGlzIE9LICovCisJ cmVzdWx0ID0gcGdfbWFsbG9jKGxlbiAqIDIgKyAzICsgMSk7CisKKwluZXdsZW4gPSBxdW90ZV9s aXRlcmFsX2ludGVybmFsKHJlc3VsdCwgcmF3c3RyLCBsZW4pOworCXJlc3VsdFtuZXdsZW5dID0g J1wwJzsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv dC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKb2xkIG1vZGUg MTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyMTQyNDBmMWFlNS4uZGU0MWVjMDZkODYKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90 LzAwMV9iYXNpYy5wbApAQCAtMjE5LDYgKzIxOSwxMSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJ J3BnX3Jlc3RvcmU6IG9wdGlvbnMgLUNcLy0tY3JlYXRlIGFuZCAtMVwvLS1zaW5nbGUtdHJhbnNh Y3Rpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInCiApOwogCitjb21tYW5kX2ZhaWxzX2xpa2Uo CisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1v bmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1l eGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFs cy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknKTsKKwogIyBhbHNvIGZh aWxzIGZvciAtciBhbmQgLXQsIGJ1dCBpdCBzZWVtcyBwb2ludGxlc3MgdG8gYWRkIG1vcmUgdGVz dHMgZm9yIHRob3NlLgogY29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX2R1bXBhbGwnLCAnLS1l eGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScgXSwKQEAgLTIyNiw0ICsyMzEs OCBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6IG9wdGlvbiAtLWV4Y2x1ZGUt ZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seScK ICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0Jywg J3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9y bWF0ICJ4IjtcRS8sCisJJ3BnX2R1bXBhbGw6IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCcp OwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDlhM2JlZTkz ZGVjLi5jZGFmMWFkMzQzYyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI2NzMsNiAr MjY3Myw4IEBAIFNodXRkb3duTW9kZQogU2lnblRTVmVjdG9yCiBTaW1wbGVBY3Rpb25MaXN0CiBT aW1wbGVBY3Rpb25MaXN0Q2VsbAorU2ltcGxlRGF0YWJhc2VPaWRMaXN0CitTaW1wbGVEYXRhYmFz ZU9pZExpc3RDZWxsCiBTaW1wbGVFY29udGV4dFN0YWNrRW50cnkKIFNpbXBsZU9pZExpc3QKIFNp bXBsZU9pZExpc3RDZWxsCi0tIAoyLjM5LjMKCg== --00000000000039ee2f062dd7432c--