From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-05.nifty.com (conssluserg-05.nifty.com [210.131.2.90]) by sourceware.org (Postfix) with ESMTPS id 339763858417 for ; Mon, 29 Nov 2021 10:57:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 339763858417 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=nifty.ne.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nifty.ne.jp Received: from Express5800-S70 (z221123.dynamic.ppp.asahi-net.or.jp [110.4.221.123]) (authenticated) by conssluserg-05.nifty.com with ESMTP id 1ATAujNV021759 for ; Mon, 29 Nov 2021 19:56:45 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-05.nifty.com 1ATAujNV021759 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.ne.jp; s=dec2015msa; t=1638183405; bh=NfrOER/1zWoYdR6zDgbNe74/F8rGo+xQU2nX8g7oDBE=; h=Date:From:To:Subject:In-Reply-To:References:From; b=g0V5JxW8f0sRHFWF8wn4a2knxMACNIHGAxqb4XV1Sd0QfFQQ2kK3Veft2sc44Jw1S jDiSe+JnqpLn0141gJQkmvi6gWtf2AESl2wKyttrAMiYcI16inD3sH53jVZmp+Fy/u jvTFH3vGd0WEXf5FwRIBD5H6l0lDxoAm/5Kf/5/4Q5konDglNGq/Ix/iVpWYQh2Zcd CG2prV9sC4tmLdDPIccpAvk2iane/I5KSTTXXb2b4uKYw3+weE/M2kjN8bHlk3Bll7 8gHLyCgVNoyDAc0hmDjSu3JQgPzBzc2nBtMx0pp4HWGvFMOoMRtYm568dU3tScFm0b hMvX88sXJcFGg== X-Nifty-SrcIP: [110.4.221.123] Date: Mon, 29 Nov 2021 19:56:46 +0900 From: Takashi Yano To: newlib@sourceware.org Subject: Re: gcc 11.1.0: printf("%.43f\n", 0x1.52f8a8e32e982p-140): printed value is incorrectly rounded Message-Id: <20211129195646.c4f66449ff164a0c6bad4d2e@nifty.ne.jp> In-Reply-To: <20211128221646.4c6f751029f31af953565702@nifty.ne.jp> References: <20211128164311.c405014bdf153aec8de46c6e@nifty.ne.jp> <20211128213839.90567fce0606267eb0362cc3@nifty.ne.jp> <20211128221646.4c6f751029f31af953565702@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Mon__29_Nov_2021_19_56_46_+0900_SoYkAc9gw4BwNsY6" X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Nov 2021 10:57:53 -0000 This is a multi-part message in MIME format. --Multipart=_Mon__29_Nov_2021_19_56_46_+0900_SoYkAc9gw4BwNsY6 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Sun, 28 Nov 2021 22:16:46 +0900 Takashi Yano wrote: > On Sun, 28 Nov 2021 21:38:39 +0900 > Takashi Yano wrote: > > On Sun, 28 Nov 2021 16:43:11 +0900 > > Takashi Yano wrote: > > > On Thu, 4 Nov 2021 13:24:42 +0100 > > > Corinna Vinschen wrote: > > > > However, a much better fix would be to switch to gdtoa, as the BSDs and > > > > Mingw64 do. > > > > > > I have tried to import gdtoa into newlib from OpenBSD. > > > > > > gdtoa seems to use malloc much, so it may not work in some of > > > platforms due to insufficient heap. Therefore, new ldtoa.c tries > > > gdtoa first and fallbacks to legacy ldtoa if gdtoa fails. > > > > > > To import gdtoa to newlib, I did: > > > 1) Create "machine/ieee.h" which conditionally defines ieee_ext > > > structure and EXT_TO_ARRAY32() macro depend on architecture. > > > 2) Create arith.h which reflects endian of architecture. > > > 3) Merge gdtoa.h with OpenBSD's gdtoa.h. __BEGIN_HIDDEN_DECLS, > > > __END_HIDDEN_DECLS, PROTO_NORMAL() and DEF_STRONG() are > > > defined as dummy in this header. > > > 4) Replace malloc()/free() with _malloc_r()/_free_r(). > > > 5) Implement ACQUIRE_DTOA_LOCK() and FREE_DTOA_LOCK() macros > > > using "sys/lock.h" for multi-threading environment. > > > 6) Remove inclusion of "gd_qnan.h" which is not used. > > > > > > Please see attached patch for more details. > > > > > > I confirmed this works nicely with cygwin. Moreover, it is much > > > faster than legacy ldtoa (more than 4 times faster). > > > > > > However, this may break some other supported platforms. > > > > > > Could anyone please check this? > > > > Ah, in "machine/ieee.h", struct ieee_ext definition for > > LDBL_MANT_DIG==64 and __IEEE_BIG_ENDIAN case, is obviously > > wrong. > > Fixed. Bit order for ARMEL without __VFP_FP__ is fixed. -- Takashi Yano --Multipart=_Mon__29_Nov_2021_19_56_46_+0900_SoYkAc9gw4BwNsY6 Content-Type: application/octet-stream; name="0001-ldtoa-Import-gdtoa-from-OpenBSD.patch" Content-Disposition: attachment; filename="0001-ldtoa-Import-gdtoa-from-OpenBSD.patch" Content-Transfer-Encoding: base64 RnJvbSBmYmFjNzc5NjdkOTBjYTBjZWE1M2JiM2RjMWZjOGI3MTUyNzZkODYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogTW9uLCAyOSBOb3YgMjAyMSAxNzo0NTo1MyArMDkwMApTdWJqZWN0OiBbUEFUQ0hd IGxkdG9hOiBJbXBvcnQgZ2R0b2EgZnJvbSBPcGVuQlNELgoKLS0tCiBuZXdsaWIvbGliYy9pbmNs dWRlL21hY2hpbmUvaWVlZS5oIHwgMTIxICsrKysKIG5ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmls ZS5hbSAgICAgfCAgMTQgKy0KIG5ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmlsZS5pbiAgICAgfCAg ODIgKystCiBuZXdsaWIvbGliYy9zdGRsaWIvYXJpdGguaCAgICAgICAgIHwgICA5ICsKIG5ld2xp Yi9saWJjL3N0ZGxpYi9nZHRvYS1kbWlzYy5jICAgfCAyMjUgKysrKysrKwogbmV3bGliL2xpYmMv c3RkbGliL2dkdG9hLWR0b2EuYyAgICB8IDgzOSArKysrKysrKysrKysrKysrKysrKysrKysrKwog bmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWdkdG9hLmMgICB8IDgzMCArKysrKysrKysrKysrKysr KysrKysrKysrKwogbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWdtaXNjLmMgICB8ICA4NiArKysK IG5ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1sZHRvYS5jICAgfCAxMjQgKysrKwogbmV3bGliL2xp YmMvc3RkbGliL2dkdG9hLW1pc2MuYyAgICB8IDkxMiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLmggICAgICAgICB8IDEzMiArKysrLQogbmV3 bGliL2xpYmMvc3RkbGliL2dkdG9haW1wLmggICAgICB8IDY3MiArKysrKysrKysrKysrKysrKysr KysKIG5ld2xpYi9saWJjL3N0ZGxpYi9sZHRvYS5jICAgICAgICAgfCAgIDcgKwogMTMgZmlsZXMg Y2hhbmdlZCwgNDAxOSBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBuZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgbmV3bGliL2xpYmMvc3RkbGliL2FyaXRoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXds aWIvbGliYy9zdGRsaWIvZ2R0b2EtZG1pc2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG5ld2xpYi9s aWJjL3N0ZGxpYi9nZHRvYS1kdG9hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXdsaWIvbGliYy9z dGRsaWIvZ2R0b2EtZ2R0b2EuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG5ld2xpYi9saWJjL3N0ZGxp Yi9nZHRvYS1nbWlzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbmV3bGliL2xpYmMvc3RkbGliL2dk dG9hLWxkdG9hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2Et bWlzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbmV3bGliL2xpYmMvc3RkbGliL2dkdG9haW1wLmgK CmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbmV3bGli L2xpYmMvaW5jbHVkZS9tYWNoaW5lL2llZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAuLmI3NzY4MjIyMwotLS0gL2Rldi9udWxsCisrKyBiL25ld2xpYi9saWJjL2luY2x1 ZGUvbWFjaGluZS9pZWVlLmgKQEAgLTAsMCArMSwxMjEgQEAKKyNpZm5kZWYgX01BQ0hJTkVfSUVF RV9IXworI2RlZmluZSBfTUFDSElORV9JRUVFX0hfCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj aW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pZWVlZnAuaD4KKyNpbmNs dWRlIDxmbG9hdC5oPgorCisjaWYgTERCTF9NQU5UX0RJRyA9PSAyNAorI2RlZmluZSBFWFRfSU1Q TElDSVRfTkJJVAorI2RlZmluZSBFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7ICAgICAgXAorICAg IChhKVswXSA9IChwKS0+ZXh0X2ZyYWM7ICBcCit9IHdoaWxlICgwKQorI2lmZGVmIF9fSUVFRV9M SVRUTEVfRU5ESUFOCitzdHJ1Y3QgaWVlZV9leHQgeworICAgIHVpbnQzMl90ICAgZXh0X2ZyYWM6 MjM7CisgICAgdWludDMyX3QgICBleHRfZXhwOjg7CisgICAgdWludDMyX3QgICBleHRfc2lnbjox OworfTsKKyNlbmRpZgorI2lmZGVmIF9fSUVFRV9CSUdfRU5ESUFOCitzdHJ1Y3QgaWVlZV9leHQg eworI2lmbmRlZiBfX19JRUVFX0JZVEVTX0xJVFRMRV9FTkRJQU4KKyAgICB1aW50MzJfdCAgIGV4 dF9zaWduOjE7CisgICAgdWludDMyX3QgICBleHRfZXhwOjg7CisgICAgdWludDMyX3QgICBleHRf ZnJhYzoyMzsKKyNlbHNlIC8qIEFSTUVMIHdpdGhvdXQgX19WRlBfRlBfXyAqLworICAgIHVpbnQz Ml90ICAgZXh0X2ZyYWM6MjM7CisgICAgdWludDMyX3QgICBleHRfZXhwOjg7CisgICAgdWludDMy X3QgICBleHRfc2lnbjoxOworI2VuZGlmCit9OworI2VuZGlmCisjZWxpZiBMREJMX01BTlRfRElH ID09IDUzCisjZGVmaW5lIEVYVF9JTVBMSUNJVF9OQklUCisjZGVmaW5lIEVYVF9UT19BUlJBWTMy KHAsIGEpIGRvIHsgICAgICAgXAorICAgIChhKVswXSA9IChwKS0+ZXh0X2ZyYWNsOyAgXAorICAg IChhKVsxXSA9IChwKS0+ZXh0X2ZyYWNoOyAgXAorfSB3aGlsZSAoMCkKKyNpZmRlZiBfX0lFRUVf TElUVExFX0VORElBTgorc3RydWN0IGllZWVfZXh0IHsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFj bDsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjaDoyMDsKKyAgICB1aW50MzJfdCAgIGV4dF9leHA6 MTE7CisgICAgdWludDMyX3QgICBleHRfc2lnbjoxOworfTsKKyNlbmRpZgorI2lmZGVmIF9fSUVF RV9CSUdfRU5ESUFOCitzdHJ1Y3QgaWVlZV9leHQgeworI2lmbmRlZiBfX19JRUVFX0JZVEVTX0xJ VFRMRV9FTkRJQU4KKyAgICB1aW50MzJfdCAgIGV4dF9zaWduOjE7CisgICAgdWludDMyX3QgICBl eHRfZXhwOjExOworICAgIHVpbnQzMl90ICAgZXh0X2ZyYWNoOjIwOworI2Vsc2UgLyogQVJNRUwg d2l0aG91dCBfX1ZGUF9GUF9fICovCisgICAgdWludDMyX3QgICBleHRfZnJhY2g6MjA7CisgICAg dWludDMyX3QgICBleHRfZXhwOjExOworICAgIHVpbnQzMl90ICAgZXh0X3NpZ246MTsKKyNlbmRp ZgorICAgIHVpbnQzMl90ICAgZXh0X2ZyYWNsOworfTsKKyNlbmRpZgorI2VsaWYgTERCTF9NQU5U X0RJRyA9PSA2NAorI2RlZmluZSBFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7ICAgICAgIFwKKyAg ICAoYSlbMF0gPSAocCktPmV4dF9mcmFjbDsgIFwKKyAgICAoYSlbMV0gPSAocCktPmV4dF9mcmFj aDsgIFwKK30gd2hpbGUgKDApCisjaWZkZWYgX19JRUVFX0xJVFRMRV9FTkRJQU4gLyogZm9yIElu dGVsIENQVSAqLworc3RydWN0IGllZWVfZXh0IHsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjbDsK KyAgICB1aW50MzJfdCAgIGV4dF9mcmFjaDsKKyAgICB1aW50MzJfdCAgIGV4dF9leHA6MTU7Cisg ICAgdWludDMyX3QgICBleHRfc2lnbjoxOworICAgIHVpbnQzMl90ICAgZXh0X3BhZGw6MTY7Cisg ICAgdWludDMyX3QgICBleHRfcGFkaDsKK307CisjZW5kaWYKKyNpZmRlZiBfX0lFRUVfQklHX0VO RElBTiAvKiBmb3IgbTY4ayAqLworc3RydWN0IGllZWVfZXh0IHsKKyAgICB1aW50MzJfdCAgIGV4 dF9zaWduOjE7CisgICAgdWludDMyX3QgICBleHRfZXhwOjE1OworICAgIHVpbnQzMl90ICAgZXh0 X3BhZDoxNjsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjaDsKKyAgICB1aW50MzJfdCAgIGV4dF9m cmFjbDsKK307CisjZW5kaWYKKyNlbGlmIExEQkxfTUFOVF9ESUcgPT0gMTEzCisjZGVmaW5lIEVY VF9JTVBMSUNJVF9OQklUCisjZGVmaW5lIEVYVF9UT19BUlJBWTMyKHAsIGEpIGRvIHsgICAgICAg IFwKKyAgICAoYSlbMF0gPSAocCktPmV4dF9mcmFjbDsgICBcCisgICAgKGEpWzFdID0gKHApLT5l eHRfZnJhY2xtOyAgXAorICAgIChhKVsyXSA9IChwKS0+ZXh0X2ZyYWNobTsgIFwKKyAgICAoYSlb M10gPSAocCktPmV4dF9mcmFjaDsgICBcCit9IHdoaWxlICgwKQorI2lmZGVmIF9fSUVFRV9MSVRU TEVfRU5ESUFOCitzdHJ1Y3QgaWVlZV9leHQgeworICAgIHVpbnQzMl90ICAgZXh0X2ZyYWNsOwor ICAgIHVpbnQzMl90ICAgZXh0X2ZyYWNsbTsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjaG07Cisg ICAgdWludDMyX3QgICBleHRfZnJhY2g6MTY7CisgICAgdWludDMyX3QgICBleHRfZXhwOjE1Owor ICAgIHVpbnQzMl90ICAgZXh0X3NpZ246MTsKK307CisjZW5kaWYKKyNpZmRlZiBfX0lFRUVfQklH X0VORElBTgorc3RydWN0IGllZWVfZXh0IHsKKyNpZm5kZWYgX19fSUVFRV9CWVRFU19MSVRUTEVf RU5ESUFOCisgICAgdWludDMyX3QgICBleHRfc2lnbjoxOworICAgIHVpbnQzMl90ICAgZXh0X2V4 cDoxNTsKKyAgICB1aW50MzJfdCAgIGV4dF9mcmFjaDoxNjsKKyNlbHNlIC8qIEFSTUVMIHdpdGhv dXQgX19WRlBfRlBfXyAqLworICAgIHVpbnQzMl90ICAgZXh0X2ZyYWNoOjE2OworICAgIHVpbnQz Ml90ICAgZXh0X2V4cDoxNTsKKyAgICB1aW50MzJfdCAgIGV4dF9zaWduOjE7CisjZW5kaWYKKyAg ICB1aW50MzJfdCAgIGV4dF9mcmFjaG07CisgICAgdWludDMyX3QgICBleHRfZnJhY2xtOworICAg IHVpbnQzMl90ICAgZXh0X2ZyYWNsOworfTsKKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiBf TUFDSElORV9JRUVFX0hfICovCmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9zdGRsaWIvTWFrZWZp bGUuYW0gYi9uZXdsaWIvbGliYy9zdGRsaWIvTWFrZWZpbGUuYW0KaW5kZXggMzU3ZTM3YmViLi4w NGIyMmQ0NzcgMTAwNjQ0Ci0tLSBhL25ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmlsZS5hbQorKysg Yi9uZXdsaWIvbGliYy9zdGRsaWIvTWFrZWZpbGUuYW0KQEAgLTM4LDYgKzM4LDEyIEBAIEdFTkVS QUxfU09VUkNFUyA9IFwKIAlsYWJzLmMgCQlcCiAJbGRpdi5jICAJXAogCWxkdG9hLmMJCVwKKwln ZHRvYS1sZHRvYS5jCVwKKwlnZHRvYS1nZHRvYS5jCVwKKwlnZHRvYS1kdG9hLmMJXAorCWdkdG9h LW1pc2MuYwlcCisJZ2R0b2EtZG1pc2MuYwlcCisJZ2R0b2EtZ21pc2MuYwlcCiAJbWFsbG9jLmMg IAlcCiAJbWJsZW4uYwkJXAogCW1ibGVuX3IuYwlcCkBAIC0zMTEsNyArMzE3LDEzIEBAIENIRVdP VVRfRklMRVM9IFwKIENIQVBURVJTID0gc3RkbGliLnRleAogCiAkKGxwZngpZHRvYS4kKG9leHQp OiBkdG9hLmMgbXByZWMuaAotJChscGZ4KWxkdG9hLiQob2V4dCk6IGxkdG9hLmMgbXByZWMuaAor JChscGZ4KWxkdG9hLiQob2V4dCk6IGxkdG9hLmMgbXByZWMuaCBnZHRvYS5oCiskKGxwZngpZ2R0 b2EtbGR0b2EuJChvZXh0KTogZ2R0b2EtbGR0b2EuYyBnZHRvYWltcC5oIGdkdG9hLmggYXJpdGgu aAorJChscGZ4KWdkdG9hLWdkdG9hLiQob2V4dCk6IGdkdG9hLWdkdG9hLmMgZ2R0b2FpbXAuaCBn ZHRvYS5oIGFyaXRoLmgKKyQobHBmeClnZHRvYS1kdG9hLiQob2V4dCk6IGdkdG9hLWR0b2EuYyBn ZHRvYWltcC5oIGdkdG9hLmggYXJpdGguaAorJChscGZ4KWdkdG9hLW1pc2MuJChvZXh0KTogZ2R0 b2EtbWlzYy5jIGdkdG9haW1wLmggZ2R0b2EuaCBhcml0aC5oCiskKGxwZngpZ2R0b2EtZG1pc2Mu JChvZXh0KTogZ2R0b2EtZG1pc2MuYyBnZHRvYWltcC5oIGdkdG9hLmggYXJpdGguaAorJChscGZ4 KWdkdG9hLWdtaXNjLiQob2V4dCk6IGdkdG9hLWdtaXNjLmMgZ2R0b2FpbXAuaCBnZHRvYS5oIGFy aXRoLmgKICQobHBmeCllY3Z0YnVmLiQob2V4dCk6IGVjdnRidWYuYyBtcHJlYy5oCiAkKGxwZngp bWJ0b3djX3IuJChvZXh0KTogbWJ0b3djX3IuYyBtYmN0eXBlLmgKICQobHBmeCltcHJlYy4kKG9l eHQpOiBtcHJlYy5jIG1wcmVjLmgKZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3N0ZGxpYi9NYWtl ZmlsZS5pbiBiL25ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmlsZS5pbgppbmRleCBhODEyYjZhOTUu LjRlODkxY2VkOSAxMDA2NDQKLS0tIGEvbmV3bGliL2xpYmMvc3RkbGliL01ha2VmaWxlLmluCisr KyBiL25ld2xpYi9saWJjL3N0ZGxpYi9NYWtlZmlsZS5pbgpAQCAtMTAxLDcgKzEwMSwxMCBAQCBh bV9fb2JqZWN0c18yID0gbGliX2EtX19hZGp1c3QuJChPQkpFWFQpIGxpYl9hLV9fYXRleGl0LiQo T0JKRVhUKSBcCiAJbGliX2EtZ2V0ZW52X3IuJChPQkpFWFQpIGxpYl9hLWltYXhhYnMuJChPQkpF WFQpIFwKIAlsaWJfYS1pbWF4ZGl2LiQoT0JKRVhUKSBsaWJfYS1pdG9hLiQoT0JKRVhUKSBcCiAJ bGliX2EtbGFicy4kKE9CSkVYVCkgbGliX2EtbGRpdi4kKE9CSkVYVCkgXAotCWxpYl9hLWxkdG9h LiQoT0JKRVhUKSBsaWJfYS1tYWxsb2MuJChPQkpFWFQpIFwKKwlsaWJfYS1sZHRvYS4kKE9CSkVY VCkgbGliX2EtZ2R0b2EtbGR0b2EuJChPQkpFWFQpIFwKKwlsaWJfYS1nZHRvYS1nZHRvYS4kKE9C SkVYVCkgbGliX2EtZ2R0b2EtZHRvYS4kKE9CSkVYVCkgXAorCWxpYl9hLWdkdG9hLW1pc2MuJChP QkpFWFQpIGxpYl9hLWdkdG9hLWRtaXNjLiQoT0JKRVhUKSBcCisJbGliX2EtZ2R0b2EtZ21pc2Mu JChPQkpFWFQpIGxpYl9hLW1hbGxvYy4kKE9CSkVYVCkgXAogCWxpYl9hLW1ibGVuLiQoT0JKRVhU KSBsaWJfYS1tYmxlbl9yLiQoT0JKRVhUKSBcCiAJbGliX2EtbWJzdG93Y3MuJChPQkpFWFQpIGxp Yl9hLW1ic3Rvd2NzX3IuJChPQkpFWFQpIFwKIAlsaWJfYS1tYnRvd2MuJChPQkpFWFQpIGxpYl9h LW1idG93Y19yLiQoT0JKRVhUKSBcCkBAIC0xNjUsMTQgKzE2OCwxNSBAQCBhbV9fb2JqZWN0c185 ID0gX19hZGp1c3QubG8gX19hdGV4aXQubG8gX19jYWxsX2F0ZXhpdC5sbyBfX2V4cDEwLmxvIFwK IAlkaXYubG8gZHRvYS5sbyBkdG9hc3R1Yi5sbyBlbnZpcm9uLmxvIGVudmxvY2subG8gZXByaW50 Zi5sbyBcCiAJZXhpdC5sbyBnZHRvYS1nZXRoZXgubG8gZ2R0b2EtaGV4bmFuLmxvIGdldGVudi5s byBnZXRlbnZfci5sbyBcCiAJaW1heGFicy5sbyBpbWF4ZGl2LmxvIGl0b2EubG8gbGFicy5sbyBs ZGl2LmxvIGxkdG9hLmxvIFwKLQltYWxsb2MubG8gbWJsZW4ubG8gbWJsZW5fci5sbyBtYnN0b3dj cy5sbyBtYnN0b3djc19yLmxvIFwKLQltYnRvd2MubG8gbWJ0b3djX3IubG8gbWxvY2subG8gbXBy ZWMubG8gbXN0YXRzLmxvIFwKLQlvbl9leGl0X2FyZ3MubG8gcXVpY2tfZXhpdC5sbyByYW5kLmxv IHJhbmRfci5sbyByYW5kb20ubG8gXAotCXJlYWxsb2MubG8gcmVhbGxvY2FycmF5LmxvIHJlYWxs b2NmLmxvIHNiX2NoYXJzZXRzLmxvIFwKLQlzdHJ0b2QubG8gc3RydG9pbWF4LmxvIHN0cnRvbC5s byBzdHJ0b3VsLmxvIHN0cnRvdW1heC5sbyBcCi0JdXRvYS5sbyB3Y3N0b2QubG8gd2NzdG9pbWF4 LmxvIHdjc3RvbC5sbyB3Y3N0b3VsLmxvIFwKLQl3Y3N0b3VtYXgubG8gd2NzdG9tYnMubG8gd2Nz dG9tYnNfci5sbyB3Y3RvbWIubG8gd2N0b21iX3IubG8gXAotCSQoYW1fX29iamVjdHNfOCkKKwln ZHRvYS1sZHRvYS5sbyBnZHRvYS1nZHRvYS5sbyBnZHRvYS1kdG9hLmxvIGdkdG9hLW1pc2MubG8g XAorCWdkdG9hLWRtaXNjLmxvIGdkdG9hLWdtaXNjLmxvIG1hbGxvYy5sbyBtYmxlbi5sbyBtYmxl bl9yLmxvIFwKKwltYnN0b3djcy5sbyBtYnN0b3djc19yLmxvIG1idG93Yy5sbyBtYnRvd2Nfci5s byBtbG9jay5sbyBcCisJbXByZWMubG8gbXN0YXRzLmxvIG9uX2V4aXRfYXJncy5sbyBxdWlja19l eGl0LmxvIHJhbmQubG8gXAorCXJhbmRfci5sbyByYW5kb20ubG8gcmVhbGxvYy5sbyByZWFsbG9j YXJyYXkubG8gcmVhbGxvY2YubG8gXAorCXNiX2NoYXJzZXRzLmxvIHN0cnRvZC5sbyBzdHJ0b2lt YXgubG8gc3RydG9sLmxvIHN0cnRvdWwubG8gXAorCXN0cnRvdW1heC5sbyB1dG9hLmxvIHdjc3Rv ZC5sbyB3Y3N0b2ltYXgubG8gd2NzdG9sLmxvIFwKKwl3Y3N0b3VsLmxvIHdjc3RvdW1heC5sbyB3 Y3N0b21icy5sbyB3Y3N0b21ic19yLmxvIHdjdG9tYi5sbyBcCisJd2N0b21iX3IubG8gJChhbV9f b2JqZWN0c184KQogYW1fX29iamVjdHNfMTAgPSBhcmM0cmFuZG9tLmxvIGFyYzRyYW5kb21fdW5p Zm9ybS5sbyBjeGFfYXRleGl0LmxvIFwKIAljeGFfZmluYWxpemUubG8gZHJhbmQ0OC5sbyBlY3Z0 YnVmLmxvIGVmZ2N2dC5sbyBlcmFuZDQ4LmxvIFwKIAlqcmFuZDQ4LmxvIGxjb25nNDgubG8gbHJh bmQ0OC5sbyBtcmFuZDQ4LmxvIG1zaXplLmxvIG10cmltLmxvIFwKQEAgLTM1NCw2ICszNTgsNyBA QCBwZGZkaXIgPSBAcGRmZGlyQAogcHJlZml4ID0gQHByZWZpeEAKIHByb2dyYW1fdHJhbnNmb3Jt X25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKIHBzZGlyID0gQHBzZGlyQAorcnVuc3Rh dGVkaXIgPSBAcnVuc3RhdGVkaXJACiBzYmluZGlyID0gQHNiaW5kaXJACiBzaGFyZWRfbWFjaGlu ZV9kaXIgPSBAc2hhcmVkX21hY2hpbmVfZGlyQAogc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3Rh dGVkaXJACkBAIC0zNzIsMTMgKzM3NywxNCBAQCBHRU5FUkFMX1NPVVJDRVMgPSBfX2FkanVzdC5j IF9fYXRleGl0LmMgX19jYWxsX2F0ZXhpdC5jIF9fZXhwMTAuYyBcCiAJYXRleGl0LmMgYXRvZi5j IGF0b2ZmLmMgYXRvaS5jIGF0b2wuYyBjYWxsb2MuYyBkaXYuYyBkdG9hLmMgXAogCWR0b2FzdHVi LmMgZW52aXJvbi5jIGVudmxvY2suYyBlcHJpbnRmLmMgZXhpdC5jIGdkdG9hLWdldGhleC5jIFwK IAlnZHRvYS1oZXhuYW4uYyBnZXRlbnYuYyBnZXRlbnZfci5jIGltYXhhYnMuYyBpbWF4ZGl2LmMg aXRvYS5jIFwKLQlsYWJzLmMgbGRpdi5jIGxkdG9hLmMgbWFsbG9jLmMgbWJsZW4uYyBtYmxlbl9y LmMgbWJzdG93Y3MuYyBcCi0JbWJzdG93Y3Nfci5jIG1idG93Yy5jIG1idG93Y19yLmMgbWxvY2su YyBtcHJlYy5jIG1zdGF0cy5jIFwKLQlvbl9leGl0X2FyZ3MuYyBxdWlja19leGl0LmMgcmFuZC5j IHJhbmRfci5jIHJhbmRvbS5jIHJlYWxsb2MuYyBcCi0JcmVhbGxvY2FycmF5LmMgcmVhbGxvY2Yu YyBzYl9jaGFyc2V0cy5jIHN0cnRvZC5jIHN0cnRvaW1heC5jIFwKLQlzdHJ0b2wuYyBzdHJ0b3Vs LmMgc3RydG91bWF4LmMgdXRvYS5jIHdjc3RvZC5jIHdjc3RvaW1heC5jIFwKLQl3Y3N0b2wuYyB3 Y3N0b3VsLmMgd2NzdG91bWF4LmMgd2NzdG9tYnMuYyB3Y3N0b21ic19yLmMgXAotCXdjdG9tYi5j IHdjdG9tYl9yLmMgJChhbV9fYXBwZW5kXzEpCisJbGFicy5jIGxkaXYuYyBsZHRvYS5jIGdkdG9h LWxkdG9hLmMgZ2R0b2EtZ2R0b2EuYyBnZHRvYS1kdG9hLmMgXAorCWdkdG9hLW1pc2MuYyBnZHRv YS1kbWlzYy5jIGdkdG9hLWdtaXNjLmMgbWFsbG9jLmMgbWJsZW4uYyBcCisJbWJsZW5fci5jIG1i c3Rvd2NzLmMgbWJzdG93Y3Nfci5jIG1idG93Yy5jIG1idG93Y19yLmMgbWxvY2suYyBcCisJbXBy ZWMuYyBtc3RhdHMuYyBvbl9leGl0X2FyZ3MuYyBxdWlja19leGl0LmMgcmFuZC5jIHJhbmRfci5j IFwKKwlyYW5kb20uYyByZWFsbG9jLmMgcmVhbGxvY2FycmF5LmMgcmVhbGxvY2YuYyBzYl9jaGFy c2V0cy5jIFwKKwlzdHJ0b2QuYyBzdHJ0b2ltYXguYyBzdHJ0b2wuYyBzdHJ0b3VsLmMgc3RydG91 bWF4LmMgdXRvYS5jIFwKKwl3Y3N0b2QuYyB3Y3N0b2ltYXguYyB3Y3N0b2wuYyB3Y3N0b3VsLmMg d2NzdG91bWF4LmMgd2NzdG9tYnMuYyBcCisJd2NzdG9tYnNfci5jIHdjdG9tYi5jIHdjdG9tYl9y LmMgJChhbV9fYXBwZW5kXzEpCiBATkVXTElCX05BTk9fTUFMTE9DX0ZBTFNFQE1BTElHTlIgPSBt YWxpZ25yCiBATkVXTElCX05BTk9fTUFMTE9DX1RSVUVATUFMSUdOUiA9IG5hbm8tbWFsaWducgog QE5FV0xJQl9OQU5PX01BTExPQ19GQUxTRUBNQUxMT1BUUiA9IG1hbGxvcHRyCkBAIC04MjcsNiAr ODMzLDQyIEBAIGxpYl9hLWxkdG9hLm86IGxkdG9hLmMKIGxpYl9hLWxkdG9hLm9iajogbGR0b2Eu YwogCSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQ UEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9h LWxkdG9hLm9iaiBgaWYgdGVzdCAtZiAnbGR0b2EuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsZHRv YS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9sZHRvYS5jJzsgZmlgCiAKK2xpYl9h LWdkdG9hLWxkdG9hLm86IGdkdG9hLWxkdG9hLmMKKwkkKENDKSAkKERFRlMpICQoREVGQVVMVF9J TkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJfYV9D RkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJfYS1nZHRvYS1sZHRvYS5vIGB0ZXN0IC1mICdnZHRv YS1sZHRvYS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZHRvYS1sZHRvYS5jCisKK2xpYl9hLWdk dG9hLWxkdG9hLm9iajogZ2R0b2EtbGR0b2EuYworCSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lO Q0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NG TEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLWxkdG9hLm9iaiBgaWYgdGVzdCAtZiAn Z2R0b2EtbGR0b2EuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZHRvYS1sZHRvYS5jJzsgZWxzZSAk KENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZHRvYS1sZHRvYS5jJzsgZmlgCisKK2xpYl9hLWdkdG9h LWdkdG9hLm86IGdkdG9hLWdkdG9hLmMKKwkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURF UykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJfYV9DRkxBR1Mp ICQoQ0ZMQUdTKSAtYyAtbyBsaWJfYS1nZHRvYS1nZHRvYS5vIGB0ZXN0IC1mICdnZHRvYS1nZHRv YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZHRvYS1nZHRvYS5jCisKK2xpYl9hLWdkdG9hLWdk dG9hLm9iajogZ2R0b2EtZ2R0b2EuYworCSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVT KSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykg JChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLWdkdG9hLm9iaiBgaWYgdGVzdCAtZiAnZ2R0b2Et Z2R0b2EuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZHRvYS1nZHRvYS5jJzsgZWxzZSAkKENZR1BB VEhfVykgJyQoc3JjZGlyKS9nZHRvYS1nZHRvYS5jJzsgZmlgCisKK2xpYl9hLWdkdG9hLWR0b2Eu bzogZ2R0b2EtZHRvYS5jCisJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5D TFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliX2FfQ0ZMQUdTKSAkKENGTEFH UykgLWMgLW8gbGliX2EtZ2R0b2EtZHRvYS5vIGB0ZXN0IC1mICdnZHRvYS1kdG9hLmMnIHx8IGVj aG8gJyQoc3JjZGlyKS8nYGdkdG9hLWR0b2EuYworCitsaWJfYS1nZHRvYS1kdG9hLm9iajogZ2R0 b2EtZHRvYS5jCisJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMp ICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliX2FfQ0ZMQUdTKSAkKENGTEFHUykgLWMg LW8gbGliX2EtZ2R0b2EtZHRvYS5vYmogYGlmIHRlc3QgLWYgJ2dkdG9hLWR0b2EuYyc7IHRoZW4g JChDWUdQQVRIX1cpICdnZHRvYS1kdG9hLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIp L2dkdG9hLWR0b2EuYyc7IGZpYAorCitsaWJfYS1nZHRvYS1taXNjLm86IGdkdG9hLW1pc2MuYwor CSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZM QUdTKSAkKENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdk dG9hLW1pc2MubyBgdGVzdCAtZiAnZ2R0b2EtbWlzYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bn ZHRvYS1taXNjLmMKKworbGliX2EtZ2R0b2EtbWlzYy5vYmo6IGdkdG9hLW1pc2MuYworCSQoQ0Mp ICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAk KENQUEZMQUdTKSAkKGxpYl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLW1p c2Mub2JqIGBpZiB0ZXN0IC1mICdnZHRvYS1taXNjLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2R0 b2EtbWlzYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZHRvYS1taXNjLmMnOyBm aWAKKworbGliX2EtZ2R0b2EtZG1pc2MubzogZ2R0b2EtZG1pc2MuYworCSQoQ0MpICQoREVGUykg JChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdT KSAkKGxpYl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLWRtaXNjLm8gYHRl c3QgLWYgJ2dkdG9hLWRtaXNjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdkdG9hLWRtaXNjLmMK KworbGliX2EtZ2R0b2EtZG1pc2Mub2JqOiBnZHRvYS1kbWlzYy5jCisJJChDQykgJChERUZTKSAk KERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1Mp ICQobGliX2FfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliX2EtZ2R0b2EtZG1pc2Mub2JqIGBp ZiB0ZXN0IC1mICdnZHRvYS1kbWlzYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dkdG9hLWRtaXNj LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dkdG9hLWRtaXNjLmMnOyBmaWAKKwor bGliX2EtZ2R0b2EtZ21pc2MubzogZ2R0b2EtZ21pc2MuYworCSQoQ0MpICQoREVGUykgJChERUZB VUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxp Yl9hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYl9hLWdkdG9hLWdtaXNjLm8gYHRlc3QgLWYg J2dkdG9hLWdtaXNjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdkdG9hLWdtaXNjLmMKKworbGli X2EtZ2R0b2EtZ21pc2Mub2JqOiBnZHRvYS1nbWlzYy5jCisJJChDQykgJChERUZTKSAkKERFRkFV TFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGli X2FfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliX2EtZ2R0b2EtZ21pc2Mub2JqIGBpZiB0ZXN0 IC1mICdnZHRvYS1nbWlzYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dkdG9hLWdtaXNjLmMnOyBl bHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dkdG9hLWdtaXNjLmMnOyBmaWAKKwogbGliX2Et bWFsbG9jLm86IG1hbGxvYy5jCiAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQo SU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliX2FfQ0ZMQUdTKSAkKENG TEFHUykgLWMgLW8gbGliX2EtbWFsbG9jLm8gYHRlc3QgLWYgJ21hbGxvYy5jJyB8fCBlY2hvICck KHNyY2RpcikvJ2BtYWxsb2MuYwogCkBAIC0xNjEwLDcgKzE2NTIsMTMgQEAgJChscGZ4KSQoTUFM TE9QVFIpLiQob2V4dCk6ICQoTUFMTE9DUikuYwogCSQoTUFMTE9DX0NPTVBJTEUpIC1EREVGSU5F X01BTExPUFQgLWMgJChzcmNkaXIpLyQoTUFMTE9DUikuYyAtbyAkQAogCiAkKGxwZngpZHRvYS4k KG9leHQpOiBkdG9hLmMgbXByZWMuaAotJChscGZ4KWxkdG9hLiQob2V4dCk6IGxkdG9hLmMgbXBy ZWMuaAorJChscGZ4KWxkdG9hLiQob2V4dCk6IGxkdG9hLmMgbXByZWMuaCBnZHRvYS5oCiskKGxw ZngpZ2R0b2EtbGR0b2EuJChvZXh0KTogZ2R0b2EtbGR0b2EuYyBnZHRvYWltcC5oIGdkdG9hLmgg YXJpdGguaAorJChscGZ4KWdkdG9hLWdkdG9hLiQob2V4dCk6IGdkdG9hLWdkdG9hLmMgZ2R0b2Fp bXAuaCBnZHRvYS5oIGFyaXRoLmgKKyQobHBmeClnZHRvYS1kdG9hLiQob2V4dCk6IGdkdG9hLWR0 b2EuYyBnZHRvYWltcC5oIGdkdG9hLmggYXJpdGguaAorJChscGZ4KWdkdG9hLW1pc2MuJChvZXh0 KTogZ2R0b2EtbWlzYy5jIGdkdG9haW1wLmggZ2R0b2EuaCBhcml0aC5oCiskKGxwZngpZ2R0b2Et ZG1pc2MuJChvZXh0KTogZ2R0b2EtZG1pc2MuYyBnZHRvYWltcC5oIGdkdG9hLmggYXJpdGguaAor JChscGZ4KWdkdG9hLWdtaXNjLiQob2V4dCk6IGdkdG9hLWdtaXNjLmMgZ2R0b2FpbXAuaCBnZHRv YS5oIGFyaXRoLmgKICQobHBmeCllY3Z0YnVmLiQob2V4dCk6IGVjdnRidWYuYyBtcHJlYy5oCiAk KGxwZngpbWJ0b3djX3IuJChvZXh0KTogbWJ0b3djX3IuYyBtYmN0eXBlLmgKICQobHBmeCltcHJl Yy4kKG9leHQpOiBtcHJlYy5jIG1wcmVjLmgKZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3N0ZGxp Yi9hcml0aC5oIGIvbmV3bGliL2xpYmMvc3RkbGliL2FyaXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwLi5kM2I4NGQ4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXdsaWIv bGliYy9zdGRsaWIvYXJpdGguaApAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDxtYWNoaW5lL2ll ZWVmcC5oPgorCisjaWZkZWYgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgSUVFRV84MDg3 CisjZW5kaWYKKworI2lmZGVmIF9fSUVFRV9CSUdfRU5ESUFOCisjZGVmaW5lIElFRUVfTUM2OGsK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWRtaXNjLmMgYi9u ZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtZG1pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAuLmYzZDhlYTcxYQotLS0gL2Rldi9udWxsCisrKyBiL25ld2xpYi9saWJjL3N0 ZGxpYi9nZHRvYS1kbWlzYy5jCkBAIC0wLDAgKzEsMjI1IEBACisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0 aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5 OTggYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNz aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFu ZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBo ZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIg YXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9m IEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2lu ZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2Fy ZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQg RElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJ TkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBC RSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNF LCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVH TElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4K KworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5 IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQg IiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisj aWZuZGVmIE1VTFRJUExFX1RIUkVBRFMKKyBjaGFyICpkdG9hX3Jlc3VsdDsKKyNlbmRpZgorCisg Y2hhciAqCisjaWZkZWYgS1JfaGVhZGVycworcnZfYWxsb2MoaSkgaW50IGk7CisjZWxzZQorcnZf YWxsb2MoaW50IGkpCisjZW5kaWYKK3sKKwlpbnQgaiwgaywgKnI7CisKKwlqID0gc2l6ZW9mKFVM b25nKTsKKwlmb3IoayA9IDA7CisJCXNpemVvZihCaWdpbnQpIC0gc2l6ZW9mKFVMb25nKSAtIHNp emVvZihpbnQpICsgaiA8PSBpOworCQlqIDw8PSAxKQorCQkJaysrOworCXIgPSAoaW50KilCYWxs b2Moayk7CisJaWYgKHIgPT0gTlVMTCkKKwkJcmV0dXJuICgKKyNpZm5kZWYgTVVMVElQTEVfVEhS RUFEUworCQlkdG9hX3Jlc3VsdCA9CisjZW5kaWYKKwkJCU5VTEwpOworCSpyID0gazsKKwlyZXR1 cm4KKyNpZm5kZWYgTVVMVElQTEVfVEhSRUFEUworCWR0b2FfcmVzdWx0ID0KKyNlbmRpZgorCQko Y2hhciAqKShyKzEpOworCX0KKworIGNoYXIgKgorI2lmZGVmIEtSX2hlYWRlcnMKK25ydl9hbGxv YyhzLCBydmUsIG4pIGNoYXIgKnMsICoqcnZlOyBpbnQgbjsKKyNlbHNlCitucnZfYWxsb2MoY2hh ciAqcywgY2hhciAqKnJ2ZSwgaW50IG4pCisjZW5kaWYKK3sKKwljaGFyICpydiwgKnQ7CisKKwl0 ID0gcnYgPSBydl9hbGxvYyhuKTsKKwlpZiAodCA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOwor CXdoaWxlKCgqdCA9ICpzKyspICE9MCkKKwkJdCsrOworCWlmIChydmUpCisJCSpydmUgPSB0Owor CXJldHVybiBydjsKKwl9CisKKy8qIGZyZWVkdG9hKHMpIG11c3QgYmUgdXNlZCB0byBmcmVlIHZh bHVlcyBzIHJldHVybmVkIGJ5IGR0b2EKKyAqIHdoZW4gTVVMVElQTEVfVEhSRUFEUyBpcyAjZGVm aW5lZC4gIEl0IHNob3VsZCBiZSB1c2VkIGluIGFsbCBjYXNlcywKKyAqIGJ1dCBmb3IgY29uc2lz dGVuY3kgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIGR0b2EsIGl0IGlzIG9wdGlvbmFsCisgKiB3 aGVuIE1VTFRJUExFX1RIUkVBRFMgaXMgbm90IGRlZmluZWQuCisgKi8KKworIHZvaWQKKyNpZmRl ZiBLUl9oZWFkZXJzCitmcmVlZHRvYShzKSBjaGFyICpzOworI2Vsc2UKK2ZyZWVkdG9hKGNoYXIg KnMpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmIgPSAoQmlnaW50ICopKChpbnQgKilzIC0gMSk7CisJ Yi0+bWF4d2RzID0gMSA8PCAoYi0+ayA9ICooaW50KiliKTsKKwlCZnJlZShiKTsKKyNpZm5kZWYg TVVMVElQTEVfVEhSRUFEUworCWlmIChzID09IGR0b2FfcmVzdWx0KQorCQlkdG9hX3Jlc3VsdCA9 IDA7CisjZW5kaWYKKwl9CitERUZfU1RST05HKGZyZWVkdG9hKTsKKworIGludAorcXVvcmVtCisj aWZkZWYgS1JfaGVhZGVycworCShiLCBTKSBCaWdpbnQgKmIsICpTOworI2Vsc2UKKwkoQmlnaW50 ICpiLCBCaWdpbnQgKlMpCisjZW5kaWYKK3sKKwlpbnQgbjsKKwlVTG9uZyAqYngsICpieGUsIHEs ICpzeCwgKnN4ZTsKKyNpZmRlZiBVTExvbmcKKwlVTExvbmcgYm9ycm93LCBjYXJyeSwgeSwgeXM7 CisjZWxzZQorCVVMb25nIGJvcnJvdywgY2FycnksIHksIHlzOworI2lmZGVmIFBhY2tfMzIKKwlV TG9uZyBzaSwgeiwgenM7CisjZW5kaWYKKyNlbmRpZgorCisJbiA9IFMtPndkczsKKyNpZmRlZiBE RUJVRworCS8qZGVidWcqLyBpZiAoYi0+d2RzID4gbikKKwkvKmRlYnVnKi8JQnVnKCJvdmVyc2l6 ZSBiIGluIHF1b3JlbSIpOworI2VuZGlmCisJaWYgKGItPndkcyA8IG4pCisJCXJldHVybiAwOwor CXN4ID0gUy0+eDsKKwlzeGUgPSBzeCArIC0tbjsKKwlieCA9IGItPng7CisJYnhlID0gYnggKyBu OworCXEgPSAqYnhlIC8gKCpzeGUgKyAxKTsJLyogZW5zdXJlIHEgPD0gdHJ1ZSBxdW90aWVudCAq LworI2lmZGVmIERFQlVHCisJLypkZWJ1ZyovIGlmIChxID4gOSkKKwkvKmRlYnVnKi8JQnVnKCJv dmVyc2l6ZWQgcXVvdGllbnQgaW4gcXVvcmVtIik7CisjZW5kaWYKKwlpZiAocSkgeworCQlib3Jy b3cgPSAwOworCQljYXJyeSA9IDA7CisJCWRvIHsKKyNpZmRlZiBVTExvbmcKKwkJCXlzID0gKnN4 KysgKiAoVUxMb25nKXEgKyBjYXJyeTsKKwkJCWNhcnJ5ID0geXMgPj4gMzI7CisJCQl5ID0gKmJ4 IC0gKHlzICYgMHhmZmZmZmZmZlVMKSAtIGJvcnJvdzsKKwkJCWJvcnJvdyA9IHkgPj4gMzIgJiAx VUw7CisJCQkqYngrKyA9IHkgJiAweGZmZmZmZmZmVUw7CisjZWxzZQorI2lmZGVmIFBhY2tfMzIK KwkJCXNpID0gKnN4Kys7CisJCQl5cyA9IChzaSAmIDB4ZmZmZikgKiBxICsgY2Fycnk7CisJCQl6 cyA9IChzaSA+PiAxNikgKiBxICsgKHlzID4+IDE2KTsKKwkJCWNhcnJ5ID0genMgPj4gMTY7CisJ CQl5ID0gKCpieCAmIDB4ZmZmZikgLSAoeXMgJiAweGZmZmYpIC0gYm9ycm93OworCQkJYm9ycm93 ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJCXogPSAoKmJ4ID4+IDE2KSAtICh6cyAmIDB4ZmZm ZikgLSBib3Jyb3c7CisJCQlib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OworCQkJU3RvcmVp bmMoYngsIHosIHkpOworI2Vsc2UKKwkJCXlzID0gKnN4KysgKiBxICsgY2Fycnk7CisJCQljYXJy eSA9IHlzID4+IDE2OworCQkJeSA9ICpieCAtICh5cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCQli b3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQkJKmJ4KysgPSB5ICYgMHhmZmZmOworI2Vu ZGlmCisjZW5kaWYKKwkJCX0KKwkJCXdoaWxlKHN4IDw9IHN4ZSk7CisJCWlmICghKmJ4ZSkgewor CQkJYnggPSBiLT54OworCQkJd2hpbGUoLS1ieGUgPiBieCAmJiAhKmJ4ZSkKKwkJCQktLW47CisJ CQliLT53ZHMgPSBuOworCQkJfQorCQl9CisJaWYgKGNtcChiLCBTKSA+PSAwKSB7CisJCXErKzsK KwkJYm9ycm93ID0gMDsKKwkJY2FycnkgPSAwOworCQlieCA9IGItPng7CisJCXN4ID0gUy0+eDsK KwkJZG8geworI2lmZGVmIFVMTG9uZworCQkJeXMgPSAqc3grKyArIGNhcnJ5OworCQkJY2Fycnkg PSB5cyA+PiAzMjsKKwkJCXkgPSAqYnggLSAoeXMgJiAweGZmZmZmZmZmVUwpIC0gYm9ycm93Owor CQkJYm9ycm93ID0geSA+PiAzMiAmIDFVTDsKKwkJCSpieCsrID0geSAmIDB4ZmZmZmZmZmZVTDsK KyNlbHNlCisjaWZkZWYgUGFja18zMgorCQkJc2kgPSAqc3grKzsKKwkJCXlzID0gKHNpICYgMHhm ZmZmKSArIGNhcnJ5OworCQkJenMgPSAoc2kgPj4gMTYpICsgKHlzID4+IDE2KTsKKwkJCWNhcnJ5 ID0genMgPj4gMTY7CisJCQl5ID0gKCpieCAmIDB4ZmZmZikgLSAoeXMgJiAweGZmZmYpIC0gYm9y cm93OworCQkJYm9ycm93ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJCXogPSAoKmJ4ID4+IDE2 KSAtICh6cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCQlib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+ IDE2OworCQkJU3RvcmVpbmMoYngsIHosIHkpOworI2Vsc2UKKwkJCXlzID0gKnN4KysgKyBjYXJy eTsKKwkJCWNhcnJ5ID0geXMgPj4gMTY7CisJCQl5ID0gKmJ4IC0gKHlzICYgMHhmZmZmKSAtIGJv cnJvdzsKKwkJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCQkqYngrKyA9IHkgJiAw eGZmZmY7CisjZW5kaWYKKyNlbmRpZgorCQkJfQorCQkJd2hpbGUoc3ggPD0gc3hlKTsKKwkJYngg PSBiLT54OworCQlieGUgPSBieCArIG47CisJCWlmICghKmJ4ZSkgeworCQkJd2hpbGUoLS1ieGUg PiBieCAmJiAhKmJ4ZSkKKwkJCQktLW47CisJCQliLT53ZHMgPSBuOworCQkJfQorCQl9CisJcmV0 dXJuIHE7CisJfQpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWR0b2EuYyBi L25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1kdG9hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwLi45OTgxOTI3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXdsaWIvbGliYy9z dGRsaWIvZ2R0b2EtZHRvYS5jCkBAIC0wLDAgKzEsODM5IEBACisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0 aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5 OTgsIDE5OTkgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQ ZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3 YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZl ZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2Ns YWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBu YW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZl cnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBz b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitM VUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdB UkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJ VElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1Mg T0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZU V0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQg TS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJA IiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5o IgorCisvKiBkdG9hIGZvciBJRUVFIGFyaXRobWV0aWMgKGRtZyk6IGNvbnZlcnQgZG91YmxlIHRv IEFTQ0lJIHN0cmluZy4KKyAqCisgKiBJbnNwaXJlZCBieSAiSG93IHRvIFByaW50IEZsb2F0aW5n LVBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgYnkKKyAqIEd1eSBMLiBTdGVlbGUsIEpyLiBhbmQg Sm9uIEwuIFdoaXRlIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiAxMTItMTI2XS4KKyAqCisg KiBNb2RpZmljYXRpb25zOgorICoJMS4gUmF0aGVyIHRoYW4gaXRlcmF0aW5nLCB3ZSB1c2UgYSBz aW1wbGUgbnVtZXJpYyBvdmVyZXN0aW1hdGUKKyAqCSAgIHRvIGRldGVybWluZSBrID0gZmxvb3Io bG9nMTAoZCkpLiAgV2Ugc2NhbGUgcmVsZXZhbnQKKyAqCSAgIHF1YW50aXRpZXMgdXNpbmcgTyhs b2cyKGspKSByYXRoZXIgdGhhbiBPKGspIG11bHRpcGxpY2F0aW9ucy4KKyAqCTIuIEZvciBzb21l IG1vZGVzID4gMiAoY29ycmVzcG9uZGluZyB0byBlY3Z0IGFuZCBmY3Z0KSwgd2UgZG9uJ3QKKyAq CSAgIHRyeSB0byBnZW5lcmF0ZSBkaWdpdHMgc3RyaWN0bHkgbGVmdCB0byByaWdodC4gIEluc3Rl YWQsIHdlCisgKgkgICBjb21wdXRlIHdpdGggZmV3ZXIgYml0cyBhbmQgcHJvcGFnYXRlIHRoZSBj YXJyeSBpZiBuZWNlc3NhcnkKKyAqCSAgIHdoZW4gcm91bmRpbmcgdGhlIGZpbmFsIGRpZ2l0IHVw LiAgVGhpcyBpcyBvZnRlbiBmYXN0ZXIuCisgKgkzLiBVbmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0 IGlucHV0IHdpbGwgYmUgcm91bmRlZCBuZWFyZXN0LAorICoJICAgbW9kZSAwIHJlbmRlcnMgMWUy MyBhcyAxZTIzIHJhdGhlciB0aGFuIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgorICoJICAgVGhhdCBp cywgd2UgYWxsb3cgZXF1YWxpdHkgaW4gc3RvcHBpbmcgdGVzdHMgd2hlbiB0aGUKKyAqCSAgIHJv dW5kLW5lYXJlc3QgcnVsZSB3aWxsIGdpdmUgdGhlIHNhbWUgZmxvYXRpbmctcG9pbnQgdmFsdWUK KyAqCSAgIGFzIHdvdWxkIHNhdGlzZmFjdGlvbiBvZiB0aGUgc3RvcHBpbmcgdGVzdCB3aXRoIHN0 cmljdAorICoJICAgaW5lcXVhbGl0eS4KKyAqCTQuIFdlIHJlbW92ZSBjb21tb24gZmFjdG9ycyBv ZiBwb3dlcnMgb2YgMiBmcm9tIHJlbGV2YW50CisgKgkgICBxdWFudGl0aWVzLgorICoJNS4gV2hl biBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IGludGVnZXJzIGxlc3MgdGhhbiAxZTE2LAorICoJ ICAgd2UgdXNlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgcmF0aGVyIHRoYW4gcmVzb3J0aW5n CisgKgkgICB0byBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlcnMuCisgKgk2LiBXaGVuIGFza2Vk IHRvIHByb2R1Y2UgZmV3ZXIgdGhhbiAxNSBkaWdpdHMsIHdlIGZpcnN0IHRyeQorICoJICAgdG8g Z2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYzsgd2UgcmVzb3J0IHRvCisgKgkg ICBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljIG9ubHkgaWYgd2UgY2Fubm90 CisgKgkgICBndWFyYW50ZWUgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb24gaGFz IGdpdmVuCisgKgkgICB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0LiAgRm9yIGsgcmVxdWVz dGVkIGRpZ2l0cyBhbmQKKyAqCSAgICJ1bmlmb3JtbHkiIGRpc3RyaWJ1dGVkIGlucHV0LCB0aGUg cHJvYmFiaWxpdHkgaXMKKyAqCSAgIHNvbWV0aGluZyBsaWtlIDEwXihrLTE1KSB0aGF0IHdlIG11 c3QgcmVzb3J0IHRvIHRoZSBMb25nCisgKgkgICBjYWxjdWxhdGlvbi4KKyAqLworCisjaWZkZWYg SG9ub3JfRkxUX1JPVU5EUworI3VuZGVmIENoZWNrX0ZMVF9ST1VORFMKKyNkZWZpbmUgQ2hlY2tf RkxUX1JPVU5EUworI2Vsc2UKKyNkZWZpbmUgUm91bmRpbmcgRmx0X1JvdW5kcworI2VuZGlmCisK KyBjaGFyICoKK2R0b2EKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGQwLCBtb2RlLCBuZGlnaXRzLCBk ZWNwdCwgc2lnbiwgcnZlKQorCWRvdWJsZSBkMDsgaW50IG1vZGUsIG5kaWdpdHMsICpkZWNwdCwg KnNpZ247IGNoYXIgKipydmU7CisjZWxzZQorCShkb3VibGUgZDAsIGludCBtb2RlLCBpbnQgbmRp Z2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLCBjaGFyICoqcnZlKQorI2VuZGlmCit7CisgLyoJ QXJndW1lbnRzIG5kaWdpdHMsIGRlY3B0LCBzaWduIGFyZSBzaW1pbGFyIHRvIHRob3NlCisJb2Yg ZWN2dCBhbmQgZmN2dDsgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQgZnJvbQorCXRoZSBy ZXR1cm5lZCBzdHJpbmcuICBJZiBub3QgbnVsbCwgKnJ2ZSBpcyBzZXQgdG8gcG9pbnQKKwl0byB0 aGUgZW5kIG9mIHRoZSByZXR1cm4gdmFsdWUuICBJZiBkIGlzICstSW5maW5pdHkgb3IgTmFOLAor CXRoZW4gKmRlY3B0IGlzIHNldCB0byA5OTk5LgorCisJbW9kZToKKwkJMCA9PT4gc2hvcnRlc3Qg c3RyaW5nIHRoYXQgeWllbGRzIGQgd2hlbiByZWFkIGluCisJCQlhbmQgcm91bmRlZCB0byBuZWFy ZXN0LgorCQkxID09PiBsaWtlIDAsIGJ1dCB3aXRoIFN0ZWVsZSAmIFdoaXRlIHN0b3BwaW5nIHJ1 bGU7CisJCQllLmcuIHdpdGggSUVFRSBQNzU0IGFyaXRobWV0aWMgLCBtb2RlIDAgZ2l2ZXMKKwkJ CTFlMjMgd2hlcmVhcyBtb2RlIDEgZ2l2ZXMgOS45OTk5OTk5OTk5OTk5OTllMjIuCisJCTIgPT0+ IG1heCgxLG5kaWdpdHMpIHNpZ25pZmljYW50IGRpZ2l0cy4gIFRoaXMgZ2l2ZXMgYQorCQkJcmV0 dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBvZiBlY3Z0LCBleGNlcHQKKwkJCXRoYXQgdHJhaWxp bmcgemVyb3MgYXJlIHN1cHByZXNzZWQuCisJCTMgPT0+IHRocm91Z2ggbmRpZ2l0cyBwYXN0IHRo ZSBkZWNpbWFsIHBvaW50LiAgVGhpcworCQkJZ2l2ZXMgYSByZXR1cm4gdmFsdWUgc2ltaWxhciB0 byB0aGF0IGZyb20gZmN2dCwKKwkJCWV4Y2VwdCB0aGF0IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBw cmVzc2VkLCBhbmQKKwkJCW5kaWdpdHMgY2FuIGJlIG5lZ2F0aXZlLgorCQk0LDUgPT0+IHNpbWls YXIgdG8gMiBhbmQgMywgcmVzcGVjdGl2ZWx5LCBidXQgKGluCisJCQlyb3VuZC1uZWFyZXN0IG1v ZGUpIHdpdGggdGhlIHRlc3RzIG9mIG1vZGUgMCB0bworCQkJcG9zc2libHkgcmV0dXJuIGEgc2hv cnRlciBzdHJpbmcgdGhhdCByb3VuZHMgdG8gZC4KKwkJCVdpdGggSUVFRSBhcml0aG1ldGljIGFu ZCBjb21waWxhdGlvbiB3aXRoCisJCQktREhvbm9yX0ZMVF9ST1VORFMsIG1vZGVzIDQgYW5kIDUg YmVoYXZlIHRoZSBzYW1lCisJCQlhcyBtb2RlcyAyIGFuZCAzIHdoZW4gRkxUX1JPVU5EUyAhPSAx LgorCQk2LTkgPT0+IERlYnVnZ2luZyBtb2RlcyBzaW1pbGFyIHRvIG1vZGUgLSA0OiAgZG9uJ3Qg dHJ5CisJCQlmYXN0IGZsb2F0aW5nLXBvaW50IGVzdGltYXRlIChpZiBhcHBsaWNhYmxlKS4KKwor CQlWYWx1ZXMgb2YgbW9kZSBvdGhlciB0aGFuIDAtOSBhcmUgdHJlYXRlZCBhcyBtb2RlIDAuCisK KwkJU3VmZmljaWVudCBzcGFjZSBpcyBhbGxvY2F0ZWQgdG8gdGhlIHJldHVybiB2YWx1ZQorCQl0 byBob2xkIHRoZSBzdXBwcmVzc2VkIHRyYWlsaW5nIHplcm9zLgorCSovCisKKwlpbnQgYmJpdHMs IGIyLCBiNSwgYmUsIGRpZywgaSwgaWVwcywgaWxpbSwgaWxpbTAsIGlsaW0xLAorCQlqLCBqMSwg aywgazAsIGtfY2hlY2ssIGxlZnRyaWdodCwgbTIsIG01LCBzMiwgczUsCisJCXNwZWNfY2FzZSwg dHJ5X3F1aWNrOworCUxvbmcgTDsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCWludCBkZW5v cm07CisJVUxvbmcgeDsKKyNlbmRpZgorCUJpZ2ludCAqYiwgKmIxLCAqZGVsdGEsICptbG8sICpt aGksICpTOworCVUgZCwgZDIsIGVwczsKKwlkb3VibGUgZHM7CisJY2hhciAqcywgKnMwOworI2lm ZGVmIFNFVF9JTkVYQUNUCisJaW50IGluZXhhY3QsIG9sZGluZXhhY3Q7CisjZW5kaWYKKyNpZmRl ZiBIb25vcl9GTFRfUk9VTkRTIC8qeyovCisJaW50IFJvdW5kaW5nOworI2lmZGVmIFRydXN0X0ZM VF9ST1VORFMgLyp7eyBvbmx5IGRlZmluZSB0aGlzIGlmIEZMVF9ST1VORFMgcmVhbGx5IHdvcmtz ISAqLworCVJvdW5kaW5nID0gRmx0X1JvdW5kczsKKyNlbHNlIC8qfXsqLworCVJvdW5kaW5nID0g MTsKKwlzd2l0Y2goZmVnZXRyb3VuZCgpKSB7CisJICBjYXNlIEZFX1RPV0FSRFpFUk86CVJvdW5k aW5nID0gMDsgYnJlYWs7CisJICBjYXNlIEZFX1VQV0FSRDoJUm91bmRpbmcgPSAyOyBicmVhazsK KwkgIGNhc2UgRkVfRE9XTldBUkQ6CVJvdW5kaW5nID0gMzsKKwkgIH0KKyNlbmRpZiAvKn19Ki8K KyNlbmRpZiAvKn0qLworCisjaWZuZGVmIE1VTFRJUExFX1RIUkVBRFMKKwlpZiAoZHRvYV9yZXN1 bHQpIHsKKwkJZnJlZWR0b2EoZHRvYV9yZXN1bHQpOworCQlkdG9hX3Jlc3VsdCA9IDA7CisJCX0K KyNlbmRpZgorCWQuZCA9IGQwOworCWlmICh3b3JkMCgmZCkgJiBTaWduX2JpdCkgeworCQkvKiBz ZXQgc2lnbiBmb3IgZXZlcnl0aGluZywgaW5jbHVkaW5nIDAncyBhbmQgTmFOcyAqLworCQkqc2ln biA9IDE7CisJCXdvcmQwKCZkKSAmPSB+U2lnbl9iaXQ7CS8qIGNsZWFyIHNpZ24gYml0ICovCisJ CX0KKwllbHNlCisJCSpzaWduID0gMDsKKworI2lmIGRlZmluZWQoSUVFRV9Bcml0aCkgKyBkZWZp bmVkKFZBWCkKKyNpZmRlZiBJRUVFX0FyaXRoCisJaWYgKCh3b3JkMCgmZCkgJiBFeHBfbWFzaykg PT0gRXhwX21hc2spCisjZWxzZQorCWlmICh3b3JkMCgmZCkgID09IDB4ODAwMCkKKyNlbmRpZgor CQl7CisJCS8qIEluZmluaXR5IG9yIE5hTiAqLworCQkqZGVjcHQgPSA5OTk5OworI2lmZGVmIElF RUVfQXJpdGgKKwkJaWYgKCF3b3JkMSgmZCkgJiYgISh3b3JkMCgmZCkgJiAweGZmZmZmKSkKKwkJ CXJldHVybiBucnZfYWxsb2MoIkluZmluaXR5IiwgcnZlLCA4KTsKKyNlbmRpZgorCQlyZXR1cm4g bnJ2X2FsbG9jKCJOYU4iLCBydmUsIDMpOworCQl9CisjZW5kaWYKKyNpZmRlZiBJQk0KKwlkdmFs KCZkKSArPSAwOyAvKiBub3JtYWxpemUgKi8KKyNlbmRpZgorCWlmICghZHZhbCgmZCkpIHsKKwkJ KmRlY3B0ID0gMTsKKwkJcmV0dXJuIG5ydl9hbGxvYygiMCIsIHJ2ZSwgMSk7CisJCX0KKworI2lm ZGVmIFNFVF9JTkVYQUNUCisJdHJ5X3F1aWNrID0gb2xkaW5leGFjdCA9IGdldF9pbmV4YWN0KCk7 CisJaW5leGFjdCA9IDE7CisjZW5kaWYKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJaWYgKFJv dW5kaW5nID49IDIpIHsKKwkJaWYgKCpzaWduKQorCQkJUm91bmRpbmcgPSBSb3VuZGluZyA9PSAy ID8gMCA6IDI7CisJCWVsc2UKKwkJCWlmIChSb3VuZGluZyAhPSAyKQorCQkJCVJvdW5kaW5nID0g MDsKKwkJfQorI2VuZGlmCisKKwliID0gZDJiKGR2YWwoJmQpLCAmYmUsICZiYml0cyk7CisJaWYg KGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisJ aSA9IChpbnQpKHdvcmQwKCZkKSA+PiBFeHBfc2hpZnQxICYgKEV4cF9tYXNrPj5FeHBfc2hpZnQx KSk7CisjZWxzZQorCWlmICgoIGkgPSAoaW50KSh3b3JkMCgmZCkgPj4gRXhwX3NoaWZ0MSAmIChF eHBfbWFzaz4+RXhwX3NoaWZ0MSkpICkhPTApIHsKKyNlbmRpZgorCQlkdmFsKCZkMikgPSBkdmFs KCZkKTsKKwkJd29yZDAoJmQyKSAmPSBGcmFjX21hc2sxOworCQl3b3JkMCgmZDIpIHw9IEV4cF8x MTsKKyNpZmRlZiBJQk0KKwkJaWYgKCggaiA9IDExIC0gaGkwYml0cyh3b3JkMCgmZDIpICYgRnJh Y19tYXNrKSApIT0wKQorCQkJZHZhbCgmZDIpIC89IDEgPDwgajsKKyNlbmRpZgorCisJCS8qIGxv Zyh4KQl+PX4gbG9nKDEuNSkgKyAoeC0xLjUpLzEuNQorCQkgKiBsb2cxMCh4KQkgPSAgbG9nKHgp IC8gbG9nKDEwKQorCQkgKgkJfj1+IGxvZygxLjUpL2xvZygxMCkgKyAoeC0xLjUpLygxLjUqbG9n KDEwKSkKKwkJICogbG9nMTAoJmQpID0gKGktQmlhcykqbG9nKDIpL2xvZygxMCkgKyBsb2cxMCgm ZDIpCisJCSAqCisJCSAqIFRoaXMgc3VnZ2VzdHMgY29tcHV0aW5nIGFuIGFwcHJveGltYXRpb24g ayB0byBsb2cxMCgmZCkgYnkKKwkJICoKKwkJICogayA9IChpIC0gQmlhcykqMC4zMDEwMjk5OTU2 NjM5ODEKKwkJICoJKyAoIChkMi0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkw NTU2ODEgKTsKKwkJICoKKwkJICogV2Ugd2FudCBrIHRvIGJlIHRvbyBsYXJnZSByYXRoZXIgdGhh biB0b28gc21hbGwuCisJCSAqIFRoZSBlcnJvciBpbiB0aGUgZmlyc3Qtb3JkZXIgVGF5bG9yIHNl cmllcyBhcHByb3hpbWF0aW9uCisJCSAqIGlzIGluIG91ciBmYXZvciwgc28gd2UganVzdCByb3Vu ZCB1cCB0aGUgY29uc3RhbnQgZW5vdWdoCisJCSAqIHRvIGNvbXBlbnNhdGUgZm9yIGFueSBlcnJv ciBpbiB0aGUgbXVsdGlwbGljYXRpb24gb2YKKwkJICogKGkgLSBCaWFzKSBieSAwLjMwMTAyOTk5 NTY2Mzk4MTsgc2luY2UgfGkgLSBCaWFzfCA8PSAxMDc3LAorCQkgKiBhbmQgMTA3NyAqIDAuMzAx MDMgKiAyXi01MiB+PX4gNy4yZS0xNCwKKwkJICogYWRkaW5nIDFlLTEzIHRvIHRoZSBjb25zdGFu dCB0ZXJtIG1vcmUgdGhhbiBzdWZmaWNlcy4KKwkJICogSGVuY2Ugd2UgYWRqdXN0IHRoZSBjb25z dGFudCB0ZXJtIHRvIDAuMTc2MDkxMjU5MDU1OC4KKwkJICogKFdlIGNvdWxkIGdldCBhIG1vcmUg YWNjdXJhdGUgayBieSBpbnZva2luZyBsb2cxMCwKKwkJICogIGJ1dCB0aGlzIGlzIHByb2JhYmx5 IG5vdCB3b3J0aHdoaWxlLikKKwkJICovCisKKwkJaSAtPSBCaWFzOworI2lmZGVmIElCTQorCQlp IDw8PSAyOworCQlpICs9IGo7CisjZW5kaWYKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQlk ZW5vcm0gPSAwOworCQl9CisJZWxzZSB7CisJCS8qIGQgaXMgZGVub3JtYWxpemVkICovCisKKwkJ aSA9IGJiaXRzICsgYmUgKyAoQmlhcyArIChQLTEpIC0gMSk7CisJCXggPSBpID4gMzIgID8gd29y ZDAoJmQpIDw8ICg2NCAtIGkpIHwgd29yZDEoJmQpID4+IChpIC0gMzIpCisJCQkgICAgOiB3b3Jk MSgmZCkgPDwgKDMyIC0gaSk7CisJCWR2YWwoJmQyKSA9IHg7CisJCXdvcmQwKCZkMikgLT0gMzEq RXhwX21zazE7IC8qIGFkanVzdCBleHBvbmVudCAqLworCQlpIC09IChCaWFzICsgKFAtMSkgLSAx KSArIDE7CisJCWRlbm9ybSA9IDE7CisJCX0KKyNlbmRpZgorCWRzID0gKGR2YWwoJmQyKS0xLjUp KjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU4ICsgaSowLjMwMTAyOTk5NTY2Mzk4 MTsKKwlrID0gKGludClkczsKKwlpZiAoZHMgPCAwLiAmJiBkcyAhPSBrKQorCQlrLS07CS8qIHdh bnQgayA9IGZsb29yKGRzKSAqLworCWtfY2hlY2sgPSAxOworCWlmIChrID49IDAgJiYgayA8PSBU ZW5fcG1heCkgeworCQlpZiAoZHZhbCgmZCkgPCB0ZW5zW2tdKQorCQkJay0tOworCQlrX2NoZWNr ID0gMDsKKwkJfQorCWogPSBiYml0cyAtIGkgLSAxOworCWlmIChqID49IDApIHsKKwkJYjIgPSAw OworCQlzMiA9IGo7CisJCX0KKwllbHNlIHsKKwkJYjIgPSAtajsKKwkJczIgPSAwOworCQl9CisJ aWYgKGsgPj0gMCkgeworCQliNSA9IDA7CisJCXM1ID0gazsKKwkJczIgKz0gazsKKwkJfQorCWVs c2UgeworCQliMiAtPSBrOworCQliNSA9IC1rOworCQlzNSA9IDA7CisJCX0KKwlpZiAobW9kZSA8 IDAgfHwgbW9kZSA+IDkpCisJCW1vZGUgPSAwOworCisjaWZuZGVmIFNFVF9JTkVYQUNUCisjaWZk ZWYgQ2hlY2tfRkxUX1JPVU5EUworCXRyeV9xdWljayA9IFJvdW5kaW5nID09IDE7CisjZWxzZQor CXRyeV9xdWljayA9IDE7CisjZW5kaWYKKyNlbmRpZiAvKlNFVF9JTkVYQUNUKi8KKworCWlmICht b2RlID4gNSkgeworCQltb2RlIC09IDQ7CisJCXRyeV9xdWljayA9IDA7CisJCX0KKwlsZWZ0cmln aHQgPSAxOworCWlsaW0gPSBpbGltMSA9IC0xOwkvKiBWYWx1ZXMgZm9yIGNhc2VzIDAgYW5kIDE7 IGRvbmUgaGVyZSB0byAqLworCQkJCS8qIHNpbGVuY2UgZXJyb25lb3VzICJnY2MgLVdhbGwiIHdh cm5pbmcuICovCisJc3dpdGNoKG1vZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCQlpID0g MTg7CisJCQluZGlnaXRzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlsZWZ0cmlnaHQg PSAwOworCQkJLyogbm8gYnJlYWsgKi8KKwkJY2FzZSA0OgorCQkJaWYgKG5kaWdpdHMgPD0gMCkK KwkJCQluZGlnaXRzID0gMTsKKwkJCWlsaW0gPSBpbGltMSA9IGkgPSBuZGlnaXRzOworCQkJYnJl YWs7CisJCWNhc2UgMzoKKwkJCWxlZnRyaWdodCA9IDA7CisJCQkvKiBubyBicmVhayAqLworCQlj YXNlIDU6CisJCQlpID0gbmRpZ2l0cyArIGsgKyAxOworCQkJaWxpbSA9IGk7CisJCQlpbGltMSA9 IGkgLSAxOworCQkJaWYgKGkgPD0gMCkKKwkJCQlpID0gMTsKKwkJfQorCXMgPSBzMCA9IHJ2X2Fs bG9jKGkpOworCWlmIChzID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKyNpZmRlZiBIb25v cl9GTFRfUk9VTkRTCisJaWYgKG1vZGUgPiAxICYmIFJvdW5kaW5nICE9IDEpCisJCWxlZnRyaWdo dCA9IDA7CisjZW5kaWYKKworCWlmIChpbGltID49IDAgJiYgaWxpbSA8PSBRdWlja19tYXggJiYg dHJ5X3F1aWNrKSB7CisKKwkJLyogVHJ5IHRvIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFy aXRobWV0aWMuICovCisKKwkJaSA9IDA7CisJCWR2YWwoJmQyKSA9IGR2YWwoJmQpOworCQlrMCA9 IGs7CisJCWlsaW0wID0gaWxpbTsKKwkJaWVwcyA9IDI7IC8qIGNvbnNlcnZhdGl2ZSAqLworCQlp ZiAoayA+IDApIHsKKwkJCWRzID0gdGVuc1trJjB4Zl07CisJCQlqID0gayA+PiA0OworCQkJaWYg KGogJiBCbGV0Y2gpIHsKKwkJCQkvKiBwcmV2ZW50IG92ZXJmbG93cyAqLworCQkJCWogJj0gQmxl dGNoIC0gMTsKKwkJCQlkdmFsKCZkKSAvPSBiaWd0ZW5zW25fYmlndGVucy0xXTsKKwkJCQlpZXBz Kys7CisJCQkJfQorCQkJZm9yKDsgajsgaiA+Pj0gMSwgaSsrKQorCQkJCWlmIChqICYgMSkgewor CQkJCQlpZXBzKys7CisJCQkJCWRzICo9IGJpZ3RlbnNbaV07CisJCQkJCX0KKwkJCWR2YWwoJmQp IC89IGRzOworCQkJfQorCQllbHNlIGlmICgoIGoxID0gLWsgKSE9MCkgeworCQkJZHZhbCgmZCkg Kj0gdGVuc1tqMSAmIDB4Zl07CisJCQlmb3IoaiA9IGoxID4+IDQ7IGo7IGogPj49IDEsIGkrKykK KwkJCQlpZiAoaiAmIDEpIHsKKwkJCQkJaWVwcysrOworCQkJCQlkdmFsKCZkKSAqPSBiaWd0ZW5z W2ldOworCQkJCQl9CisJCQl9CisJCWlmIChrX2NoZWNrICYmIGR2YWwoJmQpIDwgMS4gJiYgaWxp bSA+IDApIHsKKwkJCWlmIChpbGltMSA8PSAwKQorCQkJCWdvdG8gZmFzdF9mYWlsZWQ7CisJCQlp bGltID0gaWxpbTE7CisJCQlrLS07CisJCQlkdmFsKCZkKSAqPSAxMC47CisJCQlpZXBzKys7CisJ CQl9CisJCWR2YWwoJmVwcykgPSBpZXBzKmR2YWwoJmQpICsgNy47CisJCXdvcmQwKCZlcHMpIC09 IChQLTEpKkV4cF9tc2sxOworCQlpZiAoaWxpbSA9PSAwKSB7CisJCQlTID0gbWhpID0gMDsKKwkJ CWR2YWwoJmQpIC09IDUuOworCQkJaWYgKGR2YWwoJmQpID4gZHZhbCgmZXBzKSkKKwkJCQlnb3Rv IG9uZV9kaWdpdDsKKwkJCWlmIChkdmFsKCZkKSA8IC1kdmFsKCZlcHMpKQorCQkJCWdvdG8gbm9f ZGlnaXRzOworCQkJZ290byBmYXN0X2ZhaWxlZDsKKwkJCX0KKyNpZm5kZWYgTm9fbGVmdHJpZ2h0 CisJCWlmIChsZWZ0cmlnaHQpIHsKKwkJCS8qIFVzZSBTdGVlbGUgJiBXaGl0ZSBtZXRob2Qgb2Yg b25seQorCQkJICogZ2VuZXJhdGluZyBkaWdpdHMgbmVlZGVkLgorCQkJICovCisJCQlkdmFsKCZl cHMpID0gMC41L3RlbnNbaWxpbS0xXSAtIGR2YWwoJmVwcyk7CisJCQlmb3IoaSA9IDA7Oykgewor CQkJCUwgPSBkdmFsKCZkKTsKKwkJCQlkdmFsKCZkKSAtPSBMOworCQkJCSpzKysgPSAnMCcgKyAo aW50KUw7CisJCQkJaWYgKGR2YWwoJmQpIDwgZHZhbCgmZXBzKSkKKwkJCQkJZ290byByZXQxOwor CQkJCWlmICgxLiAtIGR2YWwoJmQpIDwgZHZhbCgmZXBzKSkKKwkJCQkJZ290byBidW1wX3VwOwor CQkJCWlmICgrK2kgPj0gaWxpbSkKKwkJCQkJYnJlYWs7CisJCQkJZHZhbCgmZXBzKSAqPSAxMC47 CisJCQkJZHZhbCgmZCkgKj0gMTAuOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisjZW5kaWYKKwkJ CS8qIEdlbmVyYXRlIGlsaW0gZGlnaXRzLCB0aGVuIGZpeCB0aGVtIHVwLiAqLworCQkJZHZhbCgm ZXBzKSAqPSB0ZW5zW2lsaW0tMV07CisJCQlmb3IoaSA9IDE7OyBpKyssIGR2YWwoJmQpICo9IDEw LikgeworCQkJCUwgPSAoTG9uZykoZHZhbCgmZCkpOworCQkJCWlmICghKGR2YWwoJmQpIC09IEwp KQorCQkJCQlpbGltID0gaTsKKwkJCQkqcysrID0gJzAnICsgKGludClMOworCQkJCWlmIChpID09 IGlsaW0pIHsKKwkJCQkJaWYgKGR2YWwoJmQpID4gMC41ICsgZHZhbCgmZXBzKSkKKwkJCQkJCWdv dG8gYnVtcF91cDsKKwkJCQkJZWxzZSBpZiAoZHZhbCgmZCkgPCAwLjUgLSBkdmFsKCZlcHMpKSB7 CisJCQkJCQl3aGlsZSgqLS1zID09ICcwJyk7CisJCQkJCQlzKys7CisJCQkJCQlnb3RvIHJldDE7 CisJCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorI2lmbmRlZiBOb19sZWZ0cmln aHQKKwkJCX0KKyNlbmRpZgorIGZhc3RfZmFpbGVkOgorCQlzID0gczA7CisJCWR2YWwoJmQpID0g ZHZhbCgmZDIpOworCQlrID0gazA7CisJCWlsaW0gPSBpbGltMDsKKwkJfQorCisJLyogRG8gd2Ug aGF2ZSBhICJzbWFsbCIgaW50ZWdlcj8gKi8KKworCWlmIChiZSA+PSAwICYmIGsgPD0gSW50X21h eCkgeworCQkvKiBZZXMuICovCisJCWRzID0gdGVuc1trXTsKKwkJaWYgKG5kaWdpdHMgPCAwICYm IGlsaW0gPD0gMCkgeworCQkJUyA9IG1oaSA9IDA7CisJCQlpZiAoaWxpbSA8IDAgfHwgZHZhbCgm ZCkgPD0gNSpkcykKKwkJCQlnb3RvIG5vX2RpZ2l0czsKKwkJCWdvdG8gb25lX2RpZ2l0OworCQkJ fQorCQlmb3IoaSA9IDE7OyBpKyssIGR2YWwoJmQpICo9IDEwLikgeworCQkJTCA9IChMb25nKShk dmFsKCZkKSAvIGRzKTsKKwkJCWR2YWwoJmQpIC09IEwqZHM7CisjaWZkZWYgQ2hlY2tfRkxUX1JP VU5EUworCQkJLyogSWYgRkxUX1JPVU5EUyA9PSAyLCBMIHdpbGwgdXN1YWxseSBiZSBoaWdoIGJ5 IDEgKi8KKwkJCWlmIChkdmFsKCZkKSA8IDApIHsKKwkJCQlMLS07CisJCQkJZHZhbCgmZCkgKz0g ZHM7CisJCQkJfQorI2VuZGlmCisJCQkqcysrID0gJzAnICsgKGludClMOworCQkJaWYgKCFkdmFs KCZkKSkgeworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJ CQlicmVhazsKKwkJCQl9CisJCQlpZiAoaSA9PSBpbGltKSB7CisjaWZkZWYgSG9ub3JfRkxUX1JP VU5EUworCQkJCWlmIChtb2RlID4gMSkKKwkJCQlzd2l0Y2goUm91bmRpbmcpIHsKKwkJCQkgIGNh c2UgMDogZ290byByZXQxOworCQkJCSAgY2FzZSAyOiBnb3RvIGJ1bXBfdXA7CisJCQkJICB9Cisj ZW5kaWYKKwkJCQlkdmFsKCZkKSArPSBkdmFsKCZkKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwkJ CQlpZiAoZHZhbCgmZCkgPj0gZHMpCisjZWxzZQorCQkJCWlmIChkdmFsKCZkKSA+IGRzIHx8IChk dmFsKCZkKSA9PSBkcyAmJiBMICYgMSkpCisjZW5kaWYKKwkJCQkJeworIGJ1bXBfdXA6CisJCQkJ CXdoaWxlKCotLXMgPT0gJzknKQorCQkJCQkJaWYgKHMgPT0gczApIHsKKwkJCQkJCQlrKys7CisJ CQkJCQkJKnMgPSAnMCc7CisJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkrKypzKys7CisJ CQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCWdvdG8gcmV0MTsKKwkJfQorCisJbTIg PSBiMjsKKwltNSA9IGI1OworCW1oaSA9IG1sbyA9IDA7CisJaWYgKGxlZnRyaWdodCkgeworCQlp ID0KKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQkJZGVub3JtID8gYmUgKyAoQmlhcyArIChQ LTEpIC0gMSArIDEpIDoKKyNlbmRpZgorI2lmZGVmIElCTQorCQkJMSArIDQqUCAtIDMgLSBiYml0 cyArICgoYmJpdHMgKyBiZSAtIDEpICYgMyk7CisjZWxzZQorCQkJMSArIFAgLSBiYml0czsKKyNl bmRpZgorCQliMiArPSBpOworCQlzMiArPSBpOworCQltaGkgPSBpMmIoMSk7CisJCWlmIChtaGkg PT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwlpZiAobTIgPiAwICYmIHMyID4gMCkg eworCQlpID0gbTIgPCBzMiA/IG0yIDogczI7CisJCWIyIC09IGk7CisJCW0yIC09IGk7CisJCXMy IC09IGk7CisJCX0KKwlpZiAoYjUgPiAwKSB7CisJCWlmIChsZWZ0cmlnaHQpIHsKKwkJCWlmICht NSA+IDApIHsKKwkJCQltaGkgPSBwb3c1bXVsdChtaGksIG01KTsKKwkJCQlpZiAobWhpID09IE5V TEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJYjEgPSBtdWx0KG1oaSwgYik7CisJCQkJaWYg KGIxID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJQmZyZWUoYik7CisJCQkJYiA9 IGIxOworCQkJCX0KKwkJCWlmICgoIGogPSBiNSAtIG01ICkhPTApIHsKKwkJCQliID0gcG93NW11 bHQoYiwgaik7CisJCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9 CisJCQl9CisJCWVsc2UgeworCQkJYiA9IHBvdzVtdWx0KGIsIGI1KTsKKwkJCWlmIChiID09IE5V TEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQorCVMgPSBpMmIoMSk7CisJaWYgKFMg PT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlpZiAoczUgPiAwKSB7CisJCVMgPSBwb3c1bXVs dChTLCBzNSk7CisJCWlmIChTID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisKKwkv KiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2Yg Mi4gKi8KKworCXNwZWNfY2FzZSA9IDA7CisJaWYgKChtb2RlIDwgMiB8fCBsZWZ0cmlnaHQpCisj aWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJJiYgUm91bmRpbmcgPT0gMQorI2VuZGlmCisJCQkJ KSB7CisJCWlmICghd29yZDEoJmQpICYmICEod29yZDAoJmQpICYgQm5kcnlfbWFzaykKKyNpZm5k ZWYgU3VkZGVuX1VuZGVyZmxvdworCQkgJiYgd29yZDAoJmQpICYgKEV4cF9tYXNrICYgfkV4cF9t c2sxKQorI2VuZGlmCisJCQkJKSB7CisJCQkvKiBUaGUgc3BlY2lhbCBjYXNlICovCisJCQliMiAr PSBMb2cyUDsKKwkJCXMyICs9IExvZzJQOworCQkJc3BlY19jYXNlID0gMTsKKwkJCX0KKwkJfQor CisJLyogQXJyYW5nZSBmb3IgY29udmVuaWVudCBjb21wdXRhdGlvbiBvZiBxdW90aWVudHM6CisJ ICogc2hpZnQgbGVmdCBpZiBuZWNlc3Nhcnkgc28gZGl2aXNvciBoYXMgNCBsZWFkaW5nIDAgYml0 cy4KKwkgKgorCSAqIFBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgY29tcHV0ZSBsZWFkaW5nIDI4IGJp dHMgb2YgUyBvbmNlCisJICogYW5kIGZvciBhbGwgYW5kIHBhc3MgdGhlbSBhbmQgYSBzaGlmdCB0 byBxdW9yZW0sIHNvIGl0CisJICogY2FuIGRvIHNoaWZ0cyBhbmQgb3JzIHRvIGNvbXB1dGUgdGhl IG51bWVyYXRvciBmb3IgcS4KKwkgKi8KKyNpZmRlZiBQYWNrXzMyCisJaWYgKCggaSA9ICgoczUg PyAzMiAtIGhpMGJpdHMoUy0+eFtTLT53ZHMtMV0pIDogMSkgKyBzMikgJiAweDFmICkhPTApCisJ CWkgPSAzMiAtIGk7CisjZWxzZQorCWlmICgoIGkgPSAoKHM1ID8gMzIgLSBoaTBiaXRzKFMtPnhb Uy0+d2RzLTFdKSA6IDEpICsgczIpICYgMHhmICkhPTApCisJCWkgPSAxNiAtIGk7CisjZW5kaWYK KwlpZiAoaSA+IDQpIHsKKwkJaSAtPSA0OworCQliMiArPSBpOworCQltMiArPSBpOworCQlzMiAr PSBpOworCQl9CisJZWxzZSBpZiAoaSA8IDQpIHsKKwkJaSArPSAyODsKKwkJYjIgKz0gaTsKKwkJ bTIgKz0gaTsKKwkJczIgKz0gaTsKKwkJfQorCWlmIChiMiA+IDApIHsKKwkJYiA9IGxzaGlmdChi LCBiMik7CisJCWlmIChiID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJaWYgKHMy ID4gMCkgeworCQlTID0gbHNoaWZ0KFMsIHMyKTsKKwkJaWYgKFMgPT0gTlVMTCkKKwkJCXJldHVy biAoTlVMTCk7CisJCX0KKwlpZiAoa19jaGVjaykgeworCQlpZiAoY21wKGIsUykgPCAwKSB7CisJ CQlrLS07CisJCQliID0gbXVsdGFkZChiLCAxMCwgMCk7CS8qIHdlIGJvdGNoZWQgdGhlIGsgZXN0 aW1hdGUgKi8KKwkJCWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWlmIChs ZWZ0cmlnaHQpIHsKKwkJCQltaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtaGkg PT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQlpbGltID0gaWxpbTE7CisJ CQl9CisJCX0KKwlpZiAoaWxpbSA8PSAwICYmIChtb2RlID09IDMgfHwgbW9kZSA9PSA1KSkgewor CQlTID0gbXVsdGFkZChTLDUsMCk7CisJCWlmIChTID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwp OworCQlpZiAoaWxpbSA8IDAgfHwgY21wKGIsUykgPD0gMCkgeworCQkJLyogbm8gZGlnaXRzLCBm Y3Z0IHN0eWxlICovCisgbm9fZGlnaXRzOgorCQkJayA9IC0xIC0gbmRpZ2l0czsKKwkJCWdvdG8g cmV0OworCQkJfQorIG9uZV9kaWdpdDoKKwkJKnMrKyA9ICcxJzsKKwkJaysrOworCQlnb3RvIHJl dDsKKwkJfQorCWlmIChsZWZ0cmlnaHQpIHsKKwkJaWYgKG0yID4gMCkgeworCQkJbWhpID0gbHNo aWZ0KG1oaSwgbTIpOworCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJ CQl9CisKKwkJLyogQ29tcHV0ZSBtbG8gLS0gY2hlY2sgZm9yIHNwZWNpYWwgY2FzZQorCQkgKiB0 aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuCisJCSAqLworCisJCW1sbyA9IG1oaTsK KwkJaWYgKHNwZWNfY2FzZSkgeworCQkJbWhpID0gQmFsbG9jKG1oaS0+ayk7CisJCQlpZiAobWhp ID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCUJjb3B5KG1oaSwgbWxvKTsKKwkJCW1o aSA9IGxzaGlmdChtaGksIExvZzJQKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQlyZXR1cm4g KE5VTEwpOworCQkJfQorCisJCWZvcihpID0gMTs7aSsrKSB7CisJCQlkaWcgPSBxdW9yZW0oYixT KSArICcwJzsKKwkJCS8qIERvIHdlIHlldCBoYXZlIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmlu ZworCQkJICogdGhhdCB3aWxsIHJvdW5kIHRvIGQ/CisJCQkgKi8KKwkJCWogPSBjbXAoYiwgbWxv KTsKKwkJCWRlbHRhID0gZGlmZihTLCBtaGkpOworCQkJaWYgKGRlbHRhID09IE5VTEwpCisJCQkJ cmV0dXJuIChOVUxMKTsKKwkJCWoxID0gZGVsdGEtPnNpZ24gPyAxIDogY21wKGIsIGRlbHRhKTsK KwkJCUJmcmVlKGRlbHRhKTsKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQlpZiAoajEgPT0gMCAm JiBtb2RlICE9IDEgJiYgISh3b3JkMSgmZCkgJiAxKQorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMK KwkJCQkmJiBSb3VuZGluZyA+PSAxCisjZW5kaWYKKwkJCQkJCQkJICAgKSB7CisJCQkJaWYgKGRp ZyA9PSAnOScpCisJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQlpZiAoaiA+IDApCisJCQkJCWRp ZysrOworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJZWxzZSBpZiAoIWItPnhbMF0gJiYgYi0+d2Rz IDw9IDEpCisJCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJKnMrKyA9IGRpZzsKKwkJCQln b3RvIHJldDsKKwkJCQl9CisjZW5kaWYKKwkJCWlmIChqIDwgMCB8fCAoaiA9PSAwICYmIG1vZGUg IT0gMQorI2lmbmRlZiBST1VORF9CSUFTRUQKKwkJCQkJCQkmJiAhKHdvcmQxKCZkKSAmIDEpCisj ZW5kaWYKKwkJCQkJKSkgeworCQkJCWlmICghYi0+eFswXSAmJiBiLT53ZHMgPD0gMSkgeworI2lm ZGVmIFNFVF9JTkVYQUNUCisJCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJCWdvdG8gYWNj ZXB0X2RpZzsKKwkJCQkJfQorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwkJCQlpZiAobW9kZSA+ IDEpCisJCQkJIHN3aXRjaChSb3VuZGluZykgeworCQkJCSAgY2FzZSAwOiBnb3RvIGFjY2VwdF9k aWc7CisJCQkJICBjYXNlIDI6IGdvdG8ga2VlcF9kaWc7CisJCQkJICB9CisjZW5kaWYgLypIb25v cl9GTFRfUk9VTkRTKi8KKwkJCQlpZiAoajEgPiAwKSB7CisJCQkJCWIgPSBsc2hpZnQoYiwgMSk7 CisJCQkJCWlmIChiID09IE5VTEwpCisJCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCQlqMSA9IGNt cChiLCBTKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwkJCQkJaWYgKGoxID49IDAgLyopKi8KKyNl bHNlCisJCQkJCWlmICgoajEgPiAwIHx8IChqMSA9PSAwICYmIGRpZyAmIDEpKQorI2VuZGlmCisJ CQkJCSYmIGRpZysrID09ICc5JykKKwkJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQkJfQorIGFj Y2VwdF9kaWc6CisJCQkJKnMrKyA9IGRpZzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQlpZiAo ajEgPiAwKSB7CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJCWlmICghUm91bmRpbmcpCisJ CQkJCWdvdG8gYWNjZXB0X2RpZzsKKyNlbmRpZgorCQkJCWlmIChkaWcgPT0gJzknKSB7IC8qIHBv c3NpYmxlIGlmIGkgPT0gMSAqLworIHJvdW5kXzlfdXA6CisJCQkJCSpzKysgPSAnOSc7CisJCQkJ CWdvdG8gcm91bmRvZmY7CisJCQkJCX0KKwkJCQkqcysrID0gZGlnICsgMTsKKwkJCQlnb3RvIHJl dDsKKwkJCQl9CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworIGtlZXBfZGlnOgorI2VuZGlmCisJ CQkqcysrID0gZGlnOworCQkJaWYgKGkgPT0gaWxpbSkKKwkJCQlicmVhazsKKwkJCWIgPSBtdWx0 YWRkKGIsIDEwLCAwKTsKKwkJCWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJ CWlmIChtbG8gPT0gbWhpKSB7CisJCQkJbWxvID0gbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsK KwkJCQlpZiAobWxvID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJZWxz ZSB7CisJCQkJbWxvID0gbXVsdGFkZChtbG8sIDEwLCAwKTsKKwkJCQlpZiAobWxvID09IE5VTEwp CisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJ CQlpZiAobWhpID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJfQorCQl9 CisJZWxzZQorCQlmb3IoaSA9IDE7OyBpKyspIHsKKwkJCSpzKysgPSBkaWcgPSBxdW9yZW0oYixT KSArICcwJzsKKwkJCWlmICghYi0+eFswXSAmJiBiLT53ZHMgPD0gMSkgeworI2lmZGVmIFNFVF9J TkVYQUNUCisJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJ CQlpZiAoaSA+PSBpbGltKQorCQkJCWJyZWFrOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOwor CQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCisJLyogUm91bmQg b2ZmIGxhc3QgZGlnaXQgKi8KKworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwlzd2l0Y2goUm91 bmRpbmcpIHsKKwkgIGNhc2UgMDogZ290byB0cmltemVyb3M7CisJICBjYXNlIDI6IGdvdG8gcm91 bmRvZmY7CisJICB9CisjZW5kaWYKKwliID0gbHNoaWZ0KGIsIDEpOworCWlmIChiID09IE5VTEwp CisJCXJldHVybiAoTlVMTCk7CisJaiA9IGNtcChiLCBTKTsKKyNpZmRlZiBST1VORF9CSUFTRUQK KwlpZiAoaiA+PSAwKQorI2Vsc2UKKwlpZiAoaiA+IDAgfHwgKGogPT0gMCAmJiBkaWcgJiAxKSkK KyNlbmRpZgorCQl7Cisgcm91bmRvZmY6CisJCXdoaWxlKCotLXMgPT0gJzknKQorCQkJaWYgKHMg PT0gczApIHsKKwkJCQlrKys7CisJCQkJKnMrKyA9ICcxJzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9 CisJCSsrKnMrKzsKKwkJfQorCWVsc2UgeworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKyB0cmlt emVyb3M6CisjZW5kaWYKKwkJd2hpbGUoKi0tcyA9PSAnMCcpOworCQlzKys7CisJCX0KKyByZXQ6 CisJQmZyZWUoUyk7CisJaWYgKG1oaSkgeworCQlpZiAobWxvICYmIG1sbyAhPSBtaGkpCisJCQlC ZnJlZShtbG8pOworCQlCZnJlZShtaGkpOworCQl9CisgcmV0MToKKyNpZmRlZiBTRVRfSU5FWEFD VAorCWlmIChpbmV4YWN0KSB7CisJCWlmICghb2xkaW5leGFjdCkgeworCQkJd29yZDAoJmQpID0g RXhwXzEgKyAoNzAgPDwgRXhwX3NoaWZ0KTsKKwkJCXdvcmQxKCZkKSA9IDA7CisJCQlkdmFsKCZk KSArPSAxLjsKKwkJCX0KKwkJfQorCWVsc2UgaWYgKCFvbGRpbmV4YWN0KQorCQljbGVhcl9pbmV4 YWN0KCk7CisjZW5kaWYKKwlCZnJlZShiKTsKKwkqcyA9IDA7CisJKmRlY3B0ID0gayArIDE7CisJ aWYgKHJ2ZSkKKwkJKnJ2ZSA9IHM7CisJcmV0dXJuIHMwOworfQpkaWZmIC0tZ2l0IGEvbmV3bGli L2xpYmMvc3RkbGliL2dkdG9hLWdkdG9hLmMgYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtZ2R0 b2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmZlYWU1YWZhMwotLS0g L2Rldi9udWxsCisrKyBiL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1nZHRvYS5jCkBAIC0wLDAg KzEsODMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2 aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgYnkgTHVjZW50IFRlY2hub2xv Z2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24g Zm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3Zp ZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVz IGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlz c2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcK K2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRz IGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFp bmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3 cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5U SUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBT SEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BF Q0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitX SEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdI RVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JU SU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVT RSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxl YXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcs CisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIu IikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisgc3RhdGljIEJpZ2ludCAqCisjaWZk ZWYgS1JfaGVhZGVycworYml0c3RvYihiaXRzLCBuYml0cywgYmJpdHMpIFVMb25nICpiaXRzOyBp bnQgbmJpdHM7IGludCAqYmJpdHM7CisjZWxzZQorYml0c3RvYihVTG9uZyAqYml0cywgaW50IG5i aXRzLCBpbnQgKmJiaXRzKQorI2VuZGlmCit7CisJaW50IGksIGs7CisJQmlnaW50ICpiOworCVVM b25nICpiZSwgKngsICp4MDsKKworCWkgPSBVTGJpdHM7CisJayA9IDA7CisJd2hpbGUoaSA8IG5i aXRzKSB7CisJCWkgPDw9IDE7CisJCWsrKzsKKwkJfQorI2lmbmRlZiBQYWNrXzMyCisJaWYgKCFr KQorCQlrID0gMTsKKyNlbmRpZgorCWIgPSBCYWxsb2Moayk7CisJaWYgKGIgPT0gTlVMTCkKKwkJ cmV0dXJuIChOVUxMKTsKKwliZSA9IGJpdHMgKyAoKG5iaXRzIC0gMSkgPj4ga3NoaWZ0KTsKKwl4 ID0geDAgPSBiLT54OworCWRvIHsKKwkJKngrKyA9ICpiaXRzICYgQUxMX09OOworI2lmZGVmIFBh Y2tfMTYKKwkJKngrKyA9ICgqYml0cyA+PiAxNikgJiBBTExfT047CisjZW5kaWYKKwkJfSB3aGls ZSgrK2JpdHMgPD0gYmUpOworCWkgPSB4IC0geDA7CisJd2hpbGUoIXgwWy0taV0pCisJCWlmICgh aSkgeworCQkJYi0+d2RzID0gMDsKKwkJCSpiYml0cyA9IDA7CisJCQlnb3RvIHJldDsKKwkJCX0K KwliLT53ZHMgPSBpICsgMTsKKwkqYmJpdHMgPSBpKlVMYml0cyArIDMyIC0gaGkwYml0cyhiLT54 W2ldKTsKKyByZXQ6CisJcmV0dXJuIGI7CisJfQorCisvKiBkdG9hIGZvciBJRUVFIGFyaXRobWV0 aWMgKGRtZyk6IGNvbnZlcnQgZG91YmxlIHRvIEFTQ0lJIHN0cmluZy4KKyAqCisgKiBJbnNwaXJl ZCBieSAiSG93IHRvIFByaW50IEZsb2F0aW5nLVBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgYnkK KyAqIEd1eSBMLiBTdGVlbGUsIEpyLiBhbmQgSm9uIEwuIFdoaXRlIFtQcm9jLiBBQ00gU0lHUExB TiAnOTAsIHBwLiAxMTItMTI2XS4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICoJMS4gUmF0aGVy IHRoYW4gaXRlcmF0aW5nLCB3ZSB1c2UgYSBzaW1wbGUgbnVtZXJpYyBvdmVyZXN0aW1hdGUKKyAq CSAgIHRvIGRldGVybWluZSBrID0gZmxvb3IobG9nMTAoZCkpLiAgV2Ugc2NhbGUgcmVsZXZhbnQK KyAqCSAgIHF1YW50aXRpZXMgdXNpbmcgTyhsb2cyKGspKSByYXRoZXIgdGhhbiBPKGspIG11bHRp cGxpY2F0aW9ucy4KKyAqCTIuIEZvciBzb21lIG1vZGVzID4gMiAoY29ycmVzcG9uZGluZyB0byBl Y3Z0IGFuZCBmY3Z0KSwgd2UgZG9uJ3QKKyAqCSAgIHRyeSB0byBnZW5lcmF0ZSBkaWdpdHMgc3Ry aWN0bHkgbGVmdCB0byByaWdodC4gIEluc3RlYWQsIHdlCisgKgkgICBjb21wdXRlIHdpdGggZmV3 ZXIgYml0cyBhbmQgcHJvcGFnYXRlIHRoZSBjYXJyeSBpZiBuZWNlc3NhcnkKKyAqCSAgIHdoZW4g cm91bmRpbmcgdGhlIGZpbmFsIGRpZ2l0IHVwLiAgVGhpcyBpcyBvZnRlbiBmYXN0ZXIuCisgKgkz LiBVbmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGlucHV0IHdpbGwgYmUgcm91bmRlZCBuZWFyZXN0 LAorICoJICAgbW9kZSAwIHJlbmRlcnMgMWUyMyBhcyAxZTIzIHJhdGhlciB0aGFuIDkuOTk5OTk5 OTk5OTk5OTk5ZTIyLgorICoJICAgVGhhdCBpcywgd2UgYWxsb3cgZXF1YWxpdHkgaW4gc3RvcHBp bmcgdGVzdHMgd2hlbiB0aGUKKyAqCSAgIHJvdW5kLW5lYXJlc3QgcnVsZSB3aWxsIGdpdmUgdGhl IHNhbWUgZmxvYXRpbmctcG9pbnQgdmFsdWUKKyAqCSAgIGFzIHdvdWxkIHNhdGlzZmFjdGlvbiBv ZiB0aGUgc3RvcHBpbmcgdGVzdCB3aXRoIHN0cmljdAorICoJICAgaW5lcXVhbGl0eS4KKyAqCTQu IFdlIHJlbW92ZSBjb21tb24gZmFjdG9ycyBvZiBwb3dlcnMgb2YgMiBmcm9tIHJlbGV2YW50Cisg KgkgICBxdWFudGl0aWVzLgorICoJNS4gV2hlbiBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IGlu dGVnZXJzIGxlc3MgdGhhbiAxZTE2LAorICoJICAgd2UgdXNlIGZsb2F0aW5nLXBvaW50IGFyaXRo bWV0aWMgcmF0aGVyIHRoYW4gcmVzb3J0aW5nCisgKgkgICB0byBtdWx0aXBsZS1wcmVjaXNpb24g aW50ZWdlcnMuCisgKgk2LiBXaGVuIGFza2VkIHRvIHByb2R1Y2UgZmV3ZXIgdGhhbiAxNSBkaWdp dHMsIHdlIGZpcnN0IHRyeQorICoJICAgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJp dGhtZXRpYzsgd2UgcmVzb3J0IHRvCisgKgkgICBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBh cml0aG1ldGljIG9ubHkgaWYgd2UgY2Fubm90CisgKgkgICBndWFyYW50ZWUgdGhhdCB0aGUgZmxv YXRpbmctcG9pbnQgY2FsY3VsYXRpb24gaGFzIGdpdmVuCisgKgkgICB0aGUgY29ycmVjdGx5IHJv dW5kZWQgcmVzdWx0LiAgRm9yIGsgcmVxdWVzdGVkIGRpZ2l0cyBhbmQKKyAqCSAgICJ1bmlmb3Jt bHkiIGRpc3RyaWJ1dGVkIGlucHV0LCB0aGUgcHJvYmFiaWxpdHkgaXMKKyAqCSAgIHNvbWV0aGlu ZyBsaWtlIDEwXihrLTE1KSB0aGF0IHdlIG11c3QgcmVzb3J0IHRvIHRoZSBMb25nCisgKgkgICBj YWxjdWxhdGlvbi4KKyAqLworCisgY2hhciAqCitnZHRvYQorI2lmZGVmIEtSX2hlYWRlcnMKKwko ZnBpLCBiZSwgYml0cywga2luZHAsIG1vZGUsIG5kaWdpdHMsIGRlY3B0LCBydmUpCisJRlBJICpm cGk7IGludCBiZTsgVUxvbmcgKmJpdHM7CisJaW50ICpraW5kcCwgbW9kZSwgbmRpZ2l0cywgKmRl Y3B0OyBjaGFyICoqcnZlOworI2Vsc2UKKwkoRlBJICpmcGksIGludCBiZSwgVUxvbmcgKmJpdHMs IGludCAqa2luZHAsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgY2hhciAqKnJ2 ZSkKKyNlbmRpZgoreworIC8qCUFyZ3VtZW50cyBuZGlnaXRzIGFuZCBkZWNwdCBhcmUgc2ltaWxh ciB0byB0aGUgc2Vjb25kIGFuZCB0aGlyZAorCWFyZ3VtZW50cyBvZiBlY3Z0IGFuZCBmY3Z0OyB0 cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZCBmcm9tCisJdGhlIHJldHVybmVkIHN0cmluZy4g IElmIG5vdCBudWxsLCAqcnZlIGlzIHNldCB0byBwb2ludAorCXRvIHRoZSBlbmQgb2YgdGhlIHJl dHVybiB2YWx1ZS4gIElmIGQgaXMgKy1JbmZpbml0eSBvciBOYU4sCisJdGhlbiAqZGVjcHQgaXMg c2V0IHRvIDk5OTkuCisJYmUgPSBleHBvbmVudDogdmFsdWUgPSAoaW50ZWdlciByZXByZXNlbnRl ZCBieSBiaXRzKSAqICgyIHRvIHRoZSBwb3dlciBvZiBiZSkuCisKKwltb2RlOgorCQkwID09PiBz aG9ydGVzdCBzdHJpbmcgdGhhdCB5aWVsZHMgZCB3aGVuIHJlYWQgaW4KKwkJCWFuZCByb3VuZGVk IHRvIG5lYXJlc3QuCisJCTEgPT0+IGxpa2UgMCwgYnV0IHdpdGggU3RlZWxlICYgV2hpdGUgc3Rv cHBpbmcgcnVsZTsKKwkJCWUuZy4gd2l0aCBJRUVFIFA3NTQgYXJpdGhtZXRpYyAsIG1vZGUgMCBn aXZlcworCQkJMWUyMyB3aGVyZWFzIG1vZGUgMSBnaXZlcyA5Ljk5OTk5OTk5OTk5OTk5OWUyMi4K KwkJMiA9PT4gbWF4KDEsbmRpZ2l0cykgc2lnbmlmaWNhbnQgZGlnaXRzLiAgVGhpcyBnaXZlcyBh CisJCQlyZXR1cm4gdmFsdWUgc2ltaWxhciB0byB0aGF0IG9mIGVjdnQsIGV4Y2VwdAorCQkJdGhh dCB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZC4KKwkJMyA9PT4gdGhyb3VnaCBuZGlnaXRz IHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQuICBUaGlzCisJCQlnaXZlcyBhIHJldHVybiB2YWx1ZSBz aW1pbGFyIHRvIHRoYXQgZnJvbSBmY3Z0LAorCQkJZXhjZXB0IHRoYXQgdHJhaWxpbmcgemVyb3Mg YXJlIHN1cHByZXNzZWQsIGFuZAorCQkJbmRpZ2l0cyBjYW4gYmUgbmVnYXRpdmUuCisJCTQtOSBz aG91bGQgZ2l2ZSB0aGUgc2FtZSByZXR1cm4gdmFsdWVzIGFzIDItMywgaS5lLiwKKwkJCTQgPD0g bW9kZSA8PSA5ID09PiBzYW1lIHJldHVybiBhcyBtb2RlCisJCQkyICsgKG1vZGUgJiAxKS4gIFRo ZXNlIG1vZGVzIGFyZSBtYWlubHkgZm9yCisJCQlkZWJ1Z2dpbmc7IG9mdGVuIHRoZXkgcnVuIHNs b3dlciBidXQgc29tZXRpbWVzCisJCQlmYXN0ZXIgdGhhbiBtb2RlcyAyLTMuCisJCTQsNSw4LDkg PT0+IGxlZnQtdG8tcmlnaHQgZGlnaXQgZ2VuZXJhdGlvbi4KKwkJNi05ID09PiBkb24ndCB0cnkg ZmFzdCBmbG9hdGluZy1wb2ludCBlc3RpbWF0ZQorCQkJKGlmIGFwcGxpY2FibGUpLgorCisJCVZh bHVlcyBvZiBtb2RlIG90aGVyIHRoYW4gMC05IGFyZSB0cmVhdGVkIGFzIG1vZGUgMC4KKworCQlT dWZmaWNpZW50IHNwYWNlIGlzIGFsbG9jYXRlZCB0byB0aGUgcmV0dXJuIHZhbHVlCisJCXRvIGhv bGQgdGhlIHN1cHByZXNzZWQgdHJhaWxpbmcgemVyb3MuCisJKi8KKworCWludCBiYml0cywgYjIs IGI1LCBiZTAsIGRpZywgaSwgaWVwcywgaWxpbSwgaWxpbTAsIGlsaW0xLCBpbmV4OworCWludCBq LCBqMSwgaywgazAsIGtfY2hlY2ssIGtpbmQsIGxlZnRyaWdodCwgbTIsIG01LCBuYml0czsKKwlp bnQgcmRpciwgczIsIHM1LCBzcGVjX2Nhc2UsIHRyeV9xdWljazsKKwlMb25nIEw7CisJQmlnaW50 ICpiLCAqYjEsICpkZWx0YSwgKm1sbywgKm1oaSwgKm1oaTEsICpTOworCWRvdWJsZSBkMiwgZHM7 CisJY2hhciAqcywgKnMwOworCVUgZCwgZXBzOworCisjaWZuZGVmIE1VTFRJUExFX1RIUkVBRFMK KwlpZiAoZHRvYV9yZXN1bHQpIHsKKwkJZnJlZWR0b2EoZHRvYV9yZXN1bHQpOworCQlkdG9hX3Jl c3VsdCA9IDA7CisJCX0KKyNlbmRpZgorCWluZXggPSAwOworCWtpbmQgPSAqa2luZHAgJj0gflNU UlRPR19JbmV4YWN0OworCXN3aXRjaChraW5kICYgU1RSVE9HX1JldG1hc2spIHsKKwkgIGNhc2Ug U1RSVE9HX1plcm86CisJCWdvdG8gcmV0X3plcm87CisJICBjYXNlIFNUUlRPR19Ob3JtYWw6CisJ ICBjYXNlIFNUUlRPR19EZW5vcm1hbDoKKwkJYnJlYWs7CisJICBjYXNlIFNUUlRPR19JbmZpbml0 ZToKKwkJKmRlY3B0ID0gLTMyNzY4OworCQlyZXR1cm4gbnJ2X2FsbG9jKCJJbmZpbml0eSIsIHJ2 ZSwgOCk7CisJICBjYXNlIFNUUlRPR19OYU46CisJCSpkZWNwdCA9IC0zMjc2ODsKKwkJcmV0dXJu IG5ydl9hbGxvYygiTmFOIiwgcnZlLCAzKTsKKwkgIGRlZmF1bHQ6CisJCXJldHVybiAwOworCSAg fQorCWIgPSBiaXRzdG9iKGJpdHMsIG5iaXRzID0gZnBpLT5uYml0cywgJmJiaXRzKTsKKwlpZiAo YiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWJlMCA9IGJlOworCWlmICggKGkgPSB0cmFp bHooYikpICE9MCkgeworCQlyc2hpZnQoYiwgaSk7CisJCWJlICs9IGk7CisJCWJiaXRzIC09IGk7 CisJCX0KKwlpZiAoIWItPndkcykgeworCQlCZnJlZShiKTsKKyByZXRfemVybzoKKwkJKmRlY3B0 ID0gMTsKKwkJcmV0dXJuIG5ydl9hbGxvYygiMCIsIHJ2ZSwgMSk7CisJCX0KKworCWR2YWwoJmQp ID0gYjJkKGIsICZpKTsKKwlpID0gYmUgKyBiYml0cyAtIDE7CisJd29yZDAoJmQpICY9IEZyYWNf bWFzazE7CisJd29yZDAoJmQpIHw9IEV4cF8xMTsKKyNpZmRlZiBJQk0KKwlpZiAoIChqID0gMTEg LSBoaTBiaXRzKHdvcmQwKCZkKSAmIEZyYWNfbWFzaykpICE9MCkKKwkJZHZhbCgmZCkgLz0gMSA8 PCBqOworI2VuZGlmCisKKwkvKiBsb2coeCkJfj1+IGxvZygxLjUpICsgKHgtMS41KS8xLjUKKwkg KiBsb2cxMCh4KQkgPSAgbG9nKHgpIC8gbG9nKDEwKQorCSAqCQl+PX4gbG9nKDEuNSkvbG9nKDEw KSArICh4LTEuNSkvKDEuNSpsb2coMTApKQorCSAqIGxvZzEwKCZkKSA9IChpLUJpYXMpKmxvZygy KS9sb2coMTApICsgbG9nMTAoZDIpCisJICoKKwkgKiBUaGlzIHN1Z2dlc3RzIGNvbXB1dGluZyBh biBhcHByb3hpbWF0aW9uIGsgdG8gbG9nMTAoJmQpIGJ5CisJICoKKwkgKiBrID0gKGkgLSBCaWFz KSowLjMwMTAyOTk5NTY2Mzk4MQorCSAqCSsgKCAoZDItMS41KSowLjI4OTUyOTY1NDYwMjE2OCAr IDAuMTc2MDkxMjU5MDU1NjgxICk7CisJICoKKwkgKiBXZSB3YW50IGsgdG8gYmUgdG9vIGxhcmdl IHJhdGhlciB0aGFuIHRvbyBzbWFsbC4KKwkgKiBUaGUgZXJyb3IgaW4gdGhlIGZpcnN0LW9yZGVy IFRheWxvciBzZXJpZXMgYXBwcm94aW1hdGlvbgorCSAqIGlzIGluIG91ciBmYXZvciwgc28gd2Ug anVzdCByb3VuZCB1cCB0aGUgY29uc3RhbnQgZW5vdWdoCisJICogdG8gY29tcGVuc2F0ZSBmb3Ig YW55IGVycm9yIGluIHRoZSBtdWx0aXBsaWNhdGlvbiBvZgorCSAqIChpIC0gQmlhcykgYnkgMC4z MDEwMjk5OTU2NjM5ODE7IHNpbmNlIHxpIC0gQmlhc3wgPD0gMTA3NywKKwkgKiBhbmQgMTA3NyAq IDAuMzAxMDMgKiAyXi01MiB+PX4gNy4yZS0xNCwKKwkgKiBhZGRpbmcgMWUtMTMgdG8gdGhlIGNv bnN0YW50IHRlcm0gbW9yZSB0aGFuIHN1ZmZpY2VzLgorCSAqIEhlbmNlIHdlIGFkanVzdCB0aGUg Y29uc3RhbnQgdGVybSB0byAwLjE3NjA5MTI1OTA1NTguCisJICogKFdlIGNvdWxkIGdldCBhIG1v cmUgYWNjdXJhdGUgayBieSBpbnZva2luZyBsb2cxMCwKKwkgKiAgYnV0IHRoaXMgaXMgcHJvYmFi bHkgbm90IHdvcnRod2hpbGUuKQorCSAqLworI2lmZGVmIElCTQorCWkgPDw9IDI7CisJaSArPSBq OworI2VuZGlmCisJZHMgPSAoZHZhbCgmZCktMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2 MDkxMjU5MDU1OCArIGkqMC4zMDEwMjk5OTU2NjM5ODE7CisKKwkvKiBjb3JyZWN0IGFzc3VtcHRp b24gYWJvdXQgZXhwb25lbnQgcmFuZ2UgKi8KKwlpZiAoKGogPSBpKSA8IDApCisJCWogPSAtajsK KwlpZiAoKGogLT0gMTA3NykgPiAwKQorCQlkcyArPSBqICogN2UtMTc7CisKKwlrID0gKGludClk czsKKwlpZiAoZHMgPCAwLiAmJiBkcyAhPSBrKQorCQlrLS07CS8qIHdhbnQgayA9IGZsb29yKGRz KSAqLworCWtfY2hlY2sgPSAxOworI2lmZGVmIElCTQorCWogPSBiZSArIGJiaXRzIC0gMTsKKwlp ZiAoIChqMSA9IGogJiAzKSAhPTApCisJCWR2YWwoJmQpICo9IDEgPDwgajE7CisJd29yZDAoJmQp ICs9IGogPDwgRXhwX3NoaWZ0IC0gMiAmIEV4cF9tYXNrOworI2Vsc2UKKwl3b3JkMCgmZCkgKz0g KGJlICsgYmJpdHMgLSAxKSA8PCBFeHBfc2hpZnQ7CisjZW5kaWYKKwlpZiAoayA+PSAwICYmIGsg PD0gVGVuX3BtYXgpIHsKKwkJaWYgKGR2YWwoJmQpIDwgdGVuc1trXSkKKwkJCWstLTsKKwkJa19j aGVjayA9IDA7CisJCX0KKwlqID0gYmJpdHMgLSBpIC0gMTsKKwlpZiAoaiA+PSAwKSB7CisJCWIy ID0gMDsKKwkJczIgPSBqOworCQl9CisJZWxzZSB7CisJCWIyID0gLWo7CisJCXMyID0gMDsKKwkJ fQorCWlmIChrID49IDApIHsKKwkJYjUgPSAwOworCQlzNSA9IGs7CisJCXMyICs9IGs7CisJCX0K KwllbHNlIHsKKwkJYjIgLT0gazsKKwkJYjUgPSAtazsKKwkJczUgPSAwOworCQl9CisJaWYgKG1v ZGUgPCAwIHx8IG1vZGUgPiA5KQorCQltb2RlID0gMDsKKwl0cnlfcXVpY2sgPSAxOworCWlmICht b2RlID4gNSkgeworCQltb2RlIC09IDQ7CisJCXRyeV9xdWljayA9IDA7CisJCX0KKwllbHNlIGlm IChpID49IC00IC0gRW1pbiB8fCBpIDwgRW1pbikKKwkJdHJ5X3F1aWNrID0gMDsKKwlsZWZ0cmln aHQgPSAxOworCWlsaW0gPSBpbGltMSA9IC0xOwkvKiBWYWx1ZXMgZm9yIGNhc2VzIDAgYW5kIDE7 IGRvbmUgaGVyZSB0byAqLworCQkJCS8qIHNpbGVuY2UgZXJyb25lb3VzICJnY2MgLVdhbGwiIHdh cm5pbmcuICovCisJc3dpdGNoKG1vZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCQlpID0g KGludCkobmJpdHMgKiAuMzAxMDMpICsgMzsKKwkJCW5kaWdpdHMgPSAwOworCQkJYnJlYWs7CisJ CWNhc2UgMjoKKwkJCWxlZnRyaWdodCA9IDA7CisJCQkvKiBubyBicmVhayAqLworCQljYXNlIDQ6 CisJCQlpZiAobmRpZ2l0cyA8PSAwKQorCQkJCW5kaWdpdHMgPSAxOworCQkJaWxpbSA9IGlsaW0x ID0gaSA9IG5kaWdpdHM7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbGVmdHJpZ2h0ID0gMDsK KwkJCS8qIG5vIGJyZWFrICovCisJCWNhc2UgNToKKwkJCWkgPSBuZGlnaXRzICsgayArIDE7CisJ CQlpbGltID0gaTsKKwkJCWlsaW0xID0gaSAtIDE7CisJCQlpZiAoaSA8PSAwKQorCQkJCWkgPSAx OworCQl9CisJcyA9IHMwID0gcnZfYWxsb2MoaSk7CisJaWYgKHMgPT0gTlVMTCkKKwkJcmV0dXJu IChOVUxMKTsKKworCWlmICggKHJkaXIgPSBmcGktPnJvdW5kaW5nIC0gMSkgIT0wKSB7CisJCWlm IChyZGlyIDwgMCkKKwkJCXJkaXIgPSAyOworCQlpZiAoa2luZCAmIFNUUlRPR19OZWcpCisJCQly ZGlyID0gMyAtIHJkaXI7CisJCX0KKworCS8qIE5vdyByZGlyID0gMCA9PT4gcm91bmQgbmVhciwg MSA9PT4gcm91bmQgdXAsIDIgPT0+IHJvdW5kIGRvd24uICovCisKKwlpZiAoaWxpbSA+PSAwICYm IGlsaW0gPD0gUXVpY2tfbWF4ICYmIHRyeV9xdWljayAmJiAhcmRpcgorI2lmbmRlZiBJTVBSRUNJ U0VfSU5FWEFDVAorCQkmJiBrID09IDAKKyNlbmRpZgorCQkJCQkJCQkpIHsKKworCQkvKiBUcnkg dG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4gKi8KKworCQlpID0gMDsK KwkJZDIgPSBkdmFsKCZkKTsKKyNpZmRlZiBJQk0KKwkJaWYgKCAoaiA9IDExIC0gaGkwYml0cyh3 b3JkMCgmZCkgJiBGcmFjX21hc2spKSAhPTApCisJCQlkdmFsKCZkKSAvPSAxIDw8IGo7CisjZW5k aWYKKwkJazAgPSBrOworCQlpbGltMCA9IGlsaW07CisJCWllcHMgPSAyOyAvKiBjb25zZXJ2YXRp dmUgKi8KKwkJaWYgKGsgPiAwKSB7CisJCQlkcyA9IHRlbnNbayYweGZdOworCQkJaiA9IGsgPj4g NDsKKwkJCWlmIChqICYgQmxldGNoKSB7CisJCQkJLyogcHJldmVudCBvdmVyZmxvd3MgKi8KKwkJ CQlqICY9IEJsZXRjaCAtIDE7CisJCQkJZHZhbCgmZCkgLz0gYmlndGVuc1tuX2JpZ3RlbnMtMV07 CisJCQkJaWVwcysrOworCQkJCX0KKwkJCWZvcig7IGo7IGogPj49IDEsIGkrKykKKwkJCQlpZiAo aiAmIDEpIHsKKwkJCQkJaWVwcysrOworCQkJCQlkcyAqPSBiaWd0ZW5zW2ldOworCQkJCQl9CisJ CQl9CisJCWVsc2UgIHsKKwkJCWRzID0gMS47CisJCQlpZiAoIChqMSA9IC1rKSAhPTApIHsKKwkJ CQlkdmFsKCZkKSAqPSB0ZW5zW2oxICYgMHhmXTsKKwkJCQlmb3IoaiA9IGoxID4+IDQ7IGo7IGog Pj49IDEsIGkrKykKKwkJCQkJaWYgKGogJiAxKSB7CisJCQkJCQlpZXBzKys7CisJCQkJCQlkdmFs KCZkKSAqPSBiaWd0ZW5zW2ldOworCQkJCQkJfQorCQkJCX0KKwkJCX0KKwkJaWYgKGtfY2hlY2sg JiYgZHZhbCgmZCkgPCAxLiAmJiBpbGltID4gMCkgeworCQkJaWYgKGlsaW0xIDw9IDApCisJCQkJ Z290byBmYXN0X2ZhaWxlZDsKKwkJCWlsaW0gPSBpbGltMTsKKwkJCWstLTsKKwkJCWR2YWwoJmQp ICo9IDEwLjsKKwkJCWllcHMrKzsKKwkJCX0KKwkJZHZhbCgmZXBzKSA9IGllcHMqZHZhbCgmZCkg KyA3LjsKKwkJd29yZDAoJmVwcykgLT0gKFAtMSkqRXhwX21zazE7CisJCWlmIChpbGltID09IDAp IHsKKwkJCVMgPSBtaGkgPSAwOworCQkJZHZhbCgmZCkgLT0gNS47CisJCQlpZiAoZHZhbCgmZCkg PiBkdmFsKCZlcHMpKQorCQkJCWdvdG8gb25lX2RpZ2l0OworCQkJaWYgKGR2YWwoJmQpIDwgLWR2 YWwoJmVwcykpCisJCQkJZ290byBub19kaWdpdHM7CisJCQlnb3RvIGZhc3RfZmFpbGVkOworCQkJ fQorI2lmbmRlZiBOb19sZWZ0cmlnaHQKKwkJaWYgKGxlZnRyaWdodCkgeworCQkJLyogVXNlIFN0 ZWVsZSAmIFdoaXRlIG1ldGhvZCBvZiBvbmx5CisJCQkgKiBnZW5lcmF0aW5nIGRpZ2l0cyBuZWVk ZWQuCisJCQkgKi8KKwkJCWR2YWwoJmVwcykgPSBkcyowLjUvdGVuc1tpbGltLTFdIC0gZHZhbCgm ZXBzKTsKKwkJCWZvcihpID0gMDs7KSB7CisJCQkJTCA9IChMb25nKShkdmFsKCZkKS9kcyk7CisJ CQkJZHZhbCgmZCkgLT0gTCpkczsKKwkJCQkqcysrID0gJzAnICsgKGludClMOworCQkJCWlmIChk dmFsKCZkKSA8IGR2YWwoJmVwcykpIHsKKwkJCQkJaWYgKGR2YWwoJmQpKQorCQkJCQkJaW5leCA9 IFNUUlRPR19JbmV4bG87CisJCQkJCWdvdG8gcmV0MTsKKwkJCQkJfQorCQkJCWlmIChkcyAtIGR2 YWwoJmQpIDwgZHZhbCgmZXBzKSkKKwkJCQkJZ290byBidW1wX3VwOworCQkJCWlmICgrK2kgPj0g aWxpbSkKKwkJCQkJYnJlYWs7CisJCQkJZHZhbCgmZXBzKSAqPSAxMC47CisJCQkJZHZhbCgmZCkg Kj0gMTAuOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisjZW5kaWYKKwkJCS8qIEdlbmVyYXRlIGls aW0gZGlnaXRzLCB0aGVuIGZpeCB0aGVtIHVwLiAqLworCQkJZHZhbCgmZXBzKSAqPSB0ZW5zW2ls aW0tMV07CisJCQlmb3IoaSA9IDE7OyBpKyssIGR2YWwoJmQpICo9IDEwLikgeworCQkJCWlmICgg KEwgPSAoTG9uZykoZHZhbCgmZCkvZHMpKSAhPTApCisJCQkJCWR2YWwoJmQpIC09IEwqZHM7CisJ CQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCQlpZiAoaSA9PSBpbGltKSB7CisJCQkJCWRzICo9 IDAuNTsKKwkJCQkJaWYgKGR2YWwoJmQpID4gZHMgKyBkdmFsKCZlcHMpKQorCQkJCQkJZ290byBi dW1wX3VwOworCQkJCQllbHNlIGlmIChkdmFsKCZkKSA8IGRzIC0gZHZhbCgmZXBzKSkgeworCQkJ CQkJaWYgKGR2YWwoJmQpKQorCQkJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQkJCQkJZ290 byBjbGVhcl90cmFpbGluZzA7CisJCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQor I2lmbmRlZiBOb19sZWZ0cmlnaHQKKwkJCX0KKyNlbmRpZgorIGZhc3RfZmFpbGVkOgorCQlzID0g czA7CisJCWR2YWwoJmQpID0gZDI7CisJCWsgPSBrMDsKKwkJaWxpbSA9IGlsaW0wOworCQl9CisK KwkvKiBEbyB3ZSBoYXZlIGEgInNtYWxsIiBpbnRlZ2VyPyAqLworCisJaWYgKGJlID49IDAgJiYg ayA8PSBJbnRfbWF4KSB7CisJCS8qIFllcy4gKi8KKwkJZHMgPSB0ZW5zW2tdOworCQlpZiAobmRp Z2l0cyA8IDAgJiYgaWxpbSA8PSAwKSB7CisJCQlTID0gbWhpID0gMDsKKwkJCWlmIChpbGltIDwg MCB8fCBkdmFsKCZkKSA8PSA1KmRzKQorCQkJCWdvdG8gbm9fZGlnaXRzOworCQkJZ290byBvbmVf ZGlnaXQ7CisJCQl9CisJCWZvcihpID0gMTs7IGkrKywgZHZhbCgmZCkgKj0gMTAuKSB7CisJCQlM ID0gZHZhbCgmZCkgLyBkczsKKwkJCWR2YWwoJmQpIC09IEwqZHM7CisjaWZkZWYgQ2hlY2tfRkxU X1JPVU5EUworCQkJLyogSWYgRkxUX1JPVU5EUyA9PSAyLCBMIHdpbGwgdXN1YWxseSBiZSBoaWdo IGJ5IDEgKi8KKwkJCWlmIChkdmFsKCZkKSA8IDApIHsKKwkJCQlMLS07CisJCQkJZHZhbCgmZCkg Kz0gZHM7CisJCQkJfQorI2VuZGlmCisJCQkqcysrID0gJzAnICsgKGludClMOworCQkJaWYgKGR2 YWwoJmQpID09IDAuKQorCQkJCWJyZWFrOworCQkJaWYgKGkgPT0gaWxpbSkgeworCQkJCWlmIChy ZGlyKSB7CisJCQkJCWlmIChyZGlyID09IDEpCisJCQkJCQlnb3RvIGJ1bXBfdXA7CisJCQkJCWlu ZXggPSBTVFJUT0dfSW5leGxvOworCQkJCQlnb3RvIHJldDE7CisJCQkJCX0KKwkJCQlkdmFsKCZk KSArPSBkdmFsKCZkKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwkJCQlpZiAoZHZhbCgmZCkgPj0g ZHMpCisjZWxzZQorCQkJCWlmIChkdmFsKCZkKSA+IGRzIHx8IChkdmFsKCZkKSA9PSBkcyAmJiBM ICYgMSkpCisjZW5kaWYKKwkJCQkJeworIGJ1bXBfdXA6CisJCQkJCWluZXggPSBTVFJUT0dfSW5l eGhpOworCQkJCQl3aGlsZSgqLS1zID09ICc5JykKKwkJCQkJCWlmIChzID09IHMwKSB7CisJCQkJ CQkJaysrOworCQkJCQkJCSpzID0gJzAnOworCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJ KysqcysrOworCQkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOwor IGNsZWFyX3RyYWlsaW5nMDoKKwkJCQkJd2hpbGUoKi0tcyA9PSAnMCcpe30KKwkJCQkJKytzOwor CQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQlnb3RvIHJldDE7CisJCX0KKworCW0y ID0gYjI7CisJbTUgPSBiNTsKKwltaGkgPSBtbG8gPSAwOworCWlmIChsZWZ0cmlnaHQpIHsKKwkJ aSA9IG5iaXRzIC0gYmJpdHM7CisJCWlmIChiZSAtIGkrKyA8IGZwaS0+ZW1pbiAmJiBtb2RlICE9 IDMgJiYgbW9kZSAhPSA1KSB7CisJCQkvKiBkZW5vcm1hbCAqLworCQkJaSA9IGJlIC0gZnBpLT5l bWluICsgMTsKKwkJCWlmIChtb2RlID49IDIgJiYgaWxpbSA+IDAgJiYgaWxpbSA8IGkpCisJCQkJ Z290byBzbWFsbF9pbGltOworCQkJfQorCQllbHNlIGlmIChtb2RlID49IDIpIHsKKyBzbWFsbF9p bGltOgorCQkJaiA9IGlsaW0gLSAxOworCQkJaWYgKG01ID49IGopCisJCQkJbTUgLT0gajsKKwkJ CWVsc2UgeworCQkJCXM1ICs9IGogLT0gbTU7CisJCQkJYjUgKz0gajsKKwkJCQltNSA9IDA7CisJ CQkJfQorCQkJaWYgKChpID0gaWxpbSkgPCAwKSB7CisJCQkJbTIgLT0gaTsKKwkJCQlpID0gMDsK KwkJCQl9CisJCQl9CisJCWIyICs9IGk7CisJCXMyICs9IGk7CisJCW1oaSA9IGkyYigxKTsKKwkJ aWYgKG1oaSA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlmIChtMiA+IDAgJiYg czIgPiAwKSB7CisJCWkgPSBtMiA8IHMyID8gbTIgOiBzMjsKKwkJYjIgLT0gaTsKKwkJbTIgLT0g aTsKKwkJczIgLT0gaTsKKwkJfQorCWlmIChiNSA+IDApIHsKKwkJaWYgKGxlZnRyaWdodCkgewor CQkJaWYgKG01ID4gMCkgeworCQkJCW1oaSA9IHBvdzVtdWx0KG1oaSwgbTUpOworCQkJCWlmICht aGkgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQliMSA9IG11bHQobWhpLCBiKTsK KwkJCQlpZiAoYjEgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQlCZnJlZShiKTsK KwkJCQliID0gYjE7CisJCQkJfQorCQkJaWYgKCAoaiA9IGI1IC0gbTUpICE9MCkgeworCQkJCWIg PSBwb3c1bXVsdChiLCBqKTsKKwkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwp OworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisJCQliID0gcG93NW11bHQoYiwgYjUpOworCQkJaWYg KGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQl9CisJUyA9IGkyYigxKTsK KwlpZiAoUyA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWlmIChzNSA+IDApIHsKKwkJUyA9 IHBvdzVtdWx0KFMsIHM1KTsKKwkJaWYgKFMgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJ CX0KKworCS8qIENoZWNrIGZvciBzcGVjaWFsIGNhc2UgdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBw b3dlciBvZiAyLiAqLworCisJc3BlY19jYXNlID0gMDsKKwlpZiAobW9kZSA8IDIpIHsKKwkJaWYg KGJiaXRzID09IDEgJiYgYmUwID4gZnBpLT5lbWluICsgMSkgeworCQkJLyogVGhlIHNwZWNpYWwg Y2FzZSAqLworCQkJYjIrKzsKKwkJCXMyKys7CisJCQlzcGVjX2Nhc2UgPSAxOworCQkJfQorCQl9 CisKKwkvKiBBcnJhbmdlIGZvciBjb252ZW5pZW50IGNvbXB1dGF0aW9uIG9mIHF1b3RpZW50czoK KwkgKiBzaGlmdCBsZWZ0IGlmIG5lY2Vzc2FyeSBzbyBkaXZpc29yIGhhcyA0IGxlYWRpbmcgMCBi aXRzLgorCSAqCisJICogUGVyaGFwcyB3ZSBzaG91bGQganVzdCBjb21wdXRlIGxlYWRpbmcgMjgg Yml0cyBvZiBTIG9uY2UKKwkgKiBhbmQgZm9yIGFsbCBhbmQgcGFzcyB0aGVtIGFuZCBhIHNoaWZ0 IHRvIHF1b3JlbSwgc28gaXQKKwkgKiBjYW4gZG8gc2hpZnRzIGFuZCBvcnMgdG8gY29tcHV0ZSB0 aGUgbnVtZXJhdG9yIGZvciBxLgorCSAqLworCWkgPSAoKHM1ID8gaGkwYml0cyhTLT54W1MtPndk cy0xXSkgOiBVTGJpdHMgLSAxKSAtIHMyIC0gNCkgJiBrbWFzazsKKwltMiArPSBpOworCWlmICgo YjIgKz0gaSkgPiAwKSB7CisJCWIgPSBsc2hpZnQoYiwgYjIpOworCQlpZiAoYiA9PSBOVUxMKQor CQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlmICgoczIgKz0gaSkgPiAwKSB7CisJCVMgPSBsc2hp ZnQoUywgczIpOworCQlpZiAoUyA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlm IChrX2NoZWNrKSB7CisJCWlmIChjbXAoYixTKSA8IDApIHsKKwkJCWstLTsKKwkJCWIgPSBtdWx0 YWRkKGIsIDEwLCAwKTsJLyogd2UgYm90Y2hlZCB0aGUgayBlc3RpbWF0ZSAqLworCQkJaWYgKGIg PT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJaWYgKGxlZnRyaWdodCkgeworCQkJCW1o aSA9IG11bHRhZGQobWhpLCAxMCwgMCk7CisJCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCQlyZXR1 cm4gKE5VTEwpOworCQkJCX0KKwkJCWlsaW0gPSBpbGltMTsKKwkJCX0KKwkJfQorCWlmIChpbGlt IDw9IDAgJiYgbW9kZSA+IDIpIHsKKwkJUyA9IG11bHRhZGQoUyw1LDApOworCQlpZiAoUyA9PSBO VUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJaWYgKGlsaW0gPCAwIHx8IGNtcChiLFMpIDw9IDAp IHsKKwkJCS8qIG5vIGRpZ2l0cywgZmN2dCBzdHlsZSAqLworIG5vX2RpZ2l0czoKKwkJCWsgPSAt MSAtIG5kaWdpdHM7CisJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKwkJCWdvdG8gcmV0OworCQkJ fQorIG9uZV9kaWdpdDoKKwkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCSpzKysgPSAnMSc7CisJ CWsrKzsKKwkJZ290byByZXQ7CisJCX0KKwlpZiAobGVmdHJpZ2h0KSB7CisJCWlmIChtMiA+IDAp IHsKKwkJCW1oaSA9IGxzaGlmdChtaGksIG0yKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQly ZXR1cm4gKE5VTEwpOworCQkJfQorCisJCS8qIENvbXB1dGUgbWxvIC0tIGNoZWNrIGZvciBzcGVj aWFsIGNhc2UKKwkJICogdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBwb3dlciBvZiAyLgorCQkgKi8K KworCQltbG8gPSBtaGk7CisJCWlmIChzcGVjX2Nhc2UpIHsKKwkJCW1oaSA9IEJhbGxvYyhtaGkt PmspOworCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlCY29weSht aGksIG1sbyk7CisJCQltaGkgPSBsc2hpZnQobWhpLCAxKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkK KwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCisJCWZvcihpID0gMTs7aSsrKSB7CisJCQlkaWcg PSBxdW9yZW0oYixTKSArICcwJzsKKwkJCS8qIERvIHdlIHlldCBoYXZlIHRoZSBzaG9ydGVzdCBk ZWNpbWFsIHN0cmluZworCQkJICogdGhhdCB3aWxsIHJvdW5kIHRvIGQ/CisJCQkgKi8KKwkJCWog PSBjbXAoYiwgbWxvKTsKKwkJCWRlbHRhID0gZGlmZihTLCBtaGkpOworCQkJaWYgKGRlbHRhID09 IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWoxID0gZGVsdGEtPnNpZ24gPyAxIDogY21w KGIsIGRlbHRhKTsKKwkJCUJmcmVlKGRlbHRhKTsKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQlp ZiAoajEgPT0gMCAmJiAhbW9kZSAmJiAhKGJpdHNbMF0gJiAxKSAmJiAhcmRpcikgeworCQkJCWlm IChkaWcgPT0gJzknKQorCQkJCQlnb3RvIHJvdW5kXzlfdXA7CisJCQkJaWYgKGogPD0gMCkgewor CQkJCQlpZiAoYi0+d2RzID4gMSB8fCBiLT54WzBdKQorCQkJCQkJaW5leCA9IFNUUlRPR19JbmV4 bG87CisJCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZGlnKys7CisJCQkJCWluZXggPSBTVFJUT0df SW5leGhpOworCQkJCQl9CisJCQkJKnMrKyA9IGRpZzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9Cisj ZW5kaWYKKwkJCWlmIChqIDwgMCB8fCAoaiA9PSAwICYmICFtb2RlCisjaWZuZGVmIFJPVU5EX0JJ QVNFRAorCQkJCQkJCSYmICEoYml0c1swXSAmIDEpCisjZW5kaWYKKwkJCQkJKSkgeworCQkJCWlm IChyZGlyICYmIChiLT53ZHMgPiAxIHx8IGItPnhbMF0pKSB7CisJCQkJCWlmIChyZGlyID09IDIp IHsKKwkJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQkJCQkJZ290byBhY2NlcHQ7CisJCQkJ CQl9CisJCQkJCXdoaWxlIChjbXAoUyxtaGkpID4gMCkgeworCQkJCQkJKnMrKyA9IGRpZzsKKwkJ CQkJCW1oaTEgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCQkJaWYgKG1oaTEgPT0gTlVMTCkK KwkJCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCQkJaWYgKG1sbyA9PSBtaGkpCisJCQkJCQkJbWxv ID0gbWhpMTsKKwkJCQkJCW1oaSA9IG1oaTE7CisJCQkJCQliID0gbXVsdGFkZChiLCAxMCwgMCk7 CisJCQkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJCQlkaWcg PSBxdW9yZW0oYixTKSArICcwJzsKKwkJCQkJCX0KKwkJCQkJaWYgKGRpZysrID09ICc5JykKKwkJ CQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCQkJCWdv dG8gYWNjZXB0OworCQkJCQl9CisJCQkJaWYgKGoxID4gMCkgeworCQkJCQliID0gbHNoaWZ0KGIs IDEpOworCQkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQkJajEg PSBjbXAoYiwgUyk7CisjaWZkZWYgUk9VTkRfQklBU0VECisJCQkJCWlmIChqMSA+PSAwIC8qKSov CisjZWxzZQorCQkJCQlpZiAoKGoxID4gMCB8fCAoajEgPT0gMCAmJiBkaWcgJiAxKSkKKyNlbmRp ZgorCQkJCQkmJiBkaWcrKyA9PSAnOScpCisJCQkJCQlnb3RvIHJvdW5kXzlfdXA7CisJCQkJCWlu ZXggPSBTVFJUT0dfSW5leGhpOworCQkJCQl9CisJCQkJaWYgKGItPndkcyA+IDEgfHwgYi0+eFsw XSkKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisgYWNjZXB0OgorCQkJCSpzKysgPSBkaWc7 CisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJaWYgKGoxID4gMCAmJiByZGlyICE9IDIpIHsKKwkJ CQlpZiAoZGlnID09ICc5JykgeyAvKiBwb3NzaWJsZSBpZiBpID09IDEgKi8KKyByb3VuZF85X3Vw OgorCQkJCQkqcysrID0gJzknOworCQkJCQlpbmV4ID0gU1RSVE9HX0luZXhoaTsKKwkJCQkJZ290 byByb3VuZG9mZjsKKwkJCQkJfQorCQkJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQkJCSpzKysg PSBkaWcgKyAxOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCSpzKysgPSBkaWc7CisJCQlpZiAo aSA9PSBpbGltKQorCQkJCWJyZWFrOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOworCQkJaWYg KGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJaWYgKG1sbyA9PSBtaGkpIHsKKwkJ CQltbG8gPSBtaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtbG8gPT0gTlVMTCkK KwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQltbG8gPSBtdWx0YWRk KG1sbywgMTAsIDApOworCQkJCWlmIChtbG8gPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsK KwkJCQltaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtaGkgPT0gTlVMTCkKKwkJ CQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCX0KKwllbHNlCisJCWZvcihpID0gMTs7 IGkrKykgeworCQkJKnMrKyA9IGRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworCQkJaWYgKGkgPj0g aWxpbSkKKwkJCQlicmVhazsKKwkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKKwkJCWlmIChiID09 IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKworCS8qIFJvdW5kIG9mZiBsYXN0IGRp Z2l0ICovCisKKwlpZiAocmRpcikgeworCQlpZiAocmRpciA9PSAyIHx8IChiLT53ZHMgPD0gMSAm JiAhYi0+eFswXSkpCisJCQlnb3RvIGNob3B6ZXJvczsKKwkJZ290byByb3VuZG9mZjsKKwkJfQor CWIgPSBsc2hpZnQoYiwgMSk7CisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlq ID0gY21wKGIsIFMpOworI2lmZGVmIFJPVU5EX0JJQVNFRAorCWlmIChqID49IDApCisjZWxzZQor CWlmIChqID4gMCB8fCAoaiA9PSAwICYmIGRpZyAmIDEpKQorI2VuZGlmCisJCXsKKyByb3VuZG9m ZjoKKwkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCXdoaWxlKCotLXMgPT0gJzknKQorCQkJaWYg KHMgPT0gczApIHsKKwkJCQlrKys7CisJCQkJKnMrKyA9ICcxJzsKKwkJCQlnb3RvIHJldDsKKwkJ CQl9CisJCSsrKnMrKzsKKwkJfQorCWVsc2UgeworIGNob3B6ZXJvczoKKwkJaWYgKGItPndkcyA+ IDEgfHwgYi0+eFswXSkKKwkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQl3aGlsZSgqLS1zID09 ICcwJyl7fQorCQkrK3M7CisJCX0KKyByZXQ6CisJQmZyZWUoUyk7CisJaWYgKG1oaSkgeworCQlp ZiAobWxvICYmIG1sbyAhPSBtaGkpCisJCQlCZnJlZShtbG8pOworCQlCZnJlZShtaGkpOworCQl9 CisgcmV0MToKKwlCZnJlZShiKTsKKwkqcyA9IDA7CisJKmRlY3B0ID0gayArIDE7CisJaWYgKHJ2 ZSkKKwkJKnJ2ZSA9IHM7CisJKmtpbmRwIHw9IGluZXg7CisJcmV0dXJuIHMwOworCX0KK0RFRl9T VFJPTkcoZ2R0b2EpOwpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWdtaXNj LmMgYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtZ21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAuLjgyNzBlZjk0NAotLS0gL2Rldi9udWxsCisrKyBiL25ld2xpYi9s aWJjL3N0ZGxpYi9nZHRvYS1nbWlzYy5jCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1Ro ZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAo QykgMTk5OCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Bl cm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdh cmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVl IGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xh aW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5h bWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVy dGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNv ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xV Q0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FS RSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElU SUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBP RiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRX QVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBN LiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAi IGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgi CisKKyB2b2lkCisjaWZkZWYgS1JfaGVhZGVycworcnNoaWZ0KGIsIGspIEJpZ2ludCAqYjsgaW50 IGs7CisjZWxzZQorcnNoaWZ0KEJpZ2ludCAqYiwgaW50IGspCisjZW5kaWYKK3sKKwlVTG9uZyAq eCwgKngxLCAqeGUsIHk7CisJaW50IG47CisKKwl4ID0geDEgPSBiLT54OworCW4gPSBrID4+IGtz aGlmdDsKKwlpZiAobiA8IGItPndkcykgeworCQl4ZSA9IHggKyBiLT53ZHM7CisJCXggKz0gbjsK KwkJaWYgKGsgJj0ga21hc2spIHsKKwkJCW4gPSBVTGJpdHMgLSBrOworCQkJeSA9ICp4KysgPj4g azsKKwkJCXdoaWxlKHggPCB4ZSkgeworCQkJCSp4MSsrID0gKHkgfCAoKnggPDwgbikpICYgQUxM X09OOworCQkJCXkgPSAqeCsrID4+IGs7CisJCQkJfQorCQkJaWYgKCgqeDEgPSB5KSAhPTApCisJ CQkJeDErKzsKKwkJCX0KKwkJZWxzZQorCQkJd2hpbGUoeCA8IHhlKQorCQkJCSp4MSsrID0gKngr KzsKKwkJfQorCWlmICgoYi0+d2RzID0geDEgLSBiLT54KSA9PSAwKQorCQliLT54WzBdID0gMDsK Kwl9CisKKyBpbnQKKyNpZmRlZiBLUl9oZWFkZXJzCit0cmFpbHooYikgQmlnaW50ICpiOworI2Vs c2UKK3RyYWlseihCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlVTG9uZyBMLCAqeCwgKnhlOworCWlu dCBuID0gMDsKKworCXggPSBiLT54OworCXhlID0geCArIGItPndkczsKKwlmb3IobiA9IDA7IHgg PCB4ZSAmJiAhKng7IHgrKykKKwkJbiArPSBVTGJpdHM7CisJaWYgKHggPCB4ZSkgeworCQlMID0g Kng7CisJCW4gKz0gbG8wYml0cygmTCk7CisJCX0KKwlyZXR1cm4gbjsKKwl9CmRpZmYgLS1naXQg YS9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtbGR0b2EuYyBiL25ld2xpYi9saWJjL3N0ZGxpYi9n ZHRvYS1sZHRvYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uNzI4MmU3 YTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV3bGliL2xpYmMvc3RkbGliL2dkdG9hLWxkdG9hLmMK QEAgLTAsMCArMSwxMjQgQEAKKy8qCSRPcGVuQlNEOiBsZHRvYS5jLHYgMS40IDIwMTYvMDMvMDkg MTY6Mjg6NDcgZGVyYWFkdCBFeHAgJAkqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgRGF2 aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5E IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pZWVlLmg+CisjaW5j bHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4K KyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiZ2R0b2Fp bXAuaCIKKworI2lmIChMREJMX01BTlRfRElHID4gREJMX01BTlRfRElHKQorCisvKgorICogbGR0 b2EoKSBpcyBhIHdyYXBwZXIgZm9yIGdkdG9hKCkgdGhhdCBtYWtlcyBpdCBzbWVsbCBsaWtlIGR0 b2EoKSwKKyAqIGV4Y2VwdCB0aGF0IHRoZSBmbG9hdGluZyBwb2ludCBhcmd1bWVudCBpcyBwYXNz ZWQgYnkgcmVmZXJlbmNlLgorICogV2hlbiBkdG9hKCkgaXMgcGFzc2VkIGEgTmFOIG9yIGluZmlu aXR5LCBpdCBzZXRzIGV4cHQgdG8gOTk5OS4KKyAqIEhvd2V2ZXIsIGEgbG9uZyBkb3VibGUgY291 bGQgaGF2ZSBhIHZhbGlkIGV4cG9uZW50IG9mIDk5OTksIHNvIHdlCisgKiB1c2UgSU5UX01BWCBp biBsZHRvYSgpIGluc3RlYWQuCisgKi8KK2NoYXIgKgorX19sZHRvYShsb25nIGRvdWJsZSAqbGQs IGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLAorICAgIGNoYXIg KipydmUpCit7CisJRlBJIGZwaSA9IHsKKwkJTERCTF9NQU5UX0RJRywJCQkvKiBuYml0cyAqLwor CQlMREJMX01JTl9FWFAgLSBMREJMX01BTlRfRElHLAkvKiBlbWluICovCisJCUxEQkxfTUFYX0VY UCAtIExEQkxfTUFOVF9ESUcsCS8qIGVtYXggKi8KKwkJRkxUX1JPVU5EUywJICAgICAgIAkJLyog cm91bmRpbmcgKi8KKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CS8qIHVudXNlZCwgYnV0IGNvcnJl Y3QgYW55d2F5ICovCisJCTEKKyNlbHNlCisJCTAKKyNlbmRpZgorCX07CisJaW50IGJlLCBraW5k OworCWNoYXIgKnJldDsKKwlzdHJ1Y3QgaWVlZV9leHQgKnAgPSAoc3RydWN0IGllZWVfZXh0ICop bGQ7CisJdWludDMyX3QgYml0c1soTERCTF9NQU5UX0RJRyArIDMxKSAvIDMyXTsKKwl2b2lkICp2 Yml0cyA9IGJpdHM7CisKKwkvKgorCSAqIGdkdG9hIGRvZXNuJ3Qga25vdyBhbnl0aGluZyBhYm91 dCB0aGUgc2lnbiBvZiB0aGUgbnVtYmVyLCBzbworCSAqIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRp dmUsIHdlIG5lZWQgdG8gc3dhcCByb3VuZGluZyBtb2RlcyBvZgorCSAqIDIgKHVwd2FyZHMpIGFu ZCAzIChkb3dud2FyZHMpLgorCSAqLworCSpzaWduID0gcC0+ZXh0X3NpZ247CisJZnBpLnJvdW5k aW5nIF49IChmcGkucm91bmRpbmcgPj4gMSkgJiBwLT5leHRfc2lnbjsKKworCWJlID0gcC0+ZXh0 X2V4cCAtIChMREJMX01BWF9FWFAgLSAxKSAtIChMREJMX01BTlRfRElHIC0gMSk7CisJRVhUX1RP X0FSUkFZMzIocCwgYml0cyk7CisKKwlzd2l0Y2ggKGZwY2xhc3NpZnkoKmxkKSkgeworCWNhc2Ug RlBfTk9STUFMOgorCQlraW5kID0gU1RSVE9HX05vcm1hbDsKKyNpZmRlZiBFWFRfSU1QTElDSVRf TkJJVAorCQliaXRzW0xEQkxfTUFOVF9ESUcgLyAzMl0gfD0gMSA8PCAoKExEQkxfTUFOVF9ESUcg LSAxKSAlIDMyKTsKKyNlbmRpZiAvKiBFWFRfSU1QTElDSVRfTkJJVCAqLworCQlicmVhazsKKwlj YXNlIEZQX1pFUk86CisJCWtpbmQgPSBTVFJUT0dfWmVybzsKKwkJYnJlYWs7CisJY2FzZSBGUF9T VUJOT1JNQUw6CisJCWtpbmQgPSBTVFJUT0dfRGVub3JtYWw7CisJCWJlKys7CisJCWJyZWFrOwor CWNhc2UgRlBfSU5GSU5JVEU6CisJCWtpbmQgPSBTVFJUT0dfSW5maW5pdGU7CisJCWJyZWFrOwor CWNhc2UgRlBfTkFOOgorCQlraW5kID0gU1RSVE9HX05hTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJYWJvcnQoKTsKKwl9CisKKwlyZXQgPSBnZHRvYSgmZnBpLCBiZSwgdmJpdHMsICZraW5kLCBt b2RlLCBuZGlnaXRzLCBkZWNwdCwgcnZlKTsKKwlpZiAoKmRlY3B0ID09IC0zMjc2OCkKKwkJKmRl Y3B0ID0gSU5UX01BWDsKKwlyZXR1cm4gcmV0OworfQorREVGX1NUUk9ORyhfX2xkdG9hKTsKKwor I2Vsc2UgICAvKiAoTERCTF9NQU5UX0RJRyA9PSBEQkxfTUFOVF9ESUcpICovCisKK2NoYXIgKgor X19sZHRvYShsb25nIGRvdWJsZSAqbGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNw dCwgaW50ICpzaWduLAorICAgIGNoYXIgKipydmUpCit7CisJY2hhciAqcmV0OworCisJcmV0ID0g ZHRvYSgoZG91YmxlKSpsZCwgbW9kZSwgbmRpZ2l0cywgZGVjcHQsIHNpZ24sIHJ2ZSk7CisJaWYg KCpkZWNwdCA9PSA5OTk5KQorCQkqZGVjcHQgPSBJTlRfTUFYOworCXJldHVybiByZXQ7Cit9CitE RUZfU1RST05HKF9fbGR0b2EpOworCisjZW5kaWYgIC8qIChMREJMX01BTlRfRElHID09IERCTF9N QU5UX0RJRykgKi8KZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS1taXNjLmMg Yi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EtbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMC4uNWQxZTBhZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV3bGliL2xpYmMv c3RkbGliL2dkdG9hLW1pc2MuYwpAQCAtMCwwICsxLDkxMiBAQAorLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1 dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAx OTk4LCAxOTk5IGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKwor UGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0 d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBm ZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNj bGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUg bmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2 ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUg c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKwor TFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRX QVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5U SVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NT IE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09G VFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlk IE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAi QCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAu aCIKKworIHN0YXRpYyBCaWdpbnQgKmZyZWVsaXN0W0ttYXgrMV07CisjaWZuZGVmIE9taXRfUHJp dmF0ZV9NZW1vcnkKKyNpZm5kZWYgUFJJVkFURV9NRU0KKyNkZWZpbmUgUFJJVkFURV9NRU0gMjMw NAorI2VuZGlmCisjZGVmaW5lIFBSSVZBVEVfbWVtICgoUFJJVkFURV9NRU0rc2l6ZW9mKGRvdWJs ZSktMSkvc2l6ZW9mKGRvdWJsZSkpCitzdGF0aWMgZG91YmxlIHByaXZhdGVfbWVtW1BSSVZBVEVf bWVtXSwgKnBtZW1fbmV4dCA9IHByaXZhdGVfbWVtOworI2VuZGlmCisKKyNpZmRlZiBNVUxUSVBM RV9USFJFQURTCitfX0xPQ0tfSU5JVChzdGF0aWMsIF9fZHRvYV9sb2NrMCk7CitfX0xPQ0tfSU5J VChzdGF0aWMsIF9fZHRvYV9sb2NrMSk7CisjZW5kaWYKKworIEJpZ2ludCAqCitCYWxsb2MKKyNp ZmRlZiBLUl9oZWFkZXJzCisJKGspIGludCBrOworI2Vsc2UKKwkoaW50IGspCisjZW5kaWYKK3sK KwlpbnQgeDsKKwlCaWdpbnQgKnJ2OworI2lmbmRlZiBPbWl0X1ByaXZhdGVfTWVtb3J5CisJdW5z aWduZWQgaW50IGxlbjsKKyNlbmRpZgorCisJQUNRVUlSRV9EVE9BX0xPQ0soMCk7CisJLyogVGhl IGsgPiBLbWF4IGNhc2UgZG9lcyBub3QgbmVlZCBBQ1FVSVJFX0RUT0FfTE9DSygwKSwgKi8KKwkv KiBidXQgdGhpcyBjYXNlIHNlZW1zIHZlcnkgdW5saWtlbHkuICovCisJaWYgKGsgPD0gS21heCAm JiAocnYgPSBmcmVlbGlzdFtrXSkgIT0wKSB7CisJCWZyZWVsaXN0W2tdID0gcnYtPm5leHQ7CisJ CX0KKwllbHNlIHsKKwkJeCA9IDEgPDwgazsKKyNpZmRlZiBPbWl0X1ByaXZhdGVfTWVtb3J5CisJ CXJ2ID0gKEJpZ2ludCAqKU1BTExPQyhzaXplb2YoQmlnaW50KSArICh4LTEpKnNpemVvZihVTG9u ZykpOworCQlpZiAocnYgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisjZWxzZQorCQlsZW4g PSAoc2l6ZW9mKEJpZ2ludCkgKyAoeC0xKSpzaXplb2YoVUxvbmcpICsgc2l6ZW9mKGRvdWJsZSkg LSAxKQorCQkJL3NpemVvZihkb3VibGUpOworCQlpZiAoayA8PSBLbWF4ICYmIHBtZW1fbmV4dCAt IHByaXZhdGVfbWVtICsgbGVuIDw9IFBSSVZBVEVfbWVtKSB7CisJCQlydiA9IChCaWdpbnQqKXBt ZW1fbmV4dDsKKwkJCXBtZW1fbmV4dCArPSBsZW47CisJCQl9CisJCWVsc2UgeworCQkJcnYgPSAo QmlnaW50KilNQUxMT0MobGVuKnNpemVvZihkb3VibGUpKTsKKwkJCWlmIChydiA9PSBOVUxMKQor CQkJCXJldHVybiAoTlVMTCk7CisJCX0KKyNlbmRpZgorCQlydi0+ayA9IGs7CisJCXJ2LT5tYXh3 ZHMgPSB4OworCQl9CisJRlJFRV9EVE9BX0xPQ0soMCk7CisJcnYtPnNpZ24gPSBydi0+d2RzID0g MDsKKwlyZXR1cm4gcnY7CisJfQorCisgdm9pZAorQmZyZWUKKyNpZmRlZiBLUl9oZWFkZXJzCisJ KHYpIEJpZ2ludCAqdjsKKyNlbHNlCisJKEJpZ2ludCAqdikKKyNlbmRpZgoreworCWlmICh2KSB7 CisJCWlmICh2LT5rID4gS21heCkKKyNpZmRlZiBGUkVFCisJCQlGUkVFKHYpOworI2Vsc2UKKwkJ CWZyZWUodik7CisjZW5kaWYKKwkJZWxzZSB7CisJCQlBQ1FVSVJFX0RUT0FfTE9DSygwKTsKKwkJ CXYtPm5leHQgPSBmcmVlbGlzdFt2LT5rXTsKKwkJCWZyZWVsaXN0W3YtPmtdID0gdjsKKwkJCUZS RUVfRFRPQV9MT0NLKDApOworCQkJfQorCQl9CisJfQorCisgaW50CitsbzBiaXRzCisjaWZkZWYg S1JfaGVhZGVycworCSh5KSBVTG9uZyAqeTsKKyNlbHNlCisJKFVMb25nICp5KQorI2VuZGlmCit7 CisJaW50IGs7CisJVUxvbmcgeCA9ICp5OworCisJaWYgKHggJiA3KSB7CisJCWlmICh4ICYgMSkK KwkJCXJldHVybiAwOworCQlpZiAoeCAmIDIpIHsKKwkJCSp5ID0geCA+PiAxOworCQkJcmV0dXJu IDE7CisJCQl9CisJCSp5ID0geCA+PiAyOworCQlyZXR1cm4gMjsKKwkJfQorCWsgPSAwOworCWlm ICghKHggJiAweGZmZmYpKSB7CisJCWsgPSAxNjsKKwkJeCA+Pj0gMTY7CisJCX0KKwlpZiAoISh4 ICYgMHhmZikpIHsKKwkJayArPSA4OworCQl4ID4+PSA4OworCQl9CisJaWYgKCEoeCAmIDB4Zikp IHsKKwkJayArPSA0OworCQl4ID4+PSA0OworCQl9CisJaWYgKCEoeCAmIDB4MykpIHsKKwkJayAr PSAyOworCQl4ID4+PSAyOworCQl9CisJaWYgKCEoeCAmIDEpKSB7CisJCWsrKzsKKwkJeCA+Pj0g MTsKKwkJaWYgKCF4KQorCQkJcmV0dXJuIDMyOworCQl9CisJKnkgPSB4OworCXJldHVybiBrOwor CX0KKworIEJpZ2ludCAqCittdWx0YWRkCisjaWZkZWYgS1JfaGVhZGVycworCShiLCBtLCBhKSBC aWdpbnQgKmI7IGludCBtLCBhOworI2Vsc2UKKwkoQmlnaW50ICpiLCBpbnQgbSwgaW50IGEpCS8q IG11bHRpcGx5IGJ5IG0gYW5kIGFkZCBhICovCisjZW5kaWYKK3sKKwlpbnQgaSwgd2RzOworI2lm ZGVmIFVMTG9uZworCVVMb25nICp4OworCVVMTG9uZyBjYXJyeSwgeTsKKyNlbHNlCisJVUxvbmcg Y2FycnksICp4LCB5OworI2lmZGVmIFBhY2tfMzIKKwlVTG9uZyB4aSwgejsKKyNlbmRpZgorI2Vu ZGlmCisJQmlnaW50ICpiMTsKKworCXdkcyA9IGItPndkczsKKwl4ID0gYi0+eDsKKwlpID0gMDsK KwljYXJyeSA9IGE7CisJZG8geworI2lmZGVmIFVMTG9uZworCQl5ID0gKnggKiAoVUxMb25nKW0g KyBjYXJyeTsKKwkJY2FycnkgPSB5ID4+IDMyOworCQkqeCsrID0geSAmIDB4ZmZmZmZmZmZVTDsK KyNlbHNlCisjaWZkZWYgUGFja18zMgorCQl4aSA9ICp4OworCQl5ID0gKHhpICYgMHhmZmZmKSAq IG0gKyBjYXJyeTsKKwkJeiA9ICh4aSA+PiAxNikgKiBtICsgKHkgPj4gMTYpOworCQljYXJyeSA9 IHogPj4gMTY7CisJCSp4KysgPSAoeiA8PCAxNikgKyAoeSAmIDB4ZmZmZik7CisjZWxzZQorCQl5 ID0gKnggKiBtICsgY2Fycnk7CisJCWNhcnJ5ID0geSA+PiAxNjsKKwkJKngrKyA9IHkgJiAweGZm ZmY7CisjZW5kaWYKKyNlbmRpZgorCQl9CisJCXdoaWxlKCsraSA8IHdkcyk7CisJaWYgKGNhcnJ5 KSB7CisJCWlmICh3ZHMgPj0gYi0+bWF4d2RzKSB7CisJCQliMSA9IEJhbGxvYyhiLT5rKzEpOwor CQkJaWYgKGIxID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCUJjb3B5KGIxLCBiKTsK KwkJCUJmcmVlKGIpOworCQkJYiA9IGIxOworCQkJfQorCQliLT54W3dkcysrXSA9IGNhcnJ5Owor CQliLT53ZHMgPSB3ZHM7CisJCX0KKwlyZXR1cm4gYjsKKwl9CisKKyBpbnQKK2hpMGJpdHNfRDJB CisjaWZkZWYgS1JfaGVhZGVycworCSh4KSBVTG9uZyB4OworI2Vsc2UKKwkoVUxvbmcgeCkKKyNl bmRpZgoreworCWludCBrID0gMDsKKworCWlmICghKHggJiAweGZmZmYwMDAwKSkgeworCQlrID0g MTY7CisJCXggPDw9IDE2OworCQl9CisJaWYgKCEoeCAmIDB4ZmYwMDAwMDApKSB7CisJCWsgKz0g ODsKKwkJeCA8PD0gODsKKwkJfQorCWlmICghKHggJiAweGYwMDAwMDAwKSkgeworCQlrICs9IDQ7 CisJCXggPDw9IDQ7CisJCX0KKwlpZiAoISh4ICYgMHhjMDAwMDAwMCkpIHsKKwkJayArPSAyOwor CQl4IDw8PSAyOworCQl9CisJaWYgKCEoeCAmIDB4ODAwMDAwMDApKSB7CisJCWsrKzsKKwkJaWYg KCEoeCAmIDB4NDAwMDAwMDApKQorCQkJcmV0dXJuIDMyOworCQl9CisJcmV0dXJuIGs7CisJfQor CisgQmlnaW50ICoKK2kyYgorI2lmZGVmIEtSX2hlYWRlcnMKKwkoaSkgaW50IGk7CisjZWxzZQor CShpbnQgaSkKKyNlbmRpZgoreworCUJpZ2ludCAqYjsKKworCWIgPSBCYWxsb2MoMSk7CisJaWYg KGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwliLT54WzBdID0gaTsKKwliLT53ZHMgPSAx OworCXJldHVybiBiOworCX0KKworIEJpZ2ludCAqCittdWx0CisjaWZkZWYgS1JfaGVhZGVycwor CShhLCBiKSBCaWdpbnQgKmEsICpiOworI2Vsc2UKKwkoQmlnaW50ICphLCBCaWdpbnQgKmIpCisj ZW5kaWYKK3sKKwlCaWdpbnQgKmM7CisJaW50IGssIHdhLCB3Yiwgd2M7CisJVUxvbmcgKngsICp4 YSwgKnhhZSwgKnhiLCAqeGJlLCAqeGMsICp4YzA7CisJVUxvbmcgeTsKKyNpZmRlZiBVTExvbmcK KwlVTExvbmcgY2FycnksIHo7CisjZWxzZQorCVVMb25nIGNhcnJ5LCB6OworI2lmZGVmIFBhY2tf MzIKKwlVTG9uZyB6MjsKKyNlbmRpZgorI2VuZGlmCisKKwlpZiAoYS0+d2RzIDwgYi0+d2RzKSB7 CisJCWMgPSBhOworCQlhID0gYjsKKwkJYiA9IGM7CisJCX0KKwlrID0gYS0+azsKKwl3YSA9IGEt PndkczsKKwl3YiA9IGItPndkczsKKwl3YyA9IHdhICsgd2I7CisJaWYgKHdjID4gYS0+bWF4d2Rz KQorCQlrKys7CisJYyA9IEJhbGxvYyhrKTsKKwlpZiAoYyA9PSBOVUxMKQorCQlyZXR1cm4gKE5V TEwpOworCWZvcih4ID0gYy0+eCwgeGEgPSB4ICsgd2M7IHggPCB4YTsgeCsrKQorCQkqeCA9IDA7 CisJeGEgPSBhLT54OworCXhhZSA9IHhhICsgd2E7CisJeGIgPSBiLT54OworCXhiZSA9IHhiICsg d2I7CisJeGMwID0gYy0+eDsKKyNpZmRlZiBVTExvbmcKKwlmb3IoOyB4YiA8IHhiZTsgeGMwKysp IHsKKwkJaWYgKCAoeSA9ICp4YisrKSAhPTApIHsKKwkJCXggPSB4YTsKKwkJCXhjID0geGMwOwor CQkJY2FycnkgPSAwOworCQkJZG8geworCQkJCXogPSAqeCsrICogKFVMTG9uZyl5ICsgKnhjICsg Y2Fycnk7CisJCQkJY2FycnkgPSB6ID4+IDMyOworCQkJCSp4YysrID0geiAmIDB4ZmZmZmZmZmZV TDsKKwkJCQl9CisJCQkJd2hpbGUoeCA8IHhhZSk7CisJCQkqeGMgPSBjYXJyeTsKKwkJCX0KKwkJ fQorI2Vsc2UKKyNpZmRlZiBQYWNrXzMyCisJZm9yKDsgeGIgPCB4YmU7IHhiKyssIHhjMCsrKSB7 CisJCWlmICggKHkgPSAqeGIgJiAweGZmZmYpICE9MCkgeworCQkJeCA9IHhhOworCQkJeGMgPSB4 YzA7CisJCQljYXJyeSA9IDA7CisJCQlkbyB7CisJCQkJeiA9ICgqeCAmIDB4ZmZmZikgKiB5ICsg KCp4YyAmIDB4ZmZmZikgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHogPj4gMTY7CisJCQkJejIgPSAo KngrKyA+PiAxNikgKiB5ICsgKCp4YyA+PiAxNikgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHoyID4+ IDE2OworCQkJCVN0b3JlaW5jKHhjLCB6Miwgeik7CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUp OworCQkJKnhjID0gY2Fycnk7CisJCQl9CisJCWlmICggKHkgPSAqeGIgPj4gMTYpICE9MCkgewor CQkJeCA9IHhhOworCQkJeGMgPSB4YzA7CisJCQljYXJyeSA9IDA7CisJCQl6MiA9ICp4YzsKKwkJ CWRvIHsKKwkJCQl6ID0gKCp4ICYgMHhmZmZmKSAqIHkgKyAoKnhjID4+IDE2KSArIGNhcnJ5Owor CQkJCWNhcnJ5ID0geiA+PiAxNjsKKwkJCQlTdG9yZWluYyh4YywgeiwgejIpOworCQkJCXoyID0g KCp4KysgPj4gMTYpICogeSArICgqeGMgJiAweGZmZmYpICsgY2Fycnk7CisJCQkJY2FycnkgPSB6 MiA+PiAxNjsKKwkJCQl9CisJCQkJd2hpbGUoeCA8IHhhZSk7CisJCQkqeGMgPSB6MjsKKwkJCX0K KwkJfQorI2Vsc2UKKwlmb3IoOyB4YiA8IHhiZTsgeGMwKyspIHsKKwkJaWYgKCAoeSA9ICp4Yisr KSAhPTApIHsKKwkJCXggPSB4YTsKKwkJCXhjID0geGMwOworCQkJY2FycnkgPSAwOworCQkJZG8g eworCQkJCXogPSAqeCsrICogeSArICp4YyArIGNhcnJ5OworCQkJCWNhcnJ5ID0geiA+PiAxNjsK KwkJCQkqeGMrKyA9IHogJiAweGZmZmY7CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUpOworCQkJ KnhjID0gY2Fycnk7CisJCQl9CisJCX0KKyNlbmRpZgorI2VuZGlmCisJZm9yKHhjMCA9IGMtPngs IHhjID0geGMwICsgd2M7IHdjID4gMCAmJiAhKi0teGM7IC0td2MpIDsKKwljLT53ZHMgPSB3YzsK KwlyZXR1cm4gYzsKKwl9CisKKyBzdGF0aWMgQmlnaW50ICpwNXM7CisKKyBCaWdpbnQgKgorcG93 NW11bHQKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7CisjZWxz ZQorCShCaWdpbnQgKmIsIGludCBrKQorI2VuZGlmCit7CisJQmlnaW50ICpiMSwgKnA1LCAqcDUx OworCWludCBpOworCXN0YXRpYyBpbnQgcDA1WzNdID0geyA1LCAyNSwgMTI1IH07CisKKwlpZiAo IChpID0gayAmIDMpICE9MCkgeworCQliID0gbXVsdGFkZChiLCBwMDVbaS0xXSwgMCk7CisJCWlm IChiID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisKKwlpZiAoIShrID4+PSAyKSkK KwkJcmV0dXJuIGI7CisJaWYgKChwNSA9IHA1cykgPT0gMCkgeworCQkvKiBmaXJzdCB0aW1lICov CisjaWZkZWYgTVVMVElQTEVfVEhSRUFEUworCQlBQ1FVSVJFX0RUT0FfTE9DSygxKTsKKwkJaWYg KCEocDUgPSBwNXMpKSB7CisJCQlwNSA9IHA1cyA9IGkyYig2MjUpOworCQkJaWYgKHA1ID09IE5V TEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCXA1LT5uZXh0ID0gMDsKKwkJCX0KKwkJRlJFRV9E VE9BX0xPQ0soMSk7CisjZWxzZQorCQlwNSA9IHA1cyA9IGkyYig2MjUpOworCQlpZiAocDUgPT0g TlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCXA1LT5uZXh0ID0gMDsKKyNlbmRpZgorCQl9CisJ Zm9yKDs7KSB7CisJCWlmIChrICYgMSkgeworCQkJYjEgPSBtdWx0KGIsIHA1KTsKKwkJCWlmIChi MSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlCZnJlZShiKTsKKwkJCWIgPSBiMTsK KwkJCX0KKwkJaWYgKCEoayA+Pj0gMSkpCisJCQlicmVhazsKKwkJaWYgKChwNTEgPSBwNS0+bmV4 dCkgPT0gMCkgeworI2lmZGVmIE1VTFRJUExFX1RIUkVBRFMKKwkJCUFDUVVJUkVfRFRPQV9MT0NL KDEpOworCQkJaWYgKCEocDUxID0gcDUtPm5leHQpKSB7CisJCQkJcDUxID0gcDUtPm5leHQgPSBt dWx0KHA1LHA1KTsKKwkJCQlpZiAocDUxID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJ CQkJcDUxLT5uZXh0ID0gMDsKKwkJCQl9CisJCQlGUkVFX0RUT0FfTE9DSygxKTsKKyNlbHNlCisJ CQlwNTEgPSBwNS0+bmV4dCA9IG11bHQocDUscDUpOworCQkJaWYgKHA1MSA9PSBOVUxMKQorCQkJ CXJldHVybiAoTlVMTCk7CisJCQlwNTEtPm5leHQgPSAwOworI2VuZGlmCisJCQl9CisJCXA1ID0g cDUxOworCQl9CisJcmV0dXJuIGI7CisJfQorCisgQmlnaW50ICoKK2xzaGlmdAorI2lmZGVmIEtS X2hlYWRlcnMKKwkoYiwgaykgQmlnaW50ICpiOyBpbnQgazsKKyNlbHNlCisJKEJpZ2ludCAqYiwg aW50IGspCisjZW5kaWYKK3sKKwlpbnQgaSwgazEsIG4sIG4xOworCUJpZ2ludCAqYjE7CisJVUxv bmcgKngsICp4MSwgKnhlLCB6OworCisJbiA9IGsgPj4ga3NoaWZ0OworCWsxID0gYi0+azsKKwlu MSA9IG4gKyBiLT53ZHMgKyAxOworCWZvcihpID0gYi0+bWF4d2RzOyBuMSA+IGk7IGkgPDw9IDEp CisJCWsxKys7CisJYjEgPSBCYWxsb2MoazEpOworCWlmIChiMSA9PSBOVUxMKQorCQlyZXR1cm4g KE5VTEwpOworCXgxID0gYjEtPng7CisJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkqeDErKyA9 IDA7CisJeCA9IGItPng7CisJeGUgPSB4ICsgYi0+d2RzOworCWlmIChrICY9IGttYXNrKSB7Cisj aWZkZWYgUGFja18zMgorCQlrMSA9IDMyIC0gazsKKwkJeiA9IDA7CisJCWRvIHsKKwkJCSp4MSsr ID0gKnggPDwgayB8IHo7CisJCQl6ID0gKngrKyA+PiBrMTsKKwkJCX0KKwkJCXdoaWxlKHggPCB4 ZSk7CisJCWlmICgoKngxID0geikgIT0wKQorCQkJKytuMTsKKyNlbHNlCisJCWsxID0gMTYgLSBr OworCQl6ID0gMDsKKwkJZG8geworCQkJKngxKysgPSAqeCA8PCBrICAmIDB4ZmZmZiB8IHo7CisJ CQl6ID0gKngrKyA+PiBrMTsKKwkJCX0KKwkJCXdoaWxlKHggPCB4ZSk7CisJCWlmICgqeDEgPSB6 KQorCQkJKytuMTsKKyNlbmRpZgorCQl9CisJZWxzZSBkbworCQkqeDErKyA9ICp4Kys7CisJCXdo aWxlKHggPCB4ZSk7CisJYjEtPndkcyA9IG4xIC0gMTsKKwlCZnJlZShiKTsKKwlyZXR1cm4gYjE7 CisJfQorCisgaW50CitjbXAKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGEsIGIpIEJpZ2ludCAqYSwg KmI7CisjZWxzZQorCShCaWdpbnQgKmEsIEJpZ2ludCAqYikKKyNlbmRpZgoreworCVVMb25nICp4 YSwgKnhhMCwgKnhiLCAqeGIwOworCWludCBpLCBqOworCisJaSA9IGEtPndkczsKKwlqID0gYi0+ d2RzOworI2lmZGVmIERFQlVHCisJaWYgKGkgPiAxICYmICFhLT54W2ktMV0pCisJCUJ1ZygiY21w IGNhbGxlZCB3aXRoIGEtPnhbYS0+d2RzLTFdID09IDAiKTsKKwlpZiAoaiA+IDEgJiYgIWItPnhb ai0xXSkKKwkJQnVnKCJjbXAgY2FsbGVkIHdpdGggYi0+eFtiLT53ZHMtMV0gPT0gMCIpOworI2Vu ZGlmCisJaWYgKGkgLT0gaikKKwkJcmV0dXJuIGk7CisJeGEwID0gYS0+eDsKKwl4YSA9IHhhMCAr IGo7CisJeGIwID0gYi0+eDsKKwl4YiA9IHhiMCArIGo7CisJZm9yKDs7KSB7CisJCWlmICgqLS14 YSAhPSAqLS14YikKKwkJCXJldHVybiAqeGEgPCAqeGIgPyAtMSA6IDE7CisJCWlmICh4YSA8PSB4 YTApCisJCQlicmVhazsKKwkJfQorCXJldHVybiAwOworCX0KKworIEJpZ2ludCAqCitkaWZmCisj aWZkZWYgS1JfaGVhZGVycworCShhLCBiKSBCaWdpbnQgKmEsICpiOworI2Vsc2UKKwkoQmlnaW50 ICphLCBCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmM7CisJaW50IGksIHdhLCB3YjsK KwlVTG9uZyAqeGEsICp4YWUsICp4YiwgKnhiZSwgKnhjOworI2lmZGVmIFVMTG9uZworCVVMTG9u ZyBib3Jyb3csIHk7CisjZWxzZQorCVVMb25nIGJvcnJvdywgeTsKKyNpZmRlZiBQYWNrXzMyCisJ VUxvbmcgejsKKyNlbmRpZgorI2VuZGlmCisKKwlpID0gY21wKGEsYik7CisJaWYgKCFpKSB7CisJ CWMgPSBCYWxsb2MoMCk7CisJCWlmIChjID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQlj LT53ZHMgPSAxOworCQljLT54WzBdID0gMDsKKwkJcmV0dXJuIGM7CisJCX0KKwlpZiAoaSA8IDAp IHsKKwkJYyA9IGE7CisJCWEgPSBiOworCQliID0gYzsKKwkJaSA9IDE7CisJCX0KKwllbHNlCisJ CWkgPSAwOworCWMgPSBCYWxsb2MoYS0+ayk7CisJaWYgKGMgPT0gTlVMTCkKKwkJcmV0dXJuIChO VUxMKTsKKwljLT5zaWduID0gaTsKKwl3YSA9IGEtPndkczsKKwl4YSA9IGEtPng7CisJeGFlID0g eGEgKyB3YTsKKwl3YiA9IGItPndkczsKKwl4YiA9IGItPng7CisJeGJlID0geGIgKyB3YjsKKwl4 YyA9IGMtPng7CisJYm9ycm93ID0gMDsKKyNpZmRlZiBVTExvbmcKKwlkbyB7CisJCXkgPSAoVUxM b25nKSp4YSsrIC0gKnhiKysgLSBib3Jyb3c7CisJCWJvcnJvdyA9IHkgPj4gMzIgJiAxVUw7CisJ CSp4YysrID0geSAmIDB4ZmZmZmZmZmZVTDsKKwkJfQorCQl3aGlsZSh4YiA8IHhiZSk7CisJd2hp bGUoeGEgPCB4YWUpIHsKKwkJeSA9ICp4YSsrIC0gYm9ycm93OworCQlib3Jyb3cgPSB5ID4+IDMy ICYgMVVMOworCQkqeGMrKyA9IHkgJiAweGZmZmZmZmZmVUw7CisJCX0KKyNlbHNlCisjaWZkZWYg UGFja18zMgorCWRvIHsKKwkJeSA9ICgqeGEgJiAweGZmZmYpIC0gKCp4YiAmIDB4ZmZmZikgLSBi b3Jyb3c7CisJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCXogPSAoKnhhKysgPj4g MTYpIC0gKCp4YisrID4+IDE2KSAtIGJvcnJvdzsKKwkJYm9ycm93ID0gKHogJiAweDEwMDAwKSA+ PiAxNjsKKwkJU3RvcmVpbmMoeGMsIHosIHkpOworCQl9CisJCXdoaWxlKHhiIDwgeGJlKTsKKwl3 aGlsZSh4YSA8IHhhZSkgeworCQl5ID0gKCp4YSAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCWJvcnJv dyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCXogPSAoKnhhKysgPj4gMTYpIC0gYm9ycm93Owor CQlib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OworCQlTdG9yZWluYyh4YywgeiwgeSk7CisJ CX0KKyNlbHNlCisJZG8geworCQl5ID0gKnhhKysgLSAqeGIrKyAtIGJvcnJvdzsKKwkJYm9ycm93 ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJKnhjKysgPSB5ICYgMHhmZmZmOworCQl9CisJCXdo aWxlKHhiIDwgeGJlKTsKKwl3aGlsZSh4YSA8IHhhZSkgeworCQl5ID0gKnhhKysgLSBib3Jyb3c7 CisJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCSp4YysrID0geSAmIDB4ZmZmZjsK KwkJfQorI2VuZGlmCisjZW5kaWYKKwl3aGlsZSghKi0teGMpCisJCXdhLS07CisJYy0+d2RzID0g d2E7CisJcmV0dXJuIGM7CisJfQorCisgZG91YmxlCitiMmQKKyNpZmRlZiBLUl9oZWFkZXJzCisJ KGEsIGUpIEJpZ2ludCAqYTsgaW50ICplOworI2Vsc2UKKwkoQmlnaW50ICphLCBpbnQgKmUpCisj ZW5kaWYKK3sKKwlVTG9uZyAqeGEsICp4YTAsIHcsIHksIHo7CisJaW50IGs7CisJVSBkOworI2lm ZGVmIFZBWAorCVVMb25nIGQwLCBkMTsKKyNlbHNlCisjZGVmaW5lIGQwIHdvcmQwKCZkKQorI2Rl ZmluZSBkMSB3b3JkMSgmZCkKKyNlbmRpZgorCisJeGEwID0gYS0+eDsKKwl4YSA9IHhhMCArIGEt PndkczsKKwl5ID0gKi0teGE7CisjaWZkZWYgREVCVUcKKwlpZiAoIXkpIEJ1ZygiemVybyB5IGlu IGIyZCIpOworI2VuZGlmCisJayA9IGhpMGJpdHMoeSk7CisJKmUgPSAzMiAtIGs7CisjaWZkZWYg UGFja18zMgorCWlmIChrIDwgRWJpdHMpIHsKKwkJZDAgPSBFeHBfMSB8IHkgPj4gKEViaXRzIC0g ayk7CisJCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwkJZDEgPSB5IDw8ICgoMzItRWJpdHMp ICsgaykgfCB3ID4+IChFYml0cyAtIGspOworCQlnb3RvIHJldF9kOworCQl9CisJeiA9IHhhID4g eGEwID8gKi0teGEgOiAwOworCWlmIChrIC09IEViaXRzKSB7CisJCWQwID0gRXhwXzEgfCB5IDw8 IGsgfCB6ID4+ICgzMiAtIGspOworCQl5ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCWQxID0g eiA8PCBrIHwgeSA+PiAoMzIgLSBrKTsKKwkJfQorCWVsc2UgeworCQlkMCA9IEV4cF8xIHwgeTsK KwkJZDEgPSB6OworCQl9CisjZWxzZQorCWlmIChrIDwgRWJpdHMgKyAxNikgeworCQl6ID0geGEg PiB4YTAgPyAqLS14YSA6IDA7CisJCWQwID0gRXhwXzEgfCB5IDw8IGsgLSBFYml0cyB8IHogPj4g RWJpdHMgKyAxNiAtIGs7CisJCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwkJeSA9IHhhID4g eGEwID8gKi0teGEgOiAwOworCQlkMSA9IHogPDwgayArIDE2IC0gRWJpdHMgfCB3IDw8IGsgLSBF Yml0cyB8IHkgPj4gMTYgKyBFYml0cyAtIGs7CisJCWdvdG8gcmV0X2Q7CisJCX0KKwl6ID0geGEg PiB4YTAgPyAqLS14YSA6IDA7CisJdyA9IHhhID4geGEwID8gKi0teGEgOiAwOworCWsgLT0gRWJp dHMgKyAxNjsKKwlkMCA9IEV4cF8xIHwgeSA8PCBrICsgMTYgfCB6IDw8IGsgfCB3ID4+IDE2IC0g azsKKwl5ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJZDEgPSB3IDw8IGsgKyAxNiB8IHkgPDwg azsKKyNlbmRpZgorIHJldF9kOgorI2lmZGVmIFZBWAorCXdvcmQwKCZkKSA9IGQwID4+IDE2IHwg ZDAgPDwgMTY7CisJd29yZDEoJmQpID0gZDEgPj4gMTYgfCBkMSA8PCAxNjsKKyNlbmRpZgorCXJl dHVybiBkdmFsKCZkKTsKKwl9CisjdW5kZWYgZDAKKyN1bmRlZiBkMQorCisgQmlnaW50ICoKK2Qy YgorI2lmZGVmIEtSX2hlYWRlcnMKKwkoZGQsIGUsIGJpdHMpIGRvdWJsZSBkZDsgaW50ICplLCAq Yml0czsKKyNlbHNlCisJKGRvdWJsZSBkZCwgaW50ICplLCBpbnQgKmJpdHMpCisjZW5kaWYKK3sK KwlCaWdpbnQgKmI7CisJVSBkOworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJaW50IGk7Cisj ZW5kaWYKKwlpbnQgZGUsIGs7CisJVUxvbmcgKngsIHksIHo7CisjaWZkZWYgVkFYCisJVUxvbmcg ZDAsIGQxOworI2Vsc2UKKyNkZWZpbmUgZDAgd29yZDAoJmQpCisjZGVmaW5lIGQxIHdvcmQxKCZk KQorI2VuZGlmCisJZC5kID0gZGQ7CisjaWZkZWYgVkFYCisJZDAgPSB3b3JkMCgmZCkgPj4gMTYg fCB3b3JkMCgmZCkgPDwgMTY7CisJZDEgPSB3b3JkMSgmZCkgPj4gMTYgfCB3b3JkMSgmZCkgPDwg MTY7CisjZW5kaWYKKworI2lmZGVmIFBhY2tfMzIKKwliID0gQmFsbG9jKDEpOworI2Vsc2UKKwli ID0gQmFsbG9jKDIpOworI2VuZGlmCisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsK Kwl4ID0gYi0+eDsKKworCXogPSBkMCAmIEZyYWNfbWFzazsKKwlkMCAmPSAweDdmZmZmZmZmOwkv KiBjbGVhciBzaWduIGJpdCwgd2hpY2ggd2UgaWdub3JlICovCisjaWZkZWYgU3VkZGVuX1VuZGVy ZmxvdworCWRlID0gKGludCkoZDAgPj4gRXhwX3NoaWZ0KTsKKyNpZm5kZWYgSUJNCisJeiB8PSBF eHBfbXNrMTE7CisjZW5kaWYKKyNlbHNlCisJaWYgKCAoZGUgPSAoaW50KShkMCA+PiBFeHBfc2hp ZnQpKSAhPTApCisJCXogfD0gRXhwX21zazE7CisjZW5kaWYKKyNpZmRlZiBQYWNrXzMyCisJaWYg KCAoeSA9IGQxKSAhPTApIHsKKwkJaWYgKCAoayA9IGxvMGJpdHMoJnkpKSAhPTApIHsKKwkJCXhb MF0gPSB5IHwgeiA8PCAoMzIgLSBrKTsKKwkJCXogPj49IGs7CisJCQl9CisJCWVsc2UKKwkJCXhb MF0gPSB5OworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCWkgPQorI2VuZGlmCisJCSAgICAg Yi0+d2RzID0gKHhbMV0gPSB6KSAhPTAgPyAyIDogMTsKKwkJfQorCWVsc2UgeworCQlrID0gbG8w Yml0cygmeik7CisJCXhbMF0gPSB6OworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCWkgPQor I2VuZGlmCisJCSAgICBiLT53ZHMgPSAxOworCQlrICs9IDMyOworCQl9CisjZWxzZQorCWlmICgg KHkgPSBkMSkgIT0wKSB7CisJCWlmICggKGsgPSBsbzBiaXRzKCZ5KSkgIT0wKQorCQkJaWYgKGsg Pj0gMTYpIHsKKwkJCQl4WzBdID0geSB8IHogPDwgMzIgLSBrICYgMHhmZmZmOworCQkJCXhbMV0g PSB6ID4+IGsgLSAxNiAmIDB4ZmZmZjsKKwkJCQl4WzJdID0geiA+PiBrOworCQkJCWkgPSAyOwor CQkJCX0KKwkJCWVsc2UgeworCQkJCXhbMF0gPSB5ICYgMHhmZmZmOworCQkJCXhbMV0gPSB5ID4+ IDE2IHwgeiA8PCAxNiAtIGsgJiAweGZmZmY7CisJCQkJeFsyXSA9IHogPj4gayAmIDB4ZmZmZjsK KwkJCQl4WzNdID0geiA+PiBrKzE2OworCQkJCWkgPSAzOworCQkJCX0KKwkJZWxzZSB7CisJCQl4 WzBdID0geSAmIDB4ZmZmZjsKKwkJCXhbMV0gPSB5ID4+IDE2OworCQkJeFsyXSA9IHogJiAweGZm ZmY7CisJCQl4WzNdID0geiA+PiAxNjsKKwkJCWkgPSAzOworCQkJfQorCQl9CisJZWxzZSB7Cisj aWZkZWYgREVCVUcKKwkJaWYgKCF6KQorCQkJQnVnKCJaZXJvIHBhc3NlZCB0byBkMmIiKTsKKyNl bmRpZgorCQlrID0gbG8wYml0cygmeik7CisJCWlmIChrID49IDE2KSB7CisJCQl4WzBdID0gejsK KwkJCWkgPSAwOworCQkJfQorCQllbHNlIHsKKwkJCXhbMF0gPSB6ICYgMHhmZmZmOworCQkJeFsx XSA9IHogPj4gMTY7CisJCQlpID0gMTsKKwkJCX0KKwkJayArPSAzMjsKKwkJfQorCXdoaWxlKCF4 W2ldKQorCQktLWk7CisJYi0+d2RzID0gaSArIDE7CisjZW5kaWYKKyNpZm5kZWYgU3VkZGVuX1Vu ZGVyZmxvdworCWlmIChkZSkgeworI2VuZGlmCisjaWZkZWYgSUJNCisJCSplID0gKGRlIC0gQmlh cyAtIChQLTEpIDw8IDIpICsgazsKKwkJKmJpdHMgPSA0KlAgKyA4IC0gayAtIGhpMGJpdHMod29y ZDAoJmQpICYgRnJhY19tYXNrKTsKKyNlbHNlCisJCSplID0gZGUgLSBCaWFzIC0gKFAtMSkgKyBr OworCQkqYml0cyA9IFAgLSBrOworI2VuZGlmCisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJ fQorCWVsc2UgeworCQkqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgMSArIGs7CisjaWZkZWYgUGFj a18zMgorCQkqYml0cyA9IDMyKmkgLSBoaTBiaXRzKHhbaS0xXSk7CisjZWxzZQorCQkqYml0cyA9 IChpKzIpKjE2IC0gaGkwYml0cyh4W2ldKTsKKyNlbmRpZgorCQl9CisjZW5kaWYKKwlyZXR1cm4g YjsKKwl9CisjdW5kZWYgZDAKKyN1bmRlZiBkMQorCisgQ09OU1QgZG91YmxlCisjaWZkZWYgSUVF RV9Bcml0aAorYmlndGVuc1tdID0geyAxZTE2LCAxZTMyLCAxZTY0LCAxZTEyOCwgMWUyNTYgfTsK K0NPTlNUIGRvdWJsZSB0aW55dGVuc1tdID0geyAxZS0xNiwgMWUtMzIsIDFlLTY0LCAxZS0xMjgs IDFlLTI1NgorCQl9OworI2Vsc2UKKyNpZmRlZiBJQk0KK2JpZ3RlbnNbXSA9IHsgMWUxNiwgMWUz MiwgMWU2NCB9OworQ09OU1QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiwgMWUt NjQgfTsKKyNlbHNlCitiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIgfTsKK0NPTlNUIGRvdWJsZSB0 aW55dGVuc1tdID0geyAxZS0xNiwgMWUtMzIgfTsKKyNlbmRpZgorI2VuZGlmCisKKyBDT05TVCBk b3VibGUKK3RlbnNbXSA9IHsKKwkJMWUwLCAxZTEsIDFlMiwgMWUzLCAxZTQsIDFlNSwgMWU2LCAx ZTcsIDFlOCwgMWU5LAorCQkxZTEwLCAxZTExLCAxZTEyLCAxZTEzLCAxZTE0LCAxZTE1LCAxZTE2 LCAxZTE3LCAxZTE4LCAxZTE5LAorCQkxZTIwLCAxZTIxLCAxZTIyCisjaWZkZWYgVkFYCisJCSwg MWUyMywgMWUyNAorI2VuZGlmCisJCX07CisKKyNpZmRlZiBOT19TVFJJTkdfSAorCisgY2hhciAq CisjaWZkZWYgS1JfaGVhZGVycworc3RyY3BfRDJBKGEsIGIpIGNoYXIgKmE7IGNoYXIgKmI7Cisj ZWxzZQorc3RyY3BfRDJBKGNoYXIgKmEsIENPTlNUIGNoYXIgKmIpCisjZW5kaWYKK3sKKwl3aGls ZSgoKmEgPSAqYisrKSkKKwkJYSsrOworCXJldHVybiBhOworCX0KKworIENoYXIgKgorI2lmZGVm IEtSX2hlYWRlcnMKK21lbWNweV9EMkEoYSwgYiwgbGVuKSBDaGFyICphOyBDaGFyICpiOyBzaXpl X3QgbGVuOworI2Vsc2UKK21lbWNweV9EMkEodm9pZCAqYTEsIHZvaWQgKmIxLCBzaXplX3QgbGVu KQorI2VuZGlmCit7CisJY2hhciAqYSA9IChjaGFyKilhMSwgKmFlID0gYSArIGxlbjsKKwljaGFy ICpiID0gKGNoYXIqKWIxLCAqYTAgPSBhOworCXdoaWxlKGEgPCBhZSkKKwkJKmErKyA9ICpiKys7 CisJcmV0dXJuIGEwOworCX0KKworI2VuZGlmIC8qIE5PX1NUUklOR19IICovCmRpZmYgLS1naXQg YS9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EuaCBiL25ld2xpYi9saWJjL3N0ZGxpYi9nZHRvYS5o CmluZGV4IDA3NTA2YWFjMS4uNGYyNmQ4ODU3IDEwMDY0NAotLS0gYS9uZXdsaWIvbGliYy9zdGRs aWIvZ2R0b2EuaAorKysgYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2EuaApAQCAtMzIsMjUgKzMy LDYxIEBAIFRISVMgU09GVFdBUkUuCiAjaWZuZGVmIEdEVE9BX0hfSU5DTFVERUQKICNkZWZpbmUg R0RUT0FfSF9JTkNMVURFRAogCisjaW5jbHVkZSAiYXJpdGguaCIKKyNpbmNsdWRlIDxzdGRkZWYu aD4gLyogZm9yIHNpemVfdCAqLworCisjZGVmaW5lIFBST1RPX05PUk1BTCh4KQorI2RlZmluZSBf X0JFR0lOX0hJRERFTl9ERUNMUworI2RlZmluZSBfX0VORF9ISURERU5fREVDTFMKKyNkZWZpbmUg REVGX1NUUk9ORyh4KQorCisjaWZuZGVmIExvbmcKKyNkZWZpbmUgTG9uZyBpbnQKKyNlbmRpZgor I2lmbmRlZiBVTG9uZwordHlwZWRlZiB1bnNpZ25lZCBMb25nIFVMb25nOworI2VuZGlmCisjaWZu ZGVmIFVTaG9ydAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVU2hvcnQ7CisjZW5kaWYKKworI2lm bmRlZiBBTlNJCisjaWZkZWYgS1JfaGVhZGVycworI2RlZmluZSBBTlNJKHgpICgpCisjZGVmaW5l IFZvaWQgLypub3RoaW5nKi8KKyNlbHNlCisjZGVmaW5lIEFOU0koeCkgeAorI2RlZmluZSBWb2lk IHZvaWQKKyNlbmRpZgorI2VuZGlmIC8qIEFOU0kgKi8KKworI2lmbmRlZiBDT05TVAorI2lmZGVm IEtSX2hlYWRlcnMKKyNkZWZpbmUgQ09OU1QgLyogYmxhbmsgKi8KKyNlbHNlCisjZGVmaW5lIENP TlNUIGNvbnN0CisjZW5kaWYKKyNlbmRpZiAvKiBDT05TVCAqLwogCiAgZW51bSB7CS8qIHJldHVy biB2YWx1ZXMgZnJvbSBzdHJ0b2RnICovCi0JU1RSVE9HX1plcm8JPSAwLAotCVNUUlRPR19Ob3Jt YWwJPSAxLAotCVNUUlRPR19EZW5vcm1hbAk9IDIsCi0JU1RSVE9HX0luZmluaXRlCT0gMywKLQlT VFJUT0dfTmFOCT0gNCwKLQlTVFJUT0dfTmFOYml0cwk9IDUsCi0JU1RSVE9HX05vTnVtYmVyCT0g NiwKLQlTVFJUT0dfUmV0bWFzawk9IDcsCisJU1RSVE9HX1plcm8JPSAweDAwMCwKKwlTVFJUT0df Tm9ybWFsCT0gMHgwMDEsCisJU1RSVE9HX0Rlbm9ybWFsCT0gMHgwMDIsCisJU1RSVE9HX0luZmlu aXRlCT0gMHgwMDMsCisJU1RSVE9HX05hTgk9IDB4MDA0LAorCVNUUlRPR19OYU5iaXRzCT0gMHgw MDUsCisJU1RSVE9HX05vTnVtYmVyCT0gMHgwMDYsCisJU1RSVE9HX05vTWVtb3J5ID0gMHgwMDcs CisJU1RSVE9HX1JldG1hc2sJPSAweDAwZiwKIAogCS8qIFRoZSBmb2xsb3dpbmcgbWF5IGJlIG9y LWVkIGludG8gb25lIG9mIHRoZSBhYm92ZSB2YWx1ZXMuICovCiAKLQlTVFJUT0dfTmVnCT0gMHgw OCwKLQlTVFJUT0dfSW5leGxvCT0gMHgxMCwKLQlTVFJUT0dfSW5leGhpCT0gMHgyMCwKLQlTVFJU T0dfSW5leGFjdAk9IDB4MzAsCi0JU1RSVE9HX1VuZGVyZmxvdz0gMHg0MCwKLQlTVFJUT0dfT3Zl cmZsb3cJPSAweDgwCisJU1RSVE9HX0luZXhsbwk9IDB4MDEwLCAvKiByZXR1cm5lZCByZXN1bHQg cm91bmRlZCB0b3dhcmQgemVybyAqLworCVNUUlRPR19JbmV4aGkJPSAweDAyMCwgLyogcmV0dXJu ZWQgcmVzdWx0IHJvdW5kZWQgYXdheSBmcm9tIHplcm8gKi8KKwlTVFJUT0dfSW5leGFjdAk9IDB4 MDMwLAorCVNUUlRPR19VbmRlcmZsb3c9IDB4MDQwLAorCVNUUlRPR19PdmVyZmxvdwk9IDB4MDgw LAorCVNUUlRPR19OZWcJPSAweDEwMCAvKiBkb2VzIG5vdCBhZmZlY3QgU1RSVE9HX0luZXhsbyBv ciBTVFJUT0dfSW5leGhpICovCiAJfTsKIAogIHR5cGVkZWYgc3RydWN0CkBAIC02OSw2ICsxMDUs NzAgQEAgZW51bSB7CS8qIEZQSS5yb3VuZGluZyB2YWx1ZXM6IHNhbWUgYXMgRkxUX1JPVU5EUyAq LwogCUZQSV9Sb3VuZF9kb3duID0gMwogCX07CiAKLSNlbmRpZiAvKiBHRFRPQV9IX0lOQ0xVREVE ICovCi0KIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19VU2hvcnQ7CisKKyNpZmRlZiBfX2NwbHVz cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZXh0ZXJuIGNoYXIqIF9fZHRvYSAgQU5TSSgo ZG91YmxlIGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwKKwkJCWludCAqc2ln biwgY2hhciAqKnJ2ZSkpOworZXh0ZXJuIGNoYXIqIF9fZ2R0b2EgQU5TSSgoRlBJICpmcGksIGlu dCBiZSwgVUxvbmcgKmJpdHMsIGludCAqa2luZHAsCisJCQlpbnQgbW9kZSwgaW50IG5kaWdpdHMs IGludCAqZGVjcHQsIGNoYXIgKipydmUpKTsKK2V4dGVybiB2b2lkIF9fZnJlZWR0b2EgQU5TSSgo Y2hhciopKTsKK2V4dGVybiBmbG9hdCAgc3RydG9mIEFOU0koKENPTlNUIGNoYXIgKiwgY2hhciAq KikpOworZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgQU5TSSgoQ09OU1QgY2hhciAqLCBjaGFyICoqKSk7 CitleHRlcm4gaW50IF9fc3RydG9kZyBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBGUEkqLCBM b25nKiwgVUxvbmcqKSk7CitjaGFyCSpfX2hkdG9hKGRvdWJsZSwgY29uc3QgY2hhciAqLCBpbnQs IGludCAqLCBpbnQgKiwgY2hhciAqKik7CitjaGFyCSpfX2hsZHRvYShsb25nIGRvdWJsZSwgY29u c3QgY2hhciAqLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKik7CitjaGFyCSpfX2xkdG9hKGxv bmcgZG91YmxlICosIGludCwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKiopOworCitQUk9UT19O T1JNQUwoX19kdG9hKTsKK1BST1RPX05PUk1BTChfX2dkdG9hKTsKK1BST1RPX05PUk1BTChfX2Zy ZWVkdG9hKTsKK1BST1RPX05PUk1BTChfX2hkdG9hKTsKK1BST1RPX05PUk1BTChfX2hsZHRvYSk7 CitQUk9UT19OT1JNQUwoX19sZHRvYSk7CisKK19fQkVHSU5fSElEREVOX0RFQ0xTCitleHRlcm4g Y2hhcioJX19nX2RkZm10ICBBTlNJKChjaGFyKiwgZG91YmxlKiwgaW50LCBzaXplX3QpKTsKK2V4 dGVybiBjaGFyKglfX2dfZGZtdCAgIEFOU0koKGNoYXIqLCBkb3VibGUqLCBpbnQsIHNpemVfdCkp OworZXh0ZXJuIGNoYXIqCV9fZ19mZm10ICAgQU5TSSgoY2hhciosIGZsb2F0KiwgIGludCwgc2l6 ZV90KSk7CitleHRlcm4gY2hhcioJX19nX1FmbXQgICBBTlNJKChjaGFyKiwgdm9pZCosICAgaW50 LCBzaXplX3QpKTsKK2V4dGVybiBjaGFyKglfX2dfeGZtdCAgIEFOU0koKGNoYXIqLCB2b2lkKiwg ICBpbnQsIHNpemVfdCkpOworZXh0ZXJuIGNoYXIqCV9fZ194TGZtdCAgQU5TSSgoY2hhciosIHZv aWQqLCAgIGludCwgc2l6ZV90KSk7CisKK2V4dGVybiBpbnQJX19zdHJ0b0lkICBBTlNJKChDT05T VCBjaGFyKiwgY2hhcioqLCBkb3VibGUqLCBkb3VibGUqKSk7CitleHRlcm4gaW50CV9fc3RydG9J ZGQgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgZG91YmxlKiwgZG91YmxlKikpOworZXh0ZXJu IGludAlfX3N0cnRvSWYgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGZsb2F0KiwgZmxvYXQq KSk7CitleHRlcm4gaW50CV9fc3RydG9JUSAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgdm9p ZCosIHZvaWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9JeCAgQU5TSSgoQ09OU1QgY2hhciosIGNo YXIqKiwgdm9pZCosIHZvaWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9JeEwgQU5TSSgoQ09OU1Qg Y2hhciosIGNoYXIqKiwgdm9pZCosIHZvaWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9yZCAgQU5T SSgoQ09OU1QgY2hhciosIGNoYXIqKiwgaW50LCBkb3VibGUqKSk7CitleHRlcm4gaW50CV9fc3Ry dG9yZGQgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgaW50LCBkb3VibGUqKSk7CitleHRlcm4g aW50CV9fc3RydG9yZiAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgaW50LCBmbG9hdCopKTsK K2V4dGVybiBpbnQJX19zdHJ0b3JRICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBpbnQsIHZv aWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9yeCAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwg aW50LCB2b2lkKikpOworZXh0ZXJuIGludAlfX3N0cnRvcnhMIEFOU0koKENPTlNUIGNoYXIqLCBj aGFyKiosIGludCwgdm9pZCopKTsKKyNpZiAxCitleHRlcm4gaW50CV9fc3RydG9kSSAgQU5TSSgo Q09OU1QgY2hhciosIGNoYXIqKiwgZG91YmxlKikpOworZXh0ZXJuIGludAlfX3N0cnRvcGQgIEFO U0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGRvdWJsZSopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3Bk ZCBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBkb3VibGUqKSk7CitleHRlcm4gaW50CV9fc3Ry dG9wZiAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgZmxvYXQqKSk7CitleHRlcm4gaW50CV9f c3RydG9wUSAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgdm9pZCopKTsKK2V4dGVybiBpbnQJ X19zdHJ0b3B4ICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCB2b2lkKikpOworZXh0ZXJuIGlu dAlfX3N0cnRvcHhMIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIHZvaWQqKSk7CisjZWxzZQor I2RlZmluZSBfX3N0cnRvcGQocyxzZSx4KSBzdHJ0b3JkKHMsc2UsMSx4KQorI2RlZmluZSBfX3N0 cnRvcGRkKHMsc2UseCkgc3RydG9yZGQocyxzZSwxLHgpCisjZGVmaW5lIF9fc3RydG9wZihzLHNl LHgpIHN0cnRvcmYocyxzZSwxLHgpCisjZGVmaW5lIF9fc3RydG9wUShzLHNlLHgpIHN0cnRvclEo cyxzZSwxLHgpCisjZGVmaW5lIF9fc3RydG9weChzLHNlLHgpIHN0cnRvcngocyxzZSwxLHgpCisj ZGVmaW5lIF9fc3RydG9weEwocyxzZSx4KSBzdHJ0b3J4TChzLHNlLDEseCkKKyNlbmRpZgorX19F TkRfSElEREVOX0RFQ0xTCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYg LyogR0RUT0FfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkbGliL2dk dG9haW1wLmggYi9uZXdsaWIvbGliYy9zdGRsaWIvZ2R0b2FpbXAuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAuLmJmOTc3MDk1NQotLS0gL2Rldi9udWxsCisrKyBiL25ld2xp Yi9saWJjL3N0ZGxpYi9nZHRvYWltcC5oCkBAIC0wLDAgKzEsNjcyIEBACisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitU aGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQg KEMpIDE5OTgtMjAwMCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVk CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMg c29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhv dXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkg ZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQg dGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGlu IGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2Yg dGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24u CisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBT T0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRT IEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00g TE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElT IFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIGR0b2Eu YyB0aGF0IGNvbnZlcnRzIGFyYml0YXJ5IGJpbmFyeQorICAgZmxvYXRpbmctcG9pbnQgZm9ybWF0 cyB0byBhbmQgZnJvbSBkZWNpbWFsIG5vdGF0aW9uLiAgSXQgdXNlcworICAgZG91YmxlLXByZWNp c2lvbiBhcml0aG1ldGljIGludGVybmFsbHksIHNvIHRoZXJlIGFyZSBzdGlsbAorICAgdmFyaW91 cyAjaWZkZWZzIHRoYXQgYWRhcHQgdGhlIGNhbGN1bGF0aW9ucyB0byB0aGUgbmF0aXZlCisgICBk b3VibGUtcHJlY2lzaW9uIGFyaXRobWV0aWMgKGFueSBvZiBJRUVFLCBWQVggRF9mbG9hdGluZywK KyAgIG9yIElCTSBtYWluZnJhbWUgYXJpdGhtZXRpYykuCisKKyAgIFBsZWFzZSBzZW5kIGJ1ZyBy ZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICAgd2l0aCAiIGF0 ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgorICovCisKKy8q IE9uIGEgbWFjaGluZSB3aXRoIElFRUUgZXh0ZW5kZWQtcHJlY2lzaW9uIHJlZ2lzdGVycywgaXQg aXMKKyAqIG5lY2Vzc2FyeSB0byBzcGVjaWZ5IGRvdWJsZS1wcmVjaXNpb24gKDUzLWJpdCkgcm91 bmRpbmcgcHJlY2lzaW9uCisgKiBiZWZvcmUgaW52b2tpbmcgc3RydG9kIG9yIGR0b2EuICBJZiB0 aGUgbWFjaGluZSB1c2VzICh0aGUgZXF1aXZhbGVudAorICogb2YpIEludGVsIDgweDg3IGFyaXRo bWV0aWMsIHRoZSBjYWxsCisgKglfY29udHJvbDg3KFBDXzUzLCBNQ1dfUEMpOworICogZG9lcyB0 aGlzIHdpdGggbWFueSBjb21waWxlcnMuICBXaGV0aGVyIHRoaXMgb3IgYW5vdGhlciBjYWxsIGlz CisgKiBhcHByb3ByaWF0ZSBkZXBlbmRzIG9uIHRoZSBjb21waWxlcjsgZm9yIHRoaXMgdG8gd29y aywgaXQgbWF5IGJlCisgKiBuZWNlc3NhcnkgdG8gI2luY2x1ZGUgImZsb2F0LmgiIG9yIGFub3Ro ZXIgc3lzdGVtLWRlcGVuZGVudCBoZWFkZXIKKyAqIGZpbGUuCisgKi8KKworLyogc3RydG9kIGZv ciBJRUVFLSwgVkFYLSwgYW5kIElCTS1hcml0aG1ldGljIG1hY2hpbmVzLgorICoKKyAqIFRoaXMg c3RydG9kIHJldHVybnMgYSBuZWFyZXN0IG1hY2hpbmUgbnVtYmVyIHRvIHRoZSBpbnB1dCBkZWNp bWFsCisgKiBzdHJpbmcgKG9yIHNldHMgZXJybm8gdG8gRVJBTkdFKS4gIFdpdGggSUVFRSBhcml0 aG1ldGljLCB0aWVzIGFyZQorICogYnJva2VuIGJ5IHRoZSBJRUVFIHJvdW5kLWV2ZW4gcnVsZS4g IE90aGVyd2lzZSB0aWVzIGFyZSBicm9rZW4gYnkKKyAqIGJpYXNlZCByb3VuZGluZyAoYWRkIGhh bGYgYW5kIGNob3ApLgorICoKKyAqIEluc3BpcmVkIGxvb3NlbHkgYnkgV2lsbGlhbSBELiBDbGlu Z2VyJ3MgcGFwZXIgIkhvdyB0byBSZWFkIEZsb2F0aW5nCisgKiBQb2ludCBOdW1iZXJzIEFjY3Vy YXRlbHkiIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiAxMTItMTI2XS4KKyAqCisgKiBNb2Rp ZmljYXRpb25zOgorICoKKyAqCTEuIFdlIG9ubHkgcmVxdWlyZSBJRUVFLCBJQk0sIG9yIFZBWCBk b3VibGUtcHJlY2lzaW9uCisgKgkJYXJpdGhtZXRpYyAobm90IElFRUUgZG91YmxlLWV4dGVuZGVk KS4KKyAqCTIuIFdlIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgaW4gYSBj YXNlIHRoYXQKKyAqCQlDbGluZ2VyIG1pc3NlZCAtLSB3aGVuIHdlJ3JlIGNvbXB1dGluZyBkICog MTBebgorICoJCWZvciBhIHNtYWxsIGludGVnZXIgZCBhbmQgdGhlIGludGVnZXIgbiBpcyBub3Qg dG9vCisgKgkJbXVjaCBsYXJnZXIgdGhhbiAyMiAodGhlIG1heGltdW0gaW50ZWdlciBrIGZvciB3 aGljaAorICoJCXdlIGNhbiByZXByZXNlbnQgMTBeayBleGFjdGx5KSwgd2UgbWF5IGJlIGFibGUg dG8KKyAqCQljb21wdXRlIChkKjEwXmspICogMTBeKGUtaykgd2l0aCBqdXN0IG9uZSByb3VuZG9m Zi4KKyAqCTMuIFJhdGhlciB0aGFuIGEgYml0LWF0LWEtdGltZSBhZGp1c3RtZW50IG9mIHRoZSBi aW5hcnkKKyAqCQlyZXN1bHQgaW4gdGhlIGhhcmQgY2FzZSwgd2UgdXNlIGZsb2F0aW5nLXBvaW50 CisgKgkJYXJpdGhtZXRpYyB0byBkZXRlcm1pbmUgdGhlIGFkanVzdG1lbnQgdG8gd2l0aGluCisg KgkJb25lIGJpdDsgb25seSBpbiByZWFsbHkgaGFyZCBjYXNlcyBkbyB3ZSBuZWVkIHRvCisgKgkJ Y29tcHV0ZSBhIHNlY29uZCByZXNpZHVhbC4KKyAqCTQuIEJlY2F1c2Ugb2YgMy4sIHdlIGRvbid0 IG5lZWQgYSBsYXJnZSB0YWJsZSBvZiBwb3dlcnMgb2YgMTAKKyAqCQlmb3IgdGVuLXRvLWUgKGp1 c3Qgc29tZSBzbWFsbCB0YWJsZXMsIGUuZy4gb2YgMTBeaworICoJCWZvciAwIDw9IGsgPD0gMjIp LgorICovCisKKy8qCisgKiAjZGVmaW5lIElFRUVfODA4NyBmb3IgSUVFRS1hcml0aG1ldGljIG1h Y2hpbmVzIHdoZXJlIHRoZSBsZWFzdAorICoJc2lnbmlmaWNhbnQgYnl0ZSBoYXMgdGhlIGxvd2Vz dCBhZGRyZXNzLgorICogI2RlZmluZSBJRUVFX01DNjhrIGZvciBJRUVFLWFyaXRobWV0aWMgbWFj aGluZXMgd2hlcmUgdGhlIG1vc3QKKyAqCXNpZ25pZmljYW50IGJ5dGUgaGFzIHRoZSBsb3dlc3Qg YWRkcmVzcy4KKyAqICNkZWZpbmUgTG9uZyBpbnQgb24gbWFjaGluZXMgd2l0aCAzMi1iaXQgaW50 cyBhbmQgNjQtYml0IGxvbmdzLgorICogI2RlZmluZSBTdWRkZW5fVW5kZXJmbG93IGZvciBJRUVF LWZvcm1hdCBtYWNoaW5lcyB3aXRob3V0IGdyYWR1YWwKKyAqCXVuZGVyZmxvdyAoaS5lLiwgdGhh dCBmbHVzaCB0byB6ZXJvIG9uIHVuZGVyZmxvdykuCisgKiAjZGVmaW5lIElCTSBmb3IgSUJNIG1h aW5mcmFtZS1zdHlsZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgorICogI2RlZmluZSBWQVgg Zm9yIFZBWC1zdHlsZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIChEX2Zsb2F0aW5nKS4KKyAq ICNkZWZpbmUgTm9fbGVmdHJpZ2h0IHRvIG9taXQgbGVmdC1yaWdodCBsb2dpYyBpbiBmYXN0IGZs b2F0aW5nLXBvaW50CisgKgljb21wdXRhdGlvbiBvZiBkdG9hIGFuZCBnZHRvYS4gIFRoaXMgd2ls bCBjYXVzZSBtb2RlcyA0IGFuZCA1IHRvIGJlCisgKgl0cmVhdGVkIHRoZSBzYW1lIGFzIG1vZGVz IDIgYW5kIDMgZm9yIHNvbWUgaW5wdXRzLgorICogI2RlZmluZSBDaGVja19GTFRfUk9VTkRTIGlm IEZMVF9ST1VORFMgY2FuIGFzc3VtZSB0aGUgdmFsdWVzIDIgb3IgMy4KKyAqICNkZWZpbmUgUk5E X1BST0RRVU9UIHRvIHVzZSBybmRfcHJvZCBhbmQgcm5kX3F1b3QgKGFzc2VtYmx5IHJvdXRpbmVz CisgKgl0aGF0IHVzZSBleHRlbmRlZC1wcmVjaXNpb24gaW5zdHJ1Y3Rpb25zIHRvIGNvbXB1dGUg cm91bmRlZAorICoJcHJvZHVjdHMgYW5kIHF1b3RpZW50cykgd2l0aCBJQk0uCisgKiAjZGVmaW5l IFJPVU5EX0JJQVNFRCBmb3IgSUVFRS1mb3JtYXQgd2l0aCBiaWFzZWQgcm91bmRpbmcgYW5kIGFy aXRobWV0aWMKKyAqCXRoYXQgcm91bmRzIHRvd2FyZCArSW5maW5pdHkuCisgKiAjZGVmaW5lIFJP VU5EX0JJQVNFRF93aXRob3V0X1JvdW5kX1VwIGZvciBJRUVFLWZvcm1hdCB3aXRoIGJpYXNlZAor ICoJcm91bmRpbmcgd2hlbiB0aGUgdW5kZXJseWluZyBmbG9hdGluZy1wb2ludCBhcml0aG1ldGlj IHVzZXMKKyAqCXVuYmlhc2VkIHJvdW5kaW5nLiAgVGhpcyBwcmV2ZW50IHVzaW5nIG9yZGluYXJ5 IGZsb2F0aW5nLXBvaW50CisgKglhcml0aG1ldGljIHdoZW4gdGhlIHJlc3VsdCBjb3VsZCBiZSBj b21wdXRlZCB3aXRoIG9uZSByb3VuZGluZyBlcnJvci4KKyAqICNkZWZpbmUgSW5hY2N1cmF0ZV9E aXZpZGUgZm9yIElFRUUtZm9ybWF0IHdpdGggY29ycmVjdGx5IHJvdW5kZWQKKyAqCXByb2R1Y3Rz IGJ1dCBpbmFjY3VyYXRlIHF1b3RpZW50cywgZS5nLiwgZm9yIEludGVsIGk4NjAuCisgKiAjZGVm aW5lIE5PX0xPTkdfTE9ORyBvbiBtYWNoaW5lcyB0aGF0IGRvIG5vdCBoYXZlIGEgImxvbmcgbG9u ZyIKKyAqCWludGVnZXIgdHlwZSAob2YgPj0gNjQgYml0cykuICBPbiBzdWNoIG1hY2hpbmVzLCB5 b3UgY2FuCisgKgkjZGVmaW5lIEp1c3RfMTYgdG8gc3RvcmUgMTYgYml0cyBwZXIgMzItYml0IExv bmcgd2hlbiBkb2luZworICoJaGlnaC1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgV2hl dGhlciB0aGlzIHNwZWVkcyB0aGluZ3MKKyAqCXVwIG9yIHNsb3dzIHRoaW5ncyBkb3duIGRlcGVu ZHMgb24gdGhlIG1hY2hpbmUgYW5kIHRoZSBudW1iZXIKKyAqCWJlaW5nIGNvbnZlcnRlZC4gIElm IGxvbmcgbG9uZyBpcyBhdmFpbGFibGUgYW5kIHRoZSBuYW1lIGlzCisgKglzb21ldGhpbmcgb3Ro ZXIgdGhhbiAibG9uZyBsb25nIiwgI2RlZmluZSBMbG9uZyB0byBiZSB0aGUgbmFtZSwKKyAqCWFu ZCBpZiAidW5zaWduZWQgTGxvbmciIGRvZXMgbm90IHdvcmsgYXMgYW4gdW5zaWduZWQgdmVyc2lv biBvZgorICoJTGxvbmcsICNkZWZpbmUgI1VMTG9uZyB0byBiZSB0aGUgY29ycmVzcG9uZGluZyB1 bnNpZ25lZCB0eXBlLgorICogI2RlZmluZSBLUl9oZWFkZXJzIGZvciBvbGQtc3R5bGUgQyBmdW5j dGlvbiBoZWFkZXJzLgorICogI2RlZmluZSBCYWRfZmxvYXRfaCBpZiB5b3VyIHN5c3RlbSBsYWNr cyBhIGZsb2F0Lmggb3IgaWYgaXQgZG9lcyBub3QKKyAqCWRlZmluZSBzb21lIG9yIGFsbCBvZiBE QkxfRElHLCBEQkxfTUFYXzEwX0VYUCwgREJMX01BWF9FWFAsCisgKglGTFRfUkFESVgsIEZMVF9S T1VORFMsIGFuZCBEQkxfTUFYLgorICogI2RlZmluZSBNQUxMT0MgeW91cl9tYWxsb2MsIHdoZXJl IHlvdXJfbWFsbG9jKG4pIGFjdHMgbGlrZSBtYWxsb2MobikKKyAqCWlmIG1lbW9yeSBpcyBhdmFp bGFibGUgYW5kIG90aGVyd2lzZSBkb2VzIHNvbWV0aGluZyB5b3UgZGVlbQorICoJYXBwcm9wcmlh dGUuICBJZiBNQUxMT0MgaXMgdW5kZWZpbmVkLCBtYWxsb2Mgd2lsbCBiZSBpbnZva2VkCisgKglk aXJlY3RseSAtLSBhbmQgYXNzdW1lZCBhbHdheXMgdG8gc3VjY2VlZC4gIFNpbWlsYXJseSwgaWYg eW91CisgKgl3YW50IHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBzeXN0ZW0ncyBmcmVlKCkgdG8g YmUgY2FsbGVkIHRvCisgKglyZWN5Y2xlIG1lbW9yeSBhY3F1aXJlZCBmcm9tIE1BTExPQywgI2Rl ZmluZSBGUkVFIHRvIGJlIHRoZQorICoJbmFtZSBvZiB0aGUgYWx0ZXJuYXRlIHJvdXRpbmUuICAo RlJFRSBvciBmcmVlIGlzIG9ubHkgY2FsbGVkIGluCisgKglwYXRob2xvZ2ljYWwgY2FzZXMsIGUu Zy4sIGluIGEgZ2R0b2EgY2FsbCBhZnRlciBhIGdkdG9hIHJldHVybiBpbgorICoJbW9kZSAzIHdp dGggdGhvdXNhbmRzIG9mIGRpZ2l0cyByZXF1ZXN0ZWQuKQorICogI2RlZmluZSBPbWl0X1ByaXZh dGVfTWVtb3J5IHRvIG9taXQgbG9naWMgKGFkZGVkIEphbi4gMTk5OCkgZm9yIG1ha2luZworICoJ bWVtb3J5IGFsbG9jYXRpb25zIGZyb20gYSBwcml2YXRlIHBvb2wgb2YgbWVtb3J5IHdoZW4gcG9z c2libGUuCisgKglXaGVuIHVzZWQsIHRoZSBwcml2YXRlIHBvb2wgaXMgUFJJVkFURV9NRU0gYnl0 ZXMgbG9uZzogIDIzMDQgYnl0ZXMsCisgKgl1bmxlc3MgI2RlZmluZWQgdG8gYmUgYSBkaWZmZXJl bnQgbGVuZ3RoLiAgVGhpcyBkZWZhdWx0IGxlbmd0aAorICoJc3VmZmljZXMgdG8gZ2V0IHJpZCBv ZiBNQUxMT0MgY2FsbHMgZXhjZXB0IGZvciB1bnVzdWFsIGNhc2VzLAorICoJc3VjaCBhcyBkZWNp bWFsLXRvLWJpbmFyeSBjb252ZXJzaW9uIG9mIGEgdmVyeSBsb25nIHN0cmluZyBvZgorICoJZGln aXRzLiAgV2hlbiBjb252ZXJ0aW5nIElFRUUgZG91YmxlIHByZWNpc2lvbiB2YWx1ZXMsIHRoZQor ICoJbG9uZ2VzdCBzdHJpbmcgZ2R0b2EgY2FuIHJldHVybiBpcyBhYm91dCA3NTEgYnl0ZXMgbG9u Zy4gIEZvcgorICoJY29udmVyc2lvbnMgYnkgc3RydG9kIG9mIHN0cmluZ3Mgb2YgODAwIGRpZ2l0 cyBhbmQgYWxsIGdkdG9hCisgKgljb252ZXJzaW9ucyBvZiBJRUVFIGRvdWJsZXMgaW4gc2luZ2xl LXRocmVhZGVkIGV4ZWN1dGlvbnMgd2l0aAorICoJOC1ieXRlIHBvaW50ZXJzLCBQUklWQVRFX01F TSA+PSA3NDAwIGFwcGVhcnMgdG8gc3VmZmljZTsgd2l0aAorICoJNC1ieXRlIHBvaW50ZXJzLCBQ UklWQVRFX01FTSA+PSA3MTEyIGFwcGVhcnMgYWRlcXVhdGUuCisgKiAjZGVmaW5lIE5PX0lORk5B Tl9DSEVDSyBpZiB5b3UgZG8gbm90IHdpc2ggdG8gaGF2ZSBJTkZOQU5fQ0hFQ0sKKyAqCSNkZWZp bmVkIGF1dG9tYXRpY2FsbHkgb24gSUVFRSBzeXN0ZW1zLiAgT24gc3VjaCBzeXN0ZW1zLAorICoJ d2hlbiBJTkZOQU5fQ0hFQ0sgaXMgI2RlZmluZWQsIHN0cnRvZCBjaGVja3MKKyAqCWZvciBJbmZp bml0eSBhbmQgTmFOIChjYXNlIGluc2Vuc2l0aXZlbHkpLgorICoJV2hlbiBJTkZOQU5fQ0hFQ0sg aXMgI2RlZmluZWQgYW5kIE5vX0hleF9OYU4gaXMgbm90ICNkZWZpbmVkLAorICoJc3RydG9kZyBh bHNvIGFjY2VwdHMgKGNhc2UgaW5zZW5zaXRpdmVseSkgc3RyaW5ncyBvZiB0aGUgZm9ybQorICoJ TmFOKHgpLCB3aGVyZSB4IGlzIGEgc3RyaW5nIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyAob3B0aW9u YWxseQorICoJcHJlY2VkZWQgYnkgMHggb3IgMFgpIGFuZCBzcGFjZXM7IGlmIHRoZXJlIGlzIG9u bHkgb25lIHN0cmluZworICoJb2YgaGV4YWRlY2ltYWwgZGlnaXRzLCBpdCBpcyB0YWtlbiBmb3Ig dGhlIGZyYWN0aW9uIGJpdHMgb2YgdGhlCisgKglyZXN1bHRpbmcgTmFOOyBpZiB0aGVyZSBhcmUg dHdvIG9yIG1vcmUgc3RyaW5ncyBvZiBoZXhhZGVjaW1hbAorICoJZGlnaXRzLCBlYWNoIHN0cmlu ZyBpcyBhc3NpZ25lZCB0byB0aGUgbmV4dCBhdmFpbGFibGUgc2VxdWVuY2UKKyAqCW9mIDMyLWJp dCB3b3JkcyBvZiBmcmFjdGlvbnMgYml0cyAoc3RhcnRpbmcgd2l0aCB0aGUgbW9zdAorICoJc2ln bmlmaWNhbnQpLCByaWdodC1hbGlnbmVkIGluIGVhY2ggc2VxdWVuY2UuCisgKglVbmxlc3MgR0RU T0FfTk9OX1BFREFOVElDX05BTkNIRUNLIGlzICNkZWZpbmVkLCBpbnB1dCAiTmFOKC4uLikiCisg KglpcyBjb25zdW1lZCBldmVuIHdoZW4gLi4uIGhhcyB0aGUgd3JvbmcgZm9ybSAoaW4gd2hpY2gg Y2FzZSB0aGUKKyAqCSIoLi4uKSIgaXMgY29uc3VtZWQgYnV0IGlnbm9yZWQpLgorICogI2RlZmlu ZSBNVUxUSVBMRV9USFJFQURTIGlmIHRoZSBzeXN0ZW0gb2ZmZXJzIHByZWVtcHRpdmVseSBzY2hl ZHVsZWQKKyAqCW11bHRpcGxlIHRocmVhZHMuICBJbiB0aGlzIGNhc2UsIHlvdSBtdXN0IHByb3Zp ZGUgKG9yIHN1aXRhYmx5CisgKgkjZGVmaW5lKSB0d28gbG9ja3MsIGFjcXVpcmVkIGJ5IEFDUVVJ UkVfRFRPQV9MT0NLKG4pIGFuZCBmcmVlZAorICoJYnkgRlJFRV9EVE9BX0xPQ0sobikgZm9yIG4g PSAwIG9yIDEuICAoVGhlIHNlY29uZCBsb2NrLCBhY2Nlc3NlZAorICoJaW4gcG93NW11bHQsIGVu c3VyZXMgbGF6eSBldmFsdWF0aW9uIG9mIG9ubHkgb25lIGNvcHkgb2YgaGlnaAorICoJcG93ZXJz IG9mIDU7IG9taXR0aW5nIHRoaXMgbG9jayB3b3VsZCBpbnRyb2R1Y2UgYSBzbWFsbAorICoJcHJv YmFiaWxpdHkgb2Ygd2FzdGluZyBtZW1vcnksIGJ1dCB3b3VsZCBvdGhlcndpc2UgYmUgaGFybWxl c3MuKQorICoJWW91IG11c3QgYWxzbyBpbnZva2UgZnJlZWR0b2EocykgdG8gZnJlZSB0aGUgdmFs dWUgcyByZXR1cm5lZCBieQorICoJZHRvYS4gIFlvdSBtYXkgZG8gc28gd2hldGhlciBvciBub3Qg TVVMVElQTEVfVEhSRUFEUyBpcyAjZGVmaW5lZC4KKyAqICNkZWZpbmUgSU1QUkVDSVNFX0lORVhB Q1QgaWYgeW91IGRvIG5vdCBjYXJlIGFib3V0IHRoZSBzZXR0aW5nIG9mCisgKgl0aGUgU1RSVE9H X0luZXhhY3QgYml0cyBpbiB0aGUgc3BlY2lhbCBjYXNlIG9mIGRvaW5nIElFRUUgZG91YmxlCisg KglwcmVjaXNpb24gY29udmVyc2lvbnMgKHdoaWNoIGNvdWxkIGFsc28gYmUgZG9uZSBieSB0aGUg c3RydG9kIGluCisgKglkdG9hLmMpLgorICogI2RlZmluZSBOT19IRVhfRlAgdG8gZGlzYWJsZSBy ZWNvZ25pdGlvbiBvZiBDOXgncyBoZXhhZGVjaW1hbAorICoJZmxvYXRpbmctcG9pbnQgY29uc3Rh bnRzLgorICogI2RlZmluZSAtRE5PX0VSUk5PIHRvIHN1cHByZXNzIHNldHRpbmcgZXJybm8gKGlu IHN0cnRvZC5jIGFuZAorICoJc3RydG9kZy5jKS4KKyAqICNkZWZpbmUgTk9fU1RSSU5HX0ggdG8g dXNlIHByaXZhdGUgdmVyc2lvbnMgb2YgbWVtY3B5LgorICoJT24gc29tZSBLJlIgc3lzdGVtcywg aXQgbWF5IGFsc28gYmUgbmVjZXNzYXJ5IHRvCisgKgkjZGVmaW5lIERFQ0xBUkVfU0laRV9UIGlu IHRoaXMgY2FzZS4KKyAqICNkZWZpbmUgVVNFX0xPQ0FMRSB0byB1c2UgdGhlIGN1cnJlbnQgbG9j YWxlJ3MgZGVjaW1hbF9wb2ludCB2YWx1ZS4KKyAqLworCisjaWZuZGVmIEdEVE9BSU1QX0hfSU5D TFVERUQKKyNkZWZpbmUgR0RUT0FJTVBfSF9JTkNMVURFRAorI2luY2x1ZGUgImdkdG9hLmgiCisj aWYgMAorI2luY2x1ZGUgImdkX3FuYW4uaCIKKyNlbmRpZgorI2lmZGVmIEhvbm9yX0ZMVF9ST1VO RFMKKyNpbmNsdWRlIDxmZW52Lmg+CisjZW5kaWYKKworI2lmZGVmIERFQlVHCisjaW5jbHVkZSAi c3RkaW8uaCIKKyNkZWZpbmUgQnVnKHgpIHtmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB4KTsgZXhp dCgxKTt9CisjZW5kaWYKKworI2luY2x1ZGUgInN0ZGxpYi5oIgorI2luY2x1ZGUgInN0cmluZy5o IgorCisjaWZkZWYgS1JfaGVhZGVycworI2RlZmluZSBDaGFyIGNoYXIKKyNlbHNlCisjZGVmaW5l IENoYXIgdm9pZAorI2VuZGlmCisKKyNpZmRlZiBNQUxMT0MKK2V4dGVybiBDaGFyICpNQUxMT0Mg QU5TSSgoc2l6ZV90KSk7CisjZWxzZQorI2RlZmluZSBNQUxMT0MoeCkgX21hbGxvY19yKF9SRUVO VCwgeCkKKyNlbmRpZgorI2RlZmluZSBGUkVFKHgpIF9mcmVlX3IoX1JFRU5ULCB4KQorCisjdW5k ZWYgSUVFRV9Bcml0aAorI3VuZGVmIEF2b2lkX1VuZGVyZmxvdworI2lmZGVmIElFRUVfTUM2OGsK KyNkZWZpbmUgSUVFRV9Bcml0aAorI2VuZGlmCisjaWZkZWYgSUVFRV84MDg3CisjZGVmaW5lIElF RUVfQXJpdGgKKyNlbmRpZgorCisjaW5jbHVkZSAiZXJybm8uaCIKKyNpZmRlZiBCYWRfZmxvYXRf aAorCisjaWZkZWYgSUVFRV9Bcml0aAorI2RlZmluZSBEQkxfRElHIDE1CisjZGVmaW5lIERCTF9N QVhfMTBfRVhQIDMwOAorI2RlZmluZSBEQkxfTUFYX0VYUCAxMDI0CisjZGVmaW5lIEZMVF9SQURJ WCAyCisjZGVmaW5lIERCTF9NQVggMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgKKyNlbmRpZgorCisj aWZkZWYgSUJNCisjZGVmaW5lIERCTF9ESUcgMTYKKyNkZWZpbmUgREJMX01BWF8xMF9FWFAgNzUK KyNkZWZpbmUgREJMX01BWF9FWFAgNjMKKyNkZWZpbmUgRkxUX1JBRElYIDE2CisjZGVmaW5lIERC TF9NQVggNy4yMzcwMDU1NzczMzIyNjIxZSs3NQorI2VuZGlmCisKKyNpZmRlZiBWQVgKKyNkZWZp bmUgREJMX0RJRyAxNgorI2RlZmluZSBEQkxfTUFYXzEwX0VYUCAzOAorI2RlZmluZSBEQkxfTUFY X0VYUCAxMjcKKyNkZWZpbmUgRkxUX1JBRElYIDIKKyNkZWZpbmUgREJMX01BWCAxLjcwMTQxMTgz NDYwNDY5MjNlKzM4CisjZGVmaW5lIG5fYmlndGVucyAyCisjZW5kaWYKKworI2lmbmRlZiBMT05H X01BWAorI2RlZmluZSBMT05HX01BWCAyMTQ3NDgzNjQ3CisjZW5kaWYKKworI2Vsc2UgLyogaWZu ZGVmIEJhZF9mbG9hdF9oICovCisjaW5jbHVkZSAiZmxvYXQuaCIKKyNlbmRpZiAvKiBCYWRfZmxv YXRfaCAqLworCisjaWZkZWYgSUVFRV9Bcml0aAorI2RlZmluZSBTY2FsZV9CaXQgMHgxMAorI2Rl ZmluZSBuX2JpZ3RlbnMgNQorI2VuZGlmCisKKyNpZmRlZiBJQk0KKyNkZWZpbmUgbl9iaWd0ZW5z IDMKKyNlbmRpZgorCisjaWZkZWYgVkFYCisjZGVmaW5lIG5fYmlndGVucyAyCisjZW5kaWYKKwor I2lmbmRlZiBfX01BVEhfSF9fCisjaW5jbHVkZSAibWF0aC5oIgorI2VuZGlmCisKKyNpZmRlZiBf X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSUVFRV84MDg3 KSArIGRlZmluZWQoSUVFRV9NQzY4aykgKyBkZWZpbmVkKFZBWCkgKyBkZWZpbmVkKElCTSkgIT0g MQorRXhhY3RseSBvbmUgb2YgSUVFRV84MDg3LCBJRUVFX01DNjhrLCBWQVgsIG9yIElCTSBzaG91 bGQgYmUgZGVmaW5lZC4KKyNlbmRpZgorCit0eXBlZGVmIHVuaW9uIHsgZG91YmxlIGQ7IFVMb25n IExbMl07IH0gVTsKKworI2lmZGVmIElFRUVfODA4NworI2RlZmluZSB3b3JkMCh4KSAoeCktPkxb MV0KKyNkZWZpbmUgd29yZDEoeCkgKHgpLT5MWzBdCisjZWxzZQorI2RlZmluZSB3b3JkMCh4KSAo eCktPkxbMF0KKyNkZWZpbmUgd29yZDEoeCkgKHgpLT5MWzFdCisjZW5kaWYKKyNkZWZpbmUgZHZh bCh4KSAoeCktPmQKKworLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIG9mIFN0b3JlaW5jIGlz IGFwcHJvcHJpYXRlIGZvciBNSVBTIHByb2Nlc3NvcnMuCisgKiBBbiBhbHRlcm5hdGl2ZSB0aGF0 IG1pZ2h0IGJlIGJldHRlciBvbiBzb21lIG1hY2hpbmVzIGlzCisgKiAjZGVmaW5lIFN0b3JlaW5j KGEsYixjKSAoKmErKyA9IGIgPDwgMTYgfCBjICYgMHhmZmZmKQorICovCisjaWYgZGVmaW5lZChJ RUVFXzgwODcpICsgZGVmaW5lZChWQVgpCisjZGVmaW5lIFN0b3JlaW5jKGEsYixjKSAoKCh1bnNp Z25lZCBzaG9ydCAqKWEpWzFdID0gKHVuc2lnbmVkIHNob3J0KWIsIFwKKygodW5zaWduZWQgc2hv cnQgKilhKVswXSA9ICh1bnNpZ25lZCBzaG9ydCljLCBhKyspCisjZWxzZQorI2RlZmluZSBTdG9y ZWluYyhhLGIsYykgKCgodW5zaWduZWQgc2hvcnQgKilhKVswXSA9ICh1bnNpZ25lZCBzaG9ydCli LCBcCisoKHVuc2lnbmVkIHNob3J0ICopYSlbMV0gPSAodW5zaWduZWQgc2hvcnQpYywgYSsrKQor I2VuZGlmCisKKy8qICNkZWZpbmUgUCBEQkxfTUFOVF9ESUcgKi8KKy8qIFRlbl9wbWF4ID0gZmxv b3IoUCpsb2coMikvbG9nKDUpKSAqLworLyogQmxldGNoID0gKGhpZ2hlc3QgcG93ZXIgb2YgMiA8 IERCTF9NQVhfMTBfRVhQKSAvIDE2ICovCisvKiBRdWlja19tYXggPSBmbG9vcigoUC0xKSpsb2co RkxUX1JBRElYKS9sb2coMTApIC0gMSkgKi8KKy8qIEludF9tYXggPSBmbG9vcihQKmxvZyhGTFRf UkFESVgpL2xvZygxMCkgLSAxKSAqLworCisjaWZkZWYgSUVFRV9Bcml0aAorI2RlZmluZSBFeHBf c2hpZnQgIDIwCisjZGVmaW5lIEV4cF9zaGlmdDEgMjAKKyNkZWZpbmUgRXhwX21zazEgICAgMHgx MDAwMDAKKyNkZWZpbmUgRXhwX21zazExICAgMHgxMDAwMDAKKyNkZWZpbmUgRXhwX21hc2sgIDB4 N2ZmMDAwMDAKKyNkZWZpbmUgUCA1MworI2RlZmluZSBCaWFzIDEwMjMKKyNkZWZpbmUgRW1pbiAo LTEwMjIpCisjZGVmaW5lIEV4cF8xICAweDNmZjAwMDAwCisjZGVmaW5lIEV4cF8xMSAweDNmZjAw MDAwCisjZGVmaW5lIEViaXRzIDExCisjZGVmaW5lIEZyYWNfbWFzayAgMHhmZmZmZgorI2RlZmlu ZSBGcmFjX21hc2sxIDB4ZmZmZmYKKyNkZWZpbmUgVGVuX3BtYXggMjIKKyNkZWZpbmUgQmxldGNo IDB4MTAKKyNkZWZpbmUgQm5kcnlfbWFzayAgMHhmZmZmZgorI2RlZmluZSBCbmRyeV9tYXNrMSAw eGZmZmZmCisjZGVmaW5lIExTQiAxCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMDAwMDAKKyNkZWZp bmUgTG9nMlAgMQorI2RlZmluZSBUaW55MCAwCisjZGVmaW5lIFRpbnkxIDEKKyNkZWZpbmUgUXVp Y2tfbWF4IDE0CisjZGVmaW5lIEludF9tYXggMTQKKworI2lmbmRlZiBGbHRfUm91bmRzCisjaWZk ZWYgRkxUX1JPVU5EUworI2RlZmluZSBGbHRfUm91bmRzIEZMVF9ST1VORFMKKyNlbHNlCisjZGVm aW5lIEZsdF9Sb3VuZHMgMQorI2VuZGlmCisjZW5kaWYgLypGbHRfUm91bmRzKi8KKworI2Vsc2Ug LyogaWZuZGVmIElFRUVfQXJpdGggKi8KKyN1bmRlZiAgU3VkZGVuX1VuZGVyZmxvdworI2RlZmlu ZSBTdWRkZW5fVW5kZXJmbG93CisjaWZkZWYgSUJNCisjdW5kZWYgRmx0X1JvdW5kcworI2RlZmlu ZSBGbHRfUm91bmRzIDAKKyNkZWZpbmUgRXhwX3NoaWZ0ICAyNAorI2RlZmluZSBFeHBfc2hpZnQx IDI0CisjZGVmaW5lIEV4cF9tc2sxICAgMHgxMDAwMDAwCisjZGVmaW5lIEV4cF9tc2sxMSAgMHgx MDAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdmMDAwMDAwCisjZGVmaW5lIFAgMTQKKyNkZWZp bmUgQmlhcyA2NQorI2RlZmluZSBFeHBfMSAgMHg0MTAwMDAwMAorI2RlZmluZSBFeHBfMTEgMHg0 MTAwMDAwMAorI2RlZmluZSBFYml0cyA4CS8qIGV4cG9uZW50IGhhcyA3IGJpdHMsIGJ1dCA4IGlz IHRoZSByaWdodCB2YWx1ZSBpbiBiMmQgKi8KKyNkZWZpbmUgRnJhY19tYXNrICAweGZmZmZmZgor I2RlZmluZSBGcmFjX21hc2sxIDB4ZmZmZmZmCisjZGVmaW5lIEJsZXRjaCA0CisjZGVmaW5lIFRl bl9wbWF4IDIyCisjZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZWZmZmZmCisjZGVmaW5lIEJuZHJ5X21h c2sxIDB4ZmZmZmZmCisjZGVmaW5lIExTQiAxCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMDAwMDAK KyNkZWZpbmUgTG9nMlAgNAorI2RlZmluZSBUaW55MCAweDEwMDAwMAorI2RlZmluZSBUaW55MSAw CisjZGVmaW5lIFF1aWNrX21heCAxNAorI2RlZmluZSBJbnRfbWF4IDE1CisjZWxzZSAvKiBWQVgg Ki8KKyN1bmRlZiBGbHRfUm91bmRzCisjZGVmaW5lIEZsdF9Sb3VuZHMgMQorI2RlZmluZSBFeHBf c2hpZnQgIDIzCisjZGVmaW5lIEV4cF9zaGlmdDEgNworI2RlZmluZSBFeHBfbXNrMSAgICAweDgw CisjZGVmaW5lIEV4cF9tc2sxMSAgIDB4ODAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdmODAK KyNkZWZpbmUgUCA1NgorI2RlZmluZSBCaWFzIDEyOQorI2RlZmluZSBFbWluICgtMTI3KQorI2Rl ZmluZSBFeHBfMSAgMHg0MDgwMDAwMAorI2RlZmluZSBFeHBfMTEgMHg0MDgwCisjZGVmaW5lIEVi aXRzIDgKKyNkZWZpbmUgRnJhY19tYXNrICAweDdmZmZmZgorI2RlZmluZSBGcmFjX21hc2sxIDB4 ZmZmZjAwN2YKKyNkZWZpbmUgVGVuX3BtYXggMjQKKyNkZWZpbmUgQmxldGNoIDIKKyNkZWZpbmUg Qm5kcnlfbWFzayAgMHhmZmZmMDA3ZgorI2RlZmluZSBCbmRyeV9tYXNrMSAweGZmZmYwMDdmCisj ZGVmaW5lIExTQiAweDEwMDAwCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMAorI2RlZmluZSBMb2cy UCAxCisjZGVmaW5lIFRpbnkwIDB4ODAKKyNkZWZpbmUgVGlueTEgMAorI2RlZmluZSBRdWlja19t YXggMTUKKyNkZWZpbmUgSW50X21heCAxNQorI2VuZGlmIC8qIElCTSwgVkFYICovCisjZW5kaWYg LyogSUVFRV9Bcml0aCAqLworCisjaWZuZGVmIElFRUVfQXJpdGgKKyNkZWZpbmUgUk9VTkRfQklB U0VECisjZWxzZQorI2lmZGVmIFJPVU5EX0JJQVNFRF93aXRob3V0X1JvdW5kX1VwCisjdW5kZWYg IFJPVU5EX0JJQVNFRAorI2RlZmluZSBST1VORF9CSUFTRUQKKyNlbmRpZgorI2VuZGlmCisKKyNp ZmRlZiBSTkRfUFJPRFFVT1QKKyNkZWZpbmUgcm91bmRlZF9wcm9kdWN0KGEsYikgYSA9IHJuZF9w cm9kKGEsIGIpCisjZGVmaW5lIHJvdW5kZWRfcXVvdGllbnQoYSxiKSBhID0gcm5kX3F1b3QoYSwg YikKKyNpZmRlZiBLUl9oZWFkZXJzCitleHRlcm4gZG91YmxlIHJuZF9wcm9kKCksIHJuZF9xdW90 KCk7CisjZWxzZQorZXh0ZXJuIGRvdWJsZSBybmRfcHJvZChkb3VibGUsIGRvdWJsZSksIHJuZF9x dW90KGRvdWJsZSwgZG91YmxlKTsKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgcm91bmRlZF9wcm9k dWN0KGEsYikgYSAqPSBiCisjZGVmaW5lIHJvdW5kZWRfcXVvdGllbnQoYSxiKSBhIC89IGIKKyNl bmRpZgorCisjZGVmaW5lIEJpZzAgKEZyYWNfbWFzazEgfCBFeHBfbXNrMSooREJMX01BWF9FWFAr Qmlhcy0xKSkKKyNkZWZpbmUgQmlnMSAweGZmZmZmZmZmCisKKyN1bmRlZiAgUGFja18xNgorI2lm bmRlZiBQYWNrXzMyCisjZGVmaW5lIFBhY2tfMzIKKyNlbmRpZgorCisjaWZkZWYgTk9fTE9OR19M T05HCisjdW5kZWYgVUxMb25nCisjaWZkZWYgSnVzdF8xNgorI3VuZGVmIFBhY2tfMzIKKyNkZWZp bmUgUGFja18xNgorLyogV2hlbiBQYWNrXzMyIGlzIG5vdCBkZWZpbmVkLCB3ZSBzdG9yZSAxNiBi aXRzIHBlciAzMi1iaXQgTG9uZy4KKyAqIFRoaXMgbWFrZXMgc29tZSBpbm5lciBsb29wcyBzaW1w bGVyIGFuZCBzb21ldGltZXMgc2F2ZXMgd29yaworICogZHVyaW5nIG11bHRpcGxpY2F0aW9ucywg YnV0IGl0IG9mdGVuIHNlZW1zIHRvIG1ha2UgdGhpbmdzIHNsaWdodGx5CisgKiBzbG93ZXIuICBI ZW5jZSB0aGUgZGVmYXVsdCBpcyBub3cgdG8gc3RvcmUgMzIgYml0cyBwZXIgTG9uZy4KKyAqLwor I2VuZGlmCisjZWxzZQkvKiBsb25nIGxvbmcgYXZhaWxhYmxlICovCisjaWZuZGVmIExsb25nCisj ZGVmaW5lIExsb25nIGxvbmcgbG9uZworI2VuZGlmCisjaWZuZGVmIFVMTG9uZworI2RlZmluZSBV TExvbmcgdW5zaWduZWQgTGxvbmcKKyNlbmRpZgorI2VuZGlmIC8qIE5PX0xPTkdfTE9ORyAqLwor CisjaWZkZWYgUGFja18zMgorI2RlZmluZSBVTGJpdHMgMzIKKyNkZWZpbmUga3NoaWZ0IDUKKyNk ZWZpbmUga21hc2sgMzEKKyNkZWZpbmUgQUxMX09OIDB4ZmZmZmZmZmYKKyNlbHNlCisjZGVmaW5l IFVMYml0cyAxNgorI2RlZmluZSBrc2hpZnQgNAorI2RlZmluZSBrbWFzayAxNQorI2RlZmluZSBB TExfT04gMHhmZmZmCisjZW5kaWYKKworI2lmbmRlZiBfX1NJTkdMRV9USFJFQURfXworI2RlZmlu ZSBNVUxUSVBMRV9USFJFQURTCisjZW5kaWYKKworI2lmbmRlZiBNVUxUSVBMRV9USFJFQURTCisj ZGVmaW5lIEFDUVVJUkVfRFRPQV9MT0NLKG4pCS8qbm90aGluZyovCisjZGVmaW5lIEZSRUVfRFRP QV9MT0NLKG4pCS8qbm90aGluZyovCisjZWxzZQorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjZGVm aW5lIEFDUVVJUkVfRFRPQV9MT0NLKG4pIFwKKwluID8gX19sb2NrX2FjcXVpcmUoX19kdG9hX2xv Y2sxKSA6IF9fbG9ja19hY3F1aXJlKF9fZHRvYV9sb2NrMCkKKyNkZWZpbmUgRlJFRV9EVE9BX0xP Q0sobikgXAorCW4gPyBfX2xvY2tfcmVsZWFzZShfX2R0b2FfbG9jazEpIDogX19sb2NrX3JlbGVh c2UoX19kdG9hX2xvY2swKQorI2VuZGlmCisKKyNkZWZpbmUgS21heCA5CisKKyBzdHJ1Y3QKK0Jp Z2ludCB7CisJc3RydWN0IEJpZ2ludCAqbmV4dDsKKwlpbnQgaywgbWF4d2RzLCBzaWduLCB3ZHM7 CisJVUxvbmcgeFsxXTsKKwl9OworCisgdHlwZWRlZiBzdHJ1Y3QgQmlnaW50IEJpZ2ludDsKKwor I2lmZGVmIE5PX1NUUklOR19ICisjaWZkZWYgREVDTEFSRV9TSVpFX1QKK3R5cGVkZWYgdW5zaWdu ZWQgaW50IHNpemVfdDsKKyNlbmRpZgorZXh0ZXJuIHZvaWQgbWVtY3B5X0QyQSBBTlNJKCh2b2lk KiwgY29uc3Qgdm9pZCosIHNpemVfdCkpOworI2RlZmluZSBCY29weSh4LHkpIG1lbWNweV9EMkEo JngtPnNpZ24sJnktPnNpZ24seS0+d2RzKnNpemVvZihVTG9uZykgKyAyKnNpemVvZihpbnQpKQor I2Vsc2UgLyogIU5PX1NUUklOR19IICovCisjZGVmaW5lIEJjb3B5KHgseSkgbWVtY3B5KCZ4LT5z aWduLCZ5LT5zaWduLHktPndkcypzaXplb2YoVUxvbmcpICsgMipzaXplb2YoaW50KSkKKyNlbmRp ZiAvKiBOT19TVFJJTkdfSCAqLworCisjZGVmaW5lIGR0b2EgX19kdG9hCisjZGVmaW5lIGdkdG9h IF9fZ2R0b2EKKyNkZWZpbmUgZnJlZWR0b2EgX19mcmVlZHRvYQorI2RlZmluZSBzdHJ0b2RnIF9f c3RydG9kZworI2RlZmluZSBnX2RkZm10IF9fZ19kZGZtdAorI2RlZmluZSBnX2RmbXQgX19nX2Rm bXQKKyNkZWZpbmUgZ19mZm10IF9fZ19mZm10CisjZGVmaW5lIGdfUWZtdCBfX2dfUWZtdAorI2Rl ZmluZSBnX3hmbXQgX19nX3hmbXQKKyNkZWZpbmUgZ194TGZtdCBfX2dfeExmbXQKKyNkZWZpbmUg c3RydG9JZCBfX3N0cnRvSWQKKyNkZWZpbmUgc3RydG9JZGQgX19zdHJ0b0lkZAorI2RlZmluZSBz dHJ0b0lmIF9fc3RydG9JZgorI2RlZmluZSBzdHJ0b0lRIF9fc3RydG9JUQorI2RlZmluZSBzdHJ0 b0l4IF9fc3RydG9JeAorI2RlZmluZSBzdHJ0b0l4TCBfX3N0cnRvSXhMCisjZGVmaW5lIHN0cnRv cmQgX19zdHJ0b3JkCisjZGVmaW5lIHN0cnRvcmRkIF9fc3RydG9yZGQKKyNkZWZpbmUgc3RydG9y ZiBfX3N0cnRvcmYKKyNkZWZpbmUgc3RydG9yUSBfX3N0cnRvclEKKyNkZWZpbmUgc3RydG9yeCBf X3N0cnRvcngKKyNkZWZpbmUgc3RydG9yeEwgX19zdHJ0b3J4TAorI2RlZmluZSBzdHJ0b2RJIF9f c3RydG9kSQorI2RlZmluZSBzdHJ0b3BkIF9fc3RydG9wZAorI2RlZmluZSBzdHJ0b3BkZCBfX3N0 cnRvcGRkCisjZGVmaW5lIHN0cnRvcGYgX19zdHJ0b3BmCisjZGVmaW5lIHN0cnRvcFEgX19zdHJ0 b3BRCisjZGVmaW5lIHN0cnRvcHggX19zdHJ0b3B4CisjZGVmaW5lIHN0cnRvcHhMIF9fc3RydG9w eEwKKworI2RlZmluZSBCYWxsb2MgX19CYWxsb2NfRDJBCisjZGVmaW5lIEJmcmVlIF9fQmZyZWVf RDJBCisjZGVmaW5lIFVMdG9RIF9fVUx0b1FfRDJBCisjZGVmaW5lIFVMdG9mIF9fVUx0b2ZfRDJB CisjZGVmaW5lIFVMdG9kIF9fVUx0b2RfRDJBCisjZGVmaW5lIFVMdG9kZCBfX1VMdG9kZF9EMkEK KyNkZWZpbmUgVUx0b3ggX19VTHRveF9EMkEKKyNkZWZpbmUgVUx0b3hMIF9fVUx0b3hMX0QyQQor I2RlZmluZSBhbnlfb24gX19hbnlfb25fRDJBCisjZGVmaW5lIGIyZCBfX2IyZF9EMkEKKyNkZWZp bmUgYmlndGVucyBfX2JpZ3RlbnNfRDJBCisjZGVmaW5lIGNtcCBfX2NtcF9EMkEKKyNkZWZpbmUg Y29weWJpdHMgX19jb3B5Yml0c19EMkEKKyNkZWZpbmUgZDJiIF9fZDJiX0QyQQorI2RlZmluZSBk ZWNyZW1lbnQgX19kZWNyZW1lbnRfRDJBCisjZGVmaW5lIGRpZmYgX19kaWZmX0QyQQorI2RlZmlu ZSBkdG9hX3Jlc3VsdCBfX2R0b2FfcmVzdWx0X0QyQQorI2RlZmluZSBnX19mbXQgX19nX19mbXRf RDJBCisjZGVmaW5lIGdldGhleCBfX2dldGhleF9EMkEKKyNkZWZpbmUgaGV4ZGlnIF9faGV4ZGln X0QyQQorI2RlZmluZSBoZXhuYW4gX19oZXhuYW5fRDJBCisjZGVmaW5lIGhpMGJpdHMoeCkgX19o aTBiaXRzX0QyQSgoVUxvbmcpKHgpKQorI2RlZmluZSBoaTBiaXRzX0QyQSBfX2hpMGJpdHNfRDJB CisjZGVmaW5lIGkyYiBfX2kyYl9EMkEKKyNkZWZpbmUgaW5jcmVtZW50IF9faW5jcmVtZW50X0Qy QQorI2RlZmluZSBsbzBiaXRzIF9fbG8wYml0c19EMkEKKyNkZWZpbmUgbHNoaWZ0IF9fbHNoaWZ0 X0QyQQorI2RlZmluZSBtYXRjaCBfX21hdGNoX0QyQQorI2RlZmluZSBtdWx0IF9fbXVsdF9EMkEK KyNkZWZpbmUgbXVsdGFkZCBfX211bHRhZGRfRDJBCisjZGVmaW5lIG5ydl9hbGxvYyBfX25ydl9h bGxvY19EMkEKKyNkZWZpbmUgcG93NW11bHQgX19wb3c1bXVsdF9EMkEKKyNkZWZpbmUgcXVvcmVt IF9fcXVvcmVtX0QyQQorI2RlZmluZSByYXRpbyBfX3JhdGlvX0QyQQorI2RlZmluZSByc2hpZnQg X19yc2hpZnRfRDJBCisjZGVmaW5lIHJ2X2FsbG9jIF9fcnZfYWxsb2NfRDJBCisjZGVmaW5lIHMy YiBfX3MyYl9EMkEKKyNkZWZpbmUgc2V0X29uZXMgX19zZXRfb25lc19EMkEKKyNkZWZpbmUgc3Ry Y3AgX19zdHJjcF9EMkEKKyNkZWZpbmUgc3RydG9JZyBfX3N0cnRvSWdfRDJBCisjZGVmaW5lIHN1 bHAgX19zdWxwX0QyQQorI2RlZmluZSBzdW0gX19zdW1fRDJBCisjZGVmaW5lIHRlbnMgX190ZW5z X0QyQQorI2RlZmluZSB0aW55dGVucyBfX3Rpbnl0ZW5zX0QyQQorI2RlZmluZSB0aW55dGVucyBf X3Rpbnl0ZW5zX0QyQQorI2RlZmluZSB0cmFpbHogX190cmFpbHpfRDJBCisjZGVmaW5lIHVscCBf X3VscF9EMkEKKworX19CRUdJTl9ISURERU5fREVDTFMKKyBleHRlcm4gY2hhciAqZHRvYV9yZXN1 bHQ7CisgZXh0ZXJuIENPTlNUIGRvdWJsZSBiaWd0ZW5zW10sIHRlbnNbXSwgdGlueXRlbnNbXTsK KyBleHRlcm4gdW5zaWduZWQgY2hhciBoZXhkaWdbXTsKKworIGV4dGVybiBCaWdpbnQgKkJhbGxv YyBBTlNJKChpbnQpKTsKKyBleHRlcm4gdm9pZCBCZnJlZSBBTlNJKChCaWdpbnQqKSk7CisgZXh0 ZXJuIHZvaWQgVUx0b2YgQU5TSSgoVUxvbmcqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVy biB2b2lkIFVMdG9kIEFOU0koKFVMb25nKiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4g dm9pZCBVTHRvZGQgQU5TSSgoVUxvbmcqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVybiB2 b2lkIFVMdG9RIEFOU0koKFVMb25nKiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4gdm9p ZCBVTHRveCBBTlNJKChVU2hvcnQqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVybiB2b2lk IFVMdG94TCBBTlNJKChVTG9uZyosIFVMb25nKiwgTG9uZywgaW50KSk7CisgZXh0ZXJuIFVMb25n IGFueV9vbiBBTlNJKChCaWdpbnQqLCBpbnQpKTsKKyBleHRlcm4gZG91YmxlIGIyZCBBTlNJKChC aWdpbnQqLCBpbnQqKSk7CisgZXh0ZXJuIGludCBjbXAgQU5TSSgoQmlnaW50KiwgQmlnaW50Kikp OworIGV4dGVybiB2b2lkIGNvcHliaXRzIEFOU0koKFVMb25nKiwgaW50LCBCaWdpbnQqKSk7Cisg ZXh0ZXJuIEJpZ2ludCAqZDJiIEFOU0koKGRvdWJsZSwgaW50KiwgaW50KikpOworIGV4dGVybiB2 b2lkIGRlY3JlbWVudCBBTlNJKChCaWdpbnQqKSk7CisgZXh0ZXJuIEJpZ2ludCAqZGlmZiBBTlNJ KChCaWdpbnQqLCBCaWdpbnQqKSk7CisgZXh0ZXJuIGNoYXIgKmdfX2ZtdCBBTlNJKChjaGFyKiwg Y2hhciosIGNoYXIqLCBpbnQsIFVMb25nLCBzaXplX3QpKTsKKyBleHRlcm4gaW50IGdldGhleCBB TlNJKChDT05TVCBjaGFyKiosIEZQSSosIExvbmcqLCBCaWdpbnQqKiwgaW50KSk7CisgZXh0ZXJu IHZvaWQgX19oZXhkaWdfaW5pdF9EMkEoVm9pZCk7CisgZXh0ZXJuIGludCBoZXhuYW4gQU5TSSgo Q09OU1QgY2hhcioqLCBGUEkqLCBVTG9uZyopKTsKKyBleHRlcm4gaW50IGhpMGJpdHNfRDJBIEFO U0koKFVMb25nKSk7CisgZXh0ZXJuIEJpZ2ludCAqaTJiIEFOU0koKGludCkpOworIGV4dGVybiBC aWdpbnQgKmluY3JlbWVudCBBTlNJKChCaWdpbnQqKSk7CisgZXh0ZXJuIGludCBsbzBiaXRzIEFO U0koKFVMb25nKikpOworIGV4dGVybiBCaWdpbnQgKmxzaGlmdCBBTlNJKChCaWdpbnQqLCBpbnQp KTsKKyBleHRlcm4gaW50IG1hdGNoIEFOU0koKENPTlNUIGNoYXIqKiwgY2hhciopKTsKKyBleHRl cm4gQmlnaW50ICptdWx0IEFOU0koKEJpZ2ludCosIEJpZ2ludCopKTsKKyBleHRlcm4gQmlnaW50 ICptdWx0YWRkIEFOU0koKEJpZ2ludCosIGludCwgaW50KSk7CisgZXh0ZXJuIGNoYXIgKm5ydl9h bGxvYyBBTlNJKChjaGFyKiwgY2hhciAqKiwgaW50KSk7CisgZXh0ZXJuIEJpZ2ludCAqcG93NW11 bHQgQU5TSSgoQmlnaW50KiwgaW50KSk7CisgZXh0ZXJuIGludCBxdW9yZW0gQU5TSSgoQmlnaW50 KiwgQmlnaW50KikpOworIGV4dGVybiBkb3VibGUgcmF0aW8gQU5TSSgoQmlnaW50KiwgQmlnaW50 KikpOworIGV4dGVybiB2b2lkIHJzaGlmdCBBTlNJKChCaWdpbnQqLCBpbnQpKTsKKyBleHRlcm4g Y2hhciAqcnZfYWxsb2MgQU5TSSgoaW50KSk7CisgZXh0ZXJuIEJpZ2ludCAqczJiIEFOU0koKENP TlNUIGNoYXIqLCBpbnQsIGludCwgVUxvbmcsIGludCkpOworIGV4dGVybiBCaWdpbnQgKnNldF9v bmVzIEFOU0koKEJpZ2ludCosIGludCkpOworIGV4dGVybiBjaGFyICpzdHJjcCBBTlNJKChjaGFy KiwgY29uc3QgY2hhciopKTsKKyBleHRlcm4gaW50IHN0cnRvSWcgQU5TSSgoQ09OU1QgY2hhcios IGNoYXIqKiwgRlBJKiwgTG9uZyosIEJpZ2ludCoqLCBpbnQqKSk7CisgZXh0ZXJuIEJpZ2ludCAq c3VtIEFOU0koKEJpZ2ludCosIEJpZ2ludCopKTsKKyBleHRlcm4gaW50IHRyYWlseiBBTlNJKChC aWdpbnQqKSk7CisgZXh0ZXJuIGRvdWJsZSB1bHAgQU5TSSgoVSopKTsKK19fRU5EX0hJRERFTl9E RUNMUworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorLyoKKyAqIE5BTl9XT1JEMCBh bmQgTkFOX1dPUkQxIGFyZSBvbmx5IHJlZmVyZW5jZWQgaW4gc3RydG9kLmMuICBQcmlvciB0bwor ICogMjAwNTAxMTUsIHRoZXkgdXNlZCB0byBiZSBoYXJkLXdpcmVkIGhlcmUgKHRvIDB4N2ZmODAw MDAgYW5kIDAsCisgKiByZXNwZWN0aXZlbHkpLCBidXQgbm93IGFyZSBkZXRlcm1pbmVkIGJ5IGNv bXBpbGluZyBhbmQgcnVubmluZworICogcW5hbi5jIHRvIGdlbmVyYXRlIGdkX3FuYW4uaCwgd2hp Y2ggc3BlY2lmaWVzIGRfUU5BTjAgYW5kIGRfUU5BTjEuCisgKiBGb3JtZXJseSBnZHRvYWltcC5o IHJlY29tbWVuZGVkIHN1cHBseWluZyBzdWl0YWJsZSAtRE5BTl9XT1JEMD0uLi4KKyAqIGFuZCAt RE5BTl9XT1JEMT0uLi4gIHZhbHVlcyBpZiBuZWNlc3NhcnkuICBUaGlzIHNob3VsZCBzdGlsbCB3 b3JrLgorICogKE9uIEhQIFNlcmllcyA3MDAvODAwIG1hY2hpbmVzLCAtRE5BTl9XT1JEMD0weDdm ZjQwMDAwIHdvcmtzLikKKyAqLworI2lmZGVmIElFRUVfQXJpdGgKKyNpZm5kZWYgTk9fSU5GTkFO X0NIRUNLCisjdW5kZWYgSU5GTkFOX0NIRUNLCisjZGVmaW5lIElORk5BTl9DSEVDSworI2VuZGlm CisjaWZkZWYgSUVFRV9NQzY4aworI2RlZmluZSBfMCAwCisjZGVmaW5lIF8xIDEKKyNpZm5kZWYg TkFOX1dPUkQwCisjZGVmaW5lIE5BTl9XT1JEMCBkX1FOQU4wCisjZW5kaWYKKyNpZm5kZWYgTkFO X1dPUkQxCisjZGVmaW5lIE5BTl9XT1JEMSBkX1FOQU4xCisjZW5kaWYKKyNlbHNlCisjZGVmaW5l IF8wIDEKKyNkZWZpbmUgXzEgMAorI2lmbmRlZiBOQU5fV09SRDAKKyNkZWZpbmUgTkFOX1dPUkQw IGRfUU5BTjEKKyNlbmRpZgorI2lmbmRlZiBOQU5fV09SRDEKKyNkZWZpbmUgTkFOX1dPUkQxIGRf UU5BTjAKKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI3VuZGVmIElORk5BTl9DSEVDSworI2VuZGlm CisKKyN1bmRlZiBTSQorI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKyNkZWZpbmUgU0kgMQorI2Vs c2UKKyNkZWZpbmUgU0kgMAorI2VuZGlmCisKKyNlbmRpZiAvKiBHRFRPQUlNUF9IX0lOQ0xVREVE ICovCmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9zdGRsaWIvbGR0b2EuYyBiL25ld2xpYi9saWJj L3N0ZGxpYi9sZHRvYS5jCmluZGV4IDI2YzYxOTQ4Yi4uZmJiZDNkMGIxIDEwMDY0NAotLS0gYS9u ZXdsaWIvbGliYy9zdGRsaWIvbGR0b2EuYworKysgYi9uZXdsaWIvbGliYy9zdGRsaWIvbGR0b2Eu YwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRsaWIu aD4KICNpbmNsdWRlICJtcHJlYy5oIgorI2luY2x1ZGUgImdkdG9hLmgiCiAKIC8qIFRoZXNlIGFy ZSB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIGVudHJpZXMuICovCiAvKiBsaW51eCBuYW1lOiAgbG9u ZyBkb3VibGUgX0lPX3N0cnRvbGQgKGNoYXIgKiwgY2hhciAqKik7ICovCkBAIC0yODE0LDYgKzI4 MTUsMTIgQEAgX2xkdG9hX3IgKHN0cnVjdCBfcmVlbnQgKnB0ciwgbG9uZyBkb3VibGUgZCwgaW50 IG1vZGUsIGludCBuZGlnaXRzLAogICAgICAgX1JFRU5UX01QX1JFU1VMVCAocHRyKSA9IDA7CiAg ICAgfQogCisgIC8qIFVzZSB0aGUgcmVzdWx0IG9mIGdkdG9hIGlmIHN1Y2Nlc3NmdWxsLiAqLwor ICBvdXRzdHIgPSBfX2xkdG9hICgmZCwgbW9kZSwgbmRpZ2l0cywgZGVjcHQsIHNpZ24sIHJ2ZSk7 CisgIC8qIElmIGl0IGZhaWxzLCBmYWxsYmFjayB0byBsZWdhY3kgbGR0b2EuICovCisgIGlmIChv dXRzdHIpCisgICAgcmV0dXJuIG91dHN0cjsKKwogI2lmIExEQkxfTUFOVF9ESUcgPT0gMjQKICAg ZTI0dG9lICgmZHUucGUsIGUsIGxkcCk7CiAjZWxpZiBMREJMX01BTlRfRElHID09IDUzCi0tIAoy LjMzLjAKCg== --Multipart=_Mon__29_Nov_2021_19_56_46_+0900_SoYkAc9gw4BwNsY6--