From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 3FC604F170 for ; Sat, 17 May 2025 04:09:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id EDF6F68D509; Sat, 17 May 2025 07:09:18 +0300 (EEST) Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id C6C5068CA72 for ; Sat, 17 May 2025 07:09:11 +0300 (EEST) Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-7370a2d1981so2325670b3a.2 for ; Fri, 16 May 2025 21:09:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747454949; x=1748059749; darn=ffmpeg.org; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :from:to:cc:subject:date:message-id:reply-to; bh=tK0/CWjG7bQqgwQK5IVJRC9GhahRUZm6ktW/SVkUNgQ=; b=FmbtIAwJnCuWu9Oc5LOi1dAzyxVj55MZzRnpAVHiI7xz9kuWcB7TsDeEKej1nFZ1N4 1rvqTiepIFXzNRpmW7ZWUmpy1jFk+BPvJFbT7UAOrLqmoDEEkjS6Lras1k94q7xSQoAx b0AEhodU5rWcYs3MXOTzF4HX10bYYeh+fTT21U2MaGzDioqWzlwiXOxhfXHOPS5us3c1 H81KjF2gJPLasqtpkr9OPB+yCpv3ytBwmcl6XE/5o1MwUQ3I3geqHgMUTfUFZRI70OxF 4so8FoSUkQ3050i9vbbRCxmSjiA1mcgPfPJtn0cGaRDB486SHA/y8jaosMlAl2CScnpe d7RA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747454949; x=1748059749; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tK0/CWjG7bQqgwQK5IVJRC9GhahRUZm6ktW/SVkUNgQ=; b=F10U8X4xHR3vKIOwMcLoJw5vygGnnw1tqgP2Y//Pdb4wtWYLvimdD4jJozDX1zcdqG esIVigxOxaDG7O0vOq4PHhZMm00xzkufBk0W0fW5sa0Gax+ea4Gco38GsBVSXHh0ti+U 8M0D+vyV8r2QQvLyLG8EGHJr5+RmiF3tyfAVskl52zb9TCsS/yhxkf/8fLTJzmOgdVTM 4l380X6Coykcz4rQSdM4nlBDoBfippRMo5q4zsHw9uerVXr30xCNhtltHAvK7ySjZZed QsdoL/XCX9a1OUyiB1A1f55gjDKRslakBN88pGEdGRTf0opAqqPLZpp0f3h2z0yiAfO/ 6ijQ== X-Gm-Message-State: AOJu0YzOqN9tngQ3CoqL+Cj1/mDjMslKCy3gjI5A0/J0iuBAP2lgDWrh W5yzOj3hr88I4oXPkrfqr4NXcXPKUQoYiiwAcVNFapH97PmJxZXzQr67ENJof/huAvg= X-Gm-Gg: ASbGncuY9ivkuPhhWzFgTPDsWATEtMKtsNhn4tOlRY8WzAeAelhRulmvTvHy9dEz9YL jszDDS1Hrmv7DBnlcxNXBdo83rIYFkBGrXcn4bGvfs+Vwh1XgV6AWYyRbBo1nxlO0IniWSAknaG 2N7WICZqcuuvQhY/dJu9kJZzfaYhWpBM/7De3ov59+J+JCwhZOb1ZHZ9uD4FPa73PUlZDjWOK8r w+kYccPkfV2RDG4OxxGN0lMdAqlPGwuiE1VoeVPqo4ufYMM5sMzFzdgeYacdKm2C8U38QP4Z5GO 9633Hxm70FQI8+PIo3kl7gsfWHdmdke47dBVk41TnBNdRBPvy2OIdRrpVwK/uWQD X-Google-Smtp-Source: AGHT+IGeYqQyO7a3y3uTMQlfIcYkoRUesh7DvL51W0EkfIhHpzDJ9NJmDN4G0c9DdqdzU5rzLD/Ihw== X-Received: by 2002:a05:6a20:5484:b0:1f5:8de8:3b1a with SMTP id adf61e73a8af0-2170cc65e30mr8465505637.13.1747454948058; Fri, 16 May 2025 21:09:08 -0700 (PDT) Received: from smtpclient.apple ([23.247.137.216]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a96dfa01sm2305314b3a.27.2025.05.16.21.09.05 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 16 May 2025 21:09:07 -0700 (PDT) From: Jack Lau Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3776.700.51.11.1\)) Date: Sat, 17 May 2025 12:08:53 +0800 References: To: FFmpeg development discussions and patches In-Reply-To: Message-Id: <98786429-4E81-4B62-B567-390206712C98@gmail.com> X-Mailer: Apple Mail (2.3776.700.51.11.1) X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v2] avformat/whip: Add WHIP muxer support for subsecond latency streaming 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: Cgo+IE9uIE1heSAxNywgMjAyNSwgYXQgMTE6MTYsIEphY2sgTGF1IHZpYSBmZm1wZWctZGV2ZWwg PGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnPiB3cm90ZToKPiAKPiAwLiBXSElQIFZlcnNpb24gMi4K PiAxLiBUaGUgV0hJUCBtdXhlciBoYXMgYmVlbiByZW5hbWVkIGFuZCByZWZpbmVkLCB3aXRoIGlt cHJvdmVkIGxvZ2dpbmcgY29udGV4dCBhbmQgZXJyb3IgbWVzc2FnZXMgZm9yIFNTTCwgRFRMUywg YW5kIFJUQy4KPiAyLiBNYWdpYyBudW1iZXJzIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIG1hY3Jv cyBhbmQgZXh0cmFjdGVkIHRvIGZ1bmN0aW9ucywgYW5kIGxvZyBsZXZlbHMgaGF2ZSBiZWVuIGFs dGVyZWQgZm9yIGJldHRlciBjbGFyaXR5Lgo+IDMuIERUTFMgY3VydmUgbGlzdCBoYXMgYmVlbiB1 cGRhdGVkLCBhbmQgU1JUUCBwcm9maWxlIG5hbWVzIGhhdmUgYmVlbiByZWZpbmVkIGZvciBGRm1w ZWcgYW5kIE9wZW5TU0wuCj4gNC4gSUNFIFNUVU4gbWFnaWMgbnVtYmVyIGhhcyBiZWVuIHJlZmlu ZWQsIGFuZCBSVFAgcGF5bG9hZCB0eXBlcyBoYXZlIGJlZW4gdXBkYXRlZCBiYXNlZCBvbiBDaHJv bWUncyBkZWZpbml0aW9uLgo+IDUuIEZpeGVkIGZyYW1lIHNpemUgaGFzIGJlZW4gcmVmaW5lZCB0 byBydGMtPmF1ZGlvX3Bhci0+ZnJhbWVfc2l6ZSwgYW5kIGgyNjRfbXA0dG9hbm5leGIgaXMgbm93 IHVzZWQgdG8gY29udmVydCBNUDQvSVNPTSB0byBhbm5leGIuCj4gNi4gT1BVUyB0aW1lc3RhbXAg aXNzdWUgaGFzIGJlZW4gYWRkcmVzc2VkLCBhbmQgbWFya2VyIHNldHRpbmcgaGFzIGJlZW4gY29y cmVjdGVkIGFmdGVyIHV0aWxpemluZyBCU0YuCj4gNy4gRFRMUyBoYW5kc2hha2UgYW5kIElDRSBo YW5kbGluZyBoYXZlIGJlZW4gb3B0aW1pemVkIGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZSwgd2l0 aCBhIHNpbmdsZSBoYW5kc2hha2UgdGltZW91dCBhbmQgc2VydmVyIHJvbGUgdG8gcHJldmVudCBB UlEuCj4gOC4gQ29uc29saWRhdGVkIElDRSByZXF1ZXN0L3Jlc3BvbnNlIGhhbmRsaW5nIGFuZCBE VExTIGhhbmRzaGFrZSBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uLCBhbmQgZml4ZWQgT3BlblNTTCBi dWlsZCBlcnJvcnMgdG8gd29yayB3aXRoIFBpb24uCj4gOS4gTWVyZ2UgVExTICYgRFRMUyBpbXBs ZW1lbnRhdGlvbiwgc2hhcmVkIEJJTyBjYWxsYmFja3MsIHJlYWQsIHdyaXRlLCBwcmludF9zc2xf ZXJyb3IsIG9wZW5zc2xfaW5pdF9jYV9rZXlfY2VydCwgaW5pdF9iaW9fbWV0aG9kIGZ1bmN0aW9u IGFuZCBzaGFyZWQgc2FtZSBkYXRhIHN0cnVjdHVyZQo+IAo+IENvLWF1dGhvcmVkLWJ5OiB3aW5s aW4gPHdpbmxpbnZpcEBnbWFpbC5jb20+Cj4gQ28tYXV0aG9yZWQtYnk6IHlhbmdydGMgPHlhbmdy dGNAYWxpeXVuLmNvbT4KPiBDby1hdXRob3JlZC1ieTogY2xvdWR3ZWJydGMgPGR1YW53ZWl3ZWkx OTgyQGdtYWlsLmNvbT4KPiBDby1hdXRob3JlZC1ieTogSGFpYm8gQ2hlbiA8NDk1ODEwMjQyQHFx LmNvbT4KPiBDby1hdXRob3JlZC1ieTogU3RldmVuIExpdSA8bHFAY2hpbmFmZm1wZWcub3JnPgo+ IENvLWF1dGhvcmVkLWJ5OiBKdW4gWmhhbyA8YmFycnlqemhhb0B0ZW5jZW50LmNvbT4KPiBTaWdu ZWQtb2ZmLWJ5OiBKYWNrIExhdSA8amFja2xhdTEyMjJAcXEuY29tPgo+IC0tLQo+IGNvbmZpZ3Vy ZSAgICAgICAgICAgICAgICAgfCAgIDEwICsKPiBkb2MvbXV4ZXJzLnRleGkgICAgICAgICAgIHwg ICA0NyArCj4gbGliYXZmb3JtYXQvTWFrZWZpbGUgICAgICB8ICAgIDEgKwo+IGxpYmF2Zm9ybWF0 L2FsbGZvcm1hdHMuYyAgfCAgICAxICsKPiBsaWJhdmZvcm1hdC9hdmlvLmMgICAgICAgIHwgICAg NSArLQo+IGxpYmF2Zm9ybWF0L2h0dHAuYyAgICAgICAgfCAgICA2ICsKPiBsaWJhdmZvcm1hdC9o dHRwLmggICAgICAgIHwgICAgMiArCj4gbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMgICB8ICAgIDEg Kwo+IGxpYmF2Zm9ybWF0L3NydHAuaCAgICAgICAgfCAgICA0ICstCj4gbGliYXZmb3JtYXQvdGxz LmMgICAgICAgICB8ICAgNzAgKy0KPiBsaWJhdmZvcm1hdC90bHMuaCAgICAgICAgIHwgICA1OCAr LQo+IGxpYmF2Zm9ybWF0L3Rsc19vcGVuc3NsLmMgfCAgODU3ICsrKysrKysrKysrKysrKystCj4g bGliYXZmb3JtYXQvd2hpcC5jICAgICAgICB8IDE5MTcgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+IDEzIGZpbGVzIGNoYW5nZWQsIDI5MjMgaW5zZXJ0aW9ucygrKSwgNTYg ZGVsZXRpb25zKC0pCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L3doaXAuYwo+IAo+ IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPiBpbmRleCAwNjA5ZGFjNGFiLi44 ODcxNGFjMjFkIDEwMDc1NQo+IC0tLSBhL2NvbmZpZ3VyZQo+ICsrKyBiL2NvbmZpZ3VyZQo+IEBA IC0zNzQ3LDYgKzM3NDcsOCBAQCB3YXZfZGVtdXhlcl9zZWxlY3Q9InJpZmZkZWMiCj4gd2F2X211 eGVyX3NlbGVjdD0icmlmZmVuYyIKPiB3ZWJtX2NodW5rX211eGVyX3NlbGVjdD0id2VibV9tdXhl ciIKPiB3ZWJtX2Rhc2hfbWFuaWZlc3RfZGVtdXhlcl9zZWxlY3Q9Im1hdHJvc2thX2RlbXV4ZXIi Cj4gKyMgVE9ETzogU3VwcG9ydCBsaWJ0bHMsIG1iZWR0bHMsIGFuZCBnbnV0bHMuCj4gK3doaXBf bXV4ZXJfZGVwc19hbnk9Im9wZW5zc2wiCj4gd3R2X2RlbXV4ZXJfc2VsZWN0PSJtcGVndHNfZGVt dXhlciByaWZmZGVjIgo+IHd0dl9tdXhlcl9zZWxlY3Q9Im1wZWd0c19tdXhlciByaWZmZW5jIgo+ IHhtdl9kZW11eGVyX3NlbGVjdD0icmlmZmRlYyIKPiBAQCAtNzE5Miw2ICs3MTk0LDE0IEBAIGVu YWJsZWQgcmttcHAgICAgICAgICAgICAgJiYgeyByZXF1aXJlX3BrZ19jb25maWcgcmttcHAgcm9j a2NoaXBfbXBwICByb2NrY2hpcC9yCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4g ZW5hYmxlZCB2YXBvdXJzeW50aCAgICAgICAmJiByZXF1aXJlX2hlYWRlcnMgInZhcG91cnN5bnRo L1ZTU2NyaXB0NC5oIHZhcG91cnN5bnRoL1ZhcG91clN5bnRoNC5oIgo+IAo+ICtlbmFibGVkIG9w ZW5zc2wgICAgICAgICAgICAmJiB7Cj4gKyAgICBlbmFibGVkIHdoaXBfbXV4ZXIgJiYgewo+ICsg ICAgICAgICRwa2dfY29uZmlnIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJvcGVuc3NsID49IDEu MC4xayIgfHwKPiArICAgICAgICByZXF1aXJlX3BrZ19jb25maWcgb3BlbnNzbCAib3BlbnNzbCA+ PSAxLjAuMWsiIG9wZW5zc2wvc3NsLmggU1NMX2xpYnJhcnlfaW5pdCB8fAo+ICsgICAgICAgIHJl cXVpcmVfcGtnX2NvbmZpZyBvcGVuc3NsICJvcGVuc3NsID49IDEuMC4xayIgb3BlbnNzbC9zc2wu aCBPUEVOU1NMX2luaXRfc3NsCj4gKyAgICB9Cj4gK30KPiArCj4gCj4gaWYgZW5hYmxlZCBnY3J5 cHQ7IHRoZW4KPiAgICAgR0NSWVBUX0NPTkZJRz0iJHtjcm9zc19wcmVmaXh9bGliZ2NyeXB0LWNv bmZpZyIKPiBkaWZmIC0tZ2l0IGEvZG9jL211eGVycy50ZXhpIGIvZG9jL211eGVycy50ZXhpCj4g aW5kZXggMDRiN2YyMGI3ZS4uMzBjOTVjM2QzNCAxMDA2NDQKPiAtLS0gYS9kb2MvbXV4ZXJzLnRl eGkKPiArKysgYi9kb2MvbXV4ZXJzLnRleGkKPiBAQCAtMzg3OSw0ICszODc5LDUxIEBAIGZmbXBl ZyAtZiB3ZWJtX2Rhc2hfbWFuaWZlc3QgLWkgdmlkZW8xLndlYm0gXAo+ICAgICAgICBtYW5pZmVz dC54bWwKPiBAZW5kIGV4YW1wbGUKPiAKPiArQGFuY2hvcnt3aGlwfQo+ICtAc2VjdGlvbiB3aGlw Cj4gKwo+ICtXZWJSVEMgKFJlYWwtVGltZSBDb21tdW5pY2F0aW9uKSBtdXhlciB0aGF0IHN1cHBv cnRzIHN1Yi1zZWNvbmQgbGF0ZW5jeSBzdHJlYW1pbmcgYWNjb3JkaW5nIHRvCj4gK3RoZSBXSElQ IChXZWJSVEMtSFRUUCBpbmdlc3Rpb24gcHJvdG9jb2wpIHNwZWNpZmljYXRpb24uCj4gKwo+ICtJ dCB1c2VzIEhUVFAgYXMgYSBzaWduYWxpbmcgcHJvdG9jb2wgdG8gZXhjaGFuZ2UgU0RQIGNhcGFi aWxpdGllcyBhbmQgSUNFIGxpdGUgY2FuZGlkYXRlcy4gVGhlbiwKPiAraXQgdXNlcyBTVFVOIGJp bmRpbmcgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyB0byBlc3RhYmxpc2ggYSBzZXNzaW9uIG92ZXIg VURQLiBTdWJzZXF1ZW50bHksIGl0Cj4gK2luaXRpYXRlcyBhIERUTFMgaGFuZHNoYWtlIHRvIGV4 Y2hhbmdlIHRoZSBTUlRQIGVuY3J5cHRpb24ga2V5cy4gTGFzdGx5LCBpdCBzcGxpdHMgdmlkZW8g YW5kCj4gK2F1ZGlvIGZyYW1lcyBpbnRvIFJUUCBwYWNrZXRzIGFuZCBlbmNyeXB0cyB0aGVtIHVz aW5nIFNSVFAuCj4gKwo+ICtFbnN1cmUgdGhhdCB5b3UgdXNlIEguMjY0IHdpdGhvdXQgQiBmcmFt ZXMgYW5kIE9wdXMgZm9yIHRoZSBhdWRpbyBjb2RlYy4gRm9yIGV4YW1wbGUsIHRvIGNvbnZlcnQK PiArYW4gaW5wdXQgZmlsZSB3aXRoIEBjb21tYW5ke2ZmbXBlZ30gdG8gV2ViUlRDOgo+ICtAZXhh bXBsZQo+ICtmZm1wZWcgLXJlIC1pIGlucHV0Lm1wNCAtYWNvZGVjIGxpYm9wdXMgLWFyIDQ4MDAw IC1hYyAyIFwKPiArICAtdmNvZGVjIGxpYngyNjQgLXByb2ZpbGU6diBiYXNlbGluZSAtdHVuZSB6 ZXJvbGF0ZW5jeSAtdGhyZWFkcyAxIC1iZiAwIFwKPiArICAtZiB3aGlwICJodHRwOi8vbG9jYWxo b3N0OjE5ODUvcnRjL3YxL3doaXAvP2FwcD1saXZlJnN0cmVhbT1saXZlc3RyZWFtIgo+ICtAZW5k IGV4YW1wbGUKPiArCj4gK0ZvciB0aGlzIGV4YW1wbGUsIHdlIGhhdmUgZW1wbG95ZWQgbG93IGxh dGVuY3kgb3B0aW9ucywgcmVzdWx0aW5nIGluIGFuIGVuZC10by1lbmQgbGF0ZW5jeSBvZgo+ICth cHByb3hpbWF0ZWx5IDE1MG1zLgo+ICsKPiArQHN1YnNlY3Rpb24gT3B0aW9ucwo+ICsKPiArVGhp cyBtdXhlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6Cj4gKwo+ICtAdGFibGUgQG9w dGlvbgo+ICsKPiArQGl0ZW0gaGFuZHNoYWtlX3RpbWVvdXQgQHZhcntpbnRlZ2VyfQo+ICtTZXQg dGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBJQ0UgYW5kIERUTFMgaGFuZHNoYWtlLgo+ ICtEZWZhdWx0IHZhbHVlIGlzIDUwMDAuCj4gKwo+ICtAaXRlbSBwa3Rfc2l6ZSBAdmFye2ludGVn ZXJ9Cj4gK1NldCB0aGUgbWF4aW11bSBzaXplLCBpbiBieXRlcywgb2YgUlRQIHBhY2tldHMgdGhh dCBzZW5kIG91dC4KPiArRGVmYXVsdCB2YWx1ZSBpcyAxNTAwLgo+ICsKPiArQGl0ZW0gYXV0aG9y aXphdGlvbiBAdmFye3N0cmluZ30KPiArVGhlIG9wdGlvbmFsIEJlYXJlciB0b2tlbiBmb3IgV0hJ UCBBdXRob3JpemF0aW9uLgo+ICsKPiArQGl0ZW0gY2VydF9maWxlIEB2YXJ7c3RyaW5nfQo+ICtU aGUgb3B0aW9uYWwgY2VydGlmaWNhdGUgZmlsZSBwYXRoIGZvciBEVExTLgo+ICsKPiArQGl0ZW0g a2V5X2ZpbGUgQHZhcntzdHJpbmd9Cj4gK1RoZSBvcHRpb25hbCBwcml2YXRlIGtleSBmaWxlIHBh dGggZm9yIERUTFMuCj4gKwo+ICtAZW5kIHRhYmxlCj4gKwo+IEBjIG1hbiBlbmQgTVVYRVJTCj4g ZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUK PiBpbmRleCA2Yzk5OTJhZGFiLi45NmE2NDMwMTU4IDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0 L01ha2VmaWxlCj4gKysrIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiBAQCAtNjM3LDYgKzYzNyw3 IEBAIE9CSlMtJChDT05GSUdfV0VCTV9DSFVOS19NVVhFUikgICAgICAgICAgKz0gd2VibV9jaHVu ay5vCj4gT0JKUy0kKENPTkZJR19XRUJQX01VWEVSKSAgICAgICAgICAgICAgICArPSB3ZWJwZW5j Lm8KPiBPQkpTLSQoQ09ORklHX1dFQlZUVF9ERU1VWEVSKSAgICAgICAgICAgICs9IHdlYnZ0dGRl Yy5vIHN1YnRpdGxlcy5vCj4gT0JKUy0kKENPTkZJR19XRUJWVFRfTVVYRVIpICAgICAgICAgICAg ICArPSB3ZWJ2dHRlbmMubwo+ICtPQkpTLSQoQ09ORklHX1dISVBfTVVYRVIpICAgICAgICAgICAg ICAgICs9IHdoaXAubyBhdmMubyBodHRwLm8gc3J0cC5vIHRsc19vcGVuc3NsLm8KPiBPQkpTLSQo Q09ORklHX1dTQVVEX0RFTVVYRVIpICAgICAgICAgICAgICs9IHdlc3R3b29kX2F1ZC5vCj4gT0JK Uy0kKENPTkZJR19XU0FVRF9NVVhFUikgICAgICAgICAgICAgICArPSB3ZXN0d29vZF9hdWRlbmMu bwo+IE9CSlMtJChDT05GSUdfV1NEX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gd3NkZGVjLm8g cmF3ZGVjLm8KPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIGIvbGliYXZm b3JtYXQvYWxsZm9ybWF0cy5jCj4gaW5kZXggYjVhMjNmOWMxNy4uM2U1ZjEyN2RjMSAxMDA2NDQK PiAtLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiArKysgYi9saWJhdmZvcm1hdC9hbGxm b3JtYXRzLmMKPiBAQCAtNTE3LDYgKzUxNyw3IEBAIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1h dCBmZl93ZWJwX211eGVyOwo+IGV4dGVybiBjb25zdCBGRklucHV0Rm9ybWF0ICBmZl93ZWJ2dHRf ZGVtdXhlcjsKPiBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfd2VidnR0X211eGVyOwo+ IGV4dGVybiBjb25zdCBGRklucHV0Rm9ybWF0ICBmZl93c2F1ZF9kZW11eGVyOwo+ICtleHRlcm4g Y29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfd2hpcF9tdXhlcjsKPiBleHRlcm4gY29uc3QgRkZPdXRw dXRGb3JtYXQgZmZfd3NhdWRfbXV4ZXI7Cj4gZXh0ZXJuIGNvbnN0IEZGSW5wdXRGb3JtYXQgIGZm X3dzZF9kZW11eGVyOwo+IGV4dGVybiBjb25zdCBGRklucHV0Rm9ybWF0ICBmZl93c3ZxYV9kZW11 eGVyOwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hdmlvLmMgYi9saWJhdmZvcm1hdC9hdmlv LmMKPiBpbmRleCBkMTA5ZjNhZGZmLi5iMTQ2YWM5ZjE5IDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9y bWF0L2F2aW8uYwo+ICsrKyBiL2xpYmF2Zm9ybWF0L2F2aW8uYwo+IEBAIC0zMzksOCArMzM5LDkg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBVUkxQcm90b2NvbCAqdXJsX2ZpbmRfcHJvdG9jb2woY29u c3QgY2hhciAqZmlsZW5hbWUpCj4gICAgICAgICB9Cj4gICAgIH0KPiAgICAgYXZfZnJlZXAoJnBy b3RvY29scyk7Cj4gLSAgICBpZiAoYXZfc3Ryc3RhcnQoZmlsZW5hbWUsICJodHRwczoiLCBOVUxM KSB8fCBhdl9zdHJzdGFydChmaWxlbmFtZSwgInRsczoiLCBOVUxMKSkKPiAtICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX1dBUk5JTkcsICJodHRwcyBwcm90b2NvbCBub3QgZm91bmQsIHJlY29t cGlsZSBGRm1wZWcgd2l0aCAiCj4gKyAgICBpZiAoYXZfc3Ryc3RhcnQoZmlsZW5hbWUsICJodHRw czoiLCBOVUxMKSB8fCBhdl9zdHJzdGFydChmaWxlbmFtZSwgInRsczoiLCBOVUxMKSB8fAo+ICsg ICAgICAgIGF2X3N0cnN0YXJ0KGZpbGVuYW1lLCAiZHRsczoiLCBOVUxMKSkKPiArICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX1dBUk5JTkcsICJodHRwcyBvciBkdGxzIHByb3RvY29sIG5vdCBm b3VuZCwgcmVjb21waWxlIEZGbXBlZyB3aXRoICIKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIm9wZW5zc2wsIGdudXRscyBvciBzZWN1cmV0cmFuc3BvcnQgZW5hYmxlZC5c biIpOwo+IAo+ICAgICByZXR1cm4gTlVMTDsKPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaHR0 cC5jIGIvbGliYXZmb3JtYXQvaHR0cC5jCj4gaW5kZXggZjdiMmE4YTAyOS4uZmY2M2MyNTk2OSAx MDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9odHRwLmMKPiArKysgYi9saWJhdmZvcm1hdC9odHRw LmMKPiBAQCAtNTYyLDYgKzU2MiwxMiBAQCBpbnQgZmZfaHR0cF9hdmVycm9yKGludCBzdGF0dXNf Y29kZSwgaW50IGRlZmF1bHRfYXZlcnJvcikKPiAgICAgICAgIHJldHVybiBkZWZhdWx0X2F2ZXJy b3I7Cj4gfQo+IAo+ICtjb25zdCBjaGFyKiBmZl9odHRwX2dldF9uZXdfbG9jYXRpb24oVVJMQ29u dGV4dCAqaCkKPiArewo+ICsgICAgSFRUUENvbnRleHQgKnMgPSBoLT5wcml2X2RhdGE7Cj4gKyAg ICByZXR1cm4gcy0+bmV3X2xvY2F0aW9uOwo+ICt9Cj4gKwo+IHN0YXRpYyBpbnQgaHR0cF93cml0 ZV9yZXBseShVUkxDb250ZXh0KiBoLCBpbnQgc3RhdHVzX2NvZGUpCj4gewo+ICAgICBpbnQgcmV0 LCBib2R5ID0gMCwgcmVwbHlfY29kZSwgbWVzc2FnZV9sZW47Cj4gZGlmZiAtLWdpdCBhL2xpYmF2 Zm9ybWF0L2h0dHAuaCBiL2xpYmF2Zm9ybWF0L2h0dHAuaAo+IGluZGV4IDVmNjUwZWYxNDMuLmQx YjY5MTgyNmIgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmb3JtYXQvaHR0cC5oCj4gKysrIGIvbGliYXZm b3JtYXQvaHR0cC5oCj4gQEAgLTYyLDQgKzYyLDYgQEAgaW50IGZmX2h0dHBfZG9fbmV3X3JlcXVl c3QyKFVSTENvbnRleHQgKmgsIGNvbnN0IGNoYXIgKnVyaSwgQVZEaWN0aW9uYXJ5ICoqb3B0aW8K PiAKPiBpbnQgZmZfaHR0cF9hdmVycm9yKGludCBzdGF0dXNfY29kZSwgaW50IGRlZmF1bHRfYXZl cnJvcik7Cj4gCj4gK2NvbnN0IGNoYXIqIGZmX2h0dHBfZ2V0X25ld19sb2NhdGlvbihVUkxDb250 ZXh0ICpoKTsKPiArCj4gI2VuZGlmIC8qIEFWRk9STUFUX0hUVFBfSCAqLwo+IGRpZmYgLS1naXQg YS9saWJhdmZvcm1hdC9wcm90b2NvbHMuYyBiL2xpYmF2Zm9ybWF0L3Byb3RvY29scy5jCj4gaW5k ZXggOTNhNmQ2NzI2MS4uZDM5NDQ1NGQ0MSAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9wcm90 b2NvbHMuYwo+ICsrKyBiL2xpYmF2Zm9ybWF0L3Byb3RvY29scy5jCj4gQEAgLTYyLDYgKzYyLDcg QEAgZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX3N1YmZpbGVfcHJvdG9jb2w7Cj4gZXh0ZXJu IGNvbnN0IFVSTFByb3RvY29sIGZmX3RlZV9wcm90b2NvbDsKPiBleHRlcm4gY29uc3QgVVJMUHJv dG9jb2wgZmZfdGNwX3Byb3RvY29sOwo+IGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl90bHNf cHJvdG9jb2w7Cj4gK2V4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl9kdGxzX3Byb3RvY29sOwo+ IGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl91ZHBfcHJvdG9jb2w7Cj4gZXh0ZXJuIGNvbnN0 IFVSTFByb3RvY29sIGZmX3VkcGxpdGVfcHJvdG9jb2w7Cj4gZXh0ZXJuIGNvbnN0IFVSTFByb3Rv Y29sIGZmX3VuaXhfcHJvdG9jb2w7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3NydHAuaCBi L2xpYmF2Zm9ybWF0L3NydHAuaAo+IGluZGV4IDMxODlmOGY1NGIuLjM1MjI0Y2M5YmEgMTAwNjQ0 Cj4gLS0tIGEvbGliYXZmb3JtYXQvc3J0cC5oCj4gKysrIGIvbGliYXZmb3JtYXQvc3J0cC5oCj4g QEAgLTI3LDcgKzI3LDcgQEAKPiBzdHJ1Y3QgQVZBRVM7Cj4gc3RydWN0IEFWSE1BQzsKPiAKPiAt c3RydWN0IFNSVFBDb250ZXh0IHsKPiArdHlwZWRlZiBzdHJ1Y3QgU1JUUENvbnRleHQgewo+ICAg ICBzdHJ1Y3QgQVZBRVMgKmFlczsKPiAgICAgc3RydWN0IEFWSE1BQyAqaG1hYzsKPiAgICAgaW50 IHJ0cF9obWFjX3NpemUsIHJ0Y3BfaG1hY19zaXplOwo+IEBAIC00MCw3ICs0MCw3IEBAIHN0cnVj dCBTUlRQQ29udGV4dCB7Cj4gICAgIHVpbnQzMl90IHJvYzsKPiAKPiAgICAgdWludDMyX3QgcnRj cF9pbmRleDsKPiAtfTsKPiArfSBTUlRQQ29udGV4dDsKPiAKPiBpbnQgZmZfc3J0cF9zZXRfY3J5 cHRvKHN0cnVjdCBTUlRQQ29udGV4dCAqcywgY29uc3QgY2hhciAqc3VpdGUsCj4gICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXJhbXMpOwo+IGRpZmYgLS1naXQgYS9saWJhdmZv cm1hdC90bHMuYyBiL2xpYmF2Zm9ybWF0L3Rscy5jCj4gaW5kZXggZjk2ZmY2MjE1ZC4uZTA2Yjcw MjJiZiAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC90bHMuYwo+ICsrKyBiL2xpYmF2Zm9ybWF0 L3Rscy5jCj4gQEAgLTEsNiArMSw3IEBACj4gLyoKPiAtICogVExTL1NTTCBQcm90b2NvbAo+ICsg KiBUTFMvRFRMUy9TU0wgUHJvdG9jb2wKPiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTWFydGluIFN0 b3Jzam8KPiArICogQ29weXJpZ2h0IChjKSAyMDI1IEphY2sgTGF1Cj4gICoKPiAgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gICoKPiBAQCAtMjAsNiArMjEsNyBAQAo+ICAqLwo+IAo+ ICNpbmNsdWRlICJhdmZvcm1hdC5oIgo+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiAjaW5jbHVk ZSAibmV0d29yay5oIgo+ICNpbmNsdWRlICJvc19zdXBwb3J0LmgiCj4gI2luY2x1ZGUgInVybC5o Igo+IEBAIC05Myw3ICs5NSw3IEBAIGludCBmZl90bHNfb3Blbl91bmRlcmx5aW5nKFRMU1NoYXJl ZCAqYywgVVJMQ29udGV4dCAqcGFyZW50LCBjb25zdCBjaGFyICp1cmksIEFWCj4gICAgICAgICAg ICAgYy0+bGlzdGVuID0gMTsKPiAgICAgfQo+IAo+IC0gICAgZmZfdXJsX2pvaW4oYnVmLCBzaXpl b2YoYnVmKSwgInRjcCIsIE5VTEwsIGMtPnVuZGVybHlpbmdfaG9zdCwgcG9ydCwgIiVzIiwgcCk7 Cj4gKyAgICBmZl91cmxfam9pbihidWYsIHNpemVvZihidWYpLCBjLT5pc19kdGxzID8gInVkcCIg OiAidGNwIiwgTlVMTCwgYy0+dW5kZXJseWluZ19ob3N0LCBwb3J0LCAiJXMiLCBwKTsKPiAKPiAg ICAgaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKPiAgICAgaWYgKCFnZXRhZGRyaW5m byhjLT51bmRlcmx5aW5nX2hvc3QsIE5VTEwsICZoaW50cywgJmFpKSkgewo+IEBAIC0xMjQsNyAr MTI2LDY1IEBAIGludCBmZl90bHNfb3Blbl91bmRlcmx5aW5nKFRMU1NoYXJlZCAqYywgVVJMQ29u dGV4dCAqcGFyZW50LCBjb25zdCBjaGFyICp1cmksIEFWCj4gICAgIH0KPiAKPiAgICAgZnJlZWVu dl91dGY4KGVudl9odHRwX3Byb3h5KTsKPiAtICAgIHJldHVybiBmZnVybF9vcGVuX3doaXRlbGlz dCgmYy0+dGNwLCBidWYsIEFWSU9fRkxBR19SRUFEX1dSSVRFLAo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZwYXJlbnQtPmludGVycnVwdF9jYWxsYmFjaywgb3B0aW9ucywKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPnByb3RvY29sX3doaXRlbGlz dCwgcGFyZW50LT5wcm90b2NvbF9ibGFja2xpc3QsIHBhcmVudCk7Cj4gKyAgICBpZiAoYy0+aXNf ZHRscykgewo+ICsgICAgICAgIGF2X2RpY3Rfc2V0X2ludChvcHRpb25zLCAiY29ubmVjdCIsIDEs IDApOwo+ICsgICAgICAgIGF2X2RpY3Rfc2V0X2ludChvcHRpb25zLCAiZmlmb19zaXplIiwgMCwg MCk7Cj4gKyAgICAgICAgLyogU2V0IHRoZSBtYXggcGFja2V0IHNpemUgdG8gdGhlIGJ1ZmZlciBz aXplLiAqLwo+ICsgICAgICAgIGF2X2RpY3Rfc2V0X2ludChvcHRpb25zLCAicGt0X3NpemUiLCBj LT5tdHUsIDApOwo+ICsgICAgfQo+ICsgICAgcmV0ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoYy0+ aXNfZHRscyA/ICZjLT51ZHAgOiAmYy0+dGNwLCBidWYsIEFWSU9fRkxBR19SRUFEX1dSSVRFLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmVudC0+aW50ZXJydXB0X2NhbGxi YWNrLCBvcHRpb25zLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5w cm90b2NvbF93aGl0ZWxpc3QsIHBhcmVudC0+cHJvdG9jb2xfYmxhY2tsaXN0LCBwYXJlbnQpOwo+ ICsgICAgaWYgKGMtPmlzX2R0bHMpIHsKPiArICAgICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAg ICAgICAgICBhdl9sb2coYywgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGNvbm5lY3Qg dWRwOi8vJXM6JWRcbiIsIGMtPnVuZGVybHlpbmdfaG9zdCwgcG9ydCk7Cj4gKyAgICAgICAgICAg IHJldHVybiByZXQ7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIC8qIE1ha2UgdGhlIHNvY2tldCBu b24tYmxvY2tpbmcsIHNldCB0byBSRUFEIGFuZCBXUklURSBtb2RlIGFmdGVyIGNvbm5lY3RlZCAq Lwo+ICsgICAgICAgIGZmX3NvY2tldF9ub25ibG9jayhmZnVybF9nZXRfZmlsZV9oYW5kbGUoYy0+ dWRwKSwgMSk7Cj4gKyAgICAgICAgYy0+dWRwLT5mbGFncyB8PSBBVklPX0ZMQUdfUkVBRCB8IEFW SU9fRkxBR19OT05CTE9DSzsKPiArICAgIH0KPiArICAgIHJldHVybiByZXQ7Cj4gfQo+ICsKPiAr LyoqCj4gKyAqIFJlYWQgYWxsIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gVVJMIHVybCBhbmQgc3RvcmUg aXQgaW4gdGhlIGdpdmVuIGJ1ZmZlciBicC4KPiArICovCj4gK2ludCBmZl91cmxfcmVhZF9hbGwo Y29uc3QgY2hhciAqdXJsLCBBVkJQcmludCAqYnApCj4gK3sKPiArICAgIGludCByZXQgPSAwOwo+ ICsgICAgQVZEaWN0aW9uYXJ5ICpvcHRzID0gTlVMTDsKPiArICAgIFVSTENvbnRleHQgKnVjID0g TlVMTDsKPiArICAgIGNoYXIgYnVmW01BWF9VUkxfU0laRV07Cj4gKwo+ICsgICAgcmV0ID0gZmZ1 cmxfb3Blbl93aGl0ZWxpc3QoJnVjLCB1cmwsIEFWSU9fRkxBR19SRUFELCBOVUxMLCAmb3B0cywg TlVMTCwgTlVMTCwgTlVMTCk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBvcGVuIHVybCAlc1xuIiwgdXJs KTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4gKyAgICB3aGlsZSAoMSkgewo+ ICsgICAgICAgIHJldCA9IGZmdXJsX3JlYWQodWMsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwo+ICsgICAg ICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpIHsKPiArICAgICAgICAgICAgLyogUmVzZXQgdGhl IGVycm9yIGJlY2F1c2Ugd2UgcmVhZCBhbGwgcmVzcG9uc2UgYXMgYW5zd2VyIHV0aWwgRU9GLiAq Lwo+ICsgICAgICAgICAgICByZXQgPSAwOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAg ICB9Cj4gKyAgICAgICAgaWYgKHJldCA8PSAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byByZWFkIGZyb20gdXJsPSVzLCBrZXkgaXMg JXNcbiIsIHVybCwgYnAtPnN0cik7Cj4gKyAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgICAg IH0KPiArCj4gKyAgICAgICAgYXZfYnByaW50ZihicCwgIiUuKnMiLCByZXQsIGJ1Zik7Cj4gKyAg ICAgICAgaWYgKCFhdl9icHJpbnRfaXNfY29tcGxldGUoYnApKSB7Cj4gKyAgICAgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEV4Y2VlZCBtYXggc2l6ZSAlLipzLCAlc1xu IiwgcmV0LCBidWYsIGJwLT5zdHIpOwo+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7 Cj4gKyAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gK2Vu ZDoKPiArICAgIGZmdXJsX2Nsb3NlcCgmdWMpOwo+ICsgICAgYXZfZGljdF9mcmVlKCZvcHRzKTsK PiArICAgIHJldHVybiByZXQ7Cj4gK30KPiBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKPiBk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdGxzLmggYi9saWJhdmZvcm1hdC90bHMuaAo+IGluZGV4 IDZjNmFhMDFhOWEuLmNiNjI2ZjE5NzcgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmb3JtYXQvdGxzLmgK PiArKysgYi9saWJhdmZvcm1hdC90bHMuaAo+IEBAIC0xLDYgKzEsNyBAQAo+IC8qCj4gLSAqIFRM Uy9TU0wgUHJvdG9jb2wKPiArICogVExTL0RUTFMvU1NMIFByb3RvY29sCj4gICogQ29weXJpZ2h0 IChjKSAyMDExIE1hcnRpbiBTdG9yc2pvCj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSBKYWNrIExh dQo+ICAqCj4gICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICAqCj4gQEAgLTIyLDEw ICsyMywyNyBAQAo+ICNpZm5kZWYgQVZGT1JNQVRfVExTX0gKPiAjZGVmaW5lIEFWRk9STUFUX1RM U19ICj4gCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYnByaW50LmgiCj4gI2luY2x1ZGUgImxpYmF2 dXRpbC9vcHQuaCIKPiAKPiAjaW5jbHVkZSAidXJsLmgiCj4gCj4gKy8qKgo+ICsgKiBNYXhpbXVt IHNpemUgbGltaXQgb2YgYSBjZXJ0aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkgc2l6ZS4KPiArICov Cj4gKyNkZWZpbmUgTUFYX0NFUlRJRklDQVRFX1NJWkUgODE5Mgo+ICsKPiArZW51bSBEVExTU3Rh dGUgewo+ICsgICAgRFRMU19TVEFURV9OT05FLAo+ICsKPiArICAgIC8qIFdoZXRoZXIgRFRMUyBo YW5kc2hha2UgaXMgZmluaXNoZWQuICovCj4gKyAgICBEVExTX1NUQVRFX0ZJTklTSEVELAo+ICsg ICAgLyogV2hldGhlciBEVExTIHNlc3Npb24gaXMgY2xvc2VkLiAqLwo+ICsgICAgRFRMU19TVEFU RV9DTE9TRUQsCj4gKyAgICAvKiBXaGV0aGVyIERUTFMgaGFuZHNoYWtlIGlzIGZhaWxlZC4gKi8K PiArICAgIERUTFNfU1RBVEVfRkFJTEVELAo+ICt9Owo+ICsKPiB0eXBlZGVmIHN0cnVjdCBUTFNT aGFyZWQgewo+ICAgICBjaGFyICpjYV9maWxlOwo+ICAgICBpbnQgdmVyaWZ5Owo+IEBAIC00MCw2 ICs1OCwyNSBAQCB0eXBlZGVmIHN0cnVjdCBUTFNTaGFyZWQgewo+ICAgICBpbnQgbnVtZXJpY2hv c3Q7Cj4gCj4gICAgIFVSTENvbnRleHQgKnRjcDsKPiArCj4gKyAgICBpbnQgaXNfZHRsczsKPiAr Cj4gKyAgICBlbnVtIERUTFNTdGF0ZSBzdGF0ZTsKPiArCj4gKyAgICBpbnQgdXNlX2V4dGVybmFs X3VkcDsKPiArICAgIFVSTENvbnRleHQgKnVkcDsKPiArCj4gKyAgICAvKiBUaGUgZmluZ2VycHJp bnQgb2YgY2VydGlmaWNhdGUsIHVzZWQgaW4gU0RQIG9mZmVyLiAqLwo+ICsgICAgY2hhciAqZmlu Z2VycHJpbnQ7Cj4gKwo+ICsgICAgLyogVGhlIGNlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleSBj b250ZW50IHVzZWQgZm9yIERUTFMgaGFuZHNoYWtlICovCj4gKyAgICBjaGFyKiBjZXJ0X2J1ZjsK PiArICAgIGNoYXIqIGtleV9idWY7Cj4gKyAgICAvKioKPiArICAgICAqIFRoZSBzaXplIG9mIFJU UCBwYWNrZXQsIHNob3VsZCBnZW5lcmFsbHkgYmUgc2V0IHRvIE1UVS4KPiArICAgICAqIE5vdGUg dGhhdCBwaW9uIHJlcXVpcmVzIGEgc21hbGxlciB2YWx1ZSwgZm9yIGV4YW1wbGUsIDEyMDAuCj4g KyAgICAgKi8KPiArICAgIGludCBtdHU7Cj4gfSBUTFNTaGFyZWQ7Cj4gCj4gI2RlZmluZSBUTFNf T1BURkwgKEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdf UEFSQU0pCj4gQEAgLTUxLDEwICs4OCwyNyBAQCB0eXBlZGVmIHN0cnVjdCBUTFNTaGFyZWQgewo+ ICAgICB7ImtleV9maWxlIiwgICAiUHJpdmF0ZSBrZXkgZmlsZSIsICAgICAgICAgICAgICAgICAg ICBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxkIC4ga2V5X2ZpbGUpLCAgQVZfT1BUX1RZ UEVfU1RSSU5HLCAuZmxhZ3MgPSBUTFNfT1BURkwgfSwgXAo+ICAgICB7Imxpc3RlbiIsICAgICAi TGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucyIsICAgICBvZmZzZXRvZihwc3RydWN0LCBv cHRpb25zX2ZpZWxkIC4gbGlzdGVuKSwgICAgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwIH0s IDAsIDEsIC5mbGFncyA9IFRMU19PUFRGTCB9LCBcCj4gICAgIHsidmVyaWZ5aG9zdCIsICJWZXJp ZnkgYWdhaW5zdCBhIHNwZWNpZmljIGhvc3RuYW1lIiwgIG9mZnNldG9mKHBzdHJ1Y3QsIG9wdGlv bnNfZmllbGQgLiBob3N0KSwgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIC5mbGFncyA9IFRMU19P UFRGTCB9LCBcCj4gLSAgICB7Imh0dHBfcHJveHkiLCAiU2V0IHByb3h5IHRvIHR1bm5lbCB0aHJv dWdoIiwgICAgICAgICBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxkIC4gaHR0cF9wcm94 eSksIEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdzID0gVExTX09QVEZMIH0KPiArICAgIHsiaHR0 cF9wcm94eSIsICJTZXQgcHJveHkgdG8gdHVubmVsIHRocm91Z2giLCAgICAgICAgIG9mZnNldG9m KHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiBodHRwX3Byb3h5KSwgQVZfT1BUX1RZUEVfU1RSSU5H LCAuZmxhZ3MgPSBUTFNfT1BURkwgfSwgXAo+ICsgICAgeyJ1c2VfZXh0ZXJuYWxfdWRwIiwgIlVz ZSBleHRlcm5hbCBVRFAgZnJvbSBtdXhlciBvciBkZW11eGVyIiwgb2Zmc2V0b2YocHN0cnVjdCwg b3B0aW9uc19maWVsZCAuIHVzZV9leHRlcm5hbF91ZHApLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2 NCA9IDB9LCAwLCAxLCAuZmxhZ3MgPSBUTFNfT1BURkwgfSwgXAo+ICsgICAgeyJtdHUiLCAiTWF4 aW11bSBUcmFuc21pc3Npb24gVW5pdCIsIG9mZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQg LiBtdHUpLCBBVl9PUFRfVFlQRV9JTlQsICB7IC5pNjQgPSAwfSwgSU5UNjRfTUlOLCBJTlQ2NF9N QVgsIC5mbGFncyA9IFRMU19PUFRGTH0sIFwKPiArICAgIHsiZmluZ2VycHJpbnQiLCAiVGhlIG9w dGlvbmFsIGZpbmdlcnByaW50IGZvciBEVExTIiwgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19m aWVsZCAuIGZpbmdlcnByaW50KSwgQVZfT1BUX1RZUEVfU1RSSU5HLCAuZmxhZ3MgPSBUTFNfT1BU Rkx9LCBcCj4gKyAgICB7ImNlcnRfYnVmIiwgIlRoZSBvcHRpb25hbCBjZXJ0aWZpY2F0ZSBidWZm ZXIgZm9yIERUTFMiLCBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxkIC4gY2VydF9idWYp LCBBVl9PUFRfVFlQRV9TVFJJTkcsIC5mbGFncyA9IFRMU19PUFRGTH0sIFwKPiArICAgIHsia2V5 X2J1ZiIsICJUaGUgb3B0aW9uYWwgcHJpdmF0ZSBrZXkgYnVmZmVyIGZvciBEVExTIiwgb2Zmc2V0 b2YocHN0cnVjdCwgb3B0aW9uc19maWVsZCAuIGtleV9idWYpLCBBVl9PUFRfVFlQRV9TVFJJTkcs IC5mbGFncyA9IFRMU19PUFRGTH0KPiAKPiBpbnQgZmZfdGxzX29wZW5fdW5kZXJseWluZyhUTFNT aGFyZWQgKmMsIFVSTENvbnRleHQgKnBhcmVudCwgY29uc3QgY2hhciAqdXJpLCBBVkRpY3Rpb25h cnkgKipvcHRpb25zKTsKPiAKPiAraW50IGZmX3VybF9yZWFkX2FsbChjb25zdCBjaGFyICp1cmws IEFWQlByaW50ICpicCk7Cj4gKwo+ICtpbnQgZmZfZHRsc19zZXRfdWRwKFVSTENvbnRleHQgKmgs IFVSTENvbnRleHQgKnVkcCk7Cj4gKwo+ICtpbnQgZmZfZHRsc19leHBvcnRfbWF0ZXJpYWxzKFVS TENvbnRleHQgKmgsIGNoYXIgKmR0bHNfc3J0cF9tYXRlcmlhbHMsIHNpemVfdCBtYXRlcmlhbHNf c3opOwo+ICsKPiAraW50IGZmX2R0bHNfc3RhdGUoVVJMQ29udGV4dCAqaCk7Cj4gKwo+ICtpbnQg ZmZfc3NsX3JlYWRfa2V5X2NlcnQoY2hhciAqa2V5X3VybCwgY2hhciAqY2VydF91cmwsIGNoYXIg KmtleV9idWYsIHNpemVfdCBrZXlfc3osIGNoYXIgKmNlcnRfYnVmLCBzaXplX3QgY2VydF9zeiwg Y2hhciAqKmZpbmdlcnByaW50KTsKPiArCj4gK2ludCBmZl9zc2xfZ2VuX2tleV9jZXJ0KGNoYXIg KmtleV9idWYsIHNpemVfdCBrZXlfc3osIGNoYXIgKmNlcnRfYnVmLCBzaXplX3QgY2VydF9zeiwg Y2hhciAqKmZpbmdlcnByaW50KTsKPiArCj4gdm9pZCBmZl9nbnV0bHNfaW5pdCh2b2lkKTsKPiB2 b2lkIGZmX2dudXRsc19kZWluaXQodm9pZCk7Cj4gCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L3Rsc19vcGVuc3NsLmMgYi9saWJhdmZvcm1hdC90bHNfb3BlbnNzbC5jCj4gaW5kZXggOGIwY2Y5 ZWZiMi4uYTM4MTE0OTBjZCAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC90bHNfb3BlbnNzbC5j Cj4gKysrIGIvbGliYXZmb3JtYXQvdGxzX29wZW5zc2wuYwo+IEBAIC0xLDYgKzEsNyBAQAo+IC8q Cj4gLSAqIFRMUy9TU0wgUHJvdG9jb2wKPiArICogVExTL0RUTFMvU1NMIFByb3RvY29sCj4gICog Q29weXJpZ2h0IChjKSAyMDExIE1hcnRpbiBTdG9yc2pvCj4gKyAqIENvcHlyaWdodCAoYykgMjAy NSBKYWNrIExhdQo+ICAqCj4gICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICAqCj4g QEAgLTE5LDggKzIwLDEwIEBACj4gICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICAqLwo+IAo+ICsj aW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+ICNpbmNsdWRlICJuZXR3b3JrLmgiCj4gI2luY2x1 ZGUgIm9zX3N1cHBvcnQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9yYW5kb21fc2VlZC5oIgo+ ICNpbmNsdWRlICJ1cmwuaCIKPiAjaW5jbHVkZSAidGxzLmgiCj4gI2luY2x1ZGUgImxpYmF2dXRp bC9vcHQuaCIKPiBAQCAtMjksNiArMzIsNDM2IEBACj4gI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+ Cj4gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cj4gCj4gKy8qKgo+ICsgKiBSZXR1cm5zIGEgaGVh cOKAkGFsbG9jYXRlZCBudWxs4oCQdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZwo+ICsgKiB0 aGUgUEVN4oCQZW5jb2RlZCBwdWJsaWMga2V5LiAgQ2FsbGVyIG11c3QgZnJlZS4KPiArICovCj4g K3N0YXRpYyBjaGFyICpwa2V5X3RvX3BlbV9zdHJpbmcoRVZQX1BLRVkgKnBrZXkpIHsKPiArICAg IEJJTyAgICAgICAgKm1lbSA9IE5VTEw7Cj4gKyAgICBCVUZfTUVNICAgICpicHRyID0gTlVMTDsK PiArICAgIGNoYXIgICAgICAgKnBlbV9zdHIgPSBOVUxMOwo+ICsKPiArICAgIC8vIENyZWF0ZSBh IG1lbW9yeSBCSU8KPiArICAgIGlmICghKG1lbSA9IEJJT19uZXcoQklPX3NfbWVtKCkpKSkKPiAr ICAgICAgICBnb3RvIGVycjsKPiArCj4gKyAgICAvLyBXcml0ZSBwdWJsaWMga2V5IGluIFBFTSBm b3JtCj4gKyAgICBpZiAoIVBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleShtZW0sIHBrZXksIE5VTEws IE5VTEwsIDAsIE5VTEwsIE5VTEwpKQo+ICsgICAgICAgIGdvdG8gZXJyOwo+ICsKPiArICAgIC8v IEV4dHJhY3QgcG9pbnRlci9sZW5ndGgKPiArICAgIEJJT19nZXRfbWVtX3B0cihtZW0sICZicHRy KTsKPiArICAgIGlmICghYnB0ciB8fCAhYnB0ci0+bGVuZ3RoKQo+ICsgICAgICAgIGdvdG8gZXJy Owo+ICsKPiArICAgIC8vIEFsbG9jYXRlIHN0cmluZyAoKzEgZm9yIE5VTCkKPiArICAgIHBlbV9z dHIgPSBhdl9tYWxsb2MoYnB0ci0+bGVuZ3RoICsgMSk7Cj4gKyAgICBpZiAoIXBlbV9zdHIpCj4g KyAgICAgICAgZ290byBlcnI7Cj4gKwo+ICsgICAgLy8gQ29weSBkYXRhICYgTlVM4oCQdGVybWlu YXRlCj4gKyAgICBtZW1jcHkocGVtX3N0ciwgYnB0ci0+ZGF0YSwgYnB0ci0+bGVuZ3RoKTsKPiAr ICAgIHBlbV9zdHJbYnB0ci0+bGVuZ3RoXSA9ICdcMCc7Cj4gKwo+ICtjbGVhbnVwOgo+ICsgICAg QklPX2ZyZWUobWVtKTsKPiArICAgIHJldHVybiBwZW1fc3RyOwo+ICsKPiArZXJyOgo+ICsgICAg Ly8gZXJyb3IgcGF0aDogZnJlZSBhbmQgcmV0dXJuIE5VTEwKPiArICAgIGZyZWUocGVtX3N0cik7 Cj4gKyAgICBwZW1fc3RyID0gTlVMTDsKPiArICAgIGdvdG8gY2xlYW51cDsKPiArfQo+ICsKPiAr LyoqCj4gKyAqIFNlcmlhbGl6ZSBhbiBYNTA5IGNlcnRpZmljYXRlIHRvIGEgYXZfbWFsbG9j4oCZ ZCBQRU0gc3RyaW5nLgo+ICsgKiBDYWxsZXIgbXVzdCBmcmVlIHRoZSByZXR1cm5lZCBwb2ludGVy Lgo+ICsgKi8KPiArc3RhdGljIGNoYXIgKmNlcnRfdG9fcGVtX3N0cmluZyhYNTA5ICpjZXJ0KQo+ ICt7Cj4gKyAgICBCSU8gICAgICptZW0gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKPiArICAgIEJV Rl9NRU0gKmJwdHIgPSBOVUxMOwo+ICsgICAgY2hhciAgICAqb3V0ID0gTlVMTDsKPiArCj4gKyAg ICBpZiAoIW1lbSkgZ290byBlcnI7Cj4gKwo+ICsgICAgLyogV3JpdGUgdGhlIFBFTSBjZXJ0aWZp Y2F0ZSAqLwo+ICsgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1g1MDkobWVtLCBjZXJ0KSkKPiArICAg ICAgICBnb3RvIGVycjsKPiArCj4gKyAgICBCSU9fZ2V0X21lbV9wdHIobWVtLCAmYnB0cik7Cj4g KyAgICBpZiAoIWJwdHIgfHwgIWJwdHItPmxlbmd0aCkgZ290byBlcnI7Cj4gKwo+ICsgICAgb3V0 ID0gYXZfbWFsbG9jKGJwdHItPmxlbmd0aCArIDEpOwo+ICsgICAgaWYgKCFvdXQpIGdvdG8gZXJy Owo+ICsKPiArICAgIG1lbWNweShvdXQsIGJwdHItPmRhdGEsIGJwdHItPmxlbmd0aCk7Cj4gKyAg ICBvdXRbYnB0ci0+bGVuZ3RoXSA9ICdcMCc7Cj4gKwo+ICtjbGVhbnVwOgo+ICsgICAgQklPX2Zy ZWUobWVtKTsKPiArICAgIHJldHVybiBvdXQ7Cj4gKwo+ICtlcnI6Cj4gKyAgICBmcmVlKG91dCk7 Cj4gKyAgICBvdXQgPSBOVUxMOwo+ICsgICAgZ290byBjbGVhbnVwOwo+ICt9Cj4gKwo+ICsKPiAr LyoqCj4gKyAqIEdlbmVyYXRlIGEgU0hBLTI1NiBmaW5nZXJwcmludCBvZiBhbiBYLjUwOSBjZXJ0 aWZpY2F0ZS4KPiArICoKPiArICogQHBhcmFtIGN0eCAgICAgICBBVkZvcm1hdENvbnRleHQgZm9y IGxvZ2dpbmcgKGNhbiBiZSBOVUxMKQo+ICsgKiBAcGFyYW0gY2VydCAgICAgIFg1MDkgY2VydGlm aWNhdGUgdG8gZmluZ2VycHJpbnQKPiArICogQHJldHVybiAgICAgICAgICBOZXdseSBhbGxvY2F0 ZWQgZmluZ2VycHJpbnQgc3RyaW5nIGluICJBQTpCQjpDQzrigKYiIGZvcm1hdCwKPiArICogICAg ICAgICAgICAgICAgICBvciBOVUxMIG9uIGVycm9yIChsb2dzIHZpYSBhdl9sb2cgaWYgY3R4IGlz IG5vdCBOVUxMKS4KPiArICogICAgICAgICAgICAgICAgICBDYWxsZXIgbXVzdCBmcmVlKCkgdGhl IHJldHVybmVkIHN0cmluZy4KPiArICovCj4gK3N0YXRpYyBjaGFyICpnZW5lcmF0ZV9maW5nZXJw cmludChYNTA5ICpjZXJ0KQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURf U0laRV07Cj4gKyAgICBpbnQgbiA9IDA7Cj4gKyAgICBBVkJQcmludCBmaW5nZXJwcmludDsKPiAr ICAgIGNoYXIgKnJlc3VsdCA9IE5VTEw7Cj4gKyAgICBpbnQgaTsKPiArCj4gKyAgICAvKiBUbyBw cmV2ZW50IGEgY3Jhc2ggZHVyaW5nIGNsZWFudXAsIGFsd2F5cyBpbml0aWFsaXplIGl0LiAqLwo+ ICsgICAgYXZfYnByaW50X2luaXQoJmZpbmdlcnByaW50LCAwLCBBVl9CUFJJTlRfU0laRV9VTkxJ TUlURUQpOwo+ICsKPiArICAgIGlmIChYNTA5X2RpZ2VzdChjZXJ0LCBFVlBfc2hhMjU2KCksIG1k LCAmbikgIT0gMSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6 IEZhaWxlZCB0byBnZW5lcmF0ZSBmaW5nZXJwcmludCwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmco RVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewo+ICsgICAgICAgIGF2X2JwcmludGYo JmZpbmdlcnByaW50LCAiJTAyWCIsIG1kW2ldKTsKPiArICAgICAgICBpZiAoaSArIDEgPCBuKQo+ ICsgICAgICAgICAgICBhdl9icHJpbnRmKCZmaW5nZXJwcmludCwgIjoiKTsKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoIWZpbmdlcnByaW50LnN0ciB8fCAhc3RybGVuKGZpbmdlcnByaW50LnN0cikp IHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGaW5nZXJwcmlu dCBpcyBlbXB0eVxuIik7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAg cmVzdWx0ID0gYXZfc3RyZHVwKGZpbmdlcnByaW50LnN0cik7Cj4gKyAgICBpZiAoIXJlc3VsdCkg ewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IE91dCBvZiBtZW1v cnkgZ2VuZXJhdGluZyBmaW5nZXJwcmludFxuIik7Cj4gKyAgICB9Cj4gKwo+ICtlbmQ6Cj4gKyAg ICBhdl9icHJpbnRfZmluYWxpemUoJmZpbmdlcnByaW50LCBOVUxMKTsKPiArICAgIHJldHVybiBy ZXN1bHQ7Cj4gK30KPiArCj4gK2ludCBmZl9zc2xfcmVhZF9rZXlfY2VydChjaGFyICprZXlfdXJs LCBjaGFyICpjZXJ0X3VybCwgY2hhciAqa2V5X2J1Ziwgc2l6ZV90IGtleV9zeiwgY2hhciAqY2Vy dF9idWYsIHNpemVfdCBjZXJ0X3N6LCBjaGFyICoqZmluZ2VycHJpbnQpCj4gK3sKPiArICAgIGlu dCByZXQgPSAwOwo+ICsgICAgQklPICprZXlfYiA9IE5VTEwsICpjZXJ0X2IgPSBOVUxMOwo+ICsg ICAgQVZCUHJpbnQga2V5X2JwLCBjZXJ0X2JwOwo+ICsgICAgRVZQX1BLRVkgKnBrZXk7Cj4gKyAg ICBYNTA5ICpjZXJ0Owo+ICsgICAgY2hhciAqa2V5X3RlbSA9IE5VTEwsICpjZXJ0X3RlbSA9IE5V TEw7Cj4gKwo+ICsgICAgLyogVG8gcHJldmVudCBhIGNyYXNoIGR1cmluZyBjbGVhbnVwLCBhbHdh eXMgaW5pdGlhbGl6ZSBpdC4gKi8KPiArICAgIGF2X2JwcmludF9pbml0KCZrZXlfYnAsIDEsIE1B WF9DRVJUSUZJQ0FURV9TSVpFKTsKPiArICAgIGF2X2JwcmludF9pbml0KCZjZXJ0X2JwLCAxLCBN QVhfQ0VSVElGSUNBVEVfU0laRSk7Cj4gKwo+ICsgICAgLyogUmVhZCBrZXkgZmlsZS4gKi8KPiAr ICAgIHJldCA9IGZmX3VybF9yZWFkX2FsbChrZXlfdXJsLCAma2V5X2JwKTsKPiArICAgIGlmIChy ZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFp bGVkIHRvIG9wZW4ga2V5IGZpbGUgJXNcbiIsIGtleV91cmwpOwo+ICsgICAgICAgIGdvdG8gZW5k Owo+ICsgICAgfQo+ICsKPiArICAgIGlmICghKGtleV9iID0gQklPX25ldyhCSU9fc19tZW0oKSkp KSB7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgIGdvdG8gZW5k Owo+ICsgICAgfQo+ICsKPiArICAgIEJJT193cml0ZShrZXlfYiwga2V5X2JwLnN0ciwga2V5X2Jw Lmxlbik7Cj4gKyAgICBwa2V5ID0gUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkoa2V5X2IsIE5VTEws IE5VTEwsIE5VTEwpOwo+ICsgICAgaWYgKCFwa2V5KSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIHJlYWQgcHJpdmF0ZSBrZXkgZnJvbSAlc1xu Iiwga2V5X3VybCk7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+ICsgICAgICAgIGdv dG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIFJlYWQgY2VydGlmaWNhdGUuICovCj4gKyAg ICByZXQgPSBmZl91cmxfcmVhZF9hbGwoY2VydF91cmwsICZjZXJ0X2JwKTsKPiArICAgIGlmIChy ZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFp bGVkIHRvIG9wZW4gY2VydCBmaWxlICVzXG4iLCBjZXJ0X3VybCk7Cj4gKyAgICAgICAgZ290byBl bmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCEoY2VydF9iID0gQklPX25ldyhCSU9fc19tZW0o KSkpKSB7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgIGdvdG8g ZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIEJJT193cml0ZShjZXJ0X2IsIGNlcnRfYnAuc3RyLCBj ZXJ0X2JwLmxlbik7Cj4gKyAgICBjZXJ0ID0gUEVNX3JlYWRfYmlvX1g1MDkoY2VydF9iLCBOVUxM LCBOVUxMLCBOVUxMKTsKPiArICAgIGlmICghY2VydCkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byByZWFkIGNlcnRpZmljYXRlIGZyb20gJXNc biIsIGNlcnRfdXJsKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4gKyAgICAgICAg Z290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAga2V5X3RlbSA9IHBrZXlfdG9fcGVtX3N0cmlu Zyhwa2V5KTsKPiArICAgIGNlcnRfdGVtID0gY2VydF90b19wZW1fc3RyaW5nKGNlcnQpOwo+ICsK PiArICAgIHNucHJpbnRmKGtleV9idWYsICBrZXlfc3osICAiJXMiLCBrZXlfdGVtKTsKPiArICAg IHNucHJpbnRmKGNlcnRfYnVmLCBjZXJ0X3N6LCAiJXMiLCBjZXJ0X3RlbSk7Cj4gKwo+ICsgICAg LyogR2VuZXJhdGUgZmluZ2VycHJpbnQuICovCj4gKyAgICAqZmluZ2VycHJpbnQgPSBnZW5lcmF0 ZV9maW5nZXJwcmludChjZXJ0KTsKPiArICAgIGlmICghKmZpbmdlcnByaW50KSB7Cj4gKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIGdlbmVyYXRlIGZp bmdlcnByaW50IGZyb20gJXNcbiIsIGNlcnRfdXJsKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9S KEVJTyk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICtlbmQ6Cj4gKyAgICBC SU9fZnJlZShrZXlfYik7Cj4gKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmtleV9icCwgTlVMTCk7 Cj4gKyAgICBCSU9fZnJlZShjZXJ0X2IpOwo+ICsgICAgYXZfYnByaW50X2ZpbmFsaXplKCZjZXJ0 X2JwLCBOVUxMKTsKPiArICAgIGlmIChrZXlfdGVtKSBhdl9mcmVlKGtleV90ZW0pOwo+ICsgICAg aWYgKGNlcnRfdGVtKSBhdl9mcmVlKGNlcnRfdGVtKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgb3BlbnNzbF9nZW5fcHJpdmF0ZV9rZXkoRVZQX1BLRVkgKipwa2V5 LCBFQ19LRVkgKiplY2tleSkKPiArewo+ICsgICAgaW50IHJldCA9IDA7Cj4gKwo+ICsgICAgLyoq Cj4gKyAgICAgKiBOb3RlIHRoYXQgc2VjcDI1NnIxIGluIG9wZW5zc2wgaXMgY2FsbGVkIE5JRF9Y OV82Ml9wcmltZTI1NnYxIG9yIHByaW1lMjU2djEgaW4gc3RyaW5nLAo+ICsgICAgICogbm90IE5J RF9zZWNwMjU2azEgb3Igc2VjcDI1NmsxIGluIHN0cmluZy4KPiArICAgICAqCj4gKyAgICAgKiBU T0RPOiBTaG91bGQgY2hvb3NlIHRoZSBjdXJ2ZXMgaW4gQ2xpZW50SGVsbG8uc3VwcG9ydGVkX2dy b3VwcywgZm9yIGV4YW1wbGU6Cj4gKyAgICAgKiAgICAgIFN1cHBvcnRlZCBHcm91cDogeDI1NTE5 ICgweDAwMWQpCj4gKyAgICAgKiAgICAgIFN1cHBvcnRlZCBHcm91cDogc2VjcDI1NnIxICgweDAw MTcpCj4gKyAgICAgKiAgICAgIFN1cHBvcnRlZCBHcm91cDogc2VjcDM4NHIxICgweDAwMTgpCj4g KyAgICAgKi8KPiArI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDMwMDAwMDAwTCAvKiBP cGVuU1NMIDMuMCAqLwo+ICsgICAgRUNfR1JPVVAgKmVjZ3JvdXAgPSBOVUxMOwo+ICsgICAgaW50 IGN1cnZlID0gTklEX1g5XzYyX3ByaW1lMjU2djE7Cj4gKyNlbHNlCj4gKyAgICBjb25zdCBjaGFy ICpjdXJ2ZSA9IFNOX1g5XzYyX3ByaW1lMjU2djE7Cj4gKyNlbmRpZgo+ICsKPiArI2lmIE9QRU5T U0xfVkVSU0lPTl9OVU1CRVIgPCAweDMwMDAwMDAwTCAvKiBPcGVuU1NMIDMuMCAqLwo+ICsgICAg KnBrZXkgPSBFVlBfUEtFWV9uZXcoKTsKPiArICAgICplY2tleSA9IEVDX0tFWV9uZXcoKTsKPiAr ICAgIGVjZ3JvdXAgPSBFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZShjdXJ2ZSk7Cj4gKyAgICBp ZiAoIWVjZ3JvdXApIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiVExT OiBDcmVhdGUgRUMgZ3JvdXAgYnkgY3VydmU9JWQgZmFpbGVkLCAlcyIsIGN1cnZlLCBFUlJfZXJy b3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFs X2VuZDsKPiArICAgIH0KPiArCj4gKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDEw MDAwMEwgLy8gdjEuMS54Cj4gKyAgICAvKiBGb3Igb3BlbnNzbCAxLjAsIHdlIG11c3Qgc2V0IHRo ZSBncm91cCBwYXJhbWV0ZXJzLCBzbyB0aGF0IGNlcnQgaXMgb2suICovCj4gKyAgICBFQ19HUk9V UF9zZXRfYXNuMV9mbGFnKGVjZ3JvdXAsIE9QRU5TU0xfRUNfTkFNRURfQ1VSVkUpOwo+ICsjZW5k aWYKPiArCj4gKyAgICBpZiAoRUNfS0VZX3NldF9ncm91cCgqZWNrZXksIGVjZ3JvdXApICE9IDEp IHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBHZW5lcmF0ZSBw cml2YXRlIGtleSwgRUNfS0VZX3NldF9ncm91cCBmYWlsZWQsICVzXG4iLCBFUlJfZXJyb3Jfc3Ry aW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsK PiArICAgIH0KPiArCj4gKyAgICBpZiAoRUNfS0VZX2dlbmVyYXRlX2tleSgqZWNrZXkpICE9IDEp IHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBHZW5lcmF0ZSBw cml2YXRlIGtleSwgRUNfS0VZX2dlbmVyYXRlX2tleSBmYWlsZWQsICVzXG4iLCBFUlJfZXJyb3Jf c3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFsX2Vu ZDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoRVZQX1BLRVlfc2V0MV9FQ19LRVkoKnBrZXksICpl Y2tleSkgIT0gMSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6 IEdlbmVyYXRlIHByaXZhdGUga2V5LCBFVlBfUEtFWV9zZXQxX0VDX0tFWSBmYWlsZWQsICVzXG4i LCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdv dG8gZWludmFsX2VuZDsKPiArICAgIH0KPiArI2Vsc2UKPiArICAgICpwa2V5ID0gRVZQX0VDX2dl bihjdXJ2ZSk7Cj4gKyAgICBpZiAoISpwa2V5KSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19FUlJPUiwgIlRMUzogR2VuZXJhdGUgcHJpdmF0ZSBrZXksIEVWUF9FQ19nZW4gY3VydmU9 JXMgZmFpbGVkLCAlc1xuIiwgY3VydmUsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigp LCBOVUxMKSk7Cj4gKyAgICAgICAgZ290byBlaW52YWxfZW5kOwo+ICsgICAgfQo+ICsjZW5kaWYK PiArICAgIGdvdG8gZW5kOwo+ICsKPiArZWludmFsX2VuZDoKPiArICAgIHJldCA9IEFWRVJST1Io RUlOVkFMKTsKPiArZW5kOgo+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MzAwMDAw MDBMIC8qIE9wZW5TU0wgMy4wICovCj4gKyAgICBFQ19HUk9VUF9mcmVlKGVjZ3JvdXApOwo+ICsj ZW5kaWYKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgb3BlbnNzbF9n ZW5fY2VydGlmaWNhdGUoRVZQX1BLRVkgKnBrZXksIFg1MDkgKipjZXJ0LCBjaGFyICoqZmluZ2Vy cHJpbnQpCj4gK3sKPiArICAgIGludCByZXQgPSAwLCBzZXJpYWwsIGV4cGlyZV9kYXk7Cj4gKyAg ICBjb25zdCBjaGFyICphb3IgPSAibGF2ZiI7Cj4gKyAgICBYNTA5X05BTUUqIHN1YmplY3QgPSBO VUxMOwo+ICsKPiArICAgICpjZXJ0PSBYNTA5X25ldygpOwo+ICsgICAgaWYgKCEqY2VydCkgewo+ ICsgICAgICAgIGdvdG8gZW5vbWVtX2VuZDsKPiArICAgIH0KPiArCj4gKyAgICAvLyBUT0RPOiBT dXBwb3J0IG5vbi1zZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSwgZm9yIGV4YW1wbGUsIGxvYWQgZnJv bSBhIGZpbGUuCj4gKyAgICBzdWJqZWN0ID0gWDUwOV9OQU1FX25ldygpOwo+ICsgICAgaWYgKCFz dWJqZWN0KSB7Cj4gKyAgICAgICAgZ290byBlbm9tZW1fZW5kOwo+ICsgICAgfQo+ICsKPiArICAg IHNlcmlhbCA9IChpbnQpYXZfZ2V0X3JhbmRvbV9zZWVkKCk7Cj4gKyAgICBpZiAoQVNOMV9JTlRF R0VSX3NldChYNTA5X2dldF9zZXJpYWxOdW1iZXIoKmNlcnQpLCBzZXJpYWwpICE9IDEpIHsKPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gc2V0IHNl cmlhbCwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4g KyAgICAgICAgZ290byBlaW52YWxfZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChYNTA5X05B TUVfYWRkX2VudHJ5X2J5X3R4dChzdWJqZWN0LCAiQ04iLCBNQlNUUklOR19BU0MsIGFvciwgc3Ry bGVuKGFvciksIC0xLCAwKSAhPSAxKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19F UlJPUiwgIlRMUzogRmFpbGVkIHRvIHNldCBDTiwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJS X2dldF9lcnJvcigpLCBOVUxMKSk7Cj4gKyAgICAgICAgZ290byBlaW52YWxfZW5kOwo+ICsgICAg fQo+ICsKPiArICAgIGlmIChYNTA5X3NldF9pc3N1ZXJfbmFtZSgqY2VydCwgc3ViamVjdCkgIT0g MSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0 byBzZXQgaXNzdWVyLCAlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5V TEwpKTsKPiArICAgICAgICBnb3RvIGVpbnZhbF9lbmQ7Cj4gKyAgICB9Cj4gKyAgICBpZiAoWDUw OV9zZXRfc3ViamVjdF9uYW1lKCpjZXJ0LCBzdWJqZWN0KSAhPSAxKSB7Cj4gKyAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIHNldCBzdWJqZWN0IG5hbWUs ICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAg ICAgIGdvdG8gZWludmFsX2VuZDsKPiArICAgIH0KPiArCj4gKyAgICBleHBpcmVfZGF5ID0gMzY1 Owo+ICsgICAgaWYgKCFYNTA5X2dtdGltZV9hZGooWDUwOV9nZXRfbm90QmVmb3JlKCpjZXJ0KSwg MCkpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQg dG8gc2V0IG5vdEJlZm9yZSwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigp LCBOVUxMKSk7Cj4gKyAgICAgICAgZ290byBlaW52YWxfZW5kOwo+ICsgICAgfQo+ICsgICAgaWYg KCFYNTA5X2dtdGltZV9hZGooWDUwOV9nZXRfbm90QWZ0ZXIoKmNlcnQpLCA2MCo2MCoyNCpleHBp cmVfZGF5KSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZh aWxlZCB0byBzZXQgbm90QWZ0ZXIsICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJy b3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsKPiArICAgIH0KPiArCj4g KyAgICBpZiAoWDUwOV9zZXRfdmVyc2lvbigqY2VydCwgMikgIT0gMSkgewo+ICsgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBzZXQgdmVyc2lvbiwgJXNc biIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4gKyAgICAgICAg Z290byBlaW52YWxfZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChYNTA5X3NldF9wdWJrZXko KmNlcnQsIHBrZXkpICE9IDEpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiVExTOiBGYWlsZWQgdG8gc2V0IHB1YmxpYyBrZXksICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5n KEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsKPiAr ICAgIH0KPiArCj4gKyAgICBpZiAoIVg1MDlfc2lnbigqY2VydCwgcGtleSwgRVZQX3NoYTEoKSkp IHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8g c2lnbiBjZXJ0aWZpY2F0ZSwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigp LCBOVUxMKSk7Cj4gKyAgICAgICAgZ290byBlaW52YWxfZW5kOwo+ICsgICAgfQo+ICsKPiArICAg ICpmaW5nZXJwcmludCA9IGdlbmVyYXRlX2ZpbmdlcnByaW50KCpjZXJ0KTsKPiArICAgIGlmICgh KmZpbmdlcnByaW50KSB7Cj4gKyAgICAgICAgZ290byBlbm9tZW1fZW5kOwo+ICsgICAgfQo+ICsK PiArICAgIGdvdG8gZW5kOwo+ICtlbm9tZW1fZW5kOgo+ICsgICAgcmV0ID0gQVZFUlJPUihFTk9N RU0pOwo+ICsgICAgZ290byBlbmQ7Cj4gK2VpbnZhbF9lbmQ6Cj4gKyAgICByZXQgPSBBVkVSUk9S KEVJTlZBTCk7Cj4gK2VuZDoKPiArICAgIFg1MDlfTkFNRV9mcmVlKHN1YmplY3QpOwo+ICsgICAg Ly9hdl9icHJpbnRfZmluYWxpemUoJmZpbmdlcnByaW50LCBOVUxMKTsKPiArICAgIHJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK2ludCBmZl9zc2xfZ2VuX2tleV9jZXJ0KGNoYXIgKmtleV9idWYsIHNp emVfdCBrZXlfc3osIGNoYXIgKmNlcnRfYnVmLCBzaXplX3QgY2VydF9zeiwgY2hhciAqKmZpbmdl cnByaW50KQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIEVWUF9QS0VZICpwa2V5ID0g TlVMTDsKPiArICAgIEVDX0tFWSAqZWNfa2V5ID0gTlVMTDsKPiArICAgIFg1MDkgKmNlcnQgPSBO VUxMOwo+ICsgICAgY2hhciAqa2V5X3RlbSA9IE5VTEwsICpjZXJ0X3RlbSA9IE5VTEw7Cj4gKwo+ ICsgICAgcmV0ID0gb3BlbnNzbF9nZW5fcHJpdmF0ZV9rZXkoJnBrZXksICZlY19rZXkpOwo+ICsg ICAgaWYgKHJldCA8IDApIGdvdG8gZXJyb3I7Cj4gKwo+ICsgICAgcmV0ID0gb3BlbnNzbF9nZW5f Y2VydGlmaWNhdGUocGtleSwgJmNlcnQsIGZpbmdlcnByaW50KTsKPiArICAgIGlmIChyZXQgPCAw KSBnb3RvIGVycm9yOwo+ICsKPiArICAgIGtleV90ZW0gPSBwa2V5X3RvX3BlbV9zdHJpbmcocGtl eSk7Cj4gKyAgICBjZXJ0X3RlbSA9IGNlcnRfdG9fcGVtX3N0cmluZyhjZXJ0KTsKPiArCj4gKyAg ICBzbnByaW50ZihrZXlfYnVmLCAga2V5X3N6LCAgIiVzIiwga2V5X3RlbSk7Cj4gKyAgICBzbnBy aW50ZihjZXJ0X2J1ZiwgY2VydF9zeiwgIiVzIiwgY2VydF90ZW0pOwo+ICsKPiArICAgIGlmIChr ZXlfdGVtKSBhdl9mcmVlKGtleV90ZW0pOwo+ICsgICAgaWYgKGNlcnRfdGVtKSBhdl9mcmVlKGNl cnRfdGVtKTsKPiArZXJyb3I6Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsKPiArLyoq Cj4gKyAqIERlc2VyaWFsaXplIGEgUEVN4oCQZW5jb2RlZCBwcml2YXRlIG9yIHB1YmxpYyBrZXkg ZnJvbSBhIE5VTC10ZXJtaW5hdGVkIEMgc3RyaW5nLgo+ICsgKgo+ICsgKiBAcGFyYW0gcGVtX3N0 ciAgIFRoZSBQRU0gdGV4dCwgZS5nLgo+ICsgKiAgICAgICAgICAgICAgICAgICItLS0tLUJFR0lO IFBSSVZBVEUgS0VZLS0tLS1cbuKAplxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLVxuIgo+ICsg KiBAcGFyYW0gaXNfcHJpdiAgIElmIG5vbi16ZXJvLCBwYXJzZSBhcyBhIFBSSVZBVEUga2V5OyBv dGhlcndpc2UsIHBhcnNlIGFzIGEgUFVCTElDIGtleS4KPiArICogQHJldHVybiAgICAgICAgICBF VlBfUEtFWSogb24gc3VjY2VzcyAobXVzdCBFVlBfUEtFWV9mcmVlKCkpLCBvciBOVUxMIG9uIGVy cm9yLgo+ICsgKi8KPiArc3RhdGljIEVWUF9QS0VZICpwa2V5X2Zyb21fcGVtX3N0cmluZyhjb25z dCBjaGFyICpwZW1fc3RyLCBpbnQgaXNfcHJpdikKPiArewo+ICsgICAgQklPICptZW0gPSBCSU9f bmV3X21lbV9idWYocGVtX3N0ciwgLTEpOwo+ICsgICAgaWYgKCFtZW0pIHsKPiArICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQklPX25ld19tZW1fYnVmIGZhaWxlZFxuIik7Cj4g KyAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgRVZQX1BLRVkgKnBrZXkg PSBOVUxMOwo+ICsgICAgaWYgKGlzX3ByaXYpIHsKPiArICAgICAgICBwa2V5ID0gUEVNX3JlYWRf YmlvX1ByaXZhdGVLZXkobWVtLCBOVUxMLCBOVUxMLCBOVUxMKTsKPiArICAgIH0gZWxzZSB7Cj4g KyAgICAgICAgcGtleSA9IFBFTV9yZWFkX2Jpb19QVUJLRVkobWVtLCBOVUxMLCBOVUxMLCBOVUxM KTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoIXBrZXkpCj4gKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBwYXJzZSAlcyBrZXkgZnJvbSBzdHJpbmdcbiIsCj4g KyAgICAgICAgICAgICAgaXNfcHJpdiA/ICJwcml2YXRlIiA6ICJwdWJsaWMiKTsKPiArCj4gKyAg ICBCSU9fZnJlZShtZW0pOwo+ICsgICAgcmV0dXJuIHBrZXk7Cj4gK30KPiArCj4gKy8qKgo+ICsg KiBEZXNlcmlhbGl6ZSBhIFBFTeKAkGVuY29kZWQgY2VydGlmaWNhdGUgZnJvbSBhIE5VTC10ZXJt aW5hdGVkIEMgc3RyaW5nLgo+ICsgKgo+ICsgKiBAcGFyYW0gcGVtX3N0ciAgIFRoZSBQRU0gdGV4 dCwgZS5nLgo+ICsgKiAgICAgICAgICAgICAgICAgICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0t LS1cbuKAplxuLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxuIgo+ICsgKiBAcmV0dXJuICAgICAg ICAgIFg1MDkqIG9uIHN1Y2Nlc3MgKG11c3QgWDUwOV9mcmVlKCkpLCBvciBOVUxMIG9uIGVycm9y Lgo+ICsgKi8KPiArc3RhdGljIFg1MDkgKmNlcnRfZnJvbV9wZW1fc3RyaW5nKGNvbnN0IGNoYXIg KnBlbV9zdHIpCj4gK3sKPiArICAgIEJJTyAqbWVtID0gQklPX25ld19tZW1fYnVmKHBlbV9zdHIs IC0xKTsKPiArICAgIGlmICghbWVtKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19F UlJPUiwgIkJJT19uZXdfbWVtX2J1ZiBmYWlsZWRcbiIpOwo+ICsgICAgICAgIHJldHVybiBOVUxM Owo+ICsgICAgfQo+ICsKPiArICAgIFg1MDkgKmNlcnQgPSBQRU1fcmVhZF9iaW9fWDUwOShtZW0s IE5VTEwsIE5VTEwsIE5VTEwpOwo+ICsgICAgaWYgKCFjZXJ0KSB7Cj4gKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBwYXJzZSBjZXJ0aWZpY2F0ZSBmcm9tIHN0 cmluZ1xuIik7Cj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgQklP X2ZyZWUobWVtKTsKPiArICAgIHJldHVybiBjZXJ0Owo+ICt9Cj4gKwo+ICsKPiB0eXBlZGVmIHN0 cnVjdCBUTFNDb250ZXh0IHsKPiAgICAgY29uc3QgQVZDbGFzcyAqY2xhc3M7Cj4gICAgIFRMU1No YXJlZCB0bHNfc2hhcmVkOwo+IEBAIC0zOCw4ICs0NzEsNTYgQEAgdHlwZWRlZiBzdHJ1Y3QgVExT Q29udGV4dCB7Cj4gICAgIEJJT19NRVRIT0QqIHVybF9iaW9fbWV0aG9kOwo+ICNlbmRpZgo+ICAg ICBpbnQgaW9fZXJyOwo+ICsgICAgY2hhciBlcnJvcl9tZXNzYWdlWzI1Nl07Cj4gfSBUTFNDb250 ZXh0Owo+IAo+ICsvKioKPiArICogUmV0cmlldmVzIHRoZSBlcnJvciBtZXNzYWdlIGZvciB0aGUg bGF0ZXN0IE9wZW5TU0wgZXJyb3IuCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVz IHRoZSBlcnJvciBjb2RlIGZyb20gdGhlIHRocmVhZCdzIGVycm9yIHF1ZXVlLCBjb252ZXJ0cyBp dAo+ICsgKiB0byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZywgYW5kIHN0b3JlcyBpdCBpbiB0aGUg VExTQ29udGV4dCdzIGVycm9yX21lc3NhZ2UgZmllbGQuCj4gKyAqIFRoZSBlcnJvciBxdWV1ZSBp cyB0aGVuIGNsZWFyZWQgdXNpbmcgRVJSX2NsZWFyX2Vycm9yKCkuCj4gKyAqLwo+ICtzdGF0aWMg Y29uc3QgY2hhciogb3BlbnNzbF9nZXRfZXJyb3IoVExTQ29udGV4dCAqY3R4KQo+ICt7Cj4gKyAg ICBpbnQgcjIgPSBFUlJfZ2V0X2Vycm9yKCk7Cj4gKyAgICBpZiAocjIpIHsKPiArICAgICAgICBF UlJfZXJyb3Jfc3RyaW5nX24ocjIsIGN0eC0+ZXJyb3JfbWVzc2FnZSwgc2l6ZW9mKGN0eC0+ZXJy b3JfbWVzc2FnZSkpOwo+ICsgICAgfSBlbHNlCj4gKyAgICAgICAgY3R4LT5lcnJvcl9tZXNzYWdl WzBdID0gJ1wwJzsKPiArCj4gKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKPiArICAgIHJldHVybiBj dHgtPmVycm9yX21lc3NhZ2U7Cj4gK30KPiArCj4gK2ludCBmZl9kdGxzX3NldF91ZHAoVVJMQ29u dGV4dCAqaCwgVVJMQ29udGV4dCAqdWRwKQo+ICt7Cj4gKyAgICBUTFNDb250ZXh0ICpjID0gaC0+ cHJpdl9kYXRhOwo+ICsgICAgYy0+dGxzX3NoYXJlZC51ZHAgPSB1ZHA7Cj4gKyAgICByZXR1cm4g MDsKPiArfQo+ICsKPiAraW50IGZmX2R0bHNfZXhwb3J0X21hdGVyaWFscyhVUkxDb250ZXh0ICpo LCBjaGFyICpkdGxzX3NydHBfbWF0ZXJpYWxzLCBzaXplX3QgbWF0ZXJpYWxzX3N6KQo+ICt7Cj4g KyAgICBpbnQgcmV0ID0gMDsKPiArICAgIGNvbnN0IGNoYXIqIGRzdCA9ICJFWFRSQUNUT1ItZHRs c19zcnRwIjsKPiArICAgIFRMU0NvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAg cmV0ID0gU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWwoYy0+c3NsLCBkdGxzX3NydHBfbWF0ZXJp YWxzLCBtYXRlcmlhbHNfc3osCj4gKyAgICAgICAgZHN0LCBzdHJsZW4oZHN0KSwgTlVMTCwgMCwg MCk7Cj4gKyAgICBpZiAoIXJldCkgewo+ICsgICAgICAgIGF2X2xvZyhjLCBBVl9MT0dfRVJST1Is ICJUTFM6IEZhaWxlZCB0byBleHBvcnQgU1JUUCBtYXRlcmlhbCwgJXNcbiIsIG9wZW5zc2xfZ2V0 X2Vycm9yKGMpKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4g MDsKPiArfQo+ICsKPiAraW50IGZmX2R0bHNfc3RhdGUoVVJMQ29udGV4dCAqaCkKPiArewo+ICsg ICAgVExTQ29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPiArICAgIHJldHVybiBjLT50bHNfc2hh cmVkLnN0YXRlOwo+ICt9Cj4gKwo+IC8qIE9wZW5TU0wgMS4wLjIgb3IgYmVsb3csIHRoZW4geW91 IHdvdWxkIHVzZSBTU0xfbGlicmFyeV9pbml0LiBJZiB5b3UgYXJlCj4gICogdXNpbmcgT3BlblNT TCAxLjEuMCBvciBhYm92ZSwgdGhlbiB0aGUgbGlicmFyeSB3aWxsIGluaXRpYWxpemUKPiAgKiBp dHNlbGYgYXV0b21hdGljYWxseS4KPiBAQCAtMTIxLDcgKzYwMiw3IEBAIHZvaWQgZmZfb3BlbnNz bF9kZWluaXQodm9pZCkKPiB9Cj4gI2VuZGlmCj4gCj4gLXN0YXRpYyBpbnQgcHJpbnRfdGxzX2Vy cm9yKFVSTENvbnRleHQgKmgsIGludCByZXQpCj4gK3N0YXRpYyBpbnQgcHJpbnRfc3NsX2Vycm9y KFVSTENvbnRleHQgKmgsIGludCByZXQpCj4gewo+ICAgICBUTFNDb250ZXh0ICpjID0gaC0+cHJp dl9kYXRhOwo+ICAgICBpbnQgcHJpbnRlZCA9IDAsIGUsIGF2ZXJyID0gQVZFUlJPUihFSU8pOwo+ IEBAIC0xOTMsNyArNjc0LDcgQEAgc3RhdGljIGludCB1cmxfYmlvX2Rlc3Ryb3koQklPICpiKQo+ IHN0YXRpYyBpbnQgdXJsX2Jpb19icmVhZChCSU8gKmIsIGNoYXIgKmJ1ZiwgaW50IGxlbikKPiB7 Cj4gICAgIFRMU0NvbnRleHQgKmMgPSBHRVRfQklPX0RBVEEoYik7Cj4gLSAgICBpbnQgcmV0ID0g ZmZ1cmxfcmVhZChjLT50bHNfc2hhcmVkLnRjcCwgYnVmLCBsZW4pOwo+ICsgICAgaW50IHJldCA9 IGZmdXJsX3JlYWQoYy0+dGxzX3NoYXJlZC5pc19kdGxzID8gYy0+dGxzX3NoYXJlZC51ZHAgOiBj LT50bHNfc2hhcmVkLnRjcCwgYnVmLCBsZW4pOwo+ICAgICBpZiAocmV0ID49IDApCj4gICAgICAg ICByZXR1cm4gcmV0Owo+ICAgICBCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7Cj4gQEAgLTIwOSw3 ICs2OTAsNyBAQCBzdGF0aWMgaW50IHVybF9iaW9fYnJlYWQoQklPICpiLCBjaGFyICpidWYsIGlu dCBsZW4pCj4gc3RhdGljIGludCB1cmxfYmlvX2J3cml0ZShCSU8gKmIsIGNvbnN0IGNoYXIgKmJ1 ZiwgaW50IGxlbikKPiB7Cj4gICAgIFRMU0NvbnRleHQgKmMgPSBHRVRfQklPX0RBVEEoYik7Cj4g LSAgICBpbnQgcmV0ID0gZmZ1cmxfd3JpdGUoYy0+dGxzX3NoYXJlZC50Y3AsIGJ1ZiwgbGVuKTsK PiArICAgIGludCByZXQgPSBmZnVybF93cml0ZShjLT50bHNfc2hhcmVkLmlzX2R0bHMgPyBjLT50 bHNfc2hhcmVkLnVkcCA6IGMtPnRsc19zaGFyZWQudGNwLCBidWYsIGxlbik7Cj4gICAgIGlmIChy ZXQgPj0gMCkKPiAgICAgICAgIHJldHVybiByZXQ7Cj4gICAgIEJJT19jbGVhcl9yZXRyeV9mbGFn cyhiKTsKPiBAQCAtMjUwLDExICs3MzEsMzAwIEBAIHN0YXRpYyBCSU9fTUVUSE9EIHVybF9iaW9f bWV0aG9kID0gewo+IH07Cj4gI2VuZGlmCj4gCj4gK3N0YXRpYyBhdl9jb2xkIHZvaWQgaW5pdF9i aW9fbWV0aG9kKFVSTENvbnRleHQgKmgpCj4gK3sKPiArICAgIFRMU0NvbnRleHQgKnAgPSBoLT5w cml2X2RhdGE7Cj4gKyAgICBCSU8gKmJpbzsKPiArI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIg Pj0gMHgxMDEwMDAwZkwKPiArICAgIHAtPnVybF9iaW9fbWV0aG9kID0gQklPX21ldGhfbmV3KEJJ T19UWVBFX1NPVVJDRV9TSU5LLCAidXJscHJvdG9jb2wgYmlvIik7Cj4gKyAgICBCSU9fbWV0aF9z ZXRfd3JpdGUocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fYndyaXRlKTsKPiArICAgIEJJT19t ZXRoX3NldF9yZWFkKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2JyZWFkKTsKPiArICAgIEJJ T19tZXRoX3NldF9wdXRzKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2JwdXRzKTsKPiArICAg IEJJT19tZXRoX3NldF9jdHJsKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2N0cmwpOwo+ICsg ICAgQklPX21ldGhfc2V0X2NyZWF0ZShwLT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19jcmVhdGUp Owo+ICsgICAgQklPX21ldGhfc2V0X2Rlc3Ryb3kocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9f ZGVzdHJveSk7Cj4gKyAgICBiaW8gPSBCSU9fbmV3KHAtPnVybF9iaW9fbWV0aG9kKTsKPiArICAg IEJJT19zZXRfZGF0YShiaW8sIHApOwo+ICsjZWxzZQo+ICsgICAgYmlvID0gQklPX25ldygmdXJs X2Jpb19tZXRob2QpOwo+ICsgICAgYmlvLT5wdHIgPSBwOwo+ICsjZW5kaWYKPiArICAgIFNTTF9z ZXRfYmlvKHAtPnNzbCwgYmlvLCBiaW8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBvcGVuc3Ns X2luZm9fY2FsbGJhY2soY29uc3QgU1NMICpzc2wsIGludCB3aGVyZSwgaW50IHJldCkgewo+ICsg ICAgY29uc3QgY2hhciAqbWV0aG9kID0gInVuZGVmaW5lZCI7Cj4gKyAgICBUTFNDb250ZXh0ICpj dHggPSAoVExTQ29udGV4dCopU1NMX2dldF9leF9kYXRhKHNzbCwgMCk7Cj4gKwo+ICsgICAgaWYg KHdoZXJlICYgU1NMX1NUX0NPTk5FQ1QpIHsKPiArICAgICAgICBtZXRob2QgPSAiU1NMX2Nvbm5l Y3QiOwo+ICsgICAgfSBlbHNlIGlmICh3aGVyZSAmIFNTTF9TVF9BQ0NFUFQpCj4gKyAgICAgICAg bWV0aG9kID0gIlNTTF9hY2NlcHQiOwo+ICsKPiArICAgIGlmICh3aGVyZSAmIFNTTF9DQl9MT09Q KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiSW5mbyBtZXRob2Q9JXMg c3RhdGU9JXMoJXMpLCB3aGVyZT0lZCwgcmV0PSVkXG4iLAo+ICsgICAgICAgICAgICAgICBtZXRo b2QsIFNTTF9zdGF0ZV9zdHJpbmcoc3NsKSwgU1NMX3N0YXRlX3N0cmluZ19sb25nKHNzbCksIHdo ZXJlLCByZXQpOwo+ICsgICAgfSBlbHNlIGlmICh3aGVyZSAmIFNTTF9DQl9BTEVSVCkgewo+ICsg ICAgICAgIG1ldGhvZCA9ICh3aGVyZSAmIFNTTF9DQl9SRUFEKSA/ICJyZWFkIjoid3JpdGUiOwo+ ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIkFsZXJ0IG1ldGhvZD0lcyBzdGF0 ZT0lcyglcyksIHdoZXJlPSVkLCByZXQ9JWRcbiIsCj4gKyAgICAgICAgICAgICAgIG1ldGhvZCwg U1NMX3N0YXRlX3N0cmluZyhzc2wpLCBTU0xfc3RhdGVfc3RyaW5nX2xvbmcoc3NsKSwgd2hlcmUs IHJldCk7Cj4gKyAgICB9Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBBbHdheXMgcmV0dXJuIDEgdG8g YWNjZXB0IGFueSBjZXJ0aWZpY2F0ZS4gVGhpcyBpcyBiZWNhdXNlIHdlIGFsbG93IHRoZSBwZWVy IHRvCj4gKyAqIHVzZSBhIHRlbXBvcmFyeSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSBmb3IgRFRM Uy4KPiArICovCj4gK3N0YXRpYyBpbnQgb3BlbnNzbF9kdGxzX3ZlcmlmeV9jYWxsYmFjayhpbnQg cHJldmVyaWZ5X29rLCBYNTA5X1NUT1JFX0NUWCAqY3R4KQo+ICt7Cj4gKyAgICByZXR1cm4gMTsK PiArfQo+ICsKPiArc3RhdGljIGludCBkdGxzX2hhbmRzaGFrZShVUkxDb250ZXh0ICpoKQo+ICt7 Cj4gKyAgICBpbnQgcmV0ID0gMCwgcjAsIHIxOwo+ICsgICAgVExTQ29udGV4dCAqcCA9IGgtPnBy aXZfZGF0YTsKPiArCj4gKyAgICByMCA9IFNTTF9kb19oYW5kc2hha2UocC0+c3NsKTsKPiArICAg IHIxID0gU1NMX2dldF9lcnJvcihwLT5zc2wsIHIwKTsKPiArICAgIGlmIChyMCA8PSAwKSB7Cj4g KyAgICAgICAgaWYgKHIxICE9IFNTTF9FUlJPUl9XQU5UX1JFQUQgJiYgcjEgIT0gU1NMX0VSUk9S X1dBTlRfV1JJVEUgJiYgcjEgIT0gU1NMX0VSUk9SX1pFUk9fUkVUVVJOKSB7Cj4gKyAgICAgICAg ICAgIGF2X2xvZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6IFJlYWQgZmFpbGVkLCByMD0lZCwgcjE9 JWQgJXNcbiIsIHIwLCByMSwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+ICsgICAgICAgICAgICBy ZXQgPSBBVkVSUk9SKEVJTyk7Cj4gKyAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgICAgIH0K PiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19UUkFDRSwgIlRMUzog UmVhZCAlZCBieXRlcywgcjA9JWQsIHIxPSVkXG4iLCByMCwgcjAsIHIxKTsKPiArICAgIH0KPiAr Cj4gKyAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBEVExTIGlzIGNvbXBsZXRlZC4gKi8KPiArICAg IGlmIChTU0xfaXNfaW5pdF9maW5pc2hlZChwLT5zc2wpICE9IDEpCj4gKyAgICAgICAgZ290byBl bmQ7Cj4gKwo+ICsgICAgcC0+dGxzX3NoYXJlZC5zdGF0ZSA9IERUTFNfU1RBVEVfRklOSVNIRUQ7 Cj4gK2VuZDoKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBhdl9jb2xkIGlu dCBvcGVuc3NsX2luaXRfY2Ffa2V5X2NlcnQoVVJMQ29udGV4dCAqaCkKPiArewo+ICsgICAgaW50 IHJldDsKPiArICAgIFRMU0NvbnRleHQgKnAgPSBoLT5wcml2X2RhdGE7Cj4gKyAgICBUTFNTaGFy ZWQgKmMgPSAmcC0+dGxzX3NoYXJlZDsKPiArICAgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKPiAr ICAgIFg1MDkgKmNlcnQgPSBOVUxMOwo+ICsgICAgLyogc2V0dXAgY2EsIHByaXZhdGUga2V5LCBj ZXJ0aWZpY2F0ZSAqLwo+ICsgICAgaWYgKGMtPmNhX2ZpbGUpIHsKPiArICAgICAgICBpZiAoIVNT TF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHAtPmN0eCwgYy0+Y2FfZmlsZSwgTlVMTCkpCj4g KyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICJTU0xfQ1RYX2xvYWRfdmVyaWZ5 X2xvY2F0aW9ucyAlc1xuIiwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+ICsgICAgfQo+ICsKPiAr ICAgIGlmIChjLT5jZXJ0X2ZpbGUpIHsKPiArICAgICAgICByZXQgPSBTU0xfQ1RYX3VzZV9jZXJ0 aWZpY2F0ZV9jaGFpbl9maWxlKHAtPmN0eCwgYy0+Y2VydF9maWxlKTsKPiArICAgICAgICBpZiAo cmV0IDw9IDApIHsKPiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIlVuYWJs ZSB0byBsb2FkIGNlcnQgZmlsZSAlczogJXNcbiIsCj4gKyAgICAgICAgICAgICAgIGMtPmNlcnRf ZmlsZSwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9S KEVJTyk7Cj4gKyAgICAgICAgICAgIGdvdG8gZmFpbDsKPiArICAgICAgICB9Cj4gKyAgICB9IGVs c2UgaWYgKHAtPnRsc19zaGFyZWQuY2VydF9idWYpIHsKPiArICAgICAgICBjZXJ0ID0gY2VydF9m cm9tX3BlbV9zdHJpbmcocC0+dGxzX3NoYXJlZC5jZXJ0X2J1Zik7Cj4gKyAgICAgICAgaWYgKFNT TF9DVFhfdXNlX2NlcnRpZmljYXRlKHAtPmN0eCwgY2VydCkgIT0gMSkgewo+ICsgICAgICAgICAg ICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAiU1NMOiBJbml0IFNTTF9DVFhfdXNlX2NlcnRpZmlj YXRlIGZhaWxlZCwgJXNcbiIsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKPiArICAgICAgICAgICAg cmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAg ICAgIH0KPiArICAgIH0gZWxzZSBpZiAocC0+dGxzX3NoYXJlZC5pc19kdGxzKXsKPiArICAgICAg ICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAiVExTOiBJbml0IGNlcnQgZmFpbGVkLCAlc1xuIiwg b3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsK PiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGMtPmtleV9maWxl KSB7Cj4gKyAgICAgICAgcmV0ID0gU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKHAtPmN0eCwg Yy0+a2V5X2ZpbGUsIFNTTF9GSUxFVFlQRV9QRU0pOwo+ICsgICAgICAgIGlmIChyZXQgPD0gMCkg ewo+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGxvYWQg a2V5IGZpbGUgJXM6ICVzXG4iLAo+ICsgICAgICAgICAgICAgICAgYy0+a2V5X2ZpbGUsIG9wZW5z c2xfZ2V0X2Vycm9yKHApKTsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+ICsg ICAgICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICAgICAgfQo+ICsgICAgfSBlbHNlIGlmIChwLT50 bHNfc2hhcmVkLmtleV9idWYpIHsKPiArICAgICAgICBwa2V5ID0gcGtleV9mcm9tX3BlbV9zdHJp bmcocC0+dGxzX3NoYXJlZC5rZXlfYnVmLCAxKTsKPiArICAgICAgICBpZiAoU1NMX0NUWF91c2Vf UHJpdmF0ZUtleShwLT5jdHgsIHBrZXkpICE9IDEpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHAs IEFWX0xPR19FUlJPUiwgIlRMUzogSW5pdCBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5IGZhaWxlZCwg JXNcbiIsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJP UihFSU5WQUwpOwo+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgICAgIH0KPiArICAg IH0gZWxzZSBpZiAocC0+dGxzX3NoYXJlZC5pc19kdGxzKXsKPiArICAgICAgICBhdl9sb2cocCwg QVZfTE9HX0VSUk9SLCAiVExTOiBJbml0IHBrZXkgZmFpbGVkLCAlc1xuIiwgb3BlbnNzbF9nZXRf ZXJyb3IocCkpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiArICAgICAgICBn b3RvIGZhaWw7Cj4gKyAgICB9Cj4gKyAgICByZXQgPSAwOwo+ICtmYWlsOgo+ICsgICAgcmV0dXJu IHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIE9uY2UgdGhlIERUTFMgcm9sZSBoYXMgYmVlbiBu ZWdvdGlhdGVkIC0gYWN0aXZlIGZvciB0aGUgRFRMUyBjbGllbnQgb3IgcGFzc2l2ZSBmb3IgdGhl Cj4gKyAqIERUTFMgc2VydmVyIC0gd2UgcHJvY2VlZCB0byBzZXQgdXAgdGhlIERUTFMgc3RhdGUg YW5kIGluaXRpYXRlIHRoZSBoYW5kc2hha2UuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGR0bHNfc3Rh cnQoVVJMQ29udGV4dCAqaCwgY29uc3QgY2hhciAqdXJsLCBpbnQgZmxhZ3MsIEFWRGljdGlvbmFy eSAqKm9wdGlvbnMpCj4gK3sKPiArICAgIFRMU0NvbnRleHQgKnAgPSBoLT5wcml2X2RhdGE7Cj4g KyAgICBUTFNTaGFyZWQgKmMgPSAmcC0+dGxzX3NoYXJlZDsKPiArICAgIGludCByZXQgPSAwOwo+ ICsgICAgYy0+aXNfZHRscyA9IDE7Cj4gKyAgICBjb25zdCBjaGFyKiBjaXBoZXJzID0gIkFMTCI7 Cj4gKyAgICAvKioKPiArICAgICAqIFRoZSBwcm9maWxlIGZvciBPcGVuU1NMJ3MgU1JUUCBpcyBT UlRQX0FFUzEyOF9DTV9TSEExXzgwLCBzZWUgc3NsL2QxX3NydHAuYy4KPiArICAgICAqIFRoZSBw cm9maWxlIGZvciBGRm1wZWcncyBTUlRQIGlzIFNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV84MCwg c2VlIGxpYmF2Zm9ybWF0L3NydHAuYy4KPiArICAgICAqLwo+ICsgICAgY29uc3QgY2hhciogcHJv ZmlsZXMgPSAiU1JUUF9BRVMxMjhfQ01fU0hBMV84MCI7Cj4gKyAgICAvKiBSZWZlciB0byB0aGUg dGVzdCBjYXNlcyByZWdhcmRpbmcgdGhlc2UgY3VydmVzIGluIHRoZSBXZWJSVEMgY29kZS4gKi8K PiArI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDEwMDAwMEwgLyogT3BlblNTTCAx LjEuMCAqLwo+ICsgICAgY29uc3QgY2hhciogY3VydmVzID0gIlgyNTUxOTpQLTI1NjpQLTM4NDpQ LTUyMSI7Cj4gKyNlbGlmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMjAwMEwgLyog T3BlblNTTCAxLjAuMiAqLwo+ICsgICAgY29uc3QgY2hhciogY3VydmVzID0gIlAtMjU2OlAtMzg0 OlAtNTIxIjsKPiArI2VuZGlmCj4gKwo+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4 MTAwMDIwMDBMIC8qIE9wZW5TU0wgdjEuMC4yICovCj4gKyAgICBwLT5jdHggPSBTU0xfQ1RYX25l dyhEVExTdjFfbWV0aG9kKCkpOwo+ICsjZWxzZQo+ICsgICAgcC0+Y3R4ID0gU1NMX0NUWF9uZXco RFRMU19tZXRob2QoKSk7Cj4gKyNlbmRpZgo+ICsgICAgaWYgKCFwLT5jdHgpIHsKPiArICAgICAg ICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsgICAgfQo+ ICsKPiArI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMjAwMEwgLyogT3BlblNT TCAxLjAuMiAqLwo+ICsgICAgLyogRm9yIEVDRFNBLCB3ZSBjb3VsZCBzZXQgdGhlIGN1cnZlcyBs aXN0LiAqLwo+ICsgICAgaWYgKFNTTF9DVFhfc2V0MV9jdXJ2ZXNfbGlzdChwLT5jdHgsIGN1cnZl cykgIT0gMSkgewo+ICsgICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQg U1NMX0NUWF9zZXQxX2N1cnZlc19saXN0IGZhaWxlZCwgY3VydmVzPSVzLCAlc1xuIiwKPiArICAg ICAgICAgICAgY3VydmVzLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7Cj4gKyAgICAgICAgcmV0ID0g QVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKyNlbmRp Zgo+ICsKPiArI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMTAwMDAwTCAvLyB2MS4x LngKPiArI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMDAyMDAwTCAvLyB2MS4wLjIK PiArICAgIGlmIChjdHgtPmR0bHNfZWNrZXkpCj4gKyAgICAgICAgU1NMX0NUWF9zZXRfdG1wX2Vj ZGgocC0+Y3R4LCBwLT5kdGxzX2Vja2V5KTsKPiArI2Vsc2UKPiArICAgIFNTTF9DVFhfc2V0X2Vj ZGhfYXV0byhwLT5jdHgsIDEpOwo+ICsjZW5kaWYKPiArI2VuZGlmCj4gKwo+ICsgICAgLyoqCj4g KyAgICAgKiBXZSBhY3RpdmF0ZSAiQUxMIiBjaXBoZXIgc3VpdGVzIHRvIGFsaWduIHdpdGggdGhl IHBlZXIncyBjYXBhYmlsaXRpZXMsCj4gKyAgICAgKiBlbnN1cmluZyBtYXhpbXVtIGNvbXBhdGli aWxpdHkuCj4gKyAgICAgKi8KPiArICAgIGlmIChTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChwLT5j dHgsIGNpcGhlcnMpICE9IDEpIHsKPiArICAgICAgICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAi VExTOiBJbml0IFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0IGZhaWxlZCwgY2lwaGVycz0lcywgJXNc biIsCj4gKyAgICAgICAgICAgIGNpcGhlcnMsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKPiArICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAg IH0KPiArICAgIHJldCA9IG9wZW5zc2xfaW5pdF9jYV9rZXlfY2VydChoKTsKPiArICAgIGlmIChy ZXQgPCAwKSBnb3RvIGZhaWw7Cj4gKwo+ICsgICAgLyogU2VydmVyIHdpbGwgc2VuZCBDZXJ0aWZp Y2F0ZSBSZXF1ZXN0LiAqLwo+ICsgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHAtPmN0eCwgU1NMX1ZF UklGWV9QRUVSIHwgU1NMX1ZFUklGWV9DTElFTlRfT05DRSwgb3BlbnNzbF9kdGxzX3ZlcmlmeV9j YWxsYmFjayk7Cj4gKyAgICAvKiBUaGUgZGVwdGggY291bnQgaXMgImxldmVsIDA6cGVlciBjZXJ0 aWZpY2F0ZSIsICJsZXZlbCAxOiBDQSBjZXJ0aWZpY2F0ZSIsCj4gKyAgICAgKiAibGV2ZWwgMjog aGlnaGVyIGxldmVsIENBIGNlcnRpZmljYXRlIiwgYW5kIHNvIG9uLiAqLwo+ICsgICAgU1NMX0NU WF9zZXRfdmVyaWZ5X2RlcHRoKHAtPmN0eCwgNCk7Cj4gKyAgICAvKiBXaGV0aGVyIHdlIHNob3Vs ZCByZWFkIGFzIG1hbnkgaW5wdXQgYnl0ZXMgYXMgcG9zc2libGUgKGZvciBub24tYmxvY2tpbmcg cmVhZHMpIG9yIG5vdC4gKi8KPiArICAgIFNTTF9DVFhfc2V0X3JlYWRfYWhlYWQocC0+Y3R4LCAx KTsKPiArICAgIC8qIFNldHVwIHRoZSBTUlRQIGNvbnRleHQgKi8KPiArICAgIGlmIChTU0xfQ1RY X3NldF90bHNleHRfdXNlX3NydHAocC0+Y3R4LCBwcm9maWxlcykpIHsKPiArICAgICAgICBhdl9s b2cocCwgQVZfTE9HX0VSUk9SLCAiVExTOiBJbml0IFNTTF9DVFhfc2V0X3Rsc2V4dF91c2Vfc3J0 cCBmYWlsZWQsIHByb2ZpbGVzPSVzLCAlc1xuIiwKPiArICAgICAgICAgICAgcHJvZmlsZXMsIG9w ZW5zc2xfZ2V0X2Vycm9yKHApKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4g KyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0KPiArCj4gKyAgICAvKiBUaGUgc3NsIHNob3Vs ZCBub3QgYmUgY3JlYXRlZCB1bmxlc3MgdGhlIGN0eCBoYXMgYmVlbiBpbml0aWFsaXplZC4gKi8K PiArICAgIHAtPnNzbCA9IFNTTF9uZXcocC0+Y3R4KTsKPiArICAgIGlmICghcC0+c3NsKSB7Cj4g KyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiAr ICAgIH0KPiArCj4gKyAgICAvKiBTZXR1cCB0aGUgY2FsbGJhY2sgZm9yIGxvZ2dpbmcuICovCj4g KyAgICBTU0xfc2V0X2V4X2RhdGEocC0+c3NsLCAwLCBwKTsKPiArICAgIFNTTF9zZXRfaW5mb19j YWxsYmFjayhwLT5zc2wsIG9wZW5zc2xfaW5mb19jYWxsYmFjayk7Cj4gKyAgICAvKioKPiArICAg ICAqIFdlIGhhdmUgc2V0IHRoZSBNVFUgdG8gZnJhZ21lbnQgdGhlIERUTFMgcGFja2V0LiBJdCBp cyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZQo+ICsgICAgICogcGFja2V0IGlzIHNwbGl0IHRv IGVuc3VyZSB0aGF0IGVhY2ggaGFuZHNoYWtlIHBhY2tldCBpcyBzbWFsbGVyIHRoYW4gdGhlIE1U VS4KPiArICAgICAqLwo+ICsgICAgU1NMX3NldF9vcHRpb25zKHAtPnNzbCwgU1NMX09QX05PX1FV RVJZX01UVSk7Cj4gKyAgICBTU0xfc2V0X210dShwLT5zc2wsIHAtPnRsc19zaGFyZWQubXR1KTsK PiArI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTBiMEwgLyogT3BlblNTTCAx LjAuMWsgKi8KPiArICAgIERUTFNfc2V0X2xpbmtfbXR1KHAtPnNzbCwgcC0+dGxzX3NoYXJlZC5t dHUpOwo+ICsjZW5kaWYKPiArICAgIGluaXRfYmlvX21ldGhvZChoKTsKPiArCj4gKyAgICBpZiAo cC0+dGxzX3NoYXJlZC51c2VfZXh0ZXJuYWxfdWRwICE9IDEpIHsKPiArICAgICAgICBpZiAoKHJl dCA9IGZmX3Rsc19vcGVuX3VuZGVybHlpbmcoJnAtPnRsc19zaGFyZWQsIGgsIHVybCwgb3B0aW9u cykpIDwgMCkgewo+ICsgICAgICAgICAgICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAiV0hJUDog RmFpbGVkIHRvIGNvbm5lY3QgJXNcbiIsIHVybCk7Cj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7 Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIC8qIFNldHVwIERUTFMgYXMgcGFzc2l2 ZSwgd2hpY2ggaXMgc2VydmVyIHJvbGUuICovCj4gKyAgICBjLT5saXN0ZW4gPyBTU0xfc2V0X2Fj Y2VwdF9zdGF0ZShwLT5zc2wpIDogU1NMX3NldF9jb25uZWN0X3N0YXRlKHAtPnNzbCk7Cj4gKwo+ ICsgICAgLyoqCj4gKyAgICAgKiBEdXJpbmcgaW5pdGlhbGl6YXRpb24sIHdlIG9ubHkgbmVlZCB0 byBjYWxsIFNTTF9kb19oYW5kc2hha2Ugb25jZSBiZWNhdXNlIFNTTF9yZWFkIGNvbnN1bWVzCj4g KyAgICAgKiB0aGUgaGFuZHNoYWtlIG1lc3NhZ2UgaWYgdGhlIGhhbmRzaGFrZSBpcyBpbmNvbXBs ZXRlLgo+ICsgICAgICogVG8gc2ltcGxpZnkgbWFpbnRlbmFuY2UsIHdlIGluaXRpYXRlIHRoZSBo YW5kc2hha2UgZm9yIGJvdGggdGhlIERUTFMgc2VydmVyIGFuZCBjbGllbnQgYWZ0ZXIKPiArICAg ICAqIHNlbmRpbmcgb3V0IHRoZSBJQ0UgcmVzcG9uc2UgaW4gdGhlIHN0YXJ0X2FjdGl2ZV9oYW5k c2hha2UgZnVuY3Rpb24uIEl0J3Mgd29ydGggbm90aW5nIHRoYXQKPiArICAgICAqIGFsdGhvdWdo IHRoZSBEVExTIHNlcnZlciBtYXkgcmVjZWl2ZSB0aGUgQ2xpZW50SGVsbG8gaW1tZWRpYXRlbHkg YWZ0ZXIgc2VuZGluZyBvdXQgdGhlIElDRQo+ICsgICAgICogcmVzcG9uc2UsIHRoaXMgc2hvdWxk bid0IGJlIGFuIGlzc3VlIGFzIHRoZSBoYW5kc2hha2UgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9y ZSBhbnkgRFRMUwo+ICsgICAgICogcGFja2V0cyBhcmUgcmVjZWl2ZWQuCj4gKyAgICAgKgo+ICsg ICAgICogVGhlIFNTTF9kb19oYW5kc2hha2UgY2FuJ3QgYmUgY2FsbGVkIGlmIERUTFMgaGFzbid0 IHByZXBhcmUgZm9yIHVkcC4KPiArICAgICAqLwo+ICsgICAgaWYgKHAtPnRsc19zaGFyZWQudXNl X2V4dGVybmFsX3VkcCAhPSAxKSB7Cj4gKyAgICAgICAgcmV0ID0gZHRsc19oYW5kc2hha2UoaCk7 Cj4gKyAgICAgICAgLy8gRmF0YWwgU1NMIGVycm9yLCBmb3IgZXhhbXBsZSwgbm8gYXZhaWxhYmxl IHN1aXRlIHdoZW4gcGVlciBpcyBEVExTIDEuMCB3aGlsZSB3ZSBhcmUgRFRMUyAxLjIuCj4gKyAg ICAgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJP UiwgIlRMUzogRmFpbGVkIHRvIGRyaXZlIFNTTCBjb250ZXh0LCByZXQ9JWRcbiIsIHJldCk7Cj4g KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTyk7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ ICsKPiArICAgIGF2X2xvZyhwLCBBVl9MT0dfVkVSQk9TRSwgIlRMUzogU2V0dXAgb2ssIE1UVT0l ZCwgZmluZ2VycHJpbnQgJXNcbiIsCj4gKyAgICAgICAgcC0+dGxzX3NoYXJlZC5tdHUsIHAtPnRs c19zaGFyZWQuZmluZ2VycHJpbnQpOwo+ICsKPiArICAgIHJldCA9IDA7Cj4gK2ZhaWw6Cj4gKyAg ICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogQ2xlYW51cCB0aGUgRFRMUyBjb250 ZXh0Lgo+ICsgKi8KPiArc3RhdGljIGF2X2NvbGQgaW50IGR0bHNfY2xvc2UoVVJMQ29udGV4dCAq aCkKPiArewo+ICsgICAgVExTQ29udGV4dCAqY3R4ID0gaC0+cHJpdl9kYXRhOwo+ICsgICAgU1NM X2ZyZWUoY3R4LT5zc2wpOwo+ICsgICAgU1NMX0NUWF9mcmVlKGN0eC0+Y3R4KTsKPiArICAgIGF2 X2ZyZWVwKCZjdHgtPnRsc19zaGFyZWQuZmluZ2VycHJpbnQpOwo+ICsgICAgYXZfZnJlZXAoJmN0 eC0+dGxzX3NoYXJlZC5jZXJ0X2J1Zik7Cj4gKyAgICBhdl9mcmVlcCgmY3R4LT50bHNfc2hhcmVk LmtleV9idWYpOwo+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MzAwMDAwMDBMIC8q IE9wZW5TU0wgMy4wICovCj4gKyAgICBFQ19LRVlfZnJlZShjdHgtPmR0bHNfZWNrZXkpOwo+ICsj ZW5kaWYKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+IHN0YXRpYyBpbnQgdGxzX29wZW4oVVJM Q29udGV4dCAqaCwgY29uc3QgY2hhciAqdXJpLCBpbnQgZmxhZ3MsIEFWRGljdGlvbmFyeSAqKm9w dGlvbnMpCj4gewo+ICAgICBUTFNDb250ZXh0ICpwID0gaC0+cHJpdl9kYXRhOwo+ICAgICBUTFNT aGFyZWQgKmMgPSAmcC0+dGxzX3NoYXJlZDsKPiAtICAgIEJJTyAqYmlvOwo+ICAgICBpbnQgcmV0 Owo+IAo+ICNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDEwMDAwMEwKPiBAQCAtMjcx LDUyICsxMDQxLDI2IEBAIHN0YXRpYyBpbnQgdGxzX29wZW4oVVJMQ29udGV4dCAqaCwgY29uc3Qg Y2hhciAqdXJpLCBpbnQgZmxhZ3MsIEFWRGljdGlvbmFyeSAqKm9wCj4gICAgIC8vIHN1cHBvcnQg Zm9yIHRoZSBvbGQgcHJvdG9jb2xzIGltbWVkaWF0ZWx5IGFmdGVyIGNyZWF0aW5nIHRoZSBjb250 ZXh0Lgo+ICAgICBwLT5jdHggPSBTU0xfQ1RYX25ldyhjLT5saXN0ZW4gPyBTU0x2MjNfc2VydmVy X21ldGhvZCgpIDogU1NMdjIzX2NsaWVudF9tZXRob2QoKSk7Cj4gICAgIGlmICghcC0+Y3R4KSB7 Cj4gLSAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIiVzXG4iLCBFUlJfZXJyb3Jfc3Ry aW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0df RVJST1IsICIlc1xuIiwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+ICAgICAgICAgcmV0ID0gQVZF UlJPUihFSU8pOwo+ICAgICAgICAgZ290byBmYWlsOwo+ICAgICB9Cj4gICAgIFNTTF9DVFhfc2V0 X29wdGlvbnMocC0+Y3R4LCBTU0xfT1BfTk9fU1NMdjIgfCBTU0xfT1BfTk9fU1NMdjMpOwo+IC0g ICAgaWYgKGMtPmNhX2ZpbGUpIHsKPiAtICAgICAgICBpZiAoIVNTTF9DVFhfbG9hZF92ZXJpZnlf bG9jYXRpb25zKHAtPmN0eCwgYy0+Y2FfZmlsZSwgTlVMTCkpCj4gLSAgICAgICAgICAgIGF2X2xv ZyhoLCBBVl9MT0dfRVJST1IsICJTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyAlc1xuIiwg RVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKPiAtICAgIH0KPiAtICAg IGlmIChjLT5jZXJ0X2ZpbGUgJiYgIVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUo cC0+Y3R4LCBjLT5jZXJ0X2ZpbGUpKSB7Cj4gLSAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJP UiwgIlVuYWJsZSB0byBsb2FkIGNlcnQgZmlsZSAlczogJXNcbiIsCj4gLSAgICAgICAgICAgICAg IGMtPmNlcnRfZmlsZSwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsK PiAtICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4gLSAgICAgICAgZ290byBmYWlsOwo+IC0g ICAgfQo+IC0gICAgaWYgKGMtPmtleV9maWxlICYmICFTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2Zp bGUocC0+Y3R4LCBjLT5rZXlfZmlsZSwgU1NMX0ZJTEVUWVBFX1BFTSkpIHsKPiAtICAgICAgICBh dl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGxvYWQga2V5IGZpbGUgJXM6ICVzXG4i LAo+IC0gICAgICAgICAgICAgICBjLT5rZXlfZmlsZSwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0 X2Vycm9yKCksIE5VTEwpKTsKPiAtICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4gLSAgICAg ICAgZ290byBmYWlsOwo+IC0gICAgfQo+ICsgICAgcmV0ID0gb3BlbnNzbF9pbml0X2NhX2tleV9j ZXJ0KGgpOwo+ICsgICAgaWYgKHJldCA8IDApIGdvdG8gZmFpbDsKPiAgICAgLy8gTm90ZSwgdGhp cyBkb2Vzbid0IGNoZWNrIHRoYXQgdGhlIHBlZXIgY2VydGlmaWNhdGUgYWN0dWFsbHkgbWF0Y2hl cwo+ICAgICAvLyB0aGUgcmVxdWVzdGVkIGhvc3RuYW1lLgo+ICAgICBpZiAoYy0+dmVyaWZ5KQo+ ICAgICAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHAtPmN0eCwgU1NMX1ZFUklGWV9QRUVSfFNTTF9W RVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQsIE5VTEwpOwo+ICAgICBwLT5zc2wgPSBTU0xfbmV3 KHAtPmN0eCk7Cj4gICAgIGlmICghcC0+c3NsKSB7Cj4gLSAgICAgICAgYXZfbG9nKGgsIEFWX0xP R19FUlJPUiwgIiVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkp Owo+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICIlc1xuIiwgb3BlbnNzbF9nZXRf ZXJyb3IocCkpOwo+ICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+ICAgICAgICAgZ290byBm YWlsOwo+ICAgICB9Cj4gLSNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMGZM Cj4gLSAgICBwLT51cmxfYmlvX21ldGhvZCA9IEJJT19tZXRoX25ldyhCSU9fVFlQRV9TT1VSQ0Vf U0lOSywgInVybHByb3RvY29sIGJpbyIpOwo+IC0gICAgQklPX21ldGhfc2V0X3dyaXRlKHAtPnVy bF9iaW9fbWV0aG9kLCB1cmxfYmlvX2J3cml0ZSk7Cj4gLSAgICBCSU9fbWV0aF9zZXRfcmVhZChw LT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19icmVhZCk7Cj4gLSAgICBCSU9fbWV0aF9zZXRfcHV0 cyhwLT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19icHV0cyk7Cj4gLSAgICBCSU9fbWV0aF9zZXRf Y3RybChwLT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19jdHJsKTsKPiAtICAgIEJJT19tZXRoX3Nl dF9jcmVhdGUocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fY3JlYXRlKTsKPiAtICAgIEJJT19t ZXRoX3NldF9kZXN0cm95KHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2Rlc3Ryb3kpOwo+IC0g ICAgYmlvID0gQklPX25ldyhwLT51cmxfYmlvX21ldGhvZCk7Cj4gLSAgICBCSU9fc2V0X2RhdGEo YmlvLCBwKTsKPiAtI2Vsc2UKPiAtICAgIGJpbyA9IEJJT19uZXcoJnVybF9iaW9fbWV0aG9kKTsK PiAtICAgIGJpby0+cHRyID0gcDsKPiAtI2VuZGlmCj4gLSAgICBTU0xfc2V0X2JpbyhwLT5zc2ws IGJpbywgYmlvKTsKPiArICAgIFNTTF9zZXRfZXhfZGF0YShwLT5zc2wsIDAsIHApOwo+ICsgICAg U1NMX0NUWF9zZXRfaW5mb19jYWxsYmFjayhwLT5jdHgsIG9wZW5zc2xfaW5mb19jYWxsYmFjayk7 Cj4gKyAgICBpbml0X2Jpb19tZXRob2QoaCk7Cj4gICAgIGlmICghYy0+bGlzdGVuICYmICFjLT5u dW1lcmljaG9zdCkKPiAgICAgICAgIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShwLT5zc2wsIGMt Pmhvc3QpOwo+ICAgICByZXQgPSBjLT5saXN0ZW4gPyBTU0xfYWNjZXB0KHAtPnNzbCkgOiBTU0xf Y29ubmVjdChwLT5zc2wpOwo+IEBAIC0zMjUsNyArMTA2OSw3IEBAIHN0YXRpYyBpbnQgdGxzX29w ZW4oVVJMQ29udGV4dCAqaCwgY29uc3QgY2hhciAqdXJpLCBpbnQgZmxhZ3MsIEFWRGljdGlvbmFy eSAqKm9wCj4gICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4gICAgICAgICBnb3RvIGZhaWw7 Cj4gICAgIH0gZWxzZSBpZiAocmV0IDwgMCkgewo+IC0gICAgICAgIHJldCA9IHByaW50X3Rsc19l cnJvcihoLCByZXQpOwo+ICsgICAgICAgIHJldCA9IHByaW50X3NzbF9lcnJvcihoLCByZXQpOwo+ ICAgICAgICAgZ290byBmYWlsOwo+ICAgICB9Cj4gCj4gQEAgLTMzOCwzMSArMTA4MiwzNSBAQCBm YWlsOgo+IHN0YXRpYyBpbnQgdGxzX3JlYWQoVVJMQ29udGV4dCAqaCwgdWludDhfdCAqYnVmLCBp bnQgc2l6ZSkKPiB7Cj4gICAgIFRMU0NvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7Cj4gKyAgICBV UkxDb250ZXh0ICp1YyA9IGMtPnRsc19zaGFyZWQuaXNfZHRscyA/IGMtPnRsc19zaGFyZWQudWRw Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGMtPnRsc19z aGFyZWQudGNwOwo+ICAgICBpbnQgcmV0Owo+ICAgICAvLyBTZXQgb3IgY2xlYXIgdGhlIEFWSU9f RkxBR19OT05CTE9DSyBvbiBjLT50bHNfc2hhcmVkLnRjcAo+IC0gICAgYy0+dGxzX3NoYXJlZC50 Y3AtPmZsYWdzICY9IH5BVklPX0ZMQUdfTk9OQkxPQ0s7Cj4gLSAgICBjLT50bHNfc2hhcmVkLnRj cC0+ZmxhZ3MgfD0gaC0+ZmxhZ3MgJiBBVklPX0ZMQUdfTk9OQkxPQ0s7Cj4gKyAgICB1Yy0+Zmxh Z3MgJj0gfkFWSU9fRkxBR19OT05CTE9DSzsKPiArICAgIHVjLT5mbGFncyB8PSBoLT5mbGFncyAm IEFWSU9fRkxBR19OT05CTE9DSzsKPiAgICAgcmV0ID0gU1NMX3JlYWQoYy0+c3NsLCBidWYsIHNp emUpOwo+ICAgICBpZiAocmV0ID4gMCkKPiAgICAgICAgIHJldHVybiByZXQ7Cj4gICAgIGlmIChy ZXQgPT0gMCkKPiAgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiAtICAgIHJldHVybiBwcmlu dF90bHNfZXJyb3IoaCwgcmV0KTsKPiArICAgIHJldHVybiBwcmludF9zc2xfZXJyb3IoaCwgcmV0 KTsKPiB9Cj4gCj4gc3RhdGljIGludCB0bHNfd3JpdGUoVVJMQ29udGV4dCAqaCwgY29uc3QgdWlu dDhfdCAqYnVmLCBpbnQgc2l6ZSkKPiB7Cj4gICAgIFRMU0NvbnRleHQgKmMgPSBoLT5wcml2X2Rh dGE7Cj4gKyAgICBVUkxDb250ZXh0ICp1YyA9IGMtPnRsc19zaGFyZWQuaXNfZHRscyA/IGMtPnRs c19zaGFyZWQudWRwCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IGMtPnRsc19zaGFyZWQudGNwOwo+ICAgICBpbnQgcmV0Owo+ICAgICAvLyBTZXQgb3IgY2xl YXIgdGhlIEFWSU9fRkxBR19OT05CTE9DSyBvbiBjLT50bHNfc2hhcmVkLnRjcAo+IC0gICAgYy0+ dGxzX3NoYXJlZC50Y3AtPmZsYWdzICY9IH5BVklPX0ZMQUdfTk9OQkxPQ0s7Cj4gLSAgICBjLT50 bHNfc2hhcmVkLnRjcC0+ZmxhZ3MgfD0gaC0+ZmxhZ3MgJiBBVklPX0ZMQUdfTk9OQkxPQ0s7Cj4g KyAgICB1Yy0+ZmxhZ3MgJj0gfkFWSU9fRkxBR19OT05CTE9DSzsKPiArICAgIHVjLT5mbGFncyB8 PSBoLT5mbGFncyAmIEFWSU9fRkxBR19OT05CTE9DSzsKPiAgICAgcmV0ID0gU1NMX3dyaXRlKGMt PnNzbCwgYnVmLCBzaXplKTsKPiAgICAgaWYgKHJldCA+IDApCj4gICAgICAgICByZXR1cm4gcmV0 Owo+ICAgICBpZiAocmV0ID09IDApCj4gICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gLSAg ICByZXR1cm4gcHJpbnRfdGxzX2Vycm9yKGgsIHJldCk7Cj4gKyAgICByZXR1cm4gcHJpbnRfc3Ns X2Vycm9yKGgsIHJldCk7Cj4gfQo+IAo+IHN0YXRpYyBpbnQgdGxzX2dldF9maWxlX2hhbmRsZShV UkxDb250ZXh0ICpoKQo+IEBAIC00MDEsMyArMTE0OSwyMiBAQCBjb25zdCBVUkxQcm90b2NvbCBm Zl90bHNfcHJvdG9jb2wgPSB7Cj4gICAgIC5mbGFncyAgICAgICAgICA9IFVSTF9QUk9UT0NPTF9G TEFHX05FVFdPUkssCj4gICAgIC5wcml2X2RhdGFfY2xhc3MgPSAmdGxzX2NsYXNzLAo+IH07Cj4g Kwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyBkdGxzX2NsYXNzID0gewo+ICsgICAgLmNsYXNzX25h bWUgPSAiZHRscyIsCj4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAo+ ICsgICAgLm9wdGlvbiAgICAgPSBvcHRpb25zLAo+ICsgICAgLnZlcnNpb24gICAgPSBMSUJBVlVU SUxfVkVSU0lPTl9JTlQsCj4gK307Cj4gKwo+ICtjb25zdCBVUkxQcm90b2NvbCBmZl9kdGxzX3By b3RvY29sID0gewo+ICsgICAgLm5hbWUgICAgICAgICAgID0gImR0bHMiLAo+ICsgICAgLnVybF9v cGVuMiAgICAgID0gZHRsc19zdGFydCwKPiArICAgIC51cmxfaGFuZHNoYWtlICA9IGR0bHNfaGFu ZHNoYWtlLAo+ICsgICAgLnVybF9jbG9zZSAgICAgID0gZHRsc19jbG9zZSwKPiArICAgIC51cmxf cmVhZCAgICAgICA9IHRsc19yZWFkLAo+ICsgICAgLnVybF93cml0ZSAgICAgID0gdGxzX3dyaXRl LAo+ICsgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFRMU0NvbnRleHQpLAo+ICsgICAgLmZs YWdzICAgICAgICAgID0gVVJMX1BST1RPQ09MX0ZMQUdfTkVUV09SSywKPiArICAgIC5wcml2X2Rh dGFfY2xhc3MgPSAmZHRsc19jbGFzcywKPiArfTsKPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQv d2hpcC5jIGIvbGliYXZmb3JtYXQvd2hpcC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwLi4wNjcxZTIzNjM1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9y bWF0L3doaXAuYwo+IEBAIC0wLDAgKzEsMTkxNyBAQAo+ICsvKgo+ICsgKiBXZWJSVEMtSFRUUCBp bmdlc3Rpb24gcHJvdG9jb2wgKFdISVApIG11eGVyCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMyBU aGUgRkZtcGVnIFByb2plY3QKPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVn Lgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsg KiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl Cj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjaW5jbHVkZSAibGliYXZj b2RlYy9hdmNvZGVjLmgiCj4gKyNpbmNsdWRlICJsaWJhdmNvZGVjL2NvZGVjX2Rlc2MuaCIKPiAr I2luY2x1ZGUgImxpYmF2Y29kZWMvaDI2NC5oIgo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9zdGFy dGNvZGUuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9iYXNlNjQuaCIKPiArI2luY2x1ZGUgImxp YmF2dXRpbC9icHJpbnQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9jcmMuaCIKPiArI2luY2x1 ZGUgImxpYmF2dXRpbC9obWFjLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRl LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbGZnLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwv b3B0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvcmFuZG9tX3NlZWQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lLmgiCj4gKyNpbmNs dWRlICJhdmMuaCIKPiArI2luY2x1ZGUgIm5hbC5oIgo+ICsjaW5jbHVkZSAiYXZpb19pbnRlcm5h bC5oIgo+ICsjaW5jbHVkZSAiaHR0cC5oIgo+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiArI2lu Y2x1ZGUgIm11eC5oIgo+ICsjaW5jbHVkZSAibmV0d29yay5oIgo+ICsjaW5jbHVkZSAic3J0cC5o Igo+ICsjaW5jbHVkZSAidGxzLmgiCj4gKwo+ICsvKioKPiArICogTWF4aW11bSBzaXplIGxpbWl0 IG9mIGEgU2Vzc2lvbiBEZXNjcmlwdGlvbiBQcm90b2NvbCAoU0RQKSwKPiArICogYmUgaXQgYW4g b2ZmZXIgb3IgYW5zd2VyLgo+ICsgKi8KPiArI2RlZmluZSBNQVhfU0RQX1NJWkUgODE5Mgo+ICsK PiArLyoqCj4gKyAqIFRoZSBzaXplIG9mIHRoZSBTZWN1cmUgUmVhbC10aW1lIFRyYW5zcG9ydCBQ cm90b2NvbCAoU1JUUCkgbWFzdGVyIGtleSBtYXRlcmlhbAo+ICsgKiB0aGF0IGlzIGV4cG9ydGVk IGJ5IFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wpIGFmdGVyIGEgc3VjY2Vzc2Z1bCBEYXRhZ3Jh bQo+ICsgKiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKERUTFMpIGhhbmRzaGFrZS4gVGhpcyBt YXRlcmlhbCBjb25zaXN0cyBvZiBhIGtleQo+ICsgKiBvZiAxNiBieXRlcyBhbmQgYSBzYWx0IG9m IDE0IGJ5dGVzLgo+ICsgKi8KPiArI2RlZmluZSBEVExTX1NSVFBfS0VZX0xFTiAxNgo+ICsjZGVm aW5lIERUTFNfU1JUUF9TQUxUX0xFTiAxNAo+ICsKPiArLyoqCj4gKyAqIFRoZSBtYXhpbXVtIHNp emUgb2YgdGhlIFNlY3VyZSBSZWFsLXRpbWUgVHJhbnNwb3J0IFByb3RvY29sIChTUlRQKSBITUFD IGNoZWNrc3VtCj4gKyAqIGFuZCBwYWRkaW5nIHRoYXQgaXMgYXBwZW5kZWQgdG8gdGhlIGVuZCBv ZiB0aGUgcGFja2V0LiBUbyBjYWxjdWxhdGUgdGhlIG1heGltdW0KPiArICogc2l6ZSBvZiB0aGUg VXNlciBEYXRhZ3JhbSBQcm90b2NvbCAoVURQKSBwYWNrZXQgdGhhdCBjYW4gYmUgc2VudCBvdXQs IHN1YnRyYWN0Cj4gKyAqIHRoaXMgc2l6ZSBmcm9tIHRoZSBgcGt0X3NpemVgLgo+ICsgKi8KPiAr I2RlZmluZSBEVExTX1NSVFBfQ0hFQ0tTVU1fTEVOIDE2Cj4gKwo+ICsvKioKPiArICogV2hlbiBz ZW5kaW5nIElDRSBvciBEVExTIG1lc3NhZ2VzLCByZXNwb25zZXMgYXJlIHJlY2VpdmVkIHZpYSBV RFAuIEhvd2V2ZXIsIHRoZSBwZWVyCj4gKyAqIG1heSBub3QgYmUgcmVhZHkgYW5kIHJldHVybiBF QUdBSU4sIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIHdhaXQgZm9yIGEgc2hvcnQgZHVyYXRpb24K PiArICogYW5kIHJldHJ5IHJlYWRpbmcuCj4gKyAqIEZvciBpbnN0YW5jZSwgaWYgd2UgdHJ5IHRv IHJlYWQgZnJvbSBVRFAgYW5kIGdldCBFQUdBSU4sIHdlIHNsZWVwIGZvciA1bXMgYW5kIHJldHJ5 Lgo+ICsgKiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gbGltaXQgdGhlIHRvdGFsIGR1cmF0aW9uIGlu IG1pbGxpc2Vjb25kcyAoZS5nLiwgNTBtcyksIHNvIHdlCj4gKyAqIHdpbGwgdHJ5IGF0IG1vc3Qg NSB0aW1lcy4KPiArICogS2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBtYWNybyBzaG91bGQgaGF2ZSBh IG1pbmltdW0gZHVyYXRpb24gb2YgNSBtcy4KPiArICovCj4gKyNkZWZpbmUgSUNFX0RUTFNfUkVB RF9JTlRFUlZBTCA1MAo+ICsKPiArLyogVGhlIG1hZ2ljIGNvb2tpZSBmb3IgU2Vzc2lvbiBUcmF2 ZXJzYWwgVXRpbGl0aWVzIGZvciBOQVQgKFNUVU4pIG1lc3NhZ2VzLiAqLwo+ICsjZGVmaW5lIFNU VU5fTUFHSUNfQ09PS0lFIDB4MjExMkE0NDIKPiArCj4gKy8qKgo+ICsgKiBUaGUgRFRMUyBjb250 ZW50IHR5cGUuCj4gKyAqIFNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjI0NiNz ZWN0aW9uLTYuMi4xCj4gKyAqIGNoYW5nZV9jaXBoZXJfc3BlYygyMCksIGFsZXJ0KDIxKSwgaGFu ZHNoYWtlKDIyKSwgYXBwbGljYXRpb25fZGF0YSgyMykKPiArICovCj4gKyNkZWZpbmUgRFRMU19D T05URU5UX1RZUEVfQ0hBTkdFX0NJUEhFUl9TUEVDIDIwCj4gKwo+ICsvKioKPiArICogVGhlIERU TFMgcmVjb3JkIGxheWVyIGhlYWRlciBoYXMgYSB0b3RhbCBzaXplIG9mIDEzIGJ5dGVzLCBjb25z aXN0aW5nIG9mCj4gKyAqIENvbnRlbnRUeXBlICgxIGJ5dGUpLCBQcm90b2NvbFZlcnNpb24gKDIg Ynl0ZXMpLCBFcG9jaCAoMiBieXRlcyksCj4gKyAqIFNlcXVlbmNlTnVtYmVyICg2IGJ5dGVzKSwg YW5kIExlbmd0aCAoMiBieXRlcykuCj4gKyAqIFNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYu b3JnL2RvYy9odG1sL3JmYzkxNDcjc2VjdGlvbi00Cj4gKyAqLwo+ICsjZGVmaW5lIERUTFNfUkVD T1JEX0xBWUVSX0hFQURFUl9MRU4gMTMKPiArCj4gKy8qKgo+ICsgKiBUaGUgRFRMUyB2ZXJzaW9u IG51bWJlciwgd2hpY2ggaXMgMHhmZWZmIGZvciBEVExTIDEuMCwgb3IgMHhmZWZkIGZvciBEVExT IDEuMi4KPiArICogU2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZj OTE0NyNuYW1lLXRoZS1kdGxzLXJlY29yZC1sYXllcgo+ICsgKi8KPiArI2RlZmluZSBEVExTX1ZF UlNJT05fMTAgMHhmZWZmCj4gKyNkZWZpbmUgRFRMU19WRVJTSU9OXzEyIDB4ZmVmZAo+ICsKPiAr LyoqCj4gKyAqIE1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIGZvciBzZW5kaW5nIGFuZCByZWNl aXZpbmcgVURQIHBhY2tldHMuCj4gKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBzaXplIGRvZXMg bm90IGxpbWl0IHRoZSBzaXplIG9mIHRoZSBVRFAgcGFja2V0IHRoYXQgY2FuIGJlIHNlbnQuCj4g KyAqIFRvIHNldCB0aGUgbGltaXQgZm9yIHBhY2tldCBzaXplLCBtb2RpZnkgdGhlIGBwa3Rfc2l6 ZWAgcGFyYW1ldGVyLgo+ICsgKiBGb3IgaW5zdGFuY2UsIGl0IGlzIHBvc3NpYmxlIHRvIHNldCB0 aGUgVURQIGJ1ZmZlciB0byA0MDk2IHRvIHNlbmQgb3IgcmVjZWl2ZSBwYWNrZXRzLAo+ICsgKiBi dXQgcGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBgcGt0X3NpemVgIG9wdGlvbiBsaW1pdHMg dGhlIHBhY2tldCBzaXplIHRvIDE0MDAuCj4gKyAqLwo+ICsjZGVmaW5lIE1BWF9VRFBfQlVGRkVS X1NJWkUgNDA5Ngo+ICsKPiArLyogUmVmZXJyaW5nIHRvIENocm9tZSdzIGRlZmluaXRpb24gb2Yg UlRQIHBheWxvYWQgdHlwZXMuICovCj4gKyNkZWZpbmUgV0hJUF9SVFBfUEFZTE9BRF9UWVBFX0gy NjQgMTA2Cj4gKyNkZWZpbmUgV0hJUF9SVFBfUEFZTE9BRF9UWVBFX09QVVMgMTExCj4gKwo+ICsv KioKPiArICogVGhlIFNUVU4gbWVzc2FnZSBoZWFkZXIsIHdoaWNoIGlzIDIwIGJ5dGVzIGxvbmcs IGNvbXByaXNlcyB0aGUKPiArICogU1RVTk1lc3NhZ2VUeXBlICgxQiksIE1lc3NhZ2VMZW5ndGgg KDJCKSwgTWFnaWNDb29raWUgKDRCKSwKPiArICogYW5kIFRyYW5zYWN0aW9uSUQgKDEyQikuCj4g KyAqIFNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzUzODkjc2Vj dGlvbi02Cj4gKyAqLwo+ICsjZGVmaW5lIElDRV9TVFVOX0hFQURFUl9TSVpFIDIwCj4gKwo+ICsv KioKPiArICogVGhlIFJUUCBoZWFkZXIgaXMgMTIgYnl0ZXMgbG9uZywgY29tcHJpc2luZyB0aGUg VmVyc2lvbigxQiksIFBUKDFCKSwKPiArICogU2VxdWVuY2VOdW1iZXIoMkIpLCBUaW1lc3RhbXAo NEIpLCBhbmQgU1NSQyg0QikuCj4gKyAqIFNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9y ZmMvcmZjMzU1MCNzZWN0aW9uLTUuMQo+ICsgKi8KPiArI2RlZmluZSBXSElQX1JUUF9IRUFERVJf U0laRSAxMgo+ICsKPiArLyoqCj4gKyAqIEZvciBSVENQLCBQVCBpcyBbMTI4LCAyMjNdIChvciB3 aXRob3V0IG1hcmtlciBbMCwgOTVdKS4gTGl0ZXJhbGx5LCBSVENQIHN0YXJ0cwo+ICsgKiBmcm9t IDY0IG5vdCAwLCBzbyBQVCBpcyBbMTkyLCAyMjNdIChvciB3aXRob3V0IG1hcmtlciBbNjQsIDk1 XSksIHNlZSAiUlRDUCBDb250cm9sCj4gKyAqIFBhY2tldCBUeXBlcyAoUFQpIiBhdAo+ICsgKiBo dHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9ydHAtcGFyYW1ldGVycy9ydHAtcGFyYW1l dGVycy54aHRtbCNydHAtcGFyYW1ldGVycy00Cj4gKyAqCj4gKyAqIEZvciBSVFAsIHRoZSBQVCBp cyBbOTYsIDEyN10sIG9yIFsyMjQsIDI1NV0gd2l0aCBtYXJrZXIuIFNlZSAiUlRQIFBheWxvYWQg VHlwZXMgKFBUKQo+ICsgKiBmb3Igc3RhbmRhcmQgYXVkaW8gYW5kIHZpZGVvIGVuY29kaW5ncyIg YXQKPiArICogaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvcnRwLXBhcmFtZXRlcnMv cnRwLXBhcmFtZXRlcnMueGh0bWwjcnRwLXBhcmFtZXRlcnMtMQo+ICsgKi8KPiArI2RlZmluZSBX SElQX1JUQ1BfUFRfU1RBUlQgMTkyCj4gKyNkZWZpbmUgV0hJUF9SVENQX1BUX0VORCAgIDIyMwo+ ICsKPiArLyoqCj4gKyAqIEluIHRoZSBjYXNlIG9mIElDRS1MSVRFLCB0aGVzZSBmaWVsZHMgYXJl IG5vdCB1c2VkOyBpbnN0ZWFkLCB0aGV5IGFyZSBkZWZpbmVkCj4gKyAqIGFzIGNvbnN0YW50IHZh bHVlcy4KPiArICovCj4gKyNkZWZpbmUgV0hJUF9TRFBfU0VTU0lPTl9JRCAiNDQ4OTA0NTE0MTY5 Mjc5OTM1OSIKPiArI2RlZmluZSBXSElQX1NEUF9DUkVBVE9SX0lQICIxMjcuMC4wLjEiCj4gKwo+ ICsvKiBDYWxjdWxhdGUgdGhlIGVsYXBzZWQgdGltZSBmcm9tIHN0YXJ0dGltZSB0byBlbmR0aW1l IGluIG1pbGxpc2Vjb25kcy4gKi8KPiArI2RlZmluZSBFTEFQU0VEKHN0YXJ0dGltZSwgZW5kdGlt ZSkgKChpbnQpKGVuZHRpbWUgLSBzdGFydHRpbWUpIC8gMTAwMCkKPiArCj4gKy8qIFNUVU4gQXR0 cmlidXRlLCBjb21wcmVoZW5zaW9uLXJlcXVpcmVkIHJhbmdlICgweDAwMDAtMHg3RkZGKSAqLwo+ ICtlbnVtIFNUVU5BdHRyIHsKPiArICAgIFNUVU5fQVRUUl9VU0VSTkFNRSAgICAgICAgICAgICAg ICAgID0gMHgwMDA2LCAvLy8gc2hhcmVkIHNlY3JldCByZXNwb25zZS9iaW5kIHJlcXVlc3QKPiAr ICAgIFNUVU5fQVRUUl9VU0VfQ0FORElEQVRFICAgICAgICAgICAgID0gMHgwMDI1LCAvLy8gYmlu ZCByZXF1ZXN0Cj4gKyAgICBTVFVOX0FUVFJfTUVTU0FHRV9JTlRFR1JJVFkgICAgICAgICA9IDB4 MDAwOCwgLy8vIGJpbmQgcmVxdWVzdC9yZXNwb25zZQo+ICsgICAgU1RVTl9BVFRSX0ZJTkdFUlBS SU5UICAgICAgICAgICAgICAgPSAweDgwMjgsIC8vLyByZmM1Mzg5Cj4gK307Cj4gKwo+ICtlbnVt IFdISVBTdGF0ZSB7Cj4gKyAgICBXSElQX1NUQVRFX05PTkUsCj4gKwo+ICsgICAgLyogVGhlIGlu aXRpYWwgc3RhdGUuICovCj4gKyAgICBXSElQX1NUQVRFX0lOSVQsCj4gKyAgICAvKiBUaGUgbXV4 ZXIgaGFzIHNlbnQgdGhlIG9mZmVyIHRvIHRoZSBwZWVyLiAqLwo+ICsgICAgV0hJUF9TVEFURV9P RkZFUiwKPiArICAgIC8qIFRoZSBtdXhlciBoYXMgcmVjZWl2ZWQgdGhlIGFuc3dlciBmcm9tIHRo ZSBwZWVyLiAqLwo+ICsgICAgV0hJUF9TVEFURV9BTlNXRVIsCj4gKyAgICAvKioKPiArICAgICAq IEFmdGVyIHBhcnNpbmcgdGhlIGFuc3dlciByZWNlaXZlZCBmcm9tIHRoZSBwZWVyLCB0aGUgbXV4 ZXIgbmVnb3RpYXRlcyB0aGUgYWJpbGl0aWVzCj4gKyAgICAgKiBpbiB0aGUgb2ZmZXIgdGhhdCBp dCBnZW5lcmF0ZWQuCj4gKyAgICAgKi8KPiArICAgIFdISVBfU1RBVEVfTkVHT1RJQVRFRCwKPiAr ICAgIC8qIFRoZSBtdXhlciBoYXMgY29ubmVjdGVkIHRvIHRoZSBwZWVyIHZpYSBVRFAuICovCj4g KyAgICBXSElQX1NUQVRFX1VEUF9DT05ORUNURUQsCj4gKyAgICAvKiBUaGUgbXV4ZXIgaGFzIHNl bnQgdGhlIElDRSByZXF1ZXN0IHRvIHRoZSBwZWVyLiAqLwo+ICsgICAgV0hJUF9TVEFURV9JQ0Vf Q09OTkVDVElORywKPiArICAgIC8qIFRoZSBtdXhlciBoYXMgcmVjZWl2ZWQgdGhlIElDRSByZXNw b25zZSBmcm9tIHRoZSBwZWVyLiAqLwo+ICsgICAgV0hJUF9TVEFURV9JQ0VfQ09OTkVDVEVELAo+ ICsgICAgLyogVGhlIG11eGVyIHN0YXJ0cyBhdHRlbXB0aW5nIHRoZSBEVExTIGhhbmRzaGFrZS4g Ki8KPiArICAgIFdISVBfU1RBVEVfRFRMU19DT05ORUNUSU5HLAo+ICsgICAgLyogVGhlIG11eGVy IGhhcyBmaW5pc2hlZCB0aGUgRFRMUyBoYW5kc2hha2Ugd2l0aCB0aGUgcGVlci4gKi8KPiArICAg IFdISVBfU1RBVEVfRFRMU19GSU5JU0hFRCwKPiArICAgIC8qIFRoZSBtdXhlciBoYXMgZmluaXNo ZWQgdGhlIFNSVFAgc2V0dXAuICovCj4gKyAgICBXSElQX1NUQVRFX1NSVFBfRklOSVNIRUQsCj4g KyAgICAvKiBUaGUgbXV4ZXIgaXMgcmVhZHkgdG8gc2VuZC9yZWNlaXZlIG1lZGlhIGZyYW1lcy4g Ki8KPiArICAgIFdISVBfU1RBVEVfUkVBRFksCj4gKyAgICAvKiBUaGUgbXV4ZXIgaXMgZmFpbGVk LiAqLwo+ICsgICAgV0hJUF9TVEFURV9GQUlMRUQsCj4gK307Cj4gKwo+ICt0eXBlZGVmIHN0cnVj dCBXSElQQ29udGV4dCB7Cj4gKyAgICBBVkNsYXNzICphdl9jbGFzczsKPiArCj4gKyAgICAvKiBU aGUgc3RhdGUgb2YgdGhlIFJUQyBjb25uZWN0aW9uLiAqLwo+ICsgICAgZW51bSBXSElQU3RhdGUg c3RhdGU7Cj4gKyAgICAvKiBUaGUgY2FsbGJhY2sgcmV0dXJuIHZhbHVlIGZvciBEVExTLiAqLwo+ ICsgICAgaW50IGR0bHNfcmV0Owo+ICsgICAgaW50IGR0bHNfY2xvc2VkOwo+ICsKPiArICAgIC8q IFBhcmFtZXRlcnMgZm9yIHRoZSBpbnB1dCBhdWRpbyBhbmQgdmlkZW8gY29kZWNzLiAqLwo+ICsg ICAgQVZDb2RlY1BhcmFtZXRlcnMgKmF1ZGlvX3BhcjsKPiArICAgIEFWQ29kZWNQYXJhbWV0ZXJz ICp2aWRlb19wYXI7Cj4gKwo+ICsgICAgLyoqCj4gKyAgICAgKiBUaGUgaDI2NF9tcDR0b2FubmV4 YiBCaXRzdHJlYW0gRmlsdGVyIChCU0YpIGJ5cGFzc2VzIHRoZSBBbm5leEIgcGFja2V0Owo+ICsg ICAgICogdGhlcmVmb3JlLCBpdCBpcyBlc3NlbnRpYWwgdG8gaW5zZXJ0IHRoZSBTUFMgYW5kIFBQ UyBiZWZvcmUgZWFjaCBJRFIgZnJhbWUKPiArICAgICAqIGluIHN1Y2ggY2FzZXMuCj4gKyAgICAg Ki8KPiArICAgIGludCBoMjY0X2FubmV4Yl9pbnNlcnRfc3BzX3BwczsKPiArCj4gKyAgICAvKiBU aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovCj4gKyAgICBBVkxGRyBybmQ7Cj4gKwo+ICsg ICAgLyogVGhlIElDRSB1c2VybmFtZSBhbmQgcHdkIGZyYWdtZW50IGdlbmVyYXRlZCBieSB0aGUg bXV4ZXIuICovCj4gKyAgICBjaGFyIGljZV91ZnJhZ19sb2NhbFs5XTsKPiArICAgIGNoYXIgaWNl X3B3ZF9sb2NhbFszM107Cj4gKyAgICAvKiBUaGUgU1NSQyBvZiB0aGUgYXVkaW8gYW5kIHZpZGVv IHN0cmVhbSwgZ2VuZXJhdGVkIGJ5IHRoZSBtdXhlci4gKi8KPiArICAgIHVpbnQzMl90IGF1ZGlv X3NzcmM7Cj4gKyAgICB1aW50MzJfdCB2aWRlb19zc3JjOwo+ICsgICAgLyogVGhlIFBUKFBheWxv YWQgVHlwZSkgb2Ygc3RyZWFtLCBnZW5lcmF0ZWQgYnkgdGhlIG11eGVyLiAqLwo+ICsgICAgdWlu dDhfdCBhdWRpb19wYXlsb2FkX3R5cGU7Cj4gKyAgICB1aW50OF90IHZpZGVvX3BheWxvYWRfdHlw ZTsKPiArICAgIC8qKgo+ICsgICAgICogVGhpcyBpcyB0aGUgU0RQIG9mZmVyIGdlbmVyYXRlZCBi eSB0aGUgbXV4ZXIgYmFzZWQgb24gdGhlIGNvZGVjIHBhcmFtZXRlcnMsCj4gKyAgICAgKiBEVExT LCBhbmQgSUNFIGluZm9ybWF0aW9uLgo+ICsgICAgICovCj4gKyAgICBjaGFyICpzZHBfb2ZmZXI7 Cj4gKwo+ICsgICAgLyogVGhlIElDRSB1c2VybmFtZSBhbmQgcHdkIGZyb20gcmVtb3RlIHNlcnZl ci4gKi8KPiArICAgIGNoYXIgKmljZV91ZnJhZ19yZW1vdGU7Cj4gKyAgICBjaGFyICppY2VfcHdk X3JlbW90ZTsKPiArICAgIC8qKgo+ICsgICAgICogVGhpcyByZXByZXNlbnRzIHRoZSBJQ0UgY2Fu ZGlkYXRlIHByb3RvY29sLCBwcmlvcml0eSwgaG9zdCBhbmQgcG9ydC4KPiArICAgICAqIEN1cnJl bnRseSwgd2Ugb25seSBzdXBwb3J0IG9uZSBjYW5kaWRhdGUgYW5kIGNob29zZSB0aGUgZmlyc3Qg VURQIGNhbmRpZGF0ZS4KPiArICAgICAqIEhvd2V2ZXIsIHdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0 aXBsZSBjYW5kaWRhdGVzIGluIHRoZSBmdXR1cmUuCj4gKyAgICAgKi8KPiArICAgIGNoYXIgKmlj ZV9wcm90b2NvbDsKPiArICAgIGNoYXIgKmljZV9ob3N0Owo+ICsgICAgaW50IGljZV9wb3J0Owo+ ICsKPiArICAgIC8qIFRoZSBTRFAgYW5zd2VyIHJlY2VpdmVkIGZyb20gdGhlIFdlYlJUQyBzZXJ2 ZXIuICovCj4gKyAgICBjaGFyICpzZHBfYW5zd2VyOwo+ICsgICAgLyogVGhlIHJlc291cmNlIFVS TCByZXR1cm5lZCBpbiB0aGUgTG9jYXRpb24gaGVhZGVyIG9mIFdISVAgSFRUUCByZXNwb25zZS4g Ki8KPiArICAgIGNoYXIgKndoaXBfcmVzb3VyY2VfdXJsOwo+ICsKPiArICAgIC8qIFRoZXNlIHZh cmlhYmxlcyByZXByZXNlbnQgdGltZXN0YW1wcyB1c2VkIGZvciBjYWxjdWxhdGluZyBhbmQgdHJh Y2tpbmcgdGhlIGNvc3QuICovCj4gKyAgICBpbnQ2NF90IHdoaXBfc3RhcnR0aW1lOwo+ICsgICAg aW50NjRfdCB3aGlwX2luaXRfdGltZTsKPiArICAgIGludDY0X3Qgd2hpcF9vZmZlcl90aW1lOwo+ ICsgICAgaW50NjRfdCB3aGlwX2Fuc3dlcl90aW1lOwo+ICsgICAgaW50NjRfdCB3aGlwX3VkcF90 aW1lOwo+ICsgICAgaW50NjRfdCB3aGlwX2ljZV90aW1lOwo+ICsgICAgaW50NjRfdCB3aGlwX2R0 bHNfdGltZTsKPiArICAgIGludDY0X3Qgd2hpcF9zcnRwX3RpbWU7Cj4gKwo+ICsgICAgLyogVGhl IGNlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleSBjb250ZW50IHVzZWQgZm9yIERUTFMgaGFuc2hh a2UgKi8KPiArICAgIGNoYXIgY2VydF9idWZbTUFYX0NFUlRJRklDQVRFX1NJWkVdOwo+ICsgICAg Y2hhciBrZXlfYnVmW01BWF9DRVJUSUZJQ0FURV9TSVpFXTsKPiArICAgIC8qIFRoZSBmaW5nZXJw cmludCBvZiBjZXJ0aWZpY2F0ZSwgdXNlZCBpbiBTRFAgb2ZmZXIuICovCj4gKyAgICBjaGFyICpk dGxzX2ZpbmdlcnByaW50Owo+ICsgICAgLyoqCj4gKyAgICAgKiBUaGlzIHJlcHJlc2VudHMgdGhl IG1hdGVyaWFsIHVzZWQgdG8gYnVpbGQgdGhlIFNSVFAgbWFzdGVyIGtleS4gSXQgaXMKPiArICAg ICAqIGdlbmVyYXRlZCBieSBEVExTIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6Cj4gKyAg ICAgKiAgICAgICAgICAxNkIgICAgICAgICAxNkIgICAgICAgICAxNEIgICAgICAgICAgICAgMTRC Cj4gKyAgICAgKiAgICAgIGNsaWVudF9rZXkgfCBzZXJ2ZXJfa2V5IHwgY2xpZW50X3NhbHQgfCBz ZXJ2ZXJfc2FsdAo+ICsgICAgICovCj4gKyAgICB1aW50OF90IGR0bHNfc3J0cF9tYXRlcmlhbHNb KERUTFNfU1JUUF9LRVlfTEVOICsgRFRMU19TUlRQX1NBTFRfTEVOKSAqIDJdOwo+ICsKPiArICAg IGNoYXIgc3NsX2Vycm9yX21lc3NhZ2VbMjU2XTsKPiArCj4gKyAgICAvKiBUT0RPOiBVc2UgQVZJ T0NvbnRleHQgaW5zdGVhZCBvZiBVUkxDb250ZXh0ICovCj4gKyAgICBVUkxDb250ZXh0ICpkdGxz X3VjOwo+ICsKPiArICAgIC8qIFRoZSBTUlRQIHNlbmQgY29udGV4dCwgdG8gZW5jcnlwdCBvdXRn b2luZyBwYWNrZXRzLiAqLwo+ICsgICAgU1JUUENvbnRleHQgc3J0cF9hdWRpb19zZW5kOwo+ICsg ICAgU1JUUENvbnRleHQgc3J0cF92aWRlb19zZW5kOwo+ICsgICAgU1JUUENvbnRleHQgc3J0cF9y dGNwX3NlbmQ7Cj4gKyAgICAvKiBUaGUgU1JUUCByZWNlaXZlIGNvbnRleHQsIHRvIGRlY3J5cHQg aW5jb21pbmcgcGFja2V0cy4gKi8KPiArICAgIFNSVFBDb250ZXh0IHNydHBfcmVjdjsKPiArCj4g KyAgICAvKiBUaGUgVURQIHRyYW5zcG9ydCBpcyB1c2VkIGZvciBkZWxpdmVyaW5nIElDRSwgRFRM UyBhbmQgU1JUUCBwYWNrZXRzLiAqLwo+ICsgICAgVVJMQ29udGV4dCAqdWRwOwo+ICsgICAgLyog VGhlIGJ1ZmZlciBmb3IgVURQIHRyYW5zbWlzc2lvbi4gKi8KPiArICAgIGNoYXIgYnVmW01BWF9V RFBfQlVGRkVSX1NJWkVdOwo+ICsKPiArICAgIC8qIFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25k cyBmb3IgSUNFIGFuZCBEVExTIGhhbmRzaGFrZS4gKi8KPiArICAgIGludCBoYW5kc2hha2VfdGlt ZW91dDsKPiArICAgIC8qKgo+ICsgICAgICogVGhlIHNpemUgb2YgUlRQIHBhY2tldCwgc2hvdWxk IGdlbmVyYWxseSBiZSBzZXQgdG8gTVRVLgo+ICsgICAgICogTm90ZSB0aGF0IHBpb24gcmVxdWly ZXMgYSBzbWFsbGVyIHZhbHVlLCBmb3IgZXhhbXBsZSwgMTIwMC4KPiArICAgICAqLwo+ICsgICAg aW50IHBrdF9zaXplOwo+ICsgICAgLyoqCj4gKyAgICAgKiBUaGUgb3B0aW9uYWwgQmVhcmVyIHRv a2VuIGZvciBXSElQIEF1dGhvcml6YXRpb24uCj4gKyAgICAgKiBTZWUgaHR0cHM6Ly93d3cuaWV0 Zi5vcmcvYXJjaGl2ZS9pZC9kcmFmdC1pZXRmLXdpc2gtd2hpcC0wOC5odG1sI25hbWUtYXV0aGVu dGljYXRpb24tYW5kLWF1dGhvcml6Cj4gKyAgICAgKi8KPiArICAgIGNoYXIqIGF1dGhvcml6YXRp b247Cj4gKyAgICAvKiBUaGUgY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5IHVzZWQgZm9yIERU TFMgaGFuZHNoYWtlLiAqLwo+ICsgICAgY2hhciogY2VydF9maWxlOwo+ICsgICAgY2hhcioga2V5 X2ZpbGU7Cj4gK30gV0hJUENvbnRleHQ7Cj4gKwo+ICsvKioKPiArICogV2hldGhlciB0aGUgcGFj a2V0IGlzIGEgRFRMUyBwYWNrZXQuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGlzX2R0bHNfcGFja2V0 KHVpbnQ4X3QgKmIsIGludCBzaXplKSB7Cj4gKyAgICB1aW50MTZfdCB2ZXJzaW9uID0gQVZfUkIx NigmYlsxXSk7Cj4gKyAgICByZXR1cm4gc2l6ZSA+IERUTFNfUkVDT1JEX0xBWUVSX0hFQURFUl9M RU4gJiYKPiArICAgICAgICBiWzBdID49IERUTFNfQ09OVEVOVF9UWVBFX0NIQU5HRV9DSVBIRVJf U1BFQyAmJgo+ICsgICAgICAgICh2ZXJzaW9uID09IERUTFNfVkVSU0lPTl8xMCB8fCB2ZXJzaW9u ID09IERUTFNfVkVSU0lPTl8xMik7Cj4gK30KPiArCj4gKwo+ICsvKioKPiArICogR2V0IG9yIEdl bmVyYXRlIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5IGZvciBEVExT LAo+ICsgKiBmaW5nZXJwcmludCBmb3IgU0RQCj4gKyAqLwo+ICtzdGF0aWMgYXZfY29sZCBpbnQg Y2VydGlmaWNhdGVfa2V5X2luaXQoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQg cmV0ID0gMDsKPiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsKPiAr ICAgIGlmICh3aGlwLT5jZXJ0X2ZpbGUgJiYgd2hpcC0+a2V5X2ZpbGUpIHsKPiArICAgICAgICAv KiBSZWFkIHRoZSBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgZnJvbSB0aGUgZmlsZS4gKi8K PiArICAgICAgICBpZiAoKHJldCA9IGZmX3NzbF9yZWFkX2tleV9jZXJ0KHdoaXAtPmtleV9maWxl LCB3aGlwLT5jZXJ0X2ZpbGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGlwLT5rZXlfYnVmLCBzaXplb2Yod2hpcC0+a2V5X2J1ZiksCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlwLT5jZXJ0X2J1Ziwgc2l6ZW9mKHdoaXAt PmNlcnRfYnVmKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3 aGlwLT5kdGxzX2ZpbmdlcnByaW50KSkgPCAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBB Vl9MT0dfRVJST1IsICJEVExTOiBGYWlsZWQgdG8gcmVhZCBEVExTIGNlcnRpZmljYXRlIGZyb20g Y2VydD0lcywga2V5PSVzXG4iLAo+ICsgICAgICAgICAgICAgICAgd2hpcC0+Y2VydF9maWxlLCB3 aGlwLT5rZXlfZmlsZSk7Cj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgfQo+ ICsgICAgfSBlbHNlIHsKPiArICAgICAgICAvKiBHZW5lcmF0ZSBhIHByaXZhdGUga2V5IHRvIGN0 eC0+ZHRsc19wa2V5IGFuZCBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4gKi8KPiArICAgICAgICBp ZiAoKHJldCA9IGZmX3NzbF9nZW5fa2V5X2NlcnQod2hpcC0+a2V5X2J1Ziwgc2l6ZW9mKHdoaXAt PmtleV9idWYpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlw LT5jZXJ0X2J1Ziwgc2l6ZW9mKHdoaXAtPmNlcnRfYnVmKSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJndoaXAtPmR0bHNfZmluZ2VycHJpbnQpKSA8IDApIHsKPiAr ICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkRUTFM6IEZhaWxlZCB0byBnZW5l cmF0ZSBEVExTIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZVxuIik7Cj4gKyAgICAgICAgICAg IHJldHVybiByZXQ7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiByZXQ7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBXaGVuIERUTFMgc3RhdGUgY2hhbmdlLgo+ICsgKi8KPiAr c3RhdGljIGludCBkdGxzX2NvbnRleHRfb25fc3RhdGUoQVZGb3JtYXRDb250ZXh0ICpzLCBjb25z dCBjaGFyKiB0eXBlLCBjb25zdCBjaGFyKiBkZXNjKQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsK PiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsgICAgaW50IHN0YXRl ID0gZmZfZHRsc19zdGF0ZSh3aGlwLT5kdGxzX3VjKTsKPiArCj4gKyAgICBpZiAoc3RhdGUgPT0g RFRMU19TVEFURV9DTE9TRUQpIHsKPiArICAgICAgICB3aGlwLT5kdGxzX2Nsb3NlZCA9IDE7Cj4g KyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19WRVJCT1NFLCAiV0hJUDogRFRMUyBzZXNzaW9u IGNsb3NlZCwgdHlwZT0lcywgZGVzYz0lcywgZWxhcHNlZD0lZG1zXG4iLAo+ICsgICAgICAgICAg ICB0eXBlID8gdHlwZSA6ICIiLCBkZXNjID8gZGVzYyA6ICIiLCBFTEFQU0VEKHdoaXAtPndoaXBf c3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKPiArICAgICAgICBnb3RvIGVycm9yOwo+ICsgICAg fQo+ICsKPiArICAgIGlmIChzdGF0ZSA9PSBEVExTX1NUQVRFX0ZBSUxFRCkgewo+ICsgICAgICAg IHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9GQUlMRUQ7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAs IEFWX0xPR19FUlJPUiwgIldISVA6IERUTFMgc2Vzc2lvbiBmYWlsZWQsIHR5cGU9JXMsIGRlc2M9 JXNcbiIsCj4gKyAgICAgICAgICAgIHR5cGUgPyB0eXBlIDogIiIsIGRlc2MgPyBkZXNjIDogIiIp Owo+ICsgICAgICAgIHdoaXAtPmR0bHNfcmV0ID0gQVZFUlJPUihFSU8pOwo+ICsgICAgICAgIGdv dG8gZXJyb3I7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHN0YXRlID09IERUTFNfU1RBVEVfRklO SVNIRUQgJiYgd2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0RUTFNfRklOSVNIRUQpIHsKPiArICAg ICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfRFRMU19GSU5JU0hFRDsKPiArICAgICAgICB3 aGlwLT53aGlwX2R0bHNfdGltZSA9IGF2X2dldHRpbWUoKTsKPiArICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX1ZFUkJPU0UsICJXSElQOiBEVExTIGhhbmRzaGFrZSBpcyBkb25lLCBlbGFwc2Vk PSVkbXNcbiIsCj4gKyAgICAgICAgICAgIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2 X2dldHRpbWUoKSkpOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gK2Vycm9yOgo+ ICsgICAgcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgZHRsc19pbml0 aWFsaXplKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgV0hJUENvbnRleHQgKndoaXAg PSBzLT5wcml2X2RhdGE7Cj4gKyAgICAvKiByZXVzZSB0aGUgdWRwIGNyZWF0ZWQgYnkgd2hpcCAq Lwo+ICsgICAgZmZfZHRsc19zZXRfdWRwKHdoaXAtPmR0bHNfdWMsIHdoaXAtPnVkcCk7Cj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEluaXRpYWxpemUgYW5kIGNoZWNrIHRo ZSBvcHRpb25zIGZvciB0aGUgV2ViUlRDIG11eGVyLgo+ICsgKi8KPiArc3RhdGljIGF2X2NvbGQg aW50IGluaXRpYWxpemUoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQgcmV0LCBp ZGVhbF9wa3Rfc2l6ZSA9IDUzMjsKPiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9k YXRhOwo+ICsgICAgdWludDMyX3Qgc2VlZDsKPiArCj4gKyAgICB3aGlwLT53aGlwX3N0YXJ0dGlt ZSA9IGF2X2dldHRpbWUoKTsKPiArCj4gKyAgICByZXQgPSBjZXJ0aWZpY2F0ZV9rZXlfaW5pdChz KTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19F UlJPUiwgIldISVA6IEZhaWxlZCB0byBpbml0IGNlcnRpZmljYXRlIGFuZCBrZXlcbiIpOwo+ICsg ICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogSW5pdGlhbGl6ZSB0aGUg cmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovCj4gKyAgICBzZWVkID0gYXZfZ2V0X3JhbmRvbV9z ZWVkKCk7Cj4gKyAgICBhdl9sZmdfaW5pdCgmd2hpcC0+cm5kLCBzZWVkKTsKPiArCj4gKyAgICBp ZiAod2hpcC0+cGt0X3NpemUgPCBpZGVhbF9wa3Rfc2l6ZSkKPiArICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX1dBUk5JTkcsICJXSElQOiBwa3Rfc2l6ZT0lZCg8JWQpIGlzIHRvbyBzbWFsbCwg bWF5IGNhdXNlIHBhY2tldCBsb3NzXG4iLAo+ICsgICAgICAgICAgICAgICB3aGlwLT5wa3Rfc2l6 ZSwgaWRlYWxfcGt0X3NpemUpOwo+ICsKPiArICAgIGlmICh3aGlwLT5zdGF0ZSA8IFdISVBfU1RB VEVfSU5JVCkKPiArICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfSU5JVDsKPiArICAg IHdoaXAtPndoaXBfaW5pdF90aW1lID0gYXZfZ2V0dGltZSgpOwo+ICsgICAgYXZfbG9nKHdoaXAs IEFWX0xPR19WRVJCT1NFLCAiV0hJUDogSW5pdCBzdGF0ZT0lZCwgaGFuZHNoYWtlX3RpbWVvdXQ9 JWRtcywgcGt0X3NpemU9JWQsIHNlZWQ9JWQsIGVsYXBzZWQ9JWRtc1xuIiwKPiArICAgICAgICB3 aGlwLT5zdGF0ZSwgd2hpcC0+aGFuZHNoYWtlX3RpbWVvdXQsIHdoaXAtPnBrdF9zaXplLCBzZWVk LCBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFdoZW4gZHVwbGljYXRpbmcgYSBzdHJl YW0sIHRoZSBkZW11eGVyIGhhcyBhbHJlYWR5IHNldCB0aGUgZXh0cmFkYXRhLCBwcm9maWxlLCBh bmQKPiArICogbGV2ZWwgb2YgdGhlIHBhci4gS2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBmdW5jdGlv biB3aWxsIG5vdCBiZSBpbnZva2VkIHNpbmNlIHRoZQo+ICsgKiBwcm9maWxlIGFuZCBsZXZlbCBh cmUgc2V0Lgo+ICsgKgo+ICsgKiBXaGVuIHV0aWxpemluZyBhbiBlbmNvZGVyLCBzdWNoIGFzIGxp YngyNjQsIHRvIGVuY29kZSBhIHN0cmVhbSwgdGhlIGV4dHJhZGF0YSBpbgo+ICsgKiBwYXItPmV4 dHJhZGF0YSBjb250YWlucyB0aGUgU1BTLCB3aGljaCBpbmNsdWRlcyBwcm9maWxlIGFuZCBsZXZl bCBpbmZvcm1hdGlvbi4KPiArICogSG93ZXZlciwgdGhlIHByb2ZpbGUgYW5kIGxldmVsIG9mIHBh ciByZW1haW4gdW5zcGVjaWZpZWQuIFRoZXJlZm9yZSwgaXQgaXMgbmVjZXNzYXJ5Cj4gKyAqIHRv IGV4dHJhY3QgdGhlIHByb2ZpbGUgYW5kIGxldmVsIGRhdGEgZnJvbSB0aGUgZXh0cmFkYXRhIGFu ZCBhc3NpZ24gaXQgdG8gdGhlIHBhcidzCj4gKyAqIHByb2ZpbGUgYW5kIGxldmVsLiBLZWVwIGlu IG1pbmQgdGhhdCBBVkZNVF9HTE9CQUxIRUFERVIgbXVzdCBiZSBlbmFibGVkOyBvdGhlcndpc2Us Cj4gKyAqIHRoZSBleHRyYWRhdGEgd2lsbCByZW1haW4gZW1wdHkuCj4gKyAqLwo+ICtzdGF0aWMg aW50IHBhcnNlX3Byb2ZpbGVfbGV2ZWwoQVZGb3JtYXRDb250ZXh0ICpzLCBBVkNvZGVjUGFyYW1l dGVycyAqcGFyKQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIGNvbnN0IHVpbnQ4X3Qg KnIgPSBwYXItPmV4dHJhZGF0YSwgKnIxLCAqZW5kID0gcGFyLT5leHRyYWRhdGEgKyBwYXItPmV4 dHJhZGF0YV9zaXplOwo+ICsgICAgSDI2NFNQUyBzZXEsICpjb25zdCBzcHMgPSAmc2VxOwo+ICsg ICAgdWludDMyX3Qgc3RhdGU7Cj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0 YTsKPiArCj4gKyAgICBpZiAocGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IMjY0KQo+ICsg ICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgaWYgKHBhci0+cHJvZmlsZSAhPSBBVl9QUk9G SUxFX1VOS05PV04gJiYgcGFyLT5sZXZlbCAhPSBBVl9MRVZFTF9VTktOT1dOKQo+ICsgICAgICAg IHJldHVybiByZXQ7Cj4gKwo+ICsgICAgaWYgKCFwYXItPmV4dHJhZGF0YSB8fCBwYXItPmV4dHJh ZGF0YV9zaXplIDw9IDApIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAi V0hJUDogVW5hYmxlIHRvIHBhcnNlIHByb2ZpbGUgZnJvbSBlbXB0eSBleHRyYWRhdGE9JXAsIHNp emU9JWRcbiIsCj4gKyAgICAgICAgICAgIHBhci0+ZXh0cmFkYXRhLCBwYXItPmV4dHJhZGF0YV9z aXplKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgfQo+ICsKPiAr ICAgIHdoaWxlICgxKSB7Cj4gKyAgICAgICAgciA9IGF2cHJpdl9maW5kX3N0YXJ0X2NvZGUociwg ZW5kLCAmc3RhdGUpOwo+ICsgICAgICAgIGlmIChyID49IGVuZCkKPiArICAgICAgICAgICAgYnJl YWs7Cj4gKwo+ICsgICAgICAgIHIxID0gZmZfbmFsX2ZpbmRfc3RhcnRjb2RlKHIsIGVuZCk7Cj4g KyAgICAgICAgaWYgKChzdGF0ZSAmIDB4MWYpID09IEgyNjRfTkFMX1NQUykgewo+ICsgICAgICAg ICAgICByZXQgPSBmZl9hdmNfZGVjb2RlX3NwcyhzcHMsIHIsIHIxIC0gcik7Cj4gKyAgICAgICAg ICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9H X0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGRlY29kZSBTUFMsIHN0YXRlPSV4LCBzaXplPSVkXG4i LAo+ICsgICAgICAgICAgICAgICAgICAgIHN0YXRlLCAoaW50KShyMSAtIHIpKTsKPiArICAgICAg ICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAg IGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IFBhcnNlIHByb2ZpbGU9JWQsIGxl dmVsPSVkIGZyb20gU1BTXG4iLAo+ICsgICAgICAgICAgICAgICAgc3BzLT5wcm9maWxlX2lkYywg c3BzLT5sZXZlbF9pZGMpOwo+ICsgICAgICAgICAgICBwYXItPnByb2ZpbGUgPSBzcHMtPnByb2Zp bGVfaWRjOwo+ICsgICAgICAgICAgICBwYXItPmxldmVsID0gc3BzLT5sZXZlbF9pZGM7Cj4gKyAg ICAgICAgfQo+ICsKPiArICAgICAgICByID0gcjE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJu IHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFBhcnNlcyB2aWRlbyBTUFMvUFBTIGZyb20gdGhl IGV4dHJhZGF0YSBvZiBjb2RlY3BhciBhbmQgY2hlY2tzIHRoZSBjb2RlYy4KPiArICogQ3VycmVu dGx5IG9ubHkgc3VwcG9ydHMgdmlkZW8oaDI2NCkgYW5kIGF1ZGlvKG9wdXMpLiBOb3RlIHRoYXQg b25seSBiYXNlbGluZQo+ICsgKiBhbmQgY29uc3RyYWluZWQgYmFzZWxpbmUgcHJvZmlsZXMgb2Yg aDI2NCBhcmUgc3VwcG9ydGVkLgo+ICsgKgo+ICsgKiBJZiB0aGUgcHJvZmlsZSBpcyBsZXNzIHRo YW4gMCwgdGhlIGZ1bmN0aW9uIGNvbnNpZGVycyB0aGUgcHJvZmlsZSBhcyBiYXNlbGluZS4KPiAr ICogSXQgbWF5IG5lZWQgdG8gcGFyc2UgdGhlIHByb2ZpbGUgZnJvbSBTUFMvUFBTLiBUaGlzIHNp dHVhdGlvbiBvY2N1cnMgd2hlbiBpbmdlc3RpbmcKPiArICogZGVza3RvcCBhbmQgdHJhbnNjb2Rp bmcuCj4gKyAqCj4gKyAqIEBwYXJhbSBzIFBvaW50ZXIgdG8gdGhlIEFWRm9ybWF0Q29udGV4dAo+ ICsgKiBAcmV0dXJucyBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBBVkVSUk9SX3h4eCBpbiBj YXNlIG9mIGFuIGVycm9yLgo+ICsgKgo+ICsgKiBUT0RPOiBGSVhNRTogVGhlcmUgaXMgYW4gaXNz dWUgd2l0aCB0aGUgdGltZXN0YW1wIG9mIE9QVVMgYXVkaW8sIGVzcGVjaWFsbHkgd2hlbgo+ICsg KiAgdGhlIGlucHV0IGlzIGFuIE1QNCBmaWxlLiBUaGUgdGltZXN0YW1wIGRldmlhdGVzIGZyb20g dGhlIGV4cGVjdGVkIHZhbHVlIG9mIDk2MCwKPiArICogIGNhdXNpbmcgQ2hyb21lIHRvIHBsYXkg dGhlIGF1ZGlvIHN0cmVhbSB3aXRoIG5vaXNlLiBUaGlzIHByb2JsZW0gY2FuIGJlIHJlcGxpY2F0 ZWQKPiArICogIGJ5IHRyYW5zY29kaW5nIGEgc3BlY2lmaWMgZmlsZSBpbnRvIE1QNCBmb3JtYXQg YW5kIHB1Ymxpc2hpbmcgaXQgdXNpbmcgdGhlIFdISVAKPiArICogIG11eGVyLiBIb3dldmVyLCB3 aGVuIGRpcmVjdGx5IHRyYW5zY29kaW5nIGFuZCBwdWJsaXNoaW5nIHRocm91Z2ggdGhlIFdISVAg bXV4ZXIsCj4gKyAqICB0aGUgaXNzdWUgaXMgbm90IHByZXNlbnQsIGFuZCB0aGUgYXVkaW8gdGlt ZXN0YW1wIHJlbWFpbnMgY29uc2lzdGVudC4gVGhlIHJvb3QKPiArICogIGNhdXNlIGlzIHN0aWxs IHVua25vd24sIGFuZCB0aGlzIGNvbW1lbnQgaGFzIGJlZW4gYWRkZWQgdG8gYWRkcmVzcyB0aGlz IGlzc3VlCj4gKyAqICBpbiB0aGUgZnV0dXJlLiBGdXJ0aGVyIHJlc2VhcmNoIGlzIG5lZWRlZCB0 byByZXNvbHZlIHRoZSBwcm9ibGVtLgo+ICsgKi8KPiArc3RhdGljIGludCBwYXJzZV9jb2RlYyhB VkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAgIGludCBpLCByZXQgPSAwOwo+ICsgICAgV0hJ UENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8 IHMtPm5iX3N0cmVhbXM7IGkrKykgewo+ICsgICAgICAgIEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIg PSBzLT5zdHJlYW1zW2ldLT5jb2RlY3BhcjsKPiArICAgICAgICBjb25zdCBBVkNvZGVjRGVzY3Jp cHRvciAqZGVzYyA9IGF2Y29kZWNfZGVzY3JpcHRvcl9nZXQocGFyLT5jb2RlY19pZCk7Cj4gKyAg ICAgICAgc3dpdGNoIChwYXItPmNvZGVjX3R5cGUpIHsKPiArICAgICAgICBjYXNlIEFWTUVESUFf VFlQRV9WSURFTzoKPiArICAgICAgICAgICAgaWYgKHdoaXAtPnZpZGVvX3Bhcikgewo+ICsgICAg ICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE9ubHkgb25lIHZp ZGVvIHN0cmVhbSBpcyBzdXBwb3J0ZWQgYnkgUlRDXG4iKTsKPiArICAgICAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgd2hp cC0+dmlkZW9fcGFyID0gcGFyOwo+ICsKPiArICAgICAgICAgICAgaWYgKHBhci0+Y29kZWNfaWQg IT0gQVZfQ09ERUNfSURfSDI2NCkgewo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFW X0xPR19FUlJPUiwgIldISVA6IFVuc3VwcG9ydGVkIHZpZGVvIGNvZGVjICVzIGJ5IFJUQywgY2hv b3NlIGgyNjRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA/IGRlc2MtPm5hbWUg OiAidW5rbm93biIpOwo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxD T01FOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBpZiAocGFyLT52aWRlb19k ZWxheSA+IDApIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1Is ICJXSElQOiBVbnN1cHBvcnRlZCBCIGZyYW1lcyBieSBSVENcbiIpOwo+ICsgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsg ICAgICAgICAgICBpZiAoKHJldCA9IHBhcnNlX3Byb2ZpbGVfbGV2ZWwocywgcGFyKSkgPCAwKSB7 Cj4gKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFp bGVkIHRvIHBhcnNlIFNQUy9QUFMgZnJvbSBleHRyYWRhdGFcbiIpOwo+ICsgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAg ICAgICAgaWYgKHBhci0+cHJvZmlsZSA9PSBBVl9QUk9GSUxFX1VOS05PV04pIHsKPiArICAgICAg ICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IE5vIHByb2ZpbGUg Zm91bmQgaW4gZXh0cmFkYXRhLCBjb25zaWRlciBiYXNlbGluZVxuIik7Cj4gKyAgICAgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAg ICAgIGlmIChwYXItPmxldmVsID09IEFWX0xFVkVMX1VOS05PV04pIHsKPiArICAgICAgICAgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IE5vIGxldmVsIGZvdW5kIGlu IGV4dHJhZGF0YSwgY29uc2lkZXIgMy4xXG4iKTsKPiArICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgYnJlYWs7Cj4g KyAgICAgICAgY2FzZSBBVk1FRElBX1RZUEVfQVVESU86Cj4gKyAgICAgICAgICAgIGlmICh3aGlw LT5hdWRpb19wYXIpIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBPbmx5IG9uZSBhdWRpbyBzdHJlYW0gaXMgc3VwcG9ydGVkIGJ5IFJUQ1xuIik7 Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgICAg ICB9Cj4gKyAgICAgICAgICAgIHdoaXAtPmF1ZGlvX3BhciA9IHBhcjsKPiArCj4gKyAgICAgICAg ICAgIGlmIChwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX09QVVMpIHsKPiArICAgICAgICAg ICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBVbnN1cHBvcnRlZCBhdWRp byBjb2RlYyAlcyBieSBSVEMsIGNob29zZSBvcHVzXG4iLAo+ICsgICAgICAgICAgICAgICAgICAg IGRlc2MgPyBkZXNjLT5uYW1lIDogInVua25vd24iKTsKPiArICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAg ICAgaWYgKHBhci0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzICE9IDIpIHsKPiArICAgICAgICAgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBVbnN1cHBvcnRlZCBhdWRpbyBj aGFubmVscyAlZCBieSBSVEMsIGNob29zZSBzdGVyZW9cbiIsCj4gKyAgICAgICAgICAgICAgICAg ICAgcGFyLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMpOwo+ICsgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAg ICBpZiAocGFyLT5zYW1wbGVfcmF0ZSAhPSA0ODAwMCkgewo+ICsgICAgICAgICAgICAgICAgYXZf bG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IFVuc3VwcG9ydGVkIGF1ZGlvIHNhbXBsZSBy YXRlICVkIGJ5IFJUQywgY2hvb3NlIDQ4MDAwXG4iLCBwYXItPnNhbXBsZV9yYXRlKTsKPiArICAg ICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPiArICAgICAgICAgICAg fQo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogQ29kZWMgdHlwZSAnJXMnIGZvciBz dHJlYW0gJWQgaXMgbm90IHN1cHBvcnRlZCBieSBSVENcbiIsCj4gKyAgICAgICAgICAgICAgICAg ICBhdl9nZXRfbWVkaWFfdHlwZV9zdHJpbmcocGFyLT5jb2RlY190eXBlKSwgaSk7Cj4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPiArICAgICAgICB9Cj4gKyAgICB9 Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEdlbmVyYXRlIFNE UCBvZmZlciBhY2NvcmRpbmcgdG8gdGhlIGNvZGVjIHBhcmFtZXRlcnMsIERUTFMgYW5kIElDRSBp bmZvcm1hdGlvbi4KPiArICoKPiArICogTm90ZSB0aGF0IHdlIGRvbid0IHVzZSBhdl9zZHBfY3Jl YXRlIHRvIGdlbmVyYXRlIFNEUCBvZmZlciBiZWNhdXNlIGl0IGRvZXNuJ3QKPiArICogc3VwcG9y dCBEVExTIGFuZCBJQ0UgaW5mb3JtYXRpb24uCj4gKyAqCj4gKyAqIEByZXR1cm4gMCBpZiBPSywg QVZFUlJPUl94eHggb24gZXJyb3IKPiArICovCj4gK3N0YXRpYyBpbnQgZ2VuZXJhdGVfc2RwX29m ZmVyKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgaW50IHJldCA9IDAsIHByb2ZpbGUs IGxldmVsLCBwcm9maWxlX2lvcDsKPiArICAgIGNvbnN0IGNoYXIgKmFjb2RlY19uYW1lID0gTlVM TCwgKnZjb2RlY19uYW1lID0gTlVMTDsKPiArICAgIEFWQlByaW50IGJwOwo+ICsgICAgV0hJUENv bnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgLyogVG8gcHJldmVudCBhIGNy YXNoIGR1cmluZyBjbGVhbnVwLCBhbHdheXMgaW5pdGlhbGl6ZSBpdC4gKi8KPiArICAgIGF2X2Jw cmludF9pbml0KCZicCwgMSwgTUFYX1NEUF9TSVpFKTsKPiArCj4gKyAgICBpZiAod2hpcC0+c2Rw X29mZmVyKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IFNE UCBvZmZlciBpcyBhbHJlYWR5IHNldFxuIik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5W QUwpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIHNucHJpbnRmKHdo aXAtPmljZV91ZnJhZ19sb2NhbCwgc2l6ZW9mKHdoaXAtPmljZV91ZnJhZ19sb2NhbCksICIlMDh4 IiwKPiArICAgICAgICBhdl9sZmdfZ2V0KCZ3aGlwLT5ybmQpKTsKPiArICAgIHNucHJpbnRmKHdo aXAtPmljZV9wd2RfbG9jYWwsIHNpemVvZih3aGlwLT5pY2VfcHdkX2xvY2FsKSwgIiUwOHglMDh4 JTA4eCUwOHgiLAo+ICsgICAgICAgIGF2X2xmZ19nZXQoJndoaXAtPnJuZCksIGF2X2xmZ19nZXQo JndoaXAtPnJuZCksIGF2X2xmZ19nZXQoJndoaXAtPnJuZCksCj4gKyAgICAgICAgYXZfbGZnX2dl dCgmd2hpcC0+cm5kKSk7Cj4gKwo+ICsgICAgd2hpcC0+YXVkaW9fc3NyYyA9IGF2X2xmZ19nZXQo JndoaXAtPnJuZCk7Cj4gKyAgICB3aGlwLT52aWRlb19zc3JjID0gYXZfbGZnX2dldCgmd2hpcC0+ cm5kKTsKPiArCj4gKyAgICB3aGlwLT5hdWRpb19wYXlsb2FkX3R5cGUgPSBXSElQX1JUUF9QQVlM T0FEX1RZUEVfT1BVUzsKPiArICAgIHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZSA9IFdISVBfUlRQ X1BBWUxPQURfVFlQRV9IMjY0Owo+ICsKPiArICAgIGF2X2JwcmludGYoJmJwLCAiIgo+ICsgICAg ICAgICJ2PTBcclxuIgo+ICsgICAgICAgICJvPUZGbXBlZyAlcyAyIElOIElQNCAlc1xyXG4iCj4g KyAgICAgICAgInM9RkZtcGVnUHVibGlzaFNlc3Npb25cclxuIgo+ICsgICAgICAgICJ0PTAgMFxy XG4iCj4gKyAgICAgICAgImE9Z3JvdXA6QlVORExFIDAgMVxyXG4iCj4gKyAgICAgICAgImE9ZXh0 bWFwLWFsbG93LW1peGVkXHJcbiIKPiArICAgICAgICAiYT1tc2lkLXNlbWFudGljOiBXTVNcclxu IiwKPiArICAgICAgICBXSElQX1NEUF9TRVNTSU9OX0lELAo+ICsgICAgICAgIFdISVBfU0RQX0NS RUFUT1JfSVApOwo+ICsKPiArICAgIGlmICh3aGlwLT5hdWRpb19wYXIpIHsKPiArICAgICAgICBp ZiAod2hpcC0+YXVkaW9fcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9PUFVTKQo+ICsgICAg ICAgICAgICBhY29kZWNfbmFtZSA9ICJvcHVzIjsKPiArCj4gKyAgICAgICAgYXZfYnByaW50Zigm YnAsICIiCj4gKyAgICAgICAgICAgICJtPWF1ZGlvIDkgVURQL1RMUy9SVFAvU0FWUEYgJXVcclxu Igo+ICsgICAgICAgICAgICAiYz1JTiBJUDQgMC4wLjAuMFxyXG4iCj4gKyAgICAgICAgICAgICJh PWljZS11ZnJhZzolc1xyXG4iCj4gKyAgICAgICAgICAgICJhPWljZS1wd2Q6JXNcclxuIgo+ICsg ICAgICAgICAgICAiYT1maW5nZXJwcmludDpzaGEtMjU2ICVzXHJcbiIKPiArICAgICAgICAgICAg ImE9c2V0dXA6cGFzc2l2ZVxyXG4iCj4gKyAgICAgICAgICAgICJhPW1pZDowXHJcbiIKPiArICAg ICAgICAgICAgImE9c2VuZG9ubHlcclxuIgo+ICsgICAgICAgICAgICAiYT1tc2lkOkZGbXBlZyBh dWRpb1xyXG4iCj4gKyAgICAgICAgICAgICJhPXJ0Y3AtbXV4XHJcbiIKPiArICAgICAgICAgICAg ImE9cnRwbWFwOiV1ICVzLyVkLyVkXHJcbiIKPiArICAgICAgICAgICAgImE9c3NyYzoldSBjbmFt ZTpGRm1wZWdcclxuIgo+ICsgICAgICAgICAgICAiYT1zc3JjOiV1IG1zaWQ6RkZtcGVnIGF1ZGlv XHJcbiIsCj4gKyAgICAgICAgICAgIHdoaXAtPmF1ZGlvX3BheWxvYWRfdHlwZSwKPiArICAgICAg ICAgICAgd2hpcC0+aWNlX3VmcmFnX2xvY2FsLAo+ICsgICAgICAgICAgICB3aGlwLT5pY2VfcHdk X2xvY2FsLAo+ICsgICAgICAgICAgICB3aGlwLT5kdGxzX2ZpbmdlcnByaW50LAo+ICsgICAgICAg ICAgICB3aGlwLT5hdWRpb19wYXlsb2FkX3R5cGUsCj4gKyAgICAgICAgICAgIGFjb2RlY19uYW1l LAo+ICsgICAgICAgICAgICB3aGlwLT5hdWRpb19wYXItPnNhbXBsZV9yYXRlLAo+ICsgICAgICAg ICAgICB3aGlwLT5hdWRpb19wYXItPmNoX2xheW91dC5uYl9jaGFubmVscywKPiArICAgICAgICAg ICAgd2hpcC0+YXVkaW9fc3NyYywKPiArICAgICAgICAgICAgd2hpcC0+YXVkaW9fc3NyYyk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgaWYgKHdoaXAtPnZpZGVvX3Bhcikgewo+ICsgICAgICAgIHByb2Zp bGVfaW9wID0gcHJvZmlsZSA9IHdoaXAtPnZpZGVvX3Bhci0+cHJvZmlsZTsKPiArICAgICAgICBs ZXZlbCA9IHdoaXAtPnZpZGVvX3Bhci0+bGV2ZWw7Cj4gKyAgICAgICAgaWYgKHdoaXAtPnZpZGVv X3Bhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCkgewo+ICsgICAgICAgICAgICB2Y29k ZWNfbmFtZSA9ICJIMjY0IjsKPiArICAgICAgICAgICAgcHJvZmlsZV9pb3AgJj0gQVZfUFJPRklM RV9IMjY0X0NPTlNUUkFJTkVEOwo+ICsgICAgICAgICAgICBwcm9maWxlICY9ICh+QVZfUFJPRklM RV9IMjY0X0NPTlNUUkFJTkVEKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGF2X2Jwcmlu dGYoJmJwLCAiIgo+ICsgICAgICAgICAgICAibT12aWRlbyA5IFVEUC9UTFMvUlRQL1NBVlBGICV1 XHJcbiIKPiArICAgICAgICAgICAgImM9SU4gSVA0IDAuMC4wLjBcclxuIgo+ICsgICAgICAgICAg ICAiYT1pY2UtdWZyYWc6JXNcclxuIgo+ICsgICAgICAgICAgICAiYT1pY2UtcHdkOiVzXHJcbiIK PiArICAgICAgICAgICAgImE9ZmluZ2VycHJpbnQ6c2hhLTI1NiAlc1xyXG4iCj4gKyAgICAgICAg ICAgICJhPXNldHVwOnBhc3NpdmVcclxuIgo+ICsgICAgICAgICAgICAiYT1taWQ6MVxyXG4iCj4g KyAgICAgICAgICAgICJhPXNlbmRvbmx5XHJcbiIKPiArICAgICAgICAgICAgImE9bXNpZDpGRm1w ZWcgdmlkZW9cclxuIgo+ICsgICAgICAgICAgICAiYT1ydGNwLW11eFxyXG4iCj4gKyAgICAgICAg ICAgICJhPXJ0Y3AtcnNpemVcclxuIgo+ICsgICAgICAgICAgICAiYT1ydHBtYXA6JXUgJXMvOTAw MDBcclxuIgo+ICsgICAgICAgICAgICAiYT1mbXRwOiV1IGxldmVsLWFzeW1tZXRyeS1hbGxvd2Vk PTE7cGFja2V0aXphdGlvbi1tb2RlPTE7cHJvZmlsZS1sZXZlbC1pZD0lMDJ4JTAyeCUwMnhcclxu Igo+ICsgICAgICAgICAgICAiYT1zc3JjOiV1IGNuYW1lOkZGbXBlZ1xyXG4iCj4gKyAgICAgICAg ICAgICJhPXNzcmM6JXUgbXNpZDpGRm1wZWcgdmlkZW9cclxuIiwKPiArICAgICAgICAgICAgd2hp cC0+dmlkZW9fcGF5bG9hZF90eXBlLAo+ICsgICAgICAgICAgICB3aGlwLT5pY2VfdWZyYWdfbG9j YWwsCj4gKyAgICAgICAgICAgIHdoaXAtPmljZV9wd2RfbG9jYWwsCj4gKyAgICAgICAgICAgIHdo aXAtPmR0bHNfZmluZ2VycHJpbnQsCj4gKyAgICAgICAgICAgIHdoaXAtPnZpZGVvX3BheWxvYWRf dHlwZSwKPiArICAgICAgICAgICAgdmNvZGVjX25hbWUsCj4gKyAgICAgICAgICAgIHdoaXAtPnZp ZGVvX3BheWxvYWRfdHlwZSwKPiArICAgICAgICAgICAgcHJvZmlsZSwKPiArICAgICAgICAgICAg cHJvZmlsZV9pb3AsCj4gKyAgICAgICAgICAgIGxldmVsLAo+ICsgICAgICAgICAgICB3aGlwLT52 aWRlb19zc3JjLAo+ICsgICAgICAgICAgICB3aGlwLT52aWRlb19zc3JjKTsKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoIWF2X2JwcmludF9pc19jb21wbGV0ZSgmYnApKSB7Cj4gKyAgICAgICAgYXZf bG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE9mZmVyIGV4Y2VlZCBtYXggJWQsICVzXG4i LCBNQVhfU0RQX1NJWkUsIGJwLnN0cik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+ ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIHdoaXAtPnNkcF9vZmZlciA9 IGF2X3N0cmR1cChicC5zdHIpOwo+ICsgICAgaWYgKCF3aGlwLT5zZHBfb2ZmZXIpIHsKPiArICAg ICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgaWYgKHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFURV9PRkZFUikKPiArICAgICAg ICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfT0ZGRVI7Cj4gKyAgICB3aGlwLT53aGlwX29mZmVy X3RpbWUgPSBhdl9nZXR0aW1lKCk7Cj4gKyAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZFUkJPU0Us ICJXSElQOiBHZW5lcmF0ZWQgc3RhdGU9JWQsIG9mZmVyOiAlc1xuIiwgd2hpcC0+c3RhdGUsIHdo aXAtPnNkcF9vZmZlcik7Cj4gKwo+ICtlbmQ6Cj4gKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmJw LCBOVUxMKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBFeGNoYW5n ZSBTRFAgb2ZmZXIgd2l0aCBXZWJSVEMgcGVlciB0byBnZXQgdGhlIGFuc3dlci4KPiArICoKPiAr ICogQHJldHVybiAwIGlmIE9LLCBBVkVSUk9SX3h4eCBvbiBlcnJvcgo+ICsgKi8KPiArc3RhdGlj IGludCBleGNoYW5nZV9zZHAoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQgcmV0 Owo+ICsgICAgY2hhciBidWZbTUFYX1VSTF9TSVpFXTsKPiArICAgIEFWQlByaW50IGJwOwo+ICsg ICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4gKyAgICAvKiBUaGUgVVJMIGNv bnRleHQgaXMgYW4gSFRUUCB0cmFuc3BvcnQgbGF5ZXIgZm9yIHRoZSBXSElQIHByb3RvY29sLiAq Lwo+ICsgICAgVVJMQ29udGV4dCAqd2hpcF91YyA9IE5VTEw7Cj4gKyAgICBBVkRpY3Rpb25hcnkg Km9wdHMgPSBOVUxMOwo+ICsgICAgY2hhciAqaGV4X2RhdGEgPSBOVUxMOwo+ICsKPiArICAgIC8q IFRvIHByZXZlbnQgYSBjcmFzaCBkdXJpbmcgY2xlYW51cCwgYWx3YXlzIGluaXRpYWxpemUgaXQu ICovCj4gKyAgICBhdl9icHJpbnRfaW5pdCgmYnAsIDEsIE1BWF9TRFBfU0laRSk7Cj4gKwo+ICsg ICAgaWYgKCF3aGlwLT5zZHBfb2ZmZXIgfHwgIXN0cmxlbih3aGlwLT5zZHBfb2ZmZXIpKSB7Cj4g KyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE5vIG9mZmVyIHRvIGV4 Y2hhbmdlXG4iKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAg Z290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2Yo YnVmKSwgIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlXHJcbkNvbnRlbnQtVHlwZTogYXBwbGljYXRp b24vc2RwXHJcbiIpOwo+ICsgICAgaWYgKHdoaXAtPmF1dGhvcml6YXRpb24pCj4gKyAgICAgICAg cmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsICJBdXRob3JpemF0 aW9uOiBCZWFyZXIgJXNcclxuIiwgd2hpcC0+YXV0aG9yaXphdGlvbik7Cj4gKyAgICBpZiAocmV0 IDw9IDAgfHwgcmV0ID49IHNpemVvZihidWYpKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFW X0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBnZW5lcmF0ZSBoZWFkZXJzLCBzaXplPSVkLCAl c1xuIiwgcmV0LCBidWYpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiArICAg ICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4gKyAgICBhdl9kaWN0X3NldCgmb3B0cywgImhl YWRlcnMiLCBidWYsIDApOwo+ICsgICAgYXZfZGljdF9zZXRfaW50KCZvcHRzLCAiY2h1bmtlZF9w b3N0IiwgMCwgMCk7Cj4gKwo+ICsgICAgaGV4X2RhdGEgPSBhdl9tYWxsb2N6KDIgKiBzdHJsZW4o d2hpcC0+c2RwX29mZmVyKSArIDEpOwo+ICsgICAgaWYgKCFoZXhfZGF0YSkgewo+ICsgICAgICAg IHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiAr ICAgIGZmX2RhdGFfdG9faGV4KGhleF9kYXRhLCB3aGlwLT5zZHBfb2ZmZXIsIHN0cmxlbih3aGlw LT5zZHBfb2ZmZXIpLCAwKTsKPiArICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAicG9zdF9kYXRhIiwg aGV4X2RhdGEsIDApOwo+ICsKPiArICAgIHJldCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0KCZ3aGlw X3VjLCBzLT51cmwsIEFWSU9fRkxBR19SRUFEX1dSSVRFLCAmcy0+aW50ZXJydXB0X2NhbGxiYWNr LAo+ICsgICAgICAgICZvcHRzLCBzLT5wcm90b2NvbF93aGl0ZWxpc3QsIHMtPnByb3RvY29sX2Js YWNrbGlzdCwgTlVMTCk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgIGF2X2xvZyh3 aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gcmVxdWVzdCB1cmw9JXMsIG9mZmVy OiAlc1xuIiwgcy0+dXJsLCB3aGlwLT5zZHBfb2ZmZXIpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ ICsgICAgfQo+ICsKPiArICAgIGlmIChmZl9odHRwX2dldF9uZXdfbG9jYXRpb24od2hpcF91Yykp IHsKPiArICAgICAgICB3aGlwLT53aGlwX3Jlc291cmNlX3VybCA9IGF2X3N0cmR1cChmZl9odHRw X2dldF9uZXdfbG9jYXRpb24od2hpcF91YykpOwo+ICsgICAgICAgIGlmICghd2hpcC0+d2hpcF9y ZXNvdXJjZV91cmwpIHsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsg ICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgd2hp bGUgKDEpIHsKPiArICAgICAgICByZXQgPSBmZnVybF9yZWFkKHdoaXBfdWMsIGJ1Ziwgc2l6ZW9m KGJ1ZikpOwo+ICsgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpIHsKPiArICAgICAgICAg ICAgLyogUmVzZXQgdGhlIGVycm9yIGJlY2F1c2Ugd2UgcmVhZCBhbGwgcmVzcG9uc2UgYXMgYW5z d2VyIHV0aWwgRU9GLiAqLwo+ICsgICAgICAgICAgICByZXQgPSAwOwo+ICsgICAgICAgICAgICBi cmVhazsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKHJldCA8PSAwKSB7Cj4gKyAgICAgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gcmVhZCByZXNw b25zZSBmcm9tIHVybD0lcywgb2ZmZXIgaXMgJXMsIGFuc3dlciBpcyAlc1xuIiwKPiArICAgICAg ICAgICAgICAgIHMtPnVybCwgd2hpcC0+c2RwX29mZmVyLCB3aGlwLT5zZHBfYW5zd2VyKTsKPiAr ICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBhdl9icHJp bnRmKCZicCwgIiUuKnMiLCByZXQsIGJ1Zik7Cj4gKyAgICAgICAgaWYgKCFhdl9icHJpbnRfaXNf Y29tcGxldGUoJmJwKSkgewo+ICsgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiV0hJUDogQW5zd2VyIGV4Y2VlZCBtYXggc2l6ZSAlZCwgJS4qcywgJXNcbiIsIE1BWF9TRFBf U0laRSwgcmV0LCBidWYsIGJwLnN0cik7Cj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlP KTsKPiArICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiAr ICAgIGlmICghYXZfc3Ryc3RhcnQoYnAuc3RyLCAidj0iLCBOVUxMKSkgewo+ICsgICAgICAgIGF2 X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBJbnZhbGlkIGFuc3dlcjogJXNcbiIsIGJw LnN0cik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIGdvdG8g ZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIHdoaXAtPnNkcF9hbnN3ZXIgPSBhdl9zdHJkdXAoYnAu c3RyKTsKPiArICAgIGlmICghd2hpcC0+c2RwX2Fuc3dlcikgewo+ICsgICAgICAgIHJldCA9IEFW RVJST1IoRU5PTUVNKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4gKyAgICBp ZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0FOU1dFUikKPiArICAgICAgICB3aGlwLT5zdGF0 ZSA9IFdISVBfU1RBVEVfQU5TV0VSOwo+ICsgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19WRVJCT1NF LCAiV0hJUDogR290IHN0YXRlPSVkLCBhbnN3ZXI6ICVzXG4iLCB3aGlwLT5zdGF0ZSwgd2hpcC0+ c2RwX2Fuc3dlcik7Cj4gKwo+ICtlbmQ6Cj4gKyAgICBmZnVybF9jbG9zZXAoJndoaXBfdWMpOwo+ ICsgICAgYXZfYnByaW50X2ZpbmFsaXplKCZicCwgTlVMTCk7Cj4gKyAgICBhdl9kaWN0X2ZyZWUo Jm9wdHMpOwo+ICsgICAgYXZfZnJlZXAoJmhleF9kYXRhKTsKPiArICAgIHJldHVybiByZXQ7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBQYXJzZXMgdGhlIElDRSB1ZnJhZywgcHdkLCBhbmQgY2FuZGlk YXRlcyBmcm9tIHRoZSBTRFAgYW5zd2VyLgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gZXh0cmFjdCB0aGUgSUNFIHVmcmFnLCBwd2QsIGFuZCBjYW5kaWRhdGVzIGZyb20gdGhl IFNEUCBhbnN3ZXIuCj4gKyAqIEl0IHJldHVybnMgYW4gZXJyb3IgaWYgYW55IG9mIHRoZXNlIGZp ZWxkcyBpcyBOVUxMLiBUaGUgZnVuY3Rpb24gb25seSB1c2VzIHRoZSBmaXJzdAo+ICsgKiBjYW5k aWRhdGUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNhbmRpZGF0ZXMuIEhvd2V2ZXIsIHN1cHBvcnQg Zm9yIG11bHRpcGxlIGNhbmRpZGF0ZXMKPiArICogd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJl Lgo+ICsgKgo+ICsgKiBAcGFyYW0gcyBQb2ludGVyIHRvIHRoZSBBVkZvcm1hdENvbnRleHQKPiAr ICogQHJldHVybnMgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgQVZFUlJPUl94eHggaWYgYW4g ZXJyb3Igb2NjdXJzLgo+ICsgKi8KPiArc3RhdGljIGludCBwYXJzZV9hbnN3ZXIoQVZGb3JtYXRD b250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIEFWSU9Db250ZXh0ICpw YjsKPiArICAgIGNoYXIgbGluZVtNQVhfVVJMX1NJWkVdOwo+ICsgICAgY29uc3QgY2hhciAqcHRy Owo+ICsgICAgaW50IGk7Cj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsK PiArCj4gKyAgICBpZiAoIXdoaXAtPnNkcF9hbnN3ZXIgfHwgIXN0cmxlbih3aGlwLT5zZHBfYW5z d2VyKSkgewo+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBObyBh bnN3ZXIgdG8gcGFyc2VcbiIpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiAr ICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4gKyAgICBwYiA9IGF2aW9fYWxsb2NfY29u dGV4dCh3aGlwLT5zZHBfYW5zd2VyLCBzdHJsZW4od2hpcC0+c2RwX2Fuc3dlciksIDAsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwpOwo+ICsgICAgaWYgKCFwYikKPiArICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+ICsKPiArICAgIGZvciAoaSA9IDA7ICFhdmlvX2Zlb2YocGIpOyBpKysp IHsKPiArICAgICAgICBmZl9nZXRfY2hvbXBfbGluZShwYiwgbGluZSwgc2l6ZW9mKGxpbmUpKTsK PiArICAgICAgICBpZiAoYXZfc3Ryc3RhcnQobGluZSwgImE9aWNlLXVmcmFnOiIsICZwdHIpICYm ICF3aGlwLT5pY2VfdWZyYWdfcmVtb3RlKSB7Cj4gKyAgICAgICAgICAgIHdoaXAtPmljZV91ZnJh Z19yZW1vdGUgPSBhdl9zdHJkdXAocHRyKTsKPiArICAgICAgICAgICAgaWYgKCF3aGlwLT5pY2Vf dWZyYWdfcmVtb3RlKSB7Cj4gKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7 Cj4gKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAg IH0gZWxzZSBpZiAoYXZfc3Ryc3RhcnQobGluZSwgImE9aWNlLXB3ZDoiLCAmcHRyKSAmJiAhd2hp cC0+aWNlX3B3ZF9yZW1vdGUpIHsKPiArICAgICAgICAgICAgd2hpcC0+aWNlX3B3ZF9yZW1vdGUg PSBhdl9zdHJkdXAocHRyKTsKPiArICAgICAgICAgICAgaWYgKCF3aGlwLT5pY2VfcHdkX3JlbW90 ZSkgewo+ICsgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAg ICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9IGVsc2UgaWYg KGF2X3N0cnN0YXJ0KGxpbmUsICJhPWNhbmRpZGF0ZToiLCAmcHRyKSAmJiAhd2hpcC0+aWNlX3By b3RvY29sKSB7Cj4gKyAgICAgICAgICAgIHB0ciA9IGF2X3N0cmlzdHIocHRyLCAidWRwIik7Cj4g KyAgICAgICAgICAgIGlmIChwdHIgJiYgYXZfc3RyaXN0cihwdHIsICJob3N0IikpIHsKPiArICAg ICAgICAgICAgICAgIGNoYXIgcHJvdG9jb2xbMTddLCBob3N0WzEyOV07Cj4gKyAgICAgICAgICAg ICAgICBpbnQgcHJpb3JpdHksIHBvcnQ7Cj4gKyAgICAgICAgICAgICAgICByZXQgPSBzc2NhbmYo cHRyLCAiJTE2cyAlZCAlMTI4cyAlZCB0eXAgaG9zdCIsIHByb3RvY29sLCAmcHJpb3JpdHksIGhv c3QsICZwb3J0KTsKPiArICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gNCkgewo+ICsgICAgICAg ICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgJWQg dG8gcGFyc2UgbGluZSAlZCAlcyBmcm9tICVzXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICByZXQsIGksIGxpbmUsIHdoaXAtPnNkcF9hbnN3ZXIpOwo+ICsgICAgICAgICAgICAgICAgICAg IHJldCA9IEFWRVJST1IoRUlPKTsKPiArICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiAr ICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoYXZfc3RyY2FzZWNt cChwcm90b2NvbCwgInVkcCIpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAs IEFWX0xPR19FUlJPUiwgIldISVA6IFByb3RvY29sICVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUlRD LCBjaG9vc2UgdWRwLCBsaW5lICVkICVzIG9mICVzXG4iLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICBwcm90b2NvbCwgaSwgbGluZSwgd2hpcC0+c2RwX2Fuc3dlcik7Cj4gKyAgICAgICAgICAg ICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+ICsgICAgICAgICAgICAgICAgICAgIGdvdG8g ZW5kOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIHdoaXAtPmlj ZV9wcm90b2NvbCA9IGF2X3N0cmR1cChwcm90b2NvbCk7Cj4gKyAgICAgICAgICAgICAgICB3aGlw LT5pY2VfaG9zdCA9IGF2X3N0cmR1cChob3N0KTsKPiArICAgICAgICAgICAgICAgIHdoaXAtPmlj ZV9wb3J0ID0gcG9ydDsKPiArICAgICAgICAgICAgICAgIGlmICghd2hpcC0+aWNlX3Byb3RvY29s IHx8ICF3aGlwLT5pY2VfaG9zdCkgewo+ICsgICAgICAgICAgICAgICAgICAgIHJldCA9IEFWRVJS T1IoRU5PTUVNKTsKPiArICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICAg ICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAg ICBpZiAoIXdoaXAtPmljZV9wd2RfcmVtb3RlIHx8ICFzdHJsZW4od2hpcC0+aWNlX3B3ZF9yZW1v dGUpKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE5vIHJl bW90ZSBpY2UgcHdkIHBhcnNlZCBmcm9tICVzXG4iLCB3aGlwLT5zZHBfYW5zd2VyKTsKPiArICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgaWYgKCF3aGlwLT5pY2VfdWZyYWdfcmVtb3RlIHx8ICFzdHJsZW4od2hpcC0+ aWNlX3VmcmFnX3JlbW90ZSkpIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiV0hJUDogTm8gcmVtb3RlIGljZSB1ZnJhZyBwYXJzZWQgZnJvbSAlc1xuIiwgd2hpcC0+c2Rw X2Fuc3dlcik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIGdv dG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICghd2hpcC0+aWNlX3Byb3RvY29sIHx8ICF3 aGlwLT5pY2VfaG9zdCB8fCAhd2hpcC0+aWNlX3BvcnQpIHsKPiArICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogTm8gaWNlIGNhbmRpZGF0ZSBwYXJzZWQgZnJvbSAlc1xu Iiwgd2hpcC0+c2RwX2Fuc3dlcik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICh3aGlwLT5zdGF0ZSA8 IFdISVBfU1RBVEVfTkVHT1RJQVRFRCkKPiArICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RB VEVfTkVHT1RJQVRFRDsKPiArICAgIHdoaXAtPndoaXBfYW5zd2VyX3RpbWUgPSBhdl9nZXR0aW1l KCk7Cj4gKyAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZFUkJPU0UsICJXSElQOiBTRFAgc3RhdGU9 JWQsIG9mZmVyPSVsdUIsIGFuc3dlcj0lbHVCLCB1ZnJhZz0lcywgcHdkPSVsdUIsIHRyYW5zcG9y dD0lczovLyVzOiVkLCBlbGFwc2VkPSVkbXNcbiIsCj4gKyAgICAgICAgd2hpcC0+c3RhdGUsIHN0 cmxlbih3aGlwLT5zZHBfb2ZmZXIpLCBzdHJsZW4od2hpcC0+c2RwX2Fuc3dlciksIHdoaXAtPmlj ZV91ZnJhZ19yZW1vdGUsIHN0cmxlbih3aGlwLT5pY2VfcHdkX3JlbW90ZSksCj4gKyAgICAgICAg d2hpcC0+aWNlX3Byb3RvY29sLCB3aGlwLT5pY2VfaG9zdCwgd2hpcC0+aWNlX3BvcnQsIEVMQVBT RUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2X2dldHRpbWUoKSkpOwo+ICsKPiArZW5kOgo+ICsg ICAgYXZpb19jb250ZXh0X2ZyZWUoJnBiKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBDcmVhdGVzIGFuZCBtYXJzaGFscyBhbiBJQ0UgYmluZGluZyByZXF1ZXN0IHBh Y2tldC4KPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuZCBtYXJzaGFscyBhbiBJ Q0UgYmluZGluZyByZXF1ZXN0IHBhY2tldC4gVGhlIGZ1bmN0aW9uIG9ubHkKPiArICogZ2VuZXJh dGVzIHRoZSB1c2VybmFtZSBhdHRyaWJ1dGUgYW5kIGRvZXMgbm90IGluY2x1ZGUgZ29vZy1uZXR3 b3JrLWluZm8sIGljZS1jb250cm9sbGluZywKPiArICogdXNlLWNhbmRpZGF0ZSwgYW5kIHByaW9y aXR5LiBIb3dldmVyLCBzb21lIG9mIHRoZXNlIGF0dHJpYnV0ZXMgbWF5IGJlIGFkZGVkIGluIHRo ZSBmdXR1cmUuCj4gKyAqCj4gKyAqIEBwYXJhbSBzIFBvaW50ZXIgdG8gdGhlIEFWRm9ybWF0Q29u dGV4dAo+ICsgKiBAcGFyYW0gYnVmIFBvaW50ZXIgdG8gbWVtb3J5IGJ1ZmZlciB0byBzdG9yZSB0 aGUgcmVxdWVzdCBwYWNrZXQKPiArICogQHBhcmFtIGJ1Zl9zaXplIFNpemUgb2YgdGhlIG1lbW9y eSBidWZmZXIKPiArICogQHBhcmFtIHJlcXVlc3Rfc2l6ZSBQb2ludGVyIHRvIGFuIGludGVnZXIg dGhhdCByZWNlaXZlcyB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBwYWNrZXQKPiArICogQHJldHVy biBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBBVkVSUk9SX3h4eCBpZiBhbiBlcnJvciBvY2N1 cnMuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGljZV9jcmVhdGVfcmVxdWVzdChBVkZvcm1hdENvbnRl eHQgKnMsIHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplLCBpbnQgKnJlcXVlc3Rfc2l6ZSkKPiAr ewo+ICsgICAgaW50IHJldCwgc2l6ZSwgY3JjMzI7Cj4gKyAgICBjaGFyIHVzZXJuYW1lWzEyOF07 Cj4gKyAgICBBVklPQ29udGV4dCAqcGIgPSBOVUxMOwo+ICsgICAgQVZITUFDICpobWFjID0gTlVM TDsKPiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIHBi ID0gYXZpb19hbGxvY19jb250ZXh0KGJ1ZiwgYnVmX3NpemUsIDEsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpOwo+ICsgICAgaWYgKCFwYikKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p Owo+ICsKPiArICAgIGhtYWMgPSBhdl9obWFjX2FsbG9jKEFWX0hNQUNfU0hBMSk7Cj4gKyAgICBp ZiAoIWhtYWMpIHsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAg Z290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogV3JpdGUgMjAgYnl0ZXMgaGVhZGVyICov Cj4gKyAgICBhdmlvX3diMTYocGIsIDB4MDAwMSk7IC8qIFNUVU4gYmluZGluZyByZXF1ZXN0ICov Cj4gKyAgICBhdmlvX3diMTYocGIsIDApOyAgICAgIC8qIGxlbmd0aCAqLwo+ICsgICAgYXZpb193 YjMyKHBiLCBTVFVOX01BR0lDX0NPT0tJRSk7IC8qIG1hZ2ljIGNvb2tpZSAqLwo+ICsgICAgYXZp b193YjMyKHBiLCBhdl9sZmdfZ2V0KCZ3aGlwLT5ybmQpKTsgLyogdHJhbnNhY3Rpb24gSUQgKi8K PiArICAgIGF2aW9fd2IzMihwYiwgYXZfbGZnX2dldCgmd2hpcC0+cm5kKSk7IC8qIHRyYW5zYWN0 aW9uIElEICovCj4gKyAgICBhdmlvX3diMzIocGIsIGF2X2xmZ19nZXQoJndoaXAtPnJuZCkpOyAv KiB0cmFuc2FjdGlvbiBJRCAqLwo+ICsKPiArICAgIC8qIFRoZSB1c2VybmFtZSBpcyB0aGUgY29u Y2F0ZW5hdGlvbiBvZiB0aGUgdHdvIElDRSB1ZnJhZyAqLwo+ICsgICAgcmV0ID0gc25wcmludGYo dXNlcm5hbWUsIHNpemVvZih1c2VybmFtZSksICIlczolcyIsIHdoaXAtPmljZV91ZnJhZ19yZW1v dGUsIHdoaXAtPmljZV91ZnJhZ19sb2NhbCk7Cj4gKyAgICBpZiAocmV0IDw9IDAgfHwgcmV0ID49 IHNpemVvZih1c2VybmFtZSkpIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiV0hJUDogRmFpbGVkIHRvIGJ1aWxkIHVzZXJuYW1lICVzOiVzLCBtYXg9JWx1LCByZXQ9JWRc biIsCj4gKyAgICAgICAgICAgIHdoaXAtPmljZV91ZnJhZ19yZW1vdGUsIHdoaXAtPmljZV91ZnJh Z19sb2NhbCwgc2l6ZW9mKHVzZXJuYW1lKSwgcmV0KTsKPiArICAgICAgICByZXQgPSBBVkVSUk9S KEVJTyk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogV3JpdGUg dGhlIHVzZXJuYW1lIGF0dHJpYnV0ZSAqLwo+ICsgICAgYXZpb193YjE2KHBiLCBTVFVOX0FUVFJf VVNFUk5BTUUpOyAvKiBhdHRyaWJ1dGUgdHlwZSB1c2VybmFtZSAqLwo+ICsgICAgYXZpb193YjE2 KHBiLCByZXQpOyAvKiBzaXplIG9mIHVzZXJuYW1lICovCj4gKyAgICBhdmlvX3dyaXRlKHBiLCB1 c2VybmFtZSwgcmV0KTsgLyogYnl0ZXMgb2YgdXNlcm5hbWUgKi8KPiArICAgIGZmaW9fZmlsbChw YiwgMCwgKDQgLSAocmV0ICUgNCkpICUgNCk7IC8qIHBhZGRpbmcgKi8KPiArCj4gKyAgICAvKiBX cml0ZSB0aGUgdXNlLWNhbmRpZGF0ZSBhdHRyaWJ1dGUgKi8KPiArICAgIGF2aW9fd2IxNihwYiwg U1RVTl9BVFRSX1VTRV9DQU5ESURBVEUpOyAvKiBhdHRyaWJ1dGUgdHlwZSB1c2UtY2FuZGlkYXRl ICovCj4gKyAgICBhdmlvX3diMTYocGIsIDApOyAvKiBzaXplIG9mIHVzZS1jYW5kaWRhdGUgKi8K PiArCj4gKyAgICAvKiBCdWlsZCBhbmQgdXBkYXRlIG1lc3NhZ2UgaW50ZWdyaXR5ICovCj4gKyAg ICBhdmlvX3diMTYocGIsIFNUVU5fQVRUUl9NRVNTQUdFX0lOVEVHUklUWSk7IC8qIGF0dHJpYnV0 ZSB0eXBlIG1lc3NhZ2UgaW50ZWdyaXR5ICovCj4gKyAgICBhdmlvX3diMTYocGIsIDIwKTsgLyog c2l6ZSBvZiBtZXNzYWdlIGludGVncml0eSAqLwo+ICsgICAgZmZpb19maWxsKHBiLCAwLCAyMCk7 IC8qIGZpbGwgd2l0aCB6ZXJvIHRvIGRpcmVjdGx5IHdyaXRlIGFuZCBza2lwIGl0ICovCj4gKyAg ICBzaXplID0gYXZpb190ZWxsKHBiKTsKPiArICAgIGJ1ZlsyXSA9IChzaXplIC0gMjApID4+IDg7 Cj4gKyAgICBidWZbM10gPSAoc2l6ZSAtIDIwKSAmIDB4RkY7Cj4gKyAgICBhdl9obWFjX2luaXQo aG1hYywgd2hpcC0+aWNlX3B3ZF9yZW1vdGUsIHN0cmxlbih3aGlwLT5pY2VfcHdkX3JlbW90ZSkp Owo+ICsgICAgYXZfaG1hY191cGRhdGUoaG1hYywgYnVmLCBzaXplIC0gMjQpOwo+ICsgICAgYXZf aG1hY19maW5hbChobWFjLCBidWYgKyBzaXplIC0gMjAsIDIwKTsKPiArCj4gKyAgICAvKiBXcml0 ZSB0aGUgZmluZ2VycHJpbnQgYXR0cmlidXRlICovCj4gKyAgICBhdmlvX3diMTYocGIsIFNUVU5f QVRUUl9GSU5HRVJQUklOVCk7IC8qIGF0dHJpYnV0ZSB0eXBlIGZpbmdlcnByaW50ICovCj4gKyAg ICBhdmlvX3diMTYocGIsIDQpOyAvKiBzaXplIG9mIGZpbmdlcnByaW50ICovCj4gKyAgICBmZmlv X2ZpbGwocGIsIDAsIDQpOyAvKiBmaWxsIHdpdGggemVybyB0byBkaXJlY3RseSB3cml0ZSBhbmQg c2tpcCBpdCAqLwo+ICsgICAgc2l6ZSA9IGF2aW9fdGVsbChwYik7Cj4gKyAgICBidWZbMl0gPSAo c2l6ZSAtIDIwKSA+PiA4Owo+ICsgICAgYnVmWzNdID0gKHNpemUgLSAyMCkgJiAweEZGOwo+ICsg ICAgLyogUmVmZXIgdG8gdGhlIGF2X2hhc2hfYWxsb2MoIkNSQzMyIiksIGF2X2hhc2hfaW5pdCBh bmQgYXZfaGFzaF9maW5hbCAqLwo+ICsgICAgY3JjMzIgPSBhdl9jcmMoYXZfY3JjX2dldF90YWJs ZShBVl9DUkNfMzJfSUVFRV9MRSksIDB4RkZGRkZGRkYsIGJ1Ziwgc2l6ZSAtIDgpIF4gMHhGRkZG RkZGRjsKPiArICAgIGF2aW9fc2tpcChwYiwgLTQpOwo+ICsgICAgYXZpb193YjMyKHBiLCBjcmMz MiBeIDB4NTM1NDU1NEUpOyAvKiB4b3Igd2l0aCAiU1RVTiIgKi8KPiArCj4gKyAgICAqcmVxdWVz dF9zaXplID0gc2l6ZTsKPiArCj4gK2VuZDoKPiArICAgIGF2aW9fY29udGV4dF9mcmVlKCZwYik7 Cj4gKyAgICBhdl9obWFjX2ZyZWUoaG1hYyk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICsvKioKPiArICogQ3JlYXRlIGFuIElDRSBiaW5kaW5nIHJlc3BvbnNlLgo+ICsgKgo+ICsgKiBU aGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhbiBJQ0UgYmluZGluZyByZXNwb25zZSBhbmQgd3JpdGVz IGl0IHRvIHRoZSBwcm92aWRlZAo+ICsgKiBidWZmZXIuIFRoZSByZXNwb25zZSBpcyBzaWduZWQg dXNpbmcgdGhlIGxvY2FsIHBhc3N3b3JkIGZvciBtZXNzYWdlIGludGVncml0eS4KPiArICoKPiAr ICogQHBhcmFtIHMgUG9pbnRlciB0byB0aGUgQVZGb3JtYXRDb250ZXh0IHN0cnVjdHVyZS4KPiAr ICogQHBhcmFtIHRpZCBQb2ludGVyIHRvIHRoZSB0cmFuc2FjdGlvbiBJRCBvZiB0aGUgYmluZGlu ZyByZXF1ZXN0LiBUaGUgdGlkX3NpemUgc2hvdWxkIGJlIDEyLgo+ICsgKiBAcGFyYW0gdGlkX3Np emUgVGhlIHNpemUgb2YgdGhlIHRyYW5zYWN0aW9uIElELCBzaG91bGQgYmUgMTIuCj4gKyAqIEBw YXJhbSBidWYgUG9pbnRlciB0byB0aGUgYnVmZmVyIHdoZXJlIHRoZSByZXNwb25zZSB3aWxsIGJl IHdyaXR0ZW4uCj4gKyAqIEBwYXJhbSBidWZfc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBy b3ZpZGVkIGZvciB0aGUgcmVzcG9uc2UuCj4gKyAqIEBwYXJhbSByZXNwb25zZV9zaXplIFBvaW50 ZXIgdG8gYW4gaW50ZWdlciB0aGF0IHdpbGwgc3RvcmUgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRl ZCByZXNwb25zZS4KPiArICogQHJldHVybiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBBVkVS Uk9SX3h4eCBpZiBhbiBlcnJvciBvY2N1cnMuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGljZV9jcmVh dGVfcmVzcG9uc2UoQVZGb3JtYXRDb250ZXh0ICpzLCBjaGFyICp0aWQsIGludCB0aWRfc2l6ZSwg dWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUsIGludCAqcmVzcG9uc2Vfc2l6ZSkKPiArewo+ICsg ICAgaW50IHJldCA9IDAsIHNpemUsIGNyYzMyOwo+ICsgICAgQVZJT0NvbnRleHQgKnBiID0gTlVM TDsKPiArICAgIEFWSE1BQyAqaG1hYyA9IE5VTEw7Cj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9 IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpZiAodGlkX3NpemUgIT0gMTIpIHsKPiArICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogSW52YWxpZCB0cmFuc2FjdGlvbiBJ RCBzaXplLiBFeHBlY3RlZCAxMiwgZ290ICVkXG4iLCB0aWRfc2l6ZSk7Cj4gKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAgIH0KPiArCj4gKyAgICBwYiA9IGF2aW9fYWxsb2Nf Y29udGV4dChidWYsIGJ1Zl9zaXplLCAxLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKPiArICAg IGlmICghcGIpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gKyAgICBo bWFjID0gYXZfaG1hY19hbGxvYyhBVl9ITUFDX1NIQTEpOwo+ICsgICAgaWYgKCFobWFjKSB7Cj4g KyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsg ICAgfQo+ICsKPiArICAgIC8qIFdyaXRlIDIwIGJ5dGVzIGhlYWRlciAqLwo+ICsgICAgYXZpb193 YjE2KHBiLCAweDAxMDEpOyAvKiBTVFVOIGJpbmRpbmcgcmVzcG9uc2UgKi8KPiArICAgIGF2aW9f d2IxNihwYiwgMCk7ICAgICAgLyogbGVuZ3RoICovCj4gKyAgICBhdmlvX3diMzIocGIsIFNUVU5f TUFHSUNfQ09PS0lFKTsgLyogbWFnaWMgY29va2llICovCj4gKyAgICBhdmlvX3dyaXRlKHBiLCB0 aWQsIHRpZF9zaXplKTsgLyogdHJhbnNhY3Rpb24gSUQgKi8KPiArCj4gKyAgICAvKiBCdWlsZCBh bmQgdXBkYXRlIG1lc3NhZ2UgaW50ZWdyaXR5ICovCj4gKyAgICBhdmlvX3diMTYocGIsIFNUVU5f QVRUUl9NRVNTQUdFX0lOVEVHUklUWSk7IC8qIGF0dHJpYnV0ZSB0eXBlIG1lc3NhZ2UgaW50ZWdy aXR5ICovCj4gKyAgICBhdmlvX3diMTYocGIsIDIwKTsgLyogc2l6ZSBvZiBtZXNzYWdlIGludGVn cml0eSAqLwo+ICsgICAgZmZpb19maWxsKHBiLCAwLCAyMCk7IC8qIGZpbGwgd2l0aCB6ZXJvIHRv IGRpcmVjdGx5IHdyaXRlIGFuZCBza2lwIGl0ICovCj4gKyAgICBzaXplID0gYXZpb190ZWxsKHBi KTsKPiArICAgIGJ1ZlsyXSA9IChzaXplIC0gMjApID4+IDg7Cj4gKyAgICBidWZbM10gPSAoc2l6 ZSAtIDIwKSAmIDB4RkY7Cj4gKyAgICBhdl9obWFjX2luaXQoaG1hYywgd2hpcC0+aWNlX3B3ZF9s b2NhbCwgc3RybGVuKHdoaXAtPmljZV9wd2RfbG9jYWwpKTsKPiArICAgIGF2X2htYWNfdXBkYXRl KGhtYWMsIGJ1Ziwgc2l6ZSAtIDI0KTsKPiArICAgIGF2X2htYWNfZmluYWwoaG1hYywgYnVmICsg c2l6ZSAtIDIwLCAyMCk7Cj4gKwo+ICsgICAgLyogV3JpdGUgdGhlIGZpbmdlcnByaW50IGF0dHJp YnV0ZSAqLwo+ICsgICAgYXZpb193YjE2KHBiLCBTVFVOX0FUVFJfRklOR0VSUFJJTlQpOyAvKiBh dHRyaWJ1dGUgdHlwZSBmaW5nZXJwcmludCAqLwo+ICsgICAgYXZpb193YjE2KHBiLCA0KTsgLyog c2l6ZSBvZiBmaW5nZXJwcmludCAqLwo+ICsgICAgZmZpb19maWxsKHBiLCAwLCA0KTsgLyogZmls bCB3aXRoIHplcm8gdG8gZGlyZWN0bHkgd3JpdGUgYW5kIHNraXAgaXQgKi8KPiArICAgIHNpemUg PSBhdmlvX3RlbGwocGIpOwo+ICsgICAgYnVmWzJdID0gKHNpemUgLSAyMCkgPj4gODsKPiArICAg IGJ1ZlszXSA9IChzaXplIC0gMjApICYgMHhGRjsKPiArICAgIC8qIFJlZmVyIHRvIHRoZSBhdl9o YXNoX2FsbG9jKCJDUkMzMiIpLCBhdl9oYXNoX2luaXQgYW5kIGF2X2hhc2hfZmluYWwgKi8KPiAr ICAgIGNyYzMyID0gYXZfY3JjKGF2X2NyY19nZXRfdGFibGUoQVZfQ1JDXzMyX0lFRUVfTEUpLCAw eEZGRkZGRkZGLCBidWYsIHNpemUgLSA4KSBeIDB4RkZGRkZGRkY7Cj4gKyAgICBhdmlvX3NraXAo cGIsIC00KTsKPiArICAgIGF2aW9fd2IzMihwYiwgY3JjMzIgXiAweDUzNTQ1NTRFKTsgLyogeG9y IHdpdGggIlNUVU4iICovCj4gKwo+ICsgICAgKnJlc3BvbnNlX3NpemUgPSBzaXplOwo+ICsKPiAr ZW5kOgo+ICsgICAgYXZpb19jb250ZXh0X2ZyZWUoJnBiKTsKPiArICAgIGF2X2htYWNfZnJlZSho bWFjKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBBIEJpbmRpbmcg cmVxdWVzdCBoYXMgY2xhc3M9MGIwMCAocmVxdWVzdCkgYW5kIG1ldGhvZD0wYjAwMDAwMDAwMDAw MSAoQmluZGluZykKPiArICogYW5kIGlzIGVuY29kZWQgaW50byB0aGUgZmlyc3QgMTYgYml0cyBh cyAweDAwMDEuCj4gKyAqIFNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1s L3JmYzUzODkjc2VjdGlvbi02Cj4gKyAqLwo+ICtzdGF0aWMgaW50IGljZV9pc19iaW5kaW5nX3Jl cXVlc3QodWludDhfdCAqYiwgaW50IHNpemUpCj4gK3sKPiArICAgIHJldHVybiBzaXplID49IElD RV9TVFVOX0hFQURFUl9TSVpFICYmIEFWX1JCMTYoJmJbMF0pID09IDB4MDAwMTsKPiArfQo+ICsK PiArLyoqCj4gKyAqIEEgQmluZGluZyByZXNwb25zZSBoYXMgY2xhc3M9MGIxMCAoc3VjY2VzcyBy ZXNwb25zZSkgYW5kIG1ldGhvZD0wYjAwMDAwMDAwMDAwMSwKPiArICogYW5kIGlzIGVuY29kZWQg aW50byB0aGUgZmlyc3QgMTYgYml0cyBhcyAweDAxMDEuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGlj ZV9pc19iaW5kaW5nX3Jlc3BvbnNlKHVpbnQ4X3QgKmIsIGludCBzaXplKQo+ICt7Cj4gKyAgICBy ZXR1cm4gc2l6ZSA+PSBJQ0VfU1RVTl9IRUFERVJfU0laRSAmJiBBVl9SQjE2KCZiWzBdKSA9PSAw eDAxMDE7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBJbiBSVFAgcGFja2V0cywgdGhlIGZpcnN0IGJ5 dGUgaXMgcmVwcmVzZW50ZWQgYXMgMGIxMHh4eHh4eCwgd2hlcmUgdGhlIGluaXRpYWwKPiArICog dHdvIGJpdHMgKDBiMTApIGluZGljYXRlIHRoZSBSVFAgdmVyc2lvbiwKPiArICogc2VlIGh0dHBz Oi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzNTUwI3NlY3Rpb24tNS4xCj4gKyAqIFRoZSBS VENQIHBhY2tldCBoZWFkZXIgaXMgc2ltaWxhciB0byBSVFAsCj4gKyAqIHNlZSBodHRwczovL3d3 dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzU1MCNzZWN0aW9uLTYuNC4xCj4gKyAqLwo+ICtzdGF0 aWMgaW50IG1lZGlhX2lzX3J0cF9ydGNwKHVpbnQ4X3QgKmIsIGludCBzaXplKQo+ICt7Cj4gKyAg ICByZXR1cm4gc2l6ZSA+PSBXSElQX1JUUF9IRUFERVJfU0laRSAmJiAoYlswXSAmIDB4QzApID09 IDB4ODA7Cj4gK30KPiArCj4gKy8qIFdoZXRoZXIgdGhlIHBhY2tldCBpcyBSVENQLiAqLwo+ICtz dGF0aWMgaW50IG1lZGlhX2lzX3J0Y3AodWludDhfdCAqYiwgaW50IHNpemUpCj4gK3sKPiArICAg IHJldHVybiBzaXplID49IFdISVBfUlRQX0hFQURFUl9TSVpFICYmIGJbMV0gPj0gV0hJUF9SVENQ X1BUX1NUQVJUICYmIGJbMV0gPD0gV0hJUF9SVENQX1BUX0VORDsKPiArfQo+ICsKPiArLyoqCj4g KyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBpbmNvbWluZyBiaW5kaW5nIHJlcXVlc3QgbWVzc2Fn ZXMgYnkgcmVzcG9uZGluZyB0byB0aGVtLgo+ICsgKiBJZiB0aGUgbWVzc2FnZSBpcyBub3QgYSBi aW5kaW5nIHJlcXVlc3QsIGl0IHdpbGwgYmUgaWdub3JlZC4KPiArICovCj4gK3N0YXRpYyBpbnQg aWNlX2hhbmRsZV9iaW5kaW5nX3JlcXVlc3QoQVZGb3JtYXRDb250ZXh0ICpzLCBjaGFyICpidWYs IGludCBidWZfc2l6ZSkKPiArewo+ICsgICAgaW50IHJldCA9IDAsIHNpemU7Cj4gKyAgICBjaGFy IHRpZFsxMl07Cj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKPiArCj4g KyAgICAvKiBJZ25vcmUgaWYgbm90IGEgYmluZGluZyByZXF1ZXN0LiAqLwo+ICsgICAgaWYgKCFp Y2VfaXNfYmluZGluZ19yZXF1ZXN0KGJ1ZiwgYnVmX3NpemUpKQo+ICsgICAgICAgIHJldHVybiBy ZXQ7Cj4gKwo+ICsgICAgaWYgKGJ1Zl9zaXplIDwgSUNFX1NUVU5fSEVBREVSX1NJWkUpIHsKPiAr ICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogSW52YWxpZCBTVFVOIG1l c3NhZ2UsIGV4cGVjdGVkIGF0IGxlYXN0ICVkLCBnb3QgJWRcbiIsCj4gKyAgICAgICAgICAgIElD RV9TVFVOX0hFQURFUl9TSVpFLCBidWZfc2l6ZSk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBQYXJzZSB0cmFuc2FjdGlvbiBpZCBmcm9t IGJpbmRpbmcgcmVxdWVzdCBpbiBidWYuICovCj4gKyAgICBtZW1jcHkodGlkLCBidWYgKyA4LCAx Mik7Cj4gKwo+ICsgICAgLyogQnVpbGQgdGhlIFNUVU4gYmluZGluZyByZXNwb25zZS4gKi8KPiAr ICAgIHJldCA9IGljZV9jcmVhdGVfcmVzcG9uc2UocywgdGlkLCBzaXplb2YodGlkKSwgd2hpcC0+ YnVmLCBzaXplb2Yod2hpcC0+YnVmKSwgJnNpemUpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiAr ICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGNyZWF0 ZSBTVFVOIGJpbmRpbmcgcmVzcG9uc2UsIHNpemU9JWRcbiIsIHNpemUpOwo+ICsgICAgICAgIHJl dHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZ1cmxfd3JpdGUod2hpcC0+dWRw LCB3aGlwLT5idWYsIHNpemUpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBhdl9s b2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHNlbmQgU1RVTiBiaW5kaW5n IHJlc3BvbnNlLCBzaXplPSVkXG4iLCBzaXplKTsKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsg ICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogVG8gZXN0YWJs aXNoIGEgY29ubmVjdGlvbiB3aXRoIHRoZSBVRFAgc2VydmVyLCB3ZSB1dGlsaXplIElDRS1MSVRF IGluIGEgQ2xpZW50LVNlcnZlcgo+ICsgKiBtb2RlLiBJbiB0aGlzIHNldHVwLCBGRm1wZWcgYWN0 cyBhcyB0aGUgVURQIGNsaWVudCwgd2hpbGUgdGhlIHBlZXIgZnVuY3Rpb25zIGFzIHRoZQo+ICsg KiBVRFAgc2VydmVyLgo+ICsgKi8KPiArc3RhdGljIGludCB1ZHBfY29ubmVjdChBVkZvcm1hdENv bnRleHQgKnMpCj4gK3sKPiArICAgIGludCByZXQgPSAwOwo+ICsgICAgY2hhciB1cmxbMjU2XTsK PiArICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5VTEw7Cj4gKyAgICBXSElQQ29udGV4dCAqd2hp cCA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICAvKiBCdWlsZCBVRFAgVVJMIGFuZCBjcmVhdGUg dGhlIFVEUCBjb250ZXh0IGFzIHRyYW5zcG9ydC4gKi8KPiArICAgIGZmX3VybF9qb2luKHVybCwg c2l6ZW9mKHVybCksICJ1ZHAiLCBOVUxMLCB3aGlwLT5pY2VfaG9zdCwgd2hpcC0+aWNlX3BvcnQs IE5VTEwpOwo+ICsKPiArICAgIGF2X2RpY3Rfc2V0X2ludCgmb3B0cywgImNvbm5lY3QiLCAxLCAw KTsKPiArICAgIGF2X2RpY3Rfc2V0X2ludCgmb3B0cywgImZpZm9fc2l6ZSIsIDAsIDApOwo+ICsg ICAgLyogU2V0IHRoZSBtYXggcGFja2V0IHNpemUgdG8gdGhlIGJ1ZmZlciBzaXplLiAqLwo+ICsg ICAgYXZfZGljdF9zZXRfaW50KCZvcHRzLCAicGt0X3NpemUiLCB3aGlwLT5wa3Rfc2l6ZSwgMCk7 Cj4gKwo+ICsgICAgcmV0ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoJndoaXAtPnVkcCwgdXJsLCBB VklPX0ZMQUdfV1JJVEUsICZzLT5pbnRlcnJ1cHRfY2FsbGJhY2ssCj4gKyAgICAgICAgJm9wdHMs IHMtPnByb3RvY29sX3doaXRlbGlzdCwgcy0+cHJvdG9jb2xfYmxhY2tsaXN0LCBOVUxMKTsKPiAr ICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwg IldISVA6IEZhaWxlZCB0byBjb25uZWN0IHVkcDovLyVzOiVkXG4iLCB3aGlwLT5pY2VfaG9zdCwg d2hpcC0+aWNlX3BvcnQpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAg IC8qIE1ha2UgdGhlIHNvY2tldCBub24tYmxvY2tpbmcsIHNldCB0byBSRUFEIGFuZCBXUklURSBt b2RlIGFmdGVyIGNvbm5lY3RlZCAqLwo+ICsgICAgZmZfc29ja2V0X25vbmJsb2NrKGZmdXJsX2dl dF9maWxlX2hhbmRsZSh3aGlwLT51ZHApLCAxKTsKPiArICAgIHdoaXAtPnVkcC0+ZmxhZ3MgfD0g QVZJT19GTEFHX1JFQUQgfCBBVklPX0ZMQUdfTk9OQkxPQ0s7Cj4gKwo+ICsgICAgaWYgKHdoaXAt PnN0YXRlIDwgV0hJUF9TVEFURV9VRFBfQ09OTkVDVEVEKQo+ICsgICAgICAgIHdoaXAtPnN0YXRl ID0gV0hJUF9TVEFURV9VRFBfQ09OTkVDVEVEOwo+ICsgICAgd2hpcC0+d2hpcF91ZHBfdGltZSA9 IGF2X2dldHRpbWUoKTsKPiArICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6 IFVEUCBzdGF0ZT0lZCwgZWxhcHNlZD0lZG1zLCBjb25uZWN0ZWQgdG8gdWRwOi8vJXM6JWRcbiIs Cj4gKyAgICAgICAgd2hpcC0+c3RhdGUsIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2 X2dldHRpbWUoKSksIHdoaXAtPmljZV9ob3N0LCB3aGlwLT5pY2VfcG9ydCk7Cj4gKwo+ICtlbmQ6 Cj4gKyAgICBhdl9kaWN0X2ZyZWUoJm9wdHMpOwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIGludCBpY2VfZHRsc19oYW5kc2hha2UoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7 Cj4gKyAgICBpbnQgcmV0ID0gMCwgc2l6ZSwgaTsKPiArICAgIGludDY0X3Qgc3RhcnR0aW1lID0g YXZfZ2V0dGltZSgpLCBub3c7Cj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0 YTsKPiArICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5VTEw7Cj4gKyAgICBjaGFyIHN0cls4XTsK PiArICAgIGNoYXIgYnVmWzI1Nl0sICpjZXJ0X2J1ZiA9IE5VTEwsICprZXlfYnVmID0gTlVMTDsK PiArCj4gKyAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX1VEUF9DT05ORUNURUQgfHwg IXdoaXAtPnVkcCkgewo+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQ OiBVRFAgbm90IGNvbm5lY3RlZCwgc3RhdGU9JWQsIHVkcD0lcFxuIiwgd2hpcC0+c3RhdGUsIHdo aXAtPnVkcCk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAgIH0KPiAr Cj4gKyAgICB3aGlsZSAoMSkgewo+ICsgICAgICAgIGlmICh3aGlwLT5zdGF0ZSA8PSBXSElQX1NU QVRFX0lDRV9DT05ORUNUSU5HKSB7Cj4gKyAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBTVFVOIGJp bmRpbmcgcmVxdWVzdC4gKi8KPiArICAgICAgICAgICAgcmV0ID0gaWNlX2NyZWF0ZV9yZXF1ZXN0 KHMsIHdoaXAtPmJ1Ziwgc2l6ZW9mKHdoaXAtPmJ1ZiksICZzaXplKTsKPiArICAgICAgICAgICAg aWYgKHJldCA8IDApIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBGYWlsZWQgdG8gY3JlYXRlIFNUVU4gYmluZGluZyByZXF1ZXN0LCBzaXplPSVk XG4iLCBzaXplKTsKPiArICAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgICAgICAgICB9 Cj4gKwo+ICsgICAgICAgICAgICByZXQgPSBmZnVybF93cml0ZSh3aGlwLT51ZHAsIHdoaXAtPmJ1 Ziwgc2l6ZSk7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHNlbmQgU1RVTiBi aW5kaW5nIHJlcXVlc3QsIHNpemU9JWRcbiIsIHNpemUpOwo+ICsgICAgICAgICAgICAgICAgZ290 byBlbmQ7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIGlmICh3aGlwLT5zdGF0 ZSA8IFdISVBfU1RBVEVfSUNFX0NPTk5FQ1RJTkcpCj4gKyAgICAgICAgICAgICAgICB3aGlwLT5z dGF0ZSA9IFdISVBfU1RBVEVfSUNFX0NPTk5FQ1RJTkc7Cj4gKyAgICAgICAgfQo+ICsKPiArbmV4 dF9wYWNrZXQ6Cj4gKyAgICAgICAgaWYgKHdoaXAtPnN0YXRlID49IFdISVBfU1RBVEVfRFRMU19G SU5JU0hFRCkKPiArICAgICAgICAgICAgLyogRFRMUyBoYW5kc2hha2UgaXMgZG9uZSwgZXhpdCB0 aGUgbG9vcC4gKi8KPiArICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgIG5vdyA9IGF2 X2dldHRpbWUoKTsKPiArICAgICAgICBpZiAobm93IC0gc3RhcnR0aW1lID49IHdoaXAtPmhhbmRz aGFrZV90aW1lb3V0ICogMTAwMCkgewo+ICsgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9H X0VSUk9SLCAiV0hJUDogRFRMUyBoYW5kc2hha2UgdGltZW91dD0lZG1zLCBjb3N0PSVkbXMsIGVs YXBzZWQ9JWRtcywgc3RhdGU9JWRcbiIsCj4gKyAgICAgICAgICAgICAgICB3aGlwLT5oYW5kc2hh a2VfdGltZW91dCwgRUxBUFNFRChzdGFydHRpbWUsIG5vdyksIEVMQVBTRUQod2hpcC0+d2hpcF9z dGFydHRpbWUsIG5vdyksIHdoaXAtPnN0YXRlKTsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJP UihFVElNRURPVVQpOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICB9Cj4gKwo+ ICsgICAgICAgIC8qIFJlYWQgdGhlIFNUVU4gb3IgRFRMUyBtZXNzYWdlcyBmcm9tIHBlZXIuICov Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IElDRV9EVExTX1JFQURfSU5URVJWQUwgLyA1ICYm IHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFURV9EVExTX0NPTk5FQ1RJTkc7IGkrKykgewo+ICsgICAg ICAgICAgICByZXQgPSBmZnVybF9yZWFkKHdoaXAtPnVkcCwgd2hpcC0+YnVmLCBzaXplb2Yod2hp cC0+YnVmKSk7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgPiAwKQo+ICsgICAgICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUihFQUdBSU4pKSB7Cj4gKyAg ICAgICAgICAgICAgICBhdl91c2xlZXAoNSAqIDEwMDApOwo+ICsgICAgICAgICAgICAgICAgY29u dGludWU7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xP R19FUlJPUiwgIldISVA6IEZhaWxlZCB0byByZWFkIG1lc3NhZ2VcbiIpOwo+ICsgICAgICAgICAg ICBnb3RvIGVuZDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8qIEdvdCBub3RoaW5nLCBj b250aW51ZSB0byBwcm9jZXNzIGhhbmRzaGFrZS4gKi8KPiArICAgICAgICBpZiAocmV0IDw9IDAg JiYgd2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0RUTFNfQ09OTkVDVElORykKPiArICAgICAgICAg ICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgIC8qIEhhbmRsZSB0aGUgSUNFIGJpbmRpbmcgcmVz cG9uc2UuICovCj4gKyAgICAgICAgaWYgKGljZV9pc19iaW5kaW5nX3Jlc3BvbnNlKHdoaXAtPmJ1 ZiwgcmV0KSkgewo+ICsgICAgICAgICAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0lD RV9DT05ORUNURUQpIHsKPiArICAgICAgICAgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFU RV9JQ0VfQ09OTkVDVEVEOwo+ICsgICAgICAgICAgICAgICAgd2hpcC0+d2hpcF9pY2VfdGltZSA9 IGF2X2dldHRpbWUoKTsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVS Qk9TRSwgIldISVA6IElDRSBTVFVOIG9rLCBzdGF0ZT0lZCwgdXJsPXVkcDovLyVzOiVkLCBsb2Nh dGlvbj0lcywgdXNlcm5hbWU9JXM6JXMsIHJlcz0lZEIsIGVsYXBzZWQ9JWRtc1xuIiwKPiArICAg ICAgICAgICAgICAgICAgICB3aGlwLT5zdGF0ZSwgd2hpcC0+aWNlX2hvc3QsIHdoaXAtPmljZV9w b3J0LCB3aGlwLT53aGlwX3Jlc291cmNlX3VybCA/IHdoaXAtPndoaXBfcmVzb3VyY2VfdXJsIDog IiIsCj4gKyAgICAgICAgICAgICAgICAgICAgd2hpcC0+aWNlX3VmcmFnX3JlbW90ZSwgd2hpcC0+ aWNlX3VmcmFnX2xvY2FsLCByZXQsIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2X2dl dHRpbWUoKSkpOwo+ICsKPiArICAgICAgICAgICAgICAgIGZmX3VybF9qb2luKGJ1Ziwgc2l6ZW9m KGJ1ZiksICJkdGxzIiwgTlVMTCwgd2hpcC0+aWNlX2hvc3QsIHdoaXAtPmljZV9wb3J0LCBOVUxM KTsKPiArICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZCIsIHdo aXAtPnBrdF9zaXplKTsKPiArICAgICAgICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAibXR1 Iiwgc3RyLCAwKTsKPiArICAgICAgICAgICAgICAgIGlmICh3aGlwLT5jZXJ0X2ZpbGUpIHsKPiAr ICAgICAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywgImNlcnRfZmlsZSIsIHdoaXAt PmNlcnRfZmlsZSwgMCk7Cj4gKyAgICAgICAgICAgICAgICB9IGVsc2UKPiArICAgICAgICAgICAg ICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywgImNlcnRfYnVmIiwgd2hpcC0+Y2VydF9idWYsIDAp Owo+ICsKPiArICAgICAgICAgICAgICAgIGlmICh3aGlwLT5rZXlfZmlsZSkgewo+ICsgICAgICAg ICAgICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAia2V5X2ZpbGUiLCB3aGlwLT5rZXlfZmls ZSwgMCk7Cj4gKyAgICAgICAgICAgICAgICB9IGVsc2UKPiArICAgICAgICAgICAgICAgICAgICBh dl9kaWN0X3NldCgmb3B0cywgImtleV9idWYiLCB3aGlwLT5rZXlfYnVmLCAwKTsKPiArCj4gKyAg ICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywgImZpbmdlcnByaW50Iiwgd2hpcC0+ZHRs c19maW5nZXJwcmludCwgMCk7Cj4gKyAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywg InVzZV9leHRlcm5hbF91ZHAiLCAiMSIsIDApOwo+ICsgICAgICAgICAgICAgICAgYXZfZGljdF9z ZXQoJm9wdHMsICJsaXN0ZW4iLCAiMSIsIDApOwo+ICsgICAgICAgICAgICAgICAgLyogSWYgZ290 IHRoZSBmaXJzdCBiaW5kaW5nIHJlc3BvbnNlLCBzdGFydCBEVExTIGhhbmRzaGFrZS4gKi8KPiAr ICAgICAgICAgICAgICAgIHJldCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0KCZ3aGlwLT5kdGxzX3Vj LCBidWYsIEFWSU9fRkxBR19SRUFEX1dSSVRFLCAmcy0+aW50ZXJydXB0X2NhbGxiYWNrLAo+ICsg ICAgICAgICAgICAgICAgICAgICZvcHRzLCBzLT5wcm90b2NvbF93aGl0ZWxpc3QsIHMtPnByb3Rv Y29sX2JsYWNrbGlzdCwgTlVMTCk7Cj4gKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiAr ICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICAgICAgICAgIGR0bHNfaW5p dGlhbGl6ZShzKTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBnb3RvIG5leHRfcGFj a2V0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyogV2hlbiBhIGJpbmRpbmcgcmVxdWVz dCBpcyByZWNlaXZlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlc3BvbmQgaW1tZWRpYXRlbHkuICov Cj4gKyAgICAgICAgaWYgKGljZV9pc19iaW5kaW5nX3JlcXVlc3Qod2hpcC0+YnVmLCByZXQpKSB7 Cj4gKyAgICAgICAgICAgIGlmICgocmV0ID0gaWNlX2hhbmRsZV9iaW5kaW5nX3JlcXVlc3Qocywg d2hpcC0+YnVmLCByZXQpKSA8IDApCj4gKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAg ICAgICAgICAgZ290byBuZXh0X3BhY2tldDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8q IElmIGdvdCBhbnkgRFRMUyBtZXNzYWdlcywgaGFuZGxlIGl0LiAqLwo+ICsgICAgICAgIGlmIChp c19kdGxzX3BhY2tldCh3aGlwLT5idWYsIHJldCkgJiYgd2hpcC0+c3RhdGUgPj0gV0hJUF9TVEFU RV9JQ0VfQ09OTkVDVEVEIHx8IHdoaXAtPnN0YXRlID09IFdISVBfU1RBVEVfRFRMU19DT05ORUNU SU5HKSB7Cj4gKyAgICAgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9EVExTX0NPTk5F Q1RJTkc7Cj4gKyAgICAgICAgICAgIGlmICgocmV0ID0gZmZ1cmxfaGFuZHNoYWtlKHdoaXAtPmR0 bHNfdWMpKSA8IDApCj4gKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICAgICAg ZHRsc19jb250ZXh0X29uX3N0YXRlKHMsIE5VTEwsIE5VTEwpOwo+ICsgICAgICAgICAgICBnb3Rv IG5leHRfcGFja2V0Owo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gK2VuZDoKPiArICAgIGlm IChjZXJ0X2J1ZikKPiArICAgICAgICBhdl9mcmVlKGNlcnRfYnVmKTsKPiArICAgIGlmIChrZXlf YnVmKQo+ICsgICAgICAgIGF2X2ZyZWUoa2V5X2J1Zik7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICsvKioKPiArICogRXN0YWJsaXNoIHRoZSBTUlRQIGNvbnRleHQgdXNpbmcgdGhlIGtl eWluZyBtYXRlcmlhbCBleHBvcnRlZCBmcm9tIERUTFMuCj4gKyAqCj4gKyAqIENyZWF0ZSBzZXBh cmF0ZSBTUlRQIGNvbnRleHRzIGZvciBzZW5kaW5nIHZpZGVvIGFuZCBhdWRpbywgYXMgdGhlaXIg c2VxdWVuY2VzIGRpZmZlcgo+ICsgKiBhbmQgc2hvdWxkIG5vdCBzaGFyZSBhIHNpbmdsZSBjb250 ZXh0LiBHZW5lcmF0ZSBhIHNpbmdsZSBTUlRQIGNvbnRleHQgZm9yIHJlY2VpdmluZwo+ICsgKiBS VENQIG9ubHkuCj4gKyAqCj4gKyAqIEByZXR1cm4gMCBpZiBPSywgQVZFUlJPUl94eHggb24gZXJy b3IKPiArICovCj4gK3N0YXRpYyBpbnQgc2V0dXBfc3J0cChBVkZvcm1hdENvbnRleHQgKnMpCj4g K3sKPiArICAgIGludCByZXQ7Cj4gKyAgICBjaGFyIHJlY3Zfa2V5W0RUTFNfU1JUUF9LRVlfTEVO ICsgRFRMU19TUlRQX1NBTFRfTEVOXTsKPiArICAgIGNoYXIgc2VuZF9rZXlbRFRMU19TUlRQX0tF WV9MRU4gKyBEVExTX1NSVFBfU0FMVF9MRU5dOwo+ICsgICAgY2hhciBidWZbQVZfQkFTRTY0X1NJ WkUoRFRMU19TUlRQX0tFWV9MRU4gKyBEVExTX1NSVFBfU0FMVF9MRU4pXTsKPiArICAgIC8qKgo+ ICsgICAgICogVGhlIHByb2ZpbGUgZm9yIE9wZW5TU0wncyBTUlRQIGlzIFNSVFBfQUVTMTI4X0NN X1NIQTFfODAsIHNlZSBzc2wvZDFfc3J0cC5jLgo+ICsgICAgICogVGhlIHByb2ZpbGUgZm9yIEZG bXBlZydzIFNSVFAgaXMgU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwLCBzZWUgbGliYXZmb3Jt YXQvc3J0cC5jLgo+ICsgICAgICovCj4gKyAgICBjb25zdCBjaGFyKiBzdWl0ZSA9ICJTUlRQX0FF UzEyOF9DTV9ITUFDX1NIQTFfODAiOwo+ICsgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2 X2RhdGE7Cj4gKyAgICByZXQgPSBmZl9kdGxzX2V4cG9ydF9tYXRlcmlhbHMod2hpcC0+ZHRsc191 Yywgd2hpcC0+ZHRsc19zcnRwX21hdGVyaWFscywgc2l6ZW9mKHdoaXAtPmR0bHNfc3J0cF9tYXRl cmlhbHMpKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAg LyoqCj4gKyAgICAgKiBUaGlzIHJlcHJlc2VudHMgdGhlIG1hdGVyaWFsIHVzZWQgdG8gYnVpbGQg dGhlIFNSVFAgbWFzdGVyIGtleS4gSXQgaXMKPiArICAgICAqIGdlbmVyYXRlZCBieSBEVExTIGFu ZCBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6Cj4gKyAgICAgKiAgICAgICAgICAxNkIgICAgICAg ICAxNkIgICAgICAgICAxNEIgICAgICAgICAgICAgMTRCCj4gKyAgICAgKiAgICAgIGNsaWVudF9r ZXkgfCBzZXJ2ZXJfa2V5IHwgY2xpZW50X3NhbHQgfCBzZXJ2ZXJfc2FsdAo+ICsgICAgICovCj4g KyAgICBjaGFyICpjbGllbnRfa2V5ID0gd2hpcC0+ZHRsc19zcnRwX21hdGVyaWFsczsKPiArICAg IGNoYXIgKnNlcnZlcl9rZXkgPSB3aGlwLT5kdGxzX3NydHBfbWF0ZXJpYWxzICsgRFRMU19TUlRQ X0tFWV9MRU47Cj4gKyAgICBjaGFyICpjbGllbnRfc2FsdCA9IHNlcnZlcl9rZXkgKyBEVExTX1NS VFBfS0VZX0xFTjsKPiArICAgIGNoYXIgKnNlcnZlcl9zYWx0ID0gY2xpZW50X3NhbHQgKyBEVExT X1NSVFBfU0FMVF9MRU47Cj4gKwo+ICsgICAgLyogQXMgRFRMUyBzZXJ2ZXIsIHRoZSByZWN2IGtl eSBpcyBjbGllbnQgbWFzdGVyIGtleSBwbHVzIHNhbHQuICovCj4gKyAgICBtZW1jcHkocmVjdl9r ZXksIGNsaWVudF9rZXksIERUTFNfU1JUUF9LRVlfTEVOKTsKPiArICAgIG1lbWNweShyZWN2X2tl eSArIERUTFNfU1JUUF9LRVlfTEVOLCBjbGllbnRfc2FsdCwgRFRMU19TUlRQX1NBTFRfTEVOKTsK PiArCj4gKyAgICAvKiBBcyBEVExTIHNlcnZlciwgdGhlIHNlbmQga2V5IGlzIHNlcnZlciBtYXN0 ZXIga2V5IHBsdXMgc2FsdC4gKi8KPiArICAgIG1lbWNweShzZW5kX2tleSwgc2VydmVyX2tleSwg RFRMU19TUlRQX0tFWV9MRU4pOwo+ICsgICAgbWVtY3B5KHNlbmRfa2V5ICsgRFRMU19TUlRQX0tF WV9MRU4sIHNlcnZlcl9zYWx0LCBEVExTX1NSVFBfU0FMVF9MRU4pOwo+ICsKPiArICAgIC8qIFNl dHVwIFNSVFAgY29udGV4dCBmb3Igb3V0Z29pbmcgcGFja2V0cyAqLwo+ICsgICAgaWYgKCFhdl9i YXNlNjRfZW5jb2RlKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlbmRfa2V5LCBzaXplb2Yoc2VuZF9rZXkp KSkgewo+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQg dG8gZW5jb2RlIHNlbmQga2V5XG4iKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4g KyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZfc3J0cF9zZXRf Y3J5cHRvKCZ3aGlwLT5zcnRwX2F1ZGlvX3NlbmQsIHN1aXRlLCBidWYpOwo+ICsgICAgaWYgKHJl dCA8IDApIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFp bGVkIHRvIHNldCBjcnlwdG8gZm9yIGF1ZGlvIHNlbmRcbiIpOwo+ICsgICAgICAgIGdvdG8gZW5k Owo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IGZmX3NydHBfc2V0X2NyeXB0bygmd2hpcC0+c3J0 cF92aWRlb19zZW5kLCBzdWl0ZSwgYnVmKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAg ICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBzZXQgY3J5cHRv IGZvciB2aWRlbyBzZW5kXG4iKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4g KyAgICByZXQgPSBmZl9zcnRwX3NldF9jcnlwdG8oJndoaXAtPnNydHBfcnRjcF9zZW5kLCBzdWl0 ZSwgYnVmKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBzZXQgY3J5cHRvIGZvciBydGNwIHNlbmRcbiIpOwo+ICsg ICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIFNldHVwIFNSVFAgY29udGV4 dCBmb3IgaW5jb21pbmcgcGFja2V0cyAqLwo+ICsgICAgaWYgKCFhdl9iYXNlNjRfZW5jb2RlKGJ1 Ziwgc2l6ZW9mKGJ1ZiksIHJlY3Zfa2V5LCBzaXplb2YocmVjdl9rZXkpKSkgewo+ICsgICAgICAg IGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gZW5jb2RlIHJlY3Yg a2V5XG4iKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4gKyAgICAgICAgZ290byBl bmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZfc3J0cF9zZXRfY3J5cHRvKCZ3aGlwLT5z cnRwX3JlY3YsIHN1aXRlLCBidWYpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBh dl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHNldCBjcnlwdG8gZm9y IHJlY3ZcbiIpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICh3 aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfU1JUUF9GSU5JU0hFRCkKPiArICAgICAgICB3aGlwLT5z dGF0ZSA9IFdISVBfU1RBVEVfU1JUUF9GSU5JU0hFRDsKPiArICAgIHdoaXAtPndoaXBfc3J0cF90 aW1lID0gYXZfZ2V0dGltZSgpOwo+ICsgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19WRVJCT1NFLCAi V0hJUDogU1JUUCBzZXR1cCBkb25lLCBzdGF0ZT0lZCwgc3VpdGU9JXMsIGtleT0lbHVCLCBlbGFw c2VkPSVkbXNcbiIsCj4gKyAgICAgICAgd2hpcC0+c3RhdGUsIHN1aXRlLCBzaXplb2Yoc2VuZF9r ZXkpLCBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKPiArCj4g K2VuZDoKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBDYWxsYmFjayB0 cmlnZ2VyZWQgYnkgdGhlIFJUUCBtdXhlciB3aGVuIGl0IGNyZWF0ZXMgYW5kIHNlbmRzIG91dCBh biBSVFAgcGFja2V0Lgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSB2aWRl byBTVEFQIHBhY2tldCwgcmVtb3ZpbmcgdGhlIG1hcmtlcnMsIGFuZCB1cGRhdGluZyB0aGUKPiAr ICogTlJJIG9mIHRoZSBmaXJzdCBOQUxVLiBBZGRpdGlvbmFsbHksIGl0IHVzZXMgdGhlIGNvcnJl c3BvbmRpbmcgU1JUUCBjb250ZXh0IHRvIGVuY3J5cHQKPiArICogdGhlIFJUUCBwYWNrZXQsIHdo ZXJlIHRoZSB2aWRlbyBwYWNrZXQgaXMgaGFuZGxlZCBieSB0aGUgdmlkZW8gU1JUUCBjb250ZXh0 Lgo+ICsgKi8KPiArc3RhdGljIGludCBvbl9ydHBfd3JpdGVfcGFja2V0KHZvaWQgKm9wYXF1ZSwg Y29uc3QgdWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUpCj4gK3sKPiArICAgIGludCByZXQsIGNp cGhlcl9zaXplLCBpc19ydGNwLCBpc192aWRlbzsKPiArICAgIHVpbnQ4X3QgcGF5bG9hZF90eXBl Owo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpzID0gb3BhcXVlOwo+ICsgICAgV0hJUENvbnRleHQg KndoaXAgPSBzLT5wcml2X2RhdGE7Cj4gKyAgICBTUlRQQ29udGV4dCAqc3J0cDsKPiArCj4gKyAg ICAvKiBJZ25vcmUgaWYgbm90IFJUUCBvciBSVENQIHBhY2tldC4gKi8KPiArICAgIGlmICghbWVk aWFfaXNfcnRwX3J0Y3AoYnVmLCBidWZfc2l6ZSkpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ ICsgICAgLyogT25seSBzdXBwb3J0IGF1ZGlvLCB2aWRlbyBhbmQgcnRjcC4gKi8KPiArICAgIGlz X3J0Y3AgPSBtZWRpYV9pc19ydGNwKGJ1ZiwgYnVmX3NpemUpOwo+ICsgICAgcGF5bG9hZF90eXBl ID0gYnVmWzFdICYgMHg3ZjsKPiArICAgIGlzX3ZpZGVvID0gcGF5bG9hZF90eXBlID09IHdoaXAt PnZpZGVvX3BheWxvYWRfdHlwZTsKPiArICAgIGlmICghaXNfcnRjcCAmJiBwYXlsb2FkX3R5cGUg IT0gd2hpcC0+dmlkZW9fcGF5bG9hZF90eXBlICYmIHBheWxvYWRfdHlwZSAhPSB3aGlwLT5hdWRp b19wYXlsb2FkX3R5cGUpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgLyogR2V0IHRo ZSBjb3JyZXNwb25kaW5nIFNSVFAgY29udGV4dC4gKi8KPiArICAgIHNydHAgPSBpc19ydGNwID8g JndoaXAtPnNydHBfcnRjcF9zZW5kIDogKGlzX3ZpZGVvPyAmd2hpcC0+c3J0cF92aWRlb19zZW5k IDogJndoaXAtPnNydHBfYXVkaW9fc2VuZCk7Cj4gKwo+ICsgICAgLyogRW5jcnlwdCBieSBTUlRQ IGFuZCBzZW5kIG91dC4gKi8KPiArICAgIGNpcGhlcl9zaXplID0gZmZfc3J0cF9lbmNyeXB0KHNy dHAsIGJ1ZiwgYnVmX3NpemUsIHdoaXAtPmJ1Ziwgc2l6ZW9mKHdoaXAtPmJ1ZikpOwo+ICsgICAg aWYgKGNpcGhlcl9zaXplIDw9IDAgfHwgY2lwaGVyX3NpemUgPCBidWZfc2l6ZSkgewo+ICsgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IEZhaWxlZCB0byBlbmNyeXB0 IHBhY2tldD0lZEIsIGNpcGhlcj0lZEJcbiIsIGJ1Zl9zaXplLCBjaXBoZXJfc2l6ZSk7Cj4gKyAg ICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZ1cmxfd3JpdGUod2hp cC0+dWRwLCB3aGlwLT5idWYsIGNpcGhlcl9zaXplKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4g KyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byB3cml0 ZSBwYWNrZXQ9JWRCLCByZXQ9JWRcbiIsIGNpcGhlcl9zaXplLCByZXQpOwo+ICsgICAgICAgIHJl dHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIENyZWF0ZXMgZGVkaWNhdGVkIFJUUCBtdXhlcnMgZm9yIGVhY2ggc3RyZWFtIGluIHRo ZSBBVkZvcm1hdENvbnRleHQgdG8gYnVpbGQgUlRQCj4gKyAqIHBhY2tldHMgZnJvbSB0aGUgZW5j b2RlZCBmcmFtZXMuCj4gKyAqCj4gKyAqIFRoZSBjb3JyZXNwb25kaW5nIFNSVFAgY29udGV4dCBp cyB1dGlsaXplZCB0byBlbmNyeXB0IGVhY2ggc3RyZWFtJ3MgUlRQIHBhY2tldHMuIEZvcgo+ICsg KiBleGFtcGxlLCBhIHZpZGVvIFNSVFAgY29udGV4dCBpcyB1c2VkIGZvciB0aGUgdmlkZW8gc3Ry ZWFtLiBBZGRpdGlvbmFsbHksIHRoZQo+ICsgKiAib25fcnRwX3dyaXRlX3BhY2tldCIgY2FsbGJh Y2sgZnVuY3Rpb24gaXMgc2V0IGFzIHRoZSB3cml0ZSBmdW5jdGlvbiBmb3IgZWFjaCBSVFAKPiAr ICogbXV4ZXIgdG8gc2VuZCBvdXQgZW5jcnlwdGVkIFJUUCBwYWNrZXRzLgo+ICsgKgo+ICsgKiBA cmV0dXJuIDAgaWYgT0ssIEFWRVJST1JfeHh4IG9uIGVycm9yCj4gKyAqLwo+ICtzdGF0aWMgaW50 IGNyZWF0ZV9ydHBfbXV4ZXIoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQgcmV0 LCBpLCBpc192aWRlbywgYnVmZmVyX3NpemUsIG1heF9wYWNrZXRfc2l6ZTsKPiArICAgIEFWRm9y bWF0Q29udGV4dCAqcnRwX2N0eCA9IE5VTEw7Cj4gKyAgICBBVkRpY3Rpb25hcnkgKm9wdHMgPSBO VUxMOwo+ICsgICAgdWludDhfdCAqYnVmZmVyID0gTlVMTDsKPiArICAgIGNoYXIgYnVmWzY0XTsK PiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGNvbnN0 IEFWT3V0cHV0Rm9ybWF0ICpydHBfZm9ybWF0ID0gYXZfZ3Vlc3NfZm9ybWF0KCJydHAiLCBOVUxM LCBOVUxMKTsKPiArICAgIGlmICghcnRwX2Zvcm1hdCkgewo+ICsgICAgICAgIGF2X2xvZyh3aGlw LCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gZ3Vlc3MgcnRwIG11eGVyXG4iKTsKPiAr ICAgICAgICByZXQgPSBBVkVSUk9SKEVOT1NZUyk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgLyogVGhlIFVEUCBidWZmZXIgc2l6ZSwgbWF5IGdyZWF0ZXIgdGhhbiBN VFUuICovCj4gKyAgICBidWZmZXJfc2l6ZSA9IE1BWF9VRFBfQlVGRkVSX1NJWkU7Cj4gKyAgICAv KiBUaGUgUlRQIHBheWxvYWQgbWF4IHNpemUuIFJlc2VydmVkIHNvbWUgYnl0ZXMgZm9yIFNSVFAg Y2hlY2tzdW0gYW5kIHBhZGRpbmcuICovCj4gKyAgICBtYXhfcGFja2V0X3NpemUgPSB3aGlwLT5w a3Rfc2l6ZSAtIERUTFNfU1JUUF9DSEVDS1NVTV9MRU47Cj4gKwo+ICsgICAgZm9yIChpID0gMDsg aSA8IHMtPm5iX3N0cmVhbXM7IGkrKykgewo+ICsgICAgICAgIHJ0cF9jdHggPSBhdmZvcm1hdF9h bGxvY19jb250ZXh0KCk7Cj4gKyAgICAgICAgaWYgKCFydHBfY3R4KSB7Cj4gKyAgICAgICAgICAg IHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAg ICAgfQo+ICsKPiArICAgICAgICBydHBfY3R4LT5vZm9ybWF0ID0gcnRwX2Zvcm1hdDsKPiArICAg ICAgICBpZiAoIWF2Zm9ybWF0X25ld19zdHJlYW0ocnRwX2N0eCwgTlVMTCkpIHsKPiArICAgICAg ICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgLyogUGFzcyB0aGUgaW50ZXJydXB0IGNhbGxiYWNrIG9uICov Cj4gKyAgICAgICAgcnRwX2N0eC0+aW50ZXJydXB0X2NhbGxiYWNrID0gcy0+aW50ZXJydXB0X2Nh bGxiYWNrOwo+ICsgICAgICAgIC8qIENvcHkgdGhlIG1heCBkZWxheSBzZXR0aW5nOyB0aGUgcnRw IG11eGVyIHJlYWRzIHRoaXMuICovCj4gKyAgICAgICAgcnRwX2N0eC0+bWF4X2RlbGF5ID0gcy0+ bWF4X2RlbGF5Owo+ICsgICAgICAgIC8qIENvcHkgb3RoZXIgc3RyZWFtIHBhcmFtZXRlcnMuICov Cj4gKyAgICAgICAgcnRwX2N0eC0+c3RyZWFtc1swXS0+c2FtcGxlX2FzcGVjdF9yYXRpbyA9IHMt PnN0cmVhbXNbaV0tPnNhbXBsZV9hc3BlY3RfcmF0aW87Cj4gKyAgICAgICAgcnRwX2N0eC0+Zmxh Z3MgfD0gcy0+ZmxhZ3MgJiBBVkZNVF9GTEFHX0JJVEVYQUNUOwo+ICsgICAgICAgIHJ0cF9jdHgt PnN0cmljdF9zdGRfY29tcGxpYW5jZSA9IHMtPnN0cmljdF9zdGRfY29tcGxpYW5jZTsKPiArCj4g KyAgICAgICAgLyogU2V0IHRoZSBzeW5jaHJvbml6ZWQgc3RhcnQgdGltZS4gKi8KPiArICAgICAg ICBydHBfY3R4LT5zdGFydF90aW1lX3JlYWx0aW1lID0gcy0+c3RhcnRfdGltZV9yZWFsdGltZTsK PiArCj4gKyAgICAgICAgYXZjb2RlY19wYXJhbWV0ZXJzX2NvcHkocnRwX2N0eC0+c3RyZWFtc1sw XS0+Y29kZWNwYXIsIHMtPnN0cmVhbXNbaV0tPmNvZGVjcGFyKTsKPiArICAgICAgICBydHBfY3R4 LT5zdHJlYW1zWzBdLT50aW1lX2Jhc2UgPSBzLT5zdHJlYW1zW2ldLT50aW1lX2Jhc2U7Cj4gKwo+ ICsgICAgICAgIC8qKgo+ICsgICAgICAgICAqIEZvciBILjI2NCwgY29uc2lzdGVudGx5IHV0aWxp emUgdGhlIGFubmV4YiBmb3JtYXQgdGhyb3VnaCB0aGUgQml0c3RyZWFtIEZpbHRlciAoQlNGKTsK PiArICAgICAgICAgKiB0aGVyZWZvcmUsIHdlIGRlYWN0aXZhdGUgdGhlIGV4dHJhZGF0YSBkZXRl Y3Rpb24gZm9yIHRoZSBSVFAgbXV4ZXIuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKHMt PnN0cmVhbXNbaV0tPmNvZGVjcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0KSB7Cj4g KyAgICAgICAgICAgIGF2X2ZyZWVwKCZydHBfY3R4LT5zdHJlYW1zW2ldLT5jb2RlY3Bhci0+ZXh0 cmFkYXRhKTsKPiArICAgICAgICAgICAgcnRwX2N0eC0+c3RyZWFtc1tpXS0+Y29kZWNwYXItPmV4 dHJhZGF0YV9zaXplID0gMDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGJ1ZmZlciA9IGF2 X21hbGxvYyhidWZmZXJfc2l6ZSk7Cj4gKyAgICAgICAgaWYgKCFidWZmZXIpIHsKPiArICAgICAg ICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJ0cF9jdHgtPnBiID0gYXZpb19hbGxvY19jb250ZXh0 KGJ1ZmZlciwgYnVmZmVyX3NpemUsIDEsIHMsIE5VTEwsIG9uX3J0cF93cml0ZV9wYWNrZXQsIE5V TEwpOwo+ICsgICAgICAgIGlmICghcnRwX2N0eC0+cGIpIHsKPiArICAgICAgICAgICAgcmV0ID0g QVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICB9Cj4g KyAgICAgICAgcnRwX2N0eC0+cGItPm1heF9wYWNrZXRfc2l6ZSA9IG1heF9wYWNrZXRfc2l6ZTsK PiArICAgICAgICBydHBfY3R4LT5wYi0+YXZfY2xhc3MgPSAmZmZfYXZpb19jbGFzczsKPiArCj4g KyAgICAgICAgaXNfdmlkZW8gPSBzLT5zdHJlYW1zW2ldLT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9 PSBBVk1FRElBX1RZUEVfVklERU87Cj4gKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVm KSwgIiVkIiwgaXNfdmlkZW8/IHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZSA6IHdoaXAtPmF1ZGlv X3BheWxvYWRfdHlwZSk7Cj4gKyAgICAgICAgYXZfZGljdF9zZXQoJm9wdHMsICJwYXlsb2FkX3R5 cGUiLCBidWYsIDApOwo+ICsgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIs IGlzX3ZpZGVvPyB3aGlwLT52aWRlb19zc3JjIDogd2hpcC0+YXVkaW9fc3NyYyk7Cj4gKyAgICAg ICAgYXZfZGljdF9zZXQoJm9wdHMsICJzc3JjIiwgYnVmLCAwKTsKPiArCj4gKyAgICAgICAgcmV0 ID0gYXZmb3JtYXRfd3JpdGVfaGVhZGVyKHJ0cF9jdHgsICZvcHRzKTsKPiArICAgICAgICBpZiAo cmV0IDwgMCkgewo+ICsgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJ UDogRmFpbGVkIHRvIHdyaXRlIHJ0cCBoZWFkZXJcbiIpOwo+ICsgICAgICAgICAgICBnb3RvIGVu ZDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGZmX2Zvcm1hdF9zZXRfdXJsKHJ0cF9jdHgs IGF2X3N0cmR1cChzLT51cmwpKTsKPiArICAgICAgICBzLT5zdHJlYW1zW2ldLT50aW1lX2Jhc2Ug PSBydHBfY3R4LT5zdHJlYW1zWzBdLT50aW1lX2Jhc2U7Cj4gKyAgICAgICAgcy0+c3RyZWFtc1tp XS0+cHJpdl9kYXRhID0gcnRwX2N0eDsKPiArICAgICAgICBydHBfY3R4ID0gTlVMTDsKPiArICAg IH0KPiArCj4gKyAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX1JFQURZKQo+ICsgICAg ICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9SRUFEWTsKPiArICAgIGF2X2xvZyh3aGlwLCBB Vl9MT0dfSU5GTywgIldISVA6IE11eGVyIHN0YXRlPSVkLCBidWZmZXJfc2l6ZT0lZCwgbWF4X3Bh Y2tldF9zaXplPSVkLCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkPSVk bXMoaW5pdDolZCxvZmZlcjolZCxhbnN3ZXI6JWQsdWRwOiVkLGljZTolZCxkdGxzOiVkLHNydHA6 JWQpXG4iLAo+ICsgICAgICAgIHdoaXAtPnN0YXRlLCBidWZmZXJfc2l6ZSwgbWF4X3BhY2tldF9z aXplLCBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpLAo+ICsgICAg ICAgIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsICAgd2hpcC0+d2hpcF9pbml0X3RpbWUp LAo+ICsgICAgICAgIEVMQVBTRUQod2hpcC0+d2hpcF9pbml0X3RpbWUsICAgd2hpcC0+d2hpcF9v ZmZlcl90aW1lKSwKPiArICAgICAgICBFTEFQU0VEKHdoaXAtPndoaXBfb2ZmZXJfdGltZSwgIHdo aXAtPndoaXBfYW5zd2VyX3RpbWUpLAo+ICsgICAgICAgIEVMQVBTRUQod2hpcC0+d2hpcF9hbnN3 ZXJfdGltZSwgd2hpcC0+d2hpcF91ZHBfdGltZSksCj4gKyAgICAgICAgRUxBUFNFRCh3aGlwLT53 aGlwX3VkcF90aW1lLCAgICB3aGlwLT53aGlwX2ljZV90aW1lKSwKPiArICAgICAgICBFTEFQU0VE KHdoaXAtPndoaXBfaWNlX3RpbWUsICAgIHdoaXAtPndoaXBfZHRsc190aW1lKSwKPiArICAgICAg ICBFTEFQU0VEKHdoaXAtPndoaXBfZHRsc190aW1lLCAgIHdoaXAtPndoaXBfc3J0cF90aW1lKSk7 Cj4gKwo+ICtlbmQ6Cj4gKyAgICBpZiAocnRwX2N0eCkKPiArICAgICAgICBhdmlvX2NvbnRleHRf ZnJlZSgmcnRwX2N0eC0+cGIpOwo+ICsgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHJ0cF9jdHgp Owo+ICsgICAgYXZfZGljdF9mcmVlKCZvcHRzKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBSVEMgaXMgY29ubmVjdGlvbmxlc3MsIGZvciBpdCdzIGJhc2VkIG9uIFVE UCwgc28gaXQgY2hlY2sgd2hldGhlciBzZXNpc29uIGlzCj4gKyAqIHRpbWVvdXQuIEluIHN1Y2gg Y2FzZSwgcHVibGlzaGVycyBjYW4ndCByZXB1Ymxpc2ggdGhlIHN0cmVhbSB1dGlsIHRoZSBzZXNz aW9uCj4gKyAqIGlzIHRpbWVvdXQuCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIG5v dGlmeSB0aGUgc2VydmVyIHRoYXQgdGhlIHN0cmVhbSBpcyBlbmRlZCwgc2VydmVyCj4gKyAqIHNo b3VsZCBleHBpcmUgYW5kIGNsb3NlIHRoZSBzZXNzaW9uIGltbWVkaWF0ZWx5LCBzbyB0aGF0IHB1 Ymxpc2hlcnMgY2FuIHJlcHVibGlzaAo+ICsgKiB0aGUgc3RyZWFtIHF1aWNrbHkuCj4gKyAqLwo+ ICtzdGF0aWMgaW50IGRpc3Bvc2Vfc2Vzc2lvbihBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiAr ICAgIGludCByZXQ7Cj4gKyAgICBjaGFyIGJ1ZltNQVhfVVJMX1NJWkVdOwo+ICsgICAgVVJMQ29u dGV4dCAqd2hpcF91YyA9IE5VTEw7Cj4gKyAgICBBVkRpY3Rpb25hcnkgKm9wdHMgPSBOVUxMOwo+ ICsgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaWYgKCF3 aGlwLT53aGlwX3Jlc291cmNlX3VybCkKPiArICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICBy ZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVc clxuIik7Cj4gKyAgICBpZiAod2hpcC0+YXV0aG9yaXphdGlvbikKPiArICAgICAgICByZXQgKz0g c25wcmludGYoYnVmICsgcmV0LCBzaXplb2YoYnVmKSAtIHJldCwgIkF1dGhvcml6YXRpb246IEJl YXJlciAlc1xyXG4iLCB3aGlwLT5hdXRob3JpemF0aW9uKTsKPiArICAgIGlmIChyZXQgPD0gMCB8 fCByZXQgPj0gc2l6ZW9mKGJ1ZikpIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VS Uk9SLCAiV0hJUDogRmFpbGVkIHRvIGdlbmVyYXRlIGhlYWRlcnMsIHNpemU9JWQsICVzXG4iLCBy ZXQsIGJ1Zik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIGdv dG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAiaGVhZGVycyIs IGJ1ZiwgMCk7Cj4gKyAgICBhdl9kaWN0X3NldF9pbnQoJm9wdHMsICJjaHVua2VkX3Bvc3QiLCAw LCAwKTsKPiArICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAibWV0aG9kIiwgIkRFTEVURSIsIDApOwo+ ICsgICAgcmV0ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoJndoaXBfdWMsIHdoaXAtPndoaXBfcmVz b3VyY2VfdXJsLCBBVklPX0ZMQUdfUkVBRF9XUklURSwgJnMtPmludGVycnVwdF9jYWxsYmFjaywK PiArICAgICAgICAmb3B0cywgcy0+cHJvdG9jb2xfd2hpdGVsaXN0LCBzLT5wcm90b2NvbF9ibGFj a2xpc3QsIE5VTEwpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIERFTEVURSB1cmw9JXNcbiIsIHdoaXAt PndoaXBfcmVzb3VyY2VfdXJsKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4g KyAgICB3aGlsZSAoMSkgewo+ICsgICAgICAgIHJldCA9IGZmdXJsX3JlYWQod2hpcF91YywgYnVm LCBzaXplb2YoYnVmKSk7Cj4gKyAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SX0VPRikgewo+ICsg ICAgICAgICAgICByZXQgPSAwOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4g KyAgICAgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xP R19FUlJPUiwgIldISVA6IEZhaWxlZCB0byByZWFkIHJlc3BvbnNlIGZyb20gREVMRVRFIHVybD0l c1xuIiwgd2hpcC0+d2hpcF9yZXNvdXJjZV91cmwpOwo+ICsgICAgICAgICAgICBnb3RvIGVuZDsK PiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19JTkZP LCAiV0hJUDogRGlzcG9zZSByZXNvdXJjZSAlcyBva1xuIiwgd2hpcC0+d2hpcF9yZXNvdXJjZV91 cmwpOwo+ICsKPiArZW5kOgo+ICsgICAgZmZ1cmxfY2xvc2VwKCZ3aGlwX3VjKTsKPiArICAgIGF2 X2RpY3RfZnJlZSgmb3B0cyk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiAr ICogU2luY2UgdGhlIGgyNjRfbXA0dG9hbm5leGIgZmlsdGVyIG9ubHkgcHJvY2Vzc2VzIHRoZSBN UDQgSVNPTSBmb3JtYXQgYW5kIGJ5cGFzc2VzCj4gKyAqIHRoZSBhbm5leGIgZm9ybWF0LCBpdCBp cyBuZWNlc3NhcnkgdG8gbWFudWFsbHkgaW5zZXJ0IGVuY29kZXIgbWV0YWRhdGEgYmVmb3JlIGVh Y2gKPiArICogSURSIHdoZW4gZGVhbGluZyB3aXRoIGFubmV4YiBmb3JtYXQgcGFja2V0cy4gRm9y IGluc3RhbmNlLCBpbiB0aGUgY2FzZSBvZiBILjI2NCwKPiArICogd2UgbXVzdCBpbnNlcnQgU1BT IGFuZCBQUFMgYmVmb3JlIHRoZSBJRFIgZnJhbWUuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGgyNjRf YW5uZXhiX2luc2VydF9zcHNfcHBzKEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkK PiArewo+ICsgICAgaW50IHJldCA9IDA7Cj4gKyAgICBBVlBhY2tldCAqaW4gPSBOVUxMOwo+ICsg ICAgQVZDb2RlY1BhcmFtZXRlcnMgKnBhciA9IHMtPnN0cmVhbXNbcGt0LT5zdHJlYW1faW5kZXhd LT5jb2RlY3BhcjsKPiArICAgIHVpbnQzMl90IG5hbF9zaXplID0gMCwgb3V0X3NpemUgPSBwYXIg PyBwYXItPmV4dHJhZGF0YV9zaXplIDogMDsKPiArICAgIHVpbnQ4X3QgdW5pdF90eXBlLCBzcHNf c2VlbiA9IDAsIHBwc19zZWVuID0gMCwgaWRyX3NlZW4gPSAwLCAqb3V0Owo+ICsgICAgY29uc3Qg dWludDhfdCAqYnVmLCAqYnVmX2VuZCwgKnIxOwo+ICsKPiArICAgIGlmICghcGt0IHx8ICFwa3Qt PmRhdGEgfHwgcGt0LT5zaXplIDw9IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIGlm ICghcGFyIHx8ICFwYXItPmV4dHJhZGF0YSB8fCBwYXItPmV4dHJhZGF0YV9zaXplIDw9IDApCj4g KyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAvKiBEaXNjb3ZlciBOQUxVIHR5cGUgZnJv bSBwYWNrZXQuICovCj4gKyAgICBidWZfZW5kICA9IHBrdC0+ZGF0YSArIHBrdC0+c2l6ZTsKPiAr ICAgIGZvciAoYnVmID0gZmZfbmFsX2ZpbmRfc3RhcnRjb2RlKHBrdC0+ZGF0YSwgYnVmX2VuZCk7 IGJ1ZiA8IGJ1Zl9lbmQ7IGJ1ZiArPSBuYWxfc2l6ZSkgewo+ICsgICAgICAgIHdoaWxlICghKihi dWYrKykpOwo+ICsgICAgICAgIHIxID0gZmZfbmFsX2ZpbmRfc3RhcnRjb2RlKGJ1ZiwgYnVmX2Vu ZCk7Cj4gKyAgICAgICAgaWYgKChuYWxfc2l6ZSA9IHIxIC0gYnVmKSA+IDApIHsKPiArICAgICAg ICAgICAgdW5pdF90eXBlID0gKmJ1ZiAmIDB4MWY7Cj4gKyAgICAgICAgICAgIGlmICh1bml0X3R5 cGUgPT0gSDI2NF9OQUxfU1BTKSB7Cj4gKyAgICAgICAgICAgICAgICBzcHNfc2VlbiA9IDE7Cj4g KyAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdF90eXBlID09IEgyNjRfTkFMX1BQUykgewo+ICsg ICAgICAgICAgICAgICAgcHBzX3NlZW4gPSAxOwo+ICsgICAgICAgICAgICB9IGVsc2UgaWYgKHVu aXRfdHlwZSA9PSBIMjY0X05BTF9JRFJfU0xJQ0UpIHsKPiArICAgICAgICAgICAgICAgIGlkcl9z ZWVuID0gMTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgb3V0X3NpemUgKz0g MyArIG5hbF9zaXplOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBpZiAoIWlkcl9z ZWVuIHx8IChzcHNfc2VlbiAmJiBwcHNfc2VlbikpCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiAr Cj4gKyAgICAvKiBTZWUgYXZfYnNmX3NlbmRfcGFja2V0ICovCj4gKyAgICBpbiA9IGF2X3BhY2tl dF9hbGxvYygpOwo+ICsgICAgaWYgKCFpbikKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwo+ICsKPiArICAgIHJldCA9IGF2X3BhY2tldF9tYWtlX3JlZmNvdW50ZWQocGt0KTsKPiAr ICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICBhdl9wYWNr ZXRfbW92ZV9yZWYoaW4sIHBrdCk7Cj4gKwo+ICsgICAgLyogQ3JlYXRlIGEgbmV3IHBhY2tldCB3 aXRoIHNwcy9wcHMgaW5zZXJ0ZWQuICovCj4gKyAgICByZXQgPSBhdl9uZXdfcGFja2V0KHBrdCwg b3V0X3NpemUpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsK PiArICAgIHJldCA9IGF2X3BhY2tldF9jb3B5X3Byb3BzKHBrdCwgaW4pOwo+ICsgICAgaWYgKHJl dCA8IDApCj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsKPiArICAgIG1lbWNweShwa3QtPmRhdGEs IHBhci0+ZXh0cmFkYXRhLCBwYXItPmV4dHJhZGF0YV9zaXplKTsKPiArICAgIG91dCA9IHBrdC0+ ZGF0YSArIHBhci0+ZXh0cmFkYXRhX3NpemU7Cj4gKyAgICBidWZfZW5kICA9IGluLT5kYXRhICsg aW4tPnNpemU7Cj4gKyAgICBmb3IgKGJ1ZiA9IGZmX25hbF9maW5kX3N0YXJ0Y29kZShpbi0+ZGF0 YSwgYnVmX2VuZCk7IGJ1ZiA8IGJ1Zl9lbmQ7IGJ1ZiArPSBuYWxfc2l6ZSkgewo+ICsgICAgICAg IHdoaWxlICghKihidWYrKykpOwo+ICsgICAgICAgIHIxID0gZmZfbmFsX2ZpbmRfc3RhcnRjb2Rl KGJ1ZiwgYnVmX2VuZCk7Cj4gKyAgICAgICAgaWYgKChuYWxfc2l6ZSA9IHIxIC0gYnVmKSA+IDAp IHsKPiArICAgICAgICAgICAgQVZfV0IyNChvdXQsIDB4MDAwMDEpOwo+ICsgICAgICAgICAgICBt ZW1jcHkob3V0ICsgMywgYnVmLCBuYWxfc2l6ZSk7Cj4gKyAgICAgICAgICAgIG91dCArPSAzICsg bmFsX3NpemU7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArZmFpbDoKPiArICAgIGlmIChy ZXQgPCAwKQo+ICsgICAgICAgIGF2X3BhY2tldF91bnJlZihwa3QpOwo+ICsgICAgYXZfcGFja2V0 X2ZyZWUoJmluKTsKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZf Y29sZCBpbnQgd2hpcF9pbml0KEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgaW50IHJl dDsKPiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGlm ICgocmV0ID0gaW5pdGlhbGl6ZShzKSkgPCAwKQo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsKPiAr ICAgIGlmICgocmV0ID0gcGFyc2VfY29kZWMocykpIDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsK PiArCj4gKyAgICBpZiAoKHJldCA9IGdlbmVyYXRlX3NkcF9vZmZlcihzKSkgPCAwKQo+ICsgICAg ICAgIGdvdG8gZW5kOwo+ICsKPiArICAgIGlmICgocmV0ID0gZXhjaGFuZ2Vfc2RwKHMpKSA8IDAp Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKwo+ICsgICAgaWYgKChyZXQgPSBwYXJzZV9hbnN3ZXIo cykpIDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsKPiArCj4gKyAgICBpZiAoKHJldCA9IHVkcF9j b25uZWN0KHMpKSA8IDApCj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKwo+ICsgICAgaWYgKChyZXQg PSBpY2VfZHRsc19oYW5kc2hha2UocykpIDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsKPiArCj4g KyAgICBpZiAoKHJldCA9IHNldHVwX3NydHAocykpIDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsK PiArCj4gKyAgICBpZiAoKHJldCA9IGNyZWF0ZV9ydHBfbXV4ZXIocykpIDwgMCkKPiArICAgICAg ICBnb3RvIGVuZDsKPiArCj4gK2VuZDoKPiArICAgIGlmIChyZXQgPCAwICYmIHdoaXAtPnN0YXRl IDwgV0hJUF9TVEFURV9GQUlMRUQpCj4gKyAgICAgICAgd2hpcC0+c3RhdGUgPSBXSElQX1NUQVRF X0ZBSUxFRDsKPiArICAgIGlmIChyZXQgPj0gMCAmJiB3aGlwLT5zdGF0ZSA+PSBXSElQX1NUQVRF X0ZBSUxFRCAmJiB3aGlwLT5kdGxzX3JldCA8IDApCj4gKyAgICAgICAgcmV0ID0gd2hpcC0+ZHRs c19yZXQ7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHdoaXBfd3Jp dGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKPiArewo+ICsgICAg aW50IHJldDsKPiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsgICAg QVZTdHJlYW0gKnN0ID0gcy0+c3RyZWFtc1twa3QtPnN0cmVhbV9pbmRleF07Cj4gKyAgICBBVkZv cm1hdENvbnRleHQgKnJ0cF9jdHggPSBzdC0+cHJpdl9kYXRhOwo+ICsKPiArICAgIC8qIFRPRE86 IFNlbmQgYmluZGluZyByZXF1ZXN0IGV2ZXJ5IDFzIGFzIFdlYlJUQyBoZWFydGJlYXQuICovCj4g Kwo+ICsgICAgLyoqCj4gKyAgICAgKiBSZWNlaXZlIHBhY2tldHMgZnJvbSB0aGUgc2VydmVyIHN1 Y2ggYXMgSUNFIGJpbmRpbmcgcmVxdWVzdHMsIERUTFMgbWVzc2FnZXMsCj4gKyAgICAgKiBhbmQg UlRDUCBsaWtlIFBMSSByZXF1ZXN0cywgdGhlbiByZXNwb25kIHRvIHRoZW0uCj4gKyAgICAgKi8K PiArICAgIHJldCA9IGZmdXJsX3JlYWQod2hpcC0+dWRwLCB3aGlwLT5idWYsIHNpemVvZih3aGlw LT5idWYpKTsKPiArICAgIGlmIChyZXQgPiAwKSB7Cj4gKyAgICAgICAgaWYgKGlzX2R0bHNfcGFj a2V0KHdoaXAtPmJ1ZiwgcmV0KSkgewo+ICsgICAgICAgICAgICBpZiAoKHJldCA9IGZmdXJsX3dy aXRlKHdoaXAtPmR0bHNfdWMsIHdoaXAtPmJ1ZiwgcmV0KSkgPCAwKSB7Cj4gKyAgICAgICAgICAg ICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGhhbmRsZSBE VExTIG1lc3NhZ2VcbiIpOwo+ICsgICAgICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAg ICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9IGVsc2UgaWYgKHJldCAhPSBBVkVSUk9SKEVBR0FJ TikpIHsKPiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVk IHRvIHJlYWQgZnJvbSBVRFAgc29ja2V0XG4iKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAg IH0KPiArCj4gKyAgICBpZiAod2hpcC0+aDI2NF9hbm5leGJfaW5zZXJ0X3Nwc19wcHMgJiYgc3Qt PmNvZGVjcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0KSB7Cj4gKyAgICAgICAgaWYg KChyZXQgPSBoMjY0X2FubmV4Yl9pbnNlcnRfc3BzX3BwcyhzLCBwa3QpKSA8IDApIHsKPiArICAg ICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBpbnNl cnQgU1BTL1BQUyBiZWZvcmUgSURSXG4iKTsKPiArICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAg ICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IGZmX3dyaXRlX2NoYWluZWQocnRwX2N0 eCwgMCwgcGt0LCBzLCAwKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgaWYgKHJl dCA9PSBBVkVSUk9SKEVJTlZBTCkpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xP R19XQVJOSU5HLCAiV0hJUDogSWdub3JlIGZhaWxlZCB0byB3cml0ZSBwYWNrZXQ9JWRCLCByZXQ9 JWRcbiIsIHBrdC0+c2l6ZSwgcmV0KTsKPiArICAgICAgICAgICAgcmV0ID0gMDsKPiArICAgICAg ICB9IGVsc2UKPiArICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6 IEZhaWxlZCB0byB3cml0ZSBwYWNrZXQsIHNpemU9JWRcbiIsIHBrdC0+c2l6ZSk7Cj4gKyAgICAg ICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICtlbmQ6Cj4gKyAgICBpZiAocmV0IDwgMCAmJiB3 aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfRkFJTEVEKQo+ICsgICAgICAgIHdoaXAtPnN0YXRlID0g V0hJUF9TVEFURV9GQUlMRUQ7Cj4gKyAgICBpZiAocmV0ID49IDAgJiYgd2hpcC0+c3RhdGUgPj0g V0hJUF9TVEFURV9GQUlMRUQgJiYgd2hpcC0+ZHRsc19yZXQgPCAwKQo+ICsgICAgICAgIHJldCA9 IHdoaXAtPmR0bHNfcmV0Owo+ICsgICAgaWYgKHJldCA+PSAwICYmIHdoaXAtPmR0bHNfY2xvc2Vk KQo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyBhdl9jb2xkIHZvaWQgd2hpcF9kZWluaXQoQVZGb3JtYXRDb250ZXh0ICpz KQo+ICt7Cj4gKyAgICBpbnQgaSwgcmV0Owo+ICsgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5w cml2X2RhdGE7Cj4gKwo+ICsgICAgcmV0ID0gZGlzcG9zZV9zZXNzaW9uKHMpOwo+ICsgICAgaWYg KHJldCA8IDApCj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19XQVJOSU5HLCAiV0hJUDog RmFpbGVkIHRvIGRpc3Bvc2UgcmVzb3VyY2UsIHJldD0lZFxuIiwgcmV0KTsKPiArCj4gKyAgICBm b3IgKGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFtczsgaSsrKSB7Cj4gKyAgICAgICAgQVZGb3JtYXRD b250ZXh0KiBydHBfY3R4ID0gcy0+c3RyZWFtc1tpXS0+cHJpdl9kYXRhOwo+ICsgICAgICAgIGlm ICghcnRwX2N0eCkKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgIGF2X3dy aXRlX3RyYWlsZXIocnRwX2N0eCk7Cj4gKyAgICAgICAgLyoqCj4gKyAgICAgICAgICogS2VlcCBp biBtaW5kIHRoYXQgaXQgaXMgbmVjZXNzYXJ5IHRvIGZyZWUgdGhlIGJ1ZmZlciBvZiBwYiBzaW5j ZSB3ZSBhbGxvY2F0ZQo+ICsgICAgICAgICAqIGl0IGFuZCBwYXNzIGl0IHRvIHBiIHVzaW5nIGF2 aW9fYWxsb2NfY29udGV4dCwgd2hpbGUgYXZpb19jb250ZXh0X2ZyZWUgZG9lcwo+ICsgICAgICAg ICAqIG5vdCBwZXJmb3JtIHRoaXMgYWN0aW9uLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIGF2 X2ZyZWVwKCZydHBfY3R4LT5wYi0+YnVmZmVyKTsKPiArICAgICAgICBhdmlvX2NvbnRleHRfZnJl ZSgmcnRwX2N0eC0+cGIpOwo+ICsgICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChydHBfY3R4 KTsKPiArICAgICAgICBzLT5zdHJlYW1zW2ldLT5wcml2X2RhdGEgPSBOVUxMOwo+ICsgICAgfQo+ ICsKPiArICAgIGF2X2ZyZWVwKCZ3aGlwLT5zZHBfb2ZmZXIpOwo+ICsgICAgYXZfZnJlZXAoJndo aXAtPnNkcF9hbnN3ZXIpOwo+ICsgICAgYXZfZnJlZXAoJndoaXAtPndoaXBfcmVzb3VyY2VfdXJs KTsKPiArICAgIGF2X2ZyZWVwKCZ3aGlwLT5pY2VfdWZyYWdfcmVtb3RlKTsKPiArICAgIGF2X2Zy ZWVwKCZ3aGlwLT5pY2VfcHdkX3JlbW90ZSk7Cj4gKyAgICBhdl9mcmVlcCgmd2hpcC0+aWNlX3By b3RvY29sKTsKPiArICAgIGF2X2ZyZWVwKCZ3aGlwLT5pY2VfaG9zdCk7Cj4gKyAgICBhdl9mcmVl cCgmd2hpcC0+YXV0aG9yaXphdGlvbik7Cj4gKyAgICBhdl9mcmVlcCgmd2hpcC0+Y2VydF9maWxl KTsKPiArICAgIGF2X2ZyZWVwKCZ3aGlwLT5rZXlfZmlsZSk7Cj4gKyAgICBmZnVybF9jbG9zZXAo JndoaXAtPnVkcCk7Cj4gKyAgICBmZl9zcnRwX2ZyZWUoJndoaXAtPnNydHBfYXVkaW9fc2VuZCk7 Cj4gKyAgICBmZl9zcnRwX2ZyZWUoJndoaXAtPnNydHBfdmlkZW9fc2VuZCk7Cj4gKyAgICBmZl9z cnRwX2ZyZWUoJndoaXAtPnNydHBfcnRjcF9zZW5kKTsKPiArICAgIGZmX3NydHBfZnJlZSgmd2hp cC0+c3J0cF9yZWN2KTsKPiArICAgIGZmdXJsX2Nsb3NlKHdoaXAtPmR0bHNfdWMpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHdoaXBfY2hlY2tfYml0c3RyZWFtKEFWRm9ybWF0Q29udGV4dCAqcywg QVZTdHJlYW0gKnN0LCBjb25zdCBBVlBhY2tldCAqcGt0KQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0g MSwgZXh0cmFkYXRhX2lzb20gPSAwOwo+ICsgICAgdWludDhfdCAqYiA9IHBrdC0+ZGF0YTsKPiAr ICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGlmIChzdC0+ Y29kZWNwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQpIHsKPiArICAgICAgICBleHRy YWRhdGFfaXNvbSA9IHN0LT5jb2RlY3Bhci0+ZXh0cmFkYXRhX3NpemUgPiAwICYmIHN0LT5jb2Rl Y3Bhci0+ZXh0cmFkYXRhWzBdID09IDE7Cj4gKyAgICAgICAgaWYgKHBrdC0+c2l6ZSA+PSA1ICYm IEFWX1JCMzIoYikgIT0gMHgwMDAwMDAxICYmIChBVl9SQjI0KGIpICE9IDB4MDAwMDAxIHx8IGV4 dHJhZGF0YV9pc29tKSkgewo+ICsgICAgICAgICAgICByZXQgPSBmZl9zdHJlYW1fYWRkX2JpdHN0 cmVhbV9maWx0ZXIoc3QsICJoMjY0X21wNHRvYW5uZXhiIiwgTlVMTCk7Cj4gKyAgICAgICAgICAg IGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IEVuYWJsZSBCU0YgaDI2NF9tcDR0 b2FubmV4YiwgcGFja2V0PVsleCAleCAleCAleCAleCAuLi5dLCBleHRyYWRhdGFfaXNvbT0lZFxu IiwKPiArICAgICAgICAgICAgICAgIGJbMF0sIGJbMV0sIGJbMl0sIGJbM10sIGJbNF0sIGV4dHJh ZGF0YV9pc29tKTsKPiArICAgICAgICB9IGVsc2UKPiArICAgICAgICAgICAgd2hpcC0+aDI2NF9h bm5leGJfaW5zZXJ0X3Nwc19wcHMgPSAxOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiByZXQ7 Cj4gK30KPiArCj4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFdISVBDb250ZXh0LCB4KQo+ ICsjZGVmaW5lIERFQyBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTQo+ICtzdGF0aWMgY29uc3Qg QVZPcHRpb24gb3B0aW9uc1tdID0gewo+ICsgICAgeyAiaGFuZHNoYWtlX3RpbWVvdXQiLCAgIlRp bWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBJQ0UgYW5kIERUTFMgaGFuZHNoYWtlLiIsICAgICAg T0ZGU0VUKGhhbmRzaGFrZV90aW1lb3V0KSwgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0ID0g NTAwMCB9LCAgICAtMSwgSU5UX01BWCwgREVDIH0sCj4gKyAgICB7ICJwa3Rfc2l6ZSIsICAgICAg ICAgICAiVGhlIG1heGltdW0gc2l6ZSwgaW4gYnl0ZXMsIG9mIFJUUCBwYWNrZXRzIHRoYXQgc2Vu ZCBvdXQiLCBPRkZTRVQocGt0X3NpemUpLCAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7 IC5pNjQgPSAxMjAwIH0sICAgIC0xLCBJTlRfTUFYLCBERUMgfSwKPiArICAgIHsgImF1dGhvcml6 YXRpb24iLCAgICAgICJUaGUgb3B0aW9uYWwgQmVhcmVyIHRva2VuIGZvciBXSElQIEF1dGhvcml6 YXRpb24iLCAgICAgICAgIE9GRlNFVChhdXRob3JpemF0aW9uKSwgICAgICBBVl9PUFRfVFlQRV9T VFJJTkcsIHsgLnN0ciA9IE5VTEwgfSwgICAgIDAsICAgICAgIDAsIERFQyB9LAo+ICsgICAgeyAi Y2VydF9maWxlIiwgICAgICAgICAgIlRoZSBvcHRpb25hbCBjZXJ0aWZpY2F0ZSBmaWxlIHBhdGgg Zm9yIERUTFMiLCAgICAgICAgICAgICAgT0ZGU0VUKGNlcnRfZmlsZSksICAgICAgICAgIEFWX09Q VF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAgICAgMCwgICAgICAgMCwgREVDIH0sCj4g KyAgICB7ICJrZXlfZmlsZSIsICAgICAgICAgICAiVGhlIG9wdGlvbmFsIHByaXZhdGUga2V5IGZp bGUgcGF0aCBmb3IgRFRMUyIsICAgICAgICAgICAgICBPRkZTRVQoa2V5X2ZpbGUpLCAgICAgIEFW X09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAgICAgMCwgICAgICAgMCwgREVDIH0s Cj4gKyAgICB7IE5VTEwgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBBVkNsYXNzIHdoaXBf bXV4ZXJfY2xhc3MgPSB7Cj4gKyAgICAuY2xhc3NfbmFtZSA9ICJXSElQIG11eGVyIiwKPiArICAg IC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCj4gKyAgICAub3B0aW9uICAgICA9 IG9wdGlvbnMsCj4gKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKPiAr fTsKPiArCj4gK2NvbnN0IEZGT3V0cHV0Rm9ybWF0IGZmX3doaXBfbXV4ZXIgPSB7Cj4gKyAgICAu cC5uYW1lICAgICAgICAgICAgID0gIndoaXAiLAo+ICsgICAgLnAubG9uZ19uYW1lICAgICAgICA9 IE5VTExfSUZfQ09ORklHX1NNQUxMKCJXSElQKFdlYlJUQy1IVFRQIGluZ2VzdGlvbiBwcm90b2Nv bCkgbXV4ZXIiKSwKPiArICAgIC5wLmF1ZGlvX2NvZGVjICAgICAgPSBBVl9DT0RFQ19JRF9PUFVT LAo+ICsgICAgLnAudmlkZW9fY29kZWMgICAgICA9IEFWX0NPREVDX0lEX0gyNjQsCj4gKyAgICAu cC5mbGFncyAgICAgICAgICAgID0gQVZGTVRfR0xPQkFMSEVBREVSIHwgQVZGTVRfTk9GSUxFLAo+ ICsgICAgLnAucHJpdl9jbGFzcyAgICAgICA9ICZ3aGlwX211eGVyX2NsYXNzLAo+ICsgICAgLnBy aXZfZGF0YV9zaXplICAgICA9IHNpemVvZihXSElQQ29udGV4dCksCj4gKyAgICAuaW5pdCAgICAg ICAgICAgICAgID0gd2hpcF9pbml0LAo+ICsgICAgLndyaXRlX3BhY2tldCAgICAgICA9IHdoaXBf d3JpdGVfcGFja2V0LAo+ICsgICAgLmRlaW5pdCAgICAgICAgICAgICA9IHdoaXBfZGVpbml0LAo+ ICsgICAgLmNoZWNrX2JpdHN0cmVhbSAgICA9IHdoaXBfY2hlY2tfYml0c3RyZWFtLAo+ICt9Owo+ IC0tIAo+IDIuNDkuMAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1w ZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVs Cj4gCj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVn LWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJl4oCdLgoK CkkgZW5jb3VudGVyIHRoZSBtYWtlIGZhaWxlZCBpbiBodHRwczovL3BhdGNod29yay5mZm1wZWcu b3JnL3Byb2plY3QvZmZtcGVnL3BhdGNoL3RlbmNlbnRfMkMxOEM2MzhBMUM2QjQzRTVFNjQ0RTU4 NDcyRTY2MjdGODA5QHFxLmNvbS8sIApBbmQgSSB0aGluayB0aGlzIGlzIGJlY2F1c2UgdGhlIGNv bmZpZ3VyZSBkaWRu4oCZdCBlbmFibGUgb3BlbnNzbCwgRFRMUyBvbmx5IHN1cHBvcnQgb3BlbnNz bCBmb3Igbm93LgoKSXMgaXQgcG9zc2libGUgdG8gZW5hYmxlIG9wZW5zc2wgaW4gdGhlIHNlcnZl ciBjb25maWd1cmF0aW9uLCBwbGVhc2U/CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxA ZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2 ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2 ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=