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 1wfRuO-005SPa-0O for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Jul 2026 00:37:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfRuM-00436b-1J for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Jul 2026 00:37:30 +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 1wfRuL-00436T-1s for pgsql-hackers@lists.postgresql.org; Fri, 03 Jul 2026 00:37:30 +0000 Received: from mail-vs1-xe29.google.com ([2607:f8b0:4864:20::e29]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wfRuJ-00000001GaX-1okv for pgsql-hackers@postgresql.org; Fri, 03 Jul 2026 00:37:28 +0000 Received: by mail-vs1-xe29.google.com with SMTP id ada2fe7eead31-738f3419eedso8023137.3 for ; Thu, 02 Jul 2026 17:37:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783039046; cv=none; d=google.com; s=arc-20260327; b=NWw1VLQ4/znIK9E7jazPWhBnUV/YCBOjOr+y9qq3GuBWkMaxzLZQX90/PqmTNqEPSA 5ARt6WEIvA2cO6Hzx3G8ndin5W+Hl73Ef4dAAP1JC+PtmysaBjGSra6l+ZRaEi9c1ZLM CV3z44J4JZYwho7ixYdGjw2dniCxgYUMK68xj+QkdGhvNnpWRbf4Ee7Nw71hen8tGNOi FlSWa1r/KwZH5EuZOyIy1SD5+yrcWOCt+ssdR+zISdOz2K7E/KXQYaDj7YvHqfaKRzwS srI+LrczT2nBOSpdsejiu3DjfnEKR4Xe6hytdsDSx9gj1rCaaBRxe+Hmy6ACPVFosKNc iKYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=fEAniDfIalMTvNDxOCqFxDzbMupIznRk8lHdiUxyJYU=; fh=jSjnILoY2w2UMTJgD34pVUOMP3D4QKKp9uGzRB354xI=; b=ONcMipKJEtTun5w8xyuLfabxviRRsttzpj9FT/i736hg8sNYjqG/tBKOph1hEJPMiT 3JCKM6yfE8yQarlFAhik5yGXa4lEt2aNAZPxs7JyGsxYORWIyqKTSyBHbB+gHaVHG8XD 8FTWp/FIHKe1PqLja8L4EER3iyKMygzUYbiwSM+F+ZxplDNvw7IuNfZM47jG7SSTbhMj xqKFawRe0TCl66b39xFKX+5xCp040OzAYQecVP0jm0Z2LP9Afn6uUScbosEhwKLC3HVn RnI8vmC6L72sMDCuVZ2a9AnZ/9GFnJIw/rLsbId6ZOjYuPdHWxkf7nm8OhqVS17dxCtG uYQw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783039046; x=1783643846; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=fEAniDfIalMTvNDxOCqFxDzbMupIznRk8lHdiUxyJYU=; b=GIvtTjj7IJUnm6BH7DqD6Qj54dwD2n01ufiS1c0+BWomgoGHnSHbNwPfCnBNPY+TBG VMrU9boifNZHHZl7375M4pjCMixdJOK4nhUa4LnQMtSj5NgG6Wht/y8RKYMQpP/sJm0a 5seNbRrvv+pgM51EFXk5QmQMgUdrOhJ0Vh/T1k4XB+iAnyXCB5w4whGjNFAqHf+rONBh b8oZvf/Ki0jpk4LEOqAlMbT+I0QCC1Hv1avA8DK07939zqE8Vmfo0tJ687ar1yKJdrxd tAslQyHPxHPzIwCMJEFP0XNmWgDkE98haTjrjdJxk3n4SMo1XZhRzmqLvLuxU0HGy8/A 0qeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783039046; x=1783643846; 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=fEAniDfIalMTvNDxOCqFxDzbMupIznRk8lHdiUxyJYU=; b=M0UNysbo99gxnU6xTcafn2ptRlpyauOnRS5mTWLnzKh7m7yyHgM3VPlCq3pct+hx/n Sf9M+1fwXnIDIj1ZL1wnPw82X2KPNaGMey8BfHPOJ9u9IcPEgnNlHuaKPjitd1VUARvn 4JWUUyupPjlahiae+sUV6G+dstHp4Ia/+FFOcTUUPsZ/9n8MFCqMqPGKVCNrikMiJGCi pA2NgznZqfqKQmNDxhGOSj7Z5uu8w50LhbR5a5k7SadGFRA1LYgZgh7rnD/582+15QEo o1GxTc2zUsMDj4U1JkIfD00coFEO1J9Uw+6jjd67jDh4/1qPV5g3w1Ceze3rKs36oAxm O6Fg== X-Forwarded-Encrypted: i=1; AHgh+Rq907p4JDf7NxQyac9RyQU9PB2iw4zBQWG96XSBQ5wwbbLm5ai+fOj4/y1QEB9eprpzwo1TOlXexsNiPkxJ@postgresql.org X-Gm-Message-State: AOJu0Yyka/gbFZwErmoNGsSIK9okF+YMi0pNXOYQQLpDKrpuNncmshnr auJTdxmQdMWOfc7KXnYLNiMAZ6EX1DViJLhprbyuJSEC0008jlnPkE8+7SQT0mkgHTH87t8dyza Cz//DJvfmcoTe9apsTFM/c8hmFEeC8YM= X-Gm-Gg: AfdE7cl4eaor01kGphKFjhN7vEfsJSLS/1BCLugrYFS56G7AiP7r6z7AE3RfzdugIBJ TSJrAN/wEz0Nt/ILb1tfpSqLNEBfcScxGMuNEmnTOlSmZXOQoEr5glMWREmZ7jBLgnDnMMeU0K6 vTyCsBRXoG5M1RayoZfXG0BeDUxA3cQ4fQYuL8QWgoTwhwUovy1Jn36TRuNKcmomEUIuOaJHN2j mBI09MpbP9jDjiL3hWYPq1wP3FFDCWW1ZBlVFXs1dsvq0dH/OYZc2PyPKtuDhues2OQWsGOa3nT iMB4WfC8qcQJ3k+88lx1NVHmZx32opGjAlaG5y/gNHl7kTBSdujIrfaJNlK1jV8PTo9hamEyXq2 aJrG9roRtkeWHKoh97L/fuQfYPvSJ+9F3q8K1hVluTtBoruzPU7URxK+CUcQfvb0xLTZ2UbvjOn xck3fQZgMvlk89Ekl3OoU1EORGfg== X-Received: by 2002:a05:6102:801e:b0:737:4cac:52f1 with SMTP id ada2fe7eead31-73da8519c0fmr3569026137.1.1783039046513; Thu, 02 Jul 2026 17:37:26 -0700 (PDT) MIME-Version: 1.0 References: <20260629.183730.1799088184925453299.ishii@postgresql.org> <20260701.211805.2273383346456030984.ishii@postgresql.org> <20260702.094813.2267011850936872788.ishii@postgresql.org> In-Reply-To: From: jian he Date: Fri, 3 Jul 2026 08:36:49 +0800 X-Gm-Features: AVVi8CdzFqgXCh9CX4CYsanpE-DCNEdZ-5NGG9_B5tHFUftNjzoTyh_UImLR-94 Message-ID: Subject: Re: Row pattern recognition To: Tatsuo Ishii Cc: assam258@gmail.com, pgsql-hackers@postgresql.org, zsolt.parragi@percona.com, sjjang112233@gmail.com, vik@postgresfriends.org, er@xs4all.nl, jacob.champion@enterprisedb.com, david.g.johnston@gmail.com, peter@eisentraut.org, li.evan.chao@gmail.com Content-Type: multipart/mixed; boundary="000000000000fd1a750655aa2024" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fd1a750655aa2024 Content-Type: text/plain; charset="UTF-8" Hi. ``The actual mark is set to: min(lookback_mark, lookahead_mark).`` in README.rpr need update? The attached patch is still based on https://github.com/assam258-5892/postgres/commits/RPR. v50-0001-Refactor-visit_nav_plan.partial v50-0002-Refactor-visit_nav_exec.partial v50-0003-no-need-compile-and-evaluate-offset-in-expression-evaluation.partial v50-0004-misc.partial v50-0001-Evaluate-navigation-offset-once-at-one-place.nocfbot The ".partial" patch, when combined, contains the same content as the single patch (v50-0001-Evaluate-navigation-offset-once-at-one-place.nocfbot). (I first created separated patches, but then I felt the whole change focuses on one main topic, so merging them made sense to me). The commit message for the main patch (v50-0001-Evaluate-navigation-offset-once-at-one-place.nocfbot) is below: ------------------------------------------------ Subject: [PATCH v51 1/1] Evaluate navigation offset once at one place Row pattern navigation (PREV/NEXT/FIRST/LAST and their compounds) resolved offsets (transform a expression to a int64 number) in ExecInitExprRec, ExecEvalRPRNavSet, extract_const_offset, eval_define_offsets. Serval places transform the same offset expression to a int64 number, that is too much! With the attached, a single place (ExecInitWindowAgg->eval_define_offsets) to handling this. visit_nav_exec() now evaluates every offset expression at executor init and save the result on the RPRNavExpr (offset / compound_offset); ExecEvalRPRNavSet() simply reads those int64 values. This removes: - the RPRNavOffsetKind enum and the offset/kind fields on the WindowAgg plan node. The planner walk (visit_nav_plan / compute_define_metadata) now only classifies match_start dependency, which is all buildRPRPattern() needs to decide context absorption. - the per-invocation offset machinery in the executor: the Datum* offset arrays in the eval step, rpr_nav_get_compound_offset(), and the scattered NULL/negative checks, now centralized in eval_nav_offset. The "retain all" case (backward reach overflows int64) is encoded as the sentinel navMaxOffset < 0 rather than an enum value; advance_nav_mark() disables tuplestore trim on it. EXPLAIN reads the resolved offsets from the planstate (ExecInitWindowAgg is reached for EXPLAIN without ANALYZE), so it now prints concrete offsets instead of "runtime". ``` We must still set nav_saved_outertuple (done above) so that EEOP_RPR_NAV_RESTORE is a harmless no-op. ``` The above in ExecEvalRPRNavSet is wrong, EEOP_RPR_NAV_RESTORE will never be a no-op. However we can make EEOP_RPR_NAV_RESTORE no-op, so the above comments make sense. Rename eval_nav_offset_helper to eval_nav_offset Based on https://github.com/assam258-5892/postgres/commits/RPR ------------------------------------------------ -- jian https://www.enterprisedb.com/ --000000000000fd1a750655aa2024 Content-Type: application/octet-stream; name="v50-0001-Evaluate-navigation-offset-once-at-one-place.nocfbot" Content-Disposition: attachment; filename="v50-0001-Evaluate-navigation-offset-once-at-one-place.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr47axeh0 RnJvbSAzYTNhOWM4OWZhMDE0OTZkOTEyOTBlYWMxNjQ5OTA0N2U3ZGIxNDE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMiBKdWwgMjAyNiAxNzoyMzo1MSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjUw IDEvMV0gRXZhbHVhdGUgbmF2aWdhdGlvbiBvZmZzZXQgb25jZSBhdCBvbmUgcGxhY2UKClJvdyBw YXR0ZXJuIG5hdmlnYXRpb24gKFBSRVYvTkVYVC9GSVJTVC9MQVNUIGFuZCB0aGVpciBjb21wb3Vu ZHMpIHJlc29sdmVkCm9mZnNldHMgKHRyYW5zZm9ybSBhIGV4cHJlc3Npb24gdG8gYSBpbnQ2NCBu dW1iZXIpIGluIEV4ZWNJbml0RXhwclJlYywKRXhlY0V2YWxSUFJOYXZTZXQsIGV4dHJhY3RfY29u c3Rfb2Zmc2V0LCBldmFsX2RlZmluZV9vZmZzZXRzLiBTZXJ2YWwgcGxhY2VzCnRyYW5zZm9ybSB0 aGUgc2FtZSBvZmZzZXQgZXhwcmVzc2lvbiB0byBhIGludDY0IG51bWJlciwgdGhhdCBpcyB0b28g bXVjaCEKCldpdGggdGhlIGF0dGFjaGVkLCBhIHNpbmdsZSBwbGFjZSAoRXhlY0luaXRXaW5kb3dB Z2ctPmV2YWxfZGVmaW5lX29mZnNldHMpIHRvCmhhbmRsaW5nIHRoaXMuCgp2aXNpdF9uYXZfZXhl YygpIG5vdyBldmFsdWF0ZXMgZXZlcnkgb2Zmc2V0IGV4cHJlc3Npb24gYXQgZXhlY3V0b3IgaW5p dCBhbmQgc2F2ZQp0aGUgcmVzdWx0IG9uIHRoZSBSUFJOYXZFeHByIChvZmZzZXQgLyBjb21wb3Vu ZF9vZmZzZXQpOyBFeGVjRXZhbFJQUk5hdlNldCgpCnNpbXBseSByZWFkcyB0aG9zZSBpbnQ2NCB2 YWx1ZXMuICBUaGlzIHJlbW92ZXM6CgogIC0gdGhlIFJQUk5hdk9mZnNldEtpbmQgZW51bSBhbmQg dGhlIG9mZnNldC9raW5kIGZpZWxkcyBvbiB0aGUKICAgIFdpbmRvd0FnZyBwbGFuIG5vZGUuICBU aGUgcGxhbm5lciB3YWxrICh2aXNpdF9uYXZfcGxhbiAvCiAgICBjb21wdXRlX2RlZmluZV9tZXRh ZGF0YSkgbm93IG9ubHkgY2xhc3NpZmllcyBtYXRjaF9zdGFydAogICAgZGVwZW5kZW5jeSwgd2hp Y2ggaXMgYWxsIGJ1aWxkUlBSUGF0dGVybigpIG5lZWRzIHRvIGRlY2lkZSBjb250ZXh0CiAgICBh YnNvcnB0aW9uLgoKICAtIHRoZSBwZXItaW52b2NhdGlvbiBvZmZzZXQgbWFjaGluZXJ5IGluIHRo ZSBleGVjdXRvcjogdGhlIERhdHVtKgogICAgb2Zmc2V0IGFycmF5cyBpbiB0aGUgZXZhbCBzdGVw LCBycHJfbmF2X2dldF9jb21wb3VuZF9vZmZzZXQoKSwgYW5kCiAgICB0aGUgc2NhdHRlcmVkIE5V TEwvbmVnYXRpdmUgY2hlY2tzLCBub3cgY2VudHJhbGl6ZWQgaW4KICAgIGV2YWxfbmF2X29mZnNl dC4KClRoZSAicmV0YWluIGFsbCIgY2FzZSAoYmFja3dhcmQgcmVhY2ggb3ZlcmZsb3dzIGludDY0 KSBpcyBlbmNvZGVkIGFzIHRoZQpzZW50aW5lbCBuYXZNYXhPZmZzZXQgPCAwIHJhdGhlciB0aGFu IGFuIGVudW0gdmFsdWU7IGFkdmFuY2VfbmF2X21hcmsoKSBkaXNhYmxlcwp0dXBsZXN0b3JlIHRy aW0gb24gaXQuICBFWFBMQUlOIHJlYWRzIHRoZSByZXNvbHZlZCBvZmZzZXRzIGZyb20gdGhlIHBs YW5zdGF0ZQooRXhlY0luaXRXaW5kb3dBZ2cgaXMgcmVhY2hlZCBmb3IgRVhQTEFJTiB3aXRob3V0 IEFOQUxZWkUpLCBzbyBpdCBub3cgcHJpbnRzCmNvbmNyZXRlIG9mZnNldHMgaW5zdGVhZCBvZiAi cnVudGltZSIuCgpgYGAKIFdlIG11c3Qgc3RpbGwgc2V0IG5hdl9zYXZlZF9vdXRlcnR1cGxlIChk b25lIGFib3ZlKSBzbyB0aGF0CkVFT1BfUlBSX05BVl9SRVNUT1JFIGlzIGEgaGFybWxlc3Mgbm8t b3AuCmBgYApUaGUgYWJvdmUgaW4gRXhlY0V2YWxSUFJOYXZTZXQgaXMgd3JvbmcsIEVFT1BfUlBS X05BVl9SRVNUT1JFIHdpbGwgbmV2ZXIgYmUgYQpuby1vcC4gSG93ZXZlciB3ZSBjYW4gbWFrZSBF RU9QX1JQUl9OQVZfUkVTVE9SRSBuby1vcCwgc28gdGhlIGFib3ZlIGNvbW1lbnRzCm1ha2Ugc2Vu c2UuCgpSZW5hbWUgZXZhbF9uYXZfb2Zmc2V0X2hlbHBlciB0byBldmFsX25hdl9vZmZzZXQKCkJh c2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9hc3NhbTI1OC01ODkyL3Bvc3RncmVzL2NvbW1pdHMv UlBSCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAgICAgIHwg IDY5ICstLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgICAgICAgICAgICAgICB8 ICA1NiArLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jICAgICAgICAg fCAgODAgKy0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYyAgICAgICAg ICB8IDIwMyArKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBs YW4uYyAgICAgICB8IDI5OSArKy0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWNFeHByLmggICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmggICAgICAgICAgICAgICAgIHwgIDEwICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJz ZW5vZGVzLmggICAgICAgICAgICAgICAgfCAgMTUgLQogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgICAgICAgIHwgIDIxIC0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9k ZXMuaCAgICAgICAgICAgICAgICAgfCAgNDEgKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3Jwcl9leHBsYWluLm91dCAgICAgfCAgIDYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cnByX2ludGVncmF0aW9uLm91dCB8ICAgMiArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICAgICAgIHwgICAxIC0KIDEzIGZpbGVzIGNoYW5nZWQsIDE4OCBpbnNlcnRp b25zKCspLCA2MjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGE1ZDI3 MmI2MzIuLmM3YzJkNzFiYzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTMyMTIsMTEgKzMy MTIsNiBAQCBzaG93X3dpbmRvd19kZWYoV2luZG93QWdnU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAq YW5jZXN0b3JzLCBFeHBsYWluU3RhdGUgKmVzKQogCS8qIFNob3cgUm93IFBhdHRlcm4gUmVjb2du aXRpb24gcGF0dGVybiBpZiBwcmVzZW50ICovCiAJaWYgKHdhZ2ctPnJwUGF0dGVybiAhPSBOVUxM KQogCXsKLQkJUlBSTmF2T2Zmc2V0S2luZCBtYXhLaW5kID0gd2FnZy0+bmF2TWF4T2Zmc2V0S2lu ZDsKLQkJaW50NjQJCW1heE9mZnNldCA9IHdhZ2ctPm5hdk1heE9mZnNldDsKLQkJUlBSTmF2T2Zm c2V0S2luZCBmaXJzdEtpbmQgPSB3YWdnLT5uYXZGaXJzdE9mZnNldEtpbmQ7Ci0JCWludDY0CQlm aXJzdE9mZnNldCA9IHdhZ2ctPm5hdkZpcnN0T2Zmc2V0OwotCiAJCWNoYXIJICAgKnBhdHRlcm5T dHIgPSBkZXBhcnNlX3Jwcl9wYXR0ZXJuKHdhZ2ctPnJwUGF0dGVybik7CiAKIAkJRXhwbGFpblBy b3BlcnR5VGV4dCgiUGF0dGVybiIsIHBhdHRlcm5TdHIsIGVzKTsKQEAgLTMyMjQsNTggKzMyMTks MjQgQEAgc2hvd193aW5kb3dfZGVmKFdpbmRvd0FnZ1N0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFu Y2VzdG9ycywgRXhwbGFpblN0YXRlICplcykKIAkJcGZyZWUocGF0dGVyblN0cik7CiAKIAkJLyoK LQkJICogU2hvdyBuYXZpZ2F0aW9uIG9mZnNldHMgZm9yIHR1cGxlc3RvcmUgdHJpbS4gIEZvciBF WFBMQUlOIEFOQUxZWkUsCi0JCSAqIHVzZSB0aGUgZXhlY3V0b3ItcmVzb2x2ZWQgdmFsdWVzICh3 aGljaCBtYXkgZGlmZmVyIGZyb20gdGhlIHBsYW4KLQkJICogd2hlbiBORUVEU19FVkFMIHdhcyBy ZXNvbHZlZCB0byBGSVhFRCBvciBSRVRBSU5fQUxMIGF0IGluaXQpLgorCQkgKiBOYXZpZ2F0aW9u IG9mZnNldHMgZm9yIHR1cGxlc3RvcmUgdHJpbSBhcmUgcmVzb2x2ZWQgYXQgZXhlY3V0b3IKKwkJ ICogaW5pdCwgd2hpY2ggcnVucyBldmVuIGZvciBwbGFpbiBFWFBMQUlOLCBzbyByZWFkIHRoZSBy ZXNvbHZlZAorCQkgKiB2YWx1ZXMgZnJvbSB0aGUgcGxhbnN0YXRlLiAgbmF2TWF4T2Zmc2V0IDwg MCBpcyB0aGUgcmV0YWluLWFsbAorCQkgKiBzZW50aW5lbCAodHJpbSBkaXNhYmxlZCkuCiAJCSAq LwotCQlpZiAoZXMtPmFuYWx5emUpCi0JCXsKLQkJCW1heEtpbmQgPSBwbGFuc3RhdGUtPm5hdk1h eE9mZnNldEtpbmQ7Ci0JCQltYXhPZmZzZXQgPSBwbGFuc3RhdGUtPm5hdk1heE9mZnNldDsKLQkJ CWZpcnN0S2luZCA9IHBsYW5zdGF0ZS0+bmF2Rmlyc3RPZmZzZXRLaW5kOwotCQkJZmlyc3RPZmZz ZXQgPSBwbGFuc3RhdGUtPm5hdkZpcnN0T2Zmc2V0OwotCQl9Ci0KLQkJc3dpdGNoIChtYXhLaW5k KQotCQl7Ci0JCQljYXNlIFJQUl9OQVZfT0ZGU0VUX05FRURTX0VWQUw6Ci0JCQkJRXhwbGFpblBy b3BlcnR5VGV4dCgiTmF2IE1hcmsgTG9va2JhY2siLCAicnVudGltZSIsIGVzKTsKLQkJCQlicmVh azsKLQkJCWNhc2UgUlBSX05BVl9PRkZTRVRfUkVUQUlOX0FMTDoKLQkJCQlFeHBsYWluUHJvcGVy dHlUZXh0KCJOYXYgTWFyayBMb29rYmFjayIsICJyZXRhaW4gYWxsIiwgZXMpOwotCQkJCWJyZWFr OwotCQkJY2FzZSBSUFJfTkFWX09GRlNFVF9GSVhFRDoKLQkJCQlFeHBsYWluUHJvcGVydHlJbnRl Z2VyKCJOYXYgTWFyayBMb29rYmFjayIsIE5VTEwsCi0JCQkJCQkJCQkgICBtYXhPZmZzZXQsIGVz KTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCBSUFIgbmF2IG9mZnNldCBraW5kOiAlZCIsCi0JCQkJCSBtYXhLaW5kKTsKLQkJCQlicmVhazsK LQkJfQorCQlpZiAocGxhbnN0YXRlLT5uYXZNYXhPZmZzZXQgPCAwKQorCQkJRXhwbGFpblByb3Bl cnR5VGV4dCgiTmF2IE1hcmsgTG9va2JhY2siLCAicmV0YWluIGFsbCIsIGVzKTsKKwkJZWxzZQor CQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiTmF2IE1hcmsgTG9va2JhY2siLCBOVUxMLAorCQkJ CQkJCQkgICBwbGFuc3RhdGUtPm5hdk1heE9mZnNldCwgZXMpOwogCi0JCWlmICh3YWdnLT5oYXNG aXJzdE5hdikKKwkJaWYgKHBsYW5zdGF0ZS0+aGFzRmlyc3ROYXYpCiAJCXsKLQkJCXN3aXRjaCAo Zmlyc3RLaW5kKQotCQkJewotCQkJCWNhc2UgUlBSX05BVl9PRkZTRVRfTkVFRFNfRVZBTDoKLQkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiTmF2IE1hcmsgTG9va2FoZWFkIiwgInJ1bnRpbWUiLAot CQkJCQkJCQkJCWVzKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBSUFJfTkFWX09GRlNFVF9GSVhF RDoKLQkJCQkJaWYgKGZpcnN0T2Zmc2V0ID09IFBHX0lOVDY0X01BWCkKLQkJCQkJCUV4cGxhaW5Q cm9wZXJ0eVRleHQoIk5hdiBNYXJrIExvb2thaGVhZCIsICJpbmZpbml0ZSIsCi0JCQkJCQkJCQkJ CWVzKTsKLQkJCQkJZWxzZQotCQkJCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiTmF2IE1hcmsg TG9va2FoZWFkIiwgTlVMTCwKLQkJCQkJCQkJCQkJICAgZmlyc3RPZmZzZXQsIGVzKTsKLQkJCQkJ YnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJLyogUlBSX05BVl9PRkZTRVRfUkVUQUlOX0FMTCBp cyBsb29rYmFjay1vbmx5LCBuZXZlciBoZXJlICovCi0JCQkJCWVsb2coRVJST1IsICJ1bnJlY29n bml6ZWQgUlBSIG5hdiBvZmZzZXQga2luZDogJWQiLAotCQkJCQkJIGZpcnN0S2luZCk7Ci0JCQkJ CWJyZWFrOwotCQkJfQorCQkJaWYgKHBsYW5zdGF0ZS0+bmF2Rmlyc3RPZmZzZXQgPT0gUEdfSU5U NjRfTUFYKQorCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIk5hdiBNYXJrIExvb2thaGVhZCIsICJp bmZpbml0ZSIsIGVzKTsKKwkJCWVsc2UKKwkJCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJOYXYg TWFyayBMb29rYWhlYWQiLCBOVUxMLAorCQkJCQkJCQkJICAgcGxhbnN0YXRlLT5uYXZGaXJzdE9m ZnNldCwgZXMpOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKaW5kZXggMzAzNjc4 MjUwMy4uZGUxM2FjNjkzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCkBAIC0xMTk4LDEwICsx MTk4LDYgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJ CQkJICogc3dhcHMgZWN4dF9vdXRlcnR1cGxlIHRvIHRoZSB0YXJnZXQgcm93LCB0aGUgYXJndW1l bnQKIAkJCQkgKiBleHByZXNzaW9uIGlzIGNvbXBpbGVkIG5vcm1hbGx5IChyZWFkcyBmcm9tIHRo ZSBzd2FwcGVkCiAJCQkJICogc2xvdCksIGFuZCB0aGUgUkVTVE9SRSBvcGNvZGUgcmVzdG9yZXMg dGhlIG9yaWdpbmFsIHNsb3QuCi0JCQkJICoKLQkJCQkgKiBEZWZhdWx0IG9mZnNldCB3aGVuIG9m ZnNldF9hcmcgaXMgTlVMTDogUFJFVi9ORVhUOiAxCi0JCQkJICogKHBoeXNpY2FsIG9mZnNldCBm cm9tIGN1cnJlbnRwb3MpIEZJUlNUL0xBU1Q6IDAgKGxvZ2ljYWwKLQkJCQkgKiBvZmZzZXQgZnJv bSBtYXRjaCBib3VuZGFyeSkKIAkJCQkgKi8KIAkJCQlSUFJOYXZFeHByICpuYXYgPSAoUlBSTmF2 RXhwciAqKSBub2RlOwogCQkJCVdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZTsKQEAgLTEyMTMsNTYg KzEyMDksOCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwK IAkJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfUlBSX05BVl9TRVQ7CiAJCQkJc2NyYXRjaC5kLnJw cl9uYXYud2luc3RhdGUgPSB3aW5zdGF0ZTsKIAkJCQlzY3JhdGNoLmQucnByX25hdi5raW5kID0g bmF2LT5raW5kOwotCi0JCQkJaWYgKG5hdi0+a2luZCA+PSBSUFJfTkFWX1BSRVZfRklSU1QpCi0J CQkJewotCQkJCQkvKgotCQkJCQkgKiBDb21wb3VuZCBuYXZpZ2F0aW9uOiBhbGxvY2F0ZSBhcnJh eSBvZiAyIGZvciBpbm5lciBbMF0KLQkJCQkJICogYW5kIG91dGVyIFsxXSBvZmZzZXRzLgotCQkJ CQkgKi8KLQkJCQkJRGF0dW0JICAgKm9mZnNldF92YWx1ZXMgPSBwYWxsb2NfYXJyYXkoRGF0dW0s IDIpOwotCQkJCQlib29sCSAgICpvZmZzZXRfaXNudWxscyA9IHBhbGxvY19hcnJheShib29sLCAy KTsKLQotCQkJCQkvKiBJbm5lciBvZmZzZXQgKGRlZmF1bHQgMCBmb3IgRklSU1QvTEFTVCkgKi8K LQkJCQkJaWYgKG5hdi0+b2Zmc2V0X2FyZyAhPSBOVUxMKQotCQkJCQkJRXhlY0luaXRFeHByUmVj KG5hdi0+b2Zmc2V0X2FyZywgc3RhdGUsCi0JCQkJCQkJCQkJJm9mZnNldF92YWx1ZXNbMF0sICZv ZmZzZXRfaXNudWxsc1swXSk7Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkJb2Zmc2V0X3ZhbHVl c1swXSA9IEludDY0R2V0RGF0dW0oMCk7Ci0JCQkJCQlvZmZzZXRfaXNudWxsc1swXSA9IGZhbHNl OwotCQkJCQl9Ci0KLQkJCQkJLyogT3V0ZXIgb2Zmc2V0IChkZWZhdWx0IDEgZm9yIFBSRVYvTkVY VCkgKi8KLQkJCQkJaWYgKG5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZyAhPSBOVUxMKQotCQkJCQkJ RXhlY0luaXRFeHByUmVjKG5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZywgc3RhdGUsCi0JCQkJCQkJ CQkJJm9mZnNldF92YWx1ZXNbMV0sICZvZmZzZXRfaXNudWxsc1sxXSk7Ci0JCQkJCWVsc2UKLQkJ CQkJewotCQkJCQkJb2Zmc2V0X3ZhbHVlc1sxXSA9IEludDY0R2V0RGF0dW0oMSk7Ci0JCQkJCQlv ZmZzZXRfaXNudWxsc1sxXSA9IGZhbHNlOwotCQkJCQl9Ci0KLQkJCQkJc2NyYXRjaC5kLnJwcl9u YXYub2Zmc2V0X3ZhbHVlID0gb2Zmc2V0X3ZhbHVlczsKLQkJCQkJc2NyYXRjaC5kLnJwcl9uYXYu b2Zmc2V0X2lzbnVsbCA9IG9mZnNldF9pc251bGxzOwotCQkJCX0KLQkJCQllbHNlIGlmIChuYXYt Pm9mZnNldF9hcmcgIT0gTlVMTCkKLQkJCQl7Ci0JCQkJCS8qIFNpbXBsZSBuYXZpZ2F0aW9uIHdp dGggZXhwbGljaXQgb2Zmc2V0ICovCi0JCQkJCURhdHVtCSAgICpvZmZzZXRfdmFsdWUgPSBwYWxs b2Nfb2JqZWN0KERhdHVtKTsKLQkJCQkJYm9vbAkgICAqb2Zmc2V0X2lzbnVsbCA9IHBhbGxvY19v YmplY3QoYm9vbCk7Ci0KLQkJCQkJRXhlY0luaXRFeHByUmVjKG5hdi0+b2Zmc2V0X2FyZywgc3Rh dGUsCi0JCQkJCQkJCQlvZmZzZXRfdmFsdWUsIG9mZnNldF9pc251bGwpOwotCQkJCQlzY3JhdGNo LmQucnByX25hdi5vZmZzZXRfdmFsdWUgPSBvZmZzZXRfdmFsdWU7Ci0JCQkJCXNjcmF0Y2guZC5y cHJfbmF2Lm9mZnNldF9pc251bGwgPSBvZmZzZXRfaXNudWxsOwotCQkJCX0KLQkJCQllbHNlCi0J CQkJewotCQkJCQkvKiBTaW1wbGUgbmF2aWdhdGlvbiB3aXRoIGRlZmF1bHQgb2Zmc2V0ICovCi0J CQkJCXNjcmF0Y2guZC5ycHJfbmF2Lm9mZnNldF92YWx1ZSA9IE5VTEw7Ci0JCQkJCXNjcmF0Y2gu ZC5ycHJfbmF2Lm9mZnNldF9pc251bGwgPSBOVUxMOwotCQkJCX0KKwkJCQlzY3JhdGNoLmQucnBy X25hdi5vZmZzZXQgPSBuYXYtPm9mZnNldDsKKwkJCQlzY3JhdGNoLmQucnByX25hdi5jb21wb3Vu ZF9vZmZzZXQgPSBuYXYtPmNvbXBvdW5kX29mZnNldDsKIAogCQkJCUV4cHJFdmFsUHVzaFN0ZXAo c3RhdGUsICZzY3JhdGNoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5k ZXggNWI2MjgxZTllMy4uMzM5NjBiNzU3ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwcklu dGVycC5jCkBAIC02MDExLDM0ICs2MDExLDYgQEAgRXhlY0FnZ1BsYWluVHJhbnNCeVJlZihBZ2dT dGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyVHJhbnMgcGVydHJhbnMsCiAJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZENvbnRleHQpOwogfQogCi0vKgotICogRXh0cmFjdCBjb21wb3VuZCAob3V0 ZXIpIG9mZnNldCBmcm9tIHN0ZXAgZGF0YS4KLSAqIEZvciBjb21wb3VuZCBuYXYsIG9mZnNldF92 YWx1ZSBpcyBhbiBhcnJheTogWzBdPWlubmVyLCBbMV09b3V0ZXIuCi0gKiBSZXR1cm5zIHRoZSBv dXRlciBvZmZzZXQ7IGVycm9ycyBvbiBOVUxMIG9yIG5lZ2F0aXZlLgotICogRGVmYXVsdCBpcyAx IChsaWtlIFBSRVYvTkVYVCBpbXBsaWNpdCBvZmZzZXQpLgotICovCi1zdGF0aWMgaW50NjQKLXJw cl9uYXZfZ2V0X2NvbXBvdW5kX29mZnNldChFeHByRXZhbFN0ZXAgKm9wKQotewotCWludDY0CQl2 YWw7Ci0KLQlBc3NlcnQob3AtPmQucnByX25hdi5vZmZzZXRfdmFsdWUgIT0gTlVMTCk7Ci0KLQlp ZiAob3AtPmQucnByX25hdi5vZmZzZXRfaXNudWxsWzFdKQotCQllcmVwb3J0KEVSUk9SLAotCQkJ CWVycmNvZGUoRVJSQ09ERV9OVUxMX1ZBTFVFX05PVF9BTExPV0VEKSwKLQkJCQllcnJtc2coInJv dyBwYXR0ZXJuIG5hdmlnYXRpb24gb2Zmc2V0IG11c3Qgbm90IGJlIG51bGwiKSk7Ci0KLQl2YWwg PSBEYXR1bUdldEludDY0KG9wLT5kLnJwcl9uYXYub2Zmc2V0X3ZhbHVlWzFdKTsKLQotCWlmICh2 YWwgPCAwKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCi0JCQkJZXJybXNnKCJyb3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9mZnNl dCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KIC8qCiAgKiBF dmFsdWF0ZSBSUFIgbmF2aWdhdGlvbiAoUFJFVi9ORVhUL0ZJUlNUL0xBU1QpOiBzd2FwIHNsb3Qg dG8gdGFyZ2V0IHJvdy4KICAqCkBAIC02MDU0LDQyICs2MDI2LDE1IEBAIEV4ZWNFdmFsUlBSTmF2 U2V0KEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29u dGV4dCkKIHsKIAlXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUgPSBvcC0+ZC5ycHJfbmF2LndpbnN0 YXRlOwogCWludDY0CQlvZmZzZXQ7CisJaW50NjQJCWNvbXBvdW5kX29mZnNldDsKIAlpbnQ2NAkJ dGFyZ2V0X3BvczsKIAlUdXBsZVRhYmxlU2xvdCAqdGFyZ2V0X3Nsb3Q7CiAKIAkvKiBTYXZlIGN1 cnJlbnQgc2xvdCBmb3IgbGF0ZXIgcmVzdG9yZSAqLwogCXdpbnN0YXRlLT5uYXZfc2F2ZWRfb3V0 ZXJ0dXBsZSA9IGVjb250ZXh0LT5lY3h0X291dGVydHVwbGU7CiAKLQkvKgotCSAqIERldGVybWlu ZSB0aGUgaW5uZXIgb2Zmc2V0LiAgTlVMTCBvciBuZWdhdGl2ZSBvZmZzZXRzIGFyZSBlcnJvcnMg cGVyCi0JICogdGhlIFNRTCBzdGFuZGFyZC4KLQkgKgotCSAqIERlZmF1bHQgb2Zmc2V0IHdoZW4g b2Zmc2V0X2FyZyBpcyBOVUxMOiBQUkVWL05FWFQ6IDEgKHN0YW5kYXJkIDUuNi4yKQotCSAqIEZJ UlNUL0xBU1QgYW5kIGNvbXBvdW5kOiAwIGZvciBpbm5lciwgMSBmb3Igb3V0ZXIKLQkgKi8KLQlp ZiAob3AtPmQucnByX25hdi5vZmZzZXRfdmFsdWUgIT0gTlVMTCkKLQl7Ci0JCWlmICgqb3AtPmQu cnByX25hdi5vZmZzZXRfaXNudWxsKQotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJZXJyY29kZShF UlJDT0RFX05VTExfVkFMVUVfTk9UX0FMTE9XRUQpLAotCQkJCQllcnJtc2coInJvdyBwYXR0ZXJu IG5hdmlnYXRpb24gb2Zmc2V0IG11c3Qgbm90IGJlIG51bGwiKSk7Ci0KLQkJb2Zmc2V0ID0gRGF0 dW1HZXRJbnQ2NCgqb3AtPmQucnByX25hdi5vZmZzZXRfdmFsdWUpOwotCi0JCWlmIChvZmZzZXQg PCAwKQotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKLQkJCQkJZXJybXNnKCJyb3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9mZnNl dCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpKTsKLQl9Ci0JZWxzZQotCXsKLQkJLyogRGVmYXVsdCBv ZmZzZXQ6IDEgZm9yIHNpbXBsZSBQUkVWL05FWFQsIDAgb3RoZXJ3aXNlICovCi0JCWlmIChvcC0+ ZC5ycHJfbmF2LmtpbmQgPT0gUlBSX05BVl9QUkVWIHx8Ci0JCQlvcC0+ZC5ycHJfbmF2LmtpbmQg PT0gUlBSX05BVl9ORVhUKQotCQkJb2Zmc2V0ID0gMTsKLQkJZWxzZQotCQkJb2Zmc2V0ID0gMDsK LQl9CisJb2Zmc2V0ID0gb3AtPmQucnByX25hdi5vZmZzZXQ7CisJY29tcG91bmRfb2Zmc2V0ID0g b3AtPmQucnByX25hdi5jb21wb3VuZF9vZmZzZXQ7CiAKIAkvKgogCSAqIENhbGN1bGF0ZSB0YXJn ZXQgcG9zaXRpb24gYmFzZWQgb24gbmF2aWdhdGlvbiBkaXJlY3Rpb24uICBPbiBvdmVyZmxvdywK QEAgLTYxMjksNyArNjA3NCw2IEBAIEV4ZWNFdmFsUlBSTmF2U2V0KEV4cHJTdGF0ZSAqc3RhdGUs IEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCkKIAkJY2FzZSBSUFJfTkFW X1BSRVZfRklSU1Q6CiAJCWNhc2UgUlBSX05BVl9ORVhUX0ZJUlNUOgogCQkJewotCQkJCWludDY0 CQljb21wb3VuZF9vZmZzZXQ7CiAJCQkJaW50NjQJCWlubmVyX3BvczsKIAogCQkJCS8qIElubmVy OiBtYXRjaF9zdGFydCArIG9mZnNldCAqLwpAQCAtNjE0NCw5ICs2MDg4LDYgQEAgRXhlY0V2YWxS UFJOYXZTZXQoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQg KmVjb250ZXh0KQogCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCQkvKiBPdXRlciBvZmZzZXQgKi8K LQkJCQljb21wb3VuZF9vZmZzZXQgPSBycHJfbmF2X2dldF9jb21wb3VuZF9vZmZzZXQob3ApOwot CiAJCQkJLyogQXBwbHkgb3V0ZXI6IFBSRVYgc3VidHJhY3RzLCBORVhUIGFkZHMgKi8KIAkJCQlp ZiAob3AtPmQucnByX25hdi5raW5kID09IFJQUl9OQVZfUFJFVl9GSVJTVCkKIAkJCQl7CkBAIC02 MTY4LDcgKzYxMDksNiBAQCBFeGVjRXZhbFJQUk5hdlNldChFeHByU3RhdGUgKnN0YXRlLCBFeHBy RXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQpCiAJCWNhc2UgUlBSX05BVl9QUkVW X0xBU1Q6CiAJCWNhc2UgUlBSX05BVl9ORVhUX0xBU1Q6CiAJCQl7Ci0JCQkJaW50NjQJCWNvbXBv dW5kX29mZnNldDsKIAkJCQlpbnQ2NAkJaW5uZXJfcG9zOwogCiAJCQkJLyogSW5uZXI6IGN1cnJl bnRwb3MgLSBvZmZzZXQgKi8KQEAgLTYxODMsOSArNjEyMyw2IEBAIEV4ZWNFdmFsUlBSTmF2U2V0 KEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4 dCkKIAkJCQkJYnJlYWs7CiAJCQkJfQogCi0JCQkJLyogT3V0ZXIgb2Zmc2V0ICovCi0JCQkJY29t cG91bmRfb2Zmc2V0ID0gcnByX25hdl9nZXRfY29tcG91bmRfb2Zmc2V0KG9wKTsKLQogCQkJCS8q IEFwcGx5IG91dGVyOiBQUkVWIHN1YnRyYWN0cywgTkVYVCBhZGRzICovCiAJCQkJaWYgKG9wLT5k LnJwcl9uYXYua2luZCA9PSBSUFJfTkFWX1BSRVZfTEFTVCkKIAkJCQl7CkBAIC02MjA2LDcgKzYx NDMsNyBAQCBFeGVjRXZhbFJQUk5hdlNldChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAg Km9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQpCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVs b2coRVJST1IsICJ1bnJlY29nbml6ZWQgUlBSIG5hdmlnYXRpb24ga2luZDogJWQiLAotCQkJCSBv cC0+ZC5ycHJfbmF2LmtpbmQpOworCQkJCSAoaW50KSBvcC0+ZC5ycHJfbmF2LmtpbmQpOwogCQkJ YnJlYWs7CiAJfQogCkBAIC02MjM4LDggKzYxNzUsNiBAQCBFeGVjRXZhbFJQUk5hdlNldChFeHBy U3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQpCiAg KiBFdmFsdWF0ZSBSUFIgbmF2aWdhdGlvbjogcmVzdG9yZSBzbG90IHRvIG9yaWdpbmFsIHJvdy4K ICAqCiAgKiBSZXN0b3JlcyBlY29udGV4dC0+ZWN4dF9vdXRlcnR1cGxlIGZyb20gdGhlIHNhdmVk IHNsb3QgaW4gd2luc3RhdGUuCi0gKiBXaGVuIHNsb3Qgc3dhcCB3YXMgZWxpZGVkICh0YXJnZXQg PT0gY3VycmVudHBvcyksIHRoaXMgaXMgYSBoYXJtbGVzcwotICogbm8tb3Agc2luY2Ugc2F2ZWQg YW5kIGN1cnJlbnQgc2xvdHMgYXJlIGlkZW50aWNhbC4KICAqIFRoZSBjYWxsZXIgaXMgcmVzcG9u c2libGUgZm9yIHVwZGF0aW5nIGFueSBsb2NhbCBzbG90IGNhY2hlLgogICoKICAqIEZvciBwYXNz LWJ5LXJlZmVyZW5jZSByZXN1bHQgdHlwZXMsIHRoZSByZXN1bHQgZGF0dW0gcG9pbnRzIGludG8K QEAgLTYyNTUsNiArNjE5MCwxMyBAQCBFeGVjRXZhbFJQUk5hdlJlc3RvcmUoRXhwclN0YXRlICpz dGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIHsKIAlXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUgPSBv cC0+ZC5ycHJfbmF2LndpbnN0YXRlOwogCisJLyoKKwkgKiBXaGVuIHNsb3Qgc3dhcCB3YXMgZWxp ZGVkICh0YXJnZXQgPT0gY3VycmVudHBvcyksIHRoaXMgaXMgYSBoYXJtbGVzcworCSAqIG5vLW9w IHNpbmNlIHNhdmVkIGFuZCBjdXJyZW50IHNsb3RzIGFyZSBpZGVudGljYWwuCisJICovCisJaWYg KGVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPT0gd2luc3RhdGUtPm5hdl9zYXZlZF9vdXRlcnR1 cGxlKQorCQlyZXR1cm47CisKIAllY29udGV4dC0+ZWN4dF9vdXRlcnR1cGxlID0gd2luc3RhdGUt Pm5hdl9zYXZlZF9vdXRlcnR1cGxlOwogCiAJLyogU3RhYmlsaXplIHBhc3MtYnktcmVmIHJlc3Vs dCBhZ2FpbnN0IG5hdl9zbG90IHJlLWZldGNoICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlV2luZG93QWdnLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93 QWdnLmMKaW5kZXggZTRlOTdhNmVkOS4uY2FhMjdmZmU4ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVXaW5kb3dBZ2cuYwpAQCAtMTI2MSwxMyArMTI2MSwxMyBAQCBwcmVwYXJlX3R1cGxlc3RvcmUo V2luZG93QWdnU3RhdGUgKndpbnN0YXRlKQogCQkvKgogCQkgKiBBbGxvY2F0ZSBtYXJrIGFuZCBy ZWFkIHBvaW50ZXJzIGZvciBSUFIgbmF2aWdhdGlvbi4KIAkJICoKLQkJICogSWYgbmF2TWF4T2Zm c2V0S2luZCA9PSBSUFJfTkFWX09GRlNFVF9GSVhFRCwgd2UgYWR2YW5jZSB0aGUgbWFyawotCQkg KiBiYXNlZCBvbiAoY3VycmVudHBvcyAtIG5hdk1heE9mZnNldCkgYW5kIG9wdGlvbmFsbHkKKwkJ ICogSWYgbmF2TWF4T2Zmc2V0IGlzIG5vbi1uZWdhdGl2ZSwgd2UgYWR2YW5jZSB0aGUgbWFyayBi YXNlZCBvbgorCQkgKiAoY3VycmVudHBvcyAtIG5hdk1heE9mZnNldCkgYW5kIG9wdGlvbmFsbHkK IAkJICogKG5mYUNvbnRleHQtPm1hdGNoU3RhcnRSb3cgKyBuYXZGaXJzdE9mZnNldCksIGFsbG93 aW5nCiAJCSAqIHR1cGxlc3RvcmVfdHJpbSgpIHRvIGZyZWUgcm93cyB0aGF0IGFyZSBubyBsb25n ZXIgcmVhY2hhYmxlLgogCQkgKgotCQkgKiBSUFJfTkFWX09GRlNFVF9ORUVEU19FVkFMIGlzIHJl c29sdmVkIGF0IGV4ZWN1dG9yIGluaXQ7IGJ5IHRoaXMKLQkJICogcG9pbnQgaXQgaXMgZWl0aGVy IEZJWEVEIG9yIFJFVEFJTl9BTEwuCisJCSAqIHRoZSBvZmZzZXQgaXMgcmVzb2x2ZWQgYXQgZXhl Y3V0b3IgaW5pdDsgYnkgdGhpcyBwb2ludCBpdCBpcyBlaXRoZXIKKwkJICogRklYRUQgb3IgUkVU QUlOX0FMTC4KIAkJICovCiAJCXdpbnN0YXRlLT5uYXZfd2lub2JqLT5tYXJrcHRyID0KIAkJCXR1 cGxlc3RvcmVfYWxsb2NfcmVhZF9wb2ludGVyKHdpbnN0YXRlLT5idWZmZXIsIDApOwpAQCAtMzAz NywxMiArMzAzNyw3IEBAIEV4ZWNJbml0V2luZG93QWdnKFdpbmRvd0FnZyAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJd2luc3RhdGUtPnJwU2tpcFRvID0gbm9kZS0+cnBTa2lw VG87CiAJLyogU2V0IHVwIHJvdyBwYXR0ZXJuIHJlY29nbml0aW9uIFBBVFRFUk4gY2xhdXNlIChj b21waWxlZCBORkEpICovCiAJd2luc3RhdGUtPnJwUGF0dGVybiA9IG5vZGUtPnJwUGF0dGVybjsK LQkvKiBTZXQgdXAgbmF2IG9mZnNldHMgZm9yIHR1cGxlc3RvcmUgdHJpbTsgcmVzb2x2ZSBhbnkg TkVFRFNfRVZBTCBraW5kcyAqLwotCXdpbnN0YXRlLT5uYXZNYXhPZmZzZXRLaW5kID0gbm9kZS0+ bmF2TWF4T2Zmc2V0S2luZDsKLQl3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0ID0gbm9kZS0+bmF2TWF4 T2Zmc2V0OwotCXdpbnN0YXRlLT5oYXNGaXJzdE5hdiA9IG5vZGUtPmhhc0ZpcnN0TmF2OwotCXdp bnN0YXRlLT5uYXZGaXJzdE9mZnNldEtpbmQgPSBub2RlLT5uYXZGaXJzdE9mZnNldEtpbmQ7Ci0J d2luc3RhdGUtPm5hdkZpcnN0T2Zmc2V0ID0gbm9kZS0+bmF2Rmlyc3RPZmZzZXQ7CisJLyogUmVz b2x2ZSBuYXYgb2Zmc2V0cyBmb3IgdHVwbGVzdG9yZSB0cmltIGZyb20gdGhlIERFRklORSBjbGF1 c2UgKi8KIAlldmFsX2RlZmluZV9vZmZzZXRzKHdpbnN0YXRlLCBub2RlLT5kZWZpbmVDbGF1c2Up OwogCiAJLyogQ29weSBtYXRjaF9zdGFydCBkZXBlbmRlbmN5IGJpdG1hcHNldCBmb3IgcGVyLWNv bnRleHQgZXZhbHVhdGlvbiAqLwpAQCAtMzk4MywyMCArMzk3OCwxNiBAQCBwdXRfbm90bnVsbF9p bmZvKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcywgaW50IGFyZ25vLCBib29sIGlzbnVs bCkKIH0KIAogLyoKLSAqIGV2YWxfbmF2X29mZnNldF9oZWxwZXIKLSAqCQlQcmUtZXZhbHVhdGUg YSBuYXZpZ2F0aW9uIG9mZnNldCBleHByZXNzaW9uIGF0IGV4ZWN1dG9yIGluaXQgdGltZSwgdG8K LSAqCQlib3VuZCBob3cgZmFyIG5hdmlnYXRpb24gY2FuIHJlYWNoICh3aGljaCBzaXplcyB0aGUg ZnJhbWUgdHJpbSkuCi0gKgkJUmV0dXJucyB0aGUgb2Zmc2V0IHZhbHVlLCBvciAwIGZvciBhIE5V TEwgb3IgbmVnYXRpdmUgb2Zmc2V0LgorICogZXZhbF9uYXZfb2Zmc2V0CisgKgkJRXZhbHVhdGUg YSByb3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9mZnNldCBleHByZXNzaW9uCiAgKgotICogVGhlIG9m ZnNldCBpcyBub3QgdmFsaWRhdGVkIGhlcmUuICBBIE5VTEwgb3IgbmVnYXRpdmUgdmFsdWUgaXMg Y2F1Z2h0IGxhdGVyLAotICogcGVyIHJvdywgb24gdGhlIG5hdmlnYXRpb24gcGF0aCB0aGF0IGNv bnN1bWVzIGl0IChzZWUgRUVPUF9SUFJfTkFWX1NFVCBpbgotICogZXhlY0V4cHJJbnRlcnAuYyks IHdoaWNoIGVycm9ycyBvdXQgYmVmb3JlIG5hdmlnYXRpb24gcHJvZHVjZXMgYW55IHJlc3VsdDsK LSAqIHRoZSB0cmltIHNpemluZyBjb21wdXRlZCBmcm9tIHN1Y2ggYW4gb2Zmc2V0IGlzIHRoZXJl Zm9yZSBuZXZlciB1c2VkLCBhbmQgMAotICogaXMgcmV0dXJuZWQgYXMgYSBoYXJtbGVzcyBwbGFj ZWhvbGRlci4KKyAqIFRoZSByZXNvbHZlZCB2YWx1ZSBib3VuZHMgaG93IGZhciBuYXZpZ2F0aW9u IGNhbiByZWFjaCwgd2hpY2ggaW4gdHVybgorICogc2l6ZXMgdGhlIHR1cGxlc3RvcmUgdHJpbS4g IG9mZnNldF9leHByIG1heSBiZSBlaXRoZXIgYSBzaW1wbGUgb2Zmc2V0IG9yCisgKiB0aGUgb3V0 ZXIgKGNvbXBvdW5kKSBvZmZzZXQgb2YgYSBjb21wb3VuZCBuYXZpZ2F0aW9uLiAgUmV0dXJucyB0 aGUgb2Zmc2V0CisgKiBhcyBhbiBpbnQ2NDsgYSBOVUxMIG9yIG5lZ2F0aXZlIHJlc3VsdCBpcyBh biBlcnJvciBwZXIgdGhlIFNRTCBzdGFuZGFyZC4KICAqLwogc3RhdGljIGludDY0Ci1ldmFsX25h dl9vZmZzZXRfaGVscGVyKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSwgRXhwciAqb2Zmc2V0X2V4 cHIsCi0JCQkJCSAgIGludDY0IGRlZmF1bHRPZmZzZXQpCitldmFsX25hdl9vZmZzZXQoV2luZG93 QWdnU3RhdGUgKndpbnN0YXRlLCBFeHByICpvZmZzZXRfZXhwcikKIHsKIAlFeHByQ29udGV4dCAq ZWNvbnRleHQgPSB3aW5zdGF0ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CiAJRXhwclN0YXRlICAq ZXN0YXRlOwpAQCAtNDAwNCwxOCArMzk5NSwyMCBAQCBldmFsX25hdl9vZmZzZXRfaGVscGVyKFdp bmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSwgRXhwciAqb2Zmc2V0X2V4cHIsCiAJYm9vbAkJaXNudWxs OwogCWludDY0CQlvZmZzZXQ7CiAKLQlpZiAob2Zmc2V0X2V4cHIgPT0gTlVMTCkKLQkJcmV0dXJu IGRlZmF1bHRPZmZzZXQ7Ci0KIAllc3RhdGUgPSBFeGVjSW5pdEV4cHIob2Zmc2V0X2V4cHIsIChQ bGFuU3RhdGUgKikgd2luc3RhdGUpOwogCXZhbCA9IEV4ZWNFdmFsRXhwclN3aXRjaENvbnRleHQo ZXN0YXRlLCBlY29udGV4dCwgJmlzbnVsbCk7CiAKIAlpZiAoaXNudWxsKQotCQlyZXR1cm4gMDsK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfTlVMTF9WQUxVRV9OT1RfQUxM T1dFRCksCisJCQkJZXJybXNnKCJyb3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9mZnNldCBtdXN0IG5v dCBiZSBudWxsIikpOwogCiAJb2Zmc2V0ID0gRGF0dW1HZXRJbnQ2NCh2YWwpOworCiAJaWYgKG9m ZnNldCA8IDApCi0JCXJldHVybiAwOworCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJyb3cgcGF0dGVybiBu YXZpZ2F0aW9uIG9mZnNldCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpKTsKIAogCXJldHVybiBvZmZz ZXQ7CiB9CkBAIC00MDI4LDEzICs0MDIxLDE0IEBAIHR5cGVkZWYgc3RydWN0CiAJYm9vbAkJbWF4 T3ZlcmZsb3c7CS8qIHRydWUgaWYgYmFja3dhcmQtcmVhY2ggb3ZlcmZsb3cgZGV0ZWN0ZWQgKi8K IAlpbnQ2NAkJbWluRmlyc3RPZmZzZXQ7IC8qIG1pbiBmb3J3YXJkLWZyb20tbWF0Y2hfc3RhcnQg b2Zmc2V0OyBtYXkgYmUKIAkJCQkJCQkJICogbmVnYXRpdmUgKFBSRVZfRklSU1Q6IGlubmVyIC0g b3V0ZXIgPCAwKSAqLworCWJvb2wJCWhhc0ZpcnN0OwkJLyogYW55IEZJUlNULWJhc2VkIG5hdiBm b3VuZCAqLwogfSBFdmFsRGVmaW5lT2Zmc2V0c0NvbnRleHQ7CiAKIC8qCiAgKiB2aXNpdF9uYXZf ZXhlYwogICoJCW5hdl90cmF2ZXJzYWxfd2Fsa2VyIGNhbGxiYWNrIChOYXZWaXNpdEZuKSBmb3Ig dGhlIGV4ZWN1dG9yIHNpZGUuCiAgKgkJQXQgZWFjaCBSUFJOYXZFeHByLCBldmFsdWF0ZXMgdGhl IG5hdidzIG9mZnNldCBleHByZXNzaW9uKHMpIGF0Ci0gKgkJcnVudGltZSB2aWEgZXZhbF9uYXZf b2Zmc2V0X2hlbHBlciBhbmQgYWNjdW11bGF0ZXM6CisgKgkJcnVudGltZSB2aWEgZXZhbF9uYXZf b2Zmc2V0IGFuZCBhY2N1bXVsYXRlczoKICAqCiAgKgkJICAtIG1heE9mZnNldCAoYmFja3dhcmQg cmVhY2gpOiBQUkVWLCBMQVNULXdpdGgtb2Zmc2V0LCBjb21wb3VuZAogICoJCQlQUkVWX0xBU1Qg KHNldHMgbWF4T3ZlcmZsb3cgb24gaW50NjQgb3ZlcmZsb3cpLCBjb21wb3VuZApAQCAtNDA1Miw2 ICs0MDQ2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QKIHN0YXRpYyB2b2lkCiB2aXNpdF9uYXZfZXhlYyhO YXZUcmF2ZXJzYWwgKnQsIFJQUk5hdkV4cHIgKm5hdikKIHsKKwlpbnQ2NAkJaW5uZXI7CisJaW50 NjQJCW91dGVyOworCiAJRXZhbERlZmluZU9mZnNldHNDb250ZXh0ICpjb250ZXh0ID0gKEV2YWxE ZWZpbmVPZmZzZXRzQ29udGV4dCAqKSB0LT5kYXRhOwogCiAJLyoKQEAgLTQwNjQsNjkgKzQwNjEs NjEgQEAgdmlzaXRfbmF2X2V4ZWMoTmF2VHJhdmVyc2FsICp0LCBSUFJOYXZFeHByICpuYXYpCiAJ QXNzZXJ0KG5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZyA9PSBOVUxMIHx8CiAJCSAgICFJc0EobmF2 LT5jb21wb3VuZF9vZmZzZXRfYXJnLCBSUFJOYXZFeHByKSk7CiAKKwlpZiAobmF2LT5vZmZzZXRf YXJnICE9IE5VTEwpCisJCWlubmVyID0gZXZhbF9uYXZfb2Zmc2V0KGNvbnRleHQtPndpbnN0YXRl LAorCQkJCQkJCQluYXYtPm9mZnNldF9hcmcpOworCWVsc2UgaWYgKG5hdi0+a2luZCA9PSBSUFJf TkFWX1BSRVYgfHwgbmF2LT5raW5kID09IFJQUl9OQVZfTkVYVCkKKwkJaW5uZXIgPSAxOworCWVs c2UKKwkJaW5uZXIgPSAwOworCisJaWYgKG5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZyAhPSBOVUxM KQorCQlvdXRlciA9IGV2YWxfbmF2X29mZnNldChjb250ZXh0LT53aW5zdGF0ZSwKKwkJCQkJCQkJ bmF2LT5jb21wb3VuZF9vZmZzZXRfYXJnKTsKKwllbHNlCisJCW91dGVyID0gMTsKKworCW5hdi0+ b2Zmc2V0ID0gaW5uZXI7CisJbmF2LT5jb21wb3VuZF9vZmZzZXQgPSBvdXRlcjsKKwogCS8qIEJh Y2t3YXJkIHJlYWNoOiBQUkVWLCBMQVNULXdpdGgtb2Zmc2V0ICovCiAJaWYgKCFjb250ZXh0LT5t YXhPdmVyZmxvdykKIAl7Ci0JCWludDY0CQlyZWFjaCA9IDA7Ci0JCWJvb2wJCWdvdFJlYWNoID0g ZmFsc2U7Ci0KLQkJaWYgKG5hdi0+a2luZCA9PSBSUFJfTkFWX1BSRVYpCisJCWlmIChuYXYtPmtp bmQgPT0gUlBSX05BVl9QUkVWIHx8CisJCQluYXYtPmtpbmQgPT0gUlBSX05BVl9MQVNUIHx8CisJ CQluYXYtPmtpbmQgPT0gUlBSX05BVl9QUkVWX0xBU1QgfHwKKwkJCW5hdi0+a2luZCA9PSBSUFJf TkFWX05FWFRfTEFTVCkKIAkJewotCQkJcmVhY2ggPSBldmFsX25hdl9vZmZzZXRfaGVscGVyKGNv bnRleHQtPndpbnN0YXRlLAotCQkJCQkJCQkJCSAgIG5hdi0+b2Zmc2V0X2FyZywgMSk7Ci0JCQln b3RSZWFjaCA9IHRydWU7Ci0JCX0KLQkJZWxzZSBpZiAobmF2LT5raW5kID09IFJQUl9OQVZfTEFT VCAmJiBuYXYtPm9mZnNldF9hcmcgIT0gTlVMTCkKLQkJewotCQkJcmVhY2ggPSBldmFsX25hdl9v ZmZzZXRfaGVscGVyKGNvbnRleHQtPndpbnN0YXRlLAotCQkJCQkJCQkJCSAgIG5hdi0+b2Zmc2V0 X2FyZywgMCk7Ci0JCQlnb3RSZWFjaCA9IHRydWU7Ci0JCX0KLQkJZWxzZSBpZiAobmF2LT5raW5k ID09IFJQUl9OQVZfUFJFVl9MQVNUIHx8Ci0JCQkJIG5hdi0+a2luZCA9PSBSUFJfTkFWX05FWFRf TEFTVCkKLQkJewotCQkJaW50NjQJCWlubmVyID0gZXZhbF9uYXZfb2Zmc2V0X2hlbHBlcihjb250 ZXh0LT53aW5zdGF0ZSwKLQkJCQkJCQkJCQkJCQkgICBuYXYtPm9mZnNldF9hcmcsIDApOwotCQkJ aW50NjQJCW91dGVyID0gZXZhbF9uYXZfb2Zmc2V0X2hlbHBlcihjb250ZXh0LT53aW5zdGF0ZSwK LQkJCQkJCQkJCQkJCQkgICBuYXYtPmNvbXBvdW5kX29mZnNldF9hcmcsIDEpOworCQkJaW50NjQJ CXJlYWNoID0gMDsKIAotCQkJaWYgKG5hdi0+a2luZCA9PSBSUFJfTkFWX1BSRVZfTEFTVCkKKwkJ CWlmIChuYXYtPmtpbmQgPT0gUlBSX05BVl9QUkVWIHx8IG5hdi0+a2luZCA9PSBSUFJfTkFWX0xB U1QpCisJCQkJcmVhY2ggPSBpbm5lcjsKKwkJCWVsc2UgaWYgKG5hdi0+a2luZCA9PSBSUFJfTkFW X1BSRVZfTEFTVCkKIAkJCXsKIAkJCQlpZiAocGdfYWRkX3M2NF9vdmVyZmxvdyhpbm5lciwgb3V0 ZXIsICZyZWFjaCkpCiAJCQkJCWNvbnRleHQtPm1heE92ZXJmbG93ID0gdHJ1ZTsKLQkJCQllbHNl Ci0JCQkJCWdvdFJlYWNoID0gdHJ1ZTsKIAkJCX0KIAkJCWVsc2UKLQkJCXsKIAkJCQlyZWFjaCA9 IE1heChpbm5lciAtIG91dGVyLCAwKTsKLQkJCQlnb3RSZWFjaCA9IHRydWU7Ci0JCQl9Ci0JCX0K IAotCQlpZiAoZ290UmVhY2gpCi0JCQljb250ZXh0LT5tYXhPZmZzZXQgPSBNYXgoY29udGV4dC0+ bWF4T2Zmc2V0LCByZWFjaCk7CisJCQlpZiAoIWNvbnRleHQtPm1heE92ZXJmbG93KQorCQkJCWNv bnRleHQtPm1heE9mZnNldCA9IE1heChjb250ZXh0LT5tYXhPZmZzZXQsIHJlYWNoKTsKKwkJfQog CX0KIAogCS8qIEZvcndhcmQgcmVhY2ggZnJvbSBtYXRjaF9zdGFydDogRklSU1QsIGNvbXBvdW5k IFBSRVZfRklSU1QvTkVYVF9GSVJTVCAqLwotCWlmIChuYXYtPmtpbmQgPT0gUlBSX05BVl9GSVJT VCkKKwlpZiAobmF2LT5raW5kID09IFJQUl9OQVZfRklSU1QgfHwKKwkJbmF2LT5raW5kID09IFJQ Ul9OQVZfUFJFVl9GSVJTVCB8fAorCQluYXYtPmtpbmQgPT0gUlBSX05BVl9ORVhUX0ZJUlNUKQog CXsKLQkJaW50NjQJCXJlYWNoOworCQlpbnQ2NAkJcmVhY2ggPSAwOwogCi0JCXJlYWNoID0gZXZh bF9uYXZfb2Zmc2V0X2hlbHBlcihjb250ZXh0LT53aW5zdGF0ZSwKLQkJCQkJCQkJCSAgIG5hdi0+ b2Zmc2V0X2FyZywgMCk7Ci0JCWNvbnRleHQtPm1pbkZpcnN0T2Zmc2V0ID0gTWluKGNvbnRleHQt Pm1pbkZpcnN0T2Zmc2V0LCByZWFjaCk7Ci0JfQotCWVsc2UgaWYgKG5hdi0+a2luZCA9PSBSUFJf TkFWX1BSRVZfRklSU1QgfHwKLQkJCSBuYXYtPmtpbmQgPT0gUlBSX05BVl9ORVhUX0ZJUlNUKQot CXsKLQkJaW50NjQJCWlubmVyID0gZXZhbF9uYXZfb2Zmc2V0X2hlbHBlcihjb250ZXh0LT53aW5z dGF0ZSwKLQkJCQkJCQkJCQkJCSAgIG5hdi0+b2Zmc2V0X2FyZywgMCk7Ci0JCWludDY0CQlvdXRl ciA9IGV2YWxfbmF2X29mZnNldF9oZWxwZXIoY29udGV4dC0+d2luc3RhdGUsCi0JCQkJCQkJCQkJ CQkgICBuYXYtPmNvbXBvdW5kX29mZnNldF9hcmcsIDEpOwotCQlpbnQ2NAkJcmVhY2g7CisJCWNv bnRleHQtPmhhc0ZpcnN0ID0gdHJ1ZTsKIAotCQlpZiAobmF2LT5raW5kID09IFJQUl9OQVZfUFJF Vl9GSVJTVCkKKwkJaWYgKG5hdi0+a2luZCA9PSBSUFJfTkFWX0ZJUlNUKQorCQkJY29udGV4dC0+ bWluRmlyc3RPZmZzZXQgPSBNaW4oY29udGV4dC0+bWluRmlyc3RPZmZzZXQsCisJCQkJCQkJCQkJ ICBpbm5lcik7CisJCWVsc2UgaWYgKG5hdi0+a2luZCA9PSBSUFJfTkFWX1BSRVZfRklSU1QpCiAJ CXsKIAkJCS8qCiAJCQkgKiByZWFjaCA9IGlubmVyIC0gb3V0ZXIuICBCb3RoIGFyZSBub24tbmVn YXRpdmUsIHNvIHRoZSByZXN1bHQgPj0KQEAgLTQxNTAsMzMgKzQxMzksMzggQEAgdmlzaXRfbmF2 X2V4ZWMoTmF2VHJhdmVyc2FsICp0LCBSUFJOYXZFeHByICpuYXYpCiAKIC8qCiAgKiBldmFsX2Rl ZmluZV9vZmZzZXRzCi0gKgkJRXZhbHVhdGUgbm9uLWNvbnN0YW50IG5hdiBvZmZzZXRzIGF0IGV4 ZWN1dG9yIGluaXQgdGltZS4KKyAqCQlDb21wdXRlIG5hdmlnYXRpb24gb2Zmc2V0cyBmb3IgdHVw bGVzdG9yZSB0cmltIGZyb20gdGhlIERFRklORSBjbGF1c2UsCisgKgkJYXQgZXhlY3V0b3IgaW5p dC4KICAqCi0gKiBDYWxsZWQgd2hlbiB0aGUgcGxhbm5lciBzZXQgbmF2TWF4T2Zmc2V0S2luZCBh bmQvb3IgbmF2Rmlyc3RPZmZzZXRLaW5kCi0gKiB0byBSUFJfTkFWX09GRlNFVF9ORUVEU19FVkFM IGJlY2F1c2Ugc29tZSBvZmZzZXQgY29udGFpbnMgYSBwYXJhbWV0ZXIKLSAqIG9yIG5vbi1mb2xk YWJsZSBleHByZXNzaW9uLiAgVXBkYXRlcyBvbmx5IHRoZSBmaWVsZHMgd2hvc2Uga2luZCB3YXMK LSAqIE5FRURTX0VWQUw7IEZJWEVEIGtpbmRzIGFyZSBsZWZ0IHVuY2hhbmdlZC4KKyAqIEV2YWx1 YXRlcyBldmVyeSBuYXYgb2Zmc2V0IGV4cHJlc3Npb24gKGNvbnN0YW50IG9yIG5vdCkgdmlhIHZp c2l0X25hdl9leGVjCisgKiBhbmQgc3RvcmVzIHRoZSByZXN1bHRzIGluIHRoZSBXaW5kb3dBZ2dT dGF0ZToKKyAqCSAtIG5hdk1heE9mZnNldDogbWF4IGJhY2t3YXJkIChQUkVWL0xBU1QpIHJlYWNo OyBzZXQgdG8gLTEgKHRoZSByZXRhaW4tYWxsCisgKgkgICBzZW50aW5lbCkgb24gaW50NjQgb3Zl cmZsb3cgc28gYWR2YW5jZV9uYXZfbWFyaygpIGRpc2FibGVzIHRyaW0uCisgKgkgLSBoYXNGaXJz dE5hdiAvIG5hdkZpcnN0T2Zmc2V0OiBmb3J3YXJkIChGSVJTVCkgcmVhY2ggZnJvbSBtYXRjaF9z dGFydDsKKyAqCSAgIFBHX0lOVDY0X01BWCBtZWFucyB1bmJvdW5kZWQgZm9yd2FyZCByZWFjaC4K ICAqCi0gKiBPbiBiYWNrd2FyZC1yZWFjaCBvdmVyZmxvdywgc2V0cyBuYXZNYXhPZmZzZXRLaW5k IHRvCi0gKiBSUFJfTkFWX09GRlNFVF9SRVRBSU5fQUxMIHNvIHRoYXQgdHVwbGVzdG9yZSB0cmlt IGlzIGRpc2FibGVkIGZvcgotICogYmFja3dhcmQgbmF2aWdhdGlvbi4KKyAqIENhbGxlZCB1bmNv bmRpdGlvbmFsbHkgZm9yIHdpbmRvd3M7IGEgbm9uLVJQUiB3aW5kb3cgaGFzIGFuIGVtcHR5IERF RklORQorICogY2xhdXNlIGFuZCBmYWxscyB0aHJvdWdoIHRvIHRoZSBkZWZhdWx0cy4KICAqLwog c3RhdGljIHZvaWQKIGV2YWxfZGVmaW5lX29mZnNldHMoV2luZG93QWdnU3RhdGUgKndpbnN0YXRl LCBMaXN0ICpkZWZpbmVDbGF1c2UpCiB7CiAJRXZhbERlZmluZU9mZnNldHNDb250ZXh0IGN0eDsK IAlOYXZUcmF2ZXJzYWwgdHJhdjsKLQlib29sCQluZWVkc01heCA9ICh3aW5zdGF0ZS0+bmF2TWF4 T2Zmc2V0S2luZCA9PSBSUFJfTkFWX09GRlNFVF9ORUVEU19FVkFMKTsKLQlib29sCQluZWVkc0Zp cnN0ID0gKHdpbnN0YXRlLT5oYXNGaXJzdE5hdiAmJgotCQkJCQkJCSAgd2luc3RhdGUtPm5hdkZp cnN0T2Zmc2V0S2luZCA9PSBSUFJfTkFWX09GRlNFVF9ORUVEU19FVkFMKTsKIAotCWlmICghbmVl ZHNNYXggJiYgIW5lZWRzRmlyc3QpCisJLyogRGVmYXVsdHM6IG5vIGJhY2t3YXJkLCBubyBGSVJT VCBuYXZpZ2F0aW9uICovCisJd2luc3RhdGUtPm5hdk1heE9mZnNldCA9IDA7CisJd2luc3RhdGUt Pmhhc0ZpcnN0TmF2ID0gZmFsc2U7CisJd2luc3RhdGUtPm5hdkZpcnN0T2Zmc2V0ID0gMDsKKwor CWlmIChkZWZpbmVDbGF1c2UgPT0gTklMKQogCQlyZXR1cm47CiAKIAljdHgud2luc3RhdGUgPSB3 aW5zdGF0ZTsKIAljdHgubWF4T2Zmc2V0ID0gMDsKIAljdHgubWF4T3ZlcmZsb3cgPSBmYWxzZTsK IAljdHgubWluRmlyc3RPZmZzZXQgPSBQR19JTlQ2NF9NQVg7CisJY3R4Lmhhc0ZpcnN0ID0gZmFs c2U7CiAKIAl0cmF2LnZpc2l0ID0gdmlzaXRfbmF2X2V4ZWM7CiAJdHJhdi5kYXRhID0gJmN0eDsK QEAgLTQxODYsMjMgKzQxODAsMjEgQEAgZXZhbF9kZWZpbmVfb2Zmc2V0cyhXaW5kb3dBZ2dTdGF0 ZSAqd2luc3RhdGUsIExpc3QgKmRlZmluZUNsYXVzZSkKIAkJbmF2X3RyYXZlcnNhbF93YWxrZXIo KE5vZGUgKikgdGUtPmV4cHIsICZ0cmF2KTsKIAl9CiAKLQlpZiAobmVlZHNNYXgpCi0JewotCQlp ZiAoY3R4Lm1heE92ZXJmbG93KQotCQl7Ci0JCQl3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0S2luZCA9 IFJQUl9OQVZfT0ZGU0VUX1JFVEFJTl9BTEw7Ci0JCQl3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0ID0g MDsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXdpbnN0YXRlLT5uYXZNYXhPZmZzZXRLaW5kID0gUlBS X05BVl9PRkZTRVRfRklYRUQ7Ci0JCQl3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0ID0gY3R4Lm1heE9m ZnNldDsKLQkJfQotCX0KKwkvKgorCSAqIEJhY2t3YXJkIChQUkVWL0xBU1QpIHJlYWNoLiAgT24g aW50NjQgb3ZlcmZsb3cgdGhlIGxvb2tiYWNrIGNhbm5vdCBiZQorCSAqIGJvdW5kZWQsIHNvIHN0 b3JlIHRoZSByZXRhaW4tYWxsIHNlbnRpbmVsICgtMSk7IGFkdmFuY2VfbmF2X21hcmsoKQorCSAq IHJlYWRzIGl0IHRvIGRpc2FibGUgdHVwbGVzdG9yZSB0cmltLgorCSAqLworCWlmIChjdHgubWF4 T3ZlcmZsb3cpCisJCXdpbnN0YXRlLT5uYXZNYXhPZmZzZXQgPSAtMTsKKwllbHNlCisJCXdpbnN0 YXRlLT5uYXZNYXhPZmZzZXQgPSBjdHgubWF4T2Zmc2V0OwogCi0JaWYgKG5lZWRzRmlyc3QpCisJ LyogRm9yd2FyZCAoRklSU1QpIHJlYWNoOyBuZXZlciBuZWVkcyBhIHJldGFpbi1hbGwgc2VudGlu ZWwgKi8KKwl3aW5zdGF0ZS0+aGFzRmlyc3ROYXYgPSBjdHguaGFzRmlyc3Q7CisKKwlpZiAoY3R4 Lmhhc0ZpcnN0KQogCXsKLQkJd2luc3RhdGUtPm5hdkZpcnN0T2Zmc2V0S2luZCA9IFJQUl9OQVZf T0ZGU0VUX0ZJWEVEOwogCQlpZiAoY3R4Lm1pbkZpcnN0T2Zmc2V0IDwgUEdfSU5UNjRfTUFYKQog CQkJd2luc3RhdGUtPm5hdkZpcnN0T2Zmc2V0ID0gY3R4Lm1pbkZpcnN0T2Zmc2V0OwogCQllbHNl CkBAIC00Mzg0LDEzICs0Mzc2LDEzIEBAIGFkdmFuY2VfbmF2X21hcmsoV2luZG93QWdnU3RhdGUg KndpbnN0YXRlLCBpbnQ2NCBjdXJyZW50UG9zKQogCWlmICh3aW5zdGF0ZS0+bmF2X3dpbm9iaiA9 PSBOVUxMKQogCQlyZXR1cm47CiAKLQkvKiBSRVRBSU5fQUxMIGRpc2FibGVzIHRyaW0gZm9yIHRo ZSBiYWNrd2FyZCAoUFJFVi9MQVNUKSBkaW1lbnNpb24gKi8KLQlpZiAod2luc3RhdGUtPm5hdk1h eE9mZnNldEtpbmQgPT0gUlBSX05BVl9PRkZTRVRfUkVUQUlOX0FMTCkKKwkvKgorCSAqIG5hdk1h eE9mZnNldCA8IDAgaXMgdGhlIHJldGFpbi1hbGwgc2VudGluZWwgKGluZmluaXRlIG9mZnNldCk6 IHRyaW0gaXMKKwkgKiBkaXNhYmxlZAorCSAqLworCWlmICh3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0 IDwgMCkKIAkJcmV0dXJuOwogCi0JLyogbmF2TWF4IGlzIEZJWEVEIGhlcmU6IE5FRURTX0VWQUwg cmVzb2x2ZWQsIFJFVEFJTl9BTEwgcmV0dXJuZWQgKi8KLQlBc3NlcnQod2luc3RhdGUtPm5hdk1h eE9mZnNldEtpbmQgPT0gUlBSX05BVl9PRkZTRVRfRklYRUQpOwotCiAJaWYgKGN1cnJlbnRQb3Mg PiB3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0KQogCQluYXZtYXJrcG9zID0gY3VycmVudFBvcyAtIHdp bnN0YXRlLT5uYXZNYXhPZmZzZXQ7CiAJZWxzZQpAQCAtNDQwMCw5ICs0MzkyLDYgQEAgYWR2YW5j ZV9uYXZfbWFyayhXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGludDY0IGN1cnJlbnRQb3MpCiAJ ewogCQlpbnQ2NAkJZmlyc3RyZWFjaDsKIAotCQkvKiBuYXZGaXJzdCBpcyBhbHdheXMgRklYRUQ7 IGl0IG5ldmVyIHRha2VzIFJFVEFJTl9BTEwgKi8KLQkJQXNzZXJ0KHdpbnN0YXRlLT5uYXZGaXJz dE9mZnNldEtpbmQgPT0gUlBSX05BVl9PRkZTRVRfRklYRUQpOwotCiAJCS8qCiAJCSAqIEhlYWQg Y29udGV4dCBoYXMgdGhlIHNtYWxsZXN0IG1hdGNoU3RhcnRSb3cgKGNvbnRleHRzIGFwcGVuZGVk IGluCiAJCSAqIG5vbmRlY3JlYXNpbmcgb3JkZXIpLCBzbyBib3VuZGluZyBieSBpdCBjb3ZlcnMg ZXZlcnkgRklSU1QgcmVhY2guCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMK aW5kZXggZDg2MGZiOTcxMS4uOTRkOWE0NWJkYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwpAQCAtMjkzLDkgKzI5Myw2IEBAIHN0YXRpYyBXaW5kb3dBZ2cgKm1ha2Vf d2luZG93YWdnKExpc3QgKnRsaXN0LCBXaW5kb3dDbGF1c2UgKndjLAogCQkJCQkJCQkgTGlzdCAq cnVuQ29uZGl0aW9uLAogCQkJCQkJCQkgUlBSUGF0dGVybiAqY29tcGlsZWRQYXR0ZXJuLAogCQkJ CQkJCQkgQml0bWFwc2V0ICpkZWZpbmVNYXRjaFN0YXJ0RGVwZW5kZW50LAotCQkJCQkJCQkgUlBS TmF2T2Zmc2V0S2luZCBuYXZNYXhPZmZzZXRLaW5kLCBpbnQ2NCBuYXZNYXhPZmZzZXQsCi0JCQkJ CQkJCSBib29sIGhhc0ZpcnN0TmF2LAotCQkJCQkJCQkgUlBSTmF2T2Zmc2V0S2luZCBuYXZGaXJz dE9mZnNldEtpbmQsIGludDY0IG5hdkZpcnN0T2Zmc2V0LAogCQkJCQkJCQkgTGlzdCAqcXVhbCwg Ym9vbCB0b3BXaW5kb3csCiAJCQkJCQkJCSBQbGFuICpsZWZ0dHJlZSk7CiBzdGF0aWMgR3JvdXAg Km1ha2VfZ3JvdXAoTGlzdCAqdGxpc3QsIExpc3QgKnF1YWwsIGludCBudW1Hcm91cENvbHMsCkBA IC0yNDc4LDc4ICsyNDc1LDI4IEBAIGNyZWF0ZV9taW5tYXhhZ2dfcGxhbihQbGFubmVySW5mbyAq cm9vdCwgTWluTWF4QWdnUGF0aCAqYmVzdF9wYXRoKQogICoKICAqIFRoZSBkcml2ZXIgc2V0cyBj dXJWYXJJZHggdG8gdGhlIGluZGV4IG9mIHRoZSB2YXJpYWJsZSBiZWluZyB3YWxrZWQKICAqIGJl Zm9yZSBlYWNoIGludm9jYXRpb247IHRoZSB3YWxrZXIgdXNlcyBpdCB0byBwb3B1bGF0ZSBtYXRj aFN0YXJ0RGVwZW5kZW50LgorICoKKyAqIFhYWDogVE9ETywgdGhlIGFib3ZlIGNvbW1lbnRzIG5l ZWQgY2hhbmdlLgogICovCiB0eXBlZGVmIHN0cnVjdCBEZWZpbmVNZXRhZGF0YUNvbnRleHQKIHsK LQlpbnQ2NAkJbWF4T2Zmc2V0OwkJLyogbWF4IFBSRVYvTEFTVCBiYWNrd2FyZCBvZmZzZXQgKD49 IDApICovCi0JYm9vbAkJbWF4TmVlZHNFdmFsOwkvKiBub24tY29uc3RhbnQgUFJFVi9MQVNUIG9m ZnNldCBmb3VuZCAqLwotCWJvb2wJCW1heE92ZXJmbG93OwkvKiBjb25zdGFudCBvZmZzZXQgb3Zl cmZsb3cgZGV0ZWN0ZWQgKi8KLQlpbnQ2NAkJZmlyc3RPZmZzZXQ7CS8qIG1pbiBGSVJTVCBvZmZz ZXQgKG1heSBiZSBuZWdhdGl2ZSBmb3IKLQkJCQkJCQkJICogUFJFVl9GSVJTVCkgKi8KLQlib29s CQloYXNGaXJzdDsJCS8qIGFueSBGSVJTVCBub2RlIGZvdW5kICovCi0JYm9vbAkJZmlyc3ROZWVk c0V2YWw7IC8qIG5vbi1jb25zdGFudCBGSVJTVCBvZmZzZXQgZm91bmQgKi8KIAlpbnQJCQljdXJW YXJJZHg7CQkvKiBERUZJTkUgdmFyaWFibGUgY3VycmVudGx5IGJlaW5nIHdhbGtlZCAqLwogCUJp dG1hcHNldCAgKm1hdGNoU3RhcnREZXBlbmRlbnQ7CS8qIHZhcmlhYmxlcyB0aGF0IGRlcGVuZCBv bgogCQkJCQkJCQkJCSAqIG1hdGNoX3N0YXJ0ICovCiB9IERlZmluZU1ldGFkYXRhQ29udGV4dDsK IAotLyoKLSAqIEhlbHBlcjogZXh0cmFjdCBjb25zdGFudCBvZmZzZXQgZnJvbSBhbiBleHByZXNz aW9uLCBoYW5kbGluZyBOVUxML25lZ2F0aXZlLgotICogSWYgZXhwciBpcyBOVUxMLCByZXR1cm5z IGRlZmF1bHRPZmZzZXQuCi0gKiBSZXR1cm5zIHRydWUgaWYgY29uc3RhbnQsIGZhbHNlIGlmIG5v bi1jb25zdGFudCAoUGFyYW0sIGNhc3QsIGV0Yy4pLgotICovCi1zdGF0aWMgYm9vbAotZXh0cmFj dF9jb25zdF9vZmZzZXQoRXhwciAqZXhwciwgaW50NjQgZGVmYXVsdE9mZnNldCwgaW50NjQgKnJl c3VsdCkKLXsKLQlpZiAoZXhwciA9PSBOVUxMKQotCXsKLQkJKnJlc3VsdCA9IGRlZmF1bHRPZmZz ZXQ7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCWlmIChJc0EoZXhwciwgQ29uc3QpKQotCXsKLQkJ Q29uc3QJICAgKmMgPSAoQ29uc3QgKikgZXhwcjsKLQotCQlpZiAoYy0+Y29uc3Rpc251bGwpCi0J CQkqcmVzdWx0ID0gMDsJCS8qIHJ1bnRpbWUgZXJyb3I7IHNhZmUgcGxhY2Vob2xkZXIgKi8KLQkJ ZWxzZQotCQl7Ci0JCQkqcmVzdWx0ID0gRGF0dW1HZXRJbnQ2NChjLT5jb25zdHZhbHVlKTsKLQkJ CWlmICgqcmVzdWx0IDwgMCkKLQkJCQkqcmVzdWx0ID0gMDsJLyogcnVudGltZSBlcnJvcjsgc2Fm ZSBwbGFjZWhvbGRlciAqLwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxz ZTsJCQkJLyogbm9uLWNvbnN0YW50ICovCi19Ci0KIC8qCiAgKiB2aXNpdF9uYXZfcGxhbgogICoJ CW5hdl90cmF2ZXJzYWxfd2Fsa2VyIGNhbGxiYWNrIChOYXZWaXNpdEZuKSBmb3IgdGhlIHBsYW5u ZXIgc2lkZS4KICAqCQlBdCBlYWNoIFJQUk5hdkV4cHIgaW4gYSBERUZJTkUgZXhwcmVzc2lvbiwg Y29tcHV0ZXM6CiAgKgotICoJCSAgMS4gYmFja3dhcmQgcmVhY2ggKG1heE9mZnNldCkgZm9yIHR1 cGxlc3RvcmUgdHJpbToKLSAqCQkJIC0gUFJFVih2LCBOKSwgTEFTVCh2LCBOKSAgICAgICAgICAg ICAgLT4gTiAoZGVmYXVsdCAxKQotICoJCQkgLSBjb21wb3VuZCBQUkVWX0xBU1QodiwgTiwgTSkg ICAgICAgICAtPiBOICsgTSAob3ZlcmZsb3cgLT4gbWF4T3ZlcmZsb3cpCi0gKgkJCSAtIGNvbXBv dW5kIE5FWFRfTEFTVCh2LCBOLCBNKSAgICAgICAgIC0+IG1heChOIC0gTSwgMCkKLSAqCi0gKgkJ ICAyLiBmb3J3YXJkIHJlYWNoIChmaXJzdE9mZnNldCkgZm9yIHR1cGxlc3RvcmUgdHJpbToKLSAq CQkJIC0gRklSU1QodiwgTikgICAgICAgICAgICAgICAgICAgICAgICAgLT4gTiAoZGVmYXVsdCAw KQotICoJCQkgLSBjb21wb3VuZCBQUkVWX0ZJUlNUKHYsIE4sIE0pICAgICAgICAtPiBOIC0gTSAo bWF5IGJlIG5lZ2F0aXZlKQotICoJCQkgLSBjb21wb3VuZCBORVhUX0ZJUlNUKHYsIE4sIE0pICAg ICAgICAtPiBOICsgTQorICogcGVyLXZhcmlhYmxlIG1hdGNoX3N0YXJ0IGRlcGVuZGVuY3kgZm9y IGFic29ycHRpb24gc3VwcHJlc3Npb246IG91dGVyIG5hdgorICoga2luZHMgdGhhdCByZWFjaCBt YXRjaF9zdGFydCAoRklSU1QsIExBU1Qtd2l0aC1vZmZzZXQsIFBSRVZfRklSU1QsCisgKiBORVhU X0ZJUlNULCBQUkVWX0xBU1QvTkVYVF9MQVNULXdpdGgtb2Zmc2V0KSBhZGQgY3VyVmFySWR4IHRv CisgKiBtYXRjaFN0YXJ0RGVwZW5kZW50LgogICoKLSAqCQkgIDMuIHBlci12YXJpYWJsZSBtYXRj aF9zdGFydCBkZXBlbmRlbmN5IGZvciBhYnNvcnB0aW9uIHN1cHByZXNzaW9uOgotICoJCQkgb3V0 ZXIgbmF2IGtpbmRzIHRoYXQgcmVhY2ggbWF0Y2hfc3RhcnQgKEZJUlNULCBMQVNULXdpdGgtb2Zm c2V0LAotICoJCQkgUFJFVl9GSVJTVCwgTkVYVF9GSVJTVCwgUFJFVl9MQVNUL05FWFRfTEFTVC13 aXRoLW9mZnNldCkgYWRkCi0gKgkJCSBjdXJWYXJJZHggdG8gbWF0Y2hTdGFydERlcGVuZGVudC4K LSAqCi0gKiBDb25zdGFudCBvZmZzZXRzIGFyZSBleHRyYWN0ZWQgdmlhIGV4dHJhY3RfY29uc3Rf b2Zmc2V0OyBub24tY29uc3RhbnQKLSAqIG9mZnNldHMgc2V0IG1heE5lZWRzRXZhbCAvIGZpcnN0 TmVlZHNFdmFsIHNvIHRoZSBleGVjdXRvciBjYW4gcmVzb2x2ZQotICogdGhlbSBhdCBpbml0IHRp bWUgKHNlZSB2aXNpdF9uYXZfZXhlYykuICBDbGFzc2lmaWNhdGlvbiB1c2VzIG9ubHkgdGhlCi0g KiBvdXRlciBuYXYga2luZDogcGFyc2VyIG5lc3RpbmcgcmVzdHJpY3Rpb25zIHByZXZlbnQgRklS U1QvTEFTVCBpbnNpZGUKLSAqIGEgUFJFVi9ORVhUIHZhbHVlIHN1YmV4cHJlc3Npb24uCisgKiBD bGFzc2lmaWNhdGlvbiB1c2VzIG9ubHkgdGhlIG91dGVyIG5hdiBraW5kOiBwYXJzZXIgbmVzdGlu ZyByZXN0cmljdGlvbnMKKyAqIHByZXZlbnQgRklSU1QvTEFTVCBpbnNpZGUgYSBQUkVWL05FWFQg dmFsdWUgc3ViZXhwcmVzc2lvbi4KICAqLwogc3RhdGljIHZvaWQKIHZpc2l0X25hdl9wbGFuKE5h dlRyYXZlcnNhbCAqdCwgUlBSTmF2RXhwciAqbmF2KQpAQCAtMjU2OCwxMzAgKzI1MTUsNiBAQCB2 aXNpdF9uYXZfcGxhbihOYXZUcmF2ZXJzYWwgKnQsIFJQUk5hdkV4cHIgKm5hdikKIAlBc3NlcnQo bmF2LT5jb21wb3VuZF9vZmZzZXRfYXJnID09IE5VTEwgfHwKIAkJICAgIUlzQShuYXYtPmNvbXBv dW5kX29mZnNldF9hcmcsIFJQUk5hdkV4cHIpKTsKIAotCS8qCi0JICogU2ltcGxlIFBSRVYodiwg TikgYW5kIExBU1QodiwgTik6IGJhY2t3YXJkIHJlYWNoIGZyb20gY3VycmVudHBvcy4gTEFTVAot CSAqIHdpdGhvdXQgb2Zmc2V0ID0gY3VycmVudHBvcywgbm8gYmFja3dhcmQgcmVhY2guIE5FWFQ6 IGZvcndhcmQgb25seSwKLQkgKiBpcnJlbGV2YW50IGZvciB0cmltLgotCSAqLwotCWlmIChuYXYt PmtpbmQgPT0gUlBSX05BVl9QUkVWIHx8Ci0JCShuYXYtPmtpbmQgPT0gUlBSX05BVl9MQVNUICYm IG5hdi0+b2Zmc2V0X2FyZyAhPSBOVUxMKSkKLQl7Ci0JCWlmICghY29udGV4dC0+bWF4TmVlZHNF dmFsKQotCQl7Ci0JCQlpbnQ2NAkJb2Zmc2V0OwotCi0JCQkvKgotCQkJICogZGVmYXVsdCAxIGlz IGZvciBQUkVWOyB0aGUgZ3VhcmRlZCBMQVNUIHN1Yi1jYXNlIG5ldmVyIHVzZXMgaXQuCi0JCQkg Ki8KLQkJCWlmIChleHRyYWN0X2NvbnN0X29mZnNldChuYXYtPm9mZnNldF9hcmcsIDEsICZvZmZz ZXQpKQotCQkJCWNvbnRleHQtPm1heE9mZnNldCA9IE1heChjb250ZXh0LT5tYXhPZmZzZXQsIG9m ZnNldCk7Ci0JCQllbHNlCi0JCQkJY29udGV4dC0+bWF4TmVlZHNFdmFsID0gdHJ1ZTsKLQkJfQot CX0KLQotCS8qCi0JICogU2ltcGxlIEZJUlNUKHYsIE4pOiBmb3J3YXJkIHJlYWNoIGZyb20gbWF0 Y2hfc3RhcnQuIFNtYWxsZXIgTiBtZWFucwotCSAqIG9sZGVyIHJvd3MgbmVlZGVkLgotCSAqLwot CWlmIChuYXYtPmtpbmQgPT0gUlBSX05BVl9GSVJTVCkKLQl7Ci0JCWNvbnRleHQtPmhhc0ZpcnN0 ID0gdHJ1ZTsKLQotCQlpZiAoIWNvbnRleHQtPmZpcnN0TmVlZHNFdmFsKQotCQl7Ci0JCQlpbnQ2 NAkJb2Zmc2V0OwotCi0JCQlpZiAoZXh0cmFjdF9jb25zdF9vZmZzZXQobmF2LT5vZmZzZXRfYXJn LCAwLCAmb2Zmc2V0KSkKLQkJCQljb250ZXh0LT5maXJzdE9mZnNldCA9IE1pbihjb250ZXh0LT5m aXJzdE9mZnNldCwgb2Zmc2V0KTsKLQkJCWVsc2UKLQkJCQljb250ZXh0LT5maXJzdE5lZWRzRXZh bCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIENvbXBvdW5kIFBSRVZfTEFTVCAvIE5FWFRf TEFTVDogYmFzZSA9IGN1cnJlbnRwb3MuIFBSRVZfTEFTVCh2LCBOLCBNKToKLQkgKiB0YXJnZXQg PSBjdXJyZW50cG9zIC0gTiAtIE0gLT4gbG9va2JhY2sgPSBOICsgTSBORVhUX0xBU1QodiwgTiwg TSk6Ci0JICogdGFyZ2V0ID0gY3VycmVudHBvcyAtIE4gKyBNIC0+IGxvb2tiYWNrID0gbWF4KE4g LSBNLCAwKQotCSAqLwotCWlmIChuYXYtPmtpbmQgPT0gUlBSX05BVl9QUkVWX0xBU1QgfHwKLQkJ bmF2LT5raW5kID09IFJQUl9OQVZfTkVYVF9MQVNUKQotCXsKLQkJaWYgKCFjb250ZXh0LT5tYXhO ZWVkc0V2YWwpCi0JCXsKLQkJCWludDY0CQlpbm5lcjsKLQkJCWludDY0CQlvdXRlcjsKLQkJCWlu dDY0CQlyZWFjaDsKLQotCQkJaWYgKGV4dHJhY3RfY29uc3Rfb2Zmc2V0KG5hdi0+b2Zmc2V0X2Fy ZywgMCwgJmlubmVyKSAmJgotCQkJCWV4dHJhY3RfY29uc3Rfb2Zmc2V0KG5hdi0+Y29tcG91bmRf b2Zmc2V0X2FyZywgMSwgJm91dGVyKSkKLQkJCXsKLQkJCQlpZiAobmF2LT5raW5kID09IFJQUl9O QVZfUFJFVl9MQVNUKQotCQkJCXsKLQkJCQkJaWYgKHBnX2FkZF9zNjRfb3ZlcmZsb3coaW5uZXIs IG91dGVyLCAmcmVhY2gpKQotCQkJCQkJY29udGV4dC0+bWF4T3ZlcmZsb3cgPSB0cnVlOwotCQkJ CQllbHNlCi0JCQkJCQljb250ZXh0LT5tYXhPZmZzZXQgPSBNYXgoY29udGV4dC0+bWF4T2Zmc2V0 LCByZWFjaCk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXJlYWNoID0gTWF4KGlubmVy IC0gb3V0ZXIsIDApOwotCQkJCQljb250ZXh0LT5tYXhPZmZzZXQgPSBNYXgoY29udGV4dC0+bWF4 T2Zmc2V0LCByZWFjaCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZQotCQkJCWNvbnRleHQtPm1heE5l ZWRzRXZhbCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIENvbXBvdW5kIFBSRVZfRklSU1Qg LyBORVhUX0ZJUlNUOiBiYXNlID0gbWF0Y2hfc3RhcnQuIFBSRVZfRklSU1QodiwgTiwKLQkgKiBN KTogdGFyZ2V0ID0gbWF0Y2hfc3RhcnQgKyBOIC0gTSBORVhUX0ZJUlNUKHYsIE4sIE0pOiB0YXJn ZXQgPQotCSAqIG1hdGNoX3N0YXJ0ICsgTiArIE0gVGhlIGNvbWJpbmVkIG9mZnNldCAoTisvLU0p IGZyb20gbWF0Y2hfc3RhcnQgY2FuIGJlCi0JICogbmVnYXRpdmUsIG1lYW5pbmcgcm93cyBiZWZv cmUgbWF0Y2hfc3RhcnQgYXJlIG5lZWRlZC4KLQkgKi8KLQlpZiAobmF2LT5raW5kID09IFJQUl9O QVZfUFJFVl9GSVJTVCB8fAotCQluYXYtPmtpbmQgPT0gUlBSX05BVl9ORVhUX0ZJUlNUKQotCXsK LQkJY29udGV4dC0+aGFzRmlyc3QgPSB0cnVlOwotCi0JCWlmICghY29udGV4dC0+Zmlyc3ROZWVk c0V2YWwpCi0JCXsKLQkJCWludDY0CQlpbm5lcjsKLQkJCWludDY0CQlvdXRlcjsKLQkJCWludDY0 CQlyZWFjaDsKLQotCQkJaWYgKGV4dHJhY3RfY29uc3Rfb2Zmc2V0KG5hdi0+b2Zmc2V0X2FyZywg MCwgJmlubmVyKSAmJgotCQkJCWV4dHJhY3RfY29uc3Rfb2Zmc2V0KG5hdi0+Y29tcG91bmRfb2Zm c2V0X2FyZywgMSwgJm91dGVyKSkKLQkJCXsKLQkJCQlpZiAobmF2LT5raW5kID09IFJQUl9OQVZf UFJFVl9GSVJTVCkKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIHJlYWNoID0gaW5uZXIgLSBvdXRl ci4gIEJvdGggYXJlIG5vbi1uZWdhdGl2ZSwgc28gdGhlCi0JCQkJCSAqIHJlc3VsdCA+PSAtUEdf SU5UNjRfTUFYLCB3aGljaCBjYW5ub3QgdW5kZXJmbG93IGludDY0LgotCQkJCQkgKiBObyBvdmVy ZmxvdyBjaGVjayBuZWVkZWQuCi0JCQkJCSAqLwotCQkJCQlyZWFjaCA9IGlubmVyIC0gb3V0ZXI7 Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIE5FWFRfRklSU1Q6IHJl YWNoID0gaW5uZXIgKyBvdXRlci4gIFRoaXMgY2FuIG92ZXJmbG93LAotCQkJCQkgKiBidXQgdGhl IHJlc3VsdCBpcyBhbHdheXMgPj0gMCwgc28gaXQgbmV2ZXIgdXBkYXRlcwotCQkJCQkgKiBmaXJz dE9mZnNldCAod2hpY2ggdHJhY2tzIHRoZSBtaW5pbXVtKS4gIENsYW1wIHRvCi0JCQkJCSAqIFBH X0lOVDY0X01BWCBvbiBvdmVyZmxvdy4KLQkJCQkJICovCi0JCQkJCWlmIChwZ19hZGRfczY0X292 ZXJmbG93KGlubmVyLCBvdXRlciwgJnJlYWNoKSkKLQkJCQkJCXJlYWNoID0gUEdfSU5UNjRfTUFY OwotCQkJCX0KLQotCQkJCWNvbnRleHQtPmZpcnN0T2Zmc2V0ID0gTWluKGNvbnRleHQtPmZpcnN0 T2Zmc2V0LCByZWFjaCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJY29udGV4dC0+Zmlyc3ROZWVkc0V2 YWwgPSB0cnVlOwotCQl9Ci0JfQotCiAJLyoKIAkgKiBNYXRjaC1zdGFydCBkZXBlbmRlbmN5OiBj bGFzc2lmeSB0aGUgb3V0ZXIgbmF2IGtpbmQuICBBIGNvbnN0YW50CiAJICogTEFTVCh4LCAwKSBp cyBjb25zZXJ2YXRpdmVseSBpbmNsdWRlZCAob2Zmc2V0X2FyZyBpcyBhIG5vbi1OVUxMIENvbnN0 KSwKQEAgLTI3MTIsMzYgKzI1MzUsMjQgQEAgdmlzaXRfbmF2X3BsYW4oTmF2VHJhdmVyc2FsICp0 LCBSUFJOYXZFeHByICpuYXYpCiAKIC8qCiAgKiBjb21wdXRlX2RlZmluZV9tZXRhZGF0YQotICoJ CUNvbXB1dGUgbmF2aWdhdGlvbiBvZmZzZXRzIGFuZCBtYXRjaF9zdGFydCBkZXBlbmRlbmN5IGZv ciB0aGUKLSAqCQlERUZJTkUgY2xhdXNlIGluIGEgc2luZ2xlIHBhc3MgcGVyIHZhcmlhYmxlLgor ICoJCUNsYXNzaWZ5IHdoaWNoIERFRklORSB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBtYXRjaCBz dGFydC4KKyAqCisgKiBXYWxrcyBlYWNoIERFRklORSB2YXJpYWJsZSBleHByZXNzaW9uIG9uY2Ug YW5kIHJldHVybnMgdGhlIHNldCBvZiB2YXJpYWJsZQorICogaW5kaWNlcyB3aG9zZSBuYXZpZ2F0 aW9uIHJlYWNoZXMgbWF0Y2hfc3RhcnQgKEZJUlNULCBMQVNULXdpdGgtb2Zmc2V0LCBvcgorICog Y29tcG91bmQgUFJFVl9GSVJTVC9ORVhUX0ZJUlNUL1BSRVZfTEFTVC9ORVhUX0xBU1Qtd2l0aC1v ZmZzZXQpLiAgU3VjaAorICogdmFyaWFibGVzIHJlcXVpcmUgcGVyLWNvbnRleHQgcmUtZXZhbHVh dGlvbiBkdXJpbmcgTkZBIHByb2Nlc3NpbmcsIGFuZAorICogdGhlaXIgcHJlc2VuY2UgZGlzcXVh bGlmaWVzIHRoZSBwYXR0ZXJuIGZyb20gY29udGV4dCBhYnNvcnB0aW9uLgogICoKLSAqIFdhbGtz IGVhY2ggREVGSU5FIHZhcmlhYmxlIGV4cHJlc3Npb24gb25jZSwgY29tcHV0aW5nOgotICogICAt IG1heE9mZnNldDogbWF4IGJhY2t3YXJkIHJlYWNoIGZyb20gUFJFViwgTEFTVC13aXRoLW9mZnNl dCwKLSAqICAgICBjb21wb3VuZCBQUkVWX0xBU1QvTkVYVF9MQVNUCi0gKiAgIC0gaGFzRmlyc3Qv Zmlyc3RPZmZzZXQ6IG1pbiBmb3J3YXJkLWZyb20tbWF0Y2gtc3RhcnQgcmVhY2ggZnJvbQotICog ICAgIEZJUlNULCBjb21wb3VuZCBQUkVWX0ZJUlNUL05FWFRfRklSU1QKLSAqICAgLSBtYXRjaFN0 YXJ0RGVwZW5kZW50OiBiaXRtYXBzZXQgb2YgdmFyaWFibGUgaW5kaWNlcyB3aG9zZQotICogICAg IGV4cHJlc3Npb25zIGNvbnRhaW4gbmF2aWdhdGlvbiB0aGF0IGRlcGVuZHMgb24gbWF0Y2hfc3Rh cnQKLSAqICAgICAoRklSU1QsIExBU1Qtd2l0aC1vZmZzZXQsIG9yIGNvbXBvdW5kIFBSRVZfRklS U1QvTkVYVF9GSVJTVC8KLSAqICAgICBQUkVWX0xBU1QvTkVYVF9MQVNULXdpdGgtb2Zmc2V0KS4g IFN1Y2ggdmFyaWFibGVzIHJlcXVpcmUKLSAqICAgICBwZXItY29udGV4dCByZS1ldmFsdWF0aW9u IGR1cmluZyBORkEgcHJvY2Vzc2luZy4KKyAqIE5hdmlnYXRpb24gb2Zmc2V0cyBmb3IgdHVwbGVz dG9yZSB0cmltIGFyZSBub3QgY29tcHV0ZWQgaGVyZTsgdGhleSBhcmUKKyAqIHJlc29sdmVkIGF0 IGV4ZWN1dG9yIGluaXQgKGV2YWxfZGVmaW5lX29mZnNldHMpLCB3aGljaCBjYW4gZXZhbHVhdGUK KyAqIG5vbi1jb25zdGFudCBvZmZzZXRzIHRoYXQgdGhlIHBsYW5uZXIgY2Fubm90IGZvbGQuCiAg Ki8KIHN0YXRpYyB2b2lkCi1jb21wdXRlX2RlZmluZV9tZXRhZGF0YShMaXN0ICpkZWZpbmVDbGF1 c2UsCi0JCQkJCQlSUFJOYXZPZmZzZXRLaW5kICptYXhLaW5kLCBpbnQ2NCAqbWF4UmVzdWx0LAot CQkJCQkJYm9vbCAqaGFzRmlyc3QsCi0JCQkJCQlSUFJOYXZPZmZzZXRLaW5kICpmaXJzdEtpbmQs IGludDY0ICpmaXJzdFJlc3VsdCwKLQkJCQkJCUJpdG1hcHNldCAqKm1hdGNoU3RhcnREZXBlbmRl bnQpCitjb21wdXRlX2RlZmluZV9tZXRhZGF0YShMaXN0ICpkZWZpbmVDbGF1c2UsIEJpdG1hcHNl dCAqKm1hdGNoU3RhcnREZXBlbmRlbnQpCiB7CiAJRGVmaW5lTWV0YWRhdGFDb250ZXh0IGN0eDsK IAlOYXZUcmF2ZXJzYWwgdHJhdjsKIAotCWN0eC5tYXhPZmZzZXQgPSAwOwotCWN0eC5tYXhOZWVk c0V2YWwgPSBmYWxzZTsKLQljdHgubWF4T3ZlcmZsb3cgPSBmYWxzZTsKLQljdHguZmlyc3RPZmZz ZXQgPSBQR19JTlQ2NF9NQVg7IC8qIHNlbnRpbmVsOiBubyBGSVJTVCBmb3VuZCB5ZXQgKi8KLQlj dHguaGFzRmlyc3QgPSBmYWxzZTsKLQljdHguZmlyc3ROZWVkc0V2YWwgPSBmYWxzZTsKIAljdHgu Y3VyVmFySWR4ID0gMDsKIAljdHgubWF0Y2hTdGFydERlcGVuZGVudCA9IE5VTEw7CiAKQEAgLTI3 NTUsNDUgKzI1NjYsNiBAQCBjb21wdXRlX2RlZmluZV9tZXRhZGF0YShMaXN0ICpkZWZpbmVDbGF1 c2UsCiAJfQogCiAJKm1hdGNoU3RhcnREZXBlbmRlbnQgPSBjdHgubWF0Y2hTdGFydERlcGVuZGVu dDsKLQotCS8qIE1heCBiYWNrd2FyZCBvZmZzZXQgKi8KLQlpZiAoY3R4Lm1heE92ZXJmbG93KQot CXsKLQkJKm1heEtpbmQgPSBSUFJfTkFWX09GRlNFVF9SRVRBSU5fQUxMOwotCQkqbWF4UmVzdWx0 ID0gMDsKLQl9Ci0JZWxzZSBpZiAoY3R4Lm1heE5lZWRzRXZhbCkKLQl7Ci0JCSptYXhLaW5kID0g UlBSX05BVl9PRkZTRVRfTkVFRFNfRVZBTDsKLQkJKm1heFJlc3VsdCA9IDA7Ci0JfQotCWVsc2UK LQl7Ci0JCSptYXhLaW5kID0gUlBSX05BVl9PRkZTRVRfRklYRUQ7Ci0JCSptYXhSZXN1bHQgPSBj dHgubWF4T2Zmc2V0OwotCX0KLQotCS8qIEZpcnN0IG9mZnNldCAoY2FuIGJlIG5lZ2F0aXZlIGZv ciBjb21wb3VuZCBQUkVWX0ZJUlNUKSAqLwotCSpoYXNGaXJzdCA9IGN0eC5oYXNGaXJzdDsKLQlp ZiAoY3R4Lmhhc0ZpcnN0KQotCXsKLQkJaWYgKGN0eC5maXJzdE5lZWRzRXZhbCkKLQkJewotCQkJ KmZpcnN0S2luZCA9IFJQUl9OQVZfT0ZGU0VUX05FRURTX0VWQUw7Ci0JCQkqZmlyc3RSZXN1bHQg PSAwOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJKmZpcnN0S2luZCA9IFJQUl9OQVZfT0ZGU0VUX0ZJ WEVEOwotCQkJKmZpcnN0UmVzdWx0ID0gY3R4LmZpcnN0T2Zmc2V0OyAvKiBtYXkgYmUgbmVnYXRp dmU7IFBHX0lOVDY0X01BWAotCQkJCQkJCQkJCQkgKiBpZiBvdmVyZmxvd2VkICovCi0JCX0KLQl9 Ci0JZWxzZQotCXsKLQkJKmZpcnN0S2luZCA9IFJQUl9OQVZfT0ZGU0VUX0ZJWEVEOwotCQkqZmly c3RSZXN1bHQgPSAwOwotCX0KIH0KIAogLyoKQEAgLTI4MjIsMTIgKzI1OTQsNiBAQCBjcmVhdGVf d2luZG93YWdnX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFdpbmRvd0FnZ1BhdGggKmJlc3RfcGF0 aCkKIAlMaXN0Q2VsbCAgICpsYzsKIAlSUFJQYXR0ZXJuICpjb21waWxlZFBhdHRlcm4gPSBOVUxM OwogCUJpdG1hcHNldCAgKm1hdGNoU3RhcnREZXBlbmRlbnQgPSBOVUxMOwotCVJQUk5hdk9mZnNl dEtpbmQgbmF2TWF4T2Zmc2V0S2luZCA9IFJQUl9OQVZfT0ZGU0VUX0ZJWEVEOwotCWludDY0CQlu YXZNYXhPZmZzZXQgPSAwOwotCWJvb2wJCWhhc0ZpcnN0TmF2ID0gZmFsc2U7Ci0JUlBSTmF2T2Zm c2V0S2luZCBuYXZGaXJzdE9mZnNldEtpbmQgPSBSUFJfTkFWX09GRlNFVF9GSVhFRDsKLQlpbnQ2 NAkJbmF2Rmlyc3RPZmZzZXQgPSAwOwotCiAKIAkvKgogCSAqIENob2ljZSBvZiB0bGlzdCBoZXJl IGlzIG1vdGl2YXRlZCBieSB0aGUgZmFjdCB0aGF0IFdpbmRvd0FnZyB3aWxsIGJlCkBAIC0yODgy LDE1ICsyNjQ4LDExIEBAIGNyZWF0ZV93aW5kb3dhZ2dfcGxhbihQbGFubmVySW5mbyAqcm9vdCwg V2luZG93QWdnUGF0aCAqYmVzdF9wYXRoKQogCWlmICh3Yy0+cnBQYXR0ZXJuKQogCXsKIAkJLyoK LQkJICogV2FsayBERUZJTkUgb25jZTogY29sbGVjdCBuYXYgb2Zmc2V0cyAoZm9yIHR1cGxlc3Rv cmUgdHJpbSkgYW5kIHRoZQotCQkgKiBiaXRtYXBzZXQgb2YgbWF0Y2hfc3RhcnQtZGVwZW5kZW50 IHZhcmlhYmxlcyAoZm9yIGFic29ycHRpb24KLQkJICogc3VwcHJlc3Npb24gaW4gYnVpbGRSUFJQ YXR0ZXJuKS4KKwkJICogQ2xhc3NpZnkgd2hpY2ggREVGSU5FIHZhcmlhYmxlcyBkZXBlbmQgb24g bWF0Y2hfc3RhcnQgKGZvcgorCQkgKiBhYnNvcnB0aW9uIHN1cHByZXNzaW9uIGluIGJ1aWxkUlBS UGF0dGVybikuICBOYXYgb2Zmc2V0cyBmb3IKKwkJICogdHVwbGVzdG9yZSB0cmltIGFyZSByZXNv bHZlZCBsYXRlciwgYXQgZXhlY3V0b3IgaW5pdC4KIAkJICovCi0JCWNvbXB1dGVfZGVmaW5lX21l dGFkYXRhKHdjLT5kZWZpbmVDbGF1c2UsCi0JCQkJCQkJCSZuYXZNYXhPZmZzZXRLaW5kLCAmbmF2 TWF4T2Zmc2V0LAotCQkJCQkJCQkmaGFzRmlyc3ROYXYsCi0JCQkJCQkJCSZuYXZGaXJzdE9mZnNl dEtpbmQsICZuYXZGaXJzdE9mZnNldCwKLQkJCQkJCQkJJm1hdGNoU3RhcnREZXBlbmRlbnQpOwor CQljb21wdXRlX2RlZmluZV9tZXRhZGF0YSh3Yy0+ZGVmaW5lQ2xhdXNlLCAmbWF0Y2hTdGFydERl cGVuZGVudCk7CiAKIAkJLyogQ29tcGlsZSBhbmQgb3B0aW1pemUgUlBSIHBhdHRlcm5zICovCiAJ CWNvbXBpbGVkUGF0dGVybiA9IGJ1aWxkUlBSUGF0dGVybih3YywgIWJtc19pc19lbXB0eShtYXRj aFN0YXJ0RGVwZW5kZW50KSk7CkBAIC0yOTEwLDExICsyNjcyLDYgQEAgY3JlYXRlX3dpbmRvd2Fn Z19wbGFuKFBsYW5uZXJJbmZvICpyb290LCBXaW5kb3dBZ2dQYXRoICpiZXN0X3BhdGgpCiAJCQkJ CQkgIGJlc3RfcGF0aC0+cnVuQ29uZGl0aW9uLAogCQkJCQkJICBjb21waWxlZFBhdHRlcm4sCiAJ CQkJCQkgIG1hdGNoU3RhcnREZXBlbmRlbnQsCi0JCQkJCQkgIG5hdk1heE9mZnNldEtpbmQsCi0J CQkJCQkgIG5hdk1heE9mZnNldCwKLQkJCQkJCSAgaGFzRmlyc3ROYXYsCi0JCQkJCQkgIG5hdkZp cnN0T2Zmc2V0S2luZCwKLQkJCQkJCSAgbmF2Rmlyc3RPZmZzZXQsCiAJCQkJCQkgIGJlc3RfcGF0 aC0+cXVhbCwKIAkJCQkJCSAgYmVzdF9wYXRoLT50b3B3aW5kb3csCiAJCQkJCQkgIHN1YnBsYW4p OwpAQCAtNjk4OCw5ICs2NzQ1LDYgQEAgbWFrZV93aW5kb3dhZ2coTGlzdCAqdGxpc3QsIFdpbmRv d0NsYXVzZSAqd2MsCiAJCQkgICBMaXN0ICpydW5Db25kaXRpb24sCiAJCQkgICBSUFJQYXR0ZXJu ICpjb21waWxlZFBhdHRlcm4sCiAJCQkgICBCaXRtYXBzZXQgKmRlZmluZU1hdGNoU3RhcnREZXBl bmRlbnQsCi0JCQkgICBSUFJOYXZPZmZzZXRLaW5kIG5hdk1heE9mZnNldEtpbmQsIGludDY0IG5h dk1heE9mZnNldCwKLQkJCSAgIGJvb2wgaGFzRmlyc3ROYXYsCi0JCQkgICBSUFJOYXZPZmZzZXRL aW5kIG5hdkZpcnN0T2Zmc2V0S2luZCwgaW50NjQgbmF2Rmlyc3RPZmZzZXQsCiAJCQkgICBMaXN0 ICpxdWFsLCBib29sIHRvcFdpbmRvdywgUGxhbiAqbGVmdHRyZWUpCiB7CiAJV2luZG93QWdnICAq bm9kZSA9IG1ha2VOb2RlKFdpbmRvd0FnZyk7CkBAIC03MDI4LDEzICs2NzgyLDYgQEAgbWFrZV93 aW5kb3dhZ2coTGlzdCAqdGxpc3QsIFdpbmRvd0NsYXVzZSAqd2MsCiAJLyogU3RvcmUgcHJlLWNv bXB1dGVkIG1hdGNoX3N0YXJ0IGRlcGVuZGVuY3kgYml0bWFwc2V0ICovCiAJbm9kZS0+ZGVmaW5l TWF0Y2hTdGFydERlcGVuZGVudCA9IGRlZmluZU1hdGNoU3RhcnREZXBlbmRlbnQ7CiAKLQkvKiBT dG9yZSBwcmUtY29tcHV0ZWQgbmF2IG9mZnNldHMgZm9yIHR1cGxlc3RvcmUgdHJpbSBvcHRpbWl6 YXRpb24gKi8KLQlub2RlLT5uYXZNYXhPZmZzZXRLaW5kID0gbmF2TWF4T2Zmc2V0S2luZDsKLQlu b2RlLT5uYXZNYXhPZmZzZXQgPSBuYXZNYXhPZmZzZXQ7Ci0Jbm9kZS0+aGFzRmlyc3ROYXYgPSBo YXNGaXJzdE5hdjsKLQlub2RlLT5uYXZGaXJzdE9mZnNldEtpbmQgPSBuYXZGaXJzdE9mZnNldEtp bmQ7Ci0Jbm9kZS0+bmF2Rmlyc3RPZmZzZXQgPSBuYXZGaXJzdE9mZnNldDsKLQogCXBsYW4tPnRh cmdldGxpc3QgPSB0bGlzdDsKIAlwbGFuLT5sZWZ0dHJlZSA9IGxlZnR0cmVlOwogCXBsYW4tPnJp Z2h0dHJlZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhw ci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCBkYjY2ZWJlMzEzLi4w NTYxZmQ4ZjQwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCisr KyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKQEAgLTcwMyw5ICs3MDMsOSBAQCB0 eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0ZXAKIAkJc3RydWN0CiAJCXsKIAkJCVdpbmRvd0FnZ1N0 YXRlICp3aW5zdGF0ZTsKLQkJCVJQUk5hdktpbmQJa2luZDsJLyogbmF2aWdhdGlvbiBraW5kIChz aW1wbGUgb3IgY29tcG91bmQpICovCi0JCQlEYXR1bQkgICAqb2Zmc2V0X3ZhbHVlOwkvKiBvZmZz ZXQgdmFsdWUocyksIG9yIE5VTEwgKi8KLQkJCWJvb2wJICAgKm9mZnNldF9pc251bGw7CS8qIG9m ZnNldCBudWxsIGZsYWcocykgKi8KKwkJCVJQUk5hdktpbmQJa2luZDsKKwkJCWludDY0CQlvZmZz ZXQ7CisJCQlpbnQ2NAkJY29tcG91bmRfb2Zmc2V0OwogCQkJLyogRm9yIGNvbXBvdW5kIG5hdjog b2Zmc2V0X3ZhbHVlWzBdID0gaW5uZXIsIFsxXSA9IG91dGVyICovCiAJCQlpbnQxNgkJcmVzdWx0 dHlwbGVuOwkvKiBSRVNUT1JFOiByZXN1bHQgdHlwZSBsZW5ndGggKi8KIAkJCWJvb2wJCXJlc3Vs dHR5cGJ5dmFsOyAvKiBSRVNUT1JFOiByZXN1bHQgcGFzcy1ieS12YWx1ZT8gKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKaW5kZXggZDZhYzZiMjI5Yy4uYWQxMzcxODYyYSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKQEAgLTI3MjYsMTQgKzI3MjYsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93QWdnU3RhdGUK IAlUdXBsZVRhYmxlU2xvdCAqdGVtcF9zbG90XzI7CiAKIAkvKiBSUFIgbmF2aWdhdGlvbiAqLwot CVJQUk5hdk9mZnNldEtpbmQgbmF2TWF4T2Zmc2V0S2luZDsJLyogc3RhdHVzIG9mIG5hdk1heE9m ZnNldCAqLwotCWludDY0CQluYXZNYXhPZmZzZXQ7CS8qIG1heCBiYWNrd2FyZCBuYXYgb2Zmc2V0 ICh3aGVuIEZJWEVEKSAqLworCWludDY0CQluYXZNYXhPZmZzZXQ7CS8qIG1heCBiYWNrd2FyZCBu YXYgb2Zmc2V0LCAtMSBtZWFucyBpbmZpbml0ZQorCQkJCQkJCQkgKiBvZmZzZXQsIHJldGFpbiBh bGwgKi8KIAlib29sCQloYXNGaXJzdE5hdjsJLyogRklSU1QoKSBwcmVzZW50IGluIERFRklORSAq LwotCVJQUk5hdk9mZnNldEtpbmQgbmF2Rmlyc3RPZmZzZXRLaW5kOwkvKiBzdGF0dXMgb2YgbmF2 Rmlyc3RPZmZzZXQgKi8KIAlpbnQ2NAkJbmF2Rmlyc3RPZmZzZXQ7IC8qIG1pbiBGSVJTVCgpIG9m ZnNldCAod2hlbiBGSVhFRCkgKi8KIAlzdHJ1Y3QgV2luZG93T2JqZWN0RGF0YSAqbmF2X3dpbm9i ajsJLyogd2lub2JqIGZvciBSUFIgbmF2IGZldGNoICovCiAJaW50NjQJCW5hdl9zbG90X3BvczsJ LyogcG9zaXRpb24gY2FjaGVkIGluIG5hdl9zbG90LCBvciAtMSAqLwotCVR1cGxlVGFibGVTbG90 ICpuYXZfc2xvdDsJLyogc2xvdCBmb3IgUFJFVi9ORVhUL0ZJUlNUL0xBU1QgdGFyZ2V0IHJvdyAq LworCVR1cGxlVGFibGVTbG90ICpuYXZfc2xvdDsJLyogc2xvdCBob2xkaW5nIHRoZSByZXNvbHZl ZCBuYXZpZ2F0aW9uIHRhcmdldAorCQkJCQkJCQkgKiByb3cgKHNpbXBsZSBvciBjb21wb3VuZAor CQkJCQkJCQkgKiBQUkVWL05FWFQvRklSU1QvTEFTVCkgKi8KKwogCVR1cGxlVGFibGVTbG90ICpu YXZfc2F2ZWRfb3V0ZXJ0dXBsZTsJLyogc2F2ZWQgc2xvdCBkdXJpbmcgbmF2IHN3YXAgKi8KIAlU dXBsZVRhYmxlU2xvdCAqbmF2X251bGxfc2xvdDsJLyogYWxsIE5VTEwgc2xvdCAqLwogCWludDY0 CQluYXZfbWF0Y2hfc3RhcnQ7CS8qIG1hdGNoX3N0YXJ0IGZvciBGSVJTVC9MQVNUIG5hdiAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDEzMWM4ZDRjZTguLmFiNzU5NjQ3NTUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9wYXJzZW5vZGVzLmgKQEAgLTU5NCwyMSArNTk0LDYgQEAgdHlwZWRlZiBlbnVtIFJQU2tpcFRv CiAJU1RfUEFTVF9MQVNUX1JPVywJCQkvKiBTS0lQIFRPIFBBU1QgTEFTVCBST1cgKi8KIH0gUlBT a2lwVG87CiAKLS8qCi0gKiBSUFJOYXZPZmZzZXRLaW5kIC0gc3RhdHVzIG9mIG5hdmlnYXRpb24g b2Zmc2V0IGZvciB0dXBsZXN0b3JlIHRyaW0uCi0gKgotICogVGhlIHBsYW5uZXIgY29tcHV0ZXMg bmF2TWF4T2Zmc2V0L25hdkZpcnN0T2Zmc2V0IGZvciB0dXBsZXN0b3JlIG1hcmsKLSAqIG9wdGlt aXphdGlvbi4gIFRoaXMgZW51bSB0cmFja3Mgd2hldGhlciB0aGUgdmFsdWUgaXMgYSByZXNvbHZl ZCBjb25zdGFudCwKLSAqIG5lZWRzIHJ1bnRpbWUgZXZhbHVhdGlvbiwgb3IgY2Fubm90IGJlIGRl dGVybWluZWQgKHJldGFpbiBhbGwgcm93cykuCi0gKi8KLXR5cGVkZWYgZW51bSBSUFJOYXZPZmZz ZXRLaW5kCi17Ci0JUlBSX05BVl9PRkZTRVRfRklYRUQsCQkvKiByZXNvbHZlZCBjb25zdGFudDsg dXNlIHRoZSBvZmZzZXQgdmFsdWUgKi8KLQlSUFJfTkFWX09GRlNFVF9ORUVEU19FVkFMLAkvKiBu b24tY29uc3RhbnQgb2Zmc2V0OyBldmFsdWF0ZSBhdCBleGVjdXRvcgotCQkJCQkJCQkgKiBpbml0 ICovCi0JUlBSX05BVl9PRkZTRVRfUkVUQUlOX0FMTCwJLyogY2Fubm90IGRldGVybWluZTsgcmV0 YWluIGFsbCByb3dzIChubyB0cmltKSAqLwotfSBSUFJOYXZPZmZzZXRLaW5kOwotCiAvKgogICog UlBSUGF0dGVybk5vZGVUeXBlIC0gUm93IFBhdHRlcm4gUmVjb2duaXRpb24gcGF0dGVybiBub2Rl IHR5cGVzCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggMmIzN2M4ZjIyNi4uYjRhMTk2ZTFm NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTE0MTAsMjcgKzE0MTAsNiBAQCB0eXBlZGVmIHN0 cnVjdCBXaW5kb3dBZ2cKIAkgKi8KIAlCaXRtYXBzZXQgICpkZWZpbmVNYXRjaFN0YXJ0RGVwZW5k ZW50OwogCi0JLyoKLQkgKiBOYXZpZ2F0aW9uIG9mZnNldCBzdGF0dXMgYW5kIHZhbHVlcyBmb3Ig dHVwbGVzdG9yZSBtYXJrIG9wdGltaXphdGlvbi4KLQkgKiBTZWUgUlBSTmF2T2Zmc2V0S2luZCBp biBub2Rlcy9wYXJzZW5vZGVzLmguCi0JICoKLQkgKiBuYXZNYXhPZmZzZXQ6IG1heGltdW0gYmFj a3dhcmQgcmVhY2ggZnJvbSBjdXJyZW50cG9zIChjb250cmlidXRlZCBieQotCSAqIFBSRVYsIExB U1Qtd2l0aC1vZmZzZXQsIGNvbXBvdW5kIFBSRVZfTEFTVC9ORVhUX0xBU1QpLiAgT25seSB2YWxp ZCB3aGVuCi0JICogbmF2TWF4T2Zmc2V0S2luZCA9PSBSUFJfTkFWX09GRlNFVF9GSVhFRC4KLQkg KgotCSAqIG5hdkZpcnN0T2Zmc2V0OiBtaW5pbXVtIGZvcndhcmQgb2Zmc2V0IGZyb20gbWF0Y2hf c3RhcnQgKGNvbnRyaWJ1dGVkIGJ5Ci0JICogRklSU1QsIGNvbXBvdW5kIFBSRVZfRklSU1QvTkVY VF9GSVJTVCkuICBDYW4gYmUgbmVnYXRpdmUgZm9yIGNvbXBvdW5kCi0JICogUFJFVl9GSVJTVC4g IE9ubHkgdmFsaWQgd2hlbiBuYXZGaXJzdE9mZnNldEtpbmQgPT0gUlBSX05BVl9PRkZTRVRfRklY RUQKLQkgKiBhbmQgaGFzRmlyc3ROYXYgPT0gdHJ1ZS4KLQkgKi8KLQlSUFJOYXZPZmZzZXRLaW5k IG5hdk1heE9mZnNldEtpbmQ7Ci0JaW50NjQJCW5hdk1heE9mZnNldDsKLQotCS8qIHRydWUgaWYg RklSU1QtYmFzZWQgbmF2aWdhdGlvbiAoRklSU1QsIFBSRVZfRklSU1QsIE5FWFRfRklSU1QpIGlz IHVzZWQgKi8KLQlib29sCQloYXNGaXJzdE5hdjsKLQlSUFJOYXZPZmZzZXRLaW5kIG5hdkZpcnN0 T2Zmc2V0S2luZDsKLQlpbnQ2NAkJbmF2Rmlyc3RPZmZzZXQ7Ci0KIAkvKgogCSAqIGZhbHNlIGZv ciBhbGwgYXBhcnQgZnJvbSB0aGUgV2luZG93QWdnIHRoYXQncyBjbG9zZXN0IHRvIHRoZSByb290 IG9mCiAJICogdGhlIHBsYW4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggODU3NmEzYzljNS4uOTAy NTIxZmY4MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKQEAgLTY2OCwyNSArNjY4LDQwIEBAIHR5cGVk ZWYgc3RydWN0IFdpbmRvd0Z1bmNSdW5Db25kaXRpb24KICAqLwogdHlwZWRlZiBlbnVtIFJQUk5h dktpbmQKIHsKLQlSUFJfTkFWX1BSRVYsCi0JUlBSX05BVl9ORVhULAotCVJQUl9OQVZfRklSU1Qs Ci0JUlBSX05BVl9MQVNULAorCVJQUl9OQVZfUFJFViwJCQkJLyogb2Zmc2V0IGRlZmF1bHQ6IDEg Ki8KKwlSUFJfTkFWX05FWFQsCQkJCS8qIG9mZnNldCBkZWZhdWx0OiAxICovCisJUlBSX05BVl9G SVJTVCwJCQkJLyogb2Zmc2V0IGRlZmF1bHQ6IDAgKi8KKwlSUFJfTkFWX0xBU1QsCQkJCS8qIG9m ZnNldCBkZWZhdWx0OiAwICovCiAJLyogY29tcG91bmQ6IG91dGVyKGlubmVyKGFyZykpICovCi0J UlBSX05BVl9QUkVWX0ZJUlNULAotCVJQUl9OQVZfUFJFVl9MQVNULAotCVJQUl9OQVZfTkVYVF9G SVJTVCwKLQlSUFJfTkFWX05FWFRfTEFTVCwKKwlSUFJfTkFWX1BSRVZfRklSU1QsCQkJLyogKG9m ZnNldCwgY29tcG91bmRfb2Zmc2V0KSBkZWZhdWx0OiAoMCwgMSkgKi8KKwlSUFJfTkFWX1BSRVZf TEFTVCwJCQkvKiAob2Zmc2V0LCBjb21wb3VuZF9vZmZzZXQpIGRlZmF1bHQ6ICgwLCAxKSAqLwor CVJQUl9OQVZfTkVYVF9GSVJTVCwJCQkvKiAob2Zmc2V0LCBjb21wb3VuZF9vZmZzZXQpIGRlZmF1 bHQ6ICgwLCAxKSAqLworCVJQUl9OQVZfTkVYVF9MQVNULAkJCS8qIChvZmZzZXQsIGNvbXBvdW5k X29mZnNldCkgZGVmYXVsdDogKDAsIDEpICovCiB9IFJQUk5hdktpbmQ7CiAKIHR5cGVkZWYgc3Ry dWN0IFJQUk5hdkV4cHIKIHsKIAlFeHByCQl4cHI7Ci0JUlBSTmF2S2luZAlraW5kOwkJCS8qIG5h dmlnYXRpb24ga2luZCAqLwotCUV4cHIJICAgKmFyZzsJCQkvKiBhcmd1bWVudCBleHByZXNzaW9u ICovCi0JRXhwcgkgICAqb2Zmc2V0X2FyZzsJCS8qIG9mZnNldCBleHByZXNzaW9uLCBvciBOVUxM IGZvciBkZWZhdWx0ICovCi0JRXhwcgkgICAqY29tcG91bmRfb2Zmc2V0X2FyZzsJLyogb3V0ZXIg b2Zmc2V0IGZvciBjb21wb3VuZCBuYXYsIG9yCi0JCQkJCQkJCQkJICogTlVMTCBpZiBzaW1wbGUg Ki8KKwlSUFJOYXZLaW5kCWtpbmQ7CisJLyogYXJndW1lbnQgZXhwcmVzc2lvbiAqLworCUV4cHIJ ICAgKmFyZzsKKwkvKiBvZmZzZXQgZXhwcmVzc2lvbiAqLworCUV4cHIJICAgKm9mZnNldF9hcmc7 CisJLyogb3V0ZXIgb2Zmc2V0IGZvciBjb21wb3VuZCBuYXZpZ2F0aW9uICovCisJRXhwcgkgICAq Y29tcG91bmRfb2Zmc2V0X2FyZzsKKworCS8qCisJICogVGhlIGNvbXB1dGVkIG9mZnNldCB2YWx1 ZSwgZm9yIGRlZmF1bHQgdmFsdWUgc2VlIFJQUk5hdktpbmQgY29tbWVudHMKKwkgKiBhYm92ZS4g VGhlIHZhbHVlIHdpbGwgYmUgc2V0IGluIHZpc2l0X25hdl9leGVjLgorCSAqLworCWludDY0CQlv ZmZzZXQ7CisKKwkvKgorCSAqIFRoZSBjb21wdXRlZWQgY29tcG91bmRfb2Zmc2V0IG9mZnNldCB2 YWx1ZSwgZm9yIGRlZmF1bHQgdmFsdWUgc2VlCisJICogUlBSTmF2S2luZCBjb21tZW50cyBhYm92 ZS4gVGhlIHZhbHVlIHdpbGwgYmUgc2V0IGluIHZpc2l0X25hdl9leGVjLgorCSAqLworCWludDY0 CQljb21wb3VuZF9vZmZzZXQ7CisKIAkvKiByZXN1bHQgdHlwZSAoc2FtZSBhcyBhcmcncyB0eXBl KSAqLwogCU9pZAkJCXJlc3VsdHR5cGUgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUp OwogCS8qIE9JRCBvZiBjb2xsYXRpb24gb2YgcmVzdWx0ICovCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3Jwcl9leHBsYWluLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnByX2V4cGxhaW4ub3V0CmluZGV4IGQ4MzQzYzlhY2MuLjc3YWZiNWUxZWQgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByX2V4cGxhaW4ub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByX2V4cGxhaW4ub3V0CkBAIC01Nzc1LDcgKzU3NzUs NyBAQCBFWFBMQUlOIChDT1NUUyBPRkYpIEVYRUNVVEUgcnByX25hdl9vZmZzZXRfcHJlcCgyKTsK ICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdyBBUyAoUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFO RCBVTkJPVU5ERUQgRk9MTE9XSU5HKQogICAgUGF0dGVybjogYSsiCi0gICBOYXYgTWFyayBMb29r YmFjazogcnVudGltZQorICAgTmF2IE1hcmsgTG9va2JhY2s6IDIKICAgIC0+ICBGdW5jdGlvbiBT Y2FuIG9uIGdlbmVyYXRlX3NlcmllcyBzCiAoNSByb3dzKQogCkBAIC01OTc0LDcgKzU5NzQsNyBA QCBFWFBMQUlOIChDT1NUUyBPRkYpIEVYRUNVVEUgdGVzdF9vdmVyZmxvd19sb29rYmFjayg0NjEx Njg2MDE4NDI3Mzg3OTA0LCA0NjExNjg2MAogIFdpbmRvd0FnZwogICAgV2luZG93OiB3IEFTIChS T1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpCiAgICBQYXR0 ZXJuOiBhKwotICAgTmF2IE1hcmsgTG9va2JhY2s6IHJ1bnRpbWUKKyAgIE5hdiBNYXJrIExvb2ti YWNrOiByZXRhaW4gYWxsCiAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMg cwogKDUgcm93cykKIApAQCAtNjA0Miw3ICs2MDQyLDcgQEAgRVhQTEFJTiAoQ09TVFMgT0ZGKSBF WEVDVVRFIHBfZmlyc3RfcnVudGltZSgxLCAxKTsKICAgIFdpbmRvdzogdyBBUyAoUk9XUyBCRVRX RUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HKQogICAgUGF0dGVybjogYSsK ICAgIE5hdiBNYXJrIExvb2tiYWNrOiAwCi0gICBOYXYgTWFyayBMb29rYWhlYWQ6IHJ1bnRpbWUK KyAgIE5hdiBNYXJrIExvb2thaGVhZDogMgogICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJh dGVfc2VyaWVzIHMKICg2IHJvd3MpCiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnByX2ludGVncmF0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnBy X2ludGVncmF0aW9uLm91dAppbmRleCA1NDFhZDM1ZGU0Li5lYzMzNWZkNzMzIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jwcl9pbnRlZ3JhdGlvbi5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHJfaW50ZWdyYXRpb24ub3V0CkBAIC0xMDc3LDcgKzEw NzcsNyBAQCBFWFBMQUlOIChDT1NUUyBPRkYpIEVYRUNVVEUgcnByX3ByZXYoMSk7CiAgV2luZG93 QWdnCiAgICBXaW5kb3c6IHcgQVMgKE9SREVSIEJZIGlkIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJP VyBBTkQgVU5CT1VOREVEIEZPTExPV0lORykKICAgIFBhdHRlcm46IGEgYisKLSAgIE5hdiBNYXJr IExvb2tiYWNrOiBydW50aW1lCisgICBOYXYgTWFyayBMb29rYmFjazogMQogICAgLT4gIFNvcnQK ICAgICAgICAgIFNvcnQgS2V5OiBpZAogICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHJwcl9pbnRl ZwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjN2M0NTZmYTY0Li42YWRlZThiMDE4IDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjUzOSw3ICsyNTM5LDYgQEAgUlBSTkZBQ29u dGV4dAogUlBSTkZBU3RhdGUKIFJQUk5hdkV4cHIKIFJQUk5hdktpbmQKLVJQUk5hdk9mZnNldEtp bmQKIFJQUlBhdHRlcm4KIFJQUlBhdHRlcm5FbGVtZW50CiBSUFJQYXR0ZXJuTm9kZQotLSAKMi4z NC4xCgo= --000000000000fd1a750655aa2024 Content-Type: application/octet-stream; name="v50-0001-Refactor-visit_nav_plan.partial" Content-Disposition: attachment; filename="v50-0001-Refactor-visit_nav_plan.partial" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr47axf33 RnJvbSBjYWIyOGVkNzczYzQ5YTJhYWM1M2IwZDNlOTY4NmI2YTYwYjVjYjg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMiBKdWwgMjAyNiAxNzozNjo0OSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjUw IDEvNF0gUmVmYWN0b3IgdmlzaXRfbmF2X3BsYW4KClByZXZpb3VzbHkgdGhlIFJQUiBERUZJTkUg Y2xhdXNlIHdhcyB3YWxrZWQgdHdpY2UgZm9yIG5hdmlnYXRpb24gb2Zmc2V0czoKdmlzaXRfbmF2 X3BsYW4oKSBkaWQgc29tZXRoaW5nIHdpdGggY29uc3RhbnQgb2Zmc2V0cywgd2hpbGUgdmlzaXRf bmF2X2V4ZWMoKSBkaWQKc29tZXRoaW5nIGZvciBub24tY29uc3RhbnQgb2Zmc2V0cyBhdCBFeGVj SW5pdFdpbmRvd0FnZy4KClRoZSBvbmx5IHRoaW5nIHRoZSBwbGFubmVyIHJlYWxseSBuZWVkIHBy b2R1Y2UgaXMgdGhlIG1hdGNoX3N0YXJ0LWRlcGVuZGVuY3kKY2xhc3NpZmljYXRpb24sIGJlY2F1 c2UgYnVpbGRSUFJQYXR0ZXJuKCkgY29uc3VtZXMgaXQgdG8gZGVjaWRlIHdoZXRoZXIgY29udGV4 dAphYnNvcnB0aW9uIGlzIHNhZmUgYW5kIGJha2VzIHRoZSByZXN1bHQgaW50byB0aGUgY29tcGls ZWQgcGF0dGVybi4KCkVYUExBSU4gd2l0aG91dCBBTkFMWVpFIGFsc28gZXhlY3V0ZXMgRXhlY0lu aXRXaW5kb3dBZ2csIGNvbXB1dGluZyBib3RoCm5hdmlnYXRpb24gYW5kIGNvbXBvdW5kIG9mZnNl dHMgdGhlcmUgaXMgc3VmZmljaWVudC4KClRoZSBwbGFuLXRpbWUgb2Zmc2V0IGZvbGRpbmcgaXMg bm90IG5lZWRlZC4gIFRoZSB0dXBsZXN0b3JlIGlzIGJ1aWx0IGF0IGV4ZWN1dG9yCmluaXQsIHNv IHRoZSB0cmltIG9mZnNldHMgb25seSBoYXZlIHRvIGJlIGtub3duIGJ5IHRoZW4sIGFuZCB2aXNp dF9uYXZfZXhlYygpCmFscmVhZHkgZXZhbHVhdGVzIGV2ZXJ5IG9mZnNldCBleHByZXNzaW9uIHRo ZXJlIChjb25zdGFudHMgaW5jbHVkZWQpLgoKU28gbmFycm93IHZpc2l0X25hdl9wbGFuKCkgKGFu ZCBjb21wdXRlX2RlZmluZV9tZXRhZGF0YSgpKSB0byB0aGF0IHNpbmdsZQpjbGFzc2lmaWNhdGlv biBwYXNzLCBhbmQgbW92ZSBhbGwgb2Zmc2V0IGNvbXB1dGF0aW9uIGludG8gZXZhbF9kZWZpbmVf b2Zmc2V0cygpCmF0IEV4ZWNJbml0V2luZG93QWdnLgoKcmVtb3ZlCnR5cGVkZWYgZW51bSBSUFJO YXZPZmZzZXRLaW5kCnsKCVJQUl9OQVZfT0ZGU0VUX0ZJWEVELAkJLyogcmVzb2x2ZWQgY29uc3Rh bnQ7IHVzZSB0aGUgb2Zmc2V0IHZhbHVlICovCglSUFJfTkFWX09GRlNFVF9ORUVEU19FVkFMLAkv KiBub24tY29uc3RhbnQgb2Zmc2V0OyBldmFsdWF0ZSBhdCBleGVjdXRvcgoJCQkJCQkJCSAqIGlu aXQgKi8KCVJQUl9OQVZfT0ZGU0VUX1JFVEFJTl9BTEwsCS8qIGNhbm5vdCBkZXRlcm1pbmU7IHJl dGFpbiBhbGwgcm93cyAobm8gdHJpbSkgKi8KfSBSUFJOYXZPZmZzZXRLaW5kOwoKcmVtb3ZlIGJl bG93IHN0cnVjdCBXaW5kb3dBZ2cgZmllbGQKewogICAgaW50NjQgICAgICAgICAgIG5hdk1heE9m ZnNldDsKCiAgICAvKiB0cnVlIGlmIEZJUlNULWJhc2VkIG5hdmlnYXRpb24gKEZJUlNULCBQUkVW X0ZJUlNULCBORVhUX0ZJUlNUKSBpcyB1c2VkICovCiAgICBib29sICAgICAgICAgICAgaGFzRmly c3ROYXY7CiAgICBpbnQ2NCAgICAgICAgICAgbmF2Rmlyc3RPZmZzZXQ7Cn0KVGhlcmUgZmllbGRz IGV4aXN0cyBpbiBzdHJ1Y3QgV2luZG93QWdnU3RhdGUgYWxzby4KCkJhc2VkIG9uIGh0dHBzOi8v Z2l0aHViLmNvbS9hc3NhbTI1OC01ODkyL3Bvc3RncmVzL2NvbW1pdHMvUlBSCi0tLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAgICAgIHwgIDY5ICstLS0tCiBzcmMv YmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMgICAgICAgICAgfCAgOTAgKysrLS0tCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgICAgICAgfCAyOTIgKystLS0t LS0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAg ICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgICAg ICB8ICAxNSAtCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAgICAg fCAgMjEgLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByX2V4cGxhaW4ub3V0ICAgICB8 ICAgNiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHJfaW50ZWdyYXRpb24ub3V0IHwg ICAyICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAg IDEgLQogOSBmaWxlcyBjaGFuZ2VkLCA4NyBpbnNlcnRpb25zKCspLCA0MTQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGE1ZDI3MmI2MzIuLmM3YzJkNzFiYzcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKQEAgLTMyMTIsMTEgKzMyMTIsNiBAQCBzaG93X3dpbmRvd19kZWYo V2luZG93QWdnU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLCBFeHBsYWluU3RhdGUg KmVzKQogCS8qIFNob3cgUm93IFBhdHRlcm4gUmVjb2duaXRpb24gcGF0dGVybiBpZiBwcmVzZW50 ICovCiAJaWYgKHdhZ2ctPnJwUGF0dGVybiAhPSBOVUxMKQogCXsKLQkJUlBSTmF2T2Zmc2V0S2lu ZCBtYXhLaW5kID0gd2FnZy0+bmF2TWF4T2Zmc2V0S2luZDsKLQkJaW50NjQJCW1heE9mZnNldCA9 IHdhZ2ctPm5hdk1heE9mZnNldDsKLQkJUlBSTmF2T2Zmc2V0S2luZCBmaXJzdEtpbmQgPSB3YWdn LT5uYXZGaXJzdE9mZnNldEtpbmQ7Ci0JCWludDY0CQlmaXJzdE9mZnNldCA9IHdhZ2ctPm5hdkZp cnN0T2Zmc2V0OwotCiAJCWNoYXIJICAgKnBhdHRlcm5TdHIgPSBkZXBhcnNlX3Jwcl9wYXR0ZXJu KHdhZ2ctPnJwUGF0dGVybik7CiAKIAkJRXhwbGFpblByb3BlcnR5VGV4dCgiUGF0dGVybiIsIHBh dHRlcm5TdHIsIGVzKTsKQEAgLTMyMjQsNTggKzMyMTksMjQgQEAgc2hvd193aW5kb3dfZGVmKFdp bmRvd0FnZ1N0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywgRXhwbGFpblN0YXRlICpl cykKIAkJcGZyZWUocGF0dGVyblN0cik7CiAKIAkJLyoKLQkJICogU2hvdyBuYXZpZ2F0aW9uIG9m ZnNldHMgZm9yIHR1cGxlc3RvcmUgdHJpbS4gIEZvciBFWFBMQUlOIEFOQUxZWkUsCi0JCSAqIHVz ZSB0aGUgZXhlY3V0b3ItcmVzb2x2ZWQgdmFsdWVzICh3aGljaCBtYXkgZGlmZmVyIGZyb20gdGhl IHBsYW4KLQkJICogd2hlbiBORUVEU19FVkFMIHdhcyByZXNvbHZlZCB0byBGSVhFRCBvciBSRVRB SU5fQUxMIGF0IGluaXQpLgorCQkgKiBOYXZpZ2F0aW9uIG9mZnNldHMgZm9yIHR1cGxlc3RvcmUg dHJpbSBhcmUgcmVzb2x2ZWQgYXQgZXhlY3V0b3IKKwkJICogaW5pdCwgd2hpY2ggcnVucyBldmVu IGZvciBwbGFpbiBFWFBMQUlOLCBzbyByZWFkIHRoZSByZXNvbHZlZAorCQkgKiB2YWx1ZXMgZnJv bSB0aGUgcGxhbnN0YXRlLiAgbmF2TWF4T2Zmc2V0IDwgMCBpcyB0aGUgcmV0YWluLWFsbAorCQkg KiBzZW50aW5lbCAodHJpbSBkaXNhYmxlZCkuCiAJCSAqLwotCQlpZiAoZXMtPmFuYWx5emUpCi0J CXsKLQkJCW1heEtpbmQgPSBwbGFuc3RhdGUtPm5hdk1heE9mZnNldEtpbmQ7Ci0JCQltYXhPZmZz ZXQgPSBwbGFuc3RhdGUtPm5hdk1heE9mZnNldDsKLQkJCWZpcnN0S2luZCA9IHBsYW5zdGF0ZS0+ bmF2Rmlyc3RPZmZzZXRLaW5kOwotCQkJZmlyc3RPZmZzZXQgPSBwbGFuc3RhdGUtPm5hdkZpcnN0 T2Zmc2V0OwotCQl9Ci0KLQkJc3dpdGNoIChtYXhLaW5kKQotCQl7Ci0JCQljYXNlIFJQUl9OQVZf T0ZGU0VUX05FRURTX0VWQUw6Ci0JCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiTmF2IE1hcmsgTG9v a2JhY2siLCAicnVudGltZSIsIGVzKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgUlBSX05BVl9PRkZT RVRfUkVUQUlOX0FMTDoKLQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJOYXYgTWFyayBMb29rYmFj ayIsICJyZXRhaW4gYWxsIiwgZXMpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBSUFJfTkFWX09GRlNF VF9GSVhFRDoKLQkJCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJOYXYgTWFyayBMb29rYmFjayIs IE5VTEwsCi0JCQkJCQkJCQkgICBtYXhPZmZzZXQsIGVzKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1 bHQ6Ci0JCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBSUFIgbmF2IG9mZnNldCBraW5kOiAl ZCIsCi0JCQkJCSBtYXhLaW5kKTsKLQkJCQlicmVhazsKLQkJfQorCQlpZiAocGxhbnN0YXRlLT5u YXZNYXhPZmZzZXQgPCAwKQorCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiTmF2IE1hcmsgTG9va2Jh Y2siLCAicmV0YWluIGFsbCIsIGVzKTsKKwkJZWxzZQorCQkJRXhwbGFpblByb3BlcnR5SW50ZWdl cigiTmF2IE1hcmsgTG9va2JhY2siLCBOVUxMLAorCQkJCQkJCQkgICBwbGFuc3RhdGUtPm5hdk1h eE9mZnNldCwgZXMpOwogCi0JCWlmICh3YWdnLT5oYXNGaXJzdE5hdikKKwkJaWYgKHBsYW5zdGF0 ZS0+aGFzRmlyc3ROYXYpCiAJCXsKLQkJCXN3aXRjaCAoZmlyc3RLaW5kKQotCQkJewotCQkJCWNh c2UgUlBSX05BVl9PRkZTRVRfTkVFRFNfRVZBTDoKLQkJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgi TmF2IE1hcmsgTG9va2FoZWFkIiwgInJ1bnRpbWUiLAotCQkJCQkJCQkJCWVzKTsKLQkJCQkJYnJl YWs7Ci0JCQkJY2FzZSBSUFJfTkFWX09GRlNFVF9GSVhFRDoKLQkJCQkJaWYgKGZpcnN0T2Zmc2V0 ID09IFBHX0lOVDY0X01BWCkKLQkJCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIk5hdiBNYXJrIExv b2thaGVhZCIsICJpbmZpbml0ZSIsCi0JCQkJCQkJCQkJCWVzKTsKLQkJCQkJZWxzZQotCQkJCQkJ RXhwbGFpblByb3BlcnR5SW50ZWdlcigiTmF2IE1hcmsgTG9va2FoZWFkIiwgTlVMTCwKLQkJCQkJ CQkJCQkJICAgZmlyc3RPZmZzZXQsIGVzKTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJ CQkJLyogUlBSX05BVl9PRkZTRVRfUkVUQUlOX0FMTCBpcyBsb29rYmFjay1vbmx5LCBuZXZlciBo ZXJlICovCi0JCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgUlBSIG5hdiBvZmZzZXQga2lu ZDogJWQiLAotCQkJCQkJIGZpcnN0S2luZCk7Ci0JCQkJCWJyZWFrOwotCQkJfQorCQkJaWYgKHBs YW5zdGF0ZS0+bmF2Rmlyc3RPZmZzZXQgPT0gUEdfSU5UNjRfTUFYKQorCQkJCUV4cGxhaW5Qcm9w ZXJ0eVRleHQoIk5hdiBNYXJrIExvb2thaGVhZCIsICJpbmZpbml0ZSIsIGVzKTsKKwkJCWVsc2UK KwkJCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJOYXYgTWFyayBMb29rYWhlYWQiLCBOVUxMLAor CQkJCQkJCQkJICAgcGxhbnN0YXRlLT5uYXZGaXJzdE9mZnNldCwgZXMpOwogCQl9CiAJfQogfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCmluZGV4IGU0ZTk3YTZlZDkuLjg5OTUzMjk5 NDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYworKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMKQEAgLTEyNjEsMTMgKzEyNjEs MTMgQEAgcHJlcGFyZV90dXBsZXN0b3JlKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSkKIAkJLyoK IAkJICogQWxsb2NhdGUgbWFyayBhbmQgcmVhZCBwb2ludGVycyBmb3IgUlBSIG5hdmlnYXRpb24u CiAJCSAqCi0JCSAqIElmIG5hdk1heE9mZnNldEtpbmQgPT0gUlBSX05BVl9PRkZTRVRfRklYRUQs IHdlIGFkdmFuY2UgdGhlIG1hcmsKLQkJICogYmFzZWQgb24gKGN1cnJlbnRwb3MgLSBuYXZNYXhP ZmZzZXQpIGFuZCBvcHRpb25hbGx5CisJCSAqIElmIG5hdk1heE9mZnNldCBpcyBub24tbmVnYXRp dmUsIHdlIGFkdmFuY2UgdGhlIG1hcmsgYmFzZWQgb24KKwkJICogKGN1cnJlbnRwb3MgLSBuYXZN YXhPZmZzZXQpIGFuZCBvcHRpb25hbGx5CiAJCSAqIChuZmFDb250ZXh0LT5tYXRjaFN0YXJ0Um93 ICsgbmF2Rmlyc3RPZmZzZXQpLCBhbGxvd2luZwogCQkgKiB0dXBsZXN0b3JlX3RyaW0oKSB0byBm cmVlIHJvd3MgdGhhdCBhcmUgbm8gbG9uZ2VyIHJlYWNoYWJsZS4KIAkJICoKLQkJICogUlBSX05B Vl9PRkZTRVRfTkVFRFNfRVZBTCBpcyByZXNvbHZlZCBhdCBleGVjdXRvciBpbml0OyBieSB0aGlz Ci0JCSAqIHBvaW50IGl0IGlzIGVpdGhlciBGSVhFRCBvciBSRVRBSU5fQUxMLgorCQkgKiB0aGUg b2Zmc2V0IGlzIHJlc29sdmVkIGF0IGV4ZWN1dG9yIGluaXQ7IGJ5IHRoaXMgcG9pbnQgaXQgaXMg ZWl0aGVyCisJCSAqIEZJWEVEIG9yIFJFVEFJTl9BTEwuCiAJCSAqLwogCQl3aW5zdGF0ZS0+bmF2 X3dpbm9iai0+bWFya3B0ciA9CiAJCQl0dXBsZXN0b3JlX2FsbG9jX3JlYWRfcG9pbnRlcih3aW5z dGF0ZS0+YnVmZmVyLCAwKTsKQEAgLTMwMzcsMTIgKzMwMzcsNyBAQCBFeGVjSW5pdFdpbmRvd0Fn ZyhXaW5kb3dBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCXdpbnN0YXRl LT5ycFNraXBUbyA9IG5vZGUtPnJwU2tpcFRvOwogCS8qIFNldCB1cCByb3cgcGF0dGVybiByZWNv Z25pdGlvbiBQQVRURVJOIGNsYXVzZSAoY29tcGlsZWQgTkZBKSAqLwogCXdpbnN0YXRlLT5ycFBh dHRlcm4gPSBub2RlLT5ycFBhdHRlcm47Ci0JLyogU2V0IHVwIG5hdiBvZmZzZXRzIGZvciB0dXBs ZXN0b3JlIHRyaW07IHJlc29sdmUgYW55IE5FRURTX0VWQUwga2luZHMgKi8KLQl3aW5zdGF0ZS0+ bmF2TWF4T2Zmc2V0S2luZCA9IG5vZGUtPm5hdk1heE9mZnNldEtpbmQ7Ci0Jd2luc3RhdGUtPm5h dk1heE9mZnNldCA9IG5vZGUtPm5hdk1heE9mZnNldDsKLQl3aW5zdGF0ZS0+aGFzRmlyc3ROYXYg PSBub2RlLT5oYXNGaXJzdE5hdjsKLQl3aW5zdGF0ZS0+bmF2Rmlyc3RPZmZzZXRLaW5kID0gbm9k ZS0+bmF2Rmlyc3RPZmZzZXRLaW5kOwotCXdpbnN0YXRlLT5uYXZGaXJzdE9mZnNldCA9IG5vZGUt Pm5hdkZpcnN0T2Zmc2V0OworCS8qIFJlc29sdmUgbmF2IG9mZnNldHMgZm9yIHR1cGxlc3RvcmUg dHJpbSBmcm9tIHRoZSBERUZJTkUgY2xhdXNlICovCiAJZXZhbF9kZWZpbmVfb2Zmc2V0cyh3aW5z dGF0ZSwgbm9kZS0+ZGVmaW5lQ2xhdXNlKTsKIAogCS8qIENvcHkgbWF0Y2hfc3RhcnQgZGVwZW5k ZW5jeSBiaXRtYXBzZXQgZm9yIHBlci1jb250ZXh0IGV2YWx1YXRpb24gKi8KQEAgLTQwMjgsNiAr NDAyMyw3IEBAIHR5cGVkZWYgc3RydWN0CiAJYm9vbAkJbWF4T3ZlcmZsb3c7CS8qIHRydWUgaWYg YmFja3dhcmQtcmVhY2ggb3ZlcmZsb3cgZGV0ZWN0ZWQgKi8KIAlpbnQ2NAkJbWluRmlyc3RPZmZz ZXQ7IC8qIG1pbiBmb3J3YXJkLWZyb20tbWF0Y2hfc3RhcnQgb2Zmc2V0OyBtYXkgYmUKIAkJCQkJ CQkJICogbmVnYXRpdmUgKFBSRVZfRklSU1Q6IGlubmVyIC0gb3V0ZXIgPCAwKSAqLworCWJvb2wJ CWhhc0ZpcnN0OwkJLyogYW55IEZJUlNULWJhc2VkIG5hdiBmb3VuZCAqLwogfSBFdmFsRGVmaW5l T2Zmc2V0c0NvbnRleHQ7CiAKIC8qCkBAIC00MTE1LDYgKzQxMTEsOSBAQCB2aXNpdF9uYXZfZXhl YyhOYXZUcmF2ZXJzYWwgKnQsIFJQUk5hdkV4cHIgKm5hdikKIAogCQlyZWFjaCA9IGV2YWxfbmF2 X29mZnNldF9oZWxwZXIoY29udGV4dC0+d2luc3RhdGUsCiAJCQkJCQkJCQkgICBuYXYtPm9mZnNl dF9hcmcsIDApOworCisJCWNvbnRleHQtPmhhc0ZpcnN0ID0gdHJ1ZTsKKwogCQljb250ZXh0LT5t aW5GaXJzdE9mZnNldCA9IE1pbihjb250ZXh0LT5taW5GaXJzdE9mZnNldCwgcmVhY2gpOwogCX0K IAllbHNlIGlmIChuYXYtPmtpbmQgPT0gUlBSX05BVl9QUkVWX0ZJUlNUIHx8CkBAIC00MTQ0LDM5 ICs0MTQzLDQ1IEBAIHZpc2l0X25hdl9leGVjKE5hdlRyYXZlcnNhbCAqdCwgUlBSTmF2RXhwciAq bmF2KQogCQkJaWYgKHBnX2FkZF9zNjRfb3ZlcmZsb3coaW5uZXIsIG91dGVyLCAmcmVhY2gpKQog CQkJCXJlYWNoID0gUEdfSU5UNjRfTUFYOwogCQl9CisJCWNvbnRleHQtPmhhc0ZpcnN0ID0gdHJ1 ZTsKIAkJY29udGV4dC0+bWluRmlyc3RPZmZzZXQgPSBNaW4oY29udGV4dC0+bWluRmlyc3RPZmZz ZXQsIHJlYWNoKTsKIAl9CiB9CiAKIC8qCiAgKiBldmFsX2RlZmluZV9vZmZzZXRzCi0gKgkJRXZh bHVhdGUgbm9uLWNvbnN0YW50IG5hdiBvZmZzZXRzIGF0IGV4ZWN1dG9yIGluaXQgdGltZS4KKyAq CQlDb21wdXRlIG5hdmlnYXRpb24gb2Zmc2V0cyBmb3IgdHVwbGVzdG9yZSB0cmltIGZyb20gdGhl IERFRklORSBjbGF1c2UsCisgKgkJYXQgZXhlY3V0b3IgaW5pdC4KICAqCi0gKiBDYWxsZWQgd2hl biB0aGUgcGxhbm5lciBzZXQgbmF2TWF4T2Zmc2V0S2luZCBhbmQvb3IgbmF2Rmlyc3RPZmZzZXRL aW5kCi0gKiB0byBSUFJfTkFWX09GRlNFVF9ORUVEU19FVkFMIGJlY2F1c2Ugc29tZSBvZmZzZXQg Y29udGFpbnMgYSBwYXJhbWV0ZXIKLSAqIG9yIG5vbi1mb2xkYWJsZSBleHByZXNzaW9uLiAgVXBk YXRlcyBvbmx5IHRoZSBmaWVsZHMgd2hvc2Uga2luZCB3YXMKLSAqIE5FRURTX0VWQUw7IEZJWEVE IGtpbmRzIGFyZSBsZWZ0IHVuY2hhbmdlZC4KKyAqIEV2YWx1YXRlcyBldmVyeSBuYXYgb2Zmc2V0 IGV4cHJlc3Npb24gKGNvbnN0YW50IG9yIG5vdCkgdmlhIHZpc2l0X25hdl9leGVjCisgKiBhbmQg c3RvcmVzIHRoZSByZXN1bHRzIGluIHRoZSBXaW5kb3dBZ2dTdGF0ZToKKyAqCSAtIG5hdk1heE9m ZnNldDogbWF4IGJhY2t3YXJkIChQUkVWL0xBU1QpIHJlYWNoOyBzZXQgdG8gLTEgKHRoZSByZXRh aW4tYWxsCisgKgkgICBzZW50aW5lbCkgb24gaW50NjQgb3ZlcmZsb3cgc28gYWR2YW5jZV9uYXZf bWFyaygpIGRpc2FibGVzIHRyaW0uCisgKgkgLSBoYXNGaXJzdE5hdiAvIG5hdkZpcnN0T2Zmc2V0 OiBmb3J3YXJkIChGSVJTVCkgcmVhY2ggZnJvbSBtYXRjaF9zdGFydDsKKyAqCSAgIFBHX0lOVDY0 X01BWCBtZWFucyB1bmJvdW5kZWQgZm9yd2FyZCByZWFjaC4KICAqCi0gKiBPbiBiYWNrd2FyZC1y ZWFjaCBvdmVyZmxvdywgc2V0cyBuYXZNYXhPZmZzZXRLaW5kIHRvCi0gKiBSUFJfTkFWX09GRlNF VF9SRVRBSU5fQUxMIHNvIHRoYXQgdHVwbGVzdG9yZSB0cmltIGlzIGRpc2FibGVkIGZvcgotICog YmFja3dhcmQgbmF2aWdhdGlvbi4KKyAqIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgZm9yIHdpbmRv d3M7IGEgbm9uLVJQUiB3aW5kb3cgaGFzIGFuIGVtcHR5IERFRklORQorICogY2xhdXNlIGFuZCBm YWxscyB0aHJvdWdoIHRvIHRoZSBkZWZhdWx0cy4KICAqLwogc3RhdGljIHZvaWQKIGV2YWxfZGVm aW5lX29mZnNldHMoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlLCBMaXN0ICpkZWZpbmVDbGF1c2Up CiB7CiAJRXZhbERlZmluZU9mZnNldHNDb250ZXh0IGN0eDsKIAlOYXZUcmF2ZXJzYWwgdHJhdjsK LQlib29sCQluZWVkc01heCA9ICh3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0S2luZCA9PSBSUFJfTkFW X09GRlNFVF9ORUVEU19FVkFMKTsKLQlib29sCQluZWVkc0ZpcnN0ID0gKHdpbnN0YXRlLT5oYXNG aXJzdE5hdiAmJgotCQkJCQkJCSAgd2luc3RhdGUtPm5hdkZpcnN0T2Zmc2V0S2luZCA9PSBSUFJf TkFWX09GRlNFVF9ORUVEU19FVkFMKTsKIAotCWlmICghbmVlZHNNYXggJiYgIW5lZWRzRmlyc3Qp CisJLyogRGVmYXVsdHM6IG5vIGJhY2t3YXJkLCBubyBGSVJTVCBuYXZpZ2F0aW9uICovCisJd2lu c3RhdGUtPm5hdk1heE9mZnNldCA9IDA7CisJd2luc3RhdGUtPmhhc0ZpcnN0TmF2ID0gZmFsc2U7 CisJd2luc3RhdGUtPm5hdkZpcnN0T2Zmc2V0ID0gMDsKKworCWlmIChkZWZpbmVDbGF1c2UgPT0g TklMKQogCQlyZXR1cm47CiAKIAljdHgud2luc3RhdGUgPSB3aW5zdGF0ZTsKIAljdHgubWF4T2Zm c2V0ID0gMDsKIAljdHgubWF4T3ZlcmZsb3cgPSBmYWxzZTsKIAljdHgubWluRmlyc3RPZmZzZXQg PSBQR19JTlQ2NF9NQVg7CisJY3R4Lmhhc0ZpcnN0ID0gZmFsc2U7CiAKIAl0cmF2LnZpc2l0ID0g dmlzaXRfbmF2X2V4ZWM7CiAJdHJhdi5kYXRhID0gJmN0eDsKQEAgLTQxODYsMjMgKzQxOTEsMjEg QEAgZXZhbF9kZWZpbmVfb2Zmc2V0cyhXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIExpc3QgKmRl ZmluZUNsYXVzZSkKIAkJbmF2X3RyYXZlcnNhbF93YWxrZXIoKE5vZGUgKikgdGUtPmV4cHIsICZ0 cmF2KTsKIAl9CiAKLQlpZiAobmVlZHNNYXgpCi0JewotCQlpZiAoY3R4Lm1heE92ZXJmbG93KQot CQl7Ci0JCQl3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0S2luZCA9IFJQUl9OQVZfT0ZGU0VUX1JFVEFJ Tl9BTEw7Ci0JCQl3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0ID0gMDsKLQkJfQotCQllbHNlCi0JCXsK LQkJCXdpbnN0YXRlLT5uYXZNYXhPZmZzZXRLaW5kID0gUlBSX05BVl9PRkZTRVRfRklYRUQ7Ci0J CQl3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0ID0gY3R4Lm1heE9mZnNldDsKLQkJfQotCX0KKwkvKgor CSAqIEJhY2t3YXJkIChQUkVWL0xBU1QpIHJlYWNoLiAgT24gaW50NjQgb3ZlcmZsb3cgdGhlIGxv b2tiYWNrIGNhbm5vdCBiZQorCSAqIGJvdW5kZWQsIHNvIHN0b3JlIHRoZSByZXRhaW4tYWxsIHNl bnRpbmVsICgtMSk7IGFkdmFuY2VfbmF2X21hcmsoKQorCSAqIHJlYWRzIGl0IHRvIGRpc2FibGUg dHVwbGVzdG9yZSB0cmltLgorCSAqLworCWlmIChjdHgubWF4T3ZlcmZsb3cpCisJCXdpbnN0YXRl LT5uYXZNYXhPZmZzZXQgPSAtMTsKKwllbHNlCisJCXdpbnN0YXRlLT5uYXZNYXhPZmZzZXQgPSBj dHgubWF4T2Zmc2V0OworCisJLyogRm9yd2FyZCAoRklSU1QpIHJlYWNoOyBuZXZlciBuZWVkcyBh IHJldGFpbi1hbGwgc2VudGluZWwgKi8KKwl3aW5zdGF0ZS0+aGFzRmlyc3ROYXYgPSBjdHguaGFz Rmlyc3Q7CiAKLQlpZiAobmVlZHNGaXJzdCkKKwlpZiAoY3R4Lmhhc0ZpcnN0KQogCXsKLQkJd2lu c3RhdGUtPm5hdkZpcnN0T2Zmc2V0S2luZCA9IFJQUl9OQVZfT0ZGU0VUX0ZJWEVEOwogCQlpZiAo Y3R4Lm1pbkZpcnN0T2Zmc2V0IDwgUEdfSU5UNjRfTUFYKQogCQkJd2luc3RhdGUtPm5hdkZpcnN0 T2Zmc2V0ID0gY3R4Lm1pbkZpcnN0T2Zmc2V0OwogCQllbHNlCkBAIC00Mzg0LDEzICs0Mzg3LDEz IEBAIGFkdmFuY2VfbmF2X21hcmsoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlLCBpbnQ2NCBjdXJy ZW50UG9zKQogCWlmICh3aW5zdGF0ZS0+bmF2X3dpbm9iaiA9PSBOVUxMKQogCQlyZXR1cm47CiAK LQkvKiBSRVRBSU5fQUxMIGRpc2FibGVzIHRyaW0gZm9yIHRoZSBiYWNrd2FyZCAoUFJFVi9MQVNU KSBkaW1lbnNpb24gKi8KLQlpZiAod2luc3RhdGUtPm5hdk1heE9mZnNldEtpbmQgPT0gUlBSX05B Vl9PRkZTRVRfUkVUQUlOX0FMTCkKKwkvKgorCSAqIG5hdk1heE9mZnNldCA8IDAgaXMgdGhlIHJl dGFpbi1hbGwgc2VudGluZWwgKGluZmluaXRlIG9mZnNldCk6IHRyaW0gaXMKKwkgKiBkaXNhYmxl ZAorCSAqLworCWlmICh3aW5zdGF0ZS0+bmF2TWF4T2Zmc2V0IDwgMCkKIAkJcmV0dXJuOwogCi0J LyogbmF2TWF4IGlzIEZJWEVEIGhlcmU6IE5FRURTX0VWQUwgcmVzb2x2ZWQsIFJFVEFJTl9BTEwg cmV0dXJuZWQgKi8KLQlBc3NlcnQod2luc3RhdGUtPm5hdk1heE9mZnNldEtpbmQgPT0gUlBSX05B Vl9PRkZTRVRfRklYRUQpOwotCiAJaWYgKGN1cnJlbnRQb3MgPiB3aW5zdGF0ZS0+bmF2TWF4T2Zm c2V0KQogCQluYXZtYXJrcG9zID0gY3VycmVudFBvcyAtIHdpbnN0YXRlLT5uYXZNYXhPZmZzZXQ7 CiAJZWxzZQpAQCAtNDQwMCw5ICs0NDAzLDYgQEAgYWR2YW5jZV9uYXZfbWFyayhXaW5kb3dBZ2dT dGF0ZSAqd2luc3RhdGUsIGludDY0IGN1cnJlbnRQb3MpCiAJewogCQlpbnQ2NAkJZmlyc3RyZWFj aDsKIAotCQkvKiBuYXZGaXJzdCBpcyBhbHdheXMgRklYRUQ7IGl0IG5ldmVyIHRha2VzIFJFVEFJ Tl9BTEwgKi8KLQkJQXNzZXJ0KHdpbnN0YXRlLT5uYXZGaXJzdE9mZnNldEtpbmQgPT0gUlBSX05B Vl9PRkZTRVRfRklYRUQpOwotCiAJCS8qCiAJCSAqIEhlYWQgY29udGV4dCBoYXMgdGhlIHNtYWxs ZXN0IG1hdGNoU3RhcnRSb3cgKGNvbnRleHRzIGFwcGVuZGVkIGluCiAJCSAqIG5vbmRlY3JlYXNp bmcgb3JkZXIpLCBzbyBib3VuZGluZyBieSBpdCBjb3ZlcnMgZXZlcnkgRklSU1QgcmVhY2guCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggZDg2MGZiOTcxMS4uODE0 NmFkMTA3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMjkz LDkgKzI5Myw2IEBAIHN0YXRpYyBXaW5kb3dBZ2cgKm1ha2Vfd2luZG93YWdnKExpc3QgKnRsaXN0 LCBXaW5kb3dDbGF1c2UgKndjLAogCQkJCQkJCQkgTGlzdCAqcnVuQ29uZGl0aW9uLAogCQkJCQkJ CQkgUlBSUGF0dGVybiAqY29tcGlsZWRQYXR0ZXJuLAogCQkJCQkJCQkgQml0bWFwc2V0ICpkZWZp bmVNYXRjaFN0YXJ0RGVwZW5kZW50LAotCQkJCQkJCQkgUlBSTmF2T2Zmc2V0S2luZCBuYXZNYXhP ZmZzZXRLaW5kLCBpbnQ2NCBuYXZNYXhPZmZzZXQsCi0JCQkJCQkJCSBib29sIGhhc0ZpcnN0TmF2 LAotCQkJCQkJCQkgUlBSTmF2T2Zmc2V0S2luZCBuYXZGaXJzdE9mZnNldEtpbmQsIGludDY0IG5h dkZpcnN0T2Zmc2V0LAogCQkJCQkJCQkgTGlzdCAqcXVhbCwgYm9vbCB0b3BXaW5kb3csCiAJCQkJ CQkJCSBQbGFuICpsZWZ0dHJlZSk7CiBzdGF0aWMgR3JvdXAgKm1ha2VfZ3JvdXAoTGlzdCAqdGxp c3QsIExpc3QgKnF1YWwsIGludCBudW1Hcm91cENvbHMsCkBAIC0yNDc4LDcyICsyNDc1LDI1IEBA IGNyZWF0ZV9taW5tYXhhZ2dfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWluTWF4QWdnUGF0aCAq YmVzdF9wYXRoKQogICoKICAqIFRoZSBkcml2ZXIgc2V0cyBjdXJWYXJJZHggdG8gdGhlIGluZGV4 IG9mIHRoZSB2YXJpYWJsZSBiZWluZyB3YWxrZWQKICAqIGJlZm9yZSBlYWNoIGludm9jYXRpb247 IHRoZSB3YWxrZXIgdXNlcyBpdCB0byBwb3B1bGF0ZSBtYXRjaFN0YXJ0RGVwZW5kZW50LgorICoK KyAqIFhYWDogVE9ETywgdGhlIGFib3ZlIGNvbW1lbnRzIG5lZWQgY2hhbmdlLgogICovCiB0eXBl ZGVmIHN0cnVjdCBEZWZpbmVNZXRhZGF0YUNvbnRleHQKIHsKLQlpbnQ2NAkJbWF4T2Zmc2V0OwkJ LyogbWF4IFBSRVYvTEFTVCBiYWNrd2FyZCBvZmZzZXQgKD49IDApICovCi0JYm9vbAkJbWF4TmVl ZHNFdmFsOwkvKiBub24tY29uc3RhbnQgUFJFVi9MQVNUIG9mZnNldCBmb3VuZCAqLwotCWJvb2wJ CW1heE92ZXJmbG93OwkvKiBjb25zdGFudCBvZmZzZXQgb3ZlcmZsb3cgZGV0ZWN0ZWQgKi8KLQlp bnQ2NAkJZmlyc3RPZmZzZXQ7CS8qIG1pbiBGSVJTVCBvZmZzZXQgKG1heSBiZSBuZWdhdGl2ZSBm b3IKLQkJCQkJCQkJICogUFJFVl9GSVJTVCkgKi8KLQlib29sCQloYXNGaXJzdDsJCS8qIGFueSBG SVJTVCBub2RlIGZvdW5kICovCi0JYm9vbAkJZmlyc3ROZWVkc0V2YWw7IC8qIG5vbi1jb25zdGFu dCBGSVJTVCBvZmZzZXQgZm91bmQgKi8KIAlpbnQJCQljdXJWYXJJZHg7CQkvKiBERUZJTkUgdmFy aWFibGUgY3VycmVudGx5IGJlaW5nIHdhbGtlZCAqLwogCUJpdG1hcHNldCAgKm1hdGNoU3RhcnRE ZXBlbmRlbnQ7CS8qIHZhcmlhYmxlcyB0aGF0IGRlcGVuZCBvbgogCQkJCQkJCQkJCSAqIG1hdGNo X3N0YXJ0ICovCiB9IERlZmluZU1ldGFkYXRhQ29udGV4dDsKIAotLyoKLSAqIEhlbHBlcjogZXh0 cmFjdCBjb25zdGFudCBvZmZzZXQgZnJvbSBhbiBleHByZXNzaW9uLCBoYW5kbGluZyBOVUxML25l Z2F0aXZlLgotICogSWYgZXhwciBpcyBOVUxMLCByZXR1cm5zIGRlZmF1bHRPZmZzZXQuCi0gKiBS ZXR1cm5zIHRydWUgaWYgY29uc3RhbnQsIGZhbHNlIGlmIG5vbi1jb25zdGFudCAoUGFyYW0sIGNh c3QsIGV0Yy4pLgotICovCi1zdGF0aWMgYm9vbAotZXh0cmFjdF9jb25zdF9vZmZzZXQoRXhwciAq ZXhwciwgaW50NjQgZGVmYXVsdE9mZnNldCwgaW50NjQgKnJlc3VsdCkKLXsKLQlpZiAoZXhwciA9 PSBOVUxMKQotCXsKLQkJKnJlc3VsdCA9IGRlZmF1bHRPZmZzZXQ7Ci0JCXJldHVybiB0cnVlOwot CX0KLQotCWlmIChJc0EoZXhwciwgQ29uc3QpKQotCXsKLQkJQ29uc3QJICAgKmMgPSAoQ29uc3Qg KikgZXhwcjsKLQotCQlpZiAoYy0+Y29uc3Rpc251bGwpCi0JCQkqcmVzdWx0ID0gMDsJCS8qIHJ1 bnRpbWUgZXJyb3I7IHNhZmUgcGxhY2Vob2xkZXIgKi8KLQkJZWxzZQotCQl7Ci0JCQkqcmVzdWx0 ID0gRGF0dW1HZXRJbnQ2NChjLT5jb25zdHZhbHVlKTsKLQkJCWlmICgqcmVzdWx0IDwgMCkKLQkJ CQkqcmVzdWx0ID0gMDsJLyogcnVudGltZSBlcnJvcjsgc2FmZSBwbGFjZWhvbGRlciAqLwotCQl9 Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsJCQkJLyogbm9uLWNvbnN0YW50 ICovCi19Ci0KIC8qCiAgKiB2aXNpdF9uYXZfcGxhbgogICoJCW5hdl90cmF2ZXJzYWxfd2Fsa2Vy IGNhbGxiYWNrIChOYXZWaXNpdEZuKSBmb3IgdGhlIHBsYW5uZXIgc2lkZS4KICAqCQlBdCBlYWNo IFJQUk5hdkV4cHIgaW4gYSBERUZJTkUgZXhwcmVzc2lvbiwgY29tcHV0ZXM6CiAgKgotICoJCSAg MS4gYmFja3dhcmQgcmVhY2ggKG1heE9mZnNldCkgZm9yIHR1cGxlc3RvcmUgdHJpbToKLSAqCQkJ IC0gUFJFVih2LCBOKSwgTEFTVCh2LCBOKSAgICAgICAgICAgICAgLT4gTiAoZGVmYXVsdCAxKQot ICoJCQkgLSBjb21wb3VuZCBQUkVWX0xBU1QodiwgTiwgTSkgICAgICAgICAtPiBOICsgTSAob3Zl cmZsb3cgLT4gbWF4T3ZlcmZsb3cpCi0gKgkJCSAtIGNvbXBvdW5kIE5FWFRfTEFTVCh2LCBOLCBN KSAgICAgICAgIC0+IG1heChOIC0gTSwgMCkKLSAqCi0gKgkJICAyLiBmb3J3YXJkIHJlYWNoIChm aXJzdE9mZnNldCkgZm9yIHR1cGxlc3RvcmUgdHJpbToKLSAqCQkJIC0gRklSU1QodiwgTikgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gTiAoZGVmYXVsdCAwKQotICoJCQkgLSBjb21wb3VuZCBQ UkVWX0ZJUlNUKHYsIE4sIE0pICAgICAgICAtPiBOIC0gTSAobWF5IGJlIG5lZ2F0aXZlKQotICoJ CQkgLSBjb21wb3VuZCBORVhUX0ZJUlNUKHYsIE4sIE0pICAgICAgICAtPiBOICsgTQotICoKLSAq CQkgIDMuIHBlci12YXJpYWJsZSBtYXRjaF9zdGFydCBkZXBlbmRlbmN5IGZvciBhYnNvcnB0aW9u IHN1cHByZXNzaW9uOgotICoJCQkgb3V0ZXIgbmF2IGtpbmRzIHRoYXQgcmVhY2ggbWF0Y2hfc3Rh cnQgKEZJUlNULCBMQVNULXdpdGgtb2Zmc2V0LAotICoJCQkgUFJFVl9GSVJTVCwgTkVYVF9GSVJT VCwgUFJFVl9MQVNUL05FWFRfTEFTVC13aXRoLW9mZnNldCkgYWRkCi0gKgkJCSBjdXJWYXJJZHgg dG8gbWF0Y2hTdGFydERlcGVuZGVudC4KKyAqIHBlci12YXJpYWJsZSBtYXRjaF9zdGFydCBkZXBl bmRlbmN5IGZvciBhYnNvcnB0aW9uIHN1cHByZXNzaW9uOgorICogb3V0ZXIgbmF2IGtpbmRzIHRo YXQgcmVhY2ggbWF0Y2hfc3RhcnQgKEZJUlNULCBMQVNULXdpdGgtb2Zmc2V0LAorICogUFJFVl9G SVJTVCwgTkVYVF9GSVJTVCwgUFJFVl9MQVNUL05FWFRfTEFTVC13aXRoLW9mZnNldCkgYWRkCisg KiBjdXJWYXJJZHggdG8gbWF0Y2hTdGFydERlcGVuZGVudC4KICAqCiAgKiBDb25zdGFudCBvZmZz ZXRzIGFyZSBleHRyYWN0ZWQgdmlhIGV4dHJhY3RfY29uc3Rfb2Zmc2V0OyBub24tY29uc3RhbnQK ICAqIG9mZnNldHMgc2V0IG1heE5lZWRzRXZhbCAvIGZpcnN0TmVlZHNFdmFsIHNvIHRoZSBleGVj dXRvciBjYW4gcmVzb2x2ZQpAQCAtMjU2OCwxMzAgKzI1MTgsNiBAQCB2aXNpdF9uYXZfcGxhbihO YXZUcmF2ZXJzYWwgKnQsIFJQUk5hdkV4cHIgKm5hdikKIAlBc3NlcnQobmF2LT5jb21wb3VuZF9v ZmZzZXRfYXJnID09IE5VTEwgfHwKIAkJICAgIUlzQShuYXYtPmNvbXBvdW5kX29mZnNldF9hcmcs IFJQUk5hdkV4cHIpKTsKIAotCS8qCi0JICogU2ltcGxlIFBSRVYodiwgTikgYW5kIExBU1Qodiwg Tik6IGJhY2t3YXJkIHJlYWNoIGZyb20gY3VycmVudHBvcy4gTEFTVAotCSAqIHdpdGhvdXQgb2Zm c2V0ID0gY3VycmVudHBvcywgbm8gYmFja3dhcmQgcmVhY2guIE5FWFQ6IGZvcndhcmQgb25seSwK LQkgKiBpcnJlbGV2YW50IGZvciB0cmltLgotCSAqLwotCWlmIChuYXYtPmtpbmQgPT0gUlBSX05B Vl9QUkVWIHx8Ci0JCShuYXYtPmtpbmQgPT0gUlBSX05BVl9MQVNUICYmIG5hdi0+b2Zmc2V0X2Fy ZyAhPSBOVUxMKSkKLQl7Ci0JCWlmICghY29udGV4dC0+bWF4TmVlZHNFdmFsKQotCQl7Ci0JCQlp bnQ2NAkJb2Zmc2V0OwotCi0JCQkvKgotCQkJICogZGVmYXVsdCAxIGlzIGZvciBQUkVWOyB0aGUg Z3VhcmRlZCBMQVNUIHN1Yi1jYXNlIG5ldmVyIHVzZXMgaXQuCi0JCQkgKi8KLQkJCWlmIChleHRy YWN0X2NvbnN0X29mZnNldChuYXYtPm9mZnNldF9hcmcsIDEsICZvZmZzZXQpKQotCQkJCWNvbnRl eHQtPm1heE9mZnNldCA9IE1heChjb250ZXh0LT5tYXhPZmZzZXQsIG9mZnNldCk7Ci0JCQllbHNl Ci0JCQkJY29udGV4dC0+bWF4TmVlZHNFdmFsID0gdHJ1ZTsKLQkJfQotCX0KLQotCS8qCi0JICog U2ltcGxlIEZJUlNUKHYsIE4pOiBmb3J3YXJkIHJlYWNoIGZyb20gbWF0Y2hfc3RhcnQuIFNtYWxs ZXIgTiBtZWFucwotCSAqIG9sZGVyIHJvd3MgbmVlZGVkLgotCSAqLwotCWlmIChuYXYtPmtpbmQg PT0gUlBSX05BVl9GSVJTVCkKLQl7Ci0JCWNvbnRleHQtPmhhc0ZpcnN0ID0gdHJ1ZTsKLQotCQlp ZiAoIWNvbnRleHQtPmZpcnN0TmVlZHNFdmFsKQotCQl7Ci0JCQlpbnQ2NAkJb2Zmc2V0OwotCi0J CQlpZiAoZXh0cmFjdF9jb25zdF9vZmZzZXQobmF2LT5vZmZzZXRfYXJnLCAwLCAmb2Zmc2V0KSkK LQkJCQljb250ZXh0LT5maXJzdE9mZnNldCA9IE1pbihjb250ZXh0LT5maXJzdE9mZnNldCwgb2Zm c2V0KTsKLQkJCWVsc2UKLQkJCQljb250ZXh0LT5maXJzdE5lZWRzRXZhbCA9IHRydWU7Ci0JCX0K LQl9Ci0KLQkvKgotCSAqIENvbXBvdW5kIFBSRVZfTEFTVCAvIE5FWFRfTEFTVDogYmFzZSA9IGN1 cnJlbnRwb3MuIFBSRVZfTEFTVCh2LCBOLCBNKToKLQkgKiB0YXJnZXQgPSBjdXJyZW50cG9zIC0g TiAtIE0gLT4gbG9va2JhY2sgPSBOICsgTSBORVhUX0xBU1QodiwgTiwgTSk6Ci0JICogdGFyZ2V0 ID0gY3VycmVudHBvcyAtIE4gKyBNIC0+IGxvb2tiYWNrID0gbWF4KE4gLSBNLCAwKQotCSAqLwot CWlmIChuYXYtPmtpbmQgPT0gUlBSX05BVl9QUkVWX0xBU1QgfHwKLQkJbmF2LT5raW5kID09IFJQ Ul9OQVZfTkVYVF9MQVNUKQotCXsKLQkJaWYgKCFjb250ZXh0LT5tYXhOZWVkc0V2YWwpCi0JCXsK LQkJCWludDY0CQlpbm5lcjsKLQkJCWludDY0CQlvdXRlcjsKLQkJCWludDY0CQlyZWFjaDsKLQot CQkJaWYgKGV4dHJhY3RfY29uc3Rfb2Zmc2V0KG5hdi0+b2Zmc2V0X2FyZywgMCwgJmlubmVyKSAm JgotCQkJCWV4dHJhY3RfY29uc3Rfb2Zmc2V0KG5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZywgMSwg Jm91dGVyKSkKLQkJCXsKLQkJCQlpZiAobmF2LT5raW5kID09IFJQUl9OQVZfUFJFVl9MQVNUKQot CQkJCXsKLQkJCQkJaWYgKHBnX2FkZF9zNjRfb3ZlcmZsb3coaW5uZXIsIG91dGVyLCAmcmVhY2gp KQotCQkJCQkJY29udGV4dC0+bWF4T3ZlcmZsb3cgPSB0cnVlOwotCQkJCQllbHNlCi0JCQkJCQlj b250ZXh0LT5tYXhPZmZzZXQgPSBNYXgoY29udGV4dC0+bWF4T2Zmc2V0LCByZWFjaCk7Ci0JCQkJ fQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXJlYWNoID0gTWF4KGlubmVyIC0gb3V0ZXIsIDApOwot CQkJCQljb250ZXh0LT5tYXhPZmZzZXQgPSBNYXgoY29udGV4dC0+bWF4T2Zmc2V0LCByZWFjaCk7 Ci0JCQkJfQotCQkJfQotCQkJZWxzZQotCQkJCWNvbnRleHQtPm1heE5lZWRzRXZhbCA9IHRydWU7 Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIENvbXBvdW5kIFBSRVZfRklSU1QgLyBORVhUX0ZJUlNUOiBi YXNlID0gbWF0Y2hfc3RhcnQuIFBSRVZfRklSU1QodiwgTiwKLQkgKiBNKTogdGFyZ2V0ID0gbWF0 Y2hfc3RhcnQgKyBOIC0gTSBORVhUX0ZJUlNUKHYsIE4sIE0pOiB0YXJnZXQgPQotCSAqIG1hdGNo X3N0YXJ0ICsgTiArIE0gVGhlIGNvbWJpbmVkIG9mZnNldCAoTisvLU0pIGZyb20gbWF0Y2hfc3Rh cnQgY2FuIGJlCi0JICogbmVnYXRpdmUsIG1lYW5pbmcgcm93cyBiZWZvcmUgbWF0Y2hfc3RhcnQg YXJlIG5lZWRlZC4KLQkgKi8KLQlpZiAobmF2LT5raW5kID09IFJQUl9OQVZfUFJFVl9GSVJTVCB8 fAotCQluYXYtPmtpbmQgPT0gUlBSX05BVl9ORVhUX0ZJUlNUKQotCXsKLQkJY29udGV4dC0+aGFz Rmlyc3QgPSB0cnVlOwotCi0JCWlmICghY29udGV4dC0+Zmlyc3ROZWVkc0V2YWwpCi0JCXsKLQkJ CWludDY0CQlpbm5lcjsKLQkJCWludDY0CQlvdXRlcjsKLQkJCWludDY0CQlyZWFjaDsKLQotCQkJ aWYgKGV4dHJhY3RfY29uc3Rfb2Zmc2V0KG5hdi0+b2Zmc2V0X2FyZywgMCwgJmlubmVyKSAmJgot CQkJCWV4dHJhY3RfY29uc3Rfb2Zmc2V0KG5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZywgMSwgJm91 dGVyKSkKLQkJCXsKLQkJCQlpZiAobmF2LT5raW5kID09IFJQUl9OQVZfUFJFVl9GSVJTVCkKLQkJ CQl7Ci0JCQkJCS8qCi0JCQkJCSAqIHJlYWNoID0gaW5uZXIgLSBvdXRlci4gIEJvdGggYXJlIG5v bi1uZWdhdGl2ZSwgc28gdGhlCi0JCQkJCSAqIHJlc3VsdCA+PSAtUEdfSU5UNjRfTUFYLCB3aGlj aCBjYW5ub3QgdW5kZXJmbG93IGludDY0LgotCQkJCQkgKiBObyBvdmVyZmxvdyBjaGVjayBuZWVk ZWQuCi0JCQkJCSAqLwotCQkJCQlyZWFjaCA9IGlubmVyIC0gb3V0ZXI7Ci0JCQkJfQotCQkJCWVs c2UKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIE5FWFRfRklSU1Q6IHJlYWNoID0gaW5uZXIgKyBv dXRlci4gIFRoaXMgY2FuIG92ZXJmbG93LAotCQkJCQkgKiBidXQgdGhlIHJlc3VsdCBpcyBhbHdh eXMgPj0gMCwgc28gaXQgbmV2ZXIgdXBkYXRlcwotCQkJCQkgKiBmaXJzdE9mZnNldCAod2hpY2gg dHJhY2tzIHRoZSBtaW5pbXVtKS4gIENsYW1wIHRvCi0JCQkJCSAqIFBHX0lOVDY0X01BWCBvbiBv dmVyZmxvdy4KLQkJCQkJICovCi0JCQkJCWlmIChwZ19hZGRfczY0X292ZXJmbG93KGlubmVyLCBv dXRlciwgJnJlYWNoKSkKLQkJCQkJCXJlYWNoID0gUEdfSU5UNjRfTUFYOwotCQkJCX0KLQotCQkJ CWNvbnRleHQtPmZpcnN0T2Zmc2V0ID0gTWluKGNvbnRleHQtPmZpcnN0T2Zmc2V0LCByZWFjaCk7 Ci0JCQl9Ci0JCQllbHNlCi0JCQkJY29udGV4dC0+Zmlyc3ROZWVkc0V2YWwgPSB0cnVlOwotCQl9 Ci0JfQotCiAJLyoKIAkgKiBNYXRjaC1zdGFydCBkZXBlbmRlbmN5OiBjbGFzc2lmeSB0aGUgb3V0 ZXIgbmF2IGtpbmQuICBBIGNvbnN0YW50CiAJICogTEFTVCh4LCAwKSBpcyBjb25zZXJ2YXRpdmVs eSBpbmNsdWRlZCAob2Zmc2V0X2FyZyBpcyBhIG5vbi1OVUxMIENvbnN0KSwKQEAgLTI3MTIsMzYg KzI1MzgsMjQgQEAgdmlzaXRfbmF2X3BsYW4oTmF2VHJhdmVyc2FsICp0LCBSUFJOYXZFeHByICpu YXYpCiAKIC8qCiAgKiBjb21wdXRlX2RlZmluZV9tZXRhZGF0YQotICoJCUNvbXB1dGUgbmF2aWdh dGlvbiBvZmZzZXRzIGFuZCBtYXRjaF9zdGFydCBkZXBlbmRlbmN5IGZvciB0aGUKLSAqCQlERUZJ TkUgY2xhdXNlIGluIGEgc2luZ2xlIHBhc3MgcGVyIHZhcmlhYmxlLgorICoJCUNsYXNzaWZ5IHdo aWNoIERFRklORSB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBtYXRjaCBzdGFydC4KKyAqCisgKiBX YWxrcyBlYWNoIERFRklORSB2YXJpYWJsZSBleHByZXNzaW9uIG9uY2UgYW5kIHJldHVybnMgdGhl IHNldCBvZiB2YXJpYWJsZQorICogaW5kaWNlcyB3aG9zZSBuYXZpZ2F0aW9uIHJlYWNoZXMgbWF0 Y2hfc3RhcnQgKEZJUlNULCBMQVNULXdpdGgtb2Zmc2V0LCBvcgorICogY29tcG91bmQgUFJFVl9G SVJTVC9ORVhUX0ZJUlNUL1BSRVZfTEFTVC9ORVhUX0xBU1Qtd2l0aC1vZmZzZXQpLiAgU3VjaAor ICogdmFyaWFibGVzIHJlcXVpcmUgcGVyLWNvbnRleHQgcmUtZXZhbHVhdGlvbiBkdXJpbmcgTkZB IHByb2Nlc3NpbmcsIGFuZAorICogdGhlaXIgcHJlc2VuY2UgZGlzcXVhbGlmaWVzIHRoZSBwYXR0 ZXJuIGZyb20gY29udGV4dCBhYnNvcnB0aW9uLgogICoKLSAqIFdhbGtzIGVhY2ggREVGSU5FIHZh cmlhYmxlIGV4cHJlc3Npb24gb25jZSwgY29tcHV0aW5nOgotICogICAtIG1heE9mZnNldDogbWF4 IGJhY2t3YXJkIHJlYWNoIGZyb20gUFJFViwgTEFTVC13aXRoLW9mZnNldCwKLSAqICAgICBjb21w b3VuZCBQUkVWX0xBU1QvTkVYVF9MQVNUCi0gKiAgIC0gaGFzRmlyc3QvZmlyc3RPZmZzZXQ6IG1p biBmb3J3YXJkLWZyb20tbWF0Y2gtc3RhcnQgcmVhY2ggZnJvbQotICogICAgIEZJUlNULCBjb21w b3VuZCBQUkVWX0ZJUlNUL05FWFRfRklSU1QKLSAqICAgLSBtYXRjaFN0YXJ0RGVwZW5kZW50OiBi aXRtYXBzZXQgb2YgdmFyaWFibGUgaW5kaWNlcyB3aG9zZQotICogICAgIGV4cHJlc3Npb25zIGNv bnRhaW4gbmF2aWdhdGlvbiB0aGF0IGRlcGVuZHMgb24gbWF0Y2hfc3RhcnQKLSAqICAgICAoRklS U1QsIExBU1Qtd2l0aC1vZmZzZXQsIG9yIGNvbXBvdW5kIFBSRVZfRklSU1QvTkVYVF9GSVJTVC8K LSAqICAgICBQUkVWX0xBU1QvTkVYVF9MQVNULXdpdGgtb2Zmc2V0KS4gIFN1Y2ggdmFyaWFibGVz IHJlcXVpcmUKLSAqICAgICBwZXItY29udGV4dCByZS1ldmFsdWF0aW9uIGR1cmluZyBORkEgcHJv Y2Vzc2luZy4KKyAqIE5hdmlnYXRpb24gb2Zmc2V0cyBmb3IgdHVwbGVzdG9yZSB0cmltIGFyZSBu b3QgY29tcHV0ZWQgaGVyZTsgdGhleSBhcmUKKyAqIHJlc29sdmVkIGF0IGV4ZWN1dG9yIGluaXQg KGV2YWxfZGVmaW5lX29mZnNldHMpLCB3aGljaCBjYW4gZXZhbHVhdGUKKyAqIG5vbi1jb25zdGFu dCBvZmZzZXRzIHRoYXQgdGhlIHBsYW5uZXIgY2Fubm90IGZvbGQuCiAgKi8KIHN0YXRpYyB2b2lk Ci1jb21wdXRlX2RlZmluZV9tZXRhZGF0YShMaXN0ICpkZWZpbmVDbGF1c2UsCi0JCQkJCQlSUFJO YXZPZmZzZXRLaW5kICptYXhLaW5kLCBpbnQ2NCAqbWF4UmVzdWx0LAotCQkJCQkJYm9vbCAqaGFz Rmlyc3QsCi0JCQkJCQlSUFJOYXZPZmZzZXRLaW5kICpmaXJzdEtpbmQsIGludDY0ICpmaXJzdFJl c3VsdCwKLQkJCQkJCUJpdG1hcHNldCAqKm1hdGNoU3RhcnREZXBlbmRlbnQpCitjb21wdXRlX2Rl ZmluZV9tZXRhZGF0YShMaXN0ICpkZWZpbmVDbGF1c2UsIEJpdG1hcHNldCAqKm1hdGNoU3RhcnRE ZXBlbmRlbnQpCiB7CiAJRGVmaW5lTWV0YWRhdGFDb250ZXh0IGN0eDsKIAlOYXZUcmF2ZXJzYWwg dHJhdjsKIAotCWN0eC5tYXhPZmZzZXQgPSAwOwotCWN0eC5tYXhOZWVkc0V2YWwgPSBmYWxzZTsK LQljdHgubWF4T3ZlcmZsb3cgPSBmYWxzZTsKLQljdHguZmlyc3RPZmZzZXQgPSBQR19JTlQ2NF9N QVg7IC8qIHNlbnRpbmVsOiBubyBGSVJTVCBmb3VuZCB5ZXQgKi8KLQljdHguaGFzRmlyc3QgPSBm YWxzZTsKLQljdHguZmlyc3ROZWVkc0V2YWwgPSBmYWxzZTsKIAljdHguY3VyVmFySWR4ID0gMDsK IAljdHgubWF0Y2hTdGFydERlcGVuZGVudCA9IE5VTEw7CiAKQEAgLTI3NTUsNDUgKzI1NjksNiBA QCBjb21wdXRlX2RlZmluZV9tZXRhZGF0YShMaXN0ICpkZWZpbmVDbGF1c2UsCiAJfQogCiAJKm1h dGNoU3RhcnREZXBlbmRlbnQgPSBjdHgubWF0Y2hTdGFydERlcGVuZGVudDsKLQotCS8qIE1heCBi YWNrd2FyZCBvZmZzZXQgKi8KLQlpZiAoY3R4Lm1heE92ZXJmbG93KQotCXsKLQkJKm1heEtpbmQg PSBSUFJfTkFWX09GRlNFVF9SRVRBSU5fQUxMOwotCQkqbWF4UmVzdWx0ID0gMDsKLQl9Ci0JZWxz ZSBpZiAoY3R4Lm1heE5lZWRzRXZhbCkKLQl7Ci0JCSptYXhLaW5kID0gUlBSX05BVl9PRkZTRVRf TkVFRFNfRVZBTDsKLQkJKm1heFJlc3VsdCA9IDA7Ci0JfQotCWVsc2UKLQl7Ci0JCSptYXhLaW5k ID0gUlBSX05BVl9PRkZTRVRfRklYRUQ7Ci0JCSptYXhSZXN1bHQgPSBjdHgubWF4T2Zmc2V0Owot CX0KLQotCS8qIEZpcnN0IG9mZnNldCAoY2FuIGJlIG5lZ2F0aXZlIGZvciBjb21wb3VuZCBQUkVW X0ZJUlNUKSAqLwotCSpoYXNGaXJzdCA9IGN0eC5oYXNGaXJzdDsKLQlpZiAoY3R4Lmhhc0ZpcnN0 KQotCXsKLQkJaWYgKGN0eC5maXJzdE5lZWRzRXZhbCkKLQkJewotCQkJKmZpcnN0S2luZCA9IFJQ Ul9OQVZfT0ZGU0VUX05FRURTX0VWQUw7Ci0JCQkqZmlyc3RSZXN1bHQgPSAwOwotCQl9Ci0JCWVs c2UKLQkJewotCQkJKmZpcnN0S2luZCA9IFJQUl9OQVZfT0ZGU0VUX0ZJWEVEOwotCQkJKmZpcnN0 UmVzdWx0ID0gY3R4LmZpcnN0T2Zmc2V0OyAvKiBtYXkgYmUgbmVnYXRpdmU7IFBHX0lOVDY0X01B WAotCQkJCQkJCQkJCQkgKiBpZiBvdmVyZmxvd2VkICovCi0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJ KmZpcnN0S2luZCA9IFJQUl9OQVZfT0ZGU0VUX0ZJWEVEOwotCQkqZmlyc3RSZXN1bHQgPSAwOwot CX0KIH0KIAogLyoKQEAgLTI4MjIsMTIgKzI1OTcsNiBAQCBjcmVhdGVfd2luZG93YWdnX3BsYW4o UGxhbm5lckluZm8gKnJvb3QsIFdpbmRvd0FnZ1BhdGggKmJlc3RfcGF0aCkKIAlMaXN0Q2VsbCAg ICpsYzsKIAlSUFJQYXR0ZXJuICpjb21waWxlZFBhdHRlcm4gPSBOVUxMOwogCUJpdG1hcHNldCAg Km1hdGNoU3RhcnREZXBlbmRlbnQgPSBOVUxMOwotCVJQUk5hdk9mZnNldEtpbmQgbmF2TWF4T2Zm c2V0S2luZCA9IFJQUl9OQVZfT0ZGU0VUX0ZJWEVEOwotCWludDY0CQluYXZNYXhPZmZzZXQgPSAw OwotCWJvb2wJCWhhc0ZpcnN0TmF2ID0gZmFsc2U7Ci0JUlBSTmF2T2Zmc2V0S2luZCBuYXZGaXJz dE9mZnNldEtpbmQgPSBSUFJfTkFWX09GRlNFVF9GSVhFRDsKLQlpbnQ2NAkJbmF2Rmlyc3RPZmZz ZXQgPSAwOwotCiAKIAkvKgogCSAqIENob2ljZSBvZiB0bGlzdCBoZXJlIGlzIG1vdGl2YXRlZCBi eSB0aGUgZmFjdCB0aGF0IFdpbmRvd0FnZyB3aWxsIGJlCkBAIC0yODgyLDE1ICsyNjUxLDExIEBA IGNyZWF0ZV93aW5kb3dhZ2dfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgV2luZG93QWdnUGF0aCAq YmVzdF9wYXRoKQogCWlmICh3Yy0+cnBQYXR0ZXJuKQogCXsKIAkJLyoKLQkJICogV2FsayBERUZJ TkUgb25jZTogY29sbGVjdCBuYXYgb2Zmc2V0cyAoZm9yIHR1cGxlc3RvcmUgdHJpbSkgYW5kIHRo ZQotCQkgKiBiaXRtYXBzZXQgb2YgbWF0Y2hfc3RhcnQtZGVwZW5kZW50IHZhcmlhYmxlcyAoZm9y IGFic29ycHRpb24KLQkJICogc3VwcHJlc3Npb24gaW4gYnVpbGRSUFJQYXR0ZXJuKS4KKwkJICog Q2xhc3NpZnkgd2hpY2ggREVGSU5FIHZhcmlhYmxlcyBkZXBlbmQgb24gbWF0Y2hfc3RhcnQgKGZv cgorCQkgKiBhYnNvcnB0aW9uIHN1cHByZXNzaW9uIGluIGJ1aWxkUlBSUGF0dGVybikuICBOYXYg b2Zmc2V0cyBmb3IKKwkJICogdHVwbGVzdG9yZSB0cmltIGFyZSByZXNvbHZlZCBsYXRlciwgYXQg ZXhlY3V0b3IgaW5pdC4KIAkJICovCi0JCWNvbXB1dGVfZGVmaW5lX21ldGFkYXRhKHdjLT5kZWZp bmVDbGF1c2UsCi0JCQkJCQkJCSZuYXZNYXhPZmZzZXRLaW5kLCAmbmF2TWF4T2Zmc2V0LAotCQkJ CQkJCQkmaGFzRmlyc3ROYXYsCi0JCQkJCQkJCSZuYXZGaXJzdE9mZnNldEtpbmQsICZuYXZGaXJz dE9mZnNldCwKLQkJCQkJCQkJJm1hdGNoU3RhcnREZXBlbmRlbnQpOworCQljb21wdXRlX2RlZmlu ZV9tZXRhZGF0YSh3Yy0+ZGVmaW5lQ2xhdXNlLCAmbWF0Y2hTdGFydERlcGVuZGVudCk7CiAKIAkJ LyogQ29tcGlsZSBhbmQgb3B0aW1pemUgUlBSIHBhdHRlcm5zICovCiAJCWNvbXBpbGVkUGF0dGVy biA9IGJ1aWxkUlBSUGF0dGVybih3YywgIWJtc19pc19lbXB0eShtYXRjaFN0YXJ0RGVwZW5kZW50 KSk7CkBAIC0yOTEwLDExICsyNjc1LDYgQEAgY3JlYXRlX3dpbmRvd2FnZ19wbGFuKFBsYW5uZXJJ bmZvICpyb290LCBXaW5kb3dBZ2dQYXRoICpiZXN0X3BhdGgpCiAJCQkJCQkgIGJlc3RfcGF0aC0+ cnVuQ29uZGl0aW9uLAogCQkJCQkJICBjb21waWxlZFBhdHRlcm4sCiAJCQkJCQkgIG1hdGNoU3Rh cnREZXBlbmRlbnQsCi0JCQkJCQkgIG5hdk1heE9mZnNldEtpbmQsCi0JCQkJCQkgIG5hdk1heE9m ZnNldCwKLQkJCQkJCSAgaGFzRmlyc3ROYXYsCi0JCQkJCQkgIG5hdkZpcnN0T2Zmc2V0S2luZCwK LQkJCQkJCSAgbmF2Rmlyc3RPZmZzZXQsCiAJCQkJCQkgIGJlc3RfcGF0aC0+cXVhbCwKIAkJCQkJ CSAgYmVzdF9wYXRoLT50b3B3aW5kb3csCiAJCQkJCQkgIHN1YnBsYW4pOwpAQCAtNjk4OCw5ICs2 NzQ4LDYgQEAgbWFrZV93aW5kb3dhZ2coTGlzdCAqdGxpc3QsIFdpbmRvd0NsYXVzZSAqd2MsCiAJ CQkgICBMaXN0ICpydW5Db25kaXRpb24sCiAJCQkgICBSUFJQYXR0ZXJuICpjb21waWxlZFBhdHRl cm4sCiAJCQkgICBCaXRtYXBzZXQgKmRlZmluZU1hdGNoU3RhcnREZXBlbmRlbnQsCi0JCQkgICBS UFJOYXZPZmZzZXRLaW5kIG5hdk1heE9mZnNldEtpbmQsIGludDY0IG5hdk1heE9mZnNldCwKLQkJ CSAgIGJvb2wgaGFzRmlyc3ROYXYsCi0JCQkgICBSUFJOYXZPZmZzZXRLaW5kIG5hdkZpcnN0T2Zm c2V0S2luZCwgaW50NjQgbmF2Rmlyc3RPZmZzZXQsCiAJCQkgICBMaXN0ICpxdWFsLCBib29sIHRv cFdpbmRvdywgUGxhbiAqbGVmdHRyZWUpCiB7CiAJV2luZG93QWdnICAqbm9kZSA9IG1ha2VOb2Rl KFdpbmRvd0FnZyk7CkBAIC03MDI4LDEzICs2Nzg1LDYgQEAgbWFrZV93aW5kb3dhZ2coTGlzdCAq dGxpc3QsIFdpbmRvd0NsYXVzZSAqd2MsCiAJLyogU3RvcmUgcHJlLWNvbXB1dGVkIG1hdGNoX3N0 YXJ0IGRlcGVuZGVuY3kgYml0bWFwc2V0ICovCiAJbm9kZS0+ZGVmaW5lTWF0Y2hTdGFydERlcGVu ZGVudCA9IGRlZmluZU1hdGNoU3RhcnREZXBlbmRlbnQ7CiAKLQkvKiBTdG9yZSBwcmUtY29tcHV0 ZWQgbmF2IG9mZnNldHMgZm9yIHR1cGxlc3RvcmUgdHJpbSBvcHRpbWl6YXRpb24gKi8KLQlub2Rl LT5uYXZNYXhPZmZzZXRLaW5kID0gbmF2TWF4T2Zmc2V0S2luZDsKLQlub2RlLT5uYXZNYXhPZmZz ZXQgPSBuYXZNYXhPZmZzZXQ7Ci0Jbm9kZS0+aGFzRmlyc3ROYXYgPSBoYXNGaXJzdE5hdjsKLQlu b2RlLT5uYXZGaXJzdE9mZnNldEtpbmQgPSBuYXZGaXJzdE9mZnNldEtpbmQ7Ci0Jbm9kZS0+bmF2 Rmlyc3RPZmZzZXQgPSBuYXZGaXJzdE9mZnNldDsKLQogCXBsYW4tPnRhcmdldGxpc3QgPSB0bGlz dDsKIAlwbGFuLT5sZWZ0dHJlZSA9IGxlZnR0cmVlOwogCXBsYW4tPnJpZ2h0dHJlZSA9IE5VTEw7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGQ2YWM2YjIyOWMuLjFmOTUwODY0OWMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oCkBAIC0yNzI2LDEwICsyNzI2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93 QWdnU3RhdGUKIAlUdXBsZVRhYmxlU2xvdCAqdGVtcF9zbG90XzI7CiAKIAkvKiBSUFIgbmF2aWdh dGlvbiAqLwotCVJQUk5hdk9mZnNldEtpbmQgbmF2TWF4T2Zmc2V0S2luZDsJLyogc3RhdHVzIG9m IG5hdk1heE9mZnNldCAqLwotCWludDY0CQluYXZNYXhPZmZzZXQ7CS8qIG1heCBiYWNrd2FyZCBu YXYgb2Zmc2V0ICh3aGVuIEZJWEVEKSAqLworCWludDY0CQluYXZNYXhPZmZzZXQ7CS8qIG1heCBi YWNrd2FyZCBuYXYgb2Zmc2V0LCAtMSBtZWFucyBpbmZpbml0ZQorCQkJCQkJCQkgKiBvZmZzZXQs IHJldGFpbiBhbGwgKi8KIAlib29sCQloYXNGaXJzdE5hdjsJLyogRklSU1QoKSBwcmVzZW50IGlu IERFRklORSAqLwotCVJQUk5hdk9mZnNldEtpbmQgbmF2Rmlyc3RPZmZzZXRLaW5kOwkvKiBzdGF0 dXMgb2YgbmF2Rmlyc3RPZmZzZXQgKi8KIAlpbnQ2NAkJbmF2Rmlyc3RPZmZzZXQ7IC8qIG1pbiBG SVJTVCgpIG9mZnNldCAod2hlbiBGSVhFRCkgKi8KIAlzdHJ1Y3QgV2luZG93T2JqZWN0RGF0YSAq bmF2X3dpbm9iajsJLyogd2lub2JqIGZvciBSUFIgbmF2IGZldGNoICovCiAJaW50NjQJCW5hdl9z bG90X3BvczsJLyogcG9zaXRpb24gY2FjaGVkIGluIG5hdl9zbG90LCBvciAtMSAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMv cGFyc2Vub2Rlcy5oCmluZGV4IDEzMWM4ZDRjZTguLmFiNzU5NjQ3NTUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJz ZW5vZGVzLmgKQEAgLTU5NCwyMSArNTk0LDYgQEAgdHlwZWRlZiBlbnVtIFJQU2tpcFRvCiAJU1Rf UEFTVF9MQVNUX1JPVywJCQkvKiBTS0lQIFRPIFBBU1QgTEFTVCBST1cgKi8KIH0gUlBTa2lwVG87 CiAKLS8qCi0gKiBSUFJOYXZPZmZzZXRLaW5kIC0gc3RhdHVzIG9mIG5hdmlnYXRpb24gb2Zmc2V0 IGZvciB0dXBsZXN0b3JlIHRyaW0uCi0gKgotICogVGhlIHBsYW5uZXIgY29tcHV0ZXMgbmF2TWF4 T2Zmc2V0L25hdkZpcnN0T2Zmc2V0IGZvciB0dXBsZXN0b3JlIG1hcmsKLSAqIG9wdGltaXphdGlv bi4gIFRoaXMgZW51bSB0cmFja3Mgd2hldGhlciB0aGUgdmFsdWUgaXMgYSByZXNvbHZlZCBjb25z dGFudCwKLSAqIG5lZWRzIHJ1bnRpbWUgZXZhbHVhdGlvbiwgb3IgY2Fubm90IGJlIGRldGVybWlu ZWQgKHJldGFpbiBhbGwgcm93cykuCi0gKi8KLXR5cGVkZWYgZW51bSBSUFJOYXZPZmZzZXRLaW5k Ci17Ci0JUlBSX05BVl9PRkZTRVRfRklYRUQsCQkvKiByZXNvbHZlZCBjb25zdGFudDsgdXNlIHRo ZSBvZmZzZXQgdmFsdWUgKi8KLQlSUFJfTkFWX09GRlNFVF9ORUVEU19FVkFMLAkvKiBub24tY29u c3RhbnQgb2Zmc2V0OyBldmFsdWF0ZSBhdCBleGVjdXRvcgotCQkJCQkJCQkgKiBpbml0ICovCi0J UlBSX05BVl9PRkZTRVRfUkVUQUlOX0FMTCwJLyogY2Fubm90IGRldGVybWluZTsgcmV0YWluIGFs bCByb3dzIChubyB0cmltKSAqLwotfSBSUFJOYXZPZmZzZXRLaW5kOwotCiAvKgogICogUlBSUGF0 dGVybk5vZGVUeXBlIC0gUm93IFBhdHRlcm4gUmVjb2duaXRpb24gcGF0dGVybiBub2RlIHR5cGVz CiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggMmIzN2M4ZjIyNi4uYjRhMTk2ZTFmNiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGxhbm5vZGVzLmgKQEAgLTE0MTAsMjcgKzE0MTAsNiBAQCB0eXBlZGVmIHN0cnVjdCBX aW5kb3dBZ2cKIAkgKi8KIAlCaXRtYXBzZXQgICpkZWZpbmVNYXRjaFN0YXJ0RGVwZW5kZW50Owog Ci0JLyoKLQkgKiBOYXZpZ2F0aW9uIG9mZnNldCBzdGF0dXMgYW5kIHZhbHVlcyBmb3IgdHVwbGVz dG9yZSBtYXJrIG9wdGltaXphdGlvbi4KLQkgKiBTZWUgUlBSTmF2T2Zmc2V0S2luZCBpbiBub2Rl cy9wYXJzZW5vZGVzLmguCi0JICoKLQkgKiBuYXZNYXhPZmZzZXQ6IG1heGltdW0gYmFja3dhcmQg cmVhY2ggZnJvbSBjdXJyZW50cG9zIChjb250cmlidXRlZCBieQotCSAqIFBSRVYsIExBU1Qtd2l0 aC1vZmZzZXQsIGNvbXBvdW5kIFBSRVZfTEFTVC9ORVhUX0xBU1QpLiAgT25seSB2YWxpZCB3aGVu Ci0JICogbmF2TWF4T2Zmc2V0S2luZCA9PSBSUFJfTkFWX09GRlNFVF9GSVhFRC4KLQkgKgotCSAq IG5hdkZpcnN0T2Zmc2V0OiBtaW5pbXVtIGZvcndhcmQgb2Zmc2V0IGZyb20gbWF0Y2hfc3RhcnQg KGNvbnRyaWJ1dGVkIGJ5Ci0JICogRklSU1QsIGNvbXBvdW5kIFBSRVZfRklSU1QvTkVYVF9GSVJT VCkuICBDYW4gYmUgbmVnYXRpdmUgZm9yIGNvbXBvdW5kCi0JICogUFJFVl9GSVJTVC4gIE9ubHkg dmFsaWQgd2hlbiBuYXZGaXJzdE9mZnNldEtpbmQgPT0gUlBSX05BVl9PRkZTRVRfRklYRUQKLQkg KiBhbmQgaGFzRmlyc3ROYXYgPT0gdHJ1ZS4KLQkgKi8KLQlSUFJOYXZPZmZzZXRLaW5kIG5hdk1h eE9mZnNldEtpbmQ7Ci0JaW50NjQJCW5hdk1heE9mZnNldDsKLQotCS8qIHRydWUgaWYgRklSU1Qt YmFzZWQgbmF2aWdhdGlvbiAoRklSU1QsIFBSRVZfRklSU1QsIE5FWFRfRklSU1QpIGlzIHVzZWQg Ki8KLQlib29sCQloYXNGaXJzdE5hdjsKLQlSUFJOYXZPZmZzZXRLaW5kIG5hdkZpcnN0T2Zmc2V0 S2luZDsKLQlpbnQ2NAkJbmF2Rmlyc3RPZmZzZXQ7Ci0KIAkvKgogCSAqIGZhbHNlIGZvciBhbGwg YXBhcnQgZnJvbSB0aGUgV2luZG93QWdnIHRoYXQncyBjbG9zZXN0IHRvIHRoZSByb290IG9mCiAJ ICogdGhlIHBsYW4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByX2V4 cGxhaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHJfZXhwbGFpbi5vdXQKaW5k ZXggZDgzNDNjOWFjYy4uNzdhZmI1ZTFlZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ycHJfZXhwbGFpbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y cHJfZXhwbGFpbi5vdXQKQEAgLTU3NzUsNyArNTc3NSw3IEBAIEVYUExBSU4gKENPU1RTIE9GRikg RVhFQ1VURSBycHJfbmF2X29mZnNldF9wcmVwKDIpOwogIFdpbmRvd0FnZwogICAgV2luZG93OiB3 IEFTIChST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpCiAg ICBQYXR0ZXJuOiBhKyIKLSAgIE5hdiBNYXJrIExvb2tiYWNrOiBydW50aW1lCisgICBOYXYgTWFy ayBMb29rYmFjazogMgogICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIHMK ICg1IHJvd3MpCiAKQEAgLTU5NzQsNyArNTk3NCw3IEBAIEVYUExBSU4gKENPU1RTIE9GRikgRVhF Q1VURSB0ZXN0X292ZXJmbG93X2xvb2tiYWNrKDQ2MTE2ODYwMTg0MjczODc5MDQsIDQ2MTE2ODYw CiAgV2luZG93QWdnCiAgICBXaW5kb3c6IHcgQVMgKFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBB TkQgVU5CT1VOREVEIEZPTExPV0lORykKICAgIFBhdHRlcm46IGErCi0gICBOYXYgTWFyayBMb29r YmFjazogcnVudGltZQorICAgTmF2IE1hcmsgTG9va2JhY2s6IHJldGFpbiBhbGwKICAgIC0+ICBG dW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBzCiAoNSByb3dzKQogCkBAIC02MDQyLDcg KzYwNDIsNyBAQCBFWFBMQUlOIChDT1NUUyBPRkYpIEVYRUNVVEUgcF9maXJzdF9ydW50aW1lKDEs IDEpOwogICAgV2luZG93OiB3IEFTIChST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9V TkRFRCBGT0xMT1dJTkcpCiAgICBQYXR0ZXJuOiBhKwogICAgTmF2IE1hcmsgTG9va2JhY2s6IDAK LSAgIE5hdiBNYXJrIExvb2thaGVhZDogcnVudGltZQorICAgTmF2IE1hcmsgTG9va2FoZWFkOiAy CiAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgcwogKDYgcm93cykKIApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHJfaW50ZWdyYXRpb24ub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHJfaW50ZWdyYXRpb24ub3V0CmluZGV4IDU0 MWFkMzVkZTQuLmVjMzM1ZmQ3MzMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcnByX2ludGVncmF0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jw cl9pbnRlZ3JhdGlvbi5vdXQKQEAgLTEwNzcsNyArMTA3Nyw3IEBAIEVYUExBSU4gKENPU1RTIE9G RikgRVhFQ1VURSBycHJfcHJldigxKTsKICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdyBBUyAoT1JE RVIgQlkgaWQgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5H KQogICAgUGF0dGVybjogYSBiKwotICAgTmF2IE1hcmsgTG9va2JhY2s6IHJ1bnRpbWUKKyAgIE5h diBNYXJrIExvb2tiYWNrOiAxCiAgICAtPiAgU29ydAogICAgICAgICAgU29ydCBLZXk6IGlkCiAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcnByX2ludGVnCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IGM3YzQ1NmZhNjQuLjZhZGVlOGIwMTggMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CkBAIC0yNTM5LDcgKzI1MzksNiBAQCBSUFJORkFDb250ZXh0CiBSUFJORkFTdGF0ZQogUlBSTmF2 RXhwcgogUlBSTmF2S2luZAotUlBSTmF2T2Zmc2V0S2luZAogUlBSUGF0dGVybgogUlBSUGF0dGVy bkVsZW1lbnQKIFJQUlBhdHRlcm5Ob2RlCi0tIAoyLjM0LjEKCg== --000000000000fd1a750655aa2024 Content-Type: application/octet-stream; name="v50-0004-misc.partial" Content-Disposition: attachment; filename="v50-0004-misc.partial" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr47axf64 RnJvbSAyODMxNTdmMWU0N2VlYzJlNjQ2NjhmZWY2NWRiODE3NjU5OWY2OTdjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMiBKdWwgMjAyNiAyMDozODoxNyArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjUw IDQvNF0gbWlzYy4KCkJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9hc3NhbTI1OC01ODkyL3Bv c3RncmVzL2NvbW1pdHMvUlBSCi0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRl cnAuYyAgIHwgIDkgKysrKystLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5j ICAgIHwgMzUgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vY3JlYXRlcGxhbi5jIHwgIDcgKystLS0KIDMgZmlsZXMgY2hhbmdlZCwgMjcgaW5zZXJ0 aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJw LmMKaW5kZXggNWMyNmM1ZTg0OC4uMzM5NjBiNzU3ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj RXhwckludGVycC5jCkBAIC02MTc1LDggKzYxNzUsNiBAQCBFeGVjRXZhbFJQUk5hdlNldChFeHBy U3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQpCiAg KiBFdmFsdWF0ZSBSUFIgbmF2aWdhdGlvbjogcmVzdG9yZSBzbG90IHRvIG9yaWdpbmFsIHJvdy4K ICAqCiAgKiBSZXN0b3JlcyBlY29udGV4dC0+ZWN4dF9vdXRlcnR1cGxlIGZyb20gdGhlIHNhdmVk IHNsb3QgaW4gd2luc3RhdGUuCi0gKiBXaGVuIHNsb3Qgc3dhcCB3YXMgZWxpZGVkICh0YXJnZXQg PT0gY3VycmVudHBvcyksIHRoaXMgaXMgYSBoYXJtbGVzcwotICogbm8tb3Agc2luY2Ugc2F2ZWQg YW5kIGN1cnJlbnQgc2xvdHMgYXJlIGlkZW50aWNhbC4KICAqIFRoZSBjYWxsZXIgaXMgcmVzcG9u c2libGUgZm9yIHVwZGF0aW5nIGFueSBsb2NhbCBzbG90IGNhY2hlLgogICoKICAqIEZvciBwYXNz LWJ5LXJlZmVyZW5jZSByZXN1bHQgdHlwZXMsIHRoZSByZXN1bHQgZGF0dW0gcG9pbnRzIGludG8K QEAgLTYxOTIsNiArNjE5MCwxMyBAQCBFeGVjRXZhbFJQUk5hdlJlc3RvcmUoRXhwclN0YXRlICpz dGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIHsKIAlXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUgPSBv cC0+ZC5ycHJfbmF2LndpbnN0YXRlOwogCisJLyoKKwkgKiBXaGVuIHNsb3Qgc3dhcCB3YXMgZWxp ZGVkICh0YXJnZXQgPT0gY3VycmVudHBvcyksIHRoaXMgaXMgYSBoYXJtbGVzcworCSAqIG5vLW9w IHNpbmNlIHNhdmVkIGFuZCBjdXJyZW50IHNsb3RzIGFyZSBpZGVudGljYWwuCisJICovCisJaWYg KGVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPT0gd2luc3RhdGUtPm5hdl9zYXZlZF9vdXRlcnR1 cGxlKQorCQlyZXR1cm47CisKIAllY29udGV4dC0+ZWN4dF9vdXRlcnR1cGxlID0gd2luc3RhdGUt Pm5hdl9zYXZlZF9vdXRlcnR1cGxlOwogCiAJLyogU3RhYmlsaXplIHBhc3MtYnktcmVmIHJlc3Vs dCBhZ2FpbnN0IG5hdl9zbG90IHJlLWZldGNoICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlV2luZG93QWdnLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93 QWdnLmMKaW5kZXggZmRkNjlmNDk0ZS4uY2U4NzgxMWYxYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVXaW5kb3dBZ2cuYwpAQCAtMzk3OCwxOSArMzk3OCwxNiBAQCBwdXRfbm90bnVsbF9pbmZvKFdp bmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcywgaW50IGFyZ25vLCBib29sIGlzbnVsbCkKIH0K IAogLyoKLSAqIGV2YWxfbmF2X29mZnNldF9oZWxwZXIKLSAqCQlQcmUtZXZhbHVhdGUgYSBuYXZp Z2F0aW9uIG9mZnNldCBleHByZXNzaW9uIGF0IGV4ZWN1dG9yIGluaXQgdGltZSwgdG8KLSAqCQli b3VuZCBob3cgZmFyIG5hdmlnYXRpb24gY2FuIHJlYWNoICh3aGljaCBzaXplcyB0aGUgZnJhbWUg dHJpbSkuCi0gKgkJUmV0dXJucyB0aGUgb2Zmc2V0IHZhbHVlLCBvciAwIGZvciBhIE5VTEwgb3Ig bmVnYXRpdmUgb2Zmc2V0LgorICogZXZhbF9uYXZfb2Zmc2V0CisgKgkJRXZhbHVhdGUgYSByb3cg cGF0dGVybiBuYXZpZ2F0aW9uIG9mZnNldCBleHByZXNzaW9uCiAgKgotICogVGhlIG9mZnNldCBp cyBub3QgdmFsaWRhdGVkIGhlcmUuICBBIE5VTEwgb3IgbmVnYXRpdmUgdmFsdWUgaXMgY2F1Z2h0 IGxhdGVyLAotICogcGVyIHJvdywgb24gdGhlIG5hdmlnYXRpb24gcGF0aCB0aGF0IGNvbnN1bWVz IGl0IChzZWUgRUVPUF9SUFJfTkFWX1NFVCBpbgotICogZXhlY0V4cHJJbnRlcnAuYyksIHdoaWNo IGVycm9ycyBvdXQgYmVmb3JlIG5hdmlnYXRpb24gcHJvZHVjZXMgYW55IHJlc3VsdDsKLSAqIHRo ZSB0cmltIHNpemluZyBjb21wdXRlZCBmcm9tIHN1Y2ggYW4gb2Zmc2V0IGlzIHRoZXJlZm9yZSBu ZXZlciB1c2VkLCBhbmQgMAotICogaXMgcmV0dXJuZWQgYXMgYSBoYXJtbGVzcyBwbGFjZWhvbGRl ci4KKyAqIFRoZSByZXNvbHZlZCB2YWx1ZSBib3VuZHMgaG93IGZhciBuYXZpZ2F0aW9uIGNhbiBy ZWFjaCwgd2hpY2ggaW4gdHVybgorICogc2l6ZXMgdGhlIHR1cGxlc3RvcmUgdHJpbS4gIG9mZnNl dF9leHByIG1heSBiZSBlaXRoZXIgYSBzaW1wbGUgb2Zmc2V0IG9yCisgKiB0aGUgb3V0ZXIgKGNv bXBvdW5kKSBvZmZzZXQgb2YgYSBjb21wb3VuZCBuYXZpZ2F0aW9uLiAgUmV0dXJucyB0aGUgb2Zm c2V0CisgKiBhcyBhbiBpbnQ2NDsgYSBOVUxMIG9yIG5lZ2F0aXZlIHJlc3VsdCBpcyBhbiBlcnJv ciBwZXIgdGhlIFNRTCBzdGFuZGFyZC4KICAqLwogc3RhdGljIGludDY0Ci1ldmFsX25hdl9vZmZz ZXRfaGVscGVyKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSwgRXhwciAqb2Zmc2V0X2V4cHIpCitl dmFsX25hdl9vZmZzZXQoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlLCBFeHByICpvZmZzZXRfZXhw cikKIHsKIAlFeHByQ29udGV4dCAqZWNvbnRleHQgPSB3aW5zdGF0ZS0+c3MucHMucHNfRXhwckNv bnRleHQ7CiAJRXhwclN0YXRlICAqZXN0YXRlOwpAQCAtNDAzMSw3ICs0MDI4LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QKICAqIHZpc2l0X25hdl9leGVjCiAgKgkJbmF2X3RyYXZlcnNhbF93YWxrZXIgY2Fs bGJhY2sgKE5hdlZpc2l0Rm4pIGZvciB0aGUgZXhlY3V0b3Igc2lkZS4KICAqCQlBdCBlYWNoIFJQ Uk5hdkV4cHIsIGV2YWx1YXRlcyB0aGUgbmF2J3Mgb2Zmc2V0IGV4cHJlc3Npb24ocykgYXQKLSAq CQlydW50aW1lIHZpYSBldmFsX25hdl9vZmZzZXRfaGVscGVyIGFuZCBhY2N1bXVsYXRlczoKKyAq CQlydW50aW1lIHZpYSBldmFsX25hdl9vZmZzZXQgYW5kIGFjY3VtdWxhdGVzOgogICoKICAqCQkg IC0gbWF4T2Zmc2V0IChiYWNrd2FyZCByZWFjaCk6IFBSRVYsIExBU1Qtd2l0aC1vZmZzZXQsIGNv bXBvdW5kCiAgKgkJCVBSRVZfTEFTVCAoc2V0cyBtYXhPdmVyZmxvdyBvbiBpbnQ2NCBvdmVyZmxv dyksIGNvbXBvdW5kCkBAIC00MDQ5LDggKzQwNDYsOCBAQCB0eXBlZGVmIHN0cnVjdAogc3RhdGlj IHZvaWQKIHZpc2l0X25hdl9leGVjKE5hdlRyYXZlcnNhbCAqdCwgUlBSTmF2RXhwciAqbmF2KQog ewotCWludDY0CQlpbm5lciA9IDA7Ci0JaW50NjQJCW91dGVyID0gMTsKKwlpbnQ2NAkJaW5uZXI7 CisJaW50NjQJCW91dGVyOwogCiAJRXZhbERlZmluZU9mZnNldHNDb250ZXh0ICpjb250ZXh0ID0g KEV2YWxEZWZpbmVPZmZzZXRzQ29udGV4dCAqKSB0LT5kYXRhOwogCkBAIC00MDY1LDE0ICs0MDYy LDE4IEBAIHZpc2l0X25hdl9leGVjKE5hdlRyYXZlcnNhbCAqdCwgUlBSTmF2RXhwciAqbmF2KQog CQkgICAhSXNBKG5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZywgUlBSTmF2RXhwcikpOwogCiAJaWYg KG5hdi0+b2Zmc2V0X2FyZyAhPSBOVUxMKQotCQlpbm5lciA9IGV2YWxfbmF2X29mZnNldF9oZWxw ZXIoY29udGV4dC0+d2luc3RhdGUsCi0JCQkJCQkJCQkgICBuYXYtPm9mZnNldF9hcmcpOworCQlp bm5lciA9IGV2YWxfbmF2X29mZnNldChjb250ZXh0LT53aW5zdGF0ZSwKKwkJCQkJCQkJbmF2LT5v ZmZzZXRfYXJnKTsKIAllbHNlIGlmIChuYXYtPmtpbmQgPT0gUlBSX05BVl9QUkVWIHx8IG5hdi0+ a2luZCA9PSBSUFJfTkFWX05FWFQpCiAJCWlubmVyID0gMTsKKwllbHNlCisJCWlubmVyID0gMDsK IAogCWlmIChuYXYtPmNvbXBvdW5kX29mZnNldF9hcmcgIT0gTlVMTCkKLQkJb3V0ZXIgPSBldmFs X25hdl9vZmZzZXRfaGVscGVyKGNvbnRleHQtPndpbnN0YXRlLAotCQkJCQkJCQkJICAgbmF2LT5j b21wb3VuZF9vZmZzZXRfYXJnKTsKKwkJb3V0ZXIgPSBldmFsX25hdl9vZmZzZXQoY29udGV4dC0+ d2luc3RhdGUsCisJCQkJCQkJCW5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZyk7CisJZWxzZQorCQlv dXRlciA9IDE7CiAKIAluYXYtPm9mZnNldCA9IGlubmVyOwogCW5hdi0+Y29tcG91bmRfb2Zmc2V0 ID0gb3V0ZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggODE0 NmFkMTA3MC4uYzYxY2FkYWZiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBs YW4uYwpAQCAtMjQ5NSwxMSArMjQ5NSw4IEBAIHR5cGVkZWYgc3RydWN0IERlZmluZU1ldGFkYXRh Q29udGV4dAogICogUFJFVl9GSVJTVCwgTkVYVF9GSVJTVCwgUFJFVl9MQVNUL05FWFRfTEFTVC13 aXRoLW9mZnNldCkgYWRkCiAgKiBjdXJWYXJJZHggdG8gbWF0Y2hTdGFydERlcGVuZGVudC4KICAq Ci0gKiBDb25zdGFudCBvZmZzZXRzIGFyZSBleHRyYWN0ZWQgdmlhIGV4dHJhY3RfY29uc3Rfb2Zm c2V0OyBub24tY29uc3RhbnQKLSAqIG9mZnNldHMgc2V0IG1heE5lZWRzRXZhbCAvIGZpcnN0TmVl ZHNFdmFsIHNvIHRoZSBleGVjdXRvciBjYW4gcmVzb2x2ZQotICogdGhlbSBhdCBpbml0IHRpbWUg KHNlZSB2aXNpdF9uYXZfZXhlYykuICBDbGFzc2lmaWNhdGlvbiB1c2VzIG9ubHkgdGhlCi0gKiBv dXRlciBuYXYga2luZDogcGFyc2VyIG5lc3RpbmcgcmVzdHJpY3Rpb25zIHByZXZlbnQgRklSU1Qv TEFTVCBpbnNpZGUKLSAqIGEgUFJFVi9ORVhUIHZhbHVlIHN1YmV4cHJlc3Npb24uCisgKiBDbGFz c2lmaWNhdGlvbiB1c2VzIG9ubHkgdGhlIG91dGVyIG5hdiBraW5kOiBwYXJzZXIgbmVzdGluZyBy ZXN0cmljdGlvbnMKKyAqIHByZXZlbnQgRklSU1QvTEFTVCBpbnNpZGUgYSBQUkVWL05FWFQgdmFs dWUgc3ViZXhwcmVzc2lvbi4KICAqLwogc3RhdGljIHZvaWQKIHZpc2l0X25hdl9wbGFuKE5hdlRy YXZlcnNhbCAqdCwgUlBSTmF2RXhwciAqbmF2KQotLSAKMi4zNC4xCgo= --000000000000fd1a750655aa2024 Content-Type: application/octet-stream; name="v50-0003-no-need-compile-and-evaluate-offset-in-expression-evaluation.partial" Content-Disposition: attachment; filename="v50-0003-no-need-compile-and-evaluate-offset-in-expression-evaluation.partial" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr47axev1 RnJvbSA2Yzg3N2E0MjNkMDRlN2Q5YjY0MWI3YWVlODc3YjdhYTVhYWRiMjM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMiBKdWwgMjAyNiAxNzozOToxMSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjUw IDMvNF0gbm8gbmVlZCBjb21waWxlIGFuZCBldmFsdWF0ZSBvZmZzZXQgaW4gZXhwcmVzc2lvbgog ZXZhbHVhdGlvbgoKZXhlY0V4cHIuYywgZXhlY0V4cHJJbnRlcnAuYyBvZmZzZXQsIGNvbXBvdW5k X29mZnNldCB2YWx1ZSBjaGVja2luZyBpcyBub3QKbmVjZXNzYXJ5LgoKQmFzZWQgb24gaHR0cHM6 Ly9naXRodWIuY29tL2Fzc2FtMjU4LTU4OTIvcG9zdGdyZXMvY29tbWl0cy9SUFIKLS0tCiBzcmMv YmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jICAgICAgIHwgNTYgKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIHwgNDcgKyst LS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5j ICB8ICAzICsrCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcnByLmMgICAgICAgIHwgIDIgKwog c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCAgICAgICB8ICA2ICstLQogc3JjL2luY2x1 ZGUvbm9kZXMvcHJpbW5vZGVzLmggICAgICAgICB8IDI1ICsrKysrKysrKy0tLQogNiBmaWxlcyBj aGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCAxMDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHByLmMKaW5kZXggMzAzNjc4MjUwMy4uZGUxM2FjNjkzZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj RXhwci5jCkBAIC0xMTk4LDEwICsxMTk4LDYgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUs IEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJICogc3dhcHMgZWN4dF9vdXRlcnR1cGxlIHRvIHRoZSB0 YXJnZXQgcm93LCB0aGUgYXJndW1lbnQKIAkJCQkgKiBleHByZXNzaW9uIGlzIGNvbXBpbGVkIG5v cm1hbGx5IChyZWFkcyBmcm9tIHRoZSBzd2FwcGVkCiAJCQkJICogc2xvdCksIGFuZCB0aGUgUkVT VE9SRSBvcGNvZGUgcmVzdG9yZXMgdGhlIG9yaWdpbmFsIHNsb3QuCi0JCQkJICoKLQkJCQkgKiBE ZWZhdWx0IG9mZnNldCB3aGVuIG9mZnNldF9hcmcgaXMgTlVMTDogUFJFVi9ORVhUOiAxCi0JCQkJ ICogKHBoeXNpY2FsIG9mZnNldCBmcm9tIGN1cnJlbnRwb3MpIEZJUlNUL0xBU1Q6IDAgKGxvZ2lj YWwKLQkJCQkgKiBvZmZzZXQgZnJvbSBtYXRjaCBib3VuZGFyeSkKIAkJCQkgKi8KIAkJCQlSUFJO YXZFeHByICpuYXYgPSAoUlBSTmF2RXhwciAqKSBub2RlOwogCQkJCVdpbmRvd0FnZ1N0YXRlICp3 aW5zdGF0ZTsKQEAgLTEyMTMsNTYgKzEyMDksOCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9k ZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfUlBSX05BVl9T RVQ7CiAJCQkJc2NyYXRjaC5kLnJwcl9uYXYud2luc3RhdGUgPSB3aW5zdGF0ZTsKIAkJCQlzY3Jh dGNoLmQucnByX25hdi5raW5kID0gbmF2LT5raW5kOwotCi0JCQkJaWYgKG5hdi0+a2luZCA+PSBS UFJfTkFWX1BSRVZfRklSU1QpCi0JCQkJewotCQkJCQkvKgotCQkJCQkgKiBDb21wb3VuZCBuYXZp Z2F0aW9uOiBhbGxvY2F0ZSBhcnJheSBvZiAyIGZvciBpbm5lciBbMF0KLQkJCQkJICogYW5kIG91 dGVyIFsxXSBvZmZzZXRzLgotCQkJCQkgKi8KLQkJCQkJRGF0dW0JICAgKm9mZnNldF92YWx1ZXMg PSBwYWxsb2NfYXJyYXkoRGF0dW0sIDIpOwotCQkJCQlib29sCSAgICpvZmZzZXRfaXNudWxscyA9 IHBhbGxvY19hcnJheShib29sLCAyKTsKLQotCQkJCQkvKiBJbm5lciBvZmZzZXQgKGRlZmF1bHQg MCBmb3IgRklSU1QvTEFTVCkgKi8KLQkJCQkJaWYgKG5hdi0+b2Zmc2V0X2FyZyAhPSBOVUxMKQot CQkJCQkJRXhlY0luaXRFeHByUmVjKG5hdi0+b2Zmc2V0X2FyZywgc3RhdGUsCi0JCQkJCQkJCQkJ Jm9mZnNldF92YWx1ZXNbMF0sICZvZmZzZXRfaXNudWxsc1swXSk7Ci0JCQkJCWVsc2UKLQkJCQkJ ewotCQkJCQkJb2Zmc2V0X3ZhbHVlc1swXSA9IEludDY0R2V0RGF0dW0oMCk7Ci0JCQkJCQlvZmZz ZXRfaXNudWxsc1swXSA9IGZhbHNlOwotCQkJCQl9Ci0KLQkJCQkJLyogT3V0ZXIgb2Zmc2V0IChk ZWZhdWx0IDEgZm9yIFBSRVYvTkVYVCkgKi8KLQkJCQkJaWYgKG5hdi0+Y29tcG91bmRfb2Zmc2V0 X2FyZyAhPSBOVUxMKQotCQkJCQkJRXhlY0luaXRFeHByUmVjKG5hdi0+Y29tcG91bmRfb2Zmc2V0 X2FyZywgc3RhdGUsCi0JCQkJCQkJCQkJJm9mZnNldF92YWx1ZXNbMV0sICZvZmZzZXRfaXNudWxs c1sxXSk7Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkJb2Zmc2V0X3ZhbHVlc1sxXSA9IEludDY0 R2V0RGF0dW0oMSk7Ci0JCQkJCQlvZmZzZXRfaXNudWxsc1sxXSA9IGZhbHNlOwotCQkJCQl9Ci0K LQkJCQkJc2NyYXRjaC5kLnJwcl9uYXYub2Zmc2V0X3ZhbHVlID0gb2Zmc2V0X3ZhbHVlczsKLQkJ CQkJc2NyYXRjaC5kLnJwcl9uYXYub2Zmc2V0X2lzbnVsbCA9IG9mZnNldF9pc251bGxzOwotCQkJ CX0KLQkJCQllbHNlIGlmIChuYXYtPm9mZnNldF9hcmcgIT0gTlVMTCkKLQkJCQl7Ci0JCQkJCS8q IFNpbXBsZSBuYXZpZ2F0aW9uIHdpdGggZXhwbGljaXQgb2Zmc2V0ICovCi0JCQkJCURhdHVtCSAg ICpvZmZzZXRfdmFsdWUgPSBwYWxsb2Nfb2JqZWN0KERhdHVtKTsKLQkJCQkJYm9vbAkgICAqb2Zm c2V0X2lzbnVsbCA9IHBhbGxvY19vYmplY3QoYm9vbCk7Ci0KLQkJCQkJRXhlY0luaXRFeHByUmVj KG5hdi0+b2Zmc2V0X2FyZywgc3RhdGUsCi0JCQkJCQkJCQlvZmZzZXRfdmFsdWUsIG9mZnNldF9p c251bGwpOwotCQkJCQlzY3JhdGNoLmQucnByX25hdi5vZmZzZXRfdmFsdWUgPSBvZmZzZXRfdmFs dWU7Ci0JCQkJCXNjcmF0Y2guZC5ycHJfbmF2Lm9mZnNldF9pc251bGwgPSBvZmZzZXRfaXNudWxs OwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQkvKiBTaW1wbGUgbmF2aWdhdGlvbiB3aXRo IGRlZmF1bHQgb2Zmc2V0ICovCi0JCQkJCXNjcmF0Y2guZC5ycHJfbmF2Lm9mZnNldF92YWx1ZSA9 IE5VTEw7Ci0JCQkJCXNjcmF0Y2guZC5ycHJfbmF2Lm9mZnNldF9pc251bGwgPSBOVUxMOwotCQkJ CX0KKwkJCQlzY3JhdGNoLmQucnByX25hdi5vZmZzZXQgPSBuYXYtPm9mZnNldDsKKwkJCQlzY3Jh dGNoLmQucnByX25hdi5jb21wb3VuZF9vZmZzZXQgPSBuYXYtPmNvbXBvdW5kX29mZnNldDsKIAog CQkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggYWY1MGEyZTE2ZC4uNWMyNmM1ZTg0OCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCkBAIC02MDExLDIwICs2MDExLDYgQEAgRXhlY0Fn Z1BsYWluVHJhbnNCeVJlZihBZ2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyVHJhbnMgcGVy dHJhbnMsCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOwogfQogCi0vKgotICog RXh0cmFjdCBjb21wb3VuZCAob3V0ZXIpIG9mZnNldCBmcm9tIHN0ZXAgZGF0YS4KLSAqIEZvciBj b21wb3VuZCBuYXYsIG9mZnNldF92YWx1ZSBpcyBhbiBhcnJheTogWzBdPWlubmVyLCBbMV09b3V0 ZXIuCi0gKiBSZXR1cm5zIHRoZSBvdXRlciBvZmZzZXQ7IGVycm9ycyBvbiBOVUxMIG9yIG5lZ2F0 aXZlLgotICogRGVmYXVsdCBpcyAxIChsaWtlIFBSRVYvTkVYVCBpbXBsaWNpdCBvZmZzZXQpLgot ICovCi1zdGF0aWMgaW50NjQKLXJwcl9uYXZfZ2V0X2NvbXBvdW5kX29mZnNldChFeHByRXZhbFN0 ZXAgKm9wKQotewotCUFzc2VydChvcC0+ZC5ycHJfbmF2Lm9mZnNldF92YWx1ZSAhPSBOVUxMKTsK LQotCXJldHVybiBEYXR1bUdldEludDY0KG9wLT5kLnJwcl9uYXYub2Zmc2V0X3ZhbHVlWzFdKTsK LX0KLQogLyoKICAqIEV2YWx1YXRlIFJQUiBuYXZpZ2F0aW9uIChQUkVWL05FWFQvRklSU1QvTEFT VCk6IHN3YXAgc2xvdCB0byB0YXJnZXQgcm93LgogICoKQEAgLTYwNDAsMzIgKzYwMjYsMTUgQEAg RXhlY0V2YWxSUFJOYXZTZXQoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhw ckNvbnRleHQgKmVjb250ZXh0KQogewogCVdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSA9IG9wLT5k LnJwcl9uYXYud2luc3RhdGU7CiAJaW50NjQJCW9mZnNldDsKKwlpbnQ2NAkJY29tcG91bmRfb2Zm c2V0OwogCWludDY0CQl0YXJnZXRfcG9zOwogCVR1cGxlVGFibGVTbG90ICp0YXJnZXRfc2xvdDsK IAogCS8qIFNhdmUgY3VycmVudCBzbG90IGZvciBsYXRlciByZXN0b3JlICovCiAJd2luc3RhdGUt Pm5hdl9zYXZlZF9vdXRlcnR1cGxlID0gZWNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsKIAotCS8q Ci0JICogRGV0ZXJtaW5lIHRoZSBpbm5lciBvZmZzZXQuICBOVUxMIG9yIG5lZ2F0aXZlIG9mZnNl dHMgYXJlIGVycm9ycyBwZXIKLQkgKiB0aGUgU1FMIHN0YW5kYXJkLgotCSAqCi0JICogRGVmYXVs dCBvZmZzZXQgd2hlbiBvZmZzZXRfYXJnIGlzIE5VTEw6IFBSRVYvTkVYVDogMSAoc3RhbmRhcmQg NS42LjIpCi0JICogRklSU1QvTEFTVCBhbmQgY29tcG91bmQ6IDAgZm9yIGlubmVyLCAxIGZvciBv dXRlcgotCSAqLwotCWlmIChvcC0+ZC5ycHJfbmF2Lm9mZnNldF92YWx1ZSAhPSBOVUxMKQotCXsK LQkJb2Zmc2V0ID0gRGF0dW1HZXRJbnQ2NCgqb3AtPmQucnByX25hdi5vZmZzZXRfdmFsdWUpOwot CX0KLQllbHNlCi0JewotCQkvKiBEZWZhdWx0IG9mZnNldDogMSBmb3Igc2ltcGxlIFBSRVYvTkVY VCwgMCBvdGhlcndpc2UgKi8KLQkJaWYgKG9wLT5kLnJwcl9uYXYua2luZCA9PSBSUFJfTkFWX1BS RVYgfHwKLQkJCW9wLT5kLnJwcl9uYXYua2luZCA9PSBSUFJfTkFWX05FWFQpCi0JCQlvZmZzZXQg PSAxOwotCQllbHNlCi0JCQlvZmZzZXQgPSAwOwotCX0KKwlvZmZzZXQgPSBvcC0+ZC5ycHJfbmF2 Lm9mZnNldDsKKwljb21wb3VuZF9vZmZzZXQgPSBvcC0+ZC5ycHJfbmF2LmNvbXBvdW5kX29mZnNl dDsKIAogCS8qCiAJICogQ2FsY3VsYXRlIHRhcmdldCBwb3NpdGlvbiBiYXNlZCBvbiBuYXZpZ2F0 aW9uIGRpcmVjdGlvbi4gIE9uIG92ZXJmbG93LApAQCAtNjEwNSw3ICs2MDc0LDYgQEAgRXhlY0V2 YWxSUFJOYXZTZXQoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRl eHQgKmVjb250ZXh0KQogCQljYXNlIFJQUl9OQVZfUFJFVl9GSVJTVDoKIAkJY2FzZSBSUFJfTkFW X05FWFRfRklSU1Q6CiAJCQl7Ci0JCQkJaW50NjQJCWNvbXBvdW5kX29mZnNldDsKIAkJCQlpbnQ2 NAkJaW5uZXJfcG9zOwogCiAJCQkJLyogSW5uZXI6IG1hdGNoX3N0YXJ0ICsgb2Zmc2V0ICovCkBA IC02MTIwLDkgKzYwODgsNiBAQCBFeGVjRXZhbFJQUk5hdlNldChFeHByU3RhdGUgKnN0YXRlLCBF eHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQpCiAJCQkJCWJyZWFrOwogCQkJ CX0KIAotCQkJCS8qIE91dGVyIG9mZnNldCAqLwotCQkJCWNvbXBvdW5kX29mZnNldCA9IHJwcl9u YXZfZ2V0X2NvbXBvdW5kX29mZnNldChvcCk7Ci0KIAkJCQkvKiBBcHBseSBvdXRlcjogUFJFViBz dWJ0cmFjdHMsIE5FWFQgYWRkcyAqLwogCQkJCWlmIChvcC0+ZC5ycHJfbmF2LmtpbmQgPT0gUlBS X05BVl9QUkVWX0ZJUlNUKQogCQkJCXsKQEAgLTYxNDQsNyArNjEwOSw2IEBAIEV4ZWNFdmFsUlBS TmF2U2V0KEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICpl Y29udGV4dCkKIAkJY2FzZSBSUFJfTkFWX1BSRVZfTEFTVDoKIAkJY2FzZSBSUFJfTkFWX05FWFRf TEFTVDoKIAkJCXsKLQkJCQlpbnQ2NAkJY29tcG91bmRfb2Zmc2V0OwogCQkJCWludDY0CQlpbm5l cl9wb3M7CiAKIAkJCQkvKiBJbm5lcjogY3VycmVudHBvcyAtIG9mZnNldCAqLwpAQCAtNjE1OSw5 ICs2MTIzLDYgQEAgRXhlY0V2YWxSUFJOYXZTZXQoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxT dGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQogCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJ CQkvKiBPdXRlciBvZmZzZXQgKi8KLQkJCQljb21wb3VuZF9vZmZzZXQgPSBycHJfbmF2X2dldF9j b21wb3VuZF9vZmZzZXQob3ApOwotCiAJCQkJLyogQXBwbHkgb3V0ZXI6IFBSRVYgc3VidHJhY3Rz LCBORVhUIGFkZHMgKi8KIAkJCQlpZiAob3AtPmQucnByX25hdi5raW5kID09IFJQUl9OQVZfUFJF Vl9MQVNUKQogCQkJCXsKQEAgLTYxODIsNyArNjE0Myw3IEBAIEV4ZWNFdmFsUlBSTmF2U2V0KEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCkK IAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBSUFIg bmF2aWdhdGlvbiBraW5kOiAlZCIsCi0JCQkJIG9wLT5kLnJwcl9uYXYua2luZCk7CisJCQkJIChp bnQpIG9wLT5kLnJwcl9uYXYua2luZCk7CiAJCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVXaW5kb3dBZ2cuYwppbmRleCBmZWMyMWMyODM1Li5mZGQ2OWY0OTRlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCkBAIC00MDc0LDYgKzQwNzQsOSBAQCB2aXNpdF9uYXZf ZXhlYyhOYXZUcmF2ZXJzYWwgKnQsIFJQUk5hdkV4cHIgKm5hdikKIAkJb3V0ZXIgPSBldmFsX25h dl9vZmZzZXRfaGVscGVyKGNvbnRleHQtPndpbnN0YXRlLAogCQkJCQkJCQkJICAgbmF2LT5jb21w b3VuZF9vZmZzZXRfYXJnKTsKIAorCW5hdi0+b2Zmc2V0ID0gaW5uZXI7CisJbmF2LT5jb21wb3Vu ZF9vZmZzZXQgPSBvdXRlcjsKKwogCS8qIEJhY2t3YXJkIHJlYWNoOiBQUkVWLCBMQVNULXdpdGgt b2Zmc2V0ICovCiAJaWYgKCFjb250ZXh0LT5tYXhPdmVyZmxvdykKIAl7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcnByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf cnByLmMKaW5kZXggYWMyOWMyNmUyMC4uODdiNmQ4ZjEzOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX3Jwci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIu YwpAQCAtNTY2LDYgKzU2Niw4IEBAIGRlZmluZV93YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29u dGV4dCkKIAkJCQkJCW5hdi0+a2luZCA9IFJQUl9OQVZfTkVYVF9GSVJTVDsKIAkJCQkJZWxzZSBp ZiAobmF2LT5raW5kID09IFJQUl9OQVZfTkVYVCAmJiBpbm5lci0+a2luZCA9PSBSUFJfTkFWX0xB U1QpCiAJCQkJCQluYXYtPmtpbmQgPSBSUFJfTkFWX05FWFRfTEFTVDsKKwkJCQkJZWxzZQorCQkJ CQkJZWxvZyhFUlJPUiwgIkludmFsaWQgY29tcG91bmQgZm9ybXM6IG91dGVyOiAlZCwgaW5uZXI6 ICVkIiwgKGludCkgbmF2LT5raW5kLCAoaW50KSBpbm5lci0+a2luZCk7CiAKIAkJCQkJbmF2LT5j b21wb3VuZF9vZmZzZXRfYXJnID0gbmF2LT5vZmZzZXRfYXJnOwogCQkJCQluYXYtPm9mZnNldF9h cmcgPSBpbm5lci0+b2Zmc2V0X2FyZzsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWNFeHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCmluZGV4IGRiNjZl YmUzMTMuLjA1NjFmZDhmNDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNF eHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaApAQCAtNzAzLDkgKzcw Myw5IEBAIHR5cGVkZWYgc3RydWN0IEV4cHJFdmFsU3RlcAogCQlzdHJ1Y3QKIAkJewogCQkJV2lu ZG93QWdnU3RhdGUgKndpbnN0YXRlOwotCQkJUlBSTmF2S2luZAlraW5kOwkvKiBuYXZpZ2F0aW9u IGtpbmQgKHNpbXBsZSBvciBjb21wb3VuZCkgKi8KLQkJCURhdHVtCSAgICpvZmZzZXRfdmFsdWU7 CS8qIG9mZnNldCB2YWx1ZShzKSwgb3IgTlVMTCAqLwotCQkJYm9vbAkgICAqb2Zmc2V0X2lzbnVs bDsJLyogb2Zmc2V0IG51bGwgZmxhZyhzKSAqLworCQkJUlBSTmF2S2luZAlraW5kOworCQkJaW50 NjQJCW9mZnNldDsKKwkJCWludDY0CQljb21wb3VuZF9vZmZzZXQ7CiAJCQkvKiBGb3IgY29tcG91 bmQgbmF2OiBvZmZzZXRfdmFsdWVbMF0gPSBpbm5lciwgWzFdID0gb3V0ZXIgKi8KIAkJCWludDE2 CQlyZXN1bHR0eXBsZW47CS8qIFJFU1RPUkU6IHJlc3VsdCB0eXBlIGxlbmd0aCAqLwogCQkJYm9v bAkJcmVzdWx0dHlwYnl2YWw7IC8qIFJFU1RPUkU6IHJlc3VsdCBwYXNzLWJ5LXZhbHVlPyAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wcmltbm9kZXMuaAppbmRleCA4YmE1MzAzMzNiLi45MDI1MjFmZjgzIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w cmltbm9kZXMuaApAQCAtNjgyLDExICs2ODIsMjYgQEAgdHlwZWRlZiBlbnVtIFJQUk5hdktpbmQK IHR5cGVkZWYgc3RydWN0IFJQUk5hdkV4cHIKIHsKIAlFeHByCQl4cHI7Ci0JUlBSTmF2S2luZAlr aW5kOwkJCS8qIG5hdmlnYXRpb24ga2luZCAqLwotCUV4cHIJICAgKmFyZzsJCQkvKiBhcmd1bWVu dCBleHByZXNzaW9uICovCi0JRXhwcgkgICAqb2Zmc2V0X2FyZzsJCS8qIG9mZnNldCBleHByZXNz aW9uLCBvciBOVUxMIGZvciBkZWZhdWx0ICovCi0JRXhwcgkgICAqY29tcG91bmRfb2Zmc2V0X2Fy ZzsJLyogb3V0ZXIgb2Zmc2V0IGZvciBjb21wb3VuZCBuYXYsIG9yCi0JCQkJCQkJCQkJICogTlVM TCBpZiBzaW1wbGUgKi8KKwlSUFJOYXZLaW5kCWtpbmQ7CisJLyogYXJndW1lbnQgZXhwcmVzc2lv biAqLworCUV4cHIJICAgKmFyZzsKKwkvKiBvZmZzZXQgZXhwcmVzc2lvbiAqLworCUV4cHIJICAg Km9mZnNldF9hcmc7CisJLyogb3V0ZXIgb2Zmc2V0IGZvciBjb21wb3VuZCBuYXZpZ2F0aW9uICov CisJRXhwcgkgICAqY29tcG91bmRfb2Zmc2V0X2FyZzsKKworCS8qCisJICogVGhlIGNvbXB1dGVk IG9mZnNldCB2YWx1ZSwgZm9yIGRlZmF1bHQgdmFsdWUgc2VlIFJQUk5hdktpbmQgY29tbWVudHMK KwkgKiBhYm92ZS4gVGhlIHZhbHVlIHdpbGwgYmUgc2V0IGluIHZpc2l0X25hdl9leGVjLgorCSAq LworCWludDY0CQlvZmZzZXQ7CisKKwkvKgorCSAqIFRoZSBjb21wdXRlZWQgY29tcG91bmRfb2Zm c2V0IG9mZnNldCB2YWx1ZSwgZm9yIGRlZmF1bHQgdmFsdWUgc2VlCisJICogUlBSTmF2S2luZCBj b21tZW50cyBhYm92ZS4gVGhlIHZhbHVlIHdpbGwgYmUgc2V0IGluIHZpc2l0X25hdl9leGVjLgor CSAqLworCWludDY0CQljb21wb3VuZF9vZmZzZXQ7CisKIAkvKiByZXN1bHQgdHlwZSAoc2FtZSBh cyBhcmcncyB0eXBlKSAqLwogCU9pZAkJCXJlc3VsdHR5cGUgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1 bWJsZV9pZ25vcmUpOwogCS8qIE9JRCBvZiBjb2xsYXRpb24gb2YgcmVzdWx0ICovCi0tIAoyLjM0 LjEKCg== --000000000000fd1a750655aa2024 Content-Type: application/octet-stream; name="v50-0002-Refactor-visit_nav_exec.partial" Content-Disposition: attachment; filename="v50-0002-Refactor-visit_nav_exec.partial" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr47axf02 RnJvbSBmNjNhZTA1NTI5Zjk2MGQzNGM5MTJkMDliMjRhYjQ4NDdhNDdkNjM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMiBKdWwgMjAyNiAxNzozODoyNCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjUw IDIvNF0gUmVmYWN0b3IgdmlzaXRfbmF2X2V4ZWMKCkNhbGwgZXZhbF9uYXZfb2Zmc2V0X2hlbHBl ciB0d2ljZSBpcyBlbm91Z2guICBleGVjRXhwckludGVycC5jIG9mZnNldCwKY29tcG91bmRfb2Zm c2V0IHZhbHVlIGVycm9yIGNoZWNraW5nIGlzIG5vdCBuZWNlc3NhcnkuCgpCYXNlZCBvbiBodHRw czovL2dpdGh1Yi5jb20vYXNzYW0yNTgtNTg5Mi9wb3N0Z3Jlcy9jb21taXRzL1JQUgotLS0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgfCAyNiArLS0tLS0tLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jICB8IDk2ICsrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggICAgICAgICB8IDE2ICsrLS0t CiAzIGZpbGVzIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDg4IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCmluZGV4IDViNjI4MWU5ZTMuLmFmNTBhMmUx NmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpAQCAtNjAyMCwyMyArNjAy MCw5IEBAIEV4ZWNBZ2dQbGFpblRyYW5zQnlSZWYoQWdnU3RhdGUgKmFnZ3N0YXRlLCBBZ2dTdGF0 ZVBlclRyYW5zIHBlcnRyYW5zLAogc3RhdGljIGludDY0CiBycHJfbmF2X2dldF9jb21wb3VuZF9v ZmZzZXQoRXhwckV2YWxTdGVwICpvcCkKIHsKLQlpbnQ2NAkJdmFsOwotCiAJQXNzZXJ0KG9wLT5k LnJwcl9uYXYub2Zmc2V0X3ZhbHVlICE9IE5VTEwpOwogCi0JaWYgKG9wLT5kLnJwcl9uYXYub2Zm c2V0X2lzbnVsbFsxXSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQllcnJjb2RlKEVSUkNPREVfTlVM TF9WQUxVRV9OT1RfQUxMT1dFRCksCi0JCQkJZXJybXNnKCJyb3cgcGF0dGVybiBuYXZpZ2F0aW9u IG9mZnNldCBtdXN0IG5vdCBiZSBudWxsIikpOwotCi0JdmFsID0gRGF0dW1HZXRJbnQ2NChvcC0+ ZC5ycHJfbmF2Lm9mZnNldF92YWx1ZVsxXSk7Ci0KLQlpZiAodmFsIDwgMCkKLQkJZXJlcG9ydChF UlJPUiwKLQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJ CWVycm1zZygicm93IHBhdHRlcm4gbmF2aWdhdGlvbiBvZmZzZXQgbXVzdCBub3QgYmUgbmVnYXRp dmUiKSk7Ci0KLQlyZXR1cm4gdmFsOworCXJldHVybiBEYXR1bUdldEludDY0KG9wLT5kLnJwcl9u YXYub2Zmc2V0X3ZhbHVlWzFdKTsKIH0KIAogLyoKQEAgLTYwNjksMTcgKzYwNTUsNyBAQCBFeGVj RXZhbFJQUk5hdlNldChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29u dGV4dCAqZWNvbnRleHQpCiAJICovCiAJaWYgKG9wLT5kLnJwcl9uYXYub2Zmc2V0X3ZhbHVlICE9 IE5VTEwpCiAJewotCQlpZiAoKm9wLT5kLnJwcl9uYXYub2Zmc2V0X2lzbnVsbCkKLQkJCWVyZXBv cnQoRVJST1IsCi0JCQkJCWVycmNvZGUoRVJSQ09ERV9OVUxMX1ZBTFVFX05PVF9BTExPV0VEKSwK LQkJCQkJZXJybXNnKCJyb3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9mZnNldCBtdXN0IG5vdCBiZSBu dWxsIikpOwotCiAJCW9mZnNldCA9IERhdHVtR2V0SW50NjQoKm9wLT5kLnJwcl9uYXYub2Zmc2V0 X3ZhbHVlKTsKLQotCQlpZiAob2Zmc2V0IDwgMCkKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCWVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCi0JCQkJCWVycm1zZygicm93 IHBhdHRlcm4gbmF2aWdhdGlvbiBvZmZzZXQgbXVzdCBub3QgYmUgbmVnYXRpdmUiKSk7CiAJfQog CWVsc2UKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdn LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMKaW5kZXggODk5NTMyOTk0 OS4uZmVjMjFjMjgzNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRv d0FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYwpAQCAtMzk5 MCw4ICszOTkwLDcgQEAgcHV0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2 NCBwb3MsIGludCBhcmdubywgYm9vbCBpc251bGwpCiAgKiBpcyByZXR1cm5lZCBhcyBhIGhhcm1s ZXNzIHBsYWNlaG9sZGVyLgogICovCiBzdGF0aWMgaW50NjQKLWV2YWxfbmF2X29mZnNldF9oZWxw ZXIoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlLCBFeHByICpvZmZzZXRfZXhwciwKLQkJCQkJICAg aW50NjQgZGVmYXVsdE9mZnNldCkKK2V2YWxfbmF2X29mZnNldF9oZWxwZXIoV2luZG93QWdnU3Rh dGUgKndpbnN0YXRlLCBFeHByICpvZmZzZXRfZXhwcikKIHsKIAlFeHByQ29udGV4dCAqZWNvbnRl eHQgPSB3aW5zdGF0ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CiAJRXhwclN0YXRlICAqZXN0YXRl OwpAQCAtMzk5OSwxOCArMzk5OCwyMCBAQCBldmFsX25hdl9vZmZzZXRfaGVscGVyKFdpbmRvd0Fn Z1N0YXRlICp3aW5zdGF0ZSwgRXhwciAqb2Zmc2V0X2V4cHIsCiAJYm9vbAkJaXNudWxsOwogCWlu dDY0CQlvZmZzZXQ7CiAKLQlpZiAob2Zmc2V0X2V4cHIgPT0gTlVMTCkKLQkJcmV0dXJuIGRlZmF1 bHRPZmZzZXQ7Ci0KIAllc3RhdGUgPSBFeGVjSW5pdEV4cHIob2Zmc2V0X2V4cHIsIChQbGFuU3Rh dGUgKikgd2luc3RhdGUpOwogCXZhbCA9IEV4ZWNFdmFsRXhwclN3aXRjaENvbnRleHQoZXN0YXRl LCBlY29udGV4dCwgJmlzbnVsbCk7CiAKIAlpZiAoaXNudWxsKQotCQlyZXR1cm4gMDsKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfTlVMTF9WQUxVRV9OT1RfQUxMT1dFRCks CisJCQkJZXJybXNnKCJyb3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9mZnNldCBtdXN0IG5vdCBiZSBu dWxsIikpOwogCiAJb2Zmc2V0ID0gRGF0dW1HZXRJbnQ2NCh2YWwpOworCiAJaWYgKG9mZnNldCA8 IDApCi0JCXJldHVybiAwOworCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJyb3cgcGF0dGVybiBuYXZpZ2F0 aW9uIG9mZnNldCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpKTsKIAogCXJldHVybiBvZmZzZXQ7CiB9 CkBAIC00MDQ4LDYgKzQwNDksOSBAQCB0eXBlZGVmIHN0cnVjdAogc3RhdGljIHZvaWQKIHZpc2l0 X25hdl9leGVjKE5hdlRyYXZlcnNhbCAqdCwgUlBSTmF2RXhwciAqbmF2KQogeworCWludDY0CQlp bm5lciA9IDA7CisJaW50NjQJCW91dGVyID0gMTsKKwogCUV2YWxEZWZpbmVPZmZzZXRzQ29udGV4 dCAqY29udGV4dCA9IChFdmFsRGVmaW5lT2Zmc2V0c0NvbnRleHQgKikgdC0+ZGF0YTsKIAogCS8q CkBAIC00MDYwLDcyICs0MDY0LDU0IEBAIHZpc2l0X25hdl9leGVjKE5hdlRyYXZlcnNhbCAqdCwg UlBSTmF2RXhwciAqbmF2KQogCUFzc2VydChuYXYtPmNvbXBvdW5kX29mZnNldF9hcmcgPT0gTlVM TCB8fAogCQkgICAhSXNBKG5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZywgUlBSTmF2RXhwcikpOwog CisJaWYgKG5hdi0+b2Zmc2V0X2FyZyAhPSBOVUxMKQorCQlpbm5lciA9IGV2YWxfbmF2X29mZnNl dF9oZWxwZXIoY29udGV4dC0+d2luc3RhdGUsCisJCQkJCQkJCQkgICBuYXYtPm9mZnNldF9hcmcp OworCWVsc2UgaWYgKG5hdi0+a2luZCA9PSBSUFJfTkFWX1BSRVYgfHwgbmF2LT5raW5kID09IFJQ Ul9OQVZfTkVYVCkKKwkJaW5uZXIgPSAxOworCisJaWYgKG5hdi0+Y29tcG91bmRfb2Zmc2V0X2Fy ZyAhPSBOVUxMKQorCQlvdXRlciA9IGV2YWxfbmF2X29mZnNldF9oZWxwZXIoY29udGV4dC0+d2lu c3RhdGUsCisJCQkJCQkJCQkgICBuYXYtPmNvbXBvdW5kX29mZnNldF9hcmcpOworCiAJLyogQmFj a3dhcmQgcmVhY2g6IFBSRVYsIExBU1Qtd2l0aC1vZmZzZXQgKi8KIAlpZiAoIWNvbnRleHQtPm1h eE92ZXJmbG93KQogCXsKLQkJaW50NjQJCXJlYWNoID0gMDsKLQkJYm9vbAkJZ290UmVhY2ggPSBm YWxzZTsKLQotCQlpZiAobmF2LT5raW5kID09IFJQUl9OQVZfUFJFVikKLQkJewotCQkJcmVhY2gg PSBldmFsX25hdl9vZmZzZXRfaGVscGVyKGNvbnRleHQtPndpbnN0YXRlLAotCQkJCQkJCQkJCSAg IG5hdi0+b2Zmc2V0X2FyZywgMSk7Ci0JCQlnb3RSZWFjaCA9IHRydWU7Ci0JCX0KLQkJZWxzZSBp ZiAobmF2LT5raW5kID09IFJQUl9OQVZfTEFTVCAmJiBuYXYtPm9mZnNldF9hcmcgIT0gTlVMTCkK LQkJewotCQkJcmVhY2ggPSBldmFsX25hdl9vZmZzZXRfaGVscGVyKGNvbnRleHQtPndpbnN0YXRl LAotCQkJCQkJCQkJCSAgIG5hdi0+b2Zmc2V0X2FyZywgMCk7Ci0JCQlnb3RSZWFjaCA9IHRydWU7 Ci0JCX0KLQkJZWxzZSBpZiAobmF2LT5raW5kID09IFJQUl9OQVZfUFJFVl9MQVNUIHx8Ci0JCQkJ IG5hdi0+a2luZCA9PSBSUFJfTkFWX05FWFRfTEFTVCkKKwkJaWYgKG5hdi0+a2luZCA9PSBSUFJf TkFWX1BSRVYgfHwKKwkJCW5hdi0+a2luZCA9PSBSUFJfTkFWX0xBU1QgfHwKKwkJCW5hdi0+a2lu ZCA9PSBSUFJfTkFWX1BSRVZfTEFTVCB8fAorCQkJbmF2LT5raW5kID09IFJQUl9OQVZfTkVYVF9M QVNUKQogCQl7Ci0JCQlpbnQ2NAkJaW5uZXIgPSBldmFsX25hdl9vZmZzZXRfaGVscGVyKGNvbnRl eHQtPndpbnN0YXRlLAotCQkJCQkJCQkJCQkJCSAgIG5hdi0+b2Zmc2V0X2FyZywgMCk7Ci0JCQlp bnQ2NAkJb3V0ZXIgPSBldmFsX25hdl9vZmZzZXRfaGVscGVyKGNvbnRleHQtPndpbnN0YXRlLAot CQkJCQkJCQkJCQkJCSAgIG5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZywgMSk7CisJCQlpbnQ2NAkJ cmVhY2ggPSAwOwogCi0JCQlpZiAobmF2LT5raW5kID09IFJQUl9OQVZfUFJFVl9MQVNUKQorCQkJ aWYgKG5hdi0+a2luZCA9PSBSUFJfTkFWX1BSRVYgfHwgbmF2LT5raW5kID09IFJQUl9OQVZfTEFT VCkKKwkJCQlyZWFjaCA9IGlubmVyOworCQkJZWxzZSBpZiAobmF2LT5raW5kID09IFJQUl9OQVZf UFJFVl9MQVNUKQogCQkJewogCQkJCWlmIChwZ19hZGRfczY0X292ZXJmbG93KGlubmVyLCBvdXRl ciwgJnJlYWNoKSkKIAkJCQkJY29udGV4dC0+bWF4T3ZlcmZsb3cgPSB0cnVlOwotCQkJCWVsc2UK LQkJCQkJZ290UmVhY2ggPSB0cnVlOwogCQkJfQogCQkJZWxzZQotCQkJewogCQkJCXJlYWNoID0g TWF4KGlubmVyIC0gb3V0ZXIsIDApOwotCQkJCWdvdFJlYWNoID0gdHJ1ZTsKLQkJCX0KLQkJfQog Ci0JCWlmIChnb3RSZWFjaCkKLQkJCWNvbnRleHQtPm1heE9mZnNldCA9IE1heChjb250ZXh0LT5t YXhPZmZzZXQsIHJlYWNoKTsKKwkJCWlmICghY29udGV4dC0+bWF4T3ZlcmZsb3cpCisJCQkJY29u dGV4dC0+bWF4T2Zmc2V0ID0gTWF4KGNvbnRleHQtPm1heE9mZnNldCwgcmVhY2gpOworCQl9CiAJ fQogCiAJLyogRm9yd2FyZCByZWFjaCBmcm9tIG1hdGNoX3N0YXJ0OiBGSVJTVCwgY29tcG91bmQg UFJFVl9GSVJTVC9ORVhUX0ZJUlNUICovCi0JaWYgKG5hdi0+a2luZCA9PSBSUFJfTkFWX0ZJUlNU KQorCWlmIChuYXYtPmtpbmQgPT0gUlBSX05BVl9GSVJTVCB8fAorCQluYXYtPmtpbmQgPT0gUlBS X05BVl9QUkVWX0ZJUlNUIHx8CisJCW5hdi0+a2luZCA9PSBSUFJfTkFWX05FWFRfRklSU1QpCiAJ ewotCQlpbnQ2NAkJcmVhY2g7Ci0KLQkJcmVhY2ggPSBldmFsX25hdl9vZmZzZXRfaGVscGVyKGNv bnRleHQtPndpbnN0YXRlLAotCQkJCQkJCQkJICAgbmF2LT5vZmZzZXRfYXJnLCAwKTsKKwkJaW50 NjQJCXJlYWNoID0gMDsKIAogCQljb250ZXh0LT5oYXNGaXJzdCA9IHRydWU7CiAKLQkJY29udGV4 dC0+bWluRmlyc3RPZmZzZXQgPSBNaW4oY29udGV4dC0+bWluRmlyc3RPZmZzZXQsIHJlYWNoKTsK LQl9Ci0JZWxzZSBpZiAobmF2LT5raW5kID09IFJQUl9OQVZfUFJFVl9GSVJTVCB8fAotCQkJIG5h di0+a2luZCA9PSBSUFJfTkFWX05FWFRfRklSU1QpCi0JewotCQlpbnQ2NAkJaW5uZXIgPSBldmFs X25hdl9vZmZzZXRfaGVscGVyKGNvbnRleHQtPndpbnN0YXRlLAotCQkJCQkJCQkJCQkJICAgbmF2 LT5vZmZzZXRfYXJnLCAwKTsKLQkJaW50NjQJCW91dGVyID0gZXZhbF9uYXZfb2Zmc2V0X2hlbHBl cihjb250ZXh0LT53aW5zdGF0ZSwKLQkJCQkJCQkJCQkJCSAgIG5hdi0+Y29tcG91bmRfb2Zmc2V0 X2FyZywgMSk7Ci0JCWludDY0CQlyZWFjaDsKLQotCQlpZiAobmF2LT5raW5kID09IFJQUl9OQVZf UFJFVl9GSVJTVCkKKwkJaWYgKG5hdi0+a2luZCA9PSBSUFJfTkFWX0ZJUlNUKQorCQkJY29udGV4 dC0+bWluRmlyc3RPZmZzZXQgPSBNaW4oY29udGV4dC0+bWluRmlyc3RPZmZzZXQsCisJCQkJCQkJ CQkJICBpbm5lcik7CisJCWVsc2UgaWYgKG5hdi0+a2luZCA9PSBSUFJfTkFWX1BSRVZfRklSU1Qp CiAJCXsKIAkJCS8qCiAJCQkgKiByZWFjaCA9IGlubmVyIC0gb3V0ZXIuICBCb3RoIGFyZSBub24t bmVnYXRpdmUsIHNvIHRoZSByZXN1bHQgPj0KQEAgLTQxNDMsNyArNDEyOSw3IEBAIHZpc2l0X25h dl9leGVjKE5hdlRyYXZlcnNhbCAqdCwgUlBSTmF2RXhwciAqbmF2KQogCQkJaWYgKHBnX2FkZF9z NjRfb3ZlcmZsb3coaW5uZXIsIG91dGVyLCAmcmVhY2gpKQogCQkJCXJlYWNoID0gUEdfSU5UNjRf TUFYOwogCQl9Ci0JCWNvbnRleHQtPmhhc0ZpcnN0ID0gdHJ1ZTsKKwogCQljb250ZXh0LT5taW5G aXJzdE9mZnNldCA9IE1pbihjb250ZXh0LT5taW5GaXJzdE9mZnNldCwgcmVhY2gpOwogCX0KIH0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggODU3NmEzYzljNS4uOGJhNTMwMzMzYiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv cHJpbW5vZGVzLmgKQEAgLTY2OCwxNSArNjY4LDE1IEBAIHR5cGVkZWYgc3RydWN0IFdpbmRvd0Z1 bmNSdW5Db25kaXRpb24KICAqLwogdHlwZWRlZiBlbnVtIFJQUk5hdktpbmQKIHsKLQlSUFJfTkFW X1BSRVYsCi0JUlBSX05BVl9ORVhULAotCVJQUl9OQVZfRklSU1QsCi0JUlBSX05BVl9MQVNULAor CVJQUl9OQVZfUFJFViwJCQkJLyogb2Zmc2V0IGRlZmF1bHQ6IDEgKi8KKwlSUFJfTkFWX05FWFQs CQkJCS8qIG9mZnNldCBkZWZhdWx0OiAxICovCisJUlBSX05BVl9GSVJTVCwJCQkJLyogb2Zmc2V0 IGRlZmF1bHQ6IDAgKi8KKwlSUFJfTkFWX0xBU1QsCQkJCS8qIG9mZnNldCBkZWZhdWx0OiAwICov CiAJLyogY29tcG91bmQ6IG91dGVyKGlubmVyKGFyZykpICovCi0JUlBSX05BVl9QUkVWX0ZJUlNU LAotCVJQUl9OQVZfUFJFVl9MQVNULAotCVJQUl9OQVZfTkVYVF9GSVJTVCwKLQlSUFJfTkFWX05F WFRfTEFTVCwKKwlSUFJfTkFWX1BSRVZfRklSU1QsCQkJLyogKG9mZnNldCwgY29tcG91bmRfb2Zm c2V0KSBkZWZhdWx0OiAoMCwgMSkgKi8KKwlSUFJfTkFWX1BSRVZfTEFTVCwJCQkvKiAob2Zmc2V0 LCBjb21wb3VuZF9vZmZzZXQpIGRlZmF1bHQ6ICgwLCAxKSAqLworCVJQUl9OQVZfTkVYVF9GSVJT VCwJCQkvKiAob2Zmc2V0LCBjb21wb3VuZF9vZmZzZXQpIGRlZmF1bHQ6ICgwLCAxKSAqLworCVJQ Ul9OQVZfTkVYVF9MQVNULAkJCS8qIChvZmZzZXQsIGNvbXBvdW5kX29mZnNldCkgZGVmYXVsdDog KDAsIDEpICovCiB9IFJQUk5hdktpbmQ7CiAKIHR5cGVkZWYgc3RydWN0IFJQUk5hdkV4cHIKLS0g CjIuMzQuMQoK --000000000000fd1a750655aa2024--