From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 97C2A45066 for ; Tue, 3 Jan 2023 13:42:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 490D568BD95; Tue, 3 Jan 2023 15:41:45 +0200 (EET) Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7B09968BD77 for ; Tue, 3 Jan 2023 15:41:37 +0200 (EET) Received: by mail-ej1-f54.google.com with SMTP id t17so73576153eju.1 for ; Tue, 03 Jan 2023 05:41:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spin-digital-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=TZXd1+ska/lGVFgyK7yUd+qai53Ss3vuT/hdyQpIWcY=; b=vAwC2oFd1pt+lon3KriRCpUmVrl3xRrS7sFMInNfrUG4tL59Ep9SvmFRyjX7GLd40W 3fsg2MZHEfIPNmQxowbl+OE2uoyBWkal2t7GA3uPL1l+QSneeducHWPHrc66LWusmGJe rpaz8Z7PHhUmcvqXfYwplwy7Kr+va4mUjrt7kL/MOzT4HY+LLdLjwJr8vzCvMlGxmOFY 3deRAwte51nHRZL+Ow6GVZiJOtJ7GQtn9KbZk5Vm865CxHVWnGRrI1JEoVPgwRadxJ5D 3nM7Og6OFP2SxBfJNwYmIOujCeiEOSghIAeZpNisEqcIbNyFwl+vQzCIXqZ87ue7Bepk 5FJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TZXd1+ska/lGVFgyK7yUd+qai53Ss3vuT/hdyQpIWcY=; b=Aurqnl40U+nrPcenMeElZpx17g+pBaabGmgNITtHOCJiKCtMLZETHxncf/ggqgMoa2 MgLXsyXuTaarbL2DhcaPx5XsD/oqqtHIutPuHv8jTf9VILu0if/flhKQRKPqJ5cXWgo6 hJjbDleYF5/FijxPA/0tGWEjubtUJI0dhSeToMGeg+mpAJnTa296k+ymmyNFwH7WpD1q 7xQ741KkzK2y7BsKhjS/rXFz3eP2X/qVfrruKxBtVcc6oOqSxeFRpaJAqNpsBILkwQqL FVoN3JO68GDfSRy4QOZqGxsz4JYTqpWuqldqBWTh6QVtclY47LpBedciCMb/dCvIOe98 70BQ== X-Gm-Message-State: AFqh2ko1OTcnvwwaTUsqtX4lBnuBulaADfuXipAYVpC+6NWDb8622ezj Vg6Zc4tOs96zQdhjPVUKrlxzXf4pnzsq5s8g X-Google-Smtp-Source: AMrXdXtQo7p08xIfyvIbQxsUo5WJaq/iKuOoLs6EAaJt3cQj+H32WgJ4CDqAqNm1t1yKR+6XWRgxCw== X-Received: by 2002:a17:906:185b:b0:841:e5b3:c95d with SMTP id w27-20020a170906185b00b00841e5b3c95dmr40841702eje.30.1672753295901; Tue, 03 Jan 2023 05:41:35 -0800 (PST) Received: from thomas-win.localdomain ([213.138.44.237]) by smtp.gmail.com with ESMTPSA id q26-20020a17090676da00b008302732f569sm14151095ejn.78.2023.01.03.05.41.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Jan 2023 05:41:35 -0800 (PST) From: Thomas Siedel To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 Jan 2023 14:40:35 +0100 Message-Id: <20230103134040.41140-6-thomas.ff@spin-digital.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230103134040.41140-1-thomas.ff@spin-digital.com> References: <20230103134040.41140-1-thomas.ff@spin-digital.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 05/10] avformat: add demuxer and probe support for H266/VVC X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: QWRkIGRlbXV4ZXIgdG8gcHJvYmUgcmF3IHZ2YyBhbmQgcGFyc2UgdnZjYyBieXRlIHN0cmVhbSBm b3JtYXQuCgpDby1hdXRob3JlZC1ieTogTnVvIE1pIDxudW9taTIwMjFAZ21haWwuY29tPgotLS0K IGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICB8ICAgMSArCiBsaWJhdmZvcm1hdC9hbGxmb3JtYXRz LmMgfCAgIDEgKwogbGliYXZmb3JtYXQvZGVtdXguYyAgICAgIHwgICA3ICstCiBsaWJhdmZvcm1h dC92dmMuYyAgICAgICAgfCA5ODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBsaWJhdmZvcm1hdC92dmMuaCAgICAgICAgfCAgOTkgKysrKwogbGliYXZmb3JtYXQvdnZj ZGVjLmMgICAgIHwgIDYxICsrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMTUxIGluc2VydGlvbnMoKyks IDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvdnZjLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC92dmMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp YmF2Zm9ybWF0L3Z2Y2RlYy5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUgYi9s aWJhdmZvcm1hdC9NYWtlZmlsZQppbmRleCBkN2YxOThiZjM5Li4wMGFiNGRlZDg5IDEwMDY0NAot LS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQorKysgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQpAQCAt NTk1LDYgKzU5NSw3IEBAIE9CSlMtJChDT05GSUdfVk9DX01VWEVSKSAgICAgICAgICAgICAgICAg Kz0gdm9jZW5jLm8gdm9jLm8KIE9CSlMtJChDT05GSUdfVlBLX0RFTVVYRVIpICAgICAgICAgICAg ICAgKz0gdnBrLm8KIE9CSlMtJChDT05GSUdfVlBMQVlFUl9ERU1VWEVSKSAgICAgICAgICAgKz0g dnBsYXllcmRlYy5vIHN1YnRpdGxlcy5vCiBPQkpTLSQoQ09ORklHX1ZRRl9ERU1VWEVSKSAgICAg ICAgICAgICAgICs9IHZxZi5vCitPQkpTLSQoQ09ORklHX1ZWQ19ERU1VWEVSKSAgICAgICAgICAg ICAgICs9IHZ2Y2RlYy5vIHJhd2RlYy5vCiBPQkpTLSQoQ09ORklHX1c2NF9ERU1VWEVSKSAgICAg ICAgICAgICAgICs9IHdhdmRlYy5vIHc2NC5vIHBjbS5vCiBPQkpTLSQoQ09ORklHX1c2NF9NVVhF UikgICAgICAgICAgICAgICAgICs9IHdhdmVuYy5vIHc2NC5vCiBPQkpTLSQoQ09ORklHX1dBVl9E RU1VWEVSKSAgICAgICAgICAgICAgICs9IHdhdmRlYy5vIHBjbS5vCmRpZmYgLS1naXQgYS9saWJh dmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKaW5kZXggNjIy NjJhZTkzNS4uNWZjZTViNDc3NCAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5j CisrKyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwpAQCAtNDc3LDYgKzQ3Nyw3IEBAIGV4dGVy biBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl92b2NfbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1 dEZvcm1hdCAgZmZfdnBrX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZf dnBsYXllcl9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX3ZxZl9kZW11 eGVyOworZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX3Z2Y19kZW11eGVyOwogZXh0ZXJu IGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX3c2NF9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWT3V0 cHV0Rm9ybWF0IGZmX3c2NF9tdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl93 YXZfZGVtdXhlcjsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2RlbXV4LmMgYi9saWJhdmZvcm1h dC9kZW11eC5jCmluZGV4IDJkZmQ4MmE2M2MuLjhkYmRlMjNmY2QgMTAwNjQ0Ci0tLSBhL2xpYmF2 Zm9ybWF0L2RlbXV4LmMKKysrIGIvbGliYXZmb3JtYXQvZGVtdXguYwpAQCAtMTIwLDYgKzEyMCw3 IEBAIHN0YXRpYyBpbnQgc2V0X2NvZGVjX2Zyb21fcHJvYmVfZGF0YShBVkZvcm1hdENvbnRleHQg KnMsIEFWU3RyZWFtICpzdCwKICAgICAgICAgeyAibXAzIiwgICAgICAgIEFWX0NPREVDX0lEX01Q MywgICAgICAgICAgQVZNRURJQV9UWVBFX0FVRElPICAgIH0sCiAgICAgICAgIHsgIm1wZWd2aWRl byIsICBBVl9DT0RFQ19JRF9NUEVHMlZJREVPLCAgIEFWTUVESUFfVFlQRV9WSURFTyAgICB9LAog ICAgICAgICB7ICJ0cnVlaGQiLCAgICAgQVZfQ09ERUNfSURfVFJVRUhELCAgICAgICBBVk1FRElB X1RZUEVfQVVESU8gICAgfSwKKyAgICAgICAgeyAidnZjIiwgICAgICAgIEFWX0NPREVDX0lEX1ZW QywgICAgICAgICAgQVZNRURJQV9UWVBFX1ZJREVPICAgIH0sCiAgICAgICAgIHsgMCB9CiAgICAg fTsKICAgICBpbnQgc2NvcmU7CkBAIC03NDMsNyArNzQ0LDggQEAgc3RhdGljIGludDY0X3Qgc2Vs ZWN0X2Zyb21fcHRzX2J1ZmZlcihBVlN0cmVhbSAqc3QsIGludDY0X3QgKnB0c19idWZmZXIsIGlu dDY0X3QKIHsKICAgICBGRlN0cmVhbSAqY29uc3Qgc3RpID0gZmZzdHJlYW0oc3QpOwogICAgIGlu dCBvbmVpbl9vbmVvdXQgPSBzdC0+Y29kZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0gy NjQgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBB Vl9DT0RFQ19JRF9IRVZDOworICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNv ZGVjX2lkICE9IEFWX0NPREVDX0lEX0hFVkMgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgc3Qt PmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9WVkM7CiAKICAgICBpZiAoIW9uZWlu X29uZW91dCkgewogICAgICAgICBpbnQgZGVsYXkgPSBzdGktPmF2Y3R4LT5oYXNfYl9mcmFtZXM7 CkBAIC05MzMsNyArOTM1LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9wa3RfZmllbGRzKEFWRm9y bWF0Q29udGV4dCAqcywgQVZTdHJlYW0gKnN0LAogICAgIGludDY0X3Qgb2Zmc2V0OwogICAgIEFW UmF0aW9uYWwgZHVyYXRpb247CiAgICAgaW50IG9uZWluX29uZW91dCA9IHN0LT5jb2RlY3Bhci0+ Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSDI2NCAmJgotICAgICAgICAgICAgICAgICAgICAgICBz dC0+Y29kZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0hFVkM7CisgICAgICAgICAgICAg ICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSEVWQyAmJgor ICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVD X0lEX1ZWQzsKIAogICAgIGlmIChzLT5mbGFncyAmIEFWRk1UX0ZMQUdfTk9GSUxMSU4pCiAgICAg ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Z2Yy5jIGIvbGliYXZmb3JtYXQv dnZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uY2UxMTI3MDVjMwot LS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L3Z2Yy5jCkBAIC0wLDAgKzEsOTg0IEBACisv KgorICogVlZDIGhlbHBlciBmdW5jdGlvbnMgZm9yIG11eGVycworICoKKyAqIENvcHlyaWdodCAo QykgMjAyMiwgVGhvbWFzIFNpZWRlbAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBl Zy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EK KyAqLworCisjaW5jbHVkZSAibGliYXZjb2RlYy9nZXRfYml0cy5oIgorI2luY2x1ZGUgImxpYmF2 Y29kZWMvZ29sb21iLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy92dmMuaCIKKyNpbmNsdWRlICJs aWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVkZSAiYXZjLmgiCisjaW5jbHVkZSAiYXZp by5oIgorI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ2dmMuaCIKKwordHlw ZWRlZiBzdHJ1Y3QgVlZDQ05BTFVuaXRBcnJheSB7CisgICAgdWludDhfdCBhcnJheV9jb21wbGV0 ZW5lc3M7CisgICAgdWludDhfdCBOQUxfdW5pdF90eXBlOworICAgIHVpbnQxNl90IG51bV9uYWx1 czsKKyAgICB1aW50MTZfdCAqbmFsX3VuaXRfbGVuZ3RoOworICAgIHVpbnQ4X3QgKipuYWxfdW5p dDsKK30gVlZDQ05BTFVuaXRBcnJheTsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDUFRMUmVjb3JkIHsK KyAgICB1aW50OF90IG51bV9ieXRlc19jb25zdHJhaW50X2luZm87CisgICAgdWludDhfdCBnZW5l cmFsX3Byb2ZpbGVfaWRjOworICAgIHVpbnQ4X3QgZ2VuZXJhbF90aWVyX2ZsYWc7CisgICAgdWlu dDhfdCBnZW5lcmFsX2xldmVsX2lkYzsKKyAgICB1aW50OF90IHB0bF9mcmFtZV9vbmx5X2NvbnN0 cmFpbnRfZmxhZzsKKyAgICB1aW50OF90IHB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZzsKKyAg ICB1aW50OF90IGdlbmVyYWxfY29uc3RyYWludF9pbmZvWzldOworICAgIHVpbnQ4X3QgKnB0bF9z dWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWc7CisgICAgdWludDhfdCAqc3VibGF5ZXJfbGV2ZWxf aWRjOworICAgIHVpbnQ4X3QgcHRsX251bV9zdWJfcHJvZmlsZXM7CisgICAgdWludDMyX3QgKmdl bmVyYWxfc3ViX3Byb2ZpbGVfaWRjOworfSBWVkNQVExSZWNvcmQ7CisKK3R5cGVkZWYgc3RydWN0 IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIHsKKyAgICB1aW50OF90IGxlbmd0aFNpemVN aW51c09uZTsKKyAgICB1aW50OF90IHB0bF9wcmVzZW50X2ZsYWc7CisgICAgdWludDE2X3Qgb2xz X2lkeDsKKyAgICB1aW50OF90IG51bV9zdWJsYXllcnM7CisgICAgdWludDhfdCBjb25zdGFudF9m cmFtZV9yYXRlOworICAgIHVpbnQ4X3QgY2hyb21hX2Zvcm1hdF9pZGM7CisgICAgdWludDhfdCBi aXRfZGVwdGhfbWludXM4OworICAgIFZWQ1BUTFJlY29yZCBwdGw7CisgICAgdWludDE2X3QgbWF4 X3BpY3R1cmVfd2lkdGg7CisgICAgdWludDE2X3QgbWF4X3BpY3R1cmVfaGVpZ2h0OworICAgIHVp bnQxNl90IGF2Z19mcmFtZV9yYXRlOworICAgIHVpbnQ4X3QgbnVtX29mX2FycmF5czsKKyAgICBW VkNDTkFMVW5pdEFycmF5ICphcnJheTsKK30gVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQ7 CisKK3R5cGVkZWYgc3RydWN0IFZWQ0NQcm9maWxlVGllckxldmVsIHsKKyAgICB1aW50OF90IHBy b2ZpbGVfaWRjOworICAgIHVpbnQ4X3QgdGllcl9mbGFnOworICAgIHVpbnQ4X3QgZ2VuZXJhbF9s ZXZlbF9pZGM7CisgICAgdWludDhfdCBwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc7Cisg ICAgdWludDhfdCBwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWc7CisvLyBnZW5lcmFsX2NvbnN0 cmFpbnRfaW5mbworICAgIHVpbnQ4X3QgZ2NpX3ByZXNlbnRfZmxhZzsKKyAgICB1aW50OF90IGdj aV9nZW5lcmFsX2NvbnN0cmFpbnRzWzldOworICAgIHVpbnQ4X3QgZ2NpX251bV9yZXNlcnZlZF9i aXRzOworLy8gZW5kIGdlbmVyYWxfY29uc3RyYWludF9pbmZvCisgICAgdWludDhfdCAqcHRsX3N1 YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZzsKKyAgICB1aW50OF90ICpzdWJsYXllcl9sZXZlbF9p ZGM7CisgICAgdWludDhfdCBwdGxfbnVtX3N1Yl9wcm9maWxlczsKKyAgICB1aW50MzJfdCAqZ2Vu ZXJhbF9zdWJfcHJvZmlsZV9pZGM7Cit9IFZWQ0NQcm9maWxlVGllckxldmVsOworCitzdGF0aWMg dm9pZCB2dmNjX3VwZGF0ZV9wdGwoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDQ1Byb2ZpbGVUaWVyTGV2ZWwgKnB0bCkK K3sKKyAgICAvKgorICAgICAqIFRoZSBsZXZlbCBpbmRpY2F0aW9uIGdlbmVyYWxfbGV2ZWxfaWRj IG11c3QgaW5kaWNhdGUgYSBsZXZlbCBvZgorICAgICAqIGNhcGFiaWxpdHkgZXF1YWwgdG8gb3Ig Z3JlYXRlciB0aGFuIHRoZSBoaWdoZXN0IGxldmVsIGluZGljYXRlZCBmb3IgdGhlCisgICAgICog aGlnaGVzdCB0aWVyIGluIGFsbCB0aGUgcGFyYW1ldGVyIHNldHMuCisgICAgICovCisgICAgaWYg KHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyA8IHB0bC0+dGllcl9mbGFnKQorICAgICAgICB2 dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMgPSBwdGwtPmdlbmVyYWxfbGV2ZWxfaWRjOworICAg IGVsc2UKKyAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjID0KKyAgICAgICAgICAg IEZGTUFYKHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYywgcHRsLT5nZW5lcmFsX2xldmVsX2lk Yyk7CisKKyAgICAvKgorICAgICAqIFRoZSB0aWVyIGluZGljYXRpb24gZ2VuZXJhbF90aWVyX2Zs YWcgbXVzdCBpbmRpY2F0ZSBhIHRpZXIgZXF1YWwgdG8gb3IKKyAgICAgKiBncmVhdGVyIHRoYW4g dGhlIGhpZ2hlc3QgdGllciBpbmRpY2F0ZWQgaW4gYWxsIHRoZSBwYXJhbWV0ZXIgc2V0cy4KKyAg ICAgKi8KKyAgICB2dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcgPQorICAgICAgICBGRk1BWCh2 dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcsIHB0bC0+dGllcl9mbGFnKTsKKworICAgIC8qCisg ICAgICogVGhlIHByb2ZpbGUgaW5kaWNhdGlvbiBnZW5lcmFsX3Byb2ZpbGVfaWRjIG11c3QgaW5k aWNhdGUgYSBwcm9maWxlIHRvCisgICAgICogd2hpY2ggdGhlIHN0cmVhbSBhc3NvY2lhdGVkIHdp dGggdGhpcyBjb25maWd1cmF0aW9uIHJlY29yZCBjb25mb3Jtcy4KKyAgICAgKgorICAgICAqIElm IHRoZSBzZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0cyBhcmUgbWFya2VkIHdpdGggZGlmZmVyZW50IHBy b2ZpbGVzLCB0aGVuCisgICAgICogdGhlIHN0cmVhbSBtYXkgbmVlZCBleGFtaW5hdGlvbiB0byBk ZXRlcm1pbmUgd2hpY2ggcHJvZmlsZSwgaWYgYW55LCB0aGUKKyAgICAgKiBlbnRpcmUgc3RyZWFt IGNvbmZvcm1zIHRvLiBJZiB0aGUgZW50aXJlIHN0cmVhbSBpcyBub3QgZXhhbWluZWQsIG9yIHRo ZQorICAgICAqIGV4YW1pbmF0aW9uIHJldmVhbHMgdGhhdCB0aGVyZSBpcyBubyBwcm9maWxlIHRv IHdoaWNoIHRoZSBlbnRpcmUgc3RyZWFtCisgICAgICogY29uZm9ybXMsIHRoZW4gdGhlIGVudGly ZSBzdHJlYW0gbXVzdCBiZSBzcGxpdCBpbnRvIHR3byBvciBtb3JlCisgICAgICogc3ViLXN0cmVh bXMgd2l0aCBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIHJlY29yZHMgaW4gd2hpY2ggdGhlc2UgcnVs ZXMgY2FuCisgICAgICogYmUgbWV0LgorICAgICAqCisgICAgICogTm90ZTogc2V0IHRoZSBwcm9m aWxlIHRvIHRoZSBoaWdoZXN0IHZhbHVlIGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LgorICAg ICAqLworICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjID0KKyAgICAgICAgRkZNQVgo dnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9pZGMsIHB0bC0+cHJvZmlsZV9pZGMpOworCisgICAg LyoKKyAgICAgKiBFYWNoIGJpdCBpbiBmbGFncyBtYXkgb25seSBiZSBzZXQgaWYgYWxsCisgICAg ICogdGhlIHBhcmFtZXRlciBzZXRzIHNldCB0aGF0IGJpdC4KKyAgICAgKi8KKyAgICB2dmNjLT5w dGwucHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnICY9CisgICAgICAgIHB0bC0+cHRsX2Zy YW1lX29ubHlfY29uc3RyYWludF9mbGFnOworICAgIHZ2Y2MtPnB0bC5wdGxfbXVsdGlsYXllcl9l bmFibGVkX2ZsYWcgJj0gcHRsLT5wdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWc7CisKKyAgICAv KgorICAgICAqIENvbnN0cmFpbnRzIEluZm8KKyAgICAgKi8KKyAgICBpZiAocHRsLT5nY2lfcHJl c2VudF9mbGFnKSB7CisgICAgICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZv ID0gOTsKKyAgICAgICAgbWVtY3B5KCZ2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm9b MF0sCisgICAgICAgICAgICAgICAmcHRsLT5nY2lfZ2VuZXJhbF9jb25zdHJhaW50c1swXSwgc2l6 ZW9mKHVpbnQ4X3QpICogOSk7CisKKyAgICB9IGVsc2UgeworICAgICAgICB2dmNjLT5wdGwubnVt X2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9IDE7CisgICAgICAgIG1lbXNldCgmdnZjYy0+cHRsLmdl bmVyYWxfY29uc3RyYWludF9pbmZvWzBdLCAwLCBzaXplb2YodWludDhfdCkgKiA5KTsKKyAgICB9 CisKKyAgICAvKgorICAgICAqIEVhY2ggYml0IGluIGZsYWdzIG1heSBvbmx5IGJlIHNldCBpZiBv bmUgb2YKKyAgICAgKiB0aGUgcGFyYW1ldGVyIHNldHMgc2V0IHRoYXQgYml0LgorICAgICAqLwor ICAgIHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnID0KKyAgICAgICAg KHVpbnQ4X3QgKikgbWFsbG9jKHNpemVvZih1aW50OF90KSAqIHZ2Y2MtPm51bV9zdWJsYXllcnMg LSAxKTsKKyAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjID0KKyAgICAgICAgKHVpbnQ4 X3QgKikgbWFsbG9jKHNpemVvZih1aW50OF90KSAqIHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxKTsK KworICAgIG1lbXNldCh2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZywg MCwKKyAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpICogdnZjYy0+bnVtX3N1YmxheWVycyAtIDEp OworICAgIG1lbXNldCh2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjLCAwLAorICAgICAgICAg ICBzaXplb2YodWludDhfdCkgKiB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMSk7CisKKyAgICBmb3Ig KGludCBpID0gdnZjYy0+bnVtX3N1YmxheWVycyAtIDI7IGkgPj0gMDsgaS0tKSB7CisgICAgICAg IHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldIHw9CisgICAgICAg ICAgICBwdGwtPnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV07CisgICAgICAgIGlm ICh2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSkgeworICAgICAg ICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSA9CisgICAgICAgICAgICAgICAg RkZNQVgodnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSwKKyAgICAgICAgICAgICAgICAg ICAgICBwdGwtPnN1YmxheWVyX2xldmVsX2lkY1tpXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBpZiAoaSA9PSB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMSkgeworICAgICAgICAgICAg ICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPSB2dmNjLT5wdGwuZ2VuZXJhbF9s ZXZlbF9pZGM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZ2Y2MtPnB0 bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPQorICAgICAgICAgICAgICAgICAgICB2dmNjLT5wdGwu c3VibGF5ZXJfbGV2ZWxfaWRjW2kgKyAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKworICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyA9CisgICAgICAgIEZGTUFY KHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcywgcHRsLT5wdGxfbnVtX3N1Yl9wcm9maWxl cyk7CisgICAgaWYgKHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcykgeworICAgICAgICB2 dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMgPQorICAgICAgICAgICAgKHVpbnQzMl90 ICopIG1hbGxvYyhzaXplb2YodWludDMyX3QpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsKKyAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXM7IGkrKykgeworICAgICAg ICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldID0KKyAgICAgICAgICAg ICAgICBwdGwtPmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldOworICAgICAgICB9CisgICAgfSBl bHNlIHsKKyAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0KKyAgICAg ICAgICAgICh1aW50MzJfdCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgfQorfQor CitzdGF0aWMgdm9pZCB2dmNjX3BhcnNlX3B0bChHZXRCaXRDb250ZXh0ICpnYiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHByb2ZpbGVUaWVyUHJlc2Vu dEZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3N1Yl9s YXllcnNfbWludXMxKQoreworICAgIFZWQ0NQcm9maWxlVGllckxldmVsIGdlbmVyYWxfcHRsOwor ICAgIGludCBqOworCisgICAgaWYgKHByb2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsKKyAgICAgICAg Z2VuZXJhbF9wdGwucHJvZmlsZV9pZGMgPSBnZXRfYml0cyhnYiwgNyk7CisgICAgICAgIGdlbmVy YWxfcHRsLnRpZXJfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgfQorICAgIGdlbmVyYWxfcHRs LmdlbmVyYWxfbGV2ZWxfaWRjID0gZ2V0X2JpdHMoZ2IsIDgpOworCisgICAgZ2VuZXJhbF9wdGwu cHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBnZW5l cmFsX3B0bC5wdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAg IGlmIChwcm9maWxlVGllclByZXNlbnRGbGFnKSB7ICAgICAgIC8vIHBhcnNlIGNvbnN0cmFpbnQg aW5mbworICAgICAgICBnZW5lcmFsX3B0bC5nY2lfcHJlc2VudF9mbGFnID0gZ2V0X2JpdHMxKGdi KTsKKyAgICAgICAgaWYgKGdlbmVyYWxfcHRsLmdjaV9wcmVzZW50X2ZsYWcpIHsKKyAgICAgICAg ICAgIGZvciAoaiA9IDA7IGogPCA4OyBqKyspCisgICAgICAgICAgICAgICAgZ2VuZXJhbF9wdGwu Z2NpX2dlbmVyYWxfY29uc3RyYWludHNbal0gPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgICAg ICBnZW5lcmFsX3B0bC5nY2lfZ2VuZXJhbF9jb25zdHJhaW50c1s4XSA9IDA7CisgICAgICAgICAg ICBnZW5lcmFsX3B0bC5nY2lfZ2VuZXJhbF9jb25zdHJhaW50c1s4XSA9IGdldF9iaXRzKGdiLCA3 KTsKKworICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX251bV9yZXNlcnZlZF9iaXRzID0gZ2V0 X2JpdHMoZ2IsIDgpOworICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBnZW5lcmFsX3B0bC5nY2lf bnVtX3Jlc2VydmVkX2JpdHMpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChnYi0+aW5kZXgg JSA4ICE9IDApCisgICAgICAgICAgICBza2lwX2JpdHMxKGdiKTsKKyAgICB9CisKKyAgICBnZW5l cmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnID0KKyAgICAgICAgKHVpbnQ4 X3QgKikgbWFsbG9jKHNpemVvZih1aW50OF90KSAqIG1heF9zdWJfbGF5ZXJzX21pbnVzMSk7Cisg ICAgZm9yIChpbnQgaSA9IG1heF9zdWJfbGF5ZXJzX21pbnVzMSAtIDE7IGkgPj0gMDsgaS0tKSB7 CisgICAgICAgIGdlbmVyYWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0g PSBnZXRfYml0czEoZ2IpOworICAgIH0KKyAgICB3aGlsZSAoZ2ItPmluZGV4ICUgOCAhPSAwKQor ICAgICAgICBza2lwX2JpdHMxKGdiKTsKKworICAgIGdlbmVyYWxfcHRsLnN1YmxheWVyX2xldmVs X2lkYyA9CisgICAgICAgICh1aW50OF90ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiBtYXhf c3ViX2xheWVyc19taW51czEpOworICAgIGZvciAoaW50IGkgPSBtYXhfc3ViX2xheWVyc19taW51 czEgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBpZiAoZ2VuZXJhbF9wdGwucHRsX3N1Ymxh eWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSkKKyAgICAgICAgICAgIGdlbmVyYWxfcHRsLnN1Ymxh eWVyX2xldmVsX2lkY1tpXSA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICB9CisKKyAgICBpZiAocHJv ZmlsZVRpZXJQcmVzZW50RmxhZykgeworICAgICAgICBnZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9w cm9maWxlcyA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICAgICAgaWYgKGdlbmVyYWxfcHRsLnB0bF9u dW1fc3ViX3Byb2ZpbGVzKSB7CisgICAgICAgICAgICBnZW5lcmFsX3B0bC5nZW5lcmFsX3N1Yl9w cm9maWxlX2lkYyA9CisgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopIG1hbGxvYyhzaXplb2Yo dWludDMyX3QpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYWxf cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJvZmlsZXM7IGkrKykgeworICAgICAgICAgICAg ICAgIGdlbmVyYWxfcHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldID0gZ2V0X2JpdHNfbG9u ZyhnYiwgMzIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg Z2VuZXJhbF9wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMgPQorICAgICAgICAgICAgICAgICh1 aW50MzJfdCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIH0KKyAgICB9CisK KyAgICB2dmNjX3VwZGF0ZV9wdGwodnZjYywgJmdlbmVyYWxfcHRsKTsKKworICAgIGZyZWUoZ2Vu ZXJhbF9wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZyk7CisgICAgZnJlZShnZW5l cmFsX3B0bC5zdWJsYXllcl9sZXZlbF9pZGMpOworICAgIGZyZWUoZ2VuZXJhbF9wdGwuZ2VuZXJh bF9zdWJfcHJvZmlsZV9pZGMpOworfQorCitzdGF0aWMgaW50IHZ2Y2NfcGFyc2VfdnBzKEdldEJp dENvbnRleHQgKmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmln dXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICB1bnNpZ25lZCBpbnQgdnBzX21heF9sYXllcnNf bWludXMxOworICAgIHVuc2lnbmVkIGludCB2cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxOworICAg IHVuc2lnbmVkIGludCB2cHNfZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWc7CisgICAg dW5zaWduZWQgaW50IHZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZzsKKyAgICB1bnNpZ25l ZCBpbnQgdnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xzX2ZsYWc7CisgICAgdW5zaWduZWQgaW50IHZw c19vbHNfbW9kZV9pZGM7CisKKyAgICB1bnNpZ25lZCBpbnQgKnZwc19wdF9wcmVzZW50X2ZsYWc7 CisgICAgdW5zaWduZWQgaW50ICp2cHNfcHRsX21heF90aWQ7CisgICAgdW5zaWduZWQgaW50IHZw c19udW1fcHRsc19taW51czEgPSAwOworCisgICAgLyoKKyAgICAgKiB2cHNfdmlkZW9fcGFyYW1l dGVyX3NldF9pZCB1KDQpCisgICAgICovCisgICAgc2tpcF9iaXRzKGdiLCA0KTsKKworICAgIHZw c19tYXhfbGF5ZXJzX21pbnVzMSA9IGdldF9iaXRzKGdiLCA2KTsKKyAgICB2cHNfbWF4X3N1Yl9s YXllcnNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDMpOworCisgICAgLyoKKyAgICAgKiBudW1UZW1w b3JhbExheWVycyBncmVhdGVyIHRoYW4gMSBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIHRvIHdo aWNoIHRoaXMKKyAgICAgKiBjb25maWd1cmF0aW9uIHJlY29yZCBhcHBsaWVzIGlzIHRlbXBvcmFs bHkgc2NhbGFibGUgYW5kIHRoZSBjb250YWluZWQKKyAgICAgKiBudW1iZXIgb2YgdGVtcG9yYWwg bGF5ZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzIHRlbXBvcmFsIHN1Yi1sYXllciBvcgorICAgICAq IHN1Yi1sYXllciBpbiBJU08vSUVDIDIzMDA4LTIpIGlzIGVxdWFsIHRvIG51bVRlbXBvcmFsTGF5 ZXJzLiBWYWx1ZSAxCisgICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSBpcyBub3QgdGVt cG9yYWxseSBzY2FsYWJsZS4gVmFsdWUgMCBpbmRpY2F0ZXMKKyAgICAgKiB0aGF0IGl0IGlzIHVu a25vd24gd2hldGhlciB0aGUgc3RyZWFtIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUuCisgICAgICov CisgICAgdnZjYy0+bnVtX3N1YmxheWVycyA9IEZGTUFYKHZ2Y2MtPm51bV9zdWJsYXllcnMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwc19tYXhfc3ViX2xheWVyc19taW51czEg KyAxKTsKKworICAgIGlmICh2cHNfbWF4X2xheWVyc19taW51czEgPiAwICYmIHZwc19tYXhfc3Vi X2xheWVyc19taW51czEgPiAwKQorICAgICAgICB2cHNfZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhf dGlkX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgIGlmICh2cHNfbWF4X2xheWVyc19taW51czEg PiAwKQorICAgICAgICB2cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWcgPSBnZXRfYml0czEo Z2IpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gdnBzX21heF9sYXllcnNfbWludXMxOyBp KyspIHsKKyAgICAgICAgc2tpcF9iaXRzKGdiLCA2KTsgICAgLy92cHNfZGVmYXVsdF9wdGxfZHBi X2hyZF9tYXhfdGlkX2ZsYWdbaV0KKyAgICAgICAgaWYgKGkgPiAwICYmICF2cHNfYWxsX2luZGVw ZW5kYW50X2xheWVyX2ZsYWcpIHsKKyAgICAgICAgICAgIGlmIChnZXRfYml0czEoZ2IpKSB7ICAg IC8vIHZwc19pbmRlcGVuZGFudF9sYXllcl9mbGFnCisgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IHZwc19tYXhfdGlkX3JlZl9wcmVzZW50X2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAg ICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAg ICAgIGlmICh2cHNfbWF4X3RpZF9yZWZfcHJlc2VudF9mbGFnICYmIGdldF9iaXRzMShnYikpICAv LyB2cHNfZGlyZWN0X3JlZl9sYXllcl9mbGFnW2ldW2pdCisgICAgICAgICAgICAgICAgICAgICAg ICBza2lwX2JpdHMoZ2IsIDMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2cHNf bWF4X3RpZF9pbF9yZWZfcGljc19wbHVzMQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2cHNfbWF4X2xheWVyc19taW51czEgPiAw KSB7CisgICAgICAgIGlmICh2cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWcpCisgICAgICAg ICAgICB2cHNfZWFjaF9sYXllcl9pc19hbl9vbHNfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAg ICAgIGlmICh2cHNfZWFjaF9sYXllcl9pc19hbl9vbHNfZmxhZykgeworICAgICAgICAgICAgaWYg KCF2cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWcpCisgICAgICAgICAgICAgICAgdnBzX29s c19tb2RlX2lkYyA9IGdldF9iaXRzKGdiLCAyKTsKKyAgICAgICAgICAgIGlmICh2cHNfb2xzX21v ZGVfaWRjID09IDIpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdnBzX251bV9vdXRw dXRfbGF5ZXJfc2V0c19taW51czIgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgICAgICAgICAg Zm9yIChpbnQgaSA9IDE7IGkgPD0gdnBzX251bV9vdXRwdXRfbGF5ZXJfc2V0c19taW51czIgKyAx OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gdnBzX21h eF9sYXllcnNfbWludXMxOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYml0 czEoZ2IpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZwc19udW1fcHRsc19taW51czEgPSBnZXRfYml0 cyhnYiwgOCk7CisgICAgfQorCisgICAgdnBzX3B0X3ByZXNlbnRfZmxhZyA9CisgICAgICAgICh1 bnNpZ25lZCBpbnQgKikgbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHZwc19udW1fcHRsc19taW51czEgKyAxKSk7CisgICAgdnBz X3B0bF9tYXhfdGlkID0KKyAgICAgICAgKHVuc2lnbmVkIGludCAqKSBtYWxsb2Moc2l6ZW9mKHVu c2lnbmVkIGludCkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnBzX251bV9w dGxzX21pbnVzMSArIDEpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSB2cHNfbnVtX3B0bHNf bWludXMxOyBpKyspIHsKKyAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgdnBzX3B0X3By ZXNlbnRfZmxhZ1tpXSA9IGdldF9iaXRzMShnYik7CisgICAgICAgIGlmICghdnBzX2RlZmF1bHRf cHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFnKQorICAgICAgICAgICAgdnBzX3B0bF9tYXhfdGlkW2ld ID0gZ2V0X2JpdHMoZ2IsIDMpOworICAgIH0KKworICAgIHdoaWxlIChnYi0+aW5kZXggJSA4ICE9 IDApCisgICAgICAgIHNraXBfYml0czEoZ2IpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0g dnBzX251bV9wdGxzX21pbnVzMTsgaSsrKSB7CisgICAgICAgIHZ2Y2NfcGFyc2VfcHRsKGdiLCB2 dmNjLCB2cHNfcHRfcHJlc2VudF9mbGFnW2ldLCB2cHNfcHRsX21heF90aWRbaV0pOworICAgIH0K KworICAgIGZyZWUodnBzX3B0X3ByZXNlbnRfZmxhZyk7CisgICAgZnJlZSh2cHNfcHRsX21heF90 aWQpOworCisgICAgLyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0aGlzIHBvaW50ICov CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnZjY19wYXJzZV9zcHMoR2V0Qml0Q29u dGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0 aW9uUmVjb3JkICp2dmNjKQoreworICAgIHVuc2lnbmVkIGludCBzcHNfbWF4X3N1Yl9sYXllcnNf bWludXMxLCBsb2cyX2N0dV9zaXplX21pbnVzNTsKKyAgICAvL3Vuc2lnbmVkIGludCBudW1fc2hv cnRfdGVybV9yZWZfcGljX3NldHMsIG51bV9kZWx0YV9wb2NzW1ZWQ19NQVhfUkVGX1BJQ19MSVNU U107CisgICAgLy91bnNpZ25lZCBpbnQgc3BzX2Nocm9tYV9mb3JtYXRfaWRjOworICAgIHVuc2ln bmVkIGludCBzcHNfc3VicGljX3NhbWVfc2l6ZV9mbGFnLCBzcHNfcGljX2hlaWdodF9tYXhfaW5f bHVtYV9zYW1wbGUsCisgICAgICAgIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlOwor ICAgIHVuc2lnbmVkIGludCBzcHNfaW5kZXBlbmRhbnRfc3VicGljc19mbGFnOworICAgIHVuc2ln bmVkIGludCBmbGFnOworCisgICAgc2tpcF9iaXRzKGdiLCA4KTsgIC8vIHNwc19zZXFfcGFyYW1l dGVyX3NldF9pZCAmJiBzcHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZAorICAgIHNwc19tYXhfc3Vi X2xheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwgMyk7CisKKyAgICAvKgorICAgICAqIG51bVRl bXBvcmFsTGF5ZXJzIGdyZWF0ZXIgdGhhbiAxIGluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gdG8g d2hpY2ggdGhpcworICAgICAqIGNvbmZpZ3VyYXRpb24gcmVjb3JkIGFwcGxpZXMgaXMgdGVtcG9y YWxseSBzY2FsYWJsZSBhbmQgdGhlIGNvbnRhaW5lZAorICAgICAqIG51bWJlciBvZiB0ZW1wb3Jh bCBsYXllcnMgKGFsc28gcmVmZXJyZWQgdG8gYXMgdGVtcG9yYWwgc3ViLWxheWVyIG9yCisgICAg ICogc3ViLWxheWVyIGluIElTTy9JRUMgMjMwMDgtMikgaXMgZXF1YWwgdG8gbnVtVGVtcG9yYWxM YXllcnMuIFZhbHVlIDEKKyAgICAgKiBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIGlzIG5vdCB0 ZW1wb3JhbGx5IHNjYWxhYmxlLiBWYWx1ZSAwIGluZGljYXRlcworICAgICAqIHRoYXQgaXQgaXMg dW5rbm93biB3aGV0aGVyIHRoZSBzdHJlYW0gaXMgdGVtcG9yYWxseSBzY2FsYWJsZS4KKyAgICAg Ki8KKyAgICB2dmNjLT5udW1fc3VibGF5ZXJzID0gRkZNQVgodnZjYy0+bnVtX3N1YmxheWVycywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BzX21heF9zdWJfbGF5ZXJzX21pbnVz MSArIDEpOworCisgICAgdnZjYy0+Y2hyb21hX2Zvcm1hdF9pZGMgPSBnZXRfYml0cyhnYiwgMik7 CisgICAgbG9nMl9jdHVfc2l6ZV9taW51czUgPSBnZXRfYml0cyhnYiwgMik7CisKKyAgICBpZiAo Z2V0X2JpdHMxKGdiKSkgICAgICAgICAgLy9zcHNfcHRsX2RwYl9ocmRfcGFyYW1zX3ByZXNlbnRf ZmxhZworICAgICAgICB2dmNjX3BhcnNlX3B0bChnYiwgdnZjYywgMSwgc3BzX21heF9zdWJfbGF5 ZXJzX21pbnVzMSk7CisKKyAgICBmbGFnID0gZ2V0X2JpdHMoZ2IsIDEpOyAgICAgLy9za2lwX2Jp dHMxKGdiKTsgLy9zcHNfZ2RyX2VuYWJsZWRfZmxhZworICAgIGZsYWcgPSBnZXRfYml0cyhnYiwg MSk7ICAgICAvL3Nwc19yZWZfcGljX3Jlc2FtcGxpbmdfZW5hYmxlZF9mbGFnCisgICAgaWYgKGZs YWcpIHsgICAgICAgICAgICAgICAgIC8vc3BzX3JlZl9waWNfcmVzYW1wbGluZ19lbmFibGVkX2Zs YWcKKyAgICAgICAgZmxhZyA9IGdldF9iaXRzKGdiLCAxKTsgLy9za2lwX2JpdHMxKGdiKTsgLy9z cHNfcmVzX2NoYW5nZV9pbl9jbHZzX2FsbG93ZWRfZmxhZworICAgIH0KKworICAgIHNwc19waWNf d2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICB2 dmNjLT5tYXhfcGljdHVyZV93aWR0aCA9CisgICAgICAgIEZGTUFYKHZ2Y2MtPm1heF9waWN0dXJl X3dpZHRoLCBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZSk7CisgICAgc3BzX3BpY19o ZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICB2 dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQgPQorICAgICAgICBGRk1BWCh2dmNjLT5tYXhfcGljdHVy ZV9oZWlnaHQsIHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZSk7CisKKyAgICBpZiAo Z2V0X2JpdHMxKGdiKSkgeworICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNf Y29uZl93aW5fbGVmdF9vZmZzZXQKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8g c3BzX2NvbmZfd2luX3JpZ2h0X29mZnNldAorICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2Ip OyAvLyBzcHNfY29uZl93aW5fdG9wX29mZnNldAorICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmco Z2IpOyAvLyBzcHNfY29uZl93aW5fYm90dG9tX29mZnNldAorICAgIH0KKworICAgIGlmIChnZXRf Yml0czEoZ2IpKSB7ICAgICAgICAvLyBzcHNfc3VicGljX2luZm9fcHJlc2VudF9mbGFnCisgICAg ICAgIHVuc2lnbmVkIGludCBzcHNfbnVtX3N1YnBpY3NfbWludXMxID0gZ2V0X3VlX2dvbG9tYl9s b25nKGdiKTsKKyAgICAgICAgaWYgKHNwc19udW1fc3VicGljc19taW51czEgPiAwKSB7ICAgICAg IC8vIHNwc19udW1fc3VicGljc19taW51czEKKyAgICAgICAgICAgIHNwc19pbmRlcGVuZGFudF9z dWJwaWNzX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgc3BzX3N1YnBpY19zYW1l X3NpemVfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQg aSA9IDA7CisgICAgICAgICAgICAgc3BzX251bV9zdWJwaWNzX21pbnVzMSA+IDAgJiYgaSA8PSBz cHNfbnVtX3N1YnBpY3NfbWludXMxOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghc3BzX3N1YnBp Y19zYW1lX3NpemVfZmxhZyB8fCBpID09IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0g RkZNSU4obG9nMl9jdHVfc2l6ZV9taW51czUgKyA1LCAxNik7CisgICAgICAgICAgICAgICAgaWYg KGkgPiAwICYmIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlID4gMTI4KQorICAgICAg ICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGkg PiAwICYmIHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZSA+IDEyOCkKKyAgICAgICAg ICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBsZW4pOworICAgICAgICAgICAgICAgIGlmIChpIDwg c3BzX251bV9zdWJwaWNzX21pbnVzMQorICAgICAgICAgICAgICAgICAgICAmJiBzcHNfcGljX3dp ZHRoX21heF9pbl9sdW1hX3NhbXBsZSA+IDEyOCkKKyAgICAgICAgICAgICAgICAgICAgc2tpcF9i aXRzKGdiLCBsZW4pOworICAgICAgICAgICAgICAgIGlmIChpIDwgc3BzX251bV9zdWJwaWNzX21p bnVzMQorICAgICAgICAgICAgICAgICAgICAmJiBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9z YW1wbGUgPiAxMjgpCisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgbGVuKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc3BzX2luZGVwZW5kYW50X3N1YnBpY3NfZmxh ZykgeworICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgMik7ICAgICAgIC8vIHNwc19zdWJw aWNfdHJlYXRlZF9hc19waWNfZmxhZyAmJiBzcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3N1YnBpY19l bmFibGVkX2ZsYWcKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnZXRfdWVfZ29s b21iX2xvbmcoZ2IpOyAvLyBzcHNfc3VicGljX2lkX2xlbl9taW51czEKKyAgICAgICAgaWYgKGdl dF9iaXRzMShnYikpIHsgICAgLy8gc3BzX3N1YnBpY19pZF9tYXBwaW5nX2V4cGxpY2l0bHlfc2ln bmFsbGVkX2ZsYWcKKyAgICAgICAgICAgIGlmIChnZXRfYml0czEoZ2IpKSAgLy8gc3BzX3N1YnBp Y19pZF9tYXBwaW5nX3ByZXNlbnRfZmxhZworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDw9IHNwc19udW1fc3VicGljc19taW51czE7IGkrKykgeworICAgICAgICAgICAgICAgICAg ICBza2lwX2JpdHMxKGdiKTsgICAgIC8vIHNwc19zdWJwaWNfaWRbaV0KKyAgICAgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdnZjYy0+Yml0X2RlcHRoX21pbnVzOCA9IGdldF91 ZV9nb2xvbWJfbG9uZyhnYik7CisKKyAgICAvKiBub3RoaW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0 IHRoaXMgcG9pbnQgKi8KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dmNjX3BhcnNl X3BwcyhHZXRCaXRDb250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVj b2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisKKyAgICAvLyBOb3RoaW5nIG9mIGlt cG9ydGFuY2UgdG8gcGFyc2UgaW4gUFBTCisgICAgLyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2Mg cGFzdCB0aGlzIHBvaW50ICovCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5hbF91 bml0X3BhcnNlX2hlYWRlcihHZXRCaXRDb250ZXh0ICpnYiwgdWludDhfdCAqbmFsX3R5cGUpCit7 CisgICAgLyoKKyAgICAgKiBmb3JiaWRkZW5femVyb19iaXQgICAgdSgxKQorICAgICAqIG51aF9y ZXNlcnZlZF96ZXJvX2JpdCB1KDEpCisgICAgICogbnVoX2xheWVyX2lkICAgICAgICAgIHUoNikK KyAgICAgKi8KKyAgICBza2lwX2JpdHMoZ2IsIDgpOworICAgICpuYWxfdHlwZSA9IGdldF9iaXRz KGdiLCA1KTsKKworICAgIC8qCisgICAgICogbnVoX3RlbXBvcmFsX2lkX3BsdXMxIHUoMykKKyAg ICAgKi8KKyAgICBza2lwX2JpdHMoZ2IsIDMpOworfQorCitzdGF0aWMgaW50IHZ2Y2NfYXJyYXlf YWRkX25hbF91bml0KHVpbnQ4X3QgKm5hbF9idWYsIHVpbnQzMl90IG5hbF9zaXplLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG5hbF90eXBlLCBpbnQgcHNfYXJy YXlfY29tcGxldGVuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNE ZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICBpbnQgcmV0OworICAgIHVp bnQ4X3QgaW5kZXg7CisgICAgdWludDE2X3QgbnVtX25hbHVzOworICAgIFZWQ0NOQUxVbml0QXJy YXkgKmFycmF5OworCisgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdnZjYy0+bnVtX29mX2Fy cmF5czsgaW5kZXgrKykKKyAgICAgICAgaWYgKHZ2Y2MtPmFycmF5W2luZGV4XS5OQUxfdW5pdF90 eXBlID09IG5hbF90eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoaW5kZXggPj0g dnZjYy0+bnVtX29mX2FycmF5cykgeworICAgICAgICB1aW50OF90IGk7CisKKyAgICAgICAgcmV0 ID0KKyAgICAgICAgICAgIGF2X3JlYWxsb2NwX2FycmF5KCZ2dmNjLT5hcnJheSwgaW5kZXggKyAx LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFZWQ0NOQUxVbml0QXJyYXkp KTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAg ICAgIGZvciAoaSA9IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkgPD0gaW5kZXg7IGkrKykKKyAgICAg ICAgICAgIG1lbXNldCgmdnZjYy0+YXJyYXlbaV0sIDAsIHNpemVvZihWVkNDTkFMVW5pdEFycmF5 KSk7CisgICAgICAgIHZ2Y2MtPm51bV9vZl9hcnJheXMgPSBpbmRleCArIDE7CisgICAgfQorCisg ICAgYXJyYXkgPSAmdnZjYy0+YXJyYXlbaW5kZXhdOworICAgIG51bV9uYWx1cyA9IGFycmF5LT5u dW1fbmFsdXM7CisKKyAgICByZXQgPSBhdl9yZWFsbG9jcF9hcnJheSgmYXJyYXktPm5hbF91bml0 LCBudW1fbmFsdXMgKyAxLCBzaXplb2YodWludDhfdCAqKSk7CisgICAgaWYgKHJldCA8IDApCisg ICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPQorICAgICAgICBhdl9yZWFsbG9jcF9hcnJh eSgmYXJyYXktPm5hbF91bml0X2xlbmd0aCwgbnVtX25hbHVzICsgMSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAg IHJldHVybiByZXQ7CisKKyAgICBhcnJheS0+bmFsX3VuaXRbbnVtX25hbHVzXSA9IG5hbF9idWY7 CisgICAgYXJyYXktPm5hbF91bml0X2xlbmd0aFtudW1fbmFsdXNdID0gbmFsX3NpemU7CisgICAg YXJyYXktPk5BTF91bml0X3R5cGUgPSBuYWxfdHlwZTsKKyAgICBhcnJheS0+bnVtX25hbHVzKys7 CisKKyAgICAvKgorICAgICAqIFdoZW4gdGhlIHNhbXBsZSBlbnRyeSBuYW1lIGlzIOKAmHZ2YzHi gJksIHRoZSBkZWZhdWx0IGFuZCBtYW5kYXRvcnkgdmFsdWUgb2YKKyAgICAgKiBhcnJheV9jb21w bGV0ZW5lc3MgaXMgMSBmb3IgYXJyYXlzIG9mIGFsbCB0eXBlcyBvZiBwYXJhbWV0ZXIgc2V0cywg YW5kIDAKKyAgICAgKiBmb3IgYWxsIG90aGVyIGFycmF5cy4gV2hlbiB0aGUgc2FtcGxlIGVudHJ5 IG5hbWUgaXMg4oCYaGV2MeKAmSwgdGhlIGRlZmF1bHQKKyAgICAgKiB2YWx1ZSBvZiBhcnJheV9j b21wbGV0ZW5lc3MgaXMgMCBmb3IgYWxsIGFycmF5cy4KKyAgICAgKi8KKyAgICBpZiAobmFsX3R5 cGUgPT0gVlZDX1ZQU19OVVQgfHwgbmFsX3R5cGUgPT0gVlZDX1NQU19OVVQgfHwKKyAgICAgICAg bmFsX3R5cGUgPT0gVlZDX1BQU19OVVQpCisgICAgICAgIGFycmF5LT5hcnJheV9jb21wbGV0ZW5l c3MgPSBwc19hcnJheV9jb21wbGV0ZW5lc3M7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCB2dmNjX2FkZF9uYWxfdW5pdCh1aW50OF90ICpuYWxfYnVmLCB1aW50MzJfdCBuYWxfc2l6 ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVz cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25S ZWNvcmQgKnZ2Y2MpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgR2V0Qml0Q29udGV4dCBnYmM7 CisgICAgdWludDhfdCBuYWxfdHlwZTsKKyAgICB1aW50OF90ICpyYnNwX2J1ZjsKKyAgICB1aW50 MzJfdCByYnNwX3NpemU7CisKKyAgICByYnNwX2J1ZiA9IGZmX25hbF91bml0X2V4dHJhY3RfcmJz cChuYWxfYnVmLCBuYWxfc2l6ZSwgJnJic3Bfc2l6ZSwgMik7CisgICAgaWYgKCFyYnNwX2J1Zikg eworICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gZW5kOworICAg IH0KKworICAgIHJldCA9IGluaXRfZ2V0X2JpdHM4KCZnYmMsIHJic3BfYnVmLCByYnNwX3NpemUp OworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKworICAgIG5hbF91bml0X3Bh cnNlX2hlYWRlcigmZ2JjLCAmbmFsX3R5cGUpOworCisgICAgLyoKKyAgICAgKiBOb3RlOiBvbmx5 ICdkZWNsYXJhdGl2ZScgU0VJIG1lc3NhZ2VzIGFyZSBhbGxvd2VkIGluCisgICAgICogdnZjYy4g UGVyaGFwcyB0aGUgU0VJIHBsYXlsb2FkIHR5cGUgc2hvdWxkIGJlIGNoZWNrZWQKKyAgICAgKiBh bmQgbm9uLWRlY2xhcmF0aXZlIFNFSSBtZXNzYWdlcyBkaXNjYXJkZWQ/CisgICAgICovCisgICAg c3dpdGNoIChuYWxfdHlwZSkgeworICAgIGNhc2UgVlZDX09QSV9OVVQ6CisgICAgY2FzZSBWVkNf VlBTX05VVDoKKyAgICBjYXNlIFZWQ19TUFNfTlVUOgorICAgIGNhc2UgVlZDX1BQU19OVVQ6Cisg ICAgY2FzZSBWVkNfUFJFRklYX1NFSV9OVVQ6CisgICAgY2FzZSBWVkNfU1VGRklYX1NFSV9OVVQ6 CisgICAgICAgIHJldCA9IHZ2Y2NfYXJyYXlfYWRkX25hbF91bml0KG5hbF9idWYsIG5hbF9zaXpl LCBuYWxfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNfYXJy YXlfY29tcGxldGVuZXNzLCB2dmNjKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAg ICBnb3RvIGVuZDsKKyAgICAgICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX1ZQU19OVVQpCisg ICAgICAgICAgICByZXQgPSB2dmNjX3BhcnNlX3ZwcygmZ2JjLCB2dmNjKTsKKyAgICAgICAgZWxz ZSBpZiAobmFsX3R5cGUgPT0gVlZDX1NQU19OVVQpCisgICAgICAgICAgICByZXQgPSB2dmNjX3Bh cnNlX3NwcygmZ2JjLCB2dmNjKTsKKyAgICAgICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX1BQ U19OVVQpCisgICAgICAgICAgICByZXQgPSB2dmNjX3BhcnNlX3BwcygmZ2JjLCB2dmNjKTsKKyAg ICAgICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX09QSV9OVVQpIHsKKyAgICAgICAgICAgIC8v IG5vdCB5ZXQgc3VwcG9ydGVkCisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA8IDApCisgICAg ICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg cmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisg IGVuZDoKKyAgICBhdl9mcmVlKHJic3BfYnVmKTsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0 aWMgdm9pZCB2dmNjX2luaXQoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7 CisgICAgbWVtc2V0KHZ2Y2MsIDAsIHNpemVvZihWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29y ZCkpOworICAgIHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSA9IDM7ICAgICAgIC8vIDQgYnl0ZXMK KworICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvID0gMTsKKworICAgIHZ2 Y2MtPnB0bF9wcmVzZW50X2ZsYWcgPSAxOworfQorCitzdGF0aWMgdm9pZCB2dmNjX2Nsb3NlKFZW Q0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIHVpbnQ4X3QgaTsKKwor ICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKKyAgICAgICAg dnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzID0gMDsKKyAgICAgICAgYXZfZnJlZXAoJnZ2Y2MtPmFy cmF5W2ldLm5hbF91bml0KTsKKyAgICAgICAgYXZfZnJlZXAoJnZ2Y2MtPmFycmF5W2ldLm5hbF91 bml0X2xlbmd0aCk7CisgICAgfQorCisgICAgZnJlZSh2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xl dmVsX3ByZXNlbnRfZmxhZyk7CisgICAgZnJlZSh2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRj KTsKKyAgICBmcmVlKHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyk7CisKKyAgICB2 dmNjLT5udW1fb2ZfYXJyYXlzID0gMDsKKyAgICBhdl9mcmVlcCgmdnZjYy0+YXJyYXkpOworfQor CitzdGF0aWMgaW50IHZ2Y2Nfd3JpdGUoQVZJT0NvbnRleHQgKnBiLCBWVkNEZWNvZGVyQ29uZmln dXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICB1aW50OF90IGk7CisgICAgdWludDE2X3Qgaiwg dnBzX2NvdW50ID0gMCwgc3BzX2NvdW50ID0gMCwgcHBzX2NvdW50ID0gMDsKKyAgICB1bnNpZ25l ZCBjaGFyICpidWYgPSBOVUxMOworICAgIC8qCisgICAgICogSXQncyB1bmNsZWFyIGhvdyB0byBw cm9wZXJseSBjb21wdXRlIHRoZXNlIGZpZWxkcywgc28KKyAgICAgKiBsZXQncyBhbHdheXMgc2V0 IHRoZW0gdG8gdmFsdWVzIG1lYW5pbmcgJ3Vuc3BlY2lmaWVkJy4KKyAgICAgKi8KKyAgICB2dmNj LT5hdmdfZnJhbWVfcmF0ZSA9IDA7CisgICAgdnZjYy0+Y29uc3RhbnRfZnJhbWVfcmF0ZSA9IDE7 CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAibGVuZ3RoU2l6 ZU1pbnVzT25lOiAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2 Y2MtPmxlbmd0aFNpemVNaW51c09uZSk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwK KyAgICAgICAgICAgInB0bF9wcmVzZW50X2ZsYWc6ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1 OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGxfcHJlc2VudF9mbGFnKTsKKyAgICBhdl9sb2co TlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAib2xzX2lkeDogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLCB2dmNjLT5vbHNfaWR4KTsKKyAgICBhdl9sb2co TlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAibnVtX3N1YmxheWVyczogICAgICAgICAg ICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPm51bV9zdWJsYXll cnMpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJjb25zdGFu dF9mcmFtZV9yYXRlOiAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAg dnZjYy0+Y29uc3RhbnRfZnJhbWVfcmF0ZSk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFD RSwKKyAgICAgICAgICAgImNocm9tYV9mb3JtYXRfaWRjOiAgICAgICAgICAgICAgICAgICAlIiBQ Ukl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5jaHJvbWFfZm9ybWF0X2lkYyk7CisKKyAgICBh dl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiYml0X2RlcHRoX21pbnVzODog ICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPmJpdF9k ZXB0aF9taW51czgpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAg ICJudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvOiAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAg ICAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8pOworICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJnZW5lcmFsX3Byb2ZpbGVfaWRjOiAg ICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVy YWxfcHJvZmlsZV9pZGMpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAg ICAgICJnZW5lcmFsX3RpZXJfZmxhZzogICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwK KyAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnKTsKKyAgICBhdl9sb2coTlVM TCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiZ2VuZXJhbF9sZXZlbF9pZGM6ICAgICAgICAg ICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2xl dmVsX2lkYyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgInB0 bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzogICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAg ICAgICB2dmNjLT5wdGwucHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnKTsKKyAgICBhdl9s b2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAicHRsX211bHRpbGF5ZXJfZW5hYmxl ZF9mbGFnOiAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxf bXVsdGlsYXllcl9lbmFibGVkX2ZsYWcpOworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5wdGwu bnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbzsgaSsrKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAiZ2VuZXJhbF9jb25zdHJhaW50X2luZm9bJWRd OiAgICAgICAgICAlIiBQUkl1OCAiXG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+cHRsLmdl bmVyYWxfY29uc3RyYWludF9pbmZvW2ldKTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwg dnZjYy0+bnVtX3N1YmxheWVycyAtIDE7IGkrKykgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX1RSQUNFLAorICAgICAgICAgICAgICAgInB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2Zs YWdbJSIgUFJJdTggIl06ICAlIiBQUkl1OCAiXG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+ cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pOworICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAgInN1YmxheWVyX2xldmVsX2lkY1sl IiBQUkl1OCAiXTogJSIgUFJJdTggIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5z dWJsYXllcl9sZXZlbF9pZGNbaV0pOworICAgIH0KKworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df VFJBQ0UsCisgICAgICAgICAgICJudW1fc3ViX3Byb2ZpbGVzOiAgICAgICAgICAgICAgICAgICAg JSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVz KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXM7 IGkrKykgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAg ICAgImdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjWyUiIFBSSXU4ICJdOiAgICAgICAgICUiIFBSSXgz MiAiXG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVf aWRjW2ldKTsKKyAgICB9CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAg ICAgICAibWF4X3BpY3R1cmVfd2lkdGg6ICAgICAgICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4i LAorICAgICAgICAgICB2dmNjLT5tYXhfcGljdHVyZV93aWR0aCk7CisgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm1heF9waWN0dXJlX2hlaWdodDogICAgICAgICAg ICAgICAgICAlIiBQUkl1MTYgIlxuIiwKKyAgICAgICAgICAgdnZjYy0+bWF4X3BpY3R1cmVfaGVp Z2h0KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiYXZnX2Zy YW1lX3JhdGU6ICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLAorICAgICAgICAg ICB2dmNjLT5hdmdfZnJhbWVfcmF0ZSk7CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNF LAorICAgICAgICAgICAibnVtX29mX2FycmF5czogICAgICAgICAgICAgICAgICAgICAgICUiIFBS SXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPm51bV9vZl9hcnJheXMpOworICAgIGZvciAoaSA9 IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJhcnJheV9jb21wbGV0ZW5lc3NbJSIgUFJJ dTggIl06ICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2 Y2MtPmFycmF5W2ldLmFycmF5X2NvbXBsZXRlbmVzcyk7CisgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAiTkFMX3VuaXRfdHlwZVslIiBQUkl1OCAiXTog ICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsIGksCisgICAgICAgICAgICAgICB2dmNj LT5hcnJheVtpXS5OQUxfdW5pdF90eXBlKTsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19U UkFDRSwKKyAgICAgICAgICAgICAgICJudW1fbmFsdXNbJSIgUFJJdTggIl06ICAgICAgICAgICAg ICAgICAgICAgICAgJSIgUFJJdTE2ICJcbiIsIGksCisgICAgICAgICAgICAgICB2dmNjLT5hcnJh eVtpXS5udW1fbmFsdXMpOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgdnZjYy0+YXJyYXlbaV0u bnVtX25hbHVzOyBqKyspCisgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAor ICAgICAgICAgICAgICAgICAgICJuYWxfdW5pdF9sZW5ndGhbJSIgUFJJdTggIl1bJSIgUFJJdTE2 ICJdOiAgICAgICAgICAgICAgICUiCisgICAgICAgICAgICAgICAgICAgUFJJdTE2ICJcbiIsIGks IGosIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0X2xlbmd0aFtqXSk7CisgICAgfQorCisgICAgLyoK KyAgICAgKiBXZSBuZWVkIGF0IGxlYXN0IG9uZSBvZiBlYWNoOiBWUFMgYW5kIFNQUy4KKyAgICAg Ki8KKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKQorICAgICAg ICBzd2l0Y2ggKHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUpIHsKKyAgICAgICAgY2FzZSBW VkNfVlBTX05VVDoKKyAgICAgICAgICAgIHZwc19jb3VudCArPSB2dmNjLT5hcnJheVtpXS5udW1f bmFsdXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWVkNfU1BTX05VVDoKKyAg ICAgICAgICAgIHNwc19jb3VudCArPSB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWVkNfUFBTX05VVDoKKyAgICAgICAgICAgIHBwc19j b3VudCArPSB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBpZiAo IXNwc19jb3VudCB8fCBzcHNfY291bnQgPiBWVkNfTUFYX1NQU19DT1VOVCkKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICAvKiBiaXQoNSkgcmVzZXJ2ZWQgPSDigJgx MTExMeKAmWI7CisgICAgICAgdW5zaWduZWQgaW50ICgyKSBMZW5ndGhTaXplTWludXNPbmUKKyAg ICAgICB1bnNpZ25lZCBpbnQgKDEpIHB0bF9wcmVzZW50X2ZsYWcgKi8KKyAgICBhdmlvX3c4KHBi LCB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUgPDwgMSB8IHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcg fCAweGY4KTsKKworICAgIGlmICh2dmNjLT5wdGxfcHJlc2VudF9mbGFnKSB7CisgICAgICAgIC8q CisgICAgICAgICAqIHVuc2lnbmVkIGludCg5KSBvbHNfaWR4OworICAgICAgICAgKiB1bnNpZ25l ZCBpbnQoMykgbnVtX3N1YmxheWVyczsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDIpIGNvbnN0 YW50X2ZyYW1lX3JhdGU7CisgICAgICAgICAqIHVuc2lnbmVkIGludCgyKSBjaHJvbWFfZm9ybWF0 X2lkYzsgICAgICovCisgICAgICAgIGF2aW9fd2IxNihwYiwKKyAgICAgICAgICAgICAgICAgIHZ2 Y2MtPm9sc19pZHggPDwgNyB8IHZ2Y2MtPm51bV9zdWJsYXllcnMgPDwgNCB8IHZ2Y2MtPgorICAg ICAgICAgICAgICAgICAgY29uc3RhbnRfZnJhbWVfcmF0ZSA8PCAyIHwgdnZjYy0+Y2hyb21hX2Zv cm1hdF9pZGMpOworCisgICAgICAgIC8qIHVuc2lnbmVkIGludCgzKSBiaXRfZGVwdGhfbWludXM4 OworICAgICAgICAgICBiaXQoNSkgcmVzZXJ2ZWQgPSDigJgxMTExMeKAmWI7ICovCisgICAgICAg IGF2aW9fdzgocGIsIHZ2Y2MtPmJpdF9kZXB0aF9taW51czggPDwgNSB8IDB4MWYpOworCisgICAg ICAgIC8vVlZDUFRMUmVjb3JkCisKKyAgICAgICAgLyogYml0KDIpIHJlc2VydmVkID0g4oCYMDDi gJliOworICAgICAgICAgICB1bnNpZ25lZCBpbnQgKDYpIG51bV9ieXRlc19jb25zdHJhaW50X2lu Zm8gKi8KKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50 X2luZm8gJiAweDNmKTsKKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQgKDcpIGdlbmVyYWxfcHJv ZmlsZV9pZGMKKyAgICAgICAgICAgdW5zaWduZWQgaW50ICgxKSBnZW5lcmFsX3RpZXJfZmxhZyAq LworICAgICAgICBhdmlvX3c4KHBiLAorICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFs X3Byb2ZpbGVfaWRjIDw8IDEgfCB2dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcpOworCisgICAg ICAgIC8qIHVuc2lnbmVkIGludCAoOCkgZ2VuZXJhbF9sZXZlbF9pZGMgKi8KKyAgICAgICAgYXZp b193OChwYiwgdnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjKTsKKworICAgICAgICAvKgorICAg ICAgICAgKiB1bnNpZ25lZCBpbnQgKDEpIHB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZwor ICAgICAgICAgKiB1bnNpZ25lZCBpbnQgKDEpIHB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZwor ICAgICAgICAgKiB1bnNpZ25lZCBpbnQgKDgqbnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAtMikg Z2VuZXJhbF9jb25zdHJhaW50X2luZm8gKi8KKyAgICAgICAgYnVmID0KKyAgICAgICAgICAgICh1 bnNpZ25lZCBjaGFyICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgY2hhcikgKgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWlu dF9pbmZvKTsKKyAgICAgICAgKmJ1ZiA9IHZ2Y2MtPnB0bC5wdGxfZnJhbWVfb25seV9jb25zdHJh aW50X2ZsYWcgPDwgdnZjYy0+cHRsLgorICAgICAgICAgICAgbnVtX2J5dGVzX2NvbnN0cmFpbnRf aW5mbyAqIDggLSAxIHwgdnZjYy0+cHRsLgorICAgICAgICAgICAgcHRsX211bHRpbGF5ZXJfZW5h YmxlZF9mbGFnIDw8IHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvICoKKyAgICAg ICAgICAgIDggLSAyIHwgKnZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mbyA+PiAyOwor ICAgICAgICBhdmlvX3dyaXRlKHBiLCBidWYsIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWlu dF9pbmZvKTsKKyAgICAgICAgZnJlZShidWYpOworCisgICAgICAgIGlmICh2dmNjLT5udW1fc3Vi bGF5ZXJzID4gMSkgeworICAgICAgICAgICAgdWludDhfdCBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJl c2VudF9mbGFncyA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpID0gdnZjYy0+bnVtX3N1Ymxh eWVycyAtIDI7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgcHRsX3N1YmxheWVyX2xl dmVsX3ByZXNlbnRfZmxhZ3MgPQorICAgICAgICAgICAgICAgICAgICAocHRsX3N1YmxheWVyX2xl dmVsX3ByZXNlbnRfZmxhZ3MgPDwgMSB8IHZ2Y2MtPnB0bC4KKyAgICAgICAgICAgICAgICAgICAg IHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgYXZpb193OChwYiwgcHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ3MpOwor ICAgICAgICB9CisKKyAgICAgICAgZm9yIChpbnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAy OyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJf bGV2ZWxfcHJlc2VudF9mbGFnW2ldKQorICAgICAgICAgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2Mt PnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgLyogdW5z aWduZWQgaW50KDgpIG51bV9zdWJfcHJvZmlsZXM7ICovCisgICAgICAgIGF2aW9fdzgocGIsIHZ2 Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7 IGogPCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXM7IGorKykgeworICAgICAgICAgICAg LyogdW5zaWduZWQgaW50KDMyKSBnZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tqXTsgKi8KKyAgICAg ICAgICAgIGF2aW9fd2IzMihwYiwgdnZjYy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2pd KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vRW5kIG9mIFZ2Y1BUTFJlY29yZAorCisgICAgICAg IC8qCisgICAgICAgICAqIHVuc2lnbmVkIGludCgxNikgbWF4X3BpY3R1cmVfd2lkdGg7Ki8KKyAg ICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5tYXhfcGljdHVyZV93aWR0aCk7CisKKyAgICAgICAg LyoKKyAgICAgICAgICogdW5zaWduZWQgaW50KDE2KSBtYXhfcGljdHVyZV9oZWlnaHQ7Ki8KKyAg ICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQpOworCisgICAgICAg IC8qCisgICAgICAgICAqIHVuc2lnbmVkIGludCgxNikgYXZnX2ZyYW1lX3JhdGU7ICovCisgICAg ICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+YXZnX2ZyYW1lX3JhdGUpOworICAgIH0KKworICAgIC8q IHVuc2lnbmVkIGludCg4KSBudW1fb2ZfYXJyYXlzOyAqLworICAgIGF2aW9fdzgocGIsIHZ2Y2Mt Pm51bV9vZl9hcnJheXMpOworCisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJh eXM7IGkrKykgeworICAgICAgICAvKgorICAgICAgICAgKiBiaXQoMSkgYXJyYXlfY29tcGxldGVu ZXNzOworICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMikgcmVzZXJ2ZWQgPSAwOworICAgICAgICAg KiB1bnNpZ25lZCBpbnQoNSkgTkFMX3VuaXRfdHlwZTsKKyAgICAgICAgICovCisgICAgICAgIGF2 aW9fdzgocGIsIHZ2Y2MtPmFycmF5W2ldLmFycmF5X2NvbXBsZXRlbmVzcyA8PCA3IHwKKyAgICAg ICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlICYgMHgxZik7CisgICAgICAg IC8qIHVuc2lnbmVkIGludCgxNikgbnVtX25hbHVzOyAqLworICAgICAgICBpZiAodnZjYy0+YXJy YXlbaV0uTkFMX3VuaXRfdHlwZSAhPSBWVkNfRENJX05VVCAmJgorICAgICAgICAgICAgdnZjYy0+ YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAhPSBWVkNfT1BJX05VVCkKKyAgICAgICAgICAgIGF2aW9f d2IxNihwYiwgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzKTsKKyAgICAgICAgZm9yIChqID0gMDsg aiA8IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsgaisrKSB7CisgICAgICAgICAgICAvKiB1bnNp Z25lZCBpbnQoMTYpIG5hbF91bml0X2xlbmd0aDsgKi8KKyAgICAgICAgICAgIGF2aW9fd2IxNihw YiwgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoW2pdKTsKKworICAgICAgICAgICAgLyog Yml0KDgqbmFsX3VuaXRfbGVuZ3RoKSBuYWxfdW5pdDsgKi8KKyAgICAgICAgICAgIGF2aW9fd3Jp dGUocGIsIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0W2pdLAorICAgICAgICAgICAgICAgICAgICAg ICB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5ndGhbal0pOworICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl92dmNfYW5uZXhiMm1wNChBVklPQ29udGV4dCAq cGIsIGNvbnN0IHVpbnQ4X3QgKmJ1Zl9pbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6 ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3VudCkKK3sKKyAgICBpbnQgbnVtX3BzID0gMCwg cmV0ID0gMDsKKyAgICB1aW50OF90ICpidWYsICplbmQsICpzdGFydCA9IE5VTEw7CisKKyAgICBp ZiAoIWZpbHRlcl9wcykgeworICAgICAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzKHBi LCBidWZfaW4sIHNpemUpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICByZXQgPSBm Zl9hdmNfcGFyc2VfbmFsX3VuaXRzX2J1ZihidWZfaW4sICZzdGFydCwgJnNpemUpOworICAgIGlm IChyZXQgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKworICAgIHJldCA9IDA7CisgICAgYnVmID0g c3RhcnQ7CisgICAgZW5kID0gc3RhcnQgKyBzaXplOworCisgICAgd2hpbGUgKGVuZCAtIGJ1ZiA+ IDQpIHsKKyAgICAgICAgdWludDMyX3QgbGVuID0gRkZNSU4oQVZfUkIzMihidWYpLCBlbmQgLSBi dWYgLSA0KTsKKyAgICAgICAgdWludDhfdCB0eXBlID0gKGJ1Zls1XSA+PiAzKTsKKworICAgICAg ICBidWYgKz0gNDsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBWVkNf VlBTX05VVDoKKyAgICAgICAgY2FzZSBWVkNfU1BTX05VVDoKKyAgICAgICAgY2FzZSBWVkNfUFBT X05VVDoKKyAgICAgICAgICAgIG51bV9wcysrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgKz0gNCArIGxlbjsKKyAgICAgICAgICAgIGF2aW9f d2IzMihwYiwgbGVuKTsKKyAgICAgICAgICAgIGF2aW9fd3JpdGUocGIsIGJ1ZiwgbGVuKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYnVmICs9IGxlbjsKKyAgICB9 CisKKyAgZW5kOgorICAgIGF2X2ZyZWUoc3RhcnQpOworICAgIGlmIChwc19jb3VudCkKKyAgICAg ICAgKnBzX2NvdW50ID0gbnVtX3BzOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBmZl92dmNf YW5uZXhiMm1wNF9idWYoY29uc3QgdWludDhfdCAqYnVmX2luLCB1aW50OF90ICoqYnVmX291dCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQg KnBzX2NvdW50KQoreworICAgIEFWSU9Db250ZXh0ICpwYjsKKyAgICBpbnQgcmV0OworCisgICAg cmV0ID0gYXZpb19vcGVuX2R5bl9idWYoJnBiKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg cmV0dXJuIHJldDsKKworICAgIHJldCA9IGZmX3Z2Y19hbm5leGIybXA0KHBiLCBidWZfaW4sICpz aXplLCBmaWx0ZXJfcHMsIHBzX2NvdW50KTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBm ZmlvX2ZyZWVfZHluX2J1ZigmcGIpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAg ICpzaXplID0gYXZpb19jbG9zZV9keW5fYnVmKHBiLCBidWZfb3V0KTsKKworICAgIHJldHVybiAw OworfQorCitpbnQgZmZfaXNvbV93cml0ZV92dmNjKEFWSU9Db250ZXh0ICpwYiwgY29uc3QgdWlu dDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsIGludCBwc19hcnJh eV9jb21wbGV0ZW5lc3MpCit7CisgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgdnZj YzsKKyAgICB1aW50OF90ICpidWYsICplbmQsICpzdGFydDsKKyAgICBpbnQgcmV0OworCisgICAg aWYgKHNpemUgPCA2KSB7CisgICAgICAgIC8qIFdlIGNhbid0IHdyaXRlIGEgdmFsaWQgdnZjYyBm cm9tIHRoZSBwcm92aWRlZCBkYXRhICovCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgIH0gZWxzZSBpZiAoKmRhdGEgPT0gMSkgeworICAgICAgICAvKiBEYXRhIGlzIGFs cmVhZHkgdnZjYy1mb3JtYXR0ZWQgKi8KKyAgICAgICAgYXZpb193cml0ZShwYiwgZGF0YSwgc2l6 ZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoIShBVl9SQjI0KGRhdGEpID09 IDEgfHwgQVZfUkIzMihkYXRhKSA9PSAxKSkgeworICAgICAgICAvKiBOb3QgYSB2YWxpZCBBbm5l eCBCIHN0YXJ0IGNvZGUgcHJlZml4ICovCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgIH0KKworICAgIHJldCA9IGZmX2F2Y19wYXJzZV9uYWxfdW5pdHNfYnVmKGRhdGEs ICZzdGFydCwgJnNpemUpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0Owor CisgICAgdnZjY19pbml0KCZ2dmNjKTsKKworICAgIGJ1ZiA9IHN0YXJ0OworICAgIGVuZCA9IHN0 YXJ0ICsgc2l6ZTsKKworICAgIHdoaWxlIChlbmQgLSBidWYgPiA0KSB7CisgICAgICAgIHVpbnQz Ml90IGxlbiA9IEZGTUlOKEFWX1JCMzIoYnVmKSwgZW5kIC0gYnVmIC0gNCk7CisgICAgICAgIHVp bnQ4X3QgdHlwZSA9IChidWZbNV0gPj4gMyk7CisKKyAgICAgICAgYnVmICs9IDQ7CisKKyAgICAg ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVlZDX09QSV9OVVQ6CisgICAgICAgIGNh c2UgVlZDX1ZQU19OVVQ6CisgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6CisgICAgICAgIGNhc2Ug VlZDX1BQU19OVVQ6CisgICAgICAgIGNhc2UgVlZDX1BSRUZJWF9TRUlfTlVUOgorICAgICAgICBj YXNlIFZWQ19TVUZGSVhfU0VJX05VVDoKKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfYWRkX25hbF91 bml0KGJ1ZiwgbGVuLCBwc19hcnJheV9jb21wbGV0ZW5lc3MsICZ2dmNjKTsKKyAgICAgICAgICAg IGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg ICAgICAgIGJ1ZiArPSBsZW47CisgICAgfQorCisgICAgcmV0ID0gdnZjY193cml0ZShwYiwgJnZ2 Y2MpOworCisgIGVuZDoKKyAgICB2dmNjX2Nsb3NlKCZ2dmNjKTsKKyAgICBhdl9mcmVlKHN0YXJ0 KTsKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdnZjLmggYi9s aWJhdmZvcm1hdC92dmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4x NzU1YWY3MjliCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvdnZjLmgKQEAgLTAsMCAr MSw5OSBAQAorLyoKKyAqIFZWQyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtdXhlcnMKKyAqCisgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogaW50ZXJu YWwgaGVhZGVyIGZvciBWVkMgKGRlKW11eGVyIHV0aWxpdGllcworICovCisKKyNpZm5kZWYgQVZG T1JNQVRfVlZDX0gKKyNkZWZpbmUgQVZGT1JNQVRfVlZDX0gKKworI2luY2x1ZGUgPHN0ZGludC5o PgorI2luY2x1ZGUgImF2aW8uaCIKKworLyoqCisgKiBXcml0ZXMgQW5uZXggQiBmb3JtYXR0ZWQg VlZDIE5BTCB1bml0cyB0byB0aGUgcHJvdmlkZWQgQVZJT0NvbnRleHQuCisgKgorICogVGhlIE5B TCB1bml0cyBhcmUgY29udmVydGVkIHRvIGFuIE1QNC1jb21wYXRpYmxlIGZvcm1hdCAoc3RhcnQg Y29kZSBwcmVmaXhlcworICogYXJlIHJlcGxhY2VkIGJ5IDQtYnl0ZSBzaXplIGZpZWxkcywgYXMg cGVyIElTTy9JRUMgMTQ0OTYtMTUpLgorICoKKyAqIElmIGZpbHRlcl9wcyBpcyBub24temVybywg YW55IFZWQyBwYXJhbWV0ZXIgc2V0cyBmb3VuZCBpbiB0aGUgaW5wdXQgd2lsbCBiZQorICogZGlz Y2FyZGVkLCBhbmQgKnBzX2NvdW50IHdpbGwgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgZGlzY2Fy ZGVkIFBTIE5BTCB1bml0cy4KKyAqCisgKiBAcGFyYW0gcGIgYWRkcmVzcyBvZiB0aGUgQVZJT0Nv bnRleHQgd2hlcmUgdGhlIGRhdGEgc2hhbGwgYmUgd3JpdHRlbgorICogQHBhcmFtIGJ1Zl9pbiBh ZGRyZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogQHBhcmFtIHNp emUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAqIEBwYXJhbSBmaWx0ZXJf cHMgd2hldGhlciB0byB3cml0ZSBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyB0byB0aGUgb3V0cHV0 ICgwKQorICogICAgICAgIG9yIHRvIGRpc2NhcmQgdGhlbSAobm9uLXplcm8pCisgKiBAcGFyYW0g cHNfY291bnQgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgd2hlcmUgdGhlIG51bWJlciBvZiBkaXNj YXJkZWQKKyAqICAgICAgICBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyBzaGFsbCBiZSB3cml0dGVu LCBtYXkgYmUgTlVMTAorICogQHJldHVybiB0aGUgYW1vdW50IChpbiBieXRlcykgb2YgZGF0YSB3 cml0dGVuIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZQorICogICAgICAgICB2YWx1ZSBj b3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqLwor aW50IGZmX3Z2Y19hbm5leGIybXA0KEFWSU9Db250ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqYnVm X2luLAorICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQg KnBzX2NvdW50KTsKKworLyoqCisgKiBXcml0ZXMgQW5uZXggQiBmb3JtYXR0ZWQgVlZDIE5BTCB1 bml0cyB0byBhIGRhdGEgYnVmZmVyLgorICoKKyAqIFRoZSBOQUwgdW5pdHMgYXJlIGNvbnZlcnRl ZCB0byBhbiBNUDQtY29tcGF0aWJsZSBmb3JtYXQgKHN0YXJ0IGNvZGUgcHJlZml4ZXMKKyAqIGFy ZSByZXBsYWNlZCBieSA0LWJ5dGUgc2l6ZSBmaWVsZHMsIGFzIHBlciBJU08vSUVDIDE0NDk2LTE1 KS4KKyAqCisgKiBJZiBmaWx0ZXJfcHMgaXMgbm9uLXplcm8sIGFueSBWVkMgcGFyYW1ldGVyIHNl dHMgZm91bmQgaW4gdGhlIGlucHV0IHdpbGwgYmUKKyAqIGRpc2NhcmRlZCwgYW5kICpwc19jb3Vu dCB3aWxsIGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZCBQUyBOQUwgdW5pdHMuCisg KgorICogT24gc3VjY2VzcywgKnNpemUgaG9sZHMgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUg b3V0cHV0IGRhdGEgYnVmZmVyLgorICoKKyAqIEBwYXJhbSBidWZfaW4gYWRkcmVzcyBvZiB0aGUg YnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIEBwYXJhbSBzaXplIGFkZHJlc3Mgb2Yg dGhlIHZhcmlhYmxlIGhvbGRpbmcgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgaW5wdXQKKyAq ICAgICAgICBidWZmZXIgKG9uIGlucHV0KSBhbmQgb2YgdGhlIG91dHB1dCBidWZmZXIgKG9uIHN1 Y2Nlc3MpCisgKiBAcGFyYW0gYnVmX291dCBvbiBzdWNjZXNzLCBhZGRyZXNzIG9mIHRoZSB2YXJp YWJsZSBob2xkaW5nIHRoZSBhZGRyZXNzIG9mCisgKiAgICAgICAgdGhlIG91dHB1dCBidWZmZXIK KyAqIEBwYXJhbSBmaWx0ZXJfcHMgd2hldGhlciB0byB3cml0ZSBwYXJhbWV0ZXIgc2V0IE5BTCB1 bml0cyB0byB0aGUgb3V0cHV0ICgwKQorICogICAgICAgIG9yIHRvIGRpc2NhcmQgdGhlbSAobm9u LXplcm8pCisgKiBAcGFyYW0gcHNfY291bnQgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgd2hlcmUg dGhlIG51bWJlciBvZiBkaXNjYXJkZWQKKyAqICAgICAgICBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0 cyBzaGFsbCBiZSB3cml0dGVuLCBtYXkgYmUgTlVMTAorICogQHJldHVybiAwIGluIGNhc2Ugb2Yg c3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IKKyAq ICAgICAgICAgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqIEBub3RlICpidWZfb3V0IHdpbGwg YmUgdHJlYXRlZCBhcyB1bmluaXRpYWxpemVkIG9uIGlucHV0IGFuZCB3b24ndCBiZSBmcmVlZC4K KyAqLworaW50IGZmX3Z2Y19hbm5leGIybXA0X2J1Zihjb25zdCB1aW50OF90ICpidWZfaW4sIHVp bnQ4X3QgKipidWZfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNpemUsIGlu dCBmaWx0ZXJfcHMsIGludCAqcHNfY291bnQpOworCisvKioKKyAqIFdyaXRlcyBWVkMgZXh0cmFk YXRhIChwYXJhbWV0ZXIgc2V0cywgZGVjbGFyYXRpdmUgU0VJIE5BTCB1bml0cykgdG8gdGhlCisg KiBwcm92aWRlZCBBVklPQ29udGV4dC4KKyAqCisgKiBJZiB0aGUgZXh0cmFkYXRhIGlzIEFubmV4 IEIgZm9ybWF0LCBpdCBnZXRzIGNvbnZlcnRlZCB0byB2dmNDIGZvcm1hdCBiZWZvcmUKKyAqIHdy aXRpbmcuCisgKgorICogQHBhcmFtIHBiIGFkZHJlc3Mgb2YgdGhlIEFWSU9Db250ZXh0IHdoZXJl IHRoZSB2dmNDIHNoYWxsIGJlIHdyaXR0ZW4KKyAqIEBwYXJhbSBkYXRhIGFkZHJlc3Mgb2YgdGhl IGJ1ZmZlciBob2xkaW5nIHRoZSBkYXRhIG5lZWRlZCB0byB3cml0ZSB0aGUgdnZjQworICogQHBh cmFtIHNpemUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIGJ1ZmZlcgorICogQHBhcmFtIHBz X2FycmF5X2NvbXBsZXRlbmVzcyB3aGV0aGVyIGFsbCBwYXJhbWV0ZXIgc2V0cyBhcmUgaW4gdGhl IHZ2Y0MgKDEpCisgKiAgICAgICAgb3IgdGhlcmUgbWF5IGJlIGFkZGl0aW9uYWwgcGFyYW1ldGVy IHNldHMgaW4gdGhlIGJpdHN0cmVhbSAoMCkKKyAqIEByZXR1cm4gPj0wIGluIGNhc2Ugb2Ygc3Vj Y2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IKKyAqICAg ICAgICAgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqLworaW50IGZmX2lzb21fd3JpdGVfdnZj YyhBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisgICAgICAgICAgICAgICAg ICAgICAgIGludCBzaXplLCBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzKTsKKworI2VuZGlmIC8q IEFWRk9STUFUX1ZWQ19IICovCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC92dmNkZWMuYyBiL2xp YmF2Zm9ybWF0L3Z2Y2RlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjMwNGY5MDA5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC92dmNkZWMuYwpAQCAt MCwwICsxLDYxIEBACisvKgorICogUkFXIFZWQyB2aWRlbyBkZW11eGVyCisgKiBDb3B5cmlnaHQg KGMpIDIwMjAgTnVvIE1pIDxudW9taTIwMjFAZ21haWwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg MDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZjb2RlYy92dmMuaCIKKworI2lu Y2x1ZGUgImF2Zm9ybWF0LmgiCisjaW5jbHVkZSAicmF3ZGVjLmgiCisKK3N0YXRpYyBpbnQgdnZj X3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKQoreworICAgIHVpbnQzMl90IGNvZGUgPSAtMTsK KyAgICBpbnQgc3BzID0gMCwgcHBzID0gMCwgaXJhcCA9IDA7CisgICAgaW50IGk7CisKKyAgICBm b3IgKGkgPSAwOyBpIDwgcC0+YnVmX3NpemUgLSAxOyBpKyspIHsKKyAgICAgICAgY29kZSA9IChj b2RlIDw8IDgpICsgcC0+YnVmW2ldOworICAgICAgICBpZiAoKGNvZGUgJiAweGZmZmZmZjAwKSA9 PSAweDEwMCkgeworICAgICAgICAgICAgdWludDhfdCBuYWwyID0gcC0+YnVmW2kgKyAxXTsKKyAg ICAgICAgICAgIGludCB0eXBlID0gKG5hbDIgJiAweEY4KSA+PiAzOworCisgICAgICAgICAgICBp ZiAoY29kZSAmIDB4ODApIC8vIGZvcmJpZGRlbl96ZXJvX2JpdAorICAgICAgICAgICAgICAgIHJl dHVybiAwOworCisgICAgICAgICAgICBpZiAoKG5hbDIgJiAweDcpID09IDApIC8vIG51aF90ZW1w b3JhbF9pZF9wbHVzMQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBz d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6ICAgICAgIHNwcysr OyAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZWQ19QUFNfTlVUOiAgICAgICBwcHMrKzsgIGJy ZWFrOworICAgICAgICAgICAgY2FzZSBWVkNfSURSX05fTFA6CisgICAgICAgICAgICBjYXNlIFZW Q19JRFJfV19SQURMOgorICAgICAgICAgICAgY2FzZSBWVkNfQ1JBX05VVDoKKyAgICAgICAgICAg IGNhc2UgVlZDX0dEUl9OVVQ6ICAgICAgIGlyYXArKzsgYnJlYWs7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3BzICYmIHBwcyAmJiBpcmFwKQorICAgICAgICBy ZXR1cm4gQVZQUk9CRV9TQ09SRV9FWFRFTlNJT04gKyAxOyAvLyAxIG1vcmUgdGhhbiAubXBnCisg ICAgcmV0dXJuIDA7Cit9CisKK0ZGX0RFRl9SQVdWSURFT19ERU1VWEVSKHZ2YywgInJhdyBWVkMg dmlkZW8iLCB2dmNfcHJvYmUsICJoMjY2LDI2Nix2dmMiLCBBVl9DT0RFQ19JRF9WVkMpCi0tIAoy LjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZm bXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9m Zm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwg dmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9y ZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K