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 D789C45CC1 for ; Wed, 3 May 2023 13:02:54 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2D03968BF18; Wed, 3 May 2023 16:02:51 +0300 (EEST) Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 81F19689C6C for ; Wed, 3 May 2023 16:02:42 +0300 (EEST) Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1aaf7067647so25856675ad.0 for ; Wed, 03 May 2023 06:02:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=superfashi-com.20221208.gappssmtp.com; s=20221208; t=1683118960; x=1685710960; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8N87MGK4VksefXGGsLqMFP8k0Qzdqz5i2beVYrmQndc=; b=ZIqEOW4qr4a0TY3kPNsOkZfBr08K50jEnRJIxrnn9WMTpiDx1Lt+X5rnILOKyC5wrS on8THjfFGZdiBwmZ+4MafA2RyktqdLjuQQS3NrE5hj+ZTZgH3uECbOLqJSE+HdfFcmzS y+UqGHHOcVTL3x1Wmns6gYlqX+SoI5FIAludqOJcYINoO8CYbNdgkaE9iw3x5wOSt+FG 9V3UQn/KZF95E20elsZh7xBc1t6yQ9Lal99dwJcTiqf2UD6VM/OecjUp4kVNwofYbAhU efzcJbtoy9BXnAvBNh6zM9xtvliMZJQ16G2uNn58ZmSuC3WFEEM4vPbbSfOi3ChdUOjM PDAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683118960; x=1685710960; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8N87MGK4VksefXGGsLqMFP8k0Qzdqz5i2beVYrmQndc=; b=FVnNoC0ZkiPx8X/DiBhS0cYU4Wlx/sG1VVAilpWhQIOMVgxR6j2dYeMuXyWT6iFZJr non3n9TBg187KbnnGFbbmGCmBuHrz3UJymu0hT3iuGr/gL3fKZpgznEDhT6SoCGMX6XZ D7IthRe6dc4CEtlQRZVsB/SMYg6fvn49De/qnlh8JrnY5SYTnJRp0L2hzgTxlK7bHglQ FSa4c2/sHX2zV5t4Gw573M9w4qaVowDZJH9hZ16kzYU9mf+YqG36BMopABfouiN72pY0 Jxg2sDnx7hY2UB8EPO75eqtqPvGtwYL5GCZbv4gMXWq+dCLJ4aEjn7VjdzFxIm24CMqc D0uA== X-Gm-Message-State: AC+VfDynEuMPtYV8jE7JavcyvzujAQlm3RUmIm/0kzapEobk3CsIaCZs xNWt0YvTTXsTzyohqFdaplbe6w8FbjYBcBu+yQk= X-Google-Smtp-Source: ACHHUZ7jBC+M3x18UX0yy1s9jN3KJVj51G3u/WFQsRURc9FOfozbkjKYBD/GXibGMefuMAMuIzAjqQ== X-Received: by 2002:a17:902:aa07:b0:1a9:91d7:ba2 with SMTP id be7-20020a170902aa0700b001a991d70ba2mr2115013plb.48.1683118959006; Wed, 03 May 2023 06:02:39 -0700 (PDT) Received: from localhost.localdomain ([2404:7a80:800:5e00:3d70:f1ba:481f:f4a6]) by smtp.gmail.com with ESMTPSA id e17-20020a17090301d100b001a52ee4c4a5sm11287584plh.60.2023.05.03.06.02.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 06:02:38 -0700 (PDT) From: SuperFashi To: ffmpeg-devel@ffmpeg.org Date: Wed, 3 May 2023 22:02:23 +0900 Message-Id: <20230503130223.15713-1-admin@superfashi.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230501110120.20778-1-admin@superfashi.com> References: <20230501110120.20778-1-admin@superfashi.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v6] avformat: add MMTP parser and MMT/TLV demuxer 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 Cc: SuperFashi 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: djEgLT4gdjI6IFJlZmFjdG9yIHVzaW5nIEdldEJ5dGVDb250ZXh0OyBGaXggY29tcGlsZSBlcnJv ci4KdjIgLT4gdjM6IFJlbW92ZSBkZWJ1ZyBzdGF0ZW1lbnQuCnYzIC0+IHY0OiBTcXVhc2ggY29t bWl0cy4KdjQgLT4gdjU6IEltcHJvdmUgcG9ydGFiaWxpdHk7IENvc21ldGljIGNoYW5nZXMuCnY1 IC0+IHY2OiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MuCgpUaGlzIHBhdGNoIGFkZHMg YW4gTVBFRyBNZWRpYSBUcmFuc3BvcnQgUHJvdG9jb2wgKE1NVFApIHBhcnNlciwgYXMgZGVmaW5l ZCBpbiBJU08vSUVDIDIzMDA4LTEsIGFuZCBhbiBNTVQgcHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0 cyAoTU1UL1RMVikgZGVtdXhlciwgYXMgZGVmaW5lZCBpbiBBUklCIFNURC1CMzIuIEN1cnJlbnRs eSwgaXQgc3VwcG9ydHMgSEVWQywgQUFDIExBVE0sIGFuZCBBUklCLVRUTUwgZGVtdXhpbmcuCgpT aW5jZSBNTVRQIGlzIGRlc2lnbmVkIHRvIHRyYW5zbWl0IG92ZXIgSVAsIHRoZXJlIGlzIG5vIHNp emUgaW5mb3JtYXRpb24gd2l0aGluIGVhY2ggTU1UUCBwYWNrZXQsIGFuZCB0aGVyZSBpcyBubyBv bi1kaXNrIGZvcm1hdCBkZWZpbmVkIGFsb25nc2lkZSB0aGUgcHJvdG9jb2wuIE9uZSBpbmR1c3Ry aWFsIHNvbHV0aW9uIGlzIGEgc2ltcGxlIGNvbnRhaW5lciBmb3JtYXQgdXNpbmcgdHlwZeKAk2xl bmd0aOKAk3ZhbHVlIHBhY2tldHMsIHdoaWNoIGlzIGRlZmluZWQgaW4gQVJJQiBTVEQtQjMyLgoK QW5vdGhlciBrbm93biBjb250YWluZXIgZm9ybWF0IGZvciBNTVRQIGlzIHVzaW5nIHBhY2tldCBj YXB0dXJlIChwY2FwKSBmaWxlcyB3aGljaCByZWNvcmRzIG5ldHdvcmsgcGFja2V0cy4gVGhpcyBw YXRjaCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBkZW11eGVyIGZvciB0aGlzIGNvbnRhaW5lciBmb3Jt YXQuCgpTaWduZWQtb2ZmLWJ5OiBTdXBlckZhc2hpIDxhZG1pbkBzdXBlcmZhc2hpLmNvbT4KLS0t CiBDaGFuZ2Vsb2cgICAgICAgICAgICAgICAgfCAgICAxICsKIGRvYy9kZW11eGVycy50ZXhpICAg ICAgICB8ICAgIDQgKwogbGliYXZmb3JtYXQvTWFrZWZpbGUgICAgIHwgICAgMSArCiBsaWJhdmZv cm1hdC9hbGxmb3JtYXRzLmMgfCAgICAxICsKIGxpYmF2Zm9ybWF0L21tdHAuYyAgICAgICB8IDE1 MjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYmF2Zm9ybWF0L21t dHAuaCAgICAgICB8ICAgNjQgKysKIGxpYmF2Zm9ybWF0L21tdHRsdi5jICAgICB8ICAzMzUgKysr KysrKysrCiBsaWJhdmZvcm1hdC92ZXJzaW9uLmggICAgfCAgICAyICstCiA4IGZpbGVzIGNoYW5n ZWQsIDE5MzIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYmF2Zm9ybWF0L21tdHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L21tdHAu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L21tdHRsdi5jCgpkaWZmIC0tZ2l0IGEv Q2hhbmdlbG9nIGIvQ2hhbmdlbG9nCmluZGV4IDQ5MDFlZjZhZDcuLjU5NGM0NDVlYTIgMTAwNjQ0 Ci0tLSBhL0NoYW5nZWxvZworKysgYi9DaGFuZ2Vsb2cKQEAgLTcsNiArNyw3IEBAIHZlcnNpb24g PG5leHQ+OgogLSBFeHRlbmQgVkFBUEkgc3VwcG9ydCBmb3IgbGlidmEtd2luMzIgb24gV2luZG93 cwogLSBhZmlyZXFzcmMgYXVkaW8gc291cmNlIGZpbHRlcgogLSBhcmxzIGZpbHRlcgorLSBNTVRQ IHBhcnNlciBhbmQgTU1UL1RMViBkZW11eGVyCiAKIHZlcnNpb24gNi4wOgogLSBSYWRpYW5jZSBI RFIgaW1hZ2Ugc3VwcG9ydApkaWZmIC0tZ2l0IGEvZG9jL2RlbXV4ZXJzLnRleGkgYi9kb2MvZGVt dXhlcnMudGV4aQppbmRleCAyZDMzYjQ3YTU2Li41NmFhYjI1MWIyIDEwMDY0NAotLS0gYS9kb2Mv ZGVtdXhlcnMudGV4aQorKysgYi9kb2MvZGVtdXhlcnMudGV4aQpAQCAtNjg5LDYgKzY4OSwxMCBA QCBTZXQgdGhlIHNhbXBsZSByYXRlIGZvciBsaWJvcGVubXB0IHRvIG91dHB1dC4KIFJhbmdlIGlz IGZyb20gMTAwMCB0byBJTlRfTUFYLiBUaGUgdmFsdWUgZGVmYXVsdCBpcyA0ODAwMC4KIEBlbmQg dGFibGUKIAorQHNlY3Rpb24gbW10dGx2CisKK0RlbXV4ZXIgZm9yIE1NVCBwcm90b2NvbCBvdmVy IFRMViBwYWNrZXRzIChNTVQvVExWKSwgYXMgZGVmaW5lZCBpbiBBUklCIFNURC1CMzIuCisKIEBz ZWN0aW9uIG1vdi9tcDQvM2dwCiAKIERlbXV4ZXIgZm9yIFF1aWNrdGltZSBGaWxlIEZvcm1hdCAm IElTTy9JRUMgQmFzZSBNZWRpYSBGaWxlIEZvcm1hdCAoSVNPL0lFQyAxNDQ5Ni0xMiBvciBNUEVH LTQgUGFydCAxMiwgSVNPL0lFQyAxNTQ0NC0xMiBvciBKUEVHIDIwMDAgUGFydCAxMikuCmRpZmYg LS1naXQgYS9saWJhdmZvcm1hdC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCmluZGV4 IGY4YWQ3YzZhMTEuLmUzMmQ2ZTcxYTMgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxl CisrKyBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCkBAIC0zNTQsNiArMzU0LDcgQEAgT0JKUy0kKENP TkZJR19NTFZfREVNVVhFUikgICAgICAgICAgICAgICArPSBtbHZkZWMubyByaWZmZGVjLm8KIE9C SlMtJChDT05GSUdfTU1fREVNVVhFUikgICAgICAgICAgICAgICAgKz0gbW0ubwogT0JKUy0kKENP TkZJR19NTUZfREVNVVhFUikgICAgICAgICAgICAgICArPSBtbWYubwogT0JKUy0kKENPTkZJR19N TUZfTVVYRVIpICAgICAgICAgICAgICAgICArPSBtbWYubyByYXdlbmMubworT0JKUy0kKENPTkZJ R19NTVRUTFZfREVNVVhFUikgICAgICAgICAgICArPSBtbXRwLm8gbW10dGx2Lm8KIE9CSlMtJChD T05GSUdfTU9EU19ERU1VWEVSKSAgICAgICAgICAgICAgKz0gbW9kcy5vCiBPQkpTLSQoQ09ORklH X01PRkxFWF9ERU1VWEVSKSAgICAgICAgICAgICs9IG1vZmxleC5vCiBPQkpTLSQoQ09ORklHX01P Vl9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IG1vdi5vIG1vdl9jaGFuLm8gbW92X2VzZHMubyBc CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9saWJhdmZvcm1hdC9hbGxm b3JtYXRzLmMKaW5kZXggZWZkYjM0ZTI5ZC4uZDVmNGY1NjgwZSAxMDA2NDQKLS0tIGEvbGliYXZm b3JtYXQvYWxsZm9ybWF0cy5jCisrKyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwpAQCAtMjcw LDYgKzI3MCw3IEBAIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tbHZfZGVtdXhlcjsK IGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tbV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0 IEFWSW5wdXRGb3JtYXQgIGZmX21tZl9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9y bWF0IGZmX21tZl9tdXhlcjsKK2V4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tbXR0bHZf ZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tb2RzX2RlbXV4ZXI7CiBl eHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfbW9mbGV4X2RlbXV4ZXI7CiBleHRlcm4gY29u c3QgQVZJbnB1dEZvcm1hdCAgZmZfbW92X2RlbXV4ZXI7CmRpZmYgLS1naXQgYS9saWJhdmZvcm1h dC9tbXRwLmMgYi9saWJhdmZvcm1hdC9tbXRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uNmYwMDJjYzgyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L21t dHAuYwpAQCAtMCwwICsxLDE1MjUgQEAKKy8qCisgKiBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQcm90 b2NvbCAoTU1UUCkgcGFyc2VyLCBhcyBkZWZpbmVkIGluIElTTy9JRUMgMjMwMDgtMS4KKyAqIENv cHlyaWdodCAoYykgMjAyMyBTdXBlckZhc2hpCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpbmNsdWRlICJsaWJhdmNvZGVj L2J5dGVzdHJlYW0uaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgor I2luY2x1ZGUgImRlbXV4LmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJtbXRw LmgiCisjaW5jbHVkZSAibmV0d29yay5oIgorCitzdHJ1Y3QgTU1UR2VuZXJhbExvY2F0aW9uSW5m byB7CisgICAgdWludDhfdCBsb2NhdGlvbl90eXBlOworICAgIHVuaW9uIHsKKyAgICAgICAgc3Ry dWN0IHsKKyAgICAgICAgICAgIHVpbnQxNl90IHBhY2tldF9pZDsKKyAgICAgICAgfSB0eXBlMDsK KyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGlwdjRfc3JjX2Fk ZHI7CisgICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpcHY0X2RzdF9hZGRyOworICAgICAgICAg ICAgdWludDE2X3QgICAgICAgZHN0X3BvcnQ7CisgICAgICAgICAgICB1aW50MTZfdCAgICAgICBw YWNrZXRfaWQ7CisgICAgICAgIH0gdHlwZTE7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg ICBzdHJ1Y3QgaW42X2FkZHIgaXB2Nl9zcmNfYWRkcjsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZf YWRkciBpcHY2X2RzdF9hZGRyOworICAgICAgICAgICAgdWludDE2X3QgICAgICAgIGRzdF9wb3J0 OworICAgICAgICAgICAgdWludDE2X3QgICAgICAgIHBhY2tldF9pZDsKKyAgICAgICAgfSB0eXBl MjsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVpbnQxNl90IG5ldHdvcmtfaWQ7Cisg ICAgICAgICAgICB1aW50MTZfdCBNUEVHXzJfdHJhbnNwb3J0X3N0cmVhbV9pZDsKKyAgICAgICAg ICAgIHVpbnQxNl90IE1QRUdfMl9QSUQ6IDEzOworICAgICAgICB9IHR5cGUzOworICAgICAgICBz dHJ1Y3QgeworICAgICAgICAgICAgc3RydWN0IGluNl9hZGRyIGlwdjZfc3JjX2FkZHI7CisgICAg ICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgaXB2Nl9kc3RfYWRkcjsKKyAgICAgICAgICAgIHVpbnQx Nl90ICAgICAgICBkc3RfcG9ydDsKKyAgICAgICAgICAgIHVpbnQxNl90ICAgICAgICBNUEVHXzJf UElEOiAxMzsKKyAgICAgICAgfSB0eXBlNDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAg IGNoYXIgVVJMWzB4MTAwICsgMV07CisgICAgICAgIH0gdHlwZTU7CisgICAgfTsKK307CisKK3N0 YXRpYyBpbnQgcGFyc2VfbW10X2dlbmVyYWxfbG9jYXRpb25faW5mbygKKyAgICBzdHJ1Y3QgTU1U R2VuZXJhbExvY2F0aW9uSW5mbyAqaW5mbywgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1 aW50OF90IHVybF9zaXplOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdi YykgPCAxKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBzd2l0Y2gg KGluZm8tPmxvY2F0aW9uX3R5cGUgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKSkgeworICAg IGNhc2UgMHgwMDoKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykg PCAyKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGlu Zm8tPnR5cGUwLnBhY2tldF9pZCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIDB4MDE6CisgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0 ZXNfbGVmdChnYmMpIDwgKDMyICsgMzIgKyAxNiArIDE2KSAvIDgpCisgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUo Z2JjLCAodWludDhfdCAqKSAmaW5mby0+dHlwZTEuaXB2NF9zcmNfYWRkciwgNCk7CisgICAgICAg IGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KGdiYywgKHVpbnQ4X3QgKikgJmluZm8tPnR5cGUxLmlw djRfZHN0X2FkZHIsIDQpOworICAgICAgICBpbmZvLT50eXBlMS5kc3RfcG9ydCAgPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKyAgICAgICAgaW5mby0+dHlwZTEucGFja2V0X2lkID0gYnl0 ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwMjoK KyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTI4ICsgMTI4 ICsgMTYgKyAxNikgLyA4KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 CisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KAorICAgICAgICAgICAgZ2JjLCAodWlu dDhfdCAqKSAmaW5mby0+dHlwZTIuaXB2Nl9zcmNfYWRkciwgMTYpOworICAgICAgICBieXRlc3Ry ZWFtMl9nZXRfYnVmZmVydSgKKyAgICAgICAgICAgIGdiYywgKHVpbnQ4X3QgKikgJmluZm8tPnR5 cGUyLmlwdjZfZHN0X2FkZHIsIDE2KTsKKyAgICAgICAgaW5mby0+dHlwZTIuZHN0X3BvcnQgID0g Ynl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGluZm8tPnR5cGUyLnBhY2tldF9p ZCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworICAgICAgICBicmVhazsKKyAgICBjYXNl IDB4MDM6CisgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2 ICsgMTYgKyAzICsgMTMpIC8gOCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgICAgICBpbmZvLT50eXBlMy5uZXR3b3JrX2lkICAgICAgICAgICAgICAgICA9IGJ5 dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworICAgICAgICBpbmZvLT50eXBlMy5NUEVHXzJfdHJh bnNwb3J0X3N0cmVhbV9pZCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworICAgICAgICBp bmZvLT50eXBlMy5NUEVHXzJfUElEID0KKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9iZTE2 dShnYmMpICYgMGIxMTExMTExMTExMTExOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4MDQ6 CisgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDEyOCArIDEy OCArIDE2ICsgMyArIDEzKSAvIDgpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoCisgICAgICAgICAgICBnYmMs ICh1aW50OF90ICopICZpbmZvLT50eXBlNC5pcHY2X3NyY19hZGRyLCAxNik7CisgICAgICAgIGJ5 dGVzdHJlYW0yX2dldF9idWZmZXJ1KAorICAgICAgICAgICAgZ2JjLCAodWludDhfdCAqKSAmaW5m by0+dHlwZTQuaXB2Nl9kc3RfYWRkciwgMTYpOworICAgICAgICBpbmZvLT50eXBlNC5kc3RfcG9y dCAgID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGluZm8tPnR5cGU0Lk1Q RUdfMl9QSUQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAmIDBiMTExMTExMTExMTExMTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDA1OgorICAgICAgICB1cmxfc2l6ZSA9IGJ5dGVz dHJlYW0yX2dldF9ieXRlKGdiYyk7CisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXIoZ2Jj LCAodWludDhfdCAqKSBpbmZvLT50eXBlNS5VUkwsIHVybF9zaXplKTsKKyAgICAgICAgaW5mby0+ dHlwZTUuVVJMW3VybF9zaXplXSA9ICdcMCc7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6 CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICByZXR1cm4g MDsKK30KKworc3RydWN0IFN0cmVhbXMgeworICAgIEFWU3RyZWFtICpzdHJlYW07CisKKyAgICBp bnQgbnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9yczsKKyAgICBzdHJ1Y3QgTVBVVGltZXN0YW1wRGVz Y3JpcHRvciB7CisgICAgICAgIHVpbnQzMl90IHNlcV9udW07CisgICAgICAgIGludDY0X3QgIHBy ZXNlbnRhdGlvbl90aW1lOworICAgIH0gKnRpbWVzdGFtcF9kZXNjcmlwdG9yOworCisgICAgaW50 IG51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOworICAgIHN0cnVjdCBNUFVFeHRlbmRlZFRp bWVzdGFtcERlc2NyaXB0b3IgeworICAgICAgICB1aW50MzJfdCBzZXFfbnVtOworICAgICAgICB1 aW50MTZfdCBkZWNvZGluZ190aW1lX29mZnNldDsKKyAgICAgICAgdWludDhfdCAgbnVtX29mX2F1 OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWludDE2X3QgZHRzX3B0c19vZmZzZXQ7 CisgICAgICAgICAgICB1aW50MTZfdCBwdHNfb2Zmc2V0OworICAgICAgICB9IGF1WzB4MTAwXTsK KyAgICB9ICpleHRfdGltZXN0YW1wX2Rlc2NyaXB0b3I7CisKKyAgICB1aW50MzJfdCAgICBsYXN0 X3NlcXVlbmNlX251bWJlcjsKKyAgICB1aW50MTZfdCAgICBhdV9jb3VudDsKKyAgICBBVkJ1ZmZl clJlZiAqcGVuZGluZ19idWZmZXI7CisgICAgaW50NjRfdCAgICAgb2Zmc2V0OworICAgIGludCAg ICAgICAgIGZsYWdzOworCisgICAgc3RydWN0IFN0cmVhbXMgKm5leHQ7Cit9OworCitzdHJ1Y3Qg TU1UUENvbnRleHQgeworICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyOwor ICAgIHN0cnVjdCBTdHJlYW1zICAgICAgICAgICAqc3RyZWFtczsKKyAgICBBVlByb2dyYW0gICAg ICAgICAgICAgICAgKnByb2dyYW07CisgICAgLy8gc3RydWN0IE1NVEdlbmVyYWxMb2NhdGlvbklu Zm8gbXB0X2xvY2F0aW9uOyBUT0RPCisKKyAgICAvLyBiZWxvdyBhcmUgdGVtcG9yYXJ5IGZpZWxk cyBhdmFpbGFibGUgZm9yIHRoZSBzY29wZSBvZiBhIHNpbmdsZSBwYWNrZXQKKyAgICBBVkZvcm1h dENvbnRleHQgKnM7CisgICAgQVZQYWNrZXQgICAgICAgICpwa3Q7CisgICAgdWludDE2X3QgICAg ICAgIGN1cnJlbnRfcGlkOworICAgIGJvb2wgICAgICAgICAgICBpc19yYXA7Cit9OworCitzdGF0 aWMgc3RydWN0IFN0cmVhbXMgKmZpbmRfY3VycmVudF9zdHJlYW0oc3RydWN0IE1NVFBDb250ZXh0 ICpjdHgpCit7CisgICAgc3RydWN0IFN0cmVhbXMgKnN0cmVhbXM7CisgICAgZm9yIChzdHJlYW1z ID0gY3R4LT5zdHJlYW1zOyBzdHJlYW1zICE9IE5VTEw7IHN0cmVhbXMgPSBzdHJlYW1zLT5uZXh0 KQorICAgICAgICBpZiAoc3RyZWFtcy0+c3RyZWFtLT5pZCA9PSBjdHgtPmN1cnJlbnRfcGlkKQor ICAgICAgICAgICAgcmV0dXJuIHN0cmVhbXM7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgU3RyZWFtcyAqCitmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShzdHJ1Y3QgTU1UUENv bnRleHQgKmN0eCwgdWludDE2X3QgcGlkKQoreworICAgIEFWU3RyZWFtICAgICAgICpzdHJlYW07 CisgICAgc3RydWN0IFN0cmVhbXMgKnN0cmVhbXM7CisgICAgZm9yIChzdHJlYW1zID0gY3R4LT5z dHJlYW1zOyBzdHJlYW1zICE9IE5VTEw7IHN0cmVhbXMgPSBzdHJlYW1zLT5uZXh0KQorICAgICAg ICBpZiAoc3RyZWFtcy0+c3RyZWFtLT5pZCA9PSBwaWQpIHsKKyAgICAgICAgICAgIGZmc3RyZWFt KHN0cmVhbXMtPnN0cmVhbSktPm5lZWRfY29udGV4dF91cGRhdGUgPSAxOworICAgICAgICAgICAg cmV0dXJuIHN0cmVhbXM7CisgICAgICAgIH0KKworICAgIHN0cmVhbSA9IGF2Zm9ybWF0X25ld19z dHJlYW0oY3R4LT5zLCBOVUxMKTsKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiBOVUxM OworICAgIHN0cmVhbS0+aWQgPSBwaWQ7CisgICAgYXZfcHJvZ3JhbV9hZGRfc3RyZWFtX2luZGV4 KGN0eC0+cywgY3R4LT5wcm9ncmFtLT5pZCwgc3RyZWFtLT5pbmRleCk7CisKKyAgICBzdHJlYW1z ID0gYXZfbWFsbG9jeihzaXplb2Yoc3RydWN0IFN0cmVhbXMpKTsKKyAgICBpZiAoc3RyZWFtcyA9 PSBOVUxMKSByZXR1cm4gTlVMTDsKKyAgICBzdHJlYW1zLT5zdHJlYW0gPSBzdHJlYW07CisgICAg c3RyZWFtcy0+bmV4dCAgID0gY3R4LT5zdHJlYW1zOworICAgIHN0cmVhbXMtPm9mZnNldCA9IC0x OworICAgIGN0eC0+c3RyZWFtcyAgICA9IHN0cmVhbXM7CisgICAgcmV0dXJuIHN0cmVhbXM7Cit9 CisKK2VudW0geworICAgIE1NVF9QQUNLQUdFX1RBQkxFX0lEICA9IDB4MjAsCisgICAgUEFDS0FH RV9MSVNUX1RBQkxFX0lEID0gMHg4MCwKK307CisKK2VudW0geworICAgIE1QVV9USU1FU1RBTVBf REVTQ1JJUFRPUiAgICAgICAgICA9IDB4MDAwMSwKKyAgICBBQ0NFU1NfQ09OVFJPTF9ERVNDUklQ VE9SICAgICAgICAgPSAweDgwMDQsCisgICAgVklERU9fQ09NUE9ORU5UX0RFU0NSSVBUT1IgICAg ICAgID0gMHg4MDEwLAorICAgIE1IX1NUUkVBTV9JREVOVElGSUVSX0RFU0NSSVBUT1IgICA9IDB4 ODAxMSwKKyAgICBNSF9BVURJT19DT01QT05FTlRfREVTQ1JJUFRPUiAgICAgPSAweDgwMTQsCisg ICAgTUhfREFUQV9DT01QT05FTlRfREVTQ1JJUFRPUiAgICAgID0gMHg4MDIwLAorICAgIE1QVV9F WFRFTkRFRF9USU1FU1RBTVBfREVTQ1JJUFRPUiA9IDB4ODAyNiwKK307CisKK3N0YXRpYyBpbnQK K3BhcnNlX3ZpZGVvX2NvbXBvbmVudF9kZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5 dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKyAgICB1 aW50OF90IGxhbmd1YWdlX2NvZGVbNF07CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVz X2xlZnQoZ2JjKSA8ICgxNiArIDgpIC8gOCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9IFZJREVPX0NPTVBP TkVOVF9ERVNDUklQVE9SKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworCisgICAg aWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBkZXNjcmlwdG9yX2xlbmd0aCkK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgeworICAgICAgICBHZXRC eXRlQ29udGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1 ZmZlciwgZGVzY3JpcHRvcl9sZW5ndGgpOworICAgICAgICAvKgorICAgICAgICAgKiBza2lwOgor ICAgICAgICAgKiAtIHZpZGVvX3Jlc29sdXRpb24KKyAgICAgICAgICogLSB2aWRlb19hc3BlY3Rf cmF0aW8KKyAgICAgICAgICogLSB2aWRlb19zY2FuX2ZsYWcKKyAgICAgICAgICogLSByZXNlcnZl ZAorICAgICAgICAgKiAtIHZpZGVvX2ZyYW1lX3JhdGUKKyAgICAgICAgICogLSBjb21wb25lbnRf dGFnCisgICAgICAgICAqIC0gdmlkZW9fdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzCisgICAgICAg ICAqIC0gcmVzZXJ2ZWQKKyAgICAgICAgICovCisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5n YmMsICg0ICsgNCArIDEgKyAyICsgNSArIDE2ICsgNCArIDQpIC8gOCk7CisKKyAgICAgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDMpCisgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUo Jm5nYmMsIGxhbmd1YWdlX2NvZGUsIDMpOworICAgICAgICBsYW5ndWFnZV9jb2RlWzNdID0gJ1ww JzsKKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7 CisKKyAgICByZXR1cm4gYXZfZGljdF9zZXQoJnN0cmVhbS0+bWV0YWRhdGEsICJsYW5ndWFnZSIs IGxhbmd1YWdlX2NvZGUsIDApOworfQorCitzdGF0aWMgaW50CitwYXJzZV9taF9hdWRpb19jb21w b25lbnRfZGVzY3JpcHRvcihBVlN0cmVhbSAqc3RyZWFtLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQor eworICAgIHVpbnQ4X3QgZGVzY3JpcHRvcl9sZW5ndGg7CisgICAgdWludDhfdCBzdHJlYW1fY29u dGVudDsKKyAgICB1aW50OF90IHN0cmVhbV90eXBlOworICAgIHVpbnQ4X3QgbGFuZ3VhZ2VfY29k ZVs0XTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsg OCkgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoYnl0 ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTUhfQVVESU9fQ09NUE9ORU5UX0RFU0NSSVBUT1Ip CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGRlc2NyaXB0b3JfbGVu Z3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJf Z2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGRlc2NyaXB0b3JfbGVuZ3RoKQorICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgYnl0ZTsKKyAgICAg ICAgYm9vbCBFU19tdWx0aV9saW5ndWFsX2ZsYWc7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQg bmdiYzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2Ny aXB0b3JfbGVuZ3RoKTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQo Jm5nYmMpIDwKKyAgICAgICAgICAgICg0ICsgNCArIDggKyAxNiArIDggKyA4ICsgMSArIDEgKyAy ICsgMyArIDEgKyAyNCkgLyA4KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisKKyAgICAgICAgYnl0ZSAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5n YmMpOworICAgICAgICBzdHJlYW1fY29udGVudCA9IGJ5dGUgJiAwYjExMTE7CisKKyAgICAgICAg LyoKKyAgICAgICAgICogc2tpcDoKKyAgICAgICAgICogLSBjb21wb25lbnRfdHlwZQorICAgICAg ICAgKiAtIGNvbXBvbmVudF90YWcKKyAgICAgICAgICovCisgICAgICAgIGJ5dGVzdHJlYW0yX3Nr aXB1KCZuZ2JjLCAzKTsKKyAgICAgICAgc3RyZWFtX3R5cGUgPSBieXRlc3RyZWFtMl9nZXRfYnl0 ZXUoJm5nYmMpOworCisgICAgICAgIC8vIHNraXA6IHNpbXVsY2FzdF9ncm91cF90YWcKKyAgICAg ICAgYnl0ZXN0cmVhbTJfc2tpcHUoJm5nYmMsIDEpOworCisgICAgICAgIGJ5dGUgICAgICAgICAg ICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisgICAgICAgIEVTX211bHRp X2xpbmd1YWxfZmxhZyA9IGJ5dGUgPj4gNzsKKworICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVm ZmVydSgmbmdiYywgbGFuZ3VhZ2VfY29kZSwgMyk7CisgICAgICAgIGxhbmd1YWdlX2NvZGVbM10g PSAnXDAnOworCisgICAgICAgIGlmIChFU19tdWx0aV9saW5ndWFsX2ZsYWcpIHsKKyAgICAgICAg ICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAzKQorICAgICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgYnl0ZXN0cmVh bTJfc2tpcHUoJm5nYmMsIDMpOworICAgICAgICB9CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3Nr aXB1KGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgc3dpdGNoIChzdHJlYW1fY29udGVu dCkgeworICAgIGNhc2UgMHgzOgorICAgICAgICBzd2l0Y2ggKHN0cmVhbV90eXBlKSB7CisgICAg ICAgIGNhc2UgMHgxMToKKyAgICAgICAgICAgIHN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkID0g QVZfQ09ERUNfSURfQUFDX0xBVE07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAw eDFjOgorICAgICAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19J RF9BQUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg ICBjYXNlIDB4NDoKKyAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RF Q19JRF9NUDRBTFM7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBhdl9kaWN0 X3NldCgmc3RyZWFtLT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgbGFuZ3VhZ2VfY29kZSwgMCk7Cit9 CisKKyNkZWZpbmUgTUFYX05VTV9USU1FU1RBTVBfREVTQ1JJUFRPUiAzMgorI2RlZmluZSBESUZG KGEsIGIpICgoYSkgPiAoYikgPyAoKGEpIC0gKGIpKSA6ICgoYikgLSAoYSkpKQorCitzdGF0aWMg aW50CitwYXJzZV9tcHVfdGltZXN0YW1wX2Rlc2NyaXB0b3Ioc3RydWN0IFN0cmVhbXMgKnN0cmVh bXMsIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBkZXNjcmlwdG9yX2xlbmd0 aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCkg LyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIGlmIChieXRl c3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAhPSBNUFVfVElNRVNUQU1QX0RFU0NSSVBUT1IpCisgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGRlc2NyaXB0b3JfbGVuZ3RoID0g Ynl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSA8IGRlc2NyaXB0b3JfbGVuZ3RoKQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICB7CisgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7CisgICAg ICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNjcmlwdG9yX2xlbmd0 aCk7CisKKyAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA+ IDApIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IG1wdV9zZXFfbnVtOworICAgICAgICAgICAgaW50 NjRfdCAgbXB1X3ByZXNlbnRhdGlvbl90aW1lOworICAgICAgICAgICAgc2l6ZV90ICAgaTsKKwor ICAgICAgICAgICAgc3RydWN0IE1QVVRpbWVzdGFtcERlc2NyaXB0b3IgKmRlc2M7CisKKyAgICAg ICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAoMzIgKyA2NCkg LyA4KQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAg ICAgICAgbXB1X3NlcV9udW0gPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoJm5nYmMpOworICAgICAg ICAgICAgbXB1X3ByZXNlbnRhdGlvbl90aW1lID0KKyAgICAgICAgICAgICAgICBmZl9wYXJzZV9u dHBfdGltZShieXRlc3RyZWFtMl9nZXRfYmU2NHUoJm5nYmMpKSAtIE5UUF9PRkZTRVRfVVM7CisK KyAgICAgICAgICAgIGlmIChtcHVfc2VxX251bSA+PSBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251 bWJlcikgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5udW1fdGlt ZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1z LT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtID09CisgICAgICAgICAgICAgICAgICAg ICAgICBtcHVfc2VxX251bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA9IHN0cmVh bXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZW5kMjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IHN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9u dW0gPAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1i ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBzdHJlYW1zLT50aW1lc3RhbXBf ZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDE7CisgICAg ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzdHJlYW1zLT5udW1fdGlt ZXN0YW1wX2Rlc2NyaXB0b3JzICsgMSA+CisgICAgICAgICAgICAgICAgICAgIE1BWF9OVU1fVElN RVNUQU1QX0RFU0NSSVBUT1IpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbGwg ZGVzY3JpcHRvcnMgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCisgICAg ICAgICAgICAgICAgICAgIC8vIHdlIGNhbid0IGFkZCBtb3JlLCBzbyB3ZSBzaG91bGQgZXZpY3Qg dGhlIG9uZSB3aXRoIHRoZSBsYXJnZXN0IGRpc3RhbmNlCisgICAgICAgICAgICAgICAgICAgIHVp bnQ2NF90IG1heF9kaXN0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IHN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChESUZGKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJl YW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtcHVfc2VxX251bSkgPiBtYXhfZGlzdCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlc2MgICAgID0gc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kaXN0ID0gRElGRigKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0u c2VxX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXB1X3NlcV9udW0pOwor ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhdl9hc3NlcnQx KGRlc2MgIT0gTlVMTCk7IC8vIHNob3VsZCBuZXZlciBmYWlsCisgICAgICAgICAgICAgICAgICAg IGdvdG8gZW5kMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZXNjID0g YXZfZHluYXJyYXkyX2FkZCgKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiopICZzdHJlYW1z LT50aW1lc3RhbXBfZGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgJnN0cmVhbXMtPm51 bV90aW1lc3RhbXBfZGVzY3JpcHRvcnMsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1 Y3QgTVBVVGltZXN0YW1wRGVzY3JpcHRvciksIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChk ZXNjID09IE5VTEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgICAgICAgICBl bmQxOgorICAgICAgICAgICAgICAgIGRlc2MtPnNlcV9udW0gICAgICAgICAgID0gbXB1X3NlcV9u dW07CisgICAgICAgICAgICAgICAgZW5kMjoKKyAgICAgICAgICAgICAgICBkZXNjLT5wcmVzZW50 YXRpb25fdGltZSA9IG1wdV9wcmVzZW50YXRpb25fdGltZTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2NyaXB0b3JfbGVuZ3Ro KTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX21wdV9leHRlbmRlZF90 aW1lc3RhbXBfZGVzY3JpcHRvcigKKyAgICBzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtcywgR2V0Qnl0 ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1aW50OF90IGRlc2NyaXB0b3JfbGVuZ3RoOworCisgICAg QVZTdHJlYW0gKnN0cmVhbSA9IHN0cmVhbXMtPnN0cmVhbTsKKworICAgIGlmIChieXRlc3RyZWFt Ml9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCkgLyA4KQorICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0g TVBVX0VYVEVOREVEX1RJTUVTVEFNUF9ERVNDUklQVE9SKQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9i eXRldShnYmMpOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBk ZXNjcmlwdG9yX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgeworICAgICAgICB1aW50OF90ICBieXRlOworICAgICAgICB1aW50OF90ICBwdHNfb2Zmc2V0 X3R5cGU7CisgICAgICAgIGJvb2wgdGltZXNjYWxlX2ZsYWc7CisgICAgICAgIHVpbnQxNl90IGRl ZmF1bHRfcHRzX29mZnNldCA9IDA7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAg ICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3JfbGVu Z3RoKTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwg KDUgKyAyICsgMSkgLyA4KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 CisgICAgICAgIGJ5dGUgICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRlKCZuZ2JjKTsK KyAgICAgICAgcHRzX29mZnNldF90eXBlID0gKGJ5dGUgPj4gMSkgJiAwYjExOworICAgICAgICB0 aW1lc2NhbGVfZmxhZyAgPSBieXRlICYgMTsKKworICAgICAgICBpZiAodGltZXNjYWxlX2ZsYWcp IHsKKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCA0 KQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAg ICAgc3RyZWFtLT50aW1lX2Jhc2UubnVtID0gMTsKKyAgICAgICAgICAgIHN0cmVhbS0+dGltZV9i YXNlLmRlbiA9IGJ5dGVzdHJlYW0yX2dldF9iZTMydSgmbmdiYyk7CisgICAgICAgIH0KKworICAg ICAgICBpZiAocHRzX29mZnNldF90eXBlID09IDEpIHsKKyAgICAgICAgICAgIGlmIChieXRlc3Ry ZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAyKQorICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgZGVmYXVsdF9wdHNfb2Zmc2V0ID0gYnl0 ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChi eXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPiAwKSB7CisgICAgICAgICAgICBzaXpl X3QgICBpOworICAgICAgICAgICAgdWludDhfdCAgbnVtX29mX2F1OworICAgICAgICAgICAgdWlu dDE2X3QgZGVjb2RpbmdfdGltZV9vZmZzZXQ7CisgICAgICAgICAgICB1aW50NjRfdCBtcHVfc2Vx X251bTsKKworICAgICAgICAgICAgc3RydWN0IE1QVUV4dGVuZGVkVGltZXN0YW1wRGVzY3JpcHRv ciAqZGVzYyA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChwdHNfb2Zmc2V0X3R5cGUgPT0gMCkK KyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7ICAvLyB3ZSBkb24n dCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcworCisgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJf Z2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgKDMyICsgMiArIDYgKyAxNiArIDgpIC8gOCkKKyAgICAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgIG1wdV9z ZXFfbnVtID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KCZuZ2JjKTsKKyAgICAgICAgICAgIC8vIHNr aXA6IGxlYXBfaW5kaWNhdG9yCisgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCAo MiArIDYpIC8gOCk7CisgICAgICAgICAgICBkZWNvZGluZ190aW1lX29mZnNldCA9IGJ5dGVzdHJl YW0yX2dldF9iZTE2dSgmbmdiYyk7CisgICAgICAgICAgICBudW1fb2ZfYXUgICAgICAgICAgICA9 IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgICAgIGlmIChtcHVfc2Vx X251bSA+PSBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlcikgeworICAgICAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsg KytpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNj cmlwdG9yW2ldLnNlcV9udW0gPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1wdV9zZXFfbnVt KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjID0gc3RyZWFtcy0+ZXh0X3RpbWVzdGFt cF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kMjsKKyAg ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0 cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpCisgICAgICAgICAgICAg ICAgICAgIGlmIChzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxX251bSA8 CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlcikg eworICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA9IHN0cmVhbXMtPmV4dF90aW1lc3RhbXBf ZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDE7CisgICAg ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzdHJlYW1zLT5udW1fZXh0 X3RpbWVzdGFtcF9kZXNjcmlwdG9ycyArIDEgPgorICAgICAgICAgICAgICAgICAgICBNQVhfTlVN X1RJTUVTVEFNUF9ERVNDUklQVE9SKSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1h eF9kaWZmID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMt Pm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpCisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoRElGRigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy0+ ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1wdV9zZXFfbnVtKSA+IG1heF9kaWZmKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGVzYyAgICAgPSBzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3Ig KyBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kaWZmID0gRElGRigKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlw dG9yW2ldLnNlcV9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wdV9zZXFf bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXZf YXNzZXJ0MShkZXNjICE9IE5VTEwpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDE7Cisg ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVzYyA9IGF2X2R5bmFycmF5Ml9h ZGQoCisgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSAmc3RyZWFtcy0+ZXh0X3RpbWVzdGFt cF9kZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgICAgICAmc3RyZWFtcy0+bnVtX2V4dF90aW1l c3RhbXBfZGVzY3JpcHRvcnMsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgTVBV RXh0ZW5kZWRUaW1lc3RhbXBEZXNjcmlwdG9yKSwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYg KGRlc2MgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKKworICAgICAgICAgICAgICAgIGVuZDE6CisgICAgICAgICAgICAgICAgZGVzYy0+c2VxX251 bSAgICAgICAgICAgICAgPSBtcHVfc2VxX251bTsKKyAgICAgICAgICAgICAgICBlbmQyOgorICAg ICAgICAgICAgICAgIGRlc2MtPmRlY29kaW5nX3RpbWVfb2Zmc2V0ID0gZGVjb2RpbmdfdGltZV9v ZmZzZXQ7CisgICAgICAgICAgICAgICAgZGVzYy0+bnVtX29mX2F1ICAgICAgICAgICAgPSBudW1f b2ZfYXU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1f b2ZfYXU7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNf bGVmdCgmbmdiYykgPCAyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKyAgICAgICAgICAgICAgICBpZiAoZGVzYyAhPSBOVUxMKQorICAgICAgICAgICAg ICAgICAgICBkZXNjLT5hdVtpXS5kdHNfcHRzX29mZnNldCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2 dSgmbmdiYyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBieXRl c3RyZWFtMl9za2lwdSgmbmdiYywgMik7CisKKyAgICAgICAgICAgICAgICBpZiAocHRzX29mZnNl dF90eXBlID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KCZuZ2JjKSA8IDIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2MgIT0gTlVMTCkK KyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MtPmF1W2ldLnB0c19vZmZzZXQgPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNnUoJm5nYmMpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMik7CisgICAgICAgICAg ICAgICAgfSBlbHNlIGlmIChkZXNjICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVz Yy0+YXVbaV0ucHRzX29mZnNldCA9IGRlZmF1bHRfcHRzX29mZnNldDsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tp cHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludAorcGFyc2VfYWRkaXRpb25hbF9hcmliX3N1YnRpdGxlX2luZm8oQVZTdHJlYW0gKnN0cmVh bSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICBib29sICAgIHN0YXJ0X21wdV9zZXF1ZW5j ZV9udW1iZXJfZmxhZzsKKyAgICBjaGFyICAgIGxhbmd1YWdlX2NvZGVbNF07CisgICAgdWludDhf dCBzdWJ0aXRsZV9mb3JtYXQ7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQo Z2JjKSA8CisgICAgICAgICg4ICsgNCArIDEgKyAzICsgMjQgKyAyICsgNCArIDIgKyA0ICsgNCAr IDQgKyA0KSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIC8v IHNraXA6IHN1YnRpdGxlX3RhZworICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7CisgICAg c3RhcnRfbXB1X3NlcXVlbmNlX251bWJlcl9mbGFnID0gKGJ5dGVzdHJlYW0yX2dldF9ieXRldShn YmMpID4+IDMpICYgMTsKKyAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsIGxhbmd1YWdl X2NvZGUsIDMpOworICAgIGxhbmd1YWdlX2NvZGVbM10gPSAnXDAnOworICAgIHN1YnRpdGxlX2Zv cm1hdCA9IChieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKSA+PiAyKSAmIDBiMTExMTsKKyAgICAv KgorICAgICAqIHNraXA6CisgICAgICogLSBUTUQKKyAgICAgKiAtIERNRgorICAgICAqIC0gcmVz b2x1dGlvbgorICAgICAqIC0gY29tcHJlc3Npb25fdHlwZQorICAgICAqLworICAgIGJ5dGVzdHJl YW0yX3NraXB1KGdiYywgKDQgKyA0ICsgNCArIDQpIC8gOCk7CisKKyAgICBpZiAoc3RhcnRfbXB1 X3NlcXVlbmNlX251bWJlcl9mbGFnKQorICAgICAgICBieXRlc3RyZWFtMl9za2lwKGdiYywgMzIp OworCisgICAgc3dpdGNoIChzdWJ0aXRsZV9mb3JtYXQpIHsKKyAgICBjYXNlIDBiMDAwMDoKKyAg ICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9UVE1MOworICAg ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gYXZfZGljdF9zZXQoJnN0cmVhbS0+bWV0 YWRhdGEsICJsYW5ndWFnZSIsIGxhbmd1YWdlX2NvZGUsIDApOworfQorCitzdGF0aWMgaW50Citw YXJzZV9taF9kYXRhX2NvbXBvbmVudF9kZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5 dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKworICAg IGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCkgLyA4KQorICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0 X2JlMTZ1KGdiYykgIT0gTUhfREFUQV9DT01QT05FTlRfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgIHsKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAgYnl0 ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKyAg ICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICAg ICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDE2IC8gOCkKKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBzd2l0Y2ggKGJ5dGVz dHJlYW0yX2dldF9iZTE2dSgmbmdiYykpIHsKKyAgICAgICAgY2FzZSAweDAwMjA6IC8vIGFkZGl0 aW9uYWwgQVJJQiBzdWJ0aXRsZSBpbmZvIChUYWJsZSA3LTc0LCBBUklCIFNURC1CNjAsIFZlcnNp b24gMS4xNC1FMSkKKyAgICAgICAgICAgIHJldHVybiBwYXJzZV9hZGRpdGlvbmFsX2FyaWJfc3Vi dGl0bGVfaW5mbyhzdHJlYW0sICZuZ2JjKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgaW50CitwYXJzZV9zdHJlYW1faWRlbnRpZmllcl9kZXNjcmlwdG9y KEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBk ZXNjcmlwdG9yX2xlbmd0aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChn YmMpIDwgKDE2ICsgOCkgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTUhfU1RSRUFNX0lERU5USUZJ RVJfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAg ZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKworICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHsKKyAgICAgICAgLy8gbm8g bmVlZCBmb3Igbm93CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgZGVzY3JpcHRv cl9sZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGVzY3Jp cHRvcihzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtcywgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAg ICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDMpCisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHN3aXRjaCAoYnl0ZXN0cmVhbTJfcGVla19iZTE2 dShnYmMpKSB7CisgICAgY2FzZSBNUFVfVElNRVNUQU1QX0RFU0NSSVBUT1I6CisgICAgICAgIHJl dHVybiBwYXJzZV9tcHVfdGltZXN0YW1wX2Rlc2NyaXB0b3Ioc3RyZWFtcywgZ2JjKTsKKyAgICBj YXNlIFZJREVPX0NPTVBPTkVOVF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2Vfdmlk ZW9fY29tcG9uZW50X2Rlc2NyaXB0b3Ioc3RyZWFtcy0+c3RyZWFtLCBnYmMpOworICAgIGNhc2Ug TUhfU1RSRUFNX0lERU5USUZJRVJfREVTQ1JJUFRPUjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX3N0 cmVhbV9pZGVudGlmaWVyX2Rlc2NyaXB0b3Ioc3RyZWFtcy0+c3RyZWFtLCBnYmMpOworICAgIGNh c2UgTUhfQVVESU9fQ09NUE9ORU5UX0RFU0NSSVBUT1I6CisgICAgICAgIHJldHVybiBwYXJzZV9t aF9hdWRpb19jb21wb25lbnRfZGVzY3JpcHRvcihzdHJlYW1zLT5zdHJlYW0sIGdiYyk7CisgICAg Y2FzZSBNSF9EQVRBX0NPTVBPTkVOVF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2Vf bWhfZGF0YV9jb21wb25lbnRfZGVzY3JpcHRvcihzdHJlYW1zLT5zdHJlYW0sIGdiYyk7CisgICAg Y2FzZSBNUFVfRVhURU5ERURfVElNRVNUQU1QX0RFU0NSSVBUT1I6CisgICAgICAgIHJldHVybiBw YXJzZV9tcHVfZXh0ZW5kZWRfdGltZXN0YW1wX2Rlc2NyaXB0b3Ioc3RyZWFtcywgZ2JjKTsKKyAg ICBjYXNlIEFDQ0VTU19DT05UUk9MX0RFU0NSSVBUT1I6CisgICAgICAgIGJ5dGVzdHJlYW0yX3Nr aXB1KGdiYywgMik7CisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCBieXRlc3RyZWFtMl9n ZXRfYnl0ZXUoZ2JjKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBhdl9sb2coc3Ry ZWFtcy0+c3RyZWFtLCBBVl9MT0dfSU5GTywgIlVua25vd24gZGVzY3JpcHRvcjogMHglMDR4XG4i LAorICAgICAgICAgICBieXRlc3RyZWFtMl9wZWVrX2JlMTZ1KGdiYykpOworICAgIHJldHVybiBB VkVSUk9SX1BBVENIV0VMQ09NRTsKK30KKworc3RhdGljIGludCBwYXJzZV9tbXRfcGFja2FnZV90 YWJsZShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIHVpbnQx Nl90IGxlbmd0aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwg KDggKyA4ICsgMTYpIC8gOCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpICE9IE1NVF9QQUNLQUdFX1RBQkxFX0lE KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAvLyBza2lwOiB2ZXJz aW9uCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKKyAgICBsZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dChnYmMpIDwgbGVuZ3RoKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICB7CisgICAgICAgIHNpemVfdCAgIGksIGo7CisgICAgICAgIHVpbnQ4X3QgIHBhY2thZ2VfaWRf bGVuZ3RoOworICAgICAgICB1aW50MTZfdCBkZXNjcmlwdG9yc19sZW5ndGg7CisgICAgICAgIHVp bnQ4X3QgIG51bWJlcl9vZl9hc3NldHM7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsK KyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7CisK KyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8ICg2ICsgMiAr IDgpIC8gOCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAg ICAgIC8vIHNraXA6IE1QVF9tb2RlCisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCAx KTsKKyAgICAgICAgcGFja2FnZV9pZF9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5n YmMpOworCisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsIHBhY2thZ2VfaWRfbGVuZ3Ro KTsKKworICAgICAgICBkZXNjcmlwdG9yc19sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNigm bmdiYyk7CisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsIGRlc2NyaXB0b3JzX2xlbmd0 aCk7CisKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDEp CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgbnVtYmVy X29mX2Fzc2V0cyA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgZm9y IChpID0gMDsgaSA8IG51bWJlcl9vZl9hc3NldHM7ICsraSkgeworICAgICAgICAgICAgaW50IGVy cjsKKworICAgICAgICAgICAgdWludDhfdCAgYXNzZXRfaWRfbGVuZ3RoOworICAgICAgICAgICAg dWludDhfdCAgbG9jYXRpb25fY291bnQ7CisgICAgICAgICAgICB1aW50MTZfdCBhc3NldF9kZXNj cmlwdG9yc19sZW5ndGg7CisgICAgICAgICAgICB1aW50MzJfdCBhc3NldF90eXBlOworCisgICAg ICAgICAgICBzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtID0gTlVMTDsKKworICAgICAgICAgICAgc3Ry dWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8gaW5mbzsKKworICAgICAgICAgICAgaWYgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8ICg4ICsgMzIgKyA4KSAvIDgpCisgICAgICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAvKgorICAg ICAgICAgICAgICogc2tpcDoKKyAgICAgICAgICAgICAqIC0gaWRlbnRpZmllcl90eXBlCisgICAg ICAgICAgICAgKiAtIGFzc2V0X2lkX3NjaGVtZQorICAgICAgICAgICAgICovCisgICAgICAgICAg ICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgKDggKyAzMikgLyA4KTsKKyAgICAgICAgICAgIGFz c2V0X2lkX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAg ICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsIGFzc2V0X2lkX2xlbmd0aCk7CisKKyAgICAgICAg ICAgIGFzc2V0X3R5cGUgPSBieXRlc3RyZWFtMl9nZXRfbGUzMigmbmdiYyk7CisKKyAgICAgICAg ICAgIC8vIHNraXA6IGFzc2V0X2Nsb2NrX3JlbGF0aW9uX2ZsYWcKKyAgICAgICAgICAgIGJ5dGVz dHJlYW0yX3NraXAoJm5nYmMsIDEpOworCisgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0 X2J5dGVzX2xlZnQoJm5nYmMpIDwgMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICAgICAgICAgIGxvY2F0aW9uX2NvdW50ID0gYnl0ZXN0cmVhbTJfZ2V0 X2J5dGV1KCZuZ2JjKTsKKworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxvY2F0aW9uX2Nv dW50OyArK2opCisgICAgICAgICAgICAgICAgaWYgKChlcnIgPSBwYXJzZV9tbXRfZ2VuZXJhbF9s b2NhdGlvbl9pbmZvKCZpbmZvLCAmbmdiYykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGVycjsKKworICAgICAgICAgICAgc3dpdGNoIChhc3NldF90eXBlKSB7CisgICAgICAgICAg ICBjYXNlIE1LVEFHKCdoJywgJ2UnLCAndicsICcxJyk6CisgICAgICAgICAgICAgICAgaWYgKGlu Zm8ubG9jYXRpb25fdHlwZSAhPSAweDAwKSByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cisg ICAgICAgICAgICAgICAgc3RyZWFtID0gZmluZF9vcl9hbGxvY2F0ZV9zdHJlYW0oY3R4LCBpbmZv LnR5cGUwLnBhY2tldF9pZCk7CisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5j b2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTzsKKyAgICAgICAgICAgICAg ICBzdHJlYW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkICAgPSBBVl9DT0RFQ19JRF9IRVZD OworICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFnICA9 IGFzc2V0X3R5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1L VEFHKCdtJywgJ3AnLCAnNCcsICdhJyk6CisgICAgICAgICAgICAgICAgaWYgKGluZm8ubG9jYXRp b25fdHlwZSAhPSAweDAwKSByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgICAgICAg ICAgICAgc3RyZWFtID0gZmluZF9vcl9hbGxvY2F0ZV9zdHJlYW0oY3R4LCBpbmZvLnR5cGUwLnBh Y2tldF9pZCk7CisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSByZXR1cm4gQVZF UlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+ Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9BVURJTzsKKyAgICAgICAgICAgICAgICBzdHJlYW0t PnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3RhZyAgPSBhc3NldF90eXBlOworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNS1RBRygncycsICd0JywgJ3AnLCAncCcpOgor ICAgICAgICAgICAgICAgIGlmIChpbmZvLmxvY2F0aW9uX3R5cGUgPT0gMHgwMCkgeworICAgICAg ICAgICAgICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShjdHgsIGluZm8u dHlwZTAucGFja2V0X2lkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxM KSByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0 cmVhbS0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfU1VCVElUTEU7CisgICAg ICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFnICA9IGFz c2V0X3R5cGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgY2FzZSBNS1RBRygnYScsICdhJywgJ3AnLCAncCcpOgorICAgICAgICAgICAgY2Fz ZSBNS1RBRygnYScsICdzJywgJ2cnLCAnZCcpOgorICAgICAgICAgICAgY2FzZSBNS1RBRygnYScs ICdhJywgJ2cnLCAnZCcpOgorICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBUT0RPCisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdi YykgPCAyKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICAgICAgYXNzZXRfZGVzY3JpcHRvcnNfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1 KCZuZ2JjKTsKKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdi YykgPCBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICBpZiAoc3RyZWFtICE9IE5VTEwpIHsKKyAg ICAgICAgICAgICAgICBHZXRCeXRlQ29udGV4dCBubmdiYzsKKyAgICAgICAgICAgICAgICBieXRl c3RyZWFtMl9pbml0KCZubmdiYywgbmdiYy5idWZmZXIsIGFzc2V0X2Rlc2NyaXB0b3JzX2xlbmd0 aCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQo Jm5uZ2JjKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGlmICgoZXJyID0gcGFyc2VfZGVzY3Jp cHRvcihzdHJlYW0sICZubmdiYykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBlcnI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdi YywgYXNzZXRfZGVzY3JpcHRvcnNfbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBieXRl c3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBwYXJzZV9wYWNrYWdlX2xpc3RfdGFibGUoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNv bnRleHQgKmdiYykKK3sKKyAgICBzaXplX3QgICBpOworICAgIHVpbnQzMl90IGxlbmd0aDsKKwor ICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDggKyA4ICsgMTYpIC8g OCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgaWYgKGJ5dGVzdHJl YW0yX2dldF9ieXRldShnYmMpICE9IFBBQ0tBR0VfTElTVF9UQUJMRV9JRCkKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgLy8gc2tpcDogdmVyc2lvbgorICAgIGJ5dGVz dHJlYW0yX3NraXB1KGdiYywgMSk7CisgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1 KGdiYyk7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGxlbmd0 aCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgeworICAgICAgICBp bnQgICAgIGVycjsKKyAgICAgICAgdWludDhfdCBudW1fb2ZfcGFja2FnZTsKKyAgICAgICAgdWlu dDhfdCBudW1fb2ZfaXBfZGVsaXZlcnk7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsK KyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7CisK KyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAxKQorICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIG51bV9vZl9wYWNrYWdl ID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbnVtX29mX3BhY2thZ2U7ICsraSkgeworICAgICAgICAgICAgdWludDhfdCAgICAgICAgICAg ICAgICAgICAgICAgcGFja2FnZV9pZF9sZW5ndGg7CisgICAgICAgICAgICBzdHJ1Y3QgTU1UR2Vu ZXJhbExvY2F0aW9uSW5mbyBpbmZvOworCisgICAgICAgICAgICBwYWNrYWdlX2lkX2xlbmd0aCA9 IGJ5dGVzdHJlYW0yX2dldF9ieXRlKCZuZ2JjKTsKKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3Nr aXAoJm5nYmMsIHBhY2thZ2VfaWRfbGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKChlcnIgPSBw YXJzZV9tbXRfZ2VuZXJhbF9sb2NhdGlvbl9pbmZvKCZpbmZvLCAmbmdiYykpIDwgMCkKKyAgICAg ICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJ5dGVzdHJl YW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDEpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICAgICAgbnVtX29mX2lwX2RlbGl2ZXJ5ID0gYnl0ZXN0cmVhbTJf Z2V0X2J5dGV1KCZuZ2JjKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX29mX2lwX2Rl bGl2ZXJ5OyArK2kpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cisg ICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3RoKTsKKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgaW50IHBhcnNlX3RhYmxlKE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVD b250ZXh0ICpnYmMpCit7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykg PCAyKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBzd2l0Y2ggKGJ5 dGVzdHJlYW0yX3BlZWtfYnl0ZXUoZ2JjKSkgeworICAgIGNhc2UgTU1UX1BBQ0tBR0VfVEFCTEVf SUQ6CisgICAgICAgIHJldHVybiBwYXJzZV9tbXRfcGFja2FnZV90YWJsZShjdHgsIGdiYyk7Cisg ICAgY2FzZSBQQUNLQUdFX0xJU1RfVEFCTEVfSUQ6CisgICAgICAgIHJldHVybiBwYXJzZV9wYWNr YWdlX2xpc3RfdGFibGUoY3R4LCBnYmMpOworICAgIH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShn YmMsIGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykpOyAvLyBUT0RPCisgICAgcmV0dXJu IDA7Cit9CisKK2VudW0geworICAgIFBBX01FU1NBR0VfSUQgPSAweDAwMDAsCit9OworCitzdGF0 aWMgaW50IHBhcnNlX3BhX21lc3NhZ2UoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQg KmdiYykKK3sKKyAgICB1aW50MzJfdCBsZW5ndGg7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0 X2J5dGVzX2xlZnQoZ2JjKSA8ICgxNiArIDggKyAzMikgLyA4KQorICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0g UEFfTUVTU0FHRV9JRCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAg Ly8gc2tpcDogdmVyc2lvbgorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7CisgICAgbGVu Z3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KGdiYyk7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJf Z2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisgICAgeworICAgICAgICBzaXplX3QgIGk7CisgICAgICAgIHVpbnQ4X3QgbnVt X29mX3RhYmxlczsKKworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOworICAgICAgICBieXRl c3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgbGVuZ3RoKTsKKworICAgICAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDEpCisgICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgbnVtX29mX3RhYmxlcyA9IGJ5dGVzdHJlYW0y X2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9vZl90YWJs ZXM7ICsraSkgeworICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgKDggKyA4ICsg MTYpIC8gOCk7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoJm5nYmMpID4gMCkgeworICAgICAgICAgICAgaW50IGVyciA9IHBhcnNlX3RhYmxl KGN0eCwgJm5nYmMpOworICAgICAgICAgICAgaWYgKGVyciA8IDApIHJldHVybiBlcnI7CisgICAg ICAgIH0KKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBsZW5ndGgpOworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlKE1NVFBD b250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgaWYgKGJ5dGVzdHJlYW0y X2dldF9ieXRlc19sZWZ0KGdiYykgPCA0KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKKyAgICBzd2l0Y2ggKGJ5dGVzdHJlYW0yX3BlZWtfYmUxNnUoZ2JjKSkgeworICAgIGNh c2UgUEFfTUVTU0FHRV9JRDoKKyAgICAgICAgcmV0dXJuIHBhcnNlX3BhX21lc3NhZ2UoY3R4LCBn YmMpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworZW51bSBGcmFnbWVudGF0aW9uSW5kaWNh dG9yIHsKKyAgICBOT1RfRlJBR01FTlRFRCAgPSAwYjAwLAorICAgIEZJUlNUX0ZSQUdNRU5UICA9 IDBiMDEsCisgICAgTUlERExFX0ZSQUdNRU5UID0gMGIxMCwKKyAgICBMQVNUX0ZSQUdNRU5UICAg PSAwYjExLAorfTsKKworc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyIHsKKyAgICB1aW50MTZfdCAg ICAgICAgICAgICAgICAgcGlkOworICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqbmV4dDsK KworICAgIHVpbnQ4X3QgKmRhdGE7CisgICAgc2l6ZV90ICBzaXplLCBjYXA7CisKKyAgICB1aW50 MzJfdCBsYXN0X3NlcTsKKworICAgIGVudW0geworICAgICAgICBJTklUID0gMCwKKyAgICAgICAg Tk9UX1NUQVJURUQsCisgICAgICAgIElOX0ZSQUdNRU5ULAorICAgICAgICBTS0lQLAorICAgIH0g c3RhdGU7Cit9OworCitzdGF0aWMgaW50CithcHBlbmRfZGF0YShzdHJ1Y3QgRnJhZ21lbnRBc3Nl bWJsZXIgKmN0eCwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3Qgc2l6ZSkKK3sKKyAgICBp ZiAoY3R4LT5zaXplICsgc2l6ZSA+IFVJTlQzMl9NQVgpIHJldHVybiBBVkVSUk9SKEVPVkVSRkxP Vyk7CisgICAgaWYgKGN0eC0+Y2FwIDwgY3R4LT5zaXplICsgc2l6ZSkgeworICAgICAgICB2b2lk ICAgKm5ld19kYXRhOworICAgICAgICBzaXplX3QgbmV3X2NhcCA9IGN0eC0+Y2FwID09IDAgPyAx MDI0IDogY3R4LT5jYXAgKiAyOworICAgICAgICB3aGlsZSAobmV3X2NhcCA8IGN0eC0+c2l6ZSAr IHNpemUpIG5ld19jYXAgKj0gMjsKKworICAgICAgICBuZXdfZGF0YSA9IGF2X3JlYWxsb2MoY3R4 LT5kYXRhLCBuZXdfY2FwKTsKKyAgICAgICAgaWYgKG5ld19kYXRhID09IE5VTEwpIHJldHVybiBB VkVSUk9SKGVycm5vKTsKKyAgICAgICAgY3R4LT5kYXRhID0gbmV3X2RhdGE7CisgICAgICAgIGN0 eC0+Y2FwICA9IG5ld19jYXA7CisgICAgfQorICAgIG1lbWNweShjdHgtPmRhdGEgKyBjdHgtPnNp emUsIGRhdGEsIHNpemUpOworICAgIGN0eC0+c2l6ZSArPSBzaXplOworICAgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50CitjaGVja19zdGF0ZShNTVRQQ29udGV4dCAqY3R4LCBzdHJ1Y3QgRnJh Z21lbnRBc3NlbWJsZXIgKmFzcywgdWludDMyX3Qgc2VxX251bSkKK3sKKyAgICBpZiAoYXNzLT5z dGF0ZSA9PSBJTklUKSB7CisgICAgICAgIGFzcy0+c3RhdGUgPSBTS0lQOworICAgIH0gZWxzZSBp ZiAoc2VxX251bSAhPSBhc3MtPmxhc3Rfc2VxICsgMSkgeworICAgICAgICBpZiAoYXNzLT5zaXpl ICE9IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgtPnMsIEFWX0xPR19XQVJOSU5HLAorICAg ICAgICAgICAgICAgICAgICJQYWNrZXQgc2VxdWVuY2UgbnVtYmVyIGp1bXA6ICV1ICsgMSAhPSAl dSwgZHJvcCAlenUgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgYXNzLT5sYXN0X3NlcSwg c2VxX251bSwgYXNzLT5zaXplKTsKKyAgICAgICAgICAgIGFzcy0+c2l6ZSA9IDA7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LT5zLCBBVl9MT0dfV0FSTklORywKKyAg ICAgICAgICAgICAgICAgICAiUGFja2V0IHNlcXVlbmNlIG51bWJlciBqdW1wOiAldSArIDEgIT0g JXVcbiIsCisgICAgICAgICAgICAgICAgICAgYXNzLT5sYXN0X3NlcSwgc2VxX251bSk7CisgICAg ICAgIH0KKyAgICAgICAgYXNzLT5zdGF0ZSA9IFNLSVA7CisgICAgfQorICAgIGFzcy0+bGFzdF9z ZXEgPSBzZXFfbnVtOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFzc2VtYmxlX2Zy YWdtZW50KAorICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqY3R4LCB1aW50MzJfdCBzZXFf bnVtLAorICAgIGVudW0gRnJhZ21lbnRhdGlvbkluZGljYXRvciBpbmRpY2F0b3IsCisgICAgY29u c3QgdWludDhfdCAqZGF0YSwgdWludDMyX3Qgc2l6ZSwKKyAgICBpbnQgKCpwYXJzZXIpKE1NVFBD b250ZXh0ICosIEdldEJ5dGVDb250ZXh0ICopLAorICAgIE1NVFBDb250ZXh0ICpvcGFxdWUpCit7 CisgICAgR2V0Qnl0ZUNvbnRleHQgZ2JjOworICAgIGludCAgICAgICAgICAgIGVycjsKKworICAg IHN3aXRjaCAoaW5kaWNhdG9yKSB7CisgICAgY2FzZSBOT1RfRlJBR01FTlRFRDoKKyAgICAgICAg aWYgKGN0eC0+c3RhdGUgPT0gSU5fRlJBR01FTlQpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworICAgICAgICBjdHgtPnN0YXRlID0gTk9UX1NUQVJURUQ7CisgICAgICAgIGJ5dGVzdHJlYW0y X2luaXQoJmdiYywgZGF0YSwgc2l6ZSk7CisgICAgICAgIHJldHVybiBwYXJzZXIob3BhcXVlLCAm Z2JjKTsKKyAgICBjYXNlIEZJUlNUX0ZSQUdNRU5UOgorICAgICAgICBpZiAoY3R4LT5zdGF0ZSA9 PSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGN0eC0+ c3RhdGUgPSBJTl9GUkFHTUVOVDsKKyAgICAgICAgcmV0dXJuIGFwcGVuZF9kYXRhKGN0eCwgZGF0 YSwgc2l6ZSk7CisgICAgY2FzZSBNSURETEVfRlJBR01FTlQ6CisgICAgICAgIGlmIChjdHgtPnN0 YXRlID09IFNLSVApIHsKKyAgICAgICAgICAgIGF2X2xvZyhvcGFxdWUtPnMsIEFWX0xPR19WRVJC T1NFLCAiRHJvcCBwYWNrZXQgJXVcbiIsIHNlcV9udW0pOworICAgICAgICAgICAgcmV0dXJuIDA7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgIT0gSU5fRlJBR01FTlQpIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICByZXR1cm4gYXBwZW5kX2RhdGEoY3R4LCBk YXRhLCBzaXplKTsKKyAgICBjYXNlIExBU1RfRlJBR01FTlQ6CisgICAgICAgIGlmIChjdHgtPnN0 YXRlID09IFNLSVApIHsKKyAgICAgICAgICAgIGF2X2xvZyhvcGFxdWUtPnMsIEFWX0xPR19WRVJC T1NFLCAiRHJvcCBwYWNrZXQgJXVcbiIsIHNlcV9udW0pOworICAgICAgICAgICAgcmV0dXJuIDA7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgIT0gSU5fRlJBR01FTlQpIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBpZiAoKGVyciA9IGFwcGVuZF9kYXRhKGN0 eCwgZGF0YSwgc2l6ZSkpIDwgMCkgcmV0dXJuIGVycjsKKworICAgICAgICBieXRlc3RyZWFtMl9p bml0KCZnYmMsIGN0eC0+ZGF0YSwgY3R4LT5zaXplKTsKKyAgICAgICAgZXJyID0gcGFyc2VyKG9w YXF1ZSwgJmdiYyk7CisKKyAgICAgICAgY3R4LT5zaXplICA9IDA7CisgICAgICAgIGN0eC0+c3Rh dGUgPSBOT1RfU1RBUlRFRDsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICBkZWZhdWx0OgorICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKgorZmluZF9vcl9hbGxvY2F0ZV9hc3NlbWJsZXIoTU1UUENv bnRleHQgKmN0eCwgdWludDE2X3QgcGlkKQoreworICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxl ciAqYXNzOworICAgIGZvciAoYXNzID0gY3R4LT5hc3NlbWJsZXI7IGFzcyAhPSBOVUxMOyBhc3Mg PSBhc3MtPm5leHQpCisgICAgICAgIGlmIChhc3MtPnBpZCA9PSBwaWQpCisgICAgICAgICAgICBy ZXR1cm4gYXNzOworCisgICAgYXNzID0gYXZfbWFsbG9jeihzaXplb2Yoc3RydWN0IEZyYWdtZW50 QXNzZW1ibGVyKSk7CisgICAgaWYgKGFzcyA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKyAgICBhc3Mt PnBpZCAgICAgICAgICAgICAgPSBwaWQ7CisgICAgYXNzLT5uZXh0ICAgICAgICAgICAgID0gY3R4 LT5hc3NlbWJsZXI7CisgICAgcmV0dXJuIGN0eC0+YXNzZW1ibGVyID0gYXNzOworfQorCitzdGF0 aWMgaW50IHBhcnNlX3NpZ25hbGxpbmdfbWVzc2FnZXMoCisgICAgTU1UUENvbnRleHQgKmN0eCwg dWludDMyX3Qgc2VxX251bSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICBpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgZXJyOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICBi eXRlOworICAgIGVudW0gRnJhZ21lbnRhdGlvbkluZGljYXRvciBmcmFnbWVudGF0aW9uX2luZGlj YXRvcjsKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoX2V4dGVuc2lvbl9m bGFnOworICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbl9mbGFnOwor CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXIgPSBmaW5kX29yX2FsbG9j YXRlX2Fzc2VtYmxlcigKKyAgICAgICAgY3R4LCBjdHgtPmN1cnJlbnRfcGlkKTsKKyAgICBpZiAo YXNzZW1ibGVyID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKworICAgIGlmIChieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDIgKyA0ICsgMSArIDEgKyA4KSAvIDgpCisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGJ5dGUgICAgICAgICAgICAg ICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisgICAgZnJhZ21lbnRhdGlvbl9p bmRpY2F0b3IgPSBieXRlID4+IDY7CisgICAgbGVuZ3RoX2V4dGVuc2lvbl9mbGFnICAgPSAoYnl0 ZSA+PiAxKSAmIDE7CisgICAgYWdncmVnYXRpb25fZmxhZyAgICAgICAgPSBieXRlICYgMTsKKwor ICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7CisKKyAgICBpZiAoKGVyciA9IGNoZWNrX3N0 YXRlKGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtKSkgPCAwKQorICAgICAgICByZXR1cm4gZXJyOwor CisgICAgaWYgKCFhZ2dyZWdhdGlvbl9mbGFnKQorICAgICAgICByZXR1cm4gYXNzZW1ibGVfZnJh Z21lbnQoCisgICAgICAgICAgICBhc3NlbWJsZXIsIHNlcV9udW0sIGZyYWdtZW50YXRpb25faW5k aWNhdG9yLAorICAgICAgICAgICAgZ2JjLT5idWZmZXIsIGJ5dGVzdHJlYW0yX2dldF9ieXRlc19s ZWZ0KGdiYyksCisgICAgICAgICAgICBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2UsIGN0eCk7CisK KyAgICBpZiAoZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IgIT0gTk9UX0ZSQUdNRU5URUQpCisgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLyBjYW5ub3QgYmUgYm90aCBmcmFnbWVu dGVkIGFuZCBhZ2dyZWdhdGVkCisKKyAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xl ZnQoZ2JjKSA+IDApIHsKKyAgICAgICAgdWludDMyX3QgbGVuZ3RoOworCisgICAgICAgIGlmIChs ZW5ndGhfZXh0ZW5zaW9uX2ZsYWcpCisgICAgICAgICAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9n ZXRfYmUzMihnYmMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNihnYmMpOworCisgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNf bGVmdChnYmMpIDwgbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgICAgIGlmICgoZXJyID0gYXNzZW1ibGVfZnJhZ21lbnQoCisgICAgICAgICAgICBh c3NlbWJsZXIsIHNlcV9udW0sIE5PVF9GUkFHTUVOVEVELAorICAgICAgICAgICAgZ2JjLT5idWZm ZXIsIGxlbmd0aCwgcGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlLCBjdHgpKSA8IDApCisgICAgICAg ICAgICByZXR1cm4gZXJyOworICAgICAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7 CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9wdHNfZHRzKE1N VFBDb250ZXh0ICpjdHgsIHN0cnVjdCBTdHJlYW1zICpzKQoreworICAgIHN0cnVjdCBNUFVUaW1l c3RhbXBEZXNjcmlwdG9yICAgICAgICAgKmRlc2MgICAgID0gTlVMTDsKKyAgICBzdHJ1Y3QgTVBV RXh0ZW5kZWRUaW1lc3RhbXBEZXNjcmlwdG9yICpleHRfZGVzYyA9IE5VTEw7CisKKyAgICBpbnQ2 NF90IHB0aW1lOworICAgIHNpemVfdCAgaSwgajsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzLT5u dW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpIHsKKyAgICAgICAgaWYgKHMtPnRpbWVzdGFt cF9kZXNjcmlwdG9yW2ldLnNlcV9udW0gPT0KKyAgICAgICAgICAgIHMtPmxhc3Rfc2VxdWVuY2Vf bnVtYmVyKSB7CisgICAgICAgICAgICBkZXNjID0gcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBp OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAw OyBpIDwgcy0+bnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkgeworICAgICAgICBp ZiAocy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0gPT0KKyAgICAgICAgICAg IHMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyKSB7CisgICAgICAgICAgICBleHRfZGVzYyA9IHMtPmV4 dF90aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorICAgIH0KKworICAgIGlmIChkZXNjID09IE5VTEwgfHwgZXh0X2Rlc2MgPT0gTlVMTCkgcmV0 dXJuIEZGRVJST1JfUkVETzsKKyAgICBwdGltZSA9IGF2X3Jlc2NhbGUoZGVzYy0+cHJlc2VudGF0 aW9uX3RpbWUsIHMtPnN0cmVhbS0+dGltZV9iYXNlLmRlbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgMTAwMDAwMGxsICogcy0+c3RyZWFtLT50aW1lX2Jhc2UubnVtKTsKKworICAgIGlmIChzLT5h dV9jb3VudCA+PSBleHRfZGVzYy0+bnVtX29mX2F1KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKworICAgIGN0eC0+cGt0LT5kdHMgPSBwdGltZSAtIGV4dF9kZXNjLT5kZWNv ZGluZ190aW1lX29mZnNldDsKKworICAgIGZvciAoaiA9IDA7IGogPCBzLT5hdV9jb3VudDsgKytq KQorICAgICAgICBjdHgtPnBrdC0+ZHRzICs9IGV4dF9kZXNjLT5hdVtqXS5wdHNfb2Zmc2V0Owor CisgICAgY3R4LT5wa3QtPnB0cyA9IGN0eC0+cGt0LT5kdHMgKyBleHRfZGVzYy0+YXVbcy0+YXVf Y291bnRdLmR0c19wdHNfb2Zmc2V0OworCisgICAgKytzLT5hdV9jb3VudDsKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGludCBlbWl0X2Nsb3NlZF9jYXB0aW9uX21mdShNTVRQQ29udGV4dCAq Y3R4LCBzdHJ1Y3QgU3RyZWFtcyAqc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCAgZGF0YV90eXBlLCBzdWJz YW1wbGVfbnVtYmVyLCBsYXN0X3N1YnNhbXBsZV9udW1iZXIsIGJ5dGU7CisgICAgdWludDMyX3Qg ZGF0YV9zaXplOworICAgIHNpemVfdCAgIGk7CisgICAgaW50ICAgICAgZXJyOworICAgIGJvb2wg ICAgIGxlbmd0aF9leHRfZmxhZywgc3Vic2FtcGxlX2luZm9fbGlzdF9mbGFnOworCisgICAgYXZf YXNzZXJ0MChjdHgtPnBrdCAhPSBOVUxMKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0 ZXNfbGVmdChnYmMpIDwgKDggKyA4ICsgOCArIDggKyA0ICsgMSArIDEgKyAyKSAvIDgpCisgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgLyoKKyAgICAgKiBza2lwOgor ICAgICAqIC0gc3VidGl0bGVfdGFnCisgICAgICogLSBzdWJ0aXRsZV9zZXF1ZW5jZV9udW1iZXIK KyAgICAgKi8KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsICg4ICsgOCkgLyA4KTsKKworICAg IHN1YnNhbXBsZV9udW1iZXIgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworICAg IGxhc3Rfc3Vic2FtcGxlX251bWJlciA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworCisg ICAgYnl0ZSAgICAgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7 CisgICAgZGF0YV90eXBlICAgICAgICAgICAgICAgID0gYnl0ZSA+PiA0OworICAgIGxlbmd0aF9l eHRfZmxhZyAgICAgICAgICA9IChieXRlID4+IDMpICYgMTsKKyAgICBzdWJzYW1wbGVfaW5mb19s aXN0X2ZsYWcgPSAoYnl0ZSA+PiAyKSAmIDE7CisKKyAgICBpZiAoZGF0YV90eXBlICE9IDBiMDAw MCkgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworCisgICAgaWYgKGxlbmd0aF9leHRfZmxh ZykKKyAgICAgICAgZGF0YV9zaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzIoZ2JjKTsKKyAgICBl bHNlCisgICAgICAgIGRhdGFfc2l6ZSA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2KGdiYyk7CisKKyAg ICBpZiAoc3Vic2FtcGxlX251bWJlciA9PSAwICYmIGxhc3Rfc3Vic2FtcGxlX251bWJlciA+IDAg JiYKKyAgICAgICAgc3Vic2FtcGxlX2luZm9fbGlzdF9mbGFnKSB7CisgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBsYXN0X3N1YnNhbXBsZV9udW1iZXI7ICsraSkgeworICAgICAgICAgICAgLy8gc2tp cDogc3Vic2FtcGxlX2lfZGF0YV90eXBlCisgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwKGdi YywgKDQgKyA0KSAvIDgpOworICAgICAgICAgICAgLy8gc2tpcDogc3Vic2FtcGxlX2lfZGF0YV9z aXplCisgICAgICAgICAgICBpZiAobGVuZ3RoX2V4dF9mbGFnKSB7CisgICAgICAgICAgICAgICAg Ynl0ZXN0cmVhbTJfc2tpcChnYmMsIDMyIC8gOCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCAxNiAvIDgpOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0 KGdiYykgPCBkYXRhX3NpemUpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgIGlmICgoZXJyID0gYXZfbmV3X3BhY2tldChjdHgtPnBrdCwgZGF0YV9zaXplKSkgPCAwKSBy ZXR1cm4gZXJyOworICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KGdiYywgY3R4LT5wa3QtPmRh dGEsIGRhdGFfc2l6ZSk7CisKKyAgICBjdHgtPnBrdC0+c3RyZWFtX2luZGV4ID0gc3QtPnN0cmVh bS0+aW5kZXg7CisgICAgY3R4LT5wa3QtPmZsYWdzICAgICAgICA9IHN0LT5mbGFnczsKKyAgICBj dHgtPnBrdC0+cG9zICAgICAgICAgID0gc3QtPm9mZnNldDsKKyAgICBjdHgtPnBrdCAgICAgICAg ICAgICAgID0gTlVMTDsKKworICAgIHN0LT5mbGFncyAgPSAwOworICAgIHN0LT5vZmZzZXQgPSAt MTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbWl0X3BhY2tldChNTVRQQ29udGV4 dCAqY3R4LCBzdHJ1Y3QgU3RyZWFtcyAqc3QsIEFWQnVmZmVyUmVmICpidWYpCit7CisgICAgaW50 IGVycjsKKyAgICBhdl9hc3NlcnQwKGN0eC0+cGt0ICE9IE5VTEwpOworICAgIGF2X3BhY2tldF91 bnJlZihjdHgtPnBrdCk7CisgICAgaWYgKChlcnIgPSBmaWxsX3B0c19kdHMoY3R4LCBzdCkpIDwg MCkgeworICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7CisgICAgICAgIHJldHVybiBlcnI7 CisgICAgfQorICAgIGN0eC0+cGt0LT5idWYgICAgICAgICAgPSBidWY7CisgICAgY3R4LT5wa3Qt PmRhdGEgICAgICAgICA9IGJ1Zi0+ZGF0YTsKKyAgICBjdHgtPnBrdC0+c2l6ZSAgICAgICAgID0g YnVmLT5zaXplIC0gQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRTsKKyAgICBjdHgtPnBrdC0+ c3RyZWFtX2luZGV4ID0gc3QtPnN0cmVhbS0+aW5kZXg7CisgICAgY3R4LT5wa3QtPmZsYWdzICAg ICAgICA9IHN0LT5mbGFnczsKKyAgICBjdHgtPnBrdC0+cG9zICAgICAgICAgID0gc3QtPm9mZnNl dDsKKyAgICBjdHgtPnBrdCAgICAgICAgICAgICAgID0gTlVMTDsKKworICAgIHN0LT5mbGFncyAg PSAwOworICAgIHN0LT5vZmZzZXQgPSAtMTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBjb25zdW1lX21mdShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQorewor ICAgIGludCAgICAgICAgICAgIGVycjsKKyAgICBBVkJ1ZmZlclJlZiAgICAqYnVmX3JlZjsKKyAg ICB1bnNpZ25lZCBpbnQgICBzaXplOworICAgIHVpbnQ4X3QgICAgICAgIGJ5dGU7CisgICAgc2l6 ZV90ICAgICAgICAgb2xkX3NpemU7CisgICAgc3RydWN0IFN0cmVhbXMgKnN0ID0gZmluZF9jdXJy ZW50X3N0cmVhbShjdHgpOworICAgIGF2X2Fzc2VydDAoc3QgIT0gTlVMTCk7CisKKyAgICBzd2l0 Y2ggKHN0LT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCkgeworICAgIGNhc2UgQVZfQ09ERUNf SURfSEVWQzoKKyAgICAgICAgc2l6ZSA9IGJ5dGVzdHJlYW0yX2dldF9iZTMyKGdiYyk7CisgICAg ICAgIGlmIChzaXplICE9IGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykpIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBpZiAoc2l6ZSA8IDEpIC8vIHdlIGV4cGVjdCB0 byBleHRyYWN0IE5BTCB1bml0IGhlYWRlciB0eXBlIGJlbG93CisgICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZSA9IGJ5dGVzdHJlYW0yX3BlZWtfYnl0 ZXUoZ2JjKTsKKyAgICAgICAgaWYgKChieXRlID4+IDcpICE9IDApIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOyAvLyBmb3JiaWRkZW5femVyb19iaXQKKworICAgICAgICBvbGRfc2l6ZSA9IHN0 LT5wZW5kaW5nX2J1ZmZlciA9PSBOVUxMID8gMCA6CisgICAgICAgICAgICAgICAgICAgKHN0LT5w ZW5kaW5nX2J1ZmZlci0+c2l6ZSAtIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpOworICAg ICAgICBpZiAoKGVyciA9IGF2X2J1ZmZlcl9yZWFsbG9jKAorICAgICAgICAgICAgJnN0LT5wZW5k aW5nX2J1ZmZlciwKKyAgICAgICAgICAgIG9sZF9zaXplICsgc2l6ZSArIDQgKyBBVl9JTlBVVF9C VUZGRVJfUEFERElOR19TSVpFKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAg ICAgLy8gZml4IHN0YXJ0IGNvZGUgKDAwIDAwIDAwIDAxKQorICAgICAgICBBVl9XQjMyKHN0LT5w ZW5kaW5nX2J1ZmZlci0+ZGF0YSArIG9sZF9zaXplLCAxKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJf Z2V0X2J1ZmZlcnUoCisgICAgICAgICAgICBnYmMsIHN0LT5wZW5kaW5nX2J1ZmZlci0+ZGF0YSAr IG9sZF9zaXplICsgNCwgc2l6ZSk7CisgICAgICAgIGlmICgoKGJ5dGUgPj4gMSkgJiAwYjExMTEx MSkgPCAweDIwKSB7IC8vIGEgVkNMIE5BTCB1bml0CisgICAgICAgICAgICAvLyBCZWNhdXNlIHdl IGNhbid0IGVtaXQgYSBwYWNrZXQgd2l0aG91dCBhIHZhbGlkIFBUUywgd2UgbmVlZCB0bworICAg ICAgICAgICAgLy8gYWdncmVnYXRlIHRoZSBub24tVkNMIE5BTCB1bml0cyB3aXRoIFZDTCBvbmVz LiBBbHRob3VnaCB3ZSBkaWRuJ3QKKyAgICAgICAgICAgIC8vIHRlY2huaWNhbGx5IGlkZW50aWZ5 IGFuIGFjY2VzcyB1bml0IGhlcmUsIHRoaXMgd29ya3MgZm9yIGFsbCBzYW1wbGVzCisgICAgICAg ICAgICAvLyB3ZSBoYXZlLgorICAgICAgICAgICAgYnVmX3JlZiA9IHN0LT5wZW5kaW5nX2J1ZmZl cjsKKyAgICAgICAgICAgIHN0LT5wZW5kaW5nX2J1ZmZlciA9IE5VTEw7CisKKyAgICAgICAgICAg IG1lbXNldChidWZfcmVmLT5kYXRhICsgb2xkX3NpemUgKyBzaXplICsgNCwgMCwKKyAgICAgICAg ICAgICAgICAgICBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKKyAgICAgICAgICAgIHJl dHVybiBlbWl0X3BhY2tldChjdHgsIHN0LCBidWZfcmVmKTsKKyAgICAgICAgfQorICAgICAgICBy ZXR1cm4gMDsKKyAgICBjYXNlIEFWX0NPREVDX0lEX0FBQ19MQVRNOgorICAgICAgICBzaXplID0g Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKTsKKyAgICAgICAgaWYgKHNpemUgPj4gMTMp IHJldHVybiBBVkVSUk9SKEVPVkVSRkxPVyk7CisgICAgICAgIGlmICgoYnVmX3JlZiA9IGF2X2J1 ZmZlcl9hbGxvYygKKyAgICAgICAgICAgIHNpemUgKyAzICsgQVZfSU5QVVRfQlVGRkVSX1BBRERJ TkdfU0laRSkpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwor ICAgICAgICBidWZfcmVmLT5kYXRhWzBdID0gMHg1NjsKKyAgICAgICAgYnVmX3JlZi0+ZGF0YVsx XSA9IDB4ZTAgfCAoc2l6ZSA+PiA4KTsKKyAgICAgICAgYnVmX3JlZi0+ZGF0YVsyXSA9IHNpemUg JiAweGZmOworICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsIGJ1Zl9yZWYtPmRh dGEgKyAzLCBzaXplKTsKKyAgICAgICAgbWVtc2V0KGJ1Zl9yZWYtPmRhdGEgKyAzICsgc2l6ZSwg MCwgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSk7CisgICAgICAgIHJldHVybiBlbWl0X3Bh Y2tldChjdHgsIHN0LCBidWZfcmVmKTsKKyAgICBjYXNlIEFWX0NPREVDX0lEX1RUTUw6CisgICAg ICAgIHJldHVybiBlbWl0X2Nsb3NlZF9jYXB0aW9uX21mdShjdHgsIHN0LCBnYmMpOworICAgIGRl ZmF1bHQ6CisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICB9Cit9CisK K3N0YXRpYyBpbnQgcGFyc2VfbWZ1X3RpbWVkX2RhdGEoCisgICAgTU1UUENvbnRleHQgKmN0eCwg c3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXIsCisgICAgdWludDMyX3Qgc2VxX251 bSwgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGluZGljYXRvciwKKyAgICBHZXRCeXRlQ29u dGV4dCAqZ2JjKQoreworICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCAoMzIgKyAzMiArIDMyICsg OCArIDgpIC8gOCk7CisgICAgcmV0dXJuIGFzc2VtYmxlX2ZyYWdtZW50KAorICAgICAgICBhc3Nl bWJsZXIsIHNlcV9udW0sIGluZGljYXRvciwKKyAgICAgICAgZ2JjLT5idWZmZXIsIGJ5dGVzdHJl YW0yX2dldF9ieXRlc19sZWZ0KGdiYyksCisgICAgICAgIGNvbnN1bWVfbWZ1LCBjdHgpOworfQor CitzdGF0aWMgaW50IHBhcnNlX21mdV9ub25fdGltZWRfZGF0YSgKKyAgICBNTVRQQ29udGV4dCAq Y3R4LCBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlciwKKyAgICB1aW50MzJfdCBz ZXFfbnVtLCBlbnVtIEZyYWdtZW50YXRpb25JbmRpY2F0b3IgaW5kaWNhdG9yLAorICAgIEdldEJ5 dGVDb250ZXh0ICpnYmMpCit7CisgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIDMyIC8gOCk7Cisg ICAgcmV0dXJuIGFzc2VtYmxlX2ZyYWdtZW50KAorICAgICAgICBhc3NlbWJsZXIsIHNlcV9udW0s IGluZGljYXRvciwKKyAgICAgICAgZ2JjLT5idWZmZXIsIGJ5dGVzdHJlYW0yX2dldF9ieXRlc19s ZWZ0KGdiYyksCisgICAgICAgIGNvbnN1bWVfbWZ1LCBjdHgpOworfQorCitzdGF0aWMgaW50IHBh cnNlX21wdShNTVRQQ29udGV4dCAqY3R4LCB1aW50MzJfdCBzZXFfbnVtLCBHZXRCeXRlQ29udGV4 dCAqZ2JjKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBlcnI7CisgICAgdWlu dDhfdCAgICAgICAgICAgICAgICAgICAgIGJ5dGUsIGZyYWdtZW50X3R5cGU7CisgICAgYm9vbCAg ICAgICAgICAgICAgICAgICAgICAgIHRpbWVkX2ZsYWc7CisgICAgZW51bSBGcmFnbWVudGF0aW9u SW5kaWNhdG9yIGZyYWdtZW50YXRpb25faW5kaWNhdG9yOworICAgIGJvb2wgICAgICAgICAgICAg ICAgICAgICAgICBhZ2dyZWdhdGlvbl9mbGFnOworICAgIHVpbnQxNl90ICAgICAgICAgICAgICAg ICAgICBsZW5ndGg7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG1wdV9zZXF1ZW5j ZV9udW1iZXI7CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICAgICphc3NlbWJsZXI7Cisg ICAgc3RydWN0IFN0cmVhbXMgICAgICAgICAgICAgICpzdHJlYW1zOworCisgICAgc3RyZWFtcyA9 IGZpbmRfY3VycmVudF9zdHJlYW0oY3R4KTsKKyAgICBpZiAoc3RyZWFtcyA9PSBOVUxMIHx8IHN0 cmVhbXMtPnN0cmVhbS0+ZGlzY2FyZCA+PSBBVkRJU0NBUkRfQUxMKQorICAgICAgICByZXR1cm4g MDsKKworICAgIGFzc2VtYmxlciA9IGZpbmRfb3JfYWxsb2NhdGVfYXNzZW1ibGVyKGN0eCwgY3R4 LT5jdXJyZW50X3BpZCk7CisgICAgaWYgKGFzc2VtYmxlciA9PSBOVUxMKSByZXR1cm4gQVZFUlJP UihlcnJubyk7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICgx NiArIDQgKyAxICsgMiArIDEgKyA4ICsgMzIpIC8gOCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisKKyAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsK KyAgICBpZiAobGVuZ3RoICE9IGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykpCisgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgYnl0ZSAgICAgICAgICAgICAg ICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKyAgICBmcmFnbWVudF90eXBlICAg ICAgICAgICA9IGJ5dGUgPj4gNDsKKyAgICB0aW1lZF9mbGFnICAgICAgICAgICAgICA9IChieXRl ID4+IDMpICYgMTsKKyAgICBmcmFnbWVudGF0aW9uX2luZGljYXRvciA9IChieXRlID4+IDEpICYg MGIxMTsKKyAgICBhZ2dyZWdhdGlvbl9mbGFnICAgICAgICA9IGJ5dGUgJiAxOworCisgICAgLy8g c2tpcDogZnJhZ21lbnRfY291bnRlcgorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7CisK KyAgICBtcHVfc2VxdWVuY2VfbnVtYmVyID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KGdiYyk7CisK KyAgICBpZiAoYWdncmVnYXRpb25fZmxhZyAmJiBmcmFnbWVudGF0aW9uX2luZGljYXRvciAhPSBO T1RfRlJBR01FTlRFRCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7IC8vIGNh bm5vdCBiZSBib3RoIGZyYWdtZW50ZWQgYW5kIGFnZ3JlZ2F0ZWQKKworICAgIGlmIChmcmFnbWVu dF90eXBlICE9IDIpCisgICAgICAgIHJldHVybiAwOyAvLyBub3QgTUZVCisKKyAgICBpZiAoYXNz ZW1ibGVyLT5zdGF0ZSA9PSBJTklUICYmICFjdHgtPmlzX3JhcCkKKyAgICAgICAgcmV0dXJuIDA7 IC8vIHdhaXQgZm9yIHRoZSBmaXJzdCBSQVAKKworICAgIGlmIChhc3NlbWJsZXItPnN0YXRlID09 IElOSVQpIHsKKyAgICAgICAgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIgPSBtcHVfc2Vx dWVuY2VfbnVtYmVyOworICAgIH0gZWxzZSBpZiAobXB1X3NlcXVlbmNlX251bWJlciA9PSBzdHJl YW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciArIDEpIHsKKyAgICAgICAgc3RyZWFtcy0+bGFzdF9z ZXF1ZW5jZV9udW1iZXIgPSBtcHVfc2VxdWVuY2VfbnVtYmVyOworICAgICAgICBzdHJlYW1zLT5h dV9jb3VudCAgICAgICAgICAgICA9IDA7CisgICAgfSBlbHNlIGlmIChtcHVfc2VxdWVuY2VfbnVt YmVyICE9IHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyKSB7CisgICAgICAgIGF2X2xvZyhz dHJlYW1zLT5zdHJlYW0sIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJNUFUgc2VxdWVu Y2UgbnVtYmVyIGp1bXA6ICV1ICsgMSAhPSAldVxuIiwKKyAgICAgICAgICAgICAgIHN0cmVhbXMt Pmxhc3Rfc2VxdWVuY2VfbnVtYmVyLCBtcHVfc2VxdWVuY2VfbnVtYmVyKTsKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgaWYgKChlcnIgPSBjaGVja19z dGF0ZShjdHgsIGFzc2VtYmxlciwgc2VxX251bSkpIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsK KworICAgIGlmIChmcmFnbWVudGF0aW9uX2luZGljYXRvciA9PSBOT1RfRlJBR01FTlRFRCB8fAor ICAgICAgICBmcmFnbWVudGF0aW9uX2luZGljYXRvciA9PSBGSVJTVF9GUkFHTUVOVCkKKyAgICAg ICAgc3RyZWFtcy0+b2Zmc2V0ID0gY3R4LT5wa3QtPnBvczsKKworICAgIGlmIChjdHgtPmlzX3Jh cCkKKyAgICAgICAgc3RyZWFtcy0+ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZOworCisgICAgaWYg KHRpbWVkX2ZsYWcpIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0aW9uX2ZsYWcpIHsKKyAgICAgICAg ICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpID4gMCkgeworICAgICAg ICAgICAgICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2KGdiYyk7CisgICAgICAgICAg ICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBsZW5ndGgpCisgICAg ICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAg ICAgICAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7 CisKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gcGFyc2VfbWZ1X3RpbWVkX2RhdGEoCisgICAg ICAgICAgICAgICAgICAgICAgICBjdHgsIGFzc2VtYmxlciwgc2VxX251bSwgTk9UX0ZSQUdNRU5U RUQsICZuZ2JjKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA8IDApIHJldHVybiBlcnI7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdi YywgbGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IHJldHVybiBwYXJzZV9tZnVfdGltZWRfZGF0YSgKKyAgICAgICAgICAgICAgICBjdHgsIGFzc2Vt Ymxlciwgc2VxX251bSwgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IsIGdiYyk7CisgICAgICAgIH0K KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYWdncmVnYXRpb25fZmxhZykgeworICAgICAgICAg ICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPiAwKSB7CisgICAgICAg ICAgICAgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYoZ2JjKTsKKyAgICAgICAgICAg ICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGxlbmd0aCkKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOworICAgICAgICAg ICAgICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgbGVuZ3RoKTsK KworICAgICAgICAgICAgICAgICAgICBlcnIgPSBwYXJzZV9tZnVfbm9uX3RpbWVkX2RhdGEoCisg ICAgICAgICAgICAgICAgICAgICAgICBjdHgsIGFzc2VtYmxlciwgc2VxX251bSwgTk9UX0ZSQUdN RU5URUQsICZuZ2JjKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA8IDApIHJldHVybiBl cnI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1 KGdiYywgbGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHJldHVybiBwYXJzZV9tZnVfbm9uX3RpbWVkX2RhdGEoCisgICAgICAgICAgICAgICAgY3R4 LCBhc3NlbWJsZXIsIHNlcV9udW0sIGZyYWdtZW50YXRpb25faW5kaWNhdG9yLCBnYmMpOworICAg ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK01NVFBDb250ZXh0ICpmZl9tbXRw X3BhcnNlX29wZW4oQVZQcm9ncmFtICpwcm9ncmFtKQoreworICAgIE1NVFBDb250ZXh0ICpjdHgg PSBhdl9tYWxsb2N6KHNpemVvZihNTVRQQ29udGV4dCkpOworICAgIGlmIChjdHggPT0gTlVMTCkg cmV0dXJuIE5VTEw7CisgICAgY3R4LT5wcm9ncmFtID0gcHJvZ3JhbTsKKyAgICByZXR1cm4gY3R4 OworfQorCitpbnQgZmZfbW10cF9wYXJzZV9wYWNrZXQoTU1UUENvbnRleHQgKmN0eCwgQVZGb3Jt YXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSkKK3sKKyAgICBib29sICAgICBwYWNrZXRf Y291bnRlcl9mbGFnOworICAgIGJvb2wgICAgIGV4dGVuc2lvbl9oZWFkZXJfZmxhZzsKKyAgICB1 aW50OF90ICBwYXlsb2FkX3R5cGU7CisgICAgdWludDMyX3QgcGFja2V0X3NlcXVlbmNlX251bWJl cjsKKyAgICB1aW50OF90ICBieXRlOworICAgIGludCAgICAgIGVyciA9IDA7CisKKyAgICBHZXRC eXRlQ29udGV4dCBnYmM7CisKKyAgICBjdHgtPnMgICA9IHM7CisgICAgY3R4LT5wa3QgPSBwa3Q7 CisKKyAgICBieXRlc3RyZWFtMl9pbml0KCZnYmMsIGJ1Ziwgc2l6ZSk7CisgICAgaWYgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KCZnYmMpIDwKKyAgICAgICAgKDIgKyAxICsgMiArIDEgKyAx ICsgMSArIDIgKyA2ICsgMTYgKyAzMiArIDMyKSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworCisgICAgYnl0ZSAgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJf Z2V0X2J5dGV1KCZnYmMpOworICAgIHBhY2tldF9jb3VudGVyX2ZsYWcgICA9IChieXRlID4+IDUp ICYgMTsKKyAgICBleHRlbnNpb25faGVhZGVyX2ZsYWcgPSAoYnl0ZSA+PiAxKSAmIDE7CisgICAg Y3R4LT5pc19yYXAgPSBieXRlICYgMTsKKworICAgIGJ5dGUgICAgICAgICA9IGJ5dGVzdHJlYW0y X2dldF9ieXRldSgmZ2JjKTsKKyAgICBwYXlsb2FkX3R5cGUgPSBieXRlICYgMGIxMTExMTE7CisK KyAgICBjdHgtPmN1cnJlbnRfcGlkID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZnYmMpOworCisg ICAgLy8gc2tpcDogZGlzdHJpYnV0ZV90aW1lc3RhbXAKKyAgICBieXRlc3RyZWFtMl9za2lwdSgm Z2JjLCA0KTsKKworICAgIHBhY2tldF9zZXF1ZW5jZV9udW1iZXIgPSBieXRlc3RyZWFtMl9nZXRf YmUzMnUoJmdiYyk7CisKKyAgICBpZiAocGFja2V0X2NvdW50ZXJfZmxhZykKKyAgICAgICAgYnl0 ZXN0cmVhbTJfc2tpcCgmZ2JjLCA0KTsKKworICAgIGlmIChleHRlbnNpb25faGVhZGVyX2ZsYWcp IHsKKyAgICAgICAgdWludDE2X3QgZXh0ZW5zaW9uX2hlYWRlcl9sZW5ndGg7CisgICAgICAgIC8v IHNraXA6IGV4dGVuc2lvbl90eXBlCisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJmdiYywgMik7 CisgICAgICAgIGV4dGVuc2lvbl9oZWFkZXJfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYo JmdiYyk7CisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJmdiYywgZXh0ZW5zaW9uX2hlYWRlcl9s ZW5ndGgpOworICAgIH0KKworICAgIHN3aXRjaCAocGF5bG9hZF90eXBlKSB7CisgICAgY2FzZSAw eDAwOiAvLyBNUFUKKyAgICAgICAgaWYgKHBrdCAhPSBOVUxMKQorICAgICAgICAgICAgZXJyID0g cGFyc2VfbXB1KGN0eCwgcGFja2V0X3NlcXVlbmNlX251bWJlciwgJmdiYyk7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgMHgwMjogLy8gc2lnbmFsbGluZyBtZXNzYWdlcworICAgICAgICBlcnIg PSBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2VzKGN0eCwgcGFja2V0X3NlcXVlbmNlX251bWJlciwg JmdiYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZXJyIDwgMCkgcmV0dXJuIGVy cjsKKyAgICByZXR1cm4gY3R4LT5wa3QgPT0gTlVMTCA/IDAgOiBGRkVSUk9SX1JFRE87Cit9CisK K3ZvaWQgZmZfbW10cF9yZXNldF9zdGF0ZShNTVRQQ29udGV4dCAqY3R4KQoreworICAgIHN0cnVj dCBTdHJlYW1zICAgICAgICAgICAqc3RyZWFtczsKKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJs ZXIgKmFzc2VtYmxlcjsKKworICAgIGZvciAoYXNzZW1ibGVyID0gY3R4LT5hc3NlbWJsZXI7Cisg ICAgICAgICBhc3NlbWJsZXIgIT0gTlVMTDsgYXNzZW1ibGVyID0gYXNzZW1ibGVyLT5uZXh0KSB7 CisgICAgICAgIGFzc2VtYmxlci0+c3RhdGUgPSBJTklUOworICAgICAgICBhc3NlbWJsZXItPnNp emUgID0gMDsKKyAgICB9CisgICAgZm9yIChzdHJlYW1zID0gY3R4LT5zdHJlYW1zOyBzdHJlYW1z ICE9IE5VTEw7IHN0cmVhbXMgPSBzdHJlYW1zLT5uZXh0KSB7CisgICAgICAgIHN0cmVhbXMtPmxh c3Rfc2VxdWVuY2VfbnVtYmVyID0gMDsKKyAgICAgICAgc3RyZWFtcy0+YXVfY291bnQgICAgICAg ICAgICAgPSAwOworICAgICAgICBzdHJlYW1zLT5mbGFncyAgICAgICAgICAgICAgICA9IDA7Cisg ICAgICAgIHN0cmVhbXMtPm9mZnNldCAgICAgICAgICAgICAgID0gLTE7CisgICAgICAgIGF2X2J1 ZmZlcl91bnJlZigmc3RyZWFtcy0+cGVuZGluZ19idWZmZXIpOworICAgIH0KK30KKwordm9pZCBm Zl9tbXRwX3BhcnNlX2Nsb3NlKE1NVFBDb250ZXh0ICpjdHgpCit7CisgICAgc3RydWN0IEZyYWdt ZW50QXNzZW1ibGVyICphc3M7CisgICAgc3RydWN0IFN0cmVhbXMgICAgICAgICAgICpzdHJlYW1z OworCisgICAgZm9yIChhc3MgPSBjdHgtPmFzc2VtYmxlcjsgYXNzICE9IE5VTEw7KSB7CisgICAg ICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqbmV4dCA9IGFzcy0+bmV4dDsKKyAgICAgICAg YXZfZnJlZShhc3MtPmRhdGEpOworICAgICAgICBhdl9mcmVlKGFzcyk7CisgICAgICAgIGFzcyA9 IG5leHQ7CisgICAgfQorCisgICAgZm9yIChzdHJlYW1zID0gY3R4LT5zdHJlYW1zOyBzdHJlYW1z ICE9IE5VTEw7KSB7CisgICAgICAgIHN0cnVjdCBTdHJlYW1zICpuZXh0ID0gc3RyZWFtcy0+bmV4 dDsKKyAgICAgICAgYXZfZnJlZShzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcik7CisgICAg ICAgIGF2X2ZyZWUoc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yKTsKKyAgICAgICAg YXZfYnVmZmVyX3VucmVmKCZzdHJlYW1zLT5wZW5kaW5nX2J1ZmZlcik7CisgICAgICAgIGF2X2Zy ZWUoc3RyZWFtcyk7CisgICAgICAgIHN0cmVhbXMgPSBuZXh0OworICAgIH0KKworICAgIGF2X2Zy ZWUoY3R4KTsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21tdHAuaCBiL2xpYmF2Zm9ybWF0 L21tdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zMDBhNmExYWVh Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvbW10cC5oCkBAIC0wLDAgKzEsNjQgQEAK Ky8qCisgKiBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQcm90b2NvbCAoTU1UUCkgcGFyc2VyLCBhcyBk ZWZpbmVkIGluIElTTy9JRUMgMjMwMDgtMS4KKyAqIENvcHlyaWdodCAoYykgMjAyMyBTdXBlckZh c2hpCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaWZuZGVmIEFWRk9S TUFUX01NVFBfSAorI2RlZmluZSBBVkZPUk1BVF9NTVRQX0gKKworI2luY2x1ZGUgImF2Zm9ybWF0 LmgiCisKK3R5cGVkZWYgc3RydWN0IE1NVFBDb250ZXh0IE1NVFBDb250ZXh0OworCisvKioKKyAq IE9wZW4gYW4gTU1UIHByb3RvY29sIHBhcnNlciBjb250ZXh0LgorICogQHBhcmFtIHByb2dyYW0g VGhlIEFWUHJvZ3JhbSB0aGlzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoLgorICogQHJldHVy biBBIG5ldyBNTVRQQ29udGV4dCwgb3IgTlVMTCBvbiBhbGxvY2F0aW9uIGVycm9yLgorICovCitN TVRQQ29udGV4dCAqZmZfbW10cF9wYXJzZV9vcGVuKEFWUHJvZ3JhbSAqcHJvZ3JhbSk7CisKKy8q KgorICogUGFyc2UgYW4gTU1UIHByb3RvY29sIHBhY2tldC4KKyAqCisgKiBAcGFyYW0gY3R4IFRo ZSBNTVQgcHJvdG9jb2wgcGFyc2VyIGNvbnRleHQuCisgKiBAcGFyYW0gcyBUaGUgQVZGb3JtYXRD b250ZXh0LgorICogQHBhcmFtIHBrdCBUaGUgQVZQYWNrZXQgdG8gZmlsbC4KKyAqIEBwYXJhbSBi dWYgVGhlIHBhY2tldCBkYXRhLgorICogQHBhcmFtIHNpemUgVGhlIHNpemUgb2YgdGhlIHBhY2tl dCBkYXRhLgorICogQHJldHVybiA+PSAwIGlmIGEgbmV3IEFWUGFja2V0IGlzIGVtaXR0ZWQsCisg KiAgICAgICAgIEZGRVJST1JfUkVETyBpZiB0aGUgbmV4dCBwYWNrZXQgaXMgbmVlZGVkLAorICog ICAgICAgICBvciBhbm90aGVyIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgorICovCitpbnQgZmZf bW10cF9wYXJzZV9wYWNrZXQoTU1UUENvbnRleHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpzLCBB VlBhY2tldCAqcGt0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1 ZiwgdWludDE2X3Qgc2l6ZSk7CisKKy8qKgorICogUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBNTVRQ IHBhcnNlci4gVXNlZnVsIHdoZW4gc2Vla2luZy4KKyAqCisgKiBAcGFyYW0gY3R4IFRoZSBNTVQg cHJvdG9jb2wgcGFyc2VyIGNvbnRleHQuCisgKi8KK3ZvaWQgZmZfbW10cF9yZXNldF9zdGF0ZShN TVRQQ29udGV4dCAqY3R4KTsKKworLyoqCisgKiBDbG9zZSBhbiBNTVQgcHJvdG9jb2wgcGFyc2Vy IGNvbnRleHQsIGZyZWVzIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAqCisgKiBAcGFyYW0g Y3R4IFRoZSBNTVQgcHJvdG9jb2wgcGFyc2VyIGNvbnRleHQuCisgKi8KK3ZvaWQgZmZfbW10cF9w YXJzZV9jbG9zZShNTVRQQ29udGV4dCAqY3R4KTsKKworI2VuZGlmIC8qIEFWRk9STUFUX01NVFBf SCAqLwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW10dGx2LmMgYi9saWJhdmZvcm1hdC9tbXR0 bHYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi42MjI4NDBlNGExCi0t LSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvbW10dGx2LmMKQEAgLTAsMCArMSwzMzUgQEAK Ky8qCisgKiBNTVQgcHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0cyAoTU1UL1RMVikgZGVtdXhlciwg YXMgZGVmaW5lZCBpbiBBUklCIFNURC1CMzIuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjMgU3VwZXJG YXNoaQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAi bGliYXZ1dGlsL2F2YXNzZXJ0LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2ludGVybmFsLmgiCisj aW5jbHVkZSAibGliYXZ1dGlsL2ludHJlYWR3cml0ZS5oIgorI2luY2x1ZGUgImF2Zm9ybWF0Lmgi CisjaW5jbHVkZSAiYXZpb19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImRlbXV4LmgiCisjaW5jbHVk ZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJtbXRwLmgiCisKKyNkZWZpbmUgSEVBREVSX0JZVEUg MGIwMTExMTExMQorCitlbnVtIHsKKyAgICBVTkRFRklORURfUEFDS0VUICAgICAgICAgICAgPSAw eDAwLAorICAgIElQVjRfUEFDS0VUICAgICAgICAgICAgICAgICA9IDB4MDEsCisgICAgSVBWNl9Q QUNLRVQgICAgICAgICAgICAgICAgID0gMHgwMiwKKyAgICBIRUFERVJfQ09NUFJFU1NFRF9JUF9Q QUNLRVQgPSAweDAzLAorICAgIFRSQU5TTUlTU0lPTl9DT05UUk9MX1BBQ0tFVCA9IDB4RkUsCisg ICAgTlVMTF9QQUNLRVQgICAgICAgICAgICAgICAgID0gMHhGRiwKK307CisKK2VudW0geworICAg IENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY0X0FORF9QQVJUSUFMX1VEUF9IRUFE RVIgPSAweDIwLAorICAgIENPTlRFWFRfSURFTlRJRklDQVRJT05fSVBWNF9IRUFERVIgICAgICAg ICAgICAgICAgICAgICAgICAgPSAweDIxLAorICAgIENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFS VElBTF9JUFY2X0FORF9QQVJUSUFMX1VEUF9IRUFERVIgPSAweDYwLAorICAgIENPTlRFWFRfSURF TlRJRklDQVRJT05fTk9fQ09NUFJFU1NFRF9IRUFERVIgICAgICAgICAgICAgICAgPSAweDYxLAor fTsKKworc3RhdGljIGludCBtbXR0bHZfcHJvYmUoY29uc3QgQVZQcm9iZURhdGEgKnApCit7Cisg ICAgc2l6ZV90ICAgaSwgajsKKyAgICB1aW50OF90ICBwYWNrZXRfdHlwZTsKKyAgICB1aW50MTZf dCBkYXRhX2xlbmd0aDsKKworICAgIGludCBwcm9jZXNzZWQgID0gMDsKKyAgICBpbnQgcmVjb2du aXplZCA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpICsgNCA8IHAtPmJ1Zl9zaXplICYmIHByb2Nl c3NlZCA8IDEwMDsgKytwcm9jZXNzZWQpIHsKKyAgICAgICAgaWYgKHAtPmJ1ZltpXSAhPSBIRUFE RVJfQllURSkgcmV0dXJuIDA7CisKKyAgICAgICAgcGFja2V0X3R5cGUgPSBwLT5idWZbaSArIDFd OworICAgICAgICBkYXRhX2xlbmd0aCA9IEFWX1JCMTYocC0+YnVmICsgaSArIDIpOworICAgICAg ICBpICs9IDQ7CisKKyAgICAgICAgaWYgKHBhY2tldF90eXBlID09IEhFQURFUl9DT01QUkVTU0VE X0lQX1BBQ0tFVCkgeworICAgICAgICAgICAgaWYgKGRhdGFfbGVuZ3RoIDwgMyB8fCBpICsgMiA+ PSBwLT5idWZfc2l6ZSkgZ290byBza2lwOworICAgICAgICAgICAgc3dpdGNoIChwLT5idWZbaSAr IDJdKSB7CisgICAgICAgICAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9J UFY0X0FORF9QQVJUSUFMX1VEUF9IRUFERVI6CisgICAgICAgICAgICBjYXNlIENPTlRFWFRfSURF TlRJRklDQVRJT05fSVBWNF9IRUFERVI6CisgICAgICAgICAgICBjYXNlIENPTlRFWFRfSURFTlRJ RklDQVRJT05fUEFSVElBTF9JUFY2X0FORF9QQVJUSUFMX1VEUF9IRUFERVI6CisgICAgICAgICAg ICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fTk9fQ09NUFJFU1NFRF9IRUFERVI6CisgICAg ICAgICAgICAgICAgKytyZWNvZ25pemVkOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug aWYgKHBhY2tldF90eXBlID09IE5VTExfUEFDS0VUKSB7CisgICAgICAgICAgICAvLyBudWxsIHBh Y2tldHMgc2hvdWxkIGNvbnRhaW4gYWxsIDB4RkZzCisgICAgICAgICAgICBmb3IgKGogPSBpOyBq IDwgaSArIGRhdGFfbGVuZ3RoICYmIGogPCBwLT5idWZfc2l6ZTsgKytqKSB7CisgICAgICAgICAg ICAgICAgaWYgKHAtPmJ1ZltqXSAhPSAweEZGKSBnb3RvIHNraXA7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICArK3JlY29nbml6ZWQ7CisgICAgICAgIH0KKworICAgICAgICBza2lwOgorICAg ICAgICBpICs9IGRhdGFfbGVuZ3RoOworICAgIH0KKworICAgIHJldHVybiByZWNvZ25pemVkICog QVZQUk9CRV9TQ09SRV9NQVggLyBGRk1BWChwcm9jZXNzZWQsIDEwKTsKK30KKworc3RydWN0IE1N VFRMVkNvbnRleHQgeworICAgIHN0cnVjdCBQcm9ncmFtIHsKKyAgICAgICAgdWludDMyX3QgICAg ICAgY2lkOworICAgICAgICBNTVRQQ29udGV4dCAgICAqbW10cDsKKyAgICAgICAgc3RydWN0IFBy b2dyYW0gKm5leHQ7CisgICAgfSAqcHJvZ3JhbXM7CisKKyAgICBpbnQ2NF90IGxhc3RfcG9zOwor ICAgIHNpemVfdCAgcmVzeW5jX3NpemU7CisKKyAgICBzaXplX3QgIGNhcDsKKyAgICB1aW50OF90 ICpidWY7Cit9OworCitzdGF0aWMgaW50IG1tdHRsdl9yZWFkX2NvbXByZXNzZWRfaXBfcGFja2V0 KAorICAgIHN0cnVjdCBNTVRUTFZDb250ZXh0ICpjdHgsIEFWRm9ybWF0Q29udGV4dCAqcywgQVZQ YWNrZXQgKnBrdCwKKyAgICBjb25zdCB1aW50OF90ICpidWYsIHVpbnQxNl90IHNpemUpCit7Cisg ICAgLy8gcGFydGlhbCB1ZHAgaGVhZGVyIGFyZSB1ZHAgaGVhZGVyIHdpdGhvdXQgZGF0YSBsZW5n dGggKDE2IGJpdHMpIGFuZCBjaGVja3N1bSAoMTYgYml0cykKKyNkZWZpbmUgUEFSVElBTF9VRFBf SEVBREVSX0xFTkdUSCAoOCAtIDQpCisgICAgLy8gcGFydGlhbCBpcHY2IGhlYWRlciBhcmUgaXB2 NiBoZWFkZXIgd2l0aG91dCBwYXlsb2FkIGxlbmd0aCAoMTYgYml0cykKKyNkZWZpbmUgUEFSVElB TF9JUFY2X0hFQURFUl9MRU5HVEggKDQwIC0gMikKKworICAgIHVpbnQzMl90ICAgICAgIGNvbnRl eHRfaWQ7CisgICAgc3RydWN0IFByb2dyYW0gKnByb2dyYW07CisKKyAgICBpZiAoc2l6ZSA8IDMp CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGNvbnRleHRfaWQgPSBB Vl9SQjE2KGJ1ZikgPj4gNDsKKyAgICBidWYgKz0gMzsKKyAgICBzaXplIC09IDM7CisKKyAgICBm b3IgKHByb2dyYW0gPSBjdHgtPnByb2dyYW1zOyBwcm9ncmFtICE9IE5VTEw7IHByb2dyYW0gPSBw cm9ncmFtLT5uZXh0KQorICAgICAgICBpZiAocHJvZ3JhbS0+Y2lkID09IGNvbnRleHRfaWQpCisg ICAgICAgICAgICBicmVhazsKKworICAgIGlmIChwcm9ncmFtID09IE5VTEwpIHsKKyAgICAgICAg QVZQcm9ncmFtICpwID0gYXZfbmV3X3Byb2dyYW0ocywgY29udGV4dF9pZCk7CisgICAgICAgIGlm IChwID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKworICAgICAgICBwcm9ncmFtID0g YXZfbWFsbG9jKHNpemVvZihzdHJ1Y3QgUHJvZ3JhbSkpOworICAgICAgICBpZiAocHJvZ3JhbSA9 PSBOVUxMKSByZXR1cm4gQVZFUlJPUihlcnJubyk7CisKKyAgICAgICAgcHJvZ3JhbS0+bW10cCA9 IGZmX21tdHBfcGFyc2Vfb3BlbihwKTsKKyAgICAgICAgcHJvZ3JhbS0+bmV4dCA9IGN0eC0+cHJv Z3JhbXM7CisgICAgICAgIGN0eC0+cHJvZ3JhbXMgPSBwcm9ncmFtOworICAgICAgICBwcm9ncmFt LT5jaWQgID0gY29udGV4dF9pZDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGJ1ZlstMV0pIHsKKyAg ICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY0X0FORF9QQVJUSUFMX1VE UF9IRUFERVI6CisgICAgY2FzZSBDT05URVhUX0lERU5USUZJQ0FUSU9OX0lQVjRfSEVBREVSOgor ICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgY2FzZSBDT05URVhUX0lE RU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNl9BTkRfUEFSVElBTF9VRFBfSEVBREVSOgorICAgICAg ICBpZiAoc2l6ZSA8IFBBUlRJQUxfSVBWNl9IRUFERVJfTEVOR1RIICsgUEFSVElBTF9VRFBfSEVB REVSX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICBzaXplIC09IFBBUlRJQUxfSVBWNl9IRUFERVJfTEVOR1RIICsgUEFSVElBTF9VRFBfSEVB REVSX0xFTkdUSDsKKyAgICAgICAgYnVmICs9IFBBUlRJQUxfSVBWNl9IRUFERVJfTEVOR1RIICsg UEFSVElBTF9VRFBfSEVBREVSX0xFTkdUSDsKKyAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJ T05fTk9fQ09NUFJFU1NFRF9IRUFERVI6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKworICAgIHJldHVybiBm Zl9tbXRwX3BhcnNlX3BhY2tldChwcm9ncmFtLT5tbXRwLCBzLCBwa3QsIGJ1Ziwgc2l6ZSk7Cit9 CisKK3N0YXRpYyBpbnQgbW10dGx2X3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQ YWNrZXQgKnBrdCkKK3sKKyAgICB1aW50OF90ICAgICAgICAgICAgICBoZWFkZXJbNF07CisgICAg dWludDE2X3QgICAgICAgICAgICAgc2l6ZTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBlcnI7 CisgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCA9IHMtPnByaXZfZGF0YTsKKyAgICBpbnQ2 NF90ICAgICAgICAgICAgICBwb3MgID0gYXZpb190ZWxsKHMtPnBiKTsKKworICAgIGlmIChwb3Mg PCAwKSByZXR1cm4gKGludCkgcG9zOworICAgIGlmIChwb3MgIT0gY3R4LT5sYXN0X3Bvcykgewor ICAgICAgICBjdHgtPmxhc3RfcG9zID0gcG9zOworCisgICAgICAgIHdoaWxlIChwb3MgLSBjdHgt Pmxhc3RfcG9zIDwgY3R4LT5yZXN5bmNfc2l6ZSkgeworICAgICAgICAgICAgaWYgKChlcnIgPSBm ZmlvX2Vuc3VyZV9zZWVrYmFjayhzLT5wYiwgNCkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1 cm4gZXJyOworCisgICAgICAgICAgICBpZiAoKGVyciA9IGF2aW9fcmVhZChzLT5wYiwgaGVhZGVy LCA0KSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8gQVZF UlJPUl9FT0YgOiBlcnI7CisKKyAgICAgICAgICAgIGlmIChoZWFkZXJbMF0gIT0gSEVBREVSX0JZ VEUpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHBvcyA9IGF2aW9fc2VlayhzLT5wYiwgLTMsIFNF RUtfQ1VSKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludCkgcG9zOworICAg ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzaXpl ID0gQVZfUkIxNihoZWFkZXIgKyAyKTsKKworICAgICAgICAgICAgaWYgKChwb3MgPSBhdmlvX3Nl ZWsocy0+cGIsIC00LCBTRUVLX0NVUikpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGlu dCkgcG9zOworCisgICAgICAgICAgICBpZiAoKGVyciA9IGZmaW9fZW5zdXJlX3NlZWtiYWNrKHMt PnBiLCA0ICsgc2l6ZSArIDEpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKwor ICAgICAgICAgICAgaWYgKChwb3MgPSBhdmlvX3NraXAocy0+cGIsIDQgKyBzaXplKSkgPCAwKQor ICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSBwb3M7CisKKyAgICAgICAgICAgIGlmICgoZXJy ID0gYXZpb19yZWFkKHMtPnBiLCBoZWFkZXIsIDEpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0 dXJuIGF2aW9fZmVvZihzLT5wYikgPyBBVkVSUk9SX0VPRiA6IGVycjsKKworICAgICAgICAgICAg aWYgKGhlYWRlclswXSA9PSBIRUFERVJfQllURSkgeworICAgICAgICAgICAgICAgIC8vIGZvdW5k IEhFQURFUiwgW3NpemVdLCBIRUFERVIsIHNob3VsZCBiZSBnb29kCisgICAgICAgICAgICAgICAg aWYgKChwb3MgPSBhdmlvX3NlZWsocy0+cGIsIC1zaXplIC0gMSAtIDQsIFNFRUtfQ1VSKSkgPCAw KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludCkgcG9zOworICAgICAgICAgICAgICAg IGdvdG8gc3VjY2VzczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChwb3MgPSBh dmlvX3NlZWsocy0+cGIsIC1zaXplIC0gMSAtIDMsIFNFRUtfQ1VSKSkgPCAwKQorICAgICAgICAg ICAgICAgIHJldHVybiAoaW50KSBwb3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CisKKyAgICAgICAgc3VjY2VzczoKKyAgICAgICAgY3R4LT5sYXN0X3Bv cyA9IHBvczsKKworICAgICAgICBmb3IgKHN0cnVjdCBQcm9ncmFtICpwcm9ncmFtID0gY3R4LT5w cm9ncmFtczsKKyAgICAgICAgICAgICBwcm9ncmFtICE9IE5VTEw7IHByb2dyYW0gPSBwcm9ncmFt LT5uZXh0KQorICAgICAgICAgICAgZmZfbW10cF9yZXNldF9zdGF0ZShwcm9ncmFtLT5tbXRwKTsK KyAgICB9CisKKyAgICBpZiAocGt0ICE9IE5VTEwpIHBrdC0+cG9zID0gY3R4LT5sYXN0X3BvczsK KyAgICBpZiAoKGVyciA9IGZmaW9fcmVhZF9zaXplKHMtPnBiLCBoZWFkZXIsIDQpKSA8IDApCisg ICAgICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7CisgICAg Y3R4LT5sYXN0X3BvcyArPSA0OworCisgICAgaWYgKGhlYWRlclswXSAhPSBIRUFERVJfQllURSkK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBzaXplID0gQVZfUkIx NihoZWFkZXIgKyAyKTsKKyAgICBpZiAoaGVhZGVyWzFdICE9IEhFQURFUl9DT01QUkVTU0VEX0lQ X1BBQ0tFVCkgeworICAgICAgICBpZiAoKGN0eC0+bGFzdF9wb3MgPSBhdmlvX3NraXAocy0+cGIs IHNpemUpKSA8IDApCisgICAgICAgICAgICByZXR1cm4gKGludCkgY3R4LT5sYXN0X3BvczsKKyAg ICAgICAgcmV0dXJuIHBrdCA9PSBOVUxMID8gMCA6IEZGRVJST1JfUkVETzsKKyAgICB9CisKKyAg ICBpZiAoY3R4LT5jYXAgPCBzaXplKSB7CisgICAgICAgIGF2X2ZyZWUoY3R4LT5idWYpOworICAg ICAgICBpZiAoKGN0eC0+YnVmID0gYXZfbWFsbG9jKGN0eC0+Y2FwID0gc2l6ZSkpID09IE5VTEwp CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihlcnJubyk7CisgICAgfQorICAgIGlmICgoZXJy ID0gZmZpb19yZWFkX3NpemUocy0+cGIsIGN0eC0+YnVmLCBzaXplKSkgPCAwKQorICAgICAgICBy ZXR1cm4gYXZpb19mZW9mKHMtPnBiKSA/IEFWRVJST1JfRU9GIDogZXJyOworICAgIGN0eC0+bGFz dF9wb3MgKz0gc2l6ZTsKKyAgICByZXR1cm4gbW10dGx2X3JlYWRfY29tcHJlc3NlZF9pcF9wYWNr ZXQoY3R4LCBzLCBwa3QsIGN0eC0+YnVmLCBzaXplKTsKK30KKworc3RhdGljIGludCBtbXR0bHZf cmVhZF9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQoreworICAgIGludDY0X3QgICAgICAgICAg ICAgIHBvczsKKyAgICBpbnQ2NF90ICAgICAgICAgICAgICBhbGxvdyA9IHMtPnByb2Jlc2l6ZTsK KyAgICBzdHJ1Y3QgTU1UVExWQ29udGV4dCAqY3R4ICA9IHMtPnByaXZfZGF0YTsKKworICAgIGN0 eC0+bGFzdF9wb3MgPSBhdmlvX3RlbGwocy0+cGIpOworICAgIGlmIChjdHgtPmxhc3RfcG9zIDwg MCkKKyAgICAgICAgcmV0dXJuIChpbnQpIGN0eC0+bGFzdF9wb3M7CisgICAgY3R4LT5sYXN0X3Bv cyAtPSAxOyAvLyBmb3JjZSByZXN5bmMKKworICAgIGN0eC0+cmVzeW5jX3NpemUgPSA0MDk2Owor ICAgIHMtPmN0eF9mbGFncyB8PSBBVkZNVENUWF9OT0hFQURFUjsKKworICAgIGlmICghcy0+cGIt PnNlZWthYmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICgocG9zID0gYXZpb190ZWxs KHMtPnBiKSkgPCAwKQorICAgICAgICByZXR1cm4gKGludCkgcG9zOworCisgICAgd2hpbGUgKHMt Pm5iX3N0cmVhbXMgPD0gMCAmJiBhbGxvdyA+IDApIHsKKyAgICAgICAgY29uc3QgaW50NjRfdCBj dXIgPSBjdHgtPmxhc3RfcG9zOworICAgICAgICBjb25zdCBpbnQgICAgIGVyciA9IG1tdHRsdl9y ZWFkX3BhY2tldChzLCBOVUxMKTsKKyAgICAgICAgaWYgKGVyciA8IDApIHJldHVybiBlcnI7Cisg ICAgICAgIGFsbG93IC09IGN0eC0+bGFzdF9wb3MgLSBjdXI7CisgICAgfQorCisgICAgY3R4LT5s YXN0X3BvcyA9IGF2aW9fdGVsbChzLT5wYik7CisgICAgaWYgKGN0eC0+bGFzdF9wb3MgPCAwKQor ICAgICAgICByZXR1cm4gKGludCkgY3R4LT5sYXN0X3BvczsKKworICAgIGlmICgocG9zID0gYXZp b19zZWVrKHMtPnBiLCBwb3MsIFNFRUtfU0VUKSkgPCAwKQorICAgICAgICByZXR1cm4gKGludCkg cG9zOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW10dGx2X3JlYWRfY2xvc2Uo QVZGb3JtYXRDb250ZXh0ICpjdHgpCit7CisgICAgc3RydWN0IFByb2dyYW0gICAgICAgKnByb2dy YW07CisgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKnByaXYgPSBjdHgtPnByaXZfZGF0YTsKKyAg ICBmb3IgKHByb2dyYW0gPSBwcml2LT5wcm9ncmFtczsgcHJvZ3JhbSAhPSBOVUxMOykgeworICAg ICAgICBzdHJ1Y3QgUHJvZ3JhbSAqbmV4dCA9IHByb2dyYW0tPm5leHQ7CisgICAgICAgIGZmX21t dHBfcGFyc2VfY2xvc2UocHJvZ3JhbS0+bW10cCk7CisgICAgICAgIGF2X2ZyZWUocHJvZ3JhbSk7 CisgICAgICAgIHByb2dyYW0gPSBuZXh0OworICAgIH0KKyAgICBwcml2LT5wcm9ncmFtcyA9IE5V TEw7CisgICAgcHJpdi0+Y2FwID0gMDsKKyAgICBhdl9mcmVlcCgmcHJpdi0+YnVmKTsKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludDY0X3QgbW10dGx2X3JlYWRfdGltZXN0YW1wKAorICAg IHN0cnVjdCBBVkZvcm1hdENvbnRleHQgKnMsIGludCBzdHJlYW1faW5kZXgsCisgICAgaW50NjRf dCAqcG9zLCBpbnQ2NF90IHBvc19saW1pdCkKK3sKKyAgICBzdHJ1Y3QgTU1UVExWQ29udGV4dCAq Y3R4ID0gcy0+cHJpdl9kYXRhOworCisgICAgaWYgKCgqcG9zID0gYXZpb19zZWVrKHMtPnBiLCAq cG9zLCBTRUVLX1NFVCkpIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQpICpwb3M7CisKKyAgICB3 aGlsZSAocG9zX2xpbWl0ID4gMCkgeworICAgICAgICBBVlBhY2tldCAgICAgIHBhY2tldCA9IHsw fTsKKyAgICAgICAgY29uc3QgaW50ICAgICBlcnIgICAgPSBtbXR0bHZfcmVhZF9wYWNrZXQocywg JnBhY2tldCk7CisgICAgICAgIGNvbnN0IGludDY0X3QgdHMgICAgID0gcGFja2V0LmR0czsKKyAg ICAgICAgY29uc3QgaW50NjRfdCBvZmYgICAgPSBwYWNrZXQucG9zOworICAgICAgICBjb25zdCBp bnQgICAgIHNpZCAgICA9IHBhY2tldC5zdHJlYW1faW5kZXg7CisgICAgICAgIGF2X3BhY2tldF91 bnJlZigmcGFja2V0KTsKKyAgICAgICAgaWYgKGVyciA+PSAwICYmIChzdHJlYW1faW5kZXggPCAw IHx8IHNpZCA9PSBzdHJlYW1faW5kZXgpKSB7CisgICAgICAgICAgICAqcG9zID0gb2ZmOworICAg ICAgICAgICAgcmV0dXJuIHRzOworICAgICAgICB9CisgICAgICAgIHBvc19saW1pdCAtPSBjdHgt Pmxhc3RfcG9zIC0gKnBvczsKKyAgICAgICAgKnBvcyA9IGN0eC0+bGFzdF9wb3M7CisgICAgICAg IGlmIChlcnIgPCAwICYmIGVyciAhPSBGRkVSUk9SX1JFRE8pCisgICAgICAgICAgICByZXR1cm4g QVZfTk9QVFNfVkFMVUU7CisgICAgfQorCisgICAgcmV0dXJuIEFWX05PUFRTX1ZBTFVFOworfQor Citjb25zdCBBVklucHV0Rm9ybWF0IGZmX21tdHRsdl9kZW11eGVyID0geworICAgIC5uYW1lICAg ICAgICAgICA9ICJtbXR0bHYiLAorICAgIC5sb25nX25hbWUgICAgICA9IE5VTExfSUZfQ09ORklH X1NNQUxMKAorICAgICAgICAiTU1UIHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKEFSSUIgU1RE LUIzMikiKSwKKyAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IE1NVFRMVkNvbnRl eHQpLAorICAgIC5mbGFnc19pbnRlcm5hbCA9IEZGX0ZNVF9JTklUX0NMRUFOVVAsCisgICAgLnJl YWRfcHJvYmUgICAgID0gbW10dGx2X3Byb2JlLAorICAgIC5yZWFkX2hlYWRlciAgICA9IG1tdHRs dl9yZWFkX2hlYWRlciwKKyAgICAucmVhZF9wYWNrZXQgICAgPSBtbXR0bHZfcmVhZF9wYWNrZXQs CisgICAgLnJlYWRfY2xvc2UgICAgID0gbW10dGx2X3JlYWRfY2xvc2UsCisgICAgLnJlYWRfdGlt ZXN0YW1wID0gbW10dGx2X3JlYWRfdGltZXN0YW1wLAorICAgIC5mbGFncyAgICAgICAgICA9IEFW Rk1UX1NIT1dfSURTLAorfTsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3ZlcnNpb24uaCBiL2xp YmF2Zm9ybWF0L3ZlcnNpb24uaAppbmRleCBlMjYzNGI4NWFlLi40YmRlODJhYmI0IDEwMDY0NAot LS0gYS9saWJhdmZvcm1hdC92ZXJzaW9uLmgKKysrIGIvbGliYXZmb3JtYXQvdmVyc2lvbi5oCkBA IC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJ2ZXJzaW9uX21ham9yLmgiCiAKLSNkZWZpbmUg TElCQVZGT1JNQVRfVkVSU0lPTl9NSU5PUiAgIDUKKyNkZWZpbmUgTElCQVZGT1JNQVRfVkVSU0lP Tl9NSU5PUiAgIDYKICNkZWZpbmUgTElCQVZGT1JNQVRfVkVSU0lPTl9NSUNSTyAxMDAKIAogI2Rl ZmluZSBMSUJBVkZPUk1BVF9WRVJTSU9OX0lOVCBBVl9WRVJTSU9OX0lOVChMSUJBVkZPUk1BVF9W RVJTSU9OX01BSk9SLCBcCi0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVs QGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRl dmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRl dmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K