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 1w3cQl-001Ol3-38 for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Mar 2026 16:10:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w3cQk-007689-1i for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Mar 2026 16:10:34 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3cQk-007681-0c for pgsql-hackers@lists.postgresql.org; Fri, 20 Mar 2026 16:10:34 +0000 Received: from mail-ot1-x32a.google.com ([2607:f8b0:4864:20::32a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w3cQh-00000000CfL-23an for pgsql-hackers@postgresql.org; Fri, 20 Mar 2026 16:10:34 +0000 Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-7d75371d873so831146a34.3 for ; Fri, 20 Mar 2026 09:10:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774023030; cv=none; d=google.com; s=arc-20240605; b=Z+z7CSAb+pGsUGBO1tqVG5aPD14LxJCmP6Wrlxh0RW8ZdMWrK/3mtWeLbXf30GjcdB JFanOR2h9G1XOsCQVUFQFo+CUUz+Cut8gAWjTQfocYZFkO5zrb1PXvatPKP3s26UR+4Y F47i26Kn/86K4ntMAZWI9mopSs+j7SCaNlltFKCWVFFySkF5n/vFfJT3mQeyF++xeR5k cSdzaHowaKPQoRFcA6IhAGnDre19L939GCmncqj8g6TTrtWJbg4TE8S/A4ETaxHY936x D3iQhbw+8juz52YNwqexeWGwpZ7GjRuqOh8f/cpgV+56/OGC8cqlBV1CvUl38+76Aez3 BGXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=2iYJrzvpqv6dPoeJbPfzl0tgLCEuaXpNMg0BOfUSU8c=; fh=HF83OVg8qnVcitXplYPoFeU+gUQjX46Hf8TB8rUG1gU=; b=aIwVcp4VG9eZL/CaH7gINyl4pxjJ+7/vn8ZKLnEvO++pggUmY6VTvCNmWoG8HimL1T QK+uJGf4AP6kNSbH3Xy2jG5rHwgUSs5hmHEFaiVbjkNVHV12I0jn+8PRoWZVPPincF6C 0/fLsedKSsc1fUk9ESo2dxNrYFNlxMh0g4D9c5cqMoDkOGUYU3uGEzmBieaeGyKvFIWC 7SALuuqCxz9aDGGgVZ8wc/HQ5HMMSEqeA278YvdqnbWAIWFWNEmC3sNSVGJEvuj0RZMK /gFK75LGpSUCIh3/LdYt95Jxkmmgq3wSKEyZ4iiU/Zz4OITMmZI/uPOGbAIhgxuKzue/ 17gQ==; darn=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=20230601; t=1774023030; x=1774627830; 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=2iYJrzvpqv6dPoeJbPfzl0tgLCEuaXpNMg0BOfUSU8c=; b=bDCB+OVDMiDJtFp2/n9kTNkYwtEcodsCiXgRdACN9M5faQkswzIOMkWiggofRprY8e ACFCeluXm1LibdJGmwgTNAxrsbOt+Sv1KjY3OlxSZYXqQhCh/6PGc11YdkpVDFx0h15Z Zt7UXLqy2uJ4Fj1/T1oaAtTNHhJyIGEE0cyRmboQRa7t6WEyrR3r/+imZ/BlUld0fCF2 1RdyBBUKKv0e715hjcwjsyM7NLAqIXnK1wAkNEX/f5QnspUE3/PxuPA/qLZoJWmk4/7I wzWznv553sb9fwCgb464eqUkrybqzjTgZ9bqzUuxBQb2yFPGESLK3TDrQA0CNYhB0uj8 aHCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774023030; x=1774627830; h=cc: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=2iYJrzvpqv6dPoeJbPfzl0tgLCEuaXpNMg0BOfUSU8c=; b=kjpgCNTlQQGRW6BBEeOcVyPlByCVPaCEhD9RUyay1ZhIyb4+pJSq+MMwbcI0DV4lWb DFij8RkntyZilw4OQ4Ku0EJY0tENAHh+5riMB4S+QHYRUVAOSUxgJyEvDmqrXps2KV62 BH/cZRB2XJaewj2twhYy4cu1yJaqvFhS5PYXj5gjzsAaYQAzhNKSj94DrdH3YIg7nA9L TpR0lk7j5MWgzb/rdXJWX3rUd4Lcbfg2X/+5b/0EEfB4PE1aIptBT0meVRxc8ATYIRoI WMnAxvQc/BV+0aAV+rgs2oUxhlm64gqCPE8fL/05600pdR6jlF7+2GHahUOy7tpXihQx xv7g== X-Gm-Message-State: AOJu0YzVOoS+A94YKFRFULj0qBG6HLeTTLZXOSYc8sWsqN4ibCGEfv/j vNWyWn/wPLPjGU+J9IAc9GG7gARiPfNOSz1i3/QQtbVxw+A5wWKzXmtbxReLxhw/sZEL8Q9SYlu nunYCmogWtWboWM5MyaIIHaNZ65JZ+CcFA7hG X-Gm-Gg: ATEYQzxEMW/PpbjpaqBdwvFhOeI36wEYKHv298In9R9U0g0sZC6sPkqKpnTxxaWzOIH sUs+khQckUwlkhLLefTHZAJMiUug3uEGVwWLi+dkhU8lOyQt+0Ze/QGgIjf3+5QR0Ch885lQPr5 ur58cjXGc7w8gWGb7Zj3EmCDrx3gpkHEfVqpszFZOSiv9hyP8wDGOaCz8hwVFrlnXM4SsuteOLr AcBIdh9jpey7ZOZkcQl+WMJRJRnZIy5kZY/N3rFzoksGuCO/g+5NxTA0y4VqNGWitSgDSwbLBVP PW2qlxnnP4FDnS8K5pEE+ttn4cLQKON6lYFjVdJLIlABxXIdyXY= X-Received: by 2002:a05:6820:4dc8:b0:67c:1446:fb89 with SMTP id 006d021491bc7-67c22fb4d07mr2515254eaf.49.1774023029908; Fri, 20 Mar 2026 09:10:29 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Fri, 20 Mar 2026 09:10:00 -0700 X-Gm-Features: AaiRm50bbObDnkiQHPKPZjOAWk3X4sM8on6crVp6d5KE9RsQ-gdOd4F6S5_X5F4 Message-ID: Subject: Re: Introduce XID age based replication slot invalidation To: "Hayato Kuroda (Fujitsu)" , John H Cc: PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000085b962064d76ecb3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000085b962064d76ecb3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi John, Thank you for sending in the rebased patch earlier. I will have some cycles going forward and I would like to continue with this work. Hi Kuroda-san, Thank you for reviewing the patch. On Fri, Sep 19, 2025 at 1:07=E2=80=AFAM Hayato Kuroda (Fujitsu) wrote: > > IIUC, the feature can directly avoid the wraparound issue than other > invalidation mechanism. The motivation seems enough for me. That's correct. When enabled, replication slots whose XID age exceeds the configured value get invalidated before vacuum computes the XID horizons. This ensures that slots which would otherwise prevent vacuum from freezing heap tuples don't come in the way of XID wraparound prevention. > 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 thu= s > performance can be affected. Do you have insights for it? I made the following design choice: try invalidating only once per vacuum cycle, not per table. While this keeps the cost of checking (incl. the XidGenLock contention) for invalidation to a minimum when there are a large number of tables and replication slots, it can be less effective when individual tables/indexes are large. Invalidating during checkpoints can help to some extent with the large table/index cases. But I'm open to thoughts on this. Please find the attached patch for further review. I fixed the XID age calculation in ReplicationSlotIsXIDAged and adjusted the code comments. -- Bharath Rupireddy Amazon Web Services: https://aws.amazon.com --00000000000085b962064d76ecb3 Content-Type: application/x-patch; name="v1-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Disposition: attachment; filename="v1-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmyj8hk70 RnJvbSA5NmJjYmMzZDNiYWZmMGI4MDFkNTk4MjNjNjA5OTQ5ZmE1MjA4MTNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IEZyaSwgMjAgTWFyIDIwMjYgMDY6NDE6MjQgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxXSBBZGQgWElEIGFnZSBiYXNlZCByZXBsaWNhdGlvbiBzbG90 IGludmFsaWRhdGlvbgoKSW50cm9kdWNlIG1heF9zbG90X3hpZF9hZ2UsIGEgR1VDIHRoYXQgaW52 YWxpZGF0ZXMgcmVwbGljYXRpb24Kc2xvdHMgd2hvc2UgeG1pbiBvciBjYXRhbG9nX3htaW4gZXhj ZWVkcyB0aGUgc3BlY2lmaWVkIGFnZS4KRGlzYWJsZWQgYnkgZGVmYXVsdC4KCklkbGUgb3IgZm9y Z290dGVuIHJlcGxpY2F0aW9uIHNsb3RzIGNhbiBob2xkIGJhY2sgdmFjdXVtLCBsZWFkaW5nCnRv IGJsb2F0IGFuZCBldmVudHVhbGx5IFhJRCB3cmFwYXJvdW5kLiBJbiB0aGUgd29yc3QgY2FzZSB0 aGlzCnJlcXVpcmVzIGRyb3BwaW5nIHRoZSBzbG90IGFuZCBzaW5nbGUtdXNlciBtb2RlIHZhY3V1 bWluZy4gVGhpcwpzZXR0aW5nIGF2b2lkcyB0aGF0IGJ5IHByb2FjdGl2ZWx5IGludmFsaWRhdGlu ZyBzbG90cyB0aGF0IGhhdmUKZmFsbGVuIHRvbyBmYXIgYmVoaW5kLgoKSW52YWxpZGF0aW9uIGNo ZWNrcyBhcmUgcGVyZm9ybWVkIGR1cmluZyBjaGVja3BvaW50IGFuZCB2YWN1dW0KKGluY2x1ZGlu ZyBhdXRvdmFjdXVtKS4KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAg ICAgICAgICAgfCAgMjYgKysKIGRvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAg ICAgICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgICAg ICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jICAgICAgICAgICAg ICAgICB8ICA1MyArKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgICAgICAgICAg ICAgICAgfCAgODMgKysrKystCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJz LmRhdCAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlIHwgICAyICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCAgICAgICAgICAg ICAgICB8ICAgNyArLQogLi4uL3QvMDQ5X2ludmFsaWRhdGVfeGlkX2FnZWRfc2xvdHMucGwgICAg ICAgIHwgMjQwICsrKysrKysrKysrKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCA0MjQgaW5zZXJ0 aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWNv dmVyeS90LzA0OV9pbnZhbGlkYXRlX3hpZF9hZ2VkX3Nsb3RzLnBsCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDhj ZGQ4MjZmYmQzLi4wY2JjYjI1NDMwMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNDc2NCw2ICs0NzY0LDMyIEBA IHJlc3RvcmVfY29tbWFuZCA9ICdjb3B5ICJDOlxcc2VydmVyXFxhcmNoaXZlZGlyXFwlZiIgIiVw IicgICMgV2luZG93cwogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAK KyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLW1heC1zbG90LXhpZC1hZ2UiIHhyZWZsYWJlbD0i bWF4X3Nsb3RfeGlkX2FnZSI+CisgICAgICA8dGVybT48dmFybmFtZT5tYXhfc2xvdF94aWRfYWdl PC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAg ICAgIDxwcmltYXJ5Pjx2YXJuYW1lPm1heF9zbG90X3hpZF9hZ2U8L3Zhcm5hbWU+IGNvbmZpZ3Vy YXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rl cm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIEludmFsaWRhdGUg cmVwbGljYXRpb24gc2xvdHMgd2hvc2UgPGxpdGVyYWw+eG1pbjwvbGl0ZXJhbD4gKHRoZSBvbGRl c3QKKyAgICAgICAgdHJhbnNhY3Rpb24gdGhhdCB0aGlzIHNsb3QgbmVlZHMgdGhlIGRhdGFiYXNl IHRvIHJldGFpbikgb3IKKyAgICAgICAgPGxpdGVyYWw+Y2F0YWxvZ194bWluPC9saXRlcmFsPiAo dGhlIG9sZGVzdCB0cmFuc2FjdGlvbiBhZmZlY3RpbmcgdGhlCisgICAgICAgIHN5c3RlbSBjYXRh bG9ncyB0aGF0IHRoaXMgc2xvdCBuZWVkcyB0aGUgZGF0YWJhc2UgdG8gcmV0YWluKSBoYXMgcmVh Y2hlZAorICAgICAgICB0aGUgYWdlIHNwZWNpZmllZCBieSB0aGlzIHNldHRpbmcuIEEgdmFsdWUg b2YgemVybyAod2hpY2ggaXMgZGVmYXVsdCkKKyAgICAgICAgZGlzYWJsZXMgdGhpcyBmZWF0dXJl LiBVc2VycyBjYW4gc2V0IHRoaXMgdmFsdWUgYW55d2hlcmUgZnJvbSB6ZXJvIHRvCisgICAgICAg IHR3byBiaWxsaW9uLiBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAg ICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBz ZXJ2ZXIgY29tbWFuZAorICAgICAgICBsaW5lLgorICAgICAgIDwvcGFyYT4KKworICAgICAgIDxw YXJhPgorICAgICAgICBUaGlzIGludmFsaWRhdGlvbiBjaGVjayBoYXBwZW5zIGVpdGhlciB3aGVu IHRoZSBzbG90IGlzIGFjcXVpcmVkCisgICAgICAgIGZvciB1c2Ugb3IgZHVyaW5nIHZhY3V1bSBv ciBkdXJpbmcgY2hlY2twb2ludC4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtd2FsLXNl bmRlci10aW1lb3V0IiB4cmVmbGFiZWw9IndhbF9zZW5kZXJfdGltZW91dCI+CiAgICAgICA8dGVy bT48dmFybmFtZT53YWxfc2VuZGVyX3RpbWVvdXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90 eXBlPikKICAgICAgIDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvc3lzdGVt LXZpZXdzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKaW5kZXggOWVlMWEy YmZjNmEuLjFhNTA3YjQzMGY5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdz LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCkBAIC0zMTAyLDYgKzMx MDIsMTQgQEAgU0VMRUNUICogRlJPTSBwZ19sb2NrcyBwbCBMRUZUIEpPSU4gcGdfcHJlcGFyZWRf eGFjdHMgcHB4CiAgICAgICAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLWlkbGUtcmVwbGljYXRpb24t c2xvdC10aW1lb3V0Ii8+IGR1cmF0aW9uLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xp c3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8 bGl0ZXJhbD54aWRfYWdlZDwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0aGUgc2xvdCdzCisgICAgICAg ICAgPGxpdGVyYWw+eG1pbjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+Y2F0YWxvZ194bWluPC9saXRl cmFsPgorICAgICAgICAgIGhhcyByZWFjaGVkIHRoZSBhZ2Ugc3BlY2lmaWVkIGJ5CisgICAgICAg ICAgPHhyZWYgbGlua2VuZD0iZ3VjLW1heC1zbG90LXhpZC1hZ2UiLz4gcGFyYW1ldGVyLgorICAg ICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0 PgogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZy5jCmluZGV4IGY1YzlhMzQzNzRkLi5hODdhYTljMmJlYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYwpAQCAtNzQ0MSw3ICs3NDQxLDcgQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxh Z3MpCiAJICovCiAJWExCeXRlVG9TZWcoUmVkb1JlY1B0ciwgX2xvZ1NlZ05vLCB3YWxfc2VnbWVu dF9zaXplKTsKIAlLZWVwTG9nU2VnKHJlY3B0ciwgJl9sb2dTZWdObyk7Ci0JaWYgKEludmFsaWRh dGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FMX1JFTU9WRUQgfCBSU19JTlZB TF9JRExFX1RJTUVPVVQsCisJaWYgKEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMo UlNfSU5WQUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9JRExFX1RJTUVPVVQgfCBSU19JTlZBTF9Y SURfQUdFLAogCQkJCQkJCQkJCSAgIF9sb2dTZWdObywgSW52YWxpZE9pZCwKIAkJCQkJCQkJCQkg ICBJbnZhbGlkVHJhbnNhY3Rpb25JZCkpCiAJewpAQCAtNzg5OCw3ICs3ODk4LDcgQEAgQ3JlYXRl UmVzdGFydFBvaW50KGludCBmbGFncykKIAogCUlOSkVDVElPTl9QT0lOVCgicmVzdGFydHBvaW50 LWJlZm9yZS1zbG90LWludmFsaWRhdGlvbiIsIE5VTEwpOwogCi0JaWYgKEludmFsaWRhdGVPYnNv bGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9JRExF X1RJTUVPVVQsCisJaWYgKEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5W QUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9JRExFX1RJTUVPVVQgfCBSU19JTlZBTF9YSURfQUdF LAogCQkJCQkJCQkJCSAgIF9sb2dTZWdObywgSW52YWxpZE9pZCwKIAkJCQkJCQkJCQkgICBJbnZh bGlkVHJhbnNhY3Rpb25JZCkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv dmFjdXVtLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCBiY2UzYTJkYWEy NC4uY2IyZDgyNzJlOGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC00OCw2ICs0OCw3IEBACiAj aW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9i Z3dvcmtlcl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgor I2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5o IgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwu aCIKQEAgLTEzMSw2ICsxMzIsNyBAQCBzdGF0aWMgYm9vbCB2YWN1dW1fcmVsKE9pZCByZWxpZCwg UmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogc3RhdGljIGRvdWJsZSBj b21wdXRlX3BhcmFsbGVsX2RlbGF5KHZvaWQpOwogc3RhdGljIFZhY09wdFZhbHVlIGdldF92YWNv cHR2YWxfZnJvbV9ib29sZWFuKERlZkVsZW0gKmRlZik7CiBzdGF0aWMgYm9vbCB2YWNfdGlkX3Jl YXBlZChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CitzdGF0aWMgdm9pZCB0cnlf cmVwbGljYXRpb25fc2xvdF9pbnZhbGlkYXRpb24odm9pZCk7CiAKIC8qCiAgKiBHVUMgY2hlY2sg ZnVuY3Rpb24gdG8gZW5zdXJlIEdVQyB2YWx1ZSBzcGVjaWZpZWQgaXMgd2l0aGluIHRoZSBhbGxv d2FibGUKQEAgLTQ2OCw2ICs0NzAsMzQgQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3RhdGUs IFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIAlNZW1vcnlDb250ZXh0RGVs ZXRlKHZhY19jb250ZXh0KTsKIH0KIAorLyoKKyAqIFRyeSBpbnZhbGlkYXRpbmcgcmVwbGljYXRp b24gc2xvdHMgYmFzZWQgb24gY3VycmVudCByZXBsaWNhdGlvbiBzbG90IHhtaW4KKyAqIGxpbWl0 cyBvbmNlIGV2ZXJ5IHZhY3V1bSBjeWNsZS4KKyAqLworc3RhdGljIHZvaWQKK3RyeV9yZXBsaWNh dGlvbl9zbG90X2ludmFsaWRhdGlvbih2b2lkKQoreworCVRyYW5zYWN0aW9uSWQgbWluX3Nsb3Rf eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVRyYW5zYWN0aW9uSWQgbWluX3Nsb3RfY2F0 YWxvZ194bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisKKwlpZiAobWF4X3Nsb3RfeGlkX2Fn ZSA9PSAwKQorCQlyZXR1cm47CisKKwlQcm9jQXJyYXlHZXRSZXBsaWNhdGlvblNsb3RYbWluKCZt aW5fc2xvdF94bWluLCAmbWluX3Nsb3RfY2F0YWxvZ194bWluKTsKKworCWlmIChSZXBsaWNhdGlv blNsb3RJc1hJREFnZWQobWluX3Nsb3RfeG1pbiwgbWluX3Nsb3RfY2F0YWxvZ194bWluKSkKKwl7 CisJCS8qCisJCSAqIE5vdGUgdGhhdCBJbnZhbGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3Rz IGlzIGFsc28gY2FsbGVkIGFzIHBhcnQKKwkJICogb2YgQ0hFQ0tQT0lOVCwgYW5kIGVtaXR0aW5n IEVSUk9ScyBmcm9tIHdpdGhpbiBpcyBhdm9pZGVkIGFscmVhZHkuCisJCSAqIFRoZXJlZm9yZSwg dGhlcmUgaXMgbm8gY29uY2VybiBoZXJlIHRoYXQgYW55IEVSUk9SIGZyb20KKwkJICogaW52YWxp ZGF0aW5nIHJlcGxpY2F0aW9uIHNsb3RzIGJsb2NrcyBWQUNVVU0uCisJCSAqLworCQlJbnZhbGlk YXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzKFJTX0lOVkFMX1hJRF9BR0UsIDAsCisJCQkJCQkJ CQkJICAgSW52YWxpZE9pZCwgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCX0KK30KKwogLyoKICAq IEludGVybmFsIGVudHJ5IHBvaW50IGZvciBhdXRvdmFjdXVtIGFuZCB0aGUgVkFDVVVNIC8gQU5B TFlaRSBjb21tYW5kcy4KICAqCkBAIC00OTUsNyArNTI1LDcgQEAgdmFjdXVtKExpc3QgKnJlbGF0 aW9ucywgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0 cmF0ZWcKIAkgICBNZW1vcnlDb250ZXh0IHZhY19jb250ZXh0LCBib29sIGlzVG9wTGV2ZWwpCiB7 CiAJc3RhdGljIGJvb2wgaW5fdmFjdXVtID0gZmFsc2U7Ci0KKwlzdGF0aWMgYm9vbCBmaXJzdF90 aW1lID0gdHJ1ZTsKIAljb25zdCBjaGFyICpzdG10dHlwZTsKIAl2b2xhdGlsZSBib29sIGluX291 dGVyX3hhY3QsCiAJCQkJdXNlX293bl94YWN0czsKQEAgLTYwOCw2ICs2MzgsMjcgQEAgdmFjdXVt KExpc3QgKnJlbGF0aW9ucywgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywgQnVmZmVyQWNjZXNz U3RyYXRlZ3kgYnN0cmF0ZWcKIAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJfQogCisJ aWYgKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX1ZBQ1VVTSkKKwl7CisJCS8qCisJCSAqIENoZWNr IG9uY2UgcGVyIHZhY3V1bSBjeWNsZSwgbm90IHBlci1yZWxhdGlvbiwgYmVjYXVzZSByZXBsaWNh dGlvbgorCQkgKiBzbG90IHhtaW4gYWdlIGlzIGEgZ2xvYmFsIHByb3BlcnR5IHRoYXQgZG9lc24n dCBjaGFuZ2UgYmFzZWQgb24KKwkJICogd2hpY2ggdGFibGUgd2UgdmFjdXVtLiBDaGVja3BvaW50 cyBhbHNvIGNoZWNrLCBzbyBzbG90cyB3b24ndCBnbworCQkgKiB1bmRldGVjdGVkIGZvciBsb25n IGV2ZW4gaWYgdmFjdXVtIGRvZXNuJ3QgcnVuLgorCQkgKgorCQkgKiBFYWNoIGF1dG92YWN1dW0g d29ya2VyIGNoZWNrcyBvbmx5IG9uY2UsIG9uIGl0cyBmaXJzdCB2YWN1dW0oKQorCQkgKiBjYWxs OyBzdWJzZXF1ZW50IGNhbGxzIHdpdGhpbiB0aGUgc2FtZSB3b3JrZXIgc2tpcCB0aGUgY2hlY2su IFRoZQorCQkgKiBuZXh0IG5ld2x5IGxhdW5jaGVkIGF1dG92YWN1dW0gd29ya2VyIHdpbGwgY2hl Y2sgYWdhaW4uIE1hbnVhbAorCQkgKiBWQUNVVU0gYWx3YXlzIGNoZWNrcywgc2luY2UgdGhlIHNh bWUgYmFja2VuZCBtYXkgaXNzdWUgVkFDVVVNCisJCSAqIHJlcGVhdGVkbHkgYWNyb3NzIGl0cyBs aWZldGltZS4KKwkJICovCisJCWlmIChmaXJzdF90aW1lKQorCQkJdHJ5X3JlcGxpY2F0aW9uX3Ns b3RfaW52YWxpZGF0aW9uKCk7CisKKwkJaWYgKEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSkK KwkJCWZpcnN0X3RpbWUgPSBmYWxzZTsKKwl9CisKIAkvKiBUdXJuIHZhY3V1bSBjb3N0IGFjY291 bnRpbmcgb24gb3Igb2ZmLCBhbmQgc2V0L2NsZWFyIGluX3ZhY3V1bSAqLwogCVBHX1RSWSgpOwog CXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRleCBhOTA5MmZjMjM4Mi4uZTFlMDI4MmYxMDYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9zbG90LmMKQEAgLTExNyw2ICsxMTcsNyBAQCBzdGF0aWMgY29uc3QgU2xv dEludmFsaWRhdGlvbkNhdXNlTWFwIFNsb3RJbnZhbGlkYXRpb25DYXVzZXNbXSA9IHsKIAl7UlNf SU5WQUxfSE9SSVpPTiwgInJvd3NfcmVtb3ZlZCJ9LAogCXtSU19JTlZBTF9XQUxfTEVWRUwsICJ3 YWxfbGV2ZWxfaW5zdWZmaWNpZW50In0sCiAJe1JTX0lOVkFMX0lETEVfVElNRU9VVCwgImlkbGVf dGltZW91dCJ9LAorCXtSU19JTlZBTF9YSURfQUdFLCAieGlkX2FnZWQifSwKIH07CiAKIC8qCkBA IC0xNTgsNiArMTU5LDEyIEBAIGludAkJCW1heF9yZXBsaWNhdGlvbl9zbG90cyA9IDEwOyAvKiB0 aGUgbWF4aW11bSBudW1iZXIgb2YgcmVwbGljYXRpb24KICAqLwogaW50CQkJaWRsZV9yZXBsaWNh dGlvbl9zbG90X3RpbWVvdXRfc2VjcyA9IDA7CiAKKy8qCisgKiBJbnZhbGlkYXRlIHJlcGxpY2F0 aW9uIHNsb3RzIHRoYXQgaGF2ZSB4bWluIG9yIGNhdGFsb2dfeG1pbiBncmVhdGVyCisgKiB0aGFu IHRoZSBzcGVjaWZpZWQgYWdlOyAnMCcgZGlzYWJsZXMgaXQuCisgKi8KK2ludAkJCW1heF9zbG90 X3hpZF9hZ2UgPSAwOworCiAvKgogICogVGhpcyBHVUMgbGlzdHMgc3RyZWFtaW5nIHJlcGxpY2F0 aW9uIHN0YW5kYnkgc2VydmVyIHNsb3QgbmFtZXMgdGhhdAogICogbG9naWNhbCBXQUwgc2VuZGVy IHByb2Nlc3NlcyB3aWxsIHdhaXQgZm9yLgpAQCAtMTc4MCw3ICsxNzg3LDkgQEAgUmVwb3J0U2xv dEludmFsaWRhdGlvbihSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKIAkJ CQkJICAgWExvZ1JlY1B0ciByZXN0YXJ0X2xzbiwKIAkJCQkJICAgWExvZ1JlY1B0ciBvbGRlc3RM U04sCiAJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24sCi0JCQkJ CSAgIGxvbmcgc2xvdF9pZGxlX3NlY29uZHMpCisJCQkJCSAgIGxvbmcgc2xvdF9pZGxlX3NlY29u ZHMsCisJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeG1pbiwKKwkJCQkJICAgVHJhbnNhY3Rpb25JZCBj YXRhbG9nX3htaW4pCiB7CiAJU3RyaW5nSW5mb0RhdGEgZXJyX2RldGFpbDsKIAlTdHJpbmdJbmZv RGF0YSBlcnJfaGludDsKQEAgLTE4MjUsNiArMTgzNCwyNCBAQCBSZXBvcnRTbG90SW52YWxpZGF0 aW9uKFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCQkJCQkJCQkgImlk bGVfcmVwbGljYXRpb25fc2xvdF90aW1lb3V0Iik7CiAJCQkJYnJlYWs7CiAJCQl9CisKKwkJY2Fz ZSBSU19JTlZBTF9YSURfQUdFOgorCQkJeworCQkJCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxp ZCh4bWluKSB8fCBUcmFuc2FjdGlvbklkSXNWYWxpZChjYXRhbG9nX3htaW4pKTsKKworCQkJCWlm IChUcmFuc2FjdGlvbklkSXNWYWxpZCh4bWluKSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmZXJy X2RldGFpbCwgXygiVGhlIHNsb3QncyB4bWluICV1IGV4Y2VlZHMgdGhlIG1heGltdW0geGlkIGFn ZSAlZCBzcGVjaWZpZWQgYnkgXCJtYXhfc2xvdF94aWRfYWdlXCIuIiksCisJCQkJCQkJCQkgeG1p biwKKwkJCQkJCQkJCSBtYXhfc2xvdF94aWRfYWdlKTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0 cmluZ0luZm8oJmVycl9kZXRhaWwsIF8oIlRoZSBzbG90J3MgY2F0YWxvZ194bWluICV1IGV4Y2Vl ZHMgdGhlIG1heGltdW0geGlkIGFnZSAlZCBzcGVjaWZpZWQgYnkgXCJtYXhfc2xvdF94aWRfYWdl XCIuIiksCisJCQkJCQkJCQkgY2F0YWxvZ194bWluLAorCQkJCQkJCQkJIG1heF9zbG90X3hpZF9h Z2UpOworCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmZXJyX2hpbnQsIF8oIllvdSBtaWdodCBuZWVk IHRvIGluY3JlYXNlIFwiJXNcIi4iKSwKKwkJCQkJCQkJICJtYXhfc2xvdF94aWRfYWdlIik7CisJ CQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUlNfSU5WQUxfTk9ORToKIAkJCXBnX3VucmVhY2hhYmxl KCk7CiAJfQpAQCAtMTk0NSw2ICsxOTcyLDE2IEBAIERldGVybWluZVNsb3RJbnZhbGlkYXRpb25D YXVzZSh1aW50MzIgcG9zc2libGVfY2F1c2VzLCBSZXBsaWNhdGlvblNsb3QgKnMsCiAJCX0KIAl9 CiAKKwlpZiAocG9zc2libGVfY2F1c2VzICYgUlNfSU5WQUxfWElEX0FHRSkKKwl7CisJCS8qCisJ CSAqIFNhZmUgc2luY2Ugd2UgaG9sZCB0aGUgcmVwbGljYXRpb24gc2xvdCdzIHNwaW5sb2NrIG5l ZWRlZCB0byBhdm9pZAorCQkgKiByYWNlIGNvbmRpdGlvbnMKKwkJICovCisJCWlmIChSZXBsaWNh dGlvblNsb3RJc1hJREFnZWQocy0+ZGF0YS54bWluLCBzLT5kYXRhLmNhdGFsb2dfeG1pbikpCisJ CQlyZXR1cm4gUlNfSU5WQUxfWElEX0FHRTsKKwl9CisKIAlyZXR1cm4gUlNfSU5WQUxfTk9ORTsK IH0KIApAQCAtMjExMiw3ICsyMTQ5LDcgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90 KHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJCQkJUmVwb3J0U2xvdEludmFsaWRhdGlvbihpbnZh bGlkYXRpb25fY2F1c2UsIHRydWUsIGFjdGl2ZV9waWQsCiAJCQkJCQkJCQkgICBzbG90bmFtZSwg cmVzdGFydF9sc24sCiAJCQkJCQkJCQkgICBvbGRlc3RMU04sIHNuYXBzaG90Q29uZmxpY3RIb3Jp em9uLAotCQkJCQkJCQkJICAgc2xvdF9pZGxlX3NlY3MpOworCQkJCQkJCQkJICAgc2xvdF9pZGxl X3NlY3MsIHMtPmRhdGEueG1pbiwgcy0+ZGF0YS5jYXRhbG9nX3htaW4pOwogCiAJCQkJaWYgKE15 QmFja2VuZFR5cGUgPT0gQl9TVEFSVFVQKQogCQkJCQkodm9pZCkgU2lnbmFsUmVjb3ZlcnlDb25m bGljdChHZXRQR1Byb2NCeU51bWJlcihhY3RpdmVfcHJvYyksCkBAIC0yMTY1LDcgKzIyMDIsNyBA QCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywK IAkJCVJlcG9ydFNsb3RJbnZhbGlkYXRpb24oaW52YWxpZGF0aW9uX2NhdXNlLCBmYWxzZSwgYWN0 aXZlX3BpZCwKIAkJCQkJCQkJICAgc2xvdG5hbWUsIHJlc3RhcnRfbHNuLAogCQkJCQkJCQkgICBv bGRlc3RMU04sIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAotCQkJCQkJCQkgICBzbG90X2lkbGVf c2Vjcyk7CisJCQkJCQkJCSAgIHNsb3RfaWRsZV9zZWNzLCBzLT5kYXRhLnhtaW4sIHMtPmRhdGEu Y2F0YWxvZ194bWluKTsKIAogCQkJLyogZG9uZSB3aXRoIHRoaXMgc2xvdCBmb3Igbm93ICovCiAJ CQlicmVhazsKQEAgLTIxOTIsNiArMjIyOSw4IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRl U2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2VzLAogICogICBsb2dpY2FsLgogICogLSBSU19JTlZB TF9JRExFX1RJTUVPVVQ6IGhhcyBiZWVuIGlkbGUgbG9uZ2VyIHRoYW4gdGhlIGNvbmZpZ3VyZWQK ICAqICAgImlkbGVfcmVwbGljYXRpb25fc2xvdF90aW1lb3V0IiBkdXJhdGlvbi4KKyAqIC0gUlNf SU5WQUxfWElEX0FHRTogc2xvdCB4aWQgYWdlIGlzIG9sZGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQK KyAqICAgIm1heF9zbG90X3hpZF9hZ2UiIGFnZQogICoKICAqIE5vdGU6IFRoaXMgZnVuY3Rpb24g YXR0ZW1wdHMgdG8gaW52YWxpZGF0ZSB0aGUgc2xvdCBmb3IgbXVsdGlwbGUgcG9zc2libGUKICAq IGNhdXNlcyBpbiBhIHNpbmdsZSBwYXNzLCBtaW5pbWl6aW5nIHJlZHVuZGFudCBpdGVyYXRpb25z LiBUaGUgImNhdXNlIgpAQCAtMzI3NSwzICszMzE0LDQxIEBAIFdhaXRGb3JTdGFuZGJ5Q29uZmly bWF0aW9uKFhMb2dSZWNQdHIgd2FpdF9mb3JfbHNuKQogCiAJQ29uZGl0aW9uVmFyaWFibGVDYW5j ZWxTbGVlcCgpOwogfQorCisvKgorICogQ2hlY2sgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcGFzc2VkIGlu IHhtaW4gb3IgY2F0YWxvZ194bWluIGFnZSBpcworICogb2xkZXIgdGhhbiB0aGUgYWdlIHNwZWNp ZmllZCBieSBtYXhfc2xvdF94aWRfYWdlLgorICovCitib29sCitSZXBsaWNhdGlvblNsb3RJc1hJ REFnZWQoVHJhbnNhY3Rpb25JZCB4bWluLCBUcmFuc2FjdGlvbklkIGNhdGFsb2dfeG1pbikKK3sK KwlUcmFuc2FjdGlvbklkIGN1dG9mZjsKKwlUcmFuc2FjdGlvbklkIGN1cnI7CisJYm9vbAkJaXNf YWdlZCA9IGZhbHNlOworCisJaWYgKG1heF9zbG90X3hpZF9hZ2UgPT0gMCkKKwkJcmV0dXJuIGZh bHNlOworCisJY3VyciA9IFJlYWROZXh0VHJhbnNhY3Rpb25JZCgpOworCisJLyoKKwkgKiBDYWxj dWxhdGUgb2xkZXN0IFhJRCBhIHNsb3QncyB4bWluIG9yIGNhdGFsb2dfeG1pbiBjYW4gaGF2ZSBi ZWZvcmUgdGhleQorCSAqIGFyZSBpbnZhbGlkYXRlZC4KKwkgKi8KKwljdXRvZmYgPSBjdXJyIC0g bWF4X3Nsb3RfeGlkX2FnZTsKKworCS8qIGVuc3VyZSBpdCdzIGEgIm5vcm1hbCIgWElELCBlbHNl IFRyYW5zYWN0aW9uSWRQcmVjZWRlcyBtaXNiZWhhdmVzICovCisJLyogdGhpcyBjYW4gY2F1c2Ug dGhlIGxpbWl0IHRvIGdvIGJhY2t3YXJkcyBieSAzLCBidXQgdGhhdCdzIE9LICovCisJaWYgKGN1 dG9mZiA8IEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZCkKKwkJY3V0b2ZmIC09IEZpcnN0Tm9ybWFs VHJhbnNhY3Rpb25JZDsKKworCWlmIChUcmFuc2FjdGlvbklkSXNOb3JtYWwoeG1pbikgJiYKKwkJ VHJhbnNhY3Rpb25JZFByZWNlZGVzT3JFcXVhbHMoeG1pbiwgY3V0b2ZmKSkKKwkJaXNfYWdlZCA9 IHRydWU7CisKKwlpZiAoVHJhbnNhY3Rpb25JZElzTm9ybWFsKGNhdGFsb2dfeG1pbikgJiYKKwkJ VHJhbnNhY3Rpb25JZFByZWNlZGVzT3JFcXVhbHMoY2F0YWxvZ194bWluLCBjdXRvZmYpKQorCQlp c19hZ2VkID0gdHJ1ZTsKKworCXJldHVybiBpc19hZ2VkOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCAwYzk4NTRhZDhmYy4uN2ZhYjAyZjFlZWIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0yMDQ5LDYgKzIw NDksMTQgQEAKICAgbWF4ID0+ICdNQVhfS0lMT0JZVEVTJywKIH0sCiAKK3sgbmFtZSA9PiAnbWF4 X3Nsb3RfeGlkX2FnZScsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdIVVAnLCBn cm91cCA9PiAnUkVQTElDQVRJT05fU0VORElORycsCisgIHNob3J0X2Rlc2MgPT4gJ0FnZSBvZiB0 aGUgdHJhbnNhY3Rpb24gSUQgYXQgd2hpY2ggYSByZXBsaWNhdGlvbiBzbG90IGdldHMgaW52YWxp ZGF0ZWQuJywKKyAgdmFyaWFibGUgPT4gJ21heF9zbG90X3hpZF9hZ2UnLAorICBib290X3ZhbCA9 PiAnMCcsCisgIG1pbiA9PiAnMCcsCisgIG1heCA9PiAnMjAwMDAwMDAwMCcsCit9LAorCiAjIFdl IHVzZSB0aGUgaG9wZWZ1bGx5LXNhZmVseS1zbWFsbCB2YWx1ZSBvZiAxMDBrQiBhcyB0aGUgY29t cGlsZWQtaW4KICMgZGVmYXVsdCBmb3IgbWF4X3N0YWNrX2RlcHRoLiAgSW5pdGlhbGl6ZUdVQ09w dGlvbnMgd2lsbCBpbmNyZWFzZSBpdAogIyBpZiBwb3NzaWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBh Y3R1YWwgcGxhdGZvcm0tc3BlY2lmaWMgc3RhY2sgbGltaXQuCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZTRhYmU2YzAwNzcuLjBmNzI4ZDg3 YjZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl CkBAIC0zNTEsNiArMzUxLDggQEAKICN3YWxfa2VlcF9zaXplID0gMCAgICAgICAgICAgICAgIyBp biBtZWdhYnl0ZXM7IDAgZGlzYWJsZXMKICNtYXhfc2xvdF93YWxfa2VlcF9zaXplID0gLTEgICAg IyBpbiBtZWdhYnl0ZXM7IC0xIGRpc2FibGVzCiAjaWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVv dXQgPSAwICAgICAgIyBpbiBzZWNvbmRzOyAwIGRpc2FibGVzCisjbWF4X3Nsb3RfeGlkX2FnZSA9 IDAgICAgICAgICAgICMgbWF4aW11bSBYSUQgYWdlIGJlZm9yZSBhIHJlcGxpY2F0aW9uIHNsb3QK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXRzIGludmFsaWRhdGVkOyAwIGRp c2FibGVzCiAjd2FsX3NlbmRlcl90aW1lb3V0ID0gNjBzICAgICAgICMgaW4gbWlsbGlzZWNvbmRz OyAwIGRpc2FibGVzCiAjdHJhY2tfY29tbWl0X3RpbWVzdGFtcCA9IG9mZiAgICMgY29sbGVjdCB0 aW1lc3RhbXAgb2YgdHJhbnNhY3Rpb24gY29tbWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCmlu ZGV4IDRiNDcwOWY2ZTJjLi5kY2UzZjBmNTFiMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vc2xvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaApAQCAt NjYsMTAgKzY2LDEyIEBAIHR5cGVkZWYgZW51bSBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25D YXVzZQogCVJTX0lOVkFMX1dBTF9MRVZFTCA9ICgxIDw8IDIpLAogCS8qIGlkbGUgc2xvdCB0aW1l b3V0IGhhcyBvY2N1cnJlZCAqLwogCVJTX0lOVkFMX0lETEVfVElNRU9VVCA9ICgxIDw8IDMpLAor CS8qIHNsb3QncyB4bWluIG9yIGNhdGFsb2dfeG1pbiBoYXMgcmVhY2hlZCBtYXggeGlkIGFnZSAq LworCVJTX0lOVkFMX1hJRF9BR0UgPSAoMSA8PCA0KSwKIH0gUmVwbGljYXRpb25TbG90SW52YWxp ZGF0aW9uQ2F1c2U7CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIGludmFsaWRhdGlvbiBjYXVzZXMg Ki8KLSNkZWZpbmUJUlNfSU5WQUxfTUFYX0NBVVNFUyA0CisjZGVmaW5lCVJTX0lOVkFMX01BWF9D QVVTRVMgNQogCiAvKgogICogV2hlbiB0aGUgc2xvdCBzeW5jaHJvbml6YXRpb24gd29ya2VyIGlz IHJ1bm5pbmcsIG9yIHdoZW4KQEAgLTMyNiw2ICszMjgsNyBAQCBleHRlcm4gUEdETExJTVBPUlQg UmVwbGljYXRpb25TbG90ICpNeVJlcGxpY2F0aW9uU2xvdDsKIGV4dGVybiBQR0RMTElNUE9SVCBp bnQgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKnN5bmNo cm9uaXplZF9zdGFuZGJ5X3Nsb3RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBpZGxlX3JlcGxp Y2F0aW9uX3Nsb3RfdGltZW91dF9zZWNzOworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfc2xv dF94aWRfYWdlOwogCiAvKiBzaG1lbSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVy biBTaXplIFJlcGxpY2F0aW9uU2xvdHNTaG1lbVNpemUodm9pZCk7CkBAIC0zODcsNCArMzkwLDYg QEAgZXh0ZXJuIGJvb2wgU2xvdEV4aXN0c0luU3luY1N0YW5kYnlTbG90cyhjb25zdCBjaGFyICpz bG90X25hbWUpOwogZXh0ZXJuIGJvb2wgU3RhbmRieVNsb3RzSGF2ZUNhdWdodHVwKFhMb2dSZWNQ dHIgd2FpdF9mb3JfbHNuLCBpbnQgZWxldmVsKTsKIGV4dGVybiB2b2lkIFdhaXRGb3JTdGFuZGJ5 Q29uZmlybWF0aW9uKFhMb2dSZWNQdHIgd2FpdF9mb3JfbHNuKTsKIAorZXh0ZXJuIGJvb2wgUmVw bGljYXRpb25TbG90SXNYSURBZ2VkKFRyYW5zYWN0aW9uSWQgeG1pbiwgVHJhbnNhY3Rpb25JZCBj YXRhbG9nX3htaW4pOworCiAjZW5kaWYJCQkJCQkJLyogU0xPVF9IICovCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWNvdmVyeS90LzA0OV9pbnZhbGlkYXRlX3hpZF9hZ2VkX3Nsb3RzLnBsIGIvc3Jj L3Rlc3QvcmVjb3ZlcnkvdC8wNDlfaW52YWxpZGF0ZV94aWRfYWdlZF9zbG90cy5wbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjFlOGYwMDNmOTUKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzA0OV9pbnZhbGlkYXRlX3hpZF9hZ2VkX3Nsb3Rz LnBsCkBAIC0wLDAgKzEsMjQwIEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0IGZvciByZXBsaWNhdGlvbiBzbG90cyBp bnZhbGlkYXRpb24gZHVlIHRvIFhJRCBhZ2UKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFU QUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpCYWNrZ3JvdW5kUHNxbDsKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy OwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgV2FpdCBmb3Igc2xvdCB0byBmaXJzdCBiZWNvbWUgaW5h Y3RpdmUgYW5kIHRoZW4gZ2V0IGludmFsaWRhdGVkCitzdWIgd2FpdF9mb3Jfc2xvdF9pbnZhbGlk YXRpb24KK3sKKwlteSAoJG5vZGUsICRzbG90X25hbWUsICRyZWFzb24pID0gQF87CisJbXkgJG5h bWUgPSAkbm9kZS0+bmFtZTsKKworCSMgV2FpdCBmb3IgdGhlIGluYWN0aXZlIHJlcGxpY2F0aW9u IHNsb3QgdG8gYmUgaW52YWxpZGF0ZWQKKwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bv c3RncmVzJywgcXFbCisJCVNFTEVDVCBDT1VOVChzbG90X25hbWUpID0gMSBGUk9NIHBnX3JlcGxp Y2F0aW9uX3Nsb3RzCisJCQlXSEVSRSBzbG90X25hbWUgPSAnJHNsb3RfbmFtZScgQU5ECisJCQlp bnZhbGlkYXRpb25fcmVhc29uID0gJyRyZWFzb24nOworCV0pCisJICBvciBkaWUKKwkgICJUaW1l ZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgaW5hY3RpdmUgc2xvdCAkc2xvdF9uYW1lIHRvIGJlIGlu dmFsaWRhdGVkIG9uIG5vZGUgJG5hbWUiOworfQorCisjIERvIHNvbWUgd29yayBmb3IgYWR2YW5j aW5nIHhpZHMgb24gYSBnaXZlbiBub2RlCitzdWIgYWR2YW5jZV94aWRzCit7CisJbXkgKCRub2Rl LCAkdGFibGVfbmFtZSkgPSBAXzsKKworCSRub2RlLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jlcycs IHFxWworCQlkbyBcJFwkCisJCWJlZ2luCisJCWZvciBpIGluIDEwMDAwLi4xMTAwMCBsb29wCisJ CQktLSB1c2UgYW4gZXhjZXB0aW9uIGJsb2NrIHNvIHRoYXQgZWFjaCBpdGVyYXRpb24gZWF0cyBh biBYSUQKKwkJCWJlZ2luCisJCQlpbnNlcnQgaW50byAkdGFibGVfbmFtZSB2YWx1ZXMgKGkpOwor CQkJZXhjZXB0aW9uCisJCQl3aGVuIGRpdmlzaW9uX2J5X3plcm8gdGhlbiBudWxsOworCQkJZW5k OworCQllbmQgbG9vcDsKKwkJZW5kXCRcJDsKKwldKTsKK30KKworIyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorIyBUZXN0Y2FzZSBzdGFydDogSW52YWxpZGF0ZSBzdHJlYW1pbmcgc3RhbmRieSdzIHNs b3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UKKyMgR1VDLgorCisjIEluaXRpYWxpemUgcHJpbWFy eSBub2RlCitteSAkcHJpbWFyeSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJp bWFyeScpOworJHByaW1hcnktPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwor CisjIENvbmZpZ3VyZSBwcmltYXJ5IHdpdGggWElEIGFnZSBzZXR0aW5ncworJHByaW1hcnktPmFw cGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKK21heF9zbG90X3hpZF9hZ2UgPSA1 MDAKK30pOworCiskcHJpbWFyeS0+c3RhcnQ7CisKKyMgVGFrZSBhIGJhY2t1cCBmb3IgY3JlYXRp bmcgc3RhbmRieQorbXkgJGJhY2t1cF9uYW1lID0gJ2JhY2t1cCc7CiskcHJpbWFyeS0+YmFja3Vw KCRiYWNrdXBfbmFtZSk7CisKKyMgQ3JlYXRlIGEgc3RhbmRieSBsaW5raW5nIHRvIHRoZSBwcmlt YXJ5IHVzaW5nIHRoZSByZXBsaWNhdGlvbiBzbG90CitteSAkc3RhbmRieSA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieScpOworJHN0YW5kYnktPmluaXRfZnJvbV9iYWNr dXAoJHByaW1hcnksICRiYWNrdXBfbmFtZSwgaGFzX3N0cmVhbWluZyA9PiAxKTsKKworIyBFbmFi bGUgaHNfZmVlZGJhY2suIFRoZSBzbG90IHNob3VsZCBnYWluIGFuIHhtaW4uIFdlIHNldCB0aGUg c3RhdHVzIGludGVydmFsCisjIHNvIHdlJ2xsIHNlZSB0aGUgcmVzdWx0cyBwcm9tcHRseS4KKyRz dGFuZGJ5LT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXsKK3ByaW1hcnlfc2xv dF9uYW1lID0gJ3NiX3Nsb3QnCitob3Rfc3RhbmRieV9mZWVkYmFjayA9IG9uCit3YWxfcmVjZWl2 ZXJfc3RhdHVzX2ludGVydmFsID0gMQorbWF4X3N0YW5kYnlfc3RyZWFtaW5nX2RlbGF5ID0gMzYw MDAwMAorfSk7CisKKyRwcmltYXJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAg U0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNhbF9yZXBsaWNhdGlvbl9zbG90KHNsb3RfbmFtZSA6PSAn c2Jfc2xvdCcsIGltbWVkaWF0ZWx5X3Jlc2VydmUgOj0gdHJ1ZSk7CitdKTsKKworJHN0YW5kYnkt PnN0YXJ0OworCisjIENyZWF0ZSBzb21lIGNvbnRlbnQgb24gcHJpbWFyeSB0byBtb3ZlIHhtaW4K KyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRhYl9pbnQg QVMgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLDEwKSBBUyBhIik7CisKKyMgV2FpdCB1bnRpbCBz dGFuZGJ5IGhhcyByZXBsYXllZCBlbm91Z2ggZGF0YQorJHByaW1hcnktPndhaXRfZm9yX2NhdGNo dXAoJHN0YW5kYnkpOworCiskcHJpbWFyeS0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMn LCBxcVsKKwlTRUxFQ1QgKHhtaW4gSVMgTk9UIE5VTEwpIE9SIChjYXRhbG9nX3htaW4gSVMgTk9U IE5VTEwpCisJCUZST00gcGdfY2F0YWxvZy5wZ19yZXBsaWNhdGlvbl9zbG90cworCQlXSEVSRSBz bG90X25hbWUgPSAnc2Jfc2xvdCc7CitdKSBvciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBz bG90IHNiX3Nsb3QgeG1pbiB0byBhZHZhbmNlIjsKKworIyBTdG9wIHN0YW5kYnkgdG8gbWFrZSB0 aGUgcmVwbGljYXRpb24gc2xvdCdzIHhtaW4gb24gcHJpbWFyeSB0byBhZ2UKKworIyBSZWFkIG9u IHN0YW5kYnkgdGhhdCBjYXVzZXMgeG1pbiB0byBiZSBoZWxkIG9uIHNsb3QKK215ICRzdGFuZGJ5 X3Nlc3Npb24gPSAkc3RhbmRieS0+aW50ZXJhY3RpdmVfcHNxbCgncG9zdGdyZXMnKTsKKyRzdGFu ZGJ5X3Nlc3Npb24tPnF1ZXJ5KCJCRUdJTjsgU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0 aW9uID0gJ3JlcGVhdGFibGUgcmVhZCc7IFNFTEVDVCAqIEZST00gdGFiX2ludDsiKTsKKworIyRz dGFuZGJ5LT5zdG9wOworCisjIERvIHNvbWUgd29yayB0byBhZHZhbmNlIHhpZHMgb24gcHJpbWFy eQorYWR2YW5jZV94aWRzKCRwcmltYXJ5LCAndGFiX2ludCcpOworCisjIFdhaXQgZm9yIHRoZSBy ZXBsaWNhdGlvbiBzbG90IHRvIGJlY29tZSBpbmFjdGl2ZSBhbmQgdGhlbiBpbnZhbGlkYXRlZCBk dWUgdG8KKyMgWElEIGFnZS4KKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNIRUNL UE9JTlQiKTsKK3dhaXRfZm9yX3Nsb3RfaW52YWxpZGF0aW9uKCRwcmltYXJ5LCAnc2Jfc2xvdCcs ICd4aWRfYWdlZCcpOworCiskc3RhbmRieV9zZXNzaW9uLT5xdWl0OworJHN0YW5kYnktPnN0b3A7 CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIHN0cmVhbWluZyBzdGFuZGJ5J3Mgc2xvdCBk dWUgdG8gbWF4X3Nsb3RfeGlkX2FnZQorIyBHVUMuCisjID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisK KyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IEludmFsaWRhdGUgbG9n aWNhbCBzdWJzY3JpYmVyJ3Mgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZQorIyBHVUMuCisK KyMgQ3JlYXRlIGEgc3Vic2NyaWJlciBub2RlCitteSAkc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOworJHN1YnNjcmliZXItPmluaXQoYWxs b3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJHN1YnNjcmliZXItPnN0YXJ0OworCisjIENy ZWF0ZSB0YWJsZXMgb24gYm90aCBwcmltYXJ5IGFuZCBzdWJzY3JpYmVyCiskcHJpbWFyeS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGVzdF90YmwgKGlkIGludCkiKTsKKyRz dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0ZXN0X3RibCAo aWQgaW50KSIpOworCisjIEluc2VydCBzb21lIGluaXRpYWwgZGF0YQorJHByaW1hcnktPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3RibCBWQUxVRVMgKGdlbmVyYXRl X3NlcmllcygxLCA1KSk7Iik7CisKKyMgU2V0dXAgbG9naWNhbCByZXBsaWNhdGlvbgorbXkgJHB1 Ymxpc2hlcl9jb25uc3RyID0gJHByaW1hcnktPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7 CiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiBw dWIgRk9SIFRBQkxFIHRlc3RfdGJsIik7CisKKyRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9j b25uc3RyJyBQVUJMSUNBVElPTiBwdWIgV0lUSCAoc2xvdF9uYW1lID0gJ2xzdWJfc2xvdCcpIgor KTsKKworIyBXYWl0IGZvciBpbml0aWFsIHN5bmMgdG8gY29tcGxldGUKKyRzdWJzY3JpYmVyLT53 YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHJpbWFyeSwgJ3N1YicpOworCitteSAkcmVzdWx0 ID0gJHN1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZS T00gdGVzdF90YmwiKTsKK2lzKCRyZXN1bHQsIHFxKDUpLCAiY2hlY2sgaW5pdGlhbCBjb3B5IHdh cyBkb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIik7CisKKyMgV2FpdCBmb3IgdGhlIGxvZ2lj YWwgc2xvdCB0byBnZXQgY2F0YWxvZ194bWluIChsb2dpY2FsIHNsb3RzIHVzZSBjYXRhbG9nX3ht aW4sIG5vdCB4bWluKQorJHByaW1hcnktPnBvbGxfcXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywg cXFbCisJU0VMRUNUIHhtaW4gSVMgTlVMTCBBTkQgY2F0YWxvZ194bWluIElTIE5PVCBOVUxMCisJ RlJPTSBwZ19jYXRhbG9nLnBnX3JlcGxpY2F0aW9uX3Nsb3RzCisJV0hFUkUgc2xvdF9uYW1lID0g J2xzdWJfc2xvdCc7CitdKSBvciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBzbG90IGxzdWJf c2xvdCBjYXRhbG9nX3htaW4gdG8gYWR2YW5jZSI7CisKKyMgU3RvcCBzdWJzY3JpYmVyIHRvIG1h a2UgdGhlIHJlcGxpY2F0aW9uIHNsb3Qgb24gcHJpbWFyeSBpbmFjdGl2ZQorJHN1YnNjcmliZXIt PnN0b3A7CisKKyMgRG8gc29tZSB3b3JrIHRvIGFkdmFuY2UgeGlkcyBvbiBwcmltYXJ5CithZHZh bmNlX3hpZHMoJHByaW1hcnksICd0ZXN0X3RibCcpOworCisjIFdhaXQgZm9yIHRoZSByZXBsaWNh dGlvbiBzbG90IHRvIGJlY29tZSBpbmFjdGl2ZSBhbmQgdGhlbiBpbnZhbGlkYXRlZCBkdWUgdG8K KyMgWElEIGFnZS4KKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNIRUNLUE9JTlQi KTsKK3dhaXRfZm9yX3Nsb3RfaW52YWxpZGF0aW9uKCRwcmltYXJ5LCAnbHN1Yl9zbG90JywgJ3hp ZF9hZ2VkJyk7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIGxvZ2ljYWwgc3Vic2NyaWJl cidzIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UKKyMgR1VDLgorIyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0OiBUZXN0 IFZBQ1VVTSBjb21tYW5kIHRyaWdnZXJpbmcgc2xvdCBpbnZhbGlkYXRpb24KKyMKKworIyBDcmVh dGUgYW5vdGhlciBwaHlzaWNhbCByZXBsaWNhdGlvbiBzbG90IGZvciBWQUNVVU0gdGVzdAorJHBy aW1hcnktPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKyAgICBTRUxFQ1QgcGdfY3JlYXRl X3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Nsb3Qoc2xvdF9uYW1lIDo9ICd2YWN1dW1fdGVzdF9zbG90 JywgaW1tZWRpYXRlbHlfcmVzZXJ2ZSA6PSB0cnVlKTsKK10pOworCisjIENyZWF0ZSBhIG5ldyBz dGFuZGJ5IGZvciB0aGlzIHRlc3QKK215ICRzdGFuZGJ5X3ZhY3V1bSA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieV92YWN1dW0nKTsKKyRzdGFuZGJ5X3ZhY3V1bS0+aW5p dF9mcm9tX2JhY2t1cCgkcHJpbWFyeSwgJGJhY2t1cF9uYW1lLCBoYXNfc3RyZWFtaW5nID0+IDEp OworCiskc3RhbmRieV92YWN1dW0tPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBx eworcHJpbWFyeV9zbG90X25hbWUgPSAndmFjdXVtX3Rlc3Rfc2xvdCcKK2hvdF9zdGFuZGJ5X2Zl ZWRiYWNrID0gb24KK3dhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwgPSAxCit9KTsKKworJHN0 YW5kYnlfdmFjdXVtLT5zdGFydDsKKworIyBXYWl0IHVudGlsIHN0YW5kYnkgaGFzIHJlcGxheWVk IGVub3VnaCBkYXRhIGFuZCBzbG90IGdldHMgeG1pbgorJHByaW1hcnktPndhaXRfZm9yX2NhdGNo dXAoJHN0YW5kYnlfdmFjdXVtKTsKKworJHByaW1hcnktPnBvbGxfcXVlcnlfdW50aWwoCisJJ3Bv c3RncmVzJywgcXFbCisJU0VMRUNUICh4bWluIElTIE5PVCBOVUxMKSBPUiAoY2F0YWxvZ194bWlu IElTIE5PVCBOVUxMKQorCQlGUk9NIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fc2xvdHMKKwkJ V0hFUkUgc2xvdF9uYW1lID0gJ3ZhY3V1bV90ZXN0X3Nsb3QnOworXSkgb3IgZGllICJUaW1lZCBv dXQgd2FpdGluZyBmb3Igc2xvdCB2YWN1dW1fdGVzdF9zbG90IHhtaW4gdG8gYWR2YW5jZSI7CisK KyMgU3RvcCBzdGFuZGJ5IHRvIG1ha2UgdGhlIHJlcGxpY2F0aW9uIHNsb3QncyB4bWluIG9uIHBy aW1hcnkgdG8gYWdlCiskc3RhbmRieV92YWN1dW0tPnN0b3A7CisKKyMgRG8gc29tZSB3b3JrIHRv IGFkdmFuY2UgeGlkcyBvbiBwcmltYXJ5CithZHZhbmNlX3hpZHMoJHByaW1hcnksICd0YWJfaW50 Jyk7CisKKyMgVXNlIFZBQ1VVTSB0byB0cmlnZ2VyIHNsb3QgaW52YWxpZGF0aW9uIChpbnN0ZWFk IG9mIENIRUNLUE9JTlQpCisjIFRoaXMgdGVzdHMgdGhhdCBWQUNVVU0gY29tbWFuZCBjYW4gdHJp Z2dlciBYSUQgYWdlIGludmFsaWRhdGlvbgorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiVkFDVVVNIik7CisKKyMgV2FpdCBmb3IgdGhlIHJlcGxpY2F0aW9uIHNsb3QgdG8gYmVjb21l IGludmFsaWRhdGVkIGR1ZSB0byBYSUQgYWdlIHRyaWdnZXJlZCBieSBWQUNVVU0KKyRwcmltYXJ5 LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHFxWworCVNFTEVDVCBDT1VOVChzbG90 X25hbWUpID0gMSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzCisJCVdIRVJFIHNsb3RfbmFtZSA9 ICd2YWN1dW1fdGVzdF9zbG90JyBBTkQKKwkJaW52YWxpZGF0aW9uX3JlYXNvbiA9ICd4aWRfYWdl ZCc7CitdKQorICBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBzbG90IHZhY3V1 bV90ZXN0X3Nsb3QgdG8gYmUgaW52YWxpZGF0ZWQgYnkgVkFDVVVNIjsKKworIyBUZXN0Y2FzZSBl bmQ6IFRlc3QgVkFDVVVNIGNvbW1hbmQgdHJpZ2dlcmluZyBzbG90IGludmFsaWRhdGlvbgorIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorCitvaygxLCAiYWxsIFhJRCBhZ2UgaW52YWxpZGF0aW9uIHRl c3RzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQ3 LjMKCg== --00000000000085b962064d76ecb3--