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 1vuppx-008tHJ-1G for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 10:40:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vuppw-000dQ7-17 for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 10:40:16 +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 1vuppv-000dPz-13 for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 10:40:16 +0000 Received: from mail-qv1-xf42.google.com ([2607:f8b0:4864:20::f42]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vuppp-00000000wcb-1KQX for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 10:40:14 +0000 Received: by mail-qv1-xf42.google.com with SMTP id 6a1803df08f44-896ff127650so90963446d6.3 for ; Tue, 24 Feb 2026 02:40:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20230601.gappssmtp.com; s=20230601; t=1771929609; x=1772534409; darn=lists.postgresql.org; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=gTqPwF27RVzRZ9Bk9Wld+mTvLWC7LZJGOEUnqcZ1Abg=; b=FuWcTPLj1PerMCoo6pr/+0F8xGptiNHmLjdep2vFb+osaAr5kqXZCRBP1ik0hghRwc Uw/qlONfJmS2S+6r65BjV7uVoD7dAsb5wEj61cZ8poJXNbV+Y1/LILOq1foI6AqxHwMd stJ0vXSgStBj7jBWicrqfHGhO5deOEfSSsKXKy4CGtjj4uBo+9jCs6Oi3kV+VpWAp5Oh 4BLBupXs2cQeUgrwbUPjwzYztkUdvldqYfWuPWIDopvRhsTLF4sjd0H6RyP7DqRAIiqX AQvTqMKV3PRN68k8LFwdcIErM3M/nrMv/4aaeRoiuxxZPW8Vxg2gceJc1CO0ofML+RsX a+Sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771929609; x=1772534409; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=gTqPwF27RVzRZ9Bk9Wld+mTvLWC7LZJGOEUnqcZ1Abg=; b=XanZZAGnPAHtOohHuXMPb84muAR+EhxZv5pb6CX4Cj0NnjjPyiooiYx2elrwdsKFmZ EIpyl60hhtH37j+Zr4hD2tYc0E5jZZcLyBSj+OjHcAhcsU28X2yEY6i5zke//Qu9GAUD F7KP79x1dO4q0j+qb1fbxniM1rflT19xqp00xtV0kGGvkmIpXUScKIaNY+tA7pZJjHxm xDcQDkVfjn/7Fkzl553iC3L2GWy/zr8wrweKdkgJhEe9cLkaGlA0qK5SZeAo1rdFv3Ny bSF9hGEYIIqXVeD6aWw4pewrN19SAvdEpvCbbErisSDHqMz+F3G1wH8ZrQX0STObXnEg IHdQ== X-Forwarded-Encrypted: i=1; AJvYcCV3i+nLFsUaC+np/cMoa0lNLbt23kQWx12e4dPmax59R0QckudmrbV8O9hN2NIs5ELFCDwiqiupOmApKf5h@lists.postgresql.org X-Gm-Message-State: AOJu0YwDpCp9y6C9gWXFJZwRju42Uh43AYPG/ZB6qMuA9tTz5qSi3h9M XogkxW4mT8ZJMxYDFpyTW3KmYmnC80QMDxlqsCTQXqTuYhfXwQp34MNG5F5XPF+sCFU= X-Gm-Gg: ATEYQzyDD2EZK/IS5plstRxM6Mfnjj7+ZwWh4obDog0l93wTI5mpt3UHoHJdJrmW+p4 8GPVZomzWoT9vnTgfk1mh0XX/KaeW1EIieEF8kJb8lrqVdR2g+qVdOG+n6F0lr/1zCtCyVnS4x+ zLIpTMNXAGg5x46Z3RKweASMZkP4RZaBcv4bf8H/WOu6fmv0cdPY3Xx+qojwYXJ9qg9BfvWJR8w NaHrzGp2QiwV1s/ppbIrnamaYoslTPO9UvuOFh3TUsdty/l2fiLNcc4nMDxVryZZWPzZr7c2wWF MoFmYDGnB59d3izTJ8m/d6uy47x/rmLV+alE1kNTsrld7tZEUX77vlKNZJr41S47HbsSt0MeDpU B3aImzsaPLCrkWS56bLTfe/HQ7rCxyMthZqwyhxFUTSW777n2G7uxYJ9sY3fUEpZZg9B3PQjysV +4Be/IlB15dWtuYg3WiqH3zPM/s72nRA== X-Received: by 2002:a05:6214:29ca:b0:896:fea0:ccf3 with SMTP id 6a1803df08f44-89979d4d14emr172635766d6.35.1771929608681; Tue, 24 Feb 2026 02:40:08 -0800 (PST) Received: from ?IPV6:2605:a601:a6b0:500::1cb? ([2605:a601:a6b0:500::1cb]) by smtp.googlemail.com with ESMTPSA id 6a1803df08f44-8997e7747f0sm93790726d6.51.2026.02.24.02.40.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 24 Feb 2026 02:40:07 -0800 (PST) Content-Type: multipart/mixed; boundary="------------NLw1I6vW6zstYdY0j5fuHlqC" Message-ID: <2e7ada75-422c-4153-9437-ea0ce8d63521@dunslane.net> Date: Tue, 24 Feb 2026 05:40:06 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Non-text mode for pg_dumpall To: jian he Cc: Mahendra Singh Thalor , tushar , Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <4022765f-38ee-48a3-b246-615b3f8e1c23@dunslane.net> <59d3616f-6d6d-40d5-87e2-e019e350b52d@dunslane.net> <7faf3a59-cfe1-45cb-a972-55e05560b414@dunslane.net> From: Andrew Dunstan Content-Language: en-US Autocrypt: addr=andrew@dunslane.net; keydata= xsBNBE7KWFkBCAClridxur2AIc7eW2AR7izbfp3EnNefie2HbLF0izW5Ik5UjX2HBXBx4syI gY6b0ugohXrr274+baoAlvSbq6cAoQuEVrk5IZFzt20b1Xkx65FwGSEj526yiKLocqkJceSq Xr9xcA5SGY+FZv441chh5SU92v4q6z+6LPpoHOh97ptAVXZYNTtU0LevyvD5lja0TzbvJm6C eFXitJfnm1pLEr0DGJCR/iUOl/N62Kh4855zZC7NHIjQHPOvV5Stz/l5ilDhvGVk+xkXFPys SjZoUr1rXhYLpiyi5sR0X9FHXT0KnGuz1F5ERO7ZTLSSQ6fJwPj6gOk9K+vvoKvoeql5ABEB AAHNJEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PsLAlwQTAQgAQQIbAwIX gAIZAQULCQgHAwUVCgkICwUWAgMBAAIeBRYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNGd BQkdEO8nAAoJEJn6f8tZ/DuBq74H/jkTR4Zi3stbw+xC7v2u3QozssK7MYPL2AsVfh7OealS h182fiWXpfvmmAB7WUHbhk9GC2RAOnHI/2d2jgKaMLAHsGYOT0YopTVIwRY43fCw/mK67yxc wmDcX+zyKfLaivNbf5A7QPLNwda98bEAMSJ8Sn652Uc6cA8t3uKGsVzbRBQOoYzjgvBCfSrE 9ql3PDNg0l4BfAqabd2f70ZUm9VAMEPrgv/v2xI7M2XiL4g5BVmqLCOwxLM8RMCotCuoweUr VO43DeBCIDwLxotMJKvGWDjBzQYlU1NPUAtNcz/gN9ITUe1VUGjyvGj4u1lxBOcQQUw7l1+T 5moZ4iZxXzvOwE0ETspYWQEIANGc4zQULOxhbqO2dyD51YhqCNRmm9oKWaqf+wmW4tpDe/VV cxAnNizd4LWCHfzpb5cHAtGkOPePMfzWVf6nvdF7d3eglbtf59+zG7O7llV0xSSoFiieQBsr GvqDInXYX/4mRRXMtyhM353/tixC9RWLs1oofyYmCPPXXY7h9R7en3B8BoVrRFcdzlIY/NFN hFGW/9dkEiGjgna2Rk6e15kln4ZvFBWUg23p93w/pqXcxY6+k/8TEk+C4R+M6w7o2PLGOjdZ +kPiUcw5H85zf/yZJwQXzisXaNduwWB6Vads9YC9dj6kPR1c4VGRqAaYL++LAEOqrlvm2Tvq QqZRtnEAEQEAAcLAfAQYAQgAJgIbDBYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNI2BQkd EODdAAoJEJn6f8tZ/DuBfw0IAKTsfD40teP/pp+bsLLMSxPXUYrrprTj7WFB5v61p6dkpSr/ qXmMlyahdxQFaPmfVgVirB1Vk/kHiWNnnGjfUV9nB2Zg9LI0Xb9/ts3LsUiRWXzG3tkMY6XL vsVOxW4XFRND9l2q+WW93aZ1DZl+fqWfYgMvsusFRhmGFOKTRfKPta2Pkv+AhA24N4+PrR5p bU4k2MO8PAGiK8eaYKGFG1bHKuAvoDoF7WXJ3FHxuWqLnKEt4dfOLm5pAe3zq1Lt6q8azT9i QWGpSAK5vQUWQHBHpiDjdPeqKZ6HiAXIIKfSmb+jrvXBqoP+D6/K7rUjG2aXiRtTIAXms9sm VRu7cmw= In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------NLw1I6vW6zstYdY0j5fuHlqC Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2026-02-24 Tu 2:21 AM, jian he wrote: > Hi. > > For v19, the commit message > """ > pg_restore is extended to handle these pg_dumpall archives, restoring > globals and then each database. The --globals-only and --no-globals > options control which parts are restored. > """ > There is no --no-globals option. > > In file src/bin/pg_dump/pg_dumpall.c, no need > `` > static pg_compress_specification compression_spec = {0}; > `` > Since compression_spec is only used in an IF branch, we can declare it locally. > > > The options below are not supported for pg_restore non-text restore, > we can document this. > , > , > , > , > , > . > > > Thanks, fixed these. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com --------------NLw1I6vW6zstYdY0j5fuHlqC Content-Type: text/x-patch; charset=UTF-8; name="v20-0001-Add-non-text-output-formats-to-pg_dumpall.patch" Content-Disposition: attachment; filename="v20-0001-Add-non-text-output-formats-to-pg_dumpall.patch" Content-Transfer-Encoding: base64 RnJvbSAxYzYyY2VmMDkyZjZkM2E3MWFkYzM2OTQ4OThlNDlkMDM2NjFlYTAyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogTW9uLCAyMyBGZWIgMjAyNiAxNTowODo1NSAtMDUwMApTdWJqZWN0OiBb UEFUQ0ggdjIwXSBBZGQgbm9uLXRleHQgb3V0cHV0IGZvcm1hdHMgdG8gcGdfZHVtcGFsbAoK cGdfZHVtcGFsbCBjYW4gbm93IHByb2R1Y2Ugb3V0cHV0IGluIGN1c3RvbSwgZGlyZWN0b3J5 LCBvciB0YXIgZm9ybWF0cwppbiBhZGRpdGlvbiB0byBwbGFpbiB0ZXh0IFNRTCBzY3JpcHRz LiBXaGVuIHVzaW5nIG5vbi10ZXh0IGZvcm1hdHMsCnBnX2R1bXBhbGwgY3JlYXRlcyBhIGRp cmVjdG9yeSBjb250YWluaW5nOgotIHRvYy5nbG86IGdsb2JhbCBkYXRhIChyb2xlcyBhbmQg dGFibGVzcGFjZXMpIGluIGN1c3RvbSBmb3JtYXQKLSBtYXAuZGF0OiBtYXBwaW5nIGJldHdl ZW4gZGF0YWJhc2UgT0lEcyBhbmQgbmFtZXMKLSBkYXRhYmFzZXMvOiBzdWJkaXJlY3Rvcnkg d2l0aCBwZXItZGF0YWJhc2UgYXJjaGl2ZXMgbmFtZWQgYnkgT0lECgpwZ19yZXN0b3JlIGlz IGV4dGVuZGVkIHRvIGhhbmRsZSB0aGVzZSBwZ19kdW1wYWxsIGFyY2hpdmVzLCByZXN0b3Jp bmcKZ2xvYmFscyBhbmQgdGhlbiBlYWNoIGRhdGFiYXNlLiBUaGUgLS1nbG9iYWxzLW9ubHkg b3B0aW9uIGNhbiBiZSB1c2VkCnRvIHJlc3RvcmUgb25seSB0aGUgZ2xvYmFsIG9iamVjdHMu CgpUaGlzIGVuYWJsZXMgcGFyYWxsZWwgcmVzdG9yZSBvZiBwZ19kdW1wYWxsIG91dHB1dCBh bmQgc2VsZWN0aXZlCnJlc3RvcmF0aW9uIG9mIGluZGl2aWR1YWwgZGF0YWJhc2VzIGZyb20g YSBjbHVzdGVyLXdpZGUgYmFja3VwLgoKQXV0aG9yOiBNYWhlbmRyYSBTaW5naCBUaGFsb3Ig PG1haGk2cnVuQGdtYWlsLmNvbT4KQ28tQXV0aG9yOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3 QGR1bnNsYW5lLm5ldD4KUmV2aWV3ZWQtQnk6IFR1c2hhciBBaHVqYSA8dHVzaGFyLmFodWph QGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLUJ5OiBKaWFuIEhlIDxqaWFuLnVuaXZlcnNh bGl0eUBnbWFpbC5jb20+ClJldmlld2VkLUJ5OiBWYWliaGF2IERhbHZpIDx2YWliaGF2LmRh bHZpQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLUJ5OiBTcmluYXRoIFJlZGR5IDxzcmlu YXRoMjEzM0BnbWFpbC5jb20+CgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2Ni MTAzNjIzLThlZTYtNGJhNS1hMmM5LWYzMmUzYTQ5MzNmYUBkdW5zbGFuZS5uZXQKLS0tCiBk b2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbCAgICAgfCAxMTMgKysrLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgICAgIHwgMTE5ICsrKy0KIHNyYy9iaW4vcGdf ZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGFy YWxsZWwuYyAgICAgICAgICAgfCAgMTQgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5o ICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMgfCAgNjcgKystCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggfCAg IDEgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAgICAgIHwgICAyICstCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4v cGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgICAgICB8IDgwMCArKysrKysrKysrKysrKysrKysr KysrLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDcwMyAr KysrKysrKysrKysrKysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBs ICAgICAgIHwgIDU1ICsrCiBzcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCAg fCA2MzkgKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgfCAgIDEgKwogMTQgZmlsZXMgY2hhbmdlZCwgMjM0OCBpbnNlcnRpb25z KCspLCAxNzEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19k dW1wL3QvMDA3X3BnX2R1bXBhbGwucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVm L3BnX2R1bXBhbGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmlu ZGV4IDg4MzRiN2VjMTQxLi40OWU1Yzk5YjA5ZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3JlZi9wZ19kdW1wYWxsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxs LnNnbWwKQEAgLTE2LDcgKzE2LDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAg PHJlZm5hbWVkaXY+CiAgIDxyZWZuYW1lPnBnX2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZw dXJwb3NlPmV4dHJhY3QgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ IGRhdGFiYXNlIGNsdXN0ZXIgaW50byBhIHNjcmlwdCBmaWxlPC9yZWZwdXJwb3NlPgorCisg IDxyZWZwdXJwb3NlPgorICAgZXhwb3J0IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3By b2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3Ro ZXIgZm9ybWF0cworICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCiAgPHJlZnN5 bm9wc2lzZGl2PgpAQCAtMzMsNyArMzYsNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K ICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+IGlz IGEgdXRpbGl0eSBmb3Igd3JpdGluZyBvdXQKICAgICg8cXVvdGU+ZHVtcGluZzwvcXVvdGU+ KSBhbGwgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZXMK LSAgIG9mIGEgY2x1c3RlciBpbnRvIG9uZSBzY3JpcHQgZmlsZS4gIFRoZSBzY3JpcHQgZmls ZSBjb250YWlucworICAgb2YgYSBjbHVzdGVyIGludG8gYW4gU1FMIHNjcmlwdCBmaWxlIG9y IGFuIGFyY2hpdmUuICBUaGUgb3V0cHV0IGNvbnRhaW5zCiAgICA8YWNyb255bT5TUUw8L2Fj cm9ueW0+IGNvbW1hbmRzIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gPHhyZWYKICAg IGxpbmtlbmQ9ImFwcC1wc3FsIi8+IHRvIHJlc3RvcmUgdGhlIGRhdGFiYXNlcy4gIEl0IGRv ZXMgdGhpcyBieQogICAgY2FsbGluZyA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZv ciBlYWNoIGRhdGFiYXNlIGluIHRoZSBjbHVzdGVyLgpAQCAtNTIsMTEgKzU1LDE2IEBAIFBv c3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUg U1FMIHNjcmlwdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVz ZSB0aGUKKyAgIFBsYWluIHRleHQgU1FMIHNjcmlwdHMgd2lsbCBiZSB3cml0dGVuIHRvIHRo ZSBzdGFuZGFyZCBvdXRwdXQuICBVc2UgdGhlCiAgICA8b3B0aW9uPi1mPC9vcHRpb24+Lzxv cHRpb24+LS1maWxlPC9vcHRpb24+IG9wdGlvbiBvciBzaGVsbCBvcGVyYXRvcnMgdG8KICAg IHJlZGlyZWN0IGl0IGludG8gYSBmaWxlLgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBB cmNoaXZlcyBpbiBvdGhlciBmb3JtYXRzIHdpbGwgYmUgcGxhY2VkIGluIGEgZGlyZWN0b3J5 IG5hbWVkIHVzaW5nIHRoZQorICAgPG9wdGlvbj4tZjwvb3B0aW9uPi88b3B0aW9uPi0tZmls ZTwvb3B0aW9uPiwgd2hpY2ggaXMgcmVxdWlyZWQgaW4gdGhpcyBjYXNlLgorICA8L3BhcmE+ CisKICAgPHBhcmE+CiAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4g bmVlZHMgdG8gY29ubmVjdCBzZXZlcmFsCiAgIHRpbWVzIHRvIHRoZSA8cHJvZHVjdG5hbWU+ UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHNlcnZlciAob25jZSBwZXIKQEAgLTEzMSwxNiAr MTM5LDkzIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxwYXJhPgogICAg ICAgICBTZW5kIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIGZpbGUuICBJZiB0aGlzIGlzIG9t aXR0ZWQsIHRoZQogICAgICAgICBzdGFuZGFyZCBvdXRwdXQgaXMgdXNlZC4KKyAgICAgICAg VGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgb21pdHRlZCB3aGVuIDxvcHRpb24+LS1mb3JtYXQ8 L29wdGlvbj4gaXMgcGxhaW4uCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LUYgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwv cmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWZv cm1hdD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJs ZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIFNwZWNpZnkgdGhlIGZvcm1hdCBvZiBkdW1wIGZpbGVzLiAgSW4gcGxhaW4gZm9y bWF0LCBhbGwgdGhlIGR1bXAgZGF0YSBpcworICAgICAgICBzZW50IGluIGEgc2luZ2xlIHRl eHQgc3RyZWFtLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgICAgIEluIGFsbCBvdGhl ciBtb2RlcywgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiBmaXJzdCBj cmVhdGVzIHR3byBmaWxlcywKKyAgICAgICAgPGZpbGVuYW1lPnRvYy5nbG88L2ZpbGVuYW1l PiBhbmQgPGZpbGVuYW1lPm1hcC5kYXQ8L2ZpbGVuYW1lPiwgaW4gdGhlIGRpcmVjdG9yeQor ICAgICAgICBzcGVjaWZpZWQgYnkgPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4uCisgICAgICAg IFRoZSBmaXJzdCBmaWxlIGNvbnRhaW5zIGdsb2JhbCBkYXRhIChyb2xlcyBhbmQgdGFibGVz cGFjZXMpIGluIGN1c3RvbSBmb3JtYXQuIFRoZSBzZWNvbmQKKyAgICAgICAgY29udGFpbnMg YSBtYXBwaW5nIGJldHdlZW4gZGF0YWJhc2UgT0lEcyBhbmQgbmFtZXMuIFRoZXNlIGZpbGVz IGFyZSB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNh dGlvbj4uIERhdGEgZm9yIGluZGl2aWR1YWwgZGF0YWJhc2VzIGlzIHBsYWNlZCBpbgorICAg ICAgICB0aGUgPGZpbGVuYW1lPmRhdGFiYXNlczwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSwg bmFtZWQgdXNpbmcgdGhlIGRhdGFiYXNlJ3MgT0lELgorCisgICAgICAgPHZhcmlhYmxlbGlz dD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8 L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4K KyAgICAgICAgICAgT3V0cHV0IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZXMgZm9yIGVhY2gg ZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3Rv cmUuIFRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgd2lsbCBoYXZlIGRhdGFiYXNlIDx0eXBl Pm9pZDwvdHlwZT4gYXMgaXRzIG5hbWUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAg PC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgor ICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBw bGFpbi10ZXh0IFNRTCBzY3JpcHQgZmlsZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJh bD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAg ICAgICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQgYXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFz ZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhl IGFyY2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJvaWQuZG1w PC9maWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQorICAgICAgICAg ICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICA8L3BhcmE+ CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVy YWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg T3V0cHV0IGEgdGFyLWZvcm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAg ICAgICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQor ICAgICAgICAgICB3aWxsIGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9pZC50YXI8L2ZpbGVuYW1l PiB3aGVyZSA8dHlwZT5kYm9pZDwvdHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9p ZDwvdHlwZT4gb2YgdGhlIGRhdGFiYXNlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAg IDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFy aWFibGVsaXN0PgorCisgICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4g Zm9yIGRldGFpbHMgb24gaG93IHRoZQorICAgICAgIHZhcmlvdXMgbm9uLXBsYWluLXRleHQg YXJjaGl2ZSBmb3JtYXRzIHdvcmsuCisKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0 aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAg ICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0 aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgog ICAgICAgIDxwYXJhPgogICAgICAgICBEdW1wIG9ubHkgZ2xvYmFsIG9iamVjdHMgKHJvbGVz IGFuZCB0YWJsZXNwYWNlcyksIG5vIGRhdGFiYXNlcy4KKyAgICAgICAgTm90ZTogPG9wdGlv bj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPiBjYW5ub3QgYmUgdXNlZCB3aXRoCisgICAgICAg IDxvcHRpb24+LS1jbGVhbjwvb3B0aW9uPiB3aXRoIG5vbi10ZXh0IGR1bXAgZm9ybWF0Lgog ICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5 PgpAQCAtOTM2LDEzICsxMDIxLDIxIEBAIGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPlBBVFRFUk48L3JlcGxhY2VhYmxlPgogIDxyZWZzZWN0MSBp ZD0iYXBwLXBnLWR1bXBhbGwtZXgiPgogICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgogICA8 cGFyYT4KLSAgIFRvIGR1bXAgYWxsIGRhdGFiYXNlczoKLQorICAgVG8gZHVtcCBhbGwgZGF0 YWJhc2VzIGluIHBsYWluIHRleHQgZm9ybWF0ICh0aGUgZGVmYXVsdCk6CiA8c2NyZWVuPgog PHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAmZ3Q7IGRiLm91dDwv dXNlcmlucHV0PgogPC9zY3JlZW4+CiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIFRvIGR1 bXAgYWxsIGRhdGFiYXNlcyB1c2luZyBvdGhlciBmb3JtYXRzOgorPHNjcmVlbj4KKzxwcm9t cHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwgLS1mb3JtYXQ9ZGlyZWN0b3J5 IC1mIGRiLm91dDwvdXNlcmlucHV0PgorPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+ cGdfZHVtcGFsbCAtLWZvcm1hdD1jdXN0b20gLWYgZGIub3V0PC91c2VyaW5wdXQ+Cis8cHJv bXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PXRhciAtZiBk Yi5vdXQ8L3VzZXJpbnB1dD4KKzwvc2NyZWVuPgorICA8L3BhcmE+CisKICAgPHBhcmE+CiAg ICBUbyByZXN0b3JlIGRhdGFiYXNlKHMpIGZyb20gdGhpcyBmaWxlLCB5b3UgY2FuIHVzZToK IDxzY3JlZW4+CkBAIC05NTYsNiArMTA0OSwxNiBAQCBleGNsdWRlIGRhdGFiYXNlIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5QQVRURVJOPC9yZXBsYWNlYWJsZT4KICAgIHRo ZSBzY3JpcHQgd2lsbCBhdHRlbXB0IHRvIGRyb3Agb3RoZXIgZGF0YWJhc2VzIGltbWVkaWF0 ZWx5LCBhbmQgdGhhdAogICAgd2lsbCBmYWlsIGZvciB0aGUgZGF0YWJhc2UgeW91IGFyZSBj b25uZWN0ZWQgdG8uCiAgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIElmIHRoZSBkdW1wIHdh cyB0YWtlbiBpbiBhIG5vbi1wbGFpbi10ZXh0IGZvcm1hdCwgdXNlCisgICA8YXBwbGljYXRp b24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IHRvIHJlc3RvcmUgdGhlIGRhdGFiYXNlczoK KzxzY3JlZW4+Cis8cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19yZXN0b3JlIGRi Lm91dCAtZCBwb3N0Z3JlcyAtQzwvdXNlcmlucHV0PgorPC9zY3JlZW4+CisgICBUaGlzIHdp bGwgcmVzdG9yZSBhbGwgZGF0YWJhc2VzLiAgVG8gcmVzdG9yZSBvbmx5IHNvbWUgZGF0YWJh c2VzLCB1c2UKKyAgIHRoZSA8b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBv cHRpb24gdG8gc2tpcCB0aG9zZSBub3Qgd2FudGVkLgorICA8L3BhcmE+CiAgPC9yZWZzZWN0 MT4KIAogIDxyZWZzZWN0MT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVz dG9yZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggNDIw YTMwOGE3YzcuLjRhMjFhMDg5ODQwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3Bn X3Jlc3RvcmUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApA QCAtMTgsOCArMTgsOSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHJlZm5hbWU+ cGdfcmVzdG9yZTwvcmVmbmFtZT4KIAogICA8cmVmcHVycG9zZT4KLSAgIHJlc3RvcmUgYSA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4K LSAgIGFyY2hpdmUgZmlsZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBs aWNhdGlvbj4KKyAgIHJlc3RvcmUgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3Ru YW1lPiBkYXRhYmFzZXMgZnJvbSBhcmNoaXZlcworICAgY3JlYXRlZCBieSA8YXBwbGljYXRp b24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisgICA8YXBwbGljYXRpb24+cGdfZHVtcGFs bDwvYXBwbGljYXRpb24+CiAgIDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVkaXY+CiAKQEAg LTM4LDEzICszOSwxNCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogICA8cGFyYT4K ICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5 IGZvciByZXN0b3JpbmcgYQotICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3Ru YW1lPiBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUKLSAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlu a2VuZD0iYXBwLXBnZHVtcCIvPiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CisgICA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIG9yIGNsdXN0 ZXIgZnJvbSBhbiBhcmNoaXZlCisgICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFwcC1w Z2R1bXAiLz4gb3IKKyAgIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZy1kdW1wYWxsIi8+IGluIG9u ZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKICAgIGZvcm1hdHMuICBJdCB3aWxsIGlzc3VlIHRo ZSBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVjb25zdHJ1Y3QgdGhlCi0gICBkYXRhYmFzZSB0 byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZlZC4gIFRoZQot ICAgYXJjaGl2ZSBmaWxlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9h cHBsaWNhdGlvbj4gdG8KKyAgIGRhdGFiYXNlIG9yIGNsdXN0ZXIgdG8gdGhlIHN0YXRlIGl0 IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMgc2F2ZWQuIFRoZQorICAgYXJjaGl2ZXMgYWxz byBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IHRvCiAgICBi ZSBzZWxlY3RpdmUgYWJvdXQgd2hhdCBpcyByZXN0b3JlZCwgb3IgZXZlbiB0byByZW9yZGVy IHRoZSBpdGVtcwotICAgcHJpb3IgdG8gYmVpbmcgcmVzdG9yZWQuIFRoZSBhcmNoaXZlIGZp bGVzIGFyZSBkZXNpZ25lZCB0byBiZQorICAgcHJpb3IgdG8gYmVpbmcgcmVzdG9yZWQuIFRo ZSBhcmNoaXZlIGZvcm1hdHMgYXJlIGRlc2lnbmVkIHRvIGJlCiAgICBwb3J0YWJsZSBhY3Jv c3MgYXJjaGl0ZWN0dXJlcy4KICAgPC9wYXJhPgogCkBAIC01MiwxNCArNTQsMzQgQEAgUG9z dGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBw bGljYXRpb24+IGNhbiBvcGVyYXRlIGluIHR3byBtb2Rlcy4KICAgIElmIGEgZGF0YWJhc2Ug bmFtZSBpcyBzcGVjaWZpZWQsIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlv bj4KICAgIGNvbm5lY3RzIHRvIHRoYXQgZGF0YWJhc2UgYW5kIHJlc3RvcmVzIGFyY2hpdmUg Y29udGVudHMgZGlyZWN0bHkgaW50bwotICAgdGhlIGRhdGFiYXNlLiAgT3RoZXJ3aXNlLCBh IHNjcmlwdCBjb250YWluaW5nIHRoZSBTUUwKLSAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byBy ZWJ1aWxkIHRoZSBkYXRhYmFzZSBpcyBjcmVhdGVkIGFuZCB3cml0dGVuCisgICB0aGUgZGF0 YWJhc2UuCisgICBXaGVuIHJlc3RvcmluZyBmcm9tIGEgZHVtcCBtYWRlIGJ5IDxhcHBsaWNh dGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4sCisgICBlYWNoIGRhdGFiYXNlIHdpbGwg YmUgY3JlYXRlZCBhbmQgdGhlbiB0aGUgcmVzdG9yYXRpb24gd2lsbCBiZSBydW4gaW4gdGhh dAorICAgZGF0YWJhc2UuCisKKyAgIE90aGVyd2lzZSwgd2hlbiBhIGRhdGFiYXNlIG5hbWUg aXMgbm90IHNwZWNpZmllZCwgYSBzY3JpcHQgY29udGFpbmluZyB0aGUgU1FMCisgICBjb21t YW5kcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0aGUgZGF0YWJhc2Ugb3IgY2x1c3RlciBpcyBj cmVhdGVkIGFuZCB3cml0dGVuCiAgICB0byBhIGZpbGUgb3Igc3RhbmRhcmQgb3V0cHV0LiAg VGhpcyBzY3JpcHQgb3V0cHV0IGlzIGVxdWl2YWxlbnQgdG8KLSAgIHRoZSBwbGFpbiB0ZXh0 IG91dHB1dCBmb3JtYXQgb2YgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPi4K KyAgIHRoZSBwbGFpbiB0ZXh0IG91dHB1dCBmb3JtYXQgb2YgPGFwcGxpY2F0aW9uPnBnX2R1 bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxp Y2F0aW9uPi4KKwogICAgU29tZSBvZiB0aGUgb3B0aW9ucyBjb250cm9sbGluZyB0aGUgb3V0 cHV0IGFyZSB0aGVyZWZvcmUgYW5hbG9nb3VzIHRvCiAgICA8YXBwbGljYXRpb24+cGdfZHVt cDwvYXBwbGljYXRpb24+IG9wdGlvbnMuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEEg bm9uLXBsYWluLXRleHQgYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1w YWxsPC9hcHBsaWNhdGlvbj4KKyAgIGlzIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSA8Zmls ZW5hbWU+dG9jLmdsbzwvZmlsZW5hbWU+IGZpbGUgd2l0aCBnbG9iYWwKKyAgIG9iamVjdHMg KHJvbGVzIGFuZCB0YWJsZXNwYWNlcyksIGEgPGZpbGVuYW1lPm1hcC5kYXQ8L2ZpbGVuYW1l PiBmaWxlCisgICBsaXN0aW5nIHRoZSBkYXRhYmFzZXMsIGFuZCBhIHN1YmRpcmVjdG9yeSBm b3IgZWFjaCBkYXRhYmFzZSBjb250YWluaW5nCisgICBpdHMgYXJjaGl2ZS4gIFdoZW4gcmVz dG9yaW5nIHN1Y2ggYW4gYXJjaGl2ZSwKKyAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9h cHBsaWNhdGlvbj4gZmlyc3QgcmVzdG9yZXMgZ2xvYmFsIG9iamVjdHMgZnJvbQorICAgPGZp bGVuYW1lPnRvYy5nbG88L2ZpbGVuYW1lPiwgdGhlbiBwcm9jZXNzZXMgZWFjaCBkYXRhYmFz ZSBsaXN0ZWQgaW4KKyAgIDxmaWxlbmFtZT5tYXAuZGF0PC9maWxlbmFtZT4uICBMaW5lcyBp biA8ZmlsZW5hbWU+bWFwLmRhdDwvZmlsZW5hbWU+IGNhbgorICAgYmUgY29tbWVudGVkIG91 dCB3aXRoIDxsaXRlcmFsPiM8L2xpdGVyYWw+IHRvIHNraXAgcmVzdG9yaW5nIHNwZWNpZmlj CisgICBkYXRhYmFzZXMuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgIE9idmlvdXNseSwg PGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBjYW5ub3QgcmVzdG9yZSBp bmZvcm1hdGlvbgogICAgdGhhdCBpcyBub3QgcHJlc2VudCBpbiB0aGUgYXJjaGl2ZSBmaWxl LiAgRm9yIGluc3RhbmNlLCBpZiB0aGUKQEAgLTEzMCw2ICsxNTIsMTIgQEAgUG9zdGdyZVNR TCBkb2N1bWVudGF0aW9uCiAgICAgICAgIGlnbm9yYWJsZSBlcnJvciBtZXNzYWdlcyB3aWxs IGJlIHJlcG9ydGVkLAogICAgICAgICB1bmxlc3MgPG9wdGlvbj4tLWlmLWV4aXN0czwvb3B0 aW9uPiBpcyBhbHNvIHNwZWNpZmllZC4KICAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+ CisgICAgICAgIFdoZW4gcmVzdG9yaW5nIGEgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2Fw cGxpY2F0aW9uPiBhcmNoaXZlLAorICAgICAgICA8b3B0aW9uPi0taWYtZXhpc3RzPC9vcHRp b24+IGlzIGltcGxpZWQgYnkgPG9wdGlvbj4tLWNsZWFuPC9vcHRpb24+LAorICAgICAgICBz aW5jZSBnbG9iYWwgb2JqZWN0cyBzdWNoIGFzIHJvbGVzIGFuZCB0YWJsZXNwYWNlcyBtYXkg bm90IGV4aXN0CisgICAgICAgIGluIHRoZSB0YXJnZXQgY2x1c3Rlci4KKyAgICAgICA8L3Bh cmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIApAQCAtMTUy LDYgKzE4MCw4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBjb21tYW5k cyB0aGF0IG1lbnRpb24gdGhpcyBkYXRhYmFzZS4KICAgICAgICAgQWNjZXNzIHByaXZpbGVn ZXMgZm9yIHRoZSBkYXRhYmFzZSBpdHNlbGYgYXJlIGFsc28gcmVzdG9yZWQsCiAgICAgICAg IHVubGVzcyA8b3B0aW9uPi0tbm8tYWNsPC9vcHRpb24+IGlzIHNwZWNpZmllZC4KKyAgICAg ICAgPG9wdGlvbj4tLWNyZWF0ZTwvb3B0aW9uPiBpcyByZXF1aXJlZCB3aGVuIHJlc3Rvcmlu ZyBtdWx0aXBsZSBkYXRhYmFzZXMKKyAgICAgICAgZnJvbSBhIG5vbi1wbGFpbi10ZXh0IGFy Y2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+ LgogICAgICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAtMjQ3LDYgKzI3NywyOCBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwv dmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0 aW9uPi1nPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMt b25seTwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgUmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVz cGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgor ICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZy b20gYSBub24tcGxhaW4tdGV4dCBhcmNoaXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9uPnBn X2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KKyAgICAgICAgTm90ZTogPG9wdGlvbj4tLWdsb2Jh bHMtb25seTwvb3B0aW9uPiBjYW5ub3QgYmUgdXNlZCB3aXRoCisgICAgICAgIDxvcHRpb24+ LS1kYXRhLW9ubHk8L29wdGlvbj4sCisgICAgICAgIDxvcHRpb24+LS1zY2hlbWEtb25seTwv b3B0aW9uPiwKKyAgICAgICAgPG9wdGlvbj4tLXN0YXRpc3RpY3Mtb25seTwvb3B0aW9uPiwK KyAgICAgICAgPG9wdGlvbj4tLXN0YXRpc3RpY3M8L29wdGlvbj4sCisgICAgICAgIDxvcHRp b24+LS1leGl0LW9uLWVycm9yPC9vcHRpb24+LAorICAgICAgICA8b3B0aW9uPi0tc2luZ2xl LXRyYW5zYWN0aW9uPC9vcHRpb24+LAorICAgICAgICA8b3B0aW9uPi0tY2xlYW48L29wdGlv bj4sIG9yCisgICAgICAgIDxvcHRpb24+LS10cmFuc2FjdGlvbi1zaXplPC9vcHRpb24+Lgor ICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5 PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1JIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4PTxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgpAQCAt NTgxLDYgKzYzMywyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlz dGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgICA8dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgor ICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVzdG9y ZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRp cGxlIHBhdHRlcm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAg ICAgIDxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3aXRjaGVzLiAgVGhl CisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBs YWNlYWJsZT4gcGFyYW1ldGVyIGlzCisgICAgICAgIGludGVycHJldGVkIGFzIGEgcGF0dGVy biBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8YXBwbGlj YXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+CisgICAg ICAgIGNvbW1hbmRzIChzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiLz4p LAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGFsc28gYmUgZXhjbHVkZWQg Ynkgd3JpdGluZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJu LiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAgICAgICAgcXVvdGUg dGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2lsZGNhcmQgZXhwYW5z aW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBvcHRp b24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGEgbm9uLXBsYWluLXRl eHQgYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNh dGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJs aXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+ LS1maWx0ZXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZpbGVuYW1lPC9yZXBs YWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CkBAIC02NjksNyAr NzQzLDkgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgIGluIDxvcHRpb24+ LS1jbGVhbjwvb3B0aW9uPiBtb2RlLiAgVGhpcyBzdXBwcmVzc2VzIDxxdW90ZT5kb2VzIG5v dAogICAgICAgICBleGlzdDwvcXVvdGU+IGVycm9ycyB0aGF0IG1pZ2h0IG90aGVyd2lzZSBi ZSByZXBvcnRlZC4gIFRoaXMKICAgICAgICAgb3B0aW9uIGlzIG5vdCB2YWxpZCB1bmxlc3Mg PG9wdGlvbj4tLWNsZWFuPC9vcHRpb24+IGlzIGFsc28KLSAgICAgICAgc3BlY2lmaWVkLgor ICAgICAgICBzcGVjaWZpZWQuICBUaGlzIG9wdGlvbiBpcyBpbXBsaWVkIHdoZW4gcmVzdG9y aW5nIGEKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiBh cmNoaXZlIHdpdGgKKyAgICAgICAgPG9wdGlvbj4tLWNsZWFuPC9vcHRpb24+LgogICAgICAg IDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgpAQCAt MTEyNSw2ICsxMjAxLDI3IEBAIENSRUFURSBEQVRBQkFTRSBmb28gV0lUSCBURU1QTEFURSB0 ZW1wbGF0ZTA7CiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogCisgICAgPGxpc3Rp dGVtPgorICAgICA8cGFyYT4KKyAgICAgIFdoZW4gcmVzdG9yaW5nIGZyb20gYSBub24tcGxh aW4tdGV4dCBhcmNoaXZlIG1hZGUgdXNpbmcKKyAgICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1w YWxsPC9hcHBsaWNhdGlvbj4sIHRoZSA8b3B0aW9uPi0tc2VjdGlvbjwvb3B0aW9uPgorICAg ICAgb3B0aW9uIG1heSBiZSB1c2VkLCBidXQgbXVzdCBpbmNsdWRlIDxvcHRpb24+cHJlLWRh dGE8L29wdGlvbj4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorCisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBjYW5u b3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBmcm9tIGEgbm9uLXBsYWluLXRleHQKKyAgICAg IGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRp b24+OgorICAgICAgPG9wdGlvbj4tYS8tLWRhdGEtb25seTwvb3B0aW9uPiwKKyAgICAgIDxv cHRpb24+LWwvLS1saXN0PC9vcHRpb24+LAorICAgICAgPG9wdGlvbj4tTC8tLXVzZS1saXN0 PC9vcHRpb24+LAorICAgICAgPG9wdGlvbj4tLW5vLXNjaGVtYTwvb3B0aW9uPiwKKyAgICAg IDxvcHRpb24+LS1zdGF0aXN0aWNzLW9ubHk8L29wdGlvbj4sIGFuZAorICAgICAgPG9wdGlv bj4tLXN0cmljdC1uYW1lczwvb3B0aW9uPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0 ZW0+CisKICAgIDwvaXRlbWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWls ZAppbmRleCA3OWJkNTAzNjg0MS4uN2M5YTQ3NTk2M2IgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQK QEAgLTEwMyw2ICsxMDMsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDRfcGdfZHVtcF9w YXJhbGxlbC5wbCcsCiAgICAgICAndC8wMDVfcGdfZHVtcF9maWx0ZXJmaWxlLnBsJywKICAg ICAgICd0LzAwNl9wZ19kdW1wX2NvbXByZXNzLnBsJywKKwkgICd0LzAwN19wZ19kdW1wYWxs LnBsJywKICAgICAgICd0LzAxMF9kdW1wX2Nvbm5zdHIucGwnLAogICAgIF0sCiAgIH0sCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYyBiL3NyYy9iaW4vcGdfZHVt cC9wYXJhbGxlbC5jCmluZGV4IDU2Y2IyYzFmMzJkLi5hMjg1NjFmYmQ4NCAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Bh cmFsbGVsLmMKQEAgLTMzMyw2ICszMzMsMjAgQEAgb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFy Y2hpdmUgKkFIWCkKIAlvbl9leGl0X25pY2VseShhcmNoaXZlX2Nsb3NlX2Nvbm5lY3Rpb24s ICZzaHV0ZG93bl9pbmZvKTsKIH0KIAorLyoKKyAqIFVwZGF0ZSB0aGUgYXJjaGl2ZSBoYW5k bGUgaW4gdGhlIG9uX2V4aXQgY2FsbGJhY2sgcmVnaXN0ZXJlZCBieQorICogb25fZXhpdF9j bG9zZV9hcmNoaXZlKCkuIFdoZW4gcGdfcmVzdG9yZSBwcm9jZXNzZXMgYSBwZ19kdW1wYWxs IGFyY2hpdmUKKyAqIGNvbnRhaW5pbmcgbXVsdGlwbGUgZGF0YWJhc2VzLCBlYWNoIGRhdGFi YXNlIGlzIHJlc3RvcmVkIGZyb20gYSBzZXBhcmF0ZQorICogYXJjaGl2ZS4gQWZ0ZXIgY2xv c2luZyBvbmUgYXJjaGl2ZSBhbmQgb3BlbmluZyB0aGUgbmV4dCwgd2UgdXBkYXRlIHRoZQor ICogc2h1dGRvd25faW5mbyB0byByZWZlcmVuY2UgdGhlIG5ldyBhcmNoaXZlIGhhbmRsZSBz byB0aGUgY2xlYW51cCBjYWxsYmFjaworICogd2lsbCBjbG9zZSB0aGUgY29ycmVjdCBhcmNo aXZlIG9uIGV4aXQuCisgKi8KK3ZvaWQKK3JlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZl KEFyY2hpdmUgKkFIWCkKK3sKKwlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsKK30KKwogLyoK ICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9yIHNodXR0aW5nIGRvd24gZGF0YWJhc2Ug Y29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vzc2VzIGNsZWFubHkuCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwLmgKaW5kZXggMmY4ZDk3OTljMzAuLmZkYTkxMmJhMGE5IDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cC5oCkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlv bnMoQXJjaGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAqcm8K IAogZXh0ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpB SFgpOwogCi1leHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0 ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRh KTsKIAogLyogT3BlbiBhbiBleGlzdGluZyBhcmNoaXZlICovCiBleHRlcm4gQXJjaGl2ZSAq T3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQg Zm10KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCA3YWZjYzA4 NTljOC4uZGY4YTY5ZDNiNzkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMKQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIGludAlSZXN0b3JpbmdUb0RCKEFyY2hpdmVI YW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFI KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0 IGNoYXIgKm1zZywgdGltZV90IHRpbSk7CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkJCQkgIGNvbnN0IHBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisJCQkJCSAgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLCBib29sIGFwcGVu ZF9kYXRhKTsKIHN0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAKQEAgLTMzOSw5ICsz MzksMTQgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpCiAJ CVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9CiAKLS8qIFB1YmxpYyAqLworLyoKKyAqIFJl c3RvcmVBcmNoaXZlCisgKgorICogSWYgYXBwZW5kX2RhdGEgaXMgc2V0LCB0aGVuIGFwcGVu ZCBkYXRhIGludG8gZmlsZSBhcyB3ZSBhcmUgcmVzdG9yaW5nIGR1bXAKKyAqIG9mIG11bHRp cGxlIGRhdGFiYXNlcyB3aGljaCB3YXMgdGFrZW4gYnkgcGdfZHVtcGFsbC4KKyAqLwogdm9p ZAotUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFyY2hpdmUoQXJjaGl2 ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFy Y2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1Ymxp Yy5yb3B0OwpAQCAtNDU4LDcgKzQ2Myw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFI WCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUg fHwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05f Tk9ORSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Np b25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXBy ZXNzaW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBv c3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTc2MSw2ICs3NjYsMTkg QEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCQkJaWYgKCh0ZS0+cmVxcyAmIChS RVFfU0NIRU1BIHwgUkVRX0RBVEEgfCBSRVFfU1RBVFMpKSA9PSAwKQogCQkJCWNvbnRpbnVl OwkJLyogaWdub3JlIGlmIG5vdCB0byBiZSBkdW1wZWQgYXQgYWxsICovCiAKKwkJCS8qIFNr aXAgaWYgbm8tdGFibGVzcGFjZSBpcyBnaXZlbi4gKi8KKwkJCWlmIChyb3B0LT5ub1RhYmxl c3BhY2UgJiYgdGUgJiYgdGUtPmRlc2MgJiYKKwkJCQkoc3RyY21wKHRlLT5kZXNjLCAiVEFC TEVTUEFDRSIpID09IDApKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogU2tpcCBE Uk9QIERBVEFCQVNFL1JPTEVTL1RBQkxFU1BBQ0UgaWYgd2UgZGlkbid0IHNwZWNpZnkKKwkJ CSAqIC0tY2xlYW4KKwkJCSAqLworCQkJaWYgKCFyb3B0LT5kcm9wU2NoZW1hICYmIHRlICYm IHRlLT5kZXNjICYmCisJCQkJc3RyY21wKHRlLT5kZXNjLCAiRFJPUF9HTE9CQUwiKSA9PSAw KQorCQkJCWNvbnRpbnVlOworCiAJCQlzd2l0Y2ggKF90b2NFbnRyeVJlc3RvcmVQYXNzKHRl KSkKIAkJCXsKIAkJCQljYXNlIFJFU1RPUkVfUEFTU19NQUlOOgpAQCAtMTMxNiw3ICsxMzM0 LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRw dXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5m aWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQt PmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYywgZmFsc2UpOwogCiAJaWYgKHN0cmZ0 aW1lKHN0YW1wX3N0ciwgc2l6ZW9mKHN0YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQs CiAJCQkJIGxvY2FsdGltZSgmQUgtPmNyZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTY5MSwxMSAr MTcwOSwxNSBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4u KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU3R1ZmYgYmVsb3cg aGVyZSBzaG91bGQgYmUgJ3ByaXZhdGUnIHRvIHRoZSBhcmNoaXZlciByb3V0aW5lcworICoK KyAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZpbGUg YXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisgKiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hp Y2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCiAgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KIAogc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwg Y29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjKQorCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJICBib29sIGFwcGVuZF9kYXRhKQogewogCUNv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CkBAIC0xNzE1LDcg KzE3MzcsNyBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZp bGVuYW1lLAogCWVsc2UKIAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCWlmIChBSC0+bW9k ZSA9PSBhcmNoTW9kZUFwcGVuZCkKKwlpZiAoYXBwZW5kX2RhdGEgfHwgQUgtPm1vZGUgPT0g YXJjaE1vZGVBcHBlbmQpCiAJCW1vZGUgPSBQR19CSU5BUllfQTsKIAllbHNlCiAJCW1vZGUg PSBQR19CSU5BUllfVzsKQEAgLTIzOTEsNyArMjQxMyw3IEBAIF9hbGxvY0FIKGNvbnN0IGNo YXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAogCS8qIGluaXRpYWxp emUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmxlIHN0cmluZyBwcm9jZXNzaW5nICovCiAJQUgt PnB1YmxpYy5lbmNvZGluZyA9IDA7CS8qIFBHX1NRTF9BU0NJSSAqLwotCUFILT5wdWJsaWMu c3RkX3N0cmluZ3MgPSBmYWxzZTsKKwlBSC0+cHVibGljLnN0ZF9zdHJpbmdzID0gdHJ1ZTsK IAogCS8qIHNxbCBlcnJvciBoYW5kbGluZyAqLwogCUFILT5wdWJsaWMuZXhpdF9vbl9lcnJv ciA9IHRydWU7CkBAIC0zMDI3LDYgKzMwNDksMTYgQEAgX3RvY0VudHJ5UmVxdWlyZWQoVG9j RW50cnkgKnRlLCB0ZVNlY3Rpb24gY3VyU2VjdGlvbiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJ CQlyZXR1cm4gMDsKIAl9CiAKKwkvKgorCSAqIEdsb2JhbCBvYmplY3QgVE9DIGVudHJpZXMg KGUuZy4sIFJPTEVzIG9yIFRBQkxFU1BBQ0VzKSBtdXN0IG5vdCBiZQorCSAqIGlnbm9yZWQu CisJICovCisJaWYgKHN0cmNtcCh0ZS0+ZGVzYywgIlJPTEUiKSA9PSAwIHx8CisJCXN0cmNt cCh0ZS0+ZGVzYywgIlJPTEUgUFJPUEVSVElFUyIpID09IDAgfHwKKwkJc3RyY21wKHRlLT5k ZXNjLCAiVEFCTEVTUEFDRSIpID09IDAgfHwKKwkJc3RyY21wKHRlLT5kZXNjLCAiRFJPUF9H TE9CQUwiKSA9PSAwKQorCQlyZXR1cm4gUkVRX1NDSEVNQTsKKwogCS8qCiAJICogUHJvY2Vz cyBleGNsdXNpb25zIHRoYXQgYWZmZWN0IGNlcnRhaW4gY2xhc3NlcyBvZiBUT0MgZW50cmll cy4KIAkgKi8KQEAgLTMwNjIsNiArMzA5NCwxNCBAQCBfdG9jRW50cnlSZXF1aXJlZChUb2NF bnRyeSAqdGUsIHRlU2VjdGlvbiBjdXJTZWN0aW9uLCBBcmNoaXZlSGFuZGxlICpBSCkKIAkJ aWYgKHJvcHQtPm5vX3N1YnNjcmlwdGlvbnMgJiYKIAkJCXN0cm5jbXAodGUtPnRhZywgIlNV QlNDUklQVElPTiIsIHN0cmxlbigiU1VCU0NSSVBUSU9OIikpID09IDApCiAJCQlyZXR1cm4g MDsKKworCQkvKgorCQkgKiBDb21tZW50cyBvbiBnbG9iYWwgb2JqZWN0cyAoUk9MRXMgb3Ig VEFCTEVTUEFDRXMpIHNob3VsZCBub3QgYmUKKwkJICogc2tpcHBlZCwgc2luY2UgZ2xvYmFs IG9iamVjdHMgdGhlbXNlbHZlcyBhcmUgbmV2ZXIgc2tpcHBlZC4KKwkJICovCisJCWlmIChz dHJuY21wKHRlLT50YWcsICJST0xFIiwgc3RybGVuKCJST0xFIikpID09IDAgfHwKKwkJCXN0 cm5jbXAodGUtPnRhZywgIlRBQkxFU1BBQ0UiLCBzdHJsZW4oIlRBQkxFU1BBQ0UiKSkgPT0g MCkKKwkJCXJldHVybiBSRVFfU0NIRU1BOwogCX0KIAogCS8qCkBAIC0zMDkxLDYgKzMxMzEs MTQgQEAgX3RvY0VudHJ5UmVxdWlyZWQoVG9jRW50cnkgKnRlLCB0ZVNlY3Rpb24gY3VyU2Vj dGlvbiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCWlmIChyb3B0LT5ub19zdWJzY3JpcHRpb25z ICYmCiAJCQlzdHJuY21wKHRlLT50YWcsICJTVUJTQ1JJUFRJT04iLCBzdHJsZW4oIlNVQlND UklQVElPTiIpKSA9PSAwKQogCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogU2VjdXJpdHkg bGFiZWxzIG9uIGdsb2JhbCBvYmplY3RzIChST0xFcyBvciBUQUJMRVNQQUNFcykgc2hvdWxk IG5vdAorCQkgKiBiZSBza2lwcGVkLCBzaW5jZSBnbG9iYWwgb2JqZWN0cyB0aGVtc2VsdmVz IGFyZSBuZXZlciBza2lwcGVkLgorCQkgKi8KKwkJaWYgKHN0cm5jbXAodGUtPnRhZywgIlJP TEUiLCBzdHJsZW4oIlJPTEUiKSkgPT0gMCB8fAorCQkJc3RybmNtcCh0ZS0+dGFnLCAiVEFC TEVTUEFDRSIsIHN0cmxlbigiVEFCTEVTUEFDRSIpKSA9PSAwKQorCQkJcmV0dXJuIFJFUV9T Q0hFTUE7CiAJfQogCiAJLyogSWYgaXQncyBhIHN1YnNjcmlwdGlvbiwgbWF5YmUgaWdub3Jl IGl0ICovCkBAIC0zODY1LDYgKzM5MTMsOSBAQCBfZ2V0T2JqZWN0RGVzY3JpcHRpb24oUFFF eHBCdWZmZXIgYnVmLCBjb25zdCBUb2NFbnRyeSAqdGUpCiAJZWxzZSBpZiAoc3RyY21wKHR5 cGUsICJDQVNUIikgPT0gMCB8fAogCQkJIHN0cmNtcCh0eXBlLCAiQ0hFQ0sgQ09OU1RSQUlO VCIpID09IDAgfHwKIAkJCSBzdHJjbXAodHlwZSwgIkNPTlNUUkFJTlQiKSA9PSAwIHx8CisJ CQkgc3RyY21wKHR5cGUsICJEUk9QX0dMT0JBTCIpID09IDAgfHwKKwkJCSBzdHJjbXAodHlw ZSwgIlJPTEUgUFJPUEVSVElFUyIpID09IDAgfHwKKwkJCSBzdHJjbXAodHlwZSwgIlJPTEUi KSA9PSAwIHx8CiAJCQkgc3RyY21wKHR5cGUsICJEQVRBQkFTRSBQUk9QRVJUSUVTIikgPT0g MCB8fAogCQkJIHN0cmNtcCh0eXBlLCAiREVGQVVMVCIpID09IDAgfHwKIAkJCSBzdHJjbXAo dHlwZSwgIkZLIENPTlNUUkFJTlQiKSA9PSAwIHx8CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmgKaW5kZXggMzI1YjUzZmM5YmQuLjM2NTA3M2IzZWFlIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zOTQsNiArMzk0LDcgQEAgc3RydWN0 IF90b2NFbnRyeQogCiBleHRlcm4gaW50CXBhcmFsbGVsX3Jlc3RvcmUoQXJjaGl2ZUhhbmRs ZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBleHRlcm4gdm9pZCBvbl9leGl0X2Nsb3NlX2FyY2hp dmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vfb25fZXhpdF9jbG9zZV9h cmNoaXZlKEFyY2hpdmUgKkFIWCk7CiAKIGV4dGVybiB2b2lkIHdhcm5fb3JfZXhpdF9ob3Jy aWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmli dXRlX3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKaW5kZXggYjVi YTNiNDZkZDkuLmQ5NGQwZGUyYTVkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKQEAg LTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlz YXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2Ug PSAwOwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFy Y2hpdmUoKEFyY2hpdmUgKikgQUgsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygo QXJjaGl2ZSAqKSBBSCwgc2F2RG9wdCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4 IDQ1MGNlYzI4NWIzLi5jZTI5NjI3MDUwZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0xMjkyLDcg KzEyOTIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiByaWdodCBub3cu CiAJICovCiAJaWYgKHBsYWluVGV4dCkKLQkJUmVzdG9yZUFyY2hpdmUoZm91dCk7CisJCVJl c3RvcmVBcmNoaXZlKGZvdXQsIGZhbHNlKTsKIAogCUNsb3NlQXJjaGl2ZShmb3V0KTsKIApk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggOTgzODlkMjAzNGMuLmNiYjYxNTBhYjQwIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTEsMTMgKzEsMjAgQEAKIC8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICoKICAqIHBnX2R1bXBhbGwuYworICoJICBwZ19kdW1wYWxsIGR1bXBzIGFsbCBk YXRhYmFzZXMgYW5kIGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQKKyAqCSAgdGFibGVzcGFj ZXMpIGZyb20gYSBQb3N0Z3JlU1FMIGNsdXN0ZXIuCisgKgorICoJICBGb3IgdGV4dCBmb3Jt YXQgb3V0cHV0LCBnbG9iYWxzIGFyZSB3cml0dGVuIGRpcmVjdGx5IGFuZCBwZ19kdW1wIGlz CisgKgkgIGludm9rZWQgZm9yIGVhY2ggZGF0YWJhc2UsIHdpdGggYWxsIG91dHB1dCBnb2lu ZyB0byBzdGRvdXQgb3IgYSBmaWxlLgorICoKKyAqCSAgRm9yIG5vbi10ZXh0IGZvcm1hdHMg KGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIpLCBhIGRpcmVjdG9yeSBpcyBjcmVhdGVkCisgKgkg IGNvbnRhaW5pbmcgYSB0b2MuZ2xvIGZpbGUgd2l0aCBnbG9iYWwgb2JqZWN0cywgYSBtYXAu ZGF0IGZpbGUgbWFwcGluZworICoJICBkYXRhYmFzZSBPSURzIHRvIG5hbWVzLCBhbmQgYSBk YXRhYmFzZXMvIHN1YmRpcmVjdG9yeSB3aXRoIGluZGl2aWR1YWwKKyAqCSAgcGdfZHVtcCBh cmNoaXZlcyBmb3IgZWFjaCBkYXRhYmFzZS4KICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCiAgKgotICogcGdfZHVtcGFsbCBmb3JjZXMgYWxsIHBnX2R1bXAg b3V0cHV0IHRvIGJlIHRleHQsIHNpbmNlIGl0IGFsc28gb3V0cHV0cwotICogdGV4dCBpbnRv IHRoZSBzYW1lIG91dHB1dCBzdHJlYW0uCi0gKgogICogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXBhbGwuYwogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzAsNiArMzcsNyBAQAog I2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5o IgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hp dmVyLmgiCiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVt cCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkg IiBQR19WRVJTSU9OICJcbiIKQEAgLTY3LDE1ICs3NSwxOCBAQCBzdGF0aWMgdm9pZCBkcm9w REJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKIHN0YXRpYyB2b2lkIGR1bXBEYXRhYmFz ZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hh ciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29u c3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hh ciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlKTsKIHN0 YXRpYyB2b2lkIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJCQkJCSBjb25z dCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29uc3QgY2hh ciAqb2JqdHlwZSwgY29uc3QgY2hhciAqb2JqbmFtZSwKIAkJCQkJCQkgUFFFeHBCdWZmZXIg YnVmZmVyKTsKIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5kKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqcXVlcnkpOworc3RhdGljIHZvaWQgY2hlY2tfZm9yX2ludmFsaWRfZ2xvYmFs X25hbWVzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBleHBhbmRfZGJuYW1lX3BhdHRl cm5zKFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJ CSAgIFNpbXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRfZHVtcGFs bF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0 ZXJuKTsKK3N0YXRpYyBBcmNoaXZlRm9ybWF0IHBhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFy ICpmb3JtYXQpOworc3RhdGljIGludAljcmVhdGVEdW1wSWQodm9pZCk7CiAKIHN0YXRpYyBj aGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBzdGF0aWMgUFFFeHBCdWZmZXIgcGdkdW1w b3B0czsKQEAgLTEyMyw2ICsxMzQsMTAgQEAgc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0 YWJhc2VfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBTaW1wbGVT dHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAKIHN0 YXRpYyBjaGFyICpyZXN0cmljdF9rZXk7CitzdGF0aWMgQXJjaGl2ZSAqZm91dCA9IE5VTEw7 CitzdGF0aWMgaW50CWR1bXBJZFZhbCA9IDA7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBhcmNo RHVtcEZvcm1hdCA9IGFyY2hOdWxsOworc3RhdGljIGNvbnN0IENhdGFsb2dJZCBuaWxDYXRh bG9nSWQgPSB7MCwgMH07CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQpA QCAtMTQ4LDYgKzE2Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyJw YXNzd29yZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAogCQl7Im5vLXByaXZpbGVnZXMi LCBub19hcmd1bWVudCwgTlVMTCwgJ3gnfSwKIAkJeyJuby1hY2wiLCBub19hcmd1bWVudCwg TlVMTCwgJ3gnfSwKKwkJeyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0Yn fSwKIAogCQkvKgogCQkgKiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZG9uJ3QgaGF2ZSBhbiBl cXVpdmFsZW50IHNob3J0IG9wdGlvbiBsZXR0ZXIKQEAgLTE5Nyw2ICsyMTMsNyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7CiAJY2hh cgkgICAqdXNlX3JvbGUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmR1bXBlbmNvZGluZyA9IE5V TEw7CisJY29uc3QgY2hhciAqZm9ybWF0X25hbWUgPSAicCI7CiAJdHJpdmFsdWUJcHJvbXB0 X3Bhc3N3b3JkID0gVFJJX0RFRkFVTFQ7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJ Ym9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CkBAIC0yMDcsNiArMjI0LDcgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCWludAkJCWMsCiAJCQkJcmV0OwogCWludAkJCW9w dGluZGV4OworCUR1bXBPcHRpb25zIGRvcHQ7CiAKIAlwZ19sb2dnaW5nX2luaXQoYXJndlsw XSk7CiAJcGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dBUk5JTkcpOwpAQCAtMjQ0LDgg KzI2Miw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl9CiAKIAlwZ2R1bXBv cHRzID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlJbml0RHVtcE9wdGlvbnMoJmRvcHQpOwog Ci0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpP cDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hp bGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJz Uzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3 aXRjaCAoYykKIAkJewpAQCAtMjczLDcgKzI5Miw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIp OwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQli cmVhazsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0X25hbWUgPSBwZ19zdHJkdXAob3B0 YXJnKTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2cnOgogCQkJCWdsb2JhbHNfb25seSA9IHRy dWU7CiAJCQkJYnJlYWs7CkBAIC0zMTMsNiArMzM0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCiAJCQljYXNlICdVJzoKIAkJCQlwZ3VzZXIgPSBwZ19zdHJkdXAob3B0 YXJnKTsKKwkJCQlkb3B0LmNwYXJhbXMudXNlcm5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsK IAkJCQlicmVhazsKIAogCQkJY2FzZSAndic6CkBAIC00MzQsNiArNDU2LDMyIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyog R2V0IGZvcm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNoRHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZv cm1hdChmb3JtYXRfbmFtZSk7CisKKwkvKgorCSAqIElmIGEgbm9uLXBsYWluIGZvcm1hdCBp cyBzcGVjaWZpZWQsIGEgZmlsZSBuYW1lIGlzIGFsc28gcmVxdWlyZWQgYXMgdGhlCisJICog cGF0aCB0byB0aGUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0 ICE9IGFyY2hOdWxsICYmCisJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikg PT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAlcz1kfGN8dCByZXF1aXJlcyBv cHRpb24gJXMiLAorCQkJCQkgIi1GLy0tZm9ybWF0IiwgIi1mLy0tZmlsZSIpOworCQlwZ19s b2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24u IiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKKwkvKiByZXN0cmljdC1r ZXkgaXMgb25seSBzdXBwb3J0ZWQgd2l0aCAtLWZvcm1hdD1wbGFpbiAqLworCWlmIChhcmNo RHVtcEZvcm1hdCAhPSBhcmNoTnVsbCAmJiByZXN0cmljdF9rZXkpCisJCXBnX2ZhdGFsKCJv cHRpb24gJXMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoICVzPXBsYWluIiwKKwkJCQkgIi0tcmVz dHJpY3Qta2V5IiwgIi0tZm9ybWF0Iik7CisKKwkvKiAtLWNsZWFuIGFuZCAtZy8tLWdsb2Jh bHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciBpbiBub24tdGV4dCBkdW1wICovCisJ aWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmIG91dHB1dF9jbGVhbiAmJiBnbG9i YWxzX29ubHkpCisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNl ZCB0b2dldGhlciBpbiBub24tdGV4dCBkdW1wIiwKKwkJCQkgIi0tY2xlYW4iLCAiLWcvLS1n bG9iYWxzLW9ubHkiKTsKKwogCS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3Qg cmVxdWlyZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdo aWNoIGlzIGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0 cmljdGVkCkBAIC00OTQsNiArNTQyLDI3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAlpZiAoc2VxdWVuY2VfZGF0YSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1w b3B0cywgIiAtLXNlcXVlbmNlLWRhdGEiKTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0cHV0 IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQs CisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBG b3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlBc3NlcnQoZmlsZW5hbWUpOworCisJCS8qIENy ZWF0ZSBuZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0 b3J5LiAqLworCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCX0KKwllbHNlIGlm IChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7 CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxl IFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9QRiA9IHN0 ZG91dDsKKwogCS8qCiAJICogSWYgeW91IGRvbid0IHByb3ZpZGUgYSByZXN0cmljdCBrZXks IG9uZSB3aWxsIGJlIGFwcG9pbnRlZCBmb3IgeW91LgogCSAqLwpAQCAtNTQzLDE5ICs2MTIs NiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0 ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRh YmFzZV9leGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUg aWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1l KQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFP UEYpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAl bSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJ LyoKIAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBA IC01OTMsMzUgKzY0OSwxMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlm IChxdW90ZV9hbGxfaWRlbnRpZmllcnMpCiAJCWV4ZWN1dGVDb21tYW5kKGNvbm4sICJTRVQg cXVvdGVfYWxsX2lkZW50aWZpZXJzID0gdHJ1ZSIpOwogCi0JZnByaW50ZihPUEYsICItLVxu LS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIpOwotCWlmICh2 ZXJib3NlKQotCQlkdW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7Ci0KLQkvKgotCSAqIEVu dGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5leHBlY3RlZCBwc3FsIG1ldGEt Y29tbWFuZHMuICBBCi0JICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0 IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JICogcmVzcG9uc2VzIHRvIHF1ZXJp ZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMgZnJvbQotCSAqIGFm ZmVjdGluZyB0aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBjYW4gYmxvY2sg cHNxbAotCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhh dCBydW5zIHBzcWwgd2l0aCB0aGUgZHVtcAotCSAqIG91dHB1dCByZW1haW5zIHVuYWZmZWN0 ZWQuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0 X2tleSk7Ci0KLQkvKgotCSAqIFdlIHVzZWQgdG8gZW1pdCBcY29ubmVjdCBwb3N0Z3JlcyBo ZXJlLCBidXQgdGhhdCBzZXJ2ZWQgbm8gcHVycG9zZQotCSAqIG90aGVyIHRoYW4gdG8gYnJl YWsgdGhpbmdzIGZvciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3JlcwotCSAqIGRh dGFiYXNlLiAgRXZlcnl0aGluZyB3ZSdyZSByZXN0b3JpbmcgaGVyZSBpcyBhIGdsb2JhbCwg c28gd2hpY2hldmVyCi0JICogZGF0YWJhc2Ugd2UncmUgY29ubmVjdGVkIHRvIGF0IHRoZSBt b21lbnQgaXMgZmluZS4KLQkgKi8KLQotCS8qIFJlc3RvcmUgd2lsbCBuZWVkIHRvIHdyaXRl IHRvIHRoZSB0YXJnZXQgY2x1c3RlciAqLwotCWZwcmludGYoT1BGLCAiU0VUIGRlZmF1bHRf dHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuXG4iKTsKLQotCS8qIFJlcGxpY2F0ZSBl bmNvZGluZyBhbmQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzIGluIG91dHB1dCAqLwot CWZwcmludGYoT1BGLCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICclcyc7XG4iLAotCQkJcGdf ZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZykpOwotCWZwcmludGYoT1BGLCAiU0VUIHN0YW5k YXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9IG9uO1xuIik7Ci0JZnByaW50ZihPUEYsICJcbiIp OworCS8qIGNyZWF0ZSBhIGFyY2hpdmUgZmlsZSBmb3IgZ2xvYmFsIGNvbW1hbmRzLiAqLwor CWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCVBRRXhwQnVmZmVyIHFy eSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJCWNoYXIJCWdsb2JhbF9wYXRoW01BWFBHUEFU SF07CisJCWNvbnN0IGNoYXIgKmVuY25hbWU7CisJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKKworCQkvKgorCQkgKiBDaGVjayB0aGF0IG5v IGdsb2JhbCBvYmplY3QgbmFtZXMgY29udGFpbiBuZXdsaW5lcyBvciBjYXJyaWFnZQorCQkg KiByZXR1cm5zLCB3aGljaCB3b3VsZCBicmVhayB0aGUgbWFwLmRhdCBmaWxlIGZvcm1hdC4g IFRoaXMgaXMgb25seQorCQkgKiBuZWVkZWQgZm9yIHNlcnZlcnMgb2xkZXIgdGhhbiB2MTks IHdoaWNoIHN0YXJ0ZWQgcHJvaGliaXRpbmcgc3VjaAorCQkgKiBuYW1lcy4KKwkJICovCisJ CWlmIChzZXJ2ZXJfdmVyc2lvbiA8IDE5MDAwMCkKKwkJCWNoZWNrX2Zvcl9pbnZhbGlkX2ds b2JhbF9uYW1lcyhjb25uKTsKKworCQkvKiBTZXQgZmlsZSBwYXRoIGZvciBnbG9iYWwgc3Fs IGNvbW1hbmRzLiAqLworCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMv dG9jLmdsbyIsIGZpbGVuYW1lKTsKKworCQkvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSAqLwor CQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShnbG9iYWxfcGF0aCwgYXJjaEN1c3RvbSwgY29tcHJl c3Npb25fc3BlYywKKwkJCQkJCQkgZG9zeW5jLCBhcmNoTW9kZVdyaXRlLCBOVUxMLCBEQVRB X0RJUl9TWU5DX01FVEhPRF9GU1lOQyk7CisKKwkJLyogTWFrZSBkdW1wIG9wdGlvbnMgYWNj ZXNzaWJsZSByaWdodCBhd2F5ICovCisJCVNldEFyY2hpdmVPcHRpb25zKGZvdXQsICZkb3B0 LCBOVUxMKTsKKworCQkoKEFyY2hpdmVIYW5kbGUgKikgZm91dCktPmNvbm5lY3Rpb24gPSBj b25uOworCQkoKEFyY2hpdmVIYW5kbGUgKikgZm91dCktPnB1YmxpYy5udW1Xb3JrZXJzID0g MTsKKworCQkvKiBSZWdpc3RlciB0aGUgY2xlYW51cCBob29rICovCisJCW9uX2V4aXRfY2xv c2VfYXJjaGl2ZShmb3V0KTsKKworCQkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cgaG93IG5v aXN5IHRvIGJlICovCisJCWZvdXQtPnZlcmJvc2UgPSB2ZXJib3NlOworCisJCS8qCisJCSAq IFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkg bWlub3IgcmVsZWFzZQorCQkgKiBvZiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFs c28gdmVyc2lvbiBjaGVjayBpbgorCQkgKiBwZ19kdW1wYWxsLmMuKQorCQkgKi8KKwkJZm91 dC0+bWluUmVtb3RlVmVyc2lvbiA9IDkwMjAwOworCQlmb3V0LT5tYXhSZW1vdGVWZXJzaW9u ID0gKFBHX1ZFUlNJT05fTlVNIC8gMTAwKSAqIDEwMCArIDk5OworCQlmb3V0LT5udW1Xb3Jr ZXJzID0gMTsKKworCQkvKiBEdW1wIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5LiAq LworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxcnksICJTRVQgZGVmYXVsdF90cmFuc2FjdGlv bl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJ IG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJCQkgY3JlYXRlRHVtcElkKCks CS8qIGR1bXAgSUQgKi8KKwkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gImRlZmF1bHRfdHJh bnNhY3Rpb25fcmVhZF9vbmx5IiwKKwkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiZGVmYXVs dF90cmFuc2FjdGlvbl9yZWFkX29ubHkiLAorCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElP Tl9QUkVfREFUQSwKKwkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IHFyeS0+ZGF0YSkpOworCQly ZXNldFBRRXhwQnVmZmVyKHFyeSk7CisKKwkJLyogUHV0IHRoZSBjb3JyZWN0IGVuY29kaW5n IGludG8gdGhlIGFyY2hpdmUgKi8KKwkJZW5jbmFtZSA9IHBnX2VuY29kaW5nX3RvX2NoYXIo ZW5jb2RpbmcpOworCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIlNFVCBjbGllbnRf ZW5jb2RpbmcgPSAiKTsKKwkJYXBwZW5kU3RyaW5nTGl0ZXJhbEFIKHFyeSwgZW5jbmFtZSwg Zm91dCk7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIjtcbiIpOworCQlBcmNoaXZl RW50cnkoZm91dCwKKwkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJ CQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJIEFSQ0hJVkVfT1BUUygu dGFnID0gImNsaWVudF9lbmNvZGluZyIsCisJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gImNs aWVudF9lbmNvZGluZyIsCisJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRB LAorCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gcXJ5LT5kYXRhKSk7CisJCXJlc2V0UFFFeHBC dWZmZXIocXJ5KTsKKworCQkvKiBQdXQgdGhlIGNvcnJlY3QgZXNjYXBlIHN0cmluZyBiZWhh dmlvciBpbnRvIHRoZSBhcmNoaXZlLiAqLworCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICJT RVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJ29uJztcbiIpOworCQlBcmNoaXZl RW50cnkoZm91dCwKKwkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJ CQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJIEFSQ0hJVkVfT1BUUygu dGFnID0gInN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyIsCisJCQkJCQkJCSAgLmRlc2Ny aXB0aW9uID0gInN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyIsCisJCQkJCQkJCSAgLnNl Y3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gcXJ5 LT5kYXRhKSk7CisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCX0KKwllbHNlCisJewor CQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVt cFxuLS1cblxuIik7CisKKwkJaWYgKHZlcmJvc2UpCisJCQlkdW1wVGltZXN0YW1wKCJTdGFy dGVkIG9uIik7CisKKwkJLyoKKwkJICogRW50ZXIgcmVzdHJpY3RlZCBtb2RlIHRvIGJsb2Nr IGFueSB1bmV4cGVjdGVkIHBzcWwgbWV0YS1jb21tYW5kcy4gQQorCQkgKiBtYWxpY2lvdXMg c291cmNlIG1pZ2h0IHRyeSB0byBpbmplY3QgYSB2YXJpZXR5IG9mIHRoaW5ncyB2aWEgYm9n dXMKKwkJICogcmVzcG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVu dCBzdWNoIHNvdXJjZXMgZnJvbQorCQkgKiBhZmZlY3RpbmcgdGhlIGRlc3RpbmF0aW9uIGF0 IHJlc3RvcmUgdGltZSwgd2UgY2FuIGJsb2NrIHBzcWwKKwkJICogbWV0YS1jb21tYW5kcyBz byB0aGF0IHRoZSBjbGllbnQgbWFjaGluZSB0aGF0IHJ1bnMgcHNxbCB3aXRoIHRoZQorCQkg KiBkdW1wIG91dHB1dCByZW1haW5zIHVuYWZmZWN0ZWQuCisJCSAqLworCQlmcHJpbnRmKE9Q RiwgIlxccmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKworCQkvKgorCQkgKiBX ZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVk IG5vIHB1cnBvc2UKKwkJICogb3RoZXIgdGhhbiB0byBicmVhayB0aGluZ3MgZm9yIGluc3Rh bGxhdGlvbnMgd2l0aG91dCBhIHBvc3RncmVzCisJCSAqIGRhdGFiYXNlLiAgRXZlcnl0aGlu ZyB3ZSdyZSByZXN0b3JpbmcgaGVyZSBpcyBhIGdsb2JhbCwgc28KKwkJICogd2hpY2hldmVy IGRhdGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50IGlzIGZpbmUuCisJ CSAqLworCisJCS8qIFJlc3RvcmUgd2lsbCBuZWVkIHRvIHdyaXRlIHRvIHRoZSB0YXJnZXQg Y2x1c3RlciAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX3Jl YWRfb25seSA9IG9mZjtcblxuIik7CisKKwkJLyogUmVwbGljYXRlIGVuY29kaW5nIGFuZCBz dGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgaW4gb3V0cHV0ICovCisJCWZwcmludGYoT1BG LCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICclcyc7XG4iLAorCQkJCXBnX2VuY29kaW5nX3Rv X2NoYXIoZW5jb2RpbmcpKTsKKwkJZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9y bWluZ19zdHJpbmdzID0gb247XG4iKTsKKwkJZnByaW50ZihPUEYsICJcbiIpOworCX0KIAog CWlmICghZGF0YV9vbmx5ICYmICFzdGF0aXN0aWNzX29ubHkgJiYgIW5vX3NjaGVtYSkKIAl7 CkBAIC02MzAsOCArNzcyLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJ ICogZGVwZW5kZW5jeSBhbmFseXNpcyBiZWNhdXNlIGRhdGFiYXNlcyBuZXZlciBkZXBlbmQg b24gZWFjaCBvdGhlciwKIAkJICogYW5kIHRhYmxlc3BhY2VzIG5ldmVyIGRlcGVuZCBvbiBl YWNoIG90aGVyLiAgUm9sZXMgY291bGQgaGF2ZQogCQkgKiBncmFudHMgdG8gZWFjaCBvdGhl ciwgYnV0IERST1AgUk9MRSB3aWxsIGNsZWFuIHRob3NlIHVwIHNpbGVudGx5LgorCQkgKgor CQkgKiBGb3Igbm9uLXRleHQgZm9ybWF0cywgcGdfZHVtcGFsbCB1bmNvbmRpdGlvbmFsbHkg cHJvY2VzcyAtLWNsZWFuCisJCSAqIG9wdGlvbi4gSW4gY29udHJhc3QsIHBnX3Jlc3RvcmUg b25seSBhcHBsaWVzIGl0IGlmIHRoZSB1c2VyCisJCSAqIGV4cGxpY2l0bHkgcHJvdmlkZXMg dGhlIGZsYWcuICBUaGlzIGRpc2NyZXBhbmN5IHJlc29sdmVzIGNvcm5lcgorCQkgKiBjYXNl cyB3aGVyZSBwZ19yZXN0b3JlIHJlcXVpcmVzIGNsZWFudXAgaW5zdHJ1Y3Rpb25zIHRoYXQg bWF5IGJlCisJCSAqIG1pc3NpbmcgZnJvbSBhIHN0YW5kYXJkIHBnX2R1bXBhbGwgb3V0cHV0 LgogCQkgKi8KLQkJaWYgKG91dHB1dF9jbGVhbikKKwkJaWYgKG91dHB1dF9jbGVhbiB8fCBh cmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKIAkJewogCQkJaWYgKCFnbG9iYWxzX29ubHkg JiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCiAJCQkJZHJvcERCcyhjb25u KTsKQEAgLTY2NSwyOCArODEzLDQ1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAkJCWR1bXBUYWJsZXNwYWNlcyhjb25uKTsKIAl9CiAKLQkvKgotCSAqIEV4aXQgcmVzdHJp Y3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAg d2lsbAotCSAqIGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVkIG1vZGUgYWdhaW4gYXMgYXBw cm9wcmlhdGUuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwg cmVzdHJpY3Rfa2V5KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJewor CQkvKgorCQkgKiBFeGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJlZm9yZSBkdW1waW5nIHRo ZSBkYXRhYmFzZXMuICBwZ19kdW1wCisJCSAqIHdpbGwgaGFuZGxlIGVudGVyaW5nIHJlc3Ry aWN0ZWQgbW9kZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KKwkJICovCisJCWZwcmludGYoT1BG LCAiXFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJfQogCiAJaWYgKCFn bG9iYWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCiAJCWR1 bXBEYXRhYmFzZXMoY29ubik7CiAKLQlQUWZpbmlzaChjb25uKTsKKwlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCisJeworCQlQUWZpbmlzaChjb25uKTsKKworCQlpZiAodmVy Ym9zZSkKKwkJCWR1bXBUaW1lc3RhbXAoIkNvbXBsZXRlZCBvbiIpOworCQlmcHJpbnRmKE9Q RiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxu LS1cblxuIik7CiAKLQlpZiAodmVyYm9zZSkKLQkJZHVtcFRpbWVzdGFtcCgiQ29tcGxldGVk IG9uIik7Ci0JZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVz dGVyIGR1bXAgY29tcGxldGVcbi0tXG5cbiIpOworCQlpZiAoZmlsZW5hbWUpCisJCXsKKwkJ CWZjbG9zZShPUEYpOwogCi0JaWYgKGZpbGVuYW1lKQorCQkJLyogc3luYyB0aGUgcmVzdWx0 aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCisJCQlpZiAoZG9zeW5jKQorCQkJ CSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOworCQl9CisJfQorCWVsc2UK IAl7Ci0JCWZjbG9zZShPUEYpOworCQlSZXN0b3JlT3B0aW9ucyAqcm9wdDsKKworCQlyb3B0 ID0gTmV3UmVzdG9yZU9wdGlvbnMoKTsKKwkJU2V0QXJjaGl2ZU9wdGlvbnMoZm91dCwgJmRv cHQsIHJvcHQpOwogCi0JCS8qIHN5bmMgdGhlIHJlc3VsdGluZyBmaWxlLCBlcnJvcnMgYXJl IG5vdCBmYXRhbCAqLwotCQlpZiAoZG9zeW5jKQotCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZp bGVuYW1lLCBmYWxzZSk7CisJCS8qIE1hcmsgd2hpY2ggZW50cmllcyBzaG91bGQgYmUgb3V0 cHV0ICovCisJCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoZm91dCk7CisJCUNsb3Nl QXJjaGl2ZShmb3V0KTsKIAl9CiAKIAlleGl0X25pY2VseSgwKTsKQEAgLTY5NiwxMiArODYx LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHN0YXRpYyB2b2lkCiBoZWxw KHZvaWQpCiB7Ci0JcHJpbnRmKF8oIiVzIGV4cG9ydHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNl IGNsdXN0ZXIgYXMgYW4gU1FMIHNjcmlwdC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYo XygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwg c2NyaXB0IG9yIHRvIG90aGVyIGZvcm1hdHMuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRm KF8oIlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uXG4iKSwgcHJv Z25hbWUpOwogCiAJcHJpbnRmKF8oIlxuR2VuZXJhbCBvcHRpb25zOlxuIikpOwogCXByaW50 ZihfKCIgIC1mLCAtLWZpbGU9RklMRU5BTUUgICAgICAgICAgb3V0cHV0IGZpbGUgbmFtZVxu IikpOworCXByaW50ZihfKCIgIC1GLCAtLWZvcm1hdD1jfGR8dHxwICAgICAgICAgb3V0cHV0 IGZpbGUgZm9ybWF0IChjdXN0b20sIGRpcmVjdG9yeSwgdGFyLFxuIgorCQkJICIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW4gdGV4dCAoZGVmYXVsdCkpXG4iKSk7CiAJ cHJpbnRmKF8oIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgICB2ZXJib3NlIG1vZGVc biIpKTsKIAlwcmludGYoXygiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgIG91dHB1 dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKIAlwcmludGYoXygiICAt LWxvY2std2FpdC10aW1lb3V0PVRJTUVPVVQgIGZhaWwgYWZ0ZXIgd2FpdGluZyBUSU1FT1VU IGZvciBhIHRhYmxlIGxvY2tcbiIpKTsKQEAgLTc5NiwyNCArOTYzLDQ1IEBAIGRyb3BSb2xl cyhQR2Nvbm4gKmNvbm4pCiAKIAlpX3JvbG5hbWUgPSBQUWZudW1iZXIocmVzLCAicm9sbmFt ZSIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykg PiAwICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBEcm9wIHJvbGVzXG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBs ZXMocmVzKTsgaSsrKQogCXsKIAkJY29uc3QgY2hhciAqcm9sZW5hbWU7CisJCVBRRXhwQnVm ZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAkJcm9sZW5hbWUgPSBQUWdl dHZhbHVlKHJlcywgaSwgaV9yb2xuYW1lKTsKIAotCQlmcHJpbnRmKE9QRiwgIkRST1AgUk9M RSAlcyVzO1xuIiwKLQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKLQkJCQlm bXRJZChyb2xlbmFtZSkpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJ CXsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1AgUk9MRSAlcyVzO1xuIiwK KwkJCQkJCQkgIGlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAorCQkJCQkJCSAgZm10 SWQocm9sZW5hbWUpKTsKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRhdGEpOwor CQl9CisJCWVsc2UKKwkJeworCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBS T0xFIElGIEVYSVNUUyAlcztcbiIsCisJCQkJCQkJICBmbXRJZChyb2xlbmFtZSkpOworCisJ CQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cg SUQgKi8KKwkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkJIEFS Q0hJVkVfT1BUUygudGFnID0gcHNwcmludGYoIlJPTEUgJXMiLCBmbXRJZChyb2xlbmFtZSkp LAorCQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiRFJPUF9HTE9CQUwiLAorCQkJCQkJCQkJ ICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQkJCQkgIC5jcmVhdGVTdG10 ID0gZGVsUXJ5LT5kYXRhKSk7CisJCX0KKworCQlkZXN0cm95UFFFeHBCdWZmZXIoZGVsUXJ5 KTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7CiAJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAK LQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51 bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAvKgpAQCAtODIzLDYgKzEwMTEs OCBAQCBzdGF0aWMgdm9pZAogZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIHsKIAlQUUV4cEJ1 ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBRRXhwQnVmZmVyIGNvbW1lbnRf YnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQUUV4cEJ1ZmZlciBzZWNsYWJlbF9idWYg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpX29p ZCwKIAkJCQlpX3JvbG5hbWUsCkBAIC04OTQsNyArMTA4NCw3IEBAIGR1bXBSb2xlcyhQR2Nv bm4gKmNvbm4pCiAJaV9yb2xjb21tZW50ID0gUFFmbnVtYmVyKHJlcywgInJvbGNvbW1lbnQi KTsKIAlpX2lzX2N1cnJlbnRfdXNlciA9IFBRZm51bWJlcihyZXMsICJpc19jdXJyZW50X3Vz ZXIiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMp ID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICIt LVxuLS0gUm9sZXNcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhy ZXMpOyBpKyspCkBAIC05MTMsNiArMTEwMyw4IEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4p CiAJCX0KIAogCQlyZXNldFBRRXhwQnVmZmVyKGJ1Zik7CisJCXJlc2V0UFFFeHBCdWZmZXIo Y29tbWVudF9idWYpOworCQlyZXNldFBRRXhwQnVmZmVyKHNlY2xhYmVsX2J1Zik7CiAKIAkJ aWYgKGJpbmFyeV91cGdyYWRlKQogCQl7CkBAIC05ODksMTcgKzExODEsNTMgQEAgZHVtcFJv bGVzKFBHY29ubiAqY29ubikKIAogCQlpZiAoIW5vX2NvbW1lbnRzICYmICFQUWdldGlzbnVs bChyZXMsIGksIGlfcm9sY29tbWVudCkpCiAJCXsKLQkJCWFwcGVuZFBRRXhwQnVmZmVyKGJ1 ZiwgIkNPTU1FTlQgT04gUk9MRSAlcyBJUyAiLCBmbXRJZChyb2xlbmFtZSkpOwotCQkJYXBw ZW5kU3RyaW5nTGl0ZXJhbENvbm4oYnVmLCBQUWdldHZhbHVlKHJlcywgaSwgaV9yb2xjb21t ZW50KSwgY29ubik7Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihidWYsICI7XG4iKTsKKwkJ CWFwcGVuZFBRRXhwQnVmZmVyKGNvbW1lbnRfYnVmLCAiQ09NTUVOVCBPTiBST0xFICVzIElT ICIsIGZtdElkKHJvbGVuYW1lKSk7CisJCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubihjb21t ZW50X2J1ZiwgUFFnZXR2YWx1ZShyZXMsIGksIGlfcm9sY29tbWVudCksIGNvbm4pOworCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoY29tbWVudF9idWYsICI7XG4iKTsKIAkJfQogCiAJCWlm ICghbm9fc2VjdXJpdHlfbGFiZWxzKQogCQkJYnVpbGRTaFNlY0xhYmVscyhjb25uLCAicGdf YXV0aGlkIiwgYXV0aF9vaWQsCiAJCQkJCQkJICJST0xFIiwgcm9sZW5hbWUsCi0JCQkJCQkJ IGJ1Zik7CisJCQkJCQkJIHNlY2xhYmVsX2J1Zik7CiAKLQkJZnByaW50ZihPUEYsICIlcyIs IGJ1Zi0+ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJewor CQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCQlmcHJpbnRmKE9QRiwgIiVz IiwgY29tbWVudF9idWYtPmRhdGEpOworCisJCQlpZiAoc2VjbGFiZWxfYnVmLT5kYXRhWzBd ICE9ICdcMCcpCisJCQkJZnByaW50ZihPUEYsICIlcyIsIHNlY2xhYmVsX2J1Zi0+ZGF0YSk7 CisJCX0KKwkJZWxzZQorCQl7CisJCQljaGFyCSAgICp0YWcgPSBwc3ByaW50ZigiUk9MRSAl cyIsIGZtdElkKHJvbGVuYW1lKSk7CisKKwkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJ IG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJCQkJIGNyZWF0ZUR1bXBJZCgp LAkvKiBkdW1wIElEICovCisJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSB0YWcsCisJCQkJ CQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJST0xFIiwKKwkJCQkJCQkJCSAgLnNlY3Rpb24gPSBT RUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IGJ1Zi0+ZGF0YSkp OworCQkJaWYgKGNvbW1lbnRfYnVmLT5kYXRhWzBdICE9ICdcMCcpCisJCQkJQXJjaGl2ZUVu dHJ5KGZvdXQsCisJCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJ CQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkJCSBBUkNISVZFX09Q VFMoLnRhZyA9IHRhZywKKwkJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJDT01NRU5UIiwK KwkJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCQkg IC5jcmVhdGVTdG10ID0gY29tbWVudF9idWYtPmRhdGEpKTsKKworCQkJaWYgKHNlY2xhYmVs X2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJ CSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCQkgY3JlYXRlRHVtcElk KCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSB0YWcsCisJ CQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiU0VDVVJJVFkgTEFCRUwiLAorCQkJCQkJCQkJ CSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJCSAgLmNyZWF0ZVN0 bXQgPSBzZWNsYWJlbF9idWYtPmRhdGEpKTsKKwkJfQogCX0KIAogCS8qCkBAIC0xMDA3LDcg KzEyMzUsNyBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCSAqIFdlIGRvIGl0IHRoaXMg d2F5IGJlY2F1c2UgY29uZmlnIHNldHRpbmdzIGZvciByb2xlcyBjb3VsZCBtZW50aW9uIHRo ZQogCSAqIG5hbWVzIG9mIG90aGVyIHJvbGVzLgogCSAqLwotCWlmIChQUW50dXBsZXMocmVz KSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZ3VyYXRpb25z XG4tLVxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKQEAg LTEwMTUsOSArMTI0MywxMiBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCiAJUFFjbGVh cihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIAogCWRlc3Ryb3lQUUV4 cEJ1ZmZlcihidWYpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihjb21tZW50X2J1Zik7CisJZGVz dHJveVBRRXhwQnVmZmVyKHNlY2xhYmVsX2J1Zik7CiB9CiAKIApAQCAtMTAzMSw2ICsxMjYy LDcgQEAgc3RhdGljIHZvaWQKIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiB7 CiAJUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQUUV4cEJ1ZmZl ciBxdWVyeWJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJUFFFeHBCdWZmZXIgb3B0YnVm ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJc3Rh cnQgPSAwLApAQCAtMTA5Myw3ICsxMzI1LDcgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29u biAqY29ubikKIAlpX2luaGVyaXRfb3B0aW9uID0gUFFmbnVtYmVyKHJlcywgImluaGVyaXRf b3B0aW9uIik7CiAJaV9zZXRfb3B0aW9uID0gUFFmbnVtYmVyKHJlcywgInNldF9vcHRpb24i KTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4g MCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICItLVxu LS0gUm9sZSBtZW1iZXJzaGlwc1xuLS1cblxuIik7CiAKIAkvKgpAQCAtMTIyOSw4ICsxNDYx LDkgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAogCQkJCS8qIEdlbmVy YXRlIHRoZSBhY3R1YWwgR1JBTlQgc3RhdGVtZW50LiAqLwogCQkJCXJlc2V0UFFFeHBCdWZm ZXIob3B0YnVmKTsKLQkJCQlmcHJpbnRmKE9QRiwgIkdSQU5UICVzIiwgZm10SWQocm9sZSkp OwotCQkJCWZwcmludGYoT1BGLCAiIFRPICVzIiwgZm10SWQobWVtYmVyKSk7CisJCQkJcmVz ZXRQUUV4cEJ1ZmZlcihxdWVyeWJ1Zik7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnli dWYsICJHUkFOVCAlcyIsIGZtdElkKHJvbGUpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihx dWVyeWJ1ZiwgIiBUTyAlcyIsIGZtdElkKG1lbWJlcikpOwogCQkJCWlmICgqYWRtaW5fb3B0 aW9uID09ICd0JykKIAkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAiQURNSU4g T1BUSU9OIik7CiAJCQkJaWYgKGR1bXBfZ3JhbnRfb3B0aW9ucykKQEAgLTEyNTEsMTAgKzE0 ODQsMjEgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAkJCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIob3B0YnVmLCAiU0VUIEZBTFNFIik7CiAJCQkJfQogCQkJCWlmIChv cHRidWYtPmRhdGFbMF0gIT0gJ1wwJykKLQkJCQkJZnByaW50ZihPUEYsICIgV0lUSCAlcyIs IG9wdGJ1Zi0+ZGF0YSk7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5YnVmLCAiIFdJ VEggJXMiLCBvcHRidWYtPmRhdGEpOwogCQkJCWlmIChkdW1wX2dyYW50b3JzKQotCQkJCQlm cHJpbnRmKE9QRiwgIiBHUkFOVEVEIEJZICVzIiwgZm10SWQoZ3JhbnRvcikpOwotCQkJCWZw cmludGYoT1BGLCAiO1xuIik7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5YnVmLCAi IEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7CisJCQkJYXBwZW5kUFFFeHBCdWZm ZXIocXVlcnlidWYsICI7XG4iKTsKKworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNo TnVsbCkKKwkJCQkJZnByaW50ZihPUEYsICIlcyIsIHF1ZXJ5YnVmLT5kYXRhKTsKKwkJCQll bHNlCisJCQkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJCQkgbmlsQ2F0YWxvZ0lkLAkv KiBjYXRhbG9nIElEICovCisJCQkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAq LworCQkJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSBwc3ByaW50ZigiUk9MRSAlcyIsIGZt dElkKHJvbGUpKSwKKwkJCQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiUk9MRSBQUk9QRVJU SUVTIiwKKwkJCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJ CQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBxdWVyeWJ1Zi0+ZGF0YSkpOwogCQkJfQogCQl9CiAK QEAgLTEyNjUsOCArMTUwOSwxMSBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25u KQogCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOworCWRlc3Ry b3lQUUV4cEJ1ZmZlcihxdWVyeWJ1Zik7CisJZGVzdHJveVBRRXhwQnVmZmVyKG9wdGJ1Zik7 CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTEyOTMsNyArMTU0 MCw3IEBAIGR1bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQogCQkJCQkgICAiRlJPTSBw Z19jYXRhbG9nLnBnX3BhcmFtZXRlcl9hY2wgIgogCQkJCQkgICAiT1JERVIgQlkgMSIpOwog Ci0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYm IGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBS b2xlIHByaXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4iKTsK IAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQpAQCAtMTMxOCwxNCAr MTU2NSwyNSBAQCBkdW1wUm9sZUdVQ1ByaXZzKFBHY29ubiAqY29ubikKIAkJCWV4aXRfbmlj ZWx5KDEpOwogCQl9CiAKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWlm IChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBi dWYtPmRhdGEpOworCQllbHNlCisJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCSBuaWxD YXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyog ZHVtcCBJRCAqLworCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gcHNwcmludGYoIlJPTEUg JXMiLCBmbXRJZChwYXJvd25lcikpLAorCQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiUk9M RSBQUk9QRVJUSUVTIiwKKwkJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRB LAorCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IGJ1Zi0+ZGF0YSkpOwogCiAJCWZyZWUoZnBh cm5hbWUpOwogCQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNsZWFyKHJl cyk7Ci0JZnByaW50ZihPUEYsICJcblxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTEzNDcsMjEg KzE2MDUsNDEgQEAgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIAkJCQkJICAgIldI RVJFIHNwY25hbWUgIX4gJ15wZ18nICIKIAkJCQkJICAgIk9SREVSIEJZIDEiKTsKIAotCWlm IChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCB0 YWJsZXNwYWNlc1xuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJl cyk7IGkrKykKIAl7CiAJCWNoYXIJICAgKnNwY25hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwg MCk7CisJCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKLQkJ ZnByaW50ZihPUEYsICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCi0JCQkJaWZfZXhpc3Rz ID8gIklGIEVYSVNUUyAiIDogIiIsCi0JCQkJZm10SWQoc3BjbmFtZSkpOworCQlpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCXsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKGRl bFFyeSwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKKwkJCQkJCQkgIGlmX2V4aXN0cyA/ ICJJRiBFWElTVFMgIiA6ICIiLAorCQkJCQkJCSAgZm10SWQoc3BjbmFtZSkpOworCQkJZnBy aW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlh cHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFRBQkxFU1BBQ0UgSUYgRVhJU1RTICVz O1xuIiwKKwkJCQkJCQkgIGZtdElkKHNwY25hbWUpKTsKKwkJCUFyY2hpdmVFbnRyeShmb3V0 LAorCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJCQkJIGNyZWF0 ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSBw c3ByaW50ZigiVEFCTEVTUEFDRSAlcyIsIGZtdElkKHNwY25hbWUpKSwKKwkJCQkJCQkJCSAg LmRlc2NyaXB0aW9uID0gIkRST1BfR0xPQkFMIiwKKwkJCQkJCQkJCSAgLnNlY3Rpb24gPSBT RUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IGRlbFFyeS0+ZGF0 YSkpOworCQl9CisKKwkJZGVzdHJveVBRRXhwQnVmZmVyKGRlbFFyeSk7CiAJfQogCiAJUFFj bGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogLyoKQEAg LTEzNzEsNiArMTY0OSw4IEBAIHN0YXRpYyB2b2lkCiBkdW1wVGFibGVzcGFjZXMoUEdjb25u ICpjb25uKQogewogCVBHcmVzdWx0ICAgKnJlczsKKwlQUUV4cEJ1ZmZlciBjb21tZW50X2J1 ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgc2VjbGFiZWxfYnVmID0g Y3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlpbnQJCQlpOwogCiAJLyoKQEAgLTEzODcsNyArMTY2 Nyw3IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJXSEVSRSBz cGNuYW1lICF+ICdecGdfJyAiCiAJCQkJCSAgICJPUkRFUiBCWSAxIik7CiAKLQlpZiAoUFFu dHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIFRhYmxlc3BhY2Vz XG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQpA QCAtMTQwNiw2ICsxNjg2LDkgQEAgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIAkJ LyogbmVlZGVkIGZvciBidWlsZEFDTENvbW1hbmRzKCkgKi8KIAkJZnNwY25hbWUgPSBwZ19z dHJkdXAoZm10SWQoc3BjbmFtZSkpOwogCisJCXJlc2V0UFFFeHBCdWZmZXIoY29tbWVudF9i dWYpOworCQlyZXNldFBRRXhwQnVmZmVyKHNlY2xhYmVsX2J1Zik7CisKIAkJaWYgKGJpbmFy eV91cGdyYWRlKQogCQl7CiAJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihidWYsICJcbi0tIEZv ciBiaW5hcnkgdXBncmFkZSwgbXVzdCBwcmVzZXJ2ZSBwZ190YWJsZXNwYWNlIG9pZFxuIik7 CkBAIC0xNDQ3LDI0ICsxNzMwLDY3IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4p CiAKIAkJaWYgKCFub19jb21tZW50cyAmJiBzcGNjb21tZW50ICYmIHNwY2NvbW1lbnRbMF0g IT0gJ1wwJykKIAkJewotCQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiQ09NTUVOVCBPTiBU QUJMRVNQQUNFICVzIElTICIsIGZzcGNuYW1lKTsKLQkJCWFwcGVuZFN0cmluZ0xpdGVyYWxD b25uKGJ1Ziwgc3BjY29tbWVudCwgY29ubik7Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihi dWYsICI7XG4iKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKGNvbW1lbnRfYnVmLCAiQ09NTUVO VCBPTiBUQUJMRVNQQUNFICVzIElTICIsIGZzcGNuYW1lKTsKKwkJCWFwcGVuZFN0cmluZ0xp dGVyYWxDb25uKGNvbW1lbnRfYnVmLCBzcGNjb21tZW50LCBjb25uKTsKKwkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKGNvbW1lbnRfYnVmLCAiO1xuIik7CiAJCX0KIAogCQlpZiAoIW5vX3Nl Y3VyaXR5X2xhYmVscykKIAkJCWJ1aWxkU2hTZWNMYWJlbHMoY29ubiwgInBnX3RhYmxlc3Bh Y2UiLCBzcGNvaWQsCiAJCQkJCQkJICJUQUJMRVNQQUNFIiwgc3BjbmFtZSwKLQkJCQkJCQkg YnVmKTsKKwkJCQkJCQkgc2VjbGFiZWxfYnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwg YnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQl7CisJ CQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKworCQkJaWYgKGNvbW1lbnRfYnVm LT5kYXRhWzBdICE9ICdcMCcpCisJCQkJZnByaW50ZihPUEYsICIlcyIsIGNvbW1lbnRfYnVm LT5kYXRhKTsKKworCQkJaWYgKHNlY2xhYmVsX2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJ CWZwcmludGYoT1BGLCAiJXMiLCBzZWNsYWJlbF9idWYtPmRhdGEpOworCQl9CisJCWVsc2UK KwkJeworCQkJY2hhcgkgICAqdGFnID0gcHNwcmludGYoIlRBQkxFU1BBQ0UgJXMiLCBmbXRJ ZChmc3BjbmFtZSkpOworCisJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCSBuaWxDYXRh bG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVt cCBJRCAqLworCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAorCQkJCQkJCQkJICAu ZGVzY3JpcHRpb24gPSAiVEFCTEVTUEFDRSIsCisJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VD VElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBidWYtPmRhdGEpKTsK KworCQkJaWYgKGNvbW1lbnRfYnVmLT5kYXRhWzBdICE9ICdcMCcpCisJCQkJQXJjaGl2ZUVu dHJ5KGZvdXQsCisJCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJ CQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkJCSBBUkNISVZFX09Q VFMoLnRhZyA9IHRhZywKKwkJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJDT01NRU5UIiwK KwkJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCQkg IC5jcmVhdGVTdG10ID0gY29tbWVudF9idWYtPmRhdGEpKTsKKworCQkJaWYgKHNlY2xhYmVs X2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJ CSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCQkgY3JlYXRlRHVtcElk KCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSB0YWcsCisJ CQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiU0VDVVJJVFkgTEFCRUwiLAorCQkJCQkJCQkJ CSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJCSAgLmNyZWF0ZVN0 bXQgPSBzZWNsYWJlbF9idWYtPmRhdGEpKTsKKwkJfQogCiAJCWZyZWUoZnNwY25hbWUpOwog CQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7Ci0JZnBy aW50ZihPUEYsICJcblxuIik7CisJZGVzdHJveVBRRXhwQnVmZmVyKGNvbW1lbnRfYnVmKTsK KwlkZXN0cm95UFFFeHBCdWZmZXIoc2VjbGFiZWxfYnVmKTsKKworCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAt MTQ4NywxMiArMTgxMywxMyBAQCBkcm9wREJzKFBHY29ubiAqY29ubikKIAkJCQkJICAgIldI RVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9S REVSIEJZIGRhdG5hbWUiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBR bnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnBy aW50ZihPUEYsICItLVxuLS0gRHJvcCBkYXRhYmFzZXMgKGV4Y2VwdCBwb3N0Z3JlcyBhbmQg dGVtcGxhdGUxKVxuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJl cyk7IGkrKykKIAl7CiAJCWNoYXIJICAgKmRibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAw KTsKKwkJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCQkv KgogCQkgKiBTa2lwICJwb3N0Z3JlcyIgYW5kICJ0ZW1wbGF0ZTEiOyBkdW1wRGF0YWJhc2Vz KCkgd2lsbCBkZWFsIHdpdGgKQEAgLTE1MDMsMTUgKzE4MzAsMzUgQEAgZHJvcERCcyhQR2Nv bm4gKmNvbm4pCiAJCQlzdHJjbXAoZGJuYW1lLCAidGVtcGxhdGUwIikgIT0gMCAmJgogCQkJ c3RyY21wKGRibmFtZSwgInBvc3RncmVzIikgIT0gMCkKIAkJewotCQkJZnByaW50ZihPUEYs ICJEUk9QIERBVEFCQVNFICVzJXM7XG4iLAotCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RT ICIgOiAiIiwKLQkJCQkJZm10SWQoZGJuYW1lKSk7CisJCQlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCQl7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJP UCBEQVRBQkFTRSAlcyVzO1xuIiwKKwkJCQkJCQkJICBpZl9leGlzdHMgPyAiSUYgRVhJU1RT ICIgOiAiIiwKKwkJCQkJCQkJICBmbXRJZChkYm5hbWUpKTsKKwkJCQlmcHJpbnRmKE9QRiwg IiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlhcHBlbmRQ UUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIERBVEFCQVNFIElGIEVYSVNUUyAlcztcbiIsCisJ CQkJCQkJCSAgZm10SWQoZGJuYW1lKSk7CisKKwkJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJ CQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCQkJIGNyZWF0ZUR1 bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gcHNw cmludGYoIkRBVEFCQVNFICVzIiwgZm10SWQoZGJuYW1lKSksCisJCQkJCQkJCQkJICAuZGVz Y3JpcHRpb24gPSAiRFJPUF9HTE9CQUwiLAorCQkJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNU SU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBkZWxRcnktPmRhdGEp KTsKKwkJCX0KKworCQkJZGVzdHJveVBRRXhwQnVmZmVyKGRlbFFyeSk7CiAJCX0KIAl9CiAK IAlQUWNsZWFyKHJlcyk7CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAK QEAgLTE1MzMsNyArMTg4MCw3IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqdXNlcm5hbWUpCiAKIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgYnVmLT5k YXRhKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMp ID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAl7CiAJCWNoYXIJICAgKnNh bml0aXplZDsKIApAQCAtMTU0OCw3ICsxODk1LDE3IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1h bmQoY29ubiwgUFFnZXR2YWx1ZShyZXMsIGksIDApLAogCQkJCQkJCSAgICJST0xFIiwgdXNl cm5hbWUsIE5VTEwsIE5VTEwsCiAJCQkJCQkJICAgYnVmKTsKLQkJZnByaW50ZihPUEYsICIl cyIsIGJ1Zi0+ZGF0YSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCUFyY2hpdmVF bnRyeShmb3V0LAorCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJ CQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkgQVJDSElWRV9PUFRT KC50YWcgPSBwc3ByaW50ZigiUk9MRSAlcyIsIGZtdElkKHVzZXJuYW1lKSksCisJCQkJCQkJ CQkgIC5kZXNjcmlwdGlvbiA9ICJST0xFIFBST1BFUlRJRVMiLAorCQkJCQkJCQkJICAuc2Vj dGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gYnVm LT5kYXRhKSk7CiAJfQogCiAJUFFjbGVhcihyZXMpOwpAQCAtMTYxOCw2ICsxOTc1LDkgQEAg ZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWlu dAkJCWk7CisJY2hhcgkJZGJfc3ViZGlyW01BWFBHUEFUSF07CisJY2hhcgkJZGJmaWxlcGF0 aFtNQVhQR1BBVEhdOworCUZJTEUJICAgKm1hcF9maWxlID0gTlVMTDsKIAogCS8qCiAJICog U2tpcCBkYXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUg dW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE2MzEsMTkgKzE5OTEsNTkgQEAgZHVtcERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNvbWUgZmFpbHVyZSBtb2RlIHdp dGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJICAg IlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgogCQkJ CQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29u biBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1l IDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4g MCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNcbi0tXG5cbiIpOwogCisJ LyoKKwkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1c3RvbSBmb3JtYXQgaXMgc3BlY2lmaWVkLCBj cmVhdGUgYSBzdWJkaXJlY3RvcnkKKwkgKiB1bmRlciB0aGUgbWFpbiBkaXJlY3RvcnkgYW5k IGVhY2ggZGF0YWJhc2UgZHVtcCBmaWxlIG9yIHN1YmRpcmVjdG9yeQorCSAqIHdpbGwgYmUg Y3JlYXRlZCBpbiB0aGF0IHN1YmRpcmVjdG9yeSBieSBwZ19kdW1wLgorCSAqLworCWlmIChh cmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNoYXIJCW1hcF9maWxlX3BhdGhb TUFYUEdQQVRIXTsKKwkJY2hhcgkgICAqbWFwX3ByZWFtYmxlW10gPSB7CisJCQkiIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMiLAorCQkJIiMgbWFwLmRhdCIsCisJCQkiIyIsCisJCQkiIyBUaGlzIGZpbGUgbWFw cyBvaWRzIHRvIGRhdGFiYXNlIG5hbWVzIiwKKwkJCSIjIiwKKwkJCSIjIHBnX3Jlc3RvcmUg d2lsbCByZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2VzIGxpc3RlZCBoZXJlLCB1bmxlc3MiLAor CQkJIiMgb3RoZXJ3aXNlIGV4Y2x1ZGVkLiBZb3UgY2FuIGFsc28gaW5oaWJpdCByZXN0b3Jh dGlvbiBvZiBhIiwKKwkJCSIjIGRhdGFiYXNlIGJ5IHJlbW92aW5nIHRoZSBsaW5lIG9yIGNv bW1lbnRpbmcgb3V0IHRoZSBsaW5lIHdpdGgiCisJCQkiIyBhICMgbWFyay4iLAorCQkJIiMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIiwKKwkJCU5VTEwKKwkJfTsKKworCQlzbnByaW50ZihkYl9zdWJkaXIsIE1B WFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBz dWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5 LiAqLworCQlpZiAobWtkaXIoZGJfc3ViZGlyLCBwZ19kaXJfY3JlYXRlX21vZGUpICE9IDAp CisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIs IGRiX3N1YmRpcik7CisKKwkJc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAi JXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBtYXAgZmlsZSAodG8g c3RvcmUgZGJvaWQgYW5kIGRibmFtZSkgKi8KKwkJbWFwX2ZpbGUgPSBmb3BlbihtYXBfZmls ZV9wYXRoLCBQR19CSU5BUllfVyk7CisJCWlmICghbWFwX2ZpbGUpCisJCQlwZ19mYXRhbCgi Y291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2ZpbGVfcGF0aCk7CisKKwkJ Zm9yIChjaGFyICoqbGluZSA9IG1hcF9wcmVhbWJsZTsgKmxpbmU7IGxpbmUrKykKKwkJCWZw cmludGYobWFwX2ZpbGUsICIlc1xuIiwgKmxpbmUpOworCX0KKwogCWZvciAoaSA9IDA7IGkg PCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2 YWx1ZShyZXMsIGksIDApOwogCQljaGFyCSAgICpzYW5pdGl6ZWQ7Ci0JCWNvbnN0IGNoYXIg KmNyZWF0ZV9vcHRzOworCQljaGFyCSAgICpvaWQgPSBQUWdldHZhbHVlKHJlcywgaSwgMSk7 CisJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzID0gIiI7CiAJCWludAkJCXJldDsKIAogCQkv KiBTa2lwIHRlbXBsYXRlMCwgZXZlbiBpZiBpdCdzIG5vdCBtYXJrZWQgIWRhdGFsbG93Y29u bi4gKi8KQEAgLTE2NjAsNyArMjA2MCwxMCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29u bikKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsK IAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKGRibmFtZSwgdHJ1ZSk7Ci0JCWZwcmlu dGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6 ZWQpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYo T1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQp OworCiAJCWZyZWUoc2FuaXRpemVkKTsKIAogCQkvKgpAQCAtMTY3NSwyNCArMjA3OCw0MCBA QCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJewogCQkJaWYgKG91dHB1dF9jbGVh bikKIAkJCQljcmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKLQkJCWVsc2UKLQkJ CXsKLQkJCQljcmVhdGVfb3B0cyA9ICIiOwotCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3Qg ZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KKwkJCS8qIFNpbmNlIHBnX2R1 bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KKwkJCWVsc2Ug aWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQkJCWZwcmludGYoT1BGLCAiXFxj b25uZWN0ICVzXG5cbiIsIGRibmFtZSk7Ci0JCQl9CisJCQllbHNlCisJCQkJY3JlYXRlX29w dHMgPSAiIjsKIAkJfQogCQllbHNlCiAJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7CiAK LQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1l LCBjcmVhdGVfb3B0cyk7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9y bWF0IGR1bXAsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1h cC5kYXQgZmlsZS4KKwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkK KwkJeworCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQkJc25wcmlu dGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIi5kbXAiLCBkYl9zdWJk aXIsIG9pZCk7CisJCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJ CXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIudGFyIiwg ZGJfc3ViZGlyLCBvaWQpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1B WFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIiLCBkYl9zdWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1 dCBvbmUgbGluZSBlbnRyeSBmb3IgZGJvaWQgYW5kIGRibmFtZSBpbiBtYXAgZmlsZS4gKi8K KwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lkLCBkYm5hbWUpOworCQl9CisK KwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMsIGRiZmlsZXBhdGgpOwog CQlpZiAocmV0ICE9IDApCiAJCQlwZ19mYXRhbCgicGdfZHVtcCBmYWlsZWQgb24gZGF0YWJh c2UgXCIlc1wiLCBleGl0aW5nIiwgZGJuYW1lKTsKIAotCQlpZiAoZmlsZW5hbWUpCisJCWlm IChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJewogCQkJT1BG ID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BGKQpAQCAtMTcw MSw2ICsyMTIwLDEwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl9CiAJfQog CisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51 bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFyKHJlcyk7CiB9CiAKQEAgLTE3 MTAsNyArMjEzMyw3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogICogUnVuIHBn X2R1bXAgb24gZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgogICovCiBzdGF0aWMg aW50Ci1ydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVf b3B0cykKK3J1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0 ZV9vcHRzLCBjaGFyICpkYmZpbGUpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7 CiAJUFFFeHBCdWZmZXJEYXRhIGNtZDsKQEAgLTE3MTksMTcgKzIxNDIsMzYgQEAgcnVuUGdE dW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5p dFBRRXhwQnVmZmVyKCZjb25uc3RyYnVmKTsKIAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAK LQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4s Ci0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOwotCiAJLyoKLQkgKiBJ ZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVu ZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9y bWF0IGR1bXAsIHRoZW4gYXBwZW5kIGZpbGUgbmFtZSBhbmQgZHVtcAorCSAqIGZvcm1hdCB0 byB0aGUgcGdfZHVtcCBjb21tYW5kIHRvIGdldCBhcmNoaXZlIGR1bXAuCiAJICovCi0JaWYg KGZpbGVuYW1lKQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwlp ZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlwcmludGZQUUV4cEJ1ZmZl cigmY21kLCAiXCIlc1wiICVzIC1mICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIHBn ZHVtcG9wdHMtPmRhdGEsIGRiZmlsZSwgY3JlYXRlX29wdHMpOworCisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoRGlyZWN0b3J5KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNt ZCwgIiAgLS1mb3JtYXQ9ZGlyZWN0b3J5ICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoQ3VzdG9tKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1m b3JtYXQ9Y3VzdG9tICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFy KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9dGFyICIpOwor CX0KIAllbHNlCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCXsK KwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmlu LAorCQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7CisKKwkJLyoKKwkJ ICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1h cHBlbmQgcGdfZHVtcAorCQkgKiBmb3JtYXQuCisJCSAqLworCQlpZiAoZmlsZW5hbWUpCisJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwkJZWxzZQorCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJLyoKIAkgKiBBcHBl bmQgdGhlIGRhdGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0ZWQgc3RlbSBv ZiBjb25uZWN0aW9uCkBAIC0xODAzLDYgKzIyNDUsNjYgQEAgZXhlY3V0ZUNvbW1hbmQoUEdj b25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKIH0KIAogCisvKgorICogY2hlY2tfZm9y X2ludmFsaWRfZ2xvYmFsX25hbWVzCisgKgorICogQ2hlY2sgdGhhdCBubyBkYXRhYmFzZSwg cm9sZSwgb3IgdGFibGVzcGFjZSBuYW1lIGNvbnRhaW5zIGEgbmV3bGluZSBvcgorICogY2Fy cmlhZ2UgcmV0dXJuIGNoYXJhY3Rlci4gIFN1Y2ggY2hhcmFjdGVycyB3b3VsZCBicmVhayB0 aGUgbWFwLmRhdCBmaWxlCisgKiBmb3JtYXQgdXNlZCBmb3Igbm9uLXBsYWluLXRleHQgZHVt cHMuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19mb3JfaW52YWxpZF9nbG9iYWxfbmFtZXMo UEdjb25uICpjb25uKQoreworCVBHcmVzdWx0ICAgKnJlczsKKwlpbnQJCQlpOworCVBRRXhw QnVmZmVyIG5hbWVzOworCWludAkJCWNvdW50ID0gMDsKKworCXJlcyA9IGV4ZWN1dGVRdWVy eShjb25uLAorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUgQVMgb2JqbmFtZSwgJ2RhdGFiYXNl JyBBUyBvYmp0eXBlICIKKwkJCQkJICAgIkZST00gcGdfY2F0YWxvZy5wZ19kYXRhYmFzZSAi CisJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5saW1pdCAhPSAtMiAi CisJCQkJCSAgICJVTklPTiBBTEwgIgorCQkJCQkgICAiU0VMRUNUIHJvbG5hbWUgQVMgb2Jq bmFtZSwgJ3JvbGUnIEFTIG9ianR5cGUgIgorCQkJCQkgICAiRlJPTSBwZ19jYXRhbG9nLnBn X3JvbGVzICIKKwkJCQkJICAgIlVOSU9OIEFMTCAiCisJCQkJCSAgICJTRUxFQ1Qgc3BjbmFt ZSBBUyBvYmpuYW1lLCAndGFibGVzcGFjZScgQVMgb2JqdHlwZSAiCisJCQkJCSAgICJGUk9N IHBnX2NhdGFsb2cucGdfdGFibGVzcGFjZSIpOworCisJbmFtZXMgPSBjcmVhdGVQUUV4cEJ1 ZmZlcigpOworCisJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCisJewor CQljaGFyCSAgICpvYmpuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOworCQljaGFyCSAg ICpvYmp0eXBlID0gUFFnZXR2YWx1ZShyZXMsIGksIDEpOworCisJCWlmIChzdHJwYnJrKG9i am5hbWUsICJcblxyIikpCisJCXsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKG5hbWVzLCAiICAl czogXCIiLCBvYmp0eXBlKTsKKwkJCWZvciAoY2hhciAqcCA9IG9iam5hbWU7ICpwOyBwKysp CisJCQl7CisJCQkJaWYgKCpwID09ICdcbicpCisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KG5hbWVzLCAiXFxuIik7CisJCQkJZWxzZSBpZiAoKnAgPT0gJ1xyJykKKwkJCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIobmFtZXMsICJcXHIiKTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFBR RXhwQnVmZmVyQ2hhcihuYW1lcywgKnApOworCQkJfQorCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIobmFtZXMsICJcIlxuIik7CisJCQljb3VudCsrOworCQl9CisJfQorCisJUFFjbGVhcihy ZXMpOworCisJaWYgKGNvdW50ID4gMCkKKwkJcGdfZmF0YWwoImRhdGFiYXNlLCByb2xlLCBv ciB0YWJsZXNwYWNlIG5hbWVzIGNvbnRhaW4gYSBuZXdsaW5lIG9yIGNhcnJpYWdlIHJldHVy biBjaGFyYWN0ZXIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbm9uLXBsYWluLXRleHQg ZHVtcHM6XG4lcyIsCisJCQkJIG5hbWVzLT5kYXRhKTsKKworCWRlc3Ryb3lQUUV4cEJ1ZmZl cihuYW1lcyk7Cit9CisKKwogLyoKICAqIGR1bXBUaW1lc3RhbXAKICAqLwpAQCAtMTg3NCwz ICsyMzc2LDQ3IEBAIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1l LCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7 CiB9CisKKy8qCisgKiBwYXJzZUR1bXBGb3JtYXQKKyAqCisgKiBUaGlzIHdpbGwgdmFsaWRh dGUgZHVtcCBmb3JtYXRzLgorICovCitzdGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1w Rm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0IGFyY2hEdW1w Rm9ybWF0OworCisJaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZv cm1hdCwgImN1c3RvbSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImQiKSA9PSAwKQorCQlhcmNoRHVt cEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3Jt YXQsICJkaXJlY3RvcnkiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rv cnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwIikgPT0gMCkKKwkJYXJj aER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNl IGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1h dCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0YXIiKSA9 PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZQorCQlwZ19mYXRhbCgi dW5yZWNvZ25pemVkIG91dHB1dCBmb3JtYXQgXCIlc1wiOyBwbGVhc2Ugc3BlY2lmeSBcImNc IiwgXCJkXCIsIFwicFwiLCBvciBcInRcIiIsCisJCQkJIGZvcm1hdCk7CisKKwlyZXR1cm4g YXJjaER1bXBGb3JtYXQ7Cit9CisKKy8qCisgKiBjcmVhdGVEdW1wSWQKKyAqCisgKiBSZXR1 cm4gdGhlIG5leHQgZHVtcElkLgorICovCitzdGF0aWMgaW50CitjcmVhdGVEdW1wSWQodm9p ZCkKK3sKKwlyZXR1cm4gKytkdW1wSWRWYWw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwppbmRl eCA4NGI4ZDQxMGM5ZS4uMTRkODg2ZmM4NmUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19yZXN0b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAt Miw3ICsyLDcgQEAKICAqCiAgKiBwZ19yZXN0b3JlLmMKICAqCXBnX3Jlc3RvcmUgaXMgYW4g dXRpbGl0eSBleHRyYWN0aW5nIHBvc3RncmVzIGRhdGFiYXNlIGRlZmluaXRpb25zCi0gKglm cm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wIHVzaW5nIHRoZSBhcmNo aXZlcgorICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC9wZ19k dW1wYWxsIHVzaW5nIHRoZSBhcmNoaXZlcgogICoJaW50ZXJmYWNlLgogICoKICAqCXBnX3Jl c3RvcmUgd2lsbCByZWFkIHRoZSBiYWNrdXAgYXJjaGl2ZSBhbmQKQEAgLTQxLDEyICs0MSwx NiBAQAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNpbmNsdWRlIDxjdHlwZS5oPgor I2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaWZkZWYgSEFWRV9URVJNSU9TX0gKICNpbmNsdWRl IDx0ZXJtaW9zLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNp bmNsdWRlICJjb25uZWN0ZGIuaCIKICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNsdWRl ICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdf dXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5o IgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCkBAIC01NCwxOCArNTgsNDEgQEAKIAogc3RhdGlj IHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9y ZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpv cHRzKTsKK3N0YXRpYyBib29sIGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShjb25zdCBjaGFy ICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyBpbnQJcmVzdG9yZV9vbmVf ZGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9w dHMsCisJCQkJCQkJCSBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSk7CitzdGF0 aWMgaW50CXJlc3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3Bl YywgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOworCitzdGF0aWMgaW50CXJlc3RvcmVfYWxsX2Rh dGFiYXNlcyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAorCQkJCQkJCQkgIFNpbXBsZVN0 cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGlu dCBudW1Xb3JrZXJzKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3Jl KFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xp c3QsCisJCQkJCQkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKTsK K3N0YXRpYyBpbnQJZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNoYXIgKmR1bXBk aXJwYXRoLAorCQkJCQkJCQkJCSAgIFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCk7 CisKKy8qCisgKiBTdG9yZXMgYSBkYXRhYmFzZSBPSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5n IG5hbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0IERiT2lkTmFtZQoreworCU9pZAkJCW9pZDsK KwljaGFyCQlzdHJbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsgLyogbnVsbC10ZXJtaW5hdGVk IHN0cmluZyBoZXJlICovCit9IERiT2lkTmFtZTsKKwogCiBpbnQKIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7Ci0J aW50CQkJZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUgICAg KkFIOwogCWNoYXIJICAgKmlucHV0RmlsZVNwZWM7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFs c2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQluX2Vycm9ycyA9IDA7 CisJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdCBkYl9l eGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlzYWJsZV90 cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsKIAlz dGF0aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBAIC04OSw2ICsxMTYsNyBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3Jl YXRlIiwgMCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9LAor CQl7Imdsb2JhbHMtb25seSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwgTlVM TCwgJ2QnfSwKIAkJeyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJleGNs dWRlLXNjaGVtYSIsIDEsIE5VTEwsICdOJ30sCkBAIC0xNDIsNiArMTcwLDcgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1l bnQsICZzdGF0aXN0aWNzX29ubHksIDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCA0fSwKIAkJeyJyZXN0cmljdC1rZXkiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgNn0sCisJCXsiZXhjbHVkZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCA3fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtMTcwLDcgKzE5OSw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQogCi0Jd2hpbGUgKChj ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6 UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFy Z3YsICJhY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCiAJ CQkJCQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpAQCAtMTk3 LDExICsyMjYsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaWYgKHN0 cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJkdXAo b3B0YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUgb25s eSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CisJ CQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkK IAkJCQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQli cmVhazsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAqLwog CQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAogCQkJ CQkJCQkJICBQR19NQVhfSk9CUywKQEAgLTMyMSw2ICszNTMsMTAgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJCQkJb3B0cy0+cmVzdHJpY3Rfa2V5ID0gcGdfc3RyZHVwKG9w dGFyZyk7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgNzoJCQkJLyogZGF0YWJhc2UgcGF0dGVy bnMgdG8gc2tpcCAqLworCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1 ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJ LyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCiAJCQkJcGdf bG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9u LiIsIHByb2duYW1lKTsKQEAgLTM0Nyw2ICszODMsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJaWYgKCFvcHRzLT5jcGFyYW1zLmRibmFtZSAmJiAhb3B0cy0+ZmlsZW5h bWUgJiYgIW9wdHMtPnRvY1N1bW1hcnkpCiAJCXBnX2ZhdGFsKCJvbmUgb2YgLWQvLS1kYm5h bWUgYW5kIC1mLy0tZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogCisJaWYgKGRiX2V4Y2x1 ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMICYmIGdsb2JhbHNfb25seSkKKwl7CisJCXBnX2xv Z19lcnJvcigib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggJXMiLAor CQkJCQkgIi0tZXhjbHVkZS1kYXRhYmFzZSIsICItZy8tLWdsb2JhbHMtb25seSIpOworCQlw Z19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRp b24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91bGQg Z2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICov CiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQyMCw2ICs0NjQsMzEgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFu ZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIsCiAJCQkJICItMS8tLXNpbmdsZS10cmFu c2FjdGlvbiIsICItLXRyYW5zYWN0aW9uLXNpemUiKTsKIAorCWlmIChvcHRzLT5zaW5nbGVf dHhuICYmIGdsb2JhbHNfb25seSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNh bm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRl ZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkgIi0tc2luZ2xlLXRyYW5zYWN0aW9uIiwgIi1nLy0t Z2xvYmFscy1vbmx5Iik7CisKKwlpZiAob3B0cy0+dHhuX3NpemUgJiYgZ2xvYmFsc19vbmx5 KQorCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRo ZXIgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAor CQkJCSAiLS10cmFuc2FjdGlvbi1zaXplIiwgIi1nLy0tZ2xvYmFscy1vbmx5Iik7CisKKwlp ZiAob3B0cy0+ZXhpdF9vbl9lcnJvciAmJiBnbG9iYWxzX29ubHkpCisJCXBnX2ZhdGFsKCJv cHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aGVuIHJlc3Rvcmlu ZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJICItLWV4aXQtb24t ZXJyb3IiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKworCWlmIChkYXRhX29ubHkgJiYgZ2xv YmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVz ZWQgdG9nZXRoZXIiLAorCQkJCSAiLWEvLS1kYXRhLW9ubHkiLCAiLWcvLS1nbG9iYWxzLW9u bHkiKTsKKwlpZiAoc2NoZW1hX29ubHkgJiYgZ2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgi b3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJCSAiLXMv LS1zY2hlbWEtb25seSIsICItZy8tLWdsb2JhbHMtb25seSIpOworCWlmIChzdGF0aXN0aWNz X29ubHkgJiYgZ2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMg Y2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJCSAiLS1zdGF0aXN0aWNzLW9ubHkiLCAi LWcvLS1nbG9iYWxzLW9ubHkiKTsKKwlpZiAod2l0aF9zdGF0aXN0aWNzICYmIGdsb2JhbHNf b25seSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRv Z2V0aGVyIiwKKwkJCQkgIi0tc3RhdGlzdGljcyIsICItZy8tLWdsb2JhbHMtb25seSIpOwor CiAJLyoKIAkgKiAtQyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIC0xLCBiZWNhdXNlIHdlIGNh bid0IGNyZWF0ZSBhIGRhdGFiYXNlIGluc2lkZQogCSAqIGEgdHJhbnNhY3Rpb24gYmxvY2su CkBAIC00ODUsNiArNTU0LDE4MyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ CQkJIG9wdHMtPmZvcm1hdE5hbWUpOwogCX0KIAorCS8qCisJICogSWYgdG9jLmdsbyBmaWxl IGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tCisJICog bWFwLmRhdCwgYnV0IHNraXAgcmVzdG9yaW5nIHRob3NlIG1hdGNoaW5nIC0tZXhjbHVkZS1k YXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlpZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxMICYm CisJCShmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5nbG8i KSkpCisJeworCQljaGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCQlSZXN0b3JlT3B0 aW9ucyAqdG1wb3B0cyA9IHBnX21hbGxvYzBfb2JqZWN0KFJlc3RvcmVPcHRpb25zKTsKKwor CQlvcHRzLT5mb3JtYXQgPSBhcmNoVW5rbm93bjsKKworCQltZW1jcHkodG1wb3B0cywgb3B0 cywgc2l6ZW9mKFJlc3RvcmVPcHRpb25zKSk7CisKKwkJLyoKKwkJICogQ2FuIG9ubHkgdXNl IC0tbGlzdCBvciAtLXVzZS1saXN0IG9wdGlvbnMgd2l0aCBhIHNpbmdsZSBkYXRhYmFzZQor CQkgKiBkdW1wLgorCQkgKi8KKwkJaWYgKG9wdHMtPnRvY1N1bW1hcnkpCisJCQlwZ19mYXRh bCgib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUg Y3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJICItbC8tLWxpc3QiKTsKKwkJaWYgKG9w dHMtPnRvY0ZpbGUpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdo ZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJ ICItTC8tLXVzZS1saXN0Iik7CisKKwkJaWYgKG9wdHMtPnN0cmljdF9uYW1lcykKKwkJCXBn X2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJj aGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi0tc3RyaWN0LW5hbWVzIik7 CisJCWlmIChnbG9iYWxzX29ubHkgJiYgb3B0cy0+ZHJvcFNjaGVtYSkKKwkJCXBnX2ZhdGFs KCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aGVuIHJlc3Rv cmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJCSAiLS1jbGVh biIsICItZy8tLWdsb2JhbHMtb25seSIpOworCisJCS8qCisJCSAqIEZvciBwZ19kdW1wYWxs IGFyY2hpdmVzLCAtLWNsZWFuIGltcGxpZXMgLS1pZi1leGlzdHMgc2luY2UgZ2xvYmFsCisJ CSAqIG9iamVjdHMgbWF5IG5vdCBleGlzdCBpbiB0aGUgdGFyZ2V0IGNsdXN0ZXIuCisJCSAq LworCQlpZiAob3B0cy0+ZHJvcFNjaGVtYSAmJiAhb3B0cy0+aWZfZXhpc3RzKQorCQl7CisJ CQlvcHRzLT5pZl9leGlzdHMgPSAxOworCQkJcGdfbG9nX2luZm8oIi0taWYtZXhpc3RzIGlz IGltcGxpZWQgYnkgLS1jbGVhbiBmb3IgcGdfZHVtcGFsbCBhcmNoaXZlcyIpOworCQl9CisK KwkJaWYgKG5vX3NjaGVtYSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGJlIHVz ZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAor CQkJCQkgIi0tbm8tc2NoZW1hIik7CisKKwkJaWYgKGRhdGFfb25seSkKKwkJCXBnX2ZhdGFs KCJvcHRpb24gJXMgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBj cmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi1hLy0tZGF0YS1vbmx5Iik7CisKKwkJ aWYgKHN0YXRpc3RpY3Nfb25seSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGJl IHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwi LAorCQkJCQkgIi0tc3RhdGlzdGljcy1vbmx5Iik7CisKKwkJaWYgKCEob3B0cy0+ZHVtcFNl Y3Rpb25zICYgRFVNUF9QUkVfREFUQSkpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbm5v dCBleGNsdWRlICVzIHdoZW4gcmVzdG9yaW5nIGEgcGdfZHVtcGFsbCBhcmNoaXZlIiwKKwkJ CQkJICItLXNlY3Rpb24iLCAiLS1wcmUtZGF0YSIpOworCisJCS8qCisJCSAqIFRvIHJlc3Rv cmUgZnJvbSBhIHBnX2R1bXBhbGwgYXJjaGl2ZSwgLUMgKGNyZWF0ZSBkYXRhYmFzZSkgb3B0 aW9uCisJCSAqIG11c3QgYmUgc3BlY2lmaWVkIHVubGVzcyB3ZSBhcmUgb25seSByZXN0b3Jp bmcgZ2xvYmFscy4KKwkJICovCisJCWlmICghZ2xvYmFsc19vbmx5ICYmIG9wdHMtPmNyZWF0 ZURCICE9IDEpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigib3B0aW9uICVzIG11c3QgYmUgc3Bl Y2lmaWVkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxs IiwKKwkJCQkJCSAiLUMvLS1jcmVhdGUiKTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkg XCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCQlw Z19sb2dfZXJyb3JfaGludCgiSW5kaXZpZHVhbCBkYXRhYmFzZXMgY2FuIGJlIHJlc3RvcmVk IHVzaW5nIHRoZWlyIHNwZWNpZmljIGFyY2hpdmVzLiIpOworCQkJZXhpdF9uaWNlbHkoMSk7 CisJCX0KKworCQkvKgorCQkgKiBBbHdheXMgcmVzdG9yZSBnbG9iYWwgb2JqZWN0cywgZXZl biBpZiAtLWV4Y2x1ZGUtZGF0YWJhc2UgcmVzdWx0cworCQkgKiBpbiB6ZXJvIGRhdGFiYXNl cyB0byBwcm9jZXNzLiBJZiAnZ2xvYmFscy1vbmx5JyBpcyBzZXQsIGV4aXQKKwkJICogaW1t ZWRpYXRlbHkuCisJCSAqLworCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAi JXMvdG9jLmdsbyIsIGlucHV0RmlsZVNwZWMpOworCisJCW5fZXJyb3JzID0gcmVzdG9yZV9n bG9iYWxfb2JqZWN0cyhnbG9iYWxfcGF0aCwgdG1wb3B0cyk7CisKKwkJaWYgKGdsb2JhbHNf b25seSkKKwkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSByZXN0b3Jpbmcgc2tpcHBlZCBiZWNh dXNlIG9wdGlvbiAlcyB3YXMgc3BlY2lmaWVkIiwKKwkJCQkJCSItZy8tLWdsb2JhbHMtb25s eSIpOworCQllbHNlCisJCXsKKwkJCS8qIE5vdyByZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2Vz IGZyb20gbWFwLmRhdCAqLworCQkJbl9lcnJvcnMgPSBuX2Vycm9ycyArIHJlc3RvcmVfYWxs X2RhdGFiYXNlcyhpbnB1dEZpbGVTcGVjLCBkYl9leGNsdWRlX3BhdHRlcm5zLAorCQkJCQkJ CQkJCQkJCQlvcHRzLCBudW1Xb3JrZXJzKTsKKwkJfQorCisJCS8qIEZyZWUgZGIgcGF0dGVy biBsaXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9w YXR0ZXJucyk7CisJfQorCWVsc2UKKwl7CisJCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhl YWQgIT0gTlVMTCkKKwkJeworCQkJc2ltcGxlX3N0cmluZ19saXN0X2Rlc3Ryb3koJmRiX2V4 Y2x1ZGVfcGF0dGVybnMpOworCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW4gYmUgdXNlZCBv bmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwK KwkJCQkJICItLWV4Y2x1ZGUtZGF0YWJhc2UiKTsKKwkJfQorCisJCWlmIChnbG9iYWxzX29u bHkpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0 b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi1nLy0t Z2xvYmFscy1vbmx5Iik7CisKKwkJLyogUHJvY2VzcyBpZiB0b2MuZ2xvIGZpbGUgZG9lcyBu b3QgZXhpc3QuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRG aWxlU3BlYywgb3B0cywgbnVtV29ya2VycywgZmFsc2UpOworCX0KKworCS8qIERvbmUsIHBy aW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgcmVzdG9yZS4gKi8KKwlp ZiAobl9lcnJvcnMpCisJeworCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24g cmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAw OworfQorCisvKgorICogcmVzdG9yZV9nbG9iYWxfb2JqZWN0cworICoKKyAqIFRoaXMgcmVz dG9yZSBhbGwgZ2xvYmFsIG9iamVjdHMuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfZ2xv YmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMg Km9wdHMpCit7CisJQXJjaGl2ZSAgICAqQUg7CisJaW50CQkJbmVycm9yID0gMDsKKworCS8q IFNldCBmb3JtYXQgYXMgY3VzdG9tIHNvIHRoYXQgdG9jLmdsbyBmaWxlIGNhbiBiZSByZWFk LiAqLworCW9wdHMtPmZvcm1hdCA9IGFyY2hDdXN0b207CisJb3B0cy0+dHhuX3NpemUgPSAw OworCisJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwor CisJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMpOworCisJb25fZXhpdF9jbG9z ZV9hcmNoaXZlKEFIKTsKKworCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kg dG8gYmUgKi8KKwlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CisKKwkvKiBEb24ndCBv dXRwdXQgVE9DIGVudHJ5IGNvbW1lbnRzIHdoZW4gcmVzdG9yaW5nIGdsb2JhbHMgKi8KKwko KEFyY2hpdmVIYW5kbGUgKikgQUgpLT5ub1RvY0NvbW1lbnRzID0gMTsKKworCUFILT5leGl0 X29uX2Vycm9yID0gZmFsc2U7CisKKwkvKiBQYXJhbGxlbCBleGVjdXRpb24gaXMgbm90IHN1 cHBvcnRlZCBmb3IgZ2xvYmFsIG9iamVjdCByZXN0b3JhdGlvbi4gKi8KKwlBSC0+bnVtV29y a2VycyA9IDE7CisKKwlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKKwlSZXN0 b3JlQXJjaGl2ZShBSCwgZmFsc2UpOworCisJbmVycm9yID0gQUgtPm5fZXJyb3JzOworCisJ LyogQUggbWF5IGJlIGZyZWVkIGluIENsb3NlQXJjaGl2ZT8gKi8KKwlDbG9zZUFyY2hpdmUo QUgpOworCisJcmV0dXJuIG5lcnJvcjsKK30KKworLyoKKyAqIHJlc3RvcmVfb25lX2RhdGFi YXNlCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVzaW5nIHRvYy5k YXQgZmlsZS4KKyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRv aW5nIHJlc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfb25lX2RhdGFiYXNlKGNv bnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkg aW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEpCit7CisJQXJjaGl2ZSAgICAqQUg7 CisJaW50CQkJbl9lcnJvcnM7CisKIAlBSCA9IE9wZW5BcmNoaXZlKGlucHV0RmlsZVNwZWMs IG9wdHMtPmZvcm1hdCk7CiAKIAlTZXRBcmNoaXZlT3B0aW9ucyhBSCwgTlVMTCwgb3B0cyk7 CkBAIC00OTIsOSArNzM4LDE1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCS8q CiAJICogV2UgZG9uJ3QgaGF2ZSBhIGNvbm5lY3Rpb24geWV0IGJ1dCB0aGF0IGRvZXNuJ3Qg bWF0dGVyLiBUaGUgY29ubmVjdGlvbgogCSAqIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgYW5k IGlmIHdlIHRlcm1pbmF0ZSB0aHJvdWdoIGV4aXRfbmljZWx5KCkgd2hpbGUKLQkgKiBpdCdz IHN0aWxsIE5VTEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9w LgorCSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0 IGJlIGEgbm8tb3AuIElmIHdlIGFyZQorCSAqIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFz ZXMsIHRoZW4gb25seSB1cGRhdGUgQVggaGFuZGxlIGZvciBjbGVhbnVwIGFzCisJICogdGhl IHByZXZpb3VzIGVudHJ5IHdhcyBhbHJlYWR5IGluIHRoZSBhcnJheSBhbmQgd2UgaGFkIGNs b3NlZCBwcmV2aW91cworCSAqIGNvbm5lY3Rpb24sIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUg YXJyYXkgc2xvdC4KIAkgKi8KLQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOworCWlmICgh YXBwZW5kX2RhdGEpCisJCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJZWxzZQorCQly ZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CiAKIAkvKiBMZXQgdGhlIGFyY2hp dmVyIGtub3cgaG93IG5vaXN5IHRvIGJlICovCiAJQUgtPnZlcmJvc2UgPSBvcHRzLT52ZXJi b3NlOwpAQCAtNTE0LDI1ICs3NjYsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJZWxzZQogCXsKIAkJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBSCk7Ci0JCVJl c3RvcmVBcmNoaXZlKEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoQUgsIGFwcGVuZF9kYXRhKTsK IAl9CiAKLQkvKiBkb25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgKi8K LQlpZiAoQUgtPm5fZXJyb3JzKQotCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQg b24gcmVzdG9yZTogJWQiLCBBSC0+bl9lcnJvcnMpOworCW5fZXJyb3JzID0gQUgtPm5fZXJy b3JzOwogCiAJLyogQUggbWF5IGJlIGZyZWVkIGluIENsb3NlQXJjaGl2ZT8gKi8KLQlleGl0 X2NvZGUgPSBBSC0+bl9lcnJvcnMgPyAxIDogMDsKLQogCUNsb3NlQXJjaGl2ZShBSCk7CiAK LQlyZXR1cm4gZXhpdF9jb2RlOworCXJldHVybiBuX2Vycm9yczsKIH0KIAogc3RhdGljIHZv aWQKIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogewotCXByaW50ZihfKCIlcyByZXN0 b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkg cGdfZHVtcC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgcmVzdG9yZXMgUG9z dGdyZVNRTCBkYXRhYmFzZXMgZnJvbSBhcmNoaXZlcyBjcmVhdGVkIGJ5IHBnX2R1bXAgb3Ig cGdfZHVtcGFsbC5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7 CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi4gW0ZJTEVdXG4iKSwgcHJvZ25hbWUpOwog CkBAIC01NTAsNiArNzk4LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJp bnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkgZGF0 YWJhc2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1D LCAtLWNyZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2Vc biIpKTsKIAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQg b24gZXJyb3IsIGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAt ZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0 cywgbm8gZGF0YWJhc2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAg ICAgICAgICAgICByZXN0b3JlIG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWos IC0tam9icz1OVU0gICAgICAgICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMg dG8gcmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1F ICAgICAgdXNlIHRhYmxlIG9mIGNvbnRlbnRzIGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAt NTY2LDYgKzgxNSw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50Zihf KCIgIC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0 cmFuc2FjdGlvblxuIikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAg ICAgICAgZGlzYWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsK IAlwcmludGYoXygiICAtLWVuYWJsZS1yb3ctc2VjdXJpdHkgICAgICAgIGVuYWJsZSByb3cg c2VjdXJpdHlcbiIpKTsKKwlwcmludGYoXygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVS TiAgIGRvIG5vdCByZXN0b3JlIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UocylcbiIpKTsKIAlw cmludGYoXygiICAtLWZpbHRlcj1GSUxFTkFNRSAgICAgICAgICAgIHJlc3RvcmUgb3Igc2tp cCBvYmplY3RzIGJhc2VkIG9uIGV4cHJlc3Npb25zXG4iCiAJCQkgIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbiBGSUxFTkFNRVxuIikpOwogCXByaW50ZihfKCIgIC0taWYt ZXhpc3RzICAgICAgICAgICAgICAgICAgdXNlIElGIEVYSVNUUyB3aGVuIGRyb3BwaW5nIG9i amVjdHNcbiIpKTsKQEAgLTYwMSw4ICs4NTEsOCBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9n bmFtZSkKIAlwcmludGYoXygiICAtLXJvbGU9Uk9MRU5BTUUgICAgICAgICAgZG8gU0VUIFJP TEUgYmVmb3JlIHJlc3RvcmVcbiIpKTsKIAogCXByaW50ZihfKCJcbiIKLQkJCSAiVGhlIG9w dGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29t YmluZWQgYW5kIHNwZWNpZmllZFxuIgotCQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3Qg bXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwg LVAsIC10LCAtVCwgLS1zZWN0aW9uLCBhbmQgLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZVxu IgorCQkJICJjb21iaW5lZCBhbmQgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIHRvIHNlbGVj dCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwogCXByaW50ZihfKCJcbklmIG5vIGlucHV0IGZp bGUgbmFtZSBpcyBzdXBwbGllZCwgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1c2VkLlxuXG4i KSk7CiAJcHJpbnRmKF8oIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdS RVBPUlQpOwogCXByaW50ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdFX05B TUUsIFBBQ0tBR0VfVVJMKTsKQEAgLTcwNywzICs5NTcsNDIyIEBAIHJlYWRfcmVzdG9yZV9m aWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKIAog CWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogZmlsZV9leGlzdHNfaW5fZGly ZWN0b3J5CisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIGV4aXN0cyBpbiB0aGUg Z2l2ZW4gZGlyZWN0b3J5LgorICovCitzdGF0aWMgYm9vbAorZmlsZV9leGlzdHNfaW5fZGly ZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3Ry dWN0IHN0YXQgc3Q7CisJY2hhcgkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYo YnVmLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkK KwkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOwor CisJcmV0dXJuIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkp OworfQorCisvKgorICogZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlCisgKgorICogVGhp cyB3aWxsIG1hcmsgZm9yIHNraXBwaW5nIGFueSBlbnRyaWVzIGZyb20gZGJuYW1lX29pZF9s aXN0IHRoYXQgcGF0dGVybiBtYXRjaCBhbgorICogZW50cnkgaW4gdGhlIGRiX2V4Y2x1ZGVf cGF0dGVybnMgbGlzdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YWJhc2Ug dG8gYmUgcmVzdG9yZWQuCisgKgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lc19saXN0 X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQkJCQkJCVNpbXBsZVB0ckxpc3QgKmRibmFt ZV9vaWRfbGlzdCwKKwkJCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVy bnMpCit7CisJaW50CQkJY291bnRfZGIgPSAwOworCVBRRXhwQnVmZmVyIHF1ZXJ5OworCVBR RXhwQnVmZmVyIGRiX2xpdDsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlxdWVyeSA9IGNyZWF0 ZVBRRXhwQnVmZmVyKCk7CisJZGJfbGl0ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCS8q CisJICogUHJvY2VzcyBvbmUgYnkgb25lIGFsbCBkYm5hbWVzIGFuZCBpZiBzcGVjaWZpZWQg dG8gc2tpcCByZXN0b3JpbmcsIHRoZW4KKwkgKiByZW1vdmUgZGJuYW1lIGZyb20gbGlzdC4K KwkgKi8KKwlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9s aXN0LT5oZWFkOworCQkgZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCisJewor CQlEYk9pZE5hbWUgICpkYmlkbmFtZSA9IChEYk9pZE5hbWUgKikgZGJfY2VsbC0+cHRyOwor CQlib29sCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKworCQlyZXNldFBRRXhwQnVmZmVy KHF1ZXJ5KTsKKwkJcmVzZXRQUUV4cEJ1ZmZlcihkYl9saXQpOworCisJCWFwcGVuZFN0cmlu Z0xpdGVyYWxDb25uKGRiX2xpdCwgZGJpZG5hbWUtPnN0ciwgY29ubik7CisKKwkJZm9yIChT aW1wbGVTdHJpbmdMaXN0Q2VsbCAqcGF0X2NlbGwgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhl YWQ7IHBhdF9jZWxsOyBwYXRfY2VsbCA9IHBhdF9jZWxsLT5uZXh0KQorCQl7CisJCQkvKgor CQkJICogSWYgdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2ggdGhlbiB3ZSBkb24ndCBuZWVkIHRv IHRyeSBhIHBhdHRlcm4KKwkJCSAqIG1hdGNoCisJCQkgKi8KKwkJCWlmIChwZ19zdHJjYXNl Y21wKGRiaWRuYW1lLT5zdHIsIHBhdF9jZWxsLT52YWwpID09IDApCisJCQkJc2tpcF9kYl9y ZXN0b3JlID0gdHJ1ZTsKKwkJCS8qIE90aGVyd2lzZSwgdHJ5IGEgcGF0dGVybiBtYXRjaCBp ZiB0aGVyZSBpcyBhIGNvbm5lY3Rpb24gKi8KKwkJCWVsc2UKKwkJCXsKKwkJCQlpbnQJCQlk b3RjbnQ7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIp OworCQkJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihjb25uLCBxdWVyeSwgcGF0X2NlbGwtPnZh bCwgZmFsc2UsCisJCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBkYl9saXQtPmRhdGEsCisJCQkJ CQkJCQkgIE5VTEwsIE5VTEwsIE5VTEwsICZkb3RjbnQpOworCisJCQkJaWYgKGRvdGNudCA+ IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3IoImltcHJvcGVyIHF1YWxpZmllZCBuYW1l ICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIsCisJCQkJCQkJCSBkYmlkbmFtZS0+c3Ry KTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmljZWx5KDEpOworCQkJCX0K KworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisKKwkJCQlp ZiAoUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVl OworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgbmFtZSBcIiVzXCIgbWF0Y2hlcyAtLWV4 Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybiBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyLCBwYXRfY2Vs bC0+dmFsKTsKKwkJCQl9CisKKwkJCQlQUWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1 ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJl YWs7CisJCX0KKworCQkvKgorCQkgKiBNYXJrIGRiIHRvIGJlIHNraXBwZWQgb3IgaW5jcmVt ZW50IHRoZSBjb3VudGVyIG9mIGRicyB0byBiZQorCQkgKiByZXN0b3JlZAorCQkgKi8KKwkJ aWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdfbG9nX2luZm8oImV4Y2x1ZGluZyBk YXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKKwkJCWRiaWRuYW1lLT5vaWQgPSBJ bnZhbGlkT2lkOworCQl9CisJCWVsc2UKKwkJCWNvdW50X2RiKys7CisJfQorCisJZGVzdHJv eVBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwlkZXN0cm95UFFFeHBCdWZmZXIoZGJfbGl0KTsKKwor CXJldHVybiBjb3VudF9kYjsKK30KKworLyoKKyAqIGdldF9kYm5hbWVfb2lkX2xpc3RfZnJv bV9tZmlsZQorICoKKyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCByZWFkIGxpbmUgYnkgbGlu ZSBhbmQgdGhlbiBwcmVwYXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICogbmFtZXMgYW5kIGNv cnJlc3BvbmRpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJlciBvZiBk YXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9k Ym5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlUHRy TGlzdCAqZGJuYW1lX29pZF9saXN0KQoreworCVN0cmluZ0luZm9EYXRhIGxpbmVidWY7CisJ RklMRQkgICAqcGZpbGU7CisJY2hhcgkJbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCWlu dAkJCWNvdW50ID0gMDsKKwlpbnQJCQlsZW47CisKKworCS8qCisJICogSWYgdGhlcmUgaXMg bm8gbWFwLmRhdCBmaWxlIGluIGR1bXAsIHRoZW4gcmV0dXJuIGZyb20gaGVyZSBhcyB0aGVy ZSBpcworCSAqIG5vIGRhdGFiYXNlIHRvIHJlc3RvcmUuCisJICovCisJaWYgKCFmaWxlX2V4 aXN0c19pbl9kaXJlY3RvcnkoZHVtcGRpcnBhdGgsICJtYXAuZGF0IikpCisJeworCQlwZ19s b2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIGlzIHNraXBwZWQgYmVjYXVzZSBmaWxlIFwi JXNcIiBkb2VzIG5vdCBleGlzdCBpbiBkaXJlY3RvcnkgXCIlc1wiIiwgIm1hcC5kYXQiLCBk dW1wZGlycGF0aCk7CisJCXJldHVybiAwOworCX0KKworCWxlbiA9IHN0cmxlbihkdW1wZGly cGF0aCk7CisKKwkvKiBUcmltIHNsYXNoIGZyb20gZGlyZWN0b3J5IG5hbWUuICovCisJd2hp bGUgKGxlbiA+IDEgJiYgZHVtcGRpcnBhdGhbbGVuIC0gMV0gPT0gJy8nKQorCXsKKwkJZHVt cGRpcnBhdGhbbGVuIC0gMV0gPSAnXDAnOworCQlsZW4tLTsKKwl9CisKKwlzbnByaW50Ziht YXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZHVtcGRpcnBhdGgpOwor CisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3BlbihtYXBfZmlsZV9w YXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwo ImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxlX3BhdGgpOworCisJ aW5pdFN0cmluZ0luZm8oJmxpbmVidWYpOworCisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1l L2RiX29pZCBjb21iaW5hdGlvbnMgdG8gdGhlIGxpc3QuICovCisJd2hpbGUgKHBnX2dldF9s aW5lX2J1ZihwZmlsZSwgJmxpbmVidWYpKQorCXsKKwkJT2lkCQkJZGJfb2lkID0gSW52YWxp ZE9pZDsKKwkJY2hhcgkgICAqZGJuYW1lOworCQlEYk9pZE5hbWUgICpkYmlkbmFtZTsKKwkJ aW50CQkJbmFtZWxlbjsKKwkJY2hhcgkgICAqcCA9IGxpbmVidWYuZGF0YTsKKworCQkvKiBs b29rIGZvciB0aGUgZGJvaWQuICovCisJCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFy KSAqcCkpCisJCQlwKys7CisKKwkJLyogaWdub3JlIGxpbmVzIHRoYXQgZG9uJ3QgYmVnaW4g d2l0aCBhIGRpZ2l0ICovCisJCWlmIChwID09IGxpbmVidWYuZGF0YSkKKwkJCWNvbnRpbnVl OworCisJCWlmICgqcCA9PSAnICcpCisJCXsKKwkJCXNzY2FuZihsaW5lYnVmLmRhdGEsICIl dSIsICZkYl9vaWQpOworCQkJcCsrOworCQl9CisKKwkJLyogZGJuYW1lIGlzIHRoZSByZXN0 IG9mIHRoZSBsaW5lICovCisJCWRibmFtZSA9IHA7CisJCW5hbWVsZW4gPSBzdHJsZW4oZGJu YW1lKTsKKworCQkvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lICovCisJCWlmIChuYW1lbGVu ID4gMCAmJiBkYm5hbWVbbmFtZWxlbiAtIDFdID09ICdcbicpCisJCQlkYm5hbWVbLS1uYW1l bGVuXSA9ICdcMCc7CisKKwkJLyogUmVwb3J0IGVycm9yIGFuZCBleGl0IGlmIHRoZSBmaWxl IGhhcyBhbnkgY29ycnVwdGVkIGRhdGEuICovCisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQp IHx8IG5hbWVsZW4gPCAxKQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gZmlsZSBc IiVzXCIgb24gbGluZSAlZCIsIG1hcF9maWxlX3BhdGgsCisJCQkJCSBjb3VudCArIDEpOwor CisJCWRiaWRuYW1lID0gcGdfbWFsbG9jKG9mZnNldG9mKERiT2lkTmFtZSwgc3RyKSArIG5h bWVsZW4gKyAxKTsKKwkJZGJpZG5hbWUtPm9pZCA9IGRiX29pZDsKKwkJc3RybGNweShkYmlk bmFtZS0+c3RyLCBkYm5hbWUsIG5hbWVsZW4gKyAxKTsKKworCQlwZ19sb2dfaW5mbygiZm91 bmQgZGF0YWJhc2UgXCIlc1wiIChPSUQ6ICV1KSBpbiBmaWxlIFwiJXNcIiIsCisJCQkJCWRi aWRuYW1lLT5zdHIsIGRiX29pZCwgbWFwX2ZpbGVfcGF0aCk7CisKKwkJc2ltcGxlX3B0cl9s aXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRiaWRuYW1lKTsKKwkJY291bnQrKzsKKwl9 CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCisJZmNsb3NlKHBmaWxlKTsKKworCXBm cmVlKGxpbmVidWYuZGF0YSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0 b3JlX2FsbF9kYXRhYmFzZXMKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMg dGhvc2UgZHVtcHMgYXJlIHByZXNlbnQgaW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAu ZGF0IGZpbGUgbWFwcGluZy4KKyAqCisgKiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9y IGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZpZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFz ZSBvcHRpb24uCisgKgorICogcmV0dXJucywgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2lu ZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29u c3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4 Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkgIGludCBudW1X b3JrZXJzKQoreworCVNpbXBsZVB0ckxpc3QgZGJuYW1lX29pZF9saXN0ID0ge05VTEwsIE5V TEx9OworCWludAkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJCQludW1fdG90YWxfZGI7 CisJaW50CQkJbl9lcnJvcnNfdG90YWwgPSAwOworCWNoYXIJICAgKmNvbm5lY3RlZF9kYiA9 IE5VTEw7CisJUEdjb25uCSAgICpjb25uID0gTlVMTDsKKwlSZXN0b3JlT3B0aW9ucyAqb3Jp Z2luYWxfb3B0cyA9IHBnX21hbGxvYzBfb2JqZWN0KFJlc3RvcmVPcHRpb25zKTsKKwlSZXN0 b3JlT3B0aW9ucyAqdG1wb3B0cyA9IHBnX21hbGxvYzBfb2JqZWN0KFJlc3RvcmVPcHRpb25z KTsKKworCW1lbWNweShvcmlnaW5hbF9vcHRzLCBvcHRzLCBzaXplb2YoUmVzdG9yZU9wdGlv bnMpKTsKKworCS8qIFNhdmUgZGIgbmFtZSB0byByZXVzZSBpdCBmb3IgYWxsIHRoZSBkYXRh YmFzZS4gKi8KKwlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCWNvbm5lY3RlZF9kYiA9 IG9wdHMtPmNwYXJhbXMuZGJuYW1lOworCisJbnVtX3RvdGFsX2RiID0gZ2V0X2RibmFtZV9v aWRfbGlzdF9mcm9tX21maWxlKChjaGFyICopIGlucHV0RmlsZVNwZWMsICZkYm5hbWVfb2lk X2xpc3QpOworCisJcGdfbG9nX2luZm8obmdldHRleHQoImZvdW5kICVkIGRhdGFiYXNlIG5h bWUgaW4gXCIlc1wiIiwKKwkJCQkJCSAiZm91bmQgJWQgZGF0YWJhc2UgbmFtZXMgaW4gXCIl c1wiIiwKKwkJCQkJCSBudW1fdG90YWxfZGIpLAorCQkJCW51bV90b3RhbF9kYiwgIm1hcC5k YXQiKTsKKworCS8qCisJICogSWYgZXhjbHVkZS1wYXR0ZXJucyBpcyBnaXZlbiwgY29ubmVj dCB0byB0aGUgZGF0YWJhc2UgdG8gcHJvY2VzcyB0aGVtLgorCSAqLworCWlmIChkYl9leGNs dWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwl7CisJCWlmIChvcHRzLT5jcGFyYW1zLmRi bmFtZSkKKwkJeworCQkJY29ubiA9IENvbm5lY3REYXRhYmFzZShvcHRzLT5jcGFyYW1zLmRi bmFtZSwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCSAgIG9wdHMtPmNw YXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJ CQkJCQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwor CQkJaWYgKCFjb25uKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRh YmFzZSBcIiVzXCIiLCBvcHRzLT5jcGFyYW1zLmRibmFtZSk7CisJCX0KKworCQlpZiAoIWNv bm4pCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCB0byBkYXRhYmFz ZSBcIiVzXCIiLCAicG9zdGdyZXMiKTsKKworCQkJY29ubiA9IENvbm5lY3REYXRhYmFzZSgi cG9zdGdyZXMiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJICAgb3B0 cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxU LAorCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwp OworCisJCQkvKiBUcnkgd2l0aCB0ZW1wbGF0ZTEuICovCisJCQlpZiAoIWNvbm4pCisJCQl7 CisJCQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNc IiIsICJ0ZW1wbGF0ZTEiKTsKKworCQkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInRlbXBs YXRlMSIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkJICAgb3B0cy0+ Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAor CQkJCQkJCQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsK KwkJCQlpZiAoIWNvbm4pCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBj b25uZWN0IHRvIGRhdGFiYXNlcyBcInBvc3RncmVzXCIgb3IgXCJ0ZW1wbGF0ZTFcIlxuIgor CQkJCQkJCQkgIlBsZWFzZSBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIGRhdGFiYXNlLiIpOwor CQkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5m b3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJCQlleGl0X25pY2VseSgxKTsKKwkJCQl9CisJ CQl9CisJCX0KKworCQkvKiBGaWx0ZXIgdGhlIGRiIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBl eGNsdWRlIHBhdHRlcm5zLiAqLworCQludW1fZGJfcmVzdG9yZSA9IGdldF9kYm5hbWVzX2xp c3RfdG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCQkJCSBk Yl9leGNsdWRlX3BhdHRlcm5zKTsKKwkJUFFmaW5pc2goY29ubik7CisJfQorCWVsc2UKKwkJ bnVtX2RiX3Jlc3RvcmUgPSBudW1fdG90YWxfZGI7CisKKwkvKiBFeGl0IGlmIG5vIGRiIG5l ZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChudW1fZGJfcmVzdG9yZSA9PSAwKQorCXsK KwkJcGdfbG9nX2luZm8obmdldHRleHQoIm5vIGRhdGFiYXNlIG5lZWRzIHJlc3RvcmluZyBv dXQgb2YgJWQgZGF0YWJhc2UiLAorCQkJCQkJCSAibm8gZGF0YWJhc2UgbmVlZHMgcmVzdG9y aW5nIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIpLAorCQkJCQludW1fdG90 YWxfZGIpOworCQlwZ19mcmVlKG9yaWdpbmFsX29wdHMpOworCQlwZ19mcmVlKHRtcG9wdHMp OworCQlyZXR1cm4gMDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZCB0byByZXN0b3JlICVk IGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51bV90 b3RhbF9kYik7CisKKwkvKgorCSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRhdGFiYXNlcyB0byBy ZXN0b3JlIGFmdGVyIHByb2Nlc3NpbmcgdGhlCisJICogZXhjbHVkZS1kYXRhYmFzZSBzd2l0 Y2goZXMpLiAgTm93IHdlIGNhbiByZXN0b3JlIHRoZW0gb25lIGJ5IG9uZS4KKwkgKi8KKwlm b3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7 CisJCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURiT2lkTmFt ZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWNoYXIJCXN1 YmRpcnBhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcgkJc3ViZGlyZGJwYXRoW01BWFBHUEFUSF07 CisJCWNoYXIJCWRiZmlsZW5hbWVbTUFYUEdQQVRIXTsKKwkJaW50CQkJbl9lcnJvcnM7CisK KwkJLyogaWdub3JlIGRicyBtYXJrZWQgZm9yIHNraXBwaW5nICovCisJCWlmIChkYmlkbmFt ZS0+b2lkID09IEludmFsaWRPaWQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTaW5j ZSBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBtYXkgbW9kaWZ5IFJlc3RvcmVPcHRpb25zIGR1cmlu ZyB0aGUKKwkJICogcHJldmlvdXMgcmVzdG9yZSwgd2UgbXVzdCBwcm92aWRlIGEgZnJlc2gg Y29weSBvZiB0aGUgb3JpZ2luYWwKKwkJICogIm9wdHMiIGZvciBlYWNoIGNhbGwgdG8gcmVz dG9yZV9vbmVfZGF0YWJhc2UuCisJCSAqLworCQltZW1jcHkodG1wb3B0cywgb3JpZ2luYWxf b3B0cywgc2l6ZW9mKFJlc3RvcmVPcHRpb25zKSk7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0 byByZXNldCBvdmVycmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNhbiBiZSByZXN0b3Jl ZAorCQkgKiBpbnRvIGFuIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVzZWQgd2l0aCAt ZC8tLWRibmFtZSBvcHRpb24pCisJCSAqLworCQlpZiAodG1wb3B0cy0+Y3BhcmFtcy5vdmVy cmlkZV9kYm5hbWUpCisJCXsKKwkJCXBmcmVlKHRtcG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVf ZGJuYW1lKTsKKwkJCXRtcG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0gTlVMTDsK KwkJfQorCisJCXNucHJpbnRmKHN1YmRpcmRicGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJh c2VzIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkJLyoKKwkJICogTG9vayBmb3IgdGhlIGRhdGFi YXNlIGR1bXAgZmlsZS9kaXIuIElmIHRoZXJlIGlzIGFuIHtvaWR9LnRhciBvcgorCQkgKiB7 b2lkfS5kbXAgZmlsZSwgdXNlIGl0LiBPdGhlcndpc2UgdHJ5IHRvIHVzZSBhIGRpcmVjdG9y eSBjYWxsZWQKKwkJICoge29pZH0KKwkJICovCisJCXNucHJpbnRmKGRiZmlsZW5hbWUsIE1B WFBHUEFUSCwgIiV1LnRhciIsIGRiaWRuYW1lLT5vaWQpOworCQlpZiAoZmlsZV9leGlzdHNf aW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQlzbnByaW50Zihz dWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUudGFyIiwgaW5wdXRGaWxl U3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCWVsc2UKKwkJeworCQkJc25wcmludGYoZGJmaWxl bmFtZSwgTUFYUEdQQVRILCAiJXUuZG1wIiwgZGJpZG5hbWUtPm9pZCk7CisKKwkJCWlmIChm aWxlX2V4aXN0c19pbl9kaXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJ CQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUuZG1w IiwgaW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCQllbHNlCisJCQkJc25wcmlu dGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgaW5wdXRGaWxl U3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCX0KKworCQlwZ19sb2dfaW5mbygicmVzdG9yaW5n IGRhdGFiYXNlIFwiJXNcIiIsIGRiaWRuYW1lLT5zdHIpOworCisJCS8qIElmIGRhdGFiYXNl IGlzIGFscmVhZHkgY3JlYXRlZCwgdGhlbiBkb24ndCBzZXQgY3JlYXRlREIgZmxhZy4gKi8K KwkJaWYgKHRtcG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQl7CisJCQlQR2Nvbm4JICAgKnRl c3RfY29ubjsKKworCQkJdGVzdF9jb25uID0gQ29ubmVjdERhdGFiYXNlKGRiaWRuYW1lLT5z dHIsIE5VTEwsIHRtcG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkJCXRtcG9wdHMt PmNwYXJhbXMucGdwb3J0LCB0bXBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVM VCwKKwkJCQkJCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwp OworCQkJaWYgKHRlc3RfY29ubikKKwkJCXsKKwkJCQlQUWZpbmlzaCh0ZXN0X2Nvbm4pOwor CisJCQkJLyogVXNlIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZSBmb3IgY29ubmVjdGlvbi4g Ki8KKwkJCQl0bXBvcHRzLT5jcmVhdGVEQiA9IDA7CisJCQkJdG1wb3B0cy0+Y3BhcmFtcy5k Ym5hbWUgPSBkYmlkbmFtZS0+c3RyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIFdl J2xsIGhhdmUgdG8gY3JlYXRlIGl0ICovCisJCQkJdG1wb3B0cy0+Y3JlYXRlREIgPSAxOwor CQkJCXRtcG9wdHMtPmNwYXJhbXMuZGJuYW1lID0gY29ubmVjdGVkX2RiOworCQkJfQorCQl9 CisKKwkJLyogUmVzdG9yZSB0aGUgc2luZ2xlIGRhdGFiYXNlLiAqLworCQluX2Vycm9ycyA9 IHJlc3RvcmVfb25lX2RhdGFiYXNlKHN1YmRpcnBhdGgsIHRtcG9wdHMsIG51bVdvcmtlcnMs IHRydWUpOworCisJCW5fZXJyb3JzX3RvdGFsICs9IG5fZXJyb3JzOworCisJCS8qIFByaW50 IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgc2luZ2xlIGRhdGFiYXNlIHJl c3RvcmUuICovCisJCWlmIChuX2Vycm9ycykKKwkJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMg aWdub3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBkYmlkbmFtZS0+c3Ry LCBuX2Vycm9ycyk7CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJh c2VzLiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJhc2VzIGlz ICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5hbWUgYW5kIGRib2lkIGxp c3QuICovCisJc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRibmFtZV9vaWRfbGlzdCk7CisK KwlwZ19mcmVlKG9yaWdpbmFsX29wdHMpOworCXBnX2ZyZWUodG1wb3B0cyk7CisKKwlyZXR1 cm4gbl9lcnJvcnNfdG90YWw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8w MDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKaW5kZXggYWI5 MzEwZWI0MmIuLmE4OTViYzMxNGIwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8w MDFfYmFzaWMucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0y NDQsNCArMjQ0LDU5IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkncGdfZHVtcGFsbDogb3B0 aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1n Ly0tZ2xvYmFscy1vbmx5JwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1 bXBhbGwnLCAnLS1mb3JtYXQnLCAneCcgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiB1 bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCAieCI7XEUvLAorCSdwZ19kdW1wYWxsOiB1bnJl Y29nbml6ZWQgb3V0cHV0IGZvcm1hdCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAn cGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICdkJywgJy0tcmVzdHJpY3Qta2V5PXV1JywgJy1m IGR1bXBmaWxlJyBdLAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IG9wdGlvbiAtLXJlc3Ry aWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1mb3JtYXQ9cGxhaW5cRS8sCisJJ3Bn X2R1bXBhbGw6IC0tcmVzdHJpY3Qta2V5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBwbGFpbiBk dW1wIGZvcm1hdCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcs ICctLWZvcm1hdCcsICdkJywgJy0tZ2xvYmFscy1vbmx5JywgJy0tY2xlYW4nLCAnLWYnLCAn ZHVtcGZpbGUnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogb3B0aW9ucyAtLWNsZWFu IGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgaW4gbm9u LXRleHQgZHVtcFxFLywKKwkncGdfZHVtcGFsbDogLS1jbGVhbiBhbmQgLWcvLS1nbG9iYWxz LW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgaW4gbm9uLXRleHQgZHVtcCcpOworCitj b21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICdkJyBd LAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IG9wdGlvbiAtRlwvLS1mb3JtYXQ9ZHxjfHQg cmVxdWlyZXMgb3B0aW9uIC1mXC8tLWZpbGVcRS8sCisJJ3BnX2R1bXBhbGw6IG5vbi1wbGFp biBmb3JtYXQgcmVxdWlyZXMgLS1maWxlIG9wdGlvbicpOworCitjb21tYW5kX2ZhaWxzX2xp a2UoCisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xv YmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBv cHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgg LWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRpb24gLS1leGNsdWRl LWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9u bHknCispOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWRh dGEtb25seScsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19y ZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtYVwvLS1kYXRhLW9ubHkgYW5kIC1nXC8tLWdsb2Jh bHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKKwkncGdfcmVzdG9yZTogZXJy b3I6IG9wdGlvbnMgLWEvLS1kYXRhLW9ubHkgYW5kIC1nLy0tZ2xvYmFscy1vbmx5IGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyJworKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3Bn X3Jlc3RvcmUnLCAnLS1zY2hlbWEtb25seScsICctLWdsb2JhbHMtb25seScsICctZCcsICd4 eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtc1wvLS1zY2hlbWEt b25seSBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyXEUv LAorCSdwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtcy8tLXNjaGVtYS1vbmx5IGFuZCAt Zy8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicKKyk7CisKK2NvbW1h bmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywgJy0tc3RhdGlzdGljcy1vbmx5Jywg Jy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVy cm9yOiBvcHRpb25zIC0tc3RhdGlzdGljcy1vbmx5IGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkg Y2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCisJJ3BnX3Jlc3RvcmU6IGVycm9yOiBvcHRp b25zIC0tc3RhdGlzdGljcy1vbmx5IGFuZCAtZy8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUg dXNlZCB0b2dldGhlcicKKyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0 b3JlJywgJy0tZXhjbHVkZS1kYXRhYmFzZT1mb28nLCAnLWQnLCAneHh4JywgJ2R1bXBkaXIn IF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFz ZSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBi eSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgaXMg dXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wJworKTsKKworY29tbWFu ZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQn LCAneHh4JywgJ2R1bXBkaXInIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9u IC1nXC8tLWdsb2JhbHMtb25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFu IGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIG9wdGlvbiAtLWds b2JhbHMtb25seSBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCB0aGUgZHVtcCBvZiBwZ19k dW1wJworKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3QvMDA3X3BnX2R1bXBhbGwucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFs bC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjIyOGU1NzJm NDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFs bC5wbApAQCAtMCwwICsxLDYzOSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNiwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3 YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKwor bXkgJHRlbXBkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcjsKK215ICRy dW5fZGIgPSAncG9zdGdyZXMnOworbXkgJHNlcCA9ICR3aW5kb3dzX29zID8gIlxcIiA6ICIv IjsKKworIyBUYWJsZXNwYWNlIGxvY2F0aW9ucyB1c2VkIGJ5ICJyZXN0b3JlX3RhYmxlc3Bh Y2UiIHRlc3QgY2FzZS4KK215ICR0YWJsZXNwYWNlMSA9ICIke3RlbXBkaXJ9JHtzZXB9dGJs MSI7CitteSAkdGFibGVzcGFjZTIgPSAiJHt0ZW1wZGlyfSR7c2VwfXRibDIiOworbWtkaXIo JHRhYmxlc3BhY2UxKSB8fCBkaWUgIm1rZGlyICR0YWJsZXNwYWNlMSAkISI7Citta2Rpcigk dGFibGVzcGFjZTIpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2UyICQhIjsKKworIyBlc2Nh cGUgdGFibGVzcGFjZSBsb2NhdGlvbnMgb24gV2luZG93cy4KK215ICR0YWJsZXNwYWNlMl9v cmlnID0gJHRhYmxlc3BhY2UyOworJHRhYmxlc3BhY2UxID0gJHdpbmRvd3Nfb3MgPyAoJHRh Ymxlc3BhY2UxID1+IHMvXFwvXFxcXC9ncikgOiAkdGFibGVzcGFjZTE7CiskdGFibGVzcGFj ZTIgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFjZTIgPX4gcy9cXC9cXFxcL2dyKSA6ICR0 YWJsZXNwYWNlMjsKKworIyBXaGVyZSBwZ19kdW1wYWxsIHdpbGwgYmUgZXhlY3V0ZWQuCitt eSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZScpOworJG5v ZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmluaXRpb24g b2YgdGhlIHBnX2R1bXBhbGwgdGVzdCBjYXNlcyB0byBydW4uCisjCisjIEVhY2ggb2YgdGhl c2UgdGVzdCBjYXNlcyBhcmUgbmFtZWQgYW5kIHRob3NlIG5hbWVzIGFyZSB1c2VkIGZvciBm YWlsCisjIHJlcG9ydGluZyBhbmQgYWxzbyB0byBzYXZlIHRoZSBkdW1wIGFuZCByZXN0b3Jl IGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisjIHRlc3QgdG8gYXNzZXJ0LgorIworIyBU aGUgInNldHVwX3NxbCIgaXMgYSBwc3FsIHZhbGlkIHNjcmlwdCB0aGF0IGNvbnRhaW5zIFNR TCBjb21tYW5kcyB0byBleGVjdXRlCisjIGJlZm9yZSBvZiBhY3R1YWxseSBleGVjdXRlIHRo ZSB0ZXN0cy4gVGhlIHNldHVwcyBhcmUgYWxsIGV4ZWN1dGVkIGJlZm9yZSBvZgorIyBhbnkg dGVzdCBleGVjdXRpb24uCisjCisjIFRoZSAiZHVtcF9jbWQiIGFuZCAicmVzdG9yZV9jbWQi IGFyZSB0aGUgY29tbWFuZHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiBUaGUKKyMgInJlc3Rv cmVfY21kIiBtdXN0IGhhdmUgdGhlIC0tZmlsZSBmbGFnIHRvIHNhdmUgdGhlIHJlc3RvcmUg b3V0cHV0IHNvIHRoYXQgd2UKKyMgY2FuIGFzc2VydCBvbiBpdC4KKyMKKyMgVGhlICJsaWtl IiBhbmQgInVubGlrZSIgaXMgYSByZWdleHAgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHRoZSBw Z19yZXN0b3JlCisjIG91dHB1dC4gSXQgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVu IGZpbGxlZCBwZXIgdGVzdCBjYXNlcyBidXQgaXQgYWxzbworIyBjYW4gaGF2ZSBib3RoLiBT ZWUgImV4Y2x1ZGluZ19kYXRhYmFzZXMiIHRlc3QgY2FzZSBmb3IgZXhhbXBsZS4KK215ICVw Z2R1bXBhbGxfcnVucyA9ICgKKwlyZXN0b3JlX3JvbGVzID0+IHsKKwkJc2V0dXBfc3FsID0+ ICcKKwkJQ1JFQVRFIFJPTEUgZHVtcGFsbCBXSVRIIEVOQ1JZUFRFRCBQQVNTV09SRCBcJ2Fk bWluXCcgU1VQRVJVU0VSOworCQlDUkVBVEUgUk9MRSBkdW1wYWxsMiBXSVRIIFJFUExJQ0FU SU9OIENPTk5FQ1RJT04gTElNSVQgMTA7JywKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1 bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWwor CQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywK KwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzLnNxbCIsCisJCQkiJHRl bXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisJCQlccypcUUNS RUFURSBST0xFIGR1bXBhbGwyO1xFCisJCQlccypcUUFMVEVSIFJPTEUgZHVtcGFsbDIgV0lU SCBOT1NVUEVSVVNFUiBJTkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NSRUFURURCIE5PTE9HSU4g UkVQTElDQVRJT04gTk9CWVBBU1NSTFMgQ09OTkVDVElPTiBMSU1JVCAxMDtcRQorCQkveG0K Kwl9LAorCisJcmVzdG9yZV90YWJsZXNwYWNlID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJ Q1JFQVRFIFJPTEUgdGFwOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBM T0NBVElPTiAnJHRhYmxlc3BhY2UxJzsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05F UiB0YXAgTE9DQVRJT04gJyR0YWJsZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2VfY29zdD0xLjAp OyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcg PT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90YWJs ZXNwYWNlIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAn LUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIk dGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2Uuc3FsIiwKKwkJCSIkdGVtcGRpci9yZXN0b3Jl X3RhYmxlc3BhY2UiLAorCQldLAorCQkjIE1hdGNoICJFIiBhcyBvcHRpb25hbCBzaW5jZSBp dCBpcyBhZGRlZCBvbiBMT0NBVElPTiB3aGVuIHJ1bm5pbmcgb24KKwkJIyBXaW5kb3dzLgor CQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9XTkVSIHRh cCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNlMl9vcmlnJztcRQorCQkJXG5cUUFM VEVSIFRBQkxFU1BBQ0UgdGJsMiBTRVQgKHNlcV9wYWdlX2Nvc3Q9MS4wKTtcRQorCQkveG0s CisJfSwKKworCXJlc3RvcmVfZ3JhbnRzID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJQ1JF QVRFIERBVEFCQVNFIHRhcGdyYW50c2RiOworCQlDUkVBVEUgU0NIRU1BIHByaXZhdGU7CisJ CUNSRUFURSBTRVFVRU5DRSBzZXJpYWwgU1RBUlQgMTAxOworCQlDUkVBVEUgRlVOQ1RJT04g Zm4oKSBSRVRVUk5TIHZvaWQgQVMgXCRcJAorCQlCRUdJTgorCQlFTkQ7CisJCVwkXCQgTEFO R1VBR0UgcGxwZ3NxbDsKKwkJQ1JFQVRFIFJPTEUgc3VwZXI7CisJCUNSRUFURSBST0xFIGdy YW50MTsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQyOworCQlDUkVBVEUgUk9MRSBncmFudDM7CisJ CUNSRUFURSBST0xFIGdyYW50NDsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ1OworCQlDUkVBVEUg Uk9MRSBncmFudDY7CisJCUNSRUFURSBST0xFIGdyYW50NzsKKwkJQ1JFQVRFIFJPTEUgZ3Jh bnQ4OworCisJCUNSRUFURSBUQUJMRSB0IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0IFZB TFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJR1JBTlQgU0VMRUNUIE9OIFRBQkxFIHQg VE8gZ3JhbnQxOworCQlHUkFOVCBJTlNFUlQgT04gVEFCTEUgdCBUTyBncmFudDI7CisJCUdS QU5UIEFMTCBQUklWSUxFR0VTIE9OIFRBQkxFIHQgdG8gZ3JhbnQzOworCQlHUkFOVCBDT05O RUNULCBDUkVBVEUgT04gREFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8gZ3JhbnQ0OworCQlHUkFO VCBVU0FHRSwgQ1JFQVRFIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTsKKwkJR1JBTlQg VVNBR0UsIFNFTEVDVCwgVVBEQVRFIE9OIFNFUVVFTkNFIHNlcmlhbCBUTyBncmFudDY7CisJ CUdSQU5UIHN1cGVyIFRPIGdyYW50NzsKKwkJR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBm bigpIFRPIGdyYW50ODsKKwkJIiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwn LAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVt cGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdw Z19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMuc3FsIiwKKwkJCSIkdGVtcGRp ci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUdSQU5U IEFMTCBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7XEUKKwkJCSguKlxuKSoKKwkJCVxu XFFHUkFOVCBBTEwgT04gRlVOQ1RJT04gcHVibGljLmZuKCkgVE8gZ3JhbnQ4O1xFCisJCQko LipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIFNFUVVFTkNFIHB1YmxpYy5zZXJpYWwgVE8g Z3JhbnQ2O1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgU0VMRUNUIE9OIFRBQkxFIHB1 YmxpYy50IFRPIGdyYW50MTtcRQorCQkJXG5cUUdSQU5UIElOU0VSVCBPTiBUQUJMRSBwdWJs aWMudCBUTyBncmFudDI7XEUKKwkJCVxuXFFHUkFOVCBBTEwgT04gVEFCTEUgcHVibGljLnQg VE8gZ3JhbnQzO1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQ1JFQVRFLENPTk5FQ1Qg T04gREFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8gZ3JhbnQ0O1xFCisJCS94bSwKKwl9LAorCisJ ZXhjbHVkaW5nX2RhdGFiYXNlcyA9PiB7CisJCXNldHVwX3NxbCA9PiAnQ1JFQVRFIERBVEFC QVNFIGRiMTsKKwkJXGMgZGIxCisJCUNSRUFURSBUQUJMRSB0MSAoaWQgaW50KTsKKwkJSU5T RVJUIElOVE8gdDEgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxF IHQyIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MiBWQUxVRVMgKDEpLCAoMiksICgzKSwg KDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYjI7CisJCVxjIGRiMgorCQlDUkVBVEUgVEFC TEUgdDMgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQzIFZBTFVFUyAoMSksICgyKSwgKDMp LCAoNCk7CisJCUNSRUFURSBUQUJMRSB0NCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDQg VkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGJleDM7 CisJCVxjIGRiZXgzCisJCUNSRUFURSBUQUJMRSB0NSAoaWQgaW50KTsKKwkJSU5TRVJUIElO VE8gdDUgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ2IChp ZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NiBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOwor CisJCUNSRUFURSBEQVRBQkFTRSBkYmV4NDsKKwkJXGMgZGJleDQKKwkJQ1JFQVRFIFRBQkxF IHQ3IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NyBWQUxVRVMgKDEpLCAoMiksICgzKSwg KDQpOworCQlDUkVBVEUgVEFCTEUgdDggKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ4IFZB TFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiNTsKKwkJ XGMgZGI1CisJCUNSRUFURSBUQUJMRSB0OSAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDkg VkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQxMCAoaWQgaW50 KTsKKwkJSU5TRVJUIElOVE8gdDEwIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCScs CisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4g J2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFi YXNlcyIsCisJCQknLS1leGNsdWRlLWRhdGFiYXNlJyA9PiAnZGJleConLAorCQldLAorCQly ZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQn ID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4Y2x1ZGluZ19k YXRhYmFzZXMuc3FsIiwKKwkJCSctLWV4Y2x1ZGUtZGF0YWJhc2UnID0+ICdkYjUnLAorCQkJ IiR0ZW1wZGlyL2V4Y2x1ZGluZ19kYXRhYmFzZXMiLAorCQldLAorCQlsaWtlID0+IHFyL14K KwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIxXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVB VEUgVEFCTEUgcHVibGljLnQxIChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJM RSBwdWJsaWMudDIgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRi MlxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MyAoXEUKKwkJ CSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ0ICgveG0sCisJCXVubGlr ZSA9PiBxci9eCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiM1xFCisJCQkoLipcbikqCisJ CQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFD UkVBVEUgVEFCTEUgcHVibGljLnQ2IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBE QVRBQkFTRSBkYjRcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMu dDcgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50OCAoXEUK KwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGI1XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVB VEUgVEFCTEUgcHVibGljLnQ5IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJM RSBwdWJsaWMudDEwIChcRQorCQkveG0sCisJfSwKKworCWZvcm1hdF9kaXJlY3RvcnkgPT4g eworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfZGlyZWN0b3J5KGEgaW50 LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9kaXJlY3Rvcnkg VkFMVUVTICgxLCB0cnVlLCAnbmFtZTEnKSwgKDIsIGZhbHNlLCAnbmFtZTInKTsiLAorCQlk dW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJl Y3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9kaXJlY3RvcnkiLAor CQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQkn LS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zv cm1hdF9kaXJlY3Rvcnkuc3FsIiwKKwkJCSIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5IiwK KwkJXSwKKwkJbGlrZSA9PiBxci9eXG5cUUNPUFkgcHVibGljLmZvcm1hdF9kaXJlY3Rvcnkg KGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWZvcm1hdF90YXIgPT4geworCQlz ZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfdGFyKGEgaW50LCBiIGJvb2xlYW4s IGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF90YXIgVkFMVUVTICgxLCBmYWxzZSwg J25hbWUzJyksICgyLCB0cnVlLCAnbmFtZTQnKTsiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkn cGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICd0YXInLAorCQkJJy0tZmlsZScgPT4g IiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkn cGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICd0YXInLAorCQkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF90YXIuc3FsIiwKKwkJCSIkdGVtcGRpci9mb3JtYXRf dGFyIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eXG5cUUNPUFkgcHVibGljLmZvcm1hdF90YXIg KGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWZvcm1hdF9jdXN0b20gPT4gewor CQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfY3VzdG9tKGEgaW50LCBiIGJv b2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9jdXN0b20gVkFMVUVTICgx LCBmYWxzZSwgJ25hbWU1JyksICgyLCB0cnVlLCAnbmFtZTYnKTsiLAorCQlkdW1wX2NtZCA9 PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQldLAorCQlyZXN0b3Jl X2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdj dXN0b20nLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20uc3FsIiwK KwkJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eIFxu XFFDT1BZIHB1YmxpYy5mb3JtYXRfY3VzdG9tIChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQor CX0sCisKKwlkdW1wX2dsb2JhbHNfb25seSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRF IFRBQkxFIGZvcm1hdF9kaXIoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJU IElOVE8gZm9ybWF0X2RpciBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwgKDIsIHRydWUs ICduYW1lNicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSct LWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1nbG9iYWxzLW9ubHknLAorCQkJJy0t ZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19vbmx5IiwKKwkJXSwKKwkJcmVzdG9y ZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLCAnLS1nbG9iYWxzLW9ubHknLAor CQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRp ci9kdW1wX2dsb2JhbHNfb25seS5zcWwiLAorCQkJIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19v bmx5IiwKKwkJXSwKKwkJbGlrZSA9PiBxci8KKyAgICAgICAgICAgIF5ccypcUUNSRUFURSBS T0xFIGR1bXBhbGw7XEVccypcbgorCQkJL3htCisJfSwpOworCisjIEZpcnN0IGV4ZWN1dGUg dGhlIHNldHVwX3NxbAorZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcGFsbF9y dW5zKQoreworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntzZXR1cF9zcWx9KQorCXsK KwkJJG5vZGUtPnNhZmVfcHNxbCgkcnVuX2RiLCAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntz ZXR1cF9zcWx9KTsKKwl9Cit9CisKKyMgRXhlY3V0ZSB0aGUgdGVzdHMKK2ZvcmVhY2ggbXkg JHJ1biAoc29ydCBrZXlzICVwZ2R1bXBhbGxfcnVucykKK3sKKwkjIENyZWF0ZSBhIG5ldyB0 YXJnZXQgY2x1c3RlciB0byBwZ19yZXN0b3JlIGVhY2ggdGVzdCBjYXNlIHJ1biBzbyB0aGF0 IHdlCisJIyBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgY2xlYW51cCBmcm9tIHRo ZSB0YXJnZXQgY2x1c3RlciBhZnRlciBlYWNoCisJIyBydW4uCisJbXkgJHRhcmdldF9ub2Rl ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJ0YXJnZXRfJHJ1biIpOworCSR0 YXJnZXRfbm9kZS0+aW5pdDsKKwkkdGFyZ2V0X25vZGUtPnN0YXJ0OworCisJIyBEdW1wYWxs IGZyb20gbm9kZSBjbHVzdGVyLgorCSRub2RlLT5jb21tYW5kX29rKFxAeyAkcGdkdW1wYWxs X3J1bnN7JHJ1bn0tPntkdW1wX2NtZH0gfSwKKwkJIiRydW46IHBnX2R1bXBhbGwgcnVucyIp OworCisJIyBSZXN0b3JlIHRoZSBkdW1wIG9uICJ0YXJnZXRfbm9kZSIgY2x1c3Rlci4KKwlt eSBAcmVzdG9yZV9jbWQgPSAoCisJCUB7ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3Jlc3Rv cmVfY21kfSB9LAorCQknLS1ob3N0JywgJHRhcmdldF9ub2RlLT5ob3N0LCAnLS1wb3J0Jywg JHRhcmdldF9ub2RlLT5wb3J0KTsKKworCW15ICgkc3Rkb3V0LCAkc3RkZXJyKSA9IHJ1bl9j b21tYW5kKFxAcmVzdG9yZV9jbWQpOworCisJIyBwZ19yZXN0b3JlIC0tZmlsZSBvdXRwdXQg ZmlsZS4KKwlteSAkb3V0cHV0X2ZpbGUgPSBzbHVycF9maWxlKCIkdGVtcGRpci8ke3J1bn0u c3FsIik7CisKKwlpZiAoICAgISgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSkKKwkJ JiYgISgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9KSkKKwl7CisJCWRpZSAibWlz c2luZyBcImxpa2VcIiBvciBcInVubGlrZVwiIGluIHRlc3QgXCIkcnVuXCIiOworCX0KKwor CWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSkKKwl7CisJCWxpa2UoJG91dHB1 dF9maWxlLCAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSwgInNob3VsZCBkdW1wICRy dW4iKTsKKwl9CisKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSkKKwl7 CisJCXVubGlrZSgKKwkJCSRvdXRwdXRfZmlsZSwKKwkJCSRwZ2R1bXBhbGxfcnVuc3skcnVu fS0+e3VubGlrZX0sCisJCQkic2hvdWxkIG5vdCBkdW1wICRydW4iKTsKKwl9Cit9CisKKyMg U29tZSBuZWdhdGl2ZSB0ZXN0IGNhc2Ugd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwgYW5kIHJl c3RvcmUgdXNpbmcgcGdfcmVzdG9yZQorIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtQyBpcyBu b3QgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsCiskbm9kZS0+ Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIv Zm9ybWF0X2N1c3RvbSIsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6 IGVycm9yOiBvcHRpb24gLUNcLy0tY3JlYXRlIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gcmVz dG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC1D IGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsK KworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiBcbC8tLWxpc3Qgb3B0aW9uIGlzIHVzZWQgd2l0 aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWwor CQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJ Jy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tbGlzdCcsCisJCSctLWZpbGUnID0+ICIk dGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9y OiBvcHRpb24gLWxcLy0tbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBh cmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiAtLWxpc3QgaXMgdXNl ZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyMgcmVwb3J0 IGFuIGVycm9yIHdoZW4gLUwvLS11c2UtbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRoIGR1bXAg b2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19y ZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3Jt YXQnID0+ICdjdXN0b20nLAorCQknLS11c2UtbGlzdCcgPT4gJ3VzZScsCisJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6 IGVycm9yOiBvcHRpb24gLUxcLy0tdXNlLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0 b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLUwv LS11c2UtbGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBh bGwnKTsKKworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLXN0cmljdC1uYW1lcyBvcHRpb24g aXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNf bGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20i LCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1zdHJpY3QtbmFtZXMn LAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIv XFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tc3RyaWN0LW5hbWVzIGNhbm5vdCBiZSB1 c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUv LAorCSdXaGVuIC0tc3RyaWN0LW5hbWVzIGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1 bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0tY2xlYW4g YW5kIC1nLy0tZ2xvYmFscy1vbmx5IGFyZSB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1w IG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdf cmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9y bWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tY2xlYW4nLAorCQknLS1nbG9iYWxzLW9ubHknLAor CQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFw Z19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtLWNsZWFuIGFuZCAtZ1wvLS1nbG9iYWxzLW9u bHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBj cmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLS1jbGVhbiBhbmQgLWcvLS1nbG9i YWxzLW9ubHkgYXJlIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFs bCcKKyk7CisKKyMgcmVwb3J0IGFuIGVycm9yIHdoZW4gbm9uLWV4aXN0IGRhdGFiYXNlIGlz IGdpdmVuIHdpdGggLWQgb3B0aW9uCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsK KwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJ CSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSctZCcgPT4gJ2RicHEnLAorCV0sCisJcXIv XFFGQVRBTDogIGRhdGFiYXNlICJkYnBxIiBkb2VzIG5vdCBleGlzdFxFLywKKwknV2hlbiBu b24tZXhpc3RlbnQgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAtZCBvcHRpb24gaW4gcGdfcmVz dG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcKKyk7CisKKyMgcmVwb3J0IGFuIGVycm9y IHdoZW4gLS1uby1zY2hlbWEgaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5v ZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1w ZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAor CQknLS1uby1zY2hlbWEnLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5z cWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tbm8tc2NoZW1h IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBw Z19kdW1wYWxsXEUvLAorCSdXaGVuIC0tbm8tc2NoZW1hIGlzIHVzZWQgaW4gcGdfcmVzdG9y ZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHJlcG9ydCBhbiBlcnJvciB3aGVu IC0tZGF0YS1vbmx5IGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5j b21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9m b3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0t ZGF0YS1vbmx5JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwK KwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtYVwvLS1kYXRhLW9ubHkg Y2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBn X2R1bXBhbGxcRS8sCisJJ1doZW4gLS1kYXRhLW9ubHkgaXMgdXNlZCBpbiBwZ19yZXN0b3Jl IHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyMgcmVwb3J0IGFuIGVycm9yIHdoZW4g LS1zdGF0aXN0aWNzLW9ubHkgaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5v ZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1w ZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAor CQknLS1zdGF0aXN0aWNzLW9ubHknLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3Jf dGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tc3Rh dGlzdGljcy1vbmx5IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUg Y3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC0tc3RhdGlzdGljcy1vbmx5IGlz IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHJl cG9ydCBhbiBlcnJvciB3aGVuIC0tc2VjdGlvbiBleGNsdWRlcyBwcmUtZGF0YSB3aXRoIGR1 bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdw Z19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1m b3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1zZWN0aW9uJyA9PiAncG9zdC1kYXRhJywKKwkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdf cmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLXNlY3Rpb24gY2Fubm90IGV4Y2x1ZGUgLS1wcmUt ZGF0YSB3aGVuIHJlc3RvcmluZyBhIHBnX2R1bXBhbGwgYXJjaGl2ZVxFLywKKwknV2hlbiAt LXNlY3Rpb249cG9zdC1kYXRhIGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2Yg cGdfZHVtcGFsbCcpOworCisjIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0tZ2xvYmFscy1vbmx5 IGFuZCAtLWRhdGEtb25seSBhcmUgdXNlZCB0b2dldGhlcgorJG5vZGUtPmNvbW1hbmRfZmFp bHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0 b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1nbG9iYWxzLW9u bHknLAorCQknLS1kYXRhLW9ubHknLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3Jf dGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtYVwv LS1kYXRhLW9ubHkgYW5kIC1nXC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlclxFLywKKwknV2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS1kYXRhLW9ubHkgYXJlIHVz ZWQgdG9nZXRoZXInKTsKKworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWdsb2JhbHMtb25s eSBhbmQgLS1zY2hlbWEtb25seSBhcmUgdXNlZCB0b2dldGhlcgorJG5vZGUtPmNvbW1hbmRf ZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9j dXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1nbG9iYWxz LW9ubHknLAorCQknLS1zY2hlbWEtb25seScsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9l cnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb25z IC1zXC8tLXNjaGVtYS1vbmx5IGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVz ZWQgdG9nZXRoZXJcRS8sCisJJ1doZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tc2NoZW1hLW9u bHkgYXJlIHVzZWQgdG9nZXRoZXInKTsKKworIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWds b2JhbHMtb25seSBhbmQgLS1zdGF0aXN0aWNzLW9ubHkgYXJlIHVzZWQgdG9nZXRoZXIKKyRu b2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVt cGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywK KwkJJy0tZ2xvYmFscy1vbmx5JywKKwkJJy0tc3RhdGlzdGljcy1vbmx5JywKKwkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9y ZTogZXJyb3I6IG9wdGlvbnMgLS1zdGF0aXN0aWNzLW9ubHkgYW5kIC1nXC8tLWdsb2JhbHMt b25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKKwknV2hlbiAtLWdsb2JhbHMtb25s eSBhbmQgLS1zdGF0aXN0aWNzLW9ubHkgYXJlIHVzZWQgdG9nZXRoZXInKTsKKworIyByZXBv cnQgYW4gZXJyb3Igd2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS1zdGF0aXN0aWNzIGFyZSB1 c2VkIHRvZ2V0aGVyCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jl c3RvcmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1h dCcgPT4gJ2N1c3RvbScsCisJCSctLWdsb2JhbHMtb25seScsCisJCSctLXN0YXRpc3RpY3Mn LAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIv XFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtLXN0YXRpc3RpY3MgYW5kIC1nXC8tLWds b2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKKwknV2hlbiAtLWdsb2Jh bHMtb25seSBhbmQgLS1zdGF0aXN0aWNzIGFyZSB1c2VkIHRvZ2V0aGVyJyk7CisKKyMgcmVw b3J0IGFuIGVycm9yIHdoZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tZXhpdC1vbi1lcnJvciBh cmUgdXNlZCB0b2dldGhlcgorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdw Z19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1m b3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1nbG9iYWxzLW9ubHknLAorCQknLS1leGl0LW9u LWVycm9yJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwld LAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbnMgLS1leGl0LW9uLWVycm9yIGFu ZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCisJJ1do ZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tZXhpdC1vbi1lcnJvciBhcmUgdXNlZCB0b2dldGhl cicpOworCisjIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0tZ2xvYmFscy1vbmx5IGFuZCAtLXNp bmdsZS10cmFuc2FjdGlvbiBhcmUgdXNlZCB0b2dldGhlcgorJG5vZGUtPmNvbW1hbmRfZmFp bHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0 b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1nbG9iYWxzLW9u bHknLAorCQknLS1zaW5nbGUtdHJhbnNhY3Rpb24nLAorCQknLS1maWxlJyA9PiAiJHRlbXBk aXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0 aW9ucyAtLXNpbmdsZS10cmFuc2FjdGlvbiBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5IGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyXEUvLAorCSdXaGVuIC0tZ2xvYmFscy1vbmx5IGFuZCAtLXNp bmdsZS10cmFuc2FjdGlvbiBhcmUgdXNlZCB0b2dldGhlcicpOworCisjIHJlcG9ydCBhbiBl cnJvciB3aGVuIC0tZ2xvYmFscy1vbmx5IGFuZCAtLXRyYW5zYWN0aW9uLXNpemUgYXJlIHVz ZWQgdG9nZXRoZXIKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVz dG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0 JyA9PiAnY3VzdG9tJywKKwkJJy0tZ2xvYmFscy1vbmx5JywKKwkJJy0tdHJhbnNhY3Rpb24t c2l6ZScgPT4gJzEwMCcsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNx bCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb25zIC0tdHJhbnNhY3Rp b24tc2l6ZSBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVy XEUvLAorCSdXaGVuIC0tZ2xvYmFscy1vbmx5IGFuZCAtLXRyYW5zYWN0aW9uLXNpemUgYXJl IHVzZWQgdG9nZXRoZXInKTsKKworIyB2ZXJpZnkgbWFwLmRhdCBwcmVhbWJsZSBleGlzdHMK K215ICRtYXBfZGF0X2NvbnRlbnQgPSBzbHVycF9maWxlKCIkdGVtcGRpci9mb3JtYXRfZGly ZWN0b3J5L21hcC5kYXQiKTsKK2xpa2UoCisJJG1hcF9kYXRfY29udGVudCwKKwlxci9eIyBt YXBcLmRhdFxuLiojIFRoaXMgZmlsZSBtYXBzIG9pZHMgdG8gZGF0YWJhc2UgbmFtZXMvbXMs CisJJ21hcC5kYXQgY29udGFpbnMgZXhwZWN0ZWQgcHJlYW1ibGUnKTsKKworIyB2ZXJpZnkg Y29tbWVudGluZyBvdXQgYSBsaW5lIGluIG1hcC5kYXQgc2tpcHMgdGhhdCBkYXRhYmFzZQor JG5vZGUtPnNhZmVfcHNxbCgkcnVuX2RiLCAnQ1JFQVRFIERBVEFCQVNFIGNvbW1lbnRfdGVz dF9kYjsKK1xjIGNvbW1lbnRfdGVzdF9kYgorQ1JFQVRFIFRBQkxFIGNvbW1lbnRfdGVzdF90 YWJsZSAoaWQgaW50KTsnKTsKKworJG5vZGUtPmNvbW1hbmRfb2soCisJWworCQkncGdfZHVt cGFsbCcsCisJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCSctLWZpbGUnID0+ICIk dGVtcGRpci9jb21tZW50X3Rlc3QiLAorCV0sCisJJ3BnX2R1bXBhbGwgZm9yIGNvbW1lbnQg dGVzdCcpOworCisjIE1vZGlmeSBtYXAuZGF0IHRvIGNvbW1lbnQgb3V0IHRoZSBjb21tZW50 X3Rlc3RfZGIgZW50cnkKK215ICRtYXBfY29udGVudCA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGly L2NvbW1lbnRfdGVzdC9tYXAuZGF0Iik7CiskbWFwX2NvbnRlbnQgPX4gcy9eKFxkKyBjb21t ZW50X3Rlc3RfZGIpJC8jICQxL207CitvcGVuKG15ICRmaCwgJz4nLCAiJHRlbXBkaXIvY29t bWVudF90ZXN0L21hcC5kYXQiKQorICBvciBkaWUgIkNhbm5vdCBvcGVuIG1hcC5kYXQ6ICQh IjsKK3ByaW50ICRmaCAkbWFwX2NvbnRlbnQ7CitjbG9zZSgkZmgpOworCisjIENyZWF0ZSBh IHRhcmdldCBub2RlIGFuZCByZXN0b3JlIC0gY29tbWVudGVkIGRiIHNob3VsZCBiZSBza2lw cGVkCitteSAkdGFyZ2V0X2NvbW1lbnQgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoInRhcmdldF9jb21tZW50Iik7CiskdGFyZ2V0X2NvbW1lbnQtPmluaXQ7CiskdGFyZ2V0 X2NvbW1lbnQtPnN0YXJ0OworCiskbm9kZS0+Y29tbWFuZF9vaygKKwlbCisJCSdwZ19yZXN0 b3JlJywgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJJy0tZmlsZScg PT4gIiR0ZW1wZGlyL2NvbW1lbnRfdGVzdF9yZXN0b3JlLnNxbCIsCisJCSctLWhvc3QnLCAk dGFyZ2V0X2NvbW1lbnQtPmhvc3QsCisJCSctLXBvcnQnLCAkdGFyZ2V0X2NvbW1lbnQtPnBv cnQsCisJCSIkdGVtcGRpci9jb21tZW50X3Rlc3QiLAorCV0sCisJJ3BnX3Jlc3RvcmUgd2l0 aCBjb21tZW50ZWQgb3V0IGRhdGFiYXNlIGluIG1hcC5kYXQnKTsKKworbXkgJHJlc3RvcmVf b3V0cHV0ID0gc2x1cnBfZmlsZSgiJHRlbXBkaXIvY29tbWVudF90ZXN0X3Jlc3RvcmUuc3Fs Iik7Cit1bmxpa2UoCisJJHJlc3RvcmVfb3V0cHV0LAorCXFyL0NSRUFURSBEQVRBQkFTRSBj b21tZW50X3Rlc3RfZGIvLAorCSdjb21tZW50ZWQgb3V0IGRhdGFiYXNlIGluIG1hcC5kYXQg aXMgbm90IHJlc3RvcmVkJyk7CisKKyMgVGVzdCB0aGF0IC0tY2xlYW4gaW1wbGllcyAtLWlm LWV4aXN0cyBmb3IgcGdfZHVtcGFsbCBhcmNoaXZlcworJG5vZGUtPmNvbW1hbmRfb2soCisJ WworCQkncGdfcmVzdG9yZScsICctQycsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJ CSctLWNsZWFuJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2NsZWFuX3Rlc3Quc3FsIiwK KwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCV0sCisJJ3BnX3Jlc3RvcmUgd2l0aCAt LWNsZWFuIG9uIHBnX2R1bXBhbGwgYXJjaGl2ZScpOworCitteSAkY2xlYW5fb3V0cHV0ID0g c2x1cnBfZmlsZSgiJHRlbXBkaXIvY2xlYW5fdGVzdC5zcWwiKTsKK2xpa2UoCisJJGNsZWFu X291dHB1dCwKKwlxci9EUk9QIFJPTEUgSUYgRVhJU1RTLywKKwknLS1jbGVhbiBpbXBsaWVz IC0taWYtZXhpc3RzOiBEUk9QIFJPTEUgSUYgRVhJU1RTIGluIG91dHB1dCcpOworCiskbm9k ZS0+c3RvcCgnZmFzdCcpOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggMjQxOTQ1NzM0ZWMuLjFhODllZjk0YmVjIDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtNjAwLDYgKzYwMCw3IEBAIEN1c3RvbVNjYW5NZXRob2Rz CiBDdXN0b21TY2FuU3RhdGUKIEN5Y2xlQ3RyCiBEQlN0YXRlCitEYk9pZE5hbWUKIERDSENh Y2hlRW50cnkKIERFQURMT0NLX0lORk8KIERFQ291bnRJdGVtCi0tIAoyLjQzLjAKCg== --------------NLw1I6vW6zstYdY0j5fuHlqC--