From mboxrd@z Thu Jan 1 00:00:00 1970 From: Igor Mammedov Subject: Re: [PATCH v5 11/24] hw: acpi: Export and generalize the PCI host AML API Date: Wed, 14 Nov 2018 11:55:37 +0100 Message-ID: <20181114115537.3357921b@redhat.com> References: <20181105014047.26447-1-sameo@linux.intel.com> <20181105014047.26447-12-sameo@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gMspq-000058-IH for xen-devel@lists.xenproject.org; Wed, 14 Nov 2018 10:55:50 +0000 In-Reply-To: <20181105014047.26447-12-sameo@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Samuel Ortiz , Marcel Apfelbaum Cc: Yang Zhong , Peter Maydell , Stefano Stabellini , Eduardo Habkost , Rob Bradford , "Michael S. Tsirkin" , qemu-devel@nongnu.org, Shannon Zhao , qemu-arm@nongnu.org, Paolo Bonzini , Anthony Perard , xen-devel@lists.xenproject.org, Richard Henderson List-Id: xen-devel@lists.xenproject.org T24gTW9uLCAgNSBOb3YgMjAxOCAwMjo0MDozNCArMDEwMApTYW11ZWwgT3J0aXogPHNhbWVvQGxp bnV4LmludGVsLmNvbT4gd3JvdGU6Cgo+IEZyb206IFlhbmcgWmhvbmcgPHlhbmcuemhvbmdAaW50 ZWwuY29tPgo+IAo+IFRoZSBBTUwgYnVpbGQgcm91dGluZXMgZm9yIHRoZSBQQ0kgaG9zdCBicmlk Z2UgYW5kIHRoZSBjb3JyZXNwb25kaW5nCj4gRFNEVCBhZGRpdGlvbiBhcmUgbmVpdGhlciB4ODYg bm9yIFBDIG1hY2hpbmUgdHlwZSBzcGVjaWZpYy4KPiBXZSBjYW4gbW92ZSB0aGVtIHRvIHRoZSBh cmNoaXRlY3R1cmUgYWdub3N0aWMgaHcvYWNwaSBmb2xkZXIsIGFuZCBieQo+IGNhcnJ5aW5nIGFs bCB0aGUgbmVlZGVkIGluZm9ybWF0aW9uIHRocm91Z2ggYSBuZXcgQWNwaVBjaUJ1cyBzdHJ1Y3R1 cmUsCj4gd2UgY2FuIG1ha2UgdGhlbSBQQyBtYWNoaW5lIHR5cGUgaW5kZXBlbmRlbnQuCgpJJ20g ZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCBQQ0ksIGJ1dCBmdW5jdGlvbmFsIGNoYW5nZXMgZG9l c24ndCBsb29rCmNvcnJlY3QgdG8gbWUuIFNlZSBtb3JlIGRldGFpbGVkIGNvbW1lbnRzIGJlbG93 LgoKTWFyY2VsLApjb3VsZCB5b3UgdGFrZSBhIGxvb2sgb24gdGhpcyBwYXRjaCAoaW4gcGFydGlj dWxhciBtYWluIGNzciBjaGFuZ2VzKSwgcGxzPwoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBZYW5nIFpo b25nIDx5YW5nLnpob25nQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBSb2IgQnJhZGZvcmQg PHJvYmVydC5icmFkZm9yZEBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogU2FtdWVsIE9ydGl6 IDxzYW1lb0BsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIGluY2x1ZGUvaHcvYWNwaS9hbWwtYnVp bGQuaCB8ICAgOCArKwo+ICBody9hY3BpL2FtbC1idWlsZC5jICAgICAgICAgfCAxNTcgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGh3L2kzODYvYWNwaS1idWlsZC5jICAg ICAgICB8IDExNSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAzIGZpbGVzIGNoYW5nZWQs IDE3MyBpbnNlcnRpb25zKCspLCAxMDcgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvaHcvYWNwaS9hbWwtYnVpbGQuaCBiL2luY2x1ZGUvaHcvYWNwaS9hbWwtYnVpbGQuaAo+ IGluZGV4IGZkZTI3ODViOWEuLjE4NjFlMzdlYmYgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9ody9h Y3BpL2FtbC1idWlsZC5oCj4gKysrIGIvaW5jbHVkZS9ody9hY3BpL2FtbC1idWlsZC5oCj4gQEAg LTIyOSw2ICsyMjksMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQWNwaU1jZmdJbmZvIHsKPiAgICAgIHVp bnQzMl90IG1jZmdfc2l6ZTsKPiAgfSBBY3BpTWNmZ0luZm87Cj4gIAo+ICt0eXBlZGVmIHN0cnVj dCBBY3BpUGNpQnVzIHsKPiArICAgIFBDSUJ1cyAqcGNpX2J1czsKPiArICAgIFJhbmdlICpwY2lf aG9sZTsKPiArICAgIFJhbmdlICpwY2lfaG9sZTY0Owo+ICt9IEFjcGlQY2lCdXM7CkFnYWluLCB0 aGlzIGFuZCBhbGwgYmVsb3cgaXMgbm90IGFtbC1idWlsZCBtYXRlcmlhbC4KQ29uc2lkZXIgYWRk aW5nL3VzaW5nIHBjaSBzcGVjaWZpYyBhY3BpIGZpbGUgZm9yIGl0LgoKQWxzbyBldmVuIHRob3Vn aCBwY2kgQU1MIGluIGFybS92aXJ0IGlzIHRvIGEgbGFyZ2UgZGVncmVlIGEgc3Vic2V0Cm9mIHg4 NiB0YXJnZXQgYW5kIGl0IHdvdWxkIGJlIG11Y2ggYmV0dGVyIHRvIHVuaWZ5IEFSTSBwYXJ0IHdp dGggeDg2LAppdCBwcm9iYWJseSB3aWxsIGJlIHRvIGJpZy9jb21wbGV4IG9mIGEgY2hhbmdlIGlm IHdlIHRha2Ugb24gaXQgaW4Kb25lIGdvLgoKU28gbm90IHRvIGRlcmFpbCB5b3UgZnJvbSB0aGUg Z29hbCB0b28gbXVjaCwgd2UgcHJvYmFibHkgc2hvdWxkCmdlbmVyYWxpemUgdGhpcyBhIGxpdHRs ZSBiaXQgbGVzcywgbGltaXRpbmcgcmVmYWN0b3JpbmcgdG8geDg2CnRhcmdldCBmb3Igbm93LgoK Rm9yIGV4YW1wbGUsIG1vdmUgZ2VuZXJpYyB4ODYgcGNpIHBhcnRzIHRvIGh3L2kzODYvYWNwaS1w Y2kuW2hjXSwKYW5kIHN0cnVjdHVyZSBpdCBzbyB0aGF0IGJ1aWxkaW5nIGJsb2NrcyBpbiBhY3Bp LXBjaS5jIGNvdWxkIGJlCnJldXNlZCBmb3IgeDg2IHJlZHVjZWQgcHJvZmlsZSBsYXRlci4KT25j ZSBpdCdzIGJlZW4gZG9uZSwgaXQgbWlnaHQgYmUgZWFzaWVyIGFuZCBsZXNzIGNvbXBsZXggdG8K dW5pZnkgYSBiaXQgbW9yZSBnZW5lcmljIGNvZGUgaW4gaTM4Ni9hY3BpLXBjaS5jIHdpdGggY29y cmVzcG9uZGluZwpBUk0gY29kZS4KClBhdGNoIGlzIHRvbyBiaWcgYW5kIHNob3VsZCBiZSBzcGxp dCBpbnRvIHNtYWxsZXIgbG9naWNhbCBjaHVua3MKYW5kIHlvdSBzaG91bGQgc2VwYXJhdGUgY29k ZSBtb3ZlbWVudCB2cyBmdW5jdGlvbmFsIGNoYW5nZXMgeW91J3JlCmEgbWFraW5nIGhlcmUuCgpP bmNlIHlvdSBzcGxpdCBwYXRjaCBwcm9wZXJseSwgaXQgc2hvdWxkIGJlIGVhc2llciB0byBhc3Nl c3MKY2hhbmdlcy4KCj4gIHR5cGVkZWYgc3RydWN0IENyc1JhbmdlRW50cnkgewo+ICAgICAgdWlu dDY0X3QgYmFzZTsKPiAgICAgIHVpbnQ2NF90IGxpbWl0Owo+IEBAIC00MTEsNiArNDE3LDggQEAg QW1sICpidWlsZF9vc2NfbWV0aG9kKHVpbnQzMl90IHZhbHVlKTsKPiAgdm9pZCBidWlsZF9tY2Zn KEdBcnJheSAqdGFibGVfZGF0YSwgQklPU0xpbmtlciAqbGlua2VyLCBBY3BpTWNmZ0luZm8gKmlu Zm8pOwo+ICBBbWwgKmJ1aWxkX2dzaV9saW5rX2Rldihjb25zdCBjaGFyICpuYW1lLCB1aW50OF90 IHVpZCwgdWludDhfdCBnc2kpOwo+ICBBbWwgKmJ1aWxkX3BydChib29sIGlzX3BjaTBfcHJ0KTsK PiArdm9pZCBhY3BpX2RzZHRfYWRkX3BjaV9idXMoQW1sICpkc2R0LCBBY3BpUGNpQnVzICpwY2lf aG9zdCk7Cj4gK0FtbCAqYnVpbGRfcGNpX2hvc3RfYnJpZGdlKEFtbCAqdGFibGUsIEFjcGlQY2lC dXMgKnBjaV9ob3N0KTsKPiAgdm9pZCBjcnNfcmFuZ2Vfc2V0X2luaXQoQ3JzUmFuZ2VTZXQgKnJh bmdlX3NldCk7Cj4gIEFtbCAqYnVpbGRfY3JzKFBDSUhvc3RTdGF0ZSAqaG9zdCwgQ3JzUmFuZ2VT ZXQgKnJhbmdlX3NldCk7Cj4gIHZvaWQgY3JzX3JlcGxhY2Vfd2l0aF9mcmVlX3JhbmdlcyhHUHRy QXJyYXkgKnJhbmdlcywKPiBkaWZmIC0tZ2l0IGEvaHcvYWNwaS9hbWwtYnVpbGQuYyBiL2h3L2Fj cGkvYW1sLWJ1aWxkLmMKPiBpbmRleCBiOGUzMmYxNWY3Li44NjllZDcwZGIzIDEwMDY0NAo+IC0t LSBhL2h3L2FjcGkvYW1sLWJ1aWxkLmMKPiArKysgYi9ody9hY3BpL2FtbC1idWlsZC5jCj4gQEAg LTI5LDYgKzI5LDE5IEBACj4gICNpbmNsdWRlICJody9wY2kvcGNpX2J1cy5oIgo+ICAjaW5jbHVk ZSAicWVtdS9yYW5nZS5oIgo+ICAjaW5jbHVkZSAiaHcvcGNpL3BjaV9icmlkZ2UuaCIKPiArI2lu Y2x1ZGUgImh3L2kzODYvcGMuaCIKPiArI2luY2x1ZGUgInN5c2VtdS90cG0uaCIKPiArI2luY2x1 ZGUgImh3L2FjcGkvdHBtLmgiCj4gKwo+ICsjZGVmaW5lIFBDSV9IT1NUX0JSSURHRV9DT05GSUdf QUREUiAgICAgICAgMHhjZjgKPiArI2RlZmluZSBQQ0lfSE9TVF9CUklER0VfSU9fMF9NSU5fQURE UiAgICAgIDB4MDAwMAo+ICsjZGVmaW5lIFBDSV9IT1NUX0JSSURHRV9JT18wX01BWF9BRERSICAg ICAgMHgwY2Y3Cj4gKyNkZWZpbmUgUENJX0hPU1RfQlJJREdFX0lPXzFfTUlOX0FERFIgICAgICAw eDBkMDAKPiArI2RlZmluZSBQQ0lfSE9TVF9CUklER0VfSU9fMV9NQVhfQUREUiAgICAgIDB4ZmZm Zgo+ICsjZGVmaW5lIFBDSV9WR0FfTUVNX0JBU0VfQUREUiAgICAgICAgICAgICAgMHgwMDBhMDAw MAo+ICsjZGVmaW5lIFBDSV9WR0FfTUVNX01BWF9BRERSICAgICAgICAgICAgICAgMHgwMDBiZmZm Zgo+ICsjZGVmaW5lIElPXzBfTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjZjgKPiAr I2RlZmluZSBWR0FfTUVNX0xFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAKPiAgCj4g IHN0YXRpYyBHQXJyYXkgKmJ1aWxkX2FsbG9jX2FycmF5KHZvaWQpCj4gIHsKPiBAQCAtMjE0Miw2 ICsyMTU1LDE1MCBAQCBBbWwgKmJ1aWxkX3BydChib29sIGlzX3BjaTBfcHJ0KQo+ICAgICAgcmV0 dXJuIG1ldGhvZDsKPiAgfQo+ICAKPiArQW1sICpidWlsZF9wY2lfaG9zdF9icmlkZ2UoQW1sICp0 YWJsZSwgQWNwaVBjaUJ1cyAqcGNpX2hvc3QpCm5hbWUgZG9lc24ndCByZWZsZWN0IGV4YWN0bHkg d2hhdCBmdW5jdGlvbiBkb2VzLAppdCBidWlsZHMgZGV2aWNlIGRlc2NyaXB0aW9ucyBmb3IgZXhw YW5kZXIgYnVzZXMgKGluY2x1ZGluZyB0aGVpciBjc3IpCmFuZCB0aGVuIGl0IGJ1aWxkcyBjc3Ig Zm9yIGZvciBtYWluIHBjaSBob3N0IGJ1dCBub3QgcGNpIGRldmljZSBkZXNjcmlwdGlvbi4KCkkn ZCBzdWdnZXN0IHRvIHNwbGl0IG91dCBleHBhbmRlciBidXNlcyBwYXJ0IGludG8gc2VwYXJhdGUg ZnVuY3Rpb24KdGhhdCByZXR1cm5zIGFuIGV4cGFuZGVyIGJ1cyBkZXZpY2UgZGVzY3JpcHRpb24s IHVwZGF0ZXMgY3JzX3JhbmdlX3NldAphbmQgbGV0IHRoZSBjYWxsZXIgdG8gZW51bWVyYXRlIGJ1 c2VzIGFuZCBhZGQgZGVzY3JpcHRpb25zIHRvIGRzZHQuCgpUaGVuIGFmdGVyIGl0IHdlIGNvdWxk IGRvIGEgZ2VuZXJpYyBjc3IgZ2VuZXJhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1haW4gcGNpIGhv c3QKaWYgaXQncyBwb3NzaWJsZSBhdCBhbGwgKG1haW4gcGNpIGhvc3QgY3NyIHNlZW1zIGhlYXZp bHkgYm9hcmQgZGVwZW5kZWQpCgpJbnN0ZWFkIG9mIHRha2luZyB0YWJsZSBhbmQgYWRkaW5nIHN0 dWZmIGRpcmVjdGx5IGluIHRvIGl0Cml0IHNob3VsZCBiZSBjbGVhbmVyIHRvIHRha2UgYXMgYXJn dW1lbnQgZW1wdHkgY3NyIChjcnMgPSBhbWxfcmVzb3VyY2VfdGVtcGxhdGUoKTspCmFkZCBzdHVm ZiB0byBpdCBhbmQgbGV0IHRoZSBjYWxsZXIgdG8gYWRkL2V4dGVuZCBjc3IgYXMvd2hlcmUgbmVj ZXNzYXJ5LgoKPiArewo+ICsgICAgQ3JzUmFuZ2VFbnRyeSAqZW50cnk7Cj4gKyAgICBBbWwgKnNj b3BlLCAqZGV2LCAqY3JzOwo+ICsgICAgQ3JzUmFuZ2VTZXQgY3JzX3JhbmdlX3NldDsKPiArICAg IFJhbmdlICpwY2lfaG9sZSA9IE5VTEw7Cj4gKyAgICBSYW5nZSAqcGNpX2hvbGU2NCA9IE5VTEw7 Cj4gKyAgICBQQ0lCdXMgKmJ1cyA9IE5VTEw7Cj4gKyAgICBpbnQgcm9vdF9idXNfbGltaXQgPSAw eEZGOwo+ICsgICAgaW50IGk7Cj4gKwo+ICsgICAgYnVzID0gcGNpX2hvc3QtPnBjaV9idXM7Cj4g KyAgICBhc3NlcnQoYnVzKTsKPiArICAgIHBjaV9ob2xlID0gcGNpX2hvc3QtPnBjaV9ob2xlOwo+ ICsgICAgcGNpX2hvbGU2NCA9IHBjaV9ob3N0LT5wY2lfaG9sZTY0Owo+ICsKPiArICAgIGNyc19y YW5nZV9zZXRfaW5pdCgmY3JzX3JhbmdlX3NldCk7Cj4gKyAgICBRTElTVF9GT1JFQUNIKGJ1cywg JmJ1cy0+Y2hpbGQsIHNpYmxpbmcpIHsKPiArICAgICAgICB1aW50OF90IGJ1c19udW0gPSBwY2lf YnVzX251bShidXMpOwo+ICsgICAgICAgIHVpbnQ4X3QgbnVtYV9ub2RlID0gcGNpX2J1c19udW1h X25vZGUoYnVzKTsKPiArCj4gKyAgICAgICAgLyogbG9vayBvbmx5IGZvciBleHBhbmRlciByb290 IGJ1c2VzICovCj4gKyAgICAgICAgaWYgKCFwY2lfYnVzX2lzX3Jvb3QoYnVzKSkgewo+ICsgICAg ICAgICAgICBjb250aW51ZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIChidXNfbnVt IDwgcm9vdF9idXNfbGltaXQpIHsKPiArICAgICAgICAgICAgcm9vdF9idXNfbGltaXQgPSBidXNf bnVtIC0gMTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHNjb3BlID0gYW1sX3Njb3BlKCJc XF9TQiIpOwo+ICsgICAgICAgIGRldiA9IGFtbF9kZXZpY2UoIlBDJS4wMlgiLCBidXNfbnVtKTsK PiArICAgICAgICBhbWxfYXBwZW5kKGRldiwgYW1sX25hbWVfZGVjbCgiX1VJRCIsIGFtbF9pbnQo YnVzX251bSkpKTsKPiArICAgICAgICBhbWxfYXBwZW5kKGRldiwgYW1sX25hbWVfZGVjbCgiX0hJ RCIsIGFtbF9laXNhaWQoIlBOUDBBMDMiKSkpOwo+ICsgICAgICAgIGFtbF9hcHBlbmQoZGV2LCBh bWxfbmFtZV9kZWNsKCJfQkJOIiwgYW1sX2ludChidXNfbnVtKSkpOwo+ICsgICAgICAgIGlmIChw Y2lfYnVzX2lzX2V4cHJlc3MoYnVzKSkgewo+ICsgICAgICAgICAgICBhbWxfYXBwZW5kKGRldiwg YW1sX25hbWVfZGVjbCgiU1VQUCIsIGFtbF9pbnQoMCkpKTsKPiArICAgICAgICAgICAgYW1sX2Fw cGVuZChkZXYsIGFtbF9uYW1lX2RlY2woIkNUUkwiLCBhbWxfaW50KDApKSk7Cj4gKyAgICAgICAg ICAgIGFtbF9hcHBlbmQoZGV2LCBidWlsZF9vc2NfbWV0aG9kKDB4MUYpKTsKPiArICAgICAgICB9 Cj4gKyAgICAgICAgaWYgKG51bWFfbm9kZSAhPSBOVU1BX05PREVfVU5BU1NJR05FRCkgewo+ICsg ICAgICAgICAgICBhbWxfYXBwZW5kKGRldiwgYW1sX25hbWVfZGVjbCgiX1BYTSIsIGFtbF9pbnQo bnVtYV9ub2RlKSkpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgYW1sX2FwcGVuZChkZXYs IGJ1aWxkX3BydChmYWxzZSkpOwo+ICsgICAgICAgIGNycyA9IGJ1aWxkX2NycyhQQ0lfSE9TVF9C UklER0UoQlVTKGJ1cyktPnBhcmVudCksICZjcnNfcmFuZ2Vfc2V0KTsKPiArICAgICAgICBhbWxf YXBwZW5kKGRldiwgYW1sX25hbWVfZGVjbCgiX0NSUyIsIGNycykpOwo+ICsgICAgICAgIGFtbF9h cHBlbmQoc2NvcGUsIGRldik7Cj4gKyAgICAgICAgYW1sX2FwcGVuZCh0YWJsZSwgc2NvcGUpOwo+ ICsgICAgfQo+ICsgICAgc2NvcGUgPSBhbWxfc2NvcGUoIlxcX1NCLlBDSTAiKTsKPiArICAgIC8q IGJ1aWxkIFBDSTAuX0NSUyAqLwo+ICsgICAgY3JzID0gYW1sX3Jlc291cmNlX3RlbXBsYXRlKCk7 Cj4gKyAgICAvKiBzZXQgdGhlIHBjaWUgYnVzIG51bSAqLwo+ICsgICAgYW1sX2FwcGVuZChjcnMs Cj4gKyAgICAgICAgYW1sX3dvcmRfYnVzX251bWJlcihBTUxfTUlOX0ZJWEVELCBBTUxfTUFYX0ZJ WEVELCBBTUxfUE9TX0RFQ09ERSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAw MCwgMHgwLCByb290X2J1c19saW1pdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAwMCwgcm9vdF9idXNfbGltaXQgKyAxKSk7Cgp2dnZ2Cj4gKyAgICBhbWxfYXBwZW5kKGNycywg YW1sX2lvKEFNTF9ERUNPREUxNiwgUENJX0hPU1RfQlJJREdFX0NPTkZJR19BRERSLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICBQQ0lfSE9TVF9CUklER0VfQ09ORklHX0FERFIsIDB4MDEs IDB4MDgpKTsKPiArICAgIC8qIHNldCB0aGUgaW8gcmVnaW9uIDAgaW4gcGNpIGhvc3QgYnJpZGdl ICovCj4gKyAgICBhbWxfYXBwZW5kKGNycywKPiArICAgICAgICBhbWxfd29yZF9pbyhBTUxfTUlO X0ZJWEVELCBBTUxfTUFYX0ZJWEVELAo+ICsgICAgICAgICAgICAgICAgICAgIEFNTF9QT1NfREVD T0RFLCBBTUxfRU5USVJFX1JBTkdFLAo+ICsgICAgICAgICAgICAgICAgICAgIDB4MDAwMCwgUENJ X0hPU1RfQlJJREdFX0lPXzBfTUlOX0FERFIsCj4gKyAgICAgICAgICAgICAgICAgICAgUENJX0hP U1RfQlJJREdFX0lPXzBfTUFYX0FERFIsIDB4MDAwMCwgSU9fMF9MRU4pKTsKPiArCj4gKyAgICAv KiBzZXQgdGhlIGlvIHJlZ2lvbiAxIGluIHBjaSBob3N0IGJyaWRnZSAqLwo+ICsgICAgY3JzX3Jl cGxhY2Vfd2l0aF9mcmVlX3JhbmdlcyhjcnNfcmFuZ2Vfc2V0LmlvX3JhbmdlcywKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0hPU1RfQlJJREdFX0lPXzFfTUlOX0FERFIs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9IT1NUX0JSSURHRV9JT18x X01BWF9BRERSKTsKYWJvdmUgY29kZSBkb2Vzbid0IGxvb2sgYXMganVzdCBhIG1vdmVtZW50LCBp dCdzIHNvbWV0aGluZyB0b3RhbGx5IG5ldywKc28gaXQgc2hvdWxkIGJlIGluIGl0J3Mgb3duIHBh dGNoIHdpdGggYSBqdXN0aWZpY2F0aW9uIHdoeSBpdCdzIG9rCnRvIHJlcGxhY2UgY29uY3JldGUg YWRkcmVzc2VzIHdpdGggc29tZSBraW5kIG9mIHdpbmRvdy4KCgo+ICsgICAgZm9yIChpID0gMDsg aSA8IGNyc19yYW5nZV9zZXQuaW9fcmFuZ2VzLT5sZW47IGkrKykgewo+ICsgICAgICAgIGVudHJ5 ID0gZ19wdHJfYXJyYXlfaW5kZXgoY3JzX3JhbmdlX3NldC5pb19yYW5nZXMsIGkpOwo+ICsgICAg ICAgIGFtbF9hcHBlbmQoY3JzLAo+ICsgICAgICAgICAgICBhbWxfd29yZF9pbyhBTUxfTUlOX0ZJ WEVELCBBTUxfTUFYX0ZJWEVELAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBBTUxfUE9TX0RF Q09ERSwgQU1MX0VOVElSRV9SQU5HRSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw LCBlbnRyeS0+YmFzZSwgZW50cnktPmxpbWl0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAw eDAwMDAsIGVudHJ5LT5saW1pdCAtIGVudHJ5LT5iYXNlICsgMSkpOwo+ICsgICAgfQo+ICsKCj4g KyAgICAvKiBzZXQgdGhlIHZnYSBtZW0gcmVnaW9uKDApIGluIHBjaSBob3N0IGJyaWRnZSAqLwo+ ICsgICAgYW1sX2FwcGVuZChjcnMsCj4gKyAgICAgICAgYW1sX2R3b3JkX21lbW9yeShBTUxfUE9T X0RFQ09ERSwgQU1MX01JTl9GSVhFRCwgQU1MX01BWF9GSVhFRCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgIEFNTF9DQUNIRUFCTEUsIEFNTF9SRUFEX1dSSVRFLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgUENJX1ZHQV9NRU1fQkFTRV9BRERSLCBQQ0lfVkdBX01FTV9NQVhfQURE UiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFZHQV9NRU1fTEVOKSk7CnRoaXMgcGFy dCBkb2Vzbid0IGxvb2sgZ2VuZXJpYyBlbm91Z2guCkknZCBhc3N1bWUgbmV3IHNoaW55IGkzODYv dmlydCB3b24ndCBoYXZlIFZHQSBhbmQKYXNzdW1pbmcgb25lIGRheSB3ZSB3b3VsZCByZXVzZSB0 aGlzIGNvZGUgZm9yIEFSTSBpdCBwcm9iYWJseSBkb2Vzbid0Cm1ha2Ugc2Vuc2UgdG8gcHV0IGl0 IGluIGdlbmVyaWMgY29kZS4KCj4gKwo+ICsgICAgLyogc2V0IHRoZSBtZW0gcmVnaW9uIDEgaW4g cGNpIGhvc3QgYnJpZGdlICovCj4gKyAgICBjcnNfcmVwbGFjZV93aXRoX2ZyZWVfcmFuZ2VzKGNy c19yYW5nZV9zZXQubWVtX3JhbmdlcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmFuZ2VfbG9iKHBjaV9ob2xlKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmFuZ2VfdXBiKHBjaV9ob2xlKSk7Cj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgY3JzX3Jhbmdl X3NldC5tZW1fcmFuZ2VzLT5sZW47IGkrKykgewo+ICsgICAgICAgIGVudHJ5ID0gZ19wdHJfYXJy YXlfaW5kZXgoY3JzX3JhbmdlX3NldC5tZW1fcmFuZ2VzLCBpKTsKPiArICAgICAgICBhbWxfYXBw ZW5kKGNycywKPiArICAgICAgICAgICAgYW1sX2R3b3JkX21lbW9yeShBTUxfUE9TX0RFQ09ERSwg QU1MX01JTl9GSVhFRCwgQU1MX01BWF9GSVhFRCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBTUxfTk9OX0NBQ0hFQUJMRSwgQU1MX1JFQURfV1JJVEUsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwgZW50cnktPmJhc2UsIGVudHJ5LT5saW1pdCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAwLCBlbnRyeS0+bGltaXQgLSBlbnRyeS0+YmFzZSArIDEpKTsK PiArICAgIH0KPiArCj4gKyAgICAvKiBzZXQgdGhlIG1lbSByZWdpb24gMiBpbiBwY2kgaG9zdCBi cmlkZ2UgKi8KPiArICAgIGlmICghcmFuZ2VfaXNfZW1wdHkocGNpX2hvbGU2NCkpIHsKPiArICAg ICAgICBjcnNfcmVwbGFjZV93aXRoX2ZyZWVfcmFuZ2VzKGNyc19yYW5nZV9zZXQubWVtXzY0Yml0 X3JhbmdlcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX2xv YihwY2lfaG9sZTY0KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh bmdlX3VwYihwY2lfaG9sZTY0KSk7Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNyc19yYW5n ZV9zZXQubWVtXzY0Yml0X3Jhbmdlcy0+bGVuOyBpKyspIHsKPiArICAgICAgICAgICAgZW50cnkg PSBnX3B0cl9hcnJheV9pbmRleChjcnNfcmFuZ2Vfc2V0Lm1lbV82NGJpdF9yYW5nZXMsIGkpOwo+ ICsgICAgICAgICAgICBhbWxfYXBwZW5kKGNycywKPiArICAgICAgICAgICAgICAgICAgICAgICBh bWxfcXdvcmRfbWVtb3J5KEFNTF9QT1NfREVDT0RFLCBBTUxfTUlOX0ZJWEVELAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1MX01BWF9GSVhFRCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNTF9DQUNIRUFCTEUsIEFNTF9SRUFE X1dSSVRFLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZW50 cnktPmJhc2UsIGVudHJ5LT5saW1pdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIGVudHJ5LT5saW1pdCAtIGVudHJ5LT5iYXNlICsgMSkpOwo+ICsgICAgICAg IH0KPiArICAgIH0KPiArCj4gKyAgICBpZiAoVFBNX0lTX1RJUyh0cG1fZmluZCgpKSkgewo+ICsg ICAgICAgIGFtbF9hcHBlbmQoY3JzLCBhbWxfbWVtb3J5MzJfZml4ZWQoVFBNX1RJU19BRERSX0JB U0UsCj4gKyAgICAgICAgICAgICAgICAgICBUUE1fVElTX0FERFJfU0laRSwgQU1MX1JFQURfV1JJ VEUpKTsKZGl0dG8sIGJvYXJkIGRlcGVuZGVkIGFuZCBub3QgZ2VuZXJpYyBlbm91Z2ggdG8gZ28g aGVyZQoKPiArICAgIH0KPiArCj4gKyAgICBhbWxfYXBwZW5kKHNjb3BlLCBhbWxfbmFtZV9kZWNs KCJfQ1JTIiwgY3JzKSk7Cj4gKyAgICBjcnNfcmFuZ2Vfc2V0X2ZyZWUoJmNyc19yYW5nZV9zZXQp Owo+ICsgICAgcmV0dXJuIHNjb3BlOwo+ICt9Cj4gKwo+ICt2b2lkIGFjcGlfZHNkdF9hZGRfcGNp X2J1cyhBbWwgKmRzZHQsIEFjcGlQY2lCdXMgKnBjaV9ob3N0KQpub3QgdXNlZCBpbiB0aGlzIHBh dGNoLCBkcm9wIGl0IGZvciBub3cuCgo+ICt7Cj4gKyAgICBBbWwgKmRldiwgKnBjaV9zY29wZTsK PiArCj4gKyAgICBkZXYgPSBhbWxfZGV2aWNlKCJcXF9TQi5QQ0kwIik7Cj4gKyAgICBhbWxfYXBw ZW5kKGRldiwgYW1sX25hbWVfZGVjbCgiX0hJRCIsIGFtbF9laXNhaWQoIlBOUDBBMDgiKSkpOwo+ ICsgICAgYW1sX2FwcGVuZChkZXYsIGFtbF9uYW1lX2RlY2woIl9DSUQiLCBhbWxfZWlzYWlkKCJQ TlAwQTAzIikpKTsKPiArICAgIGFtbF9hcHBlbmQoZGV2LCBhbWxfbmFtZV9kZWNsKCJfQURSIiwg YW1sX2ludCgwKSkpOwo+ICsgICAgYW1sX2FwcGVuZChkZXYsIGFtbF9uYW1lX2RlY2woIl9VSUQi LCBhbWxfaW50KDEpKSk7Cj4gKyAgICBhbWxfYXBwZW5kKGRldiwgYW1sX25hbWVfZGVjbCgiU1VQ UCIsIGFtbF9pbnQoMCkpKTsKPiArICAgIGFtbF9hcHBlbmQoZGV2LCBhbWxfbmFtZV9kZWNsKCJD VFJMIiwgYW1sX2ludCgwKSkpOwo+ICsgICAgYW1sX2FwcGVuZChkZXYsIGJ1aWxkX29zY19tZXRo b2QoMHgxRikpOwpEb2VzIGFib3ZlIGRlc2NyaXB0aW9uIGFwcGxpY2FibGUgdG8gYWxsIGJvYXJk cyAocGMvcTM1L2Z1dHVyZSBpMzg2L3ZpcnQpPwpjdXJyZW50IGNvZGUgYnVpbGRzIFBDSSBkaWZm ZXJlbnRseSBkZXBlbmRpbmcgb24gYm9hcmQuCgo+ICsgICAgYW1sX2FwcGVuZChkc2R0LCBkZXYp OwppdCB3b3VsZCBiZSBiZXR0ZXIgdG8gcmV0dXJuIFBDSSBkZXYgYW5kIGxldCBjYWxsZXIgdG8g YWRkIGl0IHRvIGRzZHQuCgo+ICsKPiArICAgIHBjaV9zY29wZSA9IGJ1aWxkX3BjaV9ob3N0X2Jy aWRnZShkc2R0LCBwY2lfaG9zdCk7Cj4gKyAgICBhbWxfYXBwZW5kKGRzZHQsIHBjaV9zY29wZSk7 Cj4gK30KPiArCj4gIC8qIEJ1aWxkIHJzZHQgdGFibGUgKi8KPiAgdm9pZAo+ICBidWlsZF9yc2R0 KEdBcnJheSAqdGFibGVfZGF0YSwgQklPU0xpbmtlciAqbGlua2VyLCBHQXJyYXkgKnRhYmxlX29m ZnNldHMsCj4gZGlmZiAtLWdpdCBhL2h3L2kzODYvYWNwaS1idWlsZC5jIGIvaHcvaTM4Ni9hY3Bp LWJ1aWxkLmMKPiBpbmRleCBhNWY1ZjgzNTAwLi4xNGUyNjI0ZDE0IDEwMDY0NAo+IC0tLSBhL2h3 L2kzODYvYWNwaS1idWlsZC5jCj4gKysrIGIvaHcvaTM4Ni9hY3BpLWJ1aWxkLmMKPiBAQCAtMTI1 MywxNiArMTI1MywxMSBAQCBzdGF0aWMgdm9pZCBidWlsZF9waWl4NF9wY2lfaG90cGx1ZyhBbWwg KnRhYmxlKQo+ICBzdGF0aWMgdm9pZAo+ICBidWlsZF9kc2R0KEdBcnJheSAqdGFibGVfZGF0YSwg QklPU0xpbmtlciAqbGlua2VyLAo+ICAgICAgICAgICAgIEFjcGlQbUluZm8gKnBtLCBBY3BpTWlz Y0luZm8gKm1pc2MsCj4gLSAgICAgICAgICAgUmFuZ2UgKnBjaV9ob2xlLCBSYW5nZSAqcGNpX2hv bGU2NCwKPiArICAgICAgICAgICBBY3BpUGNpQnVzICpwY2lfaG9zdCwKPiAgICAgICAgICAgICBN YWNoaW5lU3RhdGUgKm1hY2hpbmUsIEFjcGlDb25maWd1cmF0aW9uICphY3BpX2NvbmYpCj4gIHsK PiAtICAgIENyc1JhbmdlRW50cnkgKmVudHJ5Owo+ICAgICAgQW1sICpkc2R0LCAqc2Jfc2NvcGUs ICpzY29wZSwgKmRldiwgKm1ldGhvZCwgKmZpZWxkLCAqcGtnLCAqY3JzOwo+IC0gICAgQ3JzUmFu Z2VTZXQgY3JzX3JhbmdlX3NldDsKPiAgICAgIHVpbnQzMl90IG5yX21lbSA9IG1hY2hpbmUtPnJh bV9zbG90czsKPiAtICAgIGludCByb290X2J1c19saW1pdCA9IDB4RkY7Cj4gLSAgICBQQ0lCdXMg KmJ1cyA9IE5VTEw7Cj4gLSAgICBpbnQgaTsKPiAgCj4gICAgICBkc2R0ID0gaW5pdF9hbWxfYWxs b2NhdG9yKCk7Cj4gIAo+IEBAIC0xMzM3LDEwNCArMTMzMiw3IEBAIGJ1aWxkX2RzZHQoR0FycmF5 ICp0YWJsZV9kYXRhLCBCSU9TTGlua2VyICpsaW5rZXIsCj4gICAgICB9Cj4gICAgICBhbWxfYXBw ZW5kKGRzZHQsIHNjb3BlKTsKPiAgCj4gLSAgICBjcnNfcmFuZ2Vfc2V0X2luaXQoJmNyc19yYW5n ZV9zZXQpOwo+IC0gICAgYnVzID0gUENfTUFDSElORShtYWNoaW5lKS0+YnVzOwo+IC0gICAgaWYg KGJ1cykgewo+IC0gICAgICAgIFFMSVNUX0ZPUkVBQ0goYnVzLCAmYnVzLT5jaGlsZCwgc2libGlu Zykgewo+IC0gICAgICAgICAgICB1aW50OF90IGJ1c19udW0gPSBwY2lfYnVzX251bShidXMpOwo+ IC0gICAgICAgICAgICB1aW50OF90IG51bWFfbm9kZSA9IHBjaV9idXNfbnVtYV9ub2RlKGJ1cyk7 Cj4gLQo+IC0gICAgICAgICAgICAvKiBsb29rIG9ubHkgZm9yIGV4cGFuZGVyIHJvb3QgYnVzZXMg Ki8KPiAtICAgICAgICAgICAgaWYgKCFwY2lfYnVzX2lzX3Jvb3QoYnVzKSkgewo+IC0gICAgICAg ICAgICAgICAgY29udGludWU7Cj4gLSAgICAgICAgICAgIH0KPiAtCj4gLSAgICAgICAgICAgIGlm IChidXNfbnVtIDwgcm9vdF9idXNfbGltaXQpIHsKPiAtICAgICAgICAgICAgICAgIHJvb3RfYnVz X2xpbWl0ID0gYnVzX251bSAtIDE7Cj4gLSAgICAgICAgICAgIH0KPiAtCj4gLSAgICAgICAgICAg IHNjb3BlID0gYW1sX3Njb3BlKCJcXF9TQiIpOwo+IC0gICAgICAgICAgICBkZXYgPSBhbWxfZGV2 aWNlKCJQQyUuMDJYIiwgYnVzX251bSk7Cj4gLSAgICAgICAgICAgIGFtbF9hcHBlbmQoZGV2LCBh bWxfbmFtZV9kZWNsKCJfVUlEIiwgYW1sX2ludChidXNfbnVtKSkpOwo+IC0gICAgICAgICAgICBh bWxfYXBwZW5kKGRldiwgYW1sX25hbWVfZGVjbCgiX0hJRCIsIGFtbF9laXNhaWQoIlBOUDBBMDMi KSkpOwo+IC0gICAgICAgICAgICBhbWxfYXBwZW5kKGRldiwgYW1sX25hbWVfZGVjbCgiX0JCTiIs IGFtbF9pbnQoYnVzX251bSkpKTsKPiAtICAgICAgICAgICAgaWYgKHBjaV9idXNfaXNfZXhwcmVz cyhidXMpKSB7Cj4gLSAgICAgICAgICAgICAgICBhbWxfYXBwZW5kKGRldiwgYnVpbGRfb3NjX21l dGhvZChBQ1BJX09TQ19DVFJMX1BDSV9BTEwpKTsKPiAtICAgICAgICAgICAgfQo+IC0KPiAtICAg ICAgICAgICAgaWYgKG51bWFfbm9kZSAhPSBOVU1BX05PREVfVU5BU1NJR05FRCkgewo+IC0gICAg ICAgICAgICAgICAgYW1sX2FwcGVuZChkZXYsIGFtbF9uYW1lX2RlY2woIl9QWE0iLCBhbWxfaW50 KG51bWFfbm9kZSkpKTsKPiAtICAgICAgICAgICAgfQo+IC0KPiAtICAgICAgICAgICAgYW1sX2Fw cGVuZChkZXYsIGJ1aWxkX3BydChmYWxzZSkpOwo+IC0gICAgICAgICAgICBjcnMgPSBidWlsZF9j cnMoUENJX0hPU1RfQlJJREdFKEJVUyhidXMpLT5wYXJlbnQpLCAmY3JzX3JhbmdlX3NldCk7Cj4g LSAgICAgICAgICAgIGFtbF9hcHBlbmQoZGV2LCBhbWxfbmFtZV9kZWNsKCJfQ1JTIiwgY3JzKSk7 Cj4gLSAgICAgICAgICAgIGFtbF9hcHBlbmQoc2NvcGUsIGRldik7Cj4gLSAgICAgICAgICAgIGFt bF9hcHBlbmQoZHNkdCwgc2NvcGUpOwo+IC0gICAgICAgIH0KPiAtICAgIH0KPiAtCj4gLSAgICBz Y29wZSA9IGFtbF9zY29wZSgiXFxfU0IuUENJMCIpOwo+IC0gICAgLyogYnVpbGQgUENJMC5fQ1JT ICovCj4gLSAgICBjcnMgPSBhbWxfcmVzb3VyY2VfdGVtcGxhdGUoKTsKPiAtICAgIGFtbF9hcHBl bmQoY3JzLAo+IC0gICAgICAgIGFtbF93b3JkX2J1c19udW1iZXIoQU1MX01JTl9GSVhFRCwgQU1M X01BWF9GSVhFRCwgQU1MX1BPU19ERUNPREUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAwMDAsIDB4MCwgcm9vdF9idXNfbGltaXQsCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMDAsIHJvb3RfYnVzX2xpbWl0ICsgMSkpOwo+IC0gICAgYW1sX2FwcGVuZChjcnMs IGFtbF9pbyhBTUxfREVDT0RFMTYsIDB4MENGOCwgMHgwQ0Y4LCAweDAxLCAweDA4KSk7Cj4gLQo+ IC0gICAgYW1sX2FwcGVuZChjcnMsCj4gLSAgICAgICAgYW1sX3dvcmRfaW8oQU1MX01JTl9GSVhF RCwgQU1MX01BWF9GSVhFRCwKPiAtICAgICAgICAgICAgICAgICAgICBBTUxfUE9TX0RFQ09ERSwg QU1MX0VOVElSRV9SQU5HRSwKPiAtICAgICAgICAgICAgICAgICAgICAweDAwMDAsIDB4MDAwMCwg MHgwQ0Y3LCAweDAwMDAsIDB4MENGOCkpOwo+IC0KPiAtICAgIGNyc19yZXBsYWNlX3dpdGhfZnJl ZV9yYW5nZXMoY3JzX3JhbmdlX3NldC5pb19yYW5nZXMsIDB4MEQwMCwgMHhGRkZGKTsKPiAtICAg IGZvciAoaSA9IDA7IGkgPCBjcnNfcmFuZ2Vfc2V0LmlvX3Jhbmdlcy0+bGVuOyBpKyspIHsKPiAt ICAgICAgICBlbnRyeSA9IGdfcHRyX2FycmF5X2luZGV4KGNyc19yYW5nZV9zZXQuaW9fcmFuZ2Vz LCBpKTsKPiAtICAgICAgICBhbWxfYXBwZW5kKGNycywKPiAtICAgICAgICAgICAgYW1sX3dvcmRf aW8oQU1MX01JTl9GSVhFRCwgQU1MX01BWF9GSVhFRCwKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgQU1MX1BPU19ERUNPREUsIEFNTF9FTlRJUkVfUkFOR0UsCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAwMCwgZW50cnktPmJhc2UsIGVudHJ5LT5saW1pdCwKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDAwLCBlbnRyeS0+bGltaXQgLSBlbnRyeS0+YmFzZSArIDEpKTsKPiAt ICAgIH0KPiAtCj4gLSAgICBhbWxfYXBwZW5kKGNycywKPiAtICAgICAgICBhbWxfZHdvcmRfbWVt b3J5KEFNTF9QT1NfREVDT0RFLCBBTUxfTUlOX0ZJWEVELCBBTUxfTUFYX0ZJWEVELAo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgQU1MX0NBQ0hFQUJMRSwgQU1MX1JFQURfV1JJVEUsCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAwLCAweDAwMEEwMDAwLCAweDAwMEJGRkZGLCAwLCAweDAw MDIwMDAwKSk7Cj4gLQo+IC0gICAgY3JzX3JlcGxhY2Vfd2l0aF9mcmVlX3JhbmdlcyhjcnNfcmFu Z2Vfc2V0Lm1lbV9yYW5nZXMsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh bmdlX2xvYihwY2lfaG9sZSksCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh bmdlX3VwYihwY2lfaG9sZSkpOwo+IC0gICAgZm9yIChpID0gMDsgaSA8IGNyc19yYW5nZV9zZXQu bWVtX3Jhbmdlcy0+bGVuOyBpKyspIHsKPiAtICAgICAgICBlbnRyeSA9IGdfcHRyX2FycmF5X2lu ZGV4KGNyc19yYW5nZV9zZXQubWVtX3JhbmdlcywgaSk7Cj4gLSAgICAgICAgYW1sX2FwcGVuZChj cnMsCj4gLSAgICAgICAgICAgIGFtbF9kd29yZF9tZW1vcnkoQU1MX1BPU19ERUNPREUsIEFNTF9N SU5fRklYRUQsIEFNTF9NQVhfRklYRUQsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QU1MX05PTl9DQUNIRUFCTEUsIEFNTF9SRUFEX1dSSVRFLAo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIGVudHJ5LT5iYXNlLCBlbnRyeS0+bGltaXQsCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwgZW50cnktPmxpbWl0IC0gZW50cnktPmJhc2UgKyAxKSk7Cj4gLSAg ICB9Cj4gLQo+IC0gICAgaWYgKCFyYW5nZV9pc19lbXB0eShwY2lfaG9sZTY0KSkgewo+IC0gICAg ICAgIGNyc19yZXBsYWNlX3dpdGhfZnJlZV9yYW5nZXMoY3JzX3JhbmdlX3NldC5tZW1fNjRiaXRf cmFuZ2VzLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VfbG9i KHBjaV9ob2xlNjQpLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFu Z2VfdXBiKHBjaV9ob2xlNjQpKTsKPiAtICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3JzX3Jhbmdl X3NldC5tZW1fNjRiaXRfcmFuZ2VzLT5sZW47IGkrKykgewo+IC0gICAgICAgICAgICBlbnRyeSA9 IGdfcHRyX2FycmF5X2luZGV4KGNyc19yYW5nZV9zZXQubWVtXzY0Yml0X3JhbmdlcywgaSk7Cj4g LSAgICAgICAgICAgIGFtbF9hcHBlbmQoY3JzLAo+IC0gICAgICAgICAgICAgICAgICAgICAgIGFt bF9xd29yZF9tZW1vcnkoQU1MX1BPU19ERUNPREUsIEFNTF9NSU5fRklYRUQsCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTUxfTUFYX0ZJWEVELAo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1MX0NBQ0hFQUJMRSwgQU1MX1JFQURf V1JJVEUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBlbnRy eS0+YmFzZSwgZW50cnktPmxpbWl0LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMCwgZW50cnktPmxpbWl0IC0gZW50cnktPmJhc2UgKyAxKSk7Cj4gLSAgICAgICAg fQo+IC0gICAgfQo+IC0KPiAtICAgIGlmIChUUE1fSVNfVElTKHRwbV9maW5kKCkpKSB7Cj4gLSAg ICAgICAgYW1sX2FwcGVuZChjcnMsIGFtbF9tZW1vcnkzMl9maXhlZChUUE1fVElTX0FERFJfQkFT RSwKPiAtICAgICAgICAgICAgICAgICAgIFRQTV9USVNfQUREUl9TSVpFLCBBTUxfUkVBRF9XUklU RSkpOwo+IC0gICAgfQo+IC0gICAgYW1sX2FwcGVuZChzY29wZSwgYW1sX25hbWVfZGVjbCgiX0NS UyIsIGNycykpOwo+ICsgICAgc2NvcGUgPSBidWlsZF9wY2lfaG9zdF9icmlkZ2UoZHNkdCwgcGNp X2hvc3QpOwo+ICAKPiAgICAgIC8qIHJlc2VydmUgR1BFMCBibG9jayByZXNvdXJjZXMgKi8KPiAg ICAgIGRldiA9IGFtbF9kZXZpY2UoIkdQRTAiKTsKPiBAQCAtMTQ1NCw4ICsxMzUyLDYgQEAgYnVp bGRfZHNkdChHQXJyYXkgKnRhYmxlX2RhdGEsIEJJT1NMaW5rZXIgKmxpbmtlciwKPiAgICAgIGFt bF9hcHBlbmQoZGV2LCBhbWxfbmFtZV9kZWNsKCJfQ1JTIiwgY3JzKSk7Cj4gICAgICBhbWxfYXBw ZW5kKHNjb3BlLCBkZXYpOwo+ICAKPiAtICAgIGNyc19yYW5nZV9zZXRfZnJlZSgmY3JzX3Jhbmdl X3NldCk7Cj4gLQo+ICAgICAgLyogcmVzZXJ2ZSBQQ0lIUCByZXNvdXJjZXMgKi8KPiAgICAgIGlm IChwbS0+cGNpaHBfaW9fbGVuKSB7Cj4gICAgICAgICAgZGV2ID0gYW1sX2RldmljZSgiUEhQUiIp Owo+IEBAIC0yMDEyLDYgKzE5MDgsMTEgQEAgdm9pZCBhY3BpX2J1aWxkKEFjcGlCdWlsZFRhYmxl cyAqdGFibGVzLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0IC8qIEVuc3VyZSBG QUNTIGlzIGFsaWduZWQgKi8sCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2Ug LyogaGlnaCBtZW1vcnkgKi8pOwo+ICAKPiArICAgIEFjcGlQY2lCdXMgcGNpX2hvc3QgPSB7Cj4g KyAgICAgICAgLnBjaV9idXMgICAgPSBQQ19NQUNISU5FKG1hY2hpbmUpLT5idXMsCj4gKyAgICAg ICAgLnBjaV9ob2xlICAgPSAmcGNpX2hvbGUsCj4gKyAgICAgICAgLnBjaV9ob2xlNjQgPSAmcGNp X2hvbGU2NCwKPiArICAgIH07Cj4gICAgICAvKgo+ICAgICAgICogRkFDUyBpcyBwb2ludGVkIHRv IGJ5IEZBRFQuCj4gICAgICAgKiBXZSBwbGFjZSBpdCBmaXJzdCBzaW5jZSBpdCdzIHRoZSBvbmx5 IHRhYmxlIHRoYXQgaGFzIGFsaWdubWVudAo+IEBAIC0yMDIzLDcgKzE5MjQsNyBAQCB2b2lkIGFj cGlfYnVpbGQoQWNwaUJ1aWxkVGFibGVzICp0YWJsZXMsCj4gICAgICAvKiBEU0RUIGlzIHBvaW50 ZWQgdG8gYnkgRkFEVCAqLwo+ICAgICAgZHNkdCA9IHRhYmxlc19ibG9iLT5sZW47Cj4gICAgICBi dWlsZF9kc2R0KHRhYmxlc19ibG9iLCB0YWJsZXMtPmxpbmtlciwgJnBtLCAmbWlzYywKPiAtICAg ICAgICAgICAgICAgJnBjaV9ob2xlLCAmcGNpX2hvbGU2NCwgbWFjaGluZSwgYWNwaV9jb25mKTsK PiArICAgICAgICAgICAgICAgJnBjaV9ob3N0LCBtYWNoaW5lLCBhY3BpX2NvbmYpOwo+ICAKPiAg ICAgIC8qIENvdW50IHRoZSBzaXplIG9mIHRoZSBEU0RUIGFuZCBTU0RULCB3ZSB3aWxsIG5lZWQg aXQgZm9yIGxlZ2FjeQo+ICAgICAgICogc2l6aW5nIG9mIEFDUEkgdGFibGVzLgoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=