Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w735Q-004uQU-1a for pgsql-bugs@arkaria.postgresql.org; Mon, 30 Mar 2026 03:14:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w735O-000iDj-3B for pgsql-bugs@arkaria.postgresql.org; Mon, 30 Mar 2026 03:14:43 +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.96) (envelope-from ) id 1w735O-000iDX-1Y for pgsql-bugs@lists.postgresql.org; Mon, 30 Mar 2026 03:14:43 +0000 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w735G-00000001jr3-3fwA for pgsql-bugs@lists.postgresql.org; Mon, 30 Mar 2026 03:14:42 +0000 Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-667de793310so6514542a12.0 for ; Sun, 29 Mar 2026 20:14:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774840472; cv=none; d=google.com; s=arc-20240605; b=BFv6PHcTDUbCCwN5Vw/DgA6Wji2JvvpZcJ5Nt/ZX2gPPe48/xZGe2GWg0Umu0WbHoX 2MemoJnMVyOMmikk6UQbfm40aVbk7SsnpPdrXJtCltDqdBURXk0L+mWEhRGE/OKjmZ29 nmNufDRixTVdl6KUkKzCMaW47EecK2MZ9+ztqHSEvxW5TViFZoFP0i1dDF54m8om8wCe 75UnHtEBDcwHbyh1BEzATNKOmcS29EHUeSqVLvwcC0ZrewXzYxSjko8WxvibcOipnT2S 8WA/eNy1wc8H4Bnt3abl1gW1zfHlBvYHmnQC9tRI9kwgO6NRoNLVaQD3vEojO5EgTKe1 AYjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=TQXcQVRFDzCOArWEHalySVLw8onZ/t6D0L2f+kKhNZE=; fh=m+3zdpm03GSjBnQU6NJ/g1l9u/dInpIwDQsFYXeMHrY=; b=lH2EvP/ZPWvN4ZtYtIIrRRiQ7ZYdiRVq/dV0B/55ngop447Ln3OcGGszm+8ReiF8Zj FvWlZNRKTMe7lH/J9bFAFQB1r8KrSfgVKgeeltLDZ4x7pXKJN0oYIOCnRrmSrmjGw5nl Ois0elycEFWvjf1iNKLAwcIiaSkF+rtirEnSIxu7lGTJdlJAOvIdVMob/jZR971gx83S vRRF/OZESxx7XG3klQZc5k/DrtiPyJ70sSK8m2xzPxiGXp0y4Jl4EpVtEuKgvFRSMsqE jlVh+QLBcqYsRyMM8XH3ibxVxJ2oxNYKlbA8g4cB4vkftIgJaD017GXNyVriT+kH0rRn XZ0A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774840472; x=1775445272; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=TQXcQVRFDzCOArWEHalySVLw8onZ/t6D0L2f+kKhNZE=; b=GiIQpnZ87pML8g4kXzarAbW4ep/cVRmfE6OBR3J9oRlKnUZXx4yCg5jKWJ22o+Qven 4IUzgPxbXUjfih/szz7WpiMmDTcT1wHMQZ8F703NdzY6O8jqNvkvbVgfmIMwX6UiS+Qb oLvr6r9iSU+bcqZFsjPyH79oUgk304rbTQ8Wka2d2N7VoH93KpQ07ith+Ejv1+unkNnD MYlQHSbhQeEFgV86GcHUcpdnOs9krNOS0p5x1JQ6Ug61PjUwojCgSHr0/md9HNWDKsns glWWcSjTPtW5D09OSXkHVen8Es5qz407VryUHAySlU8mTImCoCs6Cj7VBUmViu+QWaSw EqOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774840472; x=1775445272; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=TQXcQVRFDzCOArWEHalySVLw8onZ/t6D0L2f+kKhNZE=; b=QXTvrvwcLrz0xFXRATYiXMPqFKwXI7MkPF/J61WcGcP9qISpM9QT00IYE7kcl8laEm vOKTl4NPfGoL8EeB+e+CpCUlzDdY4nKeFnawI3GV9/P2OoFUOtMPjjE8ZlpPeJcA3ch4 zVlE4wT9u+mydOTSYWGW+tQ5uWy4xwBDzmZqYfcfRV7CkJ6J9N+HrYw6rFGDknEI6B6d kDMTrwlL0RdHO32gy/RbzkZnzzT4QxcmqMo9wklINMmHDVX7PGwrhwc/OPceHZQa2KxD u8lhsRTmbzNThFPeimOXTuYFxBd62QnD74cheoTI+Va/R6o3Uqilymzvz/dcC2J9uKPn LPjQ== X-Forwarded-Encrypted: i=1; AJvYcCXz5ew5y91S/ESecVKHzd30kJ+bU4aqCirlst2O058HeqUkW2axXkQKMjfwa6YjLPCI8GiiYIMNbl5z@lists.postgresql.org X-Gm-Message-State: AOJu0YzpogplHC1v+T+t3DtFbARahhqFmjQON5+HzAti6qAVu8AdIrAn nesk5wY/+Li3WnjQ0cTpUxmfJDsP4VNKrIKtIj7xkR6aMbxV1veXHZdq68w8TfBprCoMDGsXYg5 BjVFBToGA5Xs0iOt/6jp0H4Hucua9B20= X-Gm-Gg: ATEYQzxxbi35tdI+t1avbKUiA6A1HjVYgCDpPzS8cC4HE6RxIkthlA4B0e4pFep5zXg BrYZgP4RPcOk+BKe5Wo6edIl0AhPn8EnzIdVb5KT+Eo9u2zzBLPVsUHcHybq8+gaUuIBx8cNkeR 8lfenXzaDROXlmQdwdx/dsMHblmajXJaESbGevfy+rebaEDODUBalK3+dDFfpQYjCqu6lOzRHtz 76uWmb2ihUhiSQrqMVZeexNBQ+/c+MB1VoPfHWvVXBh+98UKsHvQx+iPEbXVRubq/sjZwxj9QmK fFWJSyc01F5RLNd+ISo6cnkjoPrcLrPaZYIRoK3xlfmaJHuykhVLiywuCWCM3zdNVa+LYRpDqbD HAGECyBG/ X-Received: by 2002:a50:ee06:0:b0:66b:864f:d279 with SMTP id 4fb4d7f45d1cf-66b864fd468mr2718117a12.12.1774840471776; Sun, 29 Mar 2026 20:14:31 -0700 (PDT) MIME-Version: 1.0 References: <19439-8f02018f9fc3a240@postgresql.org> In-Reply-To: From: Xuneng Zhou Date: Mon, 30 Mar 2026 11:14:19 +0800 X-Gm-Features: AQROBzCaknZW5dW4jjon72oO_pvxbnq2WUHODh8VwGTHsX_zsKNKNMbZkY4qK4E Message-ID: Subject: Re: BUG #19439: pg_stat_xact_user_tables stat not currect during the transaction To: klemen.kobau@gmail.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000daa566064e353fc1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000daa566064e353fc1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Mar 29, 2026 at 11:17=E2=80=AFAM Xuneng Zhou = wrote: > > On Sat, Mar 28, 2026 at 1:47=E2=80=AFPM Xuneng Zhou wrote: > > > > On Fri, Mar 27, 2026 at 10:15=E2=80=AFAM Xuneng Zhou wrote: > > > > > > Hi klemen, > > > > > > Thanks for the report. > > > > > > On Fri, Mar 27, 2026 at 5:36=E2=80=AFAM PG Bug reporting form > > > wrote: > > > > > > > > The following bug has been logged on the website: > > > > > > > > Bug reference: 19439 > > > > Logged by: klemen kobau > > > > Email address: klemen.kobau@gmail.com > > > > PostgreSQL version: 18.0 > > > > Operating system: Linux (EndeavorOS) > > > > Description: > > > > > > > > I am running postgres:18.0 in a docker container, the configuration= is as > > > > follows: > > > > > > > > postgres: > > > > image: postgres:18.0 > > > > command: [ > > > > "postgres", > > > > "-N", "200", > > > > "-c", "max_prepared_transactions=3D100", > > > > "-c", "wal_level=3Dlogical", > > > > "-c", "max_wal_senders=3D10", > > > > "-c", "max_replication_slots=3D20", > > > > "-c", "wal_keep_size=3D10", > > > > "-c", "max_slot_wal_keep_size=3D1024" > > > > ] > > > > environment: > > > > POSTGRES_USER: postgres > > > > POSTGRES_PASSWORD: postgres > > > > POSTGRES_DB: postgres > > > > TZ: UTC > > > > PGTZ: UTC > > > > ports: > > > > - 5432:5432 > > > > volumes: > > > > - postgres_data:/var/lib/postgresql > > > > > > > > I use psql version 18.3. > > > > > > > > I run the following: > > > > > > > > psql -h localhost -p 5432 -U postgres -d postgres -c " > > > > -- Transaction 1: insert 1 row, check stats, commit > > > > BEGIN; > > > > CREATE TABLE IF NOT EXISTS temp.xact_test (id serial PRIMARY KEY, v= al text); > > > > INSERT INTO temp.xact_test (val) VALUES ('a'); > > > > SELECT relname, n_tup_ins FROM pg_stat_xact_user_tables WHERE relna= me =3D > > > > 'xact_test'; > > > > COMMIT; > > > > > > > > -- Transaction 2: insert 1 row, check stats > > > > BEGIN; > > > > INSERT INTO temp.xact_test (val) VALUES ('b'); > > > > SELECT relname, n_tup_ins FROM pg_stat_xact_user_tables WHERE relna= me =3D > > > > 'xact_test'; > > > > ROLLBACK; > > > > > > > > -- Cleanup > > > > DROP TABLE temp.xact_test; > > > > " > > > > > > > > And the output is > > > > > > > > BEGIN > > > > CREATE TABLE > > > > INSERT 0 1 > > > > relname | n_tup_ins > > > > -----------+----------- > > > > xact_test | 1 > > > > (1 row) > > > > > > > > COMMIT > > > > BEGIN > > > > INSERT 0 1 > > > > relname | n_tup_ins > > > > -----------+----------- > > > > xact_test | 2 > > > > (1 row) > > > > > > > > ROLLBACK > > > > DROP TABLE > > > > > > I can also reproduce this behavior on HEAD. > > > > > > > This is not what I would expect from reading > > > > https://www.postgresql.org/docs/current/monitoring-stats.html#MONIT= ORING-STATS-VIEWS, > > > > where it states > > > > > > > > > A transaction can also see its own statistics (not yet flushed ou= t to the > > > > shared memory statistics) in the views pg_stat_xact_all_tables, > > > > pg_stat_xact_sys_tables, pg_stat_xact_user_tables, and > > > > pg_stat_xact_user_functions. These numbers do not act as stated abo= ve; > > > > instead they update continuously throughout the transaction. > > > > > > > > based on this, I would expect that the numbers are updated each tim= e an > > > > insert happens and that they are isolated per transaction. > > > > > > > > > > This snippet of the doc feels somewhat ambiguous. The current behavio= r > > > does not seem fully consistent with wording such as =E2=80=9Cthrougho= ut the > > > transaction.=E2=80=9D It also seems more appropriate for these table = views to > > > reflect stats within their own scopes, rather than cumulative values > > > spanning txn boundaries. > > > > > > > I=E2=80=99ve looked into this issue and 'd like to propose a patch to a= ddress > > it. Feedback is very welcome. > > > > --- Root cause > > > > Since the stats subsystem was rewritten (commit 5891c7a8), each > > backend keeps a hash of pending stats entries that persist across > > transaction boundaries. Entries that flush successfully are deleted > > from the backend-local pending list; entries not flushed remain > > pending with their accumulated counters. Flushing is driven by > > pgstat_report_stat(), called from the ReadyForQuery path, and subject > > to a rate limiter. > > > > The pg_stat_xact_* views read these pending entries directly via > > find_tabstat_entry() / find_funcstat_entry(). Both functions return > > the raw accumulated counters without per-transaction scoping. > > > > The bug is deterministic when multiple top-level transactions are > > processed within a single simple-query message, because there is no > > ReadyForQuery boundary between the transactions and therefore no > > opportunity to flush and remove the pending entry. > > > > --- Fix > > > > The patch introduces a per-entry "transaction baseline" =E2=80=94 a laz= y > > snapshot of the counters taken the first time an entry is touched in > > each new top-level transaction. The accessor functions > > (find_tabstat_entry, find_funcstat_entry) then subtract the baseline > > from the current counters, yielding only the current transaction's > > delta. > > > > The baseline is keyed by MyProc->vxid.lxid. A static inline helper, > > pgstat_ensure_xact_baseline(), is called at every nontransactional > > counter-increment site (the 7 event-counter macros in pgstat.h and the > > 4 non-inline counter functions in pgstat_relation.c). After the first > > call per entry per transaction, the check reduces to a single integer > > comparison with a predictably not-taken branch. > > > > For function stats, a new PgStat_FunctionPending wrapper struct embeds > > PgStat_FunctionCounts at offset 0 with the baseline fields appended, > > so the flush callback requires only a trivial cast change. > > > > --- Testing > > > > The regression test is a TAP test under src/bin/psql/t/ that uses psql > > -c to send multi-statement strings as single simple-query messages. > > src/bin/psql/t look like the right existing harness for the primary > > regression because psql -c sends the whole multi-statement string as > > one simple-query message via simple_action_list dispatch. By contrast, > > ordinary pg_regress SQL files are executed by psql in file/stdin mode, > > which runs through MainLoop() and dispatches top-level statements one > > at a time via SendQuery(), creating ReadyForQuery boundaries that > > could mask the bug. > > > > The test covers three scenarios: table n_tup_ins and seq_scan > > counters, and function calls =E2=80=94 each verifying isolation across > > consecutive top-level transactions within a single message. > > > > postgres % cat output.txt > BEGIN > CREATE TABLE > INSERT 0 1 > relname | n_tup_ins > -----------+----------- > xact_test | 1 > (1 row) > > COMMIT > BEGIN > INSERT 0 1 > relname | n_tup_ins > -----------+----------- > xact_test | 2 > (1 row) > > ROLLBACK > DROP TABLE > > I can also reproduce this behavior in v13. So this issue pre-existed > the major refactor 5891c7a8. > After further thought of v1, I'd like to also propose an alternative approach. The root cause and testing rationale are the same as described upthread; what changes is how the baseline is established. --- Problems with the lazy (v1) approach The v1 patch snapshots the baseline lazily -- on every nontransactional counter increment, it checks whether baseline_lxid matches the current transaction and snapshots if not. This has two drawbacks: 1) Hot-path overhead Every pgstat_count_heap_scan(), pgstat_count_buffer_read_block(), etc. acquires a branch. After the first call per entry per transaction, the branch is predictably not-taken, but it could still present on some of the most frequently executed paths in the backend. 2) Maintenance burden Every new counter added to PgStat_TableCounts requires a corresponding baseline snapshot at its increment site. Miss one, and that counter silently leaks across transactions --- eager baseline sweep The attached patch records the baseline eagerly at transaction boundaries instead of lazily at counter-increment sites. pgstat_set_pending_baselines() iterates the pgStatPending list and snapshots each entry's current counts into an xact_baseline field via struct assignment. It is called from AtEOXact_PgStat() (after folding transactional counts and removing dropped entries) and from PostPrepare_PgStat() (after relation cleanup), covering commit, abort, and PREPARE TRANSACTION. The view accessors unconditionally subtract the baseline. For entries created in the current transaction, xact_baseline is zero-initialized, so the subtraction is a no-op. I don=E2=80=99t have a clear preference between the two approaches; both ar= e presented for review. -- Best, Xuneng --000000000000daa566064e353fc1 Content-Type: application/octet-stream; name="v1-0001-Fix-pg_stat_xact_-views-leaking-stats-across-tran.patch" Content-Disposition: attachment; filename="v1-0001-Fix-pg_stat_xact_-views-leaking-stats-across-tran.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnclu85g0 RnJvbSA5ZjBlZWM3MzFhNzVmNTJiZDhmM2U0MjNjMWFlMjJkZWE2OWIwYTVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbHRlcmVnbzY1NSA8ODI0NjYyNTI2QHFxLmNvbT4KRGF0ZTog TW9uLCAzMCBNYXIgMjAyNiAxMDo0Nzo1MyArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjFdIEZpeCBw Z19zdGF0X3hhY3RfKiB2aWV3cyBsZWFraW5nIHN0YXRzIGFjcm9zcyB0cmFuc2FjdGlvbgogYm91 bmRhcmllcwoKQ3VycmVudGx5LCBwZ1N0YXRQZW5kaW5nIGVudHJpZXMgcGVyc2lzdCBhY3Jvc3Mg dHJhbnNhY3Rpb24gYm91bmRhcmllcwp3aXRoaW4gYSBiYWNrZW5kLiAgVGhlIHBnX3N0YXRfeGFj dF8qIHZpZXcgYWNjZXNzb3JzIChmaW5kX3RhYnN0YXRfZW50cnksCmZpbmRfZnVuY3N0YXRfZW50 cnkpIHJldHVybiByYXcgYWNjdW11bGF0ZWQgY291bnRlcnMgZnJvbSB0aGVzZSBlbnRyaWVzLApz byB0aGV5IGluY29ycmVjdGx5IHJlcG9ydCBhY3Rpdml0eSBmcm9tIHByaW9yIHRyYW5zYWN0aW9u cyByYXRoZXIgdGhhbgpvbmx5IHRoZSBjdXJyZW50IG9uZS4KCkZpeCB0aGlzIGJ5IHJlY29yZGlu ZyBhIGJhc2VsaW5lIHNuYXBzaG90IG9mIGVhY2ggcGVuZGluZyBlbnRyeSdzCmNvdW50ZXJzIGF0 IGV2ZXJ5IHRvcC1sZXZlbCB0cmFuc2FjdGlvbiBib3VuZGFyeS4gIEEgbmV3IGZ1bmN0aW9uLApw Z3N0YXRfc2V0X3BlbmRpbmdfYmFzZWxpbmVzKCksIHN3ZWVwcyB0aGUgcGdTdGF0UGVuZGluZyBs aXN0IGF0CmNvbW1pdCwgYWJvcnQsIGFuZCBQUkVQQVJFIFRSQU5TQUNUSU9OLCBjb3B5aW5nIGVh Y2ggZW50cnkncyBjdXJyZW50CmNvdW50cyBpbnRvIGFuIHhhY3RfYmFzZWxpbmUgZmllbGQuICBU aGUgdmlldyBhY2Nlc3NvcnMgdGhlbiBzdWJ0cmFjdAp0aGUgYmFzZWxpbmUsIHlpZWxkaW5nIG9u bHkgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24ncyBkZWx0YS4KCkZvciBlbnRyaWVzIGZpcnN0IGNy ZWF0ZWQgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHhhY3RfYmFzZWxpbmUgaXMKemVyby1p bml0aWFsaXplZCwgc28gdGhlIHN1YnRyYWN0aW9uIGlzIGEgbm8tb3AuCgpGb3IgZnVuY3Rpb24g c3RhdHMsIGludHJvZHVjZSBhIFBnU3RhdF9GdW5jdGlvblBlbmRpbmcgd3JhcHBlciBzdHJ1Y3QK dGhhdCBwYWlycyB0aGUgZXhpc3RpbmcgUGdTdGF0X0Z1bmN0aW9uQ291bnRzIHdpdGggYSBiYXNl bGluZSBjb3B5LgpmaW5kX2Z1bmNzdGF0X2VudHJ5KCkgbm93IHJldHVybnMgYSBwYWxsb2MnZCBk ZWx0YSwgb3IgTlVMTCB3aGVuIHRoZQpmdW5jdGlvbiB3YXMgbm90IGNhbGxlZCBpbiB0aGUgY3Vy cmVudCB0cmFuc2FjdGlvbi4KCkFkZCBhIFRBUCB0ZXN0IHVuZGVyIHNyYy9iaW4vcHNxbC90LyB0 aGF0IHZlcmlmaWVzIGNvdW50ZXIgaXNvbGF0aW9uCmFjcm9zcyBjb25zZWN1dGl2ZSB0cmFuc2Fj dGlvbnMgd2l0aGluIGEgc2luZ2xlIHNpbXBsZS1xdWVyeSBtZXNzYWdlLgotLS0KIHNyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jICAgICAgICAgIHwgIDQzICsrKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9mdW5jdGlvbi5jIHwgIDQyICsrKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9yZWxhdGlvbi5jIHwgIDIxICsrCiBzcmMvYmFja2Vu ZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfeGFjdC5jICAgICB8ICAxNSArKwogc3JjL2Jpbi9wc3Fs L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wc3FsL3Qv MDQwX3Bnc3RhdF94YWN0LnBsICAgICAgICAgICAgfCAyMDMgKysrKysrKysrKysrKysrKysrKwog c3JjL2luY2x1ZGUvcGdzdGF0LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKysKIHNy Yy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oICAgICAgICAgIHwgICAxICsKIDggZmls ZXMgY2hhbmdlZCwgMzMyIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9iaW4vcHNxbC90LzA0MF9wZ3N0YXRfeGFjdC5wbAoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvcGdzdGF0LmMKaW5kZXggZWI4Y2NiYWE2MjguLjBkMTRlNzUzYmVhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYwpAQCAtMzI2LDcgKzMyNiw3IEBAIHN0YXRpYyBjb25z dCBQZ1N0YXRfS2luZEluZm8gcGdzdGF0X2tpbmRfYnVpbHRpbl9pbmZvc1tQR1NUQVRfS0lORF9C VUlMVElOX1NJWkVdCiAJCS5zaGFyZWRfc2l6ZSA9IHNpemVvZihQZ1N0YXRTaGFyZWRfRnVuY3Rp b24pLAogCQkuc2hhcmVkX2RhdGFfb2ZmID0gb2Zmc2V0b2YoUGdTdGF0U2hhcmVkX0Z1bmN0aW9u LCBzdGF0cyksCiAJCS5zaGFyZWRfZGF0YV9sZW4gPSBzaXplb2YoKChQZ1N0YXRTaGFyZWRfRnVu Y3Rpb24gKikgMCktPnN0YXRzKSwKLQkJLnBlbmRpbmdfc2l6ZSA9IHNpemVvZihQZ1N0YXRfRnVu Y3Rpb25Db3VudHMpLAorCQkucGVuZGluZ19zaXplID0gc2l6ZW9mKFBnU3RhdF9GdW5jdGlvblBl bmRpbmcpLAogCiAJCS5mbHVzaF9wZW5kaW5nX2NiID0gcGdzdGF0X2Z1bmN0aW9uX2ZsdXNoX2Ni LAogCQkucmVzZXRfdGltZXN0YW1wX2NiID0gcGdzdGF0X2Z1bmN0aW9uX3Jlc2V0X3RpbWVzdGFt cF9jYiwKQEAgLTEzNjEsNiArMTM2MSw0NyBAQCBwZ3N0YXRfZGVsZXRlX3BlbmRpbmdfZW50cnko UGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYpCiAJZGxpc3RfZGVsZXRlKCZlbnRyeV9yZWYtPnBl bmRpbmdfbm9kZSk7CiB9CiAKKy8qCisgKiBTZXQgeGFjdCBiYXNlbGluZXMgZm9yIGFsbCBwZW5k aW5nIHJlbGF0aW9uIGFuZCBmdW5jdGlvbiBlbnRyaWVzLgorICoKKyAqIENhbGxlZCBhdCB0b3At bGV2ZWwgdHJhbnNhY3Rpb24gY29tbWl0LCBhYm9ydCwgYW5kIHN1Y2Nlc3NmdWwgUFJFUEFSRQor ICogdG8gcmVjb3JkIHRoZSBjdXJyZW50IGNvdW50ZXIgc3RhdGUgYXMgdGhlIGJhc2VsaW5lLiAg VGhlIG5leHQKKyAqIHRyYW5zYWN0aW9uIG9uIHRoaXMgYmFja2VuZCB3aWxsIGNvbXB1dGUgeGFj dC1zY29wZWQgZGVsdGFzIGJ5CisgKiBzdWJ0cmFjdGluZyB0aGlzIGJhc2VsaW5lLgorICoKKyAq IFRoaXMgc3dlZXBzIGFsbCB1bmZsdXNoZWQgcGVuZGluZyBlbnRyaWVzLCBub3QganVzdCB0aG9z ZSB0b3VjaGVkIGluCisgKiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgYmVjYXVzZSBub250cmFu c2FjdGlvbmFsIGNvdW50ZXJzIChzY2FucywKKyAqIGJ1ZmZlciBoaXRzLCBldGMuKSBhY2N1bXVs YXRlIGluIHRoZSBwZW5kaW5nIGVudHJ5IHJlZ2FyZGxlc3Mgb2YKKyAqIHdoZXRoZXIgYSBQZ1N0 YXRfVGFibGVYYWN0U3RhdHVzIHdhcyBjcmVhdGVkLgorICovCit2b2lkCitwZ3N0YXRfc2V0X3Bl bmRpbmdfYmFzZWxpbmVzKHZvaWQpCit7CisJZGxpc3RfaXRlcglpdGVyOworCisJZGxpc3RfZm9y ZWFjaChpdGVyLCAmcGdTdGF0UGVuZGluZykKKwl7CisJCVBnU3RhdF9FbnRyeVJlZiAqZW50cnlf cmVmID0KKwkJCWRsaXN0X2NvbnRhaW5lcihQZ1N0YXRfRW50cnlSZWYsIHBlbmRpbmdfbm9kZSwg aXRlci5jdXIpOworCQlQZ1N0YXRfS2luZCBraW5kID0gZW50cnlfcmVmLT5zaGFyZWRfZW50cnkt PmtleS5raW5kOworCisJCWlmIChraW5kID09IFBHU1RBVF9LSU5EX1JFTEFUSU9OKQorCQl7CisJ CQlQZ1N0YXRfVGFibGVTdGF0dXMgKnRhYnN0YXQgPQorCQkJCShQZ1N0YXRfVGFibGVTdGF0dXMg KikgZW50cnlfcmVmLT5wZW5kaW5nOworCisJCQl0YWJzdGF0LT54YWN0X2Jhc2VsaW5lID0gdGFi c3RhdC0+Y291bnRzOworCQl9CisJCWVsc2UgaWYgKGtpbmQgPT0gUEdTVEFUX0tJTkRfRlVOQ1RJ T04pCisJCXsKKwkJCVBnU3RhdF9GdW5jdGlvblBlbmRpbmcgKmZwZW5kaW5nID0KKwkJCQkoUGdT dGF0X0Z1bmN0aW9uUGVuZGluZyAqKSBlbnRyeV9yZWYtPnBlbmRpbmc7CisKKwkJCWZwZW5kaW5n LT54YWN0X2Jhc2VsaW5lID0gZnBlbmRpbmctPmNvdW50czsKKwkJfQorCX0KK30KKwogLyoKICAq IEZsdXNoIG91dCBwZW5kaW5nIHZhcmlhYmxlLW51bWJlcmVkIHN0YXRzLgogICovCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfZnVuY3Rpb24uYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9mdW5jdGlvbi5jCmluZGV4IGU2Yjg0MjgzYzZj Li43MDRjZDFkODI0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdz dGF0X2Z1bmN0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2Z1 bmN0aW9uLmMKQEAgLTExOSw3ICsxMTksNyBAQCBwZ3N0YXRfaW5pdF9mdW5jdGlvbl91c2FnZShG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJfQogCX0KIAotCXBlbmRpbmcgPSBlbnRyeV9yZWYt PnBlbmRpbmc7CisJcGVuZGluZyA9ICYoKFBnU3RhdF9GdW5jdGlvblBlbmRpbmcgKikgZW50cnlf cmVmLT5wZW5kaW5nKS0+Y291bnRzOwogCiAJZmN1LT5mcyA9IHBlbmRpbmc7CiAKQEAgLTE5Miwx MCArMTkyLDEyIEBAIHBnc3RhdF9lbmRfZnVuY3Rpb25fdXNhZ2UoUGdTdGF0X0Z1bmN0aW9uQ2Fs bFVzYWdlICpmY3UsIGJvb2wgZmluYWxpemUpCiBib29sCiBwZ3N0YXRfZnVuY3Rpb25fZmx1c2hf Y2IoUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYsIGJvb2wgbm93YWl0KQogeworCVBnU3RhdF9G dW5jdGlvblBlbmRpbmcgKmZwZW5kaW5nOwogCVBnU3RhdF9GdW5jdGlvbkNvdW50cyAqbG9jYWxl bnQ7CiAJUGdTdGF0U2hhcmVkX0Z1bmN0aW9uICpzaGZ1bmNlbnQ7CiAKLQlsb2NhbGVudCA9IChQ Z1N0YXRfRnVuY3Rpb25Db3VudHMgKikgZW50cnlfcmVmLT5wZW5kaW5nOworCWZwZW5kaW5nID0g KFBnU3RhdF9GdW5jdGlvblBlbmRpbmcgKikgZW50cnlfcmVmLT5wZW5kaW5nOworCWxvY2FsZW50 ID0gJmZwZW5kaW5nLT5jb3VudHM7CiAJc2hmdW5jZW50ID0gKFBnU3RhdFNoYXJlZF9GdW5jdGlv biAqKSBlbnRyeV9yZWYtPnNoYXJlZF9zdGF0czsKIAogCS8qIGxvY2FsZW50IGFsd2F5cyBoYXMg bm9uLXplcm8gY29udGVudCAqLwpAQCAtMjIzLDE4ICsyMjUsNDAgQEAgcGdzdGF0X2Z1bmN0aW9u X3Jlc2V0X3RpbWVzdGFtcF9jYihQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIsIFRpbWVzdGFt cFR6IHRzKQogLyoKICAqIGZpbmQgYW55IGV4aXN0aW5nIFBnU3RhdF9GdW5jdGlvbkNvdW50cyBl bnRyeSBmb3Igc3BlY2lmaWVkIGZ1bmN0aW9uCiAgKgotICogSWYgbm8gZW50cnksIHJldHVybiBO VUxMLCBkb24ndCBjcmVhdGUgYSBuZXcgb25lCisgKiBSZXR1cm5zIGEgcGFsbG9jJ2QgZGVsdGEg c3RydWN0IHNob3dpbmcgb25seSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbidzCisgKiBjb250cmli dXRpb24sIG9yIE5VTEwgaWYgdGhlIGZ1bmN0aW9uIHdhcyBub3QgY2FsbGVkIGluIHRoaXMgdHJh bnNhY3Rpb24uCiAgKi8KIFBnU3RhdF9GdW5jdGlvbkNvdW50cyAqCiBmaW5kX2Z1bmNzdGF0X2Vu dHJ5KE9pZCBmdW5jX2lkKQogewogCVBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmOwotCi0JZW50 cnlfcmVmID0gcGdzdGF0X2ZldGNoX3BlbmRpbmdfZW50cnkoUEdTVEFUX0tJTkRfRlVOQ1RJT04s IE15RGF0YWJhc2VJZCwgZnVuY19pZCk7Ci0KLQlpZiAoZW50cnlfcmVmKQotCQlyZXR1cm4gZW50 cnlfcmVmLT5wZW5kaW5nOwotCXJldHVybiBOVUxMOworCVBnU3RhdF9GdW5jdGlvblBlbmRpbmcg KmZwZW5kaW5nOworCVBnU3RhdF9GdW5jdGlvbkNvdW50cyAqcmVzdWx0OworCVBnU3RhdF9Db3Vu dGVyIGRlbHRhX2NhbGxzOworCisJZW50cnlfcmVmID0gcGdzdGF0X2ZldGNoX3BlbmRpbmdfZW50 cnkoUEdTVEFUX0tJTkRfRlVOQ1RJT04sCisJCQkJCQkJCQkJICAgTXlEYXRhYmFzZUlkLCBmdW5j X2lkKTsKKwlpZiAoIWVudHJ5X3JlZikKKwkJcmV0dXJuIE5VTEw7CisKKwlmcGVuZGluZyA9IChQ Z1N0YXRfRnVuY3Rpb25QZW5kaW5nICopIGVudHJ5X3JlZi0+cGVuZGluZzsKKworCS8qIENvbXB1 dGUgZGVsdGE7IHJldHVybiBOVUxMIGlmIG5vdCBjYWxsZWQgaW4gdGhpcyB0cmFuc2FjdGlvbiAq LworCWRlbHRhX2NhbGxzID0gZnBlbmRpbmctPmNvdW50cy5udW1jYWxscyAtIGZwZW5kaW5nLT54 YWN0X2Jhc2VsaW5lLm51bWNhbGxzOworCWlmIChkZWx0YV9jYWxscyA9PSAwKQorCQlyZXR1cm4g TlVMTDsKKworCXJlc3VsdCA9IHBhbGxvYyhzaXplb2YoUGdTdGF0X0Z1bmN0aW9uQ291bnRzKSk7 CisJcmVzdWx0LT5udW1jYWxscyA9IGRlbHRhX2NhbGxzOworCUlOU1RSX1RJTUVfU0VUX1pFUk8o cmVzdWx0LT50b3RhbF90aW1lKTsKKwlJTlNUUl9USU1FX0FDQ1VNX0RJRkYocmVzdWx0LT50b3Rh bF90aW1lLAorCQkJCQkJICBmcGVuZGluZy0+Y291bnRzLnRvdGFsX3RpbWUsCisJCQkJCQkgIGZw ZW5kaW5nLT54YWN0X2Jhc2VsaW5lLnRvdGFsX3RpbWUpOworCUlOU1RSX1RJTUVfU0VUX1pFUk8o cmVzdWx0LT5zZWxmX3RpbWUpOworCUlOU1RSX1RJTUVfQUNDVU1fRElGRihyZXN1bHQtPnNlbGZf dGltZSwKKwkJCQkJCSAgZnBlbmRpbmctPmNvdW50cy5zZWxmX3RpbWUsCisJCQkJCQkgIGZwZW5k aW5nLT54YWN0X2Jhc2VsaW5lLnNlbGZfdGltZSk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9yZWxhdGlvbi5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlbGF0aW9uLmMKaW5kZXggYmM4 YzQzYjk2YWEuLjQ0MTE4NzBiYTVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS9wZ3N0YXRfcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9w Z3N0YXRfcmVsYXRpb24uYwpAQCAtNTAzLDYgKzUwMyw3IEBAIGZpbmRfdGFic3RhdF9lbnRyeShP aWQgcmVsX2lkKQogCVBnU3RhdF9UYWJsZVhhY3RTdGF0dXMgKnRyYW5zOwogCVBnU3RhdF9UYWJs ZVN0YXR1cyAqdGFiZW50cnkgPSBOVUxMOwogCVBnU3RhdF9UYWJsZVN0YXR1cyAqdGFibGVzdGF0 dXMgPSBOVUxMOworCVBnU3RhdF9UYWJsZUNvdW50cyAqdGFiZW50cnlfYmFzZWxpbmU7CiAKIAll bnRyeV9yZWYgPSBwZ3N0YXRfZmV0Y2hfcGVuZGluZ19lbnRyeShQR1NUQVRfS0lORF9SRUxBVElP TiwgTXlEYXRhYmFzZUlkLCByZWxfaWQpOwogCWlmICghZW50cnlfcmVmKQpAQCAtNTIzLDYgKzUy NCwyNiBAQCBmaW5kX3RhYnN0YXRfZW50cnkoT2lkIHJlbF9pZCkKIAkgKi8KIAl0YWJsZXN0YXR1 cy0+dHJhbnMgPSBOVUxMOwogCisJLyoKKwkgKiBTdWJ0cmFjdCB0aGUgeGFjdCBiYXNlbGluZSB0 byBzaG93IG9ubHkgdGhlIGN1cnJlbnQgdG9wLWxldmVsCisJICogdHJhbnNhY3Rpb24ncyBhY3Rp dml0eS4gIFRoZSBiYXNlbGluZSBpcyBzZXQgYXQgdGhlIGVuZCBvZiBlYWNoCisJICogdG9wLWxl dmVsIHRyYW5zYWN0aW9uIChjb21taXQvYWJvcnQvcHJlcGFyZSkgYnkKKwkgKiBwZ3N0YXRfc2V0 X3BlbmRpbmdfYmFzZWxpbmVzKCkuICBGb3IgZW50cmllcyBjcmVhdGVkIGluIHRoZSBjdXJyZW50 CisJICogdHJhbnNhY3Rpb24sIHRoZSBiYXNlbGluZSBpcyB6ZXJvLWluaXRpYWxpemVkLCBzbyBz dWJ0cmFjdGluZyBpdCBpcyBhCisJICogbm8tb3AuCisJICovCisJdGFiZW50cnlfYmFzZWxpbmUg PSAmdGFiZW50cnktPnhhY3RfYmFzZWxpbmU7CisJdGFibGVzdGF0dXMtPmNvdW50cy5udW1zY2Fu cyAtPSB0YWJlbnRyeV9iYXNlbGluZS0+bnVtc2NhbnM7CisJdGFibGVzdGF0dXMtPmNvdW50cy50 dXBsZXNfcmV0dXJuZWQgLT0gdGFiZW50cnlfYmFzZWxpbmUtPnR1cGxlc19yZXR1cm5lZDsKKwl0 YWJsZXN0YXR1cy0+Y291bnRzLnR1cGxlc19mZXRjaGVkIC09IHRhYmVudHJ5X2Jhc2VsaW5lLT50 dXBsZXNfZmV0Y2hlZDsKKwl0YWJsZXN0YXR1cy0+Y291bnRzLnR1cGxlc19pbnNlcnRlZCAtPSB0 YWJlbnRyeV9iYXNlbGluZS0+dHVwbGVzX2luc2VydGVkOworCXRhYmxlc3RhdHVzLT5jb3VudHMu dHVwbGVzX3VwZGF0ZWQgLT0gdGFiZW50cnlfYmFzZWxpbmUtPnR1cGxlc191cGRhdGVkOworCXRh Ymxlc3RhdHVzLT5jb3VudHMudHVwbGVzX2RlbGV0ZWQgLT0gdGFiZW50cnlfYmFzZWxpbmUtPnR1 cGxlc19kZWxldGVkOworCXRhYmxlc3RhdHVzLT5jb3VudHMudHVwbGVzX2hvdF91cGRhdGVkIC09 IHRhYmVudHJ5X2Jhc2VsaW5lLT50dXBsZXNfaG90X3VwZGF0ZWQ7CisJdGFibGVzdGF0dXMtPmNv dW50cy50dXBsZXNfbmV3cGFnZV91cGRhdGVkIC09IHRhYmVudHJ5X2Jhc2VsaW5lLT50dXBsZXNf bmV3cGFnZV91cGRhdGVkOworCXRhYmxlc3RhdHVzLT5jb3VudHMuYmxvY2tzX2ZldGNoZWQgLT0g dGFiZW50cnlfYmFzZWxpbmUtPmJsb2Nrc19mZXRjaGVkOworCXRhYmxlc3RhdHVzLT5jb3VudHMu YmxvY2tzX2hpdCAtPSB0YWJlbnRyeV9iYXNlbGluZS0+YmxvY2tzX2hpdDsKKwogCS8qCiAJICog TGl2ZSBzdWJ0cmFuc2FjdGlvbiBjb3VudHMgYXJlIG5vdCBpbmNsdWRlZCB5ZXQuICBUaGlzIGlz IG5vdCBhIGhvdAogCSAqIGNvZGUgcGF0aCBzbyByZWNvbmNpbGUgdHVwbGVzX2luc2VydGVkLCB0 dXBsZXNfdXBkYXRlZCBhbmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L3Bnc3RhdF94YWN0LmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfeGFjdC5j CmluZGV4IDVlMmQ2OWU2Mjk3Li42YTcwOGJlYjA1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWN0aXZpdHkvcGdzdGF0X3hhY3QuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS9wZ3N0YXRfeGFjdC5jCkBAIC01NSw2ICs1NSwxNCBAQCBBdEVPWGFjdF9QZ1N0YXQoYm9v bCBpc0NvbW1pdCwgYm9vbCBwYXJhbGxlbCkKIAl9CiAJcGdTdGF0WGFjdFN0YWNrID0gTlVMTDsK IAorCS8qCisJICogUmVjb3JkIGN1cnJlbnQgY291bnRlciB2YWx1ZXMgYXMgdGhlIGJhc2VsaW5l IGZvciB0aGUgbmV4dCB0cmFuc2FjdGlvbi4KKwkgKiBNdXN0IGJlIGFmdGVyIEF0RU9YYWN0X1Bn U3RhdF9SZWxhdGlvbnMoKSAod2hpY2ggZm9sZHMgdHJhbnNhY3Rpb25hbAorCSAqIGNvdW50cyBp bnRvIC0+Y291bnRzKSBhbmQgQXRFT1hhY3RfUGdTdGF0X0Ryb3BwZWRTdGF0cygpICh3aGljaCBy ZW1vdmVzCisJICogZHJvcHBlZCBlbnRyaWVzIGZyb20gcGdTdGF0UGVuZGluZykuCisJICovCisJ cGdzdGF0X3NldF9wZW5kaW5nX2Jhc2VsaW5lcygpOworCiAJLyogTWFrZSBzdXJlIGFueSBzdGF0 cyBzbmFwc2hvdCBpcyB0aHJvd24gYXdheSAqLwogCXBnc3RhdF9jbGVhcl9zbmFwc2hvdCgpOwog fQpAQCAtMjI2LDYgKzIzNCwxMyBAQCBQb3N0UHJlcGFyZV9QZ1N0YXQodm9pZCkKIAl9CiAJcGdT dGF0WGFjdFN0YWNrID0gTlVMTDsKIAorCS8qCisJICogUmVjb3JkIGJhc2VsaW5lcywgc2FtZSBh cyBhdCBjb21taXQvYWJvcnQuICBBdEVPWGFjdF9QZ1N0YXQoKSBpcyBub3QKKwkgKiBjYWxsZWQg ZHVyaW5nIFBSRVBBUkUsIHNvIHdpdGhvdXQgdGhpcywgbm9udHJhbnNhY3Rpb25hbCBjb3VudGVy cyBmcm9tCisJICogdGhlIHByZXBhcmVkIHRyYW5zYWN0aW9uIHdvdWxkIGxlYWsgaW50byBsYXRl ciB0cmFuc2FjdGlvbnMuCisJICovCisJcGdzdGF0X3NldF9wZW5kaW5nX2Jhc2VsaW5lcygpOwor CiAJLyogTWFrZSBzdXJlIGFueSBzdGF0cyBzbmFwc2hvdCBpcyB0aHJvd24gYXdheSAqLwogCXBn c3RhdF9jbGVhcl9zbmFwc2hvdCgpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL21lc29u LmJ1aWxkIGIvc3JjL2Jpbi9wc3FsL21lc29uLmJ1aWxkCmluZGV4IDkyMmIyODQ1MjY3Li4yNWZi YjgxN2YxZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9i aW4vcHNxbC9tZXNvbi5idWlsZApAQCAtNzgsNiArNzgsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAn dC8wMTBfdGFiX2NvbXBsZXRpb24ucGwnLAogICAgICAgJ3QvMDIwX2NhbmNlbC5wbCcsCiAgICAg ICAndC8wMzBfcGFnZXIucGwnLAorICAgICAgJ3QvMDQwX3Bnc3RhdF94YWN0LnBsJywKICAgICBd LAogICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3QvMDQwX3Bnc3RhdF94YWN0LnBs IGIvc3JjL2Jpbi9wc3FsL3QvMDQwX3Bnc3RhdF94YWN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5jZmI1Y2VjMzkyNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i aW4vcHNxbC90LzA0MF9wZ3N0YXRfeGFjdC5wbApAQCAtMCwwICsxLDIwMyBAQAorIyBDb3B5cmln aHQgKGMpIDIwMjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwor IyBUZXN0IHRoYXQgcGdfc3RhdF94YWN0Xyogdmlld3MgcmVwb3J0IG9ubHkgY3VycmVudC10cmFu c2FjdGlvbiBhY3Rpdml0eSwKKyMgbm90IGFjY3VtdWxhdGVkIHBlbmRpbmcgc3RhdHMgZnJvbSBw cmlvciB0cmFuc2FjdGlvbnMuCisjCisjIFVzZXMgInBzcWwgLWMiIHNvIGFsbCBzdGF0ZW1lbnRz IGdvIGFzIGEgc2luZ2xlIHNpbXBsZS1xdWVyeSBtZXNzYWdlLAorIyBlbnN1cmluZyBubyBSZWFk eUZvclF1ZXJ5IGJvdW5kYXJ5IChhbmQgbm8gcGdzdGF0X3JlcG9ydF9zdGF0KCkgZmx1c2gpCisj IGJldHdlZW4gY29uc2VjdXRpdmUgdG9wLWxldmVsIHRyYW5zYWN0aW9ucy4KKwordXNlIHN0cmlj dDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisK K215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmltYXJ5Jyk7Cisk bm9kZS0+aW5pdDsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgInRyYWNr X2Z1bmN0aW9ucyA9ICdhbGwnIik7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICJtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gNSIpOworJG5vZGUtPnN0YXJ0OworCitt eSAkZGJuYW1lID0gJ3Bvc3RncmVzJzsKKworIyBDcmVhdGUgdGVzdCBvYmplY3RzLgorJG5vZGUt PnNhZmVfcHNxbCgKKwkkZGJuYW1lLCBxeworICAgIENSRUFURSBUQUJMRSB0ZXN0X3hhY3Rfc3Rh dHMgKHggaW50KTsKKyAgICBDUkVBVEUgRlVOQ1RJT04gdGVzdF94YWN0X3N0YXRzX2Z1bmMoKSBS RVRVUk5TIHZvaWQKKyAgICAgICAgTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJCBCRUdJTiBOVUxMOyBF TkQ7ICQkOworfSk7CisKKyMgU2VuZCBTUUwgdmlhICJwc3FsIC1jIiBzbyBhbGwgc3RhdGVtZW50 cyBhcmUgb25lIHNpbXBsZS1xdWVyeSBtZXNzYWdlLgorc3ViIHBzcWxfY19saWtlCit7CisJbG9j YWwgJFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1aWxkZXI6OkxldmVsICsgMTsKKwor CW15ICgkbm9kZSwgJHNxbCwgJGV4cGVjdGVkX3N0ZG91dCwgJHRlc3RfbmFtZSkgPSBAXzsKKwor CW15ICgkc3Rkb3V0LCAkc3RkZXJyKTsKKwlteSBAY21kID0gKAorCQkkbm9kZS0+aW5zdGFsbGVk X2NvbW1hbmQoJ3BzcWwnKSwKKwkJJy0tbm8tcHNxbHJjJywgJy0tbm8tYWxpZ24nLCAnLS10dXBs ZXMtb25seScsICctLXF1aWV0JywKKwkJJy1kJywgJG5vZGUtPmNvbm5zdHIoJGRibmFtZSksCisJ CSctYycsICRzcWwpOworCW15ICRyZXN1bHQgPSBJUEM6OlJ1bjo6cnVuIFxAY21kLCAnPicsIFwk c3Rkb3V0LCAnMj4nLCBcJHN0ZGVycjsKKworCWlzKCRyZXN1bHQsIDEsICIkdGVzdF9uYW1lOiBl eGl0IGNvZGUgMCIpOworCWlzKCRzdGRlcnIsICcnLCAiJHRlc3RfbmFtZTogbm8gc3RkZXJyIik7 CisJbGlrZSgkc3Rkb3V0LCAkZXhwZWN0ZWRfc3Rkb3V0LCAiJHRlc3RfbmFtZTogbWF0Y2hlcyIp OworCisJcmV0dXJuOworfQorCisjIworIyMgVGVzdCAxOiBUYWJsZSBuX3R1cF9pbnMgbXVzdCBu b3QgbGVhayBhY3Jvc3MgdG9wLWxldmVsIHRyYW5zYWN0aW9ucy4KKyMjCitwc3FsX2NfbGlrZSgK Kwkkbm9kZSwKKwlxe0JFR0lOOworICAgIElOU0VSVCBJTlRPIHRlc3RfeGFjdF9zdGF0cyBWQUxV RVMgKDEpOworICAgIENPTU1JVDsKKyAgICBCRUdJTjsKKyAgICBJTlNFUlQgSU5UTyB0ZXN0X3hh Y3Rfc3RhdHMgVkFMVUVTICgyKTsKKyAgICBTRUxFQ1QgJ25fdHVwX2luczonIHx8IG5fdHVwX2lu cyBGUk9NIHBnX3N0YXRfeGFjdF91c2VyX3RhYmxlcworICAgICAgICBXSEVSRSByZWxuYW1lID0g J3Rlc3RfeGFjdF9zdGF0cyc7CisgICAgQ09NTUlUO30sCisJcXIvXm5fdHVwX2luczoxJC9tLAor CSJ0YWJsZSBuX3R1cF9pbnMgc2hvd3Mgb25seSBjdXJyZW50IHRyYW5zYWN0aW9uJ3MgaW5zZXJ0 cyIpOworCisjIworIyMgVGVzdCAyOiBzZXFfc2NhbiBjb3VudGVyIG11c3Qgbm90IGxlYWsgYWNy b3NzIHRvcC1sZXZlbCB0cmFuc2FjdGlvbnMuCisjIyBVc2VzIGxhYmVsZWQgb3V0cHV0IHRvIGF2 b2lkIGZhbHNlLXBvc2l0aXZlIG1hdGNoZXMgZnJvbSBjb3VudCgqKSByb3dzLgorIyMKK3BzcWxf Y19saWtlKAorCSRub2RlLAorCXF7QkVHSU47CisgICAgU0VMRUNUIGNvdW50KCopIEZST00gdGVz dF94YWN0X3N0YXRzOworICAgIENPTU1JVDsKKyAgICBCRUdJTjsKKyAgICBTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0X3hhY3Rfc3RhdHM7CisgICAgU0VMRUNUICdzZXFfc2NhbjonIHx8IHNlcV9z Y2FuIEZST00gcGdfc3RhdF94YWN0X3VzZXJfdGFibGVzCisgICAgICAgIFdIRVJFIHJlbG5hbWUg PSAndGVzdF94YWN0X3N0YXRzJzsKKyAgICBDT01NSVQ7fSwKKwlxci9ec2VxX3NjYW46MSQvbSwK KwkidGFibGUgc2VxX3NjYW4gc2hvd3Mgb25seSBjdXJyZW50IHRyYW5zYWN0aW9uJ3Mgc2NhbnMi KTsKKworIyMKKyMjIFRlc3QgMzogRnVuY3Rpb24gY2FsbCBzdGF0cyBtdXN0IG5vdCBsZWFrIGFj cm9zcyB0b3AtbGV2ZWwgdHJhbnNhY3Rpb25zLgorIyMKK3BzcWxfY19saWtlKAorCSRub2RlLAor CXF7QkVHSU47CisgICAgU0VMRUNUIHRlc3RfeGFjdF9zdGF0c19mdW5jKCk7CisgICAgU0VMRUNU IHRlc3RfeGFjdF9zdGF0c19mdW5jKCk7CisgICAgQ09NTUlUOworICAgIEJFR0lOOworICAgIFNF TEVDVCB0ZXN0X3hhY3Rfc3RhdHNfZnVuYygpOworICAgIFNFTEVDVCAnY2FsbHM6JyB8fCBjYWxs cyBGUk9NIHBnX3N0YXRfeGFjdF91c2VyX2Z1bmN0aW9ucworICAgICAgICBXSEVSRSBmdW5jbmFt ZSA9ICd0ZXN0X3hhY3Rfc3RhdHNfZnVuYyc7CisgICAgQ09NTUlUO30sCisJcXIvXmNhbGxzOjEk L20sCisJImZ1bmN0aW9uIGNhbGxzIHNob3dzIG9ubHkgY3VycmVudCB0cmFuc2FjdGlvbidzIGNh bGxzIik7CisKKyMjCisjIyBUZXN0IDQ6IHNlcV9zY2FuIG11c3Qgbm90IGxlYWsgYWNyb3NzIGEg UFJFUEFSRSBUUkFOU0FDVElPTiBib3VuZGFyeS4KKyMjCisjIyBDT01NSVQgUFJFUEFSRUQgY2Fu bm90IGFwcGVhciBpbiBhIG11bHRpLXN0YXRlbWVudCBwc3FsIC1jIHN0cmluZy4KKyMjIEluIGEg bXVsdGktc3RhdGVtZW50IHNpbXBsZS1xdWVyeSBtZXNzYWdlLCBleGVjX3NpbXBsZV9xdWVyeSgp IGNhbGxzCisjIyBCZWdpbkltcGxpY2l0VHJhbnNhY3Rpb25CbG9jaygpIGJlZm9yZSBlYWNoIHN0 YXRlbWVudC4gIEFmdGVyIFBSRVBBUkUKKyMjIFRSQU5TQUNUSU9OIGVuZHMgdGhlIGV4cGxpY2l0 IGJsb2NrLCB0aGUgbG9vcCByZS1lbnRlcnMgdGhlIGltcGxpY2l0LQorIyMgYmxvY2sgcGF0aCwg cHV0dGluZyB0aGUgYmFja2VuZCBpbnRvIFRCTE9DS19JTVBMSUNJVF9JTlBST0dSRVNTLgorIyMg UHJldmVudEluVHJhbnNhY3Rpb25CbG9jaygpIHJlamVjdHMgQ09NTUlUIFBSRVBBUkVEIGluIHRo YXQgc3RhdGUuCisjIworIyMgQSBzZXBhcmF0ZSBwc3FsKCkgY2FsbCB3b3JrcyBiZWNhdXNlIGl0 IHNlbmRzIGEgc2luZ2xlLXN0YXRlbWVudAorIyMgc2ltcGxlLXF1ZXJ5IG1lc3NhZ2U6IHVzZV9p bXBsaWNpdF9ibG9jayBpcyBmYWxzZSwgc28gdGhlIGJhY2tlbmQKKyMjIHN0YXlzIGluIFRCTE9D S19TVEFSVEVEIGFuZCBQcmV2ZW50SW5UcmFuc2FjdGlvbkJsb2NrKCkgcGFzc2VzLgorIyMKK3Bz cWxfY19saWtlKAorCSRub2RlLAorCXF7QkVHSU47CisgICAgU0VMRUNUIGNvdW50KCopIEZST00g dGVzdF94YWN0X3N0YXRzOworICAgIFBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcCc7Cisg ICAgQkVHSU47CisgICAgU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF94YWN0X3N0YXRzOworICAg IFNFTEVDVCAnc2VxX3NjYW46JyB8fCBzZXFfc2NhbiBGUk9NIHBnX3N0YXRfeGFjdF91c2VyX3Rh YmxlcworICAgICAgICBXSEVSRSByZWxuYW1lID0gJ3Rlc3RfeGFjdF9zdGF0cyc7CisgICAgQ09N TUlUO30sCisJcXIvXnNlcV9zY2FuOjEkL20sCisJInRhYmxlIHNlcV9zY2FuIGRvZXNuJ3QgbGVh ayBhY3Jvc3MgUFJFUEFSRSBib3VuZGFyeSIpOworCisjIEJlc3QtZWZmb3J0IGNsZWFudXA6IHVz ZSBwc3FsKCkgaW5zdGVhZCBvZiBzYWZlX3BzcWwoKSBzbyB0aGF0IGlmIHRoZQorIyBwcmVjZWRp bmcgdGVzdCBmYWlsZWQgYmVmb3JlIFBSRVBBUkUgVFJBTlNBQ1RJT04sIHRoZSBtaXNzaW5nIHBy ZXBhcmVkCisjIHhhY3QgZG9lcyBub3QgYWJvcnQgdGhlIHJlc3Qgb2YgdGhlIHRlc3QgZmlsZS4K KyRub2RlLT5wc3FsKCRkYm5hbWUsIHF7Q09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXAnO30pOwor CisjIworIyMgVGVzdCA1OiBVbnRvdWNoZWQgcmVsYXRpb24gZW50cnkgbXVzdCBzaG93IHplcm8s IG5vdCBwcmlvci10eG4gY291bnRzLgorIyMKKyMjIElmIGEgcGVuZGluZyBlbnRyeSBleGlzdHMg ZnJvbSBhIHByaW9yIHRyYW5zYWN0aW9uIGJ1dCB0aGUgY3VycmVudAorIyMgdHJhbnNhY3Rpb24g aGFzIG5vdCB0b3VjaGVkIHRoZSByZWxhdGlvbiwgY291bnRzIC0gYmFzZWxpbmUgPSAwLgorIyMK K3BzcWxfY19saWtlKAorCSRub2RlLAorCXF7QkVHSU47CisgICAgU0VMRUNUIGNvdW50KCopIEZS T00gdGVzdF94YWN0X3N0YXRzOworICAgIElOU0VSVCBJTlRPIHRlc3RfeGFjdF9zdGF0cyBWQUxV RVMgKDk5KTsKKyAgICBDT01NSVQ7CisgICAgQkVHSU47CisgICAgU0VMRUNUICdzZXFfc2Nhbjon IHx8IHNlcV9zY2FuIHx8ICcsbl90dXBfaW5zOicgfHwgbl90dXBfaW5zCisgICAgICAgIEZST00g cGdfc3RhdF94YWN0X3VzZXJfdGFibGVzCisgICAgICAgIFdIRVJFIHJlbG5hbWUgPSAndGVzdF94 YWN0X3N0YXRzJzsKKyAgICBDT01NSVQ7fSwKKwlxci9ec2VxX3NjYW46MCxuX3R1cF9pbnM6MCQv bSwKKwkidW50b3VjaGVkIHJlbGF0aW9uIGVudHJ5IHNob3dzIHplcm9lcyBpbiBjdXJyZW50IHRy YW5zYWN0aW9uIik7CisKKyMjCisjIyBUZXN0IDY6IFVudG91Y2hlZCBmdW5jdGlvbiBlbnRyeSBt dXN0IG5vdCBhcHBlYXIgaW4geGFjdCB2aWV3LgorIyMKKyMjIHBnX3N0YXRfeGFjdF91c2VyX2Z1 bmN0aW9ucyBmaWx0ZXJzIHdpdGggSVMgTk9UIE5VTEwgb24gdGhlIGFjY2Vzc29yLgorIyMgV2hl biBkZWx0YV9jYWxscyA9PSAwLCBmaW5kX2Z1bmNzdGF0X2VudHJ5KCkgcmV0dXJucyBOVUxMLCBz byB0aGUKKyMjIGZ1bmN0aW9uIG11c3Qgbm90IGFwcGVhci4KKyMjCitwc3FsX2NfbGlrZSgKKwkk bm9kZSwKKwlxe0JFR0lOOworICAgIFNFTEVDVCB0ZXN0X3hhY3Rfc3RhdHNfZnVuYygpOworICAg IENPTU1JVDsKKyAgICBCRUdJTjsKKyAgICBTRUxFQ1QgJ2ZvdW5kOicgfHwgY291bnQoKikgRlJP TSBwZ19zdGF0X3hhY3RfdXNlcl9mdW5jdGlvbnMKKyAgICAgICAgV0hFUkUgZnVuY25hbWUgPSAn dGVzdF94YWN0X3N0YXRzX2Z1bmMnOworICAgIENPTU1JVDt9LAorCXFyL15mb3VuZDowJC9tLAor CSJ1bmNhbGxlZCBmdW5jdGlvbiBub3QgdmlzaWJsZSBpbiBwZ19zdGF0X3hhY3RfdXNlcl9mdW5j dGlvbnMiKTsKKworIyMKKyMjIFRlc3QgNzogRnVuY3Rpb24gY2FsbCBzdGF0cyBtdXN0IG5vdCBs ZWFrIGFjcm9zcyBQUkVQQVJFIGJvdW5kYXJ5LgorIyMKK3BzcWxfY19saWtlKAorCSRub2RlLAor CXF7QkVHSU47CisgICAgU0VMRUNUIHRlc3RfeGFjdF9zdGF0c19mdW5jKCk7CisgICAgU0VMRUNU IHRlc3RfeGFjdF9zdGF0c19mdW5jKCk7CisgICAgUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9m dW5jX3ByZXAnOworICAgIEJFR0lOOworICAgIFNFTEVDVCB0ZXN0X3hhY3Rfc3RhdHNfZnVuYygp OworICAgIFNFTEVDVCAnY2FsbHM6JyB8fCBjYWxscyBGUk9NIHBnX3N0YXRfeGFjdF91c2VyX2Z1 bmN0aW9ucworICAgICAgICBXSEVSRSBmdW5jbmFtZSA9ICd0ZXN0X3hhY3Rfc3RhdHNfZnVuYyc7 CisgICAgQ09NTUlUO30sCisJcXIvXmNhbGxzOjEkL20sCisJImZ1bmN0aW9uIGNhbGxzIGRvbid0 IGxlYWsgYWNyb3NzIFBSRVBBUkUgYm91bmRhcnkiKTsKKworIyBCZXN0LWVmZm9ydCBjbGVhbnVw IChzZWUgY29tbWVudCBhYm92ZSkuCiskbm9kZS0+cHNxbCgkZGJuYW1lLCBxe0NPTU1JVCBQUkVQ QVJFRCAndGVzdF9mdW5jX3ByZXAnO30pOworCisjIENsZWFudXAKKyRub2RlLT5zYWZlX3BzcWwo CisJJGRibmFtZSwgcXsKKyAgICBEUk9QIFRBQkxFIHRlc3RfeGFjdF9zdGF0czsKKyAgICBEUk9Q IEZVTkNUSU9OIHRlc3RfeGFjdF9zdGF0c19mdW5jKCk7Cit9KTsKKworJG5vZGUtPnN0b3A7Citk b25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oIGIvc3JjL2lu Y2x1ZGUvcGdzdGF0LmgKaW5kZXggOGUzNTQ5YzM3NTIuLjY2MGI2NGU4NzBhIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9wZ3N0YXQuaAorKysgYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaApAQCAtOTAs NiArOTAsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X0Z1bmN0aW9uQ291bnRzCiAJaW5zdHJf dGltZQlzZWxmX3RpbWU7CiB9IFBnU3RhdF9GdW5jdGlvbkNvdW50czsKIAorLyogLS0tLS0tLS0t LQorICogUGdTdGF0X0Z1bmN0aW9uUGVuZGluZwlCYWNrZW5kLWxvY2FsIHBlbmRpbmcgc3RhdGUg Zm9yIGZ1bmN0aW9uIHN0YXRzCisgKgorICogV3JhcHMgdGhlIGFjY3VtdWxhdGVkIGNvdW50cyB3 aXRoIGEgcGVyLXRyYW5zYWN0aW9uIGJhc2VsaW5lIHNvIHRoYXQKKyAqIHBnX3N0YXRfeGFjdF91 c2VyX2Z1bmN0aW9ucyBjYW4gcmVwb3J0IG9ubHkgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24ncwor ICogY29udHJpYnV0aW9uLiAgVGhlIGJhc2VsaW5lIGlzIHNldCBhdCBlYWNoIHRvcC1sZXZlbCB0 cmFuc2FjdGlvbiBib3VuZGFyeQorICogYnkgcGdzdGF0X3NldF9wZW5kaW5nX2Jhc2VsaW5lcygp LgorICogLS0tLS0tLS0tLQorICovCit0eXBlZGVmIHN0cnVjdCBQZ1N0YXRfRnVuY3Rpb25QZW5k aW5nCit7CisJUGdTdGF0X0Z1bmN0aW9uQ291bnRzIGNvdW50czsJLyogYWNjdW11bGF0ZWQgY291 bnRzICovCisJUGdTdGF0X0Z1bmN0aW9uQ291bnRzIHhhY3RfYmFzZWxpbmU7CS8qIHNuYXBzaG90 IGF0IHR4biBib3VuZGFyeSAqLworfQkJCVBnU3RhdF9GdW5jdGlvblBlbmRpbmc7CisKIC8qCiAg KiBXb3JraW5nIHN0YXRlIG5lZWRlZCB0byBhY2N1bXVsYXRlIHBlci1mdW5jdGlvbi1jYWxsIHRp bWluZyBzdGF0aXN0aWNzLgogICovCkBAIC0xODMsNiArMTk4LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg UGdTdGF0X1RhYmxlU3RhdHVzCiAJYm9vbAkJc2hhcmVkOwkJCS8qIGlzIGl0IGEgc2hhcmVkIGNh dGFsb2c/ICovCiAJc3RydWN0IFBnU3RhdF9UYWJsZVhhY3RTdGF0dXMgKnRyYW5zOwkvKiBsb3dl c3Qgc3VieGFjdCdzIGNvdW50cyAqLwogCVBnU3RhdF9UYWJsZUNvdW50cyBjb3VudHM7CS8qIGV2 ZW50IGNvdW50cyB0byBiZSBzZW50ICovCisJUGdTdGF0X1RhYmxlQ291bnRzIHhhY3RfYmFzZWxp bmU7CS8qIHNuYXBzaG90IGF0IHR4biBib3VuZGFyeSAqLwogCVJlbGF0aW9uCXJlbGF0aW9uOwkJ LyogcmVsIHRoYXQgaXMgdXNpbmcgdGhpcyBlbnRyeSAqLwogfSBQZ1N0YXRfVGFibGVTdGF0dXM7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvcGdzdGF0X2ludGVybmFsLmgKaW5kZXggOTc3MDQ0MjFhOTIuLjI5MmQ5 NzU3YzAyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwuaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwuaApAQCAtNjg3LDYgKzY4Nyw3 IEBAIGV4dGVybiBQZ1N0YXRfRW50cnlSZWYgKnBnc3RhdF9wcmVwX3BlbmRpbmdfZW50cnkoUGdT dGF0X0tpbmQga2luZCwgT2lkIGRib2lkLAogCQkJCQkJCQkJCQkJICBib29sICpjcmVhdGVkX2Vu dHJ5KTsKIGV4dGVybiBQZ1N0YXRfRW50cnlSZWYgKnBnc3RhdF9mZXRjaF9wZW5kaW5nX2VudHJ5 KFBnU3RhdF9LaW5kIGtpbmQsCiAJCQkJCQkJCQkJCQkgICBPaWQgZGJvaWQsIHVpbnQ2NCBvYmpp ZCk7CitleHRlcm4gdm9pZCBwZ3N0YXRfc2V0X3BlbmRpbmdfYmFzZWxpbmVzKHZvaWQpOwogCiBl eHRlcm4gdm9pZCAqcGdzdGF0X2ZldGNoX2VudHJ5KFBnU3RhdF9LaW5kIGtpbmQsIE9pZCBkYm9p ZCwgdWludDY0IG9iamlkKTsKIGV4dGVybiB2b2lkIHBnc3RhdF9zbmFwc2hvdF9maXhlZChQZ1N0 YXRfS2luZCBraW5kKTsKLS0gCjIuNTEuMAoK --000000000000daa566064e353fc1--