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 AF5024313D for ; Sat, 21 May 2022 17:22:18 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 84F0568B4DC; Sat, 21 May 2022 20:21:49 +0300 (EEST) Received: from conssluserg-06.nifty.com (conssluserg-06.nifty.com [210.131.2.91]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AEB7368B47B for ; Sat, 21 May 2022 20:21:38 +0300 (EEST) Received: from osamu-pc.kimura.local (M106073025034.v4.enabler.ne.jp [106.73.25.34]) (authenticated) by conssluserg-06.nifty.com with ESMTP id 24LHLUvr028168; Sun, 22 May 2022 02:21:30 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-06.nifty.com 24LHLUvr028168 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1653153691; bh=EWYLcGzajeJOvE1Z11zWyHABZswX72XMtX1V/+TreXk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XOa1j69EUqpVT4hmdRi6Sn5XVe9jOK+OFoFDZXX5E+ypA2wmNQqEWXcKjmQNIh1O3 QL39D1c4aYBaCwr9OHwNvxlmwb3I+cHUYxRWtGYC1ks4vxSf99t6rjjqN9luFPX5F6 xVFMbEfk8SDmKiVi5nI6lvSa4CYF2pozwVRXseMIL1mAwOuNZ3g3wR1tyL1kJ9n59T Ap+j1c69ktGeDtWqQSPjY5x81y86GpKIsPkFBJtYf1sv2Ui+YP+g2xTigcBFo3//2D 63KpGpS0sUjhYwwUo3eIjlPfXEpJ2xgrm6Qw5cL8VOwqE4iq0Zi1m0hB6zFLq31vAz /suaL50MxfSUw== X-Nifty-SrcIP: [106.73.25.34] From: TADANO Tokumei To: ffmpeg-devel@ffmpeg.org Date: Sun, 22 May 2022 02:21:26 +0900 Message-Id: <20220521172128.716289-2-aimingoff@pc.nifty.jp> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220521172128.716289-1-aimingoff@pc.nifty.jp> References: <20220521172128.716289-1-aimingoff@pc.nifty.jp> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/3] lavc/libaribcaption.c: add ARIB caption decoder using libaribcaption 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: TADANO Tokumei 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: VGhpcyBwYXRjaCBhZGQgYW5vdGhlciBBUklCIGNhcHRpb24gZGVjb2RlciB1c2luZyBsaWJhcmli Y2FwdGlvbgpleHRlcm5hbCBsaWJyYXJ5OiBodHRwczovL2dpdGh1Yi5jb20veHFxL2xpYmFyaWJj YXB0aW9uCgpVbmxpa2UgbGliYXJpYmIyNCwgaXQgc3VwcG9ydHMgMyB0eXBlcyBvZiBzdWJ0aXRs ZSBvdXRwdXRzOgoqIHRleHQ6IHBsYWluIHRleHQKKiBhc3M6IEFTUyBmb3JtYXR0ZWQgdGV4dAoq IGJpdG1hcDogYml0bWFwIGltYWdlCgpEZWZhdWx0IHN1YnRpdGxlIHR5cGUgaXMgYXNzIGFzIHNh bWUgYXMgbGliYXJpYmIyNC4KU29tZSBwcmVzZW50IHBsYXllcnMgKGUuZy4sIG1wdikgZXhwZWN0 IEFTUyBmb3JtYXQgZm9yIEFSSUIgY2FwdGlvbi4KClN1YnRpdGxlIHR5cGUgY2FuIGJlIHNwZWNp ZmllZCBieSBgLXN1Yl90eXBlYCBvcHRpb24uCkZvciBleGFtcGxlLCBNUEVHLVRTIGZpbGUgd2l0 aCBBUklCIGNhcHRpb24gY2FuIGJlIGRpc3BsYXllZCBieQpmZnBsYXkgdG9vbCBsaWtlOgogIGZm cGxheSAtc3ViX3R5cGUgYml0bWFwIE1QRUcuVFMKClNpbmNlIHNvbWUgcGxheWVycyAoZS5nLiwg bXB2KSBjYW4ndCBoYW5kbGUgbXVsdGktcmVjdGFuZ2xlIEFTUwpzdWJ0aXRsZSBwcm9wZXJseSwg ZGVmYXVsdCBiZWhhdmlvciBpcyBhbGwgdGhlIHRleHRzIGFyZSBkaXNwbGF5ZWQKaW4gYSBzaW5n bGUtcmVjdGFuZ2xlIGF0IGEgdGltZS4gSXQgY2F1c2VzIHNvbWUgdGV4dHMgbWF5IG5vdCBiZQpk aXNwbGF5ZWQgYXQgZXhwZWN0ZWQgcG9zaXRpb24gYXMgZGVzY3JpYmVkIGluIEFSSUIgU1RELUIy NC4KSWYgYSBwbGF5ZXIgY2FuIGhhbmRsZSBtdWx0aS1yZWN0YW5nbGUgQVNTIHN1YnRpdGxlIGFu ZCB5b3UgcHJlZmVyCm1vcmUgc3VpdGFibGUgcG9zaXRpb25pbmcsIHNldCBgLWFzc193b3JrYXJv dW5kIGZhbHNlYCBvcHRpb24gb3IKZGVmaW5lIGBBU1NfV09SS0FST1VORD0wYCBhdCBjb21waWxh dGlvbi4KClRvIGNvbXBpbGUgd2l0aCB0aGlzIGZlYXR1cmU6CiogbGliYXJpYmNhcHRpb24gZXh0 ZXJuYWwgbGlicmFyeSBoYXMgdG8gYmUgcHJlLWluc3RhbGxlZC4KICBodHRwczovL2dpdGh1Yi5j b20veHFxL2xpYmFyaWJjYXB0aW9uCiogY29uZmlndXJlIHdpdGggYC0tZW5hYmxlLWxpYmFyaWJj YXB0aW9uYCBvcHRpb24uCgpgLS1lbmFibGUtbGliYXJpYmIyNGAgYW5kIGAtLWVuYWJsZS1saWJh cmliY2FwdGlvbmAgb3B0aW9ucyBhcmUKbm90IGV4Y2x1c2l2ZS4gSWYgYm90aCBlbmFibGVkLCBs aWJhcmliY2FwdGlvbiBwcmVjZWRlcyBhcwpvcmRlciBsaXN0ZWQgaW4gYGxpYmF2Y29kZWMvYWxs Y29kZWNzLmNgLgoKU2lnbmVkLW9mZi1ieTogVEFEQU5PIFRva3VtZWkgPGFpbWluZ29mZkBwYy5u aWZ0eS5qcD4KLS0tCiBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIGxpYmF2 Y29kZWMvTWFrZWZpbGUgICAgICAgICB8ICAgIDEgKwogbGliYXZjb2RlYy9hbGxjb2RlY3MuYyAg ICAgIHwgICAgMSArCiBsaWJhdmNvZGVjL2xpYmFyaWJjYXB0aW9uLmMgfCAxMDk3ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDExMDMgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGliYXJpYmNhcHRpb24uYwoK ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBmMTE1YjIxMDY0Li4zN2Nl MTZlOTMyIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0yMTgsNiAr MjE4LDcgQEAgRXh0ZXJuYWwgbGlicmFyeSBzdXBwb3J0OgogICAtLWVuYWJsZS1sY21zMiAgICAg ICAgICAgZW5hYmxlIElDQyBwcm9maWxlIHN1cHBvcnQgdmlhIExpdHRsZUNNUyAyIFtub10KICAg LS1lbmFibGUtbGliYW9tICAgICAgICAgIGVuYWJsZSBBVjEgdmlkZW8gZW5jb2RpbmcvZGVjb2Rp bmcgdmlhIGxpYmFvbSBbbm9dCiAgIC0tZW5hYmxlLWxpYmFyaWJiMjQgICAgICBlbmFibGUgQVJJ QiB0ZXh0IGFuZCBjYXB0aW9uIGRlY29kaW5nIHZpYSBsaWJhcmliYjI0IFtub10KKyAgLS1lbmFi bGUtbGliYXJpYmNhcHRpb24gIGVuYWJsZSBBUklCIHRleHQgYW5kIGNhcHRpb24gZGVjb2Rpbmcg dmlhIGxpYmFyaWJjYXB0aW9uIFtub10KICAgLS1lbmFibGUtbGliYXNzICAgICAgICAgIGVuYWJs ZSBsaWJhc3Mgc3VidGl0bGVzIHJlbmRlcmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5lZWRlZCBmb3Igc3VidGl0bGVzIGFuZCBhc3MgZmlsdGVyIFtub10KICAgLS1lbmFibGUtbGli Ymx1cmF5ICAgICAgIGVuYWJsZSBCbHVSYXkgcmVhZGluZyB1c2luZyBsaWJibHVyYXkgW25vXQpA QCAtMTgxNyw2ICsxODE4LDcgQEAgRVhURVJOQUxfTElCUkFSWV9MSVNUPSIKICAgICBsYWRzcGEK ICAgICBsY21zMgogICAgIGxpYmFvbQorICAgIGxpYmFyaWJjYXB0aW9uCiAgICAgbGliYXNzCiAg ICAgbGliYmx1cmF5CiAgICAgbGliYnMyYgpAQCAtMzMxOSw2ICszMzIxLDcgQEAgbGliYW9tX2F2 MV9kZWNvZGVyX2RlcHM9ImxpYmFvbSIKIGxpYmFvbV9hdjFfZW5jb2Rlcl9kZXBzPSJsaWJhb20i CiBsaWJhb21fYXYxX2VuY29kZXJfc2VsZWN0PSJleHRyYWN0X2V4dHJhZGF0YV9ic2YiCiBsaWJh cmliYjI0X2RlY29kZXJfZGVwcz0ibGliYXJpYmIyNCIKK2FyaWJjYXB0aW9uX2RlY29kZXJfZGVw cz0ibGliYXJpYmNhcHRpb24iCiBsaWJjZWx0X2RlY29kZXJfZGVwcz0ibGliY2VsdCIKIGxpYmNv ZGVjMl9kZWNvZGVyX2RlcHM9ImxpYmNvZGVjMiIKIGxpYmNvZGVjMl9lbmNvZGVyX2RlcHM9Imxp YmNvZGVjMiIKQEAgLTY1MjAsNiArNjUyMyw3IEBAIGVuYWJsZWQgbGliYW9tICAgICAgICAgICAg JiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmFvbSAiYW9tID49IDEuMC4wIiBhb20vYW9tX2NvCiBl bmFibGVkIGxpYmFyaWJiMjQgICAgICAgICYmIHsgY2hlY2tfcGtnX2NvbmZpZyBsaWJhcmliYjI0 ICJhcmliYjI0ID4gMS4wLjMiICJhcmliYjI0L2FyaWJiMjQuaCIgYXJpYl9pbnN0YW5jZV9uZXcg fHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGVuYWJsZWQgZ3BsICYmIHJlcXVp cmVfcGtnX2NvbmZpZyBsaWJhcmliYjI0IGFyaWJiMjQgImFyaWJiMjQvYXJpYmIyNC5oIiBhcmli X2luc3RhbmNlX25ldzsgfSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAi RVJST1I6IGxpYmFyaWJiMjQgcmVxdWlyZXMgdmVyc2lvbiBoaWdoZXIgdGhhbiAxLjAuMyBvciAt LWVuYWJsZS1ncGwuIjsgfQorZW5hYmxlZCBsaWJhcmliY2FwdGlvbiAgICAmJiByZXF1aXJlX3Br Z19jb25maWcgbGliYXJpYmNhcHRpb24gImxpYmFyaWJjYXB0aW9uID49IDAuMS4wIiAiYXJpYmNh cHRpb24vYXJpYmNhcHRpb24uaCIgYXJpYmNjX2NvbnRleHRfYWxsb2MKIGVuYWJsZWQgbHYyICAg ICAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGx2MiBsaWx2LTAgImxpbHYvbGlsdi5o IiBsaWx2X3dvcmxkX25ldwogZW5hYmxlZCBsaWJpZWM2MTg4MyAgICAgICAmJiByZXF1aXJlIGxp YmllYzYxODgzIGxpYmllYzYxODgzL2llYzYxODgzLmggaWVjNjE4ODNfY21wX2Nvbm5lY3QgLWxy YXcxMzk0IC1sYXZjMTM5NCAtbHJvbTEzOTQgLWxpZWM2MTg4MwogZW5hYmxlZCBsaWJhc3MgICAg ICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliYXNzICJsaWJhc3MgPj0gMC4xMS4wIiBh c3MvYXNzLmggYXNzX2xpYnJhcnlfaW5pdApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmls ZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKaW5kZXggMzg0MjVkMmYyMi4uMjYxM2ZkNzhhMSAxMDA2 NDQKLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL01ha2VmaWxlCkBA IC0xMDUwLDYgKzEwNTAsNyBAQCBPQkpTLSQoQ09ORklHX1BDTV9NVUxBV19BVF9FTkNPREVSKSAg ICAgICArPSBhdWRpb3Rvb2xib3hlbmMubwogT0JKUy0kKENPTkZJR19MSUJBT01fQVYxX0RFQ09E RVIpICAgICAgICAgKz0gbGliYW9tZGVjLm8KIE9CSlMtJChDT05GSUdfTElCQU9NX0FWMV9FTkNP REVSKSAgICAgICAgICs9IGxpYmFvbWVuYy5vCiBPQkpTLSQoQ09ORklHX0xJQkFSSUJCMjRfREVD T0RFUikgICAgICAgICArPSBsaWJhcmliYjI0Lm8gYXNzLm8KK09CSlMtJChDT05GSUdfQVJJQkNB UFRJT05fREVDT0RFUikgICAgICAgICs9IGxpYmFyaWJjYXB0aW9uLm8gYXNzLm8KIE9CSlMtJChD T05GSUdfTElCQ0VMVF9ERUNPREVSKSAgICAgICAgICAgICs9IGxpYmNlbHRfZGVjLm8KIE9CSlMt JChDT05GSUdfTElCQ09ERUMyX0RFQ09ERVIpICAgICAgICAgICs9IGxpYmNvZGVjMi5vCiBPQkpT LSQoQ09ORklHX0xJQkNPREVDMl9FTkNPREVSKSAgICAgICAgICArPSBsaWJjb2RlYzIubwpkaWZm IC0tZ2l0IGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMK aW5kZXggYzQ3MTMzYWExOC4uYWNkODNmZTc2MiAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9hbGxj b2RlY3MuYworKysgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCkBAIC03MzcsNiArNzM3LDcgQEAg ZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfcGNtX211bGF3X2F0X2RlY29kZXI7CiBleHRlcm4gY29u c3QgRkZDb2RlYyBmZl9xZG1jX2F0X2RlY29kZXI7CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9x ZG0yX2F0X2RlY29kZXI7CiBleHRlcm4gRkZDb2RlYyBmZl9saWJhb21fYXYxX2VuY29kZXI7Citl eHRlcm4gY29uc3QgRkZDb2RlYyBmZl9hcmliY2FwdGlvbl9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0 IEZGQ29kZWMgZmZfbGliYXJpYmIyNF9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZf bGliY2VsdF9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGliY29kZWMyX2VuY29k ZXI7CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2xpYmFyaWJjYXB0aW9uLmMgYi9saWJhdmNvZGVj L2xpYmFyaWJjYXB0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u MTcwNjUwM2RjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvbGliYXJpYmNhcHRpb24u YwpAQCAtMCwwICsxLDEwOTcgQEAKKy8qCisgKiBBUklCIFNURC1CMjQgY2FwdGlvbiBkZWNvZGVy IHVzaW5nIHRoZSBsaWJhcmliY2FwdGlvbiBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKGMpIDIwMjIg VEFEQU5PIFRva3VtZWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgor ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKwor I2luY2x1ZGUgImF2Y29kZWMuaCIKKyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgorI2luY2x1 ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy9hc3MuaCIKKyNpbmNsdWRlICJs aWJhdnV0aWwvYXZzdHJpbmcuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCisjaW5j bHVkZSAibGliYXZ1dGlsL3RocmVhZC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9sb2cuaCIKKyNp bmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCisKKyNpbmNsdWRlIDxhcmliY2FwdGlvbi9hcmliY2Fw dGlvbi5oPgorCisjZGVmaW5lIEFSSUJDX0JQUklOVF9TSVpFX0lOSVQgICAgICAgICA2NAorI2Rl ZmluZSBBUklCQ19CUFJJTlRfU0laRV9NQVggICAgICAgICAgKDggKiAxMDI0KQorI2RlZmluZSBB UklCQ19BTFBIQV9NQVhfTlVNICAgICAgICAgICAgNAorI2RlZmluZSBBUklCQ19BTFBIQV9ERUZB VUxUX0ZST05UICAgICAgMHhGRgorI2RlZmluZSBBUklCQ19BTFBIQV9ERUZBVUxUX0JBQ0sgICAg ICAgMHg4MAorCisjZGVmaW5lIEFSSUJDQ19DT0xPUl9SR0IoYykgICAgICAgICAgICAoKGMpICYg MHhGRkZGRkYpCisjZGVmaW5lIEFSSUJDQ19DT0xPUl9ESUZGX1JHQihjMSxjMikgICAoKChjMSkg XiAoYzIpKSAmIDB4MDBGRkZGRkYpCisjZGVmaW5lIEFSSUJDQ19DT0xPUl9ESUZGX0EoYzEsYzIp ICAgICAoKChjMSkgXiAoYzIpKSAmIDB4RkYwMDAwMDApCisKKyNkZWZpbmUgQ0xVVF9SR0JBKHIs ZyxiLGEpICgoKHVuc2lnbmVkKShhKSA8PCAyNCkgfCAoKHIpIDw8IDE2KSB8ICgoZykgPDwgOCkg fCAoYikpCisjZGVmaW5lIENMVVRfQShjKSAgICAgICAgICAoKChjKSA+PiAyNCkgJiAweEZGKQor I2RlZmluZSBDTFVUX1IoYykgICAgICAgICAgKCgoYykgPj4gMTYpICYgMHhGRikKKyNkZWZpbmUg Q0xVVF9HKGMpICAgICAgICAgICgoKGMpID4+ICA4KSAmIDB4RkYpCisjZGVmaW5lIENMVVRfQihj KSAgICAgICAgICAoIChjKSAgICAgICAgJiAweEZGKQorCisjZGVmaW5lIEFSSUJDQ19DT0xPUl9U T19DTFVUX1JHQkEoYyxhKSAoKChBUklCQ0NfQ09MT1JfQShjKSA/IEFSSUJDQ19DT0xPUl9BKGMp IDogKGEpKSA8PCAyNCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKEFSSUJDQ19DT0xPUl9SKGMpIDw8IDE2KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoQVJJQkNDX0NPTE9SX0coYykgPDwgIDgpIHwgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBUklCQ0NfQ09MT1JfQihjKSkpCisKK3R5 cGVkZWYgc3RydWN0IEFSSUJDYXB0aW9uQ29udGV4dCB7CisgICAgQVZDbGFzcyAqY2xhc3M7Cisg ICAgQVZDb2RlY0NvbnRleHQgKmF2Y3R4OworICAgIGNvbnN0IEFWUGFja2V0ICphdnBrdDsKKyAg ICBBVlN1YnRpdGxlICpzdWI7CisKKyAgICBhcmliY2NfY29udGV4dF90ICpjb250ZXh0OworICAg IGFyaWJjY19kZWNvZGVyX3QgKmRlY29kZXI7CisgICAgYXJpYmNjX3JlbmRlcmVyX3QgKnJlbmRl cmVyOworCisgICAgZW51bSBBVlN1YnRpdGxlVHlwZSBzdWJ0aXRsZV90eXBlOworICAgIGJvb2wg YXNzX3dvcmthcm91bmQ7CisgICAgY2hhciAqZm9udF9uYW1lOworICAgIGJvb2wgcmVwbGFjZV9m dWxsd2lkdGhfYXNjaWk7CisgICAgYm9vbCBmb3JjZV9zdHJva2VfdGV4dDsKKyAgICBib29sIGln bm9yZV9iYWNrZ3JvdW5kOworICAgIGJvb2wgaWdub3JlX3J1Ynk7CisgICAgYm9vbCBmYWRlb3V0 OworICAgIGZsb2F0IHN0cm9rZV93aWR0aDsKKyAgICBib29sIHJlcGxhY2VfZHJjczsKKyAgICBh cmliY2NfdGV4dHJlbmRlcmVyX3R5cGVfdCByZW5kZXJpbmdfYmFja2VuZDsKKworICAgIGludDY0 X3QgcHRzOworICAgIEFWUmF0aW9uYWwgdGltZV9iYXNlOworICAgIGludCBwbGFuZV93aWR0aDsK KyAgICBpbnQgcGxhbmVfaGVpZ2h0OworICAgIGludCBmcmFtZV93aWR0aDsKKyAgICBpbnQgZnJh bWVfaGVpZ2h0OworICAgIGludCBmb250X3NpemU7CisgICAgaW50IGNoYXJzdHlsZTsKKyAgICBp bnQgYm9yZGVyX3N0eWxlOworICAgIGludCByZWFkb3JkZXI7CisKKyAgICBhcmliY2NfY2FwdGlv bl90IGNhcHRpb247CisgICAgYXJpYmNjX3JlbmRlcl9yZXN1bHRfdCByZW5kZXJfcmVzdWx0Owor ICAgIHVpbnQzMl90ICpjbHV0OworICAgIGludCBjbHV0X2lkeDsKKyAgICBpbnQgY2x1dF9vdmVy ZmxvdzsKKyAgICB1aW50OF90IGNsdXRfYWxwaGFbQVJJQkNfQUxQSEFfTUFYX05VTV07Cit9IEFS SUJDYXB0aW9uQ29udGV4dDsKKworc3RhdGljIHZvaWQgaGV4X2R1bXBfZGVidWcodm9pZCAqY3R4 LCBjb25zdCBjaGFyICpidWYsIGludCBidWZfc2l6ZSkKK3sKKyAgICBpbnQgaTsKKworICAgIGZv ciAoaT0wOyBpIDwgYnVmX3NpemU7IGkrKykgeworICAgICAgICBmZl9kbG9nKGN0eCwgIiUwMmho eCAiLCBidWZbaV0pOworICAgICAgICBpZiAoaSAlIDE2ID09IDE1KQorICAgICAgICAgICAgZmZf ZGxvZyhjdHgsICJcbiIpOworICAgIH0KKyAgICBpZiAoaSAlIDE2KQorICAgICAgICBmZl9kbG9n KGN0eCwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2NhdF9jYWxsYmFjayhhcmliY2NfbG9n bGV2ZWxfdCBsZXZlbCwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpCit7Cisg ICAgQVJJQkNhcHRpb25Db250ZXh0ICpjdHggPSB1c2VyZGF0YTsKKyAgICBpbnQgbHZsOworCisg ICAgaWYgKGN0eC0+ZGVjb2RlciAhPSBOVUxMKSB7CisgICAgICAgIHN3aXRjaCAobGV2ZWwpIHsK KyAgICAgICAgY2FzZSBBUklCQ0NfTE9HTEVWRUxfRVJST1I6CisgICAgICAgICAgICBsdmwgPSBB Vl9MT0dfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUklCQ0NfTE9H TEVWRUxfV0FSTklORzoKKyAgICAgICAgICAgIGx2bCA9IEFWX0xPR19XQVJOSU5HOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsdmwgPSBBVl9MT0df SU5GTzsKKyAgICAgICAgfQorCisgICAgICAgIGF2X2xvZyhjdHgsIGx2bCwgIiVzXG4iLCBtZXNz YWdlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGVzdGltYXRlX3ZpZGVvX2ZyYW1lX3NpemUo QVJJQkNhcHRpb25Db250ZXh0ICpjdHgpCit7CisgICAgaWYgKGN0eC0+YXZjdHgtPndpZHRoID4g MCAmJiBjdHgtPmF2Y3R4LT5oZWlnaHQgPiAwKSB7CisgICAgICAgIGN0eC0+ZnJhbWVfd2lkdGgg PSBjdHgtPmF2Y3R4LT53aWR0aDsKKyAgICAgICAgY3R4LT5mcmFtZV9oZWlnaHQgPSBjdHgtPmF2 Y3R4LT5oZWlnaHQ7CisgICAgfSBlbHNlIGlmIChjdHgtPnBsYW5lX3dpZHRoID09IDk2MCkgewor ICAgICAgICAvKiBBUklCIFRSLUIxNCBGYXNjaWNsZSAyIFZvbHVtZSAzIFtTZWN0aW9uIDJdIDQu My4xICovCisgICAgICAgIC8qIEFSSUIgVFItQjE0IEZhc2NpY2xlIDIgVm9sdW1lIDMgW1NlY3Rp b24gMl0gQXBwZW5kaXgtNCAqLworICAgICAgICBjdHgtPmZyYW1lX3dpZHRoID0gMTQ0MDsKKyAg ICAgICAgY3R4LT5mcmFtZV9oZWlnaHQgPSAxMDgwOworICAgIH0gZWxzZSB7CisgICAgICAgIGN0 eC0+ZnJhbWVfd2lkdGggPSBjdHgtPnBsYW5lX3dpZHRoOworICAgICAgICBjdHgtPmZyYW1lX2hl aWdodCA9IGN0eC0+cGxhbmVfaGVpZ2h0OworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2x1dF9z ZXRfYWxwaGEoQVJJQkNhcHRpb25Db250ZXh0ICpjdHgsIHVpbnQ4X3QgYSkKK3sKKyAgICBpbnQg aTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBBUklCQ19BTFBIQV9NQVhfTlVNOyBpKyspIHsKKyAg ICAgICAgaWYgKGN0eC0+Y2x1dF9hbHBoYVtpXSA9PSAwKSB7CisgICAgICAgICAgICBjdHgtPmNs dXRfYWxwaGFbaV0gPSBhOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg IGlmIChjdHgtPmNsdXRfYWxwaGFbaV0gPT0gYSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9 CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgdWludDhfdCBjbHV0X2ZpbmRfbmVhcmxlc3RfYWxw aGEoQVJJQkNhcHRpb25Db250ZXh0ICpjdHgsIHVpbnQ4X3QgYSkKK3sKKyAgICBpbnQgaSwgaiwg ZDsKKworICAgIGlmIChhID09IDApCisgICAgICAgIHJldHVybiBhOworICAgIGQgPSAyNTY7Cisg ICAgaiA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IEFSSUJDX0FMUEhBX01BWF9OVU07IGkrKykg eworICAgICAgICBpZiAoY3R4LT5jbHV0X2FscGhhW2ldID09IGEpCisgICAgICAgICAgICByZXR1 cm4gYTsKKyAgICAgICAgaWYgKGN0eC0+Y2x1dF9hbHBoYVtpXSA9PSAwKQorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGlmIChhYnMoKGludClhIC0gKGludCljdHgtPmNsdXRfYWxwaGFbaV0p IDwgZCkgeworICAgICAgICAgICAgZCA9IGFicygoaW50KWEgLSAoaW50KWN0eC0+Y2x1dF9hbHBo YVtpXSk7CisgICAgICAgICAgICBqID0gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g Y3R4LT5jbHV0X2FscGhhW2pdOworfQorCitzdGF0aWMgaW50IGNsdXRfZmluZChBUklCQ2FwdGlv bkNvbnRleHQgKmN0eCwgdWludDMyX3QgcmdiYSkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAo aSA9IDA7IGkgPCBjdHgtPmNsdXRfaWR4OyBpKyspIHsKKyAgICAgICAgaWYgKGN0eC0+Y2x1dFtp XSA9PSByZ2JhKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiAtMTsK K30KKworc3RhdGljIGlubGluZSBpbnQgY2x1dF9jb2xvcl9kaXN0YW5jZSh1aW50MzJfdCByZ2Jh MSwgdWludDMyX3QgcmdiYTIpCit7CisgICAgcmV0dXJuIGFicygoaW50KUNMVVRfUihyZ2JhMSkg LSAoaW50KUNMVVRfUihyZ2JhMikpICsKKyAgICAgICAgICAgYWJzKChpbnQpQ0xVVF9HKHJnYmEx KSAtIChpbnQpQ0xVVF9HKHJnYmEyKSkgKworICAgICAgICAgICBhYnMoKGludClDTFVUX0Iocmdi YTEpIC0gKGludClDTFVUX0IocmdiYTIpKTsKK30KKworc3RhdGljIHVpbnQ4X3QgY2x1dF9waWNr X29yX3NldChBUklCQ2FwdGlvbkNvbnRleHQgKmN0eCwgaW50IHIsIGludCBnLCBpbnQgYiwgaW50 IGEpCit7CisgICAgaW50IGMsIGksIGQsIGRfbWluOworICAgIHVpbnQzMl90IHJnYmE7CisKKyAg ICBhID0gY2x1dF9maW5kX25lYXJsZXN0X2FscGhhKGN0eCwgYSk7CisgICAgaWYgKGEgPT0gMCkK KyAgICAgICAgcmV0dXJuIDA7IC8qIHRyYW5zcGFyZW50ICovCisgICAgcmdiYSA9IENMVVRfUkdC QShyLGcsYixhKTsKKworICAgIGRfbWluID0gMjU2ICogMzsKKyAgICBjID0gMDsKKyAgICBmb3Ig KGkgPSAwOyBpIDwgY3R4LT5jbHV0X2lkeDsgaSsrKSB7CisgICAgICAgIGlmIChjdHgtPmNsdXRb aV0gPT0gcmdiYSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICBpZiAoQ0xVVF9BKGN0 eC0+Y2x1dFtpXSkgIT0gYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBkID0gY2x1 dF9jb2xvcl9kaXN0YW5jZShjdHgtPmNsdXRbaV0sIHJnYmEpOworICAgICAgICBpZiAoZCA8IGRf bWluKSB7CisgICAgICAgICAgICBkX21pbiA9IGQ7CisgICAgICAgICAgICBjID0gaTsKKyAgICAg ICAgfQorICAgIH0KKyAgICBpZiAoZF9taW4gPiAzKSB7CisgICAgICAgIGlmIChjdHgtPmNsdXRf aWR4ID49IEFWUEFMRVRURV9DT1VOVCkKKyAgICAgICAgICAgIGN0eC0+Y2x1dF9vdmVyZmxvdysr OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGMgPSBjdHgtPmNsdXRfaWR4OworICAgICAg ICAgICAgY3R4LT5jbHV0W2N0eC0+Y2x1dF9pZHgrK10gPSByZ2JhOworICAgICAgICB9CisgICAg fQorICAgIHJldHVybiBjOworfQorCisvKiBpbml0aWFsaWF6ZSBDTFVUIHdpdGggZWFjaCBjaGFy YWN0ZXIgY29sb3JzICovCitzdGF0aWMgdm9pZCBjbHV0X2luaXQoQVJJQkNhcHRpb25Db250ZXh0 ICpjdHgsIGFyaWJjY19jYXB0aW9uX3JlZ2lvbl90ICpyZWdpb24pCit7CisgICAgYXJpYmNjX2Nv bG9yX3QgdGV4dF9jb2xvciwgYmFja19jb2xvciwgc3Ryb2tlX2NvbG9yOworICAgIHVpbnQzMl90 IHJnYmE7CisKKyAgICBjdHgtPmNsdXRbMF0gPSBDTFVUX1JHQkEoMCwwLDAsMCk7IC8qIHRyYW5z cGFyZW50ICovCisgICAgY3R4LT5jbHV0X2FscGhhWzBdID0gMHhGRjsKKyAgICBjdHgtPmNsdXRf aWR4ID0gMTsKKyAgICBjdHgtPmNsdXRfb3ZlcmZsb3cgPSAwOworICAgIHRleHRfY29sb3IgPSBy ZWdpb24tPmNoYXJzWzBdLnRleHRfY29sb3I7CisgICAgYmFja19jb2xvciA9IHJlZ2lvbi0+Y2hh cnNbMF0uYmFja19jb2xvcjsKKyAgICBzdHJva2VfY29sb3IgPSByZWdpb24tPmNoYXJzWzBdLnN0 cm9rZV9jb2xvcjsKKyAgICByZ2JhID0gQVJJQkNDX0NPTE9SX1RPX0NMVVRfUkdCQSh0ZXh0X2Nv bG9yLCBBUklCQ19BTFBIQV9ERUZBVUxUX0ZST05UKTsKKyAgICBjdHgtPmNsdXRbY3R4LT5jbHV0 X2lkeCsrXSA9IHJnYmE7CisgICAgY2x1dF9zZXRfYWxwaGEoY3R4LCBDTFVUX0EocmdiYSkpOwor ICAgIHJnYmEgPSBBUklCQ0NfQ09MT1JfVE9fQ0xVVF9SR0JBKGJhY2tfY29sb3IsIEFSSUJDX0FM UEhBX0RFRkFVTFRfQkFDSyk7CisgICAgY3R4LT5jbHV0W2N0eC0+Y2x1dF9pZHgrK10gPSByZ2Jh OworICAgIGNsdXRfc2V0X2FscGhhKGN0eCwgQ0xVVF9BKHJnYmEpKTsKKyAgICByZ2JhID0gQVJJ QkNDX0NPTE9SX1RPX0NMVVRfUkdCQShzdHJva2VfY29sb3IsIEFSSUJDX0FMUEhBX0RFRkFVTFRf RlJPTlQpOworICAgIGlmIChjbHV0X2ZpbmQoY3R4LCByZ2JhKSA8IDApIHsKKyAgICAgICAgY3R4 LT5jbHV0W2N0eC0+Y2x1dF9pZHgrK10gPSByZ2JhOworICAgICAgICBjbHV0X3NldF9hbHBoYShj dHgsIENMVVRfQShyZ2JhKSk7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByZWdp b24tPmNoYXJfY291bnQ7IGkrKykgeworICAgICAgICBpZiAocmVnaW9uLT5jaGFyc1tpXS50ZXh0 X2NvbG9yICE9IHRleHRfY29sb3IpIHsKKyAgICAgICAgICAgIHJnYmEgPSBBUklCQ0NfQ09MT1Jf VE9fQ0xVVF9SR0JBKHJlZ2lvbi0+Y2hhcnNbaV0udGV4dF9jb2xvciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSSUJDX0FMUEhBX0RFRkFVTFRfRlJPTlQp OworICAgICAgICAgICAgaWYgKGNsdXRfZmluZChjdHgsIHJnYmEpIDwgMCkgeworICAgICAgICAg ICAgICAgIGN0eC0+Y2x1dFtjdHgtPmNsdXRfaWR4KytdID0gcmdiYTsKKyAgICAgICAgICAgICAg ICBjbHV0X3NldF9hbHBoYShjdHgsIENMVVRfQShyZ2JhKSk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgICAgaWYgKHJlZ2lvbi0+Y2hhcnNbaV0uYmFja19jb2xvciAhPSBiYWNrX2Nv bG9yKSB7CisgICAgICAgICAgICByZ2JhID0gQVJJQkNDX0NPTE9SX1RPX0NMVVRfUkdCQShyZWdp b24tPmNoYXJzW2ldLmJhY2tfY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBUklCQ19BTFBIQV9ERUZBVUxUX0JBQ0spOworICAgICAgICAgICAgaWYg KGNsdXRfZmluZChjdHgsIHJnYmEpIDwgMCkgeworICAgICAgICAgICAgICAgIGN0eC0+Y2x1dFtj dHgtPmNsdXRfaWR4KytdID0gcmdiYTsKKyAgICAgICAgICAgICAgICBjbHV0X3NldF9hbHBoYShj dHgsIENMVVRfQShyZ2JhKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg KHJlZ2lvbi0+Y2hhcnNbaV0uc3Ryb2tlX2NvbG9yICE9IHN0cm9rZV9jb2xvcikgeworICAgICAg ICAgICAgcmdiYSA9IEFSSUJDQ19DT0xPUl9UT19DTFVUX1JHQkEocmVnaW9uLT5jaGFyc1tpXS5z dHJva2VfY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBUklCQ19BTFBIQV9ERUZBVUxUX0ZST05UKTsKKyAgICAgICAgICAgIGlmIChjbHV0X2ZpbmQo Y3R4LCByZ2JhKSA8IDApIHsKKyAgICAgICAgICAgICAgICBjdHgtPmNsdXRbY3R4LT5jbHV0X2lk eCsrXSA9IHJnYmE7CisgICAgICAgICAgICAgICAgY2x1dF9zZXRfYWxwaGEoY3R4LCBDTFVUX0Eo cmdiYSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvKioKKyAqIGFy aWJjYXB0aW9uX3RyYW5zX3tiaXRtYXB8YXNzfHRleHR9X3N1YnRpdGxlKCkKKyAqCisgKiBUcmFu c2ZlciBkZWNvZGVkIHN1YnRpdGxlIHRvIEFWU3VidGl0bGUgd2l0aCBjb3JyZXNwb25kaW5nIHN1 YnRpdGxlIHR5cGUuCisgKgorICogQHBhcmFtIGN0eCBwb2ludGVyIHRvIHRoZSBBUklCQ2FwdGlv bkNvbnRleHQKKyAqIEByZXR1cm4gPiAwIG51bWJlciBvZiByZWN0YW5nbGVzIHRvIGJlIGRpc3Bs YXllZAorICogICAgICAgICA9IDAgbm8gc3VidGl0bGUKKyAqICAgICAgICAgPCAwIGVycm9yIGNv ZGUKKyAqLworc3RhdGljIGludCBhcmliY2FwdGlvbl90cmFuc19iaXRtYXBfc3VidGl0bGUoQVJJ QkNhcHRpb25Db250ZXh0ICpjdHgpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgQVZTdWJ0aXRs ZSAqc3ViID0gY3R4LT5zdWI7CisgICAgaW50IHN0YXR1cywgcmVjdF9pZHg7CisgICAgaW50IG9s ZF93aWR0aCA9IGN0eC0+ZnJhbWVfd2lkdGg7CisgICAgaW50IG9sZF9oZWlnaHQgPSBjdHgtPmZy YW1lX2hlaWdodDsKKworICAgIGlmIChjdHgtPmNhcHRpb24ucGxhbmVfd2lkdGggPiAwICYmIGN0 eC0+Y2FwdGlvbi5wbGFuZV9oZWlnaHQgPiAwKSB7CisgICAgICAgIGN0eC0+cGxhbmVfd2lkdGgg PSBjdHgtPmNhcHRpb24ucGxhbmVfd2lkdGg7CisgICAgICAgIGN0eC0+cGxhbmVfaGVpZ2h0ID0g Y3R4LT5jYXB0aW9uLnBsYW5lX2hlaWdodDsKKyAgICB9CisgICAgZXN0aW1hdGVfdmlkZW9fZnJh bWVfc2l6ZShjdHgpOworICAgIGlmIChjdHgtPmZyYW1lX3dpZHRoICE9IG9sZF93aWR0aCB8fCBj dHgtPmZyYW1lX2hlaWdodCAhPSBvbGRfaGVpZ2h0KSB7CisgICAgICAgIGlmICghYXJpYmNjX3Jl bmRlcmVyX3NldF9mcmFtZV9zaXplKGN0eC0+cmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjdHgtPmF2Y3R4LT53aWR0aCwgY3R4LT5hdmN0eC0+aGVpZ2h0KSkgewor ICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAg ICJhcmliY2NfcmVuZGVyZXJfc2V0X2ZyYW1lX3NpemUoKSByZXR1cm5lZCB3aXRoIGVycm9yLlxu Iik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgfQorICAg IH0KKworICAgIHN0YXR1cyA9IGFyaWJjY19yZW5kZXJlcl9hcHBlbmRfY2FwdGlvbihjdHgtPnJl bmRlcmVyLCAmY3R4LT5jYXB0aW9uKTsKKyAgICBpZiAoIXN0YXR1cykgeworICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiYXJpYmNjX3JlbmRlcmVyX2Fw cGVuZF9jYXB0aW9uKCkgcmV0dXJuZWQgd2l0aCBlcnJvci5cbiIpOworICAgICAgICByZXR1cm4g QVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBhcmliY2NfcmVuZGVyZXJf cmVuZGVyKGN0eC0+cmVuZGVyZXIsIGN0eC0+cHRzLCAmY3R4LT5yZW5kZXJfcmVzdWx0KTsKKyAg ICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2UgQVJJQkNDX1JFTkRFUl9TVEFUVVNfR09UX0lN QUdFOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQVJJQkNDX1JFTkRFUl9TVEFUVVNfR09U X0lNQUdFX1VOQ0hBTkdFRDoKKyAgICAgICAgYXJpYmNjX3JlbmRlcl9yZXN1bHRfY2xlYW51cCgm Y3R4LT5yZW5kZXJfcmVzdWx0KTsKKyAgICAgICAgZmZfZGxvZyhjdHgsICJnb3QgaW1hZ2UgdW5j aGFuZ2VkXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjYXNlIEFSSUJDQ19SRU5ERVJf U1RBVFVTX05PX0lNQUdFOgorICAgICAgICBmZl9kbG9nKGN0eCwgIm5vIGltYWdlXG4iKTsKKyAg ICAgICAgcmV0dXJuIDA7CisKKyAgICBjYXNlIEFSSUJDQ19SRU5ERVJfU1RBVFVTX0VSUk9SOgor ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiYXJpYmNj X3JlbmRlcmVyX3JlbmRlcigpIHJldHVybmVkIHdpdGggZXJyb3IuXG4iKTsKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhcmliY2NfcmVu ZGVyX3Jlc3VsdF9jbGVhbnVwKCZjdHgtPnJlbmRlcl9yZXN1bHQpOworICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiYXJpYmNjX3JlbmRlcmVyX3JlbmRl cigpIHJldHVybmVkIHVua25vd24gc3RhdHVzOiAlZFxuIiwgc3RhdHVzKTsKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgaWYgKCFjdHgtPnJlbmRlcl9yZXN1 bHQuaW1hZ2VfY291bnQgfHwgY3R4LT5yZW5kZXJfcmVzdWx0LmltYWdlcyA9PSBOVUxMKSB7Cisg ICAgICAgIGFyaWJjY19yZW5kZXJfcmVzdWx0X2NsZWFudXAoJmN0eC0+cmVuZGVyX3Jlc3VsdCk7 CisgICAgICAgIGZmX2Rsb2coY3R4LCAibm8gaW1hZ2UgKCVkKVxuIiwgY3R4LT5yZW5kZXJfcmVz dWx0LmltYWdlX2NvdW50KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3ViLT5m b3JtYXQgPSAwOyAvKiBncmFwaGljICovCisgICAgc3ViLT5yZWN0cyA9IGF2X2NhbGxvYyhjdHgt PnJlbmRlcl9yZXN1bHQuaW1hZ2VfY291bnQsIHNpemVvZigqc3ViLT5yZWN0cykpOworICAgIGlm ICghc3ViLT5yZWN0cykgeworICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAg IGdvdG8gZmFpbDsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdHgtPnJlbmRlcl9y ZXN1bHQuaW1hZ2VfY291bnQ7IGkrKykgeworICAgICAgICBzdWItPnJlY3RzW2ldID0gYXZfbWFs bG9jeihzaXplb2YoKnN1Yi0+cmVjdHNbaV0pKTsKKyAgICAgICAgaWYgKCFzdWItPnJlY3RzW2ld KSB7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBnb3Rv IGZhaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHJlY3RfaWR4ID0gMDsgcmVjdF9p ZHggPCBjdHgtPmNhcHRpb24ucmVnaW9uX2NvdW50OyByZWN0X2lkeCsrKSB7CisgICAgICAgIEFW U3VidGl0bGVSZWN0ICpyZWN0ID0gY3R4LT5zdWItPnJlY3RzW3JlY3RfaWR4XTsKKyAgICAgICAg YXJpYmNjX2ltYWdlX3QgKmltYWdlID0gJmN0eC0+cmVuZGVyX3Jlc3VsdC5pbWFnZXNbcmVjdF9p ZHhdOworICAgICAgICBpbnQgdywgaCwgc3JjX2lkeCwgZHN0X2lkeDsKKworICAgICAgICBjbHV0 X2luaXQoY3R4LCAmY3R4LT5jYXB0aW9uLnJlZ2lvbnNbcmVjdF9pZHhdKTsKKworICAgICAgICBy ZWN0LT5kYXRhWzBdID0gYXZfbWFsbG9jeihpbWFnZS0+Yml0bWFwX3NpemUgLyA0KTsKKyAgICAg ICAgaWYgKCFyZWN0LT5kYXRhWzBdKSB7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01F TSk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBzcmNfaWR4 ID0gMDsKKyAgICAgICAgZHN0X2lkeCA9IDA7CisgICAgICAgIGZvciAoaCA9IDA7IGggPCBpbWFn ZS0+aGVpZ2h0OyBoKyspIHsKKyAgICAgICAgICAgIGZvciAodyA9IDA7IHcgPCBpbWFnZS0+d2lk dGg7IHcrKykgeworICAgICAgICAgICAgICAgIGludCByLCBnLCBiLCBhOworICAgICAgICAgICAg ICAgIHIgPSBpbWFnZS0+Yml0bWFwW3NyY19pZHgrK107CisgICAgICAgICAgICAgICAgZyA9IGlt YWdlLT5iaXRtYXBbc3JjX2lkeCsrXTsKKyAgICAgICAgICAgICAgICBiID0gaW1hZ2UtPmJpdG1h cFtzcmNfaWR4KytdOworICAgICAgICAgICAgICAgIGEgPSBpbWFnZS0+Yml0bWFwW3NyY19pZHgr K107CisgICAgICAgICAgICAgICAgaWYgKHNyY19pZHggPiBpbWFnZS0+Yml0bWFwX3NpemUpIHsK KyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQnVnOiB1bmV4 cGVjdGVkbHkgcmVhY2ggZW5kIG9mIGltYWdlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZWN0LT5kYXRhWzBdW2RzdF9pZHgrK10g PSBjbHV0X3BpY2tfb3Jfc2V0KGN0eCwgciwgZywgYiwgYSk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAodyAqIDQgPCBpbWFnZS0+c3RyaWRlKSB7CisgICAgICAgICAgICAgICAgc3Jj X2lkeCArPSBpbWFnZS0+c3RyaWRlIC0gdyAqIDQ7CisgICAgICAgICAgICAgICAgZHN0X2lkeCAr PSBpbWFnZS0+c3RyaWRlIC8gNCAtIHc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgcmVjdC0+ZGF0YVsxXSA9IGF2X21lbWR1cChjdHgtPmNsdXQsIEFWUEFMRVRURV9TSVpFKTsK KyAgICAgICAgaWYgKCFyZWN0LT5kYXRhWzFdKSB7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9S KEVOT01FTSk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBm Zl9kbG9nKGN0eCwgIkJJVE1BUCBzdWJ0aXRsZSVzICglZCwlZCkgJWQoJWQpIHggJWQgWyVkXTog JWQgY29sb3JzXG4iLAorICAgICAgICAgICAgICAgIChjdHgtPmNhcHRpb24ucmVnaW9uc1tyZWN0 X2lkeF0uaXNfcnVieSkgPyAiIChydWJ5KSIgOiAiIiwKKyAgICAgICAgICAgICAgICBpbWFnZS0+ ZHN0X3gsIGltYWdlLT5kc3RfeSwKKyAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgsIGltYWdl LT5zdHJpZGUgLyA0LCBpbWFnZS0+aGVpZ2h0LAorICAgICAgICAgICAgICAgIHJlY3RfaWR4LCBj dHgtPmNsdXRfaWR4KTsKKyAgICAgICAgaWYgKGN0eC0+Y2x1dF9vdmVyZmxvdykKKyAgICAgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19XQVJOSU5HLCAiQ0xVVCBvdmVyZmxvdyAoJWQpLlxuIiwg Y3R4LT5jbHV0X292ZXJmbG93KTsKKworICAgICAgICByZWN0LT54ID0gaW1hZ2UtPmRzdF94Owor ICAgICAgICByZWN0LT55ID0gaW1hZ2UtPmRzdF95OworICAgICAgICByZWN0LT53ID0gaW1hZ2Ut PndpZHRoOworICAgICAgICByZWN0LT5oID0gaW1hZ2UtPmhlaWdodDsKKyAgICAgICAgcmVjdC0+ dHlwZSA9IFNVQlRJVExFX0JJVE1BUDsKKyAgICAgICAgcmVjdC0+bGluZXNpemVbMF0gPSBpbWFn ZS0+c3RyaWRlIC8gNDsKKyAgICAgICAgcmVjdC0+bmJfY29sb3JzID0gMjU2OworICAgIH0KKyAg ICBzdWItPm51bV9yZWN0cyA9IHJlY3RfaWR4OworCisgICAgcmV0dXJuIHJlY3RfaWR4OworCitm YWlsOgorICAgIGlmIChzdWItPnJlY3RzKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg Y3R4LT5jYXB0aW9uLnJlZ2lvbl9jb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc3ViLT5y ZWN0c1tpXSkgeworICAgICAgICAgICAgICAgIGF2X2ZyZWVwKCZzdWItPnJlY3RzW2ldLT5kYXRh WzBdKTsKKyAgICAgICAgICAgICAgICBhdl9mcmVlcCgmc3ViLT5yZWN0c1tpXS0+ZGF0YVsxXSk7 CisgICAgICAgICAgICAgICAgYXZfZnJlZXAoJnN1Yi0+cmVjdHNbaV0pOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIGF2X2ZyZWVwKCZzdWItPnJlY3RzKTsKKyAgICB9CisgICAg c3ViLT5udW1fcmVjdHMgPSAwOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBz ZXRfYXNzX2hlYWRlcihBUklCQ2FwdGlvbkNvbnRleHQgKmN0eCkKK3sKKyAgICBBVkNvZGVjQ29u dGV4dCAqYXZjdHggPSBjdHgtPmF2Y3R4OworICAgIGludCBvdXRsaW5lLCBzaGFkb3c7CisKKyAg ICBpZiAoY3R4LT5ib3JkZXJfc3R5bGUgPT0gNCkgeworICAgICAgICBvdXRsaW5lID0gMDsKKyAg ICAgICAgc2hhZG93ID0gNDsKKyAgICB9IGVsc2UgeworICAgICAgICBvdXRsaW5lID0gMTsKKyAg ICAgICAgc2hhZG93ID0gMDsKKyAgICB9CisgICAgaWYgKGN0eC0+Zm9yY2Vfc3Ryb2tlX3RleHQp CisgICAgICAgIG91dGxpbmUgPSAoaW50KShjdHgtPnN0cm9rZV93aWR0aCAqIDQuMCAvIDMuMCk7 CisKKyAgICBpZiAoYXZjdHgtPnN1YnRpdGxlX2hlYWRlcikKKyAgICAgICAgYXZfZnJlZXAoJmF2 Y3R4LT5zdWJ0aXRsZV9oZWFkZXIpOworICAgIGF2Y3R4LT5zdWJ0aXRsZV9oZWFkZXIgPSBhdl9h c3ByaW50ZigKKyAgICAgICAgICAgICJbU2NyaXB0IEluZm9dXHJcbiIKKyAgICAgICAgICAgICJT Y3JpcHRUeXBlOiB2NC4wMCtcclxuIgorICAgICAgICAgICAgIlBsYXlSZXNYOiAlZFxyXG4iCisg ICAgICAgICAgICAiUGxheVJlc1k6ICVkXHJcbiIKKyAgICAgICAgICAgICJXcmFwU3R5bGU6IDJc clxuIiAgICAgIC8qIDI6IG5vIHdvcmQgd3JhcHBpbmcgKi8KKyAgICAgICAgICAgICJcclxuIgor CisgICAgICAgICAgICAiW1Y0KyBTdHlsZXNdXHJcbiIKKyAgICAgICAgICAgICAiRm9ybWF0OiBO YW1lLCAiCisgICAgICAgICAgICAgIkZvbnRuYW1lLCBGb250c2l6ZSwgIgorICAgICAgICAgICAg ICJQcmltYXJ5Q29sb3VyLCBTZWNvbmRhcnlDb2xvdXIsIE91dGxpbmVDb2xvdXIsIEJhY2tDb2xv dXIsICIKKyAgICAgICAgICAgICAiQm9sZCwgSXRhbGljLCBVbmRlcmxpbmUsIFN0cmlrZU91dCwg IgorICAgICAgICAgICAgICJTY2FsZVgsIFNjYWxlWSwgIgorICAgICAgICAgICAgICJTcGFjaW5n LCBBbmdsZSwgIgorICAgICAgICAgICAgICJCb3JkZXJTdHlsZSwgT3V0bGluZSwgU2hhZG93LCAi CisgICAgICAgICAgICAgIkFsaWdubWVudCwgTWFyZ2luTCwgTWFyZ2luUiwgTWFyZ2luViwgIgor ICAgICAgICAgICAgICJFbmNvZGluZ1xyXG4iCisKKyAgICAgICAgICAgICAiU3R5bGU6ICIKKyAg ICAgICAgICAgICAiRGVmYXVsdCwiICAgICAgICAgICAgIC8qIE5hbWUgKi8KKyAgICAgICAgICAg ICAiJXMsJWQsIiAgICAgICAgICAgICAgIC8qIEZvbnR7bmFtZSxzaXplfSAqLworICAgICAgICAg ICAgICImSCV4LCZIJXgsJkgleCwmSCV4LCIgLyoge1ByaW1hcnksU2Vjb25kYXJ5LE91dGxpbmUs QmFja31Db2xvdXIgKi8KKyAgICAgICAgICAgICAiJWQsJWQsJWQsMCwiICAgICAgICAgIC8qIEJv bGQsIEl0YWxpYywgVW5kZXJsaW5lLCBTdHJpa2VPdXQgKi8KKyAgICAgICAgICAgICAiMTAwLDEw MCwiICAgICAgICAgICAgIC8qIFNjYWxle1gsWX0gKi8KKyAgICAgICAgICAgICAiMCwwLCIgICAg ICAgICAgICAgICAgIC8qIFNwYWNpbmcsIEFuZ2xlICovCisgICAgICAgICAgICAgIiVkLCVkLCVk LCIgICAgICAgICAgICAvKiBCb3JkZXJTdHlsZSwgT3V0bGluZSwgU2hhZG93ICovCisgICAgICAg ICAgICAgIiVkLDEwLDEwLDEwLCIgICAgICAgICAvKiBBbGlnbm1lbnQsIE1hcmdpbltMUlZdICov CisgICAgICAgICAgICAgIjBcclxuIiAgICAgICAgICAgICAgICAvKiBFbmNvZGluZyAqLworICAg ICAgICAgICAgICJcclxuIgorCisgICAgICAgICAgICAgIltFdmVudHNdXHJcbiIKKyAgICAgICAg ICAgICAiRm9ybWF0OiBMYXllciwgU3RhcnQsIEVuZCwgU3R5bGUsIE5hbWUsIE1hcmdpbkwsIE1h cmdpblIsIE1hcmdpblYsIEVmZmVjdCwgVGV4dFxyXG4iLAorICAgICAgICAgICAgY3R4LT5wbGFu ZV93aWR0aCwgY3R4LT5wbGFuZV9oZWlnaHQsCisgICAgICAgICAgICBjdHgtPmZvbnRfbmFtZSwg Y3R4LT5mb250X3NpemUsCisgICAgICAgICAgICBBU1NfREVGQVVMVF9DT0xPUiwgQVNTX0RFRkFV TFRfQ09MT1IsCisgICAgICAgICAgICBBU1NfREVGQVVMVF9CQUNLX0NPTE9SLCBBU1NfREVGQVVM VF9CQUNLX0NPTE9SLAorICAgICAgICAgICAgLUFTU19ERUZBVUxUX0JPTEQsIC1BU1NfREVGQVVM VF9JVEFMSUMsIC1BU1NfREVGQVVMVF9VTkRFUkxJTkUsCisgICAgICAgICAgICBjdHgtPmJvcmRl cl9zdHlsZSwgb3V0bGluZSwgc2hhZG93LCBBU1NfREVGQVVMVF9BTElHTk1FTlQpOworCisgICAg aWYgKCFhdmN0eC0+c3VidGl0bGVfaGVhZGVyKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOworICAgIGF2Y3R4LT5zdWJ0aXRsZV9oZWFkZXJfc2l6ZSA9IHN0cmxlbihhdmN0eC0+c3Vi dGl0bGVfaGVhZGVyKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X2Fzc19j b2xvcihBVkJQcmludCAqYnVmLCBpbnQgY29sb3JfbnVtLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBhcmliY2NfY29sb3JfdCBuZXdfY29sb3IsIGFyaWJjY19jb2xvcl90IG9sZF9jb2xvcikK K3sKKyAgICBpZiAoQVJJQkNDX0NPTE9SX0RJRkZfUkdCKG5ld19jb2xvciwgb2xkX2NvbG9yKSkK KyAgICAgICAgYXZfYnByaW50ZihidWYsICJ7XFwlZGMmSCUwNngmfSIsIGNvbG9yX251bSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSSUJDQ19DT0xPUl9SR0Io bmV3X2NvbG9yKSk7CisgICAgaWYgKEFSSUJDQ19DT0xPUl9ESUZGX0EobmV3X2NvbG9yLCBvbGRf Y29sb3IpICYmIEFSSUJDQ19DT0xPUl9BKG5ld19jb2xvcikpCisgICAgICAgIGF2X2JwcmludGYo YnVmLCAie1xcJWRhJkglMDJ4Jn0iLCBjb2xvcl9udW0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBUklCQ0NfQ09MT1JfQShuZXdfY29sb3IpKTsKK30KKworc3Rh dGljIGludCBhcmliY2FwdGlvbl90cmFuc19hc3Nfc3VidGl0bGUoQVJJQkNhcHRpb25Db250ZXh0 ICpjdHgpCit7CisgICAgQVZTdWJ0aXRsZSAqc3ViID0gY3R4LT5zdWI7CisgICAgQVZCUHJpbnQg YnVmOworICAgIGludCByZXQgPSAwLCByZWN0X2lkeDsKKworICAgIGlmIChjdHgtPmNhcHRpb24u cGxhbmVfd2lkdGggPiAwICYmIGN0eC0+Y2FwdGlvbi5wbGFuZV9oZWlnaHQgPiAwICYmCisgICAg ICAgIChjdHgtPmNhcHRpb24ucGxhbmVfd2lkdGggIT0gY3R4LT5wbGFuZV93aWR0aCB8fAorICAg ICAgICAgY3R4LT5jYXB0aW9uLnBsYW5lX2hlaWdodCAhPSBjdHgtPnBsYW5lX2hlaWdodCkpIHsK KyAgICAgICAgaWYgKChyZXQgPSBzZXRfYXNzX2hlYWRlcihjdHgpKSA8IDApCisgICAgICAgICAg ICByZXR1cm4gcmV0OworICAgICAgICBjdHgtPnBsYW5lX3dpZHRoID0gY3R4LT5jYXB0aW9uLnBs YW5lX3dpZHRoOworICAgICAgICBjdHgtPnBsYW5lX2hlaWdodCA9IGN0eC0+Y2FwdGlvbi5wbGFu ZV9oZWlnaHQ7CisgICAgfQorCisgICAgc3ViLT5mb3JtYXQgPSAxOyAvKiB0ZXh0ICovCisgICAg aWYgKGN0eC0+Y2FwdGlvbi5yZWdpb25fY291bnQgPT0gMCkgeworICAgICAgICAvKiBjbGVhciBw cmV2aW91cyBjYXB0aW9uIGZvciBpbmRlZmluaXRlIGR1cmF0aW9uICAqLworICAgICAgICBmZl9h c3NfYWRkX3JlY3Qoc3ViLCAie1xccn0iLCBjdHgtPnJlYWRvcmRlcisrLCAwLCBOVUxMLCBOVUxM KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgYXZfYnByaW50X2luaXQoJmJ1Ziwg QVJJQkNfQlBSSU5UX1NJWkVfSU5JVCwgQVJJQkNfQlBSSU5UX1NJWkVfTUFYKTsKKworICAgIGlm IChjdHgtPmFzc193b3JrYXJvdW5kKSB7CisgICAgICAgIGludCB4LCB5OworICAgICAgICB4ID0g Y3R4LT5wbGFuZV93aWR0aDsKKyAgICAgICAgeSA9IGN0eC0+cGxhbmVfaGVpZ2h0OworICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IGN0eC0+Y2FwdGlvbi5yZWdpb25fY291bnQ7IGkrKykgewor ICAgICAgICAgICAgaWYgKGN0eC0+Y2FwdGlvbi5yZWdpb25zW2ldLnggPCB4KQorICAgICAgICAg ICAgICAgIHggPSBjdHgtPmNhcHRpb24ucmVnaW9uc1tpXS54OworICAgICAgICAgICAgaWYgKGN0 eC0+Y2FwdGlvbi5yZWdpb25zW2ldLnkgPCB5KQorICAgICAgICAgICAgICAgIHkgPSBjdHgtPmNh cHRpb24ucmVnaW9uc1tpXS55OworICAgICAgICB9CisgICAgICAgIGF2X2JwcmludGYoJmJ1Ziwg IntcXGFuNH0iKTsKKyAgICAgICAgaWYgKHggPiAwIHx8IHkgPjApCisgICAgICAgICAgICBhdl9i cHJpbnRmKCZidWYsICJ7XFxwb3MoJWQsJWQpfSIsIHgsIHkpOworICAgIH0KKworICAgIHJlY3Rf aWR4ID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGN0eC0+Y2FwdGlvbi5yZWdpb25fY291 bnQ7IGkrKykgeworICAgICAgICBhcmliY2NfY2FwdGlvbl9yZWdpb25fdCAqcmVnaW9uID0gJmN0 eC0+Y2FwdGlvbi5yZWdpb25zW2ldOworICAgICAgICBhcmliY2NfY29sb3JfdCB0ZXh0X2NvbG9y ID0gQVJJQkNDX01BS0VfUkdCQSgweEZGLCAweEZGLCAweEZGLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUklCQ19BTFBIQV9ERUZBVUxUX0ZS T05UKTsKKyAgICAgICAgYXJpYmNjX2NvbG9yX3Qgc3Ryb2tlX2NvbG9yID0gQVJJQkNDX01BS0Vf UkdCQSgwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFSSUJDX0FMUEhBX0RFRkFVTFRfRlJPTlQpOworICAgICAgICBhcmliY2Nf Y29sb3JfdCBiYWNrX2NvbG9yID0gQVJJQkNDX01BS0VfUkdCQSgwLCAwLCAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUklCQ19BTFBIQV9E RUZBVUxUX0JBQ0spOworICAgICAgICBhcmliY2NfY2hhcnN0eWxlX3QgY2hhcnN0eWxlID0gY3R4 LT5jaGFyc3R5bGU7CisgICAgICAgIGludCBjaGFyX3dpZHRoID0gY3R4LT5mb250X3NpemU7Cisg ICAgICAgIGludCBjaGFyX2hlaWdodCA9IGN0eC0+Zm9udF9zaXplOworICAgICAgICBpbnQgY2hh cl9ob3Jpem9udGFsX3NwYWNpbmcgPSAwOworCisgICAgICAgIGlmIChyZWdpb24tPmlzX3J1Ynkg JiYgY3R4LT5pZ25vcmVfcnVieSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlm ICghY3R4LT5hc3Nfd29ya2Fyb3VuZCkgeworICAgICAgICAgICAgYXZfYnByaW50X2NsZWFyKCZi dWYpOworICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAie1xcYW40fSIpOworICAgICAgICAg ICAgaWYgKHJlZ2lvbi0+eCAhPSAwIHx8IHJlZ2lvbi0+eSAhPSAwKQorICAgICAgICAgICAgICAg IGF2X2JwcmludGYoJmJ1ZiwgIntcXHBvcyglZCwlZCl9IiwgcmVnaW9uLT54LCByZWdpb24tPnkp OworICAgICAgICB9CisgICAgICAgIGlmIChjdHgtPmZhZGVvdXQpCisgICAgICAgICAgICBhdl9i cHJpbnRmKCZidWYsICJ7XFxmYWQoMCw1MDApfSIpOworICAgICAgICBpZiAocmVnaW9uLT5pc19y dWJ5KQorICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAie1xcZnMlZH0iLCBjaGFyX2hlaWdo dCAvIDIpOworCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVnaW9uLT5jaGFyX2NvdW50 OyBqKyspIHsKKyAgICAgICAgICAgIGFyaWJjY19jYXB0aW9uX2NoYXJfdCAqY2ggPSAmcmVnaW9u LT5jaGFyc1tqXTsKKworICAgICAgICAgICAgaWYgKGNoLT5jaGFyX2hvcml6b250YWxfc3BhY2lu ZyAhPSBjaGFyX2hvcml6b250YWxfc3BhY2luZykgeworICAgICAgICAgICAgICAgIGF2X2Jwcmlu dGYoJmJ1ZiwgIntcXGZzcCVkfSIsIChyZWdpb24tPmlzX3J1YnkpID8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoLT5jaGFyX2hvcml6b250YWxfc3BhY2luZyAvIDIgOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gtPmNoYXJfaG9yaXpvbnRhbF9zcGFjaW5n KTsKKyAgICAgICAgICAgICAgICBjaGFyX2hvcml6b250YWxfc3BhY2luZyA9IGNoLT5jaGFyX2hv cml6b250YWxfc3BhY2luZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaC0+Y2hh cl93aWR0aCAhPSBjaGFyX3dpZHRoKSB7CisgICAgICAgICAgICAgICAgYXZfYnByaW50ZigmYnVm LCAie1xcZnNjeCUiUFJJZDY0In0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfcmVz Y2FsZShjaC0+Y2hhcl93aWR0aCwgMTAwLCBjdHgtPmZvbnRfc2l6ZSkpOworICAgICAgICAgICAg ICAgIGNoYXJfd2lkdGggPSBjaC0+Y2hhcl93aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChjaC0+Y2hhcl9oZWlnaHQgIT0gY2hhcl9oZWlnaHQpIHsKKyAgICAgICAgICAgICAg ICBhdl9icHJpbnRmKCZidWYsICJ7XFxmc2N5JSJQUklkNjQifSIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBhdl9yZXNjYWxlKGNoLT5jaGFyX2hlaWdodCwgMTAwLCBjdHgtPmZvbnRfc2l6 ZSkpOworICAgICAgICAgICAgICAgIGNoYXJfaGVpZ2h0ID0gY2gtPmNoYXJfaGVpZ2h0OworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoLT5zdHlsZSAhPSBjaGFyc3R5bGUpIHsKKyAg ICAgICAgICAgICAgICBhcmliY2NfY2hhcnN0eWxlX3QgZGlmZiA9IGNoLT5zdHlsZSBeIGNoYXJz dHlsZTsKKyAgICAgICAgICAgICAgICBpZiAoZGlmZiAmIEFSSUJDQ19DSEFSU1RZTEVfU1RST0tF KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc3R5bGUgJiBBUklCQ0NfQ0hBUlNUWUxF X1NUUk9LRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+Zm9yY2Vfc3Ryb2tl X3RleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAie1xc Ym9yZCVkfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShj dHgtPnN0cm9rZV93aWR0aCAqIDQuMCAvIDMuMCkpOworICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X2JwcmludGYoJmJ1ZiwgIntcXGJv cmQwfSIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg ICAgIGF2X2JwcmludGYoJmJ1ZiwgIntcXGJvcmQzfSIpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBpZiAoZGlmZiAmIEFSSUJDQ19DSEFSU1RZTEVfQk9MRCkgeworICAgICAg ICAgICAgICAgICAgICBpZiAoY2hhcnN0eWxlICYgQVJJQkNDX0NIQVJTVFlMRV9CT0xEKQorICAg ICAgICAgICAgICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAie1xcYjB9Iik7CisgICAgICAg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2X2JwcmludGYoJmJ1 ZiwgIntcXGIxfSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZGlm ZiAmIEFSSUJDQ19DSEFSU1RZTEVfSVRBTElDKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChj aGFyc3R5bGUgJiBBUklCQ0NfQ0hBUlNUWUxFX0lUQUxJQykKKyAgICAgICAgICAgICAgICAgICAg ICAgIGF2X2JwcmludGYoJmJ1ZiwgIntcXGkwfSIpOworICAgICAgICAgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgICAgICAgICBhdl9icHJpbnRmKCZidWYsICJ7XFxpMX0iKTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRpZmYgJiBBUklCQ0NfQ0hBUlNU WUxFX1VOREVSTElORSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcnN0eWxlICYgQVJJ QkNDX0NIQVJTVFlMRV9VTkRFUkxJTkUpCisgICAgICAgICAgICAgICAgICAgICAgICBhdl9icHJp bnRmKCZidWYsICJ7XFx1MH0iKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAie1xcdTF9Iik7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGNoYXJzdHlsZSA9IGNoLT5zdHlsZTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChjaC0+dGV4dF9jb2xvciAhPSB0ZXh0X2NvbG9yKSB7CisgICAg ICAgICAgICAgICAgc2V0X2Fzc19jb2xvcigmYnVmLCAxLCBjaC0+dGV4dF9jb2xvciwgdGV4dF9j b2xvcik7CisgICAgICAgICAgICAgICAgdGV4dF9jb2xvciA9IGNoLT50ZXh0X2NvbG9yOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoLT5zdHJva2VfY29sb3IgIT0gc3Ryb2tlX2Nv bG9yKSB7CisgICAgICAgICAgICAgICAgc2V0X2Fzc19jb2xvcigmYnVmLCAzLCBjaC0+c3Ryb2tl X2NvbG9yLCBzdHJva2VfY29sb3IpOworICAgICAgICAgICAgICAgIHN0cm9rZV9jb2xvciA9IGNo LT5zdHJva2VfY29sb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2gtPmJhY2tf Y29sb3IgIT0gYmFja19jb2xvcikgeworICAgICAgICAgICAgICAgIGlmIChjdHgtPmJvcmRlcl9z dHlsZSA9PSA0KQorICAgICAgICAgICAgICAgICAgICBzZXRfYXNzX2NvbG9yKCZidWYsIDQsIGNo LT5iYWNrX2NvbG9yLCBiYWNrX2NvbG9yKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgICAgIHNldF9hc3NfY29sb3IoJmJ1ZiwgMywgY2gtPmJhY2tfY29sb3IsIGJhY2tf Y29sb3IpOworICAgICAgICAgICAgICAgIGJhY2tfY29sb3IgPSBjaC0+YmFja19jb2xvcjsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZWdpb24tPmNoYXJzW2pdLnR5cGUgPT0gQVJJ QkNDX0NIQVJUWVBFX0RSQ1MpCisgICAgICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAiXHhl M1x4ODBceDkzIik7ICAvKiAi44CTIiAqLworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgIGZmX2Fzc19icHJpbnRfdGV4dF9ldmVudCgmYnVmLCBjaC0+dThzdHIsIHN0cmxlbihjaC0+ dThzdHIpLCAiIiwgMCk7CisgICAgICAgIH0KKyAgICAgICAgYXZfYnByaW50ZigmYnVmLCAie1xc cn0lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGkgKyAxIDwgY3R4LT5jYXB0aW9uLnJl Z2lvbl9jb3VudCkgPyAiXFxOIiA6ICIiKTsKKworICAgICAgICBpZiAoY3R4LT5hc3Nfd29ya2Fy b3VuZCkgeworICAgICAgICAgICAgZmZfZGxvZyhjdHgsICJBU1Mgc3VidGl0bGUlcyAoJWQsJWQp ICVkeCVkIFslZF1cbiIsCisgICAgICAgICAgICAgICAgICAgIChyZWdpb24tPmlzX3J1YnkpID8g IiAocnVieSkiIDogIiIsCisgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+eCwgcmVnaW9uLT55 LCByZWdpb24tPndpZHRoLCByZWdpb24tPmhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgcmVj dF9pZHgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFhdl9icHJpbnRfaXNf Y29tcGxldGUoJmJ1ZikpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7 CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAg ZmZfZGxvZyhjdHgsICJBU1Mgc3VidGl0bGUlcyAoJWQsJWQpICVkeCVkIFslZF06ICVzXG4iLAor ICAgICAgICAgICAgICAgICAgICAocmVnaW9uLT5pc19ydWJ5KSA/ICIgKHJ1YnkpIiA6ICIiLAor ICAgICAgICAgICAgICAgICAgICByZWdpb24tPngsIHJlZ2lvbi0+eSwgcmVnaW9uLT53aWR0aCwg cmVnaW9uLT5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgIHJlY3RfaWR4LCBidWYuc3RyKTsK KworICAgICAgICAgICAgcmV0ID0gZmZfYXNzX2FkZF9yZWN0KHN1YiwgYnVmLnN0ciwgY3R4LT5y ZWFkb3JkZXIrKywgMCAsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgaWYgKHJldCAhPSAwKQor ICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIHJlY3RfaWR4Kys7CisgICAg ICAgIH0KKyAgICB9CisgICAgaWYgKGN0eC0+YXNzX3dvcmthcm91bmQpIHsKKyAgICAgICAgaWYg KCFhdl9icHJpbnRfaXNfY29tcGxldGUoJmJ1ZikpIHsKKyAgICAgICAgICAgIHJldCA9IEFWRVJS T1IoRU5PTUVNKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICBm Zl9kbG9nKGN0eCwgIkFTUyBzdWJ0aXRsZTogJXNcbiIsIGJ1Zi5zdHIpOworCisgICAgICAgIHJl dCA9IGZmX2Fzc19hZGRfcmVjdChzdWIsIGJ1Zi5zdHIsIGN0eC0+cmVhZG9yZGVyKyssIDAgLCBO VUxMLCBOVUxMKTsKKyAgICAgICAgaWYgKHJldCAhPSAwKQorICAgICAgICAgICAgZ290byBmYWls OworICAgICAgICByZWN0X2lkeCsrOworICAgIH0KKworICAgIGF2X2JwcmludF9maW5hbGl6ZSgm YnVmLCBOVUxMKTsKKyAgICByZXR1cm4gcmVjdF9pZHg7CisKK2ZhaWw6CisgICAgaWYgKHN1Yi0+ cmVjdHMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdHgtPmNhcHRpb24ucmVnaW9u X2NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChzdWItPnJlY3RzW2ldKSB7CisgICAgICAg ICAgICAgICAgYXZfZnJlZXAoJnN1Yi0+cmVjdHNbaV0tPmFzcyk7CisgICAgICAgICAgICAgICAg YXZfZnJlZXAoJnN1Yi0+cmVjdHNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGF2X2ZyZWVwKCZzdWItPnJlY3RzKTsKKyAgICB9CisgICAgc3ViLT5udW1fcmVjdHMgPSAw OworICAgIGF2X2JwcmludF9maW5hbGl6ZSgmYnVmLCBOVUxMKTsKKworICAgIHJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbnQgYXJpYmNhcHRpb25fdHJhbnNfdGV4dF9zdWJ0aXRsZShBUklCQ2Fw dGlvbkNvbnRleHQgKmN0eCkKK3sKKyAgICBBVlN1YnRpdGxlICpzdWIgPSBjdHgtPnN1YjsKKyAg ICBBVlN1YnRpdGxlUmVjdCAqcmVjdDsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBjb25zdCBjaGFy ICp0ZXh0OworCisgICAgc3ViLT5yZWN0cyA9IGF2X2NhbGxvYyhjdHgtPmNhcHRpb24ucmVnaW9u X2NvdW50LCBzaXplb2YoKnN1Yi0+cmVjdHMpKTsKKyAgICBpZiAoIXN1Yi0+cmVjdHMpIHsKKyAg ICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQor ICAgIHN1Yi0+bnVtX3JlY3RzID0gMTsKKworICAgIHN1Yi0+cmVjdHNbMF0gPSBhdl9tYWxsb2N6 KHNpemVvZigqc3ViLT5yZWN0c1swXSkpOworICAgIGlmICghc3ViLT5yZWN0c1swXSkgeworICAg ICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9Cisg ICAgcmVjdCA9IHN1Yi0+cmVjdHNbMF07CisKKyAgICBpZiAoY3R4LT5jYXB0aW9uLnJlZ2lvbl9j b3VudCA9PSAwKSB7CisgICAgICAgIHRleHQgPSAiIjsgLyogY2xlYXIgcHJldmlvdXMgY2FwdGlv biAqLworICAgIH0gZWxzZSB7CisgICAgICAgIHRleHQgPSBjdHgtPmNhcHRpb24udGV4dDsKKyAg ICAgICAgZmZfZGxvZyhjdHgsICJURVhUIHN1YnRpdGxlOiAlc1xuIiwgdGV4dCk7CisgICAgfQor ICAgIHJlY3QtPnRleHQgPSBhdl9zdHJkdXAodGV4dCk7CisgICAgaWYgKCFyZWN0LT50ZXh0KSB7 CisgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBmYWlsOworICAg IH0KKworICAgIHN1Yi0+Zm9ybWF0ID0gMTsgLyogdGV4dCAqLworICAgIHJlY3QtPnR5cGUgPSBT VUJUSVRMRV9URVhUOworCisgICAgcmV0dXJuIDE7CisKK2ZhaWw6CisgICAgaWYgKHN1Yi0+cmVj dHMpIHsKKyAgICAgICAgcmVjdCA9IHN1Yi0+cmVjdHNbMF07CisgICAgICAgIGlmIChyZWN0KSB7 CisgICAgICAgICAgICBhdl9mcmVlcCgmcmVjdC0+dGV4dCk7CisgICAgICAgICAgICBhdl9mcmVl cCgmcmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgYXZfZnJlZXAoJnN1Yi0+cmVjdHMpOworICAg IH0KKyAgICBzdWItPm51bV9yZWN0cyA9IDA7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IGFyaWJjYXB0aW9uX2RlY29kZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWU3VidGl0 bGUgKnN1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZ290X3N1Yl9wdHIs IGNvbnN0IEFWUGFja2V0ICphdnBrdCkKK3sKKyAgICBBUklCQ2FwdGlvbkNvbnRleHQgKmN0eCA9 IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgaW50IHN0YXR1czsKKworICAgIGZmX2Rsb2coY3R4LCAi QVJJQiBjYXB0aW9uIHBhY2tldCBwdHM9JSJQUkl4NjQiOlxuIiwgYXZwa3QtPnB0cyk7CisgICAg aWYgKHN1Yi0+bnVtX3JlY3RzKSB7CisgICAgICAgIGF2cHJpdl9yZXF1ZXN0X3NhbXBsZShjdHgs ICJEaWZmZXJlbnQgVmVyc2lvbiBvZiBTZWdtZW50IGFza2VkIFR3aWNlIik7CisgICAgICAgIHJl dHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICB9CisgICAgaGV4X2R1bXBfZGVidWcoY3R4 LCBhdnBrdC0+ZGF0YSwgYXZwa3QtPnNpemUpOworCisgICAgY3R4LT5zdWIgPSBzdWI7CisgICAg Y3R4LT5hdnBrdCA9IGF2cGt0OworICAgIGN0eC0+dGltZV9iYXNlID0gYXZjdHgtPnBrdF90aW1l YmFzZTsKKyAgICBpZiAoY3R4LT50aW1lX2Jhc2UubnVtIDw9IDAgfHwgY3R4LT50aW1lX2Jhc2Uu ZGVuIDw9IDApIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJObyB0aW1l YmFzZSBzZXQuIGFzc3VtaW5nIDkwa0h6LlxuIik7CisgICAgICAgIGN0eC0+dGltZV9iYXNlID0g YXZfbWFrZV9xKDEsIDkwMDAwKTsKKyAgICB9CisgICAgaWYgKGF2cGt0LT5wdHMgPT0gQVZfTk9Q VFNfVkFMVUUpCisgICAgICAgIGN0eC0+cHRzID0gQVJJQkNDX1BUU19OT1BUUzsKKyAgICBlbHNl CisgICAgICAgIGN0eC0+cHRzID0gYXZfcmVzY2FsZV9xKGF2cGt0LT5wdHMsIGN0eC0+dGltZV9i YXNlLCAoQVZSYXRpb25hbCl7MSwgMTAwMH0pOworCisgICAgc3RhdHVzID0gYXJpYmNjX2RlY29k ZXJfZGVjb2RlKGN0eC0+ZGVjb2RlciwgYXZwa3QtPmRhdGEsIGF2cGt0LT5zaXplLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0cywgJmN0eC0+Y2FwdGlvbik7Cisg ICAgaWYgKHN0YXR1cyA9PSBBUklCQ0NfREVDT0RFX1NUQVRVU19FUlJPUikgeworICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiYXJpYmNjX2RlY29kZXJf ZGVjb2RlKCkgcmV0dXJuZWQgd2l0aCBlcnJvci5cbiIpOworICAgICAgICByZXR1cm4gQVZFUlJP UihFQUdBSU4pOworICAgIH0KKyAgICBpZiAoc3RhdHVzID09IEFSSUJDQ19ERUNPREVfU1RBVFVT X05PX0NBUFRJT04pIHsKKyAgICAgICAgZmZfZGxvZyhjdHgsICJObyBjYXB0aW9uLlxuIik7Cisg ICAgICAgIHJldHVybiBhdnBrdC0+c2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBmZl9kbG9n KGN0eCwgInR5cGU9JTAyeCwgZmxhZ3M9JXgsIGxhbmc9JTAzeFxuIiwKKyAgICAgICAgICAgICAg ICBjdHgtPmNhcHRpb24udHlwZSwgY3R4LT5jYXB0aW9uLmZsYWdzLCBjdHgtPmNhcHRpb24uaXNv NjM5Ml9sYW5ndWFnZV9jb2RlKTsKKyAgICAgICAgZmZfZGxvZyhjdHgsICJyZWdpb24gY291bnQg PSAlZCwgc3RhcnQ9JWQuJWQsIGR1cmF0aW9uPSVkLiVkXG4iLAorICAgICAgICAgICAgICAgIGN0 eC0+Y2FwdGlvbi5yZWdpb25fY291bnQsCisgICAgICAgICAgICAgICAgKGludCkoY3R4LT5jYXB0 aW9uLnB0cyAvIDEwMDApLCAoaW50KShjdHgtPmNhcHRpb24ucHRzICUgMTAwMCksCisgICAgICAg ICAgICAgICAgKGludCkoKGN0eC0+Y2FwdGlvbi53YWl0X2R1cmF0aW9uID09IEFSSUJDQ19EVVJB VElPTl9JTkRFRklOSVRFKSA/CisgICAgICAgICAgICAgICAgICAgICAgLTEgOiBjdHgtPmNhcHRp b24ud2FpdF9kdXJhdGlvbiAvIDEwMDApLAorICAgICAgICAgICAgICAgIChpbnQpKChjdHgtPmNh cHRpb24ud2FpdF9kdXJhdGlvbiA9PSBBUklCQ0NfRFVSQVRJT05fSU5ERUZJTklURSkgPworICAg ICAgICAgICAgICAgICAgICAgIDAgOiBjdHgtPmNhcHRpb24ud2FpdF9kdXJhdGlvbiAlIDEwMDAp KTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGN0eC0+c3VidGl0bGVfdHlwZSkgeworICAgIGNhc2Ug U1VCVElUTEVfVEVYVDoKKyAgICAgICAgc3RhdHVzID0gYXJpYmNhcHRpb25fdHJhbnNfdGV4dF9z dWJ0aXRsZShjdHgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1VCVElUTEVfQVNTOgor ICAgICAgICBzdGF0dXMgPSBhcmliY2FwdGlvbl90cmFuc19hc3Nfc3VidGl0bGUoY3R4KTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNVQlRJVExFX0JJVE1BUDoKKyAgICAgICAgc3RhdHVz ID0gYXJpYmNhcHRpb25fdHJhbnNfYml0bWFwX3N1YnRpdGxlKGN0eCk7CisgICAgICAgIGJyZWFr OworCisgICAgY2FzZSBTVUJUSVRMRV9OT05FOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHN0YXR1 cyA9IDA7CisgICAgfQorCisgICAgaWYgKHN0YXR1cyA8IDApIHsKKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHNldCBTdWJ0aXRsZTogJXNcbiIsCisgICAgICAg ICAgICAgICBhdl9lcnIyc3RyKHN0YXR1cykpOworICAgICAgICBhcmliY2NfY2FwdGlvbl9jbGVh bnVwKCZjdHgtPmNhcHRpb24pOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBp ZiAoc3RhdHVzID4gMCkgeworICAgICAgICAqZ290X3N1Yl9wdHIgPSAxOworICAgICAgICBpZiAo Y3R4LT5hdnBrdC0+cHRzICE9IEFWX05PUFRTX1ZBTFVFKQorICAgICAgICAgICAgc3ViLT5wdHMg PSBhdl9yZXNjYWxlX3EoY3R4LT5hdnBrdC0+cHRzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3R4LT50aW1lX2Jhc2UsIEFWX1RJTUVfQkFTRV9RKTsKKyAgICAgICAgaWYg KGN0eC0+Y2FwdGlvbi53YWl0X2R1cmF0aW9uID09IEFSSUJDQ19EVVJBVElPTl9JTkRFRklOSVRF KQorICAgICAgICAgICAgc3ViLT5lbmRfZGlzcGxheV90aW1lID0gVUlOVDMyX01BWDsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgc3ViLT5lbmRfZGlzcGxheV90aW1lID0gKHVpbnQzMl90KWN0 eC0+Y2FwdGlvbi53YWl0X2R1cmF0aW9uOworICAgIH0KKworICAgIGFyaWJjY19jYXB0aW9uX2Ns ZWFudXAoJmN0eC0+Y2FwdGlvbik7CisgICAgcmV0dXJuIGF2cGt0LT5zaXplOworfQorCitzdGF0 aWMgdm9pZCBhcmliY2FwdGlvbl9mbHVzaChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAg QVJJQkNhcHRpb25Db250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOworCisgICAgaWYgKCEo YXZjdHgtPmZsYWdzMiAmIEFWX0NPREVDX0ZMQUcyX1JPX0ZMVVNIX05PT1ApKSB7CisgICAgICAg IGlmIChjdHgtPmRlY29kZXIpCisgICAgICAgICAgICBhcmliY2NfZGVjb2Rlcl9mbHVzaChjdHgt PmRlY29kZXIpOworICAgICAgICBpZiAoY3R4LT5yZW5kZXJlcikKKyAgICAgICAgICAgIGFyaWJj Y19yZW5kZXJlcl9mbHVzaChjdHgtPnJlbmRlcmVyKTsKKyAgICAgICAgY3R4LT5yZWFkb3JkZXIg PSAwOworICAgIH0KK30KKworc3RhdGljIGludCBhcmliY2FwdGlvbl9jbG9zZShBVkNvZGVjQ29u dGV4dCAqYXZjdHgpCit7CisgICAgQVJJQkNhcHRpb25Db250ZXh0ICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOworCisgICAgYXJpYmNhcHRpb25fZmx1c2goYXZjdHgpOworCisgICAgaWYgKGN0eC0+ Y2x1dCkKKyAgICAgICAgYXZfZnJlZXAoJmN0eC0+Y2x1dCk7CisgICAgaWYgKGN0eC0+cmVuZGVy ZXIpIHsKKyAgICAgICAgYXJpYmNjX3JlbmRlcmVyX2ZyZWUoY3R4LT5yZW5kZXJlcik7CisgICAg ICAgIGN0eC0+ZGVjb2RlciA9IE5VTEw7CisgICAgfQorICAgIGlmIChjdHgtPmRlY29kZXIpIHsK KyAgICAgICAgYXJpYmNjX2RlY29kZXJfZnJlZShjdHgtPmRlY29kZXIpOworICAgICAgICBjdHgt PmRlY29kZXIgPSBOVUxMOworICAgIH0KKyAgICBpZiAoY3R4LT5jb250ZXh0KSB7CisgICAgICAg IGFyaWJjY19jb250ZXh0X2ZyZWUoY3R4LT5jb250ZXh0KTsKKyAgICAgICAgY3R4LT5jb250ZXh0 ID0gTlVMTDsKKyAgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXJpYmNh cHRpb25faW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgQVJJQkNhcHRpb25Db250 ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIGFyaWJjY19wcm9maWxlX3QgcHJvZmls ZTsKKyAgICBhcmliY2NfZW5jb2Rpbmdfc2NoZW1lX3QgZW5jb2RlX3NjaGVtZTsKKyAgICBpbnQg cmV0ID0gMDsKKworICAgIGN0eC0+YXZjdHggPSBhdmN0eDsKKworICAgIHN3aXRjaCAoYXZjdHgt PnByb2ZpbGUpIHsKKyAgICBjYXNlIEZGX1BST0ZJTEVfQVJJQl9QUk9GSUxFX0E6CisgICAgICAg IHByb2ZpbGUgPSBBUklCQ0NfUFJPRklMRV9BOworICAgICAgICAvKiBhc3N1bWUgOTYweDU0MCBh dCBpbml0aWFsIHN0YXRlICovCisgICAgICAgIGN0eC0+cGxhbmVfd2lkdGggPSA5NjA7CisgICAg ICAgIGN0eC0+cGxhbmVfaGVpZ2h0ID0gNTQwOworICAgICAgICBjdHgtPmZvbnRfc2l6ZSA9IDM2 OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZGX1BST0ZJTEVfQVJJQl9QUk9GSUxFX0M6Cisg ICAgICAgIHByb2ZpbGUgPSBBUklCQ0NfUFJPRklMRV9DOworICAgICAgICBjdHgtPnBsYW5lX3dp ZHRoID0gMzIwOworICAgICAgICBjdHgtPnBsYW5lX2hlaWdodCA9IDE4MDsKKyAgICAgICAgY3R4 LT5mb250X3NpemUgPSAxNjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIG9yIHVuc3VwcG9ydGVkIHByb2Zp bGUgc2V0LlxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorICAg IC8qIGRldGVybWluZSBCb3JkZXJTdHlsZSBvZiBBU1MgaGVhZGVyICovCisgICAgaWYgKGN0eC0+ aWdub3JlX2JhY2tncm91bmQpCisgICAgICAgIGN0eC0+Ym9yZGVyX3N0eWxlID0gMTsKKyAgICBl bHNlCisgICAgICAgIGN0eC0+Ym9yZGVyX3N0eWxlID0gNDsKKyAgICBjdHgtPmNoYXJzdHlsZSA9 IEFSSUJDQ19DSEFSU1RZTEVfREVGQVVMVDsKKyAgICBpZiAoY3R4LT5mb3JjZV9zdHJva2VfdGV4 dCB8fCBjdHgtPmlnbm9yZV9iYWNrZ3JvdW5kKQorICAgICAgICBjdHgtPmNoYXJzdHlsZSB8PSBB UklCQ0NfQ0hBUlNUWUxFX1NUUk9LRTsKKworICAgIGVuY29kZV9zY2hlbWUgPSBBUklCQ0NfRU5D T0RJTkdfU0NIRU1FX0FVVE87CisgICAgaWYgKGF2Y3R4LT5zdWJfY2hhcmVuY19tb2RlID09IEZG X1NVQl9DSEFSRU5DX01PREVfRE9fTk9USElORykKKyAgICAgICAgZW5jb2RlX3NjaGVtZSA9IEFS SUJDQ19FTkNPRElOR19TQ0hFTUVfQVJJQl9TVERfQjI0X1VURjg7CisKKyAgICBpZiAoIShjdHgt PmNvbnRleHQgPSBhcmliY2NfY29udGV4dF9hbGxvYygpKSkgeworICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBhbGxvYyBsaWJhcmliY2FwdGlvbiBjb250ZXh0 LlxuIik7CisgICAgICAgIGFyaWJjYXB0aW9uX2Nsb3NlKGF2Y3R4KTsKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorICAgIGFyaWJjY19jb250ZXh0X3NldF9sb2djYXRf Y2FsbGJhY2soY3R4LT5jb250ZXh0LCBsb2djYXRfY2FsbGJhY2ssIGF2Y3R4KTsKKyAgICBpZiAo IShjdHgtPmRlY29kZXIgPSBhcmliY2NfZGVjb2Rlcl9hbGxvYyhjdHgtPmNvbnRleHQpKSkgewor ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBhbGxvYyBsaWJh cmliY2FwdGlvbiBkZWNvZGVyLlxuIik7CisgICAgICAgIGFyaWJjYXB0aW9uX2Nsb3NlKGF2Y3R4 KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorICAgIGlmICghYXJp YmNjX2RlY29kZXJfaW5pdGlhbGl6ZShjdHgtPmRlY29kZXIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVuY29kZV9zY2hlbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFSSUJDQ19DQVBUSU9OVFlQRV9DQVBUSU9OLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBUklCQ0NfTEFOR1VBR0VJRF9GSVJTVCkpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBsaWJhcmliY2FwdGlvbiBkZWNvZGVy LlxuIik7CisgICAgICAgIGFyaWJjYXB0aW9uX2Nsb3NlKGF2Y3R4KTsKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorICAgIGFyaWJjY19kZWNvZGVyX3NldF9yZXBsYWNl X21zel9mdWxsd2lkdGhfYXNjaWkoY3R4LT5kZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5yZXBsYWNlX2Z1bGx3aWR0aF9hc2Np aSk7CisKKyAgICBzd2l0Y2ggKGN0eC0+c3VidGl0bGVfdHlwZSkgeworICAgIGNhc2UgU1VCVElU TEVfQVNTOgorICAgICAgICByZXQgPSBzZXRfYXNzX2hlYWRlcihjdHgpOworICAgICAgICBpZiAo cmV0ICE9IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFp bGVkIHRvIHNldCBBU1MgaGVhZGVyOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOworICAgICAgICAgICAgcmV0dXJuIHJldDsK KyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1VCVElUTEVfQklUTUFQOgor ICAgICAgICBpZighKGN0eC0+cmVuZGVyZXIgPSBhcmliY2NfcmVuZGVyZXJfYWxsb2MoY3R4LT5j b250ZXh0KSkpIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFp bGVkIHRvIGFsbG9jIGxpYmFyaWJjYXB0aW9uIHJlbmRlcmVyLlxuIik7CisgICAgICAgICAgICBh cmliY2FwdGlvbl9jbG9zZShhdmN0eCk7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKKyAgICAgICAgfQorICAgICAgICBpZighYXJpYmNjX3JlbmRlcmVyX2luaXRpYWxpemUo Y3R4LT5yZW5kZXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFS SUJDQ19DQVBUSU9OVFlQRV9DQVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVJJQkNDX0ZPTlRQUk9WSURFUl9UWVBFX0FVVE8sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoYXJpYmNjX3RleHRyZW5kZXJlcl90eXBlX3QpY3R4LT5y ZW5kZXJpbmdfYmFja2VuZCkpIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgbGliYXJpYmNhcHRpb24gcmVuZGVyZXIuXG4iKTsK KyAgICAgICAgICAgIGFyaWJjYXB0aW9uX2Nsb3NlKGF2Y3R4KTsKKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICB9CisgICAgICAgIGVzdGltYXRlX3ZpZGVvX2Zy YW1lX3NpemUoY3R4KTsKKyAgICAgICAgaWYgKCFhcmliY2NfcmVuZGVyZXJfc2V0X2ZyYW1lX3Np emUoY3R4LT5yZW5kZXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY3R4LT5mcmFtZV93aWR0aCwgY3R4LT5mcmFtZV9oZWlnaHQpKSB7CisgICAgICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgImFyaWJjY19y ZW5kZXJlcl9zZXRfZnJhbWVfc2l6ZSgpIHJldHVybmVkIHdpdGggZXJyb3IuXG4iKTsKKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICB9CisgICAgICAgIGlmICgh KGN0eC0+Y2x1dCA9IGF2X21hbGxvY3ooQVZQQUxFVFRFX1NJWkUpKSkKKyAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgYXJpYmNjX3JlbmRlcmVyX3NldF9zdG9y YWdlX3BvbGljeShjdHgtPnJlbmRlcmVyLCBBUklCQ0NfQ0FQVElPTl9TVE9SQUdFX1BPTElDWV9N SU5JTVVNLCAwKTsKKyAgICAgICAgYXJpYmNjX3JlbmRlcmVyX3NldF9yZXBsYWNlX2RyY3MoY3R4 LT5yZW5kZXJlciwgY3R4LT5yZXBsYWNlX2RyY3MpOworICAgICAgICBhcmliY2NfcmVuZGVyZXJf c2V0X2ZvcmNlX3N0cm9rZV90ZXh0KGN0eC0+cmVuZGVyZXIsIGN0eC0+Zm9yY2Vfc3Ryb2tlX3Rl eHQpOworICAgICAgICBhcmliY2NfcmVuZGVyZXJfc2V0X2ZvcmNlX25vX2JhY2tncm91bmQoY3R4 LT5yZW5kZXJlciwgY3R4LT5pZ25vcmVfYmFja2dyb3VuZCk7CisgICAgICAgIGFyaWJjY19yZW5k ZXJlcl9zZXRfZm9yY2Vfbm9fcnVieShjdHgtPnJlbmRlcmVyLCBjdHgtPmlnbm9yZV9ydWJ5KTsK KyAgICAgICAgYXJpYmNjX3JlbmRlcmVyX3NldF9zdHJva2Vfd2lkdGgoY3R4LT5yZW5kZXJlciwg Y3R4LT5zdHJva2Vfd2lkdGgpOworICAgICAgICBpZiAoY3R4LT5mb250X25hbWUgJiYgc3RybGVu KGN0eC0+Zm9udF9uYW1lKSA+IDApIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfZmFt aWxpZXNbXSA9IHsgY3R4LT5mb250X25hbWUgfTsKKyAgICAgICAgICAgIGFyaWJjY19yZW5kZXJl cl9zZXRfZGVmYXVsdF9mb250X2ZhbWlseShjdHgtPnJlbmRlcmVyLCBmb250X2ZhbWlsaWVzLCAx LCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1VCVElUTEVf VEVYVDoKKyAgICBjYXNlIFNVQlRJVExFX05PTkU6CisgICAgZGVmYXVsdDoKKyAgICAgICAgLyog ZG8gbm90aGluZyAqLyA7CisgICAgfQorCisgICAgY3R4LT5yZWFkb3JkZXIgPSAwOworCisgICAg cmV0dXJuIDA7Cit9CisKKyNpZiAhZGVmaW5lZChERUZBVUxUX1NVQlRJVExFX1RZUEUpCisjIGRl ZmluZSBERUZBVUxUX1NVQlRJVExFX1RZUEUgU1VCVElUTEVfQVNTCisjZW5kaWYKKyNpZiAhZGVm aW5lZChBU1NfV09SS0FST1VORCkKKyMgZGVmaW5lIEFTU19XT1JLQVJPVU5EIDEKKyNlbmRpZgor I2lmICFkZWZpbmVkKERFRkFVTFRfRk9OVF9GQU1JTFkpCisjIGlmIGRlZmluZWQoX1dJTjMyKQor IyAgZGVmaW5lIERFRkFVTFRfRk9OVF9GQU1JTFkgQVNTX0RFRkFVTFRfRk9OVAorIyBlbHNlCisj ICBkZWZpbmUgREVGQVVMVF9GT05UX0ZBTUlMWSAic2Fucy1zZXJpZiIKKyMgZW5kaWYKKyNlbmRp ZgorCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihBUklCQ2FwdGlvbkNvbnRleHQsIHgpCisj ZGVmaW5lIFNEIEFWX09QVF9GTEFHX1NVQlRJVExFX1BBUkFNIHwgQVZfT1BUX0ZMQUdfREVDT0RJ TkdfUEFSQU0KK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBvcHRpb25zW10gPSB7CisgICAgeyAic3Vi X3R5cGUiLCAic3VidGl0bGUgcmVuZGVyaW5nIHR5cGUiLAorICAgICAgT0ZGU0VUKHN1YnRpdGxl X3R5cGUpLCBBVl9PUFRfVFlQRV9JTlQsCisgICAgICB7IC5pNjQgPSBERUZBVUxUX1NVQlRJVExF X1RZUEUgfSwgU1VCVElUTEVfTk9ORSwgU1VCVElUTEVfQVNTLCBTRCwgInR5cGUiIH0sCisgICAg eyAibm9uZSIsICAgImRvIG5vdGhpbmciLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKKyAgICAgIHsg Lmk2NCA9IFNVQlRJVExFX05PTkUgfSwgLmZsYWdzID0gU0QsIC51bml0ID0gInR5cGUiIH0sCisg ICAgeyAiYml0bWFwIiwgImJpdG1hcCByZW5kZXJpbmciLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwK KyAgICAgIHsgLmk2NCA9IFNVQlRJVExFX0JJVE1BUCB9LCAuZmxhZ3MgPSBTRCwgLnVuaXQgPSAi dHlwZSIgfSwKKyAgICB7ICJ0ZXh0IiwgICAicGxhaW4gdGV4dCIsIDAsIEFWX09QVF9UWVBFX0NP TlNULAorICAgICAgeyAuaTY0ID0gU1VCVElUTEVfVEVYVCB9LCAuZmxhZ3MgPSBTRCwgLnVuaXQg PSAidHlwZSIgfSwKKyAgICB7ICJhc3MiLCAgICAiZm9ybWF0dGVkIHRleHQiLCAwLCBBVl9PUFRf VFlQRV9DT05TVCwKKyAgICAgIHsgLmk2NCA9IFNVQlRJVExFX0FTUyB9LCAuZmxhZ3MgPSBTRCwg LnVuaXQgPSAidHlwZSIgfSwKKyAgICB7ICJhc3Nfd29ya2Fyb3VuZCIsICJ3b3JrYXJvdW5kIG9m IEFTUyBzdWJ0aXRsZSBmb3IgcGxheWVycyB3aGljaCBjYW4ndCBoYW5kbGUgbXVsdGktcmVjdGFu Z2xlIChlLmcuLCBNUFYpIFthc3NdIiwKKyAgICAgIE9GRlNFVChhc3Nfd29ya2Fyb3VuZCksIEFW X09QVF9UWVBFX0JPT0wsIHsgLmk2NCA9IEFTU19XT1JLQVJPVU5EIH0sIDAsIDEsIFNEIH0sCisg ICAgeyAiZm9udCIsICJmb250IG5hbWUgW2FzcywgYml0bWFwXSIsCisgICAgICBPRkZTRVQoZm9u dF9uYW1lKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7IC5zdHIgPSBERUZBVUxUX0ZPTlRfRkFNSUxZ IH0sIDAsIDAsIFNEIH0sCisgICAgeyAicmVwbGFjZV9mdWxsd2lkdGhfYXNjaWkiLCAicmVwbGFj ZSBNU1ogZnVsbHdpZHRoIGFscGhhbnVtZXJpY3Mgd2l0aCBoYWxmd2lkdGggYWxwaGFudW1lcmlj cyBbYXNzLCBiaXRtYXBdIiwKKyAgICAgIE9GRlNFVChyZXBsYWNlX2Z1bGx3aWR0aF9hc2NpaSks IEFWX09QVF9UWVBFX0JPT0wsIHsgLmk2NCA9IDEgfSwgMCwgMSwgU0QgfSwKKyAgICB7ICJmb3Jj ZV9vdXRsaW5lX3RleHQiLCAiYWx3YXlzIHJlbmRlciBjaGFyYWN0ZXJzIHdpdGggb3V0bGluZSBb KGFzcyksIGJpdG1hcF0iLAorICAgICAgT0ZGU0VUKGZvcmNlX3N0cm9rZV90ZXh0KSwgQVZfT1BU X1RZUEVfQk9PTCwgeyAuaTY0ID0gMCB9LCAwLCAxLCBTRCB9LAorICAgIHsgImlnbm9yZV9iYWNr Z3JvdW5kIiwgImlnbm9yZSByZW5kZXJpbmcgY2FwdGlvbiBiYWNrZ3JvdW5kIFsoYXNzKSwgYml0 bWFwXSIsCisgICAgICBPRkZTRVQoaWdub3JlX2JhY2tncm91bmQpLCBBVl9PUFRfVFlQRV9CT09M LCB7IC5pNjQgPSAwIH0sIDAsIDEsIFNEIH0sCisgICAgeyAiaWdub3JlX3J1YnkiLCAiaWdub3Jl IHJ1YnktbGlrZSBjaGFyYWN0ZXJzIFthc3MsIGJpdG1hcF0iLAorICAgICAgT0ZGU0VUKGlnbm9y ZV9ydWJ5KSwgQVZfT1BUX1RZUEVfQk9PTCwgeyAuaTY0ID0gMCB9LCAwLCAxLCBTRCB9LAorICAg IHsgImZhZGVvdXQiLCAiZW5hYmxlIEZhZGVvdXQgW2FzcywgYml0bWFwXSIsCisgICAgICBPRkZT RVQoZmFkZW91dCksIEFWX09QVF9UWVBFX0JPT0wsIHsgLmk2NCA9IDAgfSwgMCwgMSwgU0QgfSwK KyAgICB7ICJvdXRsaW5lX3dpZHRoIiwgIm91dGxpbmUgd2lkdGggb2YgdGV4dCBbKGFzcyksIGJp dG1hcF0iLAorICAgICAgT0ZGU0VUKHN0cm9rZV93aWR0aCksIEFWX09QVF9UWVBFX0ZMT0FULCB7 IC5kYmwgPSAxLjUgfSwgMC4wLCAzLjAsIFNEIH0sCisgICAgeyAicmVwbGFjZV9kcmNzIiwgInJl cGxhY2Uga25vd24gRFJDUyBbYml0bWFwXSIsCisgICAgICBPRkZTRVQocmVwbGFjZV9kcmNzKSwg QVZfT1BUX1RZUEVfQk9PTCwgeyAuaTY0ID0gMSB9LCAwLCAxLCBTRCB9LAorICAgIHsgInJlbmRl cmluZ19iYWNrZW5kIiwgInRleHQgcmVuZGVyaW5nIGJhY2tlbmQgW2JpdG1hcF0iLAorICAgICAg T0ZGU0VUKHJlbmRlcmluZ19iYWNrZW5kKSwgQVZfT1BUX1RZUEVfSU5ULAorICAgICAgeyAuaTY0 ID0gQVJJQkNDX1RFWFRSRU5ERVJFUl9UWVBFX0FVVE8gfSwKKyAgICAgIEFSSUJDQ19URVhUUkVO REVSRVJfVFlQRV9BVVRPLCBBUklCQ0NfVEVYVFJFTkRFUkVSX1RZUEVfRlJFRVRZUEUsIFNELCAi cmVuZGVyZXIifSwKKyAgICB7ICJhdXRvIiwgICAiRGV0ZWN0IGFuZCBzZWxlY3QgVGV4dFJlbmRl cmVyIGF1dG9tYXRpY2FsbHkiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKKyAgICAgIHsgLmk2NCA9 IEFSSUJDQ19URVhUUkVOREVSRVJfVFlQRV9BVVRPIH0sIC5mbGFncyA9IFNELCAudW5pdCA9ICJy ZW5kZXJlciIgfSwKKyNpZmRlZiBBUklCQ0NfVVNFX0NPUkVURVhUCisgICAgeyAiY29yZXRleHQi LCAgICJBcHBsZSBDb3JlVGV4dCBBUEkgYmFzZWQgVGV4dFJlbmRlcmVyLiBBdmFpbGFibGUgb24g bWFjT1MgYW5kIGlPUy4iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKKyAgICAgIHsgLmk2NCA9IEFS SUJDQ19URVhUUkVOREVSRVJfVFlQRV9DT1JFVEVYVCB9LCAuZmxhZ3MgPSBTRCwgLnVuaXQgPSAi cmVuZGVyZXIiIH0sCisjZW5kaWYKKyNpZmRlZiBBUklCQ0NfVVNFX0RJUkVDVFdSSVRFCisgICAg eyAiZGlyZWN0d3JpdGUiLCAgICJEaXJlY3RXcml0ZSBBUEkgYmFzZWQgVGV4dFJlbmRlcmVyLiBB dmFpbGFibGUgb24gV2luZG93cyA3Ky4iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKKyAgICAgIHsg Lmk2NCA9IEFSSUJDQ19URVhUUkVOREVSRVJfVFlQRV9ESVJFQ1RXUklURSB9LCAuZmxhZ3MgPSBT RCwgLnVuaXQgPSAicmVuZGVyZXIiIH0sCisjZW5kaWYKKyNpZmRlZiBBUklCQ0NfVVNFX0ZSRUVU WVBFCisgICAgeyAiZnJlZXR5cGUiLCAgICJGcmVldHlwZSBiYXNlZCBUZXh0UmVuZGVyZXIuIEF2 YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULAorICAgICAg eyAuaTY0ID0gQVJJQkNDX1RFWFRSRU5ERVJFUl9UWVBFX0ZSRUVUWVBFIH0sIC5mbGFncyA9IFNE LCAudW5pdCA9ICJyZW5kZXJlciIgfSwKKyNlbmRpZgorICAgIHsgTlVMTCB9Cit9OworCitzdGF0 aWMgY29uc3QgQVZDbGFzcyBhcmliY2FwdGlvbl9jbGFzcyA9IHsKKyAgICAuY2xhc3NfbmFtZSA9 ICJhcmliY2FwdGlvbiBkZWNvZGVyIiwKKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRl bV9uYW1lLAorICAgIC5vcHRpb24gICAgID0gb3B0aW9ucywKKyAgICAudmVyc2lvbiAgICA9IExJ QkFWVVRJTF9WRVJTSU9OX0lOVCwKK307CisKK2NvbnN0IEZGQ29kZWMgZmZfYXJpYmNhcHRpb25f ZGVjb2RlciA9IHsKKyAgICAucC5uYW1lICAgICAgPSAiYXJpYmNhcHRpb24iLAorICAgIC5wLmxv bmdfbmFtZSA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJBUklCIFNURC1CMjQgY2FwdGlvbiBkZWNv ZGVyIiksCisgICAgLnAudHlwZSAgICAgID0gQVZNRURJQV9UWVBFX1NVQlRJVExFLAorICAgIC5w LmlkICAgICAgICA9IEFWX0NPREVDX0lEX0FSSUJfQ0FQVElPTiwKKyAgICAucHJpdl9kYXRhX3Np emUgPSBzaXplb2YoQVJJQkNhcHRpb25Db250ZXh0KSwKKyAgICAuaW5pdCAgICAgID0gYXJpYmNh cHRpb25faW5pdCwKKyAgICAuY2xvc2UgICAgID0gYXJpYmNhcHRpb25fY2xvc2UsCisgICAgRkZf Q09ERUNfREVDT0RFX1NVQl9DQihhcmliY2FwdGlvbl9kZWNvZGUpLAorICAgIC5mbHVzaCAgICAg PSBhcmliY2FwdGlvbl9mbHVzaCwKKyAgICAucC5wcml2X2NsYXNzPSAmYXJpYmNhcHRpb25fY2xh c3MsCisgICAgLmNhcHNfaW50ZXJuYWwgPSBGRl9DT0RFQ19DQVBfSU5JVF9USFJFQURTQUZFLAor fTsKLS0gCjIuMzAuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpo dHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vi c2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBm Zm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=