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 1uwuXE-008eU1-Or for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Sep 2025 03:33:17 +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 1uwuXC-00Bc17-OY for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Sep 2025 03:33:15 +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 1uwuXC-00Bc0q-6X for pgsql-hackers@lists.postgresql.org; Fri, 12 Sep 2025 03:33:14 +0000 Received: from mail-ed1-x52a.google.com ([2a00:1450:4864:20::52a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uwuXA-001xGw-2B for pgsql-hackers@postgresql.org; Fri, 12 Sep 2025 03:33:13 +0000 Received: by mail-ed1-x52a.google.com with SMTP id 4fb4d7f45d1cf-62105d21297so2869888a12.0 for ; Thu, 11 Sep 2025 20:33:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757647991; x=1758252791; 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=+X1ryVul2PcQOmkqs1jt2UxXTcWIqAzrfNvQ81M+PJY=; b=XWlPaFIclaPYnXhIgpzqRNOa81KLYOzlDZb14pWY02ACkthSdfh1xACs8GojbbpG0s z8BXePCeq8riPwMAbT+set6JGMzkuy1qgl7jsLoNyiKr8pPdi2MAcVWYt/w2orMZozHE KrcKU7Bdh2xPYzsuijeMvKzjY/jOMUAHAmsSvGx52r2wCgRZP9zKBFc52/buxrmkBJ91 8hA4BXnzYQHFiuRxMA8AqqOMUAi1rZ+/Zk176kJ8KxfWe4nucDQkUdozCCEQYNbOSeIs j/9XhSfkrUonvAF9UMrt9TPoTfMtzfZXekMCw6MxCmj6Zb16rRs0hYMjtIrBlpyd9Hdr qEEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757647991; x=1758252791; 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=+X1ryVul2PcQOmkqs1jt2UxXTcWIqAzrfNvQ81M+PJY=; b=qMBswdN2JUdotip29a+5xgbXFnDWAU/1cv6Z65J4L/LEBNLQgrV9f6DEks8MlNZqkt ENWhr58Ze2O57aEQpUX9j2KslFAreM8NS+brkfmpsKtE2N4kzLFVqo/XBXOPIClSH0A5 hY9xv4v/x+7s3EklN+dvoCjl62/ZJO0oA0J0ym2XFZxRXy+U48aAen7rFEnDTTCzt8G1 lxcZjHwAqVnutbpxB1GtGMNIErd7VNtVeRK58lyML4C7vfx8j3lU3AgIFB9ufpM5C/Pf dX3diUVM+2G3E/ZwGmf7LxZ8NiVgg8YIPBKHcswQD9ecRDmEzEdFRDqji6zAuN+XUUbE S6zQ== X-Forwarded-Encrypted: i=1; AJvYcCW/JKTSM9KeADCQNYR4rXGZx+EyP/Q0ZNMNMa9x2ZJz8ntS0ES6USaPhc4WEjaLPzCA1+DEh2tp0co/WT++@postgresql.org X-Gm-Message-State: AOJu0Yz4AJcTUCBJMOmtVV/nrLreFq/HIyfKfe9HpEifQHhr1XAAy4Q2 Zgpx0SID/zbJu8GROXbwRG0OlJzO7EukGHHdAR60XdIagshopcRTUHLAmJhe6Lfx2cDW84Q/tG7 /aYNxptBxnY6nbpft43bpOPLiyqJ1bvg= X-Gm-Gg: ASbGnct5zHf/ZSntHKeri5Apr/WefILCfDxQKwpjsWIzXgWbYdrnx+QuP/Bnajemn9A S0gkCDKMQJjlmDSJVm77OfTkNAoBebmVuD0OfBe53oPd3RYyNv2UkS7qnPaG3sV1HrGdrRmFciv pOBogD9Ua+LFlSSWXqDKP94QOCMDCZgdou0tnyVrH4ke3fSfjIwyFhUrU53Ug7zOyksDTN0gO6C aYGPatEWlYSfAZEPe5rUbmbflIiWPA4gY//SWg= X-Google-Smtp-Source: AGHT+IHmhwjzC7MmO/VaiG6bZqjHz86ybsmntmSmf8QFblR/ni5PsHfJKKdtVcpcyFDl8+kp2+JzJmfAIDzWAt/BvEQ= X-Received: by 2002:a17:907:d17:b0:b04:32ff:5d1e with SMTP id a640c23a62f3a-b07c3a8970emr141747466b.60.1757647990722; Thu, 11 Sep 2025 20:33:10 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Naga Appani Date: Thu, 11 Sep 2025 22:32:59 -0500 X-Gm-Features: AS18NWBoUlFh3-tIGLKTuhKGlgV4Ku-Iks6wx_LpYa2Sy_heyac4Uhwk6gG3qUs Message-ID: Subject: Re: [Proposal] Expose internal MultiXact member count function for efficient monitoring To: Ashutosh Bapat Cc: torikoshia , Michael Paquier , Kirill Reshke , pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="00000000000020ca53063e925073" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000020ca53063e925073 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Ashutosh, Thank you for continuing to review the patch. Attached is v8, incorporating the feedback. Please see my responses inline below. On Fri, Sep 5, 2025 at 6:27=E2=80=AFAM Ashutosh Bapat wrote: > > This one is remaining. > + up to approximately 2^32 entries before reaching wraparound. > > ... 2^32 entries (occupying roughly 20GB in the > pg_multixact/members directory) before reaching > wraparound. ... Done. > + See for further > details on multixact wraparound. > > I don't think we need this reference here. Reference back from that > section is enough. I kept the cross-reference for now since other multixact function docs (such as pg_get_multixact_members()) already use this style, and it helps readers who land directly on the function reference page. Please let me know if you would prefer that I remove it. > + * Returns NULL if the oldest referenced offset is unknown, which > happens during > + * system startup or when no MultiXact references exist in any relation. > > If no MultiXact references exist, and GetMultiXactInfo() returns > false, MultiXactMemberFreezeThreshold() will assume the worst, which I > take as meaning that it will trigger aggressive autovacuum. No > MultiXact references existing is a common case which shouldn't be > assumed as the worst case. The comment I quoted means "the oldest > value of the offset referenced by any multi-xact referenced by a > relation *may not be always known". You seem to have interpreted "may > not be known" as "does not exist" That's not right. I would write this > as "Returns NULL if the oldest referenced offset is unknown which > happens during system startup". > > Similarly I would rephrase the following docs as > + > + The function returns NULL when multixact > statistics are unavailable. > + For example, during startup before multixact initialization completes o= r when > + the oldest member offset cannot be determined. > > "The function returns NULL when multixact > statistics when the oldest multixact offset corresponding to a > multixact referenced by a relation is not known after starting the > system." > Updated. > > > > > > @@ -0,0 +1,127 @@ > > > +# High-signal invariants for pg_get_multixact_stats() > > What does "High-signal" mean here? Is that term defined somewhere? > Using terms that most of the contributors are familiar with improves > readability. If a new term is required, it needs to be defined first. > But I doubt something here requires defining a new term. Dropped that wording and simplified the isolation test. > > > What's a driver transaction? > > A driver transaction is simply the controlling session that stays open > > while snapshots are taken. > > I still don't understand the purpose of this transaction. > pg_get_multixact_stats() isn't transactional so the driver transaction > isn't holding any "snapshot" of the stats. It's also not creating any > multixact and hence does not contribute to testing the output of > pg_get_multixact_stats. Whatever this session is doing, can be done > outside a transaction too. Which step in this session requires an > outer transaction? Removed this mention; the test now only checks monotonicity without extra transaction scaffolding. > Some more comments > + Returns statistics about current multixact usage: > + num_mxids is the number of multixact IDs assigned, > > Is this the number of multixact IDs assigned till now (since whatever > time) or the number of multixact IDs currently in the system? > > + num_members is the number of multixact member > entries created, Updated. > + Returns statistics about current multixact usage: > + num_mxids is the number of multixact IDs assigned, > > Is this the number of multixact IDs assigned till now (since whatever > time) or the number of multixact IDs currently in the system? > > + num_members is the number of multixact member > entries created, Updated. > + multixact allocation and usage patterns in real time. For example: > > suggestion: ... real time, for example: ... Otherwise the sentence > started by "For example" is not a complete sentence. Updated. > + values[0] =3D Int32GetDatum(multixacts); > > This should be UInt32GetDatum() multixacts is uint32. > > + values[1] =3D Int64GetDatum(members); > > Similarly this since MultiXactOffset is uint32. > > + values[4] =3D Int64GetDatum(oldestOffset); > > Similarly this since MultiXactOffset is uint32. Thanks for pointing this out. I had originally followed the existing types but drifted, fixed now. > +# Get MultiXact state > +{ > + oid =3D> '9001', > + descr =3D> 'get current multixact member and multixact ID counts and > oldest values', > > suggestion: get current multixact usage statistics. Updated > + proname =3D> 'pg_get_multixact_stats', > + prorettype =3D> 'record', > + proargtypes =3D> '', > + proallargtypes =3D> '{int4,int8,int8,xid,int8}', > + proargmodes =3D> '{o,o,o,o,o}', > + proargnames =3D> > '{num_mxids,num_members,members_size,oldest_multixact,oldest_offset}', > + provolatile =3D> 'v', > + proparallel =3D> 's', > + prosrc =3D> 'pg_get_multixact_stats' > +}, > > I like the way you have formatted the new entry, but other entries in > this file are not formatted this way. It would be good to format it > like other entries but if other reviewers prefer this way, we can go > with this too. I reformatted the pg_proc.dat entry to match the surrounding style. Best regards, Naga --00000000000020ca53063e925073 Content-Type: application/octet-stream; name="v8-0001-Add-pg_get_multixact_stats-function-for-monitorin.patch" Content-Disposition: attachment; filename="v8-0001-Add-pg_get_multixact_stats-function-for-monitorin.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfga6r0r0 RnJvbSA0NzUyZmRkNTg2Zjc4ZGE0Y2E2ODg3OWY1YThkYWZkYmZiYjM2NDQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWdhIEFwcGFuaSA8bmFnbnJpa0BnbWFpbC5jb20+CkRhdGU6 IFRodSwgMTEgU2VwIDIwMjUgMjI6MTg6NTEgKzAwMDAKU3ViamVjdDogW1BBVENIIHY4XSBBZGQg cGdfZ2V0X211bHRpeGFjdF9zdGF0cygpIGZ1bmN0aW9uIGZvciBtb25pdG9yaW5nCiBNdWx0aVhh Y3QgdXNhZ2UKCkV4cG9zZSBtdWx0aXhhY3Qgc3RhdGUgdmlhIGEgbmV3IFNRTC1jYWxsYWJsZSBm dW5jdGlvbiBwZ19nZXRfbXVsdGl4YWN0X3N0YXRzKCksCnJldHVybmluZzoKLSBudW1fbXhpZHMg ICAgICAgICAgOiBudW1iZXIgb2YgTXVsdGlYYWN0IElEcyBpbiB1c2UKLSBudW1fbWVtYmVycyAg ICAgICAgOiBudW1iZXIgb2YgbWVtYmVyIGVudHJpZXMgaW4gdXNlCi0gbWVtYmVyc19zaXplICAg ICAgIDogYnl0ZXMgdXNlZCBieSBudW1fbWVtYmVycyBpbiBwZ19tdWx0aXhhY3QvbWVtYmVycyBk aXJlY3RvcnkKLSBvbGRlc3RfbXVsdGl4YWN0ICAgOiBvbGRlc3QgTXVsdGlYYWN0IElEIHN0aWxs IG5lZWRlZAotIG9sZGVzdF9vZmZzZXQgICAgICA6IG9sZGVzdCBtZW1iZXIgb2Zmc2V0IHN0aWxs IGluIHVzZQoKVGhpcyBwYXRjaCBhZGRzIHBnX2dldF9tdWx0aXhhY3Rfc3RhdHMoKSBmdW5jdGlv bgogICAtIFNRTC1jYWxsYWJsZSBpbnRlcmZhY2UgdG8gR2V0TXVsdGlYYWN0SW5mbygpCiAgIC0g UmV0dXJucyBOVUxMcyBpZiBNdWx0aVhhY3Qgc3lzdGVtIG5vdCBpbml0aWFsaXplZAogICAtIElu Y2x1ZGVzIGlzb2xhdGlvbiB0ZXN0cyBmb3IgbW9uaXRvcmluZyBpbnZhcmlhbnRzCgpEb2N1bWVu dGF0aW9uIHVwZGF0ZXM6Ci0gZnVuYy1pbmZvLnNnbWw6IGFkZCBmdW5jdGlvbiBlbnRyeQotIG1h aW50ZW5hbmNlLnNnbWw6IG1lbnRpb24gbW9uaXRvcmluZyBtdWx0aXhhY3QgdXNhZ2UKCkJ1aWxk IGFuZCBjYXRhbG9nOgotIEFkZCBmdW5jdGlvbiB0byBleGlzdGluZyBtdWx0aXhhY3RmdW5jcy5j Ci0gcGdfcHJvYy5kYXQgZW50cnkKCkF1dGhvcjogTmFnYSBBcHBhbmkgPG5hZ25yaWtAZ21haWwu Y29tPgpSZXZpZXdlZC1ieTogQXNodXRvc2ggQmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9zc0BnbWFp bC5jb20+ClJldmlld2VkLWJ5OiBNaWNoYWVsIFBhcXVpZXIgPG1pY2hhZWxAcGFxdWllci54eXo+ CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxhdC9D QSUyQlFlWSUyQkFBc1lLNld2Qlc0cVl6SHo0YmFoSHljREFZX3E1RUNtSGtFVl9lQjlja3pnJTQw bWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCAgICAg ICAgICAgICAgfCAgMzUgKysrKysrCiBkb2Mvc3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dtbCAgICAg ICAgICAgICAgICAgfCAgNTggKysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGl4 YWN0ZnVuY3MuYyAgICAgICAgfCAgNDcgKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgICAgICAgIHwgIDEwICsrCiAuLi4vaXNvbGF0aW9uL2V4cGVjdGVkL211 bHRpeGFjdF9zdGF0cy5vdXQgICAgfCAgOTIgKysrKysrKysrKysrKysKIHNyYy90ZXN0L2lzb2xh dGlvbi9pc29sYXRpb25fc2NoZWR1bGUgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9pc29sYXRp b24vc3BlY3MvbXVsdGl4YWN0X3N0YXRzLnNwZWMgfCAxMTkgKysrKysrKysrKysrKysrKysrCiA3 IGZpbGVzIGNoYW5nZWQsIDM1NiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9tdWx0aXhhY3Rfc3RhdHMu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL211bHRpeGFj dF9zdGF0cy5zcGVjCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNn bWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAppbmRleCBjMzkzODMyZDk0Yy4u MmQyMWQwZDNhZjUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCkBAIC0yOTc1LDYgKzI5NzUs NDEgQEAgYWNsICAgICAgfCB7cG9zdGdyZXM9YXJ3ZER4dG0vcG9zdGdyZXMsZm9vPXIvcG9zdGdy ZXN9CiAgICAgICAgIG1vZGlmeSBrZXkgY29sdW1ucy4KICAgICAgICA8L3BhcmE+PC9lbnRyeT4K ICAgICAgIDwvcm93PgorCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3Rh YmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRl cm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19nZXRfbXVsdGl4YWN0X3N0YXRzPC9wcmltYXJ5Pgor ICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF9tdWx0aXhhY3Rf c3RhdHM8L2Z1bmN0aW9uPiAoKQorICAgICAgICA8cmV0dXJudmFsdWU+cmVjb3JkPC9yZXR1cm52 YWx1ZT4KKyAgICAgICAgKCA8cGFyYW1ldGVyPm51bV9teGlkczwvcGFyYW1ldGVyPiA8dHlwZT5p bnRlZ2VyPC90eXBlPiwKKyAgICAgICAgICA8cGFyYW1ldGVyPm51bV9tZW1iZXJzPC9wYXJhbWV0 ZXI+IDx0eXBlPmJpZ2ludDwvdHlwZT4sCisgICAgICAgICAgPHBhcmFtZXRlcj5tZW1iZXJzX3Np emU8L3BhcmFtZXRlcj4gPHR5cGU+YmlnaW50PC90eXBlPiwKKyAgICAgICAgICA8cGFyYW1ldGVy Pm9sZGVzdF9tdWx0aXhhY3Q8L3BhcmFtZXRlcj4gPHR5cGU+eGlkPC90eXBlPiwKKyAgICAgICAg ICA8cGFyYW1ldGVyPm9sZGVzdF9vZmZzZXQ8L3BhcmFtZXRlcj4gPHR5cGU+YmlnaW50PC90eXBl PiApCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXR1cm5zIHN0YXRp c3RpY3MgYWJvdXQgY3VycmVudCBtdWx0aXhhY3QgdXNhZ2U6CisgICAgICAgIDxsaXRlcmFsPm51 bV9teGlkczwvbGl0ZXJhbD4gaXMgdGhlIHRvdGFsIG51bWJlciBvZiBtdWx0aXhhY3QgSURzIGFz c2lnbmVkIHNpbmNlIHN0YXJ0dXAsCisgICAgICAgIDxsaXRlcmFsPm51bV9tZW1iZXJzPC9saXRl cmFsPiBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG11bHRpeGFjdCBtZW1iZXIgZW50cmllcyBjcmVh dGVkIHNpbmNlIHN0YXJ0dXAsCisgICAgICAgIDxsaXRlcmFsPm1lbWJlcnNfc2l6ZTwvbGl0ZXJh bD4gaXMgdGhlIHN0b3JhZ2Ugb2NjdXBpZWQgYnkgPGxpdGVyYWw+bnVtX21lbWJlcnM8L2xpdGVy YWw+CisgICAgICAgIGluIHRoZSA8bGl0ZXJhbD5wZ19tdWx0aXhhY3QvbWVtYmVyczwvbGl0ZXJh bD4gZGlyZWN0b3J5LAorICAgICAgICA8bGl0ZXJhbD5vbGRlc3RfbXVsdGl4YWN0PC9saXRlcmFs PiBpcyB0aGUgb2xkZXN0IG11bHRpeGFjdCBJRCBzdGlsbCBpbiB1c2UsIGFuZAorICAgICAgICA8 bGl0ZXJhbD5vbGRlc3Rfb2Zmc2V0PC9saXRlcmFsPiBpcyB0aGUgb2xkZXN0IG1lbWJlciBvZmZz ZXQgc3RpbGwgaW4gdXNlLgorICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0idmFjdXVtLWZvci1t dWx0aXhhY3Qtd3JhcGFyb3VuZCIvPiBmb3IgZnVydGhlciBkZXRhaWxzIG9uIG11bHRpeGFjdCB3 cmFwYXJvdW5kLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZ1 bmN0aW9uIHJlcG9ydHMgc3RhdGlzdGljcyBhdCB0aGUgdGltZSBpdCBpcyBpbnZva2VkLiBWYWx1 ZXMgbWF5IHZhcnkgYmV0d2VlbiBjYWxscywKKyAgICAgICAgZXZlbiB3aXRoaW4gYSBzaW5nbGUg dHJhbnNhY3Rpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXR1 cm5zIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHdoZW4gbXVsdGl4YWN0IHN0YXRpc3RpY3MgYXJl IHVuYXZhaWxhYmxlLAorICAgICAgICBzdWNoIGFzIGR1cmluZyBzdGFydHVwIGJlZm9yZSBtdWx0 aXhhY3QgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzLgorICAgICAgICBTcGVjaWZpY2FsbHksIHRo aXMgb2NjdXJzIHdoZW4gdGhlIG9sZGVzdCBtdWx0aXhhY3Qgb2Zmc2V0CisgICAgICAgIGNvcnJl c3BvbmRpbmcgdG8gYSBtdWx0aXhhY3QgcmVmZXJlbmNlZCBieSBhIHJlbGF0aW9uIGlzIG5vdCBr bm93bi4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgogICAgICA8L3Rib2R5 PgogICAgIDwvdGdyb3VwPgogICAgPC90YWJsZT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9t YWludGVuYW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL21haW50ZW5hbmNlLnNnbWwKaW5kZXggZTdh OWY1OGMwMTUuLjU4YmU2MjExODJiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbWFpbnRlbmFu Y2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dtbApAQCAtODEzLDE0ICs4 MTMsNjAgQEAgSElOVDogIEV4ZWN1dGUgYSBkYXRhYmFzZS13aWRlIFZBQ1VVTSBpbiB0aGF0IGRh dGFiYXNlLgogICAgIDxwYXJhPgogICAgICBBcyBhIHNhZmV0eSBkZXZpY2UsIGFuIGFnZ3Jlc3Np dmUgdmFjdXVtIHNjYW4gd2lsbAogICAgICBvY2N1ciBmb3IgYW55IHRhYmxlIHdob3NlIG11bHRp eGFjdC1hZ2UgaXMgZ3JlYXRlciB0aGFuIDx4cmVmCi0gICAgIGxpbmtlbmQ9Imd1Yy1hdXRvdmFj dXVtLW11bHRpeGFjdC1mcmVlemUtbWF4LWFnZSIvPi4gIEFsc28sIGlmIHRoZQotICAgICBzdG9y YWdlIG9jY3VwaWVkIGJ5IG11bHRpeGFjdHMgbWVtYmVycyBleGNlZWRzIGFib3V0IDEwR0IsIGFn Z3Jlc3NpdmUgdmFjdXVtCi0gICAgIHNjYW5zIHdpbGwgb2NjdXIgbW9yZSBvZnRlbiBmb3IgYWxs IHRhYmxlcywgc3RhcnRpbmcgd2l0aCB0aG9zZSB0aGF0Ci0gICAgIGhhdmUgdGhlIG9sZGVzdCBt dWx0aXhhY3QtYWdlLiAgQm90aCBvZiB0aGVzZSBraW5kcyBvZiBhZ2dyZXNzaXZlCi0gICAgIHNj YW5zIHdpbGwgb2NjdXIgZXZlbiBpZiBhdXRvdmFjdXVtIGlzIG5vbWluYWxseSBkaXNhYmxlZC4g VGhlIG1lbWJlcnMgc3RvcmFnZQotICAgICBhcmVhIGNhbiBncm93IHVwIHRvIGFib3V0IDIwR0Ig YmVmb3JlIHJlYWNoaW5nIHdyYXBhcm91bmQuCisgICAgIGxpbmtlbmQ9Imd1Yy1hdXRvdmFjdXVt LW11bHRpeGFjdC1mcmVlemUtbWF4LWFnZSIvPi4gQWxzbywgaWYgdGhlIG51bWJlcgorICAgICBv ZiBtdWx0aXhhY3QgbWVtYmVyIGVudHJpZXMgY3JlYXRlZCBleGNlZWRzIGFwcHJveGltYXRlbHkg Ml4zMSBlbnRyaWVzCisgICAgIChvY2N1cHlpbmcgcm91Z2hseSAxMEdCIGluIHRoZSA8bGl0ZXJh bD5wZ19tdWx0aXhhY3QvbWVtYmVyczwvbGl0ZXJhbD4gZGlyZWN0b3J5KSwKKyAgICAgYWdncmVz c2l2ZSB2YWN1dW0gc2NhbnMgd2lsbCBvY2N1ciBtb3JlIG9mdGVuIGZvciBhbGwgdGFibGVzLCBz dGFydGluZyB3aXRoIHRob3NlIHRoYXQKKyAgICAgaGF2ZSB0aGUgb2xkZXN0IG11bHRpeGFjdC1h Z2UuIEJvdGggb2YgdGhlc2Uga2luZHMgb2YgYWdncmVzc2l2ZQorICAgICBzY2FucyB3aWxsIG9j Y3VyIGV2ZW4gaWYgYXV0b3ZhY3V1bSBpcyBub21pbmFsbHkgZGlzYWJsZWQuIFRoZSBtZW1iZXJz IGNhbiBncm93CisgICAgIHVwIHRvIGFwcHJveGltYXRlbHkgMl4zMiBlbnRyaWVzKG9jY3VweWlu ZyByb3VnaGx5IDIwR0IgaW4gdGhlCisgICAgIDxsaXRlcmFsPnBnX211bHRpeGFjdC9tZW1iZXJz PC9saXRlcmFsPiBkaXJlY3RvcnkpIGJlZm9yZSByZWFjaGluZyB3cmFwYXJvdW5kLgogICAgIDwv cGFyYT4KIAorICAgIDxwYXJhPgorICAgICBUaGUgPGZ1bmN0aW9uPnBnX2dldF9tdWx0aXhhY3Rf c3RhdHMoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGRlc2NyaWJlZCBpbgorICAgICA8eHJlZiBsaW5r ZW5kPSJmdW5jdGlvbnMtcGctc25hcHNob3QiLz4gcHJvdmlkZXMgYSB3YXkgdG8gbW9uaXRvcgor ICAgICBtdWx0aXhhY3QgYWxsb2NhdGlvbiBhbmQgdXNhZ2UgcGF0dGVybnMgaW4gcmVhbCB0aW1l LCBmb3IgZXhhbXBsZToKKyAgICAgPHByb2dyYW1saXN0aW5nPgorcG9zdGdyZXM9IyBTRUxFQ1Qg KixwZ19zaXplX3ByZXR0eShtZW1iZXJzX3NpemUpIG1lbWJlcnNfc2l6ZV9wcmV0dHkgRlJPTSBw Z19jYXRhbG9nLnBnX2dldF9tdWx0aXhhY3Rfc3RhdHMoKTsKKyBudW1fbXhpZHMgfCBudW1fbWVt YmVycyB8IG1lbWJlcnNfc2l6ZSB8IG9sZGVzdF9tdWx0aXhhY3QgfCBvbGRlc3Rfb2Zmc2V0IHwg bWVtYmVyc19zaXplX3ByZXR0eQorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIDMxMTc0MDI5OSB8ICAyNzg1MjQxMTc2IHwgIDEzOTI2MjA1ODgwIHwgICAgICAgICAg ICAgICAgMiB8ICAgICAgICAgICAgIDMgfCAxMyBHQgorKDEgcm93KQorICAgICA8L3Byb2dyYW1s aXN0aW5nPgorICAgICBUaGlzIG91dHB1dCBzaG93cyBhIHN5c3RlbSB3aXRoIHNpZ25pZmljYW50 IG11bHRpeGFjdCBhY3Rpdml0eTogYWJvdXQgfjMxMiBtaWxsaW9uCisgICAgIG11bHRpeGFjdCBJ RHMgYW5kIH4yLjggYmlsbGlvbiBtZW1iZXIgZW50cmllcyBjb25zdW1pbmcgMTMgR0Igb2Ygc3Rv cmFnZSBzcGFjZS4KKyAgICAgQnkgbGV2ZXJhZ2luZyB0aGlzIGluZm9ybWF0aW9uLCB0aGUgZnVu Y3Rpb24gaGVscHM6CisgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICA8c2ltcGFyYT4KKyAgICAgICAgSWRlbnRpZnkgdW51c3VhbCBtdWx0aXhhY3QgYWN0aXZpdHkg ZnJvbSBjb25jdXJyZW50IHJvdy1sZXZlbCBsb2NrcworICAgICAgICBvciBmb3JlaWduIGtleSBv cGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgYSBzcGlrZSBpbiA8bGl0ZXJhbD5udW1fbXhpZHM8L2xp dGVyYWw+IG1pZ2h0IGluZGljYXRlCisgICAgICAgIG11bHRpcGxlIHNlc3Npb25zIHJ1bm5pbmcg PGxpdGVyYWw+VVBEQVRFPC9saXRlcmFsPiBzdGF0ZW1lbnRzIHdpdGggZm9yZWlnbiBrZXkgY2hl Y2tzLAorICAgICAgICBjb25jdXJyZW50IDxsaXRlcmFsPlNFTEVDVCBGT1IgU0hBUkU8L2xpdGVy YWw+IG9wZXJhdGlvbnMsIG9yIGZyZXF1ZW50IHVzZSBvZiBzYXZlcG9pbnRzCisgICAgICAgIGNh dXNpbmcgbG9jayBjb250ZW50aW9uLgorICAgICAgIDwvc2ltcGFyYT4KKyAgICAgIDwvbGlzdGl0 ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHNpbXBhcmE+CisgICAgICAgIFRyYWNrIG11 bHRpeGFjdCBjbGVhbnVwIGVmZmljaWVuY3kgYnkgbW9uaXRvcmluZyBvbGRlc3RfbXVsdGl4YWN0 LgorICAgICAgICBJZiB0aGlzIHZhbHVlIHJlbWFpbnMgdW5jaGFuZ2VkIHdoaWxlIDxsaXRlcmFs Pm51bV9tZW1iZXJzPC9saXRlcmFsPiBncm93cywgaXQgY291bGQgaW5kaWNhdGUKKyAgICAgICAg dGhhdCBsb25nLXJ1bm5pbmcgdHJhbnNhY3Rpb25zIGFyZSBwcmV2ZW50aW5nIGNsZWFudXAsIG9y IGF1dG92YWN1dW0gaXMKKyAgICAgICAgbm90IGtlZXBpbmcgdXAgd2l0aCB0aGUgd29ya2xvYWQu CisgICAgICAgPC9zaW1wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4K KyAgICAgICA8c2ltcGFyYT4KKyAgICAgICAgRGV0ZWN0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBp bXBhY3RzIGJlZm9yZSB0aGV5IGJlY29tZSBjcml0aWNhbC4KKyAgICAgICAgRm9yIGluc3RhbmNl LCBoaWdoIG11bHRpeGFjdCB1c2FnZSBmcm9tIGZyZXF1ZW50IHJvdy1sZXZlbCBsb2NraW5nIG9y CisgICAgICAgIGZvcmVpZ24ga2V5IG9wZXJhdGlvbnMgY2FuIGxlYWQgdG8gaW5jcmVhc2VkIEkv TyBhbmQgQ1BVIG92ZXJoZWFkIGR1cmluZworICAgICAgICB2YWN1dW0gb3BlcmF0aW9ucy4gTW9u aXRvcmluZyB0aGVzZSBzdGF0cyBoZWxwcyB0dW5lIGF1dG92YWN1dW0gZnJlcXVlbmN5CisgICAg ICAgIGFuZCB0cmFuc2FjdGlvbiBwYXR0ZXJucy4KKyAgICAgICA8L3NpbXBhcmE+CisgICAgICA8 L2xpc3RpdGVtPgorICAgICA8L29yZGVyZWRsaXN0PgorICAgICA8L3BhcmE+CisKICAgICA8cGFy YT4KICAgICAgU2ltaWxhciB0byB0aGUgWElEIGNhc2UsIGlmIGF1dG92YWN1dW0gZmFpbHMgdG8g Y2xlYXIgb2xkIE1YSURzIGZyb20gYSB0YWJsZSwgdGhlCiAgICAgIHN5c3RlbSB3aWxsIGJlZ2lu IHRvIGVtaXQgd2FybmluZyBtZXNzYWdlcyB3aGVuIHRoZSBkYXRhYmFzZSdzIG9sZGVzdCBNWElE cyByZWFjaCBmb3J0eQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L211bHRpeGFj dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGl4YWN0ZnVuY3MuYwppbmRleCBl NzRlYTkzODM0OC4uMzExN2FjYjE5ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9tdWx0aXhhY3RmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXhhY3Rm dW5jcy5jCkBAIC04NSwzICs4NSw1MCBAQCBwZ19nZXRfbXVsdGl4YWN0X21lbWJlcnMoUEdfRlVO Q1RJT05fQVJHUykKIAogCVNSRl9SRVRVUk5fRE9ORShmdW5jY3h0KTsKIH0KKworLyoKKyAqIHBn X2dldF9tdWx0aXhhY3Rfc3RhdHMKKyAqCisgKiBSZXR1cm5zIHN0YXRpc3RpY3MgYWJvdXQgY3Vy cmVudCBtdWx0aXhhY3QgdXNhZ2UuCisgKgorICogUmV0dXJucyBOVUxMIGlmIHRoZSBvbGRlc3Qg cmVmZXJlbmNlZCBvZmZzZXQgaXMgdW5rbm93biwgd2hpY2ggaGFwcGVucyBkdXJpbmcKKyAqIHN5 c3RlbSBzdGFydHVwLgorICovCitEYXR1bQorcGdfZ2V0X211bHRpeGFjdF9zdGF0cyhQR19GVU5D VElPTl9BUkdTKQoreworCVR1cGxlRGVzYwl0dXBkZXNjOworCURhdHVtCQl2YWx1ZXNbNV07CisJ Ym9vbAkJbnVsbHNbNV07CisJTXVsdGlYYWN0T2Zmc2V0CW1lbWJlcnM7CisJTXVsdGlYYWN0SWQJ b2xkZXN0TXVsdGlYYWN0SWQ7CisJdWludDMyCQltdWx0aXhhY3RzOworCU11bHRpWGFjdE9mZnNl dAlvbGRlc3RPZmZzZXQ7CisJaW50NjQJCW1lbWJlcnNCeXRlczsKKworCWlmIChnZXRfY2FsbF9y ZXN1bHRfdHlwZShmY2luZm8sIE5VTEwsICZ0dXBkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAorCQkJCSBlcnJtc2coInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpKSk7 CisKKwlpZiAoR2V0TXVsdGlYYWN0SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMsICZvbGRlc3RN dWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNldCkpCisJeworCQkvKgorCQkgKiBDYWxjdWxhdGUgc3Rv cmFnZSBzcGFjZSBmb3IgbWVtYmVycy4gTWVtYmVycyBhcmUgc3RvcmVkIGluIGdyb3VwcyBvZiA0 LAorCQkgKiB3aXRoIGVhY2ggZ3JvdXAgdGFraW5nIDIwIGJ5dGVzLCByZXN1bHRpbmcgaW4gNSBi eXRlcyBwZXIgbWVtYmVyLgorCQkgKiBOb3RlOiBUaGlzIGlnbm9yZXMgc21hbGwgcGFnZSBvdmVy aGVhZCAoMTIgYnl0ZXMgcGVyIDhLQikKKwkJICovCisJCW1lbWJlcnNCeXRlcyA9IChpbnQ2NCkg bWVtYmVycyAqIDU7CisKKwkJdmFsdWVzWzBdID0gVUludDMyR2V0RGF0dW0obXVsdGl4YWN0cyk7 CisJCXZhbHVlc1sxXSA9IFVJbnQzMkdldERhdHVtKG1lbWJlcnMpOworCQl2YWx1ZXNbMl0gPSBJ bnQ2NEdldERhdHVtKG1lbWJlcnNCeXRlcyk7CisJCXZhbHVlc1szXSA9IFVJbnQzMkdldERhdHVt KG9sZGVzdE11bHRpWGFjdElkKTsKKwkJdmFsdWVzWzRdID0gVUludDMyR2V0RGF0dW0ob2xkZXN0 T2Zmc2V0KTsKKwkJbWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6ZW9mKG51bGxzKSk7CisKKwkJcmV0 dXJuIEhlYXBUdXBsZUdldERhdHVtKGhlYXBfZm9ybV90dXBsZSh0dXBkZXNjLCB2YWx1ZXMsIG51 bGxzKSk7CisJfQorCisJUEdfUkVUVVJOX05VTEwoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CmluZGV4IDAzZTgyZDI4Yzg3Li5lM2JkYjE4N2RhMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CkBAIC0xMjU4OCw0ICsxMjU4OCwxNCBAQAogICBwcm9hcmduYW1lcyA9PiAne3BpZCxpb19pZCxp b19nZW5lcmF0aW9uLHN0YXRlLG9wZXJhdGlvbixvZmYsbGVuZ3RoLHRhcmdldCxoYW5kbGVfZGF0 YV9sZW4scmF3X3Jlc3VsdCxyZXN1bHQsdGFyZ2V0X2Rlc2MsZl9zeW5jLGZfbG9jYWxtZW0sZl9i dWZmZXJlZH0nLAogICBwcm9zcmMgPT4gJ3BnX2dldF9haW9zJyB9LAogCisjIEdldCBtdWx0aXhh Y3QgdXNhZ2UKK3sgb2lkID0+ICc5MDAxJywgZGVzY3IgPT4gJ2dldCBjdXJyZW50IG11bHRpeGFj dCB1c2FnZSBzdGF0aXN0aWNzJywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X211bHRpeGFjdF9zdGF0 cycsCisgIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcGFyYWxsZWwgPT4gJ3MnLCBwcm9yZXR0eXBl ID0+ICdyZWNvcmQnLAorICBwcm9hcmd0eXBlcyA9PiAnJywKKyAgcHJvYWxsYXJndHlwZXMgPT4g J3tpbnQ0LGludDgsaW50OCx4aWQsaW50OH0nLAorICBwcm9hcmdtb2RlcyA9PiAne28sbyxvLG8s b30nLAorICBwcm9hcmduYW1lcyA9PiAne251bV9teGlkcyxudW1fbWVtYmVycyxtZW1iZXJzX3Np emUsb2xkZXN0X211bHRpeGFjdCxvbGRlc3Rfb2Zmc2V0fScsCisgIHByb3NyYyA9PiAncGdfZ2V0 X211bHRpeGFjdF9zdGF0cyd9LAorCiBdCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24v ZXhwZWN0ZWQvbXVsdGl4YWN0X3N0YXRzLm91dCBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3Rl ZC9tdWx0aXhhY3Rfc3RhdHMub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi42OTg0NWYwNThlNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9l eHBlY3RlZC9tdWx0aXhhY3Rfc3RhdHMub3V0CkBAIC0wLDAgKzEsOTIgQEAKK1BhcnNlZCB0ZXN0 IHNwZWMgd2l0aCAyIHNlc3Npb25zCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzbmFwMCBzMV9i ZWdpbiBzMV9sb2NrIHNuYXAxIHMyX2JlZ2luIHMyX2xvY2sgc25hcDIgY2hlY2tfd2hpbGVfcGlu bmVkIHMxX2NvbW1pdCBzMl9jb21taXQKK3N0ZXAgc25hcDA6IAorICBDUkVBVEUgVEVNUCBUQUJM RSBzbmFwMCBBUworICBTRUxFQ1QgbnVtX214aWRzLCBudW1fbWVtYmVycywgb2xkZXN0X211bHRp eGFjdCwgb2xkZXN0X29mZnNldAorICBGUk9NIHBnX2dldF9tdWx0aXhhY3Rfc3RhdHMoKTsKKwor c3RlcCBzMV9iZWdpbjogQkVHSU47CitzdGVwIHMxX2xvY2s6IFNFTEVDVCAxIEZST00gbXhxIFdI RVJFIGlkPTEgRk9SIEtFWSBTSEFSRTsKKz9jb2x1bW4/CistLS0tLS0tLQorICAgICAgIDEKKygx IHJvdykKKworc3RlcCBzbmFwMTogCisgIENSRUFURSBURU1QIFRBQkxFIHNuYXAxIEFTCisgIFNF TEVDVCBudW1fbXhpZHMsIG51bV9tZW1iZXJzLCBvbGRlc3RfbXVsdGl4YWN0LCBvbGRlc3Rfb2Zm c2V0CisgIEZST00gcGdfZ2V0X211bHRpeGFjdF9zdGF0cygpOworCitzdGVwIHMyX2JlZ2luOiBC RUdJTjsKK3N0ZXAgczJfbG9jazogU0VMRUNUIDEgRlJPTSBteHEgV0hFUkUgaWQ9MSBGT1IgS0VZ IFNIQVJFOworP2NvbHVtbj8KKy0tLS0tLS0tCisgICAgICAgMQorKDEgcm93KQorCitzdGVwIHNu YXAyOiAKKyAgQ1JFQVRFIFRFTVAgVEFCTEUgc25hcDIgQVMKKyAgU0VMRUNUIG51bV9teGlkcywg bnVtX21lbWJlcnMsIG9sZGVzdF9tdWx0aXhhY3QsIG9sZGVzdF9vZmZzZXQKKyAgRlJPTSBwZ19n ZXRfbXVsdGl4YWN0X3N0YXRzKCk7CisKK3N0ZXAgY2hlY2tfd2hpbGVfcGlubmVkOiAKKyAgU0VM RUNUIHIuYXNzZXJ0aW9uLCByLm9rCisgIEZST00gc25hcDAgczAKKyAgSk9JTiBzbmFwMSBzMSBP TiBUUlVFCisgIEpPSU4gc25hcDIgczIgT04gVFJVRSwKKyAgTEFURVJBTCB1bm5lc3QoCisgICAg QVJSQVlbCisgICAgICAnaXNfaW5pdF9teGlkcycsCisgICAgICAnaXNfaW5pdF9tZW1iZXJzJywK KyAgICAgICdpc19pbml0X29sZGVzdF9teGlkJywKKyAgICAgICdpc19pbml0X29sZGVzdF9vZmYn LAorICAgICAgJ2lzX29sZGVzdF9teGlkX25vbmRlY18wMScsCisgICAgICAnaXNfb2xkZXN0X214 aWRfbm9uZGVjXzEyJywKKyAgICAgICdpc19vbGRlc3Rfb2ZmX25vbmRlY18wMScsCisgICAgICAn aXNfb2xkZXN0X29mZl9ub25kZWNfMTInLAorICAgICAgJ2lzX21lbWJlcnNfaW5jcmVhc2VkX2dl MScsCisgICAgICAnaXNfbXhpZHNfbm9uZGVjXzAxJywKKyAgICAgICdpc19teGlkc19ub25kZWNf MTInLAorICAgICAgJ2lzX21lbWJlcnNfbm9uZGVjXzAxJywKKyAgICAgICdpc19tZW1iZXJzX25v bmRlY18xMicKKyAgICBdLAorICAgIEFSUkFZWworICAgICAgKHMyLm51bV9teGlkcyAgICAgICAg SVMgTk9UIE5VTEwpLAorICAgICAgKHMyLm51bV9tZW1iZXJzICAgICAgSVMgTk9UIE5VTEwpLAor ICAgICAgKHMyLm9sZGVzdF9tdWx0aXhhY3QgSVMgTk9UIE5VTEwpLAorICAgICAgKHMyLm9sZGVz dF9vZmZzZXQgICAgSVMgTk9UIE5VTEwpLAorCisgICAgICAoczEub2xkZXN0X211bHRpeGFjdDo6 dGV4dDo6YmlnaW50ID49IENPQUxFU0NFKHMwLm9sZGVzdF9tdWx0aXhhY3Q6OnRleHQ6OmJpZ2lu dCwgMCkpLAorICAgICAgKHMyLm9sZGVzdF9tdWx0aXhhY3Q6OnRleHQ6OmJpZ2ludCA+PSBDT0FM RVNDRShzMS5vbGRlc3RfbXVsdGl4YWN0Ojp0ZXh0OjpiaWdpbnQsIDApKSwKKyAgICAgIChzMS5v bGRlc3Rfb2Zmc2V0ICAgID49IENPQUxFU0NFKHMwLm9sZGVzdF9vZmZzZXQsICAgIDApKSwKKyAg ICAgIChzMi5vbGRlc3Rfb2Zmc2V0ICAgID49IENPQUxFU0NFKHMxLm9sZGVzdF9vZmZzZXQsICAg IDApKSwKKworICAgICAgKHMyLm51bV9tZW1iZXJzID49IENPQUxFU0NFKHMxLm51bV9tZW1iZXJz LCAwKSArIDEpLAorCisgICAgICAoczEubnVtX214aWRzICAgPj0gQ09BTEVTQ0UoczAubnVtX214 aWRzLCAgIDApKSwKKyAgICAgIChzMi5udW1fbXhpZHMgICA+PSBDT0FMRVNDRShzMS5udW1fbXhp ZHMsICAgMCkpLAorICAgICAgKHMxLm51bV9tZW1iZXJzID49IENPQUxFU0NFKHMwLm51bV9tZW1i ZXJzLCAwKSksCisgICAgICAoczIubnVtX21lbWJlcnMgPj0gQ09BTEVTQ0UoczEubnVtX21lbWJl cnMsIDApKQorICAgIF0KKyAgKSBBUyByKGFzc2VydGlvbiwgb2spOworCithc3NlcnRpb24gICAg ICAgICAgICAgICB8b2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLQoraXNfaW5pdF9teGlk cyAgICAgICAgICAgfHQgCitpc19pbml0X21lbWJlcnMgICAgICAgICB8dCAKK2lzX2luaXRfb2xk ZXN0X214aWQgICAgIHx0IAoraXNfaW5pdF9vbGRlc3Rfb2ZmICAgICAgfHQgCitpc19vbGRlc3Rf bXhpZF9ub25kZWNfMDF8dCAKK2lzX29sZGVzdF9teGlkX25vbmRlY18xMnx0IAoraXNfb2xkZXN0 X29mZl9ub25kZWNfMDEgfHQgCitpc19vbGRlc3Rfb2ZmX25vbmRlY18xMiB8dCAKK2lzX21lbWJl cnNfaW5jcmVhc2VkX2dlMXx0IAoraXNfbXhpZHNfbm9uZGVjXzAxICAgICAgfHQgCitpc19teGlk c19ub25kZWNfMTIgICAgICB8dCAKK2lzX21lbWJlcnNfbm9uZGVjXzAxICAgIHx0IAoraXNfbWVt YmVyc19ub25kZWNfMTIgICAgfHQgCisoMTMgcm93cykKKworc3RlcCBzMV9jb21taXQ6IENPTU1J VDsKK3N0ZXAgczJfY29tbWl0OiBDT01NSVQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRp b24vaXNvbGF0aW9uX3NjaGVkdWxlIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hl ZHVsZQppbmRleCA1YWZhZTMzZDM3MC4uYmFiOGE4ZWFmMzEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lz b2xhdGlvbl9zY2hlZHVsZQpAQCAtMTIwLDMgKzEyMCw0IEBAIHRlc3Q6IHNlcmlhbGl6YWJsZS1w YXJhbGxlbC0yCiB0ZXN0OiBzZXJpYWxpemFibGUtcGFyYWxsZWwtMwogdGVzdDogbWF0dmlldy13 cml0ZS1za2V3CiB0ZXN0OiBsb2NrLW5vd2FpdAordGVzdDogbXVsdGl4YWN0X3N0YXRzCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvbXVsdGl4YWN0X3N0YXRzLnNwZWMgYi9z cmMvdGVzdC9pc29sYXRpb24vc3BlY3MvbXVsdGl4YWN0X3N0YXRzLnNwZWMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFmNmIwOTEyNDhhCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL211bHRpeGFjdF9zdGF0cy5zcGVjCkBAIC0wLDAg KzEsMTE5IEBACisjIFRlc3QgaW52YXJpYW50cyBmb3IgcGdfZ2V0X211bHRpeGFjdF9zdGF0cygp CisjIFdlIGNyZWF0ZSBleGFjdGx5IG9uZSBmcmVzaCBNdWx0aVhhY3Qgb24gYSBicmFuZC1uZXcg dGFibGUuIFdoaWxlIGl0IGlzIHBpbm5lZAorIyBieSB0d28gb3BlbiB0cmFuc2FjdGlvbnMsIHdl IGFzc2VydCBvbmx5IGludmFyaWFudHMgdGhhdCBiYWNrZ3JvdW5kIFZBQ1VVTS9GUkVFWkUKKyMg Y2Fubm90IHZpb2xhdGU6CisjICAg4oCiIG1lbWJlcnMgaW5jcmVhc2VkIGJ5IOKJpSAxIHdoZW4g dGhlIHNlY29uZCBsb2NrZXIgYXJyaXZlZCwKKyMgICDigKIgbnVtX214aWRzIC8gbnVtX21lbWJl cnMgZGlkIG5vdCBkZWNyZWFzZSB2cyBlYXJsaWVyIHNuYXBzaG90cywKKyMgICDigKIgb2xkZXN0 XyogbmV2ZXIgZGVjcmVhc2VzLgorIyBXZSBtYWtlIE5PIGFzc2VydGlvbnMgYWZ0ZXIgcmVsZWFz aW5nIGxvY2tzIChmcmVlemluZy90cnVuY2F0aW9uIG1heSBzaHJpbmsgZGVsdGFzKS4KKyMKKyMg VGVybWlub2xvZ3kgKGdsb2JhbCBjb3VudGVycyk6CisjICAgbnVtX214aWRzLCBudW1fbWVtYmVy cyAgICA6ICJpbi11c2UiIGRlbHRhcyBkZXJpdmVkIGZyb20gZ2xvYmFsIGhvcml6b25zCisjICAg b2xkZXN0X211bHRpeGFjdCwgb2Zmc2V0ICA6IG9sZGVzdCBob3Jpem9uczsgdGhleSBtb3ZlIGZv cndhcmQsIG5ldmVyIGJhY2t3YXJkCisjCisjIEFsbCBhc3NlcnRpb25zIGV4ZWN1dGUgd2hpbGUg b3VyIG11bHRpeGFjdCBpcyBwaW5uZWQgYnkgb3BlbiB0eG5zLCB3aGljaCBwcm90ZWN0cworIyB0 aGUgdHJ1bmNhdGlvbiBob3Jpem9uIChWQUNVVU0gY2FuJ3QgYWR2YW5jZSBwYXN0IG91ciBwaW5u ZWQgbXVsdGkpLgorCitzZXR1cAoreworICAgIENSRUFURSBUQUJMRSBteHEoaWQgaW50IFBSSU1B UlkgS0VZLCB2IGludCk7CisgICAgSU5TRVJUIElOVE8gbXhxIFZBTFVFUyAoMSwgNDIpOworfQor Cit0ZWFyZG93bgoreworICAgIERST1AgVEFCTEUgbXhxOworfQorCisjIFR3byBsb2NrZXJzIG9u IHRoZSBTQU1FIHR1cGxlIC0+IG9uZSBNdWx0aVhhY3Qgd2l0aCA+PSAyIG1lbWJlcnMuCitzZXNz aW9uICJzMSIKK3NldHVwIHsgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSB3YXJuaW5nOyBTRVQg bG9ja190aW1lb3V0ID0gJzVzJzsgfQorc3RlcCBzMV9iZWdpbiAgeyBCRUdJTjsgfQorc3RlcCBz MV9sb2NrICAgeyBTRUxFQ1QgMSBGUk9NIG14cSBXSEVSRSBpZD0xIEZPUiBLRVkgU0hBUkU7IH0K K3N0ZXAgczFfY29tbWl0IHsgQ09NTUlUOyB9CisKK3Nlc3Npb24gInMyIgorc2V0dXAgeyBTRVQg Y2xpZW50X21pbl9tZXNzYWdlcyA9IHdhcm5pbmc7IFNFVCBsb2NrX3RpbWVvdXQgPSAnNXMnOyB9 CitzdGVwIHMyX2JlZ2luICB7IEJFR0lOOyB9CitzdGVwIHMyX2xvY2sgICB7IFNFTEVDVCAxIEZS T00gbXhxIFdIRVJFIGlkPTEgRk9SIEtFWSBTSEFSRTsgfQorc3RlcCBzMl9jb21taXQgeyBDT01N SVQ7IH0KKworIyBCYXNlbGluZSBCRUZPUkUgYW55IGxvY2tpbmc7IG1heSBiZSBOVUxMcyBpZiBt dWx0aXhhY3QgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0Lgorc3RlcCBzbmFwMCB7CisgIENSRUFURSBU RU1QIFRBQkxFIHNuYXAwIEFTCisgIFNFTEVDVCBudW1fbXhpZHMsIG51bV9tZW1iZXJzLCBvbGRl c3RfbXVsdGl4YWN0LCBvbGRlc3Rfb2Zmc2V0CisgIEZST00gcGdfZ2V0X211bHRpeGFjdF9zdGF0 cygpOworfQorCisjIEFmdGVyIHMxIGhhcyBsb2NrZWQgdGhlIHJvdy4KK3N0ZXAgc25hcDEgewor ICBDUkVBVEUgVEVNUCBUQUJMRSBzbmFwMSBBUworICBTRUxFQ1QgbnVtX214aWRzLCBudW1fbWVt YmVycywgb2xkZXN0X211bHRpeGFjdCwgb2xkZXN0X29mZnNldAorICBGUk9NIHBnX2dldF9tdWx0 aXhhY3Rfc3RhdHMoKTsKK30KKworIyBBZnRlciBzMiBqb2lucyBvbiB0aGUgU0FNRSB0dXBsZSAt PiBtdWx0aXhhY3Qgd2l0aCA+PSAyIG1lbWJlcnMuCitzdGVwIHNuYXAyIHsKKyAgQ1JFQVRFIFRF TVAgVEFCTEUgc25hcDIgQVMKKyAgU0VMRUNUIG51bV9teGlkcywgbnVtX21lbWJlcnMsIG9sZGVz dF9tdWx0aXhhY3QsIG9sZGVzdF9vZmZzZXQKKyAgRlJPTSBwZ19nZXRfbXVsdGl4YWN0X3N0YXRz KCk7Cit9CisKKyMgUHJldHR5LCBkZXRlcm1pbmlzdGljIGtleS92YWx1ZSBvdXRwdXQgb2YgYm9v bGVhbiBjaGVja3MuCisjIEtleXM6CisjICAgaXNfaW5pdF9teGlkcyAgICAgICAgICAgIDogbnVt X214aWRzIGlzIG5vbi1OVUxMCisjICAgaXNfaW5pdF9tZW1iZXJzICAgICAgICAgIDogbnVtX21l bWJlcnMgaXMgbm9uLU5VTEwKKyMgICBpc19pbml0X29sZGVzdF9teGlkICAgICAgOiBvbGRlc3Rf bXVsdGl4YWN0IGlzIG5vbi1OVUxMCisjICAgaXNfaW5pdF9vbGRlc3Rfb2ZmICAgICAgIDogb2xk ZXN0X29mZnNldCBpcyBub24tTlVMTAorIyAgIGlzX29sZGVzdF9teGlkX25vbmRlY18wMSA6IG9s ZGVzdF9tdWx0aXhhY3QgZGlkIG5vdCBkZWNyZWFzZSAoc25hcDDihpJzbmFwMSkKKyMgICBpc19v bGRlc3RfbXhpZF9ub25kZWNfMTIgOiBvbGRlc3RfbXVsdGl4YWN0IGRpZCBub3QgZGVjcmVhc2Ug KHNuYXAx4oaSc25hcDIpCisjICAgaXNfb2xkZXN0X29mZl9ub25kZWNfMDEgIDogb2xkZXN0X29m ZnNldCBkaWQgbm90IGRlY3JlYXNlIChzbmFwMOKGknNuYXAxKQorIyAgIGlzX29sZGVzdF9vZmZf bm9uZGVjXzEyICA6IG9sZGVzdF9vZmZzZXQgZGlkIG5vdCBkZWNyZWFzZSAoc25hcDHihpJzbmFw MikKKyMgICBpc19tZW1iZXJzX2luY3JlYXNlZF9nZTEgOiBtZW1iZXJzIGluY3JlYXNlZCBieSBh dCBsZWFzdCAxIHdoZW4gczIgam9pbmVkCisjICAgaXNfbXhpZHNfbm9uZGVjXzAxICAgICAgIDog bnVtX214aWRzIGRpZCBub3QgZGVjcmVhc2UgKHNuYXAw4oaSc25hcDEpCisjICAgaXNfbXhpZHNf bm9uZGVjXzEyICAgICAgIDogbnVtX214aWRzIGRpZCBub3QgZGVjcmVhc2UgKHNuYXAx4oaSc25h cDIpCisjICAgaXNfbWVtYmVyc19ub25kZWNfMDEgICAgIDogbnVtX21lbWJlcnMgZGlkIG5vdCBk ZWNyZWFzZSAoc25hcDDihpJzbmFwMSkKKyMgICBpc19tZW1iZXJzX25vbmRlY18xMiAgICAgOiBu dW1fbWVtYmVycyBkaWQgbm90IGRlY3JlYXNlIChzbmFwMeKGknNuYXAyKQorc3RlcCBjaGVja193 aGlsZV9waW5uZWQgeworICBTRUxFQ1Qgci5hc3NlcnRpb24sIHIub2sKKyAgRlJPTSBzbmFwMCBz MAorICBKT0lOIHNuYXAxIHMxIE9OIFRSVUUKKyAgSk9JTiBzbmFwMiBzMiBPTiBUUlVFLAorICBM QVRFUkFMIHVubmVzdCgKKyAgICBBUlJBWVsKKyAgICAgICdpc19pbml0X214aWRzJywKKyAgICAg ICdpc19pbml0X21lbWJlcnMnLAorICAgICAgJ2lzX2luaXRfb2xkZXN0X214aWQnLAorICAgICAg J2lzX2luaXRfb2xkZXN0X29mZicsCisgICAgICAnaXNfb2xkZXN0X214aWRfbm9uZGVjXzAxJywK KyAgICAgICdpc19vbGRlc3RfbXhpZF9ub25kZWNfMTInLAorICAgICAgJ2lzX29sZGVzdF9vZmZf bm9uZGVjXzAxJywKKyAgICAgICdpc19vbGRlc3Rfb2ZmX25vbmRlY18xMicsCisgICAgICAnaXNf bWVtYmVyc19pbmNyZWFzZWRfZ2UxJywKKyAgICAgICdpc19teGlkc19ub25kZWNfMDEnLAorICAg ICAgJ2lzX214aWRzX25vbmRlY18xMicsCisgICAgICAnaXNfbWVtYmVyc19ub25kZWNfMDEnLAor ICAgICAgJ2lzX21lbWJlcnNfbm9uZGVjXzEyJworICAgIF0sCisgICAgQVJSQVlbCisgICAgICAo czIubnVtX214aWRzICAgICAgICBJUyBOT1QgTlVMTCksCisgICAgICAoczIubnVtX21lbWJlcnMg ICAgICBJUyBOT1QgTlVMTCksCisgICAgICAoczIub2xkZXN0X211bHRpeGFjdCBJUyBOT1QgTlVM TCksCisgICAgICAoczIub2xkZXN0X29mZnNldCAgICBJUyBOT1QgTlVMTCksCisKKyAgICAgIChz MS5vbGRlc3RfbXVsdGl4YWN0Ojp0ZXh0OjpiaWdpbnQgPj0gQ09BTEVTQ0UoczAub2xkZXN0X211 bHRpeGFjdDo6dGV4dDo6YmlnaW50LCAwKSksCisgICAgICAoczIub2xkZXN0X211bHRpeGFjdDo6 dGV4dDo6YmlnaW50ID49IENPQUxFU0NFKHMxLm9sZGVzdF9tdWx0aXhhY3Q6OnRleHQ6OmJpZ2lu dCwgMCkpLAorICAgICAgKHMxLm9sZGVzdF9vZmZzZXQgICAgPj0gQ09BTEVTQ0UoczAub2xkZXN0 X29mZnNldCwgICAgMCkpLAorICAgICAgKHMyLm9sZGVzdF9vZmZzZXQgICAgPj0gQ09BTEVTQ0Uo czEub2xkZXN0X29mZnNldCwgICAgMCkpLAorCisgICAgICAoczIubnVtX21lbWJlcnMgPj0gQ09B TEVTQ0UoczEubnVtX21lbWJlcnMsIDApICsgMSksCisKKyAgICAgIChzMS5udW1fbXhpZHMgICA+ PSBDT0FMRVNDRShzMC5udW1fbXhpZHMsICAgMCkpLAorICAgICAgKHMyLm51bV9teGlkcyAgID49 IENPQUxFU0NFKHMxLm51bV9teGlkcywgICAwKSksCisgICAgICAoczEubnVtX21lbWJlcnMgPj0g Q09BTEVTQ0UoczAubnVtX21lbWJlcnMsIDApKSwKKyAgICAgIChzMi5udW1fbWVtYmVycyA+PSBD T0FMRVNDRShzMS5udW1fbWVtYmVycywgMCkpCisgICAgXQorICApIEFTIHIoYXNzZXJ0aW9uLCBv ayk7Cit9CisKK3Blcm11dGF0aW9uIHNuYXAwIHMxX2JlZ2luIHMxX2xvY2sgc25hcDEgczJfYmVn aW4gczJfbG9jayBzbmFwMiBjaGVja193aGlsZV9waW5uZWQgczFfY29tbWl0IHMyX2NvbW1pdAot LSAKMi40Ny4zCgo= --00000000000020ca53063e925073--