From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x629.google.com (mail-pl1-x629.google.com [IPv6:2607:f8b0:4864:20::629]) by sourceware.org (Postfix) with ESMTPS id BFBD73858D32 for ; Sat, 10 Dec 2022 01:47:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BFBD73858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=golang.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=golang.org Received: by mail-pl1-x629.google.com with SMTP id a9so6668158pld.7 for ; Fri, 09 Dec 2022 17:47:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=golang-org.20210112.gappssmtp.com; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=ogbQZioKM9K1VjTsNEldG6jnTTDOOqeV9mj1K51WHDo=; b=JCoYeFKIfuB59FiMu5XglU2E2iC8i6lTGUi+IXmOSrypIdRFY/Sq1LsFxSRSZ5Frdm Y2WwE+2Twn+xRwEmX8vWfPq5ZopV+bUL8rDtzswV3M/uGmuGRZ/HS0WPkIEOlEhJXSJG B0uj8idwvp5GMuhV266NSIOUkKMm2bBWB9GZv6cmPwJUZIipVJWI6B08VijlQQypVs0v LCwAtx7ZxcT6s+mOaG4f7Itdh8KsdzDIrj4ZHUhnh4GabX9fOdd4emx3VHwedQyQG5Ie J9fQ771e2UxVjWN9CBu5uPBgx/h9JOAoifZragMAq0OBCz7HHlb+5gHnnVv2pHreVzhr OJ+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ogbQZioKM9K1VjTsNEldG6jnTTDOOqeV9mj1K51WHDo=; b=CIMZwkDc4mD6xCvc37WFaIzVzhh6Z5DNrtAOsmqq7ye1i9Ji3MMrIOJCmYTY2zwd15 dFLJTzorNoc1zwTSrigAk5n+hIMMmrMzr7yhzeFLnCQrpjXQZwiRAm+hVvQO78XNz0ms /sggF3+lCBHjmF6jScoFRYLgVEsLDZLLQbEi21HNHi1R1cisEIJOtqeWqSMSweEArUVt C82GVWwg49/r7dcLjw1HC9vNjyMzYpmfZzMLVz2TJi3PVyKVCnfeiVAOVKuE932XQVDy 1q0R0saGJbsKweWbDseVWp8asqq30NA1JEyK89DymscDQZTGhg13jjUpWdBykBfN01Fz 2C6A== X-Gm-Message-State: ANoB5pmqXv5cnA2bAeCv7QIEdhZVAfQAByDRPf7Z8jNPFMo9hXSl1wfk /eQZXzumxaELgBJbXU5l4VRihbB1bZEHOWzQKCJhENUvtYfFft+c X-Google-Smtp-Source: AA0mqf76imd3ivlnnl8fn99dsSDZ5hEe+dda3M4D8pmn1B8WwJ++BgZXXQAXxbIWR84HiAXN0W3EjXzp2g4M5NGvn7o= X-Received: by 2002:a17:90a:9c5:b0:219:89c3:23a9 with SMTP id 63-20020a17090a09c500b0021989c323a9mr31924014pjo.212.1670636841959; Fri, 09 Dec 2022 17:47:21 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Ian Lance Taylor Date: Fri, 9 Dec 2022 17:47:09 -0800 Message-ID: Subject: Re: Add zstd support to libbacktrace To: gcc-patches Content-Type: multipart/mixed; boundary="00000000000084325605ef6f7393" X-Spam-Status: No, score=-9.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,SCC_5_SHORT_WORD_LINES,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --00000000000084325605ef6f7393 Content-Type: text/plain; charset="UTF-8" On Wed, Dec 7, 2022 at 4:22 PM Ian Lance Taylor wrote: > > This patch adds zstd support to libbacktrace, to support the new > linker option --compress-debug-sections=zstd. This patch rewrites and simplifies the main zstd decompression loop using some ideas from the reference implementation. This speeds it up a bit, although it still runs at about 35% of the speed of the reference implementaiton. Bootstrapped and ran libbacktrace tests on x86_64-pc-linux-gnu. Committed to mainline. Ian * elf.c (ZSTD_TABLE_*): Use elf_zstd_fse_baseline_entry. (ZSTD_ENCODE_BASELINE_BITS): Define. (ZSTD_DECODE_BASELINE, ZSTD_DECODE_BASEBITS): Define. (elf_zstd_literal_length_base): New static const array. (elf_zstd_match_length_base): Likewise. (struct elf_zstd_fse_baseline_entry): Define. (elf_zstd_make_literal_baseline_fse): New static function. (elf_zstd_make_offset_baseline_fse): Likewise. (elf_zstd_make_match_baseline_fse): Likewise. (print_table, main): Use elf_zstd_fse_baseline_entry. (elf_zstd_lit_table, elf_zstd_match_table): Likewise. (elf_zstd_offset_table): Likewise. (struct elf_zstd_seq_decode): Likewise. Remove use_rle and rle fields. (elf_zstd_unpack_seq_decode): Use elf_zstd_fse_baseline_entry, taking a conversion function. Convert RLE to FSE. (elf_zstd_literal_length_baseline): Remove. (elf_zstd_literal_length_bits): Remove. (elf_zstd_match_length_baseline): Remove. (elf_zstd_match_length_bits): Remove. (elf_zstd_decompress): Use elf_zstd_fse_baseline_entry. Rewrite and simplify main loop. --00000000000084325605ef6f7393 Content-Type: text/plain; charset="US-ASCII"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbha0ufq0 ZGlmZiAtLWdpdCBhL2xpYmJhY2t0cmFjZS9lbGYuYyBiL2xpYmJhY2t0cmFjZS9lbGYuYwppbmRl eCAxNWU2ZjI4NGRiNi4uZWNlMDJkYjI3ZjEgMTAwNjQ0Ci0tLSBhL2xpYmJhY2t0cmFjZS9lbGYu YworKysgYi9saWJiYWNrdHJhY2UvZWxmLmMKQEAgLTI2MTAsOSArMjYxMCw5IEBAIGVsZl96bGli X2luZmxhdGVfYW5kX3ZlcmlmeSAoY29uc3QgdW5zaWduZWQgY2hhciAqcGluLCBzaXplX3Qgc2lu LAogfQogCiAvKiBGb3Igd29ya2luZyBtZW1vcnkgZHVyaW5nIHpzdGQgY29tcHJlc3Npb24sIHdl IG5lZWQKLSAgIC0gYSBsaXRlcmFsIGxlbmd0aCBGU0UgdGFibGU6IDUxMiAzMi1iaXQgdmFsdWVz ID09IDIwNDggYnl0ZXMKLSAgIC0gYSBtYXRjaCBsZW5ndGggRlNFIHRhYmxlOiA1MTIgMzItYml0 IHZhbHVlcyA9PSAyMDQ4IGJ5dGVzCi0gICAtIGEgb2Zmc2V0IEZTRSB0YWJsZTogMjU2IDMyLWJp dCB2YWx1ZXMgPT0gMTAyNCBieXRlcworICAgLSBhIGxpdGVyYWwgbGVuZ3RoIEZTRSB0YWJsZTog NTEyIDY0LWJpdCB2YWx1ZXMgPT0gNDA5NiBieXRlcworICAgLSBhIG1hdGNoIGxlbmd0aCBGU0Ug dGFibGU6IDUxMiA2NC1iaXQgdmFsdWVzID09IDQwOTYgYnl0ZXMKKyAgIC0gYSBvZmZzZXQgRlNF IHRhYmxlOiAyNTYgNjQtYml0IHZhbHVlcyA9PSAyMDQ4IGJ5dGVzCiAgICAtIGEgSHVmZm1hbiB0 cmVlOiAyMDQ4IHVpbnQxNl90IHZhbHVlcyA9PSA0MDk2IGJ5dGVzCiAgICAtIHNjcmF0Y2ggc3Bh Y2UsIG9uZSBvZgogICAgICAtIHRvIGJ1aWxkIGFuIEZTRSB0YWJsZTogNTEyIHVpbnQxNl90IHZh bHVlcyA9PSAxMDI0IGJ5dGVzCkBAIC0yNjIwLDIxICsyNjIwLDI0IEBAIGVsZl96bGliX2luZmxh dGVfYW5kX3ZlcmlmeSAoY29uc3QgdW5zaWduZWQgY2hhciAqcGluLCBzaXplX3Qgc2luLAogICAg ICAtIGJ1ZmZlciBmb3IgbGl0ZXJhbCB2YWx1ZXMgPT0gMjA0OCBieXRlcwogKi8KIAotI2RlZmlu ZSBaU1REX1RBQkxFX1NJWkUJCQkJXAotICAoMiAqIDUxMiAqIHNpemVvZiAoc3RydWN0IGVsZl96 c3RkX2ZzZV9lbnRyeSkJXAotICAgKyAyNTYgKiBzaXplb2YgKHN0cnVjdCBlbGZfenN0ZF9mc2Vf ZW50cnkpCVwKLSAgICsgMjA0OCAqIHNpemVvZiAodWludDE2X3QpCQkJXAorI2RlZmluZSBaU1RE X1RBQkxFX1NJWkUJCQkJCVwKKyAgKDIgKiA1MTIgKiBzaXplb2YgKHN0cnVjdCBlbGZfenN0ZF9m c2VfYmFzZWxpbmVfZW50cnkpCVwKKyAgICsgMjU2ICogc2l6ZW9mIChzdHJ1Y3QgZWxmX3pzdGRf ZnNlX2Jhc2VsaW5lX2VudHJ5KQkJXAorICAgKyAyMDQ4ICogc2l6ZW9mICh1aW50MTZfdCkJCQkJ CVwKICAgICsgMjA0OCkKIAogI2RlZmluZSBaU1REX1RBQkxFX0xJVEVSQUxfRlNFX09GRlNFVCAo MCkKIAotI2RlZmluZSBaU1REX1RBQkxFX01BVENIX0ZTRV9PRkZTRVQgKDUxMiAqIHNpemVvZiAo c3RydWN0IGVsZl96c3RkX2ZzZV9lbnRyeSkpCisjZGVmaW5lIFpTVERfVEFCTEVfTUFUQ0hfRlNF X09GRlNFVAkJCVwKKyAgKDUxMiAqIHNpemVvZiAoc3RydWN0IGVsZl96c3RkX2ZzZV9iYXNlbGlu ZV9lbnRyeSkpCiAKLSNkZWZpbmUgWlNURF9UQUJMRV9PRkZTRVRfRlNFX09GRlNFVCBcCi0gICha U1REX1RBQkxFX01BVENIX0ZTRV9PRkZTRVQgKyA1MTIgKiBzaXplb2YgKHN0cnVjdCBlbGZfenN0 ZF9mc2VfZW50cnkpKQorI2RlZmluZSBaU1REX1RBQkxFX09GRlNFVF9GU0VfT0ZGU0VUCQkJXAor ICAoWlNURF9UQUJMRV9NQVRDSF9GU0VfT0ZGU0VUCQkJCVwKKyAgICsgNTEyICogc2l6ZW9mIChz dHJ1Y3QgZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5KSkKIAotI2RlZmluZSBaU1REX1RBQkxF X0hVRkZNQU5fT0ZGU0VUIFwKLSAgKFpTVERfVEFCTEVfT0ZGU0VUX0ZTRV9PRkZTRVQgKyAyNTYg KiBzaXplb2YgKHN0cnVjdCBlbGZfenN0ZF9mc2VfZW50cnkpKQorI2RlZmluZSBaU1REX1RBQkxF X0hVRkZNQU5fT0ZGU0VUCQkJCQlcCisgIChaU1REX1RBQkxFX09GRlNFVF9GU0VfT0ZGU0VUCQkJ CQkJXAorICAgKyAyNTYgKiBzaXplb2YgKHN0cnVjdCBlbGZfenN0ZF9mc2VfYmFzZWxpbmVfZW50 cnkpKQogCiAjZGVmaW5lIFpTVERfVEFCTEVfV09SS19PRkZTRVQgXAogICAoWlNURF9UQUJMRV9I VUZGTUFOX09GRlNFVCArIDIwNDggKiBzaXplb2YgKHVpbnQxNl90KSkKQEAgLTI2NDUsOCArMjY0 OCwxMSBAQCBlbGZfemxpYl9pbmZsYXRlX2FuZF92ZXJpZnkgKGNvbnN0IHVuc2lnbmVkIGNoYXIg KnBpbiwgc2l6ZV90IHNpbiwKIAogc3RydWN0IGVsZl96c3RkX2ZzZV9lbnRyeQogeworICAvKiBU aGUgdmFsdWUgdGhhdCB0aGlzIEZTRSBlbnRyeSByZXByZXNlbnRzLiAgKi8KICAgdW5zaWduZWQg Y2hhciBzeW1ib2w7CisgIC8qIFRoZSBudW1iZXIgb2YgYml0cyB0byByZWFkIHRvIGRldGVybWlu ZSB0aGUgbmV4dCBzdGF0ZS4gICovCiAgIHVuc2lnbmVkIGNoYXIgYml0czsKKyAgLyogQWRkIHRo ZSBiaXRzIHRvIHRoaXMgYmFzZSB0byBnZXQgdGhlIG5leHQgc3RhdGUuICAqLwogICB1aW50MTZf dCBiYXNlOwogfTsKIApAQCAtMjkyNSw2ICsyOTMxLDI3MCBAQCBlbGZfenN0ZF9idWlsZF9mc2Ug KGNvbnN0IGludDE2X3QgKm5vcm0sIGludCBpZHgsIHVpbnQxNl90ICpuZXh0LAogICByZXR1cm4g MTsKIH0KIAorLyogRW5jb2RlIHRoZSBiYXNlbGluZSBhbmQgYml0cyBpbnRvIGEgc2luZ2xlIDMy LWJpdCB2YWx1ZS4gICovCisKKyNkZWZpbmUgWlNURF9FTkNPREVfQkFTRUxJTkVfQklUUyhiYXNl bGluZSwgYmFzZWJpdHMpCVwKKyAgKCh1aW50MzJfdCkoYmFzZWxpbmUpIHwgKCh1aW50MzJfdCko YmFzZWJpdHMpIDw8IDI0KSkKKworI2RlZmluZSBaU1REX0RFQ09ERV9CQVNFTElORShiYXNlbGlu ZV9iYXNlYml0cykJXAorICAoKHVpbnQzMl90KShiYXNlbGluZV9iYXNlYml0cykgJiAweGZmZmZm ZikKKworI2RlZmluZSBaU1REX0RFQ09ERV9CQVNFQklUUyhiYXNlbGluZV9iYXNlYml0cykJXAor ICAoKHVpbnQzMl90KShiYXNlbGluZV9iYXNlYml0cykgPj4gMjQpCisKKy8qIEdpdmVuIGEgbGl0 ZXJhbCBsZW5ndGggY29kZSwgd2UgbmVlZCB0byByZWFkIGEgbnVtYmVyIG9mIGJpdHMgYW5kIGFk ZCB0aGF0CisgICB0byBhIGJhc2VsaW5lLiAgRm9yIHN0YXRlcyAwIHRvIDE1IHRoZSBiYXNlbGlu ZSBpcyB0aGUgc3RhdGUgYW5kIHRoZSBudW1iZXIKKyAgIG9mIGJpdHMgaXMgemVyby4gICovCisK KyNkZWZpbmUgWlNURF9MSVRFUkFMX0xFTkdUSF9CQVNFTElORV9PRkZTRVQgKDE2KQorCitzdGF0 aWMgY29uc3QgdWludDMyX3QgZWxmX3pzdGRfbGl0ZXJhbF9sZW5ndGhfYmFzZVtdID0KK3sKKyAg WlNURF9FTkNPREVfQkFTRUxJTkVfQklUUygxNiwgMSksCisgIFpTVERfRU5DT0RFX0JBU0VMSU5F X0JJVFMoMTgsIDEpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDIwLCAxKSwKKyAgWlNU RF9FTkNPREVfQkFTRUxJTkVfQklUUygyMiwgMSksCisgIFpTVERfRU5DT0RFX0JBU0VMSU5FX0JJ VFMoMjQsIDIpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDI4LCAyKSwKKyAgWlNURF9F TkNPREVfQkFTRUxJTkVfQklUUygzMiwgMyksCisgIFpTVERfRU5DT0RFX0JBU0VMSU5FX0JJVFMo NDAsIDMpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDQ4LCA0KSwKKyAgWlNURF9FTkNP REVfQkFTRUxJTkVfQklUUyg2NCwgNiksCisgIFpTVERfRU5DT0RFX0JBU0VMSU5FX0JJVFMoMTI4 LCA3KSwKKyAgWlNURF9FTkNPREVfQkFTRUxJTkVfQklUUygyNTYsIDgpLAorICBaU1REX0VOQ09E RV9CQVNFTElORV9CSVRTKDUxMiwgOSksCisgIFpTVERfRU5DT0RFX0JBU0VMSU5FX0JJVFMoMTAy NCwgMTApLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDIwNDgsIDExKSwKKyAgWlNURF9F TkNPREVfQkFTRUxJTkVfQklUUyg0MDk2LCAxMiksCisgIFpTVERfRU5DT0RFX0JBU0VMSU5FX0JJ VFMoODE5MiwgMTMpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDE2Mzg0LCAxNCksCisg IFpTVERfRU5DT0RFX0JBU0VMSU5FX0JJVFMoMzI3NjgsIDE1KSwKKyAgWlNURF9FTkNPREVfQkFT RUxJTkVfQklUUyg2NTUzNiwgMTYpCit9OworCisvKiBUaGUgc2FtZSBhcHBsaWVzIHRvIG1hdGNo IGxlbmd0aCBjb2Rlcy4gIEZvciBzdGF0ZXMgMCB0byAzMSB0aGUgYmFzZWxpbmUgaXMKKyAgIHRo ZSBzdGF0ZSArIDMgYW5kIHRoZSBudW1iZXIgb2YgYml0cyBpcyB6ZXJvLiAgKi8KKworI2RlZmlu ZSBaU1REX01BVENIX0xFTkdUSF9CQVNFTElORV9PRkZTRVQgKDMyKQorCitzdGF0aWMgY29uc3Qg dWludDMyX3QgZWxmX3pzdGRfbWF0Y2hfbGVuZ3RoX2Jhc2VbXSA9Cit7CisgIFpTVERfRU5DT0RF X0JBU0VMSU5FX0JJVFMoMzUsIDEpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDM3LCAx KSwKKyAgWlNURF9FTkNPREVfQkFTRUxJTkVfQklUUygzOSwgMSksCisgIFpTVERfRU5DT0RFX0JB U0VMSU5FX0JJVFMoNDEsIDEpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDQzLCAyKSwK KyAgWlNURF9FTkNPREVfQkFTRUxJTkVfQklUUyg0NywgMiksCisgIFpTVERfRU5DT0RFX0JBU0VM SU5FX0JJVFMoNTEsIDMpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDU5LCAzKSwKKyAg WlNURF9FTkNPREVfQkFTRUxJTkVfQklUUyg2NywgNCksCisgIFpTVERfRU5DT0RFX0JBU0VMSU5F X0JJVFMoODMsIDQpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDk5LCA1KSwKKyAgWlNU RF9FTkNPREVfQkFTRUxJTkVfQklUUygxMzEsIDcpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9C SVRTKDI1OSwgOCksCisgIFpTVERfRU5DT0RFX0JBU0VMSU5FX0JJVFMoNTE1LCA5KSwKKyAgWlNU RF9FTkNPREVfQkFTRUxJTkVfQklUUygxMDI3LCAxMCksCisgIFpTVERfRU5DT0RFX0JBU0VMSU5F X0JJVFMoMjA1MSwgMTEpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDQwOTksIDEyKSwK KyAgWlNURF9FTkNPREVfQkFTRUxJTkVfQklUUyg4MTk1LCAxMyksCisgIFpTVERfRU5DT0RFX0JB U0VMSU5FX0JJVFMoMTYzODcsIDE0KSwKKyAgWlNURF9FTkNPREVfQkFTRUxJTkVfQklUUygzMjc3 MSwgMTUpLAorICBaU1REX0VOQ09ERV9CQVNFTElORV9CSVRTKDY1NTM5LCAxNikKK307CisKKy8q IEFuIGVudHJ5IGluIGFuIEZTRSB0YWJsZSB1c2VkIGZvciBsaXRlcmFsL21hdGNoL2xlbmd0aCB2 YWx1ZXMuICBGb3IgdGhlc2Ugd2UKKyAgIGhhdmUgdG8gbWFwIHRoZSBzeW1ib2wgdG8gYSBiYXNl bGluZSB2YWx1ZSwgYW5kIHdlIGhhdmUgdG8gcmVhZCB6ZXJvIG9yIG1vcmUKKyAgIGJpdHMgYW5k IGFkZCB0aGF0IHZhbHVlIHRvIHRoZSBiYXNlbGluZSB2YWx1ZS4gIFJhdGhlciB0aGFuIGxvb2sg dGhlIHZhbHVlcworICAgdXAgaW4gYSBzZXBhcmF0ZSB0YWJsZSwgd2UgZ3JvdyB0aGUgRlNFIHRh YmxlIHNvIHRoYXQgd2UgZ2V0IGJldHRlciBtZW1vcnkKKyAgIGNhY2hpbmcuICAqLworCitzdHJ1 Y3QgZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5Cit7CisgIC8qIFRoZSBiYXNlbGluZSBmb3Ig dGhlIHZhbHVlIHRoYXQgdGhpcyBGU0UgZW50cnkgcmVwcmVzZW50cy4uICAqLworICB1aW50MzJf dCBiYXNlbGluZTsKKyAgLyogVGhlIG51bWJlciBvZiBiaXRzIHRvIHJlYWQgdG8gYWRkIHRvIHRo ZSBiYXNlbGluZS4gICovCisgIHVuc2lnbmVkIGNoYXIgYmFzZWJpdHM7CisgIC8qIFRoZSBudW1i ZXIgb2YgYml0cyB0byByZWFkIHRvIGRldGVybWluZSB0aGUgbmV4dCBzdGF0ZS4gICovCisgIHVu c2lnbmVkIGNoYXIgYml0czsKKyAgLyogQWRkIHRoZSBiaXRzIHRvIHRoaXMgYmFzZSB0byBnZXQg dGhlIG5leHQgc3RhdGUuICAqLworICB1aW50MTZfdCBiYXNlOworfTsKKworLyogQ29udmVydCB0 aGUgbGl0ZXJhbCBsZW5ndGggRlNFIHRhYmxlIEZTRV9UQUJMRSB0byBhbiBGU0UgYmFzZWxpbmUg dGFibGUgYXQKKyAgIEJBU0VMSU5FX1RBQkxFLiAgTm90ZSB0aGF0IEZTRV9UQUJMRSBhbmQgQkFT RUxJTkVfVEFCTEUgd2lsbCBvdmVybGFwLiAgKi8KKworc3RhdGljIGludAorZWxmX3pzdGRfbWFr ZV9saXRlcmFsX2Jhc2VsaW5lX2ZzZSAoCisgICAgY29uc3Qgc3RydWN0IGVsZl96c3RkX2ZzZV9l bnRyeSAqZnNlX3RhYmxlLAorICAgIGludCB0YWJsZV9iaXRzLAorICAgIHN0cnVjdCBlbGZfenN0 ZF9mc2VfYmFzZWxpbmVfZW50cnkgKmJhc2VsaW5lX3RhYmxlKQoreworICBzaXplX3QgY291bnQ7 CisgIGNvbnN0IHN0cnVjdCBlbGZfenN0ZF9mc2VfZW50cnkgKnBmc2U7CisgIHN0cnVjdCBlbGZf enN0ZF9mc2VfYmFzZWxpbmVfZW50cnkgKnBiYXNlbGluZTsKKworICAvKiBDb252ZXJ0IGJhY2t3 YXJkIHRvIGF2b2lkIG92ZXJsYXAuICAqLworCisgIGNvdW50ID0gMVUgPDwgdGFibGVfYml0czsK KyAgcGZzZSA9IGZzZV90YWJsZSArIGNvdW50OworICBwYmFzZWxpbmUgPSBiYXNlbGluZV90YWJs ZSArIGNvdW50OworICB3aGlsZSAocGZzZSA+IGZzZV90YWJsZSkKKyAgICB7CisgICAgICB1bnNp Z25lZCBjaGFyIHN5bWJvbDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYml0czsKKyAgICAgIHVpbnQx Nl90IGJhc2U7CisKKyAgICAgIC0tcGZzZTsKKyAgICAgIC0tcGJhc2VsaW5lOworICAgICAgc3lt Ym9sID0gcGZzZS0+c3ltYm9sOworICAgICAgYml0cyA9IHBmc2UtPmJpdHM7CisgICAgICBiYXNl ID0gcGZzZS0+YmFzZTsKKyAgICAgIGlmIChzeW1ib2wgPCBaU1REX0xJVEVSQUxfTEVOR1RIX0JB U0VMSU5FX09GRlNFVCkKKwl7CisJICBwYmFzZWxpbmUtPmJhc2VsaW5lID0gKHVpbnQzMl90KXN5 bWJvbDsKKwkgIHBiYXNlbGluZS0+YmFzZWJpdHMgPSAwOworCX0KKyAgICAgIGVsc2UKKwl7CisJ ICB1bnNpZ25lZCBpbnQgaWR4OworCSAgdWludDMyX3QgYmFzZWJpdHM7CisKKwkgIGlmICh1bmxp a2VseSAoc3ltYm9sID4gMzUpKQorCSAgICB7CisJICAgICAgZWxmX3VuY29tcHJlc3NfZmFpbGVk ICgpOworCSAgICAgIHJldHVybiAwOworCSAgICB9CisJICBpZHggPSBzeW1ib2wgLSBaU1REX0xJ VEVSQUxfTEVOR1RIX0JBU0VMSU5FX09GRlNFVDsKKwkgIGJhc2ViaXRzID0gZWxmX3pzdGRfbGl0 ZXJhbF9sZW5ndGhfYmFzZVtpZHhdOworCSAgcGJhc2VsaW5lLT5iYXNlbGluZSA9IFpTVERfREVD T0RFX0JBU0VMSU5FKGJhc2ViaXRzKTsKKwkgIHBiYXNlbGluZS0+YmFzZWJpdHMgPSBaU1REX0RF Q09ERV9CQVNFQklUUyhiYXNlYml0cyk7CisJfQorICAgICAgcGJhc2VsaW5lLT5iaXRzID0gYml0 czsKKyAgICAgIHBiYXNlbGluZS0+YmFzZSA9IGJhc2U7CisgICAgfQorCisgIHJldHVybiAxOwor fQorCisvKiBDb252ZXJ0IHRoZSBvZmZzZXQgbGVuZ3RoIEZTRSB0YWJsZSBGU0VfVEFCTEUgdG8g YW4gRlNFIGJhc2VsaW5lIHRhYmxlIGF0CisgICBCQVNFTElORV9UQUJMRS4gIE5vdGUgdGhhdCBG U0VfVEFCTEUgYW5kIEJBU0VMSU5FX1RBQkxFIHdpbGwgb3ZlcmxhcC4gICovCisKK3N0YXRpYyBp bnQKK2VsZl96c3RkX21ha2Vfb2Zmc2V0X2Jhc2VsaW5lX2ZzZSAoCisgICAgY29uc3Qgc3RydWN0 IGVsZl96c3RkX2ZzZV9lbnRyeSAqZnNlX3RhYmxlLAorICAgIGludCB0YWJsZV9iaXRzLAorICAg IHN0cnVjdCBlbGZfenN0ZF9mc2VfYmFzZWxpbmVfZW50cnkgKmJhc2VsaW5lX3RhYmxlKQorewor ICBzaXplX3QgY291bnQ7CisgIGNvbnN0IHN0cnVjdCBlbGZfenN0ZF9mc2VfZW50cnkgKnBmc2U7 CisgIHN0cnVjdCBlbGZfenN0ZF9mc2VfYmFzZWxpbmVfZW50cnkgKnBiYXNlbGluZTsKKworICAv KiBDb252ZXJ0IGJhY2t3YXJkIHRvIGF2b2lkIG92ZXJsYXAuICAqLworCisgIGNvdW50ID0gMVUg PDwgdGFibGVfYml0czsKKyAgcGZzZSA9IGZzZV90YWJsZSArIGNvdW50OworICBwYmFzZWxpbmUg PSBiYXNlbGluZV90YWJsZSArIGNvdW50OworICB3aGlsZSAocGZzZSA+IGZzZV90YWJsZSkKKyAg ICB7CisgICAgICB1bnNpZ25lZCBjaGFyIHN5bWJvbDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYml0 czsKKyAgICAgIHVpbnQxNl90IGJhc2U7CisKKyAgICAgIC0tcGZzZTsKKyAgICAgIC0tcGJhc2Vs aW5lOworICAgICAgc3ltYm9sID0gcGZzZS0+c3ltYm9sOworICAgICAgYml0cyA9IHBmc2UtPmJp dHM7CisgICAgICBiYXNlID0gcGZzZS0+YmFzZTsKKyAgICAgIGlmICh1bmxpa2VseSAoc3ltYm9s ID4gMzEpKQorCXsKKwkgIGVsZl91bmNvbXByZXNzX2ZhaWxlZCAoKTsKKwkgIHJldHVybiAwOwor CX0KKworICAgICAgLyogVGhlIHNpbXBsZSB3YXkgdG8gd3JpdGUgdGhpcyBpcworCisJICAgcGJh c2VsaW5lLT5iYXNlbGluZSA9ICh1aW50MzJfdCkxIDw8IHN5bWJvbDsKKwkgICBwYmFzZWxpbmUt PmJhc2ViaXRzID0gc3ltYm9sOworCisJIFRoYXQgd2lsbCBnaXZlIHVzIGFuIG9mZnNldCB2YWx1 ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBvbmUKKwkgZGVzY3JpYmVkIGluIHRoZSBSRkMuICBI b3dldmVyLCBmb3Igb2Zmc2V0IHZhbHVlcyA+IDMsIHdlIGhhdmUgdG8KKwkgc3VidHJhY3QgMy4g IEFuZCBmb3Igb2Zmc2V0IHZhbHVlcyAxLCAyLCAzIHdlIHVzZSBhIHJlcGVhdGVkIG9mZnNldC4K KwkgVGhlIGJhc2VsaW5lIGlzIGFsd2F5cyBhIHBvd2VyIG9mIDIsIGFuZCBpcyBuZXZlciAwLCBz byBmb3IgdGhlc2UgbG93CisJIHZhbHVlcyB3ZSB3aWxsIHNlZSBvbmUgZW50cnkgdGhhdCBpcyBi YXNlbGluZSAxLCBiYXNlYml0cyAwLCBhbmQgb25lCisJIGVudHJ5IHRoYXQgaXMgYmFzZWxpbmUg MiwgYmFzZWJpdHMgMS4gIEFsbCBvdGhlciBlbnRyaWVzIHdpbGwgaGF2ZQorCSBiYXNlbGluZSA+ PSA0IGFuZCBiYXNlYml0cyA+PSAyLgorCisJIFNvIHdlIGNhbiBjaGVjayBmb3IgUkZDIG9mZnNl dCA8PSAzIGJ5IGNoZWNraW5nIGZvciBiYXNlYml0cyA8PSAxLgorCSBBbmQgdGhhdCBtZWFucyB0 aGF0IHdlIGNhbiBzdWJ0cmFjdCAzIGhlcmUgYW5kIG5vdCB3b3JyeSBhYm91dCBkb2luZworCSBp dCBpbiB0aGUgaG90IGxvb3AuICAqLworCisgICAgICBwYmFzZWxpbmUtPmJhc2VsaW5lID0gKHVp bnQzMl90KTEgPDwgc3ltYm9sOworICAgICAgaWYgKHN5bWJvbCA+PSAyKQorCXBiYXNlbGluZS0+ YmFzZWxpbmUgLT0gMzsKKyAgICAgIHBiYXNlbGluZS0+YmFzZWJpdHMgPSBzeW1ib2w7CisgICAg ICBwYmFzZWxpbmUtPmJpdHMgPSBiaXRzOworICAgICAgcGJhc2VsaW5lLT5iYXNlID0gYmFzZTsK KyAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIENvbnZlcnQgdGhlIG1hdGNoIGxlbmd0aCBG U0UgdGFibGUgRlNFX1RBQkxFIHRvIGFuIEZTRSBiYXNlbGluZSB0YWJsZSBhdAorICAgQkFTRUxJ TkVfVEFCTEUuICBOb3RlIHRoYXQgRlNFX1RBQkxFIGFuZCBCQVNFTElORV9UQUJMRSB3aWxsIG92 ZXJsYXAuICAqLworCitzdGF0aWMgaW50CitlbGZfenN0ZF9tYWtlX21hdGNoX2Jhc2VsaW5lX2Zz ZSAoCisgICAgY29uc3Qgc3RydWN0IGVsZl96c3RkX2ZzZV9lbnRyeSAqZnNlX3RhYmxlLAorICAg IGludCB0YWJsZV9iaXRzLAorICAgIHN0cnVjdCBlbGZfenN0ZF9mc2VfYmFzZWxpbmVfZW50cnkg KmJhc2VsaW5lX3RhYmxlKQoreworICBzaXplX3QgY291bnQ7CisgIGNvbnN0IHN0cnVjdCBlbGZf enN0ZF9mc2VfZW50cnkgKnBmc2U7CisgIHN0cnVjdCBlbGZfenN0ZF9mc2VfYmFzZWxpbmVfZW50 cnkgKnBiYXNlbGluZTsKKworICAvKiBDb252ZXJ0IGJhY2t3YXJkIHRvIGF2b2lkIG92ZXJsYXAu ICAqLworCisgIGNvdW50ID0gMVUgPDwgdGFibGVfYml0czsKKyAgcGZzZSA9IGZzZV90YWJsZSAr IGNvdW50OworICBwYmFzZWxpbmUgPSBiYXNlbGluZV90YWJsZSArIGNvdW50OworICB3aGlsZSAo cGZzZSA+IGZzZV90YWJsZSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIHN5bWJvbDsKKyAg ICAgIHVuc2lnbmVkIGNoYXIgYml0czsKKyAgICAgIHVpbnQxNl90IGJhc2U7CisKKyAgICAgIC0t cGZzZTsKKyAgICAgIC0tcGJhc2VsaW5lOworICAgICAgc3ltYm9sID0gcGZzZS0+c3ltYm9sOwor ICAgICAgYml0cyA9IHBmc2UtPmJpdHM7CisgICAgICBiYXNlID0gcGZzZS0+YmFzZTsKKyAgICAg IGlmIChzeW1ib2wgPCBaU1REX01BVENIX0xFTkdUSF9CQVNFTElORV9PRkZTRVQpCisJeworCSAg cGJhc2VsaW5lLT5iYXNlbGluZSA9ICh1aW50MzJfdClzeW1ib2wgKyAzOworCSAgcGJhc2VsaW5l LT5iYXNlYml0cyA9IDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHVuc2lnbmVkIGludCBpZHg7 CisJICB1aW50MzJfdCBiYXNlYml0czsKKworCSAgaWYgKHVubGlrZWx5IChzeW1ib2wgPiA1Mikp CisJICAgIHsKKwkgICAgICBlbGZfdW5jb21wcmVzc19mYWlsZWQgKCk7CisJICAgICAgcmV0dXJu IDA7CisJICAgIH0KKwkgIGlkeCA9IHN5bWJvbCAtIFpTVERfTUFUQ0hfTEVOR1RIX0JBU0VMSU5F X09GRlNFVDsKKwkgIGJhc2ViaXRzID0gZWxmX3pzdGRfbWF0Y2hfbGVuZ3RoX2Jhc2VbaWR4XTsK KwkgIHBiYXNlbGluZS0+YmFzZWxpbmUgPSBaU1REX0RFQ09ERV9CQVNFTElORShiYXNlYml0cyk7 CisJICBwYmFzZWxpbmUtPmJhc2ViaXRzID0gWlNURF9ERUNPREVfQkFTRUJJVFMoYmFzZWJpdHMp OworCX0KKyAgICAgIHBiYXNlbGluZS0+Yml0cyA9IGJpdHM7CisgICAgICBwYmFzZWxpbmUtPmJh c2UgPSBiYXNlOworICAgIH0KKworICByZXR1cm4gMTsKK30KKwogI2lmZGVmIEJBQ0tUUkFDRV9H RU5FUkFURV9aU1REX0ZTRV9UQUJMRVMKIAogLyogVXNlZCB0byBnZW5lcmF0ZSB0aGUgcHJlZGVm aW5lZCBGU0UgZGVjb2RpbmcgdGFibGVzIGZvciB6c3RkLiAgKi8KQEAgLTI5NTcsMTggKzMyMjcs MTkgQEAgc3RhdGljIGludDE2X3Qgb2Zmc2V0WzI5XSA9CiBzdGF0aWMgdWludDE2X3QgbmV4dFsy NTZdOwogCiBzdGF0aWMgdm9pZAotcHJpbnRfdGFibGUgKGNvbnN0IHN0cnVjdCBlbGZfenN0ZF9m c2VfZW50cnkgKnRhYmxlLCBzaXplX3Qgc2l6ZSkKK3ByaW50X3RhYmxlIChjb25zdCBzdHJ1Y3Qg ZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5ICp0YWJsZSwgc2l6ZV90IHNpemUpCiB7CiAgIHNp emVfdCBpOwogCiAgIHByaW50ZiAoIntcbiIpOwotICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSAr PSA0KQorICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAzKQogICAgIHsKICAgICAgIGludCBq OwogCiAgICAgICBwcmludGYgKCIgIik7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgNCAmJiBpICsg aiA8IHNpemU7ICsraikKLQlwcmludGYgKCIgeyAlZCwgJWQsICVkIH0sIiwgdGFibGVbaSArIGpd LnN5bWJvbCwgdGFibGVbaSArIGpdLmJpdHMsCisgICAgICBmb3IgKGogPSAwOyBqIDwgMyAmJiBp ICsgaiA8IHNpemU7ICsraikKKwlwcmludGYgKCIgeyAldSwgJWQsICVkLCAlZCB9LCIsIHRhYmxl W2kgKyBqXS5iYXNlbGluZSwKKwkJdGFibGVbaSArIGpdLmJhc2ViaXRzLCB0YWJsZVtpICsgal0u Yml0cywKIAkJdGFibGVbaSArIGpdLmJhc2UpOwogICAgICAgcHJpbnRmICgiXG4iKTsKICAgICB9 CkBAIC0yOTc5LDggKzMyNTAsMTEgQEAgaW50CiBtYWluICgpCiB7CiAgIHN0cnVjdCBlbGZfenN0 ZF9mc2VfZW50cnkgbGl0X3RhYmxlWzY0XTsKKyAgc3RydWN0IGVsZl96c3RkX2ZzZV9iYXNlbGlu ZV9lbnRyeSBsaXRfYmFzZWxpbmVbNjRdOwogICBzdHJ1Y3QgZWxmX3pzdGRfZnNlX2VudHJ5IG1h dGNoX3RhYmxlWzY0XTsKKyAgc3RydWN0IGVsZl96c3RkX2ZzZV9iYXNlbGluZV9lbnRyeSBtYXRj aF9iYXNlbGluZVs2NF07CiAgIHN0cnVjdCBlbGZfenN0ZF9mc2VfZW50cnkgb2Zmc2V0X3RhYmxl WzMyXTsKKyAgc3RydWN0IGVsZl96c3RkX2ZzZV9iYXNlbGluZV9lbnRyeSBvZmZzZXRfYmFzZWxp bmVbMzJdOwogCiAgIGlmICghZWxmX3pzdGRfYnVpbGRfZnNlIChsaXQsIHNpemVvZiBsaXQgLyBz aXplb2YgbGl0WzBdLCBuZXh0LAogCQkJICAgNiwgbGl0X3RhYmxlKSkKQEAgLTI5ODksOSArMzI2 MywxNiBAQCBtYWluICgpCiAgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOwogICAgIH0KIAotICBw cmludGYgKCJzdGF0aWMgY29uc3Qgc3RydWN0IGVsZl96c3RkX2ZzZV9lbnRyeSAiCisgIGlmICgh ZWxmX3pzdGRfbWFrZV9saXRlcmFsX2Jhc2VsaW5lX2ZzZSAobGl0X3RhYmxlLCA2LCBsaXRfYmFz ZWxpbmUpKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImVsZl96c3RkX21ha2VfbGl0 ZXJhbF9iYXNlbGluZV9mc2UgZmFpbGVkXG4iKTsKKyAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7 CisgICAgfQorCisgIHByaW50ZiAoInN0YXRpYyBjb25zdCBzdHJ1Y3QgZWxmX3pzdGRfZnNlX2Jh c2VsaW5lX2VudHJ5ICIKIAkgICJlbGZfenN0ZF9saXRfdGFibGVbNjRdID1cbiIpOwotICBwcmlu dF90YWJsZSAobGl0X3RhYmxlLCBzaXplb2YgbGl0X3RhYmxlIC8gc2l6ZW9mIGxpdF90YWJsZVsw XSk7CisgIHByaW50X3RhYmxlIChsaXRfYmFzZWxpbmUsCisJICAgICAgIHNpemVvZiBsaXRfYmFz ZWxpbmUgLyBzaXplb2YgbGl0X2Jhc2VsaW5lWzBdKTsKICAgcHJpbnRmICgiXG4iKTsKIAogICBp ZiAoIWVsZl96c3RkX2J1aWxkX2ZzZSAobWF0Y2gsIHNpemVvZiBtYXRjaCAvIHNpemVvZiBtYXRj aFswXSwgbmV4dCwKQEAgLTMwMDEsOSArMzI4MiwxNiBAQCBtYWluICgpCiAgICAgICBleGl0IChF WElUX0ZBSUxVUkUpOwogICAgIH0KIAotICBwcmludGYgKCJzdGF0aWMgY29uc3Qgc3RydWN0IGVs Zl96c3RkX2ZzZV9lbnRyeSAiCisgIGlmICghZWxmX3pzdGRfbWFrZV9tYXRjaF9iYXNlbGluZV9m c2UgKG1hdGNoX3RhYmxlLCA2LCBtYXRjaF9iYXNlbGluZSkpCisgICAgeworICAgICAgZnByaW50 ZiAoc3RkZXJyLCAiZWxmX3pzdGRfbWFrZV9tYXRjaF9iYXNlbGluZV9mc2UgZmFpbGVkXG4iKTsK KyAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgIHByaW50ZiAoInN0YXRpYyBj b25zdCBzdHJ1Y3QgZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5ICIKIAkgICJlbGZfenN0ZF9t YXRjaF90YWJsZVs2NF0gPVxuIik7Ci0gIHByaW50X3RhYmxlIChtYXRjaF90YWJsZSwgc2l6ZW9m IG1hdGNoX3RhYmxlIC8gc2l6ZW9mIG1hdGNoX3RhYmxlWzBdKTsKKyAgcHJpbnRfdGFibGUgKG1h dGNoX2Jhc2VsaW5lLAorCSAgICAgICBzaXplb2YgbWF0Y2hfYmFzZWxpbmUgLyBzaXplb2YgbWF0 Y2hfYmFzZWxpbmVbMF0pOwogICBwcmludGYgKCJcbiIpOwogCiAgIGlmICghZWxmX3pzdGRfYnVp bGRfZnNlIChvZmZzZXQsIHNpemVvZiBvZmZzZXQgLyBzaXplb2Ygb2Zmc2V0WzBdLCBuZXh0LApA QCAtMzAxMyw5ICszMzAxLDE2IEBAIG1haW4gKCkKICAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7 CiAgICAgfQogCi0gIHByaW50ZiAoInN0YXRpYyBjb25zdCBzdHJ1Y3QgZWxmX3pzdGRfZnNlX2Vu dHJ5ICIKKyAgaWYgKCFlbGZfenN0ZF9tYWtlX29mZnNldF9iYXNlbGluZV9mc2UgKG9mZnNldF90 YWJsZSwgNSwgb2Zmc2V0X2Jhc2VsaW5lKSkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIs ICJlbGZfenN0ZF9tYWtlX29mZnNldF9iYXNlbGluZV9mc2UgZmFpbGVkXG4iKTsKKyAgICAgIGV4 aXQgKEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgIHByaW50ZiAoInN0YXRpYyBjb25zdCBzdHJ1 Y3QgZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5ICIKIAkgICJlbGZfenN0ZF9vZmZzZXRfdGFi bGVbMzJdID1cbiIpOwotICBwcmludF90YWJsZSAob2Zmc2V0X3RhYmxlLCBzaXplb2Ygb2Zmc2V0 X3RhYmxlIC8gc2l6ZW9mIG9mZnNldF90YWJsZVswXSk7CisgIHByaW50X3RhYmxlIChvZmZzZXRf YmFzZWxpbmUsCisJICAgICAgIHNpemVvZiBvZmZzZXRfYmFzZWxpbmUgLyBzaXplb2Ygb2Zmc2V0 X2Jhc2VsaW5lWzBdKTsKICAgcHJpbnRmICgiXG4iKTsKIAogICByZXR1cm4gMDsKQEAgLTMwMjYs NTYgKzMzMjEsNzEgQEAgbWFpbiAoKQogLyogVGhlIGZpeGVkIHRhYmxlcyBnZW5lcmF0ZWQgYnkg dGhlICNpZmRlZidlZCBvdXQgbWFpbiBmdW5jdGlvbgogICAgYWJvdmUuICAqLwogCi1zdGF0aWMg Y29uc3Qgc3RydWN0IGVsZl96c3RkX2ZzZV9lbnRyeSBlbGZfenN0ZF9saXRfdGFibGVbNjRdID0K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5IGVsZl96c3Rk X2xpdF90YWJsZVs2NF0gPQogewotICB7IDAsIDQsIDAgfSwgeyAwLCA0LCAxNiB9LCB7IDEsIDUs IDMyIH0sIHsgMywgNSwgMCB9LAotICB7IDQsIDUsIDAgfSwgeyA2LCA1LCAwIH0sIHsgNywgNSwg MCB9LCB7IDksIDUsIDAgfSwKLSAgeyAxMCwgNSwgMCB9LCB7IDEyLCA1LCAwIH0sIHsgMTQsIDYs IDAgfSwgeyAxNiwgNSwgMCB9LAotICB7IDE4LCA1LCAwIH0sIHsgMTksIDUsIDAgfSwgeyAyMSwg NSwgMCB9LCB7IDIyLCA1LCAwIH0sCi0gIHsgMjQsIDUsIDAgfSwgeyAyNSwgNSwgMzIgfSwgeyAy NiwgNSwgMCB9LCB7IDI3LCA2LCAwIH0sCi0gIHsgMjksIDYsIDAgfSwgeyAzMSwgNiwgMCB9LCB7 IDAsIDQsIDMyIH0sIHsgMSwgNCwgMCB9LAotICB7IDIsIDUsIDAgfSwgeyA0LCA1LCAzMiB9LCB7 IDUsIDUsIDAgfSwgeyA3LCA1LCAzMiB9LAotICB7IDgsIDUsIDAgfSwgeyAxMCwgNSwgMzIgfSwg eyAxMSwgNSwgMCB9LCB7IDEzLCA2LCAwIH0sCi0gIHsgMTYsIDUsIDMyIH0sIHsgMTcsIDUsIDAg fSwgeyAxOSwgNSwgMzIgfSwgeyAyMCwgNSwgMCB9LAotICB7IDIyLCA1LCAzMiB9LCB7IDIzLCA1 LCAwIH0sIHsgMjUsIDQsIDAgfSwgeyAyNSwgNCwgMTYgfSwKLSAgeyAyNiwgNSwgMzIgfSwgeyAy OCwgNiwgMCB9LCB7IDMwLCA2LCAwIH0sIHsgMCwgNCwgNDggfSwKLSAgeyAxLCA0LCAxNiB9LCB7 IDIsIDUsIDMyIH0sIHsgMywgNSwgMzIgfSwgeyA1LCA1LCAzMiB9LAotICB7IDYsIDUsIDMyIH0s IHsgOCwgNSwgMzIgfSwgeyA5LCA1LCAzMiB9LCB7IDExLCA1LCAzMiB9LAotICB7IDEyLCA1LCAz MiB9LCB7IDE1LCA2LCAwIH0sIHsgMTcsIDUsIDMyIH0sIHsgMTgsIDUsIDMyIH0sCi0gIHsgMjAs IDUsIDMyIH0sIHsgMjEsIDUsIDMyIH0sIHsgMjMsIDUsIDMyIH0sIHsgMjQsIDUsIDMyIH0sCi0g IHsgMzUsIDYsIDAgfSwgeyAzNCwgNiwgMCB9LCB7IDMzLCA2LCAwIH0sIHsgMzIsIDYsIDAgfSwK KyAgeyAwLCAwLCA0LCAwIH0sIHsgMCwgMCwgNCwgMTYgfSwgeyAxLCAwLCA1LCAzMiB9LAorICB7 IDMsIDAsIDUsIDAgfSwgeyA0LCAwLCA1LCAwIH0sIHsgNiwgMCwgNSwgMCB9LAorICB7IDcsIDAs IDUsIDAgfSwgeyA5LCAwLCA1LCAwIH0sIHsgMTAsIDAsIDUsIDAgfSwKKyAgeyAxMiwgMCwgNSwg MCB9LCB7IDE0LCAwLCA2LCAwIH0sIHsgMTYsIDEsIDUsIDAgfSwKKyAgeyAyMCwgMSwgNSwgMCB9 LCB7IDIyLCAxLCA1LCAwIH0sIHsgMjgsIDIsIDUsIDAgfSwKKyAgeyAzMiwgMywgNSwgMCB9LCB7 IDQ4LCA0LCA1LCAwIH0sIHsgNjQsIDYsIDUsIDMyIH0sCisgIHsgMTI4LCA3LCA1LCAwIH0sIHsg MjU2LCA4LCA2LCAwIH0sIHsgMTAyNCwgMTAsIDYsIDAgfSwKKyAgeyA0MDk2LCAxMiwgNiwgMCB9 LCB7IDAsIDAsIDQsIDMyIH0sIHsgMSwgMCwgNCwgMCB9LAorICB7IDIsIDAsIDUsIDAgfSwgeyA0 LCAwLCA1LCAzMiB9LCB7IDUsIDAsIDUsIDAgfSwKKyAgeyA3LCAwLCA1LCAzMiB9LCB7IDgsIDAs IDUsIDAgfSwgeyAxMCwgMCwgNSwgMzIgfSwKKyAgeyAxMSwgMCwgNSwgMCB9LCB7IDEzLCAwLCA2 LCAwIH0sIHsgMTYsIDEsIDUsIDMyIH0sCisgIHsgMTgsIDEsIDUsIDAgfSwgeyAyMiwgMSwgNSwg MzIgfSwgeyAyNCwgMiwgNSwgMCB9LAorICB7IDMyLCAzLCA1LCAzMiB9LCB7IDQwLCAzLCA1LCAw IH0sIHsgNjQsIDYsIDQsIDAgfSwKKyAgeyA2NCwgNiwgNCwgMTYgfSwgeyAxMjgsIDcsIDUsIDMy IH0sIHsgNTEyLCA5LCA2LCAwIH0sCisgIHsgMjA0OCwgMTEsIDYsIDAgfSwgeyAwLCAwLCA0LCA0 OCB9LCB7IDEsIDAsIDQsIDE2IH0sCisgIHsgMiwgMCwgNSwgMzIgfSwgeyAzLCAwLCA1LCAzMiB9 LCB7IDUsIDAsIDUsIDMyIH0sCisgIHsgNiwgMCwgNSwgMzIgfSwgeyA4LCAwLCA1LCAzMiB9LCB7 IDksIDAsIDUsIDMyIH0sCisgIHsgMTEsIDAsIDUsIDMyIH0sIHsgMTIsIDAsIDUsIDMyIH0sIHsg MTUsIDAsIDYsIDAgfSwKKyAgeyAxOCwgMSwgNSwgMzIgfSwgeyAyMCwgMSwgNSwgMzIgfSwgeyAy NCwgMiwgNSwgMzIgfSwKKyAgeyAyOCwgMiwgNSwgMzIgfSwgeyA0MCwgMywgNSwgMzIgfSwgeyA0 OCwgNCwgNSwgMzIgfSwKKyAgeyA2NTUzNiwgMTYsIDYsIDAgfSwgeyAzMjc2OCwgMTUsIDYsIDAg fSwgeyAxNjM4NCwgMTQsIDYsIDAgfSwKKyAgeyA4MTkyLCAxMywgNiwgMCB9LAogfTsKIAotc3Rh dGljIGNvbnN0IHN0cnVjdCBlbGZfenN0ZF9mc2VfZW50cnkgZWxmX3pzdGRfbWF0Y2hfdGFibGVb NjRdID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5IGVs Zl96c3RkX21hdGNoX3RhYmxlWzY0XSA9CiB7Ci0gIHsgMCwgNiwgMCB9LCB7IDEsIDQsIDAgfSwg eyAyLCA1LCAzMiB9LCB7IDMsIDUsIDAgfSwKLSAgeyA1LCA1LCAwIH0sIHsgNiwgNSwgMCB9LCB7 IDgsIDUsIDAgfSwgeyAxMCwgNiwgMCB9LAotICB7IDEzLCA2LCAwIH0sIHsgMTYsIDYsIDAgfSwg eyAxOSwgNiwgMCB9LCB7IDIyLCA2LCAwIH0sCi0gIHsgMjUsIDYsIDAgfSwgeyAyOCwgNiwgMCB9 LCB7IDMxLCA2LCAwIH0sIHsgMzMsIDYsIDAgfSwKLSAgeyAzNSwgNiwgMCB9LCB7IDM3LCA2LCAw IH0sIHsgMzksIDYsIDAgfSwgeyA0MSwgNiwgMCB9LAotICB7IDQzLCA2LCAwIH0sIHsgNDUsIDYs IDAgfSwgeyAxLCA0LCAxNiB9LCB7IDIsIDQsIDAgfSwKLSAgeyAzLCA1LCAzMiB9LCB7IDQsIDUs IDAgfSwgeyA2LCA1LCAzMiB9LCB7IDcsIDUsIDAgfSwKLSAgeyA5LCA2LCAwIH0sIHsgMTIsIDYs IDAgfSwgeyAxNSwgNiwgMCB9LCB7IDE4LCA2LCAwIH0sCi0gIHsgMjEsIDYsIDAgfSwgeyAyNCwg NiwgMCB9LCB7IDI3LCA2LCAwIH0sIHsgMzAsIDYsIDAgfSwKLSAgeyAzMiwgNiwgMCB9LCB7IDM0 LCA2LCAwIH0sIHsgMzYsIDYsIDAgfSwgeyAzOCwgNiwgMCB9LAotICB7IDQwLCA2LCAwIH0sIHsg NDIsIDYsIDAgfSwgeyA0NCwgNiwgMCB9LCB7IDEsIDQsIDMyIH0sCi0gIHsgMSwgNCwgNDggfSwg eyAyLCA0LCAxNiB9LCB7IDQsIDUsIDMyIH0sIHsgNSwgNSwgMzIgfSwKLSAgeyA3LCA1LCAzMiB9 LCB7IDgsIDUsIDMyIH0sIHsgMTEsIDYsIDAgfSwgeyAxNCwgNiwgMCB9LAotICB7IDE3LCA2LCAw IH0sIHsgMjAsIDYsIDAgfSwgeyAyMywgNiwgMCB9LCB7IDI2LCA2LCAwIH0sCi0gIHsgMjksIDYs IDAgfSwgeyA1MiwgNiwgMCB9LCB7IDUxLCA2LCAwIH0sIHsgNTAsIDYsIDAgfSwKLSAgeyA0OSwg NiwgMCB9LCB7IDQ4LCA2LCAwIH0sIHsgNDcsIDYsIDAgfSwgeyA0NiwgNiwgMCB9LAorICB7IDMs IDAsIDYsIDAgfSwgeyA0LCAwLCA0LCAwIH0sIHsgNSwgMCwgNSwgMzIgfSwKKyAgeyA2LCAwLCA1 LCAwIH0sIHsgOCwgMCwgNSwgMCB9LCB7IDksIDAsIDUsIDAgfSwKKyAgeyAxMSwgMCwgNSwgMCB9 LCB7IDEzLCAwLCA2LCAwIH0sIHsgMTYsIDAsIDYsIDAgfSwKKyAgeyAxOSwgMCwgNiwgMCB9LCB7 IDIyLCAwLCA2LCAwIH0sIHsgMjUsIDAsIDYsIDAgfSwKKyAgeyAyOCwgMCwgNiwgMCB9LCB7IDMx LCAwLCA2LCAwIH0sIHsgMzQsIDAsIDYsIDAgfSwKKyAgeyAzNywgMSwgNiwgMCB9LCB7IDQxLCAx LCA2LCAwIH0sIHsgNDcsIDIsIDYsIDAgfSwKKyAgeyA1OSwgMywgNiwgMCB9LCB7IDgzLCA0LCA2 LCAwIH0sIHsgMTMxLCA3LCA2LCAwIH0sCisgIHsgNTE1LCA5LCA2LCAwIH0sIHsgNCwgMCwgNCwg MTYgfSwgeyA1LCAwLCA0LCAwIH0sCisgIHsgNiwgMCwgNSwgMzIgfSwgeyA3LCAwLCA1LCAwIH0s IHsgOSwgMCwgNSwgMzIgfSwKKyAgeyAxMCwgMCwgNSwgMCB9LCB7IDEyLCAwLCA2LCAwIH0sIHsg MTUsIDAsIDYsIDAgfSwKKyAgeyAxOCwgMCwgNiwgMCB9LCB7IDIxLCAwLCA2LCAwIH0sIHsgMjQs IDAsIDYsIDAgfSwKKyAgeyAyNywgMCwgNiwgMCB9LCB7IDMwLCAwLCA2LCAwIH0sIHsgMzMsIDAs IDYsIDAgfSwKKyAgeyAzNSwgMSwgNiwgMCB9LCB7IDM5LCAxLCA2LCAwIH0sIHsgNDMsIDIsIDYs IDAgfSwKKyAgeyA1MSwgMywgNiwgMCB9LCB7IDY3LCA0LCA2LCAwIH0sIHsgOTksIDUsIDYsIDAg fSwKKyAgeyAyNTksIDgsIDYsIDAgfSwgeyA0LCAwLCA0LCAzMiB9LCB7IDQsIDAsIDQsIDQ4IH0s CisgIHsgNSwgMCwgNCwgMTYgfSwgeyA3LCAwLCA1LCAzMiB9LCB7IDgsIDAsIDUsIDMyIH0sCisg IHsgMTAsIDAsIDUsIDMyIH0sIHsgMTEsIDAsIDUsIDMyIH0sIHsgMTQsIDAsIDYsIDAgfSwKKyAg eyAxNywgMCwgNiwgMCB9LCB7IDIwLCAwLCA2LCAwIH0sIHsgMjMsIDAsIDYsIDAgfSwKKyAgeyAy NiwgMCwgNiwgMCB9LCB7IDI5LCAwLCA2LCAwIH0sIHsgMzIsIDAsIDYsIDAgfSwKKyAgeyA2NTUz OSwgMTYsIDYsIDAgfSwgeyAzMjc3MSwgMTUsIDYsIDAgfSwgeyAxNjM4NywgMTQsIDYsIDAgfSwK KyAgeyA4MTk1LCAxMywgNiwgMCB9LCB7IDQwOTksIDEyLCA2LCAwIH0sIHsgMjA1MSwgMTEsIDYs IDAgfSwKKyAgeyAxMDI3LCAxMCwgNiwgMCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBl bGZfenN0ZF9mc2VfZW50cnkgZWxmX3pzdGRfb2Zmc2V0X3RhYmxlWzMyXSA9CitzdGF0aWMgY29u c3Qgc3RydWN0IGVsZl96c3RkX2ZzZV9iYXNlbGluZV9lbnRyeSBlbGZfenN0ZF9vZmZzZXRfdGFi bGVbMzJdID0KIHsKLSAgeyAwLCA1LCAwIH0sIHsgNiwgNCwgMCB9LCB7IDksIDUsIDAgfSwgeyAx NSwgNSwgMCB9LAotICB7IDIxLCA1LCAwIH0sIHsgMywgNSwgMCB9LCB7IDcsIDQsIDAgfSwgeyAx MiwgNSwgMCB9LAotICB7IDE4LCA1LCAwIH0sIHsgMjMsIDUsIDAgfSwgeyA1LCA1LCAwIH0sIHsg OCwgNCwgMCB9LAotICB7IDE0LCA1LCAwIH0sIHsgMjAsIDUsIDAgfSwgeyAyLCA1LCAwIH0sIHsg NywgNCwgMTYgfSwKLSAgeyAxMSwgNSwgMCB9LCB7IDE3LCA1LCAwIH0sIHsgMjIsIDUsIDAgfSwg eyA0LCA1LCAwIH0sCi0gIHsgOCwgNCwgMTYgfSwgeyAxMywgNSwgMCB9LCB7IDE5LCA1LCAwIH0s IHsgMSwgNSwgMCB9LAotICB7IDYsIDQsIDE2IH0sIHsgMTAsIDUsIDAgfSwgeyAxNiwgNSwgMCB9 LCB7IDI4LCA1LCAwIH0sCi0gIHsgMjcsIDUsIDAgfSwgeyAyNiwgNSwgMCB9LCB7IDI1LCA1LCAw IH0sIHsgMjQsIDUsIDAgfSwKKyAgeyAxLCAwLCA1LCAwIH0sIHsgNjQsIDYsIDQsIDAgfSwgeyA1 MTIsIDksIDUsIDAgfSwKKyAgeyAzMjc2OCwgMTUsIDUsIDAgfSwgeyAyMDk3MTUyLCAyMSwgNSwg MCB9LCB7IDgsIDMsIDUsIDAgfSwKKyAgeyAxMjgsIDcsIDQsIDAgfSwgeyA0MDk2LCAxMiwgNSwg MCB9LCB7IDI2MjE0NCwgMTgsIDUsIDAgfSwKKyAgeyA4Mzg4NjA4LCAyMywgNSwgMCB9LCB7IDMy LCA1LCA1LCAwIH0sIHsgMjU2LCA4LCA0LCAwIH0sCisgIHsgMTYzODQsIDE0LCA1LCAwIH0sIHsg MTA0ODU3NiwgMjAsIDUsIDAgfSwgeyA0LCAyLCA1LCAwIH0sCisgIHsgMTI4LCA3LCA0LCAxNiB9 LCB7IDIwNDgsIDExLCA1LCAwIH0sIHsgMTMxMDcyLCAxNywgNSwgMCB9LAorICB7IDQxOTQzMDQs IDIyLCA1LCAwIH0sIHsgMTYsIDQsIDUsIDAgfSwgeyAyNTYsIDgsIDQsIDE2IH0sCisgIHsgODE5 MiwgMTMsIDUsIDAgfSwgeyA1MjQyODgsIDE5LCA1LCAwIH0sIHsgMiwgMSwgNSwgMCB9LAorICB7 IDY0LCA2LCA0LCAxNiB9LCB7IDEwMjQsIDEwLCA1LCAwIH0sIHsgNjU1MzYsIDE2LCA1LCAwIH0s CisgIHsgMjY4NDM1NDU2LCAyOCwgNSwgMCB9LCB7IDEzNDIxNzcyOCwgMjcsIDUsIDAgfSwgeyA2 NzEwODg2NCwgMjYsIDUsIDAgfSwKKyAgeyAzMzU1NDQzMiwgMjUsIDUsIDAgfSwgeyAxNjc3NzIx NiwgMjQsIDUsIDAgfSwKIH07CiAKIC8qIFJlYWQgYSB6c3RkIEh1ZmZtYW4gdGFibGUgYW5kIGJ1 aWxkIHRoZSBkZWNvZGluZyB0YWJsZSBpbiAqVEFCTEUsIHJlYWRpbmcKQEAgLTMzOTcsMTAgKzM3 MDcsOCBAQCBlbGZfenN0ZF9yZWFkX2h1ZmYgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcGluLCBj b25zdCB1bnNpZ25lZCBjaGFyICpwaW5lbmQsCiAKIHN0cnVjdCBlbGZfenN0ZF9zZXFfZGVjb2Rl CiB7Ci0gIGNvbnN0IHN0cnVjdCBlbGZfenN0ZF9mc2VfZW50cnkgKnRhYmxlOworICBjb25zdCBz dHJ1Y3QgZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5ICp0YWJsZTsKICAgaW50IHRhYmxlX2Jp dHM7Ci0gIGludCB1c2VfcmxlOwotICB1bnNpZ25lZCBjaGFyIHJsZTsKIH07CiAKIC8qIFVucGFj ayBhIHNlcXVlbmNlIGNvZGUgY29tcHJlc3Npb24gbW9kZS4gICovCkBAIC0zNDA5LDQzICszNzE3 LDYyIEBAIHN0YXRpYyBpbnQKIGVsZl96c3RkX3VucGFja19zZXFfZGVjb2RlIChpbnQgbW9kZSwK IAkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqcHBpbiwKIAkJCSAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICpwaW5lbmQsCi0JCQkgICAgY29uc3Qgc3RydWN0IGVsZl96c3RkX2ZzZV9lbnRyeSAq cHJlZGVmaW5lZCwKLQkJCSAgICBpbnQgcHJlZGVmaW5lZF9iaXRzLCB1aW50MTZfdCAqc2NyYXRj aCwKLQkJCSAgICBpbnQgbWF4aWR4LCBzdHJ1Y3QgZWxmX3pzdGRfZnNlX2VudHJ5ICpmc2VfdGFi bGUsCi0JCQkgICAgaW50IGZzZV90YWJsZV9iaXRzLAorCQkJICAgIGNvbnN0IHN0cnVjdCBlbGZf enN0ZF9mc2VfYmFzZWxpbmVfZW50cnkgKnByZWRlZiwKKwkJCSAgICBpbnQgcHJlZGVmX2JpdHMs CisJCQkgICAgdWludDE2X3QgKnNjcmF0Y2gsCisJCQkgICAgaW50IG1heGlkeCwKKwkJCSAgICBz dHJ1Y3QgZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5ICp0YWJsZSwKKwkJCSAgICBpbnQgdGFi bGVfYml0cywKKwkJCSAgICBpbnQgKCpjb252KShjb25zdCBzdHJ1Y3QgZWxmX3pzdGRfZnNlX2Vu dHJ5ICosCisJCQkJCWludCwKKwkJCQkJc3RydWN0IGVsZl96c3RkX2ZzZV9iYXNlbGluZV9lbnRy eSAqKSwKIAkJCSAgICBzdHJ1Y3QgZWxmX3pzdGRfc2VxX2RlY29kZSAqZGVjb2RlKQogewogICBz d2l0Y2ggKG1vZGUpCiAgICAgewogICAgIGNhc2UgMDoKLSAgICAgIGRlY29kZS0+dGFibGUgPSBw cmVkZWZpbmVkOwotICAgICAgZGVjb2RlLT50YWJsZV9iaXRzID0gcHJlZGVmaW5lZF9iaXRzOwot ICAgICAgZGVjb2RlLT51c2VfcmxlID0gMDsKKyAgICAgIGRlY29kZS0+dGFibGUgPSBwcmVkZWY7 CisgICAgICBkZWNvZGUtPnRhYmxlX2JpdHMgPSBwcmVkZWZfYml0czsKICAgICAgIGJyZWFrOwog CiAgICAgY2FzZSAxOgotICAgICAgaWYgKHVubGlrZWx5ICgqcHBpbiA+PSBwaW5lbmQpKQotCXsK LQkgIGVsZl91bmNvbXByZXNzX2ZhaWxlZCAoKTsKKyAgICAgIHsKKwlzdHJ1Y3QgZWxmX3pzdGRf ZnNlX2VudHJ5IGVudHJ5OworCisJaWYgKHVubGlrZWx5ICgqcHBpbiA+PSBwaW5lbmQpKQorCSAg eworCSAgICBlbGZfdW5jb21wcmVzc19mYWlsZWQgKCk7CisJICAgIHJldHVybiAwOworCSAgfQor CWVudHJ5LnN5bWJvbCA9ICoqcHBpbjsKKwkrKypwcGluOworCWVudHJ5LmJpdHMgPSAwOworCWVu dHJ5LmJhc2UgPSAwOworCWRlY29kZS0+dGFibGVfYml0cyA9IDA7CisJaWYgKCFjb252ICgmZW50 cnksIDAsIHRhYmxlKSkKIAkgIHJldHVybiAwOwotCX0KLSAgICAgIGRlY29kZS0+dXNlX3JsZSA9 IDE7Ci0gICAgICBkZWNvZGUtPnJsZSA9ICoqcHBpbjsKLSAgICAgIGRlY29kZS0+dGFibGVfYml0 cyA9IDA7Ci0gICAgICArKypwcGluOworICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICBjYXNl IDI6Ci0gICAgICBkZWNvZGUtPnRhYmxlX2JpdHMgPSBmc2VfdGFibGVfYml0czsKLSAgICAgIGlm ICghZWxmX3pzdGRfcmVhZF9mc2UgKHBwaW4sIHBpbmVuZCwgc2NyYXRjaCwgbWF4aWR4LCBmc2Vf dGFibGUsCi0JCQkgICAgICAmZGVjb2RlLT50YWJsZV9iaXRzKSkKLQlyZXR1cm4gMDsKLSAgICAg IGRlY29kZS0+dGFibGUgPSBmc2VfdGFibGU7Ci0gICAgICBkZWNvZGUtPnVzZV9ybGUgPSAwOwor ICAgICAgeworCXN0cnVjdCBlbGZfenN0ZF9mc2VfZW50cnkgKmZzZV90YWJsZTsKKworCS8qIFdl IHVzZSB0aGUgc2FtZSBzcGFjZSBmb3IgdGhlIHNpbXBsZSBGU0UgdGFibGUgYW5kIHRoZSBiYXNl bGluZQorCSAgIHRhYmxlLiAgKi8KKwlmc2VfdGFibGUgPSAoc3RydWN0IGVsZl96c3RkX2ZzZV9l bnRyeSAqKXRhYmxlOworCWRlY29kZS0+dGFibGVfYml0cyA9IHRhYmxlX2JpdHM7CisJaWYgKCFl bGZfenN0ZF9yZWFkX2ZzZSAocHBpbiwgcGluZW5kLCBzY3JhdGNoLCBtYXhpZHgsIGZzZV90YWJs ZSwKKwkJCQkmZGVjb2RlLT50YWJsZV9iaXRzKSkKKwkgIHJldHVybiAwOworCWlmICghY29udiAo ZnNlX3RhYmxlLCBkZWNvZGUtPnRhYmxlX2JpdHMsIHRhYmxlKSkKKwkgIHJldHVybiAwOworCWRl Y29kZS0+dGFibGUgPSB0YWJsZTsKKyAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAz OgotICAgICAgaWYgKHVubGlrZWx5IChkZWNvZGUtPnRhYmxlX2JpdHMgPT0gMCAmJiAhZGVjb2Rl LT51c2VfcmxlKSkKKyAgICAgIGlmICh1bmxpa2VseSAoZGVjb2RlLT50YWJsZV9iaXRzID09IC0x KSkKIAl7CiAJICBlbGZfdW5jb21wcmVzc19mYWlsZWQgKCk7CiAJICByZXR1cm4gMDsKQEAgLTM3 MDMsMzkgKzQwMzAsNiBAQCBlbGZfenN0ZF9saXRlcmFsX291dHB1dCAoc3RydWN0IGVsZl96c3Rk X2xpdGVyYWxzICpsaXRlcmFscywKICAgcmV0dXJuIDE7CiB9CiAKLS8qIEdpdmVuIGEgbGl0ZXJh bCBsZW5ndGggY29kZSwgd2UgbmVlZCB0byByZWFkIGEgbnVtYmVyIG9mIGJpdHMgYW5kIGFkZCB0 aGF0Ci0gICB0byBhIGJhc2VsaW5lLiAgRm9yIHN0YXRlcyAwIHRvIDE1IHRoZSBiYXNlbGluZSBp cyB0aGUgc3RhdGUgYW5kIHRoZSBudW1iZXIKLSAgIG9mIGJpdHMgaXMgemVyby4gICovCi0KLSNk ZWZpbmUgWlNURF9MSVRFUkFMX0xFTkdUSF9CQVNFTElORV9PRkZTRVQgKDE2KQotCi1zdGF0aWMg Y29uc3QgdWludDMyX3QgZWxmX3pzdGRfbGl0ZXJhbF9sZW5ndGhfYmFzZWxpbmVbXSA9Ci17Ci0g IDE2LCAxOCwgMjAsIDIyLCAyNCwgMjgsIDMyLCA0MCwgNDgsIDY0LCAxMjgsIDI1NiwgNTEyLAot ICAxMDI0LCAyMDQ4LCA0MDk2LCA4MTkyLCAxNjM4NCwgMzI3NjgsIDY1NTM2Ci19OwotCi1zdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBlbGZfenN0ZF9saXRlcmFsX2xlbmd0aF9iaXRzW10gPQot ewotICAxLCAxLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAx MywgMTQsIDE1LCAxNgotfTsKLQotLyogVGhlIHNhbWUgYXBwbGllcyB0byBtYXRjaCBsZW5ndGgg Y29kZXMuICBGb3Igc3RhdGVzIDAgdG8gMzEgdGhlIGJhc2VsaW5lIGlzCi0gICB0aGUgc3RhdGUg KyAzIGFuZCB0aGUgbnVtYmVyIG9mIGJpdHMgaXMgemVyby4gICovCi0KLSNkZWZpbmUgWlNURF9N QVRDSF9MRU5HVEhfQkFTRUxJTkVfT0ZGU0VUICgzMikKLQotc3RhdGljIGNvbnN0IHVpbnQzMl90 IGVsZl96c3RkX21hdGNoX2xlbmd0aF9iYXNlbGluZVtdID0KLXsKLSAgMzUsIDM3LCAzOSwgNDEs IDQzLCA0NywgNTEsIDU5LCA2NywgODMsIDk5LCAxMzEsIDI1OSwgNTE1LAotICAxMDI3LCAyMDUx LCA0MDk5LCA4MTk1LCAxNjM4NywgMzI3NzEsIDY1NTM5Ci19OwotCi1zdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBlbGZfenN0ZF9tYXRjaF9sZW5ndGhfYml0c1tdID0KLXsKLSAgMSwgMSwgMSwg MSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwg MTYKLX07Ci0KIC8qIERlY29tcHJlc3MgYSB6c3RkIHN0cmVhbSBmcm9tIFBJTi9TSU4gdG8gUE9V VC9TT1VULiAgQ29kZSBiYXNlZCBvbiBSRkMgODg3OC4KICAgIFJldHVybiAxIG9uIHN1Y2Nlc3Ms IDAgb24gZXJyb3IuICAqLwogCkBAIC0zNzQ4LDExICs0MDQyLDExIEBAIGVsZl96c3RkX2RlY29t cHJlc3MgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBpbiwgc2l6ZV90IHNpbiwKICAgdW5zaWduZWQg Y2hhciAqcG91dHN0YXJ0OwogICB1bnNpZ25lZCBjaGFyICpwb3V0ZW5kOwogICBzdHJ1Y3QgZWxm X3pzdGRfc2VxX2RlY29kZSBsaXRlcmFsX2RlY29kZTsKLSAgc3RydWN0IGVsZl96c3RkX2ZzZV9l bnRyeSAqbGl0ZXJhbF9mc2VfdGFibGU7CisgIHN0cnVjdCBlbGZfenN0ZF9mc2VfYmFzZWxpbmVf ZW50cnkgKmxpdGVyYWxfZnNlX3RhYmxlOwogICBzdHJ1Y3QgZWxmX3pzdGRfc2VxX2RlY29kZSBt YXRjaF9kZWNvZGU7Ci0gIHN0cnVjdCBlbGZfenN0ZF9mc2VfZW50cnkgKm1hdGNoX2ZzZV90YWJs ZTsKKyAgc3RydWN0IGVsZl96c3RkX2ZzZV9iYXNlbGluZV9lbnRyeSAqbWF0Y2hfZnNlX3RhYmxl OwogICBzdHJ1Y3QgZWxmX3pzdGRfc2VxX2RlY29kZSBvZmZzZXRfZGVjb2RlOwotICBzdHJ1Y3Qg ZWxmX3pzdGRfZnNlX2VudHJ5ICpvZmZzZXRfZnNlX3RhYmxlOworICBzdHJ1Y3QgZWxmX3pzdGRf ZnNlX2Jhc2VsaW5lX2VudHJ5ICpvZmZzZXRfZnNlX3RhYmxlOwogICB1aW50MTZfdCAqaHVmZm1h bl90YWJsZTsKICAgaW50IGh1ZmZtYW5fdGFibGVfYml0czsKICAgdWludDMyX3QgcmVwZWF0ZWRf b2Zmc2V0MTsKQEAgLTM3NjksMjEgKzQwNjMsMTggQEAgZWxmX3pzdGRfZGVjb21wcmVzcyAoY29u c3QgdW5zaWduZWQgY2hhciAqcGluLCBzaXplX3Qgc2luLAogICBwb3V0ZW5kID0gcG91dCArIHNv dXQ7CiAKICAgbGl0ZXJhbF9kZWNvZGUudGFibGUgPSBOVUxMOwotICBsaXRlcmFsX2RlY29kZS50 YWJsZV9iaXRzID0gMDsKLSAgbGl0ZXJhbF9kZWNvZGUudXNlX3JsZSA9IDA7Ci0gIGxpdGVyYWxf ZnNlX3RhYmxlID0gKChzdHJ1Y3QgZWxmX3pzdGRfZnNlX2VudHJ5ICopCisgIGxpdGVyYWxfZGVj b2RlLnRhYmxlX2JpdHMgPSAtMTsKKyAgbGl0ZXJhbF9mc2VfdGFibGUgPSAoKHN0cnVjdCBlbGZf enN0ZF9mc2VfYmFzZWxpbmVfZW50cnkgKikKIAkJICAgICAgICh6ZGVidWdfdGFibGUgKyBaU1RE X1RBQkxFX0xJVEVSQUxfRlNFX09GRlNFVCkpOwogCiAgIG1hdGNoX2RlY29kZS50YWJsZSA9IE5V TEw7Ci0gIG1hdGNoX2RlY29kZS50YWJsZV9iaXRzID0gMDsKLSAgbWF0Y2hfZGVjb2RlLnVzZV9y bGUgPSAwOwotICBtYXRjaF9mc2VfdGFibGUgPSAoKHN0cnVjdCBlbGZfenN0ZF9mc2VfZW50cnkg KikKKyAgbWF0Y2hfZGVjb2RlLnRhYmxlX2JpdHMgPSAtMTsKKyAgbWF0Y2hfZnNlX3RhYmxlID0g KChzdHJ1Y3QgZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5ICopCiAJCSAgICAgKHpkZWJ1Z190 YWJsZSArIFpTVERfVEFCTEVfTUFUQ0hfRlNFX09GRlNFVCkpOwogCiAgIG9mZnNldF9kZWNvZGUu dGFibGUgPSBOVUxMOwotICBvZmZzZXRfZGVjb2RlLnRhYmxlX2JpdHMgPSAwOwotICBvZmZzZXRf ZGVjb2RlLnVzZV9ybGUgPSAwOwotICBvZmZzZXRfZnNlX3RhYmxlID0gKChzdHJ1Y3QgZWxmX3pz dGRfZnNlX2VudHJ5ICopCisgIG9mZnNldF9kZWNvZGUudGFibGVfYml0cyA9IC0xOworICBvZmZz ZXRfZnNlX3RhYmxlID0gKChzdHJ1Y3QgZWxmX3pzdGRfZnNlX2Jhc2VsaW5lX2VudHJ5ICopCiAJ CSAgICAgICh6ZGVidWdfdGFibGUgKyBaU1REX1RBQkxFX09GRlNFVF9GU0VfT0ZGU0VUKSk7CiAg IGh1ZmZtYW5fdGFibGUgPSAoKHVpbnQxNl90ICopCiAJCSAgICh6ZGVidWdfdGFibGUgKyBaU1RE X1RBQkxFX0hVRkZNQU5fT0ZGU0VUKSk7CkBAIC00MjU5LDYgKzQ1NTAsOSBAQCBlbGZfenN0ZF9k ZWNvbXByZXNzIChjb25zdCB1bnNpZ25lZCBjaGFyICpwaW4sIHNpemVfdCBzaW4sCiAKIAkgICAg aWYgKHNlcV9jb3VudCA+IDApCiAJICAgICAgeworCQlpbnQgKCpwZm4pKGNvbnN0IHN0cnVjdCBl bGZfenN0ZF9mc2VfZW50cnkgKiwKKwkJCSAgIGludCwgc3RydWN0IGVsZl96c3RkX2ZzZV9iYXNl bGluZV9lbnRyeSAqKTsKKwogCQlpZiAodW5saWtlbHkgKHBpbiA+PSBwaW5lbmQpKQogCQkgIHsK IAkJICAgIGVsZl91bmNvbXByZXNzX2ZhaWxlZCAoKTsKQEAgLTQyNjcsMjcgKzQ1NjEsMzAgQEAg ZWxmX3pzdGRfZGVjb21wcmVzcyAoY29uc3QgdW5zaWduZWQgY2hhciAqcGluLCBzaXplX3Qgc2lu LAogCQlzZXFfaGRyID0gKnBpbjsKIAkJKytwaW47CiAKKwkJcGZuID0gZWxmX3pzdGRfbWFrZV9s aXRlcmFsX2Jhc2VsaW5lX2ZzZTsKIAkJaWYgKCFlbGZfenN0ZF91bnBhY2tfc2VxX2RlY29kZSAo KHNlcV9oZHIgPj4gNikgJiAzLAogCQkJCQkJICZwaW4sIHBpbmVuZCwKIAkJCQkJCSAmZWxmX3pz dGRfbGl0X3RhYmxlWzBdLCA2LAogCQkJCQkJIHNjcmF0Y2gsIDM1LAotCQkJCQkJIGxpdGVyYWxf ZnNlX3RhYmxlLCA5LAorCQkJCQkJIGxpdGVyYWxfZnNlX3RhYmxlLCA5LCBwZm4sCiAJCQkJCQkg JmxpdGVyYWxfZGVjb2RlKSkKIAkJICByZXR1cm4gMDsKIAorCQlwZm4gPSBlbGZfenN0ZF9tYWtl X29mZnNldF9iYXNlbGluZV9mc2U7CiAJCWlmICghZWxmX3pzdGRfdW5wYWNrX3NlcV9kZWNvZGUg KChzZXFfaGRyID4+IDQpICYgMywKIAkJCQkJCSAmcGluLCBwaW5lbmQsCiAJCQkJCQkgJmVsZl96 c3RkX29mZnNldF90YWJsZVswXSwgNSwKIAkJCQkJCSBzY3JhdGNoLCAzMSwKLQkJCQkJCSBvZmZz ZXRfZnNlX3RhYmxlLCA4LAorCQkJCQkJIG9mZnNldF9mc2VfdGFibGUsIDgsIHBmbiwKIAkJCQkJ CSAmb2Zmc2V0X2RlY29kZSkpCiAJCSAgcmV0dXJuIDA7CiAKKwkJcGZuID0gZWxmX3pzdGRfbWFr ZV9tYXRjaF9iYXNlbGluZV9mc2U7CiAJCWlmICghZWxmX3pzdGRfdW5wYWNrX3NlcV9kZWNvZGUg KChzZXFfaGRyID4+IDIpICYgMywKIAkJCQkJCSAmcGluLCBwaW5lbmQsCiAJCQkJCQkgJmVsZl96 c3RkX21hdGNoX3RhYmxlWzBdLCA2LAogCQkJCQkJIHNjcmF0Y2gsIDUyLAotCQkJCQkJIG1hdGNo X2ZzZV90YWJsZSwgOSwKKwkJCQkJCSBtYXRjaF9mc2VfdGFibGUsIDksIHBmbiwKIAkJCQkJCSAm bWF0Y2hfZGVjb2RlKSkKIAkJICByZXR1cm4gMDsKIAkgICAgICB9CkBAIC00MzM3LDc3ICs0NjM0 LDUzIEBAIGVsZl96c3RkX2RlY29tcHJlc3MgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBpbiwgc2l6 ZV90IHNpbiwKIAogCSAgICBiaXRzIC09IF9fYnVpbHRpbl9jbHogKHN0cmVhbV9zdGFydCkgLSAy NCArIDE7CiAKLQkgICAgaWYgKHVubGlrZWx5IChsaXRlcmFsX2RlY29kZS51c2VfcmxlKSkKLQkg ICAgICBsaXRlcmFsX3N0YXRlID0gMDsKLQkgICAgZWxzZQotCSAgICAgIHsKLQkJaWYgKCFlbGZf ZmV0Y2hfYml0c19iYWNrd2FyZCAoJnBiYWNrLCBwaW4sICZ2YWwsICZiaXRzKSkKLQkJICByZXR1 cm4gMDsKLQkJYml0cyAtPSBsaXRlcmFsX2RlY29kZS50YWJsZV9iaXRzOwotCQlsaXRlcmFsX3N0 YXRlID0gKCh2YWwgPj4gYml0cykKLQkJCQkgJiAoKDFVIDw8IGxpdGVyYWxfZGVjb2RlLnRhYmxl X2JpdHMpIC0gMSkpOwotCSAgICAgIH0KKwkgICAgaWYgKCFlbGZfZmV0Y2hfYml0c19iYWNrd2Fy ZCAoJnBiYWNrLCBwaW4sICZ2YWwsICZiaXRzKSkKKwkgICAgICByZXR1cm4gMDsKKwkgICAgYml0 cyAtPSBsaXRlcmFsX2RlY29kZS50YWJsZV9iaXRzOworCSAgICBsaXRlcmFsX3N0YXRlID0gKCh2 YWwgPj4gYml0cykKKwkJCSAgICAgJiAoKDFVIDw8IGxpdGVyYWxfZGVjb2RlLnRhYmxlX2JpdHMp IC0gMSkpOwogCi0JICAgIGlmICh1bmxpa2VseSAob2Zmc2V0X2RlY29kZS51c2VfcmxlKSkKLQkg ICAgICBvZmZzZXRfc3RhdGUgPSAwOwotCSAgICBlbHNlCi0JICAgICAgewotCQlpZiAoIWVsZl9m ZXRjaF9iaXRzX2JhY2t3YXJkICgmcGJhY2ssIHBpbiwgJnZhbCwgJmJpdHMpKQotCQkgIHJldHVy biAwOwotCQliaXRzIC09IG9mZnNldF9kZWNvZGUudGFibGVfYml0czsKLQkJb2Zmc2V0X3N0YXRl ID0gKCh2YWwgPj4gYml0cykKLQkJCQkmICgoMVUgPDwgb2Zmc2V0X2RlY29kZS50YWJsZV9iaXRz KSAtIDEpKTsKLQkgICAgICB9CisJICAgIGlmICghZWxmX2ZldGNoX2JpdHNfYmFja3dhcmQgKCZw YmFjaywgcGluLCAmdmFsLCAmYml0cykpCisJICAgICAgcmV0dXJuIDA7CisJICAgIGJpdHMgLT0g b2Zmc2V0X2RlY29kZS50YWJsZV9iaXRzOworCSAgICBvZmZzZXRfc3RhdGUgPSAoKHZhbCA+PiBi aXRzKQorCQkJICAgICYgKCgxVSA8PCBvZmZzZXRfZGVjb2RlLnRhYmxlX2JpdHMpIC0gMSkpOwog Ci0JICAgIGlmICh1bmxpa2VseSAobWF0Y2hfZGVjb2RlLnVzZV9ybGUpKQotCSAgICAgIG1hdGNo X3N0YXRlID0gMDsKLQkgICAgZWxzZQotCSAgICAgIHsKLQkJaWYgKCFlbGZfZmV0Y2hfYml0c19i YWNrd2FyZCAoJnBiYWNrLCBwaW4sICZ2YWwsICZiaXRzKSkKLQkJICByZXR1cm4gMDsKLQkJYml0 cyAtPSBtYXRjaF9kZWNvZGUudGFibGVfYml0czsKLQkJbWF0Y2hfc3RhdGUgPSAoKHZhbCA+PiBi aXRzKQotCQkJICAgICAgICYgKCgxVSA8PCBtYXRjaF9kZWNvZGUudGFibGVfYml0cykgLSAxKSk7 Ci0JICAgICAgfQorCSAgICBpZiAoIWVsZl9mZXRjaF9iaXRzX2JhY2t3YXJkICgmcGJhY2ssIHBp biwgJnZhbCwgJmJpdHMpKQorCSAgICAgIHJldHVybiAwOworCSAgICBiaXRzIC09IG1hdGNoX2Rl Y29kZS50YWJsZV9iaXRzOworCSAgICBtYXRjaF9zdGF0ZSA9ICgodmFsID4+IGJpdHMpCisJCQkg ICAmICgoMVUgPDwgbWF0Y2hfZGVjb2RlLnRhYmxlX2JpdHMpIC0gMSkpOwogCiAJICAgIHNlcSA9 IDA7CiAJICAgIHdoaWxlICgxKQogCSAgICAgIHsKKwkJY29uc3Qgc3RydWN0IGVsZl96c3RkX2Zz ZV9iYXNlbGluZV9lbnRyeSAqcHQ7CisJCXVpbnQzMl90IG9mZnNldF9iYXNlYml0czsKKwkJdWlu dDMyX3Qgb2Zmc2V0X2Jhc2VsaW5lOworCQl1aW50MzJfdCBvZmZzZXRfYml0czsKIAkJdWludDMy X3Qgb2Zmc2V0X2Jhc2U7Ci0JCXVpbnQzMl90IG5lZWQ7Ci0JCXVpbnQzMl90IGFkZDsKIAkJdWlu dDMyX3Qgb2Zmc2V0OwotCQl1aW50MzJfdCB1c2Vfb2Zmc2V0OworCQl1aW50MzJfdCBtYXRjaF9i YXNlbGluZTsKKwkJdWludDMyX3QgbWF0Y2hfYml0czsKIAkJdWludDMyX3QgbWF0Y2hfYmFzZTsK IAkJdWludDMyX3QgbWF0Y2g7CisJCXVpbnQzMl90IGxpdGVyYWxfYmFzZWxpbmU7CisJCXVpbnQz Ml90IGxpdGVyYWxfYml0czsKIAkJdWludDMyX3QgbGl0ZXJhbF9iYXNlOwogCQl1aW50MzJfdCBs aXRlcmFsOwotCQljb25zdCBzdHJ1Y3QgZWxmX3pzdGRfZnNlX2VudHJ5ICpwdDsKLQkJdWludDY0 X3QgdjsKLQotCQlpZiAodW5saWtlbHkgKG9mZnNldF9kZWNvZGUudXNlX3JsZSkpCi0JCSAgb2Zm c2V0X2Jhc2UgPSBvZmZzZXRfZGVjb2RlLnJsZTsKLQkJZWxzZQotCQkgIG9mZnNldF9iYXNlID0g b2Zmc2V0X2RlY29kZS50YWJsZVtvZmZzZXRfc3RhdGVdLnN5bWJvbDsKLQotCQlpZiAodW5saWtl bHkgKG1hdGNoX2RlY29kZS51c2VfcmxlKSkKLQkJICBtYXRjaF9iYXNlID0gbWF0Y2hfZGVjb2Rl LnJsZTsKLQkJZWxzZQotCQkgIG1hdGNoX2Jhc2UgPSBtYXRjaF9kZWNvZGUudGFibGVbbWF0Y2hf c3RhdGVdLnN5bWJvbDsKLQotCQlpZiAodW5saWtlbHkgKGxpdGVyYWxfZGVjb2RlLnVzZV9ybGUp KQotCQkgIGxpdGVyYWxfYmFzZSA9IGxpdGVyYWxfZGVjb2RlLnJsZTsKLQkJZWxzZQotCQkgIGxp dGVyYWxfYmFzZSA9IGxpdGVyYWxfZGVjb2RlLnRhYmxlW2xpdGVyYWxfc3RhdGVdLnN5bWJvbDsK KwkJdWludDMyX3QgbmVlZDsKKwkJdWludDMyX3QgYWRkOwogCi0JCW5lZWQgPSBvZmZzZXRfYmFz ZTsKLQkJaWYgKHVubGlrZWx5IChuZWVkID4gMzEpKQotCQkgIHsKLQkJICAgIGVsZl91bmNvbXBy ZXNzX2ZhaWxlZCAoKTsKLQkJICAgIHJldHVybiAwOwotCQkgIH0KKwkJcHQgPSAmb2Zmc2V0X2Rl Y29kZS50YWJsZVtvZmZzZXRfc3RhdGVdOworCQlvZmZzZXRfYmFzZWJpdHMgPSBwdC0+YmFzZWJp dHM7CisJCW9mZnNldF9iYXNlbGluZSA9IHB0LT5iYXNlbGluZTsKKwkJb2Zmc2V0X2JpdHMgPSBw dC0+Yml0czsKKwkJb2Zmc2V0X2Jhc2UgPSBwdC0+YmFzZTsKIAotCQkvKiBlbGZfZmV0Y2hfYml0 c19iYWNrd2FyZCBvbmx5IHByb21pc2VzIHVzIDE2IGJpdHMuICAqLworCQkvKiBUaGlzIGNhc2Ug Y2FuIGJlIG1vcmUgdGhhbiAxNiBiaXRzLCB3aGljaCBpcyBhbGwgdGhhdAorCQkgICBlbGZfZmV0 Y2hfYml0c19iYWNrd2FyZCBwcm9taXNlcy4gICovCisJCW5lZWQgPSBvZmZzZXRfYmFzZWJpdHM7 CiAJCWFkZCA9IDA7CiAJCWlmICh1bmxpa2VseSAobmVlZCA+IDE2KSkKIAkJICB7CkBAIC00NDE4 LDE0NyArNDY5MSwxMjIgQEAgZWxmX3pzdGRfZGVjb21wcmVzcyAoY29uc3QgdW5zaWduZWQgY2hh ciAqcGluLCBzaXplX3Qgc2luLAogCQkgICAgbmVlZCAtPSAxNjsKIAkJICAgIGFkZCA8PD0gbmVl ZDsKIAkJICB9Ci0JCWlmICghZWxmX2ZldGNoX2JpdHNfYmFja3dhcmQgKCZwYmFjaywgcGluLCAm dmFsLCAmYml0cykpCi0JCSAgcmV0dXJuIDA7Ci0JCWJpdHMgLT0gbmVlZDsKLQkJYWRkICs9ICh2 YWwgPj4gYml0cykgJiAoKDFVIDw8IG5lZWQpIC0gMSk7Ci0KLQkJb2Zmc2V0ID0gKDFVIDw8IG9m ZnNldF9iYXNlKSArIGFkZDsKLQotCQlpZiAobWF0Y2hfYmFzZSA8IFpTVERfTUFUQ0hfTEVOR1RI X0JBU0VMSU5FX09GRlNFVCkKLQkJICBtYXRjaCA9IG1hdGNoX2Jhc2UgKyAzOwotCQllbHNlCisJ CWlmIChuZWVkID4gMCkKIAkJICB7Ci0JCSAgICB1bnNpZ25lZCBpbnQgaWR4OwotCQkgICAgdW5z aWduZWQgaW50IGJhc2VsaW5lOworCQkgICAgaWYgKCFlbGZfZmV0Y2hfYml0c19iYWNrd2FyZCAo JnBiYWNrLCBwaW4sICZ2YWwsICZiaXRzKSkKKwkJICAgICAgcmV0dXJuIDA7CisJCSAgICBiaXRz IC09IG5lZWQ7CisJCSAgICBhZGQgKz0gKHZhbCA+PiBiaXRzKSAmICgoMVUgPDwgbmVlZCkgLSAx KTsKKwkJICB9CiAKLQkJICAgIGlmICh1bmxpa2VseSAobWF0Y2hfYmFzZSA+IDUyKSkKLQkJICAg ICAgewotCQkJZWxmX3VuY29tcHJlc3NfZmFpbGVkICgpOwotCQkJcmV0dXJuIDA7Ci0JCSAgICAg IH0KKwkJb2Zmc2V0ID0gb2Zmc2V0X2Jhc2VsaW5lICsgYWRkOwogCi0JCSAgICBpZHggPSBtYXRj aF9iYXNlIC0gWlNURF9NQVRDSF9MRU5HVEhfQkFTRUxJTkVfT0ZGU0VUOwotCQkgICAgYmFzZWxp bmUgPSBlbGZfenN0ZF9tYXRjaF9sZW5ndGhfYmFzZWxpbmVbaWR4XTsKLQkJICAgIG5lZWQgPSBl bGZfenN0ZF9tYXRjaF9sZW5ndGhfYml0c1tpZHhdOworCQlwdCA9ICZtYXRjaF9kZWNvZGUudGFi bGVbbWF0Y2hfc3RhdGVdOworCQluZWVkID0gcHQtPmJhc2ViaXRzOworCQltYXRjaF9iYXNlbGlu ZSA9IHB0LT5iYXNlbGluZTsKKwkJbWF0Y2hfYml0cyA9IHB0LT5iaXRzOworCQltYXRjaF9iYXNl ID0gcHQtPmJhc2U7CiAKKwkJYWRkID0gMDsKKwkJaWYgKG5lZWQgPiAwKQorCQkgIHsKIAkJICAg IGlmICghZWxmX2ZldGNoX2JpdHNfYmFja3dhcmQgKCZwYmFjaywgcGluLCAmdmFsLCAmYml0cykp CiAJCSAgICAgIHJldHVybiAwOwogCQkgICAgYml0cyAtPSBuZWVkOwogCQkgICAgYWRkID0gKHZh bCA+PiBiaXRzKSAmICgoMVUgPDwgbmVlZCkgLSAxKTsKLQotCQkgICAgbWF0Y2ggPSBiYXNlbGlu ZSArIGFkZDsKIAkJICB9CiAKLQkJaWYgKGxpdGVyYWxfYmFzZSA8IFpTVERfTElURVJBTF9MRU5H VEhfQkFTRUxJTkVfT0ZGU0VUKQotCQkgIGxpdGVyYWwgPSBsaXRlcmFsX2Jhc2U7Ci0JCWVsc2UK LQkJICB7Ci0JCSAgICB1bnNpZ25lZCBpbnQgaWR4OwotCQkgICAgdW5zaWduZWQgaW50IGJhc2Vs aW5lOwotCi0JCSAgICBpZiAodW5saWtlbHkgKGxpdGVyYWxfYmFzZSA+IDM1KSkKLQkJICAgICAg ewotCQkJZWxmX3VuY29tcHJlc3NfZmFpbGVkICgpOwotCQkJcmV0dXJuIDA7Ci0JCSAgICAgIH0K KwkJbWF0Y2ggPSBtYXRjaF9iYXNlbGluZSArIGFkZDsKIAotCQkgICAgaWR4ID0gbGl0ZXJhbF9i YXNlIC0gWlNURF9MSVRFUkFMX0xFTkdUSF9CQVNFTElORV9PRkZTRVQ7Ci0JCSAgICBiYXNlbGlu ZSA9IGVsZl96c3RkX2xpdGVyYWxfbGVuZ3RoX2Jhc2VsaW5lW2lkeF07Ci0JCSAgICBuZWVkID0g ZWxmX3pzdGRfbGl0ZXJhbF9sZW5ndGhfYml0c1tpZHhdOworCQlwdCA9ICZsaXRlcmFsX2RlY29k ZS50YWJsZVtsaXRlcmFsX3N0YXRlXTsKKwkJbmVlZCA9IHB0LT5iYXNlYml0czsKKwkJbGl0ZXJh bF9iYXNlbGluZSA9IHB0LT5iYXNlbGluZTsKKwkJbGl0ZXJhbF9iaXRzID0gcHQtPmJpdHM7CisJ CWxpdGVyYWxfYmFzZSA9IHB0LT5iYXNlOwogCisJCWFkZCA9IDA7CisJCWlmIChuZWVkID4gMCkK KwkJICB7CiAJCSAgICBpZiAoIWVsZl9mZXRjaF9iaXRzX2JhY2t3YXJkICgmcGJhY2ssIHBpbiwg JnZhbCwgJmJpdHMpKQogCQkgICAgICByZXR1cm4gMDsKIAkJICAgIGJpdHMgLT0gbmVlZDsKIAkJ ICAgIGFkZCA9ICh2YWwgPj4gYml0cykgJiAoKDFVIDw8IG5lZWQpIC0gMSk7Ci0KLQkJICAgIGxp dGVyYWwgPSBiYXNlbGluZSArIGFkZDsKIAkJICB9CiAKLQkJc3dpdGNoIChvZmZzZXQpCisJCWxp dGVyYWwgPSBsaXRlcmFsX2Jhc2VsaW5lICsgYWRkOworCisJCS8qIFNlZSB0aGUgY29tbWVudCBp biBlbGZfenN0ZF9tYWtlX29mZnNldF9iYXNlbGluZV9mc2UuICAqLworCQlpZiAob2Zmc2V0X2Jh c2ViaXRzID4gMSkKIAkJICB7Ci0JCSAgY2FzZSAwOgotCQkgICAgZWxmX3VuY29tcHJlc3NfZmFp bGVkICgpOwotCQkgICAgcmV0dXJuIDA7Ci0JCSAgY2FzZSAxOgotCQkgICAgaWYgKGxpdGVyYWwg PT0gMCkKKwkJICAgIHJlcGVhdGVkX29mZnNldDMgPSByZXBlYXRlZF9vZmZzZXQyOworCQkgICAg cmVwZWF0ZWRfb2Zmc2V0MiA9IHJlcGVhdGVkX29mZnNldDE7CisJCSAgICByZXBlYXRlZF9vZmZz ZXQxID0gb2Zmc2V0OworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIGlmICh1bmxpa2VseSAo bGl0ZXJhbCA9PSAwKSkKKwkJICAgICAgKytvZmZzZXQ7CisJCSAgICBzd2l0Y2ggKG9mZnNldCkK IAkJICAgICAgewotCQkJdXNlX29mZnNldCA9IHJlcGVhdGVkX29mZnNldDI7CisJCSAgICAgIGNh c2UgMToKKwkJCW9mZnNldCA9IHJlcGVhdGVkX29mZnNldDE7CisJCQlicmVhazsKKwkJICAgICAg Y2FzZSAyOgorCQkJb2Zmc2V0ID0gcmVwZWF0ZWRfb2Zmc2V0MjsKIAkJCXJlcGVhdGVkX29mZnNl dDIgPSByZXBlYXRlZF9vZmZzZXQxOwotCQkgICAgICB9Ci0JCSAgICBlbHNlCi0JCSAgICAgIHVz ZV9vZmZzZXQgPSByZXBlYXRlZF9vZmZzZXQxOwotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSAyOgot CQkgICAgaWYgKGxpdGVyYWwgPT0gMCkKLQkJICAgICAgewotCQkJdXNlX29mZnNldCA9IHJlcGVh dGVkX29mZnNldDM7CisJCQlyZXBlYXRlZF9vZmZzZXQxID0gb2Zmc2V0OworCQkJYnJlYWs7CisJ CSAgICAgIGNhc2UgMzoKKwkJCW9mZnNldCA9IHJlcGVhdGVkX29mZnNldDM7CisJCQlyZXBlYXRl ZF9vZmZzZXQzID0gcmVwZWF0ZWRfb2Zmc2V0MjsKKwkJCXJlcGVhdGVkX29mZnNldDIgPSByZXBl YXRlZF9vZmZzZXQxOworCQkJcmVwZWF0ZWRfb2Zmc2V0MSA9IG9mZnNldDsKKwkJCWJyZWFrOwor CQkgICAgICBjYXNlIDQ6CisJCQlvZmZzZXQgPSByZXBlYXRlZF9vZmZzZXQxIC0gMTsKIAkJCXJl cGVhdGVkX29mZnNldDMgPSByZXBlYXRlZF9vZmZzZXQyOworCQkJcmVwZWF0ZWRfb2Zmc2V0MiA9 IHJlcGVhdGVkX29mZnNldDE7CisJCQlyZXBlYXRlZF9vZmZzZXQxID0gb2Zmc2V0OworCQkJYnJl YWs7CiAJCSAgICAgIH0KLQkJICAgIGVsc2UKLQkJICAgICAgdXNlX29mZnNldCA9IHJlcGVhdGVk X29mZnNldDI7Ci0JCSAgICByZXBlYXRlZF9vZmZzZXQyID0gcmVwZWF0ZWRfb2Zmc2V0MTsKLQkJ ICAgIGJyZWFrOwotCQkgIGNhc2UgMzoKLQkJICAgIGlmIChsaXRlcmFsID09IDApCi0JCSAgICAg IHVzZV9vZmZzZXQgPSByZXBlYXRlZF9vZmZzZXQxIC0gMTsKLQkJICAgIGVsc2UKLQkJICAgICAg dXNlX29mZnNldCA9IHJlcGVhdGVkX29mZnNldDM7Ci0JCSAgICByZXBlYXRlZF9vZmZzZXQzID0g cmVwZWF0ZWRfb2Zmc2V0MjsKLQkJICAgIHJlcGVhdGVkX29mZnNldDIgPSByZXBlYXRlZF9vZmZz ZXQxOwotCQkgICAgYnJlYWs7Ci0JCSAgZGVmYXVsdDoKLQkJICAgIHVzZV9vZmZzZXQgPSBvZmZz ZXQgLSAzOwotCQkgICAgcmVwZWF0ZWRfb2Zmc2V0MyA9IHJlcGVhdGVkX29mZnNldDI7Ci0JCSAg ICByZXBlYXRlZF9vZmZzZXQyID0gcmVwZWF0ZWRfb2Zmc2V0MTsKLQkJICAgIGJyZWFrOwogCQkg IH0KIAotCQlyZXBlYXRlZF9vZmZzZXQxID0gdXNlX29mZnNldDsKLQogCQkrK3NlcTsKIAkJaWYg KHNlcSA8IHNlcV9jb3VudCkKIAkJICB7CisJCSAgICB1aW50MzJfdCB2OworCiAJCSAgICAvKiBV cGRhdGUgdGhlIHRocmVlIHN0YXRlcy4gICovCiAKLQkJICAgIGlmICh1bmxpa2VseSAobGl0ZXJh bF9kZWNvZGUudXNlX3JsZSkpCi0JCSAgICAgIDsKLQkJICAgIGVsc2UKLQkJICAgICAgewotCQkJ aWYgKCFlbGZfZmV0Y2hfYml0c19iYWNrd2FyZCAoJnBiYWNrLCBwaW4sICZ2YWwsICZiaXRzKSkK LQkJCSAgcmV0dXJuIDA7Ci0JCQlwdCA9ICZsaXRlcmFsX2RlY29kZS50YWJsZVtsaXRlcmFsX3N0 YXRlXTsKLQkJCWJpdHMgLT0gcHQtPmJpdHM7Ci0JCQl2ID0gKHZhbCA+PiBiaXRzKSAmICgoKHVp bnQ2NF90KTEgPDwgcHQtPmJpdHMpIC0gMSk7Ci0JCQlsaXRlcmFsX3N0YXRlID0gcHQtPmJhc2Ug KyB2OwotCQkgICAgICB9CisJCSAgICBpZiAoIWVsZl9mZXRjaF9iaXRzX2JhY2t3YXJkICgmcGJh Y2ssIHBpbiwgJnZhbCwgJmJpdHMpKQorCQkgICAgICByZXR1cm4gMDsKIAotCQkgICAgaWYgKHVu bGlrZWx5IChtYXRjaF9kZWNvZGUudXNlX3JsZSkpCi0JCSAgICAgIDsKLQkJICAgIGVsc2UKLQkJ ICAgICAgewotCQkJaWYgKCFlbGZfZmV0Y2hfYml0c19iYWNrd2FyZCAoJnBiYWNrLCBwaW4sICZ2 YWwsICZiaXRzKSkKLQkJCSAgcmV0dXJuIDA7Ci0JCQlwdCA9ICZtYXRjaF9kZWNvZGUudGFibGVb bWF0Y2hfc3RhdGVdOwotCQkJYml0cyAtPSBwdC0+Yml0czsKLQkJCXYgPSAodmFsID4+IGJpdHMp ICYgKCgodWludDY0X3QpMSA8PCBwdC0+Yml0cykgLSAxKTsKLQkJCW1hdGNoX3N0YXRlID0gcHQt PmJhc2UgKyB2OwotCQkgICAgICB9CisJCSAgICBuZWVkID0gbGl0ZXJhbF9iaXRzOworCQkgICAg Yml0cyAtPSBuZWVkOworCQkgICAgdiA9ICh2YWwgPj4gYml0cykgJiAoKCh1aW50MzJfdCkxIDw8 IG5lZWQpIC0gMSk7CiAKLQkJICAgIGlmICh1bmxpa2VseSAob2Zmc2V0X2RlY29kZS51c2Vfcmxl KSkKLQkJICAgICAgOwotCQkgICAgZWxzZQotCQkgICAgICB7Ci0JCQlpZiAoIWVsZl9mZXRjaF9i aXRzX2JhY2t3YXJkICgmcGJhY2ssIHBpbiwgJnZhbCwgJmJpdHMpKQotCQkJICByZXR1cm4gMDsK LQkJCXB0ID0gJm9mZnNldF9kZWNvZGUudGFibGVbb2Zmc2V0X3N0YXRlXTsKLQkJCWJpdHMgLT0g cHQtPmJpdHM7Ci0JCQl2ID0gKHZhbCA+PiBiaXRzKSAmICgoKHVpbnQ2NF90KTEgPDwgcHQtPmJp dHMpIC0gMSk7Ci0JCQlvZmZzZXRfc3RhdGUgPSBwdC0+YmFzZSArIHY7Ci0JCSAgICAgIH0KKwkJ ICAgIGxpdGVyYWxfc3RhdGUgPSBsaXRlcmFsX2Jhc2UgKyB2OworCisJCSAgICBpZiAoIWVsZl9m ZXRjaF9iaXRzX2JhY2t3YXJkICgmcGJhY2ssIHBpbiwgJnZhbCwgJmJpdHMpKQorCQkgICAgICBy ZXR1cm4gMDsKKworCQkgICAgbmVlZCA9IG1hdGNoX2JpdHM7CisJCSAgICBiaXRzIC09IG5lZWQ7 CisJCSAgICB2ID0gKHZhbCA+PiBiaXRzKSAmICgoKHVpbnQzMl90KTEgPDwgbmVlZCkgLSAxKTsK KworCQkgICAgbWF0Y2hfc3RhdGUgPSBtYXRjaF9iYXNlICsgdjsKKworCQkgICAgaWYgKCFlbGZf ZmV0Y2hfYml0c19iYWNrd2FyZCAoJnBiYWNrLCBwaW4sICZ2YWwsICZiaXRzKSkKKwkJICAgICAg cmV0dXJuIDA7CisKKwkJICAgIG5lZWQgPSBvZmZzZXRfYml0czsKKwkJICAgIGJpdHMgLT0gbmVl ZDsKKwkJICAgIHYgPSAodmFsID4+IGJpdHMpICYgKCgodWludDMyX3QpMSA8PCBuZWVkKSAtIDEp OworCisJCSAgICBvZmZzZXRfc3RhdGUgPSBvZmZzZXRfYmFzZSArIHY7CiAJCSAgfQogCi0JCS8q IFRoZSBuZXh0IHNlcXVlbmNlIGlzIG5vdyBpbiBMSVRFUkFMLCBVU0VfT0ZGU0VULCBNQVRDSC4g ICovCisJCS8qIFRoZSBuZXh0IHNlcXVlbmNlIGlzIG5vdyBpbiBMSVRFUkFMLCBPRkZTRVQsIE1B VENILiAgKi8KIAogCQlpZiAobGl0ZXJhbCA+IDApCiAJCSAgewpAQCAtNDU3MCw3ICs0ODE4LDE0 IEBAIGVsZl96c3RkX2RlY29tcHJlc3MgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBpbiwgc2l6ZV90 IHNpbiwKIAkJCXJldHVybiAwOwogCQkgICAgICB9CiAKLQkJICAgIGlmIChsaXRlcmFsIDw9IGxp dGV4cF9jb3VudCkKKwkJICAgIGlmIChsaXRlcmFscy50eXBlICE9IFpTVERfTElUX0hVRkYpCisJ CSAgICAgIHsKKwkJCWlmICghZWxmX3pzdGRfbGl0ZXJhbF9vdXRwdXQgKCZsaXRlcmFscywgbGl0 ZXJhbCwKKwkJCQkJCSAgICAgIHBvdXQpKQorCQkJICByZXR1cm4gMDsKKwkJCXBvdXQgKz0gbGl0 ZXJhbDsKKwkJICAgICAgfQorCQkgICAgZWxzZSBpZiAobGl0ZXJhbCA8PSBsaXRleHBfY291bnQp CiAJCSAgICAgIHsKIAkJCW1lbWNweSAocG91dCwgcGxpdGV4cCwgbGl0ZXJhbCk7CiAJCQlwbGl0 ZXhwICs9IGxpdGVyYWw7CkBAIC00NTc5LDE3ICs0ODM0LDEyIEBAIGVsZl96c3RkX2RlY29tcHJl c3MgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBpbiwgc2l6ZV90IHNpbiwKIAkJICAgICAgfQogCQkg ICAgZWxzZQogCQkgICAgICB7Ci0JCQlpZiAobGl0ZXhwX2NvdW50ID4gMCkKLQkJCSAgewotCQkJ ICAgIG1lbWNweSAocG91dCwgcGxpdGV4cCwgbGl0ZXhwX2NvdW50KTsKLQkJCSAgICBwb3V0ICs9 IGxpdGV4cF9jb3VudDsKLQkJCSAgICBsaXRlcmFsIC09IGxpdGV4cF9jb3VudDsKLQkJCSAgICBw bGl0ZXhwID0gTlVMTDsKLQkJCSAgICBsaXRleHBfY291bnQgPSAwOwotCQkJICB9CisJCQltZW1j cHkgKHBvdXQsIHBsaXRleHAsIGxpdGV4cF9jb3VudCk7CisJCQlwb3V0ICs9IGxpdGV4cF9jb3Vu dDsKKwkJCWxpdGVyYWwgLT0gbGl0ZXhwX2NvdW50OworCQkJbGl0ZXhwX2NvdW50ID0gMDsKIAot CQkJaWYgKGxpdGVyYWxzLnR5cGUgIT0gWlNURF9MSVRfSFVGRgotCQkJICAgIHx8IGxpdGVyYWwg Pj0gWlNURF9UQUJMRV9XT1JLX0xJVF9TSVpFKQorCQkJaWYgKHVubGlrZWx5IChsaXRlcmFsID49 IFpTVERfVEFCTEVfV09SS19MSVRfU0laRSkpCiAJCQkgIHsKIAkJCSAgICBpZiAoIWVsZl96c3Rk X2xpdGVyYWxfb3V0cHV0ICgmbGl0ZXJhbHMsIGxpdGVyYWwsCiAJCQkJCQkJICBwb3V0KSkKQEAg LTQ1OTgsNjEgKzQ4NDgsNDcgQEAgZWxmX3pzdGRfZGVjb21wcmVzcyAoY29uc3QgdW5zaWduZWQg Y2hhciAqcGluLCBzaXplX3Qgc2luLAogCQkJICAgIGxpdGVyYWwgPSAwOwogCQkJICB9CiAKLQkJ CWlmIChsaXRlcmFscy50eXBlICE9IFpTVERfTElUX0hVRkYKLQkJCSAgICB8fCBsaXRlcmFscy5y ZWdlbmVyYXRlZF9zaXplID09IDApCisJCQlwbGl0ZXhwID0gKHVuc2lnbmVkIGNoYXIgKilzY3Jh dGNoOworCQkJbGl0ZXhwX2NvdW50ID0gWlNURF9UQUJMRV9XT1JLX0xJVF9TSVpFOworCQkJaWYg KGxpdGV4cF9jb3VudCA+IGxpdGVyYWxzLnJlZ2VuZXJhdGVkX3NpemUpCisJCQkgIGxpdGV4cF9j b3VudCA9IGxpdGVyYWxzLnJlZ2VuZXJhdGVkX3NpemU7CisJCQlpZiAoIWVsZl96c3RkX2xpdGVy YWxfb3V0cHV0ICgmbGl0ZXJhbHMsCisJCQkJCQkgICAgICBsaXRleHBfY291bnQsCisJCQkJCQkg ICAgICBwbGl0ZXhwKSkKKwkJCSAgcmV0dXJuIDA7CisKKwkJCWlmICh1bmxpa2VseSAobGl0ZXJh bCA+IGxpdGV4cF9jb3VudCkpCiAJCQkgIHsKLQkJCSAgICBwbGl0ZXhwID0gTlVMTDsKLQkJCSAg ICBsaXRleHBfY291bnQgPSAwOwotCQkJICAgIGlmICh1bmxpa2VseSAobGl0ZXJhbCA+IDApKQot CQkJICAgICAgewotCQkJCWVsZl91bmNvbXByZXNzX2ZhaWxlZCAoKTsKLQkJCQlyZXR1cm4gMDsK LQkJCSAgICAgIH0KKwkJCSAgICBlbGZfdW5jb21wcmVzc19mYWlsZWQgKCk7CisJCQkgICAgcmV0 dXJuIDA7CiAJCQkgIH0KLQkJCWVsc2UKLQkJCSAgewotCQkJICAgIHBsaXRleHAgPSAodW5zaWdu ZWQgY2hhciAqKXNjcmF0Y2g7Ci0JCQkgICAgbGl0ZXhwX2NvdW50ID0gWlNURF9UQUJMRV9XT1JL X0xJVF9TSVpFOwotCQkJICAgIGlmIChsaXRleHBfY291bnQgPiBsaXRlcmFscy5yZWdlbmVyYXRl ZF9zaXplKQotCQkJICAgICAgbGl0ZXhwX2NvdW50ID0gbGl0ZXJhbHMucmVnZW5lcmF0ZWRfc2l6 ZTsKLQkJCSAgICBpZiAoIWVsZl96c3RkX2xpdGVyYWxfb3V0cHV0ICgmbGl0ZXJhbHMsCi0JCQkJ CQkJICBsaXRleHBfY291bnQsCi0JCQkJCQkJICBwbGl0ZXhwKSkKLQkJCSAgICAgIHJldHVybiAw OwogCi0JCQkgICAgaWYgKHVubGlrZWx5IChsaXRlcmFsID4gbGl0ZXhwX2NvdW50KSkKLQkJCSAg ICAgIHsKLQkJCQllbGZfdW5jb21wcmVzc19mYWlsZWQgKCk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQkg ICAgICB9Ci0KLQkJCSAgICBtZW1jcHkgKHBvdXQsIHBsaXRleHAsIGxpdGVyYWwpOwotCQkJICAg IHBsaXRleHAgKz0gbGl0ZXJhbDsKLQkJCSAgICBsaXRleHBfY291bnQgLT0gbGl0ZXJhbDsKLQkJ CSAgICBwb3V0ICs9IGxpdGVyYWw7Ci0JCQkgIH0KKwkJCW1lbWNweSAocG91dCwgcGxpdGV4cCwg bGl0ZXJhbCk7CisJCQlwbGl0ZXhwICs9IGxpdGVyYWw7CisJCQlsaXRleHBfY291bnQgLT0gbGl0 ZXJhbDsKKwkJCXBvdXQgKz0gbGl0ZXJhbDsKIAkJICAgICAgfQogCQkgIH0KIAotCQkvKiBDb3B5 IE1BVENIIGJ5dGVzIGZyb20gdGhlIGRlY29kZWQgb3V0cHV0IGF0IFVTRV9PRkZTRVQuICAqLwot Ci0JCWlmICh1bmxpa2VseSAoKHNpemVfdCkocG91dGVuZCAtIHBvdXQpIDwgbWF0Y2gpKQotCQkg IHsKLQkJICAgIGVsZl91bmNvbXByZXNzX2ZhaWxlZCAoKTsKLQkJICAgIHJldHVybiAwOwotCQkg IH0KLQogCQlpZiAobWF0Y2ggPiAwKQogCQkgIHsKLQkJICAgIGlmICh1bmxpa2VseSAoKHNpemVf dCkocG91dCAtIHBvdXRzdGFydCkgPCB1c2Vfb2Zmc2V0KSkKKwkJICAgIC8qIENvcHkgTUFUQ0gg Ynl0ZXMgZnJvbSB0aGUgZGVjb2RlZCBvdXRwdXQgYXQgT0ZGU0VULiAgKi8KKworCQkgICAgaWYg KHVubGlrZWx5ICgoc2l6ZV90KShwb3V0ZW5kIC0gcG91dCkgPCBtYXRjaCkpCisJCSAgICAgIHsK KwkJCWVsZl91bmNvbXByZXNzX2ZhaWxlZCAoKTsKKwkJCXJldHVybiAwOworCQkgICAgICB9CisK KwkJICAgIGlmICh1bmxpa2VseSAoKHNpemVfdCkocG91dCAtIHBvdXRzdGFydCkgPCBvZmZzZXQp KQogCQkgICAgICB7CiAJCQllbGZfdW5jb21wcmVzc19mYWlsZWQgKCk7CiAJCQlyZXR1cm4gMDsK IAkJICAgICAgfQogCi0JCSAgICBpZiAodXNlX29mZnNldCA+PSBtYXRjaCkKKwkJICAgIGlmIChv ZmZzZXQgPj0gbWF0Y2gpCiAJCSAgICAgIHsKLQkJCW1lbWNweSAocG91dCwgcG91dCAtIHVzZV9v ZmZzZXQsIG1hdGNoKTsKKwkJCW1lbWNweSAocG91dCwgcG91dCAtIG9mZnNldCwgbWF0Y2gpOwog CQkJcG91dCArPSBtYXRjaDsKIAkJICAgICAgfQogCQkgICAgZWxzZQpAQCAtNDY2MSw4ICs0ODk3 LDggQEAgZWxmX3pzdGRfZGVjb21wcmVzcyAoY29uc3QgdW5zaWduZWQgY2hhciAqcGluLCBzaXpl X3Qgc2luLAogCQkJICB7CiAJCQkgICAgdWludDMyX3QgY29weTsKIAotCQkJICAgIGNvcHkgPSBt YXRjaCA8IHVzZV9vZmZzZXQgPyBtYXRjaCA6IHVzZV9vZmZzZXQ7Ci0JCQkgICAgbWVtY3B5IChw b3V0LCBwb3V0IC0gdXNlX29mZnNldCwgY29weSk7CisJCQkgICAgY29weSA9IG1hdGNoIDwgb2Zm c2V0ID8gbWF0Y2ggOiBvZmZzZXQ7CisJCQkgICAgbWVtY3B5IChwb3V0LCBwb3V0IC0gb2Zmc2V0 LCBjb3B5KTsKIAkJCSAgICBtYXRjaCAtPSBjb3B5OwogCQkJICAgIHBvdXQgKz0gY29weTsKIAkJ CSAgfQo= --00000000000084325605ef6f7393--