From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4588646297 for ; Tue, 13 Jun 2023 18:36:31 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 721F068C414; Tue, 13 Jun 2023 21:36:29 +0300 (EEST) Received: from mail-vk1-f180.google.com (mail-vk1-f180.google.com [209.85.221.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 05FD968C1E2 for ; Tue, 13 Jun 2023 21:36:23 +0300 (EEST) Received: by mail-vk1-f180.google.com with SMTP id 71dfb90a1353d-460eb67244eso1822631e0c.1 for ; Tue, 13 Jun 2023 11:36:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686681381; x=1689273381; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=wyEp1FJSJR7DCZMy4ZOxyAQcZoKXU37LzLbd65qHFZY=; b=swbNmZl9/9l6oIy1WDVvLrpUkRZlRNyMfcAFTjQQN3g0tINL/FfDLTf4lrw5s//yuW 2YIj2mWEyRnjXGn97N1Z536z/A2WAbkZYF2QUd52dVElmF7voZD2vYQUpTmkZhhqSy1U 2G6uCIaD+qiMsngLZ0IYZG1Y0KQgG9G4JsQweN/LuuQ6A2kFNqMoh1qKNI1nbs8YOt8P bTFz1OrNlntn661FH5BQdGNurSXucIMbvWlohZwHnkQLfyB79zS8GxCnitCG76jVP/az aCOFJ/i0JcGr1DRz55xyFrwOFDor28d43K5mnP5PL5wHrBMyNlBxHupjGrkQZekVDKHc 1FTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686681381; x=1689273381; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=wyEp1FJSJR7DCZMy4ZOxyAQcZoKXU37LzLbd65qHFZY=; b=Wz6iOZ9GFY6gSizoqhB9T8Jzx9b2mUiwN4nYi4bNL18A5SgaUI0PpbT56DpHkSp8E8 gPHuedZPRcMW+Gxl0jpP4Ptvd2+2Dxxsl7dNSPQZKrxkbyKqdnBgsmNwsCZ9O8m0AAI8 Fv9OEe0gD2yWYIgrng7OplG5uHJTfW3WmVA6lheHr4GX9IigIKOgxWDUa3/DCvr7rpSB pMV13WstUWwnP/eBMR41Uc9yzmGIOkmZF5e1iTPPoij87Ev7Vt3q+48LHrCgifYFLe0L AdfWO7fwHDnyJ4s2VOZShcb12wumEbS1iU9K7xnR5PIqQQRc1c6BpQwyQYUej6ySS/WM 2f1A== X-Gm-Message-State: AC+VfDxwN878txkIkaNJ72ypPoYa1vGO4KyoVdflTiGtKq4xBvm4BEMg 7zylaFJJo0DY1r3Xf/QfBcSqPaBGui4DzjpXbhMlK8Rh X-Google-Smtp-Source: ACHHUZ7PRqwXTTvcP+usFmmSHFX4abTxo0GHDGXuUHxUaZB8Pr0RK40GhTkbS8lYOWW/QcXtYapzj8/CrLsPfnPSzLQ= X-Received: by 2002:a1f:bd53:0:b0:461:298b:3fd with SMTP id n80-20020a1fbd53000000b00461298b03fdmr6761847vkf.6.1686681381351; Tue, 13 Jun 2023 11:36:21 -0700 (PDT) MIME-Version: 1.0 References: <61fca341-57cc-abe5-225e-561f5e2a9b4b@funderburk.us> In-Reply-To: <61fca341-57cc-abe5-225e-561f5e2a9b4b@funderburk.us> From: Paul B Mahol Date: Tue, 13 Jun 2023 20:35:59 +0200 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH] avformat/avcodec: Add DTS-UHD demuxer and parser, movenc support. 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: T24gRnJpLCBBcHIgMTQsIDIwMjMgYXQgNjowMeKAr1BNIFJveSBGdW5kZXJidXJrIDxyb3lmZm1w ZWdAZnVuZGVyYnVyay51cz4Kd3JvdGU6Cgo+IFBhcnNpbmcgYW5kIGRlbXV4aW5nIG9mIERUUy1V SEQgaW5wdXQgZmlsZXMgcGVyIEVUU0kgVFMgMTAyIDExNCBpcyBhZGRlZAo+IGFzIGRlbXV4ZXIg ImR0c3VoZCIuICBtb3ZlbmMgc3VwcG9ydHMgRFRTLVVIRCBhdWRpbyB0cmFjay4KPgo+IFNpZ25l ZC1vZmYtYnk6IFJveSBGdW5kZXJidXJrIDxSb3kuRnVuZGVyYnVya0B4cGVyaS5jb20+Cj4gLS0t Cj4gICBDaGFuZ2Vsb2cgICAgICAgICAgICAgICAgICB8ICAgMSArCj4gICBjb25maWd1cmUgICAg ICAgICAgICAgICAgICB8ICAgMSArCj4gICBkb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpICB8ICAg MSArCj4gICBsaWJhdmNvZGVjL01ha2VmaWxlICAgICAgICB8ICAgMSArCj4gICBsaWJhdmNvZGVj L2NvZGVjX2Rlc2MuYyAgICB8ICAgNyArCj4gICBsaWJhdmNvZGVjL2NvZGVjX2lkLmggICAgICB8 ICAgMSArCj4gICBsaWJhdmNvZGVjL2R0c3VoZF9jb21tb24uYyB8IDk5MSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gICBsaWJhdmNvZGVjL2R0c3VoZF9jb21tb24uaCB8 ICA4NCArKysrCj4gICBsaWJhdmNvZGVjL2R0c3VoZF9wYXJzZXIuYyB8IDE0MSArKysrKysKPiAg IGxpYmF2Y29kZWMvcGFyc2Vycy5jICAgICAgIHwgICAxICsKPiAgIGxpYmF2Zm9ybWF0L01ha2Vm aWxlICAgICAgIHwgICAxICsKPiAgIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyAgIHwgICAxICsK PiAgIGxpYmF2Zm9ybWF0L2R0c2hkZGVjLmMgICAgIHwgICAyICstCj4gICBsaWJhdmZvcm1hdC9k dHN1aGRkZWMuYyAgICB8IDIxNCArKysrKysrKwo+ICAgbGliYXZmb3JtYXQvbW92ZW5jLmMgICAg ICAgfCAgMzIgKysKPiAgIGxpYmF2Zm9ybWF0L3ZlcnNpb24uaCAgICAgIHwgICAyICstCj4gICAx NiBmaWxlcyBjaGFuZ2VkLCAxNDc5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gICBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9kdHN1aGRfY29tbW9uLmMKPiAgIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWJhdmNvZGVjL2R0c3VoZF9jb21tb24uaAo+ICAgY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYmF2Y29kZWMvZHRzdWhkX3BhcnNlci5jCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZmb3JtYXQvZHRzdWhkZGVjLmMKPgo+IGRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vs b2cKPiBpbmRleCBhNDBmMzJjMjNmLi5mNjgzYjQ5YmIyIDEwMDY0NAo+IC0tLSBhL0NoYW5nZWxv Zwo+ICsrKyBiL0NoYW5nZWxvZwo+IEBAIC0zLDYgKzMsNyBAQCByZWxlYXNlcyBhcmUgc29ydGVk IGZyb20geW91bmdlc3QgdG8gb2xkZXN0Lgo+ICAgIHZlcnNpb24gPG5leHQ+Ogo+ICAgLSBsaWJh cmliY2FwdGlvbiBkZWNvZGVyCj4gKy0gRFRTLVVIRCBkZW11eGVyCj4gICAgdmVyc2lvbiA2LjA6 Cj4gICAtIFJhZGlhbmNlIEhEUiBpbWFnZSBzdXBwb3J0Cj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3Vy ZSBiL2NvbmZpZ3VyZQo+IGluZGV4IDAzM2RiNzQ0MmQuLjU1NzgyMWNlZWYgMTAwNzU1Cj4gLS0t IGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAgLTM0MjUsNiArMzQyNSw3IEBAIGRh c2hfZGVtdXhlcl9kZXBzPSJsaWJ4bWwyIgo+ICAgZGlyYWNfZGVtdXhlcl9zZWxlY3Q9ImRpcmFj X3BhcnNlciIKPiAgIGR0c19kZW11eGVyX3NlbGVjdD0iZGNhX3BhcnNlciIKPiAgIGR0c2hkX2Rl bXV4ZXJfc2VsZWN0PSJkY2FfcGFyc2VyIgo+ICtkdHN1aGRfZGVtdXhlcl9zZWxlY3Q9ImR0c3Vo ZF9wYXJzZXIiCj4gICBkdl9kZW11eGVyX3NlbGVjdD0iZHZwcm9maWxlIgo+ICAgZHZfbXV4ZXJf c2VsZWN0PSJkdnByb2ZpbGUiCj4gICBkeGFfZGVtdXhlcl9zZWxlY3Q9InJpZmZkZWMiCj4gZGlm ZiAtLWdpdCBhL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkgYi9kb2MvZ2VuZXJhbF9jb250ZW50 cy50ZXhpCj4gaW5kZXggMmVlZWJkODQ3ZC4uZTFiYTljNDU5NyAxMDA2NDQKPiAtLS0gYS9kb2Mv Z2VuZXJhbF9jb250ZW50cy50ZXhpCj4gKysrIGIvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQo+ IEBAIC01OTcsNiArNTk3LDcgQEAgbGlicmFyeToKPiAgIEBpdGVtIHJhdyBETnhIRCAgICAgICAg ICAgICAgICAgQHRhYiBYIEB0YWIgWAo+ICAgQGl0ZW0gcmF3IERUUyAgICAgICAgICAgICAgICAg ICBAdGFiIFggQHRhYiBYCj4gICBAaXRlbSByYXcgRFRTLUhEICAgICAgICAgICAgICAgIEB0YWIg ICBAdGFiIFgKPiArQGl0ZW0gcmF3IERUUy1VSEQgICAgICAgICAgICAgICBAdGFiICAgQHRhYgo+ ICAgQGl0ZW0gcmF3IEUtQUMtMyAgICAgICAgICAgICAgICBAdGFiIFggQHRhYiBYCj4gICBAaXRl bSByYXcgRkxBQyAgICAgICAgICAgICAgICAgIEB0YWIgWCBAdGFiIFgKPiAgIEBpdGVtIHJhdyBH U00gICAgICAgICAgICAgICAgICAgQHRhYiAgIEB0YWIgWAo+IGRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+IGluZGV4IGFhMTBmYmZjZjguLmY1 NzU2NGU5ZWIgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2 Y29kZWMvTWFrZWZpbGUKPiBAQCAtMTE1NSw2ICsxMTU1LDcgQEAgT0JKUy0kKENPTkZJR19ESVJB Q19QQVJTRVIpICAgICAgICAgICAgKz0KPiBkaXJhY19wYXJzZXIubwo+ICAgT0JKUy0kKENPTkZJ R19ETlhIRF9QQVJTRVIpICAgICAgICAgICAgKz0gZG54aGRfcGFyc2VyLm8gZG54aGRkYXRhLm8K PiAgIE9CSlMtJChDT05GSUdfRE9MQllfRV9QQVJTRVIpICAgICAgICAgICs9IGRvbGJ5X2VfcGFy c2VyLm8KPiBkb2xieV9lX3BhcnNlLm8KPiAgIE9CSlMtJChDT05GSUdfRFBYX1BBUlNFUikgICAg ICAgICAgICAgICs9IGRweF9wYXJzZXIubwo+ICtPQkpTLSQoQ09ORklHX0RUU1VIRF9QQVJTRVIp ICAgICAgICAgICArPSBkdHN1aGRfcGFyc2VyLm8gZHRzdWhkX2NvbW1vbi5vCj4gICBPQkpTLSQo Q09ORklHX0RWQVVESU9fUEFSU0VSKSAgICAgICAgICArPSBkdmF1ZGlvX3BhcnNlci5vCj4gICBP QkpTLSQoQ09ORklHX0RWQlNVQl9QQVJTRVIpICAgICAgICAgICArPSBkdmJzdWJfcGFyc2VyLm8K PiAgIE9CSlMtJChDT05GSUdfRFZEX05BVl9QQVJTRVIpICAgICAgICAgICs9IGR2ZF9uYXZfcGFy c2VyLm8KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9jb2RlY19kZXNjLmMgYi9saWJhdmNvZGVj L2NvZGVjX2Rlc2MuYwo+IGluZGV4IGVmZGNiNTliYzkuLmE1ODMxNWY0NmIgMTAwNjQ0Cj4gLS0t IGEvbGliYXZjb2RlYy9jb2RlY19kZXNjLmMKPiArKysgYi9saWJhdmNvZGVjL2NvZGVjX2Rlc2Mu Ywo+IEBAIC0zMzY5LDYgKzMzNjksMTMgQEAgc3RhdGljIGNvbnN0IEFWQ29kZWNEZXNjcmlwdG9y IGNvZGVjX2Rlc2NyaXB0b3JzW10KPiA9IHsKPiAgICAgICAgICAgLmxvbmdfbmFtZSA9IE5VTExf SUZfQ09ORklHX1NNQUxMKCJSS0EgKFJLIEF1ZGlvKSIpLAo+ICAgICAgICAgICAucHJvcHMgICAg ID0gQVZfQ09ERUNfUFJPUF9JTlRSQV9PTkxZIHwgQVZfQ09ERUNfUFJPUF9MT1NTWSB8Cj4gQVZf Q09ERUNfUFJPUF9MT1NTTEVTUywKPiAgICAgICB9LAo+ICsgICAgewo+ICsgICAgICAgIC5pZCAg ICAgICAgPSBBVl9DT0RFQ19JRF9EVFNVSEQsCj4gKyAgICAgICAgLnR5cGUgICAgICA9IEFWTUVE SUFfVFlQRV9BVURJTywKPiArICAgICAgICAubmFtZSAgICAgID0gImR0c3VoZCIsCj4gKyAgICAg ICAgLmxvbmdfbmFtZSA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJEVFNVSEQgKERUUy1VSEQgQXVk aW8KPiBGb3JtYXQpIiksCj4gKyAgICAgICAgLnByb3BzICAgICA9IEFWX0NPREVDX1BST1BfTE9T U1ksCj4gKyAgICB9LAo+ICAgICAgICAvKiBzdWJ0aXRsZSBjb2RlY3MgKi8KPiAgICAgICB7Cj4g ZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvY29kZWNfaWQuaCBiL2xpYmF2Y29kZWMvY29kZWNfaWQu aAo+IGluZGV4IDY0ZGY5Njk5ZjQuLjZkOGIxNDVlZTMgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2Rl Yy9jb2RlY19pZC5oCj4gKysrIGIvbGliYXZjb2RlYy9jb2RlY19pZC5oCj4gQEAgLTUzOCw2ICs1 MzgsNyBAQCBlbnVtIEFWQ29kZWNJRCB7Cj4gICAgICAgQVZfQ09ERUNfSURfRlRSLAo+ICAgICAg IEFWX0NPREVDX0lEX1dBVkFSQywKPiAgICAgICBBVl9DT0RFQ19JRF9SS0EsCj4gKyAgICBBVl9D T0RFQ19JRF9EVFNVSEQsCj4gICAgICAgIC8qIHN1YnRpdGxlIGNvZGVjcyAqLwo+ICAgICAgIEFW X0NPREVDX0lEX0ZJUlNUX1NVQlRJVExFID0gMHgxNzAwMCwgICAgICAgICAgLy8vPCBBIGR1bW15 IElECj4gcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIHN1YnRpdGxlIGNvZGVjcy4KPiBkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy9kdHN1aGRfY29tbW9uLmMgYi9saWJhdmNvZGVjL2R0c3VoZF9jb21t b24uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uMTEwY2IwYzM3 MQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmNvZGVjL2R0c3VoZF9jb21tb24uYwo+IEBA IC0wLDAgKzEsOTkxIEBACj4gKy8qCj4gKyAqIERUUy1VSEQgY29tbW9uIGF1ZGlvIGZyYW1lIHBh cnNpbmcgY29kZQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgWHBlcmkgQ29ycG9yYXRpb24gLyBE VFMsIEluYy4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25n IHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEKPiAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBAZmlsZQo+ICsgKiBQ YXJzZSBEVFMtVUhEIGF1ZGlvIGZyYW1lIGhlYWRlcnMsIHJlcG9ydCBmcmFtZSBzaXplcyBhbmQK PiBjb25maWd1cmF0aW9uLgo+ICsgKiBTcGVjaWZpY2F0aW9uOiBFVFNJIFRTIDEwMyA0OTEgVjEu Mi4xCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsKPiArI2luY2x1ZGUgImR0 c3VoZF9jb21tb24uaCIKPiArI2luY2x1ZGUgImdldF9iaXRzLmgiCj4gKyNpbmNsdWRlICJsaWJh dnV0aWwvY2hhbm5lbF9sYXlvdXQuaCIKPiArCj4gKyNkZWZpbmUgRFRTVUhEX0FMTE9DX0lOQ1JF TUVOVCAxNgo+ICsjZGVmaW5lIERUU1VIRF9DSFVOS19IRUFERVIgICAgMTYKPiArCj4gK2VudW0g UmVwVHlwZSB7Cj4gKyAgICBSRVBfVFlQRV9DSF9NQVNLX0JBU0VELAo+ICsgICAgUkVQX1RZUEVf TVRSWDJEX0NIX01BU0tfQkFTRUQsCj4gKyAgICBSRVBfVFlQRV9NVFJYM0RfQ0hfTUFTS19CQVNF RCwKPiArICAgIFJFUF9UWVBFX0JJTkFVUkFMLAo+ICsgICAgUkVQX1RZUEVfQU1CSVNPTklDLAo+ ICsgICAgUkVQX1RZUEVfQVVESU9fVFJBQ0tTLAo+ICsgICAgUkVQX1RZUEVfM0RfT0JKRUNUX1NJ TkdMRV9TUkNfUEVSX1dGLAo+ICsgICAgUkVQX1RZUEVfM0RfTU9OT19PQkpFQ1RfU0lOR0xFX1NS Q19QRVJfV0YsCj4gK307Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBNRE9iamVjdCB7Cj4gKyAgICBp bnQgc3RhcnRlZDsgIC8qIE9iamVjdCBzZWVuIHNpbmNlIGxhc3QgcmVzZXQuICovCj4gKyAgICBp bnQgcHJlc19pbmRleDsKPiArICAgIGludCByZXBfdHlwZTsKPiArICAgIGludCBjaF9hY3Rpdml0 eV9tYXNrOwo+ICt9IE1ET2JqZWN0Owo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgTUQwMSB7Cj4gKyAg ICBHZXRCaXRDb250ZXh0IGdiOwo+ICsgICAgTURPYmplY3Qgb2JqZWN0WzI1N107IC8qIG9iamVj dCBpZCBtYXggdmFsdWUgaXMgMjU2ICovCj4gKyAgICBpbnQgY2h1bmtfaWQ7Cj4gKyAgICBpbnQg b2JqZWN0X2xpc3RbMjU2XTsgaW50IG9iamVjdF9saXN0X2NvdW50Owo+ICsgICAgaW50IHBhY2tl dHNfYWNxdWlyZWQ7Cj4gKyAgICBpbnQgc3RhdGljX21kX2V4dHJhY3RlZDsKPiArICAgIGludCBz dGF0aWNfbWRfcGFja2V0czsKPiArICAgIGludCBzdGF0aWNfbWRfcGFja2V0X3NpemU7Cj4gKyAg ICBpbnQgc3RhdGljX21kX3VwZGF0ZV9mbGFnOwo+ICsgICAgdWludDhfdCAqYnVmOyBpbnQgYnVm X2J5dGVzOyAvKiB0ZW1wb3JhcnkgYnVmZmVyIHRvIGFjY3VtdWxhdGUgc3RhdGljCj4gZGF0YSAq Lwo+ICt9IE1EMDE7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBOQVZJIHsKPiArICAgIGludCBieXRl czsKPiArICAgIGludCBpZDsKPiArICAgIGludCBpbmRleDsKPiArICAgIGludCBwcmVzZW50Owo+ ICt9IE5BVkk7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBVSERBdWRpbyB7Cj4gKyAgICBpbnQgbWFz azsKPiArICAgIGludCBzZWxlY3RhYmxlOwo+ICt9IFVIREF1ZGlvOwo+ICsKPiArdHlwZWRlZiBz dHJ1Y3QgVUhEQ2h1bmsgewo+ICsgICAgaW50IGNyY19mbGFnOwo+ICsgICAgaW50IGJ5dGVzOwo+ ICt9IFVIRENodW5rOwo+ICsKPiArc3RydWN0IERUU1VIRCB7Cj4gKyAgICBjb25zdCB1aW50OF90 ICpkYXRhOyBpbnQgZGF0YV9ieXRlczsgIC8qIE9yaWdpbmFsIGF1ZGlvIGZyYW1lIGJ1ZmZlci4K PiAqLwo+ICsgICAgR2V0Qml0Q29udGV4dCBnYjsKPiArICAgIE1EMDEgKm1kMDE7IGludCBtZDAx X2NvdW50Owo+ICsgICAgTkFWSSAqbmF2aTsgaW50IG5hdmlfYWxsb2MsIG5hdmlfY291bnQ7Cj4g KyAgICBVSERBdWRpbyBhdWRpb1syNTZdOwo+ICsgICAgVUhEQ2h1bmsgKmNodW5rOyBpbnQgY2h1 bmtfYWxsb2MsIGNodW5rX2NvdW50Owo+ICsgICAgaW50IGNodW5rX2J5dGVzOwo+ICsgICAgaW50 IGNsb2NrX3JhdGU7Cj4gKyAgICBpbnQgZnJhbWVfYnl0ZXM7Cj4gKyAgICBpbnQgZnJhbWVfZHVy YXRpb247Cj4gKyAgICBpbnQgZnJhbWVfZHVyYXRpb25fY29kZTsKPiArICAgIGludCBmdG9jX2J5 dGVzOwo+ICsgICAgaW50IG1ham9yX3ZlcnNpb247Cj4gKyAgICBpbnQgbnVtX2F1ZGlvX3ByZXM7 Cj4gKyAgICBpbnQgc2FtcGxlX3JhdGU7Cj4gKyAgICBpbnQgc2FtcGxlX3JhdGVfbW9kOwo+ICsg ICAgdW5zaWduZWQgZnVsbF9jaGFubmVsX21peF9mbGFnOjE7Cj4gKyAgICB1bnNpZ25lZCBpbnRl cmFjdGl2ZV9vYmpfbGltaXRzX3ByZXNlbnQ6MTsKPiArICAgIHVuc2lnbmVkIGlzX3N5bmNfZnJh bWU6MTsKPiArICAgIHVuc2lnbmVkIHNhd19zeW5jOjE7Cj4gK307Cj4gKwo+ICsvKiBSZWFkIGZy b20gdGhlIE1EMDEgYnVmZmVyIChpZiBwcmVzZW50KSwgZmFsbGluZyBiYWNrIHRvIHRoZSBmcmFt ZQo+IGJ1ZmZlciAqLwo+ICtzdGF0aWMgaW5saW5lIGludCBnZXRfYml0c19tZDAxKERUU1VIRCAq aCwgTUQwMSAqbWQwMSwgaW50IGJpdHMpCj4gK3sKPiArICAgIGlmIChtZDAxLT5idWYpCj4gKyAg ICAgICAgcmV0dXJuIGdldF9iaXRzKCZtZDAxLT5nYiwgYml0cyk7Cj4gKyAgICByZXR1cm4gZ2V0 X2JpdHMoJmgtPmdiLCBiaXRzKTsKPiArfQo+ICsKPiArLyogSW4gdGhlIHNwZWNpZmljYXRpb24s IHRoZSBwc2V1ZG8gY29kZSBkZWZhdWx0cyB0aGUgJ2FkZCcgcGFyYW1ldGVyIHRvCj4gdHJ1ZS4K PiArICAgVGFibGUgNy0zMCBzaG93cyBwYXNzaW5nIGFuIGV4cGxpY2l0IGZhbHNlLCBtb3N0IG90 aGVyIGNhbGxzIGRvIG5vdAo+ICsgICBwYXNzIHRoZSBleHRyYWN0QW5kQWRkIHBhcmFtZXRlci4K PiArCj4gKyAgIEZ1bmN0aW9uIGJhc2VkIG9uIGNvZGUgaW4gVGFibGUgNS0yCj4gKyovCj4gK3N0 YXRpYyBpbnQgZ2V0X2JpdHNfdmFyKEdldEJpdENvbnRleHQgKmdiLCBjb25zdCB1aW50OF90IHRh YmxlW10sIGludCBhZGQpCj4gK3sKPiArICAgIHN0YXRpYyBjb25zdCBpbnQgYml0c191c2VkWzhd ID0geyAxLCAxLCAxLCAxLCAyLCAyLCAzLCAzIH07Cj4gKyAgICBzdGF0aWMgY29uc3QgaW50IGlu ZGV4X3RhYmxlWzhdID0geyAwLCAwLCAwLCAwLCAxLCAxLCAyLCAzIH07Cj4gKyAgICBpbnQgY29k ZSA9IHNob3dfYml0cyhnYiwgMyk7IC8qIHZhbHVlIHJhbmdlIGlzIFswLCA3XSAqLwo+ICsgICAg aW50IGk7Cj4gKyAgICBpbnQgaW5kZXggPSBpbmRleF90YWJsZVtjb2RlXTsKPiArICAgIGludCB2 YWx1ZSA9IDA7Cj4gKwo+ICsgICAgc2tpcF9iaXRzKGdiLCBiaXRzX3VzZWRbY29kZV0pOwo+ICsg ICAgaWYgKHRhYmxlW2luZGV4XSA+IDApIHsKPiArICAgICAgICBpZiAoYWRkKSB7Cj4gKyAgICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleDsgaSsrKQo+ICsgICAgICAgICAgICAgICAgdmFs dWUgKz0gMSA8PCB0YWJsZVtpXTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgdmFsdWUgKz0gZ2V0 X2JpdHNfbG9uZyhnYiwgdGFibGVbaW5kZXhdKTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4g dmFsdWU7Cj4gK30KPiArCj4gKy8qIEltcGxpZWQgYnkgVGFibGUgNi0yLCBNRDAxIGNodW5rIG9i amVjdHMgYXBwZW5kZWQgaW4gZm9yIGxvb3AgKi8KPiArc3RhdGljIE1EMDEgKmNodW5rX2FwcGVu ZF9tZDAxKERUU1VIRCAqaCwgaW50IGlkKQo+ICt7Cj4gKyAgICBpbnQgbWQwMV9hbGxvYyA9IGgt Pm1kMDFfY291bnQgKyAxOwo+ICsgICAgaWYgKGF2X3JlYWxsb2NwX2FycmF5KCZoLT5tZDAxLCBt ZDAxX2FsbG9jLCBzaXplb2YoKmgtPm1kMDEpKSkKPiArICAgICAgICByZXR1cm4gTlVMTDsKPiAr Cj4gKyAgICBtZW1zZXQoaC0+bWQwMSArIGgtPm1kMDFfY291bnQsIDAsIHNpemVvZigqaC0+bWQw MSkpOwo+ICsgICAgaC0+bWQwMVtoLT5tZDAxX2NvdW50XS5jaHVua19pZCA9IGlkOwo+ICsgICAg cmV0dXJuIGgtPm1kMDEgKyBoLT5tZDAxX2NvdW50Kys7Cj4gK30KPiArCj4gKy8qIFJldHVybiBl eGlzdGluZyBNRDAxIGNodW5rIGJhc2VkIG9uIGNodW5rSUQgKi8KPiArc3RhdGljIE1EMDEgKmNo dW5rX2ZpbmRfbWQwMShEVFNVSEQgKmgsIGludCBpZCkKPiArewo+ICsgICAgaW50IGk7Cj4gKwo+ ICsgICAgZm9yIChpID0gMDsgaSA8IGgtPm1kMDFfY291bnQ7IGkrKykKPiArICAgICAgICBpZiAo aWQgPT0gaC0+bWQwMVtpXS5jaHVua19pZCkKPiArICAgICAgICAgICAgcmV0dXJuIGgtPm1kMDEg KyBpOwo+ICsKPiArICAgIHJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICsvKiBUYWJsZSA2LTMgKi8K PiArc3RhdGljIHZvaWQgY2h1bmtfcmVzZXQoRFRTVUhEICpoKQo+ICt7Cj4gKyAgICBpbnQgaTsK PiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgaC0+bWQwMV9jb3VudDsgaSsrKQo+ICsgICAgICAg IGF2X2ZyZWVwKCZoLT5tZDAxW2ldLmJ1Zik7Cj4gKyAgICBhdl9mcmVlcCgmaC0+bWQwMSk7Cj4g KyAgICBoLT5tZDAxX2NvdW50ID0gMDsKPiArfQo+ICsKPiArc3RhdGljIE1ET2JqZWN0ICpmaW5k X2RlZmF1bHRfYXVkaW8oRFRTVUhEICpoKQo+ICt7Cj4gKyAgICBNRE9iamVjdCAqb2JqZWN0Owo+ ICsgICAgaW50IGksIGo7Cj4gKyAgICBpbnQgb2JqX2luZGV4ID0gLTE7Cj4gKwo+ICsgICAgZm9y IChpID0gMDsgaSA8IGgtPm1kMDFfY291bnQ7IGkrKykgewo+ICsgICAgICAgIGZvciAoaiA9IDA7 IGogPCAyNTc7IGorKykgewo+ICsgICAgICAgICAgICBvYmplY3QgPSBoLT5tZDAxW2ldLm9iamVj dCArIGo7Cj4gKyAgICAgICAgICAgIGlmIChvYmplY3QtPnN0YXJ0ZWQgJiYKPiBoLT5hdWRpb1tv YmplY3QtPnByZXNfaW5kZXhdLnNlbGVjdGFibGUpIHsKPiArICAgICAgICAgICAgICAgIGlmIChv YmpfaW5kZXggPCAwIHx8IChvYmplY3QtPnByZXNfaW5kZXggPAo+IGgtPm1kMDFbaV0ub2JqZWN0 W29ial9pbmRleF0ucHJlc19pbmRleCkpCj4gKyAgICAgICAgICAgICAgICAgICAgb2JqX2luZGV4 ID0gajsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAob2JqX2lu ZGV4ID49IDApCj4gKyAgICAgICAgICAgIHJldHVybiBoLT5tZDAxW2ldLm9iamVjdCArIG9ial9p bmRleDsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArLyogU2F2 ZSBjaGFubmVsIG1hc2ssIGNvdW50LCBhbmQgcmVwIHR5cGUgdG8gZGVzY3JpcHRvciBpbmZvLgo+ ICsgICBFVFNJIFRTIDEwMyA0OTEgVGFibGUgNy0yOCBjaGFubmVsIGFjdGl2aXR5IG1hc2sgYml0 cwo+ICsgICBtYXBwaW5nIGFuZCBTQ1RFIERWUyAyNDMtNCBSZXYuIDAuMiBERyBYIFRhYmxlIDQu ICBDb252ZXJ0IGFjdGl2aXR5Cj4gbWFzayBhbmQKPiArICAgcmVwcmVzZW50YXRpb24gdHlwZSB0 byBjaGFubmVsIG1hc2sgYW5kIGNoYW5uZWwgY291bnRzLgo+ICsqLwo+ICtzdGF0aWMgdm9pZCBl eHRyYWN0X29iamVjdF9pbmZvKE1ET2JqZWN0ICpvYmplY3QsIERUU1VIRERlc2NyaXB0b3JJbmZv Cj4gKmluZm8pCj4gK3sKPiArICAgIGludCBpOwo+ICsgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7 Cj4gKyAgICAgICAgdWludDMyX3QgYWN0aXZpdHlfbWFzazsKPiArICAgICAgICB1aW50MzJfdCBj aGFubmVsX21hc2s7IC8vIE1hc2sgYXMgZGVmaW5lZCBieSBFVFNJIFRTIDEwMyA0OTEKPiArICAg ICAgICB1aW50NjRfdCBmZm1wZWdfY2hhbm5lbF9tYXNrOyAvLyBNYXNrIGFzIGRlZmluZWQgaW4g ZmZtcGVnCj4gKyAgICB9IGFjdGl2aXR5X21hcFtdID0gewo+ICsgICAgICAgIC8vIGFjdCBtYXNr IHwgY2hhbiBtYXNrIHwgZmZtcGVnIGNoYW5uZWwgbWFzawo+ICsgICAgICAgIHsgMHgwMDAwMDEs IDB4MDAwMDAwMDEsIEFWX0NIX0ZST05UX0NFTlRFUiB9LAo+ICsgICAgICAgIHsgMHgwMDAwMDIs IDB4MDAwMDAwMDYsIEFWX0NIX0ZST05UX0xFRlQgfCBBVl9DSF9GUk9OVF9SSUdIVCB9LAo+ICsg ICAgICAgIHsgMHgwMDAwMDQsIDB4MDAwMDAwMTgsIEFWX0NIX1NJREVfTEVGVCB8IEFWX0NIX1NJ REVfUklHSFQgfSwKPiArICAgICAgICB7IDB4MDAwMDA4LCAweDAwMDAwMDIwLCBBVl9DSF9MT1df RlJFUVVFTkNZIH0sCj4gKyAgICAgICAgeyAweDAwMDAxMCwgMHgwMDAwMDA0MCwgQVZfQ0hfQkFD S19DRU5URVIgfSwKPiArICAgICAgICB7IDB4MDAwMDIwLCAweDAwMDBBMDAwLCBBVl9DSF9UT1Bf RlJPTlRfTEVGVCB8Cj4gQVZfQ0hfVE9QX0ZST05UX1JJR0hUIH0sCj4gKyAgICAgICAgeyAweDAw MDA0MCwgMHgwMDAwMDE4MCwgQVZfQ0hfQkFDS19MRUZUIHwgQVZfQ0hfQkFDS19SSUdIVCB9LAo+ ICsgICAgICAgIHsgMHgwMDAwODAsIDB4MDAwMDQwMDAsIEFWX0NIX1RPUF9GUk9OVF9DRU5URVIg fSwKPiArICAgICAgICB7IDB4MDAwMTAwLCAweDAwMDgwMDAwLCBBVl9DSF9UT1BfQ0VOVEVSIH0s Cj4gKyAgICAgICAgeyAweDAwMDIwMCwgMHgwMDAwMTgwMCwgQVZfQ0hfRlJPTlRfTEVGVF9PRl9D RU5URVIgfAo+IEFWX0NIX0ZST05UX1JJR0hUX09GX0NFTlRFUiB9LAo+ICsgICAgICAgIHsgMHgw MDA0MDAsIDB4MDAwNjAwMDAsIEFWX0NIQU5fV0lERV9MRUZUIHwgQVZfQ0hBTl9XSURFX1JJR0hU IH0sCj4gKyAgICAgICAgeyAweDAwMDgwMCwgMHgwMDAwMDYwMCwgQVZfQ0hfU1VSUk9VTkRfRElS RUNUX0xFRlQgfAo+IEFWX0NIX1NVUlJPVU5EX0RJUkVDVF9SSUdIVCB9LAo+ICsgICAgICAgIHsg MHgwMDEwMDAsIDB4MDAwMTAwMDAsIEFWX0NIX0xPV19GUkVRVUVOQ1lfMiB9LAo+ICsgICAgICAg IHsgMHgwMDIwMDAsIDB4MDAzMDAwMDAsIEFWX0NIX1RPUF9TSURFX0xFRlQgfAo+IEFWX0NIX1RP UF9TSURFX1JJR0hUIH0sCj4gKyAgICAgICAgeyAweDAwNDAwMCwgMHgwMDQwMDAwMCwgQVZfQ0hf VE9QX0JBQ0tfQ0VOVEVSIH0sCj4gKyAgICAgICAgeyAweDAwODAwMCwgMHgwMTgwMDAwMCwgQVZf Q0hfVE9QX0JBQ0tfTEVGVCB8Cj4gQVZfQ0hfVE9QX0JBQ0tfUklHSFQgfSwKPiArICAgICAgICB7 IDB4MDEwMDAwLCAweDAyMDAwMDAwLCBBVl9DSF9CT1RUT01fRlJPTlRfQ0VOVEVSIH0sCj4gKyAg ICAgICAgeyAweDAyMDAwMCwgMHgwQzAwMDAwMCwgQVZfQ0hfQk9UVE9NX0ZST05UX0xFRlQgfAo+ IEFWX0NIX0JPVFRPTV9GUk9OVF9SSUdIVCB9LAo+ICsgICAgICAgIHsgMHgxNDAwMDAsIDB4MzAw MDAwMDAsIEFWX0NIX1RPUF9GUk9OVF9MRUZUIHwKPiBBVl9DSF9UT1BfRlJPTlRfUklHSFQgfSwK PiArICAgICAgICB7IDB4MDgwMDAwLCAweEMwMDAwMDAwLCBBVl9DSF9UT1BfQkFDS19MRUZUIHwK PiBBVl9DSF9UT1BfQkFDS19SSUdIVCB9LAo+ICsgICAgICAgIHsgMCB9IC8vIFRlcm1pbmF0b3IK PiArICAgIH07Cj4gKwo+ICsgICAgaWYgKG9iamVjdCkgewo+ICsgICAgICAgIGZvciAoaSA9IDA7 IGFjdGl2aXR5X21hcFtpXS5hY3Rpdml0eV9tYXNrOyBpKyspIHsKPiArICAgICAgICAgICAgaWYg KGFjdGl2aXR5X21hcFtpXS5hY3Rpdml0eV9tYXNrICYgb2JqZWN0LT5jaF9hY3Rpdml0eV9tYXNr KQo+IHsKPiArICAgICAgICAgICAgICAgIGluZm8tPmNoYW5uZWxfbWFzayB8PSBhY3Rpdml0eV9t YXBbaV0uY2hhbm5lbF9tYXNrOwo+ICsgICAgICAgICAgICAgICAgaW5mby0+ZmZtcGVnX2NoYW5u ZWxfbWFzayB8PQo+IGFjdGl2aXR5X21hcFtpXS5mZm1wZWdfY2hhbm5lbF9tYXNrOwo+ICsgICAg ICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGluZm8tPmNoYW5uZWxfY291bnQgPSBh dl9wb3Bjb3VudChpbmZvLT5jaGFubmVsX21hc2spOwo+ICsgICAgICAgIGluZm8tPnJlcF90eXBl ID0gb2JqZWN0LT5yZXBfdHlwZTsKPiArICAgIH0KPiArfQo+ICsKPiArLyogQXNzZW1ibGUgaW5m b3JtYXRpb24gZm9yIE1QNCBTYW1wbGUgRW50cnkgYm94LiAgU2FtcGxlIFNpemUgaXMgYWx3YXlz Cj4gKyAgIDE2IGJpdHMuICBUaGUgY29kaW5nIG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIFNhbXBs ZUVudHJ5IHN1Yi1ib3ggYW5kIGlzCj4gKyAgICdkdHN4JyB1bmxlc3MgdGhlIHZlcnNpb24gb2Yg dGhlIGJpdHN0cmVhbSBpcyA+IDIuCj4gKyAgIElmIERlY29kZXJQcm9maWxlID09IDIsIHRoZW4g TWF4UGF5bG9hZENvZGUgd2lsbCBiZSB6ZXJvLgo+ICsqLwo+ICtzdGF0aWMgdm9pZCB1cGRhdGVf ZGVzY3JpcHRvcihEVFNVSEQgKmgsIERUU1VIRERlc2NyaXB0b3JJbmZvICppbmZvKQo+ICt7Cj4g KyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29kaW5nX25hbWVbXSA9IHsgImR0c3giLCAiZHRzeSIg fTsKPiArCj4gKyAgICBtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Cj4gKyAgICBtZW1j cHkoaW5mby0+Y29kaW5nX25hbWUsIGNvZGluZ19uYW1lW2gtPm1ham9yX3ZlcnNpb24gPiAyXSwg NSk7Cj4gKyAgICBleHRyYWN0X29iamVjdF9pbmZvKGZpbmRfZGVmYXVsdF9hdWRpbyhoKSwgaW5m byk7Cj4gKyAgICBpbmZvLT5iYXNlX3NhbXBsZV9mcmVxX2NvZGUgPSBoLT5zYW1wbGVfcmF0ZSA9 PSA0ODAwMDsKPiArICAgIGluZm8tPmRlY29kZXJfcHJvZmlsZV9jb2RlID0gaC0+bWFqb3JfdmVy c2lvbiAtIDI7Cj4gKyAgICBpbmZvLT5mcmFtZV9kdXJhdGlvbl9jb2RlID0gaC0+ZnJhbWVfZHVy YXRpb25fY29kZTsKPiArICAgIGluZm8tPm1heF9wYXlsb2FkX2NvZGUgPSAwICsgKGgtPm1ham9y X3ZlcnNpb24gPiAyKTsKPiArICAgIGluZm8tPm51bV9wcmVzX2NvZGUgPSBoLT5udW1fYXVkaW9f cHJlcyAtIDE7Cj4gKyAgICBpbmZvLT5zYW1wbGVfcmF0ZSA9IGgtPnNhbXBsZV9yYXRlOwo+ICsg ICAgaW5mby0+c2FtcGxlX3JhdGVfbW9kID0gaC0+c2FtcGxlX3JhdGVfbW9kOwo+ICsgICAgaW5m by0+c2FtcGxlX3NpemUgPSAxNjsKPiArICAgIGluZm8tPnZhbGlkID0gMTsKPiArfQo+ICsKPiAr LyogVGFibGUgNi0xNyBwNDcgKi8KPiArc3RhdGljIGludCBwYXJzZV9leHBsaWNpdF9vYmplY3Rf bGlzdHMoRFRTVUhEICpoLCBpbnQgbWFzaywgaW50IGluZGV4KQo+ICt7Cj4gKyAgICBHZXRCaXRD b250ZXh0ICpnYiA9ICZoLT5nYjsKPiArICAgIGludCBpOwo+ICsgICAgc3RhdGljIGNvbnN0IHVp bnQ4X3QgdGFibGVbNF0gPSB7IDQsIDgsIDE2LCAzMiB9Owo+ICsKPiArICAgIGZvciAoaSA9IDA7 IGkgPCBpbmRleDsgaSsrKSB7Cj4gKyAgICAgICAgaWYgKChtYXNrID4+IGkpICYgMHgwMSkgewo+ ICsgICAgICAgICAgICBpZiAoaC0+aXNfc3luY19mcmFtZSB8fCBnZXRfYml0czEoZ2IpKQo+ICsg ICAgICAgICAgICAgICAgZ2V0X2JpdHNfdmFyKGdiLCB0YWJsZSwgMSk7Cj4gKyAgICAgICAgfQo+ ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBUYWJsZSA2LTE1IHA0 NCwgVGFibGUgNi0xNiBwNDUgKi8KPiArc3RhdGljIGludCBwYXJzZV9hdWRfcHJlc19wYXJhbXMo RFRTVUhEICpoKQo+ICt7Cj4gKyAgICBHZXRCaXRDb250ZXh0ICpnYiA9ICZoLT5nYjsKPiArICAg IGludCBhdWRpbzsKPiArICAgIGludCBpOwo+ICsgICAgaW50IHJlYWRfbWFzazsKPiArICAgIHN0 YXRpYyBjb25zdCB1aW50OF90IHRhYmxlWzRdID0geyAwLCAyLCA0LCA1IH07Cj4gKwo+ICsgICAg aWYgKGgtPmlzX3N5bmNfZnJhbWUpIHsKPiArICAgICAgICBpZiAoaC0+ZnVsbF9jaGFubmVsX21p eF9mbGFnKQo+ICsgICAgICAgICAgICBoLT5udW1fYXVkaW9fcHJlcyA9IDE7Cj4gKyAgICAgICAg ZWxzZQo+ICsgICAgICAgICAgICBoLT5udW1fYXVkaW9fcHJlcyA9IGdldF9iaXRzX3ZhcihnYiwg dGFibGUsIDEpICsgMTsKPiArICAgICAgICBtZW1zZXQoaC0+YXVkaW8sIDAsIHNpemVvZihoLT5h dWRpb1swXSkgKiBoLT5udW1fYXVkaW9fcHJlcyk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChh dWRpbyA9IDA7IGF1ZGlvIDwgaC0+bnVtX2F1ZGlvX3ByZXM7IGF1ZGlvKyspIHsKPiArICAgICAg ICBpZiAoaC0+aXNfc3luY19mcmFtZSkgewo+ICsgICAgICAgICAgICBpZiAoaC0+ZnVsbF9jaGFu bmVsX21peF9mbGFnKQo+ICsgICAgICAgICAgICAgICAgaC0+YXVkaW9bYXVkaW9dLnNlbGVjdGFi bGUgPSAxOwo+ICsgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICBoLT5hdWRpb1th dWRpb10uc2VsZWN0YWJsZSA9IGdldF9iaXRzMShnYik7Cj4gKyAgICAgICAgfQo+ICsKPiArICAg ICAgICBpZiAoaC0+YXVkaW9bYXVkaW9dLnNlbGVjdGFibGUpIHsKPiArICAgICAgICAgICAgaWYg KGgtPmlzX3N5bmNfZnJhbWUpIHsKPiArICAgICAgICAgICAgICAgIHJlYWRfbWFzayA9IChhdWRp byA+IDApID8gZ2V0X2JpdHMoZ2IsIGF1ZGlvKSA6IDA7Cj4gKyAgICAgICAgICAgICAgICBoLT5h dWRpb1thdWRpb10ubWFzayA9IDA7Cj4gKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyByZWFk X21hc2s7IGkrKywgcmVhZF9tYXNrID4+PSAxKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgaWYg KHJlYWRfbWFzayAmIDB4MDEpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGgtPmF1ZGlvW2F1 ZGlvXS5tYXNrIHw9IGdldF9iaXRzMShnYikgPDwgaTsKPiArICAgICAgICAgICAgICAgIH0KPiAr ICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgaWYgKHBhcnNlX2V4cGxpY2l0X29iamVj dF9saXN0cyhoLCBoLT5hdWRpb1thdWRpb10ubWFzaywKPiBhdWRpbykpCj4gKyAgICAgICAgICAg ICAgICByZXR1cm4gMTsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBoLT5hdWRp b1thdWRpb10ubWFzayA9IDA7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVy biAwOwo+ICt9Cj4gKwo+ICsvKiBUYWJsZSA2LTkgcCAzOCAqLwo+ICtzdGF0aWMgaW50IGNoZWNr X2NyYyhEVFNVSEQgKmgsIGludCBiaXQsIGludCBieXRlcykKPiArewo+ICsgICAgR2V0Qml0Q29u dGV4dCBnYjsKPiArICAgIGludCBpOwo+ICsgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IGxvb2t1 cFsxNl0gPSB7Cj4gKyAgICAgICAgMHgwMDAwLCAweDEwMjEsIDB4MjA0MiwgMHgzMDYzLCAweDQw ODQsIDB4NTBBNSwgMHg2MEM2LCAweDcwRTcsCj4gKyAgICAgICAgMHg4MTA4LCAweDkxMjksIDB4 QTE0QSwgMHhCMTZCLCAweEMxOEMsIDB4RDFBRCwgMHhFMUNFLCAweEYxRUYKPiArICAgIH07Cj4g KyAgICB1aW50MTZfdCBjcmMgPSAweEZGRkY7Cj4gKwo+ICsgICAgaW5pdF9nZXRfYml0cygmZ2Is IGgtPmRhdGEsIGgtPmRhdGFfYnl0ZXMgKiA4KTsKPiArICAgIHNraXBfYml0cygmZ2IsIGJpdCk7 Cj4gKyAgICBmb3IgKGkgPSAtYnl0ZXM7IGkgPCBieXRlczsgaSsrKQo+ICsgICAgICAgIGNyYyA9 IChjcmMgPDwgNCkgXiBsb29rdXBbKGNyYyA+PiAxMikgXiBnZXRfYml0cygmZ2IsIDQpXTsKPiAr Cj4gKyAgICByZXR1cm4gY3JjICE9IDA7Cj4gK30KPiArCj4gKy8qIFRhYmxlIDYtMTIgcCA0MCAq Lwo+ICtzdGF0aWMgdm9pZCBkZWNvZGVfdmVyc2lvbihEVFNVSEQgKmgpCj4gK3sKPiArICAgIEdl dEJpdENvbnRleHQgKmdiID0gJmgtPmdiOwo+ICsgICAgaW50IGJpdHMgPSBnZXRfYml0czEoZ2Ip ID8gMyA6IDY7Cj4gKwo+ICsgICAgaC0+bWFqb3JfdmVyc2lvbiA9IGdldF9iaXRzKGdiLCBiaXRz KSArIDI7Cj4gKyAgICBza2lwX2JpdHMoZ2IsIGJpdHMpOwo+ICt9Cj4gKwo+ICsvKiBUYWJsZSA2 LTEyIHAgNDAgKi8KPiArc3RhdGljIGludCBwYXJzZV9zdHJlYW1fcGFyYW1zKERUU1VIRCAqaCkK PiArewo+ICsgICAgR2V0Qml0Q29udGV4dCAqZ2IgPSAmaC0+Z2I7Cj4gKyAgICBpbnQgaGFzX2Z0 b2NfY3JjOwo+ICsgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHRhYmxlX2Jhc2VfZHVyYXRpb25b NF0gPSB7IDUxMiwgNDgwLCAzODQsIDAgfTsKPiArICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB0 YWJsZV9jbG9ja19yYXRlWzRdID0geyAzMjAwMCwgNDQxMDAsIDQ4MDAwLCAwCj4gfTsKPiArCj4g KyAgICBpZiAoaC0+aXNfc3luY19mcmFtZSkKPiArICAgICAgICBoLT5mdWxsX2NoYW5uZWxfbWl4 X2ZsYWcgPSBnZXRfYml0czEoZ2IpOwo+ICsKPiArICAgIGhhc19mdG9jX2NyYyA9ICFoLT5mdWxs X2NoYW5uZWxfbWl4X2ZsYWcgfHwgaC0+aXNfc3luY19mcmFtZTsKPiArICAgIGlmIChoYXNfZnRv Y19jcmMgJiYgY2hlY2tfY3JjKGgsIDAsIGgtPmZ0b2NfYnl0ZXMpKQo+ICsgICAgICAgIHJldHVy biAxOwo+ICsKPiArICAgIGlmIChoLT5pc19zeW5jX2ZyYW1lKSB7Cj4gKyAgICAgICAgaWYgKGgt PmZ1bGxfY2hhbm5lbF9taXhfZmxhZykKPiArICAgICAgICAgICAgaC0+bWFqb3JfdmVyc2lvbiA9 IDI7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICBkZWNvZGVfdmVyc2lvbihoKTsKPiAr Cj4gKyAgICAgICAgaC0+ZnJhbWVfZHVyYXRpb24gPSB0YWJsZV9iYXNlX2R1cmF0aW9uW2dldF9i aXRzKGdiLCAyKV07Cj4gKyAgICAgICAgaC0+ZnJhbWVfZHVyYXRpb25fY29kZSA9IGdldF9iaXRz KGdiLCAzKTsKPiArICAgICAgICBoLT5mcmFtZV9kdXJhdGlvbiAqPSAoaC0+ZnJhbWVfZHVyYXRp b25fY29kZSArIDEpOwo+ICsgICAgICAgIGgtPmNsb2NrX3JhdGUgPSB0YWJsZV9jbG9ja19yYXRl W2dldF9iaXRzKGdiLCAyKV07Cj4gKyAgICAgICAgaWYgKGgtPmZyYW1lX2R1cmF0aW9uID09IDAg fHwgaC0+Y2xvY2tfcmF0ZSA9PSAwKQo+ICsgICAgICAgICAgICByZXR1cm4gMTsgLyogYml0c3Ry ZWFtIGVycm9yICovCj4gKwo+ICsgICAgICAgIHNraXBfYml0cyhnYiwgMzYgKiBnZXRfYml0czEo Z2IpKTsgIC8qIGJUaW1lU3RhbXBQcmVzZW50ICovCj4gKyAgICAgICAgaC0+c2FtcGxlX3JhdGVf bW9kID0gZ2V0X2JpdHMoZ2IsIDIpOwo+ICsgICAgICAgIGgtPnNhbXBsZV9yYXRlID0gaC0+Y2xv Y2tfcmF0ZSAqICgxIDw8IGgtPnNhbXBsZV9yYXRlX21vZCk7Cj4gKwo+ICsgICAgICAgIGlmICho LT5mdWxsX2NoYW5uZWxfbWl4X2ZsYWcpIHsKPiArICAgICAgICAgICAgaC0+aW50ZXJhY3RpdmVf b2JqX2xpbWl0c19wcmVzZW50ID0gMDsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAg ICBza2lwX2JpdHMxKGdiKTsgIC8qIHJlc2VydmVkIGZsYWcuICovCj4gKyAgICAgICAgICAgIGgt PmludGVyYWN0aXZlX29ial9saW1pdHNfcHJlc2VudCA9IGdldF9iaXRzMShnYik7Cj4gKyAgICAg ICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBUYWJsZSA2 LTI0IHA1MiAqLwo+ICtzdGF0aWMgdm9pZCBuYXZpX3B1cmdlKERUU1VIRCAqaCkKPiArewo+ICsg ICAgaW50IGk7Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IGgtPm5hdmlfY291bnQ7IGkrKykK PiArICAgICAgICBpZiAoIWgtPm5hdmlbaV0ucHJlc2VudCkKPiArICAgICAgICAgICAgaC0+bmF2 aVtpXS5ieXRlcyA9IDA7Cj4gK30KPiArCj4gKy8qIFRhYmxlIDYtMjEgcDUwICovCj4gK3N0YXRp YyB2b2lkIG5hdmlfY2xlYXIoRFRTVUhEICpoKQo+ICt7Cj4gKyAgICBpZiAoaC0+bmF2aSkKPiAr ICAgICAgICBtZW1zZXQoaC0+bmF2aSwgMCwgc2l6ZW9mKGgtPm5hdmlbMF0pICogaC0+bmF2aV9j b3VudCk7Cj4gKyAgICBoLT5uYXZpX2NvdW50ID0gMDsKPiArfQo+ICsKPiArLyogVGFibGUgNi0y MiBwNTEgKi8KPiArc3RhdGljIHZvaWQgbmF2aV9jbGVhcl9wcmVzZW50KERUU1VIRCAqaCkKPiAr ewo+ICsgICAgaW50IGk7Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IGgtPm5hdmlfY291bnQ7 IGkrKykKPiArICAgICAgICBoLT5uYXZpW2ldLnByZXNlbnQgPSAwOwo+ICt9Cj4gKwo+ICsvKiBU YWJsZSA2LTIzIHA1MS4gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuZCB0aGUgaW5kZXggaXMgcmV0 dXJuZWQgaW4KPiArICAgdGhlICpsaXN0SW5kZXggcGFyYW1ldGVyLgo+ICsqLwo+ICtzdGF0aWMg aW50IG5hdmlfZmluZF9pbmRleChEVFNVSEQgKmgsIGludCBkZXNpcmVkX2luZGV4LCBpbnQgKmxp c3RfaW5kZXgpCj4gK3sKPiArICAgIGludCBhdmFpbF9pbmRleCA9IGgtPm5hdmlfY291bnQ7Cj4g KyAgICBpbnQgaTsKPiArICAgIGludCBuYXZpX2FsbG9jOwo+ICsKPiArICAgIGZvciAoaSA9IDA7 IGkgPCBoLT5uYXZpX2NvdW50OyBpKyspIHsKPiArICAgICAgICBpZiAoaC0+bmF2aVtpXS5pbmRl eCA9PSBkZXNpcmVkX2luZGV4KSB7Cj4gKyAgICAgICAgICAgICpsaXN0X2luZGV4ID0gaTsKPiAr ICAgICAgICAgICAgaC0+bmF2aVtpXS5wcmVzZW50ID0gMTsKPiArICAgICAgICAgICAgcmV0dXJu IDA7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAoKGgtPm5hdmlbaV0ucHJlc2VudCA9 PSAwKSAmJiAoaC0+bmF2aVtpXS5ieXRlcyA9PSAwKSAmJgo+IChhdmFpbF9pbmRleCA+IGkpKQo+ ICsgICAgICAgICAgICBhdmFpbF9pbmRleCA9IGk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGF2 YWlsX2luZGV4ID49IGgtPm5hdmlfY291bnQpIHsKPiArICAgICAgICBpZiAoaC0+bmF2aV9jb3Vu dCA+PSBoLT5uYXZpX2FsbG9jKSB7Cj4gKyAgICAgICAgICAgIG5hdmlfYWxsb2MgPSBoLT5uYXZp X2NvdW50ICsgRFRTVUhEX0FMTE9DX0lOQ1JFTUVOVDsKPiArICAgICAgICAgICAgaWYgKGF2X3Jl YWxsb2NwX2FycmF5KCZoLT5uYXZpLCBuYXZpX2FsbG9jLCBzaXplb2YoKmgtPm5hdmkpKSkKPiAr ICAgICAgICAgICAgICAgIHJldHVybiAxOwo+ICsgICAgICAgICAgICBoLT5uYXZpX2FsbG9jID0g bmF2aV9hbGxvYzsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaC0+bmF2aV9jb3VudCsrOwo+ICsg ICAgfQo+ICsKPiArICAgICpsaXN0X2luZGV4ID0gYXZhaWxfaW5kZXg7Cj4gKyAgICBoLT5uYXZp W2F2YWlsX2luZGV4XS5ieXRlcyA9IDA7Cj4gKyAgICBoLT5uYXZpW2F2YWlsX2luZGV4XS5wcmVz ZW50ID0gMTsKPiArICAgIGgtPm5hdmlbYXZhaWxfaW5kZXhdLmlkID0gMjU2Owo+ICsgICAgaC0+ bmF2aVthdmFpbF9pbmRleF0uaW5kZXggPSBkZXNpcmVkX2luZGV4Owo+ICsKPiArICAgIHJldHVy biAwOwo+ICt9Cj4gKwo+ICsvKiBUYWJsZSA2LTIwIHA0OCAqLwo+ICtzdGF0aWMgaW50IHBhcnNl X2NodW5rX25hdmkoRFRTVUhEICpoKQo+ICt7Cj4gKyAgICBHZXRCaXRDb250ZXh0ICpnYiA9ICZo LT5nYjsKPiArICAgIGludCBhdWRpb19jaHVua3MgPSAxOwo+ICsgICAgaW50IGJ5dGVzOwo+ICsg ICAgaW50IGk7Cj4gKyAgICBpbnQgaWQ7Cj4gKyAgICBpbnQgaWRfcHJlc2VudDsKPiArICAgIGlu dCBpbmRleDsKPiArICAgIGludCBsaXN0X2luZGV4Owo+ICsgICAgc3RhdGljIGNvbnN0IHVpbnQ4 X3QgdGFibGUyNDY4WzRdID0geyAyLCA0LCA2LCA4IH07Cj4gKyAgICBzdGF0aWMgY29uc3QgdWlu dDhfdCB0YWJsZV9hdWRpb19jaHVua19zaXplc1s0XSA9IHsgOSwgMTEsIDEzLCAxNiB9Owo+ICsg ICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGFibGVfY2h1bmtfc2l6ZXNbNF0gPSB7IDYsIDksIDEy LCAxNSB9Owo+ICsKPiArICAgIGgtPmNodW5rX2J5dGVzID0gMDsKPiArICAgIGlmIChoLT5mdWxs X2NoYW5uZWxfbWl4X2ZsYWcpCj4gKyAgICAgICAgaC0+Y2h1bmtfY291bnQgPSBoLT5pc19zeW5j X2ZyYW1lOwo+ICsgICAgZWxzZQo+ICsgICAgICAgIGgtPmNodW5rX2NvdW50ID0gZ2V0X2JpdHNf dmFyKGdiLCB0YWJsZTI0NjgsIDEpOwo+ICsKPiArICAgIGlmIChoLT5jaHVua19jb3VudCA+PSBo LT5jaHVua19hbGxvYykgewo+ICsgICAgICAgIGludCBjaHVua19hbGxvYyA9IGgtPmNodW5rX2Nv dW50ICsgRFRTVUhEX0FMTE9DX0lOQ1JFTUVOVDsKPiArICAgICAgICBpZiAoYXZfcmVhbGxvY3Bf YXJyYXkoJmgtPmNodW5rLCBjaHVua19hbGxvYywgc2l6ZW9mKCpoLT5jaHVuaykpKQo+ICsgICAg ICAgICAgICByZXR1cm4gMTsKPiArICAgICAgICBoLT5jaHVua19hbGxvYyA9IGNodW5rX2FsbG9j Owo+ICsgICAgfQo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBoLT5jaHVua19jb3VudDsgaSsr KSB7Cj4gKyAgICAgICAgaC0+Y2h1bmtfYnl0ZXMgKz0gaC0+Y2h1bmtbaV0uYnl0ZXMgPSBnZXRf Yml0c192YXIoZ2IsCj4gdGFibGVfY2h1bmtfc2l6ZXMsIDEpOwo+ICsgICAgICAgIGlmIChoLT5m dWxsX2NoYW5uZWxfbWl4X2ZsYWcpCj4gKyAgICAgICAgICAgIGgtPmNodW5rW2ldLmNyY19mbGFn ID0gMDsKPiArICAgICAgICBlbHNlCj4gKyAgICAgICAgaC0+Y2h1bmtbaV0uY3JjX2ZsYWcgPSBn ZXRfYml0czEoZ2IpOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICghaC0+ZnVsbF9jaGFubmVsX21p eF9mbGFnKQo+ICsgICAgICAgIGF1ZGlvX2NodW5rcyA9IGdldF9iaXRzX3ZhcihnYiwgdGFibGUy NDY4LCAxKTsKPiArCj4gKyAgICBpZiAoaC0+aXNfc3luY19mcmFtZSkKPiArICAgICAgICBuYXZp X2NsZWFyKGgpOwo+ICsgICAgZWxzZQo+ICsgICAgICAgIG5hdmlfY2xlYXJfcHJlc2VudChoKTsK PiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgYXVkaW9fY2h1bmtzOyBpKyspIHsKPiArICAgICAg ICBpZiAoaC0+ZnVsbF9jaGFubmVsX21peF9mbGFnKQo+ICsgICAgICAgICAgICBpbmRleCA9IDA7 Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICBpbmRleCA9IGdldF9iaXRzX3ZhcihnYiwg dGFibGUyNDY4LCAxKTsKPiArCj4gKyAgICAgICAgaWYgKG5hdmlfZmluZF9pbmRleChoLCBpbmRl eCwgJmxpc3RfaW5kZXgpKQo+ICsgICAgICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICAgICAg aWYgKGgtPmlzX3N5bmNfZnJhbWUpCj4gKyAgICAgICAgICAgIGlkX3ByZXNlbnQgPSAxOwo+ICsg ICAgICAgIGVsc2UgaWYgKGgtPmZ1bGxfY2hhbm5lbF9taXhfZmxhZykKPiArICAgICAgICAgICAg aWRfcHJlc2VudCA9IDA7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICBpZF9wcmVzZW50 ID0gZ2V0X2JpdHMxKGdiKTsKPiArCj4gKyAgICAgICAgaWYgKGlkX3ByZXNlbnQpIHsKPiArICAg ICAgICAgICAgaWQgPSBnZXRfYml0c192YXIoZ2IsIHRhYmxlMjQ2OCwgMSk7Cj4gKyAgICAgICAg ICAgIGgtPm5hdmlbbGlzdF9pbmRleF0uaWQgPSBpZDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAg ICAgIGJ5dGVzID0gZ2V0X2JpdHNfdmFyKGdiLCB0YWJsZV9hdWRpb19jaHVua19zaXplcywgMSk7 Cj4gKyAgICAgICAgaC0+Y2h1bmtfYnl0ZXMgKz0gYnl0ZXM7Cj4gKyAgICAgICAgaC0+bmF2aVts aXN0X2luZGV4XS5ieXRlcyA9IGJ5dGVzOwo+ICsgICAgfQo+ICsKPiArICAgIG5hdmlfcHVyZ2Uo aCk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKwo+ICsvKiBUYWJsZSA2LTYgKi8K PiArc3RhdGljIGludCBwYXJzZV9tZF9jaHVua19saXN0KERUU1VIRCAqaCwgTUQwMSAqbWQwMSkK PiArewo+ICsgICAgR2V0Qml0Q29udGV4dCAqZ2IgPSAmaC0+Z2I7Cj4gKyAgICBjb25zdCB1aW50 OF90IHRhYmxlMVs0XSA9IHsgMywgNCwgNiwgOCB9Owo+ICsgICAgaW50IGk7Cj4gKwo+ICsgICAg aWYgKGgtPmZ1bGxfY2hhbm5lbF9taXhfZmxhZykgewo+ICsgICAgICAgIG1kMDEtPm9iamVjdF9s aXN0X2NvdW50ID0gMTsKPiArICAgICAgICBtZDAxLT5vYmplY3RfbGlzdFswXSA9IDI1NjsKPiAr ICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgbWQwMS0+b2JqZWN0X2xpc3RfY291bnQgPSBnZXRfYml0 c192YXIoZ2IsIHRhYmxlMSwgMSk7Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG1kMDEtPm9i amVjdF9saXN0X2NvdW50OyBpKyspCj4gKyAgICAgICAgICAgIG1kMDEtPm9iamVjdF9saXN0W2ld ID0gZ2V0X2JpdHMoZ2IsIGdldF9iaXRzMShnYikgPyA4IDogNCk7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qIFRhYmxlIDctOSAqLwo+ICtzdGF0aWMgdm9pZCBz a2lwX21wX3BhcmFtX3NldChEVFNVSEQgKmgsIE1EMDEgKm1kMDEsIGludCBub21pbmFsX2ZsYWcp Cj4gK3sKPiArICAgIGdldF9iaXRzX21kMDEoaCwgbWQwMSwgNik7IC8qIHJMb3VkbmVzcyAqLwo+ ICsgICAgaWYgKG5vbWluYWxfZmxhZyA9PSAwKQo+ICsgICAgICAgIGdldF9iaXRzX21kMDEoaCwg bWQwMSwgNSk7Cj4gKwo+ICsgICAgZ2V0X2JpdHNfbWQwMShoLCBtZDAxLCBub21pbmFsX2ZsYWcg PyAyIDogNCk7Cj4gK30KPiArCj4gKy8qIFRhYmxlIDctOCAqLwo+ICtzdGF0aWMgaW50IHBhcnNl X3N0YXRpY19tZF9wYXJhbXMoRFRTVUhEICpoLCBNRDAxICptZDAxLCBpbnQgb25seV9maXJzdCkK PiArewo+ICsgICAgaW50IGk7Cj4gKyAgICBpbnQgbG91ZG5lc3Nfc2V0cyA9IDE7Cj4gKyAgICBp bnQgbm9taW5hbF9mbGFnID0gMTsKPiArCj4gKyAgICBpZiAoaC0+ZnVsbF9jaGFubmVsX21peF9m bGFnID09IDApCj4gKyAgICAgICAgbm9taW5hbF9mbGFnID0gZ2V0X2JpdHNfbWQwMShoLCBtZDAx LCAxKTsKPiArCj4gKyAgICBpZiAobm9taW5hbF9mbGFnKSB7Cj4gKyAgICAgICAgaWYgKGgtPmZ1 bGxfY2hhbm5lbF9taXhfZmxhZyA9PSAwKQo+ICsgICAgICAgICAgICBsb3VkbmVzc19zZXRzID0g Z2V0X2JpdHNfbWQwMShoLCBtZDAxLCAxKSA/IDMgOiAxOwo+ICsgICAgfSBlbHNlIHsKPiArICAg ICAgICBsb3VkbmVzc19zZXRzID0gZ2V0X2JpdHNfbWQwMShoLCBtZDAxLCA0KSArIDE7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IGxvdWRuZXNzX3NldHM7IGkrKykKPiArICAg ICAgICBza2lwX21wX3BhcmFtX3NldChoLCBtZDAxLCBub21pbmFsX2ZsYWcpOwo+ICsKPiArICAg IGlmIChvbmx5X2ZpcnN0KQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAgIGlmIChub21p bmFsX2ZsYWcgPT0gMCkKPiArICAgICAgICBnZXRfYml0c19tZDAxKGgsIG1kMDEsIDEpOwo+ICsK PiArICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsgLyogVGFibGUgNy0xMiBzdWdnZXN0IDMg dHlwZXMgKi8KPiArICAgICAgICBpZiAoZ2V0X2JpdHNfbWQwMShoLCBtZDAxLCAxKSkgewo+ICsg ICAgICAgICAgICBpZiAoZ2V0X2JpdHNfbWQwMShoLCBtZDAxLCA0KSA9PSAxNSkgLyogVGFibGUg Ny0xNCAqLwo+ICsgICAgICAgICAgICAgICAgZ2V0X2JpdHNfbWQwMShoLCBtZDAxLCAxNSk7Cj4g KyAgICAgICAgfQo+ICsgICAgICAgIGlmIChnZXRfYml0c19tZDAxKGgsIG1kMDEsIDEpKSAvKiBz bW9vdGggbWQgcHJlc2VudCAqLwo+ICsgICAgICAgICAgICBnZXRfYml0c19tZDAxKGgsIG1kMDEs IDYgKiA2KTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoaC0+ZnVsbF9jaGFubmVsX21peF9mbGFn ID09IDApIHsKPiArICAgICAgICBpID0gbWQwMS0+c3RhdGljX21kX3BhY2tldHMgKiBtZDAxLT5z dGF0aWNfbWRfcGFja2V0X3NpemUgLQo+IGdldF9iaXRzX2NvdW50KCZtZDAxLT5nYik7Cj4gKyAg ICAgICAgc2tpcF9iaXRzKCZtZDAxLT5nYiwgaSk7Cj4gKyAgICB9Cj4gKyAgICBtZDAxLT5zdGF0 aWNfbWRfZXh0cmFjdGVkID0gMTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyog VGFibGUgNy03ICovCj4gK3N0YXRpYyBpbnQgcGFyc2VfbXVsdGlfZnJhbWVfbWQoRFRTVUhEICpo LCBNRDAxICptZDAxKQo+ICt7Cj4gKyAgICBHZXRCaXRDb250ZXh0ICpnYiA9ICZoLT5nYjsKPiAr ICAgIGludCBpLCBuOwo+ICsgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGFibGUxWzRdID0geyAw LCA2LCA5LCAxMiB9Owo+ICsgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGFibGUyWzRdID0geyA1 LCA3LCA5LCAxMSB9Owo+ICsKPiArICAgIGlmIChoLT5pc19zeW5jX2ZyYW1lKSB7Cj4gKyAgICAg ICAgbWQwMS0+cGFja2V0c19hY3F1aXJlZCA9IDA7Cj4gKyAgICAgICAgaWYgKGgtPmZ1bGxfY2hh bm5lbF9taXhfZmxhZykgewo+ICsgICAgICAgICAgICBtZDAxLT5zdGF0aWNfbWRfcGFja2V0cyA9 IDE7Cj4gKyAgICAgICAgICAgIG1kMDEtPnN0YXRpY19tZF9wYWNrZXRfc2l6ZSA9IDA7Cj4gKyAg ICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgbWQwMS0+c3RhdGljX21kX3BhY2tldHMgPSBn ZXRfYml0c192YXIoZ2IsIHRhYmxlMSwgMSkgKyAxOwo+ICsgICAgICAgICAgICBtZDAxLT5zdGF0 aWNfbWRfcGFja2V0X3NpemUgPSBnZXRfYml0c192YXIoZ2IsIHRhYmxlMiwgMSkgKyAzOwo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgICAgbiA9IG1kMDEtPnN0YXRpY19tZF9wYWNrZXRzICogbWQw MS0+c3RhdGljX21kX3BhY2tldF9zaXplOwo+ICsgICAgICAgIGlmIChuID4gbWQwMS0+YnVmX2J5 dGVzKSB7Cj4gKyAgICAgICAgICAgIGlmIChhdl9yZWFsbG9jcCgmbWQwMS0+YnVmLCBuKSkKPiAr ICAgICAgICAgICAgICAgIHJldHVybiAxOwo+ICsgICAgICAgICAgICBtZDAxLT5idWZfYnl0ZXMg PSBuOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaW5pdF9nZXRfYml0cygmbWQwMS0+Z2Is IG1kMDEtPmJ1ZiwgbWQwMS0+YnVmX2J5dGVzICogOCk7Cj4gKyAgICAgICAgaWYgKG1kMDEtPnN0 YXRpY19tZF9wYWNrZXRzID4gMSkKPiArICAgICAgICAgICAgbWQwMS0+c3RhdGljX21kX3VwZGF0 ZV9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKPiArICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgIG1k MDEtPnN0YXRpY19tZF91cGRhdGVfZmxhZyA9IDE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKG1k MDEtPnBhY2tldHNfYWNxdWlyZWQgPCBtZDAxLT5zdGF0aWNfbWRfcGFja2V0cykgewo+ICsgICAg ICAgIG4gPSBtZDAxLT5wYWNrZXRzX2FjcXVpcmVkICogbWQwMS0+c3RhdGljX21kX3BhY2tldF9z aXplOwo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtZDAxLT5zdGF0aWNfbWRfcGFja2V0X3Np emU7IGkrKykKPiArICAgICAgICAgICAgbWQwMS0+YnVmW24gKyBpXSA9IGdldF9iaXRzKGdiLCA4 KTsKPiArICAgICAgICBtZDAxLT5wYWNrZXRzX2FjcXVpcmVkKys7Cj4gKwo+ICsgICAgICAgIGlm IChtZDAxLT5wYWNrZXRzX2FjcXVpcmVkID09IG1kMDEtPnN0YXRpY19tZF9wYWNrZXRzKSB7Cj4g KyAgICAgICAgICAgIGlmIChtZDAxLT5zdGF0aWNfbWRfdXBkYXRlX2ZsYWcgfHwgIW1kMDEtPnN0 YXRpY19tZF9leHRyYWN0ZWQpCj4gKyAgICAgICAgICAgICAgICBpZiAocGFyc2Vfc3RhdGljX21k X3BhcmFtcyhoLCBtZDAxLCAwKSkKPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKPiAr ICAgICAgICB9IGVsc2UgaWYgKG1kMDEtPnBhY2tldHNfYWNxdWlyZWQgPT0gMSkgewo+ICsgICAg ICAgICAgICBpZiAobWQwMS0+c3RhdGljX21kX3VwZGF0ZV9mbGFnIHx8ICFtZDAxLT5zdGF0aWNf bWRfZXh0cmFjdGVkKQo+ICsgICAgICAgICAgICAgICAgaWYgKHBhcnNlX3N0YXRpY19tZF9wYXJh bXMoaCwgbWQwMSwgMSkpCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cj4gKyAgICAg ICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBSZXR1cm4g MSBpZiBzdWl0YWJsZSwgMCBpZiBub3QuICBUYWJsZSA3LTE4LiAgT0JKR1JPVVBJRFNUQVJUPTIy NCBTZWMKPiA3LjguNyBwNzUgKi8KPiArc3RhdGljIGludCBpc19zdWl0YWJsZV9mb3JfcmVuZGVy KERUU1VIRCAqaCwgTUQwMSAqbWQwMSwgaW50IG9iamVjdF9pZCkKPiArewo+ICsgICAgR2V0Qml0 Q29udGV4dCAqZ2IgPSAmaC0+Z2I7Cj4gKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCB0YWJsZVs0 XSA9IHsgOCwgMTAsIDEyLCAxNCB9Owo+ICsKPiArICAgIGlmIChvYmplY3RfaWQgPj0gMjI0IHx8 IGdldF9iaXRzMShnYikpCj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgLyogIFJlamVj dCB0aGUgcmVuZGVyIGFuZCBza2lwIHRoZSByZW5kZXIgZGF0YS4gKi8KPiArICAgIHNraXBfYml0 czEoZ2IpOwo+ICsgICAgc2tpcF9iaXRzKGdiLCBnZXRfYml0c192YXIoZ2IsIHRhYmxlLCAxKSk7 Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qIFRhYmxlIDctMjYgKi8KPiArc3Rh dGljIHZvaWQgcGFyc2VfY2hfbWFza19wYXJhbXMoRFRTVUhEICpoLCBNRDAxICptZDAxLCBNRE9i amVjdCAqb2JqZWN0KQo+ICt7Cj4gKyAgICBHZXRCaXRDb250ZXh0ICpnYiA9ICZoLT5nYjsKPiAr ICAgIGNvbnN0IGludCBjaF9pbmRleCA9IG9iamVjdC0+cmVwX3R5cGUgPT0gUkVQX1RZUEVfQklO QVVSQUwgPyAxIDoKPiBnZXRfYml0cyhnYiwgNCk7Cj4gKyAgICBzdGF0aWMgY29uc3QgaW50IG1h c2tfdGFibGVbMTRdID0geyAvKiBUYWJsZSA3LTI3ICovCj4gKyAgICAgICAgMHgwMDAwMDEsIDB4 MDAwMDAyLCAweDAwMDAwNiwgMHgwMDAwMEYsIDB4MDAwMDFGLCAweDAwMDg0QiwKPiAweDAwMDAy RiwKPiArICAgICAgICAweDAwODAyRiwgMHgwMDQ4NkIsIDB4MDA4ODZCLCAweDAzRkJGQiwgMHgw MDAwMDMsIDB4MDAwMDA3LAo+IDB4MDAwODQzLAo+ICsgICAgfTsKPiArCj4gKyAgICBpZiAoY2hf aW5kZXggPT0gMTQpCj4gKyAgICAgICAgb2JqZWN0LT5jaF9hY3Rpdml0eV9tYXNrID0gZ2V0X2Jp dHMoZ2IsIDE2KTsKPiArICAgIGVsc2UgaWYgKGNoX2luZGV4ID09IDE1KQo+ICsgICAgICAgIG9i amVjdC0+Y2hfYWN0aXZpdHlfbWFzayA9IGdldF9iaXRzKGdiLCAzMik7Cj4gKyAgICBlbHNlCj4g KyAgICAgICAgb2JqZWN0LT5jaF9hY3Rpdml0eV9tYXNrID0gbWFza190YWJsZVtjaF9pbmRleF07 Cj4gK30KPiArCj4gKy8qIFRhYmxlIDctMjIgKi8KPiArc3RhdGljIGludCBwYXJzZV9vYmplY3Rf bWV0YWRhdGEoRFRTVUhEICpoLCBNRDAxICptZDAxLCBNRE9iamVjdCAqb2JqZWN0LAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRfZnJhbWVfZmxhZywgaW50IG9i amVjdF9pZCkKPiArewo+ICsgICAgR2V0Qml0Q29udGV4dCAqZ2IgPSAmaC0+Z2I7Cj4gKyAgICBp bnQgY2hfbWFza19vYmplY3RfZmxhZyA9IDA7Cj4gKyAgICBpbnQgb2JqZWN0XzNkX21ldGFkYXRh X2ZsYWcgPSAwOwo+ICsgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGFibGUyWzRdID0geyAxLCA0 LCA0LCA4IH07Cj4gKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCB0YWJsZTNbNF0gPSB7IDMsIDMs IDQsIDggfTsKPiArCj4gKyAgICBza2lwX2JpdHMoZ2IsIG9iamVjdF9pZCAhPSAyNTYpOwo+ICsK PiArICAgIGlmIChzdGFydF9mcmFtZV9mbGFnKSB7Cj4gKyAgICAgICAgb2JqZWN0LT5yZXBfdHlw ZSA9IGdldF9iaXRzKGdiLCAzKTsKPiArICAgICAgICBzd2l0Y2ggKG9iamVjdC0+cmVwX3R5cGUp IHsKPiArICAgICAgICAgICAgY2FzZSBSRVBfVFlQRV9CSU5BVVJBTDoKPiArICAgICAgICAgICAg Y2FzZSBSRVBfVFlQRV9DSF9NQVNLX0JBU0VEOgo+ICsgICAgICAgICAgICBjYXNlIFJFUF9UWVBF X01UUlgyRF9DSF9NQVNLX0JBU0VEOgo+ICsgICAgICAgICAgICBjYXNlIFJFUF9UWVBFX01UUlgz RF9DSF9NQVNLX0JBU0VEOgo+ICsgICAgICAgICAgICAgICAgY2hfbWFza19vYmplY3RfZmxhZyA9 IDE7Cj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArCj4gKyAgICAgICAgICAgIGNhc2UgUkVQ X1RZUEVfM0RfT0JKRUNUX1NJTkdMRV9TUkNfUEVSX1dGOgo+ICsgICAgICAgICAgICBjYXNlIFJF UF9UWVBFXzNEX01PTk9fT0JKRUNUX1NJTkdMRV9TUkNfUEVSX1dGOgo+ICsgICAgICAgICAgICAg ICAgb2JqZWN0XzNkX21ldGFkYXRhX2ZsYWcgPSAxOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAoY2hfbWFza19vYmplY3RfZmxhZykgewo+ ICsgICAgICAgICAgICBpZiAob2JqZWN0X2lkICE9IDI1Nikgewo+ICsgICAgICAgICAgICAgICAg c2tpcF9iaXRzKGdiLCAzKTsgIC8qIE9iamVjdCBJbXBvcnRhbmNlIExldmVsICovCj4gKyAgICAg ICAgICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkKPiArICAgICAgICAgICAgICAgICAgICBza2lw X2JpdHMoZ2IsIGdldF9iaXRzMShnYikgPyAzIDogNSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAg Z2V0X2JpdHNfdmFyKGdiLCB0YWJsZTIsIDEpOwo+ICsgICAgICAgICAgICAgICAgZ2V0X2JpdHNf dmFyKGdiLCB0YWJsZTMsIDEpOwo+ICsKPiArICAgICAgICAgICAgICAgIC8qIFNraXAgb3B0aW9u YWwgTG91ZG5lc3MgYmxvY2suICovCj4gKyAgICAgICAgICAgICAgICBpZiAoZ2V0X2JpdHMxKGdi KSkKPiArICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIDgpOwo+ICsKPiArICAgICAg ICAgICAgICAgIC8qIFNraXAgb3B0aW9uYWwgT2JqZWN0IEludGVyYWN0aXZlIE1EIChUYWJsZSA3 LTI1KS4gKi8KPiArICAgICAgICAgICAgICAgIGlmIChnZXRfYml0czEoZ2IpICYmIGgtPmludGVy YWN0aXZlX29ial9saW1pdHNfcHJlc2VudCkgewo+ICsgICAgICAgICAgICAgICAgICAgIGlmIChn ZXRfYml0czEoZ2IpKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIDUg KyA2ICogb2JqZWN0XzNkX21ldGFkYXRhX2ZsYWcpOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsg ICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBwYXJzZV9jaF9tYXNrX3BhcmFtcyhoLCBt ZDAxLCBvYmplY3QpOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICAvKiBTa2lwIHJl c3Qgb2Ygb2JqZWN0ICovCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyogVGFibGUgNy00 ICovCj4gK3N0YXRpYyBpbnQgcGFyc2VfbWQwMShEVFNVSEQgKmgsIE1EMDEgKm1kMDEsIGludCBw cmVzX2luZGV4KQo+ICt7Cj4gKyAgICBHZXRCaXRDb250ZXh0ICpnYiA9ICZoLT5nYjsKPiArICAg IHVpbnQzMl90IGk7Cj4gKyAgICB1aW50MzJfdCBpZDsKPiArICAgIHVpbnQzMl90IHN0YXJ0X2Zs YWc7Cj4gKwo+ICsgICAgaWYgKGgtPmF1ZGlvW3ByZXNfaW5kZXhdLnNlbGVjdGFibGUpIHsKPiAr ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSAgLyogVGFibGUgNy01LiAgU2NhbGluZyBk YXRhLiAqLwo+ICsgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIDUgKiBnZXRfYml0czEoZ2IpKTsK PiArCj4gKyAgICAgICAgaWYgKGdldF9iaXRzMShnYikgJiYgcGFyc2VfbXVsdGlfZnJhbWVfbWQo aCwgbWQwMSkpCj4gKyAgICAgICAgICAgIHJldHVybiAxOwo+ICsgICAgfQo+ICsKPiArICAgIC8q IFRhYmxlIDctMTY6IE9iamVjdCBtZXRhZGF0YS4gKi8KPiArICAgIG1lbXNldChtZDAxLT5vYmpl Y3QsIDAsIHNpemVvZihtZDAxLT5vYmplY3QpKTsKPiArICAgIGlmICghaC0+ZnVsbF9jaGFubmVs X21peF9mbGFnKQo+ICsgICAgICAgIHNraXBfYml0cyhnYiwgMTEgKiBnZXRfYml0czEoZ2IpKTsK PiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgbWQwMS0+b2JqZWN0X2xpc3RfY291bnQ7IGkrKykg ewo+ICsgICAgICAgIGlkID0gbWQwMS0+b2JqZWN0X2xpc3RbaV07Cj4gKyAgICAgICAgaWYgKCFp c19zdWl0YWJsZV9mb3JfcmVuZGVyKGgsIG1kMDEsIGlkKSkKPiArICAgICAgICAgICAgY29udGlu dWU7Cj4gKwo+ICsgICAgICAgIG1kMDEtPm9iamVjdFtpZF0ucHJlc19pbmRleCA9IHByZXNfaW5k ZXg7Cj4gKyAgICAgICAgc3RhcnRfZmxhZyA9IDA7Cj4gKyAgICAgICAgaWYgKCFtZDAxLT5vYmpl Y3RbaWRdLnN0YXJ0ZWQpIHsKPiArICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBpZCAhPSAyNTYp Owo+ICsgICAgICAgICAgICBzdGFydF9mbGFnID0gbWQwMS0+b2JqZWN0W2lkXS5zdGFydGVkID0g MTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmICgoaWQgPCAyMjQgfHwgaWQgPiAyNTUp ICYmCj4gKyAgICAgICAgICAgIHBhcnNlX29iamVjdF9tZXRhZGF0YShoLCBtZDAxLCBtZDAxLT5v YmplY3QgKyBpZCwgc3RhcnRfZmxhZywKPiBpZCkpIHsKPiArICAgICAgICAgICAgcmV0dXJuIDE7 Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gKyAgICBy ZXR1cm4gMDsKPiArfQo+ICsKPiArLyogVGFibGUgNi0yICovCj4gK3N0YXRpYyBpbnQgcGFyc2Vf Y2h1bmtzKERUU1VIRCAqaCkKPiArewo+ICsgICAgR2V0Qml0Q29udGV4dCAqZ2IgPSAmaC0+Z2I7 Cj4gKyAgICBNRDAxICptZDAxOwo+ICsgICAgaW50IGJpdF9uZXh0Owo+ICsgICAgaW50IGk7Cj4g KyAgICBzdGF0aWMgY29uc3QgdWludDhfdCB0YWJsZV9hdWRfcHJlc1s0XSA9IHsgMCwgMiwgNCwg NCB9Owo+ICsgICAgaW50IHByZXNfaW5kZXg7Cj4gKyAgICB1aW50MzJfdCBpZDsKPiArCj4gKyAg ICBmb3IgKGkgPSAwOyBpIDwgaC0+Y2h1bmtfY291bnQ7IGkrKykgewo+ICsgICAgICAgIGJpdF9u ZXh0ID0gZ2V0X2JpdHNfY291bnQoZ2IpICsgaC0+Y2h1bmtbaV0uYnl0ZXMgKiA4Owo+ICsgICAg ICAgIGlmIChoLT5jaHVua1tpXS5jcmNfZmxhZyAmJiBjaGVja19jcmMoaCwgZ2V0X2JpdHNfY291 bnQoZ2IpLAo+IGgtPmNodW5rW2ldLmJ5dGVzKSkKPiArICAgICAgICAgICAgcmV0dXJuIDE7Cj4g Kwo+ICsgICAgICAgIGlkID0gZ2V0X2JpdHMoZ2IsIDgpOwo+ICsgICAgICAgIGlmIChpZCA9PSAx KSB7Cj4gKyAgICAgICAgICAgIHByZXNfaW5kZXggPSBnZXRfYml0c192YXIoZ2IsIHRhYmxlX2F1 ZF9wcmVzLCAxKTsKPiArICAgICAgICBpZiAocHJlc19pbmRleCA+IDI1NSkKPiArICAgICAgICAg ICAgcmV0dXJuIDE7Cj4gKyAgICAgICAgbWQwMSA9IGNodW5rX2ZpbmRfbWQwMShoLCBpZCk7Cj4g KyAgICAgICAgaWYgKG1kMDEgPT0gTlVMTCkKPiArICAgICAgICAgICAgbWQwMSA9IGNodW5rX2Fw cGVuZF9tZDAxKGgsIGlkKTsKPiArICAgICAgICBpZiAobWQwMSA9PSBOVUxMKQo+ICsgICAgICAg ICAgICByZXR1cm4gMTsKPiArICAgICAgICBpZiAocGFyc2VfbWRfY2h1bmtfbGlzdChoLCBtZDAx KSkKPiArICAgICAgICAgICAgcmV0dXJuIDE7Cj4gKyAgICAgICAgaWYgKHBhcnNlX21kMDEoaCwg bWQwMSwgcHJlc19pbmRleCkpCj4gKyAgICAgICAgICAgIHJldHVybiAxOwo+ICsgICAgICAgIH0K PiArCj4gKyAgICAgICAgc2tpcF9iaXRzKGdiLCBiaXRfbmV4dCAtIGdldF9iaXRzX2NvdW50KGdi KSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKiBBbGxvY2F0 ZSBwYXJzaW5nIGhhbmRsZS4gIFRoZSBwYXJzaW5nIGhhbmRsZSBzaG91bGQgYmUgdXNlZCB0byBw YXJzZQo+ICsgICAgb25lIERUUzpYIFByb2ZpbGUgMiBBdWRpbyBzdHJlYW0sIHRoZW4gZnJlZWQg YnkgY2FsbGluZwo+IERUU1VIRF9kZXN0cm95KCkuCj4gKyAgICBEbyBub3QgdXNlIHRoZSBzYW1l IHBhcnNpbmcgaGFuZGxlIHRvIHBhcnNlIG11bHRpcGxlIGF1ZGlvIHN0cmVhbXMuCj4gKwo+ICsg IEByZXR1cm4gUGFyc2luZyBoYW5kbGUgZm9yIHVzZSB3aXRoIG90aGVyIGZ1bmN0aW9ucywgb3Ig TlVMTCBvbiBmYWlsdXJlLgo+ICsqLwo+ICtEVFNVSEQgKmR0c3VoZF9jcmVhdGUodm9pZCkKPiAr ewo+ICsgICAgcmV0dXJuIGF2X2NhbGxvYygxLCBzaXplb2YoRFRTVUhEKSk7Cj4gK30KPiArCj4g Ky8qKiBGcmVlIGFsbCByZXNvdXJjZXMgdXNlZCBieSB0aGUgcGFyc2luZyBoYW5kbGUuCj4gKwo+ ICsgIEBwYXJhbVtpbl0gaCBIYW5kbGUgYWxsb2NhdGVkIGJ5IGR0c2hkX2NyZWF0ZQo+ICsqLwo+ ICt2b2lkIGR0c3VoZF9kZXN0cm95KERUU1VIRCAqaCkKPiArewo+ICsgICAgaWYgKGgpIHsKPiAr ICAgICAgICBjaHVua19yZXNldChoKTsKPiArICAgICAgICBhdl9mcmVlcCgmaC0+Y2h1bmspOwo+ ICsgICAgICAgIGF2X2ZyZWVwKCZoLT5uYXZpKTsKPiArICAgICAgICBhdl9mcmVlcCgmaCk7Cj4g KyAgICB9Cj4gK30KPiArCj4gKy8qKiBQYXJzZSBhIHNpbmdsZSBEVFM6WCBQcm9maWxlIDIgZnJh bWUuCj4gKyAgICBUaGUgZnJhbWUgbXVzdCBzdGFydCBhdCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUg ZGF0YSBidWZmZXIsIGFuZCBlbm91Z2gKPiArICAgIG9mIHRoZSBmcmFtZSBtdXN0IGJlIHByZXNl bnQgdG8gZGVjb2RlIHRoZSBtYWpvcml0eSBvZiB0aGUgRlRPQy4KPiArICAgIEZyb20gVGFibGUg Ni0xMSBwNDAuCj4gKwo+ICsgICAgQSBzeW5jIGZyYW1lIG11c3QgYmUgdGhlIGZpcnN0IGZyYW1l IHByb3ZpZGVkLCBiZWZvcmUgYW55IG5vbi1zeW5jCj4gZnJhbWVzLgo+ICsgICAgU2lnbmF0dXJl czogc3luYz0weDQwNDExQkYyLCBub24tc3luYz0weDcxQzQ0MkU4Lgo+ICsKPiArICBAcGFyYW1b aW5dIGggSGFuZGxlIGFsbG9jYXRlZCBieSBEVFNVSERfY3JlYXRlCj4gKyAgQHBhcmFtW2luXSBG aXJzdCBieXRlIG9mIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZyYW1lIHRvIHBhcnNlCj4gKyAg QHBhcmFtW2luXSBuRGF0YSBOdW1iZXIgb2YgdmFsaWQgYnl0ZXMgaW4gJ2RhdGEnCj4gKyAgQHBh cmFtW291dF0gZmkgUmVzdWx0cyBvZiBmcmFtZSBwYXJzaW5nLCBtYXkgYmUgTlVMTAo+ICsgIEBw YXJhbVtvdXRdIGRpIFJlc3VsdHMgb2YgZGVzY3JpcHRvciBwYXJzaW5nLCBtYXkgYmUgTlVMTAo+ ICsgIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBEVFNVSERTdGF0dXMgZW51bWVyYXRpb24gb24gZXJy b3IKPiArKi8KPiAraW50IGR0c3VoZF9mcmFtZShEVFNVSEQgKmgsIGNvbnN0IHVpbnQ4X3QgKmRh dGEsIHNpemVfdCBkYXRhX2J5dGVzLAo+ICsgICAgICAgICAgICAgICAgIERUU1VIREZyYW1lSW5m byAqZmksIERUU1VIRERlc2NyaXB0b3JJbmZvICpkaSkKPiArewo+ICsgICAgR2V0Qml0Q29udGV4 dCAqZ2I7Cj4gKyAgICBpbnQgZnJhY3Rpb24gPSAxOwo+ICsgICAgaW50IGk7Cj4gKyAgICBpbnQg c3luY3dvcmQ7Cj4gKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCB0YWJsZV9wYXlsb2FkWzRdID0g eyA1LCA4LCAxMCwgMTIgfTsKPiArCj4gKyAgICBpZiAoIWggfHwgIWRhdGEpCj4gKyAgICAgICAg cmV0dXJuIERUU1VIRF9OVUxMOwo+ICsKPiArICAgIGlmIChkYXRhX2J5dGVzIDwgNCkKPiArICAg ICAgICByZXR1cm4gRFRTVUhEX0lOQ09NUExFVEU7IC8qIERhdGEgYnVmZmVyIGRvZXMgbm90IGNv bnRhaW4gdGhlCj4gc2lnbmF0dXJlICovCj4gKwo+ICsgICAgaC0+ZGF0YSA9IGRhdGE7Cj4gKyAg ICBoLT5kYXRhX2J5dGVzID0gZGF0YV9ieXRlczsKPiArICAgIGdiID0gJmgtPmdiOwo+ICsgICAg aW5pdF9nZXRfYml0cyhnYiwgZGF0YSwgZGF0YV9ieXRlcyAqIDgpOwo+CgoKaW5pdF9nZXRfYml0 czgsIGFuZCBjaGVjayByZXR1cm4gY29kZS4KCgo+ICsKPiArICAgIHN5bmN3b3JkID0gZ2V0X2Jp dHNfbG9uZyhnYiwgMzIpOwo+ICsgICAgaC0+aXNfc3luY19mcmFtZSA9IHN5bmN3b3JkID09IERU U1VIRF9TWU5DV09SRDsKPiArICAgIGgtPnNhd19zeW5jIHw9IGgtPmlzX3N5bmNfZnJhbWU7Cj4g KyAgICBpZiAoIWgtPnNhd19zeW5jIHx8ICghaC0+aXNfc3luY19mcmFtZSAmJiBzeW5jd29yZCAh PQo+IERUU1VIRF9OT05TWU5DV09SRCkpCj4gKyAgICAgICAgcmV0dXJuIERUU1VIRF9OT1NZTkM7 ICAvKiBJbnZhbGlkIGZyYW1lIG9yIGhhdmUgbm90IHBhcnNlZCBzeW5jCj4gZnJhbWUuICovCj4g Kwo+ICsgICAgaC0+ZnRvY19ieXRlcyA9IGdldF9iaXRzX3ZhcihnYiwgdGFibGVfcGF5bG9hZCwg MSkgKyAxOwo+ICsgICAgaWYgKGgtPmZ0b2NfYnl0ZXMgPCA1IHx8IGgtPmZ0b2NfYnl0ZXMgPj0g ZGF0YV9ieXRlcykKPiArICAgICAgICByZXR1cm4gRFRTVUhEX0lOQ09NUExFVEU7ICAvKiBEYXRh IGJ1ZmZlciBkb2VzIG5vdCBjb250YWluIGVudGlyZQo+IEZUT0MgKi8KPiArCj4gKyAgICBpZiAo cGFyc2Vfc3RyZWFtX3BhcmFtcyhoKSkKPiArICAgICAgICByZXR1cm4gRFRTVUhEX0lOVkFMSURf RlJBTUU7Cj4gKwo+ICsgICAgaWYgKHBhcnNlX2F1ZF9wcmVzX3BhcmFtcyhoKSkKPiArICAgICAg ICByZXR1cm4gRFRTVUhEX0lOVkFMSURfRlJBTUU7Cj4gKwo+ICsgICAgaWYgKHBhcnNlX2NodW5r X25hdmkoaCkpICAvKiBBdWRpb0NodW5rVHlwZXMgYW5kIHBheWxvYWQgc2l6ZXMuICovCj4gKyAg ICAgICAgcmV0dXJuIERUU1VIRF9JTlZBTElEX0ZSQU1FOwo+ICsKPiArICAgIC8qIEF0IHRoaXMg cG9pbnQgaW4gdGhlIHBhcnNpbmcsIHdlIGNhbiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlCj4g ZnJhbWUuICovCj4gKyAgICBoLT5mcmFtZV9ieXRlcyA9IGgtPmZ0b2NfYnl0ZXMgKyBoLT5jaHVu a19ieXRlczsKPiArICAgIGlmIChoLT5mcmFtZV9ieXRlcyA+IGRhdGFfYnl0ZXMpCj4gKyAgICAg ICAgcmV0dXJuIERUU1VIRF9JTkNPTVBMRVRFOwo+ICsKPiArICAgIGlmIChkaSAmJiBoLT5pc19z eW5jX2ZyYW1lKSB7Cj4gKyAgICAgICAgLyogU2tpcCBQQlJTbW9vdGhQYXJhbXMgKFRhYmxlIDYt MjYpIGFuZCBhbGlnbiB0byB0aGUgY2h1bmtzCj4gaW1tZWRpYXRlbHkKPiArICAgICAgICAgICBm b2xsb3dpbmcgdGhlIEZUT0MgQ1JDLgo+ICsgICAgICAgICovCj4gKyAgICAgICAgc2tpcF9iaXRz KGdiLCBoLT5mdG9jX2J5dGVzICogOCAtIGdldF9iaXRzX2NvdW50KGdiKSk7Cj4gKyAgICAgICAg aWYgKHBhcnNlX2NodW5rcyhoKSkKPiArICAgICAgICAgICAgcmV0dXJuIERUU1VIRF9JTlZBTElE X0ZSQU1FOwo+ICsgICAgICAgIHVwZGF0ZV9kZXNjcmlwdG9yKGgsIGRpKTsKPiArICAgIH0KPiAr Cj4gKyAgICAvKiA2LjMuNi45OiBhdWRpbyBmcmFtZSBkdXJhdGlvbiBtYXkgYmUgYSBmcmFjdGlv biBvZiBtZXRhZGF0YSBmcmFtZQo+IGR1cmF0aW9uLiAqLwo+ICsgICAgZm9yIChpID0gMDsgaSA8 IGgtPm5hdmlfY291bnQ7IGkrKykgewo+ICsgICAgICAgIGlmIChoLT5uYXZpW2ldLnByZXNlbnQp IHsKPiArICAgICAgICAgICAgaWYgKGgtPm5hdmlbaV0uaWQgPT0gMykKPiArICAgICAgICAgICAg ICAgIGZyYWN0aW9uID0gMjsKPiArICAgICAgICAgICAgZWxzZSBpZiAoaC0+bmF2aVtpXS5pZCA9 PSA0KQo+ICsgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSA0Owo+ICsgICAgICAgIH0KPiArICAg IH0KPiArCj4gKyAgICBpZiAoZmkpIHsKPiArICAgICAgICBmaS0+c3luYyA9IGgtPmlzX3N5bmNf ZnJhbWU7Cj4gKyAgICAgICAgZmktPmZyYW1lX2J5dGVzID0gaC0+ZnJhbWVfYnl0ZXM7Cj4gKyAg ICAgICAgZmktPnNhbXBsZV9yYXRlID0gaC0+c2FtcGxlX3JhdGU7Cj4gKyAgICAgICAgZmktPnNh bXBsZV9jb3VudCA9IChoLT5mcmFtZV9kdXJhdGlvbiAqIGZpLT5zYW1wbGVfcmF0ZSkgLwo+ICho LT5jbG9ja19yYXRlICogZnJhY3Rpb24pOwo+ICsgICAgICAgIGZpLT5kdXJhdGlvbiA9IChkb3Vi bGUpZmktPnNhbXBsZV9jb3VudCAvIGZpLT5zYW1wbGVfcmF0ZTsKPgoKUGxlYXNlICBubyBkb3Vi bGUgIHR5cGUuCkFsc28gbWFrZSB1c2Ugb2YgYXZfcmVzY2FsZS4KCgo+ICsgICAgfQo+ICsKPiAr ICAgIHJldHVybiBEVFNVSERfT0s7Cj4gK30KPiArCj4gKy8qKiBSZXR1cm4gdGhlIG9mZnNldCBv ZiB0aGUgZmlyc3QgVUhEIGF1ZGlvIGZyYW1lLgo+ICsgICAgV2hlbiBzdXBwbGllZCBhIGJ1ZmZl ciBjb250YWluaW5nIERUU0hESERSIGZpbGUgY29udGVudCwgdGhlIERUU0hECj4gKyAgICBoZWFk ZXJzIGFyZSBza2lwcGVkIGFuZCB0aGUgb2Zmc2V0IHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBT VFJNREFUQQo+ICsgICAgY2h1bmsgaXMgcmV0dXJuZWQsIGFsb25nIHdpdGggdGhlIHNpemUgb2Yg dGhhdCBjaHVuay4KPiArCj4gKyAgQHBhcmFtW2luXSBkYXRhU3RhcnQgRFRTOlggUHJvZmlsZSAy IGZpbGUgY29udGVudCB0byBwYXJzZQo+ICsgIEBwYXJhbVtpbl0gZGF0YVNpemUgTnVtYmVyIG9m IHZhbGlkIGJ5dGVzIGluICdkYXRhU3RhcnQnCj4gKyAgQHBhcmFtW291dF0gTnVtYmVyIG9mIGxl YWRpbmcgRFRTOlggUHJvZmlsZSAyIGF1ZGlvIGZyYW1lcyB0byBkaXNjYXJkLAo+ICsgICAgICAg ICAgICAgIG1heSBiZSBOVUxMCj4gKyAgQHBhcmFtW291dF0gU2l6ZSBvZiBTVFJNREFUQSBwYXls b2FkLCBtYXkgYmUgTlVMTAo+ICsgIEByZXR1cm4gU1RSTURBVEEgcGF5bG9hZCBvZmZzZXQgb3Ig MCBpZiBub3QgYSB2YWxpZCBEVFM6WCBQcm9maWxlIDIgZmlsZQo+ICsqLwo+ICtpbnQgZHRzdWhk X3N0cm1kYXRhX3BheWxvYWQoY29uc3QgdWludDhfdCAqZGF0YV9zdGFydCwgaW50IGRhdGFfc2l6 ZSwKPiBzaXplX3QgKnN0cm1kYXRhX3NpemUpCj4gK3sKPiArICAgIGNvbnN0IHVpbnQ4X3QgKmRh dGEgPSBkYXRhX3N0YXJ0Owo+ICsgICAgY29uc3QgdWludDhfdCAqZGF0YV9lbmQgPSBkYXRhICsg ZGF0YV9zaXplOwo+ICsgICAgdWludDY0X3QgY2h1bmtfc2l6ZSA9IDA7Cj4gKwo+ICsgICAgaWYg KGRhdGEgKyBEVFNVSERfQ0hVTktfSEVBREVSID49IGRhdGFfZW5kIHx8IG1lbWNtcChkYXRhLAo+ ICJEVFNIREhEUiIsIDgpKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAgIGZvciAoOyBk YXRhICsgRFRTVUhEX0NIVU5LX0hFQURFUiArIDQgPD0gZGF0YV9lbmQ7IGRhdGEgKz0gY2h1bmtf c2l6ZQo+ICsgRFRTVUhEX0NIVU5LX0hFQURFUikgewo+ICsgICAgICAgIGNodW5rX3NpemUgPSBB Vl9SQjY0KGRhdGEgKyA4KTsKPiArCj4gKyAgICAgICAgaWYgKCFtZW1jbXAoZGF0YSwgIlNUUk1E QVRBIiwgOCkpIHsKPiArICAgICAgICAgICAgaWYgKHN0cm1kYXRhX3NpemUpCj4gKyAgICAgICAg ICAgICAgICAqc3RybWRhdGFfc2l6ZSA9IGNodW5rX3NpemU7Cj4gKyAgICAgICAgICAgIHJldHVy biAoaW50KShkYXRhIC0gZGF0YV9zdGFydCkgKyBEVFNVSERfQ0hVTktfSEVBREVSOwo+ICsgICAg ICAgIH0KPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+IGRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL2R0c3VoZF9jb21tb24uaCBiL2xpYmF2Y29kZWMvZHRzdWhkX2NvbW1vbi5oCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi44YjRlOGNlMmFhCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Y29kZWMvZHRzdWhkX2NvbW1vbi5oCj4gQEAgLTAsMCAr MSw4NCBAQAo+ICsvKgo+ICsgKiBEVFMtVUhEIGNvbW1vbiBhdWRpbyBmcmFtZSBwYXJzaW5nIGNv ZGUKPiArICogQ29weXJpZ2h0IChjKSAyMDIzIFhwZXJpIENvcnBvcmF0aW9uIC8gRFRTLCBJbmMu Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsg KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4g KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZG bXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4gMDIx MTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjaWZuZGVmIEFWQ09ERUNfRFRTVUhEX0NPTU1PTl9I Cj4gKyNkZWZpbmUgQVZDT0RFQ19EVFNVSERfQ09NTU9OX0gKPiArCj4gKyNpbmNsdWRlIDxzdGRp bnQuaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsKPiArI2RlZmluZSBEVFNVSERfTk9OU1lO Q1dPUkQgMHg3MUM0NDJFOAo+ICsjZGVmaW5lIERUU1VIRF9TWU5DV09SRCAgICAweDQwNDExQkYy Cj4gKwo+ICsjZGVmaW5lIERUU1VIRF9NQVhfRlJBTUVfU0laRSAweDEwMDAKPiArCj4gKy8qIFJl dHVybiBjb2RlcyBmcm9tIGR0c3VoZF9mcmFtZSAqLwo+ICtlbnVtIERUU1VIRFN0YXR1cyB7Cj4g KyAgICBEVFNVSERfT0ssCj4gKyAgICBEVFNVSERfSU5DT01QTEVURSwgICAgLyogRW50aXJlIGZy YW1lIG5vdCBpbiBidWZmZXIuICovCj4gKyAgICBEVFNVSERfSU5WQUxJRF9GUkFNRSwgLyogRXJy b3IgcGFyc2luZyBmcmFtZS4gKi8KPiArICAgIERUU1VIRF9OT1NZTkMsICAgICAgICAvKiBObyBz eW5jIGZyYW1lIHByaW9yIHRvIG5vbi1zeW5jIGZyYW1lLiAqLwo+ICsgICAgRFRTVUhEX05VTEws ICAgICAgICAgIC8qIEZ1bmN0aW9uIHBhcmFtZXRlciBtYXkgbm90IGJlIE5VTEwuICovCj4gK307 Cj4gKwo+ICsvKiBSZXR1cm4gc3RyZWFtIGluZm9ybWF0aW9uIGZyb20gYW4gYXVkaW8gZnJhbWUg cGFyc2VkIGJ5IGR0c3VoZF9mcmFtZSwKPiAqLwo+ICt0eXBlZGVmIHN0cnVjdCBEVFNVSEREZXNj cmlwdG9ySW5mbyB7Cj4gKyAgICB1bnNpZ25lZCB2YWxpZDoxOyAvKiBUcnVlIGlmIGRlc2NyaXB0 b3IgaW5mbyBpcyB2YWxpZC4gKi8KPiArICAgIGNoYXIgY29kaW5nX25hbWVbNV07IC8qIEZvdXIg Y2hhcmFjdGVyLCBudWxsIHRlcm0gU2FtcGxlRW50cnkgYm94Cj4gbmFtZS4gKi8KPiArICAgIGlu dCBiYXNlX3NhbXBsZV9mcmVxX2NvZGU7Cj4gKyAgICBpbnQgY2hhbm5lbF9jb3VudDsKPiArICAg IGludCBkZWNvZGVyX3Byb2ZpbGVfY29kZTsKPiArICAgIGludCBmcmFtZV9kdXJhdGlvbl9jb2Rl Owo+ICsgICAgaW50IG1heF9wYXlsb2FkX2NvZGU7Cj4gKyAgICBpbnQgbnVtX3ByZXNfY29kZTsK PiArICAgIGludCByZXBfdHlwZTsKPiArICAgIGludCBzYW1wbGVfcmF0ZTsKPiArICAgIGludCBz YW1wbGVfcmF0ZV9tb2Q7Cj4gKyAgICBpbnQgc2FtcGxlX3NpemU7Cj4gKyAgICBpbnQgY2hhbm5l bF9tYXNrOwo+ICsgICAgdWludDY0X3QgZmZtcGVnX2NoYW5uZWxfbWFzazsKPiArfSBEVFNVSERE ZXNjcmlwdG9ySW5mbzsKPiArCj4gKy8qIFJldHVybiBmcmFtZSBpbmZvcm1hdGlvbiBmcm9tIGFu IGF1ZGlvIGZyYW1lIHBhcnNlZCBieSBkdHN1aGRfZnJhbWUuICovCj4gK3R5cGVkZWYgc3RydWN0 IERUU1VIREZyYW1lSW5mbyB7Cj4gKyAgICBkb3VibGUgZHVyYXRpb247ICAvKiBEdXJhdGlvbiBv ZiBmcmFtZSBpbiBzZWNvbmRzIChzZWNvbmRzIHBlcgo+IGZyYW1lKS4gKi8KPiArICAgIGludCBm cmFtZV9ieXRlczsgIC8qIFNpemUgb2YgZW50aXJlIGZyYW1lIGluIGJ5dGVzLiAqLwo+ICsgICAg aW50IHNhbXBsZV9jb3VudDsgLyogTnVtYmVyIG9mIHNhbXBsZXMgaW4gZnJhbWUgKHNhbXBsZXMg cGVyIGZyYW1lKS4KPiAqLwo+ICsgICAgaW50IHNhbXBsZV9yYXRlOyAgLyogU2FtcGxlIHJhdGUg b2YgZnJhbWUgKHNhbXBsZXMgcGVyIHNlY29uZCkuICovCj4gKyAgICB1bnNpZ25lZCBzeW5jOjE7 ICAvKiBUcnVlIGlmIGZyYW1lIGlzIGEgc3luYyBmcmFtZS4gKi8KPiArfSBEVFNVSERGcmFtZUlu Zm87Cj4gKwo+ICtzdHJ1Y3QgRFRTVUhEOwo+ICt0eXBlZGVmIHN0cnVjdCBEVFNVSEQgRFRTVUhE Owo+ICsKPiArc3RydWN0IERUU1VIRCAqZHRzdWhkX2NyZWF0ZSh2b2lkKTsKPiArdm9pZCBkdHN1 aGRfZGVzdHJveShEVFNVSEQqKTsKPiAraW50IGR0c3VoZF9mcmFtZShEVFNVSEQqLCBjb25zdCB1 aW50OF90ICpkYXRhLCBzaXplX3QgbkRhdGEsCj4gKyAgICAgICAgICAgICAgICAgRFRTVUhERnJh bWVJbmZvKiwgRFRTVUhERGVzY3JpcHRvckluZm8qKTsKPiAraW50IGR0c3VoZF9zdHJtZGF0YV9w YXlsb2FkKGNvbnN0IHVpbnQ4X3QgKmRhdGFfc3RhcnQsIGludCBkYXRhX3NpemUsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnN0cm1kYXRhX3NpemUpOwo+ICsKPiArc3Rh dGljIGlubGluZSBpbnQgZHRzdWhkX2lzX3N5bmN3b3JkKHVpbnQzMl90IHN5bmN3b3JkKQo+ICt7 Cj4gKyAgICByZXR1cm4gc3luY3dvcmQgPT0gRFRTVUhEX05PTlNZTkNXT1JEIHx8IHN5bmN3b3Jk ID09IERUU1VIRF9TWU5DV09SRDsKPiArfQo+ICsKPiArI2VuZGlmIC8qIEFWQ09ERUNfRFRTVUhE X0NPTU1PTl9IICovCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvZHRzdWhkX3BhcnNlci5jIGIv bGliYXZjb2RlYy9kdHN1aGRfcGFyc2VyLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwMDAuLjRjNTUzYjhlNGYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2Rl Yy9kdHN1aGRfcGFyc2VyLmMKPiBAQCAtMCwwICsxLDE0MSBAQAo+ICsvKgo+ICsgKiBEVFMtVUhE IGF1ZGlvIGZyYW1lIHBhcnNpbmcgY29kZQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgWHBlcmkg Q29ycG9yYXRpb24gLyBEVFMsIEluYy4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsg Kgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsg KiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKy8qKgo+ICsg KiBAZmlsZQo+ICsgKiBQYXJzZSByYXcgRFRTLVVIRCBhdWRpbyBmcmFtZSBpbnB1dCBhbmQgcmV0 dXJuIGluZGl2aWR1YWwgYXVkaW8gZnJhbWVzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJkdHN1 aGRfY29tbW9uLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCj4gKyNp bmNsdWRlICJwYXJzZXIuaCIKPiArCj4gKyNkZWZpbmUgRFRTVUhEX0JVRkZFUl9TSVpFIChEVFNV SERfTUFYX0ZSQU1FX1NJWkUgKiAxMjgpCj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBEVFNVSERQYXJz ZUNvbnRleHQgewo+ICsgICAgRFRTVUhEICpkdHN1aGQ7Cj4gKyAgICBpbnQgYnVmX29mZnNldDsK PiArICAgIGludCBidWZfYnl0ZXM7Cj4gKyAgICBpbnQgZnJhbWVfYnl0ZXM7Cj4gKyAgICB1aW50 OF90ICpidWY7Cj4gK30gRFRTVUhEUGFyc2VDb250ZXh0Owo+ICsKPiArc3RhdGljIGF2X2NvbGQg aW50IHBhcnNlcl9pbml0KEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVFNV SERQYXJzZUNvbnRleHQgKnBjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIHBjLT5kdHN1aGQg PSBkdHN1aGRfY3JlYXRlKCk7Cj4gKyAgICBwYy0+YnVmID0gYXZfY2FsbG9jKERUU1VIRF9CVUZG RVJfU0laRSArCj4gQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSwgMSk7Cj4gKyAgICBpZiAo IXBjLT5kdHN1aGQgfHwgIXBjLT5idWYpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcGFyc2VyX2Ns b3NlKEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVFNVSERQYXJzZUNvbnRl eHQgKnBjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGR0c3VoZF9kZXN0cm95KHBjLT5kdHN1 aGQpOwo+ICsgICAgcGMtPmR0c3VoZCA9IE5VTEw7Cj4gKyAgICBhdl9mcmVlcCgmcGMtPmJ1Zik7 Cj4gKyAgICBmZl9wYXJzZV9jbG9zZShzKTsKPiArfQo+ICsKPiArLy8gS2VlcCBkYXRhIGluIGNv bnRpZ3VvdXMgYnVmZmVyIGFzIHJlcXVpcmVkIGJ5IGR0c3VoZF9mcmFtZS4KPiArc3RhdGljIGlu dCBhcHBlbmRfYnVmZmVyKERUU1VIRFBhcnNlQ29udGV4dCAqcGMsIGNvbnN0IHVpbnQ4X3QgKipi dWYsIGludAo+ICpidWZfc2l6ZSwgaW50ICppbnB1dF9jb25zdW1lZCkKPiArewo+ICsgICAgaW50 IGNvcHlfYnl0ZXM7Cj4gKwo+ICsgICAgcGMtPmJ1Zl9vZmZzZXQgKz0gcGMtPmZyYW1lX2J5dGVz Owo+ICsgICAgcGMtPmZyYW1lX2J5dGVzID0gMDsKPiArCj4gKyAgICAvLyBCdWZmZXIgYWxtb3N0 IGZ1bGwsIG1vdmUgcGFydGlhbCBmcmFtZSB0byBzdGFydCBvZiBidWZmZXIgZm9yIG1vcmUKPiBz cGFjZS4KPiArICAgIGlmICgqYnVmX3NpemUgPiAwICYmIHBjLT5idWZfYnl0ZXMgKyAqYnVmX3Np emUgPiBEVFNVSERfQlVGRkVSX1NJWkUpIHsKPiArICAgICAgICBtZW1tb3ZlKHBjLT5idWYsIHBj LT5idWYgKyBwYy0+YnVmX29mZnNldCwgcGMtPmJ1Zl9ieXRlcyk7Cj4gKyAgICAgICAgcGMtPmJ1 Zl9ieXRlcyAtPSBwYy0+YnVmX29mZnNldDsKPiArICAgICAgICBwYy0+YnVmX29mZnNldCA9IDA7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgY29weV9ieXRlcyA9IEZGTUFYKDAsIEZGTUlOKERUU1VIRF9C VUZGRVJfU0laRSAtIHBjLT5idWZfYnl0ZXMsCj4gKmJ1Zl9zaXplKSk7Cj4gKwo+ICsgICAgLy8g QXBwZW5kIGlucHV0IGJ1ZmZlciB0byBvdXIgY29udGV4dC4KPiArICAgIGlmIChjb3B5X2J5dGVz KSB7Cj4gKyAgICAgICAgbWVtY3B5KHBjLT5idWYgKyBwYy0+YnVmX2J5dGVzLCAqYnVmLCBjb3B5 X2J5dGVzKTsKPiArICAgICAgICBwYy0+YnVmX2J5dGVzICs9IGNvcHlfYnl0ZXM7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgLy8gRW5zdXJlIGJ1ZmZlciBzdGFydHMgd2l0aCBhIHN5bmN3b3JkCj4gKyAg ICB3aGlsZSAocGMtPmJ1Zl9vZmZzZXQgKyA0IDwgcGMtPmJ1Zl9ieXRlcyAmJgo+ICFkdHN1aGRf aXNfc3luY3dvcmQoQVZfUkIzMihwYy0+YnVmICsgcGMtPmJ1Zl9vZmZzZXQpKSkKPiArICAgICAg ICBwYy0+YnVmX29mZnNldCsrOwo+ICsKPiArICAgICppbnB1dF9jb25zdW1lZCA9IGNvcHlfYnl0 ZXM7Cj4gKyAgICAqYnVmID0gcGMtPmJ1ZiArIHBjLT5idWZfb2Zmc2V0Owo+ICsgICAgKmJ1Zl9z aXplID0gcGMtPmJ1Zl9ieXRlcyAtIHBjLT5idWZfb2Zmc2V0Owo+ICsKPiArICAgIHJldHVybiBj b3B5X2J5dGVzICYmIHBjLT5idWZfYnl0ZXMgLSBwYy0+YnVmX29mZnNldCA8Cj4gRFRTVUhEX01B WF9GUkFNRV9TSVpFOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlcl9wYXJzZShBVkNvZGVj UGFyc2VyQ29udGV4dCAqcywgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1aW50OF90ICoqcG91dGJ1ZiwgaW50ICpwb3V0YnVmX3NpemUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXpl KQo+ICt7Cj4gKyAgICBEVFNVSERQYXJzZUNvbnRleHQgKnBjID0gcy0+cHJpdl9kYXRhOwo+ICsg ICAgRFRTVUhERnJhbWVJbmZvIGZpOwo+ICsgICAgaW50IGlucHV0X2NvbnN1bWVkID0gMDsKPiAr Cj4gKyAgICBpZiAoYXBwZW5kX2J1ZmZlcihwYywgJmJ1ZiwgJmJ1Zl9zaXplLCAmaW5wdXRfY29u c3VtZWQpKSB7Cj4gKyAgICAgICAgKnBvdXRidWYgPSBOVUxMOwo+ICsgICAgICAgICpwb3V0YnVm X3NpemUgPSAwOwo+ICsgICAgICAgIHJldHVybiBpbnB1dF9jb25zdW1lZDsKPiArICAgIH0KPiAr Cj4gKyAgICBzd2l0Y2ggKGR0c3VoZF9mcmFtZShwYy0+ZHRzdWhkLCBidWYsIGJ1Zl9zaXplLCAm ZmksIE5VTEwpKSB7Cj4gKyAgICBjYXNlIERUU1VIRF9PSzoKPiArICAgICAgICBpZiAoZmkuc2Ft cGxlX2NvdW50KQo+ICsgICAgICAgICAgICBzLT5kdXJhdGlvbiA9IGZpLnNhbXBsZV9jb3VudDsK PiArICAgICAgICBpZiAoZmkuc2FtcGxlX3JhdGUpCj4gKyAgICAgICAgICAgIGF2Y3R4LT5zYW1w bGVfcmF0ZSA9IGZpLnNhbXBsZV9yYXRlOwo+ICsgICAgICAgIGJ1Zl9zaXplID0gcGMtPmZyYW1l X2J5dGVzID0gZmkuZnJhbWVfYnl0ZXM7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIERU U1VIRF9JTkNPTVBMRVRFOgo+ICsgICAgICAgIHBjLT5mcmFtZV9ieXRlcyA9IGJ1Zl9zaXplOwo+ ICsgICAgICAgIGJ1ZiA9IE5VTEw7Cj4gKyAgICAgICAgYnVmX3NpemUgPSAwOwo+ICsgICAgICAg IGJyZWFrOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIlVuYWJsZSB0byBwcm9jZXNzIERUUy1VSEQgZmlsZS4gRmlsZQo+IG1heSBiZSBpbnZh bGlkLlxuIik7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgKnBvdXRidWYgICAgICA9IGJ1ZjsKPiArICAgICpwb3V0YnVmX3NpemUgPSBi dWZfc2l6ZTsKPiArCj4gKyAgICByZXR1cm4gaW5wdXRfY29uc3VtZWQ7Cj4gK30KPiArCj4gK0FW Q29kZWNQYXJzZXIgZmZfZHRzdWhkX3BhcnNlciA9IHsKPiArICAgIC5jb2RlY19pZHMgICAgICA9 IHsgQVZfQ09ERUNfSURfRFRTVUhEIH0sCj4gKyAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2Yo RFRTVUhEUGFyc2VDb250ZXh0KSwKPiArICAgIC5wYXJzZXJfaW5pdCAgICA9IHBhcnNlcl9pbml0 LAo+ICsgICAgLnBhcnNlcl9wYXJzZSAgID0gcGFyc2VyX3BhcnNlLAo+ICsgICAgLnBhcnNlcl9j bG9zZSAgID0gcGFyc2VyX2Nsb3NlLAo+ICt9Owo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Bh cnNlcnMuYyBiL2xpYmF2Y29kZWMvcGFyc2Vycy5jCj4gaW5kZXggZDM1NTgwODAxOC4uZDcyNGM4 YjQwMiAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL3BhcnNlcnMuYwo+ICsrKyBiL2xpYmF2Y29k ZWMvcGFyc2Vycy5jCj4gQEAgLTM3LDYgKzM3LDcgQEAgZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJz ZXIgZmZfZGlyYWNfcGFyc2VyOwo+ICAgZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZG54 aGRfcGFyc2VyOwo+ICAgZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZG9sYnlfZV9wYXJz ZXI7Cj4gICBleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl9kcHhfcGFyc2VyOwo+ICtleHRl cm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl9kdHN1aGRfcGFyc2VyOwo+ICAgZXh0ZXJuIGNvbnN0 IEFWQ29kZWNQYXJzZXIgZmZfZHZhdWRpb19wYXJzZXI7Cj4gICBleHRlcm4gY29uc3QgQVZDb2Rl Y1BhcnNlciBmZl9kdmJzdWJfcGFyc2VyOwo+ICAgZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIg ZmZfZHZkc3ViX3BhcnNlcjsKPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUgYi9s aWJhdmZvcm1hdC9NYWtlZmlsZQo+IGluZGV4IDA0ODY0OTY4OWIuLjQyY2YxOTM0OGYgMTAwNjQ0 Cj4gLS0tIGEvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiArKysgYi9saWJhdmZvcm1hdC9NYWtlZmls ZQo+IEBAIC0xODYsNiArMTg2LDcgQEAgT0JKUy0kKENPTkZJR19EU0lDSU5fREVNVVhFUikgICAg ICAgICAgICArPSBkc2ljaW4ubwo+ICAgT0JKUy0kKENPTkZJR19EU1NfREVNVVhFUikgICAgICAg ICAgICAgICArPSBkc3Mubwo+ICAgT0JKUy0kKENPTkZJR19EVFNIRF9ERU1VWEVSKSAgICAgICAg ICAgICArPSBkdHNoZGRlYy5vCj4gICBPQkpTLSQoQ09ORklHX0RUU19ERU1VWEVSKSAgICAgICAg ICAgICAgICs9IGR0c2RlYy5vIHJhd2RlYy5vCj4gK09CSlMtJChDT05GSUdfRFRTVUhEX0RFTVVY RVIpICAgICAgICAgICAgKz0gZHRzdWhkZGVjLm8KPiAgIE9CSlMtJChDT05GSUdfRFRTX01VWEVS KSAgICAgICAgICAgICAgICAgKz0gcmF3ZW5jLm8KPiAgIE9CSlMtJChDT05GSUdfRFZfTVVYRVIp ICAgICAgICAgICAgICAgICAgKz0gZHZlbmMubwo+ICAgT0JKUy0kKENPTkZJR19EVkJTVUJfREVN VVhFUikgICAgICAgICAgICArPSBkdmJzdWIubyByYXdkZWMubwo+IGRpZmYgLS1naXQgYS9saWJh dmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiBpbmRleCBj YjViNjllOWNkLi4xYjQ4Y2U2MDczIDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1h dHMuYwo+ICsrKyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+IEBAIC0xNDQsNiArMTQ0LDcg QEAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2Rzc19kZW11eGVyOwo+ICAgZXh0ZXJu IGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2R0c19kZW11eGVyOwo+ICAgZXh0ZXJuIGNvbnN0IEZG T3V0cHV0Rm9ybWF0IGZmX2R0c19tdXhlcjsKPiAgIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0 ICBmZl9kdHNoZF9kZW11eGVyOwo+ICtleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHRz dWhkX2RlbXV4ZXI7Cj4gICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHZfZGVtdXhl cjsKPiAgIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl9kdl9tdXhlcjsKPiAgIGV4dGVy biBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9kdmJzdWJfZGVtdXhlcjsKPiBkaWZmIC0tZ2l0IGEv bGliYXZmb3JtYXQvZHRzaGRkZWMuYyBiL2xpYmF2Zm9ybWF0L2R0c2hkZGVjLmMKPiBpbmRleCBh M2RlYTA2NjhmLi42ZTllNzhhMzM1IDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L2R0c2hkZGVj LmMKPiArKysgYi9saWJhdmZvcm1hdC9kdHNoZGRlYy5jCj4gQEAgLTQ2LDcgKzQ2LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgRFRTSEREZW11eENvbnRleHQgewo+ICAgc3RhdGljIGludCBkdHNoZF9wcm9i ZShjb25zdCBBVlByb2JlRGF0YSAqcCkKPiAgIHsKPiAgICAgICBpZiAoQVZfUkI2NChwLT5idWYp ID09IERUU0hESERSKQo+IC0gICAgICAgIHJldHVybiBBVlBST0JFX1NDT1JFX01BWDsKPiArICAg ICAgICByZXR1cm4gQVZQUk9CRV9TQ09SRV9NQVggLSA0OyAvLyBEVFNVSEQgKC5kdHN4KSBmaWxl cyBhbHNvIGhhdmUKPiB0aGlzIHNpZ25hdHVyZS4KPiAgICAgICByZXR1cm4gMDsKPiAgIH0KPiAg IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9kdHN1aGRkZWMuYyBiL2xpYmF2Zm9ybWF0L2R0c3Vo ZGRlYy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5lMTUxNzYz ODJkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9ybWF0L2R0c3VoZGRlYy5jCj4gQEAg LTAsMCArMSwyMTQgQEAKPiArLyoKPiArICogRFRTLVVIRCBhdWRpbyBkZW11eGVyCj4gKyAqIENv cHlyaWdodCAoYykgMjAyMyBYcGVyaSBDb3Jwb3JhdGlvbiAvIERUUywgSW5jLgo+ICsgKgo+ICsg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+IDAyMTEwLTEzMDEgVVNB Cj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIEBmaWxlCj4gKyAqIFJlcG9ydCBEVFMtVUhEIGF1ZGlv IHN0cmVhbSBjb25maWd1cmF0aW9uIGFuZCBleHRyYWN0IHJhdyBwYWNrZXQgZGF0YS4KPiArICov Cj4gKwo+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImxpYmF2Y29kZWMvZHRz dWhkX2NvbW1vbi5oIgo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9wdXRfYml0cy5oIgo+ICsjaW5j bHVkZSAibGliYXZ1dGlsL2ludHJlYWR3cml0ZS5oIgo+ICsKPiArI2RlZmluZSBEVFNVSERfQlVG RkVSX1NJWkUgKDEwMjQgKiAxMDI0KQo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRFRTVUhERGVtdXhD b250ZXh0IHsKPiArICAgIHNpemVfdCBkYXRhX2VuZDsKPiArICAgIHN0cnVjdCBEVFNVSEQgKmR0 c3VoZDsKPiArICAgIHVpbnQ4X3QgKmJ1ZjsKPiArfSBEVFNVSEREZW11eENvbnRleHQ7Cj4gKwo+ ICtzdGF0aWMgaW50IHByb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKQo+ICt7Cj4gKyAgICBpbnQg b2Zmc2V0ID0gZHRzdWhkX3N0cm1kYXRhX3BheWxvYWQocC0+YnVmLCBwLT5idWZfc2l6ZSwgTlVM TCk7Cj4gKyAgICBpbnQgc2NvcmUgPSAwOwo+ICsgICAgc3RydWN0IERUU1VIRCAqaCA9IGR0c3Vo ZF9jcmVhdGUoKTsKPiArCj4gKyAgICBmb3IgKDsgb2Zmc2V0ICsgNCA8IHAtPmJ1Zl9zaXplOyBv ZmZzZXQrKykgewo+ICsgICAgICAgIGlmIChkdHN1aGRfaXNfc3luY3dvcmQoQVZfUkIzMihwLT5i dWYgKyBvZmZzZXQpKSkgewo+ICsgICAgICAgICAgICBpZiAoRFRTVUhEX09LID09IGR0c3VoZF9m cmFtZShoLCBwLT5idWYgKyBvZmZzZXQsIHAtPmJ1Zl9zaXplCj4gLSBvZmZzZXQsIE5VTEwsIE5V TEwpKSB7Cj4gKyAgICAgICAgICAgICAgICBzY29yZSA9IEFWUFJPQkVfU0NPUkVfTUFYIC0gMzsK PiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ ICsgICAgfQo+ICsKPiArICAgIGR0c3VoZF9kZXN0cm95KGgpOwo+ICsgICAgcmV0dXJuIHNjb3Jl Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgcmVhZF9jbG9zZShBVkZvcm1hdENvbnRl eHQgKnMpCj4gK3sKPiArICAgIERUU1VIRERlbXV4Q29udGV4dCAqZHRzeHMgPSBzLT5wcml2X2Rh dGE7Cj4gKwo+ICsgICAgYXZfZnJlZXAoJmR0c3hzLT5idWYpOwo+ICsgICAgZHRzdWhkX2Rlc3Ry b3koZHRzeHMtPmR0c3VoZCk7Cj4gKyAgICBkdHN4cy0+ZHRzdWhkID0gTlVMTDsKPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBmaW5kX2ZpcnN0X3N5bmN3b3JkKERU U1VIRERlbXV4Q29udGV4dCAqZHRzdWhkLCBpbnQgZGF0YV9zdGFydCkKPiArewo+ICsgICAgd2hp bGUgKGRhdGFfc3RhcnQgKyA0IDwgRFRTVUhEX0JVRkZFUl9TSVpFICYmCj4gKyAgICAgICAgIWR0 c3VoZF9pc19zeW5jd29yZChBVl9SQjMyKGR0c3VoZC0+YnVmICsgZGF0YV9zdGFydCkpKSB7Cj4g KyAgICAgICAgZGF0YV9zdGFydCsrOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiBkYXRhX3N0 YXJ0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHdyaXRlX2V4dHJhZGF0YShBVkNvZGVjUGFyYW1l dGVycyAqcGFyLCBEVFNVSEREZXNjcmlwdG9ySW5mbwo+ICpkaSkKPiArewo+ICsgICAgUHV0Qml0 Q29udGV4dCBwYmM7Cj4gKyAgICBpbnQgcmV0Owo+ICsgICAgaW50IHNpemU7Cj4gKyAgICB1aW50 OF90IHVkdHNbMzJdOwo+ICsKPiArICAgIGluaXRfcHV0X2JpdHMoJnBiYywgdWR0cywgc2l6ZW9m KHVkdHMpKTsKPiArICAgIHB1dF9iaXRzMzIoJnBiYywgMCk7IC8vIHVkdHMgYm94IHNpemUKPiAr ICAgIHB1dF9iaXRzKCZwYmMsIDgsICd1Jyk7IC8vIHVkdHMgYm94IHNpZ25hdHVyZQo+ICsgICAg cHV0X2JpdHMoJnBiYywgOCwgJ2QnKTsKPiArICAgIHB1dF9iaXRzKCZwYmMsIDgsICd0Jyk7Cj4g KyAgICBwdXRfYml0cygmcGJjLCA4LCAncycpOwo+ICsgICAgcHV0X2JpdHMoJnBiYywgNiwgZGkt PmRlY29kZXJfcHJvZmlsZV9jb2RlKTsKPiArICAgIHB1dF9iaXRzKCZwYmMsIDIsIGRpLT5mcmFt ZV9kdXJhdGlvbl9jb2RlKTsKPiArICAgIHB1dF9iaXRzKCZwYmMsIDMsIGRpLT5tYXhfcGF5bG9h ZF9jb2RlKTsKPiArICAgIHB1dF9iaXRzKCZwYmMsIDUsIGRpLT5udW1fcHJlc19jb2RlKTsKPiAr ICAgIHB1dF9iaXRzMzIoJnBiYywgIGRpLT5jaGFubmVsX21hc2spOwo+ICsgICAgcHV0X2JpdHMo JnBiYywgMSwgZGktPmJhc2Vfc2FtcGxlX2ZyZXFfY29kZSk7Cj4gKyAgICBwdXRfYml0cygmcGJj LCAyLCBkaS0+c2FtcGxlX3JhdGVfbW9kKTsKPiArICAgIHB1dF9iaXRzKCZwYmMsIDMsIGRpLT5y ZXBfdHlwZSk7Cj4gKyAgICBwdXRfYml0cygmcGJjLCAzLCAwKTsKPiArICAgIHB1dF9iaXRzKCZw YmMsIDEsIDApOwo+ICsgICAgcHV0X2JpdHM2NCgmcGJjLCBkaS0+bnVtX3ByZXNfY29kZSArIDEs IDApOyAvLyBJRCBUYWcgcHJlc2VudCBmb3IKPiBlYWNoIHByZXNlbnRhdGlvbi4KPiArICAgIGZs dXNoX3B1dF9iaXRzKCZwYmMpOyAvLyBieXRlIGFsaWduCj4gKyAgICBzaXplID0gcHV0X2JpdHNf Y291bnQoJnBiYykgPj4gMzsKPiArICAgIEFWX1dCMzIodWR0cywgc2l6ZSk7Cj4gKwo+ICsgICAg cmV0ID0gZmZfYWxsb2NfZXh0cmFkYXRhKHBhciwgc2l6ZSk7Cj4gKyAgICBpZiAocmV0IDwgMCkK PiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIG1lbWNweShwYXItPmV4dHJhZGF0YSwg dWR0cywgc2l6ZSk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg cmVhZF9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBBVklPQ29udGV4dCAq cGIgPSBzLT5wYjsKPiArICAgIEFWU3RyZWFtICpzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywg TlVMTCk7Cj4gKyAgICBEVFNVSEREZW11eENvbnRleHQgKmR0c3VoZCA9IHMtPnByaXZfZGF0YTsK PiArICAgIERUU1VIRERlc2NyaXB0b3JJbmZvIGRpOwo+ICsgICAgRFRTVUhERnJhbWVJbmZvIGZp Owo+ICsgICAgaW50IGJ1Zl9ieXRlczsKPiArICAgIGludCByZXQgPSBEVFNVSERfSU5WQUxJRF9G UkFNRTsKPiArICAgIGludCBkYXRhX3N0YXJ0Owo+ICsKPiArICAgIGlmICghKHBiLT5zZWVrYWJs ZSAmIEFWSU9fU0VFS0FCTEVfTk9STUFMKSkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU8p Owo+ICsKPiArICAgIGR0c3VoZC0+YnVmID0gYXZfbWFsbG9jKERUU1VIRF9CVUZGRVJfU0laRSk7 Cj4gKyAgICBkdHN1aGQtPmR0c3VoZCA9IGR0c3VoZF9jcmVhdGUoKTsKPiArICAgIGlmICghZHRz dWhkLT5idWYgfHwgIWR0c3VoZC0+ZHRzdWhkIHx8ICFzdCkKPiArICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+ICsKPiArICAgIGJ1Zl9ieXRlcyA9IGF2aW9fcmVhZChwYiwgZHRzdWhk LT5idWYsIERUU1VIRF9CVUZGRVJfU0laRSk7Cj4gKyAgICBpZiAoYnVmX2J5dGVzIDwgMCkKPiAr ICAgICAgICByZXR1cm4gYnVmX2J5dGVzOwo+ICsKPiArICAgIGRhdGFfc3RhcnQgPSBkdHN1aGRf c3RybWRhdGFfcGF5bG9hZChkdHN1aGQtPmJ1ZiwgYnVmX2J5dGVzLAo+ICZkdHN1aGQtPmRhdGFf ZW5kKTsKPiArICAgIGR0c3VoZC0+ZGF0YV9lbmQgKz0gZGF0YV9zdGFydDsKPiArICAgIGlmIChk YXRhX3N0YXJ0ID09IDApCj4gKyAgICAgICAgZHRzdWhkLT5kYXRhX2VuZCA9IGF2aW9fc2l6ZShw Yik7IC8vIE5vdCBhIERUU0hESERSIGNodW5rIGZpbGUsCj4gZGVjb2RlIGZyYW1lcyB0byBlbmQg b2YgZmlsZS4KPiArCj4gKyAgICBkYXRhX3N0YXJ0ID0gZmluZF9maXJzdF9zeW5jd29yZChkdHN1 aGQsIGRhdGFfc3RhcnQpOwo+ICsgICAgaWYgKGF2aW9fc2VlayhwYiwgZGF0YV9zdGFydCwgU0VF S19TRVQpIDwgMCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsKPiArICAg IHJldCA9IGR0c3VoZF9mcmFtZShkdHN1aGQtPmR0c3VoZCwgZHRzdWhkLT5idWYgKyBkYXRhX3N0 YXJ0LAo+ICsgICAgICAgIGJ1Zl9ieXRlcyAtIGRhdGFfc3RhcnQsICZmaSwgJmRpKTsKPiArICAg IGlmIChyZXQgIT0gRFRTVUhEX09LIHx8ICFkaS52YWxpZCkgewo+ICsgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcHJvY2VzcyBEVFMtVUhEIGZpbGUuIEZpbGUgbWF5 Cj4gYmUgaW52YWxpZC5cbiIpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB Owo+ICsgICAgfQo+ICsKPiArICAgIGZmc3RyZWFtKHN0KS0+bmVlZF9wYXJzaW5nID0gQVZTVFJF QU1fUEFSU0VfRlVMTF9SQVc7Cj4gKyAgICBzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1F RElBX1RZUEVfQVVESU87Cj4gKyAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID0gcy0+aWZvcm1h dC0+cmF3X2NvZGVjX2lkOwo+ICsgICAgc3QtPmNvZGVjcGFyLT5jaF9sYXlvdXQub3JkZXIgPSBB Vl9DSEFOTkVMX09SREVSX05BVElWRTsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y2hfbGF5b3V0Lm5i X2NoYW5uZWxzID0gZGkuY2hhbm5lbF9jb3VudDsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y2hfbGF5 b3V0LnUubWFzayA9IGRpLmZmbXBlZ19jaGFubmVsX21hc2s7Cj4gKyAgICBzdC0+Y29kZWNwYXIt PmNvZGVjX3RhZyA9IEFWX1JMMzIoZGkuY29kaW5nX25hbWUpOwo+ICsgICAgc3QtPmNvZGVjcGFy LT5mcmFtZV9zaXplID0gNTEyIDw8IGRpLmZyYW1lX2R1cmF0aW9uX2NvZGU7Cj4gKyAgICBzdC0+ Y29kZWNwYXItPnNhbXBsZV9yYXRlID0gZGkuc2FtcGxlX3JhdGU7Cj4gKwo+ICsjaWYgRkZfQVBJ X09MRF9DSEFOTkVMX0xBWU9VVAo+ICtGRl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCj4g KyAgICBzdC0+Y29kZWNwYXItPmNoYW5uZWxzID0gZGkuY2hhbm5lbF9jb3VudDsKPiArICAgIHN0 LT5jb2RlY3Bhci0+Y2hhbm5lbF9sYXlvdXQgPSBkaS5mZm1wZWdfY2hhbm5lbF9tYXNrOwo+ICtG Rl9FTkFCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKPiArI2VuZGlmCj4gKwo+ICsgICAgcmV0ID0g d3JpdGVfZXh0cmFkYXRhKHN0LT5jb2RlY3BhciwgJmRpKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgaWYgKHN0LT5jb2RlY3Bhci0+c2FtcGxl X3JhdGUpCj4gKyAgICAgICAgYXZwcml2X3NldF9wdHNfaW5mbyhzdCwgNjQsIDEsIHN0LT5jb2Rl Y3Bhci0+c2FtcGxlX3JhdGUpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IHJlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKPiAr ewo+ICsgICAgRFRTVUhERGVtdXhDb250ZXh0ICpkdHN1aGQgPSBzLT5wcml2X2RhdGE7Cj4gKyAg ICBpbnQ2NF90IHNpemUsIGxlZnQ7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAgIGxlZnQgPSBk dHN1aGQtPmRhdGFfZW5kIC0gYXZpb190ZWxsKHMtPnBiKTsKPiArICAgIHNpemUgPSBGRk1JTihs ZWZ0LCBEVFNVSERfTUFYX0ZSQU1FX1NJWkUpOwo+ICsgICAgaWYgKHNpemUgPD0gMCkKPiArICAg ICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gKwo+ICsgICAgcmV0ID0gYXZfZ2V0X3BhY2tldChz LT5wYiwgcGt0LCBzaXplKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiBy ZXQ7Cj4gKwo+ICsgICAgcGt0LT5zdHJlYW1faW5kZXggPSAwOwo+ICsKPiArICAgIHJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK0FWSW5wdXRGb3JtYXQgZmZfZHRzdWhkX2RlbXV4ZXIgPSB7Cj4gKyAg ICAubmFtZSAgICAgICAgICAgPSAiZHRzdWhkIiwKPiArICAgIC5sb25nX25hbWUgICAgICA9IE5V TExfSUZfQ09ORklHX1NNQUxMKCJEVFMtVUhEIiksCj4gKyAgICAucHJpdl9kYXRhX3NpemUgPSBz aXplb2YoRFRTVUhERGVtdXhDb250ZXh0KSwKPiArICAgIC5yZWFkX3Byb2JlICAgICA9IHByb2Jl LAo+ICsgICAgLnJlYWRfaGVhZGVyICAgID0gcmVhZF9oZWFkZXIsCj4gKyAgICAucmVhZF9wYWNr ZXQgICAgPSByZWFkX3BhY2tldCwKPiArICAgIC5yZWFkX2Nsb3NlICAgICA9IHJlYWRfY2xvc2Us Cj4gKyAgICAuZmxhZ3MgICAgICAgICAgPSBBVkZNVF9HRU5FUklDX0lOREVYLAo+ICsgICAgLmV4 dGVuc2lvbnMgICAgID0gImR0c3giLAo+ICsgICAgLnJhd19jb2RlY19pZCAgID0gQVZfQ09ERUNf SURfRFRTVUhELAo+ICt9Owo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tb3ZlbmMuYyBiL2xp YmF2Zm9ybWF0L21vdmVuYy5jCj4gaW5kZXggYzM3MDkyMmM3ZC4uZTcyNzQwNzY5NCAxMDA2NDQK PiAtLS0gYS9saWJhdmZvcm1hdC9tb3ZlbmMuYwo+ICsrKyBiL2xpYmF2Zm9ybWF0L21vdmVuYy5j Cj4gQEAgLTc2Miw2ICs3NjIsMjQgQEAgc3RhdGljIGludCBtb3Zfd3JpdGVfZXNkc190YWcoQVZJ T0NvbnRleHQgKnBiLAo+IE1PVlRyYWNrICp0cmFjaykgLy8gQmFzaWMKPiAgICAgICByZXR1cm4g dXBkYXRlX3NpemUocGIsIHBvcyk7Cj4gICB9Cj4gICArc3RhdGljIGludCBtb3Zfd3JpdGVfdWR0 c190YWcoQVZJT0NvbnRleHQgKnBiLCBNT1ZUcmFjayAqdHJhY2spCj4gK3sKPiArICAgIGlmICh0 cmFjay0+dm9zX2xlbiA8IDEyKSB7Cj4gKyAgICAgICAgYXZfbG9nKHBiLCBBVl9MT0dfRVJST1Is Cj4gKyAgICAgICAgICAgICAgICJDYW5ub3Qgd3JpdGUgbW9vdiBhdG9tIGJlZm9yZSBEVFMtVUhE IHBhY2tldHMuIgo+ICsgICAgICAgICAgICAgICAiIFNldCB0aGUgZGVsYXlfbW9vdiBmbGFnIHRv IGZpeCB0aGlzLlxuIik7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAg IH0KPiArCj4gKyAgICAvKiBXcml0ZSB2b3NfZGF0YSBpcyB1ZHRzIGJveC4gKi8KPiArICAgIGlm IChtZW1jbXAodHJhY2stPnZvc19kYXRhICsgNCwgInVkdHMiLCA0KSA9PSAwKSB7Cj4gKyAgICAg ICAgYXZpb193cml0ZShwYiwgdHJhY2stPnZvc19kYXRhLCB0cmFjay0+dm9zX2xlbik7Cj4gKyAg ICAgICAgcmV0dXJuIHRyYWNrLT52b3NfbGVuOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICAgc3RhdGljIGludCBtb3ZfcGNtX2xlX2d0MTYoZW51bSBBVkNvZGVjSUQg Y29kZWNfaWQpCj4gICB7Cj4gICAgICAgcmV0dXJuIGNvZGVjX2lkID09IEFWX0NPREVDX0lEX1BD TV9TMjRMRSB8fAo+IEBAIC0xMzY3LDYgKzEzODUsOCBAQCBzdGF0aWMgaW50IG1vdl93cml0ZV9h dWRpb190YWcoQVZGb3JtYXRDb250ZXh0ICpzLAo+IEFWSU9Db250ZXh0ICpwYiwgTU9WTXV4Q29u dGV4Cj4gICAgICAgICAgIHJldCA9IG1vdl93cml0ZV9kb3BzX3RhZyhzLCBwYiwgdHJhY2spOwo+ ICAgICAgIGVsc2UgaWYgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1RSVUVI RCkKPiAgICAgICAgICAgcmV0ID0gbW92X3dyaXRlX2RtbHBfdGFnKHMsIHBiLCB0cmFjayk7Cj4g KyAgICBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9EVFNVSEQp Cj4gKyAgICAgICAgcmV0ID0gbW92X3dyaXRlX3VkdHNfdGFnKHBiLCB0cmFjayk7Cj4gICAgICAg ZWxzZSBpZiAodGFnID09IE1PVl9NUDRfSVBDTV9UQUcgfHwgdGFnID09IE1PVl9NUDRfRlBDTV9U QUcpIHsKPiAgICAgICAgICAgaWYgKHRyYWNrLT5wYXItPmNoX2xheW91dC5uYl9jaGFubmVscyA+ IDEpCj4gICAgICAgICAgICAgICByZXQgPSBtb3Zfd3JpdGVfY2hubF90YWcocywgcGIsIHRyYWNr KTsKPiBAQCAtMjc4MSw2ICsyODAxLDcgQEAgc3RhdGljIGludCBtb3Zfd3JpdGVfc3RibF90YWco QVZGb3JtYXRDb250ZXh0ICpzLAo+IEFWSU9Db250ZXh0ICpwYiwgTU9WTXV4Q29udGV4dAo+ICAg ICAgIGlmICgodHJhY2stPnBhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU8gfHwK PiAgICAgICAgICAgIHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1RSVUVIRCB8 fAo+ICAgICAgICAgICAgdHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfTVBFR0hf M0RfQVVESU8gfHwKPiArICAgICAgICAgdHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNf SURfRFRTVUhEIHx8Cj4gICAgICAgICAgICB0cmFjay0+cGFyLT5jb2RlY190YWcgPT0gTUtUQUco J3InLCd0JywncCcsJyAnKSkgJiYKPiAgICAgICAgICAgdHJhY2stPmhhc19rZXlmcmFtZXMgJiYg dHJhY2stPmhhc19rZXlmcmFtZXMgPCB0cmFjay0+ZW50cnkpCj4gICAgICAgICAgIG1vdl93cml0 ZV9zdHNzX3RhZyhwYiwgdHJhY2ssIE1PVl9TWU5DX1NBTVBMRSk7Cj4gQEAgLTU2NzMsNiArNTY5 NCwxNCBAQCBzdGF0aWMgdm9pZCBtb3ZfcGFyc2VfdmMxX2ZyYW1lKEFWUGFja2V0ICpwa3QsCj4g TU9WVHJhY2sgKnRyaykKPiAgICAgICB9Cj4gICB9Cj4gICArc3RhdGljIHZvaWQgbW92X3BhcnNl X2R0c3VoZF9mcmFtZShBVlBhY2tldCAqcGt0LCBNT1ZUcmFjayAqdHJrKQo+ICt7Cj4gKyAgICBp ZiAocGt0LT5zaXplID4gNCAmJiBBVl9SQjMyKHBrdC0+ZGF0YSkgPT0gMHg0MDQxMUJGMikgewo+ ICsgICAgICAgIHRyay0+Y2x1c3Rlclt0cmstPmVudHJ5XS5mbGFncyB8PSBNT1ZfU1lOQ19TQU1Q TEU7Cj4gKyAgICAgICAgdHJrLT5oYXNfa2V5ZnJhbWVzKys7Cj4gKyAgICB9Cj4gKyB9Cj4gKwo+ ICAgc3RhdGljIHZvaWQgbW92X3BhcnNlX3RydWVoZF9mcmFtZShBVlBhY2tldCAqcGt0LCBNT1ZU cmFjayAqdHJrKQo+ICAgewo+ICAgICAgIGludCBsZW5ndGg7Cj4gQEAgLTYzNDMsNiArNjM3Miw4 IEBAIGludCBmZl9tb3Zfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQK PiAqcGt0KQo+ICAgICAgICAgICBtb3ZfcGFyc2VfdmMxX2ZyYW1lKHBrdCwgdHJrKTsKPiAgICAg ICB9IGVsc2UgaWYgKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVFJVRUhEKSB7Cj4gICAg ICAgICAgIG1vdl9wYXJzZV90cnVlaGRfZnJhbWUocGt0LCB0cmspOwo+ICsgICAgfSBlbHNlIGlm IChwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0RUU1VIRCkgewo+ICsgICAgICAgIG1vdl9w YXJzZV9kdHN1aGRfZnJhbWUocGt0LCB0cmspOwo+ICAgICAgIH0gZWxzZSBpZiAocGt0LT5mbGFn cyAmIEFWX1BLVF9GTEFHX0tFWSkgewo+ICAgICAgICAgICBpZiAobW92LT5tb2RlID09IE1PREVf TU9WICYmIHBhci0+Y29kZWNfaWQgPT0KPiBBVl9DT0RFQ19JRF9NUEVHMlZJREVPICYmCj4gICAg ICAgICAgICAgICB0cmstPmVudHJ5ID4gMCkgeyAvLyBmb3JjZSBzeW5jIHNhbXBsZSBmb3IgdGhl IGZpcnN0IGtleQo+IGZyYW1lCj4gQEAgLTc4MDAsNiArNzgzMSw3IEBAIHN0YXRpYyBjb25zdCBB VkNvZGVjVGFnIGNvZGVjX21wNF90YWdzW10gPSB7Cj4gICAgICAgeyBBVl9DT0RFQ19JRF9BQzMs ICAgICAgICAgICAgIE1LVEFHKCdhJywgJ2MnLCAnLScsICczJykgfSwKPiAgICAgICB7IEFWX0NP REVDX0lEX0VBQzMsICAgICAgICAgICAgTUtUQUcoJ2UnLCAnYycsICctJywgJzMnKSB9LAo+ICAg ICAgIHsgQVZfQ09ERUNfSURfRFRTLCAgICAgICAgICAgICBNS1RBRygnbScsICdwJywgJzQnLCAn YScpIH0sCj4gKyAgICB7IEFWX0NPREVDX0lEX0RUU1VIRCwgICAgICAgICAgTUtUQUcoJ2QnLCAn dCcsICdzJywgJ3gnKSB9LAo+ICAgICAgIHsgQVZfQ09ERUNfSURfVFJVRUhELCAgICAgICAgICBN S1RBRygnbScsICdsJywgJ3AnLCAnYScpIH0sCj4gICAgICAgeyBBVl9DT0RFQ19JRF9GTEFDLCAg ICAgICAgICAgIE1LVEFHKCdmJywgJ0wnLCAnYScsICdDJykgfSwKPiAgICAgICB7IEFWX0NPREVD X0lEX09QVVMsICAgICAgICAgICAgTUtUQUcoJ08nLCAncCcsICd1JywgJ3MnKSB9LAo+IGRpZmYg LS1naXQgYS9saWJhdmZvcm1hdC92ZXJzaW9uLmggYi9saWJhdmZvcm1hdC92ZXJzaW9uLmgKPiBp bmRleCBjYzU2YjdjZjVjLi4zODRjYmQ0OWNjIDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L3Zl cnNpb24uaAo+ICsrKyBiL2xpYmF2Zm9ybWF0L3ZlcnNpb24uaAo+IEBAIC0zMSw3ICszMSw3IEBA Cj4gICAgI2luY2x1ZGUgInZlcnNpb25fbWFqb3IuaCIKPiAgIC0jZGVmaW5lIExJQkFWRk9STUFU X1ZFUlNJT05fTUlOT1IgICA0Cj4gKyNkZWZpbmUgTElCQVZGT1JNQVRfVkVSU0lPTl9NSU5PUiAg IDUKPiAgICNkZWZpbmUgTElCQVZGT1JNQVRfVkVSU0lPTl9NSUNSTyAxMDEKPiAgICAjZGVmaW5l IExJQkFWRk9STUFUX1ZFUlNJT05fSU5UCj4gQVZfVkVSU0lPTl9JTlQoTElCQVZGT1JNQVRfVkVS U0lPTl9NQUpPUiwgXAo+IC0tCj4gMi4xNy4xCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1w ZWctZGV2ZWxAZmZtcGVnLm9yZwo+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ZmbXBlZy1kZXZlbAo+Cj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVt YWlsCj4gZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vi c2NyaWJlIi4KPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBz Oi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3Jp YmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBl Zy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==