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.94.2) (envelope-from ) id 1r9pbl-002Ypt-7e for pgsql-hackers@arkaria.postgresql.org; Sun, 03 Dec 2023 16:46:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r9pbj-00Cybp-BF for pgsql-hackers@arkaria.postgresql.org; Sun, 03 Dec 2023 16:46:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r9pbi-00Cybh-R6 for pgsql-hackers@lists.postgresql.org; Sun, 03 Dec 2023 16:46:15 +0000 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r9pbc-009ubW-Fv for pgsql-hackers@lists.postgresql.org; Sun, 03 Dec 2023 16:46:13 +0000 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-40bd5eaa66eso16443935e9.3 for ; Sun, 03 Dec 2023 08:46:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1701621967; x=1702226767; darn=lists.postgresql.org; h=in-reply-to:content-language:references:cc:to:subject:from :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=7YOcJjHo916hmQ1MMHUFR2KaESf1dyhu2IEKl7mq05g=; b=J2hOSYwEuTZjYoda/hfVTenKx6zzicABUopQwfAL7DyYYkEohPUZAYJV9BIhKoHKHu Sxdwl0D8D7+483/WUXReaPJof+2aCzrKU9+5Cx+m1vaA5lPdgBduD6Fa+XjJ3Y8nvUdt WmZvL2URYSMkG6YluOShDL2mykiv+5XSL9NH/ZX+e0LzMKpwgAUlcNWpFbY7pbWG3MqJ 4mr57SPSjx2bRWiyx7YaZorQBqNXEqp3ex8Ge6R4e3CAdR2jZRUkU1dOBi6+MVgV7CzC qZ6HyDozfxwp7yo6c4kzcj++w9HzC6vVkuVntdbKhxseTQTyXhE9PCihAVyTTUMYIS9e wuqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701621967; x=1702226767; h=in-reply-to:content-language:references:cc:to:subject:from :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=7YOcJjHo916hmQ1MMHUFR2KaESf1dyhu2IEKl7mq05g=; b=Z25hbP1K8/zddrw6ZnpsPdehqRWM3bKjbOYtYMrlOn31axTMcRQOINuZiog/vGWLX+ 0QjnHAHfPJYN9TdS7kU9sGcMd641wDfcixzIaVYA9Gb0VHC72SWNcM0UKcGItwxvovhu K8islJQz2KDyAwFu6FfgLB2YuiML3+IPQW4e1mhjaWVdXqVI9MFxp5aaR3SRbaEsvTgI UsOImrzjKlkmrx2kkZZ0yk3vdVyWyC+CvdBg3clzOK0UBoZVHAC/M5vGMEzKrx2lU4pN sxRgV8KDyGrXTUB9RSxfhlrEnDkxhP/n1ryFHXYNGj4DjMEeZFphHys0Tyq1b7Z9lZQc InEQ== X-Gm-Message-State: AOJu0Yzy9dXi8p+zAx+ZdnPo8/0HhixUBR41ePC5Cf2yzJSj/i4Qj2iJ GXO0iQ7snqy2reFtVGLNWrgw9g== X-Google-Smtp-Source: AGHT+IHo+ZBp0/Oj91SCGkb1XKrfkgmn/FrNo9dey3gcQbmPklesKBp86bj+QdWJ+A9EVhh3mXzjCA== X-Received: by 2002:a1c:750a:0:b0:40b:5e59:e9ec with SMTP id o10-20020a1c750a000000b0040b5e59e9ecmr1945522wmc.139.1701621966414; Sun, 03 Dec 2023 08:46:06 -0800 (PST) Received: from [10.137.0.17] (ip-86-49-229-30.bb.vodafone.cz. [86.49.229.30]) by smtp.gmail.com with ESMTPSA id ay10-20020a05600c1e0a00b0040b397787d3sm15922507wmb.24.2023.12.03.08.46.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 03 Dec 2023 08:46:05 -0800 (PST) Content-Type: multipart/mixed; boundary="------------K0fKQakmp7i0eOvKpkcNCMqh" Message-ID: <99f9ecbe-0976-8012-67b5-dbff58c7dbec@enterprisedb.com> Date: Sun, 3 Dec 2023 17:46:03 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 From: Tomas Vondra Subject: Re: Parallel CREATE INDEX for BRIN indexes To: Matthias van de Meent Cc: PostgreSQL Hackers References: <5384d42e-1961-c2fd-1955-1a5a99fa1234@enterprisedb.com> <9a646c51-a4c3-ce34-cccd-99d00fd1dc6a@enterprisedb.com> <64adb9cb-3474-e0ff-7a38-9bed4f5170e6@enterprisedb.com> Content-Language: en-US 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. --------------K0fKQakmp7i0eOvKpkcNCMqh Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 11/30/23 18:47, Matthias van de Meent wrote: > ... > > I just ran some more tests in less favorable environments, and it > looks like I hit a bug: > > % SET max_parallel_workers = 0; > % CREATE INDEX ... USING brin (...); > ERROR: cannot update tuples during a parallel operation > > Fix attached in 0002. Yeah, that's a bug, thanks for the fix. Yeah Just jumping to a "cleanup" label seems a bit cleaner (if that can be said about using goto), so I tweaked the patch to do that instead. > In 0003 I add the mentioned backfilling of empty ranges at the end of > the table. I added it for both normal and parallel index builds, as > normal builds apparently also didn't yet have this yet. > Right. I was thinking about doing that to, but you beat me to it. I don't want to bury this in the main patch adding parallel builds, it's not really related to parallel CREATE INDEX. And it'd be weird to have this for parallel builds first, so I rebased it as 0001. As for the backfilling, I think we need to simplify the code a bit. We have three places doing essentially the same thing (one for serial builds, two for parallel builds). That's unnecessarily verbose, and makes it harder to understand the code. But more importantly, the three places are not doing exactly the same - some increment the current range before, some do it at the end of the loop, etc. I got confused by this multiple times. So 0004 simplifies this - the backfilling is done by a function called from all the places. The main complexity is in ensuring all three places have the same concept of how to specify the range (of ranges) to fill. Note: The serial might have two places too, but the main loop in brinbuildCallback() does it range by range. It's a bit less efficient as it can't use the pre-built empty tuple easily, but that's fine IMO. skipping the last page range? ----------------------------- I noticed you explicitly skipped backfilling empty tuple for the last page range. Can you explain? I suspect the idea was that the user activity would trigger building the tuple once that page range is filled, but we don't really know if the table receives any changes. It might easily be just a static table, in which case the last range would remain unsummarized. If this is the right thing to do, the serial build should do that too probably ... But I don't think that's the correct thing to do - I think CREATE INDEX is expected to always build a complete index, so my version always builds an index for all table pages. BlockNumber overflows --------------------- The one thing that I'm not quite sure is correct is whether this handles overflows/underflows correctly. I mean, imagine you have a huge table that's almost 0xFFFFFFFF blocks, pages_per_range is prime, and the last range ends less than pages_per_range from 0xFFFFFFFF. Then this blkno += pages_per_range; can overflow, and might start inserting index tuples again (so we'd end up with a duplicate). I do think the current patch does this correctly, but AFAICS this is a pre-existing issue ... Anyway, while working on this / stress-testing it, I realized there's a bug in how we allocate the emptyTuple. It's allocated lazily, but if can easily happen in the per-range context we introduced last week. It needs to be allocated in the context covering the whole index build. I think the best way to do that is per 0006, i.e. allocate it in the BrinBuildState, along with the appropriate memory context. Obviously, all of this (0002-0006) should be squashed into a single commit, I only keep it separate to make it clearer what changed. stress-testing script --------------------- I'm also attaching the bash script I use to stress test this - it's just a loop that creates somewhat random table (different number of rows, distinct values, ...), maybe deletes some of it, creates an index (possibly partial), and then does various checks on it (checks number of ranges, queries the table, etc.). It's somewhat primitive but it turned out to be very capable in triggering bugs in BlockNumber arithmetic, emptyTuple allocations, etc. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------K0fKQakmp7i0eOvKpkcNCMqh Content-Type: text/x-patch; charset=UTF-8; name="v8-0001-backfill-pages-in-serial-build.patch" Content-Disposition: attachment; filename="v8-0001-backfill-pages-in-serial-build.patch" Content-Transfer-Encoding: base64 RnJvbSBkYjM4YjRjM2ZmMWM4YWMzYTQ1MWRhNjdiZGU0MWYxMjVhOTkyMmYwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU2F0LCAyIERlYyAyMDIzIDE3OjU1OjEwICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2OCAxLzZdIGJhY2tmaWxsIHBhZ2VzIGluIHNlcmlhbCBidWlsZAoKLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgfCAzNSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwg NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9i cmluLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggNGYyZGZkZDE3 YjkuLmI0YmVkYmRjNTNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9i cmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC01MSw2ICs1 MSw3IEBAIHR5cGVkZWYgc3RydWN0IEJyaW5CdWlsZFN0YXRlCiAJUmVsYXRpb24JYnNfaXJl bDsKIAlpbnQJCQlic19udW10dXBsZXM7CiAJQnVmZmVyCQlic19jdXJyZW50SW5zZXJ0QnVm OworCUJsb2NrTnVtYmVyCWJzX3RhYmxlUGFnZXM7CiAJQmxvY2tOdW1iZXIgYnNfcGFnZXNQ ZXJSYW5nZTsKIAlCbG9ja051bWJlciBic19jdXJyUmFuZ2VTdGFydDsKIAlCcmluUmV2bWFw ICpic19ybUFjY2VzczsKQEAgLTgyLDcgKzgzLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQnJpbk9w YXF1ZQogI2RlZmluZSBCUklOX0FMTF9CTE9DS1JBTkdFUwlJbnZhbGlkQmxvY2tOdW1iZXIK IAogc3RhdGljIEJyaW5CdWlsZFN0YXRlICppbml0aWFsaXplX2JyaW5fYnVpbGRzdGF0ZShS ZWxhdGlvbiBpZHhSZWwsCi0JCQkJCQkJCQkJCQkgIEJyaW5SZXZtYXAgKnJldm1hcCwgQmxv Y2tOdW1iZXIgcGFnZXNQZXJSYW5nZSk7CisJCQkJCQkJCQkJCQkgIEJyaW5SZXZtYXAgKnJl dm1hcCwKKwkJCQkJCQkJCQkJCSAgQmxvY2tOdW1iZXIgcGFnZXNQZXJSYW5nZSwKKwkJCQkJ CQkJCQkJCSAgQmxvY2tOdW1iZXIgdGFibGVQYWdlcyk7CiBzdGF0aWMgQnJpbkluc2VydFN0 YXRlICppbml0aWFsaXplX2JyaW5faW5zZXJ0c3RhdGUoUmVsYXRpb24gaWR4UmVsLCBJbmRl eEluZm8gKmluZGV4SW5mbyk7CiBzdGF0aWMgdm9pZCB0ZXJtaW5hdGVfYnJpbl9idWlsZHN0 YXRlKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSk7CiBzdGF0aWMgdm9pZCBicmluc3VtbWFyaXpl KFJlbGF0aW9uIGluZGV4LCBSZWxhdGlvbiBoZWFwUmVsLCBCbG9ja051bWJlciBwYWdlUmFu Z2UsCkBAIC04ODYsNyArODg5LDggQEAgYnJpbmJ1aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0 aW9uIGluZGV4LCBJbmRleEluZm8gKmluZGV4SW5mbykKIAlCcmluUmV2bWFwICpyZXZtYXA7 CiAJQnJpbkJ1aWxkU3RhdGUgKnN0YXRlOwogCUJ1ZmZlcgkJbWV0YTsKLQlCbG9ja051bWJl ciBwYWdlc1BlclJhbmdlOworCUJsb2NrTnVtYmVyIHBhZ2VzUGVyUmFuZ2UsCisJCQkJdGFi bGVQYWdlczsKIAogCS8qCiAJICogV2UgZXhwZWN0IHRvIGJlIGNhbGxlZCBleGFjdGx5IG9u Y2UgZm9yIGFueSBpbmRleCByZWxhdGlvbi4KQEAgLTkzMyw3ICs5MzcsOCBAQCBicmluYnVp bGQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZv KQogCSAqIEluaXRpYWxpemUgb3VyIHN0YXRlLCBpbmNsdWRpbmcgdGhlIGRlZm9ybWVkIHR1 cGxlIHN0YXRlLgogCSAqLwogCXJldm1hcCA9IGJyaW5SZXZtYXBJbml0aWFsaXplKGluZGV4 LCAmcGFnZXNQZXJSYW5nZSk7Ci0Jc3RhdGUgPSBpbml0aWFsaXplX2JyaW5fYnVpbGRzdGF0 ZShpbmRleCwgcmV2bWFwLCBwYWdlc1BlclJhbmdlKTsKKwl0YWJsZVBhZ2VzID0gUmVsYXRp b25HZXROdW1iZXJPZkJsb2NrcyhoZWFwKTsKKwlzdGF0ZSA9IGluaXRpYWxpemVfYnJpbl9i dWlsZHN0YXRlKGluZGV4LCByZXZtYXAsIHBhZ2VzUGVyUmFuZ2UsIHRhYmxlUGFnZXMpOwog CiAJLyoKIAkgKiBOb3cgc2NhbiB0aGUgcmVsYXRpb24uICBObyBzeW5jc2NhbiBhbGxvd2Vk IGhlcmUgYmVjYXVzZSB3ZSB3YW50IHRoZQpAQCAtOTQ1LDYgKzk1MCwyNCBAQCBicmluYnVp bGQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZv KQogCS8qIHByb2Nlc3MgdGhlIGZpbmFsIGJhdGNoICovCiAJZm9ybV9hbmRfaW5zZXJ0X3R1 cGxlKHN0YXRlKTsKIAorCS8qIFhYWCBzaG91bGRuJ3QgdGhpcyBoYXBwZW4gaW4gdGhlIGJy aW5idWlsZENhbGxiYWNrPyAqLworCXN0YXRlLT5ic19jdXJyUmFuZ2VTdGFydCArPSBzdGF0 ZS0+YnNfcGFnZXNQZXJSYW5nZTsKKwkvKgorCSAqIEJhY2tmaWxsIHRoZSBmaW5hbCByYW5n ZXMgd2l0aCBlbXB0eSBkYXRhLgorCSAqCisJICogVGhpcyBzYXZlcyB1cyBmcm9tIGRvaW5n IHdoYXQgYW1vdW50cyB0byBmdWxsIHRhYmxlIHNjYW5zIHdoZW4gdGhlCisJICogaW5kZXgg aXMgYnVpbHQgb24gc3R1cGlkIGluZGV4IHF1YWxzIGxpa2UgV0hFUkUgKG5vbm51bGxfY29s dW1uIElTCisJICogTlVMTCkuCisJICovCisJd2hpbGUgKHN0YXRlLT5ic19jdXJyUmFuZ2VT dGFydCArIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlIC0gMSA8IHN0YXRlLT5ic190YWJsZVBh Z2VzKQorCXsKKwkJYnJpbl9tZW10dXBsZV9pbml0aWFsaXplKHN0YXRlLT5ic19kdHVwbGUs IHN0YXRlLT5ic19iZGVzYyk7CisKKwkJZm9ybV9hbmRfaW5zZXJ0X3R1cGxlKHN0YXRlKTsK KworCQlzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQgKz0gc3RhdGUtPmJzX3BhZ2VzUGVyUmFu Z2U7CisJfQorCiAJLyogcmVsZWFzZSByZXNvdXJjZXMgKi8KIAlpZHh0dXBsZXMgPSBzdGF0 ZS0+YnNfbnVtdHVwbGVzOwogCWJyaW5SZXZtYXBUZXJtaW5hdGUoc3RhdGUtPmJzX3JtQWNj ZXNzKTsKQEAgLTEzNTgsNyArMTM4MSw3IEBAIGJyaW5HZXRTdGF0cyhSZWxhdGlvbiBpbmRl eCwgQnJpblN0YXRzRGF0YSAqc3RhdHMpCiAgKi8KIHN0YXRpYyBCcmluQnVpbGRTdGF0ZSAq CiBpbml0aWFsaXplX2JyaW5fYnVpbGRzdGF0ZShSZWxhdGlvbiBpZHhSZWwsIEJyaW5SZXZt YXAgKnJldm1hcCwKLQkJCQkJCSAgIEJsb2NrTnVtYmVyIHBhZ2VzUGVyUmFuZ2UpCisJCQkJ CQkgICBCbG9ja051bWJlciBwYWdlc1BlclJhbmdlLCBCbG9ja051bWJlciB0YWJsZVBhZ2Vz KQogewogCUJyaW5CdWlsZFN0YXRlICpzdGF0ZTsKIApAQCAtMTM2OCw2ICsxMzkxLDcgQEAg aW5pdGlhbGl6ZV9icmluX2J1aWxkc3RhdGUoUmVsYXRpb24gaWR4UmVsLCBCcmluUmV2bWFw ICpyZXZtYXAsCiAJc3RhdGUtPmJzX251bXR1cGxlcyA9IDA7CiAJc3RhdGUtPmJzX2N1cnJl bnRJbnNlcnRCdWYgPSBJbnZhbGlkQnVmZmVyOwogCXN0YXRlLT5ic19wYWdlc1BlclJhbmdl ID0gcGFnZXNQZXJSYW5nZTsKKwlzdGF0ZS0+YnNfdGFibGVQYWdlcyA9IHRhYmxlUGFnZXM7 CiAJc3RhdGUtPmJzX2N1cnJSYW5nZVN0YXJ0ID0gMDsKIAlzdGF0ZS0+YnNfcm1BY2Nlc3Mg PSByZXZtYXA7CiAJc3RhdGUtPmJzX2JkZXNjID0gYnJpbl9idWlsZF9kZXNjKGlkeFJlbCk7 CkBAIC0xNjEyLDcgKzE2MzYsOCBAQCBicmluc3VtbWFyaXplKFJlbGF0aW9uIGluZGV4LCBS ZWxhdGlvbiBoZWFwUmVsLCBCbG9ja051bWJlciBwYWdlUmFuZ2UsCiAJCQkJLyogZmlyc3Qg dGltZSB0aHJvdWdoICovCiAJCQkJQXNzZXJ0KCFpbmRleEluZm8pOwogCQkJCXN0YXRlID0g aW5pdGlhbGl6ZV9icmluX2J1aWxkc3RhdGUoaW5kZXgsIHJldm1hcCwKLQkJCQkJCQkJCQkJ CSAgIHBhZ2VzUGVyUmFuZ2UpOworCQkJCQkJCQkJCQkJICAgcGFnZXNQZXJSYW5nZSwKKwkJ CQkJCQkJCQkJCSAgIEludmFsaWRCbG9ja051bWJlcik7CiAJCQkJaW5kZXhJbmZvID0gQnVp bGRJbmRleEluZm8oaW5kZXgpOwogCQkJfQogCQkJc3VtbWFyaXplX3JhbmdlKGluZGV4SW5m bywgc3RhdGUsIGhlYXBSZWwsIHN0YXJ0QmxrLCBoZWFwTnVtQmxvY2tzKTsKLS0gCjIuNDEu MAoK --------------K0fKQakmp7i0eOvKpkcNCMqh Content-Type: text/x-patch; charset=UTF-8; name="v8-0002-Allow-BRIN-to-build-its-index-in-parallel.patch" Content-Disposition: attachment; filename="v8-0002-Allow-BRIN-to-build-its-index-in-parallel.patch" Content-Transfer-Encoding: base64 RnJvbSAyMDZmMzQyMGI1YjQwNjU3M2U2YTA0MGFlMjk1NDg1NGEwNDA0YmY4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGlhcyB2YW4gZGUgTWVlbnQgPGJvZWtld3Vy bStwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMjkgTm92IDIwMjMgMTQ6MzU6MTAg KzAxMDAKU3ViamVjdDogW1BBVENIIHY4IDIvNl0gQWxsb3cgQlJJTiB0byBidWlsZCBpdHMg aW5kZXggaW4gcGFyYWxsZWwKCi0tLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAg ICAgICAgICAgICAgICAgIHwgICAxICsKIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAg ICAgICAgICAgICAgICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu LmMgICAgICAgICAgICAgICAgfCA5MTYgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jICAgICAgICAgIHwgICAxICsKIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMgICAgICAgICB8ICAgNCArCiBzcmMv YmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYyAgICB8IDIwNyArKysr CiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgIDIg Kwogc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4uaCAgICAgICAgICAgICAgICAgICAgIHwgICAz ICsKIHNyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oICAgICAgICAgICAgICAgICB8ICAx MSArCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAgfCAg IDEgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwg ICA1ICsKIDE2IGZpbGVzIGNoYW5nZWQsIDExNDcgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgYi9jb250cmli L2Jsb29tL2JsdXRpbHMuYwppbmRleCA0ODMwY2IzZmVlNi4uYTc4MWM1ZDk4ZDYgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmx1 dGlscy5jCkBAIC0xMjIsNiArMTIyLDcgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJYW1yb3V0aW5lLT5hbWNsdXN0ZXJhYmxlID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXBy ZWRsb2NrcyA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwor CWFtcm91dGluZS0+YW1jYW5idWlsZHBhcmFsbGVsID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5h bWNhbmluY2x1ZGUgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3b3Jr bWVtID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVsdmFjdXVtb3B0aW9ucyA9CmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIvZG9jL3NyYy9zZ21sL2lu ZGV4YW0uc2dtbAppbmRleCBmMTA3YzQzZDZhNi4uY2M0MTM1ZTM5NDAgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0u c2dtbApAQCAtMTIzLDYgKzEyMyw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5l CiAgICAgYm9vbCAgICAgICAgYW1wcmVkbG9ja3M7CiAgICAgLyogZG9lcyBBTSBzdXBwb3J0 IHBhcmFsbGVsIHNjYW4/ICovCiAgICAgYm9vbCAgICAgICAgYW1jYW5wYXJhbGxlbDsKKyAg ICAvKiBkb2VzIEFNIHN1cHBvcnQgcGFyYWxsZWwgYnVpbGQ/ICovCisgICAgYm9vbCAgICAg ICAgYW1jYW5idWlsZHBhcmFsbGVsOwogICAgIC8qIGRvZXMgQU0gc3VwcG9ydCBjb2x1bW5z IGluY2x1ZGVkIHdpdGggY2xhdXNlIElOQ0xVREU/ICovCiAgICAgYm9vbCAgICAgICAgYW1j YW5pbmNsdWRlOwogICAgIC8qIGRvZXMgQU0gdXNlIG1haW50ZW5hbmNlX3dvcmtfbWVtPyAq LwpAQCAtMjg2LDYgKzI4OCwxMSBAQCBhbWJ1aWxkIChSZWxhdGlvbiBoZWFwUmVsYXRpb24s CiAgICBhbmQgY29tcHV0ZSB0aGUga2V5cyB0aGF0IG5lZWQgdG8gYmUgaW5zZXJ0ZWQgaW50 byB0aGUgaW5kZXguCiAgICBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBwYWxsb2MnZCBz dHJ1Y3QgY29udGFpbmluZyBzdGF0aXN0aWNzIGFib3V0CiAgICB0aGUgbmV3IGluZGV4Lgor ICAgVGhlIDxzdHJ1Y3RmaWVsZD5hbWNhbmJ1aWxkcGFyYWxsZWw8L3N0cnVjdGZpZWxkPiBm bGFnIGluZGljYXRlcyB3aGV0aGVyCisgICB0aGUgYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyBw YXJhbGxlbCBpbmRleCBidWlsZHMuIFdoZW4gc2V0IHRvIDxsaXRlcmFsPnRydWU8L2xpdGVy YWw+LAorICAgdGhlIHN5c3RlbSB3aWxsIGF0dGVtcHQgdG8gYWxsb2NhdGUgcGFyYWxsZWwg d29ya2VycyBmb3IgdGhlIGJ1aWxkLgorICAgQWNjZXNzIG1ldGhvZHMgc3VwcG9ydGluZyBv bmx5IG5vbi1wYXJhbGxlbCBpbmRleCBidWlsZHMgc2hvdWxkIGxlYXZlCisgICB0aGlzIGZs YWcgc2V0IHRvIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4KICAgPC9wYXJhPgogCiAgIDxw YXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IGI0YmVkYmRjNTNjLi5lZGYyZGFh ZDBjMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtMzMsNiArMzMsNyBAQAogI2lu Y2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVm bWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mcmVlc3BhY2UuaCIKKyNpbmNsdWRlICJ0Y29w L3Rjb3Bwcm90LmgiCQkvKiBwZ3JtaW5jbHVkZSBpZ25vcmUgKi8KICNpbmNsdWRlICJ1dGls cy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxz L2RhdHVtLmgiCkBAIC00MCw3ICs0MSwxMTkgQEAKICNpbmNsdWRlICJ1dGlscy9pbmRleF9z ZWxmdW5jcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvdHVwbGVzb3J0LmgiCiAKKy8qIE1hZ2ljIG51 bWJlcnMgZm9yIHBhcmFsbGVsIHN0YXRlIHNoYXJpbmcgKi8KKyNkZWZpbmUgUEFSQUxMRUxf S0VZX0JSSU5fU0hBUkVECQlVSU5UNjRDT05TVCgweEIwMDAwMDAwMDAwMDAwMDEpCisjZGVm aW5lIFBBUkFMTEVMX0tFWV9UVVBMRVNPUlQJCQlVSU5UNjRDT05TVCgweEIwMDAwMDAwMDAw MDAwMDIpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhUCQkJVUlOVDY0Q09OU1Qo MHhCMDAwMDAwMDAwMDAwMDAzKQorI2RlZmluZSBQQVJBTExFTF9LRVlfV0FMX1VTQUdFCQkJ VUlOVDY0Q09OU1QoMHhCMDAwMDAwMDAwMDAwMDA0KQorI2RlZmluZSBQQVJBTExFTF9LRVlf QlVGRkVSX1VTQUdFCQlVSU5UNjRDT05TVCgweEIwMDAwMDAwMDAwMDAwMDUpCisKKy8qCisg KiBTdGF0dXMgcmVjb3JkIGZvciBzcG9vbGluZy9zb3J0aW5nIHBoYXNlLgorICovCit0eXBl ZGVmIHN0cnVjdCBCcmluU3Bvb2wKK3sKKwlUdXBsZXNvcnRzdGF0ZSAqc29ydHN0YXRlOwkv KiBzdGF0ZSBkYXRhIGZvciB0dXBsZXNvcnQuYyAqLworCVJlbGF0aW9uCWhlYXA7CisJUmVs YXRpb24JaW5kZXg7Cit9IEJyaW5TcG9vbDsKKworLyoKKyAqIFN0YXR1cyBmb3IgaW5kZXgg YnVpbGRzIHBlcmZvcm1lZCBpbiBwYXJhbGxlbC4gIFRoaXMgaXMgYWxsb2NhdGVkIGluIGEK KyAqIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50LgorICovCit0eXBlZGVmIHN0cnVj dCBCcmluU2hhcmVkCit7CisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgYXJlIG5vdCBtb2RpZmll ZCBkdXJpbmcgdGhlIGJ1aWxkLiAgVGhleSBwcmltYXJpbHkgZXhpc3QKKwkgKiBmb3IgdGhl IGJlbmVmaXQgb2Ygd29ya2VyIHByb2Nlc3NlcyB0aGF0IG5lZWQgdG8gY3JlYXRlIHN0YXRl CisJICogY29ycmVzcG9uZGluZyB0byB0aGF0IHVzZWQgYnkgdGhlIGxlYWRlci4KKwkgKi8K KwlPaWQJCQloZWFwcmVsaWQ7CisJT2lkCQkJaW5kZXhyZWxpZDsKKwlib29sCQlpc2NvbmN1 cnJlbnQ7CisJQmxvY2tOdW1iZXIgcGFnZXNQZXJSYW5nZTsKKwlpbnQJCQlzY2FudHVwbGVz b3J0c3RhdGVzOworCisJLyoKKwkgKiB3b3JrZXJzZG9uZWN2IGlzIHVzZWQgdG8gbW9uaXRv ciB0aGUgcHJvZ3Jlc3Mgb2Ygd29ya2Vycy4gIEFsbCBwYXJhbGxlbAorCSAqIHBhcnRpY2lw YW50cyBtdXN0IGluZGljYXRlIHRoYXQgdGhleSBhcmUgZG9uZSBiZWZvcmUgbGVhZGVyIGNh biB1c2UKKwkgKiByZXN1bHRzIGJ1aWx0IGJ5IHRoZSB3b3JrZXJzIChhbmQgYmVmb3JlIGxl YWRlciBjYW4gd3JpdGUgdGhlIGRhdGEgaW50bworCSAqIHRoZSBpbmRleCkuCisJICovCisJ Q29uZGl0aW9uVmFyaWFibGUgd29ya2Vyc2RvbmVjdjsKKworCS8qCisJICogbXV0ZXggcHJv dGVjdHMgYWxsIGZpZWxkcyBiZWZvcmUgaGVhcGRlc2MuCisJICoKKwkgKiBUaGVzZSBmaWVs ZHMgY29udGFpbiBzdGF0dXMgaW5mb3JtYXRpb24gb2YgaW50ZXJlc3QgdG8gQlJJTiBpbmRl eAorCSAqIGJ1aWxkcyB0aGF0IG11c3Qgd29yayBqdXN0IHRoZSBzYW1lIHdoZW4gYW4gaW5k ZXggaXMgYnVpbHQgaW4gcGFyYWxsZWwuCisJICovCisJc2xvY2tfdAkJbXV0ZXg7CisKKwkv KgorCSAqIE11dGFibGUgc3RhdGUgdGhhdCBpcyBtYWludGFpbmVkIGJ5IHdvcmtlcnMsIGFu ZCByZXBvcnRlZCBiYWNrIHRvCisJICogbGVhZGVyIGF0IGVuZCBvZiB0aGUgc2NhbnMuCisJ ICoKKwkgKiBucGFydGljaXBhbnRzZG9uZSBpcyBudW1iZXIgb2Ygd29ya2VyIHByb2Nlc3Nl cyBmaW5pc2hlZC4KKwkgKgorCSAqIHJlbHR1cGxlcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9m IGlucHV0IGhlYXAgdHVwbGVzLgorCSAqCisJICogaW5kdHVwbGVzIGlzIHRoZSB0b3RhbCBu dW1iZXIgb2YgdHVwbGVzIHRoYXQgbWFkZSBpdCBpbnRvIHRoZSBpbmRleC4KKwkgKi8KKwlp bnQJCQlucGFydGljaXBhbnRzZG9uZTsKKwlkb3VibGUJCXJlbHR1cGxlczsKKwlkb3VibGUJ CWluZHR1cGxlczsKKworCS8qCisJICogUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YSBkYXRh IGZvbGxvd3MuIENhbid0IGRpcmVjdGx5IGVtYmVkIGhlcmUsIGFzCisJICogaW1wbGVtZW50 YXRpb25zIG9mIHRoZSBwYXJhbGxlbCB0YWJsZSBzY2FuIGRlc2MgaW50ZXJmYWNlIG1pZ2h0 IG5lZWQKKwkgKiBzdHJvbmdlciBhbGlnbm1lbnQuCisJICovCit9IEJyaW5TaGFyZWQ7CisK Ky8qCisgKiBSZXR1cm4gcG9pbnRlciB0byBhIEJyaW5TaGFyZWQncyBwYXJhbGxlbCB0YWJs ZSBzY2FuLgorICoKKyAqIGMuZi4gc2htX3RvY19hbGxvY2F0ZSBhcyB0byB3aHkgQlVGRkVS QUxJR04gaXMgdXNlZCwgcmF0aGVyIHRoYW4ganVzdAorICogTUFYQUxJR04uCisgKi8KKyNk ZWZpbmUgUGFyYWxsZWxUYWJsZVNjYW5Gcm9tQnJpblNoYXJlZChzaGFyZWQpIFwKKwkoUGFy YWxsZWxUYWJsZVNjYW5EZXNjKSAoKGNoYXIgKikgKHNoYXJlZCkgKyBCVUZGRVJBTElHTihz aXplb2YoQnJpblNoYXJlZCkpKQorCisvKgorICogU3RhdHVzIGZvciBsZWFkZXIgaW4gcGFy YWxsZWwgaW5kZXggYnVpbGQuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJyaW5MZWFkZXIKK3sK KwkvKiBwYXJhbGxlbCBjb250ZXh0IGl0c2VsZiAqLworCVBhcmFsbGVsQ29udGV4dCAqcGN4 dDsKKworCS8qCisJICogbnBhcnRpY2lwYW50dHVwbGVzb3J0cyBpcyB0aGUgZXhhY3QgbnVt YmVyIG9mIHdvcmtlciBwcm9jZXNzZXMKKwkgKiBzdWNjZXNzZnVsbHkgbGF1bmNoZWQsIHBs dXMgb25lIGxlYWRlciBwcm9jZXNzIGlmIGl0IHBhcnRpY2lwYXRlcyBhcyBhCisJICogd29y a2VyIChvbmx5IERJU0FCTEVfTEVBREVSX1BBUlRJQ0lQQVRJT04gYnVpbGRzIGF2b2lkIGxl YWRlcgorCSAqIHBhcnRpY2lwYXRpbmcgYXMgYSB3b3JrZXIpLgorCSAqLworCWludAkJCW5w YXJ0aWNpcGFudHR1cGxlc29ydHM7CisKKwkvKgorCSAqIExlYWRlciBwcm9jZXNzIGNvbnZl bmllbmNlIHBvaW50ZXJzIHRvIHNoYXJlZCBzdGF0ZSAobGVhZGVyIGF2b2lkcyBUT0MKKwkg KiBsb29rdXBzKS4KKwkgKgorCSAqIGJyaW5zaGFyZWQgaXMgdGhlIHNoYXJlZCBzdGF0ZSBm b3IgZW50aXJlIGJ1aWxkLiAgc2hhcmVkc29ydCBpcyB0aGUKKwkgKiBzaGFyZWQsIHR1cGxl c29ydC1tYW5hZ2VkIHN0YXRlIHBhc3NlZCB0byBlYWNoIHByb2Nlc3MgdHVwbGVzb3J0Lgor CSAqIHNuYXBzaG90IGlzIHRoZSBzbmFwc2hvdCB1c2VkIGJ5IHRoZSBzY2FuIGlmZiBhbiBN VkNDIHNuYXBzaG90IGlzCisJICogcmVxdWlyZWQuCisJICovCisJQnJpblNoYXJlZCAqYnJp bnNoYXJlZDsKKwlTaGFyZWRzb3J0ICpzaGFyZWRzb3J0OworCVNuYXBzaG90CXNuYXBzaG90 OworCVdhbFVzYWdlICAgKndhbHVzYWdlOworCUJ1ZmZlclVzYWdlICpidWZmZXJ1c2FnZTsK K30gQnJpbkxlYWRlcjsKIAogLyoKICAqIFdlIHVzZSBhIEJyaW5CdWlsZFN0YXRlIGR1cmlu ZyBpbml0aWFsIGNvbnN0cnVjdGlvbiBvZiBhIEJSSU4gaW5kZXguCkBAIC00OSw3ICsxNjIs OCBAQAogdHlwZWRlZiBzdHJ1Y3QgQnJpbkJ1aWxkU3RhdGUKIHsKIAlSZWxhdGlvbglic19p cmVsOwotCWludAkJCWJzX251bXR1cGxlczsKKwlkb3VibGUJCWJzX251bXR1cGxlczsKKwlk b3VibGUJCWJzX3JlbHR1cGxlczsKIAlCdWZmZXIJCWJzX2N1cnJlbnRJbnNlcnRCdWY7CiAJ QmxvY2tOdW1iZXIJYnNfdGFibGVQYWdlczsKIAlCbG9ja051bWJlciBic19wYWdlc1BlclJh bmdlOwpAQCAtNTcsNiArMTcxLDE1IEBAIHR5cGVkZWYgc3RydWN0IEJyaW5CdWlsZFN0YXRl CiAJQnJpblJldm1hcCAqYnNfcm1BY2Nlc3M7CiAJQnJpbkRlc2MgICAqYnNfYmRlc2M7CiAJ QnJpbk1lbVR1cGxlICpic19kdHVwbGU7CisKKwkvKgorCSAqIGJzX2xlYWRlciBpcyBvbmx5 IHByZXNlbnQgd2hlbiBhIHBhcmFsbGVsIGluZGV4IGJ1aWxkIGlzIHBlcmZvcm1lZCwgYW5k CisJICogb25seSBpbiB0aGUgbGVhZGVyIHByb2Nlc3MuIChBY3R1YWxseSwgb25seSB0aGUg bGVhZGVyIHByb2Nlc3MgaGFzIGEKKwkgKiBCcmluQnVpbGRTdGF0ZS4pCisJICovCisJQnJp bkxlYWRlciAqYnNfbGVhZGVyOworCWludAkJCWJzX3dvcmtlcl9pZDsKKwlCcmluU3Bvb2wg ICpic19zcG9vbDsKIH0gQnJpbkJ1aWxkU3RhdGU7CiAKIC8qCkBAIC05MSw2ICsyMTQsNyBA QCBzdGF0aWMgdm9pZCB0ZXJtaW5hdGVfYnJpbl9idWlsZHN0YXRlKEJyaW5CdWlsZFN0YXRl ICpzdGF0ZSk7CiBzdGF0aWMgdm9pZCBicmluc3VtbWFyaXplKFJlbGF0aW9uIGluZGV4LCBS ZWxhdGlvbiBoZWFwUmVsLCBCbG9ja051bWJlciBwYWdlUmFuZ2UsCiAJCQkJCQkgIGJvb2wg aW5jbHVkZV9wYXJ0aWFsLCBkb3VibGUgKm51bVN1bW1hcml6ZWQsIGRvdWJsZSAqbnVtRXhp c3RpbmcpOwogc3RhdGljIHZvaWQgZm9ybV9hbmRfaW5zZXJ0X3R1cGxlKEJyaW5CdWlsZFN0 YXRlICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBmb3JtX2FuZF9zcGlsbF90dXBsZShCcmluQnVp bGRTdGF0ZSAqc3RhdGUpOwogc3RhdGljIHZvaWQgdW5pb25fdHVwbGVzKEJyaW5EZXNjICpi ZGVzYywgQnJpbk1lbVR1cGxlICphLAogCQkJCQkJIEJyaW5UdXBsZSAqYik7CiBzdGF0aWMg dm9pZCBicmluX3ZhY3V1bV9zY2FuKFJlbGF0aW9uIGlkeHJlbCwgQnVmZmVyQWNjZXNzU3Ry YXRlZ3kgc3RyYXRlZ3kpOwpAQCAtOTgsNiArMjIyLDIwIEBAIHN0YXRpYyBib29sIGFkZF92 YWx1ZXNfdG9fcmFuZ2UoUmVsYXRpb24gaWR4UmVsLCBCcmluRGVzYyAqYmRlc2MsCiAJCQkJ CQkJCUJyaW5NZW1UdXBsZSAqZHR1cCwgY29uc3QgRGF0dW0gKnZhbHVlcywgY29uc3QgYm9v bCAqbnVsbHMpOwogc3RhdGljIGJvb2wgY2hlY2tfbnVsbF9rZXlzKEJyaW5WYWx1ZXMgKmJ2 YWwsIFNjYW5LZXkgKm51bGxrZXlzLCBpbnQgbm51bGxrZXlzKTsKIAorLyogcGFyYWxsZWwg aW5kZXggYnVpbGRzICovCitzdGF0aWMgdm9pZCBfYnJpbl9iZWdpbl9wYXJhbGxlbChCcmlu QnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSwgUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgs CisJCQkJCQkJCSBib29sIGlzY29uY3VycmVudCwgaW50IHJlcXVlc3QpOworc3RhdGljIHZv aWQgX2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJ0bGVhZGVyLCBCcmluQnVpbGRT dGF0ZSAqc3RhdGUpOworc3RhdGljIFNpemUgX2JyaW5fcGFyYWxsZWxfZXN0aW1hdGVfc2hh cmVkKFJlbGF0aW9uIGhlYXAsIFNuYXBzaG90IHNuYXBzaG90KTsKK3N0YXRpYyB2b2lkIF9i cmluX2xlYWRlcl9wYXJ0aWNpcGF0ZV9hc193b3JrZXIoQnJpbkJ1aWxkU3RhdGUgKmJ1aWxk c3RhdGUsCisJCQkJCQkJCQkJCSAgIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4KTsK K3N0YXRpYyB2b2lkIF9icmluX3BhcmFsbGVsX3NjYW5fYW5kX2J1aWxkKEJyaW5CdWlsZFN0 YXRlICpidWlsZHN0YXRlLAorCQkJCQkJCQkJCSAgQnJpblNwb29sICpicmluc3Bvb2wsCisJ CQkJCQkJCQkJICBCcmluU2hhcmVkICpicmluc2hhcmVkLAorCQkJCQkJCQkJCSAgU2hhcmVk c29ydCAqc2hhcmVkc29ydCwKKwkJCQkJCQkJCQkgIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9u IGluZGV4LAorCQkJCQkJCQkJCSAgaW50IHNvcnRtZW0sIGJvb2wgcHJvZ3Jlc3MpOworCiAv KgogICogQlJJTiBoYW5kbGVyIGZ1bmN0aW9uOiByZXR1cm4gSW5kZXhBbVJvdXRpbmUgd2l0 aCBhY2Nlc3MgbWV0aG9kIHBhcmFtZXRlcnMKICAqIGFuZCBjYWxsYmFja3MuCkBAIC0xMjIs NiArMjYwLDcgQEAgYnJpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUt PmFtY2x1c3RlcmFibGUgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtcHJlZGxvY2tzID0gZmFs c2U7CiAJYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5h bWNhbmJ1aWxkcGFyYWxsZWwgPSB0cnVlOwogCWFtcm91dGluZS0+YW1jYW5pbmNsdWRlID0g ZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOwog CWFtcm91dGluZS0+YW1zdW1tYXJpemluZyA9IHRydWU7CkBAIC04NzcsNiArMTAxNiw2MyBA QCBicmluYnVpbGRDYWxsYmFjayhSZWxhdGlvbiBpbmRleCwKIAkJCQkJCQkgICB2YWx1ZXMs IGlzbnVsbCk7CiB9CiAKKy8qCisgKiBBIHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrLCB1c2Vk IGJ5IHBhcmFsbGVsIGluZGV4IGJ1aWxkcy4gVGhlIG1haW4gZGlmZmVyZW5jZQorICogaXMg dGhhdCBpbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIEJSSU4gdHVwbGVzIGludG8gdGhlIGluZGV4 LCB3ZSB3cml0ZSB0aGVtIGludG8KKyAqIGEgc2hhcmVkIHR1cGxlc29ydCwgYW5kIGxlYXZl IHRoZSBpbnNlcnRpb24gdXAgdG8gdGhlIGxlYWRlciAod2hpY2ggbWF5CisgKiByZW9yZGVy IHRoZW0gYSBiaXQgZXRjLikuIFRoZSBjYWxsYmFjayBhbHNvIGRvZXMgbm90IGdlbmVyYXRl IGVtcHR5IHJhbmdlcywKKyAqIHRob3NlIG1heSBiZSBhZGRlZCBieSB0aGUgbGVhZGVyIHdo ZW4gbWVyZ2luZyByZXN1bHRzIGZyb20gd29ya2Vycy4KKyAqLworc3RhdGljIHZvaWQKK2Jy aW5idWlsZENhbGxiYWNrUGFyYWxsZWwoUmVsYXRpb24gaW5kZXgsCisJCQkJCQkgIEl0ZW1Q b2ludGVyIHRpZCwKKwkJCQkJCSAgRGF0dW0gKnZhbHVlcywKKwkJCQkJCSAgYm9vbCAqaXNu dWxsLAorCQkJCQkJICBib29sIHR1cGxlSXNBbGl2ZSwKKwkJCQkJCSAgdm9pZCAqYnJzdGF0 ZSkKK3sKKwlCcmluQnVpbGRTdGF0ZSAqc3RhdGUgPSAoQnJpbkJ1aWxkU3RhdGUgKikgYnJz dGF0ZTsKKwlCbG9ja051bWJlciB0aGlzYmxvY2s7CisKKwl0aGlzYmxvY2sgPSBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIGluIGEgYmxv Y2sgdGhhdCBiZWxvbmdzIHRvIGEgZnV0dXJlIHJhbmdlLCBzdW1tYXJpemUgd2hhdAorCSAq IHdlJ3ZlIGdvdCBhbmQgc3RhcnQgYWZyZXNoLiAgTm90ZSB0aGUgc2NhbiBtaWdodCBoYXZl IHNraXBwZWQgbWFueQorCSAqIHBhZ2VzLCBpZiB0aGV5IHdlcmUgZGV2b2lkIG9mIGxpdmUg dHVwbGVzOyB3ZSBkbyBub3QgY3JlYXRlIGVtcHRyeSBCUklOCisJICogcmFuZ2VzIGhlcmUg LSB0aGUgbGVhZGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZW0gaW4uCisJICov CisJaWYgKHRoaXNibG9jayA+IHN0YXRlLT5ic19jdXJyUmFuZ2VTdGFydCArIHN0YXRlLT5i c19wYWdlc1BlclJhbmdlIC0gMSkKKwl7CisKKwkJQlJJTl9lbG9nKChERUJVRzIsCisJCQkJ ICAgImJyaW5idWlsZENhbGxiYWNrOiBjb21wbGV0ZWQgYSByYW5nZTogJXUtLSV1IiwKKwkJ CQkgICBzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQsCisJCQkJICAgc3RhdGUtPmJzX2N1cnJS YW5nZVN0YXJ0ICsgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UpKTsKKworCQkvKiBjcmVhdGUg dGhlIGluZGV4IHR1cGxlIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSB0dXBsZXNvcnQgKi8KKwkJ Zm9ybV9hbmRfc3BpbGxfdHVwbGUoc3RhdGUpOworCisJCS8qCisJCSAqIFNldCBzdGF0ZSB0 byBjb3JyZXNwb25kIHRvIHRoZSBuZXh0IHJhbmdlIChmb3IgdGhpcyBibG9jaykuCisJCSAq CisJCSAqIFRoaXMgc2tpcHMgcmFuZ2VzIHRoYXQgYXJlIGVpdGhlciBlbXB0eSAoYW5kIHNv IHdlIGRvbid0IGdldCBhbnkKKwkJICogdHVwbGVzIHRvIHN1bW1hcml6ZSksIG9yIHByb2Nl c3NlcyBieSBvdGhlciB3b3JrZXJzLiBXZSBjYW4ndAorCQkgKiBkaWZmZXJlbnRpYXRlIHRo b3NlIGNhc2VzIGhlcmUgZWFzaWx5LCBzbyB3ZSBsZWF2ZSBpdCB1cCB0byB0aGUKKwkJICog bGVhZGVyIHRvIGZpbGwgZW1wdHkgcmFuZ2VzIHdoZXJlIG5lZWRlZC4KKwkJICovCisJCXN0 YXRlLT5ic19jdXJyUmFuZ2VTdGFydAorCQkJPSBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSAq ICh0aGlzYmxvY2sgLyBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSk7CisKKwkJLyogcmUtaW5p dGlhbGl6ZSBzdGF0ZSBmb3IgaXQgKi8KKwkJYnJpbl9tZW10dXBsZV9pbml0aWFsaXplKHN0 YXRlLT5ic19kdHVwbGUsIHN0YXRlLT5ic19iZGVzYyk7CisJfQorCisJLyogQWNjdW11bGF0 ZSB0aGUgY3VycmVudCB0dXBsZSBpbnRvIHRoZSBydW5uaW5nIHN0YXRlICovCisJKHZvaWQp IGFkZF92YWx1ZXNfdG9fcmFuZ2UoaW5kZXgsIHN0YXRlLT5ic19iZGVzYywgc3RhdGUtPmJz X2R0dXBsZSwKKwkJCQkJCQkgICB2YWx1ZXMsIGlzbnVsbCk7Cit9CisKIC8qCiAgKiBicmlu YnVpbGQoKSAtLSBidWlsZCBhIG5ldyBCUklOIGluZGV4LgogICovCkBAIC05NDAsMzYgKzEx MzYsMTA2IEBAIGJyaW5idWlsZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwgSW5k ZXhJbmZvICppbmRleEluZm8pCiAJdGFibGVQYWdlcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZC bG9ja3MoaGVhcCk7CiAJc3RhdGUgPSBpbml0aWFsaXplX2JyaW5fYnVpbGRzdGF0ZShpbmRl eCwgcmV2bWFwLCBwYWdlc1BlclJhbmdlLCB0YWJsZVBhZ2VzKTsKIAorCXN0YXRlLT5ic19z cG9vbCA9IChCcmluU3Bvb2wgKikgcGFsbG9jMChzaXplb2YoQnJpblNwb29sKSk7CisJc3Rh dGUtPmJzX3Nwb29sLT5oZWFwID0gaGVhcDsKKwlzdGF0ZS0+YnNfc3Bvb2wtPmluZGV4ID0g aW5kZXg7CisKIAkvKgotCSAqIE5vdyBzY2FuIHRoZSByZWxhdGlvbi4gIE5vIHN5bmNzY2Fu IGFsbG93ZWQgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdGhlCi0JICogaGVhcCBibG9ja3MgaW4g cGh5c2ljYWwgb3JkZXIuCisJICogQXR0ZW1wdCB0byBsYXVuY2ggcGFyYWxsZWwgd29ya2Vy IHNjYW4gd2hlbiByZXF1aXJlZAorCSAqCisJICogWFhYIHBsYW5fY3JlYXRlX2luZGV4X3dv cmtlcnMgbWFrZXMgdGhlIG51bWJlciBvZiB3b3JrZXJzIGRlcGVuZGVudCBvbgorCSAqIG1h aW50ZW5hbmNlX3dvcmtfbWVtLCByZXF1aXJpbmcgMzJNQiBmb3IgZWFjaCB3b3JrZXIuIFRo YXQgbWFrZXMgc2Vuc2UKKwkgKiBmb3IgYnRyZWUsIGJ1dCBub3QgZm9yIEJSSU4sIHdoaWNo IGNhbiBkbyBhd2F5IHdpdGggbXVjaCBsZXNzIG1lbW9yeS4KKwkgKiBTbyBtYXliZSBtYWtl IHRoYXQgc29tZWhvdyBsZXNzIHN0cmljdCwgb3B0aW9uYWxseT8KIAkgKi8KLQlyZWx0dXBs ZXMgPSB0YWJsZV9pbmRleF9idWlsZF9zY2FuKGhlYXAsIGluZGV4LCBpbmRleEluZm8sIGZh bHNlLCB0cnVlLAotCQkJCQkJCQkJICAgYnJpbmJ1aWxkQ2FsbGJhY2ssICh2b2lkICopIHN0 YXRlLCBOVUxMKTsKLQotCS8qIHByb2Nlc3MgdGhlIGZpbmFsIGJhdGNoICovCi0JZm9ybV9h bmRfaW5zZXJ0X3R1cGxlKHN0YXRlKTsKKwlpZiAoaW5kZXhJbmZvLT5paV9QYXJhbGxlbFdv cmtlcnMgPiAwKQorCQlfYnJpbl9iZWdpbl9wYXJhbGxlbChzdGF0ZSwgaGVhcCwgaW5kZXgs IGluZGV4SW5mby0+aWlfQ29uY3VycmVudCwKKwkJCQkJCQkgaW5kZXhJbmZvLT5paV9QYXJh bGxlbFdvcmtlcnMpOwogCi0JLyogWFhYIHNob3VsZG4ndCB0aGlzIGhhcHBlbiBpbiB0aGUg YnJpbmJ1aWxkQ2FsbGJhY2s/ICovCi0Jc3RhdGUtPmJzX2N1cnJSYW5nZVN0YXJ0ICs9IHN0 YXRlLT5ic19wYWdlc1BlclJhbmdlOwogCS8qCi0JICogQmFja2ZpbGwgdGhlIGZpbmFsIHJh bmdlcyB3aXRoIGVtcHR5IGRhdGEuCisJICogTm93IHNjYW4gdGhlIHJlbGF0aW9uLiAgTm8g c3luY3NjYW4gYWxsb3dlZCBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUKKwkgKiBoZWFwIGJs b2NrcyBpbiBwaHlzaWNhbCBvcmRlci4KIAkgKgotCSAqIFRoaXMgc2F2ZXMgdXMgZnJvbSBk b2luZyB3aGF0IGFtb3VudHMgdG8gZnVsbCB0YWJsZSBzY2FucyB3aGVuIHRoZQotCSAqIGlu ZGV4IGlzIGJ1aWx0IG9uIHN0dXBpZCBpbmRleCBxdWFscyBsaWtlIFdIRVJFIChub25udWxs X2NvbHVtbiBJUwotCSAqIE5VTEwpLgorCSAqIElmIHBhcmFsbGVsIGJ1aWxkIHJlcXVlc3Rl ZCBhbmQgYXQgbGVhc3Qgb25lIHdvcmtlciBwcm9jZXNzIHdhcworCSAqIHN1Y2Nlc3NmdWxs eSBsYXVuY2hlZCwgc2V0IHVwIGNvb3JkaW5hdGlvbiBzdGF0ZQogCSAqLwotCXdoaWxlIChz dGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQgKyBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSAtIDEg PCBzdGF0ZS0+YnNfdGFibGVQYWdlcykKKwlpZiAoc3RhdGUtPmJzX2xlYWRlcikKIAl7Ci0J CWJyaW5fbWVtdHVwbGVfaW5pdGlhbGl6ZShzdGF0ZS0+YnNfZHR1cGxlLCBzdGF0ZS0+YnNf YmRlc2MpOworCQlTb3J0Q29vcmRpbmF0ZSBjb29yZGluYXRlOwogCisJCWNvb3JkaW5hdGUg PSAoU29ydENvb3JkaW5hdGUpIHBhbGxvYzAoc2l6ZW9mKFNvcnRDb29yZGluYXRlRGF0YSkp OworCQljb29yZGluYXRlLT5pc1dvcmtlciA9IGZhbHNlOworCQljb29yZGluYXRlLT5uUGFy dGljaXBhbnRzID0KKwkJCXN0YXRlLT5ic19sZWFkZXItPm5wYXJ0aWNpcGFudHR1cGxlc29y dHM7CisJCWNvb3JkaW5hdGUtPnNoYXJlZHNvcnQgPSBzdGF0ZS0+YnNfbGVhZGVyLT5zaGFy ZWRzb3J0OworCisKKwkJLyoKKwkJICogQmVnaW4gc2VyaWFsL2xlYWRlciB0dXBsZXNvcnQu CisJCSAqCisJCSAqIEluIGNhc2VzIHdoZXJlIHBhcmFsbGVsaXNtIGlzIGludm9sdmVkLCB0 aGUgbGVhZGVyIHJlY2VpdmVzIHRoZQorCQkgKiBzYW1lIHNoYXJlIG9mIG1haW50ZW5hbmNl X3dvcmtfbWVtIGFzIGEgc2VyaWFsIHNvcnQgKGl0IGlzCisJCSAqIGdlbmVyYWxseSB0cmVh dGVkIGluIHRoZSBzYW1lIHdheSBhcyBhIHNlcmlhbCBzb3J0IG9uY2Ugd2UgcmV0dXJuKS4K KwkJICogUGFyYWxsZWwgd29ya2VyIFR1cGxlc29ydHN0YXRlcyB3aWxsIGhhdmUgcmVjZWl2 ZWQgb25seSBhIGZyYWN0aW9uCisJCSAqIG9mIG1haW50ZW5hbmNlX3dvcmtfbWVtLCB0aG91 Z2guCisJCSAqCisJCSAqIFdlIHJlbHkgb24gdGhlIGxpZmV0aW1lIG9mIHRoZSBMZWFkZXIg VHVwbGVzb3J0c3RhdGUgYWxtb3N0IG5vdAorCQkgKiBvdmVybGFwcGluZyB3aXRoIGFueSB3 b3JrZXIgVHVwbGVzb3J0c3RhdGUncyBsaWZldGltZS4gIFRoZXJlIG1heQorCQkgKiBiZSBz b21lIHNtYWxsIG92ZXJsYXAsIGJ1dCB0aGF0J3Mgb2theSBiZWNhdXNlIHdlIHJlbHkgb24g bGVhZGVyCisJCSAqIFR1cGxlc29ydHN0YXRlIG9ubHkgYWxsb2NhdGluZyBhIHNtYWxsLCBm aXhlZCBhbW91bnQgb2YgbWVtb3J5CisJCSAqIGhlcmUuIFdoZW4gaXRzIHR1cGxlc29ydF9w ZXJmb3Jtc29ydCgpIGlzIGNhbGxlZCAoYnkgb3VyIGNhbGxlciksCisJCSAqIGFuZCBzaWdu aWZpY2FudCBhbW91bnRzIG9mIG1lbW9yeSBhcmUgbGlrZWx5IHRvIGJlIHVzZWQsIGFsbAor CQkgKiB3b3JrZXJzIG11c3QgaGF2ZSBhbHJlYWR5IGZyZWVkIGFsbW9zdCBhbGwgbWVtb3J5 IGhlbGQgYnkgdGhlaXIKKwkJICogVHVwbGVzb3J0c3RhdGVzICh0aGV5IGFyZSBhYm91dCB0 byBnbyBhd2F5IGNvbXBsZXRlbHksIHRvbykuICBUaGUKKwkJICogb3ZlcmFsbCBlZmZlY3Qg aXMgdGhhdCBtYWludGVuYW5jZV93b3JrX21lbSBhbHdheXMgcmVwcmVzZW50cyBhbgorCQkg KiBhYnNvbHV0ZSBoaWdoIHdhdGVybWFyayBvbiB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2Vk IGJ5IGEgQ1JFQVRFCisJCSAqIElOREVYIG9wZXJhdGlvbiwgcmVnYXJkbGVzcyBvZiB0aGUg dXNlIG9mIHBhcmFsbGVsaXNtIG9yIGFueSBvdGhlcgorCQkgKiBmYWN0b3IuCisJCSAqLwor CQlzdGF0ZS0+YnNfc3Bvb2wtPnNvcnRzdGF0ZSA9CisJCQl0dXBsZXNvcnRfYmVnaW5faW5k ZXhfYnJpbihoZWFwLCBpbmRleCwKKwkJCQkJCQkJCSAgIG1haW50ZW5hbmNlX3dvcmtfbWVt LCBjb29yZGluYXRlLAorCQkJCQkJCQkJICAgVFVQTEVTT1JUX05PTkUpOworCisJCS8qCisJ CSAqIEluIHBhcmFsbGVsIG1vZGUsIHdhaXQgZm9yIHdvcmtlcnMgdG8gY29tcGxldGUsIGFu ZCB0aGVuIHJlYWQgYWxsCisJCSAqIHR1cGxlcyBmcm9tIHRoZSBzaGFyZWQgdHVwbGVzb3J0 IGFuZCBpbnNlcnQgdGhlbSBpbnRvIHRoZSBpbmRleC4KKwkJICovCisJCV9icmluX2VuZF9w YXJhbGxlbChzdGF0ZS0+YnNfbGVhZGVyLCBzdGF0ZSk7CisJfQorCWVsc2UJCQkJCQkvKiBu byBwYXJhbGxlbCBpbmRleCBidWlsZCAqLworCXsKKwkJcmVsdHVwbGVzID0gdGFibGVfaW5k ZXhfYnVpbGRfc2NhbihoZWFwLCBpbmRleCwgaW5kZXhJbmZvLCBmYWxzZSwgdHJ1ZSwKKwkJ CQkJCQkJCQkgICBicmluYnVpbGRDYWxsYmFjaywgKHZvaWQgKikgc3RhdGUsIE5VTEwpOwor CisJCS8qIHByb2Nlc3MgdGhlIGZpbmFsIGJhdGNoICovCiAJCWZvcm1fYW5kX2luc2VydF90 dXBsZShzdGF0ZSk7CiAKKwkJLyogWFhYIHNob3VsZG4ndCB0aGlzIGhhcHBlbiBpbiB0aGUg YnJpbmJ1aWxkQ2FsbGJhY2s/ICovCiAJCXN0YXRlLT5ic19jdXJyUmFuZ2VTdGFydCArPSBz dGF0ZS0+YnNfcGFnZXNQZXJSYW5nZTsKKwkJLyoKKwkJICogQmFja2ZpbGwgdGhlIGZpbmFs IHJhbmdlcyB3aXRoIGVtcHR5IGRhdGEuCisJCSAqCisJCSAqIFRoaXMgc2F2ZXMgdXMgZnJv bSBkb2luZyB3aGF0IGFtb3VudHMgdG8gZnVsbCB0YWJsZSBzY2FucyB3aGVuIHRoZQorCQkg KiBpbmRleCBpcyBidWlsdCBvbiBzdHVwaWQgaW5kZXggcXVhbHMgbGlrZSBXSEVSRSAobm9u bnVsbF9jb2x1bW4gSVMKKwkJICogTlVMTCkuCisJCSAqLworCQl3aGlsZSAoc3RhdGUtPmJz X2N1cnJSYW5nZVN0YXJ0ICsgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UgLSAxIDwgc3RhdGUt PmJzX3RhYmxlUGFnZXMpCisJCXsKKwkJCWJyaW5fbWVtdHVwbGVfaW5pdGlhbGl6ZShzdGF0 ZS0+YnNfZHR1cGxlLCBzdGF0ZS0+YnNfYmRlc2MpOworCisJCQlmb3JtX2FuZF9pbnNlcnRf dHVwbGUoc3RhdGUpOworCisJCQlzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQgKz0gc3RhdGUt PmJzX3BhZ2VzUGVyUmFuZ2U7CisJCX0KKworCQkvKiB0cmFjayB0aGUgbnVtYmVyIG9mIHJl bGF0aW9uIHR1cGxlcyAqLworCQlzdGF0ZS0+YnNfcmVsdHVwbGVzID0gcmVsdHVwbGVzOwog CX0KIAogCS8qIHJlbGVhc2UgcmVzb3VyY2VzICovCiAJaWR4dHVwbGVzID0gc3RhdGUtPmJz X251bXR1cGxlczsKKwlyZWx0dXBsZXMgPSBzdGF0ZS0+YnNfcmVsdHVwbGVzOwogCWJyaW5S ZXZtYXBUZXJtaW5hdGUoc3RhdGUtPmJzX3JtQWNjZXNzKTsKIAl0ZXJtaW5hdGVfYnJpbl9i dWlsZHN0YXRlKHN0YXRlKTsKIApAQCAtMTM4OSw2ICsxNjU1LDcgQEAgaW5pdGlhbGl6ZV9i cmluX2J1aWxkc3RhdGUoUmVsYXRpb24gaWR4UmVsLCBCcmluUmV2bWFwICpyZXZtYXAsCiAK IAlzdGF0ZS0+YnNfaXJlbCA9IGlkeFJlbDsKIAlzdGF0ZS0+YnNfbnVtdHVwbGVzID0gMDsK KwlzdGF0ZS0+YnNfcmVsdHVwbGVzID0gMDsKIAlzdGF0ZS0+YnNfY3VycmVudEluc2VydEJ1 ZiA9IEludmFsaWRCdWZmZXI7CiAJc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UgPSBwYWdlc1Bl clJhbmdlOwogCXN0YXRlLT5ic190YWJsZVBhZ2VzID0gdGFibGVQYWdlczsKQEAgLTEzOTYs NiArMTY2Myw5IEBAIGluaXRpYWxpemVfYnJpbl9idWlsZHN0YXRlKFJlbGF0aW9uIGlkeFJl bCwgQnJpblJldm1hcCAqcmV2bWFwLAogCXN0YXRlLT5ic19ybUFjY2VzcyA9IHJldm1hcDsK IAlzdGF0ZS0+YnNfYmRlc2MgPSBicmluX2J1aWxkX2Rlc2MoaWR4UmVsKTsKIAlzdGF0ZS0+ YnNfZHR1cGxlID0gYnJpbl9uZXdfbWVtdHVwbGUoc3RhdGUtPmJzX2JkZXNjKTsKKwlzdGF0 ZS0+YnNfbGVhZGVyID0gTlVMTDsKKwlzdGF0ZS0+YnNfd29ya2VyX2lkID0gMDsKKwlzdGF0 ZS0+YnNfc3Bvb2wgPSBOVUxMOwogCiAJcmV0dXJuIHN0YXRlOwogfQpAQCAtMTY4OCw2ICsx OTU4LDMyIEBAIGZvcm1fYW5kX2luc2VydF90dXBsZShCcmluQnVpbGRTdGF0ZSAqc3RhdGUp CiAJcGZyZWUodHVwKTsKIH0KIAorLyoKKyAqIEdpdmVuIGEgZGVmb3JtZWQgdHVwbGUgaW4g dGhlIGJ1aWxkIHN0YXRlLCBjb252ZXJ0IGl0IGludG8gdGhlIG9uLWRpc2sKKyAqIGZvcm1h dCBhbmQgd3JpdGUgaXQgdG8gYSAoc2hhcmVkKSB0dXBsZXNvcnQgKHRoZSBsZWFkZXIgd2ls bCBpbnNlcnQgaXQKKyAqIGludG8gdGhlIGluZGV4IGxhdGVyKS4KKyAqLworc3RhdGljIHZv aWQKK2Zvcm1fYW5kX3NwaWxsX3R1cGxlKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSkKK3sKKwlC cmluVHVwbGUgICp0dXA7CisJU2l6ZQkJc2l6ZTsKKworCS8qIGRvbid0IGluc2VydCBlbXB0 eSB0dXBsZXMgaW4gcGFyYWxsZWwgYnVpbGQgKi8KKwlpZiAoc3RhdGUtPmJzX2R0dXBsZS0+ YnRfZW1wdHlfcmFuZ2UpCisJCXJldHVybjsKKworCXR1cCA9IGJyaW5fZm9ybV90dXBsZShz dGF0ZS0+YnNfYmRlc2MsIHN0YXRlLT5ic19jdXJyUmFuZ2VTdGFydCwKKwkJCQkJCSAgc3Rh dGUtPmJzX2R0dXBsZSwgJnNpemUpOworCisJLyogd3JpdGUgdGhlIEJSSU4gdHVwbGUgdG8g dGhlIHR1cGxlc29ydCAqLworCXR1cGxlc29ydF9wdXRicmludHVwbGUoc3RhdGUtPmJzX3Nw b29sLT5zb3J0c3RhdGUsIHR1cCwgc2l6ZSk7CisKKwlzdGF0ZS0+YnNfbnVtdHVwbGVzKys7 CisKKwlwZnJlZSh0dXApOworfQorCiAvKgogICogR2l2ZW4gdHdvIGRlZm9ybWVkIHR1cGxl cywgYWRqdXN0IHRoZSBmaXJzdCBvbmUgc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQKICAqIHdp dGggdGhlIHN1bW1hcnkgdmFsdWVzIGluIGJvdGguCkBAIC0yMDA3LDMgKzIzMDMsNTkxIEBA IGNoZWNrX251bGxfa2V5cyhCcmluVmFsdWVzICpidmFsLCBTY2FuS2V5ICpudWxsa2V5cywg aW50IG5udWxsa2V5cykKIAogCXJldHVybiB0cnVlOwogfQorCitzdGF0aWMgdm9pZAorX2Jy aW5fYmVnaW5fcGFyYWxsZWwoQnJpbkJ1aWxkU3RhdGUgKmJ1aWxkc3RhdGUsIFJlbGF0aW9u IGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkgYm9vbCBpc2NvbmN1cnJlbnQsIGludCBy ZXF1ZXN0KQoreworCVBhcmFsbGVsQ29udGV4dCAqcGN4dDsKKwlpbnQJCQlzY2FudHVwbGVz b3J0c3RhdGVzOworCVNuYXBzaG90CXNuYXBzaG90OworCVNpemUJCWVzdGJyaW5zaGFyZWQ7 CisJU2l6ZQkJZXN0c29ydDsKKwlCcmluU2hhcmVkICpicmluc2hhcmVkOworCVNoYXJlZHNv cnQgKnNoYXJlZHNvcnQ7CisJQnJpbkxlYWRlciAqYnJpbmxlYWRlciA9IChCcmluTGVhZGVy ICopIHBhbGxvYzAoc2l6ZW9mKEJyaW5MZWFkZXIpKTsKKwlXYWxVc2FnZSAgICp3YWx1c2Fn ZTsKKwlCdWZmZXJVc2FnZSAqYnVmZmVydXNhZ2U7CisJYm9vbAkJbGVhZGVycGFydGljaXBh dGVzID0gdHJ1ZTsKKwlpbnQJCQlxdWVyeWxlbjsKKworI2lmZGVmIERJU0FCTEVfTEVBREVS X1BBUlRJQ0lQQVRJT04KKwlsZWFkZXJwYXJ0aWNpcGF0ZXMgPSBmYWxzZTsKKyNlbmRpZgor CisJLyoKKwkgKiBFbnRlciBwYXJhbGxlbCBtb2RlLCBhbmQgY3JlYXRlIGNvbnRleHQgZm9y IHBhcmFsbGVsIGJ1aWxkIG9mIGJyaW4KKwkgKiBpbmRleAorCSAqLworCUVudGVyUGFyYWxs ZWxNb2RlKCk7CisJQXNzZXJ0KHJlcXVlc3QgPiAwKTsKKwlwY3h0ID0gQ3JlYXRlUGFyYWxs ZWxDb250ZXh0KCJwb3N0Z3JlcyIsICJfYnJpbl9wYXJhbGxlbF9idWlsZF9tYWluIiwKKwkJ CQkJCQkJIHJlcXVlc3QpOworCisJc2NhbnR1cGxlc29ydHN0YXRlcyA9IGxlYWRlcnBhcnRp Y2lwYXRlcyA/IHJlcXVlc3QgKyAxIDogcmVxdWVzdDsKKworCS8qCisJICogUHJlcGFyZSBm b3Igc2NhbiBvZiB0aGUgYmFzZSByZWxhdGlvbi4gIEluIGEgbm9ybWFsIGluZGV4IGJ1aWxk LCB3ZSB1c2UKKwkgKiBTbmFwc2hvdEFueSBiZWNhdXNlIHdlIG11c3QgcmV0cmlldmUgYWxs IHR1cGxlcyBhbmQgZG8gb3VyIG93biB0aW1lCisJICogcXVhbCBjaGVja3MgKGJlY2F1c2Ug d2UgaGF2ZSB0byBpbmRleCBSRUNFTlRMWV9ERUFEIHR1cGxlcykuICBJbiBhCisJICogY29u Y3VycmVudCBidWlsZCwgd2UgdGFrZSBhIHJlZ3VsYXIgTVZDQyBzbmFwc2hvdCBhbmQgaW5k ZXggd2hhdGV2ZXIncworCSAqIGxpdmUgYWNjb3JkaW5nIHRvIHRoYXQuCisJICovCisJaWYg KCFpc2NvbmN1cnJlbnQpCisJCXNuYXBzaG90ID0gU25hcHNob3RBbnk7CisJZWxzZQorCQlz bmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsK KworCS8qCisJICogRXN0aW1hdGUgc2l6ZSBmb3Igb3VyIG93biBQQVJBTExFTF9LRVlfQlJJ Tl9TSEFSRUQgd29ya3NwYWNlLgorCSAqLworCWVzdGJyaW5zaGFyZWQgPSBfYnJpbl9wYXJh bGxlbF9lc3RpbWF0ZV9zaGFyZWQoaGVhcCwgc25hcHNob3QpOworCXNobV90b2NfZXN0aW1h dGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgZXN0YnJpbnNoYXJlZCk7CisJZXN0c29ydCA9 IHR1cGxlc29ydF9lc3RpbWF0ZV9zaGFyZWQoc2NhbnR1cGxlc29ydHN0YXRlcyk7CisJc2ht X3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBlc3Rzb3J0KTsKKworCXNo bV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAyKTsKKworCS8qCisJICog RXN0aW1hdGUgc3BhY2UgZm9yIFdhbFVzYWdlIGFuZCBCdWZmZXJVc2FnZSAtLSBQQVJBTExF TF9LRVlfV0FMX1VTQUdFCisJICogYW5kIFBBUkFMTEVMX0tFWV9CVUZGRVJfVVNBR0UuCisJ ICoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gZXh0ZW5zaW9ucyBsb2FkZWQgdGhhdCBjYXJlLCB3 ZSBjb3VsZCBza2lwIHRoaXMuICBXZQorCSAqIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hl dGhlciBhbnlvbmUncyBsb29raW5nIGF0IHBnV2FsVXNhZ2Ugb3IKKwkgKiBwZ0J1ZmZlclVz YWdlLCBzbyBkbyBpdCB1bmNvbmRpdGlvbmFsbHkuCisJICovCisJc2htX3RvY19lc3RpbWF0 ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLAorCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKFdh bFVzYWdlKSwgcGN4dC0+bndvcmtlcnMpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBj eHQtPmVzdGltYXRvciwgMSk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0 aW1hdG9yLAorCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclVzYWdlKSwgcGN4dC0+ bndvcmtlcnMpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwg MSk7CisKKwkvKiBGaW5hbGx5LCBlc3RpbWF0ZSBQQVJBTExFTF9LRVlfUVVFUllfVEVYVCBz cGFjZSAqLworCWlmIChkZWJ1Z19xdWVyeV9zdHJpbmcpCisJeworCQlxdWVyeWxlbiA9IHN0 cmxlbihkZWJ1Z19xdWVyeV9zdHJpbmcpOworCQlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZw Y3h0LT5lc3RpbWF0b3IsIHF1ZXJ5bGVuICsgMSk7CisJCXNobV90b2NfZXN0aW1hdGVfa2V5 cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwl9CisJZWxzZQorCQlxdWVyeWxlbiA9IDA7CQkJ Lyoga2VlcCBjb21waWxlciBxdWlldCAqLworCisJLyogRXZlcnlvbmUncyBoYWQgYSBjaGFu Y2UgdG8gYXNrIGZvciBzcGFjZSwgc28gbm93IGNyZWF0ZSB0aGUgRFNNICovCisJSW5pdGlh bGl6ZVBhcmFsbGVsRFNNKHBjeHQpOworCisJLyogSWYgbm8gRFNNIHNlZ21lbnQgd2FzIGF2 YWlsYWJsZSwgYmFjayBvdXQgKGRvIHNlcmlhbCBidWlsZCkgKi8KKwlpZiAocGN4dC0+c2Vn ID09IE5VTEwpCisJeworCQlpZiAoSXNNVkNDU25hcHNob3Qoc25hcHNob3QpKQorCQkJVW5y ZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKKwkJRGVzdHJveVBhcmFsbGVsQ29udGV4dChw Y3h0KTsKKwkJRXhpdFBhcmFsbGVsTW9kZSgpOworCQlyZXR1cm47CisJfQorCisJLyogU3Rv cmUgc2hhcmVkIGJ1aWxkIHN0YXRlLCBmb3Igd2hpY2ggd2UgcmVzZXJ2ZWQgc3BhY2UgKi8K Kwlicmluc2hhcmVkID0gKEJyaW5TaGFyZWQgKikgc2htX3RvY19hbGxvY2F0ZShwY3h0LT50 b2MsIGVzdGJyaW5zaGFyZWQpOworCS8qIEluaXRpYWxpemUgaW1tdXRhYmxlIHN0YXRlICov CisJYnJpbnNoYXJlZC0+aGVhcHJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChoZWFwKTsKKwli cmluc2hhcmVkLT5pbmRleHJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChpbmRleCk7CisJYnJp bnNoYXJlZC0+aXNjb25jdXJyZW50ID0gaXNjb25jdXJyZW50OworCWJyaW5zaGFyZWQtPnNj YW50dXBsZXNvcnRzdGF0ZXMgPSBzY2FudHVwbGVzb3J0c3RhdGVzOworCWJyaW5zaGFyZWQt PnBhZ2VzUGVyUmFuZ2UgPSBidWlsZHN0YXRlLT5ic19wYWdlc1BlclJhbmdlOworCUNvbmRp dGlvblZhcmlhYmxlSW5pdCgmYnJpbnNoYXJlZC0+d29ya2Vyc2RvbmVjdik7CisJU3Bpbkxv Y2tJbml0KCZicmluc2hhcmVkLT5tdXRleCk7CisKKwkvKiBJbml0aWFsaXplIG11dGFibGUg c3RhdGUgKi8KKwlicmluc2hhcmVkLT5ucGFydGljaXBhbnRzZG9uZSA9IDA7CisJYnJpbnNo YXJlZC0+cmVsdHVwbGVzID0gMC4wOworCWJyaW5zaGFyZWQtPmluZHR1cGxlcyA9IDAuMDsK KworCXRhYmxlX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKGhlYXAsCisJCQkJCQkJCSAgUGFy YWxsZWxUYWJsZVNjYW5Gcm9tQnJpblNoYXJlZChicmluc2hhcmVkKSwKKwkJCQkJCQkJICBz bmFwc2hvdCk7CisKKwkvKgorCSAqIFN0b3JlIHNoYXJlZCB0dXBsZXNvcnQtcHJpdmF0ZSBz dGF0ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVkIHNwYWNlLgorCSAqIFRoZW4sIGluaXRpYWxp emUgb3BhcXVlIHN0YXRlIHVzaW5nIHR1cGxlc29ydCByb3V0aW5lLgorCSAqLworCXNoYXJl ZHNvcnQgPSAoU2hhcmVkc29ydCAqKSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywgZXN0 c29ydCk7CisJdHVwbGVzb3J0X2luaXRpYWxpemVfc2hhcmVkKHNoYXJlZHNvcnQsIHNjYW50 dXBsZXNvcnRzdGF0ZXMsCisJCQkJCQkJCXBjeHQtPnNlZyk7CisKKwkvKgorCSAqIFN0b3Jl IHNoYXJlZCB0dXBsZXNvcnQtcHJpdmF0ZSBzdGF0ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVk IHNwYWNlLgorCSAqIFRoZW4sIGluaXRpYWxpemUgb3BhcXVlIHN0YXRlIHVzaW5nIHR1cGxl c29ydCByb3V0aW5lLgorCSAqLworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxM RUxfS0VZX0JSSU5fU0hBUkVELCBicmluc2hhcmVkKTsKKwlzaG1fdG9jX2luc2VydChwY3h0 LT50b2MsIFBBUkFMTEVMX0tFWV9UVVBMRVNPUlQsIHNoYXJlZHNvcnQpOworCisJLyogU3Rv cmUgcXVlcnkgc3RyaW5nIGZvciB3b3JrZXJzICovCisJaWYgKGRlYnVnX3F1ZXJ5X3N0cmlu ZykKKwl7CisJCWNoYXIJICAgKnNoYXJlZHF1ZXJ5OworCisJCXNoYXJlZHF1ZXJ5ID0gKGNo YXIgKikgc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHF1ZXJ5bGVuICsgMSk7CisJCW1l bWNweShzaGFyZWRxdWVyeSwgZGVidWdfcXVlcnlfc3RyaW5nLCBxdWVyeWxlbiArIDEpOwor CQlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhULCBz aGFyZWRxdWVyeSk7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZWFjaCB3 b3JrZXIncyBXYWxVc2FnZSBhbmQgQnVmZmVyVXNhZ2U7IG5vIG5lZWQgdG8KKwkgKiBpbml0 aWFsaXplLgorCSAqLworCXdhbHVzYWdlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2Ms CisJCQkJCQkJCW11bF9zaXplKHNpemVvZihXYWxVc2FnZSksIHBjeHQtPm53b3JrZXJzKSk7 CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfV0FMX1VTQUdFLCB3 YWx1c2FnZSk7CisJYnVmZmVydXNhZ2UgPSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywK KwkJCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclVzYWdlKSwgcGN4dC0+bndvcmtl cnMpKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9CVUZGRVJf VVNBR0UsIGJ1ZmZlcnVzYWdlKTsKKworCS8qIExhdW5jaCB3b3JrZXJzLCBzYXZpbmcgc3Rh dHVzIGZvciBsZWFkZXIvY2FsbGVyICovCisJTGF1bmNoUGFyYWxsZWxXb3JrZXJzKHBjeHQp OworCWJyaW5sZWFkZXItPnBjeHQgPSBwY3h0OworCWJyaW5sZWFkZXItPm5wYXJ0aWNpcGFu dHR1cGxlc29ydHMgPSBwY3h0LT5ud29ya2Vyc19sYXVuY2hlZDsKKwlpZiAobGVhZGVycGFy dGljaXBhdGVzKQorCQlicmlubGVhZGVyLT5ucGFydGljaXBhbnR0dXBsZXNvcnRzKys7CisJ YnJpbmxlYWRlci0+YnJpbnNoYXJlZCA9IGJyaW5zaGFyZWQ7CisJYnJpbmxlYWRlci0+c2hh cmVkc29ydCA9IHNoYXJlZHNvcnQ7CisJYnJpbmxlYWRlci0+c25hcHNob3QgPSBzbmFwc2hv dDsKKwlicmlubGVhZGVyLT53YWx1c2FnZSA9IHdhbHVzYWdlOworCWJyaW5sZWFkZXItPmJ1 ZmZlcnVzYWdlID0gYnVmZmVydXNhZ2U7CisKKwkvKiBJZiBubyB3b3JrZXJzIHdlcmUgc3Vj Y2Vzc2Z1bGx5IGxhdW5jaGVkLCBiYWNrIG91dCAoZG8gc2VyaWFsIGJ1aWxkKSAqLworCWlm IChwY3h0LT5ud29ya2Vyc19sYXVuY2hlZCA9PSAwKQorCXsKKwkJX2JyaW5fZW5kX3BhcmFs bGVsKGJyaW5sZWFkZXIsIE5VTEwpOworCQlyZXR1cm47CisJfQorCisJLyogU2F2ZSBsZWFk ZXIgc3RhdGUgbm93IHRoYXQgaXQncyBjbGVhciBidWlsZCB3aWxsIGJlIHBhcmFsbGVsICov CisJYnVpbGRzdGF0ZS0+YnNfbGVhZGVyID0gYnJpbmxlYWRlcjsKKworCS8qIEpvaW4gaGVh cCBzY2FuIG91cnNlbHZlcyAqLworCWlmIChsZWFkZXJwYXJ0aWNpcGF0ZXMpCisJCV9icmlu X2xlYWRlcl9wYXJ0aWNpcGF0ZV9hc193b3JrZXIoYnVpbGRzdGF0ZSwgaGVhcCwgaW5kZXgp OworCisJLyoKKwkgKiBDYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3IgYWxsIGxhdW5jaGVkIHdv cmtlcnMgd2hlbiB3ZSByZXR1cm4uICBNYWtlCisJICogc3VyZSB0aGF0IHRoZSBmYWlsdXJl LXRvLXN0YXJ0IGNhc2Ugd2lsbCBub3QgaGFuZyBmb3JldmVyLgorCSAqLworCVdhaXRGb3JQ YXJhbGxlbFdvcmtlcnNUb0F0dGFjaChwY3h0KTsKK30KKworLyoKKyAqIFNodXQgZG93biB3 b3JrZXJzLCBkZXN0cm95IHBhcmFsbGVsIGNvbnRleHQsIGFuZCBlbmQgcGFyYWxsZWwgbW9k ZS4KKyAqLworc3RhdGljIHZvaWQKK19icmluX2VuZF9wYXJhbGxlbChCcmluTGVhZGVyICpi cmlubGVhZGVyLCBCcmluQnVpbGRTdGF0ZSAqc3RhdGUpCit7CisJaW50CQkJaTsKKwlCcmlu VHVwbGUgICpidHVwOworCUJyaW5NZW1UdXBsZSAqbWVtdHVwbGUgPSBOVUxMOworCVNpemUJ CXR1cGxlbjsKKwlCcmluU2hhcmVkICpicmluc2hhcmVkID0gYnJpbmxlYWRlci0+YnJpbnNo YXJlZDsKKwlCbG9ja051bWJlciBwcmV2Ymxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJ QnJpblR1cGxlICAqZW1wdHlUdXBsZSA9IE5VTEw7CisJU2l6ZQkJZW1wdHlTaXplOworCUJy aW5TcG9vbCAgKnNwb29sOworCU1lbW9yeUNvbnRleHQgcmFuZ2VDeHQsCisJCQkJb2xkQ3h0 OworCisJLyogU2h1dGRvd24gd29ya2VyIHByb2Nlc3NlcyAqLworCVdhaXRGb3JQYXJhbGxl bFdvcmtlcnNUb0ZpbmlzaChicmlubGVhZGVyLT5wY3h0KTsKKworCWlmICghc3RhdGUpCisJ CXJldHVybjsKKworCS8qIGNvcHkgdGhlIGRhdGEgaW50byBsZWFkZXIgc3RhdGUgKHdlIGhh dmUgdG8gd2FpdCBmb3IgdGhlIHdvcmtlcnMgKSAqLworCXN0YXRlLT5ic19yZWx0dXBsZXMg PSBicmluc2hhcmVkLT5yZWx0dXBsZXM7CisJc3RhdGUtPmJzX251bXR1cGxlcyA9IGJyaW5z aGFyZWQtPmluZHR1cGxlczsKKworCS8qIGRvIHRoZSBhY3R1YWwgc29ydCBpbiB0aGUgbGVh ZGVyICovCisJc3Bvb2wgPSBzdGF0ZS0+YnNfc3Bvb2w7CisJdHVwbGVzb3J0X3BlcmZvcm1z b3J0KHNwb29sLT5zb3J0c3RhdGUpOworCisJLyoKKwkgKiBJbml0aWFsaXplIEJyaW5NZW1U dXBsZSB3ZSdsbCB1c2UgdG8gdW5pb24gc3VtbWFyaWVzIGZyb20gd29ya2VycyAoaW4KKwkg KiBjYXNlIHRoZXkgaGFwcGVuZWQgdG8gcHJvZHVjZSBwYXJ0cyBvZiB0aGUgc2FtZSBwYWdh IHJhbmdlKS4KKwkgKi8KKwltZW10dXBsZSA9IGJyaW5fbmV3X21lbXR1cGxlKHN0YXRlLT5i c19iZGVzYyk7CisKKwkvKgorCSAqIENyZWF0ZSBhIG1lbW9yeSBjb250ZXh0IHdlJ2xsIHJl c2V0IHRvIGNvbWJpbmUgcmVzdWx0cyBmb3IgYSBzaW5nbGUKKwkgKiBwYWdlIHJhbmdlIChy ZWNlaXZlZCBmcm9tIHRoZSB3b3JrZXJzKS4gV2UgZG9uJ3QgZXhwZWN0IGh1Z2UgbnVtYmVy IG9mCisJICogb3ZlcmxhcHMgdW5kZXIgcmVndWxhciBjaXJjdW1zdGFuY2VzLCBiZWNhdXNl IGZvciBsYXJnZSB0YWJsZXMgdGhlCisJICogY2h1bmsgc2l6ZSBpcyBsaWtlbHkgbGFyZ2Vy IHRoYW4gdGhlIEJSSU4gcGFnZSByYW5nZSksIGJ1dCBpdCBjYW4KKwkgKiBoYXBwZW4sIGFu ZCB0aGUgdW5pb24gZnVuY3Rpb25zIG1heSBkbyBhbGwga2luZHMgb2Ygc3R1ZmYuIFNvIHdl IGJldHRlcgorCSAqIHJlc2V0IHRoZSBjb250ZXh0IG9uY2UgaW4gYSB3aGlsZS4KKwkgKi8K KwlyYW5nZUN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4 dCwKKwkJCQkJCQkJCSAiYnJpbiB1bmlvbiIsCisJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVM VF9TSVpFUyk7CisJb2xkQ3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHJhbmdlQ3h0KTsK KworCS8qCisJICogUmVhZCB0aGUgQlJJTiB0dXBsZXMgZnJvbSB0aGUgc2hhcmVkIHR1cGxl c29ydCwgc29ydGVkIGJ5IGJsb2NrIG51bWJlci4KKwkgKiBUaGF0IHByb2JhYmx5IGdpdmVz IHVzIGFuIGluZGV4IHRoYXQgaXMgY2hlYXBlciB0byBzY2FuLCB0aGFua3MgdG8KKwkgKiBt b3N0bHkgZ2V0dGluZyBkYXRhIGZyb20gdGhlIHNhbWUgaW5kZXggcGFnZSBhcyBiZWZvcmUu CisJICovCisJd2hpbGUgKChidHVwID0gdHVwbGVzb3J0X2dldGJyaW50dXBsZShzcG9vbC0+ c29ydHN0YXRlLCAmdHVwbGVuLCB0cnVlKSkgIT0gTlVMTCkKKwl7CisJCS8qIFJhbmdlcyBz aG91bGQgYmUgbXVsdGlwbGVzIG9mIHBhZ2VzX3Blcl9yYW5nZSBmb3IgdGhlIGluZGV4LiAq LworCQlBc3NlcnQoYnR1cC0+YnRfYmxrbm8gJSBicmluc2hhcmVkLT5wYWdlc1BlclJhbmdl ID09IDApOworCisJCS8qCisJCSAqIERvIHdlIG5lZWQgdG8gdW5pb24gc3VtbWFyaWVzIGZv ciB0aGUgc2FtZSBwYWdlIHJhbmdlPworCQkgKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJz dCBicmluIHR1cGxlIHdlIHJlYWQsIHRoZW4ganVzdCBkZWZvcm0gaXQgaW50bworCQkgKiB0 aGUgbWVtdHVwbGUsIGFuZCBjb250aW51ZSB3aXRoIHRoZSBuZXh0IG9uZSBmcm9tIHR1cGxl c29ydC4gV2UKKwkJICogaG93ZXZlciBtYXkgbmVlZCB0byBpbnNlcnQgZW1wdHkgc3VtbWFy aWVzIGludG8gdGhlIGluZGV4LgorCQkgKgorCQkgKiBJZiBpdCdzIHRoZSBzYW1lIGJsb2Nr IGFzIHRoZSBsYXN0IHdlIHNhdywgd2Ugc2ltcGx5IHVuaW9uIHRoZSBicmluCisJCSAqIHR1 cGxlIGludG8gaXQsIGFuZCB3ZSdyZSBkb25lIC0gd2UgZG9uJ3QgZXZlbiBuZWVkIHRvIGlu c2VydCBlbXB0eQorCQkgKiByYW5nZXMsIGJlY2F1c2UgdGhhdCB3YXMgZG9uZSBlYXJsaWVy IHdoZW4gd2Ugc2F3IHRoZSBmaXJzdCBicmluCisJCSAqIHR1cGxlIChmb3IgdGhpcyByYW5n ZSkuCisJCSAqCisJCSAqIEZpbmFsbHksIGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBicmluIHR1 cGxlLCBhbmQgaXQncyBub3QgdGhlIHNhbWUKKwkJICogcGFnZSByYW5nZSwgd2UgbmVlZCB0 byBkbyB0aGUgaW5zZXJ0IGFuZCB0aGVuIGRlZm9ybSB0aGUgdHVwbGUgaW50bworCQkgKiB0 aGUgbWVtdHVwbGUuIFRoZW4gd2UnbGwgaW5zZXJ0IGVtcHR5IHJhbmdlcyBiZWZvcmUgdGhl IG5ldyBicmluCisJCSAqIHR1cGxlLCBpZiBuZWVkZWQuCisJCSAqLworCQlpZiAocHJldmJs a25vID09IEludmFsaWRCbG9ja051bWJlcikKKwkJeworCQkJLyogRmlyc3QgYnJpbiB0dXBs ZXMsIGp1c3QgZGVmb3JtIGludG8gbWVtdHVwbGUuICovCisJCQltZW10dXBsZSA9IGJyaW5f ZGVmb3JtX3R1cGxlKHN0YXRlLT5ic19iZGVzYywgYnR1cCwgbWVtdHVwbGUpOworCisJCQkv KiBjb250aW51ZSB0byBpbnNlcnQgZW1wdHkgcGFnZXMgYmVmb3JlIHRoaXNibG9jayAqLwor CQl9CisJCWVsc2UgaWYgKG1lbXR1cGxlLT5idF9ibGtubyA9PSBidHVwLT5idF9ibGtubykK KwkJeworCQkJLyoKKwkJCSAqIE5vdCB0aGUgZmlyc3QgYnJpbiB0dXBsZSwgYnV0IHNhbWUg cGFnZSByYW5nZSBhcyB0aGUgcHJldmlvdXMKKwkJCSAqIG9uZSwgc28gd2UgY2FuIG1lcmdl IGl0IGludG8gdGhlIG1lbXR1cGxlLgorCQkJICovCisJCQl1bmlvbl90dXBsZXMoc3RhdGUt PmJzX2JkZXNjLCBtZW10dXBsZSwgYnR1cCk7CisJCQljb250aW51ZTsKKwkJfQorCQllbHNl CisJCXsKKwkJCUJyaW5UdXBsZSAgKnRtcDsKKwkJCVNpemUJCWxlbjsKKworCQkJLyoKKwkJ CSAqIFdlIGdvdCBicmluIHR1cGxlIGZvciBhIGRpZmZlcmVudCBwYWdlIHJhbmdlLCBzbyBm b3JtIGEgYnJpbgorCQkJICogdHVwbGUgZnJvbSB0aGUgbWVtdHVwbGUsIGluc2VydCBpdCwg YW5kIHJlLWluaXQgdGhlIG1lbXR1cGxlCisJCQkgKiBmcm9tIHRoZSBuZXcgYnJpbiB0dXBs ZS4KKwkJCSAqLworCQkJdG1wID0gYnJpbl9mb3JtX3R1cGxlKHN0YXRlLT5ic19iZGVzYywg bWVtdHVwbGUtPmJ0X2Jsa25vLAorCQkJCQkJCQkgIG1lbXR1cGxlLCAmbGVuKTsKKworCQkJ YnJpbl9kb2luc2VydChzdGF0ZS0+YnNfaXJlbCwgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2Us IHN0YXRlLT5ic19ybUFjY2VzcywKKwkJCQkJCSAgJnN0YXRlLT5ic19jdXJyZW50SW5zZXJ0 QnVmLCB0bXAtPmJ0X2Jsa25vLCB0bXAsIGxlbik7CisKKwkJCS8qCisJCQkgKiBSZXNldCB0 aGUgcGVyLW91dHB1dC1yYW5nZSBjb250ZXh0LiBUaGlzIGZyZWVzIGFsbCB0aGUgbWVtb3J5 CisJCQkgKiBwb3NzaWJseSBhbGxvY2F0ZWQgYnkgdGhlIHVuaW9uIGZ1bmN0aW9ucywgYW5k IGFsc28gdGhlIEJSSU4KKwkJCSAqIHR1cGxlIHdlIGp1c3QgZm9ybWVkIGFuZCBpbnNlcnRl ZC4KKwkJCSAqLworCQkJTWVtb3J5Q29udGV4dFJlc2V0KHJhbmdlQ3h0KTsKKworCQkJbWVt dHVwbGUgPSBicmluX2RlZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIGJ0dXAsIG1lbXR1 cGxlKTsKKworCQkJLyogY29udGludWUgdG8gaW5zZXJ0IGVtcHR5IHBhZ2VzIGJlZm9yZSB0 aGlzYmxvY2sgKi8KKwkJfQorCisJCS8qIEZpbGwgZW1wdHkgcmFuZ2VzIGZvciBhbGwgcmFu Z2VzIG1pc3NpbmcgaW4gdGhlIHR1cGxlc29ydC4gKi8KKwkJcHJldmJsa25vID0gKHByZXZi bGtubyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpID8gMCA6IHByZXZibGtubzsKKwkJd2hpbGUg KHByZXZibGtubyArIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlIDwgYnR1cC0+YnRfYmxrbm8p CisJCXsKKwkJCS8qIHRoZSBtaXNzaW5nIHJhbmdlICovCisJCQlwcmV2Ymxrbm8gKz0gc3Rh dGUtPmJzX3BhZ2VzUGVyUmFuZ2U7CisKKwkJCS8qIERpZCB3ZSBhbHJlYWR5IGJ1aWxkIHRo ZSBlbXB0eSByYW5nZT8gSWYgbm90LCBkbyBpdCBub3cuICovCisJCQlpZiAoZW1wdHlUdXBs ZSA9PSBOVUxMKQorCQkJeworCQkJCUJyaW5NZW1UdXBsZSAqZHR1cGxlID0gYnJpbl9uZXdf bWVtdHVwbGUoc3RhdGUtPmJzX2JkZXNjKTsKKworCQkJCWVtcHR5VHVwbGUgPSBicmluX2Zv cm1fdHVwbGUoc3RhdGUtPmJzX2JkZXNjLCBwcmV2Ymxrbm8sIGR0dXBsZSwgJmVtcHR5U2l6 ZSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogd2UgYWxyZWFkeSBoYXZlIGFtICJl bXB0eSByYW5nZSIgdHVwbGUsIGp1c3Qgc2V0IHRoZSBibG9jayAqLworCQkJCWVtcHR5VHVw bGUtPmJ0X2Jsa25vID0gcHJldmJsa25vOworCQkJfQorCisJCQlicmluX2RvaW5zZXJ0KHN0 YXRlLT5ic19pcmVsLCBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSwgc3RhdGUtPmJzX3JtQWNj ZXNzLAorCQkJCQkJICAmc3RhdGUtPmJzX2N1cnJlbnRJbnNlcnRCdWYsCisJCQkJCQkgIGVt cHR5VHVwbGUtPmJ0X2Jsa25vLCBlbXB0eVR1cGxlLCBlbXB0eVNpemUpOworCQl9CisKKwkJ cHJldmJsa25vID0gYnR1cC0+YnRfYmxrbm87CisJfQorCisJdHVwbGVzb3J0X2VuZChzcG9v bC0+c29ydHN0YXRlKTsKKworCS8qIEZpbGwgZW1wdHkgcmFuZ2VzIGF0IHRoZSBlbmQsIGZv ciBhbGwgcmFuZ2VzIG1pc3NpbmcgaW4gdGhlIHR1cGxlc29ydC4gKi8KKwlwcmV2Ymxrbm8g PSAocHJldmJsa25vID09IEludmFsaWRCbG9ja051bWJlcikgPyAwIDogcHJldmJsa25vOwor CXdoaWxlIChwcmV2Ymxrbm8gKyBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSA8IG1lbXR1cGxl LT5idF9ibGtubykKKwl7CisJCS8qIHRoZSBtaXNzaW5nIHJhbmdlICovCisJCXByZXZibGtu byArPSBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZTsKKworCQkvKiBEaWQgd2UgYWxyZWFkeSBi dWlsZCB0aGUgZW1wdHkgcmFuZ2U/IElmIG5vdCwgZG8gaXQgbm93LiAqLworCQlpZiAoZW1w dHlUdXBsZSA9PSBOVUxMKQorCQl7CisJCQlCcmluTWVtVHVwbGUgKmR0dXBsZSA9IGJyaW5f bmV3X21lbXR1cGxlKHN0YXRlLT5ic19iZGVzYyk7CisKKwkJCWVtcHR5VHVwbGUgPSBicmlu X2Zvcm1fdHVwbGUoc3RhdGUtPmJzX2JkZXNjLCBwcmV2Ymxrbm8sIGR0dXBsZSwgJmVtcHR5 U2l6ZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiB3ZSBhbHJlYWR5IGhhdmUgYW0gImVt cHR5IHJhbmdlIiB0dXBsZSwganVzdCBzZXQgdGhlIGJsb2NrICovCisJCQllbXB0eVR1cGxl LT5idF9ibGtubyA9IHByZXZibGtubzsKKwkJfQorCisJCWJyaW5fZG9pbnNlcnQoc3RhdGUt PmJzX2lyZWwsIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlLCBzdGF0ZS0+YnNfcm1BY2Nlc3Ms CisJCQkJCSAgJnN0YXRlLT5ic19jdXJyZW50SW5zZXJ0QnVmLAorCQkJCQkgIGVtcHR5VHVw bGUtPmJ0X2Jsa25vLCBlbXB0eVR1cGxlLCBlbXB0eVNpemUpOworCX0KKworCS8qIEZpbGwg dGhlIEJSSU4gdHVwbGUgZm9yIHRoZSBsYXN0IHBhZ2UgcmFuZ2UuICovCisJaWYgKHByZXZi bGtubyAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJeworCQlCcmluVHVwbGUgICp0bXA7CisJ CVNpemUJCWxlbjsKKworCQl0bXAgPSBicmluX2Zvcm1fdHVwbGUoc3RhdGUtPmJzX2JkZXNj LCBtZW10dXBsZS0+YnRfYmxrbm8sCisJCQkJCQkJICBtZW10dXBsZSwgJmxlbik7CisKKwkJ YnJpbl9kb2luc2VydChzdGF0ZS0+YnNfaXJlbCwgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2Us IHN0YXRlLT5ic19ybUFjY2VzcywKKwkJCQkJICAmc3RhdGUtPmJzX2N1cnJlbnRJbnNlcnRC dWYsIHRtcC0+YnRfYmxrbm8sIHRtcCwgbGVuKTsKKworCQlwZnJlZSh0bXApOworCX0KKwor CS8qCisJICogU3dpdGNoIGJhY2sgdG8gdGhlIG9yaWdpbmFtIG1lbW9yeSBjb250ZXh0LCBh bmQgZGVzdHJveSB0aGUgb25lIHdlCisJICogY3JlYXRlZCB0byBpc29sYXRlIHRoZSB1bmlv bl90dXBsZSBjYWxscy4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3h0KTsK KwlNZW1vcnlDb250ZXh0RGVsZXRlKHJhbmdlQ3h0KTsKKworCS8qCisJICogTmV4dCwgYWNj dW11bGF0ZSBXQUwgdXNhZ2UuICAoVGhpcyBtdXN0IHdhaXQgZm9yIHRoZSB3b3JrZXJzIHRv IGZpbmlzaCwKKwkgKiBvciB3ZSBtaWdodCBnZXQgaW5jb21wbGV0ZSBkYXRhLikKKwkgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgYnJpbmxlYWRlci0+cGN4dC0+bndvcmtlcnNfbGF1bmNoZWQ7 IGkrKykKKwkJSW5zdHJBY2N1bVBhcmFsbGVsUXVlcnkoJmJyaW5sZWFkZXItPmJ1ZmZlcnVz YWdlW2ldLCAmYnJpbmxlYWRlci0+d2FsdXNhZ2VbaV0pOworCisJLyogRnJlZSBsYXN0IHJl ZmVyZW5jZSB0byBNVkNDIHNuYXBzaG90LCBpZiBvbmUgd2FzIHVzZWQgKi8KKwlpZiAoSXNN VkNDU25hcHNob3QoYnJpbmxlYWRlci0+c25hcHNob3QpKQorCQlVbnJlZ2lzdGVyU25hcHNo b3QoYnJpbmxlYWRlci0+c25hcHNob3QpOworCURlc3Ryb3lQYXJhbGxlbENvbnRleHQoYnJp bmxlYWRlci0+cGN4dCk7CisJRXhpdFBhcmFsbGVsTW9kZSgpOworfQorCisvKgorICogUmV0 dXJucyBzaXplIG9mIHNoYXJlZCBtZW1vcnkgcmVxdWlyZWQgdG8gc3RvcmUgc3RhdGUgZm9y IGEgcGFyYWxsZWwKKyAqIGJyaW4gaW5kZXggYnVpbGQgYmFzZWQgb24gdGhlIHNuYXBzaG90 IGl0cyBwYXJhbGxlbCBzY2FuIHdpbGwgdXNlLgorICovCitzdGF0aWMgU2l6ZQorX2JyaW5f cGFyYWxsZWxfZXN0aW1hdGVfc2hhcmVkKFJlbGF0aW9uIGhlYXAsIFNuYXBzaG90IHNuYXBz aG90KQoreworCS8qIGMuZi4gc2htX3RvY19hbGxvY2F0ZSBhcyB0byB3aHkgQlVGRkVSQUxJ R04gaXMgdXNlZCAqLworCXJldHVybiBhZGRfc2l6ZShCVUZGRVJBTElHTihzaXplb2YoQnJp blNoYXJlZCkpLAorCQkJCQl0YWJsZV9wYXJhbGxlbHNjYW5fZXN0aW1hdGUoaGVhcCwgc25h cHNob3QpKTsKK30KKworLyoKKyAqIFdpdGhpbiBsZWFkZXIsIHBhcnRpY2lwYXRlIGFzIGEg cGFyYWxsZWwgd29ya2VyLgorICovCitzdGF0aWMgdm9pZAorX2JyaW5fbGVhZGVyX3BhcnRp Y2lwYXRlX2FzX3dvcmtlcihCcmluQnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSwgUmVsYXRpb24g aGVhcCwgUmVsYXRpb24gaW5kZXgpCit7CisJQnJpbkxlYWRlciAqYnJpbmxlYWRlciA9IGJ1 aWxkc3RhdGUtPmJzX2xlYWRlcjsKKwlpbnQJCQlzb3J0bWVtOworCisJLyogQWxsb2NhdGUg bWVtb3J5IGFuZCBpbml0aWFsaXplIHByaXZhdGUgc3Bvb2wgKi8KKwlidWlsZHN0YXRlLT5i c19zcG9vbCA9IChCcmluU3Bvb2wgKikgcGFsbG9jMChzaXplb2YoQnJpblNwb29sKSk7CisJ YnVpbGRzdGF0ZS0+YnNfc3Bvb2wtPmhlYXAgPSBidWlsZHN0YXRlLT5ic19zcG9vbC0+aGVh cDsKKwlidWlsZHN0YXRlLT5ic19zcG9vbC0+aW5kZXggPSBidWlsZHN0YXRlLT5ic19zcG9v bC0+aW5kZXg7CisKKwkvKgorCSAqIE1pZ2h0IGFzIHdlbGwgdXNlIHJlbGlhYmxlIGZpZ3Vy ZSB3aGVuIGRvbGluZyBvdXQgbWFpbnRlbmFuY2Vfd29ya19tZW0KKwkgKiAod2hlbiByZXF1 ZXN0ZWQgbnVtYmVyIG9mIHdvcmtlcnMgd2VyZSBub3QgbGF1bmNoZWQsIHRoaXMgd2lsbCBi ZQorCSAqIHNvbWV3aGF0IGhpZ2hlciB0aGFuIGl0IGlzIGZvciBvdGhlciB3b3JrZXJzKS4K KwkgKi8KKwlzb3J0bWVtID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gLyBicmlubGVhZGVyLT5u cGFydGljaXBhbnR0dXBsZXNvcnRzOworCisJLyogUGVyZm9ybSB3b3JrIGNvbW1vbiB0byBh bGwgcGFydGljaXBhbnRzICovCisJX2JyaW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQoYnVp bGRzdGF0ZSwgYnVpbGRzdGF0ZS0+YnNfc3Bvb2wsIGJyaW5sZWFkZXItPmJyaW5zaGFyZWQs CisJCQkJCQkJCSAgYnJpbmxlYWRlci0+c2hhcmVkc29ydCwgaGVhcCwgaW5kZXgsIHNvcnRt ZW0sIHRydWUpOworfQorCisvKgorICogUGVyZm9ybSBhIHdvcmtlcidzIHBvcnRpb24gb2Yg YSBwYXJhbGxlbCBzb3J0LgorICoKKyAqIFRoaXMgZ2VuZXJhdGVzIGEgdHVwbGVzb3J0IGZv ciBwYXNzZWQgYnRzcG9vbCwgYW5kIGEgc2Vjb25kIHR1cGxlc29ydAorICogc3RhdGUgaWYg YSBzZWNvbmQgYnRzcG9vbCBpcyBuZWVkIChpLmUuIGZvciB1bmlxdWUgaW5kZXggYnVpbGRz KS4gIEFsbAorICogb3RoZXIgc3Bvb2wgZmllbGRzIHNob3VsZCBhbHJlYWR5IGJlIHNldCB3 aGVuIHRoaXMgaXMgY2FsbGVkLgorICoKKyAqIHNvcnRtZW0gaXMgdGhlIGFtb3VudCBvZiB3 b3JraW5nIG1lbW9yeSB0byB1c2Ugd2l0aGluIGVhY2ggd29ya2VyLAorICogZXhwcmVzc2Vk IGluIEtCcy4KKyAqCisgKiBXaGVuIHRoaXMgcmV0dXJucywgd29ya2VycyBhcmUgZG9uZSwg YW5kIG5lZWQgb25seSByZWxlYXNlIHJlc291cmNlcy4KKyAqLworc3RhdGljIHZvaWQKK19i cmluX3BhcmFsbGVsX3NjYW5fYW5kX2J1aWxkKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSwgQnJp blNwb29sICpicmluc3Bvb2wsCisJCQkJCQkJICBCcmluU2hhcmVkICpicmluc2hhcmVkLCBT aGFyZWRzb3J0ICpzaGFyZWRzb3J0LAorCQkJCQkJCSAgUmVsYXRpb24gaGVhcCwgUmVsYXRp b24gaW5kZXgsIGludCBzb3J0bWVtLAorCQkJCQkJCSAgYm9vbCBwcm9ncmVzcykKK3sKKwlT b3J0Q29vcmRpbmF0ZSBjb29yZGluYXRlOworCVRhYmxlU2NhbkRlc2Mgc2NhbjsKKwlkb3Vi bGUJCXJlbHR1cGxlczsKKwlJbmRleEluZm8gICppbmRleEluZm87CisKKwkvKiBJbml0aWFs aXplIGxvY2FsIHR1cGxlc29ydCBjb29yZGluYXRpb24gc3RhdGUgKi8KKwljb29yZGluYXRl ID0gcGFsbG9jMChzaXplb2YoU29ydENvb3JkaW5hdGVEYXRhKSk7CisJY29vcmRpbmF0ZS0+ aXNXb3JrZXIgPSB0cnVlOworCWNvb3JkaW5hdGUtPm5QYXJ0aWNpcGFudHMgPSAtMTsKKwlj b29yZGluYXRlLT5zaGFyZWRzb3J0ID0gc2hhcmVkc29ydDsKKworCS8qIEJlZ2luICJwYXJ0 aWFsIiB0dXBsZXNvcnQgKi8KKwlicmluc3Bvb2wtPnNvcnRzdGF0ZSA9IHR1cGxlc29ydF9i ZWdpbl9pbmRleF9icmluKGJyaW5zcG9vbC0+aGVhcCwKKwkJCQkJCQkJCQkJCQkgIGJyaW5z cG9vbC0+aW5kZXgsCisJCQkJCQkJCQkJCQkJICBzb3J0bWVtLCBjb29yZGluYXRlLAorCQkJ CQkJCQkJCQkJCSAgVFVQTEVTT1JUX05PTkUpOworCisJLyogSm9pbiBwYXJhbGxlbCBzY2Fu ICovCisJaW5kZXhJbmZvID0gQnVpbGRJbmRleEluZm8oaW5kZXgpOworCWluZGV4SW5mby0+ aWlfQ29uY3VycmVudCA9IGJyaW5zaGFyZWQtPmlzY29uY3VycmVudDsKKworCXNjYW4gPSB0 YWJsZV9iZWdpbnNjYW5fcGFyYWxsZWwoaGVhcCwKKwkJCQkJCQkJCVBhcmFsbGVsVGFibGVT Y2FuRnJvbUJyaW5TaGFyZWQoYnJpbnNoYXJlZCkpOworCisJcmVsdHVwbGVzID0gdGFibGVf aW5kZXhfYnVpbGRfc2NhbihoZWFwLCBpbmRleCwgaW5kZXhJbmZvLCB0cnVlLCB0cnVlLAor CQkJCQkJCQkJICAgYnJpbmJ1aWxkQ2FsbGJhY2tQYXJhbGxlbCwgc3RhdGUsIHNjYW4pOwor CisJLyogaW5zZXJ0IHRoZSBsYXN0IGl0ZW0gKi8KKwlmb3JtX2FuZF9zcGlsbF90dXBsZShz dGF0ZSk7CisKKwkvKiBzb3J0IHRoZSBCUklOIHJhbmdlcyBidWlsdCBieSB0aGlzIHdvcmtl ciAqLworCXR1cGxlc29ydF9wZXJmb3Jtc29ydChicmluc3Bvb2wtPnNvcnRzdGF0ZSk7CisK KwlzdGF0ZS0+YnNfcmVsdHVwbGVzICs9IHJlbHR1cGxlczsKKworCS8qCisJICogRG9uZS4g IFJlY29yZCBhbWJ1aWxkIHN0YXRpc3RpY3MuCisJICovCisJU3BpbkxvY2tBY3F1aXJlKCZi cmluc2hhcmVkLT5tdXRleCk7CisJYnJpbnNoYXJlZC0+bnBhcnRpY2lwYW50c2RvbmUrKzsK Kwlicmluc2hhcmVkLT5yZWx0dXBsZXMgKz0gc3RhdGUtPmJzX3JlbHR1cGxlczsKKwlicmlu c2hhcmVkLT5pbmR0dXBsZXMgKz0gc3RhdGUtPmJzX251bXR1cGxlczsKKwlTcGluTG9ja1Jl bGVhc2UoJmJyaW5zaGFyZWQtPm11dGV4KTsKKworCS8qIE5vdGlmeSBsZWFkZXIgKi8KKwlD b25kaXRpb25WYXJpYWJsZVNpZ25hbCgmYnJpbnNoYXJlZC0+d29ya2Vyc2RvbmVjdik7CisK Kwl0dXBsZXNvcnRfZW5kKGJyaW5zcG9vbC0+c29ydHN0YXRlKTsKK30KKworLyoKKyAqIFBl cmZvcm0gd29yayB3aXRoaW4gYSBsYXVuY2hlZCBwYXJhbGxlbCBwcm9jZXNzLgorICovCit2 b2lkCitfYnJpbl9wYXJhbGxlbF9idWlsZF9tYWluKGRzbV9zZWdtZW50ICpzZWcsIHNobV90 b2MgKnRvYykKK3sKKwljaGFyCSAgICpzaGFyZWRxdWVyeTsKKwlCcmluU2hhcmVkICpicmlu c2hhcmVkOworCVNoYXJlZHNvcnQgKnNoYXJlZHNvcnQ7CisJQnJpbkJ1aWxkU3RhdGUgKmJ1 aWxkc3RhdGU7CisJUmVsYXRpb24JaGVhcFJlbDsKKwlSZWxhdGlvbglpbmRleFJlbDsKKwlM T0NLTU9ERQloZWFwTG9ja21vZGU7CisJTE9DS01PREUJaW5kZXhMb2NrbW9kZTsKKwlXYWxV c2FnZSAgICp3YWx1c2FnZTsKKwlCdWZmZXJVc2FnZSAqYnVmZmVydXNhZ2U7CisJaW50CQkJ c29ydG1lbTsKKworCS8qCisJICogVGhlIG9ubHkgcG9zc2libGUgc3RhdHVzIGZsYWcgdGhh dCBjYW4gYmUgc2V0IHRvIHRoZSBwYXJhbGxlbCB3b3JrZXIgaXMKKwkgKiBQUk9DX0lOX1NB RkVfSUMuCisJICovCisJQXNzZXJ0KChNeVByb2MtPnN0YXR1c0ZsYWdzID09IDApIHx8CisJ CSAgIChNeVByb2MtPnN0YXR1c0ZsYWdzID09IFBST0NfSU5fU0FGRV9JQykpOworCisJLyog U2V0IGRlYnVnX3F1ZXJ5X3N0cmluZyBmb3IgaW5kaXZpZHVhbCB3b3JrZXJzIGZpcnN0ICov CisJc2hhcmVkcXVlcnkgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9RVUVS WV9URVhULCB0cnVlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBzaGFyZWRxdWVyeTsKKwor CS8qIFJlcG9ydCB0aGUgcXVlcnkgc3RyaW5nIGZyb20gbGVhZGVyICovCisJcGdzdGF0X3Jl cG9ydF9hY3Rpdml0eShTVEFURV9SVU5OSU5HLCBkZWJ1Z19xdWVyeV9zdHJpbmcpOworCisJ LyogTG9vayB1cCBicmluIHNoYXJlZCBzdGF0ZSAqLworCWJyaW5zaGFyZWQgPSBzaG1fdG9j X2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9CUklOX1NIQVJFRCwgZmFsc2UpOworCisJLyog T3BlbiByZWxhdGlvbnMgdXNpbmcgbG9jayBtb2RlcyBrbm93biB0byBiZSBvYnRhaW5lZCBi eSBpbmRleC5jICovCisJaWYgKCFicmluc2hhcmVkLT5pc2NvbmN1cnJlbnQpCisJeworCQlo ZWFwTG9ja21vZGUgPSBTaGFyZUxvY2s7CisJCWluZGV4TG9ja21vZGUgPSBBY2Nlc3NFeGNs dXNpdmVMb2NrOworCX0KKwllbHNlCisJeworCQloZWFwTG9ja21vZGUgPSBTaGFyZVVwZGF0 ZUV4Y2x1c2l2ZUxvY2s7CisJCWluZGV4TG9ja21vZGUgPSBSb3dFeGNsdXNpdmVMb2NrOwor CX0KKworCS8qIE9wZW4gcmVsYXRpb25zIHdpdGhpbiB3b3JrZXIgKi8KKwloZWFwUmVsID0g dGFibGVfb3Blbihicmluc2hhcmVkLT5oZWFwcmVsaWQsIGhlYXBMb2NrbW9kZSk7CisJaW5k ZXhSZWwgPSBpbmRleF9vcGVuKGJyaW5zaGFyZWQtPmluZGV4cmVsaWQsIGluZGV4TG9ja21v ZGUpOworCisJYnVpbGRzdGF0ZSA9IGluaXRpYWxpemVfYnJpbl9idWlsZHN0YXRlKGluZGV4 UmVsLCBOVUxMLAorCQkJCQkJCQkJCQlicmluc2hhcmVkLT5wYWdlc1BlclJhbmdlLAorCQkJ CQkJCQkJCQlJbnZhbGlkQmxvY2tOdW1iZXIpOworCisJLyogSW5pdGlhbGl6ZSB3b3JrZXIn cyBvd24gc3Bvb2wgKi8KKwlidWlsZHN0YXRlLT5ic19zcG9vbCA9IChCcmluU3Bvb2wgKikg cGFsbG9jMChzaXplb2YoQnJpblNwb29sKSk7CisJYnVpbGRzdGF0ZS0+YnNfc3Bvb2wtPmhl YXAgPSBoZWFwUmVsOworCWJ1aWxkc3RhdGUtPmJzX3Nwb29sLT5pbmRleCA9IGluZGV4UmVs OworCisJLyogTG9vayB1cCBzaGFyZWQgc3RhdGUgcHJpdmF0ZSB0byB0dXBsZXNvcnQuYyAq LworCXNoYXJlZHNvcnQgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9UVVBM RVNPUlQsIGZhbHNlKTsKKwl0dXBsZXNvcnRfYXR0YWNoX3NoYXJlZChzaGFyZWRzb3J0LCBz ZWcpOworCisJLyogUHJlcGFyZSB0byB0cmFjayBidWZmZXIgdXNhZ2UgZHVyaW5nIHBhcmFs bGVsIGV4ZWN1dGlvbiAqLworCUluc3RyU3RhcnRQYXJhbGxlbFF1ZXJ5KCk7CisKKwkvKgor CSAqIE1pZ2h0IGFzIHdlbGwgdXNlIHJlbGlhYmxlIGZpZ3VyZSB3aGVuIGRvbGluZyBvdXQg bWFpbnRlbmFuY2Vfd29ya19tZW0KKwkgKiAod2hlbiByZXF1ZXN0ZWQgbnVtYmVyIG9mIHdv cmtlcnMgd2VyZSBub3QgbGF1bmNoZWQsIHRoaXMgd2lsbCBiZQorCSAqIHNvbWV3aGF0IGhp Z2hlciB0aGFuIGl0IGlzIGZvciBvdGhlciB3b3JrZXJzKS4KKwkgKi8KKwlzb3J0bWVtID0g bWFpbnRlbmFuY2Vfd29ya19tZW0gLyBicmluc2hhcmVkLT5zY2FudHVwbGVzb3J0c3RhdGVz OworCisJX2JyaW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQoYnVpbGRzdGF0ZSwgYnVpbGRz dGF0ZS0+YnNfc3Bvb2wsCisJCQkJCQkJCSAgYnJpbnNoYXJlZCwgc2hhcmVkc29ydCwKKwkJ CQkJCQkJICBoZWFwUmVsLCBpbmRleFJlbCwgc29ydG1lbSwgZmFsc2UpOworCisJLyogUmVw b3J0IFdBTC9idWZmZXIgdXNhZ2UgZHVyaW5nIHBhcmFsbGVsIGV4ZWN1dGlvbiAqLworCWJ1 ZmZlcnVzYWdlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfQlVGRkVSX1VT QUdFLCBmYWxzZSk7CisJd2FsdXNhZ2UgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVM X0tFWV9XQUxfVVNBR0UsIGZhbHNlKTsKKwlJbnN0ckVuZFBhcmFsbGVsUXVlcnkoJmJ1ZmZl cnVzYWdlW1BhcmFsbGVsV29ya2VyTnVtYmVyXSwKKwkJCQkJCSAgJndhbHVzYWdlW1BhcmFs bGVsV29ya2VyTnVtYmVyXSk7CisKKwlpbmRleF9jbG9zZShpbmRleFJlbCwgaW5kZXhMb2Nr bW9kZSk7CisJdGFibGVfY2xvc2UoaGVhcFJlbCwgaGVhcExvY2ttb2RlKTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggYTg3NWM1ZDNkN2EuLjliMWEwYWMzNDVkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpAQCAtNTQsNiArNTQsNyBAQCBnaW5oYW5k bGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWNsdXN0ZXJhYmxlID0gZmFs c2U7CiAJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbWNh bnBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbmJ1aWxkcGFyYWxsZWwgPSBm YWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FuaW5jbHVkZSA9IGZhbHNlOwogCWFtcm91dGluZS0+ YW11c2VtYWludGVuYW5jZXdvcmttZW0gPSB0cnVlOwogCWFtcm91dGluZS0+YW1zdW1tYXJp emluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lz dC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmluZGV4IDlhMWJmOGY2NmNi Li5lMDUyYmE4YmRhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lz dC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtNzYsNiArNzYs NyBAQCBnaXN0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1jbHVz dGVyYWJsZSA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9IHRydWU7CiAJYW1y b3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbmJ1aWxk cGFyYWxsZWwgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FuaW5jbHVkZSA9IHRydWU7CiAJ YW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOwogCWFtcm91dGlu ZS0+YW1zdW1tYXJpemluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4 IDY0NDNmZjIxYmRhLi45MDU1MTk2OTJjNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpA QCAtNzMsNiArNzMsNyBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91 dGluZS0+YW1jbHVzdGVyYWJsZSA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1wcmVkbG9ja3Mg PSB0cnVlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOworCWFtcm91dGlu ZS0+YW1jYW5idWlsZHBhcmFsbGVsID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1 ZGUgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3b3JrbWVtID0gZmFs c2U7CiAJYW1yb3V0aW5lLT5hbXN1bW1hcml6aW5nID0gZmFsc2U7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRyZWUuYwppbmRleCAwOTMwZjliMzdlMy4uNmM4Y2Q5M2ZhMGEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtMTEyLDYgKzExMiw3IEBAIGJ0aGFu ZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1jbHVzdGVyYWJsZSA9IHRy dWU7CiAJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbWNh bnBhcmFsbGVsID0gdHJ1ZTsKKwlhbXJvdXRpbmUtPmFtY2FuYnVpbGRwYXJhbGxlbCA9IHRy dWU7CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUgPSB0cnVlOwogCWFtcm91dGluZS0+YW11 c2VtYWludGVuYW5jZXdvcmttZW0gPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtc3VtbWFyaXpp bmcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn dXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCAz MGMwMDg3NmE1Ni4uZmQ0YjYxNTcxMDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9zcGdpc3Qvc3BndXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3Nw Z3V0aWxzLmMKQEAgLTYwLDYgKzYwLDcgQEAgc3BnaGFuZGxlcihQR19GVU5DVElPTl9BUkdT KQogCWFtcm91dGluZS0+YW1jbHVzdGVyYWJsZSA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1w cmVkbG9ja3MgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsK KwlhbXJvdXRpbmUtPmFtY2FuYnVpbGRwYXJhbGxlbCA9IGZhbHNlOwogCWFtcm91dGluZS0+ YW1jYW5pbmNsdWRlID0gdHJ1ZTsKIAlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3b3Jr bWVtID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXN1bW1hcml6aW5nID0gZmFsc2U7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwppbmRleCAxOTRhMTIwN2JlNi4uZDc4 MzE0MDYyZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFs bGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwpAQCAt MTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFj Y2Vzcy9icmluLmgiCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFj Y2Vzcy9wYXJhbGxlbC5oIgogI2luY2x1ZGUgImFjY2Vzcy9zZXNzaW9uLmgiCkBAIC0xNDUs NiArMTQ2LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdAogCXsKIAkJIl9idF9wYXJhbGxlbF9i dWlsZF9tYWluIiwgX2J0X3BhcmFsbGVsX2J1aWxkX21haW4KIAl9LAorCXsKKwkJIl9icmlu X3BhcmFsbGVsX2J1aWxkX21haW4iLCBfYnJpbl9wYXJhbGxlbF9idWlsZF9tYWluCisJfSwK IAl7CiAJCSJwYXJhbGxlbF92YWN1dW1fbWFpbiIsIHBhcmFsbGVsX3ZhY3V1bV9tYWluCiAJ fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDE0M2ZhZTAxZWJkLi40MGFiYmFmNDc2YiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvaW5kZXguYwpAQCAtMjk4Miw3ICsyOTgyLDcgQEAgaW5kZXhfYnVpbGQoUmVs YXRpb24gaGVhcFJlbGF0aW9uLAogCSAqIE5vdGUgdGhhdCBwbGFubmVyIGNvbnNpZGVycyBw YXJhbGxlbCBzYWZldHkgZm9yIHVzLgogCSAqLwogCWlmIChwYXJhbGxlbCAmJiBJc05vcm1h bFByb2Nlc3NpbmdNb2RlKCkgJiYKLQkJaW5kZXhSZWxhdGlvbi0+cmRfcmVsLT5yZWxhbSA9 PSBCVFJFRV9BTV9PSUQpCisJCWluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWNhbmJ1aWxk cGFyYWxsZWwpCiAJCWluZGV4SW5mby0+aWlfUGFyYWxsZWxXb3JrZXJzID0KIAkJCXBsYW5f Y3JlYXRlX2luZGV4X3dvcmtlcnMoUmVsYXRpb25HZXRSZWxpZChoZWFwUmVsYXRpb24pLAog CQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGlkKGluZGV4UmVsYXRpb24pKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYwppbmRleCAyY2Q1MDhlNTEz MC4uOTBmYzYwNWYxY2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVw bGVzb3J0dmFyaWFudHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29y dHZhcmlhbnRzLmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgi CiAKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbl90dXBsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9o YXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFj Y2Vzcy9uYnRyZWUuaCIKQEAgLTQzLDYgKzQ0LDggQEAgc3RhdGljIHZvaWQgcmVtb3ZlYWJi cmV2X2NsdXN0ZXIoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0dXBzLAog CQkJCQkJCQkgaW50IGNvdW50KTsKIHN0YXRpYyB2b2lkIHJlbW92ZWFiYnJldl9pbmRleChU dXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAqc3R1cHMsCiAJCQkJCQkJICAgaW50 IGNvdW50KTsKK3N0YXRpYyB2b2lkIHJlbW92ZWFiYnJldl9pbmRleF9icmluKFR1cGxlc29y dHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVwcywKKwkJCQkJCQkJCWludCBjb3VudCk7 CiBzdGF0aWMgdm9pZCByZW1vdmVhYmJyZXZfZGF0dW0oVHVwbGVzb3J0c3RhdGUgKnN0YXRl LCBTb3J0VHVwbGUgKnN0dXBzLAogCQkJCQkJCSAgIGludCBjb3VudCk7CiBzdGF0aWMgaW50 CWNvbXBhcmV0dXBfaGVhcChjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0IFNvcnRUdXBsZSAq YiwKQEAgLTY5LDEwICs3MiwxNiBAQCBzdGF0aWMgaW50CWNvbXBhcmV0dXBfaW5kZXhfaGFz aChjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0IFNvcnRUdXBsZSAqYiwKIAkJCQkJCQkJICBU dXBsZXNvcnRzdGF0ZSAqc3RhdGUpOwogc3RhdGljIGludAljb21wYXJldHVwX2luZGV4X2hh c2hfdGllYnJlYWsoY29uc3QgU29ydFR1cGxlICphLCBjb25zdCBTb3J0VHVwbGUgKmIsCiAJ CQkJCQkJCQkJICAgVHVwbGVzb3J0c3RhdGUgKnN0YXRlKTsKK3N0YXRpYyBpbnQJY29tcGFy ZXR1cF9pbmRleF9icmluKGNvbnN0IFNvcnRUdXBsZSAqYSwgY29uc3QgU29ydFR1cGxlICpi LAorCQkJCQkJCQkgIFR1cGxlc29ydHN0YXRlICpzdGF0ZSk7CiBzdGF0aWMgdm9pZCB3cml0 ZXR1cF9pbmRleChUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIExvZ2ljYWxUYXBlICp0YXBlLAog CQkJCQkJICAgU29ydFR1cGxlICpzdHVwKTsKIHN0YXRpYyB2b2lkIHJlYWR0dXBfaW5kZXgo VHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0dXAsCiAJCQkJCQkgIExvZ2lj YWxUYXBlICp0YXBlLCB1bnNpZ25lZCBpbnQgbGVuKTsKK3N0YXRpYyB2b2lkIHdyaXRldHVw X2luZGV4X2JyaW4oVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBMb2dpY2FsVGFwZSAqdGFwZSwK KwkJCQkJCQkJU29ydFR1cGxlICpzdHVwKTsKK3N0YXRpYyB2b2lkIHJlYWR0dXBfaW5kZXhf YnJpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAqc3R1cCwKKwkJCQkJCQkg ICBMb2dpY2FsVGFwZSAqdGFwZSwgdW5zaWduZWQgaW50IGxlbik7CiBzdGF0aWMgaW50CWNv bXBhcmV0dXBfZGF0dW0oY29uc3QgU29ydFR1cGxlICphLCBjb25zdCBTb3J0VHVwbGUgKmIs CiAJCQkJCQkJIFR1cGxlc29ydHN0YXRlICpzdGF0ZSk7CiBzdGF0aWMgaW50CWNvbXBhcmV0 dXBfZGF0dW1fdGllYnJlYWsoY29uc3QgU29ydFR1cGxlICphLCBjb25zdCBTb3J0VHVwbGUg KmIsCkBAIC0xMjgsNiArMTM3LDE2IEBAIHR5cGVkZWYgc3RydWN0CiAJdWludDMyCQltYXhf YnVja2V0czsKIH0gVHVwbGVzb3J0SW5kZXhIYXNoQXJnOwogCisvKgorICogRGF0YSBzdHJ1 dHVyZSBwb2ludGVkIGJ5ICJUdXBsZXNvcnRQdWJsaWMuYXJnIiBmb3IgdGhlIGluZGV4X2Jy aW4gc3ViY2FzZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlUdXBsZXNvcnRJbmRleEFy ZyBpbmRleDsKKworCS8qIFhYWCBkbyB3ZSBuZWVkIHNvbWV0aGluZyBoZXJlPyAqLworfSBU dXBsZXNvcnRJbmRleEJyaW5Bcmc7CisKIC8qCiAgKiBEYXRhIHN0cnV0dXJlIHBvaW50ZWQg YnkgIlR1cGxlc29ydFB1YmxpYy5hcmciIGZvciB0aGUgRGF0dW0gY2FzZS4KICAqIFNldCBi eSB0dXBsZXNvcnRfYmVnaW5fZGF0dW0gYW5kIHVzZWQgb25seSBieSB0aGUgRGF0dW1UdXBs ZSByb3V0aW5lcy4KQEAgLTE0MCw2ICsxNTksMjEgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJ CQlkYXR1bVR5cGVMZW47CiB9IFR1cGxlc29ydERhdHVtQXJnOwogCisvKgorICogQ29tcHV0 aW5nIEJyaW5UdXBsZSBzaXplIHdpdGggb25seSB0aGUgdHVwbGUgaXMgZGlmZmljdWx0LCBz byB3ZSB3YW50IHRvIHRyYWNrCisgKiB0aGUgbGVuZ3RoIHJlZmVyZW5jZWQgYnkgdGhlIFNv cnRUdXBsZS4gVGhhdCdzIHdoYXQgQnJpblNvcnRUdXBsZSBpcyBtZWFudAorICogdG8gZG8g LSBpdCdzIGVzc2VudGlhbGx5IGEgQnJpblR1cGxlIHByZWZpeGVkIGJ5IGl0cyBsZW5ndGgu CisgKi8KK3R5cGVkZWYgc3RydWN0IEJyaW5Tb3J0VHVwbGUKK3sKKwlTaXplCQl0dXBsZW47 CisJQnJpblR1cGxlCXR1cGxlOworfSBCcmluU29ydFR1cGxlOworCisvKiBTaXplIG9mIHRo ZSBCcmluU29ydFR1cGxlLCBnaXZlbiBsZW5ndGggb2YgdGhlIEJyaW5UdXBsZS4gKi8KKyNk ZWZpbmUgQlJJTlNPUlRUVVBMRV9TSVpFKGxlbikJCShvZmZzZXRvZihCcmluU29ydFR1cGxl LCB0dXBsZSkgKyAobGVuKSkKKworCiBUdXBsZXNvcnRzdGF0ZSAqCiB0dXBsZXNvcnRfYmVn aW5faGVhcChUdXBsZURlc2MgdHVwRGVzYywKIAkJCQkJIGludCBua2V5cywgQXR0ck51bWJl ciAqYXR0TnVtcywKQEAgLTUyNyw2ICs1NjEsNDcgQEAgdHVwbGVzb3J0X2JlZ2luX2luZGV4 X2dpc3QoUmVsYXRpb24gaGVhcFJlbCwKIAlyZXR1cm4gc3RhdGU7CiB9CiAKK1R1cGxlc29y dHN0YXRlICoKK3R1cGxlc29ydF9iZWdpbl9pbmRleF9icmluKFJlbGF0aW9uIGhlYXBSZWws CisJCQkJCQkgICBSZWxhdGlvbiBpbmRleFJlbCwKKwkJCQkJCSAgIGludCB3b3JrTWVtLAor CQkJCQkJICAgU29ydENvb3JkaW5hdGUgY29vcmRpbmF0ZSwKKwkJCQkJCSAgIGludCBzb3J0 b3B0KQoreworCVR1cGxlc29ydHN0YXRlICpzdGF0ZSA9IHR1cGxlc29ydF9iZWdpbl9jb21t b24od29ya01lbSwgY29vcmRpbmF0ZSwKKwkJCQkJCQkJCQkJCSAgIHNvcnRvcHQpOworCVR1 cGxlc29ydFB1YmxpYyAqYmFzZSA9IFR1cGxlc29ydHN0YXRlR2V0UHVibGljKHN0YXRlKTsK KwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJVHVwbGVzb3J0SW5kZXhCcmluQXJnICph cmc7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGJhc2UtPm1haW5j b250ZXh0KTsKKwlhcmcgPSAoVHVwbGVzb3J0SW5kZXhCcmluQXJnICopIHBhbGxvYyhzaXpl b2YoVHVwbGVzb3J0SW5kZXhCcmluQXJnKSk7CisKKyNpZmRlZiBUUkFDRV9TT1JUCisJaWYg KHRyYWNlX3NvcnQpCisJCWVsb2coTE9HLAorCQkJICJiZWdpbiBpbmRleCBzb3J0OiB3b3Jr TWVtID0gJWQsIHJhbmRvbUFjY2VzcyA9ICVjIiwKKwkJCSB3b3JrTWVtLAorCQkJIHNvcnRv cHQgJiBUVVBMRVNPUlRfUkFORE9NQUNDRVNTID8gJ3QnIDogJ2YnKTsKKyNlbmRpZgorCisJ YmFzZS0+bktleXMgPSAxOwkJCS8qIE9ubHkgb25lIHNvcnQgY29sdW1uLCB0aGUgYmxvY2sg bnVtYmVyICovCisKKwliYXNlLT5yZW1vdmVhYmJyZXYgPSByZW1vdmVhYmJyZXZfaW5kZXhf YnJpbjsKKwliYXNlLT5jb21wYXJldHVwID0gY29tcGFyZXR1cF9pbmRleF9icmluOworCWJh c2UtPndyaXRldHVwID0gd3JpdGV0dXBfaW5kZXhfYnJpbjsKKwliYXNlLT5yZWFkdHVwID0g cmVhZHR1cF9pbmRleF9icmluOworCWJhc2UtPmhhdmVEYXR1bTEgPSB0cnVlOworCWJhc2Ut PmFyZyA9IGFyZzsKKworCWFyZy0+aW5kZXguaGVhcFJlbCA9IGhlYXBSZWw7CisJYXJnLT5p bmRleC5pbmRleFJlbCA9IGluZGV4UmVsOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworCisJcmV0dXJuIHN0YXRlOworfQorCiBUdXBsZXNvcnRzdGF0ZSAqCiB0 dXBsZXNvcnRfYmVnaW5fZGF0dW0oT2lkIGRhdHVtVHlwZSwgT2lkIHNvcnRPcGVyYXRvciwg T2lkIHNvcnRDb2xsYXRpb24sCiAJCQkJCSAgYm9vbCBudWxsc0ZpcnN0RmxhZywgaW50IHdv cmtNZW0sCkBAIC03MDcsNiArNzgyLDM1IEBAIHR1cGxlc29ydF9wdXRpbmRleHR1cGxldmFs dWVzKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgUmVsYXRpb24gcmVsLAogCQkJCQkJCSAgIXN0 dXAuaXNudWxsMSk7CiB9CiAKKy8qCisgKiBDb2xsZWN0IG9uZSBCUklOIHR1cGxlIHdoaWxl IGNvbGxlY3RpbmcgaW5wdXQgZGF0YSBmb3Igc29ydC4KKyAqLwordm9pZAordHVwbGVzb3J0 X3B1dGJyaW50dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIEJyaW5UdXBsZSAqdHVwbGUs IFNpemUgc2l6ZSkKK3sKKwlTb3J0VHVwbGUJc3R1cDsKKwlCcmluU29ydFR1cGxlICpic3R1 cDsKKwlUdXBsZXNvcnRQdWJsaWMgKmJhc2UgPSBUdXBsZXNvcnRzdGF0ZUdldFB1YmxpYyhz dGF0ZSk7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKGJhc2UtPnR1cGxlY29udGV4dCk7CisKKwkvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhl IHdob2xlIEJSSU4gc29ydCB0dXBsZSAqLworCWJzdHVwID0gcGFsbG9jKEJSSU5TT1JUVFVQ TEVfU0laRShzaXplKSk7CisKKwlic3R1cC0+dHVwbGVuID0gc2l6ZTsKKwltZW1jcHkoJmJz dHVwLT50dXBsZSwgdHVwbGUsIHNpemUpOworCisJc3R1cC50dXBsZSA9IGJzdHVwOworCXN0 dXAuZGF0dW0xID0gdHVwbGUtPmJ0X2Jsa25vOworCXN0dXAuaXNudWxsMSA9IGZhbHNlOwor CisJdHVwbGVzb3J0X3B1dHR1cGxlX2NvbW1vbihzdGF0ZSwgJnN0dXAsCisJCQkJCQkJICBi YXNlLT5zb3J0S2V5cyAmJgorCQkJCQkJCSAgYmFzZS0+c29ydEtleXMtPmFiYnJldl9jb252 ZXJ0ZXIgJiYKKwkJCQkJCQkgICFzdHVwLmlzbnVsbDEpOworCisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOworfQorCiAvKgogICogQWNjZXB0IG9uZSBEYXR1bSB3aGls ZSBjb2xsZWN0aW5nIGlucHV0IGRhdGEgZm9yIHNvcnQuCiAgKgpAQCAtODUwLDYgKzk1NCwz NSBAQCB0dXBsZXNvcnRfZ2V0aW5kZXh0dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIGJv b2wgZm9yd2FyZCkKIAlyZXR1cm4gKEluZGV4VHVwbGUpIHN0dXAudHVwbGU7CiB9CiAKKy8q CisgKiBGZXRjaCB0aGUgbmV4dCBCUklOIHR1cGxlIGluIGVpdGhlciBmb3J3YXJkIG9yIGJh Y2sgZGlyZWN0aW9uLgorICogUmV0dXJucyBOVUxMIGlmIG5vIG1vcmUgdHVwbGVzLiAgUmV0 dXJuZWQgdHVwbGUgYmVsb25ncyB0byB0dXBsZXNvcnQgbWVtb3J5CisgKiBjb250ZXh0LCBh bmQgbXVzdCBub3QgYmUgZnJlZWQgYnkgY2FsbGVyLiAgQ2FsbGVyIG1heSBub3QgcmVseSBv biB0dXBsZQorICogcmVtYWluaW5nIHZhbGlkIGFmdGVyIGFueSBmdXJ0aGVyIG1hbmlwdWxh dGlvbiBvZiB0dXBsZXNvcnQuCisgKi8KK0JyaW5UdXBsZSAqCit0dXBsZXNvcnRfZ2V0YnJp bnR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU2l6ZSAqbGVuLCBib29sIGZvcndhcmQp Cit7CisJVHVwbGVzb3J0UHVibGljICpiYXNlID0gVHVwbGVzb3J0c3RhdGVHZXRQdWJsaWMo c3RhdGUpOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhiYXNlLT5zb3J0Y29udGV4dCk7CisJU29ydFR1cGxlCXN0dXA7CisJQnJpblNvcnRU dXBsZSAqYnR1cDsKKworCWlmICghdHVwbGVzb3J0X2dldHR1cGxlX2NvbW1vbihzdGF0ZSwg Zm9yd2FyZCwgJnN0dXApKQorCQlzdHVwLnR1cGxlID0gTlVMTDsKKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCWlmICghc3R1cC50dXBsZSkKKwkJcmV0dXJu IE5VTEw7CisKKwlidHVwID0gKEJyaW5Tb3J0VHVwbGUgKikgc3R1cC50dXBsZTsKKworCSps ZW4gPSBidHVwLT50dXBsZW47CisKKwlyZXR1cm4gJmJ0dXAtPnR1cGxlOworfQorCiAvKgog ICogRmV0Y2ggdGhlIG5leHQgRGF0dW0gaW4gZWl0aGVyIGZvcndhcmQgb3IgYmFjayBkaXJl Y3Rpb24uCiAgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIG1vcmUgZGF0dW1zLgpAQCAtMTU2NCw2 ICsxNjk3LDgwIEBAIHJlYWR0dXBfaW5kZXgoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0 VHVwbGUgKnN0dXAsCiAJCQkJCQkJCSAmc3R1cC0+aXNudWxsMSk7CiB9CiAKKy8qCisgKiBS b3V0aW5lcyBzcGVjaWFsaXplZCBmb3IgQnJpblR1cGxlIGNhc2UKKyAqLworCitzdGF0aWMg dm9pZAorcmVtb3ZlYWJicmV2X2luZGV4X2JyaW4oVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBT b3J0VHVwbGUgKnN0dXBzLCBpbnQgY291bnQpCit7CisJaW50CQkJaTsKKworCWZvciAoaSA9 IDA7IGkgPCBjb3VudDsgaSsrKQorCXsKKwkJQnJpblNvcnRUdXBsZSAqdHVwbGU7CisKKwkJ dHVwbGUgPSBzdHVwc1tpXS50dXBsZTsKKwkJc3R1cHNbaV0uZGF0dW0xID0gdHVwbGUtPnR1 cGxlLmJ0X2Jsa25vOworCX0KK30KKworc3RhdGljIGludAorY29tcGFyZXR1cF9pbmRleF9i cmluKGNvbnN0IFNvcnRUdXBsZSAqYSwgY29uc3QgU29ydFR1cGxlICpiLAorCQkJCQkgIFR1 cGxlc29ydHN0YXRlICpzdGF0ZSkKK3sKKwlBc3NlcnQoVHVwbGVzb3J0c3RhdGVHZXRQdWJs aWMoc3RhdGUpLT5oYXZlRGF0dW0xKTsKKworCWlmIChEYXR1bUdldFVJbnQzMihhLT5kYXR1 bTEpID4gRGF0dW1HZXRVSW50MzIoYi0+ZGF0dW0xKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAo RGF0dW1HZXRVSW50MzIoYS0+ZGF0dW0xKSA8IERhdHVtR2V0VUludDMyKGItPmRhdHVtMSkp CisJCXJldHVybiAtMTsKKworCS8qIHNpbGVuY2UgY29tcGlsZXJzICovCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB2b2lkCit3cml0ZXR1cF9pbmRleF9icmluKFR1cGxlc29ydHN0YXRl ICpzdGF0ZSwgTG9naWNhbFRhcGUgKnRhcGUsIFNvcnRUdXBsZSAqc3R1cCkKK3sKKwlUdXBs ZXNvcnRQdWJsaWMgKmJhc2UgPSBUdXBsZXNvcnRzdGF0ZUdldFB1YmxpYyhzdGF0ZSk7CisJ QnJpblNvcnRUdXBsZSAqdHVwbGUgPSAoQnJpblNvcnRUdXBsZSAqKSBzdHVwLT50dXBsZTsK Kwl1bnNpZ25lZCBpbnQgdHVwbGVuID0gdHVwbGUtPnR1cGxlbjsKKworCXR1cGxlbiA9IHR1 cGxlbiArIHNpemVvZih0dXBsZW4pOworCUxvZ2ljYWxUYXBlV3JpdGUodGFwZSwgJnR1cGxl biwgc2l6ZW9mKHR1cGxlbikpOworCUxvZ2ljYWxUYXBlV3JpdGUodGFwZSwgJnR1cGxlLT50 dXBsZSwgdHVwbGUtPnR1cGxlbik7CisJaWYgKGJhc2UtPnNvcnRvcHQgJiBUVVBMRVNPUlRf UkFORE9NQUNDRVNTKSAvKiBuZWVkIHRyYWlsaW5nIGxlbmd0aCB3b3JkPyAqLworCQlMb2dp Y2FsVGFwZVdyaXRlKHRhcGUsICZ0dXBsZW4sIHNpemVvZih0dXBsZW4pKTsKK30KKworc3Rh dGljIHZvaWQKK3JlYWR0dXBfaW5kZXhfYnJpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNv cnRUdXBsZSAqc3R1cCwKKwkJCQkgICBMb2dpY2FsVGFwZSAqdGFwZSwgdW5zaWduZWQgaW50 IGxlbikKK3sKKwlCcmluU29ydFR1cGxlICp0dXBsZTsKKwlUdXBsZXNvcnRQdWJsaWMgKmJh c2UgPSBUdXBsZXNvcnRzdGF0ZUdldFB1YmxpYyhzdGF0ZSk7CisJdW5zaWduZWQgaW50IHR1 cGxlbiA9IGxlbiAtIHNpemVvZih1bnNpZ25lZCBpbnQpOworCisJLyoKKwkgKiBBbGxvY2F0 ZSBzcGFjZSBmb3IgdGhlIEJSSU4gc29ydCB0dXBsZSwgd2hpY2ggaXMgQnJpblR1cGxlIHdp dGggYW4KKwkgKiBleHRyYSBsZW5ndGggZmllbGQuCisJICovCisJdHVwbGUgPSAoQnJpblNv cnRUdXBsZSAqKSB0dXBsZXNvcnRfcmVhZHR1cF9hbGxvYyhzdGF0ZSwKKwkJCQkJCQkJCQkJ CQkgIEJSSU5TT1JUVFVQTEVfU0laRSh0dXBsZW4pKTsKKworCXR1cGxlLT50dXBsZW4gPSB0 dXBsZW47CisKKwlMb2dpY2FsVGFwZVJlYWRFeGFjdCh0YXBlLCAmdHVwbGUtPnR1cGxlLCB0 dXBsZW4pOworCWlmIChiYXNlLT5zb3J0b3B0ICYgVFVQTEVTT1JUX1JBTkRPTUFDQ0VTUykg LyogbmVlZCB0cmFpbGluZyBsZW5ndGggd29yZD8gKi8KKwkJTG9naWNhbFRhcGVSZWFkRXhh Y3QodGFwZSwgJnR1cGxlbiwgc2l6ZW9mKHR1cGxlbikpOworCXN0dXAtPnR1cGxlID0gKHZv aWQgKikgdHVwbGU7CisKKwkvKiBzZXQgdXAgZmlyc3QtY29sdW1uIGtleSB2YWx1ZSwgd2hp Y2ggaXMgYmxvY2sgbnVtYmVyICovCisJc3R1cC0+ZGF0dW0xID0gdHVwbGUtPnR1cGxlLmJ0 X2Jsa25vOworfQorCiAvKgogICogUm91dGluZXMgc3BlY2lhbGl6ZWQgZm9yIERhdHVtVHVw bGUgY2FzZQogICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCmluZGV4IDI0NDQ1OTU4N2ZjLi5kZjg1YWUz YWFjZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAgLTI0Myw2ICsyNDMsOCBAQCB0eXBlZGVmIHN0 cnVjdCBJbmRleEFtUm91dGluZQogCWJvb2wJCWFtcHJlZGxvY2tzOwogCS8qIGRvZXMgQU0g c3VwcG9ydCBwYXJhbGxlbCBzY2FuPyAqLwogCWJvb2wJCWFtY2FucGFyYWxsZWw7CisJLyog ZG9lcyBBTSBzdXBwb3J0IHBhcmFsbGVsIGJ1aWxkPyAqLworCWJvb2wJCWFtY2FuYnVpbGRw YXJhbGxlbDsKIAkvKiBkb2VzIEFNIHN1cHBvcnQgY29sdW1ucyBpbmNsdWRlZCB3aXRoIGNs YXVzZSBJTkNMVURFPyAqLwogCWJvb2wJCWFtY2FuaW5jbHVkZTsKIAkvKiBkb2VzIEFNIHVz ZSBtYWludGVuYW5jZV93b3JrX21lbT8gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9icmluLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCmluZGV4IGVkNjZmMWIz ZDUxLi4zNDUxZWNiMjExZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4u aAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCkBAIC0xMSw2ICsxMSw3IEBACiAj ZGVmaW5lIEJSSU5fSAogCiAjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9zaG1fdG9jLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKIAog CkBAIC01Miw0ICs1Myw2IEBAIHR5cGVkZWYgc3RydWN0IEJyaW5TdGF0c0RhdGEKIAogZXh0 ZXJuIHZvaWQgYnJpbkdldFN0YXRzKFJlbGF0aW9uIGluZGV4LCBCcmluU3RhdHNEYXRhICpz dGF0cyk7CiAKK2V4dGVybiB2b2lkIF9icmluX3BhcmFsbGVsX2J1aWxkX21haW4oZHNtX3Nl Z21lbnQgKnNlZywgc2htX3RvYyAqdG9jKTsKKwogI2VuZGlmCQkJCQkJCS8qIEJSSU5fSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvdHVwbGVzb3J0LmggYi9zcmMvaW5j bHVkZS91dGlscy90dXBsZXNvcnQuaAppbmRleCA5ZWQyZGU3NmNkNi4uMzU3ZWIzNTMxMWQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oCisrKyBiL3NyYy9p bmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIFRV UExFU09SVF9ICiAjZGVmaW5lIFRVUExFU09SVF9ICiAKKyNpbmNsdWRlICJhY2Nlc3MvYnJp bl90dXBsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3IvdHVwdGFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2RzbS5oIgpAQCAtMjgyLDYgKzI4 Myw5IEBAIHR5cGVkZWYgc3RydWN0CiAgKiBUaGUgImluZGV4X2hhc2giIEFQSSBpcyBzaW1p bGFyIHRvIGluZGV4X2J0cmVlLCBidXQgdGhlIHR1cGxlcyBhcmUKICAqIGFjdHVhbGx5IHNv cnRlZCBieSB0aGVpciBoYXNoIGNvZGVzIG5vdCB0aGUgcmF3IGRhdGEuCiAgKgorICogVGhl ICJpbmRleF9icmluIiBBUEkgaXMgc2ltaWxhciB0byBpbmRleF9idHJlZSwgYnV0IHRoZSB0 dXBsZXMgYXJlCisgKiBCcmluVHVwbGUgYW5kIGFyZSBzb3J0ZWQgYnkgdGhlaXIgYmxvY2sg bnVtYmVyIG5vdCB0aGUgcmF3IGRhdGEuCisgKgogICogUGFyYWxsZWwgc29ydCBjYWxsZXJz IGFyZSByZXF1aXJlZCB0byBjb29yZGluYXRlIG11bHRpcGxlIHR1cGxlc29ydCBzdGF0ZXMK ICAqIGluIGEgbGVhZGVyIHByb2Nlc3MgYW5kIG9uZSBvciBtb3JlIHdvcmtlciBwcm9jZXNz ZXMuICBUaGUgbGVhZGVyIHByb2Nlc3MKICAqIG11c3QgbGF1bmNoIHdvcmtlcnMsIGFuZCBo YXZlIGVhY2ggcGVyZm9ybSBhbiBpbmRlcGVuZGVudCAicGFydGlhbCIKQEAgLTQyNiw2ICs0 MzAsMTAgQEAgZXh0ZXJuIFR1cGxlc29ydHN0YXRlICp0dXBsZXNvcnRfYmVnaW5faW5kZXhf Z2lzdChSZWxhdGlvbiBoZWFwUmVsLAogCQkJCQkJCQkJCQkJICBSZWxhdGlvbiBpbmRleFJl bCwKIAkJCQkJCQkJCQkJCSAgaW50IHdvcmtNZW0sIFNvcnRDb29yZGluYXRlIGNvb3JkaW5h dGUsCiAJCQkJCQkJCQkJCQkgIGludCBzb3J0b3B0KTsKK2V4dGVybiBUdXBsZXNvcnRzdGF0 ZSAqdHVwbGVzb3J0X2JlZ2luX2luZGV4X2JyaW4oUmVsYXRpb24gaGVhcFJlbCwKKwkJCQkJ CQkJCQkJCSAgUmVsYXRpb24gaW5kZXhSZWwsCisJCQkJCQkJCQkJCQkgIGludCB3b3JrTWVt LCBTb3J0Q29vcmRpbmF0ZSBjb29yZGluYXRlLAorCQkJCQkJCQkJCQkJICBpbnQgc29ydG9w dCk7CiBleHRlcm4gVHVwbGVzb3J0c3RhdGUgKnR1cGxlc29ydF9iZWdpbl9kYXR1bShPaWQg ZGF0dW1UeXBlLAogCQkJCQkJCQkJCQkgT2lkIHNvcnRPcGVyYXRvciwgT2lkIHNvcnRDb2xs YXRpb24sCiAJCQkJCQkJCQkJCSBib29sIG51bGxzRmlyc3RGbGFnLApAQCAtNDM4LDYgKzQ0 Niw3IEBAIGV4dGVybiB2b2lkIHR1cGxlc29ydF9wdXRoZWFwdHVwbGUoVHVwbGVzb3J0c3Rh dGUgKnN0YXRlLCBIZWFwVHVwbGUgdHVwKTsKIGV4dGVybiB2b2lkIHR1cGxlc29ydF9wdXRp bmRleHR1cGxldmFsdWVzKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwKIAkJCQkJCQkJCQkgIFJl bGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgc2VsZiwKIAkJCQkJCQkJCQkgIGNvbnN0IERhdHVt ICp2YWx1ZXMsIGNvbnN0IGJvb2wgKmlzbnVsbCk7CitleHRlcm4gdm9pZCB0dXBsZXNvcnRf cHV0YnJpbnR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgQnJpblR1cGxlICp0dXAsIFNp emUgbGVuKTsKIGV4dGVybiB2b2lkIHR1cGxlc29ydF9wdXRkYXR1bShUdXBsZXNvcnRzdGF0 ZSAqc3RhdGUsIERhdHVtIHZhbCwKIAkJCQkJCQkgICBib29sIGlzTnVsbCk7CiAKQEAgLTQ0 NSw2ICs0NTQsOCBAQCBleHRlcm4gYm9vbCB0dXBsZXNvcnRfZ2V0dHVwbGVzbG90KFR1cGxl c29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJCQkJCQkgICBib29sIGNvcHks IFR1cGxlVGFibGVTbG90ICpzbG90LCBEYXR1bSAqYWJicmV2KTsKIGV4dGVybiBIZWFwVHVw bGUgdHVwbGVzb3J0X2dldGhlYXB0dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIGJvb2wg Zm9yd2FyZCk7CiBleHRlcm4gSW5kZXhUdXBsZSB0dXBsZXNvcnRfZ2V0aW5kZXh0dXBsZShU dXBsZXNvcnRzdGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCk7CitleHRlcm4gQnJpblR1cGxl ICp0dXBsZXNvcnRfZ2V0YnJpbnR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU2l6ZSAq bGVuLAorCQkJCQkJCQkJCSBib29sIGZvcndhcmQpOwogZXh0ZXJuIGJvb2wgdHVwbGVzb3J0 X2dldGRhdHVtKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLCBib29sIGNv cHksCiAJCQkJCQkJICAgRGF0dW0gKnZhbCwgYm9vbCAqaXNOdWxsLCBEYXR1bSAqYWJicmV2 KTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1t eV9pbmRleF9hbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9p bmRleF9hbS5jCmluZGV4IGNiZGFlN2FiN2E1Li5lYWEwYzQ4M2I3ZSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAt Mjk0LDYgKzI5NCw3IEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGlu ZS0+YW1jbHVzdGVyYWJsZSA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1wcmVkbG9ja3MgPSBm YWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRpbmUt PmFtY2FuYnVpbGRwYXJhbGxlbCA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5pbmNsdWRl ID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNl OwogCWFtcm91dGluZS0+YW1zdW1tYXJpemluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCBkNjU5YWRiZmQ2Yy4uOGQ5NGVmMTY2MjMgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0yOTcsMTMgKzI5NywxNyBAQCBCcENoYXIKIEJyaW5C dWlsZFN0YXRlCiBCcmluRGVzYwogQnJpbkluc2VydFN0YXRlCitCcmluTGVhZGVyCiBCcmlu TWVtVHVwbGUKIEJyaW5NZXRhUGFnZURhdGEKIEJyaW5PcGFxdWUKIEJyaW5PcGNJbmZvCiBC cmluT3B0aW9ucwogQnJpblJldm1hcAorQnJpblNoYXJlZAorQnJpblNvcnRUdXBsZQogQnJp blNwZWNpYWxTcGFjZQorQnJpblNwb29sCiBCcmluU3RhdHNEYXRhCiBCcmluVHVwbGUKIEJy aW5WYWx1ZXMKQEAgLTI4ODIsNiArMjg4Niw3IEBAIFR1cGxlVGFibGVTbG90T3BzCiBUdXBs ZXNvcnRDbHVzdGVyQXJnCiBUdXBsZXNvcnREYXR1bUFyZwogVHVwbGVzb3J0SW5kZXhBcmcK K1R1cGxlc29ydEluZGV4QnJpbkFyZwogVHVwbGVzb3J0SW5kZXhCVHJlZUFyZwogVHVwbGVz b3J0SW5kZXhIYXNoQXJnCiBUdXBsZXNvcnRJbnN0cnVtZW50YXRpb24KLS0gCjIuNDEuMAoK --------------K0fKQakmp7i0eOvKpkcNCMqh Content-Type: text/x-patch; charset=UTF-8; name="v8-0003-BRIN-Exit-parallel-mode-when-not-starting-paralle.patch" Content-Disposition: attachment; filename*0="v8-0003-BRIN-Exit-parallel-mode-when-not-starting-paralle.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyMjQyYzY3MTljODE1NTJjZjdiY2VhZWRjZGJkZTc1OTYwMGQwOTczIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGlhcyB2YW4gZGUgTWVlbnQgPGJvZWtld3Vy bStwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMzAgTm92IDIwMjMgMTg6MTk6NDAg KzAxMDAKU3ViamVjdDogW1BBVENIIHY4IDMvNl0gQlJJTjogRXhpdCBwYXJhbGxlbCBtb2Rl IHdoZW4gbm90IHN0YXJ0aW5nIHBhcmFsbGVsCiBjcmVhdGUgaW5kZXgKCi0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIHwgOCArKysrKysrLQogMSBmaWxlIGNoYW5nZWQs IDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4u YwppbmRleCBlZGYyZGFhZDBjMy4uYmM1MTk4MjVmMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9i cmluLmMKQEAgLTI1MDYsOCArMjUwNiwxMiBAQCBfYnJpbl9lbmRfcGFyYWxsZWwoQnJpbkxl YWRlciAqYnJpbmxlYWRlciwgQnJpbkJ1aWxkU3RhdGUgKnN0YXRlKQogCS8qIFNodXRkb3du IHdvcmtlciBwcm9jZXNzZXMgKi8KIAlXYWl0Rm9yUGFyYWxsZWxXb3JrZXJzVG9GaW5pc2go YnJpbmxlYWRlci0+cGN4dCk7CiAKKwkvKgorCSAqIElmIHdlIGRpZG4ndCBhY3R1YWxseSBs YXVuY2ggd29ya2Vycywgd2Ugc3RpbGwgaGF2ZSB0byBtYWtlIHN1cmUgdG8gZXhpdAorCSAq IHBhcmFsbGVsIG1vZGUuCisJICovCiAJaWYgKCFzdGF0ZSkKLQkJcmV0dXJuOworCQlnb3Rv IGNsZWFudXA7CiAKIAkvKiBjb3B5IHRoZSBkYXRhIGludG8gbGVhZGVyIHN0YXRlICh3ZSBo YXZlIHRvIHdhaXQgZm9yIHRoZSB3b3JrZXJzICkgKi8KIAlzdGF0ZS0+YnNfcmVsdHVwbGVz ID0gYnJpbnNoYXJlZC0+cmVsdHVwbGVzOwpAQCAtMjY5MSw2ICsyNjk1LDggQEAgX2JyaW5f ZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJyaW5CdWlsZFN0YXRlICpz dGF0ZSkKIAlmb3IgKGkgPSAwOyBpIDwgYnJpbmxlYWRlci0+cGN4dC0+bndvcmtlcnNfbGF1 bmNoZWQ7IGkrKykKIAkJSW5zdHJBY2N1bVBhcmFsbGVsUXVlcnkoJmJyaW5sZWFkZXItPmJ1 ZmZlcnVzYWdlW2ldLCAmYnJpbmxlYWRlci0+d2FsdXNhZ2VbaV0pOwogCitjbGVhbnVwOgor CiAJLyogRnJlZSBsYXN0IHJlZmVyZW5jZSB0byBNVkNDIHNuYXBzaG90LCBpZiBvbmUgd2Fz IHVzZWQgKi8KIAlpZiAoSXNNVkNDU25hcHNob3QoYnJpbmxlYWRlci0+c25hcHNob3QpKQog CQlVbnJlZ2lzdGVyU25hcHNob3QoYnJpbmxlYWRlci0+c25hcHNob3QpOwotLSAKMi40MS4w Cgo= --------------K0fKQakmp7i0eOvKpkcNCMqh Content-Type: text/x-patch; charset=UTF-8; name="v8-0004-BRIN-Backfill-empty-ranges.patch" Content-Disposition: attachment; filename="v8-0004-BRIN-Backfill-empty-ranges.patch" Content-Transfer-Encoding: base64 RnJvbSAyNzY3NWYxMGIzMjhmYzZkODAzMzFkZmE5OWExYjhlMzMwOWE5MGZmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGlhcyB2YW4gZGUgTWVlbnQgPGJvZWtld3Vy bStwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMzAgTm92IDIwMjMgMTg6MTI6MTYg KzAxMDAKU3ViamVjdDogW1BBVENIIHY4IDQvNl0gQlJJTjogQmFja2ZpbGwgZW1wdHkgcmFu Z2VzCgpJZiB3ZSBkb24ndCwgdGhlbiBhbiBpbmRleCB3aXRoIFdIRVJFIChwcmFjdGljYWxs eV9ub25udWxsIElTIE5VTEwpCndvdWxkIGJlIGEgZnVsbCB0YWJsZSBzY2FuIGR1ZSB0byBt aXNzaW5nIGVudHJpZXMgaW4gdGhlIHJhbmdlcyB0YWJsZS4KClRoZSBpc3N1ZSBpcyBmaXhl ZCBmb3IgYm90aCBub3JtYWwgYW5kIHBhcmFsbGVsIGluZGV4IGNyZWF0aW9uLgotLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyB8IDk2ICsrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1OCBpbnNlcnRpb25zKCspLCAzOCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggYmM1MTk4MjVmMmUu LjAwYjQzN2Q5YzFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0yMjEsNiArMjIx LDggQEAgc3RhdGljIHZvaWQgYnJpbl92YWN1dW1fc2NhbihSZWxhdGlvbiBpZHhyZWwsIEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KTsKIHN0YXRpYyBib29sIGFkZF92YWx1ZXNf dG9fcmFuZ2UoUmVsYXRpb24gaWR4UmVsLCBCcmluRGVzYyAqYmRlc2MsCiAJCQkJCQkJCUJy aW5NZW1UdXBsZSAqZHR1cCwgY29uc3QgRGF0dW0gKnZhbHVlcywgY29uc3QgYm9vbCAqbnVs bHMpOwogc3RhdGljIGJvb2wgY2hlY2tfbnVsbF9rZXlzKEJyaW5WYWx1ZXMgKmJ2YWwsIFNj YW5LZXkgKm51bGxrZXlzLCBpbnQgbm51bGxrZXlzKTsKK3N0YXRpYyBCcmluVHVwbGUgKmJy aW5faW5pdF9lbXB0eV90dXBsZShCcmluQnVpbGRTdGF0ZSAqc3RhdGUsIEJsb2NrTnVtYmVy IGJsa25vLAorCQkJCQkJCQkJCUJyaW5UdXBsZSAqZW1wdHlUdXBsZSwgU2l6ZSAqZW1wdHlT aXplKTsKIAogLyogcGFyYWxsZWwgaW5kZXggYnVpbGRzICovCiBzdGF0aWMgdm9pZCBfYnJp bl9iZWdpbl9wYXJhbGxlbChCcmluQnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSwgUmVsYXRpb24g aGVhcCwgUmVsYXRpb24gaW5kZXgsCkBAIC0yNjE5LDE3ICsyNjIxLDcgQEAgX2JyaW5fZW5k X3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJyaW5CdWlsZFN0YXRlICpzdGF0 ZSkKIAkJCXByZXZibGtubyArPSBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZTsKIAogCQkJLyog RGlkIHdlIGFscmVhZHkgYnVpbGQgdGhlIGVtcHR5IHJhbmdlPyBJZiBub3QsIGRvIGl0IG5v dy4gKi8KLQkJCWlmIChlbXB0eVR1cGxlID09IE5VTEwpCi0JCQl7Ci0JCQkJQnJpbk1lbVR1 cGxlICpkdHVwbGUgPSBicmluX25ld19tZW10dXBsZShzdGF0ZS0+YnNfYmRlc2MpOwotCi0J CQkJZW1wdHlUdXBsZSA9IGJyaW5fZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIHByZXZi bGtubywgZHR1cGxlLCAmZW1wdHlTaXplKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkv KiB3ZSBhbHJlYWR5IGhhdmUgYW0gImVtcHR5IHJhbmdlIiB0dXBsZSwganVzdCBzZXQgdGhl IGJsb2NrICovCi0JCQkJZW1wdHlUdXBsZS0+YnRfYmxrbm8gPSBwcmV2Ymxrbm87Ci0JCQl9 CisJCQllbXB0eVR1cGxlID0gYnJpbl9pbml0X2VtcHR5X3R1cGxlKHN0YXRlLCBwcmV2Ymxr bm8sIGVtcHR5VHVwbGUsICZlbXB0eVNpemUpOwogCiAJCQlicmluX2RvaW5zZXJ0KHN0YXRl LT5ic19pcmVsLCBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSwgc3RhdGUtPmJzX3JtQWNjZXNz LAogCQkJCQkJICAmc3RhdGUtPmJzX2N1cnJlbnRJbnNlcnRCdWYsCkBAIC0yNjQxLDMyICsy NjMzLDcgQEAgX2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJy aW5CdWlsZFN0YXRlICpzdGF0ZSkKIAogCXR1cGxlc29ydF9lbmQoc3Bvb2wtPnNvcnRzdGF0 ZSk7CiAKLQkvKiBGaWxsIGVtcHR5IHJhbmdlcyBhdCB0aGUgZW5kLCBmb3IgYWxsIHJhbmdl cyBtaXNzaW5nIGluIHRoZSB0dXBsZXNvcnQuICovCi0JcHJldmJsa25vID0gKHByZXZibGtu byA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpID8gMCA6IHByZXZibGtubzsKLQl3aGlsZSAocHJl dmJsa25vICsgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UgPCBtZW10dXBsZS0+YnRfYmxrbm8p Ci0JewotCQkvKiB0aGUgbWlzc2luZyByYW5nZSAqLwotCQlwcmV2Ymxrbm8gKz0gc3RhdGUt PmJzX3BhZ2VzUGVyUmFuZ2U7Ci0KLQkJLyogRGlkIHdlIGFscmVhZHkgYnVpbGQgdGhlIGVt cHR5IHJhbmdlPyBJZiBub3QsIGRvIGl0IG5vdy4gKi8KLQkJaWYgKGVtcHR5VHVwbGUgPT0g TlVMTCkKLQkJewotCQkJQnJpbk1lbVR1cGxlICpkdHVwbGUgPSBicmluX25ld19tZW10dXBs ZShzdGF0ZS0+YnNfYmRlc2MpOwotCi0JCQllbXB0eVR1cGxlID0gYnJpbl9mb3JtX3R1cGxl KHN0YXRlLT5ic19iZGVzYywgcHJldmJsa25vLCBkdHVwbGUsICZlbXB0eVNpemUpOwotCQl9 Ci0JCWVsc2UKLQkJewotCQkJLyogd2UgYWxyZWFkeSBoYXZlIGFtICJlbXB0eSByYW5nZSIg dHVwbGUsIGp1c3Qgc2V0IHRoZSBibG9jayAqLwotCQkJZW1wdHlUdXBsZS0+YnRfYmxrbm8g PSBwcmV2Ymxrbm87Ci0JCX0KLQotCQlicmluX2RvaW5zZXJ0KHN0YXRlLT5ic19pcmVsLCBz dGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSwgc3RhdGUtPmJzX3JtQWNjZXNzLAotCQkJCQkgICZz dGF0ZS0+YnNfY3VycmVudEluc2VydEJ1ZiwKLQkJCQkJICBlbXB0eVR1cGxlLT5idF9ibGtu bywgZW1wdHlUdXBsZSwgZW1wdHlTaXplKTsKLQl9Ci0KLQkvKiBGaWxsIHRoZSBCUklOIHR1 cGxlIGZvciB0aGUgbGFzdCBwYWdlIHJhbmdlLiAqLworCS8qIEZpbGwgdGhlIEJSSU4gdHVw bGUgZm9yIHRoZSBsYXN0IHBhZ2UgcmFuZ2Ugd2l0aCBkYXRhLiAqLwogCWlmIChwcmV2Ymxr bm8gIT0gSW52YWxpZEJsb2NrTnVtYmVyKQogCXsKIAkJQnJpblR1cGxlICAqdG1wOwpAQCAt MjY4Miw3ICsyNjQ5LDMyIEBAIF9icmluX2VuZF9wYXJhbGxlbChCcmluTGVhZGVyICpicmlu bGVhZGVyLCBCcmluQnVpbGRTdGF0ZSAqc3RhdGUpCiAJfQogCiAJLyoKLQkgKiBTd2l0Y2gg YmFjayB0byB0aGUgb3JpZ2luYW0gbWVtb3J5IGNvbnRleHQsIGFuZCBkZXN0cm95IHRoZSBv bmUgd2UKKwkgKiBGaWxsIGVtcHR5IHJhbmdlcyBhdCB0aGUgZW5kLCBmb3IgYWxsIHJhbmdl cyBtaXNzaW5nIGluIHRoZSB0dXBsZXNvcnQuCisJICoKKwkgKiBTdGFydGluZyBmcm9tIGhl cmUsIHByZXZibGtubyBpcyB0aGUgdG8tYmUtaW5zZXJ0ZWQgcmFuZ2UncyBzdGFydCBibG9j aworCSAqIG51bWJlci4gTm90ZSB0aGF0IHdlIGRvbid0IGZpbGwgaW4gdGhlIHJlbGF0aW9u J3MgbGFzdCBwYWdlIHJhbmdlLgorCSAqLworCWlmIChwcmV2Ymxrbm8gPT0gSW52YWxpZEJs b2NrTnVtYmVyKQorCQlwcmV2Ymxrbm8gPSAwOworCWVsc2UKKwkJcHJldmJsa25vICs9IHN0 YXRlLT5ic19wYWdlc1BlclJhbmdlOworCisJd2hpbGUgKHByZXZibGtubyArIHN0YXRlLT5i c19wYWdlc1BlclJhbmdlIDwgc3RhdGUtPmJzX3RhYmxlUGFnZXMpCisJeworCQkvKiBEaWQg d2UgYWxyZWFkeSBidWlsZCB0aGUgZW1wdHkgcmFuZ2U/IElmIG5vdCwgZG8gaXQgbm93LiAq LworCQllbXB0eVR1cGxlID0gYnJpbl9pbml0X2VtcHR5X3R1cGxlKHN0YXRlLCBwcmV2Ymxr bm8sIGVtcHR5VHVwbGUsICZlbXB0eVNpemUpOworCisJCS8qIEluc2VydCB0aGUgbWlzc2lu ZyByYW5nZSAqLworCQlicmluX2RvaW5zZXJ0KHN0YXRlLT5ic19pcmVsLCBzdGF0ZS0+YnNf cGFnZXNQZXJSYW5nZSwgc3RhdGUtPmJzX3JtQWNjZXNzLAorCQkJCQkgICZzdGF0ZS0+YnNf Y3VycmVudEluc2VydEJ1ZiwKKwkJCQkJICBlbXB0eVR1cGxlLT5idF9ibGtubywgZW1wdHlU dXBsZSwgZW1wdHlTaXplKTsKKworCQkvKiAuLi4gYW5kIHVwZGF0ZSB0byB0aGUgbmV4dCBy YW5nZSdzIGJsb2NrIG51bWJlciAqLworCQlwcmV2Ymxrbm8gKz0gc3RhdGUtPmJzX3BhZ2Vz UGVyUmFuZ2U7CisJfQorCisJLyoKKwkgKiBTd2l0Y2ggYmFjayB0byB0aGUgb3JpZ2luYWwg bWVtb3J5IGNvbnRleHQsIGFuZCBkZXN0cm95IHRoZSBvbmUgd2UKIAkgKiBjcmVhdGVkIHRv IGlzb2xhdGUgdGhlIHVuaW9uX3R1cGxlIGNhbGxzLgogCSAqLwogCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRDeHQpOwpAQCAtMjg5NywzICsyODg5LDMxIEBAIF9icmluX3BhcmFsbGVs X2J1aWxkX21haW4oZHNtX3NlZ21lbnQgKnNlZywgc2htX3RvYyAqdG9jKQogCWluZGV4X2Ns b3NlKGluZGV4UmVsLCBpbmRleExvY2ttb2RlKTsKIAl0YWJsZV9jbG9zZShoZWFwUmVsLCBo ZWFwTG9ja21vZGUpOwogfQorCisvKgorICogYnJpbl9pbml0X2VtcHR5X3R1cGxlCisgKgkJ TWF5YmUgaW5pdGlhbGl6ZSBhIEJSSU4gdHVwbGUgcmVwcmVzZW50aW5nIGVtcHR5IHJhbmdl LgorICoKKyAqIElmIGVtcHR5VHVwbGUgaXMgTlVMTCwgaW5pdGlhbGl6ZXMgbmV3IHR1cGxl IHJlcHJlc2VudGluZyBlbXB0eSByYW5nZSBhdAorICogYmxvY2sgYmxrbm8uIE90aGVyd2lz ZSB0aGUgdHVwbGUgaXMgcmV1c2VkLCBhbmQgb25seSB0aGUgYnRfYmxrbm8gZmllbGQKKyAq IGlzIHVwZGF0ZWQuCisgKi8KK3N0YXRpYyBCcmluVHVwbGUgKgorYnJpbl9pbml0X2VtcHR5 X3R1cGxlKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSwgQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJ CSAgQnJpblR1cGxlICplbXB0eVR1cGxlLCBTaXplICplbXB0eVNpemUpCit7CisJLyogRGlk IHdlIGFscmVhZHkgYnVpbGQgdGhlIGVtcHR5IHJhbmdlPyBJZiBub3QsIGRvIGl0IG5vdy4g Ki8KKwlpZiAoZW1wdHlUdXBsZSA9PSBOVUxMKQorCXsKKwkJQnJpbk1lbVR1cGxlICpkdHVw bGUgPSBicmluX25ld19tZW10dXBsZShzdGF0ZS0+YnNfYmRlc2MpOworCisJCWVtcHR5VHVw bGUgPSBicmluX2Zvcm1fdHVwbGUoc3RhdGUtPmJzX2JkZXNjLCBibGtubywgZHR1cGxlLCBl bXB0eVNpemUpOworCX0KKwllbHNlCisJeworCQkvKiB3ZSBhbHJlYWR5IGhhdmUgYW4gImVt cHR5IHJhbmdlIiB0dXBsZSwganVzdCBzZXQgdGhlIGJsb2NrICovCisJCWVtcHR5VHVwbGUt PmJ0X2Jsa25vID0gYmxrbm87CisJfQorCisJcmV0dXJuIGVtcHR5VHVwbGU7Cit9Ci0tIAoy LjQxLjAKCg== --------------K0fKQakmp7i0eOvKpkcNCMqh Content-Type: text/x-patch; charset=UTF-8; name="v8-0005-simplify-filling-empty-ranges.patch" Content-Disposition: attachment; filename="v8-0005-simplify-filling-empty-ranges.patch" Content-Transfer-Encoding: base64 RnJvbSA3NDExYTUwZTU3ODk4ODZmMjU3OTM0ZGY3NGU4OTQ2Njc3M2NiY2RkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU2F0LCAyIERlYyAyMDIzIDIwOjAyOjA5ICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2OCA1LzZdIHNpbXBsaWZ5IGZpbGxpbmcgZW1wdHkgcmFuZ2VzCgotLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyB8IDE1MSArKysrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA5NyBpbnNlcnRpb25zKCspLCA1 NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9i cmluLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggMDBiNDM3ZDlj MWYuLjg0YmNlMTIyMGEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9i cmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0xNjUsNyAr MTY1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQnJpbkJ1aWxkU3RhdGUKIAlkb3VibGUJCWJzX251 bXR1cGxlczsKIAlkb3VibGUJCWJzX3JlbHR1cGxlczsKIAlCdWZmZXIJCWJzX2N1cnJlbnRJ bnNlcnRCdWY7Ci0JQmxvY2tOdW1iZXIJYnNfdGFibGVQYWdlczsKKwlCbG9ja051bWJlcgli c19tYXhSYW5nZVN0YXJ0OwogCUJsb2NrTnVtYmVyIGJzX3BhZ2VzUGVyUmFuZ2U7CiAJQmxv Y2tOdW1iZXIgYnNfY3VyclJhbmdlU3RhcnQ7CiAJQnJpblJldm1hcCAqYnNfcm1BY2Nlc3M7 CkBAIC0yMjMsNiArMjIzLDEwIEBAIHN0YXRpYyBib29sIGFkZF92YWx1ZXNfdG9fcmFuZ2Uo UmVsYXRpb24gaWR4UmVsLCBCcmluRGVzYyAqYmRlc2MsCiBzdGF0aWMgYm9vbCBjaGVja19u dWxsX2tleXMoQnJpblZhbHVlcyAqYnZhbCwgU2NhbktleSAqbnVsbGtleXMsIGludCBubnVs bGtleXMpOwogc3RhdGljIEJyaW5UdXBsZSAqYnJpbl9pbml0X2VtcHR5X3R1cGxlKEJyaW5C dWlsZFN0YXRlICpzdGF0ZSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJCQkJCQkJQnJpblR1 cGxlICplbXB0eVR1cGxlLCBTaXplICplbXB0eVNpemUpOworc3RhdGljIHZvaWQgYnJpbl9m aWxsX2VtcHR5X3JhbmdlcyhCcmluQnVpbGRTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCSAgIEJs b2NrTnVtYmVyIHByZXZSYW5nZSwgQmxvY2tOdW1iZXIgbWF4UmFuZ2UsCisJCQkJCQkJCSAg IEJyaW5UdXBsZSAqKmVtcHR5VHVwbGUsIFNpemUgKmVtcHR5U2l6ZSk7CitzdGF0aWMgQmxv Y2tOdW1iZXIgYnJpbl9uZXh0X3JhbmdlKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSwgQmxvY2tO dW1iZXIgYmxrbm8pOwogCiAvKiBwYXJhbGxlbCBpbmRleCBidWlsZHMgKi8KIHN0YXRpYyB2 b2lkIF9icmluX2JlZ2luX3BhcmFsbGVsKEJyaW5CdWlsZFN0YXRlICpidWlsZHN0YXRlLCBS ZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwKQEAgLTEwODcsOCArMTA5MSw3IEBAIGJy aW5idWlsZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwgSW5kZXhJbmZvICppbmRl eEluZm8pCiAJQnJpblJldm1hcCAqcmV2bWFwOwogCUJyaW5CdWlsZFN0YXRlICpzdGF0ZTsK IAlCdWZmZXIJCW1ldGE7Ci0JQmxvY2tOdW1iZXIgcGFnZXNQZXJSYW5nZSwKLQkJCQl0YWJs ZVBhZ2VzOworCUJsb2NrTnVtYmVyIHBhZ2VzUGVyUmFuZ2U7CiAKIAkvKgogCSAqIFdlIGV4 cGVjdCB0byBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGZvciBhbnkgaW5kZXggcmVsYXRpb24u CkBAIC0xMTM1LDggKzExMzgsOCBAQCBicmluYnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRp b24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKQogCSAqIEluaXRpYWxpemUgb3VyIHN0 YXRlLCBpbmNsdWRpbmcgdGhlIGRlZm9ybWVkIHR1cGxlIHN0YXRlLgogCSAqLwogCXJldm1h cCA9IGJyaW5SZXZtYXBJbml0aWFsaXplKGluZGV4LCAmcGFnZXNQZXJSYW5nZSk7Ci0JdGFi bGVQYWdlcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3MoaGVhcCk7Ci0Jc3RhdGUgPSBp bml0aWFsaXplX2JyaW5fYnVpbGRzdGF0ZShpbmRleCwgcmV2bWFwLCBwYWdlc1BlclJhbmdl LCB0YWJsZVBhZ2VzKTsKKwlzdGF0ZSA9IGluaXRpYWxpemVfYnJpbl9idWlsZHN0YXRlKGlu ZGV4LCByZXZtYXAsIHBhZ2VzUGVyUmFuZ2UsCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldE51 bWJlck9mQmxvY2tzKGhlYXApKTsKIAogCXN0YXRlLT5ic19zcG9vbCA9IChCcmluU3Bvb2wg KikgcGFsbG9jMChzaXplb2YoQnJpblNwb29sKSk7CiAJc3RhdGUtPmJzX3Nwb29sLT5oZWFw ID0gaGVhcDsKQEAgLTEyMDcsMTQgKzEyMTAsMTkgQEAgYnJpbmJ1aWxkKFJlbGF0aW9uIGhl YXAsIFJlbGF0aW9uIGluZGV4LCBJbmRleEluZm8gKmluZGV4SW5mbykKIAl9CiAJZWxzZQkJ CQkJCS8qIG5vIHBhcmFsbGVsIGluZGV4IGJ1aWxkICovCiAJeworCQlCcmluVHVwbGUgICpl bXB0eVR1cGxlID0gTlVMTDsKKwkJU2l6ZQkJZW1wdHlTaXplOworCiAJCXJlbHR1cGxlcyA9 IHRhYmxlX2luZGV4X2J1aWxkX3NjYW4oaGVhcCwgaW5kZXgsIGluZGV4SW5mbywgZmFsc2Us IHRydWUsCiAJCQkJCQkJCQkJICAgYnJpbmJ1aWxkQ2FsbGJhY2ssICh2b2lkICopIHN0YXRl LCBOVUxMKTsKIAotCQkvKiBwcm9jZXNzIHRoZSBmaW5hbCBiYXRjaCAqLworCQkvKiBwcm9j ZXNzIHRoZSBmaW5hbCBiYXRjaAorCQkgKgorCQkgKiBYWFggTm90ZSB0aGlzIGRvZXMgbm90 IHVwZGF0ZSBzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQsIGkuZS4KKwkJICogaXQgc3RheXMg c2V0IHRvIHRoZSBsYXN0IHJhbmdlIGFkZGVkIHRvIHRoZSBpbmRleC4KKwkJICovCiAJCWZv cm1fYW5kX2luc2VydF90dXBsZShzdGF0ZSk7CiAKLQkJLyogWFhYIHNob3VsZG4ndCB0aGlz IGhhcHBlbiBpbiB0aGUgYnJpbmJ1aWxkQ2FsbGJhY2s/ICovCi0JCXN0YXRlLT5ic19jdXJy UmFuZ2VTdGFydCArPSBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZTsKIAkJLyoKIAkJICogQmFj a2ZpbGwgdGhlIGZpbmFsIHJhbmdlcyB3aXRoIGVtcHR5IGRhdGEuCiAJCSAqCkBAIC0xMjIy LDE0ICsxMjMwLDEwIEBAIGJyaW5idWlsZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRl eCwgSW5kZXhJbmZvICppbmRleEluZm8pCiAJCSAqIGluZGV4IGlzIGJ1aWx0IG9uIHN0dXBp ZCBpbmRleCBxdWFscyBsaWtlIFdIRVJFIChub25udWxsX2NvbHVtbiBJUwogCQkgKiBOVUxM KS4KIAkJICovCi0JCXdoaWxlIChzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQgKyBzdGF0ZS0+ YnNfcGFnZXNQZXJSYW5nZSAtIDEgPCBzdGF0ZS0+YnNfdGFibGVQYWdlcykKLQkJewotCQkJ YnJpbl9tZW10dXBsZV9pbml0aWFsaXplKHN0YXRlLT5ic19kdHVwbGUsIHN0YXRlLT5ic19i ZGVzYyk7Ci0KLQkJCWZvcm1fYW5kX2luc2VydF90dXBsZShzdGF0ZSk7Ci0KLQkJCXN0YXRl LT5ic19jdXJyUmFuZ2VTdGFydCArPSBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZTsKLQkJfQor CQlicmluX2ZpbGxfZW1wdHlfcmFuZ2VzKHN0YXRlLAorCQkJCQkJCSAgIHN0YXRlLT5ic19j dXJyUmFuZ2VTdGFydCwKKwkJCQkJCQkgICBzdGF0ZS0+YnNfbWF4UmFuZ2VTdGFydCwKKwkJ CQkJCQkgICAmZW1wdHlUdXBsZSwgJmVtcHR5U2l6ZSk7CiAKIAkJLyogdHJhY2sgdGhlIG51 bWJlciBvZiByZWxhdGlvbiB0dXBsZXMgKi8KIAkJc3RhdGUtPmJzX3JlbHR1cGxlcyA9IHJl bHR1cGxlczsKQEAgLTE2NjAsNyArMTY2NCw2IEBAIGluaXRpYWxpemVfYnJpbl9idWlsZHN0 YXRlKFJlbGF0aW9uIGlkeFJlbCwgQnJpblJldm1hcCAqcmV2bWFwLAogCXN0YXRlLT5ic19y ZWx0dXBsZXMgPSAwOwogCXN0YXRlLT5ic19jdXJyZW50SW5zZXJ0QnVmID0gSW52YWxpZEJ1 ZmZlcjsKIAlzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSA9IHBhZ2VzUGVyUmFuZ2U7Ci0Jc3Rh dGUtPmJzX3RhYmxlUGFnZXMgPSB0YWJsZVBhZ2VzOwogCXN0YXRlLT5ic19jdXJyUmFuZ2VT dGFydCA9IDA7CiAJc3RhdGUtPmJzX3JtQWNjZXNzID0gcmV2bWFwOwogCXN0YXRlLT5ic19i ZGVzYyA9IGJyaW5fYnVpbGRfZGVzYyhpZHhSZWwpOwpAQCAtMTY2OSw2ICsxNjcyLDE5IEBA IGluaXRpYWxpemVfYnJpbl9idWlsZHN0YXRlKFJlbGF0aW9uIGlkeFJlbCwgQnJpblJldm1h cCAqcmV2bWFwLAogCXN0YXRlLT5ic193b3JrZXJfaWQgPSAwOwogCXN0YXRlLT5ic19zcG9v bCA9IE5VTEw7CiAKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGxhc3Qg cGFnZSByYW5nZS4gUGFnZSBudW1iZXJzIGFyZSAwLWJhc2VkLAorCSAqIHNvIHRvIGdldCB0 aGUgaW5kZXggb2YgdGhlIGxhc3QgcGFnZSB3ZSBuZWVkIHRvIHN1YnRyYWN0IG9uZS4gVGhl biB0aGUKKwkgKiBpbnRlZ2VyIGRpdmlzaW9uIGdpdmVzIHVzIHRoZSBwcm9wZXIgMC1iYXNl ZCByYW5nZSBpbmRleC4KKwkgKi8KKwlzdGF0ZS0+YnNfbWF4UmFuZ2VTdGFydCA9ICgodGFi bGVQYWdlcyAtIDEpIC8gcGFnZXNQZXJSYW5nZSkgKiBwYWdlc1BlclJhbmdlOworCisJLyoK KwkgKiBCdXQsIHdlIGFjdHVhbGx5IG5lZWQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHJhbmdl LCBvciBJbnZhbGlkQmxvY2tOdW1iZXIKKwkgKiBpZiBpdCB3b3VsZCBvdmVyZmxvdy4KKwkg Ki8KKwlzdGF0ZS0+YnNfbWF4UmFuZ2VTdGFydCA9IGJyaW5fbmV4dF9yYW5nZShzdGF0ZSwg c3RhdGUtPmJzX21heFJhbmdlU3RhcnQpOworCiAJcmV0dXJuIHN0YXRlOwogfQogCkBAIC0y NjE0LDE5ICsyNjMwLDggQEAgX2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5s ZWFkZXIsIEJyaW5CdWlsZFN0YXRlICpzdGF0ZSkKIAkJfQogCiAJCS8qIEZpbGwgZW1wdHkg cmFuZ2VzIGZvciBhbGwgcmFuZ2VzIG1pc3NpbmcgaW4gdGhlIHR1cGxlc29ydC4gKi8KLQkJ cHJldmJsa25vID0gKHByZXZibGtubyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpID8gMCA6IHBy ZXZibGtubzsKLQkJd2hpbGUgKHByZXZibGtubyArIHN0YXRlLT5ic19wYWdlc1BlclJhbmdl IDwgYnR1cC0+YnRfYmxrbm8pCi0JCXsKLQkJCS8qIHRoZSBtaXNzaW5nIHJhbmdlICovCi0J CQlwcmV2Ymxrbm8gKz0gc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2U7Ci0KLQkJCS8qIERpZCB3 ZSBhbHJlYWR5IGJ1aWxkIHRoZSBlbXB0eSByYW5nZT8gSWYgbm90LCBkbyBpdCBub3cuICov Ci0JCQllbXB0eVR1cGxlID0gYnJpbl9pbml0X2VtcHR5X3R1cGxlKHN0YXRlLCBwcmV2Ymxr bm8sIGVtcHR5VHVwbGUsICZlbXB0eVNpemUpOwotCi0JCQlicmluX2RvaW5zZXJ0KHN0YXRl LT5ic19pcmVsLCBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSwgc3RhdGUtPmJzX3JtQWNjZXNz LAotCQkJCQkJICAmc3RhdGUtPmJzX2N1cnJlbnRJbnNlcnRCdWYsCi0JCQkJCQkgIGVtcHR5 VHVwbGUtPmJ0X2Jsa25vLCBlbXB0eVR1cGxlLCBlbXB0eVNpemUpOwotCQl9CisJCWJyaW5f ZmlsbF9lbXB0eV9yYW5nZXMoc3RhdGUsIHByZXZibGtubywgYnR1cC0+YnRfYmxrbm8sCisJ CQkJCQkJICAgJmVtcHR5VHVwbGUsICZlbXB0eVNpemUpOwogCiAJCXByZXZibGtubyA9IGJ0 dXAtPmJ0X2Jsa25vOwogCX0KQEAgLTI2NDgsMzAgKzI2NTMsOSBAQCBfYnJpbl9lbmRfcGFy YWxsZWwoQnJpbkxlYWRlciAqYnJpbmxlYWRlciwgQnJpbkJ1aWxkU3RhdGUgKnN0YXRlKQog CQlwZnJlZSh0bXApOwogCX0KIAotCS8qCi0JICogRmlsbCBlbXB0eSByYW5nZXMgYXQgdGhl IGVuZCwgZm9yIGFsbCByYW5nZXMgbWlzc2luZyBpbiB0aGUgdHVwbGVzb3J0LgotCSAqCi0J ICogU3RhcnRpbmcgZnJvbSBoZXJlLCBwcmV2Ymxrbm8gaXMgdGhlIHRvLWJlLWluc2VydGVk IHJhbmdlJ3Mgc3RhcnQgYmxvY2sKLQkgKiBudW1iZXIuIE5vdGUgdGhhdCB3ZSBkb24ndCBm aWxsIGluIHRoZSByZWxhdGlvbidzIGxhc3QgcGFnZSByYW5nZS4KLQkgKi8KLQlpZiAocHJl dmJsa25vID09IEludmFsaWRCbG9ja051bWJlcikKLQkJcHJldmJsa25vID0gMDsKLQllbHNl Ci0JCXByZXZibGtubyArPSBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZTsKLQotCXdoaWxlIChw cmV2Ymxrbm8gKyBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSA8IHN0YXRlLT5ic190YWJsZVBh Z2VzKQotCXsKLQkJLyogRGlkIHdlIGFscmVhZHkgYnVpbGQgdGhlIGVtcHR5IHJhbmdlPyBJ ZiBub3QsIGRvIGl0IG5vdy4gKi8KLQkJZW1wdHlUdXBsZSA9IGJyaW5faW5pdF9lbXB0eV90 dXBsZShzdGF0ZSwgcHJldmJsa25vLCBlbXB0eVR1cGxlLCAmZW1wdHlTaXplKTsKLQotCQkv KiBJbnNlcnQgdGhlIG1pc3NpbmcgcmFuZ2UgKi8KLQkJYnJpbl9kb2luc2VydChzdGF0ZS0+ YnNfaXJlbCwgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UsIHN0YXRlLT5ic19ybUFjY2VzcywK LQkJCQkJICAmc3RhdGUtPmJzX2N1cnJlbnRJbnNlcnRCdWYsCi0JCQkJCSAgZW1wdHlUdXBs ZS0+YnRfYmxrbm8sIGVtcHR5VHVwbGUsIGVtcHR5U2l6ZSk7Ci0KLQkJLyogLi4uIGFuZCB1 cGRhdGUgdG8gdGhlIG5leHQgcmFuZ2UncyBibG9jayBudW1iZXIgKi8KLQkJcHJldmJsa25v ICs9IHN0YXRlLT5ic19wYWdlc1BlclJhbmdlOwotCX0KKwkvKiBGaWxsIGVtcHR5IHJhbmdl cyBhdCB0aGUgZW5kLCBmb3IgYWxsIHJhbmdlcyBtaXNzaW5nIGluIHRoZSB0dXBsZXNvcnQu ICovCisJYnJpbl9maWxsX2VtcHR5X3JhbmdlcyhzdGF0ZSwgcHJldmJsa25vLCBzdGF0ZS0+ YnNfbWF4UmFuZ2VTdGFydCwKKwkJCQkJCSAgICZlbXB0eVR1cGxlLCAmZW1wdHlTaXplKTsK IAogCS8qCiAJICogU3dpdGNoIGJhY2sgdG8gdGhlIG9yaWdpbmFsIG1lbW9yeSBjb250ZXh0 LCBhbmQgZGVzdHJveSB0aGUgb25lIHdlCkBAIC0yOTE3LDMgKzI5MDEsNjIgQEAgYnJpbl9p bml0X2VtcHR5X3R1cGxlKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSwgQmxvY2tOdW1iZXIgYmxr bm8sCiAKIAlyZXR1cm4gZW1wdHlUdXBsZTsKIH0KKworLyoKKyAqIGJyaW5fZmlsbF9lbXB0 eV9yYW5nZXMKKyAqCQlBZGQgQlJJTiBpbmRleCB0dXBsZXMgcmVwcmVzZW50aW5nIGVtcHR5 IHBhZ2UgcmFuZ2VzLgorICoKKyAqIHByZXZSYW5nZS9uZXh0UmFuZ2UgZGV0ZXJtaW5lIHRo ZSBmb3Igd2hpY2ggcGFnZSByYW5nZXMgdG8gYWRkIHRoZSBlbXB0eQorICogc3VtbWFyaWVz LCBhbmQgYm90aCBhcmUgZXhjbHVzaXZlLiBUaGF0IGlzLCBvbmx5IHJhbmdlcyBzdGFydGlu ZyBhdCBibGtubworICogZm9yIHdoaWNoIChwcmV2UmFuZ2UgPCBibGtubyA8IG5leHRSYW5n ZSkgd2lsbCBiZSBhZGRlZCB0byB0aGUgaW5kZXguCisgKgorICogQm90aCB2YWx1ZXMgbWF5 IGJlIEludmFsaWRCbG9ja051bWJlci4gRm9yIHByZXZSYW5nZSB0aGlzIG1lYW5zIHRoZXJl IGlzCisgKiBubyBwcmV2aW91cyByYW5nZSwgc28gdGhlIGZpcnN0IHJhbmdlIGluc2VydGVk IHNob3VsZCBiZSBmb3IgYmxrbm89MC4gV2hlbgorICogbmV4dFJhbmdlIGlzIEludmFsaWRC bG9ja051bWJlciwgaXQgbWVhbnMgdGhlIHRhYmxlIGlzIGxhcmdlIGVub3VnaCBmb3IKKyAq IHRoZSBibGtubyB0byBvdmVyZmxvdy4KKyAqCisgKiBUaGUgZW1wdHkgdHVwbGUgaXMgYnVp bHQgb25seSBvbmNlIHdoZW4gbmVlZGVkLCBhbmQgdGhlbiBrZXB0IGFuZCByZXVzZWQKKyAq IGZvciBhbGwgZnV0dXJlIGNhbGxzLgorICovCitzdGF0aWMgdm9pZAorYnJpbl9maWxsX2Vt cHR5X3JhbmdlcyhCcmluQnVpbGRTdGF0ZSAqc3RhdGUsCisJCQkJCSAgIEJsb2NrTnVtYmVy IHByZXZSYW5nZSwgQmxvY2tOdW1iZXIgbWF4UmFuZ2UsCisJCQkJCSAgIEJyaW5UdXBsZSAq KmVtcHR5VHVwbGUsIFNpemUgKmVtcHR5U2l6ZSkKK3sKKwlCbG9ja051bWJlcglibGtubzsK KworCS8qCisJICogSWYgd2UgYWxyZWFkeSBzdW1tYXJpemVkIHNvbWUgcmFuZ2VzLCB3ZSBu ZWVkIHRvIHN0YXJ0IHdpdGggdGhlIG5leHQgb25lLgorCSAqIE90aGVyd2lzZSB3ZSBuZWVk IHRvIHN0YXJ0IGZyb20gdGhlIGZpcnN0IHJhbmdlIG9mIHRoZSB0YWJsZS4KKwkgKi8KKwli bGtubyA9IChwcmV2UmFuZ2UgPT0gSW52YWxpZEJsb2NrTnVtYmVyKSA/IDAgOiBicmluX25l eHRfcmFuZ2Uoc3RhdGUsIHByZXZSYW5nZSk7CisKKwkvKgorCSAqIEdlbmVyYXRlIGVtcHR5 IHJhbmdlcyB1bnRpbCB3ZSBoaXQgdGhlIG5leHQgbm9uLWVtcHR5IHJhbmdlIG9yIHN1bW1h cml6ZQorCSAqIHRoZSBsYXN0IHJhbmdlIG9mIHRoZSB0YWJsZS4KKwkgKi8KKwl3aGlsZSAo Ymxrbm8gPCBtYXhSYW5nZSkKKwl7CisJCS8qIERpZCB3ZSBhbHJlYWR5IGJ1aWxkIHRoZSBl bXB0eSB0dXBsZT8gSWYgbm90LCBkbyBpdCBub3cuICovCisJCSplbXB0eVR1cGxlID0gYnJp bl9pbml0X2VtcHR5X3R1cGxlKHN0YXRlLCBibGtubywgKmVtcHR5VHVwbGUsIGVtcHR5U2l6 ZSk7CisKKwkJYnJpbl9kb2luc2VydChzdGF0ZS0+YnNfaXJlbCwgc3RhdGUtPmJzX3BhZ2Vz UGVyUmFuZ2UsIHN0YXRlLT5ic19ybUFjY2VzcywKKwkJCQkJICAmc3RhdGUtPmJzX2N1cnJl bnRJbnNlcnRCdWYsCisJCQkJCSAgKCplbXB0eVR1cGxlKS0+YnRfYmxrbm8sICplbXB0eVR1 cGxlLCAqZW1wdHlTaXplKTsKKworCQkvKiB0cnkgbmV4dCBwYWdlIHJhbmdlICovCisJCWJs a25vID0gYnJpbl9uZXh0X3JhbmdlKHN0YXRlLCBibGtubyk7CisJfQorfQorCitzdGF0aWMg QmxvY2tOdW1iZXIKK2JyaW5fbmV4dF9yYW5nZShCcmluQnVpbGRTdGF0ZSAqc3RhdGUsIEJs b2NrTnVtYmVyIGJsa25vKQoreworCUJsb2NrTnVtYmVyCXJldCA9IChibGtubyArIHN0YXRl LT5ic19wYWdlc1BlclJhbmdlKTsKKworCS8qIG92ZXJmbG93ICovCisJaWYgKHJldCA8IGJs a25vKQorCQlyZXQgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwlyZXR1cm4gcmV0OworfQot LSAKMi40MS4wCgo= --------------K0fKQakmp7i0eOvKpkcNCMqh Content-Type: text/x-patch; charset=UTF-8; name="v8-0006-memcontext-emptyTuple.patch" Content-Disposition: attachment; filename="v8-0006-memcontext-emptyTuple.patch" Content-Transfer-Encoding: base64 RnJvbSBiOTNmNzVmODk1NGMyZTZiMTE3MGE2MWE1MmZhZTM1Y2I5ZGJjZjk1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU3VuLCAzIERlYyAyMDIzIDEyOjU5OjI1ICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2OCA2LzZdIG1lbWNvbnRleHQgZW1wdHlUdXBsZQoKLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgfCA2MCArKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IDg0YmNlMTIyMGEwLi5hZjA0 NTNkYmRiYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtMTcyLDYgKzE3MiwxMCBA QCB0eXBlZGVmIHN0cnVjdCBCcmluQnVpbGRTdGF0ZQogCUJyaW5EZXNjICAgKmJzX2JkZXNj OwogCUJyaW5NZW1UdXBsZSAqYnNfZHR1cGxlOwogCisJQnJpblR1cGxlICAqYnNfZW1wdHlU dXBsZTsKKwlTaXplCQlic19lbXB0eVR1cGxlTGVuOworCU1lbW9yeUNvbnRleHQgYnNfY29u dGV4dDsKKwogCS8qCiAJICogYnNfbGVhZGVyIGlzIG9ubHkgcHJlc2VudCB3aGVuIGEgcGFy YWxsZWwgaW5kZXggYnVpbGQgaXMgcGVyZm9ybWVkLCBhbmQKIAkgKiBvbmx5IGluIHRoZSBs ZWFkZXIgcHJvY2Vzcy4gKEFjdHVhbGx5LCBvbmx5IHRoZSBsZWFkZXIgcHJvY2VzcyBoYXMg YQpAQCAtMjIxLDExICsyMjUsOCBAQCBzdGF0aWMgdm9pZCBicmluX3ZhY3V1bV9zY2FuKFJl bGF0aW9uIGlkeHJlbCwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOwogc3RhdGlj IGJvb2wgYWRkX3ZhbHVlc190b19yYW5nZShSZWxhdGlvbiBpZHhSZWwsIEJyaW5EZXNjICpi ZGVzYywKIAkJCQkJCQkJQnJpbk1lbVR1cGxlICpkdHVwLCBjb25zdCBEYXR1bSAqdmFsdWVz LCBjb25zdCBib29sICpudWxscyk7CiBzdGF0aWMgYm9vbCBjaGVja19udWxsX2tleXMoQnJp blZhbHVlcyAqYnZhbCwgU2NhbktleSAqbnVsbGtleXMsIGludCBubnVsbGtleXMpOwotc3Rh dGljIEJyaW5UdXBsZSAqYnJpbl9pbml0X2VtcHR5X3R1cGxlKEJyaW5CdWlsZFN0YXRlICpz dGF0ZSwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJCQkJCQkJQnJpblR1cGxlICplbXB0eVR1 cGxlLCBTaXplICplbXB0eVNpemUpOwogc3RhdGljIHZvaWQgYnJpbl9maWxsX2VtcHR5X3Jh bmdlcyhCcmluQnVpbGRTdGF0ZSAqc3RhdGUsCi0JCQkJCQkJCSAgIEJsb2NrTnVtYmVyIHBy ZXZSYW5nZSwgQmxvY2tOdW1iZXIgbWF4UmFuZ2UsCi0JCQkJCQkJCSAgIEJyaW5UdXBsZSAq KmVtcHR5VHVwbGUsIFNpemUgKmVtcHR5U2l6ZSk7CisJCQkJCQkJCSAgIEJsb2NrTnVtYmVy IHByZXZSYW5nZSwgQmxvY2tOdW1iZXIgbWF4UmFuZ2UpOwogc3RhdGljIEJsb2NrTnVtYmVy IGJyaW5fbmV4dF9yYW5nZShCcmluQnVpbGRTdGF0ZSAqc3RhdGUsIEJsb2NrTnVtYmVyIGJs a25vKTsKIAogLyogcGFyYWxsZWwgaW5kZXggYnVpbGRzICovCkBAIC0xMjEwLDkgKzEyMTEs NiBAQCBicmluYnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5m byAqaW5kZXhJbmZvKQogCX0KIAllbHNlCQkJCQkJLyogbm8gcGFyYWxsZWwgaW5kZXggYnVp bGQgKi8KIAl7Ci0JCUJyaW5UdXBsZSAgKmVtcHR5VHVwbGUgPSBOVUxMOwotCQlTaXplCQll bXB0eVNpemU7Ci0KIAkJcmVsdHVwbGVzID0gdGFibGVfaW5kZXhfYnVpbGRfc2NhbihoZWFw LCBpbmRleCwgaW5kZXhJbmZvLCBmYWxzZSwgdHJ1ZSwKIAkJCQkJCQkJCQkgICBicmluYnVp bGRDYWxsYmFjaywgKHZvaWQgKikgc3RhdGUsIE5VTEwpOwogCkBAIC0xMjMyLDggKzEyMzAs NyBAQCBicmluYnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5m byAqaW5kZXhJbmZvKQogCQkgKi8KIAkJYnJpbl9maWxsX2VtcHR5X3JhbmdlcyhzdGF0ZSwK IAkJCQkJCQkgICBzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQsCi0JCQkJCQkJICAgc3RhdGUt PmJzX21heFJhbmdlU3RhcnQsCi0JCQkJCQkJICAgJmVtcHR5VHVwbGUsICZlbXB0eVNpemUp OworCQkJCQkJCSAgIHN0YXRlLT5ic19tYXhSYW5nZVN0YXJ0KTsKIAogCQkvKiB0cmFjayB0 aGUgbnVtYmVyIG9mIHJlbGF0aW9uIHR1cGxlcyAqLwogCQlzdGF0ZS0+YnNfcmVsdHVwbGVz ID0gcmVsdHVwbGVzOwpAQCAtMTY3MSw2ICsxNjY4LDkgQEAgaW5pdGlhbGl6ZV9icmluX2J1 aWxkc3RhdGUoUmVsYXRpb24gaWR4UmVsLCBCcmluUmV2bWFwICpyZXZtYXAsCiAJc3RhdGUt PmJzX2xlYWRlciA9IE5VTEw7CiAJc3RhdGUtPmJzX3dvcmtlcl9pZCA9IDA7CiAJc3RhdGUt PmJzX3Nwb29sID0gTlVMTDsKKwlzdGF0ZS0+YnNfY29udGV4dCA9IEN1cnJlbnRNZW1vcnlD b250ZXh0OworCXN0YXRlLT5ic19lbXB0eVR1cGxlID0gTlVMTDsKKwlzdGF0ZS0+YnNfZW1w dHlUdXBsZUxlbiA9IDA7CiAKIAkvKgogCSAqIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhl IGxhc3QgcGFnZSByYW5nZS4gUGFnZSBudW1iZXJzIGFyZSAwLWJhc2VkLApAQCAtMjUxNSw4 ICsyNTE1LDYgQEAgX2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIs IEJyaW5CdWlsZFN0YXRlICpzdGF0ZSkKIAlTaXplCQl0dXBsZW47CiAJQnJpblNoYXJlZCAq YnJpbnNoYXJlZCA9IGJyaW5sZWFkZXItPmJyaW5zaGFyZWQ7CiAJQmxvY2tOdW1iZXIgcHJl dmJsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCUJyaW5UdXBsZSAgKmVtcHR5VHVwbGUg PSBOVUxMOwotCVNpemUJCWVtcHR5U2l6ZTsKIAlCcmluU3Bvb2wgICpzcG9vbDsKIAlNZW1v cnlDb250ZXh0IHJhbmdlQ3h0LAogCQkJCW9sZEN4dDsKQEAgLTI2MzAsOCArMjYyOCw3IEBA IF9icmluX2VuZF9wYXJhbGxlbChCcmluTGVhZGVyICpicmlubGVhZGVyLCBCcmluQnVpbGRT dGF0ZSAqc3RhdGUpCiAJCX0KIAogCQkvKiBGaWxsIGVtcHR5IHJhbmdlcyBmb3IgYWxsIHJh bmdlcyBtaXNzaW5nIGluIHRoZSB0dXBsZXNvcnQuICovCi0JCWJyaW5fZmlsbF9lbXB0eV9y YW5nZXMoc3RhdGUsIHByZXZibGtubywgYnR1cC0+YnRfYmxrbm8sCi0JCQkJCQkJICAgJmVt cHR5VHVwbGUsICZlbXB0eVNpemUpOworCQlicmluX2ZpbGxfZW1wdHlfcmFuZ2VzKHN0YXRl LCBwcmV2Ymxrbm8sIGJ0dXAtPmJ0X2Jsa25vKTsKIAogCQlwcmV2Ymxrbm8gPSBidHVwLT5i dF9ibGtubzsKIAl9CkBAIC0yNjU0LDggKzI2NTEsNyBAQCBfYnJpbl9lbmRfcGFyYWxsZWwo QnJpbkxlYWRlciAqYnJpbmxlYWRlciwgQnJpbkJ1aWxkU3RhdGUgKnN0YXRlKQogCX0KIAog CS8qIEZpbGwgZW1wdHkgcmFuZ2VzIGF0IHRoZSBlbmQsIGZvciBhbGwgcmFuZ2VzIG1pc3Np bmcgaW4gdGhlIHR1cGxlc29ydC4gKi8KLQlicmluX2ZpbGxfZW1wdHlfcmFuZ2VzKHN0YXRl LCBwcmV2Ymxrbm8sIHN0YXRlLT5ic19tYXhSYW5nZVN0YXJ0LAotCQkJCQkJICAgJmVtcHR5 VHVwbGUsICZlbXB0eVNpemUpOworCWJyaW5fZmlsbF9lbXB0eV9yYW5nZXMoc3RhdGUsIHBy ZXZibGtubywgc3RhdGUtPmJzX21heFJhbmdlU3RhcnQpOwogCiAJLyoKIAkgKiBTd2l0Y2gg YmFjayB0byB0aGUgb3JpZ2luYWwgbWVtb3J5IGNvbnRleHQsIGFuZCBkZXN0cm95IHRoZSBv bmUgd2UKQEAgLTI4NzUsMzEgKzI4NzEsMzggQEAgX2JyaW5fcGFyYWxsZWxfYnVpbGRfbWFp bihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpCiB9CiAKIC8qCi0gKiBicmluX2lu aXRfZW1wdHlfdHVwbGUKKyAqIGJyaW5fYnVpbGRfZW1wdHlfdHVwbGUKICAqCQlNYXliZSBp bml0aWFsaXplIGEgQlJJTiB0dXBsZSByZXByZXNlbnRpbmcgZW1wdHkgcmFuZ2UuCiAgKgog ICogSWYgZW1wdHlUdXBsZSBpcyBOVUxMLCBpbml0aWFsaXplcyBuZXcgdHVwbGUgcmVwcmVz ZW50aW5nIGVtcHR5IHJhbmdlIGF0CiAgKiBibG9jayBibGtuby4gT3RoZXJ3aXNlIHRoZSB0 dXBsZSBpcyByZXVzZWQsIGFuZCBvbmx5IHRoZSBidF9ibGtubyBmaWVsZAogICogaXMgdXBk YXRlZC4KICAqLwotc3RhdGljIEJyaW5UdXBsZSAqCi1icmluX2luaXRfZW1wdHlfdHVwbGUo QnJpbkJ1aWxkU3RhdGUgKnN0YXRlLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJICBCcmlu VHVwbGUgKmVtcHR5VHVwbGUsIFNpemUgKmVtcHR5U2l6ZSkKK3N0YXRpYyB2b2lkCiticmlu X2J1aWxkX2VtcHR5X3R1cGxlKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSwgQmxvY2tOdW1iZXIg Ymxrbm8pCiB7CiAJLyogRGlkIHdlIGFscmVhZHkgYnVpbGQgdGhlIGVtcHR5IHJhbmdlPyBJ ZiBub3QsIGRvIGl0IG5vdy4gKi8KLQlpZiAoZW1wdHlUdXBsZSA9PSBOVUxMKQorCWlmIChz dGF0ZS0+YnNfZW1wdHlUdXBsZSA9PSBOVUxMKQogCXsKLQkJQnJpbk1lbVR1cGxlICpkdHVw bGUgPSBicmluX25ld19tZW10dXBsZShzdGF0ZS0+YnNfYmRlc2MpOworCQlNZW1vcnlDb250 ZXh0CW9sZGN4dDsKKwkJQnJpbk1lbVR1cGxlICAgKmR0dXBsZSA9IGJyaW5fbmV3X21lbXR1 cGxlKHN0YXRlLT5ic19iZGVzYyk7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRvIGFsbG9j YXRlIHRoZSB0dXBsZSBpbiBjb250ZXh0IHRoYXQgbGFzdHMgZm9yIHRoZQorCQkgKiB3aG9s ZSBpbmRleCBidWlsZC4KKwkJICovCisJCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhzdGF0ZS0+YnNfY29udGV4dCk7CiAKLQkJZW1wdHlUdXBsZSA9IGJyaW5fZm9ybV90dXBs ZShzdGF0ZS0+YnNfYmRlc2MsIGJsa25vLCBkdHVwbGUsIGVtcHR5U2l6ZSk7CisJCXN0YXRl LT5ic19lbXB0eVR1cGxlID0gYnJpbl9mb3JtX3R1cGxlKHN0YXRlLT5ic19iZGVzYywgYmxr bm8sIGR0dXBsZSwKKwkJCQkJCQkJCQkJICAgJnN0YXRlLT5ic19lbXB0eVR1cGxlTGVuKTsK KworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIAl9CiAJZWxzZQogCXsKIAkJ Lyogd2UgYWxyZWFkeSBoYXZlIGFuICJlbXB0eSByYW5nZSIgdHVwbGUsIGp1c3Qgc2V0IHRo ZSBibG9jayAqLwotCQllbXB0eVR1cGxlLT5idF9ibGtubyA9IGJsa25vOworCQlzdGF0ZS0+ YnNfZW1wdHlUdXBsZS0+YnRfYmxrbm8gPSBibGtubzsKIAl9Ci0KLQlyZXR1cm4gZW1wdHlU dXBsZTsKIH0KIAogLyoKQEAgLTI5MjAsOCArMjkyMyw3IEBAIGJyaW5faW5pdF9lbXB0eV90 dXBsZShCcmluQnVpbGRTdGF0ZSAqc3RhdGUsIEJsb2NrTnVtYmVyIGJsa25vLAogICovCiBz dGF0aWMgdm9pZAogYnJpbl9maWxsX2VtcHR5X3JhbmdlcyhCcmluQnVpbGRTdGF0ZSAqc3Rh dGUsCi0JCQkJCSAgIEJsb2NrTnVtYmVyIHByZXZSYW5nZSwgQmxvY2tOdW1iZXIgbWF4UmFu Z2UsCi0JCQkJCSAgIEJyaW5UdXBsZSAqKmVtcHR5VHVwbGUsIFNpemUgKmVtcHR5U2l6ZSkK KwkJCQkJICAgQmxvY2tOdW1iZXIgcHJldlJhbmdlLCBCbG9ja051bWJlciBtYXhSYW5nZSkK IHsKIAlCbG9ja051bWJlcglibGtubzsKIApAQCAtMjkzOCwxMSArMjk0MCwxMSBAQCBicmlu X2ZpbGxfZW1wdHlfcmFuZ2VzKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSwKIAl3aGlsZSAoYmxr bm8gPCBtYXhSYW5nZSkKIAl7CiAJCS8qIERpZCB3ZSBhbHJlYWR5IGJ1aWxkIHRoZSBlbXB0 eSB0dXBsZT8gSWYgbm90LCBkbyBpdCBub3cuICovCi0JCSplbXB0eVR1cGxlID0gYnJpbl9p bml0X2VtcHR5X3R1cGxlKHN0YXRlLCBibGtubywgKmVtcHR5VHVwbGUsIGVtcHR5U2l6ZSk7 CisJCWJyaW5fYnVpbGRfZW1wdHlfdHVwbGUoc3RhdGUsIGJsa25vKTsKIAogCQlicmluX2Rv aW5zZXJ0KHN0YXRlLT5ic19pcmVsLCBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSwgc3RhdGUt PmJzX3JtQWNjZXNzLAogCQkJCQkgICZzdGF0ZS0+YnNfY3VycmVudEluc2VydEJ1ZiwKLQkJ CQkJICAoKmVtcHR5VHVwbGUpLT5idF9ibGtubywgKmVtcHR5VHVwbGUsICplbXB0eVNpemUp OworCQkJCQkgIGJsa25vLCBzdGF0ZS0+YnNfZW1wdHlUdXBsZSwgc3RhdGUtPmJzX2VtcHR5 VHVwbGVMZW4pOwogCiAJCS8qIHRyeSBuZXh0IHBhZ2UgcmFuZ2UgKi8KIAkJYmxrbm8gPSBi cmluX25leHRfcmFuZ2Uoc3RhdGUsIGJsa25vKTsKLS0gCjIuNDEuMAoK --------------K0fKQakmp7i0eOvKpkcNCMqh Content-Type: application/x-shellscript; name="run.sh" Content-Disposition: attachment; filename="run.sh" Content-Transfer-Encoding: base64 IyEvYmluL2Jhc2gKCnNldCAtZQoKZHJvcGRiIC0taWYtZXhpc3RzIHRlc3QKY3JlYXRlZGIg dGVzdAoKcHNxbCB0ZXN0IC1jICdjcmVhdGUgZXh0ZW5zaW9uIHBhZ2VpbnNwZWN0JwoKCmZ1 bmN0aW9uIGNoZWNrX2JyaW5fcmFuZ2VzIHsKCglvcGNsYXNzPSQxCglwYWdlc19wZXJfcmFu Z2U9JDIKCgkjIGZpcnN0IGNoZWNrIHRoZSBpbmRleCBoYXMgdGhlIHJpZ2h0IG51bWJlciBv ZiBicmluIHJhbmdlcywgZm9yIHRoZSB0YWJsZSBwYWdlcwoJdGFibGVfcGFnZXM9JChwc3Fs IHRlc3QgLXQgLUEgLWMgInNlbGVjdCBwZ19yZWxhdGlvbl9zaXplKCdicmluX3Rlc3QnKSAv IDgxOTIiKQoKCWluZGV4X3BhZ2VzPSQocHNxbCB0ZXN0IC10IC1BIC1jICJzZWxlY3QgcGdf cmVsYXRpb25fc2l6ZSgnYnJpbl90ZXN0X2FfaWR4JykgLyA4MTkyIikKCglybSAtZiByYW5n ZXMubG9nIGJsa251bXMubG9nCgoJZm9yIHAgaW4gYHNlcSAwICQoKGluZGV4X3BhZ2VzIC0g MSkpYDsgZG8KCQlwc3FsIHRlc3QgLXQgLUEgLWMgIlNFTEVDVCAqIEZST00gYnJpbl9wYWdl X2l0ZW1zKGdldF9yYXdfcGFnZSgnYnJpbl90ZXN0X2FfaWR4JywgJHApLCAnYnJpbl90ZXN0 X2FfaWR4JykiID4+IHJhbmdlcy5sb2cgMj4gL2Rldi9udWxsIHx8IHRydWUKCQlwc3FsIHRl c3QgLXQgLUEgLWMgIlNFTEVDVCBibGtudW0gRlJPTSBicmluX3BhZ2VfaXRlbXMoZ2V0X3Jh d19wYWdlKCdicmluX3Rlc3RfYV9pZHgnLCAkcCksICdicmluX3Rlc3RfYV9pZHgnKSIgPj4g YmxrbnVtcy5sb2cgMj4gL2Rldi9udWxsIHx8IHRydWUKCWRvbmUKCglkaXN0aW5jdF9yYW5n ZXM9JChncmVwIC12ICdeJCcgYmxrbnVtcy5sb2cgfCB3YyAtbCkKCglpbmRleF9yYW5nZXM9 JChncmVwIC12ICdeJCcgcmFuZ2VzLmxvZyB8IHdjIC1sKQoKCWV4cGVjdGVkX3Jhbmdlcz0k KCgodGFibGVfcGFnZXMgKyBwYWdlc19wZXJfcmFuZ2UgLSAxKSAvIHBhZ2VzX3Blcl9yYW5n ZSkpCgoJZWNobyAidGFibGUgcGFnZXMgJHRhYmxlX3BhZ2VzIHJhbmdlICRwYWdlc19wZXJf cmFuZ2UiCgllY2hvICJyYW5nZXMgZXhwZWN0ZWQgJGV4cGVjdGVkX3JhbmdlcyBpbmRleCAk aW5kZXhfcmFuZ2VzIGRpc3RpbmN0ICRkaXN0aW5jdF9yYW5nZXMiCgoJaWYgW1sgISAkaW5k ZXhfcmFuZ2VzIC1lcSAkZXhwZWN0ZWRfcmFuZ2VzIF1dOyB0aGVuCgkJZWNobyAiRVJST1I6 IG51bWJlciBvZiBleHBlY3RlZCBhbmQgYnVpbHQgcmFuZ2VzIGRvIG5vdCBtYXRjaCIKCQll eGl0IDEKCWZpCgoJaWYgW1sgISAkaW5kZXhfcmFuZ2VzIC1lcSAkZGlzdGluY3RfcmFuZ2Vz IF1dOyB0aGVuCgkJZWNobyAiRVJST1I6IGR1cGxpY2F0ZSBpbmRleCByYW5nZXMgKCRpbmRl eF9yYW5nZXMgIT0gJGRpc3RpbmN0X3JhbmdlcykiCgkJZXhpdCAxCglmaQoKCSMgbm93IGNo ZWNrIHRoYXQgdGhlIHJhbmdlcyBhcmUgdmFsaWQgd2l0aCByZXNwZWN0IHRvIGRhdGEKCW1p bj0kKHBzcWwgdGVzdCAtdCAtQSAtYyAiU0VMRUNUIE1JTihhKSBGUk9NIGJyaW5fdGVzdCIp CgltYXg9JChwc3FsIHRlc3QgLXQgLUEgLWMgIlNFTEVDVCBNQVgoYSkgRlJPTSBicmluX3Rl c3QiKQoKCWVjaG8gIm1pbiAkbWluIG1heCAkbWF4IgoKCXdoaWxlIElGUz0gcmVhZCAtciBs aW5lCglkbwoJCUlGUz0nfCcgcmVhZCAtciAtYSBhcnJheSA8PDwgIiRsaW5lIgoJCWl0ZW1v ZmZzZXQ9JHthcnJheVswXX0KCQlibGtudW09JHthcnJheVsxXX0KCQlhdHRudW09JHthcnJh eVsyXX0KCQlhbGxudWxscz0ke2FycmF5WzNdfQoJCWhhc251bGxzPSR7YXJyYXlbNF19CgkJ cGxhY2Vob2xkZXI9JHthcnJheVs1XX0KCQllbXB0eT0ke2FycmF5WzZdfQoJCXZhbHVlPSR7 YXJyYXlbN119CgoJCWlmIFtbICIkZW1wdHkiID09ICd0JyAmJiAiJGFsbG51bGxzIiAhPSAn dCcgXV07IHRoZW4KCQkJZWNobyAiRVJST1I6IGludmFsaWQgZW1wdHkvYWxsbnVsbHMgY29t YmluYXRpb24gKCRsaW5lKSIgCgkJCWV4aXQgMQoJCWZpCgoJCSMgaWYgbm90IGVtcHR5LCBw YXJzZSB0aGUgdmFsdWUgYW5kIGNoZWNrIG1pbi9tYXgsIGJ1dCBvbmx5IGZvciBtaW5tYXgK CQlpZiBbICIkZW1wdHkiICE9ICd0JyBdICYmIFsgIiRvcGNsYXNzIiA9PSAibWlubWF4IiBd OyB0aGVuCgoJCQlzdHI9JChlY2hvICR2YWx1ZSB8IHNlZCAncy9be31dLy9nJykKCgkJCW1p bnZhbD0kKGVjaG8gJHN0ciB8IGF3ayAne3ByaW50ICQxfScpCgkJCW1heHZhbD0kKGVjaG8g JHN0ciB8IGF3ayAne3ByaW50ICQzfScpCgoJCQlpZiBbWyAkbWludmFsIC1sdCAkbWluIF1d OyB0aGVuCgkJCQllY2hvICJFUlJPUjogaW52YWxpZCBtaW4gdmFsdWUgKCRtaW52YWwgPCAk bWluKSAoJGxpbmUpIiAKCQkJCWV4aXQgMQoJCQlmaQoKCQkJaWYgW1sgJG1heHZhbCAtZ3Qg JG1heCBdXTsgdGhlbgoJCQkJZWNobyAiRVJST1I6IGludmFsaWQgbWF4IHZhbHVlICgkbWF4 dmFsID4gJG1heCkgKCRsaW5lKSIgCgkJCQlleGl0IDEKCQkJZmkKCgkJZmkKCglkb25lIDwg cmFuZ2VzLmxvZwp9CgoKZnVuY3Rpb24gY2hlY2tfYnJpbl92YWx1ZXMgewoKCXdoZXJlPSQx CgoJIyBjaGVjayBqdXN0IDElIG9mIHZhbHVlcwoJc2FtcGxlPTAuMDA1CgoJcHNxbCAtdCAt QSB0ZXN0ID4gdmFsdWVzLmxvZyA8PEVPRgpTRVQgZW5hYmxlX3NlcXNjYW4gPSBvbjsKU0VU IGVuYWJsZV9iaXRtYXBzY2FuID0gb2ZmOwpTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgYSwgQ09V TlQoKikgRlJPTSBicmluX3Rlc3QgJHdoZXJlIEdST1VQIEJZIGEgT1JERVIgQlkgYSkgZm9v IFdIRVJFIHJhbmRvbSgpIDwgJHNhbXBsZTsKRU9GCgoJdGFpbCAtbiArMyB2YWx1ZXMubG9n ID4gdmFsdWVzMi5sb2cKCgl3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG8KCgkJSUZTPSd8 JyByZWFkIC1yIC1hIGFycmF5IDw8PCAiJGxpbmUiCgoJCXZhbHVlPSIke2FycmF5WzBdfSIK CQlzZXFjb3VudD0iJHthcnJheVsxXX0iCgoJCXBzcWwgLXQgLUEgdGVzdCA+PiBleHBsYWlu cy5sb2cgMj4mMSA8PEVPRgpTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7ClNFVCBlbmFibGVf Yml0bWFwc2NhbiA9IG9uOwpFWFBMQUlOIFNFTEVDVCBDT1VOVCgqKSBGUk9NIGJyaW5fdGVz dCBXSEVSRSBhID0gJHZhbHVlOwpFT0YKCgkJcHNxbCAtdCAtQSB0ZXN0ID4gdG1wLmxvZyAy PiYxIDw8RU9GClNFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsKU0VUIGVuYWJsZV9iaXRtYXBz Y2FuID0gb247ClNFTEVDVCBDT1VOVCgqKSBGUk9NIGJyaW5fdGVzdCBXSEVSRSBhID0gJHZh bHVlOwpFT0YKCgkJYml0bWFwY291bnQ9YGNhdCB0bXAubG9nIHwgdGFpbCAtbiArM2AKCgkJ ZWNobyAkdmFsdWUgJHNlcWNvdW50ICRiaXRtYXBjb3VudAoKCQlpZiBbICIkc2VxY291bnQi ICE9ICIkYml0bWFwY291bnQiIF07IHRoZW4KCQkJZXhpdCAxCgkJZmkKCglkb25lIDwgdmFs dWVzMi5sb2cKCn0KCndoaWxlIC9iaW4vdHJ1ZTsgZG8KCgkjIDEtMTBNIHJvd3MKCW5yb3dz PSQoKDEwMDAwMDAgKiAoMSArIFJBTkRPTSAlIDEwKSkpCgoJIyBmaWxsZmFjdG9yIDEwLTEw MAoJZmlsbGZhY3Rvcj0kKCgxMCArIChSQU5ET00gJSA5MCkpKQoKCSMgcGFnZSByYW5nZSAx LTEyOAoJcGFnZXJhbmdlPSQoKDEgKyAoUkFORE9NICUgMTI4KSkpCgoJIyBtYXggYWxsb3dl ZCBwYXJhbGxlbCB3b3JrZXJzIDAtOAoJcGFyYWxsZWxfd29ya2Vycz0kKChSQU5ET00gJSA5 KSkKCgkjIG1heCBhbGxvd2VkIG1haW50ZW5hbmNlIHdvcmtlcnMgMC04CgltYWludGVuYW5j ZV93b3JrZXJzPSQoKFJBTkRPTSAlIDkpKQoKCSMgZGlzdGluY3QgdmFsdWVzIDEwMDAgLSBu cm93cy8xMAoJbmRpc3RpbmN0PSQoKDEwMDAgKyAoKG5yb3dzIC8gMTAgLSAxMDAwKSAqIFJB TkRPTSAvIDMyNzY3KSkpCgoJIyB2YXJpYWJpbGl0eSBvZiB2YWx1ZXMgMCUtMTAlIChvdmVy bGFwcykKCXZhcmlhYmlsaXR5PSQoKFJBTkRPTSAlIDExKSkKCgkjIGRlbGV0ZSAwLTUlCglk ZWxldGU9JCgoUkFORE9NICUgNSkpCgoJIyBmaWx0ZXIgdG8gMC01JSBieSBpbmRleCBwcmVk aWNhdGUKCWZpbHRlcj0kKChSQU5ET00gJSA1KSkKCgkjIGluZGV4IG9wY2xhc3MKCW9wY2xh c3M9Im1pbm1heCIKCXI9JCgoUkFORE9NICUgMikpCgoJIyBidXQgNTAlIG9mIHRoZSB0aW1l IHVzZSBibG9vbQoJaWYgWyAiJHIiID09ICIwIiBdOyB0aGVuCgkJb3BjbGFzcz0iYmxvb20i CglmaQoKCWVjaG8gcm93cyAkbnJvd3MgZmlsbGZhY3RvciAkZmlsbGZhY3RvciBwYWdlcmFu Z2UgJHBhZ2VyYW5nZSBvcGNsYXNzICRvcGNsYXNzIHBhcmFsbGVsX3dvcmtlcnMgJHBhcmFs bGVsX3dvcmtlcnMgbWFpbnRlbmFuY2Vfd29ya2VycyAkbWFpbnRlbmFuY2Vfd29ya2VycyBu ZGlzdGluY3QgJG5kaXN0aW5jdCB2YXJpYWJpbGl0eSAkdmFyaWFiaWxpdHkgZGVsZXRlICRk ZWxldGUgZmlsdGVyICRmaWx0ZXIKCglwc3FsIHRlc3QgLWMgImRyb3AgdGFibGUgaWYgZXhp c3RzIGJyaW5fdGVzdCIKCXBzcWwgdGVzdCAtYyAiY3JlYXRlIHRhYmxlIGJyaW5fdGVzdCAo YSBiaWdpbnQpIHdpdGggKGZpbGxmYWN0b3I9JGZpbGxmYWN0b3IpIgoJcHNxbCB0ZXN0IC1j ICJpbnNlcnQgaW50byBicmluX3Rlc3Qgc2VsZWN0ICgoJG5kaXN0aW5jdCAqIChpOjpmbG9h dCAvICRucm93cykgKyByYW5kb20oKSAqICgkbmRpc3RpbmN0ICogJHZhcmlhYmlsaXR5IC8g MTAwLjApKTo6YmlnaW50KSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCRucm93cykgcyhpKSIK CgllY2hvICJpbnNlcnQgaW50byBicmluX3Rlc3Qgc2VsZWN0ICgoJG5kaXN0aW5jdCAqIChp OjpmbG9hdCAvICRucm93cykgKyByYW5kb20oKSAqICgkbmRpc3RpbmN0ICogJHZhcmlhYmls aXR5IC8gMTAwLjApKTo6YmlnaW50KSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCRucm93cykg cyhpKSIKCgkjIG9wdGlvbmFsbHkgZGVsZXRlIGEgY2h1bmsgb2YgZGF0YQoJaWYgWyAiJGRl bGV0ZSIgIT0gIjAiIF07IHRoZW4KCQl4PSQoKFJBTkRPTSAlIG5kaXN0aW5jdCkpCgkJeT0k KCh4ICsgZGVsZXRlICogbmRpc3RpbmN0IC8gMTAwKSkKCQlwc3FsIHRlc3QgLWMgImRlbGV0 ZSBmcm9tIGJyaW5fdGVzdCB3aGVyZSBhIGJldHdlZW4gJHggYW5kICR5IgoJZmkKCgl3aGVy ZT0iIgoJaWYgWyAiJGZpbHRlciIgIT0gIjAiIF07IHRoZW4KCQl4PSQoKFJBTkRPTSAlIG5k aXN0aW5jdCkpCgkJeT0kKCh4ICsgZmlsdGVyICogbmRpc3RpbmN0IC8gMTAwKSkKCQl3aGVy ZT0iV0hFUkUgKGEgQkVUV0VFTiAkeCBBTkQgJHkpIgoJZmkKCglwc3FsIHRlc3QgLWMgInZh Y3V1bSBhbmFseXplIGJyaW5fdGVzdCIKCglpZiBbICIkb3BjbGFzcyIgPT0gIm1pbm1heCIg XTsgdGhlbgoJCWRkbD0iQ1JFQVRFIElOREVYIE9OIGJyaW5fdGVzdCBVU0lORyBicmluIChh KSBXSVRIIChwYWdlc19wZXJfcmFuZ2U9JHBhZ2VyYW5nZSkgJHdoZXJlIgoJZWxzZQoJCSMg c29tZSBoYXJkY29kZWQgdmFsdWVzIHRvIGtlZXAgdGhlIGZpbHRlciBzbWFsbCBlbm91Z2gK CQlkZGw9IkNSRUFURSBJTkRFWCBPTiBicmluX3Rlc3QgVVNJTkcgYnJpbiAoYSBpbnQ4X2Js b29tX29wcyhuX2Rpc3RpbmN0X3Blcl9yYW5nZT01MDAwLCBmYWxzZV9wb3NpdGl2ZV9yYXRl PTAuMDUpKSBXSVRIIChwYWdlc19wZXJfcmFuZ2U9JHBhZ2VyYW5nZSkgJHdoZXJlIgoJZmkK Cglwc3FsIHRlc3QgPiB0bXAubG9nIDw8RU9GClNFVCBtYWludGVuYW5jZV93b3JrX21lbSA9 ICcxR0InOwpTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnMgPSAkcGFyYWxsZWxfd29ya2VyczsK U0VUIG1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzID0gJG1haW50ZW5hbmNlX3dv cmtlcnM7ClNFTEVDVCBleHRyYWN0KGVwb2NoIGZyb20gbm93KCkpLCAnc3RhcnQnOwokZGRs OwpTRUxFQ1QgZXh0cmFjdChlcG9jaCBmcm9tIG5vdygpKSwgJ2VuZCc7CkVPRgoKCXN0YXJ0 PWBncmVwIHN0YXJ0IHRtcC5sb2cgfCBhd2sgJ3twcmludCAkMX0nYAoJZW5kPWBncmVwIGVu ZCB0bXAubG9nIHwgYXdrICd7cHJpbnQgJDF9J2AKCWVjaG8gIjEwMDAgKiAoJGVuZCAtICRz dGFydCkiIHwgYmMgPj4gdGltaW5ncy5sb2cKCgljaGVja19icmluX3JhbmdlcyAkb3BjbGFz cyAkcGFnZXJhbmdlCgoJY2hlY2tfYnJpbl92YWx1ZXMgIiR3aGVyZSIKCmRvbmUK --------------K0fKQakmp7i0eOvKpkcNCMqh--