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 1F0A3403CF for ; Mon, 20 Dec 2021 18:57:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D50D068AFD2; Mon, 20 Dec 2021 20:57:43 +0200 (EET) Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C753E68A8F5 for ; Mon, 20 Dec 2021 20:57:36 +0200 (EET) Received: by mail-pj1-f50.google.com with SMTP id k6-20020a17090a7f0600b001ad9d73b20bso786060pjl.3 for ; Mon, 20 Dec 2021 10:57:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=SDLiFQf5Fw6hjw7N+ewll+skWHDtAyzJDegX8OXS6rY=; b=SpJ8ejQ7v4uGG3s5bKNZZxL+BgKKMBU1r69TdhTeZGj9T4biwym3iIRU5W2hDaNbZa dRuko/J3aoZce58Wotm4fKqe7hUkGEyyCQB2arSul/xQh8Ak3zegKvczby2xzL8GNvji XLjrPygRbR0YnDnmIeSRkiUsIatWTcv1unsqi833PgojMdNwUzfPbU8eQxrAQHWHASms nA54093r9UuelnVMGY/9gcFRrhFpXZHo+k0kz+Avm/jpbOwESuyc3S+5R70uF3mpK9w1 fTHZyJqNcCrHYH52QPyECwYRNdEr3Ad7HNuh3j9/2H0GBRDHN36jYtm8cpuTj0H/tQQO Fk4g== X-Gm-Message-State: AOAM532WHUBJIF/gyNexmc0tsi0IQhjoGwjyLqUcuzHrcRk35Dlc8cd/ 6AIIKDxED559xoEfRlhf+r9ElYvxTOA= X-Google-Smtp-Source: ABdhPJxeiWlk7HJEgASXUKHnxNkATYrG6sRradbnR453YtRCD19Mj0bCR6V13xTp0oKkVuAQV1ZdSA== X-Received: by 2002:a17:902:db0c:b0:149:182e:e5b5 with SMTP id m12-20020a170902db0c00b00149182ee5b5mr5388228plx.157.1640026653949; Mon, 20 Dec 2021 10:57:33 -0800 (PST) Received: from localhost (76-14-89-2.sf-cable.astound.net. [76.14.89.2]) by smtp.gmail.com with ESMTPSA id a16sm5587609pfv.160.2021.12.20.10.57.32 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 20 Dec 2021 10:57:33 -0800 (PST) Received: by localhost (sSMTP sendmail emulation); Mon, 20 Dec 2021 10:57:25 -0800 From: pal@sandflow.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 20 Dec 2021 10:57:24 -0800 Message-Id: <20211220185725.19519-1-pal@sandflow.com> X-Mailer: git-send-email 2.34.1.windows.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v13 1/2] avformat/imf: 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: Pierre-Anthony Lemieux 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: RnJvbTogUGllcnJlLUFudGhvbnkgTGVtaWV1eCA8cGFsQHBhbGVtaWV1eC5jb20+CgpTaWduZWQt b2ZmLWJ5OiBQaWVycmUtQW50aG9ueSBMZW1pZXV4IDxwYWxAcGFsZW1pZXV4LmNvbT4KLS0tCgpO b3RlczoKICAgIFRoZSBJTUYgZGVtdXhlciBhY2NlcHRzIGFzIGlucHV0IGFuIElNRiBDUEwuIFRo ZSBhc3NldHMgcmVmZXJlbmNlZCBieSB0aGUgQ1BMIGNhbiBiZQogICAgY29udGFpbmVkIGluIG11 bHRpcGxlIGRlbGl2ZXJpZXMsIGVhY2ggZGVmaW5lZCBieSBhbiBBU1NFVE1BUCBmaWxlOgogICAg CiAgICBmZm1wZWcgLWFzc2V0bWFwcyA8cGF0aCBvZiBBU1NFVE1BUDE+LDxwYXRoIG9mIEFTU0VU TUFQPiwuLi4gLWkgPHBhdGggb2YgQ1BMPgogICAgCiAgICBJZiAtYXNzZXRtYXBzIGlzIG5vdCBz cGVjaWZpZWQsIEZGTVBFRyBsb29rcyBmb3IgYSBmaWxlIGNhbGxlZCBBU1NFVE1BUC54bWwgaW4g dGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBDUEwuCiAgICAKICAgIEVYQU1QTEU6CiAgICAgICAg ZmZtcGVnIC1pIGh0dHA6Ly9mZm1wZWctaW1mLXNhbXBsZXMtcHVibGljLnMzLXdlYnNpdGUtdXMt d2VzdC0xLmFtYXpvbmF3cy5jb20vY291bnRkb3duL0NQTF9mNTA5NWNhYS1mMjA0LTRlMWMtOGE4 NC03YWY0OGM3YWUxNmIueG1sIG91dC5tcDQKICAgIAogICAgVGhlIEludGVyb3BlcmFibGUgTWFz dGVyIEZvcm1hdCAoSU1GKSBpcyBhIGZpbGUtYmFzZWQgbWVkaWEgZm9ybWF0IGZvciB0aGUKICAg IGRlbGl2ZXJ5IGFuZCBzdG9yYWdlIG9mIHByb2Zlc3Npb25hbCBhdWRpby12aXN1YWwgbWFzdGVy cy4KICAgIEFuIElNRiBDb21wb3NpdGlvbiBjb25zaXN0cyBvZiBhbiBYTUwgcGxheWxpc3QgKHRo ZSBDb21wb3NpdGlvbiBQbGF5bGlzdCkKICAgIGFuZCBhIGNvbGxlY3Rpb24gb2YgTVhGIGZpbGVz ICh0aGUgVHJhY2sgRmlsZXMpLiBUaGUgQ29tcG9zaXRpb24gUGxheWxpc3QgKENQTCkKICAgIGFz c2VtYmxlcyB0aGUgVHJhY2sgRmlsZXMgb250byBhIHRpbWVsaW5lLCB3aGljaCBjb25zaXN0cyBv ZiBtdWx0aXBsZSB0cmFja3MuCiAgICBUaGUgbG9jYXRpb24gb2YgdGhlIFRyYWNrIEZpbGVzIHJl ZmVyZW5jZWQgYnkgdGhlIENvbXBvc2l0aW9uIFBsYXlsaXN0IGlzIHN0b3JlZAogICAgaW4gb25l IG9yIG1vcmUgWE1MIGRvY3VtZW50cyBjYWxsZWQgQXNzZXQgTWFwcy4gTW9yZSBkZXRhaWxzIGF0 IGh0dHBzOi8vd3d3LmltZnVnLmNvbS9leHBsYWluZXIuCiAgICBUaGUgSU1GIHN0YW5kYXJkIHdh cyBmaXJzdCBpbnRyb2R1Y2VkIGluIDIwMTMgYW5kIGlzIG1hbmFnZWQgYnkgdGhlIFNNUFRFLgog ICAgCiAgICBDSEFOR0UgTk9URVM6CiAgICAKICAgIC0gYWRkZWQgbGliYXZmb3JtYXQvdGVzdHMv aW1mIHRvIEZBVEUKCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgfCAgIDEgKwogY29uZmlndXJl ICAgICAgICAgICAgICAgIHwgICAzICstCiBkb2MvZGVtdXhlcnMudGV4aSAgICAgICAgfCAgIDYg KwogbGliYXZmb3JtYXQvTWFrZWZpbGUgICAgIHwgICAxICsKIGxpYmF2Zm9ybWF0L2FsbGZvcm1h dHMuYyB8ICAgMSArCiBsaWJhdmZvcm1hdC9pbWYuaCAgICAgICAgfCAyMDcgKysrKysrKysrCiBs aWJhdmZvcm1hdC9pbWZfY3BsLmMgICAgfCA4MDAgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGxpYmF2Zm9ybWF0L2ltZmRlYy5jICAgICB8IDg5MSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgMTkwOSBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvaW1mLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9pbWZfY3BsLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdmZvcm1hdC9pbWZkZWMuYwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJ TlRBSU5FUlMKaW5kZXggMzljZTkxYjc1NS4uMTlkZmM5OTgwMyAxMDA2NDQKLS0tIGEvTUFJTlRB SU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTQzMyw2ICs0MzMsNyBAQCBNdXhlcnMvRGVtdXhl cnM6CiAgIGlkcm9xZGVjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlrZSBNZWxhbnNv bgogICBpZmYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEphaWtyaXNobmFuIE1l bm9uCiAgIGltZzIqLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBOaWVk ZXJtYXllcgorICBpbWYqLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmMtQW50 b2luZSBBcm5hdWQsIFBpZXJyZS1BbnRob255IExlbWlldXgsIFZhbGVudGluIE5vw6tsCiAgIGlw bW92aWUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlrZSBNZWxhbnNvbgogICBpcmNh bSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdWwgQiBNYWhvbAogICBpc3MuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbiBHZWhyZXIKZGlmZiAtLWdpdCBh L2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBkOWQ0MWIyMjczLi5iMDYxNGYxNGJkIDEwMDc1 NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0yOTgsNyArMjk4LDcgQEAgRXh0 ZXJuYWwgbGlicmFyeSBzdXBwb3J0OgogICAtLWVuYWJsZS1saWJ4dmlkICAgICAgICAgZW5hYmxl IFh2aWQgZW5jb2RpbmcgdmlhIHh2aWRjb3JlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg bmF0aXZlIE1QRUctNC9YdmlkIGVuY29kZXIgZXhpc3RzIFtub10KICAgLS1lbmFibGUtbGlieG1s MiAgICAgICAgIGVuYWJsZSBYTUwgcGFyc2luZyB1c2luZyB0aGUgQyBsaWJyYXJ5IGxpYnhtbDIs IG5lZWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRhc2ggZGVtdXhpbmcgc3Vw cG9ydCBbbm9dCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGFzaCBhbmQgaW1mIGRl bXV4aW5nIHN1cHBvcnQgW25vXQogICAtLWVuYWJsZS1saWJ6aW1nICAgICAgICAgZW5hYmxlIHou bGliLCBuZWVkZWQgZm9yIHpzY2FsZSBmaWx0ZXIgW25vXQogICAtLWVuYWJsZS1saWJ6bXEgICAg ICAgICAgZW5hYmxlIG1lc3NhZ2UgcGFzc2luZyB2aWEgbGliem1xIFtub10KICAgLS1lbmFibGUt bGlienZiaSAgICAgICAgIGVuYWJsZSB0ZWxldGV4dCBzdXBwb3J0IHZpYSBsaWJ6dmJpIFtub10K QEAgLTM0MTMsNiArMzQxMyw3IEBAIGhsc19tdXhlcl9zZWxlY3Q9Im1wZWd0c19tdXhlciIKIGhs c19tdXhlcl9zdWdnZXN0PSJnY3J5cHQgb3BlbnNzbCIKIGltYWdlMl9hbGlhc19waXhfZGVtdXhl cl9zZWxlY3Q9ImltYWdlMl9kZW11eGVyIgogaW1hZ2UyX2JyZW5kZXJfcGl4X2RlbXV4ZXJfc2Vs ZWN0PSJpbWFnZTJfZGVtdXhlciIKK2ltZl9kZW11eGVyX2RlcHM9ImxpYnhtbDIiCiBpcG9kX211 eGVyX3NlbGVjdD0ibW92X211eGVyIgogaXNtdl9tdXhlcl9zZWxlY3Q9Im1vdl9tdXhlciIKIGl2 Zl9tdXhlcl9zZWxlY3Q9ImF2MV9tZXRhZGF0YV9ic2YgdnA5X3N1cGVyZnJhbWVfYnNmIgpkaWZm IC0tZ2l0IGEvZG9jL2RlbXV4ZXJzLnRleGkgYi9kb2MvZGVtdXhlcnMudGV4aQppbmRleCBjYWI4 YTcwNzJjLi42NTU3MDRkMmM0IDEwMDY0NAotLS0gYS9kb2MvZGVtdXhlcnMudGV4aQorKysgYi9k b2MvZGVtdXhlcnMudGV4aQpAQCAtMjY3LDYgKzI2NywxMiBAQCB3aGljaCBzdHJlYW1zIHRvIGFj dHVhbGx5IHJlY2VpdmUuCiBFYWNoIHN0cmVhbSBtaXJyb3JzIHRoZSBAY29kZXtpZH0gYW5kIEBj b2Rle2JhbmR3aWR0aH0gcHJvcGVydGllcyBmcm9tIHRoZQogQGNvZGV7PFJlcHJlc2VudGF0aW9u Pn0gYXMgbWV0YWRhdGEga2V5cyBuYW1lZCAiaWQiIGFuZCAidmFyaWFudF9iaXRyYXRlIiByZXNw ZWN0aXZlbHkuCiAKK0BzZWN0aW9uIGltZgorCitJbnRlcm9wZXJhYmxlIE1hc3RlciBGb3JtYXQg ZGVtdXhlci4KKworVGhpcyBkZW11eGVyIHByZXNlbnRzIGF1ZGlvIGFuZCB2aWRlbyBzdHJlYW1z IGZvdW5kIGluIGFuIElNRiBDb21wb3NpdGlvbi4KKwogQHNlY3Rpb24gZmx2LCBsaXZlX2Zsdiwg a3V4CiAKIEFkb2JlIEZsYXNoIFZpZGVvIEZvcm1hdCBkZW11eGVyLgpkaWZmIC0tZ2l0IGEvbGli YXZmb3JtYXQvTWFrZWZpbGUgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQppbmRleCAyYjVjYWY5ZDMz Li43ZjA1OGYzZWEwIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQorKysgYi9saWJh dmZvcm1hdC9NYWtlZmlsZQpAQCAtMjg1LDYgKzI4NSw3IEBAIE9CSlMtJChDT05GSUdfSU1BR0Vf V0VCUF9QSVBFX0RFTVVYRVIpICAgICs9IGltZzJkZWMubyBpbWcyLm8KIE9CSlMtJChDT05GSUdf SU1BR0VfWEJNX1BJUEVfREVNVVhFUikgICAgICs9IGltZzJkZWMubyBpbWcyLm8KIE9CSlMtJChD T05GSUdfSU1BR0VfWFBNX1BJUEVfREVNVVhFUikgICAgICs9IGltZzJkZWMubyBpbWcyLm8KIE9C SlMtJChDT05GSUdfSU1BR0VfWFdEX1BJUEVfREVNVVhFUikgICAgICs9IGltZzJkZWMubyBpbWcy Lm8KK09CSlMtJChDT05GSUdfSU1GX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gaW1mZGVjLm8g aW1mX2NwbC5vCiBPQkpTLSQoQ09ORklHX0lOR0VOSUVOVF9ERU1VWEVSKSAgICAgICAgICs9IGlu Z2VuaWVudGRlYy5vIHJhd2RlYy5vCiBPQkpTLSQoQ09ORklHX0lQTU9WSUVfREVNVVhFUikgICAg ICAgICAgICs9IGlwbW92aWUubwogT0JKUy0kKENPTkZJR19JUFVfREVNVVhFUikgICAgICAgICAg ICAgICArPSBpcHVkZWMubyByYXdkZWMubwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9y bWF0cy5jIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCmluZGV4IDEwNTRhYzk2NjcuLmY2ODA2 MTZjZGQgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYworKysgYi9saWJhdmZv cm1hdC9hbGxmb3JtYXRzLmMKQEAgLTIxMiw2ICsyMTIsNyBAQCBleHRlcm4gY29uc3QgQVZJbnB1 dEZvcm1hdCAgZmZfaW1hZ2UycGlwZV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWT3V0cHV0Rm9y bWF0IGZmX2ltYWdlMnBpcGVfbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZf aW1hZ2UyX2FsaWFzX3BpeF9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZm X2ltYWdlMl9icmVuZGVyX3BpeF9kZW11eGVyOworZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQg IGZmX2ltZl9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2luZ2VuaWVu dF9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2lwbW92aWVfZGVtdXhl cjsKIGV4dGVybiBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9pcG9kX211eGVyOwpkaWZmIC0tZ2l0 IGEvbGliYXZmb3JtYXQvaW1mLmggYi9saWJhdmZvcm1hdC9pbWYuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi42MmM0NDY4Y2U5Ci0tLSAvZGV2L251bGwKKysrIGIvbGli YXZmb3JtYXQvaW1mLmgKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBCisgKi8KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIFNhbmRmbG93IENvbnN1 bHRpbmcgTExDCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisg KiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1 bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogUHVibGljIGhlYWRlciBmaWxlIGZv ciB0aGUgcHJvY2Vzc2luZyBvZiBJbnRlcm9wZXJhYmxlIE1hc3RlciBGb3JtYXQgKElNRikKKyAq IHBhY2thZ2VzLgorICoKKyAqIEBhdXRob3IgUGllcnJlLUFudGhvbnkgTGVtaWV1eAorICogQGF1 dGhvciBWYWxlbnRpbiBOb2VsCisgKiBAZmlsZQorICogQGluZ3JvdXAgbGF2dV9pbWYKKyAqLwor CisjaWZuZGVmIEFWRk9STUFUX0lNRl9ICisjZGVmaW5lIEFWRk9STUFUX0lNRl9ICisKKyNpbmNs dWRlICJhdmZvcm1hdC5oIgorI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2aW8uaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvcmF0aW9uYWwuaCIKKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorCisjZGVm aW5lIEZGX0lNRl9VVUlEX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg InVybjp1dWlkOiUwMmhoeCUwMmhoeCUwMmhoeCUwMmhoeC0lMDJoaHglMDJoaHgtIiBcCisgICAg IiUwMmhoeCUwMmhoeC0lMDJoaHglMDJoaHgtJTAyaGh4JTAyaGh4JTAyaGh4JTAyaGh4JTAyaGh4 JTAyaGh4IgorCisvKioKKyAqIFVVSUQgYXMgZGVmaW5lZCBpbiBJRVRGIFJGQyA0MjIKKyAqLwor dHlwZWRlZiB1aW50OF90IEZGSU1GVVVJRFsxNl07CisKKy8qKgorICogSU1GIENvbXBvc2l0aW9u IFBsYXlsaXN0IEJhc2UgUmVzb3VyY2UKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRkZJTUZCYXNlUmVz b3VyY2UgeworICAgIEFWUmF0aW9uYWwgZWRpdF9yYXRlOyAgLyoqPCBCYXNlUmVzb3VyY2VUeXBl L0VkaXRSYXRlICovCisgICAgdWludDMyX3QgZW50cnlfcG9pbnQ7ICAvKio8IEJhc2VSZXNvdXJj ZVR5cGUvRW50cnlQb2ludCAqLworICAgIHVpbnQzMl90IGR1cmF0aW9uOyAgICAgLyoqPCBCYXNl UmVzb3VyY2VUeXBlL0R1cmF0aW9uICovCisgICAgdWludDMyX3QgcmVwZWF0X2NvdW50OyAvKio8 IEJhc2VSZXNvdXJjZVR5cGUvUmVwZWF0Q291bnQgKi8KK30gRkZJTUZCYXNlUmVzb3VyY2U7CisK Ky8qKgorICogSU1GIENvbXBvc2l0aW9uIFBsYXlsaXN0IFRyYWNrIEZpbGUgUmVzb3VyY2UKKyAq LwordHlwZWRlZiBzdHJ1Y3QgRkZJTUZUcmFja0ZpbGVSZXNvdXJjZSB7CisgICAgRkZJTUZCYXNl UmVzb3VyY2UgYmFzZTsKKyAgICBGRklNRlVVSUQgdHJhY2tfZmlsZV91dWlkOyAvKio8IFRyYWNr RmlsZVJlc291cmNlVHlwZS9UcmFja0ZpbGVJZCAqLworfSBGRklNRlRyYWNrRmlsZVJlc291cmNl OworCisvKioKKyAqIElNRiBNYXJrZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRkZJTUZNYXJrZXIg eworICAgIHhtbENoYXIgKmxhYmVsX3V0Zjg7IC8qKjwgTWFya2VyL0xhYmVsICovCisgICAgeG1s Q2hhciAqc2NvcGVfdXRmODsgLyoqPCBNYXJrZXIvTGFiZWwvXEBzY29wZSAqLworICAgIHVpbnQz Ml90IG9mZnNldDsgICAgIC8qKjwgTWFya2VyL09mZnNldCAqLworfSBGRklNRk1hcmtlcjsKKwor LyoqCisgKiBJTUYgQ29tcG9zaXRpb24gUGxheWxpc3QgTWFya2VyIFJlc291cmNlCisgKi8KK3R5 cGVkZWYgc3RydWN0IEZGSU1GTWFya2VyUmVzb3VyY2UgeworICAgIEZGSU1GQmFzZVJlc291cmNl IGJhc2U7CisgICAgdWludDMyX3QgbWFya2VyX2NvdW50OyAvKio8IE51bWJlciBvZiBNYXJrZXIg ZWxlbWVudHMgKi8KKyAgICBGRklNRk1hcmtlciAqbWFya2VyczsgIC8qKjwgTWFya2VyIGVsZW1l bnRzICovCit9IEZGSU1GTWFya2VyUmVzb3VyY2U7CisKKy8qKgorICogSU1GIENvbXBvc2l0aW9u IFBsYXlsaXN0IFZpcnR1YWwgVHJhY2sKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRkZJTUZCYXNlVmly dHVhbFRyYWNrIHsKKyAgICBGRklNRlVVSUQgaWRfdXVpZDsgLyoqPCBUcmFja0lkIGFzc29jaWF0 ZWQgd2l0aCB0aGUgVmlydHVhbCBUcmFjayAqLworfSBGRklNRkJhc2VWaXJ0dWFsVHJhY2s7CisK Ky8qKgorICogSU1GIENvbXBvc2l0aW9uIFBsYXlsaXN0IFZpcnR1YWwgVHJhY2sgdGhhdCBjb25z aXN0cyBvZiBUcmFjayBGaWxlIFJlc291cmNlcworICovCit0eXBlZGVmIHN0cnVjdCBGRklNRlRy YWNrRmlsZVZpcnR1YWxUcmFjayB7CisgICAgRkZJTUZCYXNlVmlydHVhbFRyYWNrIGJhc2U7Cisg ICAgdWludDMyX3QgcmVzb3VyY2VfY291bnQ7ICAgICAgICAgICAvKio8IE51bWJlciBvZiBSZXNv dXJjZSBlbGVtZW50cyBwcmVzZW50IGluIHRoZSBWaXJ0dWFsIFRyYWNrICovCisgICAgRkZJTUZU cmFja0ZpbGVSZXNvdXJjZSAqcmVzb3VyY2VzOyAvKio8IFJlc291cmNlIGVsZW1lbnRzIG9mIHRo ZSBWaXJ0dWFsIFRyYWNrICovCisgICAgdW5zaWduZWQgaW50IHJlc291cmNlc19hbGxvY19zejsg ICAvKio8IFNpemUgb2YgdGhlIHJlc291cmNlcyBidWZmZXIgKi8KK30gRkZJTUZUcmFja0ZpbGVW aXJ0dWFsVHJhY2s7CisKKy8qKgorICogSU1GIENvbXBvc2l0aW9uIFBsYXlsaXN0IFZpcnR1YWwg VHJhY2sgdGhhdCBjb25zaXN0cyBvZiBNYXJrZXIgUmVzb3VyY2VzCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEZGSU1GTWFya2VyVmlydHVhbFRyYWNrIHsKKyAgICBGRklNRkJhc2VWaXJ0dWFsVHJhY2sg YmFzZTsKKyAgICB1aW50MzJfdCByZXNvdXJjZV9jb3VudDsgICAgICAgIC8qKjwgTnVtYmVyIG9m IFJlc291cmNlIGVsZW1lbnRzIHByZXNlbnQgaW4gdGhlIFZpcnR1YWwgVHJhY2sgKi8KKyAgICBG RklNRk1hcmtlclJlc291cmNlICpyZXNvdXJjZXM7IC8qKjwgUmVzb3VyY2UgZWxlbWVudHMgb2Yg dGhlIFZpcnR1YWwgVHJhY2sgKi8KK30gRkZJTUZNYXJrZXJWaXJ0dWFsVHJhY2s7CisKKy8qKgor ICogSU1GIENvbXBvc2l0aW9uIFBsYXlsaXN0CisgKi8KK3R5cGVkZWYgc3RydWN0IEZGSU1GQ1BM IHsKKyAgICBGRklNRlVVSUQgaWRfdXVpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyoqPCBDb21wb3NpdGlvblBsYXlsaXN0L0lkIGVsZW1lbnQgKi8KKyAgICB4bWxDaGFyICpjb250 ZW50X3RpdGxlX3V0Zjg7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb21wb3NpdGlvblBsYXls aXN0L0NvbnRlbnRUaXRsZSBlbGVtZW50ICovCisgICAgQVZSYXRpb25hbCBlZGl0X3JhdGU7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29tcG9zaXRpb25QbGF5bGlzdC9FZGl0UmF0 ZSBlbGVtZW50ICovCisgICAgRkZJTUZNYXJrZXJWaXJ0dWFsVHJhY2sgKm1haW5fbWFya2Vyc190 cmFjazsgICAgIC8qKjwgTWFpbiBNYXJrZXIgVmlydHVhbCBUcmFjayAqLworICAgIEZGSU1GVHJh Y2tGaWxlVmlydHVhbFRyYWNrICptYWluX2ltYWdlXzJkX3RyYWNrOyAvKio8IE1haW4gSW1hZ2Ug VmlydHVhbCBUcmFjayAqLworICAgIHVpbnQzMl90IG1haW5fYXVkaW9fdHJhY2tfY291bnQ7ICAg ICAgICAgICAgICAgICAvKio8IE51bWJlciBvZiBNYWluIEF1ZGlvIFZpcnR1YWwgVHJhY2tzICov CisgICAgRkZJTUZUcmFja0ZpbGVWaXJ0dWFsVHJhY2sgKm1haW5fYXVkaW9fdHJhY2tzOyAgIC8q KjwgTWFpbiBBdWRpbyBWaXJ0dWFsIFRyYWNrcyAqLworfSBGRklNRkNQTDsKKworLyoqCisgKiBQ YXJzZSBhbiBJTUYgQ29tcG9zaXRpb25QbGF5bGlzdCBlbGVtZW50IGludG8gdGhlIEZGSU1GQ1BM IGRhdGEgc3RydWN0dXJlLgorICogQHBhcmFtW2luXSBkb2MgQW4gWE1MIGRvY3VtZW50IGZyb20g d2hpY2ggdGhlIENQTCBpcyByZWFkLgorICogQHBhcmFtW291dF0gY3BsIFBvaW50ZXIgdG8gYSBt ZW1vcnkgYXJlYSAoYWxsb2NhdGVkIGJ5IHRoZSBjbGllbnQpLCB3aGVyZSB0aGUKKyAqICBmdW5j dGlvbiB3cml0ZXMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBGRklNRkNQTCBz dHJ1Y3R1cmUgKG9yCisgKiAgTlVMTCBpZiB0aGUgQ1BMIGNvdWxkIG5vdCBiZSBwYXJzZWQpLiBU aGUgY2xpZW50IGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nCisgKiAgdGhlIEZGSU1GQ1BMIHN0 cnVjdHVyZSB1c2luZyBmZl9pbWZfY3BsX2ZyZWUoKS4KKyAqIEByZXR1cm4gQSBub24temVybyB2 YWx1ZSBpbiBjYXNlIG9mIGFuIGVycm9yLgorICovCitpbnQgZmZfaW1mX3BhcnNlX2NwbF9mcm9t X3htbF9kb20oeG1sRG9jUHRyIGRvYywgRkZJTUZDUEwgKipjcGwpOworCisvKioKKyAqIFBhcnNl IGFuIElNRiBDb21wb3NpdGlvbiBQbGF5bGlzdCBkb2N1bWVudCBpbnRvIHRoZSBGRklNRkNQTCBk YXRhIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gaW4gVGhlIGNvbnRleHQgZnJvbSB3aGljaCB0 aGUgQ1BMIGlzIHJlYWQuCisgKiBAcGFyYW1bb3V0XSBjcGwgUG9pbnRlciB0byBhIG1lbW9yeSBh cmVhIChhbGxvY2F0ZWQgYnkgdGhlIGNsaWVudCksIHdoZXJlIHRoZQorICogZnVuY3Rpb24gd3Jp dGVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY29uc3RydWN0ZWQgRkZJTUZDUEwgc3RydWN0dXJl IChvcgorICogTlVMTCBpZiB0aGUgQ1BMIGNvdWxkIG5vdCBiZSBwYXJzZWQpLiBUaGUgY2xpZW50 IGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nCisgKiB0aGUgRkZJTUZDUEwgc3RydWN0dXJlIHVz aW5nIGZmX2ltZl9jcGxfZnJlZSgpLgorICogQHJldHVybiBBIG5vbi16ZXJvIHZhbHVlIGluIGNh c2Ugb2YgYW4gZXJyb3IuCisgKi8KK2ludCBmZl9pbWZfcGFyc2VfY3BsKEFWSU9Db250ZXh0ICpp biwgRkZJTUZDUEwgKipjcGwpOworCisvKioKKyAqIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMg YW4gRkZJTUZDUEwgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUg bmV3bHkgY29uc3RydWN0ZWQgRkZJTUZDUEwgc3RydWN0dXJlIChvciBOVUxMIGlmIHRoZQorICog c3RydWN0dXJlIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZCkuIFRoZSBjbGllbnQgaXMgcmVzcG9u c2libGUgZm9yIGZyZWVpbmcKKyAqIHRoZSBGRklNRkNQTCBzdHJ1Y3R1cmUgdXNpbmcgZmZfaW1m X2NwbF9mcmVlKCkuCisgKi8KK0ZGSU1GQ1BMICpmZl9pbWZfY3BsX2FsbG9jKHZvaWQpOworCisv KioKKyAqIERlbGV0ZXMgYW4gRkZJTUZDUEwgZGF0YSBzdHJ1Y3R1cmUgcHJldmlvdXNseSBpbnN0 YW50aWF0ZWQgd2l0aCBmZl9pbWZfY3BsX2FsbG9jKCkuCisgKiBAcGFyYW1baW5dIGNwbCBUaGUg RkZJTUZDUEwgc3RydWN0dXJlIHRvIGRlbGV0ZS4KKyAqLwordm9pZCBmZl9pbWZfY3BsX2ZyZWUo RkZJTUZDUEwgKmNwbCk7CisKKy8qKgorICogUmVhZHMgYW4gdW5zaWduZWQgMzItYml0IGludGVn ZXIgZnJvbSBhbiBYTUwgZWxlbWVudAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwgMCBBVkVS Uk9SIGNvZGUgb24gZXJyb3IuCisgKi8KK2ludCBmZl9pbWZfeG1sX3JlYWRfdWludDMyKHhtbE5v ZGVQdHIgZWxlbWVudCwgdWludDMyX3QgKm51bWJlcik7CisKKy8qKgorICogUmVhZHMgYW4gQVZS YXRpb25hbCBmcm9tIGFuIFhNTCBlbGVtZW50CisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgPCAw IEFWRVJST1IgY29kZSBvbiBlcnJvci4KKyAqLworaW50IGZmX2ltZl94bWxfcmVhZF9yYXRpb25h bCh4bWxOb2RlUHRyIGVsZW1lbnQsIEFWUmF0aW9uYWwgKnJhdGlvbmFsKTsKKworLyoqCisgKiBS ZWFkcyBhIFVVSUQgZnJvbSBhbiBYTUwgZWxlbWVudAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3Ms IDwgMCBBVkVSUk9SIGNvZGUgb24gZXJyb3IuCisgKi8KK2ludCBmZl9pbWZfeG1sX3JlYWRfdXVp ZCh4bWxOb2RlUHRyIGVsZW1lbnQsIHVpbnQ4X3QgdXVpZFsxNl0pOworCisvKioKKyAqIFJldHVy bnMgdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIGxvY2FsIG5hbWUK KyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBjaGlsZCBlbGVtZW50LCBvciBOVUxMIGlmIG5v IHN1Y2ggY2hpbGQgZWxlbWVudCBleGlzdHMuCisgKi8KK3htbE5vZGVQdHIgZmZfaW1mX3htbF9n ZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKHhtbE5vZGVQdHIgcGFyZW50LCBjb25zdCBjaGFyICpu YW1lX3V0ZjgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2ltZl9jcGwuYyBi L2xpYmF2Zm9ybWF0L2ltZl9jcGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi45YmExOWU3ZDdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvaW1mX2NwbC5j CkBAIC0wLDAgKzEsODAwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgor ICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICov CisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSBTYW5kZmxvdyBDb25zdWx0aW5nIExMQworICoK KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogKiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCisgKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICog ICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS UyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP UFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKyAqLworCisvKioKKyAqIEltcGxlbWVudHMgSU1QIENQTCBwcm9jZXNzaW5nCisgKgor ICogQGF1dGhvciBQaWVycmUtQW50aG9ueSBMZW1pZXV4CisgKiBAZmlsZQorICogQGluZ3JvdXAg bGF2dV9pbWYKKyAqLworCisjaW5jbHVkZSAiaW1mLmgiCisjaW5jbHVkZSAibGliYXZmb3JtYXQv bXhmLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2JwcmludC5oIgorI2luY2x1ZGUgImxpYmF2dXRp bC9lcnJvci5oIgorI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKworeG1sTm9kZVB0ciBmZl9p bWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUoeG1sTm9kZVB0ciBwYXJlbnQsIGNvbnN0 IGNoYXIgKm5hbWVfdXRmOCkKK3sKKyAgICB4bWxOb2RlUHRyIGN1cl9lbGVtZW50OworCisgICAg Y3VyX2VsZW1lbnQgPSB4bWxGaXJzdEVsZW1lbnRDaGlsZChwYXJlbnQpOworICAgIHdoaWxlIChj dXJfZWxlbWVudCkgeworICAgICAgICBpZiAoeG1sU3RyY21wKGN1cl9lbGVtZW50LT5uYW1lLCBu YW1lX3V0ZjgpID09IDApCisgICAgICAgICAgICByZXR1cm4gY3VyX2VsZW1lbnQ7CisgICAgICAg IGN1cl9lbGVtZW50ID0geG1sTmV4dEVsZW1lbnRTaWJsaW5nKGN1cl9lbGVtZW50KTsKKyAgICB9 CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBmZl9pbWZfeG1sX3JlYWRfdXVpZCh4bWxOb2Rl UHRyIGVsZW1lbnQsIHVpbnQ4X3QgdXVpZFsxNl0pCit7CisgICAgeG1sQ2hhciAqZWxlbWVudF90 ZXh0ID0gTlVMTDsKKyAgICBpbnQgc2NhbmZfcmV0OworICAgIGludCByZXQgPSAwOworCisgICAg ZWxlbWVudF90ZXh0ID0geG1sTm9kZUxpc3RHZXRTdHJpbmcoZWxlbWVudC0+ZG9jLCBlbGVtZW50 LT54bWxDaGlsZHJlbk5vZGUsIDEpOworICAgIHNjYW5mX3JldCA9IHNzY2FuZihlbGVtZW50X3Rl eHQsCisgICAgICAgIEZGX0lNRl9VVUlEX0ZPUk1BVCwKKyAgICAgICAgJnV1aWRbMF0sCisgICAg ICAgICZ1dWlkWzFdLAorICAgICAgICAmdXVpZFsyXSwKKyAgICAgICAgJnV1aWRbM10sCisgICAg ICAgICZ1dWlkWzRdLAorICAgICAgICAmdXVpZFs1XSwKKyAgICAgICAgJnV1aWRbNl0sCisgICAg ICAgICZ1dWlkWzddLAorICAgICAgICAmdXVpZFs4XSwKKyAgICAgICAgJnV1aWRbOV0sCisgICAg ICAgICZ1dWlkWzEwXSwKKyAgICAgICAgJnV1aWRbMTFdLAorICAgICAgICAmdXVpZFsxMl0sCisg ICAgICAgICZ1dWlkWzEzXSwKKyAgICAgICAgJnV1aWRbMTRdLAorICAgICAgICAmdXVpZFsxNV0p OworICAgIGlmIChzY2FuZl9yZXQgIT0gMTYpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgIkludmFsaWQgVVVJRFxuIik7CisgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgfQorICAgIHhtbEZyZWUoZWxlbWVudF90ZXh0KTsKKworICAgIHJldHVybiBy ZXQ7Cit9CisKK2ludCBmZl9pbWZfeG1sX3JlYWRfcmF0aW9uYWwoeG1sTm9kZVB0ciBlbGVtZW50 LCBBVlJhdGlvbmFsICpyYXRpb25hbCkKK3sKKyAgICB4bWxDaGFyICplbGVtZW50X3RleHQgPSBO VUxMOworICAgIGludCByZXQgPSAwOworCisgICAgZWxlbWVudF90ZXh0ID0geG1sTm9kZUxpc3RH ZXRTdHJpbmcoZWxlbWVudC0+ZG9jLCBlbGVtZW50LT54bWxDaGlsZHJlbk5vZGUsIDEpOworICAg IGlmIChzc2NhbmYoZWxlbWVudF90ZXh0LCAiJWkgJWkiLCAmcmF0aW9uYWwtPm51bSwgJnJhdGlv bmFsLT5kZW4pICE9IDIpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIklu dmFsaWQgcmF0aW9uYWwgbnVtYmVyXG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElE REFUQTsKKyAgICB9CisgICAgeG1sRnJlZShlbGVtZW50X3RleHQpOworCisgICAgcmV0dXJuIHJl dDsKK30KKworaW50IGZmX2ltZl94bWxfcmVhZF91aW50MzIoeG1sTm9kZVB0ciBlbGVtZW50LCB1 aW50MzJfdCAqbnVtYmVyKQoreworICAgIHhtbENoYXIgKmVsZW1lbnRfdGV4dCA9IE5VTEw7Cisg ICAgaW50IHJldCA9IDA7CisKKyAgICBlbGVtZW50X3RleHQgPSB4bWxOb2RlTGlzdEdldFN0cmlu ZyhlbGVtZW50LT5kb2MsIGVsZW1lbnQtPnhtbENoaWxkcmVuTm9kZSwgMSk7CisgICAgaWYgKHNz Y2FuZihlbGVtZW50X3RleHQsICIlIiBQUkl1MzIsIG51bWJlcikgIT0gMSkgeworICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB1bnNpZ25lZCAzMi1iaXQgaW50ZWdl ciIpOworICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICB4bWxG cmVlKGVsZW1lbnRfdGV4dCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBp bWZfYmFzZV92aXJ0dWFsX3RyYWNrX2luaXQoRkZJTUZCYXNlVmlydHVhbFRyYWNrICp0cmFjaykK K3sKKyAgICBtZW1zZXQodHJhY2stPmlkX3V1aWQsIDAsIHNpemVvZih0cmFjay0+aWRfdXVpZCkp OworfQorCitzdGF0aWMgdm9pZCBpbWZfbWFya2VyX3ZpcnR1YWxfdHJhY2tfaW5pdChGRklNRk1h cmtlclZpcnR1YWxUcmFjayAqdHJhY2spCit7CisgICAgaW1mX2Jhc2VfdmlydHVhbF90cmFja19p bml0KChGRklNRkJhc2VWaXJ0dWFsVHJhY2sgKil0cmFjayk7CisgICAgdHJhY2stPnJlc291cmNl X2NvdW50ID0gMDsKKyAgICB0cmFjay0+cmVzb3VyY2VzID0gTlVMTDsKK30KKworc3RhdGljIHZv aWQgaW1mX3RyYWNrZmlsZV92aXJ0dWFsX3RyYWNrX2luaXQoRkZJTUZUcmFja0ZpbGVWaXJ0dWFs VHJhY2sgKnRyYWNrKQoreworICAgIGltZl9iYXNlX3ZpcnR1YWxfdHJhY2tfaW5pdCgoRkZJTUZC YXNlVmlydHVhbFRyYWNrICopdHJhY2spOworICAgIHRyYWNrLT5yZXNvdXJjZV9jb3VudCA9IDA7 CisgICAgdHJhY2stPnJlc291cmNlc19hbGxvY19zeiA9IDA7CisgICAgdHJhY2stPnJlc291cmNl cyA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGltZl9iYXNlX3Jlc291cmNlX2luaXQoRkZJTUZC YXNlUmVzb3VyY2UgKnJzcmMpCit7CisgICAgcnNyYy0+ZHVyYXRpb24gPSAwOworICAgIHJzcmMt PmVkaXRfcmF0ZSA9IGF2X21ha2VfcSgwLCAxKTsKKyAgICByc3JjLT5lbnRyeV9wb2ludCA9IDA7 CisgICAgcnNyYy0+cmVwZWF0X2NvdW50ID0gMTsKK30KKworc3RhdGljIHZvaWQgaW1mX21hcmtl cl9yZXNvdXJjZV9pbml0KEZGSU1GTWFya2VyUmVzb3VyY2UgKnJzcmMpCit7CisgICAgaW1mX2Jh c2VfcmVzb3VyY2VfaW5pdCgoRkZJTUZCYXNlUmVzb3VyY2UgKilyc3JjKTsKKyAgICByc3JjLT5t YXJrZXJfY291bnQgPSAwOworICAgIHJzcmMtPm1hcmtlcnMgPSBOVUxMOworfQorCitzdGF0aWMg dm9pZCBpbWZfbWFya2VyX2luaXQoRkZJTUZNYXJrZXIgKm1hcmtlcikKK3sKKyAgICBtYXJrZXIt PmxhYmVsX3V0ZjggPSBOVUxMOworICAgIG1hcmtlci0+b2Zmc2V0ID0gMDsKKyAgICBtYXJrZXIt PnNjb3BlX3V0ZjggPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpbWZfdHJhY2tmaWxlX3Jlc291 cmNlX2luaXQoRkZJTUZUcmFja0ZpbGVSZXNvdXJjZSAqcnNyYykKK3sKKyAgICBpbWZfYmFzZV9y ZXNvdXJjZV9pbml0KChGRklNRkJhc2VSZXNvdXJjZSAqKXJzcmMpOworICAgIG1lbXNldChyc3Jj LT50cmFja19maWxlX3V1aWQsIDAsIHNpemVvZihyc3JjLT50cmFja19maWxlX3V1aWQpKTsKK30K Kworc3RhdGljIGludCBmaWxsX2NvbnRlbnRfdGl0bGUoeG1sTm9kZVB0ciBjcGxfZWxlbWVudCwg RkZJTUZDUEwgKmNwbCkKK3sKKyAgICB4bWxOb2RlUHRyIGVsZW1lbnQgPSBOVUxMOworCisgICAg aWYgKCEoZWxlbWVudCA9IGZmX2ltZl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShjcGxf ZWxlbWVudCwgIkNvbnRlbnRUaXRsZSIpKSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0VSUk9SLCAiQ29udGVudFRpdGxlIGVsZW1lbnQgbm90IGZvdW5kIGluIHRoZSBJTUYgQ1BMXG4i KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorICAgIGNwbC0+ Y29udGVudF90aXRsZV91dGY4ID0geG1sTm9kZUxpc3RHZXRTdHJpbmcoY3BsX2VsZW1lbnQtPmRv YywKKyAgICAgICAgZWxlbWVudC0+eG1sQ2hpbGRyZW5Ob2RlLAorICAgICAgICAxKTsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbGxfZWRpdF9yYXRlKHhtbE5vZGVQdHIgY3Bs X2VsZW1lbnQsIEZGSU1GQ1BMICpjcGwpCit7CisgICAgeG1sTm9kZVB0ciBlbGVtZW50ID0gTlVM TDsKKworICAgIGlmICghKGVsZW1lbnQgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5 X25hbWUoY3BsX2VsZW1lbnQsICJFZGl0UmF0ZSIpKSkgeworICAgICAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0VSUk9SLCAiRWRpdFJhdGUgZWxlbWVudCBub3QgZm91bmQgaW4gdGhlIElNRiBDUExc biIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICBy ZXR1cm4gZmZfaW1mX3htbF9yZWFkX3JhdGlvbmFsKGVsZW1lbnQsICZjcGwtPmVkaXRfcmF0ZSk7 Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9pZCh4bWxOb2RlUHRyIGNwbF9lbGVtZW50LCBGRklNRkNQ TCAqY3BsKQoreworICAgIHhtbE5vZGVQdHIgZWxlbWVudCA9IE5VTEw7CisKKyAgICBpZiAoIShl bGVtZW50ID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKGNwbF9lbGVtZW50 LCAiSWQiKSkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIklkIGVsZW1l bnQgbm90IGZvdW5kIGluIHRoZSBJTUYgQ1BMXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisgICAgfQorCisgICAgcmV0dXJuIGZmX2ltZl94bWxfcmVhZF91dWlkKGVs ZW1lbnQsIGNwbC0+aWRfdXVpZCk7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9tYXJrZXIoeG1sTm9k ZVB0ciBtYXJrZXJfZWxlbSwgRkZJTUZNYXJrZXIgKm1hcmtlcikKK3sKKyAgICB4bWxOb2RlUHRy IGVsZW1lbnQgPSBOVUxMOworICAgIGludCByZXQgPSAwOworCisgICAgLyogcmVhZCBPZmZzZXQg Ki8KKyAgICBpZiAoIShlbGVtZW50ID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9u YW1lKG1hcmtlcl9lbGVtLCAiT2Zmc2V0IikpKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfRVJST1IsICJPZmZzZXQgZWxlbWVudCBub3QgZm91bmQgaW4gYSBNYXJrZXJcbiIpOworICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisgICAgaWYgKChyZXQgPSBm Zl9pbWZfeG1sX3JlYWRfdWludDMyKGVsZW1lbnQsICZtYXJrZXItPm9mZnNldCkpKQorICAgICAg ICByZXR1cm4gcmV0OworCisgICAgLyogcmVhZCBMYWJlbCBhbmQgU2NvcGUgKi8KKyAgICBpZiAo IShlbGVtZW50ID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKG1hcmtlcl9l bGVtLCAiTGFiZWwiKSkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkxh YmVsIGVsZW1lbnQgbm90IGZvdW5kIGluIGEgTWFya2VyXG4iKTsKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorICAgIGlmICghKG1hcmtlci0+bGFiZWxfdXRmOCA9 IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGVsZW1lbnQtPmRvYywgZWxlbWVudC0+eG1sQ2hpbGRyZW5O b2RlLCAxKSkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkVtcHR5IExh YmVsIGVsZW1lbnQgZm91bmQgaW4gYSBNYXJrZXJcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICB9CisgICAgaWYgKCEobWFya2VyLT5zY29wZV91dGY4ID0geG1s R2V0Tm9Oc1Byb3AoZWxlbWVudCwgInNjb3BlIikpKSB7CisgICAgICAgIG1hcmtlci0+c2NvcGVf dXRmOCA9IHhtbENoYXJTdHJkdXAoImh0dHA6Ly93d3cuc21wdGUtcmEub3JnL3NjaGVtYXMvMjA2 Ny0zLzIwMTMjc3RhbmRhcmQtbWFya2VycyIpOworICAgICAgICBpZiAoIW1hcmtlci0+c2NvcGVf dXRmOCkgeworICAgICAgICAgICAgeG1sRnJlZShtYXJrZXItPmxhYmVsX3V0ZjgpOworICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9iYXNlX3Jlc291cmNlKHhtbE5vZGVQdHIg cmVzb3VyY2VfZWxlbSwgRkZJTUZCYXNlUmVzb3VyY2UgKnJlc291cmNlLCBGRklNRkNQTCAqY3Bs KQoreworICAgIHhtbE5vZGVQdHIgZWxlbWVudCA9IE5VTEw7CisgICAgaW50IHJldCA9IDA7CisK KyAgICAvKiByZWFkIEVkaXRSYXRlICovCisgICAgaWYgKCEoZWxlbWVudCA9IGZmX2ltZl94bWxf Z2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShyZXNvdXJjZV9lbGVtLCAiRWRpdFJhdGUiKSkpIHsK KyAgICAgICAgcmVzb3VyY2UtPmVkaXRfcmF0ZSA9IGNwbC0+ZWRpdF9yYXRlOworICAgIH0gZWxz ZSBpZiAocmV0ID0gZmZfaW1mX3htbF9yZWFkX3JhdGlvbmFsKGVsZW1lbnQsICZyZXNvdXJjZS0+ ZWRpdF9yYXRlKSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxp ZCBFZGl0UmF0ZSBlbGVtZW50IGZvdW5kIGluIGEgUmVzb3VyY2VcbiIpOworICAgICAgICByZXR1 cm4gcmV0OworICAgIH0KKworICAgIC8qIHJlYWQgRW50cnlQb2ludCAqLworICAgIGlmIChlbGVt ZW50ID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKHJlc291cmNlX2VsZW0s ICJFbnRyeVBvaW50IikpIHsKKyAgICAgICAgaWYgKHJldCA9IGZmX2ltZl94bWxfcmVhZF91aW50 MzIoZWxlbWVudCwgJnJlc291cmNlLT5lbnRyeV9wb2ludCkpIHsKKyAgICAgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIEVudHJ5UG9pbnQgZWxlbWVudCBmb3VuZCBp biBhIFJlc291cmNlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAg ICB9IGVsc2UgeworICAgICAgICByZXNvdXJjZS0+ZW50cnlfcG9pbnQgPSAwOworICAgIH0KKwor ICAgIC8qIHJlYWQgSW50cmluc2ljRHVyYXRpb24gKi8KKyAgICBpZiAoIShlbGVtZW50ID0gZmZf aW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKHJlc291cmNlX2VsZW0sICJJbnRyaW5z aWNEdXJhdGlvbiIpKSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW50 cmluc2ljRHVyYXRpb24gZWxlbWVudCBtaXNzaW5nIGZyb20gUmVzb3VyY2VcbiIpOworICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisgICAgaWYgKHJldCA9IGZmX2lt Zl94bWxfcmVhZF91aW50MzIoZWxlbWVudCwgJnJlc291cmNlLT5kdXJhdGlvbikpIHsKKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgSW50cmluc2ljRHVyYXRpb24g ZWxlbWVudCBmb3VuZCBpbiBhIFJlc291cmNlXG4iKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAg ICB9CisgICAgcmVzb3VyY2UtPmR1cmF0aW9uIC09IHJlc291cmNlLT5lbnRyeV9wb2ludDsKKwor ICAgIC8qIHJlYWQgU291cmNlRHVyYXRpb24gKi8KKyAgICBpZiAoZWxlbWVudCA9IGZmX2ltZl94 bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShyZXNvdXJjZV9lbGVtLCAiU291cmNlRHVyYXRp b24iKSkKKyAgICAgICAgaWYgKHJldCA9IGZmX2ltZl94bWxfcmVhZF91aW50MzIoZWxlbWVudCwg JnJlc291cmNlLT5kdXJhdGlvbikpIHsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df RVJST1IsICJTb3VyY2VEdXJhdGlvbiBlbGVtZW50IG1pc3NpbmcgZnJvbSBSZXNvdXJjZVxuIik7 CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAvKiByZWFkIFJlcGVh dENvdW50ICovCisgICAgaWYgKGVsZW1lbnQgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50 X2J5X25hbWUocmVzb3VyY2VfZWxlbSwgIlJlcGVhdENvdW50IikpCisgICAgICAgIHJldCA9IGZm X2ltZl94bWxfcmVhZF91aW50MzIoZWxlbWVudCwgJnJlc291cmNlLT5yZXBlYXRfY291bnQpOwor CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmaWxsX3RyYWNrZmlsZV9yZXNvdXJj ZSh4bWxOb2RlUHRyIHRmX3Jlc291cmNlX2VsZW0sCisgICAgRkZJTUZUcmFja0ZpbGVSZXNvdXJj ZSAqdGZfcmVzb3VyY2UsCisgICAgRkZJTUZDUEwgKmNwbCkKK3sKKyAgICB4bWxOb2RlUHRyIGVs ZW1lbnQgPSBOVUxMOworICAgIGludCByZXQgPSAwOworCisgICAgaWYgKHJldCA9IGZpbGxfYmFz ZV9yZXNvdXJjZSh0Zl9yZXNvdXJjZV9lbGVtLCAoRkZJTUZCYXNlUmVzb3VyY2UgKil0Zl9yZXNv dXJjZSwgY3BsKSkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIC8qIHJlYWQgVHJhY2tGaWxl SWQgKi8KKyAgICBpZiAoZWxlbWVudCA9IGZmX2ltZl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlf bmFtZSh0Zl9yZXNvdXJjZV9lbGVtLCAiVHJhY2tGaWxlSWQiKSkgeworICAgICAgICBpZiAocmV0 ID0gZmZfaW1mX3htbF9yZWFkX3V1aWQoZWxlbWVudCwgdGZfcmVzb3VyY2UtPnRyYWNrX2ZpbGVf dXVpZCkpIHsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlk IFRyYWNrRmlsZUlkIGVsZW1lbnQgZm91bmQgaW4gUmVzb3VyY2VcbiIpOworICAgICAgICAgICAg cmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfRVJST1IsICJUcmFja0ZpbGVJZCBlbGVtZW50IG1pc3NpbmcgZnJvbSBSZXNvdXJj ZVxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKworICAg IHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9tYXJrZXJfcmVzb3VyY2UoeG1sTm9k ZVB0ciBtYXJrZXJfcmVzb3VyY2VfZWxlbSwKKyAgICBGRklNRk1hcmtlclJlc291cmNlICptYXJr ZXJfcmVzb3VyY2UsCisgICAgRkZJTUZDUEwgKmNwbCkKK3sKKyAgICB4bWxOb2RlUHRyIGVsZW1l bnQgPSBOVUxMOworICAgIGludCByZXQgPSAwOworCisgICAgaWYgKHJldCA9IGZpbGxfYmFzZV9y ZXNvdXJjZShtYXJrZXJfcmVzb3VyY2VfZWxlbSwgKEZGSU1GQmFzZVJlc291cmNlICopbWFya2Vy X3Jlc291cmNlLCBjcGwpKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgLyogcmVhZCBtYXJr ZXJzICovCisgICAgZWxlbWVudCA9IHhtbEZpcnN0RWxlbWVudENoaWxkKG1hcmtlcl9yZXNvdXJj ZV9lbGVtKTsKKyAgICB3aGlsZSAoZWxlbWVudCkgeworICAgICAgICBpZiAoeG1sU3RyY21wKGVs ZW1lbnQtPm5hbWUsICJNYXJrZXIiKSA9PSAwKSB7CisgICAgICAgICAgICB2b2lkICp0bXA7CisK KyAgICAgICAgICAgIGlmIChtYXJrZXJfcmVzb3VyY2UtPm1hcmtlcl9jb3VudCA9PSBVSU5UMzJf TUFYKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAg ICB0bXAgPSBhdl9yZWFsbG9jX2FycmF5KG1hcmtlcl9yZXNvdXJjZS0+bWFya2VycywKKyAgICAg ICAgICAgICAgICBtYXJrZXJfcmVzb3VyY2UtPm1hcmtlcl9jb3VudCArIDEsCisgICAgICAgICAg ICAgICAgc2l6ZW9mKEZGSU1GTWFya2VyKSk7CisgICAgICAgICAgICBpZiAoIXRtcCkKKyAgICAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgbWFya2VyX3Jl c291cmNlLT5tYXJrZXJzID0gdG1wOworICAgICAgICAgICAgaW1mX21hcmtlcl9pbml0KCZtYXJr ZXJfcmVzb3VyY2UtPm1hcmtlcnNbbWFya2VyX3Jlc291cmNlLT5tYXJrZXJfY291bnRdKTsKKyAg ICAgICAgICAgIHJldCA9IGZpbGxfbWFya2VyKGVsZW1lbnQsCisgICAgICAgICAgICAgICAgJm1h cmtlcl9yZXNvdXJjZS0+bWFya2Vyc1ttYXJrZXJfcmVzb3VyY2UtPm1hcmtlcl9jb3VudF0pOwor ICAgICAgICAgICAgbWFya2VyX3Jlc291cmNlLT5tYXJrZXJfY291bnQrKzsKKyAgICAgICAgICAg IGlmIChyZXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgICAg ICBlbGVtZW50ID0geG1sTmV4dEVsZW1lbnRTaWJsaW5nKGVsZW1lbnQpOworICAgIH0KKworICAg IHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF9tYXJrZXJfc2VxdWVuY2UoeG1sTm9k ZVB0ciBtYXJrZXJfc2VxdWVuY2VfZWxlbSwgRkZJTUZDUEwgKmNwbCkKK3sKKyAgICBpbnQgcmV0 ID0gMDsKKyAgICB1aW50OF90IHV1aWRbMTZdOworICAgIHhtbE5vZGVQdHIgcmVzb3VyY2VfbGlz dF9lbGVtID0gTlVMTDsKKyAgICB4bWxOb2RlUHRyIHJlc291cmNlX2VsZW0gPSBOVUxMOworICAg IHhtbE5vZGVQdHIgdHJhY2tfaWRfZWxlbSA9IE5VTEw7CisgICAgdW5zaWduZWQgbG9uZyByZXNv dXJjZV9lbGVtX2NvdW50OworICAgIHZvaWQgKnRtcDsKKworICAgIC8qIHJlYWQgVHJhY2tJRCBl bGVtZW50ICovCisgICAgaWYgKCEodHJhY2tfaWRfZWxlbSA9IGZmX2ltZl94bWxfZ2V0X2NoaWxk X2VsZW1lbnRfYnlfbmFtZShtYXJrZXJfc2VxdWVuY2VfZWxlbSwgIlRyYWNrSWQiKSkpIHsKKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRyYWNrSWQgZWxlbWVudCBtaXNzaW5n IGZyb20gU2VxdWVuY2VcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KyAgICB9CisgICAgaWYgKHJldCA9IGZmX2ltZl94bWxfcmVhZF91dWlkKHRyYWNrX2lkX2VsZW0s IHV1aWQpKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFRy YWNrSWQgZWxlbWVudCBmb3VuZCBpbiBTZXF1ZW5jZVxuIik7CisgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICBhdl9sb2coTlVMTCwKKyAgICAgICAgQVZfTE9H X0RFQlVHLAorICAgICAgICAiUHJvY2Vzc2luZyBJTUYgQ1BMIE1hcmtlciBTZXF1ZW5jZSBmb3Ig VmlydHVhbCBUcmFjayAiIEZGX0lNRl9VVUlEX0ZPUk1BVCAiXG4iLAorICAgICAgICBVSURfQVJH KHV1aWQpKTsKKworICAgIC8qIGNyZWF0ZSBtYWluIG1hcmtlciB2aXJ0dWFsIHRyYWNrIGlmIGl0 IGRvZXMgbm90IGV4aXN0ICovCisgICAgaWYgKCFjcGwtPm1haW5fbWFya2Vyc190cmFjaykgewor ICAgICAgICBjcGwtPm1haW5fbWFya2Vyc190cmFjayA9IGF2X21hbGxvYyhzaXplb2YoRkZJTUZN YXJrZXJWaXJ0dWFsVHJhY2spKTsKKyAgICAgICAgaWYgKCFjcGwtPm1haW5fbWFya2Vyc190cmFj aykKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGltZl9tYXJr ZXJfdmlydHVhbF90cmFja19pbml0KGNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrKTsKKyAgICAgICAg bWVtY3B5KGNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrLT5iYXNlLmlkX3V1aWQsIHV1aWQsIHNpemVv Zih1dWlkKSk7CisgICAgfSBlbHNlIGlmIChtZW1jbXAoY3BsLT5tYWluX21hcmtlcnNfdHJhY2st PmJhc2UuaWRfdXVpZCwgdXVpZCwgc2l6ZW9mKHV1aWQpKSAhPSAwKSB7CisgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNdWx0aXBsZSBtYXJrZXIgdmlydHVhbCB0cmFja3Mgd2Vy ZSBmb3VuZFxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0K KworICAgIC8qIHByb2Nlc3MgcmVzb3VyY2VzICovCisgICAgcmVzb3VyY2VfbGlzdF9lbGVtID0g ZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKG1hcmtlcl9zZXF1ZW5jZV9lbGVt LCAiUmVzb3VyY2VMaXN0Iik7CisgICAgaWYgKCFyZXNvdXJjZV9saXN0X2VsZW0pCisgICAgICAg IHJldHVybiAwOworICAgIHJlc291cmNlX2VsZW1fY291bnQgPSB4bWxDaGlsZEVsZW1lbnRDb3Vu dChyZXNvdXJjZV9saXN0X2VsZW0pOworICAgIGlmIChyZXNvdXJjZV9lbGVtX2NvdW50ID4gVUlO VDMyX01BWAorICAgICAgICB8fCBjcGwtPm1haW5fbWFya2Vyc190cmFjay0+cmVzb3VyY2VfY291 bnQgPiBVSU5UMzJfTUFYIC0gcmVzb3VyY2VfZWxlbV9jb3VudCkKKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKKyAgICB0bXAgPSBhdl9yZWFsbG9jX2FycmF5KGNwbC0+bWFpbl9tYXJr ZXJzX3RyYWNrLT5yZXNvdXJjZXMsCisgICAgICAgIGNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrLT5y ZXNvdXJjZV9jb3VudCArIHJlc291cmNlX2VsZW1fY291bnQsCisgICAgICAgIHNpemVvZihGRklN Rk1hcmtlclJlc291cmNlKSk7CisgICAgaWYgKCF0bXApIHsKKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19FUlJPUiwgIkNhbm5vdCBhbGxvY2F0ZSBNYXJrZXIgUmVzb3VyY2VzXG4iKTsKKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisgICAgY3BsLT5tYWluX21hcmtl cnNfdHJhY2stPnJlc291cmNlcyA9IHRtcDsKKworICAgIHJlc291cmNlX2VsZW0gPSB4bWxGaXJz dEVsZW1lbnRDaGlsZChyZXNvdXJjZV9saXN0X2VsZW0pOworICAgIHdoaWxlIChyZXNvdXJjZV9l bGVtKSB7CisgICAgICAgIGltZl9tYXJrZXJfcmVzb3VyY2VfaW5pdCgKKyAgICAgICAgICAgICZj cGwtPm1haW5fbWFya2Vyc190cmFjay0+cmVzb3VyY2VzW2NwbC0+bWFpbl9tYXJrZXJzX3RyYWNr LT5yZXNvdXJjZV9jb3VudF0pOworICAgICAgICByZXQgPSBmaWxsX21hcmtlcl9yZXNvdXJjZShy ZXNvdXJjZV9lbGVtLAorICAgICAgICAgICAgJmNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrLT5yZXNv dXJjZXNbY3BsLT5tYWluX21hcmtlcnNfdHJhY2stPnJlc291cmNlX2NvdW50XSwKKyAgICAgICAg ICAgIGNwbCk7CisgICAgICAgIGNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrLT5yZXNvdXJjZV9jb3Vu dCsrOworICAgICAgICBpZiAocmV0KQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAg cmVzb3VyY2VfZWxlbSA9IHhtbE5leHRFbGVtZW50U2libGluZyhyZXNvdXJjZV9lbGVtKTsKKyAg ICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhhc19zdGVyZW9fcmVzb3Vy Y2VzKHhtbE5vZGVQdHIgZWxlbWVudCkKK3sKKyAgICBpZiAoeG1sU3RyY21wKGVsZW1lbnQtPm5h bWUsICJMZWZ0IikgPT0gMCB8fCB4bWxTdHJjbXAoZWxlbWVudC0+bmFtZSwgIlJpZ2h0IikgPT0g MCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxlbWVudCA9IHhtbEZpcnN0RWxlbWVudENoaWxk KGVsZW1lbnQpOworICAgIHdoaWxlIChlbGVtZW50KSB7CisgICAgICAgIGlmIChoYXNfc3RlcmVv X3Jlc291cmNlcyhlbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBlbGVt ZW50ID0geG1sTmV4dEVsZW1lbnRTaWJsaW5nKGVsZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGludCBwdXNoX21haW5fYXVkaW9fc2VxdWVuY2UoeG1sTm9kZVB0ciBh dWRpb19zZXF1ZW5jZV9lbGVtLCBGRklNRkNQTCAqY3BsKQoreworICAgIGludCByZXQgPSAwOwor ICAgIHVpbnQ4X3QgdXVpZFsxNl07CisgICAgeG1sTm9kZVB0ciByZXNvdXJjZV9saXN0X2VsZW0g PSBOVUxMOworICAgIHhtbE5vZGVQdHIgcmVzb3VyY2VfZWxlbSA9IE5VTEw7CisgICAgeG1sTm9k ZVB0ciB0cmFja19pZF9lbGVtID0gTlVMTDsKKyAgICB1bnNpZ25lZCBsb25nIHJlc291cmNlX2Vs ZW1fY291bnQ7CisgICAgRkZJTUZUcmFja0ZpbGVWaXJ0dWFsVHJhY2sgKnZ0ID0gTlVMTDsKKyAg ICB2b2lkICp0bXA7CisKKyAgICAvKiByZWFkIFRyYWNrSUQgZWxlbWVudCAqLworICAgIGlmICgh KHRyYWNrX2lkX2VsZW0gPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUoYXVk aW9fc2VxdWVuY2VfZWxlbSwgIlRyYWNrSWQiKSkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19FUlJPUiwgIlRyYWNrSWQgZWxlbWVudCBtaXNzaW5nIGZyb20gYXVkaW8gc2VxdWVuY2Vc biIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisgICAgaWYg KHJldCA9IGZmX2ltZl94bWxfcmVhZF91dWlkKHRyYWNrX2lkX2VsZW0sIHV1aWQpKSB7CisgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFRyYWNrSWQgZWxlbWVudCBm b3VuZCBpbiBhdWRpbyBzZXF1ZW5jZVxuIik7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQor ICAgIGF2X2xvZyhOVUxMLAorICAgICAgICBBVl9MT0dfREVCVUcsCisgICAgICAgICJQcm9jZXNz aW5nIElNRiBDUEwgQXVkaW8gU2VxdWVuY2UgZm9yIFZpcnR1YWwgVHJhY2sgIiBGRl9JTUZfVVVJ RF9GT1JNQVQgIlxuIiwKKyAgICAgICAgVUlEX0FSRyh1dWlkKSk7CisKKyAgICAvKiBnZXQgdGhl IG1haW4gYXVkaW8gdmlydHVhbCB0cmFjayBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZXF1ZW5jZSAq LworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjcGwtPm1haW5fYXVkaW9fdHJhY2tfY291 bnQ7IGkrKykKKyAgICAgICAgaWYgKG1lbWNtcChjcGwtPm1haW5fYXVkaW9fdHJhY2tzW2ldLmJh c2UuaWRfdXVpZCwgdXVpZCwgc2l6ZW9mKHV1aWQpKSA9PSAwKSB7CisgICAgICAgICAgICB2dCA9 ICZjcGwtPm1haW5fYXVkaW9fdHJhY2tzW2ldOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IH0KKworICAgIC8qIGNyZWF0ZSBhIG1haW4gYXVkaW8gdmlydHVhbCB0cmFjayBpZiBub25lIGV4 aXN0cyBmb3IgdGhlIHNlcXVlbmNlICovCisgICAgaWYgKCF2dCkgeworICAgICAgICBpZiAoY3Bs LT5tYWluX2F1ZGlvX3RyYWNrX2NvdW50ID09IFVJTlQzMl9NQVgpCisgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICB0bXAgPSBhdl9yZWFsbG9jX2FycmF5KGNwbC0+ bWFpbl9hdWRpb190cmFja3MsCisgICAgICAgICAgICBjcGwtPm1haW5fYXVkaW9fdHJhY2tfY291 bnQgKyAxLAorICAgICAgICAgICAgc2l6ZW9mKEZGSU1GVHJhY2tGaWxlVmlydHVhbFRyYWNrKSk7 CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK KyAgICAgICAgY3BsLT5tYWluX2F1ZGlvX3RyYWNrcyA9IHRtcDsKKyAgICAgICAgdnQgPSAmY3Bs LT5tYWluX2F1ZGlvX3RyYWNrc1tjcGwtPm1haW5fYXVkaW9fdHJhY2tfY291bnRdOworICAgICAg ICBpbWZfdHJhY2tmaWxlX3ZpcnR1YWxfdHJhY2tfaW5pdCh2dCk7CisgICAgICAgIGNwbC0+bWFp bl9hdWRpb190cmFja19jb3VudCsrOworICAgICAgICBtZW1jcHkodnQtPmJhc2UuaWRfdXVpZCwg dXVpZCwgc2l6ZW9mKHV1aWQpKTsKKyAgICB9CisKKyAgICAvKiBwcm9jZXNzIHJlc291cmNlcyAq LworICAgIHJlc291cmNlX2xpc3RfZWxlbSA9IGZmX2ltZl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRf YnlfbmFtZShhdWRpb19zZXF1ZW5jZV9lbGVtLCAiUmVzb3VyY2VMaXN0Iik7CisgICAgaWYgKCFy ZXNvdXJjZV9saXN0X2VsZW0pCisgICAgICAgIHJldHVybiAwOworICAgIHJlc291cmNlX2VsZW1f Y291bnQgPSB4bWxDaGlsZEVsZW1lbnRDb3VudChyZXNvdXJjZV9saXN0X2VsZW0pOworICAgIGlm IChyZXNvdXJjZV9lbGVtX2NvdW50ID4gVUlOVDMyX01BWAorICAgICAgICB8fCB2dC0+cmVzb3Vy Y2VfY291bnQgPiBVSU5UMzJfTUFYIC0gcmVzb3VyY2VfZWxlbV9jb3VudCkKKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB0bXAgPSBhdl9mYXN0X3JlYWxsb2ModnQtPnJlc291 cmNlcywKKyAgICAgICAgJnZ0LT5yZXNvdXJjZXNfYWxsb2Nfc3osCisgICAgICAgICh2dC0+cmVz b3VyY2VfY291bnQgKyByZXNvdXJjZV9lbGVtX2NvdW50KSAqIHNpemVvZihGRklNRlRyYWNrRmls ZVJlc291cmNlKSk7CisgICAgaWYgKCF0bXApIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgIkNhbm5vdCBhbGxvY2F0ZSBNYWluIEF1ZGlvIFJlc291cmNlc1xuIik7CisgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorICAgIHZ0LT5yZXNvdXJjZXMgPSB0 bXA7CisKKyAgICByZXNvdXJjZV9lbGVtID0geG1sRmlyc3RFbGVtZW50Q2hpbGQocmVzb3VyY2Vf bGlzdF9lbGVtKTsKKyAgICB3aGlsZSAocmVzb3VyY2VfZWxlbSkgeworICAgICAgICBpbWZfdHJh Y2tmaWxlX3Jlc291cmNlX2luaXQoJnZ0LT5yZXNvdXJjZXNbdnQtPnJlc291cmNlX2NvdW50XSk7 CisgICAgICAgIHJldCA9IGZpbGxfdHJhY2tmaWxlX3Jlc291cmNlKHJlc291cmNlX2VsZW0sCisg ICAgICAgICAgICAmdnQtPnJlc291cmNlc1t2dC0+cmVzb3VyY2VfY291bnRdLAorICAgICAgICAg ICAgY3BsKTsKKyAgICAgICAgdnQtPnJlc291cmNlX2NvdW50Kys7CisgICAgICAgIGlmIChyZXQp IHsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFJlc291 cmNlXG4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHJlc291 cmNlX2VsZW0gPSB4bWxOZXh0RWxlbWVudFNpYmxpbmcocmVzb3VyY2VfZWxlbSk7CisgICAgfQor CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwdXNoX21haW5faW1hZ2VfMmRfc2Vx dWVuY2UoeG1sTm9kZVB0ciBpbWFnZV9zZXF1ZW5jZV9lbGVtLCBGRklNRkNQTCAqY3BsKQorewor ICAgIGludCByZXQgPSAwOworICAgIHVpbnQ4X3QgdXVpZFsxNl07CisgICAgeG1sTm9kZVB0ciBy ZXNvdXJjZV9saXN0X2VsZW0gPSBOVUxMOworICAgIHhtbE5vZGVQdHIgcmVzb3VyY2VfZWxlbSA9 IE5VTEw7CisgICAgeG1sTm9kZVB0ciB0cmFja19pZF9lbGVtID0gTlVMTDsKKyAgICB2b2lkICp0 bXA7CisgICAgdW5zaWduZWQgbG9uZyByZXNvdXJjZV9lbGVtX2NvdW50OworCisgICAgLyogc2tp cCBzdGVyZW9zY29waWMgcmVzb3VyY2VzICovCisgICAgaWYgKGhhc19zdGVyZW9fcmVzb3VyY2Vz KGltYWdlX3NlcXVlbmNlX2VsZW0pKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJS T1IsICJTdGVyZW9zY29waWMgM0QgaW1hZ2UgdmlydHVhbCB0cmFja3Mgbm90IHN1cHBvcnRlZFxu Iik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICB9CisKKyAgICAv KiByZWFkIFRyYWNrSWQgZWxlbWVudCovCisgICAgaWYgKCEodHJhY2tfaWRfZWxlbSA9IGZmX2lt Zl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShpbWFnZV9zZXF1ZW5jZV9lbGVtLCAiVHJh Y2tJZCIpKSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVHJhY2tJZCBl bGVtZW50IG1pc3NpbmcgZnJvbSBhdWRpbyBzZXF1ZW5jZVxuIik7CisgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICBpZiAocmV0ID0gZmZfaW1mX3htbF9yZWFk X3V1aWQodHJhY2tfaWRfZWxlbSwgdXVpZCkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgIkludmFsaWQgVHJhY2tJZCBlbGVtZW50IGZvdW5kIGluIGF1ZGlvIHNlcXVlbmNl XG4iKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvKiBjcmVhdGUgbWFpbiBp bWFnZSB2aXJ0dWFsIHRyYWNrIGlmIG9uZSBkb2VzIG5vdCBleGlzdCAqLworICAgIGlmICghY3Bs LT5tYWluX2ltYWdlXzJkX3RyYWNrKSB7CisgICAgICAgIGNwbC0+bWFpbl9pbWFnZV8yZF90cmFj ayA9IGF2X21hbGxvYyhzaXplb2YoRkZJTUZUcmFja0ZpbGVWaXJ0dWFsVHJhY2spKTsKKyAgICAg ICAgaWYgKCFjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2spCisgICAgICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOworICAgICAgICBpbWZfdHJhY2tmaWxlX3ZpcnR1YWxfdHJhY2tfaW5pdChj cGwtPm1haW5faW1hZ2VfMmRfdHJhY2spOworICAgICAgICBtZW1jcHkoY3BsLT5tYWluX2ltYWdl XzJkX3RyYWNrLT5iYXNlLmlkX3V1aWQsIHV1aWQsIHNpemVvZih1dWlkKSk7CisgICAgfSBlbHNl IGlmIChtZW1jbXAoY3BsLT5tYWluX2ltYWdlXzJkX3RyYWNrLT5iYXNlLmlkX3V1aWQsIHV1aWQs IHNpemVvZih1dWlkKSkgIT0gMCkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiTXVsdGlwbGUgTWFpbkltYWdlIHZpcnR1YWwgdHJhY2tzIGZvdW5kXG4iKTsKKyAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorICAgIGF2X2xvZyhOVUxMLAorICAg ICAgICBBVl9MT0dfREVCVUcsCisgICAgICAgICJQcm9jZXNzaW5nIElNRiBDUEwgTWFpbiBJbWFn ZSBTZXF1ZW5jZSBmb3IgVmlydHVhbCBUcmFjayAiIEZGX0lNRl9VVUlEX0ZPUk1BVCAiXG4iLAor ICAgICAgICBVSURfQVJHKHV1aWQpKTsKKworICAgIC8qIHByb2Nlc3MgcmVzb3VyY2VzICovCisg ICAgcmVzb3VyY2VfbGlzdF9lbGVtID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9u YW1lKGltYWdlX3NlcXVlbmNlX2VsZW0sICJSZXNvdXJjZUxpc3QiKTsKKyAgICBpZiAoIXJlc291 cmNlX2xpc3RfZWxlbSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmVzb3VyY2VfZWxlbV9jb3Vu dCA9IHhtbENoaWxkRWxlbWVudENvdW50KHJlc291cmNlX2xpc3RfZWxlbSk7CisgICAgaWYgKHJl c291cmNlX2VsZW1fY291bnQgPiBVSU5UMzJfTUFYCisgICAgICAgIHx8IGNwbC0+bWFpbl9pbWFn ZV8yZF90cmFjay0+cmVzb3VyY2VfY291bnQgPiBVSU5UMzJfTUFYIC0gcmVzb3VyY2VfZWxlbV9j b3VudAorICAgICAgICB8fCAoY3BsLT5tYWluX2ltYWdlXzJkX3RyYWNrLT5yZXNvdXJjZV9jb3Vu dCArIHJlc291cmNlX2VsZW1fY291bnQpID4gSU5UX01BWCAvIHNpemVvZihGRklNRlRyYWNrRmls ZVJlc291cmNlKSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB0bXAgPSBh dl9mYXN0X3JlYWxsb2MoY3BsLT5tYWluX2ltYWdlXzJkX3RyYWNrLT5yZXNvdXJjZXMsCisgICAg ICAgICZjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2stPnJlc291cmNlc19hbGxvY19zeiwKKyAgICAg ICAgKGNwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VfY291bnQgKyByZXNvdXJjZV9l bGVtX2NvdW50KSAqIHNpemVvZihGRklNRlRyYWNrRmlsZVJlc291cmNlKSk7CisgICAgaWYgKCF0 bXApIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBhbGxvY2F0 ZSBNYWluIEltYWdlIFJlc291cmNlc1xuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CisgICAgfQorICAgIGNwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VzID0gdG1w OworCisgICAgcmVzb3VyY2VfZWxlbSA9IHhtbEZpcnN0RWxlbWVudENoaWxkKHJlc291cmNlX2xp c3RfZWxlbSk7CisgICAgd2hpbGUgKHJlc291cmNlX2VsZW0pIHsKKyAgICAgICAgaW1mX3RyYWNr ZmlsZV9yZXNvdXJjZV9pbml0KAorICAgICAgICAgICAgJmNwbC0+bWFpbl9pbWFnZV8yZF90cmFj ay0+cmVzb3VyY2VzW2NwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VfY291bnRdKTsK KyAgICAgICAgcmV0ID0gZmlsbF90cmFja2ZpbGVfcmVzb3VyY2UocmVzb3VyY2VfZWxlbSwKKyAg ICAgICAgICAgICZjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2stPnJlc291cmNlc1tjcGwtPm1haW5f aW1hZ2VfMmRfdHJhY2stPnJlc291cmNlX2NvdW50XSwKKyAgICAgICAgICAgIGNwbCk7CisgICAg ICAgIGNwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VfY291bnQrKzsKKyAgICAgICAg aWYgKHJldCkgeworICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFs aWQgUmVzb3VyY2VcbiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg ICAgcmVzb3VyY2VfZWxlbSA9IHhtbE5leHRFbGVtZW50U2libGluZyhyZXNvdXJjZV9lbGVtKTsK KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxsX3ZpcnR1YWxfdHJh Y2tzKHhtbE5vZGVQdHIgY3BsX2VsZW1lbnQsIEZGSU1GQ1BMICpjcGwpCit7CisgICAgaW50IHJl dCA9IDA7CisgICAgeG1sTm9kZVB0ciBzZWdtZW50X2xpc3RfZWxlbSA9IE5VTEw7CisgICAgeG1s Tm9kZVB0ciBzZWdtZW50X2VsZW0gPSBOVUxMOworICAgIHhtbE5vZGVQdHIgc2VxdWVuY2VfbGlz dF9lbGVtID0gTlVMTDsKKyAgICB4bWxOb2RlUHRyIHNlcXVlbmNlX2VsZW0gPSBOVUxMOworCisg ICAgaWYgKCEoc2VnbWVudF9saXN0X2VsZW0gPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50 X2J5X25hbWUoY3BsX2VsZW1lbnQsICJTZWdtZW50TGlzdCIpKSkgeworICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCAiU2VnbWVudExpc3QgZWxlbWVudCBtaXNzaW5nXG4iKTsKKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgLyogcHJvY2Vz cyBzZXF1ZW5jZXMgKi8KKyAgICBzZWdtZW50X2VsZW0gPSB4bWxGaXJzdEVsZW1lbnRDaGlsZChz ZWdtZW50X2xpc3RfZWxlbSk7CisgICAgd2hpbGUgKHNlZ21lbnRfZWxlbSkgeworICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiUHJvY2Vzc2luZyBJTUYgQ1BMIFNlZ21lbnRcbiIp OworICAgICAgICBzZXF1ZW5jZV9saXN0X2VsZW0gPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVt ZW50X2J5X25hbWUoc2VnbWVudF9lbGVtLCAiU2VxdWVuY2VMaXN0Iik7CisgICAgICAgIGlmICgh c2VnbWVudF9saXN0X2VsZW0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc2VxdWVu Y2VfZWxlbSA9IHhtbEZpcnN0RWxlbWVudENoaWxkKHNlcXVlbmNlX2xpc3RfZWxlbSk7CisgICAg ICAgIHdoaWxlIChzZXF1ZW5jZV9lbGVtKSB7CisgICAgICAgICAgICBpZiAoeG1sU3RyY21wKHNl cXVlbmNlX2VsZW0tPm5hbWUsICJNYXJrZXJTZXF1ZW5jZSIpID09IDApCisgICAgICAgICAgICAg ICAgcmV0ID0gcHVzaF9tYXJrZXJfc2VxdWVuY2Uoc2VxdWVuY2VfZWxlbSwgY3BsKTsKKyAgICAg ICAgICAgIGVsc2UgaWYgKHhtbFN0cmNtcChzZXF1ZW5jZV9lbGVtLT5uYW1lLCAiTWFpbkltYWdl U2VxdWVuY2UiKSA9PSAwKQorICAgICAgICAgICAgICAgIHJldCA9IHB1c2hfbWFpbl9pbWFnZV8y ZF9zZXF1ZW5jZShzZXF1ZW5jZV9lbGVtLCBjcGwpOworICAgICAgICAgICAgZWxzZSBpZiAoeG1s U3RyY21wKHNlcXVlbmNlX2VsZW0tPm5hbWUsICJNYWluQXVkaW9TZXF1ZW5jZSIpID09IDApCisg ICAgICAgICAgICAgICAgcmV0ID0gcHVzaF9tYWluX2F1ZGlvX3NlcXVlbmNlKHNlcXVlbmNlX2Vs ZW0sIGNwbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXZfbG9nKE5VTEws CisgICAgICAgICAgICAgICAgICAgIEFWX0xPR19JTkZPLAorICAgICAgICAgICAgICAgICAgICAi VGhlIGZvbGxvd2luZyBTZXF1ZW5jZSBpcyBub3Qgc3VwcG9ydGVkIGFuZCBpcyBpZ25vcmVkOiAl c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2VfZWxlbS0+bmFtZSk7CisgICAgICAg ICAgICBpZiAocmV0ID09IEFWRVJST1IoRU5PTUVNKSkKKyAgICAgICAgICAgICAgICAvKiBhYm9y dCBwYXJzaW5nIG9ubHkgaWYgbWVtb3J5IGVycm9yIG9jY3VycmVkICovCisgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIHNlcXVlbmNlX2VsZW0gPSB4bWxOZXh0RWxlbWVu dFNpYmxpbmcoc2VxdWVuY2VfZWxlbSk7CisgICAgICAgIH0KKyAgICAgICAgc2VnbWVudF9lbGVt ID0geG1sTmV4dEVsZW1lbnRTaWJsaW5nKHNlZ21lbnRfZWxlbSk7CisgICAgfQorCisgICAgcmV0 dXJuIHJldDsKK30KKworaW50IGZmX2ltZl9wYXJzZV9jcGxfZnJvbV94bWxfZG9tKHhtbERvY1B0 ciBkb2MsIEZGSU1GQ1BMICoqY3BsKQoreworICAgIGludCByZXQgPSAwOworICAgIHhtbE5vZGVQ dHIgY3BsX2VsZW1lbnQgPSBOVUxMOworCisgICAgKmNwbCA9IGZmX2ltZl9jcGxfYWxsb2MoKTsK KyAgICBpZiAoISpjcGwpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAg ICBnb3RvIGNsZWFudXA7CisgICAgfQorICAgIGNwbF9lbGVtZW50ID0geG1sRG9jR2V0Um9vdEVs ZW1lbnQoZG9jKTsKKyAgICBpZiAoeG1sU3RyY21wKGNwbF9lbGVtZW50LT5uYW1lLCAiQ29tcG9z aXRpb25QbGF5bGlzdCIpKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJU aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBDUEwgaXMgbm90IENvbXBvc2l0aW9uUGxheWxpc3RcbiIp OworICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBnb3RvIGNsZWFu dXA7CisgICAgfQorICAgIGlmIChyZXQgPSBmaWxsX2NvbnRlbnRfdGl0bGUoY3BsX2VsZW1lbnQs ICpjcGwpKQorICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgaWYgKHJldCA9IGZpbGxfaWQoY3Bs X2VsZW1lbnQsICpjcGwpKQorICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgaWYgKHJldCA9IGZp bGxfZWRpdF9yYXRlKGNwbF9lbGVtZW50LCAqY3BsKSkKKyAgICAgICAgZ290byBjbGVhbnVwOwor ICAgIGlmIChyZXQgPSBmaWxsX3ZpcnR1YWxfdHJhY2tzKGNwbF9lbGVtZW50LCAqY3BsKSkKKyAg ICAgICAgZ290byBjbGVhbnVwOworCitjbGVhbnVwOgorICAgIGlmICgqY3BsICYmIHJldCkgewor ICAgICAgICBmZl9pbWZfY3BsX2ZyZWUoKmNwbCk7CisgICAgICAgICpjcGwgPSBOVUxMOworICAg IH0KKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpbWZfbWFya2VyX2ZyZWUoRkZJ TUZNYXJrZXIgKm1hcmtlcikKK3sKKyAgICBpZiAoIW1hcmtlcikKKyAgICAgICAgcmV0dXJuOwor ICAgIHhtbEZyZWUobWFya2VyLT5sYWJlbF91dGY4KTsKKyAgICB4bWxGcmVlKG1hcmtlci0+c2Nv cGVfdXRmOCk7Cit9CisKK3N0YXRpYyB2b2lkIGltZl9tYXJrZXJfcmVzb3VyY2VfZnJlZShGRklN Rk1hcmtlclJlc291cmNlICpyc3JjKQoreworICAgIGlmICghcnNyYykKKyAgICAgICAgcmV0dXJu OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCByc3JjLT5tYXJrZXJfY291bnQ7IGkrKykK KyAgICAgICAgaW1mX21hcmtlcl9mcmVlKCZyc3JjLT5tYXJrZXJzW2ldKTsKKyAgICBhdl9mcmVl cCgmcnNyYy0+bWFya2Vycyk7Cit9CisKK3N0YXRpYyB2b2lkIGltZl9tYXJrZXJfdmlydHVhbF90 cmFja19mcmVlKEZGSU1GTWFya2VyVmlydHVhbFRyYWNrICp2dCkKK3sKKyAgICBpZiAoIXZ0KQor ICAgICAgICByZXR1cm47CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHZ0LT5yZXNvdXJj ZV9jb3VudDsgaSsrKQorICAgICAgICBpbWZfbWFya2VyX3Jlc291cmNlX2ZyZWUoJnZ0LT5yZXNv dXJjZXNbaV0pOworICAgIGF2X2ZyZWVwKCZ2dC0+cmVzb3VyY2VzKTsKK30KKworc3RhdGljIHZv aWQgaW1mX3RyYWNrZmlsZV92aXJ0dWFsX3RyYWNrX2ZyZWUoRkZJTUZUcmFja0ZpbGVWaXJ0dWFs VHJhY2sgKnZ0KQoreworICAgIGlmICghdnQpCisgICAgICAgIHJldHVybjsKKyAgICBhdl9mcmVl cCgmdnQtPnJlc291cmNlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGltZl9jcGxfaW5pdChGRklNRkNQ TCAqY3BsKQoreworICAgIG1lbXNldChjcGwtPmlkX3V1aWQsIDAsIHNpemVvZihjcGwtPmlkX3V1 aWQpKTsKKyAgICBjcGwtPmNvbnRlbnRfdGl0bGVfdXRmOCA9IE5VTEw7CisgICAgY3BsLT5lZGl0 X3JhdGUgPSBhdl9tYWtlX3EoMCwgMSk7CisgICAgY3BsLT5tYWluX21hcmtlcnNfdHJhY2sgPSBO VUxMOworICAgIGNwbC0+bWFpbl9pbWFnZV8yZF90cmFjayA9IE5VTEw7CisgICAgY3BsLT5tYWlu X2F1ZGlvX3RyYWNrX2NvdW50ID0gMDsKKyAgICBjcGwtPm1haW5fYXVkaW9fdHJhY2tzID0gTlVM TDsKK30KKworRkZJTUZDUEwgKmZmX2ltZl9jcGxfYWxsb2Modm9pZCkKK3sKKyAgICBGRklNRkNQ TCAqY3BsOworCisgICAgY3BsID0gYXZfbWFsbG9jKHNpemVvZihGRklNRkNQTCkpOworICAgIGlm ICghY3BsKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpbWZfY3BsX2luaXQoY3BsKTsKKyAg ICByZXR1cm4gY3BsOworfQorCit2b2lkIGZmX2ltZl9jcGxfZnJlZShGRklNRkNQTCAqY3BsKQor eworICAgIGlmICghY3BsKQorICAgICAgICByZXR1cm47CisgICAgeG1sRnJlZShjcGwtPmNvbnRl bnRfdGl0bGVfdXRmOCk7CisgICAgaW1mX21hcmtlcl92aXJ0dWFsX3RyYWNrX2ZyZWUoY3BsLT5t YWluX21hcmtlcnNfdHJhY2spOworICAgIGlmIChjcGwtPm1haW5fbWFya2Vyc190cmFjaykKKyAg ICAgICAgYXZfZnJlZXAoJmNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrKTsKKyAgICBpbWZfdHJhY2tm aWxlX3ZpcnR1YWxfdHJhY2tfZnJlZShjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2spOworICAgIGlm IChjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2spCisgICAgICAgIGF2X2ZyZWVwKCZjcGwtPm1haW5f aW1hZ2VfMmRfdHJhY2spOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjcGwtPm1haW5f YXVkaW9fdHJhY2tfY291bnQ7IGkrKykKKyAgICAgICAgaW1mX3RyYWNrZmlsZV92aXJ0dWFsX3Ry YWNrX2ZyZWUoJmNwbC0+bWFpbl9hdWRpb190cmFja3NbaV0pOworICAgIGlmIChjcGwtPm1haW5f YXVkaW9fdHJhY2tzKQorICAgICAgICBhdl9mcmVlcCgmY3BsLT5tYWluX2F1ZGlvX3RyYWNrcyk7 CisgICAgYXZfZnJlZXAoJmNwbCk7Cit9CisKK2ludCBmZl9pbWZfcGFyc2VfY3BsKEFWSU9Db250 ZXh0ICppbiwgRkZJTUZDUEwgKipjcGwpCit7CisgICAgQVZCUHJpbnQgYnVmOworICAgIHhtbERv YyAqZG9jID0gTlVMTDsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBpbnQ2NF90IGZpbGVzaXplID0g MDsKKworICAgIGZpbGVzaXplID0gYXZpb19zaXplKGluKTsKKyAgICBmaWxlc2l6ZSA9IGZpbGVz aXplID4gMCA/IGZpbGVzaXplIDogODE5MjsKKyAgICBhdl9icHJpbnRfaW5pdCgmYnVmLCBmaWxl c2l6ZSArIDEsIEFWX0JQUklOVF9TSVpFX1VOTElNSVRFRCk7CisgICAgcmV0ID0gYXZpb19yZWFk X3RvX2JwcmludChpbiwgJmJ1ZiwgVUlOVF9NQVggLSAxKTsKKyAgICBpZiAocmV0IDwgMCB8fCAh YXZpb19mZW9mKGluKSB8fCBidWYubGVuID09IDApIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19FUlJPUiwgIkNhbm5vdCByZWFkIElNRiBDUExcbiIpOworICAgICAgICBpZiAocmV0ID09 IDApIHsKKyAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIH0K KyAgICB9IGVsc2UgeworICAgICAgICBMSUJYTUxfVEVTVF9WRVJTSU9OCisgICAgICAgIGZpbGVz aXplID0gYnVmLmxlbjsKKyAgICAgICAgZG9jID0geG1sUmVhZE1lbW9yeShidWYuc3RyLCBmaWxl c2l6ZSwgTlVMTCwgTlVMTCwgMCk7CisgICAgICAgIGlmICghZG9jKSB7CisgICAgICAgICAgICBh dl9sb2coTlVMTCwKKyAgICAgICAgICAgICAgICBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAg ICAgIlhNTCBwYXJzaW5nIGZhaWxlZCB3aGVuIHJlYWRpbmcgdGhlIElNRiBDUExcbiIpOworICAg ICAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgfQorICAgICAgICBp ZiAocmV0ID0gZmZfaW1mX3BhcnNlX2NwbF9mcm9tX3htbF9kb20oZG9jLCBjcGwpKSB7CisgICAg ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IHBhcnNlIElNRiBDUExc biIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXZfbG9nKE5VTEwsCisgICAgICAg ICAgICAgICAgQVZfTE9HX0lORk8sCisgICAgICAgICAgICAgICAgIklNRiBDUEwgQ29udGVudFRp dGxlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAoKmNwbCktPmNvbnRlbnRfdGl0bGVfdXRmOCk7 CisgICAgICAgICAgICBhdl9sb2coTlVMTCwKKyAgICAgICAgICAgICAgICBBVl9MT0dfSU5GTywK KyAgICAgICAgICAgICAgICAiSU1GIENQTCBJZDogIiBGRl9JTUZfVVVJRF9GT1JNQVQgIlxuIiwK KyAgICAgICAgICAgICAgICBVSURfQVJHKCgqY3BsKS0+aWRfdXVpZCkpOworICAgICAgICB9Cisg ICAgICAgIHhtbEZyZWVEb2MoZG9jKTsKKyAgICB9CisgICAgYXZfYnByaW50X2ZpbmFsaXplKCZi dWYsIE5VTEwpOworCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L2ltZmRlYy5jIGIvbGliYXZmb3JtYXQvaW1mZGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uYzc0NWI4YmQ5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0 L2ltZmRlYy5jCkBAIC0wLDAgKzEsODkxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorICovCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSBTYW5kZmxvdyBDb25zdWx0aW5n IExMQworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogKiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCisgKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh dGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIERlbXV4ZXMgYW4gSU1GIENvbXBvc2l0aW9u CisgKgorICogUmVmZXJlbmNlcworICogT1YgMjA2Ny0wOjIwMTggLSBTTVBURSBPdmVydmlldyBE b2N1bWVudCAtIEludGVyb3BlcmFibGUgTWFzdGVyIEZvcm1hdAorICogU1QgMjA2Ny0yOjIwMjAg LSBTTVBURSBTdGFuZGFyZCAtIEludGVyb3BlcmFibGUgTWFzdGVyIEZvcm1hdCDigJQgQ29yZSBD b25zdHJhaW50cworICogU1QgMjA2Ny0zOjIwMjAgLSBTTVBURSBTdGFuZGFyZCAtIEludGVyb3Bl cmFibGUgTWFzdGVyIEZvcm1hdCDigJQgQ29tcG9zaXRpb24gUGxheWxpc3QKKyAqIFNUIDIwNjct NToyMDIwIC0gU01QVEUgU3RhbmRhcmQgLSBJbnRlcm9wZXJhYmxlIE1hc3RlciBGb3JtYXQg4oCU IEVzc2VuY2UgQ29tcG9uZW50CisgKiBTVCAyMDY3LTIwOjIwMTYgLSBTTVBURSBTdGFuZGFyZCAt IEludGVyb3BlcmFibGUgTWFzdGVyIEZvcm1hdCDigJQgQXBwbGljYXRpb24gIzIKKyAqIFNUIDIw NjctMjE6MjAyMCAtIFNNUFRFIFN0YW5kYXJkIC0gSW50ZXJvcGVyYWJsZSBNYXN0ZXIgRm9ybWF0 IOKAlCBBcHBsaWNhdGlvbiAjMiBFeHRlbmRlZAorICogU1QgMjA2Ny0xMDI6MjAxNyAtIFNNUFRF IFN0YW5kYXJkIC0gSW50ZXJvcGVyYWJsZSBNYXN0ZXIgRm9ybWF0IOKAlCBDb21tb24gSW1hZ2Ug UGl4ZWwgQ29sb3IgU2NoZW1lcworICogU1QgNDI5LTk6MjAwNyAtIFNNUFRFIFN0YW5kYXJkIC0g RC1DaW5lbWEgUGFja2FnaW5nIOKAlCBBc3NldCBNYXBwaW5nIGFuZCBGaWxlIFNlZ21lbnRhdGlv bgorICoKKyAqIEBhdXRob3IgTWFyYy1BbnRvaW5lIEFybmF1ZAorICogQGF1dGhvciBWYWxlbnRp biBOb2VsCisgKiBAYXV0aG9yIE5pY2hvbGFzIFZhbmRlcnp3ZXQKKyAqIEBmaWxlCisgKiBAaW5n cm91cCBsYXZ1X2ltZgorICovCisKKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCisjaW5jbHVk ZSAiaW1mLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZz dHJpbmcuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYnByaW50LmgiCisjaW5jbHVkZSAibGliYXZ1 dGlsL29wdC5oIgorI2luY2x1ZGUgIm14Zi5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUg PGludHR5cGVzLmg+CisjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgorCisjZGVmaW5lIE1BWF9C UFJJTlRfUkVBRF9TSVpFIChVSU5UX01BWCAtIDEpCisjZGVmaW5lIERFRkFVTFRfQVNTRVRNQVBf U0laRSA4ICogMTAyNAorI2RlZmluZSBBVlJBVElPTkFMX0ZPUk1BVCAiJWQvJWQiCisjZGVmaW5l IEFWUkFUSU9OQUxfQVJHKHJhdGlvbmFsKSByYXRpb25hbC5udW0sIHJhdGlvbmFsLmRlbgorCisv KioKKyAqIElNRiBBc3NldCBsb2NhdG9yCisgKi8KK3R5cGVkZWYgc3RydWN0IElNRkFzc2V0TG9j YXRvciB7CisgICAgRkZJTUZVVUlEIHV1aWQ7CisgICAgY2hhciAqYWJzb2x1dGVfdXJpOworfSBJ TUZBc3NldExvY2F0b3I7CisKKy8qKgorICogSU1GIEFzc2V0IGxvY2F0b3IgbWFwCisgKiBSZXN1 bHRzIGZyb20gdGhlIHBhcnNpbmcgb2Ygb25lIG9yIG1vcmUgQVNTRVRNQVAgWE1MIGZpbGVzCisg Ki8KK3R5cGVkZWYgc3RydWN0IElNRkFzc2V0TG9jYXRvck1hcCB7CisgICAgdWludDMyX3QgYXNz ZXRfY291bnQ7CisgICAgSU1GQXNzZXRMb2NhdG9yICphc3NldHM7Cit9IElNRkFzc2V0TG9jYXRv ck1hcDsKKwordHlwZWRlZiBzdHJ1Y3QgSU1GVmlydHVhbFRyYWNrUmVzb3VyY2VQbGF5YmFja0N0 eCB7CisgICAgSU1GQXNzZXRMb2NhdG9yICpsb2NhdG9yOworICAgIEZGSU1GVHJhY2tGaWxlUmVz b3VyY2UgKnJlc291cmNlOworICAgIEFWRm9ybWF0Q29udGV4dCAqY3R4OworfSBJTUZWaXJ0dWFs VHJhY2tSZXNvdXJjZVBsYXliYWNrQ3R4OworCit0eXBlZGVmIHN0cnVjdCBJTUZWaXJ0dWFsVHJh Y2tQbGF5YmFja0N0eCB7CisgICAgLy8gVHJhY2sgaW5kZXggaW4gcGxheWxpc3QKKyAgICBpbnQz Ml90IGluZGV4OworICAgIC8vIFRpbWUgY291bnRlcnMKKyAgICBBVlJhdGlvbmFsIGN1cnJlbnRf dGltZXN0YW1wOworICAgIEFWUmF0aW9uYWwgZHVyYXRpb247CisgICAgLy8gUmVzb3VyY2VzCisg ICAgdWludDMyX3QgcmVzb3VyY2VfY291bnQ7CisgICAgdW5zaWduZWQgaW50IHJlc291cmNlc19h bGxvY19zejsKKyAgICBJTUZWaXJ0dWFsVHJhY2tSZXNvdXJjZVBsYXliYWNrQ3R4ICpyZXNvdXJj ZXM7CisgICAgLy8gRGVjb2RpbmcgY3Vyc29ycworICAgIHVpbnQzMl90IGN1cnJlbnRfcmVzb3Vy Y2VfaW5kZXg7CisgICAgaW50NjRfdCBsYXN0X3B0czsKK30gSU1GVmlydHVhbFRyYWNrUGxheWJh Y2tDdHg7CisKK3R5cGVkZWYgc3RydWN0IElNRkNvbnRleHQgeworICAgIGNvbnN0IEFWQ2xhc3Mg KmNsYXNzOworICAgIGNvbnN0IGNoYXIgKmJhc2VfdXJsOworICAgIGNoYXIgKmFzc2V0X21hcF9w YXRoczsKKyAgICBBVklPSW50ZXJydXB0Q0IgKmludGVycnVwdF9jYWxsYmFjazsKKyAgICBBVkRp Y3Rpb25hcnkgKmF2aW9fb3B0czsKKyAgICBGRklNRkNQTCAqY3BsOworICAgIElNRkFzc2V0TG9j YXRvck1hcCBhc3NldF9sb2NhdG9yX21hcDsKKyAgICB1aW50MzJfdCB0cmFja19jb3VudDsKKyAg ICBJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCAqKnRyYWNrczsKK30gSU1GQ29udGV4dDsKKwor c3RhdGljIGludCBpbWZfdXJpX2lzX3VybChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgcmV0 dXJuIHN0cnN0cihzdHJpbmcsICI6Ly8iKSAhPSBOVUxMOworfQorCitzdGF0aWMgaW50IGltZl91 cmlfaXNfdW5peF9hYnNfcGF0aChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgcmV0dXJuIHN0 cmluZ1swXSA9PSAnLyc7Cit9CisKK3N0YXRpYyBpbnQgaW1mX3VyaV9pc19kb3NfYWJzX3BhdGgo Y29uc3QgY2hhciAqc3RyaW5nKQoreworICAgIC8qIEFic29sdXRlIHBhdGggY2FzZTogYEM6XHBh dGhcdG9cc29td2hlcmVgICovCisgICAgaWYgKHN0cmluZ1sxXSA9PSAnOicgJiYgc3RyaW5nWzJd ID09ICdcXCcpCisgICAgICAgIHJldHVybiAxOworCisgICAgLyogQWJzb2x1dGUgcGF0aCBjYXNl OiBgQzovcGF0aC90by9zb213aGVyZWAgKi8KKyAgICBpZiAoc3RyaW5nWzFdID09ICc6JyAmJiBz dHJpbmdbMl0gPT0gJy8nKQorICAgICAgICByZXR1cm4gMTsKKworICAgIC8qIE5ldHdvcmsgcGF0 aCBjYXNlOiBgXFxwYXRoXHRvXHNvbXdoZXJlYCAqLworICAgIGlmIChzdHJpbmdbMF0gPT0gJ1xc JyAmJiBzdHJpbmdbMV0gPT0gJ1xcJykKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4g MDsKK30KKworLyoqCisgKiBQYXJzZSBhIEFTU0VUTUFQIFhNTCBmaWxlIHRvIGV4dHJhY3QgdGhl IFVVSUQtVVJJIG1hcHBpbmcgb2YgYXNzZXRzLgorICogQHBhcmFtIHMgdGhlIGN1cnJlbnQgZm9y bWF0IGNvbnRleHQsIGlmIGFueSAoY2FuIGJlIE5VTEwpLgorICogQHBhcmFtIGRvYyB0aGUgWE1M IGRvY3VtZW50IHRvIGJlIHBhcnNlZC4KKyAqIEBwYXJhbSBhc3NldF9tYXAgcG9pbnRlciBvbiB0 aGUgSU1GQXNzZXRMb2NhdG9yTWFwIHRvIGZpbGwuCisgKiBAcGFyYW0gYmFzZV91cmwgdGhlIHVy bCBvZiB0aGUgYXNzZXQgbWFwIFhNTCBmaWxlLCBpZiBhbnkgKGNhbiBiZSBOVUxMKS4KKyAqIEBy ZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSBpbiBjYXNlIG9mIGVycm9yLCAwIG90aGVyd2lzZS4KKyAq Lworc3RhdGljIGludCBwYXJzZV9pbWZfYXNzZXRfbWFwX2Zyb21feG1sX2RvbShBVkZvcm1hdENv bnRleHQgKnMsCisgICAgeG1sRG9jUHRyIGRvYywKKyAgICBJTUZBc3NldExvY2F0b3JNYXAgKmFz c2V0X21hcCwKKyAgICBjb25zdCBjaGFyICpiYXNlX3VybCkKK3sKKyAgICB4bWxOb2RlUHRyIGFz c2V0X21hcF9lbGVtZW50ID0gTlVMTDsKKyAgICB4bWxOb2RlUHRyIG5vZGUgPSBOVUxMOworICAg IHhtbE5vZGVQdHIgYXNzZXRfZWxlbWVudCA9IE5VTEw7CisgICAgdW5zaWduZWQgbG9uZyBlbGVt X2NvdW50OworICAgIGNoYXIgKnVyaTsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBJTUZBc3NldExv Y2F0b3IgKmFzc2V0ID0gTlVMTDsKKyAgICB2b2lkICp0bXA7CisKKyAgICBhc3NldF9tYXBfZWxl bWVudCA9IHhtbERvY0dldFJvb3RFbGVtZW50KGRvYyk7CisKKyAgICBpZiAoIWFzc2V0X21hcF9l bGVtZW50KSB7CisgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcGFy c2UgYXNzZXQgbWFwIFhNTCAtIG1pc3Npbmcgcm9vdCBub2RlXG4iKTsKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgaWYgKGFzc2V0X21hcF9lbGVtZW50 LT50eXBlICE9IFhNTF9FTEVNRU5UX05PREUgfHwgYXZfc3RyY2FzZWNtcChhc3NldF9tYXBfZWxl bWVudC0+bmFtZSwgIkFzc2V0TWFwIikpIHsKKyAgICAgICAgYXZfbG9nKHMsCisgICAgICAgICAg ICBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIGFzc2V0IG1hcCBY TUwgLSB3cm9uZyByb290IG5vZGUgbmFtZVslc10gdHlwZVslZF1cbiIsCisgICAgICAgICAgICBh c3NldF9tYXBfZWxlbWVudC0+bmFtZSwKKyAgICAgICAgICAgIChpbnQpYXNzZXRfbWFwX2VsZW1l bnQtPnR5cGUpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisK KyAgICAvKiBwYXJzZSBhc3NldCBsb2NhdG9ycyAqLworICAgIGlmICghKG5vZGUgPSBmZl9pbWZf eG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUoYXNzZXRfbWFwX2VsZW1lbnQsICJBc3NldExp c3QiKSkpIHsKKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBwYXJz ZSBhc3NldCBtYXAgWE1MIC0gbWlzc2luZyBBc3NldExpc3Qgbm9kZVxuIik7CisgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKyAgICBlbGVtX2NvdW50ID0geG1sQ2hp bGRFbGVtZW50Q291bnQobm9kZSk7CisgICAgaWYgKGVsZW1fY291bnQgPiBVSU5UMzJfTUFYCisg ICAgICAgIHx8IGFzc2V0X21hcC0+YXNzZXRfY291bnQgPiBVSU5UMzJfTUFYIC0gZWxlbV9jb3Vu dCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB0bXAgPSBhdl9yZWFsbG9j X2FycmF5KGFzc2V0X21hcC0+YXNzZXRzLAorICAgICAgICBlbGVtX2NvdW50ICsgYXNzZXRfbWFw LT5hc3NldF9jb3VudCwKKyAgICAgICAgc2l6ZW9mKElNRkFzc2V0TG9jYXRvcikpOworICAgIGlm ICghdG1wKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJDYW5ub3QgYWxs b2NhdGUgSU1GIGFzc2V0IGxvY2F0b3JzXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P TUVNKTsKKyAgICB9CisgICAgYXNzZXRfbWFwLT5hc3NldHMgPSB0bXA7CisKKyAgICBhc3NldF9l bGVtZW50ID0geG1sRmlyc3RFbGVtZW50Q2hpbGQobm9kZSk7CisgICAgd2hpbGUgKGFzc2V0X2Vs ZW1lbnQpIHsKKyAgICAgICAgaWYgKGF2X3N0cmNhc2VjbXAoYXNzZXRfZWxlbWVudC0+bmFtZSwg IkFzc2V0IikgIT0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGFzc2V0ID0g Jihhc3NldF9tYXAtPmFzc2V0c1thc3NldF9tYXAtPmFzc2V0X2NvdW50XSk7CisKKyAgICAgICAg aWYgKGZmX2ltZl94bWxfcmVhZF91dWlkKGZmX2ltZl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlf bmFtZShhc3NldF9lbGVtZW50LCAiSWQiKSwgYXNzZXQtPnV1aWQpKSB7CisgICAgICAgICAgICBh dl9sb2cocywgQVZfTE9HX0VSUk9SLCAiQ291bGQgbm90IHBhcnNlIFVVSUQgZnJvbSBhc3NldCBp biBhc3NldCBtYXAuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworICAgICAgICB9CisKKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIkZvdW5kIGFz c2V0IGlkOiAiIEZGX0lNRl9VVUlEX0ZPUk1BVCAiXG4iLCBVSURfQVJHKGFzc2V0LT51dWlkKSk7 CisKKyAgICAgICAgaWYgKCEobm9kZSA9IGZmX2ltZl94bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlf bmFtZShhc3NldF9lbGVtZW50LCAiQ2h1bmtMaXN0IikpKSB7CisgICAgICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIHBhcnNlIGFzc2V0IG1hcCBYTUwgLSBtaXNzaW5n IENodW5rTGlzdCBub2RlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEobm9kZSA9IGZmX2ltZl94bWxfZ2V0X2No aWxkX2VsZW1lbnRfYnlfbmFtZShub2RlLCAiQ2h1bmsiKSkpIHsKKyAgICAgICAgICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcGFyc2UgYXNzZXQgbWFwIFhNTCAtIG1pc3Np bmcgQ2h1bmsgbm9kZVxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKKyAgICAgICAgfQorCisgICAgICAgIHVyaSA9IHhtbE5vZGVHZXRDb250ZW50KGZmX2ltZl94 bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShub2RlLCAiUGF0aCIpKTsKKyAgICAgICAgaWYg KCFpbWZfdXJpX2lzX3VybCh1cmkpICYmICFpbWZfdXJpX2lzX3VuaXhfYWJzX3BhdGgodXJpKSAm JiAhaW1mX3VyaV9pc19kb3NfYWJzX3BhdGgodXJpKSkKKyAgICAgICAgICAgIGFzc2V0LT5hYnNv bHV0ZV91cmkgPSBhdl9hcHBlbmRfcGF0aF9jb21wb25lbnQoYmFzZV91cmwsIHVyaSk7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIGFzc2V0LT5hYnNvbHV0ZV91cmkgPSBhdl9zdHJkdXAodXJp KTsKKyAgICAgICAgeG1sRnJlZSh1cmkpOworICAgICAgICBpZiAoIWFzc2V0LT5hYnNvbHV0ZV91 cmkpIHsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIH0KKwor ICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiRm91bmQgYXNzZXQgYWJzb2x1dGUgVVJJ OiAlc1xuIiwgYXNzZXQtPmFic29sdXRlX3VyaSk7CisKKyAgICAgICAgYXNzZXRfbWFwLT5hc3Nl dF9jb3VudCsrOworICAgICAgICBhc3NldF9lbGVtZW50ID0geG1sTmV4dEVsZW1lbnRTaWJsaW5n KGFzc2V0X2VsZW1lbnQpOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICog SW5pdGlhbGl6ZXMgYW4gSU1GQXNzZXRMb2NhdG9yTWFwIHN0cnVjdHVyZS4KKyAqLworc3RhdGlj IHZvaWQgaW1mX2Fzc2V0X2xvY2F0b3JfbWFwX2luaXQoSU1GQXNzZXRMb2NhdG9yTWFwICphc3Nl dF9tYXApCit7CisgICAgYXNzZXRfbWFwLT5hc3NldHMgPSBOVUxMOworICAgIGFzc2V0X21hcC0+ YXNzZXRfY291bnQgPSAwOworfQorCisvKioKKyAqIEZyZWUgYSBJTUZBc3NldExvY2F0b3JNYXAg cG9pbnRlci4KKyAqLworc3RhdGljIHZvaWQgaW1mX2Fzc2V0X2xvY2F0b3JfbWFwX2RlaW5pdChJ TUZBc3NldExvY2F0b3JNYXAgKmFzc2V0X21hcCkKK3sKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw OyBpIDwgYXNzZXRfbWFwLT5hc3NldF9jb3VudDsgKytpKQorICAgICAgICBhdl9mcmVlcCgmYXNz ZXRfbWFwLT5hc3NldHNbaV0uYWJzb2x1dGVfdXJpKTsKKyAgICBhdl9mcmVlcCgmYXNzZXRfbWFw LT5hc3NldHMpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2Fzc2V0bWFwKEFWRm9ybWF0Q29udGV4 dCAqcywgY29uc3QgY2hhciAqdXJsKQoreworICAgIElNRkNvbnRleHQgKmMgPSBzLT5wcml2X2Rh dGE7CisgICAgQVZJT0NvbnRleHQgKmluID0gTlVMTDsKKyAgICBzdHJ1Y3QgQVZCUHJpbnQgYnVm OworICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5VTEw7CisgICAgeG1sRG9jICpkb2MgPSBOVUxM OworICAgIGNvbnN0IGNoYXIgKmJhc2VfdXJsOworICAgIGNoYXIgKnRtcF9zdHIgPSBOVUxMOwor ICAgIGludCByZXQ7CisgICAgaW50NjRfdCBmaWxlc2l6ZTsKKworICAgIGF2X2xvZyhzLCBBVl9M T0dfREVCVUcsICJBc3NldCBNYXAgVVJMOiAlc1xuIiwgdXJsKTsKKworICAgIGF2X2RpY3RfY29w eSgmb3B0cywgYy0+YXZpb19vcHRzLCAwKTsKKyAgICByZXQgPSBzLT5pb19vcGVuKHMsICZpbiwg dXJsLCBBVklPX0ZMQUdfUkVBRCwgJm9wdHMpOworICAgIGF2X2RpY3RfZnJlZSgmb3B0cyk7Cisg ICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBmaWxlc2l6ZSA9IGF2 aW9fc2l6ZShpbik7CisgICAgZmlsZXNpemUgPSBmaWxlc2l6ZSA+IDAgPyBmaWxlc2l6ZSA6IERF RkFVTFRfQVNTRVRNQVBfU0laRTsKKworICAgIGF2X2JwcmludF9pbml0KCZidWYsIGZpbGVzaXpl ICsgMSwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsKKworICAgIHJldCA9IGF2aW9fcmVhZF90 b19icHJpbnQoaW4sICZidWYsIE1BWF9CUFJJTlRfUkVBRF9TSVpFKTsKKyAgICBpZiAocmV0IDwg MCB8fCAhYXZpb19mZW9mKGluKSB8fCBidWYubGVuID09IDApIHsKKyAgICAgICAgYXZfbG9nKHMs IEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byByZWFkIHRvIGFzc2V0IG1hcCAnJXMnXG4iLCB1cmwp OworICAgICAgICBpZiAocmV0ID09IDApCisgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgICAgICBnb3RvIGNsZWFuX3VwOworICAgIH0KKworICAgIExJQlhNTF9URVNU X1ZFUlNJT04KKworICAgIHRtcF9zdHIgPSBhdl9zdHJkdXAodXJsKTsKKyAgICBpZiAoIXRtcF9z dHIpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGNsZWFu X3VwOworICAgIH0KKyAgICBiYXNlX3VybCA9IGF2X2Rpcm5hbWUodG1wX3N0cik7CisKKyAgICBm aWxlc2l6ZSA9IGJ1Zi5sZW47CisgICAgZG9jID0geG1sUmVhZE1lbW9yeShidWYuc3RyLCBmaWxl c2l6ZSwgdXJsLCBOVUxMLCAwKTsKKworICAgIHJldCA9IHBhcnNlX2ltZl9hc3NldF9tYXBfZnJv bV94bWxfZG9tKHMsIGRvYywgJmMtPmFzc2V0X2xvY2F0b3JfbWFwLCBiYXNlX3VybCk7CisgICAg aWYgKCFyZXQpCisgICAgICAgIGF2X2xvZyhzLAorICAgICAgICAgICAgQVZfTE9HX0RFQlVHLAor ICAgICAgICAgICAgIkZvdW5kICVkIGFzc2V0cyBmcm9tICVzXG4iLAorICAgICAgICAgICAgYy0+ YXNzZXRfbG9jYXRvcl9tYXAuYXNzZXRfY291bnQsCisgICAgICAgICAgICB1cmwpOworCisgICAg eG1sRnJlZURvYyhkb2MpOworCitjbGVhbl91cDoKKyAgICBpZiAodG1wX3N0cikKKyAgICAgICAg YXZfZnJlZXAoJnRtcF9zdHIpOworICAgIGZmX2Zvcm1hdF9pb19jbG9zZShzLCAmaW4pOworICAg IGF2X2JwcmludF9maW5hbGl6ZSgmYnVmLCBOVUxMKTsKKyAgICByZXR1cm4gcmV0OworfQorCitz dGF0aWMgSU1GQXNzZXRMb2NhdG9yICpmaW5kX2Fzc2V0X21hcF9sb2NhdG9yKElNRkFzc2V0TG9j YXRvck1hcCAqYXNzZXRfbWFwLCBGRklNRlVVSUQgdXVpZCkKK3sKKyAgICBmb3IgKHVpbnQzMl90 IGkgPSAwOyBpIDwgYXNzZXRfbWFwLT5hc3NldF9jb3VudDsgKytpKQorICAgICAgICBpZiAobWVt Y21wKGFzc2V0X21hcC0+YXNzZXRzW2ldLnV1aWQsIHV1aWQsIDE2KSA9PSAwKQorICAgICAgICAg ICAgcmV0dXJuICYoYXNzZXRfbWFwLT5hc3NldHNbaV0pOworICAgIHJldHVybiBOVUxMOworfQor CitzdGF0aWMgaW50IG9wZW5fdHJhY2tfcmVzb3VyY2VfY29udGV4dChBVkZvcm1hdENvbnRleHQg KnMsCisgICAgSU1GVmlydHVhbFRyYWNrUmVzb3VyY2VQbGF5YmFja0N0eCAqdHJhY2tfcmVzb3Vy Y2UpCit7CisgICAgSU1GQ29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKKyAgICBpbnQgcmV0ID0g MDsKKyAgICBpbnQ2NF90IGVudHJ5X3BvaW50OworICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5V TEw7CisKKyAgICBpZiAodHJhY2tfcmVzb3VyY2UtPmN0eCkgeworICAgICAgICBhdl9sb2cocywK KyAgICAgICAgICAgIEFWX0xPR19ERUJVRywKKyAgICAgICAgICAgICJJbnB1dCBjb250ZXh0IGFs cmVhZHkgb3BlbmVkIGZvciAlcy5cbiIsCisgICAgICAgICAgICB0cmFja19yZXNvdXJjZS0+bG9j YXRvci0+YWJzb2x1dGVfdXJpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdHJh Y2tfcmVzb3VyY2UtPmN0eCA9IGF2Zm9ybWF0X2FsbG9jX2NvbnRleHQoKTsKKyAgICBpZiAoIXRy YWNrX3Jlc291cmNlLT5jdHgpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAg ICB0cmFja19yZXNvdXJjZS0+Y3R4LT5pb19vcGVuID0gcy0+aW9fb3BlbjsKKyAgICB0cmFja19y ZXNvdXJjZS0+Y3R4LT5pb19jbG9zZSA9IHMtPmlvX2Nsb3NlOworICAgIHRyYWNrX3Jlc291cmNl LT5jdHgtPmlvX2Nsb3NlMiA9IHMtPmlvX2Nsb3NlMjsKKyAgICB0cmFja19yZXNvdXJjZS0+Y3R4 LT5mbGFncyB8PSBzLT5mbGFncyAmIH5BVkZNVF9GTEFHX0NVU1RPTV9JTzsKKworICAgIGlmICgo cmV0ID0gZmZfY29weV93aGl0ZWJsYWNrbGlzdHModHJhY2tfcmVzb3VyY2UtPmN0eCwgcykpIDwg MCkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgaWYgKHJldCA9IGF2X29wdF9zZXQodHJh Y2tfcmVzb3VyY2UtPmN0eCwgImZvcm1hdF93aGl0ZWxpc3QiLCAibXhmIiwgMCkpCisgICAgICAg IGdvdG8gY2xlYW51cDsKKworICAgIGlmICgocmV0ID0gYXZfZGljdF9jb3B5KCZvcHRzLCBjLT5h dmlvX29wdHMsIDApKSA8IDApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIHJldCA9IGF2 Zm9ybWF0X29wZW5faW5wdXQoJnRyYWNrX3Jlc291cmNlLT5jdHgsCisgICAgICAgIHRyYWNrX3Jl c291cmNlLT5sb2NhdG9yLT5hYnNvbHV0ZV91cmksCisgICAgICAgIE5VTEwsCisgICAgICAgICZv cHRzKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBhdl9sb2cocywKKyAgICAgICAgICAg IEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICJDb3VsZCBub3Qgb3BlbiAlcyBpbnB1dCBjb250 ZXh0OiAlc1xuIiwKKyAgICAgICAgICAgIHRyYWNrX3Jlc291cmNlLT5sb2NhdG9yLT5hYnNvbHV0 ZV91cmksCisgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOworICAgICAgICBnb3RvIGNsZWFu dXA7CisgICAgfQorICAgIGF2X2RpY3RfZnJlZSgmb3B0cyk7CisKKyAgICAvKiBDb21wYXJlIHRo ZSBzb3VyY2UgdGltZWJhc2UgdG8gdGhlIHJlc291cmNlIGVkaXQgcmF0ZSwgY29uc2lkZXJpbmcg dGhlIGZpcnN0IHN0cmVhbSBvZiB0aGUgc291cmNlIGZpbGUgKi8KKyAgICBpZiAoYXZfY21wX3Eo dHJhY2tfcmVzb3VyY2UtPmN0eC0+c3RyZWFtc1swXS0+dGltZV9iYXNlLCBhdl9pbnZfcSh0cmFj a19yZXNvdXJjZS0+cmVzb3VyY2UtPmJhc2UuZWRpdF9yYXRlKSkpCisgICAgICAgIGF2X2xvZyhz LAorICAgICAgICAgICAgQVZfTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAiSW5jb2hlcmVudCBz b3VyY2Ugc3RyZWFtIHRpbWViYXNlICVkLyVkIHJlZ2FyZGluZyByZXNvdXJjZSBlZGl0IHJhdGU6 ICVkLyVkIiwKKyAgICAgICAgICAgIHRyYWNrX3Jlc291cmNlLT5jdHgtPnN0cmVhbXNbMF0tPnRp bWVfYmFzZS5udW0sCisgICAgICAgICAgICB0cmFja19yZXNvdXJjZS0+Y3R4LT5zdHJlYW1zWzBd LT50aW1lX2Jhc2UuZGVuLAorICAgICAgICAgICAgdHJhY2tfcmVzb3VyY2UtPnJlc291cmNlLT5i YXNlLmVkaXRfcmF0ZS5kZW4sCisgICAgICAgICAgICB0cmFja19yZXNvdXJjZS0+cmVzb3VyY2Ut PmJhc2UuZWRpdF9yYXRlLm51bSk7CisKKyAgICBlbnRyeV9wb2ludCA9IChpbnQ2NF90KXRyYWNr X3Jlc291cmNlLT5yZXNvdXJjZS0+YmFzZS5lbnRyeV9wb2ludAorICAgICAgICAqIHRyYWNrX3Jl c291cmNlLT5yZXNvdXJjZS0+YmFzZS5lZGl0X3JhdGUuZGVuCisgICAgICAgICogQVZfVElNRV9C QVNFCisgICAgICAgIC8gdHJhY2tfcmVzb3VyY2UtPnJlc291cmNlLT5iYXNlLmVkaXRfcmF0ZS5u dW07CisKKyAgICBpZiAoZW50cnlfcG9pbnQpIHsKKyAgICAgICAgYXZfbG9nKHMsCisgICAgICAg ICAgICBBVl9MT0dfREVCVUcsCisgICAgICAgICAgICAiU2VlayBhdCByZXNvdXJjZSAlcyBlbnRy eSBwb2ludDogJSIgUFJJdTMyICJcbiIsCisgICAgICAgICAgICB0cmFja19yZXNvdXJjZS0+bG9j YXRvci0+YWJzb2x1dGVfdXJpLAorICAgICAgICAgICAgdHJhY2tfcmVzb3VyY2UtPnJlc291cmNl LT5iYXNlLmVudHJ5X3BvaW50KTsKKyAgICAgICAgcmV0ID0gYXZmb3JtYXRfc2Vla19maWxlKHRy YWNrX3Jlc291cmNlLT5jdHgsIC0xLCBlbnRyeV9wb2ludCwgZW50cnlfcG9pbnQsIGVudHJ5X3Bv aW50LCAwKTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhzLAor ICAgICAgICAgICAgICAgIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAiQ291bGQgbm90 IHNlZWsgYXQgJSIgUFJJZDY0ICJvbiAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgZW50cnlf cG9pbnQsCisgICAgICAgICAgICAgICAgdHJhY2tfcmVzb3VyY2UtPmxvY2F0b3ItPmFic29sdXRl X3VyaSwKKyAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOworICAgICAgICAgICAgYXZm b3JtYXRfY2xvc2VfaW5wdXQoJnRyYWNrX3Jlc291cmNlLT5jdHgpOworICAgICAgICAgICAgcmV0 dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworCitjbGVhbnVwOgor ICAgIGF2X2RpY3RfZnJlZSgmb3B0cyk7CisgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHRyYWNr X3Jlc291cmNlLT5jdHgpOworICAgIHRyYWNrX3Jlc291cmNlLT5jdHggPSBOVUxMOworICAgIHJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl90cmFja19maWxlX3Jlc291cmNlKEFWRm9y bWF0Q29udGV4dCAqcywKKyAgICBGRklNRlRyYWNrRmlsZVJlc291cmNlICp0cmFja19maWxlX3Jl c291cmNlLAorICAgIElNRlZpcnR1YWxUcmFja1BsYXliYWNrQ3R4ICp0cmFjaykKK3sKKyAgICBJ TUZDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOworICAgIElNRkFzc2V0TG9jYXRvciAqYXNzZXRf bG9jYXRvcjsKKyAgICB2b2lkICp0bXA7CisgICAgaW50IHJldDsKKworICAgIGFzc2V0X2xvY2F0 b3IgPSBmaW5kX2Fzc2V0X21hcF9sb2NhdG9yKCZjLT5hc3NldF9sb2NhdG9yX21hcCwgdHJhY2tf ZmlsZV9yZXNvdXJjZS0+dHJhY2tfZmlsZV91dWlkKTsKKyAgICBpZiAoIWFzc2V0X2xvY2F0b3Ip IHsKKyAgICAgICAgYXZfbG9nKHMsCisgICAgICAgICAgICBBVl9MT0dfRVJST1IsCisgICAgICAg ICAgICAiQ291bGQgbm90IGZpbmQgYXNzZXQgbG9jYXRvciBmb3IgVVVJRDogIiBGRl9JTUZfVVVJ RF9GT1JNQVQgIlxuIiwKKyAgICAgICAgICAgIFVJRF9BUkcodHJhY2tfZmlsZV9yZXNvdXJjZS0+ dHJhY2tfZmlsZV91dWlkKSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgIH0KKworICAgIGF2X2xvZyhzLAorICAgICAgICBBVl9MT0dfREVCVUcsCisgICAgICAgICJG b3VuZCBsb2NhdG9yIGZvciAiIEZGX0lNRl9VVUlEX0ZPUk1BVCAiOiAlc1xuIiwKKyAgICAgICAg VUlEX0FSRyhhc3NldF9sb2NhdG9yLT51dWlkKSwKKyAgICAgICAgYXNzZXRfbG9jYXRvci0+YWJz b2x1dGVfdXJpKTsKKworICAgIGlmICh0cmFjay0+cmVzb3VyY2VfY291bnQgPiBVSU5UMzJfTUFY IC0gdHJhY2tfZmlsZV9yZXNvdXJjZS0+YmFzZS5yZXBlYXRfY291bnQKKyAgICAgICAgfHwgKHRy YWNrLT5yZXNvdXJjZV9jb3VudCArIHRyYWNrX2ZpbGVfcmVzb3VyY2UtPmJhc2UucmVwZWF0X2Nv dW50KQorICAgICAgICAgICAgPiBJTlRfTUFYIC8gc2l6ZW9mKElNRlZpcnR1YWxUcmFja1Jlc291 cmNlUGxheWJhY2tDdHgpKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIHRt cCA9IGF2X2Zhc3RfcmVhbGxvYyh0cmFjay0+cmVzb3VyY2VzLAorICAgICAgICAmdHJhY2stPnJl c291cmNlc19hbGxvY19zeiwKKyAgICAgICAgKHRyYWNrLT5yZXNvdXJjZV9jb3VudCArIHRyYWNr X2ZpbGVfcmVzb3VyY2UtPmJhc2UucmVwZWF0X2NvdW50KQorICAgICAgICAgICAgKiBzaXplb2Yo SU1GVmlydHVhbFRyYWNrUmVzb3VyY2VQbGF5YmFja0N0eCkpOworICAgIGlmICghdG1wKQorICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIHRyYWNrLT5yZXNvdXJjZXMgPSB0bXA7 CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdHJhY2tfZmlsZV9yZXNvdXJjZS0+YmFz ZS5yZXBlYXRfY291bnQ7ICsraSkgeworICAgICAgICBJTUZWaXJ0dWFsVHJhY2tSZXNvdXJjZVBs YXliYWNrQ3R4IHZ0X2N0eDsKKworICAgICAgICB2dF9jdHgubG9jYXRvciA9IGFzc2V0X2xvY2F0 b3I7CisgICAgICAgIHZ0X2N0eC5yZXNvdXJjZSA9IHRyYWNrX2ZpbGVfcmVzb3VyY2U7CisgICAg ICAgIHZ0X2N0eC5jdHggPSBOVUxMOworICAgICAgICBpZiAoKHJldCA9IG9wZW5fdHJhY2tfcmVz b3VyY2VfY29udGV4dChzLCAmdnRfY3R4KSkgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7 CisgICAgICAgIHRyYWNrLT5yZXNvdXJjZXNbdHJhY2stPnJlc291cmNlX2NvdW50KytdID0gdnRf Y3R4OworICAgICAgICB0cmFjay0+ZHVyYXRpb24gPSBhdl9hZGRfcSh0cmFjay0+ZHVyYXRpb24s CisgICAgICAgICAgICBhdl9tYWtlX3EoKGludCl0cmFja19maWxlX3Jlc291cmNlLT5iYXNlLmR1 cmF0aW9uICogdHJhY2tfZmlsZV9yZXNvdXJjZS0+YmFzZS5lZGl0X3JhdGUuZGVuLAorICAgICAg ICAgICAgICAgIHRyYWNrX2ZpbGVfcmVzb3VyY2UtPmJhc2UuZWRpdF9yYXRlLm51bSkpOworICAg IH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbWZfdmlydHVhbF90cmFja19w bGF5YmFja19jb250ZXh0X2RlaW5pdChJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCAqdHJhY2sp Cit7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHRyYWNrLT5yZXNvdXJjZV9jb3VudDsg KytpKQorICAgICAgICBhdmZvcm1hdF9jbG9zZV9pbnB1dCgmdHJhY2stPnJlc291cmNlc1tpXS5j dHgpOworCisgICAgYXZfZnJlZXAoJnRyYWNrLT5yZXNvdXJjZXMpOworfQorCitzdGF0aWMgaW50 IG9wZW5fdmlydHVhbF90cmFjayhBVkZvcm1hdENvbnRleHQgKnMsCisgICAgRkZJTUZUcmFja0Zp bGVWaXJ0dWFsVHJhY2sgKnZpcnR1YWxfdHJhY2ssCisgICAgaW50MzJfdCB0cmFja19pbmRleCkK K3sKKyAgICBJTUZDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOworICAgIElNRlZpcnR1YWxUcmFj a1BsYXliYWNrQ3R4ICp0cmFjayA9IE5VTEw7CisgICAgdm9pZCAqdG1wOworICAgIGludCByZXQg PSAwOworCisgICAgaWYgKCEodHJhY2sgPSBhdl9tYWxsb2N6KHNpemVvZihJTUZWaXJ0dWFsVHJh Y2tQbGF5YmFja0N0eCkpKSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB0 cmFjay0+aW5kZXggPSB0cmFja19pbmRleDsKKyAgICB0cmFjay0+ZHVyYXRpb24gPSBhdl9tYWtl X3EoMCwgMSk7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdmlydHVhbF90cmFjay0+ cmVzb3VyY2VfY291bnQ7IGkrKykgeworICAgICAgICBhdl9sb2cocywKKyAgICAgICAgICAgIEFW X0xPR19ERUJVRywKKyAgICAgICAgICAgICJPcGVuIHN0cmVhbSBmcm9tIGZpbGUgIiBGRl9JTUZf VVVJRF9GT1JNQVQgIiwgc3RyZWFtICVkXG4iLAorICAgICAgICAgICAgVUlEX0FSRyh2aXJ0dWFs X3RyYWNrLT5yZXNvdXJjZXNbaV0udHJhY2tfZmlsZV91dWlkKSwKKyAgICAgICAgICAgIGkpOwor ICAgICAgICBpZiAoKHJldCA9IG9wZW5fdHJhY2tfZmlsZV9yZXNvdXJjZShzLCAmdmlydHVhbF90 cmFjay0+cmVzb3VyY2VzW2ldLCB0cmFjaykpICE9IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhz LAorICAgICAgICAgICAgICAgIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAiQ291bGQg bm90IG9wZW4gaW1hZ2UgdHJhY2sgcmVzb3VyY2UgIiBGRl9JTUZfVVVJRF9GT1JNQVQgIlxuIiwK KyAgICAgICAgICAgICAgICBVSURfQVJHKHZpcnR1YWxfdHJhY2stPnJlc291cmNlc1tpXS50cmFj a19maWxlX3V1aWQpKTsKKyAgICAgICAgICAgIGdvdG8gY2xlYW5fdXA7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICB0cmFjay0+Y3VycmVudF90aW1lc3RhbXAgPSBhdl9tYWtlX3EoMCwgdHJhY2st PmR1cmF0aW9uLmRlbik7CisKKyAgICBpZiAoYy0+dHJhY2tfY291bnQgPT0gVUlOVDMyX01BWCkg eworICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gY2xlYW5fdXA7 CisgICAgfQorICAgIHRtcCA9IGF2X3JlYWxsb2NfYXJyYXkoYy0+dHJhY2tzLCBjLT50cmFja19j b3VudCArIDEsIHNpemVvZihJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCAqKSk7CisgICAgaWYg KCF0bXApIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGNs ZWFuX3VwOworICAgIH0KKyAgICBjLT50cmFja3MgPSB0bXA7CisgICAgYy0+dHJhY2tzW2MtPnRy YWNrX2NvdW50KytdID0gdHJhY2s7CisKKyAgICByZXR1cm4gMDsKKworY2xlYW5fdXA6CisgICAg aW1mX3ZpcnR1YWxfdHJhY2tfcGxheWJhY2tfY29udGV4dF9kZWluaXQodHJhY2spOworICAgIGF2 X2ZyZWUodHJhY2spOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2NvbnRl eHRfc3RyZWFtc19mcm9tX3RyYWNrcyhBVkZvcm1hdENvbnRleHQgKnMpCit7CisgICAgSU1GQ29u dGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGZvciAodWlu dDMyX3QgaSA9IDA7IGkgPCBjLT50cmFja19jb3VudDsgKytpKSB7CisgICAgICAgIEFWU3RyZWFt ICphc3NldF9zdHJlYW07CisgICAgICAgIEFWU3RyZWFtICpmaXJzdF9yZXNvdXJjZV9zdHJlYW07 CisKKyAgICAgICAgLyogT3BlbiB0aGUgZmlyc3QgcmVzb3VyY2Ugb2YgdGhlIHRyYWNrIHRvIGdl dCBzdHJlYW0gaW5mb3JtYXRpb24gKi8KKyAgICAgICAgZmlyc3RfcmVzb3VyY2Vfc3RyZWFtID0g Yy0+dHJhY2tzW2ldLT5yZXNvdXJjZXNbMF0uY3R4LT5zdHJlYW1zWzBdOworICAgICAgICBhdl9s b2cocywgQVZfTE9HX0RFQlVHLCAiT3BlbiB0aGUgZmlyc3QgcmVzb3VyY2Ugb2YgdHJhY2sgJWRc biIsIGMtPnRyYWNrc1tpXS0+aW5kZXgpOworCisgICAgICAgIC8qIENvcHkgc3RyZWFtIGluZm9y bWF0aW9uICovCisgICAgICAgIGFzc2V0X3N0cmVhbSA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywg TlVMTCk7CisgICAgICAgIGlmICghYXNzZXRfc3RyZWFtKSB7CisgICAgICAgICAgICByZXQgPSBB VkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiQ291 bGQgbm90IGNyZWF0ZSBzdHJlYW1cbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgYXNzZXRfc3RyZWFtLT5pZCA9IGk7CisgICAgICAgIHJldCA9IGF2Y29kZWNfcGFy YW1ldGVyc19jb3B5KGFzc2V0X3N0cmVhbS0+Y29kZWNwYXIsIGZpcnN0X3Jlc291cmNlX3N0cmVh bS0+Y29kZWNwYXIpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgYXZfbG9n KHMsIEFWX0xPR19FUlJPUiwgIkNvdWxkIG5vdCBjb3B5IHN0cmVhbSBwYXJhbWV0ZXJzXG4iKTsK KyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgYXZwcml2X3NldF9w dHNfaW5mbyhhc3NldF9zdHJlYW0sCisgICAgICAgICAgICBmaXJzdF9yZXNvdXJjZV9zdHJlYW0t PnB0c193cmFwX2JpdHMsCisgICAgICAgICAgICBmaXJzdF9yZXNvdXJjZV9zdHJlYW0tPnRpbWVf YmFzZS5udW0sCisgICAgICAgICAgICBmaXJzdF9yZXNvdXJjZV9zdHJlYW0tPnRpbWVfYmFzZS5k ZW4pOworICAgICAgICBhc3NldF9zdHJlYW0tPmR1cmF0aW9uID0gKGludDY0X3QpYXZfcTJkKGF2 X211bF9xKGMtPnRyYWNrc1tpXS0+ZHVyYXRpb24sCisgICAgICAgICAgICBhdl9pbnZfcShhc3Nl dF9zdHJlYW0tPnRpbWVfYmFzZSkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBvcGVuX2NwbF90cmFja3MoQVZGb3JtYXRDb250ZXh0ICpzKQoreworICAgIElNRkNv bnRleHQgKmMgPSBzLT5wcml2X2RhdGE7CisgICAgaW50MzJfdCB0cmFja19pbmRleCA9IDA7Cisg ICAgaW50IHJldDsKKworICAgIGlmIChjLT5jcGwtPm1haW5faW1hZ2VfMmRfdHJhY2spCisgICAg ICAgIGlmICgocmV0ID0gb3Blbl92aXJ0dWFsX3RyYWNrKHMsIGMtPmNwbC0+bWFpbl9pbWFnZV8y ZF90cmFjaywgdHJhY2tfaW5kZXgrKykpICE9IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhzLAor ICAgICAgICAgICAgICAgIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAiQ291bGQgbm90 IG9wZW4gaW1hZ2UgdHJhY2sgIiBGRl9JTUZfVVVJRF9GT1JNQVQgIlxuIiwKKyAgICAgICAgICAg ICAgICBVSURfQVJHKGMtPmNwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+YmFzZS5pZF91dWlkKSk7 CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICBmb3IgKHVpbnQzMl90 IGkgPSAwOyBpIDwgYy0+Y3BsLT5tYWluX2F1ZGlvX3RyYWNrX2NvdW50OyArK2kpCisgICAgICAg IGlmICgocmV0ID0gb3Blbl92aXJ0dWFsX3RyYWNrKHMsICZjLT5jcGwtPm1haW5fYXVkaW9fdHJh Y2tzW2ldLCB0cmFja19pbmRleCsrKSkgIT0gMCkgeworICAgICAgICAgICAgYXZfbG9nKHMsCisg ICAgICAgICAgICAgICAgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICJDb3VsZCBub3Qg b3BlbiBhdWRpbyB0cmFjayAiIEZGX0lNRl9VVUlEX0ZPUk1BVCAiXG4iLAorICAgICAgICAgICAg ICAgIFVJRF9BUkcoYy0+Y3BsLT5tYWluX2F1ZGlvX3RyYWNrc1tpXS5iYXNlLmlkX3V1aWQpKTsK KyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKworICAgIHJldHVybiBzZXRfY29u dGV4dF9zdHJlYW1zX2Zyb21fdHJhY2tzKHMpOworfQorCitzdGF0aWMgaW50IGltZl9yZWFkX2hl YWRlcihBVkZvcm1hdENvbnRleHQgKnMpCit7CisgICAgSU1GQ29udGV4dCAqYyA9IHMtPnByaXZf ZGF0YTsKKyAgICBjaGFyICphc3NldF9tYXBfcGF0aDsKKyAgICBjaGFyICp0bXBfc3RyOworICAg IGludCByZXQgPSAwOworCisgICAgYy0+aW50ZXJydXB0X2NhbGxiYWNrID0gJnMtPmludGVycnVw dF9jYWxsYmFjazsKKyAgICB0bXBfc3RyID0gYXZfc3RyZHVwKHMtPnVybCk7CisgICAgaWYgKCF0 bXBfc3RyKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgYy0+YmFzZV91 cmwgPSBhdl9kaXJuYW1lKHRtcF9zdHIpOworICAgIGlmICgocmV0ID0gZmZpb19jb3B5X3VybF9v cHRpb25zKHMtPnBiLCAmYy0+YXZpb19vcHRzKSkgPCAwKQorICAgICAgICByZXR1cm4gcmV0Owor CisgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgInN0YXJ0IHBhcnNpbmcgSU1GIENQTDogJXNc biIsIHMtPnVybCk7CisKKyAgICBpZiAoKHJldCA9IGZmX2ltZl9wYXJzZV9jcGwocy0+cGIsICZj LT5jcGwpKSA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBhdl9sb2cocywKKyAgICAg ICAgQVZfTE9HX0RFQlVHLAorICAgICAgICAicGFyc2VkIElNRiBDUEw6ICIgRkZfSU1GX1VVSURf Rk9STUFUICJcbiIsCisgICAgICAgIFVJRF9BUkcoYy0+Y3BsLT5pZF91dWlkKSk7CisKKyAgICBp ZiAoIWMtPmFzc2V0X21hcF9wYXRocykgeworICAgICAgICBjLT5hc3NldF9tYXBfcGF0aHMgPSBh dl9hcHBlbmRfcGF0aF9jb21wb25lbnQoYy0+YmFzZV91cmwsICJBU1NFVE1BUC54bWwiKTsKKyAg ICAgICAgaWYgKCFjLT5hc3NldF9tYXBfcGF0aHMpIHsKKyAgICAgICAgICAgIHJldCA9IEFWRVJS T1IoRU5PTUVNKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAg YXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIk5vIGFzc2V0IG1hcHMgcHJvdmlkZWQsIHVzaW5nIHRo ZSBkZWZhdWx0IEFTU0VUTUFQLnhtbFxuIik7CisgICAgfQorCisgICAgLyogUGFyc2UgZWFjaCBh c3NldCBtYXAgWE1MIGZpbGUgKi8KKyAgICBpbWZfYXNzZXRfbG9jYXRvcl9tYXBfaW5pdCgmYy0+ YXNzZXRfbG9jYXRvcl9tYXApOworICAgIGFzc2V0X21hcF9wYXRoID0gYXZfc3RydG9rKGMtPmFz c2V0X21hcF9wYXRocywgIiwiLCAmdG1wX3N0cik7CisgICAgd2hpbGUgKGFzc2V0X21hcF9wYXRo ICE9IE5VTEwpIHsKKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgInN0YXJ0IHBhcnNp bmcgSU1GIEFzc2V0IE1hcDogJXNcbiIsIGFzc2V0X21hcF9wYXRoKTsKKworICAgICAgICBpZiAo cmV0ID0gcGFyc2VfYXNzZXRtYXAocywgYXNzZXRfbWFwX3BhdGgpKQorICAgICAgICAgICAgcmV0 dXJuIHJldDsKKworICAgICAgICBhc3NldF9tYXBfcGF0aCA9IGF2X3N0cnRvayhOVUxMLCAiLCIs ICZ0bXBfc3RyKTsKKyAgICB9CisKKyAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAicGFyc2Vk IElNRiBBc3NldCBNYXBzXG4iKTsKKworICAgIGlmIChyZXQgPSBvcGVuX2NwbF90cmFja3Mocykp CisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAicGFy c2VkIElNRiBwYWNrYWdlXG4iKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgSU1GVmly dHVhbFRyYWNrUGxheWJhY2tDdHggKmdldF9uZXh0X3RyYWNrX3dpdGhfbWluaW11bV90aW1lc3Rh bXAoQVZGb3JtYXRDb250ZXh0ICpzKQoreworICAgIElNRkNvbnRleHQgKmMgPSBzLT5wcml2X2Rh dGE7CisgICAgSU1GVmlydHVhbFRyYWNrUGxheWJhY2tDdHggKnRyYWNrOworCisgICAgQVZSYXRp b25hbCBtaW5pbXVtX3RpbWVzdGFtcCA9IGF2X21ha2VfcShJTlQzMl9NQVgsIDEpOworICAgIGZv ciAodWludDMyX3QgaSA9IGMtPnRyYWNrX2NvdW50OyBpID4gMDsgaS0tKSB7CisgICAgICAgIGF2 X2xvZygKKyAgICAgICAgICAgIHMsCisgICAgICAgICAgICBBVl9MT0dfREVCVUcsCisgICAgICAg ICAgICAiQ29tcGFyZSB0cmFjayAlZCB0aW1lc3RhbXAgIiBBVlJBVElPTkFMX0ZPUk1BVAorICAg ICAgICAgICAgIiB0byBtaW5pbXVtICIgQVZSQVRJT05BTF9GT1JNQVQKKyAgICAgICAgICAgICIg KG92ZXIgZHVyYXRpb246ICIgQVZSQVRJT05BTF9GT1JNQVQKKyAgICAgICAgICAgICIpXG4iLAor ICAgICAgICAgICAgaSwKKyAgICAgICAgICAgIEFWUkFUSU9OQUxfQVJHKGMtPnRyYWNrc1tpIC0g MV0tPmN1cnJlbnRfdGltZXN0YW1wKSwKKyAgICAgICAgICAgIEFWUkFUSU9OQUxfQVJHKG1pbmlt dW1fdGltZXN0YW1wKSwKKyAgICAgICAgICAgIEFWUkFUSU9OQUxfQVJHKGMtPnRyYWNrc1tpIC0g MV0tPmR1cmF0aW9uKSk7CisKKyAgICAgICAgaWYgKGF2X2NtcF9xKGMtPnRyYWNrc1tpIC0gMV0t PmN1cnJlbnRfdGltZXN0YW1wLCBtaW5pbXVtX3RpbWVzdGFtcCkgPD0gMCkgeworICAgICAgICAg ICAgdHJhY2sgPSBjLT50cmFja3NbaSAtIDFdOworICAgICAgICAgICAgbWluaW11bV90aW1lc3Rh bXAgPSB0cmFjay0+Y3VycmVudF90aW1lc3RhbXA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBh dl9sb2cocywKKyAgICAgICAgQVZfTE9HX0RFQlVHLAorICAgICAgICAiRm91bmQgbmV4dCB0cmFj ayB0byByZWFkOiAlZCAodGltZXN0YW1wOiAlbGYgLyAlbGYpXG4iLAorICAgICAgICB0cmFjay0+ aW5kZXgsCisgICAgICAgIGF2X3EyZCh0cmFjay0+Y3VycmVudF90aW1lc3RhbXApLAorICAgICAg ICBhdl9xMmQobWluaW11bV90aW1lc3RhbXApKTsKKyAgICByZXR1cm4gdHJhY2s7Cit9CisKK3N0 YXRpYyBJTUZWaXJ0dWFsVHJhY2tSZXNvdXJjZVBsYXliYWNrQ3R4ICpnZXRfcmVzb3VyY2VfY29u dGV4dF9mb3JfdGltZXN0YW1wKEFWRm9ybWF0Q29udGV4dCAqcywKKyAgICBJTUZWaXJ0dWFsVHJh Y2tQbGF5YmFja0N0eCAqdHJhY2spCit7CisgICAgQVZSYXRpb25hbCBlZGl0X3VuaXRfZHVyYXRp b24gPSBhdl9pbnZfcSh0cmFjay0+cmVzb3VyY2VzWzBdLnJlc291cmNlLT5iYXNlLmVkaXRfcmF0 ZSk7CisgICAgQVZSYXRpb25hbCBjdW11bGF0ZWRfZHVyYXRpb24gPSBhdl9tYWtlX3EoMCwgZWRp dF91bml0X2R1cmF0aW9uLmRlbik7CisKKyAgICBhdl9sb2cocywKKyAgICAgICAgQVZfTE9HX0RF QlVHLAorICAgICAgICAiTG9va2luZyBmb3IgdHJhY2sgJWQgcmVzb3VyY2UgZm9yIHRpbWVzdGFt cCA9ICVsZiAvICVsZlxuIiwKKyAgICAgICAgdHJhY2stPmluZGV4LAorICAgICAgICBhdl9xMmQo dHJhY2stPmN1cnJlbnRfdGltZXN0YW1wKSwKKyAgICAgICAgYXZfcTJkKHRyYWNrLT5kdXJhdGlv bikpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB0cmFjay0+cmVzb3VyY2VfY291bnQ7 ICsraSkgeworICAgICAgICBjdW11bGF0ZWRfZHVyYXRpb24gPSBhdl9hZGRfcShjdW11bGF0ZWRf ZHVyYXRpb24sCisgICAgICAgICAgICBhdl9tYWtlX3EoKGludCl0cmFjay0+cmVzb3VyY2VzW2ld LnJlc291cmNlLT5iYXNlLmR1cmF0aW9uICogZWRpdF91bml0X2R1cmF0aW9uLm51bSwKKyAgICAg ICAgICAgICAgICBlZGl0X3VuaXRfZHVyYXRpb24uZGVuKSk7CisKKyAgICAgICAgaWYgKGF2X2Nt cF9xKGF2X2FkZF9xKHRyYWNrLT5jdXJyZW50X3RpbWVzdGFtcCwgZWRpdF91bml0X2R1cmF0aW9u KSwgY3VtdWxhdGVkX2R1cmF0aW9uKSA8PSAwKSB7CisgICAgICAgICAgICBhdl9sb2cocywKKyAg ICAgICAgICAgICAgICBBVl9MT0dfREVCVUcsCisgICAgICAgICAgICAgICAgIkZvdW5kIHJlc291 cmNlICVkIGluIHRyYWNrICVkIHRvIHJlYWQgZm9yIHRpbWVzdGFtcCAlbGYgIgorICAgICAgICAg ICAgICAgICIob24gY3VtdWxhdGVkPSVsZik6IGVudHJ5PSUiIFBSSXUzMgorICAgICAgICAgICAg ICAgICIsIGR1cmF0aW9uPSUiIFBSSXUzMgorICAgICAgICAgICAgICAgICIsIGVkaXRyYXRlPSIg QVZSQVRJT05BTF9GT1JNQVQKKyAgICAgICAgICAgICAgICAiIHwgZWRpdF91bml0X2R1cmF0aW9u PSVsZlxuIiwKKyAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgIHRyYWNrLT5pbmRl eCwKKyAgICAgICAgICAgICAgICBhdl9xMmQodHJhY2stPmN1cnJlbnRfdGltZXN0YW1wKSwKKyAg ICAgICAgICAgICAgICBhdl9xMmQoY3VtdWxhdGVkX2R1cmF0aW9uKSwKKyAgICAgICAgICAgICAg ICB0cmFjay0+cmVzb3VyY2VzW2ldLnJlc291cmNlLT5iYXNlLmVudHJ5X3BvaW50LAorICAgICAg ICAgICAgICAgIHRyYWNrLT5yZXNvdXJjZXNbaV0ucmVzb3VyY2UtPmJhc2UuZHVyYXRpb24sCisg ICAgICAgICAgICAgICAgQVZSQVRJT05BTF9BUkcodHJhY2stPnJlc291cmNlc1tpXS5yZXNvdXJj ZS0+YmFzZS5lZGl0X3JhdGUpLAorICAgICAgICAgICAgICAgIGF2X3EyZChlZGl0X3VuaXRfZHVy YXRpb24pKTsKKworICAgICAgICAgICAgaWYgKHRyYWNrLT5jdXJyZW50X3Jlc291cmNlX2luZGV4 ICE9IGkpIHsKKyAgICAgICAgICAgICAgICBhdl9sb2cocywKKyAgICAgICAgICAgICAgICAgICAg QVZfTE9HX0RFQlVHLAorICAgICAgICAgICAgICAgICAgICAiU3dpdGNoIHJlc291cmNlIG9uIHRy YWNrICVkOiByZS1vcGVuIGNvbnRleHRcbiIsCisgICAgICAgICAgICAgICAgICAgIHRyYWNrLT5p bmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG9wZW5fdHJhY2tfcmVzb3VyY2VfY29udGV4dChz LCAmKHRyYWNrLT5yZXNvdXJjZXNbaV0pKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1 cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBhdmZvcm1hdF9jbG9zZV9pbnB1dCgmKHRyYWNrLT5y ZXNvdXJjZXNbdHJhY2stPmN1cnJlbnRfcmVzb3VyY2VfaW5kZXhdLmN0eCkpOworICAgICAgICAg ICAgICAgIHRyYWNrLT5jdXJyZW50X3Jlc291cmNlX2luZGV4ID0gaTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHJldHVybiAmKHRyYWNrLT5yZXNvdXJjZXNbdHJhY2stPmN1cnJlbnRfcmVz b3VyY2VfaW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKwor c3RhdGljIGludCBpbWZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAq cGt0KQoreworICAgIElNRkNvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7CisgICAgSU1GVmlydHVh bFRyYWNrUmVzb3VyY2VQbGF5YmFja0N0eCAqcmVzb3VyY2VfdG9fcmVhZCA9IE5VTEw7CisgICAg QVZSYXRpb25hbCBlZGl0X3VuaXRfZHVyYXRpb247CisgICAgaW50IHJldCA9IDA7CisgICAgSU1G VmlydHVhbFRyYWNrUGxheWJhY2tDdHggKnRyYWNrOworICAgIEZGU3RyZWFtICp0cmFja19zdHJl YW07CisKKyAgICB0cmFjayA9IGdldF9uZXh0X3RyYWNrX3dpdGhfbWluaW11bV90aW1lc3RhbXAo cyk7CisKKyAgICBpZiAoYXZfY21wX3EodHJhY2stPmN1cnJlbnRfdGltZXN0YW1wLCB0cmFjay0+ ZHVyYXRpb24pID09IDApCisgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKKworICAgIHJlc291 cmNlX3RvX3JlYWQgPSBnZXRfcmVzb3VyY2VfY29udGV4dF9mb3JfdGltZXN0YW1wKHMsIHRyYWNr KTsKKworICAgIGlmICghcmVzb3VyY2VfdG9fcmVhZCkgeworICAgICAgICBlZGl0X3VuaXRfZHVy YXRpb24gPSBhdl9pbnZfcSh0cmFjay0+cmVzb3VyY2VzW3RyYWNrLT5jdXJyZW50X3Jlc291cmNl X2luZGV4XS5yZXNvdXJjZS0+YmFzZS5lZGl0X3JhdGUpOworICAgICAgICBpZiAoYXZfY21wX3Eo YXZfYWRkX3EodHJhY2stPmN1cnJlbnRfdGltZXN0YW1wLCBlZGl0X3VuaXRfZHVyYXRpb24pLAor ICAgICAgICAgICAgICAgIHRyYWNrLT5kdXJhdGlvbikKKyAgICAgICAgICAgID4gMCkKKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKKworICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VS Uk9SLCAiQ291bGQgbm90IGZpbmQgSU1GIHRyYWNrIHJlc291cmNlIHRvIHJlYWRcbiIpOworICAg ICAgICByZXR1cm4gQVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EOworICAgIH0KKworICAgIHdoaWxl ICghZmZfY2hlY2tfaW50ZXJydXB0KGMtPmludGVycnVwdF9jYWxsYmFjaykgJiYgIXJldCkgewor ICAgICAgICByZXQgPSBhdl9yZWFkX2ZyYW1lKHJlc291cmNlX3RvX3JlYWQtPmN0eCwgcGt0KTsK KyAgICAgICAgYXZfbG9nKHMsCisgICAgICAgICAgICBBVl9MT0dfREVCVUcsCisgICAgICAgICAg ICAiR290IHBhY2tldDogcHRzPSUiIFBSSWQ2NAorICAgICAgICAgICAgIiwgZHRzPSUiIFBSSWQ2 NAorICAgICAgICAgICAgIiwgZHVyYXRpb249JSIgUFJJZDY0CisgICAgICAgICAgICAiLCBzdHJl YW1faW5kZXg9JWQsIHBvcz0lIiBQUklkNjQKKyAgICAgICAgICAgICJcbiIsCisgICAgICAgICAg ICBwa3QtPnB0cywKKyAgICAgICAgICAgIHBrdC0+ZHRzLAorICAgICAgICAgICAgcGt0LT5kdXJh dGlvbiwKKyAgICAgICAgICAgIHBrdC0+c3RyZWFtX2luZGV4LAorICAgICAgICAgICAgcGt0LT5w b3MpOworICAgICAgICB0cmFja19zdHJlYW0gPSBmZnN0cmVhbShzLT5zdHJlYW1zW3RyYWNrLT5p bmRleF0pOworICAgICAgICBpZiAocmV0ID49IDApIHsKKyAgICAgICAgICAgIC8qIFVwZGF0ZSBw YWNrZXQgaW5mbyBmcm9tIHRyYWNrICovCisgICAgICAgICAgICBpZiAocGt0LT5kdHMgPCB0cmFj a19zdHJlYW0tPmN1cl9kdHMgJiYgdHJhY2stPmxhc3RfcHRzID4gMCkKKyAgICAgICAgICAgICAg ICBwa3QtPmR0cyA9IHRyYWNrX3N0cmVhbS0+Y3VyX2R0czsKKworICAgICAgICAgICAgcGt0LT5w dHMgPSB0cmFjay0+bGFzdF9wdHM7CisgICAgICAgICAgICBwa3QtPmR0cyA9IHBrdC0+ZHRzCisg ICAgICAgICAgICAgICAgLSAoaW50NjRfdCl0cmFjay0+cmVzb3VyY2VzW3RyYWNrLT5jdXJyZW50 X3Jlc291cmNlX2luZGV4XS5yZXNvdXJjZS0+YmFzZS5lbnRyeV9wb2ludDsKKyAgICAgICAgICAg IHBrdC0+c3RyZWFtX2luZGV4ID0gdHJhY2stPmluZGV4OworCisgICAgICAgICAgICAvKiBVcGRh dGUgdHJhY2sgY3Vyc29ycyAqLworICAgICAgICAgICAgdHJhY2stPmN1cnJlbnRfdGltZXN0YW1w ID0gYXZfYWRkX3EodHJhY2stPmN1cnJlbnRfdGltZXN0YW1wLAorICAgICAgICAgICAgICAgIGF2 X21ha2VfcSgoaW50KXBrdC0+ZHVyYXRpb24gKiByZXNvdXJjZV90b19yZWFkLT5jdHgtPnN0cmVh bXNbMF0tPnRpbWVfYmFzZS5udW0sCisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX3RvX3Jl YWQtPmN0eC0+c3RyZWFtc1swXS0+dGltZV9iYXNlLmRlbikpOworICAgICAgICAgICAgdHJhY2st Pmxhc3RfcHRzICs9IHBrdC0+ZHVyYXRpb247CisKKyAgICAgICAgICAgIHJldHVybiAwOworICAg ICAgICB9IGVsc2UgaWYgKHJldCAhPSBBVkVSUk9SX0VPRikgeworICAgICAgICAgICAgYXZfbG9n KHMsCisgICAgICAgICAgICAgICAgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICJDb3Vs ZCBub3QgZ2V0IHBhY2tldCBmcm9tIHRyYWNrICVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICB0 cmFjay0+aW5kZXgsCisgICAgICAgICAgICAgICAgYXZfZXJyMnN0cihyZXQpKTsKKyAgICAgICAg ICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gQVZFUlJPUl9F T0Y7Cit9CisKK3N0YXRpYyBpbnQgaW1mX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAg ICBJTUZDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOworCisgICAgYXZfbG9nKHMsIEFWX0xPR19E RUJVRywgIkNsb3NlIElNRiBwYWNrYWdlXG4iKTsKKyAgICBhdl9kaWN0X2ZyZWUoJmMtPmF2aW9f b3B0cyk7CisgICAgYXZfZnJlZXAoJmMtPmJhc2VfdXJsKTsKKyAgICBpbWZfYXNzZXRfbG9jYXRv cl9tYXBfZGVpbml0KCZjLT5hc3NldF9sb2NhdG9yX21hcCk7CisgICAgZmZfaW1mX2NwbF9mcmVl KGMtPmNwbCk7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYy0+dHJhY2tfY291bnQ7 ICsraSkgeworICAgICAgICBpbWZfdmlydHVhbF90cmFja19wbGF5YmFja19jb250ZXh0X2RlaW5p dChjLT50cmFja3NbaV0pOworICAgICAgICBhdl9mcmVlcCgmYy0+dHJhY2tzW2ldKTsKKyAgICB9 CisKKyAgICBhdl9mcmVlcCgmYy0+dHJhY2tzKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGltZl9wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKK3sKKyAgICBpZiAoIXN0cnN0 cihwLT5idWYsICI8Q29tcG9zaXRpb25QbGF5bGlzdCIpKQorICAgICAgICByZXR1cm4gMDsKKwor ICAgIC8qIGNoZWNrIGZvciBhIENvbnRlbnRUaXRsZSBlbGVtZW50IHdpdGhvdXQgaW5jbHVkaW5n IENvbnRlbnRUaXRsZVRleHQsCisgICAgICogd2hpY2ggaXMgdXNlZCBieSB0aGUgRC1DaW5lbWEg Q1BMLgorICAgICAqLworICAgIGlmICghc3Ryc3RyKHAtPmJ1ZiwgIkNvbnRlbnRUaXRsZT4iKSkK KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gQVZQUk9CRV9TQ09SRV9NQVg7Cit9CisK K3N0YXRpYyBjb25zdCBBVk9wdGlvbiBpbWZfb3B0aW9uc1tdID0geworICAgIHsKKyAgICAgICAg Lm5hbWUgICAgICAgID0gImFzc2V0bWFwcyIsCisgICAgICAgIC5oZWxwICAgICAgICA9ICJDb21t YS1zZXBhcmF0ZWQgcGF0aHMgdG8gQVNTRVRNQVAgZmlsZXMuIgorICAgICAgICAgICAgICAgICAg ICAgICAiSWYgbm90IHNwZWNpZmllZCwgdGhlIGBBU1NFVE1BUC54bWxgIGZpbGUgaW4gdGhlIHNh bWUgZGlyZWN0b3J5IGFzIHRoZSBDUEwgaXMgdXNlZC4iLAorICAgICAgICAub2Zmc2V0ICAgICAg PSBvZmZzZXRvZihJTUZDb250ZXh0LCBhc3NldF9tYXBfcGF0aHMpLAorICAgICAgICAudHlwZSAg ICAgICAgPSBBVl9PUFRfVFlQRV9TVFJJTkcsCisgICAgICAgIC5kZWZhdWx0X3ZhbCA9IHsuc3Ry ID0gTlVMTH0sCisgICAgICAgIC5mbGFncyAgICAgICA9IEFWX09QVF9GTEFHX0RFQ09ESU5HX1BB UkFNLAorICAgIH0sCisgICAge05VTEx9LAorfTsKKworc3RhdGljIGNvbnN0IEFWQ2xhc3MgaW1m X2NsYXNzID0geworICAgIC5jbGFzc19uYW1lID0gImltZiIsCisgICAgLml0ZW1fbmFtZSAgPSBh dl9kZWZhdWx0X2l0ZW1fbmFtZSwKKyAgICAub3B0aW9uICAgICA9IGltZl9vcHRpb25zLAorICAg IC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAorfTsKKworY29uc3QgQVZJbnB1 dEZvcm1hdCBmZl9pbWZfZGVtdXhlciA9IHsKKyAgICAubmFtZSAgICAgICAgICAgPSAiaW1mIiwK KyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiSU1GIChJbnRlcm9w ZXJhYmxlIE1hc3RlciBGb3JtYXQpIiksCisgICAgLmZsYWdzX2ludGVybmFsID0gRkZfRk1UX0lO SVRfQ0xFQU5VUCwKKyAgICAucHJpdl9jbGFzcyAgICAgPSAmaW1mX2NsYXNzLAorICAgIC5wcml2 X2RhdGFfc2l6ZSA9IHNpemVvZihJTUZDb250ZXh0KSwKKyAgICAucmVhZF9wcm9iZSAgICAgPSBp bWZfcHJvYmUsCisgICAgLnJlYWRfaGVhZGVyICAgID0gaW1mX3JlYWRfaGVhZGVyLAorICAgIC5y ZWFkX3BhY2tldCAgICA9IGltZl9yZWFkX3BhY2tldCwKKyAgICAucmVhZF9jbG9zZSAgICAgPSBp bWZfY2xvc2UsCit9OwotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBm Zm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZl bAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZl bC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==