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 1D6B148BFE for ; Wed, 10 Jan 2024 08:53:38 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9335868CEC8; Wed, 10 Jan 2024 10:53:35 +0200 (EET) Received: from mail-pg1-f182.google.com (mail-pg1-f182.google.com [209.85.215.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DB54468CA09 for ; Wed, 10 Jan 2024 10:53:28 +0200 (EET) Received: by mail-pg1-f182.google.com with SMTP id 41be03b00d2f7-5cdf90e5cdeso521805a12.1 for ; Wed, 10 Jan 2024 00:53:28 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704876807; x=1705481607; h=cc: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=9J2y390zCw+nk3q48B6SUtgl1hmeryCwj9fHu7CwAU8=; b=BdkEo7Io8CZmU6BYLgXbPU7Wxur1WScSjuExFq/KDfElljBHwZrWGAJUSIZMP8x5Ne m9aGeBpt0FthamKxS0k3RmuqhRrgAZ8oprfCVvgeM6H0qfll0ywoOJbJyQ0ydQOMeI+A Vvkiz/rgwJMr5AUssFk/zUCEy8c2RLLEx1BNMB3uhPdzhrLmtrcyvYjl1JMe0EZ5rlPq cTPR/OnvDZziyaG5GzGoN4vjDqWaFpJoDdNrdCieJ46GGXNVa1IQ3fn1yNTqbZbbmfyb HRM1Ug8ya6roEXxkAATvUpHS+Vm6+j9bQAJ22Mm7AwzBDX/KgiiRNsWyJEFGXB1wuPsm EXnw== X-Gm-Message-State: AOJu0YztgdG0Myhchl/hr5vkFERjeLNuoY8Jifegdy+swRcCeE/Og1e+ niksR5D1cRAiqP37iF19PkKHd2lZ3/zPK030pmFPJRxbY584TRpkDZyxzgnheng= X-Google-Smtp-Source: AGHT+IFYA2bsoDp6rpDpqTYHo54/Hiy40yZd2z70rpaiCzJcHlrotXzLKc38is5rQNwY8sdYw6nDVdh5Z/pgpfGrBWg= X-Received: by 2002:a17:90a:8501:b0:28d:b7d3:f92c with SMTP id l1-20020a17090a850100b0028db7d3f92cmr1071776pjn.1.1704876806939; Wed, 10 Jan 2024 00:53:26 -0800 (PST) MIME-Version: 1.0 References: <20231209100639.607234-1-marth64@proxyid.net> <20240110084608.1889310-1-marth64@proxyid.net> In-Reply-To: <20240110084608.1889310-1-marth64@proxyid.net> From: Marth64 Date: Wed, 10 Jan 2024 02:53:15 -0600 Message-ID: To: Marth64 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v2] dvdvideo: add DVD-Video demuxer, powered by libdvdnav and libdvdread X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: ffmpeg-devel@ffmpeg.org 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: SSB3aWxsIGFkZCB0aGF0IEkgc3RpbGwgaGFkIHRvIG1haW50YWluIGEgZGVwZW5kZW5jeSBvbiBH RU5QVFMgZm9yIHRoZQppbm5lciBNUEVHIGRlbXV4ZXIuIFRoaXMgaXMgYmVjYXVzZSBkdmRuYXZf Z2V0X2N1cnJlbnRfdGltZSgpIGRvZXMgbm90CnByb3ZpZGUgZXhhY3Qgc3RyZWFtLWxldmVsIFBU Uy4gSG93ZXZlciwgdGhlIGNyYXNoaW5nL2hhbmdpbmcgaXMgZml4ZWQgKGJ5CnBhcnNpbmcgTkFW IHBhY2tldHMpLCBhbmQgdGhlIG91dHB1dCBpcyBwcm9kdWNlZCBzbW9vdGhseS4gR0VOUFRTIGZp bGxzIGluCnRoZSBibGFua3MuCgpJZiBhbnlvbmUgY2FuIHRoaW5rIG9mIGEgYmV0dGVyIHdheSwg cGxlYXNlIGxldCBtZSBrbm93LiBSaWdodCBub3csIGl0CndvcmtzIHdlbGwuCgpPbiBXZWQsIEph biAxMCwgMjAyNCBhdCAyOjQ34oCvQU0gTWFydGg2NCA8bWFydGg2NEBwcm94eWlkLm5ldD4gd3Jv dGU6Cgo+IER1c3Qgb2ZmIHRob3NlIG9sZCBEVkQgZGlzY3MhCj4KPiBUaGlzIHZlcnNpb24gaXMg Z3JlYXRseSBzaW1wbGlmaWVkIGFuZCBpbXByb3ZlZCBmcm9tIHRoZSBwYXRjaCBzdWJtaXR0ZWQK PiBpbiBEZWNlbWJlci4KPiBEaXNjb250aW51aXR5IGlzc3VlcyBhcmUgcmVzb2x2ZWQsIGFuZCBt YW55IGRpc2NzIHNob3VsZCB3b3JrIHNtb290aGx5IG91dAo+IG9mIHRoZSBib3guCj4gQWxzbywg R1BMIHNlY3RvciB2YWxpZGF0aW9uIGNvZGUgaXMgcmVtb3ZlZC4KPgo+IEJhc2ljIFVzYWdlOgo+ IGZmbXBlZyAtZiBkdmR2aWRlbyAtdGl0bGUgMSAtaSBQQVRIX1RPX0RWRF9TVFJVQ1RVUkUgLi4u Cj4KPiBZb3Ugd2lsbCBoYXZlIHRvIHNldCB5b3VyIG93biB0aXRsZSBudW1iZXIsIGFsdGhvdWdo IHRoZSBkZWZhdWx0IHZhbHVlICgxKQo+IGdpdmVzIGdvb2QgY292ZXJhZ2UuCj4gTm90ZSB0aGF0 IHRoaXMgZGVtdXhlciB3aWxsIHByb2Nlc3Mgb25lIFBHQyBvbmx5LiBJZiB5b3UgYXJlIHdvcmtp bmcgd2l0aAo+IGEgbXVsdGktUEdDIHRpdGxlIG9yCj4gc3RyYW5nZSBhdXRob3JpbmcsIHlvdSBt YXkgc3BlY2lmeSBhbmQgdGFyZ2V0IGFuIGV4YWN0IFBHQy9QRyAoc2VlCj4gb3B0aW9ucykuCj4K PiBLbm93biBpc3N1ZXM6Cj4gKiBDaGFwdGVyIHBvaW50cyBhcmUgbm90IHByZWNpc2UsIHRoaXMg aXMgaGlnaGVzdCBwcmlvcml0eSB0byBmaXgKPiAqIFN1YnRpdGxlIHBhbGV0dGUgc3VwcG9ydCB3 aWxsIGNvbWUgaW4gdGhlIG5leHQgcGF0Y2hzZXQgKHRvIGNvbnNvbGlkYXRlCj4gc2hhcmVkIGNv ZGUpCj4gKiBTb21lIG9kZGx5IGF1dGhvcmVkIGRpc2NzIHdpdGggMSBjZWxsIGFuZCBhIGNvbW1h bmQgbGluayBiYWNrIHRvIGl0c2VsZgo+IHdpbGwgbG9vcCBpbmZpbml0ZWx5LAo+IEkgYW0gZGVi dWdnaW5nIHRoaXMgc2NlbmFyaW8uCj4KPiBOb3QgaW1wbGVtZW50ZWQ6Cj4gKiBTaHVmZmxlIFBH QyBtb2RlLCBtZW51cywgb3IgcmFyZWx5IHVzZWQgRFZEIGZlYXR1cmVzIGxpa2Uga2FyYW9rZQo+ IGV4dGVuc2lvbnMKPiAqIFNERFMgY29kZWMgaXMgbm90IHN1cHBvcnRlZCwgYXMgSSBkb24ndCBo YXZlIGFueSBtYXRlcmlhbCB0byB0ZXN0IGl0IHdpdGgKPiAqIFNlZWtpbmcgYnkgdGltZSBpcyBh IGxvdyBwcmlvcml0eSBhdCB0aGlzIHRpbWUKPiAqIFByb2Jpbmcgd2lsbCBjb21lIGJ1dCBJIGhh dmUgc29tZSBjb25jZXJucyB0byB0aGluayB0aHJvdWdoIGZpcnN0Cj4KPiBTaWduZWQtb2ZmLWJ5 OiBNYXJ0aDY0IDxtYXJ0aDY0QHByb3h5aWQubmV0Pgo+IC0tLQo+ICBDaGFuZ2Vsb2cgICAgICAg ICAgICAgICAgIHwgICAgMSArCj4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgfCAgICA4ICsK PiAgbGliYXZmb3JtYXQvTWFrZWZpbGUgICAgICB8ICAgIDEgKwo+ICBsaWJhdmZvcm1hdC9hbGxm b3JtYXRzLmMgIHwgICAgMSArCj4gIGxpYmF2Zm9ybWF0L2F2bGFuZ3VhZ2UuYyAgfCAgIDEwICst Cj4gIGxpYmF2Zm9ybWF0L2R2ZHZpZGVvZGVjLmMgfCAxMDIyICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiAgNiBmaWxlcyBjaGFuZ2VkLCAxMDQxIGluc2VydGlvbnMoKyks IDIgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9kdmR2aWRl b2RlYy5jCj4KPiBkaWZmIC0tZ2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdlbG9nCj4gaW5kZXggNWIy ODk5ZDA1Yi4uMWIzNzdmZWQyZiAxMDA2NDQKPiAtLS0gYS9DaGFuZ2Vsb2cKPiArKysgYi9DaGFu Z2Vsb2cKPiBAQCAtMTgsNiArMTgsNyBAQCB2ZXJzaW9uIDxuZXh0PjoKPiAgLSBsYXZ1L2V2YWw6 IGludHJvZHVjZSByYW5kb21pKCkgZnVuY3Rpb24gaW4gZXhwcmVzc2lvbnMKPiAgLSBWVkMgZGVj b2Rlcgo+ICAtIGZzeW5jIGZpbHRlcgo+ICstIERWRC1WaWRlbyBkZW11eGVyLCBwb3dlcmVkIGJ5 IGxpYmR2ZG5hdiBhbmQgbGliZHZkcmVhZAo+Cj4gIHZlcnNpb24gNi4xOgo+ICAtIGxpYmFyaWJj YXB0aW9uIGRlY29kZXIKPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gaW5k ZXggZTg3YTA5Y2U4My4uMWYyMWY0ZjFjMiAxMDA3NTUKPiAtLS0gYS9jb25maWd1cmUKPiArKysg Yi9jb25maWd1cmUKPiBAQCAtMjI3LDYgKzIyNyw4IEBAIEV4dGVybmFsIGxpYnJhcnkgc3VwcG9y dDoKPiAgICAtLWVuYWJsZS1saWJkYXZzMiAgICAgICAgZW5hYmxlIEFWUzIgZGVjb2Rpbmcgdmlh IGxpYmRhdnMyIFtub10KPiAgICAtLWVuYWJsZS1saWJkYzEzOTQgICAgICAgZW5hYmxlIElJREMt MTM5NCBncmFiYmluZyB1c2luZyBsaWJkYzEzOTQKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYW5kIGxpYnJhdzEzOTQgW25vXQo+ICsgIC0tZW5hYmxlLWxpYmR2ZG5hdiAgICAgICBlbmFi bGUgbGliZHZkbmF2LCBuZWVkZWQgZm9yIERWRCBkZW11eGluZyBbbm9dCj4gKyAgLS1lbmFibGUt bGliZHZkcmVhZCAgICAgICBlbmFibGUgbGliZHZkcmVhZCwgbmVlZGVkIGZvciBEVkQgZGVtdXhp bmcKPiBbbm9dCj4gICAgLS1lbmFibGUtbGliZmRrLWFhYyAgICAgIGVuYWJsZSBBQUMgZGUvZW5j b2RpbmcgdmlhIGxpYmZkay1hYWMgW25vXQo+ICAgIC0tZW5hYmxlLWxpYmZsaXRlICAgICAgICBl bmFibGUgZmxpdGUgKHZvaWNlIHN5bnRoZXNpcykgc3VwcG9ydCB2aWEKPiBsaWJmbGl0ZSBbbm9d Cj4gICAgLS1lbmFibGUtbGliZm9udGNvbmZpZyAgIGVuYWJsZSBsaWJmb250Y29uZmlnLCB1c2Vm dWwgZm9yIGRyYXd0ZXh0Cj4gZmlsdGVyIFtub10KPiBAQCAtMTgwNiw2ICsxODA4LDggQEAgRVhU RVJOQUxfTElCUkFSWV9HUExfTElTVD0iCj4gICAgICBmcmVpMHIKPiAgICAgIGxpYmNkaW8KPiAg ICAgIGxpYmRhdnMyCj4gKyAgICBsaWJkdmRuYXYKPiArICAgIGxpYmR2ZHJlYWQKPiAgICAgIGxp YnJ1YmJlcmJhbmQKPiAgICAgIGxpYnZpZHN0YWIKPiAgICAgIGxpYngyNjQKPiBAQCAtMzUxOSw2 ICszNTIzLDggQEAgZHRzX2RlbXV4ZXJfc2VsZWN0PSJkY2FfcGFyc2VyIgo+ICBkdHNoZF9kZW11 eGVyX3NlbGVjdD0iZGNhX3BhcnNlciIKPiAgZHZfZGVtdXhlcl9zZWxlY3Q9ImR2cHJvZmlsZSIK PiAgZHZfbXV4ZXJfc2VsZWN0PSJkdnByb2ZpbGUiCj4gK2R2ZHZpZGVvX2RlbXV4ZXJfc2VsZWN0 PSJtcGVncHNfZGVtdXhlciIKPiArZHZkdmlkZW9fZGVtdXhlcl9kZXBzPSJsaWJkdmRuYXYgbGli ZHZkcmVhZCIKPiAgZHhhX2RlbXV4ZXJfc2VsZWN0PSJyaWZmZGVjIgo+ICBlYWMzX2RlbXV4ZXJf c2VsZWN0PSJhYzNfcGFyc2VyIgo+ICBldmNfZGVtdXhlcl9zZWxlY3Q9ImV2Y19mcmFtZV9tZXJn ZV9ic2YgZXZjX3BhcnNlciIKPiBAQCAtNjc2MCw2ICs2NzY2LDggQEAgZW5hYmxlZCBsaWJkYXYx ZCAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcKPiBsaWJkYXYxZCAiZGF2MWQgPj0gMC41 LjAiICJkYXYxZAo+ICBlbmFibGVkIGxpYmRhdnMyICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2Nv bmZpZyBsaWJkYXZzMiAiZGF2czIgPj0gMS42LjAiCj4gZGF2czIuaCBkYXZzMl9kZWNvZGVyX29w ZW4KPiAgZW5hYmxlZCBsaWJkYzEzOTQgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGli ZGMxMzk0IGxpYmRjMTM5NC0yCj4gZGMxMzk0L2RjMTM5NC5oIGRjMTM5NF9uZXcKPiAgZW5hYmxl ZCBsaWJkcm0gICAgICAgICAgICAmJiBjaGVja19wa2dfY29uZmlnIGxpYmRybSBsaWJkcm0geGY4 NmRybS5oCj4gZHJtR2V0VmVyc2lvbgo+ICtlbmFibGVkIGxpYmR2ZG5hdiAgICAgICAgICYmIHJl cXVpcmVfcGtnX2NvbmZpZyBsaWJkdmRuYXYgImR2ZG5hdiA+PQo+IDYuMS4xIiBkdmRuYXYvZHZk bmF2LmggZHZkbmF2X29wZW4yCj4gK2VuYWJsZWQgbGliZHZkcmVhZCAgICAgICAgJiYgcmVxdWly ZV9wa2dfY29uZmlnIGxpYmR2ZHJlYWQgImR2ZHJlYWQgPj0KPiA2LjEuMiIgZHZkcmVhZC9kdmRf cmVhZGVyLmggRFZET3BlbjIgLWxkdmRyZWFkCj4gIGVuYWJsZWQgbGliZmRrX2FhYyAgICAgICAg JiYgeyBjaGVja19wa2dfY29uZmlnIGxpYmZka19hYWMgZmRrLWFhYwo+ICJmZGstYWFjL2FhY2Vu Y19saWIuaCIgYWFjRW5jT3BlbiB8fAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eyByZXF1aXJlIGxpYmZka19hYWMgZmRrLWFhYy9hYWNlbmNfbGliLmgKPiBhYWNFbmNPcGVuIC1s ZmRrLWFhYyAmJgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuICJ1c2lu ZyBsaWJmZGsgd2l0aG91dCBwa2ctY29uZmlnIjsKPiB9IH0KPiBkaWZmIC0tZ2l0IGEvbGliYXZm b3JtYXQvTWFrZWZpbGUgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQo+IGluZGV4IDU4MWUzNzhkOTUu LjNjMWNiMjFmZTIgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiArKysgYi9s aWJhdmZvcm1hdC9NYWtlZmlsZQo+IEBAIC0xOTIsNiArMTkyLDcgQEAgT0JKUy0kKENPTkZJR19E VFNfTVVYRVIpICAgICAgICAgICAgICAgICArPSByYXdlbmMubwo+ICBPQkpTLSQoQ09ORklHX0RW X01VWEVSKSAgICAgICAgICAgICAgICAgICs9IGR2ZW5jLm8KPiAgT0JKUy0kKENPTkZJR19EVkJT VUJfREVNVVhFUikgICAgICAgICAgICArPSBkdmJzdWIubyByYXdkZWMubwo+ICBPQkpTLSQoQ09O RklHX0RWQlRYVF9ERU1VWEVSKSAgICAgICAgICAgICs9IGR2YnR4dC5vIHJhd2RlYy5vCj4gK09C SlMtJChDT05GSUdfRFZEVklERU9fREVNVVhFUikgICAgICAgICAgKz0gZHZkdmlkZW9kZWMubwo+ ICBPQkpTLSQoQ09ORklHX0RYQV9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IGR4YS5vCj4gIE9C SlMtJChDT05GSUdfRUFfQ0RBVEFfREVNVVhFUikgICAgICAgICAgKz0gZWFjZGF0YS5vCj4gIE9C SlMtJChDT05GSUdfRUFfREVNVVhFUikgICAgICAgICAgICAgICAgKz0gZWxlY3Ryb25pY2FydHMu bwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9saWJhdmZvcm1hdC9h bGxmb3JtYXRzLmMKPiBpbmRleCBjZTZiZTVmMDRkLi5lYTg4ZDRjMDk0IDEwMDY0NAo+IC0tLSBh L2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+ICsrKyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMu Ywo+IEBAIC0xNTAsNiArMTUwLDcgQEAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2R2 X2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl9kdl9tdXhlcjsKPiAg ZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2R2YnN1Yl9kZW11eGVyOwo+ICBleHRlcm4g Y29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHZidHh0X2RlbXV4ZXI7Cj4gK2V4dGVybiBjb25zdCBB VklucHV0Rm9ybWF0ICBmZl9kdmR2aWRlb19kZW11eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJbnB1 dEZvcm1hdCAgZmZfZHhhX2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBm Zl9lYV9kZW11eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZWFfY2RhdGFf ZGVtdXhlcjsKPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYXZsYW5ndWFnZS5jIGIvbGliYXZm b3JtYXQvYXZsYW5ndWFnZS5jCj4gaW5kZXggNzgyYTU4YWRiMi4uMjAyZDlhYTgzNSAxMDA2NDQK PiAtLS0gYS9saWJhdmZvcm1hdC9hdmxhbmd1YWdlLmMKPiArKysgYi9saWJhdmZvcm1hdC9hdmxh bmd1YWdlLmMKPiBAQCAtMjksNyArMjksNyBAQCB0eXBlZGVmIHN0cnVjdCBMYW5nRW50cnkgewo+ ICAgICAgdWludDE2X3QgbmV4dF9lcXVpdmFsZW50Owo+ICB9IExhbmdFbnRyeTsKPgo+IC1zdGF0 aWMgY29uc3QgdWludDE2X3QgbGFuZ190YWJsZV9jb3VudHNbXSA9IHsgNDg0LCAyMCwgMTg0IH07 Cj4gK3N0YXRpYyBjb25zdCB1aW50MTZfdCBsYW5nX3RhYmxlX2NvdW50c1tdID0geyA0ODQsIDIw LCAxOTAgfTsKPiAgc3RhdGljIGNvbnN0IHVpbnQxNl90IGxhbmdfdGFibGVfb2Zmc2V0c1tdID0g eyAwLCA0ODQsIDUwNCB9Owo+Cj4gIHN0YXRpYyBjb25zdCBMYW5nRW50cnkgbGFuZ190YWJsZVtd ID0gewo+IEBAIC01MzksNyArNTM5LDcgQEAgc3RhdGljIGNvbnN0IExhbmdFbnRyeSBsYW5nX3Rh YmxlW10gPSB7Cj4gICAgICAvKjA1MDEqLyB7ICJzbGsiLCAgNjQ3IH0sCj4gICAgICAvKjA1MDIq LyB7ICJzcWkiLCAgNjUyIH0sCj4gICAgICAvKjA1MDMqLyB7ICJ6aG8iLCAgNjg2IH0sCj4gLSAg ICAvKi0tLS0tIEFWX0xBTkdfSVNPNjM5XzEgZW50cmllcyAoMTg0KSAtLS0tLSovCj4gKyAgICAv Ki0tLS0tIEFWX0xBTkdfSVNPNjM5XzEgZW50cmllcyAoMTkwKSAtLS0tLSovCj4gICAgICAvKjA1 MDQqLyB7ICJhYSIgLCAgICAwIH0sCj4gICAgICAvKjA1MDUqLyB7ICJhYiIgLCAgICAxIH0sCj4g ICAgICAvKjA1MDYqLyB7ICJhZSIgLCAgIDMzIH0sCj4gQEAgLTcyNCw2ICs3MjQsMTIgQEAgc3Rh dGljIGNvbnN0IExhbmdFbnRyeSBsYW5nX3RhYmxlW10gPSB7Cj4gICAgICAvKjA2ODUqLyB7ICJ6 YSIgLCAgNDc4IH0sCj4gICAgICAvKjA2ODYqLyB7ICJ6aCIgLCAgIDc4IH0sCj4gICAgICAvKjA2 ODcqLyB7ICJ6dSIgLCAgNDgwIH0sCj4gKyAgICAvKjA2ODgqLyB7ICJpbiIgLCAgMTk1IH0sIC8q IGRlcHJlY2F0ZWQgKi8KPiArICAgIC8qMDY4OSovIHsgIml3IiAsICAxNzIgfSwgLyogZGVwcmVj YXRlZCAqLwo+ICsgICAgLyowNjkwKi8geyAiamkiICwgIDQ3MiB9LCAvKiBkZXByZWNhdGVkICov Cj4gKyAgICAvKjA2OTEqLyB7ICJqdyIgLCAgMjAyIH0sIC8qIGRlcHJlY2F0ZWQgKi8KPiArICAg IC8qMDY5MiovIHsgIm1vIiAsICAzNTggfSwgLyogZGVwcmVjYXRlZCAqLwo+ICsgICAgLyowNjkz Ki8geyAic2giICwgIDY5MyB9LCAvKiBkZXByZWNhdGVkIChubyBlcXVpdmFsZW50KSAqLwo+ICAg ICAgeyAiIiwgMCB9Cj4gIH07Cj4KPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvZHZkdmlkZW9k ZWMuYyBiL2xpYmF2Zm9ybWF0L2R2ZHZpZGVvZGVjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAuLmM5OWFkYjBkNzAKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGli YXZmb3JtYXQvZHZkdmlkZW9kZWMuYwo+IEBAIC0wLDAgKzEsMTAyMiBAQAo+ICsvKgo+ICsgKiBE VkQtVmlkZW8gZGVtdXhlciwgcG93ZXJlZCBieSBsaWJkdmRuYXYgYW5kIGxpYmR2ZHJlYWQKPiAr ICogQXV0aG9yOiBNYXJ0aDY0IDxtYXJ0aDY0QHByb3h5aWQubmV0Pgo+ICsgKgo+ICsgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiAr ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+IDAyMTEwLTEzMDEgVVNBCj4gKyAq Lwo+ICsKPiArLyoqCj4gKyAqIERWRC1WaWRlbyBpcyBub3QgYSBkaXJlY3RseSBhY2Nlc3NpYmxl LCBsaW5lYXIgY29udGFpbmVyIGZvcm1hdCBpbiB0aGUKPiArICogdHJhZGl0aW9uYWwgc2Vuc2Uu IEluc3RlYWQsIGl0IGFsbG93cyBmb3IgY29tcGxleCBhbmQgcHJvZ3JhbW1hdGljCj4gKyAqIHBs YXliYWNrIG9mIGNhcmVmdWxseSBtdXhlZCBzdHJlYW1zLiBBIHR5cGljYWwgRFZEIHBsYXllciBy ZWxpZXMgb24KPiArICogdXNlciBHVUkgaW50ZXJhY3Rpb24gdG8gZHJpdmUgdGhlIGRpcmVjdGlv biBvZiB0aGUgZGVtdXhpbmcuCj4gKyAqIFVsdGltYXRlbHksIHRoZSBsb2dpY2FsIHBsYXliYWNr IHNlcXVlbmNlIGlzIGRlZmluZWQgYnkgYSB0aXRsZSdzIFBHQwo+ICsgKiBhbmQgYSB1c2VyIHNl bGVjdGVkICJhbmdsZSIuIEFuIGFkZGl0aW9uYWwgbGF5ZXIgb2YgY29udHJvbCBpcyBkZWZpbmVk Cj4gYnkKPiArICogTkFWIHBhY2tldHMgaW4gdGhlIE1QRUctUFMsIGJ1dCBhcyB0aGVzZSBhcmUg cHJvY2Vzc2VkIGJ5IGxpYmR2ZG5hdiwKPiArICogdGhleSBhcmUgd2l0aGVsZCBmcm9tIHRoZSBv dXRwdXQgb2YgdGhpcyBkZW11eGVyLgo+ICsgKgo+ICsgKiBUaGVyZWZvcmUsIHRoZSBoaWdoLWxl dmVsIGFwcHJvYWNoIGlzIGFzIGZvbGxvd3M6Cj4gKyAqIDEpIE9wZW4gdGhlIHZvbHVtZSB3aXRo IGxpYmR2ZHJlYWQKPiArICogMikgR2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VyLXJl cXVlc3RlZCB0aXRsZSBhbmQgUEdDCj4gY29vcmRpbmF0ZXMKPiArICogMykgUmVxdWVzdCBwbGF5 YmFjayBhdCB0aGUgY29vcmRpbmF0ZXMgYW5kIGNob3NlbiBhbmdsZSB3aXRoIGxpYmR2ZG5hdgo+ ICsgKiA0KSBTZWVrIHBsYXliYWNrIHRvIGZpcnN0IGNlbGwgYXQgdGhlIGNvb3JkaW5hdGVzIChz a2lwcGluZyBzdGlsbHMsCj4gZXRjLikKPiArICogNSkgQmVnaW4gdGhlIHBsYXliYWNrIChyZWFk aW5nIGFuZCBkZW11eGluZykgb2YgTVBFRy1QUyBibG9ja3MKPiArICogNikgRW5kIHBsYXliYWNr IGlmIHRoZSBQR0Mgb3IgYW5nbGUgY2hhbmdlLCBvciBuYXYgbGVhZHMgdG8gYSBtZW51IG9yCj4g YmFja3dhcmRzCj4gKyAqIDcpIENsb3NlIHJlc291cmNlcwo+ICsgKiovCj4gKwo+ICsjaW5jbHVk ZSA8ZHZkcmVhZC9kdmRfcmVhZGVyLmg+Cj4gKyNpbmNsdWRlIDxkdmRyZWFkL2lmb19yZWFkLmg+ Cj4gKyNpbmNsdWRlIDxkdmRyZWFkL2lmb190eXBlcy5oPgo+ICsjaW5jbHVkZSA8ZHZkcmVhZC9u YXZfcmVhZC5oPgo+ICsjaW5jbHVkZSA8ZHZkbmF2L2R2ZG5hdi5oPgo+ICsKPiArI2luY2x1ZGUg ImxpYmF2dXRpbC9hdnV0aWwuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUu aCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9v cHQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9zYW1wbGVmbXQuaCIKPiArI2luY2x1ZGUgImxp YmF2dXRpbC90aW1lc3RhbXAuaCIKPiArCj4gKyNpbmNsdWRlICJsaWJhdmNvZGVjL2F2Y29kZWMu aCIKPiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2aW9faW50ZXJuYWwuaCIKPiArI2luY2x1ZGUg ImxpYmF2Zm9ybWF0L2F2bGFuZ3VhZ2UuaCIKPiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2Zm9y bWF0LmgiCj4gKyNpbmNsdWRlICJsaWJhdmZvcm1hdC9kZW11eC5oIgo+ICsjaW5jbHVkZSAibGli YXZmb3JtYXQvaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L3VybC5oIgo+ICsK PiArI2RlZmluZSBEVkRWSURFT19NQVhfUFNfU0VBUkNIX0JMT0NLUyAgICAgICAgICAgICAgICAg ICAxMjgKPiArI2RlZmluZSBEVkRWSURFT19CTE9DS19TSVpFICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAyMDQ4Cj4gKyNkZWZpbmUgRFZEVklERU9fVElNRV9CQVNFX1EgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKEFWUmF0aW9uYWwpIHsgMSwKPiA5MDAwMCB9Cj4gKyNkZWZpbmUgRFZE VklERU9fUFRTX1dSQVBfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMzIgLyogRFZEIHVz ZXMgMzIKPiAoUEVTIGFsbG93cyAzMykgKi8KPiArCj4gKyNkZWZpbmUgRFZEVklERU9fU1VCUF9D TFVUX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKPiArI2RlZmluZSBEVkRWSURFT19T VUJQX0NMVVRfU0laRQo+ICBEVkRWSURFT19TVUJQX0NMVVRfTEVOICogc2l6ZW9mKHVpbnQzMl90 KQo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRFZEVmlkZW9WVFNWaWRlb1N0cmVhbUVudHJ5IHsKPiAr ICAgIGludCBzdGFydGNvZGU7Cj4gKyAgICBlbnVtIEFWQ29kZWNJRCBjb2RlY19pZDsKPiArICAg IGludCB3aWR0aDsKPiArICAgIGludCBoZWlnaHQ7Cj4gKyAgICBBVlJhdGlvbmFsIGRhcjsKPiAr ICAgIEFWUmF0aW9uYWwgZnJhbWVyYXRlOwo+ICsgICAgaW50IGhhc19jYzsKPiArfSBEVkRWaWRl b1ZUU1ZpZGVvU3RyZWFtRW50cnk7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBEVkRWaWRlb1BHQ0F1 ZGlvU3RyZWFtRW50cnkgewo+ICsgICAgaW50IHN0YXJ0Y29kZTsKPiArICAgIGVudW0gQVZDb2Rl Y0lEIGNvZGVjX2lkOwo+ICsgICAgaW50IHNhbXBsZV9mbXQ7Cj4gKyAgICBpbnQgc2FtcGxlX3Jh dGU7Cj4gKyAgICBpbnQgYml0X2RlcHRoOwo+ICsgICAgaW50IG5iX2NoYW5uZWxzOwo+ICsgICAg QVZDaGFubmVsTGF5b3V0IGNoX2xheW91dDsKPiArICAgIGNoYXIgKmxhbmdfaXNvOwo+ICt9IERW RFZpZGVvUEdDQXVkaW9TdHJlYW1FbnRyeTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IERWRFZpZGVv UEdDU3VidGl0bGVTdHJlYW1FbnRyeSB7Cj4gKyAgICBpbnQgc3RhcnRjb2RlOwo+ICsgICAgdWlu dDMyX3QgKmNsdXQ7Cj4gKyAgICBjaGFyICpsYW5nX2lzbzsKPiArfSBEVkRWaWRlb1BHQ1N1YnRp dGxlU3RyZWFtRW50cnk7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBEVkRWaWRlb0RlbXV4Q29udGV4 dCB7Cj4gKyAgICBjb25zdCBBVkNsYXNzICAgICAgICAgICAgICAgKmNsYXNzOwo+ICsKPiArICAg IC8qIG9wdGlvbnMgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdGl0 bGU7ICAgICAgICAgIC8qIHRoZSB1c2VyLXByb3ZpZGVkCj4gdGl0bGUgbnVtYmVyICgxLWluZGV4 ZWQpICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3B0dDsgICAgICAg ICAgICAvKiB0aGUgdXNlci1wcm92aWRlZAo+IFBUVCBudW1iZXIgKDEtaW5kZXhlZCkgKi8KPiAr ICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcGdjOyAgICAgICAgICAgIC8qIHRo ZSB1c2VyLXByb3ZpZGVkCj4gUEdDIG51bWJlciAoMS1pbmRleGVkKSAqLwo+ICsgICAgaW50ICAg ICAgICAgICAgICAgICAgICAgICAgIG9wdF9wZzsgICAgICAgICAgICAgLyogdGhlIHVzZXItcHJv dmlkZWQKPiBQRyBudW1iZXIgKDEtaW5kZXhlZCkgKi8KPiArICAgIGludCAgICAgICAgICAgICAg ICAgICAgICAgICBvcHRfYW5nbGU7ICAgICAgICAgIC8qIHRoZSB1c2VyLXByb3ZpZGVkCj4gYW5n bGUgbnVtYmVyICgxLWluZGV4ZWQpICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAg ICAgb3B0X3JlZ2lvbjsgICAgICAgICAvKiB0aGUgdXNlci1wcm92aWRlZAo+IHJlZ2lvbiBkaWdp dCAqLwo+ICsKPiArICAgIC8qIHN1YmRlbXV4ICovCj4gKyAgICBjb25zdCBBVklucHV0Rm9ybWF0 ICAgICAgICAgKm1wZWdfZm10OyAgICAgICAgICAvKiBpbm5lciBNUEVHLVBTCj4gKFZPQikgZGVt dXhlciAqLwo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICAgICAgICAgICAgICptcGVnX2N0eDsgICAg ICAgICAgLyogY29udGV4dCBmb3IgaW5uZXIKPiBkZW11eGVyICovCj4gKyAgICB1aW50OF90ICAg ICAgICAgICAgICAgICAgICAgKm1wZWdfYnVmOyAgICAgICAgICAvKiBidWZmZXIgZm9yIGlubmVy Cj4gZGVtdXhlciAqLwo+ICsgICAgRkZJT0NvbnRleHQgICAgICAgICAgICAgICAgIG1wZWdfcGI7 ICAgICAgICAgICAgLyogYnVmZmVyIGNvbnRleHQgZm9yCj4gaW5uZXIgZGVtdXhlciAqLwo+ICsK PiArICAgIC8qIHZvbHVtZSAqLwo+ICsgICAgZHZkX3JlYWRlcl90ICAgICAgICAgICAgICAgICpk dmRyZWFkOyAgICAgICAgICAgLyogaGFuZGxlIHRvCj4gbGliZHZkcmVhZCAqLwo+ICsgICAgaWZv X2hhbmRsZV90ICAgICAgICAgICAgICAgICp2bWdfaWZvOyAgICAgICAgICAgLyogaGFuZGxlIHRv IHRoZSBWTUcKPiAoVklERU9fVFMuSUZPKSAqLwo+ICsgICAgaWZvX2hhbmRsZV90ICAgICAgICAg ICAgICAgICp2dHNfaWZvOyAgICAgICAgICAgLyogaGFuZGxlIHRvIHRoZQo+IGFjdGl2ZSBWVFMg KFZUU19ubl9uLklGTykgKi8KPiArICAgIGR2ZG5hdl90ICAgICAgICAgICAgICAgICAgICAqZHZk bmF2OyAgICAgICAgICAgIC8qIGhhbmRsZSB0bwo+IGxpYmR2ZG5hdiAqLwo+ICsKPiArICAgIC8q IHBsYXliYWNrIGNvbnRyb2wgKi8KPiArICAgIHBnY190ICAgICAgICAgICAgICAgICAgICAgICAq cGxheV9wZ2M7ICAgICAgICAgIC8qIGhhbmRsZSB0byB0aGUKPiBhY3RpdmUgUEdDICovCj4gKyAg ICBpbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgcGxheV90c19vZmZzZXQ7ICAgICAvKiBQVFMg ZGlzY29udGludWl0eQo+IG9mZnNldCAoZS5nLiBWT0IgY2hhbmdlKSAqLwo+ICsgICAgaW50NjRf dCAgICAgICAgICAgICAgICAgICAgIHBsYXlfdm9idV9lX3B0bTsgICAgLyogZW5kIFBUUyBvZiB0 aGUKPiBjdXJyZW50IFZPQlUgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBw bGF5X3Z0c247ICAgICAgICAgIC8qIG51bWJlciBvZiB0aGUKPiBhY3RpdmUgVlRTICh2aWRlbyB0 aXRsZSBzZXQpICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGxheV9jZWxs bjsgICAgICAgICAvKiBudW1iZXIgb2YgdGhlCj4gYWN0aXZlIGNlbGwgKi8KPiArICAgIGludCAg ICAgICAgICAgICAgICAgICAgICAgICBwbGF5X3BnbjsgICAgICAgICAgIC8qIG51bWJlciBvZiB0 aGUKPiBhY3RpdmUgcHJvZ3JhbSAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAg IHBsYXlfcHR0OyAgICAgICAgICAgLyogbnVtYmVyIG9mIHRoZQo+IGFjdGl2ZSBQVFQgKGNoYXB0 ZXIpICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGxheV9pbl92dHM7ICAg ICAgICAvKiBpZiBvdXIgcGxheSBzdGF0ZQo+IGlzIGluIHRoZSBWVFMgKi8KPiArICAgIGludCAg ICAgICAgICAgICAgICAgICAgICAgICBwbGF5X2luX3BnYzsgICAgICAgIC8qIGlmIG91ciBwbGF5 IHN0YXRlCj4gaXMgaW4gdGhlIFBHQyAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAg ICAgIHBsYXlfaW5fcHM7ICAgICAgICAgLyogaWYgb3VyIHBsYXkgc3RhdGUKPiBpcyBpbiB0aGUg cHJvZ3JhbSBzdHJlYW0gKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5 X3NraXBfY2VsbDsgICAgIC8qIGlmIHRoaXMgY2VsbCBpcwo+IGJlaW5nIHNraXBwZWQqLwo+ICsg ICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlfc2tpcF9jZWxsX2xhc3Q7LyogaWYg bGFzdCBjZWxsIHdhcwo+IHNraXBwZWQgKi8KPiArCj4gK30gRFZEVmlkZW9EZW11eENvbnRleHQ7 Cj4gKwo+ICtzdGF0aWMgdm9pZCBkdmR2aWRlb19wZ2NfY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpz KQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiAr Cj4gKyAgICBhdl9sb2cocywgQVZfTE9HX1RSQUNFLCAiY2xvc2luZyBEVkQgdm9sdW1lXG4iKTsK PiArCj4gKyAgICBpZiAoYy0+ZHZkbmF2KQo+ICsgICAgICAgIGR2ZG5hdl9jbG9zZShjLT5kdmRu YXYpOwo+ICsKPiArICAgIGlmIChjLT52dHNfaWZvKQo+ICsgICAgICAgIGlmb0Nsb3NlKGMtPnZ0 c19pZm8pOwo+ICsKPiArICAgIGlmIChjLT52bWdfaWZvKQo+ICsgICAgICAgIGlmb0Nsb3NlKGMt PnZtZ19pZm8pOwo+ICsKPiArICAgIGlmIChjLT5kdmRyZWFkKQo+ICsgICAgICAgIERWRENsb3Nl KGMtPmR2ZHJlYWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3BnY19vcGVuKEFW Rm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBz LT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgZHZkbmF2X3N0YXR1c190IGR2ZG5hdl9vcGVuX3N0YXR1 czsKPiArCj4gKyAgICB0aXRsZV9pbmZvX3QgdGl0bGVfaW5mbzsKPiArICAgIGludCBjdXJfdGl0 bGUsIGN1cl9wZ2NuLCBjdXJfcGduOwo+ICsKPiArICAgIGludDMyX3QgZGlzY19yZWdpb25fbWFz azsKPiArICAgIGludDMyX3QgcGxheWVyX3JlZ2lvbl9tYXNrOwo+ICsKPiArICAgIGMtPmR2ZHJl YWQgPSBEVkRPcGVuKHMtPnVybCk7Cj4gKyAgICBpZiAoIWMtPmR2ZHJlYWQpCj4gKyAgICAgICAg Z290byBlbmRfZmFpbF9leHRlcm5hbDsKPiArCj4gKyAgICBpZiAoIShjLT52bWdfaWZvID0gaWZv T3BlbihjLT5kdmRyZWFkLCAwKSkpCj4gKyAgICAgICAgZ290byBlbmRfZmFpbF9leHRlcm5hbDsK PiArCj4gKyAgICBpZiAoYy0+b3B0X3RpdGxlID4gYy0+dm1nX2lmby0+dHRfc3JwdC0+bnJfb2Zf c3JwdHMpIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVGl0bGUgbm90IGZv dW5kXG4iKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfU1RSRUFNX05PVF9GT1VORDsK PiArICAgIH0KPiArCj4gKyAgICB0aXRsZV9pbmZvID0gYy0+dm1nX2lmby0+dHRfc3JwdC0+dGl0 bGVbYy0+b3B0X3RpdGxlIC0gMV07Cj4gKyAgICBpZiAoYy0+b3B0X2FuZ2xlID4gdGl0bGVfaW5m by5ucl9vZl9hbmdsZXMpIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiQW5n bGUgbm90IGZvdW5kXG4iKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfU1RSRUFNX05P VF9GT1VORDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAodGl0bGVfaW5mby5ucl9vZl9wdHRzIDwg MSkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJUaXRsZSBpbnZhbGlkXG4i KTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgaWYgKCEoYy0+dnRzX2lmbyA9IGlmb09wZW4oYy0+ZHZkcmVhZCwgdGl0bGVfaW5m by50aXRsZV9zZXRfbnIpKSkKPiArICAgICAgICBnb3RvIGVuZF9mYWlsX2V4dGVybmFsOwo+ICsK PiArICAgIGlmICh0aXRsZV9pbmZvLnZ0c190dG4gPCAxCj4gKyAgICAgICAgICAgIHx8IHRpdGxl X2luZm8udnRzX3R0biA+IDk5Cj4gKyAgICAgICAgICAgIHx8IHRpdGxlX2luZm8udnRzX3R0biA+ IGMtPnZ0c19pZm8tPnZ0c19wdHRfc3JwdC0+bnJfb2Zfc3JwdHMKPiArICAgICAgICAgICAgfHwg Yy0+dnRzX2lmby0+dnRzaV9tYXQtPm5yX29mX3Z0c19hdWRpb19zdHJlYW1zID4gOAo+ICsgICAg ICAgICAgICB8fCBjLT52dHNfaWZvLT52dHNpX21hdC0+bnJfb2ZfdnRzX3N1YnBfc3RyZWFtcyA+ IDMyKSB7Cj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlRpdGxlIGludmFsaWQg aW4gVlRTXG4iKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4g KyAgICB9Cj4gKwo+ICsgICAgZHZkbmF2X29wZW5fc3RhdHVzID0gZHZkbmF2X29wZW4oJmMtPmR2 ZG5hdiwgcy0+dXJsKTsKPiArICAgIGlmICghYy0+ZHZkbmF2KQo+ICsgICAgICAgIGdvdG8gZW5k X2ZhaWxfZXh0ZXJuYWw7Cj4gKwo+ICsgICAgaWYgKGR2ZG5hdl9vcGVuX3N0YXR1cyAhPSBEVkRO QVZfU1RBVFVTX09LCj4gKyAgICAgICAgICAgIHx8IGR2ZG5hdl9zZXRfcmVhZGFoZWFkX2ZsYWco Yy0+ZHZkbmF2LCAwKSAhPSBEVkROQVZfU1RBVFVTX09LCj4gKyAgICAgICAgICAgIHx8IGR2ZG5h dl9zZXRfUEdDX3Bvc2l0aW9uaW5nX2ZsYWcoYy0+ZHZkbmF2LCAxKSAhPQo+IERWRE5BVl9TVEFU VVNfT0sKPiArICAgICAgICAgICAgfHwgZHZkbmF2X2dldF9yZWdpb25fbWFzayhjLT5kdmRuYXYs ICZkaXNjX3JlZ2lvbl9tYXNrKSAhPQo+IERWRE5BVl9TVEFUVVNfT0spCj4gKyAgICAgICAgZ290 byBlbmRfZmFpbF9leHRlcm5hbDsKPiArCj4gKyAgICBwbGF5ZXJfcmVnaW9uX21hc2sgPSBjLT5v cHRfcmVnaW9uID4gMCA/ICgxIDw8IChjLT5vcHRfcmVnaW9uIC0gMSkpIDoKPiBkaXNjX3JlZ2lv bl9tYXNrOwo+ICsgICAgaWYgKGR2ZG5hdl9zZXRfcmVnaW9uX21hc2soYy0+ZHZkbmF2LCBwbGF5 ZXJfcmVnaW9uX21hc2spICE9Cj4gRFZETkFWX1NUQVRVU19PSykKPiArICAgICAgICBnb3RvIGVu ZF9mYWlsX2V4dGVybmFsOwo+ICsKPiArICAgIGlmIChjLT5vcHRfcGdjID4gMCAmJiBjLT5vcHRf cGcgPiAwKSB7Cj4gKyAgICAgICAgaWYgKGR2ZG5hdl9wcm9ncmFtX3BsYXkoYy0+ZHZkbmF2LCBj LT5vcHRfdGl0bGUsIGMtPm9wdF9wZ2MsCj4gYy0+b3B0X3BnKSAhPSBEVkROQVZfU1RBVFVTX09L KQo+ICsgICAgICAgICAgICBnb3RvIGVuZF9mYWlsX2V4dGVybmFsOwo+ICsgICAgfSBlbHNlIHsK PiArICAgICAgICBpZiAoZHZkbmF2X3BhcnRfcGxheShjLT5kdmRuYXYsIGMtPm9wdF90aXRsZSwg Yy0+b3B0X3B0dCkgIT0KPiBEVkROQVZfU1RBVFVTX09LCj4gKyAgICAgICAgICAgICAgICB8fCBk dmRuYXZfY3VycmVudF90aXRsZV9wcm9ncmFtKGMtPmR2ZG5hdiwgJmN1cl90aXRsZSwKPiAmY3Vy X3BnY24sICZjdXJfcGduKSAhPSBEVkROQVZfU1RBVFVTX09LKQo+ICsgICAgICAgICAgICBnb3Rv IGVuZF9mYWlsX2V4dGVybmFsOwo+ICsKPiArICAgICAgICBjLT5vcHRfcGdjID0gY3VyX3BnY247 Cj4gKyAgICAgICAgYy0+b3B0X3BnID0gY3VyX3BnbjsKPiArICAgIH0KPiArCj4gKyAgICBpZiAo ZHZkbmF2X2FuZ2xlX2NoYW5nZShjLT5kdmRuYXYsIGMtPm9wdF9hbmdsZSkgIT0gRFZETkFWX1NU QVRVU19PSykKPiArICAgICAgICBnb3RvIGVuZF9mYWlsX2V4dGVybmFsOwo+ICsKPiArICAgIC8q IHVwZGF0ZSB0aGUgY29udGV4dCAqLwo+ICsgICAgYy0+cGxheV92dHNuID0gdGl0bGVfaW5mby50 aXRsZV9zZXRfbnI7Cj4gKyAgICBjLT5wbGF5X3BnYyA9IGMtPnZ0c19pZm8tPnZ0c19wZ2NpdC0+ cGdjaV9zcnBbYy0+b3B0X3BnYyAtIDFdLnBnYzsKPiArCj4gKyAgICBpZiAoYy0+cGxheV9wZ2Mt PnBnX3BsYXliYWNrX21vZGUgIT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJTb3JyeSwgbm9uLXNlcXVlbnRpYWwgUEdDcyBhcmUgbm90Cj4gc3VwcG9ydGVkXG4iKTsK PiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICsgICAgfQo+ICsK PiArICAgIHJldHVybiAwOwo+ICsKPiArZW5kX2ZhaWxfZXh0ZXJuYWw6Cj4gKyAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIHN0YXJ0IERWRCBwbGF5YmFjayBhdAo+IGNvb3Jk aW5hdGVzXG4iKTsKPiArCj4gKyAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiArfQo+ICsK PiArc3RhdGljIGludCBkdmR2aWRlb19wZ2NfY2hhcHRlcnNfc2V0dXAoQVZGb3JtYXRDb250ZXh0 ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsK PiArCj4gKyAgICB1aW50NjRfdCBkdXJhdGlvbjsKPiArICAgIHVpbnQ2NF90ICp0aW1lczsKPiAr ICAgIHVpbnQ2NF90IHRpbWVfcHJldiA9IDA7Cj4gKyAgICBpbnQgbmJfY2hhcHRlcnMgPSAwOwo+ ICsKPiArICAgIC8qIGFzIGEgc2lkZSBlZmZlY3Qgb2YgZHZkbmF2X2Rlc2NyaWJlX3RpdGxlX2No YXB0ZXJzKCksIGJlbmVmaWNpYWwKPiBzYWZldHkgY2hlY2tzIGFyZSBkb25lICovCj4gKyAgICBu Yl9jaGFwdGVycyA9IGR2ZG5hdl9kZXNjcmliZV90aXRsZV9jaGFwdGVycyhjLT5kdmRuYXYsIGMt Pm9wdF90aXRsZSwKPiAmdGltZXMsICZkdXJhdGlvbik7Cj4gKyAgICBpZiAoIW5iX2NoYXB0ZXJz KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsKPiArICAgIGZvciAoaW50 IGkgPSBjLT5vcHRfcHR0IC0gMTsgaSA8IG5iX2NoYXB0ZXJzIC0gMTsgaSsrKSB7Cj4gKyAgICAg ICAgdWludDY0X3QgdGltZV9lZmZlY3RpdmUgPSB0aW1lc1tpXTsKPiArCj4gKyAgICAgICAgaWYg KCFhdnByaXZfbmV3X2NoYXB0ZXIocywgaSwgRFZEVklERU9fVElNRV9CQVNFX1EsIHRpbWVfcHJl diwKPiB0aW1lX2VmZmVjdGl2ZSwgTlVMTCkpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBjaGFwdGVyXG4iKTsKPiArICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHRp bWVfcHJldiA9IHRpbWVfZWZmZWN0aXZlOwo+ICsgICAgfQo+ICsKPiArICAgIGZyZWUodGltZXMp Owo+ICsKPiArICAgIHMtPmR1cmF0aW9uID0gYXZfcmVzY2FsZV9xKGR1cmF0aW9uLCBEVkRWSURF T19USU1FX0JBU0VfUSwKPiBBVl9USU1FX0JBU0VfUSk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fdmlkZW9fc3RyZWFtX2FuYWx5emUodmlkZW9f YXR0cl90IHZpZGVvX2F0dHIsCj4gKyAgICAgICAgRFZEVmlkZW9WVFNWaWRlb1N0cmVhbUVudHJ5 ICplbnRyeSkKPiArewo+ICsgICAgQVZSYXRpb25hbCBmcmFtZXJhdGU7Cj4gKyAgICBpbnQgaGVp Z2h0ID0gMDsKPiArICAgIGludCB3aWR0aCA9IDA7Cj4gKyAgICBpbnQgaXNfcGFsID0gdmlkZW9f YXR0ci52aWRlb19mb3JtYXQgPT0gMTsKPiArCj4gKyAgICBmcmFtZXJhdGUgPSBpc19wYWwgPyAo QVZSYXRpb25hbCkgeyAyNSwgMSB9IDogKEFWUmF0aW9uYWwpIHsgMzAwMDAsCj4gMTAwMSB9Owo+ ICsgICAgaGVpZ2h0ID0gaXNfcGFsID8gNTc2IDogNDgwOwo+ICsKPiArICAgIGlmIChoZWlnaHQg PiAwKSB7Cj4gKyAgICAgICAgc3dpdGNoICh2aWRlb19hdHRyLnBpY3R1cmVfc2l6ZSkgewo+ICsg ICAgICAgICAgICBjYXNlIDA6IC8qIEQxICovCj4gKyAgICAgICAgICAgICAgICB3aWR0aCA9IDcy MDsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBjYXNlIDE6IC8qIDRD SUYgKi8KPiArICAgICAgICAgICAgICAgIHdpZHRoID0gNzA0Owo+ICsgICAgICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgICAgIGNhc2UgMjogLyogSGFsZiBEMSAqLwo+ICsgICAgICAgICAg ICAgICAgd2lkdGggPSAzNTI7Cj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAg ICAgY2FzZSAzOiAvKiBDSUYgKi8KPiArICAgICAgICAgICAgICAgIHdpZHRoID0gMzUyOwo+ICsg ICAgICAgICAgICAgICAgaGVpZ2h0IC89IDI7Cj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiAr ICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7Cj4g KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAg ZW50cnktPnN0YXJ0Y29kZSA9IDB4MUUwOwo+ICsgICAgZW50cnktPmNvZGVjX2lkID0gIXZpZGVv X2F0dHIubXBlZ192ZXJzaW9uID8gQVZfQ09ERUNfSURfTVBFRzFWSURFTyA6Cj4gQVZfQ09ERUNf SURfTVBFRzJWSURFTzsKPiArICAgIGVudHJ5LT53aWR0aCA9IHdpZHRoOwo+ICsgICAgZW50cnkt PmhlaWdodCA9IGhlaWdodDsKPiArICAgIGVudHJ5LT5kYXIgPSB2aWRlb19hdHRyLmRpc3BsYXlf YXNwZWN0X3JhdGlvID8gKEFWUmF0aW9uYWwpIHsgMTYsIDkgfQo+IDogKEFWUmF0aW9uYWwpIHsg NCwgMyB9Owo+ICsgICAgZW50cnktPmZyYW1lcmF0ZSA9IGZyYW1lcmF0ZTsKPiArICAgIGVudHJ5 LT5oYXNfY2MgPSB2aWRlb19hdHRyLmxpbmUyMV9jY18xIHx8IHZpZGVvX2F0dHIubGluZTIxX2Nj XzI7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9f dmlkZW9fc3RyZWFtX2FkZChBVkZvcm1hdENvbnRleHQgKnMsCj4gKyAgICAgICAgRFZEVmlkZW9W VFNWaWRlb1N0cmVhbUVudHJ5ICplbnRyeSwgZW51bSBBVlN0cmVhbVBhcnNlVHlwZQo+IG5lZWRf cGFyc2luZykKPiArewo+ICsgICAgQVZTdHJlYW0gKnN0Owo+ICsgICAgRkZTdHJlYW0gKnN0aTsK PiArCj4gKyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywgTlVMTCk7Cj4gKyAgICBpZiAo IXN0KSB7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArICAgIH0KPiArCj4g KyAgICBzdC0+aWQgPSBlbnRyeS0+c3RhcnRjb2RlOwo+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2Rl Y190eXBlID0gQVZNRURJQV9UWVBFX1ZJREVPOwo+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19p ZCA9IGVudHJ5LT5jb2RlY19pZDsKPiArICAgIHN0LT5jb2RlY3Bhci0+d2lkdGggPSBlbnRyeS0+ d2lkdGg7Cj4gKyAgICBzdC0+Y29kZWNwYXItPmhlaWdodCA9IGVudHJ5LT5oZWlnaHQ7Cj4gKyAg ICBzdC0+Y29kZWNwYXItPmZvcm1hdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDsKPiArICAgIHN0LT5j b2RlY3Bhci0+Y29sb3JfcmFuZ2UgPSBBVkNPTF9SQU5HRV9NUEVHOwo+ICsKPiArICAgIHN0LT5j b2RlY3Bhci0+ZnJhbWVyYXRlID0gZW50cnktPmZyYW1lcmF0ZTsKPiArI2lmIEZGX0FQSV9SX0ZS QU1FX1JBVEUKPiArICAgIHN0LT5yX2ZyYW1lX3JhdGUgPSBlbnRyeS0+ZnJhbWVyYXRlOwo+ICsj ZW5kaWYKPiArICAgIHN0LT5hdmdfZnJhbWVfcmF0ZSA9IGVudHJ5LT5mcmFtZXJhdGU7Cj4gKwo+ ICsgICAgc3RpID0gZmZzdHJlYW0oc3QpOwo+ICsgICAgc3RpLT5yZXF1ZXN0X3Byb2JlID0gMDsK PiArICAgIHN0aS0+bmVlZF9wYXJzaW5nID0gbmVlZF9wYXJzaW5nOwo+ICsgICAgc3RpLT5kaXNw bGF5X2FzcGVjdF9yYXRpbyA9IGVudHJ5LT5kYXI7Cj4gKyAgICBzdGktPmF2Y3R4LT5mcmFtZXJh dGUgPSBlbnRyeS0+ZnJhbWVyYXRlOwo+ICsKPiArICAgIGlmIChlbnRyeS0+aGFzX2NjKQo+ICsg ICAgICAgIHN0aS0+YXZjdHgtPnByb3BlcnRpZXMgfD0gRkZfQ09ERUNfUFJPUEVSVFlfQ0xPU0VE X0NBUFRJT05TOwo+ICsKPiArICAgIGF2cHJpdl9zZXRfcHRzX2luZm8oc3QsIERWRFZJREVPX1BU U19XUkFQX0JJVFMsCj4gKyAgICAgICAgRFZEVklERU9fVElNRV9CQVNFX1EubnVtLCBEVkRWSURF T19USU1FX0JBU0VfUS5kZW4pOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGR2ZHZpZGVvX3ZpZGVvX3N0cmVhbV9zZXR1cChBVkZvcm1hdENvbnRleHQgKnMpCj4g K3sKPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiAr ICAgIERWRFZpZGVvVlRTVmlkZW9TdHJlYW1FbnRyeSAqZW50cnk7Cj4gKyAgICBpbnQgcmV0Owo+ ICsKPiArICAgIGVudHJ5ID0gYXZfbWFsbG9jKHNpemVvZihEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFt RW50cnkpKTsKPiArCj4gKyAgICBpZiAoKHJldCA9Cj4gZHZkdmlkZW9fdmlkZW9fc3RyZWFtX2Fu YWx5emUoYy0+dnRzX2lmby0+dnRzaV9tYXQtPnZ0c192aWRlb19hdHRyLCBlbnRyeSkpCj4gPCAw Cj4gKyAgICAgICAgICAgIHx8IChyZXQgPSBkdmR2aWRlb192aWRlb19zdHJlYW1fYWRkKGMtPm1w ZWdfY3R4LCBlbnRyeSwKPiBBVlNUUkVBTV9QQVJTRV9GVUxMKSkgPCAwCj4gKyAgICAgICAgICAg IHx8IChyZXQgPSBkdmR2aWRlb192aWRlb19zdHJlYW1fYWRkKHMsIGVudHJ5LAo+IEFWU1RSRUFN X1BBUlNFX05PTkUpKSA8IDApIHsKPiArICAgICAgICBhdl9mcmVlKGVudHJ5KTsKPiArICAgICAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRlIHZpZGVvIHN0cmVh bVxuIik7Cj4gKwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZf ZnJlZShlbnRyeSk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg ZHZkdmlkZW9fYXVkaW9fc3RyZWFtX2FuYWx5emUoYXVkaW9fYXR0cl90IGF1ZGlvX2F0dHIsCj4g dWludDE2X3QgYXVkaW9fY29udHJvbCwKPiArICAgICAgICBEVkRWaWRlb1BHQ0F1ZGlvU3RyZWFt RW50cnkgKmVudHJ5KQo+ICt7Cj4gKyAgICBpbnQgc3RhcnRjb2RlID0gMDsKPiArICAgIGVudW0g QVZDb2RlY0lEIGNvZGVjX2lkID0gQVZfQ09ERUNfSURfTk9ORTsKPiArICAgIGludCBzYW1wbGVf Zm10ID0gQVZfU0FNUExFX0ZNVF9OT05FOwo+ICsgICAgaW50IHNhbXBsZV9yYXRlID0gMDsKPiAr ICAgIGludCBiaXRfZGVwdGggPSAwOwo+ICsgICAgaW50IG5iX2NoYW5uZWxzID0gMDsKPiArICAg IEFWQ2hhbm5lbExheW91dCBjaF9sYXlvdXQ7Cj4gKyAgICBjaGFyIGxhbmdfZHZkWzNdID0gezB9 Owo+ICsKPiArICAgIGludCBwb3NpdGlvbiA9IChhdWRpb19jb250cm9sICYgMHg3RjAwKSA+PiA4 Owo+ICsKPiArICAgIHN3aXRjaCAoYXVkaW9fYXR0ci5hdWRpb19mb3JtYXQpIHsKPiArICAgICAg ICBjYXNlIDA6Cj4gKyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09ERUNfSURfQUMzOwo+ICsg ICAgICAgICAgICBzYW1wbGVfZm10ID0gQVZfU0FNUExFX0ZNVF9GTFRQOwo+ICsgICAgICAgICAg ICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ICsgICAgICAgICAgICBzdGFydGNvZGUgPSAweDgwICsg cG9zaXRpb247Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgMjoKPiArICAg ICAgICAgICAgY29kZWNfaWQgPSBBVl9DT0RFQ19JRF9NUDE7Cj4gKyAgICAgICAgICAgIHNhbXBs ZV9mbXQgPSBhdWRpb19hdHRyLnF1YW50aXphdGlvbiA/IEFWX1NBTVBMRV9GTVRfUzMyIDoKPiBB Vl9TQU1QTEVfRk1UX1MxNjsKPiArICAgICAgICAgICAgc2FtcGxlX3JhdGUgPSA0ODAwMDsKPiAr ICAgICAgICAgICAgYml0X2RlcHRoID0gYXVkaW9fYXR0ci5xdWFudGl6YXRpb24gPyAyMCA6IDE2 Owo+ICsgICAgICAgICAgICBzdGFydGNvZGUgPSAweDFDMCArIHBvc2l0aW9uOwo+ICsgICAgICAg ICAgICBicmVhazsKPiArICAgICAgICBjYXNlIDM6Cj4gKyAgICAgICAgICAgIGNvZGVjX2lkID0g QVZfQ09ERUNfSURfTVAyOwo+ICsgICAgICAgICAgICBzYW1wbGVfZm10ID0gYXVkaW9fYXR0ci5x dWFudGl6YXRpb24gPyBBVl9TQU1QTEVfRk1UX1MzMiA6Cj4gQVZfU0FNUExFX0ZNVF9TMTY7Cj4g KyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gKyAgICAgICAgICAgIGJpdF9kZXB0 aCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8gMjAgOiAxNjsKPiArICAgICAgICAgICAgc3Rh cnRjb2RlID0gMHgxQzAgKyBwb3NpdGlvbjsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAg ICAgY2FzZSA0Ogo+ICsgICAgICAgICAgICBjb2RlY19pZCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0 aW9uID8gQVZfQ09ERUNfSURfUENNX1MzMkxFIDoKPiBBVl9DT0RFQ19JRF9QQ01fUzE2TEU7Cj4g KyAgICAgICAgICAgIHNhbXBsZV9mbXQgPSBhdWRpb19hdHRyLnF1YW50aXphdGlvbiA/IEFWX1NB TVBMRV9GTVRfUzMyIDoKPiBBVl9TQU1QTEVfRk1UX1MxNjsKPiArICAgICAgICAgICAgc2FtcGxl X3JhdGUgPSBhdWRpb19hdHRyLnNhbXBsZV9mcmVxdWVuY3kgPyA5NjAwMCA6IDQ4MDAwOwo+ICsg ICAgICAgICAgICBiaXRfZGVwdGggPSBhdWRpb19hdHRyLnF1YW50aXphdGlvbiA9PSAyID8gMjQg Ogo+IChhdWRpb19hdHRyLnF1YW50aXphdGlvbiA/IDIwIDogMTYpOwo+ICsgICAgICAgICAgICBz dGFydGNvZGUgPSAweEEwICsgcG9zaXRpb247Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAg ICAgIGNhc2UgNjoKPiArICAgICAgICAgICAgY29kZWNfaWQgPSBBVl9DT0RFQ19JRF9EVFM7Cj4g KyAgICAgICAgICAgIHNhbXBsZV9mbXQgPSBBVl9TQU1QTEVfRk1UX0ZMVFA7Cj4gKyAgICAgICAg ICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gKyAgICAgICAgICAgIGJpdF9kZXB0aCA9IGF1ZGlv X2F0dHIucXVhbnRpemF0aW9uID09IDIgPyAyNCA6Cj4gKGF1ZGlvX2F0dHIucXVhbnRpemF0aW9u ID8gMjAgOiAxNik7Cj4gKyAgICAgICAgICAgIHN0YXJ0Y29kZSA9IDB4ODggKyBwb3NpdGlvbjsK PiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbmJfY2hhbm5lbHMgPSBh dWRpb19hdHRyLmNoYW5uZWxzICsgMTsKPiArCj4gKyAgICBpZiAoY29kZWNfaWQgPT0gQVZfQ09E RUNfSURfTk9ORSB8fCBzdGFydGNvZGUgPT0gMCB8fCBzYW1wbGVfZm10ID09Cj4gQVZfU0FNUExF X0ZNVF9OT05FCj4gKyAgICAgICAgICAgIHx8IHNhbXBsZV9yYXRlID09IDAgfHwgbmJfY2hhbm5l bHMgPT0gMCkgewo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAg fQo+ICsKPiArICAgIGlmIChuYl9jaGFubmVscyA9PSAyKQo+ICsgICAgICAgIGNoX2xheW91dCA9 IChBVkNoYW5uZWxMYXlvdXQpIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTzsKPiArICAgIGVsc2Ug aWYgKG5iX2NoYW5uZWxzID09IDYpCj4gKyAgICAgICAgY2hfbGF5b3V0ID0gKEFWQ2hhbm5lbExh eW91dCkgQVZfQ0hBTk5FTF9MQVlPVVRfNVBPSU5UMTsKPiArICAgIGVsc2UgaWYgKG5iX2NoYW5u ZWxzID09IDgpCj4gKyAgICAgICAgY2hfbGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dCkgQVZfQ0hB Tk5FTF9MQVlPVVRfN1BPSU5UMTsKPiArICAgIGVsc2UKPiArICAgICAgICBjaF9sYXlvdXQgPSAo QVZDaGFubmVsTGF5b3V0KSB7IDAgfTsKPiArCj4gKyAgICBBVl9XQjE2KGxhbmdfZHZkLCBhdWRp b19hdHRyLmxhbmdfY29kZSk7Cj4gKwo+ICsgICAgZW50cnktPnN0YXJ0Y29kZSA9IHN0YXJ0Y29k ZTsKPiArICAgIGVudHJ5LT5jb2RlY19pZCA9IGNvZGVjX2lkOwo+ICsgICAgZW50cnktPnNhbXBs ZV9yYXRlID0gc2FtcGxlX3JhdGU7Cj4gKyAgICBlbnRyeS0+Yml0X2RlcHRoID0gYml0X2RlcHRo Owo+ICsgICAgZW50cnktPm5iX2NoYW5uZWxzID0gbmJfY2hhbm5lbHM7Cj4gKyAgICBlbnRyeS0+ Y2hfbGF5b3V0ID0gY2hfbGF5b3V0Owo+ICsgICAgZW50cnktPmxhbmdfaXNvID0gKGNoYXIgKikg ZmZfY29udmVydF9sYW5nX3RvKGxhbmdfZHZkLAo+IEFWX0xBTkdfSVNPNjM5XzJfQklCTCk7Cj4g Kwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fYXVkaW9f c3RyZWFtX2FkZChBVkZvcm1hdENvbnRleHQgKnMsCj4gRFZEVmlkZW9QR0NBdWRpb1N0cmVhbUVu dHJ5ICplbnRyeSwKPiArICAgICAgICBlbnVtIEFWU3RyZWFtUGFyc2VUeXBlIG5lZWRfcGFyc2lu ZykKPiArewo+ICsgICAgQVZTdHJlYW0gKnN0Owo+ICsgICAgRkZTdHJlYW0gKnN0aTsKPiArCj4g KyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywgTlVMTCk7Cj4gKyAgICBpZiAoIXN0KSB7 Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArICAgIH0KPiArCj4gKyAgICBz dC0+aWQgPSBlbnRyeS0+c3RhcnRjb2RlOwo+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBl ID0gQVZNRURJQV9UWVBFX0FVRElPOwo+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IGVu dHJ5LT5jb2RlY19pZDsKPiArICAgIHN0LT5jb2RlY3Bhci0+Zm9ybWF0ID0gZW50cnktPnNhbXBs ZV9mbXQ7Cj4gKyAgICBzdC0+Y29kZWNwYXItPnNhbXBsZV9yYXRlID0gZW50cnktPnNhbXBsZV9y YXRlOwo+ICsgICAgc3QtPmNvZGVjcGFyLT5iaXRzX3Blcl9jb2RlZF9zYW1wbGUgPSBlbnRyeS0+ Yml0X2RlcHRoOwo+ICsgICAgc3QtPmNvZGVjcGFyLT5iaXRzX3Blcl9yYXdfc2FtcGxlID0gZW50 cnktPmJpdF9kZXB0aDsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y2hfbGF5b3V0ID0gZW50cnktPmNo X2xheW91dDsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzID0gZW50 cnktPm5iX2NoYW5uZWxzOwo+ICsKPiArICAgIGlmIChlbnRyeS0+bGFuZ19pc28pIHsKPiArICAg ICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBlbnRyeS0+bGFuZ19p c28sIDApOwo+ICsgICAgfQo+ICsKPiArICAgIHN0aSA9IGZmc3RyZWFtKHN0KTsKPiArICAgIHN0 aS0+cmVxdWVzdF9wcm9iZSA9IDA7Cj4gKyAgICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRfcGFy c2luZzsKPiArCj4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRWSURFT19QVFNfV1JB UF9CSVRTLAo+ICsgICAgICAgICAgICBEVkRWSURFT19USU1FX0JBU0VfUS5udW0sIERWRFZJREVP X1RJTUVfQkFTRV9RLmRlbik7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZHZkdmlkZW9fYXVkaW9fc3RyZWFtX2FkZF9hbGwoQVZGb3JtYXRDb250ZXh0ICpzKQo+ ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4g KyAgICBpbnQgcmV0Owo+ICsKPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYy0+dnRzX2lmby0+ dnRzaV9tYXQtPm5yX29mX3Z0c19hdWRpb19zdHJlYW1zOwo+IGkrKykgewo+ICsgICAgICAgIERW RFZpZGVvUEdDQXVkaW9TdHJlYW1FbnRyeSAqZW50cnk7Cj4gKwo+ICsgICAgICAgIGlmICghKGMt PnBsYXlfcGdjLT5hdWRpb19jb250cm9sW2ldICYgMHg4MDAwKSkKPiArICAgICAgICAgICAgY29u dGludWU7Cj4gKwo+ICsgICAgICAgIGVudHJ5ID0gYXZfbWFsbG9jKHNpemVvZihEVkRWaWRlb1BH Q0F1ZGlvU3RyZWFtRW50cnkpKTsKPiArICAgICAgICBpZiAoIWVudHJ5KQo+ICsgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArICAgICAgICBpZiAoKHJldCA9Cj4gZHZk dmlkZW9fYXVkaW9fc3RyZWFtX2FuYWx5emUoYy0+dnRzX2lmby0+dnRzaV9tYXQtPnZ0c19hdWRp b19hdHRyW2ldLAo+ICsgICAgICAgICAgICAgICAgYy0+cGxheV9wZ2MtPmF1ZGlvX2NvbnRyb2xb aV0sIGVudHJ5KSkgPCAwKQo+ICsgICAgICAgICAgICBnb3RvIGJyZWFrX2ZyZWVfYW5kX2Vycm9y Owo+ICsKPiArICAgICAgICBpZiAoYy0+dnRzX2lmby0+dnRzaV9tYXQtPnZ0c19hdWRpb19hdHRy W2ldLmFwcGxpY2F0aW9uX21vZGUgPT0gMSkKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xP R19XQVJOSU5HLCAiQXVkaW8gJWQ6IGthcmFva2UgZXh0ZW5zaW9uCj4gZW5hYmxlZFxuIiwgZW50 cnktPnN0YXJ0Y29kZSk7Cj4gKwo+ICsgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcy0+bmJf c3RyZWFtczsgaisrKQo+ICsgICAgICAgICAgICBpZiAocy0+c3RyZWFtc1tqXS0+aWQgPT0gZW50 cnktPnN0YXJ0Y29kZSkKPiArICAgICAgICAgICAgICAgIGdvdG8gY29udGludWVfZnJlZTsKPiAr Cj4gKyAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19hdWRpb19zdHJlYW1fYWRkKGMtPm1wZWdf Y3R4LCBlbnRyeSwKPiBBVlNUUkVBTV9QQVJTRV9GVUxMKSkgPCAwKQo+ICsgICAgICAgICAgICBn b3RvIGJyZWFrX2ZyZWVfYW5kX2Vycm9yOwo+ICsKPiArICAgICAgICBpZiAoKHJldCA9IGR2ZHZp ZGVvX2F1ZGlvX3N0cmVhbV9hZGQocywgZW50cnksCj4gQVZTVFJFQU1fUEFSU0VfTk9ORSkpIDwg MCkKPiArICAgICAgICAgICAgZ290byBicmVha19mcmVlX2FuZF9lcnJvcjsKPiArCj4gK2NvbnRp bnVlX2ZyZWU6Cj4gKyAgICAgICAgYXZfZnJlZShlbnRyeSk7Cj4gKyAgICAgICAgY29udGludWU7 Cj4gKwo+ICticmVha19mcmVlX2FuZF9lcnJvcjoKPiArICAgICAgICBhdl9mcmVlKGVudHJ5KTsK PiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGF1 ZGlvIHN0cmVhbVxuIik7Cj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0KPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19zdWJwX3N0cmVhbV9h bmFseXplKEFWRm9ybWF0Q29udGV4dCAqcywgdWludDMyX3QKPiBvZmZzZXQsIHN1YnBfYXR0cl90 IHN1YnBfYXR0ciwKPiArICAgICAgICBEVkRWaWRlb1BHQ1N1YnRpdGxlU3RyZWFtRW50cnkgKmVu dHJ5KQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsK PiArCj4gKyAgICBjaGFyIGxhbmdfZHZkWzNdID0gezB9Owo+ICsKPiArICAgIGVudHJ5LT5zdGFy dGNvZGUgPSAweDIwICsgKG9mZnNldCAmIDB4MUYpOwo+ICsKPiArICAgIGVudHJ5LT5jbHV0ID0g YXZfbWFsbG9jeihEVkRWSURFT19TVUJQX0NMVVRfU0laRSk7Cj4gKyAgICBtZW1jcHkoZW50cnkt PmNsdXQsIGMtPnBsYXlfcGdjLT5wYWxldHRlLCBEVkRWSURFT19TVUJQX0NMVVRfU0laRSk7Cj4g Kwo+ICsgICAgLy8gWFhYOiBZVVYyUkdCIGNvbnZlcnNpb24gd2lsbCBiZSBoYW5kbGVkIGluIHVw Y29taW5nIGRlZGljYXRlZCBwYXRjaAo+ICsgICAgLy8gZmZfZHZkdmlkZW9fc3VicF9jbHV0X3l1 dl90b19yZ2IoZW50cnktPmNsdXQsCj4gRFZEVklERU9fU1VCUF9DTFVUX1NJWkUpOwo+ICsKPiAr ICAgIEFWX1dCMTYobGFuZ19kdmQsIHN1YnBfYXR0ci5sYW5nX2NvZGUpOwo+ICsgICAgZW50cnkt PmxhbmdfaXNvID0gKGNoYXIgKikgZmZfY29udmVydF9sYW5nX3RvKGxhbmdfZHZkLAo+IEFWX0xB TkdfSVNPNjM5XzJfQklCTCk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRkKEFWRm9ybWF0Q29udGV4dCAqcywKPiArICAg ICAgICBEVkRWaWRlb1BHQ1N1YnRpdGxlU3RyZWFtRW50cnkgKmVudHJ5LCBlbnVtIEFWU3RyZWFt UGFyc2VUeXBlCj4gbmVlZF9wYXJzaW5nKQo+ICt7Cj4gKyAgICBBVlN0cmVhbSAqc3Q7Cj4gKyAg ICBGRlN0cmVhbSAqc3RpOwo+ICsKPiArICAgIHN0ID0gYXZmb3JtYXRfbmV3X3N0cmVhbShzLCBO VUxMKTsKPiArICAgIGlmICghc3QpIHsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p Owo+ICsgICAgfQo+ICsKPiArICAgIHN0LT5pZCA9IGVudHJ5LT5zdGFydGNvZGU7Cj4gKyAgICBz dC0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfU1VCVElUTEU7Cj4gKyAgICBz dC0+Y29kZWNwYXItPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfRFZEX1NVQlRJVExFOwo+ICsKPiAr ICAgIC8vIFhYWDogUGFsZXR0ZXMgd2lsbCBiZSBmaXhlZCBpbiBkZWRpY2F0ZWQgcGF0Y2hzZXQg KHdpdGggc2hhcmVkCj4gdXRpbGl0eSkKPiArICAgIC8vIGlmICgocmV0ID0gZmZfYWxsb2NfZXh0 cmFkYXRhKHN0LT5jb2RlY3BhciwKPiBEVkRWSURFT19TVUJQX1BBTEVUVEVfRVhUUkFEQVRBX1NJ WkUpKSA8IDApCj4gKyAgICAvLyAgICAgcmV0dXJuIHJldDsKPiArICAgIC8vIGZmX2R2ZHZpZGVv X3N1YnBfcGFsZXR0ZV9leHRyYWRhdGFfY2F0KGVudHJ5LT5jbHV0LAo+IERWRFZJREVPX1NVQlBf Q0xVVF9TSVpFLAo+ICsgICAgLy8gICAgICAgICBzdC0+Y29kZWNwYXItPmV4dHJhZGF0YSwgc3Qt PmNvZGVjcGFyLT5leHRyYWRhdGFfc2l6ZSk7Cj4gKwo+ICsgICAgaWYgKGVudHJ5LT5sYW5nX2lz bykKPiArICAgICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBlbnRy eS0+bGFuZ19pc28sIDApOwo+ICsKPiArICAgIHN0aSA9IGZmc3RyZWFtKHN0KTsKPiArICAgIHN0 aS0+cmVxdWVzdF9wcm9iZSA9IDA7Cj4gKyAgICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRfcGFy c2luZzsKPiArCj4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRWSURFT19QVFNfV1JB UF9CSVRTLAo+ICsgICAgICAgIERWRFZJREVPX1RJTUVfQkFTRV9RLm51bSwgRFZEVklERU9fVElN RV9CQVNFX1EuZGVuKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBkdmR2aWRlb19zdWJwX3N0cmVhbV9hZGRfaW50ZXJuYWwoQVZGb3JtYXRDb250ZXh0ICpzLAo+ ICsgICAgICAgIHVpbnQzMl90IG9mZnNldCwgc3VicF9hdHRyX3Qgc3VicF9hdHRyKQo+ICt7Cj4g KyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBE VkRWaWRlb1BHQ1N1YnRpdGxlU3RyZWFtRW50cnkgKmVudHJ5Owo+ICsgICAgaW50IHJldCA9IDA7 Cj4gKwo+ICsgICAgZW50cnkgPSBhdl9tYWxsb2Moc2l6ZW9mKERWRFZpZGVvUEdDU3VidGl0bGVT dHJlYW1FbnRyeSkpOwo+ICsKPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1f YW5hbHl6ZShzLCBvZmZzZXQsIHN1YnBfYXR0ciwgZW50cnkpKQo+IDwgMCkKPiArICAgICAgICBn b3RvIGVuZF9mcmVlX2Vycm9yOwo+ICsKPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy0+bmJf c3RyZWFtczsgaSsrKQo+ICsgICAgICAgIGlmIChzLT5zdHJlYW1zW2ldLT5pZCA9PSBlbnRyeS0+ c3RhcnRjb2RlKQo+ICsgICAgICAgICAgICBnb3RvIGVuZF9mcmVlOwo+ICsKPiArICAgIGlmICgo cmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRkKGMtPm1wZWdfY3R4LCBlbnRyeSwKPiBBVlNU UkVBTV9QQVJTRV9GVUxMKSkgPCAwCj4gKyAgICAgICAgICAgIHx8IChyZXQgPSBkdmR2aWRlb19z dWJwX3N0cmVhbV9hZGQocywgZW50cnksCj4gQVZTVFJFQU1fUEFSU0VfTk9ORSkpIDwgMCkKPiAr ICAgICAgICBnb3RvIGVuZF9mcmVlX2Vycm9yOwo+ICsKPiArICAgIGdvdG8gZW5kX2ZyZWU7Cj4g Kwo+ICtlbmRfZnJlZV9lcnJvcjoKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gYWxsb2NhdGUgc3VidGl0bGUgc3RyZWFtXG4iKTsKPiArCj4gK2VuZF9mcmVlOgo+ICsg ICAgYXZfZnJlZShlbnRyeS0+Y2x1dCk7Cj4gKyAgICBhdl9mcmVlKGVudHJ5KTsKPiArCj4gKyAg ICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnBfc3RyZWFt X2FkZF9hbGwoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29u dGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpZiAoIWMtPnZ0c19pZm8tPnZ0c2lf bWF0LT5ucl9vZl92dHNfc3VicF9zdHJlYW1zKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiAr ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYy0+dnRzX2lmby0+dnRzaV9tYXQtPm5yX29mX3Z0c19z dWJwX3N0cmVhbXM7Cj4gaSsrKSB7Cj4gKyAgICAgICAgaW50IHJldDsKPiArICAgICAgICB1aW50 MzJfdCBzdWJwX2NvbnRyb2w7Cj4gKyAgICAgICAgc3VicF9hdHRyX3Qgc3VicF9hdHRyOwo+ICsg ICAgICAgIHZpZGVvX2F0dHJfdCB2aWRlb19hdHRyOwo+ICsKPiArICAgICAgICBzdWJwX2NvbnRy b2wgPSBjLT5wbGF5X3BnYy0+c3VicF9jb250cm9sW2ldOwo+ICsgICAgICAgIGlmICghKHN1YnBf Y29udHJvbCAmIDB4ODAwMDAwMDApKQo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArCj4gKyAg ICAgICAgLyogdGhlcmUgY2FuIGJlIHNldmVyYWwgcHJlc2VudGF0aW9ucyBmb3Igb25lIFNQVSAq Lwo+ICsgICAgICAgIC8qIGZvciBub3csIGJlIGZsZXhpYmxlIHdpdGggdGhlIERBUiBjaGVjayBk dWUgdG8gd2VpcmQgYXV0aG9yaW5nCj4gKi8KPiArICAgICAgICB2aWRlb19hdHRyID0gYy0+dnRz X2lmby0+dnRzaV9tYXQtPnZ0c192aWRlb19hdHRyOwo+ICsgICAgICAgIHN1YnBfYXR0ciA9IGMt PnZ0c19pZm8tPnZ0c2lfbWF0LT52dHNfc3VicF9hdHRyW2ldOwo+ICsKPiArICAgICAgICAvKiA0 OjMgKi8KPiArICAgICAgICBpZiAoIXZpZGVvX2F0dHIuZGlzcGxheV9hc3BlY3RfcmF0aW8pIHsK PiArICAgICAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19zdWJwX3N0cmVhbV9hZGRfaW50ZXJu YWwocywgc3VicF9jb250cm9sCj4gPj4gMjQsIHN1YnBfYXR0cikpIDwgMCkKPiArICAgICAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAg ICB9Cj4gKwo+ICsgICAgICAgIC8qIDE2OjkgKi8KPiArICAgICAgICBpZiAoKHJldCA9IGR2ZHZp ZGVvX3N1YnBfc3RyZWFtX2FkZF9pbnRlcm5hbChzLCBzdWJwX2NvbnRyb2wgPj4KPiAxNiwgc3Vi cF9hdHRyKSkgPCAwKQo+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgICAgICAv KiAxNjo5IGxldHRlcmJveCAqLwo+ICsgICAgICAgIGlmICh2aWRlb19hdHRyLnBlcm1pdHRlZF9k ZiA9PSAyIHx8IHZpZGVvX2F0dHIucGVybWl0dGVkX2RmID09IDApCj4gKyAgICAgICAgICAgIGlm ICgocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRkX2ludGVybmFsKHMsIHN1YnBfY29udHJv bAo+ID4+IDgsIHN1YnBfYXR0cikpIDwgMCkKPiArICAgICAgICAgICAgICAgIHJldHVybiByZXQ7 Cj4gKwo+ICsgICAgICAgIC8qIDE2OjkgcGFuLWFuZC1zY2FuICovCj4gKyAgICAgICAgaWYgKHZp ZGVvX2F0dHIucGVybWl0dGVkX2RmID09IDEgfHwgdmlkZW9fYXR0ci5wZXJtaXR0ZWRfZGYgPT0g MCkKPiArICAgICAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19zdWJwX3N0cmVhbV9hZGRfaW50 ZXJuYWwocywgc3VicF9jb250cm9sLAo+IHN1YnBfYXR0cikpIDwgMCkKPiArICAgICAgICAgICAg ICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgZHZkdmlkZW9fc3ViZGVtdXhfcmVhZF9kYXRhKHZvaWQgKm9wYXF1ZSwgdWlu dDhfdCAqYnVmLCBpbnQKPiBidWZfc2l6ZSkKPiArewo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpz ID0gb3BhcXVlOwo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7 Cj4gKwo+ICsgICAgdWludDhfdCBuYXZfYnVmW0RWRFZJREVPX0JMT0NLX1NJWkVdID0gezB9Owo+ ICsgICAgaW50IG5hdl9ldmVudDsKPiArICAgIGludCBuYXZfbGVuOwo+ICsKPiArICAgIGR2ZG5h dl92dHNfY2hhbmdlX2V2ZW50X3QgKmVfdnRzOwo+ICsgICAgZHZkbmF2X2NlbGxfY2hhbmdlX2V2 ZW50X3QgKmVfY2VsbDsKPiArICAgIGludCBjdXJfdGl0bGUsIGN1cl9wZ2NuLCBjdXJfcGduLCBj dXJfYW5nbGUsIGN1cl90aXRsZV91bnVzZWQsCj4gY3VyX3B0dCwgY3VyX25iX2FuZ2xlczsKPiAr ICAgIHBjaV90ICpwX3BjaTsKPiArCj4gKyAgICBpZiAoYnVmX3NpemUgIT0gRFZEVklERU9fQkxP Q0tfU0laRSkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGJ1 ZmZlciBzaXplXG4iKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAr ICAgIH0KPiArCj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IERWRFZJREVPX01BWF9QU19TRUFS Q0hfQkxPQ0tTOyBpKyspIHsKPiArICAgICAgICBpZiAoZmZfY2hlY2tfaW50ZXJydXB0KCZzLT5p bnRlcnJ1cHRfY2FsbGJhY2spKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWElUOwo+ ICsKPiArICAgICAgICBpZiAoZHZkbmF2X2dldF9uZXh0X2Jsb2NrKGMtPmR2ZG5hdiwgbmF2X2J1 ZiwgJm5hdl9ldmVudCwKPiAmbmF2X2xlbikgIT0gRFZETkFWX1NUQVRVU19PSykKPiArICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKwo+ICsgICAgICAgIGlmIChuYXZfbGVu ID4gRFZEVklERU9fQkxPQ0tfU0laRSkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7Cj4gKwo+ICsgICAgICAgIGlmIChkdmRuYXZfY3VycmVudF90aXRsZV9wcm9ncmFt KGMtPmR2ZG5hdiwgJmN1cl90aXRsZSwKPiAmY3VyX3BnY24sICZjdXJfcGduKSAhPSBEVkROQVZf U1RBVFVTX09LKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiArCj4g KyAgICAgICAgaWYgKGR2ZG5hdl9jdXJyZW50X3RpdGxlX2luZm8oYy0+ZHZkbmF2LCAmY3VyX3Rp dGxlX3VudXNlZCwKPiAmY3VyX3B0dCkgIT0gRFZETkFWX1NUQVRVU19PSykKPiArICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKwo+ICsgICAgICAgIGlmIChkdmRuYXZfZ2V0 X2FuZ2xlX2luZm8oYy0+ZHZkbmF2LCAmY3VyX2FuZ2xlLCAmY3VyX25iX2FuZ2xlcykKPiAhPSBE VkROQVZfU1RBVFVTX09LKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsK PiArCj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19UUkFDRSwgIm5ldyBibG9jazogaT0lZCBu YXZfZXZlbnQ9JWQgbmF2X2xlbj0lZCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImN1cl90aXRsZT0lZCBjdXJfcHR0PSVkIGN1cl9hbmdsZT0lZAo+IGN1cl9jZWxsbj0lZCBj dXJfcGdjbj0lZCBjdXJfcGduPSVkICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAicGxheV9pbl92dHM9JWQgcGxheV9pbl9wZ2M9JWQKPiBwbGF5X2luX3BzPSVkXG4iLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIG5hdl9ldmVudCwgbmF2X2xlbiwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfdGl0bGUsIGN1cl9wdHQsIGN1cl9h bmdsZSwKPiBjLT5wbGF5X2NlbGxuLCBjdXJfcGdjbiwgY3VyX3BnbiwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjLT5wbGF5X2luX3Z0cywgYy0+cGxheV9pbl9wZ2MsCj4gYy0+ cGxheV9pbl9wcyk7Cj4gKwo+ICsgICAgICAgIGlmIChjLT5wbGF5X2luX3BnYyAmJiAoY3VyX3Bn Y24gIT0gYy0+b3B0X3BnYyB8fAo+ICFkdmRuYXZfaXNfZG9tYWluX3Z0cyhjLT5kdmRuYXYpKSkK PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ICsKPiArICAgICAgICBzd2l0Y2gg KG5hdl9ldmVudCkgewo+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9WVFNfQ0hBTkdFOgo+ICsg ICAgICAgICAgICAgICAgaWYgKGMtPnBsYXlfaW5fdnRzKQo+ICsgICAgICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0VPRjsKPiArCj4gKyAgICAgICAgICAgICAgICBlX3Z0cyA9IChkdmRu YXZfdnRzX2NoYW5nZV9ldmVudF90ICopIG5hdl9idWY7Cj4gKwo+ICsgICAgICAgICAgICAgICAg aWYgKGVfdnRzLT5uZXdfdnRzTiA9PSBjLT5wbGF5X3Z0c24gJiYgZV92dHMtPm5ld19kb21haW4K PiA9PSBEVkRfRE9NQUlOX1ZUU1RpdGxlKQo+ICsgICAgICAgICAgICAgICAgICAgIGMtPnBsYXlf aW5fdnRzID0gMTsKPiArCj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAg ICAgY2FzZSBEVkROQVZfQ0VMTF9DSEFOR0U6Cj4gKyAgICAgICAgICAgICAgICBpZiAoIWMtPnBs YXlfaW5fdnRzKQo+ICsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAg ICAgICAgICAgIGVfY2VsbCA9IChkdmRuYXZfY2VsbF9jaGFuZ2VfZXZlbnRfdCAqKSBuYXZfYnVm Owo+ICsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfVFJBQ0UsICJuZXcgY2Vs bDogcHJldj0lZCBuZXc9JWRcbiIsCj4gYy0+cGxheV9jZWxsbiwgZV9jZWxsLT5jZWxsTik7Cj4g Kwo+ICsgICAgICAgICAgICAgICAgaWYgKCFjLT5wbGF5X2luX3BzICYmICFjLT5wbGF5X2luX3Bn Yykgewo+ICsgICAgICAgICAgICAgICAgICAgIGlmIChjdXJfdGl0bGUgPT0gYy0+b3B0X3RpdGxl ICYmIGN1cl9wdHQgPT0gYy0+b3B0X3B0dAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgY3VyX3BnY24gPT0gYy0+b3B0X3BnYyAmJiBjdXJfcGduID09Cj4gYy0+b3B0X3BnKSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgIGMtPnBsYXlfaW5fcGdjID0gMTsKPiArICAgICAgICAg ICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMtPnBsYXlfY2VsbG4g PiBlX2NlbGwtPmNlbGxOIHx8IGMtPnBsYXlfcGduID4KPiBjdXJfcGduKQo+ICsgICAgICAgICAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiArCj4gKyAgICAgICAgICAgICAgICBjLT5w bGF5X2NlbGxuID0gZV9jZWxsLT5jZWxsTjsKPiArICAgICAgICAgICAgICAgIGMtPnBsYXlfcGdu ID0gY3VyX3BnbjsKPiArICAgICAgICAgICAgICAgIGMtPnBsYXlfc2tpcF9jZWxsX2xhc3QgPSBj LT5wbGF5X3NraXBfY2VsbDsKPiArICAgICAgICAgICAgICAgIC8qIFhYWDogc2hvdWxkIHdlIGJl IHNraXBwaW5nIHJlc3RyaWN0ZWQgY2VsbHMKPiBtaWQtc3RyZWFtPyAqLwo+ICsgICAgICAgICAg ICAgICAgYy0+cGxheV9za2lwX2NlbGwgPQo+IGMtPnBsYXlfcGdjLT5jZWxsX3BsYXliYWNrW2Vf Y2VsbC0+Y2VsbE4gLSAxXS5yZXN0cmljdGVkICE9IDA7Cj4gKwo+ICsgICAgICAgICAgICAgICAg aWYgKGMtPnBsYXlfc2tpcF9jZWxsKQo+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBB Vl9MT0dfVFJBQ0UsICJjZWxsIHNraXBwZWQ6IGNlbGw9JWRcbiIsCj4gZV9jZWxsLT5jZWxsTik7 Cj4gKwo+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAgIGNhc2UgRFZE TkFWX05BVl9QQUNLRVQ6Cj4gKyAgICAgICAgICAgICAgICBpZiAoIWMtPnBsYXlfaW5fcGdjKQo+ ICsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAgIGMt PnBsYXlfcHR0ID0gY3VyX3B0dDsKPiArCj4gKyAgICAgICAgICAgICAgICBwX3BjaSA9IGR2ZG5h dl9nZXRfY3VycmVudF9uYXZfcGNpKGMtPmR2ZG5hdik7Cj4gKwo+ICsgICAgICAgICAgICAgICAg aWYgKCFjLT5wbGF5X2luX3BzKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgLyogWFhYOiB0aGlz IHNob3VsZCBzaGlmdCBzdGFydCB0aW1lIHRvIDAsIGJ1dCBub3QKPiB3b3JraW5nIG9uIGFsbCBk aXNjcyAqLwo+ICsgICAgICAgICAgICAgICAgICAgIGMtPnBsYXlfdHNfb2Zmc2V0IC09IHBfcGNp LT5wY2lfZ2kudm9idV9zX3B0bTsKPiArICAgICAgICAgICAgICAgICAgICBjLT5wbGF5X2luX3Bz ID0gMTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAg ICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgaWYgKGN1cl9wdHQgPCBjLT5wbGF5X3B0dCkK PiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gKwo+ICsgICAgICAg ICAgICAgICAgaWYgKGMtPnBsYXlfc2tpcF9jZWxsKQo+ICsgICAgICAgICAgICAgICAgICAgIGMt PnBsYXlfdHNfb2Zmc2V0IC09IHBfcGNpLT5wY2lfZ2kudm9idV9lX3B0bTsKPiArICAgICAgICAg ICAgICAgIGVsc2UgaWYgKHBfcGNpLT5wY2lfZ2kudm9idV9zX3B0bSA8IGMtPnBsYXlfdm9idV9l X3B0bSkgewo+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfVFJBQ0UsICJk aXNjb250aW51aXR5OiBhZGp1c3RpbmcKPiB0aW1lc3RhbXBzXG4iKTsKPiArCj4gKyAgICAgICAg ICAgICAgICAgICAgYy0+cGxheV90c19vZmZzZXQgKz0gYy0+cGxheV92b2J1X2VfcHRtOwo+ICsK PiArICAgICAgICAgICAgICAgICAgICBpZiAoIWMtPnBsYXlfc2tpcF9jZWxsX2xhc3QpIHsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgYXZpb19mbHVzaCgmYy0+bXBlZ19wYi5wdWIpOwo+ICsg ICAgICAgICAgICAgICAgICAgICAgICBmZl9yZWFkX2ZyYW1lX2ZsdXNoKGMtPm1wZWdfY3R4KTsK PiArICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAg ICAgICAgICAgICAgYy0+cGxheV92b2J1X2VfcHRtID0gcF9wY2ktPnBjaV9naS52b2J1X2VfcHRt Owo+ICsKPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICBjYXNlIERW RE5BVl9CTE9DS19PSzoKPiArICAgICAgICAgICAgICAgIGlmICghYy0+cGxheV9pbl9wcyB8fCBj LT5wbGF5X3NraXBfY2VsbCkKPiArICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArCj4g KyAgICAgICAgICAgICAgICBpZiAobmF2X2xlbiAhPSBEVkRWSURFT19CTE9DS19TSVpFKQo+ICsg ICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsKPiArICAg ICAgICAgICAgICAgIGlmIChjdXJfYW5nbGUgIT0gYy0+b3B0X2FuZ2xlKSB7Cj4gKyAgICAgICAg ICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuZXhwZWN0ZWQgYW5nbGUgY2hh bmdlXG4iKTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5QVVRf Q0hBTkdFRDsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBtZW1j cHkoYnVmLCAmbmF2X2J1ZiwgbmF2X2xlbik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgcmV0dXJu IG5hdl9sZW47Cj4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX1NUSUxMX0ZSQU1FOgo+ICsgICAg ICAgICAgICAgICAgaWYgKGMtPnBsYXlfaW5fcHMpCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfRU9GOwo+ICsKPiArICAgICAgICAgICAgICAgIGR2ZG5hdl9zdGlsbF9za2lw KGMtPmR2ZG5hdik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAg ICAgIGNhc2UgRFZETkFWX1dBSVQ6Cj4gKyAgICAgICAgICAgICAgICBpZiAoYy0+cGxheV9pbl9w cykKPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gKwo+ICsgICAg ICAgICAgICAgICAgZHZkbmF2X3dhaXRfc2tpcChjLT5kdmRuYXYpOwo+ICsKPiArICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9IT1BfQ0hBTk5FTDoK PiArICAgICAgICAgICAgY2FzZSBEVkROQVZfSElHSExJR0hUOgo+ICsgICAgICAgICAgICAgICAg aWYgKGMtPnBsYXlfaW5fcHMpCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf RU9GOwo+ICsKPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICBjYXNl IERWRE5BVl9TVE9QOgo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ICsg ICAgICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAg ICAgfQo+ICsgICAgfQo+ICsKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUg dG8gZmluZCBuZXh0IHByb2dyYW0gc3RyZWFtIGJsb2NrXG4iKTsKPiArCj4gKyAgICByZXR1cm4g QVZFUlJPUl9FT0Y7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGR2ZHZpZGVvX3N1YmRlbXV4X2Ns b3NlKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQg KmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgYXZfZnJlZXAoJmMtPm1wZWdfcGIucHViLmJ1 ZmZlcik7Cj4gKyAgICBhdl9mcmVlcCgmYy0+bXBlZ19wYik7Cj4gKyAgICBhdmZvcm1hdF9jbG9z ZV9pbnB1dCgmYy0+bXBlZ19jdHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1 YmRlbXV4X29wZW4oQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4 Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAg IGNvbnN0IEFWSW5wdXRGb3JtYXQgKm1wZWdfZm10ID0gTlVMTDsKPiArICAgIEFWRm9ybWF0Q29u dGV4dCAqbXBlZ19jdHggPSBOVUxMOwo+ICsgICAgdWludDhfdCAqbXBlZ19idWYgPSBOVUxMOwo+ ICsKPiArICAgIGlmICghKG1wZWdfZm10ID0gYXZfZmluZF9pbnB1dF9mb3JtYXQoIm1wZWciKSkp Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfREVNVVhFUl9OT1RfRk9VTkQ7Cj4gKwo+ICsgICAg aWYgKCEobXBlZ19jdHggPSBhdmZvcm1hdF9hbGxvY19jb250ZXh0KCkpKQo+ICsgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgaWYgKCEobXBlZ19idWYgPSBhdl9tYWxs b2MoRFZEVklERU9fQkxPQ0tfU0laRSkpKSB7Cj4gKyAgICAgICAgYXZmb3JtYXRfZnJlZV9jb250 ZXh0KG1wZWdfY3R4KTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAr ICAgIH0KPiArCj4gKyAgICBmZmlvX2luaXRfY29udGV4dCgmYy0+bXBlZ19wYiwgbXBlZ19idWYs IERWRFZJREVPX0JMT0NLX1NJWkUsIDAsIHMsCj4gKyAgICAgICAgICAgIGR2ZHZpZGVvX3N1YmRl bXV4X3JlYWRfZGF0YSwgTlVMTCwgTlVMTCk7Cj4gKyAgICBjLT5tcGVnX3BiLnB1Yi5zZWVrYWJs ZSA9IDA7Cj4gKwo+ICsgICAgaWYgKChyZXQgPSBmZl9jb3B5X3doaXRlYmxhY2tsaXN0cyhtcGVn X2N0eCwgcykpIDwgMCkgewo+ICsgICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChtcGVnX2N0 eCk7Cj4gKwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbXBlZ19j dHgtPmZsYWdzID0gQVZGTVRfRkxBR19DVVNUT01fSU8gfCBBVkZNVF9GTEFHX0dFTlBUUzsKPiAr ICAgIG1wZWdfY3R4LT5jdHhfZmxhZ3MgfD0gQVZGTVRDVFhfVU5TRUVLQUJMRTsKPiArICAgIG1w ZWdfY3R4LT5wcm9iZXNpemUgPSAwOwo+ICsgICAgbXBlZ19jdHgtPm1heF9hbmFseXplX2R1cmF0 aW9uID0gMDsKPiArICAgIG1wZWdfY3R4LT5pbnRlcnJ1cHRfY2FsbGJhY2sgPSBzLT5pbnRlcnJ1 cHRfY2FsbGJhY2s7Cj4gKyAgICBtcGVnX2N0eC0+cGIgPSAmYy0+bXBlZ19wYi5wdWI7Cj4gKyAg ICBtcGVnX2N0eC0+aW9fb3BlbiA9IE5VTEw7Cj4gKwo+ICsgICAgaWYgKChyZXQgPSBhdmZvcm1h dF9vcGVuX2lucHV0KCZtcGVnX2N0eCwgIiIsIG1wZWdfZm10LCBOVUxMKSkgPCAwKSB7Cj4gKyAg ICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KG1wZWdfY3R4KTsKPiArCj4gKyAgICAgICAgcmV0 dXJuIHJldDsKPiArICAgIH0KPiArCj4gKyAgICBjLT5tcGVnX2ZtdCA9IG1wZWdfZm10Owo+ICsg ICAgYy0+bXBlZ19jdHggPSBtcGVnX2N0eDsKPiArICAgIGMtPm1wZWdfYnVmID0gbXBlZ19idWY7 Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcmVh ZF9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiAr ICAgIGlmICgocmV0ID0gZHZkdmlkZW9fcGdjX29wZW4ocykpIDwgMCkKPiArICAgICAgICByZXR1 cm4gcmV0Owo+ICsKPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fcGdjX2NoYXB0ZXJzX3NldHVw KHMpKSA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBpZiAoKHJldCA9IGR2 ZHZpZGVvX3N1YmRlbXV4X29wZW4ocykpIDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsK PiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fdmlkZW9fc3RyZWFtX3NldHVwKHMpKSA8IDApCj4g KyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX2F1ZGlv X3N0cmVhbV9hZGRfYWxsKHMpKSA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAg ICBpZiAoKHJldCA9IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZF9hbGwocykpIDwgMCkKPiArICAg ICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGR2ZHZpZGVvX3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBr dCkKPiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4g Kwo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICByZXQgPSBhdl9yZWFkX2ZyYW1lKGMtPm1wZWdf Y3R4LCBwa3QpOwo+ICsKPiArICAgIGlmIChyZXQgPj0gMCkgewo+ICsgICAgICAgIGlmIChjLT5t cGVnX2N0eC0+bmJfc3RyZWFtcyAhPSBzLT5uYl9zdHJlYW1zKSB7Cj4gKyAgICAgICAgICAgIGF2 X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmV4cGVjdGVkIG5ldyBzdHJlYW0gaW4KPiBwbGF5YmFj a1xuIik7Cj4gKwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlBVVF9DSEFOR0VEOwo+ ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKHBrdC0+cHRzICE9IEFWX05PUFRTX1ZBTFVF KQo+ICsgICAgICAgICAgICBwa3QtPnB0cyArPSBjLT5wbGF5X3RzX29mZnNldDsKPiArICAgICAg ICBpZiAocGt0LT5kdHMgIT0gQVZfTk9QVFNfVkFMVUUpCj4gKyAgICAgICAgICAgIHBrdC0+ZHRz ICs9IGMtPnBsYXlfdHNfb2Zmc2V0Owo+ICsKPiArICAgICAgICByZXR1cm4gMDsKPiArICAgIH0K PiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3Jl YWRfc2VlayhBVkZvcm1hdENvbnRleHQgKnMsIGludCBzdHJlYW1faW5kZXgsCj4gKyAgICAgICAg aW50NjRfdCB0aW1lc3RhbXAsIGludCBmbGFncykKPiArewo+ICsgICAgcmV0dXJuIEFWRVJST1Jf UEFUQ0hXRUxDT01FOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX2Nsb3NlKEFWRm9y bWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgZHZkdmlkZW9fc3ViZGVtdXhfY2xvc2Uocyk7Cj4g KyAgICBkdmR2aWRlb19wZ2NfY2xvc2Uocyk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcHJvYmUoY29uc3QgQVZQcm9iZURhdGEgKnApCj4gK3sK PiArICAgIC8qIFBBVENIV0VMQ09NRTogbm90IGltcGxlbWVudGVkIGF0IHRoaXMgdGltZSAqLwo+ ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKERW RFZpZGVvRGVtdXhDb250ZXh0LCB4KQo+ICtzdGF0aWMgY29uc3QgQVZPcHRpb24gZHZkdmlkZW9f b3B0aW9uc1tdID0gewo+ICsgICAgeyJ0aXRsZSIsICAgIlRpdGxlIE51bWJlciIsICAgICAgICAg ICAgICAgICAgICAgT0ZGU0VUKG9wdF90aXRsZSksCj4gICBBVl9PUFRfVFlQRV9JTlQsICAgIHsg Lmk2ND0xIH0sICAgICAxLCAgICAgICAgICA5OSwKPiBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJB TSB9LAo+ICsgICAgeyJjaGFwdGVyIiwgIkVudHJ5IENoYXB0ZXIgKFBUVCkgTnVtYmVyIiwgICAg ICAgT0ZGU0VUKG9wdF9wdHQpLAo+ICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MSB9LCAg ICAgMSwgICAgICAgICAgOTksCj4gQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiArICAg IHsicGdjIiwgICAgICJFbnRyeSBQR0MgTnVtYmVyICgwPWF1dG8pIiwgICAgICAgIE9GRlNFVChv cHRfcGdjKSwKPiAgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0PTAgfSwgICAgIDAsICAgICAg ICAgIDMyNzY3LAo+ICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ICsgICAgeyJwZyIs ICAgICAgIkVudHJ5IFBHIE51bWJlciAoMD1hdXRvKSIsICAgICAgICAgT0ZGU0VUKG9wdF9wZyks Cj4gICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9LCAgICAgMCwgICAgICAgICAgMjU1 LAo+ICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ICsgICAgeyJhbmdsZSIsICAgIlZp ZGVvIEFuZ2xlIE51bWJlciIsICAgICAgICAgICAgICAgT0ZGU0VUKG9wdF9hbmdsZSksCj4gICBB Vl9PUFRfVFlQRV9JTlQsICAgIHsgLmk2ND0xIH0sICAgICAxLCAgICAgICAgICA5LAo+ICBBVl9P UFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ICsgICAgeyJyZWdpb24iLCAgIlBsYXliYWNrIFJl Z2lvbiBOdW1iZXIgKDA9ZnJlZSkiLCAgT0ZGU0VUKG9wdF9yZWdpb24pLAo+ICAgIEFWX09QVF9U WVBFX0lOVCwgICAgeyAuaTY0PTAgfSwgICAgIDAsICAgICAgICAgIDgsCj4gIEFWX09QVF9GTEFH X0RFQ09ESU5HX1BBUkFNIH0sCj4gKyAgICB7TlVMTH0KPiArfTsKPiArCj4gK3N0YXRpYyBjb25z dCBBVkNsYXNzIGR2ZHZpZGVvX2NsYXNzID0gewo+ICsgICAgLmNsYXNzX25hbWUgPSAiRFZELVZp ZGVvIGRlbXV4ZXIiLAo+ICsgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwK PiArICAgIC5vcHRpb24gICAgID0gZHZkdmlkZW9fb3B0aW9ucywKPiArICAgIC52ZXJzaW9uICAg ID0gTElCQVZVVElMX1ZFUlNJT05fSU5UCj4gK307Cj4gKwo+ICtjb25zdCBBVklucHV0Rm9ybWF0 IGZmX2R2ZHZpZGVvX2RlbXV4ZXIgPSB7Cj4gKyAgICAubmFtZSAgICAgICAgICAgPSAiZHZkdmlk ZW8iLAo+ICsgICAgLmxvbmdfbmFtZSAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkRWRC1W aWRlbyIpLAo+ICsgICAgLnByaXZfY2xhc3MgICAgID0gJmR2ZHZpZGVvX2NsYXNzLAo+ICsgICAg LnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKERWRFZpZGVvRGVtdXhDb250ZXh0KSwKPiArICAgIC5m bGFncyAgICAgICAgICA9IEFWRk1UX05PRklMRSB8IEFWRk1UX1NIT1dfSURTIHwgQVZGTVRfVFNf RElTQ09OVCB8Cj4gQVZGTVRfTk9fQllURV9TRUVLIHwgQVZGTVRfTk9HRU5TRUFSQ0ggfCBBVkZN VF9OT0JJTlNFQVJDSCwKPiArICAgIC5mbGFnc19pbnRlcm5hbCA9IEZGX0ZNVF9JTklUX0NMRUFO VVAsCj4gKyAgICAucmVhZF9wcm9iZSAgICAgPSBkdmR2aWRlb19wcm9iZSwKPiArICAgIC5yZWFk X2Nsb3NlICAgICA9IGR2ZHZpZGVvX2Nsb3NlLAo+ICsgICAgLnJlYWRfaGVhZGVyICAgID0gZHZk dmlkZW9fcmVhZF9oZWFkZXIsCj4gKyAgICAucmVhZF9wYWNrZXQgICAgPSBkdmR2aWRlb19yZWFk X3BhY2tldCwKPiArICAgIC5yZWFkX3NlZWsgICAgICA9IGR2ZHZpZGVvX3JlYWRfc2Vlawo+ICt9 Owo+IC0tCj4gMi4zNC4xCj4KPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==