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 1w59Wf-002wy5-27 for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 21:43:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w59Wd-0099RK-2j for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 21:43:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w59Wd-0099RC-0p for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 21:42:59 +0000 Received: from mail-ot1-x32b.google.com ([2607:f8b0:4864:20::32b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w59Wb-00000000rHr-2t6N for pgsql-hackers@postgresql.org; Tue, 24 Mar 2026 21:42:58 +0000 Received: by mail-ot1-x32b.google.com with SMTP id 46e09a7af769-7d7422b4ff1so2005059a34.3 for ; Tue, 24 Mar 2026 14:42:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774388577; cv=none; d=google.com; s=arc-20240605; b=XfHeFba4X4tRKrA1hlZ5wyHM463qD24J24N1LsrCxQJTiZvyfMwA3ViuzWXzuCCpH+ JnWMAvy50fBN+CCL9U5WP3ioeYgPQFzcGMKxeLO1dKZGantLJat96Qh0Q0/xScbwwagu OizMIqdRYFMMxGzaTwddleVC+GfoPjXiHteR2gp0Eo3aSuC2F330YAZE4PV+F22qZ4wo uLt7fHXivewraiAsFiHICuOonLAo925j7xBsjphkeFJuEILkMcl+O8WcCdI3uQRaIzd0 lv5QSftJTEux7EOOMiHKXzFIvXJZ0I6tkdnx/oaBQ8kJBCKGW2XBagaui5xekNG0QtZS QWzQ== 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=UHyiaRqzmEzq/eQSqfLh8mAi5jy8oeO/StFL+nxnxYc=; fh=iVkiyUIfHl++/mYrD0juAWrpXw9BvFxMXOeXKjwEWv4=; b=amVzadtyYL2d1rB8gR74ZiPtzwtqVmnF8SwDJTa3nOH7juJQMPeptXEpzb0cGD3slf qqKW6Tifc7gJavjCyrl6wdEgwpQ5cfUDm5NHafLn9FkJuEPL4Ixm7JP58hYfAUJWkWdn DxKU8x0T8a/ayZWl0kcpWDkMsXPj7Jwao//tWQ5LeEnUbPDyeg/id/qZD2IbrgAPTq+U c7R4H/9HRkGUY7y3G2gnxvnrdlvCdu8/5zbI2+GKeyJaQxEvssBttlatySAnBgLvyxiT vEFBsoQFs1K80R+Y9hkG6owwcHVTQIVjT5ZWgYZGsqoEiwwgOILMTrUpqNgUYiltGqGg 4Qyw==; 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=20251104; t=1774388577; x=1774993377; 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=UHyiaRqzmEzq/eQSqfLh8mAi5jy8oeO/StFL+nxnxYc=; b=P79cBI7cMBgG5fBgy1g0beNqs+CtB8CQjc6P5S0qqRrMMAmm98h7Zq4Ra7S429PZ6S JfNyo2zf6f2Dylu5SkNk19U/4tFayhs50Rz2wILBeU3TWMv96h4j18J9BVbPSzkZV9R5 2c5Dq19IkI/Qofw1MlPLU1dkxOvDqWnrNQxrlHg2ouQxV4N9a06kyNIjBZ865DGD5YZy KxE6WQwXN8yrK3XFV0LG1NrGQrW+FKv0Ub6xKKC+fnGcEDSx7FwhluGL3yxaNDiqncIf Z/hb/XPUyYupd7u+tGSDWTf6/fvy1Uod+KATGMPWPhAbFp50HuOCMQRlg3GKHXs6mcIh tlpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774388577; x=1774993377; 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=UHyiaRqzmEzq/eQSqfLh8mAi5jy8oeO/StFL+nxnxYc=; b=khoAHC7i9tk2ml96tvVUvm52lh3X7NLlInMM1WmGVNA2ywWXyv6A8j20RiiO4zhbus 4FiQfkOWtwHJZ1jXrgR0pHq3IyDOGwpDSTVF1Zeo1p0VV/4GTxENdvXvTdv5ezVOsw9A JEotcPSNeRKbaBtW6Tfre029G22GCcvljwGy8mOKAtlhlIFeRR1KRVCuONUdxSCt8+7z t9OmNA9foqQKZqTG1jT31/ow9nqPM6AogVqvXFxSoEB3OcrcRc3plLm7Wgrozd5nlSaf Rbx+gfnqFyUePdku8gXxPCcxkN8Kk5BLEekVLhD2QiPSoLBoSpxul8ll5/viGgiN+AVj NHww== X-Forwarded-Encrypted: i=1; AJvYcCXScf7Q9bvAfS1QibheI3qeIPDNuzosmkEQ2TAMoZ4zcSfL+oqNYuGo7w9wJ8gxKxboy3c+waIZHKnR9h+5@postgresql.org X-Gm-Message-State: AOJu0YyPRqnrmvmNlttkp1DcPUHXJG1uKkEY9lgZmH5Qz5mFBkHH5d93 Vx2sWNV3MLOblLylg0psfNdI5KDMvUrkQV1k25HXxAkUwl2WaRfc5c+xhGHx9+wUcSVIEHyVzca 3ORCmSi4Af8sKX7rL/sEHEq2WIVNM84s= X-Gm-Gg: ATEYQzweRsqD9096Fr/BzEhBT7bz5IlJLbeFAeX9vRCdp8yNkNgTHH4Jp7DmBwwIL+K ijjezJt77+LZXt8Nb7uWvkzKOxTtU3PMBwOsL4oamxoUlaa+cVq1ICsbfHWocM40XT8vniiKYPk 7xC2Vgfu0OhwB8VCo4DWhW4bN3qs2HaTVWVBZnIeCskagRsbBjpK8AtdU1Lk8QYHHM6J62BBuob AD9bZy17sZvl/uxYCw7gTHZKsP4MLh9XJdpe71Fr7MqSvKsYesAp1qe/W85wEJLK+6SNm4xk2Ox LkzEwhjJ/YESQSRIlx7maRSdRL7DM+psG+p3gkw= X-Received: by 2002:a05:6820:4c17:b0:67b:dc97:119f with SMTP id 006d021491bc7-67dff4724ecmr981075eaf.9.1774388576958; Tue, 24 Mar 2026 14:42:56 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Tue, 24 Mar 2026 14:42:45 -0700 X-Gm-Features: AaiRm50zYGpYJFOyY4XyZ0vKD6R556RCLQW3VFUBIoTFIZNlO8w0N2jAVRtf3AM Message-ID: Subject: Re: Introduce XID age based replication slot invalidation To: Masahiko Sawada Cc: SATYANARAYANA NARLAPURAM , "Hayato Kuroda (Fujitsu)" , John H , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000d2d4b4064dcc08bb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d2d4b4064dcc08bb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Mon, Mar 23, 2026 at 4:36=E2=80=AFPM Masahiko Sawada wrote: > > I've studied the discussion on this thread and the patch. I understand > the purpose of this feature and agree that it's useful especially in > cases where orphaned (physical or logical) replication slots prevent > the xmin from advancing and inactive_since based slot invalidation > might not fit. > > And +1 for treating both the slot's xmin and catalog_xmin similarly > with the single GUC. Thanks for reviewing the patch. > > >> 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. Invalidatin= g > > >> during checkpoints can help to some extent with the large table/inde= x > > >> cases. But I'm open to thoughts on this. > > > > > > It may not solve the intent when the vacuum cycle is longer, which on= e can expect on a large database particularly when there is heavy bloat. > > > > This design choice boils down to the following: a database instance > > having either 1/ a large number of small tables or 2/ large tables. > > From my experience, I have seen both cases but mostly case 2 (others > > can correct me). In this context, having an XID age based slot > > invalidation check once per relation makes sense. However, I'm open to > > more thoughts here. > > ISTM that checking the XID-based slot invalidation per table would be > more bullet-proof and cover many cases. How about checking the > XID-based slot invalidation opportunity only when the OldestXmin is > older than the new GUC? For example, we can do this check in > heap_vacuum_rel() based on the VacuumCutoffs returned by > vacuum_get_cutoffs(). If we invalidate at least one slot for its XID, > we can re-compute the OldestXmin. Agreed. Here's the patch that moves the XID-age based slot invalidation check to vacuum_get_cutoffs. This has some nice advantages: 1/ It makes the check once per table (to help with large tables). 2/ It makes the check less costly since we rely on already computed OldestXmin and nextXID values. 3/ It avoids the checkpointer to do XID-age based slot invalidation which keeps the usage of this GUC simple with no additional costs to the checkpointer - just the vacuum (both vacuum command and autovacuum) does the invalidation when needed. I moved the new tests to the existing TAP test file t/019_replslot_limit.pl alongside other invalidation tests. I added detailed comments around InvalidateXIDAgedReplicationSlots and slightly modified the docs. Please find the v3 patch for further review. PS: Thanks Sawada-san for the offlist chat. --=20 Bharath Rupireddy Amazon Web Services: https://aws.amazon.com --000000000000d2d4b4064dcc08bb Content-Type: application/octet-stream; name="v3-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Disposition: attachment; filename="v3-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn54xo180 RnJvbSAyZmJhNzc5N2FhOWYzMzkyYTU5MGFlODVjYTVkYjA4MDkwMzZkZDVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjQgTWFyIDIwMjYgMjA6NDI6MjQgKzAw MDAKU3ViamVjdDogW1BBVENIIHYzXSBBZGQgWElEIGFnZSBiYXNlZCByZXBsaWNhdGlvbiBzbG90 IGludmFsaWRhdGlvbgoKSW50cm9kdWNlIG1heF9zbG90X3hpZF9hZ2UsIGEgR1VDIHRoYXQgaW52 YWxpZGF0ZXMgcmVwbGljYXRpb24Kc2xvdHMgd2hvc2UgeG1pbiBvciBjYXRhbG9nX3htaW4gZXhj ZWVkcyB0aGUgc3BlY2lmaWVkIGFnZS4KRGlzYWJsZWQgYnkgZGVmYXVsdC4KCklkbGUgb3IgZm9y Z290dGVuIHJlcGxpY2F0aW9uIHNsb3RzIGNhbiBob2xkIGJhY2sgdmFjdXVtLCBsZWFkaW5nCnRv IGJsb2F0IGFuZCBldmVudHVhbGx5IFhJRCB3cmFwYXJvdW5kLiBJbiB0aGUgd29yc3QgY2FzZSB0 aGlzCnJlcXVpcmVzIGRyb3BwaW5nIHRoZSBzbG90IGFuZCBzaW5nbGUtdXNlciBtb2RlIHZhY3V1 bWluZy4gVGhpcwpzZXR0aW5nIGF2b2lkcyB0aGF0IGJ5IHByb2FjdGl2ZWx5IGludmFsaWRhdGlu ZyBzbG90cyB0aGF0IGhhdmUKZmFsbGVuIHRvbyBmYXIgYmVoaW5kLgoKSW52YWxpZGF0aW9uIGNo ZWNrcyBhcmUgcGVyZm9ybWVkIG9uY2UgcGVyIHJlbGF0aW9uIGR1cmluZyB2YWN1dW0KKGJvdGgg dmFjdXVtIGNvbW1hbmQgYW5kIGF1dG92YWN1dW0pLgotLS0KIGRvYy9zcmMvc2dtbC9jb25maWcu c2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAyOSArKysKIGRvYy9zcmMvc2dtbC9zeXN0ZW0t dmlld3Muc2dtbCAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9nLmMgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3Zh Y3V1bS5jICAgICAgICAgICAgICAgICB8ICAxNiArKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v c2xvdC5jICAgICAgICAgICAgICAgIHwgMTU3ICsrKysrKysrKysrKysrKystCiBzcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDIgKwogc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vc2xvdC5oICAgICAgICAgICAgICAgIHwgIDEwICstCiBzcmMvdGVzdC9yZWNvdmVy eS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbCAgICAgfCAxNjYgKysrKysrKysrKysrKysrKysrCiAx MCBmaWxlcyBjaGFuZ2VkLCAzOTQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sCmluZGV4IDhjZGQ4MjZmYmQzLi5lMDRiMTM4NDcwMyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNDc2NCw2 ICs0NzY0LDM1IEBAIHJlc3RvcmVfY29tbWFuZCA9ICdjb3B5ICJDOlxcc2VydmVyXFxhcmNoaXZl ZGlyXFwlZiIgIiVwIicgICMgV2luZG93cwogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJs aXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLW1heC1zbG90LXhpZC1hZ2Ui IHhyZWZsYWJlbD0ibWF4X3Nsb3RfeGlkX2FnZSI+CisgICAgICA8dGVybT48dmFybmFtZT5tYXhf c2xvdF94aWRfYWdlPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgICA8aW5k ZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPm1heF9zbG90X3hpZF9hZ2U8L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+ CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAg IEludmFsaWRhdGUgcmVwbGljYXRpb24gc2xvdHMgd2hvc2UgPGxpdGVyYWw+eG1pbjwvbGl0ZXJh bD4gKHRoZSBvbGRlc3QKKyAgICAgICAgdHJhbnNhY3Rpb24gdGhhdCB0aGlzIHNsb3QgbmVlZHMg dGhlIGRhdGFiYXNlIHRvIHJldGFpbikgb3IKKyAgICAgICAgPGxpdGVyYWw+Y2F0YWxvZ194bWlu PC9saXRlcmFsPiAodGhlIG9sZGVzdCB0cmFuc2FjdGlvbiBhZmZlY3RpbmcgdGhlCisgICAgICAg IHN5c3RlbSBjYXRhbG9ncyB0aGF0IHRoaXMgc2xvdCBuZWVkcyB0aGUgZGF0YWJhc2UgdG8gcmV0 YWluKSBoYXMgcmVhY2hlZAorICAgICAgICB0aGUgYWdlIHNwZWNpZmllZCBieSB0aGlzIHNldHRp bmcuIFRoaXMgaW52YWxpZGF0aW9uIGNoZWNrIGhhcHBlbnMKKyAgICAgICAgZHVyaW5nIHZhY3V1 bSAoYm90aCA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IGNvbW1hbmQgYW5kIGF1dG92YWN1dW0p LgorICAgICAgICBBIHZhbHVlIG9mIHplcm8gKHdoaWNoIGlzIGRlZmF1bHQpIGRpc2FibGVzIHRo aXMgZmVhdHVyZS4gVXNlcnMgY2FuIHNldAorICAgICAgICB0aGlzIHZhbHVlIGFueXdoZXJlIGZy b20gemVybyB0byB0d28gYmlsbGlvbi4gVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUKKyAgICAg ICAgc2V0IGluIHRoZSA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBv ciBvbiB0aGUgc2VydmVyCisgICAgICAgIGNvbW1hbmQgbGluZS4KKyAgICAgICA8L3BhcmE+CisK KyAgICAgICA8cGFyYT4KKyAgICAgICAgSWRsZSBvciBmb3Jnb3R0ZW4gcmVwbGljYXRpb24gc2xv dHMgY2FuIGhvbGQgYmFjayB2YWN1dW0sIGxlYWRpbmcgdG8KKyAgICAgICAgYmxvYXQgYW5kIGV2 ZW50dWFsbHkgdHJhbnNhY3Rpb24gSUQgd3JhcGFyb3VuZC4gVGhpcyBzZXR0aW5nIGF2b2lkcwor ICAgICAgICB0aGF0IGJ5IGludmFsaWRhdGluZyBzbG90cyB0aGF0IGhhdmUgZmFsbGVuIHRvbyBm YXIgYmVoaW5kLgorICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0icm91dGluZS12YWN1dW1pbmci Lz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICA8L3BhcmE+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 eGxvZy5jCmluZGV4IGY1YzlhMzQzNzRkLi5kNWQ0MzYyMGFhZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYwpAQCAtNzQ0Myw3ICs3NDQzLDcgQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxh Z3MpCiAJS2VlcExvZ1NlZyhyZWNwdHIsICZfbG9nU2VnTm8pOwogCWlmIChJbnZhbGlkYXRlT2Jz b2xldGVSZXBsaWNhdGlvblNsb3RzKFJTX0lOVkFMX1dBTF9SRU1PVkVEIHwgUlNfSU5WQUxfSURM RV9USU1FT1VULAogCQkJCQkJCQkJCSAgIF9sb2dTZWdObywgSW52YWxpZE9pZCwKLQkJCQkJCQkJ CQkgICBJbnZhbGlkVHJhbnNhY3Rpb25JZCkpCisJCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0 aW9uSWQsIEludmFsaWRUcmFuc2FjdGlvbklkKSkKIAl7CiAJCS8qCiAJCSAqIFNvbWUgc2xvdHMg aGF2ZSBiZWVuIGludmFsaWRhdGVkOyByZWNhbGN1bGF0ZSB0aGUgb2xkLXNlZ21lbnQKQEAgLTc5 MDAsNyArNzkwMCw3IEBAIENyZWF0ZVJlc3RhcnRQb2ludChpbnQgZmxhZ3MpCiAKIAlpZiAoSW52 YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSU19JTlZBTF9XQUxfUkVNT1ZFRCB8IFJT X0lOVkFMX0lETEVfVElNRU9VVCwKIAkJCQkJCQkJCQkgICBfbG9nU2VnTm8sIEludmFsaWRPaWQs Ci0JCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpKQorCQkJCQkJCQkJCSAgIEludmFs aWRUcmFuc2FjdGlvbklkLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCkpCiAJewogCQkvKgogCQkgKiBT b21lIHNsb3RzIGhhdmUgYmVlbiBpbnZhbGlkYXRlZDsgcmVjYWxjdWxhdGUgdGhlIG9sZC1zZWdt ZW50CkBAIC04NzY0LDYgKzg3NjQsNyBAQCB4bG9nX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNv cmQpCiAJCQkJICovCiAJCQkJSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSU19J TlZBTF9XQUxfTEVWRUwsCiAJCQkJCQkJCQkJCQkgICAwLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJ CQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQsCiAJCQkJCQkJCQkJCQkgICBJbnZhbGlkVHJhbnNh Y3Rpb25JZCk7CiAJCQl9CiAJCQllbHNlIGlmIChzeW5jX3JlcGxpY2F0aW9uX3Nsb3RzKQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW0uYwppbmRleCBiY2UzYTJkYWEyNC4uMjUyMjI0YzBiZDYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ZhY3V1bS5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFj dXVtLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCIKICNpbmNs dWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3Qu aCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKQEAgLTExNDUsNiArMTE0NiwyMSBAQCB2 YWN1dW1fZ2V0X2N1dG9mZnMoUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgcGFyYW1z LAogCW5leHRYSUQgPSBSZWFkTmV4dFRyYW5zYWN0aW9uSWQoKTsKIAluZXh0TVhJRCA9IFJlYWRO ZXh0TXVsdGlYYWN0SWQoKTsKIAorCS8qCisJICogVHJ5IHRvIGludmFsaWRhdGUgWElELWFnZWQg cmVwbGljYXRpb24gc2xvdHMgdGhhdCBtYXkgaW50ZXJmZXJlIHdpdGgKKwkgKiB2YWN1dW0ncyBh YmlsaXR5IHRvIGZyZWV6ZSBhbmQgcmVtb3ZlIGRlYWQgdHVwbGVzLiBTaW5jZSBPbGRlc3RYbWlu CisJICogYWxyZWFkeSBjb3ZlcnMgdGhlIHNsb3QgeG1pbi9jYXRhbG9nX3htaW4gdmFsdWVzLCBw YXNzIGl0IGFzIGEKKwkgKiBwcmVsaW1pbmFyeSBjaGVjayB0byBhdm9pZCBhZGRpdGlvbmFsIGl0 ZXJhdGlvbiBvdmVyIGFsbCB0aGUgc2xvdHMuCisJICoKKwkgKiBJZiBhdCBsZWFzdCBvbmUgc2xv dCB3YXMgaW52YWxpZGF0ZWQsIHJlY29tcHV0ZSBPbGRlc3RYbWluIHNvIHRoYXQgdGhpcworCSAq IHZhY3V1bSBiZW5lZml0cyBmcm9tIHRoZSBhZHZhbmNlZCBob3Jpem9uIGltbWVkaWF0ZWx5Lgor CSAqLworCWlmIChJbnZhbGlkYXRlWElEQWdlZFJlcGxpY2F0aW9uU2xvdHMoY3V0b2Zmcy0+T2xk ZXN0WG1pbiwgbmV4dFhJRCkpCisJeworCQljdXRvZmZzLT5PbGRlc3RYbWluID0gR2V0T2xkZXN0 Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChyZWwpOworCQlBc3NlcnQoVHJhbnNhY3Rpb25JZElz Tm9ybWFsKGN1dG9mZnMtPk9sZGVzdFhtaW4pKTsKKwl9CisKIAkvKgogCSAqIEFsc28gY29tcHV0 ZSB0aGUgbXVsdGl4YWN0IGFnZSBmb3Igd2hpY2ggZnJlZXppbmcgaXMgdXJnZW50LiAgVGhpcyBp cwogCSAqIG5vcm1hbGx5IGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLCBidXQg bWF5IGJlIGxlc3MgaWYKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3Qu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRleCBhOTA5MmZjMjM4Mi4uYjY5 MDVlN2JiNDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYworKysg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKQEAgLTExNyw2ICsxMTcsNyBAQCBzdGF0 aWMgY29uc3QgU2xvdEludmFsaWRhdGlvbkNhdXNlTWFwIFNsb3RJbnZhbGlkYXRpb25DYXVzZXNb XSA9IHsKIAl7UlNfSU5WQUxfSE9SSVpPTiwgInJvd3NfcmVtb3ZlZCJ9LAogCXtSU19JTlZBTF9X QUxfTEVWRUwsICJ3YWxfbGV2ZWxfaW5zdWZmaWNpZW50In0sCiAJe1JTX0lOVkFMX0lETEVfVElN RU9VVCwgImlkbGVfdGltZW91dCJ9LAorCXtSU19JTlZBTF9YSURfQUdFLCAieGlkX2FnZWQifSwK IH07CiAKIC8qCkBAIC0xNTgsNiArMTU5LDEyIEBAIGludAkJCW1heF9yZXBsaWNhdGlvbl9zbG90 cyA9IDEwOyAvKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVwbGljYXRpb24KICAqLwogaW50CQkJ aWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXRfc2VjcyA9IDA7CiAKKy8qCisgKiBJbnZhbGlk YXRlIHJlcGxpY2F0aW9uIHNsb3RzIHRoYXQgaGF2ZSB4bWluIG9yIGNhdGFsb2dfeG1pbiBncmVh dGVyCisgKiB0aGFuIHRoZSBzcGVjaWZpZWQgYWdlOyAnMCcgZGlzYWJsZXMgaXQuCisgKi8KK2lu dAkJCW1heF9zbG90X3hpZF9hZ2UgPSAwOworCiAvKgogICogVGhpcyBHVUMgbGlzdHMgc3RyZWFt aW5nIHJlcGxpY2F0aW9uIHN0YW5kYnkgc2VydmVyIHNsb3QgbmFtZXMgdGhhdAogICogbG9naWNh bCBXQUwgc2VuZGVyIHByb2Nlc3NlcyB3aWxsIHdhaXQgZm9yLgpAQCAtMTc2LDYgKzE4Myw4IEBA IHN0YXRpYyBYTG9nUmVjUHRyIHNzX29sZGVzdF9mbHVzaF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0 cjsKIHN0YXRpYyB2b2lkIFJlcGxpY2F0aW9uU2xvdFNobWVtRXhpdChpbnQgY29kZSwgRGF0dW0g YXJnKTsKIHN0YXRpYyBib29sIElzU2xvdEZvckNvbmZsaWN0Q2hlY2soY29uc3QgY2hhciAqbmFt ZSk7CiBzdGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3REcm9wUHRyKFJlcGxpY2F0aW9uU2xvdCAq c2xvdCk7CitzdGF0aWMgYm9vbCBJc1JlcGxpY2F0aW9uU2xvdFhJREFnZWQoVHJhbnNhY3Rpb25J ZCB4bWluLCBUcmFuc2FjdGlvbklkIGNhdGFsb2dfeG1pbiwKKwkJCQkJCQkJCSBUcmFuc2FjdGlv bklkIG5leHRYSUQpOwogCiAvKiBpbnRlcm5hbCBwZXJzaXN0ZW5jeSBmdW5jdGlvbnMgKi8KIHN0 YXRpYyB2b2lkIFJlc3RvcmVTbG90RnJvbURpc2soY29uc3QgY2hhciAqbmFtZSk7CkBAIC0xNzgw LDcgKzE3ODksMTAgQEAgUmVwb3J0U2xvdEludmFsaWRhdGlvbihSZXBsaWNhdGlvblNsb3RJbnZh bGlkYXRpb25DYXVzZSBjYXVzZSwKIAkJCQkJICAgWExvZ1JlY1B0ciByZXN0YXJ0X2xzbiwKIAkJ CQkJICAgWExvZ1JlY1B0ciBvbGRlc3RMU04sCiAJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNo b3RDb25mbGljdEhvcml6b24sCi0JCQkJCSAgIGxvbmcgc2xvdF9pZGxlX3NlY29uZHMpCisJCQkJ CSAgIGxvbmcgc2xvdF9pZGxlX3NlY29uZHMsCisJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeG1pbiwK KwkJCQkJICAgVHJhbnNhY3Rpb25JZCBjYXRhbG9nX3htaW4sCisJCQkJCSAgIFRyYW5zYWN0aW9u SWQgbmV4dFhJRCkKIHsKIAlTdHJpbmdJbmZvRGF0YSBlcnJfZGV0YWlsOwogCVN0cmluZ0luZm9E YXRhIGVycl9oaW50OwpAQCAtMTgyNSw2ICsxODM3LDM2IEBAIFJlcG9ydFNsb3RJbnZhbGlkYXRp b24oUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCQkJCQkJCSAiaWRs ZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXQiKTsKIAkJCQlicmVhazsKIAkJCX0KKworCQljYXNl IFJTX0lOVkFMX1hJRF9BR0U6CisJCQl7CisJCQkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlk KHhtaW4pIHx8IFRyYW5zYWN0aW9uSWRJc1ZhbGlkKGNhdGFsb2dfeG1pbikpOworCisJCQkJaWYg KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtaW4pKQorCQkJCXsKKwkJCQkJLyogdHJhbnNsYXRvcjog JXMgaXMgYSBHVUMgdmFyaWFibGUgbmFtZSAqLworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJf ZGV0YWlsLCBfKCJUaGUgc2xvdCdzIHhtaW4gJXUgYXQgbmV4dCB0cmFuc2FjdGlvbiBJRCAldSBl eGNlZWRzIHRoZSBhZ2UgJWQgc3BlY2lmaWVkIGJ5IFwiJXNcIi4iKSwKKwkJCQkJCQkJCSB4bWlu LAorCQkJCQkJCQkJIG5leHRYSUQsCisJCQkJCQkJCQkgbWF4X3Nsb3RfeGlkX2FnZSwKKwkJCQkJ CQkJCSAibWF4X3Nsb3RfeGlkX2FnZSIpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkv KiB0cmFuc2xhdG9yOiAlcyBpcyBhIEdVQyB2YXJpYWJsZSBuYW1lICovCisJCQkJCWFwcGVuZFN0 cmluZ0luZm8oJmVycl9kZXRhaWwsIF8oIlRoZSBzbG90J3MgY2F0YWxvZyB4bWluICV1IGF0IG5l eHQgdHJhbnNhY3Rpb24gSUQgJXUgZXhjZWVkcyB0aGUgYWdlICVkIHNwZWNpZmllZCBieSBcIiVz XCIuIiksCisJCQkJCQkJCQkgY2F0YWxvZ194bWluLAorCQkJCQkJCQkJIG5leHRYSUQsCisJCQkJ CQkJCQkgbWF4X3Nsb3RfeGlkX2FnZSwKKwkJCQkJCQkJCSAibWF4X3Nsb3RfeGlkX2FnZSIpOwor CQkJCX0KKworCQkJCS8qIHRyYW5zbGF0b3I6ICVzIGlzIGEgR1VDIHZhcmlhYmxlIG5hbWUgKi8K KwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJfaGludCwgXygiWW91IG1pZ2h0IG5lZWQgdG8gaW5j cmVhc2UgXCIlc1wiLiIpLAorCQkJCQkJCQkgIm1heF9zbG90X3hpZF9hZ2UiKTsKKwkJCQlicmVh azsKKwkJCX0KKwogCQljYXNlIFJTX0lOVkFMX05PTkU6CiAJCQlwZ191bnJlYWNoYWJsZSgpOwog CX0KQEAgLTE4NzQsNiArMTkxNiw3IEBAIHN0YXRpYyBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRp b25DYXVzZQogRGV0ZXJtaW5lU2xvdEludmFsaWRhdGlvbkNhdXNlKHVpbnQzMiBwb3NzaWJsZV9j YXVzZXMsIFJlcGxpY2F0aW9uU2xvdCAqcywKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG9sZGVzdExT TiwgT2lkIGRib2lkLAogCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhv cml6b24sCisJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCBuZXh0WElELAogCQkJCQkJCSAgIFRpbWVz dGFtcFR6ICppbmFjdGl2ZV9zaW5jZSwgVGltZXN0YW1wVHogbm93KQogewogCUFzc2VydChwb3Nz aWJsZV9jYXVzZXMgIT0gUlNfSU5WQUxfTk9ORSk7CkBAIC0xOTQ1LDYgKzE5ODgsMTEgQEAgRGV0 ZXJtaW5lU2xvdEludmFsaWRhdGlvbkNhdXNlKHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsIFJlcGxp Y2F0aW9uU2xvdCAqcywKIAkJfQogCX0KIAorCS8qIENoZWNrIGlmIHRoZSBzbG90IG5lZWRzIHRv IGJlIGludmFsaWRhdGVkIGR1ZSB0byBtYXhfc2xvdF94aWRfYWdlIEdVQyAqLworCWlmICgocG9z c2libGVfY2F1c2VzICYgUlNfSU5WQUxfWElEX0FHRSkgJiYKKwkJSXNSZXBsaWNhdGlvblNsb3RY SURBZ2VkKHMtPmRhdGEueG1pbiwgcy0+ZGF0YS5jYXRhbG9nX3htaW4sIG5leHRYSUQpKQorCQly ZXR1cm4gUlNfSU5WQUxfWElEX0FHRTsKKwogCXJldHVybiBSU19JTlZBTF9OT05FOwogfQogCkBA IC0xOTY3LDYgKzIwMTUsNyBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMy IHBvc3NpYmxlX2NhdXNlcywKIAkJCQkJCQkgICBSZXBsaWNhdGlvblNsb3QgKnMsCiAJCQkJCQkJ ICAgWExvZ1JlY1B0ciBvbGRlc3RMU04sCiAJCQkJCQkJICAgT2lkIGRib2lkLCBUcmFuc2FjdGlv bklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAorCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgbmV4 dFhJRCwKIAkJCQkJCQkgICBib29sICpyZWxlYXNlZF9sb2NrX291dCkKIHsKIAlpbnQJCQlsYXN0 X3NpZ25hbGVkX3BpZCA9IDA7CkBAIC0yMDE5LDYgKzIwNjgsNyBAQCBJbnZhbGlkYXRlUG9zc2li bHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCQkJCQkJCQkJCQkJCQlz LCBvbGRlc3RMU04sCiAJCQkJCQkJCQkJCQkJCQkJZGJvaWQsCiAJCQkJCQkJCQkJCQkJCQkJc25h cHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCQkJCQkJCQkJCQkJbmV4dFhJRCwKIAkJCQkJCQkJ CQkJCQkJCQkmaW5hY3RpdmVfc2luY2UsCiAJCQkJCQkJCQkJCQkJCQkJbm93KTsKIApAQCAtMjEx Miw3ICsyMTYyLDggQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3Nz aWJsZV9jYXVzZXMsCiAJCQkJUmVwb3J0U2xvdEludmFsaWRhdGlvbihpbnZhbGlkYXRpb25fY2F1 c2UsIHRydWUsIGFjdGl2ZV9waWQsCiAJCQkJCQkJCQkgICBzbG90bmFtZSwgcmVzdGFydF9sc24s CiAJCQkJCQkJCQkgICBvbGRlc3RMU04sIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAotCQkJCQkJ CQkJICAgc2xvdF9pZGxlX3NlY3MpOworCQkJCQkJCQkJICAgc2xvdF9pZGxlX3NlY3MsIHMtPmRh dGEueG1pbiwKKwkJCQkJCQkJCSAgIHMtPmRhdGEuY2F0YWxvZ194bWluLCBuZXh0WElEKTsKIAog CQkJCWlmIChNeUJhY2tlbmRUeXBlID09IEJfU1RBUlRVUCkKIAkJCQkJKHZvaWQpIFNpZ25hbFJl Y292ZXJ5Q29uZmxpY3QoR2V0UEdQcm9jQnlOdW1iZXIoYWN0aXZlX3Byb2MpLApAQCAtMjE2NSw3 ICsyMjE2LDggQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3NzaWJs ZV9jYXVzZXMsCiAJCQlSZXBvcnRTbG90SW52YWxpZGF0aW9uKGludmFsaWRhdGlvbl9jYXVzZSwg ZmFsc2UsIGFjdGl2ZV9waWQsCiAJCQkJCQkJCSAgIHNsb3RuYW1lLCByZXN0YXJ0X2xzbiwKIAkJ CQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJCQkJICAg c2xvdF9pZGxlX3NlY3MpOworCQkJCQkJCQkgICBzbG90X2lkbGVfc2Vjcywgcy0+ZGF0YS54bWlu LAorCQkJCQkJCQkgICBzLT5kYXRhLmNhdGFsb2dfeG1pbiwgbmV4dFhJRCk7CiAKIAkJCS8qIGRv bmUgd2l0aCB0aGlzIHNsb3QgZm9yIG5vdyAqLwogCQkJYnJlYWs7CkBAIC0yMTkyLDYgKzIyNDQs OCBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNl cywKICAqICAgbG9naWNhbC4KICAqIC0gUlNfSU5WQUxfSURMRV9USU1FT1VUOiBoYXMgYmVlbiBp ZGxlIGxvbmdlciB0aGFuIHRoZSBjb25maWd1cmVkCiAgKiAgICJpZGxlX3JlcGxpY2F0aW9uX3Ns b3RfdGltZW91dCIgZHVyYXRpb24uCisgKiAtIFJTX0lOVkFMX1hJRF9BR0U6IHNsb3QgeGlkIGFn ZSBpcyBvbGRlciB0aGFuIHRoZSBjb25maWd1cmVkCisgKiAgICJtYXhfc2xvdF94aWRfYWdlIiBh Z2UuCiAgKgogICogTm90ZTogVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBpbnZhbGlkYXRlIHRo ZSBzbG90IGZvciBtdWx0aXBsZSBwb3NzaWJsZQogICogY2F1c2VzIGluIGEgc2luZ2xlIHBhc3Ms IG1pbmltaXppbmcgcmVkdW5kYW50IGl0ZXJhdGlvbnMuIFRoZSAiY2F1c2UiCkBAIC0yMjA1LDcg KzIyNTksNyBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxl X2NhdXNlcywKIGJvb2wKIEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHModWludDMy IHBvc3NpYmxlX2NhdXNlcywKIAkJCQkJCQkJICAgWExvZ1NlZ05vIG9sZGVzdFNlZ25vLCBPaWQg ZGJvaWQsCi0JCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24p CisJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24sIFRyYW5z YWN0aW9uSWQgbmV4dFhJRCkKIHsKIAlYTG9nUmVjUHRyCW9sZGVzdExTTjsKIAlib29sCQlpbnZh bGlkYXRlZCA9IGZhbHNlOwpAQCAtMjI0NCw3ICsyMjk4LDcgQEAgcmVzdGFydDoKIAogCQlpZiAo SW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHBvc3NpYmxlX2NhdXNlcywgcywgb2xkZXN0 TFNOLAogCQkJCQkJCQkJCSAgIGRib2lkLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJ CQkJCQkgICAmcmVsZWFzZWRfbG9jaykpCisJCQkJCQkJCQkJICAgbmV4dFhJRCwgJnJlbGVhc2Vk X2xvY2spKQogCQl7CiAJCQlBc3NlcnQocmVsZWFzZWRfbG9jayk7CiAKQEAgLTMyNzUsMyArMzMy OSw5NiBAQCBXYWl0Rm9yU3RhbmRieUNvbmZpcm1hdGlvbihYTG9nUmVjUHRyIHdhaXRfZm9yX2xz bikKIAogCUNvbmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsKIH0KKworLyoKKyAqIFJldHVy biB0cnVlIGlmIHhtaW4gb3IgY2F0YWxvZ194bWluIGV4Y2VlZHMgdGhlIG1heF9zbG90X3hpZF9h Z2UgR1VDLgorICovCitzdGF0aWMgYm9vbAorSXNSZXBsaWNhdGlvblNsb3RYSURBZ2VkKFRyYW5z YWN0aW9uSWQgeG1pbiwgVHJhbnNhY3Rpb25JZCBjYXRhbG9nX3htaW4sCisJCQkJCQkgVHJhbnNh Y3Rpb25JZCBuZXh0WElEKQoreworCVRyYW5zYWN0aW9uSWQgY3V0b2ZmWElEOworCWJvb2wJCWFn ZWQgPSBmYWxzZTsKKworCWlmIChtYXhfc2xvdF94aWRfYWdlID09IDApCisJCXJldHVybiBmYWxz ZTsKKworCWlmICghVHJhbnNhY3Rpb25JZElzTm9ybWFsKG5leHRYSUQpKQorCQlyZXR1cm4gZmFs c2U7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBvbGRlc3QgWElEIGEgc2xvdCdzIHhtaW4gb3IgY2F0 YWxvZ194bWluIGNhbiBoYXZlIGJlZm9yZSB0aGV5CisJICogYXJlIGludmFsaWRhdGVkLgorCSAq LworCWN1dG9mZlhJRCA9IG5leHRYSUQgLSBtYXhfc2xvdF94aWRfYWdlOworCisJLyogZW5zdXJl IGl0J3MgYSAibm9ybWFsIiBYSUQsIGVsc2UgVHJhbnNhY3Rpb25JZFByZWNlZGVzIG1pc2JlaGF2 ZXMgKi8KKwkvKiB0aGlzIGNhbiBjYXVzZSB0aGUgbGltaXQgdG8gZ28gYmFja3dhcmRzIGJ5IDMs IGJ1dCB0aGF0J3MgT0sgKi8KKwlpZiAoY3V0b2ZmWElEIDwgRmlyc3ROb3JtYWxUcmFuc2FjdGlv bklkKQorCQljdXRvZmZYSUQgLT0gRmlyc3ROb3JtYWxUcmFuc2FjdGlvbklkOworCisJaWYgKFRy YW5zYWN0aW9uSWRJc05vcm1hbCh4bWluKSAmJgorCQlUcmFuc2FjdGlvbklkUHJlY2VkZXMoeG1p biwgY3V0b2ZmWElEKSkKKwkJYWdlZCA9IHRydWU7CisKKwlpZiAoVHJhbnNhY3Rpb25JZElzTm9y bWFsKGNhdGFsb2dfeG1pbikgJiYKKwkJVHJhbnNhY3Rpb25JZFByZWNlZGVzKGNhdGFsb2dfeG1p biwgY3V0b2ZmWElEKSkKKwkJYWdlZCA9IHRydWU7CisKKwlyZXR1cm4gYWdlZDsKK30KKworLyoK KyAqIEludmFsaWRhdGUgcmVwbGljYXRpb24gc2xvdHMgd2hvc2UgWElEIGFnZSBleGNlZWRzIHRo ZSBtYXhfc2xvdF94aWRfYWdlCisgKiBHVUMuCisgKgorICogVGhlIGNhbGxlciBzdXBwbGllcyBv bGRlc3RYbWluLCBlaXRoZXIgY29tcHV0ZWQgdmlhCisgKiBHZXRPbGRlc3ROb25SZW1vdmFibGVU cmFuc2FjdGlvbklkIGR1cmluZyB2YWN1dW0sIG9yIGNvbXB1dGVkIHZpYSB0aGUKKyAqIG1pbmlt dW0gb2Ygc2xvdCB4bWluIHZhbHVlcyBvYnRhaW5lZCBmcm9tIFByb2NBcnJheUdldFJlcGxpY2F0 aW9uU2xvdFhtaW4sCisgKiBhbmQgbmV4dFhJRCwgdGhlIG5leHQgWElEIHRvIGJlIGFzc2lnbmVk IHVzZWQgdG8gY29tcHV0ZSB0aGUgYWdlLgorICoKKyAqIEEgcHJlbGltaW5hcnkgY2hlY2sgYmFz ZWQgb24gdGhlIHBhc3NlZC1pbiBvbGRlc3RYbWluIGlzIGRvbmUgdG8gYXZvaWQKKyAqIHVubmVj ZXNzYXJpbHkgaXRlcmF0aW5nIG92ZXIgYWxsIHRoZSBzbG90cy4gIEZvciB0aGlzIGNoZWNrIHRv IGJlCisgKiBlZmZlY3RpdmUsIG9sZGVzdFhtaW4gbXVzdCBhY2NvdW50IGZvciBzbG90IHhtaW4v Y2F0YWxvZ194bWluIHZhbHVlczsgaWYKKyAqIGl0cyBhZ2UgZG9lcyBub3QgZXhjZWVkIHRoZSBH VUMgdGhlbiBubyBpbmRpdmlkdWFsIHNsb3QgY2FuIGVpdGhlciwgc28gdGhlCisgKiBwZXItc2xv dCBzY2FuIGlzIHNraXBwZWQuICBGb3IgZXhhbXBsZSwgaWYgb2xkZXN0WG1pbiBpcyAxMDAgYW5k IHRoZSBHVUMKKyAqIGlzIDUwMCwgZXZlcnkgc2xvdCdzIHhtaW4gbXVzdCBiZSA+PSAxMDAsIHNv IG5vbmUgY2FuIGJlIG9sZGVyIHRoYW4gdGhlCisgKiBHVUMuCisgKgorICogRXZlbiBpZiB0aGUg Y2FsbGVyIHBhc3NlcyBhbiBvbGRlc3RYbWluIHRoYXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc2xv dAorICogeG1pbi9jYXRhbG9nX3htaW4gcmFuZ2UsIHRoZXJlIGlzIG5vIHJpc2sgb2YgaW5jb3Jy ZWN0IGludmFsaWRhdGlvbjogZWFjaAorICogc2xvdCdzIG93biB4bWluIGFuZCBjYXRhbG9nX3ht aW4gYXJlIGluZGl2aWR1YWxseSB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBHVUMKKyAqIGluc2lkZSBJ c1JlcGxpY2F0aW9uU2xvdFhJREFnZWQoKS4gVGhlIG9ubHkgZG93bnNpZGUgaXMgYW4gYWRkaXRp b25hbAorICogaXRlcmF0aW9uIG92ZXIgYWxsIHRoZSBzbG90cy4KKyAqCisgKiBSZXR1cm5zIHRy dWUgaWYgYXQgbGVhc3Qgb25lIHNsb3Qgd2FzIGludmFsaWRhdGVkLgorICovCitib29sCitJbnZh bGlkYXRlWElEQWdlZFJlcGxpY2F0aW9uU2xvdHMoVHJhbnNhY3Rpb25JZCBvbGRlc3RYbWluLCBU cmFuc2FjdGlvbklkIG5leHRYSUQpCit7CisJVHJhbnNhY3Rpb25JZCBjdXRvZmZYSUQ7CisJYm9v bAkJaW52YWxpZGF0ZWQgPSBmYWxzZTsKKworCUFzc2VydChUcmFuc2FjdGlvbklkSXNOb3JtYWwo b2xkZXN0WG1pbikpOworCisJaWYgKG1heF9zbG90X3hpZF9hZ2UgPT0gMCkKKwkJcmV0dXJuIGZh bHNlOworCisJY3V0b2ZmWElEID0gbmV4dFhJRCAtIG1heF9zbG90X3hpZF9hZ2U7CisKKwkvKiBl bnN1cmUgaXQncyBhICJub3JtYWwiIFhJRCwgZWxzZSBUcmFuc2FjdGlvbklkUHJlY2VkZXMgbWlz YmVoYXZlcyAqLworCS8qIHRoaXMgY2FuIGNhdXNlIHRoZSBsaW1pdCB0byBnbyBiYWNrd2FyZHMg YnkgMywgYnV0IHRoYXQncyBPSyAqLworCWlmICghVHJhbnNhY3Rpb25JZElzTm9ybWFsKGN1dG9m ZlhJRCkpCisJCWN1dG9mZlhJRCA9IEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZDsKKworCWlmIChU cmFuc2FjdGlvbklkUHJlY2VkZXMob2xkZXN0WG1pbiwgY3V0b2ZmWElEKSkKKwl7CisJCWludmFs aWRhdGVkID0gSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSU19JTlZBTF9YSURf QUdFLAorCQkJCQkJCQkJCQkJCQkgMCwKKwkJCQkJCQkJCQkJCQkJIEludmFsaWRPaWQsCisJCQkJ CQkJCQkJCQkJCSBJbnZhbGlkVHJhbnNhY3Rpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG5leHRYSUQp OworCX0KKworCXJldHVybiBpbnZhbGlkYXRlZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnku YwppbmRleCBmM2FkOTBjN2M3YS4uMjY4MTZkOGI3M2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFu ZGJ5LmMKQEAgLTUwMyw3ICs1MDMsOCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFw c2hvdChUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAogCSAqLwogCWlmIChJ c0xvZ2ljYWxEZWNvZGluZ0VuYWJsZWQoKSAmJiBpc0NhdGFsb2dSZWwpCiAJCUludmFsaWRhdGVP YnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfSE9SSVpPTiwgMCwgbG9jYXRvci5kYk9p ZCwKLQkJCQkJCQkJCQkgICBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbik7CisJCQkJCQkJCQkJICAg c25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9u SWQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFy YW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApp bmRleCAwYzk4NTRhZDhmYy4uN2ZhYjAyZjFlZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0yMDQ5LDYgKzIwNDksMTQgQEAKICAgbWF4ID0+ICdNQVhf S0lMT0JZVEVTJywKIH0sCiAKK3sgbmFtZSA9PiAnbWF4X3Nsb3RfeGlkX2FnZScsIHR5cGUgPT4g J2ludCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdIVVAnLCBncm91cCA9PiAnUkVQTElDQVRJT05fU0VO RElORycsCisgIHNob3J0X2Rlc2MgPT4gJ0FnZSBvZiB0aGUgdHJhbnNhY3Rpb24gSUQgYXQgd2hp Y2ggYSByZXBsaWNhdGlvbiBzbG90IGdldHMgaW52YWxpZGF0ZWQuJywKKyAgdmFyaWFibGUgPT4g J21heF9zbG90X3hpZF9hZ2UnLAorICBib290X3ZhbCA9PiAnMCcsCisgIG1pbiA9PiAnMCcsCisg IG1heCA9PiAnMjAwMDAwMDAwMCcsCit9LAorCiAjIFdlIHVzZSB0aGUgaG9wZWZ1bGx5LXNhZmVs eS1zbWFsbCB2YWx1ZSBvZiAxMDBrQiBhcyB0aGUgY29tcGlsZWQtaW4KICMgZGVmYXVsdCBmb3Ig bWF4X3N0YWNrX2RlcHRoLiAgSW5pdGlhbGl6ZUdVQ09wdGlvbnMgd2lsbCBpbmNyZWFzZSBpdAog IyBpZiBwb3NzaWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBhY3R1YWwgcGxhdGZvcm0tc3BlY2lmaWMg c3RhY2sgbGltaXQuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUKaW5kZXggZTRhYmU2YzAwNzcuLjBmNzI4ZDg3YjZjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zNTEsNiArMzUxLDggQEAKICN3 YWxfa2VlcF9zaXplID0gMCAgICAgICAgICAgICAgIyBpbiBtZWdhYnl0ZXM7IDAgZGlzYWJsZXMK ICNtYXhfc2xvdF93YWxfa2VlcF9zaXplID0gLTEgICAgIyBpbiBtZWdhYnl0ZXM7IC0xIGRpc2Fi bGVzCiAjaWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXQgPSAwICAgICAgIyBpbiBzZWNvbmRz OyAwIGRpc2FibGVzCisjbWF4X3Nsb3RfeGlkX2FnZSA9IDAgICAgICAgICAgICMgbWF4aW11bSBY SUQgYWdlIGJlZm9yZSBhIHJlcGxpY2F0aW9uIHNsb3QKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBnZXRzIGludmFsaWRhdGVkOyAwIGRpc2FibGVzCiAjd2FsX3NlbmRlcl90aW1l b3V0ID0gNjBzICAgICAgICMgaW4gbWlsbGlzZWNvbmRzOyAwIGRpc2FibGVzCiAjdHJhY2tfY29t bWl0X3RpbWVzdGFtcCA9IG9mZiAgICMgY29sbGVjdCB0aW1lc3RhbXAgb2YgdHJhbnNhY3Rpb24g Y29tbWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJl cyByZXN0YXJ0KQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCmluZGV4IDRiNDcwOWY2ZTJjLi44M2NmODQz ODcyNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaApAQCAtNjYsMTAgKzY2LDEyIEBAIHR5cGVkZWYg ZW51bSBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZQogCVJTX0lOVkFMX1dBTF9MRVZF TCA9ICgxIDw8IDIpLAogCS8qIGlkbGUgc2xvdCB0aW1lb3V0IGhhcyBvY2N1cnJlZCAqLwogCVJT X0lOVkFMX0lETEVfVElNRU9VVCA9ICgxIDw8IDMpLAorCS8qIHNsb3QncyB4bWluIG9yIGNhdGFs b2dfeG1pbiBoYXMgcmVhY2hlZCBtYXggeGlkIGFnZSAqLworCVJTX0lOVkFMX1hJRF9BR0UgPSAo MSA8PCA0KSwKIH0gUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2U7CiAKIC8qIE1heGlt dW0gbnVtYmVyIG9mIGludmFsaWRhdGlvbiBjYXVzZXMgKi8KLSNkZWZpbmUJUlNfSU5WQUxfTUFY X0NBVVNFUyA0CisjZGVmaW5lCVJTX0lOVkFMX01BWF9DQVVTRVMgNQogCiAvKgogICogV2hlbiB0 aGUgc2xvdCBzeW5jaHJvbml6YXRpb24gd29ya2VyIGlzIHJ1bm5pbmcsIG9yIHdoZW4KQEAgLTMy Niw2ICszMjgsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgUmVwbGljYXRpb25TbG90ICpNeVJlcGxp Y2F0aW9uU2xvdDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3JlcGxpY2F0aW9uX3Nsb3Rz OwogZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKnN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBpZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGltZW91dF9zZWNz OworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfc2xvdF94aWRfYWdlOwogCiAvKiBzaG1lbSBp bml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVybiBTaXplIFJlcGxpY2F0aW9uU2xvdHNT aG1lbVNpemUodm9pZCk7CkBAIC0zNjcsNyArMzcwLDggQEAgZXh0ZXJuIHZvaWQgUmVwbGljYXRp b25TbG90c0Ryb3BEQlNsb3RzKE9pZCBkYm9pZCk7CiBleHRlcm4gYm9vbCBJbnZhbGlkYXRlT2Jz b2xldGVSZXBsaWNhdGlvblNsb3RzKHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJCQkJCQkJCQkJ CSAgIFhMb2dTZWdObyBvbGRlc3RTZWdubywKIAkJCQkJCQkJCQkJICAgT2lkIGRib2lkLAotCQkJ CQkJCQkJCQkgICBUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uKTsKKwkJCQkJ CQkJCQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKKwkJCQkJCQkJ CQkJICAgVHJhbnNhY3Rpb25JZCBuZXh0WElEKTsKIGV4dGVybiBSZXBsaWNhdGlvblNsb3QgKlNl YXJjaE5hbWVkUmVwbGljYXRpb25TbG90KGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgbmVlZF9sb2Nr KTsKIGV4dGVybiBpbnQJUmVwbGljYXRpb25TbG90SW5kZXgoUmVwbGljYXRpb25TbG90ICpzbG90 KTsKIGV4dGVybiBib29sIFJlcGxpY2F0aW9uU2xvdE5hbWUoaW50IGluZGV4LCBOYW1lIG5hbWUp OwpAQCAtMzg3LDQgKzM5MSw2IEBAIGV4dGVybiBib29sIFNsb3RFeGlzdHNJblN5bmNTdGFuZGJ5 U2xvdHMoY29uc3QgY2hhciAqc2xvdF9uYW1lKTsKIGV4dGVybiBib29sIFN0YW5kYnlTbG90c0hh dmVDYXVnaHR1cChYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbiwgaW50IGVsZXZlbCk7CiBleHRlcm4g dm9pZCBXYWl0Rm9yU3RhbmRieUNvbmZpcm1hdGlvbihYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbik7 CiAKK2V4dGVybiBib29sIEludmFsaWRhdGVYSURBZ2VkUmVwbGljYXRpb25TbG90cyhUcmFuc2Fj dGlvbklkIG9sZGVzdFhtaW4sIFRyYW5zYWN0aW9uSWQgbmV4dFhJRCk7CisKICNlbmRpZgkJCQkJ CQkvKiBTTE9UX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxz bG90X2xpbWl0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwK aW5kZXggN2IyNTNlNjRkOWMuLmY0ZGZkMDA2NGM3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNv dmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAx OV9yZXBsc2xvdF9saW1pdC5wbApAQCAtNTQwLDQgKzU0MCwxNzAgQEAgaXMoICRwdWJsaXNoZXI0 LT5zYWZlX3BzcWwoCiAkcHVibGlzaGVyNC0+c3RvcDsKICRzdWJzY3JpYmVyNC0+c3RvcDsKIAor IyBBZHZhbmNlIFhJRHMsIHJ1biBWQUNVVU0sIGFuZCB3YWl0IGZvciBhIHNsb3QgdG8gYmUgaW52 YWxpZGF0ZWQgZHVlIHRvIFhJRCBhZ2UuCitzdWIgaW52YWxpZGF0ZV9zbG90X2J5X3hpZF9hZ2UK K3sKKwlteSAoJG5vZGUsICR0YWJsZV9uYW1lLCAkc2xvdF9uYW1lLCAkc2xvdF90eXBlLCAkbnhp ZHMpID0gQF87CisKKwkjIERvIHNvbWUgd29yayB0byBhZHZhbmNlIHhpZHMKKwkkbm9kZS0+c2Fm ZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxcVsKKwkJZG8gXCRcJAorCQliZWdpbgorCQlmb3IgaSBp biAxLi4kbnhpZHMgbG9vcAorCQkJLS0gdXNlIGFuIGV4Y2VwdGlvbiBibG9jayBzbyB0aGF0IGVh Y2ggaXRlcmF0aW9uIGVhdHMgYW4gWElECisJCQliZWdpbgorCQkJaW5zZXJ0IGludG8gJHRhYmxl X25hbWUgdmFsdWVzIChpKTsKKwkJCWV4Y2VwdGlvbgorCQkJd2hlbiBkaXZpc2lvbl9ieV96ZXJv IHRoZW4gbnVsbDsKKwkJCWVuZDsKKwkJZW5kIGxvb3A7CisJCWVuZFwkXCQ7CisJXSk7CisKKwkj IFRyaWdnZXIgc2xvdCBpbnZhbGlkYXRpb24gdmlhIFZBQ1VVTQorCSRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlZBQ1VVTSIpOworCisJIyBXYWl0IGZvciB0aGUgcmVwbGljYXRpb24gc2xv dCB0byBiZSBpbnZhbGlkYXRlZCBkdWUgdG8gWElEIGFnZS4KKwkkbm9kZS0+cG9sbF9xdWVyeV91 bnRpbCgKKwkJJ3Bvc3RncmVzJywgcXFbCisJCVNFTEVDVCBDT1VOVChzbG90X25hbWUpID0gMSBG Uk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzCisJCQlXSEVSRSBzbG90X25hbWUgPSAnJHNsb3RfbmFt ZScgQU5ECisJCQlhY3RpdmUgPSBmYWxzZSBBTkQKKwkJCWludmFsaWRhdGlvbl9yZWFzb24gPSAn eGlkX2FnZWQnOworCV0pCisJICBvciBkaWUKKwkgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBm b3Igc2xvdCAkc2xvdF9uYW1lIHRvIGJlIGludmFsaWRhdGVkIjsKKworCW9rKDEsICIkc2xvdF90 eXBlIHJlcGxpY2F0aW9uIHNsb3QgaW52YWxpZGF0ZWQgZHVlIHRvIFhJRCBhZ2UiKTsKK30KKwor IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorIyBUZXN0Y2FzZSBzdGFydDogSW52YWxpZGF0ZSBzdHJl YW1pbmcgc3RhbmRieSdzIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UKKyMgR1VDLgorCisj IEluaXRpYWxpemUgcHJpbWFyeSBub2RlIGZvciBYSUQgYWdlIHRlc3RzCitteSAkcHJpbWFyeTUg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnk1Jyk7CiskcHJpbWFyeTUt PmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworCisjIENvbmZpZ3VyZSBwcmlt YXJ5IHdpdGggWElEIGFnZSBzZXR0aW5ncworbXkgJG1heF9zbG90X3hpZF9hZ2UgPSA1MDA7Cisk cHJpbWFyeTUtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKK21heF9zbG90 X3hpZF9hZ2UgPSAkbWF4X3Nsb3RfeGlkX2FnZQorfSk7CisKKyRwcmltYXJ5NS0+c3RhcnQ7CisK KyMgVGFrZSBhIGJhY2t1cCBmb3IgY3JlYXRpbmcgc3RhbmRieQorJGJhY2t1cF9uYW1lID0gJ2Jh Y2t1cDUnOworJHByaW1hcnk1LT5iYWNrdXAoJGJhY2t1cF9uYW1lKTsKKworIyBDcmVhdGUgYSBz dGFuZGJ5IGxpbmtpbmcgdG8gdGhlIHByaW1hcnkgdXNpbmcgdGhlIHJlcGxpY2F0aW9uIHNsb3QK K215ICRzdGFuZGJ5NSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieTUn KTsKKyRzdGFuZGJ5NS0+aW5pdF9mcm9tX2JhY2t1cCgkcHJpbWFyeTUsICRiYWNrdXBfbmFtZSwg aGFzX3N0cmVhbWluZyA9PiAxKTsKKworIyBFbmFibGUgSFMgZmVlZGJhY2suIFRoZSBzbG90IHNo b3VsZCBnYWluIGFuIHhtaW4uIFdlIHNldCB0aGUgc3RhdHVzIGludGVydmFsCisjIHNvIHdlJ2xs IHNlZSB0aGUgcmVzdWx0cyBwcm9tcHRseS4KKyRzdGFuZGJ5NS0+YXBwZW5kX2NvbmYoCisJJ3Bv c3RncmVzcWwuY29uZicsIHF7CitwcmltYXJ5X3Nsb3RfbmFtZSA9ICdzYjVfc2xvdCcKK2hvdF9z dGFuZGJ5X2ZlZWRiYWNrID0gb24KK3dhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwgPSAxCitt YXhfc3RhbmRieV9zdHJlYW1pbmdfZGVsYXkgPSAzNjAwMDAwCit9KTsKKworJHByaW1hcnk1LT5z YWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAgU0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNh bF9yZXBsaWNhdGlvbl9zbG90KHNsb3RfbmFtZSA6PSAnc2I1X3Nsb3QnLCBpbW1lZGlhdGVseV9y ZXNlcnZlIDo9IHRydWUpOworXSk7CisKKyRzdGFuZGJ5NS0+c3RhcnQ7CisKKyMgQ3JlYXRlIHNv bWUgY29udGVudCBvbiBwcmltYXJ5IHRvIG1vdmUgeG1pbgorJHByaW1hcnk1LT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRhYl9pbnQ1IEFTIFNFTEVDVCBnZW5lcmF0ZV9z ZXJpZXMoMSwxMCkgQVMgYSIpOworCisjIFdhaXQgdW50aWwgc3RhbmRieSBoYXMgcmVwbGF5ZWQg ZW5vdWdoIGRhdGEKKyRwcmltYXJ5NS0+d2FpdF9mb3JfY2F0Y2h1cCgkc3RhbmRieTUpOworCisk cHJpbWFyeTUtPnBvbGxfcXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXFbCisJU0VMRUNUICh4 bWluIElTIE5PVCBOVUxMKSBPUiAoY2F0YWxvZ194bWluIElTIE5PVCBOVUxMKQorCQlGUk9NIHBn X2NhdGFsb2cucGdfcmVwbGljYXRpb25fc2xvdHMKKwkJV0hFUkUgc2xvdF9uYW1lID0gJ3NiNV9z bG90JzsKK10pIG9yIGRpZSAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNsb3Qgc2I1X3Nsb3QgeG1p biB0byBhZHZhbmNlIjsKKworIyBSZWFkIG9uIHN0YW5kYnkgdGhhdCBjYXVzZXMgeG1pbiB0byBi ZSBoZWxkIG9uIHNsb3QKK215ICRzdGFuZGJ5NV9zZXNzaW9uID0gJHN0YW5kYnk1LT5pbnRlcmFj dGl2ZV9wc3FsKCdwb3N0Z3JlcycpOworJHN0YW5kYnk1X3Nlc3Npb24tPnF1ZXJ5KCJCRUdJTjsg U0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uID0gJ3JlcGVhdGFibGUgcmVhZCc7IFNF TEVDVCAqIEZST00gdGFiX2ludDU7Iik7CisKKyMgQWR2YW5jZSBYSURzIGFuZCB3YWl0IGZvciB0 aGUgc2xvdCB0byBiZSBpbnZhbGlkYXRlZCBkdWUgdG8gWElEIGFnZS4KKyMgVXNlIDJ4IHRoZSBt YXhfc2xvdF94aWRfYWdlIHRvIGVuc3VyZSB0aGUgc2xvdCdzIHhtaW4gYWdlIGNvbWZvcnRhYmx5 CisjIGV4Y2VlZHMgdGhlIGNvbmZpZ3VyZWQgbGltaXQuCitpbnZhbGlkYXRlX3Nsb3RfYnlfeGlk X2FnZSgkcHJpbWFyeTUsICd0YWJfaW50NScsICdzYjVfc2xvdCcsICdwaHlzaWNhbCcsCisJMiAq ICRtYXhfc2xvdF94aWRfYWdlKTsKKworJHN0YW5kYnk1X3Nlc3Npb24tPnF1aXQ7Ciskc3RhbmRi eTUtPnN0b3A7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIHN0cmVhbWluZyBzdGFuZGJ5 J3Mgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZQorIyBHVUMuCisjID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IEludmFs aWRhdGUgbG9naWNhbCBzdWJzY3JpYmVyJ3Mgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZQor IyBHVUMuCisKKyMgQ3JlYXRlIGEgc3Vic2NyaWJlciBub2RlCitteSAkc3Vic2NyaWJlcjUgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXI1Jyk7Ciskc3Vic2NyaWJl cjUtPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJHN1YnNjcmliZXI1LT5z dGFydDsKKworIyBDcmVhdGUgdGFibGVzIG9uIGJvdGggcHJpbWFyeSBhbmQgc3Vic2NyaWJlcgor JHByaW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0ZXN0X3RibDUg KGlkIGludCkiKTsKKyRzdWJzY3JpYmVyNS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEUgdGVzdF90Ymw1IChpZCBpbnQpIik7CisKKyMgSW5zZXJ0IHNvbWUgaW5pdGlhbCBkYXRh CiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3Ri bDUgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMSwgNSkpOyIpOworCisjIFNldHVwIGxvZ2ljYWwg cmVwbGljYXRpb24KK215ICRwcmltYXJ5NV9jb25uc3RyID0gJHByaW1hcnk1LT5jb25uc3RyIC4g JyBkYm5hbWU9cG9zdGdyZXMnOworJHByaW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjUgRk9SIFRBQkxFIHRlc3RfdGJsNSIpOworCiskc3Vic2Ny aWJlcjUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHN1YjUg Q09OTkVDVElPTiAnJHByaW1hcnk1X2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHB1YjUgV0lUSCAoc2xv dF9uYW1lID0gJ2xzdWI1X3Nsb3QnKSIKKyk7CisKKyMgV2FpdCBmb3IgaW5pdGlhbCBzeW5jIHRv IGNvbXBsZXRlCiskc3Vic2NyaWJlcjUtPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRwcmlt YXJ5NSwgJ3N1YjUnKTsKKworJHJlc3VsdCA9ICRzdWJzY3JpYmVyNS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RibDUiKTsKK2lzKCRyZXN1bHQsIHFx KDUpLCAiY2hlY2sgaW5pdGlhbCBjb3B5IHdhcyBkb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9u IChYSUQgYWdlIHRlc3QpIik7CisKKyMgV2FpdCBmb3IgdGhlIGxvZ2ljYWwgc2xvdCB0byBnZXQg Y2F0YWxvZ194bWluIChsb2dpY2FsIHNsb3RzIHVzZSBjYXRhbG9nX3htaW4sIG5vdCB4bWluKQor JHByaW1hcnk1LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHFxWworCVNFTEVDVCB4 bWluIElTIE5VTEwgQU5EIGNhdGFsb2dfeG1pbiBJUyBOT1QgTlVMTAorCUZST00gcGdfY2F0YWxv Zy5wZ19yZXBsaWNhdGlvbl9zbG90cworCVdIRVJFIHNsb3RfbmFtZSA9ICdsc3ViNV9zbG90JzsK K10pIG9yIGRpZSAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNsb3QgbHN1YjVfc2xvdCBjYXRhbG9n X3htaW4gdG8gYWR2YW5jZSI7CisKKyMgU3RvcCBzdWJzY3JpYmVyIHRvIG1ha2UgdGhlIHJlcGxp Y2F0aW9uIHNsb3Qgb24gcHJpbWFyeSBpbmFjdGl2ZQorJHN1YnNjcmliZXI1LT5zdG9wOworCisj IEFkdmFuY2UgWElEcyBhbmQgd2FpdCBmb3IgdGhlIHNsb3QgdG8gYmUgaW52YWxpZGF0ZWQgZHVl IHRvIFhJRCBhZ2UuCisjIFVzZSAyeCB0aGUgbWF4X3Nsb3RfeGlkX2FnZSB0byBlbnN1cmUgdGhl IHNsb3QncyBjYXRhbG9nX3htaW4gYWdlCisjIGNvbWZvcnRhYmx5IGV4Y2VlZHMgdGhlIGNvbmZp Z3VyZWQgbGltaXQuCitpbnZhbGlkYXRlX3Nsb3RfYnlfeGlkX2FnZSgkcHJpbWFyeTUsICd0ZXN0 X3RibDUnLCAnbHN1YjVfc2xvdCcsICdsb2dpY2FsJywKKwkyICogJG1heF9zbG90X3hpZF9hZ2Up OworCiskcHJpbWFyeTUtPnN0b3A7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIGxvZ2lj YWwgc3Vic2NyaWJlcidzIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UKKyMgR1VDLgorIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorCiBkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcuMwoK --000000000000d2d4b4064dcc08bb--