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 1w2YMu-000OPa-1E for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 17:38:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2YMt-003g1H-0a for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 17:38:11 +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 1w2YMr-003g16-2f for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 17:38:10 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2YMl-00000000Dt8-48qu for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 17:38:08 +0000 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-439b6d9c981so85502f8f.1 for ; Tue, 17 Mar 2026 10:38:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773769084; cv=none; d=google.com; s=arc-20240605; b=AnD2QFXcNnj6AQ8nxsWb0q/A/+gBS4Bvioqcv+xXEw/F5gJR8yR6EOMhvsiyfjyVaa 1vsXd1V21jYl02hoX/+O0vF6bG4qge/VHuh0q1MoyZeBjsPN6RR1aSI/VjJ8tprOrKAT skeWrDkX77DMQayP3IXSxKw79E/J/FaYkqzV4FFc+/jWYzHDcKE5wfnKw/pG0v9+ZLUJ N9FQmZEKHWWhZrXZUTXf1siENg4zD5f45niPMc5Bq9Q+Mg1OB3dCch5sFtjWzGK1tv5Z /ECpMnmDeKlzgCLaX8Qeu3X56iQujNMbUCZtZIUH0Zis2P6Z8xW5hg/Zxp6+qayqEN1T qt6w== 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=7fCus0NltkUjsXAJtlAAv/b1Ol6Qi0KluDFi3PsY1oQ=; fh=CCht5mwArlt9mv28jU/PG26gm+OT7vFiBTylBZM4YeE=; b=ElHNBbTKnAVy2c8infD/UA8CvMmDZfdlqIyWgoQC8ZHCHaiDVIqFmTGhZdKVp69FOb OBrBr3wrvgiyAR7sPqnuNwQAN/R2ViKdkbD1RkioTtQ7R8mPbs7VqBem2n5yACOcWgQb S+mb4KP1qnZpQ+YDmoE7pQXkn9I5jdmTYk0XSh9rjAuuFMlC2GoPnnZc5OsdE8amnZiL +KaOwCDAddz4VQWe1A3OFOIWWUEFoe8Is4UZlEER4hQKdWmYDQautK526U/4SMbT/if5 iyrRYLxfmCOTEl/RTsHtJlUfLN43YIVOoH5DX2wKJnMrk7nhmr+hu5Pca+j37AIATXj8 5FLw==; 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=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1773769084; x=1774373884; 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=7fCus0NltkUjsXAJtlAAv/b1Ol6Qi0KluDFi3PsY1oQ=; b=mrB1JI03GSa7dhJQyC7ypUkLJ9RCouT/M3ZY0AeRN5WbV30boDiVEdOrIIUCR8IItH csjHw40VlfO6oMHs7hDyKVq//UetcascW+cS9wda/HeJEhlq5ppc+vMIT2hzpVwktepb WUuwmZaefAFphcbtjew4YjQkapf00ibY4hdYjpGZiopo4/bhdjNtpag6cF64N0UokpOb pcddtqTkycIh1bS71H/kpjkCKZa/3Q3fvcZlTl/3aTfdZ41qnvcawZXdUBzcSlkMCb76 uDC+Mx5NEI2IYB+zAMZnazYo44CyThKbHwyhLlfvX2lF9mnXhNhdkzwlFeXL30iOjKWi indg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773769084; x=1774373884; 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=7fCus0NltkUjsXAJtlAAv/b1Ol6Qi0KluDFi3PsY1oQ=; b=bwQ2BoxG+/SKqpfoUogA7s/XM6eOck9OWxKIgTTmkLA1ukfTL3jVqDK4+jBTANXe84 4pcoS5m3ODBRI8BeWZqQv3HQpYyuDqlwEZ4Q0esi3n+tCsvp5pQTFrxNzIRz3lALNWno jQ4Zr0Z82W/+qLCQUinX4h+mldu+1RypGhxn+OJBt3WMH3HnB1Kqc63HS0/UMf/prtV3 +BYhXnJQmgcZGOiKm/nIyBg7Hk0QrMJMGxRDFVL+/N2N9EVPX4a1xe66lp5Wf3TqPTSd 72mmcMbrC59GbEWPNj5SC72Yc0sy6NnpFMHcy/vcFLijivYEDB9t2JaBC9E/sk5WKdoJ 39lg== X-Forwarded-Encrypted: i=1; AJvYcCWqOUAj6NjCV6xapCpyJQJjEZig0Ccb1kAlmTjbrkNUQUiBSbLqfJm7z8qCFy7suTHuJQNnZzL6xFS1D2Xu@lists.postgresql.org X-Gm-Message-State: AOJu0YyFCtAe+/mpeJDXTX9tyW9GdaVjfQhVRoWdP2FRL3zqLc4yaH8E /YoYnyd4P9yXKGl/N+iRzAVbkLoNuurTh336nXFqPQl/4RmKrMuxX1wbrmAO3GyyLMZZOwMEpy9 1UgAQk4LCwC5VlNetI1yayq5nO+q3jEN6rayPugfUMA== X-Gm-Gg: ATEYQzwCbHlLYrzWHbHl1URqIT/aKV+U4VjMncWjW/FaaPAsA3nR+ZZsLoFiyoKoJB2 3IFPx/0alFcBPQsBlqJ6fQXKTGrvJb7a+U4N8QBq8c3WAAt40kWF5GD5HfianOIGFRHcF2mjxBA FfH/RznsG9QQtXRAOyPGvx6bf/ub5B1aIWqN+zSn2xErrDA5SDVvNouRbejsqXwsNsFHoWPTVMW 4FoBuKao1I9OfojXlgFpDCAEeA2cz7ErcyQCQ2ySGMibf9hquLz3wiJM3IHvRpbLYiWUgnWyA3i d2fTtEEXyfRm+zN6KQ== X-Received: by 2002:a05:6000:24c5:b0:43b:3c53:283d with SMTP id ffacd0b85a97d-43b498346eamr7891374f8f.21.1773769083196; Tue, 17 Mar 2026 10:38:03 -0700 (PDT) MIME-Version: 1.0 References: <52512325-b1f2-4fff-819e-f68122b2e427@vondra.me> <64mfcfv7iihc4pmqlxarii4esnmqry52ckz5m7lmwylnfnuxuz@oxh4ioxkjtep> In-Reply-To: From: Peter Geoghegan Date: Tue, 17 Mar 2026 13:37:34 -0400 X-Gm-Features: AaiRm51SktCMUgnlMcoed9EIQrSXhe9-nFgEdtnFFk4WZqLnTtYCF0qmOYShVd4 Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="0000000000001ea67c064d3bcca7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001ea67c064d3bcca7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Mar 13, 2026 at 8:50=E2=80=AFPM Peter Geoghegan wrote: > Several patches from this patchset have been committed to master. I'm > posting a new version (v14) here to keep the patch applying cleanly. v14 has already bitrot, so I'm posting this new v15 to keep the patchset applying cleanly. There is one new patch in v15: v15-0007-Add-UnlockBufferGetLSN-utility-function.patch. This adds a new utility function to bufmgr.c, which combines the functionality of BufferGetLSNAtomic with UnlockReleaseBuffer. This microoptimization is intended to avoid regressions against master with workloads like pgbench SELECT. With this, we're slightly faster than the master branch on these workloads. --=20 Peter Geoghegan --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0017-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v15-0017-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7exk1 RnJvbSAwZmVjOWExMmUzZTY2ZmRiMzZiNTMzODhmYjE2MGJjYWFmZjIxOWViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNSAxNy8xN10g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBp bmRleGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9m IGFsbCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2Uu ICBUaGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0 aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5z LgoKTm90ZSB0aGF0IGhhc2ggaW5kZXggc2NhbnMgd2lsbCBub3cgZHJvcCBpbmRleCBwYWdlIGJ1 ZmZlciBwaW5zIGVhZ2VybHkKKGFjdHVhbGx5LCB0aGUgdGFibGUgQU0gd2lsbCBkbyBzbyBvbiBi ZWhhbGYgb2YgdGhlIGhhc2ggaW5kZXggQU0pLgpUaGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCBm b3IgYW55IGluZGV4IEFNIHRoYXQgYWRvcHRzIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2Uu ICBHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNoZXMgd29uJ3QgaG9sZCBidWZmZXIKcGlucyBv biBpbmRleCBwYWdlcyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJp bmcgaW5kZXgKcHJlZmV0Y2hpbmcsIHdoZXJlIHRoZSByZWFkIHN0cmVhbSBpcyBleHBlY3RlZCB0 byBob2xkIG1hbnkgcGlucyBvbiBoZWFwCnBhZ2VzICh0aGF0J3Mgd2h5IGFtZ2V0YmF0Y2ggbWFr ZXMgdGhpcyBhIGhhcmQgcmVxdWlyZW1lbnQpLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBn QGJvd3QuaWU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGlz Y3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgxNjFwZUFXYjVlRj1K YTdDRkFRKzBqU0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvaGFzaC5oICAgICAgICAgICAgfCAgODUgKystLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvUkVBRE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aC5jICAgICAgIHwgMjExICsrKysrKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoX3hsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdl LmMgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIHwgMzM4 ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHV0aWwuYyAgIHwgMTI5ICstLS0tLS0tLS0KIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAg ICAgICAgICB8ICAyMSArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwg ICAzICstCiA5IGZpbGVzIGNoYW5nZWQsIDMzOCBpbnNlcnRpb25zKCspLCA1MDUgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li41ODc2OWVkYmQgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaApA QCAtMTAwLDU3ICsxMDAsMjUgQEAgdHlwZWRlZiBIYXNoUGFnZU9wYXF1ZURhdGEgKkhhc2hQYWdl T3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4RkY4MAogCi10eXBlZGVmIHN0 cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNo ICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBoYXNoIGluZGV4IEFNICovCit0 eXBlZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRhCiB7Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7 CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9m ZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2Fu UG9zSXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBpbmRleCBwYWdlIGJ1ZmZlciBwaW4gKFRJRCBy ZXVzZSBpbnRlcmxvY2spICovCisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBpbmRleCBwYWdl IHdpdGggbWF0Y2hpbmcgaXRlbXMgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQ YWdlJ3MgbGVmdCBsaW5rICovCisJQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdz IHJpZ2h0IGxpbmsgKi8KK30gSGFzaEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1Y3QgSGFzaFNj YW5Qb3NEYXRhCisvKgorICogQWNjZXNzIHRoZSBoYXNoLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEg ZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVyLgorICogVGhpcyBmb2xsb3dzIHRoZSBzdGFu ZGFyZCBjb252ZW50aW9uIGZvciBpbmRleCBBTSBvcGFxdWUgc3RhdGU6IGl0IGNhbiBiZQorICog Zm91bmQgYXQgYSBmaXhlZCBuZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgSW5kZXhTY2FuQmF0Y2gg cG9pbnRlci4KKyAqLworc3RhdGljIGlubGluZSBIYXNoQmF0Y2hEYXRhICoKK0hhc2hCYXRjaEdl dERhdGEoSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7Ci0JQnVmZmVyCQlidWY7CQkJLyogaWYgdmFs aWQsIHRoZSBidWZmZXIgaXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBj dXJyZW50IGhhc2ggaW5kZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogbmV4 dCBvdmVyZmxvdyBwYWdlICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBwcmV2IG92ZXJm bG93IG9yIGJ1Y2tldCBwYWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdh eXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNl dCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhl Ci0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBh bmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQt ZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBh IGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4K LQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1td ICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8K LQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUhh c2hTY2FuUG9zSXRlbSBpdGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBNVVNUIEJFIExB U1QgKi8KLX0gSGFzaFNjYW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNQaW5uZWQo c2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9z KS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAot CUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9z SXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQo KHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1 ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQotCi0j ZGVmaW5lIEhhc2hTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2Fu cG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFs aWRCbG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7IFwKLQkJKHNjYW5wb3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShz Y2FucG9zKS5maXJzdEl0ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9IDA7IFwKLQkJ KHNjYW5wb3MpLml0ZW1JbmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQorCXJldHVybiAoSGFzaEJh dGNoRGF0YSAqKSAoKGNoYXIgKikgYmF0Y2ggLSBNQVhBTElHTihzaXplb2YoSGFzaEJhdGNoRGF0 YSkpKTsKK30KIAogLyoKICAqCUhhc2hTY2FuT3BhcXVlRGF0YSBpcyBwcml2YXRlIHN0YXRlIGZv ciBhIGhhc2ggaW5kZXggc2Nhbi4KQEAgLTE3OCwxNSArMTQ2LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg SGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9w dWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZv IGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIg dXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVz IG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJy ZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hp bmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEK LQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3VyclBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRh ICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEg Kkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDExICszMjcsMTUgQEAgZXh0ZXJuIGJvb2wgaGFzaGlu c2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAg SW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdl ZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhh c2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVy biBJbmRleFNjYW5CYXRjaCBoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJ CQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9u IGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJ REJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRp b24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJ CQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNo a2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7 CitleHRlcm4gdm9pZCBoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhhc2hidWxrZGVsZXRlKEluZGV4 VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3Rh dHMsCkBAIC00NDUsOCArNDA4LDkgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfZmluaXNoX3NwbGl0KFJl bGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLAogCQkJCQkJCSAgIHVpbnQz MiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRlcm4gYm9vbCBfaGFzaF9uZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2hh c2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4g SW5kZXhTY2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7CitleHRlcm4gSW5k ZXhTY2FuQmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhTcG9vbCBIU3Bvb2w7 CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAtNDc2LDcgKzQ0MCw2IEBAIGV4 dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJvbV9uZXdidWNrZXQoUmVsYXRp b24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hfZ2V0X25ld2Js b2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQpOwogZXh0 ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJl bCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWludDMyIGxvd21hc2ssIHVpbnQz MiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNj IHNjYW4pOwogCiAvKiBoYXNoLmMgKi8KIGV4dGVybiB2b2lkIGhhc2hidWNrZXRjbGVhbnVwKFJl bGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKaW5kZXgg ZmM5MDMxMTE3Li45NzJiYjY2NmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKQEAgLTI1NSwyOCAr MjU1LDI5IEBAIFRoZSByZWFkZXIgYWxnb3JpdGhtIGlzOgogCQlyZXRha2UgdGhlIGJ1ZmZlciBj b250ZW50IGxvY2sgb24gbmV3IGJ1Y2tldAogCQlhcnJhbmdlIHRvIHNjYW4gdGhlIG9sZCBidWNr ZXQgbm9ybWFsbHkgYW5kIHRoZSBuZXcgYnVja2V0IGZvcgogICAgICAgICAgdHVwbGVzIHdoaWNo IGFyZSBub3QgbW92ZWQtYnktc3BsaXQKLS0tIHRoZW4sIHBlciByZWFkIHJlcXVlc3Q6CistLSB0 aGVuLCBwZXIgYmF0Y2ggKHBhZ2UpIHJlcXVlc3Q6CiAJcmVhY3F1aXJlIGNvbnRlbnQgbG9jayBv biBjdXJyZW50IHBhZ2UKIAlzdGVwIHRvIG5leHQgcGFnZSBpZiBuZWNlc3NhcnkgKG5vIGNoYWlu aW5nIG9mIGNvbnRlbnQgbG9ja3MsIGJ1dCBrZWVwCiAJdGhlIHBpbiBvbiB0aGUgcHJpbWFyeSBi dWNrZXQgdGhyb3VnaG91dCB0aGUgc2NhbikKLQlzYXZlIGFsbCB0aGUgbWF0Y2hpbmcgdHVwbGVz IGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYW4gaXRlbXMgYXJyYXkKLQlyZWxlYXNlIHBp biBhbmQgY29udGVudCBsb2NrIChidXQgaWYgaXQgaXMgcHJpbWFyeSBidWNrZXQgcGFnZSByZXRh aW4KLQlpdHMgcGluIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2NhbikKLQlnZXQgdHVwbGUgZnJvbSBh biBpdGVtIGFycmF5CisJc2F2ZSBhbGwgdGhlIG1hdGNoaW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQg aW5kZXggcGFnZSBpbnRvIGEgYmF0Y2gKKwlyZWxlYXNlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50 IHBhZ2UgcmV0dXJuIGJhdGNoIHRvIHRhYmxlIEFNICh0YWJsZSBBTQorCXdpbGwgZHJvcCBiYXRj aCdzIGJ1ZmZlciBwaW4sIHRob3VnaCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBpbiBpcyBrZXB0CisJ dW50aWwgdGhlIGVuZCBvZiB0aGUgc2NhbikKIC0tIGF0IHNjYW4gc2h1dGRvd246Ci0JcmVsZWFz ZSBhbGwgcGlucyBzdGlsbCBoZWxkCisJcmVsZWFzZSBzY2FuLW93bmVkIHBpbnMgKGUuZy4sIHBy aW1hcnkgYnVja2V0IHBhZ2UgcGluKSBhcyBuZWVkZWQKIAogSG9sZGluZyB0aGUgYnVmZmVyIHBp biBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBmb3IgdGhlIHdob2xlIHNjYW4gcHJldmVudHMK LXRoZSByZWFkZXIncyBjdXJyZW50LXR1cGxlIHBvaW50ZXIgZnJvbSBiZWluZyBpbnZhbGlkYXRl ZCBieSBzcGxpdHMgb3IKLWNvbXBhY3Rpb25zLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBj YW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKK3RoZSBidWNrZXQgZnJvbSBiZWluZyBy ZW9yZ2FuaXplZCBieSBzcGxpdHMgb3IgY29tcGFjdGlvbnMgd2hpbGUgdGhlIHNjYW4gaXMKK2lu IHByb2dyZXNzLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQg b3IgY29tcGFjdGVkLikKIAotVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBp bmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyB0aGUgZW50aXJlCi1oYXNoIHBhZ2UgdG8gaWRlbnRp ZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNlLCBjb3B5aW5nIHRoZWlyIGhlYXAgdHVw bGUKLUlEcyBpbnRvIGJhY2tlbmQtbG9jYWwgc3RvcmFnZS4gVGhlIGhlYXAgdHVwbGUgSURzIGFy ZSB0aGVuIHByb2Nlc3NlZCB3aGlsZSBub3QKLWhvbGRpbmcgYW55IHBhZ2UgbG9jayB3aXRoaW4g dGhlIGluZGV4IHRoZXJlYnksIGFsbG93aW5nIGNvbmN1cnJlbnQgaW5zZXJ0aW9uCi10byBoYXBw ZW4gb24gdGhlIHNhbWUgaW5kZXggcGFnZSB3aXRob3V0IGFueSByZXF1aXJlbWVudCBvZiByZS1m aW5kaW5nIHRoZQotY3VycmVudCBzY2FuIHBvc2l0aW9uIGZvciB0aGUgcmVhZGVyLiBXZSBkbyBj b250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZQotYnVja2V0IHBhZ2UsIHRvIHByb3RlY3QgYWdh aW5zdCBjb25jdXJyZW50IGRlbGV0aW9ucyBhbmQgYnVja2V0IHNwbGl0LgorVG8gbWluaW1pemUg bG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FucyBhbHdheXMgc2VhcmNoIHRoZSBl bnRpcmUKK2hhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9u Y2UsIHJldHVybmluZyB0aGVtIGluCitiYXRjaGVzIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJs ZSBBTSBwcm9jZXNzZXMgYmF0Y2hlcyB3aGlsZSBubyBwYWdlIGxvY2sKK2lzIGhlbGQgd2l0aGlu IHRoZSBpbmRleCwgYWxsb3dpbmcgY29uY3VycmVudCBpbnNlcnRpb24gdG8gaGFwcGVuIG9uIHRo ZQorc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55IHJlcXVpcmVtZW50IG9mIHJlLWZpbmRpbmcg dGhlIGN1cnJlbnQgc2NhbgorcG9zaXRpb24gZm9yIHRoZSByZWFkZXIuICBUaGUgdGFibGUgQU0g Y29udHJvbHMgd2hlbiBiYXRjaCBidWZmZXIgcGlucyBhcmUKK2Ryb3BwZWQuICBXZSBkbyBjb250 aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCB0bworcHJvdGVj dCBhZ2FpbnN0IGNvbmN1cnJlbnQgYnVja2V0IHNwbGl0cy4KIAogVG8gYWxsb3cgZm9yIHNjYW5z IGR1cmluZyBhIGJ1Y2tldCBzcGxpdCwgaWYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzY2FuLCB0aGUK IGJ1Y2tldCBpcyBtYXJrZWQgYXMgYnVja2V0LWJlaW5nLXBvcHVsYXRlZCwgaXQgc2NhbiBhbGwg dGhlIHR1cGxlcyBpbiB0aGF0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggMmUzMmJlMjMzLi4y NGVjZjU1MTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTExMywxMCArMTEzLDEwIEBAIGhh c2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFkanVzdG1lbWJlcnMgPSBoYXNoYWRq dXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVzY2Fu ID0gaGFzaHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCi0JCS5hbWdldGJh dGNoID0gTlVMTCwKLQkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAotCQkuYW11bmd1YXJkYmF0 Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gaGFzaGdl dGJhdGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwKKwkJLmFt dW5ndWFyZGJhdGNoID0gaGFzaHVuZ3VhcmRiYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gaGFzaGdl dGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9IE5V TEwsCkBAIC0yOTksNTMgKzI5OSwyOCBAQCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0g KnZhbHVlcywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0gKgloYXNoZ2V0dHVwbGUoKSAtLSBHZXQg dGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKgloYXNoZ2V0YmF0Y2goKSAtLSBHZXQgdGhl IGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJvb2wKLWhh c2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhT Y2FuQmF0Y2gKK2hhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUhhc2hTY2FuT3BhcXVlIHNvID0g KEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOwogCiAJLyogSGFzaCBp bmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ugc3RvcmUgb25seSB0aGUgaGFzaCBjb2Rl ICovCiAJc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CiAKLQkvKgotCSAqIElmIHdlJ3ZlIGFscmVh ZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluIHRoZQot CSAqIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdl IGNhbGwgYSByb3V0aW5lIHRvCi0JICogZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgot CSAqLwotCWlmICghSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJcmVzID0gX2hh c2hfZmlyc3Qoc2NhbiwgZGlyKTsKLQllbHNlCisJaWYgKHByaW9yYmF0Y2ggPT0gTlVMTCkKIAl7 Ci0JCS8qCi0JCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNs eS1mZXRjaGVkIHR1cGxlLgotCQkgKi8KLQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0J CXsKLQkJCS8qCi0JCQkgKiBZZXMsIHNvIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRl YWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMKLQkJCSAqIGF0IG9uY2UgcmlnaHQgYWZ0ZXIgbGVhdmlu ZyB0aGUgaW5kZXggcGFnZSBvciBhdCBlbmQgb2Ygc2Nhbi4pCi0JCQkgKiBJbiBjYXNlIGlmIGNh bGxlciByZXZlcnNlcyB0aGUgaW5kZXhzY2FuIGRpcmVjdGlvbiBpdCBpcyBxdWl0ZQotCQkJICog cG9zc2libGUgdGhhdCB0aGUgc2FtZSBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRp bWVzLgotCQkJICogQnV0LCB3ZSBkb24ndCBkZXRlY3QgdGhhdDsgaW5zdGVhZCwgd2UganVzdCBm b3JnZXQgYW55IGV4Y2VzcwotCQkJICogZW50cmllcy4KLQkJCSAqLwotCQkJaWYgKHNvLT5raWxs ZWRJdGVtcyA9PSBOVUxMKQotCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQs IE1heEluZGV4VHVwbGVzUGVyUGFnZSk7CisJCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVs YXRpb247CiAKLQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKQot CQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUlu ZGV4OwotCQl9CisJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JCS8qCi0JCSAqIE5v dyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJICovCi0JCXJlcyA9IF9oYXNoX25leHQoc2NhbiwgZGly KTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiwgYW5kIHJldHVybiBmaXJzdCBiYXRjaCBvZiBt YXRjaGluZyBpdGVtcyAqLworCQlyZXR1cm4gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKIAl9CiAK LQlyZXR1cm4gcmVzOworCS8qIFJldHVybiBiYXRjaCBwb3NpdGlvbmVkIGFmdGVyIGNhbGxlcidz IGJhdGNoIChpbiBkaXJlY3Rpb24gJ2RpcicpICovCisJcmV0dXJuIF9oYXNoX25leHQoc2Nhbiwg ZGlyLCBwcmlvcmJhdGNoKTsKIH0KIAogCkBAIC0zNTUsMjYgKzMzMCwyNiBAQCBoYXNoZ2V0dHVw bGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIGludDY0CiBoYXNoZ2V0 Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7Ci0JSGFzaFNjYW5P cGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7CisJ SW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50aWRzID0gMDsKLQlIYXNoU2NhblBvc0l0 ZW0gKmN1cnJJdGVtOwogCi0JcmVzID0gX2hhc2hfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24pOworCWJhdGNoID0gX2hhc2hfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24p OwogCi0Jd2hpbGUgKHJlcykKKwl3aGlsZSAoYmF0Y2ggIT0gTlVMTCkKIAl7Ci0JCWN1cnJJdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07CisJCWZvciAoaW50 IGl0ZW1JbmRleCA9IGJhdGNoLT5maXJzdEl0ZW07CisJCQkgaXRlbUluZGV4IDw9IGJhdGNoLT5s YXN0SXRlbTsKKwkJCSBpdGVtSW5kZXgrKykKKwkJeworCQkJdGJtX2FkZF90dXBsZXModGJtLCAm YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQsIDEsIHRydWUpOworCQkJbnRpZHMrKzsK KwkJfQogCiAJCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFuZCBfaGFzaF9uZXh0IGhhbmRsZSBlbGlt aW5hdGUgZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdoZW5ldmVyIHNjYW4tPmlnbm9yZV9raWxs ZWRfdHVwbGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRoZXJlJ3MKLQkJICogbm90aGluZyB0byBk byBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8gdGhlIFRJREJpdG1hcC4KKwkJICogX2hh c2hfbmV4dCByZWxlYXNlcyB0aGUgcHJpb3IgYmF0Y2ggZm9yIGJpdG1hcCBjYWxsZXJzIGJlZm9y ZQorCQkgKiBhbGxvY2F0aW5nIHRoZSBuZXh0IG9uZSwgc28gb25seSBvbmUgYmF0Y2ggaXMgZXZl ciB1c2VkIGF0IGEgdGltZQogCQkgKi8KLQkJdGJtX2FkZF90dXBsZXModGJtLCAmKGN1cnJJdGVt LT5oZWFwVGlkKSwgMSwgdHJ1ZSk7Ci0JCW50aWRzKys7Ci0KLQkJcmVzID0gX2hhc2hfbmV4dChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJCWJhdGNoID0gX2hhc2hfbmV4dChzY2FuLCBG b3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOwogCX0KIAogCXJldHVybiBudGlkczsKQEAgLTM5 NiwxNyArMzcxLDE2IEBAIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAJc2NhbiA9IFJlbGF0aW9uR2V0SW5kZXhTY2FuKHJlbCwgbmtleXMsIG5v cmRlcmJ5cyk7CiAKIAlzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgcGFsbG9jX29iamVjdChIYXNoU2Nh bk9wYXF1ZURhdGEpOwotCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7CiAJc28t Pmhhc2hzb19idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAlzby0+aGFzaHNvX3NwbGl0X2J1 Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0g ZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIAotCXNvLT5raWxsZWRJdGVt cyA9IE5VTEw7Ci0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlz Y2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlOworCXNjYW4tPmJhdGNo X2luZGV4X29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6ZW9mKEhhc2hCYXRjaERhdGEpKTsKKwlz Y2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsKIAogCXJldHVybiBzY2FuOwogfQpAQCAt NDIxLDE4ICszOTUsOCBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBz Y2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsK IAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3Jl IGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCX0KLQog CV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JLyogc2V0IHBvc2l0aW9uIGludmFsaWQg KHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxsKSAqLwotCUhhc2hTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUgc2NhbiBrZXksIGlmIGEgbmV3IG9uZSBp cyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCW1l bWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2Yo U2NhbktleURhdGEpKTsKQEAgLTQ0MSw2ICs0MDUsMTEyIEBAIGhhc2hyZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJc28tPmhhc2hzb19i dWNfc3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhhc2hraWxsaXRlbXNiYXRjaCgpIC0tIE1h cmsgZGVhZCBpdGVtcycgaW5kZXggdHVwbGVzIExQX0RFQUQKKyAqLwordm9pZAoraGFzaGtpbGxp dGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKKwlIYXNoQmF0Y2hEYXRhICpoYXNo YmF0Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKGJhdGNoKTsKKwlCdWZmZXIJCWJ1ZjsKKwlQYWdlCQlw YWdlOworCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKKwlPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJ CW1heG9mZjsKKwlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKKwlYTG9nUmVjUHRyCWxh dGVzdGxzbjsKKworCUFzc2VydChiYXRjaC0+bnVtRGVhZCA+IDApOworCisJYnVmID0gX2hhc2hf Z2V0YnVmKHJlbCwgaGFzaGJhdGNoLT5jdXJyUGFnZSwgSEFTSF9SRUFELAorCQkJCQkgICBMSF9C VUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOworCisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0 TFNOQXRvbWljKGJ1Zik7CisJQXNzZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAo YmF0Y2gtPmxzbiAhPSBsYXRlc3Rsc24pCisJeworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBo aW50aW5nICovCisJCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlw YWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBh Z2UpOworCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisKKwkvKiBJdGVy YXRlIHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGluIGluZGV4IHBhZ2Ugb3JkZXIgKi8KKwlm b3IgKGludCBpID0gMDsgaSA8IGJhdGNoLT5udW1EZWFkOyBpKyspCisJeworCQlpbnQJCQlpdGVt SW5kZXggPSBiYXRjaC0+ZGVhZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0 ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CisKKwkJb2ZmbnVtID0gY3Vyckl0ZW0tPmlu ZGV4T2Zmc2V0OworCisJCUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJgor CQkJICAgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwkJd2hpbGUgKG9mZm51bSA8 PSBtYXhvZmYpCisJCXsKKwkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZu dW0pOworCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFn ZSwgaWlkKTsKKworCQkJaWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAmY3Vy ckl0ZW0tPnRhYmxlVGlkKSkKKwkJCXsKKwkJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKKwkJCQl7 CisJCQkJCS8qCisJCQkJCSAqIFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hl Y2sgaWYgd2UgY2FuCisJCQkJCSAqIHVwZGF0ZSB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcg YSBzaGFyZSBsb2NrLiBJZiB3ZQorCQkJCQkgKiBhcmUgbm90IGFsbG93ZWQsIHRoZXJlJ3Mgbm8g cG9pbnQgY29udGludWluZy4KKwkJCQkJICovCisJCQkJCWlmICghQnVmZmVyQmVnaW5TZXRIaW50 Qml0cyhidWYpKQorCQkJCQkJZ290byB1bmxvY2tfcGFnZTsKKwkJCQl9CisKKwkJCQkvKiBmb3Vu ZCB0aGUgaXRlbSAqLworCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29tZXRo aW5nID0gdHJ1ZTsKKwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8K KwkJCX0KKwkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0KKwor CS8qCisJICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBh cyBkaXJ0eSBoaW50LiBXaGVuZXZlcgorCSAqIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2Ug YWxzbyBzZXQgdGhlIHBhZ2UncworCSAqIExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIGZsYWcsIHdo aWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LgorCSAqLworCWlmIChraWxsZWRzb21ldGhpbmcp CisJeworCQlvcGFxdWUtPmhhc2hvX2ZsYWcgfD0gTEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CisJ CUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7CisJfQorCit1bmxvY2tf cGFnZToKKwlfaGFzaF9yZWxidWYocmVsLCBidWYpOworfQorCisvKgorICoJaGFzaHVuZ3VhcmRi YXRjaCgpIC0tIERyb3AgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoYnVmZmVyIHBp bikKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3Ag dGhlIGJ1ZmZlciBwaW4gaGVsZCB0bworICogcHJldmVudCBjb25jdXJyZW50IFRJRCByZWN5Y2xp bmcgYnkgVkFDVVVNLgorICovCit2b2lkCitoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNo ID0gSGFzaEJhdGNoR2V0RGF0YShiYXRjaCk7CisKKwkvKiBjaGVjayBpZiB0aGUgcGluIGhhcyBh bHJlYWR5IGJlZW4gcmVsZWFzZWQgKG11c3QgYmUgaWRlbXBvdGVudCkgKi8KKwlpZiAoQnVmZmVy SXNWYWxpZChoYXNoYmF0Y2gtPmJ1ZikpCisJeworCQlSZWxlYXNlQnVmZmVyKGhhc2hiYXRjaC0+ YnVmKTsKKwkJaGFzaGJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCX0KK30KKwogLyoKICAq CWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDUwLDE3ICs1MjAs OCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJSGFzaFNjYW5PcGFxdWUgc28g PSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5p bmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J ewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVk IGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9oYXNoX2tpbGxfaXRlbXMo c2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQlpZiAoc28tPmtp bGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVtcyk7CiAJcGZyZWUoc28p OwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5j CmluZGV4IDIwNjA2MjBjNy4uZTI2ZWU4YmI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hs b2cuYwpAQCAtMTE0MSwxNCArMTE0MSwxNCBAQCBoYXNoX21hc2soY2hhciAqcGFnZWRhdGEsIEJs b2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBoYXNoIGJ1Y2tldCBhbmQgb3ZlcmZsb3cg cGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUKIAkJICogTFBfRkxBR1Mgd2l0aG91 dCBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sgdGhlIGxpbmUKLQkJICogcG9p bnRlciBmbGFncy4gU2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRl dGFpbHMuCisJCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoa2lsbGl0ZW1zYmF0Y2goKSBmb3Ig ZGV0YWlscy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7CiAJfQogCiAJLyoKIAkgKiBJ dCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBoaW50IGJpdCBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBt YXkgcmVtYWluCi0JICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0LiBTZWUgX2hhc2hfa2lsbF9pdGVt cygpIGZvciBkZXRhaWxzLgorCSAqIHVubG9nZ2VkLiBTbywgbWFzayBpdC4gU2VlIGhhc2hraWxs aXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCSAqLwogCW9wYXF1ZS0+aGFzaG9fZmxhZyAmPSB+ TEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwpp bmRleCAyNjNiYzczZjEuLjVhZGQ3MDE5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5j CkBAIC0yODAsMzEgKzI4MCwyNCBAQCBfaGFzaF9kcm9wYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVy IGJ1ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJz IHVzZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJz IG93bmVkIGJ5IHNjYW4uCiAgKgotICogVGhpcyByb3V0aW5lIHVucGlucyB0aGUgYnVmZmVycyB1 c2VkIGR1cmluZyBzY2FuIG9uIHdoaWNoIHdlCi0gKiBob2xkIG5vIGxvY2suCisgKiBUaGlzIHJv dXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIGZvciB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQg Zm9yIHRoZQorICogYnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQgYmVpbmcgc3BsaXQgYXMgbmVlZGVk LgogICovCiB2b2lkCiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlvbiByZWwsIEhhc2hTY2FuT3Bh cXVlIHNvKQogewotCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24gcHJpbWFyeSBidWNrZXQgcGFn ZSAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikgJiYKLQkJc28t Pmhhc2hzb19idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBo ZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgKi8KKwlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFz aHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwgc28tPmhhc2hzb19idWNrZXRf YnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogcmVs ZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICBvZiBidWNrZXQgYmVpbmcg c3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYp ICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiAhPSBzby0+Y3VyclBvcy5idWYpCisJ LyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlIG9mIGJ1Y2tldCBiZWlu ZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1 ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpOwog CXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxl YXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5jdXJy UG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5j dXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0KIAkvKiByZXNldCBzcGxpdCBzY2FuICovCiAJ c28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQg PSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2gu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwppbmRleCA4OWQxYzViYzYu LjczYmFiZThjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJj aC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwpAQCAtMjIsMTA1 ICsyMiw4NyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAKLXN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgQnVmZmVyICpidWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIGJv b2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGly ZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIHN0YXRpYyBpbnQJ X2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2Us Ci0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1z dGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBp dGVtSW5kZXgsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9u IGRpciwKKwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUg dm9pZCBfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwK IAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGlj IHZvaWQgX2hhc2hfcmVhZG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJ CQkJCQkgICBQYWdlICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJ X2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25l eHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlP biBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1h eQotICoJCWJlIHBpbm5lZCBidXQgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRl eCBpZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRlbSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAq CQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3 aXRoIGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBl eGl0LCBzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJ aGVhcCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1 Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMg ZnJvbQorICoJCW5leHQgcGFnZS4gIE90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcg dGhhdCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZl ciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUg dHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFn ZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlS ZXRhaW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0Lgog ICovCi1ib29sCi1faGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCitJbmRleFNjYW5CYXRjaAorX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUhhc2hC YXRjaERhdGEgKmhhc2hwcmlvcmJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShwcmlvcmJhdGNoKTsK IAlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJCWJ1ZjsKLQlib29sCQllbmRfb2Zfc2NhbiA9 IGZhbHNlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCiAJLyoKLQkgKiBBZHZhbmNlIHRvIHRo ZSBuZXh0IHR1cGxlIG9uIHRoZSBjdXJyZW50IHBhZ2U7IG9yIGlmIGRvbmUsIHRyeSB0byByZWFk Ci0JICogZGF0YSBmcm9tIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UgYmFzZWQgb24gdGhlIHNj YW4gZGlyZWN0aW9uLiBCZWZvcmUKLQkgKiBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMg cGFnZSBtYWtlIHN1cmUgdGhhdCB3ZSBkZWFsIHdpdGggYWxsIHRoZQotCSAqIGtpbGxlZCBpdGVt cy4KKwkgKiBEZXRlcm1pbmUgd2hpY2ggcGFnZSB0byByZWFkIG5leHQgYmFzZWQgb24gc2NhbiBk aXJlY3Rpb24gYW5kIGRldGFpbHMKKwkgKiB0YWtlbiBmcm9tIHRoZSBwcmlvciBiYXRjaAogCSAq LwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JewotCQlpZiAoKytzby0+Y3Vy clBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKHNvLT5u dW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7CisJCWJsa25vID0gaGFz aHByaW9yYmF0Y2gtPm5leHRQYWdlOworCWVsc2UKKwkJYmxrbm8gPSBoYXNocHJpb3JiYXRjaC0+ cHJldlBhZ2U7CiAKLQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7Ci0JCQlpZiAoQmxv Y2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYocmVs LCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQkJCQlpZiAoIV9oYXNoX3Jl YWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0K LQkJCWVsc2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCX0KLQl9CisJLyoKKwkgKiBGb3Ig Yml0bWFwIHNjYW4gY2FsbGVycywgcmVsZWFzZSB0aGUgcHJpb3IgYmF0Y2ggbm93IHNvIHRoYXQg dGhlCisJICogYWxsb2NhdGlvbiBiZWxvdyBjYW4gcmV1c2UgaXRzIG1lbW9yeS4gIFRoaXMgd2F5 IGJpdG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQgbW9yZSB0aGFuIG9uZSBiYXRjaCBhbGxvY2F0 aW9uLgorCSAqLworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRleGFtX3V0aWxfYmF0 Y2hfcmVsZWFzZShzY2FuLCBwcmlvcmJhdGNoKTsKKworCWlmICghQmxvY2tOdW1iZXJJc1ZhbGlk KGJsa25vKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgbmV4dCBi YXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOworCisJLyog R2V0IHRoZSBidWZmZXIgZm9yIG5leHQgYmF0Y2ggKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQorCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELCBM SF9PVkVSRkxPV19QQUdFKTsKIAllbHNlCiAJewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5k ZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmIChzby0+bnVtS2lsbGVkID4g MCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOworCQlidWYgPSBfaGFzaF9nZXRidWYocmVs LCBibGtubywgSEFTSF9SRUFELAorCQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxP V19QQUdFKTsKIAotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsKLQkJCWlmIChCbG9j a051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWws IGJsa25vLCBIQVNIX1JFQUQsCi0JCQkJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZM T1dfUEFHRSk7Ci0KLQkJCQkvKgotCQkJCSAqIFdlIGFsd2F5cyBtYWludGFpbiB0aGUgcGluIG9u IGJ1Y2tldCBwYWdlIGZvciB3aG9sZSBzY2FuCi0JCQkJICogb3BlcmF0aW9uLCBzbyByZWxlYXNp bmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQKLQkJCQkgKiBoZXJlLgotCQkJ CSAqLwotCQkJCWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJCWJ1ZiA9 PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJCV9oYXNoX2Ryb3BidWYocmVsLCBi dWYpOwotCi0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQkJCQll bmRfb2Zfc2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4gPSB0cnVl OwotCQl9CisJCS8qCisJCSAqIFdlIGFsd2F5cyBtYWludGFpbiB0aGUgcGluIG9uIGJ1Y2tldCBw YWdlIGZvciB3aG9sZSBzY2FuIG9wZXJhdGlvbiwKKwkJICogc28gcmVsZWFzaW5nIHRoZSBhZGRp dGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkIGhlcmUuCisJCSAqLworCQlpZiAoYnVmID09IHNv LT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0 X2J1ZikKKwkJCV9oYXNoX2Ryb3BidWYocmVsLCBidWYpOwogCX0KIAotCWlmIChlbmRfb2Zfc2Nh bikKKwkvKiBSZWFkIHRoZSBuZXh0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQg YmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sIGJ1ZiwgZGlyLCBiYXRjaCkpCiAJ ewotCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKLQkJSGFzaFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5jdXJyUG9zKTsKLQkJcmV0dXJuIGZhbHNlOworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShzY2FuLCBiYXRjaCk7CisJCXJldHVybiBOVUxMOwogCX0KIAotCS8qIE9LLCBpdGVtSW5k ZXggc2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1z W3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5o ZWFwVGlkOwotCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5n IG1hdGNoZWQgaXRlbXMgZnJvbSBuZXh0IHBhZ2UgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8q CkBAIC0yNzAsMjIgKzI1MiwyMCBAQCBfaGFzaF9yZWFkcHJldihJbmRleFNjYW5EZXNjIHNjYW4s CiB9CiAKIC8qCi0gKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4gYSBz Y2FuLgorICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyBp biBhIHNjYW4uCiAgKgotICoJCVdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLCBpZiBiYWNrd2Fy ZCBzY2FuLCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUKLSAqCQlpbmRleCB0aGF0IHNhdGlzZmllcyB0 aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHNjYW4KLSAqCQlkZXNjcmlwdG9y LgorICoJCVdlIGZpbmQgdGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIChvciwgaWYgYmFja3dhcmQg c2NhbiwgdGhlIGxhc3QKKyAqCQliYXRjaCkgaW4gdGhlIGluZGV4IHRoYXQgc2F0aXNmaWVzIHRo ZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aAorICoJCXRoZSBzY2FuIGRlc2NyaXB0b3Iu CiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgaWYgdGhlIHBhZ2UgY29udGFpbmluZyBjdXJy ZW50IGluZGV4IHR1cGxlIGlzIGFuCi0gKgkJb3ZlcmZsb3cgcGFnZSwgYm90aCBwaW4gYW5kIGxv Y2sgYXJlIHJlbGVhc2VkIHdoZXJlYXMgaWYgaXQgaXMgYSBidWNrZXQKLSAqCQlwYWdlIHRoZW4g aXQgaXMgcGlubmVkIGJ1dCBub3QgbG9ja2VkIGFuZCBkYXRhIGFib3V0IHRoZSBtYXRjaGluZwot ICoJCXR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9z LAotICoJCXNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRoZSBoZWFwIFRJRCBvZiB0aGUgY3Vy cmVudCB0dXBsZS4KKyAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHJldHVybnMgYSBiYXRjaCBjb250 YWluaW5nIG1hdGNoaW5nIGl0ZW1zLgorICoJCU90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGlj YXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzLgorICoJCU5vIGxvY2tzIGFy ZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8g bW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggcGluIGhlbGQgb24KLSAqCQlidWNr ZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93IHBhZ2UuCisgKgkJ V2UgYWx3YXlzIHJldGFpbiBvdXIgb3duIHBpbiBvbiB0aGUgYnVja2V0IHBhZ2UuICBXaGVuIHdl IHJldHVybiBhCisgKgkJYmF0Y2ggd2l0aCBhIGJ1Y2tldCBwYWdlLCBpdCB3aWxsIHJldGFpbiBp dHMgb3duIHJlZmVyZW5jZSBwaW4uCiAgKi8KLWJvb2wKK0luZGV4U2NhbkJhdGNoCiBfaGFzaF9m aXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9u CXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBAIC0yOTYsNyArMjc2LDcgQEAgX2hhc2hfZmly c3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlCdWZmZXIJCWJ1ZjsK IAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0g KmN1cnJJdGVtOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCiAJcGdzdGF0X2NvdW50X2luZGV4 X3NjYW4ocmVsKTsKIAlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKQEAgLTMyNiw3ICszMDYsNyBAQCBf aGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIGl0 ZW1zIGluIHRoZSBpbmRleC4KIAkgKi8KIAlpZiAoY3VyLT5za19mbGFncyAmIFNLX0lTTlVMTCkK LQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogT2theSB0byBjb21w dXRlIHRoZSBoYXNoIGtleS4gIFdlIHdhbnQgdG8gZG8gdGhpcyBiZWZvcmUgYWNxdWlyaW5nIGFu eQpAQCAtNDE5LDE5MSArMzk5LDE1MiBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJX2hhc2hfcmVhZG5leHQoc2NhbiwgJmJ1ZiwgJnBhZ2Us ICZvcGFxdWUpOwogCX0KIAotCS8qIHJlbWVtYmVyIHdoaWNoIGJ1ZmZlciB3ZSBoYXZlIHBpbm5l ZCwgaWYgYW55ICovCi0JQXNzZXJ0KEJ1ZmZlcklzSW52YWxpZChzby0+Y3VyclBvcy5idWYpKTsK LQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJh dGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CiAKLQkvKiBO b3cgZmluZCBhbGwgdGhlIHR1cGxlcyBzYXRpc2Z5aW5nIHRoZSBxdWFsaWZpY2F0aW9uIGZyb20g YSBwYWdlICovCi0JaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQlyZXR1 cm4gZmFsc2U7CisJLyogUmVhZCB0aGUgZmlyc3QgcGFnZSBhbmQgbG9hZCBpdGVtcyBpbnRvIGFs bG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBkaXIsIGJh dGNoKSkKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJ cmV0dXJuIE5VTEw7CisJfQogCi0JLyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJu ICovCi0JY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4 XTsKLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQkvKiBpZiB3ZSdy ZSBoZXJlLCBfaGFzaF9yZWFkcGFnZSBmb3VuZCBhIHZhbGlkIHR1cGxlcyAqLwotCXJldHVybiB0 cnVlOworCS8qIFJldHVybiB0aGUgYmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1zICovCisJ cmV0dXJuIGJhdGNoOwogfQogCiAvKgotICoJX2hhc2hfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEg ZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2hhc2hfcmVhZHBh Z2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBiYXRjaAogICoK ICAqCVdlIHNjYW4gYWxsIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBpbmRleCBwYWdlIGFuZCBz YXZlIHRoZW0gaW50bwotICoJc28tPmN1cnJQb3MgaWYgaXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZp Y2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcworICoJdGhlIGJhdGNoIGlmIHRoZXkgc2F0aXNm eSB0aGUgcXVhbGlmaWNhdGlvbi4gSWYgbm8gbWF0Y2hpbmcgaXRlbXMKICAqCWFyZSBmb3VuZCBp biB0aGUgY3VycmVudCBwYWdlLCB3ZSBtb3ZlIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UK ICAqCWluIGEgYnVja2V0IGNoYWluIGFzIGluZGljYXRlZCBieSB0aGUgZGlyZWN0aW9uLgogICoK ICAqCVJldHVybiB0cnVlIGlmIGFueSBtYXRjaGluZyBpdGVtcyBhcmUgZm91bmQgZWxzZSByZXR1 cm4gZmFsc2UuCiAgKi8KIHN0YXRpYyBib29sCi1faGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCitfaGFzaF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJICAg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxh dGlvbjsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OwotCUJ1ZmZlcgkJYnVmOworCUhhc2hCYXRjaERhdGEgKmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdl dERhdGEoYmF0Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9m ZnNldE51bWJlciBvZmZudW07CiAJdWludDE2CQlpdGVtSW5kZXg7CiAKLQlidWYgPSAqYnVmUDsK IAlBc3NlcnQoQnVmZmVySXNWYWxpZChidWYpKTsKIAlfaGFzaF9jaGVja3BhZ2UocmVsLCBidWYs IExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKIAotCXNvLT5jdXJy UG9zLmJ1ZiA9IGJ1ZjsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVt YmVyKGJ1Zik7CisJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJaGFzaGJhdGNoLT5jdXJyUGFnZSA9 IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJYmF0Y2gtPmRpciA9IGRpcjsKIAogCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlCbG9ja051bWJlciBwcmV2X2Jsa25v ID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCiAJCWZvciAoOzspCiAJCXsKIAkJCS8qIG5ldyBwYWdl LCBsb2NhdGUgc3RhcnRpbmcgcG9zaXRpb24gYnkgYmluYXJ5IHNlYXJjaCAqLwogCQkJb2ZmbnVt ID0gX2hhc2hfYmluc2VhcmNoKHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1J bmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGly KTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2Us IG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4 ICE9IDApCiAJCQkJYnJlYWs7CiAKIAkJCS8qCi0JCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0 Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRoZSBuZXh0 IHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkKLQkJ CSAqIGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBs ZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBuZXh0IHBh Z2UKIAkJCSAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRl bXMoc2Nhbik7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGlzIGEgcHJpbWFyeSBidWNrZXQgcGFn ZSwgaGFzaG9fcHJldmJsa25vIGlzIG5vdCBhIHJlYWwKLQkJCSAqIGJsb2NrIG51bWJlci4KLQkJ CSAqLwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwK LQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJ CXByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQllbHNlCi0JCQkJcHJldl9ibGtu byA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwotCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAm YnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQotCQkJewot CQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1 ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJ CQkgKiBSZW1lbWJlciBuZXh0IGFuZCBwcmV2aW91cyBibG9jayBudW1iZXJzIGZvciBzY3JvbGxh YmxlCi0JCQkJICogY3Vyc29ycyB0byBrbm93IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgcmV0dXJu IGZhbHNlCi0JCQkJICogaW5kaWNhdGluZyB0aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIHdl cmUgZm91bmQuIEFsc28sCi0JCQkJICogZG9uJ3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNuLCBiZWNh dXNlIHdlIGV4cGVjdAotCQkJCSAqIF9oYXNoX2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVkIGZvciB0 aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwotCQkJCSAqIGZ1bmN0aW9uIHJldHVybnMuCi0JCQkJICov Ci0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBwcmV2X2Jsa25vOwotCQkJCXNvLT5jdXJyUG9z Lm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1 ZjsKKwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJCXJldHVybiBmYWxzZTsKLQkJCX0K KworCQkJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJCQloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVm ZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9 IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQ b3MuaXRlbUluZGV4ID0gMDsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCWJhdGNoLT5sYXN0 SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7Ci0JCUJsb2NrTnVtYmVyIG5leHRf Ymxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7OykKIAkJewogCQkJLyogbmV3 IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlv ZmZudW0gPSBfaGFzaF9iaW5zZWFyY2hfbGFzdChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwog Ci0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBv ZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhz Y2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYg KGl0ZW1JbmRleCAhPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCiAJCQkJYnJlYWs7CiAKIAkJCS8q Ci0JCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50 IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRoZSBwcmV2aW91cyBwYWdlLiBCZWZvcmUgbGVhdmluZyB0 aGUgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgKLQkJCSAqIGFueSBraWxsZWQgaXRlbXMuCisJCQkg KiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2Us IHRyeSB0bworCQkJICogbW92ZSB0byB0aGUgcHJldmlvdXMgcGFnZQogCQkJICovCi0JCQlpZiAo c28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJaWYg KHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQlzby0+Y3Vy clBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCW5leHRfYmxrbm8g PSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKLQogCQkJX2hhc2hfcmVhZHByZXYoc2NhbiwgJmJ1 ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmKSkKLQkJCXsKLQkJ CQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0JCQkJc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZm ZXJHZXRCbG9ja051bWJlcihidWYpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qCi0JCQkJ ICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJs ZQotCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRpb24gYW5kIHJldHVybiBm YWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJl IGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVz ZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhl IG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1cm5zLgotCQkJCSAqLwot CQkJCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5j dXJyUG9zLm5leHRQYWdlID0gbmV4dF9ibGtubzsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7 CisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnVmKSkKIAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9CisK KwkJCWhhc2hiYXRjaC0+YnVmID0gYnVmOworCQkJaGFzaGJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZl ckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAJCX0KIAotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBp dGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdl IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0g MTsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0g TWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKIAl9CiAKLQlpZiAoc28tPmN1cnJQb3MuYnVmID09 IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hz b19zcGxpdF9idWNrZXRfYnVmKQorCS8qCisJICogU2F2ZWQgYXQgbGVhc3Qgb25lIG1hdGNoIGlu IGJhdGNoLml0ZW1zW10uICBQcmVwYXJlIGZvciBoYXNoZ2V0YmF0Y2ggdG8KKwkgKiByZXR1cm4g aXQgYnkgaW5pdGlhbGl6aW5nIHJlbWFpbmluZyB1bmluaXRpYWxpemVkIGZpZWxkcy4KKwkgKi8K KwlpZiAoaGFzaGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCWhhc2hi YXRjaC0+YnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKIAl7Ci0JCXNvLT5jdXJy UG9zLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlzby0+Y3VyclBvcy5uZXh0UGFn ZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1 ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJLyoKKwkJICogQmF0Y2gncyBidWZmZXIgaXMgZWl0 aGVyIHRoZSBwcmltYXJ5IGJ1Y2tldCwgb3IgYSBidWNrZXQgYmVpbmcKKwkJICogcG9wdWxhdGVk IGR1ZSB0byBhIHNwbGl0LgorCQkgKgorCQkgKiBJbmNyZW1lbnQgbG9jYWwgcmVmZXJlbmNlIGNv dW50IHNvIHRoYXQgYmF0Y2ggZ2V0cyBhbiBpbmRlcGVuZGVudAorCQkgKiBidWZmZXIgcmVmZXJl bmNlIHRoYXQgY2FuIGJlIHJlbGVhc2VkIChieSB0aGUgY29yZSBjb2RlL3RhYmxlIEFNKQorCQkg KiBiZWZvcmUgdGhlIGhhc2hzb19idWNrZXRfYnVmL2hhc2hzb19zcGxpdF9idWNrZXRfYnVmIHJl ZmVyZW5jZXMgYXJlCisJCSAqIHJlbGVhc2VkLgorCQkgKi8KKwkJSW5jckJ1ZmZlclJlZkNvdW50 KGhhc2hiYXRjaC0+YnVmKTsKKworCQkvKiBDYW4gb25seSB1c2Ugb3BhcXVlLT5oYXNob19uZXh0 Ymxrbm8gKi8KKwkJaGFzaGJhdGNoLT5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJ aGFzaGJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0KIAllbHNl CiAJewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwot CQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlfaGFz aF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlzby0+Y3VyclBvcy5idWYgPSBJbnZh bGlkQnVmZmVyOworCQkvKiBDYW4gdXNlIG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vIGFuZCBvcGFx dWUtPmhhc2hvX25leHRibGtubyAqLworCQloYXNoYmF0Y2gtPnByZXZQYWdlID0gb3BhcXVlLT5o YXNob19wcmV2Ymxrbm87CisJCWhhc2hiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25l eHRibGtubzsKIAl9CiAKLQlBc3NlcnQoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJy UG9zLmxhc3RJdGVtKTsKKwkvKiB3ZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIGJhdGNo Lml0ZW1zW10gKi8KKwlpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKHNjYW4sIGJhdGNoLCBoYXNo YmF0Y2gtPmJ1Zik7CisKKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0 ZW0pOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogTG9hZCBhbGwgdGhlIHF1YWxpZmllZCBp dGVtcyBmcm9tIGEgY3VycmVudCBpbmRleCBwYWdlCi0gKiBpbnRvIHNvLT5jdXJyUG9zLiBIZWxw ZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgorICogaW50byBiYXRjaC4gSGVscGVyIGZ1 bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4KICAqLwogc3RhdGljIGludAogX2hhc2hfbG9hZF9x dWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkgICBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKKwkJCQkJCSAgIE9mZnNldE51 bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7CkBAIC02NDAsNyArNTgxLDcgQEAgX2hhc2hfbG9hZF9x dWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQkJX2hhc2hf Y2hlY2txdWFsKHNjYW4sIGl0dXApKQogCQkJewogCQkJCS8qIHR1cGxlIGlzIHF1YWxpZmllZCwg c28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZu dW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwg aXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7CiAJCQl9CiAJCQllbHNlCkBAIC02ODcsNyArNjI4LDcg QEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBh Z2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4LS07CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlmaWVkLCBz byByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51 bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBp dHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcwNiwxMyArNjQ3LDE0IEBAIF9oYXNoX2xv YWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCX0KIH0K IAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4 XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0g Ki8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28s IGludCBpdGVtSW5kZXgsCitfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50 IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkK IHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1J bmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVt SW5kZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKKwljdXJySXRlbS0+ dGFibGVUaWQgPSBpdHVwLT50X3RpZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07 CisJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gMDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRp bC5jCmluZGV4IDNlMTYxMTlkMC4uMzMxZDVmNGRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNodXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1 dGlsLmMKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9oYXNoLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgog I2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKQEAgLTMzLDcgKzMyLDcgQEAgX2hhc2hfY2hlY2tx dWFsKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBpdHVwKQogCS8qCiAJICogQ3VycmVu dGx5LCB3ZSBjYW4ndCBjaGVjayBhbnkgb2YgdGhlIHNjYW4gY29uZGl0aW9ucyBzaW5jZSB3ZSBk byBub3QKIAkgKiBoYXZlIHRoZSBvcmlnaW5hbCBpbmRleCBlbnRyeSB2YWx1ZSB0byBzdXBwbHkg dG8gdGhlIHNrX2Z1bmMuIEFsd2F5cwotCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBo YXNoZ2V0dHVwbGUgYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZworCSAqIHJldHVybiB0cnVl OyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0YmF0Y2ggYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxh ZwogCSAqIHRvIG1ha2UgdGhlIG1haW4gaW5kZXhzY2FuIGNvZGUgZG8gaXQuCiAJICovCiAjaWZk ZWYgTk9UX1VTRUQKQEAgLTUwNSwxMjkgKzUwNCwzIEBAIF9oYXNoX2dldF9uZXdidWNrZXRfZnJv bV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAogCXJldHVybiBu ZXdfYnVja2V0OwogfQotCi0vKgotICogX2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0 YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3ZXJlIGtp bGxlZC4KLSAqCi0gKiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNv LCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2ls bGVkIHR1cGxlcyB0aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNh bGxlZCBpZiBzby0+bnVtS2lsbGVkID4gMCkuCi0gKgotICogVGhlIGNhbGxlciBkb2VzIG5vdCBo YXZlIGEgbG9jayBvbiB0aGUgcGFnZSBhbmQgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUKLSAqIHBh Z2UgcGlubmVkIGluIGEgYnVmZmVyLiAgTm90ZSB0aGF0IHJlYWQtbG9jayBpcyBzdWZmaWNpZW50 IGZvciBzZXR0aW5nCi0gKiBMUF9ERUFEIHN0YXR1cyAod2hpY2ggaXMgb25seSBhIGhpbnQpLgot ICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBpbiBvbiBidWNrZXQgYnVmZmVyLCBidXQgbWF5 IG9yIG1heSBub3QgaGF2ZSBwaW4KLSAqIG9uIG92ZXJmbG93IGJ1ZmZlciwgYXMgaW5kaWNhdGVk IGJ5IEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpLgotICoKLSAqIFdlIG1hdGNoIGl0 ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0 bwotICogZGVsZXRlLgotICoKLSAqIFRoZXJlIGFyZSBuZXZlciBhbnkgc2NhbnMgYWN0aXZlIGlu IGEgYnVja2V0IGF0IHRoZSB0aW1lIFZBQ1VVTSBiZWdpbnMsCi0gKiBiZWNhdXNlIFZBQ1VVTSB0 YWtlcyBhIGNsZWFudXAgbG9jayBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgc2NhbnMK LSAqIGhvbGQgYSBwaW4uICBBIHNjYW4gY2FuIGJlZ2luIGFmdGVyIFZBQ1VVTSBsZWF2ZXMgdGhl IHByaW1hcnkgYnVja2V0IHBhZ2UKLSAqIGJ1dCBiZWZvcmUgaXQgZmluaXNoZXMgdGhlIGVudGly ZSBidWNrZXQsIGJ1dCBpdCBjYW4gbmV2ZXIgcGFzcyBWQUNVVU0sCi0gKiBiZWNhdXNlIFZBQ1VV TSBhbHdheXMgbG9ja3MgdGhlIG5leHQgcGFnZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIG9u Ci0gKiB0aGUgcHJldmlvdXMgb25lLiAgVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5 IGFib3V0IGFjY2lkZW50YWxseQotICoga2lsbGluZyBhIFRJRCB0aGF0IGhhcyBiZWVuIHJldXNl ZCBmb3IgYW4gdW5yZWxhdGVkIHR1cGxlLgotICovCi12b2lkCi1faGFzaF9raWxsX2l0ZW1zKElu ZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwotCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0J QmxvY2tOdW1iZXIgYmxrbm87Ci0JQnVmZmVyCQlidWY7Ci0JUGFnZQkJcGFnZTsKLQlIYXNoUGFn ZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQltYXhvZmY7Ci0JaW50 CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKLQlpbnQJCQlpOwotCWJvb2wJCWtpbGxlZHNv bWV0aGluZyA9IGZhbHNlOwotCWJvb2wJCWhhdmVQaW4gPSBmYWxzZTsKLQotCUFzc2VydChzby0+ bnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKTsKLQlBc3Nl cnQoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKgotCSAqIEFsd2F5cyBy ZXNldCB0aGUgc2NhbiBzdGF0ZSwgc28gd2UgZG9uJ3QgbG9vayBmb3Igc2FtZSBpdGVtcyBvbiBv dGhlcgotCSAqIHBhZ2VzLgotCSAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JYmxrbm8gPSBz by0+Y3VyclBvcy5jdXJyUGFnZTsKLQlpZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBv cykpCi0JewotCQkvKgotCQkgKiBXZSBhbHJlYWR5IGhhdmUgcGluIG9uIHRoaXMgYnVmZmVyLCBz bywgYWxsIHdlIG5lZWQgdG8gZG8gaXMKLQkJICogYWNxdWlyZSBsb2NrIG9uIGl0LgotCQkgKi8K LQkJaGF2ZVBpbiA9IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJTG9ja0J1ZmZl cihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKLQl9Ci0JZWxzZQotCQlidWYgPSBfaGFzaF9nZXRi dWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKGJ1Zik7Ci0Jb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0J bWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKLQotCWZvciAoaSA9IDA7IGkg PCBudW1LaWxsZWQ7IGkrKykKLQl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVt c1tpXTsKLQkJSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tp dGVtSW5kZXhdOwotCi0JCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKLQotCQlBc3Nl cnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4 IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQotCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikK LQkJewotCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7Ci0JCQlJ bmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwot Ci0JCQlpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+aGVh cFRpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewotCQkJCQkvKgot CQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNh bgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9j ay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRp bnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoc28tPmN1 cnJQb3MuYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91 bmQgdGhlIGl0ZW0gKi8KLQkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOwotCQkJCWtpbGxlZHNvbWV0 aGluZyA9IHRydWU7Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICov Ci0JCQl9Ci0JCQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7Ci0JCX0KLQl9Ci0K LQkvKgotCSAqIFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsg YXMgZGlydHkgaGludC4gV2hlbmV2ZXIKLQkgKiB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdl IGFsc28gc2V0IHRoZSBwYWdlJ3MKLQkgKiBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBmbGFnLCB3 aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGludC4KLQkgKi8KLQlpZiAoa2lsbGVkc29tZXRoaW5n KQotCXsKLQkJb3BhcXVlLT5oYXNob19mbGFnIHw9IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTOwot CQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhzby0+Y3VyclBvcy5idWYsIHRydWUsIHRydWUpOwot CX0KLQotdW5sb2NrX3BhZ2U6Ci0JaWYgKHNvLT5oYXNoc29fYnVja2V0X2J1ZiA9PSBzby0+Y3Vy clBvcy5idWYgfHwKLQkJaGF2ZVBpbikKLQkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJV RkZFUl9MT0NLX1VOTE9DSyk7Ci0JZWxzZQotCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOwotfQpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRl eGFtLnNnbWwKaW5kZXggMDQ4M2FiM2QxLi41YTQ5NDY1YjEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtODQw LDcgKzg0MCw4IEBAIGFtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxmdW5jdGlv bj50YWJsZWFtX3V0aWxfZnJlZV9iYXRjaDwvZnVuY3Rpb24+KS4gIE5vdGUgYWxzbyB0aGF0CiAg ICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBtdXN0IG5ldmVyIG1v ZGlmeSB0aGUKICAgIDxzdHJ1Y3RmaWVsZD5wcmlvcmJhdGNoPC9zdHJ1Y3RmaWVsZD4gcGFyYW1l dGVyLiAgVGhlIGNvcmUKLSAgIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlLzwv ZmlsZW5hbWU+IGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEKKyAgIDxmaWxlbmFtZT5zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlLzwvZmlsZW5hbWU+IGFuZAorICAgPGZpbGVuYW1lPnNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoLzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9ucyBwcm92aWRlCiAgICBy ZWZlcmVuY2UgZXhhbXBsZXMgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g aW50ZXJmYWNlLgogICA8L3BhcmE+CiAKQEAgLTkxNiw4ICs5MTcsOCBAQCBhbWtpbGxpdGVtc2Jh dGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgIDxwYXJhPgogICAgV2hpbGUgaW1wbGVtZW50aW5n IDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gaXMgb3B0aW9uYWwsCiAgICBk b2luZyBzbyBpcyByZWNvbW1lbmRlZCBmb3IgcGVyZm9ybWFuY2UsIGFzIGl0IGFsbG93cyBmdXR1 cmUgc2NhbnMgdG8gc2tpcAotICAga25vd24tZGVhZCBpbmRleCBlbnRyaWVzLiAgVGhlIGNvcmUg aW5kZXggYWNjZXNzIG1ldGhvZCB0aGF0IGN1cnJlbnRseQotICAgc3VwcG9ydCA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IChCLXRyZWUpIGltcGxlbWVudHMKKyAgIGtub3duLWRlYWQg aW5kZXggZW50cmllcy4gIEJvdGggY29yZSBpbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IGN1cnJl bnRseQorICAgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IChCLXRyZWUg YW5kIGhhc2gpIGltcGxlbWVudAogICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2lu ZywgdGhvdWdoIHRoaXJkLXBhcnR5IGluZGV4IGFjY2VzcyBtZXRob2RzCiAgICBhcmUgZnJlZSB0 byBjaG9vc2Ugd2hldGhlciB0byBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlLgogICAgVGhlIHRhYmxl IEFNIG1heSBjYWxsCkBAIC05NTcsOCArOTU4LDggQEAgYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhT Y2FuRGVzYyBzY2FuLAogICAgZmFrZSBMU05zIGNhbiBzdGlsbCBwcm92aWRlIDxmdW5jdGlvbj5h bWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4sIGJ1dAogICAgc2hvdWxkIHNpbXBseSBkbyBub3Ro aW5nIHdoZW4gdGhlIHJlbGF0aW9uIGRvZXMgbm90IGdlbmVyYXRlIFdBTCAoaS5lLiwKICAgIHdo ZW4gPGZ1bmN0aW9uPlJlbGF0aW9uTmVlZHNXQUwoKTwvZnVuY3Rpb24+IGlzIGZhbHNlKSwgc2lu Y2UgdGhlIExTTgotICAgY29tcGFyaXNvbiB3b3VsZCBiZSB1bnJlbGlhYmxlLiAgU2VlIHRoZSBC LXRyZWUgaW5kZXggaW1wbGVtZW50YXRpb24gZm9yCi0gICBhIHJlZmVyZW5jZSBleGFtcGxlIG9m IHRoaXMgdGVjaG5pcXVlLgorICAgY29tcGFyaXNvbiB3b3VsZCBiZSB1bnJlbGlhYmxlLiAgU2Vl IHRoZSBCLXRyZWUgYW5kIGhhc2ggaW5kZXgKKyAgIGltcGxlbWVudGF0aW9ucyBmb3IgcmVmZXJl bmNlIGV4YW1wbGVzIG9mIHRoaXMgdGVjaG5pcXVlLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBA IC05OTMsOSArOTk0LDkgQEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAg IGxlYWYgcGFnZSwgd2hpY2ggcHJldmVudHMgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5CiAg ICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LgogICAgKEZvcm1hbGx5LCBhbiBpbmRleCBBTSBt YXkgaG9sZCBhIGRpZmZlcmVudCBraW5kIG9mIGludGVybG9jaywgb3IgbXVsdGlwbGUKLSAgIGlu dGVybG9ja3MsIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEsIGJ1dCBpbiBwcmFjdGljZSB0 aGUgYnVpbHQtaW4KLSAgIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IEItdHJlZQotICAgJm1kYXNoOyBob2xkcyBhIHNpbmdsZSBi dWZmZXIgcGluLikgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGlkZW1wb3RlbnQ6CisgICBpbnRlcmxv Y2tzLCBpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgYm90aCBi dWlsdC1pbgorICAgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+ICZtZGFzaDsgQi10cmVlIGFuZAorICAgaGFzaCAmbWRhc2g7IGhvbGQgYSBzaW5n bGUgYnVmZmVyIHBpbi4pIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpZGVtcG90ZW50OgogICAgaXQg bWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBmb3IgdGhlIHNhbWUgYmF0Y2gsIGFuZCBtdXN0 IGRvIG5vdGhpbmcgaWYKICAgIHRoZSBpbnRlcmxvY2sgaGFzIGFscmVhZHkgYmVlbiBkcm9wcGVk LiAgSW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGEgYnVmZmVyCiAgICBwaW4gc2hvdWxkIGNoZWNr IHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyBzdGlsbCB2YWxpZCBiZWZvcmUgcmVsZWFzaW5nIGl0LCBh bmQKQEAgLTEwNTUsOCArMTA1Niw4IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4s CiAgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzY2FuczsgZHVyaW5nIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KICAgIHNjYW5zIHRoZSA8bGl0ZXJhbD5wcmlvcmJh dGNoPC9saXRlcmFsPiBpcyBzdHJpY3RseSBvd25lZCBieSB0aGUgdGFibGUgQU0KICAgIGFuZCBj b3JlIGNvZGUsIGFuZCB0aGUgaW5kZXggQU0gbXVzdCBuZXZlciByZWxlYXNlIGl0LiAgU2VlCi0g ICA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9uPiBmb3IgYQotICAgcmVmZXJlbmNlIGV4YW1w bGUuICBUaGUgcmVsZWFzZWQgYmF0Y2ggaXMgY2FjaGVkIGludGVybmFsbHkgYW5kIHJldXNlZCBi eQorICAgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5faGFzaF9u ZXh0PC9mdW5jdGlvbj4gZm9yCisgICByZWZlcmVuY2UgZXhhbXBsZXMuICBUaGUgcmVsZWFzZWQg YmF0Y2ggaXMgY2FjaGVkIGludGVybmFsbHkgYW5kIHJldXNlZCBieQogICAgdGhlIG5leHQgPGZ1 bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+IGNhbGwsIGF2b2lkaW5n CiAgICByZXBlYXRlZCBtZW1vcnkgYWxsb2NhdGlvbiBkdXJpbmcgdGhlIGJpdG1hcCBzY2FuLgog ICA8L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDZlMjBkOTMxNS4uMDAyODhk ZmQ1IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTIwMCw2ICsxMjAwLDcgQEAgSGFz aAogSGFzaEFnZ0JhdGNoCiBIYXNoQWdnU3BpbGwKIEhhc2hBbGxvY0Z1bmMKK0hhc2hCYXRjaERh dGEKIEhhc2hCdWlsZFN0YXRlCiBIYXNoQnVsa0RlbGV0ZVN0cmVhbVByaXZhdGUKIEhhc2hDb21w YXJlRnVuYwpAQCAtMTIyMSw4ICsxMjIyLDYgQEAgSGFzaFBhZ2VTdGF0CiBIYXNoUGF0aAogSGFz aFNjYW5PcGFxdWUKIEhhc2hTY2FuT3BhcXVlRGF0YQotSGFzaFNjYW5Qb3NEYXRhCi1IYXNoU2Nh blBvc0l0ZW0KIEhhc2hTa2V3QnVja2V0CiBIYXNoU3RhdGUKIEhhc2hWYWx1ZUZ1bmMKLS0gCjIu NTMuMAoK --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0001-Make-IndexScanInstrumentation-a-pointer-in-execu.patch" Content-Disposition: attachment; filename="v15-0001-Make-IndexScanInstrumentation-a-pointer-in-execu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7exc0 RnJvbSA4OTc3ODljODhhOTYzZGVlZjAxODFkZmUzMjkxNmZmNzc3NzQ0ODE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6MjI6MjUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNSAwMS8xN10g TWFrZSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gYSBwb2ludGVyIGluIGV4ZWN1dG9yCiBzY2Fu IG5vZGVzLgoKQ2hhbmdlIHRoZSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gZmllbGRzIGluIElu ZGV4U2NhblN0YXRlLApJbmRleE9ubHlTY2FuU3RhdGUsIGFuZCBCaXRtYXBJbmRleFNjYW5TdGF0 ZSBmcm9tIGlubGluZSBzdHJ1Y3RzIHRvCnBvaW50ZXJzLiAgVGhpcyBhdm9pZHMgYWRkaW5nIGFk ZGl0aW9uYWwgb3ZlcmhlYWQgYXMgbmV3IGZpZWxkcyBhcmUKYWRkZWQgdG8gSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uLCBhdCBsZWFzdCBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlCmluc3Ry dW1lbnRhdGlvbiBpc24ndCB1c2VkIChpLmUuIHdoZW4gdGhlIGV4ZWN1dG9yIG5vZGUgaXNuJ3Qg YmVpbmcgcnVuCnRocm91Z2ggYW4gRVhQTEFJTiBBTkFMWVpFKS4KLS0tCiBzcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgfCAgNiArKystLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICB8ICA2ICsrKy0tLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIHwgIDggKysrKysrLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICB8IDEyICsrKysrKysrLS0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAgIHwgMTQgKysrKysrKysrLS0tLS0KIDUg ZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAppbmRleCAwNzE2YzVhOWEuLjU4NmJkYzIxOSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKQEAgLTE3MzIsNyArMTczMiw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAJ RXhwckNvbnRleHQgKmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbglpc3NfUmVsYXRpb25E ZXNjOwogCXN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqaXNzX1NjYW5EZXNjOwotCUluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiBpc3NfSW5zdHJ1bWVudDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKmlzc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaXNz X1NoYXJlZEluZm87CiAKIAkvKiBUaGVzZSBhcmUgbmVlZGVkIGZvciByZS1jaGVja2luZyBPUkRF UiBCWSBleHByIG9yZGVyaW5nICovCkBAIC0xNzgzLDcgKzE3ODMsNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleE9ubHlTY2FuU3RhdGUKIAlFeHByQ29udGV4dCAqaW9zc19SdW50aW1lQ29udGV4dDsK IAlSZWxhdGlvbglpb3NzX1JlbGF0aW9uRGVzYzsKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEg Kmlvc3NfU2NhbkRlc2M7Ci0JSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGlvc3NfSW5zdHJ1bWVu dDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xv dCAqaW9zc19UYWJsZVNsb3Q7CiAJQnVmZmVyCQlpb3NzX1ZNQnVmZmVyOwpAQCAtMTgyNCw3ICsx ODI0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQml0bWFwSW5kZXhTY2FuU3RhdGUKIAlFeHByQ29udGV4 dCAqYmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbgliaXNzX1JlbGF0aW9uRGVzYzsKIAlz dHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmJpc3NfU2NhbkRlc2M7Ci0JSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uIGJpc3NfSW5zdHJ1bWVudDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmJp c3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmJpc3NfU2hh cmVkSW5mbzsKIH0gQml0bWFwSW5kZXhTY2FuU3RhdGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpp bmRleCAyOTZlYThhMWUuLmU0YjcwMTY2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzg4 MCw3ICszODgwLDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJSW5kZXhTY2FuU3RhdGUgKmluZGV4c3Rh dGUgPSAoKEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCQkJbnNlYXJjaGVzID0gaW5k ZXhzdGF0ZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5k ZXhzdGF0ZS0+aXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zODg4LDcgKzM4 ODgsNyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhw bGFpblN0YXRlICplcykKIAkJCXsKIAkJCQlJbmRleE9ubHlTY2FuU3RhdGUgKmluZGV4c3RhdGUg PSAoKEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCi0JCQkJbnNlYXJjaGVzID0g aW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0g aW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzg5Niw3 ICszODk2LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJQml0bWFwSW5kZXhTY2FuU3RhdGUgKmluZGV4 c3RhdGUgPSAoKEJpdG1hcEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2Vh cmNoZXMgPSBpbmRleHN0YXRlLT5iaXNzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQkJCW5zZWFy Y2hlcyA9IGluZGV4c3RhdGUtPmJpc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCQkJCVNoYXJl ZEluZm8gPSBpbmRleHN0YXRlLT5iaXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggZTZmMzc4YzA1 Li43MGM1NWVlNmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJ bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2Fu LmMKQEAgLTIwMyw3ICsyMDMsNyBAQCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2Nh biBpdCB3aWxsIHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3 IEJpdG1hcEluZGV4U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwotCQl3aW5zdHJ1 bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmJpc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdp bnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7 CiAJfQogCiAJLyoKQEAgLTI3NCw2ICsyNzQsMTAgQEAgRXhlY0luaXRCaXRtYXBJbmRleFNjYW4o Qml0bWFwSW5kZXhTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAo ZWZsYWdzICYgRVhFQ19GTEFHX0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAK KwkvKiBTZXQgdXAgaW5zdHJ1bWVudGF0aW9uIG9mIGJpdG1hcCBpbmRleCBzY2FucyBpZiByZXF1 ZXN0ZWQgKi8KKwlpZiAoZXN0YXRlLT5lc19pbnN0cnVtZW50KQorCQlpbmRleHN0YXRlLT5iaXNz X0luc3RydW1lbnQgPSBwYWxsb2MwX29iamVjdChJbmRleFNjYW5JbnN0cnVtZW50YXRpb24pOwor CiAJLyogT3BlbiB0aGUgaW5kZXggcmVsYXRpb24uICovCiAJbG9ja21vZGUgPSBleGVjX3J0X2Zl dGNoKG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlc3RhdGUpLT5yZWxsb2NrbW9kZTsKIAlpbmRleHN0 YXRlLT5iaXNzX1JlbGF0aW9uRGVzYyA9IGluZGV4X29wZW4obm9kZS0+aW5kZXhpZCwgbG9ja21v ZGUpOwpAQCAtMzI1LDcgKzMyOSw3IEBAIEV4ZWNJbml0Qml0bWFwSW5kZXhTY2FuKEJpdG1hcElu ZGV4U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+ Ymlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoaW5kZXhzdGF0ZS0+Ymlz c19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKLQkJCQkJCQkg ICAmaW5kZXhzdGF0ZS0+Ymlzc19JbnN0cnVtZW50LAorCQkJCQkJCSAgIGluZGV4c3RhdGUtPmJp c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkgICBpbmRleHN0YXRlLT5iaXNzX051bVNjYW5LZXlzKTsK IAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBjOGRi MzU3ZTYuLjllYWI4MWZkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jCkBAIC05Myw3ICs5Myw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpu b2RlKQogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkgICBl c3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAor CQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3Nf TnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMpOwogCkBA IC00MzMsNyArNDMzLDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRl ICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxs IHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25s eVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+ bnNlYXJjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCX0KIAogCS8q CkBAIC02MDYsNiArNjA2LDEwIEBAIEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2Fu ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAoZWZsYWdzICYgRVhFQ19G TEFHX0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAKKwkvKiBTZXQgdXAgaW5z dHJ1bWVudGF0aW9uIG9mIGluZGV4LW9ubHkgc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVz dGF0ZS0+ZXNfaW5zdHJ1bWVudCkKKwkJaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50ID0gcGFs bG9jMF9vYmplY3QoSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uKTsKKwogCS8qIE9wZW4gdGhlIGlu ZGV4IHJlbGF0aW9uLiAqLwogCWxvY2ttb2RlID0gZXhlY19ydF9mZXRjaChub2RlLT5zY2FuLnNj YW5yZWxpZCwgZXN0YXRlKS0+cmVsbG9ja21vZGU7CiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29w ZW4obm9kZS0+aW5kZXhpZCwgbG9ja21vZGUpOwpAQCAtNzg3LDcgKzc5MSw3IEBAIEV4ZWNJbmRl eE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJbm9kZS0+ aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19j dXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKLQkJCQkJ CQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCisJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1l bnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9z c19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CkBAIC04NTMsNyArODU3LDcgQEAg RXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSwKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5v ZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25E ZXNjLAotCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlv c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJ CSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCBiZDgzZTQ3MTIuLjA2MTQzZTk0YyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTExLDcgKzExMSw3IEBAIEluZGV4TmV4 dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9k ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+ aXNzX0luc3RydW1lbnQsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRl ckJ5S2V5cyk7CiAKQEAgLTIwNyw3ICsyMDcsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRl eFNjYW5TdGF0ZSAqbm9kZSkKIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Mu c3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAog CQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+aXNzX0lu c3RydW1lbnQsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBu b2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5 cyk7CiAKQEAgLTgxMyw3ICs4MTMsNyBAQCBFeGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRl ICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxs IHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25s eVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdpbnN0cnVtZW50LT5u c2VhcmNoZXMgKz0gbm9kZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAl9CiAKIAkvKgpA QCAtOTc0LDYgKzk3NCwxMCBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVT dGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWlmIChlZmxhZ3MgJiBFWEVDX0ZMQUdfRVhQTEFJ Tl9PTkxZKQogCQlyZXR1cm4gaW5kZXhzdGF0ZTsKIAorCS8qIFNldCB1cCBpbnN0cnVtZW50YXRp b24gb2YgaW5kZXggc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVzdGF0ZS0+ZXNfaW5zdHJ1 bWVudCkKKwkJaW5kZXhzdGF0ZS0+aXNzX0luc3RydW1lbnQgPSBwYWxsb2MwX29iamVjdChJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24pOworCiAJLyogT3BlbiB0aGUgaW5kZXggcmVsYXRpb24uICov CiAJbG9ja21vZGUgPSBleGVjX3J0X2ZldGNoKG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlc3RhdGUp LT5yZWxsb2NrbW9kZTsKIAlpbmRleHN0YXRlLT5pc3NfUmVsYXRpb25EZXNjID0gaW5kZXhfb3Bl bihub2RlLT5pbmRleGlkLCBsb2NrbW9kZSk7CkBAIC0xNzIzLDcgKzE3MjcsNyBAQCBFeGVjSW5k ZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pc3NfU2Nh bkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLAogCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJICZub2Rl LT5pc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlL ZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKQEAgLTE3ODcsNyArMTc5MSw3IEBAIEV4ZWNJbmRleFNj YW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlzc19TY2Fu RGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkgJm5vZGUt Pmlzc19JbnN0cnVtZW50LAorCQkJCQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJ CSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtl eXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotLSAKMi41My4wCgo= --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0016-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v15-0016-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7exn2 RnJvbSA3NTAzMjJiZTg2ODJlZDU1MjI0YzYwMGJkMDAyYmFjNjA1YmM1YTcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MzI6NTIgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNSAxNi8xN10g QWRkIGZha2UgTFNOIHN1cHBvcnQgdG8gaGFzaCBpbmRleCBBTS4KClRoaXMgaXMgcHJlcGFyYXRp b24gZm9yIGFuIHVwY29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50 ZXJmYWNlIGFuZCBzd2l0Y2ggaGFzaCBvdmVyIHRvIGl0IChmcm9tIGFtZ2V0dHVwbGUpLiAgV2Ug bmVlZCBmYWtlCkxTTnMgdG8gbWFrZSBpdCBzYWZlIHRvIGFwcGx5IGJlaGF2aW9yIHRoYXQgaXMg ZXF1aXZhbGVudCB0byBuYnRyZWUncwpwcmV2aW91cyBkcm9wUGluIGJlaGF2aW9yIHRoYXQgd29y a3Mgd2l0aCB1bmxvZ2dlZCBoYXNoIGluZGV4IHNjYW5zLgoKVGhlIGNvbW1pdCB0aGF0IHdpbGwg YWRkIGhhc2hnZXRiYXRjaCB3aWxsIHJlcGxhY2UgX2hhc2hfa2lsbF9pdGVtcyB3aXRoCmEgbmV3 IGhhc2hraWxsaXRlbXNiYXRjaCByb3V0aW5lLiAgVGhpcyB3aWxsIGJlIHZlcnkgc2ltaWxhciB0 byB0aGUKYnRraWxsaXRlbXNiYXRjaCByb3V0aW5lIGFkZGVkIGJ5IGNvbW1pdCBYWFhYWC4gIElu IHBhcnRpY3VsYXIsIGl0IHdpbGwKdXNlIHRoZSBzYW1lICJkaWQgdGhlIGluZGV4IHBhZ2UncyBM U04gY2hhbmdlIHNpbmNlIHRoZSBwYWdlIHdhcyBmaXJzdApyZWFkPyIgdHJpY2suCgpBdXRob3I6 IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1oYiswRHIySzBEdGdA bWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAgMjEgKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYyB8ICAyMCAr KystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYyAgIHwgMTExICsrKysrKysr KysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyAg IHwgIDIyICsrKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDUgaW5zZXJ0aW9ucygrKSwgNjkgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDMyZGFkZWJlYi4uMmUzMmJlMjMz IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC01MTIsNiArNTEyLDcgQEAgaGFzaGJ1bGtkZWxl dGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAog CUhhc2hNZXRhUGFnZSBjYWNoZWRtZXRhcDsKIAlIYXNoQnVsa0RlbGV0ZVN0cmVhbVByaXZhdGUg c3RyZWFtX3ByaXZhdGU7CiAJUmVhZFN0cmVhbSAqc3RyZWFtID0gTlVMTDsKKwlYTG9nUmVjUHRy CXJlY3B0cjsKIAogCXR1cGxlc19yZW1vdmVkID0gMDsKIAludW1faW5kZXhfdHVwbGVzID0gMDsK QEAgLTY5MCw3ICs2OTEsNiBAQCBidWNrZXRfbG9vcDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChy ZWwpKQogCXsKIAkJeGxfaGFzaF91cGRhdGVfbWV0YV9wYWdlIHhscmVjOwotCQlYTG9nUmVjUHRy CXJlY3B0cjsKIAogCQl4bHJlYy5udHVwbGVzID0gbWV0YXAtPmhhc2htX250dXBsZXM7CiAKQEAg LTcwMCw4ICs3MDAsMTEgQEAgYnVja2V0X2xvb3A6CiAJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBt ZXRhYnVmLCBSRUdCVUZfU1RBTkRBUkQpOwogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFT SF9JRCwgWExPR19IQVNIX1VQREFURV9NRVRBX1BBR0UpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdl dFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZh a2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRy KTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNzc0LDYgKzc3Nyw3IEBAIGhhc2hidWNr ZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRf YnVmLAogCUJ1ZmZlcgkJYnVmOwogCUJ1Y2tldAkJbmV3X2J1Y2tldCBQR19VU0VEX0ZPUl9BU1NF UlRTX09OTFkgPSBJbnZhbGlkQnVja2V0OwogCWJvb2wJCWJ1Y2tldF9kaXJ0eSA9IGZhbHNlOwor CVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJYmxrbm8gPSBidWNrZXRfYmxrbm87CiAJYnVmID0gYnVj a2V0X2J1ZjsKQEAgLTg5Niw3ICs5MDAsNiBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiBy ZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKIAkJCWlmIChSZWxhdGlv bk5lZWRzV0FMKHJlbCkpCiAJCQl7CiAJCQkJeGxfaGFzaF9kZWxldGUgeGxyZWM7Ci0JCQkJWExv Z1JlY1B0cglyZWNwdHI7CiAKIAkJCQl4bHJlYy5jbGVhcl9kZWFkX21hcmtpbmcgPSBjbGVhcl9k ZWFkX21hcmtpbmc7CiAJCQkJeGxyZWMuaXNfcHJpbWFyeV9idWNrZXRfcGFnZSA9IChidWYgPT0g YnVja2V0X2J1Zik7CkBAIC05MjEsOCArOTI0LDExIEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0 aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCQkJCQkJCQkJ bmRlbGV0YWJsZSAqIHNpemVvZihPZmZzZXROdW1iZXIpKTsKIAogCQkJCXJlY3B0ciA9IFhMb2dJ bnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX0RFTEVURSk7Ci0JCQkJUGFnZVNldExTTihCdWZm ZXJHZXRQYWdlKGJ1ZiksIHJlY3B0cik7CiAJCQl9CisJCQllbHNlCisJCQkJcmVjcHRyID0gWExv Z0dldEZha2VMU04ocmVsKTsKKworCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJl Y3B0cik7CiAKIAkJCUVORF9DUklUX1NFQ1RJT04oKTsKIAkJfQpAQCAtOTgxLDE0ICs5ODcsMTUg QEAgaGFzaGJ1Y2tldGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwgQnVm ZmVyIGJ1Y2tldF9idWYsCiAJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJaWYgKFJlbGF0aW9uTmVlZHNX QUwocmVsKSkKIAkJewotCQkJWExvZ1JlY1B0cglyZWNwdHI7Ci0KIAkJCVhMb2dCZWdpbkluc2Vy dCgpOwogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAsIGJ1Y2tldF9idWYsIFJFR0JVRl9TVEFOREFS RCk7CiAKIAkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NQTElU X0NMRUFOVVApOwotCQkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCQl9CisJCWVsc2UKKwkJ CXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwkJUGFnZVNldExTTihwYWdlLCByZWNw dHIpOwogCiAJCUVORF9DUklUX1NFQ1RJT04oKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo aW5zZXJ0LmMKaW5kZXggMGNlZmJhY2M5Li4zMzk1YmJjMTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoaW5zZXJ0LmMKQEAgLTUwLDYgKzUwLDcgQEAgX2hhc2hfZG9pbnNlcnQoUmVsYXRpb24g cmVsLCBJbmRleFR1cGxlIGl0dXAsIFJlbGF0aW9uIGhlYXBSZWwsIGJvb2wgc29ydGVkKQogCXVp bnQzMgkJaGFzaGtleTsKIAlCdWNrZXQJCWJ1Y2tldDsKIAlPZmZzZXROdW1iZXIgaXR1cF9vZmY7 CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKgogCSAqIEdldCB0aGUgaGFzaCBrZXkgZm9yIHRo ZSBpdGVtIChpdCdzIHN0b3JlZCBpbiB0aGUgaW5kZXggdHVwbGUgaXRzZWxmKS4KQEAgLTIxNiw3 ICsyMTcsNiBAQCByZXN0YXJ0X2luc2VydDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQog CXsKIAkJeGxfaGFzaF9pbnNlcnQgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhs cmVjLm9mZm51bSA9IGl0dXBfb2ZmOwogCkBAIC0yMjksMTAgKzIyOSwxMiBAQCByZXN0YXJ0X2lu c2VydDoKIAkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVw KSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfSU5TRVJU KTsKLQotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJUGFnZVNl dExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0 ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVm KSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7 CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTM3Miw2ICszNzQsNyBAQCBfaGFzaF92YWN1 dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1Ziwg QnVmZmVyIGJ1ZikKIAlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCUhhc2hQYWdl T3BhcXVlIHBhZ2VvcGFxdWU7CiAJSGFzaE1ldGFQYWdlIG1ldGFwOworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJLyogU2NhbiBlYWNoIHR1cGxlIGluIHBhZ2UgdG8gc2VlIGlmIGl0IGlzIG1hcmtl ZCBhcyBMUF9ERUFEICovCiAJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsK QEAgLTQyNCw3ICs0MjcsNiBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBS ZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJaWYgKFJlbGF0aW9u TmVlZHNXQUwocmVsKSkKIAkJewogCQkJeGxfaGFzaF92YWN1dW1fb25lX3BhZ2UgeGxyZWM7Ci0J CQlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCQkJeGxyZWMuaXNDYXRhbG9nUmVsID0gUmVsYXRpb25J c0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhocmVsKTsKIAkJCXhscmVjLnNuYXBzaG90Q29u ZmxpY3RIb3Jpem9uID0gc25hcHNob3RDb25mbGljdEhvcml6b247CkBAIC00NDUsMTAgKzQ0Nywx MiBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBC dWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigxLCBtZXRh YnVmLCBSRUdCVUZfU1RBTkRBUkQpOwogCiAJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hf SUQsIFhMT0dfSEFTSF9WQUNVVU1fT05FX1BBR0UpOwotCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdl dFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVm KSwgcmVjcHRyKTsKIAkJfQorCQllbHNlCisJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwp OworCisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOworCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAkJRU5EX0NSSVRfU0VDVElP TigpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYwppbmRleCA4Y2ZiNmNlNzUuLmFiZDFm OTFmYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jCkBAIC0xMzIsNiArMTMyLDcgQEAg X2hhc2hfYWRkb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1 ZiwgYm9vbCByZXRhaW5fcGluKQogCXVpbnQzMgkJaSwKIAkJCQlqOwogCWJvb2wJCXBhZ2VfZm91 bmQgPSBmYWxzZTsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCS8qCiAJICogV3JpdGUtbG9jayB0 aGUgdGFpbCBwYWdlLiAgSGVyZSwgd2UgbmVlZCB0byBtYWludGFpbiBsb2NraW5nIG9yZGVyIHN1 Y2gKQEAgLTM4MSw3ICszODIsNiBAQCBmb3VuZDoKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYgKFJl bGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9oYXNo X2FkZF9vdmZsX3BhZ2UgeGxyZWM7CiAKIAkJeGxyZWMuYm1wYWdlX2ZvdW5kID0gcGFnZV9mb3Vu ZDsKQEAgLTQwOCwxOCArNDA4LDIwIEBAIGZvdW5kOgogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDQs ICZtZXRhcC0+aGFzaG1fZmlyc3RmcmVlLCBzaXplb2YodWludDMyKSk7CiAKIAkJcmVjcHRyID0g WExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfQUREX09WRkxfUEFHRSk7Ci0KLQkJUGFn ZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1 ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChtYXBidWYp KQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7Ci0KLQkJaWYg KEJ1ZmZlcklzVmFsaWQobmV3bWFwYnVmKSkKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShu ZXdtYXBidWYpLCByZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVm KSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOwor CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQobWFw YnVmKSkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7CisKKwlp ZiAoQnVmZmVySXNWYWxpZChuZXdtYXBidWYpKQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uo bmV3bWFwYnVmKSwgcmVjcHRyKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVm KSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNTEwLDcgKzUxMiwxMSBA QCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZm ZXIgb3ZmbGJ1ZiwKIAlCdWNrZXQJCWJ1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJ QnVmZmVyCQlwcmV2YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAlCdWZmZXIJCW5leHRidWYgPSBJbnZh bGlkQnVmZmVyOwotCWJvb2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlOworCWJvb2wJCXVwZGF0ZV9t ZXRhcCA9IGZhbHNlLAorCQkJCW1vZF93YnVmLAorCQkJCWlzX3ByaW1fYnVja2V0X3NhbWVfd3J0 LAorCQkJCWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJ LyogR2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGRvb21lZCBwYWdlICovCiAJX2hhc2hfY2hlY2tw YWdlKHJlbCwgb3ZmbGJ1ZiwgTEhfT1ZFUkZMT1dfUEFHRSk7CkBAIC02NDEsMTkgKzY0NywyMSBA QCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZm ZXIgb3ZmbGJ1ZiwKIAkJTWFya0J1ZmZlckRpcnR5KG1ldGFidWYpOwogCX0KIAorCS8qIERldGVy bWluZSB3aGljaCBwYWdlcyBXQUwgcmVjb3JkIG1vZGlmaWVzICovCisJbW9kX3didWYgPSBmYWxz ZTsKKwlpc19wcmltX2J1Y2tldF9zYW1lX3dydCA9ICh3YnVmID09IGJ1Y2tldGJ1Zik7CisJaXNf cHJldl9idWNrZXRfc2FtZV93cnQgPSAod2J1ZiA9PSBwcmV2YnVmKTsKKwogCS8qIFhMT0cgc3R1 ZmYgKi8KIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9zcXVlZXpl X3BhZ2UgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwotCQlpbnQJCQlpOwotCQlib29sCQlt b2Rfd2J1ZiA9IGZhbHNlOwogCiAJCXhscmVjLnByZXZibGtubyA9IHByZXZibGtubzsKIAkJeGxy ZWMubmV4dGJsa25vID0gbmV4dGJsa25vOwogCQl4bHJlYy5udHVwcyA9IG5pdHVwczsKLQkJeGxy ZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQgPSAod2J1ZiA9PSBidWNrZXRidWYpOwotCQl4bHJl Yy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCA9ICh3YnVmID09IHByZXZidWYpOworCQl4bHJlYy5p c19wcmltX2J1Y2tldF9zYW1lX3dydCA9IGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0OworCQl4bHJl Yy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCA9IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OwogCiAJ CVhMb2dCZWdpbkluc2VydCgpOwogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGFz aFNxdWVlemVQYWdlKTsKQEAgLTY2MiwxNCArNjcwLDE0IEBAIF9oYXNoX2ZyZWVvdmZscGFnZShS ZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCQkgKiBidWNr ZXQgYnVmZmVyIHdhcyBub3QgY2hhbmdlZCwgYnV0IHN0aWxsIG5lZWRzIHRvIGJlIHJlZ2lzdGVy ZWQgdG8KIAkJICogZW5zdXJlIHRoYXQgd2UgY2FuIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24g aXQgZHVyaW5nIHJlcGxheS4KIAkJICovCi0JCWlmICgheGxyZWMuaXNfcHJpbV9idWNrZXRfc2Ft ZV93cnQpCisJCWlmICghaXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCiAJCXsKIAkJCXVpbnQ4CQlm bGFncyA9IFJFR0JVRl9TVEFOREFSRCB8IFJFR0JVRl9OT19JTUFHRSB8IFJFR0JVRl9OT19DSEFO R0U7CiAKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBidWNrZXRidWYsIGZsYWdzKTsKIAkJfQog Ci0JCWlmICh4bHJlYy5udHVwcyA+IDApCisJCWlmIChuaXR1cHMgPiAwKQogCQl7CiAJCQlYTG9n UmVnaXN0ZXJCdWZmZXIoMSwgd2J1ZiwgUkVHQlVGX1NUQU5EQVJEKTsKIApAQCAtNjc4LDEwICs2 ODYsMTAgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1 ZiwgQnVmZmVyIG92ZmxidWYsCiAKIAkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cF9vZmZz ZXRzLAogCQkJCQkJCQluaXR1cHMgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7Ci0JCQlmb3IgKGkg PSAwOyBpIDwgbml0dXBzOyBpKyspCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG5pdHVwczsgaSsr KQogCQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cHNbaV0sIHR1cHNfc2l6ZVtpXSk7CiAJ CX0KLQkJZWxzZSBpZiAoeGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQgfHwgeGxyZWMuaXNf cHJldl9idWNrZXRfc2FtZV93cnQpCisJCWVsc2UgaWYgKGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0 IHx8IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQogCQl7CiAJCQl1aW50OAkJd2J1Zl9mbGFnczsK IApAQCAtNjkxLDEwICs2OTksMTAgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwg QnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJCQkgKiBpZiBpdCBpcyB0aGUgc2Ft ZSBhcyBwcmltYXJ5IGJ1Y2tldCBidWZmZXIgb3IgdXBkYXRlIHRoZQogCQkJICogbmV4dGJsa25v IGlmIGl0IGlzIHNhbWUgYXMgdGhlIHByZXZpb3VzIGJ1Y2tldCBidWZmZXIuCiAJCQkgKi8KLQkJ CUFzc2VydCh4bHJlYy5udHVwcyA9PSAwKTsKKwkJCUFzc2VydChuaXR1cHMgPT0gMCk7CiAKIAkJ CXdidWZfZmxhZ3MgPSBSRUdCVUZfU1RBTkRBUkQ7Ci0JCQlpZiAoIXhscmVjLmlzX3ByZXZfYnVj a2V0X3NhbWVfd3J0KQorCQkJaWYgKCFpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKIAkJCXsKIAkJ CQl3YnVmX2ZsYWdzIHw9IFJFR0JVRl9OT19DSEFOR0U7CiAJCQl9CkBAIC03MTQsNyArNzIyLDcg QEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVm ZmVyIG92ZmxidWYsCiAJCSAqIHByZXZwYWdlLiAgRHVyaW5nIHJlcGxheSwgd2UgY2FuIGRpcmVj dGx5IHVwZGF0ZSB0aGUgbmV4dGJsb2NrIGluCiAJCSAqIHdyaXRlcGFnZS4KIAkJICovCi0JCWlm IChCdWZmZXJJc1ZhbGlkKHByZXZidWYpICYmICF4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dy dCkKKwkJaWYgKEJ1ZmZlcklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVf d3J0KQogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDMsIHByZXZidWYsIFJFR0JVRl9TVEFOREFSRCk7 CiAKIAkJaWYgKEJ1ZmZlcklzVmFsaWQobmV4dGJ1ZikpCkBAIC03MzAsMjMgKzczOCwzMyBAQCBf aGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIg b3ZmbGJ1ZiwKIAkJfQogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19I QVNIX1NRVUVFWkVfUEFHRSk7Ci0KLQkJLyogU2V0IExTTiBpZmYgd2J1ZiBpcyBtb2RpZmllZC4g Ki8KLQkJaWYgKG1vZF93YnVmKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCBy ZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShvdmZsYnVmKSwgcmVjcHRyKTsK LQotCQlpZiAoQnVmZmVySXNWYWxpZChwcmV2YnVmKSAmJiAheGxyZWMuaXNfcHJldl9idWNrZXRf c2FtZV93cnQpCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7 Ci0JCWlmIChCdWZmZXJJc1ZhbGlkKG5leHRidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKG5leHRidWYpLCByZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBi dWYpLCByZWNwdHIpOwotCi0JCWlmICh1cGRhdGVfbWV0YXApCi0JCQlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UJCQkJCQkvKiAhUmVsYXRpb25O ZWVkc1dBTChyZWwpICovCisJeworCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJ CS8qIERldGVybWluZSBpZiB3YnVmIGlzIG1vZGlmaWVkICovCisJCWlmIChuaXR1cHMgPiAwKQor CQkJbW9kX3didWYgPSB0cnVlOworCQllbHNlIGlmIChpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkK KwkJCW1vZF93YnVmID0gdHJ1ZTsKKwl9CisKKwkvKiBTZXQgTFNOIGlmZiB3YnVmIGlzIG1vZGlm aWVkLiAqLworCWlmIChtb2Rfd2J1ZikKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYp LCByZWNwdHIpOworCisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIp OworCisJaWYgKEJ1ZmZlcklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVf d3J0KQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7CisJaWYg KEJ1ZmZlcklzVmFsaWQobmV4dGJ1ZikpCisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXh0 YnVmKSwgcmVjcHRyKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNw dHIpOworCisJaWYgKHVwZGF0ZV9tZXRhcCkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1l dGFidWYpLCByZWNwdHIpOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC05NTksNiArOTc3 LDggQEAgcmVhZHBhZ2U6CiAKIAkJCQlpZiAobml0dXBzID4gMCkKIAkJCQl7CisJCQkJCVhMb2dS ZWNQdHIJcmVjcHRyOworCiAJCQkJCUFzc2VydChuaXR1cHMgPT0gbmRlbGV0YWJsZSk7CiAKIAkJ CQkJLyoKQEAgLTk4Niw3ICsxMDA2LDYgQEAgcmVhZHBhZ2U6CiAJCQkJCS8qIFhMT0cgc3R1ZmYg Ki8KIAkJCQkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJCQkJewotCQkJCQkJWExvZ1Jl Y1B0cglyZWNwdHI7CiAJCQkJCQl4bF9oYXNoX21vdmVfcGFnZV9jb250ZW50cyB4bHJlYzsKIAog CQkJCQkJeGxyZWMubnR1cHMgPSBuaXR1cHM7CkBAIC0xMDE4LDEwICsxMDM3LDEyIEBAIHJlYWRw YWdlOgogCQkJCQkJCQkJCQluZGVsZXRhYmxlICogc2l6ZW9mKE9mZnNldE51bWJlcikpOwogCiAJ CQkJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9NT1ZFX1BBR0Vf Q09OVEVOVFMpOwotCi0JCQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0 cik7Ci0JCQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocmJ1ZiksIHJlY3B0cik7CiAJCQkJ CX0KKwkJCQkJZWxzZQorCQkJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQkJ CQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7CisJCQkJCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShyYnVmKSwgcmVjcHRyKTsKIAogCQkJCQlFTkRfQ1JJVF9TRUNUSU9O KCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDhlMjIwYTNhZS4uMjYzYmM3 M2YxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTYzMCw2ICs2MzAsNyBAQCBf aGFzaF9leHBhbmR0YWJsZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmKQogCXVpbnQzMgkJ bG93bWFzazsKIAlib29sCQltZXRhcF91cGRhdGVfbWFza3MgPSBmYWxzZTsKIAlib29sCQltZXRh cF91cGRhdGVfc3BsaXRwb2ludCA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiByZXN0 YXJ0X2V4cGFuZDoKIApAQCAtOTAwLDcgKzkwMSw2IEBAIHJlc3RhcnRfZXhwYW5kOgogCWlmIChS ZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJewogCQl4bF9oYXNoX3NwbGl0X2FsbG9jYXRlX3BhZ2Ug eGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm5ld19idWNrZXQgPSBtYXhi dWNrZXQ7CiAJCXhscmVjLm9sZF9idWNrZXRfZmxhZyA9IG9vcGFxdWUtPmhhc2hvX2ZsYWc7CkBA IC05MzMsMTEgKzkzMywxMyBAQCByZXN0YXJ0X2V4cGFuZDoKIAkJWExvZ1JlZ2lzdGVyRGF0YSgm eGxyZWMsIFNpemVPZkhhc2hTcGxpdEFsbG9jUGFnZSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2Vy dChSTV9IQVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQUxMT0NBVEVfUEFHRSk7Ci0KLQkJUGFnZVNl dExTTihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1 ZmZlckdldFBhZ2UoYnVmX25ibGtubyksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0 UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFr ZUxTTihyZWwpOworCisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNw dHIpOworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWZfbmJsa25vKSwgcmVjcHRyKTsKKwlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9T RUNUSU9OKCk7CiAKQEAgLTEwOTIsNiArMTA5NCw3IEBAIF9oYXNoX3NwbGl0YnVja2V0KFJlbGF0 aW9uIHJlbCwKIAlTaXplCQlhbGxfdHVwc19zaXplID0gMDsKIAlpbnQJCQlpOwogCXVpbnQxNgkJ bml0dXBzID0gMDsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCWJ1Y2tldF9vYnVmID0gb2J1ZjsK IAlvcGFnZSA9IEJ1ZmZlckdldFBhZ2Uob2J1Zik7CkBAIC0xMjk2LDcgKzEyOTksNiBAQCBfaGFz aF9zcGxpdGJ1Y2tldChSZWxhdGlvbiByZWwsCiAKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwp KQogCXsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2hhc2hfc3BsaXRfY29tcGxldGUgeGxy ZWM7CiAKIAkJeGxyZWMub2xkX2J1Y2tldF9mbGFnID0gb29wYXF1ZS0+aGFzaG9fZmxhZzsKQEAg LTEzMTAsMTAgKzEzMTIsMTIgQEAgX2hhc2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCQlY TG9nUmVnaXN0ZXJCdWZmZXIoMSwgYnVja2V0X25idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJ cmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQ09NUExFVEUp OwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7Ci0J CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRfbmJ1ZiksIHJlY3B0cik7CiAJfQorCWVs c2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVy R2V0UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdl KGJ1Y2tldF9uYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIAotLSAKMi41 My4wCgo= --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0014-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Disposition: attachment; filename="v15-0014-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7exs4 RnJvbSBhMzZhNTYwODUwNzBlYTYzY2YwZGZmNWRkNTY3YzcxMDYwNTQ1ZGJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNzoyNToyNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDE0 LzE3XSBXSVA6IHJlYWRfc3RyZWFtOiBQcmV2ZW50IGRpc3RhbmNlIGZyb20gZGVjYXlpbmcKIHRv byBxdWlja2x5CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYyB8IDMzICsrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDMw IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRf c3RyZWFtLmMKaW5kZXggZTI4YWI1ZGUwLi5lM2MxNmJkMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vcmVhZF9zdHJlYW0uYwpAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgUmVhZFN0cmVhbQogCWlu dDE2CQlmb3J3YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7CiAJaW50MTYJ CWRpc3RhbmNlOworCXVpbnQxNgkJZGlzdGFuY2VfZGVjYXlfaG9sZG9mZjsKIAlpbnQxNgkJaW5p dGlhbGl6ZWRfYnVmZmVyczsKIAlpbnQxNgkJcmVzdW1lX2Rpc3RhbmNlOwogCWludAkJCXJlYWRf YnVmZmVyc19mbGFnczsKQEAgLTM2NCw5ICszNjUsMjIgQEAgcmVhZF9zdHJlYW1fc3RhcnRfcGVu ZGluZ19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkvKiBSZW1lbWJlciB3aGV0aGVyIHdlIG5l ZWQgdG8gd2FpdCBiZWZvcmUgcmV0dXJuaW5nIHRoaXMgYnVmZmVyLiAqLwogCWlmICghbmVlZF93 YWl0KQogCXsKLQkJLyogTG9vay1haGVhZCBkaXN0YW5jZSBkZWNheXMsIG5vIEkvTyBuZWNlc3Nh cnkuICovCi0JCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSkKLQkJCXN0cmVhbS0+ZGlzdGFuY2Ut LTsKKwkJLyoKKwkJICogSWYgdGhlcmUgY3VycmVudGx5IGlzIG5vIElPIGluIHByb2dyZXNzLCBh bmQgd2UgaGF2ZSBub3QgbmVlZGVkIHRvCisJCSAqIGlzc3VlIElPIHJlY2VudGx5LCBkZWNheSB0 aGUgbG9vay1haGVhZCBkaXN0YW5jZS4gIFdlIGRldGVjdCBpZiB3ZQorCQkgKiBoYWQgdG8gaXNz dWUgSU8gcmVjZW50bHkgYnkgaGF2aW5nIGEgZGVjYXkgaG9sZG9mZiB0aGF0J3Mgc2V0IHRvCisJ CSAqIHRoZSBtYXggbG9va2FoZWFkIGRpc3RhbmNlIHdoZW5ldmVyIHdlIG5lZWQgdG8gZG8gSU8u ICBUaGlzIGlzCisJCSAqIGltcG9ydGFudCB0byBlbnN1cmUgd2UgZXZlbnR1YWxseSByZWFjaCBh IGhpZ2ggZW5vdWdoIGRpc3RhbmNlIHRvCisJCSAqIHBlcmZvcm0gSU8gYXN5bmNocm9ub3VzbHkg d2hlbiBzdGFydGluZyBvdXQgd2l0aCBhIHNtYWxsIGxvb2thaGVhZAorCQkgKiBkaXN0YW5jZS4K KwkJICovCisJCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSAmJiBzdHJlYW0tPmlvc19pbl9wcm9n cmVzcyA9PSAwKQorCQl7CisJCQlpZiAoc3RyZWFtLT5kaXN0YW5jZV9kZWNheV9ob2xkb2ZmID09 IDApCisJCQkJc3RyZWFtLT5kaXN0YW5jZS0tOworCQkJZWxzZQorCQkJCXN0cmVhbS0+ZGlzdGFu Y2VfZGVjYXlfaG9sZG9mZi0tOworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC03MDIsNiArNzE2LDcg QEAgcmVhZF9zdHJlYW1fYmVnaW5faW1wbChpbnQgZmxhZ3MsCiAJc3RyZWFtLT5zZXFfYmxvY2tu dW0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJc3RyZWFtLT5zZXFfdW50aWxfcHJvY2Vzc2VkID0g SW52YWxpZEJsb2NrTnVtYmVyOwogCXN0cmVhbS0+dGVtcG9yYXJ5ID0gU21ncklzVGVtcChzbWdy KTsKKwlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5X2hvbGRvZmYgPSAwOwogCiAJLyoKIAkgKiBTa2lw IHRoZSBpbml0aWFsIHJhbXAtdXAgcGhhc2UgaWYgdGhlIGNhbGxlciBzYXlzIHdlJ3JlIGdvaW5n IHRvIGJlCkBAIC05NDQsNiArOTU5LDE4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJaWYgKCsrc3RyZWFtLT5v bGRlc3RfaW9faW5kZXggPT0gc3RyZWFtLT5tYXhfaW9zKQogCQkJc3RyZWFtLT5vbGRlc3RfaW9f aW5kZXggPSAwOwogCisJCS8qCisJCSAqIEFzIHdlIG5lZWRlZCBJTywgcHJldmVudCBkaXN0YW5j ZSBmcm9tIGJlaW5nIHJlZHVjZWQgd2l0aGluIG91cgorCQkgKiBtYXhpbXVtIGxvb2thaGVhZCB3 aW5kb3cuIFRoaXMgYXZvaWRzIGhhdmluZyBkaXN0YW5jZSBjb2xsYXBzZSB0b28KKwkJICogcXVp Y2tseSBpbiB3b3JrbG9hZHMgd2hlcmUgbW9zdCBvZiB0aGUgcmVxdWlyZWQgYmxvY2tzIGFyZSBj YWNoZWQsCisJCSAqIGJ1dCB3aGVyZSB0aGUgcmVtYWluaW5nIElPcyBhcmUgYSBzdWZmaWNpZW50 IGVub3VnaCBmYWN0b3IgdG8gY2F1c2UKKwkJICogYSBzdWJzdGFudGlhbCBzbG93ZG93biBpZiBl eGVjdXRlZCBzeW5jaHJvbm91c2x5LgorCQkgKgorCQkgKiBYWFg6IE5vdCBvYnZpb3VzIHdoZXRo ZXIgd2Ugc2hvdWxkIHVzZSBtYXhfaW9zIG9yCisJCSAqIG1heF9waW5uZWRfYnVmZmVycy4gT3Ig c29tZXRoaW5nIGVsc2UgZW50aXJlbHkuCisJCSAqLworCQlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5 X2hvbGRvZmYgPSBzdHJlYW0tPm1heF9pb3M7CisKIAkJLyoKIAkJICogTG9vay1haGVhZCBkaXN0 YW5jZSByYW1wcyB1cCByYXBpZGx5IGFmdGVyIHdlIG5lZWRlZCB0byB3YWl0IGZvcgogCQkgKiBJ Ty4gV2Ugb25seSBpbmNyZWFzZSB0aGUgZGlzdGFuY2Ugd2hlbiB3ZSBuZWVkZWQgdG8gd2FpdCwg dG8gYXZvaWQKLS0gCjIuNTMuMAoK --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0015-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Disposition: attachment; filename="v15-0015-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7exq3 RnJvbSA0MDIwOWMzNzFmNmE0YTQ2MzY2Nzc2Y2Y2NzNhNDNkMGZlZGRjYzFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDE1 LzE3XSBXSVA6IGFpbzogaW9fdXJpbmc6IFVzZSBJTyBzaXplIG5vdCBJTyBxdWV1ZSB0bwogdHJp Z2dlciBhc3luYyBwcm9jZXNzaW5nCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMgfCA1NyArKysrKysrKysrKysrKy0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggNTJhMThhMzU3Li41ZGM0MjdhZjIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCkBAIC00MDksNyAr NDA5LDYgQEAgc3RhdGljIGludAogcGdhaW9fdXJpbmdfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2Vk X2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCXN0cnVjdCBpb191cmluZyAqdXJp bmdfaW5zdGFuY2UgPSAmcGdhaW9fbXlfdXJpbmdfY29udGV4dC0+aW9fdXJpbmdfcmluZzsKLQlp bnQJCQlpbl9mbGlnaHRfYmVmb3JlID0gZGNsaXN0X2NvdW50KCZwZ2Fpb19teV9iYWNrZW5kLT5p bl9mbGlnaHRfaW9zKTsKIAogCUFzc2VydChudW1fc3RhZ2VkX2lvcyA8PSBQR0FJT19TVUJNSVRf QkFUQ0hfU0laRSk7CiAKQEAgLTQyNSwyNyArNDI0LDYgQEAgcGdhaW9fdXJpbmdfc3VibWl0KHVp bnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCiAJCXBnYWlv X2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7CiAJCXBnYWlvX3VyaW5nX3NxX2Zyb21faW8oaW9oLCBz cWUpOwotCi0JCS8qCi0JCSAqIGlvX3VyaW5nIGV4ZWN1dGVzIElPIGluIHByb2Nlc3MgY29udGV4 dCBpZiBwb3NzaWJsZS4gVGhhdCdzCi0JCSAqIGdlbmVyYWxseSBnb29kLCBhcyBpdCByZWR1Y2Vz IGNvbnRleHQgc3dpdGNoaW5nLiBXaGVuIHBlcmZvcm1pbmcgYQotCQkgKiBsb3Qgb2YgYnVmZmVy ZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbiBwYWdlIGNhY2hlIGFuZAotCQkg KiB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMgaW4gdGhlIGZvcmVncm91bmQsIGFzIGl0IGNhbid0 IGJlCi0JCSAqIG9mZmxvYWRlZCB0byBETUEgaGFyZHdhcmUgYXMgaXMgcG9zc2libGUgd2hlbiB1 c2luZyBkaXJlY3QgSU8uIFdoZW4KLQkJICogZXhlY3V0aW5nIGEgbG90IG9mIGJ1ZmZlcmVkIElP IHRoaXMgY2F1c2VzIGlvX3VyaW5nIHRvIGJlIHNsb3dlcgotCQkgKiB0aGFuIHdvcmtlciBtb2Rl LCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhlIGNvcHlpbmcuIGlvX3VyaW5nCi0JCSAq IGNhbiBiZSB0b2xkIHRvIG9mZmxvYWQgd29yayB0byB3b3JrZXIgdGhyZWFkcyBpbnN0ZWFkLgot CQkgKgotCQkgKiBJZiBhbiBJTyBpcyBidWZmZXJlZCBJTyBhbmQgd2UgYWxyZWFkeSBoYXZlIElP cyBpbiBmbGlnaHQgb3IKLQkJICogbXVsdGlwbGUgSU9zIGFyZSBiZWluZyBzdWJtaXR0ZWQsIHdl IHRodXMgdGVsbCBpb191cmluZyB0byBleGVjdXRlCi0JCSAqIHRoZSBJTyBpbiB0aGUgYmFja2dy b3VuZC4gV2UgZG9uJ3QgZG8gc28gZm9yIHRoZSBmaXJzdCBmZXcgSU9zCi0JCSAqIGJlaW5nIHN1 Ym1pdHRlZCBhcyBleGVjdXRpbmcgaW4gdGhpcyBwcm9jZXNzJyBjb250ZXh0IGhhcyBsb3dlcgot CQkgKiBsYXRlbmN5LgotCQkgKi8KLQkJaWYgKGluX2ZsaWdodF9iZWZvcmUgPiA0ICYmIChpb2gt PmZsYWdzICYgUEdBSU9fSEZfQlVGRkVSRUQpKQotCQkJaW9fdXJpbmdfc3FlX3NldF9mbGFncyhz cWUsIElPU1FFX0FTWU5DKTsKLQotCQlpbl9mbGlnaHRfYmVmb3JlKys7CiAJfQogCiAJd2hpbGUg KHRydWUpCkBAIC03MDksNiArNjg3LDcgQEAgc3RhdGljIHZvaWQKIHBnYWlvX3VyaW5nX3NxX2Zy b21faW8oUGdBaW9IYW5kbGUgKmlvaCwgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogewogCXN0 cnVjdCBpb3ZlYyAqaW92OworCXNpemVfdAkJaW9fc2l6ZSA9IDA7CiAKIAlzd2l0Y2ggKChQZ0Fp b09wKSBpb2gtPm9wKQogCXsKQEAgLTcyMSw2ICs3MDAsOCBAQCBwZ2Fpb191cmluZ19zcV9mcm9t X2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIAkJCQkJCQkJ ICAgaW92LT5pb3ZfYmFzZSwKIAkJCQkJCQkJICAgaW92LT5pb3ZfbGVuLAogCQkJCQkJCQkgICBp b2gtPm9wX2RhdGEucmVhZC5vZmZzZXQpOworCisJCQkJaW9fc2l6ZSA9IGlvdi0+aW92X2xlbjsK IAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTczMCw3ICs3MTEsMzkgQEAgcGdhaW9fdXJpbmdfc3Ff ZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCQkJ CQkJCQlpb2gtPm9wX2RhdGEucmVhZC5pb3ZfbGVuZ3RoLAogCQkJCQkJCQkJaW9oLT5vcF9kYXRh LnJlYWQub2Zmc2V0KTsKIAorCQkJCWZvciAoaW50IGkgPSAwOyBpIDw9IGlvaC0+b3BfZGF0YS5y ZWFkLmlvdl9sZW5ndGg7IGkrKywgaW92KyspCisJCQkJCWlvX3NpemUgKz0gaW92LT5pb3ZfbGVu OwogCQkJfQorCisKKwkJCS8qCisJCQkgKiBpb191cmluZyBleGVjdXRlcyBJTyBpbiBwcm9jZXNz IGNvbnRleHQgaWYgcG9zc2libGUuIFRoYXQncworCQkJICogZ2VuZXJhbGx5IGdvb2QsIGFzIGl0 IHJlZHVjZXMgY29udGV4dCBzd2l0Y2hpbmcuIFdoZW4KKwkJCSAqIHBlcmZvcm1pbmcgYSBsb3Qg b2YgYnVmZmVyZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbgorCQkJICogcGFn ZSBjYWNoZSBhbmQgdXNlcnNwYWNlIG1lbW9yeSBoYXBwZW5zIGluIHRoZSBmb3JlZ3JvdW5kLCBh cworCQkJICogaXQgY2FuJ3QgYmUgb2ZmbG9hZGVkIHRvIERNQSBoYXJkd2FyZSBhcyBpcyBwb3Nz aWJsZSB3aGVuIHVzaW5nCisJCQkgKiBkaXJlY3QgSU8uIFdoZW4gZXhlY3V0aW5nIGEgbG90IG9m IGJ1ZmZlcmVkIElPIHRoaXMgY2F1c2VzCisJCQkgKiBpb191cmluZyB0byBiZSBzbG93ZXIgdGhh biB3b3JrZXIgbW9kZSwgYXMgd29ya2VyIG1vZGUKKwkJCSAqIHBhcmFsbGVsaXplcyB0aGUgY29w eWluZy4gaW9fdXJpbmcgY2FuIGJlIHRvbGQgdG8gb2ZmbG9hZCB3b3JrCisJCQkgKiB0byB3b3Jr ZXIgdGhyZWFkcyBpbnN0ZWFkLgorCQkJICoKKwkJCSAqIElmIHRoZSBJT3MgYXJlIHNtYWxsLCB0 aGVyZSBpcyBubyBiZW5lZml0IGZyb20gZm9yY2luZyB0aGluZ3MKKwkJCSAqIGludG8gdGhlIGJh Y2tncm91bmQsIHRoZSBvdmVyaGVhZCBmcm9tIGNvbnRleHQgc3dpdGNoaW5nIGlzCisJCQkgKiBo aWdoZXIgdGhhbiB0aGUgZ2Fpbi4gIFRoZXJlZm9yZSB3ZSB1c2UgdGhlIHNpemUgb2YgdGhlIHJl YWQgYXMKKwkJCSAqIGEgaGV1cmlzdGljLgorCQkJICoKKwkJCSAqIFhYWDogV2UgdXNlZCB0byBu b3QgZG8gdGhpcyBmb3IgdGhlIGZpcnN0IGZldyBJT3MgaW4gZmxpZ2h0LAorCQkJICogYnV0IG5v dyB3ZSBoYXZlIGEgaGV1cmlzdGljIHByZXZlbnRpbmcgZGVlcGVyIElPIHF1ZXVlcyBpZiBJT3MK KwkJCSAqIGZpbmlzaCBpbiB0aW1lLCB3aGljaCB3aWxsIG9mdGVuIHByZXZlbnQgdXMgZnJvbSBl dmVyIHJlYWNoaW5nCisJCQkgKiB0aGF0IGRlZXAgcXVldWVzLiAgTWF5YmUgdGhlcmUncyBhIGJl dHRlciB3YXk/CisJCQkgKgorCQkJICogWFhYOiBOZWVkIHRvIGV2YWx1YXRlIHRoZSBudW1iZXIg b2YgYmxvY2tzIHdoZW4gSU9TUUVfQVNZTkMKKwkJCSAqIHN0YXJ0cyB0byBtYWtlIHNlbnNlLgor CQkJICovCisJCQlpZiAoaW9fc2l6ZSA+PSAoQkxDS1NaICogNCkgJiYKKwkJCQkoaW9oLT5mbGFn cyAmIFBHQUlPX0hGX0JVRkZFUkVEKSkKKwkJCQlpb191cmluZ19zcWVfc2V0X2ZsYWdzKHNxZSwg SU9TUUVfQVNZTkMpOworCiAJCQlicmVhazsKIAogCQljYXNlIFBHQUlPX09QX1dSSVRFVjoKLS0g CjIuNTMuMAoK --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0013-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Disposition: attachment; filename="v15-0013-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7exx5 RnJvbSBkMjhkMTg3YzdhOTA2ZTNiMjQxOTc3OGI2YTFlY2E0MzNjMTkyNTY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDEz LzE3XSBXSVA6IHJlYWRfc3RyZWFtOiBPbmx5IGluY3JlYXNlIGRpc3RhbmNlIHdoZW4KIHdhaXRp bmcgZm9yIElPCgpUaGlzIGF2b2lkcyBpbmNyZWFzaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgbWF4 aW11bSBpbiBjYXNlcyB3aGVyZSB0aGUgSU8Kc3Vic3lzdGVtIGlzIGFscmVhZHkga2VlcGluZyB1 cC4KClRPRE86IFRoaXMgbWlnaHQgYmUgdG9vIGFnZ3Jlc3NpdmUgd2l0aG91dCBhIHN1YnNlcXVl bnQgcGF0Y2ggdGhhdCByZWR1Y2VzIGhvdwpvZnRlbiB3ZSBkZWNyZWFzZSB0aGUgZGlzdGFuY2Uu CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpC YWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyB8IDI0 ICsrKysrKysrKysrKysrKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMo KyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v cmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5k ZXggMzY2N2Q2N2FiLi5lMjhhYjVkZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYwpAQCAtOTMxLDIyICs5MzEsMzYgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCXsKIAkJaW50MTYJCWlvX2lu ZGV4ID0gc3RyZWFtLT5vbGRlc3RfaW9faW5kZXg7CiAJCWludDMyCQlkaXN0YW5jZTsJLyogd2lk ZXIgdGVtcG9yYXJ5IHZhbHVlLCBjbGFtcGVkIGJlbG93ICovCisJCWJvb2wJCW5lZWRlZF93YWl0 OwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHdlIHN0aWxsIGFncmVlIG9uIHRoZSBidWZmZXJz LiAqLwogCQlBc3NlcnQoc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmJ1ZmZlcnMgPT0KIAkJCSAg ICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0pOwogCi0JCVdhaXRSZWFkQnVm ZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJbmVlZGVkX3dhaXQgPSBXYWl0UmVh ZEJ1ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zX2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CiAJCWlm ICgrK3N0cmVhbS0+b2xkZXN0X2lvX2luZGV4ID09IHN0cmVhbS0+bWF4X2lvcykKIAkJCXN0cmVh bS0+b2xkZXN0X2lvX2luZGV4ID0gMDsKIAotCQkvKiBMb29rLWFoZWFkIGRpc3RhbmNlIHJhbXBz IHVwIHJhcGlkbHkgYWZ0ZXIgd2UgZG8gSS9PLiAqLwotCQlkaXN0YW5jZSA9IHN0cmVhbS0+ZGlz dGFuY2UgKiAyOwotCQlkaXN0YW5jZSA9IE1pbihkaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVk X2J1ZmZlcnMpOwotCQlzdHJlYW0tPmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCS8qCisJCSAqIExv b2stYWhlYWQgZGlzdGFuY2UgcmFtcHMgdXAgcmFwaWRseSBhZnRlciB3ZSBuZWVkZWQgdG8gd2Fp dCBmb3IKKwkJICogSU8uIFdlIG9ubHkgaW5jcmVhc2UgdGhlIGRpc3RhbmNlIHdoZW4gd2UgbmVl ZGVkIHRvIHdhaXQsIHRvIGF2b2lkCisJCSAqIGluY3JlYXNpbmcgdGhlIGRpc3RhbmNlIGZ1cnRo ZXIgdGhhbiBuZWNlc3NhcnksIGFzIHVubmVjZXNzYXJpbHkKKwkJICogcGlubmluZyBtYW55IGJ1 ZmZlcnMgY2FuIGJlIGNvc3RseS4KKwkJICoKKwkJICogTkI6IE1heSBub3QgaW5jcmVhc2UgdGhl IGRpc3RhbmNlIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUKKwkJICogc3RyZWFtLgorCQkg Ki8KKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPiAwICYmIG5lZWRlZF93YWl0KQorCQl7CisJCQlk aXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFuY2UgKiAyOworCQkJaWYgKGRpc3RhbmNlICYmIGRpc3Rh bmNlIDwgUEdfSU5UMTZfTUFYKQorCQkJCWRpc3RhbmNlKys7CisJCQlkaXN0YW5jZSA9IE1pbihk aXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOworCQkJc3RyZWFtLT5kaXN0YW5j ZSA9IGRpc3RhbmNlOworCQl9CiAKIAkJLyoKIAkJICogSWYgd2UndmUgcmVhY2hlZCB0aGUgZmly c3QgYmxvY2sgb2YgYSBzZXF1ZW50aWFsIHJlZ2lvbiB3ZSdyZQotLSAKMi41My4wCgo= --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0012-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Disposition: attachment; filename="v15-0012-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7exz6 RnJvbSAwMGQzMTQ5YWE4MGIzMDEyYjUyZDBiYjRkNTBkNjUyNjUxMWFmYTlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo1MDo1MCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDEy LzE3XSBidWZtZ3I6IFJldHVybiB3aGV0aGVyIFdhaXRSZWFkQnVmZmVycygpIG5lZWRlZCB0bwog d2FpdAoKSW4gYSBzdWJzZXF1ZW50IGNvbW1pdCByZWFkX3N0cmVhbS5jIHdpbGwgdXNlIHRoaXMg YXMgYW4gaW5wdXQgdG8gdGhlIHJlYWQKYWhlYWQgZGlzdGFuY2UuCgpBdXRob3I6ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgfCAxOCArKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hh bmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApp bmRleCA4NDkzMzc3MmUuLmJhYjU3YzJiNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0yNTAsNyAr MjUwLDcgQEAgZXh0ZXJuIGJvb2wgU3RhcnRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlv biAqb3BlcmF0aW9uLAogCQkJCQkJCSBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJCQkgaW50 ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgV2FpdFJlYWRCdWZm ZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIGJvb2wgV2FpdFJl YWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRlcm4gdm9p ZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2NrUmVsZWFz ZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5k ZXggYjdjYmM0MTZmLi5hZTFlNTM4ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CkBAIC0xNzMxLDEyICsxNzMxLDIwIEBAIFByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCUFzc2VydChvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOwogfQogCi12b2lkCisvKgorICogV2FpdCBmb3IgdGhl IElPIG9wZXJhdGlvbiBpbml0aWF0ZWQgYnkgU3RhcnRSZWFkQnVmZmVycygpIGV0IGFsIHRvCisg KiBjb21wbGV0ZS4KKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIElPIG9wZXJhdGlvbiBhbHJl YWR5IGhhZCBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgb2YgdGhpcworICogY2FsbC4KKyAqLworYm9v bAogV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiB7CiAJ UGdBaW9SZXR1cm4gKmFpb19yZXQgPSAmb3BlcmF0aW9uLT5pb19yZXR1cm47CiAJSU9Db250ZXh0 CWlvX2NvbnRleHQ7CiAJSU9PYmplY3QJaW9fb2JqZWN0OworCWJvb2wJCW5lZWRlZF93YWl0ID0g ZmFsc2U7CiAKIAlpZiAob3BlcmF0aW9uLT5wZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9U RU1QKQogCXsKQEAgLTE3OTgsNiArMTgwNiw3IEBAIFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVy c09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCQkJCWluc3RyX3RpbWUJaW9fc3RhcnQgPSBwZ3N0YXRf cHJlcGFyZV9pb190aW1lKHRyYWNrX2lvX3RpbWluZyk7CiAKIAkJCQlwZ2Fpb193cmVmX3dhaXQo Jm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCQkJbmVlZGVkX3dhaXQgPSB0cnVlOwogCiAJCQkJLyoK IAkJCQkgKiBUaGUgSU8gb3BlcmF0aW9uIGl0c2VsZiB3YXMgYWxyZWFkeSBjb3VudGVkIGVhcmxp ZXIsIGluCkBAIC0xODUwLDYgKzE4NTksMTIgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJz T3BlcmF0aW9uICpvcGVyYXRpb24pCiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAorCQkv KgorCQkgKiBJZiB0aGUgSU8gY29tcGxldGVkIG9ubHkgcGFydGlhbGx5LCB3ZSBuZWVkIHRvIHBl cmZvcm0gYWRkaXRpb25hbAorCQkgKiB3b3JrLCBjb25zaWRlciB0aGF0IGEgZm9ybSBvZiBoYXZp bmcgaGFkIHRvIHdhaXQuCisJCSAqLworCQluZWVkZWRfd2FpdCA9IHRydWU7CisKIAkJLyoKIAkJ ICogVGhpcyBtYXkgb25seSBjb21wbGV0ZSB0aGUgSU8gcGFydGlhbGx5LCBlaXRoZXIgYmVjYXVz ZSBzb21lCiAJCSAqIGJ1ZmZlcnMgd2VyZSBhbHJlYWR5IHZhbGlkLCBvciBiZWNhdXNlIG9mIGEg cGFydGlhbCByZWFkLgpAQCAtMTg2Niw2ICsxODgxLDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRC dWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJQ2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihv cGVyYXRpb24sIHRydWUpOwogCiAJLyogTkI6IFJFQURfRE9ORSB0cmFjZXBvaW50IHdhcyBhbHJl YWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwlyZXR1cm4gbmVlZGVkX3dh aXQ7CiB9CiAKIC8qCi0tIAoyLjUzLjAKCg== --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0011-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Disposition: attachment; filename="v15-0011-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7ey07 RnJvbSAxMGI5YWJiYzBhZTI1YzVhNDdkY2ZlY2EwYzNlYmUzODIxMzQ4ZGJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo0MDozNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDEx LzE3XSBXSVA6IGFpbzogaW9fdXJpbmc6IEFsbG93IElPIG1ldGhvZHMgdG8gY2hlY2sgaWYgSU8K IGNvbXBsZXRlZCBpbiB0aGUgYmFja2dyb3VuZAoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYWlvX2ludGVybmFsLmggICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIHwgNDcgKysrKysrKysrKysrKysrKysrKysrKysK IDMgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRl cm5hbC5oCmluZGV4IDVmZWVhMTViZS4uMzNlMWUyZGMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2lu dGVybmFsLmgKQEAgLTMyOCw2ICszMjgsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW9NZXRob2RPcHMK IAkgKi8KIAl2b2lkCQkoKndhaXRfb25lKSAoUGdBaW9IYW5kbGUgKmlvaCwKIAkJCQkJCQkgdWlu dDY0IHJlZl9nZW5lcmF0aW9uKTsKKworCS8qIC0tLQorCSAqIENoZWNrIGlmIElPIGhhcyBhbHJl YWR5IGNvbXBsZXRlZC4gT3B0aW9uYWwuCisJICoKKwkgKiBTb21lIElPIG1ldGhvZHMgbmVlZCB0 byBwb2xsIGEga2VybmVsIG9iamVjdCB0byBzZWUgaWYgSU8gaGFzIGFscmVhZHkKKwkgKiBjb21w bGV0ZWQgaW4gdGhlIGJhY2tncm91bmQuIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRvIGRvIHNvLgor CSAqCisJICogVGhpcyBjYWxsYmFjayBtYXkgbm90IHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLCBo b3dldmVyIGl0IGlzIGFsbG93ZWQsCisJICogYWx0aG91Z2ggbm90IGRlc2lyYWJsZSwgdG8gd2Fp dCBmb3Igc2hvcnQtbGl2ZWQgbG9ja3MuIEl0IGlzIG9rIGZyb20gYQorCSAqIGNvcnJlY3RuZXNz IHBlcnNwZWN0aXZlIHRvIG5vdCBwcm9jZXNzIGFueS9hbGwgYXZhaWxhYmxlIGNvbXBsZXRpb25z LAorCSAqIGl0IGp1c3QgY2FuIGxlYWQgdG8gaW5mZXJpb3IgcGVyZm9ybWFuY2UuCisJICogLS0t CisJICovCisJdm9pZAkJKCpjaGVja19vbmUpIChQZ0Fpb0hhbmRsZSAqaW9oLAorCQkJCQkJCSAg dWludDY0IHJlZl9nZW5lcmF0aW9uKTsKIH0gSW9NZXRob2RPcHM7CiAKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW8uYwppbmRleCBlNGFlMzAzMWYuLjRlNzQyMDM4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vYWlvLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAg LTEwMTksNiArMTAxOSwyMSBAQCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICpp b3cpCiAKIAlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKIAor CS8qCisJICogSWYgdGhlIElPIGlzIG5vdCBleGVjdXRpbmcgc3luY2hyb25vdXNseSwgYWxsb3cg dGhlIElPIG1ldGhvZCB0byBjaGVjaworCSAqIGlmIHRoZSBJTyBhbHJlYWR5IGhhcyBjb21wbGV0 ZWQuCisJICovCisJaWYgKHBnYWlvX21ldGhvZF9vcHMtPmNoZWNrX29uZSAmJiAhKGlvaC0+Zmxh Z3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUykpCisJeworCQlwZ2Fpb19tZXRob2Rfb3BzLT5jaGVj a19vbmUoaW9oLCByZWZfZ2VuZXJhdGlvbik7CisKKwkJaWYgKHBnYWlvX2lvX3dhc19yZWN5Y2xl ZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJaWYg KHN0YXRlID09IFBHQUlPX0hTX0lETEUpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlpZiAoc3Rh dGUgPT0gUEdBSU9fSFNfQ09NUExFVEVEX1NIQVJFRCB8fAogCQlzdGF0ZSA9PSBQR0FJT19IU19D T01QTEVURURfTE9DQUwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v bWV0aG9kX2lvX3VyaW5nLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJp bmcuYwppbmRleCA0ODY3ZGVkMzUuLjUyYTE4YTM1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMKQEAgLTU0LDYgKzU0LDcgQEAgc3RhdGljIHZvaWQgcGdhaW9f dXJpbmdfc2htZW1faW5pdChib29sIGZpcnN0X3RpbWUpOwogc3RhdGljIHZvaWQgcGdhaW9fdXJp bmdfaW5pdF9iYWNrZW5kKHZvaWQpOwogc3RhdGljIGludAlwZ2Fpb191cmluZ19zdWJtaXQodWlu dDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpOwogc3RhdGljIHZv aWQgcGdhaW9fdXJpbmdfd2FpdF9vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5l cmF0aW9uKTsKK3N0YXRpYyB2b2lkIHBnYWlvX3VyaW5nX2NoZWNrX29uZShQZ0Fpb0hhbmRsZSAq aW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pOwogCiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCiBz dGF0aWMgdm9pZCBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVj dCBpb191cmluZ19zcWUgKnNxZSk7CkBAIC03NSw2ICs3Niw3IEBAIGNvbnN0IElvTWV0aG9kT3Bz IHBnYWlvX3VyaW5nX29wcyA9IHsKIAogCS5zdWJtaXQgPSBwZ2Fpb191cmluZ19zdWJtaXQsCiAJ LndhaXRfb25lID0gcGdhaW9fdXJpbmdfd2FpdF9vbmUsCisJLmNoZWNrX29uZSA9IHBnYWlvX3Vy aW5nX2NoZWNrX29uZSwKIH07CiAKIC8qCkBAIC02NTgsNiArNjYwLDUxIEBAIHBnYWlvX3VyaW5n X3dhaXRfb25lKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQl3 YWl0ZWQpOwogfQogCitzdGF0aWMgdm9pZAorcGdhaW9fdXJpbmdfY2hlY2tfb25lKFBnQWlvSGFu ZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKK3sKKwlQcm9jTnVtYmVyCW93bmVyX3By b2NubyA9IGlvaC0+b3duZXJfcHJvY25vOworCVBnQWlvVXJpbmdDb250ZXh0ICpvd25lcl9jb250 ZXh0ID0gJnBnYWlvX3VyaW5nX2NvbnRleHRzW293bmVyX3Byb2Nub107CisJaW50CQkJd2FpdGVk ID0gMDsKKworCS8qCisJICogVGhpcyBjaGVjayBpcyBub3QgcmVsaWFibGUgd2hlbiBub3QgaG9s ZGluZyB0aGUgY29tcGxldGlvbiBsb2NrLCBidXQKKwkgKiBpdCdzIGEgdXNlZnVsIGNoZWFwIHBy ZS1jaGVjayB0byBzZWUgaWYgaXQncyB3b3J0aCB0cnlpbmcgdG8gZ2V0IHRoZQorCSAqIGNvbXBs ZXRpb24gbG9jay4KKwkgKi8KKwlpZiAoIWlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0 LT5pb191cmluZ19yaW5nKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgY29tcGxldGlv biBsb2NrIGlzIGN1cnJlbnRseSBoZWxkLCB0aGUgaG9sZGVyIHdpbGwgbGlrZWx5CisJICogcHJv Y2VzcyBhbnkgcGVuZGluZyBjb21wbGV0aW9ucywgZ2l2ZSB1cC4KKwkgKi8KKwlpZiAoIUxXTG9j a0NvbmRpdGlvbmFsQWNxdWlyZSgmb3duZXJfY29udGV4dC0+Y29tcGxldGlvbl9sb2NrLCBMV19F WENMVVNJVkUpKQorCQlyZXR1cm47CisKKwlwZ2Fpb19kZWJ1Z19pbyhERUJVRzMsIGlvaCwKKwkJ CQkgICAiY2hlY2tfb25lIGlvX2dlbjogJSIgUFJJdTY0ICIsIHJlZl9nZW46ICUiIFBSSXU2NCAi LCBjeWNsZSAlZCIsCisJCQkJICAgaW9oLT5nZW5lcmF0aW9uLAorCQkJCSAgIHJlZl9nZW5lcmF0 aW9uLAorCQkJCSAgIHdhaXRlZCk7CisKKwkvKgorCSAqIFJlY2hlY2sgaWYgdGhlcmUgYXJlIGFu eSBjb21wbGV0aW9ucywgYW5vdGhlciBiYWNrZW5kIGNvdWxkIGhhdmUKKwkgKiBwcm9jZXNzZWQg dGhlbSBzaW5jZSB3ZSBjaGVja2VkIGFib3ZlLCBvciBvdXIgdW5sb2NrZWQgcHJlLWNoZWNrIGNv dWxkCisJICogaGF2ZSBiZWVuIHJlYWRpbmcgb3V0ZGF0ZWQgdmFsdWVzLgorCSAqCisJICogSXQg aXMgcG9zc2libGUgdGhhdCB0aGUgSU8gaGFuZGxlIGhhcyBiZWVuIHJldXNlZCBzaW5jZSB0aGUg c3RhcnQgb2YKKwkgKiB0aGUgY2FsbCwgYnV0IG5vdyB0aGF0IHdlIGhhdmUgdGhlIGxvY2ssIHdl IGNhbiBqdXN0IGFzIHdlbGwgZHJhaW4gYWxsCisJICogY29tcGxldGlvbnMuCisJICovCisJaWYg KGlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0LT5pb191cmluZ19yaW5nKSkKKwl7CisJ CXBnYWlvX3VyaW5nX2RyYWluX2xvY2tlZChvd25lcl9jb250ZXh0KTsKKwl9CisKKwlMV0xvY2tS ZWxlYXNlKCZvd25lcl9jb250ZXh0LT5jb21wbGV0aW9uX2xvY2spOworfQorCiBzdGF0aWMgdm9p ZAogcGdhaW9fdXJpbmdfc3FfZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJp bmdfc3FlICpzcWUpCiB7Ci0tIAoyLjUzLjAKCg== --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0009-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v15-0009-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7ey49 RnJvbSBlOGJhMjJhMGQ0NTE1Mjc0ZTUwZTJmYjQ3MDA4YzM5ZmFlYzZhYjE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTUgMDkvMTddIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlN RS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNv bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCldoZW4gYSBiYWNrZW5kIGF0dGVtcHRzIHRv IHN0YXJ0IGEgcmVhZCBvbiBhIGJ1ZmZlciBhbmQgZmluZHMgdGhhdCBJL08KaXMgYWxyZWFkeSBp biBwcm9ncmVzcywgaXQgcHJldmlvdXNseSB3YWl0ZWQgZm9yIHRoYXQgSS9PIHRvIGNvbXBsZXRl CmJlZm9yZSBpbml0aWF0aW5nIHJlYWRzIGZvciBhbnkgb3RoZXIgYnVmZmVycy4gQWx0aG91Z2gg dGhlIGJhY2tlbmQgbXVzdApzdGlsbCB3YWl0IGZvciB0aGUgSS9PIHRvIGZpbmlzaCB3aGVuIGxh dGVyIGFjcXVpcmluZyB0aGUgYnVmZmVyLCBpdApzaG91bGQgbm90IG5lZWQgdG8gd2FpdCBhdCBy ZWFkIHN0YXJ0IHRpbWUuIE90aGVyIGJ1ZmZlcnMgbWF5IGJlCmF2YWlsYWJsZSBmb3IgSS9PLCBh bmQgaW4gc29tZSB3b3JrbG9hZHMgdGhpcyB3YWl0aW5nIHNpZ25pZmljYW50bHkKcmVkdWNlcyBj b25jdXJyZW5jeS4KCkZvciBleGFtcGxlLCBpbmRleCBzY2FucyBtYXkgcmVwZWF0ZWRseSByZXF1 ZXN0IHRoZSBzYW1lIGhlYXAgYmxvY2suIElmCnRoZSBiYWNrZW5kIHdhaXRzIGVhY2ggdGltZSBp dCBlbmNvdW50ZXJzIGFuIGluLXByb2dyZXNzIHJlYWQsIHRoZQphY2Nlc3MgcGF0dGVybiBlZmZl Y3RpdmVseSBkZWdlbmVyYXRlcyBpbnRvIHN5bmNocm9ub3VzIEkvTy4gQnkKaW50cm9kdWNpbmcg dGhlIGNvbmNlcHQgb2YgZm9yZWlnbiBJL08gb3BlcmF0aW9ucywgYSBiYWNrZW5kIGNhbiByZWNv cmQKdGhlIGJ1ZmZlcuKAmXMgd2FpdCByZWZlcmVuY2UgYW5kIGRlZmVyIHdhaXRpbmcgdW50aWwg V2FpdFJlYWRCdWZmZXJzKCkKd2hlbiBpdCBhY3R1YWxseSBhY3F1aXJlcyB0aGUgYnVmZmVyLgoK SW4gcmFyZSBjYXNlcywgYSBiYWNrZW5kIG1heSBzdGlsbCBuZWVkIHRvIHdhaXQgd2hlbiBzdGFy dGluZyBhIHJlYWQgaWYKaXQgZW5jb3VudGVycyBhIGJ1ZmZlciBhZnRlciBhbm90aGVyIGJhY2tl bmQgaGFzIHNldCBCTV9JT19JTl9QUk9HUkVTUwpidXQgYmVmb3JlIHRoZSBidWZmZXIgZGVzY3Jp cHRvcuKAmXMgd2FpdCByZWZlcmVuY2UgaGFzIGJlZW4gc2V0LiBTdWNoCndpbmRvd3Mgc2hvdWxk IGJlIGJyaWVmIGFuZCB1bmNvbW1vbi4KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyB8IDQ5 MSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDMyNSBpbnNlcnRpb25zKCspLCAx NjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNDA4ZDc2YzU2Li44NDkzMzc3 MmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0cnVjdCBSZWFkQnVm ZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2CQluYmxvY2tzOwogCWludDE2CQlu YmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQZ0Fpb1dhaXRSZWYgaW9fd3JlZjsK IAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YwppbmRleCA2Y2FkMjcxMzcuLmI3Y2JjNDE2ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMKQEAgLTE4NSw2ICsxODUsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclNvcnRBcnJheQog CVNNZ3JSZWxhdGlvbiBzcmVsOwogfSBTTWdyU29ydEFycmF5OwogCisKKy8qCisgKiBJbiBBc3lu Y1JlYWRCdWZmZXJzKCksIHdoZW4gcHJlcGFyaW5nIGEgYnVmZmVyIGZvciByZWFkaW5nIGFuZCBz ZXR0aW5nCisgKiBCTV9JT19JTl9QUk9HUkVTUywgdGhlIGJ1ZmZlciBtYXkgYWxyZWFkeSBoYXZl IEkvTyBpbiBwcm9ncmVzcyBvciBtYXkKKyAqIGFscmVhZHkgY29udGFpbiB0aGUgZGVzaXJlZCBi bG9jay4gQXN5bmNSZWFkQnVmZmVycygpIG11c3QgZGlzdGluZ3Vpc2gKKyAqIGJldHdlZW4gdGhl c2UgY2FzZXMgKGFuZCB0aGUgY2FzZSB3aGVyZSBpdCBzaG91bGQgaW5pdGlhdGUgSS9PKSBzbyBp dCBjYW4KKyAqIG1hcmsgYW4gaW4tcHJvZ3Jlc3MgYnVmZmVyIGFzIGZvcmVpZ24gSS9PIHJhdGhl ciB0aGFuIHdhaXRpbmcgb24gaXQuCisgKi8KK3R5cGVkZWYgZW51bSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXMKK3sKKwlSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkUsCisJUkVBRF9CVUZGRVJfSU5f UFJPR1JFU1MsCisJUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPLAorfSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXM7CisKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGJvb2wJCXplcm9fZGFtYWdlZF9wYWdl cyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21heHBhZ2VzID0gMTAwOwpAQCAtMTYyOCw0 NSArMTY0Myw2IEBAIENoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24oUmVhZEJ1ZmZlcnNPcGVyYXRp b24gKm9wZXJhdGlvbiwgYm9vbCBpc19jb21wbGV0ZSkKICNlbmRpZgogfQogCi0vKiBoZWxwZXIg Zm9yIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTygpLCB0byBhdm9pZCByZXBldGl0aW9uICovCi1zdGF0 aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2FuU3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwg Ym9vbCBub3dhaXQpCi17Ci0JaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKLQkJcmV0dXJuIFN0 YXJ0TG9jYWxCdWZmZXJJTyhHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpLAot CQkJCQkJCQkgIHRydWUsIG5vd2FpdCk7Ci0JZWxzZQotCQlyZXR1cm4gU3RhcnRCdWZmZXJJTyhH ZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBub3dhaXQpOwotfQotCi0vKgot ICogSGVscGVyIGZvciBBc3luY1JlYWRCdWZmZXJzIHRoYXQgdHJpZXMgdG8gZ2V0IHRoZSBidWZm ZXIgcmVhZHkgZm9yIElPLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2Fu U3RhcnRJTyhCdWZmZXIgYnVmZmVyLCBib29sIG5vd2FpdCkKLXsKLQkvKgotCSAqIElmIHRoaXMg YmFja2VuZCBjdXJyZW50bHkgaGFzIHN0YWdlZCBJTywgd2UgbmVlZCB0byBzdWJtaXQgdGhlIHBl bmRpbmcKLQkgKiBJTyBiZWZvcmUgd2FpdGluZyBmb3IgdGhlIHJpZ2h0IHRvIGlzc3VlIElPLCB0 byBhdm9pZCB0aGUgcG90ZW50aWFsIGZvcgotCSAqIGRlYWRsb2NrcyAoYW5kLCBtb3JlIGNvbW1v bmx5LCB1bm5lY2Vzc2FyeSBkZWxheXMgZm9yIG90aGVyIGJhY2tlbmRzKS4KLQkgKi8KLQlpZiAo IW5vd2FpdCAmJiBwZ2Fpb19oYXZlX3N0YWdlZCgpKQotCXsKLQkJaWYgKFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoYnVmZmVyLCB0cnVlKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8qCi0JCSAq IFVuZm9ydHVuYXRlbHkgU3RhcnRCdWZmZXJJTygpIHJldHVybmluZyBmYWxzZSBkb2Vzbid0IGFs bG93IHRvCi0JCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGJ1ZmZlciBhbHJlYWR5IGJlaW5n IHZhbGlkIGFuZCBJTyBhbHJlYWR5Ci0JCSAqIGJlaW5nIGluIHByb2dyZXNzLiBTaW5jZSBJTyBh bHJlYWR5IGJlaW5nIGluIHByb2dyZXNzIGlzIHF1aXRlCi0JCSAqIHJhcmUsIHRoaXMgYXBwcm9h Y2ggc2VlbXMgZmluZS4KLQkJICovCi0JCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKLQl9Ci0KLQly ZXR1cm4gUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShidWZmZXIsIG5vd2FpdCk7Ci19Ci0KIC8q CiAgKiBXZSB0cmFjayB2YXJpb3VzIHN0YXRzIHJlbGF0ZWQgdG8gYnVmZmVyIGhpdHMuIEJlY2F1 c2UgdGhpcyBpcyBkb25lIGluIGEKICAqIGZldyBzZXBhcmF0ZSBwbGFjZXMsIHRoaXMgaGVscGVy IGV4aXN0cyBmb3IgY29udmVuaWVuY2UuCkBAIC0xODE2LDcgKzE3OTIsNyBAQCBXYWl0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCSAqCiAJCQkgKiB3ZSBm aXJzdCBjaGVjayBpZiB3ZSBhbHJlYWR5IGtub3cgdGhlIElPIGlzIGNvbXBsZXRlLgogCQkJICov Ci0JCQlpZiAoYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOICYmCisJ CQlpZiAoKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyB8fCBhaW9fcmV0LT5yZXN1bHQuc3RhdHVzID09 IFBHQUlPX1JTX1VOS05PV04pICYmCiAJCQkJIXBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0 aW9uLT5pb193cmVmKSkKIAkJCXsKIAkJCQlpbnN0cl90aW1lCWlvX3N0YXJ0ID0gcGdzdGF0X3By ZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOwpAQCAtMTgzNSwxMSArMTgxMSwzMyBAQCBX YWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCQlBc3Nl cnQocGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRpb24tPmlvX3dyZWYpKTsKIAkJCX0KIAot CQkJLyoKLQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBDaGVjayB0aGUg cmVzdWx0cy4gVGhpcwotCQkJICogaW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVy ZSB3ZXJlIGFueS4KLQkJCSAqLwotCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KG9wZXJhdGlv bik7CisJCQlpZiAodW5saWtlbHkob3BlcmF0aW9uLT5mb3JlaWduX2lvKSkKKwkJCXsKKwkJCQlC dWZmZXIJCWJ1ZmZlciA9IG9wZXJhdGlvbi0+YnVmZmVyc1tvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZV07CisJCQkJQnVmZmVyRGVzYyAqZGVzYyA9IEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSA/CisJCQkJ CUdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSkgOgorCQkJCQlHZXRCdWZmZXJE ZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCQkJCXVpbnQzMgkJYnVmX3N0YXRlID0gcGdfYXRvbWlj X3JlYWRfdTY0KCZkZXNjLT5zdGF0ZSk7CisKKwkJCQlpZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQp CisJCQkJeworCQkJCQlvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSArPSAxOworCQkJCQlBc3NlcnQo b3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgPD0gb3BlcmF0aW9uLT5uYmxvY2tzKTsKKworCQkJCQlQ cm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+c3RyYXRlZ3ksCisJCQkJCQkJCQkgb3BlcmF0aW9u LT5yZWwsIG9wZXJhdGlvbi0+cGVyc2lzdGVuY2UsCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5zbWdy LCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5ibG9ja251bSArIG9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJl c3VsdHMuIFRoaXMKKwkJCQkgKiBpbmNsdWRlcyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJl IHdlcmUgYW55LgorCQkJCSAqLworCQkJCVByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRp b24pOworCQkJfQogCQl9CiAKIAkJLyoKQEAgLTE4NzAsNiArMTg2OCwxNTkgQEAgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJLyogTkI6IFJFQURfRE9O RSB0cmFjZXBvaW50IHdhcyBhbHJlYWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sg Ki8KIH0KIAorLyoKKyAqIExvY2FsIHZlcnNpb24gb2YgUHJlcGFyZU5ld1JlYWRCdWZmZXJJTygp LiBIZXJlIGluc3RlYWQgb2YgbG9jYWxidWYuYyB0bworICogYXZvaWQgYW4gZXh0ZXJuYWwgZnVu Y3Rpb24gY2FsbC4KKyAqLworc3RhdGljIFByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cworUHJlcGFy ZU5ld0xvY2FsUmVhZEJ1ZmZlcklPKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCisJ CQkJCQkJQnVmZmVyIGJ1ZmZlcikKK3sKKwlCdWZmZXJEZXNjICpkZXNjID0gR2V0TG9jYWxCdWZm ZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwl1aW50NjQJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21p Y19yZWFkX3U2NCgmZGVzYy0+c3RhdGUpOworCisJLyogQWxyZWFkeSB2YWxpZCwgbm8gd29yayB0 byBkbyAqLworCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwl7CisJCXBnYWlvX3dyZWZfY2xl YXIoJm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJFQURZX0RP TkU7CisJfQorCisJcGdhaW9fc3VibWl0X3N0YWdlZCgpOworCisJaWYgKHBnYWlvX3dyZWZfdmFs aWQoJmRlc2MtPmlvX3dyZWYpKQorCXsKKwkJb3BlcmF0aW9uLT5pb193cmVmID0gZGVzYy0+aW9f d3JlZjsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJcmV0dXJuIFJFQURfQlVG RkVSX0lOX1BST0dSRVNTOworCX0KKworCXJldHVybiBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU87 Cit9CisKKy8qCisgKiBUcnkgdG8gc3RhcnQgSU8gb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiBhIG5l dyBydW4gb2YgYmxvY2tzLiBJZiBBSU8gaXMgaW4KKyAqIHByb2dyZXNzLCBiZSBpdCBpbiB0aGlz IGJhY2tlbmQgb3IgYW5vdGhlciBiYWNrZW5kLCB3ZSBqdXN0IGFzc29jaWF0ZSB0aGUKKyAqIHdh aXQgcmVmZXJlbmNlIHdpdGggdGhlIG9wZXJhdGlvbiBhbmQgd2FpdCBpbiBXYWl0UmVhZEJ1ZmZl cnMoKS4gVGhpcyB0dXJucworICogb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2Ug aW4gdHdvIHdvcmtsb2FkczoKKyAqCisgKiAxKSBBIHJlYWQgc3RyZWFtIHRoYXQgaGFzIHRvIHJl YWQgdGhlIHNhbWUgYmxvY2sgbXVsdGlwbGUgdGltZXMgd2l0aGluIHRoZQorICogICAgcmVhZGFo ZWFkIGRpc3RhbmNlLiBUaGlzIGNhbiBoYXBwZW4gZS5nLiBmb3IgdGhlIHRhYmxlIGFjY2Vzc2Vz IG9mIGFuCisgKiAgICBpbmRleCBzY2FuLgorICoKKyAqIDIpIENvbmN1cnJlbnQgc2NhbnMgYnkg bXVsdGlwbGUgYmFja2VuZHMgb24gdGhlIHNhbWUgcmVsYXRpb24uCisgKgorICogSWYgd2Ugd2Vy ZSB0byBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBpbi1wcm9ncmVzcyBJTywgd2UnZCBub3Qg YmUgYWJsZQorICogdG8ga2VlcCBlbm91Z2ggSS9PIGluIGZsaWdodC4KKyAqCisgKiBJZiB3ZSBk byBmaW5kIHRoZXJlIGlzIG9uZ29pbmcgSS9PIGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQgdXAgYSAx LWJsb2NrCisgKiBSZWFkQnVmZmVyc09wZXJhdGlvbiB0aGF0IFdhaXRSZWFkQnVmZmVycyB0aGVu IGNhbiB3YWl0IG9uLgorICoKKyAqIEl0J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tlbmQg aGFzIHN0YXJ0ZWQgSU8gb24gdGhlIGJ1ZmZlciBidXQgbm90IHlldAorICogc2V0IGl0cyB3YWl0 IHJlZmVyZW5jZS4gSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gd2FpdCBm b3IKKyAqIGVpdGhlciB0aGUgd2FpdCByZWZlcmVuY2UgdG8gYmUgdmFsaWQgb3IgdGhlIElPIHRv IGJlIGRvbmUuCisgKi8KK3N0YXRpYyBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK1ByZXBhcmVO ZXdSZWFkQnVmZmVySU8oUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKKwkJCQkJICAg QnVmZmVyIGJ1ZmZlcikKK3sKKwl1aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNj OworCisJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwkJcmV0dXJuIFByZXBhcmVOZXdMb2Nh bFJlYWRCdWZmZXJJTyhvcGVyYXRpb24sIGJ1ZmZlcik7CisKKwlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVm ZmVyIC0gMSk7CisKKwlmb3IgKDs7KQorCXsKKwkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNj KTsKKworCQkvKiBBbHJlYWR5IHZhbGlkLCBubyB3b3JrIHRvIGRvICovCisJCWlmIChidWZfc3Rh dGUgJiBCTV9WQUxJRCkKKwkJeworCQkJVW5sb2NrQnVmSGRyKGRlc2MpOworCQkJcGdhaW9fd3Jl Zl9jbGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKKwkJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJF QURZX0RPTkU7CisJCX0KKworCQlpZiAoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpCisJ CXsKKwkJCS8qIEpvaW4gZXhpc3RpbmcgcmVhZCAqLworCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQo JmRlc2MtPmlvX3dyZWYpKQorCQkJeworCQkJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGRlc2MtPmlv X3dyZWY7CisJCQkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQkJcmV0dXJuIFJFQURfQlVGRkVSX0lOX1BST0dSRVNTOworCQkJfQorCisJ CQkvKgorCQkJICogSWYgdGhlIHdhaXQgcmVmIGlzIG5vdCB2YWxpZCBidXQgdGhlIElPIGlzIGlu IHByb2dyZXNzLCBzb21lb25lCisJCQkgKiBlbHNlIHN0YXJ0ZWQgSU8gYnV0IGhhc24ndCBzZXQg dGhlIHdhaXQgcmVmIHlldC4gV2UgaGF2ZSBubworCQkJICogY2hvaWNlIGJ1dCB0byB3YWl0IHVu dGlsIHRoZSB3YWl0IHJlZiBpcyBzZXQgb3IgdGhlIElPCisJCQkgKiBjb21wbGV0ZXMuCisJCQkg Ki8KKwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKKwkJ CVdhaXRJTyhkZXNjKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTm8gSU8gaW4g cHJvZ3Jlc3MgYW5kIG5vdCBhbHJlYWR5IHZhbGlkOyBXZSB3aWxsIHN0YXJ0IElPLiBJdCdzCisJ CSAqIHBvc3NpYmxlIHRoYXQgdGhlIElPIHdhcyBpbiBwcm9ncmVzcyBhbmQgbmV2ZXIgYmVjYW1l IHZhbGlkIGJlY2F1c2UKKwkJICogdGhlIElPIGVycm9yZWQgb3V0LiBXZSdsbCBkbyB0aGUgSU8g b3Vyc2VsdmVzLgorCQkgKi8KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2MsIGJ1Zl9zdGF0ZSwgQk1f SU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVtZW1iZXJCdWZmZXJJTyhD dXJyZW50UmVzb3VyY2VPd25lciwKKwkJCQkJCQkJCSAgQnVmZmVyRGVzY3JpcHRvckdldEJ1ZmZl cihkZXNjKSk7CisKKwkJcmV0dXJuIFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTzsKKwl9Cit9CisK KworLyoKKyAqIFdoZW4gYnVpbGRpbmcgYSBuZXcgSU8gZnJvbSBtdWx0aXBsZSBidWZmZXJzLCB3 ZSB3b24ndCBpbmNsdWRlIGJ1ZmZlcnMKKyAqIHRoYXQgYXJlIGFscmVhZHkgdmFsaWQgb3IgYWxy ZWFkeSBpbiBwcm9ncmVzcy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZQorICogdXNlZCBm b3IgYWRkaXRpb25hbCBhZGphY2VudCBidWZmZXJzIGZvbGxvd2luZyB0aGUgaGVhZCBidWZmZXIg aW4gYSBuZXcgSU8uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIHN1Y2Nl c3NmdWxseSBwcmVwYXJlZCBmb3IgSU8gYW5kIGZhbHNlIGlmIGl0CisgKiBpcyByZWplY3RlZCBh bmQgdGhlIHJlYWQgSU8gc2hvdWxkIG5vdCBpbmNsdWRlIHRoaXMgYnVmZmVyLgorKi8KK3N0YXRp YyBib29sCitQcmVwYXJlQWRkaXRpb25hbFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlcikKK3sKKwl1 aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNjOworCisJaWYgKEJ1ZmZlcklzTG9j YWwoYnVmZmVyKSkKKwl7CisJCWRlc2MgPSBHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZl ciAtIDEpOworCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0YXRlKTsK KwkJLyogTG9jYWwgYnVmZmVycyBkb24ndCB1c2UgQk1fSU9fSU5fUFJPR1JFU1MgKi8KKwkJaWYg KGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEIHx8IHBnYWlvX3dyZWZfdmFsaWQoJmRlc2MtPmlvX3dyZWYp KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1 ZmZlciAtIDEpOworCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGRlc2MpOworCQlpZiAoYnVmX3N0 YXRlICYgKEJNX1ZBTElEIHwgQk1fSU9fSU5fUFJPR1JFU1MpKQorCQl7CisJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2Ms IGJ1Zl9zdGF0ZSwgQk1fSU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVt ZW1iZXJCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKwogLyoKICAqIEluaXRpYXRlIElPIGZvciB0aGUgUmVhZEJ1ZmZlcnNPcGVy YXRpb24KICAqCkBAIC0xOTAzLDcgKzIwNTQsNzUgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJdm9pZAkg ICAqaW9fcGFnZXNbTUFYX0lPX0NPTUJJTkVfTElNSVRdOwogCUlPQ29udGV4dAlpb19jb250ZXh0 OwogCUlPT2JqZWN0CWlvX29iamVjdDsKLQlib29sCQlkaWRfc3RhcnRfaW87CisJaW5zdHJfdGlt ZQlpb19zdGFydDsKKwlQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMgc3RhdHVzOworCisJLyoKKwkg KiBXZSBtdXN0IGdldCBhbiBJTyBoYW5kbGUgYmVmb3JlIFN0YXJ0TmV3QnVmZmVyUmVhZElPKCks IGFzCisJICogcGdhaW9faW9fYWNxdWlyZSgpIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3 YW50IGFmdGVyIHNldHRpbmcKKwkgKiBJT19JTl9QUk9HUkVTUy4gSWYgd2UgZG9uJ3QgbmVlZCB0 byBkbyB0aGUgSU8sIHdlJ2xsIHJlbGVhc2UgdGhlCisJICogaGFuZGxlLgorCSAqCisJICogSWYg d2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZvcmUgd2UgY2FuIGdldCBhIGhhbmRsZSwgc3VibWl0 CisJICogYWxyZWFkeS1zdGFnZWQgSU8gZmlyc3QsIHNvIHRoYXQgb3RoZXIgYmFja2VuZHMgZG9u J3QgbmVlZCB0byB3YWl0LgorCSAqIFRoZXJlIHdvdWxkbid0IGJlIGEgZGVhZGxvY2sgcmlzaywg YXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3QgbmVlZHMgdG8KKwkgKiB3YWl0IGZvciBhbHJlYWR5 IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFkZGl0aW9uYWwgbG9ja3MsCisJ ICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNlIHVuZGVzaXJhYmxlIHdhaXRzLgorCSAqCisJICog QSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd291bGQgYWxsb3cgdXMgdG8gbWVhc3Vy ZSB0aGUgdGltZSBpbgorCSAqIHBnYWlvX2lvX2FjcXVpcmUoKSB3aXRob3V0IGNhdXNpbmcgdW5k dWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiwKKwkgKiBub24tYmxvY2tpbmcsIGNhc2Uu ICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBnc3RhdHMgaW5mcmFzdHJ1Y3R1cmUKKwkgKiBkb2Vz bid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBpdCBhKSBhc3NlcnRzIHRoYXQgYW4gb3BlcmF0aW9u IGNhbid0CisJICogaGF2ZSB0aW1lIHdpdGhvdXQgb3BlcmF0aW9ucyBiKSBkb2Vzbid0IGhhdmUg YW4gQVBJIHRvIHJlcG9ydAorCSAqICJhY2N1bXVsYXRlZCIgdGltZS4KKwkgKi8KKwlpb2ggPSBw Z2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9uLT5pb19y ZXR1cm4pOworCWlmICh1bmxpa2VseSghaW9oKSkKKwl7CisJCXBnYWlvX3N1Ym1pdF9zdGFnZWQo KTsKKwkJaW9oID0gcGdhaW9faW9fYWNxdWlyZShDdXJyZW50UmVzb3VyY2VPd25lciwgJm9wZXJh dGlvbi0+aW9fcmV0dXJuKTsKKwl9CisKKwlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSBmYWxzZTsK KworCS8qIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVhZCBi dWZmZXIgKi8KKwlpZiAoKHN0YXR1cyA9IFByZXBhcmVOZXdSZWFkQnVmZmVySU8ob3BlcmF0aW9u LCBidWZmZXJzW25ibG9ja3NfZG9uZV0pKSA8CisJCVJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTykK Kwl7CisJCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKKwkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOwor CQlpZiAoc3RhdHVzID09IFJFQURfQlVGRkVSX0FMUkVBRFlfRE9ORSkKKwkJeworCQkJLyoKKwkJ CSAqIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBibG9jaywgd2UncmUg ZG9uZS4KKwkJCSAqCisJCQkgKiBXaGVuIElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUg aXMgdXBkYXRlZCBpbgorCQkJICogUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KCksIGJ1dCB0aGF0 IGlzIG5vdCBjYWxsZWQgaWYgbm8gSU8gaXMKKwkJCSAqIG5lY2Vzc2FyeS4gVGh1cyB1cGRhdGUg aGVyZS4KKwkJCSAqLworCQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsKKwkJCUFzc2Vy dChvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkv KgorCQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2gKKwkJCSAqIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3Mg aW4gUGluQnVmZmVyRm9yQmxvY2soKS4gVGhlCisJCQkgKiBvdGhlciBiYWNrZW5kIHdpbGwgdHJh Y2sgdGhpcyBhcyBhICdyZWFkJy4KKwkJCSAqLworCQkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRp b24tPnN0cmF0ZWd5LAorCQkJCQkJCSBvcGVyYXRpb24tPnJlbCwgb3BlcmF0aW9uLT5wZXJzaXN0 ZW5jZSwKKwkJCQkJCQkgb3BlcmF0aW9uLT5zbWdyLCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJ CQkJIG9wZXJhdGlvbi0+YmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBUaGUgSU8gaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyAq LworCQlBc3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX0lOX1BST0dSRVNTKTsKKwkJQ2hlY2tS ZWFkQnVmZmVyc09wZXJhdGlvbihvcGVyYXRpb24sIGZhbHNlKTsKKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyogV2UgY2FuIHJlYWQgaW4gYXQgbGVhc3QgdGhlIGhlYWQgYnVmZmVyIC4gKi8KKwlB c3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTyk7CiAKIAkvKgogCSAqIFdo ZW4gdGhpcyBJTyBpcyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LCBlaXRoZXIgYmVjYXVzZSB0aGUg Y2FsbGVyIHdpbGwKQEAgLTE5NTQsMTM4ICsyMTczLDc0IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVh ZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCSAq LwogCXBnc3RhdF9wcmVwYXJlX3JlcG9ydF9jaGVja3N1bV9mYWlsdXJlKG9wZXJhdGlvbi0+c21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkKTsKIAotCS8qCi0JICogR2V0IElPIGhhbmRs ZSBiZWZvcmUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKCksIGFzIHBnYWlvX2lvX2FjcXVpcmUoKQot CSAqIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3YW50IGFmdGVyIHNldHRpbmcgSU9fSU5f UFJPR1JFU1MuCi0JICoKLQkgKiBJZiB3ZSBuZWVkIHRvIHdhaXQgZm9yIElPIGJlZm9yZSB3ZSBj YW4gZ2V0IGEgaGFuZGxlLCBzdWJtaXQKLQkgKiBhbHJlYWR5LXN0YWdlZCBJTyBmaXJzdCwgc28g dGhhdCBvdGhlciBiYWNrZW5kcyBkb24ndCBuZWVkIHRvIHdhaXQuCi0JICogVGhlcmUgd291bGRu J3QgYmUgYSBkZWFkbG9jayByaXNrLCBhcyBwZ2Fpb19pb19hY3F1aXJlKCkganVzdCBuZWVkcyB0 bwotCSAqIHdhaXQgZm9yIGFscmVhZHkgc3VibWl0dGVkIElPLCB3aGljaCBkb2Vzbid0IHJlcXVp cmUgYWRkaXRpb25hbCBsb2NrcywKLQkgKiBidXQgaXQgY291bGQgc3RpbGwgY2F1c2UgdW5kZXNp cmFibGUgd2FpdHMuCi0JICoKLQkgKiBBIHNlY29uZGFyeSBiZW5lZml0IGlzIHRoYXQgdGhpcyB3 b3VsZCBhbGxvdyB1cyB0byBtZWFzdXJlIHRoZSB0aW1lIGluCi0JICogcGdhaW9faW9fYWNxdWly ZSgpIHdpdGhvdXQgY2F1c2luZyB1bmR1ZSB0aW1lciBvdmVyaGVhZCBpbiB0aGUgY29tbW9uLAot CSAqIG5vbi1ibG9ja2luZywgY2FzZS4gIEhvd2V2ZXIsIGN1cnJlbnRseSB0aGUgcGdzdGF0cyBp bmZyYXN0cnVjdHVyZQotCSAqIGRvZXNuJ3QgcmVhbGx5IGFsbG93IHRoYXQsIGFzIGl0IGEpIGFz c2VydHMgdGhhdCBhbiBvcGVyYXRpb24gY2FuJ3QKLQkgKiBoYXZlIHRpbWUgd2l0aG91dCBvcGVy YXRpb25zIGIpIGRvZXNuJ3QgaGF2ZSBhbiBBUEkgdG8gcmVwb3J0Ci0JICogImFjY3VtdWxhdGVk IiB0aW1lLgotCSAqLwotCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmVfbmIoQ3VycmVudFJlc291cmNl T3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JaWYgKHVubGlrZWx5KCFpb2gpKQotCXsK LQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCi0JCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmUoQ3Vy cmVudFJlc291cmNlT3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JfQorCUFzc2VydChp b19idWZmZXJzWzBdID09IGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSk7CisJaW9fcGFnZXNbMF0gPSBC dWZmZXJHZXRCbG9jayhidWZmZXJzW25ibG9ja3NfZG9uZV0pOworCWlvX2J1ZmZlcnNfbGVuID0g MTsKIAogCS8qCi0JICogQ2hlY2sgaWYgd2UgY2FuIHN0YXJ0IElPIG9uIHRoZSBmaXJzdCB0by1i ZS1yZWFkIGJ1ZmZlci4KLQkgKgotCSAqIElmIGFuIEkvTyBpcyBhbHJlYWR5IGluIHByb2dyZXNz IGluIGFub3RoZXIgYmFja2VuZCwgd2Ugd2FudCB0byB3YWl0Ci0JICogZm9yIHRoZSBvdXRjb21l OiBlaXRoZXIgZG9uZSwgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdpbGwKLQkgKiBy ZXRyeS4KKwkgKiBIb3cgbWFueSBuZWlnaGJvcmluZy1vbi1kaXNrIGJsb2NrcyBjYW4gd2Ugc2Nh dHRlci1yZWFkIGludG8gb3RoZXIKKwkgKiBidWZmZXJzIGF0IHRoZSBzYW1lIHRpbWU/ICBJbiB0 aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FpdCBpZiB3ZSBzZWUgYW4gSS9PCisJICogYWxyZWFkeSBpbiBw cm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJNX0lPX0lOX1BST0dSRVNTIGZvciB0aGUgaGVhZAor CSAqIGJsb2NrLCBzbyB3ZSBzaG91bGQgZ2V0IG9uIHdpdGggdGhhdCBJL08gYXMgc29vbiBhcyBw b3NzaWJsZS4KIAkgKi8KLQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW25ibG9j a3NfZG9uZV0sIGZhbHNlKSkKKwlmb3IgKGludCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9w ZXJhdGlvbi0+bmJsb2NrczsgaSsrKQogCXsKLQkJLyoKLQkJICogU29tZW9uZSBlbHNlIGhhcyBh bHJlYWR5IGNvbXBsZXRlZCB0aGlzIGJsb2NrLCB3ZSdyZSBkb25lLgotCQkgKgotCQkgKiBXaGVu IElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUgaXMgdXBkYXRlZCBpbgotCQkgKiBQcm9j ZXNzUmVhZEJ1ZmZlcnNSZXN1bHQoKSwgYnV0IHRoYXQgaXMgbm90IGNhbGxlZCBpZiBubyBJTyBp cwotCQkgKiBuZWNlc3NhcnkuIFRodXMgdXBkYXRlIGhlcmUuCi0JCSAqLwotCQlvcGVyYXRpb24t Pm5ibG9ja3NfZG9uZSArPSAxOwotCQkqbmJsb2Nrc19wcm9ncmVzcyA9IDE7CisJCWlmICghUHJl cGFyZUFkZGl0aW9uYWxSZWFkQnVmZmVyKGJ1ZmZlcnNbaV0pKQorCQkJYnJlYWs7CisJCS8qIE11 c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFdKSA9PQorCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmZmVyc1tpXSkgLSAxKTsKKwkJQXNzZXJ0KGlvX2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09 IGJ1ZmZlcnNbaV0pOwogCi0JCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKLQkJcGdhaW9fd3JlZl9j bGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKLQkJZGlkX3N0YXJ0X2lvID0gZmFsc2U7Ci0KLQkJ LyoKLQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2ggaXQKLQkJICogbXVzdCBoYXZlIHN0YXJ0ZWQgb3V0IGFzIGEgbWlzcyBp biBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUgb3RoZXIKLQkJICogYmFja2VuZCB3aWxsIHRyYWNr IHRoaXMgYXMgYSAncmVhZCcuCi0JCSAqLwotCQlQcm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+ c3RyYXRlZ3ksIG9wZXJhdGlvbi0+cmVsLCBwZXJzaXN0ZW5jZSwKLQkJCQkJCSBvcGVyYXRpb24t PnNtZ3IsIGZvcmtudW0sCi0JCQkJCQkgYmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSk7CisJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0QmxvY2soYnVmZmVy c1tpXSk7CiAJfQorCisJLyogZ2V0IGEgcmVmZXJlbmNlIHRvIHdhaXQgZm9yIGluIFdhaXRSZWFk QnVmZmVycygpICovCisJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3BlcmF0aW9uLT5pb193cmVm KTsKKworCS8qIHByb3ZpZGUgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB0aGUgY29tcGxldGlvbiBj YWxsYmFja3MgKi8KKwlwZ2Fpb19pb19zZXRfaGFuZGxlX2RhdGFfMzIoaW9oLCAodWludDMyICop IGlvX2J1ZmZlcnMsIGlvX2J1ZmZlcnNfbGVuKTsKKworCXBnYWlvX2lvX3JlZ2lzdGVyX2NhbGxi YWNrcyhpb2gsCisJCQkJCQkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAgPwor CQkJCQkJCQlQR0FJT19IQ0JfTE9DQUxfQlVGRkVSX1JFQURWIDoKKwkJCQkJCQkJUEdBSU9fSENC X1NIQVJFRF9CVUZGRVJfUkVBRFYsCisJCQkJCQkJCWZsYWdzKTsKKworCXBnYWlvX2lvX3NldF9m bGFnKGlvaCwgaW9oX2ZsYWdzKTsKKworCS8qIC0tLQorCSogRXZlbiB0aG91Z2ggd2UncmUgdHJ5 aW5nIHRvIGlzc3VlIElPIGFzeW5jaHJvbm91c2x5LCB0cmFjayB0aGUgdGltZQorCSogaW4gc21n cnN0YXJ0cmVhZHYoKToKKwkqIC0gaWYgaW9fbWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdp bGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCisJKiAgIGltbWVkaWF0ZWx5CisJKiAtIHRoZSBpbyBt ZXRob2QgbWlnaHQgbm90IHN1cHBvcnQgdGhlIElPIChlLmcuIHdvcmtlciBJTyBmb3IgYSB0ZW1w CisJKiAgIHRhYmxlKQorCSogLS0tCisJKi8KKwlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lv X3RpbWUodHJhY2tfaW9fdGltaW5nKTsKKwlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+ c21nciwgZm9ya251bSwKKwkJCQkgICBibG9ja251bSArIG5ibG9ja3NfZG9uZSwKKwkJCQkgICBp b19wYWdlcywgaW9fYnVmZmVyc19sZW4pOworCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29i amVjdCwgaW9fY29udGV4dCwgSU9PUF9SRUFELAorCQkJCQkJCWlvX3N0YXJ0LCAxLCBpb19idWZm ZXJzX2xlbiAqIEJMQ0tTWik7CisKKwlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf VEVNUCkKKwkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47 CiAJZWxzZQotCXsKLQkJaW5zdHJfdGltZQlpb19zdGFydDsKKwkJcGdCdWZmZXJVc2FnZS5zaGFy ZWRfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwogCi0JCS8qIFdlIGZvdW5kIGEgYnVmZmVy IHRoYXQgd2UgbmVlZCB0byByZWFkIGluLiAqLwotCQlBc3NlcnQoaW9fYnVmZmVyc1swXSA9PSBi dWZmZXJzW25ibG9ja3NfZG9uZV0pOwotCQlpb19wYWdlc1swXSA9IEJ1ZmZlckdldEJsb2NrKGJ1 ZmZlcnNbbmJsb2Nrc19kb25lXSk7Ci0JCWlvX2J1ZmZlcnNfbGVuID0gMTsKKwkvKgorCSAqIFRy YWNrIHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0 LiBPdGhlcndpc2UKKwkgKiB3ZSBjb3VsZCBlbmQgdXAgaXNzdWluZyBhIGxvdCBvZiBJTyBpbiBh IHNob3J0IHRpbWVzcGFuLCBkZXNwaXRlIGEgbG93CisJICogY29zdCBsaW1pdC4KKwkgKi8KKwlp ZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBh Z2VNaXNzICogaW9fYnVmZmVyc19sZW47CiAKLQkJLyoKLQkJICogSG93IG1hbnkgbmVpZ2hib3Jp bmctb24tZGlzayBibG9ja3MgY2FuIHdlIHNjYXR0ZXItcmVhZCBpbnRvIG90aGVyCi0JCSAqIGJ1 ZmZlcnMgYXQgdGhlIHNhbWUgdGltZT8gIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YWl0IGlmIHdl IHNlZSBhbgotCQkgKiBJL08gYWxyZWFkeSBpbiBwcm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJN X0lPX0lOX1BST0dSRVNTIGZvciB0aGUKLQkJICogaGVhZCBibG9jaywgc28gd2Ugc2hvdWxkIGdl dCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNvb24gYXMgcG9zc2libGUuCi0JCSAqLwotCQlmb3IgKGlu dCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9wZXJhdGlvbi0+bmJsb2NrczsgaSsrKQotCQl7 Ci0JCQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW2ldLCB0cnVlKSkKLQkJCQli cmVhazsKLQkJCS8qIE11c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KLQkJCUFz c2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2kgLSAxXSkgPT0KLQkJCQkgICBCdWZm ZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2ldKSAtIDEpOwotCQkJQXNzZXJ0KGlvX2J1ZmZlcnNb aW9fYnVmZmVyc19sZW5dID09IGJ1ZmZlcnNbaV0pOworCSpuYmxvY2tzX3Byb2dyZXNzID0gaW9f YnVmZmVyc19sZW47CiAKLQkJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0 QmxvY2soYnVmZmVyc1tpXSk7Ci0JCX0KLQotCQkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBm b3IgaW4gV2FpdFJlYWRCdWZmZXJzKCkgKi8KLQkJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3Bl cmF0aW9uLT5pb193cmVmKTsKLQotCQkvKiBwcm92aWRlIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgdG8g dGhlIGNvbXBsZXRpb24gY2FsbGJhY2tzICovCi0JCXBnYWlvX2lvX3NldF9oYW5kbGVfZGF0YV8z Mihpb2gsICh1aW50MzIgKikgaW9fYnVmZmVycywgaW9fYnVmZmVyc19sZW4pOwotCi0JCXBnYWlv X2lvX3JlZ2lzdGVyX2NhbGxiYWNrcyhpb2gsCi0JCQkJCQkJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QID8KLQkJCQkJCQkJCVBHQUlPX0hDQl9MT0NBTF9CVUZGRVJfUkVBRFYg OgotCQkJCQkJCQkJUEdBSU9fSENCX1NIQVJFRF9CVUZGRVJfUkVBRFYsCi0JCQkJCQkJCQlmbGFn cyk7Ci0KLQkJcGdhaW9faW9fc2V0X2ZsYWcoaW9oLCBpb2hfZmxhZ3MpOwotCi0JCS8qIC0tLQot CQkgKiBFdmVuIHRob3VnaCB3ZSdyZSB0cnlpbmcgdG8gaXNzdWUgSU8gYXN5bmNocm9ub3VzbHks IHRyYWNrIHRoZSB0aW1lCi0JCSAqIGluIHNtZ3JzdGFydHJlYWR2KCk6Ci0JCSAqIC0gaWYgaW9f bWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCi0J CSAqICAgaW1tZWRpYXRlbHkKLQkJICogLSB0aGUgaW8gbWV0aG9kIG1pZ2h0IG5vdCBzdXBwb3J0 IHRoZSBJTyAoZS5nLiB3b3JrZXIgSU8gZm9yIGEgdGVtcAotCQkgKiAgIHRhYmxlKQotCQkgKiAt LS0KLQkJICovCi0JCWlvX3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9fdGltZSh0cmFja19pb190 aW1pbmcpOwotCQlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+c21nciwgZm9ya251bSwK LQkJCQkJICAgYmxvY2tudW0gKyBuYmxvY2tzX2RvbmUsCi0JCQkJCSAgIGlvX3BhZ2VzLCBpb19i dWZmZXJzX2xlbik7Ci0JCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9SRUFELAotCQkJCQkJCQlpb19zdGFydCwgMSwgaW9fYnVmZmVyc19sZW4gKiBC TENLU1opOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQotCQkJ cGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47Ci0JCWVsc2UK LQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfcmVhZCArPSBpb19idWZmZXJzX2xlbjsKLQot CQkvKgotCQkgKiBUcmFjayB2YWN1dW0gY29zdCB3aGVuIGlzc3VpbmcgSU8sIG5vdCBhZnRlciB3 YWl0aW5nIGZvciBpdC4KLQkJICogT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCBpc3N1aW5nIGEg bG90IG9mIElPIGluIGEgc2hvcnQgdGltZXNwYW4sCi0JCSAqIGRlc3BpdGUgYSBsb3cgY29zdCBs aW1pdC4KLQkJICovCi0JCWlmIChWYWN1dW1Db3N0QWN0aXZlKQotCQkJVmFjdXVtQ29zdEJhbGFu Y2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzICogaW9fYnVmZmVyc19sZW47Ci0KLQkJKm5ibG9ja3Nf cHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKLQkJZGlkX3N0YXJ0X2lvID0gdHJ1ZTsKLQl9Ci0K LQlyZXR1cm4gZGlkX3N0YXJ0X2lvOworCXJldHVybiB0cnVlOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBlYjk0MzBiNWQuLjZlMjBkOTMxNSAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTIzNjcsNiArMjM2Nyw3IEBAIFByZWRpY2F0ZUxvY2tEYXRhCiBQcmVk aWNhdGVMb2NrVGFyZ2V0VHlwZQogUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIFByZXBQYXJhbGxlbFJl c3RvcmVQdHJUeXBlCitQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKIFByZXBhcmVTdG10CiBQcmVw YXJlZFN0YXRlbWVudAogUHJlc29ydGVkS2V5RGF0YQotLSAKMi41My4wCgo= --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0010-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Disposition: attachment; filename="v15-0010-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7ey28 RnJvbSAzMmE1ZGY1NjNiZjMxMTU3MzFkN2Q0YWYxZjU0M2M5NDk4MDlkOWNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjoyNTo0MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDEw LzE3XSBXSVA6IHJlYWRfc3RyZWFtOiBJc3N1ZSBJTyBzeW5jaHJvbm91c2x5IHdoaWxlIGluCiBm YXN0IHBhdGgKCldoaWxlIGluIGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdo dCBlbmNvdW50ZXIKc3luY2hyb25vdXNseS4gQmVjYXVzZSB3ZSBhcmUsIHJpZ2h0IG5vdywgbm90 IHJlYWRpbmcgYWhlYWQsIGRpc3BhdGNoaW5nIGFueQpvY2Nhc2lvbmFsIElPIHRvIHdvcmtlcnMg d291bGQgaGF2ZSB0aGUgb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2VycywKd2l0aG91 dCBhbnkgcmVhbGlzdGljIGNoYW5jZSBvZiB0aGUgSU8gY29tcGxldGluZyBiZWZvcmUgd2UgbmVl ZCBpdC4KCkF1dGhvcjoKUmV2aWV3ZWQtYnk6CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vCkJhY2twYXRjaDoKLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5j IHwgMTUgKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGNkNTRjMWE3NC4uMzY2N2Q2 N2FiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTgzMyw2ICs4MzMs MTkgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoq cGVyX2J1ZmZlcl9kYXRhKQogCQkJaWYgKHN0cmVhbS0+YWR2aWNlX2VuYWJsZWQpCiAJCQkJZmxh Z3MgfD0gUkVBRF9CVUZGRVJTX0lTU1VFX0FEVklDRTsKIAorCQkJLyoKKwkJCSAqIFdoaWxlIGlu IGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdodCBlbmNvdW50ZXIKKwkJCSAq IHN5bmNocm9ub3VzbHkuIEJlY2F1c2Ugd2UgYXJlLCByaWdodCBub3csIG5vdCByZWFkaW5nIGFo ZWFkLAorCQkJICogZGlzcGF0Y2hpbmcgYW55IG9jY2FzaW9uYWwgSU8gdG8gd29ya2VycyB3b3Vs ZCBoYXZlIHRoZQorCQkJICogb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2Vycywgd2l0 aG91dCBhbnkgcmVhbGlzdGljCisJCQkgKiBjaGFuY2Ugb2YgdGhlIElPIGNvbXBsZXRpbmcgYmVm b3JlIHdlIG5lZWQgaXQuIFdlIHdpbGwgc3dpdGNoCisJCQkgKiB0byBub24tc3luY2hyb25vdXMg SU8gYWZ0ZXIgdGhpcy4KKwkJCSAqCisJCQkgKiBYWFg6IFNob3VsZCB3ZSBkbyBzbyBvbmx5IGZv ciB3b3JrZXIsIG9yIGFsc28gaW9fdXJpbmc/IFRoZXJlJ3MKKwkJCSAqIG5vdCBtdWNoIGRpc3Bh dGNoIG92ZXJoZWFkIHdpdGggaW9fdXJpbmcsIGNvbXBhcmVkIHRvIHdvcmtlci4uLgorCQkJICov CisJCQlmbGFncyB8PSBSRUFEX0JVRkZFUlNfU1lOQ0hST05PVVNMWTsKKwogCQkJLyoKIAkJCSAq IFBpbiBhIGJ1ZmZlciBmb3IgdGhlIG5leHQgY2FsbC4gIFNhbWUgYnVmZmVyIGVudHJ5LCBhbmQK IAkJCSAqIGFyYml0cmFyeSBJL08gZW50cnkgKHRoZXkncmUgYWxsIGZyZWUpLiAgV2UgZG9uJ3Qg aGF2ZSB0bwpAQCAtODYwLDYgKzg3Myw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJCXN0cmVhbS0+aW9zX2lu X3Byb2dyZXNzID0gMTsKIAkJCXN0cmVhbS0+aW9zWzBdLmJ1ZmZlcl9pbmRleCA9IG9sZGVzdF9i dWZmZXJfaW5kZXg7CiAJCQlzdHJlYW0tPnNlcV9ibG9ja251bSA9IG5leHRfYmxvY2tudW0gKyAx OworCisJCQkvKiBGSVhNRTogaXQgd291bGQgcHJvYmFibHkgd29ydGggaXNzdWluZyByZWFkYWhl YWQgaGVyZSAqLwogCQl9CiAJCWVsc2UKIAkJewotLSAKMi41My4wCgo= --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0008-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v15-0008-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7ey610 RnJvbSA4ZWRlNDQwYjEyNWJjMzZjZjBlYjIwODdhOTM3MTk0NGMzNjUzZjY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTUgMDgvMTddIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNl cyBjb3VudCBidWZmZXIgaGl0cywgcmVxdWlyaW5nIHF1aXRlIGEgZmV3IGxpbmVzIG9mCmNvZGUg c2luY2Ugd2UgZG8gYWNjb3VudGluZyBpbiBzbyBtYW55IHBsYWNlcy4gRnV0dXJlIGNvbW1pdHMg d2lsbCBhZGQKbW9yZSBsb2NhdGlvbnMsIHNvIHJlZmFjdG9yIGludG8gYSBoZWxwZXIuCgpOb3Rl OiBJIChwZ2VvZ2hlYW4pIGhhdmUgY2hhbmdlZCB0aGlzIGZyb20gTWVsYW5pZSdzIG9yaWdpbmFs IGJ5CmlubGluaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb246CgpodHRwczovL3Bvc3Rnci5lcy9tL0NB SDItV3prMDJ2UGpzSlB4N0VHTm1ndnNLS2d5SG49WHRHakpjUEUrZVFUUDN4UXQ3d0BtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwgMTExICsr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1NiBpbnNlcnRpb25z KCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IDJhOTU1MTdhMy4uNmNhZDI3MTM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtNjQ4LDYgKzY0OCwxMCBAQCBzdGF0aWMgaW5saW5lIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9j KFNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJCQkJCQkJICBib29sICpmb3VuZFB0ciwgSU9Db250ZXh0 IGlvX2NvbnRleHQpOwogc3RhdGljIGJvb2wgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09w ZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpOwogc3RhdGljIHZvaWQg Q2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9u LCBib29sIGlzX2NvbXBsZXRlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBQcm9jZXNzQnVmZmVySGl0 KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJUmVsYXRpb24gcmVsLCBj aGFyIHBlcnNpc3RlbmNlLAorCQkJCQkJCQkJU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIg Zm9ya251bSwKKwkJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKIHN0YXRpYyBCdWZmZXIg R2V0VmljdGltQnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBJT0NvbnRleHQg aW9fY29udGV4dCk7CiBzdGF0aWMgdm9pZCBGbHVzaFVubG9ja2VkQnVmZmVyKEJ1ZmZlckRlc2Mg KmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4sCiAJCQkJCQkJCUlPT2JqZWN0IGlvX29iamVjdCwgSU9D b250ZXh0IGlvX2NvbnRleHQpOwpAQCAtMTIyNiw4ICsxMjMwLDYgQEAgUGluQnVmZmVyRm9yQmxv Y2soUmVsYXRpb24gcmVsLAogCQkJCSAgYm9vbCAqZm91bmRQdHIpCiB7CiAJQnVmZmVyRGVzYyAq YnVmSGRyOwotCUlPQ29udGV4dAlpb19jb250ZXh0OwotCUlPT2JqZWN0CWlvX29iamVjdDsKIAog CUFzc2VydChibG9ja051bSAhPSBQX05FVyk7CiAKQEAgLTEyMzYsMTcgKzEyMzgsNiBAQCBQaW5C dWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNU RU5DRV9QRVJNQU5FTlQgfHwKIAkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9H R0VEKSk7CiAKLQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQl7Ci0J CWlvX2NvbnRleHQgPSBJT0NPTlRFWFRfTk9STUFMOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9U RU1QX1JFTEFUSU9OOwotCX0KLQllbHNlCi0JewotCQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9y U3RyYXRlZ3koc3RyYXRlZ3kpOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKLQl9 Ci0KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX1NUQVJUKGZvcmtOdW0sIGJsb2NrTnVt LAogCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKIAkJCQkJ CQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKQEAgLTEyNTQsMTggKzEy NDUsMTEgQEAgUGluQnVmZmVyRm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJICAgc21n ci0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAogCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJT SVNURU5DRV9URU1QKQotCXsKIAkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzbWdyLCBmb3Jr TnVtLCBibG9ja051bSwgZm91bmRQdHIpOwotCQlpZiAoKmZvdW5kUHRyKQotCQkJcGdCdWZmZXJV c2FnZS5sb2NhbF9ibGtzX2hpdCsrOwotCX0KIAllbHNlCi0JewogCQlidWZIZHIgPSBCdWZmZXJB bGxvYyhzbWdyLCBwZXJzaXN0ZW5jZSwgZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJIHN0cmF0 ZWd5LCBmb3VuZFB0ciwgaW9fY29udGV4dCk7Ci0JCWlmICgqZm91bmRQdHIpCi0JCQlwZ0J1ZmZl clVzYWdlLnNoYXJlZF9ibGtzX2hpdCsrOwotCX0KKwkJCQkJCQkgc3RyYXRlZ3ksIGZvdW5kUHRy LCBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSkpOworCiAJaWYgKHJlbCkKIAl7CiAJCS8q CkBAIC0xMjc0LDIyICsxMjU4LDEwIEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwK IAkJICogemVyb2VkIGluc3RlYWQpLCB0aGUgcGVyLXJlbGF0aW9uIHN0YXRzIGFsd2F5cyBjb3Vu dCB0aGVtLgogCQkgKi8KIAkJcGdzdGF0X2NvdW50X2J1ZmZlcl9yZWFkKHJlbCk7Ci0JCWlmICgq Zm91bmRQdHIpCi0JCQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChyZWwpOwogCX0KLQlpZiAoKmZv dW5kUHRyKQotCXsKLQkJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29udGV4dCwg SU9PUF9ISVQsIDEsIDApOwotCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKLQkJCVZhY3V1bUNvc3RC YWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OwogCi0JCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVs TnVtYmVyLAotCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJ CQkJCSAgdHJ1ZSk7Ci0JfQorCWlmICgqZm91bmRQdHIpCisJCVByb2Nlc3NCdWZmZXJIaXQoc3Ry YXRlZ3ksIHJlbCwgcGVyc2lzdGVuY2UsIHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKIAogCXJl dHVybiBCdWZmZXJEZXNjcmlwdG9yR2V0QnVmZmVyKGJ1Zkhkcik7CiB9CkBAIC0xNjk1LDYgKzE2 NjcsNTEgQEAgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0 KQogCXJldHVybiBSZWFkQnVmZmVyc0NhblN0YXJ0SU9PbmNlKGJ1ZmZlciwgbm93YWl0KTsKIH0K IAorLyoKKyAqIFdlIHRyYWNrIHZhcmlvdXMgc3RhdHMgcmVsYXRlZCB0byBidWZmZXIgaGl0cy4g QmVjYXVzZSB0aGlzIGlzIGRvbmUgaW4gYQorICogZmV3IHNlcGFyYXRlIHBsYWNlcywgdGhpcyBo ZWxwZXIgZXhpc3RzIGZvciBjb252ZW5pZW5jZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitQ cm9jZXNzQnVmZmVySGl0KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCSBSZWxh dGlvbiByZWwsIGNoYXIgcGVyc2lzdGVuY2UsIFNNZ3JSZWxhdGlvbiBzbWdyLAorCQkJCSBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKQoreworCUlPQ29udGV4dAlpb19j b250ZXh0OworCUlPT2JqZWN0CWlvX29iamVjdDsKKworCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QKQorCXsKKwkJaW9fY29udGV4dCA9IElPQ09OVEVYVF9OT1JNQUw7CisJ CWlvX29iamVjdCA9IElPT0JKRUNUX1RFTVBfUkVMQVRJT047CisJfQorCWVsc2UKKwl7CisJCWlv X2NvbnRleHQgPSBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSk7CisJCWlvX29iamVjdCA9 IElPT0JKRUNUX1JFTEFUSU9OOworCX0KKworCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURf RE9ORShmb3JrbnVtLAorCQkJCQkJCQkJICBibG9ja251bSwKKwkJCQkJCQkJCSAgc21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu cmVsTnVtYmVyLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJCQkJ CQkJCQkgIHRydWUpOworCisJaWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAp CisJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQgKz0gMTsKKwllbHNlCisJCXBnQnVmZmVy VXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwlpZiAocmVsKQorCQlwZ3N0YXRfY291bnRf YnVmZmVyX2hpdChyZWwpOworCisJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9ISVQsIDEsIDApOworCisJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCisJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworfQorCiAvKgogICogSGVscGVyIGZv ciBXYWl0UmVhZEJ1ZmZlcnMoKSB0aGF0IHByb2Nlc3NlcyB0aGUgcmVzdWx0cyBvZiBhIHJlYWR2 CiAgKiBvcGVyYXRpb24sIHJhaXNpbmcgYW4gZXJyb3IgaWYgbmVjZXNzYXJ5LgpAQCAtMTk5MCwy NSArMjAwNyw5IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJh dGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCQkgKiBtdXN0IGhhdmUgc3RhcnRlZCBvdXQg YXMgYSBtaXNzIGluIFBpbkJ1ZmZlckZvckJsb2NrKCkuIFRoZSBvdGhlcgogCQkgKiBiYWNrZW5k IHdpbGwgdHJhY2sgdGhpcyBhcyBhICdyZWFkJy4KIAkJICovCi0JCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX1JFQURfRE9ORShmb3JrbnVtLCBibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19k b25lLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0 b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkgIHRydWUpOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQotCQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCArPSAx OwotCQllbHNlCi0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCArPSAxOwotCi0JCWlm IChvcGVyYXRpb24tPnJlbCkKLQkJCXBnc3RhdF9jb3VudF9idWZmZXJfaGl0KG9wZXJhdGlvbi0+ cmVsKTsKLQotCQlwZ3N0YXRfY291bnRfaW9fb3AoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09Q X0hJVCwgMSwgMCk7Ci0KLQkJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFs YW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKKwkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRpb24t PnN0cmF0ZWd5LCBvcGVyYXRpb24tPnJlbCwgcGVyc2lzdGVuY2UsCisJCQkJCQkgb3BlcmF0aW9u LT5zbWdyLCBmb3JrbnVtLAorCQkJCQkJIGJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2Rv bmUpOwogCX0KIAllbHNlCiAJewotLSAKMi41My4wCgo= --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0006-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Disposition: attachment; filename="v15-0006-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7ey912 RnJvbSBmNmViYjNiYzFmYTZiMjExODU3NjIxOWYzYjM5NjdhOGExYjdlOWVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjIgSmFuIDIwMjYgMTM6MDc6MTMgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNSAwNi8xN10g VXNlIEV4ZWNTZXRUdXBsZUJvdW5kIGhpbnQgZHVyaW5nIGluZGV4IHNjYW5zLgoKVGhpcyBnaXZl cyBpbmRleCBzY2FucyBhIHdheSB0byBhdm9pZCB1c2luZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBj ZXJ0YWluCmtpbmRzIG9mIHF1ZXJpZXMgdGhhdCBhcmUgdmVyeSB1bmxpa2VseSB0byBiZW5lZml0 IGZyb20gcHJlZmV0Y2hpbmc6CnF1ZXJpZXMgd2hvc2UgcGxhbiBpbnZvbHZlcyBhIExJTUlUIG5v ZGUgdGhhdCBpcyBjb25zdW1lcyB0dXBsZXMgZnJvbSBhbgppbmRleCBzY2FuIChvciBpbmRleC1v bmx5IHNjYW4pIG5vZGUuCgpUZXN0aW5nIGhhcyBzaG93biB0aGlzIHRvIGJlIHBhcnRpY3VsYXJs eSBpbXBvcnRhbnQgd2l0aCBuZXN0ZWQgbG9vcApqb2lucyB3aXRoIGEgTElNSVQgb24gYW4gaW5u ZXIgaW5kZXggc2Nhbi4gIFRoaXMgaXMgdHlwaWNhbCBvZiBuZXN0ZWQKbG9vcCBhbnRpLWpvaW5z LCBhbmQgbmVzdGVkIGxvb3Agc2VtaS1qb2lucy4KClhYWCBUaGlzIGlzIHN0aWxsIHZlcnkgbXVj aCBhIFdJUC4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1C eTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaCAgICAgICAgICAgICB8ICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICAgICAgfCAgNCArKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyB8ICA1ICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAg ICB8ICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICAgfCA1MCAr KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMgfCAxMCArKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j ICAgICB8IDEzICsrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspCgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmgKaW5kZXggYWZjMjdhMjg1Li41OTMxMjUwMjIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aApAQCAtMzkwLDYgKzM5MCw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJ LyogcGFyYWxsZWwgaW5kZXggc2NhbiBpbmZvcm1hdGlvbiwgaW4gc2hhcmVkIG1lbW9yeSAqLwog CXN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpwYXJhbGxlbF9zY2FuOwogCisJaW50 NjQJCXR1cGxlc19uZWVkZWQ7CisKIAkvKgogCSAqIENvdW50ZXIgdG8gcmVxdWVzdCBlYXJseSBh Ym9ydCBkdXJpbmcgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBzY2Fucy4KIAkgKiBXaGVuIG5v bnplcm8sIHRoZSBzY2FuIHdpbGwgcmVhZCBhdCBtb3N0IHRoaXMgbWFueSBsZWFmIHBhZ2VzIGJl Zm9yZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA1OTNhNzcxMDguLjI1ZmRhMjEwZiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKQEAgLTE3MDYsNiArMTcwNiw3IEBAIHR5cGVkZWYgc3RydWN0CiAgKgkJ U2NhbkRlc2MJCSAgIGluZGV4IHNjYW4gZGVzY3JpcHRvcgogICoJCUluc3RydW1lbnQJCSAgIGxv Y2FsIGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJU2hhcmVkSW5mbwkJICAgcGFyYWxs ZWwgd29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVyIGVudHJ5KQorICoJCVR1cGxlc05l ZWRlZAkgICB0dXBsZSBib3VuZCwgc2VlIEV4ZWNTZXRUdXBsZUJvdW5kCiAgKgogICoJCVJlb3Jk ZXJRdWV1ZQkgICB0dXBsZXMgdGhhdCBuZWVkIHJlb3JkZXJpbmcgZHVlIHRvIHJlLWNoZWNrCiAg KgkJUmVhY2hlZEVuZAkJICAgaGF2ZSB3ZSBmZXRjaGVkIGFsbCB0dXBsZXMgZnJvbSBpbmRleCBh bHJlYWR5PwpAQCAtMTczNCw2ICsxNzM1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3Rh dGUKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmlzc19TY2FuRGVzYzsKIAlJbmRleFNjYW5J bnN0cnVtZW50YXRpb24gKmlzc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1l bnRhdGlvbiAqaXNzX1NoYXJlZEluZm87CisJaW50NjQJCWlzc19UdXBsZXNOZWVkZWQ7CiAKIAkv KiBUaGVzZSBhcmUgbmVlZGVkIGZvciByZS1jaGVja2luZyBPUkRFUiBCWSBleHByIG9yZGVyaW5n ICovCiAJcGFpcmluZ2hlYXAgKmlzc19SZW9yZGVyUXVldWU7CkBAIC0xNzYyLDYgKzE3NjQsNyBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQogICoJCVNjYW5EZXNjCQkgICBpbmRleCBz Y2FuIGRlc2NyaXB0b3IKICAqCQlJbnN0cnVtZW50CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3Ry dW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAgIHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50 YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKKyAqCQlUdXBsZXNOZWVkZWQJICAgdHVwbGUgYm91bmQs IHNlZSBFeGVjU2V0VHVwbGVCb3VuZAogICoJCVRhYmxlU2xvdAkJICAgc2xvdCBmb3IgaG9sZGlu ZyB0dXBsZXMgZmV0Y2hlZCBmcm9tIHRoZSB0YWJsZQogICoJCVBzY2FuTGVuCQkgICBzaXplIG9m IHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdBdHRO dW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxFTgpA QCAtMTc4NCw2ICsxNzg3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJ c3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICppb3NzX1NjYW5EZXNjOwogCUluZGV4U2Nhbkluc3Ry dW1lbnRhdGlvbiAqaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRh dGlvbiAqaW9zc19TaGFyZWRJbmZvOworCWludDY0CQlpb3NzX1R1cGxlc05lZWRlZDsKIAlUdXBs ZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIAlBdHRy TnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCmluZGV4IDdhMWUyZjY5ZS4uMzQzYzczYThlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTYzOCw5ICs2MzgsMTQgQEAgaGVhcGFt X2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKIAkJICogaGF2ZW4ndCBkb25lIGFueSBoZWFwIGZldGNoZXMgeWV0LiAgV2UgZG9uJ3Qgd2Fu dCB0byB3YXN0ZSBhbnkKIAkJICogY3ljbGVzIG9uIGFsbG9jYXRpbmcgYSByZWFkIHN0cmVhbSB1 bnRpbCB3ZSBoYXZlIGEgZGVtb25zdHJhdGVkCiAJCSAqIG5lZWQgZm9yIHBlcmZvcm0gaGVhcCBm ZXRjaGVzLgorCQkgKgorCQkgKiBBbHNvIGF2b2lkaW5nIHByZWZldGNoaW5nIHdoZW4gdGhlIGNv cmUgZXhlY3V0b3IgcGFzc2VzIHRoZSBzY2FuIGEKKwkJICogdHVwbGVzX25lZWRlZCBoaW50IHRo YXQgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4gaXMgbGlrZWx5IHRvIGVuZAorCQkgKiBiZWZvcmUg bG9uZy4KIAkJICovCiAJCWlmICghaHNjYW4tPnhzX3JlYWRfc3RyZWFtICYmIHByaW9yQmF0Y2gg JiYgc2Nhbi0+TVZDQ1NjYW4gJiYKIAkJCWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2NrTnVt YmVyICYmCS8qIGZvciBpbmRleC1vbmx5IHNjYW5zICovCisJCQkoc2Nhbi0+dHVwbGVzX25lZWRl ZCA9PSAtMSB8fCBzY2FuLT50dXBsZXNfbmVlZGVkID4gMjApICYmCiAJCQllbmFibGVfaW5kZXhz Y2FuX3ByZWZldGNoKQogCQl7CiAJCQlBc3NlcnQoIWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3Mu dmFsaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCBkNTBlM2ZhNzEuLmFhNDRhMGVj MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsxMjYsNyBAQCBSZWxhdGlv bkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpCiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwID0gTlVM TDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOworCXNjYW4tPnR1cGxlc19uZWVkZWQgPSAt MTsJLyogbm8gbGltaXQgKi8KIAlzY2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkgPSAwOwogCiAJ c2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJv Y25vZGUuYwppbmRleCBkMzU5NzY5MjUuLmI1NDhlMzJmNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1Byb2Nub2RlLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgi CiAKKyNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1 dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL25vZGVBZ2cuaCIKQEAgLTg0MSw2ICs4NDIsMTIgQEAgRXhlY1NodXRkb3duTm9kZV93YWxr ZXIoUGxhblN0YXRlICpub2RlLCB2b2lkICpjb250ZXh0KQogICogQW55IG5lZ2F0aXZlIHR1cGxl c19uZWVkZWQgdmFsdWUgbWVhbnMgIm5vIGxpbWl0Iiwgd2hpY2ggc2hvdWxkIGJlIHRoZQogICog ZGVmYXVsdCBhc3N1bXB0aW9uIHdoZW4gdGhpcyBpcyBub3QgY2FsbGVkIGF0IGFsbCBmb3IgYSBw YXJ0aWN1bGFyIG5vZGUuCiAgKgorICogTm90ZTogZm9yIG5vZGVzIGxpa2UgU29ydCwgdHVwbGVz X25lZWRlZCBpcyBhIGhhcmQgbGltaXQgLS0gdGhlIG5vZGUgY2FuCisgKiBzdG9wIGFmdGVyIHBy b2R1Y2luZyBleGFjdGx5IHRoYXQgbWFueSB0dXBsZXMuICBGb3IgaW5kZXggc2NhbnMsIGhvd2V2 ZXIsCisgKiB0dXBsZXNfbmVlZGVkIGlzIG9ubHkgYW4gYXBwcm94aW1hdGlvbiwgYmVjYXVzZSBu b24taW5kZXggcXVhbHMgbWF5IGZpbHRlcgorICogb3V0IHNvbWUgdHVwbGVzLiAgVGhlIGFjdHVh bCBudW1iZXIgb2YgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgaW5kZXggbWF5CisgKiBuZWVkIHRv IGV4Y2VlZCB0dXBsZXNfbmVlZGVkIHRvIHNhdGlzZnkgdGhlIGNhbGxlcidzIHJlcXVpcmVtZW50 cy4KKyAqCiAgKiBOb3RlOiBpZiB0aGlzIGlzIGNhbGxlZCByZXBlYXRlZGx5IG9uIGEgcGxhbiB0 cmVlLCB0aGUgZXhhY3Qgc2FtZSBzZXQKICAqIG9mIG5vZGVzIG11c3QgYmUgdXBkYXRlZCB3aXRo IHRoZSBuZXcgbGltaXQgZWFjaCB0aW1lOyBiZSBjYXJlZnVsIHRoYXQKICAqIG9ubHkgdW5jaGFu Z2luZyBjb25kaXRpb25zIGFyZSB0ZXN0ZWQgaGVyZS4KQEAgLTk3OCw2ICs5ODUsNDkgQEAgRXhl Y1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9ub2Rl KQogCiAJCUV4ZWNTZXRUdXBsZUJvdW5kKHR1cGxlc19uZWVkZWQsIG91dGVyUGxhblN0YXRlKGNo aWxkX25vZGUpKTsKIAl9CisJZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUsIEluZGV4U2NhblN0YXRl KSkKKwl7CisJCS8qCisJCSAqIElmIGl0IGlzIGFuIEluZGV4U2Nhbiwgc2F2ZSB0aGUgdHVwbGVz X25lZWRlZCBpbiB0aGUgc3RhdGUgc28gaXQKKwkJICogY2FuIGJlIHByb3BhZ2F0ZWQgdG8gdGhl IEluZGV4U2NhbkRlc2Mgd2hlbiB0aGUgc2NhbiBpcyBzdGFydGVkLgorCQkgKgorCQkgKiBOb3Rl OiBBcyB3aXRoIFNvcnQsIHRoZSBpbmRleCBzY2FuIG5vZGUgaXMgcmVzcG9uc2libGUgZm9yIHJl YWN0aW5nCisJCSAqIHByb3Blcmx5IHRvIGNoYW5nZXMgdG8gdGhpcyBwYXJhbWV0ZXIuCisJCSAq LworCQlJbmRleFNjYW5TdGF0ZSAqaXNzdGF0ZSA9IChJbmRleFNjYW5TdGF0ZSAqKSBjaGlsZF9u b2RlOworCisJCWlzc3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSB0dXBsZXNfbmVlZGVkOworCisJ CS8qIElmIHNjYW4gYWxyZWFkeSBzdGFydGVkLCB1cGRhdGUgdGhlIEluZGV4U2NhbkRlc2MgdG9v ICovCisJCWlmIChpc3N0YXRlLT5pc3NfU2NhbkRlc2MpCisJCQlpc3N0YXRlLT5pc3NfU2NhbkRl c2MtPnR1cGxlc19uZWVkZWQgPSB0dXBsZXNfbmVlZGVkOworCX0KKwllbHNlIGlmIChJc0EoY2hp bGRfbm9kZSwgSW5kZXhPbmx5U2NhblN0YXRlKSkKKwl7CisJCS8qIFNhbWUgY29tbWVudHMgYXMg Zm9yIEluZGV4U2NhbiAqLworCQlJbmRleE9ubHlTY2FuU3RhdGUgKmlvc3N0YXRlID0gKEluZGV4 T25seVNjYW5TdGF0ZSAqKSBjaGlsZF9ub2RlOworCisJCWlvc3N0YXRlLT5pb3NzX1R1cGxlc05l ZWRlZCA9IHR1cGxlc19uZWVkZWQ7CisKKwkJLyogSWYgc2NhbiBhbHJlYWR5IHN0YXJ0ZWQsIHVw ZGF0ZSB0aGUgSW5kZXhTY2FuRGVzYyB0b28gKi8KKwkJaWYgKGlvc3N0YXRlLT5pb3NzX1NjYW5E ZXNjKQorCQkJaW9zc3RhdGUtPmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSB0dXBsZXNf bmVlZGVkOworCX0KKwllbHNlIGlmIChJc0EoY2hpbGRfbm9kZSwgTmVzdExvb3BTdGF0ZSkpCisJ eworCQkvKgorCQkgKiBGb3IgTmVzdExvb3Agam9pbnMgd2hlcmUgZWFjaCBvdXRlciB0dXBsZSBw cm9kdWNlcyBhdCBtb3N0IG9uZQorCQkgKiBvdXRwdXQgdHVwbGUsIHdlIGNhbiBwcm9wYWdhdGUg dGhlIGJvdW5kIHRvIHRoZSBvdXRlciBjaGlsZAorCQkgKi8KKwkJTmVzdExvb3BTdGF0ZSAqbmxz dGF0ZSA9IChOZXN0TG9vcFN0YXRlICopIGNoaWxkX25vZGU7CisJCUpvaW5UeXBlCWpvaW50eXBl ID0gbmxzdGF0ZS0+anMuam9pbnR5cGU7CisKKwkJaWYgKGpvaW50eXBlID09IEpPSU5fU0VNSSB8 fCBqb2ludHlwZSA9PSBKT0lOX0FOVEkgfHwKKwkJCW5sc3RhdGUtPmpzLnNpbmdsZV9tYXRjaCkK KwkJeworCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25lZWRlZCwgb3V0ZXJQbGFuU3RhdGUo Y2hpbGRfbm9kZSkpOworCQl9CisJfQogCiAJLyoKIAkgKiBJbiBwcmluY2lwbGUgd2UgY291bGQg ZGVzY2VuZCB0aHJvdWdoIGFueSBwbGFuIG5vZGUgdHlwZSB0aGF0IGlzCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBlZTYzYTFmYjcuLjQxMmQwY2ZlNSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC05Nyw2ICs5Nyw5IEBA IEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQlub2RlLT5pb3NzX1Nj YW5EZXNjID0gc2NhbmRlc2M7CiAJCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50 X2l0dXApOwogCisJCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwkJc2NhbmRlc2Mt PnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJ ZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhl YWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTUzMCw2 ICs1MzMsNyBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5c1Jl YWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5cyA9IE5VTEw7CiAJaW5k ZXhzdGF0ZS0+aW9zc19OdW1SdW50aW1lS2V5cyA9IDA7CisJaW5kZXhzdGF0ZS0+aW9zc19UdXBs ZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhlIGluZGV4IHNjYW4ga2V5cyBmcm9t IHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC03MDYsNiArNzEwLDkgQEAgRXhlY0luZGV4T25s eVNjYW5Jbml0aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJIHBp c2Nhbik7CiAJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKKwkv KiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aW9zc19TY2FuRGVzYy0+dHVw bGVzX25lZWRlZCA9IG5vZGUtPmlvc3NfVHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBubyBy dW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5k IHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgpAQCAtNzcxLDYgKzc3OCw5 IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUg Km5vZGUsCiAJCQkJCQkJCSBwaXNjYW4pOwogCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54 c193YW50X2l0dXApOwogCisJLyogUGFzcyBkb3duIGFueSB0dXBsZSBib3VuZCAqLworCW5vZGUt Pmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsK KwogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUg cmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBB TS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCAxMGQ4NWNmZDkuLjQ2OGY5 YTBjZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTE3LDYgKzExNyw5 IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAogCQlub2RlLT5pc3NfU2NhbkRl c2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJCXNj YW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCQkvKgog CQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwg Z28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAg LTIxMyw2ICsyMTYsOSBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24g YW55IHR1cGxlIGJvdW5kICovCisJCXNjYW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNz X1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1 bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5r ZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTk4OSw2ICs5OTUsNyBAQCBFeGVjSW5pdEluZGV4U2Nh bihJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3Rh dGUtPmlzc19SdW50aW1lS2V5c1JlYWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aXNzX1J1bnRp bWVLZXlzID0gTlVMTDsKIAlpbmRleHN0YXRlLT5pc3NfTnVtUnVudGltZUtleXMgPSAwOworCWlu ZGV4c3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhlIGlu ZGV4IHNjYW4ga2V5cyBmcm9tIHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC0xNzMzLDYgKzE3 NDAsOSBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwK IAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CiAK KwkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aXNzX1NjYW5EZXNjLT50 dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCS8qCiAJICogSWYgbm8g cnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFu ZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTE3OTcsNiArMTgw Nyw5IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2Rl LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsK IAorCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwlub2RlLT5pc3NfU2NhbkRlc2Mt PnR1cGxlc19uZWVkZWQgPSBub2RlLT5pc3NfVHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBu byBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQg YW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgotLSAKMi41My4wCgo= --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0007-Add-UnlockBufferGetLSN-utility-function.patch" Content-Disposition: attachment; filename="v15-0007-Add-UnlockBufferGetLSN-utility-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7ey711 RnJvbSA2ZTFiYWFlOTIyNWJmNDhlODEzMmNiZDU0MWM4ZTVmZmQyNTZlOWQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTcgTWFyIDIwMjYgMTM6MjU6MTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNSAwNy8xN10g QWRkIFVubG9ja0J1ZmZlckdldExTTiB1dGlsaXR5IGZ1bmN0aW9uLgoKVGhpcyBjb21iaW5lcyB0 aGUgZnVuY3Rpb25hbGl0eSBvZiBCdWZmZXJHZXRMU05BdG9taWMoKSB3aXRoClVubG9ja1JlbGVh c2VCdWZmZXIsIHdpdGggdGhlIG9wdGlvbiBvZiBub3QgcmVsZWFzaW5nIGJ1ZmZlciBwaW4uCi0t LQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgICB8ICAxICsKIHNyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgfCAxMiArLS0tLS0tCiBzcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgIHwgNDcgKysrKysrKysrKysrKysrKysrKysrKysrKysr CiAzIGZpbGVzIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zm1nci5oCmluZGV4IDQwMTc4OTZmOS4uNDA4ZDc2YzU2IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdy LmgKQEAgLTI1Myw2ICsyNTMsNyBAQCBleHRlcm4gdm9pZCBXYWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1 ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbik7CiAKIGV4dGVybiB2b2lkIFJlbGVhc2VCdWZmZXIo QnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBVbmxvY2tSZWxlYXNlQnVmZmVyKEJ1ZmZlciBi dWZmZXIpOworZXh0ZXJuIFhMb2dSZWNQdHIgVW5sb2NrQnVmZmVyR2V0TFNOKEJ1ZmZlciBidWZm ZXIsIGJvb2wgcmVsZWFzZSk7CiBleHRlcm4gYm9vbCBCdWZmZXJJc0xvY2tlZEJ5TWUoQnVmZmVy IGJ1ZmZlcik7CiBleHRlcm4gYm9vbCBCdWZmZXJJc0xvY2tlZEJ5TWVJbk1vZGUoQnVmZmVyIGJ1 ZmZlciwgQnVmZmVyTG9ja01vZGUgbW9kZSk7CiBleHRlcm4gYm9vbCBCdWZmZXJJc0RpcnR5KEJ1 ZmZlciBidWZmZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKaW5kZXggMzQy NzI3ZjJiLi5mZTE2NTFhN2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGJhdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpA QCAtNTYyLDE3ICs1NjIsNyBAQCBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJ1ZmZlciBidWYpCiAJCSAqIE5vbi1pbW1l ZGlhdGUtdW5ndWFyZCBzY2FucyByZXRhaW4gdGhlIHBpbjsgdGhlIHRhYmxlIEFNIHdpbGwgY2Fs bAogCQkgKiBhbXVuZ3VhcmRiYXRjaCB0byBkcm9wIHRoZSBpbnRlcmxvY2sgd2hlbiByZWFkeS4K IAkJICovCi0JCWJhdGNoLT5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKLQkJaWYgKHNj YW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCkKLQkJewotCQkJLyogZHJvcCBib3RoIHRoZSBsb2Nr IGFuZCB0aGUgcGluICovCi0JCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7Ci0JCX0KLQkJZWxz ZQotCQl7Ci0JCQkvKiBqdXN0IGRyb3AgdGhlIGxvY2sgKGhvbGQgb24gdG8gaW50ZXJsb2NrIHBp bikgKi8KLQkJCVVubG9ja0J1ZmZlcihidWYpOwotCQl9CisJCWJhdGNoLT5sc24gPSBVbmxvY2tC dWZmZXJHZXRMU04oYnVmLCBzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOwogCX0KIAllbHNl CiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAwMGJjNjA5NTIuLjJhOTU1 MTdhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTU1MjUsNiArNTUyNSw1 MyBAQCBVbmxvY2tSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpCiAJUmVsZWFzZUJ1ZmZlcihi dWZmZXIpOwogfQogCisvKgorICogVW5sb2NrQnVmZmVyR2V0TFNOCisgKgkJUmVhZCBhIGJ1ZmZl cidzIExTTiwgdGhlbiB1bmxvY2sgdGhlIGJ1ZmZlci4gIE9wdGlvbmFsbHkgcmVsZWFzZSB0aGUK KyAqCQlwaW4gdG9vLgorICoKKyAqIFRoaXMgY29tYmluZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2Yg QnVmZmVyR2V0TFNOQXRvbWljKCkgd2l0aAorICogVW5sb2NrUmVsZWFzZUJ1ZmZlciwgd2l0aCB0 aGUgb3B0aW9uIG9mIG5vdCByZWxlYXNpbmcgYnVmZmVyIHBpbi4KKyAqCisgKiBVc2VkIHRvIHVu bG9jayBhIGJ1ZmZlciBsb2NrIChhbmQgcG9zc2libHkgdG8gcmVsZWFzZSBpdHMgcGluKSB3aGVu IGhlbGQgb24KKyAqIGFuIGluZGV4IHBhZ2UuICBUaGlzIGlzIG5lZWRlZCBmcmVxdWVudGx5IGVu b3VnaCB0byBqdXN0aWZ5IHNwZWNpYWxpemF0aW9uLgorICovCitYTG9nUmVjUHRyCitVbmxvY2tC dWZmZXJHZXRMU04oQnVmZmVyIGJ1ZmZlciwgYm9vbCByZWxlYXNlKQoreworCUJ1ZmZlckRlc2Mg KmJ1Zl9oZHI7CisJUGFnZQkJcGFnZTsKKwlYTG9nUmVjUHRyCWxzbjsKKworCUFzc2VydChCdWZm ZXJJc1ZhbGlkKGJ1ZmZlcikpOworCUFzc2VydChCdWZmZXJJc1Bpbm5lZChidWZmZXIpKTsKKwor CWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZlcikpCisJeworCQlidWZfaGRyID0gR2V0TG9jYWxCdWZm ZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwkJcGFnZSA9IChQYWdlKSBMb2NhbEJ1Zkhkckdl dEJsb2NrKGJ1Zl9oZHIpOworCQlsc24gPSBQYWdlR2V0TFNOKHBhZ2UpOworCQlpZiAocmVsZWFz ZSkKKwkJCVVucGluTG9jYWxCdWZmZXIoYnVmZmVyKTsKKwkJcmV0dXJuIGxzbjsKKwl9CisKKwli dWZfaGRyID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKKwlwYWdlID0gKFBhZ2Up IEJ1ZkhkckdldEJsb2NrKGJ1Zl9oZHIpOworCisjaWZkZWYgUEdfSEFWRV84QllURV9TSU5HTEVf Q09QWV9BVE9NSUNJVFkKKwlsc24gPSBQYWdlR2V0TFNOKHBhZ2UpOworI2Vsc2UKKwlsc24gPSBC dWZmZXJHZXRMU05BdG9taWMoYnVmZmVyKTsKKyNlbmRpZgorCisJQnVmZmVyTG9ja1VubG9jayhi dWZmZXIsIGJ1Zl9oZHIpOworCWlmIChyZWxlYXNlKQorCQlVbnBpbkJ1ZmZlcihidWZfaGRyKTsK KworCXJldHVybiBsc247Cit9CisKIC8qCiAgKiBJbmNyQnVmZmVyUmVmQ291bnQKICAqCQlJbmNy ZW1lbnQgdGhlIHBpbiBjb3VudCBvbiBhIGJ1ZmZlciB0aGF0IHdlIGhhdmUgKmFscmVhZHkqIHBp bm5lZAotLSAKMi41My4wCgo= --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0004-Limit-get_actual_variable_range-to-scan-three-in.patch" Content-Disposition: attachment; filename="v15-0004-Limit-get_actual_variable_range-to-scan-three-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7eyd14 RnJvbSBhOTYyOWExODYwZDIwYWNiYmQ0MjIzNWFiOTFmYjcyODA4ZWZjZjM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMiBGZWIgMjAyNiAyMzozNDozNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDA0LzE3XSBM aW1pdCBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW4gdGhyZWUgaW5kZXgKIHBhZ2Vz LgoKZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBzY2FucyBhbiBpbmRleCB0byBmaW5kIGFjdHVh bCBtaW4vbWF4IHZhbHVlcwpmb3IgcGxhbm5lciBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uLiAgU2lu Y2UgdGhpcyBoYXBwZW5zIGR1cmluZyBwbGFubmluZywKd2UgY2FuJ3QgYWZmb3JkIHRvIHNwZW5k IHRvbyBtdWNoIHRpbWUgb24gaXQuICBDb21taXQgOWM2YWQ1ZWFhOSBhZGRlZApWSVNJVEVEX1BB R0VTX0xJTUlUIChhIGxpbWl0IG9mIDEwMCBoZWFwIHBhZ2UgdmlzaXRzKSB0byBib3VuZCB0aGUK YW1vdW50IG9mIHdvcmsgcGVyZm9ybWVkLCBnaXZpbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB0byB0 aGUgcGdfc3RhdGlzdGljCmV4dHJlbWFsIHZhbHVlIHdoZW4gdGhlIGxpbWl0IGlzIGV4Y2VlZGVk LiAgQnV0IHRoYXQgaXNuJ3QgZWZmZWN0aXZlIGluCmNhc2VzIHdpdGggbW9yZSBleHRyZW1lIGNv bmNlbnRyYXRpb25zIG9mIGRlYWQgaW5kZXggdHVwbGVzLgoKUmVjZW50IGJlbmNobWFyayByZXN1 bHRzIGZyb20gTWFyayBDYWxsYWdoYW4gc2hvdyB0aGF0ClZJU0lURURfUEFHRVNfTElNSVQgaXNu J3QgZWZmZWN0aXZlIG9uY2UgdGhlIGRlYWQgaW5kZXggdHVwbGUgcHJvYmxlbQpnZXRzIG91dCBv ZiBoYW5kICh3aGljaCBpcyBleHBlY3RlZCB3aXRoIHF1ZXVlLWxpa2UgdGFibGVzIHRoYXQKY29u dGludWFsbHkgZGVsZXRlIG9sZGVyIHJlY29yZHMgYW5kIGluc2VydCBuZXdlciBvbmVzKS4gIFRo ZSByb290IGNhdXNlCmlzIHRoYXQgVklTSVRFRF9QQUdFU19MSU1JVCBjb3VudHMgaGVhcCBwYWdl IHZpc2l0cywgYnV0IHdoZW4gbWFueSBpbmRleAp0dXBsZXMgYXJlIG1hcmtlZCBMUF9ERUFELCBf YnRfcmVhZHBhZ2UgdHJhdmVyc2VzIGFyYml0cmFyaWx5IG1hbnkgaW5kZXgKcGFnZXMgd2l0aG91 dCByZXR1cm5pbmcgYW55IHR1cGxlcyAtLSB0aGUgaGVhcCBwYWdlIGNvdW50ZXIgaW4Kc2VsZnVu Y3MuYyBuZXZlciBnZXRzIGEgY2hhbmNlIHRvIGluY3JlbWVudCwgc28gVklTSVRFRF9QQUdFU19M SU1JVApuZXZlciB0cmlnZ2Vycy4gIEZ1cnRoZXJtb3JlLCB0aGUgZGVzaWduIG9mIHNldHRpbmcg TFBfREVBRCBiaXRzIHRvIGhlbHAKZnV0dXJlIGNhbGxzIGlzIHVsdGltYXRlbHkgY291bnRlcnBy b2R1Y3RpdmU6IGVhY2ggTFBfREVBRCB0dXBsZSBpcyBvbmUKZmV3ZXIgdGhhdCBjb3VudHMgYWdh aW5zdCBWSVNJVEVEX1BBR0VTX0xJTUlULCBzbyB0aGUgbW9yZSBMUF9ERUFEIGJpdHMKd2Ugc2V0 LCB0aGUgbGVzcyBlZmZlY3RpdmUgdGhlIGxpbWl0IGJlY29tZXMgYXQgYmFpbGluZyBvdXQgZWFy bHkuCgpSZXBsYWNlIFZJU0lURURfUEFHRVNfTElNSVQgd2l0aCBhIG1lY2hhbmlzbSB0aGF0IGxp bWl0cwpnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW5uaW5nIG9ubHkgdGhlIGV4dHJl bWFsIGluZGV4IGxlYWYgcGFnZSwKYW5kIHR3byBhZGRpdGlvbmFsIGluZGV4IHBhZ2VzLCByYXRo ZXIgdGhhbiBjb3VudGluZyBoZWFwIHBhZ2UgdmlzaXRzLgpUaGlzIHByb3ZpZGVzIGEgaGFyZCBn dWFyYW50ZWUgb24gdGhlIG1heGltdW0gd29yayBwZXIgY2FsbC4gIFVubGlrZQpWSVNJVEVEX1BB R0VTX0xJTUlULCB0aGlzIGxpbWl0IGNhbm5vdCBiZSBlcm9kZWQgYnkgTFBfREVBRCBiaXRzLgoK VGhpcyBhcHByb2FjaCBhbHNvIGhhcyB0aGUgbWVyaXQgb2YgYmVpbmcgY29tcGF0aWJsZSB3aXRo IHRoZSBpbmRleApwcmVmZXRjaGluZyBjb21taXQncyBuZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9z bG90KCkgaW50ZXJmYWNlLiAgVGhhdAphcHByb2FjaCBoaWRlcyBoZWFwIGFjY2VzcyBkZXRhaWxz IGZyb20gY2FsbGVycyBsaWtlIHNlbGZ1bmNzLmMsIG1ha2luZwpWSVNJVEVEX1BBR0VTX0xJTUlU IGltcHJhY3RpY2FsIHRvIGltcGxlbWVudCB3aXRob3V0IHB1c2hpbmcgYWQtaG9jCmxvZ2ljIGlu dG8gdGhlIHRhYmxlIEFNIGxheWVyLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3Qu aWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xemt0MVdrS3A0VlJKdTNx SGZtS1hjOFcrWFl2MVJYZzVkMmQzZlN2QWVPPXJnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICB8ICA4ICsrKysrKwogc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICB8ICAzIC0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8IDExICsrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRzZWFyY2guYyAgICB8IDMyICsrKysrKysrKysrKysrKysrKysrKy0tLQogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAgICAgICB8IDMxICsrKysrKysrKysrKysrLS0tLS0t LS0tCiA2IGZpbGVzIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDI2YjUwNTk1NC4uZjQwNmVlNDQ3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmgKQEAgLTM3Niw2ICszNzYsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0Rh dGEKIAogCS8qIHBhcmFsbGVsIGluZGV4IHNjYW4gaW5mb3JtYXRpb24sIGluIHNoYXJlZCBtZW1v cnkgKi8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsK KworCS8qCisJICogQ291bnRlciB0byByZXF1ZXN0IGVhcmx5IGFib3J0IGR1cmluZyBnZXRfYWN0 dWFsX3ZhcmlhYmxlX3JhbmdlIHNjYW5zLgorCSAqIFdoZW4gbm9uemVybywgdGhlIHNjYW4gd2ls bCByZWFkIGF0IG1vc3QgdGhpcyBtYW55IGxlYWYgcGFnZXMgYmVmb3JlCisJICogZ2l2aW5nIHVw IChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhvc2UgcGFnZXMgaGFkIG1hdGNoaW5nIGl0ZW1zKS4g WmVybworCSAqIG1lYW5zIGRpc2FibGVkIChub3JtYWwgc2NhbiBiZWhhdmlvcikuCisJICovCisJ aW50CQkJeHNfcmVhZF9leHRyZW1hbF9vbmx5OwogfSBJbmRleFNjYW5EZXNjRGF0YTsKIAogLyog R2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIHBhcmFsbGVsIHNjYW5zICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCmluZGV4IGU1YmQwNjJkZS4uOWQ4MmY3MDk1IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYwpAQCAtMTg5NCw5ICsxODk0LDYgQEAgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9p bnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkgKiBJZiB3ZSBj YW4ndCBzZWUgaXQsIG1heWJlIG5vIG9uZSBlbHNlIGNhbiBlaXRoZXIuICBBdCBjYWxsZXIKIAkJ ICogcmVxdWVzdCwgY2hlY2sgd2hldGhlciBhbGwgY2hhaW4gbWVtYmVycyBhcmUgZGVhZCB0byBh bGwKIAkJICogdHJhbnNhY3Rpb25zLgotCQkgKgotCQkgKiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRo ZSBjcml0ZXJpb24gaGVyZSBmb3Igd2hhdCBpcyAiZGVhZCIsIGZpeCB0aGUKLQkJICogcGxhbm5l cidzIGdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2UoKSBmdW5jdGlvbiB0byBtYXRjaC4KIAkJICov CiAJCWlmIChhbGxfZGVhZCAmJiAqYWxsX2RlYWQpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDcwZmUxY2NlYy4uN2Y5ZTQxMDQ0IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTU1OCw2ICs1NTgsMTcgQEAgaGVh cGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKIAogCQkvKiBBcHBlbmQgYmF0Y2ggdG8gdGhlIGVuZCBvZiByaW5nIGJ1ZmZlci93cml0 ZSBpdCB0byBidWZmZXIgaW5kZXggKi8KIAkJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2Nhbiwg YmF0Y2gpOworCisJCS8qCisJCSAqIHhzX3JlYWRfZXh0cmVtYWxfb25seSBzY2FucyBhcmUgdXNl ZCBieSBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlCisJCSAqIHRvIGZpbmQgbWluL21heCB2YWx1 ZXMuICBUaGV5IG9ubHkgbmVlZCBhIHZhbHVlIGZyb20gb25lIG9mIHRoZQorCQkgKiBleHRyZW1h bCBsZWFmIHBhZ2VzLCBzbyBvbmNlIHdlIGhhdmUgb25lIGJhdGNoLCB3ZSBnaXZlIHVwLgorCQkg Ki8KKwkJaWYgKHVubGlrZWx5KHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSkgJiYgcHJpb3JC YXRjaCkKKwkJeworCQkJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCQlyZXR1cm4gTlVM TDsKKwkJfQogCX0KIAllbHNlCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCA2ZTg3 MTY5YzIuLmQ1MGUzZmE3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dl bmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsx MjYsNyBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQg bmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBOVUxMOwogCXNjYW4t PnhzX2hpdHVwID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOworCXNjYW4tPnhz X3JlYWRfZXh0cmVtYWxfb25seSA9IDA7CiAKIAlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6 ZSA9IDA7CiAJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzZWFyY2guYwppbmRleCA0ZDFiMTExZGEuLmQwMTAyZWQzNyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0xNjU2LDYgKzE2NTYsNyBAQCBfYnRfcmVh ZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gs CiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUJU QmF0Y2hEYXRhICpidGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShmaXJzdGJhdGNoKTsKKwli b29sCQlleHRzY2FuZG9uZSA9IGZhbHNlOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJCWxhc3Rj dXJyYmxrbm87CiAKQEAgLTE3MDQsMTQgKzE3MDUsMjggQEAgX2J0X3JlYWRmaXJzdHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAogCiAJQXNzZXJ0KGZp cnN0YmF0Y2gtPmRpciA9PSBkaXIpOwogCi0JaWYgKGJsa25vID09IFBfTk9ORSB8fAorCS8qCisJ ICogTWFpbnRhaW4geHNfcmVhZF9leHRyZW1hbF9vbmx5LCBhIGxpbWl0IG9uIHRoZSBudW1iZXIg b2YgbGVhZiBwYWdlcworCSAqIHdlJ2xsIHJlYWQgYmVmb3JlIGdpdmluZyB1cCBhbmQgZW5kaW5n IHRoZSBzY2FuCisJICovCisJaWYgKHVubGlrZWx5KHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25s eSkpCisJeworCQlpZiAoLS1zY2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkgPT0gMCkKKwkJCWV4 dHNjYW5kb25lID0gdHJ1ZTsKKwl9CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8IGV4dHNjYW5k b25lIHx8CiAJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwogCQkgIWJ0Zmlyc3RiYXRj aC0+bW9yZVJpZ2h0IDogIWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQpKQogCXsKIAkJLyoKIAkJICog Zmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9u ICh0aG91Z2gKLQkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwg Y29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQg dGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpLgorCQkgKgorCQkgKiBBbHNvIGN1 dCBvdXIgbG9zc2VzIGR1cmluZyB4c19yZWFkX2V4dHJlbWFsX29ubHkgc2NhbnMsIHdoaWNoIGFy ZQorCQkgKiBsaW1pdGVkIHRvIHNjYW5uaW5nIG9ubHkgYSBmZXcgbGVhZiBwYWdlcyBpbiB0aGUg aW5kZXguCiAJCSAqLworCQlBc3NlcnQoIXNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSB8fCAh c28tPm5lZWRQcmltU2Nhbik7CiAJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZp cnN0YmF0Y2gpOwogCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKIAkJcmV0dXJuIE5VTEw7CkBA IC0xNzUyLDYgKzE3NjcsNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5E aXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5p bmRleFJlbGF0aW9uOworCWJvb2wJCWV4dHNjYW5kb25lID0gZmFsc2U7CiAJSW5kZXhTY2FuQmF0 Y2ggbmV3YmF0Y2g7CiAJQlRCYXRjaERhdGEgKmJ0bmV3YmF0Y2g7CiAKQEAgLTE4MjksOCArMTg0 NSwxOCBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIg Ymxrbm8sCiAJCS8qIG5vIG1hdGNoaW5nIHR1cGxlcyBvbiB0aGlzIHBhZ2UgKi8KIAkJX2J0X3Jl bGJ1ZihyZWwsIGJ0bmV3YmF0Y2gtPmJ1Zik7CiAKKwkJLyoKKwkJICogTWFpbnRhaW4geHNfcmVh ZF9leHRyZW1hbF9vbmx5LCBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgbGVhZiBwYWdlcworCQkg KiB3ZSdsbCByZWFkIGJlZm9yZSBnaXZpbmcgdXAgYW5kIGVuZGluZyB0aGUgc2NhbgorCQkgKi8K KwkJaWYgKHVubGlrZWx5KHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSkpCisJCXsKKwkJCWlm ICgtLXNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSA9PSAwKQorCQkJCWV4dHNjYW5kb25lID0g dHJ1ZTsKKwkJfQorCiAJCS8qIENvbnRpbnVlIHRoZSBzY2FuIGluIHRoaXMgZGlyZWN0aW9uPyAq LwotCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCWlmIChibGtubyA9PSBQX05PTkUgfHwgZXh0 c2NhbmRvbmUgfHwKIAkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwogCQkJICFidG5l d2JhdGNoLT5tb3JlUmlnaHQgOiAhYnRuZXdiYXRjaC0+bW9yZUxlZnQpKQogCQl7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9zZWxmdW5jcy5jCmluZGV4IDU0ZWIwYWY2Ny4uNmFjNWM3M2FjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYwpAQCAtNzA4MSwxMyArNzA4MSwxMiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxl X3JhbmdlKFBsYW5uZXJJbmZvICpyb290LCBWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRhLAogICoK ICAqIHNjYW5rZXlzIGlzIGEgMS1lbGVtZW50IHNjYW5rZXkgYXJyYXkgc2V0IHVwIHRvIHJlamVj dCBudWxscy4KICAqIHR5cExlbi90eXBCeVZhbCBkZXNjcmliZSB0aGUgZGF0YXR5cGUgb2YgdGhl IGluZGV4J3MgZmlyc3QgY29sdW1uLgotICogdGFibGVzbG90IGlzIGEgc2xvdCBzdWl0YWJsZSB0 byBob2xkIHRhYmxlIHR1cGxlcywgaW4gY2FzZSB3ZSBuZWVkCi0gKiB0byBwcm9iZSB0aGUgaGVh cC4KKyAqIHRhYmxlc2xvdCBpcyBhIHNsb3Qgc3VpdGFibGUgdG8gaG9sZCB0YWJsZSB0dXBsZXMu CiAgKiAoV2UgY291bGQgY29tcHV0ZSB0aGVzZSB2YWx1ZXMgbG9jYWxseSwgYnV0IHRoYXQgd291 bGQgbWVhbiBjb21wdXRpbmcgdGhlbQogICogdHdpY2Ugd2hlbiBnZXRfYWN0dWFsX3ZhcmlhYmxl X3JhbmdlIG5lZWRzIGJvdGggdGhlIG1pbiBhbmQgdGhlIG1heC4pCiAgKgotICogRmFpbHVyZSBv Y2N1cnMgZWl0aGVyIHdoZW4gdGhlIGluZGV4IGlzIGVtcHR5LCBvciB3ZSBkZWNpZGUgdGhhdCBp dCdzCi0gKiB0YWtpbmcgdG9vIGxvbmcgdG8gZmluZCBhIHN1aXRhYmxlIHR1cGxlLgorICogRmFp bHVyZSBvY2N1cnMgZWl0aGVyIHdoZW4gdGhlIGluZGV4IGlzIGVtcHR5LCBvciB3aGVuIGl0IHRh a2VzIHRvbyBsb25nIHRvCisgKiBmaW5kIGEgc3VpdGFibGUgdHVwbGUuCiAgKi8KIHN0YXRpYyBi b29sCiBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCkBAIC03 MTQ3LDIyICs3MTQ2LDMwIEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24g aGVhcFJlbCwKIAkgKgogCSAqIERlc3BpdGUgYWxsIHRoaXMgY2FyZSwgdGhlcmUgYXJlIHNpdHVh dGlvbnMgd2hlcmUgd2UgbWlnaHQgZmluZCBtYW55CiAJICogbm9uLXZpc2libGUgdHVwbGVzIG5l YXIgdGhlIGVuZCBvZiB0aGUgaW5kZXguICBXZSBkb24ndCB3YW50IHRvIGV4cGVuZAotCSAqIGEg aHVnZSBhbW91bnQgb2YgdGltZSBoZXJlLCBzbyB3ZSBnaXZlIHVwIG9uY2Ugd2UndmUgcmVhZCB0 b28gbWFueSBoZWFwCi0JICogcGFnZXMuICBXaGVuIHdlIGZhaWwgZm9yIHRoYXQgcmVhc29uLCB0 aGUgY2FsbGVyIHdpbGwgZW5kIHVwIHVzaW5nCi0JICogd2hhdGV2ZXIgZXh0cmVtYWwgdmFsdWUg aXMgcmVjb3JkZWQgaW4gcGdfc3RhdGlzdGljLgotCSAqCi0JICogWFhYIFRoaXMgY2FuJ3Qgd29y ayB3aXRoIHRoZSBuZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwKLQkgKiB3 aGljaCBzaW1wbHkgd29uJ3QgcmV0dXJuIGEgdHVwbGUgdGhhdCBpc24ndCB2aXNpYmxlIHRvIG91 ciBzbmFwc2hvdC4KLQkgKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgd2lsbCBuZWVkIHNvbWUg a2luZCBvZiBjYWxsYmFjayB0aGF0IHByb3ZpZGVzCi0JICogYSB3YXkgZm9yIHRoZSBzY2FuIHRv IGdpdmUgdXAgd2hlbiB0aGUgY29zdHMgc3RhcnQgdG8gZ2V0IG91dCBvZiBoYW5kLgorCSAqIGEg aHVnZSBhbW91bnQgb2YgdGltZSBoZXJlLCBzbyB3ZSBnaXZlIHVwIGFmdGVyIHJlYWRpbmcgYSBm ZXcgZXh0cmVtYWwKKwkgKiBpbmRleCBsZWFmIHBhZ2VzIHdpdGhvdXQgZmluZGluZyBtYXRjaGlu ZyBpdGVtcyAoZ2VuZXJhbGx5IG9ubHkgc2VlbgorCSAqIHdoZW4gcGFnZXMgaGF2ZSBtYW55IGlu ZGV4IHR1cGxlcyB3aXRoIHNldCBMUF9ERUFEIGJpdHMpLiAgV2hlbiB3ZSBnaXZlCisJICogdXAg dGhlIGNhbGxlciB3aWxsIGVuZCB1cCB1c2luZyB3aGF0ZXZlciBleHRyZW1hbCB2YWx1ZSBpcyBy ZWNvcmRlZCBpbgorCSAqIHBnX3N0YXRpc3RpYy4KIAkgKi8KIAlJbml0Tm9uVmFjdXVtYWJsZVNu YXBzaG90KFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwKIAkJCQkJCQkgIEdsb2JhbFZpc1Rlc3RGb3Io aGVhcFJlbCkpOwogCisJLyogU2V0IHVwIGFuIGluZGV4LW9ubHkgc2NhbiAqLwogCWluZGV4X3Nj YW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsIHRydWUsCiAJCQkJCQkJCSAm U25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJCQkJCQkgMSwgMCk7CiAJQXNzZXJ0KGlu ZGV4X3NjYW4tPnhzX3dhbnRfaXR1cCk7CisKKwkvKgorCSAqIE1ha2Ugb3VyIHNjYW4gcmVhZCBh dCBtb3N0IDMgaW5kZXggbGVhZiBwYWdlcyBiZWZvcmUgaXQganVzdCBnaXZlcyB1cC4KKwkgKiBU aGlzIGlzIG9uIHRoZSBjb25zZXJ2YXRpdmUgc2lkZTsgZ2l2aW5nIHVwIGFmdGVyIHRoZSBmaXJz dCBsZWFmIHBhZ2UKKwkgKiB3b3VsZCB3b3JrIGp1c3QgYXMgd2VsbCBpbiBtb3N0IGNhc2VzLiAg QnV0IGl0J3MgcG9zc2libGUgdGhhdCB0aGUKKwkgKiBpbmRleCdzIGxlZnRtb3N0L3JpZ2h0bW9z dCBsZWFmIHBhZ2UgaXMgb25lIHdpdGggdmVyeSBmZXcgaW5kZXggdHVwbGVzCisJICogKHdpdGgg b3Igd2l0aG91dCB0aGVpciBMUF9ERUFEIGJpdHMgc2V0KS4KKwkgKi8KKwlpbmRleF9zY2FuLT54 c19yZWFkX2V4dHJlbWFsX29ubHkgPSAzOworCiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNj YW5rZXlzLCAxLCBOVUxMLCAwKTsKIAogCS8qIEZldGNoIGZpcnN0L25leHQgdHVwbGUgaW4gc3Bl Y2lmaWVkIGRpcmVjdGlvbiAqLwotLSAKMi41My4wCgo= --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0005-Add-heapam-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v15-0005-Add-heapam-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7eyb13 RnJvbSBhOTNiZDkxYmMzYmNjMDc0ZWVkZWU2NjcwM2Y5ODRkNzQ1MWE3YzI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNSAwNS8xN10g QWRkIGhlYXBhbSBpbmRleCBzY2FuIEkvTyBwcmVmZXRjaGluZy4KClRoaXMgY29tbWl0IGltcGxl bWVudHMgSS9PIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyAoYW5kIGluZGV4LW9ubHkKc2Nh bnMgdGhhdCByZXF1aXJlIGhlYXAgZmV0Y2hlcykuIFRoaXMgd2FzIG1hZGUgcG9zc2libGUgYnkg dGhlIHJlY2VudAphZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRvIGJvdGggdGhlIHRh YmxlIEFNIGFuZCBpbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJm YWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgbWF0Y2hpbmcgVElEcwoocmF0aGVyIHRoYW4gb25lIHR1 cGxlIGF0IGEgdGltZSksIGVhY2ggb2Ygd2hpY2ggbXVzdCBiZSB0YWtlbiBmcm9tCmluZGV4IHR1 cGxlcyB0aGF0IGFwcGVhciB0b2dldGhlciBvbiBhIHNpbmdsZSBpbmRleCBwYWdlLiAgVGhpcyBh bGxvd3MKbXVsdGlwbGUgYmF0Y2hlcyB0byBiZSBoZWxkIG9wZW4gc2ltdWx0YW5lb3VzbHkuICBH aXZpbmcgdGhlIHRhYmxlIEFNIGFuCmV4cGxpY2l0IHVuZGVyc3RhbmRpbmcgb2YgaW5kZXggQU0g Y29uY2VwdHMvaW5kZXggcGFnZSBib3VuZGFyaWVzIGFsbG93cwppdCB0byBjb25zaWRlciBhbGwg b2YgdGhlIHJlbGV2YW50IGNvc3RzIGFuZCBiZW5lZml0cy4KClByZWZldGNoaW5nIGlzIGltcGxl bWVudGVkIHVzaW5nIGEgcHJlZmV0Y2hpbmcgcG9zaXRpb24gdW5kZXIgdGhlCmNvbnRyb2wgb2Yg dGhlIHRhYmxlIEFNIGFuZCBjb3JlIGNvZGUuICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0 aGUKc2NhbiBwb3NpdGlvbiBhZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNoIGludHJvZHVjZWQg dGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlLiAgQSByZWFkIHN0cmVhbSBjYWxsYmFjayBhZHZhbmNl cyB0aGUgcmVhZCBzdHJlYW0gYXMgbmVlZGVkIHRvCnByb3ZpZGUgc3VmZmljaWVudGx5IG1hbnkg aGVhcCBibG9jayBudW1iZXJzIHRvIG1haW50YWluIHRoZSByZWFkCnN0cmVhbSdzIHRhcmdldCBw cmVmZXRjaCBkaXN0YW5jZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQgaW5kZXggcHJlZmV0Y2hp bmcgY2FuIG1ha2UgaW5kZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJnZSByYW5nZSBzY2FucyB0 aGF0IHJldHVybiBtYW55IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAzNXgKZmFzdGVyLgoKQW4g aW1wb3J0YW50IGdvYWwgb2YgdGhlIGFtZ2V0YmF0Y2ggZGVzaWduIGlzIHRvIGVuYWJsZSB0aGUg dGFibGUgQU0ncwpyZWFkIHN0cmVhbSBjYWxsYmFjayB0byBhZHZhbmNlIGl0cyBwcmVmZXRjaCBw b3NpdGlvbiB1c2luZyBUSURzIHRoYXQKYXBwZWFyIG9uIGEgbGVhZiBwYWdlIHRoYXQncyBhaGVh ZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgbGVhZgpwYWdlLiAgVGhpcyBpcyBjcnVj aWFsIHdpdGggc2NhbnMgb2YgaW5kZXhlcyB3aGVyZSBlYWNoIGxlYWYgcGFnZQpoYXBwZW5zIHRv IGhhdmUgcmVsYXRpdmVseSBmZXcgZGlzdGluY3QgaGVhcCBibG9ja3MgYW1vbmcgaXRzIG1hdGNo aW5nClRJRHMgKGFzIHdlbGwgYXMgd2l0aCBzY2FucyB3aXRoIGxlYWYgcGFnZXMgdGhhdCBoYXZl IHJlbGF0aXZlbHkgZmV3CnRvdGFsIG1hdGNoaW5nIGl0ZW1zKS4gIEluZGV4IHNjYW5zIGNhbiBo YXZlIGFzIG1hbnkgYXMgNjQgb3BlbiBiYXRjaGVzLAp3aGljaCB0ZXN0aW5nIGhhcyBzaG93biB0 byBiZSBhYm91dCB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gZXZlciBiZQp1c2VmdWwuICBC YXRjaGVzIGFyZSBtYWludGFpbmVkIGluIHNjYW4gb3JkZXIgdXNpbmcgYSBzaW1wbGUgcmluZyBi dWZmZXIKZGF0YSBzdHJ1Y3R1cmUuCgpJbiByYXJlIGNhc2VzIHdoZXJlIHRoZSBzY2FuIGV4Y2Vl ZHMgdGhpcyBxdWFzaS1hcmJpdHJhcnkgbGltaXQgb2YgNjQsCnRoZSByZWFkIHN0cmVhbSBpcyB0 ZW1wb3JhcmlseSBwYXVzZWQgdXNpbmcgdGhlIHJlYWQgc3RyZWFtIHBhdXNpbmcKbWVjaGFuaXNt IGFkZGVkIGJ5IGNvbW1pdCAzODIyOWNiOS4gIFByZWZldGNoaW5nICh2aWEgdGhlIHJlYWQgc3Ry ZWFtKQppcyByZXN1bWVkIG9ubHkgYWZ0ZXIgdGhlIHNjYW4gcG9zaXRpb24gYWR2YW5jZXMgYmV5 b25kIGl0cyBjdXJyZW50IG9wZW4KYmF0Y2ggYW5kIHRoZW4gZnJlZXMgYW5kIHJlbW92ZXMgdGhl IGJhdGNoIGZyb20gdGhlIHNjYW4ncyBiYXRjaCByaW5nCmJ1ZmZlci4gIFRlc3RpbmcgaGFzIHNo b3duIHRoYXQgaXQgaXNuJ3QgdmVyeSBjb21tb24gZm9yIHNjYW5zIHRvIGhvbGQKb3BlbiBtb3Jl IHRoYW4gYWJvdXQgMTAgYmF0Y2hlcyB0byBnZXQgdGhlIGRlc2lyZWQgSS9PIHByZWZldGNoCmRp c3RhbmNlLgoKVGhlIGhldXJpc3RpYyB1c2VkIHRvIGRlY2lkZSB3aGVuIHRvIGJlZ2luIHByZWZl dGNoaW5nIC0tIGRlbGF5aW5nIHVudGlsCnRoZSBzY2FuJ3Mgc2Vjb25kIGJhdGNoIC0tIGlzIGlt cGVyZmVjdC4gIFNlbGVjdGl2ZSBpbmRleCBzY2FucyB0aGF0CmFjY2VzcyByYW5kb21seS1vcmRl cmVkIGhlYXAgcGFnZXMgd2lsbCBiZW5lZml0IGZyb20gcHJlZmV0Y2hpbmcsIGJ1dAp3b24ndCBh Y3R1YWxseSByZWFjaCB0aGUgcG9pbnQgb2Ygc3RhcnRpbmcgcHJlZmV0Y2hpbmcgd2l0aCB0aGlz IGRlc2lnbi4KSXQgaXMgZGlmZmljdWx0IHRvIGlkZW50aWZ5IHN1Y2ggc2NhbnMgYWhlYWQgb2Yg dGltZS4gIEl0IGRlcGVuZHMgb24gdGhlCnBoeXNpY2FsIG9yZGVyaW5nIG9mIHRoZSBoZWFwIHJl bGF0aXZlIHRvIHRoZSBpbmRleCwgdGhlIHNjYW4ncwpzZWxlY3Rpdml0eSwgYW5kIHdoZXRoZXIg YW4gaW5kZXgtb25seSBzY2FuIHdpbGwgYWN0dWFsbHkgbmVlZCBoZWFwCmZldGNoZXMgLS0gYWxs IG9mIHdoaWNoIGFyZSB1bmNlcnRhaW4gZWFybGllciBpbiB0aGUgc2Nhbi4gIEFkZGluZyBhCnNt YXJ0ZXIgaGV1cmlzdGljIHJlbWFpbnMgYXMgd29yayBmb3IgYSBmdXR1cmUgcmVsZWFzZS4KCkF1 dGhvcjogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hl Z2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJh emVsLmRlPgpSZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29t PgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4 LTUwMDBiODk0ZWJhYkBlbnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmggICAgICAgICAgICAgICAgICB8ICAzNSArKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMgICAgICB8IDM3MSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAgICB8ICA0OSArKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC91dGls cy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwogZG9jL3NyYy9zZ21sL2NvbmZp Zy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIGRvYy9zcmMvc2dtbC9pbmRleGFt LnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICA2NiArKystCiBkb2Mvc3JjL3NnbWwvdGFibGVh bS5zZ21sICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwgICAzICstCiAxMyBmaWxlcyBjaGFuZ2VkLCA1NjIg aW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IGEyYzcz YzdjMC4uNjJhZGMyMmUzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMzQsNiArMTM0LDE4IEBAIHR5 cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAj IGl0ZW1zIHRvIHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLwogCWJvb2wJCXhzX2xhc3Rp bmJsb2NrOyAvKiBsYXN0IFRJRCBvbiB0aGlzIGJsb2NrIGluIGN1cnJlbnQgYmF0Y2g/ICovCiAK KwkvKgorCSAqIFRoZSByZWFkIHN0cmVhbSBpcyBhbGxvY2F0ZWQgYXQgdGhlIGJlZ2lubmluZyBv ZiB0aGUgc2NhbiBhbmQgcmVzZXQgb24KKwkgKiByZXNjYW4gb3Igd2hlbiB0aGUgc2NhbiBkaXJl Y3Rpb24gY2hhbmdlcy4gVGhlIHNjYW4gZGlyZWN0aW9uIGlzIHNhdmVkCisJICogZWFjaCB0aW1l IGEgbmV3IHR1cGxlIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMg ZnJvbQorCSAqIG9uZSB0dXBsZSB0byB0aGUgbmV4dCwgdGhlIHJlYWQgc3RyZWFtIHJlbGVhc2Vz IGFsbCBwcmV2aW91c2x5IHBpbm5lZAorCSAqIGJ1ZmZlcnMgYW5kIHJlc2V0cyB0aGUgcHJlZmV0 Y2ggYmxvY2suCisJICovCisJYm9vbAkJeHNfcGF1c2VkOwkJLyogcGF1c2VkIHVudGlsIG5leHQg YmF0Y2ggaXMgcmVhZD8gKi8KKwlTY2FuRGlyZWN0aW9uIHhzX3JlYWRfc3RyZWFtX2RpcjsJLyog aW5kZXggc2NhbiBkaXJlY3Rpb24gKi8KKwlCbG9ja051bWJlciB4c19wcmVmZXRjaF9ibG9jazsJ LyogbGFzdCBibG9jayByZXR1cm5lZCB0byB4c19yZWFkX3N0cmVhbSAqLworCVJlYWRTdHJlYW0g KnhzX3JlYWRfc3RyZWFtOyAvKiBpbmRleCBJL08gcHJlZmV0Y2hpbmcgcmVhZCBzdHJlYW0gKi8K KwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCBmNDA2 ZWU0NDcuLmFmYzI3YTI4NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0yMDIsNiArMjAyLDEwIEBA IHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogCSAqIFRoaXMgYWxsb3dzIHRhYmxl IEFNcyB0byBhdm9pZCByZWR1bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRoIHRoZSBzYW1lCiAJ ICogcHJpb3JiYXRjaCAtLSB0aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byByZWFkIGFkZGl0aW9u YWwgaW5kZXggcGFnZXMgdG8KIAkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hp bmcgaXRlbXMgYmV5b25kIGNhbGxlcidzIHByaW9yYmF0Y2guCisJICogSW4gcGFydGljdWxhciwg ZHVyaW5nIHByZWZldGNoaW5nIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjayBkaXNjb3ZlcnMKKwkg KiB0aGUgZW5kLW9mLXNjYW4gdmlhIHByZWZldGNoQmF0Y2guICBUaGUgdGFibGUgQU0gY2hlY2tz IHRoZXNlIGZsYWdzIHNvCisJICogdGhhdCB0aGUgc2NhbiBzaWRlIGRvZXNuJ3QgcmVwZWF0IHRo ZSBzYW1lIGFtZ2V0YmF0Y2ggY2FsbCB3aGVuIGl0CisJICogbGF0ZXIgcmVhY2hlcyB0aGF0IGJh dGNoIGFzIHNjYW5CYXRjaC4KIAkgKi8KIAlib29sCQlrbm93bkVuZEJhY2t3YXJkOwogCWJvb2wJ CWtub3duRW5kRm9yd2FyZDsKQEAgLTI2MCwxMiArMjY0LDIxIEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiAgKiBtYXRjaGVzIGluLiAgSG93ZXZl ciwgdGFibGUgQU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBpbiB3aGF0ZXZlcgog ICogb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVudCAtLSBwcm92aWRlZCB0aGF0IHN1 Y2ggcmVvcmRlcmluZyBjYW5ub3QKICAqIGFmZmVjdCB0aGUgb3JkZXIgdGhhdCB0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4uCisgKgorICogVGhpcyBkYXRh IHN0cnVjdHVyZSBhbHNvIHByb3ZpZGVzIHRhYmxlIEFNcyB3aXRoIGEgd2F5IHRvIHJlYWQgYWhl YWQgb2YgdGhlCisgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBiYXRjaGVz L2luZGV4IHBhZ2VzLiAgVGhlIGZ1cnRoZXIgb3V0CisgKiB0aGUgdGFibGUgQU0gcmVhZHMgYWhl YWQgbGlrZSB0aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVyZS4KKyAq IFRoYXQgd2F5IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBhZ2dyZXNz aXZlbHkgYXMgZGVzaXJlZC4KKyAqIEZvciBleGFtcGxlLCBpbmRleCBzY2FucyBzb21ldGltZXMg bmVlZCB0byByZWFkYWhlYWQgYnkgYXMgbWFueSBhcyBhIGZldworICogZG96ZW4gYW1nZXRiYXRj aCBiYXRjaGVzIGluIG9yZGVyIHRvIG1haW50YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoCisg KiBkaXN0YW5jZSAoZGlzdGFuY2UgZm9yIHJlYWRpbmcgdGFibGUgYmxvY2tzL2ZldGNoaW5nIHRh YmxlIHR1cGxlcykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgogewogCS8q IGN1cnJlbnQgcG9zaXRpb25zIGluIGJhdGNoZXNbXSBmb3Igc2NhbiAqLwogCUJhdGNoUmluZ0l0 ZW1Qb3Mgc2NhblBvczsJLyogc2NhbidzIHJlYWQgcG9zaXRpb24gKi8KIAlCYXRjaFJpbmdJdGVt UG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Q b3MgcHJlZmV0Y2hQb3M7CS8qIHByZWZldGNoaW5nIHBvc2l0aW9uICovCiAKIAlJbmRleFNjYW5C YXRjaCBtYXJrQmF0Y2g7CiAKQEAgLTQ3Miw2ICs0ODUsMjggQEAgaW5kZXhfc2Nhbl9iYXRjaF9h cHBlbmQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogCXJp bmdidWYtPm5leHRCYXRjaCsrOwogfQogCisvKgorICogQ29tcGFyZSB0d28gYmF0Y2ggcmluZyBw b3NpdGlvbnMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICoKKyAqIFJldHVybnMgbmVn YXRpdmUgaWYgcG9zMSBpcyBiZWhpbmQgcG9zMiwgMCBpZiBlcXVhbCwgcG9zaXRpdmUgaWYgcG9z MSBpcworICogYWhlYWQgb2YgcG9zMi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2luZGV4X3Nj YW5fcG9zX2NtcChCYXRjaFJpbmdJdGVtUG9zICpwb3MxLCBCYXRjaFJpbmdJdGVtUG9zICpwb3My LAorCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludDgJCWJhdGNoZGlmZiA9 IChpbnQ4KSAocG9zMS0+YmF0Y2ggLSBwb3MyLT5iYXRjaCk7CisKKwlpZiAoYmF0Y2hkaWZmICE9 IDApCisJCXJldHVybiBiYXRjaGRpZmY7CisKKwkvKiBTYW1lIGJhdGNoLCBjb21wYXJlIGl0ZW1z ICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJcmV0dXJuIHBv czEtPml0ZW0gLSBwb3MyLT5pdGVtOworCWVsc2UKKwkJcmV0dXJuIHBvczItPml0ZW0gLSBwb3Mx LT5pdGVtOworfQorCiAvKgogICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBpdGVtIGlu IHRoZSBiYXRjaC4KICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5o IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRleCBmMmZkNWQzMTUuLjQxOTMwMGE2 YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC01Miw2ICs1Miw3IEBAIGV4dGVybiBQR0RMTElNUE9S VCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcjsKIGV4dGVybiBQR0RMTElNUE9S VCBib29sIGVuYWJsZV9zZXFzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2lu ZGV4c2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleG9ubHlzY2FuOwor ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDsKIGV4dGVy biBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9iaXRtYXBzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JU IGJvb2wgZW5hYmxlX3RpZHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfc29y dDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDdmOWU0MTA0 NC4uN2ExZTJmNjllIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMK QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9y YWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgpAQCAtNjEsNiArNjIs OSBAQCBzdGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX3NjYW5fZ2V0X2Jsb2Nrc19kb25lKEhlYXBT Y2FuRGVzYyBoc2Nhbik7CiBzdGF0aWMgYm9vbCBCaXRtYXBIZWFwU2Nhbk5leHRCbG9jayhUYWJs ZVNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQlib29sICpyZWNoZWNrLAogCQkJCQkJCQkJdWludDY0 ICpsb3NzeV9wYWdlcywgdWludDY0ICpleGFjdF9wYWdlcyk7CitzdGF0aWMgQmxvY2tOdW1iZXIg aGVhcGFtX2dldG5leHRfc3RyZWFtKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJCQkgdm9p ZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCSB2b2lkICpwZXJfYnVmZmVyX2Rh dGEpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTAyLDYgKzEwNiwxNyBAQCBoZWFwYW1f aW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAkvKiBSZXNjYW5z IHNob3VsZCBhdm9pZCBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMgKi8KIAloc2Nh bi0+eHNfdm1faXRlbXMgPSAxOwogCisJLyogUmVzZXQgcmVhZCBzdHJlYW0gZGlyZWN0aW9uIHVu Y29uZGl0aW9uYWxseSAqLworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBOb01vdmVtZW50 U2NhbkRpcmVjdGlvbjsKKworCS8qIFJlc2V0IHJlYWQgc3RyZWFtIGl0c2VsZiwgYW5kIG90aGVy IGFzc29jaWF0ZWQgc3RhdGUgKi8KKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCXsKKwkJ aHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQloc2Nhbi0+ eHNfcGF1c2VkID0gZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0 cmVhbSk7CisJfQorCiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgYXZvaWQgZHJvcHBpbmcgcGlucyBu b3cgaGVsZCBpbiB4c19jYnVmIGFuZCB4c192bWJ1ZmZlci4KIAkgKiBUaGlzIHNhdmVzIGN5Y2xl cyBkdXJpbmcgY2VydGFpbiB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucywgYW5kIGR1cmluZwpAQCAt MTIzLDYgKzEzOCw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0 YSAqc2NhbikKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQogCQlSZWxl YXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7CiAKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3Ry ZWFtKQorCQlyZWFkX3N0cmVhbV9lbmQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwogCXBmcmVl KGhzY2FuKTsKIH0KIApAQCAtMTkyLDcgKzIxMCwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVw bGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCWlmIChCdWZmZXJJc1ZhbGlk KGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCi0J CWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54 c19ibGspOworCQkvKgorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBzdHJlYW0sIHRoZSBzdHJlYW0g d2lsbCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVtYmVyIGNvbWVzIG5leHQgKHRo b3VnaCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBiZWxvdykKKwkJICovCisJCWlm IChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCQloc2Nhbi0+eHNfY2J1ZiA9IHJlYWRfc3RyZWFt X25leHRfYnVmZmVyKGhzY2FuLT54c19yZWFkX3N0cmVhbSwgTlVMTCk7CisJCWVsc2UKKwkJCWhz Y2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19i bGspOwogCiAJCS8qCiAJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRoZSBm aXJzdCB0aW1lCkBAIC0yNzcsNiArMzAyLDMwIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKICAqIChpbXBvcnRhbnQgZm9yIGlubmVy IGluZGV4IHNjYW5zIG9mIGFudGktam9pbnMgYW5kIHNlbWktam9pbnMpLCBhbmQgdGhlCiAgKiBu ZWVkIHRvIG5vdCBob2xkIG9udG8gaW5kZXggbGVhZiBwYWdlcyBmb3IgdG9vIGxvbmcuCiAgKgor ICogRHJvcHBpbmcgbGVhZiBwYWdlIHBpbnMgZWFybHkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCB0aGUgc2NhbiBiZSBhbGxvd2VkIHRv IGhvbGQgb250byBtb3JlIHRoYW4gb25lIGJhdGNoJ3MKKyAqIGxlYWYgcGFnZSBwaW4gYXQgYSB0 aW1lLiAgVGhlIHByaW1hcnkgcmVhc29uIGZvciB0aGlzIHJlc3RyaWN0aW9uIGlzIHRvCisgKiBh dm9pZCB1bmludGVuZGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZWFkIHN0cmVhbSwgd2hpY2gg aGFzIGl0cyBvd24KKyAqIHN0cmF0ZWd5IGZvciBrZWVwaW5nIHRoZSBudW1iZXIgb2YgcGlucyBo ZWxkIGJ5IHRoZSBiYWNrZW5kIHVuZGVyIGNvbnRyb2wuCisgKgorICogT25jZSB3ZSd2ZSByZXNv bHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNhZmVseSBk cm9wCisgKiBpdHMgbGVhZiBwYWdlIHBpbi4gIFRoaXMgaXMgc2FmZSB3aXRoIHJlc3BlY3QgdG8g Y29uY3VycmVudCBWQUNVVU0gYmVjYXVzZQorICogaW5kZXggdmFjdXVtaW5nIHdpbGwgYmxvY2sg b24gYWNxdWlyaW5nIGEgY29uZmxpY3RpbmcgY2xlYW51cCBsb2NrIG9uIHRoZQorICogYmF0Y2gn cyBpbmRleCBwYWdlIGR1ZSB0byBvdXIgaG9sZGluZyBhIHBpbiBvbiB0aGF0IHNhbWUgcGFnZS4g IENvcHlpbmcgdGhlCisgKiByZWxldmFudCB2aXNpYmlsaXR5IG1hcCBkYXRhIGludG8gb3VyIGxv Y2FsIGNhY2hlIHN1ZmZpY2VzIHRvIHByZXZlbnQgdW5zYWZlCisgKiBjb25jdXJyZW50IFRJRCBy ZWN5Y2xpbmc6IGlmIGFueSBvZiB0aGVzZSBUSURzIHBvaW50IHRvIGRlYWQgaGVhcCB0dXBsZXMs CisgKiBWQUNVVU0gY2Fubm90IHBvc3NpYmx5IHJldHVybiBmcm9tIGFtYnVsa2RlbGV0ZSBhbmQg bWFyayB0aGUgcG9pbnRlZC10bworICogaGVhcCBwYWdlcyBhcyBhbGwtdmlzaWJsZS4gIFZBQ1VV TSBfY2FuXyBkbyBzbyBvbmNlIHdlIHJlbGVhc2UgdGhlIGJhdGNoJ3MKKyAqIHBpbiwgYnV0IHRo YXQncyBva2F5OyB3ZSdsbCBiZSB3b3JraW5nIG9mZiBvZiBjYWNoZWQgdmlzaWJpbGl0eSBpbmZv IHRoYXQKKyAqIGluZGljYXRlcyB0aGF0IHRoZSBkZWFkIFRJRHMgYXJlIE5PVCBhbGwtdmlzaWJs ZS4KKyAqCisgKiBOb3RlOiBXZSBjYW5ub3QgZHJvcCB0aGUgcGluIGVhcmx5IHdoZW4gdGhlIHNj YW4gdXNlcyBhIG5vbi1NVkNDIHNuYXBzaG90OworICogd2UgbXVzdCBkZWxheSBpdCB1bnRpbCBh bGwgaGVhcCBmZXRjaGVzIGZvciB0aGUgbG9hZGVkIGJhdGNoIGhhdmUgdGFrZW4KKyAqIHBsYWNl LiAgVGhpcyBpcyB3aHkgd2UgZG9uJ3Qgc3VwcG9ydCBwcmVmZXRjaGluZyBkdXJpbmcgc3VjaCBz Y2Fucy4gIFNlZQorICogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbC4KKyAqCiAgKiBOb3RlIG9u IE1lbW9yeSBPcmRlcmluZyBFZmZlY3RzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKgpAQCAtNDkzLDExICs1NDIsMTMgQEAgc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgSW5k ZXhTY2FuQmF0Y2gKIGhlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvckJhdGNoLCBC YXRjaFJpbmdJdGVtUG9zICpwb3MpCiB7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJ bmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwogCUluZGV4U2NhbkJhdGNo IGJhdGNoID0gTlVMTDsKIAlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiBQR19VU0VEX0ZP Ul9BU1NFUlRTX09OTFkgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOwogCiAJLyogWFhYOiB3ZSBzaG91 bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwogCUFz c2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CisJQXNzZXJ0KGRpcmVjdGlv biA9PSBoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyKTsKIAogCWlmICghcHJpb3JCYXRjaCkKIAl7 CkBAIC01NjYsOSArNjE3LDM5IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCSAqLwogCQlpZiAodW5saWtlbHkoc2Nh bi0+eHNfcmVhZF9leHRyZW1hbF9vbmx5KSAmJiBwcmlvckJhdGNoKQogCQl7CisJCQlBc3NlcnQo IWhzY2FuLT54c19yZWFkX3N0cmVhbSk7CiAJCQlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsK IAkJCXJldHVybiBOVUxMOwogCQl9CisKKwkJLyoKKwkJICogRGVsYXkgaW5pdGlhbGl6aW5nIHN0 cmVhbSB1bnRpbCByZWFkaW5nIGZyb20gc2NhbidzIHNlY29uZCBiYXRjaC4KKwkJICogVGhpcyBo ZXVyaXN0aWMgYXZvaWRzIHdhc3RpbmcgY3ljbGVzIG9uIHN0YXJ0aW5nIGEgcmVhZCBzdHJlYW0g Zm9yCisJCSAqIHZlcnkgc2VsZWN0aXZlIGluZGV4IHNjYW5zLiAgV2UgY2FuIGxpa2VseSBpbXBy b3ZlIHVwb24gdGhpcywgYnV0CisJCSAqIGl0IHdvcmtzIHdlbGwgZW5vdWdoIGZvciBub3cuCisJ CSAqCisJCSAqIEFsc28gYXZvaWQgcHJlZmV0Y2hpbmcgZHVyaW5nIHNjYW5zIHdoZXJlIHdlJ3Jl IHVuYWJsZSB0byBkcm9wIGVhY2gKKwkJICogYmF0Y2gncyBidWZmZXIgcGluIHJpZ2h0IGF3YXkg KG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zKS4gIFdlIGFyZQorCQkgKiBub3QgcHJlcGFyZWQgdG8g c2Vuc2libHkgbGltaXQgdGhlIHRvdGFsIG51bWJlciBvZiBidWZmZXIgcGlucyBoZWxkCisJCSAq IChyZWFkIHN0cmVhbSBoYW5kbGVzIGFsbCBwaW4gcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgdXMs IGFuZCBrbm93cworCQkgKiBub3RoaW5nIGFib3V0IHBpbnMgaGVsZCBvbiBpbmRleCBwYWdlcy93 aXRoaW4gYmF0Y2hlcykuCisJCSAqCisJCSAqIEFsc28gZGVsYXkgY3JlYXRpbmcgYSByZWFkIHN0 cmVhbSBkdXJpbmcgaW5kZXgtb25seSBzY2FucyB0aGF0CisJCSAqIGhhdmVuJ3QgZG9uZSBhbnkg aGVhcCBmZXRjaGVzIHlldC4gIFdlIGRvbid0IHdhbnQgdG8gd2FzdGUgYW55CisJCSAqIGN5Y2xl cyBvbiBhbGxvY2F0aW5nIGEgcmVhZCBzdHJlYW0gdW50aWwgd2UgaGF2ZSBhIGRlbW9uc3RyYXRl ZAorCQkgKiBuZWVkIGZvciBwZXJmb3JtIGhlYXAgZmV0Y2hlcy4KKwkJICovCisJCWlmICghaHNj YW4tPnhzX3JlYWRfc3RyZWFtICYmIHByaW9yQmF0Y2ggJiYgc2Nhbi0+TVZDQ1NjYW4gJiYKKwkJ CWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyICYmCS8qIGZvciBpbmRleC1vbmx5 IHNjYW5zICovCisJCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoKQorCQl7CisJCQlBc3NlcnQo IWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQpOworCisJCQloc2Nhbi0+eHNfcmVhZF9z dHJlYW0gPQorCQkJCXJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX0RFRkFV TFQsIE5VTEwsCisJCQkJCQkJCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktOVU0s CisJCQkJCQkJCQkJICAgaGVhcGFtX2dldG5leHRfc3RyZWFtLCBzY2FuLCAwKTsKKwkJfQogCX0K IAllbHNlCiAJewpAQCAtNTkzLDYgKzY3NCwzMiBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCXJldHVybiBiYXRjaDsK IH0KIAorLyoKKyAqIEhhbmRsZSBhIGNoYW5nZSBpbiBpbmRleCBzY2FuIGRpcmVjdGlvbiAoYXQg dGhlIHR1cGxlIGdyYW51bGFyaXR5KS4KKyAqCisgKiBSZXNldHMgdGhlIHJlYWQgc3RyZWFtLCBz aW5jZSB3ZSBjYW4ndCByZWx5IG9uIHNjYW5Qb3MgY29udGludWluZyB0byBhZ3JlZQorICogd2l0 aCB0aGUgYmxvY2tzIHRoYXQgcmVhZCBzdHJlYW0gYWxyZWFkeSBjb25zdW1lZCB1c2luZyBwcmVm ZXRjaFBvcy4KKyAqCisgKiBOb3RlOiBpZmYgdGhlIHNjYW4gX2NvbnRpbnVlc18gaW4gdGhpcyBu ZXcgZGlyZWN0aW9uLCBhbmQgYWN0dWFsbHkgc3RlcHMKKyAqIG9mZiBzY2FuQmF0Y2ggdG8gYW4g ZWFybGllciBpbmRleCBwYWdlLCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dCB3aWxsIGRlYWwgd2l0aAor ICogaXQuICBCdXQgdGhhdCBtaWdodCBuZXZlciBoYXBwZW47IHRoZSBzY2FuIG1pZ2h0IHlldCBj aGFuZ2UgZGlyZWN0aW9uIGFnYWluCisgKiAob3IganVzdCBlbmQgYmVmb3JlIHJldHVybmluZyBt b3JlIGl0ZW1zKS4KKyAqLworc3RhdGljIHBnX25vaW5saW5lIHZvaWQKK2hlYXBhbV9kaXJjaGFu Z2VfcmVhZHN0cmVhbV9yZXNldChJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkg IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkgIEJhdGNoUmluZ0J1ZmZlciAqYmF0 Y2hyaW5nYnVmKQoreworCS8qIFJlc2V0IHJlYWQgc3RyZWFtIHN0YXRlICovCisJYmF0Y2hyaW5n YnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOworCWhzY2FuLT54c19wYXVzZWQgPSBmYWxz ZTsKKwloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOworCisJLyogUmVzZXQg cmVhZCBzdHJlYW0gaXRzZWxmICovCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwkJcmVh ZF9zdHJlYW1fcmVzZXQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKK30KKwogLyogLS0tLS0tLS0t LS0tLS0tLQogICoJCWhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCAtIGdldCBuZXh0IFRJRCBmcm9t IGJhdGNoIHJpbmcgYnVmZmVyCiAgKgpAQCAtNjExLDYgKzcxOCwxMiBAQCBoZWFwYW1fYmF0Y2hf Z2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2Fu LAogCUFzc2VydCghc2NhblBvcy0+dmFsaWQgfHwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0g c2NhblBvcy0+YmF0Y2gpOwogCUFzc2VydChzY2FuUG9zLT52YWxpZCB8fCBpbmRleF9zY2FuX2Jh dGNoX2NvdW50KHNjYW4pID09IDApOwogCisJLyogSGFuZGxlIHJlc2V0dGluZyB0aGUgcmVhZCBz dHJlYW0gd2hlbiBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzICovCisJaWYgKGhzY2FuLT54c19yZWFk X3N0cmVhbV9kaXIgPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pCisJCWhzY2FuLT54c19yZWFk X3N0cmVhbV9kaXIgPSBkaXJlY3Rpb247CS8qIGZpcnN0IGNhbGwgKi8KKwllbHNlIGlmICh1bmxp a2VseShoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyICE9IGRpcmVjdGlvbikpCisJCWhlYXBhbV9k aXJjaGFuZ2VfcmVhZHN0cmVhbV9yZXNldChoc2NhbiwgZGlyZWN0aW9uLCBiYXRjaHJpbmdidWYp OworCiAJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBzY2FuQmF0 Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAogCSAqIG1hdGNoaW5nIGl0ZW0ncyBUSUQvaW5k ZXggdHVwbGUgZnJvbQpAQCAtNjE5LDcgKzczMiw3IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0X3Rp ZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAJewogCQkv KgogCQkgKiBzY2FuUG9zIGlzIHZhbGlkLCBzbyBzY2FuQmF0Y2ggbXVzdCBhbHJlYWR5IGJlIGxv YWRlZCBpbiBiYXRjaCByaW5nCi0JCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJlLgor CQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZSAoY2FuJ3QgZG8gdGhpcyB3aXRoIHBy ZWZldGNoQmF0Y2gpLgogCQkgKi8KIAkJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09 IHNjYW5Qb3MtPmJhdGNoKTsKIApAQCAtNjY0LDIxICs3NzcsMjc1IEBAIGhlYXBhbV9iYXRjaF9n ZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4s CiAJewogCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4s CiAJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlCYXRjaFJpbmdJdGVt UG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOwogCiAJCS8qIGZy ZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gp ICovCiAJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CiAKKwkJLyoK KwkJICogSWYgd2UncmUgYWJvdXQgdG8gcmVsZWFzZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRjaFBv cyBjdXJyZW50bHkKKwkJICogcG9pbnRzIHRvLCBqdXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQb3Mu ICBXZSdsbCByZWluaXRpYWxpemUgaXQKKwkJICogdXNpbmcgc2NhblBvcyBpZiBhbmQgd2hlbiBo ZWFwYW1fZ2V0bmV4dF9zdHJlYW0gaXMgbmV4dCBjYWxsZWQuIChXZQorCQkgKiBtdXN0IGF2b2lk IGNvbmZ1c2luZyBhIHByZWZldGNoUG9zLT5iYXRjaCB0aGF0J3MgYWN0dWFsbHkgYmVmb3JlCisJ CSAqIGhlYWRCYXRjaCB3aXRoIG9uZSB0aGF0J3MgYWZ0ZXIgbmV4dEJhdGNoIGR1ZSB0byB1aW50 OCBvdmVyZmxvdzsKKwkJICogc2ltcGxlc3Qgd2F5IGlzIHRvIGludmFsaWRhdGUgcHJlZmV0Y2hQ b3MgbGlrZSB0aGlzLikKKwkJICovCisJCWlmIChwcmVmZXRjaFBvcy0+dmFsaWQgJiYKKwkJCXBy ZWZldGNoUG9zLT5iYXRjaCA9PSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCkKKwkJCXByZWZldGNo UG9zLT52YWxpZCA9IGZhbHNlOworCiAJCS8qIFJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmlu ZyBidWZmZXIgKi8KIAkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKKworCQlpZiAoaHNjYW4t PnhzX3BhdXNlZCkKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0gd2Fz IHBhdXNlZCBieSBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0gZHVlCisJCQkgKiB0byBleGhhdXN0aW5n IGFsbCBhdmFpbGFibGUgZnJlZSBiYXRjaCBzbG90cy4gIFdlIGp1c3QgZnJlZWQgdXAKKwkJCSAq IG9uZSBzdWNoIHNsb3Qgbm93LCB0aG91Z2guICBSZXN1bWUgdGhlIHJlYWQgc3RyZWFtIHRvIHJl LWVuYWJsZQorCQkJICogcHJlZmV0Y2hpbmcuCisJCQkgKi8KKwkJCUFzc2VydCghaW5kZXhfc2Nh bl9iYXRjaF9mdWxsKHNjYW4pKTsKKwkJCXJlYWRfc3RyZWFtX3Jlc3VtZShoc2Nhbi0+eHNfcmVh ZF9zdHJlYW0pOworCQkJaHNjYW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCQl9CiAJfQogCiAJLyog SW4gcHJhY3RpY2Ugc2NhbkJhdGNoIHdpbGwgYWx3YXlzIGJlIHRoZSByaW5nIGJ1ZmZlcidzIGhl YWRCYXRjaCAqLwogCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5i YXRjaCk7CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcGF1c2VkKTsKIAogCXJldHVybiBoZWFwYW1fYmF0 Y2hfcmV0dXJuX3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Qb3Ms CiAJCQkJCQkJCSAgIGFsbF92aXNpYmxlKTsKIH0KIAorLyoKKyAqIGhlYXBhbV9nZXRuZXh0X3N0 cmVhbQorICoJCXJldHVybiB0aGUgbmV4dCBibG9jayB0byBwYXNzIHRvIHRoZSByZWFkIHN0cmVh bQorICoKKyAqIFRoZSBpbml0aWFsIGJhdGNoIGlzIGFsd2F5cyBsb2FkZWQgYnkgaGVhcGFtX2Jh dGNoX2dldG5leHRfdGlkLiAgV2UgZG9uJ3QKKyAqIGdldCBjYWxsZWQgdW50aWwgdGhlIGZpcnN0 IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKCkgY2FsbCwgd2hlbiBhIGhlYXAKKyAqIGJsb2NrIGlz IHJlcXVlc3RlZCBmcm9tIHRoZSBzY2FuJ3Mgc3RyZWFtIGZvciB0aGUgZmlyc3QgdGltZS4KKyAq CisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0b3JlZCBpbiBwcmVmZXRj aFBvcy4gIEl0IGlzIHR5cGljYWwgZm9yCisgKiBwcmVmZXRjaFBvcyB0byBjb25zaXN0ZW50bHkg c3RheSBhaGVhZCBvZiB0aGUgc2NhblBvcyBwb3NpdGlvbiB0aGF0J3MgdXNlZCB0bworICogdHJh Y2sgdGhlIG5leHQgVElEIHRvIGJlIHJldHVybmVkIHRvIHRoZSBzY2FuIGJ5IGhlYXBhbV9iYXRj aF9nZXRuZXh0X3RpZAorICogYWZ0ZXIgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IGNhbGxlZC4gIEhv d2V2ZXIsIHRoYXQgaXNuJ3QgYSBwcmVjb25kaXRpb24uCisgKiBUaGVyZSBpcyBhIHN0cmljdCBw b3N0Y29uZGl0aW9uLCB0aG91Z2g6IHdoZW4gd2UgcmV0dXJuIHdlJ2xsIGFsd2F5cyBsZWF2ZQor ICogc2NhblBvcyA8PSBwcmVmZXRjaFBvcyAoZXhjZXB0IGluIGNhc2VzIHdoZXJlIHdlIHJldHVy biBJbnZhbGlkQmxvY2tOdW1iZXIpLgorICovCitzdGF0aWMgQmxvY2tOdW1iZXIKK2hlYXBhbV9n ZXRuZXh0X3N0cmVhbShSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVf ZGF0YSwKKwkJCQkJICB2b2lkICpwZXJfYnVmZmVyX2RhdGEpCit7CisJSW5kZXhTY2FuRGVzYyBz Y2FuID0gKEluZGV4U2NhbkRlc2MpIGNhbGxiYWNrX3ByaXZhdGVfZGF0YTsKKwlJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0 Y2g7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVm OworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOwor CUJhdGNoUmluZ0l0ZW1Qb3MgKnByZWZldGNoUG9zID0gJmJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQ b3M7CisJU2NhbkRpcmVjdGlvbiB4c19yZWFkX3N0cmVhbV9kaXIgPSBoc2Nhbi0+eHNfcmVhZF9z dHJlYW1fZGlyOworCUluZGV4U2NhbkJhdGNoIHByZWZldGNoQmF0Y2g7CisJYm9vbAkJZnJvbVNj YW5Qb3MgPSBmYWxzZTsKKworCS8qCisJICogc2NhblBvcyBtdXN0IGFsd2F5cyBiZSB2YWxpZCB3 aGVuIHByZWZldGNoaW5nIHRha2VzIHBsYWNlLiAgVGhlcmUgaGFzCisJICogdG8gYmUgYXQgbGVh c3Qgb25lIGJhdGNoLCBsb2FkZWQgYXMgb3VyIHNjYW5CYXRjaC4gIFRoZSBzY2FuIGRpcmVjdGlv bgorCSAqIG11c3QgYmUgZXN0YWJsaXNoZWQsIHRvby4KKwkgKi8KKwlBc3NlcnQoaW5kZXhfc2Nh bl9iYXRjaF9jb3VudChzY2FuKSA+IDApOworCUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisJQXNz ZXJ0KHNjYW5Qb3MtPnZhbGlkKTsKKwlBc3NlcnQoIWhzY2FuLT54c19wYXVzZWQpOworCUFzc2Vy dCh4c19yZWFkX3N0cmVhbV9kaXIgIT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pOworCisJLyoK KwkgKiBwcmVmZXRjaFBvcyBtaWdodCBub3QgeWV0IGJlIHZhbGlkLiAgSXQgbWlnaHQgaGF2ZSBh bHNvIGZhbGxlbiBiZWhpbmQKKwkgKiBzY2FuUG9zLiAgRGVhbCB3aXRoIGJvdGguCisJICoKKwkg KiBJZiBwcmVmZXRjaFBvcyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCB0aGF0IHR5cGlj YWxseSBpbmRpY2F0ZXMKKwkgKiB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3Ig dGhlIGVudGlyZSBzY2FuLiAgV2UgaW5pdGlhbGl6ZQorCSAqIHByZWZldGNoUG9zIHVzaW5nIHRo ZSBjdXJyZW50IHNjYW5Qb3MsIHNpbmNlIHRoZSBjdXJyZW50IHNjYW5CYXRjaAorCSAqIGl0ZW0n cyBUSUQgc2hvdWxkIGhhdmUgaXRzIGJsb2NrIG51bWJlciByZXR1cm5lZCBieSB0aGUgcmVhZCBz dHJlYW0KKwkgKiBmaXJzdC4gIEl0J3MgbGlrZWx5IHRoYXQgcHJlZmV0Y2hQb3Mgd2lsbCBnZXQg YWhlYWQgb2Ygc2NhblBvcyBiZWZvcmUKKwkgKiBsb25nLCBidXQgdGhhdCBoYXNuJ3QgaGFwcGVu ZWQgeWV0LgorCSAqCisJICogSXQncyBhbHNvIHBvc3NpYmxlIGZvciBwcmVmZXRjaFBvcyB0byAi ZmFsbCBiZWhpbmQiIHNjYW5Qb3MsIGF0IGxlYXN0CisJICogaW4gYSB0cml2aWFsIHNlbnNlOiBp ZiBtYW55IGFkamFjZW50IGl0ZW1zIGFyZSByZXR1cm5lZCB0aGF0IGNvbnRhaW4KKwkgKiBUSURz IHRoYXQgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcCBibG9jaywgc2NhblBvcyBjYW4gYWN0dWFsbHkg b3ZlcnRha2UKKwkgKiBwcmVmZXRjaFBvcyAocHJlZmV0Y2hQb3MgY2FuJ3QgYWR2YW5jZSB1bnRp bCB0aGUgc2NhbiBhY3R1YWxseSBjYWxscworCSAqIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKS4g IFJlaW5pdGlhbGl6aW5nIGZyb20gc2NhblBvcyBpcyBlbm91Z2ggdG8KKwkgKiBlbnN1cmUgdGhh dCBwcmVmZXRjaFBvcyBzdGlsbCBmZXRjaGVzIHRoZSBuZXh0IGhlYXAgYmxvY2sgdGhhdCBzY2Fu UG9zCisJICogd2lsbCByZXF1aXJlIChwcmVmZXRjaFBvcyBjYW4gbmV2ZXIgZmFsbCBiZWhpbmQg ImJ5IG1vcmUgdGhhbiBvbmUgZ3JvdXAKKwkgKiBvZiBpdGVtcyB0aGF0IGFsbCBwb2ludCB0byB0 aGUgc2FtZSBoZWFwIGJsb2NrIiwgc28gdGhpcyBpcyBzYWZlKS4KKwkgKgorCSAqIE5vdGU6IHdo ZW4gaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkIGZyZWVzIGEgYmF0Y2ggdGhhdCBwcmVmZXRjaFBv cworCSAqIHBvaW50cyB0bywgaXQnbGwgaW52YWxpZGF0ZSBwcmVmZXRjaFBvcyBmb3IgdXMuICBU aGlzIHJlbW92ZXMgYW55CisJICogZGFuZ2VyIG9mIHByZWZldGNoUG9zLmJhdGNoIGZhbGxpbmcg c28gZmFyIGJlaGluZCBzY2FuUG9zLmJhdGNoIHRoYXQgaXQKKwkgKiB3cmFwcyBhcm91bmQgKGFu ZCBhcHBlYXJzIHRvIGJlIGFoZWFkIG9mIHNjYW5Qb3MgaW5zdGVhZCBvZiBiZWhpbmQgaXQpLgor CSAqLworCWlmICghcHJlZmV0Y2hQb3MtPnZhbGlkIHx8CisJCWluZGV4X3NjYW5fcG9zX2NtcChw cmVmZXRjaFBvcywgc2NhblBvcywgeHNfcmVhZF9zdHJlYW1fZGlyKSA8IDApCisJeworCQloc2Nh bi0+eHNfcHJlZmV0Y2hfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCSpwcmVmZXRjaFBv cyA9ICpzY2FuUG9zOworCQlmcm9tU2NhblBvcyA9IHRydWU7CisKKwkJLyoKKwkJICogV2UgbXVz dCBhdm9pZCBob2xkaW5nIG9uIHRvIGFueSBiYXRjaCdzIGJ1ZmZlciBwaW4gZm9yIG1vcmUgdGhh biBhbgorCQkgKiBpbnN0YW50LCB0byBhdm9pZCB1bmRlc2lyYWJsZSBpbnRlcmFjdGlvbnMgd2l0 aCB0aGUgc2NhbidzIHJlYWQKKwkJICogc3RyZWFtLiAgYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIHNj YW5zIGFsd2F5cyBnZXQgdGhpcyBiZWhhdmlvcgorCQkgKiBhdXRvbWF0aWNhbGx5LiAgT3RoZXIg dHlwZXMgb2Ygc2NhbnMgKHRoZXNlIGFyZSBhbGwgaW5kZXgtb25seQorCQkgKiBzY2FucyBpbiBw cmFjdGljZSkgYXJlIG1hZGUgdG8gZHJvcCB0aGVpciBidWZmZXIgcGluIGVhZ2VybHkKKwkJICog dGhyb3VnaCBhIHBvbGljeSBvZiBhbHdheXMgZWFnZXJseSBzZXR0aW5nIGFsbCB0aGUgYmF0Y2gg aXRlbSdzCisJCSAqIHZpc2liaWxpdHkgaW5mbyBpbiBvbmUgZ28uCisJCSAqLworCQlpZiAoc2Nh bi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2g7CisKKwkJCS8q IE1ha2UgaGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eSByZWxlYXNlIHJlc291cmNlcyBl YWdlcmx5ICovCisJCQloc2Nhbi0+eHNfdm1faXRlbXMgPSBzY2FuLT5tYXhpdGVtc2JhdGNoOwor CisJCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIG5ldyBwcmVmZXRjaEJhdGNoIGhhcyBubyByZXNv dXJjZXMgaGVsZCAqLworCQkJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwg cHJlZmV0Y2hQb3MtPmJhdGNoKTsKKwkJCWhiYXRjaCA9IGhlYXBfYmF0Y2hfZGF0YShwcmVmZXRj aEJhdGNoLCBzY2FuKTsKKworCQkJLyogU2V0IHZpc2liaWxpdHkgaW5mbyBub3Qgc2V0IHRocm91 Z2ggc2NhbkJhdGNoICovCisJCQloZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5KHNjYW4s IHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJcHJlZmV0Y2hCYXRjaCwgaGJhdGNoLAor CQkJCQkJCQkJCQlwcmVmZXRjaFBvcyk7CisJCX0KKwkJZWxzZQorCQkJQXNzZXJ0KHNjYW4tPmJh dGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJfQorCisJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3NjYW5f YmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKTsKKwlmb3IgKDs7KQorCXsKKwkJQmF0Y2hN YXRjaGluZ0l0ZW0gKml0ZW07CisJCUJsb2NrTnVtYmVyIHByZWZldGNoX2Jsb2NrOworCisJCS8q CisJCSAqIFdlIG5ldmVyIGNhbGwgYW1nZXRiYXRjaCB3aXRob3V0IGltbWVkaWF0ZWx5IHJlbGVh c2luZyB0aGUgYmF0Y2gncworCQkgKiBpbmRleCBBTSByZXNvdXJjZXMgKHdoaWNoIHJlcXVpcmVz IHNwZWNpYWwgY2FyZSBkdXJpbmcgaW5kZXgtb25seQorCQkgKiBzY2FucykuICBUaGUgcmVhZCBz dHJlYW0gaXMgc2Vuc2l0aXZlIHRvIGJ1ZmZlciBzaG9ydGFnZXMsIHNvIHdlCisJCSAqIGRlZmVu c2l2ZWx5IGF2b2lkIGFueXRoaW5nIHRoYXQgdmlzaWJseSBhZmZlY3RzIHRoZSBwZXItYmFja2Vu ZAorCQkgKiBidWZmZXIgbGltaXQuCisJCSAqLworCisJCWlmIChmcm9tU2NhblBvcykKKwkJewor CQkJLyoKKwkJCSAqIERvbid0IGluY3JlbWVudCBpdGVtIHdoZW4gcHJlZmV0Y2hQb3Mgd2FzIGp1 c3QgaW5pdGlhbGl6ZWQKKwkJCSAqIHVzaW5nIHNjYW5Qb3MuICBXZSdsbCByZXR1cm4gdGhlIHNj YW5Qb3MgaXRlbSdzIGhlYXAgYmxvY2sKKwkJCSAqIGRpcmVjdGx5IG9uIHRoZSBmaXJzdCBjYWxs IGhlcmUuICBJbiBvdGhlciB3b3Jkcywgd2UnbGwgcmV0dXJuCisJCQkgKiB0aGUgaGVhcCBibG9j ayBmb3IgdGhlIFRJRCBwYXNzZWQgdG8gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlCisJCQkgKiBh dCB0aGUgcG9pbnQgd2hlcmUgaXQgY2FsbGVkIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGZvciB0 aGUKKwkJCSAqIGZpcnN0IHRpbWUgZHVyaW5nIHRoZSBzY2FuLgorCQkJICovCisJCQlmcm9tU2Nh blBvcyA9IGZhbHNlOworCQl9CisJCWVsc2UgaWYgKCFpbmRleF9zY2FuX3Bvc19hZHZhbmNlKHhz X3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkgcHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3Mp KQorCQl7CisJCQkvKgorCQkJICogUmFuIG91dCBvZiBpdGVtcyBmcm9tIHByZWZldGNoQmF0Y2gu ICBUcnkgdG8gYWR2YW5jZSB0byB0aGUKKwkJCSAqIHNjYW4ncyBuZXh0IGJhdGNoLgorCQkJICov CisJCQlpZiAodW5saWtlbHkoaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKSkKKwkJCXsKKwkJ CQkvKgorCQkJCSAqIENhbid0IGFkdmFuY2UgcHJlZmV0Y2hCYXRjaCBiZWNhdXNlIGFsbCBhdmFp bGFibGUKKwkJCQkgKiBiYXRjaHJpbmdidWYgYmF0Y2ggc2xvdHMgYXJlIGN1cnJlbnRseSBpbiB1 c2UuCisJCQkJICoKKwkJCQkgKiBEZWFsIHdpdGggdGhpcyBieSBtb21lbnRhcmlseSBwYXVzaW5n IHRoZSByZWFkIHN0cmVhbS4KKwkJCQkgKiBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgd2lsbCBy ZXN1bWUgdGhlIHJlYWQgc3RyZWFtIGxhdGVyLAorCQkJCSAqIHRob3VnaCBvbmx5IGFmdGVyIHNj YW5Qb3MgaGFzIGNvbnN1bWVkIGFsbCByZW1haW5pbmcgaXRlbXMKKwkJCQkgKiBmcm9tIHNjYW5C YXRjaCAoYXQgd2hpY2ggcG9pbnQgc2NhbkJhdGNoIHdpbGwgYmUgZnJlZWQsCisJCQkJICogbWFr aW5nIGl0cyBzbG90IGF2YWlsYWJsZSBmb3IgcmV1c2UgYnkgYSBsYXRlciBiYXRjaCkuCisJCQkJ ICoKKwkJCQkgKiBJbiBwcmFjdGljZSB3ZSBoYXJkbHkgZXZlciBuZWVkIHRvIGRvIHRoaXMuICBJ dCB3b3VsZCBiZQorCQkJCSAqIHBvc3NpYmxlIHRvIGF2b2lkIHRoZSBuZWVkIHRvIHBhdXNlIHRo ZSByZWFkIHN0cmVhbSBieQorCQkJCSAqIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgc2xvdHMsIGJ1 dCB0aGF0IHdvdWxkIGFkZCBjb21wbGV4aXR5CisJCQkJICogZm9yIG5vIHJlYWwgYmVuZWZpdC4K KwkJCQkgKi8KKwkJCQloc2Nhbi0+eHNfcGF1c2VkID0gdHJ1ZTsKKwkJCQlyZXR1cm4gcmVhZF9z dHJlYW1fcGF1c2Uoc3RyZWFtKTsKKwkJCX0KKworCQkJcHJlZmV0Y2hCYXRjaCA9IGhlYXBhbV9i YXRjaF9nZXRuZXh0KHNjYW4sIHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJCSBwcmVm ZXRjaEJhdGNoLCBwcmVmZXRjaFBvcyk7CisJCQlpZiAoIXByZWZldGNoQmF0Y2gpCisJCQl7CisJ CQkJLyoKKwkJCQkgKiBGYWlsZWQgdG8gbG9hZCBuZXh0IGJhdGNoLCBzbyBhbGwgdGhlIGJhdGNo ZXMgdGhhdCB0aGUgc2NhbgorCQkJCSAqIHdpbGwgZXZlciByZXF1aXJlIChiYXJyaW5nIGEgY2hh bmdlIGluIHNjYW4gZGlyZWN0aW9uKSBhcmUKKwkJCQkgKiBub3cgbG9hZGVkCisJCQkJICovCisJ CQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCX0KKworCQkJLyogUG9zaXRpb24gcHJl ZmV0Y2hQb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldyBwcmVmZXRjaEJhdGNoICovCisJCQlpbmRleF9z Y2FuX3Bvc19uZXh0YmF0Y2goeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJIHByZWZldGNo QmF0Y2gsIHByZWZldGNoUG9zKTsKKworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCXsK KwkJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEocHJlZmV0Y2hCYXRj aCwgc2Nhbik7CisKKwkJCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSB2aXNpYmlsaXR5IGluZm8gZm9y IHRoZSBlbnRpcmUgYmF0Y2ggKi8KKwkJCQlBc3NlcnQoaHNjYW4tPnhzX3ZtX2l0ZW1zID09IHNj YW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJCWhlYXBhbV9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHko c2NhbiwgeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJCQkJcHJlZmV0Y2hCYXRjaCwgaGJh dGNoLAorCQkJCQkJCQkJCQkJcHJlZmV0Y2hQb3MpOworCQkJfQorCQkJZWxzZQorCQkJCUFzc2Vy dChzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCQl9CisKKwkJLyoKKwkJICogcHJlZmV0 Y2hQb3Mgbm93IHBvaW50cyB0byB0aGUgbmV4dCBpdGVtIHdob3NlIFRJRCdzIGhlYXAgYmxvY2sK KwkJICogbnVtYmVyIG1pZ2h0IG5lZWQgdG8gYmUgcHJlZmV0Y2hlZAorCQkgKi8KKwkJQXNzZXJ0 KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKSA9PSBwcmVmZXRjaEJh dGNoKTsKKwkJQXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID49IHByZWZldGNoQmF0Y2gtPmZpcnN0 SXRlbSAmJgorCQkJICAgcHJlZmV0Y2hQb3MtPml0ZW0gPD0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0 ZW0pOworCQkvKiBzY2FuUG9zIGlzIGFsd2F5cyA8PSBwcmVmZXRjaFBvcyB3aGVuIHdlIHJldHVy biAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21wKHNjYW5Qb3MsIHByZWZldGNoUG9zLCB4 c19yZWFkX3N0cmVhbV9kaXIpIDw9IDApOworCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJ CXsKKwkJCUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBfYmF0Y2hfZGF0YShwcmVmZXRjaEJh dGNoLCBzY2FuKTsKKworCQkJQXNzZXJ0KGhiYXRjaC0+dmlzSW5mb1twcmVmZXRjaFBvcy0+aXRl bV0gJiBCQVRDSF9WSVNfQ0hFQ0tFRCk7CisJCQlpZiAoaGJhdGNoLT52aXNJbmZvW3ByZWZldGNo UG9zLT5pdGVtXSAmIEJBVENIX1ZJU19BTExfVklTSUJMRSkKKwkJCXsKKwkJCQkvKiBpdGVtIGlz IGtub3duIHRvIGJlIGFsbC12aXNpYmxlIC0tIGRvbid0IHByZWZldGNoICovCisJCQkJY29udGlu dWU7CisJCQl9CisJCX0KKworCQlpdGVtID0gJnByZWZldGNoQmF0Y2gtPml0ZW1zW3ByZWZldGNo UG9zLT5pdGVtXTsKKwkJcHJlZmV0Y2hfYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVy KCZpdGVtLT50YWJsZVRpZCk7CisKKwkJaWYgKHByZWZldGNoX2Jsb2NrID09IGhzY2FuLT54c19w cmVmZXRjaF9ibG9jaykKKwkJeworCQkJLyoKKwkJCSAqIHByZWZldGNoX2Jsb2NrIG1hdGNoZXMg dGhlIGxhc3QgcHJlZmV0Y2hQb3MgaXRlbSdzIFRJRCdzIGhlYXAKKwkJCSAqIGJsb2NrIG51bWJl cjsgd2UgbXVzdCBub3QgcmV0dXJuIHRoZSBzYW1lIHByZWZldGNoX2Jsb2NrIHR3aWNlCisJCQkg KiAodHdpY2UgaW4gc3VjY2Vzc2lvbikKKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKworCQkv KiBXZSBoYXZlIGEgbmV3IGhlYXAgYmxvY2sgbnVtYmVyIHRvIHJldHVybiB0byByZWFkIHN0cmVh bSAqLworCQloc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2sgPSBwcmVmZXRjaF9ibG9jazsKKwkJcmV0 dXJuIHByZWZldGNoX2Jsb2NrOworCX0KKworCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7Cit9 CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQloZWFwYW1faW5kZXhfZmV0Y2hfaGVhcCAtIGdl dCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhiYXRjaC5jCmluZGV4IDgwNmRlZmQwZS4uMzQyNzI3ZjJiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGJhdGNoLmMKQEAgLTEwLDcgKzEwLDEwIEBACiAgKiBhcHByb2FjaCBlbmFibGVz IGVmZmljaWVudCBwcmVmZXRjaGluZyBvZiB0YWJsZSBBTSBibG9ja3MgZHVyaW5nIG9yZGVyZWQK ICAqIGluZGV4IHNjYW5zLgogICoKLSAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGlu IGluZGV4IGtleSBzcGFjZSBvcmRlci4KKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVz IGluIGluZGV4IGtleSBzcGFjZSBvcmRlci4gIFRoaXMgYWxsb3dzIHRoZQorICogdGFibGUgQU0g dG8gbWFpbnRhaW4gYW4gYWRlcXVhdGUgcHJlZmV0Y2ggZGlzdGFuY2U6IGl0cyByZWFkIHN0cmVh bQorICogY2FsbGJhY2sgaXMgdGhlcmVieSBhYmxlIHRvIHJlcXVlc3QgdGFibGUgYmxvY2tzIHJl ZmVyZW5jZWQgYnkgaW5kZXggcGFnZXMKKyAqIHRoYXQgYXJlIHdlbGwgYWhlYWQgb2YgdGhlIGN1 cnJlbnQgc2NhbiBwb3NpdGlvbidzIGluZGV4IHBhZ2UuCiAgKgogICogVGhlcmUncyB0aHJlZSB0 eXBlcyBvZiBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGU6CiAgKgpAQCAtMzAsNiArMzMsMjUgQEAK ICAqICAgIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICBUaGVz ZSBtYW5hZ2UgYmF0Y2gKICAqICAgIGFsbG9jYXRpb24sIGluZGV4IHBhZ2UgYnVmZmVyIGxvY2sg cmVsZWFzZSwgYW5kIGJhdGNoIG1lbW9yeSByZWN5Y2xpbmcuCiAgKgorICogVGhlc2UgdGhyZWUg bGF5ZXJzIGNvb3JkaW5hdGUgd2l0aG91dCBleHBsaWNpdCBjb3VwbGluZzogdGhlIGNvcmUgbGlm ZWN5Y2xlCisgKiBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGFibGUgQU1zIHVzZSBzY2FuUG9zL3Nj YW5CYXRjaCBhbmQgcHJlZmV0Y2hQb3MvCisgKiBwcmVmZXRjaEJhdGNoIGluIGEgc3RhbmRhcmRp emVkIHdheSAoc2VlIGhlYXBhbV9oYW5kbGVyLmMgZm9yIHRoZSByZWZlcmVuY2UKKyAqIGltcGxl bWVudGF0aW9uKSwgd2hpbGUgdGFibGUgQU1zIGFzc3VtZSB0aGF0IGluZGV4IEFNcyBmcmVlIGFu ZCB1bmxvY2sKKyAqIGJhdGNoZXMgYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9ucyBlc3RhYmxp c2hlZCBoZXJlLiAgU2VlIGluZGV4YW0uc2dtbAorICogZm9yIHRoZSBmdWxsIHNwZWNpZmljYXRp b24gb2YgdGhpcyBjb250cmFjdC4KKyAqCisgKiBUaGUgdGFibGUgQU0gZnVsbHkgY29udHJvbHMg dGhlIHJlYWQgc3RyZWFtIGFzIGl0cyBvd24gcHJpdmF0ZSBzdGF0ZS4KKyAqIFdoZW4gdGhlIHNj YW4gZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSB0YWJsZSBBTSBtdXN0IGltbWVkaWF0ZWx5IHJlc2V0 IGl0cworICogcmVhZCBzdHJlYW0gYW5kIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MgLS0gYmxvY2tz IGFscmVhZHkgcmVxdWVzdGVkIHZpYQorICogcHJlZmV0Y2hQb3Mgd2lsbCBubyBsb25nZXIgbWF0 Y2ggd2hhdCBzY2FuUG9zIG5lZWRzIHRvIHJldHVybi4KKyAqCisgKiBDcm9zc2luZyBhIGJhdGNo IGJvdW5kYXJ5IGluIGEgbmV3IHNjYW4gZGlyZWN0aW9uIGlzIGEgc2VwYXJhdGUgcHJvY2VzcywK KyAqIGhhbmRsZWQgaGVyZTogdGFibGUgQU1zIGFyZSByZXF1aXJlZCB0byBjYWxsIHRhYmxlYW1f dXRpbF9iYXRjaF9kaXJjaGFuZ2UKKyAqIHRvIGxlYXZlIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZyBi dWZmZXIgaW4gYSBjb25zaXN0ZW50IHN0YXRlLiAgVGhlIGN1cnJlbnQKKyAqIGltcGxlbWVudGF0 aW9uIGhhbmRsZXMgdGhpcyBieSBzaW1wbHkgZGlzY2FyZGluZyBtb3N0IGJhdGNoZXMuICBUaGUg a2V5CisgKiBpbnZhcmlhbnQgaXMgdGhhdCBhbGwgbG9hZGVkIGJhdGNoZXMgbXVzdCBiZSBpbiBh IGNvbnNpc3RlbnQgc2NhbiBkaXJlY3Rpb24KKyAqIG9yZGVyLgorICoKICAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJz aXR5IG9mIENhbGlmb3JuaWEKICAqCkBAIC02Miw2ICs4NCw3IEBAIGluZGV4X2JhdGNoc2Nhbl9p bml0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCXNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zLnZh bGlkID0gZmFsc2U7CiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtQb3MudmFsaWQgPSBmYWxzZTsK KwlzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKIAogCXNjYW4t PmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggPSBOVUxMOwogCXNjYW4tPmJhdGNocmluZ2J1Zi5oZWFk QmF0Y2ggPSAwOwkvKiBpbml0aWFsIGhlYWQgYmF0Y2ggKi8KQEAgLTgzLDYgKzEwNiw3IEBAIGlu ZGV4X2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiAKIAliYXRjaHJpbmdidWYt PnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsKIAliYXRjaHJpbmdidWYtPm1hcmtQb3MudmFsaWQgPSBm YWxzZTsKKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CiAKIAkvKgog CSAqIEVuc3VyZSB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCB3b24ndCBza2lwIHRoZSBvbGQgbWFy a0JhdGNoIGluIHRoZSBsb29wCkBAIC0yMTksNyArMjQzLDEzIEBAIGluZGV4X2JhdGNoc2Nhbl9t YXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiB0aGUgY3VycmVudCBzY2FuQmF0Y2ggd2hl biBuZWVkZWQuCiAgKgogICogV2UganVzdCBkaXNjYXJkIGFsbCBiYXRjaGVzIChvdGhlciB0aGFu IG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAotICogZXhjZXB0IHdoZW4gbWFya0JhdGNo IGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4KKyAqIGV4Y2VwdCB3aGVu IG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guICBXZSBh bHdheXMKKyAqIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBUaGUgcmVhZCBzdHJlYW0gYW5kIHJl bGF0ZWQgcHJlZmV0Y2hpbmcgc3RhdGUgYXJlCisgKiByZXNldCBieSB0YWJsZV9pbmRleF9mZXRj aF9yZXNldCgpLCBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24uICBUaGlzCisgKiBhcHByb2Fj aCBrZWVwcyB0aGluZ3Mgc2ltcGxlIGZvciB0YWJsZSBBTXM6IG1vc3QgY29kZSB0aGF0IGRlYWxz IHdpdGgKKyAqIGJhdGNoZXMgaXMgdGhlcmVieSBhYmxlIHRvIGFzc3VtZSB0aGF0IHRoZSBjb21t b24gY2FzZSB3aGVyZSBzY2FuIGRpcmVjdGlvbgorICogbmV2ZXIgY2hhbmdlcyBpcyB0aGUgb25s eSBjYXNlICh0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlIHRha2VzIGEKKyAqIHNpbWlsYXIg YXBwcm9hY2ggdG8gaGFuZGxpbmcgYSBjcm9zcy1iYXRjaCBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rp b24pLgogICovCiB2b2lkCiBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVz YyBzY2FuKQpAQCAtMjM0LDYgKzI2NCwxNCBAQCBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOwogCUFzc2Vy dChtYXJrUG9zLT52YWxpZCk7CiAKKwkvKgorCSAqIFJlc3RvcmluZyBhIG1hcmsgYWx3YXlzIHJl cXVpcmVzIHN0b3BwaW5nIHByZWZldGNoaW5nLiAgVGhpcyBpcyBzaW1pbGFyCisJICogdG8gdGhl IGhhbmRsaW5nIHRhYmxlIEFNcyBpbXBsZW1lbnQgdG8gZGVhbCB3aXRoIGEgdHVwbGUtbGV2ZWwg Y2hhbmdlCisJICogaW4gdGhlIHNjYW4ncyBkaXJlY3Rpb24uICBUaGUgcmVhZCBzdHJlYW0gbXVz dCBoYXZlIGFscmVhZHkgYmVlbiByZXNldAorCSAqIGJ5IHRoZSBjYWxsZXIgKHZpYSB0YWJsZV9p bmRleF9mZXRjaF9yZXNldCkuCisJICovCisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxp ZCA9IGZhbHNlOworCiAJaWYgKHNjYW5CYXRjaCA9PSBtYXJrQmF0Y2gpCiAJewogCQkvKiBtYXJr QmF0Y2ggaXMgYWxyZWFkeSBzY2FuQmF0Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAq LwpAQCAtMzAzLDYgKzM0MSwxMyBAQCBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKQogICogcG9pbnQgb24gYmF0Y2hyaW5nYnVmIHdpbGwgbG9vayBhcyBpZiBv dXIgbmV3IHNjYW4gZGlyZWN0aW9uIGhhZCBiZWVuIHVzZWQKICAqIGZyb20gdGhlIHN0YXJ0LiAg VGhpcyBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBidXQgaXQgd29ya3MK ICAqIHdlbGwgZW5vdWdoIGZvciB3aGF0IG91Z2h0IHRvIGJlIGEgcmVsYXRpdmVseSByYXJlIG9j Y3VycmVuY2UuCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSByZXNldCB0aGUgc2NhbidzIHJlYWQg c3RyZWFtIGJlZm9yZSBjYWxsaW5nIGhlcmUuICBUaGF0CisgKiBuZWVkcyB0byBoYXBwZW4gYXMg c29vbiBhcyB0aGUgc2NhbiByZXF1ZXN0cyBhIHR1cGxlIGluIHdoYXRldmVyIHNjYW4KKyAqIGRp cmVjdGlvbiBpcyBvcHBvc2l0ZS10by1jdXJyZW50LiAgV2Ugb25seSBkZWFsIHdpdGggdGhlIGNh c2Ugd2hlcmUgdGhlCisgKiBzY2FuIGJhY2tzIHVwIGJ5IGVub3VnaCBpdGVtcyB0byBjcm9zcyBh IGJhdGNoIGJvdW5kYXJ5ICh3aGVuIHRoZSBzY2FuCisgKiByZXN1bWVzIHNjYW5uaW5nIGluIGl0 cyBvcmlnaW5hbCBkaXJlY3Rpb24vZW5kcyBiZWZvcmUgY3Jvc3NpbmcgYSBib3VuZGFyeSwKKyAq IHRoZXJlIGlzbid0IGFueSBuZWVkIHRvIGNhbGwgaGVyZSkuCiAgKi8KIHZvaWQKIHRhYmxlYW1f dXRpbF9iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L1JFQURNRQppbmRleCBlNzU1NzdhN2UuLjM5MzkzOTFhZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9S RUFETUUKQEAgLTE4Niw3ICsxODYsNyBAQCBpbnRlcmZhY2UuICAoU2VlIGFsc28sIGRvYy9zcmMv c2dtbC9pbmRleGFtLnNnbWwpLgogQmxvY2tpbmcgVkFDVVVNIGxpa2UgdGhpcyBjYW4gYmUgZGlz cnVwdGl2ZSwgc28gdGFibGUgQU1zIGF2b2lkIGl0IHdoZW5ldmVyCiBwb3NzaWJsZS4gIFRoZSBo ZWFwIHRhYmxlIEFNIHVzdWFsbHkgZHJvcHMgbGVhZiBwYWdlIHBpbnMgcmlnaHQgYXdheSwgdGhv dWdoCiBub3QgZHVyaW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuICBJbmRl eC1vbmx5IHNjYW5zIG1heSBhbHNvCi1yZXRhaW4gcGlucyBpbiBzb21lIGNhc2VzLgorcmV0YWlu IHBpbnMgaW4gc29tZSBjYXNlcywgdGhvdWdoIHByZWZldGNoaW5nIHJlcXVpcmVzIGRyb3BwaW5n IHRoZW0uCiAKIE9wcG9ydHVuaXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgdGhl IHNhbWUgcGFnZS1sZXZlbAogbW9kaWZpY2F0aW9ucyBhcyBWQUNVVU0sIHdoaWxlIG9ubHkgaG9s ZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9j b3N0c2l6ZS5jCmluZGV4IDU2ZDQ1Mjg3Yy4uYzJiOGE0OGNjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE0Niw2ICsxNDYsNyBAQCBpbnQJCQltYXhfcGFyYWxsZWxf d29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKIGJvb2wJCWVuYWJsZV9zZXFzY2FuID0gdHJ1ZTsKIGJv b2wJCWVuYWJsZV9pbmRleHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4b25seXNjYW4g PSB0cnVlOworYm9vbAkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IHRydWU7CiBib29sCQll bmFibGVfYml0bWFwc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfdGlkc2NhbiA9IHRydWU7CiBi b29sCQllbmFibGVfc29ydCA9IHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0CmluZGV4IGE1YTBlZGYyNS4uOTI3YzQ3NzE3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtODkxLDYgKzg5MSwxMyBAQAogICBib290X3Zh bCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gn LCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVF UllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJlZmV0Y2hpbmcg Zm9yIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5IHNjYW5zLicsCisgIGZsYWdzID0+ICdHVUNf RVhQTEFJTicsCisgIHZhcmlhYmxlID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywKKyAg Ym9vdF92YWwgPT4gJ3RydWUnLAorfSwKKwogeyBuYW1lID0+ICdlbmFibGVfbWF0ZXJpYWwnLCB0 eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllf VFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3Mg dXNlIG9mIG1hdGVyaWFsaXphdGlvbi4nLAogICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGU2ODZk ODhhZi4uYWFkMjU2ZWE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlCkBAIC00MTcsNiArNDE3LDcgQEAKICNlbmFibGVfaW5jcmVtZW50YWxfc29y dCA9IG9uCiAjZW5hYmxlX2luZGV4c2NhbiA9IG9uCiAjZW5hYmxlX2luZGV4b25seXNjYW4gPSBv bgorI2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9u CiAjZW5hYmxlX21lbW9pemUgPSBvbgogI2VuYWJsZV9tZXJnZWpvaW4gPSBvbgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmlu ZGV4IDhjZGQ4MjZmYi4uNGE0YTA5YWQ3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmln LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC01NzEyLDYgKzU3MTIsMjIg QEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFi bGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFy bGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtaW5kZXhzY2Fu LXByZWZldGNoIiB4cmVmbGFiZWw9ImVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2giPgorICAgICAg PHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4gKDx0eXBl PmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFy bmFtZT5lbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVz IHByZWZldGNoaW5nIGZvciBpbmRleC1zY2FuIGFuZCBpbmRleC1vbmx5LXNjYW4KKyAgICAgICAg cGxhbiB0eXBlcy4gIFByZWZldGNoaW5nIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHJlYWRp bmcgdGFibGUgQU0KKyAgICAgICAgcGFnZXMgYWhlYWQgb2Ygd2hlbiB0aGV5IGFyZSBuZWVkZWQg ZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgaXMgPGxpdGVyYWw+b248 L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFy bGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtbWF0ZXJpYWwi IHhyZWZsYWJlbD0iZW5hYmxlX21hdGVyaWFsIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJs ZV9tYXRlcmlhbDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4 dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvaW5kZXhhbS5zZ21sCmluZGV4IGM3YTI5Mzg3MC4uMDQ4M2FiM2QxIDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwK QEAgLTgwNyw5ICs4MDcsMTIgQEAgYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICA8 cGFyYT4KICAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBp cyBhbiBhbHRlcm5hdGl2ZSB0bwogICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0 aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBpbiBiYXRjaGVzCi0gICByYXRoZXIg dGhhbiBvbmUgYXQgYSB0aW1lLiAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRy aWVzIGZyb20gYQotICAgc2luZ2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBn YWlucyB2aXNpYmlsaXR5IGludG8gd2hpY2ggdGFibGUKLSAgIGJsb2NrcyB3aWxsIGJlIG5lZWRl ZCBpbiB0aGUgbmVhciBmdXR1cmUuCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiBUaGlz IGVuYWJsZXMgdGhlIHRhYmxlIGFjY2VzcyBtZXRob2QgdG8KKyAgIG9wdGltaXplIHRhYmxlIGJs b2NrIGFjY2VzcyBwYXR0ZXJucyBhbmQgcGVyZm9ybSBJL08gcHJlZmV0Y2hpbmcuCisgICBCeSBy ZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhIHNpbmdsZSBpbmRleCBw YWdlIHRvZ2V0aGVyLAorICAgdGhlIHRhYmxlIEFNIGNhbiByZWFkYWhlYWQgdGhyb3VnaCB0aGUg aW5kZXggYW5kIGlkZW50aWZ5IHdoaWNoIHRhYmxlCisgICBibG9ja3Mgd2lsbCBiZSBuZWVkZWQs IGFsbG93aW5nIHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIHBhZ2VzIGR1cmluZworICAgb3JkZXJl ZCBpbmRleCBzY2Fucy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtOTY2LDcgKzk2OSw4IEBA IGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGZyZWUgdGhlIHBpbnMg YXQgYW4gb3Bwb3J0dW5lIHBvaW50IChmb3IgZXhhbXBsZSB3aGVuIDxmdW5jdGlvbj5hbXJlc2Nh bjwvZnVuY3Rpb24+CiAgICBhbmQvb3IgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGFy ZSBjYWxsZWQpLiAgSXQgbXVzdCBhbHNvIGtlZXAgdGhlCiAgICBudW1iZXIgb2YgcmV0YWluZWQg cGlucyBmaXhlZCBhbmQgc21hbGwsIHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQncwot ICAgYnVmZmVyIHBpbiBsaW1pdC4KKyAgIGJ1ZmZlciBwaW4gbGltaXQgKHdoaWNoIGlzIHNoYXJl ZCB3aXRoIHRoZSB0YWJsZSBBTSdzIHJlYWQgc3RyZWFtCisgICBmb3IgaW5kZXggc2NhbiBwcmVm ZXRjaGluZykuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTEzNzcsNiArMTM4MSw2MCBAQCBh bXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lk IG9wY2ludHlwZSk7CiAgICBvciB2aWNlIHZlcnNhLCBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50 YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCiAgIDwvcGFyYT4KIAor ICA8c2VjdDIgaWQ9ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMiPgorICAgPHRpdGxlPlRhYmxlIEFN IENvbnNpZGVyYXRpb25zIGZvciBCYXRjaCBTY2FubmluZzwvdGl0bGU+CisKKyAgIDxwYXJhPgor ICAgIFRoaXMgc2VjdGlvbiBpcyBwcmltYXJpbHkgcmVsZXZhbnQgdG8KKyAgICA8bGluayBsaW5r ZW5kPSJ0YWJsZWFtIj50YWJsZSBhY2Nlc3MgbWV0aG9kPC9saW5rPiBhdXRob3JzLgorICAgIFdo ZW4gYW4gaW5kZXggc2NhbiB1c2VzIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGludGVyZmFjZSwKKyAgICB0aGUgdGFibGUgQU0gaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5n IHBvc2l0aW9uIHN0YXRlIHdpdGhpbiB0aGUKKyAgICA8c3RydWN0bmFtZT5JbmRleFNjYW5EZXNj PC9zdHJ1Y3RuYW1lPidzCisgICAgPHN0cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0Zmll bGQ+IGFuZCBmb3IgY29udHJvbGxpbmcgd2hlbgorICAgIGJ1ZmZlciBwaW5zIG9uIGluZGV4IHBh Z2VzIGFyZSByZWxlYXNlZC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1 Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2l0aGluCisgICAgPHN0cnVjdGZp ZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+IHRyYWNrcyB3aGljaCBiYXRjaCBhbmQgaXRl bSB3aXRoaW4KKyAgICB0aGF0IGJhdGNoIHdpbGwgYmUgcmV0dXJuZWQgbmV4dCB0byB0aGUgZXhl Y3V0b3IuICBUaGUgdGFibGUgQU0gbXVzdCBhZHZhbmNlCisgICAgPHN0cnVjdGZpZWxkPnNjYW5Q b3M8L3N0cnVjdGZpZWxkPiBhcyB0dXBsZXMgYXJlIHJldHVybmVkIGJ5CisgICAgPGZ1bmN0aW9u PnRhYmxlX2luZGV4X2dldG5leHRfc2xvdDwvZnVuY3Rpb24+LiAgVGhlIGNvcmUgY29kZSBtYXkg YWxzbworICAgIG1vZGlmeSB0aGlzIGZpZWxkIGR1cmluZyBvcGVyYXRpb25zIHN1Y2ggYXMgbWFy ay9yZXN0b3JlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgPHN0cnVjdGZpZWxk PnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdHJhY2tzIHRoZSBwb3NpdGlvbiB1c2Vk CisgICAgZm9yIEkvTyBwcmVmZXRjaGluZy4gIEl0IGlzIGdlbmVyYWxseSBhZHZhbmNlZCBieSBp bml0aWFsaXppbmcgaXQgZnJvbQorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVs ZD4gd2l0aGluIGEgcmVhZCBzdHJlYW0gY2FsbGJhY2ssIGFsbG93aW5nCisgICAgdGhlIHRhYmxl IEFNIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBwb2ludGVkIHRvIGJ5IGl0ZW1zIHRoYXQgYXJl IHdlbGwKKyAgICBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgSW5pdGlhbGx5 CisgICAgPHN0cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gc3RhcnRzIGF0Cisg ICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiwgYnV0IGFzIHRoZSByZWFkIHN0 cmVhbSByYW1wcyB1cCBpdCBjYW4KKyAgICBnZXQgZmFyIGFoZWFkICZtZGFzaDsgc3Bhbm5pbmcg bXVsdGlwbGUgaW5kZXggcGFnZXMgaWYgbmVjZXNzYXJ5IHRvCisgICAgbWFpbnRhaW4gYW4gb3B0 aW1hbCBJL08gcHJlZmV0Y2ggZGlzdGFuY2UgZm9yIHRhYmxlIGJsb2NrIHJlYWRzLiAgQSBtYWpv cgorICAgIGdvYWwgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJm YWNlIGlzIHRvIGFsbG93IHRoZQorICAgIHRhYmxlIEFNIHRvIHByZWZldGNoIHdpdGhvdXQgYmVp bmcgbGltaXRlZCB0byBpdGVtcyBmcm9tIHRoZSBjdXJyZW50CisgICAgPHN0cnVjdGZpZWxkPnNj YW5Qb3M8L3N0cnVjdGZpZWxkPiBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZS4KKyAgIDwvcGFyYT4K KworICAgPHBhcmE+CisgICAgQm90aCA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+ IGFuZAorICAgIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IGFyZSBjb250 cm9sbGVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQKKyAgICBjb3JlIGNvZGU7IGluZGV4IGFjY2VzcyBt ZXRob2RzIHNob3VsZCBub3QgYWNjZXNzIG9yIG1hbmlwdWxhdGUgdGhlc2UKKyAgICBmaWVsZHMu ICBTZWUgdGhlIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC88L2ZpbGVuYW1lPgor ICAgIGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZSBleGFtcGxlLgorICAgPC9wYXJhPgor CisgICA8cGFyYT4KKyAgICBGb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVy aW5nIGJhdGNoIHNjYW5zLCBpbmNsdWRpbmcgdGhlCisgICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1t ZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IHBvbGljeSBhbmQgdGhlCisgICAgPGZ1bmN0aW9u PmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2ssIHNlZQorICAgIDx4cmVmIGxpbmtl bmQ9ImluZGV4LWxvY2tpbmciLz4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwogIDwvc2Vj dDE+CiAKICA8c2VjdDEgaWQ9ImluZGV4LWxvY2tpbmciPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL3RhYmxlYW0uc2dtbCBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKaW5kZXggOWNjZjVi NzM5Li44ZTcwYTYxOTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbApAQCAtMTI5LDYgKzEyOSwxNCBAQCBteV90YWJs ZWFtX2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKICAgb3B0aW9uYWwpLCB0aGUgYmxvY2sgbnVt YmVyIG5lZWRzIHRvIHByb3ZpZGUgbG9jYWxpdHkuCiAgPC9wYXJhPgogCisgPHBhcmE+CisgIFRh YmxlIGFjY2VzcyBtZXRob2RzIGNhbiBzdXBwb3J0IG9yZGVyZWQgaW5kZXggc2NhbnMgdXNpbmcg dGhlCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLiBTZWUgYWxz bworICA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIi8+IGZvciBkZXRhaWxz IG9uIGludGVyZmFjaW5nIHdpdGgKKyAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBp bmRleCBhY2Nlc3MgbWV0aG9kcywgYW5kIG1hbmFnaW5nIHRoZQorICBzY2FuJ3MgcG9zaXRpb24u CisgPC9wYXJhPgorCiAgPHBhcmE+CiAgIEZvciBjcmFzaCBzYWZldHksIGFuIEFNIGNhbiB1c2Ug cG9zdGdyZXMnIDxsaW5rCiAgIGxpbmtlbmQ9IndhbCI+PGFjcm9ueW0+V0FMPC9hY3JvbnltPjwv bGluaz4sIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N5c3ZpZXdzLm91dAppbmRleCAxMzJiNTZhNTguLjMyYmMzZGQzZSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE2Niw2ICsxNjYsNyBAQCBzZWxlY3QgbmFtZSwg c2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5h YmxlX2luY3JlbWVudGFsX3NvcnQgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhvbmx5c2NhbiAg ICAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAgICAgICB8IG9uCisgZW5h YmxlX2luZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwgb24KICBlbmFibGVfbWF0ZXJpYWwgICAgICAg ICAgICAgICAgfCBvbgogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAgICAgICB8IG9uCiAgZW5h YmxlX21lcmdlam9pbiAgICAgICAgICAgICAgIHwgb24KQEAgLTE4MCw3ICsxODEsNyBAQCBzZWxl Y3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxl JSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAg ICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8 IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZl bnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1h eSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBw b3N0bWFzdGVyIHN0YXJ0LgotLSAKMi41My4wCgo= --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0002-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Disposition: attachment; filename="v15-0002-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7eyh16 RnJvbSA3NmZkNWZkNWM4NDExYWRiMmZmMWUxNGM4MDFjMmViMTA5YzNjMDM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNSAwMi8xN10g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YQogdXNpbmcgeHNf YmxrCgpBZGQgYW4gZXhwbGljaXQgQmxvY2tOdW1iZXIgZmllbGQgKHhzX2JsaykgdG8gSW5kZXhG ZXRjaEhlYXBEYXRhIHRoYXQKdHJhY2tzIHdoaWNoIGhlYXAgYmxvY2sgaXMgY3VycmVudGx5IHBp bm5lZCBpbiB4c19jYnVmLgoKaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIG5vdyB1c2VzIHhzX2Js ayB0byBkZXRlcm1pbmUgd2hlbiBidWZmZXIKc3dpdGNoaW5nIGlzIG5lZWRlZCwgcmVwbGFjaW5n IHRoZSBwcmV2aW91cyBhcHByb2FjaCB0aGF0IGNvbXBhcmVkCmJ1ZmZlciBpZGVudGl0aWVzIHZp YSBSZWxlYXNlQW5kUmVhZEJ1ZmZlciBvbiBldmVyeSBub24tSE9ULWNoYWluIGNhbGwuClRoZSBu ZXcgYXBwcm9hY2ggc2tpcHMgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgcGF0aCBlbnRpcmVseSB3aGVu IHRoZSBuZXh0ClRJRCBpcyBvbiB0aGUgc2FtZSBoZWFwIHBhZ2UsIHdoaWNoIGFsc28gbWVhbnMg dGhhdCBoZWFwX3BhZ2VfcHJ1bmVfb3B0CmlzIGNhbGxlZCBleGFjdGx5IG9uY2UgcGVyIGJsb2Nr ICh3aGVuIHRoZSBibG9jayBpcyBmaXJzdCBwaW5uZWQpLgoKVGhpcyBpcyBwcmVwYXJhdG9yeSB3 b3JrIGZvciBhbiB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIG5lZWQgeHNfYmxrCnRvIG1hbmFn ZSBidWZmZXIgcGluIHRyYW5zZmVycyBiZXR3ZWVuIHRoZSBzY2FuIGFuZCB0aGUgZXhlY3V0b3Ig c2xvdC4KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDUg KystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8IDI5ICsrKysr KysrKysrKysrKy0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAx MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggMmZkYzUwYjg2Li45YmNmNzQ4NjIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEyMywxMCArMTIzLDExIEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4RmV0Y2hIZWFwRGF0YQogCUluZGV4RmV0Y2hUYWJsZURhdGEgeHNfYmFzZTsJLyogQU0gaW5k ZXBlbmRlbnQgcGFydCBvZiB0aGUgZGVzY3JpcHRvciAqLwogCiAJLyoKLQkgKiBDdXJyZW50IGhl YXAgYnVmZmVyIGluIHNjYW4sIGlmIGFueS4gTkI6IGlmIHhzX2NidWYgaXMgbm90Ci0JICogSW52 YWxpZEJ1ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlci4KKwkgKiBDdXJyZW50IGhl YXAgYnVmZmVyIGluIHNjYW4gKGFuZCBpdHMgYmxvY2sgbnVtYmVyKSwgaWYgYW55LiAgTkI6IGlm CisJICogeHNfYmxrIGlzIG5vdCBJbnZhbGlkQmxvY2tOdW1iZXIsIHdlIGhvbGQgYSBwaW4gaW4g eHNfY2J1Zi4KIAkgKi8KIAlCdWZmZXIJCXhzX2NidWY7CisJQmxvY2tOdW1iZXIgeHNfYmxrOwog CiAJLyogQ3VycmVudCBoZWFwIGJsb2NrJ3MgY29ycmVzcG9uZGluZyBwYWdlIGluIHRoZSB2aXNp YmlsaXR5IG1hcCAqLwogCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAyNTNhNzM1YjYuLmNmZTQ2ODlhOCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC04Niw2ICs4Niw3IEBAIGhlYXBh bV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwpCiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwg PSByZWw7CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT54c19ibGsg PSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZl cjsKIAogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CkBAIC0xMDcsNiArMTA4LDcgQEAgaGVhcGFt X2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAJCVJlbGVhc2VC dWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAkJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxp ZEJ1ZmZlcjsKIAl9CisJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKIH0KIAog c3RhdGljIHZvaWQKQEAgLTEzMiwyNCArMTM0LDI5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAogCUFzc2VydChUVFNfSVNfQlVG RkVSVFVQTEUoc2xvdCkpOwogCi0JLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcg bG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFpbi4gKi8KLQlpZiAoISpjYWxsX2FnYWluKQor CS8qIFdlIGNhbiBza2lwIHRoZSBidWZmZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIG9uIHRo ZSBzYW1lIHBhZ2UuICovCisJaWYgKGhzY2FuLT54c19ibGsgIT0gSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpKQogCXsKLQkJLyogU3dpdGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRv bid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXByZXZfYnVmID0gaHNjYW4tPnhzX2Ni dWY7CisJCUFzc2VydCghKmNhbGxfYWdhaW4pOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVsZWFz ZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhzX2NidWYsCi0JCQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jh c2UucmVsLAotCQkJCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisJ CS8qIFJlbWVtYmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVyIGZvciBuZXh0IHRpbWUgKi8K KwkJaHNjYW4tPnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQlp ZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCisJCQlSZWxlYXNlQnVmZmVyKGhzY2Fu LT54c19jYnVmKTsKKworCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jh c2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25s eSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhpcyBwYWdlCisJCSAqIFBydW5lIHBhZ2Ugd2hl biBpdCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1lCiAJCSAqLwotCQlpZiAocHJldl9idWYg IT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNl LnJlbCwgaHNjYW4tPnhzX2NidWYsCi0JCQkJCQkJCSZoc2Nhbi0+eHNfdm1idWZmZXIpOworCQlo ZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCisJ CQkJCQkJJmhzY2FuLT54c192bWJ1ZmZlcik7CiAJfQogCisJQXNzZXJ0KEJ1ZmZlckdldEJsb2Nr TnVtYmVyKGhzY2FuLT54c19jYnVmKSA9PSBoc2Nhbi0+eHNfYmxrKTsKKwlBc3NlcnQoaHNjYW4t PnhzX2JsayA9PSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCiAJLyogT2J0YWlu IHNoYXJlLWxvY2sgb24gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gZXhhbWluZSB2aXNpYmlsaXR5ICov CiAJTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCWdvdF9o ZWFwX3R1cGxlID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0aWQsCi0tIAoyLjUzLjAKCg== --0000000000001ea67c064d3bcca7 Content-Type: application/octet-stream; name="v15-0003-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v15-0003-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmuw7eyg15 RnJvbSBkYjBlMjRjZGNhN2QxMjNmYjczODc5NmI5ODUxOWRlZGUxZWQ5NDYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDAzLzE3XSBB ZGQgaW50ZXJmYWNlcyB0aGF0IGVuYWJsZSBpbmRleCBwcmVmZXRjaGluZy4KCkFkZCBhIG5ldyBh bWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSB0aGF0IGFsbG93cyBpbmRleCBhY2Nlc3MgbWV0 aG9kcwp0byBpbXBsZW1lbnQgcGxhaW4vb3JkZXJlZCBpbmRleCBzY2FucyB0aGF0IHJldHVybiBp bmRleCBlbnRyaWVzIGluCmJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0Y2hpbmcgaXRlbXMgZnJv bSBhbiBpbmRleCBwYWdlLCByYXRoZXIgdGhhbgpvbmUgbWF0Y2ggYXQgYSB0aW1lLgoKVGhpcyBj b21taXQgYWxzbyBhZGRzIGEgbmV3IHRhYmxlIEFNIGludGVyZmFjZSBjYWxsYmFjaywgY2FsbGVk IGJ5IHRoZQpjb3JlIGV4ZWN1dG9yIHRocm91Z2ggdGhlIG5ldyB0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3Qgc2hpbSBmdW5jdGlvbi4KVGhpcyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIGRpcmVjdGx5 IG1hbmFnZSB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXggc2NhbnMKcmF0aGVyIHRoYW4gaGF2aW5nIGlu ZGl2aWR1YWwgVElEcyBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciBvbmUgYnkgb25lLgpUaGUgYW1n ZXRiYXRjaCBpbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2Fj aCB0bwppbmRleCBzY2FucyBhZGRlZCB0byB0aGUgdGFibGUgQU0uICBUaGUgdGFibGUgQU0gY2Fu IGFwcGx5IGtub3dsZWRnZSBvZgp3aGljaCBUSURzIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHNj YW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0KSS9PIHByZWZldGNoaW5nLiAgUHJlZmV0 Y2hpbmcgd2lsbCBiZSBhZGRlZCBieSBhbiB1cGNvbWluZyBjb21taXQuCgpJbmRleCBhY2Nlc3Mg bWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVzdCBub3cgaW1wbGVtZW50 CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UgT1IgdGhlIGFtZ2V0dHVwbGUgaW50ZXJm YWNlLiAgVGhlCmFtZ2V0dHVwbGUgaW50ZXJmYWNlIHdpbGwgc3RpbGwgYmUgdXNlZCBieSBpbmRl eCBBTXMgdGhhdCByZXF1aXJlIGRpcmVjdApjb250cm9sIG92ZXIgdGhlIHByb2dyZXNzIG9mIGlu ZGV4IHNjYW5zIChlLmcuLCBHaVNUIHdpdGggS05OIG9yZGVyZWQKc2NhbnMpLiAgQWxtb3N0IGFs bCBleGlzdGluZyBjYWxsZXJzIHRoYXQgcGVyZm9ybSBpbmRleCBzY2FucyBub3cgdXNlCnRoZSBu ZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB3aGV0 aGVyIHRoZQp1bmRlcmx5aW5nIGluZGV4IEFNIHVzZXMgYW1nZXRiYXRjaCBvciBhbWdldHR1cGxl LgoKVGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIHJldHVybnMgYmF0Y2hlcyB0aGF0IGhvbGQgYSBi dWZmZXIgcGluIG9uIGFuCmluZGV4IHBhZ2UgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgdGFibGUg QU0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZB Q1VVTS4gIE5vdyBoZWFwYW0gb25seSBuZWVkcyB0byBob2xkIG9uIHRvCnN1Y2ggYSBwaW4gZm9y IGFuIGluc3RhbnQgLS0gZXhjZXB0IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDCnNu YXBzaG90LiAgTm9uLU1WQ0Mgc2NhbnMgY29udGludWUgdG8gbmVlZCB0byBob2xkIHRoZSBwaW4g dW50aWwgYWxsIG9mCnRoZSBiYXRjaCdzIFRJRHMgaGF2ZSBiZWVuIGZldGNoZWQgZnJvbSB0aGUg aGVhcC4KClRoaXMgZXh0ZW5kcyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRkZWQgdG8gbmJ0cmVl IGJ5IGNvbW1pdCAyZWQ1Yjg3ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdvcmsgd2l0aCBhbGwg aW5kZXggQU1zIHRoYXQgc3VwcG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgV2Ug Y2FuIGFsd2F5cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMKZWFnZXJseSwgcHJvdmlkZWQg dGhlIHNjYW4gdXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2UgdGhlIG5idHJlZQpkcm9wUGlu IG9wdGltaXphdGlvbiwgd2hpY2ggaGFkIGEgY291cGxlIG9mIGFkZGl0aW9uYWwgcmVzdHJpY3Rp b25zKS4KCkFuIHVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIGluZGV4IHByZWZldGNoaW5n IHdpbGwgdXNlIGEgcmVhZApzdHJlYW0gdG8gcmVhZCBoZWFwIHBhZ2VzIGR1cmluZyBpbmRleCBz Y2Fucy4gIFJlYWQgc3RyZWFtIGlzIGNhcmVmdWwgdG8KbGltaXQgaG93IG1hbnkgdGhpbmdzIGl0 IHBpbnMsIGxlc3Qgd2UgcnVuIGludG8gcHJvYmxlbXMgZHVlIHRvIGhhdmluZwp0b28gbWFueSBi dWZmZXJzIHBpbm5lZC4gIFNpbXBseSBuZXZlciBob2xkaW5nIG9uIHRvIGluZGV4IHBhZ2UgYnVm ZmVyCnBpbnMgZ3JlYXRseSBzaW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGluZGV4 IHByZWZldGNoaW5nOwp0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMg YmV0d2VlbiB0aGUgcmVhZCBzdHJlYW0gYW5kCmluZGV4IEFNLiAgVGhlIG9ubHkgZG93bnNpZGUg aXMgdGhhdCB3ZSBjYW5ub3Qgc3VwcG9ydCBwcmVmZXRjaGluZwpkdXJpbmcgc2NhbnMgdGhhdCB1 c2UgYSBub24tTVZDQyBzbmFwc2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNjZXB0YWJsZS4KCklu IHByYWN0aWNlLCBoZWFwYW0gZG9lc24ndCBkcm9wIGVhY2ggYmF0Y2gncyBpbmRleCBwYWdlIGJ1 ZmZlciBwaW4gYXQKdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IGR1cmluZyBpbmRleC1vbmx5IHNj YW5zLiAgVGhpcyB3YXMgZGVlbWVkCm5lY2Vzc2FyeSB0byBhdm9pZCByZWdyZXNzaW5nIGluZGV4 LW9ubHkgc2NhbnMgd2l0aCBhIExJTUlULCBpbgpwYXJ0aWN1bGFyIHdpdGggbmVzdGxvb3AgYW50 aS1qb2lucyBhbmQgbmVzdGxvb3Agc2VtaS1qb2luczsgZWFnZXJseQpsb2FkaW5nIGFsbCB0aGUg dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB1cCBmcm9udCByZWdyZXNzZWQgc3VjaCBxdWVyaWVzLgpU aGUgbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9yaXR5 IHRvIGRlY2lkZQp3aGVuIGFuZCB3aGVyZSB0byBkcm9wIGluZGV4IHBhZ2UgcGlucywgc28gdGhp cyBjYW4gYmUgY29uc2lkZXJlZCBhCmhlYXBhbSBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgKGluZGV4 IEFNcyBkb24ndCBuZWVkIHRvIGtub3cgYWJvdXQgaXQpLgpUaGlzIHNjaGVtZSBzdGlsbCBhbGxv d3MgaW5kZXggcHJlZmV0Y2hpbmcgdG8gY29uc2lzdGVudGx5IGhvbGQgbm8gbW9yZQp0aGFuIG9u ZSBiYXRjaCBpbmRleCBwYWdlIHBpbiBhdCBhIHRpbWUsIGV2ZW4gd2hlbiBhbiBpbmRleC1vbmx5 IHNjYW4KKHRoYXQgbXVzdCBwZXJmb3JtIHNvbWUgaGVhcCBmZXRjaGVzKSBob2xkcyBvcGVuIHNl dmVyYWwgaW5kZXggYmF0Y2hlcwphdCBvbmNlIGluIG9yZGVyIHRvIG1haW50YWluIGFuIGFkZXF1 YXRlIHByZWZldGNoIGRpc3RhbmNlLgoKQXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRy YS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBB bmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5OiBUaG9tYXMgTXVu cm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2VkYi5jb20K RGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9lZmFjMzIzOC02ZjM0LTQxZWEtYTM5My0y NmNjMDQ0MWI1MDYlNDB2b25kcmEubWUKLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAg ICAgICAgICAgICAgICAgICAgfCAgMjcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAg ICAgICAgICAgICAgICAgICB8ICAzMSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgICAgIHwgIDI1ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAg ICAgICAgICAgICAgICAgfCAxODggKystLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgg ICAgICAgICAgICAgICAgICB8IDMyMCArKysrKysrLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaCAgICAgICAgICAgICAgICAgIHwgIDY1ICsrCiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0 cnVtZW50X25vZGUuaCAgICAgICAgfCAgIDYgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmggICAgICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o ICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j ICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5j ICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5j ICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAg ICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAg ICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMgICAgICB8IDY5NiArKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9hbWFwaS5jICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv Z2VuYW0uYyAgICAgICAgICAgICAgfCAgMTggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGFtLmMgICAgICAgICAgICB8IDE2MiArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jICAgICAgICAgfCA3NTggKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9SRUFETUUgICAgICAgICAgICAgIHwgIDY2ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAgICAgICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyAgICAgICB8IDE5MyArKystLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICAgICAgICAgIHwgNDcwICsrKysrKy0tLS0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jICAgICAgICAgfCA1NDMgKysrKysrLS0t LS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgMjQ1 IC0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMgICAgICAgICAgIHwg ICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAg IDYgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8ICAy MyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgICAgIHwgICAy ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICAgICB8ICAgNiAr LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICAgICAgIHwgICA4ICst CiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyAgICAgIHwgMTA4ICstLQog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAgICAgIHwgIDEzICstCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMgICAgICAgICAgfCAgIDQgKy0KIHNy Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICAgICAgICB8ICAgNiArLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgICAgICAgIHwgICA4ICstCiBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgICAgfCAgIDMgKy0KIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAgICAgICAgICAgIHwgIDYwICstCiBjb250cmli L2FtY2hlY2svdmVyaWZ5X25idHJlZS5jICAgICAgICAgICAgICAgfCAgIDIgKy0KIGNvbnRyaWIv Ymxvb20vYmx1dGlscy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogZG9jL3NyYy9z Z21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgNTAwICsrKysrKysrKystLQog ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCAgICAgICAgICAgIHwgIDEzICstCiAu Li4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAgfCAgIDYgKy0KIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAxMiArLQogNDkg ZmlsZXMgY2hhbmdlZCwgMzE2NiBpbnNlcnRpb25zKCspLCAxNTEwIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9hbWFwaS5oCmluZGV4IGVjZmJkMDE3ZC4uOWJkMzE0MWZjIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvYW1hcGkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAt MTk4LDYgKzE5OCwxOSBAQCB0eXBlZGVmIHZvaWQgKCphbXJlc2Nhbl9mdW5jdGlvbikgKEluZGV4 U2NhbkRlc2Mgc2NhbiwKIHR5cGVkZWYgYm9vbCAoKmFtZ2V0dHVwbGVfZnVuY3Rpb24pIChJbmRl eFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwogCisv KiBuZXh0IGJhdGNoIG9mIHZhbGlkIHR1cGxlcyAqLwordHlwZWRlZiBJbmRleFNjYW5CYXRjaCAo KmFtZ2V0YmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCSAg IEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uKTsKKworLyogbWFyayBkZWFkIGl0ZW1zIGluIGluZGV4IHBhZ2UgKi8KK3R5cGVk ZWYgdm9pZCAoKmFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4s CisJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCisvKiBkcm9wIFRJRCByZWN5 Y2xpbmcgaW50ZXJsb2NrIGhlbGQgdG8gcHJldmVudCBjb25jdXJyZW50IFZBQ1VVTSByZWN5Y2xp bmcgKi8KK3R5cGVkZWYgdm9pZCAoKmFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2Fu RGVzYyBzY2FuLAorCQkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKIC8qIGZldGNo IGFsbCB2YWxpZCB0dXBsZXMgKi8KIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlv bikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJREJpdG1hcCAqdGJtKTsKQEAg LTIwNSwxMSArMjE4LDkgQEAgdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAo SW5kZXhTY2FuRGVzYyBzY2FuLAogLyogZW5kIGluZGV4IHNjYW4gKi8KIHR5cGVkZWYgdm9pZCAo KmFtZW5kc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKLS8qIG1hcmsgY3Vy cmVudCBzY2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbW1hcmtwb3NfZnVuY3Rpb24p IChJbmRleFNjYW5EZXNjIHNjYW4pOwotCi0vKiByZXN0b3JlIG1hcmtlZCBzY2FuIHBvc2l0aW9u ICovCi10eXBlZGVmIHZvaWQgKCphbXJlc3RycG9zX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKKy8qIGludmFsaWRhdGUgaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRy YWNrcyBzY2FuJ3MgcG9zaXRpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmFtcG9zcmVzZXRfZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gp OwogCiAvKgogICogQ2FsbGJhY2sgZnVuY3Rpb24gc2lnbmF0dXJlcyAtIGZvciBwYXJhbGxlbCBp bmRleCBzY2Fucy4KQEAgLTMwOSwxMCArMzIwLDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1S b3V0aW5lCiAJYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAJYW1yZXNjYW5fZnVu Y3Rpb24gYW1yZXNjYW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAvKiBjYW4g YmUgTlVMTCAqLworCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5V TEwgKi8KKwlhbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uIGFta2lsbGl0ZW1zYmF0Y2g7IC8qIGNh biBiZSBOVUxMICovCisJYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24gYW11bmd1YXJkYmF0Y2g7IC8q IGNhbiBiZSBOVUxMICovCiAJYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7CS8qIGNh biBiZSBOVUxMICovCiAJYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKLQlhbW1hcmtwb3Nf ZnVuY3Rpb24gYW1tYXJrcG9zOwkvKiBjYW4gYmUgTlVMTCAqLwotCWFtcmVzdHJwb3NfZnVuY3Rp b24gYW1yZXN0cnBvczsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbXBvc3Jlc2V0X2Z1bmN0aW9uIGFt cG9zcmVzZXQ7IC8qIGNhbiBiZSBOVUxMICovCiAKIAkvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRv IHN1cHBvcnQgcGFyYWxsZWwgaW5kZXggc2NhbnMgKi8KIAlhbWVzdGltYXRlcGFyYWxsZWxzY2Fu X2Z1bmN0aW9uIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW47IC8qIGNhbiBiZSBOVUxMICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9n ZW5hbS5oCmluZGV4IDFhMjdiZjA2MC4uNmI1YzQ4ZTVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2VuYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApAQCAtOTYs NiArOTYsNyBAQCB0eXBlZGVmIGJvb2wgKCpJbmRleEJ1bGtEZWxldGVDYWxsYmFjaykgKEl0ZW1Q b2ludGVyIGl0ZW1wdHIsIHZvaWQgKnN0YXRlKTsKIAogLyogc3RydWN0IGRlZmluaXRpb25zIGFw cGVhciBpbiByZWxzY2FuLmggKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpJ bmRleFNjYW5EZXNjOwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNj YW5CYXRjaDsKIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YSAqU3lzU2NhbkRlc2M7CiAK IHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKlBhcmFsbGVsSW5kZXhT Y2FuRGVzYzsKQEAgLTE1Niw2ICsxNTcsNyBAQCBleHRlcm4gdm9pZCBpbmRleF9pbnNlcnRfY2xl YW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRl eF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sCisJCQkJCQkJCQkgYm9vbCB4c193YW50X2l0dXAsCiAJCQkJCQkJCQkgU25h cHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0 cnVtZW50LAogCQkJCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CkBAIC0xODIsMTQg KzE4NCwxMiBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxh dGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3Bh cmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWws CisJCQkJCQkJCQkJCSAgYm9vbCB4c193YW50X2l0dXAsCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2Fu SW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50 IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwog ZXh0ZXJuIEl0ZW1Qb2ludGVyIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwK IAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Ci1leHRlcm4gYm9vbCBpbmRleF9m ZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwotZXh0 ZXJuIGJvb2wgaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCi0JCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJu IGludDY0IGluZGV4X2dldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqYml0 bWFwKTsKIAogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaW5kZXhfYnVsa19kZWxldGUo SW5kZXhWYWN1dW1JbmZvICppbmZvLApAQCAtMjUzLDQgKzI1MywyOSBAQCBleHRlcm4gdm9pZCBz eXN0YWJsZV9pbnBsYWNlX3VwZGF0ZV9iZWdpbihSZWxhdGlvbiByZWxhdGlvbiwKIGV4dGVybiB2 b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2ZpbmlzaCh2b2lkICpzdGF0ZSwgSGVhcFR1cGxl IHR1cGxlKTsKIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2NhbmNlbCh2b2lk ICpzdGF0ZSk7CiAKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXhh bS5jIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9p bml0KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fcmVz ZXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9lbmQo SW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9tYXJrX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX3Jlc3Rv cmVfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGll cyBjYWxsZWQgYnkgdGFibGUgQU1zIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK2V4dGVybiB2b2lk IHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVy biB2b2lkIHRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF91bmd1YXJk X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCisvKgor ICogYW1nZXRiYXRjaCB1dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFNcyAoaW4gaW5kZXhiYXRj aC5jKQorICovCitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkgIEJ1ZmZlciBidWYp OworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNj YW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKICNlbmRpZgkJCQkJCQkv KiBHRU5BTV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggOWJjZjc0ODYyLi5hMmM3M2M3YzAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvaGVhcGFtLmgKQEAgLTEyOSwxMCArMTI5LDMxIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4 RmV0Y2hIZWFwRGF0YQogCUJ1ZmZlcgkJeHNfY2J1ZjsKIAlCbG9ja051bWJlciB4c19ibGs7CiAK LQkvKiBDdXJyZW50IGhlYXAgYmxvY2sncyBjb3JyZXNwb25kaW5nIHBhZ2UgaW4gdGhlIHZpc2li aWxpdHkgbWFwICovCi0JQnVmZmVyCQl4c192bWJ1ZmZlcjsKKwkvKiBGb3IgaW5kZXgtb25seSBz Y2FucyB0aGF0IG11c3QgYWNjZXNzIHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCUJ1ZmZlcgkJeHNf dm1idWZmZXI7CS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAqLworCWludAkJCXhzX3ZtX2l0ZW1z OwkvKiAjIGl0ZW1zIHRvIHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLworCWJvb2wJCXhz X2xhc3RpbmJsb2NrOyAvKiBsYXN0IFRJRCBvbiB0aGlzIGJsb2NrIGluIGN1cnJlbnQgYmF0Y2g/ ICovCisKIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCisvKgorICogUGVyLWJhdGNoIGRhdGEgcHJp dmF0ZSB0byB0aGUgaGVhcCB0YWJsZSBBTS4KKyAqCisgKiBTdG9yZWQgYXQgYSBuZWdhdGl2ZSBv ZmZzZXQgZnJvbSB0aGUgSW5kZXhTY2FuQmF0Y2ggcG9pbnRlciwgaW4gdGhlCisgKiB0YWJsZSBB TSBvcGFxdWUgYXJlYSBvZiBlYWNoIGJhdGNoIGFsbG9jYXRpb24uCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEhlYXBCYXRjaERhdGEKK3sKKwl1aW50OAkgICAqdmlzSW5mbzsJCS8qIHBlci1pdGVtIHZp c2liaWxpdHkgZmxhZ3MsIG9yIE5VTEwgKi8KK30gSGVhcEJhdGNoRGF0YTsKKworLyogQWNjZXNz IHRoZSBoZWFwLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBw b2ludGVyICovCitzdGF0aWMgaW5saW5lIEhlYXBCYXRjaERhdGEgKgoraGVhcF9iYXRjaF9kYXRh KEluZGV4U2NhbkJhdGNoIGJhdGNoLCBJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJcmV0dXJuIChI ZWFwQmF0Y2hEYXRhICopICgoY2hhciAqKSBiYXRjaCAtIHNjYW4tPmJhdGNoX3RhYmxlX29mZnNl dCk7Cit9CisKIC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtICov CiB0eXBlZGVmIGVudW0KIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUu aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCBkYTc1MDNjNTcuLjc0YWY5ZWZj MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtOTI0LDExMSArOTI0LDI3IEBAIHR5cGVkZWYgc3RydWN0 IEJUVmFjdXVtUG9zdGluZ0RhdGEKIAogdHlwZWRlZiBCVFZhY3V1bVBvc3RpbmdEYXRhICpCVFZh Y3V1bVBvc3Rpbmc7CiAKKy8qIFBlci1iYXRjaCBkYXRhIHByaXZhdGUgdG8gdGhlIGJ0cmVlIGlu ZGV4IEFNICovCit0eXBlZGVmIHN0cnVjdCBCVEJhdGNoRGF0YQoreworCUJ1ZmZlcgkJYnVmOwkJ CS8qIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiAoVElEIHJldXNlIGludGVybG9jaykgKi8KKwlCbG9j a051bWJlciBjdXJyUGFnZTsJCS8qIGluZGV4IHBhZ2Ugd2l0aCBtYXRjaGluZyBpdGVtcyAqLwor CUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogY3VyclBhZ2UncyBsZWZ0IHNpYmxpbmcgKi8KKwlC bG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGN1cnJQYWdlJ3MgcmlnaHQgc2libGluZyAqLworCWJv b2wJCW1vcmVMZWZ0OwkJLyogbW9yZSBtYXRjaGluZyBwYWdlcyB0byB0aGUgbGVmdD8gKi8KKwli b29sCQltb3JlUmlnaHQ7CQkvKiBtb3JlIG1hdGNoaW5nIHBhZ2VzIHRvIHRoZSByaWdodD8gKi8K K30gQlRCYXRjaERhdGE7CisKIC8qCi0gKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJlZS1w cml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgotICogVGhpcyBjb25zaXN0cyBv ZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZvcgot ICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9ybWF0aW9uIGFib3V0IHRoZSBj dXJyZW50IGxvY2F0aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRo ZSBtYXJrZWQgbG9jYXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAqIEJUU2NhblBvc0RhdGEgdG8g cmVwcmVzZW50IHRoZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBjdXJyZW50IGFuZCBtYXJrZWQK LSAqIGxvY2F0aW9ucy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1lbWJlciBzb21lIGtub3duLWtp bGxlZCBpbmRleCBlbnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFya2VkIGJlZm9yZSB3ZSBjYW4g bW92ZSBvZmYgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBJbmRleCBzY2FucyB3b3JrIGEgcGFn ZSBhdCBhIHRpbWU6IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVudGlmeQotICog YWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZSBhbmQgc2F2ZSB0aGVtIGluIEJUU2Nh blBvc0RhdGEsIHRoZW4KLSAqIHJlbGVhc2UgdGhlIHJlYWQtbG9jayB3aGlsZSByZXR1cm5pbmcg dGhlIGl0ZW1zIHRvIHRoZSBjYWxsZXIgZm9yCi0gKiBwcm9jZXNzaW5nLiAgVGhpcyBhcHByb2Fj aCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3QgYWx3YXlzCi0gKiBkcm9w IHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHByb2Nlc3MgdGhlIHJldHVy bmVkIGl0ZW1zLgotICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28gcmVsZWFzZSB0aGUgcGlu IGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9wIHRoZSBwaW4gKHdoZW4g c28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5IFZBQ1VVTQotICogKHNl ZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3lj bGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGggdGhlIGxvY2sgYW5kIHRo ZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0byBpdHMgc2li bGluZyBwYWdlLgotICoKLSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdl IHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCi0gKiBtYXRjaGVkIGl0ZW0sIG90 aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhlIEluZGV4VHVwbGVzIGdv Ci0gKiBpbnRvIGEgc2VwYXJhdGUgd29ya3NwYWNlIGFycmF5OyBlYWNoIEJUU2NhblBvc0l0ZW0g c3RvcmVzIGl0cyB0dXBsZSdzCi0gKiBvZmZzZXQgd2l0aGluIHRoYXQgYXJyYXkuICBQb3N0aW5n IGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCi0gKiBhbGxvd2luZyB0aGUg c2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxpc3QK LSAqIHR1cGxlLgorICogQWNjZXNzIHRoZSBidHJlZS1wcml2YXRlIHBlci1iYXRjaCBkYXRhIGZy b20gYW4gSW5kZXhTY2FuQmF0Y2ggcG9pbnRlci4KKyAqIFRoaXMgZm9sbG93cyB0aGUgc3RhbmRh cmQgY29udmVudGlvbiBmb3IgaW5kZXggQU0gb3BhcXVlIHN0YXRlOiBpdCBjYW4gYmUKKyAqIGZv dW5kIGF0IGEgZml4ZWQgbmVnYXRpdmUgb2Zmc2V0IGZyb20gdGhlIEluZGV4U2NhbkJhdGNoIHBv aW50ZXIuCiAgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJl bWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KK3N0YXRpYyBpbmxpbmUgQlRCYXRjaERhdGEgKgor QlRCYXRjaEdldERhdGEoSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7Ci0JSXRlbVBvaW50ZXJEYXRh IGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJl ciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi0J TG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNldCBpbiB3b3Jr c3BhY2UsIGlmIGFueSAqLwotfSBCVFNjYW5Qb3NJdGVtOwotCi10eXBlZGVmIHN0cnVjdCBCVFNj YW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogY3VyclBhZ2UgYnVmIChpbnZhbGlkIG1l YW5zIHVucGlubmVkKSAqLwotCi0JLyogcGFnZSBkZXRhaWxzIGFzIG9mIHRoZSBzYXZlZCBwb3Np dGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkv KiBwYWdlIHJlZmVyZW5jZWQgYnkgaXRlbXMgYXJyYXkgKi8KLQlCbG9ja051bWJlciBwcmV2UGFn ZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkv KiBjdXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KLQlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJyUGFn ZSdzIExTTiAod2hlbiBzby0+ZHJvcFBpbikgKi8KLQotCS8qIHNjYW4gZGlyZWN0aW9uIGZvciB0 aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCVNjYW5EaXJlY3Rp b24gZGlyOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCBu ZXh0VHVwbGVPZmZzZXQgaXMgdGhlIGZpcnN0IGZyZWUKLQkgKiBsb2NhdGlvbiBpbiB0aGUgYXNz b2NpYXRlZCB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZS4KLQkgKi8KLQlpbnQJCQluZXh0VHVwbGVP ZmZzZXQ7Ci0KLQkvKgotCSAqIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgdHJhY2sgd2hldGhlciB3 ZSB0aGluayB0aGVyZSBtYXkgYmUgbWF0Y2hpbmcKLQkgKiBpbmRleCBlbnRyaWVzIHRvIHRoZSBs ZWZ0IGFuZCByaWdodCBvZiB0aGUgY3VycmVudCBwYWdlLCByZXNwZWN0aXZlbHkuCi0JICovCi0J Ym9vbAkJbW9yZUxlZnQ7Ci0JYm9vbAkJbW9yZVJpZ2h0OwotCi0JLyoKLQkgKiBUaGUgaXRlbXMg YXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCi0J ICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVu dCB0byBmaWxsIHRoZQotCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRo ZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBh IGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KLQkgKiBp dGVtSW5kZXggaXMgYSBjdXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFzdCByZXR1cm5l ZCB0byBjYWxsZXIuCi0JICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5k ZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBp biBpdGVtc1tdICovCi0JaW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBpdGVt c1tdICovCi0KLQlCVFNjYW5Qb3NJdGVtIGl0ZW1zW01heFRJRHNQZXJCVHJlZVBhZ2VdOwkvKiBN VVNUIEJFIExBU1QgKi8KLX0gQlRTY2FuUG9zRGF0YTsKLQotdHlwZWRlZiBCVFNjYW5Qb3NEYXRh ICpCVFNjYW5Qb3M7Ci0KLSNkZWZpbmUgQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBc Ci0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwg XAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQo KHNjYW5wb3MpLmJ1ZikgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbihzY2FucG9zKSBcCi0J ZG8geyBcCi0JCVJlbGVhc2VCdWZmZXIoKHNjYW5wb3MpLmJ1Zik7IFwKLQkJKHNjYW5wb3MpLmJ1 ZiA9IEludmFsaWRCdWZmZXI7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBp bklmUGlubmVkKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNj YW5wb3MpKSBcCi0JCQlCVFNjYW5Qb3NVbnBpbihzY2FucG9zKTsgXAotCX0gd2hpbGUgKDApCi0K LSNkZWZpbmUgQlRTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhC bG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklz VmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5j dXJyUGFnZSkgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlk byB7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1 cnJQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JfSB3aGlsZSAoMCkKKwlyZXR1cm4gKEJU QmF0Y2hEYXRhICopICgoY2hhciAqKSBiYXRjaCAtIE1BWEFMSUdOKHNpemVvZihCVEJhdGNoRGF0 YSkpKTsKK30KIAogLyogV2UgbmVlZCBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggZXF1YWxpdHktdHlw ZSBTS19TRUFSQ0hBUlJBWSBzY2FuIGtleSAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUlu Zm8KQEAgLTEwNTAsNiArOTY2LDI4IEBAIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiAJ U2NhbktleQkJaGlnaF9jb21wYXJlOwkvKiBhcnJheSdzIDwgb3IgPD0gdXBwZXIgYm91bmQgKi8K IH0gQlRBcnJheUtleUluZm87CiAKKy8qCisgKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJl ZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgorICogVGhpcyBjb25zaXN0 cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZv cgorICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGFuZCBpbmZvcm1hdGlvbiBhYm91 dCB0aGUgY3VycmVudCBhcnJheQorICoga2V5cy4gIFRoZXJlIGFyZSBhc3N1bXB0aW9ucyBhYm91 dCBob3cgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyB0cmFjayB0aGUKKyAqIHByb2dyZXNzIG9mIHRo ZSBpbmRleCBzY2FuIHRocm91Z2ggdGhlIGluZGV4J3Mga2V5IHNwYWNlIChzZWUgX2J0X3JlYWRw YWdlCisgKiBhbmQgX2J0X2FkdmFuY2VfYXJyYXlfa2V5cyksIGJ1dCB3ZSBkb24ndCBhY3R1YWxs eSB0cmFjayBhbnl0aGluZyBhYm91dCB0aGUKKyAqIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBpbiB0 aGlzIG9wYXF1ZSBzdHJ1Y3QuCisgKgorICogSW5kZXggc2NhbnMgd29yayBhIHBhZ2UgYXQgYSB0 aW1lLCBhcyByZXF1aXJlZCBieSB0aGUgYW1nZXRiYXRjaCBjb250cmFjdDoKKyAqIHdlIHBpbiBh bmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9u IHRoZSBwYWdlCisgKiBhbmQgcmV0dXJuIHRoZW0gaW4gYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2gu ICBXZSB0aGVuIHJlbGVhc2UgdGhlIHJlYWQtbG9jaworICogdXNpbmcgYW1nZXRiYXRjaCB1dGls aXR5IHJvdXRpbmVzLiAgVGhpcyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sKKyAqIHRy YWZmaWMuIF9idF9uZXh0IGlzIHBhc3NlZCBwcmlvcmJhdGNoLCB3aGljaCBjb250YWlucyBkZXRh aWxzIG9mIHdoaWNoCisgKiBwYWdlIGlzIG5leHQgaW4gbGluZSB0byBiZSByZWFkIChwcmlvcmJh dGNoIGlzIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IHRvCisgKiBidGdldGJhdGNoIGJ5IGNvcmUg Y29kZSkuCisgKgorICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2 ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKKyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3 aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGlzIGlzIGFsc28gcGVyIHRoZQor ICogYW1nZXRiYXRjaCBjb250cmFjdC4gIFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFz ZSIgdHVwbGUgb25jZSwKKyAqIGFsbG93aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBm b3IgZWFjaCBUSUQgaW4gdGhlIHBvc3RpbmcgbGlzdC4KKyAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRT Y2FuT3BhcXVlRGF0YQogewogCS8qIHRoZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IF9idF9wcmVwcm9j ZXNzX2tleXMoKTogKi8KQEAgLTEwNjYsMzIgKzEwMDQsNiBAQCB0eXBlZGVmIHN0cnVjdCBCVFNj YW5PcGFxdWVEYXRhCiAJQlRBcnJheUtleUluZm8gKmFycmF5S2V5czsJLyogaW5mbyBhYm91dCBl YWNoIGVxdWFsaXR5LXR5cGUgYXJyYXkga2V5ICovCiAJRm1nckluZm8gICAqb3JkZXJQcm9jczsJ CS8qIE9SREVSIHByb2NzIGZvciByZXF1aXJlZCBlcXVhbGl0eSBrZXlzICovCiAJTWVtb3J5Q29u dGV4dCBhcnJheUNvbnRleHQ7IC8qIHNjYW4tbGlmZXNwYW4gY29udGV4dCBmb3IgYXJyYXkgZGF0 YSAqLwotCi0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBp cyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQ b3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkv KiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCWJvb2wJCWRyb3BQaW47CQkv KiBkcm9wIGxlYWYgcGluIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnM/ICovCi0KLQkvKgotCSAq IElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0aGUgdHVwbGUg c3RvcmFnZQotCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBjdXJyUG9zIGFuZCBtYXJrUG9zIHJlc3Bl Y3RpdmVseS4gIEVhY2ggaXMgb2Ygc2l6ZQotCSAqIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMg bXVjaCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KLQkgKi8KLQljaGFyCSAgICpj dXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgY3VyclBvcyAqLwotCWNoYXIJICAgKm1h cmtUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBtYXJrUG9zICovCi0KLQkvKgotCSAqIElm IHRoZSBtYXJrZWQgcG9zaXRpb24gaXMgb24gdGhlIHNhbWUgcGFnZSBhcyBjdXJyZW50IHBvc2l0 aW9uLCB3ZQotCSAqIGRvbid0IHVzZSBtYXJrUG9zLCBidXQganVzdCBrZWVwIHRoZSBtYXJrZWQg aXRlbUluZGV4IGluIG1hcmtJdGVtSW5kZXgKLQkgKiAoYWxsIHRoZSByZXN0IG9mIGN1cnJQb3Mg aXMgdmFsaWQgZm9yIHRoZSBtYXJrIHBvc2l0aW9uKS4gSGVuY2UsIHRvCi0JICogZGV0ZXJtaW5l IGlmIHRoZXJlIGlzIGEgbWFyaywgZmlyc3QgbG9vayBhdCBtYXJrSXRlbUluZGV4LCB0aGVuIGF0 Ci0JICogbWFya1Bvcy4KLQkgKi8KLQlpbnQJCQltYXJrSXRlbUluZGV4OwkvKiBpdGVtSW5kZXgs IG9yIC0xIGlmIG5vdCB2YWxpZCAqLwotCi0JLyoga2VlcCB0aGVzZSBsYXN0IGluIHN0cnVjdCBm b3IgZWZmaWNpZW5jeSAqLwotCUJUU2NhblBvc0RhdGEgY3VyclBvczsJCS8qIGN1cnJlbnQgcG9z aXRpb24gZGF0YSAqLwotCUJUU2NhblBvc0RhdGEgbWFya1BvczsJCS8qIG1hcmtlZCBwb3NpdGlv biwgaWYgYW55ICovCiB9IEJUU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgQlRTY2FuT3BhcXVl RGF0YSAqQlRTY2FuT3BhcXVlOwpAQCAtMTE2MCwxNCArMTA3MiwxNyBAQCBleHRlcm4gYm9vbCBi dGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIGV4dGVy biBJbmRleFNjYW5EZXNjIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVsYXRpb24g cmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFyYWxs ZWxzY2FuKHZvaWQgKnRhcmdldCk7Ci1leHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGJ0Z2V0 YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3Ji YXRjaCwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdldGJp dG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJ0 cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlz LAogCQkJCQkgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBi dGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gp OworZXh0ZXJuIHZvaWQgYnR1bmd1YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9pZCBidHBhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRl c2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4 dGVybiB2b2lkIGJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRy ZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgYnRwb3NyZXNldChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiBJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKmJ0YnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJ CQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAkJCQkJCQkJCQkgICBJbmRleEJ1 bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywKQEAgLTEyNzEsOCArMTE4Niw5IEBAIGV4dGVybiB2 b2lkIF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIC8qCiAgKiBwcm90 b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0cmVhZHBhZ2UuYwogICovCi1leHRlcm4gYm9vbCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKLQkJCQkJ CSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSk7CitleHRlcm4gYm9vbCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwKKwkJ CQkJCSBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBib29s IGZpcnN0cGFnZSk7CiBleHRlcm4gdm9pZCBfYnRfc3RhcnRfYXJyYXlfa2V5cyhJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQJX2J0X2JpbnNyY2hfYXJy YXlfc2tleShGbWdySW5mbyAqb3JkZXJwcm9jLAogCQkJCQkJCQkgICBib29sIGN1cl9lbGVtX3Ry aWcsIFNjYW5EaXJlY3Rpb24gZGlyLApAQCAtMTI4NywxNSArMTIwMywxNSBAQCBleHRlcm4gQlRT dGFjayBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5z ZXJ0IGtleSwKIAkJCQkJCSAgQnVmZmVyICpidWZQLCBpbnQgYWNjZXNzLCBib29sIHJldHVybnN0 YWNrKTsKIGV4dGVybiBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJl bCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSk7CiBleHRlcm4gaW50MzIgX2J0X2NvbXBhcmUo UmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBv ZmZudW0pOwotZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2J0X2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNo IF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJ ICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7CiBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5k cG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KTsKIAogLyoK ICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnR1dGlscy5jCiAgKi8KIGV4dGVybiBC VFNjYW5JbnNlcnQgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCk7 Ci1leHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4g QlRDeWNsZUlkIF9idF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3lj bGVJZCBfYnRfc3RhcnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5k X3ZhY3V1bShSZWxhdGlvbiByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggY2UzNDBjMDc2Li4y NmI1MDU5NTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVk ZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCisjaW5j bHVkZSAiYWNjZXNzL3NkaXIuaCIKICNpbmNsdWRlICJub2Rlcy90aWRiaXRtYXAuaCIKICNpbmNs dWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgi CkBAIC0xMjIsOCArMTIzLDE3MiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVT Y2FuV29ya2VyRGF0YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlcjsKIHR5cGVkZWYgc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIHsKIAlSZWxhdGlvbglyZWw7CisKKwkvKiBUYWJsZSBB TSBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgc2l6ZSAoTUFYQUxJR04nZCksIHNldCBieSBBTSAqLwor CXVpbnQxNgkJYmF0Y2hfb3BhcXVlX3NpemU7CisKKwkvKiBQZXItaXRlbSB0cmFpbGluZyBkYXRh IHNpemUgaW4gZWFjaCBiYXRjaCAqLworCXVpbnQxNgkJYmF0Y2hfcGVyX2l0ZW1fc2l6ZTsKIH0g SW5kZXhGZXRjaFRhYmxlRGF0YTsKIAorLyoKKyAqIExvY2F0aW9uIG9mIGEgQmF0Y2hNYXRjaGlu Z0l0ZW0gdGhhdCBhcHBlYXJzIGluIGEgSW5kZXhTY2FuQmF0Y2ggcmV0dXJuZWQKKyAqIGJ5IChh bmQgc3Vic2VxdWVudGx5IHBhc3NlZCB0bykgYW4gYW1nZXRiYXRjaCByb3V0aW5lCisgKi8KK3R5 cGVkZWYgc3RydWN0IEJhdGNoUmluZ0l0ZW1Qb3MKK3sKKwkvKiBQb3NpdGlvbiByZWZlcmVuY2Vz IGEgdmFsaWQgQmF0Y2hSaW5nQnVmZmVyLmJhdGNoZXNbXSBlbnRyeT8gKi8KKwlib29sCQl2YWxp ZDsKKworCS8qIEJhdGNoUmluZ0J1ZmZlci5iYXRjaGVzW10td2lzZSBpbmRleCB0byByZWxldmFu dCBJbmRleFNjYW5CYXRjaCAqLworCXVpbnQ4CQliYXRjaDsKKworCS8qIEluZGV4U2NhbkJhdGNo Lml0ZW1zW10td2lzZSBpbmRleCB0byByZWxldmFudCBCYXRjaE1hdGNoaW5nSXRlbSAqLworCWlu dAkJCWl0ZW07CisKK30gQmF0Y2hSaW5nSXRlbVBvczsKKworLyoKKyAqIE1hdGNoaW5nIGl0ZW0g cmV0dXJuZWQgYnkgYW1nZXRiYXRjaCAoaW4gcmV0dXJuZWQgSW5kZXhTY2FuQmF0Y2gpIGR1cmlu ZyBhbgorICogaW5kZXggc2Nhbi4gIFVzZWQgYnkgdGFibGUgQU0gdG8gbG9jYXRlIHJlbGV2YW50 IG1hdGNoaW5nIHRhYmxlIHR1cGxlLgorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaE1hdGNoaW5n SXRlbQoreworCUl0ZW1Qb2ludGVyRGF0YSB0YWJsZVRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQg dGFibGUgaXRlbSAqLworCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdz IGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCisJTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyog SW5kZXhUdXBsZSdzIG9mZnNldCBpbiB3b3Jrc3BhY2UsIGlmIGFueSAqLworfSBCYXRjaE1hdGNo aW5nSXRlbTsKKworLyoKKyAqIFBlci1pdGVtIHZpc2liaWxpdHkgZmxhZ3MgZm9yIGluZGV4LW9u bHkgc2NhbnMuICBTdG9yZWQgaW4gYSBzZXBhcmF0ZQorICogYXJyYXkgKEluZGV4U2NhbkJhdGNo RGF0YS52aXNJbmZvKSByYXRoZXIgdGhhbiBpbiBCYXRjaE1hdGNoaW5nSXRlbSB0byBrZWVwCisg KiB0aGUgaG90IGl0ZW1zIGFycmF5IGNvbXBhY3QuCisgKi8KKyNkZWZpbmUgQkFUQ0hfVklTX0NI RUNLRUQJCTB4MDEJLyogY2hlY2tlZCBpdGVtIGluIFZNPyAqLworI2RlZmluZSBCQVRDSF9WSVNf QUxMX1ZJU0lCTEUJMHgwMgkvKiBibG9jayBpcyBrbm93biBhbGwtdmlzaWJsZT8gKi8KKworLyoK KyAqIERhdGEgYWJvdXQgb25lIGJhdGNoIG9mIGl0ZW1zIHJldHVybmVkIGJ5IChhbmQgcGFzc2Vk IHRvKSBhbWdldGJhdGNoIGR1cmluZworICogaW5kZXggc2NhbnMuCisgKgorICogRWFjaCBiYXRj aCBhbGxvY2F0aW9uIGhhcyB0aGUgZm9sbG93aW5nIG1lbW9yeSBsYXlvdXQ6CisgKgorICogICBb dGFibGUgQU0gb3BhcXVlIGFyZWFdICAgIDwtIGF0IC0oYmF0Y2hfdGFibGVfb2Zmc2V0KSBmcm9t IGJhdGNoIHB0cgorICogICBbaW5kZXggQU0gb3BhcXVlIGFyZWFdICAgIDwtIGF0IC0oYmF0Y2hf aW5kZXhfb3BhcXVlX3NpemUpIGZyb20gYmF0Y2ggcHRyCisgKiAgIFtJbmRleFNjYW5CYXRjaERh dGFdICAgICAgPC0gdGhlIHJldHVybmVkIHBvaW50ZXIKKyAqICAgW2l0ZW1zW21heGl0ZW1zYmF0 Y2hdXQorICogICBbdGFibGUgQU0gdHJhaWxpbmcgZGF0YV0gIDwtIGUuZy4gcGVyLWl0ZW0gdmlz aWJpbGl0eSBmbGFncworICogICBbY3VyclR1cGxlcyB3b3Jrc3BhY2VdICAgIDwtIHNpemVkIGJ5 IGluZGV4IEFNIChiYXRjaF90dXBsZXNfd29ya3NwYWNlKQorICoKKyAqIFRoZSBBTS1zcGVjaWZp YyBvcGFxdWUgYXJlYXMgYXJlIGFjY2Vzc2VkIHZpYSBhY2Nlc3NvciBmdW5jdGlvbnMgZGVmaW5l ZCBieQorICogZWFjaCB0YWJsZSBBTSBhbmQgaW5kZXggQU0gdGhhdCBzdXBwb3J0cyB0aGUgYmF0 Y2ggaW50ZXJmYWNlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCit7 CisJWExvZ1JlY1B0cglsc247CQkJLyogaW5kZXggcGFnZSdzIExTTiAqLworCisJLyogc2NhbiBk aXJlY3Rpb24gd2hlbiB0aGUgaW5kZXggcGFnZSB3YXMgcmVhZCAqLworCVNjYW5EaXJlY3Rpb24g ZGlyOworCisJLyoKKwkgKiBrbm93bkVuZEJhY2t3YXJkIGFuZCBrbm93bkVuZEZvcndhcmQgYXJl IHNldCBieSB0aGUgdGFibGUgQU0gdG8KKwkgKiBpbmRpY2F0ZSB0aGF0IHRoaXMgYmF0Y2ggaXMg dGhlIGxhc3Qgb25lIHdpdGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhlCisJICogcmVsZXZhbnQgc2Nh biBkaXJlY3Rpb24uICBXaGVuIGFtZ2V0YmF0Y2ggcmV0dXJucyBOVUxMIGZvciBhIGdpdmVuCisJ ICogZGlyZWN0aW9uLCB0aGUgdGFibGUgQU0gc2V0cyB0aGUgY29ycmVzcG9uZGluZyBmbGFnIG9u IHRoZSBwcmlvcmJhdGNoCisJICogdGhhdCB3YXMgcGFzc2VkIHRvIHRoYXQgY2FsbC4gIFdlIGNh bm5vdCBrbm93IHRoaXMgd2hlbiBhIGJhdGNoIGlzCisJICogZmlyc3QgcmV0dXJuZWQgYnkgYW1n ZXRiYXRjaDsgaXQgb25seSBiZWNvbWVzIGFwcGFyZW50IHdoZW4gd2UgdHJ5IGFuZAorCSAqIGZh aWwgdG8gY29udGludWUgdGhlIHNjYW4gcGFzdCBpdC4KKwkgKgorCSAqIFRoaXMgYWxsb3dzIHRh YmxlIEFNcyB0byBhdm9pZCByZWR1bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRoIHRoZSBzYW1l CisJICogcHJpb3JiYXRjaCAtLSB0aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byByZWFkIGFkZGl0 aW9uYWwgaW5kZXggcGFnZXMgdG8KKwkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5vIG1vcmUgbWF0 Y2hpbmcgaXRlbXMgYmV5b25kIGNhbGxlcidzIHByaW9yYmF0Y2guCisJICovCisJYm9vbAkJa25v d25FbmRCYWNrd2FyZDsKKwlib29sCQlrbm93bkVuZEZvcndhcmQ7CisKKwkvKgorCSAqIE1hdGNo aW5nIGl0ZW1zIHN0YXRlIGZvciB0aGlzIGJhdGNoLiAgT3V0cHV0IGJ5IGluZGV4IEFNIGZvciB0 YWJsZSBBTS4KKwkgKgorCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBp bmRleCBvcmRlciAoaWUsIGJ5IGluY3JlYXNpbmcKKwkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNj YW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMKKwkgKiB0byBm aWxsIHRoZSBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBpdGVt IHNsb3QgYW5kCisJICogZmlsbCBkb3dud2FyZHMuICBUaGlzIGlzIHdoeSB3ZSBuZWVkIGJvdGgg YSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYQorCSAqIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4K KwkgKgorCSAqIE5vdGU6IHRoZXNlIGFyZSBzaWduZWQgYmVjYXVzZSBpdCdzIHNvbWV0aW1lcyBj b252ZW5pZW50IHRvIHVzZSAtMSB0bworCSAqIHJlcHJlc2VudCBhbiBvdXQtb2YtYm91bmRzIHNw YWNlIGp1c3QgYmVmb3JlIGZpcnN0SXRlbSAod2hlbiBpdCdzIDApLgorCSAqLworCWludAkJCWZp cnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKwlpbnQJCQlsYXN0 SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCisJLyogaW5mbyBhYm91 dCBkZWFkIGl0ZW1zIGlmIGFueSAoZGVhZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8K KwlpbnQJCQludW1EZWFkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8K KwlpbnQJCSAgICpkZWFkSXRlbXM7CQkvKiBpbmRleGVzIG9mIGRlYWQgaXRlbXMgKi8KKworCS8q CisJICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgdGhpcyBpcyB0aGUgdHVw bGUgc3RvcmFnZSB3b3Jrc3BhY2UKKwkgKiBmb3IgdGhlIG1hdGNoaW5nIHR1cGxlcyAodHVwbGVz IHJlZmVyZW5jZWQgYnkgaXRlbXNbXSkuICBUaGUgd29ya3NwYWNlCisJICogc2l6ZSBpcyBkZXRl cm1pbmVkIGJ5IHRoZSBpbmRleCBBTSAoYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSkuCisJICoKKwkg KiBjdXJyVHVwbGVzIHBvaW50cyBpbnRvIHRoZSB0cmFpbGluZyBwb3J0aW9uIG9mIHRoaXMgYWxs b2NhdGlvbiwgcGFzdAorCSAqIGl0ZW1zW10gYW5kIGFueSB0YWJsZSBBTSB0cmFpbGluZyBkYXRh LiAgSXQgaXMgTlVMTCBmb3IgcGxhaW4gaW5kZXgKKwkgKiBzY2Fucy4KKwkgKi8KKwljaGFyCSAg ICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgaXRlbXNbXSAqLworCUJhdGNoTWF0 Y2hpbmdJdGVtIGl0ZW1zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG1hdGNoaW5nIGl0ZW1z ICovCit9IEluZGV4U2NhbkJhdGNoRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0 Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGJhdGNo ZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBrZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQgYQorICogbWlu aW11bSBvZiB0d28sIHNpbmNlIHdlJ2xsIG9ubHkgY29uc2lkZXIgcmVsZWFzaW5nIG9uZSBiYXRj aCB3aGVuIGFub3RoZXIKKyAqIGlzIHJlYWQuCisgKgorICogVGhlIGN1cnJlbnQgbWF4aW11bSBv ZiA2NCBiYXRjaGVzIGlzIHNvbWV3aGF0IG9mIGFuIGFyYml0cmFyeSBsaW1pdC4gIFZlcnkKKyAq IGZldyBzY2FucyBldmVyIGdldCBuZWFyIHRvIHRoaXMgbGltaXQgaW4gcHJhY3RpY2UuCisgKi8K KyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUwkJNjQKKyNkZWZpbmUgSU5ERVhfU0NBTl9D QUNIRV9CQVRDSEVTCTIKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUgQU1zIHRvIG1hbmFn ZSBhbiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICogaW50ZXJmYWNlLiAg U2NhbnMgdXNlIGEgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNo LgorICoKKyAqIEJhdGNoZXMgYXJlIGtlcHQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSB3ZXJlIHJl dHVybmVkIGluIGJ5IGFtZ2V0YmF0Y2gsCisgKiBzaW5jZSB0aGF0IGlzIHRoZSBzYW1lIG9yZGVy IHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgcmV0dXJuCisgKiBtYXRjaGVzIGlu LiAgSG93ZXZlciwgdGFibGUgQU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBpbiB3 aGF0ZXZlcgorICogb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVudCAtLSBwcm92aWRl ZCB0aGF0IHN1Y2ggcmVvcmRlcmluZyBjYW5ub3QKKyAqIGFmZmVjdCB0aGUgb3JkZXIgdGhhdCB0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4uCisgKi8KK3R5 cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgoreworCS8qIGN1cnJlbnQgcG9zaXRpb25zIGlu IGJhdGNoZXNbXSBmb3Igc2NhbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3Mgc2NhblBvczsJLyogc2Nh bidzIHJlYWQgcG9zaXRpb24gKi8KKwlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsv cmVzdG9yZSBwb3NpdGlvbiAqLworCisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoOworCisJLyoK KwkgKiBoZWFkQmF0Y2ggaXMgYW4gaW5kZXggdG8gdGhlIGVhcmxpZXN0IHN0aWxsLXZhbGlkIGJh dGNoIGluICdiYXRjaGVzJy4KKwkgKiBJbiBwcmFjdGljZSB0aGlzIG11c3QgYmUgdGhlIHNjYW4n cyBjdXJyZW50IHNjYW5Qb3MgYmF0Y2ggKHNjYW5CYXRjaCkuCisJICovCisJdWludDgJCWhlYWRC YXRjaDsKKworCS8qCisJICogbmV4dEJhdGNoIGlzIGFuIGluZGV4IHRvIHRoZSBuZXh0IGVtcHR5 IGJhdGNoIHNsb3QgaW4gJ2JhdGNoZXMnLiAgVGhpcworCSAqIGlzIG9ubHkgYWN0dWFsbHkgdXNh YmxlIHdoZW4gdGhlIHNjYW4gaXMgIWluZGV4X3NjYW5fYmF0Y2hfZnVsbCgpLgorCSAqLworCXVp bnQ4CQluZXh0QmF0Y2g7CisKKwkvKiBBcnJheSBvZiBwb2ludGVycyB0byBjYWNoZWQgcmVjeWNs YWJsZSBiYXRjaGVzICovCisJSW5kZXhTY2FuQmF0Y2ggY2FjaGVbSU5ERVhfU0NBTl9DQUNIRV9C QVRDSEVTXTsKKworCS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIHJpbmcgYnVmZmVyIGJhdGNoZXMg Ki8KKwlJbmRleFNjYW5CYXRjaCBiYXRjaGVzW0lOREVYX1NDQU5fTUFYX0JBVENIRVNdOworCit9 IEJhdGNoUmluZ0J1ZmZlcjsKKwogc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAog LyoKQEAgLTE0MSw2ICszMDYsMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEK IAlpbnQJCQludW1iZXJPZk9yZGVyQnlzOwkvKiBudW1iZXIgb2Ygb3JkZXJpbmcgb3BlcmF0b3Jz ICovCiAJc3RydWN0IFNjYW5LZXlEYXRhICprZXlEYXRhOwkvKiBhcnJheSBvZiBpbmRleCBxdWFs aWZpZXIgZGVzY3JpcHRvcnMgKi8KIAlzdHJ1Y3QgU2NhbktleURhdGEgKm9yZGVyQnlEYXRhOwkv KiBhcnJheSBvZiBvcmRlcmluZyBvcCBkZXNjcmlwdG9ycyAqLworCisJLyogaW5kZXggYWNjZXNz IG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KKwl2b2lkCSAgICpvcGFxdWU7CQkJLyogYWNjZXNz LW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCisKKwkvKiB0YWJsZSBhY2Nlc3MgbWV0aG9kJ3MgcHJp dmF0ZSBhbWdldGJhdGNoIHN0YXRlICovCisJQmF0Y2hSaW5nQnVmZmVyIGJhdGNocmluZ2J1ZjsJ LyogYW1nZXRiYXRjaCByZWxhdGVkIHN0YXRlICovCisKKwlib29sCQl1c2ViYXRjaHJpbmc7CS8q IHNjYW4gdXNlcyBhbWdldGJhdGNoL2JhdGNocmluZ2J1Zj8gKi8KKwlib29sCQliYXRjaEltbWVk aWF0ZVVuZ3VhcmQ7CS8qIGRyb3AgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgaW4KKwkJCQkJCQkJ CQkgKiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrPyAqLworCisJLyogQ2FjaGVkIGJhdGNoIGZv ciBhbWdldGJpdG1hcCBjYWxsZXJzIChhdm9pZHMgcmVwZWF0ZWQgYWxsb2MvZnJlZSkgKi8KKwlJ bmRleFNjYW5CYXRjaCB4c19iaXRtYXBfYmF0Y2g7CisKIAlib29sCQl4c193YW50X2l0dXA7CS8q IGNhbGxlciByZXF1ZXN0cyBpbmRleCB0dXBsZXMgKi8KIAlib29sCQl4c190ZW1wX3NuYXA7CS8q IHVucmVnaXN0ZXIgc25hcHNob3QgYXQgc2NhbiBlbmQ/ICovCiAKQEAgLTE0OSw5ICszMjgsOCBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWJvb2wJCWlnbm9yZV9raWxsZWRf dHVwbGVzOwkvKiBkbyBub3QgcmV0dXJuIGtpbGxlZCBlbnRyaWVzICovCiAJYm9vbAkJeGFjdFN0 YXJ0ZWRJblJlY292ZXJ5OwkvKiBwcmV2ZW50cyBraWxsaW5nL3NlZWluZyBraWxsZWQKIAkJCQkJ CQkJCQkgKiB0dXBsZXMgKi8KLQotCS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0 YXRlICovCi0Jdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5m byAqLworCS8qIHhzX3NuYXBzaG90IHVzZXMgYW4gTVZDQyBzbmFwc2hvdD8gKi8KKwlib29sCQlN VkNDU2NhbjsKIAogCS8qCiAJICogSW5zdHJ1bWVudGF0aW9uIGNvdW50ZXJzIG1haW50YWluZWQg YnkgYWxsIGluZGV4IEFNcyBkdXJpbmcgYm90aApAQCAtMTYwLDEwICszMzgsMTAgQEAgdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0 aW9uICppbnN0cnVtZW50OwogCiAJLyoKLQkgKiBJbiBhbiBpbmRleC1vbmx5IHNjYW4sIGEgc3Vj Y2Vzc2Z1bCBhbWdldHR1cGxlIGNhbGwgbXVzdCBmaWxsIGVpdGhlcgotCSAqIHhzX2l0dXAgKGFu ZCB4c19pdHVwZGVzYykgb3IgeHNfaGl0dXAgKGFuZCB4c19oaXR1cGRlc2MpIHRvIHByb3ZpZGUg dGhlCi0JICogZGF0YSByZXR1cm5lZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBmaWxsIGJvdGgsIGlu IHdoaWNoIGNhc2UgdGhlIGhlYXAKLQkgKiBmb3JtYXQgd2lsbCBiZSB1c2VkLgorCSAqIEluIGFu IGluZGV4LW9ubHkgc2NhbiwgYSBzdWNjZXNzZnVsIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBj YWxsIG11c3QKKwkgKiBmaWxsIGVpdGhlciB4c19pdHVwIChhbmQgeHNfaXR1cGRlc2MpIG9yIHhz X2hpdHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0bworCSAqIHByb3ZpZGUgdGhlIGRhdGEgcmV0dXJu ZWQgYnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaCBjYXNlCisJICogdGhl IGhlYXAgZm9ybWF0IHdpbGwgYmUgdXNlZC4KIAkgKi8KIAlJbmRleFR1cGxlCXhzX2l0dXA7CQkv KiBpbmRleCB0dXBsZSByZXR1cm5lZCBieSBBTSAqLwogCXN0cnVjdCBUdXBsZURlc2NEYXRhICp4 c19pdHVwZGVzYzsJLyogcm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2l0dXAgKi8KQEAgLTE3Niw2 ICszNTQsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlJbmRleEZldGNo VGFibGVEYXRhICp4c19oZWFwZmV0Y2g7CiAKIAlib29sCQl4c19yZWNoZWNrOwkJLyogVCBtZWFu cyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8KKwl1aW50MTYJCW1heGl0ZW1zYmF0Y2g7 CS8qIHNldCBieSBhbWJlZ2luc2NhbiB3aGVuIGFtZ2V0YmF0Y2ggdXNlZCAqLworCisJLyogUGVy LWJhdGNoIG9wYXF1ZSBhcmVhIHNpemVzLCBzZXQgYnkgaW5kZXggQU0gaW4gYW1iZWdpbnNjYW4g Ki8KKwl1aW50MTYJCWJhdGNoX2luZGV4X29wYXF1ZV9zaXplOwkvKiBNQVhBTElHTidkIGluZGV4 IEFNIG9wYXF1ZSBzaXplICovCisJdWludDE2CQliYXRjaF90dXBsZXNfd29ya3NwYWNlOyAvKiBj dXJyVHVwbGVzIHdvcmtzcGFjZSBzaXplICovCisKKwkvKiBDb21wdXRlZCBvZmZzZXQgZnJvbSBi YXRjaCBwb2ludGVyIHRvIHRhYmxlIEFNIG9wYXF1ZSAoaW5jbHVkZXMgYm90aCkgKi8KKwl1aW50 MTYJCWJhdGNoX3RhYmxlX29mZnNldDsKIAogCS8qCiAJICogV2hlbiBmZXRjaGluZyB3aXRoIGFu IG9yZGVyaW5nIG9wZXJhdG9yLCB0aGUgdmFsdWVzIG9mIHRoZSBPUkRFUiBCWQpAQCAtMjE1LDQg KzQwMSwxMjQgQEAgdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhCiAJc3RydWN0IFR1cGxl VGFibGVTbG90ICpzbG90OwogfSBTeXNTY2FuRGVzY0RhdGE7CiAKKy8qCisgKiBSZXR1cm4gdGhl IHRydWUgYWxsb2NhdGlvbiBiYXNlIG9mIGEgYmF0Y2ggKGFjY291bnRpbmcgZm9yIEFNIG9wYXF1 ZSBhcmVhcworICogc3RvcmVkIGJlZm9yZSB0aGUgSW5kZXhTY2FuQmF0Y2hEYXRhIHBvaW50ZXIp LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorYmF0Y2hfYWxsb2NfYmFzZShJbmRleFNjYW5C YXRjaCBiYXRjaCwgSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuIChjaGFyICop IGJhdGNoIC0gc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0OworfQorCisvKgorICogQ291bnQgaG93 IG1hbnkgYmF0Y2hlcyBhcmUgY3VycmVudGx5IGxvYWRlZCBpbiB0aGUgcmluZyBidWZmZXIuCisg Ki8KK3N0YXRpYyBpbmxpbmUgdWludDgKK2luZGV4X3NjYW5fYmF0Y2hfY291bnQoSW5kZXhTY2Fu RGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuICh1aW50OCkgKHNjYW4tPmJhdGNocmluZ2J1Zi5u ZXh0QmF0Y2ggLQorCQkJCQlzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoKTsKK30KKworLyoK KyAqIERpZCB3ZSBhbHJlYWR5IGxvYWQgYmF0Y2ggd2l0aCB0aGUgcmVxdWVzdGVkIGluZGV4Pwor ICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2luZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKEluZGV4U2Nh bkRlc2NEYXRhICpzY2FuLCB1aW50OCBpZHgpCit7CisJcmV0dXJuIChpbnQ4KSAoaWR4IC0gc2Nh bi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCkgPj0gMCAmJgorCQkoaW50OCkgKGlkeCAtIHNjYW4t PmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2gpIDwgMDsKK30KKworLyoKKyAqIEhhdmUgd2UgbG9hZGVk IHRoZSBtYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzPworICovCitzdGF0aWMgaW5saW5lIGJvb2wK K2luZGV4X3NjYW5fYmF0Y2hfZnVsbChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbikKK3sKKwlyZXR1 cm4gaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVT OworfQorCisvKgorICogUmV0dXJuIGJhdGNoIGZvciB0aGUgcHJvdmlkZWQgaW5kZXguCisgKi8K K3N0YXRpYyBpbmxpbmUgSW5kZXhTY2FuQmF0Y2gKK2luZGV4X3NjYW5fYmF0Y2goSW5kZXhTY2Fu RGVzY0RhdGEgKnNjYW4sIHVpbnQ4IGlkeCkKK3sKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9s b2FkZWQoc2NhbiwgaWR4KSk7CisKKwlyZXR1cm4gc2Nhbi0+YmF0Y2hyaW5nYnVmLmJhdGNoZXNb aWR4ICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKV07Cit9CisKKy8qCisgKiBBcHBlbmQg Z2l2ZW4gYmF0Y2ggdG8gc2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyLgorICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK2luZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKEluZGV4U2NhbkRlc2NEYXRhICpzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKnJpbmdidWYgPSAm c2Nhbi0+YmF0Y2hyaW5nYnVmOworCXVpbnQ4CQluZXh0QmF0Y2ggPSByaW5nYnVmLT5uZXh0QmF0 Y2g7CisKKwlyaW5nYnVmLT5iYXRjaGVzW25leHRCYXRjaCAmIChJTkRFWF9TQ0FOX01BWF9CQVRD SEVTIC0gMSldID0gYmF0Y2g7CisJcmluZ2J1Zi0+bmV4dEJhdGNoKys7Cit9CisKKy8qCisgKiBB ZHZhbmNlIHBvc2l0aW9uIHRvIGl0cyBuZXh0IGl0ZW0gaW4gdGhlIGJhdGNoLgorICoKKyAqIEFk dmFuY2UgdG8gdGhlIG5leHQgaXRlbSB3aXRoaW4gdGhlIHByb3ZpZGVkIGJhdGNoIChvciB0byB0 aGUgcHJldmlvdXMgaXRlbSwKKyAqIHdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzKS4KKyAqCisgKiBS ZXR1cm5zIHRydWUgaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlIGFkdmFuY2VkLiAgUmV0dXJucyBm YWxzZSB3aGVuIHRoZXJlCisgKiBhcmUgbm8gbW9yZSBpdGVtcyBpbiB0aGUgYmF0Y2ggaW4gdGhl IGdpdmVuIGRpcmVjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX3Bv c19hZHZhbmNlKFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgICBJbmRleFNjYW5CYXRj aCBiYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUFzc2VydChwb3MtPnZhbGlkKTsK KworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJeworCQlpZiAoKytw b3MtPml0ZW0gPiBiYXRjaC0+bGFzdEl0ZW0pCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UJ CQkJCQkvKiBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZCAqLworCXsKKwkJaWYgKC0tcG9zLT5pdGVt IDwgYmF0Y2gtPmZpcnN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBBZHZhbmNl ZCB3aXRoaW4gYmF0Y2ggKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEFkdmFuY2UgYmF0 Y2ggcG9zaXRpb24gdG8gdGhlIHN0YXJ0IG9mIGl0cyBuZXcgYmF0Y2guCisgKgorICogU2V0cyB0 aGUgZ2l2ZW4gcG9zaXRpb24gdG8gdGhlIGZpc3QgaXRlbSBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJl Y3Rpb24gKG9yIHRvCisgKiB0aGUgbGFzdCBpdGVtLCB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcyku ICAgQWxzbyBhZHZhbmNlcy9pbmNyZW1lbnRzIGJhdGNoCisgKiBvZmZzZXQgZnJvbSBwb3NpdGlv biBzdWNoIHRoYXQgaXQgcG9pbnRzIHRvIG5ld0JhdGNoRm9yUG9zLgorICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK2luZGV4X3NjYW5fcG9zX25leHRiYXRjaChTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKKwkJCQkJCSBJbmRleFNjYW5CYXRjaCBuZXdCYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9z KQoreworCUFzc2VydChuZXdCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisKKwkvKiBJbmNyZW1l bnQgYmF0Y2ggKG9mdGVuIHdyYXBzIHVpbnQ4IGJhdGNoIGZpZWxkKSAqLworCWlmIChwb3MtPnZh bGlkKQorCQlwb3MtPmJhdGNoKys7CisJZWxzZQorCQlwb3MtPmJhdGNoID0gMDsKKworCXBvcy0+ dmFsaWQgPSB0cnVlOworCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkK KwkJcG9zLT5pdGVtID0gbmV3QmF0Y2gtPmZpcnN0SXRlbTsKKwllbHNlCisJCXBvcy0+aXRlbSA9 IG5ld0JhdGNoLT5sYXN0SXRlbTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFJFTFNDQU5fSCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmgKaW5kZXggMDYwODQ3NTIyLi4zMDExZjRlZGEgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaApAQCAtNDMzLDExICs0MzMsNDIgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUK IAkgKi8KIAl2b2lkCQkoKmluZGV4X2ZldGNoX2VuZCkgKHN0cnVjdCBJbmRleEZldGNoVGFibGVE YXRhICpkYXRhKTsKIAorCS8qCisJICogSW5pdGlhbGl6ZSB0YWJsZSBBTSdzIHBlci1iYXRjaCBv cGFxdWUgYXJlYSB3aXRoaW4gYSBiYXRjaCBhbGxvY2F0aW9uLgorCSAqCisJICogQ2FsbGVkIGJ5 IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyBmb3IgZWFjaCBuZXcgb3IgcmVjeWNsZWQgYmF0Y2gu CisJICogVGFibGUgQU1zIHNob3VsZCBzZXQgdXAgaXRzIG9wYXF1ZSBhcmVhIChhdCBhIG5lZ2F0 aXZlIG9mZnNldCBmcm9tIHRoZQorCSAqIGJhdGNoIHBvaW50ZXIpIGFuZCBhbnkgdHJhaWxpbmcg cGVyLWl0ZW0gZGF0YSAoZS5nLiB2aXNpYmlsaXR5IGZsYWdzKS4KKwkgKgorCSAqICduZXdfYWxs b2MnIGlzIHRydWUgZm9yIGZyZXNobHkgcGFsbG9jJ2QgYmF0Y2hlcywgZmFsc2UgZm9yIGJhdGNo ZXMKKwkgKiByZWN5Y2xlZCBmcm9tIHRoZSBjYWNoZS4KKwkgKi8KKwl2b2lkCQkoKmluZGV4X2Jh dGNoX2luaXQpIChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJ CQkJCQkJIGJvb2wgbmV3X2FsbG9jKTsKKworCS8qCisJICogRmV0Y2ggdGhlIG5leHQgdHVwbGUg ZnJvbSBhbiBpbmRleCBzY2FuIGludG8gc2xvdCwgc2Nhbm5pbmcgaW4gdGhlCisJICogc3BlY2lm aWVkIGRpcmVjdGlvbiwgYW5kIHJldHVybiB0cnVlIGlmIGEgdHVwbGUgd2FzIGZvdW5kLCBmYWxz ZQorCSAqIG90aGVyd2lzZS4KKwkgKgorCSAqIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRoZSB0YWJs ZSBBTSB0byBkaXJlY3RseSBtYW5hZ2UgdGhlIHNjYW4gcHJvY2VzcywKKwkgKiBpbmNsdWRpbmcg aW50ZXJmYWNpbmcgd2l0aCB0aGUgaW5kZXggQU0uIFRoZSBjYWxsZXIgc2ltcGx5IHNwZWNpZmll cworCSAqIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNjYW47IHRoZSB0YWJsZSBBTSB0YWtlcyBjYXJl IG9mIHJldHJpZXZpbmcgVElEcworCSAqIGZyb20gdGhlIGluZGV4LCBwZXJmb3JtaW5nIHZpc2li aWxpdHkgY2hlY2tzLCBhbmQgcmV0dXJuaW5nIHR1cGxlcyBpbgorCSAqIHRoZSBzbG90LgorCSAq LworCWJvb2wJCSgqaW5kZXhfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgICBUdXBsZVRhYmxl U2xvdCAqc2xvdCk7CisKIAkvKgogCSAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3Rg LCBhZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVzdAogCSAqIGFjY29yZGluZyB0byBgc25hcHNo b3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICog dGVzdCwgcmV0dXJuIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KIAkgKgorCSAqIFRoaXMgaXMgYSBs b3dlci1sZXZlbCBjYWxsYmFjayB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxlci4KKwkg KiBDYWxsZXJzIHNob3VsZCBmYXZvciB0aGUgaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIHdo ZW5ldmVyIHBvc3NpYmxlLgorCSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNl c3NhcmlseSB1cGRhdGUgaW5kZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5zIGRvIG5vdCBj aGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgogCSAq IHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0 aWQgcG9pbnRzIHRvIGFuCkBAIC0xMjA3LDYgKzEyMzgsMzcgQEAgdGFibGVfaW5kZXhfZmV0Y2hf ZW5kKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCXNjYW4tPnJlbC0+cmRfdGFi bGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOwogfQogCisvKgorICogSW5pdGlhbGl6ZSB0YWJs ZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSB3aXRoaW4gYSBiYXRjaCBhbGxvY2F0aW9uLgor ICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MgZm9yIGVhY2ggbmV3IG9y IHJlY3ljbGVkIGJhdGNoLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2luZGV4X2Jh dGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgYm9vbCBu ZXdfYWxsb2MpCit7CisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9iYXRj aF9pbml0KHNjYW4sIGJhdGNoLCBuZXdfYWxsb2MpOworfQorCisvKgorICogRmV0Y2ggdGhlIG5l eHQgdHVwbGUgZnJvbSBhbiBpbmRleCBzY2FuIGludG8gYHNsb3RgLCBzY2FubmluZyBpbiB0aGUK KyAqIHNwZWNpZmllZCBkaXJlY3Rpb24uIFJldHVybnMgdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3Vu ZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBpbmRleCBzY2FuIHNob3VsZCBoYXZlIGJl ZW4gc3RhcnRlZCB2aWEgdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oKS4KKyAqIENhbGxlcnMgbXVz dCBjaGVjayBzY2FuLT54c19yZWNoZWNrIGFuZCByZWNoZWNrIHNjYW4ga2V5cyBpZiByZXF1aXJl ZC4KKyAqCisgKiBJbmRleC1vbmx5IHNjYW4gY2FsbGVycyAodGhhdCBwYXNzIHhzX3dhbnRfaXR1 cD10cnVlIHRvIGluZGV4X2JlZ2luc2NhbikKKyAqIGNhbiBjb25zdW1lIGluZGV4IHR1cGxlIHJl c3VsdHMgYnkgZXhhbWluaW5nIEluZGV4U2NhbkRlc2NEYXRhIGZpZWxkcyBzdWNoCisgKiBhcyB4 c19pdHVwIGFuZCB4c19oaXR1cC4gIFRoZSB0YWJsZSBBTSB3b24ndCB1c3VhbGx5IGZldGNoIGEg aGVhcCB0dXBsZQorICogaW50byB0aGUgcHJvdmlkZWQgc2xvdCBpbiB0aGUgY2FzZSBvZiB4c193 YW50X2l0dXA9dHJ1ZSBjYWxsZXJzLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3RhYmxlX2lu ZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIGlzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKKwkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlyZXR1cm4gaXNjYW4tPmhl YXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZ2V0bmV4dF9zbG90KGlzY2FuLAorCQkJCQkJ CQkJCQkJCQkJICAgZGlyZWN0aW9uLCBzbG90KTsKK30KKwogLyoKICAqIEZldGNoZXMsIGFzIHBh cnQgb2YgYW4gaW5kZXggc2NhbiwgdHVwbGUgYXQgYHRpZGAgaW50byBgc2xvdGAsIGFmdGVyIGRv aW5nCiAgKiBhIHZpc2liaWxpdHkgdGVzdCBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0 dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZApAQCAtMTIzMCw2ICsxMjkyLDkgQEAgdGFibGVfaW5k ZXhfZmV0Y2hfZW5kKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogICogZW50cnkg KGxpa2UgaGVhcCdzIEhPVCkuIFdoZXJlYXMgdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24o KSBvbmx5CiAgKiBldmFsdWF0ZXMgdGhlIHR1cGxlIGV4YWN0bHkgYXQgYHRpZGAuIE91dHNpZGUg b2YgaW5kZXggZW50cnkgLT50YWJsZSB0dXBsZQogICogbG9va3VwcywgdGFibGVfdHVwbGVfZmV0 Y2hfcm93X3ZlcnNpb24oKSBpcyB3aGF0J3MgdXN1YWxseSBuZWVkZWQuCisgKgorICogVGhpcyBp cyBhIGxvd2VyLWxldmVsIGludGVyZmFjZSB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxl ci4gIENhbGxlcnMKKyAqIHNob3VsZCBmYXZvciB0aGUgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 IGludGVyZmFjZSB3aGVuZXZlciBwb3NzaWJsZS4KICAqLwogc3RhdGljIGlubGluZSBib29sCiB0 YWJsZV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oIGIvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKaW5kZXggODg0N2Q3Zjk0Li5iNWI4 ZjUwOWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCkBAIC00OCw2ICs0 OCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24KIHsKIAkvKiBJ bmRleCBzZWFyY2ggY291bnQgKGluY3JlbWVudGVkIHdpdGggcGdzdGF0X2NvdW50X2luZGV4X3Nj YW4gY2FsbCkgKi8KIAl1aW50NjQJCW5zZWFyY2hlczsKKworCS8qCisJICogaGVhcCBibG9ja3Mg ZmV0Y2hlZCBjb3VudHMgKGluY3JlbWVudGVkIGJ5IGluZGV4X2dldG5leHRfc2xvdCBjYWxscwor CSAqIHdpdGhpbiB0YWJsZSBBTXMsIHRob3VnaCBvbmx5IGR1cmluZyBpbmRleC1vbmx5IHNjYW5z KQorCSAqLworCXVpbnQ2NAkJbmhlYXBmZXRjaGVzOwogfSBJbmRleFNjYW5JbnN0cnVtZW50YXRp b247CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDU4NmJkYzIxOS4uNTkzYTc3MTA4IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTc2Myw3ICsxNzYzLDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuU3RhdGUKICAqCQlJbnN0cnVtZW50CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3Ry dW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAgIHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50 YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKICAqCQlUYWJsZVNsb3QJCSAgIHNsb3QgZm9yIGhvbGRp bmcgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgdGFibGUKLSAqCQlWTUJ1ZmZlcgkJICAgYnVmZmVy IGluIHVzZSBmb3IgdmlzaWJpbGl0eSBtYXAgdGVzdGluZywgaWYgYW55CiAgKgkJUHNjYW5MZW4J CSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXgtb25seSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1l Q1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBuYW1lIHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5B TUVEQVRBTEVOCiAgKgkJTmFtZUNTdHJpbmdDb3VudCAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0 aGUgTmFtZUNTdHJpbmdBdHROdW1zIGFycmF5CkBAIC0xNzg2LDcgKzE3ODUsNiBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlv c3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hh cmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7Ci0JQnVmZmVyCQlpb3Nz X1ZNQnVmZmVyOwogCVNpemUJCWlvc3NfUHNjYW5MZW47CiAJQXR0ck51bWJlciAqaW9zc19OYW1l Q1N0cmluZ0F0dE51bXM7CiAJaW50CQkJaW9zc19OYW1lQ1N0cmluZ0NvdW50OwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaAppbmRleCAyNzc1OGVjMTYuLjA2NjFmYzAzZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK QEAgLTE0MjUsMTIgKzE0MjUsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9v bAkJYW1vcHRpb25hbGtleTsKIAlib29sCQlhbXNlYXJjaGFycmF5OwogCWJvb2wJCWFtc2VhcmNo bnVsbHM7Ci0JLyogZG9lcyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlPyAqLwotCWJvb2wJ CWFtaGFzZ2V0dHVwbGU7CisJLyogZG9lcyBBTSBoYXZlIGFtZ2V0YmF0Y2ggKG9yIGdldHR1cGxl KSBpbnRlcmZhY2U/ICovCisJYm9vbAkJYW1oYXNnZXRiYXRjaDsKIAkvKiBkb2VzIEFNIGhhdmUg YW1nZXRiaXRtYXAgaW50ZXJmYWNlPyAqLwogCWJvb2wJCWFtaGFzZ2V0Yml0bWFwOwogCWJvb2wJ CWFtY2FucGFyYWxsZWw7Ci0JLyogZG9lcyBBTSBoYXZlIGFtbWFya3BvcyBpbnRlcmZhY2U/ICov CisJLyogaXMgQU0gcHJlcGFyZWQgZm9yIHVzIHRvIHJlc3RvcmUgYSBtYXJrPyAqLwogCWJvb2wJ CWFtY2FubWFya3BvczsKIAkvKiBBTSdzIGNvc3QgZXN0aW1hdG9yICovCiAJLyogUmF0aGVyIHRo YW4gaW5jbHVkZSBhbWFwaS5oIGhlcmUsIHdlIGRlY2xhcmUgYW1jb3N0ZXN0aW1hdGUgbGlrZSB0 aGlzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggMmEwZjhjOGUzLi4wYjQzOTY1MGYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5OCwxMCArMjk4LDEyIEBAIGJyaW5oYW5kbGVyKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJyaW5iZWdpbnNjYW4sCiAJCS5hbXJl c2NhbiA9IGJyaW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2gg PSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9 IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJyaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBi cmluZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwK KwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEws CiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5V TEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwppbmRleCA2YjE0OGU2OWEuLjhmNzAzM2Q2MiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbmdldC5jCkBAIC0xOTUzLDkgKzE5NTMsOSBAQCBnaW5nZXRiaXRtYXAo SW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkgKiBpbnRvIHRoZSBtYWluIGlu ZGV4LCBhbmQgc28gd2UgbWlnaHQgdmlzaXQgaXQgYSBzZWNvbmQgdGltZSBkdXJpbmcgdGhlCiAJ ICogbWFpbiBzY2FuLiAgVGhpcyBpcyBva2F5IGJlY2F1c2Ugd2UnbGwganVzdCByZS1zZXQgdGhl IHNhbWUgYml0IGluIHRoZQogCSAqIGJpdG1hcC4gIChUaGUgcG9zc2liaWxpdHkgb2YgZHVwbGlj YXRlIHZpc2l0cyBpcyBhIG1ham9yIHJlYXNvbiB3aHkgR0lOCi0JICogY2FuJ3Qgc3VwcG9ydCB0 aGUgYW1nZXR0dXBsZSBBUEksIGhvd2V2ZXIuKSBOb3RlIHRoYXQgaXQgd291bGQgbm90IGRvCi0J ICogdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2Ug Y29uY3VycmVudAotCSAqIGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBl bnRpcmVseS4KKwkgKiBjYW4ndCBzdXBwb3J0IGVpdGhlciB0aGUgYW1nZXR0dXBsZSBvciBhbWdl dGJhdGNoIEFQSS4pIE5vdGUgdGhhdCBpdAorCSAqIHdvdWxkIG5vdCBkbyB0byBzY2FuIHRoZSBt YWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZQorCSAqIGNvbmN1cnJlbnQg Y2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5LgogCSAqLwog CXNjYW5QZW5kaW5nSW5zZXJ0KHNjYW4sIHRibSwgJm50aWRzKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYwppbmRleCBmZTdiOTg0ZmYuLjcxMGYzZjljMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51 dGlsLmMKQEAgLTgyLDEwICs4MiwxMiBAQCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CS5hbWJlZ2luc2NhbiA9IGdpbmJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lucmVzY2FuLAog CQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0 ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRt YXAgPSBnaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBnaW5lbmRzY2FuLAotCQkuYW1tYXJr cG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEws CiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2Nh biA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Qu YwppbmRleCA4NTY1ZTIyNWIuLmE0ODRjOGIyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAt MTAzLDEwICsxMDMsMTIgQEAgZ2lzdGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVn aW5zY2FuID0gZ2lzdGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lzdHJlc2NhbiwKIAkJLmFt Z2V0dHVwbGUgPSBnaXN0Z2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2ls bGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRi aXRtYXAgPSBnaXN0Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2lzdGVuZHNjYW4sCi0JCS5h bW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0g TlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxs ZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaC5jCmluZGV4IDZkZjVlN2NjYi4uMzJkYWRlYmViIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5j CkBAIC0xMTQsMTAgKzExNCwxMiBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQku YW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBoYXNocmVzY2FuLAog CQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQku YW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCiAJCS5h bWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwK LQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVz ZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRw YXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBjZmU0Njg5YTguLjcwZmUxY2Nl YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0xOSw2ICsx OSw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL2Ft YXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBh bS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwdG9hc3QuaCIKQEAgLTg1LDkgKzg2LDEwIEBAIGhl YXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwpCiAJSW5kZXhGZXRjaEhlYXBEYXRh ICpoc2NhbiA9IHBhbGxvYzBfb2JqZWN0KEluZGV4RmV0Y2hIZWFwRGF0YSk7CiAKIAloc2Nhbi0+ eHNfYmFzZS5yZWwgPSByZWw7Ci0JaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhz Y2FuLT54c19iYXNlLmJhdGNoX29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6ZW9mKEhlYXBCYXRj aERhdGEpKTsKKwloc2Nhbi0+eHNfYmFzZS5iYXRjaF9wZXJfaXRlbV9zaXplID0gc2l6ZW9mKHVp bnQ4KTsgLyogdmlzSW5mbyBlbGVtZW50IHNpemUgKi8KIAloc2Nhbi0+eHNfYmxrID0gSW52YWxp ZEJsb2NrTnVtYmVyOwotCWhzY2FuLT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJaHNj YW4tPnhzX3ZtX2l0ZW1zID0gMTsKIAogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9CkBAIC05 NywxOCArOTksMTUgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVh cERhdGEgKikgc2NhbjsKIAotCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKLQl7 Ci0JCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwotCQloc2Nhbi0+eHNfY2J1ZiA9IElu dmFsaWRCdWZmZXI7Ci0JfQorCS8qIFJlc2NhbnMgc2hvdWxkIGF2b2lkIGFuIGV4Y2Vzc2l2ZSBu dW1iZXIgb2YgVk0gbG9va3VwcyAqLworCWhzY2FuLT54c192bV9pdGVtcyA9IDE7CiAKLQlpZiAo QnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQotCXsKLQkJUmVsZWFzZUJ1ZmZlciho c2Nhbi0+eHNfdm1idWZmZXIpOwotCQloc2Nhbi0+eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVy OwotCX0KLQloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCS8qCisJICogRGVs aWJlcmF0ZWx5IGF2b2lkIGRyb3BwaW5nIHBpbnMgbm93IGhlbGQgaW4geHNfY2J1ZiBhbmQgeHNf dm1idWZmZXIuCisJICogVGhpcyBzYXZlcyBjeWNsZXMgZHVyaW5nIGNlcnRhaW4gdGlnaHQgbmVz dGVkIGxvb3Agam9pbnMsIGFuZCBkdXJpbmcKKwkgKiBtZXJnZSBqb2lucyB0aGF0IGZyZXF1ZW50 bHkgcmVzdG9yZSBhIHNhdmVkIG1hcmsuICBJdCBjYW4gYWxzbyBhdm9pZAorCSAqIHJlcGVhdGVk IHBpbm5pbmcgYW5kIHVucGlubmluZyBvZiB0aGUgc2FtZSBidWZmZXIgYWNyb3NzIHJlc2NhbnMu CisJICovCiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTYsMTEgKzExNSw1MyBAQCBoZWFwYW1faW5k ZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhl YXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKIAotCWhlYXBhbV9p bmRleF9mZXRjaF9yZXNldChzY2FuKTsKKwkvKiBkcm9wIHBpbiBpZiB0aGVyZSdzIGEgcGlubmVk IGhlYXAgcGFnZSAqLworCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJUmVs ZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CisKKwkvKiBkcm9wIHBpbiBpZiB0aGVyZSdzIGEg cGlubmVkIHZpc2liaWxpdHkgbWFwIHBhZ2UgKi8KKwlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+ eHNfdm1idWZmZXIpKQorCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7CiAKIAlw ZnJlZShoc2Nhbik7CiB9CiAKKy8qCisgKiBJbml0aWFsaXplIHRoZSBoZWFwIHRhYmxlIEFNJ3Mg cGVyLWJhdGNoIG9wYXF1ZSBhcmVhIChIZWFwQmF0Y2hEYXRhKS4KKyAqCisgKiBDYWxsZWQgYnkg aW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4K KyAqIFNldHMgdXAgdGhlIHZpc0luZm8gcG9pbnRlciBmb3IgaW5kZXgtb25seSBzY2Fucywgb3Ig TlVMTCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyB2b2lkCitoZWFwYW1faW5kZXhfYmF0Y2hfaW5p dChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJYm9vbCBu ZXdfYWxsb2MpCit7CisJSGVhcEJhdGNoRGF0YSAqaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKGJh dGNoLCBzY2FuKTsKKworCWlmIChzY2FuLT54c193YW50X2l0dXApCisJeworCQlpZiAobmV3X2Fs bG9jKQorCQl7CisJCQkvKgorCQkJICogUG9pbnQgdmlzSW5mbyBpbnRvIHRoZSB0cmFpbGluZyBw ZXItaXRlbSBhcmVhIHRoYXQgZm9sbG93cworCQkJICogaXRlbXNbXSBpbiB0aGUgYmF0Y2ggYWxs b2NhdGlvbi4KKwkJCSAqLworCQkJU2l6ZQkJaXRlbXNFbmQ7CisKKwkJCWl0ZW1zRW5kID0gTUFY QUxJR04ob2Zmc2V0b2YoSW5kZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKworCQkJCQkJCQlzaXpl b2YoQmF0Y2hNYXRjaGluZ0l0ZW0pICogc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJCQloYmF0Y2gt PnZpc0luZm8gPSAodWludDggKikgKChjaGFyICopIGJhdGNoICsgaXRlbXNFbmQpOworCQl9CisK KwkJLyogQ2xlYXIgdmlzaWJpbGl0eSBmbGFncyAobmVlZGVkIGZvciBib3RoIG5ldyBhbmQgcmVj eWNsZWQgYmF0Y2hlcykgKi8KKwkJbWVtc2V0KGhiYXRjaC0+dmlzSW5mbywgMCwgc2Nhbi0+bWF4 aXRlbXNiYXRjaCk7CisJfQorCWVsc2UKKwl7CisJCWhiYXRjaC0+dmlzSW5mbyA9IE5VTEw7CisJ fQorfQorCiBzdGF0aWMgYm9vbAogaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRl eEZldGNoVGFibGVEYXRhICpzY2FuLAogCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKQEAgLTE0Miw2 ICsxODMsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuLAogCQkvKiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51bWJlciBm b3IgbmV4dCB0aW1lICovCiAJCWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVt YmVyKHRpZCk7CiAKKwkJLyoKKwkJICogRHJvcCB0aGUgeHNfYmxrIHBpbiBpbmRlcGVuZGVudGx5 IGhlbGQgb24gYnkgc2xvdCAoaWYgYW55KSBub3cuIFNlZQorCQkgKiBjb21tZW50cyBhcm91bmQg RXhlY1N0b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlIGNhbGwgYmVsb3cuCisJCSAqLworCQlFeGVj Q2xlYXJUdXBsZShzbG90KTsKKwogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1Zikp CiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIApAQCAtMTc4LDcgKzIyNSwzMyBA QCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNj YW4sCiAJCSpjYWxsX2FnYWluID0gIUlzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CiAKIAkJ c2xvdC0+dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChzY2FuLT5yZWwpOwotCQlFeGVj U3RvcmVCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsIGhzY2FuLT54 c19jYnVmKTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IFRJRCBvbiB0aGUgY3Vy cmVudCBoZWFwIGJsb2NrIHdpdGhpbiB0aGUgYmF0Y2gsCisJCSAqIHRyYW5zZmVyIG91ciBidWZm ZXIgcGluIHRvIHRoZSBzbG90IHJhdGhlciB0aGFuIGhhdmluZyB0aGUgc2xvdAorCQkgKiBpbmNy ZW1lbnQgdGhlIHBpbiBjb3VudC4gIFRoaXMgc2F2ZXMgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZD b3VudAorCQkgKiBhbmQgUmVsZWFzZUJ1ZmZlciBjYWxscywgc2luY2UgdGhlIGNhbGxlciB3b3Vs ZCBqdXN0IHJlbGVhc2UgaXRzCisJCSAqIHBpbiBvbiB4c19jYnVmIHdoZW4gc3dpdGNoaW5nIHRv IHRoZSBuZXh0IGJsb2NrIGFueXdheS4KKwkJICoKKwkJICogV2UgY2FuIG9ubHkgZG8gdGhpcyB3 aGVuIGNhbGxfYWdhaW4gaXMgZmFsc2UsIHNpbmNlIG90aGVyd2lzZSB0aGUKKwkJICogY2FsbGVy IHdpbGwgbmVlZCB4c19jYnVmIHRvIHJlbWFpbiB2YWxpZCBmb3IgdGhlIG5leHQgY2FsbC4KKwkJ ICovCisJCWlmIChoc2Nhbi0+eHNfbGFzdGluYmxvY2sgJiYgISpjYWxsX2FnYWluKQorCQl7CisJ CQlFeGVjU3RvcmVQaW5uZWRCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNs b3QsCisJCQkJCQkJCQkJICAgaHNjYW4tPnhzX2NidWYpOworCQkJaHNjYW4tPnhzX2NidWYgPSBJ bnZhbGlkQnVmZmVyOworCQkJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKKwor CQkJLyoKKwkJCSAqIE5vdGU6IHRoZSBwaW4gbm93IG93bmVkIGJ5IHRoZSBzbG90IGlzIGV4cGVj dGVkIHRvIGJlIHJlbGVhc2VkCisJCQkgKiBvbiB0aGUgbmV4dCBjYWxsIGhlcmUsIHZpYSBhbiBl eHBsaWNpdCBFeGVjQ2xlYXJUdXBsZS4gIFRoaXMKKwkJCSAqIGF2b2lkcyBjaHVybiBpbiB0aGUg YmFja2VuZCdzIHByaXZhdGUgcmVmY291bnQgY2FjaGUuCisJCQkgKi8KKwkJfQorCQllbHNlCisJ CQlFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsCisJ CQkJCQkJCQkgaHNjYW4tPnhzX2NidWYpOwogCX0KIAllbHNlCiAJewpAQCAtMTg5LDYgKzI2Miw1 OTEgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuLAogCXJldHVybiBnb3RfaGVhcF90dXBsZTsKIH0KIAorLyoKKyAqIGhlYXBhbV9iYXRj aF9yZXNvbHZlX3Zpc2liaWxpdHkKKyAqCQlPYnRhaW4gdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBm b3IgYSBUSUQgZnJvbSBjYWxsZXIncyBiYXRjaC4KKyAqCisgKiBDYWxsZWQgZHVyaW5nIGluZGV4 LW9ubHkgc2NhbnMuICBXZSBhbHdheXMgY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgY2FsbGVyJ3MK KyAqIGl0ZW0gKGFuIG9mZnNldCBpbnRvIGNhbGxlcidzIGJhdGNoLT5pdGVtc1tdIGFycmF5KS4g IFdlIG1pZ2h0IGFsc28gc2V0CisgKiB2aXNpYmlsaXR5IGluZm8gZm9yIG90aGVyIGl0ZW1zIGZy b20gY2FsbGVyJ3MgYmF0Y2ggbW9yZSBwcm9hY3RpdmVseSB3aGVuCisgKiB0aGF0IG1ha2VzIHNl bnNlLgorICoKKyAqIFdlIGtlZXAgdHdvIGNvbXBldGluZyBjb25zaWRlcmF0aW9ucyBpbiBiYWxh bmNlIHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0bworICogY2hlY2sgYWRkaXRpb25hbCBpdGVt czogdGhlIG5lZWQgdG8ga2VlcCB0aGUgY29zdCBvZiB2aXNpYmlsaXR5IG1hcCBhY2Nlc3MKKyAq IHVuZGVyIGNvbnRyb2wgd2hlbiBtb3N0IGl0ZW1zIHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQgYnkg dGhlIHNjYW4gYW55d2F5CisgKiAoaW1wb3J0YW50IGZvciBpbm5lciBpbmRleCBzY2FucyBvZiBh bnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQorICogbmVlZCB0byBub3QgaG9sZCBv bnRvIGluZGV4IGxlYWYgcGFnZXMgZm9yIHRvbyBsb25nLgorICoKKyAqIE5vdGUgb24gTWVtb3J5 IE9yZGVyaW5nIEVmZmVjdHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QgbG9jayB0aGUgdmlzaWJpbGl0 eSBtYXAgYnVmZmVyLCBhbmQKKyAqIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQgaGVyZSBj b3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0CisgKiBjYW4ndCBiZSBzdGFsZSBl bm91Z2ggdG8gbWF0dGVyLgorICoKKyAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0g Yml0IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwgYmVjYXVzZQorICogdGhlIHR1cGxlIGlz IHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0IG5vdCB2aXNpYmxlLiAgVGhlIHJlYWRpbmcg b2YgdGhlCisgKiBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBp bmRleCBidWZmZXIpIGlzIHNlcmlhbGl6ZWQKKyAqIHdpdGggdGhlIGluc2VydCBvZiB0aGUgVElE IGludG8gdGhlIGluZGV4ICh1c2luZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUKKyAqIGluZGV4 IGJ1ZmZlcikuICBCZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcg dGhlIGluZGV4LAorICogYW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdlIGFj dHMgYXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3ZQorICogYXJlIHN1cmUgdG8gc2VlIHRoZSBj bGVhcmVkIGJpdCBpZiB3ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCisgKgorICogRGVs ZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFy IG91dCB0aGUgVElEKSwKKyAqIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVs ZXRlIGlzIG5vdCBzZXJpYWxpemVkIHdpdGggdGhpcyB0ZXN0CisgKiBiZWxvdywgYW5kIHdlIG1h eSBzZWUgYSB2YWx1ZSB0aGF0IGlzIHNpZ25pZmljYW50bHkgc3RhbGUuICBIb3dldmVyLCB3ZQor ICogZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlIHJpZ2h0IGF3YXksIGJlY2F1c2UgdGhlIHR1 cGxlIGlzIHN0aWxsIHZpc2libGUKKyAqIHVudGlsIHRoZSBkZWxldGluZyB0cmFuc2FjdGlvbiBj b21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKKyAqIHRyYW5zYWN0aW9u KS4gIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwgaGF2ZSBi ZWVuCisgKiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJp bmcgdGhlIGJpdC4gIEFuZCBmb3IgdXMgdG8KKyAqIGhhdmUgYSBzbmFwc2hvdCB0aGF0IGluY2x1 ZGVzIHRoZSBkZWxldGluZyB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZQorICogaW52aXNp YmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVpcmVkIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1l LCBhY3RpbmcgYXMKKyAqIGEgcmVhZCBiYXJyaWVyLgorICoKKyAqIEl0J3Mgd29ydGggZ29pbmcg dGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrIHRoZSBWTQor ICogYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgorICov CitzdGF0aWMgdm9pZAoraGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQlJbmRleFNjYW5CYXRj aCBiYXRjaCwgSGVhcEJhdGNoRGF0YSAqaGJhdGNoLAorCQkJCQkJCQlCYXRjaFJpbmdJdGVtUG9z ICpwb3MpCit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERh dGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCWludAkJCXBvc0l0ZW0gPSBwb3MtPml0ZW07CisJ aW50CQkJbm9TZXRJdGVtLAorCQkJCXN0ZXA7CisJYm9vbAkJYWxsYmF0Y2hpdGVtdmlzaWJsZTsK KwlCbG9ja051bWJlciBjdXJ2bWhlYXBibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKKwl1aW50 OAkJY3Vydm1oZWFwYmxrZmxhZ3MgPSAwOworCisJQXNzZXJ0KGhiYXRjaCA9PSBoZWFwX2JhdGNo X2RhdGEoYmF0Y2gsIHNjYW4pKTsKKworCS8qCisJICogV2UgYmV0dGVyIHN0aWxsIGhhdmUgdGhl IFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIChnZW5lcmFsbHkgYSBwaW4gb24KKwkgKiB0aGUgYmF0 Y2gncyBpbmRleCBwYWdlKSAtLSBhbXVuZ3VhcmRiYXRjaCBoYXMgbm90IGJlZW4gY2FsbGVkIHll dAorCSAqLworCUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKworCS8qIERl dGVybWluZSB0aGUgcmFuZ2Ugb2YgaXRlbXMgdG8gc2V0IHZpc2liaWxpdHkgZm9yICovCisJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCW5vU2V0SXRlbSA9IE1p bihiYXRjaC0+bGFzdEl0ZW0gKyAxLCBwb3NJdGVtICsgaHNjYW4tPnhzX3ZtX2l0ZW1zKTsKKwkJ YWxsYmF0Y2hpdGVtdmlzaWJsZSA9IG5vU2V0SXRlbSA+IGJhdGNoLT5sYXN0SXRlbSAmJgorCQkJ KHBvc0l0ZW0gPT0gYmF0Y2gtPmZpcnN0SXRlbSB8fAorCQkJIChoYmF0Y2gtPnZpc0luZm9bYmF0 Y2gtPmZpcnN0SXRlbV0gJiBCQVRDSF9WSVNfQ0hFQ0tFRCkpOworCQlzdGVwID0gMTsKKwl9CisJ ZWxzZQorCXsKKwkJbm9TZXRJdGVtID0gTWF4KGJhdGNoLT5maXJzdEl0ZW0gLSAxLCBwb3NJdGVt IC0gaHNjYW4tPnhzX3ZtX2l0ZW1zKTsKKwkJYWxsYmF0Y2hpdGVtdmlzaWJsZSA9IG5vU2V0SXRl bSA8IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCShwb3NJdGVtID09IGJhdGNoLT5sYXN0SXRlbSB8 fAorCQkJIChoYmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmxhc3RJdGVtXSAmIEJBVENIX1ZJU19DSEVD S0VEKSk7CisJCXN0ZXAgPSAtMTsKKwl9CisKKwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGluZm8g Zm9yIGEgcmFuZ2Ugb2YgaXRlbXMsIGluIHNjYW4gb3JkZXIuCisJICoKKwkgKiBub1NldEl0ZW0g aXMgdGhlIGZpcnN0IGl0ZW0gKGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbikgdGhhdCB3b24n dCBiZQorCSAqIHNldCBkdXJpbmcgdGhpcyBjYWxsLiAgbm9TZXRJdGVtIG9mdGVuIHBvaW50cyB0 byBqdXN0IHBhc3QgdGhlIGVuZCBvZgorCSAqIChvciBqdXN0IGJlZm9yZSB0aGUgc3RhcnQgb2Yp IHRoZSBiYXRjaCdzICdpdGVtcycgYXJyYXkuCisJICoKKwkgKiBXZSBpdGVyYXRlIHRoaXMgd2F5 IHRvIGF2b2lkIHRoZSBuZWVkIGZvciAyIGRpcmVjdGlvbi1zcGVjaWZpYyBsb29wcywKKwkgKiBz aW5jZSB0aGlzIGlzIGEgaG90IGNvZGUgcGF0aCB0aGF0J3Mgc2Vuc2l0aXZlIHRvIGNvZGUgc2l6 ZSBpbmNyZWFzZXMuCisJICovCisJZm9yIChpbnQgc2V0SXRlbSA9IHBvc0l0ZW07IHNldEl0ZW0g IT0gbm9TZXRJdGVtOyBzZXRJdGVtICs9IHN0ZXApCisJeworCQlJdGVtUG9pbnRlciB0aWQgPSAm YmF0Y2gtPml0ZW1zW3NldEl0ZW1dLnRhYmxlVGlkOworCQlCbG9ja051bWJlciBoZWFwYmxrbm8g PSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisJCXVpbnQ4CQlmbGFnczsKKworCQlp ZiAoaGVhcGJsa25vID09IGN1cnZtaGVhcGJsa25vKQorCQl7CisJCQkvKiBjb250aWd1b3VzIGhl YXAgYmxvY2sgLS0ganVzdCByZXVzZSBsYXN0IGl0ZW0ncyBmbGFncyAqLworCQkJaGJhdGNoLT52 aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxrZmxhZ3M7CisJCQljb250aW51ZTsKKwkJfQor CisJCWZsYWdzID0gQkFUQ0hfVklTX0NIRUNLRUQ7CisJCWlmIChWTV9BTExfVklTSUJMRShzY2Fu LT5oZWFwUmVsYXRpb24sIGhlYXBibGtubywgJmhzY2FuLT54c192bWJ1ZmZlcikpCisJCQlmbGFn cyB8PSBCQVRDSF9WSVNfQUxMX1ZJU0lCTEU7CisKKwkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1d ID0gY3Vydm1oZWFwYmxrZmxhZ3MgPSBmbGFnczsKKwkJY3Vydm1oZWFwYmxrbm8gPSBoZWFwYmxr bm87CisJfQorCisJLyoKKwkgKiBJdCdzIHNhZmUgdG8gZHJvcCB0aGUgYmF0Y2gncyBpbmRleCBB TSByZXNvdXJjZXMgYXMgc29vbiBhcyB3ZSd2ZQorCSAqIHJlc29sdmVkIHRoZSB2aXNpYmlsaXR5 IHN0YXR1cyBvZiBhbGwgb2YgaXRzIGl0ZW1zCisJICovCisJaWYgKGFsbGJhdGNoaXRlbXZpc2li bGUgJiYgc2Nhbi0+TVZDQ1NjYW4pCisJeworCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW2JhdGNo LT5maXJzdEl0ZW1dICYgQkFUQ0hfVklTX0NIRUNLRUQpOworCQlBc3NlcnQoaGJhdGNoLT52aXNJ bmZvW2JhdGNoLT5sYXN0SXRlbV0gJiBCQVRDSF9WSVNfQ0hFQ0tFRCk7CisKKwkJdGFibGVhbV91 dGlsX3VuZ3VhcmRfYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8qCisJICogRWxzZSBjaGVj ayB2aXNpYmlsaXR5IGZvciB0d2ljZSBhcyBtYW55IGl0ZW1zIG5leHQgdGltZSwgb3IgYWxsIGl0 ZW1zLgorCSAqIFdlIGNoZWNrIGFsbCBpdGVtcyBpbiBvbmUgZ28gb25jZSB3ZSdyZSBwYXNzZWQg dGhlIHNjYW4ncyBmaXJzdCBiYXRjaC4KKwkgKi8KKwllbHNlIGlmIChoc2Nhbi0+eHNfdm1faXRl bXMgPCAoYmF0Y2gtPmxhc3RJdGVtIC0gYmF0Y2gtPmZpcnN0SXRlbSkpCisJCWhzY2FuLT54c192 bV9pdGVtcyAqPSAyOworCWVsc2UKKwkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4aXRl bXNiYXRjaDsKK30KKworc3RhdGljIGlubGluZSBJdGVtUG9pbnRlcgoraGVhcGFtX2JhdGNoX3Jl dHVybl90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAor CQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCwK KwkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsIGJvb2wgKmFsbF92aXNpYmxlKQorewor CUhlYXBCYXRjaERhdGEgKmhiYXRjaDsKKworCXBnc3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nh bi0+aW5kZXhSZWxhdGlvbiwgMSk7CisKKwkvKiBTZXQgeHNfaGVhcHRpZCwgd2hpY2ggaGVhcGFt X2luZGV4X2dldG5leHRfc2xvdCB3aWxsIG5lZWQgKi8KKwlzY2FuLT54c19oZWFwdGlkID0gc2Nh bkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50YWJsZVRpZDsKKworCWlmICghc2Nhbi0+eHNf d2FudF9pdHVwKQorCXsKKwkJaW50CQkJbmV4dEl0ZW07CisJCWJvb2wJCWhhc05leHQ7CisKKwkJ LyoKKwkJICogUGxhaW4gaW5kZXggc2Nhbi4KKwkJICoKKwkJICogRGV0ZXJtaW5lIGlmIHRoZSBu ZXh0IGl0ZW0gaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gaXMgb24gYQorCQkgKiBkaWZm ZXJlbnQgaGVhcCBibG9jay4gIFdoZW4gaXQgaXMsIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZSBj YW4KKwkJICogdHJhbnNmZXIgaXRzIGJ1ZmZlciBwaW4gdG8gdGhlIHNsb3QgaW5zdGVhZCBvZiBp bmNyZW1lbnRpbmcgdGhlIHBpbgorCQkgKiBjb3VudCwgc2F2aW5nIGEgcGFpciBvZiBJbmNyQnVm ZmVyUmVmQ291bnQvUmVsZWFzZUJ1ZmZlciBjYWxscy4KKwkJICoKKwkJICogTm90ZTogV2UgY2Fu bm90IGRvIHRoaXMgZm9yIGluZGV4LW9ubHkgc2NhbnMgYmVjYXVzZSBhbGwtdmlzaWJsZQorCQkg KiBpdGVtcyBhcmUgc2tpcHBlZCBieSBib3RoIHRoZSBzY2FuIGFuZCB0aGUgcmVhZCBzdHJlYW0g Y2FsbGJhY2suCisJCSAqIFNraXBwZWQgaXRlbXMgY2FuIGJyZWFrIHRoZSBibG9jayBkZWR1cGxp Y2F0aW9uIHN5bW1ldHJ5IGJldHdlZW4KKwkJICogdGhlIHN0cmVhbSBhbmQgdGhlIHNjYW46IHRo ZSBzdHJlYW0gZGVkdXBsaWNhdGVzIGNvbnNlY3V0aXZlCisJCSAqIG5vbi1hbGwtdmlzaWJsZSBp dGVtcyBieSBibG9jaywgYnV0IGFmdGVyIGludmFsaWRhdGluZyB4c19ibGsgdGhlCisJCSAqIHNj YW4gd291bGQgdHJ5IHRvIHJlLWZldGNoIGEgYmxvY2sgdGhhdCB0aGUgc3RyZWFtIGFscmVhZHkg cmV0dXJuZWQKKwkJICogYW5kIGRlZHVwbGljYXRlZCBhd2F5LgorCQkgKi8KKwkJaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJeworCQkJbmV4dEl0ZW0gPSBzY2FuUG9z LT5pdGVtICsgMTsKKwkJCWhhc05leHQgPSAobmV4dEl0ZW0gPD0gc2NhbkJhdGNoLT5sYXN0SXRl bSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXh0SXRlbSA9IHNjYW5Qb3MtPml0ZW0gLSAxOwor CQkJaGFzTmV4dCA9IChuZXh0SXRlbSA+PSBzY2FuQmF0Y2gtPmZpcnN0SXRlbSk7CisJCX0KKwor CQloc2Nhbi0+eHNfbGFzdGluYmxvY2sgPSBoYXNOZXh0ICYmCisJCQlJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKCZzY2FuQmF0Y2gtPml0ZW1zW25leHRJdGVtXS50YWJsZVRpZCkgIT0KKwkJCUl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhzX2hlYXB0aWQpOworCisJCXJldHVybiAm c2Nhbi0+eHNfaGVhcHRpZDsKKwl9CisKKwkvKgorCSAqIEluZGV4LW9ubHkgc2Nhbi4KKwkgKgor CSAqIEFsc28gc2V0IHhzX2l0dXAsIHdoaWNoIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgbmVl ZHMgdG9vLgorCSAqLworCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNjYW5CYXRjaC0+ Y3VyclR1cGxlcyArCisJCQkJCQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50 dXBsZU9mZnNldCk7CisKKwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGluZm8gZm9yIHRoZSBjdXJy ZW50IHNjYW5Qb3MgaXRlbSAocGx1cyBwb3NzaWJseSBzb21lCisJICogYWRkaXRpb25hbCBpdGVt cyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbikgYXMgbmVlZGVkCisJICovCisJaGJhdGNo ID0gaGVhcF9iYXRjaF9kYXRhKHNjYW5CYXRjaCwgc2Nhbik7CisJaWYgKCEoaGJhdGNoLT52aXNJ bmZvW3NjYW5Qb3MtPml0ZW1dICYgQkFUQ0hfVklTX0NIRUNLRUQpKQorCQloZWFwYW1fYmF0Y2hf cmVzb2x2ZV92aXNpYmlsaXR5KHNjYW4sIGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBoYmF0Y2gsCisJ CQkJCQkJCQkJc2NhblBvcyk7CisKKwkvKiBGaW5hbGx5LCBzZXQgYWxsX3Zpc2libGUgZm9yIGhl YXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgKi8KKwkqYWxsX3Zpc2libGUgPQorCQkoaGJhdGNoLT52 aXNJbmZvW3NjYW5Qb3MtPml0ZW1dICYgQkFUQ0hfVklTX0FMTF9WSVNJQkxFKSAhPSAwOworCisJ cmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJ aGVhcGFtX2JhdGNoX2dldG5leHQgLSBnZXQgdGhlIG5leHQgYmF0Y2ggb2YgVElEcyBmcm9tIGEg c2NhbgorICoKKyAqIENhbGxlZCB3aGVuIHdlIG5lZWQgdG8gbG9hZCB0aGUgbmV4dCBiYXRjaCBv ZiBpbmRleCBlbnRyaWVzIHRvIHByb2Nlc3MgaW4KKyAqIHRoZSBnaXZlbiBkaXJlY3Rpb24uICBD YWxsZXIgcGFzc2VzIHVzIGEgYmF0Y2ggYW5kIGEgYmF0Y2ggcG9zaXRpb24sIHdoaWNoCisgKiBo YXMganVzdCBiZWVuIHVzZWQgdG8gcmVhZCBhbGwgaXRlbXMgZnJvbSB0aGUgYmF0Y2ggaW4gdGhl IGRpcmVjdGlvbiBwYXNzZWQKKyAqIGJ5IGNhbGxlci4KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXh0 IGJhdGNoIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgaW5kZXggc2Nhbiwgb3IgTlVMTCB3aGVuCisg KiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGVzIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4g IERvZXMgbm90IGFkdmFuY2UKKyAqIGNhbGxlcidzIGJhdGNoIHBvc2l0aW9uOyB0aGF0IGlzIGxl ZnQgdXAgdG8gY2FsbGVyLgorICoKKyAqIFRoaXMgaXMgYWxzbyB3aGVyZSBiYXRjaGVzIGFyZSBh cHBlbmRlZCB0byB0aGUgc2NhbidzIHJpbmcgYnVmZmVyLiAgV2UKKyAqIGRvbid0IGZyZWUgYW55 IGJhdGNoZXMgaGVyZSwgdGhvdWdoOyB0aGF0IGlzIGFsc28gbGVmdCB1cCB0byBjYWxsZXIuCisg KiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IEluZGV4U2Nh bkJhdGNoCitoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JCYXRjaCwgQmF0Y2hS aW5nSXRlbVBvcyAqcG9zKQoreworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gTlVMTDsKKwlCYXRj aFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSAmc2Nh bi0+YmF0Y2hyaW5nYnVmOworCisJLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFw c2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLworCUFzc2VydChUcmFuc2FjdGlvbklkSXNW YWxpZChSZWNlbnRYbWluKSk7CisKKwlpZiAoIXByaW9yQmF0Y2gpCisJeworCQkvKiBGaXJzdCBj YWxsIGZvciB0aGUgc2NhbiAqLworCQlBc3NlcnQocG9zID09ICZiYXRjaHJpbmdidWYtPnNjYW5Q b3MpOworCX0KKwllbHNlIGlmICh1bmxpa2VseShwcmlvckJhdGNoLT5kaXIgIT0gZGlyZWN0aW9u KSkKKwl7CisJCS8qCisJCSAqIFdlIGRldGVjdGVkIGEgY2hhbmdlIGluIHNjYW4gZGlyZWN0aW9u IGFjcm9zcyBiYXRjaGVzLiAgUHJlcGFyZQorCQkgKiBzY2FuJ3MgYmF0Y2hyaW5nYnVmIHN0YXRl IGZvciB1cyB0byBnZXQgdGhlIG5leHQgYmF0Y2ggZm9yIHRoZQorCQkgKiBvcHBvc2l0ZSBzY2Fu IGRpcmVjdGlvbiB0byB0aGUgb25lIHVzZWQgd2hlbiBwcmlvckJhdGNoIHdhcworCQkgKiByZXR1 cm5lZCBieSBhbWdldGJhdGNoLgorCQkgKi8KKwkJdGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5n ZShzY2FuKTsKKworCQkvKiBwcmlvckJhdGNoIGlzIG5vdyBiYXRjaHJpbmdidWYncyBvbmx5IGJh dGNoICovCisJCUFzc2VydChwb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsK KwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMSk7CisJfQorCWVsc2Ug aWYgKGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKSkKKwl7CisJ CS8qIE5leHQgYmF0Y2ggYWxyZWFkeSBsb2FkZWQgZm9yIHVzICovCisJCWJhdGNoID0gaW5kZXhf c2Nhbl9iYXRjaChzY2FuLCBwb3MtPmJhdGNoICsgMSk7CisKKwkJQXNzZXJ0KHByaW9yQmF0Y2gt PmRpciA9PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOwor CQlyZXR1cm4gYmF0Y2g7CisJfQorCisJLyoKKwkgKiBBc3NlcnQgcHJlY29uZGl0aW9ucyBmb3Ig Y2FsbGluZyBhbWdldGJhdGNoLgorCSAqCisJICogcHJpb3JCYXRjaCBoYWQgYmV0dGVyIGJlIGZv ciB0aGUgbGFzdCB2YWxpZCBiYXRjaCBjdXJyZW50bHkgaW4gdGhlIHJpbmcKKwkgKiBidWZmZXIg KGJhdGNoZXMgbXVzdCBzdGF5IGluIHNjYW4gb3JkZXIpLiAgSWYgaXQgaXNuJ3QgdGhlbiB3ZSBz aG91bGQKKwkgKiBoYXZlIGFscmVhZHkgcmV0dXJuZWQgc29tZSBleGlzdGluZyBsb2FkZWQgYmF0 Y2ggZWFybGllci4KKwkgKi8KKwlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSk7 CisJQXNzZXJ0KCFwcmlvckJhdGNoIHx8CisJCSAgIChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNj YW4pID4gMCAmJiBwcmlvckJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uICYmCisJCQlpbmRleF9zY2Fu X2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMSkgPT0gcHJpb3JCYXRjaCkp OworCisJLyoKKwkgKiBCZWZvcmUgd2UgY2FsbCBhbWdldGJhdGNoIGFnYWluLCBjaGVjayBpZiBw cmlvckJhdGNoIGlzIGFscmVhZHkga25vd24KKwkgKiB0byBiZSB0aGUgbGFzdCBiYXRjaCB3aXRo IG1hdGNoaW5nIGl0ZW1zIGluIHRoaXMgc2NhbiBkaXJlY3Rpb24KKwkgKi8KKwlpZiAocHJpb3JC YXRjaCAmJgorCQkoKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSAmJiBwcmlvckJh dGNoLT5rbm93bkVuZEZvcndhcmQpIHx8CisJCSAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGly ZWN0aW9uKSAmJiBwcmlvckJhdGNoLT5rbm93bkVuZEJhY2t3YXJkKSkpCisJCXJldHVybiBOVUxM OworCisJYmF0Y2ggPSBzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaChz Y2FuLCBwcmlvckJhdGNoLAorCQkJCQkJCQkJCQkJCSAgZGlyZWN0aW9uKTsKKwlpZiAoYmF0Y2gp CisJeworCQkvKiBXZSBnb3QgdGhlIGJhdGNoIGZyb20gdGhlIEFNICovCisJCUFzc2VydChiYXRj aC0+ZGlyID09IGRpcmVjdGlvbik7CisKKwkJLyogQXBwZW5kIGJhdGNoIHRvIHRoZSBlbmQgb2Yg cmluZyBidWZmZXIvd3JpdGUgaXQgdG8gYnVmZmVyIGluZGV4ICovCisJCWluZGV4X3NjYW5fYmF0 Y2hfYXBwZW5kKHNjYW4sIGJhdGNoKTsKKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiYXRjaCBy ZXR1cm5lZCBOVUxMICovCisJCWlmIChwcmlvckJhdGNoKQorCQl7CisJCQkvKgorCQkJICogVGhl cmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hlcyB0byBiZSBmb3VuZCBpbiB0aGUgY3VycmVudCBzY2Fu CisJCQkgKiBkaXJlY3Rpb24sIGZvbGxvd2luZyBwcmlvckJhdGNoLiAgUmVtZW1iZXIgdGhhdCBw cmlvckJhdGNoIGlzCisJCQkgKiB0aGUgbGFzdCBiYXRjaCB3aXRoIG1hdGNoaW5nIGl0ZW1zLgor CQkJICovCisJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQkJCXBy aW9yQmF0Y2gtPmtub3duRW5kRm9yd2FyZCA9IHRydWU7CisJCQllbHNlCisJCQkJcHJpb3JCYXRj aC0+a25vd25FbmRCYWNrd2FyZCA9IHRydWU7CisJCX0KKwl9CisKKwkvKiB4c19oaXR1cCBpc24n dCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMgKi8KKwlBc3NlcnQoIXNj YW4tPnhzX2hpdHVwKTsKKworCXJldHVybiBiYXRjaDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LQorICoJCWhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCAtIGdldCBuZXh0IFRJRCBmcm9tIGJhdGNo IHJpbmcgYnVmZmVyCisgKgorICogR2V0IHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBzY2FuJ3MgYmF0 Y2ggcmluZyBidWZmZXIsIHdoZW4gbW92aW5nIGluIHRoZQorICogZ2l2ZW4gc2NhbiBkaXJlY3Rp b24uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IEl0 ZW1Qb2ludGVyCitoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LCBib29sICphbGxfdmlzaWJsZSkKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9 ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZiYXRj aHJpbmdidWYtPnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gTlVMTDsKKwor CUFzc2VydCghc2NhblBvcy0+dmFsaWQgfHwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2Nh blBvcy0+YmF0Y2gpOworCUFzc2VydChzY2FuUG9zLT52YWxpZCB8fCBpbmRleF9zY2FuX2JhdGNo X2NvdW50KHNjYW4pID09IDApOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0 aW5nIGxvYWRlZCBzY2FuQmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAorCSAqIG1hdGNo aW5nIGl0ZW0ncyBUSUQvaW5kZXggdHVwbGUgZnJvbQorCSAqLworCWlmIChzY2FuUG9zLT52YWxp ZCkKKwl7CisJCS8qCisJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNvIHNjYW5CYXRjaCBtdXN0IGFs cmVhZHkgYmUgbG9hZGVkIGluIGJhdGNoIHJpbmcKKwkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0 aGF0IGhlcmUuCisJCSAqLworCQlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2Nh blBvcy0+YmF0Y2gpOworCisJCXNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2Nh blBvcy0+YmF0Y2gpOworCisJCWlmIChpbmRleF9zY2FuX3Bvc19hZHZhbmNlKGRpcmVjdGlvbiwg c2NhbkJhdGNoLCBzY2FuUG9zKSkKKwkJCXJldHVybiBoZWFwYW1fYmF0Y2hfcmV0dXJuX3RpZChz Y2FuLCBoc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywK KwkJCQkJCQkJCQkgICBhbGxfdmlzaWJsZSk7CisJfQorCisJLyoKKwkgKiBFaXRoZXIgcmFuIG91 dCBvZiBpdGVtcyBmcm9tIG91ciBleGlzdGluZyBzY2FuQmF0Y2gsIG9yIGl0IGhhc24ndCBiZWVu CisJICogbG9hZGVkIHlldCAoYmVjYXVzZSB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9y IHRoZSBlbnRpcmUgc2NhbikuCisJICogVHJ5IHRvIGFkdmFuY2Ugc2NhbkJhdGNoIHRvIHRoZSBu ZXh0IGJhdGNoIChvciBnZXQgdGhlIGZpcnN0IGJhdGNoKS4KKwkgKi8KKwlzY2FuQmF0Y2ggPSBo ZWFwYW1fYmF0Y2hfZ2V0bmV4dChzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcyk7 CisKKwlpZiAoIXNjYW5CYXRjaCkKKwl7CisJCS8qCisJCSAqIFdlJ3JlIGRvbmU7IG5vIG1vcmUg YmF0Y2hlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KKwkJICoKKwkJICogTm90ZTog c2NhblBvcyBpcyBnZW5lcmFsbHkgc3RpbGwgdmFsaWQgYXQgdGhpcyBwb2ludC4gIFRoZSBzY2Fu CisJCSAqIG1pZ2h0IHN0aWxsIGJhY2sgdXAgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KKwkJICov CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogQWR2YW5jZWQgc2NhbkJhdGNoLiAgTm93 IHBvc2l0aW9uIHNjYW5Qb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldworCSAqIHNjYW5CYXRjaC4KKwkg Ki8KKwlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Q b3MpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKSA9PSBz Y2FuQmF0Y2gpOworCisJLyoKKwkgKiBSZW1vdmUgdGhlIGhlYWQgYmF0Y2ggZnJvbSB0aGUgYmF0 Y2ggcmluZyBidWZmZXIgKGV4Y2VwdCB3aGVuIHRoaXMgbmV3CisJICogc2NhbkJhdGNoIGlzIG91 ciBvbmx5IG9uZSkKKwkgKi8KKwlpZiAoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggIT0gc2NhblBv cy0+YmF0Y2gpCisJeworCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2Jh dGNoKHNjYW4sCisJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCisJCS8q IGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0 Y2gpICovCisJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CisKKwkJ LyogUmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAqLworCQliYXRjaHJpbmdi dWYtPmhlYWRCYXRjaCsrOworCX0KKworCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFs d2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KKwlBc3NlcnQoYmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCisJcmV0dXJuIGhlYXBhbV9iYXRj aF9yZXR1cm5fdGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcywK KwkJCQkJCQkJICAgYWxsX3Zpc2libGUpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJ aGVhcGFtX2luZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUK KyAqCisgKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0 aCB0aGUgaW5kZXggVElEIG1vc3QKKyAqIHJlY2VudGx5IGZldGNoZWQgYnkgb3VyIGNhbGxlciBp biBzY2FuLT54c19oZWFwdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUKKyAqIG1hdGNoaW5nIHR1cGxl cyBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBsZSBiZWNh dXNlCisgKiBvZiBIT1QgY2hhaW5zLCBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mgc25hcHNo b3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUKKyAqIGZvciBtb3JlIHRoYW4gb25lIHN1Y2ggdHVw bGUgdG8gZXhpc3QuKQorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFpbmluZyB0 aGUgaGVhcCB0dXAgaXMgcGlubmVkLiAgVGhlIHBpbiBtdXN0IGJlCisgKiBkcm9wcGVkIGVsc2V3 aGVyZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3Qg Ym9vbAoraGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRh YmxlU2xvdCAqc2xvdCkKK3sKKwlib29sCQlhbGxfZGVhZCA9IGZhbHNlOworCWJvb2wJCWZvdW5k OworCisJZm91bmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc2Nhbi0+eHNfaGVhcGZldGNo LCAmc2Nhbi0+eHNfaGVhcHRpZCwKKwkJCQkJCQkJCSBzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwK KwkJCQkJCQkJCSAmc2Nhbi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsKKworCWlmIChm b3VuZCkKKwkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7CisK KwkvKgorCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkg ZGVhZCB0dXBsZXMsIHJlbWVtYmVyIGl0CisJICogZm9yIGxhdGVyLiAgV2UgZG8gbm90IGRvIHRo aXMgd2hlbiBpbiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlCisJICogTVZDQyB0byBk byBzby4gIFNlZSBjb21tZW50cyBpbiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgorCSAqLworCWlm ICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQorCXsKKwkJaWYgKHNjYW4tPnVzZWJhdGNo cmluZykKKwkJeworCQkJaWYgKGFsbF9kZWFkKQorCQkJCXRhYmxlYW1fdXRpbF9raWxsX3NjYW5w b3NpdGVtKHNjYW4pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRlbGwgYW1nZXR0 dXBsZS1iYXNlZCBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQKKwkJCSAq ICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4 dF90aWQpCisJCQkgKi8KKwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwkJ fQorCX0KKworCXJldHVybiBmb3VuZDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWhl YXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4K KyAqCisgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2Fu IGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKKyAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBU aGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KKyAqCisgKiBPbiBzdWNj ZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwg YW5kIHdpbGwgYmUKKyAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChvciBieSBhIGxh dGVyIGNhbGwgdG8gaW5kZXhfZW5kc2NhbikuCisgKgorICogTm90ZTogY2FsbGVyIG11c3QgY2hl Y2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKKyAqIHNj YW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBk b24ndCBoYXZlCisgKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4g dGhlIGdlbmVyYWwgY2FzZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHBnX2F0 dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAq c2xvdCkKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0 YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CisJSXRlbVBvaW50ZXIgdGlkID0gTlVMTDsKKwlib29s CQlhbGxfdmlzaWJsZSA9IGZhbHNlOworCisJZm9yICg7OykKKwl7CisJCWlmICghc2Nhbi0+eHNf aGVhcF9jb250aW51ZSkKKwkJeworCQkJLyoKKwkJCSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0 YmF0Y2ggaW5kZXggQU0gYXJlIG1hbmFnZWQgYnkgaGVhcGFtJ3MKKwkJCSAqIGluZGV4IHNjYW4g bWFuYWdlci4gIFRoaXMgZ2l2ZXMgaGVhcGFtIHRoZSBhYmlsaXR5IHRvIHJlYWQgaGVhcAorCQkJ ICogdHVwbGVzIGluIGEgZmxleGlibGUgb3JkZXIgdGhhdCBpcyBhdHR1bmVkIHRvIGJvdGggY29z dHMgYW5kCisJCQkgKiBiZW5lZml0cyBvbiB0aGUgaGVhcGFtIGFuZCB0YWJsZSBBTSBzaWRlLgor CQkJICoKKwkJCSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0dHVwbGUgaW5kZXggQU0gc2ltcGx5 IGNhbGwgdGhyb3VnaCB0bworCQkJICogaW5kZXhfZ2V0bmV4dF90aWQgdG8gZ2V0IHRoZSBuZXh0 IFRJRCByZXR1cm5lZCBieSBpbmRleCBBTS4gVGhlCisJCQkgKiBwcm9ncmVzcyBvZiB0aGUgc2Nh biB3aWxsIGJlIHVuZGVyIHRoZSBjb250cm9sIG9mIGluZGV4IEFNICh3ZQorCQkJICoganVzdCBw YXNzIGl0IHRocm91Z2ggYSBkaXJlY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IHR1cGxlIGluKSwgc28K KwkJCSAqIHdlIGNhbm5vdCByZW9yZGVyIGFueSB3b3JrLgorCQkJICovCisJCQlpZiAoc2Nhbi0+ dXNlYmF0Y2hyaW5nKQorCQkJCXRpZCA9IGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChzY2FuLCBo c2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgICAmYWxsX3Zpc2libGUpOworCQkJZWxzZQor CQkJeworCQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7CisKKwkJ CQlpZiAodGlkICE9IE5VTEwgJiYgc2Nhbi0+eHNfd2FudF9pdHVwKQorCQkJCQlhbGxfdmlzaWJs ZSA9IFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkJCSBJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCQkJCQkgJmhzY2FuLT54c192bWJ1 ZmZlcik7CisJCQl9CisKKwkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdy ZSBkb25lICovCisJCQlpZiAodGlkID09IE5VTEwpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKgor CQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlz IGluZGV4IGVudHJ5LgorCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3Vu ZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJvbQorCQkgKiB0aGUgaW5kZXguCisJCSAqLworCQlB c3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7CisJCWlmICghc2Nh bi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQkvKiBQbGFpbiBpbmRleCBzY2FuICovCisJCQlpZiAo aGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJCQkJcmV0dXJuIHRydWU7CisJ CX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogSW5kZXgtb25seSBzY2FuLgorCQkJICoKKwkJ CSAqIFdlIGNhbiBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhl YXAgcGFnZSBvbgorCQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBl dmVyeWJvZHkuICBJbiBhbnkgY2FzZSwKKwkJCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUg bm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhCisJCQkgKiBzb3VyY2UuCisJCQkgKi8KKwkJ CWlmICghYWxsX3Zpc2libGUpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBSYXRzLCB3ZSBoYXZlIHRv IHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCisJCQkJICovCisJCQkJaWYgKHNj YW4tPmluc3RydW1lbnQpCisJCQkJCXNjYW4tPmluc3RydW1lbnQtPm5oZWFwZmV0Y2hlcysrOwor CisJCQkJaWYgKCFoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKKwkJCQkJY29u dGludWU7CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCisKKwkJ CQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKworCQkJCS8qCisJCQkJICogT25seSBNVkNDIHNuYXBz aG90cyBhcmUgc3VwcG9ydGVkIHdpdGggc3RhbmRhcmQgaW5kZXgtb25seQorCQkJCSAqIHNjYW5z LCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBrZWVwIGZvbGxvd2luZyB0aGUgSE9UCisJ CQkJICogY2hhaW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzIGJlZW4gZm91bmQuICBPdGhlciBj YWxsZXJzCisJCQkJICogKGN1cnJlbnRseSBvbmx5IHNlbGZ1bmNzLmMpIHVzZSBTbmFwc2hvdE5v blZhY3V1bWFibGUsIGFuZAorCQkJCSAqIHdhbnQgdXMgdG8gYXNzdW1lIHRoYXQganVzdCBoYXZp bmcgb25lIHZpc2libGUgdHVwbGUgaW4gdGhlCisJCQkJICogaG90IGNoYWluIGlzIGFsd2F5cyBn b29kIGVub3VnaC4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoIShzY2FuLT54c19oZWFwX2NvbnRpbnVl ICYmCisJCQkJCQkgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSk7CisJCQl9CisJ CQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBkaWRuJ3QgYWNjZXNzIHRoZSBoZWFwLCBz byB3ZSdsbCBuZWVkIHRvIHRha2UgYQorCQkJCSAqIHByZWRpY2F0ZSBsb2NrIGV4cGxpY2l0bHks IGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8KKwkJCQkgKiB0aGF0IGF0IHBhZ2UgbGV2ZWwu CisJCQkJICovCisJCQkJUHJlZGljYXRlTG9ja1BhZ2UoaHNjYW4tPnhzX2Jhc2UucmVsLAorCQkJ CQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJICBzY2FuLT54 c19zbmFwc2hvdCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBSZXR1cm4gbWF0Y2hpbmcgaW5kZXgg dHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19pdHVwIChvciByZXR1cm4KKwkJCSAqIG1hdGNoaW5n IGhlYXAgdHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19oaXR1cCkuCisJCQkgKgorCQkJICogTm90 ZTogd2Ugd29uJ3QgdXN1YWxseSBoYXZlIGZldGNoZWQgYSBoZWFwIHR1cGxlIGludG8gY2FsbGVy J3MKKwkJCSAqIHRhYmxlIHNsb3QuICBUaGlzIGlzIHBlciB0aGUgdGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90IGNvbnRyYWN0CisJCQkgKiBmb3Igc2Nhbi0+eHNfd2FudF9pdHVwIGNhbGxlcnMuCisJ CQkgKi8KKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQogCiAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRp b25zIG9uIGluZGl2aWR1YWwgdHVwbGVzIGZvciBoZWFwIEFNCkBAIC03NjksNyArMTQyNyw4IEBA IGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0 aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxMOwot CQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90 QW55LCBOVUxMLCAwLCAwKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAs IE9sZEluZGV4LCBmYWxzZSwgU25hcHNob3RBbnksCisJCQkJCQkJCQlOVUxMLCAwLCAwKTsKIAkJ aW5kZXhfcmVzY2FuKGluZGV4U2NhbiwgTlVMTCwgMCwgTlVMTCwgMCk7CiAJfQogCWVsc2UKQEAg LTgwNiw3ICsxNDY1LDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRp b24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQlpZiAoaW5kZXhTY2FuICE9IE5VTEwp CiAJCXsKLQkJCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIHNsb3QpKQorCQkJaWYgKCFoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4 U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkJICAgc2xvdCkpCiAJCQkJYnJl YWs7CiAKIAkJCS8qIFNpbmNlIHdlIHVzZWQgbm8gc2NhbiBrZXlzLCBzaG91bGQgbmV2ZXIgbmVl ZCB0byByZWNoZWNrICovCkBAIC0yNjY1LDYgKzMzMjUsOCBAQCBzdGF0aWMgY29uc3QgVGFibGVB bVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4X2ZldGNoX2JlZ2luID0gaGVhcGFt X2luZGV4X2ZldGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9yZXNldCA9IGhlYXBhbV9pbmRleF9m ZXRjaF9yZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX2VuZCwK KwkuaW5kZXhfYmF0Y2hfaW5pdCA9IGhlYXBhbV9pbmRleF9iYXRjaF9pbml0LAorCS5pbmRleF9n ZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90LAogCS5pbmRleF9mZXRjaF90 dXBsZSA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZSwKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFw YW1fdHVwbGVfaW5zZXJ0LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01h a2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCmluZGV4IDZmMmUzMDYx YS4uZTZkNjgxYjQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZp bGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3 IEBAIE9CSlMgPSBcCiAJYW1hcGkubyBcCiAJYW12YWxpZGF0ZS5vIFwKIAlnZW5hbS5vIFwKLQlp bmRleGFtLm8KKwlpbmRleGFtLm8gXAorCWluZGV4YmF0Y2gubwogCiBpbmNsdWRlICQodG9wX3Ny Y2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvYW1hcGkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCmluZGV4 IGVmYTAwNzAzMC4uYWJhOWUyYjQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvYW1hcGkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYwpAQCAtNTUs NiArNTUsMTEgQEAgR2V0SW5kZXhBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91 dGluZS0+YW1yZXNjYW4gIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmFtZW5kc2NhbiAhPSBO VUxMKTsKIAorCS8qIEFzc2VydCB0aGF0IEFNIGRvZXNuJ3QgaGF2ZSBhbiBpbnZhbGlkIGNvbWJp bmF0aW9uIG9mIGNhbGxiYWNrcyAqLworCUFzc2VydChyb3V0aW5lLT5hbWtpbGxpdGVtc2JhdGNo ID09IE5VTEwgfHwgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQoKHJvdXRp bmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCkgPT0gKHJvdXRpbmUtPmFtdW5ndWFyZGJhdGNoICE9IE5V TEwpKTsKKwlBc3NlcnQocm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMIHx8IHJvdXRpbmUtPmFt cG9zcmVzZXQgPT0gTlVMTCk7CisKIAlyZXR1cm4gcm91dGluZTsKIH0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYwppbmRleCA1ZTg5Yjg2YTYuLjZlODcxNjljMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2dlbmFtLmMKQEAgLTg5LDYgKzg5LDkgQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4tPnhzX3NuYXBz aG90ID0gSW52YWxpZFNuYXBzaG90OwkvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8K IAlzY2FuLT5udW1iZXJPZktleXMgPSBua2V5czsKIAlzY2FuLT5udW1iZXJPZk9yZGVyQnlzID0g bm9yZGVyYnlzOworCXNjYW4tPnVzZWJhdGNocmluZyA9IGZhbHNlOyAvKiBzZXQgbGF0ZXIgZm9y IGFtZ2V0YmF0Y2ggY2FsbGVycyAqLworCXNjYW4tPnhzX2JpdG1hcF9iYXRjaCA9IE5VTEw7CisJ c2Nhbi0+eHNfd2FudF9pdHVwID0gZmFsc2U7IC8qIGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhp cyAqLwogCiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBrZXkgd29ya3NwYWNlIGhlcmUsIGJ1dCBpdCB3 b24ndCBnZXQgZmlsbGVkIHVudGlsIGFtcmVzY2FuLgpAQCAtMTAyLDggKzEwNSw2IEBAIFJlbGF0 aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5v cmRlcmJ5cykKIAllbHNlCiAJCXNjYW4tPm9yZGVyQnlEYXRhID0gTlVMTDsKIAotCXNjYW4tPnhz X3dhbnRfaXR1cCA9IGZhbHNlOyAvKiBtYXkgYmUgc2V0IGxhdGVyICovCi0KIAkvKgogCSAqIER1 cmluZyByZWNvdmVyeSB3ZSBpZ25vcmUga2lsbGVkIHR1cGxlcyBhbmQgZG9uJ3QgYm90aGVyIHRv IGtpbGwgdGhlbQogCSAqIGVpdGhlci4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSB4bWluIG9uIHRo ZSBwcmltYXJ5IG5vZGUgY291bGQgZWFzaWx5IGJlCkBAIC0xMjYsNiArMTI3LDEwIEBAIFJlbGF0 aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5v cmRlcmJ5cykKIAlzY2FuLT54c19oaXR1cCA9IE5VTEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0g TlVMTDsKIAorCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID0gMDsKKwlzY2FuLT5iYXRj aF90dXBsZXNfd29ya3NwYWNlID0gMDsKKwlzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQgPSAwOwor CiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTQ1NCw3ICs0NTksNyBAQCBzeXN0YWJsZV9iZWdpbnNj YW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCWVsb2coRVJST1IsICJjb2x1bW4gaXMgbm90 IGluIGluZGV4Iik7CiAJCX0KIAotCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2Nhbiho ZWFwUmVsYXRpb24sIGlyZWwsCisJCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhl YXBSZWxhdGlvbiwgaXJlbCwgZmFsc2UsCiAJCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5 cywgMCk7CiAJCWluZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVM TCwgMCk7CiAJCXN5c3NjYW4tPnNjYW4gPSBOVUxMOwpAQCAtNTE3LDcgKzUyMiw4IEBAIHN5c3Rh YmxlX2dldG5leHQoU3lzU2NhbkRlc2Mgc3lzc2NhbikKIAogCWlmIChzeXNzY2FuLT5pcmVsKQog CXsKLQkJaWYgKGluZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQorCQlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCSBzeXNzY2Fu LT5zbG90KSkKIAkJewogCQkJYm9vbAkJc2hvdWxkRnJlZTsKIApAQCAtNzE1LDcgKzcyMSw3IEBA IHN5c3RhYmxlX2JlZ2luc2Nhbl9vcmRlcmVkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAo VHJhbnNhY3Rpb25JZElzVmFsaWQoQ2hlY2tYaWRBbGl2ZSkpCiAJCWJzeXNzY2FuID0gdHJ1ZTsK IAotCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhS ZWxhdGlvbiwKKwlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24s IGluZGV4UmVsYXRpb24sIGZhbHNlLAogCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywg MCk7CiAJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAw KTsKIAlzeXNzY2FuLT5zY2FuID0gTlVMTDsKQEAgLTczNCw3ICs3NDAsNyBAQCBzeXN0YWJsZV9n ZXRuZXh0X29yZGVyZWQoU3lzU2NhbkRlc2Mgc3lzc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pCiAJSGVhcFR1cGxlCWh0dXAgPSBOVUxMOwogCiAJQXNzZXJ0KHN5c3NjYW4tPmlyZWwpOwot CWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nh bi0+c2xvdCkpCisJaWYgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2Nhbiwg ZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKIAkJaHR1cCA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVw bGUoc3lzc2Nhbi0+c2xvdCwgZmFsc2UsIE5VTEwpOwogCiAJLyogU2VlIG5vdGVzIGluIHN5c3Rh YmxlX2dldG5leHQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IDVlYjdlOTlh ZC4uNDIyN2YwOWFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhh bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTI0LDkgKzI0 LDcgQEAKICAqCQlpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZSAtIGluaXRpYWxpemUgcGFy YWxsZWwgc2NhbgogICoJCWluZGV4X3BhcmFsbGVscmVzY2FuICAtIChyZSlzdGFydCBhIHBhcmFs bGVsIHNjYW4gb2YgYW4gaW5kZXgKICAqCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwgLSBqb2lu IHBhcmFsbGVsIGluZGV4IHNjYW4KLSAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGdldCB0aGUgbmV4 dCBUSUQgZnJvbSBhIHNjYW4KLSAqCQlpbmRleF9mZXRjaF9oZWFwCQktIGdldCB0aGUgc2Nhbidz IG5leHQgaGVhcCB0dXBsZQotICoJCWluZGV4X2dldG5leHRfc2xvdAktIGdldCB0aGUgbmV4dCB0 dXBsZSBmcm9tIGEgc2NhbgorICoJCWluZGV4X2dldG5leHRfdGlkCS0gYW1nZXR0dXBsZSB0YWJs ZSBBTSBoZWxwZXIgcm91dGluZQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVz IGZyb20gYSBzY2FuCiAgKgkJaW5kZXhfYnVsa19kZWxldGUJLSBidWxrIGRlbGV0aW9uIG9mIGlu ZGV4IHR1cGxlcwogICoJCWluZGV4X3ZhY3V1bV9jbGVhbnVwCS0gcG9zdC1kZWxldGlvbiBjbGVh bnVwIG9mIGFuIGluZGV4CkBAIC0yNTUsNiArMjUzLDcgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAo UmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2NhbihS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQli b29sIHhzX3dhbnRfaXR1cCwKIAkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlJbmRleFNjYW5J bnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz KQpAQCAtMjgxLDcgKzI4MCwxMyBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0 aW9uLAogCSAqLwogCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKIAlzY2FuLT54 c19zbmFwc2hvdCA9IHNuYXBzaG90OworCXNjYW4tPk1WQ0NTY2FuID0gSXNNVkNDTGlrZVNuYXBz aG90KHNuYXBzaG90KTsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKKwlzY2FuLT54 c193YW50X2l0dXAgPSB4c193YW50X2l0dXA7CisJc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJk ID0gKHNjYW4tPk1WQ0NTY2FuICYmICF4c193YW50X2l0dXApOworCisJaWYgKGluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCisJCWluZGV4X2JhdGNoc2Nhbl9pbml0 KHNjYW4pOwogCiAJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUg Ki8KIAlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVs YXRpb24pOwpAQCAtMzEyLDYgKzMxNyw3IEBAIGluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoUmVsYXRp b24gaW5kZXhSZWxhdGlvbiwKIAkgKiB1cCBieSBSZWxhdGlvbkdldEluZGV4U2Nhbi4KIAkgKi8K IAlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OworCXNjYW4tPk1WQ0NTY2FuID0gSXNNVkND TGlrZVNuYXBzaG90KHNuYXBzaG90KTsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsK IAogCXJldHVybiBzY2FuOwpAQCAtMzczLDEzICszNzksMTYgQEAgaW5kZXhfcmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbiwKIAlBc3NlcnQobmtleXMgPT0gc2Nhbi0+bnVtYmVyT2ZLZXlzKTsKIAlB c3NlcnQobm9yZGVyYnlzID09IHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOwogCi0JLyogUmVsZWFz ZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkv KiByZXNldCB0YWJsZSBBTSBzdGF0ZSBmb3IgcmVzY2FuICovCiAJaWYgKHNjYW4tPnhzX2hlYXBm ZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAog CXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4t PnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKIAorCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJ CWluZGV4X2JhdGNoc2Nhbl9yZXNldChzY2FuKTsKKwogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbXJlc2NhbihzY2FuLCBrZXlzLCBua2V5cywKIAkJCQkJCQkJCQkJb3JkZXJieXMs IG5vcmRlcmJ5cyk7CiB9CkBAIC0zOTQsNiArNDAzLDEzIEBAIGluZGV4X2VuZHNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKQogCVNDQU5fQ0hFQ0tTOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZW5k c2Nhbik7CiAKKwkvKiBGcmVlIGNhY2hlZCBiaXRtYXAgYmF0Y2ggaWYgYW55ICovCisJaWYgKHNj YW4tPnhzX2JpdG1hcF9iYXRjaCAhPSBOVUxMKQorCXsKKwkJcGZyZWUoYmF0Y2hfYWxsb2NfYmFz ZShzY2FuLT54c19iaXRtYXBfYmF0Y2gsIHNjYW4pKTsKKwkJc2Nhbi0+eHNfYml0bWFwX2JhdGNo ID0gTlVMTDsKKwl9CisKIAkvKiBSZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykg ZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJewpAQCAt NDAxLDYgKzQxNywxMCBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJc2Nh bi0+eHNfaGVhcGZldGNoID0gTlVMTDsKIAl9CiAKKwkvKiBDbGVhbnVwIGJhdGNoaW5nLCBzbyB0 aGF0IHRoZSBBTSBjYW4gcmVsZWFzZSBwaW5zIGFuZCBzbyBvbi4gKi8KKwlpZiAoc2Nhbi0+dXNl YmF0Y2hyaW5nKQorCQlpbmRleF9iYXRjaHNjYW5fZW5kKHNjYW4pOworCiAJLyogRW5kIHRoZSBB TSdzIHNjYW4gKi8KIAlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1lbmRzY2FuKHNj YW4pOwogCkBAIC00MjIsMjQgKzQ0MiwyNSBAQCB2b2lkCiBpbmRleF9tYXJrcG9zKEluZGV4U2Nh bkRlc2Mgc2NhbikKIHsKIAlTQ0FOX0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbW1h cmtwb3MpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0YmF0Y2gpOwogCi0Jc2Nhbi0+aW5k ZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtbWFya3BvcyhzY2FuKTsKKwkvKiBPbmx5IGFtZ2V0YmF0 Y2ggaW5kZXggQU1zIHN1cHBvcnQgbWFyayBhbmQgcmVzdG9yZSAqLworCWluZGV4X2JhdGNoc2Nh bl9tYXJrX3BvcyhzY2FuKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X3Jl c3RycG9zCS0gcmVzdG9yZSBhIHNjYW4gcG9zaXRpb24KICAqCi0gKiBOT1RFOiB0aGlzIG9ubHkg cmVzdG9yZXMgdGhlIGludGVybmFsIHNjYW4gc3RhdGUgb2YgdGhlIGluZGV4IEFNLiAgU2VlCi0g KiBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCkuCisgKiBOT1RFOiB0aGlzIG9ubHkgcmVzdG9y ZXMgdGhlIGJhdGNoIHBvc2l0aW9uYWwgc3RhdGUgc2hhcmVkIGJ5IHRoZSB0YWJsZSBhbmQKKyAq IGluZGV4IEFNcy4gIFNlZSBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCkuCiAgKgogICogTk9U RTogRm9yIGhlYXAsIGluIHRoZSBwcmVzZW5jZSBvZiBIT1QgY2hhaW5zLCBtYXJrL3Jlc3RvcmUg b25seSB3b3JrcwogICogY29ycmVjdGx5IGlmIHRoZSBzY2FuJ3Mgc25hcHNob3QgaXMgTVZDQy1z YWZlOyB0aGF0IGVuc3VyZXMgdGhhdCB0aGVyZSdzIGF0CiAgKiBtb3N0IG9uZSByZXR1cm5hYmxl IHR1cGxlIGluIGVhY2ggSE9UIGNoYWluLCBhbmQgc28gcmVzdG9yaW5nIHRoZSBwcmlvcgotICog c3RhdGUgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBpbmRleCBBTSBpcyBzdWZmaWNpZW50LiAg U2luY2UgdGhlIG9ubHkKLSAqIGN1cnJlbnQgdXNlciBvZiBtYXJrL3Jlc3RvcmUgZnVuY3Rpb25h bGl0eSBpcyBub2RlTWVyZ2Vqb2luLmMsIHRoaXMKLSAqIGVmZmVjdGl2ZWx5IG1lYW5zIHRoYXQg bWVyZ2Utam9pbiBwbGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3RzLiAgVGhpcwotICog Y291bGQgYmUgZml4ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBzZWVtcyB1bmltcG9y dGFudC4KKyAqIHN0YXRlIGF0IHRoZSBzY2FuIGl0ZW0gZ3JhbnVsYXJpdHkgaXMgc3VmZmljaWVu dC4gIFNpbmNlIHRoZSBvbmx5IGN1cnJlbnQKKyAqIHVzZXIgb2YgbWFyay9yZXN0b3JlIGZ1bmN0 aW9uYWxpdHkgaXMgbm9kZU1lcmdlam9pbi5jLCB0aGlzIGVmZmVjdGl2ZWx5CisgKiBtZWFucyB0 aGF0IG1lcmdlLWpvaW4gcGxhbnMgb25seSB3b3JrIGZvciBNVkNDIHNuYXBzaG90cy4gIFRoaXMg Y291bGQgYmUKKyAqIGZpeGVkIGlmIG5lY2Vzc2FyeSwgYnV0IGZvciBub3cgaXQgc2VlbXMgdW5p bXBvcnRhbnQuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKQEAgLTQ0OCwxNiArNDY5 LDE2IEBAIGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlBc3NlcnQoSXNNVkND TGlrZVNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSk7CiAKIAlTQ0FOX0NIRUNLUzsKLQlDSEVD S19TQ0FOX1BST0NFRFVSRShhbXJlc3RycG9zKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdl dGJhdGNoKTsKIAotCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9t IHRhYmxlIGFjY2Vzc2VzICovCisJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgZm9yIHJlc2NhbiAq LwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNj YW4tPnhzX2hlYXBmZXRjaCk7CiAKLQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7IC8q IGZvciBzYWZldHkgKi8KLQlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJLyogYWxz byBub3RpZnkgdGFibGUgQU0gYW5kIGluZGV4IEFNICovCisJaW5kZXhfYmF0Y2hzY2FuX3Jlc3Rv cmVfcG9zKHNjYW4pOwogCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzdHJw b3Moc2Nhbik7CisJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5 ICovCiB9CiAKIC8qCkBAIC01NzksNiArNjAwLDkgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5k ZXhTY2FuRGVzYyBzY2FuKQogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4 X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKKwlpZiAoc2Nhbi0+dXNlYmF0Y2hy aW5nKQorCQlpbmRleF9iYXRjaHNjYW5fcmVzZXQoc2Nhbik7CisKIAkvKiBhbXBhcmFsbGVscmVz Y2FuIGlzIG9wdGlvbmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90IHByb3ZpZGVkIGJ5IEFNICovCiAJ aWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuICE9IE5V TEwpCiAJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuKHNj YW4pOwpAQCAtNTkxLDYgKzYxNSw3IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbikKICAqLwogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJl bGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJIGJvb2wgeHNfd2FudF9p dHVwLAogCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJ CSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNj IHBzY2FuKQpAQCAtNjEyLDcgKzYzNywxMyBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVs YXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCiAJICovCiAJc2Nhbi0+aGVhcFJlbGF0 aW9uID0gaGVhcHJlbDsKIAlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OworCXNjYW4tPk1W Q0NTY2FuID0gSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsKIAlzY2FuLT5pbnN0cnVtZW50 ID0gaW5zdHJ1bWVudDsKKwlzY2FuLT54c193YW50X2l0dXAgPSB4c193YW50X2l0dXA7CisJc2Nh bi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkID0gKHNjYW4tPk1WQ0NTY2FuICYmICF4c193YW50X2l0 dXApOworCisJaWYgKGluZGV4cmVsLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQorCQlp bmRleF9iYXRjaHNjYW5faW5pdChzY2FuKTsKIAogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXgg bWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhf ZmV0Y2hfYmVnaW4oaGVhcHJlbCk7CkBAIC02MjEsMTAgKzY1MiwxNCBAQCBpbmRleF9iZWdpbnNj YW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCiB9CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KLSAqIGluZGV4X2dldG5leHRfdGlkIC0gZ2V0IHRoZSBuZXh0IFRJ RCBmcm9tIGEgc2NhbgorICogaW5kZXhfZ2V0bmV4dF90aWQgLSBhbWdldHR1cGxlIGludGVyZmFj ZQogICoKICAqIFRoZSByZXN1bHQgaXMgdGhlIG5leHQgVElEIHNhdGlzZnlpbmcgdGhlIHNjYW4g a2V5cywKICAqIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgZXhpc3QuCisgKgor ICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGFibGUgQU0ncyBpbmRleF9nZXRuZXh0 X3Nsb3QgaW1wbGVtZW50YXRpb24sCisgKiBhbmQgb25seSBnaXZlbiBhbiBpbmRleCBBTSB0aGF0 IHN1cHBvcnRzIHRoZSBzaW5nbGUtdHVwbGUgYW1nZXR0dXBsZQorICogaW50ZXJmYWNlLgogICog LS0tLS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjY3LDk3ICs3MDIsNiBAQCBp bmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKQogCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0t LQotICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUK LSAqCi0gKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0 aCB0aGUgaW5kZXggVElEIG1vc3QKLSAqIHJlY2VudGx5IGZldGNoZWQgYnkgaW5kZXhfZ2V0bmV4 dF90aWQsIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMKLSAqIGV4aXN0LiAgKFRo ZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2Ugb2YgSE9UIGNo YWlucywKLSAqIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBzaG91bGQg YmUgaW1wb3NzaWJsZSBmb3IgbW9yZSB0aGFuCi0gKiBvbmUgc3VjaCB0dXBsZSB0byBleGlzdC4p Ci0gKgotICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFwIHR1cCBp cyBwaW5uZWQgKHRoZSBwaW4gd2lsbCBiZQotICogZHJvcHBlZCBpbiBhIGZ1dHVyZSBpbmRleF9n ZXRuZXh0X3RpZCwgaW5kZXhfZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4K LSAqCi0gKiBOb3RlOiBjYWxsZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVy Zm9ybSByZWNoZWNraW5nIG9mIHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8g bm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1h dGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0t LS0tLS0tLS0tLQotICovCi1ib29sCi1pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2Nh biwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JYm9vbAkJYWxsX2RlYWQgPSBmYWxzZTsKLQli b29sCQlmb3VuZDsKLQotCWZvdW5kID0gdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc2Nhbi0+eHNf aGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVhcHRpZCwKLQkJCQkJCQkJCXNjYW4tPnhzX3NuYXBzaG90 LCBzbG90LAotCQkJCQkJCQkJJnNjYW4tPnhzX2hlYXBfY29udGludWUsICZhbGxfZGVhZCk7Ci0K LQlpZiAoZm91bmQpCi0JCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRp b24pOwotCi0JLyoKLQkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3Vu ZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4Ci0JICogQU0gdG8ga2lsbCBpdHMgZW50cnkg Zm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQKLQkgKiBhbWdl dHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0aGlzIHdo ZW4gaW4KLQkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28u ICBTZWUgY29tbWVudHMgaW4KLQkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgotCSAqLwotCWlm ICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxl ID0gYWxsX2RlYWQ7Ci0KLQlyZXR1cm4gZm91bmQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0K LSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4K LSAqCi0gKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2Fu IGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKLSAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBU aGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KLSAqCi0gKiBPbiBzdWNj ZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwg YW5kIHdpbGwgYmUKLSAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGlu ZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTog Y2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2lu ZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhl cmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQg ZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAq LwotYm9vbAotaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWZvciAoOzspCi0Jewot CQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGludWUpCi0JCXsKLQkJCUl0ZW1Qb2ludGVyIHRpZDsK LQotCQkJLyogVGltZSB0byBmZXRjaCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KLQkJ CXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7Ci0KLQkJCS8qIElmIHdl J3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCi0JCQlpZiAodGlkID09IE5V TEwpCi0JCQkJYnJlYWs7Ci0KLQkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFscyh0aWQsICZzY2Fu LT54c19oZWFwdGlkKSk7Ci0JCX0KLQotCQkvKgotCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25s eSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgotCQkgKiBJZiB3ZSBk b24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJv bQotCQkgKiB0aGUgaW5kZXguCi0JCSAqLwotCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZz Y2FuLT54c19oZWFwdGlkKSk7Ci0JCWlmIChpbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QpKQot CQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKiAtLS0tLS0tLS0t LS0tLS0tCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgYXQgb25jZSBmcm9t IGFuIGluZGV4IHNjYW4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjgwNmRlZmQwZQotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTAsMCArMSw3 NTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYworICoJICBCYXRj aC1iYXNlZCBpbmRleCBzY2FuIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYW1nZXRiYXRjaCBpbnRl cmZhY2UuCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1 cmUgZm9yIGJhdGNoLWJhc2VkIGluZGV4IHNjYW5zLAorICogd2hpY2ggYWxsb3cgaW5kZXggQU1z IHRvIHJldHVybiBtdWx0aXBsZSBtYXRjaGluZyBUSURzIHBlciBwYWdlIGluIGEgc2luZ2xlCisg KiBjYWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVmZmVyIGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlIEFN LCB3aXRoIGhlbHAgZnJvbSB1cywKKyAqIGFuZCB3aXRoIGhlbHAgZnJvbSB0aGUgcmluZyBidWZm ZXIgaW5saW5lIGZ1bmN0aW9ucyBpbiByZWxzY2FuLmguICBUaGlzCisgKiBhcHByb2FjaCBlbmFi bGVzIGVmZmljaWVudCBwcmVmZXRjaGluZyBvZiB0YWJsZSBBTSBibG9ja3MgZHVyaW5nIG9yZGVy ZWQKKyAqIGluZGV4IHNjYW5zLgorICoKKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVz IGluIGluZGV4IGtleSBzcGFjZSBvcmRlci4KKyAqCisgKiBUaGVyZSdzIHRocmVlIHR5cGVzIG9m IGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZToKKyAqCisgKiAxLiBDb3JlIGJhdGNoIHNjYW4gbGlm ZWN5Y2xlIChpbmRleF9iYXRjaHNjYW5fKik6IEZ1bmN0aW9ucyB0aGF0IG1hbmFnZQorICogICAg YmF0Y2ggc2NhbiBzdGF0ZSBpbmNsdWRpbmcgaW5pdGlhbGl6YXRpb24sIHJlc2V0LCBjbGVhbnVw LCBhbmQgdGhlCisgKiAgICBtYXJrL3Jlc3RvcmUgb3BlcmF0aW9ucyBuZWVkZWQgZm9yIG1lcmdl IGpvaW5zLiAgQ2FsbGVkIGJ5IGluZGV4YW0uYworICogICAgcm91dGluZXMgdGhhdCBtYW5hZ2Ug aW5kZXggc2NhbnMgb24gYmVoYWxmIG9mIHRoZSBjb3JlIGV4ZWN1dG9yLgorICoKKyAqIDIuIFRh YmxlIEFNIHV0aWxpdGllcyAodGFibGVhbV91dGlsXyopOiBIZWxwZXIgZnVuY3Rpb25zIGNhbGxl ZCBieSB0YWJsZQorICogICAgQU1zIGR1cmluZyBhbWdldGJhdGNoIGluZGV4IHNjYW5zLiAgVGhl c2UgaGFuZGxlIGNyb3NzLWJhdGNoIGRpcmVjdGlvbgorICogICAgY2hhbmdlcywgcmVjb3JkaW5n IGRlYWQgaXRlbXMgZm9yIGEgbGF0ZXIgY2FsbCB0byBhbWtpbGxpdGVtc2JhdGNoLAorICogICAg ZnJlZWluZyBiYXRjaGVzIHdoZW4gdGhlIHRhYmxlIEFNIGlzIGRvbmUgd2l0aCB0aGVtLCBhbmQg Y2FsbGluZworICogICAgYW11bmd1YXJkYmF0Y2ggdG8gZHJvcCB0aGUgVElEIHJlY3ljbGluZyBp bnRlcmxvY2sgKHRoZSBndWFyZCB0aGF0CisgKiAgICBwcmV2ZW50cyBWQUNVVU0gZnJvbSByZWN5 Y2xpbmcgVElEcyB3aGlsZSBhIHNjYW4gaXMgaW4gZmxpZ2h0KS4KKyAqCisgKiAzLiBJbmRleCBB TSB1dGlsaXRpZXMgKGluZGV4YW1fdXRpbF8qKTogSGVscGVyIGZ1bmN0aW9ucyBjYWxsZWQgYnkg aW5kZXgKKyAqICAgIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2Uu ICBUaGVzZSBtYW5hZ2UgYmF0Y2gKKyAqICAgIGFsbG9jYXRpb24sIGluZGV4IHBhZ2UgYnVmZmVy IGxvY2sgcmVsZWFzZSwgYW5kIGJhdGNoIG1lbW9yeSByZWN5Y2xpbmcuCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVu aXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBz cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1h cGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImNvbW1vbi9pbnQu aCIKKyNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgorCitzdGF0aWMgaW50CWJhdGNoX2NvbXBhcmVf aW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CisKKy8qCisgKiBTZXRzIHVwIHRo ZSBiYXRjaCByaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHVzZSBieSBhbiBpbmRleCBzY2FuLgor ICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYWxsIG9mIHRoZSBpbmRleCByZWxhdGVkIGZpZWxk cyBpbiAnc2Nhbicgd2VyZSBhbHJlYWR5CisgKiBpbml0aWFsaXplZC4KKyAqLwordm9pZAoraW5k ZXhfYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2VydChzY2FuLT5p bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKworCXNjYW4tPmJh dGNocmluZ2J1Zi5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1h cmtQb3MudmFsaWQgPSBmYWxzZTsKKworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggPSBO VUxMOworCXNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2ggPSAwOwkvKiBpbml0aWFsIGhlYWQg YmF0Y2ggKi8KKwlzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBi YXRjaCBzdGFydHMgZW1wdHkgKi8KKwltZW1zZXQoJnNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZSwg MCwgc2l6ZW9mKHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZSkpOworCisJc2Nhbi0+dXNlYmF0Y2hy aW5nID0gdHJ1ZTsKK30KKworLyoKKyAqIFJlc2V0IHN0YXRlIHVzZWQgZm9yIGEgYmF0Y2ggaW5k ZXggc2NhbgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBz Y2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmlu Z2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRj aDsKKwlib29sCQltYXJrQmF0Y2hGcmVlZCA9IGZhbHNlOworCisJYmF0Y2hyaW5nYnVmLT5zY2Fu UG9zLnZhbGlkID0gZmFsc2U7CisJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zLnZhbGlkID0gZmFsc2U7 CisKKwkvKgorCSAqIEVuc3VyZSB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCB3b24ndCBza2lwIHRo ZSBvbGQgbWFya0JhdGNoIGluIHRoZSBsb29wCisJICogYmVsb3cKKwkgKi8KKwliYXRjaHJpbmdi dWYtPm1hcmtCYXRjaCA9IE5VTEw7CisKKwlmb3IgKHVpbnQ4IGkgPSBiYXRjaHJpbmdidWYtPmhl YWRCYXRjaDsgaSAhPSBiYXRjaHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQorCXsKKwkJSW5kZXhT Y2FuQmF0Y2ggYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGkpOworCisJCWlmIChiYXRj aCA9PSBtYXJrQmF0Y2gpCisJCQltYXJrQmF0Y2hGcmVlZCA9IHRydWU7CisKKwkJdGFibGVhbV91 dGlsX2ZyZWVfYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCWlmICghbWFya0JhdGNoRnJlZWQg JiYgdW5saWtlbHkobWFya0JhdGNoKSkKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2Nhbiwg bWFya0JhdGNoKTsKKworCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID0gMDsKKwliYXRjaHJpbmdi dWYtPm5leHRCYXRjaCA9IDA7Cit9CisKKy8qCisgKiBGcmVlIHJlc291cmNlcyBhdCBlbmQgb2Yg YmF0Y2ggaW5kZXggc2NhbgorICoKKyAqIENhbGxlZCB3aGVuIGFuIGluZGV4IHNjYW4gaXMgYmVp bmcgZW5kZWQsIHJpZ2h0IGJlZm9yZSB0aGUgb3duaW5nIHNjYW4KKyAqIGRlc2NyaXB0b3IgZ29l cyBhd2F5LiAgQ2xlYW5zIHVwIGFsbCBiYXRjaCByZWxhdGVkIHJlc291cmNlcy4KKyAqLwordm9p ZAoraW5kZXhfYmF0Y2hzY2FuX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJLyogRnJlZSBh bGwgcmVtYWluaW5nIGxvYWRlZCBiYXRjaGVzIChldmVuIG1hcmtCYXRjaCkgKi8KKwlBc3NlcnQo IXNjYW4tPnhzX2hlYXBmZXRjaCk7CisJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4pOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7CisJ CUluZGV4U2NhbkJhdGNoIGNhY2hlZCA9IHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXTsKKwor CQlpZiAoY2FjaGVkID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAoY2FjaGVkLT5kZWFk SXRlbXMpCisJCQlwZnJlZShjYWNoZWQtPmRlYWRJdGVtcyk7CisJCXBmcmVlKGJhdGNoX2FsbG9j X2Jhc2UoY2FjaGVkLCBzY2FuKSk7CisJfQorfQorCisvKgorICogU2V0IGEgbWFyayBmcm9tIHNj YW5Qb3MgcG9zaXRpb24KKyAqCisgKiBTYXZlcyB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uIGFu ZCBhc3NvY2lhdGVkIGJhdGNoIHNvIHRoYXQgdGhlIHNjYW4gY2FuCisgKiBiZSByZXN0b3JlZCB0 byB0aGlzIHBvaW50IGxhdGVyLCB2aWEgYSBjYWxsIHRvIGluZGV4X2JhdGNoc2Nhbl9yZXN0b3Jl X3Bvcy4KKyAqIFRoZSBtYXJrZWQgYmF0Y2ggaXMgcmV0YWluZWQgYW5kIG5vdCBmcmVlZCB1bnRp bCBhIG5ldyBtYXJrIGlzIHNldCBvciB0aGUKKyAqIHNjYW4gZW5kcyAob3IgdW50aWwgdGhlIG1h cmsgaXMgcmVzdG9yZWQpLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fbWFya19wb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNj YW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJh dGNocmluZ2J1Zi5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hy aW5nYnVmLT5tYXJrUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5f YmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9 IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOworCWJvb2wJCWZyZWVNYXJrQmF0Y2g7CisKKwlBc3Nl cnQoc2Nhbi0+TVZDQ1NjYW4pOworCisJLyoKKwkgKiBGcmVlIHRoZSBwcmV2aW91cyBtYXJrIGJh dGNoIChpZiBhbnkpIC0tIGJ1dCBvbmx5IGlmIGl0IGlzbid0IG91cgorCSAqIHNjYW5CYXRjaCAo ZGVmZW5zaXZlbHkgbWFrZSBzdXJlIHRoYXQgbWFya0JhdGNoIGlzbid0IHNvbWUgbGF0ZXIKKwkg KiBzdGlsbC1uZWVkZWQgYmF0Y2gsIHRvbykKKwkgKi8KKwlpZiAoIW1hcmtCYXRjaCB8fCBtYXJr QmF0Y2ggPT0gc2NhbkJhdGNoKQorCXsKKwkJLyogRGVmaW5pdGVseSBubyBtYXJrQmF0Y2ggdGhh dCB3ZSBzaG91bGQgZnJlZSBub3cgKi8KKwkJZnJlZU1hcmtCYXRjaCA9IGZhbHNlOworCX0KKwll bHNlIGlmIChsaWtlbHkoIWluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIG1hcmtQb3MtPmJh dGNoKSkpCisJeworCQkvKiBEZWZpbml0ZWx5IGhhdmUgYSBuby1sb25nZXItbG9hZGVkIG1hcmtC YXRjaCB0byBmcmVlICovCisJCWZyZWVNYXJrQmF0Y2ggPSB0cnVlOworCX0KKwllbHNlCisJewor CQkvKgorCQkgKiBJdCBsb29rcyBsaWtlIG1hcmtCYXRjaCBpcyBsb2FkZWQvc3RpbGwgbmVlZGVk IHdpdGhpbiBiYXRjaHJpbmdidWYuCisJCSAqCisJCSAqIGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVk IGluZGljYXRlcyB0aGF0IG1hcmtwb3MtPmJhdGNoIGlzIGxvYWRlZAorCQkgKiBhbHJlYWR5LCBi dXQgd2UgY2Fubm90IGZ1bGx5IHRydXN0IGl0IGhlcmUuICBJdCdzIGp1c3QgYWJvdXQKKwkJICog cG9zc2libGUgdGhhdCBtYXJrcG9zLT5iYXRjaCBmYWxscyB3aXRoaW4gYSBzaW5jZS1yZWN5Y2xl ZCByYW5nZSBvZgorCQkgKiBiYXRjaCBvZmZzZXQgbnVtYmVycyAoZm9sbG93aW5nIHVpbnQ4IG92 ZXJmbG93KS4KKwkJICoKKwkJICogTWFrZSBzdXJlIHRoYXQgbWFya0JhdGNoIHJlYWxseSBpcyBs b2FkZWQgYnkgZGlyZWN0bHkgY29tcGFyaW5nIGl0CisJCSAqIGFnYWluc3QgYWxsIGxvYWRlZCBi YXRjaGVzLiAgV2UgbXVzdCBub3QgZmFpbCB0byByZWxlYXNlIG1hcmtCYXRjaAorCQkgKiB3aGVu IG5vYm9keSBlbHNlIHdpbGwgbGF0ZXIgb24uCisJCSAqCisJCSAqIE5vdGU6IGluIHByYWN0aWNl IHdlJ3JlIHZlcnkgdW5saWtlbHkgdG8gZW5kIHVwIGhlcmUuICBJdCBpcyB2ZXJ5CisJCSAqIGF0 eXBpY2FsIGZvciBhbiBpbmRleCBzY2FuIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbWVyZ2Ugam9p biB0bworCQkgKiBob2xkIG9uIHRvIGEgbWFyayB0aGF0IHRyYWlscyB0aGUgY3VycmVudCBzY2Fu QmF0Y2ggdGhpcyBtdWNoLgorCQkgKi8KKwkJZnJlZU1hcmtCYXRjaCA9IHRydWU7CS8qIGkuZS4g aW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgbGllZCB0byB1cyAqLworCisJCWZvciAodWludDggaSA9 IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBp KyspCisJCXsKKwkJCWlmIChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGkpID09IG1hcmtCYXRjaCkK KwkJCXsKKwkJCQkvKiBpbmRleF9zY2FuX2JhdGNoX2xvYWRlZCB3YXMgcmlnaHQvbm8gb3ZlcmZs b3cgaGFwcGVuZWQgKi8KKwkJCQlmcmVlTWFya0JhdGNoID0gZmFsc2U7CisJCQkJYnJlYWs7CisJ CQl9CisJCX0KKwl9CisKKwlpZiAoZnJlZU1hcmtCYXRjaCkKKwl7CisJCS8qIEZyZWUgbWFya0Jh dGNoLCBzaW5jZSBpdCBpc24ndCBsb2FkZWQvbmVlZGVkIGZvciBiYXRjaHJpbmdidWYgKi8KKwkJ YmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2ggPSBOVUxMOyAvKiBlbHNlIGNhbGwgd29uJ3QgZnJlZSBt YXJrQmF0Y2ggKi8KKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgbWFya0JhdGNoKTsK Kwl9CisKKwkvKiBjb3B5IHRoZSBzY2FuJ3MgcG9zaXRpb24gKi8KKwliYXRjaHJpbmdidWYtPm1h cmtQb3MgPSAqc2NhblBvczsKKwliYXRjaHJpbmdidWYtPm1hcmtCYXRjaCA9IHNjYW5CYXRjaDsK K30KKworLyoKKyAqIFJlc3RvcmUgbWFyayB0byBzY2FuUG9zIHBvc2l0aW9uCisgKgorICogUmVz dG9yZXMgdGhlIHNjYW4gdG8gYSBwb3NpdGlvbiBzYXZlZCBieSBpbmRleF9iYXRjaHNjYW5fbWFy a19wb3MgZWFybGllci4KKyAqIFRoZSBzY2FuJ3MgbWFya1BvcyBiZWNvbWVzIGl0cyBzY2FuUG9z LiAgVGhlIG1hcmtlZCBiYXRjaCBpcyByZXN0b3JlZCBhcworICogdGhlIGN1cnJlbnQgc2NhbkJh dGNoIHdoZW4gbmVlZGVkLgorICoKKyAqIFdlIGp1c3QgZGlzY2FyZCBhbGwgYmF0Y2hlcyAob3Ro ZXIgdGhhbiBtYXJrQmF0Y2gvcmVzdG9yZWQgc2NhbkJhdGNoKSwKKyAqIGV4Y2VwdCB3aGVuIG1h cmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guCisgKi8KK3Zv aWQKK2luZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJ QmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJh dGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7CisJ QmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHJpbmdidWYtPm1hcmtQb3M7CisJSW5k ZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7CisJSW5kZXhT Y2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRj aCk7CisKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCUFzc2VydChzY2FuLT54c19oZWFwZmV0 Y2gpOworCUFzc2VydChtYXJrUG9zLT52YWxpZCk7CisKKwlpZiAoc2NhbkJhdGNoID09IG1hcmtC YXRjaCkKKwl7CisJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVlZG4ndCBj aGFuZ2UgYmF0Y2hyaW5nYnVmICovCisJCUFzc2VydChzY2FuUG9zLT5iYXRjaCA9PSBtYXJrUG9z LT5iYXRjaCk7CisKKwkJc2NhblBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CisJCXJldHVybjsK Kwl9CisKKwkvKgorCSAqIG1hcmtCYXRjaCBpcyBiZWhpbmQgc2NhbkJhdGNoLCBhbmQgc28gbXVz dCBub3QgYmUgc2F2ZWQgaW4gcmluZyBidWZmZXIKKwkgKiBhbnltb3JlLiAgV2UgaGF2ZSB0byBk ZWFsIHdpdGggcmVzdG9yaW5nIHRoZSBtYXJrIHRoZSBoYXJkIHdheTogYnkKKwkgKiBpbnZhbGlk YXRpbmcgYWxsIG90aGVyIGxvYWRlZCBiYXRjaGVzLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBj YXNlCisJICogd2hlcmUgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgYW5kIHRoZSBzY2FuIGFj dHVhbGx5IGNyb3NzZXMKKwkgKiBiYXRjaC9pbmRleCBwYWdlIGJvdW5kYXJpZXMgKHNlZSB0YWJs ZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlKS4KKwkgKgorCSAqIEZpcnN0LCBmcmVlIGFsbCBiYXRj aGVzIHRoYXQgYXJlIHN0aWxsIGluIHRoZSByaW5nIGJ1ZmZlci4KKwkgKi8KKwlmb3IgKHVpbnQ4 IGkgPSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaDsgaSAhPSBiYXRjaHJpbmdidWYtPm5leHRCYXRj aDsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNj YW4sIGkpOworCisJCUFzc2VydChiYXRjaCAhPSBtYXJrQmF0Y2gpOworCisJCXRhYmxlYW1fdXRp bF9mcmVlX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisKKwkvKgorCSAqIE5leHQgImFwcGVuZCIg c3RhbmRhbG9uZSBtYXJrQmF0Y2gsIG1ha2luZyB0aGUgcmluZyBidWZmZXIgYXBwZWFyIGFzIGlm CisJICogaXQgd2FzIHRoZSBmaXJzdCBiYXRjaCBldmVyIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2gg Zm9yIHRoZSBzY2FuCisJICovCisJbWFya1Bvcy0+YmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+ c2NhblBvcyA9ICptYXJrUG9zOworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gYmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsKKwlpbmRleF9zY2FuX2JhdGNoX2FwcGVu ZChzY2FuLCBtYXJrQmF0Y2gpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJhdGNo cmluZ2J1Zi0+c2NhblBvcy5iYXRjaCkgPT0gbWFya0JhdGNoKTsKKworCS8qCisJICogRmluYWxs eSwgY2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBrbm93IHRvIGludmFsaWRhdGUgYW55 IHByaXZhdGUKKwkgKiBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3Mg cHJvZ3Jlc3MKKwkgKi8KKwlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9z cmVzZXQpCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4s IG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIE5vdGU6IG1hcmtCYXRjaC5kZWFkSXRlbXNbXSBtaWdo dCBhbHJlYWR5IGNvbnRhaW4gZGVhZCBpdGVtcywgYW5kIG1pZ2h0CisJICogeWV0IGhhdmUgbW9y ZSBkZWFkIGl0ZW1zIHNhdmVkLiAgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2ggaXMgcHJlcGFyZWQK KwkgKiBmb3IgdGhhdC4KKwkgKi8KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCQl1dGlsaXR5IGZ1bmN0 aW9ucyBjYWxsZWQgYnkgdGFibGUgQU1zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEhhbmRs ZSBjcm9zcy1iYXRjaCBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24KKyAqCisgKiBDYWxsZWQgYnkg dGFibGUgQU0gd2hlbiBpdHMgc2NhbiBjaGFuZ2VzIGRpcmVjdGlvbiBpbiBhIHdheSB0aGF0Cisg KiBuZWNlc3NpdGF0ZXMgYmFja2luZyB0aGUgc2NhbiB1cCB0byBhbiBpbmRleCBwYWdlIG9yaWdp bmFsbHkgYXNzb2NpYXRlZAorICogd2l0aCBhIG5vdy1mcmVlZCBiYXRjaC4KKyAqCisgKiBXaGVu IHdlIHJldHVybiwgYmF0Y2hyaW5nYnVmIHdpbGwgb25seSBjb250YWluIG9uZSBiYXRjaCAodGhl IGN1cnJlbnQKKyAqIGhlYWRCYXRjaC9zY2FuQmF0Y2gpLiAgQ2FsbGVyIGNhbiB0aGVuIHNhZmVs eSBwYXNzIHRoaXMgYmF0Y2ggdG8gYW1nZXRiYXRjaAorICogdG8gZGV0ZXJtaW5lIHdoaWNoIGJh dGNoIGNvbWVzIG5leHQgaW4gdGhlIG5ldyBzY2FuIGRpcmVjdGlvbi4gIEZyb20gdGhhdAorICog cG9pbnQgb24gYmF0Y2hyaW5nYnVmIHdpbGwgbG9vayBhcyBpZiBvdXIgbmV3IHNjYW4gZGlyZWN0 aW9uIGhhZCBiZWVuIHVzZWQKKyAqIGZyb20gdGhlIHN0YXJ0LiAgVGhpcyBhcHByb2FjaCBpc24n dCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBidXQgaXQgd29ya3MKKyAqIHdlbGwgZW5vdWdoIGZv ciB3aGF0IG91Z2h0IHRvIGJlIGEgcmVsYXRpdmVseSByYXJlIG9jY3VycmVuY2UuCisgKi8KK3Zv aWQKK3RhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKQorewor CUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlJ bmRleFNjYW5CYXRjaCBoZWFkOworCisJLyoKKwkgKiBSZWxlYXNlIGJhdGNoZXMgc3RhcnRpbmcg ZnJvbSB0aGUgY3VycmVudCAidGFpbCIgYmF0Y2gsIHdvcmtpbmcKKwkgKiBiYWNrd2FyZHMgdW50 aWwgdGhlIGN1cnJlbnQgaGVhZCBiYXRjaCAod2hpY2ggbXVzdCBhbHNvIGJlIHRoZSBjdXJyZW50 CisJICogc2NhbkJhdGNoKSBpcyB0aGUgb25seSBiYXRjaCBoYXNuJ3QgYmVlbiBmcmVlZAorCSAq LworCXdoaWxlIChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID4gMSkKKwl7CisJCUluZGV4 U2NhbkJhdGNoIHRhaWwgPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sCisJCQkJCQkJCQkJCSAgIGJh dGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMSk7CisKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2go c2NhbiwgdGFpbCk7CisJCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoLS07CisJfQorCisJLyogc2Nh bkJhdGNoIGlzIG5vdyB0aGUgb25seSBiYXRjaCBzdGlsbCBsb2FkZWQgKi8KKwlBc3NlcnQoYmF0 Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKTsKKwor CS8qCisJICogRGVhbCB3aXRoIGluZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFj a3MgdGhlIHByb2dyZXNzIG9mIHRoZQorCSAqIHNjYW4uICBEbyB0aGlzIGJ5IGZsaXBwaW5nIHRo ZSBiYXRjaC1sZXZlbCBzY2FuIGRpcmVjdGlvbiwgYW5kIHRoZW4KKwkgKiBjYWxsaW5nIHRoZSBp bmRleCBBTSdzIGFtcG9zcmVzZXQuCisJICovCisJaGVhZCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nh biwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCWhlYWQtPmRpciA9IC1oZWFkLT5kaXI7CisJ aWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5p bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBoZWFkKTsKK30KKworLyoK KyAqIFJlY29yZCB0aGF0IHNjYW5Qb3MgaXRlbSBpcyBkZWFkCisgKgorICogUmVjb3JkcyBhbiBv ZmZzZXQgdG8gdGhlIGN1cnJlbnQgc2NhbkJhdGNoL3NjYW5Qb3MgaXRlbSwgc2F2aW5nIGl0IGlu CisgKiBzY2FuQmF0Y2gncyBkZWFkSXRlbXMgYXJyYXkuICBUaGUgaXRlbXMnIGluZGV4IHR1cGxl cyB3aWxsIGxhdGVyIGJlCisgKiBtYXJrZWQgTFBfREVBRCB3aGVuIGN1cnJlbnQgc2NhbkJhdGNo IGlzIGZyZWVkLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbShJbmRl eFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5i YXRjaHJpbmdidWYuc2NhblBvczsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9z Y2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCWlmIChzY2FuQmF0Y2gtPmRlYWRJ dGVtcyA9PSBOVUxMKQorCQlzY2FuQmF0Y2gtPmRlYWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQs IHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCWlmIChzY2FuQmF0Y2gtPm51bURlYWQgPCBzY2FuLT5t YXhpdGVtc2JhdGNoKQorCQlzY2FuQmF0Y2gtPmRlYWRJdGVtc1tzY2FuQmF0Y2gtPm51bURlYWQr K10gPSBzY2FuUG9zLT5pdGVtOworfQorCisvKgorICogUmVsZWFzZSByZXNvdXJjZXMgYXNzb2Np YXRlZCB3aXRoIGEgYmF0Y2gKKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0ncyBvcmRlcmVkIGlu ZGV4IHNjYW4gaW1wbGVtZW50YXRpb24gd2hlbiBpdCBpcyBmaW5pc2hlZAorICogd2l0aCBhIGJh dGNoIGFuZCB3aXNoZXMgdG8gcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgorICoKKyAqIFdlIGNhbGwg YW11bmd1YXJkYmF0Y2ggdG8gZHJvcCB0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKGUuZy4g YnVmZmVyCisgKiBwaW4pIHdoZW4gaXQgaGFzbid0IGJlZW4gZHJvcHBlZCB5ZXQuICBGb3IgcGxh aW4gTVZDQyBzY2FucyAod2hlcmUKKyAqIGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBzZXQpLCB0 aGUgaW50ZXJsb2NrIHdhcyBhbHJlYWR5IGRyb3BwZWQgZWFnZXJseQorICogaW4gaW5kZXhhbV91 dGlsX2JhdGNoX3VubG9jaywgc28gd2Ugc2tpcCB0aGUgYW11bmd1YXJkYmF0Y2ggY2FsbCBoZXJl LgorICogSW5kZXgtb25seSBzY2FucyBtdXN0IGRlbGF5IGRyb3BwaW5nIHRoZSBpbnRlcmxvY2sg dW50aWwgdmlzaWJpbGl0eSBpcworICogcmVzb2x2ZWQgZm9yIGFsbCBpdGVtcyBpbiB0aGUgYmF0 Y2gsIHNvIGFtdW5ndWFyZGJhdGNoIG1heSBzdGlsbCBuZWVkIHRvCisgKiBhY3QgaGVyZS4gIEZv ciBub24tTVZDQyBzbmFwc2hvdCBzY2FucywgdGhlIGludGVybG9jayBpcyBhbHdheXMgaGVsZAor ICogdW50aWwgYW11bmd1YXJkYmF0Y2ggZHJvcHMgaXQgaGVyZSAtLSB0aGlzIGlzIHRoZSBvbmx5 IHBsYWNlIHdpbGxpbmcgdG8KKyAqIHVuZ3VhcmQgYSBub24tTVZDQyBzY2FuJ3MgYmF0Y2guCisg KgorICogV2hlbiB0aGUgYmF0Y2ggaGFzIGRlYWQgaXRlbXMgKG51bURlYWQgPiAwKSBhbmQgdGhl IGluZGV4IEFNIHByb3ZpZGVzIGFuCisgKiBhbWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNrLCB3ZSBj YWxsIGl0IHRvIHNldCBMUF9ERUFEIGJpdHMgaW4gdGhlIGluZGV4CisgKiBwYWdlLiAgV2UgYWx3 YXlzIHJlY3ljbGUgdGhlIGJhdGNoIG1lbW9yeSB2aWEgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2UuCisgKgorICogTm90ZTogQ2FsbGluZyBoZXJlIHdoZW4gJ2JhdGNoJyBpcyBhbHNvIGJhdGNo cmluZ2J1Zi5tYXJrQmF0Y2ggaXMgYSBuby1vcC4KKyAqIENhbGxlcnMgdGhhdCBkb24ndCB3YW50 IHRoaXMgc2hvdWxkIHNldCBiYXRjaHJpbmdidWYubWFya0JhdGNoIHRvIE5VTEwKKyAqIGJlZm9y ZSBjYWxsaW5nIHVzLiAgTm90ZSB0aGF0IG1hcmtCYXRjaCBoYXMgdG8gYmUgZXhwbGljaXRseSBm cmVlZC4KKyAqLwordm9pZAordGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBkb24ndCBmcmVlIGNhbGxlcidzIGJh dGNoIGlmIGl0IGlzIHNjYW4ncyBjdXJyZW50IG1hcmtCYXRjaCAqLworCWlmIChiYXRjaCA9PSBz Y2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoKQorCQlyZXR1cm47CisKKwkvKiBEcm9wIFRJRCBy ZWN5Y2xpbmcgaW50ZXJsb2NrIChlLmcuLCBidWZmZXIgcGluKSB2aWEgYW11bmd1YXJkYmF0Y2gg Ki8KKwlpZiAoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCkKKwkJdGFibGVhbV91dGlsX3Vu Z3VhcmRfYmF0Y2goc2NhbiwgYmF0Y2gpOworCisJLyoKKwkgKiBMZXQgdGhlIGluZGV4IEFNIHNl dCBMUF9ERUFEIGJpdHMgaW4gdGhlIGluZGV4IHBhZ2UsIGlmIGFwcGxpY2FibGUuCisJICoKKwkg KiBiYXRjaC5kZWFkSXRlbXNbXSBpcyBub3cgaW4gd2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4gcmV0 dXJuZWQgaXRlbXMgaW4uCisJICogV2UgbWlnaHQgaGF2ZSBldmVuIHNhdmVkIHRoZSBzYW1lIGl0 ZW0vVElEIHR3aWNlLgorCSAqCisJICogU29ydCBhbmQgdW5pcXVlLWlmeSBkZWFkSXRlbXNbXS4g IFRoYXQgd2F5IHRoZSBpbmRleCBBTSBjYW4gc2FmZWx5CisJICogYXNzdW1lIHRoYXQgaXRlbXMg d2lsbCBhbHdheXMgYmUgaW4gdGhlaXIgb3JpZ2luYWwgaW5kZXggcGFnZSBvcmRlci4KKwkgKi8K KwlpZiAoYmF0Y2gtPm51bURlYWQgPiAwICYmCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2lu ZGFtLT5hbWtpbGxpdGVtc2JhdGNoICE9IE5VTEwpCisJeworCQlpZiAoYmF0Y2gtPm51bURlYWQg PiAxKQorCQl7CisJCQlxc29ydChiYXRjaC0+ZGVhZEl0ZW1zLCBiYXRjaC0+bnVtRGVhZCwgc2l6 ZW9mKGludCksCisJCQkJICBiYXRjaF9jb21wYXJlX2ludCk7CisJCQliYXRjaC0+bnVtRGVhZCA9 IHF1bmlxdWUoYmF0Y2gtPmRlYWRJdGVtcywgYmF0Y2gtPm51bURlYWQsCisJCQkJCQkJCQkgc2l6 ZW9mKGludCksIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJfQorCisJCXNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbWtpbGxpdGVtc2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisKKwkvKgor CSAqIFVzZSBjYWNoZSwganVzdCBsaWtlIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlIGRvZXMg aXQgKHVubGVzcyBzY2FuIGlzCisJICogc2h1dHRpbmcgZG93bikKKwkgKi8KKwlpZiAoc2Nhbi0+ eHNfaGVhcGZldGNoKQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hF X0JBVENIRVM7IGkrKykKKwkJeworCQkJaWYgKHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXSA9 PSBOVUxMKQorCQkJeworCQkJCS8qIGZvdW5kIGVtcHR5IHNsb3QsIHdlJ3JlIGRvbmUgKi8KKwkJ CQlzY2FuLT5iYXRjaHJpbmdidWYuY2FjaGVbaV0gPSBiYXRjaDsKKwkJCQlyZXR1cm47CisJCQl9 CisJCX0KKwl9CisKKwlpZiAoYmF0Y2gtPmRlYWRJdGVtcykKKwkJcGZyZWUoYmF0Y2gtPmRlYWRJ dGVtcyk7CisJcGZyZWUoYmF0Y2hfYWxsb2NfYmFzZShiYXRjaCwgc2NhbikpOworfQorCisvKgor ICogRHJvcCB0aGUgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayB2aWEgYW11bmd1YXJk YmF0Y2gKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRy b3Agd2hhdGV2ZXIgaW50ZXJsb2NrIHRoZSBpbmRleAorICogQU0gaG9sZHMgdG8gcHJldmVudCB1 bnNhZmUgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSAodHlwaWNhbGx5IGEKKyAq IGJ1ZmZlciBwaW4gb24gdGhlIGJhdGNoJ3MgaW5kZXggcGFnZSBpbiBiYXRjaCdzIG9wYXF1ZSBh cmVhKS4KKyAqCisgKiBOb3RlOiBhbXVuZ3VhcmRiYXRjaCBtdXN0IGJlIGlkZW1wb3RlbnQgb24g dGhlIGluZGV4IEFNIHNpZGUgLS0gaXQgbWF5IGJlCisgKiBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ug Zm9yIHRoZSBzYW1lIGJhdGNoLCBhbmQgbXVzdCBkbyBub3RoaW5nIGlmIHRoZQorICogaW50ZXJs b2NrIGhhcyBhbHJlYWR5IGJlZW4gZHJvcHBlZC4KKyAqLwordm9pZAordGFibGVhbV91dGlsX3Vu Z3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sK KwkvKiBPbmx5IHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBkdXJpbmcgIWJhdGNoSW1tZWRpYXRlVW5n dWFyZCBzY2FucyAqLworCUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKwor CXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXVuZ3VhcmRiYXRjaChzY2FuLCBiYXRj aCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJdXRpbGl0eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFt Z2V0YmF0Y2ggaW5kZXggQU1zCisgKgorICogVGhlc2UgZnVuY3Rpb25zIG1hbmFnZSBiYXRjaCBh bGxvY2F0aW9uLCB1bmxvY2svcGluIG1hbmFnZW1lbnQsIGFuZCBiYXRjaAorICogcmVzb3VyY2Ug cmVjeWNsaW5nLiAgSW5kZXggQU1zIGltcGxlbWVudGluZyBhbWdldGJhdGNoIHNob3VsZCB1c2Ug dGhlc2UKKyAqIHJhdGhlciB0aGFuIG1hbmFnaW5nIGJ1ZmZlcnMgZGlyZWN0bHkuCisgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworLyoKKyAqIFVubG9jayBiYXRjaCdzIGluZGV4IHBhZ2UgYnVmZmVyIGxvY2sK KyAqCisgKiBVbmxvY2tzIHRoZSBnaXZlbiBidWZmZXIgaW4gcHJlcGFyYXRpb24gZm9yIGFtZ2V0 YmF0Y2ggcmV0dXJuaW5nIGl0ZW1zCisgKiBzYXZlZCBpbiB0aGF0IGJhdGNoLiAgUGVyZm9ybXMg ZXh0cmEgc3RlcHMgcmVxdWlyZWQgYnkgYW1nZXRiYXRjaCBjYWxsZXJzCisgKiBpbiBwYXNzaW5n LgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYSBiYXRjaCBoYXMgb25lIG9yIG1vcmUgbWF0 Y2hpbmcgaXRlbXMgdG8gcmV0dXJuIHVzaW5nCisgKiBhbWdldGJhdGNoIChvciBmb3IgYW1nZXRi aXRtYXAgdG8gbG9hZCBpbnRvIGl0cyBiaXRtYXAgb2YgbWF0Y2hpbmcgVElEcykuCisgKiBXaGVu IGFuIGluZGV4IHBhZ2UgaGFzIG5vIG1hdGNoZXMsIGl0J3MgYWx3YXlzIHNhZmUgZm9yIGluZGV4 IEFNcyB0byBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIGZvciB0aGVtc2VsdmVz LgorICoKKyAqIE5vdGU6IEl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4IEFNcyB0aGF0IGltcGxl bWVudCBib3RoIGFtZ2V0YmF0Y2ggYW5kCisgKiBhbWdldGJpdG1hcCB0byBjb25zaXN0ZW50bHkg dXNlIHRoZSBzYW1lIGJhdGNoIG1hbmFnZW1lbnQgYXBwcm9hY2gsIHNpbmNlCisgKiB0aGF0IGF2 b2lkcyBpbnRyb2R1Y2luZyBzcGVjaWFsIGNhc2VzIHRvIGxvd2VyLWxldmVsIGNvZGUuICBXZSBk cm9wIGJvdGgKKyAqIHRoZSBsb2NrIGFuZCB0aGUgcGluIG9uIGJhdGNoJ3MgcGFnZSBvbiBiZWhh bGYgb2YgYW1nZXRiaXRtYXAgY2FsbGVycy4KKyAqCisgKiBGb3IgYW1nZXRiYXRjaCBjYWxsZXJz LCB3aGVuIGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBzZXQgKHBsYWluIE1WQ0MKKyAqIHNjYW5z KSwgd2UgYWxzbyByZWxlYXNlIHRoZSBwaW4gaGVyZSAodGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJs b2NrKSwgc28KKyAqIHRoYXQgbm8gbGF0ZXIgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgd2lsbCBi ZSBuZWVkZWQuICBPdGhlcndpc2UgdGhlIHRhYmxlCisgKiBBTSB3aWxsIGNhbGwgYW11bmd1YXJk YmF0Y2ggbGF0ZXIgd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgaW50ZXJsb2NrLgorICoKKyAq IEluZGV4IEFNcyB3aG9zZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayBpcyBub3QganVzdCBhIGJ1 ZmZlciBwaW4sIG9yIHdob3NlCisgKiBhbXVuZ3VhcmRiYXRjaCBkb2VzIG5vdCBzaW1wbHkgcmVs ZWFzZSBhIHBpbiwgYXJlIG5vdCBvYmxpZ2F0ZWQgdG8gdXNlIHRoaXMKKyAqIGZ1bmN0aW9uLiAg VGhleSBjYW4gaW1wbGVtZW50IHRoZWlyIG93biBlcXVpdmFsZW50LgorICovCit2b2lkCitpbmRl eGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gsIEJ1ZmZlciBidWYpCit7CisJLyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBvciBtb3JlIG1h dGNoaW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNzZXJ0KGJhdGNoLT5maXJz dEl0ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwlp ZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJLyogYW1nZXRiYXRjaCAobm90IGFtZ2V0Yml0 bWFwKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKwor CQkvKgorCQkgKiBIYXZlIHRvIHNldCBiYXRjaC0+bHNuIHNvIHRoYXQgYW1raWxsaXRlbXNiYXRj aCBoYXMgYSB3YXkgdG8gZGV0ZWN0CisJCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5 Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4KKwkJICogcGxhY2UuICBJdCdsbCBvbmx5 IGJlIHNhZmUgdG8gc2V0IGFueSBpbmRleCB0dXBsZSBMUF9ERUFEIGJpdHMgd2hlbgorCQkgKiB0 aGUgcGFnZSBMU04gaGFzbid0IGFkdmFuY2VkLgorCQkgKgorCQkgKiBQbGFpbiBNVkNDIHNjYW5z IChiYXRjaEltbWVkaWF0ZVVuZ3VhcmQpIGFsc28gcmVsZWFzZSB0aGUgcGluIG5vdywKKwkJICog ZHJvcHBpbmcgdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHNvIHRoYXQgbm8gYW11bmd1YXJk YmF0Y2gKKwkJICogY2FsbGJhY2sgd2lsbCBiZSBuZWVkZWQgbGF0ZXIuICBUaGUgaW5kZXggQU0g Y2FsbGVyIG11c3QgY2xlYXIgaXRzCisJCSAqIG93biBvcGFxdWUgYnVmIGZpZWxkIGFmdGVyIHdl IHJldHVybi4KKwkJICoKKwkJICogTm9uLWltbWVkaWF0ZS11bmd1YXJkIHNjYW5zIHJldGFpbiB0 aGUgcGluOyB0aGUgdGFibGUgQU0gd2lsbCBjYWxsCisJCSAqIGFtdW5ndWFyZGJhdGNoIHRvIGRy b3AgdGhlIGludGVybG9jayB3aGVuIHJlYWR5LgorCQkgKi8KKwkJYmF0Y2gtPmxzbiA9IEJ1ZmZl ckdldExTTkF0b21pYyhidWYpOworCQlpZiAoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKQor CQl7CisJCQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJCVVubG9ja1Jl bGVhc2VCdWZmZXIoYnVmKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGp1c3QgZHJvcCB0aGUg bG9jayAoaG9sZCBvbiB0byBpbnRlcmxvY2sgcGluKSAqLworCQkJVW5sb2NrQnVmZmVyKGJ1Zik7 CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAgKG5vdCBhbWdldGJhdGNoKSBj YWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKKworCQkvKiBk cm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihi dWYpOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGJhdGNoCisgKgorICogVXNlZCBi eSBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIChib3RoIGR1cmlu ZyBhbWdldGJhdGNoCisgKiBhbmQgYW1nZXRiaXRtYXAgc2NhbnMpLgorICoKKyAqIFJldHVybnMg SW5kZXhTY2FuQmF0Y2ggd2l0aCBzcGFjZSB0byBmaXQgc2Nhbi0+bWF4aXRlbXNiYXRjaC1tYW55 CisgKiBCYXRjaE1hdGNoaW5nSXRlbSBlbnRyaWVzLiAgVGhpcyB3aWxsIGVpdGhlciBiZSBhIG5l d2x5IGFsbG9jYXRlZCBiYXRjaCwgb3IKKyAqIGEgYmF0Y2ggcmVjeWNsZWQgZnJvbSB0aGUgY2Fj aGUgbWFuYWdlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4gIFNlZQorICogY29tbWVu dHMgYWJvdmUgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuCisgKgorICogSG91c2VrZWVwaW5n IGZpZWxkcyAoYnVmLCBrbm93bkVuZEJhY2t3YXJkL0ZvcndhcmQsIGZpcnN0SXRlbSwgbGFzdEl0 ZW0sCisgKiBudW1EZWFkLCBkZWFkSXRlbXMsIGN1cnJUdXBsZXMpIGFyZSBpbml0aWFsaXplZCBo ZXJlLiAgVGhlIHRhYmxlIEFNJ3MKKyAqIGJhdGNoX2luaXQgY2FsbGJhY2sgaXMgaW52b2tlZCBo ZXJlIHRvIGluaXRpYWxpemUgdGhlIHRhYmxlIEFNIG9wYXF1ZSBhcmVhLgorICogVGhlIGluZGV4 IEFNIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZmlsbGluZyBpbiBpdHMgcGVyLWJhdGNoIG9w YXF1ZQorICogZmllbGRzIGFuZCB0aGUgbWF0Y2hpbmcgaXRlbXNbXSBhcnJheS4KKyAqCisgKiBP bmNlIHBvcHVsYXRlZCwgY2FsbGVyIGVpdGhlciBwYXNzZXMgdGhlIGJhdGNoIHRvIGluZGV4YW1f dXRpbF9iYXRjaF91bmxvY2sKKyAqIChhaGVhZCBvZiBhbWdldGJhdGNoIHJldHVybmluZyBpdCks IG9yIHRvIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlICh3aGVuCisgKiB0aGUgcGFnZSBoYWQg bm8gbWF0Y2hlcykuCisgKi8KK0luZGV4U2NhbkJhdGNoCitpbmRleGFtX3V0aWxfYmF0Y2hfYWxs b2MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gTlVMTDsK Kwlib29sCQluZXdfYWxsb2MgPSBmYWxzZTsKKworCS8qCisJICogTGF6aWx5IGNvbXB1dGUgYmF0 Y2hfdGFibGVfb2Zmc2V0IG9uIGZpcnN0IGFsbG9jYXRpb24uICBUaGlzIGNvbWJpbmVzCisJICog dGhlIHRhYmxlIEFNIGFuZCBpbmRleCBBTSBvcGFxdWUgc2l6ZXMgaW50byBhIHNpbmdsZSBvZmZz ZXQgdGhhdCBjYW4gYmUKKwkgKiB1c2VkIHRvIGZpbmQgdGhlIHRhYmxlIEFNIG9wYXF1ZSBhcmVh IChhbmQgdGhlIHRydWUgYWxsb2NhdGlvbiBiYXNlKQorCSAqIGZyb20gdGhlIGJhdGNoIHBvaW50 ZXIuCisJICovCisJaWYgKHNjYW4tPmJhdGNoX3RhYmxlX29mZnNldCA9PSAwICYmCisJCShzY2Fu LT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA+IDAgfHwKKwkJIChzY2FuLT54c19oZWFwZmV0Y2gg JiYgc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9vcGFxdWVfc2l6ZSA+IDApKSkKKwl7CisJCXVp bnQxNgkJdGFibGVfb3BhcXVlID0gc2Nhbi0+eHNfaGVhcGZldGNoID8KKwkJCXNjYW4tPnhzX2hl YXBmZXRjaC0+YmF0Y2hfb3BhcXVlX3NpemUgOiAwOworCisJCXNjYW4tPmJhdGNoX3RhYmxlX29m ZnNldCA9IHRhYmxlX29wYXF1ZSArCisJCQlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTsK Kwl9CisKKwkvKiBGaXJzdCBsb29rIGZvciBhbiBleGlzdGluZyBiYXRjaCBmcm9tIHRoZSBjYWNo ZSAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8 IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQl7CisJCQlpZiAoc2Nhbi0+YmF0Y2hy aW5nYnVmLmNhY2hlW2ldICE9IE5VTEwpCisJCQl7CisJCQkJLyogUmV0dXJuIGNhY2hlZCB1bnJl ZmVyZW5jZWQgYmF0Y2ggKi8KKwkJCQliYXRjaCA9IHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtp XTsKKwkJCQlzY2FuLT5iYXRjaHJpbmdidWYuY2FjaGVbaV0gPSBOVUxMOworCQkJCWJyZWFrOwor CQkJfQorCQl9CisJfQorCWVsc2UgaWYgKHNjYW4tPnhzX2JpdG1hcF9iYXRjaCAhPSBOVUxMKQor CXsKKwkJLyoKKwkJICogUmV1c2UgY2FjaGVkIGJhdGNoIGZyb20gcHJpb3IgYW1nZXRiaXRtYXAg aXRlcmF0aW9uLiAgVGhpcyBwYXRoIGlzCisJCSAqIGhpdCBvbiBldmVyeSBhbWdldGJpdG1hcCBj YWxsIGhlcmUgYWZ0ZXIgdGhlIHNjYW4ncyBmaXJzdC4KKwkJICovCisJCWJhdGNoID0gc2Nhbi0+ eHNfYml0bWFwX2JhdGNoOworCQlzY2FuLT54c19iaXRtYXBfYmF0Y2ggPSBOVUxMOworCX0KKwor CWlmICghYmF0Y2gpCisJeworCQlTaXplCQlwcmVmaXhfc3o7CisJCVNpemUJCWJhc2Vfc3o7CisJ CVNpemUJCXRyYWlsaW5nX3N6OworCQlTaXplCQlhbGxvY3N6OworCQljaGFyCSAgICpyYXc7CisK KwkJLyogQU0gb3BhcXVlIGFyZWFzIGJlZm9yZSB0aGUgYmF0Y2ggcG9pbnRlciAqLworCQlwcmVm aXhfc3ogPSBzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQ7CisKKwkJLyogSW5kZXhTY2FuQmF0Y2hE YXRhIGhlYWRlciArIGl0ZW1zW10gKi8KKwkJYmFzZV9zeiA9IG9mZnNldG9mKEluZGV4U2NhbkJh dGNoRGF0YSwgaXRlbXMpICsKKwkJCXNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBzY2FuLT5t YXhpdGVtc2JhdGNoOworCisJCS8qCisJCSAqIFRyYWlsaW5nIGRhdGEgYWZ0ZXIgaXRlbXNbXTog dGFibGUgQU0gcGVyLWl0ZW0gZGF0YSAoZS5nLiB2aXNJbmZvKQorCQkgKiBhbmQgY3VyclR1cGxl cyBpbmRleCBBTSB0dXBsZSB3b3Jrc3BhY2UuCisJCSAqLworCQl0cmFpbGluZ19zeiA9IDA7CisJ CWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gg JiYKKwkJCQlzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgPiAwKQorCQkJ CXRyYWlsaW5nX3N6ICs9IE1BWEFMSUdOKHNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfcGVyX2l0 ZW1fc2l6ZSAqCisJCQkJCQkJCQkJc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJCQl0cmFpbGluZ19z eiArPSBzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlOworCQl9CisKKwkJYWxsb2NzeiA9IHBy ZWZpeF9zeiArIE1BWEFMSUdOKGJhc2Vfc3opICsgdHJhaWxpbmdfc3o7CisJCXJhdyA9IHBhbGxv YyhhbGxvY3N6KTsKKwkJYmF0Y2ggPSAoSW5kZXhTY2FuQmF0Y2gpIChyYXcgKyBwcmVmaXhfc3op OworCisJCS8qIFNldCB1cCBjdXJyVHVwbGVzIHBvaW50ZXIgZm9yIGluZGV4LW9ubHkgc2NhbnMg Ki8KKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzY2FuLT5iYXRjaF90dXBsZXNfd29ya3Nw YWNlID4gMCkKKwkJeworCQkJU2l6ZQkJaXRlbXNFbmQgPSBNQVhBTElHTihiYXNlX3N6KTsKKwkJ CVNpemUJCXRhYmxlVHJhaWxpbmcgPSAwOworCisJCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoICYm CisJCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplID4gMCkKKwkJCQl0 YWJsZVRyYWlsaW5nID0gTUFYQUxJR04oc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRl bV9zaXplICoKKwkJCQkJCQkJCQkgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJCQliYXRjaC0+Y3Vy clR1cGxlcyA9IChjaGFyICopIGJhdGNoICsgaXRlbXNFbmQgKyB0YWJsZVRyYWlsaW5nOworCQl9 CisJCWVsc2UKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gTlVMTDsKKworCQkvKgorCQkgKiBCYXRj aGVzIGFsbG9jYXRlIGRlYWRJdGVtcyBsYXppbHkgKHRob3VnaCBub3RlIHRoYXQgY2FjaGVkIGJh dGNoZXMKKwkJICoga2VlcCB0aGVpciBkZWFkSXRlbXMgYWxsb2NhdGlvbiB3aGVuIHJlY3ljbGVk KQorCQkgKi8KKwkJYmF0Y2gtPmRlYWRJdGVtcyA9IE5VTEw7CisJCW5ld19hbGxvYyA9IHRydWU7 CisJfQorCisJLyogeHNfd2FudF9pdHVwIHNjYW5zIG11c3QgZ2V0IGEgY3VyclR1cGxlcyBzcGFj ZSAqLworCUFzc2VydCghKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzY2FuLT5iYXRjaF90dXBsZXNf d29ya3NwYWNlID4gMCAmJgorCQkJIGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpKTsKKworCS8q IExldCB0aGUgdGFibGUgQU0gaW5pdGlhbGl6ZSBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhICov CisJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKKwkJdGFibGVfaW5kZXhfYmF0Y2hfaW5pdChzY2Fu LCBiYXRjaCwgbmV3X2FsbG9jKTsKKworCS8qIHNoYXJlZCBpbml0aWFsaXphdGlvbiAqLworCWJh dGNoLT5rbm93bkVuZEJhY2t3YXJkID0gZmFsc2U7CisJYmF0Y2gtPmtub3duRW5kRm9yd2FyZCA9 IGZhbHNlOworCWJhdGNoLT5maXJzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0gPSAtMTsK KwliYXRjaC0+bnVtRGVhZCA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBSZWxl YXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGlu ZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVkIGJ5CisgKiBpbmRleGFtX3V0aWxf YmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVyZSBmb3IgcmV1c2UgKHdoZW4gc2Nh bgorICogaGFzbid0IGFscmVhZHkgZmluaXNoZWQpIHRvIHJlZHVjZSBwYWxsb2MvcGZyZWUgb3Zl cmhlYWQuCisgKgorICogSXQncyBzYWZlIHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlhdGVseSB3 aGVuIGl0IHdhcyB1c2VkIHRvIHJlYWQgYSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5vIG1hdGNo ZXMgdG8gdGhlIHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4CisgKiBB TSdzIGFtZ2V0YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRoIG9uZSBv ciBtb3JlIG1hdGNoZXMpCisgKiBtdXN0IGJlIHJlbGVhc2VkIGJ5IHRhYmxlYW1fdXRpbF9mcmVl X2JhdGNoLCB3aGljaCBjYWxscyBoZXJlIGFmdGVyIHRoZQorICogaW5kZXggQU0ncyBhbWtpbGxp dGVtc2JhdGNoIHJvdXRpbmUgKGlmIGFueSkuICBJbmRleCBBTXMgdGhhdCB1c2UgYmF0Y2hlcwor ICogc2hvdWxkIGNhbGwgaGVyZSB0byByZWxlYXNlIGEgYmF0Y2ggZnJvbSB0aGVpciBhbWdldGJh dGNoIG9yIGFtZ2V0Yml0bWFwCisgKiByb3V0aW5lcy4KKyAqCisgKiBUaGUgcnVsZXMgZm9yIGJh dGNoIG93bmVyc2hpcCBkaWZmZXIgc2xpZ2h0bHkgZm9yIGFtZ2V0Yml0bWFwIHNjYW5zOyBzZWUK KyAqIHRoZSBhbWdldGJpdG1hcCBkb2N1bWVudGF0aW9uIGluIGRvYy9zcmMvc2dtbC9pbmRleGFt LnNnbWwgZm9yIGRldGFpbHMuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNl KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJaWYgKCFzY2Fu LT51c2ViYXRjaHJpbmcpCisJeworCQkvKgorCQkgKiBhbWdldGJpdG1hcCBzY2FuIGNhbGxlci4K KwkJICoKKwkJICogYW1nZXRiaXRtYXAgcm91dGluZXMgYXJlIHJlcXVpcmVkIHRvIGFsbG9jYXRl IG5vIG1vcmUgdGhhbiBvbmUKKwkJICogYmF0Y2ggYXQgYSB0aW1lLCBzbyB3ZSdsbCBhbHdheXMg aGF2ZSBhIGZyZWUgc2xvdC4KKwkJICovCisJCUFzc2VydChzY2FuLT54c19iaXRtYXBfYmF0Y2gg PT0gTlVMTCk7CisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisJCUFzc2Vy dChiYXRjaC0+ZGVhZEl0ZW1zID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmN1cnJUdXBsZXMg PT0gTlVMTCk7CisKKwkJc2Nhbi0+eHNfYml0bWFwX2JhdGNoID0gYmF0Y2g7CisJCXJldHVybjsK Kwl9CisKKwkvKiBhbWdldGJhdGNoIHNjYW4gY2FsbGVyICovCisJQXNzZXJ0KHNjYW4tPmhlYXBS ZWxhdGlvbiAhPSBOVUxMKTsKKworCS8qCisJICogVHJ5IHRvIHN0b3JlIGNhbGxlcidzIGJhdGNo IGluIHRoaXMgYW1nZXRiYXRjaCBzY2FuJ3MgY2FjaGUgb2YKKwkgKiBwcmV2aW91c2x5IHJlbGVh c2VkIGJhdGNoZXMgZmlyc3QKKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5f Q0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJaWYgKHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtp XSA9PSBOVUxMKQorCQl7CisJCQkvKiBmb3VuZCBlbXB0eSBzbG90LCB3ZSdyZSBkb25lICovCisJ CQlzY2FuLT5iYXRjaHJpbmdidWYuY2FjaGVbaV0gPSBiYXRjaDsKKwkJCXJldHVybjsKKwkJfQor CX0KKworCS8qCisJICogRmFpbGVkIHRvIGZpbmQgYSBmcmVlIHNsb3QgZm9yIHRoaXMgYmF0Y2gu ICBXZSdsbCBqdXN0IGZyZWUgaXQKKwkgKiBvdXJzZWx2ZXMuCisJICovCisJaWYgKGJhdGNoLT5k ZWFkSXRlbXMpCisJCXBmcmVlKGJhdGNoLT5kZWFkSXRlbXMpOworCXBmcmVlKGJhdGNoX2FsbG9j X2Jhc2UoYmF0Y2gsIHNjYW4pKTsKK30KKworLyoKKyAqIHFzb3J0IGNvbXBhcmlzb24gZnVuY3Rp b24gZm9yIGludCBhcnJheXMKKyAqLworc3RhdGljIGludAorYmF0Y2hfY29tcGFyZV9pbnQoY29u c3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQoreworCWludAkJCWEgPSAqKChjb25zdCBpbnQg KikgdmEpOworCWludAkJCWIgPSAqKChjb25zdCBpbnQgKikgdmIpOworCisJcmV0dXJuIHBnX2Nt cF9zMzIoYSwgYik7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVz b24uYnVpbGQgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKaW5kZXggZGE2 NGNiNTk1Li44M2RmYTNmMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9t ZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKQEAg LTUsNCArNSw1IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2FtdmFsaWRhdGUuYycs CiAgICdnZW5hbS5jJywKICAgJ2luZGV4YW0uYycsCisgICdpbmRleGJhdGNoLmMnLAogKQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL1JFQURNRQppbmRleCBjYjkyMWNhMmUuLmU3NTU3N2E3ZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9SRUFETUUKQEAgLTE3OSwxOCArMTc5LDIxIEBAIGhvbGQgb24gdG8gdGhlIHBp biAodXNlZCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgbGVhZiBwYWdlKSB1bnRpbCBfYWZ0ZXJfCiB0 aGV5J3JlIGRvbmUgdmlzaXRpbmcgdGhlIGhlYXAgKGZvciBUSURzIGZyb20gcGlubmVkIGxlYWYg cGFnZSkgcHJldmVudHMKIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIFZBQ1VVTSBjYW5ub3Qg Z2V0IGEgY29uZmxpY3RpbmcgY2xlYW51cCBsb2NrCiB1bnRpbCB0aGUgaW5kZXggc2NhbiBpcyB0 b3RhbGx5IGZpbmlzaGVkIHByb2Nlc3NpbmcgaXRzIGxlYWYgcGFnZS4KK05vdGUgdGhhdCB0aGUg dGFibGUgQU0gZGV0ZXJtaW5lcyB3aGVuIGFuZCB3aGVyZSBpbmRleCBwYWdlIHBpbnMgYXJlCitk cm9wcGVkLiAgVGhpcyBpcyByZXF1aXJlZCBieSBhbnkgaW5kZXggQU0gdGhhdCBpbXBsZW1lbnRz IHRoZSBhbWdldGJhdGNoCitpbnRlcmZhY2UuICAoU2VlIGFsc28sIGRvYy9zcmMvc2dtbC9pbmRl eGFtLnNnbWwpLgogCi1UaGlzIGFwcHJvYWNoIGlzIGZhaXJseSBjb2Fyc2UsIHNvIHdlIGF2b2lk IGl0IHdoZW5ldmVyIHBvc3NpYmxlLiAgSW4KLXByYWN0aWNlIG1vc3QgaW5kZXggc2NhbnMgd29u J3QgaG9sZCBvbnRvIHRoZWlyIHBpbiwgYW5kIHNvIHdvbid0IGJsb2NrCi1WQUNVVU0uICBUaGVz ZSBpbmRleCBzY2FucyBtdXN0IGRlYWwgd2l0aCBUSUQgcmVjeWNsaW5nIGRpcmVjdGx5LCB3aGlj aCBpcwotbW9yZSBjb21wbGljYXRlZCBhbmQgbm90IGFsd2F5cyBwb3NzaWJsZS4gIFNlZSBsYXRl ciBzZWN0aW9uIG9uIG1ha2luZwotY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCitCbG9j a2luZyBWQUNVVU0gbGlrZSB0aGlzIGNhbiBiZSBkaXNydXB0aXZlLCBzbyB0YWJsZSBBTXMgYXZv aWQgaXQgd2hlbmV2ZXIKK3Bvc3NpYmxlLiAgVGhlIGhlYXAgdGFibGUgQU0gdXN1YWxseSBkcm9w cyBsZWFmIHBhZ2UgcGlucyByaWdodCBhd2F5LCB0aG91Z2gKK25vdCBkdXJpbmcgc2NhbnMgdGhh dCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4gIEluZGV4LW9ubHkgc2NhbnMgbWF5IGFsc28KK3Jl dGFpbiBwaW5zIGluIHNvbWUgY2FzZXMuCiAKLU9wcG9ydHVuaXN0aWMgaW5kZXggdHVwbGUgZGVs ZXRpb24gcGVyZm9ybXMgYWxtb3N0IHRoZSBzYW1lIHBhZ2UtbGV2ZWwKLW1vZGlmaWNhdGlvbnMg d2hpbGUgb25seSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcyBzYWZlIGJlY2F1 c2UKLXRoZXJlIGlzIG5vIHF1ZXN0aW9uIG9mIFRJRCByZWN5Y2xpbmcgdGFraW5nIHBsYWNlIGxh dGVyIG9uIC0tIG9ubHkgVkFDVVVNCi1jYW4gbWFrZSBUSURzIHJlY3ljbGFibGUuICBTZWUgYWxz byBzaW1wbGUgZGVsZXRpb24gYW5kIGJvdHRvbS11cAotZGVsZXRpb24sIGJlbG93LgorT3Bwb3J0 dW5pc3RpYyBpbmRleCB0dXBsZSBkZWxldGlvbiBwZXJmb3JtcyB0aGUgc2FtZSBwYWdlLWxldmVs Cittb2RpZmljYXRpb25zIGFzIFZBQ1VVTSwgd2hpbGUgb25seSBob2xkaW5nIGFuIGV4Y2x1c2l2 ZSBsb2NrLiAgVGhpcyBpcworc2FmZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHF1ZXN0aW9uIG9mIFRJ RCByZWN5Y2xpbmcgdGFraW5nIHBsYWNlIC0tIG9ubHkKK1ZBQ1VVTSBjYW4gbWFrZSBUSURzIHJl Y3ljbGFibGUuICBJbiBvdGhlciB3b3JkcywgVkFDVVVNJ3MgY2xlYW51cCBsb2NrCitzZXJ2ZXMg dG8gcHJvdGVjdCBub24tTVZDQyBzbmFwc2hvdCBzY2FucyBmcm9tIGNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZworaGF6YXJkczsgaXQgZG9lc24ndCBwcm90ZWN0IHRoZSBCLVRyZWUgc3RydWN0dXJl IGl0c2VsZi4KIAogQmVjYXVzZSBhIHBpbiBpcyBub3QgYWx3YXlzIGhlbGQsIGFuZCBhIHBhZ2Ug Y2FuIGJlIHNwbGl0IGV2ZW4gd2hpbGUKIHNvbWVvbmUgZG9lcyBob2xkIGEgcGluIG9uIGl0LCBp dCBpcyBwb3NzaWJsZSB0aGF0IGFuIGluZGV4c2NhbiB3aWxsCkBAIC00NDQsNDQgKzQ0NywyNSBA QCBNYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUKIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBcyBleHBsYWluZWQgaW4gdGhlIGVhcmxpZXIgc2VjdGlv biBhYm91dCBkZWxldGluZyBpbmRleCB0dXBsZXMgZHVyaW5nCi1WQUNVVU0sIHdlIGltcGxlbWVu dCBhIGxvY2tpbmcgcHJvdG9jb2wgdGhhdCBhbGxvd3MgaW5kaXZpZHVhbCBpbmRleCBzY2Fucwot dG8gYXZvaWQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLiAgSW5kZXggc2NhbnMgb3B0LW91dCAo YW5kIHNvIGRyb3AgdGhlaXIKLWxlYWYgcGFnZSBwaW4gd2hlbiB2aXNpdGluZyB0aGUgaGVhcCkg d2hlbmV2ZXIgaXQncyBzYWZlIHRvIGRvIHNvLCB0aG91Z2guCi1Ecm9wcGluZyB0aGUgcGluIGVh cmx5IGlzIHVzZWZ1bCBiZWNhdXNlIGl0IGF2b2lkcyBibG9ja2luZyBwcm9ncmVzcyBieQotVkFD VVVNLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdpdGggaW5kZXggc2NhbnMgdXNl ZCBieSBjdXJzb3JzLAotc2luY2UgaWRsZSBjdXJzb3JzIHNvbWV0aW1lcyBzdG9wIGZvciByZWxh dGl2ZWx5IGxvbmcgcGVyaW9kcyBvZiB0aW1lLiAgSW4KLWV4dHJlbWUgY2FzZXMsIGEgY2xpZW50 IGFwcGxpY2F0aW9uIG1heSBob2xkIG9uIHRvIGFuIGlkbGUgY3Vyc29ycyBmb3IKLWhvdXJzIG9y IGV2ZW4gZGF5cy4gIEJsb2NraW5nIFZBQ1VVTSBmb3IgdGhhdCBsb25nIGNvdWxkIGJlIGRpc2Fz dHJvdXMuCitWQUNVVU0sIHdlIGltcGxlbWVudCBhIGxvY2tpbmcgcHJvdG9jb2wgdGhhdCBoZWxw cyB0YWJsZSBBTXMgZGVhbCB3aXRoIFRJRAorcmVjeWNsaW5nIGhhemFyZHMgZHVyaW5nIHNjYW5z IHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCiAKIEluZGV4IHNjYW5zIHRoYXQgZG9uJ3Qg aG9sZCBvbiB0byBhIGJ1ZmZlciBwaW4gYXJlIHByb3RlY3RlZCBieSBob2xkaW5nIGFuCiBNVkND IHNuYXBzaG90IGluc3RlYWQuICBUaGlzIG1vcmUgbGltaXRlZCBpbnRlcmxvY2sgcHJldmVudHMg d3JvbmcgYW5zd2VycwogdG8gcXVlcmllcywgYnV0IGl0IGRvZXMgbm90IHByZXZlbnQgY29uY3Vy cmVudCBUSUQgcmVjeWNsaW5nIGl0c2VsZiAob25seQogaG9sZGluZyBvbnRvIHRoZSBsZWFmIHBh Z2UgcGluIHdoaWxlIGFjY2Vzc2luZyB0aGUgaGVhcCBlbnN1cmVzIHRoYXQpLgorRm9yIHRoZSBt b3N0IHBhcnQsIGl0IGlzIHVwIHRvIHRoZSB0YWJsZSBBTSB0byBkZWFsIHdpdGggY29uY3VycmVu dCBUSUQKK3JlY3ljbGluZyBoYXphcmRzLiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZGlyZWN0bHkg Y29uc2lkZXIgc3VjaCBoYXphcmRzIHdoZW4KK21hcmtpbmcgYSBrbm93bi1kZWFkIGluZGV4IHR1 cGxlIExQX0RFQUQuCiAKLUluZGV4LW9ubHkgc2NhbnMgY2FuIG5ldmVyIGRyb3AgdGhlaXIgYnVm ZmVyIHBpbiwgc2luY2UgdGhleSBhcmUgdW5hYmxlIHRvCi10b2xlcmF0ZSBoYXZpbmcgYSByZWZl cmVuY2VkIFRJRCBiZWNvbWUgcmVjeWNsYWJsZS4gIEluZGV4LW9ubHkgc2NhbnMKLXR5cGljYWxs eSBqdXN0IHZpc2l0IHRoZSB2aXNpYmlsaXR5IG1hcCAobm90IHRoZSBoZWFwIHByb3BlciksIGFu ZCBzbyB3aWxsCi1ub3QgcmVsaWFibHkgbm90aWNlIHRoYXQgYW55IHN0YWxlIFRJRCByZWZlcmVu Y2UgKGZvciBhIFRJRCB0aGF0IHBvaW50ZWQKLXRvIGEgZGVhZC10by1hbGwgaGVhcCBpdGVtIGF0 IGZpcnN0KSB3YXMgY29uY3VycmVudGx5IG1hcmtlZCBMUF9VTlVTRUQgaW4KLXRoZSBoZWFwIGJ5 IFZBQ1VVTS4gIFRoaXMgY291bGQgZWFzaWx5IGFsbG93IFZBQ1VVTSB0byBzZXQgdGhlIHdob2xl IGhlYXAKLXBhZ2UgdG8gYWxsLXZpc2libGUgaW4gdGhlIHZpc2liaWxpdHkgbWFwIGltbWVkaWF0 ZWx5IGFmdGVyd2FyZHMuICBBbiBNVkNDCi1zbmFwc2hvdCBpcyBvbmx5IHN1ZmZpY2llbnQgdG8g YXZvaWQgcHJvYmxlbXMgZHVyaW5nIHBsYWluIGluZGV4IHNjYW5zCi1iZWNhdXNlIHRoZXkgbXVz dCBhY2Nlc3MgZ3JhbnVsYXIgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBoZWFwCi1w cm9wZXIuICBBIHBsYWluIGluZGV4IHNjYW4gd2lsbCBldmVuIHJlY29nbml6ZSBMUF9VTlVTRUQg aXRlbXMgaW4gdGhlCi1oZWFwIChpdGVtcyB0aGF0IGNvdWxkIGJlIHJlY3ljbGVkIGJ1dCBoYXZl bid0IGJlZW4ganVzdCB5ZXQpIGFzICJub3QKLXZpc2libGUiIC0tIGV2ZW4gd2hlbiB0aGUgaGVh cCBwYWdlIGlzIGdlbmVyYWxseSBjb25zaWRlcmVkIGFsbC12aXNpYmxlLgotCi1MUF9ERUFEIHNl dHRpbmcgb2YgaW5kZXggdHVwbGVzIGJ5IHRoZSBraWxsX3ByaW9yX3R1cGxlIG9wdGltaXphdGlv bgotKGRlc2NyaWJlZCBpbiBmdWxsIGluIHNpbXBsZSBkZWxldGlvbiwgYmVsb3cpIGlzIGFsc28g bW9yZSBjb21wbGljYXRlZCBmb3IKLWluZGV4IHNjYW5zIHRoYXQgZHJvcCB0aGVpciBsZWFmIHBh Z2UgcGlucy4gIFdlIG11c3QgYmUgY2FyZWZ1bCB0byBhdm9pZAotTFBfREVBRC1tYXJraW5nIGFu eSBuZXcgaW5kZXggdHVwbGUgdGhhdCBsb29rcyBsaWtlIGEga25vd24tZGVhZCBpbmRleAotdHVw bGUgYmVjYXVzZSBpdCBoYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIFRJRCwgZm9sbG93aW5nIGNv bmN1cnJlbnQgVElECi1yZWN5Y2xpbmcuICBJdCdzIGp1c3QgYWJvdXQgcG9zc2libGUgdGhhdCBz b21lIG90aGVyIHNlc3Npb24gaW5zZXJ0ZWQgYQotbmV3LCB1bnJlbGF0ZWQgaW5kZXggdHVwbGUs IG9uIHRoZSBzYW1lIGxlYWYgcGFnZSwgd2hpY2ggaGFzIHRoZSBzYW1lCi1vcmlnaW5hbCBUSUQu ICBJdCB3b3VsZCBiZSB0b3RhbGx5IHdyb25nIHRvIExQX0RFQUQtc2V0IHRoaXMgbmV3LAorV2Ug bXVzdCBhdm9pZCBMUF9ERUFELW1hcmtpbmcgYW55IG5ldyBpbmRleCB0dXBsZSB0aGF0IGxvb2tz IGxpa2UgYQora25vd24tZGVhZCBpbmRleCB0dXBsZSBiZWNhdXNlIGl0IGhhcHBlbnMgdG8gc2hh cmUgdGhlIHNhbWUgVElELCBmb2xsb3dpbmcKK2NvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIEl0 J3MganVzdCBhYm91dCBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgc2Vzc2lvbgoraW5zZXJ0ZWQg YSBuZXcsIHVucmVsYXRlZCBpbmRleCB0dXBsZSwgb24gdGhlIHNhbWUgbGVhZiBwYWdlLCB3aGlj aCBoYXMgdGhlCitzYW1lIG9yaWdpbmFsIFRJRC4gIEl0IHdvdWxkIGJlIHRvdGFsbHkgd3Jvbmcg dG8gTFBfREVBRC1zZXQgdGhpcyBuZXcsCiB1bnJlbGF0ZWQgaW5kZXggdHVwbGUuCiAKLVdlIGhh bmRsZSB0aGlzIGtpbGxfcHJpb3JfdHVwbGUgcmFjZSBjb25kaXRpb24gYnkgaGF2aW5nIGFmZmVj dGVkIGluZGV4CitXZSBoYW5kbGUgdGhpcyBMUF9ERUFEIHNldHRpbmcgcmFjZSBjb25kaXRpb24g YnkgaGF2aW5nIGFsbCBpbmRleAogc2NhbnMgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgYW55 IGNoYW5nZSB0byB0aGUgbGVhZiBwYWdlIGF0IGFsbAogaW1wbGllcyB0aGF0IGl0IHdhcyByZWFj aGVkIGJ5IGJ0YnVsa2RlbGV0ZSBpbiB0aGUgaW50ZXJpbSBwZXJpb2Qgd2hlbiBubwogYnVmZmVy IHBpbiB3YXMgaGVsZC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgbm90IHNldHRpbmcgYW55IExQ X0RFQUQgYml0cwpAQCAtNzM0LDcgKzcxOCw3IEBAIG9mIHJlYWRlcnMgY291bGQgc3RpbGwgbW92 ZSByaWdodCB0byByZWNvdmVyIGlmIHdlIGRpZG4ndCBjb3VwbGUKIHNhbWUtbGV2ZWwgbG9ja3Mp LCBidXQgd2UgcHJlZmVyIHRvIGJlIGNvbnNlcnZhdGl2ZSBoZXJlLgogCiBEdXJpbmcgcmVjb3Zl cnkgYWxsIGluZGV4IHNjYW5zIHN0YXJ0IHdpdGggaWdub3JlX2tpbGxlZF90dXBsZXMgPSBmYWxz ZQotYW5kIHdlIG5ldmVyIHNldCBraWxsX3ByaW9yX3R1cGxlLiBXZSBkbyB0aGlzIGJlY2F1c2Ug dGhlIG9sZGVzdCB4bWluCithbmQgd2UgbmV2ZXIgTFBfREVBRC1tYXJrIHR1cGxlcy4gV2UgZG8g dGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgogb24gdGhlIHN0YW5kYnkgc2VydmVyIGNhbiBi ZSBvbGRlciB0aGFuIHRoZSBvbGRlc3QgeG1pbiBvbiB0aGUgcHJpbWFyeQogc2VydmVyLCB3aGlj aCBtZWFucyB0dXBsZXMgY2FuIGJlIG1hcmtlZCBMUF9ERUFEIGV2ZW4gd2hlbiB0aGV5IGFyZQog c3RpbGwgdmlzaWJsZSBvbiB0aGUgc3RhbmRieS4gV2UgZG9uJ3QgV0FMIGxvZyB0dXBsZSBMUF9E RUFEIGJpdHMsIGJ1dApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRw YWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwppbmRleCBjYzljNDVk YzQuLmM0ZmY2ZGUyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRw YWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKQEAgLTEwMzcs NiArMTAzNyw5IEBAIF9idF9yZWxidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogICogTG9j ayBpcyBhY3F1aXJlZCB3aXRob3V0IGFjcXVpcmluZyBhbm90aGVyIHBpbi4gIFRoaXMgaXMgbGlr ZSBhIHJhdwogICogTG9ja0J1ZmZlcigpIGNhbGwsIGJ1dCBwZXJmb3JtcyBleHRyYSBzdGVwcyBu ZWVkZWQgYnkgVmFsZ3JpbmQuCiAgKgorICogTm90ZTogX2J0X2JhdGNoX3VubG9jayBpbiBuYnRz ZWFyY2guYyAoaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayB3cmFwcGVyCisgKiBmdW5jdGlvbikg aGFzIG1hdGNoaW5nIFZhbGdyaW5kIGJ1ZmZlciBsb2NrIGluc3RydW1lbnRhdGlvbi4KKyAqCiAg KiBOb3RlOiBDYWxsZXIgbWF5IG5lZWQgdG8gY2FsbCBfYnRfY2hlY2twYWdlKCkgd2l0aCBidWYg d2hlbiBwaW4gb24gYnVmCiAgKiB3YXNuJ3Qgb3JpZ2luYWxseSBhY3F1aXJlZCBpbiBfYnRfZ2V0 YnVmKCkgb3IgX2J0X3JlbGFuZGdldGJ1ZigpLgogICovCkBAIC0xMDc4LDEzICsxMDgxLDE5IEBA IF9idF91bmxvY2tidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogCSAqIEJ1ZmZlciBpcyBw aW5uZWQgYW5kIGxvY2tlZCwgd2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBleHBlY3RlZCB0byBiZQog CSAqIGRlZmluZWQgYW5kIGFkZHJlc3NhYmxlLiAgQ2hlY2sgdGhhdCBwcm9hY3RpdmVseS4KIAkg Ki8KLQlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChCdWZmZXJHZXRQYWdlKGJ1ZiksIEJM Q0tTWik7CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UoYnVmKTsKKworCVZBTEdSSU5EX0NIRUNLX01FTV9JU19ERUZJTkVEKHBhZ2UsIEJMQ0tT Wik7CisjZW5kaWYKIAogCS8qIExvY2tCdWZmZXIoKSBhc3NlcnRzIHRoYXQgcGluIGlzIGhlbGQg YnkgdGhpcyBiYWNrZW5kICovCiAJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7 CiAKKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKIAlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVm ZmVycyhyZWwpKQotCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJ1 ZiksIEJMQ0tTWik7CisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKHBhZ2UsIEJMQ0tTWik7 CisjZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVhZHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwpp bmRleCAyYmExY2E2NjAuLjQzZmM2NzYyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRyZWFkcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVhZHBhZ2UuYwpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBCVFJlYWRQYWdlU3Rh dGUKIHsKIAkvKiBJbnB1dCBwYXJhbWV0ZXJzLCBzZXQgYnkgX2J0X3JlYWRwYWdlIGZvciBfYnRf Y2hlY2trZXlzICovCiAJU2NhbkRpcmVjdGlvbiBkaXI7CQkJLyogY3VycmVudCBzY2FuIGRpcmVj dGlvbiAqLworCUJsb2NrTnVtYmVyIGN1cnJwYWdlOwkJLyogY3VycmVudCBwYWdlIGJlaW5nIHJl YWQgKi8KIAlPZmZzZXROdW1iZXIgbWlub2ZmOwkJLyogTG93ZXN0IG5vbi1waXZvdCB0dXBsZSdz IG9mZnNldCAqLwogCU9mZnNldE51bWJlciBtYXhvZmY7CQkvKiBIaWdoZXN0IG5vbi1waXZvdCB0 dXBsZSdzIG9mZnNldCAqLwogCUluZGV4VHVwbGUJZmluYWx0dXA7CQkvKiBOZWVkZWQgYnkgc2Nh bnMgd2l0aCBhcnJheSBrZXlzICovCkBAIC02MywxNCArNjQsMTMgQEAgc3RhdGljIGJvb2wgX2J0 X3NjYW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1cCk7CiBzdGF0aWMgYm9vbCBfYnRfb3Bw b2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJ CQkJCQkJICBJbmRleFR1cGxlIGZpbmFsdHVwKTsKLXN0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShC VFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJU U2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2Zm bnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCi0JCQkJCQkJCSAgSW5kZXhUdXBs ZSBpdHVwKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9w YXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0s Ci0JCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpOworc3Rh dGljIHZvaWQgX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUlu ZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0 dXBsZU9mZnNldCk7CitzdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNjYW5C YXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2Zm bnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRhYmxlVGlkLAorCQkJCQkJCQkgIEluZGV4VHVw bGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVw b3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKKwkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIHRhYmxlVGlkLCBpbnQgYmFz ZU9mZnNldCk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogCQkJCQkJICBJbmRleFR1 cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNrX2NvbXBhcmUo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTExMSwxNSArMTExLDE1 IEBAIHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5E ZXNjIHNjYW4pOwogCiAKIC8qCi0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBj dXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2J0X3JlYWRwYWdlKCkgLS0g TG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0Y2guCiAgKgotICog Q2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5jdXJyUG9zLmJ1Zjsg dGhlIGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgY3VyclBv cy5tb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0aGV5IGFyZSB1cGRh dGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+Y3VyclBvcyBhcmUK KyAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBuZXdiYXRjaC5idWY7 IHRoZSBidWZmZXIncyBzdGF0ZSBpcworICogbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIG5ld2Jh dGNoJ3MgbW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOworICogdGhleSBhcmUg dXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2YgbmV3YmF0Y2ggYXJl CiAgKiBpbml0aWFsaXplZCBmcm9tIHNjcmF0Y2ggaGVyZS4KICAqCiAgKiBXZSBzY2FuIHRoZSBj dXJyZW50IHBhZ2Ugc3RhcnRpbmcgYXQgb2ZmbnVtIGFuZCBtb3ZpbmcgaW4gdGhlIGluZGljYXRl ZAotICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIGxv YWRlZCBpbnRvIGN1cnJQb3MuaXRlbXMuCisgKiBkaXJlY3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hp bmcgdGhlIHNjYW4ga2V5cyBhcmUgc2F2ZWQgaW4gbmV3YmF0Y2guaXRlbXMuCiAgKiBtb3JlTGVm dCBvciBtb3JlUmlnaHQgKGFzIGFwcHJvcHJpYXRlKSBpcyBjbGVhcmVkIGlmIF9idF9jaGVja2tl eXMgcmVwb3J0cwogICogdGhhdCB0aGVyZSBjYW4gYmUgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMg aW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KICAqIChjb3VsZCBqdXN0IGJlIGZvciB0aGUg Y3VycmVudCBwcmltaXRpdmUgaW5kZXggc2NhbiB3aGVuIHNjYW4gaGFzIGFycmF5cykuCkBAIC0x MzEsMTEgKzEzMSwxMiBAQCBzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtl eXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcg aXRlbXMgZm91bmQgb24gdGhlIHBhZ2UsIGZhbHNlIGlmIG5vbmUuCiAgKi8KIGJvb2wKLV9idF9y ZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1i ZXIgb2ZmbnVtLAotCQkJIGJvb2wgZmlyc3RwYWdlKQorX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJ IE9mZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKQogewogCVJlbGF0aW9uCXJlbCA9 IHNjYW4tPmluZGV4UmVsYXRpb247CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidG5ld2JhdGNoID0gQlRCYXRjaEdldERhdGEo bmV3YmF0Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXRO dW1iZXIgbWlub2ZmOwpAQCAtMTQ0LDIzICsxNDUsMjAgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJYm9v bAkJYXJyYXlLZXlzLAogCQkJCWlnbm9yZV9raWxsZWRfdHVwbGVzID0gc2Nhbi0+aWdub3JlX2tp bGxlZF90dXBsZXM7CiAJaW50CQkJaXRlbUluZGV4LAorCQkJCXR1cGxlT2Zmc2V0ID0gMCwKIAkJ CQlpbmRuYXR0czsKIAogCS8qIHNhdmUgdGhlIHBhZ2UvYnVmZmVyIGJsb2NrIG51bWJlciwgYWxv bmcgd2l0aCBpdHMgc2libGluZyBsaW5rcyAqLwotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5j dXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRuZXdiYXRjaC0+YnVmKTsKIAlv cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0Jc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBC dWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLnByZXZQ YWdlID0gb3BhcXVlLT5idHBvX3ByZXY7Ci0Jc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUt PmJ0cG9fbmV4dDsKLQkvKiBkZWxheSBzZXR0aW5nIHNvLT5jdXJyUG9zLmxzbiB1bnRpbCBfYnRf ZHJvcF9sb2NrX2FuZF9tYXliZV9waW4gKi8KLQlwc3RhdGUuZGlyID0gc28tPmN1cnJQb3MuZGly ID0gZGlyOwotCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCA9IDA7CisJcHN0YXRlLmN1cnJw YWdlID0gYnRuZXdiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidG5ld2Jh dGNoLT5idWYpOworCWJ0bmV3YmF0Y2gtPnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7CisJ YnRuZXdiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKKwlwc3RhdGUuZGlyID0g bmV3YmF0Y2gtPmRpciA9IGRpcjsKIAogCS8qIGVpdGhlciBtb3JlUmlnaHQgb3IgbW9yZUxlZnQg c2hvdWxkIGJlIHNldCBub3cgKG1heSBiZSB1bnNldCBsYXRlcikgKi8KLQlBc3NlcnQoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpID8gc28tPmN1cnJQb3MubW9yZVJpZ2h0IDoKLQkJICAgc28t PmN1cnJQb3MubW9yZUxlZnQpOworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikg PyBidG5ld2JhdGNoLT5tb3JlUmlnaHQgOiBidG5ld2JhdGNoLT5tb3JlTGVmdCk7CiAJQXNzZXJ0 KCFQX0lHTk9SRShvcGFxdWUpKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQ b3MpKTsKIAlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCiAJLyogaW5pdGlhbGl6ZSBsb2Nh bCB2YXJpYWJsZXMgKi8KQEAgLTE4OCwxNCArMTg2LDE0IEBAIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCXsK IAkJLyogYWxsb3cgbmV4dC9wcmV2IHBhZ2UgdG8gYmUgcmVhZCBieSBvdGhlciB3b3JrZXIgd2l0 aG91dCBkZWxheSAqLwogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQkJX2J0 X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MubmV4dFBhZ2UsCi0JCQkJCQkJCSBz by0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBidG5l d2JhdGNoLT5uZXh0UGFnZSwKKwkJCQkJCQkJIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJZWxz ZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MucHJldlBhZ2UsCi0J CQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShz Y2FuLCBidG5ld2JhdGNoLT5wcmV2UGFnZSwKKwkJCQkJCQkJIGJ0bmV3YmF0Y2gtPmN1cnJQYWdl KTsKIAl9CiAKLQlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBz Y2FuLT54c19zbmFwc2hvdCk7CisJUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBwc3RhdGUuY3VycnBh Z2UsIHNjYW4tPnhzX3NuYXBzaG90KTsKIAogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikpCiAJewpAQCAtMjEyLDExICsyMTAsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFfYnRf c2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJCXsK IAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBhbGwg Ki8KLQkJCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCQkJCWJ0bmV3YmF0Y2gt Pm1vcmVSaWdodCA9IGZhbHNlOwogCQkJCQlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJ aWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCiAJCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2No ZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkgICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJ CQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJ CQkJfQogCQkJfQpAQCAtMjgwLDI2ICsyNzgsMjYgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJaWYg KCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQogCQkJCXsKIAkJCQkJLyogUmVtZW1iZXIgaXQg Ki8KLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJ CV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9m ZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewotCQkJCQlp bnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQg dXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQgcmVtZW1iZXIgZmlyc3QgVElEKSAqLwotCQkJCQl0 dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwg b2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhu ZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBv c3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAs ICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCiAJCQkJCS8qIFJlbWVtYmVyIGFs bCBsYXRlciBUSURzIChtdXN0IGJlIGF0IGxlYXN0IG9uZSkgKi8KIAkJCQkJZm9yIChpbnQgaSA9 IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkrKykKIAkJCQkJewotCQkJCQkJ X2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2 ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRy ZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJ CQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQkJaXRlbUluZGV4Kys7CiAJCQkJCX0KIAkJCQl9 CkBAIC0zMzksMTIgKzMzNywxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJfQogCiAJCWlmICghcHN0 YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJ YnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAKIAkJQXNzZXJ0KGl0ZW1JbmRleCA8PSBN YXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28t PmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5k ZXggPSAwOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVt ID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsKQEAgLTM2MSwxMSArMzU4LDExIEBAIF9i dF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXRO dW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwg cHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0 aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0g ZmFsc2U7CisJCQkJCWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVk UHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKIAkJCQkJCV9i dF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5j dXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCQkJCQkJCQkgICBidG5ld2JhdGNoLT5jdXJyUGFnZSk7 CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC00NjYsMjcgKzQ2MywyNyBAQCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCiAJCQkJCWl0ZW1J bmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsK KwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1 cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKIAkJCQkJdWludDE2CQluaXRlbXMg PSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0Owor CQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qgc3Rh dGUgKGFuZCByZW1lbWJlciBsYXN0IFRJRCkgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCXR1 cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCBv ZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKG5l d2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9z dGluZ04oaXR1cCwgbml0ZW1zIC0gMSksCi0JCQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJCQkJ CSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAogCQkJCQkvKiBSZW1lbWJlciBhbGwgcHJpb3IgVElE cyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAoaW50IGkgPSBuaXRlbXMgLSAy OyBpID49IDA7IGktLSkKIAkJCQkJewogCQkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCQlfYnRfc2F2 ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGlu Z2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxl R2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJ CQkJYmFzZU9mZnNldCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC01MDIsMTIgKzQ5OSwxMSBA QCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKIAkJICogYmUgZm91bmQgdGhlcmUKIAkJICovCiAJCWlmICghcHN0 YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQli dG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPj0gMCk7 Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFz dEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4 ID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSBpdGVt SW5kZXg7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOwog CX0KIAogCS8qCkBAIC01MjQsNyArNTIwLDcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJICovCiAJQXNz ZXJ0KCFwc3RhdGUuZm9yY2Vub25yZXF1aXJlZCk7CiAKLQlyZXR1cm4gKHNvLT5jdXJyUG9zLmZp cnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJcmV0dXJuIChuZXdiYXRjaC0+Zmly c3RJdGVtIDw9IG5ld2JhdGNoLT5sYXN0SXRlbSk7CiB9CiAKIC8qCkBAIC0xMDI3LDkwICsxMDIz LDkxIEBAIF9idF9vcHBvZGlyX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLAogCXJldHVybiB0cnVlOwogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50 byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0ZW0g aW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0aWMgdm9pZAotX2J0X3NhdmVp dGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCSBPZmZzZXROdW1iZXIgb2Zm bnVtLCBJbmRleFR1cGxlIGl0dXApCitfYnRfc2F2ZWl0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0 Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkgSW5kZXhUdXBsZSBp dHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0KIAlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bpdm90 KGl0dXApICYmICFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAotCWN1cnJJdGVtLT5oZWFw VGlkID0gaXR1cC0+dF90aWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwotCWlm IChzby0+Y3VyclR1cGxlcykKKwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZCA9 IGl0dXAtPnRfdGlkOworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0g b2ZmbnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1cHN6 ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7CiAKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28t PmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBzby0+ Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9zLm5l eHRUdXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNbaXRl bUluZGV4XS50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNoLT5j dXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZzZXQg Kz0gTUFYQUxJR04oaXR1cHN6KTsKIAl9CiB9CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBzYXZl IFRJRHMvaXRlbXMgZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICogU2F2 ZXMgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJ RCB0aGF0IGlzCi0gKiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVl bnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGluZyBf YnRfc2F2ZXBvc3RpbmdpdGVtKCkuCisgKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0 Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNjYW4g Zmlyc3QuICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxk IGJlIHNhdmVkCisgKiBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0gKiBS ZXR1cm5zIGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxl IGlzIHN0b3JlZCBhdCBpZgotICogbmVlZGVkLgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBhbiBv ZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICogc3Rv cmVkIGF0IGlmIG5lZWRlZC4KICAqLwogc3RhdGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0ZW1z KEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJ CQkJICBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCkKK19i dF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRl eCwKKwkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRh YmxlVGlkLAorCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlC VFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwor CUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwog CiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBU aWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNv LT5jdXJyVHVwbGVzKQorCWl0ZW0tPnRhYmxlVGlkID0gKnRhYmxlVGlkOworCWl0ZW0tPmluZGV4 T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJLyog U2F2ZSBiYXNlIEluZGV4VHVwbGUgKHRydW5jYXRlIHBvc3RpbmcgbGlzdCkgKi8KIAkJSW5kZXhU dXBsZQliYXNlOwogCQlTaXplCQlpdHVwc3ogPSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNldChp dHVwKTsKIAogCQlpdHVwc3ogPSBNQVhBTElHTihpdHVwc3opOwotCQljdXJySXRlbS0+dHVwbGVP ZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQ7Ci0JCWJhc2UgPSAoSW5kZXhUdXBs ZSkgKHNvLT5jdXJyVHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJaXRl bS0+dHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCWJhc2UgPSAoSW5kZXhUdXBsZSkgKG5l d2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0KTsKIAkJbWVtY3B5KGJhc2UsIGl0dXAs IGl0dXBzeik7CiAJCS8qIERlZmVuc2l2ZWx5IHJlZHVjZSB3b3JrIGFyZWEgaW5kZXggdHVwbGUg aGVhZGVyIHNpemUgKi8KIAkJYmFzZS0+dF9pbmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CiAJCWJh c2UtPnRfaW5mbyB8PSBpdHVwc3o7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBp dHVwc3o7CisJCSp0dXBsZU9mZnNldCArPSBpdHVwc3o7CiAKLQkJcmV0dXJuIGN1cnJJdGVtLT50 dXBsZU9mZnNldDsKKwkJcmV0dXJuIGl0ZW0tPnR1cGxlT2Zmc2V0OwogCX0KIAogCXJldHVybiAw OwogfQogCiAvKgotICogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNb aXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50 byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKICAqIHR1cGxl LgogICoKICAqIEFzc3VtZXMgdGhhdCBfYnRfc2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxyZWFk eSBiZWVuIGNhbGxlZCBmb3IgY3VycmVudAotICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVy IHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIHR1cGxlT2Zmc2V0LgorICogcG9zdGluZyBsaXN0 IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIGJhc2VPZmZzZXQuCiAg Ki8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUg c28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCUl0ZW1Qb2ludGVy IGhlYXBUaWQsIGludCB0dXBsZU9mZnNldCkKK19idF9zYXZlcG9zdGluZ2l0ZW0oSW5kZXhTY2Fu QmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJ CUl0ZW1Qb2ludGVyIHRhYmxlVGlkLCBpbnQgYmFzZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVt ICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hp bmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCi0JY3Vyckl0ZW0t PmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJ aXRlbS0+dGFibGVUaWQgPSAqdGFibGVUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07 CiAKIAkvKgogCSAqIEhhdmUgaW5kZXgtb25seSBzY2FucyByZXR1cm4gdGhlIHNhbWUgYmFzZSBJ bmRleFR1cGxlIGZvciBldmVyeSBUSUQKIAkgKiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgc2Ft ZSBwb3N0aW5nIGxpc3QKIAkgKi8KLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCWN1cnJJdGVtLT50 dXBsZU9mZnNldCA9IHR1cGxlT2Zmc2V0OworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKKwkJ aXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNlT2Zmc2V0OwogfQogCiAjZGVmaW5lIExPT0tfQUhFQURf UkVRVUlSRURfUkVDSEVDS1MgCTMKQEAgLTI4MjIsMTMgKzI4MTksMTMgQEAgbmV3X3ByaW1fc2Nh bjoKIAkgKiBOb3RlOiBXZSBtYWtlIGEgc29mdCBhc3N1bXB0aW9uIHRoYXQgdGhlIGN1cnJlbnQg c2NhbiBkaXJlY3Rpb24gd2lsbAogCSAqIGFsc28gYmUgdXNlZCB3aXRoaW4gX2J0X25leHQsIHdo ZW4gaXQgaXMgYXNrZWQgdG8gc3RlcCBvZmYgdGhpcyBwYWdlLgogCSAqIEl0IGlzIHVwIHRvIF9i dF9uZXh0IHRvIGNhbmNlbCB0aGlzIHNjaGVkdWxlZCBwcmltaXRpdmUgaW5kZXggc2NhbgotCSAq IHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRlIGN1 cnJQb3MuZGlyLgorCSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0 aW9uIG9wcG9zaXRlIHBzdGF0ZS0+ZGlyLgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVzY2FuID0g ZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+bmVlZFBy aW1TY2FuID0gdHJ1ZTsJLyogLi4uYnV0IGNhbGwgX2J0X2ZpcnN0IGFnYWluICovCiAKIAlpZiAo c2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNj YW4sIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVk dWxlKHNjYW4sIHBzdGF0ZS0+Y3VycnBhZ2UpOwogCiAJLyogQ2FsbGVyJ3MgdHVwbGUgZG9lc24n dCBtYXRjaCB0aGUgbmV3IHF1YWwgKi8KIAlyZXR1cm4gZmFsc2U7CkBAIC0yOTEzLDE0ICsyOTEw LDYgQEAgX2J0X2FkdmFuY2VfYXJyYXlfa2V5c19pbmNyZW1lbnQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpciwKIAkgKiBSZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRoZSBz dGF0ZSB0aGV5IHdlcmUgaW4gaW1tZWRpYXRlbHkgYmVmb3JlIHdlCiAJICogd2VyZSBjYWxsZWQu ICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYXJyYXlzIG9ubHkgZXZlciByYXRjaGV0IGluIHRoZQog CSAqIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCi0JICoKLQkgKiBXaXRob3V0IHRoaXMsIHNjYW5z IGNvdWxkIG92ZXJsb29rIG1hdGNoaW5nIHR1cGxlcyB3aGVuIHRoZSBzY2FuCi0JICogZGlyZWN0 aW9uIGdldHMgcmV2ZXJzZWQganVzdCBiZWZvcmUgYnRnZXR0dXBsZSBydW5zIG91dCBvZiBpdGVt cyB0bwotCSAqIHJldHVybiwgYnV0IGp1c3QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHByZXBhcmVzIGFs bCB0aGUgaXRlbXMgZnJvbSB0aGUKLQkgKiBzY2FuJ3MgZmluYWwgcGFnZSBpbiBzby0+Y3VyclBv cy4gIFdoZW4gd2UncmUgb24gdGhlIGZpbmFsIHBhZ2UgaXQgaXMKLQkgKiB0eXBpY2FsIGZvciBz by0+Y3VyclBvcyB0byBnZXQgaW52YWxpZGF0ZWQgb25jZSBidGdldHR1cGxlIGZpbmFsbHkKLQkg KiByZXR1cm5zIGZhbHNlLCB3aGljaCdsbCBlZmZlY3RpdmVseSBpbnZhbGlkYXRlIHRoZSBzY2Fu J3MgYXJyYXkga2V5cy4KLQkgKiBUaGF0IGhhc24ndCBoYXBwZW5lZCB5ZXQsIHRob3VnaCAtLSBh bmQgaW4gZ2VuZXJhbCBpdCBtYXkgbmV2ZXIgaGFwcGVuLgogCSAqLwogCV9idF9zdGFydF9hcnJh eV9rZXlzKHNjYW4sIC1kaXIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCBh ZWQ3NDU5MGMuLmViMWNiOWU1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRyZWUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0x NjAsMTEgKzE2MCwxMyBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0 bWVtYmVycyA9IGJ0YWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW4s CiAJCS5hbXJlc2NhbiA9IGJ0cmVzY2FuLAotCQkuYW1nZXR0dXBsZSA9IGJ0Z2V0dHVwbGUsCisJ CS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNoLAorCQkuYW1r aWxsaXRlbXNiYXRjaCA9IGJ0a2lsbGl0ZW1zYmF0Y2gsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IGJ0 dW5ndWFyZGJhdGNoLAogCQkuYW1nZXRiaXRtYXAgPSBidGdldGJpdG1hcCwKIAkJLmFtZW5kc2Nh biA9IGJ0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IGJ0bWFya3BvcywKLQkJLmFtcmVzdHJwb3Mg PSBidHJlc3RycG9zLAorCQkuYW1wb3NyZXNldCA9IGJ0cG9zcmVzZXQsCiAJCS5hbWVzdGltYXRl cGFyYWxsZWxzY2FuID0gYnRlc3RpbWF0ZXBhcmFsbGVsc2NhbiwKIAkJLmFtaW5pdHBhcmFsbGVs c2NhbiA9IGJ0aW5pdHBhcmFsbGVsc2NhbiwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBidHBhcmFs bGVscmVzY2FuLApAQCAtMjIzLDEzICsyMjUsMTMgQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBE YXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiB9CiAKIC8qCi0gKglidGdldHR1cGxlKCkgLS0g R2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJYnRnZXRiYXRjaCgpIC0tIEdldCB0 aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAot YnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhT Y2FuQmF0Y2gKK2J0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBw cmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJh dGNoID0gcHJpb3JiYXRjaDsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7 CiAKQEAgLTI0Miw0NSArMjQ0LDIwIEBAIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAkJLyoKIAkJICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXpl ZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4KIAkJICogdGhlIGFwcHJvcHJp YXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwKLQkJICog X2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgorCQkgKiBfYnRf Zmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGJhdGNoIGluIHRoZSBzY2FuLgogCQkgKi8KLQkJaWYg KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJCXJlcyA9IF9idF9maXJzdChzY2Fu LCBkaXIpOworCQlpZiAoYmF0Y2ggPT0gTlVMTCkKKwkJCWJhdGNoID0gX2J0X2ZpcnN0KHNjYW4s IGRpcik7CiAJCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91 bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkJICovCi0JCQlpZiAoc2Nh bi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFllcywgcmVtZW1iZXIg aXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoCi0JCQkJICogdHVwbGVzIGF0 IG9uY2UgcmlnaHQgYmVmb3JlIGxlYXZpbmcgdGhlIGluZGV4IHBhZ2UuKSAgVGhlCi0JCQkJICog dGVzdCBmb3IgbnVtS2lsbGVkIG92ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZQot CQkJCSAqIGNhbGxlciByZXZlcnNlcyBkaXJlY3Rpb24gaW4gdGhlIGluZGV4c2NhbiB0aGVuIHRo ZSBzYW1lCi0JCQkJICogaXRlbSBtaWdodCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4gSXQn cyBub3Qgd29ydGgKLQkJCQkgKiB0cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3Qg ZGV0ZWN0IGl0LCBidXQgaW5zdGVhZAotCQkJCSAqIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50 cmllcy4KLQkJCQkgKi8KLQkJCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJCXNv LT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1heFRJRHNQZXJCVHJlZVBhZ2UpOwot CQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJUcmVlUGFnZSkKLQkJCQkJc28tPmtp bGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCQl9 CisJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIGRpciwgYmF0Y2gpOwogCi0JCQkvKgotCQkJICog Tm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkJICovCi0JCQlyZXMgPSBfYnRfbmV4dChzY2FuLCBk aXIpOwotCQl9Ci0KLQkJLyogSWYgd2UgaGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCi0J CWlmIChyZXMpCisJCS8qIElmIHdlIGhhdmUgYSBiYXRjaCwgcmV0dXJuIGl0IC4uLiAqLworCQlp ZiAoYmF0Y2gpCiAJCQlicmVhazsKIAkJLyogLi4uIG90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCBh bm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJfSB3aGlsZSAoc28tPm51bUFycmF5S2V5 cyAmJiBfYnRfc3RhcnRfcHJpbV9zY2FuKHNjYW4pKTsKIAotCXJldHVybiByZXM7CisJcmV0dXJu IGJhdGNoOwogfQogCiAvKgpAQCAtMjkwLDM4ICsyNjcsNDMgQEAgaW50NjQKIGJ0Z2V0Yml0bWFw KEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7CiAJQlRTY2FuT3BhcXVlIHNv ID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwog CWludDY0CQludGlkcyA9IDA7Ci0JSXRlbVBvaW50ZXIgaGVhcFRpZDsKKwlJdGVtUG9pbnRlciB0 YWJsZVRpZDsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CiAKIAkvKiBF YWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4g Ki8KIAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0IHBhZ2UgJiB0dXBsZSAqLwotCQlpZiAo X2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJLyogRmV0Y2ggdGhlIGZp cnN0IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5u aW5nICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hlYXB0aWQ7Ci0JCQl0Ym1fYWRkX3R1cGxl cyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKKwkJCWludAkJCWl0ZW1JbmRleCA9IDA7CisKKwkJ CS8qIFNhdmUgZmlyc3QgdHVwbGUncyBUSUQgKi8KKwkJCXRhYmxlVGlkID0gJmJhdGNoLT5pdGVt c1tpdGVtSW5kZXhdLnRhYmxlVGlkOworCQkJdGJtX2FkZF90dXBsZXModGJtLCB0YWJsZVRpZCwg MSwgZmFsc2UpOwogCQkJbnRpZHMrKzsKIAogCQkJZm9yICg7OykKIAkJCXsKLQkJCQkvKgotCQkJ CSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSB3aXRoaW4gcGFnZS4gIFRoaXMgaXMgdGhlIHNhbWUg YXMgdGhlCi0JCQkJICogZWFzeSBjYXNlIGluIF9idF9uZXh0KCkuCi0JCQkJICovCi0JCQkJaWYg KCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJCQkJLyog QWR2YW5jZSB0byBuZXh0IFRJRCB3aXRoaW4gcGFnZS1zaXplZCBiYXRjaCAqLworCQkJCWlmICgr K2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0SXRlbSkKIAkJCQl7Ci0JCQkJCS8qIGxldCBfYnRfbmV4 dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAqLwotCQkJCQlpZiAoIV9idF9uZXh0KHNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJLyoKKwkJCQkJICogX2J0X25leHQgcmVsZWFzZXMgdGhl IHByaW9yIGJhdGNoIGZvciBiaXRtYXAgY2FsbGVycworCQkJCQkgKiBiZWZvcmUgYWxsb2NhdGlu ZyB0aGUgbmV4dCBvbmUsIHNvIG9ubHkgb25lIGJhdGNoIGlzCisJCQkJCSAqIGV2ZXIgdXNlZCBh dCBhIHRpbWUKKwkJCQkJICovCisJCQkJCWl0ZW1JbmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0 X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRj aCkKIAkJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250 aW51ZSBzY2FubmluZyAqLwotCQkJCWhlYXBUaWQgPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1 cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlkOwotCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVhcFRp ZCwgMSwgZmFsc2UpOworCQkJCXRhYmxlVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRh YmxlVGlkOworCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgdGFibGVUaWQsIDEsIGZhbHNlKTsKIAkJ CQludGlkcysrOwogCQkJfQogCQl9CkBAIC0zNDgsOCArMzMwLDYgQEAgYnRiZWdpbnNjYW4oUmVs YXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAKIAkvKiBhbGxvY2F0ZSBwcml2 YXRlIHdvcmtzcGFjZSAqLwogCXNvID0gcGFsbG9jX29iamVjdChCVFNjYW5PcGFxdWVEYXRhKTsK LQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5tYXJrUG9zKTsKIAlpZiAoc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28tPmtleURh dGEgPSAoU2NhbktleSkgcGFsbG9jKHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5 RGF0YSkpOwogCWVsc2UKQEAgLTM2MywxOSArMzQzLDExIEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9u IHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNvLT5vcmRlclByb2NzID0gTlVMTDsK IAlzby0+YXJyYXlDb250ZXh0ID0gTlVMTDsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkv KiB1bnRpbCBuZWVkZWQgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgZG9u J3Qga25vdyB5ZXQgd2hldGhlciB0aGUgc2NhbiB3aWxsIGJlIGluZGV4LW9ubHksIHNvIHdlIGRv IG5vdAotCSAqIGFsbG9jYXRlIHRoZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGlsIGJ0cmVz Y2FuLiAgSG93ZXZlciwgd2Ugc2V0IHVwCi0JICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hldGhlciB3 ZSdsbCBuZWVkIGl0IG9yIG5vdCwgc2luY2UgdGhhdCdzIHNvIGNoZWFwLgotCSAqLwotCXNvLT5j dXJyVHVwbGVzID0gc28tPm1hcmtUdXBsZXMgPSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1cGRlc2Mg PSBSZWxhdGlvbkdldERlc2NyKHJlbCk7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT54 c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlzY2FuLT5tYXhpdGVtc2JhdGNo ID0gTWF4VElEc1BlckJUcmVlUGFnZTsKKwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9 IE1BWEFMSUdOKHNpemVvZihCVEJhdGNoRGF0YSkpOworCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jr c3BhY2UgPSBCTENLU1o7CiAKIAlyZXR1cm4gc2NhbjsKIH0KQEAgLTM4OSw2NCArMzYxLDE4NiBA QCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fu a2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRhIGRyb3Ag dGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JewotCQkv KiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1z ICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0J CUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCQlCVFNjYW5Qb3NJbnZhbGlk YXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgotCSAqIFdlIHByZWZlciB0byBlYWdlcmx5IGRy b3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0dHVwbGUgcmV0dXJucy4KLQkgKiBUaGlzIGF2 b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBvbiB0aGUg cGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBkdXJp bmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQotCSAqIHJhY2UgY29uZGl0aW9uIGludm9sdmlu ZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0aGUgVk0uCi0JICogSXQncyBh bHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFw c2hvdC4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBl YWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3Ig bW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkgKiB3YXks IHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBh Z2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFraW5nIGNv bmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28tPmRyb3BQaW4g c2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJvcFBpbiA9 ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNNVkNDTGlrZVNuYXBzaG90KHNjYW4t PnhzX3NuYXBzaG90KSAmJgotCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQot CXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNv LT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5tYXJrUG9zKTsKLQotCS8qCi0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5 cywgaWYgbmVlZGVkIGZvciBhbiBpbmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkg ZG9uZSBpbiBhIHByZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBv dmVyaGVhZCwgYm90aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9j azsgb25seSB0aGlzCi0JICogZnVuY3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICov Ci0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1cGxlcyA9PSBOVUxMKQotCXsK LQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoQkxDS1NaICogMik7Ci0JCXNvLT5t YXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7Ci0JfQotCiAJLyoKIAkgKiBSZXNl dCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVyT2ZLZXlz ID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5 cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlz by0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiAJ c28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRfcHJlcHJvY2Vzc19rZXlzIHNldHMg aXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRpdHRvICovCiB9CiAKKy8qCisgKgli dGtpbGxpdGVtc2JhdGNoKCkgLS0gTWFyayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMgTFBfREVB RAorICovCit2b2lkCitidGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpCit7CisJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsK KwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKGJhdGNoKTsKKwlQYWdlCQlw YWdlOworCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CisJT2Zmc2V0TnVtYmVyIG1pbm9mZjsKKwlPZmZz ZXROdW1iZXIgbWF4b2ZmOworCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOworCUJ1ZmZl cgkJYnVmOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJLyogVGFibGUgQU0gc2hvdWxkIGhh dmUgYWxyZWFkeSByZWxlYXNlZCBiYXRjaCBwYWdlJ3MgcGluIGJ5IG5vdyAqLworCUFzc2VydChi YXRjaC0+bnVtRGVhZCA+IDApOworCisJYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJ0YmF0Y2gtPmN1 cnJQYWdlLCBCVF9SRUFEKTsKKworCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYp OworCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0g bGF0ZXN0bHNuKQorCXsKKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQlf YnRfcmVsYnVmKHJlbCwgYnVmKTsKKwkJcmV0dXJuOworCX0KKworCXBhZ2UgPSBCdWZmZXJHZXRQ YWdlKGJ1Zik7CisJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOworCW1pbm9mZiA9IFBf RklSU1REQVRBS0VZKG9wYXF1ZSk7CisJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihw YWdlKTsKKworCS8qIEl0ZXJhdGUgdGhyb3VnaCBiYXRjaC0+ZGVhZEl0ZW1zW10gaW4gbGVhZiBw YWdlIG9yZGVyICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtRGVhZDsgaSsrKQor CXsKKwkJaW50CQkJaXRlbUluZGV4ID0gYmF0Y2gtPmRlYWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRj aGluZ0l0ZW0gKmtpdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOworCQlPZmZzZXROdW1i ZXIgb2ZmbnVtID0ga2l0ZW0tPmluZGV4T2Zmc2V0OworCisJCUFzc2VydChpdGVtSW5kZXggPj0g YmF0Y2gtPmZpcnN0SXRlbSAmJiBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwkJQXNz ZXJ0KGkgPT0gMCB8fAorCQkJICAgb2ZmbnVtID49IGJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0 ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOworCisJCWlmIChvZmZudW0gPCBtaW5vZmYpCisJCQlj b250aW51ZTsJCQkvKiBwdXJlIHBhcmFub2lhICovCisJCXdoaWxlIChvZmZudW0gPD0gbWF4b2Zm KQorCQl7CisJCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJ CUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7 CisJCQlib29sCQlraWxsdHVwbGUgPSBmYWxzZTsKKworCQkJaWYgKEJUcmVlVHVwbGVJc1Bvc3Rp bmcoaXR1cGxlKSkKKwkJCXsKKwkJCQlpbnQJCQlwaSA9IGkgKyAxOworCQkJCWludAkJCW5wb3N0 aW5nID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXBsZSk7CisJCQkJaW50CQkJajsKKworCQkJ CWZvciAoaiA9IDA7IGogPCBucG9zdGluZzsgaisrKQorCQkJCXsKKwkJCQkJSXRlbVBvaW50ZXIg aXRlbSA9IEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwbGUsIGopOworCisJCQkJCWlmICghSXRl bVBvaW50ZXJFcXVhbHMoaXRlbSwgJmtpdGVtLT50YWJsZVRpZCkpCisJCQkJCQlicmVhazsJLyog b3V0IG9mIHBvc3RpbmcgbGlzdCBsb29wICovCisKKwkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9m ZnNldCA9PSBvZmZudW0pOworCisJCQkJCS8qCisJCQkJCSAqIFJlYWQtYWhlYWQgdG8gbGF0ZXIg a2l0ZW1zIGhlcmUuCisJCQkJCSAqCisJCQkJCSAqIFdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24g dGhhdCBub3QgYWR2YW5jaW5nIGtpdGVtIGhlcmUKKwkJCQkJICogd2lsbCBwcmV2ZW50IHVzIGZy b20gY29uc2lkZXJpbmcgdGhlIHBvc3RpbmcgbGlzdCB0dXBsZQorCQkJCQkgKiBmdWxseSBkZWFk IGJ5IG5vdCBtYXRjaGluZyBpdHMgbmV4dCBoZWFwIFRJRCBpbiBuZXh0CisJCQkJCSAqIGxvb3Ag aXRlcmF0aW9uLgorCQkJCQkgKgorCQkJCQkgKiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoaXMg aXMgdGhlIGZpbmFsIGhlYXAgVElEIGluCisJCQkJCSAqIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUs IHRoZW4gdHVwbGUgZ2V0cyBraWxsZWQKKwkJCQkJICogcmVnYXJkbGVzcyAoaS5lLiB3ZSBoYW5k bGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGxhc3QKKwkJCQkJICoga2l0ZW0gaXMgYWxzbyB0aGUgbGFz dCBoZWFwIFRJRCBpbiB0aGUgbGFzdCBpbmRleCB0dXBsZQorCQkJCQkgKiBjb3JyZWN0bHkgLS0g cG9zdGluZyB0dXBsZSBzdGlsbCBnZXRzIGtpbGxlZCkuCisJCQkJCSAqLworCQkJCQlpZiAocGkg PCBiYXRjaC0+bnVtRGVhZCkKKwkJCQkJCWtpdGVtID0gJmJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVh ZEl0ZW1zW3BpKytdXTsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIERvbid0IGJvdGhlciBhZHZh bmNpbmcgdGhlIG91dGVybW9zdCBsb29wJ3MgaW50IGl0ZXJhdG9yIHRvCisJCQkJICogYXZvaWQg cHJvY2Vzc2luZyBkZWFkIGl0ZW1zIHRoYXQgcmVsYXRlIHRvIHRoZSBzYW1lCisJCQkJICogb2Zm bnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWljcm8tb3B0aW1pemF0aW9uIGhhcmRseQor CQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJt b3N0IGxvb3AKKwkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0Y2ggb24gdGhpcyBzYW1lIHBvc3Rpbmcg bGlzdCdzIGZpcnN0IGhlYXAKKwkJCQkgKiBUSUQgaW5zdGVhZCwgc28gd2UnbGwgYWR2YW5jZSB0 byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKKwkJCQkgKiB0dXBsZSBwcmV0dHkgcXVpY2tseS4pCisJ CQkJICovCisJCQkJaWYgKGogPT0gbnBvc3RpbmcpCisJCQkJCWtpbGx0dXBsZSA9IHRydWU7CisJ CQl9CisJCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmtpdGVt LT50YWJsZVRpZCkpCisJCQkJa2lsbHR1cGxlID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIE1hcmsg aW5kZXggaXRlbSBhcyBkZWFkLCBpZiBpdCBpc24ndCBhbHJlYWR5LiAgU2luY2UgdGhpcworCQkJ ICogaGFwcGVucyB3aGlsZSBob2xkaW5nIGEgc2hhcmVkIGJ1ZmZlciBsb2NrLCBpdCdzIHBvc3Np YmxlIHRoYXQKKwkJCSAqIG11bHRpcGxlIHByb2Nlc3NlcyBhdHRlbXB0IHRvIGRvIHRoaXMgc2lt dWx0YW5lb3VzbHksIGxlYWRpbmcKKwkJCSAqIHRvIG11bHRpcGxlIGZ1bGwtcGFnZSBpbWFnZXMg YmVpbmcgc2VudCB0byBXQUwgKGlmCisJCQkgKiB3YWxfbG9nX2hpbnRzIG9yIGRhdGEgY2hlY2tz dW1zIGFyZSBlbmFibGVkKSwgd2hpY2ggaXMKKwkJCSAqIHVuZGVzaXJhYmxlLgorCQkJICovCisJ CQlpZiAoa2lsbHR1cGxlICYmICFJdGVtSWRJc0RlYWQoaWlkKSkKKwkJCXsKKwkJCQlpZiAoIWtp bGxlZHNvbWV0aGluZykKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFVzZSB0aGUgaGludCBiaXQg aW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuCisJCQkJCSAqIHVwZGF0ZSB0aGUgcGFn ZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJZiB3ZQorCQkJCQkgKiBhcmUgbm90 IGFsbG93ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgY29udGludWluZy4KKwkJCQkJICovCisJCQkJCWlm ICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhidWYpKQorCQkJCQkJZ290byB1bmxvY2tfcGFnZTsK KwkJCQl9CisKKwkJCQkvKiBmb3VuZCB0aGUgaXRlbS9hbGwgcG9zdGluZyBsaXN0IGl0ZW1zICov CisJCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKKwkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwor CQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLworCQkJfQorCQkJb2Zm bnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pOworCQl9CisJfQorCisJLyoKKwkgKiBTaW5j ZSB0aGlzIGNhbiBiZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQu CisJICoKKwkgKiBXaGVuZXZlciB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0 IHRoZSBwYWdlJ3MKKwkgKiBCVFBfSEFTX0dBUkJBR0UgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2Ug anVzdCBhIGhpbnQuICAoTm90ZSB0aGF0IHdlCisJICogb25seSByZWx5IG9uIHRoZSBwYWdlLWxl dmVsIGZsYWcgaW4gIWhlYXBrZXlzcGFjZSBpbmRleGVzLikKKwkgKi8KKwlpZiAoa2lsbGVkc29t ZXRoaW5nKQorCXsKKwkJb3BhcXVlLT5idHBvX2ZsYWdzIHw9IEJUUF9IQVNfR0FSQkFHRTsKKwkJ QnVmZmVyRmluaXNoU2V0SGludEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsKKwl9CisKK3VubG9ja19w YWdlOgorCV9idF9yZWxidWYocmVsLCBidWYpOworfQorCisvKgorICoJYnR1bmd1YXJkYmF0Y2go KSAtLSBEcm9wIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKGJ1ZmZlciBwaW4pCisg KgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2FmZSB0byBkcm9wIHRoZSBi dWZmZXIgcGluIGhlbGQgdG8KKyAqIHByZXZlbnQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5 IFZBQ1VVTS4KKyAqLwordm9pZAorYnR1bmd1YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9IEJUQmF0Y2hH ZXREYXRhKGJhdGNoKTsKKworCS8qIGNoZWNrIGlmIHRoZSBwaW4gaGFzIGFscmVhZHkgYmVlbiBy ZWxlYXNlZCAobXVzdCBiZSBpZGVtcG90ZW50KSAqLworCWlmIChCdWZmZXJJc1ZhbGlkKGJ0YmF0 Y2gtPmJ1ZikpCisJeworCQlSZWxlYXNlQnVmZmVyKGJ0YmF0Y2gtPmJ1Zik7CisJCWJ0YmF0Y2gt PmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorfQorCiAvKgogICoJYnRlbmRzY2FuKCkgLS0gY2xv c2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDU1LDExNiArNTQ5LDYzIEBAIGJ0ZW5kc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBn b3R0YSBkcm9wIHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3Mp KQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtp bGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1z KHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQlz by0+bWFya0l0ZW1JbmRleCA9IC0xOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQ b3MpOwotCi0JLyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIHBvc2l0aW9ucywgdGhlIFJBTSBpcyBh Ym91dCB0byBiZSBmcmVlZC4gKi8KLQogCS8qIFJlbGVhc2Ugc3RvcmFnZSAqLwogCWlmIChzby0+ a2V5RGF0YSAhPSBOVUxMKQogCQlwZnJlZShzby0+a2V5RGF0YSk7CiAJLyogc28tPmFycmF5S2V5 cyBhbmQgc28tPm9yZGVyUHJvY3MgYXJlIGluIGFycmF5Q29udGV4dCAqLwogCWlmIChzby0+YXJy YXlDb250ZXh0ICE9IE5VTEwpCiAJCU1lbW9yeUNvbnRleHREZWxldGUoc28tPmFycmF5Q29udGV4 dCk7Ci0JaWYgKHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVkSXRl bXMpOwotCWlmIChzby0+Y3VyclR1cGxlcyAhPSBOVUxMKQotCQlwZnJlZShzby0+Y3VyclR1cGxl cyk7Ci0JLyogc28tPm1hcmtUdXBsZXMgc2hvdWxkIG5vdCBiZSBwZnJlZSdkLCBzZWUgYnRyZXNj YW4gKi8KIAlwZnJlZShzbyk7CiB9CiAKIC8qCi0gKglidG1hcmtwb3MoKSAtLSBzYXZlIGN1cnJl bnQgc2NhbiBwb3NpdGlvbgorICoJYnRwb3NyZXNldCgpIC0tIHJlc2V0IGFycmF5IGtleSBzdGF0 ZSBmb3Igc2NhbiBwb3NpdGlvbiBjaGFuZ2UKKyAqCisgKiBDYWxsZWQgYnkgdGhlIGNvcmUgc3lz dGVtIHdoZW4gdGhlIHNjYW4ncyBsb2dpY2FsIHBvc2l0aW9uIGlzIGFib3V0IHRvCisgKiBjaGFu Z2UgaW4gYSB3YXkgdGhhdCBpbnZhbGlkYXRlcyBvdXIgYXJyYXkga2V5IHN0YXRlLiAgVGhpcyBo YXBwZW5zIHdoZW4KKyAqIHJlc3RvcmluZyBhIG1hcmtlZCBwb3NpdGlvbiwgb3Igd2hlbiB0aGUg c2NhbiBjcm9zc2VzIGEgYmF0Y2ggYm91bmRhcnkKKyAqIHdoaWxlIG1vdmluZyBpbiB0aGUgb3Bw b3NpdGUgZGlyZWN0aW9uIHRvIHRoZSBvbmUgb3JpZ2luYWxseSB1c2VkLgorICoKKyAqIEZvciBk aXJlY3Rpb24gY2hhbmdlcywgdGhlIGNvcmUgc3lzdGVtIHdpbGwgaGF2ZSBhbHJlYWR5IGZsaXBw ZWQgdGhlCisgKiBiYXRjaCdzIGRpciBmaWVsZCBiZWZvcmUgY2FsbGluZyBoZXJlOyB3ZSB1c2Ug dGhpcyB1cGRhdGVkIGRpcmVjdGlvbiB3aGVuCisgKiByZXNldHRpbmcgb3VyIGFycmF5IGtleXMu ICBGb3IgbWFyayByZXN0b3JhdGlvbiwgdGhlIGJhdGNoJ3MgZGlyIHdpbGwKKyAqIHJldGFpbiBp dHMgb3JpZ2luYWwgdmFsdWUgKGZyb20gd2hlbiBidGdldGJhdGNoIHJldHVybmVkIGl0KS4KICAq Lwogdm9pZAotYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK2J0cG9zcmVzZXQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlCVFNjYW5PcGFxdWUgc28g PSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBC VEJhdGNoR2V0RGF0YShiYXRjaCk7CiAKLQkvKiBUaGVyZSBtYXkgYmUgYW4gb2xkIG1hcmsgd2l0 aCBhIHBpbiAoYnV0IG5vIGxvY2spLiAqLwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1h cmtQb3MpOworCWlmICghc28tPm51bUFycmF5S2V5cykKKwkJcmV0dXJuOwogCiAJLyoKLQkgKiBK dXN0IHJlY29yZCB0aGUgY3VycmVudCBpdGVtSW5kZXguICBJZiB3ZSBsYXRlciBzdGVwIHRvIG5l eHQgcGFnZQotCSAqIGJlZm9yZSByZWxlYXNpbmcgdGhlIG1hcmtlZCBwb3NpdGlvbiwgX2J0X3N0 ZXBwYWdlIG1ha2VzIGEgZnVsbCBjb3B5IG9mCi0JICogdGhlIGN1cnJQb3Mgc3RydWN0IGluIG1h cmtQb3MuICBJZiAoYXMgb2Z0ZW4gaGFwcGVucykgdGhlIG1hcmsgaXMgbW92ZWQKLQkgKiBiZWZv cmUgd2UgbGVhdmUgdGhlIHBhZ2UsIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhhdCB3b3JrLgorCSAq IFJlc2V0IGFycmF5IGtleXMgdG8gaW5pdGlhbCBzdGF0ZSBmb3IgdGhlIGJhdGNoJ3Mgc2NhbiBk aXJlY3Rpb24uICBBbHNvCisJICogY2xlYXIgbmVlZFByaW1TY2FuIGFuZCByZWxhdGVkIGZsYWdz LiAgVGhlc2Ugd2VyZSBzZXQgYmFzZWQgb24gdGhlIHNvZnQKKwkgKiBhc3N1bXB0aW9uIHRoYXQg dGhlIHNjYW4gd291bGQgYWx3YXlzIHByb2NlZWQgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLgorCSAq CisJICogVGhlc2Ugc3RlcHMgd29yayBhcm91bmQgdGhlIHNvZnQgYXNzdW1wdGlvbiBiZWluZyB2 aW9sYXRlZDogdGhleSBmb3JjZQorCSAqIHRoZSBzY2FuIHRvIHN0ZXAgdG8gdGhlIG5leHQvcHJl dmlvdXMgcGFnZSwgbWFraW5nIHRoZSBhcnJheXMgcmVjb3Zlci4KKwkgKiBXaGVuIHdlIGdvIHRv IHJlYWQgdGhhdCBwYWdlLCBfYnRfcmVhZHBhZ2Ugd2lsbCByZWxpYWJseSBkZXRlcm1pbmUgaWYg YQorCSAqIHByaW1pdGl2ZSBzY2FuIHJlYWxseSBpcyBuZWVkZWQgYmFzZWQgb24gdGhlIHBhZ2Un cyB0dXBsZXMuICBJZiB0aGVyZSdzCisJICogYSBwcmltaXRpdmUgc2NhbiwgaXQgd2lsbCByZXBv c2l0aW9uIHRoZSBzY2FuIHVzaW5nIG5ldyBhcnJheSB2YWx1ZXMKKwkgKiAoYmFzZWQgb24gdGhl IHR1cGxlcyBmcm9tIHRoZSBuZWlnaGJvcmluZyBwYWdlIHdlJ2xsIHN0ZXAgb24gdG8pLgorCSAq CisJICogV2UgbmVlZCB0byByZXNldCB0aGUgYXJyYXkga2V5IHN0YXRlIGluIHRoZSBjb3JyZWN0 IGRpcmVjdGlvbiBzbyB0aGF0CisJICogd2Ugd29uJ3QgZ2V0IGNvbmZ1c2VkLiAgV2hlbiB0aGUg YXJyYXkga2V5cyBhcmUgYmVoaW5kIHRoZSBrZXkgc3BhY2UKKwkgKiBmb3IgdGhlIHBhZ2Ugd2Un cmUgc3RlcHBpbmcgb24gdG8gKGJlaGluZCBpbiB0ZXJtcyBvZiB0aGUgc2NhbiBkaXIpLAorCSAq IHRoZXkgd2lsbCBjYXRjaCB1cCBhdXRvbWF0aWNhbGx5LiAgQnV0IHdoZW4gdGhleSdyZSBhaGVh ZCBvZiB0aGF0CisJICogcGFnZSdzIGtleSBzcGFjZSwgdGhlIHNjYW4gY291bGQgbWlzcyBtYXRj aGluZyB0dXBsZXMuCiAJICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQot CQlzby0+bWFya0l0ZW1JbmRleCA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKKwlfYnRfc3RhcnRf YXJyYXlfa2V5cyhzY2FuLCBiYXRjaC0+ZGlyKTsKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChiYXRjaC0+ZGlyKSkKKwkJYnRiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAllbHNlCi0Jewot CQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQkJc28tPm1hcmtJdGVtSW5kZXgg PSAtMTsKLQl9Ci19Ci0KLS8qCi0gKglidHJlc3RycG9zKCkgLS0gcmVzdG9yZSBzY2FuIHRvIGxh c3Qgc2F2ZWQgcG9zaXRpb24KLSAqLwotdm9pZAotYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNj YW4pCi17Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwot Ci0JaWYgKHNvLT5tYXJrSXRlbUluZGV4ID49IDApCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBo YXMgbmV2ZXIgbW92ZWQgdG8gYSBuZXcgcGFnZSBzaW5jZSB0aGUgbGFzdCBtYXJrLiAgSnVzdAot CQkgKiByZXN0b3JlIHRoZSBpdGVtSW5kZXguCi0JCSAqCi0JCSAqIE5COiBJbiB0aGlzIGNhc2Ug d2UgY2FuJ3QgY291bnQgb24gYW55dGhpbmcgaW4gc28tPm1hcmtQb3MgdG8gYmUKLQkJICogYWNj dXJhdGUuCi0JCSAqLwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1JbmRl eDsKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogVGhlIHNjYW4gbW92ZWQgdG8gYSBuZXcgcGFn ZSBhZnRlciBsYXN0IG1hcmsgb3IgcmVzdG9yZSwgYW5kIHdlIGFyZQotCQkgKiBub3cgcmVzdG9y aW5nIHRvIHRoZSBtYXJrZWQgcGFnZS4gIFdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFkCi0JCSAq IGxvY2tzLCBidXQgaWYgd2UncmUgc3RpbGwgaG9sZGluZyB0aGUgcGluIGZvciB0aGUgY3VycmVu dCBwb3NpdGlvbiwKLQkJICogd2UgbXVzdCBkcm9wIGl0LgotCQkgKi8KLQkJaWYgKEJUU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQl7Ci0JCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50 IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCQlpZiAoc28tPm51bUtpbGxl ZCA+IDApCi0JCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJCUJUU2NhblBvc1VucGluSWZQaW5u ZWQoc28tPmN1cnJQb3MpOwotCQl9Ci0KLQkJaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPm1hcmtQ b3MpKQotCQl7Ci0JCQkvKiBidW1wIHBpbiBvbiBtYXJrIGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0 byBjdXJyZW50IGJ1ZmZlciAqLwotCQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNvLT5tYXJrUG9z KSkKLQkJCQlJbmNyQnVmZmVyUmVmQ291bnQoc28tPm1hcmtQb3MuYnVmKTsKLQkJCW1lbWNweSgm c28tPmN1cnJQb3MsICZzby0+bWFya1BvcywKLQkJCQkgICBvZmZzZXRvZihCVFNjYW5Qb3NEYXRh LCBpdGVtc1sxXSkgKwotCQkJCSAgIHNvLT5tYXJrUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2Nh blBvc0l0ZW0pKTsKLQkJCWlmIChzby0+Y3VyclR1cGxlcykKLQkJCQltZW1jcHkoc28tPmN1cnJU dXBsZXMsIHNvLT5tYXJrVHVwbGVzLAotCQkJCQkgICBzby0+bWFya1Bvcy5uZXh0VHVwbGVPZmZz ZXQpOwotCQkJLyogUmVzZXQgdGhlIHNjYW4ncyBhcnJheSBrZXlzIChzZWUgX2J0X3N0ZXBwYWdl IGZvciB3aHkpICovCi0JCQlpZiAoc28tPm51bUFycmF5S2V5cykKLQkJCXsKLQkJCQlfYnRfc3Rh cnRfYXJyYXlfa2V5cyhzY2FuLCBzby0+Y3VyclBvcy5kaXIpOwotCQkJCXNvLT5uZWVkUHJpbVNj YW4gPSBmYWxzZTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNv LT5jdXJyUG9zKTsKLQl9CisJCWJ0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwlzby0+bmVlZFBy aW1TY2FuID0gZmFsc2U7CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVE aXJDaGVjayA9IGZhbHNlOwogfQogCiAvKgpAQCAtODgwLDE1ICs5MjEsNiBAQCBfYnRfcGFyYWxs ZWxfc2VpemUoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciAqbmV4dF9zY2FuX3BhZ2Us CiAJKm5leHRfc2Nhbl9wYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCSpsYXN0X2N1cnJfcGFn ZSA9IEludmFsaWRCbG9ja051bWJlcjsKIAotCS8qCi0JICogUmVzZXQgc28tPmN1cnJQb3MsIGFu ZCBpbml0aWFsaXplIG1vcmVMZWZ0L21vcmVSaWdodCBzdWNoIHRoYXQgdGhlIG5leHQKLQkgKiBj YWxsIHRvIF9idF9yZWFkbmV4dHBhZ2UgdHJlYXRzIHRoaXMgYmFja2VuZCBzaW1pbGFybHkgdG8g YSBzZXJpYWwKLQkgKiBiYWNrZW5kIHRoYXQgc3RlcHMgZnJvbSAqbGFzdF9jdXJyX3BhZ2UgdG8g Km5leHRfc2Nhbl9wYWdlICh1bmxlc3MgdGhpcwotCSAqIGJhY2tlbmQncyBzby0+Y3VyclBvcyBp cyBpbml0aWFsaXplZCBieSBfYnRfcmVhZGZpcnN0cGFnZSBiZWZvcmUgdGhlbikuCi0JICovCi0J QlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0Jc28tPmN1cnJQb3MubW9yZUxlZnQg PSBzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOwotCiAJaWYgKGZpcnN0KQogCXsKIAkJLyoK QEAgLTEwMzgsOCArMTA3MCw2IEBAIF9idF9wYXJhbGxlbF9kb25lKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAlCVFBhcmFsbGVsU2NhbkRlc2MgYnRzY2FuOwogCWJvb2wJCXN0YXR1c19jaGFuZ2VkID0g ZmFsc2U7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQogCS8q IERvIG5vdGhpbmcsIGZvciBub24tcGFyYWxsZWwgc2NhbnMgKi8KIAlpZiAocGFyYWxsZWxfc2Nh biA9PSBOVUxMKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpp bmRleCBhYWU2YWNiN2YuLjRkMWIxMTFkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNl YXJjaC5jCkBAIC0yMyw1MyArMjMsNDkgQEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2lu Y2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3Rh dGljIGlubGluZSB2b2lkIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWws IEJUU2Nhbk9wYXF1ZSBzbyk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X2JhdGNoX3VubG9jayhJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCQkJQnVmZmVy IGJ1Zik7CiBzdGF0aWMgQnVmZmVyIF9idF9tb3ZlcmlnaHQoUmVsYXRpb24gcmVsLCBSZWxhdGlv biBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJCUJ1ZmZlciBidWYsIGJvb2wgZm9y dXBkYXRlLCBCVFN0YWNrIHN0YWNrLAogCQkJCQkJCWludCBhY2Nlc3MpOwogc3RhdGljIE9mZnNl dE51bWJlciBfYnRfYmluc3JjaChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIEJ1ZmZl ciBidWYpOwogc3RhdGljIGludAlfYnRfYmluc3JjaF9wb3N0aW5nKEJUU2Nhbkluc2VydCBrZXks IFBhZ2UgcGFnZSwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1zdGF0aWMgaW5saW5l IHZvaWQgX2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5PcGFxdWUgc28p Owotc3RhdGljIGJvb2wgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOwotc3RhdGljIGJvb2wgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXIpOwot c3RhdGljIGJvb2wgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVt YmVyIGJsa25vLAotCQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0 aW9uIGRpciwKLQkJCQkJCQkgYm9vbCBzZWl6ZWQpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9i dF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggZmlyc3Ri YXRjaCwKKwkJCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7 CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEJsb2NrTnVtYmVyIGJsa25vLAorCQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgbGFzdGN1cnJi bGtubywKKwkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSk7CiBz dGF0aWMgQnVmZmVyIF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KFJlbGF0aW9uIHJlbCwgQmxv Y2tOdW1iZXIgKmJsa25vLAogCQkJCQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vKTsK LXN0YXRpYyBib29sIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggZmly c3RiYXRjaCk7CiAKIAogLyoKLSAqCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbigpCisgKiBf YnRfYmF0Y2hfdW5sb2NrKCkgLS0gbmJ0cmVlIHdyYXBwZXIgZm9yIGluZGV4YW1fdXRpbF9iYXRj aF91bmxvY2suCiAgKgotICogVW5sb2NrIHNvLT5jdXJyUG9zLmJ1Zi4gIElmIHNjYW4gaXMgc28t PmRyb3BQaW4sIGRyb3AgdGhlIHBpbiwgdG9vLgotICogRHJvcHBpbmcgdGhlIHBpbiBwcmV2ZW50 cyBWQUNVVU0gZnJvbSBibG9ja2luZyBvbiBhY3F1aXJpbmcgYSBjbGVhbnVwIGxvY2suCisgKiBQ ZXJmb3JtcyB0aGUgc2FtZSBWYWxncmluZCBpbnN0cnVtZW50YXRpb24gYXMgX2J0X3VubG9ja2J1 Zi4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1fYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4o UmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pCitfYnRfYmF0Y2hfdW5sb2NrKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJ1ZmZlciBidWYpCiB7Ci0JaWYgKCFz by0+ZHJvcFBpbikKLQl7Ci0JCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRoZSBwaW4pICov Ci0JCV9idF91bmxvY2tidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlyZXR1cm47Ci0JfQor I2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1 Zik7CiAKLQkvKgotCSAqIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLQkgKgotCSAq IEhhdmUgdG8gc2V0IHNvLT5jdXJyUG9zLmxzbiBzbyB0aGF0IF9idF9raWxsaXRlbXMgaGFzIGEg d2F5IHRvIGRldGVjdAotCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xpbmcgYnkg VkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCi0JICovCi0Jc28tPmN1cnJQb3MubHNuID0g QnVmZmVyR2V0TFNOQXRvbWljKHNvLT5jdXJyUG9zLmJ1Zik7Ci0JX2J0X3JlbGJ1ZihyZWwsIHNv LT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwlWQUxH UklORF9DSEVDS19NRU1fSVNfREVGSU5FRChwYWdlLCBCTENLU1opOworI2VuZGlmCisKKwlpbmRl eGFtX3V0aWxfYmF0Y2hfdW5sb2NrKHNjYW4sIGJhdGNoLCBidWYpOworCisjaWYgZGVmaW5lZChV U0VfVkFMR1JJTkQpCisJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMoc2Nhbi0+aW5kZXhS ZWxhdGlvbikpCisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKHBhZ2UsIEJMQ0tTWik7Cisj ZW5kaWYKIH0KIAogLyoKQEAgLTg2MCwyNiArODU2LDIzIEBAIF9idF9jb21wYXJlKFJlbGF0aW9u IHJlbCwKIH0KIAogLyoKLSAqCV9idF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4g YSBzY2FuLgorICoJX2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0Y2ggaW4gYSBzY2Fu LgogICoKICAqCQlXZSBuZWVkIHRvIGJlIGNsZXZlciBhYm91dCB0aGUgZGlyZWN0aW9uIG9mIHNj YW4sIHRoZSBzZWFyY2gKLSAqCQljb25kaXRpb25zLCBhbmQgdGhlIHRyZWUgb3JkZXJpbmcuICBX ZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwKLSAqCQlpZiBiYWNrd2FyZHMgc2NhbiwgdGhlIGxh c3QgaXRlbSkgaW4gdGhlIHRyZWUgdGhhdCBzYXRpc2ZpZXMgdGhlCi0gKgkJcXVhbGlmaWNhdGlv bnMgaW4gdGhlIHNjYW4ga2V5LiAgT24gc3VjY2VzcyBleGl0LCBkYXRhIGFib3V0IHRoZQotICoJ CW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5j dXJyUG9zLiAgV2UnbGwKLSAqCQlkcm9wIGFsbCBsb2NrcyBhbmQgaG9sZCBvbnRvIGEgcGluIG9u IHBhZ2UncyBidWZmZXIsIGV4Y2VwdCBkdXJpbmcKLSAqCQlzby0+ZHJvcFBpbiBzY2Fucywgd2hl biB3ZSBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0gKgkJX2J0X3JldHVybml0ZW0g c2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0byBzY2FuIG9uIHN1Y2Nlc3MgZXhpdC4KKyAq CQljb25kaXRpb25zLCBhbmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBmaXJzdCBs ZWFmIHBhZ2UgKG9yCisgKgkJdGhlIGxhc3QgbGVhZiBwYWdlLCB3aGVuIHNjYW5uaW5nIGJhY2t3 YXJkcykgaW4gdGhlIHRyZWUgd2l0aCBhdCBsZWFzdAorICoJCW9uZSB0dXBsZSB0aGF0IHNhdGlz ZmllcyB0aGUgcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24KKyAqCQlzdWNjZXNz IGV4aXQsIHdlIHJldHVybiBhIG5ldyBiYXRjaCB3aXRoIHRoYXQgcGFnZSdzIG1hdGNoaW5nIGl0 ZW1zLgogICoKLSAqIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUgaW5kZXgs IHdlIHJldHVybiBmYWxzZSwgd2l0aCBubwotICogcGlucyBvciBsb2NrcyBoZWxkLiAgc28tPmN1 cnJQb3Mgd2lsbCByZW1haW4gaW52YWxpZC4KKyAqIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBp dGVtcyBpbiB0aGUgaW5kZXggKGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbiksCisgKiB3ZSBq dXN0IHJldHVybiBOVUxMLgogICoKICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0 aGUgc28tPmtleURhdGFbXSBzY2Fua2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFy Y2gtdHlwZSBzY2Fua2V5cyAoc2VlIG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcyku CiAgKiBXaXRoaW4gdGhpcyByb3V0aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24t dHlwZSBzY2Fua2V5IHRvIHVzZQogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRp b24uCiAgKi8KLWJvb2wKK0luZGV4U2NhbkJhdGNoCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJl bGF0aW9uOwpAQCAtODkyLDggKzg4NSwxMiBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFs aWRTdHJhdGVneTsKIAlCbG9ja051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJ CQlsYXN0Y3VycmJsa25vOworCUluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2g7CisJQlRCYXRjaERh dGEgKmJ0Zmlyc3RiYXRjaDsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWZpcnN0YmF0Y2gg PSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CisJYnRmaXJzdGJhdGNoID0gQlRCYXRj aEdldERhdGEoZmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIEV4YW1pbmUgdGhlIHNjYW4ga2V5cyBh bmQgZWxpbWluYXRlIGFueSByZWR1bmRhbnQga2V5czsgYWxzbyBtYXJrIHRoZQpAQCAtOTA5LDYg KzkwNiw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwog CQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC05MTgsNyArOTE2LDEwIEBAIF9idF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqLwogCWlmIChzY2FuLT5wYXJh bGxlbF9zY2FuICE9IE5VTEwgJiYKIAkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8s ICZsYXN0Y3VycmJsa25vLCB0cnVlKSkKLQkJcmV0dXJuIGZhbHNlOworCXsKKwkJaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBmYWxzZTsJCQkv KiBkZWZpbml0ZWx5IGRvbmUgKHNvLT5uZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCisJfQogCiAJ LyoKIAkgKiBJbml0aWFsaXplIHRoZSBzY2FuJ3MgYXJyYXlzIChpZiBhbnkpIGZvciB0aGUgY3Vy cmVudCBzY2FuIGRpcmVjdGlvbgpAQCAtOTM4LDExICs5MzksOSBAQCBfYnRfZmlyc3QoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1T Y2FuKTsKIAkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSk7CiAKLQkJaWYgKCFfYnRfcmVhZG5leHRw YWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpKQotCQkJcmV0dXJuIGZh bHNlOworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAot CQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gX2J0 X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0cnVlKTsKIAl9 CiAKIAkvKgpAQCAtMTI0Miw3ICsxMjQxLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogTm90ZTogY2FsbHMgX2J0X3JlYWRmaXJzdHBhZ2Ug Zm9yIHVzLCB3aGljaCByZWxlYXNlcyB0aGUgcGFyYWxsZWwgc2Nhbi4KIAkgKi8KIAlpZiAoa2V5 c3ogPT0gMCkKLQkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIpOworCQlyZXR1cm4gX2J0 X2VuZHBvaW50KHNjYW4sIGRpciwgZmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIFdlIHdhbnQgdG8g c3RhcnQgdGhlIHNjYW4gc29tZXdoZXJlIHdpdGhpbiB0aGUgaW5kZXguICBTZXQgdXAgYW4KQEAg LTE1MTAsOSArMTUwOSw5IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCSAqIHBvc2l0aW9uIG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFn ZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXku YmFja3dhcmQpOwotCV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3Mu YnVmLCBCVF9SRUFELCBmYWxzZSk7CisJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZi dGZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlk KHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYgKHVubGlrZWx5KCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3Ri YXRjaC0+YnVmKSkpCiAJewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCkBAIC0xNTI4 LDIyICsxNTI3LDIzIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCQlpZiAoSXNvbGF0aW9uSXNTZXJpYWxpemFibGUoKSkKIAkJewogCQkJUHJlZGlj YXRlTG9ja1JlbGF0aW9uKHJlbCwgc2Nhbi0+eHNfc25hcHNob3QpOwotCQkJX2J0X3NlYXJjaChy ZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQsIGZhbHNlKTsKKwkJ CV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmYnRmaXJzdGJhdGNoLT5idWYsIEJUX1JF QUQsIGZhbHNlKTsKIAkJfQogCi0JCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYp KQorCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnRmaXJzdGJhdGNoLT5idWYpKQogCQl7CiAJCQlfYnRf cGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4s IGZpcnN0YmF0Y2gpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQogCiAJLyogcG9zaXRpb24g dG8gdGhlIHByZWNpc2UgaXRlbSBvbiB0aGUgcGFnZSAqLwotCW9mZm51bSA9IF9idF9iaW5zcmNo KHJlbCwgJmluc2tleSwgc28tPmN1cnJQb3MuYnVmKTsKKwlvZmZudW0gPSBfYnRfYmluc3JjaChy ZWwsICZpbnNrZXksIGJ0Zmlyc3RiYXRjaC0+YnVmKTsKIAogCS8qCiAJICogTm93IGxvYWQgZGF0 YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuICh1c3VhbGx5IHRoZSBwYWdlCi0JICog Y3VycmVudGx5IGluIHNvLT5jdXJyUG9zLmJ1ZikuCisJICogY3VycmVudGx5IGluIGZpcnN0YmF0 Y2guYnVmKS4KIAkgKgogCSAqIElmIGluc2tleS5uZXh0a2V5ID0gZmFsc2UgYW5kIGluc2tleS5i YWNrd2FyZCA9IGZhbHNlLCBvZmZudW0gaXMKIAkgKiBwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdCBu b24tcGl2b3QgdHVwbGUgPj0gaW5za2V5LnNjYW5rZXlzLgpAQCAtMTU2MSwxNjUgKzE1NjEsNzMg QEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICog Zm9yIHRoZSBwYWdlLiAgRm9yIGV4YW1wbGUsIHdoZW4gaW5za2V5IGlzIGJvdGggPCB0aGUgbGVh ZiBwYWdlJ3MgaGlnaAogCSAqIGtleSBhbmQgPiBhbGwgb2YgaXRzIG5vbi1waXZvdCB0dXBsZXMs IG9mZm51bSB3aWxsIGJlICJtYXhvZmYgKyAxIi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmlyc3Rw YWdlKHNjYW4sIG9mZm51bSwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0 ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOworCXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShz Y2FuLCBmaXJzdGJhdGNoLCBvZmZudW0sIGRpcik7CiB9CiAKIC8qCi0gKglfYnRfbmV4dCgpIC0t IEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBu ZXh0IGJhdGNoIGluIGEgc2Nhbi4KICAqCi0gKgkJT24gZW50cnksIHNvLT5jdXJyUG9zIGRlc2Ny aWJlcyB0aGUgY3VycmVudCBwYWdlLCB3aGljaCBtYXkgYmUgcGlubmVkCi0gKgkJYnV0IGlzIG5v dCBsb2NrZWQsIGFuZCBzby0+Y3VyclBvcy5pdGVtSW5kZXggaWRlbnRpZmllcyB3aGljaCBpdGVt IHdhcwotICoJCXByZXZpb3VzbHkgcmV0dXJuZWQuCisgKgkJT24gZW50cnksIHByaW9yYmF0Y2gg ZGVzY3JpYmVzIHRoZSBiYXRjaCB0aGF0IHdhcyBsYXN0IHJldHVybmVkIGJ5CisgKgkJYnRnZXRi YXRjaC4gIFdlJ2xsIHVzZSB0aGUgcHJpb3IgYmF0Y2gncyBwb3NpdGlvbmluZyBpbmZvcm1hdGlv biB0bworICoJCWRlY2lkZSB3aGljaCBsZWFmIHBhZ2UgdG8gcmVhZCBuZXh0LgogICoKLSAqCQlP biBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLCBhbmQgX2J0 X3JldHVybml0ZW0KLSAqCQlzZXRzIHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHRoZSBzY2Fu LiAgc28tPmN1cnJQb3MgcmVtYWlucyB2YWxpZC4KLSAqCi0gKgkJT24gZmFpbHVyZSBleGl0IChu byBtb3JlIHR1cGxlcyksIHdlIGludmFsaWRhdGUgc28tPmN1cnJQb3MuICBJdCdsbAotICoJCXN0 aWxsIGJlIHBvc3NpYmxlIGZvciB0aGUgc2NhbiB0byByZXR1cm4gdHVwbGVzIGJ5IGNoYW5naW5n IGRpcmVjdGlvbiwKLSAqCQl0aG91Z2ggd2UnbGwgbmVlZCB0byBjYWxsIF9idF9maXJzdCBhbmV3 IGluIHRoYXQgb3RoZXIgZGlyZWN0aW9uLgorICoJCU9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB0 aGUgbmV4dCBiYXRjaC4gIFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lCisgKgkJbWF0Y2hpbmcg dHVwbGUgb24gYW55IHJldHVybmVkIGJhdGNoIChlbHNlIHdlJ2QganVzdCByZXR1cm4gTlVMTCku CiAgKi8KLWJvb2wKLV9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCi17Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwot Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWR2 YW5jZSB0byBuZXh0IHR1cGxlIG9uIGN1cnJlbnQgcGFnZTsgb3IgaWYgdGhlcmUncyBubyBtb3Jl LCB0cnkgdG8KLQkgKiBzdGVwIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhLgotCSAqLwotCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JewotCQlpZiAoKytzby0+Y3VyclBvcy5p dGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBh Z2Uoc2NhbiwgZGlyKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJ aWYgKC0tc28tPmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7 Ci0JCQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJ fQotCX0KLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQot LyoKLSAqIFJldHVybiB0aGUgaW5kZXggaXRlbSBmcm9tIHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5j dXJyUG9zLml0ZW1JbmRleF0gdG8gdGhlCi0gKiBpbmRleCBzY2FuIGJ5IHNldHRpbmcgdGhlIHJl bGV2YW50IGZpZWxkcyBpbiBjYWxsZXIncyBpbmRleCBzY2FuIGRlc2NyaXB0b3IKLSAqLwotc3Rh dGljIGlubGluZSB2b2lkCi1fYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nh bk9wYXF1ZSBzbykKLXsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCi0JLyogTW9zdCByZWNlbnQgX2J0X3JlYWRw YWdlIG11c3QgaGF2ZSBzdWNjZWVkZWQgKi8KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPj0gc28tPmN1cnJQb3Mu Zmlyc3RJdGVtKTsKLQlBc3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9z Lmxhc3RJdGVtKTsKLQotCS8qIFJldHVybiBuZXh0IGl0ZW0sIHBlciBhbWdldHR1cGxlIGNvbnRy YWN0ICovCi0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOwotCWlmIChzby0+ Y3VyclR1cGxlcykKLQkJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBs ZXMgKyBjdXJySXRlbS0+dHVwbGVPZmZzZXQpOwotfQotCi0vKgotICoJX2J0X3N0ZXBwYWdlKCkg LS0gU3RlcCB0byBuZXh0IHBhZ2UgY29udGFpbmluZyB2YWxpZCBkYXRhIGZvciBzY2FuCi0gKgot ICogV3JhcHBlciBvbiBfYnRfcmVhZG5leHRwYWdlIHRoYXQgcGVyZm9ybXMgZmluYWwgc3RlcHMg Zm9yIHRoZSBjdXJyZW50IHBhZ2UuCi0gKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3Qg YmUgdmFsaWQuICBJdHMgYnVmZmVyIHdpbGwgYmUgcGlubmVkLCB0aG91Z2gKLSAqIG5ldmVyIGxv Y2tlZC4gKEFjdHVhbGx5LCB3aGVuIHNvLT5kcm9wUGluIHRoZXJlIHdvbid0IGV2ZW4gYmUgYSBw aW4gaGVsZCwKLSAqIHRob3VnaCBzby0+Y3VyclBvcy5jdXJyUGFnZSBtdXN0IHN0aWxsIGJlIHNl dCB0byBhIHZhbGlkIGJsb2NrIG51bWJlci4pCi0gKi8KLXN0YXRpYyBib29sCi1fYnRfc3RlcHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNo CitfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNj YW5CYXRjaCBwcmlvcmJhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRwcmlvcmJhdGNoID0gQlRCYXRjaEdldERh dGEocHJpb3JiYXRjaCk7CiAJQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJbGFzdGN1cnJibGtubzsK LQotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKiBCZWZvcmUg bGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JaWYg KHNvLT5udW1LaWxsZWQgPiAwKQotCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCi0JLyoKLQkgKiBC ZWZvcmUgd2UgbW9kaWZ5IGN1cnJQb3MsIG1ha2UgYSBjb3B5IG9mIHRoZSBwYWdlIGRhdGEgaWYg dGhlcmUgd2FzIGEKLQkgKiBtYXJrIHBvc2l0aW9uIHRoYXQgbmVlZHMgaXQuCi0JICovCi0JaWYg KHNvLT5tYXJrSXRlbUluZGV4ID49IDApCi0JewotCQkvKiBidW1wIHBpbiBvbiBjdXJyZW50IGJ1 ZmZlciBmb3IgYXNzaWdubWVudCB0byBtYXJrIGJ1ZmZlciAqLwotCQlpZiAoQlRTY2FuUG9zSXNQ aW5uZWQoc28tPmN1cnJQb3MpKQotCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNvLT5jdXJyUG9zLmJ1 Zik7Ci0JCW1lbWNweSgmc28tPm1hcmtQb3MsICZzby0+Y3VyclBvcywKLQkJCSAgIG9mZnNldG9m KEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkgICBzby0+Y3VyclBvcy5sYXN0SXRlbSAq IHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCWlmIChzby0+bWFya1R1cGxlcykKLQkJCW1lbWNw eShzby0+bWFya1R1cGxlcywgc28tPmN1cnJUdXBsZXMsCi0JCQkJICAgc28tPmN1cnJQb3MubmV4 dFR1cGxlT2Zmc2V0KTsKLQkJc28tPm1hcmtQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5k ZXg7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0KLQkJLyoKLQkJICogSWYgd2UncmUganVz dCBhYm91dCB0byBzdGFydCB0aGUgbmV4dCBwcmltaXRpdmUgaW5kZXggc2NhbgotCQkgKiAocG9z c2libGUgd2l0aCBhIHNjYW4gdGhhdCBoYXMgYXJyYXlzIGtleXMsIGFuZCBuZWVkcyB0byBza2lw IHRvCi0JCSAqIGNvbnRpbnVlIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSwgbW9yZUxl ZnQvbW9yZVJpZ2h0IG9ubHkKLQkJICogaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBw cmltaXRpdmUgaW5kZXggc2Nhbi4gIFRoZXkgbXVzdAotCQkgKiBuZXZlciBiZSB0YWtlbiB0byBp bmRpY2F0ZSB0aGF0IHRoZSB0b3AtbGV2ZWwgaW5kZXggc2NhbiBoYXMgZW5kZWQKLQkJICogKHRo YXQgd291bGQgYmUgd3JvbmcpLgotCQkgKgotCQkgKiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBjYXNl IGJ5IHRyZWF0aW5nIHRoZSBjdXJyZW50IGFycmF5IGtleXMgYXMKLQkJICogbWFya1BvcyBzdGF0 ZS4gIEJ1dCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYXJyYXkgc3RhdGUgbGlrZSB0aGlzCi0J CSAqIHdvdWxkIGFkZCBjb21wbGV4aXR5LiAgSW5zdGVhZCwgd2UganVzdCB1bnNldCBtYXJrUG9z J3MgY29weSBvZgotCQkgKiBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgKHdoaWNoZXZlciBtaWdodCBi ZSBhZmZlY3RlZCksIHdoaWxlIG1ha2luZwotCQkgKiBidHJlc3RycG9zIHJlc2V0IHRoZSBzY2Fu J3MgYXJyYXlzIHRvIHRoZWlyIGluaXRpYWwgc2NhbiBwb3NpdGlvbnMuCi0JCSAqIEluIGVmZmVj dCwgYnRyZXN0cnBvcyBsZWF2ZXMgYWR2YW5jaW5nIHRoZSBhcnJheXMgdXAgdG8gdGhlIGZpcnN0 Ci0JCSAqIF9idF9yZWFkcGFnZSBjYWxsICh0aGF0IHRha2VzIHBsYWNlIGFmdGVyIGl0IGhhcyBy ZXN0b3JlZCBtYXJrUG9zKS4KLQkJICovCi0JCWlmIChzby0+bmVlZFByaW1TY2FuKQotCQl7Ci0J CQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChzby0+Y3VyclBvcy5kaXIpKQotCQkJCXNvLT5t YXJrUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0JCQllbHNlCi0JCQkJc28tPm1hcmtQb3MubW9yZUxl ZnQgPSB0cnVlOwotCQl9Ci0KLQkJLyogbWFyay9yZXN0b3JlIG5vdCBzdXBwb3J0ZWQgYnkgcGFy YWxsZWwgc2NhbnMgKi8KLQkJQXNzZXJ0KCFzY2FuLT5wYXJhbGxlbF9zY2FuKTsKLQl9Ci0KLQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKKwlib29sCQltb3JlSW5EaXI7CiAK IAkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCiAJaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoZGlyKSkKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJYmxr bm8gPSBidHByaW9yYmF0Y2gtPm5leHRQYWdlOwogCWVsc2UKLQkJYmxrbm8gPSBzby0+Y3VyclBv cy5wcmV2UGFnZTsKLQlsYXN0Y3VycmJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7CisJCWJs a25vID0gYnRwcmlvcmJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRwcmlvcmJh dGNoLT5jdXJyUGFnZTsKKwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikg PworCQlidHByaW9yYmF0Y2gtPm1vcmVSaWdodCA6IGJ0cHJpb3JiYXRjaC0+bW9yZUxlZnQ7CiAK IAkvKgotCSAqIENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVkdWxl ZCB3aGVuIHRoZSBjYWxsIHRvCi0JICogX2J0X3JlYWRwYWdlIGZvciBjdXJyUG9zIGhhcHBlbmVk IHRvIHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZQotCSAqIG9uZSB0aGF0IHdlJ3Jl IHN0ZXBwaW5nIGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJheQot CSAqIGtleXMgYXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFuY2Ug dGhlbS4pCisJICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2NoZWR1 bGVkIHdoZW4gcHJpb3JiYXRjaCdzIGNhbGwKKwkgKiB0byBfYnRfcmVhZHBhZ2UgaGFwcGVuZWQg dG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlIG9uZSB0aGF0CisJICogd2UncmUg c3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5IGtl eXMKKwkgKiBhcy1pcywgc2luY2UgdGhlIG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0 aGVtLikKIAkgKi8KLQlpZiAoc28tPmN1cnJQb3MuZGlyICE9IGRpcikKKwlpZiAocHJpb3JiYXRj aC0+ZGlyICE9IGRpcikKIAkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwogCisJLyoKKwkgKiBG b3IgYml0bWFwIHNjYW4gY2FsbGVycywgcmVsZWFzZSB0aGUgcHJpb3IgYmF0Y2ggbm93IHNvIHRo YXQKKwkgKiBfYnRfcmVhZG5leHRwYWdlIGNhbiByZXVzZSBpdHMgbWVtb3J5LiAgVGhpcyB3YXkg Yml0bWFwIHNjYW5zIG5ldmVyCisJICogbmVlZCBtb3JlIHRoYW4gb25lIGJhdGNoIGFsbG9jYXRp b24uCisJICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYgKGJsa25vID09IFBfTk9ORSB8fCAh bW9yZUluRGlyKQorCXsKKwkJLyoKKwkJICogcHJpb3JiYXRjaCdzIHBhZ2UgaXMga25vd24gdG8g YmUgdGhlIGZpbmFsIGxlYWYgcGFnZSB3aXRoIG1hdGNoZXMKKwkJICogaW4gdGhpcyBzY2FuIGRp cmVjdGlvbiAoaXRzIF9idF9yZWFkcGFnZSBjYWxsIGZpZ3VyZWQgdGhhdCBvdXQpLgorCQkgKgor CQkgKiBOb3RlOiBpZiBzby0+bmVlZFByaW1TY2FuIGlzIHNldCwgdGhlbiBwcmlvcmJhdGNoJ3Mg bGVhZiBwYWdlIGlzCisJCSAqIGFjdHVhbGx5IGp1c3QgdGhlIGZpbmFsIHBhZ2UgZm9yIHRoZSBj dXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuCisJCSAqIGluIHRoaXMgc2NhbiBkaXJlY3Rpb24g KHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KS4KKwkJICovCisJCV9idF9wYXJh bGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBwYXJhbGxlbCBzY2Fu IG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwlpZiAoc2Nhbi0+cGFy YWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25v LCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBkb25lIGlmZiBz by0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKwogCXJldHVybiBfYnRfcmVhZG5leHRwYWdl KHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNlKTsKIH0KIApAQCAtMTczMiw3 MyArMTY0MCw5MSBAQCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKICAqIHRvIHN0b3AgdGhlIHNjYW4gb24gdGhpcyBwYWdlIGJ5IGNhbGxpbmcgX2J0 X2NoZWNra2V5cyBhZ2FpbnN0IHRoZSBoaWdoCiAgKiBrZXkuICBTZWUgX2J0X3JlYWRwYWdlIGZv ciBmdWxsIGRldGFpbHMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3QgYmUgcGlu bmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCisgKiBPbiBlbnRyeSwgZmly c3RiYXRjaCBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQp LgogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVm b3JlIGNhbGxpbmcgaGVyZS4KICAqCi0gKiBPbiBleGl0LCB3ZSdsbCBoYXZlIHVwZGF0ZWQgc28t PmN1cnJQb3MgYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCi0gKiBhY2NvcmRpbmcgdG8gdGhl IHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4dHBhZ2UgZXhpdC4K LSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgaWYg dGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9u LgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHVubG9ja2VkIGJhdGNoIGNvbnRhaW5pbmcg ZGF0YSBmcm9tIHRoZSBuZXh0IHBhZ2UKKyAqIHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBtYXRjaGlu ZyBpdGVtLiAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZQorICogZ2l2ZW4g c2NhbiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJuIE5VTEwuCiAgKgogICogV2UgYWx3YXlzIHJl bGVhc2UgdGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YK ICAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBh cyBzb29uIGFzIHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9vbAotX2J0X3JlYWRmaXJzdHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRp cikKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAorX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAorCQkJCSAgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0Y2ggPSBCVEJhdGNo R2V0RGF0YShmaXJzdGJhdGNoKTsKKwlCbG9ja051bWJlciBibGtubywKKwkJCQlsYXN0Y3VycmJs a25vOwogCi0Jc28tPm51bUtpbGxlZCA9IDA7CQkJLyoganVzdCBwYXJhbm9pYSAqLwotCXNvLT5t YXJrSXRlbUluZGV4ID0gLTE7CQkvKiBkaXR0byAqLwotCi0JLyogSW5pdGlhbGl6ZSBzby0+Y3Vy clBvcyBmb3IgdGhlIGZpcnN0IHBhZ2UgKHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmKSAqLworCS8q IEluaXRpYWxpemUgZmlyc3RiYXRjaCdzIHBvc2l0aW9uIGZvciB0aGUgZmlyc3QgcGFnZSAqLwog CWlmIChzby0+bmVlZFByaW1TY2FuKQogCXsKIAkJQXNzZXJ0KHNvLT5udW1BcnJheUtleXMpOwog Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJCWJ0Zmlyc3RiYXRj aC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwogCX0KIAll bHNlIGlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlzby0+Y3VyclBvcy5t b3JlTGVmdCA9IGZhbHNlOwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCQlidGZp cnN0YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0g dHJ1ZTsKIAl9CiAJZWxzZQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlz by0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCA9 IHRydWU7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJfQogCiAJLyoKIAkg KiBBdHRlbXB0IHRvIGxvYWQgbWF0Y2hpbmcgdHVwbGVzIGZyb20gdGhlIGZpcnN0IHBhZ2UuCiAJ ICoKLQkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0 aGUgc28tPmN1cnJQb3MgZmllbGRzLgorCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBm aW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBmaXJzdGJhdGNoIGZpZWxkcy4KIAkgKiBfYnRfcmVhZHBh Z2UgYWxzbyByZWxlYXNlcyBwYXJhbGxlbCBzY2FuIChldmVuIHdoZW4gaXQgcmV0dXJucyBmYWxz ZSkuCiAJICovCi0JaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIG9mZm51bSwgdHJ1ZSkpCisJ aWYgKF9idF9yZWFkcGFnZShzY2FuLCBmaXJzdGJhdGNoLCBkaXIsIG9mZm51bSwgdHJ1ZSkpCiAJ ewotCQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCi0JCS8qCi0JCSAqIF9i dF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBpbikg b24KLQkJICogc28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJl dHVybmluZyB0dXBsZXMuCi0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1 cnJQb3MpKTsKLQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOwotCQlyZXR1 cm4gdHJ1ZTsKKwkJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4g Zmlyc3RiYXRjaC5pdGVtc1tdICovCisJCV9idF9iYXRjaF91bmxvY2soc2NhbiwgZmlyc3RiYXRj aCwgYnRmaXJzdGJhdGNoLT5idWYpOworCQlyZXR1cm4gZmlyc3RiYXRjaDsKIAl9CiAKLQkvKiBU aGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgaW4gc28tPmN1cnJQ b3MuYnVmICovCi0JX2J0X3VubG9ja2J1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+Y3VyclBv cy5idWYpOworCS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFn ZSAqLworCV9idF9yZWxidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgYnRmaXJzdGJhdGNoLT5idWYp OwogCi0JLyogQ2FsbCBfYnRfcmVhZG5leHRwYWdlIHVzaW5nIGl0cyBfYnRfc3RlcHBhZ2Ugd3Jh cHBlciBmdW5jdGlvbiAqLwotCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCXJldHVy biBmYWxzZTsKKwkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCisJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYmxrbm8gPSBidGZpcnN0YmF0Y2gtPm5leHRQ YWdlOworCWVsc2UKKwkJYmxrbm8gPSBidGZpcnN0YmF0Y2gtPnByZXZQYWdlOworCWxhc3RjdXJy Ymxrbm8gPSBidGZpcnN0YmF0Y2gtPmN1cnJQYWdlOwogCi0JLyogX2J0X3JlYWRwYWdlIGZvciBh IGxhdGVyIHBhZ2UgKG5vdyBpbiBzby0+Y3VyclBvcykgc3VjY2VlZGVkICovCi0JcmV0dXJuIHRy dWU7CisJQXNzZXJ0KGZpcnN0YmF0Y2gtPmRpciA9PSBkaXIpOworCisJaWYgKGJsa25vID09IFBf Tk9ORSB8fAorCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJICFidGZpcnN0YmF0 Y2gtPm1vcmVSaWdodCA6ICFidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0KSkKKwl7CisJCS8qCisJCSAq IGZpcnN0YmF0Y2ggX2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlv biAodGhvdWdoCisJCSAqIGlmIHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxs IGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJICovCisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxl YXNlKHNjYW4sIGZpcnN0YmF0Y2gpOworCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3Ri YXRjaCk7CisKKwkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5l eHQgYmxrbm8gKi8KKwlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRf cGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQly ZXR1cm4gTlVMTDsJCQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8K KworCXJldHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBk aXIsIGZhbHNlKTsKIH0KIAogLyoKQEAgLTE4MDgsMTAyICsxNzM0LDY3IEBAIF9idF9yZWFkZmly c3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVj dGlvbiBkaXIpCiAgKiBwcmV2aW91c2x5LXNhdmVkIHJpZ2h0IGxpbmsgb3IgbGVmdCBsaW5rLiAg bGFzdGN1cnJibGtubyBpcyB0aGUgcGFnZSB0aGF0CiAgKiB3YXMgY3VycmVudCBhdCB0aGUgcG9p bnQgd2hlcmUgdGhlIGJsa25vIGxpbmsgd2FzIHNhdmVkLCB3aGljaCB3ZSB1c2UgdG8KICAqIHJl YXNvbiBhYm91dCBjb25jdXJyZW50IHBhZ2Ugc3BsaXRzL3BhZ2UgZGVsZXRpb25zIGR1cmluZyBi YWNrd2FyZHMgc2NhbnMuCi0gKiBJbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2VpemVkPWZhbHNl LCBibGtubyBpcyBlaXRoZXIgc28tPmN1cnJQb3MubmV4dFBhZ2UKLSAqIG9yIHNvLT5jdXJyUG9z LnByZXZQYWdlLCBhbmQgbGFzdGN1cnJibGtubyBpcyBzby0+Y3VyclBvcy5jdXJyUGFnZS4KKyAq IGJsa25vIGlzIHRoZSBwcmlvciBiYXRjaCdzIG5leHRQYWdlIG9yIHByZXZQYWdlIChkZXBlbmRp bmcgb24gdGhlIGN1cnJlbnQKKyAqIHNjYW4gZGlyZWN0aW9uKSwgYW5kIGxhc3RjdXJyYmxrbm8g aXMgdGhlIHByaW9yIGJhdGNoJ3MgY3VyclBhZ2UuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJy UG9zIHNob3VsZG4ndCBiZSBsb2NrZWQgYnkgY2FsbGVyLiAgc28tPmN1cnJQb3MuYnVmIG11c3QK LSAqIGJlIEludmFsaWRCdWZmZXIvdW5waW5uZWQgYXMgbmVlZGVkIGJ5IGNhbGxlciAobm90ZSB0 aGF0IGxhc3RjdXJyYmxrbm8KLSAqIHdvbid0IG5lZWQgdG8gYmUgcmVhZCBhZ2FpbiBpbiBhbG1v c3QgYWxsIGNhc2VzKS4gIFBhcmFsbGVsIHNjYW4gY2FsbGVycwotICogdGhhdCBzZWl6ZWQgdGhl IHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZSBzaG91bGQgcGFzcyBzZWl6ZWQ9dHJ1ZTsgc3VjaCBh Ci0gKiBjYWxsZXIncyBibGtubyBhbmQgbGFzdGN1cnJibGtubyBhcmd1bWVudHMgY29tZSBmcm9t IHRoZSBzZWl6ZWQgc2Nhbi4KLSAqIHNlaXplZD1mYWxzZSBjYWxsZXJzIGp1c3QgcGFzcyB1cyB0 aGUgYmxrbm8vbGFzdGN1cnJibGtubyB0YWtlbiBmcm9tIHRoZWlyCi0gKiBzby0+Y3VyclBvcywg d2hpY2ggKGFsb25nIHdpdGggc28tPmN1cnJQb3MgaXRzZWxmKSBjYW4gYmUgdXNlZCB0byBlbmQg dGhlCi0gKiBzY2FuLiAgQSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gY2FuIG5ldmVyIGJl IGFzc3VtZWQgdG8gYmUgdGhlIHBhZ2UKLSAqIHRoYXQgbXVzdCBiZSByZWFkIG5leHQgZHVyaW5n IGEgcGFyYWxsZWwgc2NhbiwgdGhvdWdoLiAgV2UgbXVzdCBmaWd1cmUgdGhhdAotICogcGFydCBv dXQgZm9yIG91cnNlbHZlcyBieSBzZWl6aW5nIHRoZSBzY2FuICh0aGUgY29ycmVjdCBwYWdlIHRv IHJlYWQgbWlnaHQKLSAqIGFscmVhZHkgYmUgYmV5b25kIHRoZSBzZWl6ZWQ9ZmFsc2UgY2FsbGVy J3MgYmxrbm8gZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwKLSAqIHVubGVzcyBibGtuby9zby0+Y3Vy clBvcy5uZXh0UGFnZS9zby0+Y3VyclBvcy5wcmV2UGFnZSBpcyBhbHJlYWR5IFBfTk9ORSwKLSAq IG9yIHVubGVzcyBzby0+Y3VyclBvcy5tb3JlUmlnaHQvc28tPmN1cnJQb3MubW9yZUxlZnQgaXMg YWxyZWFkeSB1bnNldCkuCisgKiBPbiBlbnRyeSwgbm8gcGFnZSBzaG91bGQgYmUgbG9ja2VkIGJ5 IGNhbGxlci4KICAqCi0gKiBPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQg dG8gY29udGFpbiBkYXRhIGZyb20gdGhlIG5leHQKLSAqIGludGVyZXN0aW5nIHBhZ2UsIGFuZCB3 ZSByZXR1cm4gdHJ1ZS4gIFdlIGhvbGQgYSBwaW4gb24gdGhlIGJ1ZmZlciBvbgotICogc3VjY2Vz cyBleGl0IChleGNlcHQgZHVyaW5nIHNvLT5kcm9wUGluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRy b3AgdGhlIHBpbgotICogZWFnZXJseSB0byBhdm9pZCBibG9ja2luZyBWQUNVVU0pLgorICogT24g c3VjY2VzcyBleGl0LCByZXR1cm5zIHVubG9ja2VkIGJhdGNoIGNvbnRhaW5pbmcgZGF0YSBmcm9t IHRoZSBuZXh0IHBhZ2UKKyAqIHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtLiAg SWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgaXRlbXMKKyAqIGluIHRoZSBnaXZlbiBzY2Fu IGRpcmVjdGlvbiwgd2UganVzdCByZXR1cm4gTlVMTC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8g bW9yZSBtYXRjaGluZyByZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGludmFsaWRh dGUKLSAqIHNvLT5jdXJyUG9zICh3aGlsZSBlbnN1cmluZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9y IHBpbnMpLCBhbmQgcmV0dXJuIGZhbHNlLgotICoKLSAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBz Y2FuIGZvciBhIHBhcmFsbGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNz IG9yIGZhaWx1cmU7IHdlJ2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBw b3NzaWJsZS4KKyAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IHNlaXplIHRoZSBzY2FuIGJl Zm9yZSBjYWxsaW5nIGhlcmUuICBibGtubyBhbmQKKyAqIGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNv bWUgZnJvbSB0aGUgc2VpemVkIHNjYW4uICBXZSdsbCByZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBz b29uIGFzIHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9vbAorc3RhdGljIEluZGV4U2NhbkJhdGNo CiBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8s Ci0JCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29s IHNlaXplZCkKKwkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBk aXIsIGJvb2wgZmlyc3RwYWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUlu ZGV4U2NhbkJhdGNoIG5ld2JhdGNoOworCUJUQmF0Y2hEYXRhICpidG5ld2JhdGNoOwogCi0JQXNz ZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gfHwgc2VpemVkKTsKLQlB c3NlcnQoIShibGtubyA9PSBQX05PTkUgJiYgc2VpemVkKSk7Ci0JQXNzZXJ0KCFCVFNjYW5Qb3NJ c1Bpbm5lZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0IGJhdGNo ICovCisJbmV3YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CisJYnRuZXdi YXRjaCA9IEJUQmF0Y2hHZXREYXRhKG5ld2JhdGNoKTsKIAogCS8qCi0JICogUmVtZW1iZXIgdGhh dCB0aGUgc2NhbiBhbHJlYWR5IHJlYWQgbGFzdGN1cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0 Ci0JICogb2YgYmxrbm8gKG9yIHJlbWVtYmVyIHJlYWRpbmcgYSBwYWdlIHRvIHRoZSByaWdodCwg Zm9yIGJhY2t3YXJkcyBzY2FucykKKwkgKiBuZXdiYXRjaCB3aWxsIGJlIHRoZSBiYXRjaCBmb3Ig bGFzdGN1cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0IG9mCisJICogYmxrbm8gKG9yIHRvIHRo ZSByaWdodCwgd2hlbiB0aGUgc2NhbiBpcyBtb3ZpbmcgYmFja3dhcmRzKQogCSAqLwotCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1 ZTsKLQllbHNlCi0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJYnRuZXdiYXRjaC0+ bW9yZUxlZnQgPSB0cnVlOworCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAKIAlmb3Ig KDs7KQogCXsKIAkJUGFnZQkJcGFnZTsKIAkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAotCQlpZiAo Ymxrbm8gPT0gUF9OT05FIHx8Ci0JCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KLQkJ CSAhc28tPmN1cnJQb3MubW9yZVJpZ2h0IDogIXNvLT5jdXJyUG9zLm1vcmVMZWZ0KSkKLQkJewot CQkJLyogbW9zdCByZWNlbnQgX2J0X3JlYWRwYWdlIGNhbGwgKGZvciBsYXN0Y3VycmJsa25vKSBl bmRlZCBzY2FuICovCi0JCQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJi bGtubyAmJiAhc2VpemVkKTsKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwot CQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CS8qIGlmZiAhc28tPm5lZWRQcmltU2NhbiAqLwot CQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKLQot CQkvKiBwYXJhbGxlbCBzY2FuIG11c3QgbmV2ZXIgYWN0dWFsbHkgdmlzaXQgc28tPmN1cnJQb3Mg Ymxrbm8gKi8KLQkJaWYgKCFzZWl6ZWQgJiYgc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYm Ci0JCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZh bHNlKSkKLQkJewotCQkJLyogd2hvbGUgc2NhbiBpcyBub3cgZG9uZSAob3IgYW5vdGhlciBwcmlt aXRpdmUgc2NhbiByZXF1aXJlZCkgKi8KLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQ b3MpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9CisJCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CisJCUFzc2VydChibGtubyAhPSBQX05PTkUgJiYg bGFzdGN1cnJibGtubyAhPSBQX05PTkUpOwogCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikpCiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGJ1dCBjaGVjayBmb3IgaW50ZXJydXB0cyBm aXJzdCAqLwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9 IF9idF9nZXRidWYocmVsLCBibGtubywgQlRfUkVBRCk7CisJCQlidG5ld2JhdGNoLT5idWYgPSBf YnRfZ2V0YnVmKHJlbCwgYmxrbm8sIEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyog cmVhZCBibGtubywgYXZvaWRpbmcgcmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVwdHMpICov Ci0JCQlzby0+Y3VyclBvcy5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZi bGtubywKKwkJCWJ0bmV3YmF0Y2gtPmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJl bCwgJmJsa25vLAogCQkJCQkJCQkJCQkJCQkgbGFzdGN1cnJibGtubyk7Ci0JCQlpZiAoc28tPmN1 cnJQb3MuYnVmID09IEludmFsaWRCdWZmZXIpCisJCQlpZiAoYnRuZXdiYXRjaC0+YnVmID09IElu dmFsaWRCdWZmZXIpCiAJCQl7CiAJCQkJLyogbXVzdCBoYXZlIGJlZW4gYSBjb25jdXJyZW50IGRl bGV0aW9uIG9mIGxlZnRtb3N0IHBhZ2UgKi8KLQkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5j dXJyUG9zKTsKIAkJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCQlyZXR1cm4gZmFsc2U7 CisJCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJCXJl dHVybiBOVUxMOwogCQkJfQogCQl9CiAKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQ b3MuYnVmKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRuZXdiYXRjaC0+YnVmKTsKIAkJb3Bh cXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCQlsYXN0Y3VycmJsa25vID0gYmxrbm87CiAJ CWlmIChsaWtlbHkoIVBfSUdOT1JFKG9wYXF1ZSkpKQpAQCAtMTkxMSwxNyArMTgwMiwxNyBAQCBf YnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJ CQkvKiBzZWUgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGVzIG9uIHRoaXMgcGFnZSAqLwogCQkJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhp cyB3aWxsIGNsZWFyIG1vcmVSaWdodCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVh ZHBhZ2Uoc2NhbiwgZGlyLCBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBzZWl6ZWQpKQorCQkJCWlm IChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBfRklSU1REQVRB S0VZKG9wYXF1ZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28tPmN1 cnJQb3MubmV4dFBhZ2U7CisJCQkJYmxrbm8gPSBidG5ld2JhdGNoLT5uZXh0UGFnZTsKIAkJCX0K IAkJCWVsc2UKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVMZWZ0 IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBhZ2VH ZXRNYXhPZmZzZXROdW1iZXIocGFnZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShz Y2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdl KSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2 UGFnZTsKKwkJCQlibGtubyA9IGJ0bmV3YmF0Y2gtPnByZXZQYWdlOwogCQkJfQogCQl9CiAJCWVs c2UKQEAgLTE5MzYsMTkgKzE4MjcsMzggQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCQl9CiAKIAkJLyogbm8gbWF0Y2hpbmcgdHVwbGVz IG9uIHRoaXMgcGFnZSAqLwotCQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJ c2VpemVkID0gZmFsc2U7CQkJLyogcmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdlIChvciBieSB1cykg Ki8KKwkJX2J0X3JlbGJ1ZihyZWwsIGJ0bmV3YmF0Y2gtPmJ1Zik7CisKKwkJLyogQ29udGludWUg dGhlIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24/ICovCisJCWlmIChibGtubyA9PSBQX05PTkUgfHwK KwkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkJICFidG5ld2JhdGNoLT5tb3Jl UmlnaHQgOiAhYnRuZXdiYXRjaC0+bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8g X2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlm CisJCQkgKiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBp biBfYnRfZmlyc3QpCisJCQkgKi8KKwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5k ZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7 CisJCX0KKworCQkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5l eHQgYmxrbm8gKi8KKwkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9i dF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJ CXsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJl dHVybiBOVUxMOwkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisJ CX0KKworCQlmaXJzdHBhZ2UgPSBmYWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3Qg Ki8KIAl9CiAKLQkvKgotCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2Nr IChhbmQgbWF5YmUgdGhlIHBpbikgb24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRp b24gZm9yIGJ0Z2V0dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1 cnJQb3MuY3VyclBhZ2UgPT0gYmxrbm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+ Y3VyclBvcykpOwotCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBf YnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5pdGVtc1td ICovCisJQXNzZXJ0KGJ0bmV3YmF0Y2gtPmN1cnJQYWdlID09IGJsa25vKTsKKwlfYnRfYmF0Y2hf dW5sb2NrKHNjYW4sIG5ld2JhdGNoLCBidG5ld2JhdGNoLT5idWYpOwogCi0JcmV0dXJuIHRydWU7 CisJcmV0dXJuIG5ld2JhdGNoOwogfQogCiAvKgpAQCAtMjE3NCwyNSArMjA4NCwyNCBAQCBfYnRf Z2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCkK ICAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9y ZSBjYWxsaW5nIGhlcmUuCiAgKiBFeGl0IGNvbmRpdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBf YnRfZmlyc3QoKS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9lbmRwb2ludChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfZW5k cG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSW5kZXhTY2FuQmF0 Y2ggZmlyc3RiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwot CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNo RGF0YSAqYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoZmlyc3RiYXRjaCk7CiAJUGFnZQkJ cGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBzdGFydDsKIAotCUFz c2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2VydCghc28tPm5lZWRQ cmltU2Nhbik7CisJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFBy aW1TY2FuKTsKIAogCS8qCiAJICogU2NhbiBkb3duIHRvIHRoZSBsZWZ0bW9zdCBvciByaWdodG1v c3QgbGVhZiBwYWdlLiAgVGhpcyBpcyBhIHNpbXBsaWZpZWQKIAkgKiB2ZXJzaW9uIG9mIF9idF9z ZWFyY2goKS4KIAkgKi8KLQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwg MCwgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CisJYnRmaXJzdGJhdGNoLT5idWYgPSBf YnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CiAK LQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAoIUJ1ZmZlcklzVmFs aWQoYnRmaXJzdGJhdGNoLT5idWYpKQogCXsKIAkJLyoKIAkJICogRW1wdHkgaW5kZXguIExvY2sg dGhlIHdob2xlIHJlbGF0aW9uLCBhcyBub3RoaW5nIGZpbmVyIHRvIGxvY2sKQEAgLTIyMDMsNyAr MjExMiw3IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1 cnJQb3MuYnVmKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidGZpcnN0YmF0Y2gtPmJ1Zik7CiAJ b3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCUFzc2VydChQX0lTTEVBRihvcGFxdWUp KTsKIApAQCAtMjIyOSw5ICsyMTM4LDUgQEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZp cnN0IHBhZ2Ugb2YgdGhlIHNjYW4uCiAJICovCi0JaWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2Fu LCBzdGFydCwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwg c28pOwotCXJldHVybiB0cnVlOworCXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJz dGJhdGNoLCBzdGFydCwgZGlyKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0dXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpp bmRleCA5YjA5MTg1ODkuLjc2YjM4MzAxYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRp bHMuYwpAQCAtMTksMTcgKzE5LDEzIEBACiAKICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5o IgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCi0jaW5jbHVkZSAiY29tbW9uL2ludC5o IgotI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNs dWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0aWMgaW50CV9idF9jb21wYXJlX2ludChjb25zdCB2 b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpOwogc3RhdGljIGludAlfYnRfa2VlcF9uYXR0cyhSZWxh dGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxlZnQsCiAJCQkJCQkgICBJbmRleFR1cGxlIGZpcnN0 cmlnaHQsIEJUU2Nhbkluc2VydCBpdHVwX2tleSk7CiAKQEAgLTE0NCwyNDcgKzE0MCw2IEBAIF9i dF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApCiAJcmV0dXJuIGtleTsK IH0KIAotLyoKLSAqIHFzb3J0IGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGludCBhcnJheXMKLSAq Lwotc3RhdGljIGludAotX2J0X2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lk ICp2YikKLXsKLQlpbnQJCQlhID0gKigoY29uc3QgaW50ICopIHZhKTsKLQlpbnQJCQliID0gKigo Y29uc3QgaW50ICopIHZiKTsKLQotCXJldHVybiBwZ19jbXBfczMyKGEsIGIpOwotfQotCi0vKgot ICogX2J0X2tpbGxpdGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNj YW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3ZXJlIGtpbGxlZAotICoKLSAqIHNjYW4tPm9wYXF1 ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91Z2ggc28sIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFi b3V0IHRoZQotICogY3VycmVudCBwYWdlIGFuZCBraWxsZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVy YWxseSwgdGhpcyBzaG91bGQgb25seSBiZQotICogY2FsbGVkIGlmIHNvLT5udW1LaWxsZWQgPiAw KS4KLSAqCi0gKiBDYWxsZXIgc2hvdWxkIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgc28tPmN1cnJQ b3MgcGFnZSwgYnV0IG11c3QgaG9sZCBhCi0gKiBidWZmZXIgcGluIHdoZW4gIXNvLT5kcm9wUGlu LiAgV2hlbiB3ZSByZXR1cm4sIGl0IHN0aWxsIHdvbid0IGJlIGxvY2tlZC4KLSAqIEl0J2xsIGNv bnRpbnVlIHRvIGhvbGQgd2hhdGV2ZXIgcGlucyB3ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgaGVy ZS4KLSAqCi0gKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhl eSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8gc2V0Ci0gKiBMUF9ERUFELiAgSWYgdGhlIHNjYW4gaXMg b25lIHRoYXQgaG9sZHMgYSBidWZmZXIgcGluIG9uIHRoZSB0YXJnZXQgcGFnZQotICogY29udGlu dW91c2x5IGZyb20gaW5pdGlhbGx5IHJlYWRpbmcgdGhlIGl0ZW1zIHVudGlsIGFwcGx5aW5nIHRo aXMgZnVuY3Rpb24KLSAqIChpZiBpdCBpcyBhICFzby0+ZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNh bm5vdCBoYXZlIGRlbGV0ZWQgYW55IGl0ZW1zIG9uIHRoZQotICogcGFnZSwgc28gdGhlIHBhZ2Un cyBUSURzIGNhbid0IGhhdmUgYmVlbiByZWN5Y2xlZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sK LSAqIHRoYXQgd2UnbGwgY29uZnVzZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8g dXNlIGEgcmVjeWNsZWQgVElECi0gKiB3aXRoIGEgbm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUg c2FtZSBUSUQgKHRoYXQgdXNlZCB0byBiZSBvbiB0aGlzIHNhbWUKLSAqIHBhZ2UpLiAgV2UgY2Fu J3QgcmVseSBvbiB0aGF0IGR1cmluZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJs eQotICogKHNvLT5kcm9wUGluIHNjYW5zKSwgdGhvdWdoLCBzbyB3ZSBtdXN0IGNvbmRpdGlvbiBz ZXR0aW5nIExQX0RFQUQgYml0cyBvbgotICogdGhlIHBhZ2UgTFNOIGhhdmluZyBub3QgY2hhbmdl ZCBzaW5jZSBiYWNrIHdoZW4gX2J0X3JlYWRwYWdlIHNhdyB0aGUgcGFnZS4KLSAqIFdlIHRvdGFs bHkgZ2l2ZSB1cCBvbiBzZXR0aW5nIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBjaGFu Z2VkLgotICoKLSAqIFdlIGdpdmUgdXAgbXVjaCBsZXNzIG9mdGVuIGR1cmluZyAhc28tPmRyb3BQ aW4gc2NhbnMsIGJ1dCBpdCBzdGlsbCBoYXBwZW5zLgotICogV2UgY29wZSB3aXRoIGNhc2VzIHdo ZXJlIGl0ZW1zIGhhdmUgbW92ZWQgcmlnaHQgZHVlIHRvIGluc2VydGlvbnMuICBJZiBhbgotICog aXRlbSBoYXMgbW92ZWQgb2ZmIHRoZSBjdXJyZW50IHBhZ2UgZHVlIHRvIGEgc3BsaXQsIHdlJ2xs IGZhaWwgdG8gZmluZCBpdAotICogYW5kIGp1c3QgZ2l2ZSB1cCBvbiBpdC4KLSAqLwotdm9pZAot X2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JUmVsYXRpb24JcmVsID0gc2Nh bi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2Fu LT5vcGFxdWU7Ci0JUGFnZQkJcGFnZTsKLQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwotCU9mZnNldE51 bWJlciBtaW5vZmY7Ci0JT2Zmc2V0TnVtYmVyIG1heG9mZjsKLQlpbnQJCQludW1LaWxsZWQgPSBz by0+bnVtS2lsbGVkOwotCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOwotCUJ1ZmZlcgkJ YnVmOwotCi0JQXNzZXJ0KG51bUtpbGxlZCA+IDApOwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlk KHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsgLyog Y2FuJ3QgYmUgYSBiaXRtYXAgaW5kZXggc2NhbiAqLwotCi0JLyogQWx3YXlzIGludmFsaWRhdGUg c28tPmtpbGxlZEl0ZW1zW10gYmVmb3JlIGxlYXZpbmcgc28tPmN1cnJQb3MgKi8KLQlzby0+bnVt S2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggc28tPmtp bGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9yZGVyOyB0aGUKLQkgKiBsb29wIGJlbG93IGV4cGVj dHMgdGhpcyAod2hlbiBtYXJraW5nIHBvc3RpbmcgbGlzdCB0dXBsZXMsIGF0IGxlYXN0KS4KLQkg KiBzby0+a2lsbGVkSXRlbXNbXSBpcyBub3cgaW4gd2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4gcmV0 dXJuZWQgaXRlbXMgaW4uCi0JICogU2Nyb2xsYWJsZSBjdXJzb3Igc2NhbnMgbWlnaHQgaGF2ZSBl dmVuIHNhdmVkIHRoZSBzYW1lIGl0ZW0vVElEIHR3aWNlLgotCSAqCi0JICogU29ydCBhbmQgdW5p cXVlLWlmeSBzby0+a2lsbGVkSXRlbXNbXSB0byBkZWFsIHdpdGggYWxsIHRoaXMuCi0JICovCi0J aWYgKG51bUtpbGxlZCA+IDEpCi0JewotCQlxc29ydChzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxl ZCwgc2l6ZW9mKGludCksIF9idF9jb21wYXJlX2ludCk7Ci0JCW51bUtpbGxlZCA9IHF1bmlxdWUo c28tPmtpbGxlZEl0ZW1zLCBudW1LaWxsZWQsIHNpemVvZihpbnQpLAotCQkJCQkJCV9idF9jb21w YXJlX2ludCk7Ci0JfQotCi0JaWYgKCFzby0+ZHJvcFBpbikKLQl7Ci0JCS8qCi0JCSAqIFdlIGhh dmUgaGVsZCB0aGUgcGluIG9uIHRoaXMgcGFnZSBzaW5jZSB3ZSByZWFkIHRoZSBpbmRleCB0dXBs ZXMsCi0JCSAqIHNvIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIGxvY2sgaXQuICBUaGUgcGluIHdpbGwg aGF2ZSBwcmV2ZW50ZWQKLQkJICogY29uY3VycmVudCBWQUNVVU1zIGZyb20gcmVjeWNsaW5nIGFu eSBvZiB0aGUgVElEcyBvbiB0aGUgcGFnZS4KLQkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bp bm5lZChzby0+Y3VyclBvcykpOwotCQlidWYgPSBzby0+Y3VyclBvcy5idWY7Ci0JCV9idF9sb2Nr YnVmKHJlbCwgYnVmLCBCVF9SRUFEKTsKLQl9Ci0JZWxzZQotCXsKLQkJWExvZ1JlY1B0cglsYXRl c3Rsc247Ci0KLQkJQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQli dWYgPSBfYnRfZ2V0YnVmKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIEJUX1JFQUQpOwotCi0J CWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOwotCQlBc3NlcnQoc28tPmN1cnJQ b3MubHNuIDw9IGxhdGVzdGxzbik7Ci0JCWlmIChzby0+Y3VyclBvcy5sc24gIT0gbGF0ZXN0bHNu KQotCQl7Ci0JCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCi0JCQlfYnRfcmVs YnVmKHJlbCwgYnVmKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8qIFVubW9kaWZpZWQsIGhpbnRp bmcgaXMgc2FmZSAqLwotCX0KLQotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7Ci0Jb3BhcXVl ID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCW1pbm9mZiA9IFBfRklSU1REQVRBS0VZKG9wYXF1 ZSk7Ci0JbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKLQotCS8qIEl0ZXJh dGUgdGhyb3VnaCBzby0+a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXIgKi8KLQlmb3Ig KGludCBpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsrKQotCXsKLQkJaW50CQkJaXRlbUluZGV4ID0g c28tPmtpbGxlZEl0ZW1zW2ldOwotCQlCVFNjYW5Qb3NJdGVtICpraXRlbSA9ICZzby0+Y3VyclBv cy5pdGVtc1tpdGVtSW5kZXhdOwotCQlPZmZzZXROdW1iZXIgb2ZmbnVtID0ga2l0ZW0tPmluZGV4 T2Zmc2V0OwotCi0JCUFzc2VydChpdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYm Ci0JCQkgICBpdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCQlBc3NlcnQoaSA9 PSAwIHx8Ci0JCQkgICBvZmZudW0gPj0gc28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1z W2kgLSAxXV0uaW5kZXhPZmZzZXQpOwotCi0JCWlmIChvZmZudW0gPCBtaW5vZmYpCi0JCQljb250 aW51ZTsJCQkvKiBwdXJlIHBhcmFub2lhICovCi0JCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQot CQl7Ci0JCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKLQkJCUlu ZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7Ci0J CQlib29sCQlraWxsdHVwbGUgPSBmYWxzZTsKLQotCQkJaWYgKEJUcmVlVHVwbGVJc1Bvc3Rpbmco aXR1cGxlKSkKLQkJCXsKLQkJCQlpbnQJCQlwaSA9IGkgKyAxOwotCQkJCWludAkJCW5wb3N0aW5n ID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXBsZSk7Ci0JCQkJaW50CQkJajsKLQotCQkJCS8q Ci0JCQkJICogTm90ZSB0aGF0IHRoZSBwYWdlIG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWxt b3N0IGFueSB3YXkKLQkJCQkgKiBzaW5jZSB3ZSBmaXJzdCByZWFkIGl0IChpbiB0aGUgIXNvLT5k cm9wUGluIGNhc2UpLCBzbyBpdCdzCi0JCQkJICogcG9zc2libGUgdGhhdCB0aGlzIHBvc3Rpbmcg bGlzdCB0dXBsZSB3YXNuJ3QgYSBwb3N0aW5nIGxpc3QKLQkJCQkgKiB0dXBsZSB3aGVuIHdlIGZp cnN0IGVuY291bnRlcmVkIGl0cyBoZWFwIFRJRHMuCi0JCQkJICovCi0JCQkJZm9yIChqID0gMDsg aiA8IG5wb3N0aW5nOyBqKyspCi0JCQkJewotCQkJCQlJdGVtUG9pbnRlciBpdGVtID0gQlRyZWVU dXBsZUdldFBvc3RpbmdOKGl0dXBsZSwgaik7Ci0KLQkJCQkJaWYgKCFJdGVtUG9pbnRlckVxdWFs cyhpdGVtLCAma2l0ZW0tPmhlYXBUaWQpKQotCQkJCQkJYnJlYWs7CS8qIG91dCBvZiBwb3N0aW5n IGxpc3QgbG9vcCAqLwotCi0JCQkJCS8qCi0JCQkJCSAqIGtpdGVtIG11c3QgaGF2ZSBtYXRjaGlu ZyBvZmZudW0gd2hlbiBoZWFwIFRJRHMgbWF0Y2gsCi0JCQkJCSAqIHRob3VnaCBvbmx5IGluIHRo ZSBjb21tb24gY2FzZSB3aGVyZSB0aGUgcGFnZSBjYW4ndAotCQkJCQkgKiBoYXZlIGJlZW4gY29u Y3VycmVudGx5IG1vZGlmaWVkCi0JCQkJCSAqLwotCQkJCQlBc3NlcnQoa2l0ZW0tPmluZGV4T2Zm c2V0ID09IG9mZm51bSB8fCAhc28tPmRyb3BQaW4pOwotCi0JCQkJCS8qCi0JCQkJCSAqIFJlYWQt YWhlYWQgdG8gbGF0ZXIga2l0ZW1zIGhlcmUuCi0JCQkJCSAqCi0JCQkJCSAqIFdlIHJlbHkgb24g dGhlIGFzc3VtcHRpb24gdGhhdCBub3QgYWR2YW5jaW5nIGtpdGVtIGhlcmUKLQkJCQkJICogd2ls bCBwcmV2ZW50IHVzIGZyb20gY29uc2lkZXJpbmcgdGhlIHBvc3RpbmcgbGlzdCB0dXBsZQotCQkJ CQkgKiBmdWxseSBkZWFkIGJ5IG5vdCBtYXRjaGluZyBpdHMgbmV4dCBoZWFwIFRJRCBpbiBuZXh0 Ci0JCQkJCSAqIGxvb3AgaXRlcmF0aW9uLgotCQkJCQkgKgotCQkJCQkgKiBJZiwgb24gdGhlIG90 aGVyIGhhbmQsIHRoaXMgaXMgdGhlIGZpbmFsIGhlYXAgVElEIGluCi0JCQkJCSAqIHRoZSBwb3N0 aW5nIGxpc3QgdHVwbGUsIHRoZW4gdHVwbGUgZ2V0cyBraWxsZWQKLQkJCQkJICogcmVnYXJkbGVz cyAoaS5lLiB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGxhc3QKLQkJCQkJICoga2l0ZW0g aXMgYWxzbyB0aGUgbGFzdCBoZWFwIFRJRCBpbiB0aGUgbGFzdCBpbmRleCB0dXBsZQotCQkJCQkg KiBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZSBzdGlsbCBnZXRzIGtpbGxlZCkuCi0JCQkJCSAq LwotCQkJCQlpZiAocGkgPCBudW1LaWxsZWQpCi0JCQkJCQlraXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tzby0+a2lsbGVkSXRlbXNbcGkrK11dOwotCQkJCX0KLQotCQkJCS8qCi0JCQkJICogRG9u J3QgYm90aGVyIGFkdmFuY2luZyB0aGUgb3V0ZXJtb3N0IGxvb3AncyBpbnQgaXRlcmF0b3IgdG8K LQkJCQkgKiBhdm9pZCBwcm9jZXNzaW5nIGtpbGxlZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUg c2FtZQotCQkJCSAqIG9mZm51bS9wb3N0aW5nIGxpc3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGlt aXphdGlvbiBoYXJkbHkKLQkJCQkgKiBzZWVtcyB3b3J0aCBpdC4gIChGdXJ0aGVyIGl0ZXJhdGlv bnMgb2YgdGhlIG91dGVybW9zdCBsb29wCi0JCQkJICogd2lsbCBmYWlsIHRvIG1hdGNoIG9uIHRo aXMgc2FtZSBwb3N0aW5nIGxpc3QncyBmaXJzdCBoZWFwCi0JCQkJICogVElEIGluc3RlYWQsIHNv IHdlJ2xsIGFkdmFuY2UgdG8gdGhlIG5leHQgb2ZmbnVtL2luZGV4Ci0JCQkJICogdHVwbGUgcHJl dHR5IHF1aWNrbHkuKQotCQkJCSAqLwotCQkJCWlmIChqID09IG5wb3N0aW5nKQotCQkJCQlraWxs dHVwbGUgPSB0cnVlOwotCQkJfQotCQkJZWxzZSBpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBs ZS0+dF90aWQsICZraXRlbS0+aGVhcFRpZCkpCi0JCQkJa2lsbHR1cGxlID0gdHJ1ZTsKLQotCQkJ LyoKLQkJCSAqIE1hcmsgaW5kZXggaXRlbSBhcyBkZWFkLCBpZiBpdCBpc24ndCBhbHJlYWR5LiAg U2luY2UgdGhpcwotCQkJICogaGFwcGVucyB3aGlsZSBob2xkaW5nIGEgYnVmZmVyIGxvY2sgcG9z c2libHkgaW4gc2hhcmVkIG1vZGUsCi0JCQkgKiBpdCdzIHBvc3NpYmxlIHRoYXQgbXVsdGlwbGUg cHJvY2Vzc2VzIGF0dGVtcHQgdG8gZG8gdGhpcwotCQkJICogc2ltdWx0YW5lb3VzbHksIGxlYWRp bmcgdG8gbXVsdGlwbGUgZnVsbC1wYWdlIGltYWdlcyBiZWluZyBzZW50Ci0JCQkgKiB0byBXQUwg KGlmIHdhbF9sb2dfaGludHMgb3IgZGF0YSBjaGVja3N1bXMgYXJlIGVuYWJsZWQpLCB3aGljaAot CQkJICogaXMgdW5kZXNpcmFibGUuCi0JCQkgKi8KLQkJCWlmIChraWxsdHVwbGUgJiYgIUl0ZW1J ZElzRGVhZChpaWQpKQotCQkJewotCQkJCWlmICgha2lsbGVkc29tZXRoaW5nKQotCQkJCXsKLQkJ CQkJLyoKLQkJCQkJICogVXNlIHRoZSBoaW50IGJpdCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBp ZiB3ZSBjYW4KLQkJCQkJICogdXBkYXRlIHRoZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNo YXJlIGxvY2suIElmIHdlCi0JCQkJCSAqIGFyZSBub3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2lu dCBjb250aW51aW5nLgotCQkJCQkgKi8KLQkJCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRz KGJ1ZikpCi0JCQkJCQlnb3RvIHVubG9ja19wYWdlOwotCQkJCX0KLQotCQkJCS8qIGZvdW5kIHRo ZSBpdGVtL2FsbCBwb3N0aW5nIGxpc3QgaXRlbXMgKi8KLQkJCQlJdGVtSWRNYXJrRGVhZChpaWQp OwotCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlu bmVyIHNlYXJjaCBsb29wICovCi0JCQl9Ci0JCQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9m Zm51bSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRl ciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4KLQkgKgotCSAqIFdoZW5ldmVyIHdlIG1h cmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQgdGhlIHBhZ2UncwotCSAqIEJUUF9IQVNf R0FSQkFHRSBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGludC4gIChOb3RlIHRoYXQg d2UKLQkgKiBvbmx5IHJlbHkgb24gdGhlIHBhZ2UtbGV2ZWwgZmxhZyBpbiAhaGVhcGtleXNwYWNl IGluZGV4ZXMuKQotCSAqLwotCWlmIChraWxsZWRzb21ldGhpbmcpCi0JewotCQlvcGFxdWUtPmJ0 cG9fZmxhZ3MgfD0gQlRQX0hBU19HQVJCQUdFOwotCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhi dWYsIHRydWUsIHRydWUpOwotCX0KLQotdW5sb2NrX3BhZ2U6Ci0JaWYgKCFzby0+ZHJvcFBpbikK LQkJX2J0X3VubG9ja2J1ZihyZWwsIGJ1Zik7Ci0JZWxzZQotCQlfYnRfcmVsYnVmKHJlbCwgYnVm KTsKLX0KLQotCiAvKgogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBtYW5hZ2UgYSBzaGFyZWQt bWVtb3J5IGFyZWEgaW4gd2hpY2ggd2UgdHJhY2sKICAqIGFzc2lnbm1lbnQgb2YgInZhY3V1bSBj eWNsZSBJRHMiIHRvIGN1cnJlbnRseS1hY3RpdmUgYnRyZWUgdmFjdXVtaW5nCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0eGxvZy5jCmluZGV4IGRmZjdkMjg2Zi4uM2JjNWU1Y2NkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHhsb2cuYwpAQCAtMTA5NSwxNSArMTA5NSwxNSBAQCBidHJlZV9tYXNr KGNoYXIgKnBhZ2VkYXRhLCBCbG9ja051bWJlciBibGtubykKIAkJLyoKIAkJICogSW4gYnRyZWUg bGVhZiBwYWdlcywgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IHRoZSBMUF9GTEFHUyB3aXRob3V0 CiAJCSAqIGVtaXR0aW5nIGFueSBXQUwgcmVjb3JkLiBIZW5jZSwgbWFzayB0aGUgbGluZSBwb2lu dGVyIGZsYWdzLiBTZWUKLQkJICogX2J0X2tpbGxpdGVtcygpLCBfYnRfY2hlY2tfdW5pcXVlKCkg Zm9yIGRldGFpbHMuCisJCSAqIGJ0a2lsbGl0ZW1zYmF0Y2goKSwgX2J0X2NoZWNrX3VuaXF1ZSgp IGZvciBkZXRhaWxzLgogCQkgKi8KIAkJbWFza19scF9mbGFncyhwYWdlKTsKIAl9CiAKIAkvKgog CSAqIEJUUF9IQVNfR0FSQkFHRSBpcyBqdXN0IGFuIHVuLWxvZ2dlZCBoaW50IGJpdC4gU28sIG1h c2sgaXQuIFNlZQotCSAqIF9idF9kZWxldGVfb3JfZGVkdXBfb25lX3BhZ2UoKSwgX2J0X2tpbGxp dGVtcygpLCBhbmQgX2J0X2NoZWNrX3VuaXF1ZSgpCi0JICogZm9yIGRldGFpbHMuCisJICogX2J0 X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgpLCBidGtpbGxpdGVtc2JhdGNoKCksIGFuZAorCSAq IF9idF9jaGVja191bmlxdWUoKSBmb3IgZGV0YWlscy4KIAkgKi8KIAltYXNrb3BhcS0+YnRwb19m bGFncyAmPSB+QlRQX0hBU19HQVJCQUdFOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxz LmMKaW5kZXggYTQ2OTRiZDgwLi5lNjMzZGJjYWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3Nw Z3V0aWxzLmMKQEAgLTg4LDEwICs4OCwxMiBAQCBzcGdoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCS5hbWJlZ2luc2NhbiA9IHNwZ2JlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gc3BncmVzY2Fu LAogCQkuYW1nZXR0dXBsZSA9IHNwZ2dldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJ CS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJ LmFtZ2V0Yml0bWFwID0gc3BnZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gc3BnZW5kc2NhbiwK LQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVz ZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRw YXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMKaW5kZXggZTRiNzAxNjZiLi4wOGI5ZGVmZDkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBs YWluLmMKQEAgLTEzNiw3ICsxMzYsNyBAQCBzdGF0aWMgdm9pZCBzaG93X3JlY3Vyc2l2ZV91bmlv bl9pbmZvKFJlY3Vyc2l2ZVVuaW9uU3RhdGUgKnJzdGF0ZSwKIHN0YXRpYyB2b2lkIHNob3dfbWVt b2l6ZV9pbmZvKE1lbW9pemVTdGF0ZSAqbXN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJCQkJ ICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0 YXRlICphZ2dzdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7Ci1zdGF0aWMgdm9pZCBzaG93X2luZGV4 c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7Citz dGF0aWMgdm9pZCBzaG93X2luZGV4c2Nhbl9pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBs YWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfdGlkYml0bWFwX2luZm8oQml0bWFwSGVh cFNjYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQlFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRp YyB2b2lkIHNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KGNvbnN0IGNoYXIgKnFsYWJlbCwgaW50 IHdoaWNoLApAQCAtMTk3NCw3ICsxOTc0LDcgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFu c3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWlmIChwbGFuLT5xdWFsKQogCQkJCXNob3dfaW5z dHJ1bWVudGF0aW9uX2NvdW50KCJSb3dzIFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJ CQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0 ZSwgZXMpOworCQkJc2hvd19pbmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFr OwogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoSW5kZXhPbmx5 U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFsLApAQCAtMTk4OCwxNSArMTk4OCwxMiBAQCBFeHBsYWlu Tm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4t PnF1YWwpCiAJCQkJc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBG aWx0ZXIiLCAxLAogCQkJCQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwotCQkJaWYgKGVzLT5hbmFs eXplKQotCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJIZWFwIEZldGNoZXMiLCBOVUxMLAotCQkJ CQkJCQkJIHBsYW5zdGF0ZS0+aW5zdHJ1bWVudC0+bnR1cGxlczIsIDAsIGVzKTsKLQkJCXNob3df aW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hvd19pbmRleHNjYW5faW5m byhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfQml0bWFwSW5kZXhTY2FuOgog CQkJc2hvd19zY2FuX3F1YWwoKChCaXRtYXBJbmRleFNjYW4gKikgcGxhbiktPmluZGV4cXVhbG9y aWcsCiAJCQkJCQkgICAiSW5kZXggQ29uZCIsIHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7Ci0J CQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhz Y2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEhlYXBT Y2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChCaXRtYXBIZWFwU2NhbiAqKSBwbGFuKS0+Yml0bWFw cXVhbG9yaWcsCkBAIC0zODYwLDE1ICszODU3LDE2IEBAIHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0 YXRlICphZ2dzdGF0ZSwgRXhwbGFpblN0YXRlICplcykKIH0KIAogLyoKLSAqIFNob3cgdGhlIHRv dGFsIG51bWJlciBvZiBpbmRleCBzZWFyY2hlcyBmb3IgYQorICogU2hvdyBpbmRleCBzY2FuIHJl bGF0ZWQgZXhlY3V0b3IgaW5zdHJ1bWVudGF0aW9uIGZvciBhCiAgKiBJbmRleFNjYW4vSW5kZXhP bmx5U2Nhbi9CaXRtYXBJbmRleFNjYW4gbm9kZQogICovCiBzdGF0aWMgdm9pZAotc2hvd19pbmRl eHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCitz aG93X2luZGV4c2Nhbl9pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVz KQogewogCVBsYW4JICAgKnBsYW4gPSBwbGFuc3RhdGUtPnBsYW47CiAJU2hhcmVkSW5kZXhTY2Fu SW5zdHJ1bWVudGF0aW9uICpTaGFyZWRJbmZvID0gTlVMTDsKLQl1aW50NjQJCW5zZWFyY2hlcyA9 IDA7CisJdWludDY0CQluc2VhcmNoZXMgPSAwLAorCQkJCW5oZWFwZmV0Y2hlcyA9IDA7CiAKIAlp ZiAoIWVzLT5hbmFseXplKQogCQlyZXR1cm47CkBAIC0zODg5LDYgKzM4ODcsNyBAQCBzaG93X2lu ZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykK IAkJCQlJbmRleE9ubHlTY2FuU3RhdGUgKmluZGV4c3RhdGUgPSAoKEluZGV4T25seVNjYW5TdGF0 ZSAqKSBwbGFuc3RhdGUpOwogCiAJCQkJbnNlYXJjaGVzID0gaW5kZXhzdGF0ZS0+aW9zc19JbnN0 cnVtZW50LT5uc2VhcmNoZXM7CisJCQkJbmhlYXBmZXRjaGVzID0gaW5kZXhzdGF0ZS0+aW9zc19J bnN0cnVtZW50LT5uaGVhcGZldGNoZXM7CiAJCQkJU2hhcmVkSW5mbyA9IGluZGV4c3RhdGUtPmlv c3NfU2hhcmVkSW5mbzsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTM5MTIsOSArMzkxMSwxMyBAQCBz aG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRl ICplcykKIAkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqd2luc3RydW1lbnQgPSAmU2hhcmVk SW5mby0+d2luc3RydW1lbnRbaV07CiAKIAkJCW5zZWFyY2hlcyArPSB3aW5zdHJ1bWVudC0+bnNl YXJjaGVzOworCQkJbmhlYXBmZXRjaGVzICs9IHdpbnN0cnVtZW50LT5uaGVhcGZldGNoZXM7CiAJ CX0KIAl9CiAKKwlpZiAobm9kZVRhZyhwbGFuKSA9PSBUX0luZGV4T25seVNjYW4pCisJCUV4cGxh aW5Qcm9wZXJ0eVVJbnRlZ2VyKCJIZWFwIEZldGNoZXMiLCBOVUxMLCBuaGVhcGZldGNoZXMsIGVz KTsKKwogCUV4cGxhaW5Qcm9wZXJ0eVVJbnRlZ2VyKCJJbmRleCBTZWFyY2hlcyIsIE5VTEwsIG5z ZWFyY2hlcywgZXMpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRl eGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IGNiZDc2MDY2 Zi4uMzQ2M2NmMzFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAtODg1LDcgKzg4NSw3 IEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVz XCIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aWNvbHVtbiBpbmRleGVzIiwKIAkJCQkJCWFjY2Vzc01l dGhvZE5hbWUpKSk7Ci0JaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0g TlVMTCkKKwlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMICYm IGFtUm91dGluZS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nl c3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cyIs CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQW1pLmMKaW5kZXggMzdmZTAzZmRjLi45NzlhODUyZmUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjQW1pLmMKQEAgLTQyOSw3ICs0MjksNyBAQCBFeGVjU3VwcG9ydHNNYXJrUmVzdG9y ZShQYXRoICpwYXRobm9kZSkKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAKIAkJCS8qCi0JCQkg KiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgbWFyay9yZXN0b3JlLgorCQkJICogTm90IGFs bCBpbmRleCB0eXBlcyBzdXBwb3J0IHJlc3RvcmluZyBhIG1hcmsKIAkJCSAqLwogCQkJcmV0dXJu IGNhc3ROb2RlKEluZGV4UGF0aCwgcGF0aG5vZGUpLT5pbmRleGluZm8tPmFtY2FubWFya3BvczsK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCA5ZDA3MWU0OTUuLjNmMGM4NDUz ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTgxNSwxMCArODE1LDEyIEBA IGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFwLCBSZWxh dGlvbiBpbmRleCwKIHJldHJ5OgogCWNvbmZsaWN0ID0gZmFsc2U7CiAJZm91bmRfc2VsZiA9IGZh bHNlOwotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsICZEaXJ0eVNu YXBzaG90LCBOVUxMLCBpbmRua2V5YXR0cywgMCk7CisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2lu c2NhbihoZWFwLCBpbmRleCwgZmFsc2UsICZEaXJ0eVNuYXBzaG90LCBOVUxMLAorCQkJCQkJCQkg aW5kbmtleWF0dHMsIDApOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgaW5k bmtleWF0dHMsIE5VTEwsIDApOwogCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChpbmRleF9z Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCisJd2hpbGUgKHRhYmxl X2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJ CQkJCQkJCWV4aXN0aW5nX3Nsb3QpKQogCXsKIAkJVHJhbnNhY3Rpb25JZCB4d2FpdDsKIAkJWExU V19PcGVyCXJlYXNvbl93YWl0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1JlcGxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpp bmRleCAyNDk3ZWU3ZWQuLjJmNjM2YmEzZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMKQEAgLTIwNSw3ICsyMDUsNyBAQCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4 KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAlza2V5X2F0dG9mZiA9IGJ1aWxkX3JlcGxpbmRl eF9zY2FuX2tleShza2V5LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xvdCk7CiAKIAkvKiBTdGFydCBh biBpbmRleCBzY2FuLiAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsICZz bmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWws IGlkeHJlbCwgZmFsc2UsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CiAKIHJldHJ5Ogog CWZvdW5kID0gZmFsc2U7CkBAIC0yMTMsNyArMjEzLDcgQEAgcmV0cnk6CiAJaW5kZXhfcmVzY2Fu KHNjYW4sIHNrZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRo ZSB0dXBsZSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIG91dHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh biwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQogCXsKIAkJLyoKIAkJICogQXZvaWQg ZXhwZW5zaXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmltYXJ5IGtleSBvcgpA QCAtNjY2LDEyICs2NjYsMTIgQEAgUmVsYXRpb25GaW5kRGVsZXRlZFR1cGxlSW5mb0J5SW5kZXgo UmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCSAqIG5vdCB5ZXQgY29tbWl0dGVkIG9yIHRob3Nl IGp1c3QgY29tbWl0dGVkIHByaW9yIHRvIHRoZSBzY2FuIGFyZQogCSAqIGV4Y2x1ZGVkIGluIHVw ZGF0ZV9tb3N0X3JlY2VudF9kZWxldGlvbl9pbmZvKCkuCiAJICovCi0Jc2NhbiA9IGluZGV4X2Jl Z2luc2NhbihyZWwsIGlkeHJlbCwgU25hcHNob3RBbnksIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsK KwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBmYWxzZSwgU25hcHNob3RBbnks IE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKIAogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5 X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGls ZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzY2Fuc2xv dCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRp cmVjdGlvbiwgc2NhbnNsb3QpKQogCXsKIAkJLyoKIAkJICogQXZvaWQgZXhwZW5zaXZlIGVxdWFs aXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmltYXJ5IGtleSBvcgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCmluZGV4IDcwYzU1ZWU2ZC4uOTY4MjRiMzdlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCkBAIC0yMDQsNiAr MjA0LDcgQEAgRXhlY0VuZEJpdG1hcEluZGV4U2NhbihCaXRtYXBJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEJpdG1hcEluZGV4U2NhblN0YXRlIGFuZCB6 ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmJp c3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQlBc3NlcnQobm9kZS0+Ymlzc19JbnN0cnVtZW50 LT5uaGVhcGZldGNoZXMgPT0gMCk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl SW5kZXhvbmx5c2Nhbi5jCmluZGV4IDllYWI4MWZkMS4uZWU2M2ExZmI3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRl ICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3R1cGRlc2MuaCIKLSNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9y LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgpAQCAtNDIsNyArNDEsNiBAQAog I2luY2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleHNjYW4uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgotI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGlj YXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwu aCIKIApAQCAtNjYsNyArNjQsNiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAq bm9kZSkKIAlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKIAlJbmRleFNjYW5EZXNjIHNjYW5kZXNj OwogCVR1cGxlVGFibGVTbG90ICpzbG90OwotCUl0ZW1Qb2ludGVyIHRpZDsKIAogCS8qCiAJICog ZXh0cmFjdCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBzY2FuIG5vZGUKQEAgLTkx LDE4ICs4OCwxNCBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJ ICogcGFyYWxsZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5z cy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNj LAorCQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJICAg ZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19JbnN0cnVtZW50LAog CQkJCQkJCQkgICBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgICBub2RlLT5pb3Nz X051bU9yZGVyQnlLZXlzKTsKIAogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0gc2NhbmRlc2M7Ci0K LQotCQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2NhbiAqLwotCQlub2RlLT5pb3NzX1Nj YW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52 YWxpZEJ1ZmZlcjsKKwkJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7 CiAKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBh cmUgcmVhZHksIGdvIGFoZWFkIGFuZApAQCAtMTE5LDc4ICsxMTIsMTAgQEAgSW5kZXhPbmx5TmV4 dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBPSywgbm93IHRoYXQgd2UgaGF2 ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlICgodGlk ID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVjdGlvbikpICE9IE5VTEwpCisJd2hp bGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBub2RlLT5p b3NzX1RhYmxlU2xvdCkpCiAJewotCQlib29sCQl0dXBsZV9mcm9tX2hlYXAgPSBmYWxzZTsKLQog CQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCS8qCi0JCSAqIFdlIGNhbiBza2lwIHRoZSBo ZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBvbgotCQkgKiB3aGlj aCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNl LAotCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0dXBsZSBhcyB0 aGUgZGF0YSBzb3VyY2UuCi0JCSAqCi0JCSAqIE5vdGUgb24gTWVtb3J5IE9yZGVyaW5nIEVmZmVj dHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5vdAotCQkgKiBsb2NrIHRoZSB2aXNp YmlsaXR5IG1hcCBidWZmZXIsIGFuZCB0aGVyZWZvcmUgdGhlIHJlc3VsdCB3ZSByZWFkCi0JCSAq IGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVyLCBpdCBjYW4ndCBiZSBzdGFs ZSBlbm91Z2ggdG8KLQkJICogbWF0dGVyLgotCQkgKgotCQkgKiBXZSBuZWVkIHRvIGRldGVjdCBj bGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0IGF3YXksCi0JCSAqIGJlY2F1 c2UgdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0IG5vdCB2aXNpYmxl LiBUaGUKLQkJICogcmVhZGluZyBvZiB0aGUgVElEIGJ5IHRoaXMgc2NhbiAodXNpbmcgYSBzaGFy ZWQgbG9jayBvbiB0aGUgaW5kZXgKLQkJICogYnVmZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhl IGluc2VydCBvZiB0aGUgVElEIGludG8gdGhlIGluZGV4Ci0JCSAqICh1c2luZyBhbiBleGNsdXNp dmUgbG9jayBvbiB0aGUgaW5kZXggYnVmZmVyKS4gQmVjYXVzZSB0aGUgVk0gYml0Ci0JCSAqIGlz IGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBpbmRleCwgYW5kIGxvY2tpbmcvdW5sb2NraW5n IG9mIHRoZQotCQkgKiBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3 ZSBhcmUgc3VyZSB0byBzZWUgdGhlCi0JCSAqIGNsZWFyZWQgYml0IGlmIHdlIHNlZSBhIHJlY2Vu dGx5LWluc2VydGVkIFRJRC4KLQkJICoKLQkJICogRGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBp bmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91dAotCQkgKiB0aGUgVElEKSwgc28g dGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgbm90Ci0JCSAqIHNlcmlh bGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkgc2VlIGEgdmFsdWUgdGhhdCBp cwotCQkgKiBzaWduaWZpY2FudGx5IHN0YWxlLiBIb3dldmVyLCB3ZSBkb24ndCBjYXJlIGFib3V0 IHRoZSBkZWxldGUgcmlnaHQKLQkJICogYXdheSwgYmVjYXVzZSB0aGUgdHVwbGUgaXMgc3RpbGwg dmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0 aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3VyCi0JCSAqIHRyYW5zYWN0aW9uKS4gSW4gZWl0 aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIgd2lsbCBoYXZlCi0JCSAqIGJlZW4g cmVsZWFzZWQgKGFjdGluZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFyaW5nIHRoZSBi aXQuCi0JCSAqIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhl IGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGludmlzaWJsZSks IHdlIG11c3QgaGF2ZSBhY3F1aXJlZAotCQkgKiBQcm9jQXJyYXlMb2NrIGFmdGVyIHRoYXQgdGlt ZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJyaWVyLgotCQkgKgotCQkgKiBJdCdzIHdvcnRoIGdvaW5n IHRocm91Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcgdG8gbG9jawotCQkgKiB0 aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgot CQkgKi8KLQkJaWYgKCFWTV9BTExfVklTSUJMRShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAotCQkJ CQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJCQkmbm9kZS0+aW9zc19W TUJ1ZmZlcikpCi0JCXsKLQkJCS8qCi0JCQkgKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRoZSBo ZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCi0JCQkgKi8KLQkJCUluc3RyQ291bnRUdXBsZXMyKG5v ZGUsIDEpOwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW5kZXNjLCBub2RlLT5pb3NzX1Rh YmxlU2xvdCkpCi0JCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBp bmRleCBlbnRyeSAqLwotCi0JCQlFeGVjQ2xlYXJUdXBsZShub2RlLT5pb3NzX1RhYmxlU2xvdCk7 Ci0KLQkJCS8qCi0JCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0ZWQgaGVyZSwg c28gdGhlcmUgc2hvdWxkIGJlIG5vCi0JCQkgKiBuZWVkIHRvIGtlZXAgZm9sbG93aW5nIHRoZSBI T1QgY2hhaW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzCi0JCQkgKiBiZWVuIGZvdW5kLiAgSWYg d2UgZGlkIHdhbnQgdG8gYWxsb3cgdGhhdCwgd2UnZCBuZWVkIHRvIGtlZXAKLQkJCSAqIG1vcmUg c3RhdGUgdG8gcmVtZW1iZXIgbm90IHRvIGNhbGwgaW5kZXhfZ2V0bmV4dF90aWQgbmV4dCB0aW1l LgotCQkJICovCi0JCQlpZiAoc2NhbmRlc2MtPnhzX2hlYXBfY29udGludWUpCi0JCQkJZWxvZyhF UlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5 IHNjYW5zIik7Ci0KLQkJCS8qCi0JCQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50IHdlIGFyZSBob2xk aW5nIGEgcGluIG9uIHRoZSBoZWFwIHBhZ2UsIGFzCi0JCQkgKiByZWNvcmRlZCBpbiBzY2FuZGVz Yy0+eHNfY2J1Zi4gIFdlIGNvdWxkIHJlbGVhc2UgdGhhdCBwaW4gbm93LAotCQkJICogYnV0IGl0 J3Mgbm90IGNsZWFyIHdoZXRoZXIgaXQncyBhIHdpbiB0byBkbyBzby4gIFRoZSBuZXh0IGluZGV4 Ci0JCQkgKiBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8gdGhlIHNhbWUgaGVhcCBwYWdl LgotCQkJICovCi0KLQkJCXR1cGxlX2Zyb21faGVhcCA9IHRydWU7Ci0JCX0KLQogCQkvKgogCQkg KiBGaWxsIHRoZSBzY2FuIHR1cGxlIHNsb3Qgd2l0aCBkYXRhIGZyb20gdGhlIGluZGV4LiAgVGhp cyBtaWdodCBiZQogCQkgKiBwcm92aWRlZCBpbiBlaXRoZXIgSGVhcFR1cGxlIG9yIEluZGV4VHVw bGUgZm9ybWF0LiAgQ29uY2VpdmFibHkgYW4KQEAgLTIzOSwxNiArMTY0LDYgQEAgSW5kZXhPbmx5 TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCSBlcnJtc2coImxv c3N5IGRpc3RhbmNlIGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNj YW5zIikpKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBkaWRuJ3QgYWNjZXNzIHRoZSBoZWFwLCB0aGVu IHdlJ2xsIG5lZWQgdG8gdGFrZSBhIHByZWRpY2F0ZQotCQkgKiBsb2NrIGV4cGxpY2l0bHksIGFz IGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8gdGhhdCBhdCBwYWdlIGxldmVsLgotCQkgKi8KLQkJ aWYgKCF0dXBsZV9mcm9tX2hlYXApCi0JCQlQcmVkaWNhdGVMb2NrUGFnZShzY2FuZGVzYy0+aGVh cFJlbGF0aW9uLAotCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAotCQkJ CQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCk7Ci0KIAkJcmV0dXJuIHNsb3Q7CiAJfQogCkBAIC00 MDgsMTMgKzMyMyw2IEBAIEV4ZWNFbmRJbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW5TdGF0ZSAq bm9kZSkKIAlpbmRleFJlbGF0aW9uRGVzYyA9IG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjOwogCWlu ZGV4U2NhbkRlc2MgPSBub2RlLT5pb3NzX1NjYW5EZXNjOwogCi0JLyogUmVsZWFzZSBWTSBidWZm ZXIgcGluLCBpZiBhbnkuICovCi0JaWYgKG5vZGUtPmlvc3NfVk1CdWZmZXIgIT0gSW52YWxpZEJ1 ZmZlcikKLQl7Ci0JCVJlbGVhc2VCdWZmZXIobm9kZS0+aW9zc19WTUJ1ZmZlcik7Ci0JCW5vZGUt Pmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCX0KLQogCS8qCiAJICogV2hlbiBlbmRp bmcgYSBwYXJhbGxlbCB3b3JrZXIsIGNvcHkgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyZWQgYnkgdGhl CiAJICogd29ya2VyIGJhY2sgaW50byBzaGFyZWQgbWVtb3J5IHNvIHRoYXQgaXQgY2FuIGJlIHBp Y2tlZCB1cCBieSB0aGUgbWFpbgpAQCAtNDM0LDYgKzM0Miw3IEBAIEV4ZWNFbmRJbmRleE9ubHlT Y2FuKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3 IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1l bnQtPm5zZWFyY2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJd2lu c3RydW1lbnQtPm5oZWFwZmV0Y2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQtPm5oZWFwZmV0 Y2hlczsKIAl9CiAKIAkvKgpAQCAtNzkwLDEzICs2OTksMTIgQEAgRXhlY0luZGV4T25seVNjYW5J bml0aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlvc3NfU2Nh bkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2Rl LT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfSW5zdHJ1bWVu dCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3Nz X051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNj LT54c193YW50X2l0dXAgPSB0cnVlOwotCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVm ZmVyOworCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCiAJLyoK IAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwg Z28gYWhlYWQgYW5kIHBhc3MKQEAgLTg1NiwxMiArNzY0LDEyIEBAIEV4ZWNJbmRleE9ubHlTY2Fu SW5pdGlhbGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5pb3Nz X1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJl bnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkg bm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJCQkJCQkJCSBub2RlLT5pb3NzX0luc3Ry dW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+ aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7Ci0Jbm9kZS0+aW9zc19TY2Fu RGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+ eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxh dGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlSW5kZXhzY2FuLmMKaW5kZXggMDYxNDNlOTRjLi4xMGQ4NWNmZDkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhzY2FuLmMKQEAgLTEwOSw3ICsxMDksNyBAQCBJbmRleE5leHQoSW5kZXhT Y2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBhbiBpbmRleCBzY2FuIHRo YXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4 X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUt Pmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZh bHNlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5p c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApAQCAtMTMw LDcgKzEzMCw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIG9r LCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJ ICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90 KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24s IHNsb3QpKQogCXsKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIApAQCAtMjA1LDcgKzIwNSw3 IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBzZXJp YWxseSBleGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFs bGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3Vy cmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJ CQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5l c19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAg IG5vZGUtPmlzc19OdW1TY2FuS2V5cywKQEAgLTI2Miw3ICsyNjIsNyBAQCBJbmRleE5leHRXaXRo UmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogRmV0Y2ggbmV4dCB0dXBsZSBmcm9t IHRoZSBpbmRleC4KIAkJICovCiBuZXh0X2luZGV4dHVwbGU6Ci0JCWlmICghaW5kZXhfZ2V0bmV4 dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCWlmICghdGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xv dCkpCiAJCXsKIAkJCS8qCiAJCQkgKiBObyBtb3JlIHR1cGxlcyBmcm9tIHRoZSBpbmRleC4gIEJ1 dCB3ZSBzdGlsbCBuZWVkIHRvIGRyYWluIGFueQpAQCAtODE0LDYgKzgxNCw3IEBAIEV4ZWNFbmRJ bmRleFNjYW4oSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5l dyBJbmRleE9ubHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdpbnN0cnVt ZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJQXNz ZXJ0KG5vZGUtPmlzc19JbnN0cnVtZW50LT5uaGVhcGZldGNoZXMgPT0gMCk7CiAJfQogCiAJLyoK QEAgLTE3MjYsNyArMTcyNyw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplRFNNKEluZGV4U2Nh blN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2Fu X3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlz c19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwK IAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNj YW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApAQCAtMTc5MCw3ICsx NzkxLDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhTY2FuU3RhdGUgKm5v ZGUsCiAKIAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwo bm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9u RGVzYywKKwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkg bm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJ CQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVy Z2Vqb2luLmMKaW5kZXggZjg0MjFhNzRjLi5jYjRiZWY3NmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlTWVyZ2Vqb2luLmMKQEAgLTU0LDggKzU0LDggQEAKICAqCQl0aGUgaW5uZXIgIjUncyIuIFRo aXMgcmVxdWlyZXMgcmVwb3NpdGlvbmluZyB0aGUgaW5uZXIgImN1cnNvciIKICAqCQl0byBwb2lu dCBhdCB0aGUgZmlyc3QgaW5uZXIgIjUiLiBUaGlzIGlzIGRvbmUgYnkgIm1hcmtpbmciIHRoZQog ICoJCWZpcnN0IGlubmVyIDUgc28gd2UgY2FuIHJlc3RvcmUgdGhlICJjdXJzb3IiIHRvIGl0IGJl Zm9yZSBqb2luaW5nCi0gKgkJd2l0aCB0aGUgc2Vjb25kIG91dGVyIDUuIFRoZSBhY2Nlc3MgbWV0 aG9kIGludGVyZmFjZSBwcm92aWRlcwotICoJCXJvdXRpbmVzIHRvIG1hcmsgYW5kIHJlc3RvcmUg dG8gYSB0dXBsZS4KKyAqCQl3aXRoIHRoZSBzZWNvbmQgb3V0ZXIgNS4gVGhlIGluZGV4YmF0Y2gu YyBpbnRlcmZhY2UgcHJvdmlkZXMKKyAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCByZXN0b3JlIHRv IGEgdHVwbGUgZHVyaW5nIGluZGV4IHNjYW5zLgogICoKICAqCiAgKgkJRXNzZW50aWFsIG9wZXJh dGlvbiBvZiB0aGUgbWVyZ2Ugam9pbiBhbGdvcml0aG0gaXMgYXMgZm9sbG93czoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDY3ZDlkYzM1Zi4uZDYxYzBiNmYzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAgLTQzLDcgKzQzLDcgQEAKIC8qIFdo ZXRoZXIgd2UgYXJlIGxvb2tpbmcgZm9yIHBsYWluIGluZGV4c2NhbiwgYml0bWFwIHNjYW4sIG9y IGVpdGhlciAqLwogdHlwZWRlZiBlbnVtCiB7Ci0JU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1 cHBvcnQgYW1nZXR0dXBsZSAqLworCVNUX0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFt Z2V0dHVwbGUgb3IgYW1nZXRiYXRjaCAqLwogCVNUX0JJVE1BUFNDQU4sCQkJCS8qIG11c3Qgc3Vw cG9ydCBhbWdldGJpdG1hcCAqLwogCVNUX0FOWVNDQU4sCQkJCQkvKiBlaXRoZXIgaXMgb2theSAq LwogfSBTY2FuVHlwZUNvbnRyb2w7CkBAIC03NDcsNyArNzQ3LDcgQEAgZ2V0X2luZGV4X3BhdGhz KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlJbmRleFBhdGggICpp cGF0aCA9IChJbmRleFBhdGggKikgbGZpcnN0KGxjKTsKIAotCQlpZiAoaW5kZXgtPmFtaGFzZ2V0 dHVwbGUpCisJCWlmIChpbmRleC0+YW1oYXNnZXRiYXRjaCkKIAkJCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgaXBhdGgpOwogCiAJCWlmIChpbmRleC0+YW1oYXNnZXRiaXRtYXAgJiYKQEAgLTgzNSw3 ICs4MzUsNyBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogCXN3aXRjaCAoc2NhbnR5cGUpCiAJewogCQljYXNlIFNUX0lOREVYU0NBTjoKLQkJ CWlmICghaW5kZXgtPmFtaGFzZ2V0dHVwbGUpCisJCQlpZiAoIWluZGV4LT5hbWhhc2dldGJhdGNo KQogCQkJCXJldHVybiBOSUw7CiAJCQlicmVhazsKIAkJY2FzZSBTVF9CSVRNQVBTQ0FOOgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IGIyZmJkNmEwOC4uNjY1ZGRjYTUzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0zMTAsMTEgKzMxMCwxMSBAQCBn ZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQs IGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBhbXJvdXRpbmUtPmFt c2VhcmNoYXJyYXk7CiAJCQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGFtcm91dGluZS0+YW1zZWFy Y2hudWxsczsKIAkJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gYW1yb3V0aW5lLT5hbWNhbnBhcmFs bGVsOwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9 IE5VTEwpOworCQkJCWluZm8tPmFtaGFzZ2V0YmF0Y2ggPSAoYW1yb3V0aW5lLT5hbWdldGJhdGNo ICE9IE5VTEwgfHwKKwkJCQkJCQkJCSAgIGFtcm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsK IAkJCQlpbmZvLT5hbWhhc2dldGJpdG1hcCA9IGFtcm91dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVM TCAmJgogCQkJCQlyZWxhdGlvbi0+cmRfdGFibGVhbS0+c2Nhbl9iaXRtYXBfbmV4dF90dXBsZSAh PSBOVUxMOwotCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IChhbXJvdXRpbmUtPmFtbWFya3BvcyAh PSBOVUxMICYmCi0JCQkJCQkJCQkgIGFtcm91dGluZS0+YW1yZXN0cnBvcyAhPSBOVUxMKTsKKwkJ CQlpbmZvLT5hbWNhbm1hcmtwb3MgPSBhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTDsKIAkJ CQlpbmZvLT5hbWNvc3Rlc3RpbWF0ZSA9IGFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGU7CiAJCQkJ QXNzZXJ0KGluZm8tPmFtY29zdGVzdGltYXRlICE9IE5VTEwpOwogCkBAIC00MTEsNyArNDExLDcg QEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVj dElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNlYXJjaGFycmF5ID0gZmFsc2U7CiAJ CQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGZhbHNlOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwg PSBmYWxzZTsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gZmFsc2U7CisJCQkJaW5mby0+YW1o YXNnZXRiYXRjaCA9IGZhbHNlOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gZmFsc2U7CiAJ CQkJaW5mby0+YW1jYW5tYXJrcG9zID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUg PSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxh dGlvbi5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4 IDBiMWQ4MGI1Yi4uNzZiMGQwMzVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9yZWxhdGlvbi5jCkBAIC04OTAsNyArODkwLDggQEAgSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJ ZGVudGl0eUZ1bGwoUmVsYXRpb24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQogCSAqIFRoZSBn aXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiwgd2hp Y2ggd2lsbAogCSAqIGJlIHVzZWQgbGF0ZXIgdG8gZmV0Y2ggdGhlIHR1cGxlcy4gIFNlZSBSZWxh dGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0aW5l QnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwp CisJaWYgKEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFs c2UpLT5hbWdldHR1cGxlID09IE5VTEwgJiYKKwkJR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4 cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJcmV0dXJu IGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvYW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRleCBjODFm YjYxYTAuLmRkZmQxYjU1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRp bHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMsMTAgKzM2 MywxMSBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCVBH X1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2x1c3RlcmFibGUpOwogCiAJCQljYXNlIEFNUFJPUF9J TkRFWF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVl IDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVM TCB8fAorCQkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJCWNhc2Ug QU1QUk9QX0JJVE1BUF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0 bWFwID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldGJp dG1hcCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQkFDS1dBUkRfU0NBTjoKIAkJCQlQR19S RVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmJhY2t3YXJkKTsKQEAgLTM5Miw3ICszOTMsOCBAQCBp bmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJUEdfUkVUVVJOX0JP T0wocm91dGluZS0+YW1jYW5tdWx0aWNvbCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0VYQ0xVREU6 Ci0JCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsK KwkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJ ICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fSU5D TFVERToKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVkZSk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9zZWxmdW5jcy5jCmluZGV4IGQ0ZGEwZThkZS4uNTRlYjBhZjY3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYwpAQCAtMTAyLDcgKzEwMiw2IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dpbi5o IgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgi Ci0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX3N0YXRpc3RpYy5oIgpAQCAtNzEwNCwxMCArNzEwMyw2IEBAIGdldF9hY3R1 YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAlib29sCQloYXZlX2RhdGEg PSBmYWxzZTsKIAlTbmFwc2hvdERhdGEgU25hcHNob3ROb25WYWN1dW1hYmxlOwogCUluZGV4U2Nh bkRlc2MgaW5kZXhfc2NhbjsKLQlCdWZmZXIJCXZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQlC bG9ja051bWJlciBsYXN0X2hlYXBfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JaW50CQkJ bl92aXNpdGVkX2hlYXBfcGFnZXMgPSAwOwotCUl0ZW1Qb2ludGVyIHRpZDsKIAlEYXR1bQkJdmFs dWVzW0lOREVYX01BWF9LRVlTXTsKIAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOwogCU1l bW9yeUNvbnRleHQgb2xkY29udGV4dDsKQEAgLTcxNTUsNjEgKzcxNTAsMjQgQEAgZ2V0X2FjdHVh bF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCSAqIGEgaHVnZSBhbW91bnQg b2YgdGltZSBoZXJlLCBzbyB3ZSBnaXZlIHVwIG9uY2Ugd2UndmUgcmVhZCB0b28gbWFueSBoZWFw CiAJICogcGFnZXMuICBXaGVuIHdlIGZhaWwgZm9yIHRoYXQgcmVhc29uLCB0aGUgY2FsbGVyIHdp bGwgZW5kIHVwIHVzaW5nCiAJICogd2hhdGV2ZXIgZXh0cmVtYWwgdmFsdWUgaXMgcmVjb3JkZWQg aW4gcGdfc3RhdGlzdGljLgorCSAqCisJICogWFhYIFRoaXMgY2FuJ3Qgd29yayB3aXRoIHRoZSBu ZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwKKwkgKiB3aGljaCBzaW1wbHkg d29uJ3QgcmV0dXJuIGEgdHVwbGUgdGhhdCBpc24ndCB2aXNpYmxlIHRvIG91ciBzbmFwc2hvdC4K KwkgKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgd2lsbCBuZWVkIHNvbWUga2luZCBvZiBjYWxs YmFjayB0aGF0IHByb3ZpZGVzCisJICogYSB3YXkgZm9yIHRoZSBzY2FuIHRvIGdpdmUgdXAgd2hl biB0aGUgY29zdHMgc3RhcnQgdG8gZ2V0IG91dCBvZiBoYW5kLgogCSAqLwogCUluaXROb25WYWN1 dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlz VGVzdEZvcihoZWFwUmVsKSk7CiAKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBS ZWwsIGluZGV4UmVsLAorCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5k ZXhSZWwsIHRydWUsCiAJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJ CQkJCQkgMSwgMCk7Ci0JLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQlpbmRl eF9zY2FuLT54c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChpbmRleF9zY2FuLT54c193YW50 X2l0dXApOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgMSwgTlVMTCwgMCk7 CiAKIAkvKiBGZXRjaCBmaXJzdC9uZXh0IHR1cGxlIGluIHNwZWNpZmllZCBkaXJlY3Rpb24gKi8K LQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRp cikpICE9IE5VTEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2Fu LCBpbmRleHNjYW5kaXIsIHRhYmxlc2xvdCkpCiAJewotCQlCbG9ja051bWJlciBibG9jayA9IEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKLQotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhl YXBSZWwsCi0JCQkJCQkJYmxvY2ssCi0JCQkJCQkJJnZtYnVmZmVyKSkKLQkJewotCQkJLyogUmF0 cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5ICovCi0JCQlp ZiAoIWluZGV4X2ZldGNoX2hlYXAoaW5kZXhfc2NhbiwgdGFibGVzbG90KSkKLQkJCXsKLQkJCQkv KgotCQkJCSAqIE5vIHZpc2libGUgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnksIHNvIHdlIG5l ZWQgdG8KLQkJCQkgKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGVudHJ5LiAgQmVmb3JlIGRvaW5nIHNv LCBjb3VudCBoZWFwCi0JCQkJICogcGFnZSBmZXRjaGVzIGFuZCBnaXZlIHVwIGlmIHdlJ3ZlIGRv bmUgdG9vIG1hbnkuCi0JCQkJICoKLQkJCQkgKiBXZSBkb24ndCBjaGFyZ2UgYSBwYWdlIGZldGNo IGlmIHRoaXMgaXMgdGhlIHNhbWUgaGVhcCBwYWdlCi0JCQkJICogYXMgdGhlIHByZXZpb3VzIHR1 cGxlLiAgVGhpcyBpcyBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUsCi0JCQkJICogc2luY2Ugb3Ro ZXIgcmVjZW50bHktYWNjZXNzZWQgcGFnZXMgYXJlIHByb2JhYmx5IHN0aWxsIGluCi0JCQkJICog YnVmZmVycyB0b287IGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciB0aGlzIGhldXJpc3RpYy4KLQkJ CQkgKi8KLSNkZWZpbmUgVklTSVRFRF9QQUdFU19MSU1JVCAxMDAKLQotCQkJCWlmIChibG9jayAh PSBsYXN0X2hlYXBfYmxvY2spCi0JCQkJewotCQkJCQlsYXN0X2hlYXBfYmxvY2sgPSBibG9jazsK LQkJCQkJbl92aXNpdGVkX2hlYXBfcGFnZXMrKzsKLQkJCQkJaWYgKG5fdmlzaXRlZF9oZWFwX3Bh Z2VzID4gVklTSVRFRF9QQUdFU19MSU1JVCkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWNv bnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQkJ CX0KLQotCQkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3IgYW55 dGhpbmcgKi8KLQkJCUV4ZWNDbGVhclR1cGxlKHRhYmxlc2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBX ZSBkb24ndCBjYXJlIHdoZXRoZXIgdGhlcmUncyBtb3JlIHRoYW4gb25lIHZpc2libGUgdHVwbGUg aW4KLQkJCSAqIHRoZSBIT1QgY2hhaW47IGlmIGFueSBhcmUgdmlzaWJsZSwgdGhhdCdzIGdvb2Qg ZW5vdWdoLgotCQkJICovCi0JCX0KLQogCQkvKgogCQkgKiBXZSBleHBlY3QgdGhhdCB0aGUgaW5k ZXggd2lsbCByZXR1cm4gZGF0YSBpbiBJbmRleFR1cGxlIG5vdAogCQkgKiBIZWFwVHVwbGUgZm9y bWF0LgpAQCAtNzI0MSw4ICs3MTk5LDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChS ZWxhdGlvbiBoZWFwUmVsLAogCQlicmVhazsKIAl9CiAKLQlpZiAodm1idWZmZXIgIT0gSW52YWxp ZEJ1ZmZlcikKLQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CiAJaW5kZXhfZW5kc2NhbihpbmRl eF9zY2FuKTsKIAogCXJldHVybiBoYXZlX2RhdGE7CmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hl Y2svdmVyaWZ5X25idHJlZS5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwppbmRl eCBiNzRhYjVmN2EuLjA2NTUzNjA5YiAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3Zlcmlm eV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCkBAIC0zOTMs NyArMzkzLDcgQEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBo ZWFwcmVsLCBib29sIGhlYXBrZXlzcGFjZSwKIAkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpKTsKIAogCS8qCi0JICogVGhpcyBhc3NlcnRpb24gbWF0Y2hlcyB0aGUgb25lIGluIGluZGV4 X2dldG5leHRfdGlkKCkuICBTZWUgcGFnZQorCSAqIFRoaXMgYXNzZXJ0aW9uIG1hdGNoZXMgdGhl IG9uZSBpbiBoZWFwYW1fYmF0Y2hfZ2V0bmV4dCgpLiAgU2VlIHBhZ2UKIAkgKiByZWN5Y2xpbmcv InZpc2libGUgdG8gZXZlcnlvbmUiIG5vdGVzIGluIG5idHJlZSBSRUFETUUuCiAJICovCiAJQXNz ZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKZGlmZiAtLWdpdCBhL2NvbnRy aWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXggNTExMWNk YzZkLi40NzZiNjRlOGIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBi L2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNDYsMTAgKzE0NiwxMiBAQCBibGhhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYmxiZWdpbnNjYW4sCiAJCS5hbXJl c2NhbiA9IGJscmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0g TlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBO VUxMLAogCQkuYW1nZXRiaXRtYXAgPSBibGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJsZW5k c2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFt cG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5h bWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIvZG9jL3NyYy9zZ21sL2luZGV4 YW0uc2dtbAppbmRleCBmNDhkYTMxODUuLmM3YTI5Mzg3MCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCkBAIC0xNjcs MTAgKzE2NywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGFtYmVnaW5z Y2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogICAgIGFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2Fu OwogICAgIGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgICAgIC8qIGNhbiBiZSBOVUxM ICovCisgICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAq LworICAgIGFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsJLyogY2Fu IGJlIE5VTEwgKi8KKyAgICBhbXVuZ3VhcmRiYXRjaF9mdW5jdGlvbiBhbXVuZ3VhcmRiYXRjaDsg LyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsg ICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0g ICAgYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsgICAgICAgLyogY2FuIGJlIE5VTEwgKi8K LSAgICBhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAgICAvKiBjYW4gYmUgTlVMTCAq LworICAgIGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8K IAogICAgIC8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBz Y2FucyAqLwogICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBh cmFsbGVsc2NhbjsgICAgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTY3Niw4ICs2NzgsMzggQEAgYW1i ZWdpbnNjYW4gKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAgICA8ZW1waGFzaXM+bXVzdDwvZW1w aGFzaXM+IGNyZWF0ZSB0aGlzIHN0cnVjdCBieSBjYWxsaW5nCiAgICA8ZnVuY3Rpb24+UmVsYXRp b25HZXRJbmRleFNjYW4oKTwvZnVuY3Rpb24+LiAgSW4gbW9zdCBjYXNlcwogICAgPGZ1bmN0aW9u PmFtYmVnaW5zY2FuPC9mdW5jdGlvbj4gZG9lcyBsaXR0bGUgYmV5b25kIG1ha2luZyB0aGF0IGNh bGwgYW5kIHBlcmhhcHMKLSAgIGFjcXVpcmluZyBsb2NrczsKKyAgIGFjcXVpcmluZyBsb2NrcyBh bmQgaW5pdGlhbGl6aW5nIHN0YW5kYXJkIDxzdHJ1Y3RuYW1lPkluZGV4U2NhbkRlc2M8L3N0cnVj dG5hbWU+IGZpZWxkczsKICAgIHRoZSBpbnRlcmVzdGluZyBwYXJ0cyBvZiBpbmRleC1zY2FuIHN0 YXJ0dXAgYXJlIGluIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+LgorICAgSW5kZXggYWNj ZXNzIG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g aW50ZXJmYWNlCisgICBtdXN0IGFsc28gc2V0IHRoZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBz Y2FuIGRlc2NyaXB0b3I6CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDttYXhpdGVtc2JhdGNoPC9saXRlcmFsPjog dGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zCisgICAgICB0aGF0IGNhbiBhcHBlYXIgaW4gYSBz aW5nbGUgYmF0Y2ggKHR5cGljYWxseSBkZXJpdmVkIGZyb20gdGhlIGluZGV4IHBhZ2UKKyAgICAg IHNpemUsIGUuZy4sIDxsaXRlcmFsPk1heEluZGV4VHVwbGVzUGVyUGFnZTwvbGl0ZXJhbD4pLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJh PgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemU8L2xpdGVy YWw+OiB0aGUKKyAgICAgIDxmdW5jdGlvbj5NQVhBTElHTjwvZnVuY3Rpb24+J2Qgc2l6ZSBvZiB0 aGUgaW5kZXggQU0ncyBwZXItYmF0Y2ggb3BhcXVlCisgICAgICBhcmVhLiAgRWFjaCBiYXRjaCBh bGxvY2F0aW9uIHJlc2VydmVzIHRoaXMgbXVjaCBzcGFjZSBpbW1lZGlhdGVseSBiZWZvcmUKKyAg ICAgIHRoZSA8c3RydWN0bmFtZT5JbmRleFNjYW5CYXRjaERhdGE8L3N0cnVjdG5hbWU+IHBvaW50 ZXIsIGZvciB1c2UgYnkgdGhlCisgICAgICBpbmRleCBBTSB0byBzdG9yZSBwZXItcGFnZSBuYXZp Z2F0aW9uIHN0YXRlIChlLmcuLCBiYXRjaCBpbmRleCBwYWdlJ3MKKyAgICAgIGJ1ZmZlciBwaW4g YW5kIHNpYmxpbmcgcGFnZSBsaW5rcykuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRj aF90dXBsZXNfd29ya3NwYWNlPC9saXRlcmFsPjogdGhlIHNpemUgaW4gYnl0ZXMKKyAgICAgIG9m IHRoZSBwZXItYmF0Y2ggdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UgdXNlZCBmb3IgaW5kZXgtb25s eSBzY2FucworICAgICAgKHR5cGljYWxseSA8bGl0ZXJhbD5CTENLU1o8L2xpdGVyYWw+KSwgb3Ig MCBpZiB0aGUgaW5kZXggQU0gZG9lcyBub3QKKyAgICAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2Fu cy4gIFRoZSB3b3Jrc3BhY2UgaXMgYWNjZXNzaWJsZSB2aWEKKyAgICAgIDxzdHJ1Y3RmaWVsZD5i YXRjaC0mZ3Q7Y3VyclR1cGxlczwvc3RydWN0ZmllbGQ+LgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC03 NDksNiArNzgxLDIyNyBAQCBhbWdldHR1cGxlIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8c3Ry dWN0ZmllbGQ+YW1nZXR0dXBsZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFt ZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBO VUxMLgogICA8L3BhcmE+CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgQXMgb2YgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2ZXJzaW9uIDE5LCBwb3NpdGlvbiBtYXJraW5n CisgICAgYW5kIHJlc3RvcmF0aW9uIG9mIHNjYW5zIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgZm9y IHRoZQorICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW50ZXJmYWNlOyBvbmx5 IHRoZQorICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIHN1cHBv cnRzIHRoaXMgZmVhdHVyZS4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorPHBy b2dyYW1saXN0aW5nPgorSW5kZXhTY2FuQmF0Y2gKK2FtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mg c2NhbiwKKyAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisgICAgICAgICAg ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUmV0dXJu IHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4gc2NhbiwgbW92aW5n IGluIHRoZQorICAgZ2l2ZW4gZGlyZWN0aW9uIChmb3J3YXJkIG9yIGJhY2t3YXJkIGluIHRoZSBp bmRleCkuICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mCisgICA8dHlwZT5JbmRleFNjYW5CYXRjaDwv dHlwZT4gd2l0aCBpbmRleCB0dXBsZXMgbG9hZGVkLCBvcgorICAgPGxpdGVyYWw+TlVMTDwvbGl0 ZXJhbD4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbgorICAg c2NhbiBkaXJlY3Rpb24uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0bworICAg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5k ZXggZW50cmllcyBpbiBiYXRjaGVzCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiAgQnkg cmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYQorICAgc2luZ2xlIGlu ZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBnYWlucyB2aXNpYmlsaXR5IGludG8gd2hp Y2ggdGFibGUKKyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCBpbiB0aGUgbmVhciBmdXR1cmUuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSB0YWJsZSBBTSBwYXNzZXMgdGhlIGJhdGNoIG1v c3QgcmVjZW50bHkgcmV0dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gZm9yIHRoZSBnaXZlbiBzY2FuIGFzCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFs PiAob3IgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gb24gdGhlIGZpcnN0IGNhbGwKKyAgIGZvciB0 aGUgc2NhbikuICBUaGUgaW5kZXggQU0gdXNlcyBpbmZvcm1hdGlvbiBmcm9tIDxsaXRlcmFsPnBy aW9yYmF0Y2g8L2xpdGVyYWw+CisgICB0byBkZXRlcm1pbmUgd2hpY2ggaW5kZXggcGFnZSB0byBy ZWFkIG5leHQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJuZWQgYnkg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBhc3NvY2lhdGVkIHdpdGggYQorICAg cGlubmVkIGluZGV4IHBhZ2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbS90 dXBsZS4gIFRoZSBidWZmZXIKKyAgIHBpbiBjYW4gYmUgaGVsZCBvbnRvIGJ5IHRoZSB0YWJsZSBB TSBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBjb25jdXJyZW50IFRJRAorICAgcmVjeWNsaW5nIGJ5 IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uICBUaGUgdGFibGUgQU0gZHJvcHMgdGhpcyBpbnRl cmxvY2sKKyAgIGJ5IGNhbGxpbmcgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4g d2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLgorICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxv Y2tpbmciLz4gZm9yIGRldGFpbHMgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50CisgICBkdXJpbmcg aW5kZXggc2NhbnMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgPHR5cGU+SW5kZXhTY2Fu QmF0Y2g8L3R5cGU+IHRoYXQgaXMgcmV0dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gaXMgbm8gbG9uZ2VyIG1hbmFnZWQgYnkgdGhlIGFjY2VzcyBtZXRob2QuCisg ICBJdCBpcyB1cCB0byB0aGUgdGFibGUgQU0gY2FsbGVyIHRvIGRlY2lkZSB3aGVuIGl0IHNob3Vs ZCBiZSBmcmVlZCAodmlhCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX2ZyZWVfYmF0Y2g8L2Z1 bmN0aW9uPikuICBOb3RlIGFsc28gdGhhdAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBmdW5jdGlvbnMgbXVzdCBuZXZlciBtb2RpZnkgdGhlCisgICA8c3RydWN0ZmllbGQ+cHJp b3JiYXRjaDwvc3RydWN0ZmllbGQ+IHBhcmFtZXRlci4gIFRoZSBjb3JlCisgICA8ZmlsZW5hbWU+ c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBwcm92 aWRlcyBhCisgICByZWZlcmVuY2UgZXhhbXBsZXMgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gaW50ZXJmYWNlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgc2Ft ZSBjYXZlYXRzIGRlc2NyaWJlZCBmb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBh cHBseSBoZXJlCisgICB0b286IGFuIGVudHJ5IGluIHRoZSByZXR1cm5lZCBiYXRjaCBtZWFucyBv bmx5IHRoYXQgdGhlIGluZGV4IGNvbnRhaW5zCisgICBhbiBlbnRyeSB0aGF0IG1hdGNoZXMgdGhl IHNjYW4ga2V5cywgbm90IHRoYXQgdGhlIHR1cGxlIG5lY2Vzc2FyaWx5IHN0aWxsCisgICBleGlz dHMgaW4gdGhlIGhlYXAgb3Igd2lsbCBwYXNzIHRoZSBjYWxsZXIncyBzbmFwc2hvdCB0ZXN0Lgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3Qgc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZn dDt4c19yZWNoZWNrPC9saXRlcmFsPiB0byBpbmRpY2F0ZSB3aGV0aGVyIHJlY2hlY2tpbmcgb2YK KyAgIHNjYW4ga2V5cyBpcyByZXF1aXJlZCwgaW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIGRvZXMuIEhvd2V2ZXIsIDxsaXRlcmFsPnNjYW4tJmd0 O3hzX3JlY2hlY2s8L2xpdGVyYWw+IG11c3QgYmUgc2V0IGNvbnNpc3RlbnRseQorICAgZm9yIGFu IGVudGlyZSBzY2FuIHJhdGhlciB0aGFuIHZhcnlpbmcgb24gYSBwZXItdHVwbGUgYmFzaXMuIFRo aXMgaXMgYSBrZXkKKyAgIGRpZmZlcmVuY2UgZnJvbSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+LCB3aGljaCBjYW4gc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9s aXRlcmFsPiBpbmRlcGVuZGVudGx5IGZvciBlYWNoIHR1cGxlIGl0IHJldHVybnMuCisgICBJbmRl eCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHJlcXVpcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyCisgICA8 bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IHVzZSB0aGUgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgorICAgaW50ZXJmYWNlIGluc3RlYWQgb2YgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgU2lt aWxhcmx5LCB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgZG9l cyBub3QgY3VycmVudGx5CisgICBzdXBwb3J0IGluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4g ZGF0YSBpbiB0aGUgZm9ybSBvZiBhCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5h bWU+IHBvaW50ZXIuICBJbmRleC1vbmx5IHNjYW5zIHdvcmsgYnkKKyAgIGNvcHlpbmcgPHN0cnVj dG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gcmVjb3JkcyBmcm9tIGluZGV4IHBhZ2VzIGlu dG8gYQorICAgbG9jYWwgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGJhdGNoLiAgPGxpdGVy YWw+eHNfaXR1cGRlc2M8L2xpdGVyYWw+CisgICB3b3JrcyBpbiB0aGUgc2FtZSB3YXkgYXMgYWxy ZWFkeSBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4uCisgICBU aGUgYWNjZXNzIG1ldGhvZCBtdXN0IG5vdCBzZXQgdGhlIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0 dXA8L2xpdGVyYWw+IG9yCisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19oaXR1cDwvbGl0ZXJhbD4g ZmllbGRzIGl0c2VsZi4KKyAgIFdpdGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwg dGhlIGluZGV4IEFNIHNldHMKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwPC9saXRlcmFs PiB0byBwb2ludCB0byBhIHJlY29uc3RydWN0ZWQKKyAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwv c3RydWN0bmFtZT4gd2hvc2UgbGlmZXRpbWUgZXh0ZW5kcyB1bnRpbCB0aGUgbmV4dAorICAgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBjYWxsICZtZGFzaDsgb25seSBvbmUgdHVwbGUg aXMgdmFsaWQgYXQgYQorICAgdGltZS4gIFdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiwgbXVsdGlwbGUgYmF0Y2hlcyBhcmUgaGVsZCBvcGVuCisgICBzaW11bHRhbmVvdXNseSBh bmQgaXRlbXMgYXJlIGNvbnN1bWVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSB0YWJsZSBBTSwgc28K KyAgIHRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgc2luZ2xlLXR1cGxlIGxpZmV0aW1lIGZvciBwZXIt aXRlbQorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiBwb2ludGVycy4gIFRo ZSBiYXRjaCBpbmZyYXN0cnVjdHVyZQorICAgcHJvdmlkZXMgcGVyLWJhdGNoIHN0b3JhZ2UgZm9y IDxzdHJ1Y3RuYW1lPkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+IGNvcGllcywKKyAgIGJ1dCBoYXMg bm8gYW5hbG9nb3VzIG1lY2hhbmlzbSBmb3IgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3Ru YW1lPiBkYXRhCisgICAodXNlZCBieSBpbmRleCBBTXMgc3VjaCBhcyA8YWNyb255bT5HaVNUPC9h Y3JvbnltPiBhbmQKKyAgIDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9ueW0+IGZvciByZWNvbnN0cnVj dGVkIHR1cGxlcyB0aGF0IG1pZ2h0IG5vdCBmaXQgaW4KKyAgIDxzdHJ1Y3RuYW1lPkluZGV4VHVw bGU8L3N0cnVjdG5hbWU+IGZvcm1hdCkuICBUaGlzIGxpbWl0YXRpb24gY291bGQgYmUKKyAgIGFk ZHJlc3NlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBhY2Nlc3Mg bWV0aG9kIG11c3QgcHJvdmlkZSBlaXRoZXIgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PgorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYnV0IG5vdCBib3RoLgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0 aG9kIHN1cHBvcnRzIDxxdW90ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5zLiAgSWYgaXQgZG9l c24ndCwKKyAgIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZpZWxkIGluIGl0 cworICAgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+IHN0cnVjdCBtdXN0 IGJlIHNldCB0byBOVUxMLgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+ Cit2b2lkCithbWtpbGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAg ICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2Fs bGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIGEgYmF0 Y2ggdGhhdAorICAgY29udGFpbnMgZGVhZCBpdGVtcywgdG8gc2V0IDxsaXRlcmFsPkxQX0RFQUQ8 L2xpdGVyYWw+IGJpdHMgaW4gdGhlIGJhdGNoJ3MKKyAgIGluZGV4IHBhZ2UuICBUaGUgYmF0Y2gn cyBpbmRleCBwYWdlIHdpbGwgbm90IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyOyB0aGUKKyAgIGlu ZGV4IEFNIG11c3QgYWNxdWlyZSBhbmQgcmVsZWFzZSBpdHMgb3duIGxvY2sgb24gdGhlIGluZGV4 IHBhZ2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoaWxlIGltcGxlbWVudGluZyA8ZnVu Y3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGlzIG9wdGlvbmFsLAorICAgZG9pbmcg c28gaXMgcmVjb21tZW5kZWQgZm9yIHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0dXJlIHNj YW5zIHRvIHNraXAKKyAgIGtub3duLWRlYWQgaW5kZXggZW50cmllcy4gIFRoZSBjb3JlIGluZGV4 IGFjY2VzcyBtZXRob2QgdGhhdCBjdXJyZW50bHkKKyAgIHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlKSBpbXBsZW1lbnRzCisgICA8bGl0ZXJhbD5MUF9ERUFE PC9saXRlcmFsPiBtYXJraW5nLCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNzIG1ldGhv ZHMKKyAgIGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlzIGZlYXR1 cmUuCisgICBUaGUgdGFibGUgQU0gbWF5IGNhbGwKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxf a2lsbF9zY2FucG9zaXRlbTwvZnVuY3Rpb24+IHRvIG1hcmsgZGVhZCBpdGVtcyBhcworICAgdGhl IHNjYW4gcHJvZ3Jlc3Nlcy4gIElmIHRoZSBiYXRjaCBjb250YWlucyBhbnkgc3VjaCBkZWFkIGl0 ZW1zLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRlYWRJdGVtczwvc3RydWN0ZmllbGQ+ IGFycmF5IHdpbGwgaGF2ZSBiZWVuIHNvcnRlZCBhbmQKKyAgIGRlZHVwbGljYXRlZCBiZWZvcmUg PGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIHdpdGgKKyAg IGl0ZW0gb2Zmc2V0cyBhcHBlYXJpbmcgaW4gYXNjZW5kaW5nIG9yZGVyICh0aGF0IGlzLCBpbiBp bmRleCBwYWdlIG9yZGVyLAorICAgd2hpY2ggaXMgYWxzbyBiYXRjaCBvcmRlcikgYW5kIG5vIG9m ZnNldCBhcHBlYXJpbmcgbW9yZSB0aGFuIG9uY2UuICBJbmRleAorICAgYWNjZXNzIG1ldGhvZHMg Y2FuIHJlbHkgb24gdGhpcyBvcmRlcmluZyB3aGVuIHByb2Nlc3NpbmcgZGVhZCBpdGVtczogdGhl CisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgY2FuIGJlIHdh bGtlZCBpbiBsb2Nrc3RlcCB3aXRoCisgICB0aGUgaW5kZXggcGFnZSdzIGl0ZW0gcG9pbnRlcnMs IHNpbmNlIGJvdGggYXJlIGluIGFzY2VuZGluZyBvZmZzZXQgb3JkZXIuCisgICBUaGlzIGFsc28g bWVhbnMgdGhlIHRhYmxlIEFNIG5lZWQgbm90IGNhbGwKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0 aWxfa2lsbF9zY2FucG9zaXRlbTwvZnVuY3Rpb24+IGluIGFueSBwYXJ0aWN1bGFyIG9yZGVyLgor ICAgKEluZGV4IGFjY2VzcyBtZXRob2RzIHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4gcmVseSBvbiB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5raWxsX3ByaW9yX3R1cGxlPC9zdHJ1 Y3RmaWVsZD4gbWVjaGFuaXNtIGluc3RlYWQgdG8gbWFyayBkZWFkCisgICB0dXBsZXM7IHRoZSA8 ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRp b24KKyAgIHByb3ZpZGVzIGEgcmVmZXJlbmNlIGV4YW1wbGUuKQorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBXaGVuIGltcGxlbWVudGluZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVu Y3Rpb24+LCB0aGUgaW5kZXggQU0KKyAgIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGUgaW5kZXggcGFn ZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGJhdGNoIHdhcworICAgb3JpZ2luYWxs eSByZWFkLiAgVGhlIGJhdGNoJ3MgPHN0cnVjdGZpZWxkPmxzbjwvc3RydWN0ZmllbGQ+IGZpZWxk IHJlY29yZHMKKyAgIHRoZSBwYWdlIExTTiBhdCB0aGUgdGltZSB0aGUgaW5kZXggcGFnZSBsb2Nr IHdhcyByZWxlYXNlZCAoc2V0CisgICBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlIGNvZGUpLiAg VGhlIGluZGV4IEFNIHNob3VsZCByZS1yZWFkIHRoZSBwYWdlLAorICAgY29tcGFyZSB0aGUgY3Vy cmVudCBwYWdlIExTTiBhZ2FpbnN0IDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7bHNuPC9zdHJ1Y3Rm aWVsZD4sCisgICBhbmQgZ2l2ZSB1cCBvbiBzZXR0aW5nIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVy YWw+IGJpdHMgaWYgdGhlIExTTiBoYXMKKyAgIGFkdmFuY2VkLiAgQW4gYWR2YW5jZWQgTFNOIGlu ZGljYXRlcyB0aGF0IHRoZSBwYWdlIHdhcyBtb2RpZmllZCAmbWRhc2g7CisgICBwb3NzaWJseSBi eSA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGluZyBoZWFwIFRJRHMgJm1kYXNoOyBz byBpdAorICAgd291bGQgYmUgdW5zYWZlIHRvIGFzc3VtZSB0aGF0IGluZGV4IGVudHJpZXMgc3Rp bGwgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcAorICAgdHVwbGVzLiAgU2luY2UgPGxpdGVyYWw+TFBf REVBRDwvbGl0ZXJhbD4gbWFya2luZyBpcyBvbmx5IGFuIG9wdGltaXphdGlvbgorICAgaGludCwg aXQgaXMgYWx3YXlzIHNhZmUgdG8gc2tpcCBpdC4gIE5vdGUgdGhhdCB0aGlzIExTTiBjb21wYXJp c29uCisgICB0ZWNobmlxdWUgcmVxdWlyZXMgdGhlIGluZGV4IEFNIHRvIHVzZSBmYWtlIChtb25v dG9uaWNhbGx5IGluY3JlYXNpbmcpCisgICBMU05zIG9uIGl0cyBwYWdlcyBmb3IgcmVsYXRpb25z IHdoZXJlIFdBTCBpcyBub3QgZ2VuZXJhdGVkLCBzaW5jZSByZWFsCisgICBMU05zIGFyZSBub3Qg YXZhaWxhYmxlIGluIHRoYXQgY2FzZS4gIEFuIGluZGV4IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVt ZW50CisgICBmYWtlIExTTnMgY2FuIHN0aWxsIHByb3ZpZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1z YmF0Y2g8L2Z1bmN0aW9uPiwgYnV0CisgICBzaG91bGQgc2ltcGx5IGRvIG5vdGhpbmcgd2hlbiB0 aGUgcmVsYXRpb24gZG9lcyBub3QgZ2VuZXJhdGUgV0FMIChpLmUuLAorICAgd2hlbiA8ZnVuY3Rp b24+UmVsYXRpb25OZWVkc1dBTCgpPC9mdW5jdGlvbj4gaXMgZmFsc2UpLCBzaW5jZSB0aGUgTFNO CisgICBjb21wYXJpc29uIHdvdWxkIGJlIHVucmVsaWFibGUuICBTZWUgdGhlIEItdHJlZSBpbmRl eCBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgIGEgcmVmZXJlbmNlIGV4YW1wbGUgb2YgdGhpcyB0ZWNo bmlxdWUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBBTSBtYXkgY2hvb3Nl IHRvIHJldGFpbiBpdHMgb3duIGJ1ZmZlciBwaW5zIHdoZW4gdGhpcyBzZXJ2ZXMgYW4KKyAgIGlu dGVybmFsIHB1cnBvc2UgKGZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2NlbnQgc3RhY2sg b2YgcGlubmVkIGluZGV4CisgICBwYWdlcyBmb3IgcmV1c2UgYWNyb3NzIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMpLiAgSG93ZXZlciwKKyAgIGFueSBzY2hlbWUgdGhhdCBy ZXRhaW5zIGJ1ZmZlciBwaW5zIG1hbmFnZWQgYnkgdGhlIGluZGV4IEFNIG11c3QgYmUgc3VyZSB0 bworICAgZnJlZSB0aGUgcGlucyBhdCBhbiBvcHBvcnR1bmUgcG9pbnQgKGZvciBleGFtcGxlIHdo ZW4gPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4KKyAgIGFuZC9vciA8ZnVuY3Rpb24+YW1l bmRzY2FuPC9mdW5jdGlvbj4gYXJlIGNhbGxlZCkuICBJdCBtdXN0IGFsc28ga2VlcCB0aGUKKyAg IG51bWJlciBvZiByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbCwgdG8gYXZvaWQgZXhoYXVz dGluZyB0aGUgYmFja2VuZCdzCisgICBidWZmZXIgcGluIGxpbWl0LgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBmdW5j dGlvbiBpcyBvcHRpb25hbC4gIEluZGV4CisgICBhY2Nlc3MgbWV0aG9kcyB0aGF0IHdhbnQgdG8g bWFyayBkZWFkIGluZGV4IHR1cGxlcyB3aXRoCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFs PiBiaXRzIHNob3VsZCBwcm92aWRlIGl0OyB0aG9zZSB0aGF0IGRvbid0IGNhbgorICAgbGVhdmUg aXQgc2V0IHRvIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IGV2ZW4gd2hlbiB0aGV5IHByb3ZpZGUK KyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFy YT4KKzxwcm9ncmFtbGlzdGluZz4KK3ZvaWQKK2FtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNj IHNjYW4sCisgICAgICAgICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworPC9wcm9ncmFt bGlzdGluZz4KKyAgIENhbGxlZCBieSB0aGUgdGFibGUgQU0gKHZpYQorICAgPGZ1bmN0aW9uPnRh YmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoPC9mdW5jdGlvbj4pIHdoZW4gaXQgaXMgc2FmZSB0byBk cm9wCisgICB0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgdGhhdCB0aGUgaW5kZXggQU0gaG9s ZHMgb24gdGhlIGJhdGNoJ3MgaW5kZXgKKyAgIGxlYWYgcGFnZSwgd2hpY2ggcHJldmVudHMgY29u Y3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+Lgor ICAgKEZvcm1hbGx5LCBhbiBpbmRleCBBTSBtYXkgaG9sZCBhIGRpZmZlcmVudCBraW5kIG9mIGlu dGVybG9jaywgb3IgbXVsdGlwbGUKKyAgIGludGVybG9ja3MsIGluIGl0cyBwZXItYmF0Y2ggb3Bh cXVlIGFyZWEsIGJ1dCBpbiBwcmFjdGljZSB0aGUgYnVpbHQtaW4KKyAgIGluZGV4IEFNIHRoYXQg c3VwcG9ydHMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IEItdHJlZQor ICAgJm1kYXNoOyBob2xkcyBhIHNpbmdsZSBidWZmZXIgcGluLikgVGhpcyBmdW5jdGlvbiBtdXN0 IGJlIGlkZW1wb3RlbnQ6CisgICBpdCBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGZvciB0 aGUgc2FtZSBiYXRjaCwgYW5kIG11c3QgZG8gbm90aGluZyBpZgorICAgdGhlIGludGVybG9jayBo YXMgYWxyZWFkeSBiZWVuIGRyb3BwZWQuICBJbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgYSBidWZm ZXIKKyAgIHBpbiBzaG91bGQgY2hlY2sgd2hldGhlciB0aGUgYnVmZmVyIGlzIHN0aWxsIHZhbGlk IGJlZm9yZSByZWxlYXNpbmcgaXQsIGFuZAorICAgc2V0IGl0IHRvIDxsaXRlcmFsPkludmFsaWRC dWZmZXI8L2xpdGVyYWw+IGFmdGVyd2FyZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhl IDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIHJlcXVpcmVk IGZvciBhbnkgaW5kZXgKKyAgIGFjY2VzcyBtZXRob2QgdGhhdCBwcm92aWRlcyA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+LgorICA8L3BhcmE+CiAKICAgPHBhcmE+CiA8cHJvZ3JhbWxp c3Rpbmc+CkBAIC03NjgsOCArMTAyMSw4IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNj YW4sCiAgICBpdHNlbGYsIGFuZCB0aGVyZWZvcmUgY2FsbGVycyByZWNoZWNrIGJvdGggdGhlIHNj YW4gY29uZGl0aW9ucyBhbmQgdGhlCiAgICBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSAoaWYgYW55 KSBmb3IgcmVjaGVja2FibGUgdHVwbGVzLiAgVGhhdCBtaWdodCBub3QKICAgIGFsd2F5cyBiZSB0 cnVlLCBob3dldmVyLgotICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gYW5kCi0g ICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbm5vdCBiZSB1c2VkIGluIHRoZSBz YW1lIGluZGV4IHNjYW47IHRoZXJlCisgICBPbmx5IG9uZSBvZiA8ZnVuY3Rpb24+YW1nZXRiaXRt YXA8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwKKyAgIG9yIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FuIGJlIHVzZWQgaW4gYW55IGdpdmVuIGlu ZGV4IHNjYW47IHRoZXJlCiAgICBhcmUgb3RoZXIgcmVzdHJpY3Rpb25zIHRvbyB3aGVuIHVzaW5n IDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCBhcyBleHBsYWluZWQKICAgIGluIDx4 cmVmIGxpbmtlbmQ9ImluZGV4LXNjYW5uaW5nIi8+LgogICA8L3BhcmE+CkBAIC03ODEsNiArMTAz NCwyOSBAQCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgc3RydWN0IG11c3Qg YmUgc2V0IHRvIE5VTEwuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEluZGV4IGFjY2VzcyBt ZXRob2RzIHRoYXQgdXNlIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVy ZmFjZQorICAgd2lsbCBnZW5lcmFsbHkgYWxzbyB3YW50IHRvIHVzZSB0aGUgYmF0Y2ggYWxsb2Nh dGlvbiBpbmZyYXN0cnVjdHVyZQorICAgKDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxs b2M8L2Z1bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFz ZTwvZnVuY3Rpb24+KSB3aXRoaW4gdGhlaXIKKyAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVu Y3Rpb24+IGltcGxlbWVudGF0aW9uLiAgVGhlIGNvbnZlbnRpb24gaXMgdGhhdCBvbmx5CisgICBv bmUgYmF0Y2ggaXMgYWxsb2NhdGVkIGF0IGEgdGltZSBkdXJpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0 bWFwPC9mdW5jdGlvbj4sCisgICB1bmxpa2UgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiB3aGVyZSBzZXZlcmFsIGJhdGNoZXMgbWF5IGJlCisgICBvdXRzdGFuZGluZyBpbiB0aGUgYmF0 Y2ggcmluZyBidWZmZXIgY29uY3VycmVudGx5LiAgVG8gbWFpbnRhaW4gdGhpcworICAgb25lLWJh dGNoLWF0LWEtdGltZSBpbnZhcmlhbnQsIHRoZSBpbmRleCBBTSBpdHNlbGYgcmVsZWFzZXMgaXRz IHByaW9yIGJhdGNoCisgICB2aWEgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNl PC9mdW5jdGlvbj4ganVzdCBhcyB0aGUgc2NhbiBsZWF2ZXMKKyAgIHRoYXQgYmF0Y2gncyBpbmRl eCBwYWdlIGFuZCBpcyBhYm91dCB0byBnZW5lcmF0ZSB0aGUgbmV4dCBiYXRjaCAmbWRhc2g7IHRo ZQorICAgc2FtZSBwb2ludCB3aGVyZSBpdCBleHRyYWN0cyBuYXZpZ2F0aW9uIHN0YXRlIChzdWNo IGFzIHNpYmxpbmctcGFnZSBsaW5rcykKKyAgIGZyb20gPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0 ZXJhbD4uICBUaGlzIGVhcmx5IHJlbGVhc2UgaXMgc3BlY2lmaWMgdG8KKyAgIDxmdW5jdGlvbj5h bWdldGJpdG1hcDwvZnVuY3Rpb24+IHNjYW5zOyBkdXJpbmcgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPgorICAgc2NhbnMgdGhlIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IGlz IHN0cmljdGx5IG93bmVkIGJ5IHRoZSB0YWJsZSBBTQorICAgYW5kIGNvcmUgY29kZSwgYW5kIHRo ZSBpbmRleCBBTSBtdXN0IG5ldmVyIHJlbGVhc2UgaXQuICBTZWUKKyAgIDxmdW5jdGlvbj5fYnRf bmV4dDwvZnVuY3Rpb24+IGZvciBhCisgICByZWZlcmVuY2UgZXhhbXBsZS4gIFRoZSByZWxlYXNl ZCBiYXRjaCBpcyBjYWNoZWQgaW50ZXJuYWxseSBhbmQgcmV1c2VkIGJ5CisgICB0aGUgbmV4dCA8 ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jPC9mdW5jdGlvbj4gY2FsbCwgYXZvaWRp bmcKKyAgIHJlcGVhdGVkIG1lbW9yeSBhbGxvY2F0aW9uIGR1cmluZyB0aGUgYml0bWFwIHNjYW4u CisgIDwvcGFyYT4KKwogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQKQEAgLTc5NSwz MiArMTA3MSw0NCBAQCBhbWVuZHNjYW4gKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgIDxwYXJhPgog PHByb2dyYW1saXN0aW5nPgogdm9pZAotYW1tYXJrcG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOwor YW1wb3NyZXNldCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpOwogPC9wcm9ncmFtbGlzdGluZz4KLSAgIE1hcmsgY3VycmVudCBzY2FuIHBvc2l0 aW9uLiAgVGhlIGFjY2VzcyBtZXRob2QgbmVlZCBvbmx5IHN1cHBvcnQgb25lCi0gICByZW1lbWJl cmVkIHNjYW4gcG9zaXRpb24gcGVyIHNjYW4uCisgICBOb3RpZnkgdGhlIGluZGV4IEFNIHRoYXQg dGhlIHRhYmxlIEFNIGlzIGFib3V0IHRvIGNoYW5nZSB0aGUgc2NhbidzCisgICBsb2dpY2FsIHBv c2l0aW9uIGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgdGhlIGluZGV4IEFNIHRvIHJlc2V0IGFueSBz dGF0ZQorICAgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzLiAg Rm9yIGV4YW1wbGUsIEItdHJlZSBtdXN0CisgICByZXNldCB0aGUgYXJyYXkga2V5cyB1c2VkIGJ5 IDxsaXRlcmFsPlNjYWxhckFycmF5T3BFeHByPC9saXRlcmFsPiBxdWFsCisgICBldmFsdWF0aW9u IHdoZW4gdGhlIHNjYW4gcG9zaXRpb24gY2hhbmdlcy4gIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tl ZCB3aGVuCisgICB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gcHJvY2VzcyBhIGJhdGNoIGluIGEg ZGlmZmVyZW50IGRpcmVjdGlvbiB0aGFuCisgICB3YXMgdXNlZCB3aGVuIHRoZSBiYXRjaCB3YXMg b3JpZ2luYWxseSByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiwgYW5kIGFsc28gd2hlbiBhIG1hcmtlZCBzY2FuIHBvc2l0aW9uIGlzCisgICBhYm91dCB0byBi ZSByZXN0b3JlZC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbW1h cmtwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFj Y2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAot ICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbW1hcmtwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMg PHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJl IHNldCB0byBOVUxMLgorICAgV2hlbiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGlz IGNhbGxlZCBkdWUgdG8gYSBjcm9zcy1iYXRjaAorICAgZGlyZWN0aW9uIGNoYW5nZSwgdGhlIGNv cmUgc3lzdGVtIHdpbGwgaGF2ZSBhbHJlYWR5IGZsaXBwZWQgdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1 Y3RmaWVsZD5kaXI8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byByZWZsZWN0IHRoZSBuZXcgc2NhbiBk aXJlY3Rpb24KKyAgIGJlZm9yZSBtYWtpbmcgdGhlIGNhbGwuICBUaGUgaW5kZXggQU0gc2hvdWxk IHVzZSB0aGlzIHVwZGF0ZWQgZGlyZWN0aW9uCisgICB3aGVuIHJlc2V0dGluZyBhbnkgc3RhdGUg dGhhdCBkZXBlbmRzIG9uIGtub3dpbmcgd2hpY2ggd2F5IHRoZSBzY2FuIGlzCisgICBwcm9jZWVk aW5nLiAgV2hlbiBjYWxsZWQgdG8gcmVzdG9yZSBhIG1hcmtlZCBwb3NpdGlvbiwgdGhlIGJhdGNo J3MKKyAgIDxzdHJ1Y3RmaWVsZD5kaXI8L3N0cnVjdGZpZWxkPiBpcyBub3QgbW9kaWZpZWQ7IGl0 IHJldGFpbnMgdGhlIGRpcmVjdGlvbgorICAgZnJvbSB3aGVuIHRoZSBiYXRjaCB3YXMgb3JpZ2lu YWxseSByZXR1cm5lZC4gIEluIGJvdGggY2FzZXMsIHRoZSBiYXRjaAorICAgcGFzc2VkIHRvIDxm dW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gaXMgdGhlIGJhdGNoIHRoYXQgd2lsbCBiZSB1 c2VkCisgICB0byBjb250aW51ZSB0aGUgc2Nhbi4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotPHBy b2dyYW1saXN0aW5nPgotdm9pZAotYW1yZXN0cnBvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLTwv cHJvZ3JhbWxpc3Rpbmc+Ci0gICBSZXN0b3JlIHRoZSBzY2FuIHRvIHRoZSBtb3N0IHJlY2VudGx5 IG1hcmtlZCBwb3NpdGlvbi4KLSAgPC9wYXJhPgotCi0gIDxwYXJhPgotICAgVGhlIDxmdW5jdGlv bj5hbXJlc3RycG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlm IHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9l c24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1yZXN0cnBvczwvc3RydWN0ZmllbGQ+IGZpZWxk IGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KLSAgIHN0cnVj dCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IGhhdmUg cHJpdmF0ZSBzdGF0ZSB3aGljaCBtdXN0IGJlIHJlc2V0IHdoZW4gdGhlCisgICBzY2FuIHBvc2l0 aW9uIGNoYW5nZXMgbXVzdCBwcm92aWRlIGFuIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlv bj4KKyAgIGltcGxlbWVudGF0aW9uLiAgSW5kZXggQU1zIHdpdGggbm8gc3VjaCBzdGF0ZSBtYXkg c2V0CisgICA8c3RydWN0ZmllbGQ+YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+IHRvIE5VTEwuCisg ICBUaGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjYW4gb25seSBi ZSBwcm92aWRlZCB3aGVuIHRoZQorICAgYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNj YW5zIHRocm91Z2ggdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIGludGVy ZmFjZS4gIChOb3RlIHRoYXQgd2hlbiA8c3RydWN0ZmllbGQ+YW1jYW5iYWNrd2FyZDwvc3RydWN0 ZmllbGQ+IGlzCisgICBmYWxzZSwgdGhlIHNjYW4gZGlyZWN0aW9uIGNhbm5vdCBjaGFuZ2UsIHNv CisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IHdpbGwgb25seSBiZSBjYWxsZWQg ZHVlIHRvIG1hcmsvcmVzdG9yZQorICAgaW4gdGhhdCBjYXNlLikKICAgPC9wYXJhPgogCiAgIDxw YXJhPgpAQCAtOTc1LDYgKzEyNjMsOCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBl IGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICAgICAgQWNjZXNzIG1l dGhvZHMgdGhhdCBhbHdheXMgcmV0dXJuIGVudHJpZXMgaW4gdGhlIG5hdHVyYWwgb3JkZXJpbmcK ICAgICAgICBvZiB0aGVpciBkYXRhIChzdWNoIGFzIGJ0cmVlKSBzaG91bGQgc2V0CiAgICAgICAg PHN0cnVjdGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLgorICAgICAgIEJv dGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPgorICAgICAgIHNjYW5zIHN1cHBvcnQgdGhpcyBjYXBhYmlsaXR5LgogICAg ICAgIEN1cnJlbnRseSwgc3VjaCBhY2Nlc3MgbWV0aG9kcyBtdXN0IHVzZSBidHJlZS1jb21wYXRp YmxlIHN0cmF0ZWd5CiAgICAgICAgbnVtYmVycyBmb3IgdGhlaXIgZXF1YWxpdHkgYW5kIG9yZGVy aW5nIG9wZXJhdG9ycy4KICAgICAgIDwvcGFyYT4KQEAgLTk4Nyw0MSArMTI3Nyw1NiBAQCBhbXRy YW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9w Y2ludHlwZSk7CiAgICAgICAgYW4gb3JkZXIgc2F0aXNmeWluZyA8bGl0ZXJhbD5PUkRFUiBCWTwv bGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmluZGV4X2tleTwvcmVwbGFjZWFibGU+CiAgICAgICAgPHJl cGxhY2VhYmxlPm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmNvbnN0YW50PC9y ZXBsYWNlYWJsZT4uICBTY2FuIG1vZGlmaWVycwogICAgICAgIG9mIHRoYXQgZm9ybSBjYW4gYmUg cGFzc2VkIHRvIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+IGFzIGRlc2NyaWJlZAotICAg ICAgIHByZXZpb3VzbHkuCisgICAgICAgcHJldmlvdXNseS4gIE5vdGUgdGhhdCA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIGRvIG5vdAorICAgICAgIGN1cnJlbnRseSBzdXBw b3J0IG9yZGVyaW5nIG9wZXJhdG9ycy4gIFRoZSBjb3JlIGV4ZWN1dG9yIGV4cGVjdHMKKyAgICAg ICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRvIHNldAorICAgICAgIDxzdHJ1Y3Rm aWVsZD54c19vcmRlcmJ5dmFsczwvc3RydWN0ZmllbGQ+IGZvciBlYWNoIHJldHVybmVkIHR1cGxl LCBidXQKKyAgICAgICB0aGVyZSBpcyBjdXJyZW50bHkgbm8gbWVjaGFuaXNtIHRvIGFzc29jaWF0 ZSBwZXItaXRlbSBvcmRlcmluZyB2YWx1ZXMKKyAgICAgICB3aXRoIGluZGl2aWR1YWwgaXRlbXMg d2l0aGluIGEgYmF0Y2guICBUaGlzIHdvdWxkIHJlcXVpcmUgYW4gYWRkaXRpb25hbAorICAgICAg IGxheWVyIG9mIGluZGlyZWN0aW9uIHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LCBidXQgY291bGQg YmUgYWRkZWQgaW4gYQorICAgICAgIGZ1dHVyZSB2ZXJzaW9uIG9mIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4uCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgPC9pdGVtaXplZGxpc3Q+CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhhcyBhIDxsaXRlcmFsPmRpcmVjdGlv bjwvbGl0ZXJhbD4gYXJndW1lbnQsCisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPiBhbmQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgZnVuY3Rpb25zIGhh dmUgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAgd2hpY2ggY2Fu IGJlIGVpdGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4gKHRoZSBu b3JtYWwgY2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVy YWw+LiAgSWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVu Y3Rpb24+IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+ LCB0aGVuIHRoZQogICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMgdG8gYmUgc2Nh bm5lZCBiYWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFsIGZyb250LXRv LWJhY2sgZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3Qg cmV0dXJuCi0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgsIHJhdGhlciB0 aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRoaXMgd2lsbCBv bmx5IG9jY3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFt Y2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAgZmlyc3QgY2Fs bCwgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFk dmFuY2UgdGhlIHNjYW4gaW4KKyAgIHRoZSBub3JtYWwgZnJvbnQtdG8tYmFjayBkaXJlY3Rpb24u ICBJbiB0aGlzIGNhc2UsCisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3Qg cmV0dXJuIHRoZSBsYXN0IG1hdGNoaW5nIHR1cGxlIGluIHRoZQorICAgaW5kZXgsIHJhdGhlciB0 aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQgbm9ybWFsbHkgd291bGQuICBTaW1pbGFybHksCisgICA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3QgcmV0dXJuIHRoZSBsYXN0IG1hdGNo aW5nIGJhdGNoIG9mIGl0ZW1zCisgICB3aGVuIGVpdGhlciB0aGUgZmlyc3QgY2FsbCBhZnRlciA8 ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMKKyAgIDxsaXRlcmFsPkJhY2t3 YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4sIG9yIGEgc3Vic2VxdWVudCBjYWxsIGhhcworICAg PGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gYXMgaXRzIDxzdHJ1Y3RmaWVsZD5wcmlvcmJhdGNoPC9z dHJ1Y3RmaWVsZD4gYXJndW1lbnQKKyAgIChpbmRpY2F0aW5nIGEgYmFja3dhcmQgc2NhbiByZXN0 YXJ0KS4gIChUaGlzIGJhY2t3YXJkLXNjYW4gYmVoYXZpb3Igd2lsbAorICAgb25seSBvY2N1ciBm b3IgYWNjZXNzIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVj dGZpZWxkPgorICAgdG8gdHJ1ZS4pICBBZnRlciB0aGUgZmlyc3QgY2FsbCwgYm90aCA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4KICAgIGVpdGhl ciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5lZCBlbnRyeS4gIChCdXQg aWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgZmFsc2Us IGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhhdmUgdGhlIHNhbWUgZGlyZWN0aW9uIGFz IHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBBY2Nlc3MgbWV0aG9k cyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0IHN1cHBvcnQgPHF1b3RlPm1hcmtpbmc8 L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVybmluZyB0byB0 aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAgIHBvc2l0aW9uIG1pZ2h0IGJlIHJlc3Rv cmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25seSBvbmUgcG9zaXRpb24gbmVlZAotICAg YmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rp b24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlvdXNseSBtYXJrZWQgcG9zaXRpb24uICBB biBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBvcmRlcmVkCi0gICBzY2FucyBu ZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0 aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVuY3Rpb25zIGluIDxzdHJ1Y3RuYW1lPklu ZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRob3NlIHBvaW50ZXJzIHRvIE5VTEwKLSAg IGluc3RlYWQuCisgICBTY2FucyB1c2luZyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBpbnRlcmZhY2Ugc3VwcG9ydAorICAgPHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhIHBvc2l0 aW9uIGluIGEgc2NhbiBhbmQgbGF0ZXIgcmV0dXJuaW5nIHRvIHRoZQorICAgbWFya2VkIHBvc2l0 aW9uLiAgV2hlbiBhIGJhdGNoIGlzIHByb2Nlc3NlZCBpbiBhIGRpZmZlcmVudCBkaXJlY3Rpb24g dGhhbgorICAgaXQgd2FzIG9yaWdpbmFsbHkgZmV0Y2hlZCwgb3Igd2hlbiBhIG1hcmtlZCBwb3Np dGlvbiBpcyByZXN0b3JlZCwgdGhlIGluZGV4CisgICBBTSBpcyBub3RpZmllZCB2aWEgdGhlIDxm dW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gY2FsbGJhY2sgKGlmCisgICBwcm92aWRlZCkg c28gaXQgY2FuIHJlc2V0IGFueSBwcml2YXRlIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFj a3MgdGhlCisgICBzY2FuJ3MgcHJvZ3Jlc3MgKHN1Y2ggYXMgYXJyYXkga2V5IHN0YXRlKS4gIFNl ZSB0aGUgZGVzY3JpcHRpb24gb2YKKyAgIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4g aW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtZnVuY3Rpb25zIi8+IGZvcgorICAgZGV0YWlscy4KICAg PC9wYXJhPgogCiAgIDxwYXJhPgotICAgQm90aCB0aGUgc2NhbiBwb3NpdGlvbiBhbmQgdGhlIG1h cmsgcG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBtYWludGFpbmVkCisgICBUaGUgc2NhbiBwb3Np dGlvbiAoaWYgYW55KSBtdXN0IGJlIG1haW50YWluZWQgYnkgdGhlIHRhYmxlIEFNIGFuZCBpbmRl eCBBTQogICAgY29uc2lzdGVudGx5IGluIHRoZSBmYWNlIG9mIGNvbmN1cnJlbnQgaW5zZXJ0aW9u cyBvciBkZWxldGlvbnMgaW4gdGhlCiAgICBpbmRleC4gIEl0IGlzIE9LIGlmIGEgZnJlc2hseS1p bnNlcnRlZCBlbnRyeSBpcyBub3QgcmV0dXJuZWQgYnkgYSBzY2FuIHRoYXQKICAgIHdvdWxkIGhh dmUgZm91bmQgdGhlIGVudHJ5IGlmIGl0IGhhZCBleGlzdGVkIHdoZW4gdGhlIHNjYW4gc3RhcnRl ZCwgb3IgZm9yCkBAIC0xMDQ0LDEyICsxMzQ5LDE0IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29t cGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJh PgogCiAgIDxwYXJhPgotICAgSW5zdGVhZCBvZiB1c2luZyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+LCBhbiBpbmRleCBzY2FuIGNhbiBiZSBkb25lIHdpdGgKLSAgIDxmdW5jdGlvbj5h bWdldGJpdG1hcDwvZnVuY3Rpb24+IHRvIGZldGNoIGFsbCB0dXBsZXMgaW4gb25lIGNhbGwuICBU aGlzIGNhbiBiZQotICAgbm90aWNlYWJseSBtb3JlIGVmZmljaWVudCB0aGFuIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4gYmVjYXVzZSBpdCBhbGxvd3MKLSAgIGF2b2lkaW5nIGxvY2sv dW5sb2NrIGN5Y2xlcyB3aXRoaW4gdGhlIGFjY2VzcyBtZXRob2QuICBJbiBwcmluY2lwbGUKLSAg IDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3VsZCBoYXZlIHRoZSBzYW1lIGVm ZmVjdHMgYXMgcmVwZWF0ZWQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2Fs bHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KKyAgIEluc3RlYWQgb2Yg dXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCisgICA8 ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9u ZSBjYWxsLiAgVGhpcyBjYW4KKyAgIGJlIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiB3 aXRoIGFuIDxxdW90ZT5vcmRlcmVkPC9xdW90ZT4gc2NhbgorICAgYmVjYXVzZSBpdCBhbGxvd3Mg ZWZmaWNpZW50IHNlcXVlbnRpYWwgYWNjZXNzIHRvIHRhYmxlIEFNIHBhZ2VzIGNvbnRhaW5pbmcK KyAgIG1hdGNoZXMuICBJbiBwcmluY2lwbGUgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlv bj4gc2hvdWxkIGhhdmUgdGhlCisgICBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0ZWQgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBjYWxscywgYnV0IHdlIGltcG9zZSBzZXZlcmFsIHJlc3RyaWN0aW9ucyB0bwogICAgc2lt cGxpZnkgbWF0dGVycy4gIEZpcnN0IG9mIGFsbCwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5j dGlvbj4gcmV0dXJucyBhbGwKICAgIHR1cGxlcyBhdCBvbmNlIGFuZCBtYXJraW5nIG9yIHJlc3Rv cmluZyBzY2FuIHBvc2l0aW9ucyBpc24ndAogICAgc3VwcG9ydGVkLiBTZWNvbmRseSwgdGhlIHR1 cGxlcyBhcmUgcmV0dXJuZWQgaW4gYSBiaXRtYXAgd2hpY2ggZG9lc24ndApAQCAtMTA1OSwxNSAr MTM2NiwxNSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBv cGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICBBbHNvLCB0aGVyZSBpcyBubyBwcm92aXNpb24g Zm9yIGluZGV4LW9ubHkgc2NhbnMgd2l0aAogICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5j dGlvbj4sIHNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byByZXR1cm4gdGhlIGNvbnRlbnRzIG9mCiAg ICBpbmRleCB0dXBsZXMuCi0gICBGaW5hbGx5LCA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0 aW9uPgotICAgZG9lcyBub3QgZ3VhcmFudGVlIGFueSBsb2NraW5nIG9mIHRoZSByZXR1cm5lZCB0 dXBsZXMsIHdpdGggaW1wbGljYXRpb25zCi0gICBzcGVsbGVkIG91dCBpbiA8eHJlZiBsaW5rZW5k PSJpbmRleC1sb2NraW5nIi8+LgorICAgRmluYWxseSwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9m dW5jdGlvbj4gZG9lcyBub3QgaG9sZCBhbnkgaW5kZXggcGFnZSBwaW5zCisgICBhZnRlciBpdCBy ZXR1cm5zIChzaW1pbGFybHkgdG8gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBzY2Fu cyB3aXRoCisgICBhbiBNVkNDIHNuYXBzaG90KSwgYXMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtl bmQ9ImluZGV4LWxvY2tpbmciLz4uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KICAgIE5vdGUgdGhh dCBpdCBpcyBwZXJtaXR0ZWQgZm9yIGFuIGFjY2VzcyBtZXRob2QgdG8gaW1wbGVtZW50IG9ubHkK LSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBub3QgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPiwgb3IgdmljZSB2ZXJzYSwKLSAgIGlmIGl0cyBpbnRlcm5hbCBp bXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4KKyAgIDxm dW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBub3QgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LAorICAgb3Igdmlj ZSB2ZXJzYSwgaWYgaXRzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9u ZSBBUEkgb3IgdGhlIG90aGVyLgogICA8L3BhcmE+CiAKICA8L3NlY3QxPgpAQCAtMTEyMywxMSAr MTQzMCwxNyBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBv cGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDxsaXN0aXRl bT4KICAgICAgIDxwYXJhPgotICAgICAgIEFuIGluZGV4IHNjYW4gbXVzdCBtYWludGFpbiBhIHBp bgotICAgICAgIG9uIHRoZSBpbmRleCBwYWdlIGhvbGRpbmcgdGhlIGl0ZW0gbGFzdCByZXR1cm5l ZCBieQotICAgICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGFuZCA8ZnVuY3Rp b24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gY2Fubm90IGRlbGV0ZQotICAgICAgIGVudHJpZXMg ZnJvbSBwYWdlcyB0aGF0IGFyZSBwaW5uZWQgYnkgb3RoZXIgYmFja2VuZHMuICBUaGUgbmVlZAot ICAgICAgIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgorICAgICAgIEEgcGluIG11 c3QgYmUgaGVsZCBvbiBhbnkgaW5kZXggcGFnZSB3aG9zZSBpdGVtcyBtaWdodCBzdGlsbCBuZWVk IHRvCisgICAgICAgYmUgZm9sbG93ZWQsIGFuZCA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5j dGlvbj4gbXVzdCBhY3F1aXJlIGEKKyAgICAgICBjbGVhbnVwIGxvY2sgb24gZWFjaCBpbmRleCBw YWdlLCB3aGljaCB3aWxsIGJsb2NrIGlmIGFueSBvdGhlcgorICAgICAgIGJhY2tlbmQgaG9sZHMg YSBwaW4gb24gdGhhdCBwYWdlLgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+IHNjYW5zLCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZAorICAgICAgIG1hbmFnZXMgdGhp cyBwaW4gZGlyZWN0bHkuCisgICAgICAgRm9yIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gc2NhbnMsIHRoZSBpbmRleCBBTSBob2xkcyBhIGJ1ZmZlcgorICAgICAgIHBpbiBvbiBlYWNo IGJhdGNoJ3MgaW5kZXggbGVhZiBwYWdlIChpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhKSwK KyAgICAgICB3aGlsZSB0aGUgdGFibGUgQU0gY29udHJvbHMgd2hlbiB0aGUgaW50ZXJsb2NrIGlz IGRyb3BwZWQgdmlhCisgICAgICAgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4u CisgICAgICAgVGhlIG5lZWQgZm9yIHRoaXMgcnVsZSBpcyBleHBsYWluZWQgYmVsb3cuCiAgICAg ICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC9pdGVtaXplZGxpc3Q+CkBAIC0xMTU2 LDIxICsxNDY5LDcyIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwg T2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAg VGhpcyBzb2x1dGlvbiByZXF1aXJlcyB0aGF0IGluZGV4IHNjYW5zIGJlIDxxdW90ZT5zeW5jaHJv bm91czwvcXVvdGU+OiB3ZSBoYXZlCi0gICB0byBmZXRjaCBlYWNoIGhlYXAgdHVwbGUgaW1tZWRp YXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXgKLSAgIGVudHJ5LiAg VGhpcyBpcyBleHBlbnNpdmUgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMuICBBbgotICAgPHF1b3Rl PmFzeW5jaHJvbm91czwvcXVvdGU+IHNjYW4gaW4gd2hpY2ggd2UgY29sbGVjdCBtYW55IFRJRHMg ZnJvbSB0aGUgaW5kZXgsCi0gICBhbmQgb25seSB2aXNpdCB0aGUgaGVhcCB0dXBsZXMgc29tZXRp bWUgbGF0ZXIsIHJlcXVpcmVzIG11Y2ggbGVzcyBpbmRleAotICAgbG9ja2luZyBvdmVyaGVhZCBh bmQgY2FuIGFsbG93IGEgbW9yZSBlZmZpY2llbnQgaGVhcCBhY2Nlc3MgcGF0dGVybi4KLSAgIFBl ciB0aGUgYWJvdmUgYW5hbHlzaXMsIHdlIG11c3QgdXNlIHRoZSBzeW5jaHJvbm91cyBhcHByb2Fj aCBmb3IKLSAgIG5vbi1NVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMsIGJ1dCBhbiBhc3luY2hyb25v dXMgc2NhbiBpcyB3b3JrYWJsZQotICAgZm9yIGEgcXVlcnkgdXNpbmcgYW4gTVZDQyBzbmFwc2hv dC4KKyAgIFRoaXMgc29sdXRpb24gcmVxdWlyZXMgdGhhdCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+IGluZGV4IHNjYW5zIGJlCisgICA8cXVvdGU+c3luY2hyb25vdXM8L3F1b3RlPjog dGhlIHRhYmxlIEFNIG11c3QgZmV0Y2ggZWFjaCBoZWFwIHR1cGxlCisgICBpbW1lZGlhdGVseSBh ZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBlbnRyeS4gIFRoaXMgaXMKKyAg IGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIFRoZQorICAgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UsIGJ5IGNvbnRyYXN0LCB3YXMgZGVzaWduZWQg dG8KKyAgIGFsbG93IHNjYW5zIHRvIGJlIDxxdW90ZT5hc3luY2hyb25vdXM8L3F1b3RlPjogYnkg Y29sbGVjdGluZyBiYXRjaGVzIG9mCisgICBUSURzIGZyb20gbXVsdGlwbGUgaW5kZXggcGFnZXMs IHRoZSB0YWJsZSBBTSBjYW4gcHJlZmV0Y2ggdGhlIGNvcnJlc3BvbmRpbmcKKyAgIHRhYmxlIGJs b2NrcyB3ZWxsIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24gKHVzaW5nIGFzeW5j aHJvbm91cworICAgSS9PIHdoZW4gYXZhaWxhYmxlKSwgYWxsb3dpbmcgYSBtb3JlIGVmZmljaWVu dCBoZWFwIGFjY2VzcyBwYXR0ZXJuLiAgTm90CisgICBhbGwgc2NhbnMgZW5kIHVwIGJlaW5nIGFz eW5jaHJvbm91cyBpbiBwcmFjdGljZSwgYnV0IHRoZSBpbnRlcmZhY2UgaXMKKyAgIGRlc2lnbmVk IHRvIGFsbG93IGl0LiAgUGVyIHRoZSBhYm92ZSBhbmFseXNpcywgd2UgbXVzdCB1c2UgdGhlIHN5 bmNocm9ub3VzCisgICBhcHByb2FjaCBmb3Igbm9uLU1WQ0MtY29tcGxpYW50IHNuYXBzaG90cywg YnV0IGFuIGFzeW5jaHJvbm91cyBzY2FuIGlzCisgICB3b3JrYWJsZSBmb3IgYSBxdWVyeSB1c2lu ZyBhbiBNVkNDIHNuYXBzaG90LgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBJbiBhbiA8ZnVu Y3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBpbmRleCBzY2FuLCB0aGUgYWNjZXNzIG1ldGhv ZCBkb2VzIG5vdAotICAga2VlcCBhbiBpbmRleCBwaW4gb24gYW55IG9mIHRoZSByZXR1cm5lZCB0 dXBsZXMuICBUaGVyZWZvcmUKLSAgIGl0IGlzIG9ubHkgc2FmZSB0byB1c2Ugc3VjaCBzY2FucyB3 aXRoIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90cy4KKyAgIEJlY2F1c2UgdGhlIHRhYmxlIEFNIHJl YWRzIG11bHRpcGxlIGluZGV4IGxlYWYgcGFnZXMgYWhlYWQgdmlhCisgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IHRvIGZhY2lsaXRhdGUgdGhpcyBwcmVmZXRjaGluZywgaXQgY2Fu bm90CisgICBwcmFjdGljYWxseSBob2xkIHBpbnMgb24gYWxsIHRob3NlIHBhZ2VzIHNpbXVsdGFu ZW91c2x5LiAgVGhlcmVmb3JlLAorICAgSS9PIHByZWZldGNoaW5nIHdpdGgKKyAgIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgb25seSBwb3NzaWJsZSB3aGVuIGFuIE1WQ0MtY29t cGxpYW50CisgICBzbmFwc2hvdCBpcyBpbiB1c2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IFdoZXRoZXIgYSBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrICh0eXBpY2FsbHkgYW4g aW5kZXggcGFnZSBidWZmZXIKKyAgIHBpbikgaXMgZHJvcHBlZCBpbW1lZGlhdGVseSBvciBkZWZl cnJlZCBpcyBjb250cm9sbGVkIGJ5IGEgZ2VuZXJpYywKKyAgIHNjYW4tbGV2ZWwgcG9saWN5IHRo YXQgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBzY2FuIGlzIG9wZW5lZCAmbWRhc2g7IGl0IGlzCisg ICBub3QgdW5kZXIgdGhlIGNvbnRyb2wgb2YgZWl0aGVyIHRoZSBpbmRleCBBTSBvciB0aGUgdGFi bGUgQU0uICBUaGUgc2NhbidzCisgICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJk PC9zdHJ1Y3RmaWVsZD4gZmxhZyBlbmNvZGVzIHRoaXMgcG9saWN5LgorICAgSXQgaXMgc2V0IGJh c2VkIG9uIHR3byBjcml0ZXJpYSB0aGF0IGFyZSBrbm93biB0byB0aGUgY29yZSBzY2FuIG1hY2hp bmVyeToKKyAgIHdoZXRoZXIgdGhlIHNjYW4gdXNlcyBhbiBNVkNDLWNvbXBsaWFudCBzbmFwc2hv dCwgYW5kIHdoZXRoZXIgaXQgaXMgYW4KKyAgIGluZGV4LW9ubHkgc2Nhbi4gIFNwZWNpZmljYWxs eSwKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBp cyB0cnVlIHdoZW4gdGhlIHNjYW4gdXNlcworICAgYW4gTVZDQyBzbmFwc2hvdCBhbmQgaXMgPGVt cGhhc2lzPm5vdDwvZW1waGFzaXM+IGFuIGluZGV4LW9ubHkgc2Nhbi4gIFdoZW4KKyAgIDxzdHJ1 Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyB0cnVlLCB0aGUg aW50ZXJsb2NrIGlzCisgICBkcm9wcGVkIGluc2lkZSA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2Jh dGNoX3VubG9jazwvZnVuY3Rpb24+IChiZWZvcmUgdGhlCisgICBiYXRjaCBpcyBldmVuIHJldHVy bmVkIHRvIHRoZSB0YWJsZSBBTSksIGJlY2F1c2UgYSBwbGFpbiBpbmRleCBzY2FuIHdpdGggYW4K KyAgIE1WQ0Mgc25hcHNob3Qgd2lsbCBhbHdheXMgdmlzaXQgdGhlIGhlYXAgcGFnZSwgd2hlcmUg dGhlIE1WQ0MgdmlzaWJpbGl0eQorICAgY2hlY2sgaXMgYXV0aG9yaXRhdGl2ZSAmbWRhc2g7IGV2 ZW4gaWYgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiByZWN5Y2xlcyBhCisgICBUSUQsIHRoZSBu ZXcgb2NjdXBhbnQgY2Fubm90IHBhc3MgdGhlIHNuYXBzaG90IHRlc3QuICBXaGVuIGl0IGlzIGZh bHNlLCB0aGUKKyAgIGludGVybG9jayBpcyByZXRhaW5lZCB1bnRpbCB0aGUgdGFibGUgQU0gZXhw bGljaXRseSBjYWxscworICAgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4sIGJl Y2F1c2UgdGhlIHNjYW4gY2Fubm90IHJlbHkgb24gdGhhdAorICAgaGVhcCBwYWdlIE1WQ0MgYmFj a3N0b3AuICBGb3Igbm9uLU1WQ0Mgc2NhbnMsIHRoZXJlIGlzIG5vIE1WQ0Mgc25hcHNob3QgdG8K KyAgIHJlamVjdCBhIHJlY3ljbGVkIFRJRCdzIG5ldyBvY2N1cGFudCBhdCBhbGwuICBGb3IgaW5k ZXgtb25seSBzY2FucywgZXZlbgorICAgd2l0aCBhbiBNVkNDIHNuYXBzaG90LCB0aGUgc2NhbiB0 eXBpY2FsbHkgYXZvaWRzIHZpc2l0aW5nIHRoZSBoZWFwIHBhZ2UKKyAgIGFsdG9nZXRoZXIgKHVz aW5nIHRoZSB2aXNpYmlsaXR5IG1hcCBpbnN0ZWFkKSwgc28gdGhlIE1WQ0MgY2hlY2sgdGhhdCB3 b3VsZAorICAgY2F0Y2ggYSByZWN5Y2xlZCBUSUQgdXN1YWxseSBuZXZlciBydW5zLiAgSW4gYm90 aCBjYXNlcyB0aGUgaW50ZXJsb2NrIG9uCisgICB0aGUgaW5kZXggcGFnZSBpcyB3aGF0IHByZXZl bnRzIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gZnJvbSByZWN5Y2xpbmcKKyAgIFRJRHMgd2hp bGUgdGhlIHNjYW4gaXMgc3RpbGwgaW4gZmxpZ2h0LiAgSW4gYWxsIGNhc2VzLCB0aGUgdGFibGUg QU0gZGVjaWRlcworICAgPGVtcGhhc2lzPndoZW48L2VtcGhhc2lzPiB0byBjYWxsIDxmdW5jdGlv bj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+OyB0aGUKKyAgIGluZGV4IEFNIGRlY2lkZXMgPGVt cGhhc2lzPndoYXQ8L2VtcGhhc2lzPiB0byByZWxlYXNlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBTaW1pbGFybHksIGFuIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGluZGV4 IHNjYW4gaXMgaW5oZXJlbnRseQorICAgYXN5bmNocm9ub3VzOiBhbGwgbWF0Y2hpbmcgVElEcyBh cmUgY29sbGVjdGVkIGludG8gYSBiaXRtYXAgYmVmb3JlIGFueSBoZWFwCisgICBhY2Nlc3MgYmVn aW5zLiAgU3VjaCBzY2FucyB0aGVyZWZvcmUgcmVxdWlyZSBhbiBNVkNDLWNvbXBsaWFudCBzbmFw c2hvdCwKKyAgIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGUgYWNjZXNzIG1ldGhvZCB0byBo b2xkIGluZGV4IHBhZ2UgcGlucy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW5kZXggYWNj ZXNzIG1ldGhvZHMgdGhhdCB1c2UgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0 IG1hbmFnZQorICAgcGluIGxpZmV0aW1lIHRoZW1zZWx2ZXMsIHNpbmNlIHRoZXJlIGlzIG5vIHRh YmxlIEFNIGludGVybWVkaWFyeSAodW5saWtlCisgICB3aXRoIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4pLiAgVGhlIGluZGV4IEFNIG11c3QgaG9sZCBhIHBpbiBvbiB0aGUKKyAgIGN1 cnJlbnQgaW5kZXggcGFnZSB1bnRpbCB0aGUgc2NhbiBtb3ZlcyB0byBhIGRpZmZlcmVudCBwYWdl IG9yIGVuZHMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5z Z21sCmluZGV4IDk4MjUzMmZlNy4uZjU4YzI4ODE1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxl LnNnbWwKQEAgLTExNTMsMTIgKzExNTMsMTMgQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU0KICAg ICAgPC9wYXJhPgogCiAgICAgIDxwYXJhPgotICAgICAgVGhlIGFjY2VzcyBtZXRob2QgbXVzdCBz dXBwb3J0IDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+IChzZWUgPHhyZWYKLSAgICAgIGxp bmtlbmQ9ImluZGV4YW0iLz4pOyBhdCBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+R0lOPC9h Y3JvbnltPgotICAgICAgY2Fubm90IGJlIHVzZWQuICBBbHRob3VnaCBpdCdzIGFsbG93ZWQsIHRo ZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZwotICAgICAgQi10cmVlIG9yIGhhc2ggaW5kZXhl cyB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMKLSAgICAgIGRvZXMg bm90aGluZyB0aGF0IGFuIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3QgZG8gYmV0 dGVyLgotICAgICAgU28gaW4gcHJhY3RpY2UgdGhlIGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMg YmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKKyAgICAgIFRoZSBhY2Nlc3MgbWV0aG9kIG11 c3Qgc3VwcG9ydCBlaXRoZXIgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4KKyAgICAgIG9y IDxsaXRlcmFsPmFtZ2V0YmF0Y2g8L2xpdGVyYWw+IChzZWUgPHhyZWYgbGlua2VuZD0iaW5kZXhh bSIvPik7IGF0CisgICAgICBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+R0lOPC9hY3Jvbnlt PiBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoCisgICAgICBpdCdzIGFsbG93ZWQsIHRoZXJlIGlz IGxpdHRsZSBwb2ludCBpbiB1c2luZyBCLXRyZWUgb3IgaGFzaCBpbmRleGVzCisgICAgICB3aXRo IGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMgZG9lcyBub3RoaW5nIHRoYXQg YW4KKyAgICAgIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3QgZG8gYmV0dGVyLiAg U28gaW4gcHJhY3RpY2UgdGhlCisgICAgICBhY2Nlc3MgbWV0aG9kIHdpbGwgYWx3YXlzIGJlIDxh Y3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCiAgICAgICA8YWNyb255bT5TUC1HaVNUPC9hY3Jvbnlt Pi4KICAgICAgPC9wYXJhPgogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2lu ZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2Ft L2R1bW15X2luZGV4X2FtLmMKaW5kZXggMzFmOGQyYjgxLi5lMmI4NjVmYjQgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYworKysgYi9z cmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKQEAgLTMzNCwx MCArMzM0LDEyIEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4g PSBkaWJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZGlyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0g TlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEws CisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IE5VTEwsCiAJCS5h bWVuZHNjYW4gPSBkaWVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBv cyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNj YW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxy ZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1MmY4NjAzYTcuLmVi OTQzMGI1ZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysr IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTIwMiw2ICsyMDIsNyBAQCBC T09MCiBCT09MRUFOCiBCT1gKIEJUQXJyYXlLZXlJbmZvCitCVEJhdGNoRGF0YQogQlRCdWlsZFN0 YXRlCiBCVENhbGxiYWNrU3RhdGUKIEJUQ3ljbGVJZApAQCAtMjI5LDggKzIzMCw2IEBAIEJUU2Nh bkluc2VydERhdGEKIEJUU2NhbktleVByZXByb2MKIEJUU2Nhbk9wYXF1ZQogQlRTY2FuT3BhcXVl RGF0YQotQlRTY2FuUG9zRGF0YQotQlRTY2FuUG9zSXRlbQogQlRTaGFyZWQKIEJUU29ydEFycmF5 Q29udGV4dAogQlRTcG9vbApAQCAtMjU5LDYgKzI1OCw5IEBAIEJhc2VCYWNrdXBDbWQKIEJhc2VC YWNrdXBUYXJnZXRIYW5kbGUKIEJhc2VCYWNrdXBUYXJnZXRUeXBlCiBCYXRjaE1WQ0NTdGF0ZQor QmF0Y2hNYXRjaGluZ0l0ZW0KK0JhdGNoUmluZ0J1ZmZlcgorQmF0Y2hSaW5nSXRlbVBvcwogQmVn aW5EaXJlY3RNb2RpZnlfZnVuY3Rpb24KIEJlZ2luRm9yZWlnbkluc2VydF9mdW5jdGlvbgogQmVn aW5Gb3JlaWduTW9kaWZ5X2Z1bmN0aW9uCkBAIC0xMjI4LDYgKzEyMzAsNyBAQCBIYmFMaW5lCiBI ZWFkbGluZUpzb25TdGF0ZQogSGVhZGxpbmVQYXJzZWRUZXh0CiBIZWFkbGluZVdvcmRFbnRyeQor SGVhcEJhdGNoRGF0YQogSGVhcENoZWNrQ29udGV4dAogSGVhcENoZWNrUmVhZFN0cmVhbURhdGEK IEhlYXBQYWdlRnJlZXplCkBAIC0xMzA1LDYgKzEzMDgsOCBAQCBJbmRleE9yZGVyQnlEaXN0YW5j ZQogSW5kZXhQYXRoCiBJbmRleFJ1bnRpbWVLZXlJbmZvCiBJbmRleFNjYW4KK0luZGV4U2NhbkJh dGNoCitJbmRleFNjYW5CYXRjaERhdGEKIEluZGV4U2NhbkRlc2MKIEluZGV4U2NhbkRlc2NEYXRh CiBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24KQEAgLTM1MDgsMTggKzM1MTMsMTcgQEAgYW1jYW5y ZXR1cm5fZnVuY3Rpb24KIGFtY29zdGVzdGltYXRlX2Z1bmN0aW9uCiBhbWVuZHNjYW5fZnVuY3Rp b24KIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24KK2FtZ2V0YmF0Y2hfZnVuY3Rpb24K IGFtZ2V0Yml0bWFwX2Z1bmN0aW9uCiBhbWdldHRyZWVoZWlnaHRfZnVuY3Rpb24KIGFtZ2V0dHVw bGVfZnVuY3Rpb24KIGFtaW5pdHBhcmFsbGVsc2Nhbl9mdW5jdGlvbgogYW1pbnNlcnRfZnVuY3Rp b24KIGFtaW5zZXJ0Y2xlYW51cF9mdW5jdGlvbgotYW1tYXJrcG9zX2Z1bmN0aW9uCiBhbW9wdGlv bnNfZnVuY3Rpb24KIGFtcGFyYWxsZWxyZXNjYW5fZnVuY3Rpb24KIGFtcHJvcGVydHlfZnVuY3Rp b24KIGFtcmVzY2FuX2Z1bmN0aW9uCi1hbXJlc3RycG9zX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9j bXB0eXBlX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9zdHJhdGVneV9mdW5jdGlvbgogYW12YWN1dW1j bGVhbnVwX2Z1bmN0aW9uCi0tIAoyLjUzLjAKCg== --0000000000001ea67c064d3bcca7--