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 1wAIxr-002Fk9-0v for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 02:48:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAIxp-004HiR-2R for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 02:48:22 +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 1wAIxp-004HiJ-17 for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 02:48:21 +0000 Received: from mail-dy1-x1335.google.com ([2607:f8b0:4864:20::1335]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAIxm-00000001E75-0YJc for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 02:48:21 +0000 Received: by mail-dy1-x1335.google.com with SMTP id 5a478bee46e88-2cbc50e6a36so415422eec.3 for ; Tue, 07 Apr 2026 19:48:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775616496; cv=none; d=google.com; s=arc-20240605; b=SwE/Z6OHW2xgFc/l3InyZBisGDlJFLnBJK4ZlmsaPMIYppHcxdy7QiWBTfelv843LN eTzc45xUlVzRjohKJdSWgvEGjeYfByBReDPw7TJTaqiNZihY7Ed5XvfaEznke8z0+/Zi DzEvWRm043FEivue5k6XMkSRlK2SiY3QGE/VomvJKFwv4ACL6xOoo2p2pUMs1LCZZdUY mog06SdAcW8/v38lUg6pfp2k6ed4QnNIFWQ5wFka3zpGGs6a1C1X68BSQ4bgO1cY7+PT XOsc2CmlAErVgPJ7/pu2CPlFs3RmC/JPovj4DBZFZvQYmEXcq8E0U5IXWgxz+SInT0v2 gkUg== 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=99yQXjtyWrG+23JqWJUq+Ax2Ni877YBb7WEPiszSDbY=; fh=kj3MIgbEvSoQ7LqfAmuoYWqslbZxxNSYersdePr1bVY=; b=jsWWRyVAXgPNJaKQAlcsJgc79rzy67AzlOjLq+AS+ftu7rf+zjjpJBgF+SmudBGIEL wTZz5zeGVEw9WOE5n+/hekTDV7ZbD5Q+KW5Qid7lBIMIIoXs5poBDD5kcwJWUPD87lle Z6iBJ1m0vKq5zydTXsgnjHZ1Gjpd/dRoDxAC0rCAnW203heNChhRuRvQEGRZkgcPEUwG 7uwJb3d1wozhMJVvsvBMjZn+z7sIuiTSTaGe/6CjvV0lHi1W2QZdjgJrZIj6mQ5vk2Hv 7Y1qTwN8ITqzC6kMm/gck3dUhO6ZI7xeksZgDHcBpemITOrhk3m4OH5gEUiGKANBkK7v fyHQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775616496; x=1776221296; darn=lists.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=99yQXjtyWrG+23JqWJUq+Ax2Ni877YBb7WEPiszSDbY=; b=kddwavW79QxeVjBg2fdRzifaE9W5jREntioy+t4BnXQxwnehSOfssictl1XSAfRpBZ BUoO85o45m4lT9kYtnI0h7ZzPKqenKQ4CN5R1YuA/nnbtPXBwzQOUlcBa7DsTgdeFcT0 DwLWerZpuUJsM8wuPZd9ciBiJknDljGK4Sl7uEC+e1Wsm+5hiLCwWjyRrQICjdM29/n1 YbgcZZ8L+2YHXy1YVsCVMi+WBbthBTkI6+SgrZoLTlCfdl9MvEgSh0cOJHqs/fpUhdBW bPqSD3KkGB+PjKFRnjgUtxKn/4hngFdLJFwxtaLvejrD/vbwkTkYgG7f5IkPMLsTI9Cg Hgzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775616496; x=1776221296; 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=99yQXjtyWrG+23JqWJUq+Ax2Ni877YBb7WEPiszSDbY=; b=FTPsBqR6L0m9MtPyVwfb938k3Xs51HXFs3RCIMshK9ip4HBGu5iKURqrUUvDgLYqP2 aiaVTUgBkoVq5WUR25pno3kwjC5EryGmWstNtPmqblPWxLie574Giah9d57BDeJAFEI7 /o+Yp+YVyZdhP5bxtFkrMjdrijoui/RpbCM7n+acuLTfhuo9No0xC6yWXWqoVr/cHILP CcgfhwNC1I70OTFW1MFVMEXmHIx1+GU1aKNxdo315u3W6OpQQTzlfLzDNj7/qk4Ak38V kFdu8dM/vumCbwl7yIlFDbeq3jgxRUI+IJ0f00U9gymgwoJgKG8dRjWkfHLthDW5cu9v /bJQ== X-Forwarded-Encrypted: i=1; AJvYcCXGMwGKonqxNJ6ffExzZ/ZKZi3zylKRA/GwAVNsW2/t8hlfyAflX2r7Og89tCDeg6pVnzWNuVmwVD1xDCRY@lists.postgresql.org X-Gm-Message-State: AOJu0YwLdOelFbJmNTjFjQ6to0d4oZm0rXsQSfrQE6QkTSqT2dG+LSvl Wc+4kFiUlgH3ngIF9bE58mKhRd3GA1hkmyVSSO8CTQ984r++y7BF2h4hb2+R3S8yrczGWSPZqqo xiw3INcfhUwj0gBHBOn4oLK2iwAnFlkQ= X-Gm-Gg: AeBDievSxXkq9eq6jRssqqL+4rpzEv+AZNUux8OeIMGNN7a4JObyMWPVRcoxl574jj5 TgyaABzX62oYasADMs10xEXho12ljsXccqmv5mj0YRkDTli40IeVse7g/rr2evIjP16J+zWkGaG kqzh04lntQGyfUFyg/Br/8i977dsMsdbRzjISjXMcS6plvLKpiszpjV6PuuRI2fT/zl3q152fTW NfKeBmjZUPAxqUgylIik8cS/PMaHDUgm+uq+U5vHL9RhKULGs+yRCS8qsq7bGvSVK3u8tjbuQNI F9cFYjP1Js5kgc2gmTypjUI5b0Fo3Dk4QtPl2o0BcZMUtwapiSeNZ+jHJsTkbc6l X-Received: by 2002:a05:7301:129a:b0:2c6:2bac:8af with SMTP id 5a478bee46e88-2cbfc958fbdmr3779198eec.6.1775616496253; Tue, 07 Apr 2026 19:48:16 -0700 (PDT) MIME-Version: 1.0 References: <20260328095204.5tsq5bldugeumrtf@erthalion> <4vhrgxmx5w4cjr7vgegur3hbkuojt2iz23v4dqfypsgvl5bszi@xrxefkkcxdja> In-Reply-To: From: Thomas Munro Date: Wed, 8 Apr 2026 14:47:37 +1200 X-Gm-Features: AQROBzD6tM19_5wMLKIxPMfbTfKx4xefMURa4DNxHLv8dC3CCFk0Axda_WuUnRc Message-ID: Subject: Re: Automatically sizing the IO worker pool To: Andres Freund Cc: Dmitry Dolgov <9erthalion6@gmail.com>, PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000084a917064ee9ee10" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000084a917064ee9ee10 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 8, 2026 at 2:20=E2=80=AFPM Andres Freund w= rote: > I don't follow. What I was proposing is after the conditional lock > acquisition succeeded. So is your nsync =3D=3D 0 check. Oops. Sorry, brainfade. Condition removed. > > +/* > > + * Tell postmaster that we think a new worker is needed. > > + */ > > +static void > > +pgaio_worker_request_grow(void) > > +{ > > + /* > > + * Suppress useless signaling if we already know that we're at th= e > > + * maximum. This uses an unlocked read of nworkers, but that's O= K for > > + * this heuristic purpose. > > + */ > > + if (io_worker_control->nworkers < io_max_workers) > > { > > - io_worker_control->workers[i].latch =3D NULL; > > - io_worker_control->workers[i].in_use =3D false; > > + if (!io_worker_control->grow) > > + { > > + io_worker_control->grow =3D true; > > + pg_memory_barrier(); > > + > > + /* > > + * If the postmaster has already been signaled, d= on't do it again > > + * until the postmaster clears this flag. There = is no point in > > + * repeated signals if grow is being set and clea= red repeatedly > > + * while the postmaster is waiting for io_worker_= launch_interval > > + * (which it applies even to canceled requests). > > + */ > > + if (!io_worker_control->grow_signal_sent) > > + { > > + io_worker_control->grow_signal_sent =3D t= rue; > > + pg_memory_barrier(); > > + SendPostmasterSignal(PMSIGNAL_IO_WORKER_G= ROW); > > + } > > + } > > } > > } > > > I'd probbly use early returns to make it a bit more readable. Done for this and similar functions. > > +static bool > > +pgaio_worker_can_timeout(void) > > +{ > > + PgAioWorkerSet workerset; > > + > > + /* Serialize against pool size changes. */ > > + LWLockAcquire(AioWorkerControlLock, LW_SHARED); > > + workerset =3D io_worker_control->workerset; > > + LWLockRelease(AioWorkerControlLock); > > + > > + if (MyIoWorkerId !=3D pgaio_workerset_get_highest(&workerset)) > > + return false; > > + > > + if (MyIoWorkerId < io_min_workers) > > + return false; > > + > > + return true; > > +} > > I guess I'd move the < io_min_workers to earlier so that you don't acquir= e the > lock if that'll return false anyway. Done. --00000000000084a917064ee9ee10 Content-Type: text/x-patch; charset="US-ASCII"; name="v8-0001-aio-Adjust-I-O-worker-pool-size-automatically.patch" Content-Disposition: attachment; filename="v8-0001-aio-Adjust-I-O-worker-pool-size-automatically.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnpg6kyz0 RnJvbSBhOGYzNWIxZGUzYWY5NmQzMTk0MzM5ZjJhMDAyN2MwMDIxMDk0MDhjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjIgTWFyIDIwMjUgMDA6MzY6NDkgKzEzMDAKU3ViamVjdDogW1BBVENIIHY4 XSBhaW86IEFkanVzdCBJL08gd29ya2VyIHBvb2wgc2l6ZSBhdXRvbWF0aWNhbGx5LgoKVGhlIHNp emUgb2YgdGhlIEkvTyB3b3JrZXIgcG9vbCB1c2VkIHRvIGltcGxlbWVudCBpb19tZXRob2Q9d29y a2VyIHdhcwpwcmV2aW91c2x5IGNvbnRyb2xsZWQgYnkgdGhlIGlvX3dvcmtlcnMgc2V0dGluZywg ZGVmYXVsdGluZyB0byAzLiAgSXQKd2FzIGhhcmQgdG8ga25vdyBob3cgdG8gdHVuZSBpdCBlZmZl Y3RpdmVseS4gIEl0IGlzIG5vdyByZXBsYWNlZCB3aXRoOgoKICBpb19taW5fd29ya2Vycz0yCiAg aW9fbWF4X3dvcmtlcnM9OCAodXAgdG8gMzIpCiAgaW9fd29ya2VyX2lkbGVfdGltZW91dD02MHMK ICBpb193b3JrZXJfbGF1bmNoX2ludGVydmFsPTEwMG1zCgpUaGUgcG9vbCBpcyBhdXRvbWF0aWNh bGx5IHNpemVkIHdpdGhpbiB0aGUgY29uZmlndXJlZCByYW5nZSBhY2NvcmRpbmcgdG8KcmVjZW50 IHZhcmlhdGlvbiBpbiBkZW1hbmQuICBJdCBncm93cyB3aGVuIGV4aXN0aW5nIHdvcmtlcnMgZGV0 ZWN0IGEKYmFja2xvZywgYW5kIHNocmlua3Mgd2hlbiB0aGUgaGlnaGVzdCBudW1iZXJlZCB3b3Jr ZXIgaXMgaWRsZSBmb3IgdG9vCmxvbmcuICBXb3JrIHdhcyBhbHJlYWR5IGNvbmNlbnRyYXRlZCBp bnRvIGxvdy1udW1iZXJlZCB3b3JrZXJzIGluCmFudGljaXBhdGlvbiBvZiB0aGlzIGxvZ2ljLgoK VGhlIGxvZ2ljIGZvciB3YWtpbmcgZXh0cmEgd29ya2VycyBub3cgYWxzbyB0cmllcyB0byBtZWFz dXJlIGFuZCByZWR1Y2UKdGhlIG51bWJlciBvZiBzcHVyaW91cyB3YWtldXBzLCB0aG91Z2ggdGhl eSBhcmUgbm90IGVudGlyZWx5IGVsaW1pbmF0ZWQuCgpSZXZpZXdlZC1ieTogRG1pdHJ5IERvbGdv diA8OWVydGhhbGlvbjZAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5k cmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCaFVL RyUyQm00eFYwTE1vSDJjJTNEb1JBZEVYdUNuaCUyQnRHQlRXYTd1RmVGTUdnVExBdyUyQlElNDBt YWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAg ICAgICAgICB8ICA2OSArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgICAg ICAgICAgIHwgMTc3ICsrKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2Vy LmMgICAgICAgfCA2MzUgKysrKysrKysrKysrKysrLS0tCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2Fp dF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQgICAgIHwgIDM0ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvaW9fd29y a2VyLmggICAgICAgICAgICAgICB8ICAxMSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2ts aXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwu aCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAy X2lvX3dvcmtlcnMucGwgfCAgMTUgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 ICAgICAgICAgICAgICB8ICAgMSArCiAxMSBmaWxlcyBjaGFuZ2VkLCA4MDMgaW5zZXJ0aW9ucygr KSwgMTQ4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dt bCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCAyYzQxMDZlZTlhYi4uMWM4YjhlN2Yz ZTIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKQEAgLTI5NDIsMTYgKzI5NDIsNzUgQEAgaW5jbHVkZV9kaXIgJ2NvbmYu ZCcKICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLSAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby13b3JrZXJzIiB4cmVmbGFiZWw9ImlvX3dvcmtlcnMiPgot ICAgICAgIDx0ZXJtPjx2YXJuYW1lPmlvX3dvcmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2Vy PC90eXBlPikKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby1taW4td29ya2VycyIgeHJl ZmxhYmVsPSJpb19taW5fd29ya2VycyI+CisgICAgICAgPHRlcm0+PHZhcm5hbWU+aW9fbWluX3dv cmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKICAgICAgICA8aW5kZXh0ZXJt PgotICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5pb193b3JrZXJzPC92YXJuYW1lPiBjb25maWd1 cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+aW9f bWluX3dvcmtlcnM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5Pgog ICAgICAgIDwvaW5kZXh0ZXJtPgogICAgICAgIDwvdGVybT4KICAgICAgICA8bGlzdGl0ZW0+CiAg ICAgICAgIDxwYXJhPgotICAgICAgICAgU2VsZWN0cyB0aGUgbnVtYmVyIG9mIEkvTyB3b3JrZXIg cHJvY2Vzc2VzIHRvIHVzZS4gVGhlIGRlZmF1bHQgaXMKLSAgICAgICAgIDMuIFRoaXMgcGFyYW1l dGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAgIFNldHMgdGhlIG1pbmltdW0gbnVt YmVyIG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzLiBUaGUgZGVmYXVsdCBpcworICAgICAgICAgMi4g VGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGluIHRoZQorICAgICAgICAgPGZpbGVuYW1l PnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21tYW5k CisgICAgICAgICBsaW5lLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAg ICAgT25seSBoYXMgYW4gZWZmZWN0IGlmIDx4cmVmIGxpbmtlbmQ9Imd1Yy1pby1tZXRob2QiLz4g aXMgc2V0IHRvCisgICAgICAgICA8bGl0ZXJhbD53b3JrZXI8L2xpdGVyYWw+LgorICAgICAgICA8 L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAg PHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWlvLW1heC13b3JrZXJzIiB4cmVmbGFiZWw9ImlvX21heF93 b3JrZXJzIj4KKyAgICAgICA8dGVybT48dmFybmFtZT5pb19tYXhfd29ya2VyczwvdmFybmFtZT4g KDx0eXBlPmludDwvdHlwZT4pCisgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+aW9fbWF4X3dvcmtlcnM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy PC9wcmltYXJ5PgorICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgU2V0cyB0aGUgbWF4aW11bSBudW1i ZXIgb2YgSS9PIHdvcmtlciBwcm9jZXNzZXMuIFRoZSBkZWZhdWx0IGlzCisgICAgICAgICA4LiBU aGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgICA8ZmlsZW5hbWU+ cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUgc2VydmVyIGNvbW1hbmQK KyAgICAgICAgIGxpbmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAg ICBPbmx5IGhhcyBhbiBlZmZlY3QgaWYgPHhyZWYgbGlua2VuZD0iZ3VjLWlvLW1ldGhvZCIvPiBp cyBzZXQgdG8KKyAgICAgICAgIDxsaXRlcmFsPndvcmtlcjwvbGl0ZXJhbD4uCisgICAgICAgIDwv cGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8 dmFybGlzdGVudHJ5IGlkPSJndWMtaW8td29ya2VyLWlkbGUtdGltZW91dCIgeHJlZmxhYmVsPSJp b193b3JrZXJfaWRsZV90aW1lb3V0Ij4KKyAgICAgICA8dGVybT48dmFybmFtZT5pb193b3JrZXJf aWRsZV90aW1lb3V0PC92YXJuYW1lPiAoPHR5cGU+aW50PC90eXBlPikKKyAgICAgICA8aW5kZXh0 ZXJtPgorICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5pb193b3JrZXJfaWRsZV90aW1lb3V0PC92 YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4 dGVybT4KKyAgICAgICA8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4K KyAgICAgICAgIFNldHMgdGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZW50aXJlbHkgaWRsZSBJL08gd29y a2VyIHByb2Nlc3NlcyBleGl0LCByZWR1Y2luZyB0aGUKKyAgICAgICAgIHNpemUgb2YgcG9vbCB0 byBtYXRjaCBkZW1hbmQuICBUaGUgZGVmYXVsdCBpcyAxIG1pbnV0ZS4gIFRoaXMKKyAgICAgICAg IHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgICA8ZmlsZW5hbWU+cG9z dGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUgc2VydmVyIGNvbW1hbmQKKyAg ICAgICAgIGxpbmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBP bmx5IGhhcyBhbiBlZmZlY3QgaWYgPHhyZWYgbGlua2VuZD0iZ3VjLWlvLW1ldGhvZCIvPiBpcyBz ZXQgdG8KKyAgICAgICAgIDxsaXRlcmFsPndvcmtlcjwvbGl0ZXJhbD4uCisgICAgICAgIDwvcGFy YT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFy bGlzdGVudHJ5IGlkPSJndWMtaW8td29ya2VyLWxhdW5jaC1pbnRlcnZhbCIgeHJlZmxhYmVsPSJp b193b3JrZXJfbGF1bmNoX2ludGVydmFsIj4KKyAgICAgICA8dGVybT48dmFybmFtZT5pb193b3Jr ZXJfbGF1bmNoX2ludGVydmFsPC92YXJuYW1lPiAoPHR5cGU+aW50PC90eXBlPikKKyAgICAgICA8 aW5kZXh0ZXJtPgorICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5pb193b3JrZXJfbGF1bmNoX2lu dGVydmFsPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAg ICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAg ICA8cGFyYT4KKyAgICAgICAgIFNldHMgdGhlIG1pbmltdW0gdGltZSBiZWZvcmUgYW5vdGhlciBJ L08gd29ya2VyIGNhbiBiZSBsYXVuY2hlZC4gIFRoaXMgYXZvaWRzCisgICAgICAgICBjcmVhdGlu ZyB0b28gbWFueSBmb3IgYW4gdW5zdXN0YWluZWQgYnVyc3Qgb2YgYWN0aXZpdHkuICBUaGUgZGVm YXVsdCBpcyAxMDBtcy4KKyAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBp biB0aGUKICAgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxl IG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAogICAgICAgICAgbGluZS4KICAgICAgICAgPC9wYXJh PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCBhZTgyOTc0NzAwNC4uNjI0MDZi MjdkNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00MDksNiArNDA5LDcg QEAgc3RhdGljIEROU1NlcnZpY2VSZWYgYm9uam91cl9zZHJlZiA9IE5VTEw7CiAjZW5kaWYKIAog LyogU3RhdGUgZm9yIElPIHdvcmtlciBtYW5hZ2VtZW50LiAqLworc3RhdGljIFRpbWVzdGFtcFR6 IGlvX3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lID0gMDsKIHN0YXRpYyBpbnQJaW9fd29ya2VyX2Nv dW50ID0gMDsKIHN0YXRpYyBQTUNoaWxkICppb193b3JrZXJfY2hpbGRyZW5bTUFYX0lPX1dPUktF UlNdOwogCkBAIC00NDcsNyArNDQ4LDggQEAgc3RhdGljIGludAlDb3VudENoaWxkcmVuKEJhY2tl bmRUeXBlTWFzayB0YXJnZXRNYXNrKTsKIHN0YXRpYyB2b2lkIExhdW5jaE1pc3NpbmdCYWNrZ3Jv dW5kUHJvY2Vzc2VzKHZvaWQpOwogc3RhdGljIHZvaWQgbWF5YmVfc3RhcnRfYmd3b3JrZXJzKHZv aWQpOwogc3RhdGljIGJvb2wgbWF5YmVfcmVhcF9pb193b3JrZXIoaW50IHBpZCk7Ci1zdGF0aWMg dm9pZCBtYXliZV9hZGp1c3RfaW9fd29ya2Vycyh2b2lkKTsKK3N0YXRpYyB2b2lkIG1heWJlX3N0 YXJ0X2lvX3dvcmtlcnModm9pZCk7CitzdGF0aWMgVGltZXN0YW1wVHogbWF5YmVfc3RhcnRfaW9f d29ya2Vyc19zY2hlZHVsZWRfYXQodm9pZCk7CiBzdGF0aWMgYm9vbCBDcmVhdGVPcHRzRmlsZShp bnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICpmdWxscHJvZ25hbWUpOwogc3RhdGljIFBNQ2hp bGQgKlN0YXJ0Q2hpbGRQcm9jZXNzKEJhY2tlbmRUeXBlIHR5cGUpOwogc3RhdGljIHZvaWQgU3Rh cnRTeXNMb2dnZXIodm9pZCk7CkBAIC0xMzkxLDcgKzEzOTMsNyBAQCBQb3N0bWFzdGVyTWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCVVwZGF0ZVBNU3RhdGUoUE1fU1RBUlRVUCk7CiAKIAkv KiBNYWtlIHN1cmUgd2UgY2FuIHBlcmZvcm0gSS9PIHdoaWxlIHN0YXJ0aW5nIHVwLiAqLwotCW1h eWJlX2FkanVzdF9pb193b3JrZXJzKCk7CisJbWF5YmVfc3RhcnRfaW9fd29ya2VycygpOwogCiAJ LyogU3RhcnQgYmd3cml0ZXIgYW5kIGNoZWNrcG9pbnRlciBzbyB0aGV5IGNhbiBoZWxwIHdpdGgg cmVjb3ZlcnkgKi8KIAlpZiAoQ2hlY2twb2ludGVyUE1DaGlsZCA9PSBOVUxMKQpAQCAtMTU1NSwx NCArMTU1NywxNSBAQCBjaGVja0NvbnRyb2xGaWxlKHZvaWQpCiBzdGF0aWMgaW50CiBEZXRlcm1p bmVTbGVlcFRpbWUodm9pZCkKIHsKLQlUaW1lc3RhbXBUeiBuZXh0X3dha2V1cCA9IDA7CisJVGlt ZXN0YW1wVHogbmV4dF93YWtldXA7CiAKIAkvKgotCSAqIE5vcm1hbCBjYXNlOiBlaXRoZXIgdGhl cmUgYXJlIG5vIGJhY2tncm91bmQgd29ya2VycyBhdCBhbGwsIG9yIHdlJ3JlIGluCi0JICogYSBz aHV0ZG93biBzZXF1ZW5jZSAoZHVyaW5nIHdoaWNoIHdlIGlnbm9yZSBiZ3dvcmtlcnMgYWx0b2dl dGhlcikuCisJICogSWYgaW4gSW1tZWRpYXRlU2h1dGRvd24gd2l0aCBhIFNJR0tJTEwgdGltZW91 dCwgaWdub3JlIGV2ZXJ5dGhpbmcgZWxzZQorCSAqIGFuZCB3YWl0IGZvciB0aGF0LgorCSAqCisJ ICogWFhYIFNob3VsZG4ndCB0aGlzIGFsc28gdGVzdCBGYXRhbEVycm9yPwogCSAqLwotCWlmIChT aHV0ZG93biA+IE5vU2h1dGRvd24gfHwKLQkJKCFTdGFydFdvcmtlck5lZWRlZCAmJiAhSGF2ZUNy YXNoZWRXb3JrZXIpKQorCWlmIChTaHV0ZG93biA+PSBJbW1lZGlhdGVTaHV0ZG93bikKIAl7CiAJ CWlmIChBYm9ydFN0YXJ0VGltZSAhPSAwKQogCQl7CkBAIC0xNTgyLDE0ICsxNTg1LDE2IEBAIERl dGVybWluZVNsZWVwVGltZSh2b2lkKQogCiAJCQlyZXR1cm4gc2Vjb25kcyAqIDEwMDA7CiAJCX0K LQkJZWxzZQotCQkJcmV0dXJuIDYwICogMTAwMDsKIAl9CiAKLQlpZiAoU3RhcnRXb3JrZXJOZWVk ZWQpCisJLyogVGltZSBvZiBuZXh0IG1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKSBjYWxsLCBvciAw IGZvciBub25lLiAqLworCW5leHRfd2FrZXVwID0gbWF5YmVfc3RhcnRfaW9fd29ya2Vyc19zY2hl ZHVsZWRfYXQoKTsKKworCS8qIElnbm9yZSBiZ3dvcmtlcnMgZHVyaW5nIHNodXRkb3duLiAqLwor CWlmIChTdGFydFdvcmtlck5lZWRlZCAmJiBTaHV0ZG93biA9PSBOb1NodXRkb3duKQogCQlyZXR1 cm4gMDsKIAotCWlmIChIYXZlQ3Jhc2hlZFdvcmtlcikKKwlpZiAoSGF2ZUNyYXNoZWRXb3JrZXIg JiYgU2h1dGRvd24gPT0gTm9TaHV0ZG93bikKIAl7CiAJCWRsaXN0X211dGFibGVfaXRlciBpdGVy OwogCkBAIC0yNTQ1LDcgKzI1NTAsMTcgQEAgcHJvY2Vzc19wbV9jaGlsZF9leGl0KHZvaWQpCiAJ CQlpZiAoIUVYSVRfU1RBVFVTXzAoZXhpdHN0YXR1cykgJiYgIUVYSVRfU1RBVFVTXzEoZXhpdHN0 YXR1cykpCiAJCQkJSGFuZGxlQ2hpbGRDcmFzaChwaWQsIGV4aXRzdGF0dXMsIF8oImlvIHdvcmtl ciIpKTsKIAotCQkJbWF5YmVfYWRqdXN0X2lvX3dvcmtlcnMoKTsKKwkJCS8qCisJCQkgKiBBIHdv cmtlciB0aGF0IGV4aXRlZCB3aXRoIGFuIGVycm9yIG1pZ2h0IGhhdmUgYnJvdWdodCB0aGUgcG9v bAorCQkJICogc2l6ZSBiZWxvdyBpb19taW5fd29ya2Vycywgb3IgYWxsb3dlZCB0aGUgcXVldWUg dG8gZ3JvdyB0byB0aGUKKwkJCSAqIHBvaW50IHdoZXJlIGFub3RoZXIgd29ya2VyIGNhbGxlZCBm b3IgZ3Jvd3RoLgorCQkJICoKKwkJCSAqIEluIHRoZSBjb21tb24gY2FzZSB0aGF0IGEgd29ya2Vy IHRpbWVkIG91dCBkdWUgdG8gaWRsZW5lc3MsIG5vCisJCQkgKiByZXBsYWNlbWVudCBuZWVkcyB0 byBiZSBzdGFydGVkLiAgbWF5YmVfc3RhcnRfaW9fd29ya2VycygpIHdpbGwKKwkJCSAqIGZpZ3Vy ZSB0aGF0IG91dC4KKwkJCSAqLworCQkJbWF5YmVfc3RhcnRfaW9fd29ya2VycygpOworCiAJCQlj b250aW51ZTsKIAkJfQogCkBAIC0zMjY1LDcgKzMyODAsNyBAQCBQb3N0bWFzdGVyU3RhdGVNYWNo aW5lKHZvaWQpCiAJCVVwZGF0ZVBNU3RhdGUoUE1fU1RBUlRVUCk7CiAKIAkJLyogTWFrZSBzdXJl IHdlIGNhbiBwZXJmb3JtIEkvTyB3aGlsZSBzdGFydGluZyB1cC4gKi8KLQkJbWF5YmVfYWRqdXN0 X2lvX3dvcmtlcnMoKTsKKwkJbWF5YmVfc3RhcnRfaW9fd29ya2VycygpOwogCiAJCVN0YXJ0dXBQ TUNoaWxkID0gU3RhcnRDaGlsZFByb2Nlc3MoQl9TVEFSVFVQKTsKIAkJQXNzZXJ0KFN0YXJ0dXBQ TUNoaWxkICE9IE5VTEwpOwpAQCAtMzMzOSw3ICszMzU0LDcgQEAgTGF1bmNoTWlzc2luZ0JhY2tn cm91bmRQcm9jZXNzZXModm9pZCkKIAkgKiBBIGNvbmZpZyBmaWxlIGNoYW5nZSB3aWxsIGFsd2F5 cyBsZWFkIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLCBzbwogCSAqIHdlIGFsd2F5cyB3 aWxsIHByb2Nlc3MgdGhlIGNvbmZpZyBjaGFuZ2UgaW4gYSB0aW1lbHkgbWFubmVyLgogCSAqLwot CW1heWJlX2FkanVzdF9pb193b3JrZXJzKCk7CisJbWF5YmVfc3RhcnRfaW9fd29ya2VycygpOwog CiAJLyoKIAkgKiBUaGUgY2hlY2twb2ludGVyIGFuZCB0aGUgYmFja2dyb3VuZCB3cml0ZXIgYXJl IGFjdGl2ZSBmcm9tIHRoZSBzdGFydCwKQEAgLTM4MDAsNiArMzgxNSwxNiBAQCBwcm9jZXNzX3Bt X3Btc2lnbmFsKHZvaWQpCiAJCVN0YXJ0V29ya2VyTmVlZGVkID0gdHJ1ZTsKIAl9CiAKKwkvKiBQ cm9jZXNzIElPIHdvcmtlciBzdGFydCByZXF1ZXN0cy4gKi8KKwlpZiAoQ2hlY2tQb3N0bWFzdGVy U2lnbmFsKFBNU0lHTkFMX0lPX1dPUktFUl9HUk9XKSkKKwl7CisJCS8qCisJCSAqIE5vIGxvY2Fs IGZsYWcsIGFzIHRoZSBzdGF0ZSBpcyBleHBvc2VkIHRocm91Z2ggcGdhaW9fd29ya2VyXyooKQor CQkgKiBmdW5jdGlvbnMuICBUaGlzIHNpZ25hbCBpcyByZWNlaXZlZCBvbiBwb3RlbnRpYWxseSBh Y3Rpb25hYmxlIGxldmVsCisJCSAqIGNoYW5nZXMsIHNvIHRoYXQgbWF5YmVfc3RhcnRfaW9fd29y a2VycygpIHdpbGwgcnVuLgorCQkgKi8KKwl9CisKIAkvKiBQcm9jZXNzIGJhY2tncm91bmQgd29y a2VyIHN0YXRlIGNoYW5nZXMuICovCiAJaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05B TF9CQUNLR1JPVU5EX1dPUktFUl9DSEFOR0UpKQogCXsKQEAgLTQ0MDIsNDQgKzQ0MjcsMTE1IEBA IG1heWJlX3JlYXBfaW9fd29ya2VyKGludCBwaWQpCiB9CiAKIC8qCi0gKiBTdGFydCBvciBzdG9w IElPIHdvcmtlcnMsIHRvIGNsb3NlIHRoZSBnYXAgYmV0d2VlbiB0aGUgbnVtYmVyIG9mIHJ1bm5p bmcKLSAqIHdvcmtlcnMgYW5kIHRoZSBudW1iZXIgb2YgY29uZmlndXJlZCB3b3JrZXJzLiAgVXNl ZCB0byByZXNwb25kIHRvIGNoYW5nZSBvZgotICogdGhlIGlvX3dvcmtlcnMgR1VDIChieSBpbmNy ZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHRoZSBudW1iZXIgb2Ygd29ya2VycyksIGFzCi0gKiB3ZWxs IGFzIHdvcmtlcnMgdGVybWluYXRpbmcgaW4gcmVzcG9uc2UgdG8gZXJyb3JzIChieSBzdGFydGlu ZwotICogInJlcGxhY2VtZW50IiB3b3JrZXJzKS4KKyAqIFJldHVybnMgdGhlIG5leHQgdGltZSBh dCB3aGljaCBtYXliZV9zdGFydF9pb193b3JrZXJzKCkgd291bGQgc3RhcnQgb25lIG9yCisgKiBt b3JlIEkvTyB3b3JrZXJzLiAgQW55IHRpbWUgaW4gdGhlIHBhc3QgbWVhbnMgQVNBUCwgYW5kIDAg bWVhbnMgbm8gd29ya2VyCisgKiBpcyBjdXJyZW50bHkgc2NoZWR1bGVkLgorICoKKyAqIFRoaXMg aXMgY2FsbGVkIGJ5IERldGVybWluZVNsZWVwVGltZSgpIGFuZCBhbHNvIG1heWJlX3N0YXJ0X2lv X3dvcmtlcnMoKQorICogaXRzZWxmLCB0byBtYWtlIHN1cmUgdGhhdCB0aGV5IGFncmVlLgogICov Ci1zdGF0aWMgdm9pZAotbWF5YmVfYWRqdXN0X2lvX3dvcmtlcnModm9pZCkKK3N0YXRpYyBUaW1l c3RhbXBUegorbWF5YmVfc3RhcnRfaW9fd29ya2Vyc19zY2hlZHVsZWRfYXQodm9pZCkKIHsKIAlp ZiAoIXBnYWlvX3dvcmtlcnNfZW5hYmxlZCgpKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJ LyoKIAkgKiBJZiB3ZSdyZSBpbiBmaW5hbCBzaHV0dGluZyBkb3duIHN0YXRlLCB0aGVuIHdlJ3Jl IGp1c3Qgd2FpdGluZyBmb3IgYWxsCiAJICogcHJvY2Vzc2VzIHRvIGV4aXQuCiAJICovCiAJaWYg KHBtU3RhdGUgPj0gUE1fV0FJVF9JT19XT1JLRVJTKQotCQlyZXR1cm47CisJCXJldHVybiAwOwog CiAJLyogRG9uJ3Qgc3RhcnQgbmV3IHdvcmtlcnMgZHVyaW5nIGFuIGltbWVkaWF0ZSBzaHV0ZG93 biBlaXRoZXIuICovCiAJaWYgKFNodXRkb3duID49IEltbWVkaWF0ZVNodXRkb3duKQotCQlyZXR1 cm47CisJCXJldHVybiAwOwogCiAJLyoKIAkgKiBEb24ndCBzdGFydCBuZXcgd29ya2VycyBpZiB3 ZSdyZSBpbiB0aGUgc2h1dGRvd24gcGhhc2Ugb2YgYSBjcmFzaAogCSAqIHJlc3RhcnQuIEJ1dCB3 ZSAqZG8qIG5lZWQgdG8gc3RhcnQgaWYgd2UncmUgYWxyZWFkeSBzdGFydGluZyB1cCBhZ2Fpbi4K IAkgKi8KIAlpZiAoRmF0YWxFcnJvciAmJiBwbVN0YXRlID49IFBNX1NUT1BfQkFDS0VORFMpCi0J CXJldHVybjsKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0IGEgd29ya2VyIGlm IHdlJ3JlIGF0IG9yIGFib3ZlIHRoZSBtYXhpbXVtLiAgKEV4Y2VzcyB3b3JrZXJzCisJICogZXhp dCB3aGVuIHRoZSBHVUMgaXMgbG93ZXJlZCwgYnV0IHRoZSBjb3VudCBjYW4gYmUgdGVtcG9yYXJp bHkgdG9vIGhpZ2gKKwkgKiB1bnRpbCB0aGV5IGFyZSByZWFwZWQuKQorCSAqLworCWlmIChpb193 b3JrZXJfY291bnQgPj0gaW9fbWF4X3dvcmtlcnMpCisJCXJldHVybiAwOworCisJLyogSWYgd2Un cmUgdW5kZXIgdGhlIG1pbmltdW0sIHN0YXJ0IGEgd29ya2VyIGFzIHNvb24gYXMgcG9zc2libGUu ICovCisJaWYgKGlvX3dvcmtlcl9jb3VudCA8IGlvX21pbl93b3JrZXJzKQorCQlyZXR1cm4gVElN RVNUQU1QX01JTlVTX0lORklOSVRZOwkvKiBzdGFydCB3b3JrZXIgQVNBUCAqLworCisJLyogT25s eSBwcm9jZWVkIGlmIGEgImdyb3ciIHNpZ25hbCBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIGEgd29y a2VyLiAqLworCWlmICghcGdhaW9fd29ya2VyX3BtX3Rlc3RfZ3Jvd19zaWduYWxfc2VudCgpKQor CQlyZXR1cm4gMDsKIAotCUFzc2VydChwbVN0YXRlIDwgUE1fV0FJVF9JT19XT1JLRVJTKTsKKwkv KgorCSAqIG1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKSBzaG91bGQgc3RhcnQgYSBuZXcgSS9PIHdv cmtlciBhZnRlciB0aGlzIHRpbWUsCisJICogb3IgYXMgc29vbiBhcyBwb3NzaWJsZSBpZiBpcyBh bHJlYWR5IGluIHRoZSBwYXN0LgorCSAqLworCXJldHVybiBpb193b3JrZXJfbGF1bmNoX25leHRf dGltZTsKK30KIAotCS8qIE5vdCBlbm91Z2ggcnVubmluZz8gKi8KLQl3aGlsZSAoaW9fd29ya2Vy X2NvdW50IDwgaW9fd29ya2VycykKKy8qCisgKiBTdGFydCBJL08gd29ya2VycyBpZiByZXF1aXJl ZC4gIFVzZWQgYXQgc3RhcnR1cCwgdG8gcmVzcG9uZCB0byBjaGFuZ2Ugb2YKKyAqIHRoZSBpb19t aW5fd29ya2VycyBHVUMsIHdoZW4gYXNrZWQgdG8gc3RhcnQgYSBuZXcgb25lIGR1ZSB0byBzdWJt aXNzaW9uCisgKiBxdWV1ZSBiYWNrbG9nLCBhbmQgYWZ0ZXIgd29ya2VycyB0ZXJtaW5hdGUgaW4g cmVzcG9uc2UgdG8gZXJyb3JzIChieQorICogc3RhcnRpbmcgInJlcGxhY2VtZW50IiB3b3JrZXJz KS4KKyAqLworc3RhdGljIHZvaWQKK21heWJlX3N0YXJ0X2lvX3dvcmtlcnModm9pZCkKK3sKKwlU aW1lc3RhbXBUeiBzY2hlZHVsZWRfYXQ7CisKKwl3aGlsZSAoKHNjaGVkdWxlZF9hdCA9IG1heWJl X3N0YXJ0X2lvX3dvcmtlcnNfc2NoZWR1bGVkX2F0KCkpICE9IDApCiAJeworCQlUaW1lc3RhbXBU eiBub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiAJCVBNQ2hpbGQgICAgKmNoaWxkOwogCQlp bnQJCQlpOwogCisJCUFzc2VydChwbVN0YXRlIDwgUE1fV0FJVF9JT19XT1JLRVJTKTsKKworCQkv KiBTdGlsbCB3YWl0aW5nIGZvciB0aGUgc2NoZWR1bGVkIHRpbWU/ICovCisJCWlmIChzY2hlZHVs ZWRfYXQgPiBub3cpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBDb21wdXRlIG5leHQgbGF1bmNo IHRpbWUgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB0aGF0CisJCSAqIHRpbWUg c3BlbnQgb24gdGhlIHBvc3RtYXN0ZXIncyBvdGhlciBkdXRpZXMgZG9uJ3QgcmVzdWx0IGluIGFu CisJCSAqIGluYWNjdXJhdGUgbGF1bmNoIGludGVydmFsLgorCQkgKi8KKwkJaW9fd29ya2VyX2xh dW5jaF9uZXh0X3RpbWUgPQorCQkJVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKGlvX3dvcmtl cl9sYXVuY2hfbmV4dF90aW1lLAorCQkJCQkJCQkJCWlvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwp OworCisJCS8qCisJCSAqIElmIHRoYXQncyBhbHJlYWR5IGluIHRoZSBwYXN0LCB0aGUgaW50ZXJ2 YWwgaXMgZWl0aGVyIGltcG9zc2libHkKKwkJICogc2hvcnQgb3Igd2UgcmVjZWl2ZWQgbm8gcmVx dWVzdHMgZm9yIG5ldyB3b3JrZXJzIGZvciBhIHBlcmlvZC4KKwkJICogQ29tcHV0ZSBhIG5ldyBm dXR1cmUgdGltZSByZWxhdGl2ZSB0byB0aGUgbGFzdCBsYXVuY2ggdGltZSBpbnN0ZWFkLgorCQkg Ki8KKwkJaWYgKGlvX3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lIDw9IG5vdykKKwkJCWlvX3dvcmtl cl9sYXVuY2hfbmV4dF90aW1lID0KKwkJCQlUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMobm93 LCBpb193b3JrZXJfbGF1bmNoX2ludGVydmFsKTsKKworCQkvKgorCQkgKiBDaGVjayBpZiBhIGdy b3cgc2lnbmFsIGhhcyBiZWVuIHNlbnQsIGJ1dCB0aGUgZ3JvdyByZXF1ZXN0IGhhcyBiZWVuCisJ CSAqIGNhbmNlbGVkIHNpbmNlIHRoZW4gYmVjYXVzZSB0aGUgd29ya2VycyByYW4gb3V0IG9mIHdv cmsuICBXZSd2ZQorCQkgKiBzdGlsbCBhZHZhbmNlZCB0aGUgbmV4dCBsYXVuY2ggdGltZSwgc28g d2Ugd29uJ3QgY29uc2lkZXIgYW55IG1vcmUKKwkJICogZ3JvdyBzaWduYWxzIHVudGlsIHRoZW4u ICBUaGF0IHByZXZlbnRzIHdvcmtlcnMgZnJvbSBzaWduYWxpbmcgbW9yZQorCQkgKiB0aGFuIG9u Y2UgaW4gdGhhdCB0aW1lIHBlcmlvZCwgYmVjYXVzZSB3ZSB3b24ndCBjbGVhcgorCQkgKiBncm93 X3NpZ25hbF9zZW50IHVudGlsIHRoZW4uCisJCSAqLworCQlpZiAoaW9fd29ya2VyX2NvdW50ID49 IGlvX21pbl93b3JrZXJzICYmICFwZ2Fpb193b3JrZXJfcG1fdGVzdF9ncm93KCkpCisJCXsKKwkJ CXBnYWlvX3dvcmtlcl9wbV9jbGVhcl9ncm93X3NpZ25hbF9zZW50KCk7CisJCQlicmVhazsKKwkJ fQorCiAJCS8qIGZpbmQgdW51c2VkIGVudHJ5IGluIGlvX3dvcmtlcl9jaGlsZHJlbiBhcnJheSAq LwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkKIAkJewpAQCAtNDQ1Nywy MiArNDU1MywyMSBAQCBtYXliZV9hZGp1c3RfaW9fd29ya2Vycyh2b2lkKQogCQkJKytpb193b3Jr ZXJfY291bnQ7CiAJCX0KIAkJZWxzZQotCQkJYnJlYWs7CQkJCS8qIHRyeSBhZ2FpbiBuZXh0IHRp bWUgKi8KLQl9Ci0KLQkvKiBUb28gbWFueSBydW5uaW5nPyAqLwotCWlmIChpb193b3JrZXJfY291 bnQgPiBpb193b3JrZXJzKQotCXsKLQkJLyogYXNrIHRoZSBJTyB3b3JrZXIgaW4gdGhlIGhpZ2hl c3Qgc2xvdCB0byBleGl0ICovCi0JCWZvciAoaW50IGkgPSBNQVhfSU9fV09SS0VSUyAtIDE7IGkg Pj0gMDsgLS1pKQogCQl7Ci0JCQlpZiAoaW9fd29ya2VyX2NoaWxkcmVuW2ldICE9IE5VTEwpCi0J CQl7Ci0JCQkJa2lsbChpb193b3JrZXJfY2hpbGRyZW5baV0tPnBpZCwgU0lHVVNSMik7Ci0JCQkJ YnJlYWs7Ci0JCQl9CisJCQkvKgorCQkJICogRm9yayBmYWlsdXJlOiB3ZSdsbCB0cnkgYWdhaW4g YWZ0ZXIgdGhlIGxhdW5jaCBpbnRlcnZhbAorCQkJICogZXhwaXJlcywgb3IgYmUgY2FsbGVkIGFn YWluIHdpdGhvdXQgZGVsYXkgaWYgd2UgZG9uJ3QgeWV0IGhhdmUKKwkJCSAqIGlvX21pbl93b3Jr ZXJzLiAgRG9uJ3QgbG9vcCBoZXJlIHRob3VnaCwgdGhlIHBvc3RtYXN0ZXIgaGFzCisJCQkgKiBv dGhlciBkdXRpZXMuCisJCQkgKi8KKwkJCWJyZWFrOwogCQl9CiAJfQorCisJLyoKKwkgKiBXb3Jr ZXJzIGRlY2lkZSB3aGVuIHRvIHNodXQgZG93biBieSB0aGVtc2VsdmVzLCBhY2NvcmRpbmcgdG8g dGhlCisJICogaW9fbWF4X3dvcmtlcnMgYW5kIGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQgR1VDcy4K KwkgKi8KIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rf d29ya2VyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKaW5kZXgg ZWI2ODZjZWRlMWEuLmU3ZjYwNjIzMzQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9tZXRob2Rfd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9k X3dvcmtlci5jCkBAIC0xMSw5ICsxMSw4IEBACiAgKiBpbmZyYXN0cnVjdHVyZSBmb3IgcmVvcGVu aW5nIHRoZSBmaWxlLCBhbmQgbXVzdCBwcm9jZXNzZWQgc3luY2hyb25vdXNseSBieQogICogdGhl IGNsaWVudCBjb2RlIHdoZW4gc3VibWl0dGVkLgogICoKLSAqIFNvIHRoYXQgdGhlIHN1Ym1pdHRl ciBjYW4gbWFrZSBqdXN0IG9uZSBzeXN0ZW0gY2FsbCB3aGVuIHN1Ym1pdHRpbmcgYSBiYXRjaAot ICogb2YgSU9zLCB3YWtldXBzICJmYW4gb3V0IjsgZWFjaCB3b2tlbiBJTyB3b3JrZXIgY2FuIHdh a2UgdHdvIG1vcmUuIFhYWCBUaGlzCi0gKiBjb3VsZCBiZSBpbXByb3ZlZCBieSB1c2luZyBmdXRl eGVzIGluc3RlYWQgb2YgbGF0Y2hlcyB0byB3YWtlIE4gd2FpdGVycy4KKyAqIFRoZSBwb29sIG9m IHdvcmtlcnMgdHJpZXMgdG8gc3RhYmlsaXplIGF0IGEgc2l6ZSB0aGF0IGNhbiBoYW5kbGUgcmVj ZW50bHkKKyAqIHNlZW4gdmFyaWF0aW9uIGluIGRlbWFuZCwgd2l0aGluIHRoZSBjb25maWd1cmVk IGxpbWl0cy4KICAqCiAgKiBUaGlzIG1ldGhvZCBvZiBBSU8gaXMgYXZhaWxhYmxlIGluIGFsbCBi dWlsZHMgb24gYWxsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQKICAqIGlzIHRoZSBkZWZhdWx0LgpA QCAtMjksNiArMjgsOCBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgPGxp bWl0cy5oPgorCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCkBAIC00MCw2ICs0MSw4IEBACiAj aW5jbHVkZSAic3RvcmFnZS9pb193b3JrZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgog I2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgor I2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgpA QCAtNDgsMTAgKzUxLDIyIEBACiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAjaW5jbHVk ZSAidXRpbHMvd2FpdF9ldmVudC5oIgogCisvKgorICogU2F0dXJhdGlvbiBmb3IgY291bnRlcnMg dXNlZCB0byBlc3RpbWF0ZSB3YWtldXA6SU8gcmF0aW8uCisgKgorICogV2UgbWFpbnRhaW4gaGlz dF93YWtldXBzIGZvciB3YWtldXBzIHJlY2VpdmVkIGFuZCBoaXN0X2lvcyBmb3IgSU9zCisgKiBw cm9jZXNzZWQgYnkgZWFjaCB3b3JrZXIuICBXaGVuIGVpdGhlciBjb3VudGVyIHJlYWNoZXMgdGhp cyBzYXR1cmF0aW9uCisgKiB2YWx1ZSwgd2UgZGl2aWRlIGJvdGggYnkgdHdvLiAgVGhlIHJlc3Vs dCBpcyBhbiBleHBvbmVudGlhbGx5IGRlY2F5aW5nCisgKiByYXRpbyBvZiB3YWtldXBzIHRvIElP cywgd2l0aCBhIHZlcnkgc2hvcnQgbWVtb3J5LgorICoKKyAqIElmIGEgd29ya2VyIGlzIGl0c2Vs ZiBleHBlcmllbmNpbmcgdXNlbGVzcyB3YWtldXBzLCBpdCBhc3N1bWVzIHRoYXQKKyAqIGhpZ2hl ci1udW1iZXJlZCB3b3JrZXJzIHdvdWxkIGV4cGVyaWVuY2UgZXZlbiBtb3JlLCBzbyBpdCBzaG91 bGQgZW5kIHRoZQorICogY2hhaW4uCisgKi8KKyNkZWZpbmUgUEdBSU9fV09SS0VSX1dBS0VVUF9S QVRJT19TQVRVUkFURSA0CiAKLS8qIEhvdyBtYW55IHdvcmtlcnMgc2hvdWxkIGVhY2ggd29ya2Vy IHdha2UgdXAgaWYgbmVlZGVkPyAqLwotI2RlZmluZSBJT19XT1JLRVJfV0FLRVVQX0ZBTk9VVCAy Ci0KKy8qIERlYnVnZ2luZyBzdXBwb3J0OiBzaG93IGN1cnJlbnQgSU8gYW5kIHdha2V1cHM6aW9z IHN0YXRpc3RpY3MgaW4gcHMuICovCisvKiAjZGVmaW5lIFBHQUlPX1dPUktFUl9TSE9XX1BTX0lO Rk8gKi8KIAogdHlwZWRlZiBzdHJ1Y3QgUGdBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUKIHsKQEAg LTYzLDEzICs3OCwzNSBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1 ZQogCiB0eXBlZGVmIHN0cnVjdCBQZ0Fpb1dvcmtlclNsb3QKIHsKLQlMYXRjaAkgICAqbGF0Y2g7 Ci0JYm9vbAkJaW5fdXNlOworCVByb2NOdW1iZXIJcHJvY19udW1iZXI7CiB9IFBnQWlvV29ya2Vy U2xvdDsKIAorLyoKKyAqIFNldHMgb2Ygd29ya2VyIElEcyBhcmUgaGVsZCBpbiBhIHNpbXBsZSBi aXRtYXAsIGFjY2Vzc2VkIHRocm91Z2ggZnVuY3Rpb25zCisgKiB0aGF0IHByb3ZpZGUgYSBtb3Jl IHJlYWRhYmxlIGFic3RyYWN0aW9uLiAgSWYgd2Ugd2FudGVkIHRvIHN1cHBvcnQgbW9yZQorICog d29ya2VycyB0aGFuIHRoYXQsIHRoZSBjb250ZW50aW9uIG9uIHRoZSBzaW5nbGUgcXVldWUgd291 bGQgc3VyZWx5IGdldCB0b28KKyAqIGhpZ2gsIHNvIHdlIG1pZ2h0IHdhbnQgdG8gY29uc2lkZXIg bXVsdGlwbGUgcG9vbHMgaW5zdGVhZCBvZiB3aWRlbmluZyB0aGlzLgorICovCit0eXBlZGVmIHVp bnQ2NCBQZ0Fpb1dvcmtlclNldDsKKworI2RlZmluZSBQR0FJT19XT1JLRVJTRVRfQklUUyAoc2l6 ZW9mKFBnQWlvV29ya2VyU2V0KSAqIENIQVJfQklUKQorCitzdGF0aWNfYXNzZXJ0KFBHQUlPX1dP UktFUlNFVF9CSVRTID49IE1BWF9JT19XT1JLRVJTLCAidG9vIHNtYWxsIik7CisKIHR5cGVkZWYg c3RydWN0IFBnQWlvV29ya2VyQ29udHJvbAogewotCXVpbnQ2NAkJaWRsZV93b3JrZXJfbWFzazsK KwkvKiBTZWVuIGJ5IHBvc3RtYXN0ZXIgKi8KKwlib29sCQlncm93OworCWJvb2wJCWdyb3dfc2ln bmFsX3NlbnQ7CisKKwkvKiBQcm90ZWN0ZWQgYnkgQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9j ay4gKi8KKwlQZ0Fpb1dvcmtlclNldCBpZGxlX3dvcmtlcnNldDsKKworCS8qIFByb3RlY3RlZCBi eSBBaW9Xb3JrZXJDb250cm9sTG9jay4gKi8KKwlQZ0Fpb1dvcmtlclNldCB3b3JrZXJzZXQ7CisJ aW50CQkJbndvcmtlcnM7CisKKwkvKiBQcm90ZWN0ZWQgYnkgQWlvV29ya2VyQ29udHJvbExvY2su ICovCiAJUGdBaW9Xb3JrZXJTbG90IHdvcmtlcnNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0g UGdBaW9Xb3JrZXJDb250cm9sOwogCkBAIC05MSwxNSArMTI4LDEwOCBAQCBjb25zdCBJb01ldGhv ZE9wcyBwZ2Fpb193b3JrZXJfb3BzID0gewogCiAKIC8qIEdVQ3MgKi8KLWludAkJCWlvX3dvcmtl cnMgPSAzOworaW50CQkJaW9fbWluX3dvcmtlcnMgPSAyOworaW50CQkJaW9fbWF4X3dvcmtlcnMg PSA4OworaW50CQkJaW9fd29ya2VyX2lkbGVfdGltZW91dCA9IDYwMDAwOworaW50CQkJaW9fd29y a2VyX2xhdW5jaF9pbnRlcnZhbCA9IDEwMDsKIAogCiBzdGF0aWMgaW50CWlvX3dvcmtlcl9xdWV1 ZV9zaXplID0gNjQ7Ci1zdGF0aWMgaW50CU15SW9Xb3JrZXJJZDsKK3N0YXRpYyBpbnQJTXlJb1dv cmtlcklkID0gLTE7CiBzdGF0aWMgUGdBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUgKmlvX3dvcmtl cl9zdWJtaXNzaW9uX3F1ZXVlOwogc3RhdGljIFBnQWlvV29ya2VyQ29udHJvbCAqaW9fd29ya2Vy X2NvbnRyb2w7CiAKIAorc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcnNldF9pbml0aWFsaXplKFBn QWlvV29ya2VyU2V0ICpzZXQpCit7CisJKnNldCA9IDA7Cit9CisKK3N0YXRpYyBib29sCitwZ2Fp b193b3JrZXJzZXRfaXNfZW1wdHkoUGdBaW9Xb3JrZXJTZXQgKnNldCkKK3sKKwlyZXR1cm4gKnNl dCA9PSAwOworfQorCitzdGF0aWMgUGdBaW9Xb3JrZXJTZXQKK3BnYWlvX3dvcmtlcnNldF9zaW5n bGV0b24oaW50IHdvcmtlcikKK3sKKwlBc3NlcnQod29ya2VyID49IDAgJiYgd29ya2VyIDwgTUFY X0lPX1dPUktFUlMpOworCXJldHVybiBVSU5UNjRfQygxKSA8PCB3b3JrZXI7Cit9CisKK3N0YXRp YyB2b2lkCitwZ2Fpb193b3JrZXJzZXRfYWxsKFBnQWlvV29ya2VyU2V0ICpzZXQpCit7CisJKnNl dCA9IFVJTlQ2NF9NQVggPj4gKFBHQUlPX1dPUktFUlNFVF9CSVRTIC0gTUFYX0lPX1dPUktFUlMp OworfQorCitzdGF0aWMgdm9pZAorcGdhaW9fd29ya2Vyc2V0X3N1YnRyYWN0KFBnQWlvV29ya2Vy U2V0ICpzZXQxLCBjb25zdCBQZ0Fpb1dvcmtlclNldCAqc2V0MikKK3sKKwkqc2V0MSAmPSB+KnNl dDI7Cit9CisKK3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJzZXRfaW5zZXJ0KFBnQWlvV29ya2Vy U2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJQXNzZXJ0KHdvcmtlciA+PSAwICYmIHdvcmtlciA8 IE1BWF9JT19XT1JLRVJTKTsKKwkqc2V0IHw9IHBnYWlvX3dvcmtlcnNldF9zaW5nbGV0b24od29y a2VyKTsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcnNldF9yZW1vdmUoUGdBaW9Xb3Jr ZXJTZXQgKnNldCwgaW50IHdvcmtlcikKK3sKKwlBc3NlcnQod29ya2VyID49IDAgJiYgd29ya2Vy IDwgTUFYX0lPX1dPUktFUlMpOworCSpzZXQgJj0gfnBnYWlvX3dvcmtlcnNldF9zaW5nbGV0b24o d29ya2VyKTsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcnNldF9yZW1vdmVfbHRlKFBn QWlvV29ya2VyU2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJQXNzZXJ0KHdvcmtlciA+PSAwICYm IHdvcmtlciA8IE1BWF9JT19XT1JLRVJTKTsKKwkqc2V0ICY9ICh+KFBnQWlvV29ya2VyU2V0KSAw KSA8PCAod29ya2VyICsgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtlcnNldF9nZXRf aGlnaGVzdChQZ0Fpb1dvcmtlclNldCAqc2V0KQoreworCUFzc2VydCghcGdhaW9fd29ya2Vyc2V0 X2lzX2VtcHR5KHNldCkpOworCXJldHVybiBwZ19sZWZ0bW9zdF9vbmVfcG9zNjQoKnNldCk7Cit9 CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtlcnNldF9nZXRfbG93ZXN0KFBnQWlvV29ya2VyU2V0 ICpzZXQpCit7CisJQXNzZXJ0KCFwZ2Fpb193b3JrZXJzZXRfaXNfZW1wdHkoc2V0KSk7CisJcmV0 dXJuIHBnX3JpZ2h0bW9zdF9vbmVfcG9zNjQoKnNldCk7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlv X3dvcmtlcnNldF9wb3BfbG93ZXN0KFBnQWlvV29ya2VyU2V0ICpzZXQpCit7CisJaW50CQkJd29y a2VyID0gcGdhaW9fd29ya2Vyc2V0X2dldF9sb3dlc3Qoc2V0KTsKKworCXBnYWlvX3dvcmtlcnNl dF9yZW1vdmUoc2V0LCB3b3JrZXIpOworCXJldHVybiB3b3JrZXI7Cit9CisKKyNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCitzdGF0aWMgYm9vbAorcGdhaW9fd29ya2Vyc2V0X2NvbnRhaW5zKFBn QWlvV29ya2VyU2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJQXNzZXJ0KHdvcmtlciA+PSAwICYm IHdvcmtlciA8IE1BWF9JT19XT1JLRVJTKTsKKwlyZXR1cm4gKCpzZXQgJiBwZ2Fpb193b3JrZXJz ZXRfc2luZ2xldG9uKHdvcmtlcikpICE9IDA7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtl cnNldF9jb3VudChQZ0Fpb1dvcmtlclNldCAqc2V0KQoreworCXJldHVybiBwZ19wb3Bjb3VudDY0 KCpzZXQpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkCiBwZ2Fpb193b3JrZXJfc2htZW1fcmVx dWVzdCh2b2lkICphcmcpCiB7CkBAIC0xMzMsMzcgKzI2MywxNjAgQEAgcGdhaW9fd29ya2VyX3No bWVtX2luaXQodm9pZCAqYXJnKQogCWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlLT5zaXplID0g cXVldWVfc2l6ZTsKIAlpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+aGVhZCA9IDA7CiAJaW9f d29ya2VyX3N1Ym1pc3Npb25fcXVldWUtPnRhaWwgPSAwOworCWlvX3dvcmtlcl9jb250cm9sLT5n cm93ID0gZmFsc2U7CisJcGdhaW9fd29ya2Vyc2V0X2luaXRpYWxpemUoJmlvX3dvcmtlcl9jb250 cm9sLT53b3JrZXJzZXQpOworCXBnYWlvX3dvcmtlcnNldF9pbml0aWFsaXplKCZpb193b3JrZXJf Y29udHJvbC0+aWRsZV93b3JrZXJzZXQpOwogCi0JaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29y a2VyX21hc2sgPSAwOwogCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkK LQl7Ci0JCWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW2ldLmxhdGNoID0gTlVMTDsKLQkJaW9f d29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0uaW5fdXNlID0gZmFsc2U7Ci0JfQorCQlpb193b3Jr ZXJfY29udHJvbC0+d29ya2Vyc1tpXS5wcm9jX251bWJlciA9IElOVkFMSURfUFJPQ19OVU1CRVI7 Cit9CisKKy8qCisgKiBUZWxsIHBvc3RtYXN0ZXIgdGhhdCB3ZSB0aGluayBhIG5ldyB3b3JrZXIg aXMgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZAorcGdhaW9fd29ya2VyX3JlcXVlc3RfZ3Jvdyh2 b2lkKQoreworCS8qCisJICogU3VwcHJlc3MgdXNlbGVzcyBzaWduYWxpbmcgaWYgd2UgYWxyZWFk eSBrbm93IHRoYXQgd2UncmUgYXQgdGhlCisJICogbWF4aW11bS4gIFRoaXMgdXNlcyBhbiB1bmxv Y2tlZCByZWFkIG9mIG53b3JrZXJzLCBidXQgdGhhdCdzIE9LIGZvcgorCSAqIHRoaXMgaGV1cmlz dGljIHB1cnBvc2UuCisJICovCisJaWYgKGlvX3dvcmtlcl9jb250cm9sLT5ud29ya2VycyA+PSBp b19tYXhfd29ya2VycykKKwkJcmV0dXJuOworCisJLyogQWxyZWFkeSByZXF1ZXN0ZWQ/ICovCisJ aWYgKGlvX3dvcmtlcl9jb250cm9sLT5ncm93KQorCQlyZXR1cm47CisKKwlpb193b3JrZXJfY29u dHJvbC0+Z3JvdyA9IHRydWU7CisJcGdfbWVtb3J5X2JhcnJpZXIoKTsKKworCS8qCisJICogSWYg dGhlIHBvc3RtYXN0ZXIgaGFzIGFscmVhZHkgYmVlbiBzaWduYWxlZCwgZG9uJ3QgZG8gaXQgYWdh aW4gdW50aWwKKwkgKiB0aGUgcG9zdG1hc3RlciBjbGVhcnMgdGhpcyBmbGFnLiAgVGhlcmUgaXMg bm8gcG9pbnQgaW4gcmVwZWF0ZWQgc2lnbmFscworCSAqIGlmIGdyb3cgaXMgYmVpbmcgc2V0IGFu ZCBjbGVhcmVkIHJlcGVhdGVkbHkgd2hpbGUgdGhlIHBvc3RtYXN0ZXIgaXMKKwkgKiB3YWl0aW5n IGZvciBpb193b3JrZXJfbGF1bmNoX2ludGVydmFsLCB3aGljaCBpdCBhcHBsaWVzIGV2ZW4gdG8K KwkgKiBjYW5jZWxlZCByZXF1ZXN0cy4KKwkgKi8KKwlpZiAoaW9fd29ya2VyX2NvbnRyb2wtPmdy b3dfc2lnbmFsX3NlbnQpCisJCXJldHVybjsKKworCWlvX3dvcmtlcl9jb250cm9sLT5ncm93X3Np Z25hbF9zZW50ID0gdHJ1ZTsKKwlwZ19tZW1vcnlfYmFycmllcigpOworCVNlbmRQb3N0bWFzdGVy U2lnbmFsKFBNU0lHTkFMX0lPX1dPUktFUl9HUk9XKTsKK30KKworLyoKKyAqIENhbmNlbCBhbnkg cmVxdWVzdCBmb3IgYSBuZXcgd29ya2VyLCBhZnRlciBvYnNlcnZpbmcgYW4gZW1wdHkgcXVldWUu CisgKi8KK3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJfY2FuY2VsX2dyb3codm9pZCkKK3sKKwlp ZiAoIWlvX3dvcmtlcl9jb250cm9sLT5ncm93KQorCQlyZXR1cm47CisKKwlpb193b3JrZXJfY29u dHJvbC0+Z3JvdyA9IGZhbHNlOworCXBnX21lbW9yeV9iYXJyaWVyKCk7Cit9CisKKy8qCisgKiBD YWxsZWQgYnkgdGhlIHBvc3RtYXN0ZXIgdG8gY2hlY2sgaWYgYSBuZXcgd29ya2VyIGhhcyBiZWVu IHJlcXVlc3RlZCAoYnV0CisgKiBwb3NzaWJseSBjYW5jZWxlZCBzaW5jZSkuCisgKi8KK2Jvb2wK K3BnYWlvX3dvcmtlcl9wbV90ZXN0X2dyb3dfc2lnbmFsX3NlbnQodm9pZCkKK3sKKwlwZ19tZW1v cnlfYmFycmllcigpOworCXJldHVybiBpb193b3JrZXJfY29udHJvbCAmJiBpb193b3JrZXJfY29u dHJvbC0+Z3Jvd19zaWduYWxfc2VudDsKK30KKworLyoKKyAqIENhbGxlZCBieSB0aGUgcG9zdG1h c3RlciB0byBjaGVjayBpZiBhIG5ldyB3b3JrZXIgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZAorICog bm90IGNhbmNlbGVkIHNpbmNlLgorICovCitib29sCitwZ2Fpb193b3JrZXJfcG1fdGVzdF9ncm93 KHZvaWQpCit7CisJcGdfbWVtb3J5X2JhcnJpZXIoKTsKKwlyZXR1cm4gaW9fd29ya2VyX2NvbnRy b2wgJiYgaW9fd29ya2VyX2NvbnRyb2wtPmdyb3c7Cit9CisKKy8qCisgKiBDYWxsZWQgYnkgdGhl IHBvc3RtYXN0ZXIgdG8gY2xlYXIgdGhlIHJlcXVlc3QgZm9yIGEgbmV3IHdvcmtlci4KKyAqLwor dm9pZAorcGdhaW9fd29ya2VyX3BtX2NsZWFyX2dyb3dfc2lnbmFsX3NlbnQodm9pZCkKK3sKKwlp ZiAoIWlvX3dvcmtlcl9jb250cm9sKQorCQlyZXR1cm47CisKKwlpb193b3JrZXJfY29udHJvbC0+ Z3JvdyA9IGZhbHNlOworCWlvX3dvcmtlcl9jb250cm9sLT5ncm93X3NpZ25hbF9zZW50ID0gZmFs c2U7CisJcGdfbWVtb3J5X2JhcnJpZXIoKTsKIH0KIAogc3RhdGljIGludAotcGdhaW9fd29ya2Vy X2Nob29zZV9pZGxlKHZvaWQpCitwZ2Fpb193b3JrZXJfY2hvb3NlX2lkbGUoaW50IG9ubHlfd29y a2Vyc19hYm92ZSkKIHsKKwlQZ0Fpb1dvcmtlclNldCB3b3JrZXJzZXQ7CiAJaW50CQkJd29ya2Vy OwogCi0JaWYgKGlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrID09IDApCisJQXNz ZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExX X0VYQ0xVU0lWRSkpOworCisJd29ya2Vyc2V0ID0gaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29y a2Vyc2V0OworCWlmIChvbmx5X3dvcmtlcnNfYWJvdmUgPj0gMCkKKwkJcGdhaW9fd29ya2Vyc2V0 X3JlbW92ZV9sdGUoJndvcmtlcnNldCwgb25seV93b3JrZXJzX2Fib3ZlKTsKKwlpZiAocGdhaW9f d29ya2Vyc2V0X2lzX2VtcHR5KCZ3b3JrZXJzZXQpKQogCQlyZXR1cm4gLTE7CiAKLQkvKiBGaW5k IHRoZSBsb3dlc3QgYml0IHBvc2l0aW9uLCBhbmQgY2xlYXIgaXQuICovCi0Jd29ya2VyID0gcGdf cmlnaHRtb3N0X29uZV9wb3M2NChpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzayk7 Ci0JaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgJj0gfihVSU5UNjRfQygxKSA8 PCB3b3JrZXIpOwotCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1t3b3JrZXJdLmlu X3VzZSk7CisJLyogRmluZCB0aGUgbG93ZXN0IG51bWJlcmVkIGlkbGUgd29ya2VyIGFuZCBtYXJr IGl0IG5vdCBpZGxlLiAqLworCXdvcmtlciA9IHBnYWlvX3dvcmtlcnNldF9nZXRfbG93ZXN0KCZ3 b3JrZXJzZXQpOworCXBnYWlvX3dvcmtlcnNldF9yZW1vdmUoJmlvX3dvcmtlcl9jb250cm9sLT5p ZGxlX3dvcmtlcnNldCwgd29ya2VyKTsKIAogCXJldHVybiB3b3JrZXI7CiB9CiAKKy8qCisgKiBU cnkgdG8gd2FrZSBhIHdvcmtlciBieSBzZXR0aW5nIGl0cyBsYXRjaCwgdG8gdGVsbCBpdCB0aGVy ZSBhcmUgSU9zIHRvCisgKiBwcm9jZXNzIGluIHRoZSBzdWJtaXNzaW9uIHF1ZXVlLgorICovCitz dGF0aWMgdm9pZAorcGdhaW9fd29ya2VyX3dha2UoaW50IHdvcmtlcikKK3sKKwlQcm9jTnVtYmVy CXByb2NfbnVtYmVyOworCisJLyoKKwkgKiBJZiB0aGUgc2VsZWN0ZWQgd29ya2VyIGlzIGNvbmN1 cnJlbnRseSBleGl0aW5nLCB0aGVuIHBnYWlvX3dvcmtlcl9kaWUoKQorCSAqIGhhZCBub3QgeWV0 IHJlbW92ZWQgaXQgYXMgb2Ygd2hlbiB3ZSBzYXcgaXQgaW4gaWRsZV93b3JrZXJzZXQuICBUaGF0 J3MKKwkgKiBPSywgYmVjYXVzZSBpdCB3aWxsIHdha2UgYWxsIHJlbWFpbmluZyB3b3JrZXJzIHRv IGNsb3NlIHdha2V1cC12cy1leGl0CisJICogcmFjZXM6ICpzb21lb25lKiB3aWxsIHNlZSB0aGUg cXVldWVkIElPLiAgSWYgdGhlcmUgYXJlIG5vIHdvcmtlcnMKKwkgKiBydW5uaW5nLCB0aGUgcG9z dG1hc3RlciB3aWxsIHN0YXJ0IGEgbmV3IG9uZS4KKwkgKi8KKwlwcm9jX251bWJlciA9IGlvX3dv cmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ucHJvY19udW1iZXI7CisJaWYgKHByb2NfbnVt YmVyICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCisJCVNldExhdGNoKCZHZXRQR1Byb2NCeU51bWJl cihwcm9jX251bWJlciktPnByb2NMYXRjaCk7Cit9CisKKy8qCisgKiBUcnkgdG8gd2FrZSBhIHNl dCBvZiB3b3JrZXJzLiAgVXNlZCBvbiBwb29sIGNoYW5nZSwgdG8gY2xvc2UgcmFjZXMKKyAqIGRl c2NyaWJlZCBpbiB0aGUgY2FsbGVycy4KKyAqLworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcnNl dF93YWtlKFBnQWlvV29ya2VyU2V0IHdvcmtlcnNldCkKK3sKKwl3aGlsZSAoIXBnYWlvX3dvcmtl cnNldF9pc19lbXB0eSgmd29ya2Vyc2V0KSkKKwkJcGdhaW9fd29ya2VyX3dha2UocGdhaW9fd29y a2Vyc2V0X3BvcF9sb3dlc3QoJndvcmtlcnNldCkpOworfQorCiBzdGF0aWMgYm9vbAogcGdhaW9f d29ya2VyX3N1Ym1pc3Npb25fcXVldWVfaW5zZXJ0KFBnQWlvSGFuZGxlICppb2gpCiB7CiAJUGdB aW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUgKnF1ZXVlOwogCXVpbnQzMgkJbmV3X2hlYWQ7CiAKKwlB c3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jaywg TFdfRVhDTFVTSVZFKSk7CisKIAlxdWV1ZSA9IGlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwog CW5ld19oZWFkID0gKHF1ZXVlLT5oZWFkICsgMSkgJiAocXVldWUtPnNpemUgLSAxKTsKIAlpZiAo bmV3X2hlYWQgPT0gcXVldWUtPnRhaWwpCkBAIC0xODUsNiArNDM4LDggQEAgcGdhaW9fd29ya2Vy X3N1Ym1pc3Npb25fcXVldWVfY29uc3VtZSh2b2lkKQogCVBnQWlvV29ya2VyU3VibWlzc2lvblF1 ZXVlICpxdWV1ZTsKIAlpbnQJCQlyZXN1bHQ7CiAKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1v ZGUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKSk7CisKIAlxdWV1 ZSA9IGlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwogCWlmIChxdWV1ZS0+dGFpbCA9PSBxdWV1 ZS0+aGVhZCkKIAkJcmV0dXJuIC0xOwkJCQkvKiBlbXB0eSAqLwpAQCAtMjAxLDYgKzQ1Niw4IEBA IHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2RlcHRoKHZvaWQpCiAJdWludDMyCQloZWFk OwogCXVpbnQzMgkJdGFpbDsKIAorCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShBaW9Xb3Jr ZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpKTsKKwogCWhlYWQgPSBpb193b3Jr ZXJfc3VibWlzc2lvbl9xdWV1ZS0+aGVhZDsKIAl0YWlsID0gaW9fd29ya2VyX3N1Ym1pc3Npb25f cXVldWUtPnRhaWw7CiAKQEAgLTIyNiw4ICs0ODMsNyBAQCBwZ2Fpb193b3JrZXJfc3VibWl0KHVp bnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCVBnQWlv SGFuZGxlICoqc3luY2hyb25vdXNfaW9zID0gTlVMTDsKIAlpbnQJCQluc3luYyA9IDA7Ci0JTGF0 Y2gJICAgKndha2V1cCA9IE5VTEw7Ci0JaW50CQkJd29ya2VyOworCWludAkJCXdvcmtlciA9IC0x OwogCiAJQXNzZXJ0KG51bV9zdGFnZWRfaW9zIDw9IFBHQUlPX1NVQk1JVF9CQVRDSF9TSVpFKTsK IApAQCAtMjUxLDIwICs1MDcsMTQgQEAgcGdhaW9fd29ya2VyX3N1Ym1pdCh1aW50MTYgbnVtX3N0 YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcykKIAogCQkJCWJyZWFrOwogCQkJfQot Ci0JCQlpZiAod2FrZXVwID09IE5VTEwpCi0JCQl7Ci0JCQkJLyogQ2hvb3NlIGFuIGlkbGUgd29y a2VyIHRvIHdha2UgdXAgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LiAqLwotCQkJCXdvcmtlciA9IHBn YWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgpOwotCQkJCWlmICh3b3JrZXIgPj0gMCkKLQkJCQkJd2Fr ZXVwID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbd29ya2VyXS5sYXRjaDsKLQotCQkJCXBn YWlvX2RlYnVnX2lvKERFQlVHNCwgc3RhZ2VkX2lvc1tpXSwKLQkJCQkJCQkgICAiY2hvb3Npbmcg d29ya2VyICVkIiwKLQkJCQkJCQkgICB3b3JrZXIpOwotCQkJfQogCQl9CisJCS8qIENob29zZSBv bmUgd29ya2VyIHRvIHdha2UgZm9yIHRoaXMgYmF0Y2guICovCisJCXdvcmtlciA9IHBnYWlvX3dv cmtlcl9jaG9vc2VfaWRsZSgtMSk7CiAJCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lv blF1ZXVlTG9jayk7CisKKwkJLyogV2FrZSB1cCBjaG9zZW4gd29ya2VyLiAgSXQgd2lsbCB3YWtl IHBlZXJzIGlmIG5lY2Vzc2FyeS4gKi8KKwkJaWYgKHdvcmtlciAhPSAtMSkKKwkJCXBnYWlvX3dv cmtlcl93YWtlKHdvcmtlcik7CiAJfQogCWVsc2UKIAl7CkBAIC0yNzMsOSArNTIzLDYgQEAgcGdh aW9fd29ya2VyX3N1Ym1pdCh1aW50MTYgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3Rh Z2VkX2lvcykKIAkJbnN5bmMgPSBudW1fc3RhZ2VkX2lvczsKIAl9CiAKLQlpZiAod2FrZXVwKQot CQlTZXRMYXRjaCh3YWtldXApOwotCiAJLyogUnVuIHdoYXRldmVyIGlzIGxlZnQgc3luY2hyb25v dXNseS4gKi8KIAlpZiAobnN5bmMgPiAwKQogCXsKQEAgLTI5NSwxNCArNTQyLDMwIEBAIHBnYWlv X3dvcmtlcl9zdWJtaXQodWludDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdl ZF9pb3MpCiBzdGF0aWMgdm9pZAogcGdhaW9fd29ya2VyX2RpZShpbnQgY29kZSwgRGF0dW0gYXJn KQogewotCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhD TFVTSVZFKTsKLQlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklk XS5pbl91c2UpOwotCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2Vy SWRdLmxhdGNoID09IE15TGF0Y2gpOworCVBnQWlvV29ya2VyU2V0IG5vdGlmeV9zZXQ7CiAKLQlp b193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzayAmPSB+KFVJTlQ2NF9DKDEpIDw8IE15 SW9Xb3JrZXJJZCk7Ci0JaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5p bl91c2UgPSBmYWxzZTsKLQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRd LmxhdGNoID0gTlVMTDsKKwlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxv Y2ssIExXX0VYQ0xVU0lWRSk7CisJcGdhaW9fd29ya2Vyc2V0X3JlbW92ZSgmaW9fd29ya2VyX2Nv bnRyb2wtPmlkbGVfd29ya2Vyc2V0LCBNeUlvV29ya2VySWQpOwogCUxXTG9ja1JlbGVhc2UoQWlv V29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CisKKwlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlckNv bnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOworCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29y a2Vyc1tNeUlvV29ya2VySWRdLnByb2NfbnVtYmVyID09IE15UHJvY051bWJlcik7CisJaW9fd29y a2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5wcm9jX251bWJlciA9IElOVkFMSURf UFJPQ19OVU1CRVI7CisJQXNzZXJ0KHBnYWlvX3dvcmtlcnNldF9jb250YWlucygmaW9fd29ya2Vy X2NvbnRyb2wtPndvcmtlcnNldCwgTXlJb1dvcmtlcklkKSk7CisJcGdhaW9fd29ya2Vyc2V0X3Jl bW92ZSgmaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNldCwgTXlJb1dvcmtlcklkKTsKKwlub3Rp Znlfc2V0ID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNldDsKKwlBc3NlcnQoaW9fd29ya2Vy X2NvbnRyb2wtPm53b3JrZXJzID4gMCk7CisJaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzLS07 CisJQXNzZXJ0KHBnYWlvX3dvcmtlcnNldF9jb3VudCgmaW9fd29ya2VyX2NvbnRyb2wtPndvcmtl cnNldCkgPT0KKwkJICAgaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKTsKKwlMV0xvY2tSZWxl YXNlKEFpb1dvcmtlckNvbnRyb2xMb2NrKTsKKworCS8qCisJICogTm90aWZ5IG90aGVyIHdvcmtl cnMgb24gcG9vbCBjaGFuZ2UuICBUaGlzIGFsbG93cyB0aGUgbmV3IGhpZ2hlc3QKKwkgKiB3b3Jr ZXIgdG8ga25vdyB0aGF0IGl0IGlzIG5vdyB0aGUgb25lIHRoYXQgY2FuIHRpbWUgb3V0LCBhbmQg Y2xvc2VzIGEKKwkgKiB3YWtldXAtbG9zcyByYWNlIGRlc2NyaWJlZCBpbiBwZ2Fpb193b3JrZXJf d2FrZSgpLgorCSAqLworCXBnYWlvX3dvcmtlcnNldF93YWtlKG5vdGlmeV9zZXQpOwogfQogCiAv KgpAQCAtMzEyLDMzICs1NzUsMzggQEAgcGdhaW9fd29ya2VyX2RpZShpbnQgY29kZSwgRGF0dW0g YXJnKQogc3RhdGljIHZvaWQKIHBnYWlvX3dvcmtlcl9yZWdpc3Rlcih2b2lkKQogeworCVBnQWlv V29ya2VyU2V0IGZyZWVfd29ya2Vyc2V0OworCVBnQWlvV29ya2VyU2V0IG9sZF93b3JrZXJzZXQ7 CisKIAlNeUlvV29ya2VySWQgPSAtMTsKIAotCS8qCi0JICogWFhYOiBUaGlzIGNvdWxkIGRvIHdp dGggbW9yZSBmaW5lLWdyYWluZWQgbG9ja2luZy4gQnV0IGl0J3MgYWxzbyBub3QKLQkgKiB2ZXJ5 IGNvbW1vbiBmb3IgdGhlIG51bWJlciBvZiB3b3JrZXJzIHRvIGNoYW5nZSBhdCB0aGUgbW9tZW50 Li4uCi0JICovCi0JTFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBM V19FWENMVVNJVkUpOworCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyQ29udHJvbExvY2ssIExXX0VY Q0xVU0lWRSk7CisJLyogRmluZCBsb3dlc3QgdW51c2VkIHdvcmtlciBJRC4gKi8KKwlwZ2Fpb193 b3JrZXJzZXRfYWxsKCZmcmVlX3dvcmtlcnNldCk7CisJcGdhaW9fd29ya2Vyc2V0X3N1YnRyYWN0 KCZmcmVlX3dvcmtlcnNldCwgJmlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQpOworCWlmICgh cGdhaW9fd29ya2Vyc2V0X2lzX2VtcHR5KCZmcmVlX3dvcmtlcnNldCkpCisJCU15SW9Xb3JrZXJJ ZCA9IHBnYWlvX3dvcmtlcnNldF9nZXRfbG93ZXN0KCZmcmVlX3dvcmtlcnNldCk7CisJaWYgKE15 SW9Xb3JrZXJJZCA9PSAtMSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkbid0IGZpbmQgYSBmcmVlIHdv cmtlciBJRCIpOwogCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfSU9fV09SS0VSUzsgKytpKQot CXsKLQkJaWYgKCFpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UpCi0JCXsKLQkJ CUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5sYXRjaCA9PSBOVUxMKTsKLQkJ CWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW2ldLmluX3VzZSA9IHRydWU7Ci0JCQlNeUlvV29y a2VySWQgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZWxzZQotCQkJQXNzZXJ0KGlvX3dvcmtlcl9j b250cm9sLT53b3JrZXJzW2ldLmxhdGNoICE9IE5VTEwpOwotCX0KKwlBc3NlcnQoaW9fd29ya2Vy X2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5wcm9jX251bWJlciA9PQorCQkgICBJTlZB TElEX1BST0NfTlVNQkVSKTsKKwlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2Vy SWRdLnByb2NfbnVtYmVyID0gTXlQcm9jTnVtYmVyOwogCi0JaWYgKE15SW9Xb3JrZXJJZCA9PSAt MSkKLQkJZWxvZyhFUlJPUiwgImNvdWxkbid0IGZpbmQgYSBmcmVlIHdvcmtlciBzbG90Iik7CisJ b2xkX3dvcmtlcnNldCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQ7CisJQXNzZXJ0KCFw Z2Fpb193b3JrZXJzZXRfY29udGFpbnMoJm9sZF93b3JrZXJzZXQsIE15SW9Xb3JrZXJJZCkpOwor CXBnYWlvX3dvcmtlcnNldF9pbnNlcnQoJmlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQsIE15 SW9Xb3JrZXJJZCk7CisJaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKys7CisJQXNzZXJ0KGlv X3dvcmtlcl9jb250cm9sLT5ud29ya2VycyA8PSBNQVhfSU9fV09SS0VSUyk7CisJQXNzZXJ0KHBn YWlvX3dvcmtlcnNldF9jb3VudCgmaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNldCkgPT0KKwkJ ICAgaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKTsKKwlMV0xvY2tSZWxlYXNlKEFpb1dvcmtl ckNvbnRyb2xMb2NrKTsKIAotCWlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrIHw9 IChVSU5UNjRfQygxKSA8PCBNeUlvV29ya2VySWQpOwotCWlvX3dvcmtlcl9jb250cm9sLT53b3Jr ZXJzW015SW9Xb3JrZXJJZF0ubGF0Y2ggPSBNeUxhdGNoOwotCUxXTG9ja1JlbGVhc2UoQWlvV29y a2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CisJLyoKKwkgKiBOb3RpZnkgb3RoZXIgd29ya2VycyBv biBwb29sIGNoYW5nZS4gIElmIHdlIHdlcmUgdGhlIGhpZ2hlc3Qgd29ya2VyLAorCSAqIHRoaXMg YWxsb3dzIHRoZSBuZXcgaGlnaGVzdCB3b3JrZXIgdG8ga25vdyB0aGF0IGl0IGNhbiB0aW1lIG91 dC4KKwkgKi8KKwlwZ2Fpb193b3JrZXJzZXRfd2FrZShvbGRfd29ya2Vyc2V0KTsKIAogCW9uX3No bWVtX2V4aXQocGdhaW9fd29ya2VyX2RpZSwgMCk7CiB9CkBAIC0zNjQsMTQgKzYzMiw0OCBAQCBw Z2Fpb193b3JrZXJfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogCWVycmNvbnRleHQoIkkvTyB3 b3JrZXIgZXhlY3V0aW5nIEkvTyBvbiBiZWhhbGYgb2YgcHJvY2VzcyAlZCIsIG93bmVyX3BpZCk7 CiB9CiAKKy8qCisgKiBDaGVjayBpZiB0aGlzIGJhY2tlbmQgaXMgYWxsb3dlZCB0byB0aW1lIG91 dCwgYW5kIHRodXMgc2hvdWxkIHVzZSBhCisgKiBub24taW5maW5pdGUgc2xlZXAgdGltZS4gIE9u bHkgdGhlIGhpZ2hlc3QtbnVtYmVyZWQgd29ya2VyIGlzIGFsbG93ZWQgdG8KKyAqIHRpbWUgb3V0 LCBhbmQgb25seSBpZiB0aGUgcG9vbCBpcyBhYm92ZSBpb19taW5fd29ya2Vycy4gIFNlcmlhbGl6 aW5nCisgKiB0aW1lb3V0cyBrZWVwcyBJRHMgaW4gYSByYW5nZSAwLi5OIHdpdGhvdXQgZ2Fwcywg YW5kIGF2b2lkcyB1bmRlcnNob290aW5nCisgKiBpb19taW5fd29ya2Vycy4KKyAqCisgKiBUaGUg cmVzdWx0IGlzIG9ubHkgaW5zdGFudGFuZW91c2x5IHRydWUgYW5kIG1heSBiZSB0ZW1wb3Jhcmls eSBpbmNvbnNpc3RlbnQKKyAqIGluIGRpZmZlcmVudCB3b3JrZXJzIGFyb3VuZCB0cmFuc2l0aW9u cywgYnV0IGFsbCB3b3JrZXJzIGFyZSB3b2tlbiB1cCBvbgorICogcG9vbCBzaXplIG9yIEdVQyBj aGFuZ2VzIG1ha2luZyB0aGUgcmVzdWx0IGV2ZW50dWFsbHkgY29uc2lzdGVudC4KKyAqLworc3Rh dGljIGJvb2wKK3BnYWlvX3dvcmtlcl9jYW5fdGltZW91dCh2b2lkKQoreworCVBnQWlvV29ya2Vy U2V0IHdvcmtlcnNldDsKKworCWlmIChNeUlvV29ya2VySWQgPCBpb19taW5fd29ya2VycykKKwkJ cmV0dXJuIGZhbHNlOworCisJLyogU2VyaWFsaXplIGFnYWluc3QgcG9vbCBzaXplIGNoYW5nZXMu ICovCisJTFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJDb250cm9sTG9jaywgTFdfU0hBUkVEKTsKKwl3 b3JrZXJzZXQgPSBpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc2V0OworCUxXTG9ja1JlbGVhc2Uo QWlvV29ya2VyQ29udHJvbExvY2spOworCisJaWYgKE15SW9Xb3JrZXJJZCAhPSBwZ2Fpb193b3Jr ZXJzZXRfZ2V0X2hpZ2hlc3QoJndvcmtlcnNldCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVy biB0cnVlOworfQorCiB2b2lkCiBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRh LCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIHsKIAlzaWdqbXBfYnVmCWxvY2FsX3NpZ2ptcF9i dWY7CisJVGltZXN0YW1wVHogaWRsZV90aW1lb3V0X2FicyA9IDA7CisJaW50CQkJdGltZW91dF9n dWNfdXNlZCA9IDA7CiAJUGdBaW9IYW5kbGUgKnZvbGF0aWxlIGVycm9yX2lvaCA9IE5VTEw7CiAJ RXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2sgPSB7MH07CiAJdm9sYXRpbGUgaW50IGVy cm9yX2Vycm5vID0gMDsKIAljaGFyCQljbWRbMTI4XTsKKwlpbnQJCQloaXN0X2lvcyA9IDA7CisJ aW50CQkJaGlzdF93YWtldXBzID0gMDsKIAogCUF1eGlsaWFyeVByb2Nlc3NNYWluQ29tbW9uKCk7 CiAKQEAgLTQzOSwxMCArNzQxLDkgQEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJd2hpbGUgKCFTaHV0ZG93blJlcXVlc3RQ ZW5kaW5nKQogCXsKIAkJdWludDMyCQlpb19pbmRleDsKLQkJTGF0Y2gJICAgKmxhdGNoZXNbSU9f V09SS0VSX1dBS0VVUF9GQU5PVVRdOwotCQlpbnQJCQlubGF0Y2hlcyA9IDA7Ci0JCWludAkJCW53 YWtldXBzID0gMDsKLQkJaW50CQkJd29ya2VyOworCQlpbnQJCQl3b3JrZXIgPSAtMTsKKwkJaW50 CQkJcXVldWVfZGVwdGggPSAwOworCQlib29sCQltYXliZV9ncm93ID0gZmFsc2U7CiAKIAkJLyoK IAkJICogVHJ5IHRvIGdldCBhIGpvYiB0byBkby4KQEAgLTQ1MywzOCArNzU0LDEwNyBAQCBJb1dv cmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xl bikKIAkJTFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENM VVNJVkUpOwogCQlpZiAoKGlvX2luZGV4ID0gcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVf Y29uc3VtZSgpKSA9PSAtMSkKIAkJewotCQkJLyoKLQkJCSAqIE5vdGhpbmcgdG8gZG8uICBNYXJr IHNlbGYgaWRsZS4KLQkJCSAqCi0JCQkgKiBYWFg6IEludmVudCBzb21lIGtpbmQgb2YgYmFjayBw cmVzc3VyZSB0byByZWR1Y2UgdXNlbGVzcwotCQkJICogd2FrZXVwcz8KLQkJCSAqLwotCQkJaW9f d29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgfD0gKFVJTlQ2NF9DKDEpIDw8IE15SW9X b3JrZXJJZCk7CisJCQkvKiBOb3RoaW5nIHRvIGRvLiAgTWFyayBzZWxmIGlkbGUuICovCisJCQlw Z2Fpb193b3JrZXJzZXRfaW5zZXJ0KCZpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJzZXQs CisJCQkJCQkJCSAgIE15SW9Xb3JrZXJJZCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiBHb3Qg b25lLiAgQ2xlYXIgaWRsZSBmbGFnLiAqLwotCQkJaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29y a2VyX21hc2sgJj0gfihVSU5UNjRfQygxKSA8PCBNeUlvV29ya2VySWQpOworCQkJcGdhaW9fd29y a2Vyc2V0X3JlbW92ZSgmaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2Vyc2V0LAorCQkJCQkJ CQkgICBNeUlvV29ya2VySWQpOwogCi0JCQkvKiBTZWUgaWYgd2UgY2FuIHdha2UgdXAgc29tZSBw ZWVycy4gKi8KLQkJCW53YWtldXBzID0gTWluKHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVl X2RlcHRoKCksCi0JCQkJCQkgICBJT19XT1JLRVJfV0FLRVVQX0ZBTk9VVCk7Ci0JCQlmb3IgKGlu dCBpID0gMDsgaSA8IG53YWtldXBzOyArK2kpCisJCQkvKgorCQkJICogU2VlIGlmIHdlIHNob3Vs ZCB3YWtlIHVwIGEgaGlnaGVyIG51bWJlcmVkIHBlZXIuICBPbmx5IGRvIHRoYXQKKwkJCSAqIGlm IHRoaXMgd29ya2VyIGlzIG5vdCByZWNlaXZpbmcgc3B1cmlvdXMgd2FrZXVwcyBpdHNlbGYuICBU aGUKKwkJCSAqIGludGVudGlvbiBpcyBjcmVhdGUgYSBmcm9udGllciBiZXlvbmQgd2hpY2ggaWRs ZSB3b3JrZXJzIHN0YXkKKwkJCSAqIGFzbGVlcC4KKwkJCSAqCisJCQkgKiBUaGlzIGhldXJpc3Rp YyB0cmllcyB0byBkaXNjb3ZlciB0aGUgdXNlZnVsIHdha2V1cCBwcm9wYWdhdGlvbgorCQkJICog Y2hhaW4gbGVuZ3RoIHdoZW4gSU9zIGFyZSB2ZXJ5IGZhc3QgYW5kIHdvcmtlcnMgd2FrZSB1cCB0 byBmaW5kCisJCQkgKiB0aGF0IGFsbCBJT3MgaGF2ZSBhbHJlYWR5IGJlZW4gdGFrZW4uCisJCQkg KgorCQkJICogSWYgd2UgY2hvc2Ugbm90IHRvIHdha2UgYSB3b3JrZXIgd2hlbiB3ZSBpZGVhbGx5 IHNob3VsZCBoYXZlLAorCQkJICogdGhlbiBpb3Mgd2lsbCBzb29uIGV4Y2VlZCB3YWtldXBzLgor CQkJICovCisJCQlpZiAoaGlzdF93YWtldXBzIDw9IGhpc3RfaW9zKQogCQkJewotCQkJCWlmICgo d29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKCkpIDwgMCkKLQkJCQkJYnJlYWs7Ci0J CQkJbGF0Y2hlc1tubGF0Y2hlcysrXSA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtl cl0ubGF0Y2g7CisJCQkJcXVldWVfZGVwdGggPSBwZ2Fpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1 ZV9kZXB0aCgpOworCQkJCWlmIChxdWV1ZV9kZXB0aCA+IDApCisJCQkJeworCQkJCQkvKiBDaG9v c2UgYSB3b3JrZXIgaGlnaGVyIHRoYW4gbWUgdG8gd2FrZS4gKi8KKwkJCQkJd29ya2VyID0gcGdh aW9fd29ya2VyX2Nob29zZV9pZGxlKE15SW9Xb3JrZXJJZCk7CisJCQkJCWlmICh3b3JrZXIgPT0g LTEpCisJCQkJCQltYXliZV9ncm93ID0gdHJ1ZTsKKwkJCQl9CiAJCQl9CiAJCX0KIAkJTFdMb2Nr UmVsZWFzZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrKTsKIAotCQlmb3IgKGludCBpID0g MDsgaSA8IG5sYXRjaGVzOyArK2kpCi0JCQlTZXRMYXRjaChsYXRjaGVzW2ldKTsKKwkJLyogUHJv cGFnYXRlIHdha2V1cHMuICovCisJCWlmICh3b3JrZXIgIT0gLTEpCisJCXsKKwkJCXBnYWlvX3dv cmtlcl93YWtlKHdvcmtlcik7CisJCX0KKwkJZWxzZSBpZiAobWF5YmVfZ3JvdykKKwkJeworCQkJ LyoKKwkJCSAqIFdlIGtub3cgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBtb3JlIGl0ZW0gaW4gdGhl IHF1ZXVlLCBhbmQgd2UKKwkJCSAqIGZhaWxlZCB0byBmaW5kIGEgaGlnaGVyLW51bWJlcmVkIGlk bGUgd29ya2VyIHRvIHdha2UuICBOb3cgd2UKKwkJCSAqIGRlY2lkZSBpZiB3ZSBzaG91bGQgdHJ5 IHRvIHN0YXJ0IG9uZSBtb3JlIHdvcmtlci4KKwkJCSAqCisJCQkgKiBXZSBkbyB0aGlzIHdpdGgg YSBzaW1wbGUgaGV1cmlzdGljOiBpcyB0aGUgcXVldWUgZGVwdGggZ3JlYXRlcgorCQkJICogdGhh biB0aGUgY3VycmVudCBudW1iZXIgb2Ygd29ya2Vycz8KKwkJCSAqCisJCQkgKiBDb25zaWRlciB0 aGUgZm9sbG93aW5nIHNpdHVhdGlvbnM6CisJCQkgKgorCQkJICogMS4gVGhlIHF1ZXVlIGRlcHRo IGlzIGNvbnN0YW50bHkgaW5jcmVhc2luZywgYmVjYXVzZSBJT3MgYXJlCisJCQkgKiBhcnJpdmlu ZyBmYXN0ZXIgdGhhbiB0aGV5IGNhbiBwb3NzaWJseSBiZSBzZXJ2aWNlZC4gIEl0IGRvZXNuJ3QK KwkJCSAqIG1hdHRlciBtdWNoIHdoaWNoIHRocmVzaG9sZCB3ZSBjaG9vc2UsIGFzIHdlIHdpbGwg c3VyZWx5IGhpdAorCQkJICogaXQuICBDcm9zc2luZyB0aGUgY3VycmVudCB3b3JrZXIgY291bnQg aXMgYSB1c2VmdWwgc2lnbmFsCisJCQkgKiBiZWNhdXNlIGl0J3MgY2xlYXJseSB0b28gZGVlcCB0 byBhdm9pZCBxdWV1aW5nIGxhdGVuY3kgYWxyZWFkeSwKKwkJCSAqIGJ1dCBzdGlsbCBsZWF2ZXMg YSBzbWFsbCB3aW5kb3cgb2Ygb3Bwb3J0dW5pdHkgdG8gaW1wcm92ZSB0aGUKKwkJCSAqIHNpdHVh dGlvbiBiZWZvcmUgdGhlIHF1ZXVlIG92ZWZsb3dzLgorCQkJICoKKwkJCSAqIDIuIFRoZSB3b3Jr ZXIgcG9vbCBpcyBrZWVwaW5nIHVwLCBubyBsYXRlbmN5IGlzIGJlaW5nCisJCQkgKiBpbnRyb2R1 Y2VkIGFuZCBhbiBleHRyYSB3b3JrZXIgd291bGQgYmUgYSB3YXN0ZSBvZiByZXNvdXJjZXMuCisJ CQkgKiBRdWV1ZSBkZXB0aCBkaXN0cmlidXRpb25zIHRlbmQgdG8gYmUgaGVhdmlseSBza2V3ZWQs IHdpdGggbG9uZworCQkJICogdGFpbHMgb2YgbG93IHByb2JhYmlsaXR5IHNwaWtlcyAoZHVlIHRv IHN1Ym1pc3Npb24gY2x1c3RlcmluZywKKwkJCSAqIHNjaGVkdWxpbmcsIGppdHRlciwgc3RhbGxz LCBub2lzeSBuZWlnaGJvcnMsIGV0YykuICBXZSB3YW50IGEKKwkJCSAqIG51bWJlciB0aGF0IGlz IHZlcnkgdW5saWtlbHkgdG8gYmUgdHJpZ2dlcmVkIGJ5IGFuIG91dGxpZXIsIGFuZAorCQkJICog d2UgYmV0IHRoYXQgYW4gZXhwb25lbnRpYWwgb3Igc2ltaWxhciBkaXN0cmlidXRpb24gd2hvc2UK KwkJCSAqIG91dGxpZXJzIG5ldmVyIHJlYWNoIHRoaXMgdGhyZXNob2xkIG11c3QgYmUgYWxtb3N0 IGVudGlyZWx5CisJCQkgKiBjb25jZW50cmF0ZWQgYXQgdGhlIGxvdyBlbmQuICBJZiB3ZSBkbyBz ZWUgYSBzcGlrZSBhcyBiaWcgYXMKKwkJCSAqIHRoZSB3b3JrZXIgY291bnQsIHdlIHRha2UgaXQg YXMgYSBzaWduYWwgdGhhdCB0aGUgZGlzdHJpYnV0aW9uCisJCQkgKiBpcyBzdXJlbHkgdG9vIHdp ZGUuCisJCQkgKgorCQkJICogT24gaXRzIG93biwgdGhpcyBpcyBhbiBleHRyZW1lbHkgY3J1ZGUg c2lnbmFsLiAgV2hlbiBjb21iaW5lZAorCQkJICogd2l0aCB0aGUgd2FrZXVwIHByb3BhZ2F0aW9u IHRlc3QgdGhhdCBwcmVjZWRlcyBpdCAoYnV0IG9uIGl0cworCQkJICogb3duIHRlbmRzIHRvIG92 ZXJzaG9vdCkgYW5kIHRoZSBpb193b3JrZXJfbGF1bmNoX2RlbGF5LCB3ZQorCQkJICogZ3JhZHVh bGx5IHRyeSBlYWNoIHBvb2wgc2l6ZSB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGRvZXNuJ3QKKwkJ CSAqIHRyaWdnZXIgZnVydGhlciBncm93dGguCisJCQkgKgorCQkJICogWFhYIFBlcmhhcHMgaWRl YXMgZnJvbSBxdWV1ZWluZyB0aGVvcnkgb3IgY29udHJvbCB0aGVvcnkgY291bGQKKwkJCSAqIGRv IGEgbXVjaCBiZXR0ZXIgam9iIG9mIHRoaXMuCisJCQkgKi8KKworCQkJLyogUmVhZCBud29ya2Vy cyB3aXRob3V0IGxvY2sgZm9yIHRoaXMgaGV1cmlzdGljIHB1cnBvc2UuICovCisJCQlpZiAocXVl dWVfZGVwdGggPiBpb193b3JrZXJfY29udHJvbC0+bndvcmtlcnMpCisJCQkJcGdhaW9fd29ya2Vy X3JlcXVlc3RfZ3JvdygpOworCQl9CiAKIAkJaWYgKGlvX2luZGV4ICE9IC0xKQogCQl7CiAJCQlQ Z0Fpb0hhbmRsZSAqaW9oID0gTlVMTDsKIAorCQkJLyogQ2FuY2VsIHRpbWVvdXQgYW5kIHVwZGF0 ZSB3YWtldXA6d29yayByYXRpby4gKi8KKwkJCWlkbGVfdGltZW91dF9hYnMgPSAwOworCQkJaWYg KCsraGlzdF9pb3MgPT0gUEdBSU9fV09SS0VSX1dBS0VVUF9SQVRJT19TQVRVUkFURSkKKwkJCXsK KwkJCQloaXN0X3dha2V1cHMgLz0gMjsKKwkJCQloaXN0X2lvcyAvPSAyOworCQkJfQorCiAJCQlp b2ggPSAmcGdhaW9fY3RsLT5pb19oYW5kbGVzW2lvX2luZGV4XTsKIAkJCWVycm9yX2lvaCA9IGlv aDsKIAkJCWVycmNhbGxiYWNrLmFyZyA9IGlvaDsKQEAgLTUzNyw2ICs5MDcsMTkgQEAgSW9Xb3Jr ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4p CiAJCQl9CiAjZW5kaWYKIAorI2lmZGVmIFBHQUlPX1dPUktFUl9TSE9XX1BTX0lORk8KKwkJCXsK KwkJCQljaGFyCSAgICpkZXNjcmlwdGlvbiA9IHBnYWlvX2lvX2dldF90YXJnZXRfZGVzY3JpcHRp b24oaW9oKTsKKworCQkJCXNwcmludGYoY21kLCAiJWQ6IFslc10gJXMiLAorCQkJCQkJTXlJb1dv cmtlcklkLAorCQkJCQkJcGdhaW9faW9fZ2V0X29wX25hbWUoaW9oKSwKKwkJCQkJCXBnYWlvX2lv X2dldF90YXJnZXRfZGVzY3JpcHRpb24oaW9oKSk7CisJCQkJcGZyZWUoZGVzY3JpcHRpb24pOwor CQkJCXNldF9wc19kaXNwbGF5KGNtZCk7CisJCQl9CisjZW5kaWYKKwogCQkJLyoKIAkJCSAqIFdl IGRvbid0IGV4cGVjdCB0aGlzIHRvIGV2ZXIgZmFpbCB3aXRoIEVSUk9SIG9yIEZBVEFMLCBubyBu ZWVkCiAJCQkgKiB0byBrZWVwIGVycm9yX2lvaCBzZXQgdG8gdGhlIElPLgpAQCAtNTUwLDggKzkz Myw3NiBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbikKIAkJfQogCQllbHNlCiAJCXsKLQkJCVdhaXRMYXRjaChNeUxhdGNoLCBX TF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAtMSwKLQkJCQkJICBXQUlUX0VWRU5U X0lPX1dPUktFUl9NQUlOKTsKKwkJCWludAkJCXRpbWVvdXRfbXM7CisKKwkJCS8qIENhbmNlbCBu ZXcgd29ya2VyIHJlcXVlc3QgaWYgcGVuZGluZy4gKi8KKwkJCXBnYWlvX3dvcmtlcl9jYW5jZWxf Z3JvdygpOworCisJCQkvKiBDb21wdXRlIHRoZSByZW1haW5pbmcgYWxsb3dlZCBpZGxlIHRpbWUu ICovCisJCQlpZiAoaW9fd29ya2VyX2lkbGVfdGltZW91dCA9PSAtMSkKKwkJCXsKKwkJCQkvKiBO ZXZlciB0aW1lIG91dC4gKi8KKwkJCQl0aW1lb3V0X21zID0gLTE7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJCQkJ LyogSWYgdGhlIEdVQyBjaGFuZ2VzLCByZXNldCB0aW1lci4gKi8KKwkJCQlpZiAoaWRsZV90aW1l b3V0X2FicyAhPSAwICYmCisJCQkJCWlvX3dvcmtlcl9pZGxlX3RpbWVvdXQgIT0gdGltZW91dF9n dWNfdXNlZCkKKwkJCQkJaWRsZV90aW1lb3V0X2FicyA9IDA7CisKKwkJCQkvKiBPbmx5IHRoZSBo aWdoZXN0LW51bWJlcmVkIHdvcmtlciBjYW4gdGltZSBvdXQuICovCisJCQkJaWYgKHBnYWlvX3dv cmtlcl9jYW5fdGltZW91dCgpKQorCQkJCXsKKwkJCQkJaWYgKGlkbGVfdGltZW91dF9hYnMgPT0g MCkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIEkgaGF2ZSBqdXN0IGJlZW4gcHJvbW90ZWQg dG8gdGhlIHRpbWVvdXQgd29ya2VyLCBvcgorCQkJCQkJICogdGhlIEdVQyBjaGFuZ2VkLiAgQ29t cHV0ZSBuZXcgYWJzb2x1dGUgdGltZSBmcm9tCisJCQkJCQkgKiBub3cuCisJCQkJCQkgKi8KKwkJ CQkJCWlkbGVfdGltZW91dF9hYnMgPQorCQkJCQkJCVRpbWVzdGFtcFR6UGx1c01pbGxpc2Vjb25k cyhub3csCisJCQkJCQkJCQkJCQkJCWlvX3dvcmtlcl9pZGxlX3RpbWVvdXQpOworCQkJCQkJdGlt ZW91dF9ndWNfdXNlZCA9IGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ7CisJCQkJCX0KKwkJCQkJdGlt ZW91dF9tcyA9CisJCQkJCQlUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzKG5vdywgaWRs ZV90aW1lb3V0X2Ficyk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qIE5vIHRpbWVv dXQgZm9yIG1lLiAqLworCQkJCQlpZGxlX3RpbWVvdXRfYWJzID0gMDsKKwkJCQkJdGltZW91dF9t cyA9IC0xOworCQkJCX0KKwkJCX0KKworI2lmZGVmIFBHQUlPX1dPUktFUl9TSE9XX1BTX0lORk8K KwkJCXNwcmludGYoY21kLCAiJWQ6IGlkbGUsIHdha2V1cHM6aW9zID0gJWQ6JWQiLAorCQkJCQlN eUlvV29ya2VySWQsIGhpc3Rfd2FrZXVwcywgaGlzdF9pb3MpOworCQkJc2V0X3BzX2Rpc3BsYXko Y21kKTsKKyNlbmRpZgorCisJCQlpZiAoV2FpdExhdGNoKE15TGF0Y2gsIFdMX0xBVENIX1NFVCB8 IFdMX0VYSVRfT05fUE1fREVBVEggfCBXTF9USU1FT1VULAorCQkJCQkJICB0aW1lb3V0X21zLAor CQkJCQkJICBXQUlUX0VWRU5UX0lPX1dPUktFUl9NQUlOKSA9PSBXTF9USU1FT1VUKQorCQkJewor CQkJCS8qIFdMX1RJTUVPVVQgKi8KKwkJCQlpZiAocGdhaW9fd29ya2VyX2Nhbl90aW1lb3V0KCkp CisJCQkJCWlmIChHZXRDdXJyZW50VGltZXN0YW1wKCkgPj0gaWRsZV90aW1lb3V0X2FicykKKwkJ CQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIFdMX0xBVENIX1NFVCAqLwor CQkJCWlmICgrK2hpc3Rfd2FrZXVwcyA9PSBQR0FJT19XT1JLRVJfV0FLRVVQX1JBVElPX1NBVFVS QVRFKQorCQkJCXsKKwkJCQkJaGlzdF93YWtldXBzIC89IDI7CisJCQkJCWhpc3RfaW9zIC89IDI7 CisJCQkJfQorCQkJfQogCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKIAkJfQogCkBAIC01NjEsNiAr MTAxMiwxMCBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qg c3RhcnR1cF9kYXRhX2xlbikKIAkJewogCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwog CQkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CisKKwkJCS8qIElmIGlvX21heF93b3Jr ZXJzIGhhcyBiZWVuIGRlY3JlYXNlZCwgZXhpdCBoaWdoZXN0IGZpcnN0LiAqLworCQkJaWYgKE15 SW9Xb3JrZXJJZCA+PSBpb19tYXhfd29ya2VycykKKwkJCQlicmVhazsKIAkJfQogCX0KIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQg Yi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCA3 YmRhNTI5ODU1OC4uNTYwNjU5Zjk1NjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fj dGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2 aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC0zNjksNiArMzY5LDcgQEAgQWlvV29ya2VyU3Vi bWlzc2lvblF1ZXVlCSJXYWl0aW5nIHRvIGFjY2VzcyBBSU8gd29ya2VyIHN1Ym1pc3Npb24gcXVl dWUuIgogV2FpdExTTgkiV2FpdGluZyB0byByZWFkIG9yIHVwZGF0ZSBzaGFyZWQgV2FpdC1mb3It TFNOIHN0YXRlLiIKIExvZ2ljYWxEZWNvZGluZ0NvbnRyb2wJIldhaXRpbmcgdG8gcmVhZCBvciB1 cGRhdGUgbG9naWNhbCBkZWNvZGluZyBzdGF0dXMgaW5mb3JtYXRpb24uIgogRGF0YUNoZWNrc3Vt c1dvcmtlcgkiV2FpdGluZyBmb3IgZGF0YSBjaGVja3N1bXMgd29ya2VyLiIKK0Fpb1dvcmtlckNv bnRyb2wJIldhaXRpbmcgdG8gdXBkYXRlIEFJTyB3b3JrZXIgaW5mb3JtYXRpb24uIgogCiAjCiAj IEVORCBPRiBQUkVERUZJTkVEIExXTE9DS1MgKERPIE5PVCBDSEFOR0UgVEhJUyBMSU5FKQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCA4NmMxZWJhNWRhYi4u ODNhZjU5NGQ0YWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0 CkBAIC0xMzkwLDYgKzEzOTAsMTQgQEAKICAgY2hlY2tfaG9vayA9PiAnY2hlY2tfaW9fbWF4X2Nv bmN1cnJlbmN5JywKIH0sCiAKK3sgbmFtZSA9PiAnaW9fbWF4X3dvcmtlcnMnLCB0eXBlID0+ICdp bnQnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAgPT4gJ1JFU09VUkNFU19JTycsCisg IHNob3J0X2Rlc2MgPT4gJ01heGltdW0gbnVtYmVyIG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzLCBm b3IgaW9fbWV0aG9kPXdvcmtlci4nLAorICB2YXJpYWJsZSA9PiAnaW9fbWF4X3dvcmtlcnMnLAor ICBib290X3ZhbCA9PiAnOCcsCisgIG1pbiA9PiAnMScsCisgIG1heCA9PiAnTUFYX0lPX1dPUktF UlMnLAorfSwKKwogeyBuYW1lID0+ICdpb19tZXRob2QnLCB0eXBlID0+ICdlbnVtJywgY29udGV4 dCA9PiAnUEdDX1BPU1RNQVNURVInLCBncm91cCA9PiAnUkVTT1VSQ0VTX0lPJywKICAgc2hvcnRf ZGVzYyA9PiAnU2VsZWN0cyB0aGUgbWV0aG9kIGZvciBleGVjdXRpbmcgYXN5bmNocm9ub3VzIEkv Ty4nLAogICB2YXJpYWJsZSA9PiAnaW9fbWV0aG9kJywKQEAgLTEzOTgsMTQgKzE0MDYsMzIgQEAK ICAgYXNzaWduX2hvb2sgPT4gJ2Fzc2lnbl9pb19tZXRob2QnLAogfSwKIAoteyBuYW1lID0+ICdp b193b3JrZXJzJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1NJR0hVUCcsIGdyb3Vw ID0+ICdSRVNPVVJDRVNfSU8nLAotICBzaG9ydF9kZXNjID0+ICdOdW1iZXIgb2YgSU8gd29ya2Vy IHByb2Nlc3NlcywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKLSAgdmFyaWFibGUgPT4gJ2lvX3dv cmtlcnMnLAotICBib290X3ZhbCA9PiAnMycsCit7IG5hbWUgPT4gJ2lvX21pbl93b3JrZXJzJywg dHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1NJR0hVUCcsIGdyb3VwID0+ICdSRVNPVVJD RVNfSU8nLAorICBzaG9ydF9kZXNjID0+ICdNaW5pbXVtIG51bWJlciBvZiBJL08gd29ya2VyIHBy b2Nlc3NlcywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKKyAgdmFyaWFibGUgPT4gJ2lvX21pbl93 b3JrZXJzJywKKyAgYm9vdF92YWwgPT4gJzInLAogICBtaW4gPT4gJzEnLAogICBtYXggPT4gJ01B WF9JT19XT1JLRVJTJywKIH0sCiAKK3sgbmFtZSA9PiAnaW9fd29ya2VyX2lkbGVfdGltZW91dCcs IHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdIVVAnLCBncm91cCA9PiAnUkVTT1VS Q0VTX0lPJywKKyAgc2hvcnRfZGVzYyA9PiAnTWF4aW11bSB0aW1lIGJlZm9yZSBpZGxlIEkvTyB3 b3JrZXIgcHJvY2Vzc2VzIHRpbWUgb3V0LCBmb3IgaW9fbWV0aG9kPXdvcmtlci4nLAorICB2YXJp YWJsZSA9PiAnaW9fd29ya2VyX2lkbGVfdGltZW91dCcsCisgIGZsYWdzID0+ICdHVUNfVU5JVF9N UycsCisgIGJvb3RfdmFsID0+ICc2MDAwMCcsCisgIG1pbiA9PiAnMCcsCisgIG1heCA9PiAnSU5U X01BWCcsCit9LAorCit7IG5hbWUgPT4gJ2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwnLCB0eXBl ID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAgPT4gJ1JFU09VUkNFU19J TycsCisgIHNob3J0X2Rlc2MgPT4gJ01pbmltdW0gdGltZSBiZWZvcmUgbGF1bmNoaW5nIGEgbmV3 IEkvTyB3b3JrZXIgcHJvY2VzcywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKKyAgdmFyaWFibGUg PT4gJ2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwnLAorICBmbGFncyA9PiAnR1VDX1VOSVRfTVMn LAorICBib290X3ZhbCA9PiAnMTAwJywKKyAgbWluID0+ICcwJywKKyAgbWF4ID0+ICdJTlRfTUFY JywKK30sCisKICMgTm90IGZvciBnZW5lcmFsIHVzZSAtLS0gdXNlZCBieSBTRVQgU0VTU0lPTiBB VVRIT1JJWkFUSU9OIGFuZCBTRVQKICMgUk9MRQogeyBuYW1lID0+ICdpc19zdXBlcnVzZXInLCB0 eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX0lOVEVSTkFMJywgZ3JvdXAgPT4gJ1VOR1JP VVBFRCcsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29u Zi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK aW5kZXggNGYyYmJmMDUyOTUuLjVlMWU0OWYwYWU4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0yMjIsNyArMjIyLDExIEBACiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYW4gZXhlY3V0ZSBzaW11bHRhbmVv dXNseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLTEgc2V0cyBi YXNlZCBvbiBzaGFyZWRfYnVmZmVycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQotI2lvX3dvcmtlcnMgPSAzICAgICAg ICAgICAgICAgICAgICAgICAgICMgMS0zMjsKKworI2lvX21pbl93b3JrZXJzID0gMiAgICAgICAg ICAgICAgICAgICAgICMgMS0zMiAoY2hhbmdlIHJlcXVpcmVzIHBnX3JlbG9hZF9jb25mKCkpCisj aW9fbWF4X3dvcmtlcnMgPSA4ICAgICAgICAgICAgICAgICAgICAgIyAxLTMyCisjaW9fd29ya2Vy X2lkbGVfdGltZW91dCA9IDYwcworI2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwgPSAxMDBtcwog CiAjIC0gV29ya2VyIFByb2Nlc3NlcyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvaW9fd29ya2VyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5oCmluZGV4IGY3 ZDU5OThhMTM4Li5jODUyYzlmMzc0MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9p b193b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5oCkBAIC0xNyw2 ICsxNywxNSBAQAogCiBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBJb1dvcmtlck1haW4oY29uc3Qg dm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbik7CiAKLWV4dGVybiBQ R0RMTElNUE9SVCBpbnQgaW9fd29ya2VyczsKKy8qIFB1YmxpYyBHVUNzLiAqLworZXh0ZXJuIFBH RExMSU1QT1JUIGludCBpb19taW5fd29ya2VyczsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgaW9f bWF4X3dvcmtlcnM7CitleHRlcm4gUEdETExJTVBPUlQgaW50IGlvX3dvcmtlcl9pZGxlX3RpbWVv dXQ7CitleHRlcm4gUEdETExJTVBPUlQgaW50IGlvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWw7CisK Ky8qIEludGVyZmFjZXMgdmlzaWJsZSB0byB0aGUgcG9zdG1hc3Rlci4gKi8KK2V4dGVybiBib29s IHBnYWlvX3dvcmtlcl9wbV90ZXN0X2dyb3dfc2lnbmFsX3NlbnQodm9pZCk7CitleHRlcm4gdm9p ZCBwZ2Fpb193b3JrZXJfcG1fY2xlYXJfZ3Jvd19zaWduYWxfc2VudCh2b2lkKTsKK2V4dGVybiBi b29sIHBnYWlvX3dvcmtlcl9wbV90ZXN0X2dyb3codm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBJ T19XT1JLRVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0 LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAppbmRleCBhZjg1NTNiY2I2Yy4u ZDdlYjY0OGJkMjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCkBAIC04OCw2ICs4OCw3IEBA IFBHX0xXTE9DSyg1MywgQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlKQogUEdfTFdMT0NLKDU0LCBX YWl0TFNOKQogUEdfTFdMT0NLKDU1LCBMb2dpY2FsRGVjb2RpbmdDb250cm9sKQogUEdfTFdMT0NL KDU2LCBEYXRhQ2hlY2tzdW1zV29ya2VyKQorUEdfTFdMT0NLKDU3LCBBaW9Xb3JrZXJDb250cm9s KQogCiAvKgogICogVGhlcmUgYWxzbyBleGlzdCBzZXZlcmFsIGJ1aWx0LWluIExXTG9jayB0cmFu Y2hlcy4gIEFzIHdpdGggdGhlIHByZWRlZmluZWQKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcG1zaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaAppbmRleCAw MDFlNmVlYTYxYy4uYmNjZTQwMTE3OTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cG1zaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgKQEAgLTM4LDYg KzM4LDcgQEAgdHlwZWRlZiBlbnVtCiAJUE1TSUdOQUxfUk9UQVRFX0xPR0ZJTEUsCS8qIHNlbmQg U0lHVVNSMSB0byBzeXNsb2dnZXIgdG8gcm90YXRlIGxvZ2ZpbGUgKi8KIAlQTVNJR05BTF9TVEFS VF9BVVRPVkFDX0xBVU5DSEVSLAkvKiBzdGFydCBhbiBhdXRvdmFjdXVtIGxhdW5jaGVyICovCiAJ UE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19XT1JLRVIsCS8qIHN0YXJ0IGFuIGF1dG92YWN1dW0gd29y a2VyICovCisJUE1TSUdOQUxfSU9fV09SS0VSX0dST1csCS8qIEkvTyB3b3JrZXIgcG9vbCB3YW50 cyB0byBncm93ICovCiAJUE1TSUdOQUxfQkFDS0dST1VORF9XT1JLRVJfQ0hBTkdFLAkvKiBiYWNr Z3JvdW5kIHdvcmtlciBzdGF0ZSBjaGFuZ2UgKi8KIAlQTVNJR05BTF9TVEFSVF9XQUxSRUNFSVZF UiwgLyogc3RhcnQgYSB3YWxyZWNlaXZlciAqLwogCVBNU0lHTkFMX0FEVkFOQ0VfU1RBVEVfTUFD SElORSwgLyogYWR2YW5jZSBwb3N0bWFzdGVyJ3Mgc3RhdGUgbWFjaGluZSAqLwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMl9pb193b3JrZXJzLnBsIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMl9pb193b3JrZXJzLnBsCmluZGV4IDM0YmMxMzJlYTA4 Li5iOTc3NTgxMWQ0ZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAw Ml9pb193b3JrZXJzLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDJfaW9f d29ya2Vycy5wbApAQCAtMTQsNiArMTQsOSBAQCAkbm9kZS0+aW5pdCgpOwogJG5vZGUtPmFwcGVu ZF9jb25mKAogCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKIGlvX21ldGhvZD13b3JrZXIKK2lvX3dv cmtlcl9pZGxlX3RpbWVvdXQ9MG1zCitpb193b3JrZXJfbGF1bmNoX2ludGVydmFsPTBtcworaW9f bWF4X3dvcmtlcnM9MzIKICkpOwogCiAkbm9kZS0+c3RhcnQoKTsKQEAgLTMxLDcgKzM0LDcgQEAg c3ViIHRlc3RfbnVtYmVyX29mX2lvX3dvcmtlcnNfZHluYW1pYwogewogCW15ICRub2RlID0gc2hp ZnQ7CiAKLQlteSAkcHJldl93b3JrZXJfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICdTSE9XIGlvX3dvcmtlcnMnKTsKKwlteSAkcHJldl93b3JrZXJfY291bnQgPSAkbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTSE9XIGlvX21pbl93b3JrZXJzJyk7CiAKIAkjIFZlcmlm eSB0aGF0IHdvcmtlciBjb3VudCBjYW4ndCBiZSBzZXQgdG8gMAogCWNoYW5nZV9udW1iZXJfb2Zf aW9fd29ya2Vycygkbm9kZSwgMCwgJHByZXZfd29ya2VyX2NvdW50LCAxKTsKQEAgLTYyLDI0ICs2 NSwyNCBAQCBzdWIgY2hhbmdlX251bWJlcl9vZl9pb193b3JrZXJzCiAJbXkgKCRyZXN1bHQsICRz dGRvdXQsICRzdGRlcnIpOwogCiAJKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0KLQkgICRu b2RlLT5wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBTWVNURU0gU0VUIGlvX3dvcmtlcnMgPSAkd29y a2VyX2NvdW50Iik7CisJICAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCAiQUxURVIgU1lTVEVNIFNF VCBpb19taW5fd29ya2VycyA9ICR3b3JrZXJfY291bnQiKTsKIAkkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICdTRUxFQ1QgcGdfcmVsb2FkX2NvbmYoKScpOwogCiAJaWYgKCRleHBlY3RfZmFp bHVyZSkKIAl7CiAJCWxpa2UoCiAJCQkkc3RkZXJyLAotCQkJcXIvJHdvcmtlcl9jb3VudCBpcyBv dXRzaWRlIHRoZSB2YWxpZCByYW5nZSBmb3IgcGFyYW1ldGVyICJpb193b3JrZXJzIi8sCi0JCQki dXBkYXRpbmcgbnVtYmVyIG9mIGlvX3dvcmtlcnMgdG8gJHdvcmtlcl9jb3VudCBmYWlsZWQsIGFz IGV4cGVjdGVkIgorCQkJcXIvJHdvcmtlcl9jb3VudCBpcyBvdXRzaWRlIHRoZSB2YWxpZCByYW5n ZSBmb3IgcGFyYW1ldGVyICJpb19taW5fd29ya2VycyIvLAorCQkJInVwZGF0aW5nIGlvX21pbl93 b3JrZXJzIHRvICR3b3JrZXJfY291bnQgZmFpbGVkLCBhcyBleHBlY3RlZCIKIAkJKTsKIAogCQly ZXR1cm4gJHByZXZfd29ya2VyX2NvdW50OwogCX0KIAllbHNlCiAJewotCQlpcyggJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnU0hPVyBpb193b3JrZXJzJyksCisJCWlzKCAkbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdTSE9XIGlvX21pbl93b3JrZXJzJyksCiAJCQkkd29ya2VyX2Nv dW50LAotCQkJInVwZGF0aW5nIG51bWJlciBvZiBpb193b3JrZXJzIGZyb20gJHByZXZfd29ya2Vy X2NvdW50IHRvICR3b3JrZXJfY291bnQiCisJCQkidXBkYXRpbmcgbnVtYmVyIG9mIGlvX21pbl93 b3JrZXJzIGZyb20gJHByZXZfd29ya2VyX2NvdW50IHRvICR3b3JrZXJfY291bnQiCiAJCSk7CiAK IAkJY2hlY2tfaW9fd29ya2VyX2NvdW50KCRub2RlLCAkd29ya2VyX2NvdW50KTsKZGlmZiAtLWdp dCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKaW5kZXggMmRmZTFiMzg4MjYuLjNkZWE1MTY5MTJjIDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMjI3MSw2ICsyMjcxLDcgQEAgUGdBaW9VcmluZ0NhcHMKIFBn QWlvVXJpbmdDb250ZXh0CiBQZ0Fpb1dhaXRSZWYKIFBnQWlvV29ya2VyQ29udHJvbAorUGdBaW9X b3JrZXJTZXQKIFBnQWlvV29ya2VyU2xvdAogUGdBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUKIFBn QXJjaERhdGEKLS0gCjIuNTMuMAoK --00000000000084a917064ee9ee10--