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 1uzkl3-006ocx-Pa for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Sep 2025 23:43:18 +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 1uzkl0-009hJW-As for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Sep 2025 23:43:14 +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 1uzkkz-009hJG-NG for pgsql-hackers@lists.postgresql.org; Fri, 19 Sep 2025 23:43:14 +0000 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uzkkx-001MCg-10 for pgsql-hackers@postgresql.org; Fri, 19 Sep 2025 23:43:12 +0000 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-61cc281171cso3760679a12.0 for ; Fri, 19 Sep 2025 16:43:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758325388; x=1758930188; 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=7kQ8dm9ALJAxjrohwKZaNSK7s7vnfXLRIyjiLN0pU7I=; b=AB3cCY1rdmr4/pYSUpAagSHScdNVy1WI8Hnt++AzVy3467W1GEweThI1Wo52oxm3Fb 9I/LQ8pm+6NnJWtZegO0D3OZ3aiUWeS10mIClpaPIeXgoyJzkWyor8afq5dsnVc4XHsr QZ40V9FBh8Xc9YOU17LSr9dOpOIX7qgoY1V6sUG6SpnVJ8M6BCt2VZonm85lL85FN24p v3zaOeyiLdHPq0CyuCayNZPl8a97ST+bxlpDd3ylhEwNBHx4G9TKsSVcjgFBkQf1x9TP bNzEJcMcVaQ1y29iaxzXZimmNQyF/5z9pOZ1APDri4LGVrmDRJk1ThFttiZM1YN7NCQY 2iyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758325388; x=1758930188; 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=7kQ8dm9ALJAxjrohwKZaNSK7s7vnfXLRIyjiLN0pU7I=; b=Iq5JZ7IuczO4+kqTcmHV4yd+LHArRwyc04nu/9944hHJQmrPSrUCE/aA8o+4wYvzbv Hnm9AKKilWOH4FfIwRFfkNA9fKnAgRulg9RkRWfcB27sazfEMniywZ7bNiUcQ+yC1j03 yu/RjH3dncuV8ooqOE0snD4aaQtFO4NR/TiQWANTuWHjFD3jN+Kh/pcdKZVgD42+1KrX Hyhqe0r2v9YyJzWLevV9z1Vfz77EAugt8O32QX0YZWntGp1sVOAg9+rVZw1Bs18+SJIj Sl3qCSbfDqgU7zz3vjpNGINzwsmSoeUM91Bsn/d24fsam6UdPWzIfWeAN4wnfLDZRTo2 jhVw== X-Forwarded-Encrypted: i=1; AJvYcCXMH75LR+PJMXCtMwN6J2zUHWX5FIVB+DZ387WYKEC0504RqwoHswgl+YOWcqNGMqWirWmAzxVhL8AaBBKD@postgresql.org X-Gm-Message-State: AOJu0YzZfGpWCf4l+TnVNu7TXThnh3UeWqy6BD/8Hf48oxHRznTvpOq6 kqnQGYnN8P1Q8mhVl9EhcftWEJB0Gx+ZCZPz6LcmrjKWs77Y5Opiqd3L9UvC1ZCwjkI1ZWlmlf5 Nn1mfllygfICb23FtqlVkURiILmfpzz0= X-Gm-Gg: ASbGncvNfTZSP1bBa/KDpXOS3H/4SD6lR8TpcsuilOWyqRhI5qKp1yzFe2WRzY3PLtM OMTpIomjIhIIxb97IEO9VcmvMK77v34cvwUT2bqG0q9aO/KR6KF7bNjOJYRyfKPNbe7npE7ln7r 9Bb0fUtDXSyFW11aX3DBl5cUOYDRXHCBizkCzgU8EjdJ3NSHAcGDJywx5UzI5UsPvyd+jyrI1p9 eeYzJUi X-Google-Smtp-Source: AGHT+IEl3jt4WFYUeMa0SJHnyJPcwDkr0w2CJsQXRhJmUC1zysMbn3LZ9Z48Asud9AU0QQ+xA+5LY5jQdFjObSdLoNM= X-Received: by 2002:a05:6402:90a:b0:62b:53af:78ca with SMTP id 4fb4d7f45d1cf-62fc08f8a65mr4361295a12.9.1758325388302; Fri, 19 Sep 2025 16:43:08 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: John H Date: Fri, 19 Sep 2025 16:42:56 -0700 X-Gm-Features: AS18NWBE4c_VnoKKkofW01Ikl1Kj9KMLzKkzjVUP6h2laDk3UL9va_DjSukdxgw Message-ID: Subject: Re: Introduce XID age based replication slot invalidation To: "Hayato Kuroda (Fujitsu)" Cc: Bharath Rupireddy , pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000002b9b5a063f300837" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002b9b5a063f300837 Content-Type: text/plain; charset="UTF-8" Hi Hayato, Thank you for taking a look. > > The patch currently attempts to invalidate once-per-autovacuum worker. > > We're wondering if it should attempt invalidation on a per-relation > > basis within the vacuum call itself. That would account for scenarios > > where the cost_delay or naptime is high between autovac executions. > > I have a concern that age calculation acquire the lock for XidGenLock thus > performance can be affected. Do you have insights for it? Are you concerned if we did the check on a per table case? Or in the current situation where it's only once per-worker. > > > > Invalidation happens in CHECKPOINT, similar to > > 'idle_replication_slot_timeout', and when VACUUM occurs. > > Let me confirm because I'm new. VACUUM can also trigger because old XID make > VACUUM fail, right? Timeout is aimed for WAL thus it is not so related with VACUUM, > which does not recycle segments. > I feel that the timeout is used as a way to roughly address storage accumulation or VACUUM not progressing due to slots. > In contrast, is there a possibility that XID-age check can be done only at VACUUM? It's also done in CHECKPOINT because there can be stale replication slots on standby that aren't there on writer. We would still want them to be invalidated. > Regarding the patch, try_replication_slot_invalidation() and ReplicationSlotIsXIDAged() > do the same task. Can we reduce duplicated part? Thanks for catching, I thought I did this but guess not. Updated in the latest attachment. -- John Hsu - Amazon Web Services --0000000000002b9b5a063f300837 Content-Type: application/octet-stream; name="0045-Add-XID-age-based-replication-slot-invalidation.patch" Content-Disposition: attachment; filename="0045-Add-XID-age-based-replication-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfrhhto40 RnJvbSBiOWM5NjVhNjQ1OWJmY2VkOTlmNTlhNjBmZWYyODk3YWJlMjgyMTU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2huIEhzdSA8am9obmh5dnJAZ21haWwuY29tPgpEYXRlOiBG cmksIDggQXVnIDIwMjUgMTk6NDg6NTggKzAwMDAKU3ViamVjdDogW1BBVENIXSBBZGQgWElEIGFn ZSBiYXNlZCByZXBsaWNhdGlvbiBzbG90IGludmFsaWRhdGlvbgoKVGhpcyBjb21taXQgaW50cm9k dWNlcyBtYXhfc2xvdF94aWRfYWdlIEdVQwp0aGF0IGFsbG93cyByZXBsaWNhdGlvbiBzbG90cyB3 aG9zZSB4bWluIG9yCmNhdGFsb2dfeG1pbiBoYXMgcmVhY2hlZCB0aGUgYWdlIHNwZWNpZmllZCBi eQp0aGlzIHNldHRpbmcgdG8gYmUgaW52YWxpZGF0ZWQuCgpJZGxlIG9yIGZvcmdvdHRlbiByZXBs aWNhdGlvbiBzbG90cyBjYW4gaG9sZApiYWNrIHZhY3V1bSBvcGVyYXRpb25zIGxlYWRpbmcgdG8g YmxvYXQgb3IKdHJhbnNhY3Rpb24gWElEIHdyYXAgYXJvdW5kLCByZXF1aXJpbmcgdGhlIHNsb3QK dG8gYmUgZHJvcHBlZCBhbmQgcmVxdWlyaW5nIHNpbmdsZSB1c2VyLW1vZGUKdmFjdXVtaW5nLiBU aGlzIHNldHRpbmcgYXZvaWRzIHRoZXNlIHNjZW5hcmlvcwpieSBwcm9hY3RpdmVseSBpbnZhbGlk YXRpbmcgdGhlc2Ugc3RhbGUgc2xvdHMKb24gYW4gWElEIGJhc2lzLgoKSW52YWxpZGF0aW9uIGNo ZWNrcyBoYXBwZW5zIGF0IHZhcmlvdXMgbG9jYXRpb25zCnRvIHByZXZlbnQgd3JhcC1hcm91bmQ6 Ci0gRHVyaW5nIENIRUNLUE9JTlQKLSBEdXJpbmcgdmFjdXVtIChpbmNsdWRpbmcgYXV0b3ZhY3V1 bSkKClRoaXMgY2hhbmdlIG1ha2VzIGl0IGVhc3kgZm9yIGFkbWluaXN0cmF0b3JzIHRvCnByb3Rl Y3QgYWdhaW5zdCB3cmFwLWFyb3VuZCBjb25jZXJucyBkdWUgdG8gc2xvdHMKdGhhdCBhcmUgZmFs bGluZyBiZWhpbmQuCgpBdXRob3I6IEJoYXJhdGggUnVwaXJlZGR5CkF1dGhvcjogSm9obiBIc3UK LS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgMjYg KysKIGRvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICAgICAgICB8ICAgOCAr CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgICAgICAgICAgfCAgIDQgKy0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jICAgICAgICAgICAgICAgICB8ICA0NSArKyst CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgICAgICAgICAgICAgICAgfCAgODAgKysr KystCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAgIDgg Kwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oICAgICAgICAgICAgICAgIHwgICA3ICst CiAuLi4vdC8wNDlfaW52YWxpZGF0ZV94aWRfYWdlZF9zbG90cy5wbCAgICAgICAgfCAyNDAgKysr KysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQxMSBpbnNlcnRpb25zKCspLCA3IGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlY292ZXJ5L3QvMDQ5X2lu dmFsaWRhdGVfeGlkX2FnZWRfc2xvdHMucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29u ZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggZTliNDIwZjNkZGIuLmVi MDdiY2QzNTUxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC00NjUzLDYgKzQ2NTMsMzIgQEAgcmVzdG9yZV9jb21t YW5kID0gJ2NvcHkgIkM6XFxzZXJ2ZXJcXGFyY2hpdmVkaXJcXCVmIiAiJXAiJyAgIyBXaW5kb3dz CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlz dGVudHJ5IGlkPSJndWMtbWF4LXNsb3QteGlkLWFnZSIgeHJlZmxhYmVsPSJtYXhfc2xvdF94aWRf YWdlIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPm1heF9zbG90X3hpZF9hZ2U8L3Zhcm5hbWU+ICg8 dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+bWF4X3Nsb3RfeGlkX2FnZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0 ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxs aXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgSW52YWxpZGF0ZSByZXBsaWNhdGlvbiBz bG90cyB3aG9zZSA8bGl0ZXJhbD54bWluPC9saXRlcmFsPiAodGhlIG9sZGVzdAorICAgICAgICB0 cmFuc2FjdGlvbiB0aGF0IHRoaXMgc2xvdCBuZWVkcyB0aGUgZGF0YWJhc2UgdG8gcmV0YWluKSBv cgorICAgICAgICA8bGl0ZXJhbD5jYXRhbG9nX3htaW48L2xpdGVyYWw+ICh0aGUgb2xkZXN0IHRy YW5zYWN0aW9uIGFmZmVjdGluZyB0aGUKKyAgICAgICAgc3lzdGVtIGNhdGFsb2dzIHRoYXQgdGhp cyBzbG90IG5lZWRzIHRoZSBkYXRhYmFzZSB0byByZXRhaW4pIGhhcyByZWFjaGVkCisgICAgICAg IHRoZSBhZ2Ugc3BlY2lmaWVkIGJ5IHRoaXMgc2V0dGluZy4gQSB2YWx1ZSBvZiB6ZXJvICh3aGlj aCBpcyBkZWZhdWx0KQorICAgICAgICBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuIFVzZXJzIGNhbiBz ZXQgdGhpcyB2YWx1ZSBhbnl3aGVyZSBmcm9tIHplcm8gdG8KKyAgICAgICAgdHdvIGJpbGxpb24u IFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1l PnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21tYW5k CisgICAgICAgIGxpbmUuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAg IFRoaXMgaW52YWxpZGF0aW9uIGNoZWNrIGhhcHBlbnMgZWl0aGVyIHdoZW4gdGhlIHNsb3QgaXMg YWNxdWlyZWQKKyAgICAgICAgZm9yIHVzZSBvciBkdXJpbmcgdmFjdXVtIG9yIGR1cmluZyBjaGVj a3BvaW50LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy13YWwtc2VuZGVyLXRpbWVvdXQi IHhyZWZsYWJlbD0id2FsX3NlbmRlcl90aW1lb3V0Ij4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPndh bF9zZW5kZXJfdGltZW91dDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAgICAg PGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCBi L2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAppbmRleCA0MTg3MTkxZWE3NC4uYmVlYjIy YTdkYTQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKQEAgLTMwMDcsNiArMzAwNywxNCBAQCBTRUxF Q1QgKiBGUk9NIHBnX2xvY2tzIHBsIExFRlQgSk9JTiBwZ19wcmVwYXJlZF94YWN0cyBwcHgKICAg ICAgICAgICA8eHJlZiBsaW5rZW5kPSJndWMtaWRsZS1yZXBsaWNhdGlvbi1zbG90LXRpbWVvdXQi Lz4gZHVyYXRpb24uCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxsaXRlcmFsPnhpZF9h Z2VkPC9saXRlcmFsPiBtZWFucyB0aGF0IHRoZSBzbG90J3MKKyAgICAgICAgICA8bGl0ZXJhbD54 bWluPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5jYXRhbG9nX3htaW48L2xpdGVyYWw+CisgICAgICAg ICAgaGFzIHJlYWNoZWQgdGhlIGFnZSBzcGVjaWZpZWQgYnkKKyAgICAgICAgICA8eHJlZiBsaW5r ZW5kPSJndWMtbWF4LXNsb3QteGlkLWFnZSIvPiBwYXJhbWV0ZXIuCisgICAgICAgICA8L3BhcmE+ CisgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICA8L3Bh cmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXgg MGJhZjBhYzYxNjAuLjQxYTQ4Mzg5YWZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBA IC03MzQ3LDcgKzczNDcsNyBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAkgKi8KIAlY TEJ5dGVUb1NlZyhSZWRvUmVjUHRyLCBfbG9nU2VnTm8sIHdhbF9zZWdtZW50X3NpemUpOwogCUtl ZXBMb2dTZWcocmVjcHRyLCAmX2xvZ1NlZ05vKTsKLQlpZiAoSW52YWxpZGF0ZU9ic29sZXRlUmVw bGljYXRpb25TbG90cyhSU19JTlZBTF9XQUxfUkVNT1ZFRCB8IFJTX0lOVkFMX0lETEVfVElNRU9V VCwKKwlpZiAoSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSU19JTlZBTF9XQUxf UkVNT1ZFRCB8IFJTX0lOVkFMX0lETEVfVElNRU9VVCB8IFJTX0lOVkFMX1hJRF9BR0UsCiAJCQkJ CQkJCQkJICAgX2xvZ1NlZ05vLCBJbnZhbGlkT2lkLAogCQkJCQkJCQkJCSAgIEludmFsaWRUcmFu c2FjdGlvbklkKSkKIAl7CkBAIC03ODAxLDcgKzc4MDEsNyBAQCBDcmVhdGVSZXN0YXJ0UG9pbnQo aW50IGZsYWdzKQogCXJlcGxheVB0ciA9IEdldFhMb2dSZXBsYXlSZWNQdHIoJnJlcGxheVRMSSk7 CiAJZW5kcHRyID0gKHJlY2VpdmVQdHIgPCByZXBsYXlQdHIpID8gcmVwbGF5UHRyIDogcmVjZWl2 ZVB0cjsKIAlLZWVwTG9nU2VnKGVuZHB0ciwgJl9sb2dTZWdObyk7Ci0JaWYgKEludmFsaWRhdGVP YnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9J RExFX1RJTUVPVVQsCisJaWYgKEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNf SU5WQUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9JRExFX1RJTUVPVVQgfCBSU19JTlZBTF9YSURf QUdFLAogCQkJCQkJCQkJCSAgIF9sb2dTZWdObywgSW52YWxpZE9pZCwKIAkJCQkJCQkJCQkgICBJ bnZhbGlkVHJhbnNhY3Rpb25JZCkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCA3MzNlZjQw YWU3Yy4uMjhiZTkyMjU1MDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1 bS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC00Nyw2ICs0Nyw3IEBA CiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rl ci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5o IgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1n ci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWdu YWwuaCIKQEAgLTEyOSw2ICsxMzAsNyBAQCBzdGF0aWMgYm9vbCB2YWN1dW1fcmVsKE9pZCByZWxp ZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogc3RhdGljIGRvdWJs ZSBjb21wdXRlX3BhcmFsbGVsX2RlbGF5KHZvaWQpOwogc3RhdGljIFZhY09wdFZhbHVlIGdldF92 YWNvcHR2YWxfZnJvbV9ib29sZWFuKERlZkVsZW0gKmRlZik7CiBzdGF0aWMgYm9vbCB2YWNfdGlk X3JlYXBlZChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CitzdGF0aWMgdm9pZCB0 cnlfcmVwbGljYXRpb25fc2xvdF9pbnZhbGlkYXRpb24odm9pZCk7CiAKIC8qCiAgKiBHVUMgY2hl Y2sgZnVuY3Rpb24gdG8gZW5zdXJlIEdVQyB2YWx1ZSBzcGVjaWZpZWQgaXMgd2l0aGluIHRoZSBh bGxvd2FibGUKQEAgLTQ3MSw2ICs0NzMsMzEgQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3Rh dGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIAlNZW1vcnlDb250ZXh0 RGVsZXRlKHZhY19jb250ZXh0KTsKIH0KIAorLyoKKyAqIFRyeSBpbnZhbGlkYXRpbmcgcmVwbGlj YXRpb24gc2xvdHMgYmFzZWQgb24gY3VycmVudCByZXBsaWNhdGlvbiBzbG90IHhtaW4KKyAqIGxp bWl0cyBvbmNlIGV2ZXJ5IHZhY3V1bSBjeWNsZS4KKyAqLworc3RhdGljIHZvaWQKK3RyeV9yZXBs aWNhdGlvbl9zbG90X2ludmFsaWRhdGlvbih2b2lkKQoreworCVRyYW5zYWN0aW9uSWQgbWluX3Ns b3RfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVRyYW5zYWN0aW9uSWQgbWluX3Nsb3Rf Y2F0YWxvZ194bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisKKwlQcm9jQXJyYXlHZXRSZXBs aWNhdGlvblNsb3RYbWluKCZtaW5fc2xvdF94bWluLCAmbWluX3Nsb3RfY2F0YWxvZ194bWluKTsK KworCWlmIChSZXBsaWNhdGlvblNsb3RJc1hJREFnZWQobWluX3Nsb3RfeG1pbiwgbWluX3Nsb3Rf Y2F0YWxvZ194bWluKSkKKwl7CisJCS8qCisJCSAqIE5vdGUgdGhhdCBJbnZhbGlkYXRlT2Jzb2xl dGVSZXBsaWNhdGlvblNsb3RzIGlzIGFsc28gY2FsbGVkIGFzIHBhcnQKKwkJICogb2YgQ0hFQ0tQ T0lOVCwgYW5kIGVtaXR0aW5nIEVSUk9ScyBmcm9tIHdpdGhpbiBpcyBhdm9pZGVkIGFscmVhZHku CisJCSAqIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gY29uY2VybiBoZXJlIHRoYXQgYW55IEVSUk9S IGZyb20KKwkJICogaW52YWxpZGF0aW5nIHJlcGxpY2F0aW9uIHNsb3RzIGJsb2NrcyBWQUNVVU0u CisJCSAqLworCQlJbnZhbGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzKFJTX0lOVkFMX1hJ RF9BR0UsIDAsCisJCQkJCQkJCQkJICAgSW52YWxpZE9pZCwgSW52YWxpZFRyYW5zYWN0aW9uSWQp OworCX0KK30KKwogLyoKICAqIEludGVybmFsIGVudHJ5IHBvaW50IGZvciBhdXRvdmFjdXVtIGFu ZCB0aGUgVkFDVVVNIC8gQU5BTFlaRSBjb21tYW5kcy4KICAqCkBAIC00OTgsNyArNTI1LDcgQEAg dmFjdXVtKExpc3QgKnJlbGF0aW9ucywgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywgQnVmZmVy QWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWcKIAkgICBNZW1vcnlDb250ZXh0IHZhY19jb250ZXh0LCBi b29sIGlzVG9wTGV2ZWwpCiB7CiAJc3RhdGljIGJvb2wgaW5fdmFjdXVtID0gZmFsc2U7Ci0KKwlz dGF0aWMgYm9vbCBmaXJzdF90aW1lID0gdHJ1ZTsKIAljb25zdCBjaGFyICpzdG10dHlwZTsKIAl2 b2xhdGlsZSBib29sIGluX291dGVyX3hhY3QsCiAJCQkJdXNlX293bl94YWN0czsKQEAgLTYxMSw2 ICs2MzgsMjIgQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9ucywgY29uc3QgVmFjdXVtUGFyYW1zIHBh cmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWcKIAkJQ29tbWl0VHJhbnNhY3Rpb25D b21tYW5kKCk7CiAJfQogCisJaWYgKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX1ZBQ1VVTSkKKwl7 CisJCWlmIChmaXJzdF90aW1lKQorCQkJdHJ5X3JlcGxpY2F0aW9uX3Nsb3RfaW52YWxpZGF0aW9u KCk7CisKKwkJLyoKKwkJICogRXZlcnkgYXV0b3ZhY3V1bSB3b3JrZXIgd2lsbCBhdHRlbXB0IHRv IGludmFsaWRhdGUgcmVwbGljYXRpb24gc2xvdHMgb25jZS4KKwkJICogSWYgYSByZXBsaWNhdGlv biBzbG90IGV4Y2VlZHMgdGhlIGFnZSBzcGVjaWZpZWQgYnkgbWF4X3Nsb3RfeGlkX2FnZSB0aGVu CisJCSAqIGl0IHdpbGwgb25seSBiZSBpbnZhbGlkYXRlZCBvbmNlIHRoZSBuZXh0IHdvcmtlciBh dHRlbXB0IGtpY2tzIG9mZi4gRm9yCisJCSAqIG1hbnVhbCBWQUNVVU0gYWx3YXlzIGF0dGVtcHQg aW52YWxpZGF0aW9uIHRvIGFjY291bnQgZm9yIGxvbmctbGl2ZWQKKwkJICogbWFpbnRlbmFuY2Ug Y29ubmVjdGlvbnMuCisJCSAqLworCQlpZiAoQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpKQor CQkJZmlyc3RfdGltZSA9IGZhbHNlOworCX0KKwogCS8qIFR1cm4gdmFjdXVtIGNvc3QgYWNjb3Vu dGluZyBvbiBvciBvZmYsIGFuZCBzZXQvY2xlYXIgaW5fdmFjdXVtICovCiAJUEdfVFJZKCk7CiAJ ewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vc2xvdC5jCmluZGV4IGZkMGZkYjk2ZDQyLi5iNGZjMGJhMzcwMiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Nsb3QuYwpAQCAtMTE2LDYgKzExNiw3IEBAIHN0YXRpYyBjb25zdCBTbG90 SW52YWxpZGF0aW9uQ2F1c2VNYXAgU2xvdEludmFsaWRhdGlvbkNhdXNlc1tdID0gewogCXtSU19J TlZBTF9IT1JJWk9OLCAicm93c19yZW1vdmVkIn0sCiAJe1JTX0lOVkFMX1dBTF9MRVZFTCwgIndh bF9sZXZlbF9pbnN1ZmZpY2llbnQifSwKIAl7UlNfSU5WQUxfSURMRV9USU1FT1VULCAiaWRsZV90 aW1lb3V0In0sCisJe1JTX0lOVkFMX1hJRF9BR0UsICJ4aWRfYWdlZCJ9LAogfTsKIAogLyoKQEAg LTE1Nyw2ICsxNTgsMTIgQEAgaW50CQkJbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID0gMTA7IC8qIHRo ZSBtYXhpbXVtIG51bWJlciBvZiByZXBsaWNhdGlvbgogICovCiBpbnQJCQlpZGxlX3JlcGxpY2F0 aW9uX3Nsb3RfdGltZW91dF9zZWNzID0gMDsKIAorLyoKKyAqIEludmFsaWRhdGUgcmVwbGljYXRp b24gc2xvdHMgdGhhdCBoYXZlIHhtaW4gb3IgY2F0YWxvZ194bWluIGdyZWF0ZXIKKyAqIHRoYW4g dGhlIHNwZWNpZmllZCBhZ2U7ICcwJyBkaXNhYmxlcyBpdC4KKyAqLworaW50CQkJbWF4X3Nsb3Rf eGlkX2FnZSA9IDA7CisKIC8qCiAgKiBUaGlzIEdVQyBsaXN0cyBzdHJlYW1pbmcgcmVwbGljYXRp b24gc3RhbmRieSBzZXJ2ZXIgc2xvdCBuYW1lcyB0aGF0CiAgKiBsb2dpY2FsIFdBTCBzZW5kZXIg cHJvY2Vzc2VzIHdpbGwgd2FpdCBmb3IuCkBAIC0xNjIwLDcgKzE2MjcsOSBAQCBSZXBvcnRTbG90 SW52YWxpZGF0aW9uKFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCQkJ CQkgICBYTG9nUmVjUHRyIHJlc3RhcnRfbHNuLAogCQkJCQkgICBYTG9nUmVjUHRyIG9sZGVzdExT TiwKIAkJCQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJ ICAgbG9uZyBzbG90X2lkbGVfc2Vjb25kcykKKwkJCQkJICAgbG9uZyBzbG90X2lkbGVfc2Vjb25k cywKKwkJCQkJICAgVHJhbnNhY3Rpb25JZCB4bWluLAorCQkJCQkgICBUcmFuc2FjdGlvbklkIGNh dGFsb2dfeG1pbikKIHsKIAlTdHJpbmdJbmZvRGF0YSBlcnJfZGV0YWlsOwogCVN0cmluZ0luZm9E YXRhIGVycl9oaW50OwpAQCAtMTY2NSw2ICsxNjc0LDI2IEBAIFJlcG9ydFNsb3RJbnZhbGlkYXRp b24oUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCQkJCQkJCSAiaWRs ZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXQiKTsKIAkJCQlicmVhazsKIAkJCX0KKworCQljYXNl IFJTX0lOVkFMX1hJRF9BR0U6CisJCQl7CisJCQkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlk KHhtaW4pIHx8IFRyYW5zYWN0aW9uSWRJc1ZhbGlkKGNhdGFsb2dfeG1pbikpOworCisJCQkJaWYg KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtaW4pKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJf ZGV0YWlsLCBfKCJUaGUgc2xvdCdzIHhtaW4gJXUgZXhjZWVkcyB0aGUgbWF4aW11bSB4aWQgYWdl ICVkIHNwZWNpZmllZCBieSBcIm1heF9zbG90X3hpZF9hZ2VcIi4iKSwKKwkJCQkJCQkJIHhtaW4s CisJCQkJCQkJCSBtYXhfc2xvdF94aWRfYWdlKTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmlu Z0luZm8oJmVycl9kZXRhaWwsIF8oIlRoZSBzbG90J3MgY2F0YWxvZ194bWluICV1IGV4Y2VlZHMg dGhlIG1heGltdW0geGlkIGFnZSAlZCBzcGVjaWZpZWQgYnkgXCJtYXhfc2xvdF94aWRfYWdlXCIu IiksCisJCQkJCQkJCSBjYXRhbG9nX3htaW4sCisJCQkJCQkJCSBtYXhfc2xvdF94aWRfYWdlKTsK KworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmVycl9oaW50LCBfKCJZb3UgbWlnaHQgbmVlZCB0byBp bmNyZWFzZSBcIiVzXCIuIiksCisJCQkJCQkJCSAibWF4X3Nsb3RfeGlkX2FnZSIpOworCisKKwkJ CQlicmVhazsKKwkJCX0KIAkJY2FzZSBSU19JTlZBTF9OT05FOgogCQkJcGdfdW5yZWFjaGFibGUo KTsKIAl9CkBAIC0xNzgzLDYgKzE4MTIsMTMgQEAgRGV0ZXJtaW5lU2xvdEludmFsaWRhdGlvbkNh dXNlKHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsIFJlcGxpY2F0aW9uU2xvdCAqcywKIAkJfQogCX0K IAorCWlmIChwb3NzaWJsZV9jYXVzZXMgJiBSU19JTlZBTF9YSURfQUdFKQorCXsKKwkJLyogU2Fm ZSBzaW5jZSB3ZSBob2xkIHRoZSByZXBsaWNhdGlvbiBzbG90J3Mgc3BpbmxvY2sgbmVlZGVkIHRv IGF2b2lkIHJhY2UgY29uZGl0aW9ucyAqLworCQlpZiAoUmVwbGljYXRpb25TbG90SXNYSURBZ2Vk KHMtPmRhdGEueG1pbiwgcy0+ZGF0YS5jYXRhbG9nX3htaW4pKQorCQkJcmV0dXJuIFJTX0lOVkFM X1hJRF9BR0U7CisJfQorCiAJcmV0dXJuIFJTX0lOVkFMX05PTkU7CiB9CiAKQEAgLTE5NzIsNyAr MjAwOCw3IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVf Y2F1c2VzLAogCQkJCVJlcG9ydFNsb3RJbnZhbGlkYXRpb24oaW52YWxpZGF0aW9uX2NhdXNlLCB0 cnVlLCBhY3RpdmVfcGlkLAogCQkJCQkJCQkJICAgc2xvdG5hbWUsIHJlc3RhcnRfbHNuLAogCQkJ CQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJCQkJCSAg IHNsb3RfaWRsZV9zZWNzKTsKKwkJCQkJCQkJCSAgIHNsb3RfaWRsZV9zZWNzLCBzLT5kYXRhLnht aW4sIHMtPmRhdGEuY2F0YWxvZ194bWluKTsKIAogCQkJCWlmIChNeUJhY2tlbmRUeXBlID09IEJf U1RBUlRVUCkKIAkJCQkJKHZvaWQpIFNlbmRQcm9jU2lnbmFsKGFjdGl2ZV9waWQsCkBAIC0yMDE5 LDcgKzIwNTUsNyBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3Np YmxlX2NhdXNlcywKIAkJCVJlcG9ydFNsb3RJbnZhbGlkYXRpb24oaW52YWxpZGF0aW9uX2NhdXNl LCBmYWxzZSwgYWN0aXZlX3BpZCwKIAkJCQkJCQkJICAgc2xvdG5hbWUsIHJlc3RhcnRfbHNuLAog CQkJCQkJCQkgICBvbGRlc3RMU04sIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAotCQkJCQkJCQkg ICBzbG90X2lkbGVfc2Vjcyk7CisJCQkJCQkJCSAgIHNsb3RfaWRsZV9zZWNzLCBzLT5kYXRhLnht aW4sIHMtPmRhdGEuY2F0YWxvZ194bWluKTsKIAogCQkJLyogZG9uZSB3aXRoIHRoaXMgc2xvdCBm b3Igbm93ICovCiAJCQlicmVhazsKQEAgLTIwNDQsNiArMjA4MCw4IEBAIEludmFsaWRhdGVQb3Nz aWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2VzLAogICogLSBSU19JTlZBTF9X QUxfTEVWRUw6IGlzIGxvZ2ljYWwgYW5kIHdhbF9sZXZlbCBpcyBpbnN1ZmZpY2llbnQKICAqIC0g UlNfSU5WQUxfSURMRV9USU1FT1VUOiBoYXMgYmVlbiBpZGxlIGxvbmdlciB0aGFuIHRoZSBjb25m aWd1cmVkCiAgKiAgICJpZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGltZW91dCIgZHVyYXRpb24uCisg KiAtIFJTX0lOVkFMX1hJRF9BR0U6IHNsb3QgeGlkIGFnZSBpcyBvbGRlciB0aGFuIHRoZSBjb25m aWd1cmVkCisgKiAgICJtYXhfc2xvdF94aWRfYWdlIiBhZ2UKICAqCiAgKiBOb3RlOiBUaGlzIGZ1 bmN0aW9uIGF0dGVtcHRzIHRvIGludmFsaWRhdGUgdGhlIHNsb3QgZm9yIG11bHRpcGxlIHBvc3Np YmxlCiAgKiBjYXVzZXMgaW4gYSBzaW5nbGUgcGFzcywgbWluaW1pemluZyByZWR1bmRhbnQgaXRl cmF0aW9ucy4gVGhlICJjYXVzZSIKQEAgLTMwOTMsMyArMzEzMSwzOSBAQCBXYWl0Rm9yU3RhbmRi eUNvbmZpcm1hdGlvbihYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbikKIAogCUNvbmRpdGlvblZhcmlh YmxlQ2FuY2VsU2xlZXAoKTsKIH0KKworLyoKKyAqIENoZWNrIHRydWUgaWYgdGhlIGdpdmVuIHBh c3NlZCBpbiB4bWluIG9yIGNhdGFsb2dfeG1pbiBhZ2UgaXMKKyAqIG9sZGVyIHRoYW4gdGhlIGFn ZSBzcGVjaWZpZWQgYnkgbWF4X3Nsb3RfeGlkX2FnZS4KKyAqLworYm9vbAorUmVwbGljYXRpb25T bG90SXNYSURBZ2VkKFRyYW5zYWN0aW9uSWQgeG1pbiwgVHJhbnNhY3Rpb25JZCBjYXRhbG9nX3ht aW4pCit7CisJVHJhbnNhY3Rpb25JZCBjdXRvZmY7CisJVHJhbnNhY3Rpb25JZCBjdXJyOworCWJv b2wgaXNfYWdlZCA9IGZhbHNlOworCisJaWYgKG1heF9zbG90X3hpZF9hZ2UgPT0gMCkKKwkJcmV0 dXJuIGZhbHNlOworCisJY3VyciA9IFJlYWROZXh0VHJhbnNhY3Rpb25JZCgpOworCisJLyoKKwkg KiBDYWxjdWxhdGUgb2xkZXN0IFhJRCBhIHNsb3QncyB4bWluIG9yIGNhdGFsb2dfeG1pbiBjYW4g aGF2ZSBiZWZvcmUKKwkgKiB0aGV5IGFyZSBpbnZhbGlkYXRlZC4KKwkgKi8KKwljdXRvZmYgPSBj dXJyIC0gbWF4X3Nsb3RfeGlkX2FnZTsKKworCWlmICghVHJhbnNhY3Rpb25JZElzTm9ybWFsKGN1 dG9mZikpCisJCWN1dG9mZiA9IEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZDsKKworCWlmIChUcmFu c2FjdGlvbklkSXNOb3JtYWwoeG1pbikgJiYKKwkJVHJhbnNhY3Rpb25JZFByZWNlZGVzT3JFcXVh bHMoeG1pbiwgY3V0b2ZmKSkKKwkJaXNfYWdlZCA9IHRydWU7CisKKwlpZiAoVHJhbnNhY3Rpb25J ZElzTm9ybWFsKGNhdGFsb2dfeG1pbikgJiYKKwkJVHJhbnNhY3Rpb25JZFByZWNlZGVzT3JFcXVh bHMoY2F0YWxvZ194bWluLCBjdXRvZmYpKQorCQlpc19hZ2VkID0gdHJ1ZTsKKworCXJldHVybiBp c19hZ2VkOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRl eCA2YmM2YmUxM2QyYS4uYzE2MjI2OGMzMTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3BhcmFtZXRlcnMuZGF0CkBAIC0xNzE3LDYgKzE3MTcsMTQgQEAKICAgbWF4ID0+ICdJTlRfTUFY JywKIH0sCiAKK3sgbmFtZSA9PiAnbWF4X3Nsb3RfeGlkX2FnZScsIHR5cGUgPT4gJ2ludCcsIGNv bnRleHQgPT4gJ1BHQ19TSUdIVVAnLCBncm91cCA9PiAnUkVQTElDQVRJT05fU0VORElORycsCisg IHNob3J0X2Rlc2MgPT4gJ0FnZSBvZiB0aGUgdHJhbnNhY3Rpb24gSUQgYXQgd2hpY2ggYSByZXBs aWNhdGlvbiBzbG90IGdldHMgaW52YWxpZGF0ZWQuJywKKyAgdmFyaWFibGUgPT4gJ21heF9zbG90 X3hpZF9hZ2UnLAorICBib290X3ZhbCA9PiAnMCcsCisgIG1pbiA9PiAnMCcsCisgIG1heCA9PiAn MjAwMDAwMDAwMCcsCit9LAorCiAjIHdlIGhhdmUgbm8gbWljcm9zZWNvbmRzIGRlc2lnbmF0aW9u LCBzbyBjYW4ndCBzdXBwbHkgdW5pdHMgaGVyZQogeyBuYW1lID0+ICdjb21taXRfZGVsYXknLCB0 eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfU1VTRVQnLCBncm91cCA9PiAnV0FMX1NFVFRJ TkdTJywKICAgc2hvcnRfZGVzYyA9PiAnU2V0cyB0aGUgZGVsYXkgaW4gbWljcm9zZWNvbmRzIGJl dHdlZW4gdHJhbnNhY3Rpb24gY29tbWl0IGFuZCBmbHVzaGluZyBXQUwgdG8gZGlzay4nLApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vc2xvdC5oCmluZGV4IGZlNjIxNjJjZGUzLi4zMjUzZjEwOGZmYyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Nsb3QuaApAQCAtNjYsMTAgKzY2LDEyIEBAIHR5cGVkZWYgZW51bSBSZXBsaWNhdGlv blNsb3RJbnZhbGlkYXRpb25DYXVzZQogCVJTX0lOVkFMX1dBTF9MRVZFTCA9ICgxIDw8IDIpLAog CS8qIGlkbGUgc2xvdCB0aW1lb3V0IGhhcyBvY2N1cnJlZCAqLwogCVJTX0lOVkFMX0lETEVfVElN RU9VVCA9ICgxIDw8IDMpLAorCS8qIHNsb3QncyB4bWluIG9yIGNhdGFsb2dfeG1pbiBoYXMgcmVh Y2hlZCBtYXggeGlkIGFnZSAqLworCVJTX0lOVkFMX1hJRF9BR0UgPSAoMSA8PCA0KSwKIH0gUmVw bGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2U7CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIGlu dmFsaWRhdGlvbiBjYXVzZXMgKi8KLSNkZWZpbmUJUlNfSU5WQUxfTUFYX0NBVVNFUyA0CisjZGVm aW5lCVJTX0lOVkFMX01BWF9DQVVTRVMgNQogCiAvKgogICogT24tRGlzayBkYXRhIG9mIGEgcmVw bGljYXRpb24gc2xvdCwgcHJlc2VydmVkIGFjcm9zcyByZXN0YXJ0cy4KQEAgLTI5Myw2ICsyOTUs NyBAQCBleHRlcm4gUEdETExJTVBPUlQgUmVwbGljYXRpb25TbG90ICpNeVJlcGxpY2F0aW9uU2xv dDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOwogZXh0ZXJu IFBHRExMSU1QT1JUIGNoYXIgKnN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzOwogZXh0ZXJuIFBH RExMSU1QT1JUIGludCBpZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGltZW91dF9zZWNzOworZXh0ZXJu IFBHRExMSU1QT1JUIGludCBtYXhfc2xvdF94aWRfYWdlOwogCiAvKiBzaG1lbSBpbml0aWFsaXph dGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVybiBTaXplIFJlcGxpY2F0aW9uU2xvdHNTaG1lbVNpemUo dm9pZCk7CkBAIC0zNTAsNCArMzUzLDYgQEAgZXh0ZXJuIGJvb2wgU2xvdEV4aXN0c0luU3luY1N0 YW5kYnlTbG90cyhjb25zdCBjaGFyICpzbG90X25hbWUpOwogZXh0ZXJuIGJvb2wgU3RhbmRieVNs b3RzSGF2ZUNhdWdodHVwKFhMb2dSZWNQdHIgd2FpdF9mb3JfbHNuLCBpbnQgZWxldmVsKTsKIGV4 dGVybiB2b2lkIFdhaXRGb3JTdGFuZGJ5Q29uZmlybWF0aW9uKFhMb2dSZWNQdHIgd2FpdF9mb3Jf bHNuKTsKIAorZXh0ZXJuIGJvb2wgUmVwbGljYXRpb25TbG90SXNYSURBZ2VkKFRyYW5zYWN0aW9u SWQgeG1pbiwgVHJhbnNhY3Rpb25JZCBjYXRhbG9nX3htaW4pOworCiAjZW5kaWYJCQkJCQkJLyog U0xPVF9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA0OV9pbnZhbGlkYXRl X3hpZF9hZ2VkX3Nsb3RzLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDlfaW52YWxpZGF0ZV94 aWRfYWdlZF9zbG90cy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u ZjFlOGYwMDNmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzA0OV9p bnZhbGlkYXRlX3hpZF9hZ2VkX3Nsb3RzLnBsCkBAIC0wLDAgKzEsMjQwIEBACisjIENvcHlyaWdo dCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0 IGZvciByZXBsaWNhdGlvbiBzbG90cyBpbnZhbGlkYXRpb24gZHVlIHRvIFhJRCBhZ2UKK3VzZSBz dHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpCYWNrZ3JvdW5kUHNxbDsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgV2FpdCBmb3Ig c2xvdCB0byBmaXJzdCBiZWNvbWUgaW5hY3RpdmUgYW5kIHRoZW4gZ2V0IGludmFsaWRhdGVkCitz dWIgd2FpdF9mb3Jfc2xvdF9pbnZhbGlkYXRpb24KK3sKKwlteSAoJG5vZGUsICRzbG90X25hbWUs ICRyZWFzb24pID0gQF87CisJbXkgJG5hbWUgPSAkbm9kZS0+bmFtZTsKKworCSMgV2FpdCBmb3Ig dGhlIGluYWN0aXZlIHJlcGxpY2F0aW9uIHNsb3QgdG8gYmUgaW52YWxpZGF0ZWQKKwkkbm9kZS0+ cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgcXFbCisJCVNFTEVDVCBDT1VOVChzbG90 X25hbWUpID0gMSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzCisJCQlXSEVSRSBzbG90X25hbWUg PSAnJHNsb3RfbmFtZScgQU5ECisJCQlpbnZhbGlkYXRpb25fcmVhc29uID0gJyRyZWFzb24nOwor CV0pCisJICBvciBkaWUKKwkgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgaW5hY3RpdmUg c2xvdCAkc2xvdF9uYW1lIHRvIGJlIGludmFsaWRhdGVkIG9uIG5vZGUgJG5hbWUiOworfQorCisj IERvIHNvbWUgd29yayBmb3IgYWR2YW5jaW5nIHhpZHMgb24gYSBnaXZlbiBub2RlCitzdWIgYWR2 YW5jZV94aWRzCit7CisJbXkgKCRub2RlLCAkdGFibGVfbmFtZSkgPSBAXzsKKworCSRub2RlLT5z YWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHFxWworCQlkbyBcJFwkCisJCWJlZ2luCisJCWZvciBp IGluIDEwMDAwLi4xMTAwMCBsb29wCisJCQktLSB1c2UgYW4gZXhjZXB0aW9uIGJsb2NrIHNvIHRo YXQgZWFjaCBpdGVyYXRpb24gZWF0cyBhbiBYSUQKKwkJCWJlZ2luCisJCQlpbnNlcnQgaW50byAk dGFibGVfbmFtZSB2YWx1ZXMgKGkpOworCQkJZXhjZXB0aW9uCisJCQl3aGVuIGRpdmlzaW9uX2J5 X3plcm8gdGhlbiBudWxsOworCQkJZW5kOworCQllbmQgbG9vcDsKKwkJZW5kXCRcJDsKKwldKTsK K30KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUZXN0Y2FzZSBzdGFydDogSW52YWxpZGF0 ZSBzdHJlYW1pbmcgc3RhbmRieSdzIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UKKyMgR1VD LgorCisjIEluaXRpYWxpemUgcHJpbWFyeSBub2RlCitteSAkcHJpbWFyeSA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOworJHByaW1hcnktPmluaXQoYWxsb3dzX3N0 cmVhbWluZyA9PiAnbG9naWNhbCcpOworCisjIENvbmZpZ3VyZSBwcmltYXJ5IHdpdGggWElEIGFn ZSBzZXR0aW5ncworJHByaW1hcnktPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBx cXsKK21heF9zbG90X3hpZF9hZ2UgPSA1MDAKK30pOworCiskcHJpbWFyeS0+c3RhcnQ7CisKKyMg VGFrZSBhIGJhY2t1cCBmb3IgY3JlYXRpbmcgc3RhbmRieQorbXkgJGJhY2t1cF9uYW1lID0gJ2Jh Y2t1cCc7CiskcHJpbWFyeS0+YmFja3VwKCRiYWNrdXBfbmFtZSk7CisKKyMgQ3JlYXRlIGEgc3Rh bmRieSBsaW5raW5nIHRvIHRoZSBwcmltYXJ5IHVzaW5nIHRoZSByZXBsaWNhdGlvbiBzbG90Citt eSAkc3RhbmRieSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieScpOwor JHN0YW5kYnktPmluaXRfZnJvbV9iYWNrdXAoJHByaW1hcnksICRiYWNrdXBfbmFtZSwgaGFzX3N0 cmVhbWluZyA9PiAxKTsKKworIyBFbmFibGUgaHNfZmVlZGJhY2suIFRoZSBzbG90IHNob3VsZCBn YWluIGFuIHhtaW4uIFdlIHNldCB0aGUgc3RhdHVzIGludGVydmFsCisjIHNvIHdlJ2xsIHNlZSB0 aGUgcmVzdWx0cyBwcm9tcHRseS4KKyRzdGFuZGJ5LT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNx bC5jb25mJywgcXsKK3ByaW1hcnlfc2xvdF9uYW1lID0gJ3NiX3Nsb3QnCitob3Rfc3RhbmRieV9m ZWVkYmFjayA9IG9uCit3YWxfcmVjZWl2ZXJfc3RhdHVzX2ludGVydmFsID0gMQorbWF4X3N0YW5k Ynlfc3RyZWFtaW5nX2RlbGF5ID0gMzYwMDAwMAorfSk7CisKKyRwcmltYXJ5LT5zYWZlX3BzcWwo CisJJ3Bvc3RncmVzJywgcXFbCisgICAgU0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNhbF9yZXBsaWNh dGlvbl9zbG90KHNsb3RfbmFtZSA6PSAnc2Jfc2xvdCcsIGltbWVkaWF0ZWx5X3Jlc2VydmUgOj0g dHJ1ZSk7CitdKTsKKworJHN0YW5kYnktPnN0YXJ0OworCisjIENyZWF0ZSBzb21lIGNvbnRlbnQg b24gcHJpbWFyeSB0byBtb3ZlIHhtaW4KKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQ1JFQVRFIFRBQkxFIHRhYl9pbnQgQVMgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLDEwKSBB UyBhIik7CisKKyMgV2FpdCB1bnRpbCBzdGFuZGJ5IGhhcyByZXBsYXllZCBlbm91Z2ggZGF0YQor JHByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnkpOworCiskcHJpbWFyeS0+cG9sbF9x dWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlTRUxFQ1QgKHhtaW4gSVMgTk9UIE5VTEwp IE9SIChjYXRhbG9nX3htaW4gSVMgTk9UIE5VTEwpCisJCUZST00gcGdfY2F0YWxvZy5wZ19yZXBs aWNhdGlvbl9zbG90cworCQlXSEVSRSBzbG90X25hbWUgPSAnc2Jfc2xvdCc7CitdKSBvciBkaWUg IlRpbWVkIG91dCB3YWl0aW5nIGZvciBzbG90IHNiX3Nsb3QgeG1pbiB0byBhZHZhbmNlIjsKKwor IyBTdG9wIHN0YW5kYnkgdG8gbWFrZSB0aGUgcmVwbGljYXRpb24gc2xvdCdzIHhtaW4gb24gcHJp bWFyeSB0byBhZ2UKKworIyBSZWFkIG9uIHN0YW5kYnkgdGhhdCBjYXVzZXMgeG1pbiB0byBiZSBo ZWxkIG9uIHNsb3QKK215ICRzdGFuZGJ5X3Nlc3Npb24gPSAkc3RhbmRieS0+aW50ZXJhY3RpdmVf cHNxbCgncG9zdGdyZXMnKTsKKyRzdGFuZGJ5X3Nlc3Npb24tPnF1ZXJ5KCJCRUdJTjsgU0VUIGRl ZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uID0gJ3JlcGVhdGFibGUgcmVhZCc7IFNFTEVDVCAq IEZST00gdGFiX2ludDsiKTsKKworIyRzdGFuZGJ5LT5zdG9wOworCisjIERvIHNvbWUgd29yayB0 byBhZHZhbmNlIHhpZHMgb24gcHJpbWFyeQorYWR2YW5jZV94aWRzKCRwcmltYXJ5LCAndGFiX2lu dCcpOworCisjIFdhaXQgZm9yIHRoZSByZXBsaWNhdGlvbiBzbG90IHRvIGJlY29tZSBpbmFjdGl2 ZSBhbmQgdGhlbiBpbnZhbGlkYXRlZCBkdWUgdG8KKyMgWElEIGFnZS4KKyRwcmltYXJ5LT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNIRUNLUE9JTlQiKTsKK3dhaXRfZm9yX3Nsb3RfaW52YWxpZGF0 aW9uKCRwcmltYXJ5LCAnc2Jfc2xvdCcsICd4aWRfYWdlZCcpOworCiskc3RhbmRieV9zZXNzaW9u LT5xdWl0OworJHN0YW5kYnktPnN0b3A7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIHN0 cmVhbWluZyBzdGFuZGJ5J3Mgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZQorIyBHVUMuCisj ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNh c2Ugc3RhcnQ6IEludmFsaWRhdGUgbG9naWNhbCBzdWJzY3JpYmVyJ3Mgc2xvdCBkdWUgdG8gbWF4 X3Nsb3RfeGlkX2FnZQorIyBHVUMuCisKKyMgQ3JlYXRlIGEgc3Vic2NyaWJlciBub2RlCitteSAk c3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicp OworJHN1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJHN1 YnNjcmliZXItPnN0YXJ0OworCisjIENyZWF0ZSB0YWJsZXMgb24gYm90aCBwcmltYXJ5IGFuZCBz dWJzY3JpYmVyCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dGVzdF90YmwgKGlkIGludCkiKTsKKyRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0ZXN0X3RibCAoaWQgaW50KSIpOworCisjIEluc2VydCBzb21lIGluaXRp YWwgZGF0YQorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0 ZXN0X3RibCBWQUxVRVMgKGdlbmVyYXRlX3NlcmllcygxLCA1KSk7Iik7CisKKyMgU2V0dXAgbG9n aWNhbCByZXBsaWNhdGlvbgorbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJHByaW1hcnktPmNvbm5z dHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7CiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBQVUJMSUNBVElPTiBwdWIgRk9SIFRBQkxFIHRlc3RfdGJsIik7CisKKyRzdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIg Q09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiBwdWIgV0lUSCAoc2xv dF9uYW1lID0gJ2xzdWJfc2xvdCcpIgorKTsKKworIyBXYWl0IGZvciBpbml0aWFsIHN5bmMgdG8g Y29tcGxldGUKKyRzdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHJpbWFy eSwgJ3N1YicpOworCitteSAkcmVzdWx0ID0gJHN1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YmwiKTsKK2lzKCRyZXN1bHQsIHFxKDUp LCAiY2hlY2sgaW5pdGlhbCBjb3B5IHdhcyBkb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIik7 CisKKyMgV2FpdCBmb3IgdGhlIGxvZ2ljYWwgc2xvdCB0byBnZXQgY2F0YWxvZ194bWluIChsb2dp Y2FsIHNsb3RzIHVzZSBjYXRhbG9nX3htaW4sIG5vdCB4bWluKQorJHByaW1hcnktPnBvbGxfcXVl cnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXFbCisJU0VMRUNUIHhtaW4gSVMgTlVMTCBBTkQgY2F0 YWxvZ194bWluIElTIE5PVCBOVUxMCisJRlJPTSBwZ19jYXRhbG9nLnBnX3JlcGxpY2F0aW9uX3Ns b3RzCisJV0hFUkUgc2xvdF9uYW1lID0gJ2xzdWJfc2xvdCc7CitdKSBvciBkaWUgIlRpbWVkIG91 dCB3YWl0aW5nIGZvciBzbG90IGxzdWJfc2xvdCBjYXRhbG9nX3htaW4gdG8gYWR2YW5jZSI7CisK KyMgU3RvcCBzdWJzY3JpYmVyIHRvIG1ha2UgdGhlIHJlcGxpY2F0aW9uIHNsb3Qgb24gcHJpbWFy eSBpbmFjdGl2ZQorJHN1YnNjcmliZXItPnN0b3A7CisKKyMgRG8gc29tZSB3b3JrIHRvIGFkdmFu Y2UgeGlkcyBvbiBwcmltYXJ5CithZHZhbmNlX3hpZHMoJHByaW1hcnksICd0ZXN0X3RibCcpOwor CisjIFdhaXQgZm9yIHRoZSByZXBsaWNhdGlvbiBzbG90IHRvIGJlY29tZSBpbmFjdGl2ZSBhbmQg dGhlbiBpbnZhbGlkYXRlZCBkdWUgdG8KKyMgWElEIGFnZS4KKyRwcmltYXJ5LT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNIRUNLUE9JTlQiKTsKK3dhaXRfZm9yX3Nsb3RfaW52YWxpZGF0aW9uKCRw cmltYXJ5LCAnbHN1Yl9zbG90JywgJ3hpZF9hZ2VkJyk7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZh bGlkYXRlIGxvZ2ljYWwgc3Vic2NyaWJlcidzIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UK KyMgR1VDLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisjIFRlc3RjYXNlIHN0YXJ0OiBUZXN0IFZBQ1VVTSBjb21tYW5kIHRyaWdnZXJpbmcgc2xvdCBp bnZhbGlkYXRpb24KKyMKKworIyBDcmVhdGUgYW5vdGhlciBwaHlzaWNhbCByZXBsaWNhdGlvbiBz bG90IGZvciBWQUNVVU0gdGVzdAorJHByaW1hcnktPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBx cVsKKyAgICBTRUxFQ1QgcGdfY3JlYXRlX3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Nsb3Qoc2xvdF9u YW1lIDo9ICd2YWN1dW1fdGVzdF9zbG90JywgaW1tZWRpYXRlbHlfcmVzZXJ2ZSA6PSB0cnVlKTsK K10pOworCisjIENyZWF0ZSBhIG5ldyBzdGFuZGJ5IGZvciB0aGlzIHRlc3QKK215ICRzdGFuZGJ5 X3ZhY3V1bSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieV92YWN1dW0n KTsKKyRzdGFuZGJ5X3ZhY3V1bS0+aW5pdF9mcm9tX2JhY2t1cCgkcHJpbWFyeSwgJGJhY2t1cF9u YW1lLCBoYXNfc3RyZWFtaW5nID0+IDEpOworCiskc3RhbmRieV92YWN1dW0tPmFwcGVuZF9jb25m KAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxeworcHJpbWFyeV9zbG90X25hbWUgPSAndmFjdXVtX3Rl c3Rfc2xvdCcKK2hvdF9zdGFuZGJ5X2ZlZWRiYWNrID0gb24KK3dhbF9yZWNlaXZlcl9zdGF0dXNf aW50ZXJ2YWwgPSAxCit9KTsKKworJHN0YW5kYnlfdmFjdXVtLT5zdGFydDsKKworIyBXYWl0IHVu dGlsIHN0YW5kYnkgaGFzIHJlcGxheWVkIGVub3VnaCBkYXRhIGFuZCBzbG90IGdldHMgeG1pbgor JHByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnlfdmFjdXVtKTsKKworJHByaW1hcnkt PnBvbGxfcXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXFbCisJU0VMRUNUICh4bWluIElTIE5P VCBOVUxMKSBPUiAoY2F0YWxvZ194bWluIElTIE5PVCBOVUxMKQorCQlGUk9NIHBnX2NhdGFsb2cu cGdfcmVwbGljYXRpb25fc2xvdHMKKwkJV0hFUkUgc2xvdF9uYW1lID0gJ3ZhY3V1bV90ZXN0X3Ns b3QnOworXSkgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc2xvdCB2YWN1dW1fdGVzdF9z bG90IHhtaW4gdG8gYWR2YW5jZSI7CisKKyMgU3RvcCBzdGFuZGJ5IHRvIG1ha2UgdGhlIHJlcGxp Y2F0aW9uIHNsb3QncyB4bWluIG9uIHByaW1hcnkgdG8gYWdlCiskc3RhbmRieV92YWN1dW0tPnN0 b3A7CisKKyMgRG8gc29tZSB3b3JrIHRvIGFkdmFuY2UgeGlkcyBvbiBwcmltYXJ5CithZHZhbmNl X3hpZHMoJHByaW1hcnksICd0YWJfaW50Jyk7CisKKyMgVXNlIFZBQ1VVTSB0byB0cmlnZ2VyIHNs b3QgaW52YWxpZGF0aW9uIChpbnN0ZWFkIG9mIENIRUNLUE9JTlQpCisjIFRoaXMgdGVzdHMgdGhh dCBWQUNVVU0gY29tbWFuZCBjYW4gdHJpZ2dlciBYSUQgYWdlIGludmFsaWRhdGlvbgorJHByaW1h cnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIik7CisKKyMgV2FpdCBmb3IgdGhlIHJl cGxpY2F0aW9uIHNsb3QgdG8gYmVjb21lIGludmFsaWRhdGVkIGR1ZSB0byBYSUQgYWdlIHRyaWdn ZXJlZCBieSBWQUNVVU0KKyRwcmltYXJ5LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3Jlcycs IHFxWworCVNFTEVDVCBDT1VOVChzbG90X25hbWUpID0gMSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Ns b3RzCisJCVdIRVJFIHNsb3RfbmFtZSA9ICd2YWN1dW1fdGVzdF9zbG90JyBBTkQKKwkJaW52YWxp ZGF0aW9uX3JlYXNvbiA9ICd4aWRfYWdlZCc7CitdKQorICBvciBkaWUgIlRpbWVkIG91dCB3aGls ZSB3YWl0aW5nIGZvciBzbG90IHZhY3V1bV90ZXN0X3Nsb3QgdG8gYmUgaW52YWxpZGF0ZWQgYnkg VkFDVVVNIjsKKworIyBUZXN0Y2FzZSBlbmQ6IFRlc3QgVkFDVVVNIGNvbW1hbmQgdHJpZ2dlcmlu ZyBzbG90IGludmFsaWRhdGlvbgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitvaygxLCAiYWxs IFhJRCBhZ2UgaW52YWxpZGF0aW9uIHRlc3RzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiKTsKKwor ZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjUwLjEKCg== --0000000000002b9b5a063f300837--