Name: series-workflowg27gm Phase: Failed StartedAt: 2026-07-09 16:58:25 +0000 UTC FinishedAt: 2026-07-09 17:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg27gm[0] Phase: Succeeded StartedAt: 2026-07-09 16:58:25 +0000 UTC FinishedAt: 2026-07-09 17:18:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg27gm[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 16:58:25 +0000 UTC FinishedAt: 2026-07-09 17:18:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uIChlLmcuLCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycywgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKSBhbmQgYSBLVW5pdCB0ZXN0IGZvciBpdC4gSG93ZXZlciwgdGhlIG5ldyBBUEkgaXMgbm90IGN1cnJlbnRseSBjYWxsZWQgYnkgYW55IGRyaXZlciBvciBjb3JlIGtlcm5lbCBjb2RlIG91dHNpZGUgb2YgdGhlIEtVbml0IHRlc3QgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNmMWNhMTk3NjgwZjZlN2ViYmYyNDRmNzI4MmNkM2IwNDY0NWFjNTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDE3OjE1OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oIGIvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmhcbmluZGV4IGMyNDk5MTI0NTZmOTYzLi4wZWZlMmJjMWE4MTUyNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1kaXJlY3QuaFxuQEAgLTE0MSw2ICYjNDM7MTQxLDM1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkbWFfY2FwYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUsXG4gdTY0IGRtYV9kaXJlY3RfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KTtcbiB2b2lkICpkbWFfZGlyZWN0X2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXG4gXHRcdGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBhdHRycyk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4mIzQzO2ludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xuJiM0Mzt2b2lkIGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKTtcbiYjNDM7dm9pZCAqZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0IHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuJiM0MztcdFx0XHRcdFx0XHQgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbiYjNDM7XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBkbWFfZGlyZWN0X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsXG4gXHRcdGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGxvbmcgYXR0cnMpO1xuIHN0cnVjdCBwYWdlICpkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXG5pbmRleCA2YTE4MzJhNzNjYWQ4ZC4uYjEzZTVlZWJlNmQzYWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxuQEAgLTEwNiw2ICYjNDM7MTA2LDcgQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCk7XG4gdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKTtcbiBcbiB2b2lkIGRtYV9jb250aWd1b3VzX2Vhcmx5X2ZpeHVwKHBoeXNfYWRkcl90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4mIzQzO2Jvb2wgZG1hX2lzX2Zyb21fY21hKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcbiAjZWxzZSAvKiBDT05GSUdfRE1BX0NNQSAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNtYSAqZGV2X2dldF9jbWFfYXJlYShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4ge1xuQEAgLTE0NSw2ICYjNDM7MTQ2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4ge1xuIFx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuICNlbmRpZiAvKiBDT05GSUdfRE1BX0NNQSovXG4gXG4gI2lmZGVmIENPTkZJR19ETUFfREVDTEFSRV9DT0hFUkVOVFxuQEAgLTE1Niw2ICYjNDM7MTYyLDcgQEAgaW50IGRtYV9hbGxvY19mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNzaXplX3Qgc2l6ZSxcbiBpbnQgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb3JkZXIsIHZvaWQgKnZhZGRyKTtcbiBpbnQgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLCBpbnQgKnJldCk7XG4mIzQzO2Jvb2wgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSlcbkBAIC0xNjYsNiAmIzQzOzE3Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IGRtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gI2RlZmluZSBkbWFfYWxsb2NfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIHJldCkgKDApXG4gI2RlZmluZSBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChkZXYsIG9yZGVyLCB2YWRkcikgKDApXG4gI2RlZmluZSBkbWFfbW1hcF9mcm9tX2Rldl9jb2hlcmVudChkZXYsIHZtYSwgdmFkZHIsIG9yZGVyLCByZXQpICgwKVxuJiM0MzsjZGVmaW5lIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChkZXYsIHZhZGRyKSAoZmFsc2UpXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfcmVsZWFzZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2KSB7IH1cbiAjZW5kaWYgLyogQ09ORklHX0RNQV9ERUNMQVJFX0NPSEVSRU5UICovXG4gXG5AQCAtMjE2LDYgJiM0MzsyMjUsNyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHRib29sICgqcGh5c19hZGRyX29rKShzdHJ1Y3QgZGV2aWNlICosIHBoeXNfYWRkcl90LCBzaXplX3QpKTtcbiBib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSk7XG4gXG4mIzQzO2Jvb2wgZG1hX2lzX2Zyb21fcG9vbCh2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpO1xuIGludCBkbWFfZGlyZWN0X3NldF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBjcHVfc3RhcnQsXG4gXHRcdGRtYV9hZGRyX3QgZG1hX3N0YXJ0LCB1NjQgc2l6ZSk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oXG5pbmRleCBkYjhhYjI0YTU0ZjRhMy4uNGMwYzQyOGI2YjFjYjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaFxuQEAgLTIxMCw2ICYjNDM7MjEwLDIzIEBAIHZvaWQgKmRtYV92bWFwX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiB2b2lkIGRtYV92dW5tYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyKTtcbiBpbnQgZG1hX21tYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRzaXplX3Qgc2l6ZSwgc3RydWN0IHNnX3RhYmxlICpzZ3QpO1xuJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4mIzQzO2ludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuJiM0MztcdFx0XHRcdCAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xuJiM0Mzt2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpO1xuJiM0Mzt2b2lkICpkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSk7XG4mIzQzO2ludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xuJiM0Mzt2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4mIzQzO1x0XHRcdFx0c2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0IHN0YXRlKTtcbiYjNDM7dm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpO1xuJiM0MzsjZW5kaWZcbiAjZWxzZSAvKiBDT05GSUdfSEFTX0RNQSAqL1xuIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2VfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXG5AQCAtNDk2LDYgJiM0Mzs1MTMsNDUgQEAgc3RhdGljIGlubGluZSBib29sIGRtYV9uZWVkX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldilcbiB9XG4gI2VuZGlmIC8qICFDT05GSUdfSEFTX0RNQSB8fCAhQ09ORklHX0RNQV9ORUVEX1NZTkMgKi9cbiBcbiYjNDM7I2lmICFkZWZpbmVkKENPTkZJR19ETUFfTElWRVVQREFURSkgfHwgIWRlZmluZWQoQ09ORklHX0hBU19ETUEpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuJiM0MztcdFx0XHRcdFx0XHQgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuJiM0MztcdFx0XHRcdFx0XHQgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbiYjNDM7XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0cnVjdCBwYWdlICpkbWFfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0ZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBnZnBfdCBnZnApO1xuIHZvaWQgZG1hX2ZyZWVfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5AQCAtNjE4LDYgJiM0Mzs2NzQsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHQoZ2ZwIFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDApO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0ICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICBkbWFfaGFuZGxlLCAwLCBzdGF0ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0ZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwLCB1NjQgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGdmcCxcbiYjNDM7XHRcdFx0XHRcdCAgICAoZ2ZwIFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHR2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKVxuIHtcbkBAIC03NDcsNiAmIzQzOzgyNCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHQoZ2ZwIFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDApO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgZG1hX2hhbmRsZSwgMCwgc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hbV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICB1NjQgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIGNwdV9hZGRyLCBzaXplLCBkbWFfaGFuZGxlLCBzdGF0ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hbV9yZXN0b3JlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGdmcF90IGdmcCwgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwLFxuJiM0MztcdFx0XHRcdFx0ICAgICAoZ2ZwIFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0YXRlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY193YyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHRcdFx0IGRtYV9hZGRyX3QgKmRtYV9hZGRyLCBnZnBfdCBnZnApXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hZTM4Y2YxYTFmYzk5ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9raG8vYWJpL2RtYV9hbGxvYy5oXG5AQCAtMCwwICYjNDM7MSwzMiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9MSU5VWF9LSE9fQUJJX0RNQV9BTExPQ19IXG4mIzQzOyNkZWZpbmUgX0xJTlVYX0tIT19BQklfRE1BX0FMTE9DX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBET0M6IERNQSBBbGxvYyBBQklcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBoZWFkZXIgZGVmaW5lcyB0aGUgc3RydWN0dXJlcyB1c2VkIHRvIHNlcmlhbGl6ZSB0aGUgc3RhdGUgb2YgRE1BXG4mIzQzOyAqIGFsbG9jYXRpb25zLCBkb25lIGJ5IGRldmljZSBkcml2ZXIsIGFjcm9zcyBhIExpdmUgVXBkYXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IERNQSBhbGxvY2F0aW9ucyBkb25lIHRocm91Z2ggZG1hLWRpcmVjdCB0aGF0IGFyZSBjb250aWd1b3VzIGFuZFxuJiM0MzsgKiBhbGxvY2F0ZWQgdXNpbmcgYWxsb2NfcGFnZSBhcmUgc3VwcG9ydGVkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgZG1hX2FsbG9jX3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgb2YgYSBzaW5nbGUgRE1BIGFsbG9jYXRpb25cbiYjNDM7ICogQHBhZ2VfcGh5czogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcHJlc2VydmVkIHBhZ2VzXG4mIzQzOyAqIEBzaXplOiBTaXplIG9mIHRoZSBETUEgYWxsb2NhdGlvblxuJiM0MzsgKiBAYXR0cnM6IERNQSBhbGxvY2F0aW9uIGF0dHJpYnV0ZXNcbiYjNDM7ICogQGZvcmNlX2RlY3J5cHRlZDogV2hldGhlciB0aGUgbWVtb3J5IGlzIGZvcmNlIGRlY3J5cHRlZCBpbiBwcmV2aW91cyBrZXJuZWxcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBkbWFfYWxsb2Nfc2VyIHtcbiYjNDM7XHR1NjQgcGFnZV9waHlzO1xuJiM0MztcdHU2NCBzaXplO1xuJiM0MztcdHU2NCBhdHRycztcbiYjNDM7XHR1OCBmb3JjZV9kZWNyeXB0ZWQ7XG4mIzQzO1x0dTggcGFkZGluZ1s3XTtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfS0hPX0FCSV9ETUFfQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvS2NvbmZpZyBiL2tlcm5lbC9kbWEvS2NvbmZpZ1xuaW5kZXggYmZlZjIxYjRhOWFlN2QuLjQ4YmM3NGFmNTUxYTMxIDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL0tjb25maWdcbkBAIC0yNjUsMyAmIzQzOzI2NSwxNSBAQCBjb25maWcgRE1BX01BUF9CRU5DSE1BUktcbiBcdCAgcGVyZm9ybWFuY2Ugb2YgZG1hXyh1biltYXBfcGFnZS5cbiBcbiBcdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RtYS9kbWFfbWFwX2JlbmNobWFyay5jXG4mIzQzO1xuJiM0Mztjb25maWcgRE1BX0xJVkVVUERBVEVcbiYjNDM7XHRib29sIFwmIzM0O0VuYWJsZSBwcmVzZXJ2YXRpb24gb2YgRE1BIGRpcmVjdCBhbGxvY2F0aW9uc1wmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gTElWRVVQREFURVxuJiM0MztcbiYjNDM7Y29uZmlnIERNQV9MSVZFVVBEQVRFX0tVTklUX1RFU1RcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0IGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBLVU5JVFxuJiM0MztcdGRlcGVuZHMgb24gRE1BX0xJVkVVUERBVEVcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGJ1aWxkcyB0aGUgS1VuaXQgdGVzdHMgZm9yIHRoZSBETUEgZGlyZWN0IGxpdmV1cGRhdGVcbiYjNDM7XHQgIHByZXNlcnZhdGlvbiBhbmQgcmVzdG9yYXRpb24gbG9naWMuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9NYWtlZmlsZSBiL2tlcm5lbC9kbWEvTWFrZWZpbGVcbmluZGV4IDY5NzcwMzM0NDRhMzc1Li4wMzcwMzU0MmVlNzliYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvTWFrZWZpbGVcbkBAIC0xMCwzICYjNDM7MTAsNCBAQCBvYmotJChDT05GSUdfU1dJT1RMQilcdFx0XHQmIzQzOz0gc3dpb3RsYi5vXG4gb2JqLSQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKVx0XHQmIzQzOz0gcG9vbC5vXG4gb2JqLSQoQ09ORklHX01NVSlcdFx0XHQmIzQzOz0gcmVtYXAub1xuIG9iai0kKENPTkZJR19ETUFfTUFQX0JFTkNITUFSSylcdFx0JiM0Mzs9IG1hcF9iZW5jaG1hcmsub1xuJiM0MztvYmotJChDT05GSUdfRE1BX0xJVkVVUERBVEVfS1VOSVRfVEVTVClcdCYjNDM7PSBkaXJlY3RfdGVzdC5vXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb2hlcmVudC5jIGIva2VybmVsL2RtYS9jb2hlcmVudC5jXG5pbmRleCBiY2RjMGY3NmQyZTgwYS4uNzZjYmUxMWUxZjkwZTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL2NvaGVyZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvY29oZXJlbnQuY1xuQEAgLTIzMSw2ICYjNDM7MjMxLDE3IEBAIGludCBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvcmRlciwgdm9pZCAqdmFkZHIpXG4gXHRyZXR1cm4gX19kbWFfcmVsZWFzZV9mcm9tX2NvaGVyZW50KG1lbSwgb3JkZXIsIHZhZGRyKTtcbiB9XG4gXG4mIzQzO2Jvb2wgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2X2dldF9jb2hlcmVudF9tZW1vcnkoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbSBcdTAwMjZcdTAwMjYgdmFkZHIgXHUwMDNlPSBtZW0tXHUwMDNldmlydF9iYXNlIFx1MDAyNlx1MDAyNiB2YWRkciBcdTAwM2NcbiYjNDM7XHRcdCAgIChtZW0tXHUwMDNldmlydF9iYXNlICYjNDM7ICgoZG1hX2FkZHJfdCltZW0tXHUwMDNlc2l6ZSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IF9fZG1hX21tYXBfZnJvbV9jb2hlcmVudChzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLCBpbnQgKnJldClcbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuaW5kZXggMDNmNTJiZDE3MTIwNjIuLjZkMGNmOWM3NTI4Y2I1IDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jXG5AQCAtMzcsNiAmIzQzOzM3LDggQEBcbiBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2NtYTogXCYjMzQ7IGZtdFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbkBAIC0xMzAsNiAmIzQzOzEzMiwzMSBAQCBzdHJ1Y3QgY21hICpkZXZfZ2V0X2NtYV9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2dldF9jbWFfYXJlYSk7XG4gXG4mIzQzO3N0cnVjdCBkbWFfY21hX2NoZWNrX2RhdGEge1xuJiM0MztcdHBoeXNfYWRkcl90IHN0YXJ0O1xuJiM0MztcdHBoeXNfYWRkcl90IGVuZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZG1hX2NtYV9jaGVja19hcmVhKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfY21hX2NoZWNrX2RhdGEgKmNoayA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChjbWFfaW50ZXJzZWN0cyhjbWEsIGNoay1cdTAwM2VzdGFydCwgY2hrLVx1MDAzZWVuZCkpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2NtYV9jaGVja19kYXRhIGNoayA9IHtcbiYjNDM7XHRcdC5zdGFydCA9IHBoeXMsXG4mIzQzO1x0XHQuZW5kID0gcGh5cyAmIzQzOyBzaXplIC0gMSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY21hX2Zvcl9lYWNoX2FyZWEoZG1hX2NtYV9jaGVja19hcmVhLCBcdTAwMjZjaGspICE9IDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChkbWFfaXNfZnJvbV9jbWEpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0RNQV9OVU1BX0NNQVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY21hICpkbWFfY29udGlndW91c19udW1hX2FyZWFbTUFYX05VTU5PREVTXTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2RpcmVjdC5jIGIva2VybmVsL2RtYS9kaXJlY3QuY1xuaW5kZXggZWM4ODdmNDQzNzQxODMuLjExN2ViYWU4YTgxZmExIDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9kaXJlY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9kaXJlY3QuY1xuQEAgLTYsNiAmIzQzOzYsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2UgLyogZm9yIG1heF9wZm4gKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcC1vcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcdTAwM2VcbkBAIC0zMDcsNiAmIzQzOzMwOSwxOTMgQEAgdm9pZCAqZG1hX2RpcmVjdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4mIzQzO2ludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2FsbG9jX3NlciAqc2VyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG4mIzQzO1x0aWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cyhkZXYsIGRtYV9oYW5kbGUpLCBzaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX3N3aW90bGJfZm9yX2FsbG9jKGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGlmICgoYXR0cnMgXHUwMDI2IERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfRE1BX0FMTE9DKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWRldl9pc19kbWFfY29oZXJlbnQoZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9HTE9CQUxfUE9PTCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGRtYV9pc19mcm9tX3Bvb2woY3B1X2FkZHIsIHNpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRzZXIgPSBraG9fYWxsb2NfcHJlc2VydmUoc2l6ZW9mKCpzZXIpKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHNlcikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihzZXIpO1xuJiM0MztcbiYjNDM7XHRzZXItXHUwMDNlcGFnZV9waHlzID0gZG1hX3RvX3BoeXMoZGV2LCBkbWFfaGFuZGxlKTtcbiYjNDM7XHRzZXItXHUwMDNlZm9yY2VfZGVjcnlwdGVkID0gZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldik7XG4mIzQzO1x0c2VyLVx1MDAzZXNpemUgPSBzaXplO1xuJiM0MztcdHNlci1cdTAwM2VhdHRycyA9IChhdHRycyBcdTAwMjYgfkRNQV9BVFRSX05PX1dBUk4pO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBraG9fcHJlc2VydmVfcGFnZXMocGh5c190b19wYWdlKHNlci1cdTAwM2VwYWdlX3BoeXMpLFxuJiM0MztcdFx0XHRcdCAxIFx1MDAzY1x1MDAzYyBnZXRfb3JkZXIoc2l6ZSkpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGtob191bnByZXNlcnZlX2ZyZWUoc2VyKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqc3RhdGUgPSB2aXJ0X3RvX3BoeXMoc2VyKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBkbWFfZGlyZWN0X3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYWxsb2Nfc2VyICpzZXI7XG4mIzQzO1xuJiM0MztcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2VyID0gcGh5c190b192aXJ0KHN0YXRlKTtcbiYjNDM7XHRraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwaHlzX3RvX3BhZ2Uoc2VyLVx1MDAzZXBhZ2VfcGh5cyksXG4mIzQzO1x0XHRcdCAgICAgMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNlci1cdTAwM2VzaXplKSk7XG4mIzQzO1x0a2hvX3VucHJlc2VydmVfZnJlZShzZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkICpkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuJiM0MztcdFx0XHRcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXG4mIzQzO1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdGJvb2wgcmVtYXAgPSBmYWxzZSwgc2V0X3VuY2FjaGVkID0gZmFsc2U7XG4mIzQzO1x0c3RydWN0IGRtYV9hbGxvY19zZXIgKnNlciA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0dm9pZCAqY3B1X2FkZHIgPSBOVUxMO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWtob19pc19lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0c2VyID0gcGh5c190b192aXJ0KHN0YXRlKTtcbiYjNDM7XHRwYWdlID0gcGh5c190b19wYWdlKHNlci1cdTAwM2VwYWdlX3BoeXMpO1xuJiM0MztcbiYjNDM7XHRzaXplID0gUEFHRV9BTElHTihzaXplKTtcbiYjNDM7XHRpZiAoc2l6ZSAhPSBzZXItXHUwMDNlc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRXQVJOX09OX09OQ0UoKGF0dHJzIFx1MDAyNiB+RE1BX0FUVFJfTk9fV0FSTikgIT0gc2VyLVx1MDAzZWF0dHJzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYW5ub3QgZnJlZSB0aGUgcmVzdG9yZWQgcGFnZXMgb24gZXJyb3IgaGVyZSBhcyB0aGVzZSBtaWdodCBiZSBpbiB1c2VcbiYjNDM7XHQgKiBieSBhIGRldmljZSB3aXRoIGRpcmVjdCBhbGxvY2F0aW9uIGluIHRoZSBwcmV2aW91cyBrZXJuZWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX3N3aW90bGJfZm9yX2FsbG9jKGRldikpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKChhdHRycyBcdTAwMjYgRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpIHtcbiYjNDM7XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19ETUFfQUxMT0MpKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX0dMT0JBTF9QT09MKSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0c2V0X3VuY2FjaGVkID0gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfRE1BX1NFVF9VTkNBQ0hFRCk7XG4mIzQzO1x0XHRyZW1hcCA9IElTX0VOQUJMRUQoQ09ORklHX0RNQV9ESVJFQ1RfUkVNQVApO1xuJiM0MztcdFx0aWYgKCFzZXRfdW5jYWNoZWQgXHUwMDI2XHUwMDI2ICFyZW1hcClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHtcbiYjNDM7XHRcdHJlbWFwID0gdHJ1ZTtcbiYjNDM7XHRcdHNldF91bmNhY2hlZCA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZW1hcHBpbmcgd2lsbCBiZSBibG9ja2luZyBzbyByZXR1cm4gZXJyb3IuIFRoZSBwcmVzZXJ2ZWQgbWVtb3J5XG4mIzQzO1x0ICogbWlnaHQgYmUgYWxyZWFkeSBkZWNyeXB0ZWQgaW4gdGhlIHByZXZpb3VzIGtlcm5lbCwgYnV0IHRoZSBkZWNyeXB0aW9uXG4mIzQzO1x0ICogY2FsbCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBub24tYmxvY2tpbmcgc28gcmV0dXJuIGVycm9yIGFsd2F5cyBpZlxuJiM0MztcdCAqIGRlY3J5cHRpb24gaXMgcmVxdWlyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKChyZW1hcCB8fCBmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGRtYV9kaXJlY3RfdXNlX3Bvb2woZGV2LCBnZnApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5jcnlwdGlvbiBzY2hlbWUgY2hhbmdlZCBiZXR3ZWVuIHR3byBrZXJuZWxzIGFuZCB0aGlzIG1pZ2h0IGNhdXNlXG4mIzQzO1x0ICogaXNzdWVzIGlmIGRldmljZS9kcml2ZXIgaXMgbm90IGhhbmRsaW5nIGl0IHByb3Blcmx5LlxuJiM0MztcdCAqL1xuJiM0MztcdFdBUk5fT05fT05DRShzZXItXHUwMDNlZm9yY2VfZGVjcnlwdGVkICE9IGZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBhcmNoX2RtYV9wcmVwX2NvaGVyZW50KCkgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGFueSBjYWNoZSBsaW5lcyBmcm9tXG4mIzQzO1x0ICogdGhlIHByZXZpb3VzIGtlcm5lbCwgaWYgdGhlIGRldmljZSB3YXMgY29oZXJlbnQgcHJldmlvdXNseSBvciBjYWNoZWRcbiYjNDM7XHQgKiBtYXBwaW5nIGluIHRoaXMga2VybmVsIGR1cmluZyBpbml0IGFyZSBub3QgcHJvYmxlbWF0aWMgZm9yXG4mIzQzO1x0ICogbm9uLWNvaGVyZW50IGFsbG9jYXRpb25zLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZW1hcCkge1xuJiM0MztcdFx0cGdwcm90X3QgcHJvdCA9IGRtYV9wZ3Byb3QoZGV2LCBQQUdFX0tFUk5FTCwgYXR0cnMpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSlcbiYjNDM7XHRcdFx0cHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQocHJvdCk7XG4mIzQzO1xuJiM0MztcdFx0YXJjaF9kbWFfcHJlcF9jb2hlcmVudChwYWdlLCBzaXplKTtcbiYjNDM7XG4mIzQzO1x0XHRjcHVfYWRkciA9IGRtYV9jb21tb25fY29udGlndW91c19yZW1hcChwYWdlLCBzaXplLCBwcm90LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiYjNDM7XHRcdGlmICghY3B1X2FkZHIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRjcHVfYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTtcbiYjNDM7XHRcdGlmIChkbWFfc2V0X2RlY3J5cHRlZChkZXYsIGNwdV9hZGRyLCBzaXplKSkge1xuJiM0MztcdFx0XHRjcHVfYWRkciA9IE5VTEw7XG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNldF91bmNhY2hlZCkge1xuJiM0MztcdFx0YXJjaF9kbWFfcHJlcF9jb2hlcmVudChwYWdlLCBzaXplKTtcbiYjNDM7XHRcdGNwdV9hZGRyID0gYXJjaF9kbWFfc2V0X3VuY2FjaGVkKGNwdV9hZGRyLCBzaXplKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoY3B1X2FkZHIpKSB7XG4mIzQzO1x0XHRcdGNwdV9hZGRyID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqZG1hX2hhbmRsZSA9IHBoeXNfdG9fZG1hX2RpcmVjdChkZXYsIHNlci1cdTAwM2VwYWdlX3BoeXMpO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdFdBUk5fT04oIWtob19yZXN0b3JlX3BhZ2VzKHNlci1cdTAwM2VwYWdlX3BoeXMsXG4mIzQzO1x0XHRcdFx0ICAgMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNlci1cdTAwM2VzaXplKSkpO1xuJiM0MztcdGtob19yZXN0b3JlX2ZyZWUoc2VyKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBETUEgZGlyZWN0IEFQSSBleHBlY3RzIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMsIHNvIHNldCByZWZjb3VudCBvZlxuJiM0MztcdCAqIHRhaWwgcGFnZXMgdG8gemVyby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAoMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNpemUpKSAtIDE7IGkgXHUwMDNlIDA7IC0taSlcbiYjNDM7XHRcdHNldF9wYWdlX2NvdW50KHBhZ2UgJiM0MzsgaSwgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjcHVfYWRkcjtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBkbWFfZGlyZWN0X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0dm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGxvbmcgYXR0cnMpXG4ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYyBiL2tlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODQwM2VjNDc4MDdlOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jXG5AQCAtMCwwICYjNDM7MSwyMDggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogS1VuaXQgdGVzdCBmb3IgRE1BIGFsbG9jYXRpb24gbGl2ZSB1cGRhdGUgcHJlc2VydmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrdW5pdC9zdGF0aWNfc3R1Yi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXAtb3BzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtZGlyZWN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHNpemVfdCBkbWFfdGVzdF9zaXplc1tdID0ge1xuJiM0MztcdDEyOCxcbiYjNDM7XHRQQUdFX1NJWkUsXG4mIzQzO1x0MiAqIFBBR0VfU0laRSxcbiYjNDM7XHQzICogUEFHRV9TSVpFLFxuJiM0MztcdDggKiBQQUdFX1NJWkUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkbWFfc2l6ZV9kZXNjKGNvbnN0IHNpemVfdCAqc2l6ZSwgY2hhciAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHNucHJpbnRmKGRlc2MsIEtVTklUX1BBUkFNX0RFU0NfU0laRSwgXCYjMzQ7c2l6ZT0lenVcJiMzNDssICpzaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7S1VOSVRfQVJSQVlfUEFSQU0oZG1hX3NpemUsIGRtYV90ZXN0X3NpemVzLCBkbWFfc2l6ZV9kZXNjKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbW9ja19raG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwaHlzX3RvX3BhZ2UocGh5cyk7XG4mIzQzO1xuJiM0MztcdGlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsIG5yX3BhZ2VzKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwYWdlLCBucl9wYWdlcyk7XG4mIzQzO1x0cmV0dXJuIHBhZ2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZm9saW8gKm1vY2tfa2hvX3Jlc3RvcmVfZm9saW8ocGh5c19hZGRyX3QgcGh5cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBoeXNfdG9fcGFnZShwaHlzKSk7XG4mIzQzO1xuJiM0MztcdGlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsICgxIFx1MDAzY1x1MDAzYyBmb2xpb19vcmRlcihmb2xpbykpKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRraG9fdW5wcmVzZXJ2ZV9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0cmV0dXJuIGZvbGlvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24oc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgYm9vbCBjb2hlcmVudCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGJvb2wgYXRvbWljLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNpemUpO1xuJiM0MztcdGRtYV9hZGRyX3QgaGFuZGxlMSwgaGFuZGxlMjtcbiYjNDM7XHRpbnQgcmV0LCBleHBlY3RlZF9yZXQgPSAwO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgZGV2ID0gezB9O1xuJiM0MztcdGdmcF90IGdmcCA9IEdGUF9LRVJORUw7XG4mIzQzO1x0dm9pZCAqYWRkcjEsICphZGRyMjtcbiYjNDM7XHR1NjQgc3RhdGU7XG4mIzQzO1xuJiM0MztcdGt1bml0X2FjdGl2YXRlX3N0YXRpY19zdHViKHRlc3QsIGtob19yZXN0b3JlX3BhZ2VzLCBtb2NrX2tob19yZXN0b3JlX3BhZ2VzKTtcbiYjNDM7XHRrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9mb2xpbywgbW9ja19raG9fcmVzdG9yZV9mb2xpbyk7XG4mIzQzO1xuJiM0MztcdGRldmljZV9pbml0aWFsaXplKFx1MDAyNmRldik7XG4mIzQzO1x0ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDY0KTtcbiYjNDM7XHRkZXYuZG1hX21hc2sgPSBcdTAwMjZkZXYuY29oZXJlbnRfZG1hX21hc2s7XG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFKSB8fCBcXFxuJiM0MzsgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVSkgfHwgXFxcbiYjNDM7ICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFVfQUxMKVxuJiM0MztcdGRldi5kbWFfY29oZXJlbnQgPSBjb2hlcmVudDtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztcdGlmIChhdG9taWMpXG4mIzQzO1x0XHRnZnAgPSBHRlBfQVRPTUlDO1xuJiM0MztcbiYjNDM7XHRhZGRyMSA9IGRtYV9hbGxvY19jb2hlcmVudChcdTAwMjZkZXYsIHNpemUsIFx1MDAyNmhhbmRsZTEsIGdmcCk7XG4mIzQzO1x0aWYgKCFhZGRyMSkge1xuJiM0MztcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtETUEgYWxsb2NhdGlvbiBmYWlsZWQgKHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24pXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgXHUwMDI2XHUwMDI2IGRtYV9pc19mcm9tX3Bvb2woYWRkcjEsIHNpemUpKSB7XG4mIzQzO1x0XHRleHBlY3RlZF9yZXQgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGt1bml0X2luZm8odGVzdCwgXCYjMzQ7RE1BIGFsbG9jYXRpb24gdXNpbmcgcG9vbCwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQXCYjMzQ7KTtcbiYjNDM7XHR9IGVsc2UgaWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cyhcdTAwMjZkZXYsIGhhbmRsZTEpLCBzaXplKSkge1xuJiM0MztcdFx0ZXhwZWN0ZWRfcmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRrdW5pdF9pbmZvKHRlc3QsIFwmIzM0O0RNQSBhbGxvY2F0aW9uIHVzaW5nIENNQSwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKFx1MDAyNmRldiwgYWRkcjEsIHNpemUsIGhhbmRsZTEsIFx1MDAyNnN0YXRlKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCBleHBlY3RlZF9yZXQpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWV4cGVjdGVkX3JldCkge1xuJiM0MztcdFx0S1VOSVRfRVhQRUNUX1RSVUVfTVNHKHRlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICAga2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKGRtYV90b19waHlzKFx1MDAyNmRldiwgaGFuZGxlMSksIG5yX3BhZ2VzKSxcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDtBbGxvY2F0ZWQgYmxvY2sgbm90IHRyYWNrZWQgaW4gS0hPXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRhZGRyMiA9IGRtYV9yZXN0b3JlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBzaXplLCBcdTAwMjZoYW5kbGUyLCBnZnAsIHN0YXRlKTtcbiYjNDM7XHRcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBhZGRyMik7XG4mIzQzO1xuJiM0MztcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGhhbmRsZTEsIGhhbmRsZTIpO1xuJiM0MztcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBhZGRyMiwgaGFuZGxlMik7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRkFMU0VfTVNHKHRlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGtob190ZXN0X3BhZ2VzX3ByZXNlcnZlZChkbWFfdG9fcGh5cyhcdTAwMjZkZXYsIGhhbmRsZTEpLCBucl9wYWdlcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0FsbG9jYXRlZCBibG9jayBzdGlsbCB0cmFja2VkIGFmdGVyIGZyZWVcJiMzNDspO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZkZXYsIHNpemUsIGFkZHIxLCBoYW5kbGUxKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LVx1MDAzZXBhcmFtX3ZhbHVlO1xuJiM0MztcbiYjNDM7XHR0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24odGVzdCwgdHJ1ZSwgZmFsc2UsICpzaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LVx1MDAzZXBhcmFtX3ZhbHVlO1xuJiM0MztcbiYjNDM7XHR0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24odGVzdCwgZmFsc2UsIGZhbHNlLCAqc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudF9hdG9taWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIHRydWUsIHRydWUsICpzaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudF9hdG9taWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIGZhbHNlLCB0cnVlLCAqc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZG1hbV9wcmVzZXJ2YXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0ZG1hX2FkZHJfdCBoYW5kbGUsIG5vbl9kbWFtX2hhbmRsZTtcbiYjNDM7XHR2b2lkICphZGRyLCAqbm9uX2RtYW1fYWRkcjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlIGRldiA9IHswfTtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IDEyODtcbiYjNDM7XHR1NjQgc3RhdGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0a3VuaXRfYWN0aXZhdGVfc3RhdGljX3N0dWIodGVzdCwga2hvX3Jlc3RvcmVfcGFnZXMsIG1vY2tfa2hvX3Jlc3RvcmVfcGFnZXMpO1xuJiM0MztcdGt1bml0X2FjdGl2YXRlX3N0YXRpY19zdHViKHRlc3QsIGtob19yZXN0b3JlX2ZvbGlvLCBtb2NrX2tob19yZXN0b3JlX2ZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2ZGV2KTtcbiYjNDM7XHRkZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soNjQpO1xuJiM0MztcdGRldi5kbWFfbWFzayA9IFx1MDAyNmRldi5jb2hlcmVudF9kbWFfbWFzaztcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9ERVZJQ0UpIHx8IFxcXG4mIzQzOyAgICBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19TWU5DX0RNQV9GT1JfQ1BVKSB8fCBcXFxuJiM0MzsgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTEwpXG4mIzQzO1x0ZGV2LmRtYV9jb2hlcmVudCA9IHRydWU7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRub25fZG1hbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNmRldiwgc2l6ZSwgXHUwMDI2bm9uX2RtYW1faGFuZGxlLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIW5vbl9kbWFtX2FkZHIpIHtcbiYjNDM7XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7RE1BIGFsbG9jYXRpb24gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihcdTAwMjZkZXYsIG5vbl9kbWFtX2FkZHIsIHNpemUsIG5vbl9kbWFtX2hhbmRsZSwgXHUwMDI2c3RhdGUpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUV9NU0codGVzdCwgcmV0LCAtRUlOVkFMLCBcJiMzNDtQcmVzZXJ2aW5nIG5vbi1kZXZyZXMgYWxsb2NhdGlvbiBzaG91bGQgZmFpbFwmIzM0Oyk7XG4mIzQzO1x0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBub25fZG1hbV9hZGRyLCBub25fZG1hbV9oYW5kbGUpO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gZG1hbV9hbGxvY19jb2hlcmVudChcdTAwMjZkZXYsIHNpemUsIFx1MDAyNmhhbmRsZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFhZGRyKSB7XG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O0RNQSBhbGxvY2F0aW9uIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBhZGRyLCBzaXplLCBoYW5kbGUsIFx1MDAyNnN0YXRlKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHJldCwgMCwgXCYjMzQ7RmFpbGVkIHRvIHByZXNlcnZlIGRtYW0gYWxsb2NhdGlvblwmIzM0Oyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwga2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKGRtYV90b19waHlzKFx1MDAyNmRldiwgaGFuZGxlKSwgMSkpO1xuJiM0MztcbiYjNDM7XHRkbWFtX3VucHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihcdTAwMjZkZXYsIGFkZHIsIHNpemUsIGhhbmRsZSwgc3RhdGUpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoXHUwMDI2ZGV2LCBoYW5kbGUpLCAxKSk7XG4mIzQzO1xuJiM0MztcdGRtYW1fZnJlZV9jb2hlcmVudChcdTAwMjZkZXYsIHNpemUsIGFkZHIsIGhhbmRsZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkbWFfZGlyZWN0X3Rlc3RfY2FzZXNbXSA9IHtcbiYjNDM7XHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudCwgZG1hX3NpemVfZ2VuX3BhcmFtcyksXG4mIzQzO1x0S1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2RtYV9kaXJlY3Rfbm9uX2NvaGVyZW50LCBkbWFfc2l6ZV9nZW5fcGFyYW1zKSxcbiYjNDM7XHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudF9hdG9taWMsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxuJiM0MztcdEtVTklUX0NBU0VfUEFSQU0odGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudF9hdG9taWMsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxuJiM0MztcdEtVTklUX0NBU0UodGVzdF9kbWFtX3ByZXNlcnZhdGlvbiksXG4mIzQzO1x0e31cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgZG1hX2RpcmVjdF90ZXN0X3N1aXRlID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7ZG1hX2RpcmVjdF9saXZldXBkYXRlXCYjMzQ7LFxuJiM0MztcdC50ZXN0X2Nhc2VzID0gZG1hX2RpcmVjdF90ZXN0X2Nhc2VzLFxuJiM0Mzt9O1xuJiM0MztrdW5pdF90ZXN0X3N1aXRlKGRtYV9kaXJlY3RfdGVzdF9zdWl0ZSk7XG4mIzQzO1xuJiM0MztNT0RVTEVfSU1QT1JUX05TKFwmIzM0O0VYUE9SVEVEX0ZPUl9LVU5JVF9URVNUSU5HXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0tVbml0IHRlc3QgZm9yIERNQSBkaXJlY3QgbGl2ZSB1cGRhdGUgcHJlc2VydmF0aW9uXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL21hcHBpbmcuYyBiL2tlcm5lbC9kbWEvbWFwcGluZy5jXG5pbmRleCAyM2VkOGViOTIzM2U1NS4uYWVjMTIyMmFiNWFlYjEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL21hcHBpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9tYXBwaW5nLmNcbkBAIC0xMiw2ICYjNDM7MTIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUtZG1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbXNhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMzUsMTIgJiM0MzszNywyNSBAQCBzdHJ1Y3QgZG1hX2RldnJlcyB7XG4gXHR2b2lkXHRcdCp2YWRkcjtcbiBcdGRtYV9hZGRyX3RcdGRtYV9oYW5kbGU7XG4gXHR1bnNpZ25lZCBsb25nXHRhdHRycztcbiYjNDM7I2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxuJiM0MztcdGJvb2wgaXNfcHJlc2VydmVkO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGRtYW1fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcbiB7XG4gXHRzdHJ1Y3QgZG1hX2RldnJlcyAqdGhpcyA9IHJlcztcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxuJiM0MztcdC8qXG4mIzQzO1x0ICogRnJlZWluZyB0aGUgcHJlc2VydmVkIG1lbW9yeSBpcyBkYW5nZXJvdXMgYXMgaXQgY2FuIGNhdXNlIFVBRiBpbiB0aGVcbiYjNDM7XHQgKiBjdXJyZW50IG9yIG5leHQga2VybmVsIGlmIHRoZSBtZW1vcnkgaXMgc3RpbGwgYmVpbmcgdXNlZCBieSB0aGVcbiYjNDM7XHQgKiBkZXZpY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFdBUk5fT04odGhpcy1cdTAwM2Vpc19wcmVzZXJ2ZWQpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRkbWFfZnJlZV9hdHRycyhkZXYsIHRoaXMtXHUwMDNlc2l6ZSwgdGhpcy1cdTAwM2V2YWRkciwgdGhpcy1cdTAwM2VkbWFfaGFuZGxlLFxuIFx0XHRcdHRoaXMtXHUwMDNlYXR0cnMpO1xuIH1cbkBAIC02MjgsNiAmIzQzOzY0MywxMjMgQEAgdTY0IGRtYV9nZXRfcmVxdWlyZWRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9nZXRfcmVxdWlyZWRfbWFzayk7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcbiYjNDM7aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4mIzQzO1x0XHRcdFx0ICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChkZXYsIGNwdV9hZGRyKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRtYV9hbGxvY19kaXJlY3QoZGV2LCBvcHMpKVxuJiM0MztcdFx0cmV0dXJuIGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIGNwdV9hZGRyLCBzaXplLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBkbWFfaGFuZGxlLCBhdHRycyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyk7XG4mIzQzO1xuJiM0Mzt2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChkbWFfYWxsb2NfZGlyZWN0KGRldiwgb3BzKSlcbiYjNDM7XHRcdGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKGRldiwgc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbik7XG4mIzQzO1xuJiM0Mzt2b2lkICpkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTtcbiYjNDM7XHR2b2lkICpjcHVfYWRkciA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFdBUk5fT05fT05DRSghZGV2LVx1MDAzZWNvaGVyZW50X2RtYV9tYXNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRtYV9hbGxvY19kaXJlY3QoZGV2LCBvcHMpKVxuJiM0MztcdFx0Y3B1X2FkZHIgPSBkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihkZXYsIHNpemUsIGRtYV9oYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IGdmcCwgYXR0cnMsIHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0ZGVidWdfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgKmRtYV9oYW5kbGUsIGNwdV9hZGRyLCBhdHRycyk7XG4mIzQzO1x0cmV0dXJuIGNwdV9hZGRyO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyk7XG4mIzQzO1xuJiM0MztpbnQgZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4mIzQzO1x0XHRcdFx0ICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9kZXZyZXMgbWF0Y2hfZGF0YSA9IHsgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUgfTtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2RldnJlcyAqZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZHIgPSBkZXZyZXNfZmluZChkZXYsIGRtYW1fcmVsZWFzZSwgZG1hbV9tYXRjaCwgXHUwMDI2bWF0Y2hfZGF0YSk7XG4mIzQzO1x0aWYgKCFkcilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoZHItXHUwMDNlaXNfcHJlc2VydmVkKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsIGRtYV9oYW5kbGUsIGF0dHJzLCBzdGF0ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGRyLVx1MDAzZWlzX3ByZXNlcnZlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMpO1xuJiM0MztcbiYjNDM7dm9pZCBkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuJiM0MztcdFx0XHRcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfZGV2cmVzIG1hdGNoX2RhdGEgPSB7IHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlIH07XG4mIzQzO1x0c3RydWN0IGRtYV9kZXZyZXMgKmRyO1xuJiM0MztcbiYjNDM7XHRkciA9IGRldnJlc19maW5kKGRldiwgZG1hbV9yZWxlYXNlLCBkbWFtX21hdGNoLCBcdTAwMjZtYXRjaF9kYXRhKTtcbiYjNDM7XHRpZiAoIWRyKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRyLVx1MDAzZWlzX3ByZXNlcnZlZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTtcbiYjNDM7XHRkci1cdTAwM2Vpc19wcmVzZXJ2ZWQgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKTtcbiYjNDM7XG4mIzQzO3ZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9kZXZyZXMgKmRyO1xuJiM0MztcdHZvaWQgKnZhZGRyO1xuJiM0MztcbiYjNDM7XHRkciA9IGRldnJlc19hbGxvYyhkbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xuJiM0MztcdGlmICghZHIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0dmFkZHIgPSBkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwLCBhdHRycywgc3RhdGUpO1xuJiM0MztcdGlmICghdmFkZHIpIHtcbiYjNDM7XHRcdGRldnJlc19mcmVlKGRyKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZHItXHUwMDNldmFkZHIgPSB2YWRkcjtcbiYjNDM7XHRkci1cdTAwM2VkbWFfaGFuZGxlID0gKmRtYV9oYW5kbGU7XG4mIzQzO1x0ZHItXHUwMDNlc2l6ZSA9IHNpemU7XG4mIzQzO1x0ZHItXHUwMDNlYXR0cnMgPSBhdHRycztcbiYjNDM7XG4mIzQzO1x0ZGV2cmVzX2FkZChkZXYsIGRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhZGRyO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCAqZG1hX2FsbG9jX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXG4gXHRcdGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgYXR0cnMpXG4ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvcG9vbC5jIGIva2VybmVsL2RtYS9wb29sLmNcbmluZGV4IDJiMmZiYjcwOTI0MjlhLi43ODQ5NjU2ODk3M2ZlYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvcG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL3Bvb2wuY1xuQEAgLTMsNiAmIzQzOzMsOSBAQFxuICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTHRkLlxuICAqIENvcHlyaWdodCAoQykgMjAyMCBHb29nbGUgTExDXG4gICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXHUwMDNlXG5AQCAtMzA3LDMgJiM0MzszMTAsMTcgQEAgYm9vbCBkbWFfZnJlZV9mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpXG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuJiM0MztcbiYjNDM7Ym9vbCBkbWFfaXNfZnJvbV9wb29sKHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnZW5fcG9vbCAqcG9vbCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgocG9vbCA9IGRtYV9ndWVzc19wb29sKHBvb2wsIDApKSkge1xuJiM0MztcdFx0aWYgKCFnZW5fcG9vbF9oYXNfYWRkcihwb29sLCAodW5zaWduZWQgbG9uZylzdGFydCwgc2l6ZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChkbWFfaXNfZnJvbV9wb29sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBmb3IgRE1BIGRpcmVjdCBsaXZldXBkYXRlIHByZXNlcnZhdGlvbiAoZS5nLiwgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMsIGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbikgYW5kIGEgS1VuaXQgdGVzdCBmb3IgaXQuIEhvd2V2ZXIsIHRoZSBuZXcgQVBJIGlzIG5vdCBjdXJyZW50bHkgY2FsbGVkIGJ5IGFueSBkcml2ZXIgb3IgY29yZSBrZXJuZWwgY29kZSBvdXRzaWRlIG9mIHRoZSBLVW5pdCB0ZXN0IGl0c2VsZi4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmMWNhMTk3NjgwZjZlN2ViYmYyNDRmNzI4MmNkM2IwNDY0NWFjNTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCA5IDE3OjE1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmggYi9pbmNsdWRlL2xpbnV4L2RtYS1kaXJlY3QuaAppbmRleCBjMjQ5OTEyNDU2Zjk2My4uMGVmZTJiYzFhODE1MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oCkBAIC0xNDEsNiAmIzQzOzE0MSwzNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1hX2NhcGFibGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplLAogdTY0IGRtYV9kaXJlY3RfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KTsKIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKIAkJZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIGF0dHJzKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFCiYjNDM7aW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAomIzQzOwkJCQkgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKTsKJiM0Mzt2b2lkIGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKTsKJiM0Mzt2b2lkICpkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAomIzQzOwkJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAomIzQzOwkJCQkJCSBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAomIzQzOwkJCQkJCSB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9kaXJlY3RfcmVzdG9yZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiYjNDM7CQkJCQkJICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsCiYjNDM7CQkJCQkJICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiB2b2lkIGRtYV9kaXJlY3RfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKIAkJZG1hX2FkZHJfdCBkbWFfYWRkciwgdW5zaWduZWQgbG9uZyBhdHRycyk7CiBzdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oCmluZGV4IDZhMTgzMmE3M2NhZDhkLi5iMTNlNWVlYmU2ZDNhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaApAQCAtMTA2LDYgJiM0MzsxMDYsNyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKTsKIHZvaWQgZG1hX2ZyZWVfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgc2l6ZSk7CiAKIHZvaWQgZG1hX2NvbnRpZ3VvdXNfZWFybHlfZml4dXAocGh5c19hZGRyX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKJiM0Mztib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7CiAjZWxzZSAvKiBDT05GSUdfRE1BX0NNQSAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgY21hICpkZXZfZ2V0X2NtYV9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTE0NSw2ICYjNDM7MTQ2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiB7CiAJX19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqLwogCiAjaWZkZWYgQ09ORklHX0RNQV9ERUNMQVJFX0NPSEVSRU5UCkBAIC0xNTYsNiAmIzQzOzE2Miw3IEBAIGludCBkbWFfYWxsb2NfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzc2l6ZV90IHNpemUsCiBpbnQgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb3JkZXIsIHZvaWQgKnZhZGRyKTsKIGludCBkbWFfbW1hcF9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsIGludCAqcmV0KTsKJiM0Mztib29sIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LAogCQlwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKQpAQCAtMTY2LDYgJiM0MzsxNzMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LAogI2RlZmluZSBkbWFfYWxsb2NfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIHJldCkgKDApCiAjZGVmaW5lIGRtYV9yZWxlYXNlX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgb3JkZXIsIHZhZGRyKSAoMCkKICNkZWZpbmUgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCB2bWEsIHZhZGRyLCBvcmRlciwgcmV0KSAoMCkKJiM0MzsjZGVmaW5lIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChkZXYsIHZhZGRyKSAoZmFsc2UpCiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3JlbGVhc2VfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldikgeyB9CiAjZW5kaWYgLyogQ09ORklHX0RNQV9ERUNMQVJFX0NPSEVSRU5UICovCiAKQEAgLTIxNiw2ICYjNDM7MjI1LDcgQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJYm9vbCAoKnBoeXNfYWRkcl9vaykoc3RydWN0IGRldmljZSAqLCBwaHlzX2FkZHJfdCwgc2l6ZV90KSk7CiBib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSk7CiAKJiM0Mztib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKTsKIGludCBkbWFfZGlyZWN0X3NldF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBjcHVfc3RhcnQsCiAJCWRtYV9hZGRyX3QgZG1hX3N0YXJ0LCB1NjQgc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAppbmRleCBkYjhhYjI0YTU0ZjRhMy4uNGMwYzQyOGI2YjFjYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKQEAgLTIxMCw2ICYjNDM7MjEwLDIzIEBAIHZvaWQgKmRtYV92bWFwX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIHZvaWQgZG1hX3Z1bm1hcF9ub25jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpOwogaW50IGRtYV9tbWFwX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJc2l6ZV90IHNpemUsIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFCiYjNDM7aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCiYjNDM7CQkJCSAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKTsKJiM0Mzt2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpOwomIzQzO3ZvaWQgKmRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKJiM0MzsJCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpOwomIzQzO2ludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSk7CiYjNDM7dm9pZCBkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAomIzQzOwkJCQlzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgc3RhdGUpOwomIzQzO3ZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiYjNDM7CQkJCSAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpOwomIzQzOyNlbmRpZgogI2Vsc2UgLyogQ09ORklHX0hBU19ETUEgKi8KIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2VfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsCkBAIC00OTYsNiAmIzQzOzUxMyw0NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1hX25lZWRfdW5tYXAoc3RydWN0IGRldmljZSAqZGV2KQogfQogI2VuZGlmIC8qICFDT05GSUdfSEFTX0RNQSB8fCAhQ09ORklHX0RNQV9ORUVEX1NZTkMgKi8KIAomIzQzOyNpZiAhZGVmaW5lZChDT05GSUdfRE1BX0xJVkVVUERBVEUpIHx8ICFkZWZpbmVkKENPTkZJR19IQVNfRE1BKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCiYjNDM7CQkJCQkJc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJCQl1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAomIzQzOwkJCQkJCSBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsCiYjNDM7CQkJCQkJIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJCQkgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJCQkgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCiYjNDM7CQkJCQkgICAgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiYjNDM7CQkJCQkJICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsCiYjNDM7CQkJCQkJICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgZ2ZwX3QgZ2ZwKTsKIHZvaWQgZG1hX2ZyZWVfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCkBAIC02MTgsNiAmIzQzOzY3NCwyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJKGdmcCAmYW1wOyBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDApOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJCQkgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsCiYjNDM7CQkJCQkgICAgIGRtYV9oYW5kbGUsIDAsIHN0YXRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRtYV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKGRldiwgc3RhdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9yZXN0b3JlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKJiM0MzsJCQkJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKJiM0MzsJCQkJCQkgICAgZ2ZwX3QgZ2ZwLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGdmcCwKJiM0MzsJCQkJCSAgICAoZ2ZwICZhbXA7IF9fR0ZQX05PV0FSTikgPyBETUFfQVRUUl9OT19XQVJOIDogMCwKJiM0MzsJCQkJCSAgICBzdGF0ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCXZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCiB7CkBAIC03NDcsNiAmIzQzOzgyNCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCShnZnAgJmFtcDsgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAomIzQzOwkJCQkJCSAgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLAomIzQzOwkJCQkJICAgICAgZG1hX2hhbmRsZSwgMCwgc3RhdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hbV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJCQkgICAgICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJCQkgICAgICAgdTY0IHN0YXRlKQomIzQzO3sKJiM0MzsJZG1hbV91bnByZXNlcnZlX2FsbG9jYXRpb24oZGV2LCBjcHVfYWRkciwgc2l6ZSwgZG1hX2hhbmRsZSwgc3RhdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiYjNDM7CQkJCQkJICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAomIzQzOwkJCQkJCSAgICAgZ2ZwX3QgZ2ZwLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnAsCiYjNDM7CQkJCQkgICAgIChnZnAgJmFtcDsgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwLAomIzQzOwkJCQkJICAgICBzdGF0ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2Nfd2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkgZG1hX2FkZHJfdCAqZG1hX2FkZHIsIGdmcF90IGdmcCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWUzOGNmMWExZmM5OWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmgKQEAgLTAsMCAmIzQzOzEsMzIgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX0xJTlVYX0tIT19BQklfRE1BX0FMTE9DX0gKJiM0MzsjZGVmaW5lIF9MSU5VWF9LSE9fQUJJX0RNQV9BTExPQ19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogRE9DOiBETUEgQWxsb2MgQUJJCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGhlYWRlciBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgdG8gc2VyaWFsaXplIHRoZSBzdGF0ZSBvZiBETUEKJiM0MzsgKiBhbGxvY2F0aW9ucywgZG9uZSBieSBkZXZpY2UgZHJpdmVyLCBhY3Jvc3MgYSBMaXZlIFVwZGF0ZS4KJiM0MzsgKgomIzQzOyAqIE9ubHkgRE1BIGFsbG9jYXRpb25zIGRvbmUgdGhyb3VnaCBkbWEtZGlyZWN0IHRoYXQgYXJlIGNvbnRpZ3VvdXMgYW5kCiYjNDM7ICogYWxsb2NhdGVkIHVzaW5nIGFsbG9jX3BhZ2UgYXJlIHN1cHBvcnRlZC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgZG1hX2FsbG9jX3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgb2YgYSBzaW5nbGUgRE1BIGFsbG9jYXRpb24KJiM0MzsgKiBAcGFnZV9waHlzOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBwcmVzZXJ2ZWQgcGFnZXMKJiM0MzsgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgRE1BIGFsbG9jYXRpb24KJiM0MzsgKiBAYXR0cnM6IERNQSBhbGxvY2F0aW9uIGF0dHJpYnV0ZXMKJiM0MzsgKiBAZm9yY2VfZGVjcnlwdGVkOiBXaGV0aGVyIHRoZSBtZW1vcnkgaXMgZm9yY2UgZGVjcnlwdGVkIGluIHByZXZpb3VzIGtlcm5lbAomIzQzOyAqLwomIzQzO3N0cnVjdCBkbWFfYWxsb2Nfc2VyIHsKJiM0MzsJdTY0IHBhZ2VfcGh5czsKJiM0MzsJdTY0IHNpemU7CiYjNDM7CXU2NCBhdHRyczsKJiM0MzsJdTggZm9yY2VfZGVjcnlwdGVkOwomIzQzOwl1OCBwYWRkaW5nWzddOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9MSU5VWF9LSE9fQUJJX0RNQV9BTExPQ19IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL0tjb25maWcgYi9rZXJuZWwvZG1hL0tjb25maWcKaW5kZXggYmZlZjIxYjRhOWFlN2QuLjQ4YmM3NGFmNTUxYTMxIDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9LY29uZmlnCkBAIC0yNjUsMyAmIzQzOzI2NSwxNSBAQCBjb25maWcgRE1BX01BUF9CRU5DSE1BUksKIAkgIHBlcmZvcm1hbmNlIG9mIGRtYV8odW4pbWFwX3BhZ2UuCiAKIAkgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kbWEvZG1hX21hcF9iZW5jaG1hcmsuYwomIzQzOwomIzQzO2NvbmZpZyBETUFfTElWRVVQREFURQomIzQzOwlib29sICYjMzQ7RW5hYmxlIHByZXNlcnZhdGlvbiBvZiBETUEgZGlyZWN0IGFsbG9jYXRpb25zJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBMSVZFVVBEQVRFCiYjNDM7CiYjNDM7Y29uZmlnIERNQV9MSVZFVVBEQVRFX0tVTklUX1RFU1QKJiM0MzsJdHJpc3RhdGUgJiMzNDtLVW5pdCB0ZXN0IGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBLVU5JVAomIzQzOwlkZXBlbmRzIG9uIERNQV9MSVZFVVBEQVRFCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGJ1aWxkcyB0aGUgS1VuaXQgdGVzdHMgZm9yIHRoZSBETUEgZGlyZWN0IGxpdmV1cGRhdGUKJiM0MzsJICBwcmVzZXJ2YXRpb24gYW5kIHJlc3RvcmF0aW9uIGxvZ2ljLgpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9NYWtlZmlsZSBiL2tlcm5lbC9kbWEvTWFrZWZpbGUKaW5kZXggNjk3NzAzMzQ0NGEzNzUuLjAzNzAzNTQyZWU3OWJjIDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvTWFrZWZpbGUKQEAgLTEwLDMgJiM0MzsxMCw0IEBAIG9iai0kKENPTkZJR19TV0lPVExCKQkJCSYjNDM7PSBzd2lvdGxiLm8KIG9iai0kKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkJCSYjNDM7PSBwb29sLm8KIG9iai0kKENPTkZJR19NTVUpCQkJJiM0Mzs9IHJlbWFwLm8KIG9iai0kKENPTkZJR19ETUFfTUFQX0JFTkNITUFSSykJCSYjNDM7PSBtYXBfYmVuY2htYXJrLm8KJiM0MztvYmotJChDT05GSUdfRE1BX0xJVkVVUERBVEVfS1VOSVRfVEVTVCkJJiM0Mzs9IGRpcmVjdF90ZXN0Lm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29oZXJlbnQuYyBiL2tlcm5lbC9kbWEvY29oZXJlbnQuYwppbmRleCBiY2RjMGY3NmQyZTgwYS4uNzZjYmUxMWUxZjkwZTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kbWEvY29oZXJlbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL2NvaGVyZW50LmMKQEAgLTIzMSw2ICYjNDM7MjMxLDE3IEBAIGludCBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvcmRlciwgdm9pZCAqdmFkZHIpCiAJcmV0dXJuIF9fZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChtZW0sIG9yZGVyLCB2YWRkcik7CiB9CiAKJiM0Mztib29sIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKm1lbSA9IGRldl9nZXRfY29oZXJlbnRfbWVtb3J5KGRldik7CiYjNDM7CiYjNDM7CWlmIChtZW0gJmFtcDsmYW1wOyB2YWRkciAmZ3Q7PSBtZW0tJmd0O3ZpcnRfYmFzZSAmYW1wOyZhbXA7IHZhZGRyICZsdDsKJiM0MzsJCSAgIChtZW0tJmd0O3ZpcnRfYmFzZSAmIzQzOyAoKGRtYV9hZGRyX3QpbWVtLSZndDtzaXplICZsdDsmbHQ7IFBBR0VfU0hJRlQpKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2RtYV9tbWFwX2Zyb21fY29oZXJlbnQoc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKm1lbSwKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwgaW50ICpyZXQpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jCmluZGV4IDAzZjUyYmQxNzEyMDYyLi42ZDBjZjljNzUyOGNiNSAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9jb250aWd1b3VzLmMKQEAgLTM3LDYgJiM0MzszNyw4IEBACiAKICNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtjbWE6ICYjMzQ7IGZtdAogCiYjNDM7I2luY2x1ZGUgJmx0O2t1bml0L3Zpc2liaWxpdHkuaCZndDsKJiM0MzsKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtYmxvY2suaCZndDsKQEAgLTEzMCw2ICYjNDM7MTMyLDMxIEBAIHN0cnVjdCBjbWEgKmRldl9nZXRfY21hX2FyZWEoc3RydWN0IGRldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2dldF9jbWFfYXJlYSk7CiAKJiM0MztzdHJ1Y3QgZG1hX2NtYV9jaGVja19kYXRhIHsKJiM0MzsJcGh5c19hZGRyX3Qgc3RhcnQ7CiYjNDM7CXBoeXNfYWRkcl90IGVuZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZG1hX2NtYV9jaGVja19hcmVhKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfY21hX2NoZWNrX2RhdGEgKmNoayA9IGRhdGE7CiYjNDM7CiYjNDM7CWlmIChjbWFfaW50ZXJzZWN0cyhjbWEsIGNoay0mZ3Q7c3RhcnQsIGNoay0mZ3Q7ZW5kKSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2NtYV9jaGVja19kYXRhIGNoayA9IHsKJiM0MzsJCS5zdGFydCA9IHBoeXMsCiYjNDM7CQkuZW5kID0gcGh5cyAmIzQzOyBzaXplIC0gMSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNtYV9mb3JfZWFjaF9hcmVhKGRtYV9jbWFfY2hlY2tfYXJlYSwgJmFtcDtjaGspICE9IDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoZG1hX2lzX2Zyb21fY21hKTsKJiM0MzsKICNpZmRlZiBDT05GSUdfRE1BX05VTUFfQ01BCiAKIHN0YXRpYyBzdHJ1Y3QgY21hICpkbWFfY29udGlndW91c19udW1hX2FyZWFbTUFYX05VTU5PREVTXTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvZGlyZWN0LmMgYi9rZXJuZWwvZG1hL2RpcmVjdC5jCmluZGV4IGVjODg3ZjQ0Mzc0MTgzLi4xMTdlYmFlOGE4MWZhMSAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS9kaXJlY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL2RpcmVjdC5jCkBAIC02LDYgJiM0Mzs2LDggQEAKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWJsb2NrLmgmZ3Q7IC8qIGZvciBtYXhfcGZuICovCiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjX2hhbmRvdmVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtbWFwLW9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjYXR0ZXJsaXN0LmgmZ3Q7CkBAIC0zMDcsNiAmIzQzOzMwOSwxOTMgQEAgdm9pZCAqZG1hX2RpcmVjdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCXJldHVybiBOVUxMOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURQomIzQzO2ludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYWxsb2Nfc2VyICpzZXI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICgha2hvX2lzX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiYjNDM7CWlmIChkbWFfaXNfZnJvbV9jbWEoZG1hX3RvX3BoeXMoZGV2LCBkbWFfaGFuZGxlKSwgc2l6ZSkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChpc19zd2lvdGxiX2Zvcl9hbGxvYyhkZXYpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoKGF0dHJzICZhbXA7IERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19ETUFfQUxMT0MpICZhbXA7JmFtcDsKJiM0MzsJICAgICFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfR0xPQkFMX1BPT0wpICZhbXA7JmFtcDsKJiM0MzsJICAgICFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgJmFtcDsmYW1wOwomIzQzOwkgICAgZG1hX2lzX2Zyb21fcG9vbChjcHVfYWRkciwgc2l6ZSkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXNlciA9IGtob19hbGxvY19wcmVzZXJ2ZShzaXplb2YoKnNlcikpOwomIzQzOwlpZiAoSVNfRVJSKHNlcikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihzZXIpOwomIzQzOwomIzQzOwlzZXItJmd0O3BhZ2VfcGh5cyA9IGRtYV90b19waHlzKGRldiwgZG1hX2hhbmRsZSk7CiYjNDM7CXNlci0mZ3Q7Zm9yY2VfZGVjcnlwdGVkID0gZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldik7CiYjNDM7CXNlci0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CXNlci0mZ3Q7YXR0cnMgPSAoYXR0cnMgJmFtcDsgfkRNQV9BVFRSX05PX1dBUk4pOwomIzQzOwomIzQzOwlyZXQgPSBraG9fcHJlc2VydmVfcGFnZXMocGh5c190b19wYWdlKHNlci0mZ3Q7cGFnZV9waHlzKSwKJiM0MzsJCQkJIDEgJmx0OyZsdDsgZ2V0X29yZGVyKHNpemUpKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJa2hvX3VucHJlc2VydmVfZnJlZShzZXIpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwkqc3RhdGUgPSB2aXJ0X3RvX3BoeXMoc2VyKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2FsbG9jX3NlciAqc2VyOwomIzQzOwomIzQzOwlpZiAoIWtob19pc19lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNlciA9IHBoeXNfdG9fdmlydChzdGF0ZSk7CiYjNDM7CWtob191bnByZXNlcnZlX3BhZ2VzKHBoeXNfdG9fcGFnZShzZXItJmd0O3BhZ2VfcGh5cyksCiYjNDM7CQkJICAgICAxICZsdDsmbHQ7IGdldF9vcmRlcihzZXItJmd0O3NpemUpKTsKJiM0MzsJa2hvX3VucHJlc2VydmVfZnJlZShzZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkICpkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAomIzQzOwkJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKQomIzQzO3sKJiM0MzsJYm9vbCByZW1hcCA9IGZhbHNlLCBzZXRfdW5jYWNoZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IGRtYV9hbGxvY19zZXIgKnNlciA9IE5VTEw7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwl2b2lkICpjcHVfYWRkciA9IE5VTEw7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIWtob19pc19lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJc2VyID0gcGh5c190b192aXJ0KHN0YXRlKTsKJiM0MzsJcGFnZSA9IHBoeXNfdG9fcGFnZShzZXItJmd0O3BhZ2VfcGh5cyk7CiYjNDM7CiYjNDM7CXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwomIzQzOwlpZiAoc2l6ZSAhPSBzZXItJmd0O3NpemUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJV0FSTl9PTl9PTkNFKChhdHRycyAmYW1wOyB+RE1BX0FUVFJfTk9fV0FSTikgIT0gc2VyLSZndDthdHRycyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENhbm5vdCBmcmVlIHRoZSByZXN0b3JlZCBwYWdlcyBvbiBlcnJvciBoZXJlIGFzIHRoZXNlIG1pZ2h0IGJlIGluIHVzZQomIzQzOwkgKiBieSBhIGRldmljZSB3aXRoIGRpcmVjdCBhbGxvY2F0aW9uIGluIHRoZSBwcmV2aW91cyBrZXJuZWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfc3dpb3RsYl9mb3JfYWxsb2MoZGV2KSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoKGF0dHJzICZhbXA7IERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpIHsKJiM0MzsJCWlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19ETUFfQUxMT0MpKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9HTE9CQUxfUE9PTCkpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CiYjNDM7CQlzZXRfdW5jYWNoZWQgPSBJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19ETUFfU0VUX1VOQ0FDSEVEKTsKJiM0MzsJCXJlbWFwID0gSVNfRU5BQkxFRChDT05GSUdfRE1BX0RJUkVDVF9SRU1BUCk7CiYjNDM7CQlpZiAoIXNldF91bmNhY2hlZCAmYW1wOyZhbXA7ICFyZW1hcCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKJiM0MzsJCXJlbWFwID0gdHJ1ZTsKJiM0MzsJCXNldF91bmNhY2hlZCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlbWFwcGluZyB3aWxsIGJlIGJsb2NraW5nIHNvIHJldHVybiBlcnJvci4gVGhlIHByZXNlcnZlZCBtZW1vcnkKJiM0MzsJICogbWlnaHQgYmUgYWxyZWFkeSBkZWNyeXB0ZWQgaW4gdGhlIHByZXZpb3VzIGtlcm5lbCwgYnV0IHRoZSBkZWNyeXB0aW9uCiYjNDM7CSAqIGNhbGwgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgbm9uLWJsb2NraW5nIHNvIHJldHVybiBlcnJvciBhbHdheXMgaWYKJiM0MzsJICogZGVjcnlwdGlvbiBpcyByZXF1aXJlZC4KJiM0MzsJICovCiYjNDM7CWlmICgocmVtYXAgfHwgZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpICZhbXA7JmFtcDsKJiM0MzsJICAgIGRtYV9kaXJlY3RfdXNlX3Bvb2woZGV2LCBnZnApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuY3J5cHRpb24gc2NoZW1lIGNoYW5nZWQgYmV0d2VlbiB0d28ga2VybmVscyBhbmQgdGhpcyBtaWdodCBjYXVzZQomIzQzOwkgKiBpc3N1ZXMgaWYgZGV2aWNlL2RyaXZlciBpcyBub3QgaGFuZGxpbmcgaXQgcHJvcGVybHkuCiYjNDM7CSAqLwomIzQzOwlXQVJOX09OX09OQ0Uoc2VyLSZndDtmb3JjZV9kZWNyeXB0ZWQgIT0gZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBhcmNoX2RtYV9wcmVwX2NvaGVyZW50KCkgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGFueSBjYWNoZSBsaW5lcyBmcm9tCiYjNDM7CSAqIHRoZSBwcmV2aW91cyBrZXJuZWwsIGlmIHRoZSBkZXZpY2Ugd2FzIGNvaGVyZW50IHByZXZpb3VzbHkgb3IgY2FjaGVkCiYjNDM7CSAqIG1hcHBpbmcgaW4gdGhpcyBrZXJuZWwgZHVyaW5nIGluaXQgYXJlIG5vdCBwcm9ibGVtYXRpYyBmb3IKJiM0MzsJICogbm9uLWNvaGVyZW50IGFsbG9jYXRpb25zLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlbWFwKSB7CiYjNDM7CQlwZ3Byb3RfdCBwcm90ID0gZG1hX3BncHJvdChkZXYsIFBBR0VfS0VSTkVMLCBhdHRycyk7CiYjNDM7CiYjNDM7CQlpZiAoZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpCiYjNDM7CQkJcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQocHJvdCk7CiYjNDM7CiYjNDM7CQlhcmNoX2RtYV9wcmVwX2NvaGVyZW50KHBhZ2UsIHNpemUpOwomIzQzOwomIzQzOwkJY3B1X2FkZHIgPSBkbWFfY29tbW9uX2NvbnRpZ3VvdXNfcmVtYXAocGFnZSwgc2l6ZSwgcHJvdCwKJiM0MzsJCQkJCQkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKJiM0MzsJCWlmICghY3B1X2FkZHIpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQljcHVfYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKJiM0MzsJCWlmIChkbWFfc2V0X2RlY3J5cHRlZChkZXYsIGNwdV9hZGRyLCBzaXplKSkgewomIzQzOwkJCWNwdV9hZGRyID0gTlVMTDsKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2V0X3VuY2FjaGVkKSB7CiYjNDM7CQlhcmNoX2RtYV9wcmVwX2NvaGVyZW50KHBhZ2UsIHNpemUpOwomIzQzOwkJY3B1X2FkZHIgPSBhcmNoX2RtYV9zZXRfdW5jYWNoZWQoY3B1X2FkZHIsIHNpemUpOwomIzQzOwkJaWYgKElTX0VSUihjcHVfYWRkcikpIHsKJiM0MzsJCQljcHVfYWRkciA9IE5VTEw7CiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmRtYV9oYW5kbGUgPSBwaHlzX3RvX2RtYV9kaXJlY3QoZGV2LCBzZXItJmd0O3BhZ2VfcGh5cyk7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlXQVJOX09OKCFraG9fcmVzdG9yZV9wYWdlcyhzZXItJmd0O3BhZ2VfcGh5cywKJiM0MzsJCQkJICAgMSAmbHQ7Jmx0OyBnZXRfb3JkZXIoc2VyLSZndDtzaXplKSkpOwomIzQzOwlraG9fcmVzdG9yZV9mcmVlKHNlcik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERNQSBkaXJlY3QgQVBJIGV4cGVjdHMgaGlnaC1vcmRlciBhbGxvY2F0aW9ucywgc28gc2V0IHJlZmNvdW50IG9mCiYjNDM7CSAqIHRhaWwgcGFnZXMgdG8gemVyby4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9ICgxICZsdDsmbHQ7IGdldF9vcmRlcihzaXplKSkgLSAxOyBpICZndDsgMDsgLS1pKQomIzQzOwkJc2V0X3BhZ2VfY291bnQocGFnZSAmIzQzOyBpLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNwdV9hZGRyOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgZG1hX2RpcmVjdF9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCXZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1bnNpZ25lZCBsb25nIGF0dHJzKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jIGIva2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODQwM2VjNDc4MDdlOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYwpAQCAtMCwwICYjNDM7MSwyMDggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogS1VuaXQgdGVzdCBmb3IgRE1BIGFsbG9jYXRpb24gbGl2ZSB1cGRhdGUgcHJlc2VydmF0aW9uLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtrdW5pdC90ZXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtrdW5pdC9zdGF0aWNfc3R1Yi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtbWFwLW9wcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtbWFwcGluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtZGlyZWN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjX2hhbmRvdmVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc2l6ZV90IGRtYV90ZXN0X3NpemVzW10gPSB7CiYjNDM7CTEyOCwKJiM0MzsJUEFHRV9TSVpFLAomIzQzOwkyICogUEFHRV9TSVpFLAomIzQzOwkzICogUEFHRV9TSVpFLAomIzQzOwk4ICogUEFHRV9TSVpFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZG1hX3NpemVfZGVzYyhjb25zdCBzaXplX3QgKnNpemUsIGNoYXIgKmRlc2MpCiYjNDM7ewomIzQzOwlzbnByaW50ZihkZXNjLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUsICYjMzQ7c2l6ZT0lenUmIzM0OywgKnNpemUpOwomIzQzO30KJiM0MzsKJiM0MztLVU5JVF9BUlJBWV9QQVJBTShkbWFfc2l6ZSwgZG1hX3Rlc3Rfc2l6ZXMsIGRtYV9zaXplX2Rlc2MpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbW9ja19raG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwaHlzX3RvX3BhZ2UocGh5cyk7CiYjNDM7CiYjNDM7CWlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsIG5yX3BhZ2VzKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwYWdlLCBucl9wYWdlcyk7CiYjNDM7CXJldHVybiBwYWdlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGZvbGlvICptb2NrX2tob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwaHlzX3RvX3BhZ2UocGh5cykpOwomIzQzOwomIzQzOwlpZiAoIWtob190ZXN0X3BhZ2VzX3ByZXNlcnZlZChwaHlzLCAoMSAmbHQ7Jmx0OyBmb2xpb19vcmRlcihmb2xpbykpKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlraG9fdW5wcmVzZXJ2ZV9mb2xpbyhmb2xpbyk7CiYjNDM7CXJldHVybiBmb2xpbzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHN0cnVjdCBrdW5pdCAqdGVzdCwKJiM0MzsJCQkJCQkgICAgYm9vbCBjb2hlcmVudCwKJiM0MzsJCQkJCQkgICAgYm9vbCBhdG9taWMsCiYjNDM7CQkJCQkJICAgIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEgJmx0OyZsdDsgZ2V0X29yZGVyKHNpemUpOwomIzQzOwlkbWFfYWRkcl90IGhhbmRsZTEsIGhhbmRsZTI7CiYjNDM7CWludCByZXQsIGV4cGVjdGVkX3JldCA9IDA7CiYjNDM7CXN0cnVjdCBkZXZpY2UgZGV2ID0gezB9OwomIzQzOwlnZnBfdCBnZnAgPSBHRlBfS0VSTkVMOwomIzQzOwl2b2lkICphZGRyMSwgKmFkZHIyOwomIzQzOwl1NjQgc3RhdGU7CiYjNDM7CiYjNDM7CWt1bml0X2FjdGl2YXRlX3N0YXRpY19zdHViKHRlc3QsIGtob19yZXN0b3JlX3BhZ2VzLCBtb2NrX2tob19yZXN0b3JlX3BhZ2VzKTsKJiM0MzsJa3VuaXRfYWN0aXZhdGVfc3RhdGljX3N0dWIodGVzdCwga2hvX3Jlc3RvcmVfZm9saW8sIG1vY2tfa2hvX3Jlc3RvcmVfZm9saW8pOwomIzQzOwomIzQzOwlkZXZpY2VfaW5pdGlhbGl6ZSgmYW1wO2Rldik7CiYjNDM7CWRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSyg2NCk7CiYjNDM7CWRldi5kbWFfbWFzayA9ICZhbXA7ZGV2LmNvaGVyZW50X2RtYV9tYXNrOwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFKSB8fCBcCiYjNDM7ICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFUpIHx8IFwKJiM0MzsgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTEwpCiYjNDM7CWRldi5kbWFfY29oZXJlbnQgPSBjb2hlcmVudDsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJaWYgKGF0b21pYykKJiM0MzsJCWdmcCA9IEdGUF9BVE9NSUM7CiYjNDM7CiYjNDM7CWFkZHIxID0gZG1hX2FsbG9jX2NvaGVyZW50KCZhbXA7ZGV2LCBzaXplLCAmYW1wO2hhbmRsZTEsIGdmcCk7CiYjNDM7CWlmICghYWRkcjEpIHsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtETUEgYWxsb2NhdGlvbiBmYWlsZWQgKHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24pJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgJmFtcDsmYW1wOyBkbWFfaXNfZnJvbV9wb29sKGFkZHIxLCBzaXplKSkgewomIzQzOwkJZXhwZWN0ZWRfcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlrdW5pdF9pbmZvKHRlc3QsICYjMzQ7RE1BIGFsbG9jYXRpb24gdXNpbmcgcG9vbCwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQJiMzNDspOwomIzQzOwl9IGVsc2UgaWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cygmYW1wO2RldiwgaGFuZGxlMSksIHNpemUpKSB7CiYjNDM7CQlleHBlY3RlZF9yZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWt1bml0X2luZm8odGVzdCwgJiMzNDtETUEgYWxsb2NhdGlvbiB1c2luZyBDTUEsIGV4cGVjdGluZyAtRU9QTk9UU1VQUCYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkbWFfcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbigmYW1wO2RldiwgYWRkcjEsIHNpemUsIGhhbmRsZTEsICZhbXA7c3RhdGUpOwomIzQzOwlLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCBleHBlY3RlZF9yZXQpOwomIzQzOwomIzQzOwlpZiAoIWV4cGVjdGVkX3JldCkgewomIzQzOwkJS1VOSVRfRVhQRUNUX1RSVUVfTVNHKHRlc3QsCiYjNDM7CQkJCSAgICAgIGtob190ZXN0X3BhZ2VzX3ByZXNlcnZlZChkbWFfdG9fcGh5cygmYW1wO2RldiwgaGFuZGxlMSksIG5yX3BhZ2VzKSwKJiM0MzsJCQkJICAgICAgJiMzNDtBbGxvY2F0ZWQgYmxvY2sgbm90IHRyYWNrZWQgaW4gS0hPJiMzNDspOwomIzQzOwomIzQzOwkJYWRkcjIgPSBkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKCZhbXA7ZGV2LCBzaXplLCAmYW1wO2hhbmRsZTIsIGdmcCwgc3RhdGUpOwomIzQzOwkJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGFkZHIyKTsKJiM0MzsKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBoYW5kbGUxLCBoYW5kbGUyKTsKJiM0MzsJCWRtYV9mcmVlX2NvaGVyZW50KCZhbXA7ZGV2LCBzaXplLCBhZGRyMiwgaGFuZGxlMik7CiYjNDM7CQlLVU5JVF9FWFBFQ1RfRkFMU0VfTVNHKHRlc3QsCiYjNDM7CQkJCSAgICAgICBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoJmFtcDtkZXYsIGhhbmRsZTEpLCBucl9wYWdlcyksCiYjNDM7CQkJCSAgICAgICAmIzM0O0FsbG9jYXRlZCBibG9jayBzdGlsbCB0cmFja2VkIGFmdGVyIGZyZWUmIzM0Oyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO2Rldiwgc2l6ZSwgYWRkcjEsIGhhbmRsZTEpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwljb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LSZndDtwYXJhbV92YWx1ZTsKJiM0MzsKJiM0MzsJdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIHRydWUsIGZhbHNlLCAqc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnQoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJY29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC0mZ3Q7cGFyYW1fdmFsdWU7CiYjNDM7CiYjNDM7CXRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCBmYWxzZSwgZmFsc2UsICpzaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X2NvaGVyZW50X2F0b21pYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwljb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LSZndDtwYXJhbV92YWx1ZTsKJiM0MzsKJiM0MzsJdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIHRydWUsIHRydWUsICpzaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudF9hdG9taWMoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJY29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC0mZ3Q7cGFyYW1fdmFsdWU7CiYjNDM7CiYjNDM7CXRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCBmYWxzZSwgdHJ1ZSwgKnNpemUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2RtYW1fcHJlc2VydmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CWRtYV9hZGRyX3QgaGFuZGxlLCBub25fZG1hbV9oYW5kbGU7CiYjNDM7CXZvaWQgKmFkZHIsICpub25fZG1hbV9hZGRyOwomIzQzOwlzdHJ1Y3QgZGV2aWNlIGRldiA9IHswfTsKJiM0MzsJc2l6ZV90IHNpemUgPSAxMjg7CiYjNDM7CXU2NCBzdGF0ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJa3VuaXRfYWN0aXZhdGVfc3RhdGljX3N0dWIodGVzdCwga2hvX3Jlc3RvcmVfcGFnZXMsIG1vY2tfa2hvX3Jlc3RvcmVfcGFnZXMpOwomIzQzOwlrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9mb2xpbywgbW9ja19raG9fcmVzdG9yZV9mb2xpbyk7CiYjNDM7CiYjNDM7CWRldmljZV9pbml0aWFsaXplKCZhbXA7ZGV2KTsKJiM0MzsJZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDY0KTsKJiM0MzsJZGV2LmRtYV9tYXNrID0gJmFtcDtkZXYuY29oZXJlbnRfZG1hX21hc2s7CiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9ERVZJQ0UpIHx8IFwKJiM0MzsgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVSkgfHwgXAomIzQzOyAgICBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19TWU5DX0RNQV9GT1JfQ1BVX0FMTCkKJiM0MzsJZGV2LmRtYV9jb2hlcmVudCA9IHRydWU7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CW5vbl9kbWFtX2FkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFtcDtkZXYsIHNpemUsICZhbXA7bm9uX2RtYW1faGFuZGxlLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFub25fZG1hbV9hZGRyKSB7CiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7RE1BIGFsbG9jYXRpb24gZmFpbGVkJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbigmYW1wO2Rldiwgbm9uX2RtYW1fYWRkciwgc2l6ZSwgbm9uX2RtYW1faGFuZGxlLCAmYW1wO3N0YXRlKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRX01TRyh0ZXN0LCByZXQsIC1FSU5WQUwsICYjMzQ7UHJlc2VydmluZyBub24tZGV2cmVzIGFsbG9jYXRpb24gc2hvdWxkIGZhaWwmIzM0Oyk7CiYjNDM7CWRtYV9mcmVlX2NvaGVyZW50KCZhbXA7ZGV2LCBzaXplLCBub25fZG1hbV9hZGRyLCBub25fZG1hbV9oYW5kbGUpOwomIzQzOwomIzQzOwlhZGRyID0gZG1hbV9hbGxvY19jb2hlcmVudCgmYW1wO2Rldiwgc2l6ZSwgJmFtcDtoYW5kbGUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWFkZHIpIHsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtETUEgYWxsb2NhdGlvbiBmYWlsZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKCZhbXA7ZGV2LCBhZGRyLCBzaXplLCBoYW5kbGUsICZhbXA7c3RhdGUpOwomIzQzOwlLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHJldCwgMCwgJiMzNDtGYWlsZWQgdG8gcHJlc2VydmUgZG1hbSBhbGxvY2F0aW9uJiMzNDspOwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoJmFtcDtkZXYsIGhhbmRsZSksIDEpKTsKJiM0MzsKJiM0MzsJZG1hbV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oJmFtcDtkZXYsIGFkZHIsIHNpemUsIGhhbmRsZSwgc3RhdGUpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCwga2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKGRtYV90b19waHlzKCZhbXA7ZGV2LCBoYW5kbGUpLCAxKSk7CiYjNDM7CiYjNDM7CWRtYW1fZnJlZV9jb2hlcmVudCgmYW1wO2Rldiwgc2l6ZSwgYWRkciwgaGFuZGxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRtYV9kaXJlY3RfdGVzdF9jYXNlc1tdID0gewomIzQzOwlLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudCwgZG1hX3NpemVfZ2VuX3BhcmFtcyksCiYjNDM7CUtVTklUX0NBU0VfUEFSQU0odGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudCwgZG1hX3NpemVfZ2VuX3BhcmFtcyksCiYjNDM7CUtVTklUX0NBU0VfUEFSQU0odGVzdF9kbWFfZGlyZWN0X2NvaGVyZW50X2F0b21pYywgZG1hX3NpemVfZ2VuX3BhcmFtcyksCiYjNDM7CUtVTklUX0NBU0VfUEFSQU0odGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudF9hdG9taWMsIGRtYV9zaXplX2dlbl9wYXJhbXMpLAomIzQzOwlLVU5JVF9DQVNFKHRlc3RfZG1hbV9wcmVzZXJ2YXRpb24pLAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBkbWFfZGlyZWN0X3Rlc3Rfc3VpdGUgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtkbWFfZGlyZWN0X2xpdmV1cGRhdGUmIzM0OywKJiM0MzsJLnRlc3RfY2FzZXMgPSBkbWFfZGlyZWN0X3Rlc3RfY2FzZXMsCiYjNDM7fTsKJiM0MztrdW5pdF90ZXN0X3N1aXRlKGRtYV9kaXJlY3RfdGVzdF9zdWl0ZSk7CiYjNDM7CiYjNDM7TU9EVUxFX0lNUE9SVF9OUygmIzM0O0VYUE9SVEVEX0ZPUl9LVU5JVF9URVNUSU5HJiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O0tVbml0IHRlc3QgZm9yIERNQSBkaXJlY3QgbGl2ZSB1cGRhdGUgcHJlc2VydmF0aW9uJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9tYXBwaW5nLmMgYi9rZXJuZWwvZG1hL21hcHBpbmcuYwppbmRleCAyM2VkOGViOTIzM2U1NS4uYWVjMTIyMmFiNWFlYjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kbWEvbWFwcGluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvbWFwcGluZy5jCkBAIC0xMiw2ICYjNDM7MTIsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2dmcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbW11LWRtYS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ttc2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjX2hhbmRvdmVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2ZfZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKQEAgLTM1LDEyICYjNDM7MzcsMjUgQEAgc3RydWN0IGRtYV9kZXZyZXMgewogCXZvaWQJCSp2YWRkcjsKIAlkbWFfYWRkcl90CWRtYV9oYW5kbGU7CiAJdW5zaWduZWQgbG9uZwlhdHRyczsKJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFCiYjNDM7CWJvb2wgaXNfcHJlc2VydmVkOwomIzQzOyNlbmRpZgogfTsKIAogc3RhdGljIHZvaWQgZG1hbV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKQogewogCXN0cnVjdCBkbWFfZGV2cmVzICp0aGlzID0gcmVzOwogCiYjNDM7I2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURQomIzQzOwkvKgomIzQzOwkgKiBGcmVlaW5nIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5IGlzIGRhbmdlcm91cyBhcyBpdCBjYW4gY2F1c2UgVUFGIGluIHRoZQomIzQzOwkgKiBjdXJyZW50IG9yIG5leHQga2VybmVsIGlmIHRoZSBtZW1vcnkgaXMgc3RpbGwgYmVpbmcgdXNlZCBieSB0aGUKJiM0MzsJICogZGV2aWNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKFdBUk5fT04odGhpcy0mZ3Q7aXNfcHJlc2VydmVkKSkKJiM0MzsJCXJldHVybjsKJiM0MzsjZW5kaWYKJiM0MzsKIAlkbWFfZnJlZV9hdHRycyhkZXYsIHRoaXMtJmd0O3NpemUsIHRoaXMtJmd0O3ZhZGRyLCB0aGlzLSZndDtkbWFfaGFuZGxlLAogCQkJdGhpcy0mZ3Q7YXR0cnMpOwogfQpAQCAtNjI4LDYgJiM0Mzs2NDMsMTIzIEBAIHU2NCBkbWFfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2dldF9yZXF1aXJlZF9tYXNrKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEUKJiM0MztpbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAomIzQzOwkJCQkgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiYjNDM7CiYjNDM7CWlmIChkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBjcHVfYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChkbWFfYWxsb2NfZGlyZWN0KGRldiwgb3BzKSkKJiM0MzsJCXJldHVybiBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oZGV2LCBjcHVfYWRkciwgc2l6ZSwKJiM0MzsJCQkJCQkgICAgICBkbWFfaGFuZGxlLCBhdHRycywKJiM0MzsJCQkJCQkgICAgICBzdGF0ZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyk7CiYjNDM7CiYjNDM7dm9pZCBkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwomIzQzOwomIzQzOwlpZiAoZG1hX2FsbG9jX2RpcmVjdChkZXYsIG9wcykpCiYjNDM7CQlkbWFfZGlyZWN0X3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKTsKJiM0MzsKJiM0Mzt2b2lkICpkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiYjNDM7CQkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwomIzQzOwl2b2lkICpjcHVfYWRkciA9IE5VTEw7CiYjNDM7CiYjNDM7CVdBUk5fT05fT05DRSghZGV2LSZndDtjb2hlcmVudF9kbWFfbWFzayk7CiYjNDM7CiYjNDM7CWlmIChkbWFfYWxsb2NfZGlyZWN0KGRldiwgb3BzKSkKJiM0MzsJCWNwdV9hZGRyID0gZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oZGV2LCBzaXplLCBkbWFfaGFuZGxlLAomIzQzOwkJCQkJCQkgZ2ZwLCBhdHRycywgc3RhdGUpOwomIzQzOwomIzQzOwlkZWJ1Z19kbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCAqZG1hX2hhbmRsZSwgY3B1X2FkZHIsIGF0dHJzKTsKJiM0MzsJcmV0dXJuIGNwdV9hZGRyOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpOwomIzQzOwomIzQzO2ludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfZGV2cmVzIG1hdGNoX2RhdGEgPSB7IHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlIH07CiYjNDM7CXN0cnVjdCBkbWFfZGV2cmVzICpkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZHIgPSBkZXZyZXNfZmluZChkZXYsIGRtYW1fcmVsZWFzZSwgZG1hbV9tYXRjaCwgJmFtcDttYXRjaF9kYXRhKTsKJiM0MzsJaWYgKCFkcikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZHItJmd0O2lzX3ByZXNlcnZlZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLCBkbWFfaGFuZGxlLCBhdHRycywgc3RhdGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZHItJmd0O2lzX3ByZXNlcnZlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyk7CiYjNDM7CiYjNDM7dm9pZCBkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAomIzQzOwkJCQlzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2RldnJlcyBtYXRjaF9kYXRhID0geyBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSB9OwomIzQzOwlzdHJ1Y3QgZG1hX2RldnJlcyAqZHI7CiYjNDM7CiYjNDM7CWRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsICZhbXA7bWF0Y2hfZGF0YSk7CiYjNDM7CWlmICghZHIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghZHItJmd0O2lzX3ByZXNlcnZlZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTsKJiM0MzsJZHItJmd0O2lzX3ByZXNlcnZlZCA9IGZhbHNlOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKTsKJiM0MzsKJiM0Mzt2b2lkICpkbWFtX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAomIzQzOwkJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9kZXZyZXMgKmRyOwomIzQzOwl2b2lkICp2YWRkcjsKJiM0MzsKJiM0MzsJZHIgPSBkZXZyZXNfYWxsb2MoZG1hbV9yZWxlYXNlLCBzaXplb2YoKmRyKSwgZ2ZwKTsKJiM0MzsJaWYgKCFkcikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl2YWRkciA9IGRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnAsIGF0dHJzLCBzdGF0ZSk7CiYjNDM7CWlmICghdmFkZHIpIHsKJiM0MzsJCWRldnJlc19mcmVlKGRyKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRyLSZndDt2YWRkciA9IHZhZGRyOwomIzQzOwlkci0mZ3Q7ZG1hX2hhbmRsZSA9ICpkbWFfaGFuZGxlOwomIzQzOwlkci0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CWRyLSZndDthdHRycyA9IGF0dHJzOwomIzQzOwomIzQzOwlkZXZyZXNfYWRkKGRldiwgZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gdmFkZHI7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpOwomIzQzOyNlbmRpZgomIzQzOwogdm9pZCAqZG1hX2FsbG9jX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCiAJCWdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgYXR0cnMpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL3Bvb2wuYyBiL2tlcm5lbC9kbWEvcG9vbC5jCmluZGV4IDJiMmZiYjcwOTI0MjlhLi43ODQ5NjU2ODk3M2ZlYiAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS9wb29sLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9wb29sLmMKQEAgLTMsNiAmIzQzOzMsOSBAQAogICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQwogICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2t1bml0L3Zpc2liaWxpdHkuaCZndDsKJiM0MzsKICNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcC1vcHMuaCZndDsKQEAgLTMwNywzICYjNDM7MzEwLDE3IEBAIGJvb2wgZG1hX2ZyZWVfZnJvbV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKQogCiAJcmV0dXJuIGZhbHNlOwogfQomIzQzOwomIzQzO2Jvb2wgZG1hX2lzX2Zyb21fcG9vbCh2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2wgPSBOVUxMOwomIzQzOwomIzQzOwl3aGlsZSAoKHBvb2wgPSBkbWFfZ3Vlc3NfcG9vbChwb29sLCAwKSkpIHsKJiM0MzsJCWlmICghZ2VuX3Bvb2xfaGFzX2FkZHIocG9vbCwgKHVuc2lnbmVkIGxvbmcpc3RhcnQsIHNpemUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGRtYV9pc19mcm9tX3Bvb2wpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY2NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERNQSBEaXJlY3QgTGl2ZXVwZGF0ZSBQcmVzZXJ2YXRpb24gUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0JiMzOTtzIGFsbCBhYm91dCBhZGRpbmcgc3VwcG9ydCBmb3IgJiMzNDtETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uLCYjMzQ7IHdoaWNoIGlzIGNsZWFybHkgdGllZCBpbnRvIHRoZSBLZXhlYyBIYW5kT3ZlciAoS0hPKSBzeXN0ZW0uIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb25gLCBgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb25gLCBhbmQgYGRtYV9kaXJlY3RfcmVzdG9yZV9hbGxvY2F0aW9uYCwgYWxvbmcgd2l0aCBhIEtVbml0IHRlc3QgaW4gYGtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgdGhlIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYERNQV9MSVZFVVBEQVRFYCBhbmQgYERNQV9MSVZFVVBEQVRFX0tVTklUX1RFU1RgLgoKQnV0IG5vdyB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IGFjY2Vzc2libGUgaXMgdGhpcz8gSXMgdGhpcyBmdW5jdGlvbmFsaXR5IG1lYW50IHRvIGJlIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsLCBvciBhcmUgd2UgZXhwb3NpbmcgdGhpcyB0byB1c2Vyc3BhY2Ugc29tZWhvdz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYWNoYWJpbGl0eSBoZXJlLiBUaGUgZnVuY3Rpb25zICphcmUqIGV4cG9ydGVkLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnIGluIHRlcm1zIG9mIGJlaW5nIHVzZWQuIGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AgYW5kIGBkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzYCBhcmUgZXhwb3J0ZWQsIGZvciBleGFtcGxlLiBTbywgSSBuZWVkIHRvIGtub3cgaWYgYW55IG9mIHRoZW0gYXJlIGFjdHVhbGx5ICp1c2VkKiBieSBhbnl0aGluZywgb3IgaWYgdGhleSYjMzk7cmUganVzdCBiZWluZyBleHBvcnRlZCBmb3IgdGhlIHNha2Ugb2YgY29tcGxldGVuZXNzLiBUaW1lIHRvIGRvIGEgcXVpY2sgc2VhcmNoLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGNhbGxzIHRvIGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AgYW5kIGBkbWFfcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbmAgdG8gZGV0ZXJtaW5lIGl0cyB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTIxMT1pbnQgZG1hX21tYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC0yMTMtI2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjIxNDppbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC0yMTUtXHRcdFx0XHQgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4tLVxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTUxMD1zdGF0aWMgaW5saW5lIGJvb2wgZG1hX25lZWRfdW5tYXAoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC01MTYtI2lmICFkZWZpbmVkKENPTkZJR19ETUFfTElWRVVQREFURSkgfHwgIWRlZmluZWQoQ09ORklHX0hBU19ETUEpXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg6NTE3OnN0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNTE4LVx0XHRcdFx0XHRcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4tLVxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTY3Nz1zdGF0aWMgaW5saW5lIGludCBkbWFfcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC02Nzkte1xuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjY4MDpcdHJldHVybiBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTY4MS1cdFx0XHRcdFx0ICAgICBkbWFfaGFuZGxlLCAwLCBzdGF0ZSk7XG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmM9NjQ0PUVYUE9SVF9TWU1CT0xfR1BMKGRtYV9nZXRfcmVxdWlyZWRfbWFzayk7XG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjQ2LSNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjY0NzppbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY0OC1cdFx0XHRcdCAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NjItfVxua2VybmVsL2RtYS9tYXBwaW5nLmM6NjYzOkVYUE9SVF9TWU1CT0woZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMpO1xua2VybmVsL2RtYS9tYXBwaW5nLmMtNjY0LVxuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jPTY5Mj1pbnQgZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzA2LVxua2VybmVsL2RtYS9tYXBwaW5nLmM6NzA3Olx0cmV0ID0gZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSwgZG1hX2hhbmRsZSwgYXR0cnMsIHN0YXRlKTtcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcwOC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MDYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4KCioqQW5hbHl6aW5nIEtlcm5lbCBGdW5jdGlvbiBVc2FnZSoqCgpBbHJpZ2h0LCB0aGUgY29kZSBkZWZpbmVzIGFuZCBleHBvcnRzIHNvbWV0aGluZywgYnV0IGl0JiMzOTtzIG5vdCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmUgZWxzZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLi4uIGludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIGVpdGhlcjogYSkgYW4gaW5jb21wbGV0ZSBmZWF0dXJlLCBiKSBhIHBpZWNlIG9mIGluZnJhc3RydWN0dXJlIGZvciBmdXR1cmUgdXNlLCBvciBjKSBzb21ldGhpbmcgdGhhdCBoYXMgYmVlbiBhZGRlZCBhbmQgKnNob3VsZCogYmUgdXNlZCwgYnV0IGlzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgY2FsbGVkLiAKCkJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUgcXVpY2tseSBncmVwIHRoZSBjb2RlYmFzZSBmb3IgYGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uYCBhbmQgYGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbmAuIEkgbmVlZCB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgdGhhdCBpdCYjMzk7cyBqdXN0IGJlaW5nIGludm9rZWQgdW5kZXIgYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtZSBvciB0aHJvdWdoIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uLiBDaGVja2luZyB0aGlzIHdpbGwgc2F2ZSBtZSBhIGxvdCBvZiBndWVzc3dvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTY3MD1zdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC02NzYtXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg6Njc3OnN0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNjc4LVx0XHRcdFx0XHRcdCAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCAqc3RhdGUpXG4tLVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jPTUzPXN0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTk0LVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jOjk1Olx0cmV0ID0gZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBhZGRyMSwgc2l6ZSwgaGFuZGxlMSwgXHUwMDI2c3RhdGUpO1xua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTk2LVx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgZXhwZWN0ZWRfcmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQzMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIERNQSBNZW1vcnkgQWxsb2NhdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIGJhc2VkIG9uIHRoZSBpbml0aWFsIHNjYW4sIGl0ICpsb29rcyogbGlrZSB0aGVzZSBgZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uYCBmdW5jdGlvbnMgYXJlIGV4Y2x1c2l2ZWx5IHV0aWxpemVkIHdpdGhpbiB0aGUgS1VuaXQgdGVzdCBsb2NhdGVkIGluIGBrZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmNgLiBUaGF0JiMzOTtzIGEgYml0IHN1cnByaXNpbmcuIEkgZXhwZWN0ZWQgYnJvYWRlciB1c2FnZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBjb2hlcmVudCBETUEgYWxsb2NhdGlvbi4gSSBtZWFuLCBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG9wZXJhdGlvbi4KCkhvd2V2ZXIsIHRoZSBpbW1lZGlhdGUgY29uY2x1c2lvbiB0aGF0IEkgY2FuIGRyYXcgaXMgdGhhdCB0aGV5IGFyZSB1dGlsaXplZCBvbmx5IGluIHRoaXMgb25lIHNwZWNpZmljIGFyZWEuCgpCdXQsIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgc3Ryb25nIGNvbmNsdXNpb24gb3IgYXNzdW1wdGlvbnMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2suICpJcyogdGhhdCB0cnVseSB0aGUgY2FzZT8gSSBuZWVkIHRvIHBlcmZvcm0gYSBtb3JlIHJpZ29yb3VzIHNlYXJjaCB0byBjb25maXJtIHRoYXQgdGhlcmUgaXNuJiMzOTt0IHNvbWUgc3VidGxlLCBpbmRpcmVjdCB1c2FnZSBvciBjYWxsIHBhdGggdGhhdCBJIG1pc3NlZCBpbml0aWFsbHkuIEkgbmVlZCB0byBtYWtlICpzdXJlKiB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBpbnN0YW5jZXMgb2YgYGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbmAgYmVpbmcgY2FsbGVkLCBwZXJoYXBzIHRocm91Z2ggYW4gaW50ZXJtZWRpYXJ5IGZ1bmN0aW9uIG9yIGEgbWFjcm8uIEkgZG9uJiMzOTt0IHdhbnQgdG8ganVtcCB0byB0aGUgd3JvbmcgY29uY2x1c2lvbnMuIEkgbmVlZCBhIGJyb2FkZXIgc2NvcGUgb2YgdGhlIHRlc3QgdG8gbWFrZSBteSBzdGF0ZW1lbnQgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTgyMD1zdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtODI2LVxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjgyNzpzdGF0aWMgaW5saW5lIGludCBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC04MjgtXHRcdFx0XHRcdFx0ICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCAqc3RhdGUpXG4tLVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jPTE0ND1zdGF0aWMgdm9pZCB0ZXN0X2RtYW1fcHJlc2VydmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtMTcwLVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jOjE3MTpcdHJldCA9IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihcdTAwMjZkZXYsIG5vbl9kbWFtX2FkZHIsIHNpemUsIG5vbl9kbWFtX2hhbmRsZSwgXHUwMDI2c3RhdGUpO1xua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTE3Mi1cdEtVTklUX0VYUEVDVF9FUV9NU0codGVzdCwgcmV0LCAtRUlOVkFMLCBcJiMzNDtQcmVzZXJ2aW5nIG5vbi1kZXZyZXMgYWxsb2NhdGlvbiBzaG91bGQgZmFpbFwmIzM0Oyk7XG4tLVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTE4MC1cbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYzoxODE6XHRyZXQgPSBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBhZGRyLCBzaXplLCBoYW5kbGUsIFx1MDAyNnN0YXRlKTtcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy0xODItXHRLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHJldCwgMCwgXCYjMzQ7RmFpbGVkIHRvIHByZXNlcnZlIGRtYW0gYWxsb2NhdGlvblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNDQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRE1BIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbmV3IGZ1bmN0aW9ucywgYW5kIGl0IHNlZW1zIHRoZXkmIzM5O3JlIGV4Y2x1c2l2ZWx5IGNhbGxlZCB3aXRoaW4gdGhlIEtVbml0IHRlc3RzLiBUaGF0IHJhaXNlcyBhIHJlZCBmbGFnLiBTaW5jZSB0aGV5JiMzOTtyZSBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2Ug4oCTIG5vIHN5c3RlbSBjYWxscywgbm8gZHJpdmVyIGludGVncmF0aW9ucyB5ZXQg4oCTIHRoZXkmIzM5O3JlIGNvbXBsZXRlbHkgb2ZmIHRoZSByYWRhciBmb3Igc3l6a2FsbGVyLiBBbmQgd2FpdCwgc3l6a2FsbGVyICpkb2VzbiYjMzk7dCogZnV6eiBLVW5pdCB0ZXN0cyBkaXJlY3RseSBhbnl3YXksIGRvZXMgaXQ/IFNvIGV2ZW4gaWYgaXQgKmNvdWxkKiwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjbG9zZWQtb2ZmIEFQSSByaWdodCBub3cuCgpJIG5lZWQgdG8gYnJvYWRlbiBteSBzY29wZS4gQXJlIHRoZXJlIGFueSBvdGhlciBtb2RpZmllZCBmaWxlcz8gTGV0JiMzOTtzIHNlZS4uLiBhIHdob2xlIHNsZXcgb2YgdGhlbSEgYGluY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oYCwgYGluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaGAsIGBpbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhgLCBgaW5jbHVkZS9saW51eC9raG8vYWJpL2RtYV9hbGxvYy5oYCwgYW5kIHRoZW4gYSBidW5jaCBvZiBmaWxlcyB1bmRlciBga2VybmVsL2RtYS9gOiBgS2NvbmZpZ2AsIGBNYWtlZmlsZWAsIGBjb2hlcmVudC5jYCwgYGNvbnRpZ3VvdXMuY2AsIGBkaXJlY3QuY2AsIGBkaXJlY3RfdGVzdC5jYCwgYG1hcHBpbmcuY2AsIGFuZCBgcG9vbC5jYC4KClJpZ2h0LiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcXVpY2tseS4gSSBuZWVkIHRvIGtub3cgaWYgdGhlc2UgbmV3bHkgYWRkZWQgZnVuY3Rpb25zOiBgZG1hX2lzX2Zyb21fY21hYCwgYGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudGAsIGFuZCBgZG1hX2lzX2Zyb21fcG9vbGAsIGFyZSAqYWN0dWFsbHkqIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBUaGF04oCZcyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtYV9pc19mcm9tX2NtYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg9MTA4PXZvaWQgZG1hX2NvbnRpZ3VvdXNfZWFybHlfZml4dXAocGh5c19hZGRyX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTtcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaDoxMDk6Ym9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpO1xuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oLTExMC0jZWxzZSAvKiBDT05GSUdfRE1BX0NNQSAqL1xuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaD0xNDQ9c3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTQ5LVxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oOjE1MDpzdGF0aWMgaW5saW5lIGJvb2wgZG1hX2lzX2Zyb21fY21hKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oLTE1MS17XG4tLVxua2VybmVsL2RtYS9jb250aWd1b3VzLmM9MTQwPXN0YXRpYyBpbnQgZG1hX2NtYV9jaGVja19hcmVhKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy0xNDgtXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzoxNDk6Ym9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy0xNTAte1xuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTE1Ny19XG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzoxNTg6RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChkbWFfaXNfZnJvbV9jbWEpO1xua2VybmVsL2RtYS9jb250aWd1b3VzLmMtMTU5LVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9MzEzPWludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTMyMy1cdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xua2VybmVsL2RtYS9kaXJlY3QuYzozMjQ6XHRpZiAoZG1hX2lzX2Zyb21fY21hKGRtYV90b19waHlzKGRldiwgZG1hX2hhbmRsZSksIHNpemUpKVxua2VybmVsL2RtYS9kaXJlY3QuYy0zMjUtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmM9NTM9c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtODktXHRcdGt1bml0X2luZm8odGVzdCwgXCYjMzQ7RE1BIGFsbG9jYXRpb24gdXNpbmcgcG9vbCwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQXCYjMzQ7KTtcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYzo5MDpcdH0gZWxzZSBpZiAoZG1hX2lzX2Zyb21fY21hKGRtYV90b19waHlzKFx1MDAyNmRldiwgaGFuZGxlMSksIHNpemUpKSB7XG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtOTEtXHRcdGV4cGVjdGVkX3JldCA9IC1FT1BOT1RTVVBQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ2MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlPyBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQgc2VlbXMgcHJldHR5IGlzb2xhdGVkLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AgYW5kIGBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb25gLCBhcmUgb25seSB1dGlsaXplZCB3aXRoaW4gdGhlIG5ldyBmdW5jdGlvbnMgSSYjMzk7bSBleGFtaW5pbmcgYW5kLCBvZiBjb3Vyc2UsIHRoZSBLVW5pdCB0ZXN0cy4gVGhhdCYjMzk7cyB0aGUgaW1tZWRpYXRlIHNjb3BlLiBCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGFjdHVhbGx5IGNhbGxlZCAqYW55d2hlcmUqIGVsc2Ugd2l0aGluIHRoZSBrZXJuZWwgcHJvcGVyLiBObyBkcml2ZXJzLCBubyBjb3JlIGtlcm5lbCBjb2RlIOKAkyBub3RoaW5nIGlzIGRpcmVjdGx5IGNhbGxpbmcgZWl0aGVyIGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2Agb3IgYGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbmAuCgpTbywgdGhlIG9idmlvdXMgY29uY2x1c2lvbiBpcyB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UuIEJ1dCwgSSBuZWVkIHRvIGJlICpzdXJlKi4gV2FpdCwgY291bGQgdGhlcmUgYmUgYSBjYWxsIHNvbWV3aGVyZSBlbHNlPyBDb3VsZCB0aGlzIGJlIHJlbGF0ZWQgdG8gc29tZSBLZXhlYyBIYW5kT3ZlciBjb2RlPyBUaGlzIGZlZWxzIGZhbWlsaWFyIHNvbWVob3cuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhpcyBpcyBhIGhpZGRlbiBjYWxsIGluIGFub3RoZXIgcGFydCBvZiB0aGUga2VybmVsLiBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIG90aGVyIGluc3RhbmNlcyBvZiBgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnNgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD0yMTE9aW50IGRtYV9tbWFwX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtMjEzLSNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDoyMTQ6aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtMjE1LVx0XHRcdFx0ICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD01MTA9c3RhdGljIGlubGluZSBib29sIGRtYV9uZWVkX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNTE2LSNpZiAhZGVmaW5lZChDT05GSUdfRE1BX0xJVkVVUERBVEUpIHx8ICFkZWZpbmVkKENPTkZJR19IQVNfRE1BKVxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjUxNzpzdGF0aWMgaW5saW5lIGludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTUxOC1cdFx0XHRcdFx0XHRzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD02Nzc9c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNjc5LXtcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDo2ODA6XHRyZXR1cm4gZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC02ODEtXHRcdFx0XHRcdCAgICAgZG1hX2hhbmRsZSwgMCwgc3RhdGUpO1xuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jPTY0ND1FWFBPUlRfU1lNQk9MX0dQTChkbWFfZ2V0X3JlcXVpcmVkX21hc2spO1xuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY0Ni0jaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo2NDc6aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NDgtXHRcdFx0XHQgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjYyLX1cbmtlcm5lbC9kbWEvbWFwcGluZy5jOjY2MzpFWFBPUlRfU1lNQk9MKGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKTtcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY2NC1cbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYz02OTI9aW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcwNi1cbmtlcm5lbC9kbWEvbWFwcGluZy5jOjcwNzpcdHJldCA9IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsIGRtYV9oYW5kbGUsIGF0dHJzLCBzdGF0ZSk7XG5rZXJuZWwvZG1hL21hcHBpbmcuYy03MDgtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU3NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERNQSBMaXZldXBkYXRlIFByZXNlcnZhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGNsYWltcyB0byBicmluZyBpbiBhIG5ldyBBUEkgc3BlY2lmaWNhbGx5IGZvciBETUEgbGl2ZXVwZGF0ZSBwcmVzZXJ2YXRpb24sIHJpZ2h0PyBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLml0JiMzOTtzIG5vdCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmUgeWV0LCBieSBhbnkgZHJpdmVyIG9yIGNvcmUgc3lzdGVtLiBIbW0uIFNvLCBsb2dpY2FsbHksIHRoYXQgbWVhbnMgaXQmIzM5O3MgdG90YWxseSBpbmFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYXQgdGhpcyBzdGFnZS4gQW5kIGlmIGl0JiMzOTtzIG5vdCBleHBvc2VkLCB0aGF0IG1lYW5zIHdlIGNhbiYjMzk7dCBldmVuIHRyeSB0byBmdXp6IGl0LiBOb3QgdmVyeSBleGNpdGluZywgaG9uZXN0bHkuCgpXYWl0Li4uIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGNoYW5nZXMgY3JlZXBpbmcgaW50byBleGlzdGluZyBmdW5jdGlvbnM/IEl04oCZcyBhbHdheXMgdGhlIGhpZGRlbiBzdHVmZiB0aGF0IGdldHMgeW91LiBMZXQmIzM5O3Mgbm90IG1ha2UgYXNzdW1wdGlvbnMuIEJldHRlciB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYGRtYW1fcmVsZWFzZWAgaW4gYGtlcm5lbC9kbWEvbWFwcGluZy5jYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBhbnkgY29sbGF0ZXJhbCBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWFtX3JlbGVhc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDEzPXN0cnVjdCBmZWNfZG1hX2RldnJlcyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDE5OnN0YXRpYyB2b2lkIGZlY19kbWFtX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTQyNj1zdGF0aWMgdm9pZCAqZmVjX2RtYW1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTQzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjQzMjpcdGRyID0gZGV2cmVzX2FsbG9jKGZlY19kbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDMzLVx0aWYgKCFkcilcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYz0zNT1zdHJ1Y3QgZG1hX2RldnJlcyB7XG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNDQtXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo0NTpzdGF0aWMgdm9pZCBkbWFtX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpXG5rZXJuZWwvZG1hL21hcHBpbmcuYy00Ni17XG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmM9ODQ9dm9pZCBkbWFtX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsXG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtODgtXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo4OTpcdFdBUk5fT04oZGV2cmVzX2Rlc3Ryb3koZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFx1MDAyNm1hdGNoX2RhdGEpKTtcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTkwLVx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7XG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmM9MTA4PXZvaWQgKmRtYW1fYWxsb2NfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSxcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYy0xMTMtXG5rZXJuZWwvZG1hL21hcHBpbmcuYzoxMTQ6XHRkciA9IGRldnJlc19hbGxvYyhkbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xua2VybmVsL2RtYS9tYXBwaW5nLmMtMTE1LVx0aWYgKCFkcilcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYz02OTI9aW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY5OS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jOjcwMDpcdGRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFx1MDAyNm1hdGNoX2RhdGEpO1xua2VybmVsL2RtYS9tYXBwaW5nLmMtNzAxLVx0aWYgKCFkcilcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYz03MTY9dm9pZCBkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcyMS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jOjcyMjpcdGRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFx1MDAyNm1hdGNoX2RhdGEpO1xua2VybmVsL2RtYS9tYXBwaW5nLmMtNzIzLVx0aWYgKCFkcilcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYz03MzQ9dm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYy03NDAtXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo3NDE6XHRkciA9IGRldnJlc19hbGxvYyhkbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xua2VybmVsL2RtYS9tYXBwaW5nLmMtNzQyLVx0aWYgKCFkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3ODgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBETUEgUmVsZWFzZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZG1hbV9yZWxlYXNlYCBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyByZWxhdGVkIHRvIERNQSBsaXZlIHVwZGF0ZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgY2hlY2s6CgpgYGBjCiNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEUKCS8qCgkgKiBGcmVlaW5nIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5IGlzIGRhbmdlcm91cyBhcyBpdCBjYW4gY2F1c2UgVUFGIGluIHRoZQoJICogY3VycmVudCBvciBuZXh0IGtlcm5lbCBpZiB0aGUgbWVtb3J5IGlzIHN0aWxsIGJlaW5nIHVzZWQgYnkgdGhlCgkgKiBkZXZpY2UuCgkgKi8KCWlmIChXQVJOX09OKHRoaXMtJmd0O2lzX3ByZXNlcnZlZCkpCgkJcmV0dXJuOwojZW5kaWYKYGBgCgpOb3csIHRoZSBpc3N1ZSBJJiMzOTttIHNlZWluZyBpcyB0aGF0IGB0aGlzLSZndDtpc19wcmVzZXJ2ZWRgIHNlZW1zIHRvICpvbmx5KiBiZSBzZXQgaW4gYGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AsIGFuZCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgKnRoYXQqIGZ1bmN0aW9uIGlzIG5ldmVyIGFjdHVhbGx5IGNhbGxlZCEgVGhlIGFsbG9jYXRpb24gaXMgemVyby1pbml0aWFsaXplZCBieSBgZGV2cmVzX2FsbG9jYCwgc28gdGhlIGZsYWcgd2lsbCBhbHdheXMgYmUgZmFsc2Ugb3IgemVyby4gVGhpcyBtZWFucyB0aGlzIGNoZWNrIHdpbGwgbmV2ZXIgYWN0dWFsbHkgdHJpZ2dlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgZnVuY3Rpb25hbGx5IGRlYWQgaW4gYW55IHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC4gSXQmIzM5O3MgYSBuby1vcCwgYXQgbGVhc3QgZm9yIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLgoKVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9ucyBhbmQgYSBLVW5pdCB0ZXN0LiBIb3dldmVyLCBzaW5jZSB0aGUgbmV3IEFQSSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgdXNlZCAqYW55d2hlcmUqIGluIHRoZSBleGlzdGluZyBjb2RlLCBpdCYjMzk7cyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiBUaGVyZSBhcmUgbm8gY2FsbGVycy4gVGh1cywgZnV6emluZyB0aG9zZSBuZXcgZnVuY3Rpb25zIHdvdWxkbiYjMzk7dCBiZSB2YWx1YWJsZSBzaW5jZSB0aGV5IGFyZW4mIzM5O3QgcGFydCBvZiBhbnkgZXhlY3V0aW9uIHBhdGguCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgYGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudGAgaXMgdXRpbGl6ZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBUaGF0IHNob3VsZCBiZSBhIHF1aWNrIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oPTE2Mz1pbnQgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaC0xNjQtXHRcdHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50ICpyZXQpO1xuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oOjE2NTpib29sIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyKTtcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaC0xNjYtI2Vsc2VcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaD0xNjc9c3RhdGljIGlubGluZSBpbnQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTc1LSNkZWZpbmUgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCB2bWEsIHZhZGRyLCBvcmRlciwgcmV0KSAoMClcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaDoxNzY6I2RlZmluZSBkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCB2YWRkcikgKGZhbHNlKVxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oLTE3Ny1cbi0tXG5rZXJuZWwvZG1hL2NvaGVyZW50LmM9MjI3PWludCBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvcmRlciwgdm9pZCAqdmFkZHIpXG4tLVxua2VybmVsL2RtYS9jb2hlcmVudC5jLTIzMy1cbmtlcm5lbC9kbWEvY29oZXJlbnQuYzoyMzQ6Ym9vbCBkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkcilcbmtlcm5lbC9kbWEvY29oZXJlbnQuYy0yMzUte1xuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jPTY0Nz1pbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NTItXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo2NTM6XHRpZiAoZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgY3B1X2FkZHIpKVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjU0LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTA1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERNQSBBbGxvY2F0aW9uIEF0dHJpYnV0ZXMqKgoKUmlnaHQsIGl0JiMzOTtzIGNsZWFyIHRoZSBjb3JlIGZvY3VzIGhlcmUgaXMgc29sZWx5IHdpdGhpbiBgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgdGhlIGV4Y2x1c2l2ZSBsb2NhdGlvbi4KCkJlZm9yZSBJIGNvbW1pdCB0byB0aGF0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSB2ZXJpZnkgdGhhdCBgZG1hX2lzX2Zyb21fcG9vbGAgaXNuJiMzOTt0IHVzZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgb3RoZXIgcG90ZW50aWFsIGNhbGxzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGJlIGltcGFjdGVkIGJ5IHRoaXMuIEEgdGhvcm91Z2ggZ3JlcCBvciBjb2RlIGluc3BlY3Rpb24gaXMgaW4gb3JkZXIuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBkbWFfaXNfZnJvbV9wb29sYCBpcyBvbmx5IHJlZmVyZW5jZWQgd2l0aGluIHRoYXQgb25lIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtYV9pc19mcm9tX3Bvb2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oPTIyNj1ib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMjI3LVxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oOjIyODpib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaC0yMjktaW50IGRtYV9kaXJlY3Rfc2V0X29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IGNwdV9zdGFydCxcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTMxMz1pbnQgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy0zNDItXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX0NPSEVSRU5UX1BPT0wpIFx1MDAyNlx1MDAyNlxua2VybmVsL2RtYS9kaXJlY3QuYzozNDM6XHQgICAgZG1hX2lzX2Zyb21fcG9vbChjcHVfYWRkciwgc2l6ZSkpXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM0NC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYz01Mz1zdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24oc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy04Ni1cbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYzo4NzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgXHUwMDI2XHUwMDI2IGRtYV9pc19mcm9tX3Bvb2woYWRkcjEsIHNpemUpKSB7XG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtODgtXHRcdGV4cGVjdGVkX3JldCA9IC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9kbWEvcG9vbC5jPTMwMD1ib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSlcbi0tXG5rZXJuZWwvZG1hL3Bvb2wuYy0zMTMtXG5rZXJuZWwvZG1hL3Bvb2wuYzozMTQ6Ym9vbCBkbWFfaXNfZnJvbV9wb29sKHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9kbWEvcG9vbC5jLTMxNS17XG4tLVxua2VybmVsL2RtYS9wb29sLmMtMzI1LX1cbmtlcm5lbC9kbWEvcG9vbC5jOjMyNjpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGRtYV9pc19mcm9tX3Bvb2wpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY3MwoJCQkJCQkJb3V0cHV0OiAxMTUKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgYWZ0ZXIgcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIGBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb25gIGZ1bmN0aW9uIGFuZCB0aGUgYXNzb2NpYXRlZCBLVW5pdCB0ZXN0LiBUaGlzIG1lYW5zIHRoZSBwcmltYXJ5IGltcGFjdCBpcyB0aGUgYWRkaXRpb24gb2YgYW4gQVBJIHRoYXQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsIGZyb20gdGhlIGNvbnRleHQsIGlzbiYjMzk7dCBhY3R1YWxseSAqdXNlZCogYXQgdGhpcyBzdGFnZSwgYWxvbmcgd2l0aCBhIHRlc3QgZm9yIHRoYXQgdW51c2VkIEFQSS4KCkdpdmVuIHRoZSBsaW1pdGVkIHNjb3BlIGFuZCB0aGUgbGFjayBvZiBhbnkgYWN0dWFsIHJ1bnRpbWUgdXNhZ2Ugb2YgdGhlIGFkZGVkIGZ1bmN0aW9uLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBmdXp6aW5nIHRoaXMgcGF0Y2ggd291bGQgYmUgYSB3YXN0ZSBvZiByZXNvdXJjZXMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHRlc3RpbmcgYW4gdW51c2VkIGZ1bmN0aW9uIGluIGlzb2xhdGlvbiwgYW5kIGFueSBmYWlsdXJlcyBoZXJlIHdvdWxkbiYjMzk7dCBuZWNlc3NhcmlseSByZXZlYWwgbWVhbmluZ2Z1bCB2dWxuZXJhYmlsaXRpZXMgb3IgaW50ZWdyYXRpb24gaXNzdWVzIGluIHRoZSB3aWRlciBzeXN0ZW0uCgpUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzICpub3QqIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgdGhlIGBXb3J0aEZ1enppbmdgIHByb3BlcnR5IGFzIGBmYWxzZWAsIGFuZCBkb2N1bWVudCB0aGlzIHJlYXNvbmluZyBleHBsaWNpdGx5LCBiZWNhdXNlIGV2ZW4gdGhvdWdoIEtVbml0IHRlc3RzIGFyZSBpbXBvcnRhbnQsIHRoZXkgZG9uJiMzOTt0IGFsd2F5cyBpbmRpY2F0ZSBpZiBzb21ldGhpbmcgbmVlZHMgdG8gYmUgZnV6emVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uIChlLmcuLCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycywgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKSBhbmQgYSBLVW5pdCB0ZXN0IGZvciBpdC4gSG93ZXZlciwgdGhlIG5ldyBBUEkgaXMgbm90IGN1cnJlbnRseSBjYWxsZWQgYnkgYW55IGRyaXZlciBvciBjb3JlIGtlcm5lbCBjb2RlIG91dHNpZGUgb2YgdGhlIEtVbml0IHRlc3QgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBUEkgZm9yIERNQSBkaXJlY3QgbGl2ZXVwZGF0ZSBwcmVzZXJ2YXRpb24gKGUuZy4sIGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzLCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24pIGFuZCBhIEtVbml0IHRlc3QgZm9yIGl0LiBIb3dldmVyLCB0aGUgbmV3IEFQSSBpcyBub3QgY3VycmVudGx5IGNhbGxlZCBieSBhbnkgZHJpdmVyIG9yIGNvcmUga2VybmVsIGNvZGUgb3V0c2lkZSBvZiB0aGUgS1VuaXQgdGVzdCBpdHNlbGYuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6MTU6MDguOTMxNDc3MjE0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3MDg5NzExMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uIChlLmcuLCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycywgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKSBhbmQgYSBLVW5pdCB0ZXN0IGZvciBpdC4gSG93ZXZlciwgdGhlIG5ldyBBUEkgaXMgbm90IGN1cnJlbnRseSBjYWxsZWQgYnkgYW55IGRyaXZlciBvciBjb3JlIGtlcm5lbCBjb2RlIG91dHNpZGUgb2YgdGhlIEtVbml0IHRlc3QgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6MTU6MDguOTMxNDg4MzI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3NjY4OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2YxY2ExOTc2ODBmNmU3ZWJiZjI0NGY3MjgyY2QzYjA0NjQ1YWM1N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCA5IDE3OjE1OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oIGIvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmhcXG5pbmRleCBjMjQ5OTEyNDU2Zjk2My4uMGVmZTJiYzFhODE1MjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1kaXJlY3QuaFxcbkBAIC0xNDEsNiArMTQxLDM1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkbWFfY2FwYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUsXFxuIHU2NCBkbWFfZGlyZWN0X2dldF9yZXF1aXJlZF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSxcXG4gXFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIGF0dHJzKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcXG4raW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKTtcXG4rdm9pZCBkbWFfZGlyZWN0X3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSk7XFxuK3ZvaWQgKmRtYV9kaXJlY3RfcmVzdG9yZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gdm9pZCBkbWFfZGlyZWN0X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsXFxuIFxcdFxcdGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGxvbmcgYXR0cnMpO1xcbiBzdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcXG5pbmRleCA2YTE4MzJhNzNjYWQ4ZC4uYjEzZTVlZWJlNmQzYWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXFxuQEAgLTEwNiw2ICsxMDYsNyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKTtcXG4gdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKTtcXG4gXFxuIHZvaWQgZG1hX2NvbnRpZ3VvdXNfZWFybHlfZml4dXAocGh5c19hZGRyX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG4rYm9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpO1xcbiAjZWxzZSAvKiBDT05GSUdfRE1BX0NNQSAqL1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbWEgKmRldl9nZXRfY21hX2FyZWEoc3RydWN0IGRldmljZSAqZGV2KVxcbiB7XFxuQEAgLTE0NSw2ICsxNDYsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4ge1xcbiBcXHRfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTtcXG4gfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4gI2VuZGlmIC8qIENPTkZJR19ETUFfQ01BKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfRE1BX0RFQ0xBUkVfQ09IRVJFTlRcXG5AQCAtMTU2LDYgKzE2Miw3IEBAIGludCBkbWFfYWxsb2NfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzc2l6ZV90IHNpemUsXFxuIGludCBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvcmRlciwgdm9pZCAqdmFkZHIpO1xcbiBpbnQgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0dm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLCBpbnQgKnJldCk7XFxuK2Jvb2wgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKVxcbkBAIC0xNjYsNiArMTczLDggQEAgc3RhdGljIGlubGluZSBpbnQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gI2RlZmluZSBkbWFfYWxsb2NfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIHJldCkgKDApXFxuICNkZWZpbmUgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBvcmRlciwgdmFkZHIpICgwKVxcbiAjZGVmaW5lIGRtYV9tbWFwX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgdm1hLCB2YWRkciwgb3JkZXIsIHJldCkgKDApXFxuKyNkZWZpbmUgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgdmFkZHIpIChmYWxzZSlcXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfcmVsZWFzZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2KSB7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19ETUFfREVDTEFSRV9DT0hFUkVOVCAqL1xcbiBcXG5AQCAtMjE2LDYgKzIyNSw3IEBAIHN0cnVjdCBwYWdlICpkbWFfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdGJvb2wgKCpwaHlzX2FkZHJfb2spKHN0cnVjdCBkZXZpY2UgKiwgcGh5c19hZGRyX3QsIHNpemVfdCkpO1xcbiBib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSk7XFxuIFxcbitib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKTtcXG4gaW50IGRtYV9kaXJlY3Rfc2V0X29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IGNwdV9zdGFydCxcXG4gXFx0XFx0ZG1hX2FkZHJfdCBkbWFfc3RhcnQsIHU2NCBzaXplKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaFxcbmluZGV4IGRiOGFiMjRhNTRmNGEzLi40YzBjNDI4YjZiMWNiNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhcXG5AQCAtMjEwLDYgKzIxMCwyMyBAQCB2b2lkICpkbWFfdm1hcF9ub25jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIHZvaWQgZG1hX3Z1bm1hcF9ub25jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpO1xcbiBpbnQgZG1hX21tYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRzaXplX3Qgc2l6ZSwgc3RydWN0IHNnX3RhYmxlICpzZ3QpO1xcbisjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXFxuK2ludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSk7XFxuK3ZvaWQgZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSk7XFxuK3ZvaWQgKmRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpO1xcbitpbnQgZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuK1xcdFxcdFxcdFxcdCAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xcbit2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuK1xcdFxcdFxcdFxcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCBzdGF0ZSk7XFxuK3ZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpO1xcbisjZW5kaWZcXG4gI2Vsc2UgLyogQ09ORklHX0hBU19ETUEgKi9cXG4gc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcXG5AQCAtNDk2LDYgKzUxMyw0NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1hX25lZWRfdW5tYXAoc3RydWN0IGRldmljZSAqZGV2KVxcbiB9XFxuICNlbmRpZiAvKiAhQ09ORklHX0hBU19ETUEgfHwgIUNPTkZJR19ETUFfTkVFRF9TWU5DICovXFxuIFxcbisjaWYgIWRlZmluZWQoQ09ORklHX0RNQV9MSVZFVVBEQVRFKSB8fCAhZGVmaW5lZChDT05GSUdfSEFTX0RNQSlcXG4rc3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSlcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCBzdGF0ZSlcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcXG4re1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHN0cnVjdCBwYWdlICpkbWFfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4gXFx0XFx0ZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBnZnBfdCBnZnApO1xcbiB2b2lkIGRtYV9mcmVlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHN0cnVjdCBwYWdlICpwYWdlLFxcbkBAIC02MTgsNiArNjc0LDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdFxcdChnZnAgXFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDApO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBkbWFfcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRtYV9oYW5kbGUsIDAsIHN0YXRlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXFxuK3tcXG4rXFx0ZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkICpkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwLCB1NjQgc3RhdGUpXFxuK3tcXG4rXFx0cmV0dXJuIGRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAoZ2ZwIFxcdTAwMjYgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RhdGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4gXFx0XFx0dm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSlcXG4ge1xcbkBAIC03NDcsNiArODI0LDI5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hbV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbiBcXHRcXHRcXHQoZ2ZwIFxcdTAwMjYgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZG1hX2hhbmRsZSwgMCwgc3RhdGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZG1hbV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB1NjQgc3RhdGUpXFxuK3tcXG4rXFx0ZG1hbV91bnByZXNlcnZlX2FsbG9jYXRpb24oZGV2LCBjcHVfYWRkciwgc2l6ZSwgZG1hX2hhbmRsZSwgc3RhdGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBnZnBfdCBnZnAsIHU2NCBzdGF0ZSlcXG4re1xcbitcXHRyZXR1cm4gZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgKGdmcCBcXHUwMDI2IF9fR0ZQX05PV0FSTikgPyBETUFfQVRUUl9OT19XQVJOIDogMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdGF0ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX3djKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdFxcdFxcdCBkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3QgZ2ZwKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFlMzhjZjFhMWZjOTllXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFxcbkBAIC0wLDAgKzEsMzIgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfTElOVVhfS0hPX0FCSV9ETUFfQUxMT0NfSFxcbisjZGVmaW5lIF9MSU5VWF9LSE9fQUJJX0RNQV9BTExPQ19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKy8qKlxcbisgKiBET0M6IERNQSBBbGxvYyBBQklcXG4rICpcXG4rICogVGhpcyBoZWFkZXIgZGVmaW5lcyB0aGUgc3RydWN0dXJlcyB1c2VkIHRvIHNlcmlhbGl6ZSB0aGUgc3RhdGUgb2YgRE1BXFxuKyAqIGFsbG9jYXRpb25zLCBkb25lIGJ5IGRldmljZSBkcml2ZXIsIGFjcm9zcyBhIExpdmUgVXBkYXRlLlxcbisgKlxcbisgKiBPbmx5IERNQSBhbGxvY2F0aW9ucyBkb25lIHRocm91Z2ggZG1hLWRpcmVjdCB0aGF0IGFyZSBjb250aWd1b3VzIGFuZFxcbisgKiBhbGxvY2F0ZWQgdXNpbmcgYWxsb2NfcGFnZSBhcmUgc3VwcG9ydGVkLlxcbisgKi9cXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgZG1hX2FsbG9jX3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgb2YgYSBzaW5nbGUgRE1BIGFsbG9jYXRpb25cXG4rICogQHBhZ2VfcGh5czogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcHJlc2VydmVkIHBhZ2VzXFxuKyAqIEBzaXplOiBTaXplIG9mIHRoZSBETUEgYWxsb2NhdGlvblxcbisgKiBAYXR0cnM6IERNQSBhbGxvY2F0aW9uIGF0dHJpYnV0ZXNcXG4rICogQGZvcmNlX2RlY3J5cHRlZDogV2hldGhlciB0aGUgbWVtb3J5IGlzIGZvcmNlIGRlY3J5cHRlZCBpbiBwcmV2aW91cyBrZXJuZWxcXG4rICovXFxuK3N0cnVjdCBkbWFfYWxsb2Nfc2VyIHtcXG4rXFx0dTY0IHBhZ2VfcGh5cztcXG4rXFx0dTY0IHNpemU7XFxuK1xcdHU2NCBhdHRycztcXG4rXFx0dTggZm9yY2VfZGVjcnlwdGVkO1xcbitcXHR1OCBwYWRkaW5nWzddO1xcbit9IF9fcGFja2VkO1xcbitcXG4rI2VuZGlmIC8qIF9MSU5VWF9LSE9fQUJJX0RNQV9BTExPQ19IICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvS2NvbmZpZyBiL2tlcm5lbC9kbWEvS2NvbmZpZ1xcbmluZGV4IGJmZWYyMWI0YTlhZTdkLi40OGJjNzRhZjU1MWEzMSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZG1hL0tjb25maWdcXG4rKysgYi9rZXJuZWwvZG1hL0tjb25maWdcXG5AQCAtMjY1LDMgKzI2NSwxNSBAQCBjb25maWcgRE1BX01BUF9CRU5DSE1BUktcXG4gXFx0ICBwZXJmb3JtYW5jZSBvZiBkbWFfKHVuKW1hcF9wYWdlLlxcbiBcXG4gXFx0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZG1hL2RtYV9tYXBfYmVuY2htYXJrLmNcXG4rXFxuK2NvbmZpZyBETUFfTElWRVVQREFURVxcbitcXHRib29sIFxcXCJFbmFibGUgcHJlc2VydmF0aW9uIG9mIERNQSBkaXJlY3QgYWxsb2NhdGlvbnNcXFwiXFxuK1xcdGRlcGVuZHMgb24gTElWRVVQREFURVxcbitcXG4rY29uZmlnIERNQV9MSVZFVVBEQVRFX0tVTklUX1RFU1RcXG4rXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3QgZm9yIERNQSBkaXJlY3QgbGl2ZXVwZGF0ZSBwcmVzZXJ2YXRpb25cXFwiXFxuK1xcdGRlcGVuZHMgb24gS1VOSVRcXG4rXFx0ZGVwZW5kcyBvbiBETUFfTElWRVVQREFURVxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBidWlsZHMgdGhlIEtVbml0IHRlc3RzIGZvciB0aGUgRE1BIGRpcmVjdCBsaXZldXBkYXRlXFxuK1xcdCAgcHJlc2VydmF0aW9uIGFuZCByZXN0b3JhdGlvbiBsb2dpYy5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9NYWtlZmlsZSBiL2tlcm5lbC9kbWEvTWFrZWZpbGVcXG5pbmRleCA2OTc3MDMzNDQ0YTM3NS4uMDM3MDM1NDJlZTc5YmMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2RtYS9NYWtlZmlsZVxcbisrKyBiL2tlcm5lbC9kbWEvTWFrZWZpbGVcXG5AQCAtMTAsMyArMTAsNCBAQCBvYmotJChDT05GSUdfU1dJT1RMQilcXHRcXHRcXHQrPSBzd2lvdGxiLm9cXG4gb2JqLSQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKVxcdFxcdCs9IHBvb2wub1xcbiBvYmotJChDT05GSUdfTU1VKVxcdFxcdFxcdCs9IHJlbWFwLm9cXG4gb2JqLSQoQ09ORklHX0RNQV9NQVBfQkVOQ0hNQVJLKVxcdFxcdCs9IG1hcF9iZW5jaG1hcmsub1xcbitvYmotJChDT05GSUdfRE1BX0xJVkVVUERBVEVfS1VOSVRfVEVTVClcXHQrPSBkaXJlY3RfdGVzdC5vXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29oZXJlbnQuYyBiL2tlcm5lbC9kbWEvY29oZXJlbnQuY1xcbmluZGV4IGJjZGMwZjc2ZDJlODBhLi43NmNiZTExZTFmOTBlNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZG1hL2NvaGVyZW50LmNcXG4rKysgYi9rZXJuZWwvZG1hL2NvaGVyZW50LmNcXG5AQCAtMjMxLDYgKzIzMSwxNyBAQCBpbnQgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb3JkZXIsIHZvaWQgKnZhZGRyKVxcbiBcXHRyZXR1cm4gX19kbWFfcmVsZWFzZV9mcm9tX2NvaGVyZW50KG1lbSwgb3JkZXIsIHZhZGRyKTtcXG4gfVxcbiBcXG4rYm9vbCBkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2X2dldF9jb2hlcmVudF9tZW1vcnkoZGV2KTtcXG4rXFxuK1xcdGlmIChtZW0gXFx1MDAyNlxcdTAwMjYgdmFkZHIgXFx1MDAzZT0gbWVtLVxcdTAwM2V2aXJ0X2Jhc2UgXFx1MDAyNlxcdTAwMjYgdmFkZHIgXFx1MDAzY1xcbitcXHRcXHQgICAobWVtLVxcdTAwM2V2aXJ0X2Jhc2UgKyAoKGRtYV9hZGRyX3QpbWVtLVxcdTAwM2VzaXplIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19kbWFfbW1hcF9mcm9tX2NvaGVyZW50KHN0cnVjdCBkbWFfY29oZXJlbnRfbWVtICptZW0sXFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsIGludCAqcmV0KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jIGIva2VybmVsL2RtYS9jb250aWd1b3VzLmNcXG5pbmRleCAwM2Y1MmJkMTcxMjA2Mi4uNmQwY2Y5Yzc1MjhjYjUgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmNcXG4rKysgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xcbkBAIC0zNyw2ICszNyw4IEBAXFxuIFxcbiAjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJjbWE6IFxcXCIgZm10XFxuIFxcbisjaW5jbHVkZSBcXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2VcXG5AQCAtMTMwLDYgKzEzMiwzMSBAQCBzdHJ1Y3QgY21hICpkZXZfZ2V0X2NtYV9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZ2V0X2NtYV9hcmVhKTtcXG4gXFxuK3N0cnVjdCBkbWFfY21hX2NoZWNrX2RhdGEge1xcbitcXHRwaHlzX2FkZHJfdCBzdGFydDtcXG4rXFx0cGh5c19hZGRyX3QgZW5kO1xcbit9O1xcbitcXG4rc3RhdGljIGludCBkbWFfY21hX2NoZWNrX2FyZWEoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfY21hX2NoZWNrX2RhdGEgKmNoayA9IGRhdGE7XFxuK1xcbitcXHRpZiAoY21hX2ludGVyc2VjdHMoY21hLCBjaGstXFx1MDAzZXN0YXJ0LCBjaGstXFx1MDAzZWVuZCkpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rYm9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9jbWFfY2hlY2tfZGF0YSBjaGsgPSB7XFxuK1xcdFxcdC5zdGFydCA9IHBoeXMsXFxuK1xcdFxcdC5lbmQgPSBwaHlzICsgc2l6ZSAtIDEsXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gY21hX2Zvcl9lYWNoX2FyZWEoZG1hX2NtYV9jaGVja19hcmVhLCBcXHUwMDI2Y2hrKSAhPSAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoZG1hX2lzX2Zyb21fY21hKTtcXG4rXFxuICNpZmRlZiBDT05GSUdfRE1BX05VTUFfQ01BXFxuIFxcbiBzdGF0aWMgc3RydWN0IGNtYSAqZG1hX2NvbnRpZ3VvdXNfbnVtYV9hcmVhW01BWF9OVU1OT0RFU107XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvZGlyZWN0LmMgYi9rZXJuZWwvZG1hL2RpcmVjdC5jXFxuaW5kZXggZWM4ODdmNDQzNzQxODMuLjExN2ViYWU4YTgxZmExIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9kbWEvZGlyZWN0LmNcXG4rKysgYi9rZXJuZWwvZG1hL2RpcmVjdC5jXFxuQEAgLTYsNiArNiw4IEBAXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2UgLyogZm9yIG1heF9wZm4gKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLW1hcC1vcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcXHUwMDNlXFxuQEAgLTMwNyw2ICszMDksMTkzIEBAIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcXG4raW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYWxsb2Nfc2VyICpzZXI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWtob19pc19lbmFibGVkKCkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xcbitcXHRpZiAoZG1hX2lzX2Zyb21fY21hKGRtYV90b19waHlzKGRldiwgZG1hX2hhbmRsZSksIHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRpZiAoaXNfc3dpb3RsYl9mb3JfYWxsb2MoZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKChhdHRycyBcXHUwMDI2IERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfRE1BX0FMTE9DKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWRldl9pc19kbWFfY29oZXJlbnQoZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9HTE9CQUxfUE9PTCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGRtYV9pc19mcm9tX3Bvb2woY3B1X2FkZHIsIHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRzZXIgPSBraG9fYWxsb2NfcHJlc2VydmUoc2l6ZW9mKCpzZXIpKTtcXG4rXFx0aWYgKElTX0VSUihzZXIpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihzZXIpO1xcbitcXG4rXFx0c2VyLVxcdTAwM2VwYWdlX3BoeXMgPSBkbWFfdG9fcGh5cyhkZXYsIGRtYV9oYW5kbGUpO1xcbitcXHRzZXItXFx1MDAzZWZvcmNlX2RlY3J5cHRlZCA9IGZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpO1xcbitcXHRzZXItXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXHRzZXItXFx1MDAzZWF0dHJzID0gKGF0dHJzIFxcdTAwMjYgfkRNQV9BVFRSX05PX1dBUk4pO1xcbitcXG4rXFx0cmV0ID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHBoeXNfdG9fcGFnZShzZXItXFx1MDAzZXBhZ2VfcGh5cyksXFxuK1xcdFxcdFxcdFxcdCAxIFxcdTAwM2NcXHUwMDNjIGdldF9vcmRlcihzaXplKSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0a2hvX3VucHJlc2VydmVfZnJlZShzZXIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQqc3RhdGUgPSB2aXJ0X3RvX3BoeXMoc2VyKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9hbGxvY19zZXIgKnNlcjtcXG4rXFxuK1xcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2VyID0gcGh5c190b192aXJ0KHN0YXRlKTtcXG4rXFx0a2hvX3VucHJlc2VydmVfcGFnZXMocGh5c190b19wYWdlKHNlci1cXHUwMDNlcGFnZV9waHlzKSxcXG4rXFx0XFx0XFx0ICAgICAxIFxcdTAwM2NcXHUwMDNjIGdldF9vcmRlcihzZXItXFx1MDAzZXNpemUpKTtcXG4rXFx0a2hvX3VucHJlc2VydmVfZnJlZShzZXIpO1xcbit9XFxuK1xcbit2b2lkICpkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxcbit7XFxuK1xcdGJvb2wgcmVtYXAgPSBmYWxzZSwgc2V0X3VuY2FjaGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCBkbWFfYWxsb2Nfc2VyICpzZXIgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0dm9pZCAqY3B1X2FkZHIgPSBOVUxMO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRzZXIgPSBwaHlzX3RvX3ZpcnQoc3RhdGUpO1xcbitcXHRwYWdlID0gcGh5c190b19wYWdlKHNlci1cXHUwMDNlcGFnZV9waHlzKTtcXG4rXFxuK1xcdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xcbitcXHRpZiAoc2l6ZSAhPSBzZXItXFx1MDAzZXNpemUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0V0FSTl9PTl9PTkNFKChhdHRycyBcXHUwMDI2IH5ETUFfQVRUUl9OT19XQVJOKSAhPSBzZXItXFx1MDAzZWF0dHJzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhbm5vdCBmcmVlIHRoZSByZXN0b3JlZCBwYWdlcyBvbiBlcnJvciBoZXJlIGFzIHRoZXNlIG1pZ2h0IGJlIGluIHVzZVxcbitcXHQgKiBieSBhIGRldmljZSB3aXRoIGRpcmVjdCBhbGxvY2F0aW9uIGluIHRoZSBwcmV2aW91cyBrZXJuZWwuXFxuK1xcdCAqL1xcbitcXHRpZiAoaXNfc3dpb3RsYl9mb3JfYWxsb2MoZGV2KSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAoKGF0dHJzIFxcdTAwMjYgRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpIHtcXG4rXFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX0RNQV9BTExPQykpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9HTE9CQUxfUE9PTCkpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0XFx0c2V0X3VuY2FjaGVkID0gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfRE1BX1NFVF9VTkNBQ0hFRCk7XFxuK1xcdFxcdHJlbWFwID0gSVNfRU5BQkxFRChDT05GSUdfRE1BX0RJUkVDVF9SRU1BUCk7XFxuK1xcdFxcdGlmICghc2V0X3VuY2FjaGVkIFxcdTAwMjZcXHUwMDI2ICFyZW1hcClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChQYWdlSGlnaE1lbShwYWdlKSkge1xcbitcXHRcXHRyZW1hcCA9IHRydWU7XFxuK1xcdFxcdHNldF91bmNhY2hlZCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZW1hcHBpbmcgd2lsbCBiZSBibG9ja2luZyBzbyByZXR1cm4gZXJyb3IuIFRoZSBwcmVzZXJ2ZWQgbWVtb3J5XFxuK1xcdCAqIG1pZ2h0IGJlIGFscmVhZHkgZGVjcnlwdGVkIGluIHRoZSBwcmV2aW91cyBrZXJuZWwsIGJ1dCB0aGUgZGVjcnlwdGlvblxcbitcXHQgKiBjYWxsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIG5vbi1ibG9ja2luZyBzbyByZXR1cm4gZXJyb3IgYWx3YXlzIGlmXFxuK1xcdCAqIGRlY3J5cHRpb24gaXMgcmVxdWlyZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoKHJlbWFwIHx8IGZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgZG1hX2RpcmVjdF91c2VfcG9vbChkZXYsIGdmcCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRW5jcnlwdGlvbiBzY2hlbWUgY2hhbmdlZCBiZXR3ZWVuIHR3byBrZXJuZWxzIGFuZCB0aGlzIG1pZ2h0IGNhdXNlXFxuK1xcdCAqIGlzc3VlcyBpZiBkZXZpY2UvZHJpdmVyIGlzIG5vdCBoYW5kbGluZyBpdCBwcm9wZXJseS5cXG4rXFx0ICovXFxuK1xcdFdBUk5fT05fT05DRShzZXItXFx1MDAzZWZvcmNlX2RlY3J5cHRlZCAhPSBmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBhcmNoX2RtYV9wcmVwX2NvaGVyZW50KCkgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGFueSBjYWNoZSBsaW5lcyBmcm9tXFxuK1xcdCAqIHRoZSBwcmV2aW91cyBrZXJuZWwsIGlmIHRoZSBkZXZpY2Ugd2FzIGNvaGVyZW50IHByZXZpb3VzbHkgb3IgY2FjaGVkXFxuK1xcdCAqIG1hcHBpbmcgaW4gdGhpcyBrZXJuZWwgZHVyaW5nIGluaXQgYXJlIG5vdCBwcm9ibGVtYXRpYyBmb3JcXG4rXFx0ICogbm9uLWNvaGVyZW50IGFsbG9jYXRpb25zLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJlbWFwKSB7XFxuK1xcdFxcdHBncHJvdF90IHByb3QgPSBkbWFfcGdwcm90KGRldiwgUEFHRV9LRVJORUwsIGF0dHJzKTtcXG4rXFxuK1xcdFxcdGlmIChmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSlcXG4rXFx0XFx0XFx0cHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQocHJvdCk7XFxuK1xcbitcXHRcXHRhcmNoX2RtYV9wcmVwX2NvaGVyZW50KHBhZ2UsIHNpemUpO1xcbitcXG4rXFx0XFx0Y3B1X2FkZHIgPSBkbWFfY29tbW9uX2NvbnRpZ3VvdXNfcmVtYXAocGFnZSwgc2l6ZSwgcHJvdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuK1xcdFxcdGlmICghY3B1X2FkZHIpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRjcHVfYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTtcXG4rXFx0XFx0aWYgKGRtYV9zZXRfZGVjcnlwdGVkKGRldiwgY3B1X2FkZHIsIHNpemUpKSB7XFxuK1xcdFxcdFxcdGNwdV9hZGRyID0gTlVMTDtcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNldF91bmNhY2hlZCkge1xcbitcXHRcXHRhcmNoX2RtYV9wcmVwX2NvaGVyZW50KHBhZ2UsIHNpemUpO1xcbitcXHRcXHRjcHVfYWRkciA9IGFyY2hfZG1hX3NldF91bmNhY2hlZChjcHVfYWRkciwgc2l6ZSk7XFxuK1xcdFxcdGlmIChJU19FUlIoY3B1X2FkZHIpKSB7XFxuK1xcdFxcdFxcdGNwdV9hZGRyID0gTlVMTDtcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0KmRtYV9oYW5kbGUgPSBwaHlzX3RvX2RtYV9kaXJlY3QoZGV2LCBzZXItXFx1MDAzZXBhZ2VfcGh5cyk7XFxuK1xcbitlcnI6XFxuK1xcdFdBUk5fT04oIWtob19yZXN0b3JlX3BhZ2VzKHNlci1cXHUwMDNlcGFnZV9waHlzLFxcbitcXHRcXHRcXHRcXHQgICAxIFxcdTAwM2NcXHUwMDNjIGdldF9vcmRlcihzZXItXFx1MDAzZXNpemUpKSk7XFxuK1xcdGtob19yZXN0b3JlX2ZyZWUoc2VyKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERNQSBkaXJlY3QgQVBJIGV4cGVjdHMgaGlnaC1vcmRlciBhbGxvY2F0aW9ucywgc28gc2V0IHJlZmNvdW50IG9mXFxuK1xcdCAqIHRhaWwgcGFnZXMgdG8gemVyby5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9ICgxIFxcdTAwM2NcXHUwMDNjIGdldF9vcmRlcihzaXplKSkgLSAxOyBpIFxcdTAwM2UgMDsgLS1pKVxcbitcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XFxuK1xcbitcXHRyZXR1cm4gY3B1X2FkZHI7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiB2b2lkIGRtYV9kaXJlY3RfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbiBcXHRcXHR2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdW5zaWduZWQgbG9uZyBhdHRycylcXG4ge1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMgYi9rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODQwM2VjNDc4MDdlOFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmNcXG5AQCAtMCwwICsxLDIwOCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBLVW5pdCB0ZXN0IGZvciBETUEgYWxsb2NhdGlvbiBsaXZlIHVwZGF0ZSBwcmVzZXJ2YXRpb24uXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2t1bml0L3Rlc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNja3VuaXQvc3RhdGljX3N0dWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXAtb3BzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWRpcmVjdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuK1xcbitzdGF0aWMgY29uc3Qgc2l6ZV90IGRtYV90ZXN0X3NpemVzW10gPSB7XFxuK1xcdDEyOCxcXG4rXFx0UEFHRV9TSVpFLFxcbitcXHQyICogUEFHRV9TSVpFLFxcbitcXHQzICogUEFHRV9TSVpFLFxcbitcXHQ4ICogUEFHRV9TSVpFLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgZG1hX3NpemVfZGVzYyhjb25zdCBzaXplX3QgKnNpemUsIGNoYXIgKmRlc2MpXFxuK3tcXG4rXFx0c25wcmludGYoZGVzYywgS1VOSVRfUEFSQU1fREVTQ19TSVpFLCBcXFwic2l6ZT0lenVcXFwiLCAqc2l6ZSk7XFxuK31cXG4rXFxuK0tVTklUX0FSUkFZX1BBUkFNKGRtYV9zaXplLCBkbWFfdGVzdF9zaXplcywgZG1hX3NpemVfZGVzYyk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHBhZ2UgKm1vY2tfa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBoeXNfdG9fcGFnZShwaHlzKTtcXG4rXFxuK1xcdGlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsIG5yX3BhZ2VzKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwYWdlLCBucl9wYWdlcyk7XFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGZvbGlvICptb2NrX2tob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpXFxuK3tcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGh5c190b19wYWdlKHBoeXMpKTtcXG4rXFxuK1xcdGlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsICgxIFxcdTAwM2NcXHUwMDNjIGZvbGlvX29yZGVyKGZvbGlvKSkpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGtob191bnByZXNlcnZlX2ZvbGlvKGZvbGlvKTtcXG4rXFx0cmV0dXJuIGZvbGlvO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24oc3RydWN0IGt1bml0ICp0ZXN0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCBjb2hlcmVudCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgYXRvbWljLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2MgZ2V0X29yZGVyKHNpemUpO1xcbitcXHRkbWFfYWRkcl90IGhhbmRsZTEsIGhhbmRsZTI7XFxuK1xcdGludCByZXQsIGV4cGVjdGVkX3JldCA9IDA7XFxuK1xcdHN0cnVjdCBkZXZpY2UgZGV2ID0gezB9O1xcbitcXHRnZnBfdCBnZnAgPSBHRlBfS0VSTkVMO1xcbitcXHR2b2lkICphZGRyMSwgKmFkZHIyO1xcbitcXHR1NjQgc3RhdGU7XFxuK1xcbitcXHRrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9wYWdlcywgbW9ja19raG9fcmVzdG9yZV9wYWdlcyk7XFxuK1xcdGt1bml0X2FjdGl2YXRlX3N0YXRpY19zdHViKHRlc3QsIGtob19yZXN0b3JlX2ZvbGlvLCBtb2NrX2tob19yZXN0b3JlX2ZvbGlvKTtcXG4rXFxuK1xcdGRldmljZV9pbml0aWFsaXplKFxcdTAwMjZkZXYpO1xcbitcXHRkZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soNjQpO1xcbitcXHRkZXYuZG1hX21hc2sgPSBcXHUwMDI2ZGV2LmNvaGVyZW50X2RtYV9tYXNrO1xcbisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRSkgfHwgXFxcXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVSkgfHwgXFxcXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTEwpXFxuK1xcdGRldi5kbWFfY29oZXJlbnQgPSBjb2hlcmVudDtcXG4rI2VuZGlmXFxuK1xcbitcXHRpZiAoYXRvbWljKVxcbitcXHRcXHRnZnAgPSBHRlBfQVRPTUlDO1xcbitcXG4rXFx0YWRkcjEgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNmRldiwgc2l6ZSwgXFx1MDAyNmhhbmRsZTEsIGdmcCk7XFxuK1xcdGlmICghYWRkcjEpIHtcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiRE1BIGFsbG9jYXRpb24gZmFpbGVkICh1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uKVxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgXFx1MDAyNlxcdTAwMjYgZG1hX2lzX2Zyb21fcG9vbChhZGRyMSwgc2l6ZSkpIHtcXG4rXFx0XFx0ZXhwZWN0ZWRfcmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGt1bml0X2luZm8odGVzdCwgXFxcIkRNQSBhbGxvY2F0aW9uIHVzaW5nIHBvb2wsIGV4cGVjdGluZyAtRU9QTk9UU1VQUFxcXCIpO1xcbitcXHR9IGVsc2UgaWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cyhcXHUwMDI2ZGV2LCBoYW5kbGUxKSwgc2l6ZSkpIHtcXG4rXFx0XFx0ZXhwZWN0ZWRfcmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGt1bml0X2luZm8odGVzdCwgXFxcIkRNQSBhbGxvY2F0aW9uIHVzaW5nIENNQSwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKFxcdTAwMjZkZXYsIGFkZHIxLCBzaXplLCBoYW5kbGUxLCBcXHUwMDI2c3RhdGUpO1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCBleHBlY3RlZF9yZXQpO1xcbitcXG4rXFx0aWYgKCFleHBlY3RlZF9yZXQpIHtcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX1RSVUVfTVNHKHRlc3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGtob190ZXN0X3BhZ2VzX3ByZXNlcnZlZChkbWFfdG9fcGh5cyhcXHUwMDI2ZGV2LCBoYW5kbGUxKSwgbnJfcGFnZXMpLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXFwiQWxsb2NhdGVkIGJsb2NrIG5vdCB0cmFja2VkIGluIEtIT1xcXCIpO1xcbitcXG4rXFx0XFx0YWRkcjIgPSBkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKFxcdTAwMjZkZXYsIHNpemUsIFxcdTAwMjZoYW5kbGUyLCBnZnAsIHN0YXRlKTtcXG4rXFx0XFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGFkZHIyKTtcXG4rXFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBoYW5kbGUxLCBoYW5kbGUyKTtcXG4rXFx0XFx0ZG1hX2ZyZWVfY29oZXJlbnQoXFx1MDAyNmRldiwgc2l6ZSwgYWRkcjIsIGhhbmRsZTIpO1xcbitcXHRcXHRLVU5JVF9FWFBFQ1RfRkFMU0VfTVNHKHRlc3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoXFx1MDAyNmRldiwgaGFuZGxlMSksIG5yX3BhZ2VzKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJBbGxvY2F0ZWQgYmxvY2sgc3RpbGwgdHJhY2tlZCBhZnRlciBmcmVlXFxcIik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZkZXYsIHNpemUsIGFkZHIxLCBoYW5kbGUxKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfY29oZXJlbnQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdGNvbnN0IHNpemVfdCAqc2l6ZSA9IHRlc3QtXFx1MDAzZXBhcmFtX3ZhbHVlO1xcbitcXG4rXFx0dGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIHRydWUsIGZhbHNlLCAqc2l6ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdGNvbnN0IHNpemVfdCAqc2l6ZSA9IHRlc3QtXFx1MDAzZXBhcmFtX3ZhbHVlO1xcbitcXG4rXFx0dGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIGZhbHNlLCBmYWxzZSwgKnNpemUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfY29oZXJlbnRfYXRvbWljKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRjb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LVxcdTAwM2VwYXJhbV92YWx1ZTtcXG4rXFxuK1xcdHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCB0cnVlLCB0cnVlLCAqc2l6ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnRfYXRvbWljKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRjb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LVxcdTAwM2VwYXJhbV92YWx1ZTtcXG4rXFxuK1xcdHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCBmYWxzZSwgdHJ1ZSwgKnNpemUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2RtYW1fcHJlc2VydmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRkbWFfYWRkcl90IGhhbmRsZSwgbm9uX2RtYW1faGFuZGxlO1xcbitcXHR2b2lkICphZGRyLCAqbm9uX2RtYW1fYWRkcjtcXG4rXFx0c3RydWN0IGRldmljZSBkZXYgPSB7MH07XFxuK1xcdHNpemVfdCBzaXplID0gMTI4O1xcbitcXHR1NjQgc3RhdGU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9wYWdlcywgbW9ja19raG9fcmVzdG9yZV9wYWdlcyk7XFxuK1xcdGt1bml0X2FjdGl2YXRlX3N0YXRpY19zdHViKHRlc3QsIGtob19yZXN0b3JlX2ZvbGlvLCBtb2NrX2tob19yZXN0b3JlX2ZvbGlvKTtcXG4rXFxuK1xcdGRldmljZV9pbml0aWFsaXplKFxcdTAwMjZkZXYpO1xcbitcXHRkZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soNjQpO1xcbitcXHRkZXYuZG1hX21hc2sgPSBcXHUwMDI2ZGV2LmNvaGVyZW50X2RtYV9tYXNrO1xcbisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRSkgfHwgXFxcXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVSkgfHwgXFxcXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTEwpXFxuK1xcdGRldi5kbWFfY29oZXJlbnQgPSB0cnVlO1xcbisjZW5kaWZcXG4rXFxuK1xcdG5vbl9kbWFtX2FkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNmRldiwgc2l6ZSwgXFx1MDAyNm5vbl9kbWFtX2hhbmRsZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbm9uX2RtYW1fYWRkcikge1xcbitcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJETUEgYWxsb2NhdGlvbiBmYWlsZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXFx1MDAyNmRldiwgbm9uX2RtYW1fYWRkciwgc2l6ZSwgbm9uX2RtYW1faGFuZGxlLCBcXHUwMDI2c3RhdGUpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVFfTVNHKHRlc3QsIHJldCwgLUVJTlZBTCwgXFxcIlByZXNlcnZpbmcgbm9uLWRldnJlcyBhbGxvY2F0aW9uIHNob3VsZCBmYWlsXFxcIik7XFxuK1xcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZkZXYsIHNpemUsIG5vbl9kbWFtX2FkZHIsIG5vbl9kbWFtX2hhbmRsZSk7XFxuK1xcbitcXHRhZGRyID0gZG1hbV9hbGxvY19jb2hlcmVudChcXHUwMDI2ZGV2LCBzaXplLCBcXHUwMDI2aGFuZGxlLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFhZGRyKSB7XFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcIkRNQSBhbGxvY2F0aW9uIGZhaWxlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihcXHUwMDI2ZGV2LCBhZGRyLCBzaXplLCBoYW5kbGUsIFxcdTAwMjZzdGF0ZSk7XFxuK1xcdEtVTklUX0FTU0VSVF9FUV9NU0codGVzdCwgcmV0LCAwLCBcXFwiRmFpbGVkIHRvIHByZXNlcnZlIGRtYW0gYWxsb2NhdGlvblxcXCIpO1xcbitcXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoXFx1MDAyNmRldiwgaGFuZGxlKSwgMSkpO1xcbitcXG4rXFx0ZG1hbV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXFx1MDAyNmRldiwgYWRkciwgc2l6ZSwgaGFuZGxlLCBzdGF0ZSk7XFxuK1xcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoXFx1MDAyNmRldiwgaGFuZGxlKSwgMSkpO1xcbitcXG4rXFx0ZG1hbV9mcmVlX2NvaGVyZW50KFxcdTAwMjZkZXYsIHNpemUsIGFkZHIsIGhhbmRsZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkbWFfZGlyZWN0X3Rlc3RfY2FzZXNbXSA9IHtcXG4rXFx0S1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2RtYV9kaXJlY3RfY29oZXJlbnQsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxcbitcXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnQsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxcbitcXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudF9hdG9taWMsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxcbitcXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnRfYXRvbWljLCBkbWFfc2l6ZV9nZW5fcGFyYW1zKSxcXG4rXFx0S1VOSVRfQ0FTRSh0ZXN0X2RtYW1fcHJlc2VydmF0aW9uKSxcXG4rXFx0e31cXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgZG1hX2RpcmVjdF90ZXN0X3N1aXRlID0ge1xcbitcXHQubmFtZSA9IFxcXCJkbWFfZGlyZWN0X2xpdmV1cGRhdGVcXFwiLFxcbitcXHQudGVzdF9jYXNlcyA9IGRtYV9kaXJlY3RfdGVzdF9jYXNlcyxcXG4rfTtcXG4ra3VuaXRfdGVzdF9zdWl0ZShkbWFfZGlyZWN0X3Rlc3Rfc3VpdGUpO1xcbitcXG4rTU9EVUxFX0lNUE9SVF9OUyhcXFwiRVhQT1JURURfRk9SX0tVTklUX1RFU1RJTkdcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJLVW5pdCB0ZXN0IGZvciBETUEgZGlyZWN0IGxpdmUgdXBkYXRlIHByZXNlcnZhdGlvblxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvbWFwcGluZy5jIGIva2VybmVsL2RtYS9tYXBwaW5nLmNcXG5pbmRleCAyM2VkOGViOTIzM2U1NS4uYWVjMTIyMmFiNWFlYjEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2RtYS9tYXBwaW5nLmNcXG4rKysgYi9rZXJuZWwvZG1hL21hcHBpbmcuY1xcbkBAIC0xMiw2ICsxMiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbW11LWRtYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva21zYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9raG8vYWJpL2RtYV9hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuQEAgLTM1LDEyICszNywyNSBAQCBzdHJ1Y3QgZG1hX2RldnJlcyB7XFxuIFxcdHZvaWRcXHRcXHQqdmFkZHI7XFxuIFxcdGRtYV9hZGRyX3RcXHRkbWFfaGFuZGxlO1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0YXR0cnM7XFxuKyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcXG4rXFx0Ym9vbCBpc19wcmVzZXJ2ZWQ7XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgZG1hbV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxcbiB7XFxuIFxcdHN0cnVjdCBkbWFfZGV2cmVzICp0aGlzID0gcmVzO1xcbiBcXG4rI2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxcbitcXHQvKlxcbitcXHQgKiBGcmVlaW5nIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5IGlzIGRhbmdlcm91cyBhcyBpdCBjYW4gY2F1c2UgVUFGIGluIHRoZVxcbitcXHQgKiBjdXJyZW50IG9yIG5leHQga2VybmVsIGlmIHRoZSBtZW1vcnkgaXMgc3RpbGwgYmVpbmcgdXNlZCBieSB0aGVcXG4rXFx0ICogZGV2aWNlLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT04odGhpcy1cXHUwMDNlaXNfcHJlc2VydmVkKSlcXG4rXFx0XFx0cmV0dXJuO1xcbisjZW5kaWZcXG4rXFxuIFxcdGRtYV9mcmVlX2F0dHJzKGRldiwgdGhpcy1cXHUwMDNlc2l6ZSwgdGhpcy1cXHUwMDNldmFkZHIsIHRoaXMtXFx1MDAzZWRtYV9oYW5kbGUsXFxuIFxcdFxcdFxcdHRoaXMtXFx1MDAzZWF0dHJzKTtcXG4gfVxcbkBAIC02MjgsNiArNjQzLDEyMyBAQCB1NjQgZG1hX2dldF9yZXF1aXJlZF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChkbWFfZ2V0X3JlcXVpcmVkX21hc2spO1xcbiBcXG4rI2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxcbitpbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0ICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpO1xcbitcXG4rXFx0aWYgKGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChkZXYsIGNwdV9hZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKGRtYV9hbGxvY19kaXJlY3QoZGV2LCBvcHMpKVxcbitcXHRcXHRyZXR1cm4gZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKGRldiwgY3B1X2FkZHIsIHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGRtYV9oYW5kbGUsIGF0dHJzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdGF0ZSk7XFxuK1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyk7XFxuK1xcbit2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpO1xcbitcXG4rXFx0aWYgKGRtYV9hbGxvY19kaXJlY3QoZGV2LCBvcHMpKVxcbitcXHRcXHRkbWFfZGlyZWN0X3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24pO1xcbitcXG4rdm9pZCAqZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHRcXHQgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XFxuK1xcdHZvaWQgKmNwdV9hZGRyID0gTlVMTDtcXG4rXFxuK1xcdFdBUk5fT05fT05DRSghZGV2LVxcdTAwM2Vjb2hlcmVudF9kbWFfbWFzayk7XFxuK1xcbitcXHRpZiAoZG1hX2FsbG9jX2RpcmVjdChkZXYsIG9wcykpXFxuK1xcdFxcdGNwdV9hZGRyID0gZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oZGV2LCBzaXplLCBkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZ2ZwLCBhdHRycywgc3RhdGUpO1xcbitcXG4rXFx0ZGVidWdfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgKmRtYV9oYW5kbGUsIGNwdV9hZGRyLCBhdHRycyk7XFxuK1xcdHJldHVybiBjcHVfYWRkcjtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKGRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpO1xcbitcXG4raW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfZGV2cmVzIG1hdGNoX2RhdGEgPSB7IHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlIH07XFxuK1xcdHN0cnVjdCBkbWFfZGV2cmVzICpkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFxcdTAwMjZtYXRjaF9kYXRhKTtcXG4rXFx0aWYgKCFkcilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZHItXFx1MDAzZWlzX3ByZXNlcnZlZClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLCBkbWFfaGFuZGxlLCBhdHRycywgc3RhdGUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0ZHItXFx1MDAzZWlzX3ByZXNlcnZlZCA9IHRydWU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0woZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKTtcXG4rXFxuK3ZvaWQgZG1hbV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0c2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0IHN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfZGV2cmVzIG1hdGNoX2RhdGEgPSB7IHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlIH07XFxuK1xcdHN0cnVjdCBkbWFfZGV2cmVzICpkcjtcXG4rXFxuK1xcdGRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFxcdTAwMjZtYXRjaF9kYXRhKTtcXG4rXFx0aWYgKCFkcilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFkci1cXHUwMDNlaXNfcHJlc2VydmVkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKGRldiwgc3RhdGUpO1xcbitcXHRkci1cXHUwMDNlaXNfcHJlc2VydmVkID0gZmFsc2U7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbik7XFxuK1xcbit2b2lkICpkbWFtX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfZGV2cmVzICpkcjtcXG4rXFx0dm9pZCAqdmFkZHI7XFxuK1xcbitcXHRkciA9IGRldnJlc19hbGxvYyhkbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xcbitcXHRpZiAoIWRyKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHZhZGRyID0gZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGdmcCwgYXR0cnMsIHN0YXRlKTtcXG4rXFx0aWYgKCF2YWRkcikge1xcbitcXHRcXHRkZXZyZXNfZnJlZShkcik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRkci1cXHUwMDNldmFkZHIgPSB2YWRkcjtcXG4rXFx0ZHItXFx1MDAzZWRtYV9oYW5kbGUgPSAqZG1hX2hhbmRsZTtcXG4rXFx0ZHItXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXHRkci1cXHUwMDNlYXR0cnMgPSBhdHRycztcXG4rXFxuK1xcdGRldnJlc19hZGQoZGV2LCBkcik7XFxuK1xcbitcXHRyZXR1cm4gdmFkZHI7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkbWFtX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyk7XFxuKyNlbmRpZlxcbitcXG4gdm9pZCAqZG1hX2FsbG9jX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXFxuIFxcdFxcdGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgYXR0cnMpXFxuIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9wb29sLmMgYi9rZXJuZWwvZG1hL3Bvb2wuY1xcbmluZGV4IDJiMmZiYjcwOTI0MjlhLi43ODQ5NjU2ODk3M2ZlYiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZG1hL3Bvb2wuY1xcbisrKyBiL2tlcm5lbC9kbWEvcG9vbC5jXFxuQEAgLTMsNiArMyw5IEBAXFxuICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTHRkLlxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQ1xcbiAgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY21hLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXFx1MDAzZVxcbkBAIC0zMDcsMyArMzEwLDE3IEBAIGJvb2wgZG1hX2ZyZWVfZnJvbV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKVxcbiBcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuK1xcbitib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCBnZW5fcG9vbCAqcG9vbCA9IE5VTEw7XFxuK1xcbitcXHR3aGlsZSAoKHBvb2wgPSBkbWFfZ3Vlc3NfcG9vbChwb29sLCAwKSkpIHtcXG4rXFx0XFx0aWYgKCFnZW5fcG9vbF9oYXNfYWRkcihwb29sLCAodW5zaWduZWQgbG9uZylzdGFydCwgc2l6ZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoZG1hX2lzX2Zyb21fcG9vbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE1OjEwLjA2Mjg3MDk5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1Nzc1NjQwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uIChlLmcuLCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycywgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKSBhbmQgYSBLVW5pdCB0ZXN0IGZvciBpdC4gSG93ZXZlciwgdGhlIG5ldyBBUEkgaXMgbm90IGN1cnJlbnRseSBjYWxsZWQgYnkgYW55IGRyaXZlciBvciBjb3JlIGtlcm5lbCBjb2RlIG91dHNpZGUgb2YgdGhlIEtVbml0IHRlc3QgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZjFjYTE5NzY4MGY2ZTdlYmJmMjQ0ZjcyODJjZDNiMDQ2NDVhYzU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxNzoxNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oIGIvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmhcbmluZGV4IGMyNDk5MTI0NTZmOTYzLi4wZWZlMmJjMWE4MTUyNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1kaXJlY3QuaFxuQEAgLTE0MSw2ICsxNDEsMzUgQEAgc3RhdGljIGlubGluZSBib29sIGRtYV9jYXBhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSxcbiB1NjQgZG1hX2RpcmVjdF9nZXRfcmVxdWlyZWRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSxcbiBcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIGF0dHJzKTtcbitcbisjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4raW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuK1x0XHRcdFx0ICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xuK3ZvaWQgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpO1xuK3ZvaWQgKmRtYV9kaXJlY3RfcmVzdG9yZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4rXHRcdFx0XHQgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdFx0XHQgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbitcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSlcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZGlyZWN0X3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSlcbit7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdFx0XHQgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbitcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rI2VuZGlmXG4rXG4gdm9pZCBkbWFfZGlyZWN0X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsXG4gXHRcdGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGxvbmcgYXR0cnMpO1xuIHN0cnVjdCBwYWdlICpkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXG5pbmRleCA2YTE4MzJhNzNjYWQ4ZC4uYjEzZTVlZWJlNmQzYWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxuQEAgLTEwNiw2ICsxMDYsNyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKTtcbiB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpO1xuIFxuIHZvaWQgZG1hX2NvbnRpZ3VvdXNfZWFybHlfZml4dXAocGh5c19hZGRyX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTtcbitib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7XG4gI2Vsc2UgLyogQ09ORklHX0RNQV9DTUEgKi9cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbWEgKmRldl9nZXRfY21hX2FyZWEoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbkBAIC0xNDUsNiArMTQ2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4ge1xuIFx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqL1xuIFxuICNpZmRlZiBDT05GSUdfRE1BX0RFQ0xBUkVfQ09IRVJFTlRcbkBAIC0xNTYsNiArMTYyLDcgQEAgaW50IGRtYV9hbGxvY19mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNzaXplX3Qgc2l6ZSxcbiBpbnQgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb3JkZXIsIHZvaWQgKnZhZGRyKTtcbiBpbnQgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLCBpbnQgKnJldCk7XG4rYm9vbCBkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkcik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKVxuQEAgLTE2Niw2ICsxNzMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LFxuICNkZWZpbmUgZG1hX2FsbG9jX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgc2l6ZSwgaGFuZGxlLCByZXQpICgwKVxuICNkZWZpbmUgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBvcmRlciwgdmFkZHIpICgwKVxuICNkZWZpbmUgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCB2bWEsIHZhZGRyLCBvcmRlciwgcmV0KSAoMClcbisjZGVmaW5lIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChkZXYsIHZhZGRyKSAoZmFsc2UpXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIGRtYV9yZWxlYXNlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgfVxuICNlbmRpZiAvKiBDT05GSUdfRE1BX0RFQ0xBUkVfQ09IRVJFTlQgKi9cbiBcbkBAIC0yMTYsNiArMjI1LDcgQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0Ym9vbCAoKnBoeXNfYWRkcl9vaykoc3RydWN0IGRldmljZSAqLCBwaHlzX2FkZHJfdCwgc2l6ZV90KSk7XG4gYm9vbCBkbWFfZnJlZV9mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpO1xuIFxuK2Jvb2wgZG1hX2lzX2Zyb21fcG9vbCh2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpO1xuIGludCBkbWFfZGlyZWN0X3NldF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBjcHVfc3RhcnQsXG4gXHRcdGRtYV9hZGRyX3QgZG1hX3N0YXJ0LCB1NjQgc2l6ZSk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oXG5pbmRleCBkYjhhYjI0YTU0ZjRhMy4uNGMwYzQyOGI2YjFjYjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaFxuQEAgLTIxMCw2ICsyMTAsMjMgQEAgdm9pZCAqZG1hX3ZtYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIHZvaWQgZG1hX3Z1bm1hcF9ub25jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpO1xuIGludCBkbWFfbW1hcF9ub25jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHNpemVfdCBzaXplLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7XG4rI2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxuK2ludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuK1x0XHRcdFx0ICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKTtcbit2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpO1xuK3ZvaWQgKmRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdCAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSk7XG4raW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuK1x0XHRcdFx0ICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xuK3ZvaWQgZG1hbV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCBzdGF0ZSk7XG4rdm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKTtcbisjZW5kaWZcbiAjZWxzZSAvKiBDT05GSUdfSEFTX0RNQSAqL1xuIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2VfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXG5AQCAtNDk2LDYgKzUxMyw0NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1hX25lZWRfdW5tYXAoc3RydWN0IGRldmljZSAqZGV2KVxuIH1cbiAjZW5kaWYgLyogIUNPTkZJR19IQVNfRE1BIHx8ICFDT05GSUdfRE1BX05FRURfU1lOQyAqL1xuIFxuKyNpZiAhZGVmaW5lZChDT05GSUdfRE1BX0xJVkVVUERBVEUpIHx8ICFkZWZpbmVkKENPTkZJR19IQVNfRE1BKVxuK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4rXHRcdFx0XHRcdFx0c2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbitcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdFx0XHQgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuK1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuK1x0XHRcdFx0XHRcdCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuK1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4rXHRcdFx0XHRcdCAgICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCBzdGF0ZSlcbit7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdFx0XHQgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbitcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rI2VuZGlmXG4rXG4gc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHRkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIGdmcF90IGdmcCk7XG4gdm9pZCBkbWFfZnJlZV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbkBAIC02MTgsNiArNjc0LDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRcdFx0KGdmcCBcdTAwMjYgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKVxuK3tcbitcdHJldHVybiBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxuK1x0XHRcdFx0XHQgICAgIGRtYV9oYW5kbGUsIDAsIHN0YXRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXG4re1xuK1x0ZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkICpkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4rXHRcdFx0XHRcdFx0ICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXG4rXHRcdFx0XHRcdFx0ICAgIGdmcF90IGdmcCwgdTY0IHN0YXRlKVxuK3tcbitcdHJldHVybiBkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwLFxuK1x0XHRcdFx0XHQgICAgKGdmcCBcdTAwMjYgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwLFxuK1x0XHRcdFx0XHQgICAgc3RhdGUpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0dm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSlcbiB7XG5AQCAtNzQ3LDYgKzgyNCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHQoZ2ZwIFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDApO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdFx0XHQgICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0ICpzdGF0ZSlcbit7XG4rXHRyZXR1cm4gZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsXG4rXHRcdFx0XHRcdCAgICAgIGRtYV9oYW5kbGUsIDAsIHN0YXRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHU2NCBzdGF0ZSlcbit7XG4rXHRkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIGNwdV9hZGRyLCBzaXplLCBkbWFfaGFuZGxlLCBzdGF0ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hbV9yZXN0b3JlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdFx0XHQgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXG4rXHRcdFx0XHRcdFx0ICAgICBnZnBfdCBnZnAsIHU2NCBzdGF0ZSlcbit7XG4rXHRyZXR1cm4gZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnAsXG4rXHRcdFx0XHRcdCAgICAgKGdmcCBcdTAwMjYgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwLFxuK1x0XHRcdFx0XHQgICAgIHN0YXRlKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2Nfd2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHRcdCBkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3QgZ2ZwKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWUzOGNmMWExZmM5OWVcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFxuQEAgLTAsMCArMSwzMiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfTElOVVhfS0hPX0FCSV9ETUFfQUxMT0NfSFxuKyNkZWZpbmUgX0xJTlVYX0tIT19BQklfRE1BX0FMTE9DX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rLyoqXG4rICogRE9DOiBETUEgQWxsb2MgQUJJXG4rICpcbisgKiBUaGlzIGhlYWRlciBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgdG8gc2VyaWFsaXplIHRoZSBzdGF0ZSBvZiBETUFcbisgKiBhbGxvY2F0aW9ucywgZG9uZSBieSBkZXZpY2UgZHJpdmVyLCBhY3Jvc3MgYSBMaXZlIFVwZGF0ZS5cbisgKlxuKyAqIE9ubHkgRE1BIGFsbG9jYXRpb25zIGRvbmUgdGhyb3VnaCBkbWEtZGlyZWN0IHRoYXQgYXJlIGNvbnRpZ3VvdXMgYW5kXG4rICogYWxsb2NhdGVkIHVzaW5nIGFsbG9jX3BhZ2UgYXJlIHN1cHBvcnRlZC5cbisgKi9cbitcbisvKipcbisgKiBzdHJ1Y3QgZG1hX2FsbG9jX3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgb2YgYSBzaW5nbGUgRE1BIGFsbG9jYXRpb25cbisgKiBAcGFnZV9waHlzOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBwcmVzZXJ2ZWQgcGFnZXNcbisgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgRE1BIGFsbG9jYXRpb25cbisgKiBAYXR0cnM6IERNQSBhbGxvY2F0aW9uIGF0dHJpYnV0ZXNcbisgKiBAZm9yY2VfZGVjcnlwdGVkOiBXaGV0aGVyIHRoZSBtZW1vcnkgaXMgZm9yY2UgZGVjcnlwdGVkIGluIHByZXZpb3VzIGtlcm5lbFxuKyAqL1xuK3N0cnVjdCBkbWFfYWxsb2Nfc2VyIHtcbitcdHU2NCBwYWdlX3BoeXM7XG4rXHR1NjQgc2l6ZTtcbitcdHU2NCBhdHRycztcbitcdHU4IGZvcmNlX2RlY3J5cHRlZDtcbitcdHU4IHBhZGRpbmdbN107XG4rfSBfX3BhY2tlZDtcbitcbisjZW5kaWYgLyogX0xJTlVYX0tIT19BQklfRE1BX0FMTE9DX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL0tjb25maWcgYi9rZXJuZWwvZG1hL0tjb25maWdcbmluZGV4IGJmZWYyMWI0YTlhZTdkLi40OGJjNzRhZjU1MWEzMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvS2NvbmZpZ1xuKysrIGIva2VybmVsL2RtYS9LY29uZmlnXG5AQCAtMjY1LDMgKzI2NSwxNSBAQCBjb25maWcgRE1BX01BUF9CRU5DSE1BUktcbiBcdCAgcGVyZm9ybWFuY2Ugb2YgZG1hXyh1biltYXBfcGFnZS5cbiBcbiBcdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RtYS9kbWFfbWFwX2JlbmNobWFyay5jXG4rXG4rY29uZmlnIERNQV9MSVZFVVBEQVRFXG4rXHRib29sIFwiRW5hYmxlIHByZXNlcnZhdGlvbiBvZiBETUEgZGlyZWN0IGFsbG9jYXRpb25zXCJcbitcdGRlcGVuZHMgb24gTElWRVVQREFURVxuK1xuK2NvbmZpZyBETUFfTElWRVVQREFURV9LVU5JVF9URVNUXG4rXHR0cmlzdGF0ZSBcIktVbml0IHRlc3QgZm9yIERNQSBkaXJlY3QgbGl2ZXVwZGF0ZSBwcmVzZXJ2YXRpb25cIlxuK1x0ZGVwZW5kcyBvbiBLVU5JVFxuK1x0ZGVwZW5kcyBvbiBETUFfTElWRVVQREFURVxuK1x0aGVscFxuK1x0ICBUaGlzIGJ1aWxkcyB0aGUgS1VuaXQgdGVzdHMgZm9yIHRoZSBETUEgZGlyZWN0IGxpdmV1cGRhdGVcbitcdCAgcHJlc2VydmF0aW9uIGFuZCByZXN0b3JhdGlvbiBsb2dpYy5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL01ha2VmaWxlIGIva2VybmVsL2RtYS9NYWtlZmlsZVxuaW5kZXggNjk3NzAzMzQ0NGEzNzUuLjAzNzAzNTQyZWU3OWJjIDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9NYWtlZmlsZVxuKysrIGIva2VybmVsL2RtYS9NYWtlZmlsZVxuQEAgLTEwLDMgKzEwLDQgQEAgb2JqLSQoQ09ORklHX1NXSU9UTEIpXHRcdFx0Kz0gc3dpb3RsYi5vXG4gb2JqLSQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKVx0XHQrPSBwb29sLm9cbiBvYmotJChDT05GSUdfTU1VKVx0XHRcdCs9IHJlbWFwLm9cbiBvYmotJChDT05GSUdfRE1BX01BUF9CRU5DSE1BUkspXHRcdCs9IG1hcF9iZW5jaG1hcmsub1xuK29iai0kKENPTkZJR19ETUFfTElWRVVQREFURV9LVU5JVF9URVNUKVx0Kz0gZGlyZWN0X3Rlc3Qub1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29oZXJlbnQuYyBiL2tlcm5lbC9kbWEvY29oZXJlbnQuY1xuaW5kZXggYmNkYzBmNzZkMmU4MGEuLjc2Y2JlMTFlMWY5MGU3IDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9jb2hlcmVudC5jXG4rKysgYi9rZXJuZWwvZG1hL2NvaGVyZW50LmNcbkBAIC0yMzEsNiArMjMxLDE3IEBAIGludCBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvcmRlciwgdm9pZCAqdmFkZHIpXG4gXHRyZXR1cm4gX19kbWFfcmVsZWFzZV9mcm9tX2NvaGVyZW50KG1lbSwgb3JkZXIsIHZhZGRyKTtcbiB9XG4gXG4rYm9vbCBkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkcilcbit7XG4rXHRzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2X2dldF9jb2hlcmVudF9tZW1vcnkoZGV2KTtcbitcbitcdGlmIChtZW0gXHUwMDI2XHUwMDI2IHZhZGRyIFx1MDAzZT0gbWVtLVx1MDAzZXZpcnRfYmFzZSBcdTAwMjZcdTAwMjYgdmFkZHIgXHUwMDNjXG4rXHRcdCAgIChtZW0tXHUwMDNldmlydF9iYXNlICsgKChkbWFfYWRkcl90KW1lbS1cdTAwM2VzaXplIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW50IF9fZG1hX21tYXBfZnJvbV9jb2hlcmVudChzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLCBpbnQgKnJldClcbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuaW5kZXggMDNmNTJiZDE3MTIwNjIuLjZkMGNmOWM3NTI4Y2I1IDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmNcbisrKyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jXG5AQCAtMzcsNiArMzcsOCBAQFxuIFxuICNkZWZpbmUgcHJfZm10KGZtdCkgXCJjbWE6IFwiIGZtdFxuIFxuKyNpbmNsdWRlIFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG5AQCAtMTMwLDYgKzEzMiwzMSBAQCBzdHJ1Y3QgY21hICpkZXZfZ2V0X2NtYV9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2dldF9jbWFfYXJlYSk7XG4gXG4rc3RydWN0IGRtYV9jbWFfY2hlY2tfZGF0YSB7XG4rXHRwaHlzX2FkZHJfdCBzdGFydDtcbitcdHBoeXNfYWRkcl90IGVuZDtcbit9O1xuK1xuK3N0YXRpYyBpbnQgZG1hX2NtYV9jaGVja19hcmVhKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZG1hX2NtYV9jaGVja19kYXRhICpjaGsgPSBkYXRhO1xuK1xuK1x0aWYgKGNtYV9pbnRlcnNlY3RzKGNtYSwgY2hrLVx1MDAzZXN0YXJ0LCBjaGstXHUwMDNlZW5kKSlcbitcdFx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rYm9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4re1xuK1x0c3RydWN0IGRtYV9jbWFfY2hlY2tfZGF0YSBjaGsgPSB7XG4rXHRcdC5zdGFydCA9IHBoeXMsXG4rXHRcdC5lbmQgPSBwaHlzICsgc2l6ZSAtIDEsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIGNtYV9mb3JfZWFjaF9hcmVhKGRtYV9jbWFfY2hlY2tfYXJlYSwgXHUwMDI2Y2hrKSAhPSAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGRtYV9pc19mcm9tX2NtYSk7XG4rXG4gI2lmZGVmIENPTkZJR19ETUFfTlVNQV9DTUFcbiBcbiBzdGF0aWMgc3RydWN0IGNtYSAqZG1hX2NvbnRpZ3VvdXNfbnVtYV9hcmVhW01BWF9OVU1OT0RFU107XG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9kaXJlY3QuYyBiL2tlcm5lbC9kbWEvZGlyZWN0LmNcbmluZGV4IGVjODg3ZjQ0Mzc0MTgzLi4xMTdlYmFlOGE4MWZhMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvZGlyZWN0LmNcbisrKyBiL2tlcm5lbC9kbWEvZGlyZWN0LmNcbkBAIC02LDYgKzYsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2UgLyogZm9yIG1heF9wZm4gKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9raG8vYWJpL2RtYV9hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXAtb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2F0dGVybGlzdC5oXHUwMDNlXG5AQCAtMzA3LDYgKzMwOSwxOTMgQEAgdm9pZCAqZG1hX2RpcmVjdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcbitpbnQgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4rXHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgZG1hX2FsbG9jX3NlciAqc2VyO1xuK1x0aW50IHJldDtcbitcbitcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG4rXHRpZiAoZG1hX2lzX2Zyb21fY21hKGRtYV90b19waHlzKGRldiwgZG1hX2hhbmRsZSksIHNpemUpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoaXNfc3dpb3RsYl9mb3JfYWxsb2MoZGV2KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKChhdHRycyBcdTAwMjYgRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX0RNQV9BTExPQykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWRldl9pc19kbWFfY29oZXJlbnQoZGV2KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9HTE9CQUxfUE9PTCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWRldl9pc19kbWFfY29oZXJlbnQoZGV2KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKSBcdTAwMjZcdTAwMjZcbitcdCAgICBkbWFfaXNfZnJvbV9wb29sKGNwdV9hZGRyLCBzaXplKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0c2VyID0ga2hvX2FsbG9jX3ByZXNlcnZlKHNpemVvZigqc2VyKSk7XG4rXHRpZiAoSVNfRVJSKHNlcikpXG4rXHRcdHJldHVybiBQVFJfRVJSKHNlcik7XG4rXG4rXHRzZXItXHUwMDNlcGFnZV9waHlzID0gZG1hX3RvX3BoeXMoZGV2LCBkbWFfaGFuZGxlKTtcbitcdHNlci1cdTAwM2Vmb3JjZV9kZWNyeXB0ZWQgPSBmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KTtcbitcdHNlci1cdTAwM2VzaXplID0gc2l6ZTtcbitcdHNlci1cdTAwM2VhdHRycyA9IChhdHRycyBcdTAwMjYgfkRNQV9BVFRSX05PX1dBUk4pO1xuK1xuK1x0cmV0ID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHBoeXNfdG9fcGFnZShzZXItXHUwMDNlcGFnZV9waHlzKSxcbitcdFx0XHRcdCAxIFx1MDAzY1x1MDAzYyBnZXRfb3JkZXIoc2l6ZSkpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRraG9fdW5wcmVzZXJ2ZV9mcmVlKHNlcik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQqc3RhdGUgPSB2aXJ0X3RvX3BoeXMoc2VyKTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKVxuK3tcbitcdHN0cnVjdCBkbWFfYWxsb2Nfc2VyICpzZXI7XG4rXG4rXHRpZiAoIWtob19pc19lbmFibGVkKCkpXG4rXHRcdHJldHVybjtcbitcbitcdHNlciA9IHBoeXNfdG9fdmlydChzdGF0ZSk7XG4rXHRraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwaHlzX3RvX3BhZ2Uoc2VyLVx1MDAzZXBhZ2VfcGh5cyksXG4rXHRcdFx0ICAgICAxIFx1MDAzY1x1MDAzYyBnZXRfb3JkZXIoc2VyLVx1MDAzZXNpemUpKTtcbitcdGtob191bnByZXNlcnZlX2ZyZWUoc2VyKTtcbit9XG4rXG4rdm9pZCAqZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxuK3tcbitcdGJvb2wgcmVtYXAgPSBmYWxzZSwgc2V0X3VuY2FjaGVkID0gZmFsc2U7XG4rXHRzdHJ1Y3QgZG1hX2FsbG9jX3NlciAqc2VyID0gTlVMTDtcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0dm9pZCAqY3B1X2FkZHIgPSBOVUxMO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIWtob19pc19lbmFibGVkKCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0c2VyID0gcGh5c190b192aXJ0KHN0YXRlKTtcbitcdHBhZ2UgPSBwaHlzX3RvX3BhZ2Uoc2VyLVx1MDAzZXBhZ2VfcGh5cyk7XG4rXG4rXHRzaXplID0gUEFHRV9BTElHTihzaXplKTtcbitcdGlmIChzaXplICE9IHNlci1cdTAwM2VzaXplKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdFdBUk5fT05fT05DRSgoYXR0cnMgXHUwMDI2IH5ETUFfQVRUUl9OT19XQVJOKSAhPSBzZXItXHUwMDNlYXR0cnMpO1xuK1xuK1x0LypcbitcdCAqIENhbm5vdCBmcmVlIHRoZSByZXN0b3JlZCBwYWdlcyBvbiBlcnJvciBoZXJlIGFzIHRoZXNlIG1pZ2h0IGJlIGluIHVzZVxuK1x0ICogYnkgYSBkZXZpY2Ugd2l0aCBkaXJlY3QgYWxsb2NhdGlvbiBpbiB0aGUgcHJldmlvdXMga2VybmVsLlxuK1x0ICovXG4rXHRpZiAoaXNfc3dpb3RsYl9mb3JfYWxsb2MoZGV2KSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoKGF0dHJzIFx1MDAyNiBETUFfQVRUUl9OT19LRVJORUxfTUFQUElORykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmICghZGV2X2lzX2RtYV9jb2hlcmVudChkZXYpKSB7XG4rXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19ETUFfQUxMT0MpKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1xuK1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX0dMT0JBTF9QT09MKSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0c2V0X3VuY2FjaGVkID0gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfRE1BX1NFVF9VTkNBQ0hFRCk7XG4rXHRcdHJlbWFwID0gSVNfRU5BQkxFRChDT05GSUdfRE1BX0RJUkVDVF9SRU1BUCk7XG4rXHRcdGlmICghc2V0X3VuY2FjaGVkIFx1MDAyNlx1MDAyNiAhcmVtYXApXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHtcbitcdFx0cmVtYXAgPSB0cnVlO1xuK1x0XHRzZXRfdW5jYWNoZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBSZW1hcHBpbmcgd2lsbCBiZSBibG9ja2luZyBzbyByZXR1cm4gZXJyb3IuIFRoZSBwcmVzZXJ2ZWQgbWVtb3J5XG4rXHQgKiBtaWdodCBiZSBhbHJlYWR5IGRlY3J5cHRlZCBpbiB0aGUgcHJldmlvdXMga2VybmVsLCBidXQgdGhlIGRlY3J5cHRpb25cbitcdCAqIGNhbGwgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgbm9uLWJsb2NraW5nIHNvIHJldHVybiBlcnJvciBhbHdheXMgaWZcbitcdCAqIGRlY3J5cHRpb24gaXMgcmVxdWlyZWQuXG4rXHQgKi9cbitcdGlmICgocmVtYXAgfHwgZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGRtYV9kaXJlY3RfdXNlX3Bvb2woZGV2LCBnZnApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdC8qXG4rXHQgKiBFbmNyeXB0aW9uIHNjaGVtZSBjaGFuZ2VkIGJldHdlZW4gdHdvIGtlcm5lbHMgYW5kIHRoaXMgbWlnaHQgY2F1c2VcbitcdCAqIGlzc3VlcyBpZiBkZXZpY2UvZHJpdmVyIGlzIG5vdCBoYW5kbGluZyBpdCBwcm9wZXJseS5cbitcdCAqL1xuK1x0V0FSTl9PTl9PTkNFKHNlci1cdTAwM2Vmb3JjZV9kZWNyeXB0ZWQgIT0gZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpO1xuK1xuK1x0LypcbitcdCAqIGFyY2hfZG1hX3ByZXBfY29oZXJlbnQoKSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYW55IGNhY2hlIGxpbmVzIGZyb21cbitcdCAqIHRoZSBwcmV2aW91cyBrZXJuZWwsIGlmIHRoZSBkZXZpY2Ugd2FzIGNvaGVyZW50IHByZXZpb3VzbHkgb3IgY2FjaGVkXG4rXHQgKiBtYXBwaW5nIGluIHRoaXMga2VybmVsIGR1cmluZyBpbml0IGFyZSBub3QgcHJvYmxlbWF0aWMgZm9yXG4rXHQgKiBub24tY29oZXJlbnQgYWxsb2NhdGlvbnMuXG4rXHQgKi9cbitcdGlmIChyZW1hcCkge1xuK1x0XHRwZ3Byb3RfdCBwcm90ID0gZG1hX3BncHJvdChkZXYsIFBBR0VfS0VSTkVMLCBhdHRycyk7XG4rXG4rXHRcdGlmIChmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSlcbitcdFx0XHRwcm90ID0gcGdwcm90X2RlY3J5cHRlZChwcm90KTtcbitcbitcdFx0YXJjaF9kbWFfcHJlcF9jb2hlcmVudChwYWdlLCBzaXplKTtcbitcbitcdFx0Y3B1X2FkZHIgPSBkbWFfY29tbW9uX2NvbnRpZ3VvdXNfcmVtYXAocGFnZSwgc2l6ZSwgcHJvdCxcbitcdFx0XHRcdFx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbitcdFx0aWYgKCFjcHVfYWRkcilcbitcdFx0XHRnb3RvIGVycjtcbitcdH0gZWxzZSB7XG4rXHRcdGNwdV9hZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpO1xuK1x0XHRpZiAoZG1hX3NldF9kZWNyeXB0ZWQoZGV2LCBjcHVfYWRkciwgc2l6ZSkpIHtcbitcdFx0XHRjcHVfYWRkciA9IE5VTEw7XG4rXHRcdFx0Z290byBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChzZXRfdW5jYWNoZWQpIHtcbitcdFx0YXJjaF9kbWFfcHJlcF9jb2hlcmVudChwYWdlLCBzaXplKTtcbitcdFx0Y3B1X2FkZHIgPSBhcmNoX2RtYV9zZXRfdW5jYWNoZWQoY3B1X2FkZHIsIHNpemUpO1xuK1x0XHRpZiAoSVNfRVJSKGNwdV9hZGRyKSkge1xuK1x0XHRcdGNwdV9hZGRyID0gTlVMTDtcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0KmRtYV9oYW5kbGUgPSBwaHlzX3RvX2RtYV9kaXJlY3QoZGV2LCBzZXItXHUwMDNlcGFnZV9waHlzKTtcbitcbitlcnI6XG4rXHRXQVJOX09OKCFraG9fcmVzdG9yZV9wYWdlcyhzZXItXHUwMDNlcGFnZV9waHlzLFxuK1x0XHRcdFx0ICAgMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNlci1cdTAwM2VzaXplKSkpO1xuK1x0a2hvX3Jlc3RvcmVfZnJlZShzZXIpO1xuK1xuK1x0LypcbitcdCAqIERNQSBkaXJlY3QgQVBJIGV4cGVjdHMgaGlnaC1vcmRlciBhbGxvY2F0aW9ucywgc28gc2V0IHJlZmNvdW50IG9mXG4rXHQgKiB0YWlsIHBhZ2VzIHRvIHplcm8uXG4rXHQgKi9cbitcdGZvciAoaSA9ICgxIFx1MDAzY1x1MDAzYyBnZXRfb3JkZXIoc2l6ZSkpIC0gMTsgaSBcdTAwM2UgMDsgLS1pKVxuK1x0XHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XG4rXG4rXHRyZXR1cm4gY3B1X2FkZHI7XG4rfVxuKyNlbmRpZlxuK1xuIHZvaWQgZG1hX2RpcmVjdF9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRcdHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1bnNpZ25lZCBsb25nIGF0dHJzKVxuIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMgYi9rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjg0MDNlYzQ3ODA3ZThcbi0tLSAvZGV2L251bGxcbisrKyBiL2tlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuY1xuQEAgLTAsMCArMSwyMDggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogS1VuaXQgdGVzdCBmb3IgRE1BIGFsbG9jYXRpb24gbGl2ZSB1cGRhdGUgcHJlc2VydmF0aW9uLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNja3VuaXQvc3RhdGljX3N0dWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXAtb3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWRpcmVjdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbitcbitzdGF0aWMgY29uc3Qgc2l6ZV90IGRtYV90ZXN0X3NpemVzW10gPSB7XG4rXHQxMjgsXG4rXHRQQUdFX1NJWkUsXG4rXHQyICogUEFHRV9TSVpFLFxuK1x0MyAqIFBBR0VfU0laRSxcbitcdDggKiBQQUdFX1NJWkUsXG4rfTtcbitcbitzdGF0aWMgdm9pZCBkbWFfc2l6ZV9kZXNjKGNvbnN0IHNpemVfdCAqc2l6ZSwgY2hhciAqZGVzYylcbit7XG4rXHRzbnByaW50ZihkZXNjLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUsIFwic2l6ZT0lenVcIiwgKnNpemUpO1xuK31cbitcbitLVU5JVF9BUlJBWV9QQVJBTShkbWFfc2l6ZSwgZG1hX3Rlc3Rfc2l6ZXMsIGRtYV9zaXplX2Rlc2MpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbW9ja19raG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlID0gcGh5c190b19wYWdlKHBoeXMpO1xuK1xuK1x0aWYgKCFraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQocGh5cywgbnJfcGFnZXMpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGtob191bnByZXNlcnZlX3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTtcbitcdHJldHVybiBwYWdlO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGZvbGlvICptb2NrX2tob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpXG4re1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGh5c190b19wYWdlKHBoeXMpKTtcbitcbitcdGlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsICgxIFx1MDAzY1x1MDAzYyBmb2xpb19vcmRlcihmb2xpbykpKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRraG9fdW5wcmVzZXJ2ZV9mb2xpbyhmb2xpbyk7XG4rXHRyZXR1cm4gZm9saW87XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4rXHRcdFx0XHRcdFx0ICAgIGJvb2wgY29oZXJlbnQsXG4rXHRcdFx0XHRcdFx0ICAgIGJvb2wgYXRvbWljLFxuK1x0XHRcdFx0XHRcdCAgICBzaXplX3Qgc2l6ZSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNpemUpO1xuK1x0ZG1hX2FkZHJfdCBoYW5kbGUxLCBoYW5kbGUyO1xuK1x0aW50IHJldCwgZXhwZWN0ZWRfcmV0ID0gMDtcbitcdHN0cnVjdCBkZXZpY2UgZGV2ID0gezB9O1xuK1x0Z2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTDtcbitcdHZvaWQgKmFkZHIxLCAqYWRkcjI7XG4rXHR1NjQgc3RhdGU7XG4rXG4rXHRrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9wYWdlcywgbW9ja19raG9fcmVzdG9yZV9wYWdlcyk7XG4rXHRrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9mb2xpbywgbW9ja19raG9fcmVzdG9yZV9mb2xpbyk7XG4rXG4rXHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZkZXYpO1xuK1x0ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDY0KTtcbitcdGRldi5kbWFfbWFzayA9IFx1MDAyNmRldi5jb2hlcmVudF9kbWFfbWFzaztcbisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRSkgfHwgXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVSkgfHwgXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTEwpXG4rXHRkZXYuZG1hX2NvaGVyZW50ID0gY29oZXJlbnQ7XG4rI2VuZGlmXG4rXG4rXHRpZiAoYXRvbWljKVxuK1x0XHRnZnAgPSBHRlBfQVRPTUlDO1xuK1xuK1x0YWRkcjEgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBcdTAwMjZoYW5kbGUxLCBnZnApO1xuK1x0aWYgKCFhZGRyMSkge1xuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiRE1BIGFsbG9jYXRpb24gZmFpbGVkICh1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uKVwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKSBcdTAwMjZcdTAwMjYgZG1hX2lzX2Zyb21fcG9vbChhZGRyMSwgc2l6ZSkpIHtcbitcdFx0ZXhwZWN0ZWRfcmV0ID0gLUVPUE5PVFNVUFA7XG4rXHRcdGt1bml0X2luZm8odGVzdCwgXCJETUEgYWxsb2NhdGlvbiB1c2luZyBwb29sLCBleHBlY3RpbmcgLUVPUE5PVFNVUFBcIik7XG4rXHR9IGVsc2UgaWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cyhcdTAwMjZkZXYsIGhhbmRsZTEpLCBzaXplKSkge1xuK1x0XHRleHBlY3RlZF9yZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0a3VuaXRfaW5mbyh0ZXN0LCBcIkRNQSBhbGxvY2F0aW9uIHVzaW5nIENNQSwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQXCIpO1xuK1x0fVxuK1xuK1x0cmV0ID0gZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBhZGRyMSwgc2l6ZSwgaGFuZGxlMSwgXHUwMDI2c3RhdGUpO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgZXhwZWN0ZWRfcmV0KTtcbitcbitcdGlmICghZXhwZWN0ZWRfcmV0KSB7XG4rXHRcdEtVTklUX0VYUEVDVF9UUlVFX01TRyh0ZXN0LFxuK1x0XHRcdFx0ICAgICAga2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKGRtYV90b19waHlzKFx1MDAyNmRldiwgaGFuZGxlMSksIG5yX3BhZ2VzKSxcbitcdFx0XHRcdCAgICAgIFwiQWxsb2NhdGVkIGJsb2NrIG5vdCB0cmFja2VkIGluIEtIT1wiKTtcbitcbitcdFx0YWRkcjIgPSBkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKFx1MDAyNmRldiwgc2l6ZSwgXHUwMDI2aGFuZGxlMiwgZ2ZwLCBzdGF0ZSk7XG4rXHRcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBhZGRyMik7XG4rXG4rXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBoYW5kbGUxLCBoYW5kbGUyKTtcbitcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBhZGRyMiwgaGFuZGxlMik7XG4rXHRcdEtVTklUX0VYUEVDVF9GQUxTRV9NU0codGVzdCxcbitcdFx0XHRcdCAgICAgICBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoXHUwMDI2ZGV2LCBoYW5kbGUxKSwgbnJfcGFnZXMpLFxuK1x0XHRcdFx0ICAgICAgIFwiQWxsb2NhdGVkIGJsb2NrIHN0aWxsIHRyYWNrZWQgYWZ0ZXIgZnJlZVwiKTtcbitcdH0gZWxzZSB7XG4rXHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNmRldiwgc2l6ZSwgYWRkcjEsIGhhbmRsZTEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfY29oZXJlbnQoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdGNvbnN0IHNpemVfdCAqc2l6ZSA9IHRlc3QtXHUwMDNlcGFyYW1fdmFsdWU7XG4rXG4rXHR0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24odGVzdCwgdHJ1ZSwgZmFsc2UsICpzaXplKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0Y29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbitcbitcdHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCBmYWxzZSwgZmFsc2UsICpzaXplKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X2NvaGVyZW50X2F0b21pYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0Y29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbitcbitcdHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCB0cnVlLCB0cnVlLCAqc2l6ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnRfYXRvbWljKHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRjb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LVx1MDAzZXBhcmFtX3ZhbHVlO1xuK1xuK1x0dGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIGZhbHNlLCB0cnVlLCAqc2l6ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZG1hbV9wcmVzZXJ2YXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdGRtYV9hZGRyX3QgaGFuZGxlLCBub25fZG1hbV9oYW5kbGU7XG4rXHR2b2lkICphZGRyLCAqbm9uX2RtYW1fYWRkcjtcbitcdHN0cnVjdCBkZXZpY2UgZGV2ID0gezB9O1xuK1x0c2l6ZV90IHNpemUgPSAxMjg7XG4rXHR1NjQgc3RhdGU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0a3VuaXRfYWN0aXZhdGVfc3RhdGljX3N0dWIodGVzdCwga2hvX3Jlc3RvcmVfcGFnZXMsIG1vY2tfa2hvX3Jlc3RvcmVfcGFnZXMpO1xuK1x0a3VuaXRfYWN0aXZhdGVfc3RhdGljX3N0dWIodGVzdCwga2hvX3Jlc3RvcmVfZm9saW8sIG1vY2tfa2hvX3Jlc3RvcmVfZm9saW8pO1xuK1xuK1x0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2ZGV2KTtcbitcdGRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSyg2NCk7XG4rXHRkZXYuZG1hX21hc2sgPSBcdTAwMjZkZXYuY29oZXJlbnRfZG1hX21hc2s7XG4rI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9ERVZJQ0UpIHx8IFxcXG4rICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFUpIHx8IFxcXG4rICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFVfQUxMKVxuK1x0ZGV2LmRtYV9jb2hlcmVudCA9IHRydWU7XG4rI2VuZGlmXG4rXG4rXHRub25fZG1hbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNmRldiwgc2l6ZSwgXHUwMDI2bm9uX2RtYW1faGFuZGxlLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbm9uX2RtYW1fYWRkcikge1xuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiRE1BIGFsbG9jYXRpb24gZmFpbGVkXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRyZXQgPSBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBub25fZG1hbV9hZGRyLCBzaXplLCBub25fZG1hbV9oYW5kbGUsIFx1MDAyNnN0YXRlKTtcbitcdEtVTklUX0VYUEVDVF9FUV9NU0codGVzdCwgcmV0LCAtRUlOVkFMLCBcIlByZXNlcnZpbmcgbm9uLWRldnJlcyBhbGxvY2F0aW9uIHNob3VsZCBmYWlsXCIpO1xuK1x0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBub25fZG1hbV9hZGRyLCBub25fZG1hbV9oYW5kbGUpO1xuK1xuK1x0YWRkciA9IGRtYW1fYWxsb2NfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBcdTAwMjZoYW5kbGUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFhZGRyKSB7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJETUEgYWxsb2NhdGlvbiBmYWlsZWRcIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJldCA9IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihcdTAwMjZkZXYsIGFkZHIsIHNpemUsIGhhbmRsZSwgXHUwMDI2c3RhdGUpO1xuK1x0S1VOSVRfQVNTRVJUX0VRX01TRyh0ZXN0LCByZXQsIDAsIFwiRmFpbGVkIHRvIHByZXNlcnZlIGRtYW0gYWxsb2NhdGlvblwiKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGtob190ZXN0X3BhZ2VzX3ByZXNlcnZlZChkbWFfdG9fcGh5cyhcdTAwMjZkZXYsIGhhbmRsZSksIDEpKTtcbitcbitcdGRtYW1fdW5wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKFx1MDAyNmRldiwgYWRkciwgc2l6ZSwgaGFuZGxlLCBzdGF0ZSk7XG4rXHRLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCwga2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKGRtYV90b19waHlzKFx1MDAyNmRldiwgaGFuZGxlKSwgMSkpO1xuK1xuK1x0ZG1hbV9mcmVlX2NvaGVyZW50KFx1MDAyNmRldiwgc2l6ZSwgYWRkciwgaGFuZGxlKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRtYV9kaXJlY3RfdGVzdF9jYXNlc1tdID0ge1xuK1x0S1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2RtYV9kaXJlY3RfY29oZXJlbnQsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxuK1x0S1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2RtYV9kaXJlY3Rfbm9uX2NvaGVyZW50LCBkbWFfc2l6ZV9nZW5fcGFyYW1zKSxcbitcdEtVTklUX0NBU0VfUEFSQU0odGVzdF9kbWFfZGlyZWN0X2NvaGVyZW50X2F0b21pYywgZG1hX3NpemVfZ2VuX3BhcmFtcyksXG4rXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnRfYXRvbWljLCBkbWFfc2l6ZV9nZW5fcGFyYW1zKSxcbitcdEtVTklUX0NBU0UodGVzdF9kbWFtX3ByZXNlcnZhdGlvbiksXG4rXHR7fVxuK307XG4rXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBkbWFfZGlyZWN0X3Rlc3Rfc3VpdGUgPSB7XG4rXHQubmFtZSA9IFwiZG1hX2RpcmVjdF9saXZldXBkYXRlXCIsXG4rXHQudGVzdF9jYXNlcyA9IGRtYV9kaXJlY3RfdGVzdF9jYXNlcyxcbit9O1xuK2t1bml0X3Rlc3Rfc3VpdGUoZG1hX2RpcmVjdF90ZXN0X3N1aXRlKTtcbitcbitNT0RVTEVfSU1QT1JUX05TKFwiRVhQT1JURURfRk9SX0tVTklUX1RFU1RJTkdcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiS1VuaXQgdGVzdCBmb3IgRE1BIGRpcmVjdCBsaXZlIHVwZGF0ZSBwcmVzZXJ2YXRpb25cIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9tYXBwaW5nLmMgYi9rZXJuZWwvZG1hL21hcHBpbmcuY1xuaW5kZXggMjNlZDhlYjkyMzNlNTUuLmFlYzEyMjJhYjVhZWIxIDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9tYXBwaW5nLmNcbisrKyBiL2tlcm5lbC9kbWEvbWFwcGluZy5jXG5AQCAtMTIsNiArMTIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUtZG1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbXNhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWNfaGFuZG92ZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuQEAgLTM1LDEyICszNywyNSBAQCBzdHJ1Y3QgZG1hX2RldnJlcyB7XG4gXHR2b2lkXHRcdCp2YWRkcjtcbiBcdGRtYV9hZGRyX3RcdGRtYV9oYW5kbGU7XG4gXHR1bnNpZ25lZCBsb25nXHRhdHRycztcbisjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4rXHRib29sIGlzX3ByZXNlcnZlZDtcbisjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGRtYW1fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcbiB7XG4gXHRzdHJ1Y3QgZG1hX2RldnJlcyAqdGhpcyA9IHJlcztcbiBcbisjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4rXHQvKlxuK1x0ICogRnJlZWluZyB0aGUgcHJlc2VydmVkIG1lbW9yeSBpcyBkYW5nZXJvdXMgYXMgaXQgY2FuIGNhdXNlIFVBRiBpbiB0aGVcbitcdCAqIGN1cnJlbnQgb3IgbmV4dCBrZXJuZWwgaWYgdGhlIG1lbW9yeSBpcyBzdGlsbCBiZWluZyB1c2VkIGJ5IHRoZVxuK1x0ICogZGV2aWNlLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTih0aGlzLVx1MDAzZWlzX3ByZXNlcnZlZCkpXG4rXHRcdHJldHVybjtcbisjZW5kaWZcbitcbiBcdGRtYV9mcmVlX2F0dHJzKGRldiwgdGhpcy1cdTAwM2VzaXplLCB0aGlzLVx1MDAzZXZhZGRyLCB0aGlzLVx1MDAzZWRtYV9oYW5kbGUsXG4gXHRcdFx0dGhpcy1cdTAwM2VhdHRycyk7XG4gfVxuQEAgLTYyOCw2ICs2NDMsMTIzIEBAIHU2NCBkbWFfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkbWFfZ2V0X3JlcXVpcmVkX21hc2spO1xuIFxuKyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcbitpbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdCAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XG4rXG4rXHRpZiAoZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgY3B1X2FkZHIpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoZG1hX2FsbG9jX2RpcmVjdChkZXYsIG9wcykpXG4rXHRcdHJldHVybiBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oZGV2LCBjcHVfYWRkciwgc2l6ZSxcbitcdFx0XHRcdFx0XHQgICAgICBkbWFfaGFuZGxlLCBhdHRycyxcbitcdFx0XHRcdFx0XHQgICAgICBzdGF0ZSk7XG4rXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK0VYUE9SVF9TWU1CT0woZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMpO1xuK1xuK3ZvaWQgZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XG4rXG4rXHRpZiAoZG1hX2FsbG9jX2RpcmVjdChkZXYsIG9wcykpXG4rXHRcdGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKGRldiwgc3RhdGUpO1xuK31cbitFWFBPUlRfU1lNQk9MKGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24pO1xuK1xuK3ZvaWQgKmRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdCAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XG4rXHR2b2lkICpjcHVfYWRkciA9IE5VTEw7XG4rXG4rXHRXQVJOX09OX09OQ0UoIWRldi1cdTAwM2Vjb2hlcmVudF9kbWFfbWFzayk7XG4rXG4rXHRpZiAoZG1hX2FsbG9jX2RpcmVjdChkZXYsIG9wcykpXG4rXHRcdGNwdV9hZGRyID0gZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oZGV2LCBzaXplLCBkbWFfaGFuZGxlLFxuK1x0XHRcdFx0XHRcdFx0IGdmcCwgYXR0cnMsIHN0YXRlKTtcbitcbitcdGRlYnVnX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsICpkbWFfaGFuZGxlLCBjcHVfYWRkciwgYXR0cnMpO1xuK1x0cmV0dXJuIGNwdV9hZGRyO1xuK31cbitFWFBPUlRfU1lNQk9MKGRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpO1xuK1xuK2ludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdCAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxuK3tcbitcdHN0cnVjdCBkbWFfZGV2cmVzIG1hdGNoX2RhdGEgPSB7IHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlIH07XG4rXHRzdHJ1Y3QgZG1hX2RldnJlcyAqZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZHIgPSBkZXZyZXNfZmluZChkZXYsIGRtYW1fcmVsZWFzZSwgZG1hbV9tYXRjaCwgXHUwMDI2bWF0Y2hfZGF0YSk7XG4rXHRpZiAoIWRyKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChkci1cdTAwM2Vpc19wcmVzZXJ2ZWQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0gZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSwgZG1hX2hhbmRsZSwgYXR0cnMsIHN0YXRlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRkci1cdTAwM2Vpc19wcmVzZXJ2ZWQgPSB0cnVlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0woZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKTtcbitcbit2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4rXHRcdFx0XHRzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgc3RhdGUpXG4re1xuK1x0c3RydWN0IGRtYV9kZXZyZXMgbWF0Y2hfZGF0YSA9IHsgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUgfTtcbitcdHN0cnVjdCBkbWFfZGV2cmVzICpkcjtcbitcbitcdGRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFx1MDAyNm1hdGNoX2RhdGEpO1xuK1x0aWYgKCFkcilcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFkci1cdTAwM2Vpc19wcmVzZXJ2ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oZGV2LCBzdGF0ZSk7XG4rXHRkci1cdTAwM2Vpc19wcmVzZXJ2ZWQgPSBmYWxzZTtcbit9XG4rRVhQT1JUX1NZTUJPTChkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbik7XG4rXG4rdm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxuK3tcbitcdHN0cnVjdCBkbWFfZGV2cmVzICpkcjtcbitcdHZvaWQgKnZhZGRyO1xuK1xuK1x0ZHIgPSBkZXZyZXNfYWxsb2MoZG1hbV9yZWxlYXNlLCBzaXplb2YoKmRyKSwgZ2ZwKTtcbitcdGlmICghZHIpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dmFkZHIgPSBkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwLCBhdHRycywgc3RhdGUpO1xuK1x0aWYgKCF2YWRkcikge1xuK1x0XHRkZXZyZXNfZnJlZShkcik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0ZHItXHUwMDNldmFkZHIgPSB2YWRkcjtcbitcdGRyLVx1MDAzZWRtYV9oYW5kbGUgPSAqZG1hX2hhbmRsZTtcbitcdGRyLVx1MDAzZXNpemUgPSBzaXplO1xuK1x0ZHItXHUwMDNlYXR0cnMgPSBhdHRycztcbitcbitcdGRldnJlc19hZGQoZGV2LCBkcik7XG4rXG4rXHRyZXR1cm4gdmFkZHI7XG4rfVxuK0VYUE9SVF9TWU1CT0woZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpO1xuKyNlbmRpZlxuK1xuIHZvaWQgKmRtYV9hbGxvY19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLFxuIFx0XHRnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIGF0dHJzKVxuIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL3Bvb2wuYyBiL2tlcm5lbC9kbWEvcG9vbC5jXG5pbmRleCAyYjJmYmI3MDkyNDI5YS4uNzg0OTY1Njg5NzNmZWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL3Bvb2wuY1xuKysrIGIva2VybmVsL2RtYS9wb29sLmNcbkBAIC0zLDYgKzMsOSBAQFxuICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTHRkLlxuICAqIENvcHlyaWdodCAoQykgMjAyMCBHb29nbGUgTExDXG4gICovXG4rXG4rI2luY2x1ZGUgXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXHUwMDNlXG5AQCAtMzA3LDMgKzMxMCwxNyBAQCBib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSlcbiBcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4rXG4rYm9vbCBkbWFfaXNfZnJvbV9wb29sKHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2wgPSBOVUxMO1xuK1xuK1x0d2hpbGUgKChwb29sID0gZG1hX2d1ZXNzX3Bvb2wocG9vbCwgMCkpKSB7XG4rXHRcdGlmICghZ2VuX3Bvb2xfaGFzX2FkZHIocG9vbCwgKHVuc2lnbmVkIGxvbmcpc3RhcnQsIHNpemUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChkbWFfaXNfZnJvbV9wb29sKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE1OjEwLjA2Mjg3NDc3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNzU2NDQxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBETUEgRGlyZWN0IExpdmV1cGRhdGUgUHJlc2VydmF0aW9uIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQncyBhbGwgYWJvdXQgYWRkaW5nIHN1cHBvcnQgZm9yIFwiRE1BIGRpcmVjdCBsaXZldXBkYXRlIHByZXNlcnZhdGlvbixcIiB3aGljaCBpcyBjbGVhcmx5IHRpZWQgaW50byB0aGUgS2V4ZWMgSGFuZE92ZXIgKEtITykgc3lzdGVtLiBUaGV5J3ZlIGludHJvZHVjZWQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb25gLCBgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb25gLCBhbmQgYGRtYV9kaXJlY3RfcmVzdG9yZV9hbGxvY2F0aW9uYCwgYWxvbmcgd2l0aCBhIEtVbml0IHRlc3QgaW4gYGtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZXkndmUgYWxzbyBhZGRlZCB0aGUgZXhwZWN0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgRE1BX0xJVkVVUERBVEVgIGFuZCBgRE1BX0xJVkVVUERBVEVfS1VOSVRfVEVTVGAuXG5cbkJ1dCBub3cgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBhY2Nlc3NpYmxlIGlzIHRoaXM/IElzIHRoaXMgZnVuY3Rpb25hbGl0eSBtZWFudCB0byBiZSBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCwgb3IgYXJlIHdlIGV4cG9zaW5nIHRoaXMgdG8gdXNlcnNwYWNlIHNvbWVob3c/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFjaGFiaWxpdHkgaGVyZS4gVGhlIGZ1bmN0aW9ucyAqYXJlKiBleHBvcnRlZCwgd2hpY2ggaXMgYSBiaXQgb2YgYSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBiZWluZyB1c2VkLiBgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnNgIGFuZCBgZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRyc2AgYXJlIGV4cG9ydGVkLCBmb3IgZXhhbXBsZS4gU28sIEkgbmVlZCB0byBrbm93IGlmIGFueSBvZiB0aGVtIGFyZSBhY3R1YWxseSAqdXNlZCogYnkgYW55dGhpbmcsIG9yIGlmIHRoZXkncmUganVzdCBiZWluZyBleHBvcnRlZCBmb3IgdGhlIHNha2Ugb2YgY29tcGxldGVuZXNzLiBUaW1lIHRvIGRvIGEgcXVpY2sgc2VhcmNoLiBJJ2xsIHNlYXJjaCBmb3IgY2FsbHMgdG8gYGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzYCBhbmQgYGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uYCB0byBkZXRlcm1pbmUgaXRzIHVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NjUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNToxNS4zMzg1MjI2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjgzMjY4OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD0yMTE9aW50IGRtYV9tbWFwX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC0yMTMtI2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDoyMTQ6aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTIxNS1cXHRcXHRcXHRcXHQgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg9NTEwPXN0YXRpYyBpbmxpbmUgYm9vbCBkbWFfbmVlZF91bm1hcChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNTE2LSNpZiAhZGVmaW5lZChDT05GSUdfRE1BX0xJVkVVUERBVEUpIHx8ICFkZWZpbmVkKENPTkZJR19IQVNfRE1BKVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDo1MTc6c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNTE4LVxcdFxcdFxcdFxcdFxcdFxcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg9Njc3PXN0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNjc5LXtcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg6NjgwOlxcdHJldHVybiBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC02ODEtXFx0XFx0XFx0XFx0XFx0ICAgICBkbWFfaGFuZGxlLCAwLCBzdGF0ZSk7XFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYz02NDQ9RVhQT1JUX1NZTUJPTF9HUEwoZG1hX2dldF9yZXF1aXJlZF9tYXNrKTtcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY0Ni0jaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXFxua2VybmVsL2RtYS9tYXBwaW5nLmM6NjQ3OmludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY0OC1cXHRcXHRcXHRcXHQgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NjItfVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjY2MzpFWFBPUlRfU1lNQk9MKGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKTtcXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NjQtXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYz02OTI9aW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzA2LVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjcwNzpcXHRyZXQgPSBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLCBkbWFfaGFuZGxlLCBhdHRycywgc3RhdGUpO1xcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcwOC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNToyMS4wMjE4MDA5NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI4OTMzMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZS5cblxuKipBbmFseXppbmcgS2VybmVsIEZ1bmN0aW9uIFVzYWdlKipcblxuQWxyaWdodCwgdGhlIGNvZGUgZGVmaW5lcyBhbmQgZXhwb3J0cyBzb21ldGhpbmcsIGJ1dCBpdCdzIG5vdCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmUgZWxzZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLi4uIGludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIGl0J3MgZWl0aGVyOiBhKSBhbiBpbmNvbXBsZXRlIGZlYXR1cmUsIGIpIGEgcGllY2Ugb2YgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZ1dHVyZSB1c2UsIG9yIGMpIHNvbWV0aGluZyB0aGF0IGhhcyBiZWVuIGFkZGVkIGFuZCAqc2hvdWxkKiBiZSB1c2VkLCBidXQgaXNuJ3QgYmVpbmcgY29ycmVjdGx5IGNhbGxlZC4gXG5cbkJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUgcXVpY2tseSBncmVwIHRoZSBjb2RlYmFzZSBmb3IgYGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uYCBhbmQgYGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbmAuIEkgbmVlZCB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgdGhhdCBpdCdzIGp1c3QgYmVpbmcgaW52b2tlZCB1bmRlciBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lIG9yIHRocm91Z2ggYSBtYWNybyBvciBpbmxpbmUgZnVuY3Rpb24uIENoZWNraW5nIHRoaXMgd2lsbCBzYXZlIG1lIGEgbG90IG9mIGd1ZXNzd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNToyNC4xNTA3Mzk0NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyMTk0NTUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWFfcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg9NjcwPXN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNjc2LVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDo2Nzc6c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNjc4LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCAqc3RhdGUpXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmM9NTM9c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy05NC1cXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmM6OTU6XFx0cmV0ID0gZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXFx1MDAyNmRldiwgYWRkcjEsIHNpemUsIGhhbmRsZTEsIFxcdTAwMjZzdGF0ZSk7XFxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTk2LVxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIGV4cGVjdGVkX3JldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE1OjI5Ljg3MjY5MzYyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NTcxMDM5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIERNQSBNZW1vcnkgQWxsb2NhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCBtZSBzZWUuLi4gYmFzZWQgb24gdGhlIGluaXRpYWwgc2NhbiwgaXQgKmxvb2tzKiBsaWtlIHRoZXNlIGBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb25gIGZ1bmN0aW9ucyBhcmUgZXhjbHVzaXZlbHkgdXRpbGl6ZWQgd2l0aGluIHRoZSBLVW5pdCB0ZXN0IGxvY2F0ZWQgaW4gYGtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuY2AuIFRoYXQncyBhIGJpdCBzdXJwcmlzaW5nLiBJIGV4cGVjdGVkIGJyb2FkZXIgdXNhZ2UsIGdpdmVuIHRoZSBuYXR1cmUgb2YgY29oZXJlbnQgRE1BIGFsbG9jYXRpb24uIEkgbWVhbiwgaXQncyBhIGZ1bmRhbWVudGFsIG9wZXJhdGlvbi5cblxuSG93ZXZlciwgdGhlIGltbWVkaWF0ZSBjb25jbHVzaW9uIHRoYXQgSSBjYW4gZHJhdyBpcyB0aGF0IHRoZXkgYXJlIHV0aWxpemVkIG9ubHkgaW4gdGhpcyBvbmUgc3BlY2lmaWMgYXJlYS5cblxuQnV0LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IHN0cm9uZyBjb25jbHVzaW9uIG9yIGFzc3VtcHRpb25zLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiAqSXMqIHRoYXQgdHJ1bHkgdGhlIGNhc2U/IEkgbmVlZCB0byBwZXJmb3JtIGEgbW9yZSByaWdvcm91cyBzZWFyY2ggdG8gY29uZmlybSB0aGF0IHRoZXJlIGlzbid0IHNvbWUgc3VidGxlLCBpbmRpcmVjdCB1c2FnZSBvciBjYWxsIHBhdGggdGhhdCBJIG1pc3NlZCBpbml0aWFsbHkuIEkgbmVlZCB0byBtYWtlICpzdXJlKiB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGluc3RhbmNlcyBvZiBgZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uYCBiZWluZyBjYWxsZWQsIHBlcmhhcHMgdGhyb3VnaCBhbiBpbnRlcm1lZGlhcnkgZnVuY3Rpb24gb3IgYSBtYWNyby4gSSBkb24ndCB3YW50IHRvIGp1bXAgdG8gdGhlIHdyb25nIGNvbmNsdXNpb25zLiBJIG5lZWQgYSBicm9hZGVyIHNjb3BlIG9mIHRoZSB0ZXN0IHRvIG1ha2UgbXkgc3RhdGVtZW50IGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDMzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6MTU6MzQuNjI5ODAxMTY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NTA5NTM0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD04MjA9c3RhdGljIGlubGluZSB2b2lkICpkbWFtX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtODI2LVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDo4Mjc6c3RhdGljIGlubGluZSBpbnQgZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTgyOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0ICpzdGF0ZSlcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYz0xNDQ9c3RhdGljIHZvaWQgdGVzdF9kbWFtX3ByZXNlcnZhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtMTcwLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYzoxNzE6XFx0cmV0ID0gZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKFxcdTAwMjZkZXYsIG5vbl9kbWFtX2FkZHIsIHNpemUsIG5vbl9kbWFtX2hhbmRsZSwgXFx1MDAyNnN0YXRlKTtcXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtMTcyLVxcdEtVTklUX0VYUEVDVF9FUV9NU0codGVzdCwgcmV0LCAtRUlOVkFMLCBcXFwiUHJlc2VydmluZyBub24tZGV2cmVzIGFsbG9jYXRpb24gc2hvdWxkIGZhaWxcXFwiKTtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy0xODAtXFxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jOjE4MTpcXHRyZXQgPSBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXFx1MDAyNmRldiwgYWRkciwgc2l6ZSwgaGFuZGxlLCBcXHUwMDI2c3RhdGUpO1xcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy0xODItXFx0S1VOSVRfQVNTRVJUX0VRX01TRyh0ZXN0LCByZXQsIDAsIFxcXCJGYWlsZWQgdG8gcHJlc2VydmUgZG1hbSBhbGxvY2F0aW9uXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE1OjQwLjI4MDc5NTQ5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MjU2OTEzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRE1BIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldyBmdW5jdGlvbnMsIGFuZCBpdCBzZWVtcyB0aGV5J3JlIGV4Y2x1c2l2ZWx5IGNhbGxlZCB3aXRoaW4gdGhlIEtVbml0IHRlc3RzLiBUaGF0IHJhaXNlcyBhIHJlZCBmbGFnLiBTaW5jZSB0aGV5J3JlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSDigJMgbm8gc3lzdGVtIGNhbGxzLCBubyBkcml2ZXIgaW50ZWdyYXRpb25zIHlldCDigJMgdGhleSdyZSBjb21wbGV0ZWx5IG9mZiB0aGUgcmFkYXIgZm9yIHN5emthbGxlci4gQW5kIHdhaXQsIHN5emthbGxlciAqZG9lc24ndCogZnV6eiBLVW5pdCB0ZXN0cyBkaXJlY3RseSBhbnl3YXksIGRvZXMgaXQ/IFNvIGV2ZW4gaWYgaXQgKmNvdWxkKiwgd2UncmUgbG9va2luZyBhdCBhIGNsb3NlZC1vZmYgQVBJIHJpZ2h0IG5vdy5cblxuSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgbW9kaWZpZWQgZmlsZXM/IExldCdzIHNlZS4uLiBhIHdob2xlIHNsZXcgb2YgdGhlbSEgYGluY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oYCwgYGluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaGAsIGBpbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhgLCBgaW5jbHVkZS9saW51eC9raG8vYWJpL2RtYV9hbGxvYy5oYCwgYW5kIHRoZW4gYSBidW5jaCBvZiBmaWxlcyB1bmRlciBga2VybmVsL2RtYS9gOiBgS2NvbmZpZ2AsIGBNYWtlZmlsZWAsIGBjb2hlcmVudC5jYCwgYGNvbnRpZ3VvdXMuY2AsIGBkaXJlY3QuY2AsIGBkaXJlY3RfdGVzdC5jYCwgYG1hcHBpbmcuY2AsIGFuZCBgcG9vbC5jYC5cblxuUmlnaHQuIEJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBxdWlja2x5LiBJIG5lZWQgdG8ga25vdyBpZiB0aGVzZSBuZXdseSBhZGRlZCBmdW5jdGlvbnM6IGBkbWFfaXNfZnJvbV9jbWFgLCBgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50YCwgYW5kIGBkbWFfaXNfZnJvbV9wb29sYCwgYXJlICphY3R1YWxseSogdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlIGJhc2UuIFRoYXTigJlzIHRoZSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNDQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6MTU6NDUuODA2NDkyMzM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQyNjUxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtYV9pc19mcm9tX2NtYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg9MTA4PXZvaWQgZG1hX2NvbnRpZ3VvdXNfZWFybHlfZml4dXAocGh5c19hZGRyX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg6MTA5OmJvb2wgZG1hX2lzX2Zyb21fY21hKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTEwLSNlbHNlIC8qIENPTkZJR19ETUFfQ01BICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg9MTQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTQ5LVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaDoxNTA6c3RhdGljIGlubGluZSBib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTUxLXtcXG4tLVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jPTE0MD1zdGF0aWMgaW50IGRtYV9jbWFfY2hlY2tfYXJlYShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy0xNDgtXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6MTQ5OmJvb2wgZG1hX2lzX2Zyb21fY21hKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTE1MC17XFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy0xNTctfVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjE1ODpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGRtYV9pc19mcm9tX2NtYSk7XFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtMTU5LVxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYz0zMTM9aW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy0zMjMtXFx0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XFxua2VybmVsL2RtYS9kaXJlY3QuYzozMjQ6XFx0aWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cyhkZXYsIGRtYV9oYW5kbGUpLCBzaXplKSlcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTMyNS1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmM9NTM9c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy04OS1cXHRcXHRrdW5pdF9pbmZvKHRlc3QsIFxcXCJETUEgYWxsb2NhdGlvbiB1c2luZyBwb29sLCBleHBlY3RpbmcgLUVPUE5PVFNVUFBcXFwiKTtcXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmM6OTA6XFx0fSBlbHNlIGlmIChkbWFfaXNfZnJvbV9jbWEoZG1hX3RvX3BoeXMoXFx1MDAyNmRldiwgaGFuZGxlMSksIHNpemUpKSB7XFxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTkxLVxcdFxcdGV4cGVjdGVkX3JldCA9IC1FT1BOT1RTVVBQO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNTo1MS4wNDkxNTI0NTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4ODQzNTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlPyBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0IHNlZW1zIHByZXR0eSBpc29sYXRlZC4gSSdtIHNlZWluZyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AgYW5kIGBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb25gLCBhcmUgb25seSB1dGlsaXplZCB3aXRoaW4gdGhlIG5ldyBmdW5jdGlvbnMgSSdtIGV4YW1pbmluZyBhbmQsIG9mIGNvdXJzZSwgdGhlIEtVbml0IHRlc3RzLiBUaGF0J3MgdGhlIGltbWVkaWF0ZSBzY29wZS4gQnV0IGhlcmUncyB0aGUga2lja2VyOiBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmVuJ3QgYWN0dWFsbHkgY2FsbGVkICphbnl3aGVyZSogZWxzZSB3aXRoaW4gdGhlIGtlcm5lbCBwcm9wZXIuIE5vIGRyaXZlcnMsIG5vIGNvcmUga2VybmVsIGNvZGUg4oCTIG5vdGhpbmcgaXMgZGlyZWN0bHkgY2FsbGluZyBlaXRoZXIgYGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzYCBvciBgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uYC5cblxuU28sIHRoZSBvYnZpb3VzIGNvbmNsdXNpb24gaXMgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiBCdXQsIEkgbmVlZCB0byBiZSAqc3VyZSouIFdhaXQsIGNvdWxkIHRoZXJlIGJlIGEgY2FsbCBzb21ld2hlcmUgZWxzZT8gQ291bGQgdGhpcyBiZSByZWxhdGVkIHRvIHNvbWUgS2V4ZWMgSGFuZE92ZXIgY29kZT8gVGhpcyBmZWVscyBmYW1pbGlhciBzb21laG93LiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoaXMgaXMgYSBoaWRkZW4gY2FsbCBpbiBhbm90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbC4gVGltZSB0byBnbyBodW50aW5nIGZvciBvdGhlciBpbnN0YW5jZXMgb2YgYGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzYCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNTo1NS4yMzc1OTM4ODNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjExMzAyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTIxMT1pbnQgZG1hX21tYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTIxMy0jaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjIxNDppbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtMjE1LVxcdFxcdFxcdFxcdCAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD01MTA9c3RhdGljIGlubGluZSBib29sIGRtYV9uZWVkX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC01MTYtI2lmICFkZWZpbmVkKENPTkZJR19ETUFfTElWRVVQREFURSkgfHwgIWRlZmluZWQoQ09ORklHX0hBU19ETUEpXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjUxNzpzdGF0aWMgaW5saW5lIGludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC01MTgtXFx0XFx0XFx0XFx0XFx0XFx0c2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD02Nzc9c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC02Nzkte1xcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDo2ODA6XFx0cmV0dXJuIGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTY4MS1cXHRcXHRcXHRcXHRcXHQgICAgIGRtYV9oYW5kbGUsIDAsIHN0YXRlKTtcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jPTY0ND1FWFBPUlRfU1lNQk9MX0dQTChkbWFfZ2V0X3JlcXVpcmVkX21hc2spO1xcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjQ2LSNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo2NDc6aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjQ4LVxcdFxcdFxcdFxcdCAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY2Mi19XFxua2VybmVsL2RtYS9tYXBwaW5nLmM6NjYzOkVYUE9SVF9TWU1CT0woZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMpO1xcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY2NC1cXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jPTY5Mj1pbnQgZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYy03MDYtXFxua2VybmVsL2RtYS9tYXBwaW5nLmM6NzA3OlxcdHJldCA9IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsIGRtYV9oYW5kbGUsIGF0dHJzLCBzdGF0ZSk7XFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzA4LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE2OjAwLjc5ODc0MjUwOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQzNzkxMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERNQSBMaXZldXBkYXRlIFByZXNlcnZhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggY2xhaW1zIHRvIGJyaW5nIGluIGEgbmV3IEFQSSBzcGVjaWZpY2FsbHkgZm9yIERNQSBsaXZldXBkYXRlIHByZXNlcnZhdGlvbiwgcmlnaHQ/IEJ1dCBoYW5nIG9uIGEgc2Vjb25kLi4uaXQncyBub3QgYWN0dWFsbHkgKnVzZWQqIGFueXdoZXJlIHlldCwgYnkgYW55IGRyaXZlciBvciBjb3JlIHN5c3RlbS4gSG1tLiBTbywgbG9naWNhbGx5LCB0aGF0IG1lYW5zIGl0J3MgdG90YWxseSBpbmFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYXQgdGhpcyBzdGFnZS4gQW5kIGlmIGl0J3Mgbm90IGV4cG9zZWQsIHRoYXQgbWVhbnMgd2UgY2FuJ3QgZXZlbiB0cnkgdG8gZnV6eiBpdC4gTm90IHZlcnkgZXhjaXRpbmcsIGhvbmVzdGx5LlxuXG5XYWl0Li4uIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGNoYW5nZXMgY3JlZXBpbmcgaW50byBleGlzdGluZyBmdW5jdGlvbnM/IEl04oCZcyBhbHdheXMgdGhlIGhpZGRlbiBzdHVmZiB0aGF0IGdldHMgeW91LiBMZXQncyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBkbWFtX3JlbGVhc2VgIGluIGBrZXJuZWwvZG1hL21hcHBpbmcuY2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBhbnkgY29sbGF0ZXJhbCBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU3NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE2OjA0LjY0NDYwNzU0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NzEyNjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWFtX3JlbGVhc2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDEzPXN0cnVjdCBmZWNfZG1hX2RldnJlcyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDE5OnN0YXRpYyB2b2lkIGZlY19kbWFtX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTQyNj1zdGF0aWMgdm9pZCAqZmVjX2RtYW1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjQzMjpcXHRkciA9IGRldnJlc19hbGxvYyhmZWNfZG1hbV9yZWxlYXNlLCBzaXplb2YoKmRyKSwgZ2ZwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MzMtXFx0aWYgKCFkcilcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jPTM1PXN0cnVjdCBkbWFfZGV2cmVzIHtcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTQ0LVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjQ1OnN0YXRpYyB2b2lkIGRtYW1fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcXG5rZXJuZWwvZG1hL21hcHBpbmcuYy00Ni17XFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYz04ND12b2lkIGRtYW1fZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkcixcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTg4LVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjg5OlxcdFdBUk5fT04oZGV2cmVzX2Rlc3Ryb3koZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFxcdTAwMjZtYXRjaF9kYXRhKSk7XFxua2VybmVsL2RtYS9tYXBwaW5nLmMtOTAtXFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7XFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYz0xMDg9dm9pZCAqZG1hbV9hbGxvY19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLFxcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmMtMTEzLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjExNDpcXHRkciA9IGRldnJlc19hbGxvYyhkbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTExNS1cXHRpZiAoIWRyKVxcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmM9NjkyPWludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY5OS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo3MDA6XFx0ZHIgPSBkZXZyZXNfZmluZChkZXYsIGRtYW1fcmVsZWFzZSwgZG1hbV9tYXRjaCwgXFx1MDAyNm1hdGNoX2RhdGEpO1xcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcwMS1cXHRpZiAoIWRyKVxcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmM9NzE2PXZvaWQgZG1hbV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcyMS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo3MjI6XFx0ZHIgPSBkZXZyZXNfZmluZChkZXYsIGRtYW1fcmVsZWFzZSwgZG1hbV9tYXRjaCwgXFx1MDAyNm1hdGNoX2RhdGEpO1xcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcyMy1cXHRpZiAoIWRyKVxcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmM9NzM0PXZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYy03NDAtXFxua2VybmVsL2RtYS9tYXBwaW5nLmM6NzQxOlxcdGRyID0gZGV2cmVzX2FsbG9jKGRtYW1fcmVsZWFzZSwgc2l6ZW9mKCpkciksIGdmcCk7XFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzQyLVxcdGlmICghZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE2OjA5LjQ0MTc0ODY4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjg0ODg5ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRE1BIFJlbGVhc2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkbWFtX3JlbGVhc2VgIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBETUEgbGl2ZSB1cGRhdGVzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgY2hlY2s6XG5cbmBgYGNcbiNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcblx0Lypcblx0ICogRnJlZWluZyB0aGUgcHJlc2VydmVkIG1lbW9yeSBpcyBkYW5nZXJvdXMgYXMgaXQgY2FuIGNhdXNlIFVBRiBpbiB0aGVcblx0ICogY3VycmVudCBvciBuZXh0IGtlcm5lbCBpZiB0aGUgbWVtb3J5IGlzIHN0aWxsIGJlaW5nIHVzZWQgYnkgdGhlXG5cdCAqIGRldmljZS5cblx0ICovXG5cdGlmIChXQVJOX09OKHRoaXMtXHUwMDNlaXNfcHJlc2VydmVkKSlcblx0XHRyZXR1cm47XG4jZW5kaWZcbmBgYFxuXG5Ob3csIHRoZSBpc3N1ZSBJJ20gc2VlaW5nIGlzIHRoYXQgYHRoaXMtXHUwMDNlaXNfcHJlc2VydmVkYCBzZWVtcyB0byAqb25seSogYmUgc2V0IGluIGBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnNgLCBhbmQgYXMgZmFyIGFzIEkgY2FuIHRlbGwsICp0aGF0KiBmdW5jdGlvbiBpcyBuZXZlciBhY3R1YWxseSBjYWxsZWQhIFRoZSBhbGxvY2F0aW9uIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgYGRldnJlc19hbGxvY2AsIHNvIHRoZSBmbGFnIHdpbGwgYWx3YXlzIGJlIGZhbHNlIG9yIHplcm8uIFRoaXMgbWVhbnMgdGhpcyBjaGVjayB3aWxsIG5ldmVyIGFjdHVhbGx5IHRyaWdnZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIGZ1bmN0aW9uYWxseSBkZWFkIGluIGFueSByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguIEl0J3MgYSBuby1vcCwgYXQgbGVhc3QgZm9yIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5UaGUgcmVzdCBvZiB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBpbnRyb2R1Y2luZyBuZXcgZnVuY3Rpb25zIGFuZCBhIEtVbml0IHRlc3QuIEhvd2V2ZXIsIHNpbmNlIHRoZSBuZXcgQVBJIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHVzZWQgKmFueXdoZXJlKiBpbiB0aGUgZXhpc3RpbmcgY29kZSwgaXQncyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiBUaGVyZSBhcmUgbm8gY2FsbGVycy4gVGh1cywgZnV6emluZyB0aG9zZSBuZXcgZnVuY3Rpb25zIHdvdWxkbid0IGJlIHZhbHVhYmxlIHNpbmNlIHRoZXkgYXJlbid0IHBhcnQgb2YgYW55IGV4ZWN1dGlvbiBwYXRoLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgYGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudGAgaXMgdXRpbGl6ZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBUaGF0IHNob3VsZCBiZSBhIHF1aWNrIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc4OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNjoxNC43MjY2NDIwNTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTkwODA2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaD0xNjM9aW50IGRtYV9tbWFwX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oLTE2NC1cXHRcXHR2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsIGludCAqcmV0KTtcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg6MTY1OmJvb2wgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpO1xcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaC0xNjYtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg9MTY3PXN0YXRpYyBpbmxpbmUgaW50IGRtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTc1LSNkZWZpbmUgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCB2bWEsIHZhZGRyLCBvcmRlciwgcmV0KSAoMClcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg6MTc2OiNkZWZpbmUgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgdmFkZHIpIChmYWxzZSlcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTc3LVxcbi0tXFxua2VybmVsL2RtYS9jb2hlcmVudC5jPTIyNz1pbnQgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb3JkZXIsIHZvaWQgKnZhZGRyKVxcbi0tXFxua2VybmVsL2RtYS9jb2hlcmVudC5jLTIzMy1cXG5rZXJuZWwvZG1hL2NvaGVyZW50LmM6MjM0OmJvb2wgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpXFxua2VybmVsL2RtYS9jb2hlcmVudC5jLTIzNS17XFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYz02NDc9aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NTItXFxua2VybmVsL2RtYS9tYXBwaW5nLmM6NjUzOlxcdGlmIChkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBjcHVfYWRkcikpXFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjU0LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6MTY6MTguOTQ1NzM2Mjg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Mjc1MjAxMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBETUEgQWxsb2NhdGlvbiBBdHRyaWJ1dGVzKipcblxuUmlnaHQsIGl0J3MgY2xlYXIgdGhlIGNvcmUgZm9jdXMgaGVyZSBpcyBzb2xlbHkgd2l0aGluIGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyB0aGUgZXhjbHVzaXZlIGxvY2F0aW9uLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgdmVyaWZ5IHRoYXQgYGRtYV9pc19mcm9tX3Bvb2xgIGlzbid0IHVzZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCBJJ20gbm90IG92ZXJsb29raW5nIGFueSBvdGhlciBwb3RlbnRpYWwgY2FsbHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgaW1wYWN0ZWQgYnkgdGhpcy4gQSB0aG9yb3VnaCBncmVwIG9yIGNvZGUgaW5zcGVjdGlvbiBpcyBpbiBvcmRlci4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgZG1hX2lzX2Zyb21fcG9vbGAgaXMgb25seSByZWZlcmVuY2VkIHdpdGhpbiB0aGF0IG9uZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkwNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE2OjIxLjg3MzI2MjQyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4OTc2OTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWFfaXNfZnJvbV9wb29sXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaD0yMjY9Ym9vbCBkbWFfZnJlZV9mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpO1xcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaC0yMjctXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oOjIyODpib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMjI5LWludCBkbWFfZGlyZWN0X3NldF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBjcHVfc3RhcnQsXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTMxMz1pbnQgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM0Mi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX0NPSEVSRU5UX1BPT0wpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2RtYS9kaXJlY3QuYzozNDM6XFx0ICAgIGRtYV9pc19mcm9tX3Bvb2woY3B1X2FkZHIsIHNpemUpKVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMzQ0LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYz01Mz1zdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24oc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTg2LVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYzo4NzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX0NPSEVSRU5UX1BPT0wpIFxcdTAwMjZcXHUwMDI2IGRtYV9pc19mcm9tX3Bvb2woYWRkcjEsIHNpemUpKSB7XFxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTg4LVxcdFxcdGV4cGVjdGVkX3JldCA9IC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2RtYS9wb29sLmM9MzAwPWJvb2wgZG1hX2ZyZWVfZnJvbV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKVxcbi0tXFxua2VybmVsL2RtYS9wb29sLmMtMzEzLVxcbmtlcm5lbC9kbWEvcG9vbC5jOjMxNDpib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKVxcbmtlcm5lbC9kbWEvcG9vbC5jLTMxNS17XFxuLS1cXG5rZXJuZWwvZG1hL3Bvb2wuYy0zMjUtfVxcbmtlcm5lbC9kbWEvcG9vbC5jOjMyNjpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGRtYV9pc19mcm9tX3Bvb2wpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNjoyNy4wNjMwNDU5NDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU3NzM0NjE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgaXQgc2VlbXMgdGhlIGNoYW5nZXMgYXJlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgYGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbmAgZnVuY3Rpb24gYW5kIHRoZSBhc3NvY2lhdGVkIEtVbml0IHRlc3QuIFRoaXMgbWVhbnMgdGhlIHByaW1hcnkgaW1wYWN0IGlzIHRoZSBhZGRpdGlvbiBvZiBhbiBBUEkgdGhhdCwgYXMgZmFyIGFzIEkgY2FuIHRlbGwgZnJvbSB0aGUgY29udGV4dCwgaXNuJ3QgYWN0dWFsbHkgKnVzZWQqIGF0IHRoaXMgc3RhZ2UsIGFsb25nIHdpdGggYSB0ZXN0IGZvciB0aGF0IHVudXNlZCBBUEkuXG5cbkdpdmVuIHRoZSBsaW1pdGVkIHNjb3BlIGFuZCB0aGUgbGFjayBvZiBhbnkgYWN0dWFsIHJ1bnRpbWUgdXNhZ2Ugb2YgdGhlIGFkZGVkIGZ1bmN0aW9uLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGZ1enppbmcgdGhpcyBwYXRjaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHJlc291cmNlcy4gSXQncyBlc3NlbnRpYWxseSB0ZXN0aW5nIGFuIHVudXNlZCBmdW5jdGlvbiBpbiBpc29sYXRpb24sIGFuZCBhbnkgZmFpbHVyZXMgaGVyZSB3b3VsZG4ndCBuZWNlc3NhcmlseSByZXZlYWwgbWVhbmluZ2Z1bCB2dWxuZXJhYmlsaXRpZXMgb3IgaW50ZWdyYXRpb24gaXNzdWVzIGluIHRoZSB3aWRlciBzeXN0ZW0uXG5cblRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgKm5vdCogd29ydGggZnV6emluZy4gSSdsbCBmbGFnIHRoZSBgV29ydGhGdXp6aW5nYCBwcm9wZXJ0eSBhcyBgZmFsc2VgLCBhbmQgZG9jdW1lbnQgdGhpcyByZWFzb25pbmcgZXhwbGljaXRseSwgYmVjYXVzZSBldmVuIHRob3VnaCBLVW5pdCB0ZXN0cyBhcmUgaW1wb3J0YW50LCB0aGV5IGRvbid0IGFsd2F5cyBpbmRpY2F0ZSBpZiBzb21ldGhpbmcgbmVlZHMgdG8gYmUgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY3MywiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNjozMS42NDAzOTU3M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uIChlLmcuLCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycywgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKSBhbmQgYSBLVW5pdCB0ZXN0IGZvciBpdC4gSG93ZXZlciwgdGhlIG5ldyBBUEkgaXMgbm90IGN1cnJlbnRseSBjYWxsZWQgYnkgYW55IGRyaXZlciBvciBjb3JlIGtlcm5lbCBjb2RlIG91dHNpZGUgb2YgdGhlIEtVbml0IHRlc3QgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBUEkgZm9yIERNQSBkaXJlY3QgbGl2ZXVwZGF0ZSBwcmVzZXJ2YXRpb24gKGUuZy4sIGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzLCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24pIGFuZCBhIEtVbml0IHRlc3QgZm9yIGl0LiBIb3dldmVyLCB0aGUgbmV3IEFQSSBpcyBub3QgY3VycmVudGx5IGNhbGxlZCBieSBhbnkgZHJpdmVyIG9yIGNvcmUga2VybmVsIGNvZGUgb3V0c2lkZSBvZiB0aGUgS1VuaXQgdGVzdCBpdHNlbGYuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg27gm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 16:58:25 +0000 UTC FinishedAt: 2026-07-09 17:16:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uIChlLmcuLCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycywgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKSBhbmQgYSBLVW5pdCB0ZXN0IGZvciBpdC4gSG93ZXZlciwgdGhlIG5ldyBBUEkgaXMgbm90IGN1cnJlbnRseSBjYWxsZWQgYnkgYW55IGRyaXZlciBvciBjb3JlIGtlcm5lbCBjb2RlIG91dHNpZGUgb2YgdGhlIEtVbml0IHRlc3QgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNmMWNhMTk3NjgwZjZlN2ViYmYyNDRmNzI4MmNkM2IwNDY0NWFjNTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDE3OjE1OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oIGIvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmhcbmluZGV4IGMyNDk5MTI0NTZmOTYzLi4wZWZlMmJjMWE4MTUyNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1kaXJlY3QuaFxuQEAgLTE0MSw2ICYjNDM7MTQxLDM1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkbWFfY2FwYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUsXG4gdTY0IGRtYV9kaXJlY3RfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KTtcbiB2b2lkICpkbWFfZGlyZWN0X2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXG4gXHRcdGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBhdHRycyk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4mIzQzO2ludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xuJiM0Mzt2b2lkIGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKTtcbiYjNDM7dm9pZCAqZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0IHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuJiM0MztcdFx0XHRcdFx0XHQgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbiYjNDM7XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBkbWFfZGlyZWN0X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsXG4gXHRcdGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGxvbmcgYXR0cnMpO1xuIHN0cnVjdCBwYWdlICpkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXG5pbmRleCA2YTE4MzJhNzNjYWQ4ZC4uYjEzZTVlZWJlNmQzYWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxuQEAgLTEwNiw2ICYjNDM7MTA2LDcgQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCk7XG4gdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKTtcbiBcbiB2b2lkIGRtYV9jb250aWd1b3VzX2Vhcmx5X2ZpeHVwKHBoeXNfYWRkcl90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4mIzQzO2Jvb2wgZG1hX2lzX2Zyb21fY21hKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcbiAjZWxzZSAvKiBDT05GSUdfRE1BX0NNQSAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNtYSAqZGV2X2dldF9jbWFfYXJlYShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4ge1xuQEAgLTE0NSw2ICYjNDM7MTQ2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4ge1xuIFx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuICNlbmRpZiAvKiBDT05GSUdfRE1BX0NNQSovXG4gXG4gI2lmZGVmIENPTkZJR19ETUFfREVDTEFSRV9DT0hFUkVOVFxuQEAgLTE1Niw2ICYjNDM7MTYyLDcgQEAgaW50IGRtYV9hbGxvY19mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNzaXplX3Qgc2l6ZSxcbiBpbnQgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb3JkZXIsIHZvaWQgKnZhZGRyKTtcbiBpbnQgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLCBpbnQgKnJldCk7XG4mIzQzO2Jvb2wgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSlcbkBAIC0xNjYsNiAmIzQzOzE3Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IGRtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gI2RlZmluZSBkbWFfYWxsb2NfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIHJldCkgKDApXG4gI2RlZmluZSBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChkZXYsIG9yZGVyLCB2YWRkcikgKDApXG4gI2RlZmluZSBkbWFfbW1hcF9mcm9tX2Rldl9jb2hlcmVudChkZXYsIHZtYSwgdmFkZHIsIG9yZGVyLCByZXQpICgwKVxuJiM0MzsjZGVmaW5lIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChkZXYsIHZhZGRyKSAoZmFsc2UpXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfcmVsZWFzZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2KSB7IH1cbiAjZW5kaWYgLyogQ09ORklHX0RNQV9ERUNMQVJFX0NPSEVSRU5UICovXG4gXG5AQCAtMjE2LDYgJiM0MzsyMjUsNyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHRib29sICgqcGh5c19hZGRyX29rKShzdHJ1Y3QgZGV2aWNlICosIHBoeXNfYWRkcl90LCBzaXplX3QpKTtcbiBib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSk7XG4gXG4mIzQzO2Jvb2wgZG1hX2lzX2Zyb21fcG9vbCh2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpO1xuIGludCBkbWFfZGlyZWN0X3NldF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBjcHVfc3RhcnQsXG4gXHRcdGRtYV9hZGRyX3QgZG1hX3N0YXJ0LCB1NjQgc2l6ZSk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oXG5pbmRleCBkYjhhYjI0YTU0ZjRhMy4uNGMwYzQyOGI2YjFjYjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaFxuQEAgLTIxMCw2ICYjNDM7MjEwLDIzIEBAIHZvaWQgKmRtYV92bWFwX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiB2b2lkIGRtYV92dW5tYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyKTtcbiBpbnQgZG1hX21tYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRzaXplX3Qgc2l6ZSwgc3RydWN0IHNnX3RhYmxlICpzZ3QpO1xuJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4mIzQzO2ludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuJiM0MztcdFx0XHRcdCAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xuJiM0Mzt2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpO1xuJiM0Mzt2b2lkICpkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSk7XG4mIzQzO2ludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xuJiM0Mzt2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4mIzQzO1x0XHRcdFx0c2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0IHN0YXRlKTtcbiYjNDM7dm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpO1xuJiM0MzsjZW5kaWZcbiAjZWxzZSAvKiBDT05GSUdfSEFTX0RNQSAqL1xuIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2VfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXG5AQCAtNDk2LDYgJiM0Mzs1MTMsNDUgQEAgc3RhdGljIGlubGluZSBib29sIGRtYV9uZWVkX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldilcbiB9XG4gI2VuZGlmIC8qICFDT05GSUdfSEFTX0RNQSB8fCAhQ09ORklHX0RNQV9ORUVEX1NZTkMgKi9cbiBcbiYjNDM7I2lmICFkZWZpbmVkKENPTkZJR19ETUFfTElWRVVQREFURSkgfHwgIWRlZmluZWQoQ09ORklHX0hBU19ETUEpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuJiM0MztcdFx0XHRcdFx0XHQgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuJiM0MztcdFx0XHRcdFx0XHQgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbiYjNDM7XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0cnVjdCBwYWdlICpkbWFfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0ZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBnZnBfdCBnZnApO1xuIHZvaWQgZG1hX2ZyZWVfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5AQCAtNjE4LDYgJiM0Mzs2NzQsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHQoZ2ZwIFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDApO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0ICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICBkbWFfaGFuZGxlLCAwLCBzdGF0ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0ZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwLCB1NjQgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGdmcCxcbiYjNDM7XHRcdFx0XHRcdCAgICAoZ2ZwIFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHR2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKVxuIHtcbkBAIC03NDcsNiAmIzQzOzgyNCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHQoZ2ZwIFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDApO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgZG1hX2hhbmRsZSwgMCwgc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hbV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICB1NjQgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIGNwdV9hZGRyLCBzaXplLCBkbWFfaGFuZGxlLCBzdGF0ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hbV9yZXN0b3JlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGdmcF90IGdmcCwgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwLFxuJiM0MztcdFx0XHRcdFx0ICAgICAoZ2ZwIFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0YXRlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY193YyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHRcdFx0IGRtYV9hZGRyX3QgKmRtYV9hZGRyLCBnZnBfdCBnZnApXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hZTM4Y2YxYTFmYzk5ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9raG8vYWJpL2RtYV9hbGxvYy5oXG5AQCAtMCwwICYjNDM7MSwzMiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9MSU5VWF9LSE9fQUJJX0RNQV9BTExPQ19IXG4mIzQzOyNkZWZpbmUgX0xJTlVYX0tIT19BQklfRE1BX0FMTE9DX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBET0M6IERNQSBBbGxvYyBBQklcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBoZWFkZXIgZGVmaW5lcyB0aGUgc3RydWN0dXJlcyB1c2VkIHRvIHNlcmlhbGl6ZSB0aGUgc3RhdGUgb2YgRE1BXG4mIzQzOyAqIGFsbG9jYXRpb25zLCBkb25lIGJ5IGRldmljZSBkcml2ZXIsIGFjcm9zcyBhIExpdmUgVXBkYXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IERNQSBhbGxvY2F0aW9ucyBkb25lIHRocm91Z2ggZG1hLWRpcmVjdCB0aGF0IGFyZSBjb250aWd1b3VzIGFuZFxuJiM0MzsgKiBhbGxvY2F0ZWQgdXNpbmcgYWxsb2NfcGFnZSBhcmUgc3VwcG9ydGVkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgZG1hX2FsbG9jX3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgb2YgYSBzaW5nbGUgRE1BIGFsbG9jYXRpb25cbiYjNDM7ICogQHBhZ2VfcGh5czogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcHJlc2VydmVkIHBhZ2VzXG4mIzQzOyAqIEBzaXplOiBTaXplIG9mIHRoZSBETUEgYWxsb2NhdGlvblxuJiM0MzsgKiBAYXR0cnM6IERNQSBhbGxvY2F0aW9uIGF0dHJpYnV0ZXNcbiYjNDM7ICogQGZvcmNlX2RlY3J5cHRlZDogV2hldGhlciB0aGUgbWVtb3J5IGlzIGZvcmNlIGRlY3J5cHRlZCBpbiBwcmV2aW91cyBrZXJuZWxcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBkbWFfYWxsb2Nfc2VyIHtcbiYjNDM7XHR1NjQgcGFnZV9waHlzO1xuJiM0MztcdHU2NCBzaXplO1xuJiM0MztcdHU2NCBhdHRycztcbiYjNDM7XHR1OCBmb3JjZV9kZWNyeXB0ZWQ7XG4mIzQzO1x0dTggcGFkZGluZ1s3XTtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfS0hPX0FCSV9ETUFfQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvS2NvbmZpZyBiL2tlcm5lbC9kbWEvS2NvbmZpZ1xuaW5kZXggYmZlZjIxYjRhOWFlN2QuLjQ4YmM3NGFmNTUxYTMxIDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL0tjb25maWdcbkBAIC0yNjUsMyAmIzQzOzI2NSwxNSBAQCBjb25maWcgRE1BX01BUF9CRU5DSE1BUktcbiBcdCAgcGVyZm9ybWFuY2Ugb2YgZG1hXyh1biltYXBfcGFnZS5cbiBcbiBcdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RtYS9kbWFfbWFwX2JlbmNobWFyay5jXG4mIzQzO1xuJiM0Mztjb25maWcgRE1BX0xJVkVVUERBVEVcbiYjNDM7XHRib29sIFwmIzM0O0VuYWJsZSBwcmVzZXJ2YXRpb24gb2YgRE1BIGRpcmVjdCBhbGxvY2F0aW9uc1wmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gTElWRVVQREFURVxuJiM0MztcbiYjNDM7Y29uZmlnIERNQV9MSVZFVVBEQVRFX0tVTklUX1RFU1RcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0IGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBLVU5JVFxuJiM0MztcdGRlcGVuZHMgb24gRE1BX0xJVkVVUERBVEVcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGJ1aWxkcyB0aGUgS1VuaXQgdGVzdHMgZm9yIHRoZSBETUEgZGlyZWN0IGxpdmV1cGRhdGVcbiYjNDM7XHQgIHByZXNlcnZhdGlvbiBhbmQgcmVzdG9yYXRpb24gbG9naWMuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9NYWtlZmlsZSBiL2tlcm5lbC9kbWEvTWFrZWZpbGVcbmluZGV4IDY5NzcwMzM0NDRhMzc1Li4wMzcwMzU0MmVlNzliYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvTWFrZWZpbGVcbkBAIC0xMCwzICYjNDM7MTAsNCBAQCBvYmotJChDT05GSUdfU1dJT1RMQilcdFx0XHQmIzQzOz0gc3dpb3RsYi5vXG4gb2JqLSQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKVx0XHQmIzQzOz0gcG9vbC5vXG4gb2JqLSQoQ09ORklHX01NVSlcdFx0XHQmIzQzOz0gcmVtYXAub1xuIG9iai0kKENPTkZJR19ETUFfTUFQX0JFTkNITUFSSylcdFx0JiM0Mzs9IG1hcF9iZW5jaG1hcmsub1xuJiM0MztvYmotJChDT05GSUdfRE1BX0xJVkVVUERBVEVfS1VOSVRfVEVTVClcdCYjNDM7PSBkaXJlY3RfdGVzdC5vXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb2hlcmVudC5jIGIva2VybmVsL2RtYS9jb2hlcmVudC5jXG5pbmRleCBiY2RjMGY3NmQyZTgwYS4uNzZjYmUxMWUxZjkwZTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL2NvaGVyZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvY29oZXJlbnQuY1xuQEAgLTIzMSw2ICYjNDM7MjMxLDE3IEBAIGludCBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvcmRlciwgdm9pZCAqdmFkZHIpXG4gXHRyZXR1cm4gX19kbWFfcmVsZWFzZV9mcm9tX2NvaGVyZW50KG1lbSwgb3JkZXIsIHZhZGRyKTtcbiB9XG4gXG4mIzQzO2Jvb2wgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2X2dldF9jb2hlcmVudF9tZW1vcnkoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbSBcdTAwMjZcdTAwMjYgdmFkZHIgXHUwMDNlPSBtZW0tXHUwMDNldmlydF9iYXNlIFx1MDAyNlx1MDAyNiB2YWRkciBcdTAwM2NcbiYjNDM7XHRcdCAgIChtZW0tXHUwMDNldmlydF9iYXNlICYjNDM7ICgoZG1hX2FkZHJfdCltZW0tXHUwMDNlc2l6ZSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IF9fZG1hX21tYXBfZnJvbV9jb2hlcmVudChzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLCBpbnQgKnJldClcbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuaW5kZXggMDNmNTJiZDE3MTIwNjIuLjZkMGNmOWM3NTI4Y2I1IDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jXG5AQCAtMzcsNiAmIzQzOzM3LDggQEBcbiBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2NtYTogXCYjMzQ7IGZtdFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbkBAIC0xMzAsNiAmIzQzOzEzMiwzMSBAQCBzdHJ1Y3QgY21hICpkZXZfZ2V0X2NtYV9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2dldF9jbWFfYXJlYSk7XG4gXG4mIzQzO3N0cnVjdCBkbWFfY21hX2NoZWNrX2RhdGEge1xuJiM0MztcdHBoeXNfYWRkcl90IHN0YXJ0O1xuJiM0MztcdHBoeXNfYWRkcl90IGVuZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZG1hX2NtYV9jaGVja19hcmVhKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfY21hX2NoZWNrX2RhdGEgKmNoayA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdGlmIChjbWFfaW50ZXJzZWN0cyhjbWEsIGNoay1cdTAwM2VzdGFydCwgY2hrLVx1MDAzZWVuZCkpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2NtYV9jaGVja19kYXRhIGNoayA9IHtcbiYjNDM7XHRcdC5zdGFydCA9IHBoeXMsXG4mIzQzO1x0XHQuZW5kID0gcGh5cyAmIzQzOyBzaXplIC0gMSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY21hX2Zvcl9lYWNoX2FyZWEoZG1hX2NtYV9jaGVja19hcmVhLCBcdTAwMjZjaGspICE9IDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChkbWFfaXNfZnJvbV9jbWEpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0RNQV9OVU1BX0NNQVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY21hICpkbWFfY29udGlndW91c19udW1hX2FyZWFbTUFYX05VTU5PREVTXTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2RpcmVjdC5jIGIva2VybmVsL2RtYS9kaXJlY3QuY1xuaW5kZXggZWM4ODdmNDQzNzQxODMuLjExN2ViYWU4YTgxZmExIDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9kaXJlY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9kaXJlY3QuY1xuQEAgLTYsNiAmIzQzOzYsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2UgLyogZm9yIG1heF9wZm4gKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcC1vcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcdTAwM2VcbkBAIC0zMDcsNiAmIzQzOzMwOSwxOTMgQEAgdm9pZCAqZG1hX2RpcmVjdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4mIzQzO2ludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbiYjNDM7XHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2FsbG9jX3NlciAqc2VyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG4mIzQzO1x0aWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cyhkZXYsIGRtYV9oYW5kbGUpLCBzaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX3N3aW90bGJfZm9yX2FsbG9jKGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGlmICgoYXR0cnMgXHUwMDI2IERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfRE1BX0FMTE9DKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWRldl9pc19kbWFfY29oZXJlbnQoZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9HTE9CQUxfUE9PTCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGRtYV9pc19mcm9tX3Bvb2woY3B1X2FkZHIsIHNpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRzZXIgPSBraG9fYWxsb2NfcHJlc2VydmUoc2l6ZW9mKCpzZXIpKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHNlcikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihzZXIpO1xuJiM0MztcbiYjNDM7XHRzZXItXHUwMDNlcGFnZV9waHlzID0gZG1hX3RvX3BoeXMoZGV2LCBkbWFfaGFuZGxlKTtcbiYjNDM7XHRzZXItXHUwMDNlZm9yY2VfZGVjcnlwdGVkID0gZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldik7XG4mIzQzO1x0c2VyLVx1MDAzZXNpemUgPSBzaXplO1xuJiM0MztcdHNlci1cdTAwM2VhdHRycyA9IChhdHRycyBcdTAwMjYgfkRNQV9BVFRSX05PX1dBUk4pO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBraG9fcHJlc2VydmVfcGFnZXMocGh5c190b19wYWdlKHNlci1cdTAwM2VwYWdlX3BoeXMpLFxuJiM0MztcdFx0XHRcdCAxIFx1MDAzY1x1MDAzYyBnZXRfb3JkZXIoc2l6ZSkpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGtob191bnByZXNlcnZlX2ZyZWUoc2VyKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqc3RhdGUgPSB2aXJ0X3RvX3BoeXMoc2VyKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBkbWFfZGlyZWN0X3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYWxsb2Nfc2VyICpzZXI7XG4mIzQzO1xuJiM0MztcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2VyID0gcGh5c190b192aXJ0KHN0YXRlKTtcbiYjNDM7XHRraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwaHlzX3RvX3BhZ2Uoc2VyLVx1MDAzZXBhZ2VfcGh5cyksXG4mIzQzO1x0XHRcdCAgICAgMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNlci1cdTAwM2VzaXplKSk7XG4mIzQzO1x0a2hvX3VucHJlc2VydmVfZnJlZShzZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkICpkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuJiM0MztcdFx0XHRcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXG4mIzQzO1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdGJvb2wgcmVtYXAgPSBmYWxzZSwgc2V0X3VuY2FjaGVkID0gZmFsc2U7XG4mIzQzO1x0c3RydWN0IGRtYV9hbGxvY19zZXIgKnNlciA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0dm9pZCAqY3B1X2FkZHIgPSBOVUxMO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWtob19pc19lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0c2VyID0gcGh5c190b192aXJ0KHN0YXRlKTtcbiYjNDM7XHRwYWdlID0gcGh5c190b19wYWdlKHNlci1cdTAwM2VwYWdlX3BoeXMpO1xuJiM0MztcbiYjNDM7XHRzaXplID0gUEFHRV9BTElHTihzaXplKTtcbiYjNDM7XHRpZiAoc2l6ZSAhPSBzZXItXHUwMDNlc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRXQVJOX09OX09OQ0UoKGF0dHJzIFx1MDAyNiB+RE1BX0FUVFJfTk9fV0FSTikgIT0gc2VyLVx1MDAzZWF0dHJzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYW5ub3QgZnJlZSB0aGUgcmVzdG9yZWQgcGFnZXMgb24gZXJyb3IgaGVyZSBhcyB0aGVzZSBtaWdodCBiZSBpbiB1c2VcbiYjNDM7XHQgKiBieSBhIGRldmljZSB3aXRoIGRpcmVjdCBhbGxvY2F0aW9uIGluIHRoZSBwcmV2aW91cyBrZXJuZWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX3N3aW90bGJfZm9yX2FsbG9jKGRldikpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKChhdHRycyBcdTAwMjYgRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpIHtcbiYjNDM7XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19ETUFfQUxMT0MpKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX0dMT0JBTF9QT09MKSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0c2V0X3VuY2FjaGVkID0gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfRE1BX1NFVF9VTkNBQ0hFRCk7XG4mIzQzO1x0XHRyZW1hcCA9IElTX0VOQUJMRUQoQ09ORklHX0RNQV9ESVJFQ1RfUkVNQVApO1xuJiM0MztcdFx0aWYgKCFzZXRfdW5jYWNoZWQgXHUwMDI2XHUwMDI2ICFyZW1hcClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHtcbiYjNDM7XHRcdHJlbWFwID0gdHJ1ZTtcbiYjNDM7XHRcdHNldF91bmNhY2hlZCA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZW1hcHBpbmcgd2lsbCBiZSBibG9ja2luZyBzbyByZXR1cm4gZXJyb3IuIFRoZSBwcmVzZXJ2ZWQgbWVtb3J5XG4mIzQzO1x0ICogbWlnaHQgYmUgYWxyZWFkeSBkZWNyeXB0ZWQgaW4gdGhlIHByZXZpb3VzIGtlcm5lbCwgYnV0IHRoZSBkZWNyeXB0aW9uXG4mIzQzO1x0ICogY2FsbCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBub24tYmxvY2tpbmcgc28gcmV0dXJuIGVycm9yIGFsd2F5cyBpZlxuJiM0MztcdCAqIGRlY3J5cHRpb24gaXMgcmVxdWlyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKChyZW1hcCB8fCBmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGRtYV9kaXJlY3RfdXNlX3Bvb2woZGV2LCBnZnApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5jcnlwdGlvbiBzY2hlbWUgY2hhbmdlZCBiZXR3ZWVuIHR3byBrZXJuZWxzIGFuZCB0aGlzIG1pZ2h0IGNhdXNlXG4mIzQzO1x0ICogaXNzdWVzIGlmIGRldmljZS9kcml2ZXIgaXMgbm90IGhhbmRsaW5nIGl0IHByb3Blcmx5LlxuJiM0MztcdCAqL1xuJiM0MztcdFdBUk5fT05fT05DRShzZXItXHUwMDNlZm9yY2VfZGVjcnlwdGVkICE9IGZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBhcmNoX2RtYV9wcmVwX2NvaGVyZW50KCkgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGFueSBjYWNoZSBsaW5lcyBmcm9tXG4mIzQzO1x0ICogdGhlIHByZXZpb3VzIGtlcm5lbCwgaWYgdGhlIGRldmljZSB3YXMgY29oZXJlbnQgcHJldmlvdXNseSBvciBjYWNoZWRcbiYjNDM7XHQgKiBtYXBwaW5nIGluIHRoaXMga2VybmVsIGR1cmluZyBpbml0IGFyZSBub3QgcHJvYmxlbWF0aWMgZm9yXG4mIzQzO1x0ICogbm9uLWNvaGVyZW50IGFsbG9jYXRpb25zLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZW1hcCkge1xuJiM0MztcdFx0cGdwcm90X3QgcHJvdCA9IGRtYV9wZ3Byb3QoZGV2LCBQQUdFX0tFUk5FTCwgYXR0cnMpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSlcbiYjNDM7XHRcdFx0cHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQocHJvdCk7XG4mIzQzO1xuJiM0MztcdFx0YXJjaF9kbWFfcHJlcF9jb2hlcmVudChwYWdlLCBzaXplKTtcbiYjNDM7XG4mIzQzO1x0XHRjcHVfYWRkciA9IGRtYV9jb21tb25fY29udGlndW91c19yZW1hcChwYWdlLCBzaXplLCBwcm90LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiYjNDM7XHRcdGlmICghY3B1X2FkZHIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRjcHVfYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTtcbiYjNDM7XHRcdGlmIChkbWFfc2V0X2RlY3J5cHRlZChkZXYsIGNwdV9hZGRyLCBzaXplKSkge1xuJiM0MztcdFx0XHRjcHVfYWRkciA9IE5VTEw7XG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNldF91bmNhY2hlZCkge1xuJiM0MztcdFx0YXJjaF9kbWFfcHJlcF9jb2hlcmVudChwYWdlLCBzaXplKTtcbiYjNDM7XHRcdGNwdV9hZGRyID0gYXJjaF9kbWFfc2V0X3VuY2FjaGVkKGNwdV9hZGRyLCBzaXplKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoY3B1X2FkZHIpKSB7XG4mIzQzO1x0XHRcdGNwdV9hZGRyID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqZG1hX2hhbmRsZSA9IHBoeXNfdG9fZG1hX2RpcmVjdChkZXYsIHNlci1cdTAwM2VwYWdlX3BoeXMpO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdFdBUk5fT04oIWtob19yZXN0b3JlX3BhZ2VzKHNlci1cdTAwM2VwYWdlX3BoeXMsXG4mIzQzO1x0XHRcdFx0ICAgMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNlci1cdTAwM2VzaXplKSkpO1xuJiM0MztcdGtob19yZXN0b3JlX2ZyZWUoc2VyKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBETUEgZGlyZWN0IEFQSSBleHBlY3RzIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMsIHNvIHNldCByZWZjb3VudCBvZlxuJiM0MztcdCAqIHRhaWwgcGFnZXMgdG8gemVyby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAoMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNpemUpKSAtIDE7IGkgXHUwMDNlIDA7IC0taSlcbiYjNDM7XHRcdHNldF9wYWdlX2NvdW50KHBhZ2UgJiM0MzsgaSwgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjcHVfYWRkcjtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBkbWFfZGlyZWN0X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0dm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGxvbmcgYXR0cnMpXG4ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYyBiL2tlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODQwM2VjNDc4MDdlOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jXG5AQCAtMCwwICYjNDM7MSwyMDggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogS1VuaXQgdGVzdCBmb3IgRE1BIGFsbG9jYXRpb24gbGl2ZSB1cGRhdGUgcHJlc2VydmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrdW5pdC9zdGF0aWNfc3R1Yi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXAtb3BzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtZGlyZWN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHNpemVfdCBkbWFfdGVzdF9zaXplc1tdID0ge1xuJiM0MztcdDEyOCxcbiYjNDM7XHRQQUdFX1NJWkUsXG4mIzQzO1x0MiAqIFBBR0VfU0laRSxcbiYjNDM7XHQzICogUEFHRV9TSVpFLFxuJiM0MztcdDggKiBQQUdFX1NJWkUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkbWFfc2l6ZV9kZXNjKGNvbnN0IHNpemVfdCAqc2l6ZSwgY2hhciAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHNucHJpbnRmKGRlc2MsIEtVTklUX1BBUkFNX0RFU0NfU0laRSwgXCYjMzQ7c2l6ZT0lenVcJiMzNDssICpzaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7S1VOSVRfQVJSQVlfUEFSQU0oZG1hX3NpemUsIGRtYV90ZXN0X3NpemVzLCBkbWFfc2l6ZV9kZXNjKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbW9ja19raG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwaHlzX3RvX3BhZ2UocGh5cyk7XG4mIzQzO1xuJiM0MztcdGlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsIG5yX3BhZ2VzKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwYWdlLCBucl9wYWdlcyk7XG4mIzQzO1x0cmV0dXJuIHBhZ2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZm9saW8gKm1vY2tfa2hvX3Jlc3RvcmVfZm9saW8ocGh5c19hZGRyX3QgcGh5cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBoeXNfdG9fcGFnZShwaHlzKSk7XG4mIzQzO1xuJiM0MztcdGlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsICgxIFx1MDAzY1x1MDAzYyBmb2xpb19vcmRlcihmb2xpbykpKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRraG9fdW5wcmVzZXJ2ZV9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0cmV0dXJuIGZvbGlvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24oc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgYm9vbCBjb2hlcmVudCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGJvb2wgYXRvbWljLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNpemUpO1xuJiM0MztcdGRtYV9hZGRyX3QgaGFuZGxlMSwgaGFuZGxlMjtcbiYjNDM7XHRpbnQgcmV0LCBleHBlY3RlZF9yZXQgPSAwO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgZGV2ID0gezB9O1xuJiM0MztcdGdmcF90IGdmcCA9IEdGUF9LRVJORUw7XG4mIzQzO1x0dm9pZCAqYWRkcjEsICphZGRyMjtcbiYjNDM7XHR1NjQgc3RhdGU7XG4mIzQzO1xuJiM0MztcdGt1bml0X2FjdGl2YXRlX3N0YXRpY19zdHViKHRlc3QsIGtob19yZXN0b3JlX3BhZ2VzLCBtb2NrX2tob19yZXN0b3JlX3BhZ2VzKTtcbiYjNDM7XHRrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9mb2xpbywgbW9ja19raG9fcmVzdG9yZV9mb2xpbyk7XG4mIzQzO1xuJiM0MztcdGRldmljZV9pbml0aWFsaXplKFx1MDAyNmRldik7XG4mIzQzO1x0ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDY0KTtcbiYjNDM7XHRkZXYuZG1hX21hc2sgPSBcdTAwMjZkZXYuY29oZXJlbnRfZG1hX21hc2s7XG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFKSB8fCBcXFxuJiM0MzsgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVSkgfHwgXFxcbiYjNDM7ICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFVfQUxMKVxuJiM0MztcdGRldi5kbWFfY29oZXJlbnQgPSBjb2hlcmVudDtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztcdGlmIChhdG9taWMpXG4mIzQzO1x0XHRnZnAgPSBHRlBfQVRPTUlDO1xuJiM0MztcbiYjNDM7XHRhZGRyMSA9IGRtYV9hbGxvY19jb2hlcmVudChcdTAwMjZkZXYsIHNpemUsIFx1MDAyNmhhbmRsZTEsIGdmcCk7XG4mIzQzO1x0aWYgKCFhZGRyMSkge1xuJiM0MztcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtETUEgYWxsb2NhdGlvbiBmYWlsZWQgKHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24pXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgXHUwMDI2XHUwMDI2IGRtYV9pc19mcm9tX3Bvb2woYWRkcjEsIHNpemUpKSB7XG4mIzQzO1x0XHRleHBlY3RlZF9yZXQgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGt1bml0X2luZm8odGVzdCwgXCYjMzQ7RE1BIGFsbG9jYXRpb24gdXNpbmcgcG9vbCwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQXCYjMzQ7KTtcbiYjNDM7XHR9IGVsc2UgaWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cyhcdTAwMjZkZXYsIGhhbmRsZTEpLCBzaXplKSkge1xuJiM0MztcdFx0ZXhwZWN0ZWRfcmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRrdW5pdF9pbmZvKHRlc3QsIFwmIzM0O0RNQSBhbGxvY2F0aW9uIHVzaW5nIENNQSwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKFx1MDAyNmRldiwgYWRkcjEsIHNpemUsIGhhbmRsZTEsIFx1MDAyNnN0YXRlKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCBleHBlY3RlZF9yZXQpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWV4cGVjdGVkX3JldCkge1xuJiM0MztcdFx0S1VOSVRfRVhQRUNUX1RSVUVfTVNHKHRlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICAga2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKGRtYV90b19waHlzKFx1MDAyNmRldiwgaGFuZGxlMSksIG5yX3BhZ2VzKSxcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDtBbGxvY2F0ZWQgYmxvY2sgbm90IHRyYWNrZWQgaW4gS0hPXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRhZGRyMiA9IGRtYV9yZXN0b3JlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBzaXplLCBcdTAwMjZoYW5kbGUyLCBnZnAsIHN0YXRlKTtcbiYjNDM7XHRcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBhZGRyMik7XG4mIzQzO1xuJiM0MztcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGhhbmRsZTEsIGhhbmRsZTIpO1xuJiM0MztcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBhZGRyMiwgaGFuZGxlMik7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRkFMU0VfTVNHKHRlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGtob190ZXN0X3BhZ2VzX3ByZXNlcnZlZChkbWFfdG9fcGh5cyhcdTAwMjZkZXYsIGhhbmRsZTEpLCBucl9wYWdlcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0FsbG9jYXRlZCBibG9jayBzdGlsbCB0cmFja2VkIGFmdGVyIGZyZWVcJiMzNDspO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZkZXYsIHNpemUsIGFkZHIxLCBoYW5kbGUxKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LVx1MDAzZXBhcmFtX3ZhbHVlO1xuJiM0MztcbiYjNDM7XHR0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24odGVzdCwgdHJ1ZSwgZmFsc2UsICpzaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LVx1MDAzZXBhcmFtX3ZhbHVlO1xuJiM0MztcbiYjNDM7XHR0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24odGVzdCwgZmFsc2UsIGZhbHNlLCAqc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudF9hdG9taWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIHRydWUsIHRydWUsICpzaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudF9hdG9taWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIGZhbHNlLCB0cnVlLCAqc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZG1hbV9wcmVzZXJ2YXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0ZG1hX2FkZHJfdCBoYW5kbGUsIG5vbl9kbWFtX2hhbmRsZTtcbiYjNDM7XHR2b2lkICphZGRyLCAqbm9uX2RtYW1fYWRkcjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlIGRldiA9IHswfTtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IDEyODtcbiYjNDM7XHR1NjQgc3RhdGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0a3VuaXRfYWN0aXZhdGVfc3RhdGljX3N0dWIodGVzdCwga2hvX3Jlc3RvcmVfcGFnZXMsIG1vY2tfa2hvX3Jlc3RvcmVfcGFnZXMpO1xuJiM0MztcdGt1bml0X2FjdGl2YXRlX3N0YXRpY19zdHViKHRlc3QsIGtob19yZXN0b3JlX2ZvbGlvLCBtb2NrX2tob19yZXN0b3JlX2ZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2ZGV2KTtcbiYjNDM7XHRkZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soNjQpO1xuJiM0MztcdGRldi5kbWFfbWFzayA9IFx1MDAyNmRldi5jb2hlcmVudF9kbWFfbWFzaztcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9ERVZJQ0UpIHx8IFxcXG4mIzQzOyAgICBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19TWU5DX0RNQV9GT1JfQ1BVKSB8fCBcXFxuJiM0MzsgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTEwpXG4mIzQzO1x0ZGV2LmRtYV9jb2hlcmVudCA9IHRydWU7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRub25fZG1hbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNmRldiwgc2l6ZSwgXHUwMDI2bm9uX2RtYW1faGFuZGxlLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIW5vbl9kbWFtX2FkZHIpIHtcbiYjNDM7XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7RE1BIGFsbG9jYXRpb24gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihcdTAwMjZkZXYsIG5vbl9kbWFtX2FkZHIsIHNpemUsIG5vbl9kbWFtX2hhbmRsZSwgXHUwMDI2c3RhdGUpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUV9NU0codGVzdCwgcmV0LCAtRUlOVkFMLCBcJiMzNDtQcmVzZXJ2aW5nIG5vbi1kZXZyZXMgYWxsb2NhdGlvbiBzaG91bGQgZmFpbFwmIzM0Oyk7XG4mIzQzO1x0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBub25fZG1hbV9hZGRyLCBub25fZG1hbV9oYW5kbGUpO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gZG1hbV9hbGxvY19jb2hlcmVudChcdTAwMjZkZXYsIHNpemUsIFx1MDAyNmhhbmRsZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFhZGRyKSB7XG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O0RNQSBhbGxvY2F0aW9uIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBhZGRyLCBzaXplLCBoYW5kbGUsIFx1MDAyNnN0YXRlKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHJldCwgMCwgXCYjMzQ7RmFpbGVkIHRvIHByZXNlcnZlIGRtYW0gYWxsb2NhdGlvblwmIzM0Oyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwga2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKGRtYV90b19waHlzKFx1MDAyNmRldiwgaGFuZGxlKSwgMSkpO1xuJiM0MztcbiYjNDM7XHRkbWFtX3VucHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihcdTAwMjZkZXYsIGFkZHIsIHNpemUsIGhhbmRsZSwgc3RhdGUpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoXHUwMDI2ZGV2LCBoYW5kbGUpLCAxKSk7XG4mIzQzO1xuJiM0MztcdGRtYW1fZnJlZV9jb2hlcmVudChcdTAwMjZkZXYsIHNpemUsIGFkZHIsIGhhbmRsZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkbWFfZGlyZWN0X3Rlc3RfY2FzZXNbXSA9IHtcbiYjNDM7XHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudCwgZG1hX3NpemVfZ2VuX3BhcmFtcyksXG4mIzQzO1x0S1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2RtYV9kaXJlY3Rfbm9uX2NvaGVyZW50LCBkbWFfc2l6ZV9nZW5fcGFyYW1zKSxcbiYjNDM7XHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudF9hdG9taWMsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxuJiM0MztcdEtVTklUX0NBU0VfUEFSQU0odGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudF9hdG9taWMsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxuJiM0MztcdEtVTklUX0NBU0UodGVzdF9kbWFtX3ByZXNlcnZhdGlvbiksXG4mIzQzO1x0e31cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgZG1hX2RpcmVjdF90ZXN0X3N1aXRlID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7ZG1hX2RpcmVjdF9saXZldXBkYXRlXCYjMzQ7LFxuJiM0MztcdC50ZXN0X2Nhc2VzID0gZG1hX2RpcmVjdF90ZXN0X2Nhc2VzLFxuJiM0Mzt9O1xuJiM0MztrdW5pdF90ZXN0X3N1aXRlKGRtYV9kaXJlY3RfdGVzdF9zdWl0ZSk7XG4mIzQzO1xuJiM0MztNT0RVTEVfSU1QT1JUX05TKFwmIzM0O0VYUE9SVEVEX0ZPUl9LVU5JVF9URVNUSU5HXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0tVbml0IHRlc3QgZm9yIERNQSBkaXJlY3QgbGl2ZSB1cGRhdGUgcHJlc2VydmF0aW9uXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL21hcHBpbmcuYyBiL2tlcm5lbC9kbWEvbWFwcGluZy5jXG5pbmRleCAyM2VkOGViOTIzM2U1NS4uYWVjMTIyMmFiNWFlYjEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL21hcHBpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9tYXBwaW5nLmNcbkBAIC0xMiw2ICYjNDM7MTIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUtZG1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbXNhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMzUsMTIgJiM0MzszNywyNSBAQCBzdHJ1Y3QgZG1hX2RldnJlcyB7XG4gXHR2b2lkXHRcdCp2YWRkcjtcbiBcdGRtYV9hZGRyX3RcdGRtYV9oYW5kbGU7XG4gXHR1bnNpZ25lZCBsb25nXHRhdHRycztcbiYjNDM7I2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxuJiM0MztcdGJvb2wgaXNfcHJlc2VydmVkO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGRtYW1fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcbiB7XG4gXHRzdHJ1Y3QgZG1hX2RldnJlcyAqdGhpcyA9IHJlcztcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxuJiM0MztcdC8qXG4mIzQzO1x0ICogRnJlZWluZyB0aGUgcHJlc2VydmVkIG1lbW9yeSBpcyBkYW5nZXJvdXMgYXMgaXQgY2FuIGNhdXNlIFVBRiBpbiB0aGVcbiYjNDM7XHQgKiBjdXJyZW50IG9yIG5leHQga2VybmVsIGlmIHRoZSBtZW1vcnkgaXMgc3RpbGwgYmVpbmcgdXNlZCBieSB0aGVcbiYjNDM7XHQgKiBkZXZpY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFdBUk5fT04odGhpcy1cdTAwM2Vpc19wcmVzZXJ2ZWQpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRkbWFfZnJlZV9hdHRycyhkZXYsIHRoaXMtXHUwMDNlc2l6ZSwgdGhpcy1cdTAwM2V2YWRkciwgdGhpcy1cdTAwM2VkbWFfaGFuZGxlLFxuIFx0XHRcdHRoaXMtXHUwMDNlYXR0cnMpO1xuIH1cbkBAIC02MjgsNiAmIzQzOzY0MywxMjMgQEAgdTY0IGRtYV9nZXRfcmVxdWlyZWRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9nZXRfcmVxdWlyZWRfbWFzayk7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcbiYjNDM7aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4mIzQzO1x0XHRcdFx0ICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChkZXYsIGNwdV9hZGRyKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRtYV9hbGxvY19kaXJlY3QoZGV2LCBvcHMpKVxuJiM0MztcdFx0cmV0dXJuIGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIGNwdV9hZGRyLCBzaXplLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBkbWFfaGFuZGxlLCBhdHRycyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyk7XG4mIzQzO1xuJiM0Mzt2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChkbWFfYWxsb2NfZGlyZWN0KGRldiwgb3BzKSlcbiYjNDM7XHRcdGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKGRldiwgc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbik7XG4mIzQzO1xuJiM0Mzt2b2lkICpkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTtcbiYjNDM7XHR2b2lkICpjcHVfYWRkciA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFdBUk5fT05fT05DRSghZGV2LVx1MDAzZWNvaGVyZW50X2RtYV9tYXNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRtYV9hbGxvY19kaXJlY3QoZGV2LCBvcHMpKVxuJiM0MztcdFx0Y3B1X2FkZHIgPSBkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihkZXYsIHNpemUsIGRtYV9oYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IGdmcCwgYXR0cnMsIHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0ZGVidWdfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgKmRtYV9oYW5kbGUsIGNwdV9hZGRyLCBhdHRycyk7XG4mIzQzO1x0cmV0dXJuIGNwdV9hZGRyO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyk7XG4mIzQzO1xuJiM0MztpbnQgZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4mIzQzO1x0XHRcdFx0ICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9kZXZyZXMgbWF0Y2hfZGF0YSA9IHsgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUgfTtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2RldnJlcyAqZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZHIgPSBkZXZyZXNfZmluZChkZXYsIGRtYW1fcmVsZWFzZSwgZG1hbV9tYXRjaCwgXHUwMDI2bWF0Y2hfZGF0YSk7XG4mIzQzO1x0aWYgKCFkcilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoZHItXHUwMDNlaXNfcHJlc2VydmVkKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsIGRtYV9oYW5kbGUsIGF0dHJzLCBzdGF0ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGRyLVx1MDAzZWlzX3ByZXNlcnZlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMpO1xuJiM0MztcbiYjNDM7dm9pZCBkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuJiM0MztcdFx0XHRcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfZGV2cmVzIG1hdGNoX2RhdGEgPSB7IHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlIH07XG4mIzQzO1x0c3RydWN0IGRtYV9kZXZyZXMgKmRyO1xuJiM0MztcbiYjNDM7XHRkciA9IGRldnJlc19maW5kKGRldiwgZG1hbV9yZWxlYXNlLCBkbWFtX21hdGNoLCBcdTAwMjZtYXRjaF9kYXRhKTtcbiYjNDM7XHRpZiAoIWRyKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRyLVx1MDAzZWlzX3ByZXNlcnZlZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTtcbiYjNDM7XHRkci1cdTAwM2Vpc19wcmVzZXJ2ZWQgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKTtcbiYjNDM7XG4mIzQzO3ZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9kZXZyZXMgKmRyO1xuJiM0MztcdHZvaWQgKnZhZGRyO1xuJiM0MztcbiYjNDM7XHRkciA9IGRldnJlc19hbGxvYyhkbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xuJiM0MztcdGlmICghZHIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0dmFkZHIgPSBkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwLCBhdHRycywgc3RhdGUpO1xuJiM0MztcdGlmICghdmFkZHIpIHtcbiYjNDM7XHRcdGRldnJlc19mcmVlKGRyKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZHItXHUwMDNldmFkZHIgPSB2YWRkcjtcbiYjNDM7XHRkci1cdTAwM2VkbWFfaGFuZGxlID0gKmRtYV9oYW5kbGU7XG4mIzQzO1x0ZHItXHUwMDNlc2l6ZSA9IHNpemU7XG4mIzQzO1x0ZHItXHUwMDNlYXR0cnMgPSBhdHRycztcbiYjNDM7XG4mIzQzO1x0ZGV2cmVzX2FkZChkZXYsIGRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhZGRyO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCAqZG1hX2FsbG9jX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXG4gXHRcdGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgYXR0cnMpXG4ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvcG9vbC5jIGIva2VybmVsL2RtYS9wb29sLmNcbmluZGV4IDJiMmZiYjcwOTI0MjlhLi43ODQ5NjU2ODk3M2ZlYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvcG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL3Bvb2wuY1xuQEAgLTMsNiAmIzQzOzMsOSBAQFxuICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTHRkLlxuICAqIENvcHlyaWdodCAoQykgMjAyMCBHb29nbGUgTExDXG4gICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXHUwMDNlXG5AQCAtMzA3LDMgJiM0MzszMTAsMTcgQEAgYm9vbCBkbWFfZnJlZV9mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpXG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuJiM0MztcbiYjNDM7Ym9vbCBkbWFfaXNfZnJvbV9wb29sKHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnZW5fcG9vbCAqcG9vbCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgocG9vbCA9IGRtYV9ndWVzc19wb29sKHBvb2wsIDApKSkge1xuJiM0MztcdFx0aWYgKCFnZW5fcG9vbF9oYXNfYWRkcihwb29sLCAodW5zaWduZWQgbG9uZylzdGFydCwgc2l6ZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChkbWFfaXNfZnJvbV9wb29sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBmb3IgRE1BIGRpcmVjdCBsaXZldXBkYXRlIHByZXNlcnZhdGlvbiAoZS5nLiwgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMsIGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbikgYW5kIGEgS1VuaXQgdGVzdCBmb3IgaXQuIEhvd2V2ZXIsIHRoZSBuZXcgQVBJIGlzIG5vdCBjdXJyZW50bHkgY2FsbGVkIGJ5IGFueSBkcml2ZXIgb3IgY29yZSBrZXJuZWwgY29kZSBvdXRzaWRlIG9mIHRoZSBLVW5pdCB0ZXN0IGl0c2VsZi4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmMWNhMTk3NjgwZjZlN2ViYmYyNDRmNzI4MmNkM2IwNDY0NWFjNTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCA5IDE3OjE1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmggYi9pbmNsdWRlL2xpbnV4L2RtYS1kaXJlY3QuaAppbmRleCBjMjQ5OTEyNDU2Zjk2My4uMGVmZTJiYzFhODE1MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oCkBAIC0xNDEsNiAmIzQzOzE0MSwzNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1hX2NhcGFibGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplLAogdTY0IGRtYV9kaXJlY3RfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KTsKIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKIAkJZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIGF0dHJzKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFCiYjNDM7aW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAomIzQzOwkJCQkgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKTsKJiM0Mzt2b2lkIGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKTsKJiM0Mzt2b2lkICpkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAomIzQzOwkJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAomIzQzOwkJCQkJCSBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAomIzQzOwkJCQkJCSB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9kaXJlY3RfcmVzdG9yZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiYjNDM7CQkJCQkJICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsCiYjNDM7CQkJCQkJICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiB2b2lkIGRtYV9kaXJlY3RfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKIAkJZG1hX2FkZHJfdCBkbWFfYWRkciwgdW5zaWduZWQgbG9uZyBhdHRycyk7CiBzdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oCmluZGV4IDZhMTgzMmE3M2NhZDhkLi5iMTNlNWVlYmU2ZDNhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaApAQCAtMTA2LDYgJiM0MzsxMDYsNyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKTsKIHZvaWQgZG1hX2ZyZWVfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgc2l6ZSk7CiAKIHZvaWQgZG1hX2NvbnRpZ3VvdXNfZWFybHlfZml4dXAocGh5c19hZGRyX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKJiM0Mztib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7CiAjZWxzZSAvKiBDT05GSUdfRE1BX0NNQSAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgY21hICpkZXZfZ2V0X2NtYV9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTE0NSw2ICYjNDM7MTQ2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiB7CiAJX19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqLwogCiAjaWZkZWYgQ09ORklHX0RNQV9ERUNMQVJFX0NPSEVSRU5UCkBAIC0xNTYsNiAmIzQzOzE2Miw3IEBAIGludCBkbWFfYWxsb2NfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzc2l6ZV90IHNpemUsCiBpbnQgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb3JkZXIsIHZvaWQgKnZhZGRyKTsKIGludCBkbWFfbW1hcF9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsIGludCAqcmV0KTsKJiM0Mztib29sIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LAogCQlwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKQpAQCAtMTY2LDYgJiM0MzsxNzMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LAogI2RlZmluZSBkbWFfYWxsb2NfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIHJldCkgKDApCiAjZGVmaW5lIGRtYV9yZWxlYXNlX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgb3JkZXIsIHZhZGRyKSAoMCkKICNkZWZpbmUgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCB2bWEsIHZhZGRyLCBvcmRlciwgcmV0KSAoMCkKJiM0MzsjZGVmaW5lIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChkZXYsIHZhZGRyKSAoZmFsc2UpCiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3JlbGVhc2VfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldikgeyB9CiAjZW5kaWYgLyogQ09ORklHX0RNQV9ERUNMQVJFX0NPSEVSRU5UICovCiAKQEAgLTIxNiw2ICYjNDM7MjI1LDcgQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJYm9vbCAoKnBoeXNfYWRkcl9vaykoc3RydWN0IGRldmljZSAqLCBwaHlzX2FkZHJfdCwgc2l6ZV90KSk7CiBib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSk7CiAKJiM0Mztib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKTsKIGludCBkbWFfZGlyZWN0X3NldF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBjcHVfc3RhcnQsCiAJCWRtYV9hZGRyX3QgZG1hX3N0YXJ0LCB1NjQgc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAppbmRleCBkYjhhYjI0YTU0ZjRhMy4uNGMwYzQyOGI2YjFjYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKQEAgLTIxMCw2ICYjNDM7MjEwLDIzIEBAIHZvaWQgKmRtYV92bWFwX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIHZvaWQgZG1hX3Z1bm1hcF9ub25jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpOwogaW50IGRtYV9tbWFwX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJc2l6ZV90IHNpemUsIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFCiYjNDM7aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCiYjNDM7CQkJCSAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKTsKJiM0Mzt2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpOwomIzQzO3ZvaWQgKmRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKJiM0MzsJCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpOwomIzQzO2ludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSk7CiYjNDM7dm9pZCBkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAomIzQzOwkJCQlzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgc3RhdGUpOwomIzQzO3ZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiYjNDM7CQkJCSAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpOwomIzQzOyNlbmRpZgogI2Vsc2UgLyogQ09ORklHX0hBU19ETUEgKi8KIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2VfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsCkBAIC00OTYsNiAmIzQzOzUxMyw0NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1hX25lZWRfdW5tYXAoc3RydWN0IGRldmljZSAqZGV2KQogfQogI2VuZGlmIC8qICFDT05GSUdfSEFTX0RNQSB8fCAhQ09ORklHX0RNQV9ORUVEX1NZTkMgKi8KIAomIzQzOyNpZiAhZGVmaW5lZChDT05GSUdfRE1BX0xJVkVVUERBVEUpIHx8ICFkZWZpbmVkKENPTkZJR19IQVNfRE1BKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCiYjNDM7CQkJCQkJc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJCQl1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAomIzQzOwkJCQkJCSBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsCiYjNDM7CQkJCQkJIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJCQkgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJCQkgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCiYjNDM7CQkJCQkgICAgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiYjNDM7CQkJCQkJICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsCiYjNDM7CQkJCQkJICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgZ2ZwX3QgZ2ZwKTsKIHZvaWQgZG1hX2ZyZWVfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCkBAIC02MTgsNiAmIzQzOzY3NCwyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJKGdmcCAmYW1wOyBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDApOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJCQkgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsCiYjNDM7CQkJCQkgICAgIGRtYV9oYW5kbGUsIDAsIHN0YXRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRtYV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKGRldiwgc3RhdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9yZXN0b3JlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKJiM0MzsJCQkJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKJiM0MzsJCQkJCQkgICAgZ2ZwX3QgZ2ZwLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGdmcCwKJiM0MzsJCQkJCSAgICAoZ2ZwICZhbXA7IF9fR0ZQX05PV0FSTikgPyBETUFfQVRUUl9OT19XQVJOIDogMCwKJiM0MzsJCQkJCSAgICBzdGF0ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCXZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCiB7CkBAIC03NDcsNiAmIzQzOzgyNCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCShnZnAgJmFtcDsgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAomIzQzOwkJCQkJCSAgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLAomIzQzOwkJCQkJICAgICAgZG1hX2hhbmRsZSwgMCwgc3RhdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hbV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJCQkgICAgICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJCQkgICAgICAgdTY0IHN0YXRlKQomIzQzO3sKJiM0MzsJZG1hbV91bnByZXNlcnZlX2FsbG9jYXRpb24oZGV2LCBjcHVfYWRkciwgc2l6ZSwgZG1hX2hhbmRsZSwgc3RhdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiYjNDM7CQkJCQkJICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAomIzQzOwkJCQkJCSAgICAgZ2ZwX3QgZ2ZwLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnAsCiYjNDM7CQkJCQkgICAgIChnZnAgJmFtcDsgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwLAomIzQzOwkJCQkJICAgICBzdGF0ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2Nfd2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkgZG1hX2FkZHJfdCAqZG1hX2FkZHIsIGdmcF90IGdmcCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWUzOGNmMWExZmM5OWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmgKQEAgLTAsMCAmIzQzOzEsMzIgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX0xJTlVYX0tIT19BQklfRE1BX0FMTE9DX0gKJiM0MzsjZGVmaW5lIF9MSU5VWF9LSE9fQUJJX0RNQV9BTExPQ19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogRE9DOiBETUEgQWxsb2MgQUJJCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGhlYWRlciBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgdG8gc2VyaWFsaXplIHRoZSBzdGF0ZSBvZiBETUEKJiM0MzsgKiBhbGxvY2F0aW9ucywgZG9uZSBieSBkZXZpY2UgZHJpdmVyLCBhY3Jvc3MgYSBMaXZlIFVwZGF0ZS4KJiM0MzsgKgomIzQzOyAqIE9ubHkgRE1BIGFsbG9jYXRpb25zIGRvbmUgdGhyb3VnaCBkbWEtZGlyZWN0IHRoYXQgYXJlIGNvbnRpZ3VvdXMgYW5kCiYjNDM7ICogYWxsb2NhdGVkIHVzaW5nIGFsbG9jX3BhZ2UgYXJlIHN1cHBvcnRlZC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgZG1hX2FsbG9jX3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgb2YgYSBzaW5nbGUgRE1BIGFsbG9jYXRpb24KJiM0MzsgKiBAcGFnZV9waHlzOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBwcmVzZXJ2ZWQgcGFnZXMKJiM0MzsgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgRE1BIGFsbG9jYXRpb24KJiM0MzsgKiBAYXR0cnM6IERNQSBhbGxvY2F0aW9uIGF0dHJpYnV0ZXMKJiM0MzsgKiBAZm9yY2VfZGVjcnlwdGVkOiBXaGV0aGVyIHRoZSBtZW1vcnkgaXMgZm9yY2UgZGVjcnlwdGVkIGluIHByZXZpb3VzIGtlcm5lbAomIzQzOyAqLwomIzQzO3N0cnVjdCBkbWFfYWxsb2Nfc2VyIHsKJiM0MzsJdTY0IHBhZ2VfcGh5czsKJiM0MzsJdTY0IHNpemU7CiYjNDM7CXU2NCBhdHRyczsKJiM0MzsJdTggZm9yY2VfZGVjcnlwdGVkOwomIzQzOwl1OCBwYWRkaW5nWzddOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9MSU5VWF9LSE9fQUJJX0RNQV9BTExPQ19IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL0tjb25maWcgYi9rZXJuZWwvZG1hL0tjb25maWcKaW5kZXggYmZlZjIxYjRhOWFlN2QuLjQ4YmM3NGFmNTUxYTMxIDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9LY29uZmlnCkBAIC0yNjUsMyAmIzQzOzI2NSwxNSBAQCBjb25maWcgRE1BX01BUF9CRU5DSE1BUksKIAkgIHBlcmZvcm1hbmNlIG9mIGRtYV8odW4pbWFwX3BhZ2UuCiAKIAkgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kbWEvZG1hX21hcF9iZW5jaG1hcmsuYwomIzQzOwomIzQzO2NvbmZpZyBETUFfTElWRVVQREFURQomIzQzOwlib29sICYjMzQ7RW5hYmxlIHByZXNlcnZhdGlvbiBvZiBETUEgZGlyZWN0IGFsbG9jYXRpb25zJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBMSVZFVVBEQVRFCiYjNDM7CiYjNDM7Y29uZmlnIERNQV9MSVZFVVBEQVRFX0tVTklUX1RFU1QKJiM0MzsJdHJpc3RhdGUgJiMzNDtLVW5pdCB0ZXN0IGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBLVU5JVAomIzQzOwlkZXBlbmRzIG9uIERNQV9MSVZFVVBEQVRFCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGJ1aWxkcyB0aGUgS1VuaXQgdGVzdHMgZm9yIHRoZSBETUEgZGlyZWN0IGxpdmV1cGRhdGUKJiM0MzsJICBwcmVzZXJ2YXRpb24gYW5kIHJlc3RvcmF0aW9uIGxvZ2ljLgpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9NYWtlZmlsZSBiL2tlcm5lbC9kbWEvTWFrZWZpbGUKaW5kZXggNjk3NzAzMzQ0NGEzNzUuLjAzNzAzNTQyZWU3OWJjIDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvTWFrZWZpbGUKQEAgLTEwLDMgJiM0MzsxMCw0IEBAIG9iai0kKENPTkZJR19TV0lPVExCKQkJCSYjNDM7PSBzd2lvdGxiLm8KIG9iai0kKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkJCSYjNDM7PSBwb29sLm8KIG9iai0kKENPTkZJR19NTVUpCQkJJiM0Mzs9IHJlbWFwLm8KIG9iai0kKENPTkZJR19ETUFfTUFQX0JFTkNITUFSSykJCSYjNDM7PSBtYXBfYmVuY2htYXJrLm8KJiM0MztvYmotJChDT05GSUdfRE1BX0xJVkVVUERBVEVfS1VOSVRfVEVTVCkJJiM0Mzs9IGRpcmVjdF90ZXN0Lm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29oZXJlbnQuYyBiL2tlcm5lbC9kbWEvY29oZXJlbnQuYwppbmRleCBiY2RjMGY3NmQyZTgwYS4uNzZjYmUxMWUxZjkwZTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kbWEvY29oZXJlbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL2NvaGVyZW50LmMKQEAgLTIzMSw2ICYjNDM7MjMxLDE3IEBAIGludCBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvcmRlciwgdm9pZCAqdmFkZHIpCiAJcmV0dXJuIF9fZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChtZW0sIG9yZGVyLCB2YWRkcik7CiB9CiAKJiM0Mztib29sIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKm1lbSA9IGRldl9nZXRfY29oZXJlbnRfbWVtb3J5KGRldik7CiYjNDM7CiYjNDM7CWlmIChtZW0gJmFtcDsmYW1wOyB2YWRkciAmZ3Q7PSBtZW0tJmd0O3ZpcnRfYmFzZSAmYW1wOyZhbXA7IHZhZGRyICZsdDsKJiM0MzsJCSAgIChtZW0tJmd0O3ZpcnRfYmFzZSAmIzQzOyAoKGRtYV9hZGRyX3QpbWVtLSZndDtzaXplICZsdDsmbHQ7IFBBR0VfU0hJRlQpKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2RtYV9tbWFwX2Zyb21fY29oZXJlbnQoc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKm1lbSwKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwgaW50ICpyZXQpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jCmluZGV4IDAzZjUyYmQxNzEyMDYyLi42ZDBjZjljNzUyOGNiNSAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9jb250aWd1b3VzLmMKQEAgLTM3LDYgJiM0MzszNyw4IEBACiAKICNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtjbWE6ICYjMzQ7IGZtdAogCiYjNDM7I2luY2x1ZGUgJmx0O2t1bml0L3Zpc2liaWxpdHkuaCZndDsKJiM0MzsKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtYmxvY2suaCZndDsKQEAgLTEzMCw2ICYjNDM7MTMyLDMxIEBAIHN0cnVjdCBjbWEgKmRldl9nZXRfY21hX2FyZWEoc3RydWN0IGRldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2dldF9jbWFfYXJlYSk7CiAKJiM0MztzdHJ1Y3QgZG1hX2NtYV9jaGVja19kYXRhIHsKJiM0MzsJcGh5c19hZGRyX3Qgc3RhcnQ7CiYjNDM7CXBoeXNfYWRkcl90IGVuZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZG1hX2NtYV9jaGVja19hcmVhKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfY21hX2NoZWNrX2RhdGEgKmNoayA9IGRhdGE7CiYjNDM7CiYjNDM7CWlmIChjbWFfaW50ZXJzZWN0cyhjbWEsIGNoay0mZ3Q7c3RhcnQsIGNoay0mZ3Q7ZW5kKSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2NtYV9jaGVja19kYXRhIGNoayA9IHsKJiM0MzsJCS5zdGFydCA9IHBoeXMsCiYjNDM7CQkuZW5kID0gcGh5cyAmIzQzOyBzaXplIC0gMSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNtYV9mb3JfZWFjaF9hcmVhKGRtYV9jbWFfY2hlY2tfYXJlYSwgJmFtcDtjaGspICE9IDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoZG1hX2lzX2Zyb21fY21hKTsKJiM0MzsKICNpZmRlZiBDT05GSUdfRE1BX05VTUFfQ01BCiAKIHN0YXRpYyBzdHJ1Y3QgY21hICpkbWFfY29udGlndW91c19udW1hX2FyZWFbTUFYX05VTU5PREVTXTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvZGlyZWN0LmMgYi9rZXJuZWwvZG1hL2RpcmVjdC5jCmluZGV4IGVjODg3ZjQ0Mzc0MTgzLi4xMTdlYmFlOGE4MWZhMSAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS9kaXJlY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL2RpcmVjdC5jCkBAIC02LDYgJiM0Mzs2LDggQEAKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWJsb2NrLmgmZ3Q7IC8qIGZvciBtYXhfcGZuICovCiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjX2hhbmRvdmVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtbWFwLW9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjYXR0ZXJsaXN0LmgmZ3Q7CkBAIC0zMDcsNiAmIzQzOzMwOSwxOTMgQEAgdm9pZCAqZG1hX2RpcmVjdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCXJldHVybiBOVUxMOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURQomIzQzO2ludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYWxsb2Nfc2VyICpzZXI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICgha2hvX2lzX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiYjNDM7CWlmIChkbWFfaXNfZnJvbV9jbWEoZG1hX3RvX3BoeXMoZGV2LCBkbWFfaGFuZGxlKSwgc2l6ZSkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChpc19zd2lvdGxiX2Zvcl9hbGxvYyhkZXYpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoKGF0dHJzICZhbXA7IERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19ETUFfQUxMT0MpICZhbXA7JmFtcDsKJiM0MzsJICAgICFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfR0xPQkFMX1BPT0wpICZhbXA7JmFtcDsKJiM0MzsJICAgICFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgJmFtcDsmYW1wOwomIzQzOwkgICAgZG1hX2lzX2Zyb21fcG9vbChjcHVfYWRkciwgc2l6ZSkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXNlciA9IGtob19hbGxvY19wcmVzZXJ2ZShzaXplb2YoKnNlcikpOwomIzQzOwlpZiAoSVNfRVJSKHNlcikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihzZXIpOwomIzQzOwomIzQzOwlzZXItJmd0O3BhZ2VfcGh5cyA9IGRtYV90b19waHlzKGRldiwgZG1hX2hhbmRsZSk7CiYjNDM7CXNlci0mZ3Q7Zm9yY2VfZGVjcnlwdGVkID0gZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldik7CiYjNDM7CXNlci0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CXNlci0mZ3Q7YXR0cnMgPSAoYXR0cnMgJmFtcDsgfkRNQV9BVFRSX05PX1dBUk4pOwomIzQzOwomIzQzOwlyZXQgPSBraG9fcHJlc2VydmVfcGFnZXMocGh5c190b19wYWdlKHNlci0mZ3Q7cGFnZV9waHlzKSwKJiM0MzsJCQkJIDEgJmx0OyZsdDsgZ2V0X29yZGVyKHNpemUpKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJa2hvX3VucHJlc2VydmVfZnJlZShzZXIpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwkqc3RhdGUgPSB2aXJ0X3RvX3BoeXMoc2VyKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2FsbG9jX3NlciAqc2VyOwomIzQzOwomIzQzOwlpZiAoIWtob19pc19lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNlciA9IHBoeXNfdG9fdmlydChzdGF0ZSk7CiYjNDM7CWtob191bnByZXNlcnZlX3BhZ2VzKHBoeXNfdG9fcGFnZShzZXItJmd0O3BhZ2VfcGh5cyksCiYjNDM7CQkJICAgICAxICZsdDsmbHQ7IGdldF9vcmRlcihzZXItJmd0O3NpemUpKTsKJiM0MzsJa2hvX3VucHJlc2VydmVfZnJlZShzZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkICpkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAomIzQzOwkJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKQomIzQzO3sKJiM0MzsJYm9vbCByZW1hcCA9IGZhbHNlLCBzZXRfdW5jYWNoZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IGRtYV9hbGxvY19zZXIgKnNlciA9IE5VTEw7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwl2b2lkICpjcHVfYWRkciA9IE5VTEw7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIWtob19pc19lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJc2VyID0gcGh5c190b192aXJ0KHN0YXRlKTsKJiM0MzsJcGFnZSA9IHBoeXNfdG9fcGFnZShzZXItJmd0O3BhZ2VfcGh5cyk7CiYjNDM7CiYjNDM7CXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwomIzQzOwlpZiAoc2l6ZSAhPSBzZXItJmd0O3NpemUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJV0FSTl9PTl9PTkNFKChhdHRycyAmYW1wOyB+RE1BX0FUVFJfTk9fV0FSTikgIT0gc2VyLSZndDthdHRycyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENhbm5vdCBmcmVlIHRoZSByZXN0b3JlZCBwYWdlcyBvbiBlcnJvciBoZXJlIGFzIHRoZXNlIG1pZ2h0IGJlIGluIHVzZQomIzQzOwkgKiBieSBhIGRldmljZSB3aXRoIGRpcmVjdCBhbGxvY2F0aW9uIGluIHRoZSBwcmV2aW91cyBrZXJuZWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfc3dpb3RsYl9mb3JfYWxsb2MoZGV2KSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoKGF0dHJzICZhbXA7IERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpIHsKJiM0MzsJCWlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19ETUFfQUxMT0MpKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9HTE9CQUxfUE9PTCkpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CiYjNDM7CQlzZXRfdW5jYWNoZWQgPSBJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19ETUFfU0VUX1VOQ0FDSEVEKTsKJiM0MzsJCXJlbWFwID0gSVNfRU5BQkxFRChDT05GSUdfRE1BX0RJUkVDVF9SRU1BUCk7CiYjNDM7CQlpZiAoIXNldF91bmNhY2hlZCAmYW1wOyZhbXA7ICFyZW1hcCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKJiM0MzsJCXJlbWFwID0gdHJ1ZTsKJiM0MzsJCXNldF91bmNhY2hlZCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlbWFwcGluZyB3aWxsIGJlIGJsb2NraW5nIHNvIHJldHVybiBlcnJvci4gVGhlIHByZXNlcnZlZCBtZW1vcnkKJiM0MzsJICogbWlnaHQgYmUgYWxyZWFkeSBkZWNyeXB0ZWQgaW4gdGhlIHByZXZpb3VzIGtlcm5lbCwgYnV0IHRoZSBkZWNyeXB0aW9uCiYjNDM7CSAqIGNhbGwgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgbm9uLWJsb2NraW5nIHNvIHJldHVybiBlcnJvciBhbHdheXMgaWYKJiM0MzsJICogZGVjcnlwdGlvbiBpcyByZXF1aXJlZC4KJiM0MzsJICovCiYjNDM7CWlmICgocmVtYXAgfHwgZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpICZhbXA7JmFtcDsKJiM0MzsJICAgIGRtYV9kaXJlY3RfdXNlX3Bvb2woZGV2LCBnZnApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuY3J5cHRpb24gc2NoZW1lIGNoYW5nZWQgYmV0d2VlbiB0d28ga2VybmVscyBhbmQgdGhpcyBtaWdodCBjYXVzZQomIzQzOwkgKiBpc3N1ZXMgaWYgZGV2aWNlL2RyaXZlciBpcyBub3QgaGFuZGxpbmcgaXQgcHJvcGVybHkuCiYjNDM7CSAqLwomIzQzOwlXQVJOX09OX09OQ0Uoc2VyLSZndDtmb3JjZV9kZWNyeXB0ZWQgIT0gZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBhcmNoX2RtYV9wcmVwX2NvaGVyZW50KCkgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGFueSBjYWNoZSBsaW5lcyBmcm9tCiYjNDM7CSAqIHRoZSBwcmV2aW91cyBrZXJuZWwsIGlmIHRoZSBkZXZpY2Ugd2FzIGNvaGVyZW50IHByZXZpb3VzbHkgb3IgY2FjaGVkCiYjNDM7CSAqIG1hcHBpbmcgaW4gdGhpcyBrZXJuZWwgZHVyaW5nIGluaXQgYXJlIG5vdCBwcm9ibGVtYXRpYyBmb3IKJiM0MzsJICogbm9uLWNvaGVyZW50IGFsbG9jYXRpb25zLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlbWFwKSB7CiYjNDM7CQlwZ3Byb3RfdCBwcm90ID0gZG1hX3BncHJvdChkZXYsIFBBR0VfS0VSTkVMLCBhdHRycyk7CiYjNDM7CiYjNDM7CQlpZiAoZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpCiYjNDM7CQkJcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQocHJvdCk7CiYjNDM7CiYjNDM7CQlhcmNoX2RtYV9wcmVwX2NvaGVyZW50KHBhZ2UsIHNpemUpOwomIzQzOwomIzQzOwkJY3B1X2FkZHIgPSBkbWFfY29tbW9uX2NvbnRpZ3VvdXNfcmVtYXAocGFnZSwgc2l6ZSwgcHJvdCwKJiM0MzsJCQkJCQkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKJiM0MzsJCWlmICghY3B1X2FkZHIpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQljcHVfYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKJiM0MzsJCWlmIChkbWFfc2V0X2RlY3J5cHRlZChkZXYsIGNwdV9hZGRyLCBzaXplKSkgewomIzQzOwkJCWNwdV9hZGRyID0gTlVMTDsKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2V0X3VuY2FjaGVkKSB7CiYjNDM7CQlhcmNoX2RtYV9wcmVwX2NvaGVyZW50KHBhZ2UsIHNpemUpOwomIzQzOwkJY3B1X2FkZHIgPSBhcmNoX2RtYV9zZXRfdW5jYWNoZWQoY3B1X2FkZHIsIHNpemUpOwomIzQzOwkJaWYgKElTX0VSUihjcHVfYWRkcikpIHsKJiM0MzsJCQljcHVfYWRkciA9IE5VTEw7CiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmRtYV9oYW5kbGUgPSBwaHlzX3RvX2RtYV9kaXJlY3QoZGV2LCBzZXItJmd0O3BhZ2VfcGh5cyk7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlXQVJOX09OKCFraG9fcmVzdG9yZV9wYWdlcyhzZXItJmd0O3BhZ2VfcGh5cywKJiM0MzsJCQkJICAgMSAmbHQ7Jmx0OyBnZXRfb3JkZXIoc2VyLSZndDtzaXplKSkpOwomIzQzOwlraG9fcmVzdG9yZV9mcmVlKHNlcik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERNQSBkaXJlY3QgQVBJIGV4cGVjdHMgaGlnaC1vcmRlciBhbGxvY2F0aW9ucywgc28gc2V0IHJlZmNvdW50IG9mCiYjNDM7CSAqIHRhaWwgcGFnZXMgdG8gemVyby4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9ICgxICZsdDsmbHQ7IGdldF9vcmRlcihzaXplKSkgLSAxOyBpICZndDsgMDsgLS1pKQomIzQzOwkJc2V0X3BhZ2VfY291bnQocGFnZSAmIzQzOyBpLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNwdV9hZGRyOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgZG1hX2RpcmVjdF9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCXZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1bnNpZ25lZCBsb25nIGF0dHJzKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jIGIva2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODQwM2VjNDc4MDdlOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYwpAQCAtMCwwICYjNDM7MSwyMDggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogS1VuaXQgdGVzdCBmb3IgRE1BIGFsbG9jYXRpb24gbGl2ZSB1cGRhdGUgcHJlc2VydmF0aW9uLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtrdW5pdC90ZXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtrdW5pdC9zdGF0aWNfc3R1Yi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtbWFwLW9wcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtbWFwcGluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtZGlyZWN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjX2hhbmRvdmVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc2l6ZV90IGRtYV90ZXN0X3NpemVzW10gPSB7CiYjNDM7CTEyOCwKJiM0MzsJUEFHRV9TSVpFLAomIzQzOwkyICogUEFHRV9TSVpFLAomIzQzOwkzICogUEFHRV9TSVpFLAomIzQzOwk4ICogUEFHRV9TSVpFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZG1hX3NpemVfZGVzYyhjb25zdCBzaXplX3QgKnNpemUsIGNoYXIgKmRlc2MpCiYjNDM7ewomIzQzOwlzbnByaW50ZihkZXNjLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUsICYjMzQ7c2l6ZT0lenUmIzM0OywgKnNpemUpOwomIzQzO30KJiM0MzsKJiM0MztLVU5JVF9BUlJBWV9QQVJBTShkbWFfc2l6ZSwgZG1hX3Rlc3Rfc2l6ZXMsIGRtYV9zaXplX2Rlc2MpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbW9ja19raG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwaHlzX3RvX3BhZ2UocGh5cyk7CiYjNDM7CiYjNDM7CWlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsIG5yX3BhZ2VzKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwYWdlLCBucl9wYWdlcyk7CiYjNDM7CXJldHVybiBwYWdlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGZvbGlvICptb2NrX2tob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwaHlzX3RvX3BhZ2UocGh5cykpOwomIzQzOwomIzQzOwlpZiAoIWtob190ZXN0X3BhZ2VzX3ByZXNlcnZlZChwaHlzLCAoMSAmbHQ7Jmx0OyBmb2xpb19vcmRlcihmb2xpbykpKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlraG9fdW5wcmVzZXJ2ZV9mb2xpbyhmb2xpbyk7CiYjNDM7CXJldHVybiBmb2xpbzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHN0cnVjdCBrdW5pdCAqdGVzdCwKJiM0MzsJCQkJCQkgICAgYm9vbCBjb2hlcmVudCwKJiM0MzsJCQkJCQkgICAgYm9vbCBhdG9taWMsCiYjNDM7CQkJCQkJICAgIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEgJmx0OyZsdDsgZ2V0X29yZGVyKHNpemUpOwomIzQzOwlkbWFfYWRkcl90IGhhbmRsZTEsIGhhbmRsZTI7CiYjNDM7CWludCByZXQsIGV4cGVjdGVkX3JldCA9IDA7CiYjNDM7CXN0cnVjdCBkZXZpY2UgZGV2ID0gezB9OwomIzQzOwlnZnBfdCBnZnAgPSBHRlBfS0VSTkVMOwomIzQzOwl2b2lkICphZGRyMSwgKmFkZHIyOwomIzQzOwl1NjQgc3RhdGU7CiYjNDM7CiYjNDM7CWt1bml0X2FjdGl2YXRlX3N0YXRpY19zdHViKHRlc3QsIGtob19yZXN0b3JlX3BhZ2VzLCBtb2NrX2tob19yZXN0b3JlX3BhZ2VzKTsKJiM0MzsJa3VuaXRfYWN0aXZhdGVfc3RhdGljX3N0dWIodGVzdCwga2hvX3Jlc3RvcmVfZm9saW8sIG1vY2tfa2hvX3Jlc3RvcmVfZm9saW8pOwomIzQzOwomIzQzOwlkZXZpY2VfaW5pdGlhbGl6ZSgmYW1wO2Rldik7CiYjNDM7CWRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSyg2NCk7CiYjNDM7CWRldi5kbWFfbWFzayA9ICZhbXA7ZGV2LmNvaGVyZW50X2RtYV9tYXNrOwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFKSB8fCBcCiYjNDM7ICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFUpIHx8IFwKJiM0MzsgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTEwpCiYjNDM7CWRldi5kbWFfY29oZXJlbnQgPSBjb2hlcmVudDsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJaWYgKGF0b21pYykKJiM0MzsJCWdmcCA9IEdGUF9BVE9NSUM7CiYjNDM7CiYjNDM7CWFkZHIxID0gZG1hX2FsbG9jX2NvaGVyZW50KCZhbXA7ZGV2LCBzaXplLCAmYW1wO2hhbmRsZTEsIGdmcCk7CiYjNDM7CWlmICghYWRkcjEpIHsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtETUEgYWxsb2NhdGlvbiBmYWlsZWQgKHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24pJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgJmFtcDsmYW1wOyBkbWFfaXNfZnJvbV9wb29sKGFkZHIxLCBzaXplKSkgewomIzQzOwkJZXhwZWN0ZWRfcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlrdW5pdF9pbmZvKHRlc3QsICYjMzQ7RE1BIGFsbG9jYXRpb24gdXNpbmcgcG9vbCwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQJiMzNDspOwomIzQzOwl9IGVsc2UgaWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cygmYW1wO2RldiwgaGFuZGxlMSksIHNpemUpKSB7CiYjNDM7CQlleHBlY3RlZF9yZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWt1bml0X2luZm8odGVzdCwgJiMzNDtETUEgYWxsb2NhdGlvbiB1c2luZyBDTUEsIGV4cGVjdGluZyAtRU9QTk9UU1VQUCYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkbWFfcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbigmYW1wO2RldiwgYWRkcjEsIHNpemUsIGhhbmRsZTEsICZhbXA7c3RhdGUpOwomIzQzOwlLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCBleHBlY3RlZF9yZXQpOwomIzQzOwomIzQzOwlpZiAoIWV4cGVjdGVkX3JldCkgewomIzQzOwkJS1VOSVRfRVhQRUNUX1RSVUVfTVNHKHRlc3QsCiYjNDM7CQkJCSAgICAgIGtob190ZXN0X3BhZ2VzX3ByZXNlcnZlZChkbWFfdG9fcGh5cygmYW1wO2RldiwgaGFuZGxlMSksIG5yX3BhZ2VzKSwKJiM0MzsJCQkJICAgICAgJiMzNDtBbGxvY2F0ZWQgYmxvY2sgbm90IHRyYWNrZWQgaW4gS0hPJiMzNDspOwomIzQzOwomIzQzOwkJYWRkcjIgPSBkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKCZhbXA7ZGV2LCBzaXplLCAmYW1wO2hhbmRsZTIsIGdmcCwgc3RhdGUpOwomIzQzOwkJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGFkZHIyKTsKJiM0MzsKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBoYW5kbGUxLCBoYW5kbGUyKTsKJiM0MzsJCWRtYV9mcmVlX2NvaGVyZW50KCZhbXA7ZGV2LCBzaXplLCBhZGRyMiwgaGFuZGxlMik7CiYjNDM7CQlLVU5JVF9FWFBFQ1RfRkFMU0VfTVNHKHRlc3QsCiYjNDM7CQkJCSAgICAgICBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoJmFtcDtkZXYsIGhhbmRsZTEpLCBucl9wYWdlcyksCiYjNDM7CQkJCSAgICAgICAmIzM0O0FsbG9jYXRlZCBibG9jayBzdGlsbCB0cmFja2VkIGFmdGVyIGZyZWUmIzM0Oyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO2Rldiwgc2l6ZSwgYWRkcjEsIGhhbmRsZTEpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwljb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LSZndDtwYXJhbV92YWx1ZTsKJiM0MzsKJiM0MzsJdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIHRydWUsIGZhbHNlLCAqc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnQoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJY29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC0mZ3Q7cGFyYW1fdmFsdWU7CiYjNDM7CiYjNDM7CXRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCBmYWxzZSwgZmFsc2UsICpzaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X2NvaGVyZW50X2F0b21pYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwljb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LSZndDtwYXJhbV92YWx1ZTsKJiM0MzsKJiM0MzsJdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIHRydWUsIHRydWUsICpzaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudF9hdG9taWMoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJY29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC0mZ3Q7cGFyYW1fdmFsdWU7CiYjNDM7CiYjNDM7CXRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCBmYWxzZSwgdHJ1ZSwgKnNpemUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2RtYW1fcHJlc2VydmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CWRtYV9hZGRyX3QgaGFuZGxlLCBub25fZG1hbV9oYW5kbGU7CiYjNDM7CXZvaWQgKmFkZHIsICpub25fZG1hbV9hZGRyOwomIzQzOwlzdHJ1Y3QgZGV2aWNlIGRldiA9IHswfTsKJiM0MzsJc2l6ZV90IHNpemUgPSAxMjg7CiYjNDM7CXU2NCBzdGF0ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJa3VuaXRfYWN0aXZhdGVfc3RhdGljX3N0dWIodGVzdCwga2hvX3Jlc3RvcmVfcGFnZXMsIG1vY2tfa2hvX3Jlc3RvcmVfcGFnZXMpOwomIzQzOwlrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9mb2xpbywgbW9ja19raG9fcmVzdG9yZV9mb2xpbyk7CiYjNDM7CiYjNDM7CWRldmljZV9pbml0aWFsaXplKCZhbXA7ZGV2KTsKJiM0MzsJZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDY0KTsKJiM0MzsJZGV2LmRtYV9tYXNrID0gJmFtcDtkZXYuY29oZXJlbnRfZG1hX21hc2s7CiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9ERVZJQ0UpIHx8IFwKJiM0MzsgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVSkgfHwgXAomIzQzOyAgICBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19TWU5DX0RNQV9GT1JfQ1BVX0FMTCkKJiM0MzsJZGV2LmRtYV9jb2hlcmVudCA9IHRydWU7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CW5vbl9kbWFtX2FkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFtcDtkZXYsIHNpemUsICZhbXA7bm9uX2RtYW1faGFuZGxlLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFub25fZG1hbV9hZGRyKSB7CiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7RE1BIGFsbG9jYXRpb24gZmFpbGVkJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbigmYW1wO2Rldiwgbm9uX2RtYW1fYWRkciwgc2l6ZSwgbm9uX2RtYW1faGFuZGxlLCAmYW1wO3N0YXRlKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRX01TRyh0ZXN0LCByZXQsIC1FSU5WQUwsICYjMzQ7UHJlc2VydmluZyBub24tZGV2cmVzIGFsbG9jYXRpb24gc2hvdWxkIGZhaWwmIzM0Oyk7CiYjNDM7CWRtYV9mcmVlX2NvaGVyZW50KCZhbXA7ZGV2LCBzaXplLCBub25fZG1hbV9hZGRyLCBub25fZG1hbV9oYW5kbGUpOwomIzQzOwomIzQzOwlhZGRyID0gZG1hbV9hbGxvY19jb2hlcmVudCgmYW1wO2Rldiwgc2l6ZSwgJmFtcDtoYW5kbGUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWFkZHIpIHsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtETUEgYWxsb2NhdGlvbiBmYWlsZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKCZhbXA7ZGV2LCBhZGRyLCBzaXplLCBoYW5kbGUsICZhbXA7c3RhdGUpOwomIzQzOwlLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHJldCwgMCwgJiMzNDtGYWlsZWQgdG8gcHJlc2VydmUgZG1hbSBhbGxvY2F0aW9uJiMzNDspOwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoJmFtcDtkZXYsIGhhbmRsZSksIDEpKTsKJiM0MzsKJiM0MzsJZG1hbV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oJmFtcDtkZXYsIGFkZHIsIHNpemUsIGhhbmRsZSwgc3RhdGUpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCwga2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKGRtYV90b19waHlzKCZhbXA7ZGV2LCBoYW5kbGUpLCAxKSk7CiYjNDM7CiYjNDM7CWRtYW1fZnJlZV9jb2hlcmVudCgmYW1wO2Rldiwgc2l6ZSwgYWRkciwgaGFuZGxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRtYV9kaXJlY3RfdGVzdF9jYXNlc1tdID0gewomIzQzOwlLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudCwgZG1hX3NpemVfZ2VuX3BhcmFtcyksCiYjNDM7CUtVTklUX0NBU0VfUEFSQU0odGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudCwgZG1hX3NpemVfZ2VuX3BhcmFtcyksCiYjNDM7CUtVTklUX0NBU0VfUEFSQU0odGVzdF9kbWFfZGlyZWN0X2NvaGVyZW50X2F0b21pYywgZG1hX3NpemVfZ2VuX3BhcmFtcyksCiYjNDM7CUtVTklUX0NBU0VfUEFSQU0odGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudF9hdG9taWMsIGRtYV9zaXplX2dlbl9wYXJhbXMpLAomIzQzOwlLVU5JVF9DQVNFKHRlc3RfZG1hbV9wcmVzZXJ2YXRpb24pLAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBkbWFfZGlyZWN0X3Rlc3Rfc3VpdGUgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtkbWFfZGlyZWN0X2xpdmV1cGRhdGUmIzM0OywKJiM0MzsJLnRlc3RfY2FzZXMgPSBkbWFfZGlyZWN0X3Rlc3RfY2FzZXMsCiYjNDM7fTsKJiM0MztrdW5pdF90ZXN0X3N1aXRlKGRtYV9kaXJlY3RfdGVzdF9zdWl0ZSk7CiYjNDM7CiYjNDM7TU9EVUxFX0lNUE9SVF9OUygmIzM0O0VYUE9SVEVEX0ZPUl9LVU5JVF9URVNUSU5HJiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O0tVbml0IHRlc3QgZm9yIERNQSBkaXJlY3QgbGl2ZSB1cGRhdGUgcHJlc2VydmF0aW9uJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9tYXBwaW5nLmMgYi9rZXJuZWwvZG1hL21hcHBpbmcuYwppbmRleCAyM2VkOGViOTIzM2U1NS4uYWVjMTIyMmFiNWFlYjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kbWEvbWFwcGluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvbWFwcGluZy5jCkBAIC0xMiw2ICYjNDM7MTIsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2dmcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbW11LWRtYS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ttc2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjX2hhbmRvdmVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2ZfZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKQEAgLTM1LDEyICYjNDM7MzcsMjUgQEAgc3RydWN0IGRtYV9kZXZyZXMgewogCXZvaWQJCSp2YWRkcjsKIAlkbWFfYWRkcl90CWRtYV9oYW5kbGU7CiAJdW5zaWduZWQgbG9uZwlhdHRyczsKJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFCiYjNDM7CWJvb2wgaXNfcHJlc2VydmVkOwomIzQzOyNlbmRpZgogfTsKIAogc3RhdGljIHZvaWQgZG1hbV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKQogewogCXN0cnVjdCBkbWFfZGV2cmVzICp0aGlzID0gcmVzOwogCiYjNDM7I2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURQomIzQzOwkvKgomIzQzOwkgKiBGcmVlaW5nIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5IGlzIGRhbmdlcm91cyBhcyBpdCBjYW4gY2F1c2UgVUFGIGluIHRoZQomIzQzOwkgKiBjdXJyZW50IG9yIG5leHQga2VybmVsIGlmIHRoZSBtZW1vcnkgaXMgc3RpbGwgYmVpbmcgdXNlZCBieSB0aGUKJiM0MzsJICogZGV2aWNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKFdBUk5fT04odGhpcy0mZ3Q7aXNfcHJlc2VydmVkKSkKJiM0MzsJCXJldHVybjsKJiM0MzsjZW5kaWYKJiM0MzsKIAlkbWFfZnJlZV9hdHRycyhkZXYsIHRoaXMtJmd0O3NpemUsIHRoaXMtJmd0O3ZhZGRyLCB0aGlzLSZndDtkbWFfaGFuZGxlLAogCQkJdGhpcy0mZ3Q7YXR0cnMpOwogfQpAQCAtNjI4LDYgJiM0Mzs2NDMsMTIzIEBAIHU2NCBkbWFfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2dldF9yZXF1aXJlZF9tYXNrKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEUKJiM0MztpbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAomIzQzOwkJCQkgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiYjNDM7CiYjNDM7CWlmIChkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBjcHVfYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChkbWFfYWxsb2NfZGlyZWN0KGRldiwgb3BzKSkKJiM0MzsJCXJldHVybiBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oZGV2LCBjcHVfYWRkciwgc2l6ZSwKJiM0MzsJCQkJCQkgICAgICBkbWFfaGFuZGxlLCBhdHRycywKJiM0MzsJCQkJCQkgICAgICBzdGF0ZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyk7CiYjNDM7CiYjNDM7dm9pZCBkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwomIzQzOwomIzQzOwlpZiAoZG1hX2FsbG9jX2RpcmVjdChkZXYsIG9wcykpCiYjNDM7CQlkbWFfZGlyZWN0X3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKTsKJiM0MzsKJiM0Mzt2b2lkICpkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiYjNDM7CQkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwomIzQzOwl2b2lkICpjcHVfYWRkciA9IE5VTEw7CiYjNDM7CiYjNDM7CVdBUk5fT05fT05DRSghZGV2LSZndDtjb2hlcmVudF9kbWFfbWFzayk7CiYjNDM7CiYjNDM7CWlmIChkbWFfYWxsb2NfZGlyZWN0KGRldiwgb3BzKSkKJiM0MzsJCWNwdV9hZGRyID0gZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oZGV2LCBzaXplLCBkbWFfaGFuZGxlLAomIzQzOwkJCQkJCQkgZ2ZwLCBhdHRycywgc3RhdGUpOwomIzQzOwomIzQzOwlkZWJ1Z19kbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCAqZG1hX2hhbmRsZSwgY3B1X2FkZHIsIGF0dHJzKTsKJiM0MzsJcmV0dXJuIGNwdV9hZGRyOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpOwomIzQzOwomIzQzO2ludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKJiM0MzsJCQkJICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfZGV2cmVzIG1hdGNoX2RhdGEgPSB7IHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlIH07CiYjNDM7CXN0cnVjdCBkbWFfZGV2cmVzICpkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZHIgPSBkZXZyZXNfZmluZChkZXYsIGRtYW1fcmVsZWFzZSwgZG1hbV9tYXRjaCwgJmFtcDttYXRjaF9kYXRhKTsKJiM0MzsJaWYgKCFkcikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoZHItJmd0O2lzX3ByZXNlcnZlZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLCBkbWFfaGFuZGxlLCBhdHRycywgc3RhdGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZHItJmd0O2lzX3ByZXNlcnZlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyk7CiYjNDM7CiYjNDM7dm9pZCBkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAomIzQzOwkJCQlzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2RldnJlcyBtYXRjaF9kYXRhID0geyBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSB9OwomIzQzOwlzdHJ1Y3QgZG1hX2RldnJlcyAqZHI7CiYjNDM7CiYjNDM7CWRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsICZhbXA7bWF0Y2hfZGF0YSk7CiYjNDM7CWlmICghZHIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghZHItJmd0O2lzX3ByZXNlcnZlZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTsKJiM0MzsJZHItJmd0O2lzX3ByZXNlcnZlZCA9IGZhbHNlOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKTsKJiM0MzsKJiM0Mzt2b2lkICpkbWFtX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAomIzQzOwkJCQkgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9kZXZyZXMgKmRyOwomIzQzOwl2b2lkICp2YWRkcjsKJiM0MzsKJiM0MzsJZHIgPSBkZXZyZXNfYWxsb2MoZG1hbV9yZWxlYXNlLCBzaXplb2YoKmRyKSwgZ2ZwKTsKJiM0MzsJaWYgKCFkcikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl2YWRkciA9IGRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnAsIGF0dHJzLCBzdGF0ZSk7CiYjNDM7CWlmICghdmFkZHIpIHsKJiM0MzsJCWRldnJlc19mcmVlKGRyKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRyLSZndDt2YWRkciA9IHZhZGRyOwomIzQzOwlkci0mZ3Q7ZG1hX2hhbmRsZSA9ICpkbWFfaGFuZGxlOwomIzQzOwlkci0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CWRyLSZndDthdHRycyA9IGF0dHJzOwomIzQzOwomIzQzOwlkZXZyZXNfYWRkKGRldiwgZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gdmFkZHI7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpOwomIzQzOyNlbmRpZgomIzQzOwogdm9pZCAqZG1hX2FsbG9jX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCiAJCWdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgYXR0cnMpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL3Bvb2wuYyBiL2tlcm5lbC9kbWEvcG9vbC5jCmluZGV4IDJiMmZiYjcwOTI0MjlhLi43ODQ5NjU2ODk3M2ZlYiAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS9wb29sLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9wb29sLmMKQEAgLTMsNiAmIzQzOzMsOSBAQAogICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQwogICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2t1bml0L3Zpc2liaWxpdHkuaCZndDsKJiM0MzsKICNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcC1vcHMuaCZndDsKQEAgLTMwNywzICYjNDM7MzEwLDE3IEBAIGJvb2wgZG1hX2ZyZWVfZnJvbV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKQogCiAJcmV0dXJuIGZhbHNlOwogfQomIzQzOwomIzQzO2Jvb2wgZG1hX2lzX2Zyb21fcG9vbCh2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2wgPSBOVUxMOwomIzQzOwomIzQzOwl3aGlsZSAoKHBvb2wgPSBkbWFfZ3Vlc3NfcG9vbChwb29sLCAwKSkpIHsKJiM0MzsJCWlmICghZ2VuX3Bvb2xfaGFzX2FkZHIocG9vbCwgKHVuc2lnbmVkIGxvbmcpc3RhcnQsIHNpemUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGRtYV9pc19mcm9tX3Bvb2wpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY2NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERNQSBEaXJlY3QgTGl2ZXVwZGF0ZSBQcmVzZXJ2YXRpb24gUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0JiMzOTtzIGFsbCBhYm91dCBhZGRpbmcgc3VwcG9ydCBmb3IgJiMzNDtETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uLCYjMzQ7IHdoaWNoIGlzIGNsZWFybHkgdGllZCBpbnRvIHRoZSBLZXhlYyBIYW5kT3ZlciAoS0hPKSBzeXN0ZW0uIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb25gLCBgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb25gLCBhbmQgYGRtYV9kaXJlY3RfcmVzdG9yZV9hbGxvY2F0aW9uYCwgYWxvbmcgd2l0aCBhIEtVbml0IHRlc3QgaW4gYGtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgdGhlIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYERNQV9MSVZFVVBEQVRFYCBhbmQgYERNQV9MSVZFVVBEQVRFX0tVTklUX1RFU1RgLgoKQnV0IG5vdyB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IGFjY2Vzc2libGUgaXMgdGhpcz8gSXMgdGhpcyBmdW5jdGlvbmFsaXR5IG1lYW50IHRvIGJlIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsLCBvciBhcmUgd2UgZXhwb3NpbmcgdGhpcyB0byB1c2Vyc3BhY2Ugc29tZWhvdz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYWNoYWJpbGl0eSBoZXJlLiBUaGUgZnVuY3Rpb25zICphcmUqIGV4cG9ydGVkLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnIGluIHRlcm1zIG9mIGJlaW5nIHVzZWQuIGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AgYW5kIGBkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzYCBhcmUgZXhwb3J0ZWQsIGZvciBleGFtcGxlLiBTbywgSSBuZWVkIHRvIGtub3cgaWYgYW55IG9mIHRoZW0gYXJlIGFjdHVhbGx5ICp1c2VkKiBieSBhbnl0aGluZywgb3IgaWYgdGhleSYjMzk7cmUganVzdCBiZWluZyBleHBvcnRlZCBmb3IgdGhlIHNha2Ugb2YgY29tcGxldGVuZXNzLiBUaW1lIHRvIGRvIGEgcXVpY2sgc2VhcmNoLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGNhbGxzIHRvIGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AgYW5kIGBkbWFfcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbmAgdG8gZGV0ZXJtaW5lIGl0cyB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTIxMT1pbnQgZG1hX21tYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC0yMTMtI2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjIxNDppbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC0yMTUtXHRcdFx0XHQgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4tLVxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTUxMD1zdGF0aWMgaW5saW5lIGJvb2wgZG1hX25lZWRfdW5tYXAoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC01MTYtI2lmICFkZWZpbmVkKENPTkZJR19ETUFfTElWRVVQREFURSkgfHwgIWRlZmluZWQoQ09ORklHX0hBU19ETUEpXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg6NTE3OnN0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNTE4LVx0XHRcdFx0XHRcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4tLVxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTY3Nz1zdGF0aWMgaW5saW5lIGludCBkbWFfcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC02Nzkte1xuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjY4MDpcdHJldHVybiBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTY4MS1cdFx0XHRcdFx0ICAgICBkbWFfaGFuZGxlLCAwLCBzdGF0ZSk7XG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmM9NjQ0PUVYUE9SVF9TWU1CT0xfR1BMKGRtYV9nZXRfcmVxdWlyZWRfbWFzayk7XG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjQ2LSNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjY0NzppbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY0OC1cdFx0XHRcdCAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NjItfVxua2VybmVsL2RtYS9tYXBwaW5nLmM6NjYzOkVYUE9SVF9TWU1CT0woZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMpO1xua2VybmVsL2RtYS9tYXBwaW5nLmMtNjY0LVxuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jPTY5Mj1pbnQgZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzA2LVxua2VybmVsL2RtYS9tYXBwaW5nLmM6NzA3Olx0cmV0ID0gZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSwgZG1hX2hhbmRsZSwgYXR0cnMsIHN0YXRlKTtcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcwOC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MDYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4KCioqQW5hbHl6aW5nIEtlcm5lbCBGdW5jdGlvbiBVc2FnZSoqCgpBbHJpZ2h0LCB0aGUgY29kZSBkZWZpbmVzIGFuZCBleHBvcnRzIHNvbWV0aGluZywgYnV0IGl0JiMzOTtzIG5vdCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmUgZWxzZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLi4uIGludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIGVpdGhlcjogYSkgYW4gaW5jb21wbGV0ZSBmZWF0dXJlLCBiKSBhIHBpZWNlIG9mIGluZnJhc3RydWN0dXJlIGZvciBmdXR1cmUgdXNlLCBvciBjKSBzb21ldGhpbmcgdGhhdCBoYXMgYmVlbiBhZGRlZCBhbmQgKnNob3VsZCogYmUgdXNlZCwgYnV0IGlzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgY2FsbGVkLiAKCkJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUgcXVpY2tseSBncmVwIHRoZSBjb2RlYmFzZSBmb3IgYGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uYCBhbmQgYGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbmAuIEkgbmVlZCB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgdGhhdCBpdCYjMzk7cyBqdXN0IGJlaW5nIGludm9rZWQgdW5kZXIgYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtZSBvciB0aHJvdWdoIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uLiBDaGVja2luZyB0aGlzIHdpbGwgc2F2ZSBtZSBhIGxvdCBvZiBndWVzc3dvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTY3MD1zdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC02NzYtXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg6Njc3OnN0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNjc4LVx0XHRcdFx0XHRcdCAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCAqc3RhdGUpXG4tLVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jPTUzPXN0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTk0LVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jOjk1Olx0cmV0ID0gZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBhZGRyMSwgc2l6ZSwgaGFuZGxlMSwgXHUwMDI2c3RhdGUpO1xua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTk2LVx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgZXhwZWN0ZWRfcmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQzMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIERNQSBNZW1vcnkgQWxsb2NhdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIGJhc2VkIG9uIHRoZSBpbml0aWFsIHNjYW4sIGl0ICpsb29rcyogbGlrZSB0aGVzZSBgZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uYCBmdW5jdGlvbnMgYXJlIGV4Y2x1c2l2ZWx5IHV0aWxpemVkIHdpdGhpbiB0aGUgS1VuaXQgdGVzdCBsb2NhdGVkIGluIGBrZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmNgLiBUaGF0JiMzOTtzIGEgYml0IHN1cnByaXNpbmcuIEkgZXhwZWN0ZWQgYnJvYWRlciB1c2FnZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBjb2hlcmVudCBETUEgYWxsb2NhdGlvbi4gSSBtZWFuLCBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG9wZXJhdGlvbi4KCkhvd2V2ZXIsIHRoZSBpbW1lZGlhdGUgY29uY2x1c2lvbiB0aGF0IEkgY2FuIGRyYXcgaXMgdGhhdCB0aGV5IGFyZSB1dGlsaXplZCBvbmx5IGluIHRoaXMgb25lIHNwZWNpZmljIGFyZWEuCgpCdXQsIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgc3Ryb25nIGNvbmNsdXNpb24gb3IgYXNzdW1wdGlvbnMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2suICpJcyogdGhhdCB0cnVseSB0aGUgY2FzZT8gSSBuZWVkIHRvIHBlcmZvcm0gYSBtb3JlIHJpZ29yb3VzIHNlYXJjaCB0byBjb25maXJtIHRoYXQgdGhlcmUgaXNuJiMzOTt0IHNvbWUgc3VidGxlLCBpbmRpcmVjdCB1c2FnZSBvciBjYWxsIHBhdGggdGhhdCBJIG1pc3NlZCBpbml0aWFsbHkuIEkgbmVlZCB0byBtYWtlICpzdXJlKiB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBpbnN0YW5jZXMgb2YgYGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbmAgYmVpbmcgY2FsbGVkLCBwZXJoYXBzIHRocm91Z2ggYW4gaW50ZXJtZWRpYXJ5IGZ1bmN0aW9uIG9yIGEgbWFjcm8uIEkgZG9uJiMzOTt0IHdhbnQgdG8ganVtcCB0byB0aGUgd3JvbmcgY29uY2x1c2lvbnMuIEkgbmVlZCBhIGJyb2FkZXIgc2NvcGUgb2YgdGhlIHRlc3QgdG8gbWFrZSBteSBzdGF0ZW1lbnQgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTgyMD1zdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtODI2LVxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjgyNzpzdGF0aWMgaW5saW5lIGludCBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC04MjgtXHRcdFx0XHRcdFx0ICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCAqc3RhdGUpXG4tLVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jPTE0ND1zdGF0aWMgdm9pZCB0ZXN0X2RtYW1fcHJlc2VydmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtMTcwLVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jOjE3MTpcdHJldCA9IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihcdTAwMjZkZXYsIG5vbl9kbWFtX2FkZHIsIHNpemUsIG5vbl9kbWFtX2hhbmRsZSwgXHUwMDI2c3RhdGUpO1xua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTE3Mi1cdEtVTklUX0VYUEVDVF9FUV9NU0codGVzdCwgcmV0LCAtRUlOVkFMLCBcJiMzNDtQcmVzZXJ2aW5nIG5vbi1kZXZyZXMgYWxsb2NhdGlvbiBzaG91bGQgZmFpbFwmIzM0Oyk7XG4tLVxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTE4MC1cbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYzoxODE6XHRyZXQgPSBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBhZGRyLCBzaXplLCBoYW5kbGUsIFx1MDAyNnN0YXRlKTtcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy0xODItXHRLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHJldCwgMCwgXCYjMzQ7RmFpbGVkIHRvIHByZXNlcnZlIGRtYW0gYWxsb2NhdGlvblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNDQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRE1BIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbmV3IGZ1bmN0aW9ucywgYW5kIGl0IHNlZW1zIHRoZXkmIzM5O3JlIGV4Y2x1c2l2ZWx5IGNhbGxlZCB3aXRoaW4gdGhlIEtVbml0IHRlc3RzLiBUaGF0IHJhaXNlcyBhIHJlZCBmbGFnLiBTaW5jZSB0aGV5JiMzOTtyZSBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2Ug4oCTIG5vIHN5c3RlbSBjYWxscywgbm8gZHJpdmVyIGludGVncmF0aW9ucyB5ZXQg4oCTIHRoZXkmIzM5O3JlIGNvbXBsZXRlbHkgb2ZmIHRoZSByYWRhciBmb3Igc3l6a2FsbGVyLiBBbmQgd2FpdCwgc3l6a2FsbGVyICpkb2VzbiYjMzk7dCogZnV6eiBLVW5pdCB0ZXN0cyBkaXJlY3RseSBhbnl3YXksIGRvZXMgaXQ/IFNvIGV2ZW4gaWYgaXQgKmNvdWxkKiwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjbG9zZWQtb2ZmIEFQSSByaWdodCBub3cuCgpJIG5lZWQgdG8gYnJvYWRlbiBteSBzY29wZS4gQXJlIHRoZXJlIGFueSBvdGhlciBtb2RpZmllZCBmaWxlcz8gTGV0JiMzOTtzIHNlZS4uLiBhIHdob2xlIHNsZXcgb2YgdGhlbSEgYGluY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oYCwgYGluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaGAsIGBpbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhgLCBgaW5jbHVkZS9saW51eC9raG8vYWJpL2RtYV9hbGxvYy5oYCwgYW5kIHRoZW4gYSBidW5jaCBvZiBmaWxlcyB1bmRlciBga2VybmVsL2RtYS9gOiBgS2NvbmZpZ2AsIGBNYWtlZmlsZWAsIGBjb2hlcmVudC5jYCwgYGNvbnRpZ3VvdXMuY2AsIGBkaXJlY3QuY2AsIGBkaXJlY3RfdGVzdC5jYCwgYG1hcHBpbmcuY2AsIGFuZCBgcG9vbC5jYC4KClJpZ2h0LiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcXVpY2tseS4gSSBuZWVkIHRvIGtub3cgaWYgdGhlc2UgbmV3bHkgYWRkZWQgZnVuY3Rpb25zOiBgZG1hX2lzX2Zyb21fY21hYCwgYGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudGAsIGFuZCBgZG1hX2lzX2Zyb21fcG9vbGAsIGFyZSAqYWN0dWFsbHkqIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBUaGF04oCZcyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtYV9pc19mcm9tX2NtYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg9MTA4PXZvaWQgZG1hX2NvbnRpZ3VvdXNfZWFybHlfZml4dXAocGh5c19hZGRyX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTtcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaDoxMDk6Ym9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpO1xuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oLTExMC0jZWxzZSAvKiBDT05GSUdfRE1BX0NNQSAqL1xuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaD0xNDQ9c3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTQ5LVxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oOjE1MDpzdGF0aWMgaW5saW5lIGJvb2wgZG1hX2lzX2Zyb21fY21hKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oLTE1MS17XG4tLVxua2VybmVsL2RtYS9jb250aWd1b3VzLmM9MTQwPXN0YXRpYyBpbnQgZG1hX2NtYV9jaGVja19hcmVhKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy0xNDgtXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzoxNDk6Ym9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy0xNTAte1xuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTE1Ny19XG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzoxNTg6RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChkbWFfaXNfZnJvbV9jbWEpO1xua2VybmVsL2RtYS9jb250aWd1b3VzLmMtMTU5LVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9MzEzPWludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTMyMy1cdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xua2VybmVsL2RtYS9kaXJlY3QuYzozMjQ6XHRpZiAoZG1hX2lzX2Zyb21fY21hKGRtYV90b19waHlzKGRldiwgZG1hX2hhbmRsZSksIHNpemUpKVxua2VybmVsL2RtYS9kaXJlY3QuYy0zMjUtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmM9NTM9c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtODktXHRcdGt1bml0X2luZm8odGVzdCwgXCYjMzQ7RE1BIGFsbG9jYXRpb24gdXNpbmcgcG9vbCwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQXCYjMzQ7KTtcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYzo5MDpcdH0gZWxzZSBpZiAoZG1hX2lzX2Zyb21fY21hKGRtYV90b19waHlzKFx1MDAyNmRldiwgaGFuZGxlMSksIHNpemUpKSB7XG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtOTEtXHRcdGV4cGVjdGVkX3JldCA9IC1FT1BOT1RTVVBQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ2MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlPyBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQgc2VlbXMgcHJldHR5IGlzb2xhdGVkLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AgYW5kIGBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb25gLCBhcmUgb25seSB1dGlsaXplZCB3aXRoaW4gdGhlIG5ldyBmdW5jdGlvbnMgSSYjMzk7bSBleGFtaW5pbmcgYW5kLCBvZiBjb3Vyc2UsIHRoZSBLVW5pdCB0ZXN0cy4gVGhhdCYjMzk7cyB0aGUgaW1tZWRpYXRlIHNjb3BlLiBCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGFjdHVhbGx5IGNhbGxlZCAqYW55d2hlcmUqIGVsc2Ugd2l0aGluIHRoZSBrZXJuZWwgcHJvcGVyLiBObyBkcml2ZXJzLCBubyBjb3JlIGtlcm5lbCBjb2RlIOKAkyBub3RoaW5nIGlzIGRpcmVjdGx5IGNhbGxpbmcgZWl0aGVyIGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2Agb3IgYGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbmAuCgpTbywgdGhlIG9idmlvdXMgY29uY2x1c2lvbiBpcyB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UuIEJ1dCwgSSBuZWVkIHRvIGJlICpzdXJlKi4gV2FpdCwgY291bGQgdGhlcmUgYmUgYSBjYWxsIHNvbWV3aGVyZSBlbHNlPyBDb3VsZCB0aGlzIGJlIHJlbGF0ZWQgdG8gc29tZSBLZXhlYyBIYW5kT3ZlciBjb2RlPyBUaGlzIGZlZWxzIGZhbWlsaWFyIHNvbWVob3cuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhpcyBpcyBhIGhpZGRlbiBjYWxsIGluIGFub3RoZXIgcGFydCBvZiB0aGUga2VybmVsLiBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIG90aGVyIGluc3RhbmNlcyBvZiBgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnNgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD0yMTE9aW50IGRtYV9tbWFwX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtMjEzLSNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDoyMTQ6aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtMjE1LVx0XHRcdFx0ICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD01MTA9c3RhdGljIGlubGluZSBib29sIGRtYV9uZWVkX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNTE2LSNpZiAhZGVmaW5lZChDT05GSUdfRE1BX0xJVkVVUERBVEUpIHx8ICFkZWZpbmVkKENPTkZJR19IQVNfRE1BKVxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjUxNzpzdGF0aWMgaW5saW5lIGludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTUxOC1cdFx0XHRcdFx0XHRzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD02Nzc9c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNjc5LXtcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDo2ODA6XHRyZXR1cm4gZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC02ODEtXHRcdFx0XHRcdCAgICAgZG1hX2hhbmRsZSwgMCwgc3RhdGUpO1xuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jPTY0ND1FWFBPUlRfU1lNQk9MX0dQTChkbWFfZ2V0X3JlcXVpcmVkX21hc2spO1xuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY0Ni0jaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo2NDc6aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NDgtXHRcdFx0XHQgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjYyLX1cbmtlcm5lbC9kbWEvbWFwcGluZy5jOjY2MzpFWFBPUlRfU1lNQk9MKGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKTtcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY2NC1cbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYz02OTI9aW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcwNi1cbmtlcm5lbC9kbWEvbWFwcGluZy5jOjcwNzpcdHJldCA9IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsIGRtYV9oYW5kbGUsIGF0dHJzLCBzdGF0ZSk7XG5rZXJuZWwvZG1hL21hcHBpbmcuYy03MDgtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU3NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERNQSBMaXZldXBkYXRlIFByZXNlcnZhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGNsYWltcyB0byBicmluZyBpbiBhIG5ldyBBUEkgc3BlY2lmaWNhbGx5IGZvciBETUEgbGl2ZXVwZGF0ZSBwcmVzZXJ2YXRpb24sIHJpZ2h0PyBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLml0JiMzOTtzIG5vdCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmUgeWV0LCBieSBhbnkgZHJpdmVyIG9yIGNvcmUgc3lzdGVtLiBIbW0uIFNvLCBsb2dpY2FsbHksIHRoYXQgbWVhbnMgaXQmIzM5O3MgdG90YWxseSBpbmFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYXQgdGhpcyBzdGFnZS4gQW5kIGlmIGl0JiMzOTtzIG5vdCBleHBvc2VkLCB0aGF0IG1lYW5zIHdlIGNhbiYjMzk7dCBldmVuIHRyeSB0byBmdXp6IGl0LiBOb3QgdmVyeSBleGNpdGluZywgaG9uZXN0bHkuCgpXYWl0Li4uIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGNoYW5nZXMgY3JlZXBpbmcgaW50byBleGlzdGluZyBmdW5jdGlvbnM/IEl04oCZcyBhbHdheXMgdGhlIGhpZGRlbiBzdHVmZiB0aGF0IGdldHMgeW91LiBMZXQmIzM5O3Mgbm90IG1ha2UgYXNzdW1wdGlvbnMuIEJldHRlciB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYGRtYW1fcmVsZWFzZWAgaW4gYGtlcm5lbC9kbWEvbWFwcGluZy5jYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBhbnkgY29sbGF0ZXJhbCBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWFtX3JlbGVhc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDEzPXN0cnVjdCBmZWNfZG1hX2RldnJlcyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDE5OnN0YXRpYyB2b2lkIGZlY19kbWFtX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTQyNj1zdGF0aWMgdm9pZCAqZmVjX2RtYW1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTQzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjQzMjpcdGRyID0gZGV2cmVzX2FsbG9jKGZlY19kbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDMzLVx0aWYgKCFkcilcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYz0zNT1zdHJ1Y3QgZG1hX2RldnJlcyB7XG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNDQtXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo0NTpzdGF0aWMgdm9pZCBkbWFtX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpXG5rZXJuZWwvZG1hL21hcHBpbmcuYy00Ni17XG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmM9ODQ9dm9pZCBkbWFtX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsXG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtODgtXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo4OTpcdFdBUk5fT04oZGV2cmVzX2Rlc3Ryb3koZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFx1MDAyNm1hdGNoX2RhdGEpKTtcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTkwLVx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7XG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmM9MTA4PXZvaWQgKmRtYW1fYWxsb2NfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSxcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYy0xMTMtXG5rZXJuZWwvZG1hL21hcHBpbmcuYzoxMTQ6XHRkciA9IGRldnJlc19hbGxvYyhkbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xua2VybmVsL2RtYS9tYXBwaW5nLmMtMTE1LVx0aWYgKCFkcilcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYz02OTI9aW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY5OS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jOjcwMDpcdGRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFx1MDAyNm1hdGNoX2RhdGEpO1xua2VybmVsL2RtYS9tYXBwaW5nLmMtNzAxLVx0aWYgKCFkcilcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYz03MTY9dm9pZCBkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcyMS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jOjcyMjpcdGRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFx1MDAyNm1hdGNoX2RhdGEpO1xua2VybmVsL2RtYS9tYXBwaW5nLmMtNzIzLVx0aWYgKCFkcilcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYz03MzQ9dm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYy03NDAtXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo3NDE6XHRkciA9IGRldnJlc19hbGxvYyhkbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xua2VybmVsL2RtYS9tYXBwaW5nLmMtNzQyLVx0aWYgKCFkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3ODgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBETUEgUmVsZWFzZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZG1hbV9yZWxlYXNlYCBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyByZWxhdGVkIHRvIERNQSBsaXZlIHVwZGF0ZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgY2hlY2s6CgpgYGBjCiNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEUKCS8qCgkgKiBGcmVlaW5nIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5IGlzIGRhbmdlcm91cyBhcyBpdCBjYW4gY2F1c2UgVUFGIGluIHRoZQoJICogY3VycmVudCBvciBuZXh0IGtlcm5lbCBpZiB0aGUgbWVtb3J5IGlzIHN0aWxsIGJlaW5nIHVzZWQgYnkgdGhlCgkgKiBkZXZpY2UuCgkgKi8KCWlmIChXQVJOX09OKHRoaXMtJmd0O2lzX3ByZXNlcnZlZCkpCgkJcmV0dXJuOwojZW5kaWYKYGBgCgpOb3csIHRoZSBpc3N1ZSBJJiMzOTttIHNlZWluZyBpcyB0aGF0IGB0aGlzLSZndDtpc19wcmVzZXJ2ZWRgIHNlZW1zIHRvICpvbmx5KiBiZSBzZXQgaW4gYGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AsIGFuZCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgKnRoYXQqIGZ1bmN0aW9uIGlzIG5ldmVyIGFjdHVhbGx5IGNhbGxlZCEgVGhlIGFsbG9jYXRpb24gaXMgemVyby1pbml0aWFsaXplZCBieSBgZGV2cmVzX2FsbG9jYCwgc28gdGhlIGZsYWcgd2lsbCBhbHdheXMgYmUgZmFsc2Ugb3IgemVyby4gVGhpcyBtZWFucyB0aGlzIGNoZWNrIHdpbGwgbmV2ZXIgYWN0dWFsbHkgdHJpZ2dlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgZnVuY3Rpb25hbGx5IGRlYWQgaW4gYW55IHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC4gSXQmIzM5O3MgYSBuby1vcCwgYXQgbGVhc3QgZm9yIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLgoKVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9ucyBhbmQgYSBLVW5pdCB0ZXN0LiBIb3dldmVyLCBzaW5jZSB0aGUgbmV3IEFQSSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgdXNlZCAqYW55d2hlcmUqIGluIHRoZSBleGlzdGluZyBjb2RlLCBpdCYjMzk7cyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiBUaGVyZSBhcmUgbm8gY2FsbGVycy4gVGh1cywgZnV6emluZyB0aG9zZSBuZXcgZnVuY3Rpb25zIHdvdWxkbiYjMzk7dCBiZSB2YWx1YWJsZSBzaW5jZSB0aGV5IGFyZW4mIzM5O3QgcGFydCBvZiBhbnkgZXhlY3V0aW9uIHBhdGguCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgYGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudGAgaXMgdXRpbGl6ZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBUaGF0IHNob3VsZCBiZSBhIHF1aWNrIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oPTE2Mz1pbnQgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaC0xNjQtXHRcdHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50ICpyZXQpO1xuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oOjE2NTpib29sIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyKTtcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaC0xNjYtI2Vsc2VcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaD0xNjc9c3RhdGljIGlubGluZSBpbnQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTc1LSNkZWZpbmUgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCB2bWEsIHZhZGRyLCBvcmRlciwgcmV0KSAoMClcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaDoxNzY6I2RlZmluZSBkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCB2YWRkcikgKGZhbHNlKVxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oLTE3Ny1cbi0tXG5rZXJuZWwvZG1hL2NvaGVyZW50LmM9MjI3PWludCBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvcmRlciwgdm9pZCAqdmFkZHIpXG4tLVxua2VybmVsL2RtYS9jb2hlcmVudC5jLTIzMy1cbmtlcm5lbC9kbWEvY29oZXJlbnQuYzoyMzQ6Ym9vbCBkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkcilcbmtlcm5lbC9kbWEvY29oZXJlbnQuYy0yMzUte1xuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jPTY0Nz1pbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbi0tXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NTItXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo2NTM6XHRpZiAoZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgY3B1X2FkZHIpKVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjU0LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTA1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERNQSBBbGxvY2F0aW9uIEF0dHJpYnV0ZXMqKgoKUmlnaHQsIGl0JiMzOTtzIGNsZWFyIHRoZSBjb3JlIGZvY3VzIGhlcmUgaXMgc29sZWx5IHdpdGhpbiBgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgdGhlIGV4Y2x1c2l2ZSBsb2NhdGlvbi4KCkJlZm9yZSBJIGNvbW1pdCB0byB0aGF0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSB2ZXJpZnkgdGhhdCBgZG1hX2lzX2Zyb21fcG9vbGAgaXNuJiMzOTt0IHVzZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgb3RoZXIgcG90ZW50aWFsIGNhbGxzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGJlIGltcGFjdGVkIGJ5IHRoaXMuIEEgdGhvcm91Z2ggZ3JlcCBvciBjb2RlIGluc3BlY3Rpb24gaXMgaW4gb3JkZXIuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBkbWFfaXNfZnJvbV9wb29sYCBpcyBvbmx5IHJlZmVyZW5jZWQgd2l0aGluIHRoYXQgb25lIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtYV9pc19mcm9tX3Bvb2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oPTIyNj1ib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMjI3LVxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oOjIyODpib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaC0yMjktaW50IGRtYV9kaXJlY3Rfc2V0X29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IGNwdV9zdGFydCxcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTMxMz1pbnQgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy0zNDItXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX0NPSEVSRU5UX1BPT0wpIFx1MDAyNlx1MDAyNlxua2VybmVsL2RtYS9kaXJlY3QuYzozNDM6XHQgICAgZG1hX2lzX2Zyb21fcG9vbChjcHVfYWRkciwgc2l6ZSkpXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM0NC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYz01Mz1zdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24oc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy04Ni1cbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYzo4NzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgXHUwMDI2XHUwMDI2IGRtYV9pc19mcm9tX3Bvb2woYWRkcjEsIHNpemUpKSB7XG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtODgtXHRcdGV4cGVjdGVkX3JldCA9IC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9kbWEvcG9vbC5jPTMwMD1ib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSlcbi0tXG5rZXJuZWwvZG1hL3Bvb2wuYy0zMTMtXG5rZXJuZWwvZG1hL3Bvb2wuYzozMTQ6Ym9vbCBkbWFfaXNfZnJvbV9wb29sKHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9kbWEvcG9vbC5jLTMxNS17XG4tLVxua2VybmVsL2RtYS9wb29sLmMtMzI1LX1cbmtlcm5lbC9kbWEvcG9vbC5jOjMyNjpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGRtYV9pc19mcm9tX3Bvb2wpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY3MwoJCQkJCQkJb3V0cHV0OiAxMTUKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgYWZ0ZXIgcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIGBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb25gIGZ1bmN0aW9uIGFuZCB0aGUgYXNzb2NpYXRlZCBLVW5pdCB0ZXN0LiBUaGlzIG1lYW5zIHRoZSBwcmltYXJ5IGltcGFjdCBpcyB0aGUgYWRkaXRpb24gb2YgYW4gQVBJIHRoYXQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsIGZyb20gdGhlIGNvbnRleHQsIGlzbiYjMzk7dCBhY3R1YWxseSAqdXNlZCogYXQgdGhpcyBzdGFnZSwgYWxvbmcgd2l0aCBhIHRlc3QgZm9yIHRoYXQgdW51c2VkIEFQSS4KCkdpdmVuIHRoZSBsaW1pdGVkIHNjb3BlIGFuZCB0aGUgbGFjayBvZiBhbnkgYWN0dWFsIHJ1bnRpbWUgdXNhZ2Ugb2YgdGhlIGFkZGVkIGZ1bmN0aW9uLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBmdXp6aW5nIHRoaXMgcGF0Y2ggd291bGQgYmUgYSB3YXN0ZSBvZiByZXNvdXJjZXMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHRlc3RpbmcgYW4gdW51c2VkIGZ1bmN0aW9uIGluIGlzb2xhdGlvbiwgYW5kIGFueSBmYWlsdXJlcyBoZXJlIHdvdWxkbiYjMzk7dCBuZWNlc3NhcmlseSByZXZlYWwgbWVhbmluZ2Z1bCB2dWxuZXJhYmlsaXRpZXMgb3IgaW50ZWdyYXRpb24gaXNzdWVzIGluIHRoZSB3aWRlciBzeXN0ZW0uCgpUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzICpub3QqIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgdGhlIGBXb3J0aEZ1enppbmdgIHByb3BlcnR5IGFzIGBmYWxzZWAsIGFuZCBkb2N1bWVudCB0aGlzIHJlYXNvbmluZyBleHBsaWNpdGx5LCBiZWNhdXNlIGV2ZW4gdGhvdWdoIEtVbml0IHRlc3RzIGFyZSBpbXBvcnRhbnQsIHRoZXkgZG9uJiMzOTt0IGFsd2F5cyBpbmRpY2F0ZSBpZiBzb21ldGhpbmcgbmVlZHMgdG8gYmUgZnV6emVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uIChlLmcuLCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycywgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKSBhbmQgYSBLVW5pdCB0ZXN0IGZvciBpdC4gSG93ZXZlciwgdGhlIG5ldyBBUEkgaXMgbm90IGN1cnJlbnRseSBjYWxsZWQgYnkgYW55IGRyaXZlciBvciBjb3JlIGtlcm5lbCBjb2RlIG91dHNpZGUgb2YgdGhlIEtVbml0IHRlc3QgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBUEkgZm9yIERNQSBkaXJlY3QgbGl2ZXVwZGF0ZSBwcmVzZXJ2YXRpb24gKGUuZy4sIGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzLCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24pIGFuZCBhIEtVbml0IHRlc3QgZm9yIGl0LiBIb3dldmVyLCB0aGUgbmV3IEFQSSBpcyBub3QgY3VycmVudGx5IGNhbGxlZCBieSBhbnkgZHJpdmVyIG9yIGNvcmUga2VybmVsIGNvZGUgb3V0c2lkZSBvZiB0aGUgS1VuaXQgdGVzdCBpdHNlbGYuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6MTU6MDguOTMxNDc3MjE0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3MDg5NzExMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uIChlLmcuLCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycywgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKSBhbmQgYSBLVW5pdCB0ZXN0IGZvciBpdC4gSG93ZXZlciwgdGhlIG5ldyBBUEkgaXMgbm90IGN1cnJlbnRseSBjYWxsZWQgYnkgYW55IGRyaXZlciBvciBjb3JlIGtlcm5lbCBjb2RlIG91dHNpZGUgb2YgdGhlIEtVbml0IHRlc3QgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6MTU6MDguOTMxNDg4MzI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3NjY4OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2YxY2ExOTc2ODBmNmU3ZWJiZjI0NGY3MjgyY2QzYjA0NjQ1YWM1N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCA5IDE3OjE1OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oIGIvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmhcXG5pbmRleCBjMjQ5OTEyNDU2Zjk2My4uMGVmZTJiYzFhODE1MjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1kaXJlY3QuaFxcbkBAIC0xNDEsNiArMTQxLDM1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkbWFfY2FwYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUsXFxuIHU2NCBkbWFfZGlyZWN0X2dldF9yZXF1aXJlZF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSxcXG4gXFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIGF0dHJzKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcXG4raW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKTtcXG4rdm9pZCBkbWFfZGlyZWN0X3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSk7XFxuK3ZvaWQgKmRtYV9kaXJlY3RfcmVzdG9yZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gdm9pZCBkbWFfZGlyZWN0X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsXFxuIFxcdFxcdGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGxvbmcgYXR0cnMpO1xcbiBzdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcXG5pbmRleCA2YTE4MzJhNzNjYWQ4ZC4uYjEzZTVlZWJlNmQzYWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXFxuQEAgLTEwNiw2ICsxMDYsNyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKTtcXG4gdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKTtcXG4gXFxuIHZvaWQgZG1hX2NvbnRpZ3VvdXNfZWFybHlfZml4dXAocGh5c19hZGRyX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG4rYm9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpO1xcbiAjZWxzZSAvKiBDT05GSUdfRE1BX0NNQSAqL1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbWEgKmRldl9nZXRfY21hX2FyZWEoc3RydWN0IGRldmljZSAqZGV2KVxcbiB7XFxuQEAgLTE0NSw2ICsxNDYsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4ge1xcbiBcXHRfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTtcXG4gfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4gI2VuZGlmIC8qIENPTkZJR19ETUFfQ01BKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfRE1BX0RFQ0xBUkVfQ09IRVJFTlRcXG5AQCAtMTU2LDYgKzE2Miw3IEBAIGludCBkbWFfYWxsb2NfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzc2l6ZV90IHNpemUsXFxuIGludCBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvcmRlciwgdm9pZCAqdmFkZHIpO1xcbiBpbnQgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0dm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLCBpbnQgKnJldCk7XFxuK2Jvb2wgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKVxcbkBAIC0xNjYsNiArMTczLDggQEAgc3RhdGljIGlubGluZSBpbnQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gI2RlZmluZSBkbWFfYWxsb2NfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIHJldCkgKDApXFxuICNkZWZpbmUgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBvcmRlciwgdmFkZHIpICgwKVxcbiAjZGVmaW5lIGRtYV9tbWFwX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgdm1hLCB2YWRkciwgb3JkZXIsIHJldCkgKDApXFxuKyNkZWZpbmUgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgdmFkZHIpIChmYWxzZSlcXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfcmVsZWFzZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2KSB7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19ETUFfREVDTEFSRV9DT0hFUkVOVCAqL1xcbiBcXG5AQCAtMjE2LDYgKzIyNSw3IEBAIHN0cnVjdCBwYWdlICpkbWFfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdGJvb2wgKCpwaHlzX2FkZHJfb2spKHN0cnVjdCBkZXZpY2UgKiwgcGh5c19hZGRyX3QsIHNpemVfdCkpO1xcbiBib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSk7XFxuIFxcbitib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKTtcXG4gaW50IGRtYV9kaXJlY3Rfc2V0X29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IGNwdV9zdGFydCxcXG4gXFx0XFx0ZG1hX2FkZHJfdCBkbWFfc3RhcnQsIHU2NCBzaXplKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaFxcbmluZGV4IGRiOGFiMjRhNTRmNGEzLi40YzBjNDI4YjZiMWNiNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhcXG5AQCAtMjEwLDYgKzIxMCwyMyBAQCB2b2lkICpkbWFfdm1hcF9ub25jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIHZvaWQgZG1hX3Z1bm1hcF9ub25jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpO1xcbiBpbnQgZG1hX21tYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRzaXplX3Qgc2l6ZSwgc3RydWN0IHNnX3RhYmxlICpzZ3QpO1xcbisjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXFxuK2ludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSk7XFxuK3ZvaWQgZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSk7XFxuK3ZvaWQgKmRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpO1xcbitpbnQgZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuK1xcdFxcdFxcdFxcdCAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xcbit2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuK1xcdFxcdFxcdFxcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCBzdGF0ZSk7XFxuK3ZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpO1xcbisjZW5kaWZcXG4gI2Vsc2UgLyogQ09ORklHX0hBU19ETUEgKi9cXG4gc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcXG5AQCAtNDk2LDYgKzUxMyw0NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1hX25lZWRfdW5tYXAoc3RydWN0IGRldmljZSAqZGV2KVxcbiB9XFxuICNlbmRpZiAvKiAhQ09ORklHX0hBU19ETUEgfHwgIUNPTkZJR19ETUFfTkVFRF9TWU5DICovXFxuIFxcbisjaWYgIWRlZmluZWQoQ09ORklHX0RNQV9MSVZFVVBEQVRFKSB8fCAhZGVmaW5lZChDT05GSUdfSEFTX0RNQSlcXG4rc3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSlcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCBzdGF0ZSlcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcXG4re1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHN0cnVjdCBwYWdlICpkbWFfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4gXFx0XFx0ZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBnZnBfdCBnZnApO1xcbiB2b2lkIGRtYV9mcmVlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHN0cnVjdCBwYWdlICpwYWdlLFxcbkBAIC02MTgsNiArNjc0LDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdFxcdChnZnAgXFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDApO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBkbWFfcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRtYV9oYW5kbGUsIDAsIHN0YXRlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXFxuK3tcXG4rXFx0ZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkICpkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwLCB1NjQgc3RhdGUpXFxuK3tcXG4rXFx0cmV0dXJuIGRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAoZ2ZwIFxcdTAwMjYgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RhdGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4gXFx0XFx0dm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSlcXG4ge1xcbkBAIC03NDcsNiArODI0LDI5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hbV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbiBcXHRcXHRcXHQoZ2ZwIFxcdTAwMjYgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZG1hX2hhbmRsZSwgMCwgc3RhdGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZG1hbV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB1NjQgc3RhdGUpXFxuK3tcXG4rXFx0ZG1hbV91bnByZXNlcnZlX2FsbG9jYXRpb24oZGV2LCBjcHVfYWRkciwgc2l6ZSwgZG1hX2hhbmRsZSwgc3RhdGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBnZnBfdCBnZnAsIHU2NCBzdGF0ZSlcXG4re1xcbitcXHRyZXR1cm4gZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgKGdmcCBcXHUwMDI2IF9fR0ZQX05PV0FSTikgPyBETUFfQVRUUl9OT19XQVJOIDogMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdGF0ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX3djKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdFxcdFxcdCBkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3QgZ2ZwKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFlMzhjZjFhMWZjOTllXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFxcbkBAIC0wLDAgKzEsMzIgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfTElOVVhfS0hPX0FCSV9ETUFfQUxMT0NfSFxcbisjZGVmaW5lIF9MSU5VWF9LSE9fQUJJX0RNQV9BTExPQ19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKy8qKlxcbisgKiBET0M6IERNQSBBbGxvYyBBQklcXG4rICpcXG4rICogVGhpcyBoZWFkZXIgZGVmaW5lcyB0aGUgc3RydWN0dXJlcyB1c2VkIHRvIHNlcmlhbGl6ZSB0aGUgc3RhdGUgb2YgRE1BXFxuKyAqIGFsbG9jYXRpb25zLCBkb25lIGJ5IGRldmljZSBkcml2ZXIsIGFjcm9zcyBhIExpdmUgVXBkYXRlLlxcbisgKlxcbisgKiBPbmx5IERNQSBhbGxvY2F0aW9ucyBkb25lIHRocm91Z2ggZG1hLWRpcmVjdCB0aGF0IGFyZSBjb250aWd1b3VzIGFuZFxcbisgKiBhbGxvY2F0ZWQgdXNpbmcgYWxsb2NfcGFnZSBhcmUgc3VwcG9ydGVkLlxcbisgKi9cXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgZG1hX2FsbG9jX3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgb2YgYSBzaW5nbGUgRE1BIGFsbG9jYXRpb25cXG4rICogQHBhZ2VfcGh5czogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcHJlc2VydmVkIHBhZ2VzXFxuKyAqIEBzaXplOiBTaXplIG9mIHRoZSBETUEgYWxsb2NhdGlvblxcbisgKiBAYXR0cnM6IERNQSBhbGxvY2F0aW9uIGF0dHJpYnV0ZXNcXG4rICogQGZvcmNlX2RlY3J5cHRlZDogV2hldGhlciB0aGUgbWVtb3J5IGlzIGZvcmNlIGRlY3J5cHRlZCBpbiBwcmV2aW91cyBrZXJuZWxcXG4rICovXFxuK3N0cnVjdCBkbWFfYWxsb2Nfc2VyIHtcXG4rXFx0dTY0IHBhZ2VfcGh5cztcXG4rXFx0dTY0IHNpemU7XFxuK1xcdHU2NCBhdHRycztcXG4rXFx0dTggZm9yY2VfZGVjcnlwdGVkO1xcbitcXHR1OCBwYWRkaW5nWzddO1xcbit9IF9fcGFja2VkO1xcbitcXG4rI2VuZGlmIC8qIF9MSU5VWF9LSE9fQUJJX0RNQV9BTExPQ19IICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvS2NvbmZpZyBiL2tlcm5lbC9kbWEvS2NvbmZpZ1xcbmluZGV4IGJmZWYyMWI0YTlhZTdkLi40OGJjNzRhZjU1MWEzMSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZG1hL0tjb25maWdcXG4rKysgYi9rZXJuZWwvZG1hL0tjb25maWdcXG5AQCAtMjY1LDMgKzI2NSwxNSBAQCBjb25maWcgRE1BX01BUF9CRU5DSE1BUktcXG4gXFx0ICBwZXJmb3JtYW5jZSBvZiBkbWFfKHVuKW1hcF9wYWdlLlxcbiBcXG4gXFx0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZG1hL2RtYV9tYXBfYmVuY2htYXJrLmNcXG4rXFxuK2NvbmZpZyBETUFfTElWRVVQREFURVxcbitcXHRib29sIFxcXCJFbmFibGUgcHJlc2VydmF0aW9uIG9mIERNQSBkaXJlY3QgYWxsb2NhdGlvbnNcXFwiXFxuK1xcdGRlcGVuZHMgb24gTElWRVVQREFURVxcbitcXG4rY29uZmlnIERNQV9MSVZFVVBEQVRFX0tVTklUX1RFU1RcXG4rXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3QgZm9yIERNQSBkaXJlY3QgbGl2ZXVwZGF0ZSBwcmVzZXJ2YXRpb25cXFwiXFxuK1xcdGRlcGVuZHMgb24gS1VOSVRcXG4rXFx0ZGVwZW5kcyBvbiBETUFfTElWRVVQREFURVxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBidWlsZHMgdGhlIEtVbml0IHRlc3RzIGZvciB0aGUgRE1BIGRpcmVjdCBsaXZldXBkYXRlXFxuK1xcdCAgcHJlc2VydmF0aW9uIGFuZCByZXN0b3JhdGlvbiBsb2dpYy5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9NYWtlZmlsZSBiL2tlcm5lbC9kbWEvTWFrZWZpbGVcXG5pbmRleCA2OTc3MDMzNDQ0YTM3NS4uMDM3MDM1NDJlZTc5YmMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2RtYS9NYWtlZmlsZVxcbisrKyBiL2tlcm5lbC9kbWEvTWFrZWZpbGVcXG5AQCAtMTAsMyArMTAsNCBAQCBvYmotJChDT05GSUdfU1dJT1RMQilcXHRcXHRcXHQrPSBzd2lvdGxiLm9cXG4gb2JqLSQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKVxcdFxcdCs9IHBvb2wub1xcbiBvYmotJChDT05GSUdfTU1VKVxcdFxcdFxcdCs9IHJlbWFwLm9cXG4gb2JqLSQoQ09ORklHX0RNQV9NQVBfQkVOQ0hNQVJLKVxcdFxcdCs9IG1hcF9iZW5jaG1hcmsub1xcbitvYmotJChDT05GSUdfRE1BX0xJVkVVUERBVEVfS1VOSVRfVEVTVClcXHQrPSBkaXJlY3RfdGVzdC5vXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29oZXJlbnQuYyBiL2tlcm5lbC9kbWEvY29oZXJlbnQuY1xcbmluZGV4IGJjZGMwZjc2ZDJlODBhLi43NmNiZTExZTFmOTBlNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZG1hL2NvaGVyZW50LmNcXG4rKysgYi9rZXJuZWwvZG1hL2NvaGVyZW50LmNcXG5AQCAtMjMxLDYgKzIzMSwxNyBAQCBpbnQgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb3JkZXIsIHZvaWQgKnZhZGRyKVxcbiBcXHRyZXR1cm4gX19kbWFfcmVsZWFzZV9mcm9tX2NvaGVyZW50KG1lbSwgb3JkZXIsIHZhZGRyKTtcXG4gfVxcbiBcXG4rYm9vbCBkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2X2dldF9jb2hlcmVudF9tZW1vcnkoZGV2KTtcXG4rXFxuK1xcdGlmIChtZW0gXFx1MDAyNlxcdTAwMjYgdmFkZHIgXFx1MDAzZT0gbWVtLVxcdTAwM2V2aXJ0X2Jhc2UgXFx1MDAyNlxcdTAwMjYgdmFkZHIgXFx1MDAzY1xcbitcXHRcXHQgICAobWVtLVxcdTAwM2V2aXJ0X2Jhc2UgKyAoKGRtYV9hZGRyX3QpbWVtLVxcdTAwM2VzaXplIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19kbWFfbW1hcF9mcm9tX2NvaGVyZW50KHN0cnVjdCBkbWFfY29oZXJlbnRfbWVtICptZW0sXFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsIGludCAqcmV0KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jIGIva2VybmVsL2RtYS9jb250aWd1b3VzLmNcXG5pbmRleCAwM2Y1MmJkMTcxMjA2Mi4uNmQwY2Y5Yzc1MjhjYjUgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmNcXG4rKysgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xcbkBAIC0zNyw2ICszNyw4IEBAXFxuIFxcbiAjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJjbWE6IFxcXCIgZm10XFxuIFxcbisjaW5jbHVkZSBcXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2VcXG5AQCAtMTMwLDYgKzEzMiwzMSBAQCBzdHJ1Y3QgY21hICpkZXZfZ2V0X2NtYV9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZ2V0X2NtYV9hcmVhKTtcXG4gXFxuK3N0cnVjdCBkbWFfY21hX2NoZWNrX2RhdGEge1xcbitcXHRwaHlzX2FkZHJfdCBzdGFydDtcXG4rXFx0cGh5c19hZGRyX3QgZW5kO1xcbit9O1xcbitcXG4rc3RhdGljIGludCBkbWFfY21hX2NoZWNrX2FyZWEoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfY21hX2NoZWNrX2RhdGEgKmNoayA9IGRhdGE7XFxuK1xcbitcXHRpZiAoY21hX2ludGVyc2VjdHMoY21hLCBjaGstXFx1MDAzZXN0YXJ0LCBjaGstXFx1MDAzZWVuZCkpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rYm9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9jbWFfY2hlY2tfZGF0YSBjaGsgPSB7XFxuK1xcdFxcdC5zdGFydCA9IHBoeXMsXFxuK1xcdFxcdC5lbmQgPSBwaHlzICsgc2l6ZSAtIDEsXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gY21hX2Zvcl9lYWNoX2FyZWEoZG1hX2NtYV9jaGVja19hcmVhLCBcXHUwMDI2Y2hrKSAhPSAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoZG1hX2lzX2Zyb21fY21hKTtcXG4rXFxuICNpZmRlZiBDT05GSUdfRE1BX05VTUFfQ01BXFxuIFxcbiBzdGF0aWMgc3RydWN0IGNtYSAqZG1hX2NvbnRpZ3VvdXNfbnVtYV9hcmVhW01BWF9OVU1OT0RFU107XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvZGlyZWN0LmMgYi9rZXJuZWwvZG1hL2RpcmVjdC5jXFxuaW5kZXggZWM4ODdmNDQzNzQxODMuLjExN2ViYWU4YTgxZmExIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9kbWEvZGlyZWN0LmNcXG4rKysgYi9rZXJuZWwvZG1hL2RpcmVjdC5jXFxuQEAgLTYsNiArNiw4IEBAXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2UgLyogZm9yIG1heF9wZm4gKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLW1hcC1vcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcXHUwMDNlXFxuQEAgLTMwNyw2ICszMDksMTkzIEBAIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcXG4raW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYWxsb2Nfc2VyICpzZXI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWtob19pc19lbmFibGVkKCkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xcbitcXHRpZiAoZG1hX2lzX2Zyb21fY21hKGRtYV90b19waHlzKGRldiwgZG1hX2hhbmRsZSksIHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRpZiAoaXNfc3dpb3RsYl9mb3JfYWxsb2MoZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKChhdHRycyBcXHUwMDI2IERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfRE1BX0FMTE9DKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWRldl9pc19kbWFfY29oZXJlbnQoZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9HTE9CQUxfUE9PTCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGRtYV9pc19mcm9tX3Bvb2woY3B1X2FkZHIsIHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRzZXIgPSBraG9fYWxsb2NfcHJlc2VydmUoc2l6ZW9mKCpzZXIpKTtcXG4rXFx0aWYgKElTX0VSUihzZXIpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihzZXIpO1xcbitcXG4rXFx0c2VyLVxcdTAwM2VwYWdlX3BoeXMgPSBkbWFfdG9fcGh5cyhkZXYsIGRtYV9oYW5kbGUpO1xcbitcXHRzZXItXFx1MDAzZWZvcmNlX2RlY3J5cHRlZCA9IGZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpO1xcbitcXHRzZXItXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXHRzZXItXFx1MDAzZWF0dHJzID0gKGF0dHJzIFxcdTAwMjYgfkRNQV9BVFRSX05PX1dBUk4pO1xcbitcXG4rXFx0cmV0ID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHBoeXNfdG9fcGFnZShzZXItXFx1MDAzZXBhZ2VfcGh5cyksXFxuK1xcdFxcdFxcdFxcdCAxIFxcdTAwM2NcXHUwMDNjIGdldF9vcmRlcihzaXplKSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0a2hvX3VucHJlc2VydmVfZnJlZShzZXIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQqc3RhdGUgPSB2aXJ0X3RvX3BoeXMoc2VyKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9hbGxvY19zZXIgKnNlcjtcXG4rXFxuK1xcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2VyID0gcGh5c190b192aXJ0KHN0YXRlKTtcXG4rXFx0a2hvX3VucHJlc2VydmVfcGFnZXMocGh5c190b19wYWdlKHNlci1cXHUwMDNlcGFnZV9waHlzKSxcXG4rXFx0XFx0XFx0ICAgICAxIFxcdTAwM2NcXHUwMDNjIGdldF9vcmRlcihzZXItXFx1MDAzZXNpemUpKTtcXG4rXFx0a2hvX3VucHJlc2VydmVfZnJlZShzZXIpO1xcbit9XFxuK1xcbit2b2lkICpkbWFfZGlyZWN0X3Jlc3RvcmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxcbit7XFxuK1xcdGJvb2wgcmVtYXAgPSBmYWxzZSwgc2V0X3VuY2FjaGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCBkbWFfYWxsb2Nfc2VyICpzZXIgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0dm9pZCAqY3B1X2FkZHIgPSBOVUxMO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRzZXIgPSBwaHlzX3RvX3ZpcnQoc3RhdGUpO1xcbitcXHRwYWdlID0gcGh5c190b19wYWdlKHNlci1cXHUwMDNlcGFnZV9waHlzKTtcXG4rXFxuK1xcdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xcbitcXHRpZiAoc2l6ZSAhPSBzZXItXFx1MDAzZXNpemUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0V0FSTl9PTl9PTkNFKChhdHRycyBcXHUwMDI2IH5ETUFfQVRUUl9OT19XQVJOKSAhPSBzZXItXFx1MDAzZWF0dHJzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhbm5vdCBmcmVlIHRoZSByZXN0b3JlZCBwYWdlcyBvbiBlcnJvciBoZXJlIGFzIHRoZXNlIG1pZ2h0IGJlIGluIHVzZVxcbitcXHQgKiBieSBhIGRldmljZSB3aXRoIGRpcmVjdCBhbGxvY2F0aW9uIGluIHRoZSBwcmV2aW91cyBrZXJuZWwuXFxuK1xcdCAqL1xcbitcXHRpZiAoaXNfc3dpb3RsYl9mb3JfYWxsb2MoZGV2KSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAoKGF0dHJzIFxcdTAwMjYgRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCFkZXZfaXNfZG1hX2NvaGVyZW50KGRldikpIHtcXG4rXFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX0RNQV9BTExPQykpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9HTE9CQUxfUE9PTCkpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0XFx0c2V0X3VuY2FjaGVkID0gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfRE1BX1NFVF9VTkNBQ0hFRCk7XFxuK1xcdFxcdHJlbWFwID0gSVNfRU5BQkxFRChDT05GSUdfRE1BX0RJUkVDVF9SRU1BUCk7XFxuK1xcdFxcdGlmICghc2V0X3VuY2FjaGVkIFxcdTAwMjZcXHUwMDI2ICFyZW1hcClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChQYWdlSGlnaE1lbShwYWdlKSkge1xcbitcXHRcXHRyZW1hcCA9IHRydWU7XFxuK1xcdFxcdHNldF91bmNhY2hlZCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZW1hcHBpbmcgd2lsbCBiZSBibG9ja2luZyBzbyByZXR1cm4gZXJyb3IuIFRoZSBwcmVzZXJ2ZWQgbWVtb3J5XFxuK1xcdCAqIG1pZ2h0IGJlIGFscmVhZHkgZGVjcnlwdGVkIGluIHRoZSBwcmV2aW91cyBrZXJuZWwsIGJ1dCB0aGUgZGVjcnlwdGlvblxcbitcXHQgKiBjYWxsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIG5vbi1ibG9ja2luZyBzbyByZXR1cm4gZXJyb3IgYWx3YXlzIGlmXFxuK1xcdCAqIGRlY3J5cHRpb24gaXMgcmVxdWlyZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoKHJlbWFwIHx8IGZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgZG1hX2RpcmVjdF91c2VfcG9vbChkZXYsIGdmcCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRW5jcnlwdGlvbiBzY2hlbWUgY2hhbmdlZCBiZXR3ZWVuIHR3byBrZXJuZWxzIGFuZCB0aGlzIG1pZ2h0IGNhdXNlXFxuK1xcdCAqIGlzc3VlcyBpZiBkZXZpY2UvZHJpdmVyIGlzIG5vdCBoYW5kbGluZyBpdCBwcm9wZXJseS5cXG4rXFx0ICovXFxuK1xcdFdBUk5fT05fT05DRShzZXItXFx1MDAzZWZvcmNlX2RlY3J5cHRlZCAhPSBmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBhcmNoX2RtYV9wcmVwX2NvaGVyZW50KCkgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGFueSBjYWNoZSBsaW5lcyBmcm9tXFxuK1xcdCAqIHRoZSBwcmV2aW91cyBrZXJuZWwsIGlmIHRoZSBkZXZpY2Ugd2FzIGNvaGVyZW50IHByZXZpb3VzbHkgb3IgY2FjaGVkXFxuK1xcdCAqIG1hcHBpbmcgaW4gdGhpcyBrZXJuZWwgZHVyaW5nIGluaXQgYXJlIG5vdCBwcm9ibGVtYXRpYyBmb3JcXG4rXFx0ICogbm9uLWNvaGVyZW50IGFsbG9jYXRpb25zLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJlbWFwKSB7XFxuK1xcdFxcdHBncHJvdF90IHByb3QgPSBkbWFfcGdwcm90KGRldiwgUEFHRV9LRVJORUwsIGF0dHJzKTtcXG4rXFxuK1xcdFxcdGlmIChmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSlcXG4rXFx0XFx0XFx0cHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQocHJvdCk7XFxuK1xcbitcXHRcXHRhcmNoX2RtYV9wcmVwX2NvaGVyZW50KHBhZ2UsIHNpemUpO1xcbitcXG4rXFx0XFx0Y3B1X2FkZHIgPSBkbWFfY29tbW9uX2NvbnRpZ3VvdXNfcmVtYXAocGFnZSwgc2l6ZSwgcHJvdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuK1xcdFxcdGlmICghY3B1X2FkZHIpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRjcHVfYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTtcXG4rXFx0XFx0aWYgKGRtYV9zZXRfZGVjcnlwdGVkKGRldiwgY3B1X2FkZHIsIHNpemUpKSB7XFxuK1xcdFxcdFxcdGNwdV9hZGRyID0gTlVMTDtcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNldF91bmNhY2hlZCkge1xcbitcXHRcXHRhcmNoX2RtYV9wcmVwX2NvaGVyZW50KHBhZ2UsIHNpemUpO1xcbitcXHRcXHRjcHVfYWRkciA9IGFyY2hfZG1hX3NldF91bmNhY2hlZChjcHVfYWRkciwgc2l6ZSk7XFxuK1xcdFxcdGlmIChJU19FUlIoY3B1X2FkZHIpKSB7XFxuK1xcdFxcdFxcdGNwdV9hZGRyID0gTlVMTDtcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0KmRtYV9oYW5kbGUgPSBwaHlzX3RvX2RtYV9kaXJlY3QoZGV2LCBzZXItXFx1MDAzZXBhZ2VfcGh5cyk7XFxuK1xcbitlcnI6XFxuK1xcdFdBUk5fT04oIWtob19yZXN0b3JlX3BhZ2VzKHNlci1cXHUwMDNlcGFnZV9waHlzLFxcbitcXHRcXHRcXHRcXHQgICAxIFxcdTAwM2NcXHUwMDNjIGdldF9vcmRlcihzZXItXFx1MDAzZXNpemUpKSk7XFxuK1xcdGtob19yZXN0b3JlX2ZyZWUoc2VyKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERNQSBkaXJlY3QgQVBJIGV4cGVjdHMgaGlnaC1vcmRlciBhbGxvY2F0aW9ucywgc28gc2V0IHJlZmNvdW50IG9mXFxuK1xcdCAqIHRhaWwgcGFnZXMgdG8gemVyby5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9ICgxIFxcdTAwM2NcXHUwMDNjIGdldF9vcmRlcihzaXplKSkgLSAxOyBpIFxcdTAwM2UgMDsgLS1pKVxcbitcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XFxuK1xcbitcXHRyZXR1cm4gY3B1X2FkZHI7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiB2b2lkIGRtYV9kaXJlY3RfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbiBcXHRcXHR2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdW5zaWduZWQgbG9uZyBhdHRycylcXG4ge1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMgYi9rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODQwM2VjNDc4MDdlOFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmNcXG5AQCAtMCwwICsxLDIwOCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBLVW5pdCB0ZXN0IGZvciBETUEgYWxsb2NhdGlvbiBsaXZlIHVwZGF0ZSBwcmVzZXJ2YXRpb24uXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2t1bml0L3Rlc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNja3VuaXQvc3RhdGljX3N0dWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXAtb3BzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWRpcmVjdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuK1xcbitzdGF0aWMgY29uc3Qgc2l6ZV90IGRtYV90ZXN0X3NpemVzW10gPSB7XFxuK1xcdDEyOCxcXG4rXFx0UEFHRV9TSVpFLFxcbitcXHQyICogUEFHRV9TSVpFLFxcbitcXHQzICogUEFHRV9TSVpFLFxcbitcXHQ4ICogUEFHRV9TSVpFLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgZG1hX3NpemVfZGVzYyhjb25zdCBzaXplX3QgKnNpemUsIGNoYXIgKmRlc2MpXFxuK3tcXG4rXFx0c25wcmludGYoZGVzYywgS1VOSVRfUEFSQU1fREVTQ19TSVpFLCBcXFwic2l6ZT0lenVcXFwiLCAqc2l6ZSk7XFxuK31cXG4rXFxuK0tVTklUX0FSUkFZX1BBUkFNKGRtYV9zaXplLCBkbWFfdGVzdF9zaXplcywgZG1hX3NpemVfZGVzYyk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHBhZ2UgKm1vY2tfa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBoeXNfdG9fcGFnZShwaHlzKTtcXG4rXFxuK1xcdGlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsIG5yX3BhZ2VzKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwYWdlLCBucl9wYWdlcyk7XFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGZvbGlvICptb2NrX2tob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpXFxuK3tcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGh5c190b19wYWdlKHBoeXMpKTtcXG4rXFxuK1xcdGlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsICgxIFxcdTAwM2NcXHUwMDNjIGZvbGlvX29yZGVyKGZvbGlvKSkpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGtob191bnByZXNlcnZlX2ZvbGlvKGZvbGlvKTtcXG4rXFx0cmV0dXJuIGZvbGlvO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24oc3RydWN0IGt1bml0ICp0ZXN0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCBjb2hlcmVudCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgYXRvbWljLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2MgZ2V0X29yZGVyKHNpemUpO1xcbitcXHRkbWFfYWRkcl90IGhhbmRsZTEsIGhhbmRsZTI7XFxuK1xcdGludCByZXQsIGV4cGVjdGVkX3JldCA9IDA7XFxuK1xcdHN0cnVjdCBkZXZpY2UgZGV2ID0gezB9O1xcbitcXHRnZnBfdCBnZnAgPSBHRlBfS0VSTkVMO1xcbitcXHR2b2lkICphZGRyMSwgKmFkZHIyO1xcbitcXHR1NjQgc3RhdGU7XFxuK1xcbitcXHRrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9wYWdlcywgbW9ja19raG9fcmVzdG9yZV9wYWdlcyk7XFxuK1xcdGt1bml0X2FjdGl2YXRlX3N0YXRpY19zdHViKHRlc3QsIGtob19yZXN0b3JlX2ZvbGlvLCBtb2NrX2tob19yZXN0b3JlX2ZvbGlvKTtcXG4rXFxuK1xcdGRldmljZV9pbml0aWFsaXplKFxcdTAwMjZkZXYpO1xcbitcXHRkZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soNjQpO1xcbitcXHRkZXYuZG1hX21hc2sgPSBcXHUwMDI2ZGV2LmNvaGVyZW50X2RtYV9tYXNrO1xcbisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRSkgfHwgXFxcXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVSkgfHwgXFxcXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTEwpXFxuK1xcdGRldi5kbWFfY29oZXJlbnQgPSBjb2hlcmVudDtcXG4rI2VuZGlmXFxuK1xcbitcXHRpZiAoYXRvbWljKVxcbitcXHRcXHRnZnAgPSBHRlBfQVRPTUlDO1xcbitcXG4rXFx0YWRkcjEgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNmRldiwgc2l6ZSwgXFx1MDAyNmhhbmRsZTEsIGdmcCk7XFxuK1xcdGlmICghYWRkcjEpIHtcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiRE1BIGFsbG9jYXRpb24gZmFpbGVkICh1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uKVxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkgXFx1MDAyNlxcdTAwMjYgZG1hX2lzX2Zyb21fcG9vbChhZGRyMSwgc2l6ZSkpIHtcXG4rXFx0XFx0ZXhwZWN0ZWRfcmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGt1bml0X2luZm8odGVzdCwgXFxcIkRNQSBhbGxvY2F0aW9uIHVzaW5nIHBvb2wsIGV4cGVjdGluZyAtRU9QTk9UU1VQUFxcXCIpO1xcbitcXHR9IGVsc2UgaWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cyhcXHUwMDI2ZGV2LCBoYW5kbGUxKSwgc2l6ZSkpIHtcXG4rXFx0XFx0ZXhwZWN0ZWRfcmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGt1bml0X2luZm8odGVzdCwgXFxcIkRNQSBhbGxvY2F0aW9uIHVzaW5nIENNQSwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKFxcdTAwMjZkZXYsIGFkZHIxLCBzaXplLCBoYW5kbGUxLCBcXHUwMDI2c3RhdGUpO1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmV0LCBleHBlY3RlZF9yZXQpO1xcbitcXG4rXFx0aWYgKCFleHBlY3RlZF9yZXQpIHtcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX1RSVUVfTVNHKHRlc3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGtob190ZXN0X3BhZ2VzX3ByZXNlcnZlZChkbWFfdG9fcGh5cyhcXHUwMDI2ZGV2LCBoYW5kbGUxKSwgbnJfcGFnZXMpLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXFwiQWxsb2NhdGVkIGJsb2NrIG5vdCB0cmFja2VkIGluIEtIT1xcXCIpO1xcbitcXG4rXFx0XFx0YWRkcjIgPSBkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKFxcdTAwMjZkZXYsIHNpemUsIFxcdTAwMjZoYW5kbGUyLCBnZnAsIHN0YXRlKTtcXG4rXFx0XFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGFkZHIyKTtcXG4rXFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBoYW5kbGUxLCBoYW5kbGUyKTtcXG4rXFx0XFx0ZG1hX2ZyZWVfY29oZXJlbnQoXFx1MDAyNmRldiwgc2l6ZSwgYWRkcjIsIGhhbmRsZTIpO1xcbitcXHRcXHRLVU5JVF9FWFBFQ1RfRkFMU0VfTVNHKHRlc3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoXFx1MDAyNmRldiwgaGFuZGxlMSksIG5yX3BhZ2VzKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJBbGxvY2F0ZWQgYmxvY2sgc3RpbGwgdHJhY2tlZCBhZnRlciBmcmVlXFxcIik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZkZXYsIHNpemUsIGFkZHIxLCBoYW5kbGUxKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfY29oZXJlbnQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdGNvbnN0IHNpemVfdCAqc2l6ZSA9IHRlc3QtXFx1MDAzZXBhcmFtX3ZhbHVlO1xcbitcXG4rXFx0dGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIHRydWUsIGZhbHNlLCAqc2l6ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdGNvbnN0IHNpemVfdCAqc2l6ZSA9IHRlc3QtXFx1MDAzZXBhcmFtX3ZhbHVlO1xcbitcXG4rXFx0dGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIGZhbHNlLCBmYWxzZSwgKnNpemUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfY29oZXJlbnRfYXRvbWljKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRjb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LVxcdTAwM2VwYXJhbV92YWx1ZTtcXG4rXFxuK1xcdHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCB0cnVlLCB0cnVlLCAqc2l6ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnRfYXRvbWljKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRjb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LVxcdTAwM2VwYXJhbV92YWx1ZTtcXG4rXFxuK1xcdHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCBmYWxzZSwgdHJ1ZSwgKnNpemUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2RtYW1fcHJlc2VydmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRkbWFfYWRkcl90IGhhbmRsZSwgbm9uX2RtYW1faGFuZGxlO1xcbitcXHR2b2lkICphZGRyLCAqbm9uX2RtYW1fYWRkcjtcXG4rXFx0c3RydWN0IGRldmljZSBkZXYgPSB7MH07XFxuK1xcdHNpemVfdCBzaXplID0gMTI4O1xcbitcXHR1NjQgc3RhdGU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9wYWdlcywgbW9ja19raG9fcmVzdG9yZV9wYWdlcyk7XFxuK1xcdGt1bml0X2FjdGl2YXRlX3N0YXRpY19zdHViKHRlc3QsIGtob19yZXN0b3JlX2ZvbGlvLCBtb2NrX2tob19yZXN0b3JlX2ZvbGlvKTtcXG4rXFxuK1xcdGRldmljZV9pbml0aWFsaXplKFxcdTAwMjZkZXYpO1xcbitcXHRkZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soNjQpO1xcbitcXHRkZXYuZG1hX21hc2sgPSBcXHUwMDI2ZGV2LmNvaGVyZW50X2RtYV9tYXNrO1xcbisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRSkgfHwgXFxcXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVSkgfHwgXFxcXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTEwpXFxuK1xcdGRldi5kbWFfY29oZXJlbnQgPSB0cnVlO1xcbisjZW5kaWZcXG4rXFxuK1xcdG5vbl9kbWFtX2FkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNmRldiwgc2l6ZSwgXFx1MDAyNm5vbl9kbWFtX2hhbmRsZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbm9uX2RtYW1fYWRkcikge1xcbitcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJETUEgYWxsb2NhdGlvbiBmYWlsZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXFx1MDAyNmRldiwgbm9uX2RtYW1fYWRkciwgc2l6ZSwgbm9uX2RtYW1faGFuZGxlLCBcXHUwMDI2c3RhdGUpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVFfTVNHKHRlc3QsIHJldCwgLUVJTlZBTCwgXFxcIlByZXNlcnZpbmcgbm9uLWRldnJlcyBhbGxvY2F0aW9uIHNob3VsZCBmYWlsXFxcIik7XFxuK1xcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZkZXYsIHNpemUsIG5vbl9kbWFtX2FkZHIsIG5vbl9kbWFtX2hhbmRsZSk7XFxuK1xcbitcXHRhZGRyID0gZG1hbV9hbGxvY19jb2hlcmVudChcXHUwMDI2ZGV2LCBzaXplLCBcXHUwMDI2aGFuZGxlLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFhZGRyKSB7XFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcIkRNQSBhbGxvY2F0aW9uIGZhaWxlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihcXHUwMDI2ZGV2LCBhZGRyLCBzaXplLCBoYW5kbGUsIFxcdTAwMjZzdGF0ZSk7XFxuK1xcdEtVTklUX0FTU0VSVF9FUV9NU0codGVzdCwgcmV0LCAwLCBcXFwiRmFpbGVkIHRvIHByZXNlcnZlIGRtYW0gYWxsb2NhdGlvblxcXCIpO1xcbitcXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoXFx1MDAyNmRldiwgaGFuZGxlKSwgMSkpO1xcbitcXG4rXFx0ZG1hbV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXFx1MDAyNmRldiwgYWRkciwgc2l6ZSwgaGFuZGxlLCBzdGF0ZSk7XFxuK1xcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoXFx1MDAyNmRldiwgaGFuZGxlKSwgMSkpO1xcbitcXG4rXFx0ZG1hbV9mcmVlX2NvaGVyZW50KFxcdTAwMjZkZXYsIHNpemUsIGFkZHIsIGhhbmRsZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkbWFfZGlyZWN0X3Rlc3RfY2FzZXNbXSA9IHtcXG4rXFx0S1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2RtYV9kaXJlY3RfY29oZXJlbnQsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxcbitcXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnQsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxcbitcXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9jb2hlcmVudF9hdG9taWMsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxcbitcXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnRfYXRvbWljLCBkbWFfc2l6ZV9nZW5fcGFyYW1zKSxcXG4rXFx0S1VOSVRfQ0FTRSh0ZXN0X2RtYW1fcHJlc2VydmF0aW9uKSxcXG4rXFx0e31cXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgZG1hX2RpcmVjdF90ZXN0X3N1aXRlID0ge1xcbitcXHQubmFtZSA9IFxcXCJkbWFfZGlyZWN0X2xpdmV1cGRhdGVcXFwiLFxcbitcXHQudGVzdF9jYXNlcyA9IGRtYV9kaXJlY3RfdGVzdF9jYXNlcyxcXG4rfTtcXG4ra3VuaXRfdGVzdF9zdWl0ZShkbWFfZGlyZWN0X3Rlc3Rfc3VpdGUpO1xcbitcXG4rTU9EVUxFX0lNUE9SVF9OUyhcXFwiRVhQT1JURURfRk9SX0tVTklUX1RFU1RJTkdcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJLVW5pdCB0ZXN0IGZvciBETUEgZGlyZWN0IGxpdmUgdXBkYXRlIHByZXNlcnZhdGlvblxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvbWFwcGluZy5jIGIva2VybmVsL2RtYS9tYXBwaW5nLmNcXG5pbmRleCAyM2VkOGViOTIzM2U1NS4uYWVjMTIyMmFiNWFlYjEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2RtYS9tYXBwaW5nLmNcXG4rKysgYi9rZXJuZWwvZG1hL21hcHBpbmcuY1xcbkBAIC0xMiw2ICsxMiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbW11LWRtYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva21zYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9raG8vYWJpL2RtYV9hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuQEAgLTM1LDEyICszNywyNSBAQCBzdHJ1Y3QgZG1hX2RldnJlcyB7XFxuIFxcdHZvaWRcXHRcXHQqdmFkZHI7XFxuIFxcdGRtYV9hZGRyX3RcXHRkbWFfaGFuZGxlO1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0YXR0cnM7XFxuKyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcXG4rXFx0Ym9vbCBpc19wcmVzZXJ2ZWQ7XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgZG1hbV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxcbiB7XFxuIFxcdHN0cnVjdCBkbWFfZGV2cmVzICp0aGlzID0gcmVzO1xcbiBcXG4rI2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxcbitcXHQvKlxcbitcXHQgKiBGcmVlaW5nIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5IGlzIGRhbmdlcm91cyBhcyBpdCBjYW4gY2F1c2UgVUFGIGluIHRoZVxcbitcXHQgKiBjdXJyZW50IG9yIG5leHQga2VybmVsIGlmIHRoZSBtZW1vcnkgaXMgc3RpbGwgYmVpbmcgdXNlZCBieSB0aGVcXG4rXFx0ICogZGV2aWNlLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT04odGhpcy1cXHUwMDNlaXNfcHJlc2VydmVkKSlcXG4rXFx0XFx0cmV0dXJuO1xcbisjZW5kaWZcXG4rXFxuIFxcdGRtYV9mcmVlX2F0dHJzKGRldiwgdGhpcy1cXHUwMDNlc2l6ZSwgdGhpcy1cXHUwMDNldmFkZHIsIHRoaXMtXFx1MDAzZWRtYV9oYW5kbGUsXFxuIFxcdFxcdFxcdHRoaXMtXFx1MDAzZWF0dHJzKTtcXG4gfVxcbkBAIC02MjgsNiArNjQzLDEyMyBAQCB1NjQgZG1hX2dldF9yZXF1aXJlZF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChkbWFfZ2V0X3JlcXVpcmVkX21hc2spO1xcbiBcXG4rI2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxcbitpbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0ICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpO1xcbitcXG4rXFx0aWYgKGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChkZXYsIGNwdV9hZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKGRtYV9hbGxvY19kaXJlY3QoZGV2LCBvcHMpKVxcbitcXHRcXHRyZXR1cm4gZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKGRldiwgY3B1X2FkZHIsIHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGRtYV9oYW5kbGUsIGF0dHJzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdGF0ZSk7XFxuK1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyk7XFxuK1xcbit2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpO1xcbitcXG4rXFx0aWYgKGRtYV9hbGxvY19kaXJlY3QoZGV2LCBvcHMpKVxcbitcXHRcXHRkbWFfZGlyZWN0X3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24pO1xcbitcXG4rdm9pZCAqZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHRcXHQgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XFxuK1xcdHZvaWQgKmNwdV9hZGRyID0gTlVMTDtcXG4rXFxuK1xcdFdBUk5fT05fT05DRSghZGV2LVxcdTAwM2Vjb2hlcmVudF9kbWFfbWFzayk7XFxuK1xcbitcXHRpZiAoZG1hX2FsbG9jX2RpcmVjdChkZXYsIG9wcykpXFxuK1xcdFxcdGNwdV9hZGRyID0gZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oZGV2LCBzaXplLCBkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZ2ZwLCBhdHRycywgc3RhdGUpO1xcbitcXG4rXFx0ZGVidWdfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgKmRtYV9oYW5kbGUsIGNwdV9hZGRyLCBhdHRycyk7XFxuK1xcdHJldHVybiBjcHVfYWRkcjtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKGRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpO1xcbitcXG4raW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfZGV2cmVzIG1hdGNoX2RhdGEgPSB7IHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlIH07XFxuK1xcdHN0cnVjdCBkbWFfZGV2cmVzICpkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFxcdTAwMjZtYXRjaF9kYXRhKTtcXG4rXFx0aWYgKCFkcilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZHItXFx1MDAzZWlzX3ByZXNlcnZlZClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLCBkbWFfaGFuZGxlLCBhdHRycywgc3RhdGUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0ZHItXFx1MDAzZWlzX3ByZXNlcnZlZCA9IHRydWU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0woZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKTtcXG4rXFxuK3ZvaWQgZG1hbV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4rXFx0XFx0XFx0XFx0c2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0IHN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfZGV2cmVzIG1hdGNoX2RhdGEgPSB7IHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlIH07XFxuK1xcdHN0cnVjdCBkbWFfZGV2cmVzICpkcjtcXG4rXFxuK1xcdGRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFxcdTAwMjZtYXRjaF9kYXRhKTtcXG4rXFx0aWYgKCFkcilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFkci1cXHUwMDNlaXNfcHJlc2VydmVkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkbWFfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKGRldiwgc3RhdGUpO1xcbitcXHRkci1cXHUwMDNlaXNfcHJlc2VydmVkID0gZmFsc2U7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbik7XFxuK1xcbit2b2lkICpkbWFtX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfZGV2cmVzICpkcjtcXG4rXFx0dm9pZCAqdmFkZHI7XFxuK1xcbitcXHRkciA9IGRldnJlc19hbGxvYyhkbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xcbitcXHRpZiAoIWRyKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHZhZGRyID0gZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGdmcCwgYXR0cnMsIHN0YXRlKTtcXG4rXFx0aWYgKCF2YWRkcikge1xcbitcXHRcXHRkZXZyZXNfZnJlZShkcik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRkci1cXHUwMDNldmFkZHIgPSB2YWRkcjtcXG4rXFx0ZHItXFx1MDAzZWRtYV9oYW5kbGUgPSAqZG1hX2hhbmRsZTtcXG4rXFx0ZHItXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXHRkci1cXHUwMDNlYXR0cnMgPSBhdHRycztcXG4rXFxuK1xcdGRldnJlc19hZGQoZGV2LCBkcik7XFxuK1xcbitcXHRyZXR1cm4gdmFkZHI7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkbWFtX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRycyk7XFxuKyNlbmRpZlxcbitcXG4gdm9pZCAqZG1hX2FsbG9jX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXFxuIFxcdFxcdGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgYXR0cnMpXFxuIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9wb29sLmMgYi9rZXJuZWwvZG1hL3Bvb2wuY1xcbmluZGV4IDJiMmZiYjcwOTI0MjlhLi43ODQ5NjU2ODk3M2ZlYiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZG1hL3Bvb2wuY1xcbisrKyBiL2tlcm5lbC9kbWEvcG9vbC5jXFxuQEAgLTMsNiArMyw5IEBAXFxuICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTHRkLlxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQ1xcbiAgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY21hLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXFx1MDAzZVxcbkBAIC0zMDcsMyArMzEwLDE3IEBAIGJvb2wgZG1hX2ZyZWVfZnJvbV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKVxcbiBcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuK1xcbitib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCBnZW5fcG9vbCAqcG9vbCA9IE5VTEw7XFxuK1xcbitcXHR3aGlsZSAoKHBvb2wgPSBkbWFfZ3Vlc3NfcG9vbChwb29sLCAwKSkpIHtcXG4rXFx0XFx0aWYgKCFnZW5fcG9vbF9oYXNfYWRkcihwb29sLCAodW5zaWduZWQgbG9uZylzdGFydCwgc2l6ZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoZG1hX2lzX2Zyb21fcG9vbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE1OjEwLjA2Mjg3MDk5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1Nzc1NjQwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uIChlLmcuLCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycywgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKSBhbmQgYSBLVW5pdCB0ZXN0IGZvciBpdC4gSG93ZXZlciwgdGhlIG5ldyBBUEkgaXMgbm90IGN1cnJlbnRseSBjYWxsZWQgYnkgYW55IGRyaXZlciBvciBjb3JlIGtlcm5lbCBjb2RlIG91dHNpZGUgb2YgdGhlIEtVbml0IHRlc3QgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZjFjYTE5NzY4MGY2ZTdlYmJmMjQ0ZjcyODJjZDNiMDQ2NDVhYzU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxNzoxNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oIGIvaW5jbHVkZS9saW51eC9kbWEtZGlyZWN0LmhcbmluZGV4IGMyNDk5MTI0NTZmOTYzLi4wZWZlMmJjMWE4MTUyNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1kaXJlY3QuaFxuQEAgLTE0MSw2ICsxNDEsMzUgQEAgc3RhdGljIGlubGluZSBib29sIGRtYV9jYXBhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSxcbiB1NjQgZG1hX2RpcmVjdF9nZXRfcmVxdWlyZWRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSxcbiBcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIGF0dHJzKTtcbitcbisjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4raW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuK1x0XHRcdFx0ICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xuK3ZvaWQgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpO1xuK3ZvaWQgKmRtYV9kaXJlY3RfcmVzdG9yZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4rXHRcdFx0XHQgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdFx0XHQgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbitcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSlcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZGlyZWN0X3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSlcbit7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdFx0XHQgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbitcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rI2VuZGlmXG4rXG4gdm9pZCBkbWFfZGlyZWN0X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsXG4gXHRcdGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGxvbmcgYXR0cnMpO1xuIHN0cnVjdCBwYWdlICpkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXG5pbmRleCA2YTE4MzJhNzNjYWQ4ZC4uYjEzZTVlZWJlNmQzYWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxuQEAgLTEwNiw2ICsxMDYsNyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKTtcbiB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpO1xuIFxuIHZvaWQgZG1hX2NvbnRpZ3VvdXNfZWFybHlfZml4dXAocGh5c19hZGRyX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTtcbitib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7XG4gI2Vsc2UgLyogQ09ORklHX0RNQV9DTUEgKi9cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbWEgKmRldl9nZXRfY21hX2FyZWEoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbkBAIC0xNDUsNiArMTQ2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4ge1xuIFx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqL1xuIFxuICNpZmRlZiBDT05GSUdfRE1BX0RFQ0xBUkVfQ09IRVJFTlRcbkBAIC0xNTYsNiArMTYyLDcgQEAgaW50IGRtYV9hbGxvY19mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNzaXplX3Qgc2l6ZSxcbiBpbnQgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb3JkZXIsIHZvaWQgKnZhZGRyKTtcbiBpbnQgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLCBpbnQgKnJldCk7XG4rYm9vbCBkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkcik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKVxuQEAgLTE2Niw2ICsxNzMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LFxuICNkZWZpbmUgZG1hX2FsbG9jX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgc2l6ZSwgaGFuZGxlLCByZXQpICgwKVxuICNkZWZpbmUgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBvcmRlciwgdmFkZHIpICgwKVxuICNkZWZpbmUgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCB2bWEsIHZhZGRyLCBvcmRlciwgcmV0KSAoMClcbisjZGVmaW5lIGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudChkZXYsIHZhZGRyKSAoZmFsc2UpXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIGRtYV9yZWxlYXNlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgfVxuICNlbmRpZiAvKiBDT05GSUdfRE1BX0RFQ0xBUkVfQ09IRVJFTlQgKi9cbiBcbkBAIC0yMTYsNiArMjI1LDcgQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0Ym9vbCAoKnBoeXNfYWRkcl9vaykoc3RydWN0IGRldmljZSAqLCBwaHlzX2FkZHJfdCwgc2l6ZV90KSk7XG4gYm9vbCBkbWFfZnJlZV9mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpO1xuIFxuK2Jvb2wgZG1hX2lzX2Zyb21fcG9vbCh2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpO1xuIGludCBkbWFfZGlyZWN0X3NldF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBjcHVfc3RhcnQsXG4gXHRcdGRtYV9hZGRyX3QgZG1hX3N0YXJ0LCB1NjQgc2l6ZSk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oXG5pbmRleCBkYjhhYjI0YTU0ZjRhMy4uNGMwYzQyOGI2YjFjYjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaFxuQEAgLTIxMCw2ICsyMTAsMjMgQEAgdm9pZCAqZG1hX3ZtYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIHZvaWQgZG1hX3Z1bm1hcF9ub25jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpO1xuIGludCBkbWFfbW1hcF9ub25jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHNpemVfdCBzaXplLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7XG4rI2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxuK2ludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuK1x0XHRcdFx0ICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKTtcbit2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpO1xuK3ZvaWQgKmRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdCAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSk7XG4raW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuK1x0XHRcdFx0ICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCAqc3RhdGUpO1xuK3ZvaWQgZG1hbV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCBzdGF0ZSk7XG4rdm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKTtcbisjZW5kaWZcbiAjZWxzZSAvKiBDT05GSUdfSEFTX0RNQSAqL1xuIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2VfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXG5AQCAtNDk2LDYgKzUxMyw0NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1hX25lZWRfdW5tYXAoc3RydWN0IGRldmljZSAqZGV2KVxuIH1cbiAjZW5kaWYgLyogIUNPTkZJR19IQVNfRE1BIHx8ICFDT05GSUdfRE1BX05FRURfU1lOQyAqL1xuIFxuKyNpZiAhZGVmaW5lZChDT05GSUdfRE1BX0xJVkVVUERBVEUpIHx8ICFkZWZpbmVkKENPTkZJR19IQVNfRE1BKVxuK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4rXHRcdFx0XHRcdFx0c2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbitcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdFx0XHQgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwLFxuK1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgc3RhdGUpXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxuK1x0XHRcdFx0XHRcdCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuK1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4rXHRcdFx0XHRcdCAgICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCBzdGF0ZSlcbit7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdFx0XHQgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbitcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rI2VuZGlmXG4rXG4gc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHRkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIGdmcF90IGdmcCk7XG4gdm9pZCBkbWFfZnJlZV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbkBAIC02MTgsNiArNjc0LDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRcdFx0KGdmcCBcdTAwMjYgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgKnN0YXRlKVxuK3tcbitcdHJldHVybiBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxuK1x0XHRcdFx0XHQgICAgIGRtYV9oYW5kbGUsIDAsIHN0YXRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYV91bnByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB1NjQgc3RhdGUpXG4re1xuK1x0ZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIHN0YXRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkICpkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4rXHRcdFx0XHRcdFx0ICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXG4rXHRcdFx0XHRcdFx0ICAgIGdmcF90IGdmcCwgdTY0IHN0YXRlKVxuK3tcbitcdHJldHVybiBkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwLFxuK1x0XHRcdFx0XHQgICAgKGdmcCBcdTAwMjYgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwLFxuK1x0XHRcdFx0XHQgICAgc3RhdGUpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0dm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSlcbiB7XG5AQCAtNzQ3LDYgKzgyNCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYW1fYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHQoZ2ZwIFx1MDAyNiBfX0dGUF9OT1dBUk4pID8gRE1BX0FUVFJfTk9fV0FSTiA6IDApO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdFx0XHQgICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0ICpzdGF0ZSlcbit7XG4rXHRyZXR1cm4gZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsXG4rXHRcdFx0XHRcdCAgICAgIGRtYV9oYW5kbGUsIDAsIHN0YXRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHU2NCBzdGF0ZSlcbit7XG4rXHRkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbihkZXYsIGNwdV9hZGRyLCBzaXplLCBkbWFfaGFuZGxlLCBzdGF0ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hbV9yZXN0b3JlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdFx0XHQgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXG4rXHRcdFx0XHRcdFx0ICAgICBnZnBfdCBnZnAsIHU2NCBzdGF0ZSlcbit7XG4rXHRyZXR1cm4gZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnAsXG4rXHRcdFx0XHRcdCAgICAgKGdmcCBcdTAwMjYgX19HRlBfTk9XQVJOKSA/IERNQV9BVFRSX05PX1dBUk4gOiAwLFxuK1x0XHRcdFx0XHQgICAgIHN0YXRlKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2Nfd2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHRcdCBkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3QgZ2ZwKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWUzOGNmMWExZmM5OWVcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFxuQEAgLTAsMCArMSwzMiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfTElOVVhfS0hPX0FCSV9ETUFfQUxMT0NfSFxuKyNkZWZpbmUgX0xJTlVYX0tIT19BQklfRE1BX0FMTE9DX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rLyoqXG4rICogRE9DOiBETUEgQWxsb2MgQUJJXG4rICpcbisgKiBUaGlzIGhlYWRlciBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgdG8gc2VyaWFsaXplIHRoZSBzdGF0ZSBvZiBETUFcbisgKiBhbGxvY2F0aW9ucywgZG9uZSBieSBkZXZpY2UgZHJpdmVyLCBhY3Jvc3MgYSBMaXZlIFVwZGF0ZS5cbisgKlxuKyAqIE9ubHkgRE1BIGFsbG9jYXRpb25zIGRvbmUgdGhyb3VnaCBkbWEtZGlyZWN0IHRoYXQgYXJlIGNvbnRpZ3VvdXMgYW5kXG4rICogYWxsb2NhdGVkIHVzaW5nIGFsbG9jX3BhZ2UgYXJlIHN1cHBvcnRlZC5cbisgKi9cbitcbisvKipcbisgKiBzdHJ1Y3QgZG1hX2FsbG9jX3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgb2YgYSBzaW5nbGUgRE1BIGFsbG9jYXRpb25cbisgKiBAcGFnZV9waHlzOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBwcmVzZXJ2ZWQgcGFnZXNcbisgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgRE1BIGFsbG9jYXRpb25cbisgKiBAYXR0cnM6IERNQSBhbGxvY2F0aW9uIGF0dHJpYnV0ZXNcbisgKiBAZm9yY2VfZGVjcnlwdGVkOiBXaGV0aGVyIHRoZSBtZW1vcnkgaXMgZm9yY2UgZGVjcnlwdGVkIGluIHByZXZpb3VzIGtlcm5lbFxuKyAqL1xuK3N0cnVjdCBkbWFfYWxsb2Nfc2VyIHtcbitcdHU2NCBwYWdlX3BoeXM7XG4rXHR1NjQgc2l6ZTtcbitcdHU2NCBhdHRycztcbitcdHU4IGZvcmNlX2RlY3J5cHRlZDtcbitcdHU4IHBhZGRpbmdbN107XG4rfSBfX3BhY2tlZDtcbitcbisjZW5kaWYgLyogX0xJTlVYX0tIT19BQklfRE1BX0FMTE9DX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL0tjb25maWcgYi9rZXJuZWwvZG1hL0tjb25maWdcbmluZGV4IGJmZWYyMWI0YTlhZTdkLi40OGJjNzRhZjU1MWEzMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvS2NvbmZpZ1xuKysrIGIva2VybmVsL2RtYS9LY29uZmlnXG5AQCAtMjY1LDMgKzI2NSwxNSBAQCBjb25maWcgRE1BX01BUF9CRU5DSE1BUktcbiBcdCAgcGVyZm9ybWFuY2Ugb2YgZG1hXyh1biltYXBfcGFnZS5cbiBcbiBcdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RtYS9kbWFfbWFwX2JlbmNobWFyay5jXG4rXG4rY29uZmlnIERNQV9MSVZFVVBEQVRFXG4rXHRib29sIFwiRW5hYmxlIHByZXNlcnZhdGlvbiBvZiBETUEgZGlyZWN0IGFsbG9jYXRpb25zXCJcbitcdGRlcGVuZHMgb24gTElWRVVQREFURVxuK1xuK2NvbmZpZyBETUFfTElWRVVQREFURV9LVU5JVF9URVNUXG4rXHR0cmlzdGF0ZSBcIktVbml0IHRlc3QgZm9yIERNQSBkaXJlY3QgbGl2ZXVwZGF0ZSBwcmVzZXJ2YXRpb25cIlxuK1x0ZGVwZW5kcyBvbiBLVU5JVFxuK1x0ZGVwZW5kcyBvbiBETUFfTElWRVVQREFURVxuK1x0aGVscFxuK1x0ICBUaGlzIGJ1aWxkcyB0aGUgS1VuaXQgdGVzdHMgZm9yIHRoZSBETUEgZGlyZWN0IGxpdmV1cGRhdGVcbitcdCAgcHJlc2VydmF0aW9uIGFuZCByZXN0b3JhdGlvbiBsb2dpYy5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL01ha2VmaWxlIGIva2VybmVsL2RtYS9NYWtlZmlsZVxuaW5kZXggNjk3NzAzMzQ0NGEzNzUuLjAzNzAzNTQyZWU3OWJjIDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9NYWtlZmlsZVxuKysrIGIva2VybmVsL2RtYS9NYWtlZmlsZVxuQEAgLTEwLDMgKzEwLDQgQEAgb2JqLSQoQ09ORklHX1NXSU9UTEIpXHRcdFx0Kz0gc3dpb3RsYi5vXG4gb2JqLSQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKVx0XHQrPSBwb29sLm9cbiBvYmotJChDT05GSUdfTU1VKVx0XHRcdCs9IHJlbWFwLm9cbiBvYmotJChDT05GSUdfRE1BX01BUF9CRU5DSE1BUkspXHRcdCs9IG1hcF9iZW5jaG1hcmsub1xuK29iai0kKENPTkZJR19ETUFfTElWRVVQREFURV9LVU5JVF9URVNUKVx0Kz0gZGlyZWN0X3Rlc3Qub1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29oZXJlbnQuYyBiL2tlcm5lbC9kbWEvY29oZXJlbnQuY1xuaW5kZXggYmNkYzBmNzZkMmU4MGEuLjc2Y2JlMTFlMWY5MGU3IDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9jb2hlcmVudC5jXG4rKysgYi9rZXJuZWwvZG1hL2NvaGVyZW50LmNcbkBAIC0yMzEsNiArMjMxLDE3IEBAIGludCBkbWFfcmVsZWFzZV9mcm9tX2Rldl9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvcmRlciwgdm9pZCAqdmFkZHIpXG4gXHRyZXR1cm4gX19kbWFfcmVsZWFzZV9mcm9tX2NvaGVyZW50KG1lbSwgb3JkZXIsIHZhZGRyKTtcbiB9XG4gXG4rYm9vbCBkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkcilcbit7XG4rXHRzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2X2dldF9jb2hlcmVudF9tZW1vcnkoZGV2KTtcbitcbitcdGlmIChtZW0gXHUwMDI2XHUwMDI2IHZhZGRyIFx1MDAzZT0gbWVtLVx1MDAzZXZpcnRfYmFzZSBcdTAwMjZcdTAwMjYgdmFkZHIgXHUwMDNjXG4rXHRcdCAgIChtZW0tXHUwMDNldmlydF9iYXNlICsgKChkbWFfYWRkcl90KW1lbS1cdTAwM2VzaXplIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW50IF9fZG1hX21tYXBfZnJvbV9jb2hlcmVudChzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLCBpbnQgKnJldClcbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuaW5kZXggMDNmNTJiZDE3MTIwNjIuLjZkMGNmOWM3NTI4Y2I1IDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmNcbisrKyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jXG5AQCAtMzcsNiArMzcsOCBAQFxuIFxuICNkZWZpbmUgcHJfZm10KGZtdCkgXCJjbWE6IFwiIGZtdFxuIFxuKyNpbmNsdWRlIFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG5AQCAtMTMwLDYgKzEzMiwzMSBAQCBzdHJ1Y3QgY21hICpkZXZfZ2V0X2NtYV9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2dldF9jbWFfYXJlYSk7XG4gXG4rc3RydWN0IGRtYV9jbWFfY2hlY2tfZGF0YSB7XG4rXHRwaHlzX2FkZHJfdCBzdGFydDtcbitcdHBoeXNfYWRkcl90IGVuZDtcbit9O1xuK1xuK3N0YXRpYyBpbnQgZG1hX2NtYV9jaGVja19hcmVhKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZG1hX2NtYV9jaGVja19kYXRhICpjaGsgPSBkYXRhO1xuK1xuK1x0aWYgKGNtYV9pbnRlcnNlY3RzKGNtYSwgY2hrLVx1MDAzZXN0YXJ0LCBjaGstXHUwMDNlZW5kKSlcbitcdFx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rYm9vbCBkbWFfaXNfZnJvbV9jbWEocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4re1xuK1x0c3RydWN0IGRtYV9jbWFfY2hlY2tfZGF0YSBjaGsgPSB7XG4rXHRcdC5zdGFydCA9IHBoeXMsXG4rXHRcdC5lbmQgPSBwaHlzICsgc2l6ZSAtIDEsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIGNtYV9mb3JfZWFjaF9hcmVhKGRtYV9jbWFfY2hlY2tfYXJlYSwgXHUwMDI2Y2hrKSAhPSAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGRtYV9pc19mcm9tX2NtYSk7XG4rXG4gI2lmZGVmIENPTkZJR19ETUFfTlVNQV9DTUFcbiBcbiBzdGF0aWMgc3RydWN0IGNtYSAqZG1hX2NvbnRpZ3VvdXNfbnVtYV9hcmVhW01BWF9OVU1OT0RFU107XG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9kaXJlY3QuYyBiL2tlcm5lbC9kbWEvZGlyZWN0LmNcbmluZGV4IGVjODg3ZjQ0Mzc0MTgzLi4xMTdlYmFlOGE4MWZhMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvZGlyZWN0LmNcbisrKyBiL2tlcm5lbC9kbWEvZGlyZWN0LmNcbkBAIC02LDYgKzYsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2UgLyogZm9yIG1heF9wZm4gKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9raG8vYWJpL2RtYV9hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXAtb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2F0dGVybGlzdC5oXHUwMDNlXG5AQCAtMzA3LDYgKzMwOSwxOTMgQEAgdm9pZCAqZG1hX2RpcmVjdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcbitpbnQgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4rXHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgZG1hX2FsbG9jX3NlciAqc2VyO1xuK1x0aW50IHJldDtcbitcbitcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG4rXHRpZiAoZG1hX2lzX2Zyb21fY21hKGRtYV90b19waHlzKGRldiwgZG1hX2hhbmRsZSksIHNpemUpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoaXNfc3dpb3RsYl9mb3JfYWxsb2MoZGV2KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKChhdHRycyBcdTAwMjYgRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX0RNQV9BTExPQykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWRldl9pc19kbWFfY29oZXJlbnQoZGV2KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9HTE9CQUxfUE9PTCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWRldl9pc19kbWFfY29oZXJlbnQoZGV2KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKSBcdTAwMjZcdTAwMjZcbitcdCAgICBkbWFfaXNfZnJvbV9wb29sKGNwdV9hZGRyLCBzaXplKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0c2VyID0ga2hvX2FsbG9jX3ByZXNlcnZlKHNpemVvZigqc2VyKSk7XG4rXHRpZiAoSVNfRVJSKHNlcikpXG4rXHRcdHJldHVybiBQVFJfRVJSKHNlcik7XG4rXG4rXHRzZXItXHUwMDNlcGFnZV9waHlzID0gZG1hX3RvX3BoeXMoZGV2LCBkbWFfaGFuZGxlKTtcbitcdHNlci1cdTAwM2Vmb3JjZV9kZWNyeXB0ZWQgPSBmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KTtcbitcdHNlci1cdTAwM2VzaXplID0gc2l6ZTtcbitcdHNlci1cdTAwM2VhdHRycyA9IChhdHRycyBcdTAwMjYgfkRNQV9BVFRSX05PX1dBUk4pO1xuK1xuK1x0cmV0ID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHBoeXNfdG9fcGFnZShzZXItXHUwMDNlcGFnZV9waHlzKSxcbitcdFx0XHRcdCAxIFx1MDAzY1x1MDAzYyBnZXRfb3JkZXIoc2l6ZSkpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRraG9fdW5wcmVzZXJ2ZV9mcmVlKHNlcik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQqc3RhdGUgPSB2aXJ0X3RvX3BoeXMoc2VyKTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IHN0YXRlKVxuK3tcbitcdHN0cnVjdCBkbWFfYWxsb2Nfc2VyICpzZXI7XG4rXG4rXHRpZiAoIWtob19pc19lbmFibGVkKCkpXG4rXHRcdHJldHVybjtcbitcbitcdHNlciA9IHBoeXNfdG9fdmlydChzdGF0ZSk7XG4rXHRraG9fdW5wcmVzZXJ2ZV9wYWdlcyhwaHlzX3RvX3BhZ2Uoc2VyLVx1MDAzZXBhZ2VfcGh5cyksXG4rXHRcdFx0ICAgICAxIFx1MDAzY1x1MDAzYyBnZXRfb3JkZXIoc2VyLVx1MDAzZXNpemUpKTtcbitcdGtob191bnByZXNlcnZlX2ZyZWUoc2VyKTtcbit9XG4rXG4rdm9pZCAqZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxuK3tcbitcdGJvb2wgcmVtYXAgPSBmYWxzZSwgc2V0X3VuY2FjaGVkID0gZmFsc2U7XG4rXHRzdHJ1Y3QgZG1hX2FsbG9jX3NlciAqc2VyID0gTlVMTDtcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0dm9pZCAqY3B1X2FkZHIgPSBOVUxMO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIWtob19pc19lbmFibGVkKCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0c2VyID0gcGh5c190b192aXJ0KHN0YXRlKTtcbitcdHBhZ2UgPSBwaHlzX3RvX3BhZ2Uoc2VyLVx1MDAzZXBhZ2VfcGh5cyk7XG4rXG4rXHRzaXplID0gUEFHRV9BTElHTihzaXplKTtcbitcdGlmIChzaXplICE9IHNlci1cdTAwM2VzaXplKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdFdBUk5fT05fT05DRSgoYXR0cnMgXHUwMDI2IH5ETUFfQVRUUl9OT19XQVJOKSAhPSBzZXItXHUwMDNlYXR0cnMpO1xuK1xuK1x0LypcbitcdCAqIENhbm5vdCBmcmVlIHRoZSByZXN0b3JlZCBwYWdlcyBvbiBlcnJvciBoZXJlIGFzIHRoZXNlIG1pZ2h0IGJlIGluIHVzZVxuK1x0ICogYnkgYSBkZXZpY2Ugd2l0aCBkaXJlY3QgYWxsb2NhdGlvbiBpbiB0aGUgcHJldmlvdXMga2VybmVsLlxuK1x0ICovXG4rXHRpZiAoaXNfc3dpb3RsYl9mb3JfYWxsb2MoZGV2KSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoKGF0dHJzIFx1MDAyNiBETUFfQVRUUl9OT19LRVJORUxfTUFQUElORykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWZvcmNlX2RtYV91bmVuY3J5cHRlZChkZXYpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmICghZGV2X2lzX2RtYV9jb2hlcmVudChkZXYpKSB7XG4rXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19ETUFfQUxMT0MpKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1xuK1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX0dMT0JBTF9QT09MKSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0c2V0X3VuY2FjaGVkID0gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfRE1BX1NFVF9VTkNBQ0hFRCk7XG4rXHRcdHJlbWFwID0gSVNfRU5BQkxFRChDT05GSUdfRE1BX0RJUkVDVF9SRU1BUCk7XG4rXHRcdGlmICghc2V0X3VuY2FjaGVkIFx1MDAyNlx1MDAyNiAhcmVtYXApXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHtcbitcdFx0cmVtYXAgPSB0cnVlO1xuK1x0XHRzZXRfdW5jYWNoZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBSZW1hcHBpbmcgd2lsbCBiZSBibG9ja2luZyBzbyByZXR1cm4gZXJyb3IuIFRoZSBwcmVzZXJ2ZWQgbWVtb3J5XG4rXHQgKiBtaWdodCBiZSBhbHJlYWR5IGRlY3J5cHRlZCBpbiB0aGUgcHJldmlvdXMga2VybmVsLCBidXQgdGhlIGRlY3J5cHRpb25cbitcdCAqIGNhbGwgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgbm9uLWJsb2NraW5nIHNvIHJldHVybiBlcnJvciBhbHdheXMgaWZcbitcdCAqIGRlY3J5cHRpb24gaXMgcmVxdWlyZWQuXG4rXHQgKi9cbitcdGlmICgocmVtYXAgfHwgZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGRtYV9kaXJlY3RfdXNlX3Bvb2woZGV2LCBnZnApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdC8qXG4rXHQgKiBFbmNyeXB0aW9uIHNjaGVtZSBjaGFuZ2VkIGJldHdlZW4gdHdvIGtlcm5lbHMgYW5kIHRoaXMgbWlnaHQgY2F1c2VcbitcdCAqIGlzc3VlcyBpZiBkZXZpY2UvZHJpdmVyIGlzIG5vdCBoYW5kbGluZyBpdCBwcm9wZXJseS5cbitcdCAqL1xuK1x0V0FSTl9PTl9PTkNFKHNlci1cdTAwM2Vmb3JjZV9kZWNyeXB0ZWQgIT0gZm9yY2VfZG1hX3VuZW5jcnlwdGVkKGRldikpO1xuK1xuK1x0LypcbitcdCAqIGFyY2hfZG1hX3ByZXBfY29oZXJlbnQoKSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYW55IGNhY2hlIGxpbmVzIGZyb21cbitcdCAqIHRoZSBwcmV2aW91cyBrZXJuZWwsIGlmIHRoZSBkZXZpY2Ugd2FzIGNvaGVyZW50IHByZXZpb3VzbHkgb3IgY2FjaGVkXG4rXHQgKiBtYXBwaW5nIGluIHRoaXMga2VybmVsIGR1cmluZyBpbml0IGFyZSBub3QgcHJvYmxlbWF0aWMgZm9yXG4rXHQgKiBub24tY29oZXJlbnQgYWxsb2NhdGlvbnMuXG4rXHQgKi9cbitcdGlmIChyZW1hcCkge1xuK1x0XHRwZ3Byb3RfdCBwcm90ID0gZG1hX3BncHJvdChkZXYsIFBBR0VfS0VSTkVMLCBhdHRycyk7XG4rXG4rXHRcdGlmIChmb3JjZV9kbWFfdW5lbmNyeXB0ZWQoZGV2KSlcbitcdFx0XHRwcm90ID0gcGdwcm90X2RlY3J5cHRlZChwcm90KTtcbitcbitcdFx0YXJjaF9kbWFfcHJlcF9jb2hlcmVudChwYWdlLCBzaXplKTtcbitcbitcdFx0Y3B1X2FkZHIgPSBkbWFfY29tbW9uX2NvbnRpZ3VvdXNfcmVtYXAocGFnZSwgc2l6ZSwgcHJvdCxcbitcdFx0XHRcdFx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbitcdFx0aWYgKCFjcHVfYWRkcilcbitcdFx0XHRnb3RvIGVycjtcbitcdH0gZWxzZSB7XG4rXHRcdGNwdV9hZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpO1xuK1x0XHRpZiAoZG1hX3NldF9kZWNyeXB0ZWQoZGV2LCBjcHVfYWRkciwgc2l6ZSkpIHtcbitcdFx0XHRjcHVfYWRkciA9IE5VTEw7XG4rXHRcdFx0Z290byBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChzZXRfdW5jYWNoZWQpIHtcbitcdFx0YXJjaF9kbWFfcHJlcF9jb2hlcmVudChwYWdlLCBzaXplKTtcbitcdFx0Y3B1X2FkZHIgPSBhcmNoX2RtYV9zZXRfdW5jYWNoZWQoY3B1X2FkZHIsIHNpemUpO1xuK1x0XHRpZiAoSVNfRVJSKGNwdV9hZGRyKSkge1xuK1x0XHRcdGNwdV9hZGRyID0gTlVMTDtcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0KmRtYV9oYW5kbGUgPSBwaHlzX3RvX2RtYV9kaXJlY3QoZGV2LCBzZXItXHUwMDNlcGFnZV9waHlzKTtcbitcbitlcnI6XG4rXHRXQVJOX09OKCFraG9fcmVzdG9yZV9wYWdlcyhzZXItXHUwMDNlcGFnZV9waHlzLFxuK1x0XHRcdFx0ICAgMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNlci1cdTAwM2VzaXplKSkpO1xuK1x0a2hvX3Jlc3RvcmVfZnJlZShzZXIpO1xuK1xuK1x0LypcbitcdCAqIERNQSBkaXJlY3QgQVBJIGV4cGVjdHMgaGlnaC1vcmRlciBhbGxvY2F0aW9ucywgc28gc2V0IHJlZmNvdW50IG9mXG4rXHQgKiB0YWlsIHBhZ2VzIHRvIHplcm8uXG4rXHQgKi9cbitcdGZvciAoaSA9ICgxIFx1MDAzY1x1MDAzYyBnZXRfb3JkZXIoc2l6ZSkpIC0gMTsgaSBcdTAwM2UgMDsgLS1pKVxuK1x0XHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XG4rXG4rXHRyZXR1cm4gY3B1X2FkZHI7XG4rfVxuKyNlbmRpZlxuK1xuIHZvaWQgZG1hX2RpcmVjdF9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRcdHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1bnNpZ25lZCBsb25nIGF0dHJzKVxuIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMgYi9rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjg0MDNlYzQ3ODA3ZThcbi0tLSAvZGV2L251bGxcbisrKyBiL2tlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuY1xuQEAgLTAsMCArMSwyMDggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogS1VuaXQgdGVzdCBmb3IgRE1BIGFsbG9jYXRpb24gbGl2ZSB1cGRhdGUgcHJlc2VydmF0aW9uLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNja3VuaXQvc3RhdGljX3N0dWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXAtb3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWRpcmVjdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9kbWFfYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbitcbitzdGF0aWMgY29uc3Qgc2l6ZV90IGRtYV90ZXN0X3NpemVzW10gPSB7XG4rXHQxMjgsXG4rXHRQQUdFX1NJWkUsXG4rXHQyICogUEFHRV9TSVpFLFxuK1x0MyAqIFBBR0VfU0laRSxcbitcdDggKiBQQUdFX1NJWkUsXG4rfTtcbitcbitzdGF0aWMgdm9pZCBkbWFfc2l6ZV9kZXNjKGNvbnN0IHNpemVfdCAqc2l6ZSwgY2hhciAqZGVzYylcbit7XG4rXHRzbnByaW50ZihkZXNjLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUsIFwic2l6ZT0lenVcIiwgKnNpemUpO1xuK31cbitcbitLVU5JVF9BUlJBWV9QQVJBTShkbWFfc2l6ZSwgZG1hX3Rlc3Rfc2l6ZXMsIGRtYV9zaXplX2Rlc2MpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbW9ja19raG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlID0gcGh5c190b19wYWdlKHBoeXMpO1xuK1xuK1x0aWYgKCFraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQocGh5cywgbnJfcGFnZXMpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGtob191bnByZXNlcnZlX3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTtcbitcdHJldHVybiBwYWdlO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGZvbGlvICptb2NrX2tob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpXG4re1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGh5c190b19wYWdlKHBoeXMpKTtcbitcbitcdGlmICgha2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKHBoeXMsICgxIFx1MDAzY1x1MDAzYyBmb2xpb19vcmRlcihmb2xpbykpKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRraG9fdW5wcmVzZXJ2ZV9mb2xpbyhmb2xpbyk7XG4rXHRyZXR1cm4gZm9saW87XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4rXHRcdFx0XHRcdFx0ICAgIGJvb2wgY29oZXJlbnQsXG4rXHRcdFx0XHRcdFx0ICAgIGJvb2wgYXRvbWljLFxuK1x0XHRcdFx0XHRcdCAgICBzaXplX3Qgc2l6ZSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNpemUpO1xuK1x0ZG1hX2FkZHJfdCBoYW5kbGUxLCBoYW5kbGUyO1xuK1x0aW50IHJldCwgZXhwZWN0ZWRfcmV0ID0gMDtcbitcdHN0cnVjdCBkZXZpY2UgZGV2ID0gezB9O1xuK1x0Z2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTDtcbitcdHZvaWQgKmFkZHIxLCAqYWRkcjI7XG4rXHR1NjQgc3RhdGU7XG4rXG4rXHRrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9wYWdlcywgbW9ja19raG9fcmVzdG9yZV9wYWdlcyk7XG4rXHRrdW5pdF9hY3RpdmF0ZV9zdGF0aWNfc3R1Yih0ZXN0LCBraG9fcmVzdG9yZV9mb2xpbywgbW9ja19raG9fcmVzdG9yZV9mb2xpbyk7XG4rXG4rXHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZkZXYpO1xuK1x0ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDY0KTtcbitcdGRldi5kbWFfbWFzayA9IFx1MDAyNmRldi5jb2hlcmVudF9kbWFfbWFzaztcbisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRSkgfHwgXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVSkgfHwgXFxcbisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTEwpXG4rXHRkZXYuZG1hX2NvaGVyZW50ID0gY29oZXJlbnQ7XG4rI2VuZGlmXG4rXG4rXHRpZiAoYXRvbWljKVxuK1x0XHRnZnAgPSBHRlBfQVRPTUlDO1xuK1xuK1x0YWRkcjEgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBcdTAwMjZoYW5kbGUxLCBnZnApO1xuK1x0aWYgKCFhZGRyMSkge1xuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiRE1BIGFsbG9jYXRpb24gZmFpbGVkICh1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uKVwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKSBcdTAwMjZcdTAwMjYgZG1hX2lzX2Zyb21fcG9vbChhZGRyMSwgc2l6ZSkpIHtcbitcdFx0ZXhwZWN0ZWRfcmV0ID0gLUVPUE5PVFNVUFA7XG4rXHRcdGt1bml0X2luZm8odGVzdCwgXCJETUEgYWxsb2NhdGlvbiB1c2luZyBwb29sLCBleHBlY3RpbmcgLUVPUE5PVFNVUFBcIik7XG4rXHR9IGVsc2UgaWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cyhcdTAwMjZkZXYsIGhhbmRsZTEpLCBzaXplKSkge1xuK1x0XHRleHBlY3RlZF9yZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0a3VuaXRfaW5mbyh0ZXN0LCBcIkRNQSBhbGxvY2F0aW9uIHVzaW5nIENNQSwgZXhwZWN0aW5nIC1FT1BOT1RTVVBQXCIpO1xuK1x0fVxuK1xuK1x0cmV0ID0gZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBhZGRyMSwgc2l6ZSwgaGFuZGxlMSwgXHUwMDI2c3RhdGUpO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgZXhwZWN0ZWRfcmV0KTtcbitcbitcdGlmICghZXhwZWN0ZWRfcmV0KSB7XG4rXHRcdEtVTklUX0VYUEVDVF9UUlVFX01TRyh0ZXN0LFxuK1x0XHRcdFx0ICAgICAga2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKGRtYV90b19waHlzKFx1MDAyNmRldiwgaGFuZGxlMSksIG5yX3BhZ2VzKSxcbitcdFx0XHRcdCAgICAgIFwiQWxsb2NhdGVkIGJsb2NrIG5vdCB0cmFja2VkIGluIEtIT1wiKTtcbitcbitcdFx0YWRkcjIgPSBkbWFfcmVzdG9yZV9jb2hlcmVudF9hbGxvY2F0aW9uKFx1MDAyNmRldiwgc2l6ZSwgXHUwMDI2aGFuZGxlMiwgZ2ZwLCBzdGF0ZSk7XG4rXHRcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBhZGRyMik7XG4rXG4rXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBoYW5kbGUxLCBoYW5kbGUyKTtcbitcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBhZGRyMiwgaGFuZGxlMik7XG4rXHRcdEtVTklUX0VYUEVDVF9GQUxTRV9NU0codGVzdCxcbitcdFx0XHRcdCAgICAgICBraG9fdGVzdF9wYWdlc19wcmVzZXJ2ZWQoZG1hX3RvX3BoeXMoXHUwMDI2ZGV2LCBoYW5kbGUxKSwgbnJfcGFnZXMpLFxuK1x0XHRcdFx0ICAgICAgIFwiQWxsb2NhdGVkIGJsb2NrIHN0aWxsIHRyYWNrZWQgYWZ0ZXIgZnJlZVwiKTtcbitcdH0gZWxzZSB7XG4rXHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNmRldiwgc2l6ZSwgYWRkcjEsIGhhbmRsZTEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfY29oZXJlbnQoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdGNvbnN0IHNpemVfdCAqc2l6ZSA9IHRlc3QtXHUwMDNlcGFyYW1fdmFsdWU7XG4rXG4rXHR0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24odGVzdCwgdHJ1ZSwgZmFsc2UsICpzaXplKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X25vbl9jb2hlcmVudChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0Y29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbitcbitcdHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCBmYWxzZSwgZmFsc2UsICpzaXplKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X2NvaGVyZW50X2F0b21pYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0Y29uc3Qgc2l6ZV90ICpzaXplID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbitcbitcdHRlc3RfZG1hX2RpcmVjdF9wcmVzZXJ2ZV9yZXN0b3JlX2NvbW1vbih0ZXN0LCB0cnVlLCB0cnVlLCAqc2l6ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnRfYXRvbWljKHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRjb25zdCBzaXplX3QgKnNpemUgPSB0ZXN0LVx1MDAzZXBhcmFtX3ZhbHVlO1xuK1xuK1x0dGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHRlc3QsIGZhbHNlLCB0cnVlLCAqc2l6ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZG1hbV9wcmVzZXJ2YXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdGRtYV9hZGRyX3QgaGFuZGxlLCBub25fZG1hbV9oYW5kbGU7XG4rXHR2b2lkICphZGRyLCAqbm9uX2RtYW1fYWRkcjtcbitcdHN0cnVjdCBkZXZpY2UgZGV2ID0gezB9O1xuK1x0c2l6ZV90IHNpemUgPSAxMjg7XG4rXHR1NjQgc3RhdGU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0a3VuaXRfYWN0aXZhdGVfc3RhdGljX3N0dWIodGVzdCwga2hvX3Jlc3RvcmVfcGFnZXMsIG1vY2tfa2hvX3Jlc3RvcmVfcGFnZXMpO1xuK1x0a3VuaXRfYWN0aXZhdGVfc3RhdGljX3N0dWIodGVzdCwga2hvX3Jlc3RvcmVfZm9saW8sIG1vY2tfa2hvX3Jlc3RvcmVfZm9saW8pO1xuK1xuK1x0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2ZGV2KTtcbitcdGRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSyg2NCk7XG4rXHRkZXYuZG1hX21hc2sgPSBcdTAwMjZkZXYuY29oZXJlbnRfZG1hX21hc2s7XG4rI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9ERVZJQ0UpIHx8IFxcXG4rICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFUpIHx8IFxcXG4rICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFVfQUxMKVxuK1x0ZGV2LmRtYV9jb2hlcmVudCA9IHRydWU7XG4rI2VuZGlmXG4rXG4rXHRub25fZG1hbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNmRldiwgc2l6ZSwgXHUwMDI2bm9uX2RtYW1faGFuZGxlLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbm9uX2RtYW1fYWRkcikge1xuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiRE1BIGFsbG9jYXRpb24gZmFpbGVkXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRyZXQgPSBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXHUwMDI2ZGV2LCBub25fZG1hbV9hZGRyLCBzaXplLCBub25fZG1hbV9oYW5kbGUsIFx1MDAyNnN0YXRlKTtcbitcdEtVTklUX0VYUEVDVF9FUV9NU0codGVzdCwgcmV0LCAtRUlOVkFMLCBcIlByZXNlcnZpbmcgbm9uLWRldnJlcyBhbGxvY2F0aW9uIHNob3VsZCBmYWlsXCIpO1xuK1x0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBub25fZG1hbV9hZGRyLCBub25fZG1hbV9oYW5kbGUpO1xuK1xuK1x0YWRkciA9IGRtYW1fYWxsb2NfY29oZXJlbnQoXHUwMDI2ZGV2LCBzaXplLCBcdTAwMjZoYW5kbGUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFhZGRyKSB7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJETUEgYWxsb2NhdGlvbiBmYWlsZWRcIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJldCA9IGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbihcdTAwMjZkZXYsIGFkZHIsIHNpemUsIGhhbmRsZSwgXHUwMDI2c3RhdGUpO1xuK1x0S1VOSVRfQVNTRVJUX0VRX01TRyh0ZXN0LCByZXQsIDAsIFwiRmFpbGVkIHRvIHByZXNlcnZlIGRtYW0gYWxsb2NhdGlvblwiKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGtob190ZXN0X3BhZ2VzX3ByZXNlcnZlZChkbWFfdG9fcGh5cyhcdTAwMjZkZXYsIGhhbmRsZSksIDEpKTtcbitcbitcdGRtYW1fdW5wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKFx1MDAyNmRldiwgYWRkciwgc2l6ZSwgaGFuZGxlLCBzdGF0ZSk7XG4rXHRLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCwga2hvX3Rlc3RfcGFnZXNfcHJlc2VydmVkKGRtYV90b19waHlzKFx1MDAyNmRldiwgaGFuZGxlKSwgMSkpO1xuK1xuK1x0ZG1hbV9mcmVlX2NvaGVyZW50KFx1MDAyNmRldiwgc2l6ZSwgYWRkciwgaGFuZGxlKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRtYV9kaXJlY3RfdGVzdF9jYXNlc1tdID0ge1xuK1x0S1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2RtYV9kaXJlY3RfY29oZXJlbnQsIGRtYV9zaXplX2dlbl9wYXJhbXMpLFxuK1x0S1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2RtYV9kaXJlY3Rfbm9uX2NvaGVyZW50LCBkbWFfc2l6ZV9nZW5fcGFyYW1zKSxcbitcdEtVTklUX0NBU0VfUEFSQU0odGVzdF9kbWFfZGlyZWN0X2NvaGVyZW50X2F0b21pYywgZG1hX3NpemVfZ2VuX3BhcmFtcyksXG4rXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfZG1hX2RpcmVjdF9ub25fY29oZXJlbnRfYXRvbWljLCBkbWFfc2l6ZV9nZW5fcGFyYW1zKSxcbitcdEtVTklUX0NBU0UodGVzdF9kbWFtX3ByZXNlcnZhdGlvbiksXG4rXHR7fVxuK307XG4rXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBkbWFfZGlyZWN0X3Rlc3Rfc3VpdGUgPSB7XG4rXHQubmFtZSA9IFwiZG1hX2RpcmVjdF9saXZldXBkYXRlXCIsXG4rXHQudGVzdF9jYXNlcyA9IGRtYV9kaXJlY3RfdGVzdF9jYXNlcyxcbit9O1xuK2t1bml0X3Rlc3Rfc3VpdGUoZG1hX2RpcmVjdF90ZXN0X3N1aXRlKTtcbitcbitNT0RVTEVfSU1QT1JUX05TKFwiRVhQT1JURURfRk9SX0tVTklUX1RFU1RJTkdcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiS1VuaXQgdGVzdCBmb3IgRE1BIGRpcmVjdCBsaXZlIHVwZGF0ZSBwcmVzZXJ2YXRpb25cIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9tYXBwaW5nLmMgYi9rZXJuZWwvZG1hL21hcHBpbmcuY1xuaW5kZXggMjNlZDhlYjkyMzNlNTUuLmFlYzEyMjJhYjVhZWIxIDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9tYXBwaW5nLmNcbisrKyBiL2tlcm5lbC9kbWEvbWFwcGluZy5jXG5AQCAtMTIsNiArMTIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUtZG1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbXNhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWNfaGFuZG92ZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvZG1hX2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuQEAgLTM1LDEyICszNywyNSBAQCBzdHJ1Y3QgZG1hX2RldnJlcyB7XG4gXHR2b2lkXHRcdCp2YWRkcjtcbiBcdGRtYV9hZGRyX3RcdGRtYV9oYW5kbGU7XG4gXHR1bnNpZ25lZCBsb25nXHRhdHRycztcbisjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4rXHRib29sIGlzX3ByZXNlcnZlZDtcbisjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGRtYW1fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcbiB7XG4gXHRzdHJ1Y3QgZG1hX2RldnJlcyAqdGhpcyA9IHJlcztcbiBcbisjaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXG4rXHQvKlxuK1x0ICogRnJlZWluZyB0aGUgcHJlc2VydmVkIG1lbW9yeSBpcyBkYW5nZXJvdXMgYXMgaXQgY2FuIGNhdXNlIFVBRiBpbiB0aGVcbitcdCAqIGN1cnJlbnQgb3IgbmV4dCBrZXJuZWwgaWYgdGhlIG1lbW9yeSBpcyBzdGlsbCBiZWluZyB1c2VkIGJ5IHRoZVxuK1x0ICogZGV2aWNlLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTih0aGlzLVx1MDAzZWlzX3ByZXNlcnZlZCkpXG4rXHRcdHJldHVybjtcbisjZW5kaWZcbitcbiBcdGRtYV9mcmVlX2F0dHJzKGRldiwgdGhpcy1cdTAwM2VzaXplLCB0aGlzLVx1MDAzZXZhZGRyLCB0aGlzLVx1MDAzZWRtYV9oYW5kbGUsXG4gXHRcdFx0dGhpcy1cdTAwM2VhdHRycyk7XG4gfVxuQEAgLTYyOCw2ICs2NDMsMTIzIEBAIHU2NCBkbWFfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkbWFfZ2V0X3JlcXVpcmVkX21hc2spO1xuIFxuKyNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcbitpbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdCAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0ICpzdGF0ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XG4rXG4rXHRpZiAoZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgY3B1X2FkZHIpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoZG1hX2FsbG9jX2RpcmVjdChkZXYsIG9wcykpXG4rXHRcdHJldHVybiBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24oZGV2LCBjcHVfYWRkciwgc2l6ZSxcbitcdFx0XHRcdFx0XHQgICAgICBkbWFfaGFuZGxlLCBhdHRycyxcbitcdFx0XHRcdFx0XHQgICAgICBzdGF0ZSk7XG4rXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK0VYUE9SVF9TWU1CT0woZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMpO1xuK1xuK3ZvaWQgZG1hX3VucHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBzdGF0ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XG4rXG4rXHRpZiAoZG1hX2FsbG9jX2RpcmVjdChkZXYsIG9wcykpXG4rXHRcdGRtYV9kaXJlY3RfdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKGRldiwgc3RhdGUpO1xuK31cbitFWFBPUlRfU1lNQk9MKGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24pO1xuK1xuK3ZvaWQgKmRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdCAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXR0cnMsIHU2NCBzdGF0ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XG4rXHR2b2lkICpjcHVfYWRkciA9IE5VTEw7XG4rXG4rXHRXQVJOX09OX09OQ0UoIWRldi1cdTAwM2Vjb2hlcmVudF9kbWFfbWFzayk7XG4rXG4rXHRpZiAoZG1hX2FsbG9jX2RpcmVjdChkZXYsIG9wcykpXG4rXHRcdGNwdV9hZGRyID0gZG1hX2RpcmVjdF9yZXN0b3JlX2FsbG9jYXRpb24oZGV2LCBzaXplLCBkbWFfaGFuZGxlLFxuK1x0XHRcdFx0XHRcdFx0IGdmcCwgYXR0cnMsIHN0YXRlKTtcbitcbitcdGRlYnVnX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsICpkbWFfaGFuZGxlLCBjcHVfYWRkciwgYXR0cnMpO1xuK1x0cmV0dXJuIGNwdV9hZGRyO1xuK31cbitFWFBPUlRfU1lNQk9MKGRtYV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpO1xuK1xuK2ludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcbitcdFx0XHRcdCAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGF0dHJzLCB1NjQgKnN0YXRlKVxuK3tcbitcdHN0cnVjdCBkbWFfZGV2cmVzIG1hdGNoX2RhdGEgPSB7IHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlIH07XG4rXHRzdHJ1Y3QgZG1hX2RldnJlcyAqZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZHIgPSBkZXZyZXNfZmluZChkZXYsIGRtYW1fcmVsZWFzZSwgZG1hbV9tYXRjaCwgXHUwMDI2bWF0Y2hfZGF0YSk7XG4rXHRpZiAoIWRyKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChkci1cdTAwM2Vpc19wcmVzZXJ2ZWQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0gZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSwgZG1hX2hhbmRsZSwgYXR0cnMsIHN0YXRlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRkci1cdTAwM2Vpc19wcmVzZXJ2ZWQgPSB0cnVlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0woZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKTtcbitcbit2b2lkIGRtYW1fdW5wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG4rXHRcdFx0XHRzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1NjQgc3RhdGUpXG4re1xuK1x0c3RydWN0IGRtYV9kZXZyZXMgbWF0Y2hfZGF0YSA9IHsgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUgfTtcbitcdHN0cnVjdCBkbWFfZGV2cmVzICpkcjtcbitcbitcdGRyID0gZGV2cmVzX2ZpbmQoZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFx1MDAyNm1hdGNoX2RhdGEpO1xuK1x0aWYgKCFkcilcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFkci1cdTAwM2Vpc19wcmVzZXJ2ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdGRtYV91bnByZXNlcnZlX2FsbG9jYXRpb24oZGV2LCBzdGF0ZSk7XG4rXHRkci1cdTAwM2Vpc19wcmVzZXJ2ZWQgPSBmYWxzZTtcbit9XG4rRVhQT1JUX1NZTUJPTChkbWFtX3VucHJlc2VydmVfYWxsb2NhdGlvbik7XG4rXG4rdm9pZCAqZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdCAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhdHRycywgdTY0IHN0YXRlKVxuK3tcbitcdHN0cnVjdCBkbWFfZGV2cmVzICpkcjtcbitcdHZvaWQgKnZhZGRyO1xuK1xuK1x0ZHIgPSBkZXZyZXNfYWxsb2MoZG1hbV9yZWxlYXNlLCBzaXplb2YoKmRyKSwgZ2ZwKTtcbitcdGlmICghZHIpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dmFkZHIgPSBkbWFfcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwLCBhdHRycywgc3RhdGUpO1xuK1x0aWYgKCF2YWRkcikge1xuK1x0XHRkZXZyZXNfZnJlZShkcik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0ZHItXHUwMDNldmFkZHIgPSB2YWRkcjtcbitcdGRyLVx1MDAzZWRtYV9oYW5kbGUgPSAqZG1hX2hhbmRsZTtcbitcdGRyLVx1MDAzZXNpemUgPSBzaXplO1xuK1x0ZHItXHUwMDNlYXR0cnMgPSBhdHRycztcbitcbitcdGRldnJlc19hZGQoZGV2LCBkcik7XG4rXG4rXHRyZXR1cm4gdmFkZHI7XG4rfVxuK0VYUE9SVF9TWU1CT0woZG1hbV9yZXN0b3JlX2FsbG9jYXRpb25fYXR0cnMpO1xuKyNlbmRpZlxuK1xuIHZvaWQgKmRtYV9hbGxvY19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLFxuIFx0XHRnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIGF0dHJzKVxuIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL3Bvb2wuYyBiL2tlcm5lbC9kbWEvcG9vbC5jXG5pbmRleCAyYjJmYmI3MDkyNDI5YS4uNzg0OTY1Njg5NzNmZWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL3Bvb2wuY1xuKysrIGIva2VybmVsL2RtYS9wb29sLmNcbkBAIC0zLDYgKzMsOSBAQFxuICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTHRkLlxuICAqIENvcHlyaWdodCAoQykgMjAyMCBHb29nbGUgTExDXG4gICovXG4rXG4rI2luY2x1ZGUgXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXHUwMDNlXG5AQCAtMzA3LDMgKzMxMCwxNyBAQCBib29sIGRtYV9mcmVlX2Zyb21fcG9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSlcbiBcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4rXG4rYm9vbCBkbWFfaXNfZnJvbV9wb29sKHZvaWQgKnN0YXJ0LCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2wgPSBOVUxMO1xuK1xuK1x0d2hpbGUgKChwb29sID0gZG1hX2d1ZXNzX3Bvb2wocG9vbCwgMCkpKSB7XG4rXHRcdGlmICghZ2VuX3Bvb2xfaGFzX2FkZHIocG9vbCwgKHVuc2lnbmVkIGxvbmcpc3RhcnQsIHNpemUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChkbWFfaXNfZnJvbV9wb29sKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE1OjEwLjA2Mjg3NDc3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNzU2NDQxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBETUEgRGlyZWN0IExpdmV1cGRhdGUgUHJlc2VydmF0aW9uIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQncyBhbGwgYWJvdXQgYWRkaW5nIHN1cHBvcnQgZm9yIFwiRE1BIGRpcmVjdCBsaXZldXBkYXRlIHByZXNlcnZhdGlvbixcIiB3aGljaCBpcyBjbGVhcmx5IHRpZWQgaW50byB0aGUgS2V4ZWMgSGFuZE92ZXIgKEtITykgc3lzdGVtLiBUaGV5J3ZlIGludHJvZHVjZWQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb25gLCBgZG1hX2RpcmVjdF91bnByZXNlcnZlX2FsbG9jYXRpb25gLCBhbmQgYGRtYV9kaXJlY3RfcmVzdG9yZV9hbGxvY2F0aW9uYCwgYWxvbmcgd2l0aCBhIEtVbml0IHRlc3QgaW4gYGtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZXkndmUgYWxzbyBhZGRlZCB0aGUgZXhwZWN0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgRE1BX0xJVkVVUERBVEVgIGFuZCBgRE1BX0xJVkVVUERBVEVfS1VOSVRfVEVTVGAuXG5cbkJ1dCBub3cgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBhY2Nlc3NpYmxlIGlzIHRoaXM/IElzIHRoaXMgZnVuY3Rpb25hbGl0eSBtZWFudCB0byBiZSBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCwgb3IgYXJlIHdlIGV4cG9zaW5nIHRoaXMgdG8gdXNlcnNwYWNlIHNvbWVob3c/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFjaGFiaWxpdHkgaGVyZS4gVGhlIGZ1bmN0aW9ucyAqYXJlKiBleHBvcnRlZCwgd2hpY2ggaXMgYSBiaXQgb2YgYSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBiZWluZyB1c2VkLiBgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnNgIGFuZCBgZG1hX3Jlc3RvcmVfYWxsb2NhdGlvbl9hdHRyc2AgYXJlIGV4cG9ydGVkLCBmb3IgZXhhbXBsZS4gU28sIEkgbmVlZCB0byBrbm93IGlmIGFueSBvZiB0aGVtIGFyZSBhY3R1YWxseSAqdXNlZCogYnkgYW55dGhpbmcsIG9yIGlmIHRoZXkncmUganVzdCBiZWluZyBleHBvcnRlZCBmb3IgdGhlIHNha2Ugb2YgY29tcGxldGVuZXNzLiBUaW1lIHRvIGRvIGEgcXVpY2sgc2VhcmNoLiBJJ2xsIHNlYXJjaCBmb3IgY2FsbHMgdG8gYGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzYCBhbmQgYGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uYCB0byBkZXRlcm1pbmUgaXRzIHVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NjUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNToxNS4zMzg1MjI2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjgzMjY4OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD0yMTE9aW50IGRtYV9tbWFwX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC0yMTMtI2lmZGVmIENPTkZJR19ETUFfTElWRVVQREFURVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDoyMTQ6aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTIxNS1cXHRcXHRcXHRcXHQgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg9NTEwPXN0YXRpYyBpbmxpbmUgYm9vbCBkbWFfbmVlZF91bm1hcChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNTE2LSNpZiAhZGVmaW5lZChDT05GSUdfRE1BX0xJVkVVUERBVEUpIHx8ICFkZWZpbmVkKENPTkZJR19IQVNfRE1BKVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDo1MTc6c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNTE4LVxcdFxcdFxcdFxcdFxcdFxcdHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg9Njc3PXN0YXRpYyBpbmxpbmUgaW50IGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNjc5LXtcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg6NjgwOlxcdHJldHVybiBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLFxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC02ODEtXFx0XFx0XFx0XFx0XFx0ICAgICBkbWFfaGFuZGxlLCAwLCBzdGF0ZSk7XFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYz02NDQ9RVhQT1JUX1NZTUJPTF9HUEwoZG1hX2dldF9yZXF1aXJlZF9tYXNrKTtcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY0Ni0jaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXFxua2VybmVsL2RtYS9tYXBwaW5nLmM6NjQ3OmludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY0OC1cXHRcXHRcXHRcXHQgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NjItfVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjY2MzpFWFBPUlRfU1lNQk9MKGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKTtcXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NjQtXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYz02OTI9aW50IGRtYW1fcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzA2LVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjcwNzpcXHRyZXQgPSBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLCBkbWFfaGFuZGxlLCBhdHRycywgc3RhdGUpO1xcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcwOC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNToyMS4wMjE4MDA5NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI4OTMzMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZS5cblxuKipBbmFseXppbmcgS2VybmVsIEZ1bmN0aW9uIFVzYWdlKipcblxuQWxyaWdodCwgdGhlIGNvZGUgZGVmaW5lcyBhbmQgZXhwb3J0cyBzb21ldGhpbmcsIGJ1dCBpdCdzIG5vdCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmUgZWxzZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLi4uIGludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIGl0J3MgZWl0aGVyOiBhKSBhbiBpbmNvbXBsZXRlIGZlYXR1cmUsIGIpIGEgcGllY2Ugb2YgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZ1dHVyZSB1c2UsIG9yIGMpIHNvbWV0aGluZyB0aGF0IGhhcyBiZWVuIGFkZGVkIGFuZCAqc2hvdWxkKiBiZSB1c2VkLCBidXQgaXNuJ3QgYmVpbmcgY29ycmVjdGx5IGNhbGxlZC4gXG5cbkJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUgcXVpY2tseSBncmVwIHRoZSBjb2RlYmFzZSBmb3IgYGRtYV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uYCBhbmQgYGRtYW1fcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvbmAuIEkgbmVlZCB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgdGhhdCBpdCdzIGp1c3QgYmVpbmcgaW52b2tlZCB1bmRlciBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lIG9yIHRocm91Z2ggYSBtYWNybyBvciBpbmxpbmUgZnVuY3Rpb24uIENoZWNraW5nIHRoaXMgd2lsbCBzYXZlIG1lIGEgbG90IG9mIGd1ZXNzd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNToyNC4xNTA3Mzk0NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyMTk0NTUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWFfcHJlc2VydmVfY29oZXJlbnRfYWxsb2NhdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmg9NjcwPXN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNjc2LVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDo2Nzc6c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtNjc4LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBzaXplLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHU2NCAqc3RhdGUpXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmM9NTM9c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy05NC1cXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmM6OTU6XFx0cmV0ID0gZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXFx1MDAyNmRldiwgYWRkcjEsIHNpemUsIGhhbmRsZTEsIFxcdTAwMjZzdGF0ZSk7XFxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTk2LVxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIGV4cGVjdGVkX3JldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE1OjI5Ljg3MjY5MzYyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NTcxMDM5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIERNQSBNZW1vcnkgQWxsb2NhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCBtZSBzZWUuLi4gYmFzZWQgb24gdGhlIGluaXRpYWwgc2NhbiwgaXQgKmxvb2tzKiBsaWtlIHRoZXNlIGBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb25gIGZ1bmN0aW9ucyBhcmUgZXhjbHVzaXZlbHkgdXRpbGl6ZWQgd2l0aGluIHRoZSBLVW5pdCB0ZXN0IGxvY2F0ZWQgaW4gYGtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuY2AuIFRoYXQncyBhIGJpdCBzdXJwcmlzaW5nLiBJIGV4cGVjdGVkIGJyb2FkZXIgdXNhZ2UsIGdpdmVuIHRoZSBuYXR1cmUgb2YgY29oZXJlbnQgRE1BIGFsbG9jYXRpb24uIEkgbWVhbiwgaXQncyBhIGZ1bmRhbWVudGFsIG9wZXJhdGlvbi5cblxuSG93ZXZlciwgdGhlIGltbWVkaWF0ZSBjb25jbHVzaW9uIHRoYXQgSSBjYW4gZHJhdyBpcyB0aGF0IHRoZXkgYXJlIHV0aWxpemVkIG9ubHkgaW4gdGhpcyBvbmUgc3BlY2lmaWMgYXJlYS5cblxuQnV0LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IHN0cm9uZyBjb25jbHVzaW9uIG9yIGFzc3VtcHRpb25zLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiAqSXMqIHRoYXQgdHJ1bHkgdGhlIGNhc2U/IEkgbmVlZCB0byBwZXJmb3JtIGEgbW9yZSByaWdvcm91cyBzZWFyY2ggdG8gY29uZmlybSB0aGF0IHRoZXJlIGlzbid0IHNvbWUgc3VidGxlLCBpbmRpcmVjdCB1c2FnZSBvciBjYWxsIHBhdGggdGhhdCBJIG1pc3NlZCBpbml0aWFsbHkuIEkgbmVlZCB0byBtYWtlICpzdXJlKiB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGluc3RhbmNlcyBvZiBgZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uYCBiZWluZyBjYWxsZWQsIHBlcmhhcHMgdGhyb3VnaCBhbiBpbnRlcm1lZGlhcnkgZnVuY3Rpb24gb3IgYSBtYWNyby4gSSBkb24ndCB3YW50IHRvIGp1bXAgdG8gdGhlIHdyb25nIGNvbmNsdXNpb25zLiBJIG5lZWQgYSBicm9hZGVyIHNjb3BlIG9mIHRoZSB0ZXN0IHRvIG1ha2UgbXkgc3RhdGVtZW50IGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDMzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6MTU6MzQuNjI5ODAxMTY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NTA5NTM0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD04MjA9c3RhdGljIGlubGluZSB2b2lkICpkbWFtX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtODI2LVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDo4Mjc6c3RhdGljIGlubGluZSBpbnQgZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTgyOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdTY0ICpzdGF0ZSlcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYz0xNDQ9c3RhdGljIHZvaWQgdGVzdF9kbWFtX3ByZXNlcnZhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtMTcwLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYzoxNzE6XFx0cmV0ID0gZG1hbV9wcmVzZXJ2ZV9jb2hlcmVudF9hbGxvY2F0aW9uKFxcdTAwMjZkZXYsIG5vbl9kbWFtX2FkZHIsIHNpemUsIG5vbl9kbWFtX2hhbmRsZSwgXFx1MDAyNnN0YXRlKTtcXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmMtMTcyLVxcdEtVTklUX0VYUEVDVF9FUV9NU0codGVzdCwgcmV0LCAtRUlOVkFMLCBcXFwiUHJlc2VydmluZyBub24tZGV2cmVzIGFsbG9jYXRpb24gc2hvdWxkIGZhaWxcXFwiKTtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy0xODAtXFxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jOjE4MTpcXHRyZXQgPSBkbWFtX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oXFx1MDAyNmRldiwgYWRkciwgc2l6ZSwgaGFuZGxlLCBcXHUwMDI2c3RhdGUpO1xcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy0xODItXFx0S1VOSVRfQVNTRVJUX0VRX01TRyh0ZXN0LCByZXQsIDAsIFxcXCJGYWlsZWQgdG8gcHJlc2VydmUgZG1hbSBhbGxvY2F0aW9uXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE1OjQwLjI4MDc5NTQ5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MjU2OTEzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRE1BIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldyBmdW5jdGlvbnMsIGFuZCBpdCBzZWVtcyB0aGV5J3JlIGV4Y2x1c2l2ZWx5IGNhbGxlZCB3aXRoaW4gdGhlIEtVbml0IHRlc3RzLiBUaGF0IHJhaXNlcyBhIHJlZCBmbGFnLiBTaW5jZSB0aGV5J3JlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSDigJMgbm8gc3lzdGVtIGNhbGxzLCBubyBkcml2ZXIgaW50ZWdyYXRpb25zIHlldCDigJMgdGhleSdyZSBjb21wbGV0ZWx5IG9mZiB0aGUgcmFkYXIgZm9yIHN5emthbGxlci4gQW5kIHdhaXQsIHN5emthbGxlciAqZG9lc24ndCogZnV6eiBLVW5pdCB0ZXN0cyBkaXJlY3RseSBhbnl3YXksIGRvZXMgaXQ/IFNvIGV2ZW4gaWYgaXQgKmNvdWxkKiwgd2UncmUgbG9va2luZyBhdCBhIGNsb3NlZC1vZmYgQVBJIHJpZ2h0IG5vdy5cblxuSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgbW9kaWZpZWQgZmlsZXM/IExldCdzIHNlZS4uLiBhIHdob2xlIHNsZXcgb2YgdGhlbSEgYGluY2x1ZGUvbGludXgvZG1hLWRpcmVjdC5oYCwgYGluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaGAsIGBpbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmhgLCBgaW5jbHVkZS9saW51eC9raG8vYWJpL2RtYV9hbGxvYy5oYCwgYW5kIHRoZW4gYSBidW5jaCBvZiBmaWxlcyB1bmRlciBga2VybmVsL2RtYS9gOiBgS2NvbmZpZ2AsIGBNYWtlZmlsZWAsIGBjb2hlcmVudC5jYCwgYGNvbnRpZ3VvdXMuY2AsIGBkaXJlY3QuY2AsIGBkaXJlY3RfdGVzdC5jYCwgYG1hcHBpbmcuY2AsIGFuZCBgcG9vbC5jYC5cblxuUmlnaHQuIEJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBxdWlja2x5LiBJIG5lZWQgdG8ga25vdyBpZiB0aGVzZSBuZXdseSBhZGRlZCBmdW5jdGlvbnM6IGBkbWFfaXNfZnJvbV9jbWFgLCBgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50YCwgYW5kIGBkbWFfaXNfZnJvbV9wb29sYCwgYXJlICphY3R1YWxseSogdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlIGJhc2UuIFRoYXTigJlzIHRoZSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNDQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6MTU6NDUuODA2NDkyMzM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQyNjUxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtYV9pc19mcm9tX2NtYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg9MTA4PXZvaWQgZG1hX2NvbnRpZ3VvdXNfZWFybHlfZml4dXAocGh5c19hZGRyX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg6MTA5OmJvb2wgZG1hX2lzX2Zyb21fY21hKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTEwLSNlbHNlIC8qIENPTkZJR19ETUFfQ01BICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg9MTQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTQ5LVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaDoxNTA6c3RhdGljIGlubGluZSBib29sIGRtYV9pc19mcm9tX2NtYShwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTUxLXtcXG4tLVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jPTE0MD1zdGF0aWMgaW50IGRtYV9jbWFfY2hlY2tfYXJlYShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy0xNDgtXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6MTQ5OmJvb2wgZG1hX2lzX2Zyb21fY21hKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTE1MC17XFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy0xNTctfVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjE1ODpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGRtYV9pc19mcm9tX2NtYSk7XFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtMTU5LVxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYz0zMTM9aW50IGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy0zMjMtXFx0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XFxua2VybmVsL2RtYS9kaXJlY3QuYzozMjQ6XFx0aWYgKGRtYV9pc19mcm9tX2NtYShkbWFfdG9fcGh5cyhkZXYsIGRtYV9oYW5kbGUpLCBzaXplKSlcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTMyNS1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmM9NTM9c3RhdGljIHZvaWQgdGVzdF9kbWFfZGlyZWN0X3ByZXNlcnZlX3Jlc3RvcmVfY29tbW9uKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYy04OS1cXHRcXHRrdW5pdF9pbmZvKHRlc3QsIFxcXCJETUEgYWxsb2NhdGlvbiB1c2luZyBwb29sLCBleHBlY3RpbmcgLUVPUE5PVFNVUFBcXFwiKTtcXG5rZXJuZWwvZG1hL2RpcmVjdF90ZXN0LmM6OTA6XFx0fSBlbHNlIGlmIChkbWFfaXNfZnJvbV9jbWEoZG1hX3RvX3BoeXMoXFx1MDAyNmRldiwgaGFuZGxlMSksIHNpemUpKSB7XFxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTkxLVxcdFxcdGV4cGVjdGVkX3JldCA9IC1FT1BOT1RTVVBQO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNTo1MS4wNDkxNTI0NTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4ODQzNTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlPyBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0IHNlZW1zIHByZXR0eSBpc29sYXRlZC4gSSdtIHNlZWluZyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AgYW5kIGBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb25gLCBhcmUgb25seSB1dGlsaXplZCB3aXRoaW4gdGhlIG5ldyBmdW5jdGlvbnMgSSdtIGV4YW1pbmluZyBhbmQsIG9mIGNvdXJzZSwgdGhlIEtVbml0IHRlc3RzLiBUaGF0J3MgdGhlIGltbWVkaWF0ZSBzY29wZS4gQnV0IGhlcmUncyB0aGUga2lja2VyOiBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmVuJ3QgYWN0dWFsbHkgY2FsbGVkICphbnl3aGVyZSogZWxzZSB3aXRoaW4gdGhlIGtlcm5lbCBwcm9wZXIuIE5vIGRyaXZlcnMsIG5vIGNvcmUga2VybmVsIGNvZGUg4oCTIG5vdGhpbmcgaXMgZGlyZWN0bHkgY2FsbGluZyBlaXRoZXIgYGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzYCBvciBgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uYC5cblxuU28sIHRoZSBvYnZpb3VzIGNvbmNsdXNpb24gaXMgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiBCdXQsIEkgbmVlZCB0byBiZSAqc3VyZSouIFdhaXQsIGNvdWxkIHRoZXJlIGJlIGEgY2FsbCBzb21ld2hlcmUgZWxzZT8gQ291bGQgdGhpcyBiZSByZWxhdGVkIHRvIHNvbWUgS2V4ZWMgSGFuZE92ZXIgY29kZT8gVGhpcyBmZWVscyBmYW1pbGlhciBzb21laG93LiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoaXMgaXMgYSBoaWRkZW4gY2FsbCBpbiBhbm90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbC4gVGltZSB0byBnbyBodW50aW5nIGZvciBvdGhlciBpbnN0YW5jZXMgb2YgYGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzYCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNTo1NS4yMzc1OTM4ODNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjExMzAyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oPTIxMT1pbnQgZG1hX21tYXBfbm9uY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTIxMy0jaWZkZWYgQ09ORklHX0RNQV9MSVZFVVBEQVRFXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjIxNDppbnQgZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgtMjE1LVxcdFxcdFxcdFxcdCAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD01MTA9c3RhdGljIGlubGluZSBib29sIGRtYV9uZWVkX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC01MTYtI2lmICFkZWZpbmVkKENPTkZJR19ETUFfTElWRVVQREFURSkgfHwgIWRlZmluZWQoQ09ORklHX0hBU19ETUEpXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oOjUxNzpzdGF0aWMgaW5saW5lIGludCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLFxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC01MTgtXFx0XFx0XFx0XFx0XFx0XFx0c2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaD02Nzc9c3RhdGljIGlubGluZSBpbnQgZG1hX3ByZXNlcnZlX2NvaGVyZW50X2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaC02Nzkte1xcbmluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaDo2ODA6XFx0cmV0dXJuIGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oLTY4MS1cXHRcXHRcXHRcXHRcXHQgICAgIGRtYV9oYW5kbGUsIDAsIHN0YXRlKTtcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jPTY0ND1FWFBPUlRfU1lNQk9MX0dQTChkbWFfZ2V0X3JlcXVpcmVkX21hc2spO1xcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjQ2LSNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo2NDc6aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjQ4LVxcdFxcdFxcdFxcdCAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSxcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY2Mi19XFxua2VybmVsL2RtYS9tYXBwaW5nLmM6NjYzOkVYUE9SVF9TWU1CT0woZG1hX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMpO1xcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY2NC1cXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jPTY5Mj1pbnQgZG1hbV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYy03MDYtXFxua2VybmVsL2RtYS9tYXBwaW5nLmM6NzA3OlxcdHJldCA9IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsIGRtYV9oYW5kbGUsIGF0dHJzLCBzdGF0ZSk7XFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzA4LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE2OjAwLjc5ODc0MjUwOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQzNzkxMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERNQSBMaXZldXBkYXRlIFByZXNlcnZhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggY2xhaW1zIHRvIGJyaW5nIGluIGEgbmV3IEFQSSBzcGVjaWZpY2FsbHkgZm9yIERNQSBsaXZldXBkYXRlIHByZXNlcnZhdGlvbiwgcmlnaHQ/IEJ1dCBoYW5nIG9uIGEgc2Vjb25kLi4uaXQncyBub3QgYWN0dWFsbHkgKnVzZWQqIGFueXdoZXJlIHlldCwgYnkgYW55IGRyaXZlciBvciBjb3JlIHN5c3RlbS4gSG1tLiBTbywgbG9naWNhbGx5LCB0aGF0IG1lYW5zIGl0J3MgdG90YWxseSBpbmFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYXQgdGhpcyBzdGFnZS4gQW5kIGlmIGl0J3Mgbm90IGV4cG9zZWQsIHRoYXQgbWVhbnMgd2UgY2FuJ3QgZXZlbiB0cnkgdG8gZnV6eiBpdC4gTm90IHZlcnkgZXhjaXRpbmcsIGhvbmVzdGx5LlxuXG5XYWl0Li4uIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGNoYW5nZXMgY3JlZXBpbmcgaW50byBleGlzdGluZyBmdW5jdGlvbnM/IEl04oCZcyBhbHdheXMgdGhlIGhpZGRlbiBzdHVmZiB0aGF0IGdldHMgeW91LiBMZXQncyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBkbWFtX3JlbGVhc2VgIGluIGBrZXJuZWwvZG1hL21hcHBpbmcuY2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBhbnkgY29sbGF0ZXJhbCBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU3NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE2OjA0LjY0NDYwNzU0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NzEyNjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWFtX3JlbGVhc2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDEzPXN0cnVjdCBmZWNfZG1hX2RldnJlcyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDE5OnN0YXRpYyB2b2lkIGZlY19kbWFtX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTQyNj1zdGF0aWMgdm9pZCAqZmVjX2RtYW1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjQzMjpcXHRkciA9IGRldnJlc19hbGxvYyhmZWNfZG1hbV9yZWxlYXNlLCBzaXplb2YoKmRyKSwgZ2ZwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MzMtXFx0aWYgKCFkcilcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jPTM1PXN0cnVjdCBkbWFfZGV2cmVzIHtcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTQ0LVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjQ1OnN0YXRpYyB2b2lkIGRtYW1fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcXG5rZXJuZWwvZG1hL21hcHBpbmcuYy00Ni17XFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYz04ND12b2lkIGRtYW1fZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkcixcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTg4LVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjg5OlxcdFdBUk5fT04oZGV2cmVzX2Rlc3Ryb3koZGV2LCBkbWFtX3JlbGVhc2UsIGRtYW1fbWF0Y2gsIFxcdTAwMjZtYXRjaF9kYXRhKSk7XFxua2VybmVsL2RtYS9tYXBwaW5nLmMtOTAtXFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7XFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYz0xMDg9dm9pZCAqZG1hbV9hbGxvY19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLFxcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmMtMTEzLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjExNDpcXHRkciA9IGRldnJlc19hbGxvYyhkbWFtX3JlbGVhc2UsIHNpemVvZigqZHIpLCBnZnApO1xcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTExNS1cXHRpZiAoIWRyKVxcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmM9NjkyPWludCBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTY5OS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo3MDA6XFx0ZHIgPSBkZXZyZXNfZmluZChkZXYsIGRtYW1fcmVsZWFzZSwgZG1hbV9tYXRjaCwgXFx1MDAyNm1hdGNoX2RhdGEpO1xcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcwMS1cXHRpZiAoIWRyKVxcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmM9NzE2PXZvaWQgZG1hbV91bnByZXNlcnZlX2FsbG9jYXRpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcyMS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo3MjI6XFx0ZHIgPSBkZXZyZXNfZmluZChkZXYsIGRtYW1fcmVsZWFzZSwgZG1hbV9tYXRjaCwgXFx1MDAyNm1hdGNoX2RhdGEpO1xcbmtlcm5lbC9kbWEvbWFwcGluZy5jLTcyMy1cXHRpZiAoIWRyKVxcbi0tXFxua2VybmVsL2RtYS9tYXBwaW5nLmM9NzM0PXZvaWQgKmRtYW1fcmVzdG9yZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYy03NDAtXFxua2VybmVsL2RtYS9tYXBwaW5nLmM6NzQxOlxcdGRyID0gZGV2cmVzX2FsbG9jKGRtYW1fcmVsZWFzZSwgc2l6ZW9mKCpkciksIGdmcCk7XFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzQyLVxcdGlmICghZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE2OjA5LjQ0MTc0ODY4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjg0ODg5ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRE1BIFJlbGVhc2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkbWFtX3JlbGVhc2VgIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBETUEgbGl2ZSB1cGRhdGVzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgY2hlY2s6XG5cbmBgYGNcbiNpZmRlZiBDT05GSUdfRE1BX0xJVkVVUERBVEVcblx0Lypcblx0ICogRnJlZWluZyB0aGUgcHJlc2VydmVkIG1lbW9yeSBpcyBkYW5nZXJvdXMgYXMgaXQgY2FuIGNhdXNlIFVBRiBpbiB0aGVcblx0ICogY3VycmVudCBvciBuZXh0IGtlcm5lbCBpZiB0aGUgbWVtb3J5IGlzIHN0aWxsIGJlaW5nIHVzZWQgYnkgdGhlXG5cdCAqIGRldmljZS5cblx0ICovXG5cdGlmIChXQVJOX09OKHRoaXMtXHUwMDNlaXNfcHJlc2VydmVkKSlcblx0XHRyZXR1cm47XG4jZW5kaWZcbmBgYFxuXG5Ob3csIHRoZSBpc3N1ZSBJJ20gc2VlaW5nIGlzIHRoYXQgYHRoaXMtXHUwMDNlaXNfcHJlc2VydmVkYCBzZWVtcyB0byAqb25seSogYmUgc2V0IGluIGBkbWFtX3ByZXNlcnZlX2FsbG9jYXRpb25fYXR0cnNgLCBhbmQgYXMgZmFyIGFzIEkgY2FuIHRlbGwsICp0aGF0KiBmdW5jdGlvbiBpcyBuZXZlciBhY3R1YWxseSBjYWxsZWQhIFRoZSBhbGxvY2F0aW9uIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgYGRldnJlc19hbGxvY2AsIHNvIHRoZSBmbGFnIHdpbGwgYWx3YXlzIGJlIGZhbHNlIG9yIHplcm8uIFRoaXMgbWVhbnMgdGhpcyBjaGVjayB3aWxsIG5ldmVyIGFjdHVhbGx5IHRyaWdnZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIGZ1bmN0aW9uYWxseSBkZWFkIGluIGFueSByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguIEl0J3MgYSBuby1vcCwgYXQgbGVhc3QgZm9yIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5UaGUgcmVzdCBvZiB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBpbnRyb2R1Y2luZyBuZXcgZnVuY3Rpb25zIGFuZCBhIEtVbml0IHRlc3QuIEhvd2V2ZXIsIHNpbmNlIHRoZSBuZXcgQVBJIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHVzZWQgKmFueXdoZXJlKiBpbiB0aGUgZXhpc3RpbmcgY29kZSwgaXQncyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiBUaGVyZSBhcmUgbm8gY2FsbGVycy4gVGh1cywgZnV6emluZyB0aG9zZSBuZXcgZnVuY3Rpb25zIHdvdWxkbid0IGJlIHZhbHVhYmxlIHNpbmNlIHRoZXkgYXJlbid0IHBhcnQgb2YgYW55IGV4ZWN1dGlvbiBwYXRoLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgYGRtYV9pc19mcm9tX2Rldl9jb2hlcmVudGAgaXMgdXRpbGl6ZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBUaGF0IHNob3VsZCBiZSBhIHF1aWNrIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc4OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNjoxNC43MjY2NDIwNTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTkwODA2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaD0xNjM9aW50IGRtYV9tbWFwX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oLTE2NC1cXHRcXHR2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsIGludCAqcmV0KTtcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg6MTY1OmJvb2wgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpO1xcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaC0xNjYtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg9MTY3PXN0YXRpYyBpbmxpbmUgaW50IGRtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTc1LSNkZWZpbmUgZG1hX21tYXBfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCB2bWEsIHZhZGRyLCBvcmRlciwgcmV0KSAoMClcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmg6MTc2OiNkZWZpbmUgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KGRldiwgdmFkZHIpIChmYWxzZSlcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMTc3LVxcbi0tXFxua2VybmVsL2RtYS9jb2hlcmVudC5jPTIyNz1pbnQgZG1hX3JlbGVhc2VfZnJvbV9kZXZfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb3JkZXIsIHZvaWQgKnZhZGRyKVxcbi0tXFxua2VybmVsL2RtYS9jb2hlcmVudC5jLTIzMy1cXG5rZXJuZWwvZG1hL2NvaGVyZW50LmM6MjM0OmJvb2wgZG1hX2lzX2Zyb21fZGV2X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIpXFxua2VybmVsL2RtYS9jb2hlcmVudC5jLTIzNS17XFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYz02NDc9aW50IGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYy02NTItXFxua2VybmVsL2RtYS9tYXBwaW5nLmM6NjUzOlxcdGlmIChkbWFfaXNfZnJvbV9kZXZfY29oZXJlbnQoZGV2LCBjcHVfYWRkcikpXFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNjU0LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6MTY6MTguOTQ1NzM2Mjg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Mjc1MjAxMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBETUEgQWxsb2NhdGlvbiBBdHRyaWJ1dGVzKipcblxuUmlnaHQsIGl0J3MgY2xlYXIgdGhlIGNvcmUgZm9jdXMgaGVyZSBpcyBzb2xlbHkgd2l0aGluIGBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRyc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyB0aGUgZXhjbHVzaXZlIGxvY2F0aW9uLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgdmVyaWZ5IHRoYXQgYGRtYV9pc19mcm9tX3Bvb2xgIGlzbid0IHVzZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCBJJ20gbm90IG92ZXJsb29raW5nIGFueSBvdGhlciBwb3RlbnRpYWwgY2FsbHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgaW1wYWN0ZWQgYnkgdGhpcy4gQSB0aG9yb3VnaCBncmVwIG9yIGNvZGUgaW5zcGVjdGlvbiBpcyBpbiBvcmRlci4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgZG1hX2lzX2Zyb21fcG9vbGAgaXMgb25seSByZWZlcmVuY2VkIHdpdGhpbiB0aGF0IG9uZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkwNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjE2OjIxLjg3MzI2MjQyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4OTc2OTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWFfaXNfZnJvbV9wb29sXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaD0yMjY9Ym9vbCBkbWFfZnJlZV9mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUpO1xcbmluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaC0yMjctXFxuaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oOjIyODpib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgtMjI5LWludCBkbWFfZGlyZWN0X3NldF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBjcHVfc3RhcnQsXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTMxMz1pbnQgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM0Mi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX0NPSEVSRU5UX1BPT0wpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2RtYS9kaXJlY3QuYzozNDM6XFx0ICAgIGRtYV9pc19mcm9tX3Bvb2woY3B1X2FkZHIsIHNpemUpKVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMzQ0LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYz01Mz1zdGF0aWMgdm9pZCB0ZXN0X2RtYV9kaXJlY3RfcHJlc2VydmVfcmVzdG9yZV9jb21tb24oc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTg2LVxcbmtlcm5lbC9kbWEvZGlyZWN0X3Rlc3QuYzo4NzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX0NPSEVSRU5UX1BPT0wpIFxcdTAwMjZcXHUwMDI2IGRtYV9pc19mcm9tX3Bvb2woYWRkcjEsIHNpemUpKSB7XFxua2VybmVsL2RtYS9kaXJlY3RfdGVzdC5jLTg4LVxcdFxcdGV4cGVjdGVkX3JldCA9IC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2RtYS9wb29sLmM9MzAwPWJvb2wgZG1hX2ZyZWVfZnJvbV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKVxcbi0tXFxua2VybmVsL2RtYS9wb29sLmMtMzEzLVxcbmtlcm5lbC9kbWEvcG9vbC5jOjMxNDpib29sIGRtYV9pc19mcm9tX3Bvb2wodm9pZCAqc3RhcnQsIHNpemVfdCBzaXplKVxcbmtlcm5lbC9kbWEvcG9vbC5jLTMxNS17XFxuLS1cXG5rZXJuZWwvZG1hL3Bvb2wuYy0zMjUtfVxcbmtlcm5lbC9kbWEvcG9vbC5jOjMyNjpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGRtYV9pc19mcm9tX3Bvb2wpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNjoyNy4wNjMwNDU5NDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU3NzM0NjE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgaXQgc2VlbXMgdGhlIGNoYW5nZXMgYXJlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgYGRtYV9kaXJlY3RfcHJlc2VydmVfYWxsb2NhdGlvbmAgZnVuY3Rpb24gYW5kIHRoZSBhc3NvY2lhdGVkIEtVbml0IHRlc3QuIFRoaXMgbWVhbnMgdGhlIHByaW1hcnkgaW1wYWN0IGlzIHRoZSBhZGRpdGlvbiBvZiBhbiBBUEkgdGhhdCwgYXMgZmFyIGFzIEkgY2FuIHRlbGwgZnJvbSB0aGUgY29udGV4dCwgaXNuJ3QgYWN0dWFsbHkgKnVzZWQqIGF0IHRoaXMgc3RhZ2UsIGFsb25nIHdpdGggYSB0ZXN0IGZvciB0aGF0IHVudXNlZCBBUEkuXG5cbkdpdmVuIHRoZSBsaW1pdGVkIHNjb3BlIGFuZCB0aGUgbGFjayBvZiBhbnkgYWN0dWFsIHJ1bnRpbWUgdXNhZ2Ugb2YgdGhlIGFkZGVkIGZ1bmN0aW9uLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGZ1enppbmcgdGhpcyBwYXRjaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHJlc291cmNlcy4gSXQncyBlc3NlbnRpYWxseSB0ZXN0aW5nIGFuIHVudXNlZCBmdW5jdGlvbiBpbiBpc29sYXRpb24sIGFuZCBhbnkgZmFpbHVyZXMgaGVyZSB3b3VsZG4ndCBuZWNlc3NhcmlseSByZXZlYWwgbWVhbmluZ2Z1bCB2dWxuZXJhYmlsaXRpZXMgb3IgaW50ZWdyYXRpb24gaXNzdWVzIGluIHRoZSB3aWRlciBzeXN0ZW0uXG5cblRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgKm5vdCogd29ydGggZnV6emluZy4gSSdsbCBmbGFnIHRoZSBgV29ydGhGdXp6aW5nYCBwcm9wZXJ0eSBhcyBgZmFsc2VgLCBhbmQgZG9jdW1lbnQgdGhpcyByZWFzb25pbmcgZXhwbGljaXRseSwgYmVjYXVzZSBldmVuIHRob3VnaCBLVW5pdCB0ZXN0cyBhcmUgaW1wb3J0YW50LCB0aGV5IGRvbid0IGFsd2F5cyBpbmRpY2F0ZSBpZiBzb21ldGhpbmcgbmVlZHMgdG8gYmUgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY3MywiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzoxNjozMS42NDAzOTU3M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGZvciBETUEgZGlyZWN0IGxpdmV1cGRhdGUgcHJlc2VydmF0aW9uIChlLmcuLCBkbWFfcHJlc2VydmVfYWxsb2NhdGlvbl9hdHRycywgZG1hX2RpcmVjdF9wcmVzZXJ2ZV9hbGxvY2F0aW9uKSBhbmQgYSBLVW5pdCB0ZXN0IGZvciBpdC4gSG93ZXZlciwgdGhlIG5ldyBBUEkgaXMgbm90IGN1cnJlbnRseSBjYWxsZWQgYnkgYW55IGRyaXZlciBvciBjb3JlIGtlcm5lbCBjb2RlIG91dHNpZGUgb2YgdGhlIEtVbml0IHRlc3QgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBUEkgZm9yIERNQSBkaXJlY3QgbGl2ZXVwZGF0ZSBwcmVzZXJ2YXRpb24gKGUuZy4sIGRtYV9wcmVzZXJ2ZV9hbGxvY2F0aW9uX2F0dHJzLCBkbWFfZGlyZWN0X3ByZXNlcnZlX2FsbG9jYXRpb24pIGFuZCBhIEtVbml0IHRlc3QgZm9yIGl0LiBIb3dldmVyLCB0aGUgbmV3IEFQSSBpcyBub3QgY3VycmVudGx5IGNhbGxlZCBieSBhbnkgZHJpdmVyIG9yIGNvcmUga2VybmVsIGNvZGUgb3V0c2lkZSBvZiB0aGUgS1VuaXQgdGVzdCBpdHNlbGYuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg27gm[1] Phase: Running StartedAt: 2026-07-09 17:18:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg27gm[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-09 17:18:41 +0000 UTC FinishedAt: 2026-07-09 17:19:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}