From mboxrd@z Thu Jan 1 00:00:00 1970 From: Samuel Pitoiset Subject: Re: [RFC PATCH 6/8] nv50: add support for compute/graphics global performance counters Date: Sun, 28 Jun 2015 09:54:09 +0200 Message-ID: <558FA821.2020203@gmail.com> References: <1435006399-2088-1-git-send-email-samuel.pitoiset@gmail.com> <1435006399-2088-7-git-send-email-samuel.pitoiset@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Ilia Mirkin Cc: "nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "mesa-dev-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" List-Id: nouveau.vger.kernel.org CgpPbiAwNi8yNi8yMDE1IDAxOjA5IEFNLCBJbGlhIE1pcmtpbiB3cm90ZToKPiBXaGF0J3Mgd2l0 aCB0aGUgXCUncyBldmVyeXdoZXJlPwoKTWF5YmUgInBlcmNlbnQiIHdpbGwgYmUgYmV0dGVyID8K Cj4KPiBPbiBNb24sIEp1biAyMiwgMjAxNSBhdCA0OjUzIFBNLCBTYW11ZWwgUGl0b2lzZXQKPiA8 c2FtdWVsLnBpdG9pc2V0QGdtYWlsLmNvbT4gd3JvdGU6Cj4+IFRoaXMgY29tbWl0IGFkZHMgc3Vw cG9ydCBmb3IgYm90aCBjb21wdXRlIGFuZCBncmFwaGljcyBnbG9iYWwKPj4gcGVyZm9ybWFuY2Ug Y291bnRlcnMgd2hpY2ggaGF2ZSBiZWVuIHJldmVyc2UgZW5naW5lZXJlZCB3aXRoCj4+IENVUFRJ IChMaW51eCkgYW5kIFBlcmZLaXQgKFdpbmRvd3MpLgo+Pgo+PiBDdXJyZW50bHksIG9ubHkgb25l IHF1ZXJ5IHR5cGUgY2FuIGJlIG1vbml0b3JlZCBhdCB0aGUgc2FtZSB0aW1lIGJlY2F1c2UKPj4g dGhlIEdhbGxpdW0ncyBIVUQgZG9lc24ndCBmaXQgcHJldHR5IHdlbGwuIFRoaXMgd2lsbCBiZSBp bXByb3ZlZCBsYXRlci4KPj4KPj4gU2lnbmVkLW9mZi1ieTogU2FtdWVsIFBpdG9pc2V0IDxzYW11 ZWwucGl0b2lzZXRAZ21haWwuY29tPgo+PiAtLS0KPj4gICBzcmMvZ2FsbGl1bS9kcml2ZXJzL25v dXZlYXUvbnY1MC9udjUwX3F1ZXJ5LmMgIHwgMTA1NyArKysrKysrKysrKysrKysrKysrKysrKy0K Pj4gICBzcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvbnY1MC9udjUwX3NjcmVlbi5oIHwgICAz NSArCj4+ICAgMiBmaWxlcyBjaGFuZ2VkLCAxMDg3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25z KC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvbnY1MC9u djUwX3F1ZXJ5LmMgYi9zcmMvZ2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvbnY1MC9udjUwX3F1ZXJ5 LmMKPj4gaW5kZXggMTE2MjExMC4uYjlkMjkxNCAxMDA2NDQKPj4gLS0tIGEvc3JjL2dhbGxpdW0v ZHJpdmVycy9ub3V2ZWF1L252NTAvbnY1MF9xdWVyeS5jCj4+ICsrKyBiL3NyYy9nYWxsaXVtL2Ry aXZlcnMvbm91dmVhdS9udjUwL252NTBfcXVlcnkuYwo+PiBAQCAtMjcsNiArMjcsOCBAQAo+PiAg ICNpbmNsdWRlICJudjUwL252NTBfY29udGV4dC5oIgo+PiAgICNpbmNsdWRlICJudl9vYmplY3Qu eG1sLmgiCj4+Cj4+ICsjaW5jbHVkZSAibm91dmVhdV9wZXJmbW9uLmgiCj4+ICsKPj4gICAjZGVm aW5lIE5WNTBfUVVFUllfU1RBVEVfUkVBRFkgICAwCj4+ICAgI2RlZmluZSBOVjUwX1FVRVJZX1NU QVRFX0FDVElWRSAgMQo+PiAgICNkZWZpbmUgTlY1MF9RVUVSWV9TVEFURV9FTkRFRCAgIDIKPj4g QEAgLTUxLDEwICs1MywyNSBAQCBzdHJ1Y3QgbnY1MF9xdWVyeSB7Cj4+ICAgICAgYm9vbGVhbiBp czY0Yml0Owo+PiAgICAgIHN0cnVjdCBub3V2ZWF1X21tX2FsbG9jYXRpb24gKm1tOwo+PiAgICAg IHN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZTsKPj4gKyAgIHN0cnVjdCBub3V2ZWF1X29iamVj dCAqcGVyZmRvbTsKPj4gICB9Owo+Pgo+PiAgICNkZWZpbmUgTlY1MF9RVUVSWV9BTExPQ19TUEFD RSAyNTYKPj4KPj4gKyNpZmRlZiBERUJVRwo+PiArc3RhdGljIHZvaWQgbnY1MF9od19wbV9kdW1w X3BlcmZkb20oc3RydWN0IG52aWZfcGVyZmRvbV92MCAqYXJncyk7Cj4+ICsjZW5kaWYKPj4gKwo+ PiArc3RhdGljIGJvb2xlYW4KPj4gK252NTBfaHdfcG1fcXVlcnlfY3JlYXRlKHN0cnVjdCBudjUw X2NvbnRleHQgKiwgc3RydWN0IG52NTBfcXVlcnkgKik7Cj4+ICtzdGF0aWMgdm9pZAo+PiArbnY1 MF9od19wbV9xdWVyeV9kZXN0cm95KHN0cnVjdCBudjUwX2NvbnRleHQgKiwgc3RydWN0IG52NTBf cXVlcnkgKik7Cj4+ICtzdGF0aWMgYm9vbGVhbgo+PiArbnY1MF9od19wbV9xdWVyeV9iZWdpbihz dHJ1Y3QgbnY1MF9jb250ZXh0ICosIHN0cnVjdCBudjUwX3F1ZXJ5ICopOwo+PiArc3RhdGljIHZv aWQgbnY1MF9od19wbV9xdWVyeV9lbmQoc3RydWN0IG52NTBfY29udGV4dCAqLCBzdHJ1Y3QgbnY1 MF9xdWVyeSAqKTsKPj4gK3N0YXRpYyBib29sZWFuIG52NTBfaHdfcG1fcXVlcnlfcmVzdWx0KHN0 cnVjdCBudjUwX2NvbnRleHQgKiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBudjUwX3F1ZXJ5ICosIGJvb2xlYW4sIHZvaWQgKik7Cj4+ICsKPj4gICBzdGF0 aWMgSU5MSU5FIHN0cnVjdCBudjUwX3F1ZXJ5ICoKPj4gICBudjUwX3F1ZXJ5KHN0cnVjdCBwaXBl X3F1ZXJ5ICpwaXBlKQo+PiAgIHsKPj4gQEAgLTk2LDEyICsxMTMsMTggQEAgbnY1MF9xdWVyeV9h bGxvY2F0ZShzdHJ1Y3QgbnY1MF9jb250ZXh0ICpudjUwLCBzdHJ1Y3QgbnY1MF9xdWVyeSAqcSwg aW50IHNpemUpCj4+ICAgc3RhdGljIHZvaWQKPj4gICBudjUwX3F1ZXJ5X2Rlc3Ryb3koc3RydWN0 IHBpcGVfY29udGV4dCAqcGlwZSwgc3RydWN0IHBpcGVfcXVlcnkgKnBxKQo+PiAgIHsKPj4gKyAg IHN0cnVjdCBudjUwX2NvbnRleHQgKm52NTAgPSBudjUwX2NvbnRleHQocGlwZSk7Cj4+ICsgICBz dHJ1Y3QgbnY1MF9xdWVyeSAqcSA9IG52NTBfcXVlcnkocHEpOwo+PiArCj4+ICAgICAgaWYgKCFw cSkKPj4gICAgICAgICByZXR1cm47Cj4+Cj4+IC0gICBudjUwX3F1ZXJ5X2FsbG9jYXRlKG52NTBf Y29udGV4dChwaXBlKSwgbnY1MF9xdWVyeShwcSksIDApOwo+PiAtICAgbm91dmVhdV9mZW5jZV9y ZWYoTlVMTCwgJm52NTBfcXVlcnkocHEpLT5mZW5jZSk7Cj4+IC0gICBGUkVFKG52NTBfcXVlcnko cHEpKTsKPj4gKyAgIGlmICgocS0+dHlwZSA+PSBOVjUwX0hXX1BNX1FVRVJZKDApICYmIHEtPnR5 cGUgPD0gTlY1MF9IV19QTV9RVUVSWV9MQVNUKSkKPj4gKyAgICAgIG52NTBfaHdfcG1fcXVlcnlf ZGVzdHJveShudjUwLCBxKTsKPj4gKwo+PiArICAgbnY1MF9xdWVyeV9hbGxvY2F0ZShudjUwLCBx LCAwKTsKPj4gKyAgIG5vdXZlYXVfZmVuY2VfcmVmKE5VTEwsICZxLT5mZW5jZSk7Cj4+ICsgICBG UkVFKHEpOwo+PiAgIH0KPj4KPj4gICBzdGF0aWMgc3RydWN0IHBpcGVfcXVlcnkgKgo+PiBAQCAt MTMwLDYgKzE1MywxMSBAQCBudjUwX3F1ZXJ5X2NyZWF0ZShzdHJ1Y3QgcGlwZV9jb250ZXh0ICpw aXBlLCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBpbmRleCkKPj4gICAgICAgICBxLT5kYXRhIC09 IDMyIC8gc2l6ZW9mKCpxLT5kYXRhKTsgLyogd2UgYWR2YW5jZSBiZWZvcmUgcXVlcnlfYmVnaW4g ISAqLwo+PiAgICAgIH0KPj4KPj4gKyAgIGlmICgocS0+dHlwZSA+PSBOVjUwX0hXX1BNX1FVRVJZ KDApICYmIHEtPnR5cGUgPD0gTlY1MF9IV19QTV9RVUVSWV9MQVNUKSkgewo+PiArICAgICAgaWYg KCFudjUwX2h3X3BtX3F1ZXJ5X2NyZWF0ZShudjUwLCBxKSkKPj4gKyAgICAgICAgIHJldHVybiBO VUxMOwo+PiArICAgfQo+PiArCj4+ICAgICAgcmV0dXJuIChzdHJ1Y3QgcGlwZV9xdWVyeSAqKXE7 Cj4+ICAgfQo+Pgo+PiBAQCAtMTU0LDYgKzE4Miw3IEBAIG52NTBfcXVlcnlfYmVnaW4oc3RydWN0 IHBpcGVfY29udGV4dCAqcGlwZSwgc3RydWN0IHBpcGVfcXVlcnkgKnBxKQo+PiAgICAgIHN0cnVj dCBudjUwX2NvbnRleHQgKm52NTAgPSBudjUwX2NvbnRleHQocGlwZSk7Cj4+ICAgICAgc3RydWN0 IG5vdXZlYXVfcHVzaGJ1ZiAqcHVzaCA9IG52NTAtPmJhc2UucHVzaGJ1ZjsKPj4gICAgICBzdHJ1 Y3QgbnY1MF9xdWVyeSAqcSA9IG52NTBfcXVlcnkocHEpOwo+PiArICAgYm9vbGVhbiByZXQgPSBU UlVFOwo+Pgo+PiAgICAgIGlmICghcHEpCj4+ICAgICAgICAgcmV0dXJuIEZBTFNFOwo+PiBAQCAt MjExLDEwICsyNDAsMTMgQEAgbnY1MF9xdWVyeV9iZWdpbihzdHJ1Y3QgcGlwZV9jb250ZXh0ICpw aXBlLCBzdHJ1Y3QgcGlwZV9xdWVyeSAqcHEpCj4+ICAgICAgICAgbnY1MF9xdWVyeV9nZXQocHVz aCwgcSwgMHgxMCwgMHgwMDAwNTAwMik7Cj4+ICAgICAgICAgYnJlYWs7Cj4+ICAgICAgZGVmYXVs dDoKPj4gKyAgICAgIGlmICgocS0+dHlwZSA+PSBOVjUwX0hXX1BNX1FVRVJZKDApICYmIHEtPnR5 cGUgPD0gTlY1MF9IV19QTV9RVUVSWV9MQVNUKSkgewo+PiArICAgICAgICAgcmV0ID0gbnY1MF9o d19wbV9xdWVyeV9iZWdpbihudjUwLCBxKTsKPj4gKyAgICAgIH0KPj4gICAgICAgICBicmVhazsK Pj4gICAgICB9Cj4+ICAgICAgcS0+c3RhdGUgPSBOVjUwX1FVRVJZX1NUQVRFX0FDVElWRTsKPj4g LSAgIHJldHVybiB0cnVlOwo+PiArICAgcmV0dXJuIHJldDsKPj4gICB9Cj4+Cj4+ICAgc3RhdGlj IHZvaWQKPj4gQEAgLTI3NCw3ICszMDYsOSBAQCBudjUwX3F1ZXJ5X2VuZChzdHJ1Y3QgcGlwZV9j b250ZXh0ICpwaXBlLCBzdHJ1Y3QgcGlwZV9xdWVyeSAqcHEpCj4+ICAgICAgICAgcS0+c3RhdGUg PSBOVjUwX1FVRVJZX1NUQVRFX1JFQURZOwo+PiAgICAgICAgIGJyZWFrOwo+PiAgICAgIGRlZmF1 bHQ6Cj4+IC0gICAgICBhc3NlcnQoMCk7Cj4+ICsgICAgICBpZiAoKHEtPnR5cGUgPj0gTlY1MF9I V19QTV9RVUVSWSgwKSAmJiBxLT50eXBlIDw9IE5WNTBfSFdfUE1fUVVFUllfTEFTVCkpIHsKPj4g KyAgICAgICAgIG52NTBfaHdfcG1fcXVlcnlfZW5kKG52NTAsIHEpOwo+PiArICAgICAgfQo+PiAg ICAgICAgIGJyZWFrOwo+PiAgICAgIH0KPj4KPj4gQEAgLTMwOSw2ICszNDMsMTAgQEAgbnY1MF9x dWVyeV9yZXN1bHQoc3RydWN0IHBpcGVfY29udGV4dCAqcGlwZSwgc3RydWN0IHBpcGVfcXVlcnkg KnBxLAo+PiAgICAgIGlmICghcHEpCj4+ICAgICAgICAgcmV0dXJuIEZBTFNFOwo+Pgo+PiArICAg aWYgKChxLT50eXBlID49IE5WNTBfSFdfUE1fUVVFUlkoMCkgJiYgcS0+dHlwZSA8PSBOVjUwX0hX X1BNX1FVRVJZX0xBU1QpKSB7Cj4+ICsgICAgICByZXR1cm4gbnY1MF9od19wbV9xdWVyeV9yZXN1 bHQobnY1MCwgcSwgd2FpdCwgcmVzdWx0KTsKPj4gKyAgIH0KPj4gKwo+PiAgICAgIGlmIChxLT5z dGF0ZSAhPSBOVjUwX1FVRVJZX1NUQVRFX1JFQURZKQo+PiAgICAgICAgIG52NTBfcXVlcnlfdXBk YXRlKHEpOwo+Pgo+PiBAQCAtNDg4LDYgKzUyNiwxMDE1IEBAIG52YTBfc29fdGFyZ2V0X3NhdmVf b2Zmc2V0KHN0cnVjdCBwaXBlX2NvbnRleHQgKnBpcGUsCj4+ICAgICAgbnY1MF9xdWVyeV9lbmQo cGlwZSwgdGFyZy0+cHEpOwo+PiAgIH0KPj4KPj4gKy8qID09PSBIQVJEV0FSRSBHTE9CQUwgUEVS Rk9STUFOQ0UgQ09VTlRFUlMgZm9yIE5WNTAgPT09ICovCj4+ICsKPj4gK3N0cnVjdCBudjUwX2h3 X3BtX3NvdXJjZV9jZmcKPj4gK3sKPj4gKyAgIGNvbnN0IGNoYXIgKm5hbWU7Cj4+ICsgICB1aW50 NjRfdCB2YWx1ZTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBudjUwX2h3X3BtX3NpZ25hbF9jZmcK Pj4gK3sKPj4gKyAgIGNvbnN0IGNoYXIgKm5hbWU7Cj4+ICsgICBjb25zdCBzdHJ1Y3QgbnY1MF9o d19wbV9zb3VyY2VfY2ZnIHNyY1s4XTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBudjUwX2h3X3Bt X2NvdW50ZXJfY2ZnCj4+ICt7Cj4+ICsgICB1aW50MTZfdCBsb2dpY19vcDsKPj4gKyAgIGNvbnN0 IHN0cnVjdCBudjUwX2h3X3BtX3NpZ25hbF9jZmcgc2lnWzRdOwo+PiArfTsKPj4gKwo+PiArZW51 bSBudjUwX2h3X3BtX3F1ZXJ5X2Rpc3BsYXkKPj4gK3sKPj4gKyAgIE5WNTBfSFdfUE1fRVZFTlRf RElTUExBWV9SQVcsCj4+ICsgICBOVjUwX0hXX1BNX0VWRU5UX0RJU1BMQVlfUkFUSU8sCj4+ICt9 Owo+PiArCj4+ICtlbnVtIG52NTBfaHdfcG1fcXVlcnlfY291bnQKPj4gK3sKPj4gKyAgIE5WNTBf SFdfUE1fRVZFTlRfQ09VTlRfU0lNUExFLAo+PiArICAgTlY1MF9IV19QTV9FVkVOVF9DT1VOVF9C NCwKPj4gKyAgIE5WNTBfSFdfUE1fRVZFTlRfQ09VTlRfQjYsCj4+ICt9Owo+PiArCj4+ICtzdHJ1 Y3QgbnY1MF9od19wbV9ldmVudF9jZmcKPj4gK3sKPj4gKyAgIGNvbnN0IGNoYXIgKm5hbWU7Cj4+ ICsgICBjb25zdCBjaGFyICpkZXNjOwo+PiArICAgZW51bSBudjUwX2h3X3BtX3F1ZXJ5X2Rpc3Bs YXkgZGlzcGxheTsKPj4gKyAgIGVudW0gbnY1MF9od19wbV9xdWVyeV9jb3VudCBjb3VudDsKPj4g KyAgIHVpbnQ4X3QgZG9tYWluOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IG52NTBfaHdfcG1fcXVl cnlfY2ZnCj4+ICt7Cj4+ICsgICBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9ldmVudF9jZmcgKmV2 ZW50Owo+PiArICAgY29uc3Qgc3RydWN0IG52NTBfaHdfcG1fY291bnRlcl9jZmcgY3RyWzRdOwo+ PiArfTsKPj4gKwo+PiArI2RlZmluZSBTUkMobmFtZSwgdmFsKSB7IG5hbWUsIHZhbCB9Cj4+ICsj ZGVmaW5lIFNJRyhuYW1lLCAuLi4pIHsgbmFtZSwgeyBfX1ZBX0FSR1NfXyB9IH0KPj4gKyNkZWZp bmUgQ1RSKGZ1bmMsIC4uLikgeyBmdW5jLCB7IF9fVkFfQVJHU19fIH0gfQo+PiArCj4+ICsvKgo+ PiArICogR1BVCj4+ICsgKi8KPj4gKy8qIGdwdV9pZGxlICovCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IG52NTBfaHdfcG1fZXZlbnRfY2ZnCj4+ICtudjUwX2dwdV9pZGxlX2V2ZW50ID0KPj4gK3sK Pj4gKyAgIC5uYW1lICAgID0gImdwdV9pZGxlIiwKPj4gKyAgIC5kZXNjICAgID0gIlRoZSBcJSBv ZiB0aW1lIHRoZSBHUFUgaXMgaWRsZS9idXN5IHNpbmNlIHRoZSBsYXN0IGNhbGwuICIKPj4gKyAg ICAgICAgICAgICAgIkhhdmluZyB0aGUgR1BVIGlkbGUgYXQgYWxsIGlzIGEgd2FzdGUgb2YgdmFs dWFibGUgcmVzb3VyY2VzLiAiCj4+ICsgICAgICAgICAgICAgICJZb3Ugd2FudCB0byBiYWxhbmNl IHRoZSBHUFUgYW5kIENQVSB3b3JrbG9hZHMgc28gdGhhdCBubyBvbmUgIgo+PiArICAgICAgICAg ICAgICAicHJvY2Vzc29yIGlzIHN0YXJ2ZWQgZm9yIHdvcmsuIFRpbWUgbWFuYWdlbWVudCBvciB1 c2luZyAiCj4+ICsgICAgICAgICAgICAgICJtdWx0aXRocmVhZGluZyBpbiB5b3VyIGFwcGxpY2F0 aW9uIGNhbiBoZWxwIGJhbGFuY2UgQ1BVIGJhc2VkICIKPj4gKyAgICAgICAgICAgICAgInRhc2tz ICh3b3JsZCBtYW5hZ2VtZW50LCBldGMuKSB3aXRoIHRoZSByZW5kZXJpbmcgcGlwZWxpbmUuIiwK Pj4gKyAgIC5kaXNwbGF5ID0gTlY1MF9IV19QTV9FVkVOVF9ESVNQTEFZX1JBVElPLAo+PiArICAg LmNvdW50ICAgPSBOVjUwX0hXX1BNX0VWRU5UX0NPVU5UX1NJTVBMRSwKPj4gKyAgIC5kb21haW4g ID0gMSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVy eV9jZmcKPj4gK252NTBfZ3B1X2lkbGVfcXVlcnkgPQo+PiArewo+PiArICAgLmV2ZW50ICA9ICZu djUwX2dwdV9pZGxlX2V2ZW50LAo+PiArICAgLmN0clswXSA9IENUUigweGFhYWEsIFNJRygicGMw MV9ncl9pZGxlIikpLAo+PiArfTsKPj4gKwo+PiArLyoKPj4gKyAqIElOUFVUIEFTU0VNQkxFUgo+ PiArICovCj4+ICsvKiBpbnB1dF9hc3NlbWJsZXJfYnVzeSAqLwo+PiArc3RhdGljIGNvbnN0IHN0 cnVjdCBudjUwX2h3X3BtX2V2ZW50X2NmZwo+PiArbnY1MF9pYV9idXN5X2V2ZW50ID0KPj4gK3sK Pj4gKyAgIC5uYW1lICAgID0gImlucHV0X2Fzc2VtYmxlcl9idXN5IiwKPj4gKyAgIC5kZXNjICAg ID0gIlRoZSBcJSBvZiB0aW1lIHRoZSBpbnB1dCBhc3NlbWJsZXIgdW5pdCBpcyBidXN5LiBUaGlz IGlzIG1haW5seSAiCj4+ICsgICAgICAgICAgICAgICJpbXBhY3RlZCBieSBib3RoIHRoZSBudW1i ZXIgb2YgdmVydGljZXMgcHJvY2Vzc2VkIGFzIHdlbGwgYXMgIgo+PiArICAgICAgICAgICAgICAi dGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZXMgb24gdGhvc2UgdmVydGljZXMuIFlvdSBjYW4gb3B0 aW1pemUgIgo+PiArICAgICAgICAgICAgICAidGhpcyBieSByZWR1Y2luZyB2ZXJ0ZXggc2l6ZSBh cyBtdWNoIGFzIHBvc3NpYmxlIGFuZCB1c2luZyAiCj4+ICsgICAgICAgICAgICAgICJpbmRleGVk IHByaW1pdGl2ZXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHZlcnRleCBjYWNoZS4iLAo+PiAr ICAgLmRpc3BsYXkgPSBOVjUwX0hXX1BNX0VWRU5UX0RJU1BMQVlfUkFUSU8sCj4+ICsgICAuY291 bnQgICA9IE5WNTBfSFdfUE1fRVZFTlRfQ09VTlRfU0lNUExFLAo+PiArICAgLmRvbWFpbiAgPSAx LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX3F1ZXJ5X2Nm Zwo+PiArbnY1MF9pYV9idXN5X3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAgID0gJm52NTBf aWFfYnVzeV9ldmVudCwKPj4gKyAgIC5jdHJbMF0gID0gQ1RSKDB4Zjg4OCwgU0lHKCJwYzAxX3Zm ZXRjaF8xOCIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUkMoInBncmFwaF92 ZmV0Y2hfdW5rMGNfdW5rMCIsIDB4MSkpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICBT SUcoInBjMDFfdmZldGNoXzE3IiksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFNJRygi cGMwMV92ZmV0Y2hfMDMiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgU0lHKCJwYzAx X3ZmZXRjaF8wMiIpKSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9o d19wbV9xdWVyeV9jZmcKPj4gK252YTBfaWFfYnVzeV9xdWVyeSA9Cj4+ICt7Cj4+ICsgICAuZXZl bnQgICA9ICZudjUwX2lhX2J1c3lfZXZlbnQsCj4+ICsgICAuY3RyWzBdICA9IENUUigweGY4ODgs IFNJRygicGMwMV92ZmV0Y2hfMTUiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U1JDKCJwZ3JhcGhfdmZldGNoX3VuazBjX3VuazAiLCAweDEpKSwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgU0lHKCJwYzAxX3ZmZXRjaF8xNCIpLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICBTSUcoInBjMDFfdmZldGNoXzAzIiksCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgIFNJRygicGMwMV92ZmV0Y2hfMDIiKSksCj4+ICt9Owo+PiArCj4+ICsvKiBpbnB1dF9hc3Nl bWJsZXJfd2FpdHNfZm9yX2ZiICovCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52NTBfaHdfcG1f ZXZlbnRfY2ZnCj4+ICtudjUwX2lhX3dhaXRzX2Zvcl9mYl9ldmVudCA9IHsKPj4gKyAgIC5uYW1l ICAgID0gImlucHV0X2Fzc2VtYmxlcl93YWl0c19mb3JfZmIiLAo+PiArICAgLmRlc2MgICAgPSAi VGhpcyBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIGlucHV0IGFzc2VtYmxlciB1bml0IHdhcyAi Cj4+ICsgICAgICAgICAgICAgICJ3YWl0aW5nIGZvciBkYXRhIGZyb20gdGhlIGZyYW1lIGJ1ZmZl ciB1bml0LiIsCj4+ICsgICAuZGlzcGxheSA9IE5WNTBfSFdfUE1fRVZFTlRfRElTUExBWV9SQVRJ TywKPj4gKyAgIC5jb3VudCAgID0gTlY1MF9IV19QTV9FVkVOVF9DT1VOVF9TSU1QTEUsCj4+ICsg ICAuZG9tYWluICA9IDEsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52NTBf aHdfcG1fcXVlcnlfY2ZnCj4+ICtudjUwX2lhX3dhaXRzX2Zvcl9mYl9xdWVyeSA9Cj4+ICt7Cj4+ ICsgICAuZXZlbnQgICA9ICZudjUwX2lhX3dhaXRzX2Zvcl9mYl9ldmVudCwKPj4gKyAgIC5jdHJb MF0gID0gQ1RSKDB4YWFhYSwgU0lHKCJwYzAxX3ZmZXRjaF8wZSIsCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTUkMoInBncmFwaF92ZmV0Y2hfdW5rMGNfdW5rMCIsIDB4MSkpKSwK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVyeV9jZmcK Pj4gK252YTBfaWFfd2FpdHNfZm9yX2ZiX3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAgID0g Jm52NTBfaWFfd2FpdHNfZm9yX2ZiX2V2ZW50LAo+PiArICAgLmN0clswXSAgPSBDVFIoMHhhYWFh LCBTSUcoInBjMDFfdmZldGNoXzBiIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNSQygicGdyYXBoX3ZmZXRjaF91bmswY191bmswIiwgMHgxKSkpLAo+PiArfTsKPj4gKwo+PiAr LyogdmVydGV4X2F0dHJpYnV0ZV9jb3VudCAqLwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUw X2h3X3BtX2V2ZW50X2NmZwo+PiArbnY1MF92ZXJ0ZXhfYXR0cl9jb3VudF9ldmVudCA9Cj4+ICt7 Cj4+ICsgICAubmFtZSAgICA9ICJ2ZXJ0ZXhfYXR0cmlidXRlX2NvdW50IiwKPj4gKyAgIC5kZXNj ICAgID0gIlRoZSBudW1iZXIgb2YgdmVydGV4IGF0dHJpYnV0ZXMgdGhhdCBhcmUgZmV0Y2hlZCBh bmQgcGFzc2VkIHRvICIKPj4gKyAgICAgICAgICAgICAgInRoZSBnZW9tZXRyeSB1bml0IGlzIHJl dHVybmVkIGluIHRoaXMgY291bnRlci4gQSBsYXJnZSBudW1iZXIgIgo+PiArICAgICAgICAgICAg ICAib2YgYXR0cmlidXRlcyAob3IgdW5hbGlnbmVkIHZlcnRpY2VzKSBjYW4gaHVydCB2ZXJ0ZXgg Y2FjaGUgIgo+PiArICAgICAgICAgICAgICAicGVyZm9ybWFuY2UgYW5kIHJlZHVjZSB0aGUgb3Zl cmFsbCB2ZXJ0ZXggcHJvY2Vzc2luZyAiCj4+ICsgICAgICAgICAgICAgICJjYXBhYmlsaXRpZXMg b2YgdGhlIHBpcGVsaW5lLiIsCj4+ICsgICAuZGlzcGxheSA9IE5WNTBfSFdfUE1fRVZFTlRfRElT UExBWV9SQVcsCj4+ICsgICAuY291bnQgICA9IE5WNTBfSFdfUE1fRVZFTlRfQ09VTlRfU0lNUExF LAo+PiArICAgLmRvbWFpbiAgPSAxLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVj dCBudjUwX2h3X3BtX3F1ZXJ5X2NmZwo+PiArbnY1MF92ZXJ0ZXhfYXR0cl9jb3VudF9xdWVyeSA9 Cj4+ICt7Cj4+ICsgICAuZXZlbnQgPSAmbnY1MF92ZXJ0ZXhfYXR0cl9jb3VudF9ldmVudCwKPj4g KyAgIC5jdHJbMF0gPSBDVFIoMHhmODg4LCBTSUcoInBjMDFfdmZldGNoXzE4IiwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU1JDKCJwZ3JhcGhfdmZldGNoX3VuazBjX3VuazAiLCAw eDEpKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDFfdmZldGNoXzE3Iiks Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU0lHKCJwYzAxX3ZmZXRjaF8wMyIpLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgIFNJRygicGMwMV92ZmV0Y2hfMDIiKSksCj4+ICt9Owo+ PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52NTBfaHdfcG1fcXVlcnlfY2ZnCj4+ICtudmEw X3ZlcnRleF9hdHRyX2NvdW50X3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAgPSAmbnY1MF92 ZXJ0ZXhfYXR0cl9jb3VudF9ldmVudCwKPj4gKyAgIC5jdHJbMF0gPSBDVFIoMHhmODg4LCBTSUco InBjMDFfdmZldGNoXzE1IiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JDKCJw Z3JhcGhfdmZldGNoX3VuazBjX3VuazAiLCAweDEpKSwKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBTSUcoInBjMDFfdmZldGNoXzE0IiksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg U0lHKCJwYzAxX3ZmZXRjaF8wMyIpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIFNJRygi cGMwMV92ZmV0Y2hfMDIiKSksCj4+ICt9Owo+PiArCj4+ICsvKgo+PiArICogR0VPTQo+PiArICov Cj4+ICsvKiBnZW9tX3ZlcnRleF9pbl9jb3VudCAqLwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBu djUwX2h3X3BtX2V2ZW50X2NmZwo+PiArbnY1MF9nZW9tX3ZlcnRleF9pbl9jb3VudF9ldmVudCA9 Cj4+ICt7Cj4+ICsgICAubmFtZSAgICA9ICJnZW9tX3ZlcnRleF9pbl9jb3VudCIsCj4+ICsgICAu ZGVzYyAgICA9ICJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIGlucHV0IHRvIHRoZSBnZW9tIHVuaXQu IiwKPj4gKyAgIC5kaXNwbGF5ID0gTlY1MF9IV19QTV9FVkVOVF9ESVNQTEFZX1JBVywKPj4gKyAg IC5jb3VudCAgID0gTlY1MF9IV19QTV9FVkVOVF9DT1VOVF9CNCwKPj4gKyAgIC5kb21haW4gID0g MSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVyeV9j ZmcKPj4gK252NTBfZ2VvbV92ZXJ0ZXhfaW5fY291bnRfcXVlcnkgPQo+PiArewo+PiArICAgLmV2 ZW50ICA9ICZudjUwX2dlb21fdmVydGV4X2luX2NvdW50X2V2ZW50LAo+PiArICAgLmN0clsxXSA9 IENUUigweGZmZmYsIFNJRygicGMwMV92ZmV0Y2hfMGUiLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTUkMoInBncmFwaF92ZmV0Y2hfdW5rMGNfdW5rMCIsIDB4MCkpLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgIFNJRygicGMwMV92ZmV0Y2hfMGYiKSwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBTSUcoInBjMDFfdmZldGNoXzEwIiksCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgU0lHKCJwYzAxX3RyYWlsZXIiKSksCj4+ICsgICAuY3RyWzJdID0gQ1RSKDB4 NTU1NSwgU0lHKCJwYzAxX3RyYWlsZXIiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBT SUcoInBjMDFfdHJhaWxlciIpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIFNJRygicGMw MV90cmFpbGVyIiksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU0lHKCJwYzAxX3RyYWls ZXIiKSksCj4+ICt9Owo+PiArCj4+ICsvKiBnZW9tX3ZlcnRleF9vdXRfY291bnQgKi8KPj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9ldmVudF9jZmcKPj4gK252NTBfZ2VvbV92ZXJ0 ZXhfb3V0X2NvdW50X2V2ZW50ID0KPj4gK3sKPj4gKyAgIC5uYW1lICAgID0gImdlb21fdmVydGV4 X291dF9jb3VudCIsCj4+ICsgICAuZGVzYyAgICA9ICJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIGNv bWluZyBvdXQgb2YgdGhlIGdlb20gdW5pdCBhZnRlciBhbnkgIgo+PiArICAgICAgICAgICAgICAi Z2VvbWV0cnkgc2hhZGVyIGV4cGFuc2lvbi4iLAo+PiArICAgLmRpc3BsYXkgPSBOVjUwX0hXX1BN X0VWRU5UX0RJU1BMQVlfUkFXLAo+PiArICAgLmNvdW50ICAgPSBOVjUwX0hXX1BNX0VWRU5UX0NP VU5UX1NJTVBMRSwKPj4gKyAgIC5kb21haW4gID0gMSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVyeV9jZmcKPj4gK252NTBfZ2VvbV92ZXJ0ZXhfb3V0 X2NvdW50X3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAgPSAmbnY1MF9nZW9tX3ZlcnRleF9v dXRfY291bnRfZXZlbnQsCj4+ICsgICAuY3RyWzBdID0gQ1RSKDB4YWFhYSwgU0lHKCJwYzAxX3Zh dHRyXzAxIikpLAo+PiArfTsKPj4gKwo+PiArLyogZ2VvbV9wcmltaXRpdmVfaW5fY291bnQgKi8K Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9ldmVudF9jZmcKPj4gK252NTBfZ2Vv bV9wcmltaXRpdmVfaW5fY291bnRfZXZlbnQgPQo+PiArewo+PiArICAgLm5hbWUgICAgPSAiZ2Vv bV9wcmltaXRpdmVfaW5fY291bnQiLAo+PiArICAgLmRlc2MgICAgPSAiVGhlIG51bWJlciBvZiBw cmltaXRpdmVzIGlucHV0IHRvIHRoZSBnZW9tIHVuaXQuIiwKPj4gKyAgIC5kaXNwbGF5ID0gTlY1 MF9IV19QTV9FVkVOVF9ESVNQTEFZX1JBVywKPj4gKyAgIC5jb3VudCAgID0gTlY1MF9IV19QTV9F VkVOVF9DT1VOVF9TSU1QTEUsCj4+ICsgICAuZG9tYWluICA9IDEsCj4+ICt9Owo+PiArCj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG52NTBfaHdfcG1fcXVlcnlfY2ZnCj4+ICtudjUwX2dlb21fcHJp bWl0aXZlX2luX2NvdW50X3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAgPSAmbnY1MF9nZW9t X3ByaW1pdGl2ZV9pbl9jb3VudF9ldmVudCwKPj4gKyAgIC5jdHJbMF0gPSBDVFIoMHhhYWFhLCBT SUcoInBjMDFfdmZldGNoXzA4IiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JD KCJwZ3JhcGhfdmZldGNoX3VuazBjX3VuazAiLCAweDApKSksCj4+ICt9Owo+PiArCj4+ICsvKiBn ZW9tX3ByaW1pdGl2ZV9vdXRfY291bnQgKi8KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9o d19wbV9ldmVudF9jZmcKPj4gK252NTBfZ2VvbV9wcmltaXRpdmVfb3V0X2NvdW50X2V2ZW50ID0K Pj4gK3sKPj4gKyAgIC5uYW1lICAgID0gImdlb21fcHJpbWl0aXZlX291dF9jb3VudCIsCj4+ICsg ICAuZGVzYyAgICA9ICJUaGUgbnVtYmVyIG9mIHByaW1pdGl2ZXMgY29taW5nIG91dCB0aGUgZ2Vv bSB1bml0IGFmdGVyIGFueSAiCj4+ICsgICAgICAgICAgICAgICJnZW9tZXRyeSBzaGFkZXIgZXhw YW5zaW9uLiIsCj4+ICsgICAuZGlzcGxheSA9IE5WNTBfSFdfUE1fRVZFTlRfRElTUExBWV9SQVcs Cj4+ICsgICAuY291bnQgICA9IE5WNTBfSFdfUE1fRVZFTlRfQ09VTlRfU0lNUExFLAo+PiArICAg LmRvbWFpbiAgPSAxLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3 X3BtX3F1ZXJ5X2NmZwo+PiArbnY1MF9nZW9tX3ByaW1pdGl2ZV9vdXRfY291bnRfcXVlcnkgPQo+ PiArewo+PiArICAgLmV2ZW50ICA9ICZudjUwX2dlb21fcHJpbWl0aXZlX291dF9jb3VudF9ldmVu dCwKPj4gKyAgIC5jdHJbMF0gPSBDVFIoMHhhYWFhLCBTSUcoInBjMDFfdmF0dHJfMDAiKSksCj4+ ICt9Owo+PiArCj4+ICsvKgo+PiArICogU1RSRUFNIE9VVAo+PiArICovCj4+ICsvKiBzdHJlYW1f b3V0X2J1c3kgKi8KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9ldmVudF9jZmcK Pj4gK252NTBfc29fYnVzeV9ldmVudCA9Cj4+ICt7Cj4+ICsgICAubmFtZSAgICA9ICJzdHJlYW1f b3V0X2J1c3kiLAo+PiArICAgLmRlc2MgICAgPSAiVGhpcyB1bml0IG1hbmFnZXMgdGhlIHdyaXRp bmcgb2YgdmVydGljZXMgdG8gdGhlIGZyYW1lIGJ1ZmZlciAiCj4+ICsgICAgICAgICAgICAgICJ3 aGVuIHVzaW5nIHN0cmVhbSBvdXQuIElmIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIHZlcnRpY2Vz IGFyZSAiCj4+ICsgICAgICAgICAgICAgICJ3cml0dGVuLCB0aGlzIGNhbiBiZWNvbWUgYSBib3R0 bGVuZWNrLiIsCj4+ICsgICAuZGlzcGxheSA9IE5WNTBfSFdfUE1fRVZFTlRfRElTUExBWV9SQVRJ TywKPj4gKyAgIC5jb3VudCAgID0gTlY1MF9IV19QTV9FVkVOVF9DT1VOVF9TSU1QTEUsCj4+ICsg ICAuZG9tYWluICA9IDEsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52NTBf aHdfcG1fcXVlcnlfY2ZnCj4+ICtudjUwX3NvX2J1c3lfcXVlcnkgPQo+PiArewo+PiArICAgLmV2 ZW50ICA9ICZudjUwX3NvX2J1c3lfZXZlbnQsCj4+ICsgICAuY3RyWzBdID0gQ1RSKDB4ODg4OCwg U0lHKCJwYzAxX3N0cm1vdXRfMDAiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUco InBjMDFfc3RybW91dF8wMSIpKSwKPj4gK307Cj4+ICsKPj4gKy8qCj4+ICsgKiBTRVRVUAo+PiAr ICovCj4+ICsvKiBzZXR1cF9wcmltaXRpdmVfY291bnQgKi8KPj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgbnY1MF9od19wbV9ldmVudF9jZmcKPj4gK252NTBfc2V0dXBfcHJpbWl0aXZlX2NvdW50X2V2 ZW50ID0KPj4gK3sKPj4gKyAgIC5uYW1lICAgID0gInNldHVwX3ByaW1pdGl2ZV9jb3VudCIsCj4+ ICsgICAuZGVzYyAgICA9ICJSZXR1cm5zIHRoZSBudW1iZXIgb2YgcHJpbWl0aXZlcyBwcm9jZXNz ZWQgaW4gdGhlIGdlb21ldHJ5ICIKPj4gKyAgICAgICAgICAgICAgInN1YnN5c3RlbS4gVGhpcyBl eHBlcmltZW50cyBjb3VudHMgcG9pbnRzLCBsaW5lcyBhbmQgdHJpYW5nbGVzLiAiCj4+ICsgICAg ICAgICAgICAgICJUbyBjb3VudCBvbmx5IHRyaWFuZ2xlcywgdXNlIHRoZSBzZXR1cF90cmlhbmds ZV9jb3VudCBjb3VudGVyLiAiCj4+ICsgICAgICAgICAgICAgICJCYWxhbmNlIHRoZXNlIGNvdW50 cyB3aXRoIHRoZSBudW1iZXIgb2YgcGl4ZWxzIGJlaW5nIGRyYXduIHRvICIKPj4gKyAgICAgICAg ICAgICAgInNlZSBpZiB5b3UgY291bGQgc2ltcGxpZnkgeW91ciBnZW9tZXRyeSBhbmQgdXNlICIK Pj4gKyAgICAgICAgICAgICAgImJ1bXAvZGlzcGxhY2VtZW50IG1hcHMsIGZvciBleGFtcGxlLiIs Cj4+ICsgICAuZGlzcGxheSA9IE5WNTBfSFdfUE1fRVZFTlRfRElTUExBWV9SQVcsCj4+ICsgICAu Y291bnQgICA9IE5WNTBfSFdfUE1fRVZFTlRfQ09VTlRfU0lNUExFLAo+PiArICAgLmRvbWFpbiAg PSAxLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX3F1ZXJ5 X2NmZwo+PiArbnY1MF9zZXR1cF9wcmltaXRpdmVfY291bnRfcXVlcnkgPQo+PiArewo+PiArICAg LmV2ZW50ICA9ICZudjUwX3NldHVwX3ByaW1pdGl2ZV9jb3VudF9ldmVudCwKPj4gKyAgIC5jdHJb MF0gPSBDVFIoMHhhYWFhLCBTSUcoInBjMDFfdHJhc3RfMDAiKSksCj4+ICt9Owo+PiArCj4+ICsv KiBzZXR1cF9wb2ludF9jb3VudCAqLwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3Bt X2V2ZW50X2NmZwo+PiArbnY1MF9zZXR1cF9wb2ludF9jb3VudF9ldmVudCA9Cj4+ICt7Cj4+ICsg ICAubmFtZSAgICA9ICJzZXR1cF9wb2ludF9jb3VudCIsCj4+ICsgICAuZGVzYyAgICA9ICJUaGUg bnVtYmVyIG9mIHBvaW50cyBzZWVuIGJ5IHRoZSBwcmltaXRpdmUgc2V0dXAgdW5pdCAoanVzdCAi Cj4+ICsgICAgICAgICAgICAgICJiZWZvcmUgcmFzdGVyaXphdGlvbikuIiwKPj4gKyAgIC5kaXNw bGF5ID0gTlY1MF9IV19QTV9FVkVOVF9ESVNQTEFZX1JBVywKPj4gKyAgIC5jb3VudCAgID0gTlY1 MF9IV19QTV9FVkVOVF9DT1VOVF9TSU1QTEUsCj4+ICsgICAuZG9tYWluICA9IDEsCj4+ICt9Owo+ PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52NTBfaHdfcG1fcXVlcnlfY2ZnCj4+ICtudjUw X3NldHVwX3BvaW50X2NvdW50X3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAgPSAmbnY1MF9z ZXR1cF9wb2ludF9jb3VudF9ldmVudCwKPj4gKyAgIC5jdHJbMF0gPSBDVFIoMHg4MDgwLCBTSUco InBjMDFfdHJhc3RfMDEiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDFf dHJhc3RfMDQiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDFfdHJhc3Rf MDUiKSksCj4+ICt9Owo+PiArCj4+ICsvKiBzZXR1cF9saW5lX2NvdW50ICovCj4+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IG52NTBfaHdfcG1fZXZlbnRfY2ZnCj4+ICtudjUwX3NldHVwX2xpbmVfY291 bnRfZXZlbnQgPQo+PiArewo+PiArICAgLm5hbWUgICAgPSAic2V0dXBfbGluZV9jb3VudCIsCj4+ ICsgICAuZGVzYyAgICA9ICJUaGUgbnVtYmVyIG9mIGxpbmVzIHNlZW4gYnkgdGhlIHByaW1pdGl2 ZSBzZXR1cCB1bml0IChqdXN0ICIKPj4gKyAgICAgICAgICAgICAgImJlZm9yZSByYXN0ZXJpemF0 aW9uKS4iLAo+PiArICAgLmRpc3BsYXkgPSBOVjUwX0hXX1BNX0VWRU5UX0RJU1BMQVlfUkFXLAo+ PiArICAgLmNvdW50ICAgPSBOVjUwX0hXX1BNX0VWRU5UX0NPVU5UX1NJTVBMRSwKPj4gKyAgIC5k b21haW4gID0gMSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19w bV9xdWVyeV9jZmcKPj4gK252NTBfc2V0dXBfbGluZV9jb3VudF9xdWVyeSA9Cj4+ICt7Cj4+ICsg ICAuZXZlbnQgID0gJm52NTBfc2V0dXBfbGluZV9jb3VudF9ldmVudCwKPj4gKyAgIC5jdHJbMF0g PSBDVFIoMHg4MDgwLCBTSUcoInBjMDFfdHJhc3RfMDIiKSwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICBTSUcoInBjMDFfdHJhc3RfMDQiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBTSUcoInBjMDFfdHJhc3RfMDUiKSksCj4+ICt9Owo+PiArCj4+ICsvKiBzZXR1cF90cmlhbmds ZV9jb3VudCAqLwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX2V2ZW50X2NmZwo+ PiArbnY1MF9zZXR1cF90cmlhbmdsZV9jb3VudF9ldmVudCA9Cj4+ICt7Cj4+ICsgICAubmFtZSAg ICA9ICJzZXR1cF90cmlhbmdsZV9jb3VudCIsCj4+ICsgICAuZGVzYyAgICA9ICJSZXR1cm5zIHRo ZSBudW1iZXIgb2YgdHJpYW5nbGVzIHByb2Nlc3NlZCBpbiB0aGUgZ2VvbWV0cnkgIgo+PiArICAg ICAgICAgICAgICAic3Vic3lzdGVtLiIsCj4+ICsgICAuZGlzcGxheSA9IE5WNTBfSFdfUE1fRVZF TlRfRElTUExBWV9SQVcsCj4+ICsgICAuY291bnQgICA9IE5WNTBfSFdfUE1fRVZFTlRfQ09VTlRf U0lNUExFLAo+PiArICAgLmRvbWFpbiAgPSAxLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0 IHN0cnVjdCBudjUwX2h3X3BtX3F1ZXJ5X2NmZwo+PiArbnY1MF9zZXR1cF90cmlhbmdsZV9jb3Vu dF9xdWVyeSA9Cj4+ICt7Cj4+ICsgICAuZXZlbnQgID0gJm52NTBfc2V0dXBfdHJpYW5nbGVfY291 bnRfZXZlbnQsCj4+ICsgICAuY3RyWzBdID0gQ1RSKDB4ODA4MCwgU0lHKCJwYzAxX3RyYXN0XzAz IiksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU0lHKCJwYzAxX3RyYXN0XzA0IiksCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgU0lHKCJwYzAxX3RyYXN0XzA1IikpLAo+PiArfTsK Pj4gKwo+PiArLyogc2V0dXBfcHJpbWl0aXZlX2N1bGxlZF9jb3VudCAqLwo+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBudjUwX2h3X3BtX2V2ZW50X2NmZwo+PiArbnY1MF9zZXR1cF9wcmltaXRpdmVf Y3VsbGVkX2NvdW50X2V2ZW50ID0KPj4gK3sKPj4gKyAgIC5uYW1lICAgID0gInNldHVwX3ByaW1p dGl2ZV9jdWxsZWRfY291bnQiLAo+PiArICAgLmRlc2MgICAgPSAiUmV0dXJucyB0aGUgbnVtYmVy IG9mIHByaW1pdGl2ZXMgY3VsbGVkIGluIHByaW1pdGl2ZSBzZXR1cC4gSWYgIgo+PiArICAgICAg ICAgICAgICAieW91IGFyZSBwZXJmb3JtaW5nIHZpZXdwb3J0IGN1bGxpbmcsIHRoaXMgZ2l2ZXMg eW91IGFuICIKPj4gKyAgICAgICAgICAgICAgImluZGljYXRpb24gb2YgdGhlIGFjY3VyYWN5IG9m IHRoZSBhbGdvcml0aG0gYmVpbmcgdXNlZCwgYW5kIGNhbiAiCj4+ICsgICAgICAgICAgICAgICJn aXZlIHlvdSBhbmQgaWRlYSBpZiB5b3UgbmVlZCB0byBpbXByb3ZlcyB0aGlzIGN1bGxpbmcuIFRo aXMgIgo+PiArICAgICAgICAgICAgICAiaW5jbHVkZXMgcHJpbWl0aXZlcyBjdWxsZWQgd2hlbiB1 c2luZyBiYWNrZmFjZSBjdWxsaW5nLiBEcmF3aW5nICIKPj4gKyAgICAgICAgICAgICAgImEgZnVs bHkgdmlzaWJsZSBzcGhlcmUgb24gdGhlIHNjcmVlbiBzaG91bGQgY3VsbCBoYWxmIG9mIHRoZSAi Cj4+ICsgICAgICAgICAgICAgICJ0cmlhbmdsZXMgaWYgYmFja2ZhY2UgY3VsbGluZyBpcyB0dXJu ZWQgb24gYW5kIGFsbCB0aGUgIgo+PiArICAgICAgICAgICAgICAidHJpYW5nbGVzIGFyZSBvcmRl cmVkIGNvbnNpc3RlbnRseSAoQ1cgb3IgQ0NXKS4iLAo+PiArICAgLmRpc3BsYXkgPSBOVjUwX0hX X1BNX0VWRU5UX0RJU1BMQVlfUkFXLAo+PiArICAgLmNvdW50ICAgPSBOVjUwX0hXX1BNX0VWRU5U X0NPVU5UX1NJTVBMRSwKPj4gKyAgIC5kb21haW4gID0gMSwKPj4gK307Cj4+ICsKPj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVyeV9jZmcKPj4gK252NTBfc2V0dXBfcHJpbWl0 aXZlX2N1bGxlZF9jb3VudF9xdWVyeSA9Cj4+ICt7Cj4+ICsgICAuZXZlbnQgID0gJm52NTBfc2V0 dXBfcHJpbWl0aXZlX2N1bGxlZF9jb3VudF9ldmVudCwKPj4gKyAgIC5jdHJbMF0gPSBDVFIoMHhh YWFhLCBTSUcoInBjMDFfdW5rMDAiKSksCj4+ICt9Owo+PiArCj4+ICsvKgo+PiArICogUkFTVEVS SVpFUgo+PiArICovCj4+ICsvKiByYXN0X3RpbGVzX2tpbGxlZF9ieV96Y3VsbF9jb3VudCAqLwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX2V2ZW50X2NmZwo+PiArbnY1MF9yYXN0 X3RpbGVzX2tpbGxlZF9ieV96Y3VsbF9ldmVudCA9Cj4+ICt7Cj4+ICsgICAubmFtZSAgICA9ICJy YXN0ZXJpemVyX3RpbGVzX2tpbGxlZF9ieV96Y3VsbF9jb3VudCIsCj4+ICsgICAuZGVzYyAgICA9 ICJUaGUgbnVtYmVyIG9mIHBpeGVscyBraWxsZWQgYnkgdGhlIHpjdWxsIHVuaXQgaW4gdGhlIHJh c3Rlcml6ZXIuIiwKPj4gKyAgIC5kaXNwbGF5ID0gTlY1MF9IV19QTV9FVkVOVF9ESVNQTEFZX1JB VywKPj4gKyAgIC5jb3VudCAgID0gTlY1MF9IV19QTV9FVkVOVF9DT1VOVF9CNiwKPj4gKyAgIC5k b21haW4gID0gMSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19w bV9xdWVyeV9jZmcKPj4gK252NTBfcmFzdF90aWxlc19raWxsZWRfYnlfemN1bGxfcXVlcnkgPQo+ PiArewo+PiArICAgLmV2ZW50ICA9ICZudjUwX3Jhc3RfdGlsZXNfa2lsbGVkX2J5X3pjdWxsX2V2 ZW50LAo+PiArICAgLmN0clsxXSA9IENUUigweGZmZmYsIFNJRygicGMwMV96Y3VsbF8wMCIsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSQygicGdyYXBoX3pjdWxsX3BtX3Vua2E0 X3VuazAiLCAweDcpKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDFfemN1 bGxfMDEiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDFfemN1bGxfMDIi KSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDFfemN1bGxfMDMiKSksCj4+ ICsgICAuY3RyWzJdID0gQ1RSKDB4NTU1NSwgU0lHKCJwYzAxX3RyYWlsZXIiKSwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDFfdHJhaWxlciIpLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgIFNJRygicGMwMV96Y3VsbF8wNCIpLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgIFNJRygicGMwMV96Y3VsbF8wNSIpKSwKPj4gK307Cj4+ICsKPj4gKy8qIHJhc3RfdGls ZXNfaW5fY291bnQgKi8KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9ldmVudF9j ZmcKPj4gK252NTBfcmFzdF90aWxlc19pbl9jb3VudF9ldmVudCA9Cj4+ICt7Cj4+ICsgICAubmFt ZSAgICA9ICJyYXN0ZXJpemVyX3RpbGVzX2luX2NvdW50IiwKPj4gKyAgIC5kZXNjICAgID0gIkNv dW50IG9mIHRpbGVzIChlYWNoIG9mIHdoaWNoIGNvbnRhaW4gMS04IHBpeGVscykgc2VlbiBieSB0 aGUgIgo+PiArICAgICAgICAgICAgICAicmFzdGVyaXplciBzdGFnZS4iLAo+PiArICAgLmRpc3Bs YXkgPSBOVjUwX0hXX1BNX0VWRU5UX0RJU1BMQVlfUkFXLAo+PiArICAgLmNvdW50ICAgPSBOVjUw X0hXX1BNX0VWRU5UX0NPVU5UX0I2LAo+PiArICAgLmRvbWFpbiAgPSAxLAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX3F1ZXJ5X2NmZwo+PiArbnY1MF9yYXN0 X3RpbGVzX2luX2NvdW50X3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAgPSAmbnY1MF9yYXN0 X3RpbGVzX2luX2NvdW50X2V2ZW50LAo+PiArICAgLmN0clsxXSA9IENUUigweGZmZmYsIFNJRygi cGMwMV96Y3VsbF8wMCIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSQygicGdy YXBoX3pjdWxsX3BtX3Vua2E0X3VuazAiLCAweDApKSwKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBTSUcoInBjMDFfemN1bGxfMDEiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBT SUcoInBjMDFfemN1bGxfMDIiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBj MDFfemN1bGxfMDMiKSksCj4+ICsgICAuY3RyWzJdID0gQ1RSKDB4NTU1NSwgU0lHKCJwYzAxX3Ry YWlsZXIiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDFfdHJhaWxlciIp LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIFNJRygicGMwMV96Y3VsbF8wNCIpLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgIFNJRygicGMwMV96Y3VsbF8wNSIpKSwKPj4gK307Cj4+ ICsKPj4gKy8qCj4+ICsgKiBST1AKPj4gKyAqLwo+PiArLyogcm9wX2J1c3kgKi8KPj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9ldmVudF9jZmcKPj4gK252NTBfcm9wX2J1c3lfZXZl bnQgPQo+PiArewo+PiArICAgLm5hbWUgICAgPSAicm9wX2J1c3kiLAo+PiArICAgLmRlc2MgICAg PSAiXCUgb2YgdGltZSB0aGF0IHRoZSBST1AgdW5pdCBpcyBhY3RpdmVseSBkb2luZyB3b3JrLiAi Cj4+ICsgICAgICAgICAgICAgICJUaGlzIGNhbiBiZSBoaWdoIGlmIGFscGhhIGJsZW5kaW5nIGlz IHR1cm5lZCBvbiwgb2Ygb3ZlcmRyYXcgIgo+PiArICAgICAgICAgICAgICAiaXMgaGlnaCwgZXRj LiIsCj4+ICsgICAuZGlzcGxheSA9IE5WNTBfSFdfUE1fRVZFTlRfRElTUExBWV9SQVRJTywKPj4g KyAgIC5jb3VudCAgID0gTlY1MF9IV19QTV9FVkVOVF9DT1VOVF9TSU1QTEUsCj4+ICsgICAuZG9t YWluICA9IDIsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52NTBfaHdfcG1f cXVlcnlfY2ZnCj4+ICtudjUwX3JvcF9idXN5X3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAg PSAmbnY1MF9yb3BfYnVzeV9ldmVudCwKPj4gKyAgIC5jdHJbMF0gPSBDVFIoMHhmODg4LCBTSUco InBjMDJfcHJvcF8wMiIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSQygicGdy YXBoX3RwYzBfcHJvcF9wbV9tdXhfc2VsIiwgMHgwKSksCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgU0lHKCJwYzAyX3Byb3BfMDMiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBT SUcoInBjMDJfcHJvcF8wNCIpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIFNJRygicGMw Ml9wcm9wXzA1IikpLAo+PiArfTsKPj4gKwo+PiArLyogcm9wX3dhaXRzX2Zvcl9mYiAqLwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX2V2ZW50X2NmZwo+PiArbnY1MF9yb3Bfd2Fp dHNfZm9yX2ZiX2V2ZW50ID0KPj4gK3sKPj4gKyAgIC5uYW1lICAgID0gInJvcF93YWl0c19mb3Jf ZmIiLAo+PiArICAgLmRlc2MgICAgPSAiVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBibGVuZGluZyB1 bml0IHNwZW50IHdhaXRpbmcgZm9yIGRhdGEgIgo+PiArICAgICAgICAgICAgICAiZnJvbSB0aGUg ZnJhbWUgYnVmZmVyIHVuaXQuIElmIGJsZW5kaW5nIGlzIGVuYWJsZWQgYW5kIHRoZXJlICIKPj4g KyAgICAgICAgICAgICAgImlzIGEgbG90IG9mIHRyYWZmaWMgaGVyZSAoc2luY2UgdGhpcyBpcyBh IHJlYWQvbW9kaWZ5L3dyaXRlICIKPj4gKyAgICAgICAgICAgICAgIm9wZXJhdGlvbikgdGhpcyBj YW4gYmVjb21lIGEgYm90dGxlbmVjay4iLAo+PiArICAgLmRpc3BsYXkgPSBOVjUwX0hXX1BNX0VW RU5UX0RJU1BMQVlfUkFUSU8sCj4+ICsgICAuY291bnQgICA9IE5WNTBfSFdfUE1fRVZFTlRfQ09V TlRfU0lNUExFLAo+PiArICAgLmRvbWFpbiAgPSAyLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBudjUwX2h3X3BtX3F1ZXJ5X2NmZwo+PiArbnY1MF9yb3Bfd2FpdHNfZm9yX2Zi X3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAgPSAmbnY1MF9yb3Bfd2FpdHNfZm9yX2ZiX2V2 ZW50LAo+PiArICAgLmN0clswXSA9IENUUigweDIyZjIsIFNJRygicGMwMl9jcm9wXzAzIiwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JDKCJwZ3JhcGhfcm9wMF9jcm9wX3BtX211 eF9zZWwwIiwgMHgwKSksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU0lHKCJwYzAyX2Ny b3BfMDIiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDJfenJvcF8wMyIs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSQygicGdyYXBoX3JvcDBfenJvcF9w bV9tdXhfc2VsMCIsIDB4MCkpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIFNJRygicGMw Ml96cm9wXzAyIikpLAo+PiArfTsKPj4gKwo+PiArLyogcm9wX3dhaXRzX2Zvcl9zaGFkZXIgKi8K Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9ldmVudF9jZmcKPj4gK252NTBfcm9w X3dhaXRzX2Zvcl9zaGFkZXJfZXZlbnQgPQo+PiArewo+PiArICAgLm5hbWUgICAgPSAicm9wX3dh aXRzX2Zvcl9zaGFkZXIiLAo+PiArICAgLmRlc2MgICAgPSAiVGhpcyBpcyBhIG1lYXN1cmVtZW50 IG9mIGhvdyBvZnRlbiB0aGUgYmxlbmRpbmcgdW5pdCB3YXMgIgo+PiArICAgICAgICAgICAgICAi d2FpdGluZyBvbiBuZXcgd29yayAoZnJhZ21lbnRzIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSByZW5k ZXIgIgo+PiArICAgICAgICAgICAgICAidGFyZ2V0KS4gSWYgdGhlIHBpeGVsIHNoYWRlcnMgYXJl IHBhcnRpY3VsYXJseSBleHBlbnNpdmUsIHRoZSAiCj4+ICsgICAgICAgICAgICAgICJST1AgdW5p dCBjb3VsZCBiZSBzdGFydmVkIHdhaXRpbmcgZm9yIHJlc3VsdHMuIiwKPj4gKyAgIC5kaXNwbGF5 ID0gTlY1MF9IV19QTV9FVkVOVF9ESVNQTEFZX1JBVElPLAo+PiArICAgLmNvdW50ICAgPSBOVjUw X0hXX1BNX0VWRU5UX0NPVU5UX1NJTVBMRSwKPj4gKyAgIC5kb21haW4gID0gMiwKPj4gK307Cj4+ ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVyeV9jZmcKPj4gK252NTBf cm9wX3dhaXRzX2Zvcl9zaGFkZXJfcXVlcnkgPQo+PiArewo+PiArICAgLmV2ZW50ICA9ICZudjUw X3JvcF93YWl0c19mb3Jfc2hhZGVyX2V2ZW50LAo+PiArICAgLmN0clswXSA9IENUUigweDIyMjIs IFNJRygicGMwMl9wcm9wXzYiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUkMo InBncmFwaF90cGMwX3Byb3BfcG1fbXV4X3NlbCIsIDB4MCkpLAo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgIFNJRygicGMwMl9wcm9wXzciKSksCj4+ICt9Owo+PiArCj4+ICsvKiByb3Bfc2Ft cGxlc19raWxsZWRfYnlfZWFybHl6X2NvdW50ICovCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52 NTBfaHdfcG1fZXZlbnRfY2ZnCj4+ICtudjUwX3JvcF9zYW1wbGVzX2tpbGxlZF9ieV9lYXJseXpf ZXZlbnQgPQo+PiArewo+PiArICAgLm5hbWUgICAgPSAicm9wX3NhbXBsZXNfa2lsbGVkX2J5X2Vh cmx5el9jb3VudCIsCj4+ICsgICAuZGVzYyAgICA9ICJUaGlzIHJldHVybnMgdGhlIG51bWJlciBv ZiBwaXhlbHMgdGhhdCB3ZXJlIGtpbGxlZCBpbiB0aGUgIgo+PiArICAgICAgICAgICAgICAiZWFy bHlaIGhhcmR3YXJlLiBUaGlzIHNpZ25hbCB3aWxsIGdpdmUgeW91IGFuIGlkZWEgb2YsIGZvciAi Cj4+ICsgICAgICAgICAgICAgICJpbnN0YW5jZSwgYSBaIG9ubHkgcGFzcyB3YXMgc3VjY2Vzc2Z1 bCBpbiBzZXR0aW5nIHVwIHRoZSBkZXB0aCAiCj4+ICsgICAgICAgICAgICAgICJidWZmZXIuIiwK Pj4gKyAgIC5kaXNwbGF5ID0gTlY1MF9IV19QTV9FVkVOVF9ESVNQTEFZX1JBVywKPj4gKyAgIC5j b3VudCAgID0gTlY1MF9IV19QTV9FVkVOVF9DT1VOVF9CNiwKPj4gKyAgIC5kb21haW4gID0gMiwK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVyeV9jZmcK Pj4gK252NTBfcm9wX3NhbXBsZXNfa2lsbGVkX2J5X2Vhcmx5el9xdWVyeSA9Cj4+ICt7Cj4+ICsg ICAuZXZlbnQgID0gJm52NTBfcm9wX3NhbXBsZXNfa2lsbGVkX2J5X2Vhcmx5el9ldmVudCwKPj4g KyAgIC5jdHJbMV0gPSBDVFIoMHhmZmZmLCBTSUcoInBjMDJfcHJvcF8wMCIsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNSQygicGdyYXBoX3RwYzBfcHJvcF9wbV9tdXhfc2VsIiwg MHgxYSkpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIFNJRygicGMwMl9wcm9wXzAxIiks Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU0lHKCJwYzAyX3Byb3BfMDIiKSwKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDJfcHJvcF8wMyIpKSwKPj4gKyAgIC5jdHJb Ml0gPSBDVFIoMHg1NTU1LCBTSUcoInBjMDJfcHJvcF8wNyIpLAo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgIFNJRygicGMwMl90cmFpbGVyIiksCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgU0lHKCJwYzAyX3Byb3BfMDQiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUco InBjMDJfcHJvcF8wNSIpKSwKPj4gK307Cj4+ICsKPj4gKy8qIHJvcF9zYW1wbGVzX2tpbGxlZF9i eV9sYXRlel9jb3VudCAqLwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX2V2ZW50 X2NmZwo+PiArbnY1MF9yb3Bfc2FtcGxlc19raWxsZWRfYnlfbGF0ZXpfZXZlbnQgPQo+PiArewo+ PiArICAgLm5hbWUgICAgPSAicm9wX3NhbXBsZXNfa2lsbGVkX2J5X2xhdGV6X2NvdW50IiwKPj4g KyAgIC5kZXNjICAgID0gIlRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBpeGVscyB0aGF0IHdl cmUga2lsbGVkIGFmdGVyIHRoZSAiCj4+ICsgICAgICAgICAgICAgICJwaXhlbCBzaGFkZXIgcmFu LiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGVhcmx5IFogaXMgdW5hYmxlIHRvICIKPj4gKyAgICAg ICAgICAgICAgImN1bGwgdGhlIHBpeGVsIGJlY2F1c2Ugb2YgYW4gQVBJIHNldHVwIGlzc3VlIGxp a2UgY2hhbmdpbmcgdGhlICIKPj4gKyAgICAgICAgICAgICAgIlogZGlyZWN0aW9uIG9yIG1vZGlm eWluZyBaIGluIHRoZSBwaXhlbCBzaGFkZXIuIiwKPj4gKyAgIC5kaXNwbGF5ID0gTlY1MF9IV19Q TV9FVkVOVF9ESVNQTEFZX1JBVywKPj4gKyAgIC5jb3VudCAgID0gTlY1MF9IV19QTV9FVkVOVF9D T1VOVF9CNiwKPj4gKyAgIC5kb21haW4gID0gMiwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVyeV9jZmcKPj4gK252NTBfcm9wX3NhbXBsZXNfa2lsbGVk X2J5X2xhdGV6X3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAgPSAmbnY1MF9yb3Bfc2FtcGxl c19raWxsZWRfYnlfbGF0ZXpfZXZlbnQsCj4+ICsgICAuY3RyWzFdID0gQ1RSKDB4ZmZmZiwgU0lH KCJwYzAyX3Byb3BfMDAiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUkMoInBn cmFwaF90cGMwX3Byb3BfcG1fbXV4X3NlbCIsIDB4MWIpKSwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICBTSUcoInBjMDJfcHJvcF8wMSIpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg IFNJRygicGMwMl9wcm9wXzAyIiksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU0lHKCJw YzAyX3Byb3BfMDMiKSksCj4+ICsgICAuY3RyWzJdID0gQ1RSKDB4NTU1NSwgU0lHKCJwYzAyX3By b3BfMDciKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTSUcoInBjMDJfdHJhaWxlciIp LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIFNJRygicGMwMl9wcm9wXzA0IiksCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgU0lHKCJwYzAyX3Byb3BfMDUiKSksCj4+ICt9Owo+PiAr Cj4+ICsvKgo+PiArICogVEVYVFVSRQo+PiArICovCj4+ICsvKiB0ZXhfY2FjaGVfbWlzcyAqLwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX2V2ZW50X2NmZwo+PiArbnY1MF90ZXhf Y2FjaGVfbWlzc19ldmVudCA9Cj4+ICt7Cj4+ICsgICAubmFtZSAgICA9ICJ0ZXhfY2FjaGVfbWlz cyIsCj4+ICsgICAuZGVzYyAgICA9ICJOdW1iZXIgb2YgdGV4dHVyZSBjYWNoZSBtaXNzZXMuIiwK Pj4gKyAgIC5kaXNwbGF5ID0gTlY1MF9IV19QTV9FVkVOVF9ESVNQTEFZX1JBVywKPj4gKyAgIC5j b3VudCAgID0gTlY1MF9IV19QTV9FVkVOVF9DT1VOVF9TSU1QTEUsCj4+ICsgICAuZG9tYWluICA9 IDIsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52NTBfaHdfcG1fcXVlcnlf Y2ZnCj4+ICtudjUwX3RleF9jYWNoZV9taXNzX3F1ZXJ5ID0KPj4gK3sKPj4gKyAgIC5ldmVudCAg PSAmbnY1MF90ZXhfY2FjaGVfbWlzc19ldmVudCwKPj4gKyAgIC5jdHJbMF0gPSBDVFIoMHhhYWFh LCBTSUcoInBjMDJfdGV4XzA0IiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JD KCJwZ3JhcGhfdHBjMF90ZXhfdW5rMDhfdW5rMCIsIDB4MjAwKSkpLAo+PiArfTsKPj4gKwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX3F1ZXJ5X2NmZwo+PiArbnY4NF90ZXhfY2Fj aGVfbWlzc19xdWVyeSA9Cj4+ICt7Cj4+ICsgICAuZXZlbnQgID0gJm52NTBfdGV4X2NhY2hlX21p c3NfZXZlbnQsCj4+ICsgICAuY3RyWzBdID0gQ1RSKDB4YWFhYSwgU0lHKCJwYzAyX3RleF8wNCIs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSQygicGdyYXBoX3RwYzBfdGV4X3Vu azA4X3VuazAiLCAweDgwMCkpKSwKPj4gK307Cj4+ICsKPj4gKy8qIHRleF9jYWNoZV9oaXQgKi8K Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9ldmVudF9jZmcKPj4gK252NTBfdGV4 X2NhY2hlX2hpdF9ldmVudCA9Cj4+ICt7Cj4+ICsgICAubmFtZSAgICA9ICJ0ZXhfY2FjaGVfaGl0 IiwKPj4gKyAgIC5kZXNjICAgID0gIk51bWJlciBvZiB0ZXh0dXJlIGNhY2hlIGhpdHMuIiwKPj4g KyAgIC5kaXNwbGF5ID0gTlY1MF9IV19QTV9FVkVOVF9ESVNQTEFZX1JBVywKPj4gKyAgIC5jb3Vu dCAgID0gTlY1MF9IV19QTV9FVkVOVF9DT1VOVF9TSU1QTEUsCj4+ICsgICAuZG9tYWluICA9IDIs Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52NTBfaHdfcG1fcXVlcnlfY2Zn Cj4+ICtudjUwX3RleF9jYWNoZV9oaXRfcXVlcnkgPQo+PiArewo+PiArICAgLmV2ZW50ICA9ICZu djUwX3RleF9jYWNoZV9oaXRfZXZlbnQsCj4+ICsgICAuY3RyWzBdID0gQ1RSKDB4YWFhYSwgU0lH KCJwYzAyX3RleF8wNSIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSQygicGdy YXBoX3RwYzBfdGV4X3VuazA4X3VuazAiLCAweDIwMCkpKSwKPj4gK307Cj4+ICsKPj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVyeV9jZmcKPj4gK252ODRfdGV4X2NhY2hlX2hp dF9xdWVyeSA9Cj4+ICt7Cj4+ICsgICAuZXZlbnQgID0gJm52NTBfdGV4X2NhY2hlX2hpdF9ldmVu dCwKPj4gKyAgIC5jdHJbMF0gPSBDVFIoMHhhYWFhLCBTSUcoInBjMDJfdGV4XzA1IiwKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JDKCJwZ3JhcGhfdHBjMF90ZXhfdW5rMDhfdW5r MCIsIDB4ODAwKSkpLAo+PiArfTsKPj4gKwo+PiArLyogdGV4X3dhaXRzX2Zvcl9mYiAqLwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX2V2ZW50X2NmZwo+PiArbnY1MF90ZXhfd2Fp dHNfZm9yX2ZiX2V2ZW50ID0KPj4gK3sKPj4gKyAgIC5uYW1lICAgID0gInRleF93YWl0c19mb3Jf ZmIiLAo+PiArICAgLmRlc2MgICAgPSAiVGhpcyBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIHRl eHR1cmUgdW5pdCBzcGVudCB3YWl0aW5nIG9uICIKPj4gKyAgICAgICAgICAgICAgInNhbXBsZXMg dG8gcmV0dXJuIGZyb20gdGhlIGZyYW1lIGJ1ZmZlciB1bml0LiBJdCBpcyBhIHBvdGVudGlhbCAi Cj4+ICsgICAgICAgICAgICAgICJpbmRpY2F0aW9uIG9mIHBvb3IgdGV4dHVyZSBjYWNoZSB1dGls aXphdGlvbi4iLAo+PiArICAgLmRpc3BsYXkgPSBOVjUwX0hXX1BNX0VWRU5UX0RJU1BMQVlfUkFU SU8sCj4+ICsgICAuY291bnQgICA9IE5WNTBfSFdfUE1fRVZFTlRfQ09VTlRfU0lNUExFLAo+PiAr ICAgLmRvbWFpbiAgPSAyLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBudjUw X2h3X3BtX3F1ZXJ5X2NmZwo+PiArbnY1MF90ZXhfd2FpdHNfZm9yX2ZiX3F1ZXJ5ID0KPj4gK3sK Pj4gKyAgIC5ldmVudCAgPSAmbnY1MF90ZXhfd2FpdHNfZm9yX2ZiX2V2ZW50LAo+PiArICAgLmN0 clswXSA9IENUUigweGFhYWEsIFNJRygicGMwMl90ZXhfMDYiLAo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTUkMoInBncmFwaF90cGMwX3RleF91bmswOF91bmswIiwgMHgyMDApKSks Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52NTBfaHdfcG1fcXVlcnlfY2Zn Cj4+ICtudjg0X3RleF93YWl0c19mb3JfZmJfcXVlcnkgPQo+PiArewo+PiArICAgLmV2ZW50ICA9 ICZudjUwX3RleF93YWl0c19mb3JfZmJfZXZlbnQsCj4+ICsgICAuY3RyWzBdID0gQ1RSKDB4YWFh YSwgU0lHKCJwYzAyX3RleF8wNiIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNS QygicGdyYXBoX3RwYzBfdGV4X3VuazA4X3VuazAiLCAweDgwMCkpKSwKPj4gK307Cj4+ICsKPj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVyeV9jZmcgKm52NTBfaHdfcG1fcXVl cmllc1tOVjUwX0hXX1BNX1FVRVJZX0NPVU5UXTsKPj4gKwo+PiArI2RlZmluZSBfUShuLCBxKSBu djUwX2h3X3BtX3F1ZXJpZXNbTlY1MF9IV19QTV9RVUVSWV8jI25dID0gJnE7Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkCj4+ICtudjUwX2lkZW50aWZ5X2V2ZW50cyhzdHJ1Y3QgbnY1MF9zY3JlZW4gKnNj cmVlbikKPj4gK3sKPj4gKyAgX1EoR1BVX0lETEUsICAgICAgICAgICAgICAgICAgICAgIG52NTBf Z3B1X2lkbGVfcXVlcnkpOwo+PiArICBfUShJQV9CVVNZLCAgICAgICAgICAgICAgICAgICAgICAg bnY1MF9pYV9idXN5X3F1ZXJ5KTsKPj4gKyAgX1EoSUFfV0FJVFNfRk9SX0ZCLCAgICAgICAgICAg ICAgIG52NTBfaWFfd2FpdHNfZm9yX2ZiX3F1ZXJ5KTsKPj4gKyAgX1EoVkVSVEVYX0FUVFJfQ09V TlQsICAgICAgICAgICAgIG52NTBfdmVydGV4X2F0dHJfY291bnRfcXVlcnkpOwo+PiArICBfUShH RU9NX1ZFUlRFWF9JTl9DT1VOVCwgICAgICAgICAgbnY1MF9nZW9tX3ZlcnRleF9pbl9jb3VudF9x dWVyeSk7Cj4+ICsgIF9RKEdFT01fVkVSVEVYX09VVF9DT1VOVCwgICAgICAgICBudjUwX2dlb21f dmVydGV4X291dF9jb3VudF9xdWVyeSk7Cj4+ICsgIF9RKEdFT01fUFJJTUlUSVZFX0lOX0NPVU5U LCAgICAgICBudjUwX2dlb21fcHJpbWl0aXZlX2luX2NvdW50X3F1ZXJ5KTsKPj4gKyAgX1EoR0VP TV9QUklNSVRJVkVfT1VUX0NPVU5ULCAgICAgIG52NTBfZ2VvbV9wcmltaXRpdmVfb3V0X2NvdW50 X3F1ZXJ5KTsKPj4gKyAgX1EoU09fQlVTWSwgICAgICAgICAgICAgICAgICAgICAgIG52NTBfc29f YnVzeV9xdWVyeSk7Cj4+ICsgIF9RKFNFVFVQX1BSSU1JVElWRV9DT1VOVCwgICAgICAgICBudjUw X3NldHVwX3ByaW1pdGl2ZV9jb3VudF9xdWVyeSk7Cj4+ICsgIF9RKFNFVFVQX1BPSU5UX0NPVU5U LCAgICAgICAgICAgICBudjUwX3NldHVwX3BvaW50X2NvdW50X3F1ZXJ5KTsKPj4gKyAgX1EoU0VU VVBfTElORV9DT1VOVCwgICAgICAgICAgICAgIG52NTBfc2V0dXBfbGluZV9jb3VudF9xdWVyeSk7 Cj4+ICsgIF9RKFNFVFVQX1RSSUFOR0xFX0NPVU5ULCAgICAgICAgICBudjUwX3NldHVwX3RyaWFu Z2xlX2NvdW50X3F1ZXJ5KTsKPj4gKyAgX1EoU0VUVVBfUFJJTUlUSVZFX0NVTExFRF9DT1VOVCwg IG52NTBfc2V0dXBfcHJpbWl0aXZlX2N1bGxlZF9jb3VudF9xdWVyeSk7Cj4+ICsgIF9RKFJBU1Rf VElMRVNfS0lMTEVEX0JZX1pDVUxMLCAgICBudjUwX3Jhc3RfdGlsZXNfa2lsbGVkX2J5X3pjdWxs X3F1ZXJ5KTsKPj4gKyAgX1EoUkFTVF9USUxFU19JTl9DT1VOVCwgICAgICAgICAgIG52NTBfcmFz dF90aWxlc19pbl9jb3VudF9xdWVyeSk7Cj4+ICsgIF9RKFJPUF9CVVNZLCAgICAgICAgICAgICAg ICAgICAgICBudjUwX3JvcF9idXN5X3F1ZXJ5KTsKPj4gKyAgX1EoUk9QX1dBSVRTX0ZPUl9GQiwg ICAgICAgICAgICAgIG52NTBfcm9wX3dhaXRzX2Zvcl9mYl9xdWVyeSk7Cj4+ICsgIF9RKFJPUF9X QUlUU19GT1JfU0hBREVSLCAgICAgICAgICBudjUwX3JvcF93YWl0c19mb3Jfc2hhZGVyX3F1ZXJ5 KTsKPj4gKyAgX1EoUk9QX1NBTVBMRVNfS0lMTEVEX0JZX0VBUkxZWiwgIG52NTBfcm9wX3NhbXBs ZXNfa2lsbGVkX2J5X2Vhcmx5el9xdWVyeSk7Cj4+ICsgIF9RKFJPUF9TQU1QTEVTX0tJTExFRF9C WV9MQVRFWiwgICBudjUwX3JvcF9zYW1wbGVzX2tpbGxlZF9ieV9sYXRlel9xdWVyeSApOwo+PiAr ICBfUShURVhfQ0FDSEVfTUlTUywgICAgICAgICAgICAgICAgbnY1MF90ZXhfY2FjaGVfbWlzc19x dWVyeSk7Cj4+ICsgIF9RKFRFWF9DQUNIRV9ISVQsICAgICAgICAgICAgICAgICBudjUwX3RleF9j YWNoZV9oaXRfcXVlcnkpOwo+PiArICBfUShURVhfV0FJVFNfRk9SX0ZCLCAgICAgICAgICAgICAg bnY1MF90ZXhfd2FpdHNfZm9yX2ZiX3F1ZXJ5KTsKPj4gKwo+PiArICAgaWYgKHNjcmVlbi0+YmFz ZS5jbGFzc18zZCA+PSBOVjg0XzNEX0NMQVNTKSB7Cj4+ICsgICAgICAvKiBWYXJpYW50cyBmb3Ig TlY4NCsgKi8KPj4gKyAgICAgIF9RKFRFWF9DQUNIRV9NSVNTLCAgIG52ODRfdGV4X2NhY2hlX21p c3NfcXVlcnkpOwo+PiArICAgICAgX1EoVEVYX0NBQ0hFX0hJVCwgICAgbnY4NF90ZXhfY2FjaGVf aGl0X3F1ZXJ5KTsKPj4gKyAgICAgIF9RKFRFWF9XQUlUU19GT1JfRkIsIG52ODRfdGV4X3dhaXRz X2Zvcl9mYl9xdWVyeSk7Cj4+ICsgICB9Cj4+ICsKPj4gKyAgIGlmIChzY3JlZW4tPmJhc2UuY2xh c3NfM2QgPj0gTlZBMF8zRF9DTEFTUykgewo+PiArICAgICAgLyogVmFyaWFudHMgZm9yIE5WQTAr ICovCj4+ICsgICAgICBfUShJQV9CVVNZLCAgICAgICAgICAgbnZhMF9pYV9idXN5X3F1ZXJ5KTsK Pj4gKyAgICAgIF9RKElBX1dBSVRTX0ZPUl9GQiwgICBudmEwX2lhX3dhaXRzX2Zvcl9mYl9xdWVy eSk7Cj4+ICsgICAgICBfUShWRVJURVhfQVRUUl9DT1VOVCwgbnZhMF92ZXJ0ZXhfYXR0cl9jb3Vu dF9xdWVyeSk7Cj4+ICsgICB9Cj4+ICt9Cj4+ICsKPj4gKyN1bmRlZiBfUQo+PiArCj4+ICsjaWZk ZWYgREVCVUcKPj4gK3N0YXRpYyB2b2lkCj4+ICtudjUwX2h3X3BtX2R1bXBfcGVyZmRvbShzdHJ1 Y3QgbnZpZl9wZXJmZG9tX3YwICphcmdzKQo+PiArewo+PiArICAgaW50IGksIGosIGs7Cj4+ICsK Pj4gKyAgIGRlYnVnX3ByaW50ZigiUEVSRkRPTSBDT05GSUdVUkFUSU9OOlxuIik7Cj4+ICsgICBk ZWJ1Z19wcmludGYoImRvbWFpbmU6IDB4JTAyeFxuIiwgYXJncy0+ZG9tYWluKTsKPj4gKyAgIGRl YnVnX3ByaW50ZigibW9kZTogMHglMDJ4XG4iLCBhcmdzLT5tb2RlKTsKPj4gKyAgIGZvciAoaSA9 IDA7IGkgPCA0OyBpKyspIHsKPj4gKyAgICAgIHVpbnQzMl90IHNpZ25hbCA9IDA7Cj4+ICsgICAg ICBmb3IgKGogPSAwOyBqIDwgNDsgaisrKQo+PiArICAgICAgICAgc2lnbmFsIHw9IGFyZ3MtPmN0 cltpXS5zaWduYWxbal0gPDwgKGogKiA4KTsKPj4gKwo+PiArICAgICAgZGVidWdfcHJpbnRmKCJj dHJbJWRdOiBmdW5jID0gMHglMDR4LCBzaWduYWw9MHglMDh4XG4iLAo+PiArICAgICAgICAgICAg ICAgICAgIGksIGFyZ3MtPmN0cltpXS5sb2dpY19vcCwgc2lnbmFsKTsKPj4gKwo+PiArICAgICAg Zm9yIChqID0gMDsgaiA8IDQ7IGorKykgewo+PiArICAgICAgICAgZm9yIChrID0gMDsgayA8IDg7 IGsrKykgewo+PiArICAgICAgICAgICAgdWludDMyX3Qgc291cmNlLCB2YWx1ZTsKPj4gKyAgICAg ICAgICAgIGlmICghYXJncy0+Y3RyW2ldLnNvdXJjZVtqXVtrXSkKPj4gKyAgICAgICAgICAgICAg IGNvbnRpbnVlOwo+PiArCj4+ICsgICAgICAgICAgICBzb3VyY2UgPSBhcmdzLT5jdHJbaV0uc291 cmNlW2pdW2tdOwo+PiArICAgICAgICAgICAgdmFsdWUgID0gYXJncy0+Y3RyW2ldLnNvdXJjZVtq XVtrXSA+PiAzMjsKPj4gKyAgICAgICAgICAgIGRlYnVnX3ByaW50ZigiICBzcmNbJWRdWyVkXTog c291cmNlID0gMHglMDh4LCB2YWx1ZSA9IDB4JTA4eFxuIiwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICBqLCBrLCBzb3VyY2UsIHZhbHVlKTsKPj4gKyAgICAgICAgIH0KPj4gKyAgICAgIH0K Pj4gKyAgIH0KPj4gK30KPj4gKyNlbmRpZgo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG52 NTBfaHdfcG1fcXVlcnlfY2ZnICoKPj4gK252NTBfaHdfcG1fcXVlcnlfZ2V0X2NmZyhzdHJ1Y3Qg bnY1MF9zY3JlZW4gKnNjcmVlbiwgdWludDMyX3QgcXVlcnlfdHlwZSkKPj4gK3sKPj4gKyAgIHJl dHVybiBudjUwX2h3X3BtX3F1ZXJpZXNbcXVlcnlfdHlwZSAtIE5WNTBfSFdfUE1fUVVFUlkoMCld Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbGVhbgo+PiArbnY1MF9od19wbV9xdWVyeV9jcmVh dGUoc3RydWN0IG52NTBfY29udGV4dCAqbnY1MCwgc3RydWN0IG52NTBfcXVlcnkgKnEpCj4+ICt7 Cj4+ICsgICBzdHJ1Y3QgbnY1MF9zY3JlZW4gKnNjcmVlbiA9IG52NTAtPnNjcmVlbjsKPj4gKyAg IHN0cnVjdCBub3V2ZWF1X3BlcmZtb24gKnBlcmZtb24gPSBzY3JlZW4tPmJhc2UucGVyZm1vbjsK Pj4gKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbnY1MF9od19wbV9xdWVyeV9jZmcgKmNmZzsKPj4g KyAgIHN0cnVjdCBudmlmX3BlcmZkb21fdjAgYXJncyA9IHt9Owo+PiArICAgc3RydWN0IG5vdXZl YXVfcGVyZm1vbl9kb20gKmRvbTsKPj4gKyAgIGludCBpLCBqLCBrOwo+PiArICAgaW50IHJldDsK Pj4gKwo+PiArICAgaWYgKCFzY3JlZW4tPnBtLm51bV9hY3RpdmUpIHsKPj4gKyAgICAgIC8qIFRP RE86IEN1cnJlbnRseSwgb25seSBvbmUgcXVlcnkgdHlwZSBjYW4gYmUgbW9uaXRvcmVkIHNpbXVs dGFuZW91c2x5Cj4+ICsgICAgICAgKiBiZWNhdXNlIHRoZSBHYWxsaXVtJ3MgSFVEIGRvZXNuJ3Qg Zml0IHdlbGwgd2l0aCB0aGUgcGVyZmRvbSBpbnRlcmZhY2UuCj4+ICsgICAgICAgKgo+PiArICAg ICAgICogV2l0aCB0d28gZGlmZmVyZW50IHF1ZXJ5IHR5cGVzLCB0aGUgY3VycmVudCBzY2VuYXJp byBpcyBhcyBmb2xsb3dzOgo+PiArICAgICAgICogQ1JFQVRFIFExLCBCRUdJTiBRMSwgQ1JFQVRF IFEyLCBCRUdJTiBRMiwgRU5EIFExLCBSRVNVTFQgUTEsIEJFR0lOIFExLAo+PiArICAgICAgICog RU5EIFEyLCBSRVNVTFQgUTIsIEJFR0lOIFEyLCBFTkQgUTEsIGFuZCBzbyBvbi4KPj4gKyAgICAg ICAqCj4+ICsgICAgICAgKiBUaGlzIGJlaGF2aW91ciBkb2Vzbid0IGFsbG93IHRvIHNjaGVkdWxl IG11bHRpcGxlIGNvdW50ZXJzIGJlY2F1c2UKPj4gKyAgICAgICAqIHdlIGhhdmUgdG8gZG8gdGhh dCBhdCBxdWVyeSBjcmVhdGlvbiAoaWUuIHdoZW4gYSBwZXJmZG9tIGlzIGNyZWF0ZWQpLgo+PiAr ICAgICAgICoKPj4gKyAgICAgICAqIFRvIGdldCByaWQgb2YgdGhpcyBsaW1pdGF0aW9uLCBhIGJl dHRlciBzY2VuYXJpbyB3b3VsZCBiZToKPj4gKyAgICAgICAqIENSRUFURSBRMSwgQ1JFQVRFIFEy LCBCRUdJTiBRMSwgQkVHSU4gUTIsIEVORCBRMSwgRU5EIFEyLCBSRVNVTFQgUTEsCj4+ICsgICAg ICAgKiBSRVNVTFQgUTIsIEJFR0lOIFExLCBCRUdJTiBRMiwgRU5EIFExLCBhbmQgc28gb24uCj4+ ICsgICAgICAgKgo+PiArICAgICAgICogV2l0aCB0aGlzIGtpbmQgb2YgYmVoYXZpb3VyLCB3ZSBj b3VsZCBpbnRyb2R1Y2UKPj4gKyAgICAgICAqIHtjcmVhdGUsYmVnaW4sZW5kfV9hbGxfcXVlcmll cygpIGZ1bmN0aW9ucyB0byBiZSBhYmxlIHRvIGNvbmZpZ3VyZQo+PiArICAgICAgICogYWxsIHF1 ZXJpZXMgaW4gb25lIHNob3QuCj4+ICsgICAgICAgKi8KPj4gKyAgICAgIHNjcmVlbi0+cG0ucXVl cnlfdHlwZSA9IHEtPnR5cGU7Cj4+ICsgICB9Cj4+ICsgICBzY3JlZW4tPnBtLm51bV9hY3RpdmUr KzsKPj4gKwo+PiArICAgaWYgKHNjcmVlbi0+cG0ucXVlcnlfdHlwZSAhPSBxLT50eXBlKSB7Cj4+ ICsgICAgICBOT1VWRUFVX0VSUigiT25seSBvbmUgcXVlcnkgdHlwZSBjYW4gYmUgbW9uaXRvcmVk IGF0IHRoZSBzYW1lIHRpbWUhIik7Cj4+ICsgICAgICByZXR1cm4gRkFMU0U7Cj4+ICsgICB9Cj4+ ICsKPj4gKyAgIGNmZyA9IG52NTBfaHdfcG1fcXVlcnlfZ2V0X2NmZyhudjUwLT5zY3JlZW4sIHEt PnR5cGUpOwo+PiArCj4+ICsgICBkb20gPSBub3V2ZWF1X3BlcmZtb25fZ2V0X2RvbV9ieV9pZChw ZXJmbW9uLCBjZmctPmV2ZW50LT5kb21haW4pOwo+PiArICAgaWYgKCFkb20pIHsKPj4gKyAgICAg IE5PVVZFQVVfRVJSKCJGYWlsZWQgdG8gZmluZCBkb21haW4gJWRcbiIsIGNmZy0+ZXZlbnQtPmRv bWFpbik7Cj4+ICsgICAgICByZXR1cm4gRkFMU0U7Cj4+ICsgICB9Cj4+ICsKPj4gKyAgIC8qIGNv bmZpZ3VyZSBkb21haW4gYW5kIGNvdW50aW5nIG1vZGUgKi8KPj4gKyAgIGFyZ3MuZG9tYWluID0g ZG9tLT5pZDsKPj4gKyAgIGFyZ3MubW9kZSAgID0gY2ZnLT5ldmVudC0+Y291bnQ7Cj4+ICsKPj4g KyAgIC8qIGNvbmZpZ3VyZSBjb3VudGVycyBmb3IgdGhpcyBoYXJkd2FyZSBldmVudCAqLwo+PiAr ICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2ZnLT5jdHIpOyBpKyspIHsKPj4gKyAgICAg IGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX2NvdW50ZXJfY2ZnICpzY3RyID0gJmNmZy0+Y3RyW2ld Owo+PiArCj4+ICsgICAgICBpZiAoIXNjdHItPmxvZ2ljX29wKQo+PiArICAgICAgICAgY29udGlu dWU7Cj4+ICsgICAgICBhcmdzLmN0cltpXS5sb2dpY19vcCA9IHNjdHItPmxvZ2ljX29wOwo+PiAr Cj4+ICsgICAgICAvKiBjb25maWd1cmUgc2lnbmFscyBmb3IgdGhpcyBjb3VudGVyICovCj4+ICsg ICAgICBmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShzY3RyLT5zaWcpOyBqKyspIHsKPj4gKyAg ICAgICAgIGNvbnN0IHN0cnVjdCBudjUwX2h3X3BtX3NpZ25hbF9jZmcgKnNzaWcgPSAmc2N0ci0+ c2lnW2pdOwo+PiArICAgICAgICAgc3RydWN0IG5vdXZlYXVfcGVyZm1vbl9zaWcgKnNpZzsKPj4g Kwo+PiArICAgICAgICAgaWYgKCFzc2lnLT5uYW1lKQo+PiArICAgICAgICAgICAgY29udGludWU7 Cj4+ICsKPj4gKyAgICAgICAgIHNpZyA9IG5vdXZlYXVfcGVyZm1vbl9nZXRfc2lnX2J5X25hbWUo ZG9tLCBzc2lnLT5uYW1lKTsKPj4gKyAgICAgICAgIGlmICghc2lnKSB7Cj4+ICsgICAgICAgICAg ICBOT1VWRUFVX0VSUigiRmFpbGVkIHRvIGZpbmQgc2lnbmFsICVzXG4iLCBzc2lnLT5uYW1lKTsK Pj4gKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKPj4gKyAgICAgICAgIH0KPj4gKyAgICAgICAg IGFyZ3MuY3RyW2ldLnNpZ25hbFtqXSA9IHNpZy0+c2lnbmFsOwo+PiArCj4+ICsgICAgICAgICAv KiBjb25maWd1cmUgc291cmNlcyBmb3IgdGhpcyBzaWduYWwgKi8KPj4gKyAgICAgICAgIGZvciAo ayA9IDA7IGsgPCBBUlJBWV9TSVpFKHNzaWctPnNyYyk7IGsrKykgewo+PiArICAgICAgICAgICAg Y29uc3Qgc3RydWN0IG52NTBfaHdfcG1fc291cmNlX2NmZyAqc3NyYyA9ICZzc2lnLT5zcmNba107 Cj4+ICsgICAgICAgICAgICBzdHJ1Y3Qgbm91dmVhdV9wZXJmbW9uX3NyYyAqc3JjOwo+PiArCj4+ ICsgICAgICAgICAgICBpZiAoIXNzcmMtPm5hbWUpCj4+ICsgICAgICAgICAgICAgICBjb250aW51 ZTsKPj4gKwo+PiArICAgICAgICAgICAgc3JjID0gbm91dmVhdV9wZXJmbW9uX2dldF9zcmNfYnlf bmFtZShzaWcsIHNzcmMtPm5hbWUpOwo+PiArICAgICAgICAgICAgaWYgKCFzcmMpIHsKPj4gKyAg ICAgICAgICAgICAgIE5PVVZFQVVfRVJSKCJGYWlsZWQgdG8gZmluZCBzb3VyY2UgJXNcbiIsIHNz cmMtPm5hbWUpOwo+PiArICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwo+PiArICAgICAgICAg ICAgfQo+PiArICAgICAgICAgICAgYXJncy5jdHJbaV0uc291cmNlW2pdW2tdID0gKHNzcmMtPnZh bHVlIDw8IDMyKSB8IHNyYy0+aWQ7Cj4+ICsgICAgICAgICB9Cj4+ICsgICAgICB9Cj4+ICsgICB9 Cj4+ICsKPj4gKyNpZmRlZiBERUJVRwo+PiArICAgaWYgKGRlYnVnX2dldF9udW1fb3B0aW9uKCJO VjUwX1BNX0RFQlVHIiwgMCkpCj4+ICsgICAgICBudjUwX2h3X3BtX2R1bXBfcGVyZmRvbSgmYXJn cyk7Cj4+ICsjZW5kaWYKPj4gKwo+PiArICAgcmV0ID0gbm91dmVhdV9vYmplY3RfbmV3KHBlcmZt b24tPm9iamVjdCwgcGVyZm1vbi0+aGFuZGxlKyssCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlZJRl9JT0NUTF9ORVdfVjBfUEVSRkRPTSwKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmYXJncywgc2l6ZW9mKGFyZ3MpLCAmcS0+cGVyZmRvbSk7Cj4+ICsgICBpZiAocmV0 KSB7Cj4+ICsgICAgICBOT1VWRUFVX0VSUigiRmFpbGVkIHRvIGNyZWF0ZSBwZXJmZG9tIG9iamVj dDogJWRcbiIsIHJldCk7Cj4+ICsgICAgICByZXR1cm4gRkFMU0U7Cj4+ICsgICB9Cj4+ICsKPj4g KyAgIHJldHVybiBUUlVFOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZAo+PiArbnY1MF9od19w bV9xdWVyeV9kZXN0cm95KHN0cnVjdCBudjUwX2NvbnRleHQgKm52NTAsIHN0cnVjdCBudjUwX3F1 ZXJ5ICpxKQo+PiArewo+PiArICAgc3RydWN0IG52NTBfc2NyZWVuICpzY3JlZW4gPSBudjUwLT5z Y3JlZW47Cj4+ICsKPj4gKyAgIG5vdXZlYXVfb2JqZWN0X2RlbCgmcS0+cGVyZmRvbSk7Cj4+ICsg ICBzY3JlZW4tPnBtLm51bV9hY3RpdmUtLTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2xlYW4K Pj4gK252NTBfaHdfcG1fcXVlcnlfYmVnaW4oc3RydWN0IG52NTBfY29udGV4dCAqbnY1MCwgc3Ry dWN0IG52NTBfcXVlcnkgKnEpCj4+ICt7Cj4+ICsgICBzdHJ1Y3Qgbm91dmVhdV9wdXNoYnVmICpw dXNoID0gbnY1MC0+YmFzZS5wdXNoYnVmOwo+PiArCj4+ICsgICAvKiBzdGFydCB0aGUgbmV4dCBi YXRjaCBvZiBjb3VudGVycyAqLwo+PiArICAgUFVTSF9TUEFDRShwdXNoLCAyKTsKPj4gKyAgIEJF R0lOX05WMDQocHVzaCwgU1VCQ19TVygweDA2MDgpLCAxKTsKPj4gKyAgIFBVU0hfREFUQSAocHVz aCwgcS0+cGVyZmRvbS0+aGFuZGxlKTsKPj4gKwo+PiArICAgcmV0dXJuIFRSVUU7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtudjUwX2h3X3BtX3F1ZXJ5X2VuZChzdHJ1Y3QgbnY1MF9j b250ZXh0ICpudjUwLCBzdHJ1Y3QgbnY1MF9xdWVyeSAqcSkKPj4gK3sKPj4gKyAgIHN0cnVjdCBu b3V2ZWF1X3B1c2hidWYgKnB1c2ggPSBudjUwLT5iYXNlLnB1c2hidWY7Cj4+ICsgICBzdHJ1Y3Qg bnY1MF9zY3JlZW4gKnNjcmVlbiA9IG52NTAtPnNjcmVlbjsKPj4gKwo+PiArICAgLyogc2V0IHNl cXVlbmNlIGZpZWxkICh1c2VkIHRvIGNoZWNrIGlmIHJlc3VsdCBpcyBhdmFpbGFibGUpICovCj4+ ICsgICBxLT5zZXF1ZW5jZSA9ICsrc2NyZWVuLT5wbS5zZXF1ZW5jZTsKPj4gKwo+PiArICAgLyog c2FtcGxlIHRoZSBwcmV2aW91cyBiYXRjaCBvZiBjb3VudGVycyAqLwo+PiArICAgUFVTSF9TUEFD RShwdXNoLCAyKTsKPj4gKyAgIEJFR0lOX05WMDQocHVzaCwgU1VCQ19TVygweDA2MGMpLCAxKTsK Pj4gKyAgIFBVU0hfREFUQSAocHVzaCwgcS0+cGVyZmRvbS0+aGFuZGxlKTsKPj4gKwo+PiArICAg LyogcmVhZCBiYWNrIGNvdW50ZXJzIHZhbHVlcyAqLwo+PiArICAgUFVTSF9TUEFDRShwdXNoLCAy KTsKPiBEbyB0aGlzIG9uY2UgYXMgUFVTSF9TUEFDRSg0KS4gT3IgZXZlbiBiZXR0ZXIsIFBVU0hf U1BBQ0UoMykgYW5kIG9ubHkKPiBkbyAxIGJlZ2luIHdpdGggbGVuZ3RoIDIuCgpZZXMsIHRoZXkg YXJlIHNlcXVlbnRpYWwgbGlrZSBpbiBhIHByZXZpb3VzIHBhdGNoLCBzbyBJIGNhbiBkZWZpbml0 ZWx5IApkbyB0aGF0LgoKPgo+PiArICAgQkVHSU5fTlYwNChwdXNoLCBTVUJDX1NXKDB4MDcwMCks IDEpOwo+PiArICAgUFVTSF9EQVRBIChwdXNoLCBzY3JlZW4tPnBtLnNlcXVlbmNlKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvbGF0aWxlIHZvaWQgKgo+PiArbnY1MF9udGZ5KHN0cnVjdCBudjUw X3NjcmVlbiAqc2NyZWVuKQo+PiArewo+PiArICAgc3RydWN0IG52MDRfbm90aWZ5ICpxdWVyeSA9 IHNjcmVlbi0+cXVlcnktPmRhdGE7Cj4+ICsgICBzdHJ1Y3Qgbm91dmVhdV9ibyAqbm90aWZ5ID0g c2NyZWVuLT5ub3RpZnlfYm87Cj4+ICsKPj4gKyAgIHJldHVybiAoY2hhciAqKW5vdGlmeS0+bWFw ICsgcXVlcnktPm9mZnNldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIElOTElORSB1aW50MzJfdAo+ PiArbnY1MF9od19wbV9xdWVyeV9nZXRfb2Zmc2V0KHN0cnVjdCBudjUwX3F1ZXJ5ICpxKQo+PiAr ewo+PiArICAgcmV0dXJuICgxICsgKHEtPnNlcXVlbmNlICUgTlY1MF9IV19QTV9SSU5HX0JVRkZF Ul9NQVhfUVVFUklFUykgKgo+PiArICAgICAgICAgICBOVjUwX0hXX1BNX1JJTkdfQlVGRkVSX05V TV9ET01BSU5TICogNik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBJTkxJTkUgYm9vbGVhbgo+PiAr bnY1MF9od19wbV9xdWVyeV9yZWFkX2RhdGEoc3RydWN0IG52NTBfY29udGV4dCAqbnY1MCwgc3Ry dWN0IG52NTBfcXVlcnkgKnEsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFu IHdhaXQsIHVpbnQzMl90IGN0cls0XSwgdWludDMyX3QgKmNsaykKPj4gK3sKPj4gKyAgIHZvbGF0 aWxlIHVpbnQzMl90ICpudGZ5ID0gbnY1MF9udGZ5KG52NTAtPnNjcmVlbik7Cj4+ICsgICB1aW50 MzJfdCBvZmZzZXQgPSBudjUwX2h3X3BtX3F1ZXJ5X2dldF9vZmZzZXQocSk7Cj4+ICsgICBib29s ZWFuIGZvdW5kID0gRkFMU0U7Cj4+ICsgICBpbnQgaTsKPj4gKwo+PiArICAgd2hpbGUgKG50Znlb MF0gPCBxLT5zZXF1ZW5jZSkgewo+PiArICAgICAgaWYgKCF3YWl0KQo+PiArICAgICAgICAgcmV0 dXJuIEZBTFNFOwo+PiArICAgICAgdXNsZWVwKDEwMCk7Cj4+ICsgICB9Cj4gWWVhaCB0aGlzIHdv bid0IGZseS4gVGFrZSBhIGxvb2sgYXQgbm91dmVhdV9mZW5jZV93YWl0IGZvciBpdCBkb2VzCj4g dGhhdC4gSSBkb24ndCBzdXBwb3NlIHlvdSBjYW4gaG9vayBpbnRvIHRoZSBmZW5jZSBtZWNoYW5p c20gZm9yIGFsbAo+IHRoaXMsIGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIHlvdXIgb3duIHZlcnNp b24sIHJpZ2h0PwoKWWVhaCwgdGhpcyBzZWVtZWQgYSBiaXQgZGlydHkgdG8gbWUgYXMgd2VsbC4g Oi0pClllcywgSSBjYW4ndCB1c2UgdGhlIGZlbmNlIG1lY2hhbmlzbSBoZXJlIGJ1dCBJIHdpbGwg dHJ5IHRvIGltcHJvdmUgdGhpcyAKYnkgbG9va2luZyBhdCBub3V2ZWF1X2ZlbmNlX3dhaXQuCgo+ Cj4gQlRXLCB3aGF0IG1ha2VzIHN1cmUgdGhhdCB0aGUgcXVlcnkgaGFzIGJlZW4ga2lja2VkIG91 dD8gWW91IG5ldmVyIGRvCj4gYSBQVVNIX0tJQ0sgdGhhdCBJIGNhbiBzZWUuLi4KCk1tbWguLiBB IFBVU0hfS0lDSyB3aWxsIHByb2JhYmx5IGhlbHAgaGVyZSwgeWVzIQoKPgo+PiArCj4+ICsgICBp ZiAobnRmeVswXSA+IHEtPnNlcXVlbmNlICsgTlY1MF9IV19QTV9SSU5HX0JVRkZFUl9NQVhfUVVF UklFUyAtIDEpCj4+ICsgICAgICByZXR1cm4gRkFMU0U7Cj4+ICsKPj4gKyAgIGZvciAoaSA9IDA7 IGkgPCBOVjUwX0hXX1BNX1JJTkdfQlVGRkVSX05VTV9ET01BSU5TOyBpKyspIHsKPj4gKyAgICAg IGlmIChudGZ5W29mZnNldCArIGkgKiA2XSA9PSBxLT5wZXJmZG9tLT5oYW5kbGUpIHsKPj4gKyAg ICAgICAgIGZvdW5kID0gVFJVRTsKPj4gKyAgICAgICAgIGJyZWFrOwo+PiArICAgICAgfQo+PiAr ICAgfQo+PiArCj4+ICsgICBpZiAoIWZvdW5kKSB7Cj4+ICsgICAgICBOT1VWRUFVX0VSUigiRmFp bGVkIHRvIGZpbmQgcGVyZmRvbSBvYmplY3QgJSIgUFJJdTY0ICIhXG4iLAo+PiArICAgICAgICAg ICAgICAgICAgcS0+cGVyZmRvbS0+aGFuZGxlKTsKPj4gKyAgICAgIHJldHVybiBGQUxTRTsKPj4g KyAgIH0KPj4gKwo+PiArICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKPj4gKyAgICAgIGN0cltp XSA9IG50Znlbb2Zmc2V0ICsgaSArIDFdOwo+PiArICAgKmNsayA9IG50Znlbb2Zmc2V0ICsgNV07 Cj4+ICsKPj4gKyAgIHJldHVybiBUUlVFOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbGVhbgo+ PiArbnY1MF9od19wbV9xdWVyeV9yZXN1bHQoc3RydWN0IG52NTBfY29udGV4dCAqbnY1MCwgc3Ry dWN0IG52NTBfcXVlcnkgKnEsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHdh aXQsIHZvaWQgKnJlc3VsdCkKPj4gK3sKPj4gKyAgIHN0cnVjdCBudjUwX3NjcmVlbiAqc2NyZWVu ID0gbnY1MC0+c2NyZWVuOwo+PiArICAgY29uc3Qgc3RydWN0IG52NTBfaHdfcG1fcXVlcnlfY2Zn ICpjZmc7Cj4+ICsgICB1aW50MzJfdCBjdHJbNF0sIGNsazsKPj4gKyAgIHVpbnQ2NF90IHZhbHVl ID0gMDsKPj4gKyAgIGludCByZXQ7Cj4+ICsKPj4gKyAgIHJldCA9IG52NTBfaHdfcG1fcXVlcnlf cmVhZF9kYXRhKG52NTAsIHEsIHdhaXQsIGN0ciwgJmNsayk7Cj4+ICsgICBpZiAoIXJldCkKPj4g KyAgICAgIHJldHVybiBGQUxTRTsKPj4gKwo+PiArICAgY2ZnID0gbnY1MF9od19wbV9xdWVyeV9n ZXRfY2ZnKHNjcmVlbiwgcS0+dHlwZSk7Cj4+ICsgICBpZiAoY2ZnLT5ldmVudC0+Y291bnQgPT0g TlY1MF9IV19QTV9FVkVOVF9DT1VOVF9TSU1QTEUpIHsKPj4gKyAgICAgIC8qIFNJTVBMRSBoYXJk d2FyZSBldmVudHMgYXJlIHNhbXBsZWQgb24gUFJFX0NUUi4gKi8KPj4gKyAgICAgIHZhbHVlID0g Y3RyWzBdOwo+PiArICAgfSBlbHNlIHsKPj4gKyAgICAgIC8qIEVWRU5UX0I0L0VWRU5UX0I2IGhh cmR3YXJlIGV2ZW50cyBhcmUgc2FtcGxlZCBvbiBFVkVOVF9DVFIuICovCj4+ICsgICAgICB2YWx1 ZSA9IGN0clsyXTsKPj4gKyAgIH0KPj4gKwo+PiArICAgaWYgKGNmZy0+ZXZlbnQtPmRpc3BsYXkg PT0gTlY1MF9IV19QTV9FVkVOVF9ESVNQTEFZX1JBVElPKSB7Cj4+ICsgICAgICBpZiAoY2xrKQo+ PiArICAgICAgICAgdmFsdWUgPSAodmFsdWUgKiAxMDApIC8gKGZsb2F0KWNsazsKPj4gKyAgIH0K Pj4gKwo+PiArICAgZnByaW50ZihzdGRlcnIsICJjdHJbMF09JWQsIGN0clsxXT0lZCwgY3RyWzJd PSVkLCBjdHJbM109JWQsIGNsaz0lZCwgdmFsPSVkXG4iLAo+PiArICAgICAgICAgICBjdHJbMF0s IGN0clsxXSwgY3RyWzJdLCBjdHJbM10sIGNsaywgdmFsdWUpOwo+PiArCj4+ICsgICAqKHVpbnQ2 NF90ICopcmVzdWx0ID0gdmFsdWU7Cj4+ICsgICByZXR1cm4gVFJVRTsKPj4gK30KPj4gKwo+PiAg IHZvaWQKPj4gICBudjUwX2luaXRfcXVlcnlfZnVuY3Rpb25zKHN0cnVjdCBudjUwX2NvbnRleHQg Km52NTApCj4+ICAgewo+PiBkaWZmIC0tZ2l0IGEvc3JjL2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1 L252NTAvbnY1MF9zY3JlZW4uaCBiL3NyYy9nYWxsaXVtL2RyaXZlcnMvbm91dmVhdS9udjUwL252 NTBfc2NyZWVuLmgKPj4gaW5kZXggNzFhNTI0Ny4uMDQ0OTY1OSAxMDA2NDQKPj4gLS0tIGEvc3Jj L2dhbGxpdW0vZHJpdmVycy9ub3V2ZWF1L252NTAvbnY1MF9zY3JlZW4uaAo+PiArKysgYi9zcmMv Z2FsbGl1bS9kcml2ZXJzL25vdXZlYXUvbnY1MC9udjUwX3NjcmVlbi5oCj4+IEBAIC04OSw2ICs4 OSwxMiBAQCBzdHJ1Y3QgbnY1MF9zY3JlZW4gewo+PiAgICAgICAgIHN0cnVjdCBub3V2ZWF1X2Jv ICpibzsKPj4gICAgICB9IGZlbmNlOwo+Pgo+PiArICAgc3RydWN0IHsKPj4gKyAgICAgIHVpbnQz Ml90IHNlcXVlbmNlOwo+PiArICAgICAgdWludDMyX3QgcXVlcnlfdHlwZTsKPj4gKyAgICAgIHVp bnQzMl90IG51bV9hY3RpdmU7Cj4+ICsgICB9IHBtOwo+PiArCj4+ICAgICAgc3RydWN0IG5vdXZl YXVfb2JqZWN0ICpzeW5jOwo+PiAgICAgIHN0cnVjdCBub3V2ZWF1X29iamVjdCAqcXVlcnk7Cj4+ Cj4+IEBAIC0xMDgsNiArMTE0LDM1IEBAIG52NTBfc2NyZWVuKHN0cnVjdCBwaXBlX3NjcmVlbiAq c2NyZWVuKQo+PiAgICAgIHJldHVybiAoc3RydWN0IG52NTBfc2NyZWVuICopc2NyZWVuOwo+PiAg IH0KPj4KPj4gKy8qIEhhcmR3YXJlIGdsb2JhbCBwZXJmb3JtYW5jZSBjb3VudGVycy4gKi8KPj4g KyNkZWZpbmUgTlY1MF9IV19QTV9RVUVSWV9DT1VOVCAgMjQKPj4gKyNkZWZpbmUgTlY1MF9IV19Q TV9RVUVSWShpKSAgICAoUElQRV9RVUVSWV9EUklWRVJfU1BFQ0lGSUMgKyAoaSkpCj4+ICsjZGVm aW5lIE5WNTBfSFdfUE1fUVVFUllfTEFTVCAgIE5WNTBfSFdfUE1fUVVFUlkoTlY1MF9IV19QTV9R VUVSWV9DT1VOVCAtIDEpCj4+ICsjZGVmaW5lIE5WNTBfSFdfUE1fUVVFUllfR1BVX0lETEUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMAo+PiArI2RlZmluZSBOVjUwX0hXX1BNX1FVRVJZX0lB X0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKPj4gKyNkZWZpbmUgTlY1MF9IV19Q TV9RVUVSWV9JQV9XQUlUU19GT1JfRkIgICAgICAgICAgICAgICAgICAgICAyCj4+ICsjZGVmaW5l IE5WNTBfSFdfUE1fUVVFUllfVkVSVEVYX0FUVFJfQ09VTlQgICAgICAgICAgICAgICAgICAgMwo+ PiArI2RlZmluZSBOVjUwX0hXX1BNX1FVRVJZX0dFT01fVkVSVEVYX0lOX0NPVU5UICAgICAgICAg ICAgICAgIDQKPj4gKyNkZWZpbmUgTlY1MF9IV19QTV9RVUVSWV9HRU9NX1ZFUlRFWF9PVVRfQ09V TlQgICAgICAgICAgICAgICA1Cj4+ICsjZGVmaW5lIE5WNTBfSFdfUE1fUVVFUllfR0VPTV9QUklN SVRJVkVfSU5fQ09VTlQgICAgICAgICAgICAgNgo+PiArI2RlZmluZSBOVjUwX0hXX1BNX1FVRVJZ X0dFT01fUFJJTUlUSVZFX09VVF9DT1VOVCAgICAgICAgICAgIDcKPj4gKyNkZWZpbmUgTlY1MF9I V19QTV9RVUVSWV9TT19CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Cj4+ICsjZGVm aW5lIE5WNTBfSFdfUE1fUVVFUllfU0VUVVBfUFJJTUlUSVZFX0NPVU5UICAgICAgICAgICAgICAg OQo+PiArI2RlZmluZSBOVjUwX0hXX1BNX1FVRVJZX1NFVFVQX1BPSU5UX0NPVU5UICAgICAgICAg ICAgICAgICAgMTAKPj4gKyNkZWZpbmUgTlY1MF9IV19QTV9RVUVSWV9TRVRVUF9MSU5FX0NPVU5U ICAgICAgICAgICAgICAgICAgIDExCj4+ICsjZGVmaW5lIE5WNTBfSFdfUE1fUVVFUllfU0VUVVBf VFJJQU5HTEVfQ09VTlQgICAgICAgICAgICAgICAxMgo+PiArI2RlZmluZSBOVjUwX0hXX1BNX1FV RVJZX1NFVFVQX1BSSU1JVElWRV9DVUxMRURfQ09VTlQgICAgICAgMTMKPj4gKyNkZWZpbmUgTlY1 MF9IV19QTV9RVUVSWV9SQVNUX1RJTEVTX0tJTExFRF9CWV9aQ1VMTCAgICAgICAgIDE0Cj4+ICsj ZGVmaW5lIE5WNTBfSFdfUE1fUVVFUllfUkFTVF9USUxFU19JTl9DT1VOVCAgICAgICAgICAgICAg ICAxNQo+PiArI2RlZmluZSBOVjUwX0hXX1BNX1FVRVJZX1JPUF9CVVNZICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTYKPj4gKyNkZWZpbmUgTlY1MF9IV19QTV9RVUVSWV9ST1BfV0FJVFNfRk9S X0ZCICAgICAgICAgICAgICAgICAgIDE3Cj4+ICsjZGVmaW5lIE5WNTBfSFdfUE1fUVVFUllfUk9Q X1dBSVRTX0ZPUl9TSEFERVIgICAgICAgICAgICAgICAxOAo+PiArI2RlZmluZSBOVjUwX0hXX1BN X1FVRVJZX1JPUF9TQU1QTEVTX0tJTExFRF9CWV9FQVJMWVogICAgICAgMTkKPj4gKyNkZWZpbmUg TlY1MF9IV19QTV9RVUVSWV9ST1BfU0FNUExFU19LSUxMRURfQllfTEFURVogICAgICAgIDIwCj4+ ICsjZGVmaW5lIE5WNTBfSFdfUE1fUVVFUllfVEVYX0NBQ0hFX01JU1MgICAgICAgICAgICAgICAg ICAgICAyMQo+PiArI2RlZmluZSBOVjUwX0hXX1BNX1FVRVJZX1RFWF9DQUNIRV9ISVQgICAgICAg ICAgICAgICAgICAgICAgMjIKPj4gKyNkZWZpbmUgTlY1MF9IV19QTV9RVUVSWV9URVhfV0FJVFNf Rk9SX0ZCICAgICAgICAgICAgICAgICAgIDIzCj4+ICsKPj4gICBib29sZWFuIG52NTBfYmxpdHRl cl9jcmVhdGUoc3RydWN0IG52NTBfc2NyZWVuICopOwo+PiAgIHZvaWQgbnY1MF9ibGl0dGVyX2Rl c3Ryb3koc3RydWN0IG52NTBfc2NyZWVuICopOwo+Pgo+PiAtLQo+PiAyLjQuNAo+Pgo+PiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBOb3V2ZWF1IG1h aWxpbmcgbGlzdAo+PiBOb3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBodHRwOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vbm91dmVhdQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxpc3QK Tm91dmVhdUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXUK