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 8D0F34CBFA for ; Thu, 15 Aug 2024 08:46:06 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 90CBC68DAD4; Thu, 15 Aug 2024 11:46:03 +0300 (EEST) Received: from mail-vk1-f175.google.com (mail-vk1-f175.google.com [209.85.221.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CE8AC68D726 for ; Thu, 15 Aug 2024 11:45:55 +0300 (EEST) Received: by mail-vk1-f175.google.com with SMTP id 71dfb90a1353d-4f52bd5b555so422715e0c.1 for ; Thu, 15 Aug 2024 01:45:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723711554; x=1724316354; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=lQ0rRVoPgx3aRM2g6maC3v9MjeflropHwEX3toVK+xk=; b=l/8pCnSgLa1PgG8zOfh5ySOzw7iroL9MdWd3kJPiuwDMFxAsaV0lir2Rfw/MG+e9Zd IslQvH9mmeu3h4/uGU37Q+Fb5YMxL0aBrG7yPgULeN5o2Tyth827O0lsykUxX+762lYV xQu0eAODw5SC8Lulva55Lwry1p9CkkM8qHBK5uL0cOfeTZnZap0w814dEr5Uery7uUeI ckrZVfITrHlTpUTEP1KK1oJZTy+1k1ioRQEDAFzFiLTtTC4KPqigy7kcTFHbplha75qS NDHzwkjDrwMtgJwZAcx/lA2QFF/qxpsSUL4m2xtJxMTDXG3wdTwYM2SmWpW1XNNxXgjH h1yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723711554; x=1724316354; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=lQ0rRVoPgx3aRM2g6maC3v9MjeflropHwEX3toVK+xk=; b=pVPYyGBJDaGgy8vWCQ7m+wbL4hTQys/KVPAEOxYrX40PetPBhOF6EKgygORk9+wG27 4EdA5BVZ6z1M2tvRt1zIFyR9mZHVgOugQmWmOCc4e+8GXEadpUla3ksOVLVobY/SqkGl uLBF90m1WXzPy3hRV5+harP92XpBXGXA6I7KKSzu6jHIMipl1H5OQJ6QBR/veJ+z7vd+ iO1NOvJ171C3V9eD6lMutK7X9hJm3YWOdXm2XpiCbSKFCzsLQvdX3Seo7uyg02dEe/+I fvX4HZHxZqvqde9ZJ5/8FDRRLCcF01EWZ7PTGd2yppXFB7g2Zs6hYp82uyMd8JUZru0p LZ2g== X-Gm-Message-State: AOJu0YyjypBm/laEsoRUW+q5JclyP9K61HHhsB32CbCVsjS443F/APhh BJcB6wNWc3MU6eac3N+0TPql2rYBEopslLh60fMNJxA8ppev6gYn6dnsXirmx8fquEYGMGXul1Z osJeuwcxjellzzVbHSkQmcAnzr0mvv6WCMKk= X-Google-Smtp-Source: AGHT+IGKo/+1Sr9CdMdxjRltzmytlVE4xuw2xLWvk/8ZU1y1bwDGe14zuKAWZL9s6RZ1idzru+AA78+OVqdng7pwiy8= X-Received: by 2002:a05:6122:7ca:b0:4f5:d98:5ec3 with SMTP id 71dfb90a1353d-4fc590af5b7mr1294707e0c.6.1723711552699; Thu, 15 Aug 2024 01:45:52 -0700 (PDT) MIME-Version: 1.0 References: <20240814121856.757459-3-mozil.petryk@gmail.com> In-Reply-To: <20240814121856.757459-3-mozil.petryk@gmail.com> From: Petro Mozil Date: Thu, 15 Aug 2024 08:45:40 +0000 Message-ID: To: ffmpeg-devel@ffmpeg.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH 2/2] Add vulkan dirac hwaccel X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: UkU6IFtQQVRDSF0gTW92ZSB2dWxrYW5fc3BpcnYuaCBhbmQgZGVwcyB0byBsYXZ1dGlsCgpNb3Zl ZCBzcGlydl9jb21waWxlciBpbnRvIGxhdnV0aWwgdG8gYXZvaWQgYW55IGxpbmtpbmcgZXJyb3Jz LgpJdCdzIG5vdyB1c2VkIGluIGxhdmMgYW5kIGxhdmZpLCBzaG91bGQgcHJvYmFibHkgYmUgbW92 ZWQgdG8gbGF2dXRpbAoKU2lnbmVkLW9mZi1ieTogUGV0cm8gTW96aWwgPG1vemlsLnBldHJ5a0Bn bWFpbC5jb20+Ci0tLQogY29uZmlndXJlICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBsaWJh dmNvZGVjL01ha2VmaWxlICAgICAgICAgIHwgICA2ICsKIGxpYmF2Y29kZWMvdnVsa2FuX2RpcmFj LmMgICAgfCAgIDIgKy0KIGxpYmF2Y29kZWMvdnVsa2FuX2dsc2xhbmcuYyAgfCAgMTkgKysrCiBs aWJhdmNvZGVjL3Z1bGthbl9zaGFkZXJjLmMgIHwgIDE5ICsrKwogbGliYXZjb2RlYy92dWxrYW5f c3BpcnYuaCAgICB8ICAxOSArKysKIGxpYmF2ZmlsdGVyL3Z1bGthbl9nbHNsYW5nLmMgfCAyNjYg Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYmF2ZmlsdGVyL3Z1bGthbl9zaGFk ZXJjLmMgfCAxMTEgKy0tLS0tLS0tLS0tLS0KIGxpYmF2ZmlsdGVyL3Z1bGthbl9zcGlydi5oICAg fCAgMjggKy0tLQogbGliYXZ1dGlsL01ha2VmaWxlICAgICAgICAgICB8ICAgNSArCiBsaWJhdnV0 aWwvdnVsa2FuX2dsc2xhbmcuYyAgIHwgMjgzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBsaWJhdnV0aWwvdnVsa2FuX3NoYWRlcmMuYyAgIHwgMTI4ICsrKysrKysrKysrKysr KysKIGxpYmF2dXRpbC92dWxrYW5fc3BpcnYuaCAgICAgfCAgNDUgKysrKysrCiAxMyBmaWxlcyBj aGFuZ2VkLCA1MzAgaW5zZXJ0aW9ucygrKSwgNDAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuX2dsc2xhbmcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp YmF2Y29kZWMvdnVsa2FuX3NoYWRlcmMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMv dnVsa2FuX3NwaXJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvdnVsa2FuX2dsc2xh bmcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2dXRpbC92dWxrYW5fc2hhZGVyYy5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZ1dGlsL3Z1bGthbl9zcGlydi5oCgpkaWZmIC0tZ2l0IGEvY29u ZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDM3MTc4ZDdkODEuLjhjODNhYjY1MTEgMTAwNzU1Ci0t LSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTMxNzAsNiArMzE3MCw4IEBAIGF2MV92 ZHBhdV9od2FjY2VsX2RlcHM9InZkcGF1IFZkcFBpY3R1cmVJbmZvQVYxIgogYXYxX3ZkcGF1X2h3 YWNjZWxfc2VsZWN0PSJhdjFfZGVjb2RlciIKIGF2MV92dWxrYW5faHdhY2NlbF9kZXBzPSJ2dWxr YW4iCiBhdjFfdnVsa2FuX2h3YWNjZWxfc2VsZWN0PSJhdjFfZGVjb2RlciIKK2RpcmFjX3Z1bGth bl9od2FjY2VsX2RlcHM9InZ1bGthbiBzcGlydl9jb21waWxlciIKK2RpcmFjX3Z1bGthbl9od2Fj Y2VsX3NlbGVjdD0iZGlyYWNfZGVjb2RlciIKIGgyNjNfdmFhcGlfaHdhY2NlbF9kZXBzPSJ2YWFw aSIKIGgyNjNfdmFhcGlfaHdhY2NlbF9zZWxlY3Q9ImgyNjNfZGVjb2RlciIKIGgyNjNfdmlkZW90 b29sYm94X2h3YWNjZWxfZGVwcz0idmlkZW90b29sYm94IgpkaWZmIC0tZ2l0IGEvbGliYXZjb2Rl Yy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKaW5kZXggODVhZjMxZjRmMC4uNGM5MTIx MDNhMCAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL01h a2VmaWxlCkBAIC05OTQsNiArOTk0LDEwIEBAIE9CSlMtJChDT05GSUdfVklERU9UT09MQk9YKSAg ICAgICAgICAgICAgICs9CnZpZGVvdG9vbGJveC5vCiBPQkpTLSQoQ09ORklHX1ZEUEFVKSAgICAg ICAgICAgICAgICAgICAgICArPSB2ZHBhdS5vCiBPQkpTLSQoQ09ORklHX1ZVTEtBTikgICAgICAg ICAgICAgICAgICAgICArPSB2dWxrYW4ubyB2dWxrYW5fdmlkZW8ubwoKKyMgdnVsa2FuIGxpYnMK K09CSlMtJChDT05GSUdfTElCR0xTTEFORykgICAgICAgICAgICAgICAgICAgICs9IHZ1bGthbl9n bHNsYW5nLm8KK09CSlMtJChDT05GSUdfTElCU0hBREVSQykgICAgICAgICAgICAgICAgICAgICs9 IHZ1bGthbl9zaGFkZXJjLm8KKwogT0JKUy0kKENPTkZJR19BVjFfRDNEMTFWQV9IV0FDQ0VMKSAg ICAgICAgKz0gZHh2YTJfYXYxLm8KIE9CSlMtJChDT05GSUdfQVYxX0RYVkEyX0hXQUNDRUwpICAg ICAgICAgICs9IGR4dmEyX2F2MS5vCiBPQkpTLSQoQ09ORklHX0FWMV9EM0QxMlZBX0hXQUNDRUwp ICAgICAgICArPSBkeHZhMl9hdjEubyBkM2QxMnZhX2F2MS5vCkBAIC0xMjYzLDYgKzEyNjcsOCBA QCBTS0lQSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICArPQolX3RhYmxlZ2VuLmgg ICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhYWNlbmNfcXVhbnRpemF0aW9uX21pc2MuaCAgICBcCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBiaXRzdHJlYW1fdGVtcGxhdGUuaCAgICAgICAgICBcCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKEFSQ0gpL3ZweF9hcml0 aC5oICAgICAgICAgICBcCitTS0lQSEVBREVSUy0kKENPTkZJR19MSUJTSEFERVJDKSAgICAgICAg ICAgICArPSB2dWxrYW5fc3BpcnYuaAorU0tJUEhFQURFUlMtJChDT05GSUdfTElCR0xTTEFORykg ICAgICAgICAgICAgKz0gdnVsa2FuX3NwaXJ2LmgKCiBTS0lQSEVBREVSUy0kKENPTkZJR19BTUYp ICAgICAgICAgICAgICArPSBhbWZlbmMuaAogU0tJUEhFQURFUlMtJChDT05GSUdfRDNEMTFWQSkg ICAgICAgICAgKz0gZDNkMTF2YS5oIGR4dmEyX2ludGVybmFsLmgKZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvdnVsa2FuX2RpcmFjLmMgYi9saWJhdmNvZGVjL3Z1bGthbl9kaXJhYy5jCmluZGV4IGJi OGI3NTk1N2QuLmI1Nzg1ZjdmYzAgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnVsa2FuX2RpcmFj LmMKKysrIGIvbGliYXZjb2RlYy92dWxrYW5fZGlyYWMuYwpAQCAtMTksNyArMTksNyBAQAogI2lu Y2x1ZGUgImRpcmFjZGVjLmgiCiAjaW5jbHVkZSAidnVsa2FuLmgiCiAjaW5jbHVkZSAidnVsa2Fu X2RlY29kZS5oIgotI2luY2x1ZGUgImxpYmF2ZmlsdGVyL3Z1bGthbl9zcGlydi5oIgorI2luY2x1 ZGUgImxpYmF2Y29kZWMvdnVsa2FuX3NwaXJ2LmgiCiAjaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGth bl9sb2FkZXIuaCIKICNpbmNsdWRlICJsaWJhdmNvZGVjL3B0aHJlYWRfaW50ZXJuYWwuaCIKICNp bmNsdWRlICJsaWJhdmNvZGVjL2RpcmFjX3ZsYy5jIgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92 dWxrYW5fZ2xzbGFuZy5jIGIvbGliYXZjb2RlYy92dWxrYW5fZ2xzbGFuZy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjlhYTQxNTY3YTMKLS0tIC9kZXYvbnVsbAorKysg Yi9saWJhdmNvZGVjL3Z1bGthbl9nbHNsYW5nLmMKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu c2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEKMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGth bl9nbHNsYW5nLmMiCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbl9zaGFkZXJjLmMgYi9s aWJhdmNvZGVjL3Z1bGthbl9zaGFkZXJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uOWY2MGJmNGRmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnVsa2Fu X3NoYWRlcmMuYwpAQCAtMCwwICsxLDE5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQowMjExMC0xMzAx IFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvdnVsa2FuX3NoYWRlcmMuYyIKZGlmZiAt LWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuX3NwaXJ2LmggYi9saWJhdmNvZGVjL3Z1bGthbl9zcGly di5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjkzNTg0NzIwZWUKLS0t IC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL3Z1bGthbl9zcGlydi5oCkBAIC0wLDAgKzEsMTkg QEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BCjAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxp YmF2dXRpbC92dWxrYW5fc3BpcnYuaCIKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3Z1bGthbl9n bHNsYW5nLmMgYi9saWJhdmZpbHRlci92dWxrYW5fZ2xzbGFuZy5jCmluZGV4IDg0NWE1MzBlZTAu LjlhYTQxNTY3YTMgMTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL3Z1bGthbl9nbHNsYW5nLmMKKysr IGIvbGliYXZmaWx0ZXIvdnVsa2FuX2dsc2xhbmcuYwpAQCAtMTYsMjY4ICsxNiw0IEBACiAgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BCjAyMTEwLTEzMDEgVVNBCiAgKi8KCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi0jaW5jbHVk ZSA8Z2xzbGFuZy9idWlsZF9pbmZvLmg+Ci0jaW5jbHVkZSA8Z2xzbGFuZy9JbmNsdWRlL2dsc2xh bmdfY19pbnRlcmZhY2UuaD4KLQotI2luY2x1ZGUgInZ1bGthbl9zcGlydi5oIgotI2luY2x1ZGUg ImxpYmF2dXRpbC9tZW0uaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKLQotc3Rh dGljIHB0aHJlYWRfbXV0ZXhfdCBnbHNsY19tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTEla RVI7Ci1zdGF0aWMgaW50IGdsc2xjX3JlZmNvdW50ID0gMDsKLQotc3RhdGljIGNvbnN0IGdsc2xh bmdfcmVzb3VyY2VfdCBnbHNsY19yZXNvdXJjZV9saW1pdHMgPSB7Ci0gICAgLm1heF9saWdodHMg PSAzMiwKLSAgICAubWF4X2NsaXBfcGxhbmVzID0gNiwKLSAgICAubWF4X3RleHR1cmVfdW5pdHMg PSAzMiwKLSAgICAubWF4X3RleHR1cmVfY29vcmRzID0gMzIsCi0gICAgLm1heF92ZXJ0ZXhfYXR0 cmlicyA9IDY0LAotICAgIC5tYXhfdmVydGV4X3VuaWZvcm1fY29tcG9uZW50cyA9IDQwOTYsCi0g ICAgLm1heF92YXJ5aW5nX2Zsb2F0cyA9IDY0LAotICAgIC5tYXhfdmVydGV4X3RleHR1cmVfaW1h Z2VfdW5pdHMgPSAzMiwKLSAgICAubWF4X2NvbWJpbmVkX3RleHR1cmVfaW1hZ2VfdW5pdHMgPSA4 MCwKLSAgICAubWF4X3RleHR1cmVfaW1hZ2VfdW5pdHMgPSAzMiwKLSAgICAubWF4X2ZyYWdtZW50 X3VuaWZvcm1fY29tcG9uZW50cyA9IDQwOTYsCi0gICAgLm1heF9kcmF3X2J1ZmZlcnMgPSAzMiwK LSAgICAubWF4X3ZlcnRleF91bmlmb3JtX3ZlY3RvcnMgPSAxMjgsCi0gICAgLm1heF92YXJ5aW5n X3ZlY3RvcnMgPSA4LAotICAgIC5tYXhfZnJhZ21lbnRfdW5pZm9ybV92ZWN0b3JzID0gMTYsCi0g ICAgLm1heF92ZXJ0ZXhfb3V0cHV0X3ZlY3RvcnMgPSAxNiwKLSAgICAubWF4X2ZyYWdtZW50X2lu cHV0X3ZlY3RvcnMgPSAxNSwKLSAgICAubWluX3Byb2dyYW1fdGV4ZWxfb2Zmc2V0ID0gLTgsCi0g ICAgLm1heF9wcm9ncmFtX3RleGVsX29mZnNldCA9IDcsCi0gICAgLm1heF9jbGlwX2Rpc3RhbmNl cyA9IDgsCi0gICAgLm1heF9jb21wdXRlX3dvcmtfZ3JvdXBfY291bnRfeCA9IDY1NTM1LAotICAg IC5tYXhfY29tcHV0ZV93b3JrX2dyb3VwX2NvdW50X3kgPSA2NTUzNSwKLSAgICAubWF4X2NvbXB1 dGVfd29ya19ncm91cF9jb3VudF96ID0gNjU1MzUsCi0gICAgLm1heF9jb21wdXRlX3dvcmtfZ3Jv dXBfc2l6ZV94ID0gMTAyNCwKLSAgICAubWF4X2NvbXB1dGVfd29ya19ncm91cF9zaXplX3kgPSAx MDI0LAotICAgIC5tYXhfY29tcHV0ZV93b3JrX2dyb3VwX3NpemVfeiA9IDY0LAotICAgIC5tYXhf Y29tcHV0ZV91bmlmb3JtX2NvbXBvbmVudHMgPSAxMDI0LAotICAgIC5tYXhfY29tcHV0ZV90ZXh0 dXJlX2ltYWdlX3VuaXRzID0gMTYsCi0gICAgLm1heF9jb21wdXRlX2ltYWdlX3VuaWZvcm1zID0g OCwKLSAgICAubWF4X2NvbXB1dGVfYXRvbWljX2NvdW50ZXJzID0gOCwKLSAgICAubWF4X2NvbXB1 dGVfYXRvbWljX2NvdW50ZXJfYnVmZmVycyA9IDEsCi0gICAgLm1heF92YXJ5aW5nX2NvbXBvbmVu dHMgPSA2MCwKLSAgICAubWF4X3ZlcnRleF9vdXRwdXRfY29tcG9uZW50cyA9IDY0LAotICAgIC5t YXhfZ2VvbWV0cnlfaW5wdXRfY29tcG9uZW50cyA9IDY0LAotICAgIC5tYXhfZ2VvbWV0cnlfb3V0 cHV0X2NvbXBvbmVudHMgPSAxMjgsCi0gICAgLm1heF9mcmFnbWVudF9pbnB1dF9jb21wb25lbnRz ID0gMTI4LAotICAgIC5tYXhfaW1hZ2VfdW5pdHMgPSA4LAotICAgIC5tYXhfY29tYmluZWRfaW1h Z2VfdW5pdHNfYW5kX2ZyYWdtZW50X291dHB1dHMgPSA4LAotICAgIC5tYXhfY29tYmluZWRfc2hh ZGVyX291dHB1dF9yZXNvdXJjZXMgPSA4LAotICAgIC5tYXhfaW1hZ2Vfc2FtcGxlcyA9IDAsCi0g ICAgLm1heF92ZXJ0ZXhfaW1hZ2VfdW5pZm9ybXMgPSAwLAotICAgIC5tYXhfdGVzc19jb250cm9s X2ltYWdlX3VuaWZvcm1zID0gMCwKLSAgICAubWF4X3Rlc3NfZXZhbHVhdGlvbl9pbWFnZV91bmlm b3JtcyA9IDAsCi0gICAgLm1heF9nZW9tZXRyeV9pbWFnZV91bmlmb3JtcyA9IDAsCi0gICAgLm1h eF9mcmFnbWVudF9pbWFnZV91bmlmb3JtcyA9IDgsCi0gICAgLm1heF9jb21iaW5lZF9pbWFnZV91 bmlmb3JtcyA9IDgsCi0gICAgLm1heF9nZW9tZXRyeV90ZXh0dXJlX2ltYWdlX3VuaXRzID0gMTYs Ci0gICAgLm1heF9nZW9tZXRyeV9vdXRwdXRfdmVydGljZXMgPSAyNTYsCi0gICAgLm1heF9nZW9t ZXRyeV90b3RhbF9vdXRwdXRfY29tcG9uZW50cyA9IDEwMjQsCi0gICAgLm1heF9nZW9tZXRyeV91 bmlmb3JtX2NvbXBvbmVudHMgPSAxMDI0LAotICAgIC5tYXhfZ2VvbWV0cnlfdmFyeWluZ19jb21w b25lbnRzID0gNjQsCi0gICAgLm1heF90ZXNzX2NvbnRyb2xfaW5wdXRfY29tcG9uZW50cyA9IDEy OCwKLSAgICAubWF4X3Rlc3NfY29udHJvbF9vdXRwdXRfY29tcG9uZW50cyA9IDEyOCwKLSAgICAu bWF4X3Rlc3NfY29udHJvbF90ZXh0dXJlX2ltYWdlX3VuaXRzID0gMTYsCi0gICAgLm1heF90ZXNz X2NvbnRyb2xfdW5pZm9ybV9jb21wb25lbnRzID0gMTAyNCwKLSAgICAubWF4X3Rlc3NfY29udHJv bF90b3RhbF9vdXRwdXRfY29tcG9uZW50cyA9IDQwOTYsCi0gICAgLm1heF90ZXNzX2V2YWx1YXRp b25faW5wdXRfY29tcG9uZW50cyA9IDEyOCwKLSAgICAubWF4X3Rlc3NfZXZhbHVhdGlvbl9vdXRw dXRfY29tcG9uZW50cyA9IDEyOCwKLSAgICAubWF4X3Rlc3NfZXZhbHVhdGlvbl90ZXh0dXJlX2lt YWdlX3VuaXRzID0gMTYsCi0gICAgLm1heF90ZXNzX2V2YWx1YXRpb25fdW5pZm9ybV9jb21wb25l bnRzID0gMTAyNCwKLSAgICAubWF4X3Rlc3NfcGF0Y2hfY29tcG9uZW50cyA9IDEyMCwKLSAgICAu bWF4X3BhdGNoX3ZlcnRpY2VzID0gMzIsCi0gICAgLm1heF90ZXNzX2dlbl9sZXZlbCA9IDY0LAot ICAgIC5tYXhfdmlld3BvcnRzID0gMTYsCi0gICAgLm1heF92ZXJ0ZXhfYXRvbWljX2NvdW50ZXJz ID0gMCwKLSAgICAubWF4X3Rlc3NfY29udHJvbF9hdG9taWNfY291bnRlcnMgPSAwLAotICAgIC5t YXhfdGVzc19ldmFsdWF0aW9uX2F0b21pY19jb3VudGVycyA9IDAsCi0gICAgLm1heF9nZW9tZXRy eV9hdG9taWNfY291bnRlcnMgPSAwLAotICAgIC5tYXhfZnJhZ21lbnRfYXRvbWljX2NvdW50ZXJz ID0gOCwKLSAgICAubWF4X2NvbWJpbmVkX2F0b21pY19jb3VudGVycyA9IDgsCi0gICAgLm1heF9h dG9taWNfY291bnRlcl9iaW5kaW5ncyA9IDEsCi0gICAgLm1heF92ZXJ0ZXhfYXRvbWljX2NvdW50 ZXJfYnVmZmVycyA9IDAsCi0gICAgLm1heF90ZXNzX2NvbnRyb2xfYXRvbWljX2NvdW50ZXJfYnVm ZmVycyA9IDAsCi0gICAgLm1heF90ZXNzX2V2YWx1YXRpb25fYXRvbWljX2NvdW50ZXJfYnVmZmVy cyA9IDAsCi0gICAgLm1heF9nZW9tZXRyeV9hdG9taWNfY291bnRlcl9idWZmZXJzID0gMCwKLSAg ICAubWF4X2ZyYWdtZW50X2F0b21pY19jb3VudGVyX2J1ZmZlcnMgPSAxLAotICAgIC5tYXhfY29t YmluZWRfYXRvbWljX2NvdW50ZXJfYnVmZmVycyA9IDEsCi0gICAgLm1heF9hdG9taWNfY291bnRl cl9idWZmZXJfc2l6ZSA9IDE2Mzg0LAotICAgIC5tYXhfdHJhbnNmb3JtX2ZlZWRiYWNrX2J1ZmZl cnMgPSA0LAotICAgIC5tYXhfdHJhbnNmb3JtX2ZlZWRiYWNrX2ludGVybGVhdmVkX2NvbXBvbmVu dHMgPSA2NCwKLSAgICAubWF4X2N1bGxfZGlzdGFuY2VzID0gOCwKLSAgICAubWF4X2NvbWJpbmVk X2NsaXBfYW5kX2N1bGxfZGlzdGFuY2VzID0gOCwKLSAgICAubWF4X3NhbXBsZXMgPSA0LAotICAg IC5tYXhfbWVzaF9vdXRwdXRfdmVydGljZXNfbnYgPSAyNTYsCi0gICAgLm1heF9tZXNoX291dHB1 dF9wcmltaXRpdmVzX252ID0gNTEyLAotICAgIC5tYXhfbWVzaF93b3JrX2dyb3VwX3NpemVfeF9u diA9IDMyLAotICAgIC5tYXhfbWVzaF93b3JrX2dyb3VwX3NpemVfeV9udiA9IDEsCi0gICAgLm1h eF9tZXNoX3dvcmtfZ3JvdXBfc2l6ZV96X252ID0gMSwKLSAgICAubWF4X3Rhc2tfd29ya19ncm91 cF9zaXplX3hfbnYgPSAzMiwKLSAgICAubWF4X3Rhc2tfd29ya19ncm91cF9zaXplX3lfbnYgPSAx LAotICAgIC5tYXhfdGFza193b3JrX2dyb3VwX3NpemVfel9udiA9IDEsCi0gICAgLm1heF9tZXNo X3ZpZXdfY291bnRfbnYgPSA0LAotICAgIC5tYXhEdWFsU291cmNlRHJhd0J1ZmZlcnNFWFQgPSAx LAotCi0gICAgLmxpbWl0cyA9IHsKLSAgICAgICAgLm5vbl9pbmR1Y3RpdmVfZm9yX2xvb3BzID0g MSwKLSAgICAgICAgLndoaWxlX2xvb3BzID0gMSwKLSAgICAgICAgLmRvX3doaWxlX2xvb3BzID0g MSwKLSAgICAgICAgLmdlbmVyYWxfdW5pZm9ybV9pbmRleGluZyA9IDEsCi0gICAgICAgIC5nZW5l cmFsX2F0dHJpYnV0ZV9tYXRyaXhfdmVjdG9yX2luZGV4aW5nID0gMSwKLSAgICAgICAgLmdlbmVy YWxfdmFyeWluZ19pbmRleGluZyA9IDEsCi0gICAgICAgIC5nZW5lcmFsX3NhbXBsZXJfaW5kZXhp bmcgPSAxLAotICAgICAgICAuZ2VuZXJhbF92YXJpYWJsZV9pbmRleGluZyA9IDEsCi0gICAgICAg IC5nZW5lcmFsX2NvbnN0YW50X21hdHJpeF92ZWN0b3JfaW5kZXhpbmcgPSAxLAotICAgIH0KLX07 Ci0KLXN0YXRpYyBpbnQgZ2xzbGNfc2hhZGVyX2NvbXBpbGUoRkZWa1NQSVJWQ29tcGlsZXIgKmN0 eCwgdm9pZCAqYXZjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtTUElS VlNoYWRlciAqc2hkLCB1aW50OF90ICoqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90ICpzaXplLCBjb25zdCBjaGFyICplbnRyeXBvaW50LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlKQotewotICAgIGNvbnN0IGNoYXIgKm1l c3NhZ2VzOwotICAgIGdsc2xhbmdfc2hhZGVyX3QgKmdsc2xjX3NoYWRlcjsKLSAgICBnbHNsYW5n X3Byb2dyYW1fdCAqZ2xzbGNfcHJvZ3JhbTsKLQotICAgIHN0YXRpYyBjb25zdCBnbHNsYW5nX3N0 YWdlX3QgZ2xzbGNfc3RhZ2VbXSA9IHsKLSAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9WRVJURVhf QklUXSAgID0gR0xTTEFOR19TVEFHRV9WRVJURVgsCi0gICAgICAgIFtWS19TSEFERVJfU1RBR0Vf RlJBR01FTlRfQklUXSA9IEdMU0xBTkdfU1RBR0VfRlJBR01FTlQsCi0gICAgICAgIFtWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVRdICA9IEdMU0xBTkdfU1RBR0VfQ09NUFVURSwKLSAgICB9Owot Ci0gICAgY29uc3QgZ2xzbGFuZ19pbnB1dF90IGdsc2xjX2lucHV0ID0gewotICAgICAgICAubGFu Z3VhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgID0gR0xTTEFOR19TT1VSQ0VfR0xTTCwKLSAg ICAgICAgLnN0YWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9Cmdsc2xjX3N0YWdlW3No ZC0+c2hhZGVyLnN0YWdlXSwKLSAgICAgICAgLmNsaWVudCAgICAgICAgICAgICAgICAgICAgICAg ICAgICA9IEdMU0xBTkdfQ0xJRU5UX1ZVTEtBTiwKLSAgICAgICAgLyogR0xTTEFOR19UQVJHRVRf VlVMS0FOXzFfMiBiZWZvcmUgMTEuNiByZXN1bHRlZCBpbiB0YXJnZXRpbmcgMS4wCiovCi0jaWYg KCgoR0xTTEFOR19WRVJTSU9OX01BSk9SKSA+IDExKSB8fCAoKEdMU0xBTkdfVkVSU0lPTl9NQUpP UikgPT0gMTEgJiYgXAotICAgICgoKEdMU0xBTkdfVkVSU0lPTl9NSU5PUikgPiAgNikgfHwgKChH TFNMQU5HX1ZFUlNJT05fTUlOT1IpID09ICA2ICYmIFwKLSAgICAgKChHTFNMQU5HX1ZFUlNJT05f UEFUQ0gpID4gMCkpKSkpCi0gICAgICAgIC5jbGllbnRfdmVyc2lvbiAgICAgICAgICAgICAgICAg ICAgPSBHTFNMQU5HX1RBUkdFVF9WVUxLQU5fMV8yLAotICAgICAgICAudGFyZ2V0X2xhbmd1YWdl X3ZlcnNpb24gICAgICAgICAgID0gR0xTTEFOR19UQVJHRVRfU1BWXzFfNSwKLSNlbHNlCi0gICAg ICAgIC5jbGllbnRfdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgPSBHTFNMQU5HX1RBUkdFVF9W VUxLQU5fMV8xLAotICAgICAgICAudGFyZ2V0X2xhbmd1YWdlX3ZlcnNpb24gICAgICAgICAgID0g R0xTTEFOR19UQVJHRVRfU1BWXzFfMywKLSNlbmRpZgotICAgICAgICAudGFyZ2V0X2xhbmd1YWdl ICAgICAgICAgICAgICAgICAgID0gR0xTTEFOR19UQVJHRVRfU1BWLAotICAgICAgICAuY29kZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2hkLT5zcmMuc3RyLAotICAgICAgICAuZGVm YXVsdF92ZXJzaW9uICAgICAgICAgICAgICAgICAgID0gNDYwLAotICAgICAgICAuZGVmYXVsdF9w cm9maWxlICAgICAgICAgICAgICAgICAgID0gR0xTTEFOR19OT19QUk9GSUxFLAotICAgICAgICAu Zm9yY2VfZGVmYXVsdF92ZXJzaW9uX2FuZF9wcm9maWxlID0gZmFsc2UsCi0gICAgICAgIC5mb3J3 YXJkX2NvbXBhdGlibGUgICAgICAgICAgICAgICAgPSBmYWxzZSwKLSAgICAgICAgLm1lc3NhZ2Vz ICAgICAgICAgICAgICAgICAgICAgICAgICA9IEdMU0xBTkdfTVNHX0RFRkFVTFRfQklULAotICAg ICAgICAucmVzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgID0gJmdsc2xjX3Jlc291cmNl X2xpbWl0cywKLSAgICB9OwotCi0gICAgYXZfYXNzZXJ0MChnbHNsY19yZWZjb3VudCk7Ci0KLSAg ICAqb3BhcXVlID0gTlVMTDsKLQotICAgIGlmICghKGdsc2xjX3NoYWRlciA9IGdsc2xhbmdfc2hh ZGVyX2NyZWF0ZSgmZ2xzbGNfaW5wdXQpKSkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKLQotICAgIGlmICghZ2xzbGFuZ19zaGFkZXJfcHJlcHJvY2VzcyhnbHNsY19zaGFkZXIsICZn bHNsY19pbnB1dCkpIHsKLSAgICAgICAgZmZfdmtfc2hhZGVyX3ByaW50KGF2Y3R4LCBzaGQsIEFW X0xPR19XQVJOSU5HKTsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gcHJlcHJvY2VzcyBzaGFkZXI6ICVzCiglcykhXG4iLAotICAgICAgICAgICAgICAgZ2xz bGFuZ19zaGFkZXJfZ2V0X2luZm9fbG9nKGdsc2xjX3NoYWRlciksCi0gICAgICAgICAgICAgICBn bHNsYW5nX3NoYWRlcl9nZXRfaW5mb19kZWJ1Z19sb2coZ2xzbGNfc2hhZGVyKSk7Ci0gICAgICAg IGdsc2xhbmdfc2hhZGVyX2RlbGV0ZShnbHNsY19zaGFkZXIpOwotICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOwotICAgIH0KLQotICAgIGlmICghZ2xzbGFuZ19zaGFkZXJfcGFyc2UoZ2xz bGNfc2hhZGVyLCAmZ2xzbGNfaW5wdXQpKSB7Ci0gICAgICAgIGZmX3ZrX3NoYWRlcl9wcmludChh dmN0eCwgc2hkLCBBVl9MT0dfV0FSTklORyk7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiVW5hYmxlIHRvIHBhcnNlIHNoYWRlcjogJXMgKCVzKSFcbiIsCi0gICAgICAgICAg ICAgICBnbHNsYW5nX3NoYWRlcl9nZXRfaW5mb19sb2coZ2xzbGNfc2hhZGVyKSwKLSAgICAgICAg ICAgICAgIGdsc2xhbmdfc2hhZGVyX2dldF9pbmZvX2RlYnVnX2xvZyhnbHNsY19zaGFkZXIpKTsK LSAgICAgICAgZ2xzbGFuZ19zaGFkZXJfZGVsZXRlKGdsc2xjX3NoYWRlcik7Ci0gICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgfQotCi0gICAgaWYgKCEoZ2xzbGNfcHJvZ3JhbSA9 IGdsc2xhbmdfcHJvZ3JhbV9jcmVhdGUoKSkpIHsKLSAgICAgICAgZ2xzbGFuZ19zaGFkZXJfZGVs ZXRlKGdsc2xjX3NoYWRlcik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAg fQotCi0gICAgZ2xzbGFuZ19wcm9ncmFtX2FkZF9zaGFkZXIoZ2xzbGNfcHJvZ3JhbSwgZ2xzbGNf c2hhZGVyKTsKLQotICAgIGlmICghZ2xzbGFuZ19wcm9ncmFtX2xpbmsoZ2xzbGNfcHJvZ3JhbSwg R0xTTEFOR19NU0dfU1BWX1JVTEVTX0JJVCB8Ci0KR0xTTEFOR19NU0dfVlVMS0FOX1JVTEVTX0JJ VCkpIHsKLSAgICAgICAgZmZfdmtfc2hhZGVyX3ByaW50KGF2Y3R4LCBzaGQsIEFWX0xPR19XQVJO SU5HKTsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gbGlu ayBzaGFkZXI6ICVzICglcykhXG4iLAotICAgICAgICAgICAgICAgZ2xzbGFuZ19wcm9ncmFtX2dl dF9pbmZvX2xvZyhnbHNsY19wcm9ncmFtKSwKLSAgICAgICAgICAgICAgIGdsc2xhbmdfcHJvZ3Jh bV9nZXRfaW5mb19kZWJ1Z19sb2coZ2xzbGNfcHJvZ3JhbSkpOwotICAgICAgICBnbHNsYW5nX3By b2dyYW1fZGVsZXRlKGdsc2xjX3Byb2dyYW0pOwotICAgICAgICBnbHNsYW5nX3NoYWRlcl9kZWxl dGUoZ2xzbGNfc2hhZGVyKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9 Ci0KLSAgICBnbHNsYW5nX3Byb2dyYW1fU1BJUlZfZ2VuZXJhdGUoZ2xzbGNfcHJvZ3JhbSwgZ2xz bGNfaW5wdXQuc3RhZ2UpOwotCi0gICAgbWVzc2FnZXMgPSBnbHNsYW5nX3Byb2dyYW1fU1BJUlZf Z2V0X21lc3NhZ2VzKGdsc2xjX3Byb2dyYW0pOwotICAgIGlmIChtZXNzYWdlcykgewotICAgICAg ICBmZl92a19zaGFkZXJfcHJpbnQoYXZjdHgsIHNoZCwgQVZfTE9HX1dBUk5JTkcpOwotICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiJXNcbiIsIG1lc3NhZ2VzKTsKLSAgICB9 IGVsc2UgewotICAgICAgICBmZl92a19zaGFkZXJfcHJpbnQoYXZjdHgsIHNoZCwgQVZfTE9HX1ZF UkJPU0UpOwotICAgIH0KLQotICAgIGdsc2xhbmdfc2hhZGVyX2RlbGV0ZShnbHNsY19zaGFkZXIp OwotCi0gICAgKnNpemUgPSBnbHNsYW5nX3Byb2dyYW1fU1BJUlZfZ2V0X3NpemUoZ2xzbGNfcHJv Z3JhbSkgKgpzaXplb2YodW5zaWduZWQgaW50KTsKLSAgICAqZGF0YSA9ICh2b2lkICopZ2xzbGFu Z19wcm9ncmFtX1NQSVJWX2dldF9wdHIoZ2xzbGNfcHJvZ3JhbSk7Ci0gICAgKm9wYXF1ZSA9IGds c2xjX3Byb2dyYW07Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZ2xzbGNfc2hh ZGVyX2ZyZWUoRkZWa1NQSVJWQ29tcGlsZXIgKmN0eCwgdm9pZCAqKm9wYXF1ZSkKLXsKLSAgICBp ZiAoIW9wYXF1ZSB8fCAhKm9wYXF1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXZfYXNzZXJ0 MChnbHNsY19yZWZjb3VudCk7Ci0gICAgZ2xzbGFuZ19wcm9ncmFtX2RlbGV0ZSgqb3BhcXVlKTsK LSAgICAqb3BhcXVlID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgZ2xzbGNfdW5pbml0KEZGVmtT UElSVkNvbXBpbGVyICoqY3R4KQotewotICAgIGlmICghY3R4IHx8ICEqY3R4KQotICAgICAgICBy ZXR1cm47Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmdsc2xjX211dGV4KTsKLSAgICBpZiAo Z2xzbGNfcmVmY291bnQgJiYgKC0tZ2xzbGNfcmVmY291bnQgPT0gMCkpCi0gICAgICAgIGdsc2xh bmdfZmluYWxpemVfcHJvY2VzcygpOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnbHNsY19t dXRleCk7Ci0KLSAgICBhdl9mcmVlcChjdHgpOwotfQotCi1GRlZrU1BJUlZDb21waWxlciAqZmZf dmtfZ2xzbGFuZ19pbml0KHZvaWQpCi17Ci0gICAgRkZWa1NQSVJWQ29tcGlsZXIgKnJldCA9IGF2 X21hbGxvY3ooc2l6ZW9mKCpyZXQpKTsKLSAgICBpZiAoIXJldCkKLSAgICAgICAgcmV0dXJuIE5V TEw7Ci0KLSAgICByZXQtPmNvbXBpbGVfc2hhZGVyID0gZ2xzbGNfc2hhZGVyX2NvbXBpbGU7Ci0g ICAgcmV0LT5mcmVlX3NoYWRlciAgICA9IGdsc2xjX3NoYWRlcl9mcmVlOwotICAgIHJldC0+dW5p bml0ICAgICAgICAgPSBnbHNsY191bmluaXQ7Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmds c2xjX211dGV4KTsKLSAgICBpZiAoIWdsc2xjX3JlZmNvdW50KyspIHsKLSAgICAgICAgaWYgKCFn bHNsYW5nX2luaXRpYWxpemVfcHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBhdl9mcmVlcCgmcmV0 KTsKLSAgICAgICAgICAgIGdsc2xjX3JlZmNvdW50LS07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg cHRocmVhZF9tdXRleF91bmxvY2soJmdsc2xjX211dGV4KTsKLQotICAgIHJldHVybiByZXQ7Ci19 CisjaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9nbHNsYW5nLmMiCmRpZmYgLS1naXQgYS9saWJh dmZpbHRlci92dWxrYW5fc2hhZGVyYy5jIGIvbGliYXZmaWx0ZXIvdnVsa2FuX3NoYWRlcmMuYwpp bmRleCA5ZThhM2QxN2FjLi45ZjYwYmY0ZGZkIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci92dWxr YW5fc2hhZGVyYy5jCisrKyBiL2xpYmF2ZmlsdGVyL3Z1bGthbl9zaGFkZXJjLmMKQEAgLTE2LDEx MyArMTYsNCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQQowMjExMC0xMzAxIFVTQQogICovCgotI2luY2x1ZGUgPHNoYWRl cmMvc2hhZGVyYy5oPgotCi0jaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgotI2luY2x1ZGUgInZ1 bGthbl9zcGlydi5oIgotCi1zdGF0aWMgaW50IHNoZGNfc2hhZGVyX2NvbXBpbGUoRkZWa1NQSVJW Q29tcGlsZXIgKmN0eCwgdm9pZCAqYXZjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRkZWa1NQSVJWU2hhZGVyICpzaGQsIHVpbnQ4X3QgKipkYXRhLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6ZSwgY29uc3QgY2hhciAqZW50cnlwb2ludCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlKQotewotICAgIGludCBs b2dsZXZlbCwgZXJyLCB3YXJuLCByZXQ7Ci0gICAgY29uc3QgY2hhciAqc3RhdHVzLCAqbWVzc2Fn ZTsKLSAgICBzaGFkZXJjX2NvbXBpbGF0aW9uX3Jlc3VsdF90IHJlczsKLSAgICBzdGF0aWMgY29u c3QgY2hhciAqc2hkY19yZXN1bHRbXSA9IHsKLSAgICAgICAgW3NoYWRlcmNfY29tcGlsYXRpb25f c3RhdHVzX3N1Y2Nlc3NdICAgICAgICAgICAgPSAic3VjY2VzcyIsCi0gICAgICAgIFtzaGFkZXJj X2NvbXBpbGF0aW9uX3N0YXR1c19pbnZhbGlkX3N0YWdlXSAgICAgID0gImludmFsaWQgc3RhZ2Ui LAotICAgICAgICBbc2hhZGVyY19jb21waWxhdGlvbl9zdGF0dXNfY29tcGlsYXRpb25fZXJyb3Jd ICA9ICJlcnJvciIsCi0gICAgICAgIFtzaGFkZXJjX2NvbXBpbGF0aW9uX3N0YXR1c19pbnRlcm5h bF9lcnJvcl0gICAgID0gImludGVybmFsIGVycm9yIiwKLSAgICAgICAgW3NoYWRlcmNfY29tcGls YXRpb25fc3RhdHVzX251bGxfcmVzdWx0X29iamVjdF0gPSAibm8gcmVzdWx0IiwKLSAgICAgICAg W3NoYWRlcmNfY29tcGlsYXRpb25fc3RhdHVzX2ludmFsaWRfYXNzZW1ibHldICAgPSAiaW52YWxp ZAphc3NlbWJseSIsCi0gICAgfTsKLSAgICBzdGF0aWMgY29uc3Qgc2hhZGVyY19zaGFkZXJfa2lu ZCBzaGRjX2tpbmRbXSA9IHsKLSAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9WRVJURVhfQklUXSAg ID0gc2hhZGVyY19nbHNsX3ZlcnRleF9zaGFkZXIsCi0gICAgICAgIFtWS19TSEFERVJfU1RBR0Vf RlJBR01FTlRfQklUXSA9IHNoYWRlcmNfZ2xzbF9mcmFnbWVudF9zaGFkZXIsCi0gICAgICAgIFtW S19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVRdICA9IHNoYWRlcmNfZ2xzbF9jb21wdXRlX3NoYWRl ciwKLSAgICB9OwotCi0gICAgc2hhZGVyY19jb21waWxlX29wdGlvbnNfdCBvcHRzID0gc2hhZGVy Y19jb21waWxlX29wdGlvbnNfaW5pdGlhbGl6ZSgpOwotICAgICpvcGFxdWUgPSBOVUxMOwotICAg IGlmICghb3B0cykKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIHNoYWRl cmNfY29tcGlsZV9vcHRpb25zX3NldF90YXJnZXRfZW52KG9wdHMsIHNoYWRlcmNfdGFyZ2V0X2Vu dl92dWxrYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hh ZGVyY19lbnZfdmVyc2lvbl92dWxrYW5fMV8yKTsKLSAgICBzaGFkZXJjX2NvbXBpbGVfb3B0aW9u c19zZXRfdGFyZ2V0X3NwaXJ2KG9wdHMsCnNoYWRlcmNfc3BpcnZfdmVyc2lvbl8xXzUpOwotICAg IHNoYWRlcmNfY29tcGlsZV9vcHRpb25zX3NldF9nZW5lcmF0ZV9kZWJ1Z19pbmZvKG9wdHMpOwot ICAgIHNoYWRlcmNfY29tcGlsZV9vcHRpb25zX3NldF9vcHRpbWl6YXRpb25fbGV2ZWwob3B0cywK LQpzaGFkZXJjX29wdGltaXphdGlvbl9sZXZlbF9wZXJmb3JtYW5jZSk7Ci0KLSAgICByZXMgPSBz aGFkZXJjX2NvbXBpbGVfaW50b19zcHYoKHNoYWRlcmNfY29tcGlsZXJfdCljdHgtPnByaXYsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZC0+c3JjLnN0ciwgc3RybGVuKHNo ZC0+c3JjLnN0ciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZGNfa2lu ZFtzaGQtPnNoYWRlci5zdGFnZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNoZC0+bmFtZSwgZW50cnlwb2ludCwgb3B0cyk7Ci0gICAgc2hhZGVyY19jb21waWxlX29wdGlv bnNfcmVsZWFzZShvcHRzKTsKLQotICAgIHJldCA9IHNoYWRlcmNfcmVzdWx0X2dldF9jb21waWxh dGlvbl9zdGF0dXMocmVzKTsKLSAgICBlcnIgPSBzaGFkZXJjX3Jlc3VsdF9nZXRfbnVtX2Vycm9y cyhyZXMpOwotICAgIHdhcm4gPSBzaGFkZXJjX3Jlc3VsdF9nZXRfbnVtX3dhcm5pbmdzKHJlcyk7 Ci0gICAgbWVzc2FnZSA9IHNoYWRlcmNfcmVzdWx0X2dldF9lcnJvcl9tZXNzYWdlKHJlcyk7Ci0K LSAgICBpZiAocmV0ICE9IHNoYWRlcmNfY29tcGlsYXRpb25fc3RhdHVzX3N1Y2Nlc3MgJiYgIWVy cikKLSAgICAgICAgZXJyID0gMTsKLQotICAgIGxvZ2xldmVsID0gZXJyID8gQVZfTE9HX0VSUk9S IDogd2FybiA/IEFWX0xPR19XQVJOSU5HIDogQVZfTE9HX1ZFUkJPU0U7Ci0KLSAgICBmZl92a19z aGFkZXJfcHJpbnQoYXZjdHgsIHNoZCwgbG9nbGV2ZWwpOwotICAgIGlmIChtZXNzYWdlICYmIChl cnIgfHwgd2FybikpCi0gICAgICAgIGF2X2xvZyhhdmN0eCwgbG9nbGV2ZWwsICIlc1xuIiwgbWVz c2FnZSk7Ci0gICAgc3RhdHVzID0gcmV0IDwgRkZfQVJSQVlfRUxFTVMoc2hkY19yZXN1bHQpID8g c2hkY19yZXN1bHRbcmV0XSA6CiJ1bmtub3duIjsKLSAgICBhdl9sb2coYXZjdHgsIGxvZ2xldmVs LCAic2hhZGVyYyBjb21waWxlIHN0YXR1cyAnJXMnICglZCBlcnJvcnMsICVkCndhcm5pbmdzKVxu IiwKLSAgICAgICAgICAgc3RhdHVzLCBlcnIsIHdhcm4pOwotCi0gICAgaWYgKGVyciA+IDApCi0g ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0KLSAgICAqZGF0YSA9ICh1aW50OF90ICop c2hhZGVyY19yZXN1bHRfZ2V0X2J5dGVzKHJlcyk7Ci0gICAgKnNpemUgPSBzaGFkZXJjX3Jlc3Vs dF9nZXRfbGVuZ3RoKHJlcyk7Ci0gICAgKm9wYXF1ZSA9IHJlczsKLQotICAgIHJldHVybiAwOwot fQotCi1zdGF0aWMgdm9pZCBzaGRjX3NoYWRlcl9mcmVlKEZGVmtTUElSVkNvbXBpbGVyICpjdHgs IHZvaWQgKipvcGFxdWUpCi17Ci0gICAgaWYgKCFvcGFxdWUgfHwgISpvcGFxdWUpCi0gICAgICAg IHJldHVybjsKLQotICAgIHNoYWRlcmNfcmVzdWx0X3JlbGVhc2UoKHNoYWRlcmNfY29tcGlsYXRp b25fcmVzdWx0X3QpKm9wYXF1ZSk7Ci0gICAgKm9wYXF1ZSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2 b2lkIHNoZGNfdW5pbml0KEZGVmtTUElSVkNvbXBpbGVyICoqY3R4KQotewotICAgIEZGVmtTUElS VkNvbXBpbGVyICpzOwotCi0gICAgaWYgKCFjdHggfHwgISpjdHgpCi0gICAgICAgIHJldHVybjsK LQotICAgIHMgPSAqY3R4OwotCi0gICAgc2hhZGVyY19jb21waWxlcl9yZWxlYXNlKChzaGFkZXJj X2NvbXBpbGVyX3Qpcy0+cHJpdik7Ci0gICAgYXZfZnJlZXAoY3R4KTsKLX0KLQotRkZWa1NQSVJW Q29tcGlsZXIgKmZmX3ZrX3NoYWRlcmNfaW5pdCh2b2lkKQotewotICAgIEZGVmtTUElSVkNvbXBp bGVyICpyZXQgPSBhdl9tYWxsb2N6KHNpemVvZigqcmV0KSk7Ci0gICAgaWYgKCFyZXQpCi0gICAg ICAgIHJldHVybiBOVUxMOwotCi0gICAgcmV0LT5jb21waWxlX3NoYWRlciA9IHNoZGNfc2hhZGVy X2NvbXBpbGU7Ci0gICAgcmV0LT5mcmVlX3NoYWRlciAgICA9IHNoZGNfc2hhZGVyX2ZyZWU7Ci0g ICAgcmV0LT51bmluaXQgICAgICAgICA9IHNoZGNfdW5pbml0OwotCi0gICAgcmV0LT5wcml2ICAg ICAgICAgICA9ICh2b2lkICopc2hhZGVyY19jb21waWxlcl9pbml0aWFsaXplKCk7Ci0gICAgaWYg KCFyZXQtPnByaXYpCi0gICAgICAgIGF2X2ZyZWVwKCZyZXQpOwotCi0gICAgcmV0dXJuIHJldDsK LX0KKyNpbmNsdWRlICJsaWJhdnV0aWwvdnVsa2FuX3NoYWRlcmMuYyIKZGlmZiAtLWdpdCBhL2xp YmF2ZmlsdGVyL3Z1bGthbl9zcGlydi5oIGIvbGliYXZmaWx0ZXIvdnVsa2FuX3NwaXJ2LmgKaW5k ZXggNTYzOGNkOTY5Ni4uOTM1ODQ3MjBlZSAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvdnVsa2Fu X3NwaXJ2LmgKKysrIGIvbGliYXZmaWx0ZXIvdnVsa2FuX3NwaXJ2LmgKQEAgLTE2LDMwICsxNiw0 IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BCjAyMTEwLTEzMDEgVVNBCiAgKi8KCi0jaWZuZGVmIEFWRklMVEVSX1ZVTEtB Tl9TUElSVl9ICi0jZGVmaW5lIEFWRklMVEVSX1ZVTEtBTl9TUElSVl9ICi0KLSNpbmNsdWRlICJs aWJhdnV0aWwvdnVsa2FuLmgiCi0KLSNpbmNsdWRlICJ2dWxrYW4uaCIKLSNpbmNsdWRlICJjb25m aWcuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgRkZWa1NQSVJWQ29tcGlsZXIgewotICAgIHZvaWQgKnBy aXY7Ci0gICAgaW50ICgqY29tcGlsZV9zaGFkZXIpKHN0cnVjdCBGRlZrU1BJUlZDb21waWxlciAq Y3R4LCB2b2lkICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEZGVmtT UElSVlNoYWRlciAqc2hkLCB1aW50OF90ICoqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90ICpzaXplLCBjb25zdCBjaGFyICplbnRyeXBvaW50LCB2b2lkCioqb3BhcXVlKTsK LSAgICB2b2lkICgqZnJlZV9zaGFkZXIpKHN0cnVjdCBGRlZrU1BJUlZDb21waWxlciAqY3R4LCB2 b2lkICoqb3BhcXVlKTsKLSAgICB2b2lkICgqdW5pbml0KShzdHJ1Y3QgRkZWa1NQSVJWQ29tcGls ZXIgKipjdHgpOwotfSBGRlZrU1BJUlZDb21waWxlcjsKLQotI2lmIENPTkZJR19MSUJHTFNMQU5H Ci1GRlZrU1BJUlZDb21waWxlciAqZmZfdmtfZ2xzbGFuZ19pbml0KHZvaWQpOwotI2RlZmluZSBm Zl92a19zcGlydl9pbml0IGZmX3ZrX2dsc2xhbmdfaW5pdAotI2VuZGlmCi0jaWYgQ09ORklHX0xJ QlNIQURFUkMKLUZGVmtTUElSVkNvbXBpbGVyICpmZl92a19zaGFkZXJjX2luaXQodm9pZCk7Ci0j ZGVmaW5lIGZmX3ZrX3NwaXJ2X2luaXQgZmZfdmtfc2hhZGVyY19pbml0Ci0jZW5kaWYKLQotI2Vu ZGlmIC8qIEFWRklMVEVSX1ZVTEtBTl9IICovCisjaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9z cGlydi5oIgpkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL01ha2VmaWxlIGIvbGliYXZ1dGlsL01ha2Vm aWxlCmluZGV4IDZlNmZhOGQ4MDAuLjRjNzM2NjNmZTcgMTAwNjQ0Ci0tLSBhL2xpYmF2dXRpbC9N YWtlZmlsZQorKysgYi9saWJhdnV0aWwvTWFrZWZpbGUKQEAgLTIwOCw2ICsyMDgsOSBAQCBPQkpT LSQoQ09ORklHX1ZVTEtBTikgICAgICAgICAgICAgICAgICAgKz0KaHdjb250ZXh0X3Z1bGthbi5v IHZ1bGthbi5vCgogT0JKUy0kKCFDT05GSUdfVlVMS0FOKSAgICAgICAgICAgICAgICAgICs9IGh3 Y29udGV4dF9zdHViLm8KCitPQkpTLSQoQ09ORklHX0xJQkdMU0xBTkcpICAgICAgICAgICAgICAg ICAgICArPSB2dWxrYW5fZ2xzbGFuZy5vCitPQkpTLSQoQ09ORklHX0xJQlNIQURFUkMpICAgICAg ICAgICAgICAgICAgICArPSB2dWxrYW5fc2hhZGVyYy5vCisKIE9CSlMgKz0gJChDT01QQVRfT0JK UzolPS4uL2NvbXBhdC8lKQoKICMgV2luZG93cyByZXNvdXJjZSBmaWxlCkBAIC0yMjgsNiArMjMx LDggQEAgU0tJUEhFQURFUlMtJChDT05GSUdfVkRQQVUpICAgICAgICAgICAgKz0KaHdjb250ZXh0 X3ZkcGF1LmgKIFNLSVBIRUFERVJTLSQoQ09ORklHX1ZVTEtBTikgICAgICAgICAgICs9IGh3Y29u dGV4dF92dWxrYW4uaCB2dWxrYW4uaCAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZ1bGthbl9mdW5jdGlvbnMuaCAgICAgICAgICAgIFwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ1bGthbl9sb2FkZXIuaAorU0tJUEhFQURF UlMtJChDT05GSUdfTElCU0hBREVSQykgICAgICAgICAgICAgKz0gdnVsa2FuX3NwaXJ2LmgKK1NL SVBIRUFERVJTLSQoQ09ORklHX0xJQkdMU0xBTkcpICAgICAgICAgICAgICs9IHZ1bGthbl9zcGly di5oCgogVEVTVFBST0dTID0gYWRsZXIzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgYWVzICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvbGli YXZ1dGlsL3Z1bGthbl9nbHNsYW5nLmMgYi9saWJhdnV0aWwvdnVsa2FuX2dsc2xhbmcuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44NDVhNTMwZWUwCi0tLSAvZGV2L251 bGwKKysrIGIvbGliYXZ1dGlsL3Z1bGthbl9nbHNsYW5nLmMKQEAgLTAsMCArMSwyODMgQEAKKy8q CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLCBCb3N0b24sIE1BCjAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgPHB0aHJlYWQu aD4KKworI2luY2x1ZGUgPGdsc2xhbmcvYnVpbGRfaW5mby5oPgorI2luY2x1ZGUgPGdsc2xhbmcv SW5jbHVkZS9nbHNsYW5nX2NfaW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlICJ2dWxrYW5fc3BpcnYu aCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNz ZXJ0LmgiCisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ2xzbGNfbXV0ZXggPSBQVEhSRUFEX01V VEVYX0lOSVRJQUxJWkVSOworc3RhdGljIGludCBnbHNsY19yZWZjb3VudCA9IDA7CisKK3N0YXRp YyBjb25zdCBnbHNsYW5nX3Jlc291cmNlX3QgZ2xzbGNfcmVzb3VyY2VfbGltaXRzID0geworICAg IC5tYXhfbGlnaHRzID0gMzIsCisgICAgLm1heF9jbGlwX3BsYW5lcyA9IDYsCisgICAgLm1heF90 ZXh0dXJlX3VuaXRzID0gMzIsCisgICAgLm1heF90ZXh0dXJlX2Nvb3JkcyA9IDMyLAorICAgIC5t YXhfdmVydGV4X2F0dHJpYnMgPSA2NCwKKyAgICAubWF4X3ZlcnRleF91bmlmb3JtX2NvbXBvbmVu dHMgPSA0MDk2LAorICAgIC5tYXhfdmFyeWluZ19mbG9hdHMgPSA2NCwKKyAgICAubWF4X3ZlcnRl eF90ZXh0dXJlX2ltYWdlX3VuaXRzID0gMzIsCisgICAgLm1heF9jb21iaW5lZF90ZXh0dXJlX2lt YWdlX3VuaXRzID0gODAsCisgICAgLm1heF90ZXh0dXJlX2ltYWdlX3VuaXRzID0gMzIsCisgICAg Lm1heF9mcmFnbWVudF91bmlmb3JtX2NvbXBvbmVudHMgPSA0MDk2LAorICAgIC5tYXhfZHJhd19i dWZmZXJzID0gMzIsCisgICAgLm1heF92ZXJ0ZXhfdW5pZm9ybV92ZWN0b3JzID0gMTI4LAorICAg IC5tYXhfdmFyeWluZ192ZWN0b3JzID0gOCwKKyAgICAubWF4X2ZyYWdtZW50X3VuaWZvcm1fdmVj dG9ycyA9IDE2LAorICAgIC5tYXhfdmVydGV4X291dHB1dF92ZWN0b3JzID0gMTYsCisgICAgLm1h eF9mcmFnbWVudF9pbnB1dF92ZWN0b3JzID0gMTUsCisgICAgLm1pbl9wcm9ncmFtX3RleGVsX29m ZnNldCA9IC04LAorICAgIC5tYXhfcHJvZ3JhbV90ZXhlbF9vZmZzZXQgPSA3LAorICAgIC5tYXhf Y2xpcF9kaXN0YW5jZXMgPSA4LAorICAgIC5tYXhfY29tcHV0ZV93b3JrX2dyb3VwX2NvdW50X3gg PSA2NTUzNSwKKyAgICAubWF4X2NvbXB1dGVfd29ya19ncm91cF9jb3VudF95ID0gNjU1MzUsCisg ICAgLm1heF9jb21wdXRlX3dvcmtfZ3JvdXBfY291bnRfeiA9IDY1NTM1LAorICAgIC5tYXhfY29t cHV0ZV93b3JrX2dyb3VwX3NpemVfeCA9IDEwMjQsCisgICAgLm1heF9jb21wdXRlX3dvcmtfZ3Jv dXBfc2l6ZV95ID0gMTAyNCwKKyAgICAubWF4X2NvbXB1dGVfd29ya19ncm91cF9zaXplX3ogPSA2 NCwKKyAgICAubWF4X2NvbXB1dGVfdW5pZm9ybV9jb21wb25lbnRzID0gMTAyNCwKKyAgICAubWF4 X2NvbXB1dGVfdGV4dHVyZV9pbWFnZV91bml0cyA9IDE2LAorICAgIC5tYXhfY29tcHV0ZV9pbWFn ZV91bmlmb3JtcyA9IDgsCisgICAgLm1heF9jb21wdXRlX2F0b21pY19jb3VudGVycyA9IDgsCisg ICAgLm1heF9jb21wdXRlX2F0b21pY19jb3VudGVyX2J1ZmZlcnMgPSAxLAorICAgIC5tYXhfdmFy eWluZ19jb21wb25lbnRzID0gNjAsCisgICAgLm1heF92ZXJ0ZXhfb3V0cHV0X2NvbXBvbmVudHMg PSA2NCwKKyAgICAubWF4X2dlb21ldHJ5X2lucHV0X2NvbXBvbmVudHMgPSA2NCwKKyAgICAubWF4 X2dlb21ldHJ5X291dHB1dF9jb21wb25lbnRzID0gMTI4LAorICAgIC5tYXhfZnJhZ21lbnRfaW5w dXRfY29tcG9uZW50cyA9IDEyOCwKKyAgICAubWF4X2ltYWdlX3VuaXRzID0gOCwKKyAgICAubWF4 X2NvbWJpbmVkX2ltYWdlX3VuaXRzX2FuZF9mcmFnbWVudF9vdXRwdXRzID0gOCwKKyAgICAubWF4 X2NvbWJpbmVkX3NoYWRlcl9vdXRwdXRfcmVzb3VyY2VzID0gOCwKKyAgICAubWF4X2ltYWdlX3Nh bXBsZXMgPSAwLAorICAgIC5tYXhfdmVydGV4X2ltYWdlX3VuaWZvcm1zID0gMCwKKyAgICAubWF4 X3Rlc3NfY29udHJvbF9pbWFnZV91bmlmb3JtcyA9IDAsCisgICAgLm1heF90ZXNzX2V2YWx1YXRp b25faW1hZ2VfdW5pZm9ybXMgPSAwLAorICAgIC5tYXhfZ2VvbWV0cnlfaW1hZ2VfdW5pZm9ybXMg PSAwLAorICAgIC5tYXhfZnJhZ21lbnRfaW1hZ2VfdW5pZm9ybXMgPSA4LAorICAgIC5tYXhfY29t YmluZWRfaW1hZ2VfdW5pZm9ybXMgPSA4LAorICAgIC5tYXhfZ2VvbWV0cnlfdGV4dHVyZV9pbWFn ZV91bml0cyA9IDE2LAorICAgIC5tYXhfZ2VvbWV0cnlfb3V0cHV0X3ZlcnRpY2VzID0gMjU2LAor ICAgIC5tYXhfZ2VvbWV0cnlfdG90YWxfb3V0cHV0X2NvbXBvbmVudHMgPSAxMDI0LAorICAgIC5t YXhfZ2VvbWV0cnlfdW5pZm9ybV9jb21wb25lbnRzID0gMTAyNCwKKyAgICAubWF4X2dlb21ldHJ5 X3ZhcnlpbmdfY29tcG9uZW50cyA9IDY0LAorICAgIC5tYXhfdGVzc19jb250cm9sX2lucHV0X2Nv bXBvbmVudHMgPSAxMjgsCisgICAgLm1heF90ZXNzX2NvbnRyb2xfb3V0cHV0X2NvbXBvbmVudHMg PSAxMjgsCisgICAgLm1heF90ZXNzX2NvbnRyb2xfdGV4dHVyZV9pbWFnZV91bml0cyA9IDE2LAor ICAgIC5tYXhfdGVzc19jb250cm9sX3VuaWZvcm1fY29tcG9uZW50cyA9IDEwMjQsCisgICAgLm1h eF90ZXNzX2NvbnRyb2xfdG90YWxfb3V0cHV0X2NvbXBvbmVudHMgPSA0MDk2LAorICAgIC5tYXhf dGVzc19ldmFsdWF0aW9uX2lucHV0X2NvbXBvbmVudHMgPSAxMjgsCisgICAgLm1heF90ZXNzX2V2 YWx1YXRpb25fb3V0cHV0X2NvbXBvbmVudHMgPSAxMjgsCisgICAgLm1heF90ZXNzX2V2YWx1YXRp b25fdGV4dHVyZV9pbWFnZV91bml0cyA9IDE2LAorICAgIC5tYXhfdGVzc19ldmFsdWF0aW9uX3Vu aWZvcm1fY29tcG9uZW50cyA9IDEwMjQsCisgICAgLm1heF90ZXNzX3BhdGNoX2NvbXBvbmVudHMg PSAxMjAsCisgICAgLm1heF9wYXRjaF92ZXJ0aWNlcyA9IDMyLAorICAgIC5tYXhfdGVzc19nZW5f bGV2ZWwgPSA2NCwKKyAgICAubWF4X3ZpZXdwb3J0cyA9IDE2LAorICAgIC5tYXhfdmVydGV4X2F0 b21pY19jb3VudGVycyA9IDAsCisgICAgLm1heF90ZXNzX2NvbnRyb2xfYXRvbWljX2NvdW50ZXJz ID0gMCwKKyAgICAubWF4X3Rlc3NfZXZhbHVhdGlvbl9hdG9taWNfY291bnRlcnMgPSAwLAorICAg IC5tYXhfZ2VvbWV0cnlfYXRvbWljX2NvdW50ZXJzID0gMCwKKyAgICAubWF4X2ZyYWdtZW50X2F0 b21pY19jb3VudGVycyA9IDgsCisgICAgLm1heF9jb21iaW5lZF9hdG9taWNfY291bnRlcnMgPSA4 LAorICAgIC5tYXhfYXRvbWljX2NvdW50ZXJfYmluZGluZ3MgPSAxLAorICAgIC5tYXhfdmVydGV4 X2F0b21pY19jb3VudGVyX2J1ZmZlcnMgPSAwLAorICAgIC5tYXhfdGVzc19jb250cm9sX2F0b21p Y19jb3VudGVyX2J1ZmZlcnMgPSAwLAorICAgIC5tYXhfdGVzc19ldmFsdWF0aW9uX2F0b21pY19j b3VudGVyX2J1ZmZlcnMgPSAwLAorICAgIC5tYXhfZ2VvbWV0cnlfYXRvbWljX2NvdW50ZXJfYnVm ZmVycyA9IDAsCisgICAgLm1heF9mcmFnbWVudF9hdG9taWNfY291bnRlcl9idWZmZXJzID0gMSwK KyAgICAubWF4X2NvbWJpbmVkX2F0b21pY19jb3VudGVyX2J1ZmZlcnMgPSAxLAorICAgIC5tYXhf YXRvbWljX2NvdW50ZXJfYnVmZmVyX3NpemUgPSAxNjM4NCwKKyAgICAubWF4X3RyYW5zZm9ybV9m ZWVkYmFja19idWZmZXJzID0gNCwKKyAgICAubWF4X3RyYW5zZm9ybV9mZWVkYmFja19pbnRlcmxl YXZlZF9jb21wb25lbnRzID0gNjQsCisgICAgLm1heF9jdWxsX2Rpc3RhbmNlcyA9IDgsCisgICAg Lm1heF9jb21iaW5lZF9jbGlwX2FuZF9jdWxsX2Rpc3RhbmNlcyA9IDgsCisgICAgLm1heF9zYW1w bGVzID0gNCwKKyAgICAubWF4X21lc2hfb3V0cHV0X3ZlcnRpY2VzX252ID0gMjU2LAorICAgIC5t YXhfbWVzaF9vdXRwdXRfcHJpbWl0aXZlc19udiA9IDUxMiwKKyAgICAubWF4X21lc2hfd29ya19n cm91cF9zaXplX3hfbnYgPSAzMiwKKyAgICAubWF4X21lc2hfd29ya19ncm91cF9zaXplX3lfbnYg PSAxLAorICAgIC5tYXhfbWVzaF93b3JrX2dyb3VwX3NpemVfel9udiA9IDEsCisgICAgLm1heF90 YXNrX3dvcmtfZ3JvdXBfc2l6ZV94X252ID0gMzIsCisgICAgLm1heF90YXNrX3dvcmtfZ3JvdXBf c2l6ZV95X252ID0gMSwKKyAgICAubWF4X3Rhc2tfd29ya19ncm91cF9zaXplX3pfbnYgPSAxLAor ICAgIC5tYXhfbWVzaF92aWV3X2NvdW50X252ID0gNCwKKyAgICAubWF4RHVhbFNvdXJjZURyYXdC dWZmZXJzRVhUID0gMSwKKworICAgIC5saW1pdHMgPSB7CisgICAgICAgIC5ub25faW5kdWN0aXZl X2Zvcl9sb29wcyA9IDEsCisgICAgICAgIC53aGlsZV9sb29wcyA9IDEsCisgICAgICAgIC5kb193 aGlsZV9sb29wcyA9IDEsCisgICAgICAgIC5nZW5lcmFsX3VuaWZvcm1faW5kZXhpbmcgPSAxLAor ICAgICAgICAuZ2VuZXJhbF9hdHRyaWJ1dGVfbWF0cml4X3ZlY3Rvcl9pbmRleGluZyA9IDEsCisg ICAgICAgIC5nZW5lcmFsX3ZhcnlpbmdfaW5kZXhpbmcgPSAxLAorICAgICAgICAuZ2VuZXJhbF9z YW1wbGVyX2luZGV4aW5nID0gMSwKKyAgICAgICAgLmdlbmVyYWxfdmFyaWFibGVfaW5kZXhpbmcg PSAxLAorICAgICAgICAuZ2VuZXJhbF9jb25zdGFudF9tYXRyaXhfdmVjdG9yX2luZGV4aW5nID0g MSwKKyAgICB9Cit9OworCitzdGF0aWMgaW50IGdsc2xjX3NoYWRlcl9jb21waWxlKEZGVmtTUElS VkNvbXBpbGVyICpjdHgsIHZvaWQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGRlZrU1BJUlZTaGFkZXIgKnNoZCwgdWludDhfdCAqKmRhdGEsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6ZSwgY29uc3QgY2hhciAqZW50cnlwb2ludCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSkKK3sKKyAgICBj b25zdCBjaGFyICptZXNzYWdlczsKKyAgICBnbHNsYW5nX3NoYWRlcl90ICpnbHNsY19zaGFkZXI7 CisgICAgZ2xzbGFuZ19wcm9ncmFtX3QgKmdsc2xjX3Byb2dyYW07CisKKyAgICBzdGF0aWMgY29u c3QgZ2xzbGFuZ19zdGFnZV90IGdsc2xjX3N0YWdlW10gPSB7CisgICAgICAgIFtWS19TSEFERVJf U1RBR0VfVkVSVEVYX0JJVF0gICA9IEdMU0xBTkdfU1RBR0VfVkVSVEVYLAorICAgICAgICBbVktf U0hBREVSX1NUQUdFX0ZSQUdNRU5UX0JJVF0gPSBHTFNMQU5HX1NUQUdFX0ZSQUdNRU5ULAorICAg ICAgICBbVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUXSAgPSBHTFNMQU5HX1NUQUdFX0NPTVBV VEUsCisgICAgfTsKKworICAgIGNvbnN0IGdsc2xhbmdfaW5wdXRfdCBnbHNsY19pbnB1dCA9IHsK KyAgICAgICAgLmxhbmd1YWdlICAgICAgICAgICAgICAgICAgICAgICAgICA9IEdMU0xBTkdfU09V UkNFX0dMU0wsCisgICAgICAgIC5zdGFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPQpn bHNsY19zdGFnZVtzaGQtPnNoYWRlci5zdGFnZV0sCisgICAgICAgIC5jbGllbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPSBHTFNMQU5HX0NMSUVOVF9WVUxLQU4sCisgICAgICAgIC8qIEdM U0xBTkdfVEFSR0VUX1ZVTEtBTl8xXzIgYmVmb3JlIDExLjYgcmVzdWx0ZWQgaW4gdGFyZ2V0aW5n IDEuMAoqLworI2lmICgoKEdMU0xBTkdfVkVSU0lPTl9NQUpPUikgPiAxMSkgfHwgKChHTFNMQU5H X1ZFUlNJT05fTUFKT1IpID09IDExICYmIFwKKyAgICAoKChHTFNMQU5HX1ZFUlNJT05fTUlOT1Ip ID4gIDYpIHx8ICgoR0xTTEFOR19WRVJTSU9OX01JTk9SKSA9PSAgNiAmJiBcCisgICAgICgoR0xT TEFOR19WRVJTSU9OX1BBVENIKSA+IDApKSkpKQorICAgICAgICAuY2xpZW50X3ZlcnNpb24gICAg ICAgICAgICAgICAgICAgID0gR0xTTEFOR19UQVJHRVRfVlVMS0FOXzFfMiwKKyAgICAgICAgLnRh cmdldF9sYW5ndWFnZV92ZXJzaW9uICAgICAgICAgICA9IEdMU0xBTkdfVEFSR0VUX1NQVl8xXzUs CisjZWxzZQorICAgICAgICAuY2xpZW50X3ZlcnNpb24gICAgICAgICAgICAgICAgICAgID0gR0xT TEFOR19UQVJHRVRfVlVMS0FOXzFfMSwKKyAgICAgICAgLnRhcmdldF9sYW5ndWFnZV92ZXJzaW9u ICAgICAgICAgICA9IEdMU0xBTkdfVEFSR0VUX1NQVl8xXzMsCisjZW5kaWYKKyAgICAgICAgLnRh cmdldF9sYW5ndWFnZSAgICAgICAgICAgICAgICAgICA9IEdMU0xBTkdfVEFSR0VUX1NQViwKKyAg ICAgICAgLmNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNoZC0+c3JjLnN0ciwK KyAgICAgICAgLmRlZmF1bHRfdmVyc2lvbiAgICAgICAgICAgICAgICAgICA9IDQ2MCwKKyAgICAg ICAgLmRlZmF1bHRfcHJvZmlsZSAgICAgICAgICAgICAgICAgICA9IEdMU0xBTkdfTk9fUFJPRklM RSwKKyAgICAgICAgLmZvcmNlX2RlZmF1bHRfdmVyc2lvbl9hbmRfcHJvZmlsZSA9IGZhbHNlLAor ICAgICAgICAuZm9yd2FyZF9jb21wYXRpYmxlICAgICAgICAgICAgICAgID0gZmFsc2UsCisgICAg ICAgIC5tZXNzYWdlcyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBHTFNMQU5HX01TR19ERUZB VUxUX0JJVCwKKyAgICAgICAgLnJlc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZn bHNsY19yZXNvdXJjZV9saW1pdHMsCisgICAgfTsKKworICAgIGF2X2Fzc2VydDAoZ2xzbGNfcmVm Y291bnQpOworCisgICAgKm9wYXF1ZSA9IE5VTEw7CisKKyAgICBpZiAoIShnbHNsY19zaGFkZXIg PSBnbHNsYW5nX3NoYWRlcl9jcmVhdGUoJmdsc2xjX2lucHV0KSkpCisgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisKKyAgICBpZiAoIWdsc2xhbmdfc2hhZGVyX3ByZXByb2Nlc3MoZ2xz bGNfc2hhZGVyLCAmZ2xzbGNfaW5wdXQpKSB7CisgICAgICAgIGZmX3ZrX3NoYWRlcl9wcmludChh dmN0eCwgc2hkLCBBVl9MT0dfV0FSTklORyk7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiVW5hYmxlIHRvIHByZXByb2Nlc3Mgc2hhZGVyOiAlcwooJXMpIVxuIiwKKyAgICAg ICAgICAgICAgIGdsc2xhbmdfc2hhZGVyX2dldF9pbmZvX2xvZyhnbHNsY19zaGFkZXIpLAorICAg ICAgICAgICAgICAgZ2xzbGFuZ19zaGFkZXJfZ2V0X2luZm9fZGVidWdfbG9nKGdsc2xjX3NoYWRl cikpOworICAgICAgICBnbHNsYW5nX3NoYWRlcl9kZWxldGUoZ2xzbGNfc2hhZGVyKTsKKyAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBpZiAoIWdsc2xhbmdfc2hh ZGVyX3BhcnNlKGdsc2xjX3NoYWRlciwgJmdsc2xjX2lucHV0KSkgeworICAgICAgICBmZl92a19z aGFkZXJfcHJpbnQoYXZjdHgsIHNoZCwgQVZfTE9HX1dBUk5JTkcpOworICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBwYXJzZSBzaGFkZXI6ICVzICglcykhXG4i LAorICAgICAgICAgICAgICAgZ2xzbGFuZ19zaGFkZXJfZ2V0X2luZm9fbG9nKGdsc2xjX3NoYWRl ciksCisgICAgICAgICAgICAgICBnbHNsYW5nX3NoYWRlcl9nZXRfaW5mb19kZWJ1Z19sb2coZ2xz bGNfc2hhZGVyKSk7CisgICAgICAgIGdsc2xhbmdfc2hhZGVyX2RlbGV0ZShnbHNsY19zaGFkZXIp OworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIGlmICghKGds c2xjX3Byb2dyYW0gPSBnbHNsYW5nX3Byb2dyYW1fY3JlYXRlKCkpKSB7CisgICAgICAgIGdsc2xh bmdfc2hhZGVyX2RlbGV0ZShnbHNsY19zaGFkZXIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihF SU5WQUwpOworICAgIH0KKworICAgIGdsc2xhbmdfcHJvZ3JhbV9hZGRfc2hhZGVyKGdsc2xjX3By b2dyYW0sIGdsc2xjX3NoYWRlcik7CisKKyAgICBpZiAoIWdsc2xhbmdfcHJvZ3JhbV9saW5rKGds c2xjX3Byb2dyYW0sIEdMU0xBTkdfTVNHX1NQVl9SVUxFU19CSVQgfAorCkdMU0xBTkdfTVNHX1ZV TEtBTl9SVUxFU19CSVQpKSB7CisgICAgICAgIGZmX3ZrX3NoYWRlcl9wcmludChhdmN0eCwgc2hk LCBBVl9MT0dfV0FSTklORyk7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi VW5hYmxlIHRvIGxpbmsgc2hhZGVyOiAlcyAoJXMpIVxuIiwKKyAgICAgICAgICAgICAgIGdsc2xh bmdfcHJvZ3JhbV9nZXRfaW5mb19sb2coZ2xzbGNfcHJvZ3JhbSksCisgICAgICAgICAgICAgICBn bHNsYW5nX3Byb2dyYW1fZ2V0X2luZm9fZGVidWdfbG9nKGdsc2xjX3Byb2dyYW0pKTsKKyAgICAg ICAgZ2xzbGFuZ19wcm9ncmFtX2RlbGV0ZShnbHNsY19wcm9ncmFtKTsKKyAgICAgICAgZ2xzbGFu Z19zaGFkZXJfZGVsZXRlKGdsc2xjX3NoYWRlcik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7CisgICAgfQorCisgICAgZ2xzbGFuZ19wcm9ncmFtX1NQSVJWX2dlbmVyYXRlKGdsc2xj X3Byb2dyYW0sIGdsc2xjX2lucHV0LnN0YWdlKTsKKworICAgIG1lc3NhZ2VzID0gZ2xzbGFuZ19w cm9ncmFtX1NQSVJWX2dldF9tZXNzYWdlcyhnbHNsY19wcm9ncmFtKTsKKyAgICBpZiAobWVzc2Fn ZXMpIHsKKyAgICAgICAgZmZfdmtfc2hhZGVyX3ByaW50KGF2Y3R4LCBzaGQsIEFWX0xPR19XQVJO SU5HKTsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIiVzXG4iLCBtZXNz YWdlcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmZfdmtfc2hhZGVyX3ByaW50KGF2Y3R4LCBz aGQsIEFWX0xPR19WRVJCT1NFKTsKKyAgICB9CisKKyAgICBnbHNsYW5nX3NoYWRlcl9kZWxldGUo Z2xzbGNfc2hhZGVyKTsKKworICAgICpzaXplID0gZ2xzbGFuZ19wcm9ncmFtX1NQSVJWX2dldF9z aXplKGdsc2xjX3Byb2dyYW0pICoKc2l6ZW9mKHVuc2lnbmVkIGludCk7CisgICAgKmRhdGEgPSAo dm9pZCAqKWdsc2xhbmdfcHJvZ3JhbV9TUElSVl9nZXRfcHRyKGdsc2xjX3Byb2dyYW0pOworICAg ICpvcGFxdWUgPSBnbHNsY19wcm9ncmFtOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIGdsc2xjX3NoYWRlcl9mcmVlKEZGVmtTUElSVkNvbXBpbGVyICpjdHgsIHZvaWQgKipvcGFx dWUpCit7CisgICAgaWYgKCFvcGFxdWUgfHwgISpvcGFxdWUpCisgICAgICAgIHJldHVybjsKKwor ICAgIGF2X2Fzc2VydDAoZ2xzbGNfcmVmY291bnQpOworICAgIGdsc2xhbmdfcHJvZ3JhbV9kZWxl dGUoKm9wYXF1ZSk7CisgICAgKm9wYXF1ZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGdsc2xj X3VuaW5pdChGRlZrU1BJUlZDb21waWxlciAqKmN0eCkKK3sKKyAgICBpZiAoIWN0eCB8fCAhKmN0 eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnbHNsY19tdXRl eCk7CisgICAgaWYgKGdsc2xjX3JlZmNvdW50ICYmICgtLWdsc2xjX3JlZmNvdW50ID09IDApKQor ICAgICAgICBnbHNsYW5nX2ZpbmFsaXplX3Byb2Nlc3MoKTsKKyAgICBwdGhyZWFkX211dGV4X3Vu bG9jaygmZ2xzbGNfbXV0ZXgpOworCisgICAgYXZfZnJlZXAoY3R4KTsKK30KKworRkZWa1NQSVJW Q29tcGlsZXIgKmZmX3ZrX2dsc2xhbmdfaW5pdCh2b2lkKQoreworICAgIEZGVmtTUElSVkNvbXBp bGVyICpyZXQgPSBhdl9tYWxsb2N6KHNpemVvZigqcmV0KSk7CisgICAgaWYgKCFyZXQpCisgICAg ICAgIHJldHVybiBOVUxMOworCisgICAgcmV0LT5jb21waWxlX3NoYWRlciA9IGdsc2xjX3NoYWRl cl9jb21waWxlOworICAgIHJldC0+ZnJlZV9zaGFkZXIgICAgPSBnbHNsY19zaGFkZXJfZnJlZTsK KyAgICByZXQtPnVuaW5pdCAgICAgICAgID0gZ2xzbGNfdW5pbml0OworCisgICAgcHRocmVhZF9t dXRleF9sb2NrKCZnbHNsY19tdXRleCk7CisgICAgaWYgKCFnbHNsY19yZWZjb3VudCsrKSB7Cisg ICAgICAgIGlmICghZ2xzbGFuZ19pbml0aWFsaXplX3Byb2Nlc3MoKSkgeworICAgICAgICAgICAg YXZfZnJlZXAoJnJldCk7CisgICAgICAgICAgICBnbHNsY19yZWZjb3VudC0tOworICAgICAgICB9 CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnbHNsY19tdXRleCk7CisKKyAgICBy ZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3Z1bGthbl9zaGFkZXJjLmMgYi9s aWJhdnV0aWwvdnVsa2FuX3NoYWRlcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi45ZThhM2QxN2FjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZ1dGlsL3Z1bGthbl9z aGFkZXJjLmMKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCjAyMTEwLTEzMDEg VVNBCisgKi8KKworI2luY2x1ZGUgPHNoYWRlcmMvc2hhZGVyYy5oPgorCisjaW5jbHVkZSAibGli YXZ1dGlsL21lbS5oIgorI2luY2x1ZGUgInZ1bGthbl9zcGlydi5oIgorCitzdGF0aWMgaW50IHNo ZGNfc2hhZGVyX2NvbXBpbGUoRkZWa1NQSVJWQ29tcGlsZXIgKmN0eCwgdm9pZCAqYXZjdHgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWa1NQSVJWU2hhZGVyICpzaGQsIHVpbnQ4 X3QgKipkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6ZSwg Y29uc3QgY2hhciAqZW50cnlwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICoqb3BhcXVlKQoreworICAgIGludCBsb2dsZXZlbCwgZXJyLCB3YXJuLCByZXQ7CisgICAg Y29uc3QgY2hhciAqc3RhdHVzLCAqbWVzc2FnZTsKKyAgICBzaGFkZXJjX2NvbXBpbGF0aW9uX3Jl c3VsdF90IHJlczsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqc2hkY19yZXN1bHRbXSA9IHsKKyAg ICAgICAgW3NoYWRlcmNfY29tcGlsYXRpb25fc3RhdHVzX3N1Y2Nlc3NdICAgICAgICAgICAgPSAi c3VjY2VzcyIsCisgICAgICAgIFtzaGFkZXJjX2NvbXBpbGF0aW9uX3N0YXR1c19pbnZhbGlkX3N0 YWdlXSAgICAgID0gImludmFsaWQgc3RhZ2UiLAorICAgICAgICBbc2hhZGVyY19jb21waWxhdGlv bl9zdGF0dXNfY29tcGlsYXRpb25fZXJyb3JdICA9ICJlcnJvciIsCisgICAgICAgIFtzaGFkZXJj X2NvbXBpbGF0aW9uX3N0YXR1c19pbnRlcm5hbF9lcnJvcl0gICAgID0gImludGVybmFsIGVycm9y IiwKKyAgICAgICAgW3NoYWRlcmNfY29tcGlsYXRpb25fc3RhdHVzX251bGxfcmVzdWx0X29iamVj dF0gPSAibm8gcmVzdWx0IiwKKyAgICAgICAgW3NoYWRlcmNfY29tcGlsYXRpb25fc3RhdHVzX2lu dmFsaWRfYXNzZW1ibHldICAgPSAiaW52YWxpZAphc3NlbWJseSIsCisgICAgfTsKKyAgICBzdGF0 aWMgY29uc3Qgc2hhZGVyY19zaGFkZXJfa2luZCBzaGRjX2tpbmRbXSA9IHsKKyAgICAgICAgW1ZL X1NIQURFUl9TVEFHRV9WRVJURVhfQklUXSAgID0gc2hhZGVyY19nbHNsX3ZlcnRleF9zaGFkZXIs CisgICAgICAgIFtWS19TSEFERVJfU1RBR0VfRlJBR01FTlRfQklUXSA9IHNoYWRlcmNfZ2xzbF9m cmFnbWVudF9zaGFkZXIsCisgICAgICAgIFtWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVRdICA9 IHNoYWRlcmNfZ2xzbF9jb21wdXRlX3NoYWRlciwKKyAgICB9OworCisgICAgc2hhZGVyY19jb21w aWxlX29wdGlvbnNfdCBvcHRzID0gc2hhZGVyY19jb21waWxlX29wdGlvbnNfaW5pdGlhbGl6ZSgp OworICAgICpvcGFxdWUgPSBOVUxMOworICAgIGlmICghb3B0cykKKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKKworICAgIHNoYWRlcmNfY29tcGlsZV9vcHRpb25zX3NldF90YXJnZXRf ZW52KG9wdHMsIHNoYWRlcmNfdGFyZ2V0X2Vudl92dWxrYW4sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyY19lbnZfdmVyc2lvbl92dWxrYW5fMV8yKTsK KyAgICBzaGFkZXJjX2NvbXBpbGVfb3B0aW9uc19zZXRfdGFyZ2V0X3NwaXJ2KG9wdHMsCnNoYWRl cmNfc3BpcnZfdmVyc2lvbl8xXzUpOworICAgIHNoYWRlcmNfY29tcGlsZV9vcHRpb25zX3NldF9n ZW5lcmF0ZV9kZWJ1Z19pbmZvKG9wdHMpOworICAgIHNoYWRlcmNfY29tcGlsZV9vcHRpb25zX3Nl dF9vcHRpbWl6YXRpb25fbGV2ZWwob3B0cywKKwpzaGFkZXJjX29wdGltaXphdGlvbl9sZXZlbF9w ZXJmb3JtYW5jZSk7CisKKyAgICByZXMgPSBzaGFkZXJjX2NvbXBpbGVfaW50b19zcHYoKHNoYWRl cmNfY29tcGlsZXJfdCljdHgtPnByaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNoZC0+c3JjLnN0ciwgc3RybGVuKHNoZC0+c3JjLnN0ciksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNoZGNfa2luZFtzaGQtPnNoYWRlci5zdGFnZV0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZC0+bmFtZSwgZW50cnlwb2ludCwgb3B0cyk7 CisgICAgc2hhZGVyY19jb21waWxlX29wdGlvbnNfcmVsZWFzZShvcHRzKTsKKworICAgIHJldCA9 IHNoYWRlcmNfcmVzdWx0X2dldF9jb21waWxhdGlvbl9zdGF0dXMocmVzKTsKKyAgICBlcnIgPSBz aGFkZXJjX3Jlc3VsdF9nZXRfbnVtX2Vycm9ycyhyZXMpOworICAgIHdhcm4gPSBzaGFkZXJjX3Jl c3VsdF9nZXRfbnVtX3dhcm5pbmdzKHJlcyk7CisgICAgbWVzc2FnZSA9IHNoYWRlcmNfcmVzdWx0 X2dldF9lcnJvcl9tZXNzYWdlKHJlcyk7CisKKyAgICBpZiAocmV0ICE9IHNoYWRlcmNfY29tcGls YXRpb25fc3RhdHVzX3N1Y2Nlc3MgJiYgIWVycikKKyAgICAgICAgZXJyID0gMTsKKworICAgIGxv Z2xldmVsID0gZXJyID8gQVZfTE9HX0VSUk9SIDogd2FybiA/IEFWX0xPR19XQVJOSU5HIDogQVZf TE9HX1ZFUkJPU0U7CisKKyAgICBmZl92a19zaGFkZXJfcHJpbnQoYXZjdHgsIHNoZCwgbG9nbGV2 ZWwpOworICAgIGlmIChtZXNzYWdlICYmIChlcnIgfHwgd2FybikpCisgICAgICAgIGF2X2xvZyhh dmN0eCwgbG9nbGV2ZWwsICIlc1xuIiwgbWVzc2FnZSk7CisgICAgc3RhdHVzID0gcmV0IDwgRkZf QVJSQVlfRUxFTVMoc2hkY19yZXN1bHQpID8gc2hkY19yZXN1bHRbcmV0XSA6CiJ1bmtub3duIjsK KyAgICBhdl9sb2coYXZjdHgsIGxvZ2xldmVsLCAic2hhZGVyYyBjb21waWxlIHN0YXR1cyAnJXMn ICglZCBlcnJvcnMsICVkCndhcm5pbmdzKVxuIiwKKyAgICAgICAgICAgc3RhdHVzLCBlcnIsIHdh cm4pOworCisgICAgaWYgKGVyciA+IDApCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7 CisKKyAgICAqZGF0YSA9ICh1aW50OF90ICopc2hhZGVyY19yZXN1bHRfZ2V0X2J5dGVzKHJlcyk7 CisgICAgKnNpemUgPSBzaGFkZXJjX3Jlc3VsdF9nZXRfbGVuZ3RoKHJlcyk7CisgICAgKm9wYXF1 ZSA9IHJlczsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaGRjX3NoYWRlcl9m cmVlKEZGVmtTUElSVkNvbXBpbGVyICpjdHgsIHZvaWQgKipvcGFxdWUpCit7CisgICAgaWYgKCFv cGFxdWUgfHwgISpvcGFxdWUpCisgICAgICAgIHJldHVybjsKKworICAgIHNoYWRlcmNfcmVzdWx0 X3JlbGVhc2UoKHNoYWRlcmNfY29tcGlsYXRpb25fcmVzdWx0X3QpKm9wYXF1ZSk7CisgICAgKm9w YXF1ZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNoZGNfdW5pbml0KEZGVmtTUElSVkNvbXBp bGVyICoqY3R4KQoreworICAgIEZGVmtTUElSVkNvbXBpbGVyICpzOworCisgICAgaWYgKCFjdHgg fHwgISpjdHgpCisgICAgICAgIHJldHVybjsKKworICAgIHMgPSAqY3R4OworCisgICAgc2hhZGVy Y19jb21waWxlcl9yZWxlYXNlKChzaGFkZXJjX2NvbXBpbGVyX3Qpcy0+cHJpdik7CisgICAgYXZf ZnJlZXAoY3R4KTsKK30KKworRkZWa1NQSVJWQ29tcGlsZXIgKmZmX3ZrX3NoYWRlcmNfaW5pdCh2 b2lkKQoreworICAgIEZGVmtTUElSVkNvbXBpbGVyICpyZXQgPSBhdl9tYWxsb2N6KHNpemVvZigq cmV0KSk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0LT5j b21waWxlX3NoYWRlciA9IHNoZGNfc2hhZGVyX2NvbXBpbGU7CisgICAgcmV0LT5mcmVlX3NoYWRl ciAgICA9IHNoZGNfc2hhZGVyX2ZyZWU7CisgICAgcmV0LT51bmluaXQgICAgICAgICA9IHNoZGNf dW5pbml0OworCisgICAgcmV0LT5wcml2ICAgICAgICAgICA9ICh2b2lkICopc2hhZGVyY19jb21w aWxlcl9pbml0aWFsaXplKCk7CisgICAgaWYgKCFyZXQtPnByaXYpCisgICAgICAgIGF2X2ZyZWVw KCZyZXQpOworCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC92dWxr YW5fc3BpcnYuaCBiL2xpYmF2dXRpbC92dWxrYW5fc3BpcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi41NjM4Y2Q5Njk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZ1 dGlsL3Z1bGthbl9zcGlydi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg KiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCjAy MTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBBVkZJTFRFUl9WVUxLQU5fU1BJUlZfSAorI2Rl ZmluZSBBVkZJTFRFUl9WVUxLQU5fU1BJUlZfSAorCisjaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGth bi5oIgorCisjaW5jbHVkZSAidnVsa2FuLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK3R5cGVk ZWYgc3RydWN0IEZGVmtTUElSVkNvbXBpbGVyIHsKKyAgICB2b2lkICpwcml2OworICAgIGludCAo KmNvbXBpbGVfc2hhZGVyKShzdHJ1Y3QgRkZWa1NQSVJWQ29tcGlsZXIgKmN0eCwgdm9pZCAqYXZj dHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBGRlZrU1BJUlZTaGFkZXIgKnNo ZCwgdWludDhfdCAqKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6 ZSwgY29uc3QgY2hhciAqZW50cnlwb2ludCwgdm9pZAoqKm9wYXF1ZSk7CisgICAgdm9pZCAoKmZy ZWVfc2hhZGVyKShzdHJ1Y3QgRkZWa1NQSVJWQ29tcGlsZXIgKmN0eCwgdm9pZCAqKm9wYXF1ZSk7 CisgICAgdm9pZCAoKnVuaW5pdCkoc3RydWN0IEZGVmtTUElSVkNvbXBpbGVyICoqY3R4KTsKK30g RkZWa1NQSVJWQ29tcGlsZXI7CisKKyNpZiBDT05GSUdfTElCR0xTTEFORworRkZWa1NQSVJWQ29t cGlsZXIgKmZmX3ZrX2dsc2xhbmdfaW5pdCh2b2lkKTsKKyNkZWZpbmUgZmZfdmtfc3BpcnZfaW5p dCBmZl92a19nbHNsYW5nX2luaXQKKyNlbmRpZgorI2lmIENPTkZJR19MSUJTSEFERVJDCitGRlZr U1BJUlZDb21waWxlciAqZmZfdmtfc2hhZGVyY19pbml0KHZvaWQpOworI2RlZmluZSBmZl92a19z cGlydl9pbml0IGZmX3ZrX3NoYWRlcmNfaW5pdAorI2VuZGlmCisKKyNlbmRpZiAvKiBBVkZJTFRF Ul9WVUxLQU5fSCAqLwotLSAKMi40Ni4wCgoKCk9uIFdlZCwgQXVnIDE0LCAyMDI0IGF0IDEyOjE5 4oCvUE0gUGV0cm8gTW96aWwgPG1vemlsLnBldHJ5a0BnbWFpbC5jb20+IHdyb3RlOgoKPiBTaWdu ZWQtb2ZmLWJ5OiBQZXRybyBNb3ppbCA8bW96aWwucGV0cnlrQGdtYWlsLmNvbT4KPiAtLS0KPiAg bGliYXZjb2RlYy9NYWtlZmlsZSAgICAgICB8ICAgIDEgKwo+ICBsaWJhdmNvZGVjL2h3YWNjZWxz LmggICAgIHwgICAgMSArCj4gIGxpYmF2Y29kZWMvdnVsa2FuX2RpcmFjLmMgfCAzNjE1ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCAzNjE3 IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuX2Rp cmFjLmMKPgo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9N YWtlZmlsZQo+IGluZGV4IDI2MmQwYTNkM2UuLjg1YWYzMWY0ZjAgMTAwNjQ0Cj4gLS0tIGEvbGli YXZjb2RlYy9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiBAQCAtMTAwMSw2 ICsxMDAxLDcgQEAgT0JKUy0kKENPTkZJR19BVjFfTlZERUNfSFdBQ0NFTCkgICAgICAgICAgKz0K PiBudmRlY19hdjEubwo+ICBPQkpTLSQoQ09ORklHX0FWMV9WQUFQSV9IV0FDQ0VMKSAgICAgICAg ICArPSB2YWFwaV9hdjEubwo+ICBPQkpTLSQoQ09ORklHX0FWMV9WRFBBVV9IV0FDQ0VMKSAgICAg ICAgICArPSB2ZHBhdV9hdjEubwo+ICBPQkpTLSQoQ09ORklHX0FWMV9WVUxLQU5fSFdBQ0NFTCkg ICAgICAgICArPSB2dWxrYW5fZGVjb2RlLm8gdnVsa2FuX2F2MS5vCj4gK09CSlMtJChDT05GSUdf RElSQUNfVlVMS0FOX0hXQUNDRUwpICAgICAgICAgICAgICArPSB2dWxrYW5fZGlyYWMubwo+ICBP QkpTLSQoQ09ORklHX0gyNjNfVkFBUElfSFdBQ0NFTCkgICAgICAgICArPSB2YWFwaV9tcGVnNC5v Cj4gIE9CSlMtJChDT05GSUdfSDI2M19WSURFT1RPT0xCT1hfSFdBQ0NFTCkgICs9IHZpZGVvdG9v bGJveC5vCj4gIE9CSlMtJChDT05GSUdfSDI2NF9EM0QxMVZBX0hXQUNDRUwpICAgICAgICs9IGR4 dmEyX2gyNjQubwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2h3YWNjZWxzLmggYi9saWJhdmNv ZGVjL2h3YWNjZWxzLmgKPiBpbmRleCA1MTcxZTRjN2Q3Li5mNmQxNDhiMTY5IDEwMDY0NAo+IC0t LSBhL2xpYmF2Y29kZWMvaHdhY2NlbHMuaAo+ICsrKyBiL2xpYmF2Y29kZWMvaHdhY2NlbHMuaAo+ IEBAIC0yNyw2ICsyNyw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgRkZIV0FjY2VsIGZmX2F2MV9u dmRlY19od2FjY2VsOwo+ICBleHRlcm4gY29uc3Qgc3RydWN0IEZGSFdBY2NlbCBmZl9hdjFfdmFh cGlfaHdhY2NlbDsKPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBGRkhXQWNjZWwgZmZfYXYxX3ZkcGF1 X2h3YWNjZWw7Cj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgRkZIV0FjY2VsIGZmX2F2MV92dWxrYW5f aHdhY2NlbDsKPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBGRkhXQWNjZWwgZmZfZGlyYWNfdnVsa2Fu X2h3YWNjZWw7Cj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgRkZIV0FjY2VsIGZmX2gyNjNfdmFhcGlf aHdhY2NlbDsKPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBGRkhXQWNjZWwgZmZfaDI2M192aWRlb3Rv b2xib3hfaHdhY2NlbDsKPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBGRkhXQWNjZWwgZmZfaDI2NF9k M2QxMXZhX2h3YWNjZWw7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuX2RpcmFjLmMg Yi9saWJhdmNvZGVjL3Z1bGthbl9kaXJhYy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwLi5iYjhiNzU5NTdkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Y29k ZWMvdnVsa2FuX2RpcmFjLmMKPiBAQCAtMCwwICsxLDM2MTUgQEAKPiArLyoKPiArICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiAr ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAxIFVTQQo+ICsgKi8K PiArCj4gKyNpbmNsdWRlICJkaXJhY2RlYy5oIgo+ICsjaW5jbHVkZSAidnVsa2FuLmgiCj4gKyNp bmNsdWRlICJ2dWxrYW5fZGVjb2RlLmgiCj4gKyNpbmNsdWRlICJsaWJhdmZpbHRlci92dWxrYW5f c3BpcnYuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC92dWxrYW5fbG9hZGVyLmgiCj4gKyNpbmNs dWRlICJsaWJhdmNvZGVjL3B0aHJlYWRfaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImxpYmF2Y29k ZWMvZGlyYWNfdmxjLmMiCj4gKwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgU3ViYmFuZE9mZnNldCB7 Cj4gKyAgICBpbnQzMl90IGJhc2Vfb2ZmOwo+ICsgICAgaW50MzJfdCBzdHJpZGU7Cj4gKyAgICBp bnQzMl90IHBhZDA7Cj4gKyAgICBpbnQzMl90IHBhZDE7Cj4gK30gU3ViYmFuZE9mZnNldDsKPiAr Cj4gK3R5cGVkZWYgc3RydWN0IFNsaWNlQ29lZmZWayB7Cj4gKyAgICBpbnQzMl90IGxlZnQ7Cj4g KyAgICBpbnQzMl90IHRvcDsKPiArICAgIGludDMyX3QgdG90X2g7Cj4gKyAgICBpbnQzMl90IHRv dF92Owo+ICsgICAgaW50MzJfdCB0b3Q7Cj4gKyAgICBpbnQzMl90IG9mZnM7Cj4gKyAgICBpbnQz Ml90IHBhZDA7Cj4gKyAgICBpbnQzMl90IHBhZDE7Cj4gK30gU2xpY2VDb2VmZlZrOwo+ICsKPiAr dHlwZWRlZiBzdHJ1Y3QgV2F2ZWxldFB1c2hDb25zdCB7Cj4gKyAgICBpbnQgcmVhbF9wbGFuZV9k aW1zWzZdOwo+ICsgICAgaW50IHBsYW5lX29mZnNbM107Cj4gKyAgICBpbnQgcGxhbmVfc3RyaWRl c1szXTsKPiArICAgIGludCBkd1szXTsKPiArICAgIGludCB3YXZlbGV0X2RlcHRoOwo+ICt9IFdh dmVsZXRQdXNoQ29uc3Q7Cj4gKwo+ICt0eXBlZGVmICBzdHJ1Y3QgRGlyYWNWdWxrYW5EZWNvZGVD b250ZXh0IHsKPiArICAgIEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKPiArICAgIFZrU2FtcGxlcllj YmNyQ29udmVyc2lvbiB5dXZfc2FtcGxlcjsKPiArICAgIFZrU2FtcGxlciBzYW1wbGVyOwo+ICsK PiArICAgIEZGVnVsa2FuUGlwZWxpbmUgdmVydF93YXZlbGV0X3BsWzldOwo+ICsgICAgRkZWa1NQ SVJWU2hhZGVyIHZlcnRfd2F2ZWxldF9zaGRbOV07Cj4gKwo+ICsgICAgRkZWdWxrYW5QaXBlbGlu ZSBob3Jpel93YXZlbGV0X3BsWzldOwo+ICsgICAgRkZWa1NQSVJWU2hhZGVyIGhvcml6X3dhdmVs ZXRfc2hkWzldOwo+ICsKPiArICAgIEZGVnVsa2FuUGlwZWxpbmUgY3B5X3RvX2ltYWdlX3BsWzNd Owo+ICsgICAgRkZWa1NQSVJWU2hhZGVyIGNweV90b19pbWFnZV9zaGRbM107Cj4gKwo+ICsgICAg RkZWdWxrYW5QaXBlbGluZSBxdWFudF9wbDsKPiArICAgIEZGVmtTUElSVlNoYWRlciBxdWFudF9z aGQ7Cj4gKwo+ICsgICAgRkZWa1F1ZXVlRmFtaWx5Q3R4IHFmOwo+ICsgICAgRkZWa0V4ZWNQb29s IGV4ZWNfcG9vbDsKPiArCj4gKyAgICBpbnQgcXVhbnRfdmFsX2J1Zl9zaXplOwo+ICsgICAgaW50 IHRocmVhZF9idWZfc2l6ZTsKPiArICAgIGludDMyX3QgKnF1YW50X3ZhbF9idWZfdmtfcHRyOwo+ ICsgICAgRkZWa0J1ZmZlciAqcXVhbnRfdmFsX2J1ZjsKPiArICAgIEFWQnVmZmVyUmVmICphdl9x dWFudF92YWxfYnVmOwo+ICsgICAgc2l6ZV90IHF1YW50X3ZhbF9idWZfb2ZmczsKPiArCj4gKyAg ICBpbnQgbl9zbGljZV9idWZzOwo+ICsgICAgaW50IHNsaWNlX2J1Zl9zaXplOwo+ICsgICAgU2xp Y2VDb2VmZlZrICpzbGljZV9idWZfdmtfcHRyOwo+ICsgICAgRkZWa0J1ZmZlciAqcXVhbnRfYnVm Owo+ICsgICAgQVZCdWZmZXJSZWYgKmF2X3F1YW50X2J1ZjsKPiArICAgIHNpemVfdCBxdWFudF9i dWZfb2ZmczsKPiArCj4gKyAgICBpbnQzMl90ICpxdWFudF9idWZfdmtfcHRyOwo+ICsgICAgaW50 IHF1YW50X2J1Zl9zaXplOwo+ICsgICAgRkZWa0J1ZmZlciAqc2xpY2VfYnVmOwo+ICsgICAgQVZC dWZmZXJSZWYgKmF2X3NsaWNlX2J1ZjsKPiArICAgIHNpemVfdCBzbGljZV9idWZfb2ZmczsKPiAr Cj4gKyAgICBGRlZrQnVmZmVyIHRtcF9idWY7Cj4gKyAgICBGRlZrQnVmZmVyIHRtcF9pbnRlcmxl YXZlX2J1ZjsKPiArCj4gKyAgICBGRlZrQnVmZmVyIHN1YmJhbmRfaW5mbzsKPiArICAgIFN1YmJh bmRPZmZzZXQgKnN1YmJhbmRfaW5mb19wdHI7Cj4gKwo+ICsgICAgaW50IHNsaWNlX3ZhbHNfc2l6 ZTsKPiArCj4gKyAgICBXYXZlbGV0UHVzaENvbnN0IHBDb25zdDsKPiArfSBEaXJhY1Z1bGthbkRl Y29kZUNvbnRleHQ7Cj4gKwo+ICt0eXBlZGVmICBzdHJ1Y3QgRGlyYWNWdWxrYW5EZWNvZGVQaWN0 dXJlIHsKPiArICAgIERpcmFjRnJhbWUgKmZyYW1lOwo+ICt9IERpcmFjVnVsa2FuRGVjb2RlUGlj dHVyZTsKPiArCj4gK3N0YXRpYyB2b2lkIGZyZWVfY29tbW9uKEFWQ29kZWNDb250ZXh0ICphdmN0 eCkKPiArewo+ICsgICAgRGlyYWNWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50 ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOwo+ICsgICAgRGlyYWNDb250ZXh0ICpjdHggPSBhdmN0 eC0+cHJpdl9kYXRhOwo+ICsgICAgRkZWdWxrYW5Db250ZXh0ICpzID0gJmRlYy0+dmtjdHg7Cj4g KyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmZGVjLT52a2N0eC52a2ZuOwo+ICsKPiArICAg IGlmIChjdHgtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlKSB7Cj4gKyAgICAgICAgYXZfZnJlZShj dHgtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBXYWl0 IG9uIGFuZCBmcmVlIGV4ZWN1dGlvbiBwb29sICovCj4gKyAgICBpZiAoZGVjLT5leGVjX3Bvb2wu Y21kX2J1ZnMpIHsKPiArICAgICAgICBmZl92a19leGVjX3Bvb2xfZnJlZShzLCAmZGVjLT5leGVj X3Bvb2wpOwo+ICsgICAgfQo+ICsKPiArICAgIGZmX3ZrX3BpcGVsaW5lX2ZyZWUocywgJmRlYy0+ cXVhbnRfcGwpOwo+ICsgICAgZmZfdmtfc2hhZGVyX2ZyZWUocywgJmRlYy0+cXVhbnRfc2hkKTsK PiArCj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewo+ICsgICAgICAgIGZmX3Zr X3BpcGVsaW5lX2ZyZWUocywgJmRlYy0+Y3B5X3RvX2ltYWdlX3BsW2ldKTsKPiArICAgICAgICBm Zl92a19zaGFkZXJfZnJlZShzLCAmZGVjLT5jcHlfdG9faW1hZ2Vfc2hkW2ldKTsKPiArICAgIH0K PiArCj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk7IGkrKykgewo+ICsgICAgICAgIGZmX3Zr X3BpcGVsaW5lX2ZyZWUocywgJmRlYy0+dmVydF93YXZlbGV0X3BsW2ldKTsKPiArICAgICAgICBm Zl92a19zaGFkZXJfZnJlZShzLCAmZGVjLT52ZXJ0X3dhdmVsZXRfc2hkW2ldKTsKPiArCj4gKyAg ICAgICAgZmZfdmtfcGlwZWxpbmVfZnJlZShzLCAmZGVjLT5ob3Jpel93YXZlbGV0X3BsW2ldKTsK PiArICAgICAgICBmZl92a19zaGFkZXJfZnJlZShzLCAmZGVjLT5ob3Jpel93YXZlbGV0X3NoZFtp XSk7Cj4gKyAgICB9Cj4gKyAgICAvLyBUT0RPOiBBZGQgZnJlZWluZyBhbGwgcGlwZWxpbmVzIGFu ZCBzaGFkZXJzIGZvciB3YXZlbGV0cwo+ICsgICAgLy8KPiArCj4gKyAgICAvLyBpZiAoZGVjLT55 dXZfc2FtcGxlcikKPiArICAgIC8vICAgICB2ay0+RGVzdHJveVNhbXBsZXJZY2JjckNvbnZlcnNp b24ocy0+aHdjdHgtPmFjdF9kZXYsCj4gZGVjLT55dXZfc2FtcGxlciwKPiArICAgIC8vICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jKTsKPiArICAg IGlmIChkZWMtPnNhbXBsZXIpCj4gKyAgICAgICAgdmstPkRlc3Ryb3lTYW1wbGVyKHMtPmh3Y3R4 LT5hY3RfZGV2LCBkZWMtPnNhbXBsZXIsCj4gcy0+aHdjdHgtPmFsbG9jKTsKPiArCj4gKyAgICBh dl9idWZmZXJfdW5yZWYoJmRlYy0+YXZfcXVhbnRfdmFsX2J1Zik7Cj4gKyAgICBhdl9idWZmZXJf dW5yZWYoJmRlYy0+YXZfcXVhbnRfYnVmKTsKPiArICAgIGF2X2J1ZmZlcl91bnJlZigmZGVjLT5h dl9zbGljZV9idWYpOwo+ICsgICAgYXZfYnVmZmVyX3VucmVmKCZkZWMtPmF2X3NsaWNlX2J1Zik7 Cj4gKwo+ICsgICAgZmZfdmtfZnJlZV9idWYoJmRlYy0+dmtjdHgsICZkZWMtPnN1YmJhbmRfaW5m byk7Cj4gKwo+ICsgICAgZmZfdmtfZnJlZV9idWYoJmRlYy0+dmtjdHgsICZkZWMtPnRtcF9idWYp Owo+ICsgICAgZmZfdmtfZnJlZV9idWYoJmRlYy0+dmtjdHgsICZkZWMtPnRtcF9pbnRlcmxlYXZl X2J1Zik7Cj4gKwo+ICsgICAgZmZfdmtfdW5pbml0KHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZf YWx3YXlzX2lubGluZSBpbmxpbmUgdm9pZCBiYXJfcmVhZChWa0J1ZmZlck1lbW9yeUJhcnJpZXIy Cj4gKmJ1Zl9iYXIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCAqbmJfYnVmX2JhciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRkZWa0J1ZmZlciAqYnVmKSB7Cj4gKyAgICBidWZfYmFyWygqbmJf YnVmX2JhcikrK10gPSAoVmtCdWZmZXJNZW1vcnlCYXJyaWVyMikgewo+ICsgICAgICAgIC5zVHlw ZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9NRU1PUllfQkFSUklFUl8yLAo+ICsgICAgICAg IC5zcmNTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwK PiArICAgICAgICAuZHN0U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NI QURFUl9CSVQsCj4gKyAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSBWS19BQ0NFU1NfU0hBREVSX1JF QURfQklULAo+ICsgICAgICAgIC5kc3RBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfU0hBREVSX1NU T1JBR0VfUkVBRF9CSVQsCj4gKyAgICAgICAgLnNyY1F1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVV RV9GQU1JTFlfSUdOT1JFRCwKPiArICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FV RVVFX0ZBTUlMWV9JR05PUkVELAo+ICsgICAgICAgIC5idWZmZXIgPSBidWYtPmJ1ZiwKPiArICAg ICAgICAuc2l6ZSA9IGJ1Zi0+c2l6ZSwKPiArICAgICAgICAub2Zmc2V0ID0gMCwKPiArICAgIH07 Cj4gK30KPiArCj4gK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGlubGluZSB2b2lkIGJhcl93cml0 ZShWa0J1ZmZlck1lbW9yeUJhcnJpZXIyCj4gKmJ1Zl9iYXIsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbmJfYnVmX2JhciwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWa0J1ZmZlciAqYnVm KSB7Cj4gKyAgICBidWZfYmFyWygqbmJfYnVmX2JhcikrK10gPSAoVmtCdWZmZXJNZW1vcnlCYXJy aWVyMikgewo+ICsgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9NRU1P UllfQkFSUklFUl8yLAo+ICsgICAgICAgIC5zcmNTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFH RV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKPiArICAgICAgICAuZHN0U3RhZ2VNYXNrID0gVktfUElQ RUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCj4gKyAgICAgICAgLnNyY0FjY2Vzc01h c2sgPSBWS19BQ0NFU1NfU0hBREVSX1dSSVRFX0JJVCwKPiArICAgICAgICAuZHN0QWNjZXNzTWFz ayA9IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1dSSVRFX0JJVCwKPiArICAgICAgICAuc3Jj UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAo+ICsgICAgICAgIC5k c3RRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQsCj4gKyAgICAgICAg LmJ1ZmZlciA9IGJ1Zi0+YnVmLAo+ICsgICAgICAgIC5zaXplID0gYnVmLT5zaXplLAo+ICsgICAg ICAgIC5vZmZzZXQgPSAwLAo+ICsgICAgfTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQg YWxsb2NfdG1wX2J1ZnMoRGlyYWNDb250ZXh0ICpjdHgsCj4gRGlyYWNWdWxrYW5EZWNvZGVDb250 ZXh0ICpkZWMpIHsKPiArICAgIGludCBlcnIsIHBsYW5lX3NpemU7Cj4gKwo+ICsgICAgcGxhbmVf c2l6ZSA9IHNpemVvZihpbnQzMl90KSAqCj4gKyAgICAgICAgKGN0eC0+cGxhbmVbMF0uaWR3dC53 aWR0aCAqIGN0eC0+cGxhbmVbMF0uaWR3dC5oZWlnaHQgKwo+ICsgICAgICAgICBjdHgtPnBsYW5l WzFdLmlkd3Qud2lkdGggKiBjdHgtPnBsYW5lWzFdLmlkd3QuaGVpZ2h0ICsKPiArICAgICAgICAg Y3R4LT5wbGFuZVsyXS5pZHd0LndpZHRoICogY3R4LT5wbGFuZVsyXS5pZHd0LmhlaWdodCk7Cj4g Kwo+ICsgICAgaWYgKGRlYy0+dG1wX2J1Zi5idWYgIT0gTlVMTCkgewo+ICsgICAgICAgIGZmX3Zr X2ZyZWVfYnVmKCZkZWMtPnZrY3R4LCAmZGVjLT50bXBfYnVmKTsKPiArICAgICAgICBmZl92a19m cmVlX2J1ZigmZGVjLT52a2N0eCwgJmRlYy0+dG1wX2ludGVybGVhdmVfYnVmKTsKPiArICAgIH0K PiArCj4gKyAgICBlcnIgPSBmZl92a19jcmVhdGVfYnVmKCZkZWMtPnZrY3R4LCAmZGVjLT50bXBf YnVmLCBwbGFuZV9zaXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklUIHwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFHRV9C VUZGRVJfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BF UlRZX0RFVklDRV9MT0NBTF9CSVQpOwo+ICsgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgcmV0 dXJuIGVycjsKPiArCj4gKyAgICBlcnIgPSBmZl92a19jcmVhdGVfYnVmKCZkZWMtPnZrY3R4LCAm ZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYsCj4gcGxhbmVfc2l6ZSwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU0hBREVSX0RF VklDRV9BRERSRVNTX0JJVCB8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf QlVGRkVSX1VTQUdFX1NUT1JBR0VfQlVGRkVSX0JJVCwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklUKTsKPiArICAgIGlmIChl cnIgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2hvc3RfbWFwcGVkX2J1ZihEaXJhY1Z1bGth bkRlY29kZUNvbnRleHQgKmRlYywKPiBzaXplX3QgcmVxX3NpemUsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKiptZW0sIEFWQnVmZmVyUmVmICoqYXZidWYsCj4gRkZW a0J1ZmZlciAqKmJ1Zikgewo+ICsgICAgLy8gRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJmRlYy0+ dmtjdHgudmtmbjsKPiArICAgIC8vIFZrUmVzdWx0IHJldDsKPiArICAgIGludCBlcnI7Cj4gKwo+ ICsgICAgZXJyID0gZmZfdmtfY3JlYXRlX2F2YnVmKCZkZWMtPnZrY3R4LCBhdmJ1ZiwgcmVxX3Np emUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g JmNyZWF0ZV9kZXNjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJmltcG9ydF9k ZXNjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NIQURF Ul9ERVZJQ0VfQUREUkVTU19CSVQgfAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX0JVRkZFUl9VU0FHRV9TVE9SQUdFX0JVRkZFUl9CSVQsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCB8Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfQ09IRVJF TlRfQklUKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ ICsgICAgKmJ1ZiA9IChGRlZrQnVmZmVyKikoKmF2YnVmKS0+ZGF0YTsKPiArICAgIGVyciA9IGZm X3ZrX21hcF9idWZmZXIoJmRlYy0+dmtjdHgsICpidWYsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICh1aW50OF90ICoqKW1lbSwgMCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAg ICByZXR1cm4gZXJyOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGFsbG9jX3NsaWNlc19idWYoRGlyYWNDb250ZXh0ICpjdHgsIERpcmFjVnVsa2FuRGVjb2RlQ29u dGV4dAo+ICpkZWMpIHsKPiArICAgIGludCBlcnIsIGxlbmd0aCA9IGN0eC0+bnVtX3kgKiBjdHgt Pm51bV94Owo+ICsKPiArICAgIGRlYy0+bl9zbGljZV9idWZzID0gbGVuZ3RoOwo+ICsKPiArICAg IGlmIChkZWMtPnNsaWNlX2J1Zl92a19wdHIpIHsKPiArICAgICAgICBhdl9idWZmZXJfdW5yZWYo JmRlYy0+YXZfc2xpY2VfYnVmKTsKPiArICAgIH0KPiArCj4gKyAgICBkZWMtPnNsaWNlX2J1Zl9z aXplID0gc2l6ZW9mKFNsaWNlQ29lZmZWaykgKiBsZW5ndGggKiAzICoKPiBNQVhfRFdUX0xFVkVM UzsKPiArICAgIGVyciA9IGFsbG9jX2hvc3RfbWFwcGVkX2J1ZihkZWMsIGRlYy0+c2xpY2VfYnVm X3NpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiopJmRlYy0+ c2xpY2VfYnVmX3ZrX3B0ciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVj LT5hdl9zbGljZV9idWYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlYy0+ c2xpY2VfYnVmKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4g Kwo+ICsgICAgZXJyID0gZmZfdmtfc2V0X2Rlc2NyaXB0b3JfYnVmZmVyKCZkZWMtPnZrY3R4LCAm ZGVjLT5xdWFudF9wbCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgMSwgMiwgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT5z bGljZV9idWYtPmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRlYy0+c2xpY2VfYnVmLT5zaXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAg IHJldHVybiBlcnI7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg YWxsb2NfZGVxdWFudF9idWYoRGlyYWNDb250ZXh0ICpjdHgsIERpcmFjVnVsa2FuRGVjb2RlQ29u dGV4dAo+ICpkZWMpIHsKPiArICAgIGludCBlcnIsIGxlbmd0aCA9IGN0eC0+bnVtX3kgKiBjdHgt Pm51bV94Owo+ICsKPiArICAgIGlmIChkZWMtPnF1YW50X2J1Zl92a19wdHIpIHsKPiArICAgICAg ICBhdl9idWZmZXJfdW5yZWYoJmRlYy0+YXZfcXVhbnRfYnVmKTsKPiArICAgIH0KPiArCj4gKyAg ICBkZWMtPm5fc2xpY2VfYnVmcyA9IGxlbmd0aDsKPiArCj4gKyAgICBkZWMtPnF1YW50X2J1Zl9z aXplID0gc2l6ZW9mKGludDMyX3QpICogTUFYX0RXVF9MRVZFTFMgKiA4ICogbGVuZ3RoOwo+ICsg ICAgZXJyID0gYWxsb2NfaG9zdF9tYXBwZWRfYnVmKGRlYywgZGVjLT5xdWFudF9idWZfc2l6ZSwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikmZGVjLT5xdWFudF9i dWZfdmtfcHRyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWMtPmF2X3F1 YW50X2J1ZiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVjLT5xdWFudF9i dWYpOwo+ICsgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgcmV0dXJuIGVycjsKPiArCj4gKyAg ICBlcnIgPSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZmZXIoJmRlYy0+dmtjdHgsICZkZWMtPnF1 YW50X3BsLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAxLCAx LCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMtPnF1YW50X2J1 Zi0+YWRkcmVzcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT5x dWFudF9idWYtPnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0ZPUk1BVF9VTkRFRklORUQpOwo+ICsgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgcmV0dXJu IGVycjsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBzdWJiYW5k X2NvZWZmcyhjb25zdCBEaXJhY0NvbnRleHQgKnMsIGludCB4LCBpbnQgeSwgaW50IHAsIGludAo+ IG9mZiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBTbGljZUNvZWZmVmsgKmMpCj4gK3sK PiArICAgIGludCBsZXZlbCwgY29lZiA9IDA7Cj4gKyAgICBmb3IgKGxldmVsID0gMDsgbGV2ZWwg PD0gcy0+d2F2ZWxldF9kZXB0aDsgbGV2ZWwrKykgewo+ICsgICAgICAgIFNsaWNlQ29lZmZWayAq byA9ICZjW2xldmVsXTsKPiArICAgICAgICBjb25zdCBTdWJCYW5kICpiID0gJnMtPnBsYW5lW3Bd LmJhbmRbbGV2ZWxdWzNdOyAvKiBvcmllbnRhdGlvbgo+IGRvZW5zJ3QgbWF0dGVyICovCj4gKyAg ICAgICAgby0+dG9wICAgPSBiLT5oZWlnaHQgKiB5IC8gcy0+bnVtX3k7Cj4gKyAgICAgICAgby0+ bGVmdCAgPSBiLT53aWR0aCAgKiB4IC8gcy0+bnVtX3g7Cj4gKyAgICAgICAgby0+dG90X2ggPSAo KGItPndpZHRoICAqICh4ICsgMSkpIC8gcy0+bnVtX3gpIC0gby0+bGVmdDsKPiArICAgICAgICBv LT50b3RfdiA9ICgoYi0+aGVpZ2h0ICogKHkgKyAxKSkgLyBzLT5udW1feSkgLSBvLT50b3A7Cj4g KyAgICAgICAgby0+dG90ICAgPSBvLT50b3RfaCAqIG8tPnRvdF92Owo+ICsgICAgICAgIG8tPm9m ZnMgID0gb2ZmICsgY29lZjsKPiArICAgICAgICBjb2VmICAgICs9IG8tPnRvdCAqICg0IC0gISFs ZXZlbCk7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gY29lZjsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBhbGxvY19xdWFudF9idWYoRGlyYWNDb250ZXh0ICpjdHgsIERpcmFjVnVsa2FuRGVjb2RlQ29u dGV4dAo+ICpkZWMpIHsKPiArICAgIGludCBlcnIsIGxlbmd0aCA9IGN0eC0+bnVtX3kgKiBjdHgt Pm51bV94LCBjb2VmX2J1Zl9zaXplOwo+ICsgICAgU2xpY2VDb2VmZlZrIHRtcFtNQVhfRFdUX0xF VkVMU107Cj4gKyAgICBjb2VmX2J1Zl9zaXplID0gc3ViYmFuZF9jb2VmZnMoY3R4LCBjdHgtPm51 bV94IC0gMSwgY3R4LT5udW1feSAtIDEsCj4gMCwgMCwgdG1wKSArIDg7Cj4gKyAgICBjb2VmX2J1 Zl9zaXplID0gY29lZl9idWZfc2l6ZSArIDUxMjsKPiArICAgIGRlYy0+c2xpY2VfdmFsc19zaXpl ID0gY29lZl9idWZfc2l6ZTsKPiArICAgIGNvZWZfYnVmX3NpemUgKj0gc2l6ZW9mKGludDMyX3Qp Owo+ICsKPiArICAgIGlmIChkZWMtPnF1YW50X3ZhbF9idWZfdmtfcHRyKSB7Cj4gKyAgICAgICAg YXZfYnVmZmVyX3VucmVmKCZkZWMtPmF2X3F1YW50X3ZhbF9idWYpOwo+ICsgICAgfQo+ICsKPiAr ICAgIGRlYy0+dGhyZWFkX2J1Zl9zaXplID0gY29lZl9idWZfc2l6ZTsKPiArCj4gKyAgICBkZWMt PnF1YW50X3ZhbF9idWZfc2l6ZSA9IGRlYy0+dGhyZWFkX2J1Zl9zaXplICogMyAqIGxlbmd0aDsK PiArICAgIGVyciA9IGFsbG9jX2hvc3RfbWFwcGVkX2J1ZihkZWMsIGRlYy0+cXVhbnRfdmFsX2J1 Zl9zaXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSZkZWMt PnF1YW50X3ZhbF9idWZfdmtfcHRyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZkZWMtPmF2X3F1YW50X3ZhbF9idWYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmRlYy0+cXVhbnRfdmFsX2J1Zik7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICBy ZXR1cm4gZXJyOwo+ICsKPiArICAgIGVyciA9IGZmX3ZrX3NldF9kZXNjcmlwdG9yX2J1ZmZlcigm ZGVjLT52a2N0eCwgJmRlYy0+cXVhbnRfcGwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsIDEsIDAsIDAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRlYy0+cXVhbnRfdmFsX2J1Zi0+YWRkcmVzcywKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVjLT5xdWFudF92YWxfYnVmLT5zaXplLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKPiArICAgIGlm IChlcnIgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4g K30KPiArCj4gKy8qIC0tLS0tIENvcHkgU2hhZGVyIGluaXQgYW5kIHBpcGVsaW5lIHBhc3MgLS0t LS0gKi8KPiArCj4gK3N0YXRpYyBpbnQgaW5pdF9jcHlfc2hkKERpcmFjVnVsa2FuRGVjb2RlQ29u dGV4dCAqcywgRkZWa1NQSVJWQ29tcGlsZXIKPiAqc3B2LCBpbnQgaWR4KQo+ICt7Cj4gKyAgICBp bnQgZXJyID0gMDsKPiArICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwo+ICsgICAgc2l6ZV90IHNwdl9s ZW47Cj4gKyAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKPiArICAgIEZGVnVsa2FuQ29udGV4 dCAqdmtjdHggPSAmcy0+dmtjdHg7Cj4gKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5n ICpkZXNjOwo+ICsgICAgRkZWa1NQSVJWU2hhZGVyICpzaGQgPSAmcy0+Y3B5X3RvX2ltYWdlX3No ZFtpZHhdOwo+ICsgICAgRkZWdWxrYW5QaXBlbGluZSAqcGwgPSAmcy0+Y3B5X3RvX2ltYWdlX3Bs W2lkeF07Cj4gKyAgICBGRlZrRXhlY1Bvb2wgKmV4ZWMgPSAmcy0+ZXhlY19wb29sOwo+ICsgICAg Y29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZrY3R4Lm91dHB1 dF9mb3JtYXQpOwo+ICsKPiArICAgIFJFVChmZl92a19zaGFkZXJfaW5pdChwbCwgc2hkLCAiY3B5 X3RvX2ltYWdlIiwKPiBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsIDApKTsKPiArCj4gKyAg ICBzaGQgPSAmcy0+Y3B5X3RvX2ltYWdlX3NoZFtpZHhdOwo+ICsgICAgZmZfdmtfc2hhZGVyX3Nl dF9jb21wdXRlX3NpemVzKHNoZCwgOCwgOCwgMyk7Cj4gKwo+ICsgICAgR0xTTEMoMCwgI2V4dGVu c2lvbiBHTF9FWFRfZGVidWdfcHJpbnRmIDogZW5hYmxlKTsKPiArICAgIEdMU0xDKDAsICNleHRl bnNpb24gR0xfRVhUX3NjYWxhcl9ibG9ja19sYXlvdXQgOiBlbmFibGUpOwo+ICsgICAgR0xTTEMo MCwgI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX2V4cGxpY2l0X2FyaXRobWV0aWNfdHlwZXMgOiBl bmFibGUpOwo+ICsKPiArICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZ1td KQo+ICsgICAgewo+ICsgICAgICAgIHsKPiArICAgICAgICAgIC5uYW1lID0gImluX2J1ZiIsCj4g KyAgICAgICAgICAuc3RhZ2VzID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAg ICAgICAgLnR5cGUgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCj4gKyAgICAg ICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MzJfdCBpbkJ1ZltdOyIsCj4gKyAgICAgICAgICAubWVt X2xheW91dCA9ICJzdGQ0MzAiLAo+ICsgICAgICAgICAgLm1lbV9xdWFsaSA9ICJyZWFkb25seSIs Cj4gKyAgICAgICAgICAuZGltZW5zaW9ucyA9IDEsCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7 Cj4gKyAgICAgICAgICAubmFtZSA9ICJvdXRfaW1nIiwKPiArICAgICAgICAgIC5zdGFnZXMgPSBW S19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAudHlwZSA9IFZLX0RFU0NS SVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFLAo+ICsgICAgICAgICAgLm1lbV9xdWFsaSA9ICJ3cml0 ZW9ubHkiLAo+ICsgICAgICAgICAgLm1lbV9sYXlvdXQgID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQo dmtjdHgtPm91dHB1dF9mb3JtYXQpLAo+ICsgICAgICAgICAgLyoubWVtX2xheW91dCAgPSAicmdi YTMyZiIsKi8KPiArICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKPiArICAgICAgICAgIC5lbGVt cyA9IHBsYW5lcywKPiArICAgICAgICB9LAo+ICsgICAgfTsKPiArICAgIFJFVChmZl92a19waXBl bGluZV9kZXNjcmlwdG9yX3NldF9hZGQodmtjdHgsIHBsLCBzaGQsIGRlc2MsIDIsIDAsIDApKTsK PiArCj4gKyAgICBmZl92a19hZGRfcHVzaF9jb25zdGFudChwbCwgMCwgc2l6ZW9mKFdhdmVsZXRQ dXNoQ29uc3QpLAo+IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCk7Cj4gKwo+ICsgICAgR0xT TEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHN0ZDQzMCkgdW5pZm9ybSBwdXNoQ29uc3RhbnRz IHsgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaXZlYzIgcGxhbmVfc2l6ZXNbM107ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQgcGxhbmVfb2Zm c1szXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwg ICAgIGludCBwbGFuZV9zdHJpZGVzWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IGR3WzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQgd2F2ZWxldF9kZXB0aDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMCwgfTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAg ICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKPiArCj4gKyAgICBHTFNMQygwLCB2b2lkIG1haW4oKSB7Cj4gICAgICAgICAg ICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgaW50IHggPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlv bklELngpOwo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICBpbnQgeSA9IGlu dChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueSk7Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdM U0xDKDEsICAgIGludCBwbGFuZSA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueik7Cj4gICAg ICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGlmICghSVNfV0lUSElOKGl2ZWMyKHgs IHkpLCBpbWFnZVNpemUob3V0X2ltZ1twbGFuZV0pKSkKPiByZXR1cm47ICAgICAgICAgKTsKPiAr ICAgIEdMU0xDKDEsICAgIGludCBpZHggPSBwbGFuZV9vZmZzW3BsYW5lXSArIHkgKiBwbGFuZV9z dHJpZGVzW3BsYW5lXSArCj4geDsgICAgICAgICAgICAgKTsKPiArICAgIGlmIChpZHggPT0gMikg ewo+ICsgICAgICAgIEdMU0xDKDEsICAgIGludDMyX3QgaXZhbCA9IGluQnVmW2lkeF0gKyAyMDQ4 Owo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICAgICAgR0xTTEMoMSwgICAgZmxvYXQgdmFsID0g ZmxvYXQoY2xhbXAoaXZhbCwgMCwgNDA5NikpIC8gNjU1MzUuMDsKPiAgICAgICAgKTsKPiArICAg IH0gZWxzZSBpZiAoaWR4ID09IDEpIHsKPiArICAgICAgICBHTFNMQygxLCAgICBpbnQzMl90IGl2 YWwgPSBpbkJ1ZltpZHhdICsgNTEyOwo+ICAgICAgICAgICAgICAgKTsKPiArICAgICAgICBHTFNM QygxLCAgICBmbG9hdCB2YWwgPSBmbG9hdChjbGFtcChpdmFsLCAwLCAxMDI0KSkgLyA2NTUzNS4w Owo+ICAgICAgICApOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBHTFNMQygxLCAgICBpbnQz Ml90IGl2YWwgPSBpbkJ1ZltpZHhdICsgMTI4Owo+ICAgICAgICAgICAgICAgKTsKPiArICAgICAg ICBHTFNMQygxLCAgICBmbG9hdCB2YWwgPSBmbG9hdChjbGFtcChpdmFsLCAwLCAyNTYpKSAvIDI1 Ni4wOwo+ICAgICAgICApOwo+ICsgICAgfQo+ICsgICAgR0xTTEMoMSwgICAgaW1hZ2VTdG9yZShv dXRfaW1nW3BsYW5lXSwgaXZlYzIoeCwgeSksIHZlYzQodmFsKSk7Cj4gICAgICAgICAgICAgICAg KTsKPiArICAgIEdMU0xDKDAsIH0KPiAgICAgICAgICAgICAgICk7Cj4gKwo+ICsgICAgUkVUKHNw di0+Y29tcGlsZV9zaGFkZXIoc3B2LCB2a2N0eCwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAi bWFpbiIsCj4gJnNwdl9vcGFxdWUpKTsKPiArICAgIFJFVChmZl92a19zaGFkZXJfY3JlYXRlKHZr Y3R4LCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKPiArICAgIFJFVChmZl92a19p bml0X2NvbXB1dGVfcGlwZWxpbmUodmtjdHgsIHBsLCBzaGQpKTsKPiArICAgIFJFVChmZl92a19l eGVjX3BpcGVsaW5lX3JlZ2lzdGVyKHZrY3R4LCBleGVjLCBwbCkpOwo+ICsKPiArZmFpbDoKPiAr ICAgIGlmIChzcHZfb3BhcXVlKQo+ICsgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2 X29wYXF1ZSk7Cj4gKwo+ICsgICAgcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGF2X2Fs d2F5c19pbmxpbmUgaW50IGlubGluZQo+IGNweV90b19pbWFnZV9wYXNzKERpcmFjVnVsa2FuRGVj b2RlQ29udGV4dCAqZGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmFjQ29udGV4 dCAqY3R4LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtFeGVjQ29udGV4dCAqZXhl YywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBWa0ltYWdlVmlldyAqdmlld3MsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgVmtCdWZmZXJNZW1vcnlCYXJyaWVyMiAqYnVmX2JhciwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5iX2J1Zl9iYXIsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgVmtJbWFnZU1lbW9yeUJhcnJpZXIyICppbWdfYmFyLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqbmJfaW1nX2JhciwgaW50IGlkeCkgewo+ICsgICAg aW50IGVyciwgcHJldl9uYl9iYXIgPSAqbmJfYnVmX2JhciwgcHJldl9uYl9pbWdfYmFyID0gKm5i X2ltZ19iYXI7Cj4gKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmZGVjLT52a2N0eC52a2Zu Owo+ICsgICAgRGlyYWNWdWxrYW5EZWNvZGVQaWN0dXJlICpwaWMgPSBjdHgtPmh3YWNjZWxfcGlj dHVyZV9wcml2YXRlOwo+ICsKPiArICAgIGVyciA9IGZmX3ZrX3NldF9kZXNjcmlwdG9yX2J1ZmZl cigmZGVjLT52a2N0eCwKPiAmZGVjLT5jcHlfdG9faW1hZ2VfcGxbaWR4XSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYywgMCwgMCwgMCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT50bXBfYnVmLmFkZHJlc3MsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYy0+dG1wX2J1Zi5zaXplLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKPiArICAg IGlmIChlcnIgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgICAgZmZfdmtfdXBk YXRlX2Rlc2NyaXB0b3JfaW1nX2FycmF5KCZkZWMtPnZrY3R4LAo+ICZkZWMtPmNweV90b19pbWFn ZV9wbFtpZHhdLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMs IHBpYy0+ZnJhbWUtPmF2ZnJhbWUsIHZpZXdzLAo+IDAsIDEsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT5zYW1wbGVyKTsKPiArCj4gKyAgICBk ZWMtPnBDb25zdC5yZWFsX3BsYW5lX2RpbXNbMF0gPSBjdHgtPnBsYW5lWzBdLmlkd3Qud2lkdGg7 Cj4gKyAgICBkZWMtPnBDb25zdC5yZWFsX3BsYW5lX2RpbXNbMV0gPSBjdHgtPnBsYW5lWzBdLmlk d3QuaGVpZ2h0Owo+ICsgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzJdID0gY3R4LT5w bGFuZVsxXS5pZHd0LndpZHRoOwo+ICsgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzNd ID0gY3R4LT5wbGFuZVsxXS5pZHd0LmhlaWdodDsKPiArICAgIGRlYy0+cENvbnN0LnJlYWxfcGxh bmVfZGltc1s0XSA9IGN0eC0+cGxhbmVbMl0uaWR3dC53aWR0aDsKPiArICAgIGRlYy0+cENvbnN0 LnJlYWxfcGxhbmVfZGltc1s1XSA9IGN0eC0+cGxhbmVbMl0uaWR3dC5oZWlnaHQ7Cj4gKwo+ICsg ICAgZGVjLT5wQ29uc3QucGxhbmVfc3RyaWRlc1swXSA9IGN0eC0+cGxhbmVbMF0uaWR3dC53aWR0 aDsKPiArICAgIGRlYy0+cENvbnN0LnBsYW5lX3N0cmlkZXNbMV0gPSBjdHgtPnBsYW5lWzFdLmlk d3Qud2lkdGg7Cj4gKyAgICBkZWMtPnBDb25zdC5wbGFuZV9zdHJpZGVzWzJdID0gY3R4LT5wbGFu ZVsyXS5pZHd0LndpZHRoOwo+ICsKPiArICAgIGRlYy0+cENvbnN0LnBsYW5lX29mZnNbMF0gPSAw Owo+ICsgICAgZGVjLT5wQ29uc3QucGxhbmVfb2Zmc1sxXSA9IGN0eC0+cGxhbmVbMF0uaWR3dC53 aWR0aCAqCj4gY3R4LT5wbGFuZVswXS5pZHd0LmhlaWdodDsKPiArICAgIGRlYy0+cENvbnN0LnBs YW5lX29mZnNbMl0gPSBkZWMtPnBDb25zdC5wbGFuZV9vZmZzWzFdCj4gKyAgICAgICAgICAgICsg Y3R4LT5wbGFuZVsxXS5pZHd0LndpZHRoICogY3R4LT5wbGFuZVsxXS5pZHd0LmhlaWdodDsKPiAr Cj4gKyAgICBmZl92a191cGRhdGVfcHVzaF9leGVjKCZkZWMtPnZrY3R4LCBleGVjLCAmZGVjLT5j cHlfdG9faW1hZ2VfcGxbaWR4XSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hB REVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBz aXplb2YoV2F2ZWxldFB1c2hDb25zdCksICZkZWMtPnBDb25zdCk7Cj4gKwo+ICsgICAgYmFyX3Jl YWQoYnVmX2JhciwgbmJfYnVmX2JhciwgJmRlYy0+dG1wX2J1Zik7Cj4gKwo+ICsgICAgZmZfdmtf ZnJhbWVfYmFycmllcigmZGVjLT52a2N0eCwgZXhlYywgcGljLT5mcmFtZS0+YXZmcmFtZSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgaW1nX2JhciwgbmJfaW1nX2JhciwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVS X0JJVCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NIQURFUl9SRUFEX0JJ VCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEKTsKPiArCj4g KyAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5m bykgewo+ICsgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZ X0lORk8sCj4gKyAgICAgICAgICAgIC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSBidWZfYmFyICsg cHJldl9uYl9iYXIsCj4gKyAgICAgICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVyQ291bnQgPSAq bmJfYnVmX2JhciAtIHByZXZfbmJfYmFyLAo+ICsgICAgICAgICAgICAucEltYWdlTWVtb3J5QmFy cmllcnMgPSBpbWdfYmFyICsgcHJldl9uYl9pbWdfYmFyLAo+ICsgICAgICAgICAgICAuaW1hZ2VN ZW1vcnlCYXJyaWVyQ291bnQgPSAqbmJfaW1nX2JhciAtIHByZXZfbmJfaW1nX2JhciwKPiArICAg ICAgICB9KTsKPiArCj4gKyAgICBmZl92a19leGVjX2JpbmRfcGlwZWxpbmUoJmRlYy0+dmtjdHgs IGV4ZWMsCj4gJmRlYy0+Y3B5X3RvX2ltYWdlX3BsW2lkeF0pOwo+ICsKPiArICAgIHZrLT5DbWRE aXNwYXRjaChleGVjLT5idWYsCj4gKyAgICAgICAgICAgICAgICAgICAgY3R4LT5wbGFuZVswXS53 aWR0aCA+PiAzLAo+ICsgICAgICAgICAgICAgICAgICAgIGN0eC0+cGxhbmVbMF0uaGVpZ2h0ID4+ IDMsCj4gKyAgICAgICAgICAgICAgICAgICAgMSk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30K PiArCj4gKy8qIC0tLS0tIExlR2FsbCBXYXZlbGV0IGluaXQgYW5kIHBpcGVsaW5lIHBhc3MgLS0t LS0gKi8KPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGdldF9pZHhbXSA9IHsKPiArICAgICAgQygw LCBpbnQgZ2V0SWR4KGludCBwbGFuZSwgaW50IHgsIGludCB5KSB7Cj4gICApCj4gKyAgICAgIEMo MSwgICAgICByZXR1cm4gcGxhbmVfb2Zmc1twbGFuZV0gKyBwbGFuZV9zdHJpZGVzW3BsYW5lXSAq IHkgKyB4Owo+ICAgKQo+ICsgICAgICBDKDAsIH0KPiAgICkKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBjaGFyIGxlZ2FsbF9sb3dfeVtdID0gewo+ICsgICAgQygwLCBpbnQzMl90IGxlZ2FsbF9s b3dfeShpbnQgcGxhbmUsIGludCB4LCBpbnQgeSkgewo+ICAgKQo+ICsgICAgQygxLCAgICBjb25z dCBpbnQgaCA9IHBsYW5lX3NpemVzW3BsYW5lXS55Owo+ICAgICkKPiArICAgIEMoMSwKPiAgICkK PiArICAgIEMoMSwgICAgY29uc3QgaW50IHlfMSA9ICgoeSAtIDEpID4gMCkgPyAoeSAtIDEpIDog MTsKPiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2YWxfMSA9IGluQnVmW2dldElk eChwbGFuZSwgeCwgeV8xKV07Cj4gICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgeTAgPSB5 Owo+ICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2YWwwID0gaW5CdWZbZ2V0SWR4 KHBsYW5lLCB4LCB5MCldOwo+ICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHkxID0geSAr IDE7Cj4gICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90IHZhbDEgPSBpbkJ1ZltnZXRJ ZHgocGxhbmUsIHgsIHkxKV07Cj4gICAgKQo+ICsgICAgQygxLCAgICByZXR1cm4gdmFsMCAtICgo dmFsMSArIHZhbF8xICsgMikgPj4gMik7Cj4gICApCj4gKyAgICBDKDAsIH0KPiAgICkKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGxlZ2FsbF9oaWdoW10gPSB7Cj4gKyAgICAgIEMoMCwg aW50MzJfdCBsZWdhbGxfaGlnaChpbnQzMl90IHYxLCBpbnQzMl90IHYyLCBpbnQzMl90IHYzKSB7 Cj4gICApCj4gKyAgICAgIEMoMSwgICAgICByZXR1cm4gdjEgKyAoKHYyICsgdjMgKyAxKSA+PiAx KTsKPiAgICApCj4gKyAgICAgIEMoMCwgfQo+ICAgKQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IGNoYXIgbGVnYWxsX3ZlcnRbXSA9IHsKPiArICAgIEMoMCwgdm9pZCBpZHd0X3ZlcnQoaW50IHBs YW5lLCBpbnQgeCwgaW50IHkpIHsKPiAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29u c3QgaW50IGggPSBwbGFuZV9zaXplc1twbGFuZV0ueTsKPiAgICAgICAgICAgICAgICApCj4gKyAg ICBDKDEsCj4gICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgb3V0 MCA9IGxlZ2FsbF9sb3dfeShwbGFuZSwgeCwgeSk7Cj4gICAgICAgICAgICAgICAgKQo+ICsgICAg QygxLCAgICBjb25zdCBpbnQzMl90IHl5ID0gKCh5ICsgMikgPCBoKSA/ICh5ICsgMikgOiAoaCAt IDIpOwo+ICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB0bXAx ID0gbGVnYWxsX2xvd195KHBsYW5lLCB4LCB5eSk7Cj4gICAgICAgICAgICAgICApCj4gKyAgICBD KDEsCj4gICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB5MSA9IHkgKyAx Owo+ICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2YWwxID0g aW5CdWZbZ2V0SWR4KHBsYW5lLCB4LCB5MSldOwo+ICAgICAgICAgICAgICAgICkKPiArICAgIEMo MSwKPiAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCBvdXQxID0g bGVnYWxsX2hpZ2godmFsMSwgb3V0MCwgdG1wMSk7Cj4gICAgICAgICAgICAgICAgKQo+ICsgICAg QygxLAo+ICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBvdXRCdWZbZ2V0SWR4KHBsYW5l LCB4LCB5KV0gICAgID0gb3V0MDsKPiAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIG91 dEJ1ZltnZXRJZHgocGxhbmUsIHgsIHkgKyAxKV0gPSBvdXQxOwo+ICAgICAgICAgICAgICAgICkK PiArICAgIEMoMCwgfQo+ICAgICAgICAgICAgICAgKQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IGNoYXIgbGVnYWxsX2xvd194W10gPSB7Cj4gKyAgICBDKDAsIGludDMyX3QgbGVnYWxsX2xvd194 KGludCBwbGFuZSwgaW50IHgsIGludCB5KSB7Cj4gICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGlu dCB3ID0gcGxhbmVfc2l6ZXNbcGxhbmVdLng7Cj4gICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBp bnQgZHcgPSB3IC8gMjsKPiAgICApCj4gKyAgICBDKDEsCj4gICApCj4gKyAgICBDKDEsICAgIGNv bnN0IGludCB4XzEgPSAoeCA+IDApID8geCA6IDA7Cj4gICApCj4gKyAgICBDKDEsICAgIGNvbnN0 IGludDMyX3QgdmFsXzEgPSBpbkJ1ZltnZXRJZHgocGxhbmUsIHhfMSwgeSldOwo+ICAgICkKPiAr ICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHgxID0gKHggPiAwKSA/ICh4 ICsgZHcpIDogZHc7Cj4gICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90IHZhbDEgPSBp bkJ1ZltnZXRJZHgocGxhbmUsIHgxLCB5KV07Cj4gICAgKQo+ICsgICAgQygxLAo+ICAgKQo+ICsg ICAgQygxLCAgICBjb25zdCBpbnQgeDAgPSAoeCA+IDApID8gKHggKyBkdyAtIDEpIDogZHc7Cj4g ICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90IHZhbDAgPSBpbkJ1ZltnZXRJZHgocGxh bmUsIHgwLCB5KV07Cj4gICAgKQo+ICsgICAgQygxLAo+ICAgKQo+ICsgICAgQygxLCAgICByZXR1 cm4gdmFsXzEgLSAoKHZhbDAgKyB2YWwxICsgMikgPj4gMik7Cj4gICApCj4gKyAgICBDKDAsIH0K PiAgICkKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGxlZ2FsbF9ob3JpeltdID0gewo+ ICsgICAgQygwLCB2b2lkIGlkd3RfaG9yaXooaW50IHBsYW5lLCBpbnQgeCwgaW50IHkpIHsKPiAg ICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB3ID0gcGxhbmVfc2l6ZXNb cGxhbmVdLng7Cj4gICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgZHcg PSB3IC8gMiAtIDE7Cj4gICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLAo+ICAgICAgICAgICAg ICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90IG91dDAgPSBsZWdhbGxfbG93X3gocGxh bmUsIHgsIHkpOwo+ICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJf dCB0bXAxID0gKHggPT0gZHcpID8gb3V0MCA6IGxlZ2FsbF9sb3dfeChwbGFuZSwgeAo+ICsgMSwg eSk7ICAgICAgKQo+ICsgICAgQygxLAo+ICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBj b25zdCBpbnQgeDEgPSB4ICsgZHcgKyAxOwo+ICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAg ICBjb25zdCBpbnQzMl90IHZhbDEgPSBpbkJ1ZltnZXRJZHgocGxhbmUsIHgxLCB5KV07Cj4gICAg ICAgICAgICAgICAgKQo+ICsgICAgQygxLAo+ICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAg ICBjb25zdCBpbnQzMl90IG91dDEgPSBsZWdhbGxfaGlnaCh2YWwxLCBvdXQwLCB0bXAxKTsKPiAg ICAgICAgICAgICAgICApCj4gKyAgICBDKDEsCj4gICAgICAgICAgICAgICApCj4gKyAgICBDKDEs ICAgIG91dEJ1ZltnZXRJZHgocGxhbmUsIDIgKiB4LCB5KV0gICAgID0gKG91dDAgKyAxKSA+PiAx Owo+ICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBvdXRCdWZbZ2V0SWR4KHBsYW5lLCAy ICogeCArIDEsIHkpXSA9IChvdXQxICsgMSkgPj4gMTsKPiAgICAgICAgICAgICAgICkKPiArICAg IEMoMCwgfQo+ICAgICAgICAgICAgICAgKQo+ICt9Owo+ICsKPiArc3RhdGljIGludCBpbml0X3dh dmVsZXRfc2hkX2xlZ2FsbF92ZXJ0KERpcmFjVnVsa2FuRGVjb2RlQ29udGV4dCAqcywKPiBGRlZr U1BJUlZDb21waWxlciAqc3B2KQo+ICt7Cj4gKyAgICBpbnQgZXJyID0gMDsKPiArICAgIHVpbnQ4 X3QgKnNwdl9kYXRhOwo+ICsgICAgc2l6ZV90IHNwdl9sZW47Cj4gKyAgICB2b2lkICpzcHZfb3Bh cXVlID0gTlVMTDsKPiArICAgIGludCB3YXZlbGV0X2lkeCA9IERXVF9ESVJBQ19MRUdBTEw1XzM7 Cj4gKyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4Owo+ICsgICAgRkZWdWxr YW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzYzsKPiArICAgIEZGVmtTUElSVlNoYWRlciAqc2hk ID0gJnMtPnZlcnRfd2F2ZWxldF9zaGRbd2F2ZWxldF9pZHhdOwo+ICsgICAgRkZWdWxrYW5QaXBl bGluZSAqcGwgPSAmcy0+dmVydF93YXZlbGV0X3BsW3dhdmVsZXRfaWR4XTsKPiArICAgIEZGVmtF eGVjUG9vbCAqZXhlYyA9ICZzLT5leGVjX3Bvb2w7Cj4gKwo+ICsgICAgUkVUKGZmX3ZrX3NoYWRl cl9pbml0KHBsLCBzaGQsICJsZWdhbGxfdmVydCIsCj4gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVf QklULCAwKSk7Cj4gKwo+ICsgICAgc2hkID0gJnMtPnZlcnRfd2F2ZWxldF9zaGRbd2F2ZWxldF9p ZHhdOwo+ICsgICAgZmZfdmtfc2hhZGVyX3NldF9jb21wdXRlX3NpemVzKHNoZCwgOCwgOCwgMyk7 Cj4gKwo+ICsgICAgR0xTTEMoMCwgI2V4dGVuc2lvbiBHTF9FWFRfc2NhbGFyX2Jsb2NrX2xheW91 dCA6IGVuYWJsZSk7Cj4gKyAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfZXhw bGljaXRfYXJpdGhtZXRpY190eXBlcyA6IGVuYWJsZSk7Cj4gKwo+ICsgICAgZGVzYyA9IChGRlZ1 bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nW10pCj4gKyAgICB7Cj4gKyAgICAgICAgewo+ICsgICAg ICAgICAgLm5hbWUgPSAiaW5fYnVmIiwKPiArICAgICAgICAgIC5zdGFnZXMgPSBWS19TSEFERVJf U1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAudHlwZSA9IFZLX0RFU0NSSVBUT1JfVFlQ RV9TVE9SQUdFX0JVRkZFUiwKPiArICAgICAgICAgIC5idWZfY29udGVudCA9ICJpbnQzMl90IGlu QnVmW107IiwKPiArICAgICAgICAgIC5tZW1fcXVhbGkgPSAicmVhZG9ubHkiLAo+ICsgICAgICAg ICAgLmRpbWVuc2lvbnMgPSAxLAo+ICsgICAgICAgIH0sCj4gKyAgICAgICAgewo+ICsgICAgICAg ICAgLm5hbWUgPSAib3V0X2J1ZiIsCj4gKyAgICAgICAgICAuc3RhZ2VzID0gVktfU0hBREVSX1NU QUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgLnR5cGUgPSBWS19ERVNDUklQVE9SX1RZUEVf U1RPUkFHRV9CVUZGRVIsCj4gKyAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MzJfdCBvdXRC dWZbXTsiLAo+ICsgICAgICAgICAgLm1lbV9xdWFsaSA9ICJ3cml0ZW9ubHkiLAo+ICsgICAgICAg ICAgLmRpbWVuc2lvbnMgPSAxLAo+ICsgICAgICAgIH0sCj4gKyAgICB9Owo+ICsgICAgUkVUKGZm X3ZrX3BpcGVsaW5lX2Rlc2NyaXB0b3Jfc2V0X2FkZCh2a2N0eCwgcGwsIHNoZCwgZGVzYywgMiwg MCwgMCkpOwo+ICsKPiArICAgIGZmX3ZrX2FkZF9wdXNoX2NvbnN0YW50KHBsLCAwLCBzaXplb2Yo V2F2ZWxldFB1c2hDb25zdCksCj4gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKPiArCj4g KyAgICBHTFNMQygwLCBsYXlvdXQocHVzaF9jb25zdGFudCwgc3RkNDMwKSB1bmlmb3JtIHB1c2hD b25zdGFudHMgeyAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpdmVjMiBwbGFuZV9zaXplc1szXTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGludCBw bGFuZV9vZmZzWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBH TFNMQygxLCAgICAgaW50IHBsYW5lX3N0cmlkZXNbM107ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQgZHdbM107ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGludCB3YXZlbGV0 X2RlcHRoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygw LCB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKPiArICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwo+ICsKPiArICAgIEdMU0xEKGdldF9pZHgpOwo+ICsgICAgR0xT TEQobGVnYWxsX2xvd195KTsKPiArICAgIEdMU0xEKGxlZ2FsbF9oaWdoKTsKPiArICAgIEdMU0xE KGxlZ2FsbF92ZXJ0KTsKPiArCj4gKyAgICBHTFNMQygwLCB2b2lkIG1haW4oKSB7Cj4gICAgICAg ICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgaW50IG9mZl95ID0gaW50KGdsX1dvcmtHcm91 cFNpemUueSAqCj4gZ2xfTnVtV29ya0dyb3Vwcy55KTsgICAgICAgICAgICAgICApOwo+ICsgICAg R0xTTEMoMSwgICAgaW50IG9mZl94ID0gaW50KGdsX1dvcmtHcm91cFNpemUueCAqCj4gZ2xfTnVt V29ya0dyb3Vwcy54KTsgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgaW50IHBp Y196ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25JRC56KTsKPiAgICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMSwKPiAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICB1aW50 IGggPSBpbnQocGxhbmVfc2l6ZXNbcGljX3pdLnkpOwo+ICAgICAgICAgICAgICAgICk7Cj4gKyAg ICBHTFNMQygyLCAgICB1aW50IHcgPSBpbnQocGxhbmVfc2l6ZXNbcGljX3pdLngpOwo+ICAgICAg ICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLAo+ICAgICAgICAgICAgICAgKTsKPiArICAgIEdM U0xDKDEsICAgIGludCB5ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25JRC55KTsKPiAgICAgICAg ICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgZm9yICg7IDIgKiB5IDwgaDsgeSArPSBvZmZf eSkgewo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAgaW50IHggPSBp bnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELngpOwo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBH TFNMQygyLCAgICAgICAgZm9yICg7IHggPCB3OyB4ICs9IG9mZl94KSB7Cj4gICAgICAgICAgICAg ICAgKTsKPiArICAgIEdMU0xDKDMsICAgICAgICAgICAgaWR3dF92ZXJ0KHBpY196LCB4LCAyICog eSk7Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDIsICAgICAgICB9Cj4gICAgICAg ICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIH0KPiAgICAgICAgICAgICAgICApOwo+ICsg ICAgR0xTTEMoMCwgfQo+ICAgICAgICAgICAgICAgKTsKPiArCj4gKyAgICBSRVQoc3B2LT5jb21w aWxlX3NoYWRlcihzcHYsIHZrY3R4LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwK PiAmc3B2X29wYXF1ZSkpOwo+ICsgICAgUkVUKGZmX3ZrX3NoYWRlcl9jcmVhdGUodmtjdHgsIHNo ZCwgc3B2X2RhdGEsIHNwdl9sZW4sICJtYWluIikpOwo+ICsgICAgUkVUKGZmX3ZrX2luaXRfY29t cHV0ZV9waXBlbGluZSh2a2N0eCwgcGwsIHNoZCkpOwo+ICsgICAgUkVUKGZmX3ZrX2V4ZWNfcGlw ZWxpbmVfcmVnaXN0ZXIodmtjdHgsIGV4ZWMsIHBsKSk7Cj4gKwo+ICtmYWlsOgo+ICsgICAgaWYg KHNwdl9vcGFxdWUpCj4gKyAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYsICZzcHZfb3BhcXVl KTsKPiArCj4gKyAgICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGluaXRfd2F2 ZWxldF9zaGRfbGVnYWxsX2hvcml6KERpcmFjVnVsa2FuRGVjb2RlQ29udGV4dCAqcywKPiBGRlZr U1BJUlZDb21waWxlciAqc3B2KQo+ICt7Cj4gKyAgICBpbnQgZXJyID0gMDsKPiArICAgIHVpbnQ4 X3QgKnNwdl9kYXRhOwo+ICsgICAgc2l6ZV90IHNwdl9sZW47Cj4gKyAgICB2b2lkICpzcHZfb3Bh cXVlID0gTlVMTDsKPiArICAgIGludCB3YXZlbGV0X2lkeCA9IERXVF9ESVJBQ19MRUdBTEw1XzM7 Cj4gKyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4Owo+ICsgICAgRkZWdWxr YW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzYzsKPiArICAgIEZGVmtTUElSVlNoYWRlciAqc2hk ID0gJnMtPmhvcml6X3dhdmVsZXRfc2hkW3dhdmVsZXRfaWR4XTsKPiArICAgIEZGVnVsa2FuUGlw ZWxpbmUgKnBsID0gJnMtPmhvcml6X3dhdmVsZXRfcGxbd2F2ZWxldF9pZHhdOwo+ICsgICAgRkZW a0V4ZWNQb29sICpleGVjID0gJnMtPmV4ZWNfcG9vbDsKPiArCj4gKyAgICBSRVQoZmZfdmtfc2hh ZGVyX2luaXQocGwsIHNoZCwgImxlZ2FsbF9ob3JpeiIsCj4gVktfU0hBREVSX1NUQUdFX0NPTVBV VEVfQklULCAwKSk7Cj4gKwo+ICsgICAgc2hkID0gJnMtPmhvcml6X3dhdmVsZXRfc2hkW3dhdmVs ZXRfaWR4XTsKPiArICAgIGZmX3ZrX3NoYWRlcl9zZXRfY29tcHV0ZV9zaXplcyhzaGQsIDgsIDgs IDMpOwo+ICsKPiArICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhUX2RlYnVnX3ByaW50ZiA6 IGVuYWJsZSk7Cj4gKyAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9zY2FsYXJfYmxvY2tf bGF5b3V0IDogZW5hYmxlKTsKPiArICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhUX3NoYWRl cl9leHBsaWNpdF9hcml0aG1ldGljX3R5cGVzIDogZW5hYmxlKTsKPiArCj4gKyAgICBkZXNjID0g KEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmdbXSkKPiArICAgIHsKPiArICAgICAgICB7Cj4g KyAgICAgICAgICAubmFtZSA9ICJpbl9idWYiLAo+ICsgICAgICAgICAgLnN0YWdlcyA9IFZLX1NI QURFUl9TVEFHRV9DT01QVVRFX0JJVCwKPiArICAgICAgICAgIC50eXBlID0gVktfREVTQ1JJUFRP Ul9UWVBFX1NUT1JBR0VfQlVGRkVSLAo+ICsgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludDMy X3QgaW5CdWZbXTsiLAo+ICsgICAgICAgICAgLm1lbV9xdWFsaSA9ICJyZWFkb25seSIsCj4gKyAg ICAgICAgICAuZGltZW5zaW9ucyA9IDEsCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4gKyAg ICAgICAgICAubmFtZSA9ICJvdXRfYnVmIiwKPiArICAgICAgICAgIC5zdGFnZXMgPSBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAudHlwZSA9IFZLX0RFU0NSSVBUT1Jf VFlQRV9TVE9SQUdFX0JVRkZFUiwKPiArICAgICAgICAgIC5idWZfY29udGVudCA9ICJpbnQzMl90 IG91dEJ1ZltdOyIsCj4gKyAgICAgICAgICAubWVtX3F1YWxpID0gIndyaXRlb25seSIsCj4gKyAg ICAgICAgICAuZGltZW5zaW9ucyA9IDEsCj4gKyAgICAgICAgfSwKPiArICAgIH07Cj4gKyAgICBS RVQoZmZfdmtfcGlwZWxpbmVfZGVzY3JpcHRvcl9zZXRfYWRkKHZrY3R4LCBwbCwgc2hkLCBkZXNj LCAyLCAwLCAwKSk7Cj4gKwo+ICsgICAgZmZfdmtfYWRkX3B1c2hfY29uc3RhbnQocGwsIDAsIHNp emVvZihXYXZlbGV0UHVzaENvbnN0KSwKPiBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQpOwo+ ICsKPiArICAgIEdMU0xDKDAsIGxheW91dChwdXNoX2NvbnN0YW50LCBzdGQ0MzApIHVuaWZvcm0g cHVzaENvbnN0YW50cyB7ICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGl2ZWMyIHBsYW5lX3NpemVz WzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAg aW50IHBsYW5lX29mZnNbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiAr ICAgIEdMU0xDKDEsICAgICBpbnQgcGxhbmVfc3RyaWRlc1szXTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGludCBkd1szXTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IHdh dmVsZXRfZGVwdGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdM U0xDKDAsIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwo+ICsgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKwo+ICsgICAgR0xTTEQoZ2V0X2lkeCk7Cj4gKyAg ICBHTFNMRChsZWdhbGxfbG93X3gpOwo+ICsgICAgR0xTTEQobGVnYWxsX2hpZ2gpOwo+ICsgICAg R0xTTEQobGVnYWxsX2hvcml6KTsKPiArCj4gKyAgICBHTFNMQygwLCB2b2lkIG1haW4oKSB7Cj4g ICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgaW50IG9mZl95ID0gaW50KGdsX1dv cmtHcm91cFNpemUueSAqCj4gZ2xfTnVtV29ya0dyb3Vwcy55KTsgICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMSwgICAgaW50IG9mZl94ID0gaW50KGdsX1dvcmtHcm91cFNpemUueCAqCj4g Z2xfTnVtV29ya0dyb3Vwcy54KTsgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAg aW50IHBpY196ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25JRC56KTsKPiAgICAgICAgICAgICAg ICApOwo+ICsgICAgR0xTTEMoMSwKPiAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAg ICB1aW50IGggPSBpbnQocGxhbmVfc2l6ZXNbcGljX3pdLnkpOwo+ICAgICAgICAgICAgICAgICk7 Cj4gKyAgICBHTFNMQygyLCAgICB1aW50IHcgPSBpbnQocGxhbmVfc2l6ZXNbcGljX3pdLngpOwo+ ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLAo+ICAgICAgICAgICAgICAgKTsKPiAr ICAgIEdMU0xDKDEsICAgIGludCB5ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25JRC55KTsKPiAg ICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgZm9yICg7IHkgPCBoOyB5ICs9IG9m Zl95KSB7Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDIsICAgICAgICBpbnQgeCA9 IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueCk7Cj4gICAgICAgICAgICAgICAgKTsKPiArICAg IEdMU0xDKDIsICAgICAgICBmb3IgKDsgMiAqIHggPCB3OyB4ICs9IG9mZl94KSB7Cj4gICAgICAg ICAgICAgICAgKTsKPiArICAgIEdMU0xDKDMsICAgICAgICAgICAgaWR3dF9ob3JpeihwaWNfeiwg eCwgeSk7Cj4gICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAgIH0KPiAgICAg ICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgfQo+ICAgICAgICAgICAgICAgICk7Cj4g KyAgICBHTFNMQygwLCB9Cj4gICAgICAgICAgICAgICApOwo+ICsKPiArICAgIFJFVChzcHYtPmNv bXBpbGVfc2hhZGVyKHNwdiwgdmtjdHgsIHNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1haW4i LAo+ICZzcHZfb3BhcXVlKSk7Cj4gKyAgICBSRVQoZmZfdmtfc2hhZGVyX2NyZWF0ZSh2a2N0eCwg c2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7Cj4gKyAgICBSRVQoZmZfdmtfaW5pdF9j b21wdXRlX3BpcGVsaW5lKHZrY3R4LCBwbCwgc2hkKSk7Cj4gKyAgICBSRVQoZmZfdmtfZXhlY19w aXBlbGluZV9yZWdpc3Rlcih2a2N0eCwgZXhlYywgcGwpKTsKPiArCj4gK2ZhaWw6Cj4gKyAgICBp ZiAoc3B2X29wYXF1ZSkKPiArICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFx dWUpOwo+ICsKPiArICAgIHJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBhdl9hbHdheXNf aW5saW5lIGludCBpbmxpbmUKPiB3YXZlbGV0X2xlZ2FsbF9wYXNzKERpcmFjVnVsa2FuRGVjb2Rl Q29udGV4dCAqZGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmFjQ29udGV4dCAq Y3R4LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtFeGVjQ29udGV4dCAqZXhlYywK PiArICAgICAgICAgICAgICAgICAgICAgICAgICBWa0J1ZmZlck1lbW9yeUJhcnJpZXIyICpidWZf YmFyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbmJfYnVmX2Jhcikgewo+ICsg ICAgaW50IGVycjsKPiArICAgIGludCBiYXJyaWVyX251bSA9ICpuYl9idWZfYmFyOwo+ICsgICAg aW50IHdhdmVsZXRfaWR4ID0gRFdUX0RJUkFDX0xFR0FMTDVfMzsKPiArICAgIEZGVnVsa2FuRnVu Y3Rpb25zICp2ayA9ICZkZWMtPnZrY3R4LnZrZm47Cj4gKwo+ICsgICAgRkZWdWxrYW5QaXBlbGlu ZSAqcGxfaG9yID0gJmRlYy0+aG9yaXpfd2F2ZWxldF9wbFt3YXZlbGV0X2lkeF07Cj4gKyAgICBG RlZ1bGthblBpcGVsaW5lICpwbF92ZXJ0ID0gJmRlYy0+dmVydF93YXZlbGV0X3BsW3dhdmVsZXRf aWR4XTsKPiArCj4gKyAgICBlcnIgPSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZmZXIoJmRlYy0+ dmtjdHgsIHBsX3ZlcnQsIGV4ZWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwgMCwgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWMtPnRtcF9idWYuYWRkcmVzcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkZWMtPnRtcF9idWYuc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAg ICAgIGdvdG8gZmFpbDsKPiArICAgIGVyciA9IGZmX3ZrX3NldF9kZXNjcmlwdG9yX2J1ZmZlcigm ZGVjLT52a2N0eCwgcGxfdmVydCwgZXhlYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwLCAxLCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRlYy0+dG1wX2ludGVybGVhdmVfYnVmLmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYuc2l6ZSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsK PiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICBlcnIg PSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZmZXIoJmRlYy0+dmtjdHgsIHBsX2hvciwgZXhlYywK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYy0+dG1wX2ludGVybGVhdmVfYnVm LmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT50 bXBfaW50ZXJsZWF2ZV9idWYuc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAg ICAgIGdvdG8gZmFpbDsKPiArICAgIGVyciA9IGZmX3ZrX3NldF9kZXNjcmlwdG9yX2J1ZmZlcigm ZGVjLT52a2N0eCwgcGxfaG9yLCBleGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIDEsIDAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVjLT50bXBfYnVmLmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVjLT50bXBfYnVmLnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiAr ICAgICAgICBnb3RvIGZhaWw7Cj4gKwo+ICsKPiArICAgIGZvciAoaW50IGkgPSBjdHgtPndhdmVs ZXRfZGVwdGggLSAxOyBpID49IDA7IGktLSkgewo+ICsgICAgICAgIGRlYy0+cENvbnN0LnBsYW5l X3N0cmlkZXNbMF0gPSBjdHgtPnBsYW5lWzBdLmlkd3Qud2lkdGggPDwgaTsKPiArICAgICAgICBk ZWMtPnBDb25zdC5wbGFuZV9zdHJpZGVzWzFdID0gY3R4LT5wbGFuZVsxXS5pZHd0LndpZHRoIDw8 IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucGxhbmVfc3RyaWRlc1syXSA9IGN0eC0+cGxhbmVb Ml0uaWR3dC53aWR0aCA8PCBpOwo+ICsKPiArICAgICAgICBkZWMtPnBDb25zdC5kd1swXSA9IGN0 eC0+cGxhbmVbMF0uaWR3dC53aWR0aCA+PiAoaSArIDEpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0 LmR3WzFdID0gY3R4LT5wbGFuZVsxXS5pZHd0LndpZHRoID4+IChpICsgMSk7Cj4gKyAgICAgICAg ZGVjLT5wQ29uc3QuZHdbMl0gPSBjdHgtPnBsYW5lWzJdLmlkd3Qud2lkdGggPj4gKGkgKyAxKTsK PiArCj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzBdID0gKGN0eC0+cGxh bmVbMF0uaWR3dC53aWR0aCkgID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFu ZV9kaW1zWzFdID0gKGN0eC0+cGxhbmVbMF0uaWR3dC5oZWlnaHQpID4+IGk7Cj4gKyAgICAgICAg ZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzJdID0gKGN0eC0+cGxhbmVbMV0uaWR3dC53aWR0 aCkgID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzNdID0gKGN0 eC0+cGxhbmVbMV0uaWR3dC5oZWlnaHQpID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVh bF9wbGFuZV9kaW1zWzRdID0gKGN0eC0+cGxhbmVbMl0uaWR3dC53aWR0aCkgID4+IGk7Cj4gKyAg ICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzVdID0gKGN0eC0+cGxhbmVbMl0uaWR3 dC5oZWlnaHQpID4+IGk7Cj4gKwo+ICsgICAgICAgIC8qIFZlcnRpY2FsIHdhdmVsZXQgcGFzcyAq Lwo+ICsgICAgICAgIGZmX3ZrX3VwZGF0ZV9wdXNoX2V4ZWMoJmRlYy0+dmtjdHgsIGV4ZWMsIHBs X3ZlcnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2Yo V2F2ZWxldFB1c2hDb25zdCksICZkZWMtPnBDb25zdCk7Cj4gKwo+ICsgICAgICAgIGJhcnJpZXJf bnVtID0gKm5iX2J1Zl9iYXI7Cj4gKyAgICAgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVmX2Jh ciwgJmRlYy0+dG1wX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5iX2J1Zl9i YXIsICZkZWMtPnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1Zl9i YXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9i YXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKwo+ICsgICAgICAg IHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7 Cj4gKyAgICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZ X0lORk8sCj4gKyAgICAgICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gYnVmX2Jh ciArIGJhcnJpZXJfbnVtLAo+ICsgICAgICAgICAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJD b3VudCA9ICpuYl9idWZfYmFyIC0gYmFycmllcl9udW0sCj4gKyAgICAgICAgfSk7Cj4gKwo+ICsg ICAgICAgIGZmX3ZrX2V4ZWNfYmluZF9waXBlbGluZSgmZGVjLT52a2N0eCwgZXhlYywgcGxfdmVy dCk7Cj4gKyAgICAgICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzBdID4+IDMsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1sxXSA+PiA0LAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAxKTsKPiArCj4gKyAgICAgICAgLyogSG9yaXpvbnRh bCB3YXZlbGV0IHBhc3MgKi8KPiArICAgICAgICBmZl92a191cGRhdGVfcHVzaF9leGVjKCZkZWMt PnZrY3R4LCBleGVjLCBwbF9ob3IsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19T SEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LCBzaXplb2YoV2F2ZWxldFB1c2hDb25zdCksICZkZWMtPnBDb25zdCk7Cj4gKwo+ICsgICAgICAg IGJhcnJpZXJfbnVtID0gKm5iX2J1Zl9iYXI7Cj4gKyAgICAgICAgYmFyX3JlYWQoYnVmX2Jhciwg bmJfYnVmX2JhciwgJmRlYy0+dG1wX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIs IG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIs IG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dy aXRlKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKwo+ ICsgICAgICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVu Y3lJbmZvKSB7Cj4gKyAgICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9E RVBFTkRFTkNZX0lORk8sCj4gKyAgICAgICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJz ID0gYnVmX2JhciArIGJhcnJpZXJfbnVtLAo+ICsgICAgICAgICAgICAgICAgLmJ1ZmZlck1lbW9y eUJhcnJpZXJDb3VudCA9ICpuYl9idWZfYmFyIC0gYmFycmllcl9udW0sCj4gKyAgICAgICAgfSk7 Cj4gKwo+ICsgICAgICAgIGZmX3ZrX2V4ZWNfYmluZF9waXBlbGluZSgmZGVjLT52a2N0eCwgZXhl YywgcGxfaG9yKTsKPiArICAgICAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBkZWMtPnBDb25zdC5yZWFsX3BsYW5lX2RpbXNbMF0gPj4gNCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzFd ID4+IDMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIDEpOwo+ICsgICAgfQo+ICsKPiArICAg IGJhcnJpZXJfbnVtID0gKm5iX2J1Zl9iYXI7Cj4gKyAgICBiYXJfcmVhZChidWZfYmFyLCBuYl9i dWZfYmFyLCAmZGVjLT50bXBfYnVmKTsKPiArICAgIGJhcl93cml0ZShidWZfYmFyLCBuYl9idWZf YmFyLCAmZGVjLT50bXBfYnVmKTsKPiArICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIs ICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKyAgICBiYXJfd3JpdGUoYnVmX2JhciwgbmJf YnVmX2JhciwgJmRlYy0+dG1wX2ludGVybGVhdmVfYnVmKTsKPiArCj4gKyAgICB2ay0+Q21kUGlw ZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewo+ICsgICAgICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCj4gKyAgICAg ICAgICAgIC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSBidWZfYmFyICsgYmFycmllcl9udW0sCj4g KyAgICAgICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVyQ291bnQgPSAqbmJfYnVmX2JhciAtIGJh cnJpZXJfbnVtLAo+ICsgICAgfSk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK2ZhaWw6Cj4gKyAg ICBmZl92a19leGVjX2Rpc2NhcmRfZGVwcygmZGVjLT52a2N0eCwgZXhlYyk7Cj4gKyAgICByZXR1 cm4gZXJyOwo+ICt9Cj4gKwo+ICsvKiAtLS0tLSBGaWRlbGl0eSBpbml0IGFuZCBwaXBlbGluZSBw YXNzIC0tLS0tICovCj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciBmaWRlbGl0eV9sb3dbXSA9IHsK PiArICAgICAgQygwLCBpbnQzMl90IGZpZGVsaXR5X2xvdyhpbnQzMl90IHYwLCBpbnQzMl90IHYx LCBpbnQzMl90IHYyLAo+IGludDMyX3QgdjMsIGludDMyX3QgdjQsIGludDMyX3QgdjUsIGludDMy X3QgdjYsIGludDMyX3QgdjcpIHspCj4gKyAgICAgIEMoMSwgICAgICByZXR1cm4gICgtMiAqIHYw ICsgMTAgKiB2MSAtIDI1ICogdjIgKyA4MSAqIHYzICsgODEgKiB2NAo+IC0gMjUgKiB2NSArIDEw ICogdjYgLSAyICogdjcgKyAxMjgpID4+IDg7KQo+ICsgICAgICBDKDAsIH0KPiAgICAgICAgICAg ICAgICAgICApCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciBmaWRlbGl0eV9oaWdoW10g PSB7Cj4gKyAgICAgIEMoMCwgaW50MzJfdCBmaWRlbGl0eV9oaWdoKGludDMyX3QgdjAsIGludDMy X3QgdjEsIGludDMyX3QgdjIsCj4gaW50MzJfdCB2MywgaW50MzJfdCB2NCwgaW50MzJfdCB2NSwg aW50MzJfdCB2NiwgaW50MzJfdCB2NykgeykKPiArICAgICAgQygxLCAgICAgIHJldHVybiAgKC04 ICogdjAgKyAyMSAqIHYxIC0gNDYgKiB2MiArIDE2MSAqIHYzICsgMTYxICoKPiB2NCAtIDQ2ICog djUgKyAyMSAqIHY2IC0gOCAqIHY3ICsgMTI4KSA+PiA4OykKPiArICAgICAgQygwLCB9Cj4gICAg ICAgICAgICAgICAgICAgKQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgZmlkZWxpdHlf bG93X3lbXSA9IHsKPiArICAgIEMoMCwgaW50MzJfdCBmaWRlbGl0eV9sb3dfeShpbnQgcGxhbmUs IGludCB4LCBpbnQgeSkgewo+ICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgaCA9IHBsYW5l X3NpemVzW3BsYW5lXS55Owo+ICAgICkKPiArICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwgICAg Y29uc3QgaW50MzJfdCB2MSA9IGluQnVmW2dldElkeChwbGFuZSwgeCwgeSArIDEpXTsKPiAgICkK PiArICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHlfNiA9ICgoeSAtIDYp ID4gMCkgPyAoeSAtIDYpIDogMDsKPiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2 XzYgPSBpbkJ1ZltnZXRJZHgocGxhbmUsIHgsIHlfNildOwo+ICAgICkKPiArICAgIEMoMSwKPiAg ICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHlfNCA9ICgoeSAtIDQpID4gMCkgPyAoeSAtIDQp IDogMDsKPiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2XzQgPSBpbkJ1ZltnZXRJ ZHgocGxhbmUsIHgsIHlfNCldOwo+ICAgICkKPiArICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwg ICAgY29uc3QgaW50IHlfMiA9ICgoeSAtIDIpID4gMCkgPyAoeSAtIDIpIDogMDsKPiAgICkKPiAr ICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2XzIgPSBpbkJ1ZltnZXRJZHgocGxhbmUsIHgsIHlf MildOwo+ICAgICkKPiArICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJf dCB2MCA9IGluQnVmW2dldElkeChwbGFuZSwgeCwgeSldOwo+ICAgKQo+ICsgICAgQygxLAo+ICAg KQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgeTIgPSAoKHkgKyAyKSA8IGgpID8gKHkgKyAyKSA6 IChoIC0gMik7Cj4gICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90IHYyID0gaW5CdWZb Z2V0SWR4KHBsYW5lLCB4LCB5MildOwo+ICAgICkKPiArICAgIEMoMSwKPiAgICkKPiArICAgIEMo MSwgICAgY29uc3QgaW50IHk0ID0gKCh5ICsgNCkgPCBoKSA/ICh5ICsgNCkgOiAoaCAtIDIpOwo+ ICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2NCA9IGluQnVmW2dldElkeChwbGFu ZSwgeCwgeTQpXTsKPiAgICApCj4gKyAgICBDKDEsCj4gICApCj4gKyAgICBDKDEsICAgIGNvbnN0 IGludCB5NiA9ICgoeSArIDYpIDwgaCkgPyAoeSArIDYpIDogKGggLSAyKTsKPiAgICApCj4gKyAg ICBDKDEsICAgIGNvbnN0IGludDMyX3QgdjYgPSBpbkJ1ZltnZXRJZHgocGxhbmUsIHgsIHk2KV07 Cj4gICAgKQo+ICsgICAgQygxLAo+ICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgeTggPSAo KHkgKyA4KSA8IGgpID8gKHkgKyA4KSA6IChoIC0gMik7Cj4gICAgKQo+ICsgICAgQygxLCAgICBj b25zdCBpbnQzMl90IHY4ID0gaW5CdWZbZ2V0SWR4KHBsYW5lLCB4LCB5OCldOwo+ICAgICkKPiAr ICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwgICAgcmV0dXJuIHYxICsgZmlkZWxpdHlfbG93KHZf Niwgdl80LCB2XzIsIHYwLCB2MiwgdjQsIHY2LCB2OCk7Cj4gICApCj4gKyAgICBDKDAsIH0KPiAg ICkKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGZpZGVsaXR5X3ZlcnRbXSA9IHsKPiAr ICAgIEMoMCwgdm9pZCBpZHd0X3ZlcnQoaW50IHBsYW5lLCBpbnQgeCwgaW50IHkpIHsKPiAgICAg ICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgaCA9IHBsYW5lX3Np emVzW3BsYW5lXS55Owo+ICAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLAo+ICAg ICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3QgdjAgPSBp bkJ1ZltnZXRJZHgocGxhbmUsIHgsIHkpXTsKPiAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsg ICAgQygxLCAgICBjb25zdCBpbnQzMl90IHYxID0gZmlkZWxpdHlfbG93X3kocGxhbmUsIHgsIHkp Owo+ICAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90 IHZfNyA9ICh5IC0gOCA+IDApID8gZmlkZWxpdHlfbG93X3kocGxhbmUsIHgsIHkKPiAtIDgpIDog djE7ICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2XzUgPSAoeSAt IDYgPiAwKSA/IGZpZGVsaXR5X2xvd195KHBsYW5lLCB4LCB5Cj4gLSA2KSA6IHYxOyAgICAgICAg ICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgdl8zID0gKHkgLSA0ID4gMCkgPyBm aWRlbGl0eV9sb3dfeShwbGFuZSwgeCwgeQo+IC0gNCkgOiB2MTsgICAgICAgICAgICAgKQo+ICsg ICAgQygxLCAgICBjb25zdCBpbnQzMl90IHZfMSA9ICh5IC0gMiA+IDApID8gZmlkZWxpdHlfbG93 X3kocGxhbmUsIHgsIHkKPiAtIDIpIDogdjE7ICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAg Y29uc3QgaW50MzJfdCB2MyAgPSAoeSArIDIgPCBoKSA/IGZpZGVsaXR5X2xvd195KHBsYW5lLCB4 LCB5Cj4gKyAyKSA6ICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZpZGVsaXR5X2xvd195KHBsYW5lLCB4LAo+IGggLSAy KTsgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90IHY1ICA9ICh5 ICsgNCA8IGgpID8gZmlkZWxpdHlfbG93X3kocGxhbmUsIHgsIHkKPiArIDQpIDogICAgICAgICAg ICAgICAgICkKPiArICAgIEMoMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmlkZWxpdHlfbG93X3kocGxhbmUsIHgsCj4gaCAtIDIpOyAgICAgICAgICAgICAgICApCj4g KyAgICBDKDEsICAgIGNvbnN0IGludDMyX3QgdjcgID0gKHkgKyA2IDwgaCkgPyBmaWRlbGl0eV9s b3dfeShwbGFuZSwgeCwgeQo+ICsgNikgOiAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWRlbGl0eV9sb3dfeShwbGFu ZSwgeCwKPiBoIC0gMik7ICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgb3V0QnVmW2dl dElkeChwbGFuZSwgeCwgeSldID0gdjAgLSBmaWRlbGl0eV9oaWdoKHZfNywgdl81LAo+IHZfMywg dl8xLCB2MSwgdjMsIHY1LCB2Nyk7KQo+ICsgICAgQygxLCAgICBvdXRCdWZbZ2V0SWR4KHBsYW5l LCB4LCB5ICsgMSldID0gdjE7Cj4gICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDAs IH0KPiAgICAgICAgICAgICAgICAgICAgICAgKQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNo YXIgZmlkZWxpdHlfbG93X3hbXSA9IHsKPiArICAgIEMoMCwgaW50MzJfdCBmaWRlbGl0eV9sb3df eChpbnQgcGxhbmUsIGludCB4LCBpbnQgeSkgewo+ICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBp bnQgdyA9IHBsYW5lX3NpemVzW3BsYW5lXS54Owo+ICAgICkKPiArICAgIEMoMSwgICAgY29uc3Qg aW50IGR3ID0gdyAvIDIgLSAxOwo+ICAgICkKPiArICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwg ICAgY29uc3QgaW50IHhfMyA9IGNsYW1wKHggLSAzLCAwLCBkdyk7Cj4gICApCj4gKyAgICBDKDEs ICAgIGNvbnN0IGludDMyX3Qgdl8zID0gaW5CdWZbZ2V0SWR4KHBsYW5lLCB4XzMsIHkpXTsKPiAg ICApCj4gKyAgICBDKDEsCj4gICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB4XzIgPSBjbGFt cCh4IC0gMiwgMCwgZHcpOwo+ICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90IHZfMiA9 IGluQnVmW2dldElkeChwbGFuZSwgeF8yLCB5KV07Cj4gICAgKQo+ICsgICAgQygxLAo+ICAgKQo+ ICsgICAgQygxLCAgICBjb25zdCBpbnQgeF8xID0gY2xhbXAoeCAtIDEsIDAsIGR3KTsKPiAgICkK PiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2XzEgPSBpbkJ1ZltnZXRJZHgocGxhbmUsIHhf MSwgeSldOwo+ICAgICkKPiArICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50 MzJfdCB2MCA9IGluQnVmW2dldElkeChwbGFuZSwgeCwgeSldOwo+ICAgKQo+ICsgICAgQygxLAo+ ICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgeF93ID0geCArIGR3ICsgMTsKPiAgICApCj4g KyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgdl93ID0gaW5CdWZbZ2V0SWR4KHBsYW5lLCB4X3cs IHkpXTsKPiAgICApCj4gKyAgICBDKDEsCj4gICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB4 MSA9IGNsYW1wKHggKyAxLCAwLCBkdyk7Cj4gICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQz Ml90IHYxID0gaW5CdWZbZ2V0SWR4KHBsYW5lLCB4MSwgeSldOwo+ICAgICkKPiArICAgIEMoMSwK PiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHgyID0gY2xhbXAoeCArIDIsIDAsIGR3KTsK PiAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3QgdjIgPSBpbkJ1ZltnZXRJZHgocGxh bmUsIHgyLCB5KV07Cj4gICAgKQo+ICsgICAgQygxLAo+ICAgKQo+ICsgICAgQygxLCAgICBjb25z dCBpbnQgeDMgPSBjbGFtcCh4ICsgMywgMCwgZHcpOwo+ICAgICkKPiArICAgIEMoMSwgICAgY29u c3QgaW50MzJfdCB2MyA9IGluQnVmW2dldElkeChwbGFuZSwgeDMsIHkpXTsKPiAgICApCj4gKyAg ICBDKDEsCj4gICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB4NCA9IGNsYW1wKHggKyA0LCAw LCBkdyk7Cj4gICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90IHY0ID0gaW5CdWZbZ2V0 SWR4KHBsYW5lLCB4NCwgeSldOwo+ICAgICkKPiArICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwg ICAgcmV0dXJuIHZfdyArIGZpZGVsaXR5X2xvdyh2XzMsIHZfMiwgdl8xLCB2MCwgdjEsIHYyLCB2 MywKPiB2NCk7ICAgKQo+ICsgICAgQygwLCB9Cj4gICApCj4gK307Cj4gKwo+ICtzdGF0aWMgY29u c3QgY2hhciBmaWRlbGl0eV9ob3JpeltdID0gewo+ICsgICAgQygwLCB2b2lkIGlkd3RfaG9yaXoo aW50IHBsYW5lLCBpbnQgeCwgaW50IHkpIHsKPiAgICAgICAgICAgICAgICAgICAgICAgICkKPiAr ICAgIEMoMSwgICAgY29uc3QgaW50IHcgPSBwbGFuZV9zaXplc1twbGFuZV0ueDsKPiAgICAgICAg ICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IGR3ID0gdyAvIDIgLSAx Owo+ICAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLAo+ICAgICAgICAgICAgICAg ICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgdm8wID0gaW5CdWZbZ2V0SWR4 KHBsYW5lLCB4LCB5KV07Cj4gICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsCj4g ICAgICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHhfNCA9IGNs YW1wKHggLSA0LCAwLCBkdyk7Cj4gICAgICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwg ICAgY29uc3QgaW50MzJfdCB2XzQgPSBmaWRlbGl0eV9sb3dfeChwbGFuZSwgeF80LCB5KTsKPiAg ICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgeF8zID0gY2xh bXAoeCAtIDMsIDAsIGR3KTsKPiAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAg ICBjb25zdCBpbnQzMl90IHZfMyA9IGZpZGVsaXR5X2xvd194KHBsYW5lLCB4XzMsIHkpOwo+ICAg ICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB4XzIgPSBjbGFt cCh4IC0gMiwgMCwgZHcpOwo+ICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAg IGNvbnN0IGludDMyX3Qgdl8yID0gZmlkZWxpdHlfbG93X3gocGxhbmUsIHhfMiwgeSk7Cj4gICAg ICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHhfMSA9IGNsYW1w KHggLSAxLCAwLCBkdyk7Cj4gICAgICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAg Y29uc3QgaW50MzJfdCB2XzEgPSBmaWRlbGl0eV9sb3dfeChwbGFuZSwgeF8xLCB5KTsKPiAgICAg ICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgeDAgPSBjbGFtcCh4 LCAwLCBkdyk7Cj4gICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0 IGludDMyX3QgdjAgPSBmaWRlbGl0eV9sb3dfeChwbGFuZSwgeDAsIHkpOwo+ICAgICAgICAgICAg ICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB4MSA9IGNsYW1wKHggKyAxLCAw LCBkdyk7Cj4gICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGlu dDMyX3QgdjEgPSBmaWRlbGl0eV9sb3dfeChwbGFuZSwgeDEsIHkpOwo+ICAgICAgICAgICAgICAg ICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB4MiA9IGNsYW1wKHggKyAyLCAwLCBk dyk7Cj4gICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMy X3QgdjIgPSBmaWRlbGl0eV9sb3dfeChwbGFuZSwgeDIsIHkpOwo+ICAgICAgICAgICAgICAgICAg ICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB4MyA9IGNsYW1wKHggKyAzLCAwLCBkdyk7 Cj4gICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qg djMgPSBmaWRlbGl0eV9sb3dfeChwbGFuZSwgeDMsIHkpOwo+ICAgICAgICAgICAgICAgICAgICAg ICApCj4gKyAgICBDKDEsCj4gICAgICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAg b3V0QnVmW2dldElkeChwbGFuZSwgMiAqIHgsIHkpXSA9IHZvMCAtIGZpZGVsaXR5X2hpZ2godl80 LAo+IHZfMywgdl8yLCB2XzEsIHYwLCB2MSwgdjIsIHYzKTspCj4gKyAgICBDKDEsICAgIG91dEJ1 ZltnZXRJZHgocGxhbmUsIDIgKiB4ICsgMSwgeSldID0gdjA7Cj4gICAgICAgICAgICAgICAgICAg ICAgICApCj4gKyAgICBDKDAsIH0KPiAgICAgICAgICAgICAgICAgICAgICAgKQo+ICt9Owo+ICsK PiArc3RhdGljIGludCBpbml0X3dhdmVsZXRfc2hkX2ZpZGVsaXR5X3ZlcnQoRGlyYWNWdWxrYW5E ZWNvZGVDb250ZXh0ICpzLAo+IEZGVmtTUElSVkNvbXBpbGVyICpzcHYpCj4gK3sKPiArICAgIGlu dCBlcnIgPSAwOwo+ICsgICAgdWludDhfdCAqc3B2X2RhdGE7Cj4gKyAgICBzaXplX3Qgc3B2X2xl bjsKPiArICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwo+ICsgICAgaW50IHdhdmVsZXRfaWR4 ID0gRFdUX0RJUkFDX0ZJREVMSVRZOwo+ICsgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZz LT52a2N0eDsKPiArICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2M7Cj4gKyAg ICBGRlZrU1BJUlZTaGFkZXIgKnNoZCA9ICZzLT52ZXJ0X3dhdmVsZXRfc2hkW3dhdmVsZXRfaWR4 XTsKPiArICAgIEZGVnVsa2FuUGlwZWxpbmUgKnBsID0gJnMtPnZlcnRfd2F2ZWxldF9wbFt3YXZl bGV0X2lkeF07Cj4gKyAgICBGRlZrRXhlY1Bvb2wgKmV4ZWMgPSAmcy0+ZXhlY19wb29sOwo+ICsK PiArICAgIFJFVChmZl92a19zaGFkZXJfaW5pdChwbCwgc2hkLCAiZmlkZWxpdHlfdmVydCIsCj4g VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULCAwKSk7Cj4gKwo+ICsgICAgc2hkID0gJnMtPnZl cnRfd2F2ZWxldF9zaGRbd2F2ZWxldF9pZHhdOwo+ICsgICAgZmZfdmtfc2hhZGVyX3NldF9jb21w dXRlX3NpemVzKHNoZCwgOCwgOCwgMyk7Cj4gKwo+ICsgICAgR0xTTEMoMCwgI2V4dGVuc2lvbiBH TF9FWFRfc2NhbGFyX2Jsb2NrX2xheW91dCA6IGVuYWJsZSk7Cj4gKyAgICBHTFNMQygwLCAjZXh0 ZW5zaW9uIEdMX0VYVF9zaGFkZXJfZXhwbGljaXRfYXJpdGhtZXRpY190eXBlcyA6IGVuYWJsZSk7 Cj4gKwo+ICsgICAgZGVzYyA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nW10pCj4gKyAg ICB7Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgLm5hbWUgPSAiaW5fYnVmIiwKPiArICAgICAg ICAgIC5zdGFnZXMgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAu dHlwZSA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKPiArICAgICAgICAgIC5i dWZfY29udGVudCA9ICJpbnQzMl90IGluQnVmW107IiwKPiArICAgICAgICAgIC5tZW1fcXVhbGkg PSAicmVhZG9ubHkiLAo+ICsgICAgICAgICAgLmRpbWVuc2lvbnMgPSAxLAo+ICsgICAgICAgIH0s Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgLm5hbWUgPSAib3V0X2J1ZiIsCj4gKyAgICAgICAg ICAuc3RhZ2VzID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgLnR5 cGUgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCj4gKyAgICAgICAgICAuYnVm X2NvbnRlbnQgPSAiaW50MzJfdCBvdXRCdWZbXTsiLAo+ICsgICAgICAgICAgLm1lbV9xdWFsaSA9 ICJ3cml0ZW9ubHkiLAo+ICsgICAgICAgICAgLmRpbWVuc2lvbnMgPSAxLAo+ICsgICAgICAgIH0s Cj4gKyAgICB9Owo+ICsgICAgUkVUKGZmX3ZrX3BpcGVsaW5lX2Rlc2NyaXB0b3Jfc2V0X2FkZCh2 a2N0eCwgcGwsIHNoZCwgZGVzYywgMiwgMCwgMCkpOwo+ICsKPiArICAgIGZmX3ZrX2FkZF9wdXNo X2NvbnN0YW50KHBsLCAwLCBzaXplb2YoV2F2ZWxldFB1c2hDb25zdCksCj4gVktfU0hBREVSX1NU QUdFX0NPTVBVVEVfQklUKTsKPiArCj4gKyAgICBHTFNMQygwLCBsYXlvdXQocHVzaF9jb25zdGFu dCwgc3RkNDMwKSB1bmlmb3JtIHB1c2hDb25zdGFudHMgeyAgKTsKPiArICAgIEdMU0xDKDEsICAg ICBpdmVjMiBwbGFuZV9zaXplc1szXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMSwgICAgIGludCBwbGFuZV9vZmZzWzNdOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IHBsYW5lX3N0cmlkZXNbM107 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQg ZHdbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAg R0xTTEMoMSwgICAgIGludCB3YXZlbGV0X2RlcHRoOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Cj4gKyAgICBHTFNMQygwLCB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsKPiArICAgIEdM U0xEKGdldF9pZHgpOwo+ICsgICAgR0xTTEQoZmlkZWxpdHlfbG93KTsKPiArICAgIEdMU0xEKGZp ZGVsaXR5X2hpZ2gpOwo+ICsgICAgR0xTTEQoZmlkZWxpdHlfbG93X3kpOwo+ICsgICAgR0xTTEQo ZmlkZWxpdHlfdmVydCk7Cj4gKwo+ICsgICAgR0xTTEMoMCwgdm9pZCBtYWluKCkgewo+ICAgICAg ICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGludCBvZmZfeSA9IGludChnbF9Xb3JrR3Jv dXBTaXplLnkgKgo+IGdsX051bVdvcmtHcm91cHMueSk7ICAgICAgICAgICAgICAgKTsKPiArICAg IEdMU0xDKDEsICAgIGludCBvZmZfeCA9IGludChnbF9Xb3JrR3JvdXBTaXplLnggKgo+IGdsX051 bVdvcmtHcm91cHMueCk7ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGludCBw aWNfeiA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueik7Cj4gICAgICAgICAgICAgICAgKTsK PiArICAgIEdMU0xDKDEsCj4gICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgdWlu dCBoID0gaW50KHBsYW5lX3NpemVzW3BpY196XS55KTsKPiAgICAgICAgICAgICAgICApOwo+ICsg ICAgR0xTTEMoMiwgICAgdWludCB3ID0gaW50KHBsYW5lX3NpemVzW3BpY196XS54KTsKPiAgICAg ICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwKPiAgICAgICAgICAgICAgICk7Cj4gKyAgICBH TFNMQygxLCAgICBpbnQgeSA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueSk7Cj4gICAgICAg ICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGZvciAoOyAyICogeSA8IGg7IHkgKz0gb2Zm X3kpIHsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAgIGludCB4ID0g aW50KGdsX0dsb2JhbEludm9jYXRpb25JRC54KTsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAg R0xTTEMoMiwgICAgICAgIGZvciAoOyB4IDwgdzsgeCArPSBvZmZfeCkgewo+ICAgICAgICAgICAg ICAgICk7Cj4gKyAgICBHTFNMQygzLCAgICAgICAgICAgIGlkd3RfdmVydChwaWNfeiwgeCwgMiAq IHkpOwo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAgfQo+ICAgICAg ICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICB9Cj4gICAgICAgICAgICAgICAgKTsKPiAr ICAgIEdMU0xDKDAsIH0KPiAgICAgICAgICAgICAgICk7Cj4gKwo+ICsgICAgUkVUKHNwdi0+Y29t cGlsZV9zaGFkZXIoc3B2LCB2a2N0eCwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIs Cj4gJnNwdl9vcGFxdWUpKTsKPiArICAgIFJFVChmZl92a19zaGFkZXJfY3JlYXRlKHZrY3R4LCBz aGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKPiArICAgIFJFVChmZl92a19pbml0X2Nv bXB1dGVfcGlwZWxpbmUodmtjdHgsIHBsLCBzaGQpKTsKPiArICAgIFJFVChmZl92a19leGVjX3Bp cGVsaW5lX3JlZ2lzdGVyKHZrY3R4LCBleGVjLCBwbCkpOwo+ICsKPiArZmFpbDoKPiArICAgIGlm IChzcHZfb3BhcXVlKQo+ICsgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1 ZSk7Cj4gKwo+ICsgICAgcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCBpbml0X3dh dmVsZXRfc2hkX2ZpZGVsaXR5X2hvcml6KERpcmFjVnVsa2FuRGVjb2RlQ29udGV4dCAqcywKPiBG RlZrU1BJUlZDb21waWxlciAqc3B2KQo+ICt7Cj4gKyAgICBpbnQgZXJyID0gMDsKPiArICAgIHVp bnQ4X3QgKnNwdl9kYXRhOwo+ICsgICAgc2l6ZV90IHNwdl9sZW47Cj4gKyAgICB2b2lkICpzcHZf b3BhcXVlID0gTlVMTDsKPiArICAgIGludCB3YXZlbGV0X2lkeCA9IERXVF9ESVJBQ19GSURFTElU WTsKPiArICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Cj4gKyAgICBGRlZ1 bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjOwo+ICsgICAgRkZWa1NQSVJWU2hhZGVyICpz aGQgPSAmcy0+aG9yaXpfd2F2ZWxldF9zaGRbd2F2ZWxldF9pZHhdOwo+ICsgICAgRkZWdWxrYW5Q aXBlbGluZSAqcGwgPSAmcy0+aG9yaXpfd2F2ZWxldF9wbFt3YXZlbGV0X2lkeF07Cj4gKyAgICBG RlZrRXhlY1Bvb2wgKmV4ZWMgPSAmcy0+ZXhlY19wb29sOwo+ICsKPiArICAgIFJFVChmZl92a19z aGFkZXJfaW5pdChwbCwgc2hkLCAiZmlkZWxpdHlfaG9yaXoiLAo+IFZLX1NIQURFUl9TVEFHRV9D T01QVVRFX0JJVCwgMCkpOwo+ICsKPiArICAgIHNoZCA9ICZzLT5ob3Jpel93YXZlbGV0X3NoZFt3 YXZlbGV0X2lkeF07Cj4gKyAgICBmZl92a19zaGFkZXJfc2V0X2NvbXB1dGVfc2l6ZXMoc2hkLCA4 LCA4LCAzKTsKPiArCj4gKyAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9kZWJ1Z19wcmlu dGYgOiBlbmFibGUpOwo+ICsgICAgR0xTTEMoMCwgI2V4dGVuc2lvbiBHTF9FWFRfc2NhbGFyX2Js b2NrX2xheW91dCA6IGVuYWJsZSk7Cj4gKyAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9z aGFkZXJfZXhwbGljaXRfYXJpdGhtZXRpY190eXBlcyA6IGVuYWJsZSk7Cj4gKwo+ICsgICAgZGVz YyA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nW10pCj4gKyAgICB7Cj4gKyAgICAgICAg ewo+ICsgICAgICAgICAgLm5hbWUgPSAiaW5fYnVmIiwKPiArICAgICAgICAgIC5zdGFnZXMgPSBW S19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAudHlwZSA9IFZLX0RFU0NS SVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKPiArICAgICAgICAgIC5idWZfY29udGVudCA9ICJp bnQzMl90IGluQnVmW107IiwKPiArICAgICAgICAgIC5tZW1fcXVhbGkgPSAicmVhZG9ubHkiLAo+ ICsgICAgICAgICAgLmRpbWVuc2lvbnMgPSAxLAo+ICsgICAgICAgIH0sCj4gKyAgICAgICAgewo+ ICsgICAgICAgICAgLm5hbWUgPSAib3V0X2J1ZiIsCj4gKyAgICAgICAgICAuc3RhZ2VzID0gVktf U0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgLnR5cGUgPSBWS19ERVNDUklQ VE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCj4gKyAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50 MzJfdCBvdXRCdWZbXTsiLAo+ICsgICAgICAgICAgLm1lbV9xdWFsaSA9ICJ3cml0ZW9ubHkiLAo+ ICsgICAgICAgICAgLmRpbWVuc2lvbnMgPSAxLAo+ICsgICAgICAgIH0sCj4gKyAgICB9Owo+ICsg ICAgUkVUKGZmX3ZrX3BpcGVsaW5lX2Rlc2NyaXB0b3Jfc2V0X2FkZCh2a2N0eCwgcGwsIHNoZCwg ZGVzYywgMiwgMCwgMCkpOwo+ICsKPiArICAgIGZmX3ZrX2FkZF9wdXNoX2NvbnN0YW50KHBsLCAw LCBzaXplb2YoV2F2ZWxldFB1c2hDb25zdCksCj4gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklU KTsKPiArCj4gKyAgICBHTFNMQygwLCBsYXlvdXQocHVzaF9jb25zdGFudCwgc3RkNDMwKSB1bmlm b3JtIHB1c2hDb25zdGFudHMgeyAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpdmVjMiBwbGFuZV9z aXplc1szXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwg ICAgIGludCBwbGFuZV9vZmZzWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IHBsYW5lX3N0cmlkZXNbM107ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQgZHdbM107ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGlu dCB3YXZlbGV0X2RlcHRoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAg ICBHTFNMQygwLCB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsKPiArICAgIEdMU0xEKGdldF9pZHgpOwo+ ICsgICAgR0xTTEQoZmlkZWxpdHlfbG93KTsKPiArICAgIEdMU0xEKGZpZGVsaXR5X2hpZ2gpOwo+ ICsgICAgR0xTTEQoZmlkZWxpdHlfbG93X3gpOwo+ICsgICAgR0xTTEQoZmlkZWxpdHlfaG9yaXop Owo+ICsKPiArICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpIHsKPiAgICAgICAgICAgICAgICk7Cj4g KyAgICBHTFNMQygxLCAgICBpbnQgb2ZmX3kgPSBpbnQoZ2xfV29ya0dyb3VwU2l6ZS55ICoKPiBn bF9OdW1Xb3JrR3JvdXBzLnkpOyAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICBp bnQgb2ZmX3ggPSBpbnQoZ2xfV29ya0dyb3VwU2l6ZS54ICoKPiBnbF9OdW1Xb3JrR3JvdXBzLngp OyAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICBpbnQgcGljX3ogPSBpbnQoZ2xf R2xvYmFsSW52b2NhdGlvbklELnopOwo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygx LAo+ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIHVpbnQgaCA9IGludChwbGFu ZV9zaXplc1twaWNfel0ueSk7Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDIsICAg IHVpbnQgdyA9IGludChwbGFuZV9zaXplc1twaWNfel0ueCk7Cj4gICAgICAgICAgICAgICAgKTsK PiArICAgIEdMU0xDKDEsCj4gICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgaW50 IHkgPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELnkpOwo+ICAgICAgICAgICAgICAgICk7Cj4g KyAgICBHTFNMQygxLCAgICBmb3IgKDsgeSA8IGg7IHkgKz0gb2ZmX3kpIHsKPiAgICAgICAgICAg ICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAgIGludCB4ID0gaW50KGdsX0dsb2JhbEludm9j YXRpb25JRC54KTsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAgIGZv ciAoOyAyICogeCA8IHc7IHggKz0gb2ZmX3gpIHsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAg R0xTTEMoMywgICAgICAgICAgICBpZHd0X2hvcml6KHBpY196LCB4LCB5KTsKPiAgICAgICAgICAg ICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAgfQo+ICAgICAgICAgICAgICAgICk7Cj4gKyAg ICBHTFNMQygxLCAgICB9Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAsIH0KPiAg ICAgICAgICAgICAgICk7Cj4gKwo+ICsgICAgUkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIoc3B2LCB2 a2N0eCwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCj4gJnNwdl9vcGFxdWUpKTsK PiArICAgIFJFVChmZl92a19zaGFkZXJfY3JlYXRlKHZrY3R4LCBzaGQsIHNwdl9kYXRhLCBzcHZf bGVuLCAibWFpbiIpKTsKPiArICAgIFJFVChmZl92a19pbml0X2NvbXB1dGVfcGlwZWxpbmUodmtj dHgsIHBsLCBzaGQpKTsKPiArICAgIFJFVChmZl92a19leGVjX3BpcGVsaW5lX3JlZ2lzdGVyKHZr Y3R4LCBleGVjLCBwbCkpOwo+ICsKPiArZmFpbDoKPiArICAgIGlmIChzcHZfb3BhcXVlKQo+ICsg ICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7Cj4gKwo+ICsgICAgcmV0 dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IGlubGluZQo+ IHdhdmVsZXRfZmlkZWxpdHlfcGFzcyhEaXJhY1Z1bGthbkRlY29kZUNvbnRleHQgKmRlYywKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJhY0NvbnRleHQgKmN0eCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICBGRlZrRXhlY0NvbnRleHQgKmV4ZWMsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgVmtCdWZmZXJNZW1vcnlCYXJyaWVyMiAqYnVmX2JhciwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKm5iX2J1Zl9iYXIpIHsKPiArICAgIGludCBlcnI7Cj4gKyAg ICBpbnQgYmFycmllcl9udW0gPSAqbmJfYnVmX2JhcjsKPiArICAgIGludCB3YXZlbGV0X2lkeCA9 IERXVF9ESVJBQ19GSURFTElUWTsKPiArICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZkZWMt PnZrY3R4LnZrZm47Cj4gKwo+ICsgICAgRkZWdWxrYW5QaXBlbGluZSAqcGxfaG9yID0gJmRlYy0+ aG9yaXpfd2F2ZWxldF9wbFt3YXZlbGV0X2lkeF07Cj4gKyAgICBGRlZ1bGthblBpcGVsaW5lICpw bF92ZXJ0ID0gJmRlYy0+dmVydF93YXZlbGV0X3BsW3dhdmVsZXRfaWR4XTsKPiArCj4gKyAgICBl cnIgPSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZmZXIoJmRlYy0+dmtjdHgsIHBsX3ZlcnQsIGV4 ZWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMtPnRtcF9idWYuYWRkcmVz cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMtPnRtcF9idWYu c2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRf VU5ERUZJTkVEKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiAr ICAgIGVyciA9IGZmX3ZrX3NldF9kZXNjcmlwdG9yX2J1ZmZlcigmZGVjLT52a2N0eCwgcGxfdmVy dCwgZXhlYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAw LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYy0+dG1wX2ludGVy bGVhdmVfYnVmLmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYuc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKPiArICAgIGlmIChlcnIgPCAw KQo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICBlcnIgPSBmZl92a19zZXRfZGVzY3Jp cHRvcl9idWZmZXIoJmRlYy0+dmtjdHgsIHBsX2hvciwgZXhlYywKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlYy0+dG1wX2ludGVybGVhdmVfYnVmLmFkZHJlc3MsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYu c2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRf VU5ERUZJTkVEKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiAr ICAgIGVyciA9IGZmX3ZrX3NldF9kZXNjcmlwdG9yX2J1ZmZlcigmZGVjLT52a2N0eCwgcGxfaG9y LCBleGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT50bXBfYnVmLmFk ZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT50bXBf YnVmLnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9S TUFUX1VOREVGSU5FRCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICBnb3RvIGZhaWw7 Cj4gKwo+ICsKPiArICAgIGZvciAoaW50IGkgPSBjdHgtPndhdmVsZXRfZGVwdGggLSAxOyBpID49 IDA7IGktLSkgewo+ICsgICAgICAgIGRlYy0+cENvbnN0LnBsYW5lX3N0cmlkZXNbMF0gPSBjdHgt PnBsYW5lWzBdLmlkd3Qud2lkdGggPDwgaTsKPiArICAgICAgICBkZWMtPnBDb25zdC5wbGFuZV9z dHJpZGVzWzFdID0gY3R4LT5wbGFuZVsxXS5pZHd0LndpZHRoIDw8IGk7Cj4gKyAgICAgICAgZGVj LT5wQ29uc3QucGxhbmVfc3RyaWRlc1syXSA9IGN0eC0+cGxhbmVbMl0uaWR3dC53aWR0aCA8PCBp Owo+ICsKPiArICAgICAgICBkZWMtPnBDb25zdC5kd1swXSA9IGN0eC0+cGxhbmVbMF0uaWR3dC53 aWR0aCA+PiAoaSArIDEpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0LmR3WzFdID0gY3R4LT5wbGFu ZVsxXS5pZHd0LndpZHRoID4+IChpICsgMSk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QuZHdbMl0g PSBjdHgtPnBsYW5lWzJdLmlkd3Qud2lkdGggPj4gKGkgKyAxKTsKPiArCj4gKyAgICAgICAgZGVj LT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzBdID0gKGN0eC0+cGxhbmVbMF0uaWR3dC53aWR0aCkg ID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzFdID0gKGN0eC0+ cGxhbmVbMF0uaWR3dC5oZWlnaHQpID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9w bGFuZV9kaW1zWzJdID0gKGN0eC0+cGxhbmVbMV0uaWR3dC53aWR0aCkgID4+IGk7Cj4gKyAgICAg ICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzNdID0gKGN0eC0+cGxhbmVbMV0uaWR3dC5o ZWlnaHQpID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzRdID0g KGN0eC0+cGxhbmVbMl0uaWR3dC53aWR0aCkgID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3Qu cmVhbF9wbGFuZV9kaW1zWzVdID0gKGN0eC0+cGxhbmVbMl0uaWR3dC5oZWlnaHQpID4+IGk7Cj4g Kwo+ICsgICAgICAgIC8qIFZlcnRpY2FsIHdhdmVsZXQgcGFzcyAqLwo+ICsgICAgICAgIGZmX3Zr X3VwZGF0ZV9wdXNoX2V4ZWMoJmRlYy0+dmtjdHgsIGV4ZWMsIHBsX3ZlcnQsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YoV2F2ZWxldFB1c2hDb25zdCks ICZkZWMtPnBDb25zdCk7Cj4gKwo+ICsgICAgICAgIGJhcnJpZXJfbnVtID0gKm5iX2J1Zl9iYXI7 Cj4gKyAgICAgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVmX2JhciwgJmRlYy0+dG1wX2J1Zik7 Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9idWYp Owo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9pbnRl cmxlYXZlX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZk ZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKwo+ICsgICAgICAgIHZrLT5DbWRQaXBlbGluZUJh cnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7Cj4gKyAgICAgICAgICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCj4gKyAgICAgICAg ICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gYnVmX2JhciArIGJhcnJpZXJfbnVtLAo+ ICsgICAgICAgICAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9ICpuYl9idWZfYmFy IC0gYmFycmllcl9udW0sCj4gKyAgICAgICAgfSk7Cj4gKwo+ICsgICAgICAgIGZmX3ZrX2V4ZWNf YmluZF9waXBlbGluZSgmZGVjLT52a2N0eCwgZXhlYywgcGxfdmVydCk7Cj4gKyAgICAgICAgdmst PkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT5w Q29uc3QucmVhbF9wbGFuZV9kaW1zWzBdID4+IDMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg IGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1sxXSA+PiA0LAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAxKTsKPiArCj4gKyAgICAgICAgLyogSG9yaXpvbnRhbCB3YXZlbGV0IHBhc3MgKi8K PiArICAgICAgICBmZl92a191cGRhdGVfcHVzaF9leGVjKCZkZWMtPnZrY3R4LCBleGVjLCBwbF9o b3IsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVU RV9CSVQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YoV2F2ZWxldFB1 c2hDb25zdCksICZkZWMtPnBDb25zdCk7Cj4gKwo+ICsgICAgICAgIGJhcnJpZXJfbnVtID0gKm5i X2J1Zl9iYXI7Cj4gKyAgICAgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVmX2JhciwgJmRlYy0+ dG1wX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMt PnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMt PnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5iX2J1 Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKwo+ICsgICAgICAgIHZrLT5DbWRQ aXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7Cj4gKyAgICAg ICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCj4g KyAgICAgICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gYnVmX2JhciArIGJhcnJp ZXJfbnVtLAo+ICsgICAgICAgICAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9ICpu Yl9idWZfYmFyIC0gYmFycmllcl9udW0sCj4gKyAgICAgICAgfSk7Cj4gKwo+ICsgICAgICAgIGZm X3ZrX2V4ZWNfYmluZF9waXBlbGluZSgmZGVjLT52a2N0eCwgZXhlYywgcGxfaG9yKTsKPiArICAg ICAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICBkZWMtPnBDb25zdC5yZWFsX3BsYW5lX2RpbXNbMF0gPj4gNCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzFdID4+IDMsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgIDEpOwo+ICsgICAgfQo+ICsKPiArICAgIGJhcnJpZXJfbnVtID0gKm5i X2J1Zl9iYXI7Cj4gKyAgICBiYXJfcmVhZChidWZfYmFyLCBuYl9idWZfYmFyLCAmZGVjLT50bXBf YnVmKTsKPiArICAgIGJhcl93cml0ZShidWZfYmFyLCBuYl9idWZfYmFyLCAmZGVjLT50bXBfYnVm KTsKPiArICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxl YXZlX2J1Zik7Cj4gKyAgICBiYXJfd3JpdGUoYnVmX2JhciwgbmJfYnVmX2JhciwgJmRlYy0+dG1w X2ludGVybGVhdmVfYnVmKTsKPiArCj4gKyAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVj LT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewo+ICsgICAgICAgICAgICAuc1R5cGUgPSBWS19T VFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCj4gKyAgICAgICAgICAgIC5wQnVmZmVyTWVt b3J5QmFycmllcnMgPSBidWZfYmFyICsgYmFycmllcl9udW0sCj4gKyAgICAgICAgICAgIC5idWZm ZXJNZW1vcnlCYXJyaWVyQ291bnQgPSAqbmJfYnVmX2JhciAtIGJhcnJpZXJfbnVtLAo+ICsgICAg fSk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK2ZhaWw6Cj4gKyAgICBmZl92a19leGVjX2Rpc2Nh cmRfZGVwcygmZGVjLT52a2N0eCwgZXhlYyk7Cj4gKyAgICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ ICsvKiAtLS0tLSBEYXViZWNoaWVzKDksIDcpIGluaXQgYW5kIHBpcGVsaW5lIHBhc3MgLS0tLS0g Ki8KPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGRhdWI5N19sb3cxW10gPSB7Cj4gKyAgICAgIEMo MCwgaW50MzJfdCBkYXViOTdfbG93MShpbnQzMl90IHYxLCBpbnQzMl90IHYyLCBpbnQzMl90IHYz KSB7ICAgICkKPiArICAgICAgQygxLCAgICAgIHJldHVybiAgdjIgLSAoKDE4MTcgKiAodjEgKyB2 MikgKyAyMDQ4KSA+PiAxMik7ICAgICAgICAgKQo+ICsgICAgICBDKDAsIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCj4gK307Cj4g Kwo+ICtzdGF0aWMgY29uc3QgY2hhciBkYXViOTdfaGlnaDFbXSA9IHsKPiArICAgICAgQygwLCBp bnQzMl90IGRhdWI5N19oaWdoMShpbnQzMl90IHYxLCBpbnQzMl90IHYyLCBpbnQzMl90IHYzKSB7 ICAgKQo+ICsgICAgICBDKDEsICAgICAgcmV0dXJuICB2MiAtICgoMTEzICogKHYxICsgdjIpICsg NjQpID4+IDcpOyAgICAgICAgICAgICApCj4gKyAgICAgIEMoMCwgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKPiArfTsKPiArCj4g K3N0YXRpYyBjb25zdCBjaGFyIGRhdWI5N19sb3cwW10gPSB7Cj4gKyAgICAgIEMoMCwgaW50MzJf dCBkYXViOTdfbG93MChpbnQzMl90IHYxLCBpbnQzMl90IHYyLCBpbnQzMl90IHYzKSB7ICAgICkK PiArICAgICAgQygxLCAgICAgIHJldHVybiAgdjIgLSAoKDIxNyAqICh2MSArIHYyKSArIDIwNDgp ID4+IDEyKTsgICAgICAgICAgKQo+ICsgICAgICBDKDAsIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCj4gK307Cj4gKwo+ICtzdGF0 aWMgY29uc3QgY2hhciBkYXViOTdfaGlnaDBbXSA9IHsKPiArICAgICAgQygwLCBpbnQzMl90IGRh dWI5N19oaWdoMChpbnQzMl90IHYxLCBpbnQzMl90IHYyLCBpbnQzMl90IHYzKSB7ICAgKQo+ICsg ICAgICBDKDEsICAgICAgcmV0dXJuICB2MiAtICgoNjk0NyAqICh2MSArIHYyKSArIDIwNDgpID4+ IDEyKTsgICAgICAgICApCj4gKyAgICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBjaGFyIGRhdWI5N19sb3dfeDBbXSA9IHsKPiArICAgICAgQygwLCBpbnQzMl90IGRhdWI5 N19sb3dfeDAoaW50IHBsYW5lLCBpbnQgeCwgaW50IHkpIHsgICAgICAgICApCj4gKyAgICAgIEMo MSwgICAgICBpbnQgdyA9IHBsYW5lX3NpemVzW3BsYW5lXS54OyAgICAgICAgICAgICAgICAgICAg ICAgKQo+ICsgICAgICBDKDEsICAgICAgaW50IGR3ID0gcGxhbmVfc2l6ZXNbcGxhbmVdLnggLyAy OyAgICAgICAgICAgICAgICAgICkKPiArICAgICAgQygxLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICBp bnQgeDAgPSAoeCA9PSAwKSA/IGR3IDogeCArIGR3OyAgICAgICAgICAgICAgICAgICAgKQo+ICsg ICAgICBDKDEsICAgICAgaW50MzJfdCB2MCA9IGluQnVmW2dldElkeChwbGFuZSwgeDAsIHkpXTsg ICAgICAgICAgICkKPiArICAgICAgQygxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICBpbnQzMl90IHYx ID0gaW5CdWZbZ2V0SWR4KHBsYW5lLCB4LCB5KV07ICAgICAgICAgICAgKQo+ICsgICAgICBDKDEs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkKPiArICAgICAgQygxLCAgICAgIGludCB4MiA9IHggKyBkdzsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICBpbnQzMl90IHYyID0gaW5CdWZb Z2V0SWR4KHBsYW5lLCB4MCwgeSldOyAgICAgICAgICAgKQo+ICsgICAgICBDKDEsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKPiArICAg ICAgQygxLCAgICAgIHJldHVybiBkYXViOTdfbG93MSh2MCwgdjEsIHYyKTsgICAgICAgICAgICAg ICAgICAgICApCj4gKyAgICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIg ZGF1Yjk3X2hpZ2hfeDBbXSA9IHsKPiArICAgICAgQygwLCBpbnQzMl90IGRhdWI5N19oaWdoX3gw KGludCBwbGFuZSwgaW50IHgsIGludCB5KSB7ICAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICBp bnQgdyA9IHBsYW5lX3NpemVzW3BsYW5lXS54OyAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsg ICAgICBDKDEsICAgICAgaW50IGR3ID0gcGxhbmVfc2l6ZXNbcGxhbmVdLnggLyAyOyAgICAgICAg ICAgICAgICAgICkKPiArICAgICAgQygxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICBpbnQgeDAgPSAo eCA9PSBkdyAtIDEpID8gKGR3IC0gMSkgOiAoeCAtIDEpOyAgICAgICAgKQo+ICsgICAgICBDKDEs ICAgICAgaW50MzJfdCB2MCA9IGRhdWI5N19sb3dfeDAocGxhbmUsIHgwLCB5KTsgICAgICAgICAg ICkKPiArICAgICAgQygxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICBpbnQzMl90IHYxID0gaW5CdWZb Z2V0SWR4KHBsYW5lLCB4ICsgZHcgLSAxLCB5KV07ICAgKQo+ICsgICAgICBDKDEsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKPiArICAg ICAgQygxLCAgICAgIGludDMyX3QgdjIgPSBkYXViOTdfbG93X3gwKHBsYW5lLCB4LCB5KTsgICAg ICAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgICBDKDEsICAgICAgcmV0dXJuIGRhdWI5 N19oaWdoMSh2MCwgdjEsIHYyKTsgICAgICAgICAgICAgICAgICAgICkKPiArICAgICAgQygwLCB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciBkYXViOTdfbG93X3gxW10gPSB7Cj4gKyAg ICAgIEMoMCwgaW50MzJfdCBkYXViOTdfbG93X3gxKGludCBwbGFuZSwgaW50IHgsIGludCB5KSB7 ICAgICAgICAgKQo+ICsgICAgICBDKDEsICAgICAgaW50IHcgPSBwbGFuZV9zaXplc1twbGFuZV0u eDsgICAgICAgICAgICAgICAgICAgICAgICkKPiArICAgICAgQygxLCAgICAgIGludCBkdyA9IHBs YW5lX3NpemVzW3BsYW5lXS54IC8gMjsgICAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQo+ICsgICAgICBDKDEsICAgICAgaW50MzJfdCB2MCA9IGRhdWI5N19oaWdoX3gwKHBsYW5lLCB4 LCB5KTsgICAgICAgICAgICkKPiArICAgICAgQygxLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICBpbnQz Ml90IHYxID0gZGF1Yjk3X2xvd194MChwbGFuZSwgeCwgeSk7ICAgICAgICAgICAgKQo+ICsgICAg ICBDKDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKPiArICAgICAgQygxLCAgICAgIGludDMyX3QgdjIgPSBkYXViOTdfaGlnaF94MChw bGFuZSwgeCArIDEsIHkpOyAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgICBDKDEsICAg ICAgcmV0dXJuIGRhdWI5N19sb3cwKHYwLCB2MSwgdjIpOyAgICAgICAgICAgICAgICAgICAgICkK PiArICAgICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciBkYXViOTdfaGln aF94MVtdID0gewo+ICsgICAgICBDKDAsIGludDMyX3QgZGF1Yjk3X2hpZ2hfeDEoaW50IHBsYW5l LCBpbnQgeCwgaW50IHkpIHsgICAgICAgICkKPiArICAgICAgQygxLCAgICAgIGludCB3ID0gcGxh bmVfc2l6ZXNbcGxhbmVdLng7ICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwg ICAgICBpbnQgZHcgPSBwbGFuZV9zaXplc1twbGFuZV0ueCAvIDI7ICAgICAgICAgICAgICAgICAg KQo+ICsgICAgICBDKDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKPiArICAgICAgQygxLCAgICAgIGludCB4MCA9IGNsYW1wKHggLSAx LCAwLCBkdyk7ICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICBpbnQz Ml90IHYwID0gZGF1Yjk3X2xvd194MShwbGFuZSwgeDAsIHkpOyAgICAgICAgICAgKQo+ICsgICAg ICBDKDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKPiArICAgICAgQygxLCAgICAgIGludDMyX3QgdjEgPSBkYXViOTdfaGlnaF94MChw bGFuZSwgeCArIDEsIHkpOyAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgICBDKDEsICAg ICAgaW50IHgyID0gY2xhbXAoeCwgMCwgZHcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICkK PiArICAgICAgQygxLCAgICAgIGludDMyX3QgdjIgPSBkYXViOTdfbG93X3gxKHBsYW5lLCB4Miwg eSk7ICAgICAgICAgICApCj4gKyAgICAgIEMoMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgICBDKDEsICAgICAgcmV0dXJu IGRhdWI5N19oaWdoMCh2MCwgdjEsIHYyKTsgICAgICAgICAgICAgICAgICAgICkKPiArICAgICAg QygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciBkYXViOTdfaG9yaXpbXSA9IHsK PiArICAgICAgQygwLCB2b2lkIGlkd3RfaG9yaXooaW50IHBsYW5lLCBpbnQgeCwgaW50IHkpIHsg ICAgICAgICAgICAgICAgICAgKQo+ICsgICAgICBDKDEsICAgICAgaW50IHcgPSBwbGFuZV9zaXpl c1twbGFuZV0ueDsgICAgICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwgICAg ICBpbnQgZHcgPSBwbGFuZV9zaXplc1twbGFuZV0ueCAvIDI7ICAgICAgICAgICAgICAgICAgICAg ICkKPiArICAgICAgQygxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgICBDKDEsICAgICAgaW50MzJfdCB2MCA9IGRh dWI5N19sb3dfeDEocGxhbmUsIHgsIHkpOyAgICAgICAgICAgICAgICApCj4gKyAgICAgIEMoMSwg ICAgICBpbnQzMl90IHYxID0gZGF1Yjk3X2hpZ2hfeDEocGxhbmUsIHgsIHkpOyAgICAgICAgICAg ICAgICkKPiArICAgICAgQygxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgICBDKDEsICAgIG91dEJ1ZltnZXRJZHgo cGxhbmUsIDIgKiB4LCB5KV0gICAgID0gfigofnYwKSA+PiAxKTsgICAgICApCj4gKyAgICAgIEMo MSwgICAgb3V0QnVmW2dldElkeChwbGFuZSwgMiAqIHggKyAxLCB5KV0gPSB+KCh+djEpID4+IDEp OyAgICAgICkKPiArICAgICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQo+ICt9Owo+ICsKPiArc3RhdGljIGludCBpbml0 X3dhdmVsZXRfc2hkX2RhdWI5N192ZXJ0KERpcmFjVnVsa2FuRGVjb2RlQ29udGV4dCAqcywKPiBG RlZrU1BJUlZDb21waWxlciAqc3B2KQo+ICt7Cj4gKyAgICBpbnQgZXJyID0gMDsKPiArICAgIHVp bnQ4X3QgKnNwdl9kYXRhOwo+ICsgICAgc2l6ZV90IHNwdl9sZW47Cj4gKyAgICB2b2lkICpzcHZf b3BhcXVlID0gTlVMTDsKPiArICAgIGludCB3YXZlbGV0X2lkeCA9IERXVF9ESVJBQ19EQVVCOV83 Owo+ICsgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKPiArICAgIEZGVnVs a2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2M7Cj4gKyAgICBGRlZrU1BJUlZTaGFkZXIgKnNo ZCA9ICZzLT52ZXJ0X3dhdmVsZXRfc2hkW3dhdmVsZXRfaWR4XTsKPiArICAgIEZGVnVsa2FuUGlw ZWxpbmUgKnBsID0gJnMtPnZlcnRfd2F2ZWxldF9wbFt3YXZlbGV0X2lkeF07Cj4gKyAgICBGRlZr RXhlY1Bvb2wgKmV4ZWMgPSAmcy0+ZXhlY19wb29sOwo+ICsKPiArICAgIFJFVChmZl92a19zaGFk ZXJfaW5pdChwbCwgc2hkLCAiZGF1Yjk3X3ZlcnQiLAo+IFZLX1NIQURFUl9TVEFHRV9DT01QVVRF X0JJVCwgMCkpOwo+ICsKPiArICAgIHNoZCA9ICZzLT52ZXJ0X3dhdmVsZXRfc2hkW3dhdmVsZXRf aWR4XTsKPiArICAgIGZmX3ZrX3NoYWRlcl9zZXRfY29tcHV0ZV9zaXplcyhzaGQsIDgsIDEsIDMp Owo+ICsKPiArICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhUX2RlYnVnX3ByaW50ZiA6IGVu YWJsZSk7Cj4gKyAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9zY2FsYXJfYmxvY2tfbGF5 b3V0IDogZW5hYmxlKTsKPiArICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl9l eHBsaWNpdF9hcml0aG1ldGljX3R5cGVzIDogZW5hYmxlKTsKPiArCj4gKyAgICBkZXNjID0gKEZG VnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmdbXSkKPiArICAgIHsKPiArICAgICAgICB7Cj4gKyAg ICAgICAgICAubmFtZSA9ICJpbl9idWYiLAo+ICsgICAgICAgICAgLnN0YWdlcyA9IFZLX1NIQURF Ul9TVEFHRV9DT01QVVRFX0JJVCwKPiArICAgICAgICAgIC50eXBlID0gVktfREVTQ1JJUFRPUl9U WVBFX1NUT1JBR0VfQlVGRkVSLAo+ICsgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludDMyX3Qg aW5CdWZbXTsiLAo+ICsgICAgICAgICAgLyoubWVtX3F1YWxpID0gInJlYWRvbmx5IiwqLwo+ICsg ICAgICAgICAgLmRpbWVuc2lvbnMgPSAxLAo+ICsgICAgICAgIH0sCj4gKyAgICAgICAgewo+ICsg ICAgICAgICAgLm5hbWUgPSAib3V0X2J1ZiIsCj4gKyAgICAgICAgICAuc3RhZ2VzID0gVktfU0hB REVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgLnR5cGUgPSBWS19ERVNDUklQVE9S X1RZUEVfU1RPUkFHRV9CVUZGRVIsCj4gKyAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MzJf dCBvdXRCdWZbXTsiLAo+ICsgICAgICAgICAgLm1lbV9xdWFsaSA9ICJ3cml0ZW9ubHkiLAo+ICsg ICAgICAgICAgLmRpbWVuc2lvbnMgPSAxLAo+ICsgICAgICAgIH0sCj4gKyAgICB9Owo+ICsgICAg UkVUKGZmX3ZrX3BpcGVsaW5lX2Rlc2NyaXB0b3Jfc2V0X2FkZCh2a2N0eCwgcGwsIHNoZCwgZGVz YywgMiwgMCwgMCkpOwo+ICsKPiArICAgIGZmX3ZrX2FkZF9wdXNoX2NvbnN0YW50KHBsLCAwLCBz aXplb2YoV2F2ZWxldFB1c2hDb25zdCksCj4gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsK PiArCj4gKyAgICBHTFNMQygwLCBsYXlvdXQocHVzaF9jb25zdGFudCwgc3RkNDMwKSB1bmlmb3Jt IHB1c2hDb25zdGFudHMgeyAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpdmVjMiBwbGFuZV9zaXpl c1szXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAg IGludCBwbGFuZV9vZmZzWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4g KyAgICBHTFNMQygxLCAgICAgaW50IHBsYW5lX3N0cmlkZXNbM107ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQgZHdbM107ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGludCB3 YXZlbGV0X2RlcHRoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBH TFNMQygwLCB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKPiArICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsKPiArICAgIEdMU0xEKGdldF9pZHgpOwo+ICsK PiArICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpIHsKPiAgICAgICAgICAgICAgICAgICApOwo+ICsg ICAgR0xTTEMoMSwgICAgaW50IG9mZl94ID0gaW50KGdsX1dvcmtHcm91cFNpemUueCAqCj4gZ2xf TnVtV29ya0dyb3Vwcy54KTsgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAg IGludCBwaWNfeiA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueik7Cj4gICAgICAgICAgICAg ICAgICAgICk7Cj4gKyAgICBHTFNMQygxLAo+ICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBH TFNMQygxLCAgICB1aW50IGggPSBpbnQocGxhbmVfc2l6ZXNbcGljX3pdLnkpOwo+ICAgICAgICAg ICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgdWludCB3ID0gaW50KHBsYW5lX3NpemVz W3BpY196XS54KTsKPiAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsCj4gICAg ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDIsICAgIGludCB4ID0gaW50KGdsX0dsb2Jh bEludm9jYXRpb25JRC54KTsKPiAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEs ICAgIGZvciAoOyB4IDwgdzsgeCArPSBvZmZfeCkgewo+ICAgICAgICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMiwgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSArPSAyKSB7Cj4g ICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDMsICAgICAgICAgICAgaW50MzJfdCB2 MCA9IGluQnVmW2dldElkeChwaWNfeiwgeCwgaW50KGNsYW1wKHkgLQo+IDEsIDAsIGgpKSldOyAg ICAgICk7Cj4gKyAgICBHTFNMQygzLCAgICAgICAgICAgIGludDMyX3QgdjEgPSBpbkJ1ZltnZXRJ ZHgocGljX3osIHgsIHkgKyAxKV07Cj4gICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xD KDMsICAgICAgICAgICAgaW5CdWZbZ2V0SWR4KHBpY196LCB4LCB5KV0gLT0gKDE4MTcgKiAodjAg KyB2MSArCj4gMjA0OCkpID4+IDEyOyAgICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAgfQo+ ICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAgIGZvciAoaW50IHkg PSAwOyB5IDwgaDsgeSArPSAyKSB7Cj4gICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xD KDMsICAgICAgICAgICAgaW50MzJfdCB2MCA9IGluQnVmW2dldElkeChwaWNfeiwgeCwgeSldOwo+ ICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygzLCAgICAgICAgICAgIGludDMyX3Qg djEgPSBpbkJ1ZltnZXRJZHgocGljX3osIHgsIGludChjbGFtcCh5ICsKPiAyLCAwLCBoIC0gMikp KV07ICApOwo+ICsgICAgR0xTTEMoMywgICAgICAgICAgICBpbkJ1ZltnZXRJZHgocGljX3osIHgs IHkgKyAxKV0gLT0gKDM2MTYgKiAodjAgKwo+IHYxICsgMjA0OCkpID4+IDEyOyAgKTsKPiArICAg IEdMU0xDKDIsICAgICAgICB9Cj4gICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygy LCAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5ICs9IDIpIHsKPiAgICAgICAgICAgICAg ICAgICApOwo+ICsgICAgR0xTTEMoMywgICAgICAgICAgICBpbnQzMl90IHYwID0gaW5CdWZbZ2V0 SWR4KHBpY196LCB4LCBpbnQoY2xhbXAoeSAtCj4gMSwgMCwgaCkpKV07ICAgICAgKTsKPiArICAg IEdMU0xDKDMsICAgICAgICAgICAgaW50MzJfdCB2MSA9IGluQnVmW2dldElkeChwaWNfeiwgeCwg eSArIDEpXTsKPiAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMywgICAgICAgICAg ICBpbnQzMl90IHYyID0gaW5CdWZbZ2V0SWR4KHBpY196LCB4LCB5KV07Cj4gICAgICAgICAgICAg ICAgICAgKTsKPiArICAgIEdMU0xDKDMsICAgICAgICAgICAgb3V0QnVmW2dldElkeChwaWNfeiwg eCwgeSldID0gdjIgKyAoMjE3ICogKHYwICsKPiB2MSArIDIwNDgpKSA+PiAxMjsgICk7Cj4gKyAg ICBHTFNMQygyLCAgICAgICAgfQo+ICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMo MiwgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSArPSAyKSB7Cj4gICAgICAgICAgICAg ICAgICAgKTsKPiArICAgIEdMU0xDKDMsICAgICAgICAgICAgaW50MzJfdCB2MCA9IGluQnVmW2dl dElkeChwaWNfeiwgeCwgeSldOwo+ICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygz LCAgICAgICAgICAgIGludDMyX3QgdjEgPSBpbkJ1ZltnZXRJZHgocGljX3osIHgsIGludChjbGFt cCh5ICsKPiAyLCAwLCBoIC0gMikpKV07ICApOwo+ICsgICAgR0xTTEMoMywgICAgICAgICAgICBp bnQzMl90IHYyID0gaW5CdWZbZ2V0SWR4KHBpY196LCB4LCB5ICsgMSldOwo+ICAgICAgICAgICAg ICAgICAgICk7Cj4gKyAgICBHTFNMQygzLCAgICAgICAgICAgIG91dEJ1ZltnZXRJZHgocGljX3os IHgsIHkgKyAxKV0gPSB2MiArICg2NDk3ICoKPiAodjAgKyB2MSArIDIwNDgpKSA+PiAxMjspOwo+ ICsgICAgR0xTTEMoMiwgICAgICAgIH0KPiAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdM U0xDKDEsICAgIH0KPiAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAsIH0KPiAg ICAgICAgICAgICAgICAgICApOwo+ICsKPiArICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHNw diwgdmtjdHgsIHNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1haW4iLAo+ICZzcHZfb3BhcXVl KSk7Cj4gKyAgICBSRVQoZmZfdmtfc2hhZGVyX2NyZWF0ZSh2a2N0eCwgc2hkLCBzcHZfZGF0YSwg c3B2X2xlbiwgIm1haW4iKSk7Cj4gKyAgICBSRVQoZmZfdmtfaW5pdF9jb21wdXRlX3BpcGVsaW5l KHZrY3R4LCBwbCwgc2hkKSk7Cj4gKyAgICBSRVQoZmZfdmtfZXhlY19waXBlbGluZV9yZWdpc3Rl cih2a2N0eCwgZXhlYywgcGwpKTsKPiArCj4gK2ZhaWw6Cj4gKyAgICBpZiAoc3B2X29wYXF1ZSkK PiArICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOwo+ICsKPiArICAg IHJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW5pdF93YXZlbGV0X3NoZF9kYXVi OTdfaG9yaXooRGlyYWNWdWxrYW5EZWNvZGVDb250ZXh0ICpzLAo+IEZGVmtTUElSVkNvbXBpbGVy ICpzcHYpCj4gK3sKPiArICAgIGludCBlcnIgPSAwOwo+ICsgICAgdWludDhfdCAqc3B2X2RhdGE7 Cj4gKyAgICBzaXplX3Qgc3B2X2xlbjsKPiArICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwo+ ICsgICAgaW50IHdhdmVsZXRfaWR4ID0gRFdUX0RJUkFDX0RBVUI5Xzc7Cj4gKyAgICBGRlZ1bGth bkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4Owo+ICsgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0 QmluZGluZyAqZGVzYzsKPiArICAgIEZGVmtTUElSVlNoYWRlciAqc2hkID0gJnMtPmhvcml6X3dh dmVsZXRfc2hkW3dhdmVsZXRfaWR4XTsKPiArICAgIEZGVnVsa2FuUGlwZWxpbmUgKnBsID0gJnMt Pmhvcml6X3dhdmVsZXRfcGxbd2F2ZWxldF9pZHhdOwo+ICsgICAgRkZWa0V4ZWNQb29sICpleGVj ID0gJnMtPmV4ZWNfcG9vbDsKPiArCj4gKyAgICBSRVQoZmZfdmtfc2hhZGVyX2luaXQocGwsIHNo ZCwgImRhdWI5N19ob3JpeiIsCj4gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULCAwKSk7Cj4g Kwo+ICsgICAgc2hkID0gJnMtPmhvcml6X3dhdmVsZXRfc2hkW3dhdmVsZXRfaWR4XTsKPiArICAg IGZmX3ZrX3NoYWRlcl9zZXRfY29tcHV0ZV9zaXplcyhzaGQsIDgsIDgsIDMpOwo+ICsKPiArICAg IEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhUX2RlYnVnX3ByaW50ZiA6IGVuYWJsZSk7Cj4gKyAg ICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9zY2FsYXJfYmxvY2tfbGF5b3V0IDogZW5hYmxl KTsKPiArICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl9leHBsaWNpdF9hcml0 aG1ldGljX3R5cGVzIDogZW5hYmxlKTsKPiArCj4gKyAgICBkZXNjID0gKEZGVnVsa2FuRGVzY3Jp cHRvclNldEJpbmRpbmdbXSkKPiArICAgIHsKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAubmFt ZSA9ICJpbl9idWYiLAo+ICsgICAgICAgICAgLnN0YWdlcyA9IFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKPiArICAgICAgICAgIC50eXBlID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0Vf QlVGRkVSLAo+ICsgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludDMyX3QgaW5CdWZbXTsiLAo+ ICsgICAgICAgICAgLm1lbV9xdWFsaSA9ICJyZWFkb25seSIsCj4gKyAgICAgICAgICAuZGltZW5z aW9ucyA9IDEsCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAubmFtZSA9 ICJvdXRfYnVmIiwKPiArICAgICAgICAgIC5zdGFnZXMgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVU RV9CSVQsCj4gKyAgICAgICAgICAudHlwZSA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JV RkZFUiwKPiArICAgICAgICAgIC5idWZfY29udGVudCA9ICJpbnQzMl90IG91dEJ1ZltdOyIsCj4g KyAgICAgICAgICAubWVtX3F1YWxpID0gIndyaXRlb25seSIsCj4gKyAgICAgICAgICAuZGltZW5z aW9ucyA9IDEsCj4gKyAgICAgICAgfSwKPiArICAgIH07Cj4gKyAgICBSRVQoZmZfdmtfcGlwZWxp bmVfZGVzY3JpcHRvcl9zZXRfYWRkKHZrY3R4LCBwbCwgc2hkLCBkZXNjLCAyLCAwLCAwKSk7Cj4g Kwo+ICsgICAgZmZfdmtfYWRkX3B1c2hfY29uc3RhbnQocGwsIDAsIHNpemVvZihXYXZlbGV0UHVz aENvbnN0KSwKPiBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQpOwo+ICsKPiArICAgIEdMU0xD KDAsIGxheW91dChwdXNoX2NvbnN0YW50LCBzdGQ0MzApIHVuaWZvcm0gcHVzaENvbnN0YW50cyB7 ICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGl2ZWMyIHBsYW5lX3NpemVzWzNdOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IHBsYW5lX29mZnNb M107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAg ICBpbnQgcGxhbmVfc3RyaWRlc1szXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMSwgICAgIGludCBkd1szXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IHdhdmVsZXRfZGVwdGg7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAsIH07ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAg R0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Cj4gKwo+ICsgICAgR0xTTEQoZ2V0X2lkeCk7Cj4gKyAgICBHTFNMRChkYXViOTdf bG93MSk7Cj4gKyAgICBHTFNMRChkYXViOTdfbG93MCk7Cj4gKyAgICBHTFNMRChkYXViOTdfaGln aDEpOwo+ICsgICAgR0xTTEQoZGF1Yjk3X2hpZ2gwKTsKPiArICAgIEdMU0xEKGRhdWI5N19sb3df eDApOwo+ICsgICAgR0xTTEQoZGF1Yjk3X2hpZ2hfeDApOwo+ICsgICAgR0xTTEQoZGF1Yjk3X2xv d194MSk7Cj4gKyAgICBHTFNMRChkYXViOTdfaGlnaF94MSk7Cj4gKyAgICBHTFNMRChkYXViOTdf aG9yaXopOwo+ICsKPiArICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpIHsKPiAgICAgICAgICAgICAg ICk7Cj4gKyAgICBHTFNMQygxLCAgICBpbnQgb2ZmX3kgPSBpbnQoZ2xfV29ya0dyb3VwU2l6ZS55 ICoKPiBnbF9OdW1Xb3JrR3JvdXBzLnkpOyAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygx LCAgICBpbnQgb2ZmX3ggPSBpbnQoZ2xfV29ya0dyb3VwU2l6ZS54ICoKPiBnbF9OdW1Xb3JrR3Jv dXBzLngpOyAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICBpbnQgcGljX3ogPSBp bnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELnopOwo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBH TFNMQygxLAo+ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIHVpbnQgaCA9IGlu dChwbGFuZV9zaXplc1twaWNfel0ueSk7Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xD KDIsICAgIHVpbnQgdyA9IGludChwbGFuZV9zaXplc1twaWNfel0ueCk7Cj4gICAgICAgICAgICAg ICAgKTsKPiArICAgIEdMU0xDKDEsCj4gICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwg ICAgaW50IHkgPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELnkpOwo+ICAgICAgICAgICAgICAg ICk7Cj4gKyAgICBHTFNMQygxLCAgICBmb3IgKDsgeSA8IGg7IHkgKz0gb2ZmX3kpIHsKPiAgICAg ICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAgIGludCB4ID0gaW50KGdsX0dsb2Jh bEludm9jYXRpb25JRC54KTsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAg ICAgIGZvciAoOyAyICogeCA8IHc7IHggKz0gb2ZmX3gpIHsKPiAgICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMywgICAgICAgICAgICBpZHd0X2hvcml6KHBpY196LCB4LCB5KTsKPiAgICAg ICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAgfQo+ICAgICAgICAgICAgICAgICk7 Cj4gKyAgICBHTFNMQygxLCAgICB9Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAs IH0KPiAgICAgICAgICAgICAgICk7Cj4gKwo+ICsgICAgUkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIo c3B2LCB2a2N0eCwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCj4gJnNwdl9vcGFx dWUpKTsKPiArICAgIFJFVChmZl92a19zaGFkZXJfY3JlYXRlKHZrY3R4LCBzaGQsIHNwdl9kYXRh LCBzcHZfbGVuLCAibWFpbiIpKTsKPiArICAgIFJFVChmZl92a19pbml0X2NvbXB1dGVfcGlwZWxp bmUodmtjdHgsIHBsLCBzaGQpKTsKPiArICAgIFJFVChmZl92a19leGVjX3BpcGVsaW5lX3JlZ2lz dGVyKHZrY3R4LCBleGVjLCBwbCkpOwo+ICsKPiArZmFpbDoKPiArICAgIGlmIChzcHZfb3BhcXVl KQo+ICsgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7Cj4gKwo+ICsg ICAgcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IGlu bGluZQo+IHdhdmVsZXRfZGF1Yjk3X3Bhc3MoRGlyYWNWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyYWNDb250ZXh0ICpjdHgsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIFZrQnVmZmVyTWVtb3J5QmFycmllcjIgKmJ1Zl9iYXIsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICpuYl9idWZfYmFyKSB7Cj4gKyAgICBpbnQgZXJyOwo+ ICsgICAgaW50IGJhcnJpZXJfbnVtID0gKm5iX2J1Zl9iYXI7Cj4gKyAgICBpbnQgd2F2ZWxldF9p ZHggPSBEV1RfRElSQUNfREFVQjlfNzsKPiArICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZk ZWMtPnZrY3R4LnZrZm47Cj4gKwo+ICsgICAgRkZWdWxrYW5QaXBlbGluZSAqcGxfaG9yID0gJmRl Yy0+aG9yaXpfd2F2ZWxldF9wbFt3YXZlbGV0X2lkeF07Cj4gKyAgICBGRlZ1bGthblBpcGVsaW5l ICpwbF92ZXJ0ID0gJmRlYy0+dmVydF93YXZlbGV0X3BsW3dhdmVsZXRfaWR4XTsKPiArCj4gKyAg ICBlcnIgPSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZmZXIoJmRlYy0+dmtjdHgsIHBsX3ZlcnQs IGV4ZWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMtPnRtcF9idWYuYWRk cmVzcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMtPnRtcF9i dWYuc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JN QVRfVU5ERUZJTkVEKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIGdvdG8gZmFpbDsK PiArICAgIGVyciA9IGZmX3ZrX3NldF9kZXNjcmlwdG9yX2J1ZmZlcigmZGVjLT52a2N0eCwgcGxf dmVydCwgZXhlYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAx LCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYy0+dG1wX2lu dGVybGVhdmVfYnVmLmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYuc2l6ZSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKPiArICAgIGlmIChlcnIg PCAwKQo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICBlcnIgPSBmZl92a19zZXRfZGVz Y3JpcHRvcl9idWZmZXIoJmRlYy0+dmtjdHgsIHBsX2hvciwgZXhlYywKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRlYy0+dG1wX2ludGVybGVhdmVfYnVmLmFkZHJlc3MsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT50bXBfaW50ZXJsZWF2ZV9i dWYuc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JN QVRfVU5ERUZJTkVEKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIGdvdG8gZmFpbDsK PiArICAgIGVyciA9IGZmX3ZrX3NldF9kZXNjcmlwdG9yX2J1ZmZlcigmZGVjLT52a2N0eCwgcGxf aG9yLCBleGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEs IDAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT50bXBfYnVm LmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT50 bXBfYnVmLnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf Rk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICBnb3RvIGZh aWw7Cj4gKwo+ICsKPiArICAgIGZvciAoaW50IGkgPSBjdHgtPndhdmVsZXRfZGVwdGggLSAxOyBp ID49IDA7IGktLSkgewo+ICsgICAgICAgIGRlYy0+cENvbnN0LnBsYW5lX3N0cmlkZXNbMF0gPSBj dHgtPnBsYW5lWzBdLmlkd3Qud2lkdGggPDwgaTsKPiArICAgICAgICBkZWMtPnBDb25zdC5wbGFu ZV9zdHJpZGVzWzFdID0gY3R4LT5wbGFuZVsxXS5pZHd0LndpZHRoIDw8IGk7Cj4gKyAgICAgICAg ZGVjLT5wQ29uc3QucGxhbmVfc3RyaWRlc1syXSA9IGN0eC0+cGxhbmVbMl0uaWR3dC53aWR0aCA8 PCBpOwo+ICsKPiArICAgICAgICBkZWMtPnBDb25zdC5kd1swXSA9IGN0eC0+cGxhbmVbMF0uaWR3 dC53aWR0aCA+PiAoaSArIDEpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0LmR3WzFdID0gY3R4LT5w bGFuZVsxXS5pZHd0LndpZHRoID4+IChpICsgMSk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QuZHdb Ml0gPSBjdHgtPnBsYW5lWzJdLmlkd3Qud2lkdGggPj4gKGkgKyAxKTsKPiArCj4gKyAgICAgICAg ZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzBdID0gKGN0eC0+cGxhbmVbMF0uaWR3dC53aWR0 aCkgID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzFdID0gKGN0 eC0+cGxhbmVbMF0uaWR3dC5oZWlnaHQpID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVh bF9wbGFuZV9kaW1zWzJdID0gKGN0eC0+cGxhbmVbMV0uaWR3dC53aWR0aCkgID4+IGk7Cj4gKyAg ICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzNdID0gKGN0eC0+cGxhbmVbMV0uaWR3 dC5oZWlnaHQpID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzRd ID0gKGN0eC0+cGxhbmVbMl0uaWR3dC53aWR0aCkgID4+IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29u c3QucmVhbF9wbGFuZV9kaW1zWzVdID0gKGN0eC0+cGxhbmVbMl0uaWR3dC5oZWlnaHQpID4+IGk7 Cj4gKwo+ICsgICAgICAgIC8qIFZlcnRpY2FsIHdhdmVsZXQgcGFzcyAqLwo+ICsgICAgICAgIGZm X3ZrX3VwZGF0ZV9wdXNoX2V4ZWMoJmRlYy0+dmtjdHgsIGV4ZWMsIHBsX3ZlcnQsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YoV2F2ZWxldFB1c2hDb25z dCksICZkZWMtPnBDb25zdCk7Cj4gKwo+ICsgICAgICAgIGJhcnJpZXJfbnVtID0gKm5iX2J1Zl9i YXI7Cj4gKyAgICAgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVmX2JhciwgJmRlYy0+dG1wX2J1 Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9i dWYpOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9p bnRlcmxlYXZlX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIs ICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKwo+ICsgICAgICAgIHZrLT5DbWRQaXBlbGlu ZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7Cj4gKyAgICAgICAgICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCj4gKyAgICAg ICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gYnVmX2JhciArIGJhcnJpZXJfbnVt LAo+ICsgICAgICAgICAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9ICpuYl9idWZf YmFyIC0gYmFycmllcl9udW0sCj4gKyAgICAgICAgfSk7Cj4gKwo+ICsgICAgICAgIGZmX3ZrX2V4 ZWNfYmluZF9waXBlbGluZSgmZGVjLT52a2N0eCwgZXhlYywgcGxfdmVydCk7Cj4gKyAgICAgICAg dmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgZGVj LT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzBdLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAx LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAxKTsKPiArCj4gKyAgICAgICAgLyogSG9yaXpv bnRhbCB3YXZlbGV0IHBhc3MgKi8KPiArICAgICAgICBmZl92a191cGRhdGVfcHVzaF9leGVjKCZk ZWMtPnZrY3R4LCBleGVjLCBwbF9ob3IsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLCBzaXplb2YoV2F2ZWxldFB1c2hDb25zdCksICZkZWMtPnBDb25zdCk7Cj4gKwo+ICsgICAg ICAgIGJhcnJpZXJfbnVtID0gKm5iX2J1Zl9iYXI7Cj4gKyAgICAgICAgYmFyX3JlYWQoYnVmX2Jh ciwgbmJfYnVmX2JhciwgJmRlYy0+dG1wX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9i YXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9i YXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKyAgICAgICAgYmFy X3dyaXRlKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4g Kwo+ICsgICAgICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVu ZGVuY3lJbmZvKSB7Cj4gKyAgICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9ERVBFTkRFTkNZX0lORk8sCj4gKyAgICAgICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJp ZXJzID0gYnVmX2JhciArIGJhcnJpZXJfbnVtLAo+ICsgICAgICAgICAgICAgICAgLmJ1ZmZlck1l bW9yeUJhcnJpZXJDb3VudCA9ICpuYl9idWZfYmFyIC0gYmFycmllcl9udW0sCj4gKyAgICAgICAg fSk7Cj4gKwo+ICsgICAgICAgIGZmX3ZrX2V4ZWNfYmluZF9waXBlbGluZSgmZGVjLT52a2N0eCwg ZXhlYywgcGxfaG9yKTsKPiArICAgICAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICBkZWMtPnBDb25zdC5yZWFsX3BsYW5lX2RpbXNbMF0gPj4g NCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1z WzFdID4+IDMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIDEpOwo+ICsKPiArICAgICAgICBi YXJyaWVyX251bSA9ICpuYl9idWZfYmFyOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5i X2J1Zl9iYXIsICZkZWMtPnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl93cml0ZShidWZfYmFyLCBu Yl9idWZfYmFyLCAmZGVjLT50bXBfYnVmKTsKPiArICAgICAgICBiYXJfcmVhZChidWZfYmFyLCBu Yl9idWZfYmFyLCAmZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsgICAgICAgIGJhcl93cml0 ZShidWZfYmFyLCBuYl9idWZfYmFyLCAmZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsKPiAr ICAgICAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5 SW5mbykgewo+ICsgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQ RU5ERU5DWV9JTkZPLAo+ICsgICAgICAgICAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9 IGJ1Zl9iYXIgKyBiYXJyaWVyX251bSwKPiArICAgICAgICAgICAgICAgIC5idWZmZXJNZW1vcnlC YXJyaWVyQ291bnQgPSAqbmJfYnVmX2JhciAtIGJhcnJpZXJfbnVtLAo+ICsgICAgICAgIH0pOwo+ ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICtmYWlsOgo+ICsgICAgZmZfdmtfZXhlY19k aXNjYXJkX2RlcHMoJmRlYy0+dmtjdHgsIGV4ZWMpOwo+ICsgICAgcmV0dXJuIGVycjsKPiArfQo+ ICsKPiArLyogLS0tLS0gRGVzbGF1cmllcnMtRHVidWMoOSwgNykgaW5pdCBhbmQgcGlwZWxpbmUg cGFzcyAtLS0tLSAqLwo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgZGQ5N19oaWdoW10gPSB7Cj4g KyAgICAgIEMoMCwgaW50MzJfdCBkZDk3X2hpZ2goaW50MzJfdCB2MSwgaW50MzJfdCB2MiwgaW50 MzJfdCB2MywgaW50MzJfdAo+IHY0LCBpbnQzMl90IHY1KSB7ICApCj4gKyAgICAgIEMoMSwgICAg ICByZXR1cm4gIHYzICsgKCg5ICogdjQgKyA5ICogdjIgLSB2NSAtIHYxICsgOCkgPj4gNCk7Cj4g ICAgICAgICAgICAgICAgICAgKQo+ICsgICAgICBDKDAsIH0KPiAgICAgICAgICAgICAgICAgICAp Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciBkZDk3X3ZlcnRbXSA9IHsKPiArICAgIEMo MCwgdm9pZCBpZHd0X3ZlcnQoaW50IHBsYW5lLCBpbnQgeCwgaW50IHkpIHsKPiAgICAgICAgICAg ICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCBoID0gcGxhbmVfc2l6ZXNbcGxhbmVd Lnk7Cj4gICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwKPiAgICAgICAgICAgICAgICAg ICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgb3V0MCA9IGxlZ2FsbF9sb3dfeShwbGFu ZSwgeCwgeSk7Cj4gICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50 MzJfdCBvdXRfMiA9ICh5IC0gMiA+IDApID8gbGVnYWxsX2xvd195KHBsYW5lLCB4LCB5Cj4gLSAy KSA6ICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGVnYWxsX2xvd195KHBsYW5lLCB4LAo+IDApOyAgICAgICAgICAgICAgICAg ICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCBvdXQyID0gKHkgKyAyIDwgaCkgPyBsZWdh bGxfbG93X3kocGxhbmUsIHgsIHkgKwo+IDIpIDogICAgICAgICAgICAgICkKPiArICAgIEMoMSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnYWxsX2xvd195KHBsYW5l LCB4LCBoCj4gLSAyKTsgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJf dCBvdXQ0ID0gKHkgKyA0IDwgaCkgPyBsZWdhbGxfbG93X3kocGxhbmUsIHgsIHkgKwo+IDQpIDog ICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGVnYWxsX2xvd195KHBsYW5lLCB4LCBoCj4gLSAyKTsgICAgICAgICAgICAgICkK PiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2YWwxID0gaW5CdWZbZ2V0SWR4KHBsYW5lLCB4 LCB5ICsgMSldOwo+ICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwKPiAgICAgICAgICAg ICAgICAgICApCj4gKyAgICBDKDEsICAgIG91dEJ1ZltnZXRJZHgocGxhbmUsIHgsIHkpXSAgICAg PSBvdXQwOwo+ICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIG91dEJ1ZltnZXRJ ZHgocGxhbmUsIHgsIHkgKyAxKV0gPSBkZDk3X2hpZ2gob3V0XzIsIG91dDAsCj4gdmFsMSwgb3V0 Miwgb3V0NCk7ICAgICApCj4gKyAgICBDKDEsICB9Cj4gICAgICAgICAgICAgICAgICAgICkKPiAr fTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGRkOTdfaG9yaXpbXSA9IHsKPiArICAgIEMoMCwg dm9pZCBpZHd0X2hvcml6KGludCBwbGFuZSwgaW50IHgsIGludCB5KSB7Cj4gICAgICAgICAgICAg ICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHcgPSBwbGFuZV9zaXplc1twbGFuZV0u eDsKPiAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgZHcgPSB3 IC8gMiAtIDE7Cj4gICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwKPiAgICAgICAgICAg ICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgb3V0MCA9IGxlZ2FsbF9sb3df eChwbGFuZSwgeCwgeSk7Cj4gICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwKPiAgICAg ICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgb3V0XzEgPSAoKHgg LSAxKSA+IDApID8gbGVnYWxsX2xvd194KHBsYW5lLCB4IC0KPiAxLCB5KSA6IG91dDA7ICAgICAp Cj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3QgdmFsMyA9IGluQnVmW2dldElkeChwbGFuZSwg eCArIGR3ICsgMSwgeSldOwo+ICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNv bnN0IGludDMyX3Qgb3V0MSA9ICgoeCArIDEpIDw9IGR3KSA/IGxlZ2FsbF9sb3dfeChwbGFuZSwg eAo+ICsgMSwgeSkgOiAgICAgICAgICApCj4gKyAgICBDKDEsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsZWdhbGxfbG93X3gocGxhbmUsCj4gZHcsIHkpOyAgICAg ICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgb3V0MiA9ICgoeCArIDIpIDw9 IGR3KSA/IGxlZ2FsbF9sb3dfeChwbGFuZSwgeAo+ICsgMiwgeSkgOiAgICAgICAgICApCj4gKyAg ICBDKDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWdhbGxf bG93X3gocGxhbmUsCj4gZHcsIHkpOyAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0 IGludDMyX3QgcmVzICA9IGRkOTdfaGlnaChvdXRfMSwgb3V0MCwgdmFsMywgb3V0MSwKPiBvdXQy KTsgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsCj4gICAgICAgICAgICAgICAgICAgKQo+ ICsgICAgQygxLCAgICBvdXRCdWZbZ2V0SWR4KHBsYW5lLCAyICogeCwgeSldICAgICA9IChvdXQw ICsgMSkgPj4gMTsKPiAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIG91dEJ1Zltn ZXRJZHgocGxhbmUsIDIgKiB4ICsgMSwgeSldID0gKHJlcyArIDEpID4+IDE7Cj4gICAgICAgICAg ICAgICAgICAgICkKPiArICAgIEMoMCwgfQo+ICAgICAgICAgICAgICAgICAgICkKPiArfTsKPiAr Cj4gK3N0YXRpYyBpbnQgaW5pdF93YXZlbGV0X3NoZF9kZDk3X3ZlcnQoRGlyYWNWdWxrYW5EZWNv ZGVDb250ZXh0ICpzLAo+IEZGVmtTUElSVkNvbXBpbGVyICpzcHYpCj4gK3sKPiArICAgIGludCBl cnIgPSAwOwo+ICsgICAgdWludDhfdCAqc3B2X2RhdGE7Cj4gKyAgICBzaXplX3Qgc3B2X2xlbjsK PiArICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwo+ICsgICAgaW50IHdhdmVsZXRfaWR4ID0g RFdUX0RJUkFDX0REOV83Owo+ICsgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0 eDsKPiArICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2M7Cj4gKyAgICBGRlZr U1BJUlZTaGFkZXIgKnNoZCA9ICZzLT52ZXJ0X3dhdmVsZXRfc2hkW3dhdmVsZXRfaWR4XTsKPiAr ICAgIEZGVnVsa2FuUGlwZWxpbmUgKnBsID0gJnMtPnZlcnRfd2F2ZWxldF9wbFt3YXZlbGV0X2lk eF07Cj4gKyAgICBGRlZrRXhlY1Bvb2wgKmV4ZWMgPSAmcy0+ZXhlY19wb29sOwo+ICsKPiArICAg IFJFVChmZl92a19zaGFkZXJfaW5pdChwbCwgc2hkLCAiZGQ5N192ZXJ0IiwKPiBWS19TSEFERVJf U1RBR0VfQ09NUFVURV9CSVQsIDApKTsKPiArCj4gKyAgICBzaGQgPSAmcy0+dmVydF93YXZlbGV0 X3NoZFt3YXZlbGV0X2lkeF07Cj4gKyAgICBmZl92a19zaGFkZXJfc2V0X2NvbXB1dGVfc2l6ZXMo c2hkLCA4LCA4LCAzKTsKPiArCj4gKyAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9zY2Fs YXJfYmxvY2tfbGF5b3V0IDogZW5hYmxlKTsKPiArICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xf RVhUX3NoYWRlcl9leHBsaWNpdF9hcml0aG1ldGljX3R5cGVzIDogZW5hYmxlKTsKPiArCj4gKyAg ICBkZXNjID0gKEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmdbXSkKPiArICAgIHsKPiArICAg ICAgICB7Cj4gKyAgICAgICAgICAubmFtZSA9ICJpbl9idWYiLAo+ICsgICAgICAgICAgLnN0YWdl cyA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKPiArICAgICAgICAgIC50eXBlID0gVktf REVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAo+ICsgICAgICAgICAgLmJ1Zl9jb250ZW50 ID0gImludDMyX3QgaW5CdWZbXTsiLAo+ICsgICAgICAgICAgLm1lbV9xdWFsaSA9ICJyZWFkb25s eSIsCj4gKyAgICAgICAgICAuZGltZW5zaW9ucyA9IDEsCj4gKyAgICAgICAgfSwKPiArICAgICAg ICB7Cj4gKyAgICAgICAgICAubmFtZSA9ICJvdXRfYnVmIiwKPiArICAgICAgICAgIC5zdGFnZXMg PSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAudHlwZSA9IFZLX0RF U0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKPiArICAgICAgICAgIC5idWZfY29udGVudCA9 ICJpbnQzMl90IG91dEJ1ZltdOyIsCj4gKyAgICAgICAgICAubWVtX3F1YWxpID0gIndyaXRlb25s eSIsCj4gKyAgICAgICAgICAuZGltZW5zaW9ucyA9IDEsCj4gKyAgICAgICAgfSwKPiArICAgIH07 Cj4gKyAgICBSRVQoZmZfdmtfcGlwZWxpbmVfZGVzY3JpcHRvcl9zZXRfYWRkKHZrY3R4LCBwbCwg c2hkLCBkZXNjLCAyLCAwLCAwKSk7Cj4gKwo+ICsgICAgZmZfdmtfYWRkX3B1c2hfY29uc3RhbnQo cGwsIDAsIHNpemVvZihXYXZlbGV0UHVzaENvbnN0KSwKPiBWS19TSEFERVJfU1RBR0VfQ09NUFVU RV9CSVQpOwo+ICsKPiArICAgIEdMU0xDKDAsIGxheW91dChwdXNoX2NvbnN0YW50LCBzdGQ0MzAp IHVuaWZvcm0gcHVzaENvbnN0YW50cyB7ICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGl2ZWMyIHBs YW5lX3NpemVzWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNM QygxLCAgICAgaW50IHBsYW5lX29mZnNbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQgcGxhbmVfc3RyaWRlc1szXTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGludCBkd1szXTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAg ICAgaW50IHdhdmVsZXRfZGVwdGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK PiArICAgIEdMU0xDKDAsIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKwo+ICsgICAgR0xTTEQoZ2V0X2lk eCk7Cj4gKyAgICBHTFNMRChsZWdhbGxfbG93X3kpOwo+ICsgICAgR0xTTEQoZGQ5N19oaWdoKTsK PiArICAgIEdMU0xEKGRkOTdfdmVydCk7Cj4gKwo+ICsgICAgR0xTTEMoMCwgdm9pZCBtYWluKCkg ewo+ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGludCBvZmZfeSA9IGludChn bF9Xb3JrR3JvdXBTaXplLnkgKgo+IGdsX051bVdvcmtHcm91cHMueSk7ICAgICAgICAgICAgICAg KTsKPiArICAgIEdMU0xDKDEsICAgIGludCBvZmZfeCA9IGludChnbF9Xb3JrR3JvdXBTaXplLngg Kgo+IGdsX051bVdvcmtHcm91cHMueCk7ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEs ICAgIGludCBwaWNfeiA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueik7Cj4gICAgICAgICAg ICAgICAgKTsKPiArICAgIEdMU0xDKDEsCj4gICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMo MSwgICAgdWludCBoID0gaW50KHBsYW5lX3NpemVzW3BpY196XS55KTsKPiAgICAgICAgICAgICAg ICApOwo+ICsgICAgR0xTTEMoMiwgICAgdWludCB3ID0gaW50KHBsYW5lX3NpemVzW3BpY196XS54 KTsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwKPiAgICAgICAgICAgICAgICk7 Cj4gKyAgICBHTFNMQygxLCAgICBpbnQgeSA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueSk7 Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGZvciAoOyAyICogeSA8IGg7 IHkgKz0gb2ZmX3kpIHsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAg IGludCB4ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25JRC54KTsKPiAgICAgICAgICAgICAgICAp Owo+ICsgICAgR0xTTEMoMiwgICAgICAgIGZvciAoOyB4IDwgdzsgeCArPSBvZmZfeCkgewo+ICAg ICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygzLCAgICAgICAgICAgIGlkd3RfdmVydChwaWNf eiwgeCwgMiAqIHkpOwo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAg fQo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICB9Cj4gICAgICAgICAgICAg ICAgKTsKPiArICAgIEdMU0xDKDAsIH0KPiAgICAgICAgICAgICAgICk7Cj4gKwo+ICsgICAgUkVU KHNwdi0+Y29tcGlsZV9zaGFkZXIoc3B2LCB2a2N0eCwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVu LCAibWFpbiIsCj4gJnNwdl9vcGFxdWUpKTsKPiArICAgIFJFVChmZl92a19zaGFkZXJfY3JlYXRl KHZrY3R4LCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKPiArICAgIFJFVChmZl92 a19pbml0X2NvbXB1dGVfcGlwZWxpbmUodmtjdHgsIHBsLCBzaGQpKTsKPiArICAgIFJFVChmZl92 a19leGVjX3BpcGVsaW5lX3JlZ2lzdGVyKHZrY3R4LCBleGVjLCBwbCkpOwo+ICsKPiArZmFpbDoK PiArICAgIGlmIChzcHZfb3BhcXVlKQo+ICsgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAm c3B2X29wYXF1ZSk7Cj4gKwo+ICsgICAgcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBpbml0X3dhdmVsZXRfc2hkX2RkOTdfaG9yaXooRGlyYWNWdWxrYW5EZWNvZGVDb250ZXh0ICpz LAo+IEZGVmtTUElSVkNvbXBpbGVyICpzcHYpCj4gK3sKPiArICAgIGludCBlcnIgPSAwOwo+ICsg ICAgdWludDhfdCAqc3B2X2RhdGE7Cj4gKyAgICBzaXplX3Qgc3B2X2xlbjsKPiArICAgIHZvaWQg KnNwdl9vcGFxdWUgPSBOVUxMOwo+ICsgICAgaW50IHdhdmVsZXRfaWR4ID0gRFdUX0RJUkFDX0RE OV83Owo+ICsgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKPiArICAgIEZG VnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2M7Cj4gKyAgICBGRlZrU1BJUlZTaGFkZXIg KnNoZCA9ICZzLT5ob3Jpel93YXZlbGV0X3NoZFt3YXZlbGV0X2lkeF07Cj4gKyAgICBGRlZ1bGth blBpcGVsaW5lICpwbCA9ICZzLT5ob3Jpel93YXZlbGV0X3BsW3dhdmVsZXRfaWR4XTsKPiArICAg IEZGVmtFeGVjUG9vbCAqZXhlYyA9ICZzLT5leGVjX3Bvb2w7Cj4gKwo+ICsgICAgUkVUKGZmX3Zr X3NoYWRlcl9pbml0KHBsLCBzaGQsICJkZDk3X2hvcml6IiwKPiBWS19TSEFERVJfU1RBR0VfQ09N UFVURV9CSVQsIDApKTsKPiArCj4gKyAgICBzaGQgPSAmcy0+aG9yaXpfd2F2ZWxldF9zaGRbd2F2 ZWxldF9pZHhdOwo+ICsgICAgZmZfdmtfc2hhZGVyX3NldF9jb21wdXRlX3NpemVzKHNoZCwgOCwg OCwgMyk7Cj4gKwo+ICsgICAgR0xTTEMoMCwgI2V4dGVuc2lvbiBHTF9FWFRfZGVidWdfcHJpbnRm IDogZW5hYmxlKTsKPiArICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhUX3NjYWxhcl9ibG9j a19sYXlvdXQgOiBlbmFibGUpOwo+ICsgICAgR0xTTEMoMCwgI2V4dGVuc2lvbiBHTF9FWFRfc2hh ZGVyX2V4cGxpY2l0X2FyaXRobWV0aWNfdHlwZXMgOiBlbmFibGUpOwo+ICsKPiArICAgIGRlc2Mg PSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZ1tdKQo+ICsgICAgewo+ICsgICAgICAgIHsK PiArICAgICAgICAgIC5uYW1lID0gImluX2J1ZiIsCj4gKyAgICAgICAgICAuc3RhZ2VzID0gVktf U0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgLnR5cGUgPSBWS19ERVNDUklQ VE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCj4gKyAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50 MzJfdCBpbkJ1ZltdOyIsCj4gKyAgICAgICAgICAubWVtX3F1YWxpID0gInJlYWRvbmx5IiwKPiAr ICAgICAgICAgIC5kaW1lbnNpb25zID0gMSwKPiArICAgICAgICB9LAo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgIC5uYW1lID0gIm91dF9idWYiLAo+ICsgICAgICAgICAgLnN0YWdlcyA9IFZLX1NI QURFUl9TVEFHRV9DT01QVVRFX0JJVCwKPiArICAgICAgICAgIC50eXBlID0gVktfREVTQ1JJUFRP Ul9UWVBFX1NUT1JBR0VfQlVGRkVSLAo+ICsgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludDMy X3Qgb3V0QnVmW107IiwKPiArICAgICAgICAgIC5tZW1fcXVhbGkgPSAid3JpdGVvbmx5IiwKPiAr ICAgICAgICAgIC5kaW1lbnNpb25zID0gMSwKPiArICAgICAgICB9LAo+ICsgICAgfTsKPiArICAg IFJFVChmZl92a19waXBlbGluZV9kZXNjcmlwdG9yX3NldF9hZGQodmtjdHgsIHBsLCBzaGQsIGRl c2MsIDIsIDAsIDApKTsKPiArCj4gKyAgICBmZl92a19hZGRfcHVzaF9jb25zdGFudChwbCwgMCwg c2l6ZW9mKFdhdmVsZXRQdXNoQ29uc3QpLAo+IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCk7 Cj4gKwo+ICsgICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHN0ZDQzMCkgdW5pZm9y bSBwdXNoQ29uc3RhbnRzIHsgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaXZlYzIgcGxhbmVfc2l6 ZXNbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAg ICBpbnQgcGxhbmVfb2Zmc1szXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMSwgICAgIGludCBwbGFuZV9zdHJpZGVzWzNdOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IGR3WzNdOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQg d2F2ZWxldF9kZXB0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAg R0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Cj4gKyAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArCj4gKyAgICBHTFNMRChnZXRfaWR4KTsKPiAr ICAgIEdMU0xEKGxlZ2FsbF9sb3dfeCk7Cj4gKyAgICBHTFNMRChkZDk3X2hpZ2gpOwo+ICsgICAg R0xTTEQoZGQ5N19ob3Jpeik7Cj4gKwo+ICsgICAgR0xTTEMoMCwgdm9pZCBtYWluKCkgewo+ICAg ICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGludCBvZmZfeSA9IGludChnbF9Xb3Jr R3JvdXBTaXplLnkgKgo+IGdsX051bVdvcmtHcm91cHMueSk7ICAgICAgICAgICAgICAgKTsKPiAr ICAgIEdMU0xDKDEsICAgIGludCBvZmZfeCA9IGludChnbF9Xb3JrR3JvdXBTaXplLnggKgo+IGds X051bVdvcmtHcm91cHMueCk7ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGlu dCBwaWNfeiA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueik7Cj4gICAgICAgICAgICAgICAg KTsKPiArICAgIEdMU0xDKDEsCj4gICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAg dWludCBoID0gaW50KHBsYW5lX3NpemVzW3BpY196XS55KTsKPiAgICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMiwgICAgdWludCB3ID0gaW50KHBsYW5lX3NpemVzW3BpY196XS54KTsKPiAg ICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwKPiAgICAgICAgICAgICAgICk7Cj4gKyAg ICBHTFNMQygxLCAgICBpbnQgeSA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueSk7Cj4gICAg ICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGZvciAoOyB5IDwgaDsgeSArPSBvZmZf eSkgewo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAgaW50IHggPSBp bnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELngpOwo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBH TFNMQygyLCAgICAgICAgZm9yICg7IDIgKiB4IDwgdzsgeCArPSBvZmZfeCkgewo+ICAgICAgICAg ICAgICAgICk7Cj4gKyAgICBHTFNMQygzLCAgICAgICAgICAgIGlkd3RfaG9yaXoocGljX3osIHgs IHkpOwo+ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDIsICAgICAgICB9Cj4gICAgICAg ICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIH0KPiAgICAgICAgICAgICAgICApOwo+ICsg ICAgR0xTTEMoMCwgfQo+ICAgICAgICAgICAgICAgKTsKPiArCj4gKyAgICBSRVQoc3B2LT5jb21w aWxlX3NoYWRlcihzcHYsIHZrY3R4LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwK PiAmc3B2X29wYXF1ZSkpOwo+ICsgICAgUkVUKGZmX3ZrX3NoYWRlcl9jcmVhdGUodmtjdHgsIHNo ZCwgc3B2X2RhdGEsIHNwdl9sZW4sICJtYWluIikpOwo+ICsgICAgUkVUKGZmX3ZrX2luaXRfY29t cHV0ZV9waXBlbGluZSh2a2N0eCwgcGwsIHNoZCkpOwo+ICsgICAgUkVUKGZmX3ZrX2V4ZWNfcGlw ZWxpbmVfcmVnaXN0ZXIodmtjdHgsIGV4ZWMsIHBsKSk7Cj4gKwo+ICtmYWlsOgo+ICsgICAgaWYg KHNwdl9vcGFxdWUpCj4gKyAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYsICZzcHZfb3BhcXVl KTsKPiArCj4gKyAgICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfYWx3YXlzX2lu bGluZSBpbnQgaW5saW5lCj4gd2F2ZWxldF9kZDk3X3Bhc3MoRGlyYWNWdWxrYW5EZWNvZGVDb250 ZXh0ICpkZWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyYWNDb250ZXh0ICpjdHgs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIFZrQnVmZmVyTWVtb3J5QmFycmllcjIgKmJ1Zl9iYXIs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpuYl9idWZfYmFyKSB7Cj4gKyAgICBp bnQgZXJyOwo+ICsgICAgaW50IGJhcnJpZXJfbnVtID0gKm5iX2J1Zl9iYXI7Cj4gKyAgICBpbnQg d2F2ZWxldF9pZHggPSBEV1RfRElSQUNfREQ5Xzc7Cj4gKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAq dmsgPSAmZGVjLT52a2N0eC52a2ZuOwo+ICsKPiArICAgIEZGVnVsa2FuUGlwZWxpbmUgKnBsX2hv ciA9ICZkZWMtPmhvcml6X3dhdmVsZXRfcGxbd2F2ZWxldF9pZHhdOwo+ICsgICAgRkZWdWxrYW5Q aXBlbGluZSAqcGxfdmVydCA9ICZkZWMtPnZlcnRfd2F2ZWxldF9wbFt3YXZlbGV0X2lkeF07Cj4g Kwo+ICsgICAgZXJyID0gZmZfdmtfc2V0X2Rlc2NyaXB0b3JfYnVmZmVyKCZkZWMtPnZrY3R4LCBw bF92ZXJ0LCBleGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs IDAsIDAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT50bXBf YnVmLmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVj LT50bXBfYnVmLnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfRk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICBnb3Rv IGZhaWw7Cj4gKyAgICBlcnIgPSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZmZXIoJmRlYy0+dmtj dHgsIHBsX3ZlcnQsIGV4ZWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgMSwgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMt PnRtcF9pbnRlcmxlYXZlX2J1Zi5hZGRyZXNzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlYy0+dG1wX2ludGVybGVhdmVfYnVmLnNpemUsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBp ZiAoZXJyIDwgMCkKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKwo+ICsgICAgZXJyID0gZmZfdmtf c2V0X2Rlc2NyaXB0b3JfYnVmZmVyKCZkZWMtPnZrY3R4LCBwbF9ob3IsIGV4ZWMsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zi5hZGRyZXNz LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYy0+dG1wX2ludGVy bGVhdmVfYnVmLnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfRk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICBnb3Rv IGZhaWw7Cj4gKyAgICBlcnIgPSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZmZXIoJmRlYy0+dmtj dHgsIHBsX2hvciwgZXhlYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLCAxLCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYy0+ dG1wX2J1Zi5hZGRyZXNzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRlYy0+dG1wX2J1Zi5zaXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpOwo+ICsgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAg Z290byBmYWlsOwo+ICsKPiArCj4gKyAgICBmb3IgKGludCBpID0gY3R4LT53YXZlbGV0X2RlcHRo IC0gMTsgaSA+PSAwOyBpLS0pIHsKPiArICAgICAgICBkZWMtPnBDb25zdC5wbGFuZV9zdHJpZGVz WzBdID0gY3R4LT5wbGFuZVswXS5pZHd0LndpZHRoIDw8IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29u c3QucGxhbmVfc3RyaWRlc1sxXSA9IGN0eC0+cGxhbmVbMV0uaWR3dC53aWR0aCA8PCBpOwo+ICsg ICAgICAgIGRlYy0+cENvbnN0LnBsYW5lX3N0cmlkZXNbMl0gPSBjdHgtPnBsYW5lWzJdLmlkd3Qu d2lkdGggPDwgaTsKPiArCj4gKyAgICAgICAgZGVjLT5wQ29uc3QuZHdbMF0gPSBjdHgtPnBsYW5l WzBdLmlkd3Qud2lkdGggPj4gKGkgKyAxKTsKPiArICAgICAgICBkZWMtPnBDb25zdC5kd1sxXSA9 IGN0eC0+cGxhbmVbMV0uaWR3dC53aWR0aCA+PiAoaSArIDEpOwo+ICsgICAgICAgIGRlYy0+cENv bnN0LmR3WzJdID0gY3R4LT5wbGFuZVsyXS5pZHd0LndpZHRoID4+IChpICsgMSk7Cj4gKwo+ICsg ICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1swXSA9IChjdHgtPnBsYW5lWzBdLmlk d3Qud2lkdGgpICA+PiBpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1sx XSA9IChjdHgtPnBsYW5lWzBdLmlkd3QuaGVpZ2h0KSA+PiBpOwo+ICsgICAgICAgIGRlYy0+cENv bnN0LnJlYWxfcGxhbmVfZGltc1syXSA9IChjdHgtPnBsYW5lWzFdLmlkd3Qud2lkdGgpICA+PiBp Owo+ICsgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1szXSA9IChjdHgtPnBsYW5l WzFdLmlkd3QuaGVpZ2h0KSA+PiBpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVf ZGltc1s0XSA9IChjdHgtPnBsYW5lWzJdLmlkd3Qud2lkdGgpICA+PiBpOwo+ICsgICAgICAgIGRl Yy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1s1XSA9IChjdHgtPnBsYW5lWzJdLmlkd3QuaGVpZ2h0 KSA+PiBpOwo+ICsKPiArICAgICAgICAvKiBWZXJ0aWNhbCB3YXZlbGV0IHBhc3MgKi8KPiArICAg ICAgICBmZl92a191cGRhdGVfcHVzaF9leGVjKCZkZWMtPnZrY3R4LCBleGVjLCBwbF92ZXJ0LAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVf QklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKFdhdmVsZXRQ dXNoQ29uc3QpLCAmZGVjLT5wQ29uc3QpOwo+ICsKPiArICAgICAgICBiYXJyaWVyX251bSA9ICpu Yl9idWZfYmFyOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMt PnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl93cml0ZShidWZfYmFyLCBuYl9idWZfYmFyLCAmZGVj LT50bXBfYnVmKTsKPiArICAgICAgICBiYXJfcmVhZChidWZfYmFyLCBuYl9idWZfYmFyLCAmZGVj LT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsgICAgICAgIGJhcl93cml0ZShidWZfYmFyLCBuYl9i dWZfYmFyLCAmZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsKPiArICAgICAgICB2ay0+Q21k UGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewo+ICsgICAg ICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAo+ ICsgICAgICAgICAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9IGJ1Zl9iYXIgKyBiYXJy aWVyX251bSwKPiArICAgICAgICAgICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVyQ291bnQgPSAq bmJfYnVmX2JhciAtIGJhcnJpZXJfbnVtLAo+ICsgICAgICAgIH0pOwo+ICsKPiArICAgICAgICBm Zl92a19leGVjX2JpbmRfcGlwZWxpbmUoJmRlYy0+dmtjdHgsIGV4ZWMsIHBsX3ZlcnQpOwo+ICsg ICAgICAgIHZrLT5DbWREaXNwYXRjaChleGVjLT5idWYsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1swXSA+PiAzLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICBkZWMtPnBDb25zdC5yZWFsX3BsYW5lX2RpbXNbMV0gPj4gNCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgMSk7Cj4gKwo+ICsgICAgICAgIC8qIEhvcml6b250YWwgd2F2ZWxl dCBwYXNzICovCj4gKyAgICAgICAgZmZfdmtfdXBkYXRlX3B1c2hfZXhlYygmZGVjLT52a2N0eCwg ZXhlYywgcGxfaG9yLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NU QUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9m KFdhdmVsZXRQdXNoQ29uc3QpLCAmZGVjLT5wQ29uc3QpOwo+ICsKPiArICAgICAgICBiYXJyaWVy X251bSA9ICpuYl9idWZfYmFyOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1Zl9i YXIsICZkZWMtPnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl93cml0ZShidWZfYmFyLCBuYl9idWZf YmFyLCAmZGVjLT50bXBfYnVmKTsKPiArICAgICAgICBiYXJfcmVhZChidWZfYmFyLCBuYl9idWZf YmFyLCAmZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsgICAgICAgIGJhcl93cml0ZShidWZf YmFyLCBuYl9idWZfYmFyLCAmZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsKPiArICAgICAg ICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykg ewo+ICsgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5D WV9JTkZPLAo+ICsgICAgICAgICAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9IGJ1Zl9i YXIgKyBiYXJyaWVyX251bSwKPiArICAgICAgICAgICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVy Q291bnQgPSAqbmJfYnVmX2JhciAtIGJhcnJpZXJfbnVtLAo+ICsgICAgICAgIH0pOwo+ICsKPiAr ICAgICAgICBmZl92a19leGVjX2JpbmRfcGlwZWxpbmUoJmRlYy0+dmtjdHgsIGV4ZWMsIHBsX2hv cik7Cj4gKyAgICAgICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzBdID4+IDQsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1sxXSA+PiAzLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAxKTsKPiArCj4gKyAgICAgICAgYmFycmllcl9udW0g PSAqbmJfYnVmX2JhcjsKPiArICAgICAgICBiYXJfcmVhZChidWZfYmFyLCBuYl9idWZfYmFyLCAm ZGVjLT50bXBfYnVmKTsKPiArICAgICAgICBiYXJfd3JpdGUoYnVmX2JhciwgbmJfYnVmX2Jhciwg JmRlYy0+dG1wX2J1Zik7Cj4gKyAgICAgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVmX2Jhciwg JmRlYy0+dG1wX2ludGVybGVhdmVfYnVmKTsKPiArICAgICAgICBiYXJfd3JpdGUoYnVmX2Jhciwg bmJfYnVmX2JhciwgJmRlYy0+dG1wX2ludGVybGVhdmVfYnVmKTsKPiArCj4gKyAgICAgICAgdmst PkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5jeUluZm8pIHsKPiAr ICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5G TywKPiArICAgICAgICAgICAgICAgIC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSBidWZfYmFyICsg YmFycmllcl9udW0sCj4gKyAgICAgICAgICAgICAgICAuYnVmZmVyTWVtb3J5QmFycmllckNvdW50 ID0gKm5iX2J1Zl9iYXIgLSBiYXJyaWVyX251bSwKPiArICAgICAgICB9KTsKPiArICAgIH0KPiAr Cj4gKyAgICByZXR1cm4gMDsKPiArZmFpbDoKPiArICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBz KCZkZWMtPnZrY3R4LCBleGVjKTsKPiArICAgIHJldHVybiBlcnI7Cj4gK30KPiArCj4gKy8qIC0t LS0tIERlc2xhdXJpZXJzLUR1YnVjKDEzLCA3KSBpbml0IGFuZCBwaXBlbGluZSBwYXNzIC0tLS0t ICovCj4gK3N0YXRpYyBjb25zdCBjaGFyIGRkMTM3X2xvd1tdID0gewo+ICsgICAgQygwLCBpbnQz Ml90IGRkMTM3X2xvdyhpbnQzMl90IHYwLCBpbnQzMl90IHYxLCBpbnQzMl90IHYyLCBpbnQzMl90 Cj4gdjMsIGludDMyX3QgdjQpIHsgICAgKQo+ICsgICAgQygwLCAgICByZXR1cm4gdjIgLSAoKDkg KiB2MSArIDkgKiB2MyAtIHY0IC0gdjAgKyAxNikgPj4gNSk7Cj4gICAgICAgICAgICAgICAgICAg KQo+ICsgICAgQygwLCB9Cj4gICAgICAgICAgICAgICAgICAgKQo+ICt9Owo+ICsKPiArc3RhdGlj IGNvbnN0IGNoYXIgZGQxMzdfbG93X3lbXSA9IHsKPiArICAgIEMoMCwgaW50MzJfdCBkZDEzN19s b3dfeShpbnQgcGxhbmUsIGludCB4LCBpbnQgeSkgewo+ICAgICkKPiArICAgIEMoMSwgICAgY29u c3QgaW50IGggPSBwbGFuZV9zaXplc1twbGFuZV0ueTsKPiAgICApCj4gKyAgICBDKDEsCj4gICAp Cj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB5MCA9ICh4ID4gMykgPyAoeSAtIDMpIDogMTsKPiAg ICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3QgdjAgPSBpbkJ1ZltnZXRJZHgocGxhbmUs IHgsIHkwKV07Cj4gICAgKQo+ICsgICAgQygxLAo+ICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBp bnQgeTEgPSAoeSA+IDEpID8gKHkgLSAxKSA6IDE7Cj4gICAgKQo+ICsgICAgQygxLCAgICBjb25z dCBpbnQzMl90IHYxID0gaW5CdWZbZ2V0SWR4KHBsYW5lLCB4LCB5MSldOwo+ICAgICkKPiArICAg IEMoMSwKPiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHkyID0geTsKPiAgICApCj4gKyAg ICBDKDEsICAgIGNvbnN0IGludDMyX3QgdjIgPSBpbkJ1ZltnZXRJZHgocGxhbmUsIHgsIHkyKV07 Cj4gICAgKQo+ICsgICAgQygxLAo+ICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgeTMgPSB5 ICsgMTsKPiAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3QgdjMgPSBpbkJ1ZltnZXRJ ZHgocGxhbmUsIHgsIHkzKV07Cj4gICAgKQo+ICsgICAgQygxLAo+ICAgKQo+ICsgICAgQygxLCAg ICBjb25zdCBpbnQgeTQgPSAoeSArIDMgPCBoKSA/ICh5ICsgMykgOiAoaCAtIDEpOwo+ICAgICkK PiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2NCA9IGluQnVmW2dldElkeChwbGFuZSwgeCwg eTQpXTsKPiAgICApCj4gKyAgICBDKDEsCj4gICApCj4gKyAgICBDKDEsICAgIHJldHVybiBkZDEz N19sb3codjAsIHYxLCB2MiwgdjMsIHY0KTsKPiAgICApCj4gKyAgICBDKDAsIH0KPiAgICkKPiAr fTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGRkMTM3X3ZlcnRbXSA9IHsKPiArICAgIEMoMCwg dm9pZCBpZHd0X3ZlcnQoaW50IHBsYW5lLCBpbnQgeCwgaW50IHkpIHsKPiAgICAgICAgICAgICAg ICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCBoID0gcGxhbmVfc2l6ZXNbcGxhbmVdLnk7 Cj4gICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwKPiAgICAgICAgICAgICAgICAgICAp Cj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgb3V0MCA9IGRkMTM3X2xvd195KHBsYW5lLCB4 LCB5KTsKPiAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qg b3V0XzIgPSAoeSAtIDIgPiAwKSA/IGRkMTM3X2xvd195KHBsYW5lLCB4LCB5IC0KPiAyKSA6ICAg ICAgICAgICAgICApCj4gKyAgICBDKDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRkMTM3X2xvd195KHBsYW5lLCB4LAo+IDApOyAgICAgICAgICAgICAgICAgICApCj4g KyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgb3V0MiA9ICh5ICsgMiA8IGgpID8gZGQxMzdfbG93 X3kocGxhbmUsIHgsIHkgKwo+IDIpIDogICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkMTM3X2xvd195KHBsYW5lLCB4LCBo IC0KPiAyKTsgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludDMyX3Qgb3V0 NCA9ICh5ICsgNCA8IGgpID8gZGQxMzdfbG93X3kocGxhbmUsIHgsIHkgKwo+IDQpIDogICAgICAg ICAgICAgICApCj4gKyAgICBDKDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRkMTM3X2xvd195KHBsYW5lLCB4LCBoIC0KPiAyKTsgICAgICAgICAgICAgICApCj4gKyAg ICBDKDEsICAgIGNvbnN0IGludDMyX3QgdmFsMSA9IGluQnVmW2dldElkeChwbGFuZSwgeCwgeSAr IDEpXTsKPiAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsCj4gICAgICAgICAgICAgICAg ICAgKQo+ICsgICAgQygxLCAgICBvdXRCdWZbZ2V0SWR4KHBsYW5lLCB4LCB5KV0gICAgID0gb3V0 MDsKPiAgICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBvdXRCdWZbZ2V0SWR4KHBs YW5lLCB4LCB5ICsgMSldID0gZGQ5N19oaWdoKG91dF8yLCBvdXQwLAo+IHZhbDEsIG91dDIsIG91 dDQpOyAgICAgKQo+ICsgICAgQygxLCAgfQo+ICAgICAgICAgICAgICAgICAgICApCj4gK307Cj4g Kwo+ICtzdGF0aWMgY29uc3QgY2hhciBkZDEzN19sb3dfeFtdID0gewo+ICsgICAgQygwLCBpbnQz Ml90IGRkMTM3X2xvd194KGludCBwbGFuZSwgaW50IHgsIGludCB5KSB7Cj4gICAgKQo+ICsgICAg QygxLCAgICBjb25zdCBpbnQgdyA9IHBsYW5lX3NpemVzW3BsYW5lXS54Owo+ICAgICkKPiArICAg IEMoMSwgICAgY29uc3QgaW50IGR3ID0gdyAvIDI7Cj4gICAgKQo+ICsgICAgQygxLAo+ICAgKQo+ ICsgICAgQygxLCAgICBjb25zdCBpbnQgeDAgPSAoeCA+IDEpID8geCA6IGR3Owo+ICAgKQo+ICsg ICAgQygxLCAgICBjb25zdCBpbnQzMl90IHYwID0gaW5CdWZbZ2V0SWR4KHBsYW5lLCB4MCwgeSld Owo+ICAgICkKPiArICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHgxID0g KHggPiAxKSA/ICh4ICsgZHcgLSAyKSA6IGR3Owo+ICAgICkKPiArICAgIEMoMSwgICAgY29uc3Qg aW50MzJfdCB2MSA9IGluQnVmW2dldElkeChwbGFuZSwgeDEsIHkpXTsKPiAgICApCj4gKyAgICBD KDEsCj4gICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB4MiA9IHg7Cj4gICAgKQo+ICsgICAg QygxLCAgICBjb25zdCBpbnQzMl90IHYyID0gaW5CdWZbZ2V0SWR4KHBsYW5lLCB4MiwgeSldOwo+ ICAgICkKPiArICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHgzID0geCAr IGR3Owo+ICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90IHYzID0gaW5CdWZbZ2V0SWR4 KHBsYW5lLCB4MywgeSldOwo+ICAgICkKPiArICAgIEMoMSwKPiAgICkKPiArICAgIEMoMSwgICAg Y29uc3QgaW50IHg0ID0gKHggIT0gZHcgLSAxKSA/ICh4ICsgZHcgKyAxKSA6IChkdyAtIDEpOwo+ ICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2NCA9IGluQnVmW2dldElkeChwbGFu ZSwgeDQsIHkpXTsKPiAgICApCj4gKyAgICBDKDEsCj4gICApCj4gKyAgICBDKDEsICAgIHJldHVy biBkZDEzN19sb3codjAsIHYxLCB2MiwgdjMsIHY0KTsKPiAgICApCj4gKyAgICBDKDAsIH0KPiAg ICkKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGRkMTM3X2hvcml6W10gPSB7Cj4gKyAg ICBDKDAsIHZvaWQgaWR3dF9ob3JpeihpbnQgcGxhbmUsIGludCB4LCBpbnQgeSkgewo+ICAgICAg ICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIGNvbnN0IGludCB3ID0gcGxhbmVfc2l6ZXNb cGxhbmVdLng7Cj4gICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50 IGR3ID0gdyAvIDIgLSAxOwo+ICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsCj4gICAg ICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQzMl90IG91dDAgPSBkZDEz N19sb3dfeChwbGFuZSwgeCwgeSk7Cj4gICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLAo+ ICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCBvdXRfMSA9 ICgoeCAtIDEpID4gMCkgPyBkZDEzN19sb3dfeChwbGFuZSwgeCAtCj4gMSwgeSkgOiBvdXQwOyAg ICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCB2YWwzID0gaW5CdWZbZ2V0SWR4KHBs YW5lLCB4ICsgZHcgKyAxLCB5KV07Cj4gICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwg ICAgY29uc3QgaW50MzJfdCBvdXQxID0gKCh4ICsgMSkgPD0gZHcpID8gZGQxMzdfbG93X3gocGxh bmUsIHggKwo+IDEsIHkpIDogICAgICAgICAgICkKPiArICAgIEMoMSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkMTM3X2xvd194KHBsYW5lLAo+IGR3LCB5KTsg ICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50MzJfdCBvdXQyID0gKCh4ICsg MikgPD0gZHcpID8gZGQxMzdfbG93X3gocGxhbmUsIHggKwo+IDIsIHkpIDogICAgICAgICAgICkK PiArICAgIEMoMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRk MTM3X2xvd194KHBsYW5lLAo+IGR3LCB5KTsgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAg Y29uc3QgaW50MzJfdCByZXMgID0gZGQ5N19oaWdoKG91dF8xLCBvdXQwLCB2YWwzLCBvdXQxLAo+ IG91dDIpOyAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwKPiAgICAgICAgICAgICAgICAg ICApCj4gKyAgICBDKDEsICAgIG91dEJ1ZltnZXRJZHgocGxhbmUsIDIgKiB4LCB5KV0gICAgID0g KG91dDAgKyAxKSA+PiAxOwo+ICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgb3V0 QnVmW2dldElkeChwbGFuZSwgMiAqIHggKyAxLCB5KV0gPSAocmVzICsgMSkgPj4gMTsKPiAgICAg ICAgICAgICAgICAgICAgKQo+ICsgICAgQygwLCB9Cj4gICAgICAgICAgICAgICAgICAgKQo+ICt9 Owo+ICsKPiArc3RhdGljIGludCBpbml0X3dhdmVsZXRfc2hkX2RkMTM3X3ZlcnQoRGlyYWNWdWxr YW5EZWNvZGVDb250ZXh0ICpzLAo+IEZGVmtTUElSVkNvbXBpbGVyICpzcHYpCj4gK3sKPiArICAg IGludCBlcnIgPSAwOwo+ICsgICAgdWludDhfdCAqc3B2X2RhdGE7Cj4gKyAgICBzaXplX3Qgc3B2 X2xlbjsKPiArICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwo+ICsgICAgaW50IHdhdmVsZXRf aWR4ID0gRFdUX0RJUkFDX0REMTNfNzsKPiArICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAm cy0+dmtjdHg7Cj4gKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjOwo+ICsg ICAgRkZWa1NQSVJWU2hhZGVyICpzaGQgPSAmcy0+dmVydF93YXZlbGV0X3NoZFt3YXZlbGV0X2lk eF07Cj4gKyAgICBGRlZ1bGthblBpcGVsaW5lICpwbCA9ICZzLT52ZXJ0X3dhdmVsZXRfcGxbd2F2 ZWxldF9pZHhdOwo+ICsgICAgRkZWa0V4ZWNQb29sICpleGVjID0gJnMtPmV4ZWNfcG9vbDsKPiAr Cj4gKyAgICBSRVQoZmZfdmtfc2hhZGVyX2luaXQocGwsIHNoZCwgImRkMTM3X3ZlcnQiLAo+IFZL X1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwgMCkpOwo+ICsKPiArICAgIHNoZCA9ICZzLT52ZXJ0 X3dhdmVsZXRfc2hkW3dhdmVsZXRfaWR4XTsKPiArICAgIGZmX3ZrX3NoYWRlcl9zZXRfY29tcHV0 ZV9zaXplcyhzaGQsIDgsIDgsIDMpOwo+ICsKPiArICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xf RVhUX3NjYWxhcl9ibG9ja19sYXlvdXQgOiBlbmFibGUpOwo+ICsgICAgR0xTTEMoMCwgI2V4dGVu c2lvbiBHTF9FWFRfc2hhZGVyX2V4cGxpY2l0X2FyaXRobWV0aWNfdHlwZXMgOiBlbmFibGUpOwo+ ICsKPiArICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZ1tdKQo+ICsgICAg ewo+ICsgICAgICAgIHsKPiArICAgICAgICAgIC5uYW1lID0gImluX2J1ZiIsCj4gKyAgICAgICAg ICAuc3RhZ2VzID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgLnR5 cGUgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCj4gKyAgICAgICAgICAuYnVm X2NvbnRlbnQgPSAiaW50MzJfdCBpbkJ1ZltdOyIsCj4gKyAgICAgICAgICAubWVtX3F1YWxpID0g InJlYWRvbmx5IiwKPiArICAgICAgICAgIC5kaW1lbnNpb25zID0gMSwKPiArICAgICAgICB9LAo+ ICsgICAgICAgIHsKPiArICAgICAgICAgIC5uYW1lID0gIm91dF9idWYiLAo+ICsgICAgICAgICAg LnN0YWdlcyA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKPiArICAgICAgICAgIC50eXBl ID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAo+ICsgICAgICAgICAgLmJ1Zl9j b250ZW50ID0gImludDMyX3Qgb3V0QnVmW107IiwKPiArICAgICAgICAgIC5tZW1fcXVhbGkgPSAi d3JpdGVvbmx5IiwKPiArICAgICAgICAgIC5kaW1lbnNpb25zID0gMSwKPiArICAgICAgICB9LAo+ ICsgICAgfTsKPiArICAgIFJFVChmZl92a19waXBlbGluZV9kZXNjcmlwdG9yX3NldF9hZGQodmtj dHgsIHBsLCBzaGQsIGRlc2MsIDIsIDAsIDApKTsKPiArCj4gKyAgICBmZl92a19hZGRfcHVzaF9j b25zdGFudChwbCwgMCwgc2l6ZW9mKFdhdmVsZXRQdXNoQ29uc3QpLAo+IFZLX1NIQURFUl9TVEFH RV9DT01QVVRFX0JJVCk7Cj4gKwo+ICsgICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQs IHN0ZDQzMCkgdW5pZm9ybSBwdXNoQ29uc3RhbnRzIHsgICk7Cj4gKyAgICBHTFNMQygxLCAgICAg aXZlYzIgcGxhbmVfc2l6ZXNbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiAr ICAgIEdMU0xDKDEsICAgICBpbnQgcGxhbmVfb2Zmc1szXTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGludCBwbGFuZV9zdHJpZGVzWzNdOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IGR3 WzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdM U0xDKDEsICAgICBpbnQgd2F2ZWxldF9kZXB0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwo+ICsgICAgR0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArCj4gKyAgICBHTFNM RChnZXRfaWR4KTsKPiArICAgIEdMU0xEKGRkOTdfaGlnaCk7Cj4gKyAgICBHTFNMRChkZDEzN19s b3cpOwo+ICsgICAgR0xTTEQoZGQxMzdfbG93X3kpOwo+ICsgICAgR0xTTEQoZGQxMzdfdmVydCk7 Cj4gKwo+ICsgICAgR0xTTEMoMCwgdm9pZCBtYWluKCkgewo+ICAgICAgICAgICAgICAgKTsKPiAr ICAgIEdMU0xDKDEsICAgIGludCBvZmZfeSA9IGludChnbF9Xb3JrR3JvdXBTaXplLnkgKgo+IGds X051bVdvcmtHcm91cHMueSk7ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGlu dCBvZmZfeCA9IGludChnbF9Xb3JrR3JvdXBTaXplLnggKgo+IGdsX051bVdvcmtHcm91cHMueCk7 ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGludCBwaWNfeiA9IGludChnbF9H bG9iYWxJbnZvY2F0aW9uSUQueik7Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEs Cj4gICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgdWludCBoID0gaW50KHBsYW5l X3NpemVzW3BpY196XS55KTsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAg dWludCB3ID0gaW50KHBsYW5lX3NpemVzW3BpY196XS54KTsKPiAgICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMSwKPiAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICBpbnQg eSA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueSk7Cj4gICAgICAgICAgICAgICAgKTsKPiAr ICAgIEdMU0xDKDEsICAgIGZvciAoOyAyICogeSA8IGg7IHkgKz0gb2ZmX3kpIHsKPiAgICAgICAg ICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAgIGludCB4ID0gaW50KGdsX0dsb2JhbElu dm9jYXRpb25JRC54KTsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAg IGZvciAoOyB4IDwgdzsgeCArPSBvZmZfeCkgewo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBH TFNMQygzLCAgICAgICAgICAgIGlkd3RfdmVydChwaWNfeiwgeCwgMiAqIHkpOwo+ICAgICAgICAg ICAgICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAgfQo+ICAgICAgICAgICAgICAgICk7Cj4g KyAgICBHTFNMQygxLCAgICB9Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAsIH0K PiAgICAgICAgICAgICAgICk7Cj4gKwo+ICsgICAgUkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIoc3B2 LCB2a2N0eCwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCj4gJnNwdl9vcGFxdWUp KTsKPiArICAgIFJFVChmZl92a19zaGFkZXJfY3JlYXRlKHZrY3R4LCBzaGQsIHNwdl9kYXRhLCBz cHZfbGVuLCAibWFpbiIpKTsKPiArICAgIFJFVChmZl92a19pbml0X2NvbXB1dGVfcGlwZWxpbmUo dmtjdHgsIHBsLCBzaGQpKTsKPiArICAgIFJFVChmZl92a19leGVjX3BpcGVsaW5lX3JlZ2lzdGVy KHZrY3R4LCBleGVjLCBwbCkpOwo+ICsKPiArZmFpbDoKPiArICAgIGlmIChzcHZfb3BhcXVlKQo+ ICsgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7Cj4gKwo+ICsgICAg cmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCBpbml0X3dhdmVsZXRfc2hkX2RkMTM3 X2hvcml6KERpcmFjVnVsa2FuRGVjb2RlQ29udGV4dCAqcywKPiBGRlZrU1BJUlZDb21waWxlciAq c3B2KQo+ICt7Cj4gKyAgICBpbnQgZXJyID0gMDsKPiArICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwo+ ICsgICAgc2l6ZV90IHNwdl9sZW47Cj4gKyAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKPiAr ICAgIGludCB3YXZlbGV0X2lkeCA9IERXVF9ESVJBQ19ERDEzXzc7Cj4gKyAgICBGRlZ1bGthbkNv bnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4Owo+ICsgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0Qmlu ZGluZyAqZGVzYzsKPiArICAgIEZGVmtTUElSVlNoYWRlciAqc2hkID0gJnMtPmhvcml6X3dhdmVs ZXRfc2hkW3dhdmVsZXRfaWR4XTsKPiArICAgIEZGVnVsa2FuUGlwZWxpbmUgKnBsID0gJnMtPmhv cml6X3dhdmVsZXRfcGxbd2F2ZWxldF9pZHhdOwo+ICsgICAgRkZWa0V4ZWNQb29sICpleGVjID0g JnMtPmV4ZWNfcG9vbDsKPiArCj4gKyAgICBSRVQoZmZfdmtfc2hhZGVyX2luaXQocGwsIHNoZCwg ImRkMTM3X2hvcml6IiwKPiBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsIDApKTsKPiArCj4g KyAgICBzaGQgPSAmcy0+aG9yaXpfd2F2ZWxldF9zaGRbd2F2ZWxldF9pZHhdOwo+ICsgICAgZmZf dmtfc2hhZGVyX3NldF9jb21wdXRlX3NpemVzKHNoZCwgOCwgOCwgMyk7Cj4gKwo+ICsgICAgR0xT TEMoMCwgI2V4dGVuc2lvbiBHTF9FWFRfZGVidWdfcHJpbnRmIDogZW5hYmxlKTsKPiArICAgIEdM U0xDKDAsICNleHRlbnNpb24gR0xfRVhUX3NjYWxhcl9ibG9ja19sYXlvdXQgOiBlbmFibGUpOwo+ ICsgICAgR0xTTEMoMCwgI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX2V4cGxpY2l0X2FyaXRobWV0 aWNfdHlwZXMgOiBlbmFibGUpOwo+ICsKPiArICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNjcmlwdG9y U2V0QmluZGluZ1tdKQo+ICsgICAgewo+ICsgICAgICAgIHsKPiArICAgICAgICAgIC5uYW1lID0g ImluX2J1ZiIsCj4gKyAgICAgICAgICAuc3RhZ2VzID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVf QklULAo+ICsgICAgICAgICAgLnR5cGUgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZG RVIsCj4gKyAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MzJfdCBpbkJ1ZltdOyIsCj4gKyAg ICAgICAgICAubWVtX3F1YWxpID0gInJlYWRvbmx5IiwKPiArICAgICAgICAgIC5kaW1lbnNpb25z ID0gMSwKPiArICAgICAgICB9LAo+ICsgICAgICAgIHsKPiArICAgICAgICAgIC5uYW1lID0gIm91 dF9idWYiLAo+ICsgICAgICAgICAgLnN0YWdlcyA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJ VCwKPiArICAgICAgICAgIC50eXBlID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVS LAo+ICsgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludDMyX3Qgb3V0QnVmW107IiwKPiArICAg ICAgICAgIC5tZW1fcXVhbGkgPSAid3JpdGVvbmx5IiwKPiArICAgICAgICAgIC5kaW1lbnNpb25z ID0gMSwKPiArICAgICAgICB9LAo+ICsgICAgfTsKPiArICAgIFJFVChmZl92a19waXBlbGluZV9k ZXNjcmlwdG9yX3NldF9hZGQodmtjdHgsIHBsLCBzaGQsIGRlc2MsIDIsIDAsIDApKTsKPiArCj4g KyAgICBmZl92a19hZGRfcHVzaF9jb25zdGFudChwbCwgMCwgc2l6ZW9mKFdhdmVsZXRQdXNoQ29u c3QpLAo+IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCk7Cj4gKwo+ICsgICAgR0xTTEMoMCwg bGF5b3V0KHB1c2hfY29uc3RhbnQsIHN0ZDQzMCkgdW5pZm9ybSBwdXNoQ29uc3RhbnRzIHsgICk7 Cj4gKyAgICBHTFNMQygxLCAgICAgaXZlYzIgcGxhbmVfc2l6ZXNbM107ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQgcGxhbmVfb2Zmc1szXTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGlu dCBwbGFuZV9zdHJpZGVzWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAg ICBHTFNMQygxLCAgICAgaW50IGR3WzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQgd2F2ZWxldF9kZXB0aDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMCwgfTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNM QygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKPiArCj4gKyAgICBHTFNMRChnZXRfaWR4KTsKPiArICAgIEdMU0xEKGRkOTdfaGlnaCk7 Cj4gKyAgICBHTFNMRChkZDEzN19sb3cpOwo+ICsgICAgR0xTTEQoZGQxMzdfbG93X3gpOwo+ICsg ICAgR0xTTEQoZGQxMzdfaG9yaXopOwo+ICsKPiArICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpIHsK PiAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICBpbnQgb2ZmX3kgPSBpbnQoZ2xf V29ya0dyb3VwU2l6ZS55ICoKPiBnbF9OdW1Xb3JrR3JvdXBzLnkpOyAgICAgICAgICAgICAgICk7 Cj4gKyAgICBHTFNMQygxLCAgICBpbnQgb2ZmX3ggPSBpbnQoZ2xfV29ya0dyb3VwU2l6ZS54ICoK PiBnbF9OdW1Xb3JrR3JvdXBzLngpOyAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAg ICBpbnQgcGljX3ogPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELnopOwo+ICAgICAgICAgICAg ICAgICk7Cj4gKyAgICBHTFNMQygxLAo+ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEs ICAgIHVpbnQgaCA9IGludChwbGFuZV9zaXplc1twaWNfel0ueSk7Cj4gICAgICAgICAgICAgICAg KTsKPiArICAgIEdMU0xDKDIsICAgIHVpbnQgdyA9IGludChwbGFuZV9zaXplc1twaWNfel0ueCk7 Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsCj4gICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMSwgICAgaW50IHkgPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELnkpOwo+ ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICBmb3IgKDsgeSA8IGg7IHkgKz0g b2ZmX3kpIHsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAgIGludCB4 ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25JRC54KTsKPiAgICAgICAgICAgICAgICApOwo+ICsg ICAgR0xTTEMoMiwgICAgICAgIGZvciAoOyAyICogeCA8IHc7IHggKz0gb2ZmX3gpIHsKPiAgICAg ICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMywgICAgICAgICAgICBpZHd0X2hvcml6KHBpY196 LCB4LCB5KTsKPiAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAgfQo+ICAg ICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICB9Cj4gICAgICAgICAgICAgICAgKTsK PiArICAgIEdMU0xDKDAsIH0KPiAgICAgICAgICAgICAgICk7Cj4gKwo+ICsgICAgUkVUKHNwdi0+ Y29tcGlsZV9zaGFkZXIoc3B2LCB2a2N0eCwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFp biIsCj4gJnNwdl9vcGFxdWUpKTsKPiArICAgIFJFVChmZl92a19zaGFkZXJfY3JlYXRlKHZrY3R4 LCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKPiArICAgIFJFVChmZl92a19pbml0 X2NvbXB1dGVfcGlwZWxpbmUodmtjdHgsIHBsLCBzaGQpKTsKPiArICAgIFJFVChmZl92a19leGVj X3BpcGVsaW5lX3JlZ2lzdGVyKHZrY3R4LCBleGVjLCBwbCkpOwo+ICsKPiArZmFpbDoKPiArICAg IGlmIChzcHZfb3BhcXVlKQo+ICsgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29w YXF1ZSk7Cj4gKwo+ICsgICAgcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGF2X2Fsd2F5 c19pbmxpbmUgaW50IGlubGluZQo+IHdhdmVsZXRfZGQxMzdfcGFzcyhEaXJhY1Z1bGthbkRlY29k ZUNvbnRleHQgKmRlYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJhY0NvbnRleHQg KmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrRXhlY0NvbnRleHQgKmV4ZWMs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgVmtCdWZmZXJNZW1vcnlCYXJyaWVyMiAqYnVm X2JhciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5iX2J1Zl9iYXIpIHsKPiAr ICAgIGludCBlcnI7Cj4gKyAgICBpbnQgYmFycmllcl9udW0gPSAqbmJfYnVmX2JhcjsKPiArICAg IGludCB3YXZlbGV0X2lkeCA9IERXVF9ESVJBQ19ERDEzXzc7Cj4gKyAgICBGRlZ1bGthbkZ1bmN0 aW9ucyAqdmsgPSAmZGVjLT52a2N0eC52a2ZuOwo+ICsKPiArICAgIEZGVnVsa2FuUGlwZWxpbmUg KnBsX2hvciA9ICZkZWMtPmhvcml6X3dhdmVsZXRfcGxbd2F2ZWxldF9pZHhdOwo+ICsgICAgRkZW dWxrYW5QaXBlbGluZSAqcGxfdmVydCA9ICZkZWMtPnZlcnRfd2F2ZWxldF9wbFt3YXZlbGV0X2lk eF07Cj4gKwo+ICsgICAgZXJyID0gZmZfdmtfc2V0X2Rlc2NyaXB0b3JfYnVmZmVyKCZkZWMtPnZr Y3R4LCBwbF92ZXJ0LCBleGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDAsIDAsIDAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVj LT50bXBfYnVmLmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVjLT50bXBfYnVmLnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAg ICBnb3RvIGZhaWw7Cj4gKyAgICBlcnIgPSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZmZXIoJmRl Yy0+dmtjdHgsIHBsX3ZlcnQsIGV4ZWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMCwgMSwgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zi5hZGRyZXNzLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRlYy0+dG1wX2ludGVybGVhdmVfYnVmLnNpemUsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Cj4g KyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKwo+ICsgICAgZXJyID0g ZmZfdmtfc2V0X2Rlc2NyaXB0b3JfYnVmZmVyKCZkZWMtPnZrY3R4LCBwbF9ob3IsIGV4ZWMsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zi5h ZGRyZXNzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYy0+dG1w X2ludGVybGVhdmVfYnVmLnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAg ICBnb3RvIGZhaWw7Cj4gKyAgICBlcnIgPSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZmZXIoJmRl Yy0+dmtjdHgsIHBsX2hvciwgZXhlYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwLCAxLCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRlYy0+dG1wX2J1Zi5hZGRyZXNzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRlYy0+dG1wX2J1Zi5zaXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpOwo+ICsgICAgaWYgKGVyciA8IDApCj4gKyAg ICAgICAgZ290byBmYWlsOwo+ICsKPiArCj4gKyAgICBmb3IgKGludCBpID0gY3R4LT53YXZlbGV0 X2RlcHRoIC0gMTsgaSA+PSAwOyBpLS0pIHsKPiArICAgICAgICBkZWMtPnBDb25zdC5wbGFuZV9z dHJpZGVzWzBdID0gY3R4LT5wbGFuZVswXS5pZHd0LndpZHRoIDw8IGk7Cj4gKyAgICAgICAgZGVj LT5wQ29uc3QucGxhbmVfc3RyaWRlc1sxXSA9IGN0eC0+cGxhbmVbMV0uaWR3dC53aWR0aCA8PCBp Owo+ICsgICAgICAgIGRlYy0+cENvbnN0LnBsYW5lX3N0cmlkZXNbMl0gPSBjdHgtPnBsYW5lWzJd Lmlkd3Qud2lkdGggPDwgaTsKPiArCj4gKyAgICAgICAgZGVjLT5wQ29uc3QuZHdbMF0gPSBjdHgt PnBsYW5lWzBdLmlkd3Qud2lkdGggPj4gKGkgKyAxKTsKPiArICAgICAgICBkZWMtPnBDb25zdC5k d1sxXSA9IGN0eC0+cGxhbmVbMV0uaWR3dC53aWR0aCA+PiAoaSArIDEpOwo+ICsgICAgICAgIGRl Yy0+cENvbnN0LmR3WzJdID0gY3R4LT5wbGFuZVsyXS5pZHd0LndpZHRoID4+IChpICsgMSk7Cj4g Kwo+ICsgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1swXSA9IChjdHgtPnBsYW5l WzBdLmlkd3Qud2lkdGgpICA+PiBpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVf ZGltc1sxXSA9IChjdHgtPnBsYW5lWzBdLmlkd3QuaGVpZ2h0KSA+PiBpOwo+ICsgICAgICAgIGRl Yy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1syXSA9IChjdHgtPnBsYW5lWzFdLmlkd3Qud2lkdGgp ICA+PiBpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1szXSA9IChjdHgt PnBsYW5lWzFdLmlkd3QuaGVpZ2h0KSA+PiBpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0LnJlYWxf cGxhbmVfZGltc1s0XSA9IChjdHgtPnBsYW5lWzJdLmlkd3Qud2lkdGgpICA+PiBpOwo+ICsgICAg ICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1s1XSA9IChjdHgtPnBsYW5lWzJdLmlkd3Qu aGVpZ2h0KSA+PiBpOwo+ICsKPiArICAgICAgICAvKiBWZXJ0aWNhbCB3YXZlbGV0IHBhc3MgKi8K PiArICAgICAgICBmZl92a191cGRhdGVfcHVzaF9leGVjKCZkZWMtPnZrY3R4LCBleGVjLCBwbF92 ZXJ0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKFdh dmVsZXRQdXNoQ29uc3QpLCAmZGVjLT5wQ29uc3QpOwo+ICsKPiArICAgICAgICBiYXJyaWVyX251 bSA9ICpuYl9idWZfYmFyOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIs ICZkZWMtPnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl93cml0ZShidWZfYmFyLCBuYl9idWZfYmFy LCAmZGVjLT50bXBfYnVmKTsKPiArICAgICAgICBiYXJfcmVhZChidWZfYmFyLCBuYl9idWZfYmFy LCAmZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsgICAgICAgIGJhcl93cml0ZShidWZfYmFy LCBuYl9idWZfYmFyLCAmZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsKPiArICAgICAgICB2 ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewo+ ICsgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9J TkZPLAo+ICsgICAgICAgICAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9IGJ1Zl9iYXIg KyBiYXJyaWVyX251bSwKPiArICAgICAgICAgICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVyQ291 bnQgPSAqbmJfYnVmX2JhciAtIGJhcnJpZXJfbnVtLAo+ICsgICAgICAgIH0pOwo+ICsKPiArICAg ICAgICBmZl92a19leGVjX2JpbmRfcGlwZWxpbmUoJmRlYy0+dmtjdHgsIGV4ZWMsIHBsX3ZlcnQp Owo+ICsgICAgICAgIHZrLT5DbWREaXNwYXRjaChleGVjLT5idWYsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1swXSA+PiAzLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICBkZWMtPnBDb25zdC5yZWFsX3BsYW5lX2RpbXNbMV0gPj4gNCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgMSk7Cj4gKwo+ICsgICAgICAgIC8qIEhvcml6b250YWwg d2F2ZWxldCBwYXNzICovCj4gKyAgICAgICAgZmZfdmtfdXBkYXRlX3B1c2hfZXhlYygmZGVjLT52 a2N0eCwgZXhlYywgcGxfaG9yLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hB REVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg c2l6ZW9mKFdhdmVsZXRQdXNoQ29uc3QpLCAmZGVjLT5wQ29uc3QpOwo+ICsKPiArICAgICAgICBi YXJyaWVyX251bSA9ICpuYl9idWZfYmFyOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5i X2J1Zl9iYXIsICZkZWMtPnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl93cml0ZShidWZfYmFyLCBu Yl9idWZfYmFyLCAmZGVjLT50bXBfYnVmKTsKPiArICAgICAgICBiYXJfcmVhZChidWZfYmFyLCBu Yl9idWZfYmFyLCAmZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsgICAgICAgIGJhcl93cml0 ZShidWZfYmFyLCBuYl9idWZfYmFyLCAmZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsKPiAr ICAgICAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5 SW5mbykgewo+ICsgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQ RU5ERU5DWV9JTkZPLAo+ICsgICAgICAgICAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9 IGJ1Zl9iYXIgKyBiYXJyaWVyX251bSwKPiArICAgICAgICAgICAgICAgIC5idWZmZXJNZW1vcnlC YXJyaWVyQ291bnQgPSAqbmJfYnVmX2JhciAtIGJhcnJpZXJfbnVtLAo+ICsgICAgICAgIH0pOwo+ ICsKPiArICAgICAgICBmZl92a19leGVjX2JpbmRfcGlwZWxpbmUoJmRlYy0+dmtjdHgsIGV4ZWMs IHBsX2hvcik7Cj4gKyAgICAgICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzBdID4+IDQsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1sxXSA+ PiAzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAxKTsKPiArCj4gKyAgICAgICAgYmFycmll cl9udW0gPSAqbmJfYnVmX2JhcjsKPiArICAgICAgICBiYXJfcmVhZChidWZfYmFyLCBuYl9idWZf YmFyLCAmZGVjLT50bXBfYnVmKTsKPiArICAgICAgICBiYXJfd3JpdGUoYnVmX2JhciwgbmJfYnVm X2JhciwgJmRlYy0+dG1wX2J1Zik7Cj4gKyAgICAgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVm X2JhciwgJmRlYy0+dG1wX2ludGVybGVhdmVfYnVmKTsKPiArICAgICAgICBiYXJfd3JpdGUoYnVm X2JhciwgbmJfYnVmX2JhciwgJmRlYy0+dG1wX2ludGVybGVhdmVfYnVmKTsKPiArCj4gKyAgICAg ICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5jeUluZm8p IHsKPiArICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVO Q1lfSU5GTywKPiArICAgICAgICAgICAgICAgIC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSBidWZf YmFyICsgYmFycmllcl9udW0sCj4gKyAgICAgICAgICAgICAgICAuYnVmZmVyTWVtb3J5QmFycmll ckNvdW50ID0gKm5iX2J1Zl9iYXIgLSBiYXJyaWVyX251bSwKPiArICAgICAgICB9KTsKPiArICAg IH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArZmFpbDoKPiArICAgIGZmX3ZrX2V4ZWNfZGlzY2Fy ZF9kZXBzKCZkZWMtPnZrY3R4LCBleGVjKTsKPiArICAgIHJldHVybiBlcnI7Cj4gK30KPiArCj4g Ky8qIC0tLS0tIEhhYXIgV2F2ZWxldCBpbml0IGFuZCBwaXBlbGluZSBwYXNzIC0tLS0tICovCj4g Kwo+ICtzdGF0aWMgY29uc3QgY2hhciBoYWFyaV9ob3JpeltdID0gewo+ICsgICAgQygwLCB2b2lk IGlkd3RfaG9yaXooaW50IHBsYW5lLCBpbnQgeCwgaW50IHkpIHsKPiAgICAgICAgKQo+ICsgICAg QygxLCAgICBpbnQgb2ZmczAgPSBwbGFuZV9vZmZzW3BsYW5lXSArIHBsYW5lX3N0cmlkZXNbcGxh bmVdICogeSArCj4geDsgICAgICAgKQo+ICsgICAgQygxLCAgICBpbnQgb2ZmczEgPSBvZmZzMCAr IHBsYW5lX3NpemVzW3BsYW5lXS54IC8gMjsKPiAgICAgICAgKQo+ICsgICAgQygxLCAgICBpbnQg b3V0SWR4ID0gcGxhbmVfb2Zmc1twbGFuZV0gKyBwbGFuZV9zdHJpZGVzW3BsYW5lXSAqIHkgKyB4 Cj4gKiAyOyAgKQo+ICsgICAgQygxLCAgICBpbnQzMl90IHZhbF9vcmlnMCA9IGluQnVmW29mZnMw XTsKPiAgICAgICAgKQo+ICsgICAgQygxLCAgICBpbnQzMl90IHZhbF9vcmlnMSA9IGluQnVmW29m ZnMxXTsKPiAgICAgICAgKQo+ICsgICAgQygxLCAgICBpbnQzMl90IHZhbF9uZXcwID0gdmFsX29y aWcwIC0gKCh2YWxfb3JpZzEgKyAxKSA+PiAxKTsKPiAgICAgICApCj4gKyAgICBDKDEsICAgIGlu dDMyX3QgdmFsX25ldzEgPSB2YWxfb3JpZzEgKyB2YWxfbmV3MDsKPiAgICAgICApCj4gKyAgICBD KDEsICAgIG91dEJ1ZltvdXRJZHhdID0gdmFsX25ldzA7Cj4gICAgICAgKQo+ICsgICAgQygxLCAg ICBvdXRCdWZbb3V0SWR4ICsgMV0gPSB2YWxfbmV3MTsKPiAgICAgICApCj4gKyAgICBDKDAsIH0K PiAgICAgICApCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciBoYWFyaV9zaGlmdF9ob3Jp eltdID0gewo+ICsgICAgQygwLCB2b2lkIGlkd3RfaG9yaXooaW50IHBsYW5lLCBpbnQgeCwgaW50 IHkpIHsKPiAgICAgICAgKQo+ICsgICAgQygxLCAgICBpbnQgb2ZmczAgPSBwbGFuZV9vZmZzW3Bs YW5lXSArIHBsYW5lX3N0cmlkZXNbcGxhbmVdICogeSArCj4geDsgICAgICAgKQo+ICsgICAgQygx LCAgICBpbnQgb2ZmczEgPSBvZmZzMCArIHBsYW5lX3NpemVzW3BsYW5lXS54IC8gMjsKPiAgICAg ICAgKQo+ICsgICAgQygxLCAgICBpbnQgb3V0SWR4ID0gcGxhbmVfb2Zmc1twbGFuZV0gKyBwbGFu ZV9zdHJpZGVzW3BsYW5lXSAqIHkgKyB4Cj4gKiAyOyAgKQo+ICsgICAgQygxLCAgICBpbnQzMl90 IHZhbF9vcmlnMCA9IGluQnVmW29mZnMwXTsKPiAgICAgICAgKQo+ICsgICAgQygxLCAgICBpbnQz Ml90IHZhbF9vcmlnMSA9IGluQnVmW29mZnMxXTsKPiAgICAgICAgKQo+ICsgICAgQygxLCAgICBp bnQzMl90IHZhbF9uZXcwID0gdmFsX29yaWcwIC0gKCh2YWxfb3JpZzEgKyAxKSA+PiAxKTsKPiAg ICAgICApCj4gKyAgICBDKDEsICAgIGludDMyX3QgdmFsX25ldzEgPSB2YWxfb3JpZzEgKyB2YWxf bmV3MDsKPiAgICAgICApCj4gKyAgICBDKDEsICAgIG91dEJ1ZltvdXRJZHhdID0gKHZhbF9uZXcw ICsgMSkgPj4gMTsKPiAgICAgICAgKQo+ICsgICAgQygxLCAgICBvdXRCdWZbb3V0SWR4ICsgMV0g PSAodmFsX25ldzEgKyAxKSA+PiAxOwo+ICAgICAgICApCj4gKyAgICBDKDAsIH0KPiAgICAgICAp Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciBoYWFyaV92ZXJ0W10gPSB7Cj4gKyAgICBD KDAsIHZvaWQgaWR3dF92ZXJ0KGludCBwbGFuZSwgaW50IHgsIGludCB5KSB7Cj4gICAgICAgKQo+ ICsgICAgQygxLCAgICBpbnQgb2ZmczAgPSBwbGFuZV9vZmZzW3BsYW5lXSArIHBsYW5lX3N0cmlk ZXNbcGxhbmVdICogeSArCj4geDsgICAgICAgKQo+ICsgICAgQygxLCAgICBpbnQgb2ZmczEgPSBw bGFuZV9vZmZzW3BsYW5lXSArIHBsYW5lX3N0cmlkZXNbcGxhbmVdICogKHkgKwo+IDEpICsgeDsg KQo+ICsgICAgQygyLCAgICBpbnQzMl90IHZhbF9vcmlnMCA9IGluQnVmW29mZnMwXTsKPiAgICAg ICAgKQo+ICsgICAgQygxLCAgICBpbnQzMl90IHZhbF9vcmlnMSA9IGluQnVmW29mZnMxXTsKPiAg ICAgICAgKQo+ICsgICAgQygxLCAgICBpbnQzMl90IHZhbF9uZXcwID0gdmFsX29yaWcwIC0gKCh2 YWxfb3JpZzEgKyAxKSA+PiAxKTsKPiAgICAgICApCj4gKyAgICBDKDEsICAgIGludDMyX3QgdmFs X25ldzEgPSB2YWxfb3JpZzEgKyB2YWxfbmV3MDsKPiAgICAgICApCj4gKyAgICBDKDEsICAgIG91 dEJ1ZltvZmZzMF0gPSB2YWxfbmV3MDsKPiAgICAgICAgKQo+ICsgICAgQygxLCAgICBvdXRCdWZb b2ZmczFdID0gdmFsX25ldzE7Cj4gICAgICAgICkKPiArICAgIEMoMCwgfQo+ICAgICAgICkKPiAr fTsKPiArCj4gK3N0YXRpYyBpbnQgaW5pdF93YXZlbGV0X3NoZF9oYWFyaV92ZXJ0KERpcmFjVnVs a2FuRGVjb2RlQ29udGV4dCAqcywKPiBGRlZrU1BJUlZDb21waWxlciAqc3B2LCBpbnQgc2hpZnQp Cj4gK3sKPiArICAgIGludCBlcnIgPSAwOwo+ICsgICAgdWludDhfdCAqc3B2X2RhdGE7Cj4gKyAg ICBzaXplX3Qgc3B2X2xlbjsKPiArICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwo+ICsgICAg aW50IHdhdmVsZXRfaWR4ID0gRFdUX0RJUkFDX0hBQVIwICsgc2hpZnQ7Cj4gKyAgICBGRlZ1bGth bkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4Owo+ICsgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0 QmluZGluZyAqZGVzYzsKPiArICAgIEZGVmtTUElSVlNoYWRlciAqc2hkID0gJnMtPnZlcnRfd2F2 ZWxldF9zaGRbd2F2ZWxldF9pZHhdOwo+ICsgICAgRkZWdWxrYW5QaXBlbGluZSAqcGwgPSAmcy0+ dmVydF93YXZlbGV0X3BsW3dhdmVsZXRfaWR4XTsKPiArICAgIEZGVmtFeGVjUG9vbCAqZXhlYyA9 ICZzLT5leGVjX3Bvb2w7Cj4gKwo+ICsgICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KHBsLCBzaGQs ICJoYWFyaV92ZXJ0IiwKPiBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsIDApKTsKPiArCj4g KyAgICBzaGQgPSAmcy0+dmVydF93YXZlbGV0X3NoZFt3YXZlbGV0X2lkeF07Cj4gKyAgICBmZl92 a19zaGFkZXJfc2V0X2NvbXB1dGVfc2l6ZXMoc2hkLCA4LCA4LCAzKTsKPiArCj4gKyAgICBHTFNM QygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9zY2FsYXJfYmxvY2tfbGF5b3V0IDogZW5hYmxlKTsKPiAr ICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl9leHBsaWNpdF9hcml0aG1ldGlj X3R5cGVzIDogZW5hYmxlKTsKPiArCj4gKyAgICBkZXNjID0gKEZGVnVsa2FuRGVzY3JpcHRvclNl dEJpbmRpbmdbXSkKPiArICAgIHsKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAubmFtZSA9ICJp bl9idWYiLAo+ICsgICAgICAgICAgLnN0YWdlcyA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJ VCwKPiArICAgICAgICAgIC50eXBlID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVS LAo+ICsgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludDMyX3QgaW5CdWZbXTsiLAo+ICsgICAg ICAgICAgLm1lbV9xdWFsaSA9ICJyZWFkb25seSIsCj4gKyAgICAgICAgICAuZGltZW5zaW9ucyA9 IDEsCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAubmFtZSA9ICJvdXRf YnVmIiwKPiArICAgICAgICAgIC5zdGFnZXMgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQs Cj4gKyAgICAgICAgICAudHlwZSA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwK PiArICAgICAgICAgIC5idWZfY29udGVudCA9ICJpbnQzMl90IG91dEJ1ZltdOyIsCj4gKyAgICAg ICAgICAubWVtX3F1YWxpID0gIndyaXRlb25seSIsCj4gKyAgICAgICAgICAuZGltZW5zaW9ucyA9 IDEsCj4gKyAgICAgICAgfSwKPiArICAgIH07Cj4gKyAgICBSRVQoZmZfdmtfcGlwZWxpbmVfZGVz Y3JpcHRvcl9zZXRfYWRkKHZrY3R4LCBwbCwgc2hkLCBkZXNjLCAyLCAwLCAwKSk7Cj4gKwo+ICsg ICAgZmZfdmtfYWRkX3B1c2hfY29uc3RhbnQocGwsIDAsIHNpemVvZihXYXZlbGV0UHVzaENvbnN0 KSwKPiBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQpOwo+ICsKPiArICAgIEdMU0xDKDAsIGxh eW91dChwdXNoX2NvbnN0YW50LCBzdGQ0MzApIHVuaWZvcm0gcHVzaENvbnN0YW50cyB7ICApOwo+ ICsgICAgR0xTTEMoMSwgICAgIGl2ZWMyIHBsYW5lX3NpemVzWzNdOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IHBsYW5lX29mZnNbM107ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQg cGxhbmVfc3RyaWRlc1szXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAg R0xTTEMoMSwgICAgIGludCBkd1szXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IHdhdmVsZXRfZGVwdGg7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAsIH07ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMo MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Cj4gKwo+ICsgICAgR0xTTEQoaGFhcmlfdmVydCk7Cj4gKwo+ICsgICAgR0xTTEMoMCwgdm9p ZCBtYWluKCkgewo+ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGludCBvZmZf eSA9IGludChnbF9Xb3JrR3JvdXBTaXplLnkgKgo+IGdsX051bVdvcmtHcm91cHMueSk7ICAgICAg ICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGludCBvZmZfeCA9IGludChnbF9Xb3JrR3Jv dXBTaXplLnggKgo+IGdsX051bVdvcmtHcm91cHMueCk7ICAgICAgICAgICAgICAgKTsKPiArICAg IEdMU0xDKDEsICAgIGludCBwaWNfeiA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueik7Cj4g ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsCj4gICAgICAgICAgICAgICApOwo+ICsg ICAgR0xTTEMoMSwgICAgdWludCBoID0gaW50KHBsYW5lX3NpemVzW3BpY196XS55KTsKPiAgICAg ICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgdWludCB3ID0gaW50KHBsYW5lX3NpemVz W3BpY196XS54KTsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwKPiAgICAgICAg ICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICBpbnQgeSA9IGludChnbF9HbG9iYWxJbnZvY2F0 aW9uSUQueSk7Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGZvciAoOyAy ICogeSA8IGg7IHkgKz0gb2ZmX3kpIHsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMo MiwgICAgICAgIGludCB4ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25JRC54KTsKPiAgICAgICAg ICAgICAgICApOwo+ICsgICAgR0xTTEMoMiwgICAgICAgIGZvciAoOyB4IDwgdzsgeCArPSBvZmZf eCkgewo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygzLCAgICAgICAgICAgIGlkd3Rf dmVydChwaWNfeiwgeCwgMiAqIHkpOwo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygy LCAgICAgICAgfQo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICB9Cj4gICAg ICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAsIH0KPiAgICAgICAgICAgICAgICk7Cj4gKwo+ ICsgICAgUkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIoc3B2LCB2a2N0eCwgc2hkLCAmc3B2X2RhdGEs ICZzcHZfbGVuLCAibWFpbiIsCj4gJnNwdl9vcGFxdWUpKTsKPiArICAgIFJFVChmZl92a19zaGFk ZXJfY3JlYXRlKHZrY3R4LCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKPiArICAg IFJFVChmZl92a19pbml0X2NvbXB1dGVfcGlwZWxpbmUodmtjdHgsIHBsLCBzaGQpKTsKPiArICAg IFJFVChmZl92a19leGVjX3BpcGVsaW5lX3JlZ2lzdGVyKHZrY3R4LCBleGVjLCBwbCkpOwo+ICsK PiArZmFpbDoKPiArICAgIGlmIChzcHZfb3BhcXVlKQo+ICsgICAgICAgIHNwdi0+ZnJlZV9zaGFk ZXIoc3B2LCAmc3B2X29wYXF1ZSk7Cj4gKwo+ICsgICAgcmV0dXJuIGVycjsKPiArfQo+ICsKPiAr c3RhdGljIGludCBpbml0X3dhdmVsZXRfc2hkX2hhYXJpX2hvcml6KERpcmFjVnVsa2FuRGVjb2Rl Q29udGV4dCAqcywKPiBGRlZrU1BJUlZDb21waWxlciAqc3B2LCBpbnQgc2hpZnQpCj4gK3sKPiAr ICAgIGludCBlcnIgPSAwOwo+ICsgICAgdWludDhfdCAqc3B2X2RhdGE7Cj4gKyAgICBzaXplX3Qg c3B2X2xlbjsKPiArICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwo+ICsgICAgaW50IHdhdmVs ZXRfaWR4ID0gRFdUX0RJUkFDX0hBQVIwICsgc2hpZnQ7Cj4gKyAgICBGRlZ1bGthbkNvbnRleHQg KnZrY3R4ID0gJnMtPnZrY3R4Owo+ICsgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAq ZGVzYzsKPiArICAgIEZGVmtTUElSVlNoYWRlciAqc2hkID0gJnMtPmhvcml6X3dhdmVsZXRfc2hk W3dhdmVsZXRfaWR4XTsKPiArICAgIEZGVnVsa2FuUGlwZWxpbmUgKnBsID0gJnMtPmhvcml6X3dh dmVsZXRfcGxbd2F2ZWxldF9pZHhdOwo+ICsgICAgRkZWa0V4ZWNQb29sICpleGVjID0gJnMtPmV4 ZWNfcG9vbDsKPiArCj4gKyAgICBSRVQoZmZfdmtfc2hhZGVyX2luaXQocGwsIHNoZCwgImhhYXJp X2hvcml6IiwKPiBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsIDApKTsKPiArCj4gKyAgICBz aGQgPSAmcy0+aG9yaXpfd2F2ZWxldF9zaGRbd2F2ZWxldF9pZHhdOwo+ICsgICAgZmZfdmtfc2hh ZGVyX3NldF9jb21wdXRlX3NpemVzKHNoZCwgOCwgOCwgMyk7Cj4gKwo+ICsgICAgR0xTTEMoMCwg I2V4dGVuc2lvbiBHTF9FWFRfc2NhbGFyX2Jsb2NrX2xheW91dCA6IGVuYWJsZSk7Cj4gKyAgICBH TFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfZXhwbGljaXRfYXJpdGhtZXRpY190eXBl cyA6IGVuYWJsZSk7Cj4gKwo+ICsgICAgZGVzYyA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5k aW5nW10pCj4gKyAgICB7Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgLm5hbWUgPSAiaW5fYnVm IiwKPiArICAgICAgICAgIC5zdGFnZXMgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4g KyAgICAgICAgICAudHlwZSA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKPiAr ICAgICAgICAgIC5idWZfY29udGVudCA9ICJpbnQzMl90IGluQnVmW107IiwKPiArICAgICAgICAg IC5tZW1fcXVhbGkgPSAicmVhZG9ubHkiLAo+ICsgICAgICAgICAgLmRpbWVuc2lvbnMgPSAxLAo+ ICsgICAgICAgIH0sCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgLm5hbWUgPSAib3V0X2J1ZiIs Cj4gKyAgICAgICAgICAuc3RhZ2VzID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsg ICAgICAgICAgLnR5cGUgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCj4gKyAg ICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MzJfdCBvdXRCdWZbXTsiLAo+ICsgICAgICAgICAg Lm1lbV9xdWFsaSA9ICJ3cml0ZW9ubHkiLAo+ICsgICAgICAgICAgLmRpbWVuc2lvbnMgPSAxLAo+ ICsgICAgICAgIH0sCj4gKyAgICB9Owo+ICsgICAgUkVUKGZmX3ZrX3BpcGVsaW5lX2Rlc2NyaXB0 b3Jfc2V0X2FkZCh2a2N0eCwgcGwsIHNoZCwgZGVzYywgMiwgMCwgMCkpOwo+ICsKPiArICAgIGZm X3ZrX2FkZF9wdXNoX2NvbnN0YW50KHBsLCAwLCBzaXplb2YoV2F2ZWxldFB1c2hDb25zdCksCj4g VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKPiArCj4gKyAgICBHTFNMQygwLCBsYXlvdXQo cHVzaF9jb25zdGFudCwgc3RkNDMwKSB1bmlmb3JtIHB1c2hDb25zdGFudHMgeyAgKTsKPiArICAg IEdMU0xDKDEsICAgICBpdmVjMiBwbGFuZV9zaXplc1szXTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGludCBwbGFuZV9vZmZzWzNdOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IHBsYW5l X3N0cmlkZXNbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xD KDEsICAgICBpbnQgZHdbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGludCB3YXZlbGV0X2RlcHRoOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygwLCB9OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ ICsKPiArICAgIEdMU0xEKHNoaWZ0ID8gaGFhcmlfc2hpZnRfaG9yaXogOiBoYWFyaV9ob3Jpeik7 Cj4gKwo+ICsgICAgR0xTTEMoMCwgdm9pZCBtYWluKCkgewo+ICAgICAgICAgICAgICAgKTsKPiAr ICAgIEdMU0xDKDEsICAgIGludCBvZmZfeSA9IGludChnbF9Xb3JrR3JvdXBTaXplLnkgKgo+IGds X051bVdvcmtHcm91cHMueSk7ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGlu dCBvZmZfeCA9IGludChnbF9Xb3JrR3JvdXBTaXplLnggKgo+IGdsX051bVdvcmtHcm91cHMueCk7 ICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgIGludCBwaWNfeiA9IGludChnbF9H bG9iYWxJbnZvY2F0aW9uSUQueik7Cj4gICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEs Cj4gICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgdWludCB3ID0gaW50KHBsYW5l X3NpemVzW3BpY196XS54KTsKPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAg dWludCBoID0gaW50KHBsYW5lX3NpemVzW3BpY196XS55KTsKPiAgICAgICAgICAgICAgICApOwo+ ICsgICAgR0xTTEMoMSwKPiAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICBpbnQg eSA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueSk7Cj4gICAgICAgICAgICAgICAgKTsKPiAr ICAgIEdMU0xDKDEsICAgIGZvciAoOyB5IDwgaDsgeSArPSBvZmZfeSkgewo+ICAgICAgICAgICAg ICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAgaW50IHggPSBpbnQoZ2xfR2xvYmFsSW52b2Nh dGlvbklELngpOwo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygyLCAgICAgICAgZm9y ICg7IDIgKiB4IDwgdzsgeCArPSBvZmZfeCkgewo+ICAgICAgICAgICAgICAgICk7Cj4gKyAgICBH TFNMQygzLCAgICAgICAgICAgIGlkd3RfaG9yaXoocGljX3osIHgsIHkpOwo+ICAgICAgICAgICAg ICAgKTsKPiArICAgIEdMU0xDKDIsICAgICAgICB9Cj4gICAgICAgICAgICAgICAgKTsKPiArICAg IEdMU0xDKDEsICAgIH0KPiAgICAgICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMCwgfQo+ICAg ICAgICAgICAgICAgKTsKPiArCj4gKyAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcihzcHYsIHZr Y3R4LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKPiAmc3B2X29wYXF1ZSkpOwo+ ICsgICAgUkVUKGZmX3ZrX3NoYWRlcl9jcmVhdGUodmtjdHgsIHNoZCwgc3B2X2RhdGEsIHNwdl9s ZW4sICJtYWluIikpOwo+ICsgICAgUkVUKGZmX3ZrX2luaXRfY29tcHV0ZV9waXBlbGluZSh2a2N0 eCwgcGwsIHNoZCkpOwo+ICsgICAgUkVUKGZmX3ZrX2V4ZWNfcGlwZWxpbmVfcmVnaXN0ZXIodmtj dHgsIGV4ZWMsIHBsKSk7Cj4gKwo+ICtmYWlsOgo+ICsgICAgaWYgKHNwdl9vcGFxdWUpCj4gKyAg ICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYsICZzcHZfb3BhcXVlKTsKPiArCj4gKyAgICByZXR1 cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgaW5saW5lCj4g d2F2ZWxldF9oYWFyaV9wYXNzKERpcmFjVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIERpcmFjQ29udGV4dCAqY3R4LAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgIEZGVmtFeGVjQ29udGV4dCAqZXhlYywKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICBWa0J1ZmZlck1lbW9yeUJhcnJpZXIyICpidWZfYmFyLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCAqbmJfYnVmX2JhciwgaW50IHNoaWZ0KSB7Cj4gKyAgICBpbnQgZXJy Owo+ICsgICAgaW50IGJhcnJpZXJfbnVtID0gKm5iX2J1Zl9iYXI7Cj4gKwo+ICsgICAgY29uc3Qg aW50IHdhdmVsZXRfaWR4ID0gRFdUX0RJUkFDX0hBQVIwICsgc2hpZnQ7Cj4gKyAgICBGRlZ1bGth bkZ1bmN0aW9ucyAqdmsgPSAmZGVjLT52a2N0eC52a2ZuOwo+ICsKPiArICAgIEZGVnVsa2FuUGlw ZWxpbmUgKnBsX2hvciA9ICZkZWMtPmhvcml6X3dhdmVsZXRfcGxbd2F2ZWxldF9pZHhdOwo+ICsg ICAgRkZWdWxrYW5QaXBlbGluZSAqcGxfdmVydCA9ICZkZWMtPnZlcnRfd2F2ZWxldF9wbFt3YXZl bGV0X2lkeF07Cj4gKwo+ICsgICAgZXJyID0gZmZfdmtfc2V0X2Rlc2NyaXB0b3JfYnVmZmVyKCZk ZWMtPnZrY3R4LCBwbF92ZXJ0LCBleGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIDAsIDAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVjLT50bXBfYnVmLmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVjLT50bXBfYnVmLnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiAr ICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICBlcnIgPSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZm ZXIoJmRlYy0+dmtjdHgsIHBsX3ZlcnQsIGV4ZWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwgMSwgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zi5hZGRyZXNzLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRlYy0+dG1wX2ludGVybGVhdmVfYnVmLnNpemUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5F RCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKwo+ICsgICAg ZXJyID0gZmZfdmtfc2V0X2Rlc2NyaXB0b3JfYnVmZmVyKCZkZWMtPnZrY3R4LCBwbF9ob3IsIGV4 ZWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMtPnRtcF9pbnRlcmxlYXZl X2J1Zi5hZGRyZXNzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl Yy0+dG1wX2ludGVybGVhdmVfYnVmLnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiAr ICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICBlcnIgPSBmZl92a19zZXRfZGVzY3JpcHRvcl9idWZm ZXIoJmRlYy0+dmtjdHgsIHBsX2hvciwgZXhlYywKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLCAxLCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRlYy0+dG1wX2J1Zi5hZGRyZXNzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlYy0+dG1wX2J1Zi5zaXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpOwo+ICsgICAgaWYgKGVyciA8IDAp Cj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsKPiArICAgIGZvciAoaW50IGkgPSBjdHgtPndhdmVs ZXRfZGVwdGggLSAxOyBpID49IDA7IGktLSkgewo+ICsgICAgICAgIGRlYy0+cENvbnN0LnBsYW5l X3N0cmlkZXNbMF0gPSBjdHgtPnBsYW5lWzBdLmlkd3Qud2lkdGggPDwgaTsKPiArICAgICAgICBk ZWMtPnBDb25zdC5wbGFuZV9zdHJpZGVzWzFdID0gY3R4LT5wbGFuZVsxXS5pZHd0LndpZHRoIDw8 IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucGxhbmVfc3RyaWRlc1syXSA9IGN0eC0+cGxhbmVb Ml0uaWR3dC53aWR0aCA8PCBpOwo+ICsKPiArICAgICAgICBkZWMtPnBDb25zdC5kd1swXSA9IGN0 eC0+cGxhbmVbMF0uaWR3dC53aWR0aCA+PiAoaSArIDEpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0 LmR3WzFdID0gY3R4LT5wbGFuZVsxXS5pZHd0LndpZHRoID4+IChpICsgMSk7Cj4gKyAgICAgICAg ZGVjLT5wQ29uc3QuZHdbMl0gPSBjdHgtPnBsYW5lWzJdLmlkd3Qud2lkdGggPj4gKGkgKyAxKTsK PiArCj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzBdID0gY3R4LT5wbGFu ZVswXS5pZHd0LndpZHRoICA+PiBpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVf ZGltc1sxXSA9IGN0eC0+cGxhbmVbMF0uaWR3dC5oZWlnaHQgPj4gaTsKPiArICAgICAgICBkZWMt PnBDb25zdC5yZWFsX3BsYW5lX2RpbXNbMl0gPSBjdHgtPnBsYW5lWzFdLmlkd3Qud2lkdGggID4+ IGk7Cj4gKyAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzNdID0gY3R4LT5wbGFu ZVsxXS5pZHd0LmhlaWdodCA+PiBpOwo+ICsgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVf ZGltc1s0XSA9IGN0eC0+cGxhbmVbMl0uaWR3dC53aWR0aCAgPj4gaTsKPiArICAgICAgICBkZWMt PnBDb25zdC5yZWFsX3BsYW5lX2RpbXNbNV0gPSBjdHgtPnBsYW5lWzJdLmlkd3QuaGVpZ2h0ID4+ IGk7Cj4gKwo+ICsgICAgICAgIGRlYy0+cENvbnN0LndhdmVsZXRfZGVwdGggPSBjdHgtPndhdmVs ZXRfZGVwdGg7Cj4gKwo+ICsgICAgICAgIC8qIFZlcnRpY2FsIHdhdmVsZXQgcGFzcyAqLwo+ICsg ICAgICAgIGZmX3ZrX3VwZGF0ZV9wdXNoX2V4ZWMoJmRlYy0+dmtjdHgsIGV4ZWMsIHBsX3ZlcnQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVU RV9CSVQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YoV2F2ZWxl dFB1c2hDb25zdCksICZkZWMtPnBDb25zdCk7Cj4gKwo+ICsgICAgICAgIGJhcnJpZXJfbnVtID0g Km5iX2J1Zl9iYXI7Cj4gKyAgICAgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVmX2JhciwgJmRl Yy0+dG1wX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZk ZWMtPnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1Zl9iYXIsICZk ZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5i X2J1Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKwo+ICsgICAgICAgIHZrLT5D bWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7Cj4gKyAg ICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8s Cj4gKyAgICAgICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gYnVmX2JhciArIGJh cnJpZXJfbnVtLAo+ICsgICAgICAgICAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9 ICpuYl9idWZfYmFyIC0gYmFycmllcl9udW0sCj4gKyAgICAgICAgfSk7Cj4gKwo+ICsgICAgICAg IGZmX3ZrX2V4ZWNfYmluZF9waXBlbGluZSgmZGVjLT52a2N0eCwgZXhlYywgcGxfdmVydCk7Cj4g KyAgICAgICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzBdID4+IDMsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGRlYy0+cENvbnN0LnJlYWxfcGxhbmVfZGltc1sxXSA+PiA0LAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAxKTsKPiArCj4gKyAgICAgICAgLyogSG9yaXpvbnRhbCB3YXZl bGV0IHBhc3MgKi8KPiArICAgICAgICBmZl92a191cGRhdGVfcHVzaF9leGVjKCZkZWMtPnZrY3R4 LCBleGVjLCBwbF9ob3IsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJf U1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXpl b2YoV2F2ZWxldFB1c2hDb25zdCksICZkZWMtPnBDb25zdCk7Cj4gKwo+ICsgICAgICAgIGJhcnJp ZXJfbnVtID0gKm5iX2J1Zl9iYXI7Cj4gKyAgICAgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVm X2JhciwgJmRlYy0+dG1wX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5iX2J1 Zl9iYXIsICZkZWMtPnRtcF9idWYpOwo+ICsgICAgICAgIGJhcl9yZWFkKGJ1Zl9iYXIsIG5iX2J1 Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKyAgICAgICAgYmFyX3dyaXRlKGJ1 Zl9iYXIsIG5iX2J1Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKwo+ICsgICAg ICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZv KSB7Cj4gKyAgICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRF TkNZX0lORk8sCj4gKyAgICAgICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gYnVm X2JhciArIGJhcnJpZXJfbnVtLAo+ICsgICAgICAgICAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJp ZXJDb3VudCA9ICpuYl9idWZfYmFyIC0gYmFycmllcl9udW0sCj4gKyAgICAgICAgfSk7Cj4gKwo+ ICsgICAgICAgIGZmX3ZrX2V4ZWNfYmluZF9waXBlbGluZSgmZGVjLT52a2N0eCwgZXhlYywgcGxf aG9yKTsKPiArICAgICAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICBkZWMtPnBDb25zdC5yZWFsX3BsYW5lX2RpbXNbMF0gPj4gNCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgZGVjLT5wQ29uc3QucmVhbF9wbGFuZV9kaW1zWzFdID4+IDMs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIDEpOwo+ICsKPiArICAgIH0KPiArCj4gKyAgICBi YXJyaWVyX251bSA9ICpuYl9idWZfYmFyOwo+ICsgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVm X2JhciwgJmRlYy0+dG1wX2J1Zik7Cj4gKyAgICBiYXJfd3JpdGUoYnVmX2JhciwgbmJfYnVmX2Jh ciwgJmRlYy0+dG1wX2J1Zik7Cj4gKyAgICBiYXJfcmVhZChidWZfYmFyLCBuYl9idWZfYmFyLCAm ZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYpOwo+ICsgICAgYmFyX3dyaXRlKGJ1Zl9iYXIsIG5iX2J1 Zl9iYXIsICZkZWMtPnRtcF9pbnRlcmxlYXZlX2J1Zik7Cj4gKyAgICB2ay0+Q21kUGlwZWxpbmVC YXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewo+ICsgICAgICAgICAgICAu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCj4gKyAgICAgICAgICAg IC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSBidWZfYmFyICsgYmFycmllcl9udW0sCj4gKyAgICAg ICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVyQ291bnQgPSAqbmJfYnVmX2JhciAtIGJhcnJpZXJf bnVtLAo+ICsgICAgfSk7Cj4gKwo+ICsKPiArICAgIHJldHVybiAwOwo+ICtmYWlsOgo+ICsgICAg ZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMoJmRlYy0+dmtjdHgsIGV4ZWMpOwo+ICsgICAgcmV0dXJu IGVycjsKPiArfQo+ICsKPiArLyogLS0tLS0gRGVxdWFudCBTaGFkZXIgaW5pdCBhbmQgcGlwZWxp bmUgcGFzcyAtLS0tLSAqLwo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgZGVxdWFudFtdID0gewo+ ICsgICAgQygwLCB2b2lkIGRlcXVhbnQoaW50IG91dElkeCwgaW50IGlkeCwgaW50IHFmLCBpbnQg cXMpIHsgICAgICAgICkKPiArICAgIEMoMSwgICAgaW50MzJfdCB2YWwgPSBpbkJ1ZmZlcltpZHhd OyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDEsICAgIHZhbCA9IHNpZ24o dmFsKSAqICgoYWJzKHZhbCkgKiBxZiArIHFzKSA+PiAyKTsgICAgICAgICAgKQo+ICsgICAgQygx LCAgICBvdXRCdWYwW291dElkeF0gPSBvdXRCdWYxW291dElkeF0gPSB2YWw7ICAgICAgICAgICAg ICAgICkKPiArICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciBwcm9j X3NsaWNlW10gPSB7Cj4gKyAgICBDKDAsIHZvaWQgcHJvY19zbGljZShpbnQgc2xpY2VfaWR4KSB7 Cj4gICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29uc3QgaW50IHBsYW5lID0g aW50KGdsX0dsb2JhbEludm9jYXRpb25JRC54KTsKPiAgICAgICAgICAgICAgICAgICAgKQo+ICsg ICAgQygxLCAgICBjb25zdCBpbnQgbGV2ZWwgPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELnkp Owo+ICAgICAgICAgICAgICAgICAgICApCj4gKyAgICAvKkMoMSwgICAgaWYgKGxldmVsID49IHdh dmVsZXRfZGVwdGgpIHJldHVybjsKPiAgICAgICAgICAgICAgICAgICAgICApKi8KPiArICAgIEMo MSwgICAgY29uc3QgaW50IGJhc2VfaWR4ID0gc2xpY2VfaWR4ICogRFdUX0xFVkVMUyAqIDg7Cj4g ICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAgICBjb25zdCBpbnQgYmFzZV9zbGljZV9p ZHggPSBzbGljZV9pZHggKiBEV1RfTEVWRUxTICogMyArIHBsYW5lCj4gKiBEV1RfTEVWRUxTOyAg ICAgKQo+ICsgICAgQygxLAo+ICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMSwgICAgY29u c3QgU2xpY2UgcyA9IHNsaWNlc1tiYXNlX3NsaWNlX2lkeCArIGxldmVsXTsKPiAgICAgICAgICAg ICAgICAgICAgKQo+ICsgICAgQygxLCAgICBpbnQgb2ZmcyA9IHMub2ZmczsKPiAgICAgICAgICAg ICAgICAgICApCj4gKyAgICBDKDEsCj4gICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygxLCAg ICBmb3IoaW50IG9yaWVudCA9IGludChib29sKGxldmVsKSk7IG9yaWVudCA8IDQ7IG9yaWVudCsr KSB7Cj4gICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygyLCAgICAgICAgaW50MzJfdCBxZiA9 IHF1YW50TWF0cml4W2Jhc2VfaWR4ICsgbGV2ZWwgKiA4ICsgb3JpZW50XTsKPiAgICAgICAgICAg ICAgICAgICApCj4gKyAgICBDKDIsICAgICAgICBpbnQzMl90IHFzID0gcXVhbnRNYXRyaXhbYmFz ZV9pZHggKyBsZXZlbCAqIDggKyBvcmllbnQgKwo+IDRdOyAgICAgICAgICAgICAgICApCj4gKyAg ICBDKDIsCj4gICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygyLCAgICAgICAgY29uc3QgaW50 IHN1YmJhbmRfaWR4ID0gcGxhbmUgKiBEV1RfTEVWRUxTICogNAo+ICAgICAgICAgICAgICAgICAg ICkKPiArICAgIEMoMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0 ICogbGV2ZWwgKyBvcmllbnQ7Cj4gICAgICAgICAgICAgICAgICAgICkKPiArICAgIEMoMiwKPiAg ICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDIsICAgICAgICBjb25zdCBTdWJiYW5kT2Zmc2V0 IHN1Yl9vZmYgPSBzdWJiYW5kX29mZnNbc3ViYmFuZF9pZHhdOwo+ICAgICAgICAgICAgICAgICAg ICkKPiArICAgIEMoMiwgICAgICAgIGludCBpbWdfaWR4ID0gcGxhbmVfb2Zmc1twbGFuZV0gKyBz dWJfb2ZmLmJhc2Vfb2ZmCj4gICAgICAgICAgICAgICAgICAgKQo+ICsgICAgQygyLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHMudG9wICogc3ViX29mZi5zdHJpZGUK PiArIHMubGVmdDsgICAgICAgICAgKQo+ICsgICAgQygyLAo+ICAgICAgICAgICAgICAgICAgICkK PiArICAgIEMoMiwgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBzLnRvdF92OyB5KyspIHsKPiAg ICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDMsICAgICAgICAgICAgaW50IGltZ194ID0gaW1n X2lkeDsKPiAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDMsICAgICAgICAgICAgZm9yKGlu dCB4ID0gMDsgeCA8IHMudG90X2g7IHgrKykgewo+ICAgICAgICAgICAgICAgICAgICkKPiArICAg IEMoNCwgICAgICAgICAgICAgICAgZGVxdWFudChpbWdfeCwgb2ZmcywgcWYsIHFzKTsKPiAgICAg ICAgICAgICAgICAgICAgKQo+ICsgICAgQyg0LCAgICAgICAgICAgICAgICBpbWdfeCsrOwo+ICAg ICAgICAgICAgICAgICAgICkKPiArICAgIEMoNCwgICAgICAgICAgICAgICAgb2ZmcysrOwo+ICAg ICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDMsICAgICAgICAgICAgfQo+ICAgICAgICAgICAg ICAgICAgICApCj4gKyAgICBDKDMsICAgICAgICAgICAgaW1nX2lkeCArPSBzdWJfb2ZmLnN0cmlk ZTsKPiAgICAgICAgICAgICAgICAgICApCj4gKyAgICBDKDIsICAgICAgICB9Cj4gICAgICAgICAg ICAgICAgICAgICkKPiArICAgIEMoMSwgICAgfQo+ICAgICAgICAgICAgICAgICAgICApCj4gKyAg ICBDKDAsIH0KPiAgICAgICAgICAgICAgICAgICApCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGlu aXRfcXVhbnRfc2hkKERpcmFjVnVsa2FuRGVjb2RlQ29udGV4dCAqcywgRkZWa1NQSVJWQ29tcGls ZXIKPiAqc3B2KQo+ICt7Cj4gKyAgICBpbnQgZXJyID0gMDsKPiArICAgIHVpbnQ4X3QgKnNwdl9k YXRhOwo+ICsgICAgc2l6ZV90IHNwdl9sZW47Cj4gKyAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVM TDsKPiArICAgIC8vIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhz LT52a2N0eC5vdXRwdXRfZm9ybWF0KTsKPiArICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAm cy0+dmtjdHg7Cj4gKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjOwo+ICsg ICAgRkZWa1NQSVJWU2hhZGVyICpzaGQgPSAmcy0+cXVhbnRfc2hkOwo+ICsgICAgRkZWdWxrYW5Q aXBlbGluZSAqcGwgPSAmcy0+cXVhbnRfcGw7Cj4gKyAgICBGRlZrRXhlY1Bvb2wgKmV4ZWMgPSAm cy0+ZXhlY19wb29sOwo+ICsKPiArICAgIFJFVChmZl92a19zaGFkZXJfaW5pdChwbCwgc2hkLCAi ZGVxdWFudCIsCj4gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULCAwKSk7Cj4gKwo+ICsgICAg c2hkID0gJnMtPnF1YW50X3NoZDsKPiArICAgIGZmX3ZrX3NoYWRlcl9zZXRfY29tcHV0ZV9zaXpl cyhzaGQsIDMsIDEsIDEpOwo+ICsKPiArICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhUX2Rl YnVnX3ByaW50ZiA6IGVuYWJsZSk7Cj4gKyAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9z Y2FsYXJfYmxvY2tfbGF5b3V0IDogZW5hYmxlKTsKPiArICAgIEdMU0xDKDAsICNleHRlbnNpb24g R0xfRVhUX3NoYWRlcl9leHBsaWNpdF9hcml0aG1ldGljX3R5cGVzIDogZW5hYmxlKTsKPiArCj4g KyAgICBkZXNjID0gKEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmdbXSkKPiArICAgIHsKPiAr ICAgICAgICB7Cj4gKyAgICAgICAgICAubmFtZSA9ICJvdXRfYnVmXzAiLAo+ICsgICAgICAgICAg LnN0YWdlcyA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKPiArICAgICAgICAgIC50eXBl ID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAo+ICsgICAgICAgICAgLmJ1Zl9j b250ZW50ID0gImludDMyX3Qgb3V0QnVmMFtdOyIsCj4gKyAgICAgICAgICAubWVtX2xheW91dCA9 ICJzdGQ0MzAiLAo+ICsgICAgICAgICAgLm1lbV9xdWFsaSA9ICJ3cml0ZW9ubHkiLAo+ICsgICAg ICAgICAgLmRpbWVuc2lvbnMgPSAxLAo+ICsgICAgICAgIH0sCj4gKyAgICAgICAgewo+ICsgICAg ICAgICAgLm5hbWUgPSAib3V0X2J1Zl8xIiwKPiArICAgICAgICAgIC5zdGFnZXMgPSBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAudHlwZSA9IFZLX0RFU0NSSVBUT1Jf VFlQRV9TVE9SQUdFX0JVRkZFUiwKPiArICAgICAgICAgIC5idWZfY29udGVudCA9ICJpbnQzMl90 IG91dEJ1ZjFbXTsiLAo+ICsgICAgICAgICAgLm1lbV9sYXlvdXQgPSAic3RkNDMwIiwKPiArICAg ICAgICAgIC5tZW1fcXVhbGkgPSAid3JpdGVvbmx5IiwKPiArICAgICAgICAgIC5kaW1lbnNpb25z ID0gMSwKPiArICAgICAgICB9LAo+ICsgICAgfTsKPiArICAgIFJFVChmZl92a19waXBlbGluZV9k ZXNjcmlwdG9yX3NldF9hZGQodmtjdHgsIHBsLCBzaGQsIGRlc2MsIDIsIDAsIDApKTsKPiArCj4g KyAgICBHTFNMQygwLCBzdHJ1Y3QgU2xpY2UgeyAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAg ICAgaW50MzJfdCBsZWZ0OyAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50MzJfdCB0b3A7 ICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50MzJfdCB0b3RfaDsgICAgICk7Cj4gKyAg ICBHTFNMQygxLCAgICAgaW50MzJfdCB0b3RfdjsgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAg aW50MzJfdCB0b3Q7ICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50MzJfdCBvZmZzOyAg ICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50MzJfdCBwYWQwOyAgICAgICk7Cj4gKyAgICBH TFNMQygxLCAgICAgaW50MzJfdCBwYWQxOyAgICAgICk7Cj4gKyAgICBHTFNMQygwLCB9OyAgICAg ICAgICAgICAgICAgICAgICk7Cj4gKwo+ICsgICAgR0xTTEMoMCwgc3RydWN0IFN1YmJhbmRPZmZz ZXQgeyAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBpbnQzMl90IGJhc2Vfb2ZmOyAgICAgICk7 Cj4gKyAgICBHTFNMQygxLCAgICAgaW50MzJfdCBzdHJpZGU7ICAgICAgICApOwo+ICsgICAgR0xT TEMoMSwgICAgIGludDMyX3QgcGFkMDsgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDEsICAgICBp bnQzMl90IHBhZDE7ICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygwLCB9OyAgICAgICAgICAgICAg ICAgICAgICAgICApOwo+ICsKPiArICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0Qmlu ZGluZ1tdKQo+ICsgICAgewo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLm5hbWUgPSAicXVh bnRfaW5fYnVmIiwKPiArICAgICAgICAgICAgLnR5cGUgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RP UkFHRV9CVUZGRVIsCj4gKyAgICAgICAgICAgIC5zdGFnZXMgPSBWS19TSEFERVJfU1RBR0VfQ09N UFVURV9CSVQsCj4gKyAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJpbnQzMl90IGluQnVmZmVy W107IiwKPiArICAgICAgICAgICAgLm1lbV9xdWFsaSA9ICJyZWFkb25seSIsCj4gKyAgICAgICAg ICAgIC5tZW1fbGF5b3V0ID0gInN0ZDQzMCIsCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4g KyAgICAgICAgICAgIC5uYW1lID0gInF1YW50X3ZhbHNfYnVmIiwKPiArICAgICAgICAgICAgLnR5 cGUgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCj4gKyAgICAgICAgICAgIC5z dGFnZXMgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAgIC5idWZf Y29udGVudCA9ICJpbnQzMl90IHF1YW50TWF0cml4W107IiwKPiArICAgICAgICAgICAgLm1lbV9x dWFsaSA9ICJyZWFkb25seSIsCj4gKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gInN0ZDQzMCIs Cj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIC5uYW1lID0gInNsaWNl c19idWYiLAo+ICsgICAgICAgICAgICAudHlwZSA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdF X0JVRkZFUiwKPiArICAgICAgICAgICAgLnN0YWdlcyA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRF X0JJVCwKPiArICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gIlNsaWNlIHNsaWNlc1tdOyIsCj4g KyAgICAgICAgICAgIC5tZW1fcXVhbGkgPSAicmVhZG9ubHkiLAo+ICsgICAgICAgICAgICAubWVt X2xheW91dCA9ICJzdGQ0MzAiLAo+ICsgICAgICAgIH0sCj4gKyAgICAgICAgewo+ICsgICAgICAg ICAgICAubmFtZSA9ICJzdWJiYW5kX2J1ZiIsCj4gKyAgICAgICAgICAgIC50eXBlID0gVktfREVT Q1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAo+ICsgICAgICAgICAgICAuc3RhZ2VzID0gVktf U0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAi U3ViYmFuZE9mZnNldCBzdWJiYW5kX29mZnNbNjBdOyIsCj4gKyAgICAgICAgICAgIC5tZW1fcXVh bGkgPSAicmVhZG9ubHkiLAo+ICsgICAgICAgICAgICAubWVtX2xheW91dCA9ICJzdGQ0MzAiLAo+ ICsgICAgICAgIH0sCj4gKyAgICB9Owo+ICsgICAgUkVUKGZmX3ZrX3BpcGVsaW5lX2Rlc2NyaXB0 b3Jfc2V0X2FkZCh2a2N0eCwgcGwsIHNoZCwgZGVzYywgNCwgMSwgMCkpOwo+ICsKPiArICAgIGZm X3ZrX2FkZF9wdXNoX2NvbnN0YW50KHBsLCAwLCBzaXplb2YoV2F2ZWxldFB1c2hDb25zdCksCj4g VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKPiArCj4gKyAgICBHTFNMQygwLCBsYXlvdXQo cHVzaF9jb25zdGFudCwgc3RkNDMwKSB1bmlmb3JtIHB1c2hDb25zdGFudHMgeyAgKTsKPiArICAg IEdMU0xDKDEsICAgICBpdmVjMiBwbGFuZV9zaXplc1szXTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGludCBwbGFuZV9vZmZzWzNdOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygxLCAgICAgaW50IHBsYW5l X3N0cmlkZXNbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xD KDEsICAgICBpbnQgZHdbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwo+ICsgICAgR0xTTEMoMSwgICAgIGludCB3YXZlbGV0X2RlcHRoOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgICBHTFNMQygwLCB9OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKPiArICAgIEdMU0xDKDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+ ICsKPiArICAgIEdMU0xGKDAsICNkZWZpbmUgRFdUX0xFVkVMUyAlaSwgTUFYX0RXVF9MRVZFTFMg ICAgICAgICAgICAgICAgICApOwo+ICsKPiArICAgIEdMU0xEKGRlcXVhbnQpOwo+ICsgICAgR0xT TEQocHJvY19zbGljZSk7Cj4gKyAgICBHTFNMQygwLCB2b2lkIG1haW4oKQo+ICAgICAgICAgICAp Owo+ICsgICAgR0xTTEMoMCwgewo+ICAgICAgICAgICApOwo+ICsgICAgR0xTTEMoMSwgICAgaW50 IGlkeCA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueik7Cj4gICAgICAgICAgICApOwo+ICsg ICAgR0xTTEMoMSwgICAgcHJvY19zbGljZShpZHgpOwo+ICAgICAgICAgICApOwo+ICsgICAgR0xT TEMoMCwgfQo+ICAgICAgICAgICApOwo+ICsKPiArICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVy KHNwdiwgdmtjdHgsIHNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1haW4iLAo+ICZzcHZfb3Bh cXVlKSk7Cj4gKyAgICBSRVQoZmZfdmtfc2hhZGVyX2NyZWF0ZSh2a2N0eCwgc2hkLCBzcHZfZGF0 YSwgc3B2X2xlbiwgIm1haW4iKSk7Cj4gKyAgICBSRVQoZmZfdmtfaW5pdF9jb21wdXRlX3BpcGVs aW5lKHZrY3R4LCBwbCwgc2hkKSk7Cj4gKyAgICBSRVQoZmZfdmtfZXhlY19waXBlbGluZV9yZWdp c3Rlcih2a2N0eCwgZXhlYywgcGwpKTsKPiArCj4gK2ZhaWw6Cj4gKyAgICBpZiAoc3B2X29wYXF1 ZSkKPiArICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOwo+ICsKPiAr ICAgIHJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBp bmxpbmUgcXVhbnRfcGxfcGFzcyhEaXJhY1Z1bGthbkRlY29kZUNvbnRleHQKPiAqZGVjLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIERpcmFjQ29udGV4dCAqY3R4LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVmtFeGVjQ29udGV4dCAqZXhlYywKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICBWa0J1ZmZlck1lbW9yeUJhcnJpZXIyICpidWZfYmFyLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCAqbmJfYnVmX2Jhcikgewo+ICsgICAgaW50IGVycjsKPiArICAg IEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZkZWMtPnZrY3R4LnZrZm47Cj4gKwo+ICsgICAgZmZf dmtfZXhlY19iaW5kX3BpcGVsaW5lKCZkZWMtPnZrY3R4LCBleGVjLCAmZGVjLT5xdWFudF9wbCk7 Cj4gKwo+ICsgICAgZXJyID0gZmZfdmtfc2V0X2Rlc2NyaXB0b3JfYnVmZmVyKCZkZWMtPnZrY3R4 LCAmZGVjLT5xdWFudF9wbCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXhlYywgMCwgMCwgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVj LT50bXBfYnVmLmFkZHJlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRlYy0+dG1wX2J1Zi5zaXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIHJl dHVybiBlcnI7Cj4gKwo+ICsgICAgZXJyID0gZmZfdmtfc2V0X2Rlc2NyaXB0b3JfYnVmZmVyKCZk ZWMtPnZrY3R4LCAmZGVjLT5xdWFudF9wbCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXhlYywgMCwgMSwgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYuYWRkcmVzcywKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGVjLT50bXBfaW50ZXJsZWF2ZV9idWYuc2l6ZSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Cj4g KyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsKPiArICAgIGZmX3Zr X3VwZGF0ZV9wdXNoX2V4ZWMoJmRlYy0+dmtjdHgsIGV4ZWMsICZkZWMtPnF1YW50X3BsLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemVvZihXYXZlbGV0UHVzaENvbnN0KSwg JmRlYy0+cENvbnN0KTsKPiArCj4gKyAgICBiYXJfcmVhZChidWZfYmFyLCBuYl9idWZfYmFyLCBk ZWMtPnF1YW50X3ZhbF9idWYpOwo+ICsgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVmX2Jhciwg ZGVjLT5zbGljZV9idWYpOwo+ICsgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVmX2JhciwgZGVj LT5xdWFudF9idWYpOwo+ICsgICAgYmFyX3JlYWQoYnVmX2JhciwgbmJfYnVmX2JhciwgJmRlYy0+ c3ViYmFuZF9pbmZvKTsKPiArCj4gKyAgICBiYXJfd3JpdGUoYnVmX2JhciwgbmJfYnVmX2Jhciwg JmRlYy0+dG1wX2J1Zik7Cj4gKyAgICBiYXJfd3JpdGUoYnVmX2JhciwgbmJfYnVmX2JhciwgJmRl Yy0+dG1wX2ludGVybGVhdmVfYnVmKTsKPiArCj4gKyAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVy MihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewo+ICsgICAgICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCj4gKyAgICAgICAgICAgIC5wQnVm ZmVyTWVtb3J5QmFycmllcnMgPSBidWZfYmFyLAo+ICsgICAgICAgICAgICAuYnVmZmVyTWVtb3J5 QmFycmllckNvdW50ID0gKm5iX2J1Zl9iYXIsCj4gKyAgICAgICAgfSk7Cj4gKwo+ICsgICAgdmst PkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwgMSwgY3R4LT53YXZlbGV0X2RlcHRoLCBjdHgtPm51bV94 ICoKPiBjdHgtPm51bV95KTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCB2dWxrYW5fZGlyYWNfdW5pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkgewo+ICsgICAg Ly8gRGlyYWNDb250ZXh0ICpkID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIC8vIGlmIChkLT5o d2FjY2VsX3BpY3R1cmVfcHJpdmF0ZSkgewo+ICsgICAgLy8gICAgIGF2X2ZyZWVwKGQtPmh3YWNj ZWxfcGljdHVyZV9wcml2YXRlKTsKPiArICAgIC8vIH0KPiArCj4gKyAgICBmcmVlX2NvbW1vbihh dmN0eCk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50 IHdhdmVsZXRfaW5pdChEaXJhY1Z1bGthbkRlY29kZUNvbnRleHQgKmRlYywKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGRlZrU1BJUlZDb21waWxlciAqc3B2KSB7Cj4gKyAgICBp bnQgZXJyOwo+ICsKPiArICAgIGVyciA9IGluaXRfd2F2ZWxldF9zaGRfZGF1Yjk3X2hvcml6KGRl Yywgc3B2KTsKPiArICAgIGlmIChlcnIgPCAwKSB7Cj4gKyAgICAgICAgcmV0dXJuIGVycjsKPiAr ICAgIH0KPiArCj4gKyAgICBlcnIgPSBpbml0X3dhdmVsZXRfc2hkX2RhdWI5N192ZXJ0KGRlYywg c3B2KTsKPiArICAgIGlmIChlcnIgPCAwKSB7Cj4gKyAgICAgICAgcmV0dXJuIGVycjsKPiArICAg IH0KPiArCj4gKyAgICBlcnIgPSBpbml0X3dhdmVsZXRfc2hkX2hhYXJpX3ZlcnQoZGVjLCBzcHYs IDApOwo+ICsgICAgaWYgKGVyciA8IDApIHsKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAg fQo+ICsKPiArICAgIGVyciA9IGluaXRfd2F2ZWxldF9zaGRfaGFhcmlfaG9yaXooZGVjLCBzcHYs IDApOwo+ICsgICAgaWYgKGVyciA8IDApIHsKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAg fQo+ICsKPiArICAgIGVyciA9IGluaXRfd2F2ZWxldF9zaGRfaGFhcmlfdmVydChkZWMsIHNwdiwg MSk7Cj4gKyAgICBpZiAoZXJyIDwgMCkgewo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgZXJyID0gaW5pdF93YXZlbGV0X3NoZF9oYWFyaV9ob3JpeihkZWMsIHNwdiwg MSk7Cj4gKyAgICBpZiAoZXJyIDwgMCkgewo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgZXJyID0gaW5pdF93YXZlbGV0X3NoZF9sZWdhbGxfdmVydChkZWMsIHNwdik7 Cj4gKyAgICBpZiAoZXJyIDwgMCkgewo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgZXJyID0gaW5pdF93YXZlbGV0X3NoZF9sZWdhbGxfaG9yaXooZGVjLCBzcHYpOwo+ ICsgICAgaWYgKGVyciA8IDApIHsKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAgfQo+ICsK PiArICAgIGVyciA9IGluaXRfd2F2ZWxldF9zaGRfZGQ5N192ZXJ0KGRlYywgc3B2KTsKPiArICAg IGlmIChlcnIgPCAwKSB7Cj4gKyAgICAgICAgcmV0dXJuIGVycjsKPiArICAgIH0KPiArCj4gKyAg ICBlcnIgPSBpbml0X3dhdmVsZXRfc2hkX2RkOTdfaG9yaXooZGVjLCBzcHYpOwo+ICsgICAgaWYg KGVyciA8IDApIHsKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAgfQo+ICsKPiArICAgIGVy ciA9IGluaXRfd2F2ZWxldF9zaGRfZmlkZWxpdHlfdmVydChkZWMsIHNwdik7Cj4gKyAgICBpZiAo ZXJyIDwgMCkgewo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZXJy ID0gaW5pdF93YXZlbGV0X3NoZF9maWRlbGl0eV9ob3JpeihkZWMsIHNwdik7Cj4gKyAgICBpZiAo ZXJyIDwgMCkgewo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZXJy ID0gaW5pdF93YXZlbGV0X3NoZF9kZDEzN192ZXJ0KGRlYywgc3B2KTsKPiArICAgIGlmIChlcnIg PCAwKSB7Cj4gKyAgICAgICAgcmV0dXJuIGVycjsKPiArICAgIH0KPiArCj4gKyAgICBlcnIgPSBp bml0X3dhdmVsZXRfc2hkX2RkMTM3X2hvcml6KGRlYywgc3B2KTsKPiArICAgIGlmIChlcnIgPCAw KSB7Cj4gKyAgICAgICAgcmV0dXJuIGVycjsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCB2dWxrYW5fZGlyYWNfaW5pdChBVkNvZGVjQ29udGV4dCAq YXZjdHgpCj4gK3sKPiArICAgIGludCBlcnIgPSAwOwo+ICsgICAgRGlyYWNWdWxrYW5EZWNvZGVD b250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOwo+ICsgICAg RkZWdWxrYW5Db250ZXh0ICpzOwo+ICsgICAgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdjsKPiArCj4g KyAgICBzcHYgPSBmZl92a19zcGlydl9pbml0KCk7Cj4gKyAgICBpZiAoIXNwdikgewo+ICsgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU1BJ Ui1WCj4gY29tcGlsZXIhXG4iKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsK PiArICAgIH0KPiArCj4gKyAgICBlcnIgPSBmZl9kZWNvZGVfZ2V0X2h3X2ZyYW1lc19jdHgoYXZj dHgsIEFWX0hXREVWSUNFX1RZUEVfVlVMS0FOKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAg ICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICAvKiBJbml0aWFsaXplIGNvbnRleHRzICovCj4gKyAg ICBzID0gJmRlYy0+dmtjdHg7Cj4gKwo+ICsgICAgcy0+ZnJhbWVzX3JlZiA9IGF2X2J1ZmZlcl9y ZWYoYXZjdHgtPmh3X2ZyYW1lc19jdHgpOwo+ICsgICAgcy0+ZnJhbWVzID0gKEFWSFdGcmFtZXND b250ZXh0ICopcy0+ZnJhbWVzX3JlZi0+ZGF0YTsKPiArICAgIHMtPmh3ZmMgPSBzLT5mcmFtZXMt Pmh3Y3R4Owo+ICsKPiArICAgIHMtPmRldmljZSA9IChBVkhXRGV2aWNlQ29udGV4dCAqKXMtPmZy YW1lcy0+ZGV2aWNlX3JlZi0+ZGF0YTsKPiArICAgIHMtPmh3Y3R4ID0gcy0+ZGV2aWNlLT5od2N0 eDsKPiArCj4gKyAgICBlcnIgPSBmZl92a19sb2FkX3Byb3BzKHMpOwo+ICsgICAgaWYgKGVyciA8 IDApCj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsKPiArICAgIC8qIENyZWF0ZSBxdWV1ZSBjb250 ZXh0ICovCj4gKyAgICBmZl92a19xZl9pbml0KHMsICZkZWMtPnFmLCBWS19RVUVVRV9DT01QVVRF X0JJVCk7Cj4gKwo+ICsgICAgZXJyID0gZmZfdmtfZXhlY19wb29sX2luaXQocywgJmRlYy0+cWYs ICZkZWMtPmV4ZWNfcG9vbCwgOCwgMCwgMCwgMCwKPiBOVUxMKTsKPiArCj4gKyAgICBlcnIgPSBm Zl92a19pbml0X3NhbXBsZXIoJmRlYy0+dmtjdHgsICZkZWMtPnNhbXBsZXIsIDEsCj4gVktfRklM VEVSX0xJTkVBUik7Cj4gKyAgICBpZiAoZXJyIDwgMCkgewo+ICsgICAgICAgIGdvdG8gZmFpbDsK PiArICAgIH0KPiArCj4gKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiVnVsa2Fu IGRlY29kZXIgaW5pdGlhbGl6YXRpb24KPiBzdWNlc3NmdWxcbiIpOwo+ICsKPiArICAgIGVyciA9 IGluaXRfcXVhbnRfc2hkKGRlYywgc3B2KTsKPiArICAgIGlmIChlcnIgPCAwKSB7Cj4gKyAgICAg ICAgZ290byBmYWlsOwo+ICsgICAgfQo+ICsKPiArICAgIGVyciA9IGluaXRfY3B5X3NoZChkZWMs IHNwdiwgMCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkgewo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiAr ICAgIH0KPiArCj4gKyAgICBlcnIgPSBpbml0X2NweV9zaGQoZGVjLCBzcHYsIDEpOwo+ICsgICAg aWYgKGVyciA8IDApIHsKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKwo+ICsgICAg ZXJyID0gaW5pdF9jcHlfc2hkKGRlYywgc3B2LCAyKTsKPiArICAgIGlmIChlcnIgPCAwKSB7Cj4g KyAgICAgICAgZ290byBmYWlsOwo+ICsgICAgfQo+ICsKPiArICAgIGVyciA9IHdhdmVsZXRfaW5p dChkZWMsIHNwdik7Cj4gKyAgICBpZiAoZXJyIDwgMCkgewo+ICsgICAgICBnb3RvIGZhaWw7Cj4g KyAgICB9Cj4gKwo+ICsgICAgZGVjLT5xdWFudF92YWxfYnVmX3ZrX3B0ciA9IE5VTEw7Cj4gKyAg ICBkZWMtPnNsaWNlX2J1Zl92a19wdHIgICAgID0gTlVMTDsKPiArICAgIGRlYy0+cXVhbnRfYnVm X3ZrX3B0ciAgICAgPSBOVUxMOwo+ICsKPiArICAgIGRlYy0+YXZfcXVhbnRfdmFsX2J1ZiA9IE5V TEw7Cj4gKyAgICBkZWMtPmF2X3F1YW50X2J1ZiAgICAgPSBOVUxMOwo+ICsgICAgZGVjLT5hdl9z bGljZV9idWYgICAgID0gTlVMTDsKPiArCj4gKyAgICBkZWMtPnRocmVhZF9idWZfc2l6ZSA9IDA7 Cj4gKyAgICBkZWMtPm5fc2xpY2VfYnVmcyAgICA9IDA7Cj4gKwo+ICsgICAgZXJyID0gZmZfdmtf Y3JlYXRlX2J1ZigmZGVjLT52a2N0eCwgJmRlYy0+c3ViYmFuZF9pbmZvLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKFN1YmJhbmRPZmZzZXQpICogTUFYX0RXVF9MRVZFTFMgKiAx MiwKPiBOVUxMLCBOVUxMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VT QUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19CSVQgfAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgVktfQlVGRkVSX1VTQUdFX1VOSUZPUk1fQlVGRkVSX0JJVCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX1ZJU0lCTEVfQklUIHwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklU KTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgICAg ZXJyID0gZmZfdmtfbWFwX2J1ZmZlcigmZGVjLT52a2N0eCwgJmRlYy0+c3ViYmFuZF9pbmZvLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKikmZGVjLT5zdWJiYW5kX2lu Zm9fcHRyLCAwKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4g Kwo+ICsgICAgZXJyID0gZmZfdmtfc2V0X2Rlc2NyaXB0b3JfYnVmZmVyKCZkZWMtPnZrY3R4LCAm ZGVjLT5xdWFudF9wbCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgMSwgMywgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT5z dWJiYW5kX2luZm8uYWRkcmVzcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVjLT5zdWJiYW5kX2luZm8uc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAg ICAgICByZXR1cm4gZXJyOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICsKPiArZmFpbDoKPiArICAg IGlmIChzcHYpCj4gKyAgICB7Cj4gKyAgICAgICAgc3B2LT51bmluaXQoJnNwdik7Cj4gKyAgICB9 Cj4gKyAgICB2dWxrYW5fZGlyYWNfdW5pbml0KGF2Y3R4KTsKPiArCj4gKyAgICByZXR1cm4gZXJy Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZ1bGthbl9kZWNvZGVfYm9vdHN0cmFwKEFWQ29kZWND b250ZXh0ICphdmN0eCwgQVZCdWZmZXJSZWYKPiAqZnJhbWVzX3JlZikKPiArewo+ICsgICAgaW50 IGVycjsKPiArICAgIERpcmFjVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVy bmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKPiArICAgIEFWSFdGcmFtZXNDb250ZXh0ICpmcmFtZXMg PSAoQVZIV0ZyYW1lc0NvbnRleHQgKilmcmFtZXNfcmVmLT5kYXRhOwo+ICsgICAgQVZIV0Rldmlj ZUNvbnRleHQgKmRldmljZSA9IChBVkhXRGV2aWNlQ29udGV4dAo+ICopZnJhbWVzLT5kZXZpY2Vf cmVmLT5kYXRhOwo+ICsgICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpod2N0eCA9IGRldmljZS0+ aHdjdHg7Cj4gKwo+ICsgICAgZGVjLT52a2N0eC5leHRlbnNpb25zID0KPiBmZl92a19leHRlbnNp b25zX3RvX21hc2soaHdjdHgtPmVuYWJsZWRfZGV2X2V4dGVuc2lvbnMsCj4gKwo+ICBod2N0eC0+ bmJfZW5hYmxlZF9kZXZfZXh0ZW5zaW9ucyk7Cj4gKwo+ICsgICAgZXJyID0gZmZfdmtfbG9hZF9m dW5jdGlvbnMoZGV2aWNlLCAmZGVjLT52a2N0eC52a2ZuLAo+IGRlYy0+dmtjdHguZXh0ZW5zaW9u cywgMSwgMSk7Cj4gKyAgICBpZiAoZXJyIDwgMCkgewo+ICsgICAgICAgIGZyZWVfY29tbW9uKGF2 Y3R4KTsKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZ1bGthbl9kaXJhY19mcmFtZV9wYXJhbXMoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LCBBVkJ1ZmZlclJlZgo+ICpod19mcmFtZXNfY3R4KQo+ICt7Cj4gKyAg ICBpbnQgZXJyOwo+ICsgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmZyYW1lc19jdHggPQo+IChBVkhX RnJhbWVzQ29udGV4dCopaHdfZnJhbWVzX2N0eC0+ZGF0YTsKPiArICAgIEFWVnVsa2FuRnJhbWVz Q29udGV4dCAqaHdmYyA9IGZyYW1lc19jdHgtPmh3Y3R4Owo+ICsgICAgRGlyYWNDb250ZXh0ICpz ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArCj4gKyAgICBmcmFtZXNfY3R4LT5zd19mb3JtYXQgPSBz LT5zb2ZfcGl4X2ZtdDsKPiArCj4gKyAgICBlcnIgPSB2dWxrYW5fZGVjb2RlX2Jvb3RzdHJhcChh dmN0eCwgaHdfZnJhbWVzX2N0eCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICByZXR1 cm4gZXJyOwo+ICsKPiArICAgIGZyYW1lc19jdHgtPndpZHRoICA9IGF2Y3R4LT5jb2RlZF93aWR0 aDsKPiArICAgIGZyYW1lc19jdHgtPmhlaWdodCA9IGF2Y3R4LT5jb2RlZF9oZWlnaHQ7Cj4gKyAg ICBmcmFtZXNfY3R4LT5mb3JtYXQgPSBBVl9QSVhfRk1UX1ZVTEtBTjsKPiArCj4gKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IEFWX05VTV9EQVRBX1BPSU5URVJTOyBpKyspIHsKPiArICAgICAgICBo d2ZjLT5mb3JtYXRbaV0gICAgPQo+IGF2X3ZrZm10X2Zyb21fcGl4Zm10KGZyYW1lc19jdHgtPnN3 X2Zvcm1hdClbaV07Cj4gKyAgICB9Cj4gKyAgICBod2ZjLT50aWxpbmcgICAgICAgPSBWS19JTUFH RV9USUxJTkdfTElORUFSOwo+ICsgICAgaHdmYy0+dXNhZ2UgICAgICAgID0gVktfSU1BR0VfVVNB R0VfVFJBTlNGRVJfU1JDX0JJVCB8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFH RV9VU0FHRV9TVE9SQUdFX0JJVDsKPiArCj4gKyAgICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICsK PiArc3RhdGljIHZvaWQgdnVsa2FuX2RpcmFjX2ZyZWVfZnJhbWVfcHJpdihGRlJlZlN0cnVjdE9w YXF1ZSBfaHdjdHgsIHZvaWQKPiAqZGF0YSkKPiArewo+ICsgICAgLy8gQVZIV0RldmljZUNvbnRl eHQgKmh3Y3R4ID0gX2h3Y3R4Lm5jOwo+ICsgICAgRGlyYWNWdWxrYW5EZWNvZGVQaWN0dXJlICpk cCA9IGRhdGE7Cj4gKwo+ICsgICAgLyogRnJlZSBmcmFtZSByZXNvdXJjZXMgKi8KPiArICAgIGF2 X2ZyZWUoZHApOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQgc2V0dXBfc3ViYmFuZHMoRGly YWNDb250ZXh0ICpjdHgsIERpcmFjVnVsa2FuRGVjb2RlQ29udGV4dAo+ICpkZWMpIHsKPiArICAg IFN1YmJhbmRPZmZzZXQgKm9mZnMgPSBkZWMtPnN1YmJhbmRfaW5mb19wdHI7Cj4gKyAgICBtZW1z ZXQob2ZmcywgMCwgZGVjLT5zdWJiYW5kX2luZm8uc2l6ZSk7Cj4gKwo+ICsgICAgZm9yIChpbnQg cGxhbmUgPSAwOyBwbGFuZSA8IDM7IHBsYW5lKyspIHsKPiArICAgICAgICBQbGFuZSAqcCA9ICZj dHgtPnBsYW5lW3BsYW5lXTsKPiArICAgICAgICBpbnQgdyA9IHAtPmlkd3Qud2lkdGg7Cj4gKyAg ICAgICAgaW50IHMgPSBGRkFMSUdOKHAtPmlkd3Qud2lkdGgsIDgpOwo+ICsKPiArICAgICAgICBm b3IgKGludCBsZXZlbCA9IGN0eC0+d2F2ZWxldF9kZXB0aCAtIDE7IGxldmVsID49IDA7IGxldmVs LS0pIHsKPiArICAgICAgICAgICAgdyA+Pj0gMTsKPiArICAgICAgICAgICAgcyA8PD0gMTsKPiAr ICAgICAgICAgICAgZm9yIChpbnQgb3JpZW50ID0gMDsgb3JpZW50IDwgNDsgb3JpZW50KyspIHsK PiArICAgICAgICAgICAgICAgIGNvbnN0IGludCBpZHggPSBwbGFuZSAqIE1BWF9EV1RfTEVWRUxT ICogNCArIGxldmVsICogNCArCj4gb3JpZW50Owo+ICsgICAgICAgICAgICAgICAgU3ViYmFuZE9m ZnNldCAqb2ZmID0gJm9mZnNbaWR4XTsKPiArICAgICAgICAgICAgICAgIG9mZi0+c3RyaWRlID0g czsKPiArICAgICAgICAgICAgICAgIG9mZi0+YmFzZV9vZmYgPSAwOwo+ICsKPiArICAgICAgICAg ICAgICAgIGlmIChvcmllbnQgJiAxKQo+ICsgICAgICAgICAgICAgICAgICAgIG9mZi0+YmFzZV9v ZmYgKz0gdzsKPiArICAgICAgICAgICAgICAgIGlmIChvcmllbnQgPiAxKQo+ICsgICAgICAgICAg ICAgICAgICAgIG9mZi0+YmFzZV9vZmYgKz0gKHM+PjEpOwo+ICsKPiArICAgICAgICAgICAgICAg IC8qU3ViQmFuZCAqYiA9ICZwLT5iYW5kW2xldmVsXVtvcmllbnRdOyovCj4gKyAgICAgICAgICAg ICAgICAvKmludCB3ID0gKGItPmlidWYgLSBwLT5pZHd0LmJ1ZikgPj4gKDEgKyBiLT5wc2hpZnQp OyovCj4gKyAgICAgICAgICAgICAgICAvKm9mZi0+c3RyaWRlID0gYi0+c3RyaWRlID4+ICgxICsg Yi0+cHNoaWZ0KTsqLwo+ICsgICAgICAgICAgICAgICAgLypvZmYtPmJhc2Vfb2ZmID0gdzsqLwo+ ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHZ1bGthbl9kaXJhY19zdGFydF9mcmFtZShBVkNvZGVjQ29udGV4dCAgICAgICAgICAqYXZj dHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdl91bnVzZWQgY29uc3QgdWlu dDhfdCAqYnVmZmVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfdW51c2Vk IHVpbnQzMl90ICAgICAgIHNpemUpCj4gK3sKPiArICAgIGludCBlcnI7Cj4gKyAgICBEaXJhY1Z1 bGthbkRlY29kZUNvbnRleHQgKnMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRh Owo+ICsgICAgRGlyYWNDb250ZXh0ICpjID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIERpcmFj VnVsa2FuRGVjb2RlUGljdHVyZSAqcGljID0gYy0+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7Cj4g KyAgICBXYXZlbGV0UHVzaENvbnN0ICpwQ29uc3QgPSAmcy0+cENvbnN0Owo+ICsKPiArICAgIHBp Yy0+ZnJhbWUgPSBjLT5jdXJyZW50X3BpY3R1cmU7Cj4gKyAgICBzZXR1cF9zdWJiYW5kcyhjLCBz KTsKPiArCj4gKyAgICBwQ29uc3QtPnJlYWxfcGxhbmVfZGltc1swXSA9IGMtPnBsYW5lWzBdLmlk d3Qud2lkdGg7Cj4gKyAgICBwQ29uc3QtPnJlYWxfcGxhbmVfZGltc1sxXSA9IGMtPnBsYW5lWzBd Lmlkd3QuaGVpZ2h0Owo+ICsgICAgcENvbnN0LT5yZWFsX3BsYW5lX2RpbXNbMl0gPSBjLT5wbGFu ZVsxXS5pZHd0LndpZHRoOwo+ICsgICAgcENvbnN0LT5yZWFsX3BsYW5lX2RpbXNbM10gPSBjLT5w bGFuZVsxXS5pZHd0LmhlaWdodDsKPiArICAgIHBDb25zdC0+cmVhbF9wbGFuZV9kaW1zWzRdID0g Yy0+cGxhbmVbMl0uaWR3dC53aWR0aDsKPiArICAgIHBDb25zdC0+cmVhbF9wbGFuZV9kaW1zWzVd ID0gYy0+cGxhbmVbMl0uaWR3dC5oZWlnaHQ7Cj4gKwo+ICsgICAgcENvbnN0LT5wbGFuZV9zdHJp ZGVzWzBdID0gYy0+cGxhbmVbMF0uaWR3dC53aWR0aDsKPiArICAgIHBDb25zdC0+cGxhbmVfc3Ry aWRlc1sxXSA9IGMtPnBsYW5lWzFdLmlkd3Qud2lkdGg7Cj4gKyAgICBwQ29uc3QtPnBsYW5lX3N0 cmlkZXNbMF0gPSBjLT5wbGFuZVswXS5pZHd0LndpZHRoOwo+ICsKPiArICAgIHBDb25zdC0+cGxh bmVfb2Zmc1swXSA9IDA7Cj4gKyAgICBwQ29uc3QtPnBsYW5lX29mZnNbMV0gPSBjLT5wbGFuZVsw XS5pZHd0LndpZHRoICoKPiBjLT5wbGFuZVswXS5pZHd0LmhlaWdodDsKPiArICAgIHBDb25zdC0+ cGxhbmVfb2Zmc1syXSA9IHBDb25zdC0+cGxhbmVfb2Zmc1sxXQo+ICsgICAgICAgICAgICArIGMt PnBsYW5lWzFdLmlkd3Qud2lkdGggKiBjLT5wbGFuZVsxXS5pZHd0LmhlaWdodDsKPiArCj4gKyAg ICBwQ29uc3QtPndhdmVsZXRfZGVwdGggPSBjLT53YXZlbGV0X2RlcHRoOwo+ICsKPiArICAgIGlm IChzLT5xdWFudF9idWZfdmtfcHRyID09IE5VTEwgfHwKPiArICAgICAgICAgICAgcy0+c2xpY2Vf YnVmX3ZrX3B0ciA9PSBOVUxMIHx8Cj4gKyAgICAgICAgICAgIHMtPnF1YW50X3ZhbF9idWZfdmtf cHRyID09IE5VTEwgfHwKPiArICAgICAgICAgICAgYy0+bnVtX3ggKiBjLT5udW1feSAhPSBzLT5u X3NsaWNlX2J1ZnMpIHsKPiArICAgICAgICBlcnIgPSBhbGxvY19xdWFudF9idWYoYywgcyk7Cj4g KyAgICAgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICAg ICAgZXJyID0gYWxsb2NfZGVxdWFudF9idWYoYywgcyk7Cj4gKyAgICAgICAgaWYgKGVyciA8IDAp Cj4gKyAgICAgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICAgICAgZXJyID0gYWxsb2Nfc2xpY2Vz X2J1ZihjLCBzKTsKPiArICAgICAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICAgICAgcmV0dXJu IGVycjsKPiArICAgICAgICBlcnIgPSBhbGxvY190bXBfYnVmcyhjLCBzKTsKPiArICAgICAgICBp ZiAoZXJyIDwgMCkKPiArICAgICAgICAgICAgcmV0dXJuIGVycjsKPiArICAgIH0KPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2dWxrYW5fZGlyYWNfZW5kX2ZyYW1l KEFWQ29kZWNDb250ZXh0ICphdmN0eCkgewo+ICsgICAgaW50IGVyciwgbmJfaW1nX2JhciA9IDAs IG5iX2J1Zl9iYXIgPSAwOwo+ICsgICAgRGlyYWNWdWxrYW5EZWNvZGVDb250ZXh0KmRlYyA9IGF2 Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGE7Cj4gKyAgICBEaXJhY0NvbnRleHQgKmN0 eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBWa0ltYWdlVmlldyB2aWV3c1tBVl9OVU1fREFU QV9QT0lOVEVSU107Cj4gKyAgICBWa0J1ZmZlck1lbW9yeUJhcnJpZXIyIGJ1Zl9iYXJbODBdOwo+ ICsgICAgVmtJbWFnZU1lbW9yeUJhcnJpZXIyIGltZ19iYXJbODBdOwo+ICsgICAgRGlyYWNWdWxr YW5EZWNvZGVQaWN0dXJlICpwaWMgPSBjdHgtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOwo+ICsg ICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjID0gZmZfdmtfZXhlY19nZXQoJmRlYy0+ZXhlY19wb29s KTsKPiArICAgIGVudW0gZHd0X3R5cGUgd2F2ZWxldF9pZHggPSBjdHgtPndhdmVsZXRfaWR4ICsg MjsKPiArCj4gKyAgICBmZl92a19leGVjX3N0YXJ0KCZkZWMtPnZrY3R4LCBleGVjKTsKPiArCj4g KyAgICBlcnIgPSBmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmRlYy0+dmtjdHgsIGV4ZWMsIHBp Yy0+ZnJhbWUtPmF2ZnJhbWUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpOwo+ ICsgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsKPiArICAgIGVyciA9 IGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKCZkZWMtPnZrY3R4LCBleGVjLCB2aWV3cywKPiBwaWMt PmZyYW1lLT5hdmZyYW1lKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIGdvdG8gZmFp bDsKPiArCj4gKyAgICBlcnIgPSBxdWFudF9wbF9wYXNzKGRlYywgY3R4LCBleGVjLCBidWZfYmFy LCAmbmJfYnVmX2Jhcik7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICBnb3RvIGZhaWw7 Cj4gKwo+ICsgICAgc3dpdGNoICh3YXZlbGV0X2lkeCkgewo+ICsgICAgICBjYXNlIERXVF9ESVJB Q19EQVVCOV83Ogo+ICsgICAgICAgIGVyciA9IHdhdmVsZXRfZGF1Yjk3X3Bhc3MoZGVjLCBjdHgs IGV4ZWMsIGJ1Zl9iYXIsICZuYl9idWZfYmFyKTsKPiArICAgICAgYnJlYWs7Cj4gKwo+ICsgICAg ICBjYXNlIERXVF9ESVJBQ19GSURFTElUWToKPiArICAgICAgICBlcnIgPSB3YXZlbGV0X2ZpZGVs aXR5X3Bhc3MoZGVjLCBjdHgsIGV4ZWMsIGJ1Zl9iYXIsICZuYl9idWZfYmFyKTsKPiArICAgICAg YnJlYWs7Cj4gKwo+ICsgICAgICBjYXNlIERXVF9ESVJBQ19ERDlfNzoKPiArICAgICAgICBlcnIg PSB3YXZlbGV0X2RkOTdfcGFzcyhkZWMsIGN0eCwgZXhlYywgYnVmX2JhciwgJm5iX2J1Zl9iYXIp Owo+ICsgICAgICBicmVhazsKPiArCj4gKyAgICAgIGNhc2UgRFdUX0RJUkFDX0REMTNfNzoKPiAr ICAgICAgICBlcnIgPSB3YXZlbGV0X2RkMTM3X3Bhc3MoZGVjLCBjdHgsIGV4ZWMsIGJ1Zl9iYXIs ICZuYl9idWZfYmFyKTsKPiArICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICBjYXNlIERXVF9ESVJB Q19MRUdBTEw1XzM6Cj4gKyAgICAgICAgZXJyID0gd2F2ZWxldF9sZWdhbGxfcGFzcyhkZWMsIGN0 eCwgZXhlYywgYnVmX2JhciwgJm5iX2J1Zl9iYXIpOwo+ICsgICAgICBicmVhazsKPiArCj4gKyAg ICAgIGNhc2UgRFdUX0RJUkFDX0hBQVIwOgo+ICsgICAgICAgIGVyciA9IHdhdmVsZXRfaGFhcmlf cGFzcyhkZWMsIGN0eCwgZXhlYywgYnVmX2JhciwgJm5iX2J1Zl9iYXIsIDApOwo+ICsgICAgICBi cmVhazsKPiArCj4gKyAgICAgIGNhc2UgRFdUX0RJUkFDX0hBQVIxOgo+ICsgICAgICAgIGVyciA9 IHdhdmVsZXRfaGFhcmlfcGFzcyhkZWMsIGN0eCwgZXhlYywgYnVmX2JhciwgJm5iX2J1Zl9iYXIs IDEpOwo+ICsgICAgICBicmVhazsKPiArCj4gKyAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgZXJy ID0gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gKyAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsKPiAr ICAgIGVyciA9IGNweV90b19pbWFnZV9wYXNzKGRlYywgY3R4LCBleGVjLCB2aWV3cywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zl9iYXIsICZuYl9idWZfYmFyLCBpbWdfYmFyLCAm bmJfaW1nX2JhciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgtPmJpdF9kZXB0 aCAtIDgpID4+IDEpOwo+ICsgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgZ290byBmYWlsOwo+ ICsKPiArICAgIHJldHVybiBmZl92a19leGVjX3N1Ym1pdCgmZGVjLT52a2N0eCwgZXhlYyk7Cj4g KyAgICAvKmlmIChlcnIgPCAwKSovCj4gKyAgICAvKiAgICByZXR1cm4gZXJyOyovCj4gKwo+ICsg ICAgLypmZl92a19leGVjX3dhaXQoJmRlYy0+dmtjdHgsIGV4ZWMpOyovCj4gKwo+ICtmYWlsOgo+ ICsgICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMoJmRlYy0+dmtjdHgsIGV4ZWMpOwo+ICsgICAg cmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCB2dWxrYW5fZGlyYWNfdXBkYXRlX3Ro cmVhZF9jb250ZXh0KEFWQ29kZWNDb250ZXh0ICpkc3QsIGNvbnN0Cj4gQVZDb2RlY0NvbnRleHQg KnNyYykKPiArewo+ICsgICAgLy8gaW50IGVycjsKPiArICAgIERpcmFjVnVsa2FuRGVjb2RlQ29u dGV4dCAqc3JjX2N0eCA9IHNyYy0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOwo+ICsgICAg RGlyYWNWdWxrYW5EZWNvZGVDb250ZXh0ICpkc3RfY3R4ID0gZHN0LT5pbnRlcm5hbC0+aHdhY2Nl bF9wcml2X2RhdGE7Cj4gKwo+ICsgICAgZHN0X2N0eC0+dmtjdHggPSBzcmNfY3R4LT52a2N0eDsK PiArICAgIGRzdF9jdHgtPnl1dl9zYW1wbGVyID0gc3JjX2N0eC0+eXV2X3NhbXBsZXI7Cj4gKyAg ICBkc3RfY3R4LT5zYW1wbGVyID0gc3JjX2N0eC0+c2FtcGxlcjsKPiArICAgIGRzdF9jdHgtPnFm ID0gc3JjX2N0eC0+cWY7Cj4gKyAgICBkc3RfY3R4LT5xdWFudF9wbCA9IHNyY19jdHgtPnF1YW50 X3BsOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGludCBk ZWNvZGVfaHFfc2xpY2UoY29uc3QgRGlyYWNDb250ZXh0ICpzLCBpbnQgam9ibnIpCj4gK3sKPiAr ICAgIGludCBpLCBsZXZlbCwgb3JpZW50YXRpb24sIHF1YW50X2lkeDsKPiArICAgIERpcmFjVnVs a2FuRGVjb2RlQ29udGV4dCAqZGVjID0gcy0+YXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZf ZGF0YTsKPiArICAgIGludDMyX3QgKnFmYWN0b3IgPSAmZGVjLT5xdWFudF9idWZfdmtfcHRyW2pv Ym5yICogOCAqIE1BWF9EV1RfTEVWRUxTXTsKPiArICAgIGludDMyX3QgKnFvZmZzZXQgPSAmZGVj LT5xdWFudF9idWZfdmtfcHRyW2pvYm5yICogOCAqIE1BWF9EV1RfTEVWRUxTCj4gKyA0XTsKPiAr ICAgIGludDMyX3QgKnF1YW50X3ZhbF9iYXNlID0gZGVjLT5xdWFudF92YWxfYnVmX3ZrX3B0cjsK PiArICAgIERpcmFjU2xpY2UgKnNsaWNlID0gJnMtPnNsaWNlX3BhcmFtc19idWZbam9ibnJdOwo+ ICsgICAgU2xpY2VDb2VmZlZrICpzbGljZV92ayA9ICZkZWMtPnNsaWNlX2J1Zl92a19wdHJbam9i bnIgKiAzICoKPiBNQVhfRFdUX0xFVkVMU107Cj4gKyAgICBHZXRCaXRDb250ZXh0ICpnYiA9ICZz bGljZS0+Z2I7Cj4gKwo+ICsgICAgc2tpcF9iaXRzX2xvbmcoZ2IsIDgqcy0+aGlnaHF1YWxpdHku cHJlZml4X2J5dGVzKTsKPiArICAgIHF1YW50X2lkeCA9IGdldF9iaXRzKGdiLCA4KTsKPiArCj4g KyAgICBpZiAocXVhbnRfaWR4ID4gRElSQUNfTUFYX1FVQU5UX0lOREVYIC0gMSkgewo+ICsgICAg ICAgIGF2X2xvZyhzLT5hdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBxdWFudGl6YXRpb24g aW5kZXggLQo+ICVpXG4iLCBxdWFudF9pZHgpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIFNsaWNlIHF1YW50aXphdGlvbiAoc2xp Y2VfcXVhbnRpemVycygpIGluIHRoZSBzcGVjcykgKi8KPiArICAgIGZvciAobGV2ZWwgPSAwOyBs ZXZlbCA8IHMtPndhdmVsZXRfZGVwdGg7IGxldmVsKyspIHsKPiArICAgICAgICBmb3IgKG9yaWVu dGF0aW9uID0gISFsZXZlbDsgb3JpZW50YXRpb24gPCA0OyBvcmllbnRhdGlvbisrKSB7Cj4gKyAg ICAgICAgICAgIGNvbnN0IGludCBxdWFudCA9IEZGTUFYKHF1YW50X2lkeCAtCj4gcy0+bG93ZGVs YXkucXVhbnRbbGV2ZWxdW29yaWVudGF0aW9uXSwgMCk7Cj4gKyAgICAgICAgICAgIHFmYWN0b3Jb bGV2ZWwgKiA4ICsgb3JpZW50YXRpb25dID0gZmZfZGlyYWNfcXNjYWxlX3RhYltxdWFudF07Cj4g KyAgICAgICAgICAgIHFvZmZzZXRbbGV2ZWwgKiA4ICsgb3JpZW50YXRpb25dID0KPiBmZl9kaXJh Y19xb2Zmc2V0X2ludHJhX3RhYltxdWFudF0gKyAyOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr Cj4gKyAgICAvKiBMdW1hICsgMiBDaHJvbWEgcGxhbmVzICovCj4gKyAgICBmb3IgKGkgPSAwOyBp IDwgMzsgaSsrKSB7Cj4gKyAgICAgICAgaW50IGNvZWZfbnVtLCBjb2VmX3BhcjsKPiArICAgICAg ICBpbnQ2NF90IGxlbmd0aCA9IHMtPmhpZ2hxdWFsaXR5LnNpemVfc2NhbGVyKmdldF9iaXRzKGdi LCA4KTsKPiArICAgICAgICBpbnQ2NF90IGJpdHNfZW5kID0gZ2V0X2JpdHNfY291bnQoZ2IpICsg OCpsZW5ndGg7Cj4gKyAgICAgICAgY29uc3QgdWludDhfdCAqYWRkciA9IGFsaWduX2dldF9iaXRz KGdiKTsKPiArICAgICAgICBpbnQgb2ZmcyA9IGRlYy0+c2xpY2VfdmFsc19zaXplICogKDMgKiBq b2JuciArIGkpOwo+ICsgICAgICAgIHVpbnQ4X3QgKnRtcF9idWYgPSAodWludDhfdCAqKSZxdWFu dF92YWxfYmFzZVtvZmZzXTsKPiArCj4gKyAgICAgICAgaWYgKGxlbmd0aCo4ID4gZ2V0X2JpdHNf bGVmdChnYikpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMtPmF2Y3R4LCBBVl9MT0dfRVJST1Is ICJlbmQgdG9vIGZhciBhd2F5XG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBjb2VmX251bSA9IHN1YmJhbmRf Y29lZmZzKHMsIHNsaWNlLT5zbGljZV94LCBzbGljZS0+c2xpY2VfeSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaSwgb2ZmcywgJnNsaWNlX3ZrW01BWF9EV1RfTEVWRUxT ICoKPiBpXSk7Cj4gKwo+ICsgICAgICAgIGNvZWZfcGFyID0gZmZfZGlyYWNfZ29sb21iX3JlYWRf MzJiaXQoYWRkciwgbGVuZ3RoLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0bXBfYnVmLCBjb2VmX251bSk7Cj4gKwo+ICsgICAgICAgIGlmIChjb2Vm X251bSA+IGNvZWZfcGFyKSB7Cj4gKyAgICAgICAgICAgIGNvbnN0IGludCBzdGFydF9iID0gY29l Zl9wYXIgKiBzaXplb2YoaW50MzJfdCk7Cj4gKyAgICAgICAgICAgIGNvbnN0IGludCBlbmRfYiAg ID0gY29lZl9udW0gKiBzaXplb2YoaW50MzJfdCk7Cj4gKyAgICAgICAgICAgIG1lbXNldCgmdG1w X2J1ZltzdGFydF9iXSwgMCwgZW5kX2IgLSBzdGFydF9iKTsKPiArICAgICAgICB9Cj4gKwo+ICsg ICAgICAgIHNraXBfYml0c19sb25nKGdiLCBiaXRzX2VuZCAtIGdldF9iaXRzX2NvdW50KGdiKSk7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZGVj b2RlX2hxX3NsaWNlX3JvdyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsIHZvaWQgKmFyZywgaW50Cj4g am9ibnIsIGludCB0aHJlYWRucikKPiArewo+ICsgICAgY29uc3QgRGlyYWNDb250ZXh0ICpzID0g YXZjdHgtPnByaXZfZGF0YTsKPiArICAgIGludCBpLCBqb2JuID0gcy0+bnVtX3ggKiBqb2JucjsK PiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bnVtX3g7IGkrKykgewo+ICsgICAgICAgIGRl Y29kZV9ocV9zbGljZShzLCBqb2JuKTsKPiArICAgICAgICBqb2JuKys7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdnVsa2FuX2RpcmFjX2RlY29k ZV9zbGljZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50OF90ICAqZGF0YSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90ICAgICAgICBzaXplKQo+ICt7Cj4gKyAgICBEaXJhY0NvbnRleHQgKnMg PSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsKPiArICAgIC8qYXZjdHgtPmV4ZWN1dGUyKGF2Y3R4LCBk ZWNvZGVfaHFfc2xpY2Vfcm93LCBOVUxMLCBOVUxMLCBzLT5udW1feSk7Ki8KPiArICAgIGZvciAo aW50IGkgPSAwOyBpIDwgcy0+bnVtX3k7IGkrKykgewo+ICsgICAgICAgIGRlY29kZV9ocV9zbGlj ZV9yb3coYXZjdHgsIE5VTEwsIGksIDApOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtjb25zdCBGRkhXQWNjZWwgZmZfZGlyYWNfdnVsa2FuX2h3YWNjZWwgPSB7Cj4g KyAgICAucC5uYW1lICAgICAgICAgICAgICAgID0gImRpcmFjX3Z1bGthbiIsCj4gKyAgICAucC50 eXBlICAgICAgICAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAo+ICsgICAgLnAuaWQgICAg ICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0RJUkFDLAo+ICsgICAgLnAucGl4X2ZtdCAgICAg ICAgICAgICA9IEFWX1BJWF9GTVRfVlVMS0FOLAo+ICsgICAgLnN0YXJ0X2ZyYW1lICAgICAgICAg ICA9ICZ2dWxrYW5fZGlyYWNfc3RhcnRfZnJhbWUsCj4gKyAgICAuZW5kX2ZyYW1lICAgICAgICAg ICAgID0gJnZ1bGthbl9kaXJhY19lbmRfZnJhbWUsCj4gKyAgICAuZGVjb2RlX3NsaWNlICAgICAg ICAgID0gJnZ1bGthbl9kaXJhY19kZWNvZGVfc2xpY2UsCj4gKyAgICAuZnJlZV9mcmFtZV9wcml2 ICAgICAgID0gJnZ1bGthbl9kaXJhY19mcmVlX2ZyYW1lX3ByaXYsCj4gKyAgICAudW5pbml0ICAg ICAgICAgICAgICAgID0gJnZ1bGthbl9kaXJhY191bmluaXQsCj4gKyAgICAuaW5pdCAgICAgICAg ICAgICAgICAgID0gJnZ1bGthbl9kaXJhY19pbml0LAo+ICsgICAgLmZyYW1lX3BhcmFtcyAgICAg ICAgICA9ICZ2dWxrYW5fZGlyYWNfZnJhbWVfcGFyYW1zLAo+ICsgICAgLmZyYW1lX3ByaXZfZGF0 YV9zaXplICA9IHNpemVvZihEaXJhY1Z1bGthbkRlY29kZVBpY3R1cmUpLAo+ICsgICAgLmRlY29k ZV9wYXJhbXMgICAgICAgICA9ICZmZl92a19wYXJhbXNfaW52YWxpZGF0ZSwKPiArICAgIC5mbHVz aCAgICAgICAgICAgICAgICAgPSAmZmZfdmtfZGVjb2RlX2ZsdXNoLAo+ICsgICAgLnVwZGF0ZV90 aHJlYWRfY29udGV4dCA9ICZ2dWxrYW5fZGlyYWNfdXBkYXRlX3RocmVhZF9jb250ZXh0LAo+ICsg ICAgLnByaXZfZGF0YV9zaXplICAgICAgICA9IHNpemVvZihEaXJhY1Z1bGthbkRlY29kZUNvbnRl eHQpLAo+ICsgICAgLmNhcHNfaW50ZXJuYWwgICAgICAgICA9IEhXQUNDRUxfQ0FQX0FTWU5DX1NB RkUgfAo+IEhXQUNDRUxfQ0FQX1RIUkVBRF9TQUZFLAo+ICt9Owo+IC0tCj4gMi40Ni4wCj4KPgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2 ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxp bmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBz dWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==