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 1tkRUW-003z4E-6W for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Feb 2025 17:34:40 +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 1tkRUT-00CZgw-VD for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Feb 2025 17:34:37 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tkRUS-00CZgn-MK for pgsql-hackers@lists.postgresql.org; Tue, 18 Feb 2025 17:34:37 +0000 Received: from mail-yw1-x112f.google.com ([2607:f8b0:4864:20::112f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tkRUQ-001Yeo-05 for pgsql-hackers@postgresql.org; Tue, 18 Feb 2025 17:34:35 +0000 Received: by mail-yw1-x112f.google.com with SMTP id 00721157ae682-6f678a27787so49197137b3.1 for ; Tue, 18 Feb 2025 09:34:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=datadoghq.com; s=google; t=1739900073; x=1740504873; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6OFLVFQGCve7OIIHK4dDvildrXPfIzG5AIvdSWLUlLA=; b=V0JGUuO1eY0hlstBhHcEvVhYICtcHc1QZ9EXSg04d9/SWtFqUXZa+YoEwSCnVJauPJ gUQyY4WlLCHRX5p9gnjnclIAXNZD7koM/WWkr/Krd6wafe1WljLu2/wCGYbz4SHVr+6f QlaaryVXWN3s8dI11IGFGgOfA0nun2GfEOePs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739900073; x=1740504873; 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=6OFLVFQGCve7OIIHK4dDvildrXPfIzG5AIvdSWLUlLA=; b=O4041JmLcdx3lBsQfa8PIptVsAnM8LKOaLKvf2ufWDtqiN86kh+BRF2llKRYSmZr93 66PiYoKr/IPTaYRNEH3og4dkOA2kxBUXpslY5Xb7C49hOSTv91SZcJRkcKp1mZHTtuCm g/KmMpKVOqk4OzDeUlMcd9cEEti+jnxSODYGye5nsvSeQwuWV8NGs9XEVz1q2a0tzQCq 3Oe8xIL7TFPjrSI5eTHhFBtKkSzKYceWwXp24jF/3UElHUAEAzNkR7/JmvOb86z9fWCZ bEKsTBZ843zmjztkqYLRSfs5cNFVaw2Tsnd98oF1yqV+cQ+3xWPhXvPkjzV/Qur3xUa0 SJnw== X-Forwarded-Encrypted: i=1; AJvYcCVgHT88JIZopKqfNoLcSEifnZtCGkwrDTADOBcHUlix+JJDF7wVpczPQEgmMZI7kXVVCyXpWXwo1QIKnz2V@postgresql.org X-Gm-Message-State: AOJu0Yy8nIsLlRtg3p8NNms9L4A+0Xb85U4p3+8btvTPMxHrUZk4mCpt W1irwa6Ar/GstMUpTPEMLTj+Ez01U1rOjDsWEwOIMQEBCrGUclOBdAz8bq1KsuKzDFl9IL/VeY6 T+glhmcv/nvkpV5b6w4mFYxrw4xvZBaR65CkOOmpl3ZzkBNxnIBbZeA== X-Gm-Gg: ASbGncvW8GMRKoBiO36Qt/fVGzGSaiPwz5MrTI9niBDFvbkFk97a1nJD8ftzyPvI50T PwIeQ/lyjmNoulUNkRUpNGEHH2jaAaQ2l/aEuDnXjcg2Mq9pSJ1kGYtt8/dZoJpjwqm1O9OkeY2 leAv1AbEFyBoPCwHXWsmv5tm5iQX1RxQ== X-Google-Smtp-Source: AGHT+IFhDyOCDdjhPozwFmgT+yd3gH1GsdnO/9JBcTDdJ/RevQnbJKOJXoXyj2A6ZpPf1PJ8KJlrsUiqvqST/D3u6gU= X-Received: by 2002:a05:690c:690e:b0:6f7:53d2:d733 with SMTP id 00721157ae682-6fba53cc2b3mr8989677b3.0.1739900072736; Tue, 18 Feb 2025 09:34:32 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Anthonin Bonnefoy Date: Tue, 18 Feb 2025 18:34:20 +0100 X-Gm-Features: AWEUYZmsZ5TFwlCS3T23FBO8bnezcq2V0p3Cn2wZlPsQNT9yiu2FLo2BjbAHk6o Message-ID: Subject: Re: Add Pipelining support in psql To: Michael Paquier Cc: Jelte Fennema-Nio , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000c8bb76062e6e0d75" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c8bb76062e6e0d75 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Feb 18, 2025 at 8:23=E2=80=AFAM Michael Paquier wrote: > This is a pretty cool patch. I like the structure you have used for > the integration with the tracking of the number of commands, the > number of syncs (like pgbench) put in a pipeline, the number of > results requested and the number of results available. That makes the > whole easier to look at with a state in pset. Thanks! > + PSQL_SEND_PIPELINE_SYNC, > + PSQL_START_PIPELINE_MODE, > + PSQL_END_PIPELINE_MODE, > + PSQL_FLUSH, > + PSQL_SEND_FLUSH_REQUEST, > + PSQL_GET_RESULTS, > > These new values are inconsistent, let's use some more PSQL_SEND_* > here. That makes the whole set of values more greppable. Changed. > The tests in psql.sql are becoming really long. Perhaps it would be > better to split that into its own file, say psql_pipeline.sql? The > input file is already 2k lines, you are adding 15% more lines to that. Agreed, I wasn't sure if this was enough to warrant a dedicated test file. This is now separated in psql_pipeline.sql. > + * otherwise, calling PQgetResults will block. > > Likely PQgetResults =3D> PQgetResult(). Indeed, this is fixed. > Set of nits with the style of the code, but I'd suggest to use > braces {} here, to outline that the comment is in a block. There's a > second, larger one in discardAbortedPipelineResults(). > > + if (strcmp(cmd, "gx") =3D=3D 0 && PQpipelineStatus(pset.db) !=3D = PQ_PIPELINE_OFF) > + { > + pg_log_error("\\gx not allowed in pipeline mode"); > + clean_extended_state(); > + return PSQL_CMD_ERROR; > + } Changed. > What is the reasoning here behind this restriction? \gx is a wrapper > of \g with expanded mode on, but it is also possible to call \g with > expanded=3Don, bypassing this restriction. The issue is that \gx enables expanded mode for the duration of the query and immediately reset it in sendquery_cleanup. With pipelining, the command is piped and displaying is done by either \endpipeline or \getresults, so the flag change has no impact. Forbidding it was a way to make it clearer that it won't have the expected effect. If we wanted a similar feature, this would need to be done with something like \endpipelinex or \getresultsx. > Let's split the prompt patch with the support of %P into its own > patch. > > -#define DEFAULT_PROMPT1 "%/%R%x%# " > -#define DEFAULT_PROMPT2 "%/%R%x%# " > +#define DEFAULT_PROMPT1 "%/%R%P%x%# " > +#define DEFAULT_PROMPT2 "%/%R%P%x%# " > #define DEFAULT_PROMPT3 ">> " > > I don't think that changing this default is a good idea. Everybody > can do that in their own .psqlrc (spoiler: I do). > > The idea to use three fields with a hardcoded format does not look > like a good idea to me. I think that this should be done in a > different and more extensible way: > - Use %P to track if we are in pipeline mode on, off or abort. > - Define three new variables that behave like ROW_COUNT, but for the > fields you want to track here. These could then be passed down to a > PROMPT with %:name:, grammar already supported. > > That would make the whole much more flexible. At it seems to me that > we could also add requested_results to this set? These could be named > with the same prefix, like PIPELINE_SYNC_COUNT, etc. I've split the patch and created the 3 special variables: PIPELINE_SYNC_COUNT, PIPELINE_COMMAND_COUNT, PIPELINE_RESULT_COUNT. For requested_results, I don't think there's value in exposing it since it is used as an exit condition and thus will always be 0 outside of ExecQueryAndProcessResults. --000000000000c8bb76062e6e0d75 Content-Type: application/octet-stream; name="v08-0001-Add-pipelining-support-in-psql.patch" Content-Disposition: attachment; filename="v08-0001-Add-pipelining-support-in-psql.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7arihgf0 RnJvbSBhOWY2MGE2ZjAxOTIyZjE0N2E4Njk1MThiY2FjZmM5YWQxZTg4ZWQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRob25pbiBCb25uZWZveSA8YW50aG9uaW4uYm9ubmVmb3lA ZGF0YWRvZ2hxLmNvbT4KRGF0ZTogVHVlLCA1IE5vdiAyMDI0IDEwOjI2OjU0ICswMTAwClN1Ympl Y3Q6IEFkZCBwaXBlbGluaW5nIHN1cHBvcnQgaW4gcHNxbAoKV2l0aCBcYmluZCwgXHBhcnNlLCBc YmluZF9uYW1lZCBhbmQgXGNsb3NlLCBpdCBpcyBwb3NzaWJsZSB0byBpc3N1ZQpxdWVyaWVzIGZy b20gcHNxbCB1c2luZyB0aGUgZXh0ZW5kZWQgcHJvdG9jb2wuIEhvd2V2ZXIsIGl0IHdhc24ndApw b3NzaWJsZSB0byBzZW5kIHRob3NlIHF1ZXJpZXMgdXNpbmcgcGlwZWxpbmluZyBhbmQgdGhlIG9u bHkgd2F5IHRvIHRlc3QKcGlwZWxpbmVkIHF1ZXJpZXMgd2FzIHRocm91Z2ggcGdiZW5jaCdzIHRh cCB0ZXN0cy4KClRoaXMgcGF0Y2ggYWRkcyBhZGRpdGlvbmFsIHBzcWwgbWV0YS1jb21tYW5kcyB0 byBzdXBwb3J0IHBpcGVsaW5pbmc6ClxzdGFydHBpcGVsaW5lLCBcZW5kcGlwZWxpbmUgYW5kIFxz eW5jcGlwZWxpbmUsIG1pcnJvcmluZyB0aGUgZXhpc3RpbmcKbWV0YS1jb21tYW5kcyBpbiBwZ2Jl bmNoLiBBZGRpdGlvbmFsIG1ldGEtY29tbWFuZHMgYWxsb3cgdG8gZmx1c2ggYW5kCnJlYWQgcmVz dWx0cyBvZiBhbiBvbmdvaW5nIHBpcGVsaW5lOiBcZmx1c2hyZXF1ZXN0LCBcZmx1c2ggYW5kIFxn ZXRyZXN1bHRzCgpcc3RhcnRwaXBlbGluZSBzdGFydHMgYSBuZXcgcGlwZWxpbmUuIEFsbCBleHRl bmRlZCBxdWVyaWVzIHdpbGwgYmUKcXVldWVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIHBpcGVsaW5l IGlzIHJlYWNoZWQuClxlbmRwaXBlbGluZSBlbmRzIGFuIG9uZ29pbmcgcGlwZWxpbmUuIEFsbCBx dWV1ZWQgY29tbWFuZHMgd2lsbCBiZSBzZW50CnRvIHRoZSBzZXJ2ZXIgYW5kIGFsbCByZXNwb25z ZXMgd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhlIHBzcWwuClxzeW5jcGlwZWxpbmUgcXVldWVzIGEg c3luY2hyb25pc2F0aW9uIHBvaW50IHdpdGhvdXQgZmx1c2hpbmcgdGhlCmNvbW1hbmRzIHRvIHRo ZSBzZXJ2ZXIKXGZsdXNoIENhbGwgUFFmbHVzaCBvbiBwc3FsJ3MgY29ubmVjdGlvbgpcZmx1c2hy ZXF1ZXN0IHF1ZXVlcyBhIGZsdXNocmVxdWVzdApcZ2V0cmVzdWx0cyByZWFkcyBzZXJ2ZXIncyBy ZXN1bHRzLiBVbnNlbnQgZGF0YSBhcmUgYXV0b21hdGljYWxseSBwdXNoZWQKd2hlbiBcZ2V0cmVz dWx0cyBpcyBjYWxsZWQKClRob3NlIG1ldGEtY29tbWFuZHMgd2lsbCBhbGxvdyB0byB0ZXN0IHBp cGVsaW5lIGJlaGF2aW91ciB1c2luZwpwc3FsIHJlZ3Jlc3Npb24gdGVzdHMuCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sICAgICAgICAgfCAgNzAgKysrKysKIHNyYy9iaW4vcHNx bC9jb21tYW5kLmMgICAgICAgICAgICAgICAgIHwgMTUxICsrKysrKysrKysKIHNyYy9iaW4vcHNx bC9jb21tb24uYyAgICAgICAgICAgICAgICAgIHwgMjc5ICsrKysrKysrKysrKysrKystCiBzcmMv YmluL3BzcWwvaGVscC5jICAgICAgICAgICAgICAgICAgICB8ICAgNyArCiBzcmMvYmluL3BzcWwv c2V0dGluZ3MuaCAgICAgICAgICAgICAgICB8ICAxMiArCiBzcmMvYmluL3BzcWwvdGFiLWNvbXBs ZXRlLmluLmMgICAgICAgICB8ICAgOCArLQogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZSAgICAgfCAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWxfcGlwZWxpbmUuc3Fs IHwgNDAxICsrKysrKysrKysrKysrKysrKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgOTE5IGlu c2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3BzcWxfcGlwZWxpbmUuc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9wc3FsLXJlZi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sCmluZGV4 IGYzMDQ0ZmFjMWZhLi5mZGFlMWVkMDQ3OSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9w c3FsLXJlZi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbApAQCAtMzY3 NCw2ICszNjc0LDc2IEBAIHRlc3RkYj0mZ3Q7IDx1c2VyaW5wdXQ+XHNldGVudiBMRVNTIC1pbXg0 RjwvdXNlcmlucHV0PgogICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+ CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXBwLXBzcWwtbWV0YS1jb21tYW5kLXBpcGVsaW5l Ij4KKyAgICAgIDx0ZXJtPjxsaXRlcmFsPlxzdGFydHBpcGVsaW5lPC9saXRlcmFsPjwvdGVybT4K KyAgICAgIDx0ZXJtPjxsaXRlcmFsPlxzeW5jcGlwZWxpbmU8L2xpdGVyYWw+PC90ZXJtPgorICAg ICAgPHRlcm0+PGxpdGVyYWw+XGVuZHBpcGVsaW5lPC9saXRlcmFsPjwvdGVybT4KKyAgICAgIDx0 ZXJtPjxsaXRlcmFsPlxmbHVzaHJlcXVlc3Q8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgPHRlcm0+ PGxpdGVyYWw+XGZsdXNoPC9saXRlcmFsPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxsaXRlcmFsPlxn ZXRyZXN1bHRzIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWJlcl9yZXN1bHRz PC9yZXBsYWNlYWJsZT4gXTwvbGl0ZXJhbD48L3Rlcm0+CisKKyAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBncm91cCBvZiBjb21tYW5kcyBpbXBsZW1lbnRz IHBpcGVsaW5pbmcgb2YgU1FMIHN0YXRlbWVudHMuCisgICAgICAgICAgQSBwaXBlbGluZSBtdXN0 IGJlZ2luIHdpdGggYSA8Y29tbWFuZD5cc3RhcnRwaXBlbGluZTwvY29tbWFuZD4KKyAgICAgICAg ICBhbmQgZW5kIHdpdGggYW4gPGNvbW1hbmQ+XGVuZHBpcGVsaW5lPC9jb21tYW5kPi4gSW4gYmV0 d2VlbiB0aGVyZQorICAgICAgICAgIG1heSBiZSBhbnkgbnVtYmVyIG9mIDxjb21tYW5kPlxzeW5j cGlwZWxpbmU8L2NvbW1hbmQ+IGNvbW1hbmRzLAorICAgICAgICAgIHdoaWNoIHNlbmRzIGEgPGxp bmsgbGlua2VuZD0icHJvdG9jb2wtZmxvdy1leHQtcXVlcnkiPnN5bmMgbWVzc2FnZTwvbGluaz4K KyAgICAgICAgICB3aXRob3V0IGVuZGluZyB0aGUgb25nb2luZyBwaXBlbGluZSBhbmQgZmx1c2hp bmcgdGhlIHNlbmQgYnVmZmVyLgorICAgICAgICAgIEluIHBpcGVsaW5lIG1vZGUsIHN0YXRlbWVu dHMgYXJlIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRob3V0IHdhaXRpbmcKKyAgICAgICAgICBmb3Ig dGhlIHJlc3VsdHMgb2YgcHJldmlvdXMgc3RhdGVtZW50cy4gIFNlZQorICAgICAgICAgIDx4cmVm IGxpbmtlbmQ9ImxpYnBxLXBpcGVsaW5lLW1vZGUiLz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAg ICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgUGlwZWxpbmUgbW9kZSByZXF1 aXJlcyB0aGUgdXNlIG9mIGV4dGVuZGVkIHF1ZXJ5IHByb3RvY29sLiBBbGwgcXVlcmllcyBuZWVk CisgICAgICAgICAgdG8gYmUgc2VudCB1c2luZyB0aGUgbWV0YS1jb21tYW5kcyA8bGl0ZXJhbD5c YmluZDwvbGl0ZXJhbD4sCisgICAgICAgICAgPGxpdGVyYWw+XGJpbmRfbmFtZWQ8L2xpdGVyYWw+ LCA8bGl0ZXJhbD5cY2xvc2U8L2xpdGVyYWw+IG9yCisgICAgICAgICAgPGxpdGVyYWw+XHBhcnNl PC9saXRlcmFsPi4gV2hpbGUgYSBwaXBlbGluZSBpcyBvbmdvaW5nLAorICAgICAgICAgIDxsaXRl cmFsPlxnPC9saXRlcmFsPiB3aWxsIGFwcGVuZCB0aGUgY3VycmVudCBxdWVyeSBidWZmZXIgdG8g dGhlIHBpcGVsaW5lIGFuZAorICAgICAgICAgIG90aGVyIG1ldGEtY29tbWFuZHMgbGlrZSA8bGl0 ZXJhbD5cZ3g8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPlxnZGVzYzwvbGl0ZXJhbD4KKyAgICAgICAg ICBhcmUgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmUgbW9kZS4KKyAgICAgICA8L3BhcmE+CisKKyAg ICAgICAgPHBhcmE+CisgICAgICAgICAgPGNvbW1hbmQ+XGZsdXNocmVxdWVzdDwvY29tbWFuZD4g YXBwZW5kcyBhIGZsdXNoIGNvbW1hbmQgdG8gdGhlIHBpcGVsaW5lLAorICAgICAgICAgIGFsbG93 aW5nIHRvIHJlYWQgcmVzdWx0cyB3aXRoIDxjb21tYW5kPlxnZXRyZXN1bHRzPC9jb21tYW5kPiB3 aXRob3V0IGlzc3VpbmcKKyAgICAgICAgICBhIHN5bmMgb3IgZW5kaW5nIHRoZSBwaXBlbGluZS4g PGNvbW1hbmQ+XGdldHJlc3VsdHM8L2NvbW1hbmQ+IHdpbGwgYXV0b21hdGljYWxseQorICAgICAg ICAgIHB1c2ggdW5zZW50IGRhdGEgdG8gdGhlIHNlcnZlci4gPGNvbW1hbmQ+XGZsdXNoPC9jb21t YW5kPiBjYW4gYmUgdXNlZCB0byBtYW51YWxseQorICAgICAgICAgIHB1c2ggdW5zZW50IGRhdGEu CisgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxjb21tYW5kPlxn ZXRyZXN1bHRzPC9jb21tYW5kPiBhY2NlcHRzIGFuIG9wdGlvbmFsCisgICAgICAgICAgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWJlcl9yZXN1bHRzPC9yZXBsYWNlYWJsZT4gcGFy YW1ldGVyLiBJZiBwcm92aWRlZCwKKyAgICAgICAgICBvbmx5IHRoZSBmaXJzdCA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+bnVtYmVyX3Jlc3VsdHM8L3JlcGxhY2VhYmxlPiBwZW5kaW5n CisgICAgICAgICAgcmVzdWx0cyB3aWxsIGJlIHJlYWQuIElmIG5vdCBwcm92aWRlZCBvciAwLCBh bGwgcGVuZGluZyByZXN1bHRzIGFyZSByZWFkLiBUaGUKKyAgICAgICAgICBjb21tYW5kcyA8bGl0 ZXJhbD5cYmluZDwvbGl0ZXJhbD4sIDxsaXRlcmFsPlxiaW5kX25hbWVkPC9saXRlcmFsPiwKKyAg ICAgICAgICA8bGl0ZXJhbD5cY2xvc2U8L2xpdGVyYWw+LCA8bGl0ZXJhbD5ccGFyc2U8L2xpdGVy YWw+IGFuZCA8bGl0ZXJhbD5cc3luY3BpcGVsaW5lPC9saXRlcmFsPgorICAgICAgICAgIGdlbmVy YXRlIG9uZSByZXN1bHQgdG8gZ2V0LgorICAgICAgIDwvcGFyYT4KKworICAgICAgIDxwYXJhPgor ICAgICAgICBFeGFtcGxlOgorPHByb2dyYW1saXN0aW5nPgorXHN0YXJ0cGlwZWxpbmUKK1NFTEVD VCAxIFxiaW5kIFxnCitTRUxFQ1QgJDEgXHBhcnNlIHN0bXQxCitcYmluZF9uYW1lZCBzdG10MSAx IFxnCitTRUxFQ1QgcGdfY3VycmVudF94YWN0X2lkKCkgXGJpbmQgXGcKK1xmbHVzaHJlcXVlc3QK K1xnZXRyZXN1bHRzCitcc3luY3BpcGVsaW5lCitTRUxFQ1QgcGdfY3VycmVudF94YWN0X2lkKCkg XGJpbmQgXGcKK1xmbHVzaHJlcXVlc3QKK1xnZXRyZXN1bHRzIDIKK1xjbG9zZSBzdG10MQorXGVu ZHBpcGVsaW5lCis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICAgICAgPC9saXN0aXRlbT4K KyAgICAgPC92YXJsaXN0ZW50cnk+CisKIAogICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXBwLXBz cWwtbWV0YS1jb21tYW5kLXQtbGMiPgogICAgICAgICA8dGVybT48bGl0ZXJhbD5cdDwvbGl0ZXJh bD48L3Rlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbWFuZC5jIGIvc3JjL2Jpbi9w c3FsL2NvbW1hbmQuYwppbmRleCAyNmRmZGRlMTk1YS4uMDliM2FmYzYzNGMgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcHNxbC9jb21tYW5kLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYwpAQCAt OTAsOSArOTAsMTIgQEAgc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfZWxzZShQ c3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIENvbmRpdGlvbmFsU3QKIAkJCQkJCQkJCQkgUFFFeHBC dWZmZXIgcXVlcnlfYnVmKTsKIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX2Vu ZGlmKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgQ29uZGl0aW9uYWxTdGFjayBjc3RhY2ssCiAJ CQkJCQkJCQkJICBQUUV4cEJ1ZmZlciBxdWVyeV9idWYpOworc3RhdGljIGJhY2tzbGFzaFJlc3Vs dCBleGVjX2NvbW1hbmRfZW5kcGlwZWxpbmUoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29s IGFjdGl2ZV9icmFuY2gpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfZW5j b2RpbmcoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpOwogc3Rh dGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfZXJydmVyYm9zZShQc3FsU2NhblN0YXRl IHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7CiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0 IGV4ZWNfY29tbWFuZF9mKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJh bmNoKTsKK3N0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX2ZsdXNoKFBzcWxTY2Fu U3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsKK3N0YXRpYyBiYWNrc2xhc2hS ZXN1bHQgZXhlY19jb21tYW5kX2ZsdXNocmVxdWVzdChQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUs IGJvb2wgYWN0aXZlX2JyYW5jaCk7CiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFu ZF9nKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoLAogCQkJCQkJ CQkJICBjb25zdCBjaGFyICpjbWQpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBwcm9jZXNzX2Nv bW1hbmRfZ19vcHRpb25zKGNoYXIgKmZpcnN0X29wdGlvbiwKQEAgLTEwMyw2ICsxMDYsNyBAQCBz dGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9nZGVzYyhQc3FsU2NhblN0YXRlIHNj YW5fc3RhdGUsIGJvb2wgYWN0aXZlXwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1h bmRfZ2V0ZW52KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoLAog CQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmNtZCk7CiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4 ZWNfY29tbWFuZF9nZXhlYyhQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2Jy YW5jaCk7CitzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9nZXRyZXN1bHRzKFBz cWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsKIHN0YXRpYyBiYWNr c2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX2dzZXQoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBi b29sIGFjdGl2ZV9icmFuY2gpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRf aGVscChQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7CiBzdGF0 aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9odG1sKFBzcWxTY2FuU3RhdGUgc2Nhbl9z dGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsKQEAgLTEzMiw2ICsxMzYsOCBAQCBzdGF0aWMgYmFj a3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9zZXRlbnYoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRl LCBib29sIGFjdGl2ZQogCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmNtZCk7CiBzdGF0aWMgYmFj a3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9zZl9zdihQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUs IGJvb2wgYWN0aXZlX2JyYW5jaCwKIAkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmNtZCwgYm9vbCBp c19mdW5jKTsKK3N0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX3N0YXJ0cGlwZWxp bmUoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpOworc3RhdGlj IGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfc3luY3BpcGVsaW5lKFBzcWxTY2FuU3RhdGUg c2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsKIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQg ZXhlY19jb21tYW5kX3QoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFu Y2gpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfVChQc3FsU2NhblN0YXRl IHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7CiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0 IGV4ZWNfY29tbWFuZF90aW1pbmcoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2 ZV9icmFuY2gpOwpAQCAtMzUxLDE4ICszNTcsMjYgQEAgZXhlY19jb21tYW5kKGNvbnN0IGNoYXIg KmNtZCwKIAkJc3RhdHVzID0gZXhlY19jb21tYW5kX2Vsc2Uoc2Nhbl9zdGF0ZSwgY3N0YWNrLCBx dWVyeV9idWYpOwogCWVsc2UgaWYgKHN0cmNtcChjbWQsICJlbmRpZiIpID09IDApCiAJCXN0YXR1 cyA9IGV4ZWNfY29tbWFuZF9lbmRpZihzY2FuX3N0YXRlLCBjc3RhY2ssIHF1ZXJ5X2J1Zik7CisJ ZWxzZSBpZiAoc3RyY21wKGNtZCwgImVuZHBpcGVsaW5lIikgPT0gMCkKKwkJc3RhdHVzID0gZXhl Y19jb21tYW5kX2VuZHBpcGVsaW5lKHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gpOwogCWVsc2Ug aWYgKHN0cmNtcChjbWQsICJlbmNvZGluZyIpID09IDApCiAJCXN0YXR1cyA9IGV4ZWNfY29tbWFu ZF9lbmNvZGluZyhzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAllbHNlIGlmIChzdHJjbXAo Y21kLCAiZXJydmVyYm9zZSIpID09IDApCiAJCXN0YXR1cyA9IGV4ZWNfY29tbWFuZF9lcnJ2ZXJi b3NlKHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gpOwogCWVsc2UgaWYgKHN0cmNtcChjbWQsICJm IikgPT0gMCkKIAkJc3RhdHVzID0gZXhlY19jb21tYW5kX2Yoc2Nhbl9zdGF0ZSwgYWN0aXZlX2Jy YW5jaCk7CisJZWxzZSBpZiAoc3RyY21wKGNtZCwgImZsdXNoIikgPT0gMCkKKwkJc3RhdHVzID0g ZXhlY19jb21tYW5kX2ZsdXNoKHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gpOworCWVsc2UgaWYg KHN0cmNtcChjbWQsICJmbHVzaHJlcXVlc3QiKSA9PSAwKQorCQlzdGF0dXMgPSBleGVjX2NvbW1h bmRfZmx1c2hyZXF1ZXN0KHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gpOwogCWVsc2UgaWYgKHN0 cmNtcChjbWQsICJnIikgPT0gMCB8fCBzdHJjbXAoY21kLCAiZ3giKSA9PSAwKQogCQlzdGF0dXMg PSBleGVjX2NvbW1hbmRfZyhzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoLCBjbWQpOwogCWVsc2Ug aWYgKHN0cmNtcChjbWQsICJnZGVzYyIpID09IDApCiAJCXN0YXR1cyA9IGV4ZWNfY29tbWFuZF9n ZGVzYyhzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAllbHNlIGlmIChzdHJjbXAoY21kLCAi Z2V0ZW52IikgPT0gMCkKIAkJc3RhdHVzID0gZXhlY19jb21tYW5kX2dldGVudihzY2FuX3N0YXRl LCBhY3RpdmVfYnJhbmNoLCBjbWQpOworCWVsc2UgaWYgKHN0cmNtcChjbWQsICJnZXRyZXN1bHRz IikgPT0gMCkKKwkJc3RhdHVzID0gZXhlY19jb21tYW5kX2dldHJlc3VsdHMoc2Nhbl9zdGF0ZSwg YWN0aXZlX2JyYW5jaCk7CiAJZWxzZSBpZiAoc3RyY21wKGNtZCwgImdleGVjIikgPT0gMCkKIAkJ c3RhdHVzID0gZXhlY19jb21tYW5kX2dleGVjKHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gpOwog CWVsc2UgaWYgKHN0cmNtcChjbWQsICJnc2V0IikgPT0gMCkKQEAgLTQxMSw2ICs0MjUsMTAgQEAg ZXhlY19jb21tYW5kKGNvbnN0IGNoYXIgKmNtZCwKIAkJc3RhdHVzID0gZXhlY19jb21tYW5kX3Nm X3N2KHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gsIGNtZCwgdHJ1ZSk7CiAJZWxzZSBpZiAoc3Ry Y21wKGNtZCwgInN2IikgPT0gMCB8fCBzdHJjbXAoY21kLCAic3YrIikgPT0gMCkKIAkJc3RhdHVz ID0gZXhlY19jb21tYW5kX3NmX3N2KHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gsIGNtZCwgZmFs c2UpOworCWVsc2UgaWYgKHN0cmNtcChjbWQsICJzdGFydHBpcGVsaW5lIikgPT0gMCkKKwkJc3Rh dHVzID0gZXhlY19jb21tYW5kX3N0YXJ0cGlwZWxpbmUoc2Nhbl9zdGF0ZSwgYWN0aXZlX2JyYW5j aCk7CisJZWxzZSBpZiAoc3RyY21wKGNtZCwgInN5bmNwaXBlbGluZSIpID09IDApCisJCXN0YXR1 cyA9IGV4ZWNfY29tbWFuZF9zeW5jcGlwZWxpbmUoc2Nhbl9zdGF0ZSwgYWN0aXZlX2JyYW5jaCk7 CiAJZWxzZSBpZiAoc3RyY21wKGNtZCwgInQiKSA9PSAwKQogCQlzdGF0dXMgPSBleGVjX2NvbW1h bmRfdChzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAllbHNlIGlmIChzdHJjbXAoY21kLCAi VCIpID09IDApCkBAIC0xNTE1LDYgKzE1MzMsMzggQEAgZXhlY19jb21tYW5kX2YoUHNxbFNjYW5T dGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpCiAJcmV0dXJuIHN1Y2Nlc3MgPyBQ U1FMX0NNRF9TS0lQX0xJTkUgOiBQU1FMX0NNRF9FUlJPUjsKIH0KIAorLyoKKyAqIFxmbHVzaCAt LSBjYWxsIFBRZmx1c2ggb24gdGhlIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIGJhY2tzbGFzaFJl c3VsdAorZXhlY19jb21tYW5kX2ZsdXNoKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBh Y3RpdmVfYnJhbmNoKQoreworCWlmIChhY3RpdmVfYnJhbmNoKQorCXsKKwkJcHNldC5zZW5kX21v ZGUgPSBQU1FMX1NFTkRfRkxVU0g7CisJfQorCWVsc2UKKwkJaWdub3JlX3NsYXNoX29wdGlvbnMo c2Nhbl9zdGF0ZSk7CisKKwlyZXR1cm4gUFNRTF9DTURfU0VORDsKK30KKworLyoKKyAqIFxmbHVz aHJlcXVlc3QgLS0gc2VuZCBhIGZsdXNoIHJlcXVlc3QgdG8gdGhlIHNlcnZlcgorICovCitzdGF0 aWMgYmFja3NsYXNoUmVzdWx0CitleGVjX2NvbW1hbmRfZmx1c2hyZXF1ZXN0KFBzcWxTY2FuU3Rh dGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKQoreworCWlmIChhY3RpdmVfYnJhbmNo KQorCXsKKwkJcHNldC5zZW5kX21vZGUgPSBQU1FMX1NFTkRfRkxVU0hfUkVRVUVTVDsKKwl9CisJ ZWxzZQorCQlpZ25vcmVfc2xhc2hfb3B0aW9ucyhzY2FuX3N0YXRlKTsKKworCXJldHVybiBQU1FM X0NNRF9TRU5EOworfQorCiAvKgogICogXGcgIFsocHNldC1vcHRpb25bPXBzZXQtdmFsdWVdIC4u LildIFtmaWxlbmFtZS9zaGVsbC1jb21tYW5kXQogICogXGd4IFsocHNldC1vcHRpb25bPXBzZXQt dmFsdWVdIC4uLildIFtmaWxlbmFtZS9zaGVsbC1jb21tYW5kXQpAQCAtMTU1MCw2ICsxNjAwLDEz IEBAIGV4ZWNfY29tbWFuZF9nKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVf YnJhbmNoLCBjb25zdCBjaGFyICpjbWQpCiAKIAlpZiAoc3RhdHVzID09IFBTUUxfQ01EX1NLSVBf TElORSAmJiBhY3RpdmVfYnJhbmNoKQogCXsKKwkJaWYgKHN0cmNtcChjbWQsICJneCIpID09IDAg JiYgUFFwaXBlbGluZVN0YXR1cyhwc2V0LmRiKSAhPSBQUV9QSVBFTElORV9PRkYpCisJCXsKKwkJ CXBnX2xvZ19lcnJvcigiXFxneCBub3QgYWxsb3dlZCBpbiBwaXBlbGluZSBtb2RlIik7CisJCQlj bGVhbl9leHRlbmRlZF9zdGF0ZSgpOworCQkJcmV0dXJuIFBTUUxfQ01EX0VSUk9SOworCQl9CisK IAkJaWYgKCFmbmFtZSkKIAkJCXBzZXQuZ2ZuYW1lID0gTlVMTDsKIAkJZWxzZQpAQCAtMTcwMyw2 ICsxNzYwLDM5IEBAIGV4ZWNfY29tbWFuZF9nZXRlbnYoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRl LCBib29sIGFjdGl2ZV9icmFuY2gsCiAJcmV0dXJuIHN1Y2Nlc3MgPyBQU1FMX0NNRF9TS0lQX0xJ TkUgOiBQU1FMX0NNRF9FUlJPUjsKIH0KIAorLyoKKyAqIFxnZXRyZXN1bHRzIC0tIHJlYWQgcmVz dWx0cworICovCitzdGF0aWMgYmFja3NsYXNoUmVzdWx0CitleGVjX2NvbW1hbmRfZ2V0cmVzdWx0 cyhQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCkKK3sKKwlpZiAo YWN0aXZlX2JyYW5jaCkKKwl7CisJCWNoYXIJICAgKm9wdDsKKwkJaW50CQkJbnVtX3Jlc3VsdHM7 CisKKwkJcHNldC5zZW5kX21vZGUgPSBQU1FMX1NFTkRfR0VUX1JFU1VMVFM7CisJCW9wdCA9IHBz cWxfc2Nhbl9zbGFzaF9vcHRpb24oc2Nhbl9zdGF0ZSwgT1RfTk9STUFMLCBOVUxMLCBmYWxzZSk7 CisKKwkJcHNldC5yZXF1ZXN0ZWRfcmVzdWx0cyA9IDA7CisJCWlmIChvcHQgIT0gTlVMTCkKKwkJ eworCQkJbnVtX3Jlc3VsdHMgPSBhdG9pKG9wdCk7CisJCQlpZiAobnVtX3Jlc3VsdHMgPCAwKQor CQkJeworCQkJCXBnX2xvZ19lcnJvcigiXFxnZXRyZXN1bHRzOiBpbnZhbGlkIG51bWJlciBvZiBy ZXF1ZXN0ZWQgcmVzdWx0cyIpOworCQkJCXJldHVybiBQU1FMX0NNRF9TS0lQX0xJTkU7CisJCQl9 CisJCQlwc2V0LnJlcXVlc3RlZF9yZXN1bHRzID0gbnVtX3Jlc3VsdHM7CisJCX0KKwl9CisJZWxz ZQorCQlpZ25vcmVfc2xhc2hfb3B0aW9ucyhzY2FuX3N0YXRlKTsKKworCXJldHVybiBQU1FMX0NN RF9TRU5EOworfQorCisKIC8qCiAgKiBcZ2V4ZWMgLS0gc2VuZCBxdWVyeSBhbmQgZXhlY3V0ZSBl YWNoIGZpZWxkIG9mIHJlc3VsdAogICovCkBAIC0xNzEzLDYgKzE4MDMsMTIgQEAgZXhlY19jb21t YW5kX2dleGVjKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKQog CiAJaWYgKGFjdGl2ZV9icmFuY2gpCiAJeworCQlpZiAoUFFwaXBlbGluZVN0YXR1cyhwc2V0LmRi KSAhPSBQUV9QSVBFTElORV9PRkYpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiXFxnZXhlYyBub3Qg YWxsb3dlZCBpbiBwaXBlbGluZSBtb2RlIik7CisJCQljbGVhbl9leHRlbmRlZF9zdGF0ZSgpOwor CQkJcmV0dXJuIFBTUUxfQ01EX0VSUk9SOworCQl9CiAJCXBzZXQuZ2V4ZWNfZmxhZyA9IHRydWU7 CiAJCXN0YXR1cyA9IFBTUUxfQ01EX1NFTkQ7CiAJfQpAQCAtMTczMyw2ICsxODI5LDEzIEBAIGV4 ZWNfY29tbWFuZF9nc2V0KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJh bmNoKQogCQljaGFyCSAgICpwcmVmaXggPSBwc3FsX3NjYW5fc2xhc2hfb3B0aW9uKHNjYW5fc3Rh dGUsCiAJCQkJCQkJCQkJCQkJT1RfTk9STUFMLCBOVUxMLCBmYWxzZSk7CiAKKwkJaWYgKFBRcGlw ZWxpbmVTdGF0dXMocHNldC5kYikgIT0gUFFfUElQRUxJTkVfT0ZGKQorCQl7CisJCQlwZ19sb2df ZXJyb3IoIlxcZ3NldCBub3QgYWxsb3dlZCBpbiBwaXBlbGluZSBtb2RlIik7CisJCQljbGVhbl9l eHRlbmRlZF9zdGF0ZSgpOworCQkJcmV0dXJuIFBTUUxfQ01EX0VSUk9SOworCQl9CisKIAkJaWYg KHByZWZpeCkKIAkJCXBzZXQuZ3NldF9wcmVmaXggPSBwcmVmaXg7CiAJCWVsc2UKQEAgLTI3MTgs NiArMjgyMSw1NCBAQCBleGVjX2NvbW1hbmRfc2Zfc3YoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRl LCBib29sIGFjdGl2ZV9icmFuY2gsCiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyoKKyAqIFxzdGFy dHBpcGVsaW5lIC0tIGVudGVyIHBpcGVsaW5lIG1vZGUKKyAqLworc3RhdGljIGJhY2tzbGFzaFJl c3VsdAorZXhlY19jb21tYW5kX3N0YXJ0cGlwZWxpbmUoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRl LCBib29sIGFjdGl2ZV9icmFuY2gpCit7CisJaWYgKGFjdGl2ZV9icmFuY2gpCisJeworCQlwc2V0 LnNlbmRfbW9kZSA9IFBTUUxfU0VORF9TVEFSVF9QSVBFTElORV9NT0RFOworCX0KKwllbHNlCisJ CWlnbm9yZV9zbGFzaF9vcHRpb25zKHNjYW5fc3RhdGUpOworCisJcmV0dXJuIFBTUUxfQ01EX1NF TkQ7Cit9CisKKy8qCisgKiBcc3luY3BpcGVsaW5lIC0tIHNlbmQgYSBzeW5jIG1lc3NhZ2UgdG8g YW4gYWN0aXZlIHBpcGVsaW5lCisgKi8KK3N0YXRpYyBiYWNrc2xhc2hSZXN1bHQKK2V4ZWNfY29t bWFuZF9zeW5jcGlwZWxpbmUoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9i cmFuY2gpCit7CisJaWYgKGFjdGl2ZV9icmFuY2gpCisJeworCQlwc2V0LnNlbmRfbW9kZSA9IFBT UUxfU0VORF9QSVBFTElORV9TWU5DOworCX0KKwllbHNlCisJCWlnbm9yZV9zbGFzaF9vcHRpb25z KHNjYW5fc3RhdGUpOworCisJcmV0dXJuIFBTUUxfQ01EX1NFTkQ7Cit9CisKKy8qCisgKiBcZW5k cGlwZWxpbmUgLS0gZW5kIHBpcGVsaW5lIG1vZGUKKyAqLworc3RhdGljIGJhY2tzbGFzaFJlc3Vs dAorZXhlY19jb21tYW5kX2VuZHBpcGVsaW5lKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9v bCBhY3RpdmVfYnJhbmNoKQoreworCWlmIChhY3RpdmVfYnJhbmNoKQorCXsKKwkJcHNldC5zZW5k X21vZGUgPSBQU1FMX1NFTkRfRU5EX1BJUEVMSU5FX01PREU7CisJfQorCWVsc2UKKwkJaWdub3Jl X3NsYXNoX29wdGlvbnMoc2Nhbl9zdGF0ZSk7CisKKwlyZXR1cm4gUFNRTF9DTURfU0VORDsKK30K KwogLyoKICAqIFx0IC0tIHR1cm4gb2ZmIHRhYmxlIGhlYWRlcnMgYW5kIHJvdyBjb3VudAogICov CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbW9uLmMgYi9zcmMvYmluL3BzcWwvY29tbW9u LmMKaW5kZXggZjFhNTI5MWMxM2IuLmI3ZmU1NTVkNTZjIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bz cWwvY29tbW9uLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCkBAIC0xMjEsNiArMTIxLDE4 IEBAIENsb3NlR091dHB1dChGSUxFICpnZmlsZV9mb3V0LCBib29sIGlzX3BpcGUpCiAJfQogfQog CisvKgorICogUmVzZXQgcHNldCBwaXBlbGluZSBzdGF0ZQorICovCitzdGF0aWMgdm9pZAorcGlw ZWxpbmVSZXNldCh2b2lkKQoreworCXBzZXQucGlwZWRfc3luY3MgPSAwOworCXBzZXQucGlwZWRf Y29tbWFuZHMgPSAwOworCXBzZXQuYXZhaWxhYmxlX3Jlc3VsdHMgPSAwOworCXBzZXQucmVxdWVz dGVkX3Jlc3VsdHMgPSAwOworfQorCiAvKgogICogc2V0UUZvdXQKICAqIC0tIGhhbmRsZXIgZm9y IC1vIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kIFxvIGNvbW1hbmQKQEAgLTM1NCw2ICszNjYsNyBA QCBDaGVja0Nvbm5lY3Rpb24odm9pZCkKIAogCQlmcHJpbnRmKHN0ZGVyciwgXygiVGhlIGNvbm5l Y3Rpb24gdG8gdGhlIHNlcnZlciB3YXMgbG9zdC4gQXR0ZW1wdGluZyByZXNldDogIikpOwogCQlQ UXJlc2V0KHBzZXQuZGIpOworCQlwaXBlbGluZVJlc2V0KCk7CiAJCU9LID0gQ29ubmVjdGlvblVw KCk7CiAJCWlmICghT0spCiAJCXsKQEAgLTQxNSwxMCArNDI4LDEyIEBAIEFjY2VwdFJlc3VsdChj b25zdCBQR3Jlc3VsdCAqcmVzdWx0LCBib29sIHNob3dfZXJyb3IpCiAJCQljYXNlIFBHUkVTX0VN UFRZX1FVRVJZOgogCQkJY2FzZSBQR1JFU19DT1BZX0lOOgogCQkJY2FzZSBQR1JFU19DT1BZX09V VDoKKwkJCWNhc2UgUEdSRVNfUElQRUxJTkVfU1lOQzoKIAkJCQkvKiBGaW5lLCBkbyBub3RoaW5n ICovCiAJCQkJT0sgPSB0cnVlOwogCQkJCWJyZWFrOwogCisJCQljYXNlIFBHUkVTX1BJUEVMSU5F X0FCT1JURUQ6CiAJCQljYXNlIFBHUkVTX0JBRF9SRVNQT05TRToKIAkJCWNhc2UgUEdSRVNfTk9O RkFUQUxfRVJST1I6CiAJCQljYXNlIFBHUkVTX0ZBVEFMX0VSUk9SOgpAQCAtMTA1MCw2ICsxMDY1 LDcgQEAgUHJpbnRRdWVyeVJlc3VsdChQR3Jlc3VsdCAqcmVzdWx0LCBib29sIGxhc3QsCiAJCQlz dWNjZXNzID0gdHJ1ZTsKIAkJCWJyZWFrOwogCisJCWNhc2UgUEdSRVNfUElQRUxJTkVfQUJPUlRF RDoKIAkJY2FzZSBQR1JFU19CQURfUkVTUE9OU0U6CiAJCWNhc2UgUEdSRVNfTk9ORkFUQUxfRVJS T1I6CiAJCWNhc2UgUEdSRVNfRkFUQUxfRVJST1I6CkBAIC0xNDE4LDYgKzE0MzQsNjMgQEAgRGVz Y3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMpCiAJcmV0 dXJuIE9LOwogfQogCisvKgorICogUmVhZCBhbmQgZGlzY2FyZCBhbGwgcmVzdWx0cyBpbiBhbiBh Ym9ydGVkIHBpcGVsaW5lLgorICoKKyAqIElmIGEgc3luY2hyb25pc2F0aW9uIHBvaW50IGlzIGZv dW5kLCB3ZSBjYW4gc3RvcCBkaXNjYXJkaW5nIHJlc3VsdHMgYXMKKyAqIHBpcGVsaW5lIHdpbGwg c3dpdGNoIGJhY2sgdG8gYW4gT0sgc3RhdGUuIElmIG5vIHN5bmNocm9uaXNhdGlvbiBwb2ludAor ICogaXMgYXZhaWxhYmxlLCB3ZSBuZWVkIHRvIHN0b3Agd2hlbiB0aGVyZSdzIG5vIG1vcmUgcGVu ZGluZyByZXN1bHRzLAorICogb3RoZXJ3aXNlLCBjYWxsaW5nIFBRZ2V0UmVzdWx0IHdpbGwgYmxv Y2suCisgKi8KK3N0YXRpYyBQR3Jlc3VsdCAqCitkaXNjYXJkQWJvcnRlZFBpcGVsaW5lUmVzdWx0 cyh2b2lkKQoreworCWZvciAoOzspCisJeworCQlQR3Jlc3VsdCAgICpyZXMgPSBQUWdldFJlc3Vs dChwc2V0LmRiKTsKKwkJRXhlY1N0YXR1c1R5cGUgcmVzdWx0X3N0YXR1cyA9IFBRcmVzdWx0U3Rh dHVzKHJlcyk7CisKKwkJaWYgKHJlc3VsdF9zdGF0dXMgPT0gUEdSRVNfUElQRUxJTkVfU1lOQykK KwkJeworCQkJLyoKKwkJCSAqIEZvdW5kIGEgc3luY2hyb25pc2F0aW9uIHBvaW50LiBEZWNyZW1l bnRpbmcgdGhlIHN5bmMgY291bnRlcgorCQkJICogd2lsbCBiZSBkb25lIGJ5IHRoZSBjYWxsZXIK KwkJCSAqLworCQkJcmV0dXJuIHJlczsKKwkJfQorCQllbHNlIGlmIChyZXMgPT0gTlVMTCkKKwkJ eworCQkJLyogQSBxdWVyeSB3YXMgcHJvY2Vzc2VkLCBkZWNyZW1lbnQgdGhlIGNvdW50ZXJzICov CisJCQlBc3NlcnQocHNldC5hdmFpbGFibGVfcmVzdWx0cyA+IDApOworCQkJQXNzZXJ0KHBzZXQu cmVxdWVzdGVkX3Jlc3VsdHMgPiAwKTsKKwkJCXBzZXQuYXZhaWxhYmxlX3Jlc3VsdHMtLTsKKwkJ CXBzZXQucmVxdWVzdGVkX3Jlc3VsdHMtLTsKKwkJfQorCisJCWlmIChwc2V0LnJlcXVlc3RlZF9y ZXN1bHRzID09IDApCisJCXsKKwkJCS8qIFdlJ3ZlIHJlYWQgYWxsIHJlcXVlc3RlZCByZXN1bHRz LCBleGl0ICovCisJCQlyZXR1cm4gcmVzOworCQl9CisKKwkJaWYgKHBzZXQuYXZhaWxhYmxlX3Jl c3VsdHMgPT0gMCAmJiBwc2V0LnBpcGVkX3N5bmNzID09IDApCisJCXsKKwkJCS8qCisJCQkgKiBU aGVyZSdzIG5vIG1vcmUgcmVzdWx0cyB0byBnZXQgYW5kIHRoZXJlJ3Mgbm8gc3luY2hyb25pc2F0 aW9uCisJCQkgKiBwb2ludCB0byBzdG9wIGF0LiBUaGlzIHdpbGwgbGVhdmUgdGhlIHBpcGVsaW5l IGluIGFuIGFib3J0ZWQKKwkJCSAqIHN0YXRlLgorCQkJICovCisJCQlyZXR1cm4gcmVzOworCQl9 CisKKwkJLyoKKwkJICogQW4gYWJvcnRlZCBwaXBlbGluZSB3aWxsIGhhdmUgZWl0aGVyIE5VTEwg cmVzdWx0cyBvciByZXN1bHRzIGluIGFuCisJCSAqIFBHUkVTX1BJUEVMSU5FX0FCT1JURUQgc3Rh dHVzCisJCSAqLworCQlBc3NlcnQocmVzID09IE5VTEwgfHwgcmVzdWx0X3N0YXR1cyA9PSBQR1JF U19QSVBFTElORV9BQk9SVEVEKTsKKwkJUFFjbGVhcihyZXMpOworCX0KK30KIAogLyoKICAqIEV4 ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzOiB1dGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkgU2Vu ZFF1ZXJ5KCkKQEAgLTE0NTEsNiArMTUyNCw3IEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRz KGNvbnN0IGNoYXIgKnF1ZXJ5LAogCWJvb2wJCXRpbWluZyA9IHBzZXQudGltaW5nOwogCWJvb2wJ CXN1Y2Nlc3MgPSBmYWxzZTsKIAlib29sCQlyZXR1cm5fZWFybHkgPSBmYWxzZTsKKwlib29sCQll bmRfcGlwZWxpbmUgPSBmYWxzZTsKIAlpbnN0cl90aW1lCWJlZm9yZSwKIAkJCQlhZnRlcjsKIAlQ R3Jlc3VsdCAgICpyZXN1bHQ7CkBAIC0xNDY2LDkgKzE1NDAsMTMgQEAgRXhlY1F1ZXJ5QW5kUHJv Y2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksCiAJewogCQljYXNlIFBTUUxfU0VORF9FWFRF TkRFRF9DTE9TRToKIAkJCXN1Y2Nlc3MgPSBQUXNlbmRDbG9zZVByZXBhcmVkKHBzZXQuZGIsIHBz ZXQuc3RtdE5hbWUpOworCQkJaWYgKHN1Y2Nlc3MgJiYgUFFwaXBlbGluZVN0YXR1cyhwc2V0LmRi KSAhPSBQUV9QSVBFTElORV9PRkYpCisJCQkJcHNldC5waXBlZF9jb21tYW5kcysrOwogCQkJYnJl YWs7CiAJCWNhc2UgUFNRTF9TRU5EX0VYVEVOREVEX1BBUlNFOgogCQkJc3VjY2VzcyA9IFBRc2Vu ZFByZXBhcmUocHNldC5kYiwgcHNldC5zdG10TmFtZSwgcXVlcnksIDAsIE5VTEwpOworCQkJaWYg KHN1Y2Nlc3MgJiYgUFFwaXBlbGluZVN0YXR1cyhwc2V0LmRiKSAhPSBQUV9QSVBFTElORV9PRkYp CisJCQkJcHNldC5waXBlZF9jb21tYW5kcysrOwogCQkJYnJlYWs7CiAJCWNhc2UgUFNRTF9TRU5E X0VYVEVOREVEX1FVRVJZX1BBUkFNUzoKIAkJCUFzc2VydChwc2V0LnN0bXROYW1lID09IE5VTEwp OwpAQCAtMTQ3Niw2ICsxNTU0LDggQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3Qg Y2hhciAqcXVlcnksCiAJCQkJCQkJCQkJcHNldC5iaW5kX25wYXJhbXMsIE5VTEwsCiAJCQkJCQkJ CQkJKGNvbnN0IGNoYXIgKmNvbnN0ICopIHBzZXQuYmluZF9wYXJhbXMsCiAJCQkJCQkJCQkJTlVM TCwgTlVMTCwgMCk7CisJCQlpZiAoc3VjY2VzcyAmJiBQUXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIp ICE9IFBRX1BJUEVMSU5FX09GRikKKwkJCQlwc2V0LnBpcGVkX2NvbW1hbmRzKys7CiAJCQlicmVh azsKIAkJY2FzZSBQU1FMX1NFTkRfRVhURU5ERURfUVVFUllfUFJFUEFSRUQ6CiAJCQlBc3NlcnQo cHNldC5zdG10TmFtZSAhPSBOVUxMKTsKQEAgLTE0ODMsNiArMTU2Myw4MyBAQCBFeGVjUXVlcnlB bmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAkJCQkJCQkJCQkgIHBzZXQuYmlu ZF9ucGFyYW1zLAogCQkJCQkJCQkJCSAgKGNvbnN0IGNoYXIgKmNvbnN0ICopIHBzZXQuYmluZF9w YXJhbXMsCiAJCQkJCQkJCQkJICBOVUxMLCBOVUxMLCAwKTsKKwkJCWlmIChzdWNjZXNzICYmIFBR cGlwZWxpbmVTdGF0dXMocHNldC5kYikgIT0gUFFfUElQRUxJTkVfT0ZGKQorCQkJCXBzZXQucGlw ZWRfY29tbWFuZHMrKzsKKwkJCWJyZWFrOworCQljYXNlIFBTUUxfU0VORF9TVEFSVF9QSVBFTElO RV9NT0RFOgorCQkJc3VjY2VzcyA9IFBRZW50ZXJQaXBlbGluZU1vZGUocHNldC5kYik7CisJCQli cmVhazsKKwkJY2FzZSBQU1FMX1NFTkRfRU5EX1BJUEVMSU5FX01PREU6CisJCQlzdWNjZXNzID0g UFFwaXBlbGluZVN5bmMocHNldC5kYik7CisJCQlpZiAoc3VjY2VzcyAmJiBQUXBpcGVsaW5lU3Rh dHVzKHBzZXQuZGIpICE9IFBRX1BJUEVMSU5FX09GRikKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEVu ZCBvZiB0aGUgcGlwZWxpbmUsIGFsbCBxdWV1ZWQgY29tbWFuZHMgbmVlZCB0byBiZQorCQkJCSAq IHByb2Nlc3NlZAorCQkJCSAqLworCQkJCWVuZF9waXBlbGluZSA9IHRydWU7CisJCQkJcHNldC5w aXBlZF9zeW5jcysrOworCisJCQkJLyoKKwkJCQkgKiBUaGUgc2VydmVyIHdpbGwgc2VuZCBhIFJl YWR5Rm9yUXVlcnkgYWZ0ZXIgYSBTeW5jIGlzCisJCQkJICogcHJvY2Vzc2VkLCBmbHVzaGluZyBh bGwgcmVzdWx0cyB0byB0aGUgY2xpZW50CisJCQkJICovCisJCQkJcHNldC5hdmFpbGFibGVfcmVz dWx0cyArPSBwc2V0LnBpcGVkX2NvbW1hbmRzOworCQkJCXBzZXQucGlwZWRfY29tbWFuZHMgPSAw OworCQkJCS8qIFdlIHdhbnQgdG8gcmVhZCBhbGwgcmVzdWx0cyAqLworCQkJCXBzZXQucmVxdWVz dGVkX3Jlc3VsdHMgPSBwc2V0LmF2YWlsYWJsZV9yZXN1bHRzICsgcHNldC5waXBlZF9zeW5jczsK KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBTUUxfU0VORF9QSVBFTElORV9TWU5DOgorCQkJc3Vj Y2VzcyA9IFBRc2VuZFBpcGVsaW5lU3luYyhwc2V0LmRiKTsKKwkJCWlmIChzdWNjZXNzICYmIFBR cGlwZWxpbmVTdGF0dXMocHNldC5kYikgIT0gUFFfUElQRUxJTkVfT0ZGKQorCQkJeworCQkJCXBz ZXQucGlwZWRfc3luY3MrKzsKKworCQkJCS8qCisJCQkJICogVGhlIHNlcnZlciB3aWxsIHNlbmQg YSBSZWFkeUZvclF1ZXJ5IGFmdGVyIGEgU3luYyBpcworCQkJCSAqIHByb2Nlc3NlZCwgZmx1c2hp bmcgYWxsIHJlc3VsdHMgdG8gdGhlIGNsaWVudAorCQkJCSAqLworCQkJCXBzZXQuYXZhaWxhYmxl X3Jlc3VsdHMgKz0gcHNldC5waXBlZF9jb21tYW5kczsKKwkJCQlwc2V0LnBpcGVkX2NvbW1hbmRz ID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBTUUxfU0VORF9GTFVTSDoKKwkJCXN1Y2Nl c3MgPSBQUWZsdXNoKHBzZXQuZGIpOworCQkJYnJlYWs7CisJCWNhc2UgUFNRTF9TRU5EX0ZMVVNI X1JFUVVFU1Q6CisJCQlzdWNjZXNzID0gUFFzZW5kRmx1c2hSZXF1ZXN0KHBzZXQuZGIpOworCQkJ aWYgKHN1Y2Nlc3MgJiYgUFFwaXBlbGluZVN0YXR1cyhwc2V0LmRiKSAhPSBQUV9QSVBFTElORV9P RkYpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXaXRoIHRoZSBmbHVzaCByZXF1ZXN0LCBhbGwgcGlw ZWQgY29tbWFuZHMgYXJlIHB1c2hlZCBhbmQKKwkJCQkgKiB0aGUgc2VydmVyIHdpbGwgZm9yY2Vm dWxseSBmbHVzaCB0aGUgcmVzdWx0cyB0byB0aGUgY2xpZW50LAorCQkJCSAqIG1ha2luZyB0aGVt IGF2YWlsYWJsZQorCQkJCSAqLworCQkJCXBzZXQuYXZhaWxhYmxlX3Jlc3VsdHMgKz0gcHNldC5w aXBlZF9jb21tYW5kczsKKwkJCQlwc2V0LnBpcGVkX2NvbW1hbmRzID0gMDsKKwkJCX0KKwkJCWJy ZWFrOworCQljYXNlIFBTUUxfU0VORF9HRVRfUkVTVUxUUzoKKwkJCWlmIChwc2V0LmF2YWlsYWJs ZV9yZXN1bHRzID09IDAgJiYgcHNldC5waXBlZF9zeW5jcyA9PSAwKQorCQkJeworCQkJCS8qCisJ CQkJICogSWYgbm8gc3luYyBvciBmbHVzaCByZXF1ZXN0IHdlcmUgc2VudCwgUFFnZXRSZXN1bHQg d2lsbAorCQkJCSAqIGJsb2NrLiBGb3JiaWQgdGhlIGNhbGwgdG8gXGdldHJlc3VsdHMgdG8gYXZv aWQgc3RheWluZworCQkJCSAqIHN0dWNrCisJCQkJICovCisJCQkJcGdfbG9nX2luZm8oIk5vIHBl bmRpbmcgcmVzdWx0cyB0byBnZXQiKTsKKwkJCQlzdWNjZXNzID0gZmFsc2U7CisJCQkJcHNldC5y ZXF1ZXN0ZWRfcmVzdWx0cyA9IDA7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJc3VjY2VzcyA9 IHRydWU7CisJCQkJLyogQ2FwIHJlcXVlc3RlZF9yZXN1bHRzIHRvIHRoZSBtYXhpbXVtIGtub3du IHJlc3VsdHMgKi8KKwkJCQlpZiAocHNldC5yZXF1ZXN0ZWRfcmVzdWx0cyA9PSAwIHx8CisJCQkJ CXBzZXQucmVxdWVzdGVkX3Jlc3VsdHMgPiAocHNldC5hdmFpbGFibGVfcmVzdWx0cyArIHBzZXQu cGlwZWRfc3luY3MpKQorCQkJCQlwc2V0LnJlcXVlc3RlZF9yZXN1bHRzID0gcHNldC5hdmFpbGFi bGVfcmVzdWx0cyArIHBzZXQucGlwZWRfc3luY3M7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBQ U1FMX1NFTkRfUVVFUlk6CiAJCQlzdWNjZXNzID0gUFFzZW5kUXVlcnkocHNldC5kYiwgcXVlcnkp OwpAQCAtMTUwMSw2ICsxNjU4LDE2IEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0 IGNoYXIgKnF1ZXJ5LAogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYgKHBzZXQucmVxdWVzdGVkX3Jl c3VsdHMgPT0gMCAmJiAhZW5kX3BpcGVsaW5lICYmCisJCVBRcGlwZWxpbmVTdGF0dXMocHNldC5k YikgIT0gUFFfUElQRUxJTkVfT0ZGKQorCXsKKwkJLyoKKwkJICogV2UncmUgaW4gYSBwaXBlbGlu ZSBhbmQgaGF2ZW4ndCByZWFjaGVkIHRoZSBwaXBlbGluZSBlbmQgb3IgdGhlcmUKKwkJICogd2Fz IG5vIHJlcXVlc3QgdG8gcmVhZCBwaXBlbGluZSByZXN1bHRzLCBleGl0LgorCQkgKi8KKwkJcmV0 dXJuIDE7CisJfQorCiAJLyoKIAkgKiBGZXRjaCB0aGUgcmVzdWx0IGluIGNodW5rcyBpZiBGRVRD SF9DT1VOVCBpcyBzZXQsIGV4Y2VwdCB3aGVuOgogCSAqCkBAIC0xNTQ4LDcgKzE3MTUsNyBAQCBF eGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAl7CiAJCUV4ZWNT dGF0dXNUeXBlIHJlc3VsdF9zdGF0dXM7CiAJCWJvb2wJCWlzX2NodW5rZWRfcmVzdWx0ID0gZmFs c2U7Ci0JCVBHcmVzdWx0ICAgKm5leHRfcmVzdWx0OworCQlQR3Jlc3VsdCAgICpuZXh0X3Jlc3Vs dCA9IE5VTEw7CiAJCWJvb2wJCWxhc3Q7CiAKIAkJaWYgKCFBY2NlcHRSZXN1bHQocmVzdWx0LCBm YWxzZSkpCkBAIC0xNTcxLDYgKzE3MzgsOSBAQCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhj b25zdCBjaGFyICpxdWVyeSwKIAkJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7CiAJCQlzdWNj ZXNzID0gZmFsc2U7CiAKKwkJCWlmIChyZXN1bHRfc3RhdHVzID09IFBHUkVTX1BJUEVMSU5FX0FC T1JURUQpCisJCQkJcGdfbG9nX2luZm8oIlBpcGVsaW5lIGFib3J0ZWQsIGNvbW1hbmQgZGlkbid0 IHJ1biIpOworCiAJCQkvKgogCQkJICogc3dpdGNoIHRvIG5leHQgcmVzdWx0CiAJCQkgKi8KQEAg LTE1ODUsNiArMTc1NSwyMiBAQCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFy ICpxdWVyeSwKIAkJCQkgKiBpZ25vcmUgbWFudWFsbHkuCiAJCQkJICovCiAJCQkJcmVzdWx0ID0g TlVMTDsKKwkJCWVsc2UgaWYgKChlbmRfcGlwZWxpbmUgfHwgcHNldC5yZXF1ZXN0ZWRfcmVzdWx0 cyA+IDApCisJCQkJCSAmJiBQUXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIpICE9IFBRX1BJUEVMSU5F X09GRikKKwkJCXsKKworCQkJCS8qCisJCQkJICogV2UgaGF2ZSBhbiBlcnJvciB3aXRoaW4gYSBw aXBlbGluZS4gQWxsIGNvbW1hbmRzIGFyZQorCQkJCSAqIGFib3J0ZWQgdW50aWwgdGhlIG5leHQg c3luY2hyb25pc2F0aW9uIHBvaW50LiBXZSBuZWVkIHRvCisJCQkJICogY29uc3VtZSBhbGwgcmVz dWx0cyB1bnRpbCB0aGlzIHN5bmNocm9uaXNhdGlvbiBwb2ludCwgb3IKKwkJCQkgKiBzdG9wIHdo ZW4gdGhlcmUncyBubyBtb3JlIHJlc3VsdCB0byBkaXNjYXJkCisJCQkJICoKKwkJCQkgKiBDaGVj a2luZyBwaXBlbGluZSBzdGF0dXMgaXMgbmVjZXNzYXJ5IGluIGNhc2UgdGhlCisJCQkJICogY29u bmVjdGlvbiB3YXMgcmVzZXQuIFRoZSBuZXcgY29ubmVjdGlvbiBpc24ndCBpbiBhbnkga2luZAor CQkJCSAqIG9mIHBpcGVsaW5lIHN0YXRlIGFuZCB0aHVzIGhhcyBubyByZXN1bHQgdG8gZGlzY2Fy ZAorCQkJCSAqLworCQkJCXJlc3VsdCA9IGRpc2NhcmRBYm9ydGVkUGlwZWxpbmVSZXN1bHRzKCk7 CisJCQl9CiAJCQllbHNlCiAJCQkJcmVzdWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYik7CiAKQEAg LTE3NzEsMTIgKzE5NTcsNjYgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hh ciAqcXVlcnksCiAJCQl9CiAJCX0KIAorCQlpZiAocmVzdWx0X3N0YXR1cyA9PSBQR1JFU19QSVBF TElORV9TWU5DKQorCQl7CisJCQlBc3NlcnQocHNldC5waXBlZF9zeW5jcyA+IDApOworCisJCQkv KgorCQkJICogV2UgaGF2ZSBhIHN5bmMgcmVzcG9uc2UsIGRlY3JlYXNlIHRoZSBzeW5jIGFuZAor CQkJICogcmVxdWVzdGVkX3Jlc3VsdHMgY291bnRlcnMKKwkJCSAqLworCQkJcHNldC5waXBlZF9z eW5jcy0tOworCQkJcHNldC5yZXF1ZXN0ZWRfcmVzdWx0cy0tOworCisJCQkvKgorCQkJICogQWZ0 ZXIgYSBzeW5jaHJvbmlzYXRpb24gcG9pbnQsIHJlc2V0IHN1Y2Nlc3Mgc3RhdGUgdG8gcHJpbnQK KwkJCSAqIHBvc3NpYmxlIHN1Y2Nlc3NmdWwgcmVzdWx0cyB0aGF0IHdpbGwgYmUgcHJvY2Vzc2Vk IGFmdGVyIHRoaXMKKwkJCSAqLworCQkJc3VjY2VzcyA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBJ ZiBhbGwgc3luY3Mgd2VyZSBwcm9jZXNzZWQgYW5kIHBpcGVsaW5lIGVuZCB3YXMgcmVxdWVzdGVk LAorCQkJICogZXhpdCBwaXBlbGluZSBtb2RlCisJCQkgKi8KKwkJCWlmIChlbmRfcGlwZWxpbmUg JiYgcHNldC5waXBlZF9zeW5jcyA9PSAwKQorCQkJCXN1Y2Nlc3MgJj0gUFFleGl0UGlwZWxpbmVN b2RlKHBzZXQuZGIpOworCQl9CisJCWVsc2UgaWYgKFBRcGlwZWxpbmVTdGF0dXMocHNldC5kYikg IT0gUFFfUElQRUxJTkVfT0ZGICYmCisJCQkJIHJlc3VsdF9zdGF0dXMgIT0gUEdSRVNfUElQRUxJ TkVfU1lOQykKKwkJeworCQkJLyoKKwkJCSAqIFdlIGFyZSBpbiBhIHBpcGVsaW5lIGFuZCBoYXZl IGEgbm9uIHN5bmMgcmVzcG9uc2UsIGRlY3JlYXNlIHRoZQorCQkJICogcmVzdWx0cyBjb3VudGVy cworCQkJICovCisJCQlwc2V0LmF2YWlsYWJsZV9yZXN1bHRzLS07CisJCQlwc2V0LnJlcXVlc3Rl ZF9yZXN1bHRzLS07CisJCX0KKwogCQkvKgogCQkgKiBDaGVjayBQUWdldFJlc3VsdCgpIGFnYWlu LiAgSW4gdGhlIHR5cGljYWwgY2FzZSBvZiBhIHNpbmdsZS1jb21tYW5kCiAJCSAqIHN0cmluZywg aXQgd2lsbCByZXR1cm4gTlVMTC4gIE90aGVyd2lzZSwgd2UnbGwgaGF2ZSBvdGhlciByZXN1bHRz CiAJCSAqIHRvIHByb2Nlc3MuICBXZSBuZWVkIHRvIGRvIHRoYXQgdG8gY2hlY2sgd2hldGhlciB0 aGlzIGlzIHRoZSBsYXN0LgogCQkgKi8KLQkJbmV4dF9yZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0 LmRiKTsKKwkJaWYgKFBRcGlwZWxpbmVTdGF0dXMocHNldC5kYikgPT0gUFFfUElQRUxJTkVfT0ZG KQorCQkJbmV4dF9yZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsKKwkJZWxzZQorCQl7CisJ CQkvKgorCQkJICogSW4gcGlwZWxpbmUgbW9kZSwgYSBOVUxMIHJlc3VsdCBpbmRpY2F0ZXMgdGhl IGVuZCBvZiB0aGUKKwkJCSAqIGN1cnJlbnQgcXVlcnkgYmVpbmcgcHJvY2Vzc2VkLiBDYWxsIFBR Z2V0UmVzdWx0IHRvIGNvbnN1bWUgdGhpcworCQkJICogTlVMTAorCQkJICovCisJCQlpZiAocmVz dWx0X3N0YXR1cyAhPSBQR1JFU19QSVBFTElORV9TWU5DKQorCQkJeworCQkJCW5leHRfcmVzdWx0 ID0gUFFnZXRSZXN1bHQocHNldC5kYik7CisJCQkJQXNzZXJ0KG5leHRfcmVzdWx0ID09IE5VTEwp OworCQkJfQorCisJCQkvKiBXZSBjYW4gbm93IGdldCB0aGUgbmV4dCByZXN1bHQgaW4gdGhlIHBp cGVsaW5lICovCisJCQlpZiAocHNldC5yZXF1ZXN0ZWRfcmVzdWx0cyA+IDApCisJCQkJbmV4dF9y ZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsKKwkJfQorCiAJCWxhc3QgPSAobmV4dF9yZXN1 bHQgPT0gTlVMTCk7CiAKIAkJLyoKQEAgLTE3OTgsOCArMjAzOCwxMiBAQCBFeGVjUXVlcnlBbmRQ cm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAkJCSplbGFwc2VkX21zZWMgPSBJTlNU Ul9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7CiAJCX0KIAotCQkvKiB0aGlzIG1heSBvciBtYXkg bm90IHByaW50IHNvbWV0aGluZyBkZXBlbmRpbmcgb24gc2V0dGluZ3MgKi8KLQkJaWYgKHJlc3Vs dCAhPSBOVUxMKQorCQkvKgorCQkgKiBUaGlzIG1heSBvciBtYXkgbm90IHByaW50IHNvbWV0aGlu ZyBkZXBlbmRpbmcgb24gc2V0dGluZ3MuIEEKKwkJICogcGlwZWxpbmUgc3luYyB3aWxsIGhhdmUg YSBub24gbnVsbCByZXN1bHQgYnV0IGRvZXNuJ3QgaGF2ZSBhbnl0aGluZworCQkgKiB0byBwcmlu dCwgdGh1cyBpZ25vcmUgdGhlbQorCQkgKi8KKwkJaWYgKHJlc3VsdCAhPSBOVUxMICYmIHJlc3Vs dF9zdGF0dXMgIT0gUEdSRVNfUElQRUxJTkVfU1lOQykKIAkJewogCQkJLyoKIAkJCSAqIElmIHJl c3VsdHMgbmVlZCB0byBiZSBwcmludGVkIGludG8gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IFxnLApA QCAtMTgyNSw5ICsyMDY5LDE1IEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNo YXIgKnF1ZXJ5LAogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOwogCQlyZXN1bHQgPSBuZXh0 X3Jlc3VsdDsKIAotCQlpZiAoY2FuY2VsX3ByZXNzZWQpCisJCWlmIChjYW5jZWxfcHJlc3NlZCAm JiBQUXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIpID09IFBRX1BJUEVMSU5FX09GRikKIAkJewotCQkJ LyogZHJvcCB0aGlzIG5leHQgcmVzdWx0LCBhcyB3ZWxsIGFzIGFueSBvdGhlcnMgbm90IHlldCBy ZWFkICovCisJCQkvKgorCQkJICogT3V0c2lkZSBvZiBhIHBpcGVsaW5lLCBkcm9wIHRoaXMgbmV4 dCByZXN1bHQsIGFzIHdlbGwgYXMgYW55CisJCQkgKiBvdGhlcnMgbm90IHlldCByZWFkCisJCQkg KgorCQkJICogV2l0aGluIGEgcGlwZWxpbmUsIHdlIGNhbiBsZXQgdGhlIG91dGVyIGxvb3AgaGFu ZGxlIHRoaXMgYXMgYW4KKwkJCSAqIGFib3J0ZWQgcGlwZWxpbmUsIHdoaWNoIHdpbGwgZGlzY2Fy ZCBhbGwgcmVzdWx0cworCQkJICovCiAJCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOwogCQkJ Q2xlYXJPclNhdmVBbGxSZXN1bHRzKCk7CiAJCQlicmVhazsKQEAgLTE4MzcsNiArMjA4NywxNyBA QCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAkvKiBjbG9z ZSBcZyBmaWxlIGlmIHdlIG9wZW5lZCBpdCAqLwogCUNsb3NlR091dHB1dChnZmlsZV9mb3V0LCBn ZmlsZV9pc19waXBlKTsKIAorCWlmIChlbmRfcGlwZWxpbmUpCisJeworCQkvKiBBZnRlciBhIHBp cGVsaW5lIGlzIHByb2Nlc3NlZCwgcGlwZWxpbmUgcGlwZWRfc3luY3Mgc2hvdWxkIGJlIDAgKi8K KwkJQXNzZXJ0KHBzZXQucGlwZWRfc3luY3MgPT0gMCk7CisJCS8qIGFsbCBjb21tYW5kcyB3ZXJl IHByb2Nlc3NlZCAqLworCQlBc3NlcnQocHNldC5waXBlZF9jb21tYW5kcyA9PSAwKTsKKwkJLyog YW5kIGFsbCByZXN1bHRzIHdlcmUgcmVhZCAqLworCQlBc3NlcnQocHNldC5hdmFpbGFibGVfcmVz dWx0cyA9PSAwKTsKKwl9CisJQXNzZXJ0KHBzZXQucmVxdWVzdGVkX3Jlc3VsdHMgPT0gMCk7CisK IAkvKiBtYXkgbmVlZCB0aGlzIHRvIHJlY292ZXIgZnJvbSBjb25uIGxvc3MgZHVyaW5nIENPUFkg Ki8KIAlpZiAoIUNoZWNrQ29ubmVjdGlvbigpKQogCQlyZXR1cm4gLTE7CkBAIC0yMjk3LDYgKzI1 NTgsMTIgQEAgY2xlYW5fZXh0ZW5kZWRfc3RhdGUodm9pZCkKIAkJCXBzZXQuYmluZF9wYXJhbXMg PSBOVUxMOwogCQkJYnJlYWs7CiAJCWNhc2UgUFNRTF9TRU5EX1FVRVJZOgorCQljYXNlIFBTUUxf U0VORF9TVEFSVF9QSVBFTElORV9NT0RFOiAvKiBcc3RhcnRwaXBlbGluZSAqLworCQljYXNlIFBT UUxfU0VORF9FTkRfUElQRUxJTkVfTU9ERToJLyogXGVuZHBpcGVsaW5lICovCisJCWNhc2UgUFNR TF9TRU5EX1BJUEVMSU5FX1NZTkM6CS8qIFxzeW5jcGlwZWxpbmUgKi8KKwkJY2FzZSBQU1FMX1NF TkRfRkxVU0g6CS8qIFxmbHVzaCAqLworCQljYXNlIFBTUUxfU0VORF9HRVRfUkVTVUxUUzogLyog XGdldHJlc3VsdHMgKi8KKwkJY2FzZSBQU1FMX1NFTkRfRkxVU0hfUkVRVUVTVDoJLyogXGZsdXNo cmVxdWVzdCAqLwogCQkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvaGVs cC5jIGIvc3JjL2Jpbi9wc3FsL2hlbHAuYwppbmRleCBkYThlMWFkZTVkZi4uNzE0Yjg2MTkyMzMg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9oZWxwLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2hlbHAu YwpAQCAtMTY3LDE1ICsxNjcsMjIgQEAgc2xhc2hVc2FnZSh1bnNpZ25lZCBzaG9ydCBpbnQgcGFn ZXIpCiAJSEVMUDAoIiAgXFxjbG9zZSBTVE1UX05BTUUgICAgICAgY2xvc2UgYW4gZXhpc3Rpbmcg cHJlcGFyZWQgc3RhdGVtZW50XG4iKTsKIAlIRUxQMCgiICBcXGNvcHlyaWdodCAgICAgICAgICAg ICBzaG93IFBvc3RncmVTUUwgdXNhZ2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtc1xuIik7CiAJSEVM UDAoIiAgXFxjcm9zc3RhYnZpZXcgW0NPTFVNTlNdIGV4ZWN1dGUgcXVlcnkgYW5kIGRpc3BsYXkg cmVzdWx0IGluIGNyb3NzdGFiXG4iKTsKKwlIRUxQMCgiICBcXGVuZHBpcGVsaW5lICAgICAgICAg ICBleGl0IHBpcGVsaW5lIG1vZGVcbiIpOwogCUhFTFAwKCIgIFxcZXJydmVyYm9zZSAgICAgICAg ICAgIHNob3cgbW9zdCByZWNlbnQgZXJyb3IgbWVzc2FnZSBhdCBtYXhpbXVtIHZlcmJvc2l0eVxu Iik7CisJSEVMUDAoIiAgXFxmbHVzaCAgICAgICAgICAgICAgICAgcHVzaCB1bnNlbnQgZGF0YSB0 byB0aGUgc2VydmVyXG4iKTsKKwlIRUxQMCgiICBcXGZsdXNocmVxdWVzdCAgICAgICAgICBzZW5k IGEgZmx1c2hyZXF1ZXN0IGNvbW1hbmRcbiIpOwogCUhFTFAwKCIgIFxcZyBbKE9QVElPTlMpXSBb RklMRV0gIGV4ZWN1dGUgcXVlcnkgKGFuZCBzZW5kIHJlc3VsdCB0byBmaWxlIG9yIHxwaXBlKTtc biIKIAkJICAiICAgICAgICAgICAgICAgICAgICAgICAgIFxcZyB3aXRoIG5vIGFyZ3VtZW50cyBp cyBlcXVpdmFsZW50IHRvIGEgc2VtaWNvbG9uXG4iKTsKIAlIRUxQMCgiICBcXGdkZXNjICAgICAg ICAgICAgICAgICBkZXNjcmliZSByZXN1bHQgb2YgcXVlcnksIHdpdGhvdXQgZXhlY3V0aW5nIGl0 XG4iKTsKKwlIRUxQMCgiICBcXGdldHJlc3VsdHMgW05VTV9SRVNdICByZWFkIE5VTV9SRVMgcGVu ZGluZyByZXN1bHRzLiBBbGwgcGVuZGluZyByZXN1bHRzIGFyZVxuIgorCQkgICIgICAgICAgICAg ICAgICAgICAgICAgICAgcmVhZCBpZiBubyBhcmd1bWVudCBpcyBwcm92aWRlZFxuIik7CiAJSEVM UDAoIiAgXFxnZXhlYyAgICAgICAgICAgICAgICAgZXhlY3V0ZSBxdWVyeSwgdGhlbiBleGVjdXRl IGVhY2ggdmFsdWUgaW4gaXRzIHJlc3VsdFxuIik7CiAJSEVMUDAoIiAgXFxnc2V0IFtQUkVGSVhd ICAgICAgICAgZXhlY3V0ZSBxdWVyeSBhbmQgc3RvcmUgcmVzdWx0IGluIHBzcWwgdmFyaWFibGVz XG4iKTsKIAlIRUxQMCgiICBcXGd4IFsoT1BUSU9OUyldIFtGSUxFXSBhcyBcXGcsIGJ1dCBmb3Jj ZXMgZXhwYW5kZWQgb3V0cHV0IG1vZGVcbiIpOwogCUhFTFAwKCIgIFxccGFyc2UgU1RNVF9OQU1F ICAgICAgIGNyZWF0ZSBhIHByZXBhcmVkIHN0YXRlbWVudFxuIik7CiAJSEVMUDAoIiAgXFxxICAg ICAgICAgICAgICAgICAgICAgcXVpdCBwc3FsXG4iKTsKKwlIRUxQMCgiICBcXHN0YXJ0cGlwZWxp bmUgICAgICAgICBlbnRlciBwaXBlbGluZSBtb2RlXG4iKTsKKwlIRUxQMCgiICBcXHN5bmNwaXBl bGluZSAgICAgICAgICBhZGQgYSBzeW5jaHJvbmlzYXRpb24gcG9pbnQgdG8gYW4gb25nb2luZyBw aXBlbGluZVxuIik7CiAJSEVMUDAoIiAgXFx3YXRjaCBbW2k9XVNFQ10gW2M9Tl0gW209TUlOXVxu IgogCQkgICIgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZSBxdWVyeSBldmVyeSBTRUMg c2Vjb25kcywgdXAgdG8gTiB0aW1lcyxcbiIKIAkJICAiICAgICAgICAgICAgICAgICAgICAgICAg IHN0b3AgaWYgbGVzcyB0aGFuIE1JTiByb3dzIGFyZSByZXR1cm5lZFxuIik7CmRpZmYgLS1naXQg YS9zcmMvYmluL3BzcWwvc2V0dGluZ3MuaCBiL3NyYy9iaW4vcHNxbC9zZXR0aW5ncy5oCmluZGV4 IDJhOGZlMTJlYjU1Li4wMjJhNmU5MTgzZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3NldHRp bmdzLmgKKysrIGIvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmgKQEAgLTY5LDYgKzY5LDEyIEBAIHR5 cGVkZWYgZW51bQogCVBTUUxfU0VORF9FWFRFTkRFRF9QQVJTRSwKIAlQU1FMX1NFTkRfRVhURU5E RURfUVVFUllfUEFSQU1TLAogCVBTUUxfU0VORF9FWFRFTkRFRF9RVUVSWV9QUkVQQVJFRCwKKwlQ U1FMX1NFTkRfUElQRUxJTkVfU1lOQywKKwlQU1FMX1NFTkRfU1RBUlRfUElQRUxJTkVfTU9ERSwK KwlQU1FMX1NFTkRfRU5EX1BJUEVMSU5FX01PREUsCisJUFNRTF9TRU5EX0ZMVVNILAorCVBTUUxf U0VORF9GTFVTSF9SRVFVRVNULAorCVBTUUxfU0VORF9HRVRfUkVTVUxUUywKIH0gUFNRTF9TRU5E X01PREU7CiAKIHR5cGVkZWYgZW51bQpAQCAtMTExLDYgKzExNywxMiBAQCB0eXBlZGVmIHN0cnVj dCBfcHNxbFNldHRpbmdzCiAJY2hhcgkgICoqYmluZF9wYXJhbXM7CS8qIHBhcmFtZXRlcnMgZm9y IGV4dGVuZGVkIHF1ZXJ5IHByb3RvY29sIGNhbGwgKi8KIAljaGFyCSAgICpzdG10TmFtZTsJCS8q IHByZXBhcmVkIHN0YXRlbWVudCBuYW1lIHVzZWQgZm9yIGV4dGVuZGVkCiAJCQkJCQkJCSAqIHF1 ZXJ5IHByb3RvY29sIGNvbW1hbmRzICovCisJaW50CQkJcGlwZWRfY29tbWFuZHM7IC8qIG51bWJl ciBvZiBwaXBlZCBjb21tYW5kcyAqLworCWludAkJCXBpcGVkX3N5bmNzOwkvKiBudW1iZXIgb2Yg cGlwZWQgc3luY3MgKi8KKwlpbnQJCQlhdmFpbGFibGVfcmVzdWx0czsJLyogbnVtYmVyIG9mIHJl c3VsdHMgYXZhaWxhYmxlIHRvIGdldCAqLworCWludAkJCXJlcXVlc3RlZF9yZXN1bHRzOwkvKiBu dW1iZXIgb2YgcmVxdWVzdGVkIHJlc3VsdHMsIGluY2x1ZGUKKwkJCQkJCQkJCSAqIHN5bmMgbWVz c2FnZXMuIFVzZWQgdG8gcmVhZCBhIGxpbWl0ZWQKKwkJCQkJCQkJCSAqIHN1YnNldCBvZiB0aGUg YXZhaWxhYmxlX3Jlc3VsdHMgKi8KIAlib29sCQljcm9zc3RhYl9mbGFnOwkvKiBvbmUtc2hvdCBy ZXF1ZXN0IHRvIGNyb3NzdGFiIHJlc3VsdCAqLwogCWNoYXIJICAgKmN0dl9hcmdzWzRdOwkvKiBc Y3Jvc3N0YWJ2aWV3IGFyZ3VtZW50cyAqLwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdGFi LWNvbXBsZXRlLmluLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKaW5kZXggZWI4 YmMxMjg3MjAuLjg0MzJiZTY0MWFjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBs ZXRlLmluLmMKKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCkBAIC0xODg1LDkg KzE4ODUsOSBAQCBwc3FsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBp bnQgZW5kKQogCQkiXFxkcmRzIiwgIlxcZHJnIiwgIlxcZFJzIiwgIlxcZFJwIiwgIlxcZHMiLAog CQkiXFxkdCIsICJcXGRUIiwgIlxcZHYiLCAiXFxkdSIsICJcXGR4IiwgIlxcZFgiLCAiXFxkeSIs CiAJCSJcXGVjaG8iLCAiXFxlZGl0IiwgIlxcZWYiLCAiXFxlbGlmIiwgIlxcZWxzZSIsICJcXGVu Y29kaW5nIiwKLQkJIlxcZW5kaWYiLCAiXFxlcnJ2ZXJib3NlIiwgIlxcZXYiLAotCQkiXFxmIiwK LQkJIlxcZyIsICJcXGdkZXNjIiwgIlxcZ2V0ZW52IiwgIlxcZ2V4ZWMiLCAiXFxnc2V0IiwgIlxc Z3giLAorCQkiXFxlbmRpZiIsICJcXGVuZHBpcGVsaW5lIiwgIlxcZXJydmVyYm9zZSIsICJcXGV2 IiwKKwkJIlxcZiIsICJcXGZsdXNoIiwgIlxcZmx1c2hyZXF1ZXN0IiwKKwkJIlxcZyIsICJcXGdk ZXNjIiwgIlxcZ2V0ZW52IiwgIlxcZ2V0cmVzdWx0cyIsICJcXGdleGVjIiwgIlxcZ3NldCIsICJc XGd4IiwKIAkJIlxcaGVscCIsICJcXGh0bWwiLAogCQkiXFxpZiIsICJcXGluY2x1ZGUiLCAiXFxp bmNsdWRlX3JlbGF0aXZlIiwgIlxcaXIiLAogCQkiXFxsaXN0IiwgIlxcbG9faW1wb3J0IiwgIlxc bG9fZXhwb3J0IiwgIlxcbG9fbGlzdCIsICJcXGxvX3VubGluayIsCkBAIC0xODk1LDcgKzE4OTUs NyBAQCBwc3FsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5k KQogCQkiXFxwYXJzZSIsICJcXHBhc3N3b3JkIiwgIlxccHJpbnQiLCAiXFxwcm9tcHQiLCAiXFxw c2V0IiwKIAkJIlxccWVjaG8iLCAiXFxxdWl0IiwKIAkJIlxccmVzZXQiLAotCQkiXFxzIiwgIlxc c2V0IiwgIlxcc2V0ZW52IiwgIlxcc2YiLCAiXFxzdiIsCisJCSJcXHMiLCAiXFxzZXQiLCAiXFxz ZXRlbnYiLCAiXFxzZiIsICJcXHN0YXJ0cGlwZWxpbmUiLCAiXFxzdiIsICJcXHN5bmNwaXBlbGlu ZSIsCiAJCSJcXHQiLCAiXFxUIiwgIlxcdGltaW5nIiwKIAkJIlxcdW5zZXQiLAogCQkiXFx4IiwK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVz dC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IGU2M2VlMmNmMmJiLi4zN2I2ZDIxZTFm OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9z cmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC04MSw3ICs4MSw3IEBAIHRlc3Q6 IGJyaW5fYmxvb20gYnJpbl9tdWx0aQogdGVzdDogY3JlYXRlX3RhYmxlX2xpa2UgYWx0ZXJfZ2Vu ZXJpYyBhbHRlcl9vcGVyYXRvciBtaXNjIGFzeW5jIGRic2l6ZSBtZXJnZSBtaXNjX2Z1bmN0aW9u cyBzeXN2aWV3cyB0c3JmIHRpZCB0aWRzY2FuIHRpZHJhbmdlc2NhbiBjb2xsYXRlLnV0ZjggY29s bGF0ZS5pY3UudXRmOCBpbmNyZW1lbnRhbF9zb3J0IGNyZWF0ZV9yb2xlIHdpdGhvdXRfb3Zlcmxh cHMgZ2VuZXJhdGVkX3ZpcnR1YWwKIAogIyBjb2xsYXRlLmxpbnV4LnV0ZjggYW5kIGNvbGxhdGUu aWN1LnV0ZjggdGVzdHMgY2Fubm90IGJlIHJ1biBpbiBwYXJhbGxlbCB3aXRoIGVhY2ggb3RoZXIK LXRlc3Q6IHJ1bGVzIHBzcWwgcHNxbF9jcm9zc3RhYiBhbXV0aWxzIHN0YXRzX2V4dCBjb2xsYXRl LmxpbnV4LnV0ZjggY29sbGF0ZS53aW5kb3dzLndpbjEyNTIKK3Rlc3Q6IHJ1bGVzIHBzcWwgcHNx bF9jcm9zc3RhYiBwc3FsX3BpcGVsaW5lIGFtdXRpbHMgc3RhdHNfZXh0IGNvbGxhdGUubGludXgu dXRmOCBjb2xsYXRlLndpbmRvd3Mud2luMTI1MgogCiAjIC0tLS0tLS0tLS0KICMgUnVuIHRoZXNl IGFsb25lIHNvIHRoZXkgZG9uJ3QgcnVuIG91dCBvZiBwYXJhbGxlbCB3b3JrZXJzCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsX3BpcGVsaW5lLnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3BzcWxfcGlwZWxpbmUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi44NGEwMWQxYjcyYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3BzcWxfcGlwZWxpbmUuc3FsCkBAIC0wLDAgKzEsNDAxIEBACistLQorLS0gVGVzdHMg dXNpbmcgcHNxbCBwaXBlbGluaW5nCistLQorCitDUkVBVEUgVEFCTEUgcHNxbF9waXBlbGluZShh IElOVEVHRVIgUFJJTUFSWSBLRVksIHMgVEVYVCk7CisKKy0tIHNpbmdsZSBxdWVyeQorXHN0YXJ0 cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAndmFsMScgXGcKK1xlbmRwaXBlbGluZQorCistLSBt dWx0aXBsZSBxdWVyaWVzCitcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kICd2YWwxJyBc ZworU0VMRUNUICQxLCAkMiBcYmluZCAndmFsMicgJ3ZhbDMnIFxnCitTRUxFQ1QgJDEsICQyIFxi aW5kICd2YWwyJyAndmFsMycgXGcKK1xlbmRwaXBlbGluZQorCistLSBUZXN0IFxmbHVzaAorXHN0 YXJ0cGlwZWxpbmUKK1xmbHVzaAorU0VMRUNUICQxIFxiaW5kICd2YWwxJyBcZworXGZsdXNoCitT RUxFQ1QgJDEsICQyIFxiaW5kICd2YWwyJyAndmFsMycgXGcKK1NFTEVDVCAkMSwgJDIgXGJpbmQg J3ZhbDInICd2YWwzJyBcZworXGVuZHBpcGVsaW5lCisKKy0tIHNlbmQgbXVsdGlwbGUgc3luY3MK K1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitcc3luY3BpcGVsaW5l Citcc3luY3BpcGVsaW5lCitTRUxFQ1QgJDEsICQyIFxiaW5kICd2YWwyJyAndmFsMycgXGcKK1xz eW5jcGlwZWxpbmUKK1NFTEVDVCAkMSwgJDIgXGJpbmQgJ3ZhbDQnICd2YWw1JyBcZworXGVuZHBp cGVsaW5lCisKKy0tIHN0YXJ0cGlwZWxpbmUgc2hvdWxkbid0IGhhdmUgYW55IGVmZmVjdCBpZiBh bHJlYWR5IGluIGEgcGlwZWxpbmUKK1xzdGFydHBpcGVsaW5lCitcc3RhcnRwaXBlbGluZQorU0VM RUNUICQxIFxiaW5kICd2YWwxJyBcZworXGVuZHBpcGVsaW5lCisKKy0tIENvbnZlcnQgYW4gaW1w bGljaXQgdHggYmxvY2sgdG8gYW4gZXhwbGljaXQgdHggYmxvY2sKK1xzdGFydHBpcGVsaW5lCitJ TlNFUlQgSU5UTyBwc3FsX3BpcGVsaW5lIFZBTFVFUyAoJDEpIFxiaW5kIDEgXGcKK0JFR0lOIFxi aW5kIFxnCitJTlNFUlQgSU5UTyBwc3FsX3BpcGVsaW5lIFZBTFVFUyAoJDEpIFxiaW5kIDIgXGcK K1JPTExCQUNLIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKKworLS0gTXVsdGlwbGUgZXhwbGljaXQg dHJhbnNhY3Rpb25zCitcc3RhcnRwaXBlbGluZQorQkVHSU4gXGJpbmQgXGcKK0lOU0VSVCBJTlRP IHBzcWxfcGlwZWxpbmUgVkFMVUVTICgkMSkgXGJpbmQgMSBcZworUk9MTEJBQ0sgXGJpbmQgXGcK K0JFR0lOIFxiaW5kIFxnCitJTlNFUlQgSU5UTyBwc3FsX3BpcGVsaW5lIFZBTFVFUyAoJDEpIFxi aW5kIDEgXGcKK0NPTU1JVCBcYmluZCBcZworXGVuZHBpcGVsaW5lCisKKy0tIENPUFkgRlJPTSBT VERJTgorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAndmFsMScgXGcKK0NPUFkgcHNx bF9waXBlbGluZSBGUk9NIFNURElOIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKKzIJdGVzdDIKK1wu CisKKy0tIENPUFkgRlJPTSBTVERJTiB3aXRoIFxmbHVzaHJlcXVlc3QgKyBcZ2V0cmVzdWx0cwor XHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAndmFsMScgXGcKK0NPUFkgcHNxbF9waXBl bGluZSBGUk9NIFNURElOIFxiaW5kIFxnCitcZmx1c2hyZXF1ZXN0CitcZ2V0cmVzdWx0cworMwl0 ZXN0MworXC4KK1xlbmRwaXBlbGluZQorCistLSBDT1BZIEZST00gU1RESU4gd2l0aCBcc3luY3Bp cGVsaW5lICsgXGdldHJlc3VsdHMKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3Zh bDEnIFxnCitDT1BZIHBzcWxfcGlwZWxpbmUgRlJPTSBTVERJTiBcYmluZCBcZworXHN5bmNwaXBl bGluZQorXGdldHJlc3VsdHMKKzQJdGVzdDQKK1wuCitcZW5kcGlwZWxpbmUKKworLS0gQ09QWSBU TyBTVERPVVQKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitjb3B5 IHBzcWxfcGlwZWxpbmUgVE8gU1RET1VUIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKKworLS0gQ09Q WSBUTyBTVERPVVQgd2l0aCBcZmx1c2hyZXF1ZXN0ICsgXGdldHJlc3VsdHMKK1xzdGFydHBpcGVs aW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitjb3B5IHBzcWxfcGlwZWxpbmUgVE8gU1RE T1VUIFxiaW5kIFxnCitcZmx1c2hyZXF1ZXN0CitcZ2V0cmVzdWx0cworXGVuZHBpcGVsaW5lCisK Ky0tIENPUFkgVE8gU1RET1VUIHdpdGggXHN5bmNwaXBlbGluZSArIFxnZXRyZXN1bHRzCitcc3Rh cnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kICd2YWwxJyBcZworY29weSBwc3FsX3BpcGVsaW5l IFRPIFNURE9VVCBcYmluZCBcZworXHN5bmNwaXBlbGluZQorXGdldHJlc3VsdHMKK1xlbmRwaXBl bGluZQorCistLSBVc2UgXHBhcnNlIGFuZCBcYmluZF9uYW1lZAorXHN0YXJ0cGlwZWxpbmUKK1NF TEVDVCAkMSBccGFyc2UgJycKK1NFTEVDVCAkMSwgJDIgXHBhcnNlICcnCitTRUxFQ1QgJDIgXHBh cnNlIHBpcGVsaW5lXzEKK1xiaW5kX25hbWVkICcnIDEgMiBcZworXGJpbmRfbmFtZWQgcGlwZWxp bmVfMSAyIFxnCitcZW5kcGlwZWxpbmUKKworLS0gXGdldHJlc3VsdHMgZGlzcGxheXMgYWxsIHJl c3VsdHMgcHJlY2VkaW5nIGEgXGZsdXNocmVxdWVzdAorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAk MSBcYmluZCAxIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGZsdXNocmVxdWVzdAorXGdldHJl c3VsdHMKK1xlbmRwaXBlbGluZQorCistLSBcZ2V0cmVzdWx0cyBkaXNwbGF5cyBhbGwgcmVzdWx0 cyBwcmVjZWRpbmcgYSBzeW5jCitcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDEgXGcK K1NFTEVDVCAkMSBcYmluZCAyIFxnCitcc3luY3BpcGVsaW5lCitcZ2V0cmVzdWx0cworXGVuZHBp cGVsaW5lCisKKy0tIFxnZXRyZXN1bHRzIGltbWVkaWF0ZWx5IHJldHVybnMgaWYgdGhlcmUncyBu byByZXN1bHQgdG8gZmV0Y2gKK1xzdGFydHBpcGVsaW5lCitcZ2V0cmVzdWx0cworU0VMRUNUICQx IFxiaW5kIDIgXGcKK1xnZXRyZXN1bHRzCitcZmx1c2hyZXF1ZXN0CitcZW5kcGlwZWxpbmUKK1xn ZXRyZXN1bHRzCisKKy0tIFxnZXRyZXN1bHRzIG9ubHkgZmV0Y2ggcmVzdWx0cyBwcmVjZWRpbmcg YSBmbHVzaHJlcXVlc3QKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGZs dXNocmVxdWVzdAorU0VMRUNUICQxIFxiaW5kIDIgXGcKK1xnZXRyZXN1bHRzCitcZW5kcGlwZWxp bmUKKworLS0gXGdldHJlc3VsdHMgb25seSBmZXRjaCByZXN1bHRzIHByZWNlZGluZyBhIHN5bmMg bWVzc2FnZQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcc3luY3BpcGVs aW5lCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGdldHJlc3VsdHMKK1xlbmRwaXBlbGluZQorCist LSB1c2UgcGlwZWxpbmUgd2l0aCBjaHVua2VkIHJlc3VsdHMgd2l0aCBib3RoIFxnZXRyZXN1bHRz IGFuZCBcZW5kcGlwZWxpbmUKK1xzdGFydHBpcGVsaW5lCitcc2V0IEZFVENIX0NPVU5UIDEwCitT RUxFQ1QgJDEgXGJpbmQgMiBcZworXGZsdXNocmVxdWVzdAorXGdldHJlc3VsdHMKK1NFTEVDVCAk MSBcYmluZCAyIFxnCitcZW5kcGlwZWxpbmUKK1x1bnNldCBGRVRDSF9DT1VOVAorCistLSBcZ2V0 cmVzdWx0cyB3aXRoIHNwZWNpZmljIG51bWJlciBvZiByZXF1ZXN0ZWQgcmVzdWx0cworXHN0YXJ0 cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAxIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworU0VM RUNUICQxIFxiaW5kIDMgXGcKK1xzeW5jcGlwZWxpbmUKK1xnZXRyZXN1bHRzIDEKK1NFTEVDVCAk MSBcYmluZCA0IFxnCitcZ2V0cmVzdWx0cyAzCitcZW5kcGlwZWxpbmUKKworLS0gXHN5bmNwaXBl bGluZSBjb3VudCBhcyBvbmUgY29tbWFuZCB0byBmZXRjaCBmb3IgXGdldHJlc3VsdHMKK1xzdGFy dHBpcGVsaW5lCitcc3luY3BpcGVsaW5lCitcc3luY3BpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQg MSBcZworXGZsdXNocmVxdWVzdAorXGdldHJlc3VsdHMgMgorXGdldHJlc3VsdHMgMQorXGVuZHBp cGVsaW5lCisKKy0tIFxnZXRyZXN1bHRzIDAgc2hvdWxkIGdldCBhbGwgcmVzdWx0cworXHN0YXJ0 cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAxIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworU0VM RUNUICQxIFxiaW5kIDMgXGcKK1xzeW5jcGlwZWxpbmUKK1xnZXRyZXN1bHRzIDAKK1xlbmRwaXBl bGluZQorCistLSBwaXBlbGluaW5nIGVycm9ycworCistLSBlbmRwaXBlbGluZSBvdXRzaWRlIG9m IHBpcGVsaW5lIHNob3VsZCBmYWlsCitcZW5kcGlwZWxpbmUKKworLS0gUXVlcnkgdXNpbmcgc2lt cGxlIHByb3RvY29sIHNob3VsZCBub3QgYmUgc2VudCBhbmQgc2hvdWxkIGxlYXZlIHRoZSBwaXBl bGluZSB1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgMTsKK1NFTEVDVCAkMSBcYmluZCAn dmFsMScgXGcKK1xlbmRwaXBlbGluZQorCistLSBBZnRlciBhbiBhYm9ydGVkIHBpcGVsaW5lLCBj b21tYW5kcyBhZnRlciBhIHN5bmMgc2hvdWxkIGJlIGRpc3BsYXllZAorXHN0YXJ0cGlwZWxpbmUK K1NFTEVDVCAkMSBcYmluZCBcZworXHN5bmNwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDEgXGcK K1xlbmRwaXBlbGluZQorCistLSBJbmNvcnJlY3QgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIHRoZSBw aXBlbGluZSB3aWxsIGJlIGFib3J0ZWQgYW5kIGZvbGxvd2luZyBxdWVyaWVzIHdvbid0IGJlIGV4 ZWN1dGVkCitcc3RhcnRwaXBlbGluZQorU0VMRUNUIFxiaW5kICd2YWwxJyBcZworU0VMRUNUICQx IFxiaW5kICd2YWwxJyBcZworXGVuZHBpcGVsaW5lCisKKy0tIEFuIGV4cGxpY2l0IHRyYW5zYWN0 aW9uIHdpdGggYW4gZXJyb3IgbmVlZHMgdG8gYmUgcm9sbGJhY2tlZCBhZnRlciB0aGUgcGlwZWxp bmUKK1xzdGFydHBpcGVsaW5lCitCRUdJTiBcYmluZCBcZworSU5TRVJUIElOVE8gcHNxbF9waXBl bGluZSBWQUxVRVMgKCQxKSBcYmluZCAxIFxnCitST0xMQkFDSyBcYmluZCBcZworXGVuZHBpcGVs aW5lCitST0xMQkFDSzsKKworLS0gXHdhdGNoIHNlbmRzIGEgc2ltcGxlIHF1ZXJ5IHdoaWNoIHdv bid0IGJlIGFsbG93ZWQgd2l0aGluIGEgcGlwZWxpbmUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1Qg XGJpbmQgXGcKK1x3YXRjaCAxCitcZW5kcGlwZWxpbmUKKworLS0gXGdkZXNjIHNob3VsZCBmYWls IGFzIHN5bmNocm9ub3VzIGNvbW1hbmRzIGFyZSBub3QgYWxsb3dlZCBpbiBwaXBlbGluZSwgcGlw ZWxpbmUgc2hvdWxkIHN0aWxsIGJlIHVzYWJsZQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBc YmluZCAxIFxnZGVzYworU0VMRUNUICQxIFxiaW5kIDEgXGcKK1xlbmRwaXBlbGluZQorCistLSBc Z3NldCBpcyBub3QgYWxsb3dlZCwgcGlwZWxpbmUgc2hvdWxkIHN0aWxsIGJlIHVzYWJsZQorXHN0 YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBhcyBpLCAkMiBhcyBqIFxwYXJzZSAnJworU0VMRUNUICQx IGFzIGssICQyIGFzIGwgXHBhcnNlICdzZWNvbmQnCitcYmluZF9uYW1lZCAnJyAxIDIgXGdzZXQK K1xiaW5kX25hbWVkIHNlY29uZCAxIDIgXGdzZXQgcHJlZjAyXyBcZWNobyA6cHJlZjAyX2kgOnBy ZWYwMl9qCitcYmluZF9uYW1lZCAnJyAxIDIgXGcKK1xlbmRwaXBlbGluZQorCistLSBcZ3ggaXMg bm90IGFsbG93ZWQsIHBpcGVsaW5lIHNob3VsZCBzdGlsbCBiZSB1c2FibGUKK1xzdGFydHBpcGVs aW5lCitTRUxFQ1QgJDEgXGJpbmQgMSBcZ3gKK1xyZXNldAorU0VMRUNUICQxIFxiaW5kIDEgXGcK K1xlbmRwaXBlbGluZQorCistLSBcZ3ggd2FybmluZyBzaG91bGQgYmUgZW1pdHRlZCBpbiBhbiBh Ym9ydGVkIHBpcGVsaW5lCitcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIFxnCitcZmx1 c2hyZXF1ZXN0CitcZ2V0cmVzdWx0cworU0VMRUNUICQxIFxiaW5kIDEgXGd4CitcZW5kcGlwZWxp bmUKKworLS0gXGdleGVjIGlzIG5vdCBhbGxvd2VkLCBwaXBlbGluZSBzaG91bGQgc3RpbGwgYmUg dXNhYmxlCitcc3RhcnRwaXBlbGluZQorU0VMRUNUICdJTlNFUlQgSU5UTyBwc3FsX3BpcGVsaW5l KGEpIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApJyBccGFyc2UgJ2luc2VydF9zdG10Jwor XGJpbmRfbmFtZWQgaW5zZXJ0X3N0bXQgXGdleGVjCitcYmluZF9uYW1lZCBpbnNlcnRfc3RtdCBc ZworU0VMRUNUIENPVU5UKCopIEZST00gcHNxbF9waXBlbGluZSBcYmluZCBcZworXGVuZHBpcGVs aW5lCisKKy0tIEFmdGVyIGFuIGVycm9yLCBwaXBlbGluZSBpcyBhYm9ydGVkIGFuZCByZXF1aXJl cyBhIHN5bmMgdG8gYmUgcmV1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQg XGcKK1NFTEVDVCAkMSBcYmluZCAxIFxnCitTRUxFQ1QgJDEgXHBhcnNlIGEKK1xiaW5kX25hbWVk IGEgMSBcZworXGNsb3NlIGEKK1xmbHVzaHJlcXVlc3QKK1xnZXRyZXN1bHRzCistLSBQaXBlbGlu ZSBpcyBhYm9ydGVkCitTRUxFQ1QgJDEgXGJpbmQgMSBcZworU0VMRUNUICQxIFxwYXJzZSBhCitc YmluZF9uYW1lZCBhIDEgXGcKK1xjbG9zZSBhCistLSBTeW5jIGFsbG93cyBwaXBlbGluZSB0byBy ZWNvdmVyCitcc3luY3BpcGVsaW5lCitcZ2V0cmVzdWx0cworU0VMRUNUICQxIFxiaW5kIDEgXGcK K1NFTEVDVCAkMSBccGFyc2UgYQorXGJpbmRfbmFtZWQgYSAxIFxnCitcY2xvc2UgYQorXGZsdXNo cmVxdWVzdAorXGdldHJlc3VsdHMKK1xlbmRwaXBlbGluZQorCistLSBJbiBhbiBhYm9ydGVkIHBp cGVsaW5lLCBcZ2V0cmVzdWx0cyAxIGFib3J0ZWQgY29tbWFuZHMgb25lIGF0IGEgdGltZQorXHN0 YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCBcZworU0VMRUNUICQxIFxiaW5kIDEgXGcKK1NF TEVDVCAkMSBccGFyc2UgYQorXGJpbmRfbmFtZWQgYSAxIFxnCitcc3luY3BpcGVsaW5lCitcZ2V0 cmVzdWx0cyAxCitcZ2V0cmVzdWx0cyAxCitcZ2V0cmVzdWx0cyAxCitcZ2V0cmVzdWx0cyAxCitc Z2V0cmVzdWx0cyAxCitcZW5kcGlwZWxpbmUKKworLS0gVGVzdCBjaHVua2VkIHJlc3VsdHMgd2l0 aCBhbiBhYm9ydGVkIHBpcGVsaW5lCitcc3RhcnRwaXBlbGluZQorXHNldCBGRVRDSF9DT1VOVCAx MAorU0VMRUNUICQxIFxiaW5kIFxnCitcZmx1c2hyZXF1ZXN0CitcZ2V0cmVzdWx0cworU0VMRUNU ICQxIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKK1x1bnNldCBGRVRDSF9DT1VOVAorCistLSBcZ2V0 cmVzdWx0cyByZXR1cm5zIGFuIGVycm9yIHdoZW4gYW4gaW5jb3JyZWN0IG51bWJlciBpcyBwcm92 aWRlZAorXHN0YXJ0cGlwZWxpbmUKK1xnZXRyZXN1bHRzIC0xCitcZW5kcGlwZWxpbmUKKworLS0g XGdldHJlc3VsdHMgd2hlbiB0aGVyZSdzIG5vIHJlc3VsdCBzaG91bGRuJ3QgaW1wYWN0IHRoZSBm b2xsb3dpbmcgcXVlcnkKK1xnZXRyZXN1bHRzIDEKK3NlbGVjdCAxOworCistLSBwaXBlbGluaW5n IGFuZCB0cmFuc2FjdGlvbiBibG9jayBiZWhhdmlvdXIKKworLS0gc2V0IGxvY2FsIHdpbGwgaXNz dWUgYSB3YXJuaW5nIHdoZW4gbW9kaWZ5aW5nIGEgR1VDIG91dHNpZGUgb2YgYSB0cmFuc2FjdGlv biBibG9jaworLS0gVGhlIGNoYW5nZSB3aWxsIHN0aWxsIGJlIHZhbGlkIGFzIGEgcGlwZWxpbmUg cnVucyB3aXRoaW4gYW4gaW1wbGljaXQgdHJhbnNhY3Rpb24gYmxvY2sKKy0tIFNlbmRpbmcgYSBz eW5jIHdpbGwgY29tbWl0IHRoZSBpbXBsaWNpdCB0cmFuc2FjdGlvbiBibG9jay4gVGhlIGZpcnN0 IGNvbW1hbmQgYWZ0ZXIgYSBzeW5jCistLSB3b24ndCBiZSBzZWVuIGFzIGJlbG9uZ2luZyB0byBh IHBpcGVsaW5lLgorXHN0YXJ0cGlwZWxpbmUKK1NFVCBMT0NBTCBzdGF0ZW1lbnRfdGltZW91dD0n MWgnIFxiaW5kIFxnCitTSE9XIHN0YXRlbWVudF90aW1lb3V0IFxiaW5kIFxnCitcc3luY3BpcGVs aW5lCitTSE9XIHN0YXRlbWVudF90aW1lb3V0IFxiaW5kIFxnCitTRVQgTE9DQUwgc3RhdGVtZW50 X3RpbWVvdXQ9JzJoJyBcYmluZCBcZworU0hPVyBzdGF0ZW1lbnRfdGltZW91dCBcYmluZCBcZwor XGVuZHBpcGVsaW5lCisKKy0tIFJlaW5kZXggY29uY3VycmVudGx5IGlzIGZvcmJpZGRlbiBpbiB0 aGUgbWlkZGxlIG9mIGEgcGlwZWxpbmUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQg MSBcZworUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgcHNxbF9waXBlbGluZSBcYmluZCBcZwor U0VMRUNUICQxIFxiaW5kIDIgXGcKK1xlbmRwaXBlbGluZQorCistLSBSZWluZGV4IGNvbmN1cnJl bnRseSB3aWxsIHdvcmsgaWYgaXQncyB0aGUgZmlyc3QgY29tbWFuZCBvZiBhIHBpcGVsaW5lCitc c3RhcnRwaXBlbGluZQorUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgcHNxbF9waXBlbGluZSBc YmluZCBcZworU0VMRUNUICQxIFxiaW5kIDIgXGcKK1xlbmRwaXBlbGluZQorCistLSBzdWJ0cmFu c2FjdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHBpcGVsaW5lIG1vZGUKK1xzdGFydHBpcGVsaW5l CitTQVZFUE9JTlQgYSBcYmluZCBcZworU0VMRUNUICQxIFxiaW5kIDEgXGcKK1JPTExCQUNLIFRP IFNBVkVQT0lOVCBhIFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5l CisKKy0tIExvY2sgY29tbWFuZCB3aWxsIGZhaWwgYXMgZmlyc3QgcGlwZWxpbmUgY29tbWFuZCBp cyBub3Qgc2VlbiBhcyBhIHRyYW5zYWN0aW9uIGJsb2NrCitcc3RhcnRwaXBlbGluZQorTE9DSyBw c3FsX3BpcGVsaW5lIFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5l CisKKy0tIExvY2sgY29tbWFuZCB3aWxsIHN1Y2NlZWQgYWZ0ZXIgdGhlIGZpcnN0IGNvbW1hbmQg YXMgcGlwZWxpbmUgd2lsbCBiZSBzZWVuIGFzIGFuIGltcGxpY2l0IHRyYW5zYWN0aW9uIGJsb2Nr Citcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDEgXGcKK0xPQ0sgcHNxbF9waXBlbGlu ZSBcYmluZCBcZworU0VMRUNUICQxIFxiaW5kIDIgXGcKK1xlbmRwaXBlbGluZQorCistLSBWYWN1 dW0gY29tbWFuZCB3aWxsIHdvcmsgYXMgdGhlIGZpcnN0IGNvbW1hbmQKK1xzdGFydHBpcGVsaW5l CitWQUNVVU0gcHNxbF9waXBlbGluZSBcYmluZCBcZworXGVuZHBpcGVsaW5lCisKKy0tIFZhY3V1 bSBjb21tYW5kIHdpbGwgZmFpbCB3aXRoaW4gcGlwZWxpbmUgaW1wbGljaXQgdHJhbnNhY3Rpb24K K1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgMSBcYmluZCBcZworVkFDVVVNIHBzcWxfcGlwZWxpbmUg XGJpbmQgXGcKK1xlbmRwaXBlbGluZQorCistLSBWYWN1dW0gY29tbWFuZCB3aWxsIHdvcmsgYWZ0 ZXIgYSBzeW5jCitcc3RhcnRwaXBlbGluZQorU0VMRUNUIDEgXGJpbmQgXGcKK1xzeW5jcGlwZWxp bmUKK1ZBQ1VVTSBwc3FsX3BpcGVsaW5lIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKLS0gCjIuMzku NSAoQXBwbGUgR2l0LTE1NCkKCg== --000000000000c8bb76062e6e0d75 Content-Type: application/octet-stream; name="v08-0002-Add-prompt-interpolation-and-variables-for-psql-.patch" Content-Disposition: attachment; filename="v08-0002-Add-prompt-interpolation-and-variables-for-psql-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7arihgl1 RnJvbSAwNjk2MmRlYjQ2YmU2YWYxNWRmZTY5NGU2ZTYzNDJhZjAyOTY0NjM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRob25pbiBCb25uZWZveSA8YW50aG9uaW4uYm9ubmVmb3lA ZGF0YWRvZ2hxLmNvbT4KRGF0ZTogVHVlLCAxOCBGZWIgMjAyNSAxNTozMjozMSArMDEwMApTdWJq ZWN0OiBBZGQgcHJvbXB0IGludGVycG9sYXRpb24gYW5kIHZhcmlhYmxlcyBmb3IgcHNxbCBwaXBl bGluZQoKQWRkICVQIHByb21wdCBpbnRlcnBvbGF0aW9uIHRoYXQgcmVwb3J0cyB0aGUgc3RhdHVz IHBpcGVsaW5lOiBvbiwgb2ZmIG9yCmFib3J0LiBBZGRpdGlvbmFsbHksIDMgbmV3IHNwZWNpYWwg dmFyaWFibGVzIGFyZSBhZGRlZCB0byByZXBvcnQgdGhlCnN0YXR1cyBvZiBhbiBvbmdvaW5nIHBp cGVsaW5lOgotIFBJUEVMSU5FX1NZTkNfQ09VTlQ6IHJlcG9ydHMgdGhlIG51bWJlciBvZiBwaXBl ZCBzeW5jCi0gUElQRUxJTkVfQ09NTUFORF9DT1VOVDogcmVwb3J0cyB0aGUgbnVtYmVyIG9mIHBp cGVkIGNvbW1hbmRzLCBhCiAgY29tbWFuZCBiZWluZyBlaXRoZXIgXGJpbmQsIFxiaW5kX25hbWVk LCBcY2xvc2Ugb3IgXHBhcnNlCi0gUElQRUxJTkVfUkVTVUxUX0NPVU5UOiByZXBvcnRzIHRoZSBy ZXN1bHRzIGF2YWlsYWJsZSB0byByZWFkIHdpdGgKICBcZ2V0cmVzdWx0cwotLS0KIGRvYy9zcmMv c2dtbC9yZWYvcHNxbC1yZWYuc2dtbCB8IDQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIHNyYy9iaW4vcHNxbC9jb21tb24uYyAgICAgICAgICB8IDI3ICsrKysrKysrKysrKysr KysrKy0KIHNyYy9iaW4vcHNxbC9wcm9tcHQuYyAgICAgICAgICB8IDEyICsrKysrKysrKwogc3Jj L2Jpbi9wc3FsL3N0YXJ0dXAuYyAgICAgICAgIHwgIDUgKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA5 MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9wc3FsLXJlZi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sCmluZGV4 IGZkYWUxZWQwNDc5Li4wOTFjYmFlZmMxNSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9w c3FsLXJlZi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbApAQCAtMzcy Myw2ICszNzIzLDEyIEBAIHRlc3RkYj0mZ3Q7IDx1c2VyaW5wdXQ+XHNldGVudiBMRVNTIC1pbXg0 RjwvdXNlcmlucHV0PgogICAgICAgICAgIGdlbmVyYXRlIG9uZSByZXN1bHQgdG8gZ2V0LgogICAg ICAgIDwvcGFyYT4KIAorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaGVuIHBpcGVsaW5lIG1v ZGUgaXMgYWN0aXZlLCBhIGRlZGljYXRlZCBwcm9tcHQgdmFyaWFibGUgaXMKKyAgICAgICAgICBh dmFpbGFibGUgdG8gcmVwb3J0IHRoZSBwaXBlbGluZSBzdGF0dXMuIFNlZQorICAgICAgICAgIDx4 cmVmIGxpbmtlbmQ9ImFwcC1wc3FsLXByb21wdGluZy1wLXVjIi8+IGZvciBtb3JlIGRldGFpbHMK KyAgICAgICA8L3BhcmE+CisKICAgICAgICA8cGFyYT4KICAgICAgICAgRXhhbXBsZToKIDxwcm9n cmFtbGlzdGluZz4KQEAgLTQ1MDQsNiArNDUxMCwzOCBAQCBiYXIKICAgICAgICAgPC9saXN0aXRl bT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcHAt cHNxbC12YXJpYWJsZXMtcGlwZWxpbmUtY29tbWFuZC1jb3VudCI+CisgICAgICAgIDx0ZXJtPjx2 YXJuYW1lPlBJUEVMSU5FX0NPTU1BTkRfQ09VTlQ8L3Zhcm5hbWU+PC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbnVtYmVyIG9mIGNvbW1hbmRz IGdlbmVyYXRlZCBieSA8bGl0ZXJhbD5cYmluZDwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFs PlxiaW5kX25hbWVkPC9saXRlcmFsPiwgPGxpdGVyYWw+XGNsb3NlPC9saXRlcmFsPiBvcgorICAg ICAgICA8bGl0ZXJhbD5ccGFyc2U8L2xpdGVyYWw+IHF1ZXVlZCBpbiBhbiBvbmdvaW5nIHBpcGVs aW5lLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXBwLXBzcWwtdmFyaWFibGVzLXBp cGVsaW5lLXJlc3VsdC1jb3VudCI+CisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPlBJUEVMSU5FX1JF U1VMVF9DT1VOVDwvdmFybmFtZT48L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg PHBhcmE+CisgICAgICAgIFRoZSBudW1iZXIgb2YgY29tbWFuZHMgb2YgYW4gb25nb2luZyBwaXBl bGluZSB0aGF0IHdlcmUgZm9sbG93ZWQKKyAgICAgICAgYnkgZWl0aGVyIGEgPGNvbW1hbmQ+XGZs dXNocmVxdWVzdDwvY29tbWFuZD4gb3IgYQorICAgICAgICA8Y29tbWFuZD5cc3luY3BpcGVsaW5l PC9jb21tYW5kPiwgZm9yY2luZyB0aGUgc2VydmVyIHRvIHNlbmQgdGhlCisgICAgICAgIHJlc3Vs dHMgYW5kIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8Y29tbWFuZD5cZ2V0cmVzdWx0czwvY29tbWFu ZD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcHAtcHNxbC12YXJpYWJsZXMtcGlw ZWxpbmUtc3luYy1jb3VudCI+CisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPlBJUEVMSU5FX1NZTkNf Q09VTlQ8L3Zhcm5hbWU+PC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJh PgorICAgICAgICBUaGUgbnVtYmVyIG9mIHN5bmNzIHF1ZXVlZCBpbiBhbiBvbmdvaW5nIHBpcGVs aW5lLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxp c3RlbnRyeT4KKwogICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXBwLXBzcWwtdmFyaWFibGVzLXBv cnQiPgogICAgICAgICA8dGVybT48dmFybmFtZT5QT1JUPC92YXJuYW1lPjwvdGVybT4KICAgICAg ICAgPGxpc3RpdGVtPgpAQCAtNDkwMyw2ICs0OTQxLDE3IEBAIHRlc3RkYj0mZ3Q7IDx1c2VyaW5w dXQ+SU5TRVJUIElOVE8gbXlfdGFibGUgVkFMVUVTICg6J2NvbnRlbnQnKTs8L3VzZXJpbnB1dD4K ICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgICA8dmFy bGlzdGVudHJ5IGlkPSJhcHAtcHNxbC1wcm9tcHRpbmctcC11YyI+CisgICAgICAgIDx0ZXJtPjxs aXRlcmFsPiVQPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8 cGFyYT4KKyAgICAgICAgUGlwZWxpbmUgc3RhdHVzOiA8bGl0ZXJhbD5vZmY8L2xpdGVyYWw+IHdo ZW4gbm90IGluIGEgcGlwZWxpbmUsCisgICAgICAgIG9yIDxsaXRlcmFsPm9uPC9saXRlcmFsPiB3 aGVuIGluIGFuIG9uZ29pbmcgcGlwZWxpbmUsIG9yCisgICAgICAgIDxsaXRlcmFsPmFib3J0PC9s aXRlcmFsPiB3aGVuIGluIGFuIGFib3J0ZWQgcGlwZWxpbmUuCisgICAgICAgIDwvcGFyYT4KKyAg ICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgICA8dmFybGlz dGVudHJ5IGlkPSJhcHAtcHNxbC1wcm9tcHRpbmctciI+CiAgICAgICAgIDx0ZXJtPjxsaXRlcmFs PiVSPC9saXRlcmFsPjwvdGVybT4KICAgICAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wc3FsL2NvbW1vbi5jIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCmluZGV4IGI3ZmU1NTVk NTZjLi43MDIwMGU4NTk0ZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCisrKyBi L3NyYy9iaW4vcHNxbC9jb21tb24uYwpAQCAtNTI0LDYgKzUyNCwyNyBAQCBTZXRTaGVsbFJlc3Vs dFZhcmlhYmxlcyhpbnQgd2FpdF9yZXN1bHQpCiB9CiAKIAorLyoKKyAqIFNldCBzcGVjaWFsIHBp cGVsaW5lIHZhcmlhYmxlcworICogLSBQSVBFTElORV9TWU5DX0NPVU5UOiBUaGUgbnVtYmVyIG9m IHBpcGVkIHN5bmNzCisgKiAtIFBJUEVMSU5FX0NPTU1BTkRfQ09VTlQ6IFRoZSBudW1iZXIgb2Yg cGlwZWQgY29tbWFuZHMKKyAqIC0gUElQRUxJTkVfUkVTVUxUX0NPVU5UOiBUaGUgbnVtYmVyIG9m IHJlc3VsdHMgYXZhaWxhYmxlIHRvIHJlYWQKKyAqLworc3RhdGljIHZvaWQKK1NldFBpcGVsaW5l VmFyaWFibGVzKHZvaWQpCit7CisJY2hhcgkJYnVmWzMyXTsKKworCXNucHJpbnRmKGJ1Ziwgc2l6 ZW9mKGJ1ZiksICIlZCIsIHBzZXQucGlwZWRfc3luY3MpOworCVNldFZhcmlhYmxlKHBzZXQudmFy cywgIlBJUEVMSU5FX1NZTkNfQ09VTlQiLCBidWYpOworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1 ZiksICIlZCIsIHBzZXQucGlwZWRfY29tbWFuZHMpOworCVNldFZhcmlhYmxlKHBzZXQudmFycywg IlBJUEVMSU5FX0NPTU1BTkRfQ09VTlQiLCBidWYpOworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1 ZiksICIlZCIsIHBzZXQuYXZhaWxhYmxlX3Jlc3VsdHMpOworCVNldFZhcmlhYmxlKHBzZXQudmFy cywgIlBJUEVMSU5FX1JFU1VMVF9DT1VOVCIsIGJ1Zik7CisJQXNzZXJ0KHBzZXQucmVxdWVzdGVk X3Jlc3VsdHMgPT0gMCk7Cit9CisKKwogLyoKICAqIENsZWFyT3JTYXZlUmVzdWx0CiAgKgpAQCAt MTY1NSw2ICsxNjc2LDggQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAq cXVlcnksCiAKIAkJQ2hlY2tDb25uZWN0aW9uKCk7CiAKKwkJU2V0UGlwZWxpbmVWYXJpYWJsZXMo KTsKKwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNjYzLDggKzE2ODYsOSBAQCBFeGVjUXVlcnlB bmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAl7CiAJCS8qCiAJCSAqIFdlJ3Jl IGluIGEgcGlwZWxpbmUgYW5kIGhhdmVuJ3QgcmVhY2hlZCB0aGUgcGlwZWxpbmUgZW5kIG9yIHRo ZXJlCi0JCSAqIHdhcyBubyByZXF1ZXN0IHRvIHJlYWQgcGlwZWxpbmUgcmVzdWx0cywgZXhpdC4K KwkJICogd2FzIG5vIHJlcXVlc3QgdG8gcmVhZCBwaXBlbGluZSByZXN1bHRzLCB1cGRhdGUgcHNx bCB2YXJpYWJsZXMgYW5kIGV4aXQuCiAJCSAqLworCQlTZXRQaXBlbGluZVZhcmlhYmxlcygpOwog CQlyZXR1cm4gMTsKIAl9CiAKQEAgLTIwOTcsNiArMjEyMSw3IEBAIEV4ZWNRdWVyeUFuZFByb2Nl c3NSZXN1bHRzKGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQlBc3NlcnQocHNldC5hdmFpbGFibGVfcmVz dWx0cyA9PSAwKTsKIAl9CiAJQXNzZXJ0KHBzZXQucmVxdWVzdGVkX3Jlc3VsdHMgPT0gMCk7CisJ U2V0UGlwZWxpbmVWYXJpYWJsZXMoKTsKIAogCS8qIG1heSBuZWVkIHRoaXMgdG8gcmVjb3ZlciBm cm9tIGNvbm4gbG9zcyBkdXJpbmcgQ09QWSAqLwogCWlmICghQ2hlY2tDb25uZWN0aW9uKCkpCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvcHJvbXB0LmMgYi9zcmMvYmluL3BzcWwvcHJvbXB0LmMK aW5kZXggMDhhMTRmZWIzYzMuLjc4NTA1MjIyZTAxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwv cHJvbXB0LmMKKysrIGIvc3JjL2Jpbi9wc3FsL3Byb21wdC5jCkBAIC0zMSw2ICszMSw3IEBACiAg KgkJc29ja2V0cywgIltsb2NhbDovZGlyL25hbWVdIiBpZiBub3QgZGVmYXVsdAogICogJW0gLSBs aWtlICVNLCBidXQgaG9zdG5hbWUgb25seSAoYmVmb3JlIGZpcnN0IGRvdCksIG9yIGFsd2F5cyAi W2xvY2FsXSIKICAqICVwIC0gYmFja2VuZCBwaWQKKyAqICVQIC0gcGlwZWxpbmUgc3RhdHVzOiBv biwgb2ZmIG9yIGFib3J0CiAgKiAlPiAtIGRhdGFiYXNlIHNlcnZlciBwb3J0IG51bWJlcgogICog JW4gLSBkYXRhYmFzZSB1c2VyIG5hbWUKICAqICVzIC0gc2VydmljZQpAQCAtMTgxLDcgKzE4Miwx OCBAQCBnZXRfcHJvbXB0KHByb21wdFN0YXR1c190IHN0YXR1cywgQ29uZGl0aW9uYWxTdGFjayBj c3RhY2spCiAJCQkJCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgcGlkKTsKIAkJ CQkJfQogCQkJCQlicmVhazsKKwkJCQljYXNlICdQJzoKKwkJCQkJeworCQkJCQkJUEdwaXBlbGlu ZVN0YXR1cyBzdGF0dXMgPSBQUXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIpOwogCisJCQkJCQlpZiAo c3RhdHVzID09IFBRX1BJUEVMSU5FX09OKQorCQkJCQkJCXN0cmxjcHkoYnVmLCAib24iLCBzaXpl b2YoYnVmKSk7CisJCQkJCQllbHNlIGlmIChzdGF0dXMgPT0gUFFfUElQRUxJTkVfQUJPUlRFRCkK KwkJCQkJCQlzdHJsY3B5KGJ1ZiwgImFib3J0Iiwgc2l6ZW9mKGJ1ZikpOworCQkJCQkJZWxzZQor CQkJCQkJCXN0cmxjcHkoYnVmLCAib2ZmIiwgc2l6ZW9mKGJ1ZikpOworCQkJCQkJYnJlYWs7CisJ CQkJCX0KIAkJCQljYXNlICcwJzoKIAkJCQljYXNlICcxJzoKIAkJCQljYXNlICcyJzoKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcHNxbC9zdGFydHVwLmMgYi9zcmMvYmluL3BzcWwvc3RhcnR1cC5jCmlu ZGV4IDcwM2YzZjU4MmMxLi41MDE4ZWVkZjFlNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3N0 YXJ0dXAuYworKysgYi9zcmMvYmluL3BzcWwvc3RhcnR1cC5jCkBAIC0yMDUsNiArMjA1LDExIEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlTZXRWYXJpYWJsZShwc2V0LnZhcnMsICJQ Uk9NUFQzIiwgREVGQVVMVF9QUk9NUFQzKTsKIAlTZXRWYXJpYWJsZUJvb2wocHNldC52YXJzLCAi U0hPV19BTExfUkVTVUxUUyIpOwogCisJLyogSW5pdGlhbGl6ZSBwaXBlbGluZSB2YXJpYWJsZXMg Ki8KKwlTZXRWYXJpYWJsZShwc2V0LnZhcnMsICJQSVBFTElORV9TWU5DX0NPVU5UIiwgIjAiKTsK KwlTZXRWYXJpYWJsZShwc2V0LnZhcnMsICJQSVBFTElORV9DT01NQU5EX0NPVU5UIiwgIjAiKTsK KwlTZXRWYXJpYWJsZShwc2V0LnZhcnMsICJQSVBFTElORV9SRVNVTFRfQ09VTlQiLCAiMCIpOwor CiAJcGFyc2VfcHNxbF9vcHRpb25zKGFyZ2MsIGFyZ3YsICZvcHRpb25zKTsKIAogCS8qCi0tIAoy LjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --000000000000c8bb76062e6e0d75--