From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Airlie Subject: Re: [PATCH libdrm] libdrm_amdgpu: add kernel semaphore support Date: Fri, 7 Jul 2017 08:19:21 +1000 Message-ID: References: <20170706011749.4217-1-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170706011749.4217-1-airlied@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel , amd-gfx mailing list , =?UTF-8?Q?Christian_K=C3=B6nig?= List-Id: dri-devel@lists.freedesktop.org Q2hyc3RpYW4sCgp5b3UgYXJlIHByb2JhYmx5IHRoZSBiZXN0IHBlcnNvbiB0byBhY2sgdGhpcywg SSdkIGxpa2UgdG8gZ2V0IHRoZSByYWR2CmNvZGUgbGFuZGVkCmFuZCBhbGxvdyB0aGUgR0wgY29k ZSB0byBnZXQgZ29pbmcuCgpEYXZlLgoKPiBUaGlzIGFkZHMga2VybmVsIHNlbWFwaG9yZSBzdXBw b3J0IHRvIHRoZSBjb21tYW5kIHN1Ym1pc3Npb24KPiBpbnRlcmZhY2UgaW4gd2hhdCBzaG91bGQg YmUgYSBiYWNrd2FyZHMgY29tcGF0aWJsZSBtYW5uZXIsCj4gaXQgYWRkcyBhIG5ldyBjb21tYW5k IHN1Ym1pc3Npb24gQVBJLgo+Cj4gU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRA cmVkaGF0LmNvbT4KPiAtLS0KPiAgYW1kZ3B1L2FtZGdwdS5oICAgIHwgIDI5ICsrKysrKysrKysr Ky0KPiAgYW1kZ3B1L2FtZGdwdV9jcy5jIHwgMTE4ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tCj4gIDIgZmlsZXMgY2hhbmdlZCwgMTM4IGluc2Vy dGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvYW1kZ3B1L2FtZGdwdS5o IGIvYW1kZ3B1L2FtZGdwdS5oCj4gaW5kZXggMTkwMWZhOC4uNjQ5YjY2ZSAxMDA2NDQKPiAtLS0g YS9hbWRncHUvYW1kZ3B1LmgKPiArKysgYi9hbWRncHUvYW1kZ3B1LmgKPiBAQCAtMzY5LDYgKzM2 OSwxNiBAQCBzdHJ1Y3QgYW1kZ3B1X2NzX3JlcXVlc3Qgewo+ICAgICAgICAgc3RydWN0IGFtZGdw dV9jc19mZW5jZV9pbmZvIGZlbmNlX2luZm87Cj4gIH07Cj4KPiArc3RydWN0IGFtZGdwdV9jc19y ZXF1ZXN0X3N5bmNvYmogewo+ICsgICAgICAgLyoKPiArICAgICAgICAqCj4gKyAgICAgICAgKi8K PiArICAgICAgIHVpbnQzMl90IG51bWJlcl9pbl9zeW5jb2JqOwo+ICsgICAgICAgdWludDMyX3Qg bnVtYmVyX291dF9zeW5jb2JqOwo+ICsgICAgICAgdWludDMyX3QgKmluX3N5bmNvYmo7Cj4gKyAg ICAgICB1aW50MzJfdCAqb3V0X3N5bmNvYmo7Cj4gK307Cj4gKwo+ICAvKioKPiAgICogU3RydWN0 dXJlIHdoaWNoIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgR1BVIFZNIE1DIEFkZHJlc3Mgc3Bh Y2UKPiAgICogYWxpZ25tZW50cyByZXF1aXJlbWVudHMKPiBAQCAtODg2LDYgKzg5NiwxMiBAQCBp bnQgYW1kZ3B1X2NzX3N1Ym1pdChhbWRncHVfY29udGV4dF9oYW5kbGUgY29udGV4dCwKPiAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgYW1kZ3B1X2NzX3JlcXVlc3QgKmlic19yZXF1ZXN0LAo+ ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bWJlcl9vZl9yZXF1ZXN0cyk7Cj4KPiAr aW50IGFtZGdwdV9jc19zdWJtaXRfc3luY29iaihhbWRncHVfY29udGV4dF9oYW5kbGUgY29udGV4 dCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZsYWdzLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFtZGdwdV9jc19yZXF1ZXN0ICppYnNfcmVx dWVzdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhbWRncHVfY3NfcmVx dWVzdF9zeW5jb2JqICppYnNfc3luY29iaiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IG51bWJlcl9vZl9yZXF1ZXN0cyk7Cj4gKwo+ICAvKioKPiAgICogIFF1ZXJ5IHN0 YXR1cyBvZiBDb21tYW5kIEJ1ZmZlciBTdWJtaXNzaW9uCj4gICAqCj4gQEAgLTEzMjgsOCArMTM0 NCwxOSBAQCBpbnQgYW1kZ3B1X2NzX2Rlc3Ryb3lfc2VtYXBob3JlKGFtZGdwdV9zZW1hcGhvcmVf aGFuZGxlIHNlbSk7Cj4gICovCj4gIGNvbnN0IGNoYXIgKmFtZGdwdV9nZXRfbWFya2V0aW5nX25h bWUoYW1kZ3B1X2RldmljZV9oYW5kbGUgZGV2KTsKPgo+ICsKPiAraW50IGFtZGdwdV9jc19jcmVh dGVfc3luY29iaihhbWRncHVfZGV2aWNlX2hhbmRsZSBkZXYsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCAqc3luY29iaik7Cj4gK2ludCBhbWRncHVfY3NfZXhwb3J0X3N5 bmNvYmooYW1kZ3B1X2RldmljZV9oYW5kbGUgZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3Qgc3luY29iaiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqc2hhcmVkX2ZkKTsKPiAraW50IGFtZGdwdV9jc19pbXBvcnRfc3luY29iaihhbWRncHVfZGV2 aWNlX2hhbmRsZSBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2hhcmVk X2ZkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnN5bmNvYmopOwo+ ICtpbnQgYW1kZ3B1X2NzX2Rlc3Ryb3lfc3luY29iaihhbWRncHVfZGV2aWNlX2hhbmRsZSBkZXYs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3luY29iaik7Cj4gKwo+ ICAjaWZkZWYgX19jcGx1c3BsdXMKPiAgfQo+ICAjZW5kaWYKPiAtCj4gICNlbmRpZiAvKiAjaWZk ZWYgX0FNREdQVV9IXyAqLwo+IGRpZmYgLS1naXQgYS9hbWRncHUvYW1kZ3B1X2NzLmMgYi9hbWRn cHUvYW1kZ3B1X2NzLmMKPiBpbmRleCA4NjhlYjdiLi4zMzljNWY5IDEwMDY0NAo+IC0tLSBhL2Ft ZGdwdS9hbWRncHVfY3MuYwo+ICsrKyBiL2FtZGdwdS9hbWRncHVfY3MuYwo+IEBAIC0xNjgsNyAr MTY4LDggQEAgaW50IGFtZGdwdV9jc19xdWVyeV9yZXNldF9zdGF0ZShhbWRncHVfY29udGV4dF9o YW5kbGUgY29udGV4dCwKPiAgICogXHNhIGFtZGdwdV9jc19zdWJtaXQoKQo+ICAqLwo+ICBzdGF0 aWMgaW50IGFtZGdwdV9jc19zdWJtaXRfb25lKGFtZGdwdV9jb250ZXh0X2hhbmRsZSBjb250ZXh0 LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFtZGdwdV9jc19yZXF1 ZXN0ICppYnNfcmVxdWVzdCkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBhbWRncHVfY3NfcmVxdWVzdCAqaWJzX3JlcXVlc3QsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgYW1kZ3B1X2NzX3JlcXVlc3Rfc3luY29iaiAqc3luY29ial9yZXF1 ZXN0KQo+ICB7Cj4gICAgICAgICB1bmlvbiBkcm1fYW1kZ3B1X2NzIGNzOwo+ICAgICAgICAgdWlu dDY0X3QgKmNodW5rX2FycmF5Owo+IEBAIC0xNzYsMTAgKzE3NywxMyBAQCBzdGF0aWMgaW50IGFt ZGdwdV9jc19zdWJtaXRfb25lKGFtZGdwdV9jb250ZXh0X2hhbmRsZSBjb250ZXh0LAo+ICAgICAg ICAgc3RydWN0IGRybV9hbWRncHVfY3NfY2h1bmtfZGF0YSAqY2h1bmtfZGF0YTsKPiAgICAgICAg IHN0cnVjdCBkcm1fYW1kZ3B1X2NzX2NodW5rX2RlcCAqZGVwZW5kZW5jaWVzID0gTlVMTDsKPiAg ICAgICAgIHN0cnVjdCBkcm1fYW1kZ3B1X2NzX2NodW5rX2RlcCAqc2VtX2RlcGVuZGVuY2llcyA9 IE5VTEw7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2FtZGdwdV9jc19jaHVua19zZW0gKmluX3N5bmNv YmpfZGVwZW5kZW5jaWVzID0gTlVMTDsKPiArICAgICAgIHN0cnVjdCBkcm1fYW1kZ3B1X2NzX2No dW5rX3NlbSAqb3V0X3N5bmNvYmpfZGVwZW5kZW5jaWVzID0gTlVMTDsKPiAgICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgKnNlbV9saXN0Owo+ICAgICAgICAgYW1kZ3B1X3NlbWFwaG9yZV9oYW5kbGUg c2VtLCB0bXA7Cj4gLSAgICAgICB1aW50MzJfdCBpLCBzaXplLCBzZW1fY291bnQgPSAwOwo+ICsg ICAgICAgdWludDMyX3QgaSwgaiwgc2l6ZSwgc2VtX2NvdW50ID0gMDsKPiAgICAgICAgIGJvb2wg dXNlcl9mZW5jZTsKPiArICAgICAgIHVpbnQzMl90IHNlbV9zaXplID0gMDsKPiAgICAgICAgIGlu dCByID0gMDsKPgo+ICAgICAgICAgaWYgKGlic19yZXF1ZXN0LT5pcF90eXBlID49IEFNREdQVV9I V19JUF9OVU0pCj4gQEAgLTE5NCw3ICsxOTgsMTEgQEAgc3RhdGljIGludCBhbWRncHVfY3Nfc3Vi bWl0X29uZShhbWRncHVfY29udGV4dF9oYW5kbGUgY29udGV4dCwKPiAgICAgICAgIH0KPiAgICAg ICAgIHVzZXJfZmVuY2UgPSAoaWJzX3JlcXVlc3QtPmZlbmNlX2luZm8uaGFuZGxlICE9IE5VTEwp Owo+Cj4gLSAgICAgICBzaXplID0gaWJzX3JlcXVlc3QtPm51bWJlcl9vZl9pYnMgKyAodXNlcl9m ZW5jZSA/IDIgOiAxKSArIDE7Cj4gKyAgICAgICBpZiAoc3luY29ial9yZXF1ZXN0KSB7Cj4gKyAg ICAgICAgICAgICAgIHNlbV9zaXplICs9IHN5bmNvYmpfcmVxdWVzdC0+bnVtYmVyX2luX3N5bmNv YmogPyAxIDogMDsKPiArICAgICAgICAgICAgICAgc2VtX3NpemUgKz0gc3luY29ial9yZXF1ZXN0 LT5udW1iZXJfb3V0X3N5bmNvYmogPyAxIDogMDsKPiArICAgICAgIH0KPiArICAgICAgIHNpemUg PSBpYnNfcmVxdWVzdC0+bnVtYmVyX29mX2licyArICh1c2VyX2ZlbmNlID8gMiA6IDEpICsgMSAr IHNlbV9zaXplOwo+Cj4gICAgICAgICBjaHVua19hcnJheSA9IGFsbG9jYShzaXplb2YodWludDY0 X3QpICogc2l6ZSk7Cj4gICAgICAgICBjaHVua3MgPSBhbGxvY2Eoc2l6ZW9mKHN0cnVjdCBkcm1f YW1kZ3B1X2NzX2NodW5rKSAqIHNpemUpOwo+IEBAIC0zMDYsNiArMzE0LDQ1IEBAIHN0YXRpYyBp bnQgYW1kZ3B1X2NzX3N1Ym1pdF9vbmUoYW1kZ3B1X2NvbnRleHRfaGFuZGxlIGNvbnRleHQsCj4g ICAgICAgICAgICAgICAgIGNodW5rc1tpXS5jaHVua19kYXRhID0gKHVpbnQ2NF90KSh1aW50cHRy X3Qpc2VtX2RlcGVuZGVuY2llczsKPiAgICAgICAgIH0KPgo+ICsgICAgICAgaWYgKHN5bmNvYmpf cmVxdWVzdCkgewo+ICsgICAgICAgICAgICAgICBpZiAoc3luY29ial9yZXF1ZXN0LT5udW1iZXJf aW5fc3luY29iaikgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIGluX3N5bmNvYmpfZGVwZW5k ZW5jaWVzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2FtZGdwdV9jc19jaHVua19zZW0pICog c3luY29ial9yZXF1ZXN0LT5udW1iZXJfaW5fc3luY29iaik7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFpbl9zeW5jb2JqX2RlcGVuZGVuY2llcykgewo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgciA9IC1FTk9NRU07Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGVycm9yX3VubG9jazsKPiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHN5bmNvYmpfcmVxdWVzdC0+bnVt YmVyX2luX3N5bmNvYmo7IGorKykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRybV9hbWRncHVfY3NfY2h1bmtfc2VtICpkZXAgPSAmaW5fc3luY29ial9kZXBlbmRl bmNpZXNbal07Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXAtPmhhbmRsZSA9 IHN5bmNvYmpfcmVxdWVzdC0+aW5fc3luY29ialtqXTsKPiArICAgICAgICAgICAgICAgICAgICAg ICB9Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaSA9IGNzLmluLm51bV9jaHVua3MrKzsKPiAr Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgLyogZGVwZW5kZW5jaWVzIGNodW5rICovCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgY2h1bmtfYXJyYXlbaV0gPSAodWludDY0X3QpKHVpbnRwdHJf dCkmY2h1bmtzW2ldOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNodW5rc1tpXS5jaHVua19p ZCA9IEFNREdQVV9DSFVOS19JRF9TWU5DT0JKX0lOOwo+ICsgICAgICAgICAgICAgICAgICAgICAg IGNodW5rc1tpXS5sZW5ndGhfZHcgPSBzaXplb2Yoc3RydWN0IGRybV9hbWRncHVfY3NfY2h1bmtf c2VtKSAvIDQgKiBzeW5jb2JqX3JlcXVlc3QtPm51bWJlcl9pbl9zeW5jb2JqOwo+ICsgICAgICAg ICAgICAgICAgICAgICAgIGNodW5rc1tpXS5jaHVua19kYXRhID0gKHVpbnQ2NF90KSh1aW50cHRy X3QpaW5fc3luY29ial9kZXBlbmRlbmNpZXM7Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgICAgaWYgKHN5bmNvYmpfcmVxdWVzdC0+bnVtYmVyX291dF9zeW5jb2JqKSB7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgb3V0X3N5bmNvYmpfZGVwZW5kZW5jaWVzID0gbWFsbG9jKHNp emVvZihzdHJ1Y3QgZHJtX2FtZGdwdV9jc19jaHVua19zZW0pICogc3luY29ial9yZXF1ZXN0LT5u dW1iZXJfb3V0X3N5bmNvYmopOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3V0X3N5 bmNvYmpfZGVwZW5kZW5jaWVzKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ID0gLUVOT01FTTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3Jf dW5sb2NrOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgICAg ICAgICBmb3IgKGogPSAwOyBqIDwgc3luY29ial9yZXF1ZXN0LT5udW1iZXJfb3V0X3N5bmNvYmo7 IGorKykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9hbWRn cHVfY3NfY2h1bmtfc2VtICpkZXAgPSAmb3V0X3N5bmNvYmpfZGVwZW5kZW5jaWVzW2pdOwo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwLT5oYW5kbGUgPSBzeW5jb2JqX3JlcXVl c3QtPm91dF9zeW5jb2JqW2pdOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgICAgICAgICAgICBpID0gY3MuaW4ubnVtX2NodW5rcysrOwo+ICsKPiArICAgICAgICAg ICAgICAgICAgICAgICAvKiBkZXBlbmRlbmNpZXMgY2h1bmsgKi8KPiArICAgICAgICAgICAgICAg ICAgICAgICBjaHVua19hcnJheVtpXSA9ICh1aW50NjRfdCkodWludHB0cl90KSZjaHVua3NbaV07 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzW2ldLmNodW5rX2lkID0gQU1ER1BVX0NI VU5LX0lEX1NZTkNPQkpfT1VUOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNodW5rc1tpXS5s ZW5ndGhfZHcgPSBzaXplb2Yoc3RydWN0IGRybV9hbWRncHVfY3NfY2h1bmtfc2VtKSAvIDQgKiBz eW5jb2JqX3JlcXVlc3QtPm51bWJlcl9vdXRfc3luY29iajsKPiArICAgICAgICAgICAgICAgICAg ICAgICBjaHVua3NbaV0uY2h1bmtfZGF0YSA9ICh1aW50NjRfdCkodWludHB0cl90KW91dF9zeW5j b2JqX2RlcGVuZGVuY2llczsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgfQo+ICsKPiAg ICAgICAgIHIgPSBkcm1Db21tYW5kV3JpdGVSZWFkKGNvbnRleHQtPmRldi0+ZmQsIERSTV9BTURH UFVfQ1MsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3MsIHNpemVvZihjcykp Owo+ICAgICAgICAgaWYgKHIpCj4gQEAgLTMxNywzMSArMzY0LDQ4IEBAIGVycm9yX3VubG9jazoK PiAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5zZXF1ZW5jZV9tdXRleCk7 Cj4gICAgICAgICBmcmVlKGRlcGVuZGVuY2llcyk7Cj4gICAgICAgICBmcmVlKHNlbV9kZXBlbmRl bmNpZXMpOwo+ICsgICAgICAgZnJlZShpbl9zeW5jb2JqX2RlcGVuZGVuY2llcyk7Cj4gKyAgICAg ICBmcmVlKG91dF9zeW5jb2JqX2RlcGVuZGVuY2llcyk7Cj4gICAgICAgICByZXR1cm4gcjsKPiAg fQo+Cj4gLWludCBhbWRncHVfY3Nfc3VibWl0KGFtZGdwdV9jb250ZXh0X2hhbmRsZSBjb250ZXh0 LAo+IC0gICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZsYWdzLAo+IC0gICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBhbWRncHVfY3NfcmVxdWVzdCAqaWJzX3JlcXVlc3QsCj4gLSAgICAgICAg ICAgICAgICAgICAgdWludDMyX3QgbnVtYmVyX29mX3JlcXVlc3RzKQo+ICtpbnQgYW1kZ3B1X2Nz X3N1Ym1pdF9zeW5jb2JqKGFtZGdwdV9jb250ZXh0X2hhbmRsZSBjb250ZXh0LAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZmxhZ3MsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgYW1kZ3B1X2NzX3JlcXVlc3QgKmlic19yZXF1ZXN0LAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFtZGdwdV9jc19yZXF1ZXN0X3N5bmNvYmog Kmlic19zeW5jb2JqLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVt YmVyX29mX3JlcXVlc3RzKQo+ICB7Cj4gICAgICAgICB1aW50MzJfdCBpOwo+ICAgICAgICAgaW50 IHI7Cj4gKyAgICAgICBib29sIGhhc19zeW5jb2JqID0gaWJzX3N5bmNvYmogPyB0cnVlIDogZmFs c2U7Cj4KPiAgICAgICAgIGlmICghY29udGV4dCB8fCAhaWJzX3JlcXVlc3QpCj4gICAgICAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+Cj4gICAgICAgICByID0gMDsKPiAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBudW1iZXJfb2ZfcmVxdWVzdHM7IGkrKykgewo+IC0gICAgICAgICAgICAgICBy ID0gYW1kZ3B1X2NzX3N1Ym1pdF9vbmUoY29udGV4dCwgaWJzX3JlcXVlc3QpOwo+ICsgICAgICAg ICAgICAgICByID0gYW1kZ3B1X2NzX3N1Ym1pdF9vbmUoY29udGV4dCwgaWJzX3JlcXVlc3QsIGhh c19zeW5jb2JqID8gaWJzX3N5bmNvYmogOiBOVUxMKTsKPiAgICAgICAgICAgICAgICAgaWYgKHIp Cj4gICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gICAgICAgICAgICAgICAgIGlic19y ZXF1ZXN0Kys7Cj4gKyAgICAgICAgICAgICAgIGlmIChoYXNfc3luY29iaikKPiArICAgICAgICAg ICAgICAgICAgICAgICBpYnNfc3luY29iaisrOwo+ICAgICAgICAgfQo+Cj4gICAgICAgICByZXR1 cm4gcjsKPiAgfQo+Cj4gK2ludCBhbWRncHVfY3Nfc3VibWl0KGFtZGdwdV9jb250ZXh0X2hhbmRs ZSBjb250ZXh0LAo+ICsgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZsYWdzLAo+ICsgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBhbWRncHVfY3NfcmVxdWVzdCAqaWJzX3JlcXVlc3QsCj4g KyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtYmVyX29mX3JlcXVlc3RzKQo+ICt7Cj4g KyAgICAgICByZXR1cm4gYW1kZ3B1X2NzX3N1Ym1pdF9zeW5jb2JqKGNvbnRleHQsIGZsYWdzLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYnNfcmVxdWVzdCwgTlVM TCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX3Jl cXVlc3RzKTsKPiArfQo+ICsKPiArCj4gIC8qKgo+ICAgKiBDYWxjdWxhdGUgYWJzb2x1dGUgdGlt ZW91dC4KPiAgICoKPiBAQCAtNTk2LDMgKzY2MCw0MSBAQCBpbnQgYW1kZ3B1X2NzX2Rlc3Ryb3lf c2VtYXBob3JlKGFtZGdwdV9zZW1hcGhvcmVfaGFuZGxlIHNlbSkKPiAgewo+ICAgICAgICAgcmV0 dXJuIGFtZGdwdV9jc191bnJlZmVyZW5jZV9zZW0oc2VtKTsKPiAgfQo+ICsKPiAraW50IGFtZGdw dV9jc19jcmVhdGVfc3luY29iaihhbWRncHVfZGV2aWNlX2hhbmRsZSBkZXYsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqaGFuZGxlKQo+ICt7Cj4gKyAgICAgICBpZiAo TlVMTCA9PSBkZXYpCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArICAg ICAgIHJldHVybiBkcm1TeW5jb2JqQ3JlYXRlKGRldi0+ZmQsIDAsIGhhbmRsZSk7Cj4gK30KPiAr Cj4gK2ludCBhbWRncHVfY3NfZGVzdHJveV9zeW5jb2JqKGFtZGdwdV9kZXZpY2VfaGFuZGxlIGRl diwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoYW5kbGUpCj4gK3sK PiArICAgICAgIGlmIChOVUxMID09IGRldikKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsgICAgICAgcmV0dXJuIGRybVN5bmNvYmpEZXN0cm95KGRldi0+ZmQsIGhhbmRs ZSk7Cj4gK30KPiArCj4gK2ludCBhbWRncHVfY3NfZXhwb3J0X3N5bmNvYmooYW1kZ3B1X2Rldmlj ZV9oYW5kbGUgZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaGFu ZGxlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzaGFyZWRfZmQpCj4gK3sK PiArICAgICAgIGlmIChOVUxMID09IGRldikKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsgICAgICAgcmV0dXJuIGRybVN5bmNvYmpIYW5kbGVUb0ZEKGRldi0+ZmQsIGhh bmRsZSwgc2hhcmVkX2ZkKTsKPiArfQo+ICsKPiAraW50IGFtZGdwdV9jc19pbXBvcnRfc3luY29i aihhbWRncHVfZGV2aWNlX2hhbmRsZSBkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgc2hhcmVkX2ZkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg KmhhbmRsZSkKPiArewo+ICsgICAgICAgaWYgKE5VTEwgPT0gZGV2KQo+ICsgICAgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAgICAgICByZXR1cm4gZHJtU3luY29iakZEVG9IYW5k bGUoZGV2LT5mZCwgc2hhcmVkX2ZkLCBoYW5kbGUpOwo+ICt9Cj4gLS0KPiAyLjkuNAo+Cj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBhbWQtZ2Z4IG1h aWxpbmcgbGlzdAo+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=